summaryrefslogtreecommitdiffstats
path: root/www
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 17:28:19 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 17:28:19 +0000
commit18657a960e125336f704ea058e25c27bd3900dcb (patch)
tree17b438b680ed45a996d7b59951e6aa34023783f2 /www
parentInitial commit. (diff)
downloadsqlite3-18657a960e125336f704ea058e25c27bd3900dcb.tar.xz
sqlite3-18657a960e125336f704ea058e25c27bd3900dcb.zip
Adding upstream version 3.40.1.upstream/3.40.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'www')
-rw-r--r--www/34to35.html945
-rw-r--r--www/35to36.html355
-rw-r--r--www/about.html228
-rw-r--r--www/aff_short.html215
-rw-r--r--www/affcase1.html686
-rw-r--r--www/amalgamation.html288
-rw-r--r--www/appfileformat.html557
-rw-r--r--www/appfunc.html566
-rw-r--r--www/arch.html409
-rw-r--r--www/assert.html370
-rw-r--r--www/asyncvfs.html297
-rw-r--r--www/atomiccommit.html1577
-rw-r--r--www/autoinc.html270
-rw-r--r--www/backup.html491
-rw-r--r--www/bindptr.html596
-rw-r--r--www/books.html442
-rw-r--r--www/bytecodevtab.html232
-rw-r--r--www/c3ref/aggregate_context.html169
-rw-r--r--www/c3ref/aggregate_count.html144
-rw-r--r--www/c3ref/api_routines.html135
-rw-r--r--www/c3ref/auto_extension.html163
-rw-r--r--www/c3ref/autovacuum_pages.html189
-rw-r--r--www/c3ref/backup.html137
-rw-r--r--www/c3ref/backup_finish.html327
-rw-r--r--www/c3ref/bind_blob.html279
-rw-r--r--www/c3ref/bind_parameter_count.html145
-rw-r--r--www/c3ref/bind_parameter_index.html142
-rw-r--r--www/c3ref/bind_parameter_name.html152
-rw-r--r--www/c3ref/blob.html145
-rw-r--r--www/c3ref/blob_bytes.html140
-rw-r--r--www/c3ref/blob_close.html147
-rw-r--r--www/c3ref/blob_open.html216
-rw-r--r--www/c3ref/blob_read.html153
-rw-r--r--www/c3ref/blob_reopen.html149
-rw-r--r--www/c3ref/blob_write.html166
-rw-r--r--www/c3ref/busy_handler.html184
-rw-r--r--www/c3ref/busy_timeout.html147
-rw-r--r--www/c3ref/c_abort.html169
-rw-r--r--www/c3ref/c_abort_rollback.html217
-rw-r--r--www/c3ref/c_access_exists.html149
-rw-r--r--www/c3ref/c_alter_table.html180
-rw-r--r--www/c3ref/c_any.html138
-rw-r--r--www/c3ref/c_blob.html156
-rw-r--r--www/c3ref/c_checkpoint_full.html138
-rw-r--r--www/c3ref/c_config_covering_index_scan.html535
-rw-r--r--www/c3ref/c_dbconfig_defensive.html445
-rw-r--r--www/c3ref/c_dbstatus_options.html263
-rw-r--r--www/c3ref/c_deny.html140
-rw-r--r--www/c3ref/c_deserialize_freeonclose.html150
-rw-r--r--www/c3ref/c_deterministic.html199
-rw-r--r--www/c3ref/c_fail.html142
-rw-r--r--www/c3ref/c_fcntl_begin_atomic_write.html546
-rw-r--r--www/c3ref/c_index_constraint_eq.html181
-rw-r--r--www/c3ref/c_index_scan_unique.html134
-rw-r--r--www/c3ref/c_iocap_atomic.html174
-rw-r--r--www/c3ref/c_limit_attached.html205
-rw-r--r--www/c3ref/c_lock_exclusive.html142
-rw-r--r--www/c3ref/c_mutex_fast.html152
-rw-r--r--www/c3ref/c_open_autoproxy.html168
-rw-r--r--www/c3ref/c_prepare_normalize.html167
-rw-r--r--www/c3ref/c_scanstat_est.html184
-rw-r--r--www/c3ref/c_serialize_nocopy.html141
-rw-r--r--www/c3ref/c_shm_exclusive.html152
-rw-r--r--www/c3ref/c_shm_nlock.html135
-rw-r--r--www/c3ref/c_source_id.html159
-rw-r--r--www/c3ref/c_static.html143
-rw-r--r--www/c3ref/c_status_malloc_count.html212
-rw-r--r--www/c3ref/c_stmtstatus_counter.html208
-rw-r--r--www/c3ref/c_sync_dataonly.html155
-rw-r--r--www/c3ref/c_testctrl_always.html170
-rw-r--r--www/c3ref/c_trace.html185
-rw-r--r--www/c3ref/c_txn_none.html160
-rw-r--r--www/c3ref/c_vtab_constraint_support.html192
-rw-r--r--www/c3ref/c_win32_data_directory_type.html134
-rw-r--r--www/c3ref/cancel_auto_extension.html137
-rw-r--r--www/c3ref/changes.html186
-rw-r--r--www/c3ref/clear_bindings.html134
-rw-r--r--www/c3ref/close.html165
-rw-r--r--www/c3ref/collation_needed.html162
-rw-r--r--www/c3ref/column_blob.html347
-rw-r--r--www/c3ref/column_count.html140
-rw-r--r--www/c3ref/column_database_name.html173
-rw-r--r--www/c3ref/column_decltype.html157
-rw-r--r--www/c3ref/column_name.html154
-rw-r--r--www/c3ref/commit_hook.html174
-rw-r--r--www/c3ref/compileoption_get.html155
-rw-r--r--www/c3ref/complete.html161
-rw-r--r--www/c3ref/config.html158
-rw-r--r--www/c3ref/constlist.html579
-rw-r--r--www/c3ref/context.html171
-rw-r--r--www/c3ref/context_db_handle.html136
-rw-r--r--www/c3ref/create_collation.html228
-rw-r--r--www/c3ref/create_filename.html179
-rw-r--r--www/c3ref/create_function.html290
-rw-r--r--www/c3ref/create_module.html170
-rw-r--r--www/c3ref/data_count.html145
-rw-r--r--www/c3ref/data_directory.html162
-rw-r--r--www/c3ref/database_file_object.html144
-rw-r--r--www/c3ref/db_cacheflush.html157
-rw-r--r--www/c3ref/db_config.html143
-rw-r--r--www/c3ref/db_filename.html156
-rw-r--r--www/c3ref/db_handle.html137
-rw-r--r--www/c3ref/db_mutex.html136
-rw-r--r--www/c3ref/db_name.html146
-rw-r--r--www/c3ref/db_readonly.html134
-rw-r--r--www/c3ref/db_release_memory.html138
-rw-r--r--www/c3ref/db_status.html149
-rw-r--r--www/c3ref/declare_vtab.html135
-rw-r--r--www/c3ref/deserialize.html167
-rw-r--r--www/c3ref/drop_modules.html141
-rw-r--r--www/c3ref/enable_load_extension.html151
-rw-r--r--www/c3ref/enable_shared_cache.html171
-rw-r--r--www/c3ref/errcode.html191
-rw-r--r--www/c3ref/exec.html194
-rw-r--r--www/c3ref/expanded_sql.html171
-rw-r--r--www/c3ref/experimental.html162
-rw-r--r--www/c3ref/extended_result_codes.html134
-rw-r--r--www/c3ref/file.html141
-rw-r--r--www/c3ref/file_control.html166
-rw-r--r--www/c3ref/filename.html145
-rw-r--r--www/c3ref/filename_database.html156
-rw-r--r--www/c3ref/finalize.html152
-rw-r--r--www/c3ref/free.html207
-rw-r--r--www/c3ref/free_table.html207
-rw-r--r--www/c3ref/funclist.html428
-rw-r--r--www/c3ref/get_autocommit.html147
-rw-r--r--www/c3ref/get_auxdata.html184
-rw-r--r--www/c3ref/hard_heap_limit64.html192
-rw-r--r--www/c3ref/index_info.html262
-rw-r--r--www/c3ref/initialize.html205
-rw-r--r--www/c3ref/int64.html157
-rw-r--r--www/c3ref/interrupt.html161
-rw-r--r--www/c3ref/intro.html161
-rw-r--r--www/c3ref/io_methods.html252
-rw-r--r--www/c3ref/keyword_check.html176
-rw-r--r--www/c3ref/last_insert_rowid.html186
-rw-r--r--www/c3ref/libversion.html161
-rw-r--r--www/c3ref/limit.html166
-rw-r--r--www/c3ref/load_extension.html175
-rw-r--r--www/c3ref/log.html148
-rw-r--r--www/c3ref/mem_methods.html200
-rw-r--r--www/c3ref/memory_highwater.html151
-rw-r--r--www/c3ref/module.html178
-rw-r--r--www/c3ref/mprintf.html170
-rw-r--r--www/c3ref/mutex.html137
-rw-r--r--www/c3ref/mutex_alloc.html245
-rw-r--r--www/c3ref/mutex_held.html159
-rw-r--r--www/c3ref/mutex_methods.html203
-rw-r--r--www/c3ref/next_stmt.html140
-rw-r--r--www/c3ref/objlist.html159
-rw-r--r--www/c3ref/open.html417
-rw-r--r--www/c3ref/overload_function.html143
-rw-r--r--www/c3ref/pcache.html138
-rw-r--r--www/c3ref/pcache_methods2.html311
-rw-r--r--www/c3ref/pcache_page.html141
-rw-r--r--www/c3ref/prepare.html267
-rw-r--r--www/c3ref/preupdate_blobwrite.html237
-rw-r--r--www/c3ref/profile.html161
-rw-r--r--www/c3ref/progress_handler.html158
-rw-r--r--www/c3ref/randomness.html148
-rw-r--r--www/c3ref/release_memory.html141
-rw-r--r--www/c3ref/reset.html151
-rw-r--r--www/c3ref/reset_auto_extension.html133
-rw-r--r--www/c3ref/result_blob.html294
-rw-r--r--www/c3ref/result_subtype.html138
-rw-r--r--www/c3ref/serialize.html168
-rw-r--r--www/c3ref/set_authorizer.html218
-rw-r--r--www/c3ref/set_last_insert_rowid.html134
-rw-r--r--www/c3ref/sleep.html144
-rw-r--r--www/c3ref/snapshot.html154
-rw-r--r--www/c3ref/snapshot_cmp.html154
-rw-r--r--www/c3ref/snapshot_free.html137
-rw-r--r--www/c3ref/snapshot_get.html173
-rw-r--r--www/c3ref/snapshot_open.html173
-rw-r--r--www/c3ref/snapshot_recover.html149
-rw-r--r--www/c3ref/soft_heap_limit.html135
-rw-r--r--www/c3ref/sqlite3.html229
-rw-r--r--www/c3ref/status.html159
-rw-r--r--www/c3ref/step.html208
-rw-r--r--www/c3ref/stmt.html220
-rw-r--r--www/c3ref/stmt_busy.html145
-rw-r--r--www/c3ref/stmt_isexplain.html136
-rw-r--r--www/c3ref/stmt_readonly.html173
-rw-r--r--www/c3ref/stmt_scanstatus.html162
-rw-r--r--www/c3ref/stmt_scanstatus_reset.html135
-rw-r--r--www/c3ref/stmt_status.html150
-rw-r--r--www/c3ref/str.html159
-rw-r--r--www/c3ref/str_append.html163
-rw-r--r--www/c3ref/str_errcode.html157
-rw-r--r--www/c3ref/str_finish.html139
-rw-r--r--www/c3ref/str_new.html151
-rw-r--r--www/c3ref/strglob.html141
-rw-r--r--www/c3ref/stricmp.html136
-rw-r--r--www/c3ref/strlike.html147
-rw-r--r--www/c3ref/system_errno.html137
-rw-r--r--www/c3ref/table_column_metadata.html205
-rw-r--r--www/c3ref/temp_directory.html183
-rw-r--r--www/c3ref/test_control.html144
-rw-r--r--www/c3ref/threadsafe.html163
-rw-r--r--www/c3ref/total_changes.html166
-rw-r--r--www/c3ref/trace_v2.html160
-rw-r--r--www/c3ref/txn_state.html142
-rw-r--r--www/c3ref/unlock_notify.html245
-rw-r--r--www/c3ref/update_hook.html179
-rw-r--r--www/c3ref/uri_boolean.html196
-rw-r--r--www/c3ref/user_data.html139
-rw-r--r--www/c3ref/value.html193
-rw-r--r--www/c3ref/value_blob.html279
-rw-r--r--www/c3ref/value_dup.html142
-rw-r--r--www/c3ref/value_subtype.html136
-rw-r--r--www/c3ref/vfs.html337
-rw-r--r--www/c3ref/vfs_find.html158
-rw-r--r--www/c3ref/vtab.html149
-rw-r--r--www/c3ref/vtab_collation.html159
-rw-r--r--www/c3ref/vtab_config.html145
-rw-r--r--www/c3ref/vtab_cursor.html146
-rw-r--r--www/c3ref/vtab_distinct.html197
-rw-r--r--www/c3ref/vtab_in.html198
-rw-r--r--www/c3ref/vtab_in_first.html174
-rw-r--r--www/c3ref/vtab_nochange.html151
-rw-r--r--www/c3ref/vtab_on_conflict.html137
-rw-r--r--www/c3ref/vtab_rhs_value.html166
-rw-r--r--www/c3ref/wal_autocheckpoint.html155
-rw-r--r--www/c3ref/wal_checkpoint.html146
-rw-r--r--www/c3ref/wal_checkpoint_v2.html224
-rw-r--r--www/c3ref/wal_hook.html165
-rw-r--r--www/c3ref/win32_set_directory.html151
-rw-r--r--www/c_interface.html1241
-rw-r--r--www/capi3.html632
-rw-r--r--www/capi3ref.html11710
-rw-r--r--www/carray.html240
-rw-r--r--www/changes.html6700
-rw-r--r--www/chronology.html923
-rw-r--r--www/cintro.html600
-rw-r--r--www/cksumvfs.html314
-rw-r--r--www/cli.html2007
-rw-r--r--www/codeofconduct.html140
-rw-r--r--www/codeofethics.html336
-rw-r--r--www/compile.html2047
-rw-r--r--www/completion.html187
-rw-r--r--www/conflict.html179
-rw-r--r--www/consortium.html251
-rw-r--r--www/consortium_agreement-20071201.html558
-rw-r--r--www/copyright-release.html110
-rw-r--r--www/copyright-release.pdfbin0 -> 2848 bytes
-rw-r--r--www/copyright.html239
-rw-r--r--www/cpu.html377
-rw-r--r--www/crew.html168
-rw-r--r--www/csv.html240
-rw-r--r--www/custombuild.html403
-rw-r--r--www/cves.html714
-rw-r--r--www/cvstrac.css315
-rw-r--r--www/datatype3.html967
-rw-r--r--www/datatypes.html355
-rw-r--r--www/dbhash.html193
-rw-r--r--www/dbpage.html236
-rw-r--r--www/dbstat.html360
-rw-r--r--www/debugging.html253
-rw-r--r--www/deterministic.html255
-rw-r--r--www/different.html358
-rw-r--r--www/doc_backlink_crossref.html14332
-rw-r--r--www/doc_keyword_crossref.html119
-rw-r--r--www/doc_pagelink_crossref.html1171
-rw-r--r--www/doc_target_crossref.html2022
-rw-r--r--www/doclist.html341
-rw-r--r--www/docs.html753
-rw-r--r--www/download.html226
-rw-r--r--www/eqp.html458
-rw-r--r--www/errlog.html312
-rw-r--r--www/expridx.html265
-rw-r--r--www/famous.html569
-rw-r--r--www/faq.html648
-rw-r--r--www/fasterthanfs.html644
-rw-r--r--www/favicon.icobin0 -> 318 bytes
-rw-r--r--www/features.html196
-rw-r--r--www/fileformat.html2205
-rw-r--r--www/fileformat2.html2205
-rw-r--r--www/flextypegood.html495
-rw-r--r--www/floatingpoint.html485
-rw-r--r--www/footprint.html220
-rw-r--r--www/foreignkeys.html1046
-rw-r--r--www/formatchng.html166
-rw-r--r--www/fts3.html3286
-rw-r--r--www/fts5.html3364
-rw-r--r--www/fullsql.html187
-rw-r--r--www/gencol.html308
-rw-r--r--www/geopoly.html568
-rw-r--r--www/getthecode.html241
-rw-r--r--www/hirely.html173
-rw-r--r--www/howitworks.html387
-rw-r--r--www/howtocompile.html460
-rw-r--r--www/howtocorrupt.html813
-rw-r--r--www/hp1.html124
-rw-r--r--www/images/2005osaward.gifbin0 -> 3750 bytes
-rw-r--r--www/images/SQLite.gifbin0 -> 3062 bytes
-rw-r--r--www/images/SQLite_big.gifbin0 -> 7428 bytes
-rw-r--r--www/images/ac/commit-0.gifbin0 -> 5543 bytes
-rw-r--r--www/images/ac/commit-1.gifbin0 -> 6153 bytes
-rw-r--r--www/images/ac/commit-2.gifbin0 -> 8476 bytes
-rw-r--r--www/images/ac/commit-3.gifbin0 -> 7110 bytes
-rw-r--r--www/images/ac/commit-4.gifbin0 -> 11204 bytes
-rw-r--r--www/images/ac/commit-5.gifbin0 -> 10078 bytes
-rw-r--r--www/images/ac/commit-6.gifbin0 -> 10054 bytes
-rw-r--r--www/images/ac/commit-7.gifbin0 -> 9810 bytes
-rw-r--r--www/images/ac/commit-8.gifbin0 -> 10692 bytes
-rw-r--r--www/images/ac/commit-9.gifbin0 -> 10690 bytes
-rw-r--r--www/images/ac/commit-A.gifbin0 -> 12995 bytes
-rw-r--r--www/images/ac/commit-B.gifbin0 -> 6323 bytes
-rw-r--r--www/images/ac/multi-0.gifbin0 -> 6404 bytes
-rw-r--r--www/images/ac/multi-1.gifbin0 -> 11898 bytes
-rw-r--r--www/images/ac/multi-2.gifbin0 -> 13179 bytes
-rw-r--r--www/images/ac/multi-3.gifbin0 -> 11986 bytes
-rw-r--r--www/images/ac/multi-4.gifbin0 -> 13763 bytes
-rw-r--r--www/images/ac/multi-5.gifbin0 -> 7686 bytes
-rw-r--r--www/images/ac/rollback-0.gifbin0 -> 7755 bytes
-rw-r--r--www/images/ac/rollback-1.gifbin0 -> 9395 bytes
-rw-r--r--www/images/ac/rollback-2.gifbin0 -> 8740 bytes
-rw-r--r--www/images/ac/rollback-3.gifbin0 -> 10129 bytes
-rw-r--r--www/images/ac/rollback-4.gifbin0 -> 10814 bytes
-rw-r--r--www/images/ac/rollback-5.gifbin0 -> 6451 bytes
-rw-r--r--www/images/apple-touch-icon.pngbin0 -> 8965 bytes
-rw-r--r--www/images/books/aditya.jpgbin0 -> 7320 bytes
-rw-r--r--www/images/books/darocha2016.jpgbin0 -> 9744 bytes
-rw-r--r--www/images/books/das.jpgbin0 -> 7586 bytes
-rw-r--r--www/images/books/droessler.jpgbin0 -> 3921 bytes
-rw-r--r--www/images/books/haldar.gifbin0 -> 15370 bytes
-rw-r--r--www/images/books/haldar2.jpgbin0 -> 10837 bytes
-rw-r--r--www/images/books/kreibich.gifbin0 -> 11402 bytes
-rw-r--r--www/images/books/newman.jpgbin0 -> 10529 bytes
-rw-r--r--www/images/books/nishizawa2.jpgbin0 -> 13917 bytes
-rw-r--r--www/images/books/owens.jpgbin0 -> 7653 bytes
-rw-r--r--www/images/books/sanderson2018.jpgbin0 -> 5148 bytes
-rw-r--r--www/images/books/symbiansql.jpgbin0 -> 8692 bytes
-rw-r--r--www/images/books/vanderLans.jpgbin0 -> 13495 bytes
-rw-r--r--www/images/btreemodule_balance_deeper.svg211
-rw-r--r--www/images/btreemodule_balance_quick.svg328
-rw-r--r--www/images/btreemodule_balance_shallower.svg211
-rw-r--r--www/images/btreemodule_delete1.svg238
-rw-r--r--www/images/btreemodule_overview.svg385
-rw-r--r--www/images/cc-diff.jpgbin0 -> 53229 bytes
-rw-r--r--www/images/chart.wiki0
-rw-r--r--www/images/chw.jpgbin0 -> 8732 bytes
-rw-r--r--www/images/cpu-usage.jpgbin0 -> 40581 bytes
-rw-r--r--www/images/dan1.jpgbin0 -> 29136 bytes
-rw-r--r--www/images/direct1b.gifbin0 -> 11439 bytes
-rw-r--r--www/images/drh1.jpgbin0 -> 11073 bytes
-rw-r--r--www/images/faster-read-blobapi.jpgbin0 -> 19050 bytes
-rw-r--r--www/images/faster-read-mmap.jpgbin0 -> 20737 bytes
-rw-r--r--www/images/faster-read-sql.jpgbin0 -> 16788 bytes
-rw-r--r--www/images/faster-write-safe.jpgbin0 -> 15324 bytes
-rw-r--r--www/images/faster-write-unsafe.jpgbin0 -> 17856 bytes
-rw-r--r--www/images/fileformat/db_connection.gifbin0 -> 8873 bytes
-rw-r--r--www/images/fileformat/examplepop.gifbin0 -> 8204 bytes
-rw-r--r--www/images/fileformat/fileio_diagrams.odgbin0 -> 32575 bytes
-rw-r--r--www/images/fileformat/filesystem1.gifbin0 -> 11596 bytes
-rw-r--r--www/images/fileformat/filesystem2.gifbin0 -> 7191 bytes
-rw-r--r--www/images/fileformat/freelistpage.gifbin0 -> 3668 bytes
-rw-r--r--www/images/fileformat/indexlongrecord.gifbin0 -> 5688 bytes
-rw-r--r--www/images/fileformat/indexpage.gifbin0 -> 5501 bytes
-rw-r--r--www/images/fileformat/indexpage.odgbin0 -> 16848 bytes
-rw-r--r--www/images/fileformat/indexshortrecord.gifbin0 -> 5073 bytes
-rw-r--r--www/images/fileformat/indextree.gifbin0 -> 5859 bytes
-rw-r--r--www/images/fileformat/journal_format.gifbin0 -> 5342 bytes
-rw-r--r--www/images/fileformat/journal_header.gifbin0 -> 5775 bytes
-rw-r--r--www/images/fileformat/journal_record.gifbin0 -> 3170 bytes
-rw-r--r--www/images/fileformat/master_journal_ptr.gifbin0 -> 4799 bytes
-rw-r--r--www/images/fileformat/overflowpage.gifbin0 -> 2941 bytes
-rw-r--r--www/images/fileformat/pointermapentry.gifbin0 -> 2285 bytes
-rw-r--r--www/images/fileformat/recordformat.gifbin0 -> 4257 bytes
-rw-r--r--www/images/fileformat/rtdocs.css81
-rw-r--r--www/images/fileformat/rtdocs.js116
-rw-r--r--www/images/fileformat/tablelongrecord.gifbin0 -> 4788 bytes
-rw-r--r--www/images/fileformat/tablenodecell.gifbin0 -> 2405 bytes
-rw-r--r--www/images/fileformat/tableshortrecord.gifbin0 -> 3174 bytes
-rw-r--r--www/images/fileformat/tabletree.gifbin0 -> 5457 bytes
-rw-r--r--www/images/fileformat/vfs_role.gifbin0 -> 8715 bytes
-rw-r--r--www/images/fileformat/write_transaction.gifbin0 -> 19573 bytes
-rw-r--r--www/images/foreignlogos/adobe-logo.gifbin0 -> 897 bytes
-rw-r--r--www/images/foreignlogos/adobe.gifbin0 -> 3154 bytes
-rw-r--r--www/images/foreignlogos/airbus1.gifbin0 -> 3745 bytes
-rw-r--r--www/images/foreignlogos/airbus2.gifbin0 -> 2795 bytes
-rw-r--r--www/images/foreignlogos/apple.gifbin0 -> 6036 bytes
-rw-r--r--www/images/foreignlogos/bentley.gifbin0 -> 7934 bytes
-rw-r--r--www/images/foreignlogos/bentley.jpgbin0 -> 600639 bytes
-rw-r--r--www/images/foreignlogos/bloomberg.pngbin0 -> 24783 bytes
-rw-r--r--www/images/foreignlogos/bosch_logo1.gifbin0 -> 3970 bytes
-rw-r--r--www/images/foreignlogos/dropbox.gifbin0 -> 3634 bytes
-rw-r--r--www/images/foreignlogos/expensify.pngbin0 -> 15254 bytes
-rw-r--r--www/images/foreignlogos/fb.gifbin0 -> 3099 bytes
-rw-r--r--www/images/foreignlogos/firefox.gifbin0 -> 5157 bytes
-rw-r--r--www/images/foreignlogos/ge.gifbin0 -> 5566 bytes
-rw-r--r--www/images/foreignlogos/google.gifbin0 -> 3584 bytes
-rw-r--r--www/images/foreignlogos/intuit.gifbin0 -> 4340 bytes
-rw-r--r--www/images/foreignlogos/loc.gifbin0 -> 2634 bytes
-rw-r--r--www/images/foreignlogos/loc.jpgbin0 -> 5429 bytes
-rw-r--r--www/images/foreignlogos/mcaffee.gifbin0 -> 2800 bytes
-rw-r--r--www/images/foreignlogos/microsoft.gifbin0 -> 2462 bytes
-rw-r--r--www/images/foreignlogos/monotone.gifbin0 -> 3497 bytes
-rw-r--r--www/images/foreignlogos/mozilla.gifbin0 -> 3065 bytes
-rw-r--r--www/images/foreignlogos/nds.pngbin0 -> 7299 bytes
-rw-r--r--www/images/foreignlogos/nokia.gifbin0 -> 805 bytes
-rw-r--r--www/images/foreignlogos/oracle.gifbin0 -> 2068 bytes
-rw-r--r--www/images/foreignlogos/philips.gifbin0 -> 6762 bytes
-rw-r--r--www/images/foreignlogos/php.gifbin0 -> 3742 bytes
-rw-r--r--www/images/foreignlogos/python.gifbin0 -> 2506 bytes
-rw-r--r--www/images/foreignlogos/rpm_logo.pngbin0 -> 23575 bytes
-rw-r--r--www/images/foreignlogos/skype.gifbin0 -> 3628 bytes
-rw-r--r--www/images/foreignlogos/sony.gifbin0 -> 4350 bytes
-rw-r--r--www/images/foreignlogos/sunmicro.gifbin0 -> 5197 bytes
-rw-r--r--www/images/foreignlogos/symbian.gifbin0 -> 1731 bytes
-rw-r--r--www/images/foreignlogos/tcl.gifbin0 -> 1755 bytes
-rw-r--r--www/images/foreignlogos/xojo.pngbin0 -> 11455 bytes
-rw-r--r--www/images/fts3_doclist.pngbin0 -> 23433 bytes
-rw-r--r--www/images/fts3_doclist.svg427
-rw-r--r--www/images/fts3_doclist2.pngbin0 -> 9405 bytes
-rw-r--r--www/images/fts3_doclist2.svg197
-rw-r--r--www/images/fts3_interior_node.pngbin0 -> 29653 bytes
-rw-r--r--www/images/fts3_interior_node.svg387
-rw-r--r--www/images/fts3_leaf_node.pngbin0 -> 28294 bytes
-rw-r--r--www/images/fts3_leaf_node.svg375
-rw-r--r--www/images/fts5_formula.odfbin0 -> 9715 bytes
-rw-r--r--www/images/fts5_formula1.pngbin0 -> 7384 bytes
-rw-r--r--www/images/fts5_formula2.pngbin0 -> 4503 bytes
-rw-r--r--www/images/fts5_formula3.pngbin0 -> 3811 bytes
-rw-r--r--www/images/fullscanb.gifbin0 -> 11946 bytes
-rw-r--r--www/images/harmony.gifbin0 -> 14508 bytes
-rw-r--r--www/images/index-ex1-x-b.gifbin0 -> 23173 bytes
-rw-r--r--www/images/indirect1b1.gifbin0 -> 18098 bytes
-rw-r--r--www/images/joe1.jpgbin0 -> 53994 bytes
-rw-r--r--www/images/loc.jpgbin0 -> 78248 bytes
-rw-r--r--www/images/ne.gifbin0 -> 68 bytes
-rw-r--r--www/images/ne.pngbin0 -> 280 bytes
-rw-r--r--www/images/nocopy.gifbin0 -> 3449 bytes
-rw-r--r--www/images/nw.gifbin0 -> 67 bytes
-rw-r--r--www/images/nw.pngbin0 -> 285 bytes
-rw-r--r--www/images/powered_by_sqlite.gifbin0 -> 3391 bytes
-rw-r--r--www/images/private_branch.gifbin0 -> 13776 bytes
-rw-r--r--www/images/qp/fqp1.gifbin0 -> 19973 bytes
-rw-r--r--www/images/qp/fqp1.pikchr36
-rw-r--r--www/images/qp/fruitobstate.gifbin0 -> 6949 bytes
-rw-r--r--www/images/qp/fruitobstate0.gifbin0 -> 12381 bytes
-rw-r--r--www/images/qp/fullscan.gifbin0 -> 7539 bytes
-rw-r--r--www/images/qp/idx1.gifbin0 -> 3954 bytes
-rw-r--r--www/images/qp/idx1lu1.gifbin0 -> 10702 bytes
-rw-r--r--www/images/qp/idx1lu2.gifbin0 -> 11201 bytes
-rw-r--r--www/images/qp/idx1lu3.gifbin0 -> 11175 bytes
-rw-r--r--www/images/qp/idx2.gifbin0 -> 3052 bytes
-rw-r--r--www/images/qp/idx2lu1.gifbin0 -> 10434 bytes
-rw-r--r--www/images/qp/idx3.gifbin0 -> 5205 bytes
-rw-r--r--www/images/qp/idx3lu1.gifbin0 -> 11927 bytes
-rw-r--r--www/images/qp/idx3lu2.gifbin0 -> 11013 bytes
-rw-r--r--www/images/qp/idx4.gifbin0 -> 6443 bytes
-rw-r--r--www/images/qp/idx4lu1.gifbin0 -> 7110 bytes
-rw-r--r--www/images/qp/obfruitidx1.gifbin0 -> 12100 bytes
-rw-r--r--www/images/qp/obfruitidx4.gifbin0 -> 7703 bytes
-rw-r--r--www/images/qp/obfruitnoidx.gifbin0 -> 8892 bytes
-rw-r--r--www/images/qp/obrowid.gifbin0 -> 7815 bytes
-rw-r--r--www/images/qp/orquery.gifbin0 -> 15623 bytes
-rw-r--r--www/images/qp/partial-sort.gifbin0 -> 15856 bytes
-rw-r--r--www/images/qp/rowidlu.gifbin0 -> 7182 bytes
-rw-r--r--www/images/qp/tab.gifbin0 -> 6392 bytes
-rw-r--r--www/images/qp/tpchq8.gifbin0 -> 33576 bytes
-rw-r--r--www/images/qp/tpchq8.pikchr53
-rw-r--r--www/images/se.gifbin0 -> 67 bytes
-rw-r--r--www/images/se.pngbin0 -> 205 bytes
-rw-r--r--www/images/shane1.jpgbin0 -> 18309 bytes
-rw-r--r--www/images/shared.gifbin0 -> 5787 bytes
-rw-r--r--www/images/sqlite370.jpgbin0 -> 80726 bytes
-rw-r--r--www/images/sqlite370_banner.gifbin0 -> 5452 bytes
-rw-r--r--www/images/sqlitepie.jpgbin0 -> 109782 bytes
-rw-r--r--www/images/src_logo.gifbin0 -> 3348 bytes
-rw-r--r--www/images/sschart20221116.jpgbin0 -> 59270 bytes
-rw-r--r--www/images/sw.gifbin0 -> 67 bytes
-rw-r--r--www/images/sw.pngbin0 -> 255 bytes
-rw-r--r--www/images/table-ex1b2.gifbin0 -> 10888 bytes
-rw-r--r--www/images/vfs1.gifbin0 -> 12322 bytes
-rw-r--r--www/imposter.html351
-rw-r--r--www/index.html290
-rw-r--r--www/inmemorydb.html252
-rw-r--r--www/intern-v-extern-blob.html212
-rw-r--r--www/invalidutf.html230
-rw-r--r--www/isolation.html370
-rw-r--r--www/json1.html1169
-rw-r--r--www/keyword_index.html3103
-rw-r--r--www/lang.html433
-rw-r--r--www/lang_aggfunc.html2518
-rw-r--r--www/lang_altertable.html3330
-rw-r--r--www/lang_analyze.html350
-rw-r--r--www/lang_attach.html2421
-rw-r--r--www/lang_comment.html209
-rw-r--r--www/lang_conflict.html294
-rw-r--r--www/lang_corefunc.html632
-rw-r--r--www/lang_createindex.html2567
-rw-r--r--www/lang_createtable.html5895
-rw-r--r--www/lang_createtrigger.html4354
-rw-r--r--www/lang_createview.html2413
-rw-r--r--www/lang_createvtab.html244
-rw-r--r--www/lang_datefunc.html541
-rw-r--r--www/lang_delete.html3797
-rw-r--r--www/lang_detach.html167
-rw-r--r--www/lang_dropindex.html181
-rw-r--r--www/lang_droptable.html200
-rw-r--r--www/lang_droptrigger.html176
-rw-r--r--www/lang_dropview.html191
-rw-r--r--www/lang_explain.html398
-rw-r--r--www/lang_expr.html3374
-rw-r--r--www/lang_indexedby.html260
-rw-r--r--www/lang_insert.html2864
-rw-r--r--www/lang_keywords.html361
-rw-r--r--www/lang_mathfunc.html318
-rw-r--r--www/lang_naming.html166
-rw-r--r--www/lang_reindex.html204
-rw-r--r--www/lang_replace.html133
-rw-r--r--www/lang_returning.html2586
-rw-r--r--www/lang_savepoint.html325
-rw-r--r--www/lang_select.html16070
-rw-r--r--www/lang_transaction.html445
-rw-r--r--www/lang_update.html4541
-rw-r--r--www/lang_upsert.html2680
-rw-r--r--www/lang_vacuum.html297
-rw-r--r--www/lang_with.html3195
-rw-r--r--www/lemon.html295
-rw-r--r--www/limits.html535
-rw-r--r--www/loadext.html493
-rw-r--r--www/lockingv3.html697
-rw-r--r--www/locrsf.html197
-rw-r--r--www/lts.html241
-rw-r--r--www/malloc.html1142
-rw-r--r--www/memstat.html203
-rw-r--r--www/mingw.html244
-rw-r--r--www/mmap.html277
-rw-r--r--www/mostdeployed.html190
-rw-r--r--www/news.html748
-rw-r--r--www/np1queryprob.html516
-rw-r--r--www/nulinstr.html237
-rw-r--r--www/nulls.html440
-rw-r--r--www/oldnews.html1855
-rw-r--r--www/omitted.html157
-rw-r--r--www/onefile.html168
-rw-r--r--www/opcode.html2623
-rw-r--r--www/optoverview.html1623
-rw-r--r--www/partialindex.html2694
-rw-r--r--www/pgszchng2016.html189
-rw-r--r--www/pragma.html2254
-rw-r--r--www/pressrelease-20071212.html123
-rw-r--r--www/printf.html549
-rw-r--r--www/privatebranch.html532
-rw-r--r--www/prosupport.html444
-rw-r--r--www/psow.html286
-rw-r--r--www/qmplan.html564
-rw-r--r--www/queryplanner-ng.html1052
-rw-r--r--www/queryplanner.html1037
-rw-r--r--www/quickstart.html230
-rw-r--r--www/quirks.html534
-rw-r--r--www/rbu.html765
-rw-r--r--www/recovery.html384
-rw-r--r--www/releaselog/3_0_0.html140
-rw-r--r--www/releaselog/3_0_1.html132
-rw-r--r--www/releaselog/3_0_2.html130
-rw-r--r--www/releaselog/3_0_3.html133
-rw-r--r--www/releaselog/3_0_4.html136
-rw-r--r--www/releaselog/3_0_5.html141
-rw-r--r--www/releaselog/3_0_6.html135
-rw-r--r--www/releaselog/3_0_7.html142
-rw-r--r--www/releaselog/3_0_8.html141
-rw-r--r--www/releaselog/3_10_0.html176
-rw-r--r--www/releaselog/3_10_1.html185
-rw-r--r--www/releaselog/3_10_2.html197
-rw-r--r--www/releaselog/3_11_0.html176
-rw-r--r--www/releaselog/3_11_1.html183
-rw-r--r--www/releaselog/3_12_0.html188
-rw-r--r--www/releaselog/3_12_1.html199
-rw-r--r--www/releaselog/3_12_2.html215
-rw-r--r--www/releaselog/3_13_0.html191
-rw-r--r--www/releaselog/3_14.html186
-rw-r--r--www/releaselog/3_14_1.html194
-rw-r--r--www/releaselog/3_14_2.html211
-rw-r--r--www/releaselog/3_15_0.html166
-rw-r--r--www/releaselog/3_15_1.html182
-rw-r--r--www/releaselog/3_15_2.html193
-rw-r--r--www/releaselog/3_16_0.html160
-rw-r--r--www/releaselog/3_16_1.html168
-rw-r--r--www/releaselog/3_16_2.html189
-rw-r--r--www/releaselog/3_17_0.html191
-rw-r--r--www/releaselog/3_18_0.html170
-rw-r--r--www/releaselog/3_18_1.html177
-rw-r--r--www/releaselog/3_18_2.html183
-rw-r--r--www/releaselog/3_19_0.html181
-rw-r--r--www/releaselog/3_19_1.html188
-rw-r--r--www/releaselog/3_19_2.html193
-rw-r--r--www/releaselog/3_19_3.html199
-rw-r--r--www/releaselog/3_1_0.html142
-rw-r--r--www/releaselog/3_1_1.html133
-rw-r--r--www/releaselog/3_1_2.html137
-rw-r--r--www/releaselog/3_1_3.html134
-rw-r--r--www/releaselog/3_1_4.html142
-rw-r--r--www/releaselog/3_1_5.html131
-rw-r--r--www/releaselog/3_1_6.html134
-rw-r--r--www/releaselog/3_20_0.html225
-rw-r--r--www/releaselog/3_20_1.html231
-rw-r--r--www/releaselog/3_21_0.html209
-rw-r--r--www/releaselog/3_22_0.html227
-rw-r--r--www/releaselog/3_23_0.html224
-rw-r--r--www/releaselog/3_23_1.html241
-rw-r--r--www/releaselog/3_24_0.html197
-rw-r--r--www/releaselog/3_25_0.html184
-rw-r--r--www/releaselog/3_25_1.html199
-rw-r--r--www/releaselog/3_25_2.html213
-rw-r--r--www/releaselog/3_25_3.html227
-rw-r--r--www/releaselog/3_26_0.html181
-rw-r--r--www/releaselog/3_27_0.html207
-rw-r--r--www/releaselog/3_27_1.html215
-rw-r--r--www/releaselog/3_27_2.html224
-rw-r--r--www/releaselog/3_28_0.html197
-rw-r--r--www/releaselog/3_29_0.html159
-rw-r--r--www/releaselog/3_2_0.html133
-rw-r--r--www/releaselog/3_2_1.html131
-rw-r--r--www/releaselog/3_2_2.html137
-rw-r--r--www/releaselog/3_2_3.html156
-rw-r--r--www/releaselog/3_2_4.html133
-rw-r--r--www/releaselog/3_2_5.html137
-rw-r--r--www/releaselog/3_2_6.html143
-rw-r--r--www/releaselog/3_2_7.html138
-rw-r--r--www/releaselog/3_2_8.html133
-rw-r--r--www/releaselog/3_30_0.html159
-rw-r--r--www/releaselog/3_30_1.html169
-rw-r--r--www/releaselog/3_31_0.html170
-rw-r--r--www/releaselog/3_31_1.html183
-rw-r--r--www/releaselog/3_32_0.html164
-rw-r--r--www/releaselog/3_32_1.html174
-rw-r--r--www/releaselog/3_32_2.html181
-rw-r--r--www/releaselog/3_32_3.html191
-rw-r--r--www/releaselog/3_33_0.html165
-rw-r--r--www/releaselog/3_34_0.html182
-rw-r--r--www/releaselog/3_34_1.html190
-rw-r--r--www/releaselog/3_35_0.html195
-rw-r--r--www/releaselog/3_35_1.html203
-rw-r--r--www/releaselog/3_35_2.html219
-rw-r--r--www/releaselog/3_35_3.html246
-rw-r--r--www/releaselog/3_35_4.html259
-rw-r--r--www/releaselog/3_35_5.html266
-rw-r--r--www/releaselog/3_36_0.html155
-rw-r--r--www/releaselog/3_37_0.html164
-rw-r--r--www/releaselog/3_37_1.html175
-rw-r--r--www/releaselog/3_37_2.html190
-rw-r--r--www/releaselog/3_38_0.html180
-rw-r--r--www/releaselog/3_38_1.html197
-rw-r--r--www/releaselog/3_38_2.html209
-rw-r--r--www/releaselog/3_38_3.html221
-rw-r--r--www/releaselog/3_38_4.html232
-rw-r--r--www/releaselog/3_38_5.html237
-rw-r--r--www/releaselog/3_39_0.html152
-rw-r--r--www/releaselog/3_39_1.html172
-rw-r--r--www/releaselog/3_39_2.html180
-rw-r--r--www/releaselog/3_39_3.html193
-rw-r--r--www/releaselog/3_39_4.html207
-rw-r--r--www/releaselog/3_3_0.html144
-rw-r--r--www/releaselog/3_3_1.html133
-rw-r--r--www/releaselog/3_3_10.html142
-rw-r--r--www/releaselog/3_3_11.html138
-rw-r--r--www/releaselog/3_3_12.html136
-rw-r--r--www/releaselog/3_3_13.html147
-rw-r--r--www/releaselog/3_3_14.html168
-rw-r--r--www/releaselog/3_3_15.html138
-rw-r--r--www/releaselog/3_3_16.html139
-rw-r--r--www/releaselog/3_3_17.html133
-rw-r--r--www/releaselog/3_3_2.html133
-rw-r--r--www/releaselog/3_3_3.html138
-rw-r--r--www/releaselog/3_3_4.html140
-rw-r--r--www/releaselog/3_3_5.html147
-rw-r--r--www/releaselog/3_3_6.html140
-rw-r--r--www/releaselog/3_3_7.html136
-rw-r--r--www/releaselog/3_3_8.html139
-rw-r--r--www/releaselog/3_3_9.html159
-rw-r--r--www/releaselog/3_40_0.html181
-rw-r--r--www/releaselog/3_40_1.html190
-rw-r--r--www/releaselog/3_4_0.html183
-rw-r--r--www/releaselog/3_4_1.html155
-rw-r--r--www/releaselog/3_4_2.html146
-rw-r--r--www/releaselog/3_5_0.html144
-rw-r--r--www/releaselog/3_5_1.html147
-rw-r--r--www/releaselog/3_5_2.html140
-rw-r--r--www/releaselog/3_5_3.html148
-rw-r--r--www/releaselog/3_5_4.html153
-rw-r--r--www/releaselog/3_5_5.html133
-rw-r--r--www/releaselog/3_5_6.html136
-rw-r--r--www/releaselog/3_5_7.html150
-rw-r--r--www/releaselog/3_5_8.html154
-rw-r--r--www/releaselog/3_5_9.html148
-rw-r--r--www/releaselog/3_6_0.html161
-rw-r--r--www/releaselog/3_6_1.html142
-rw-r--r--www/releaselog/3_6_10.html131
-rw-r--r--www/releaselog/3_6_11.html136
-rw-r--r--www/releaselog/3_6_12.html140
-rw-r--r--www/releaselog/3_6_13.html136
-rw-r--r--www/releaselog/3_6_14.html138
-rw-r--r--www/releaselog/3_6_14_1.html133
-rw-r--r--www/releaselog/3_6_14_2.html132
-rw-r--r--www/releaselog/3_6_15.html147
-rw-r--r--www/releaselog/3_6_16.html132
-rw-r--r--www/releaselog/3_6_16_1.html131
-rw-r--r--www/releaselog/3_6_17.html135
-rw-r--r--www/releaselog/3_6_18.html148
-rw-r--r--www/releaselog/3_6_19.html138
-rw-r--r--www/releaselog/3_6_2.html132
-rw-r--r--www/releaselog/3_6_20.html133
-rw-r--r--www/releaselog/3_6_21.html153
-rw-r--r--www/releaselog/3_6_22.html133
-rw-r--r--www/releaselog/3_6_23.html145
-rw-r--r--www/releaselog/3_6_23_1.html133
-rw-r--r--www/releaselog/3_6_3.html132
-rw-r--r--www/releaselog/3_6_4.html147
-rw-r--r--www/releaselog/3_6_5.html144
-rw-r--r--www/releaselog/3_6_6.html134
-rw-r--r--www/releaselog/3_6_6_1.html132
-rw-r--r--www/releaselog/3_6_6_2.html133
-rw-r--r--www/releaselog/3_6_7.html140
-rw-r--r--www/releaselog/3_6_8.html136
-rw-r--r--www/releaselog/3_6_9.html132
-rw-r--r--www/releaselog/3_7_0.html139
-rw-r--r--www/releaselog/3_7_0_1.html135
-rw-r--r--www/releaselog/3_7_1.html145
-rw-r--r--www/releaselog/3_7_10.html193
-rw-r--r--www/releaselog/3_7_11.html156
-rw-r--r--www/releaselog/3_7_12.html167
-rw-r--r--www/releaselog/3_7_12_1.html137
-rw-r--r--www/releaselog/3_7_13.html151
-rw-r--r--www/releaselog/3_7_14.html156
-rw-r--r--www/releaselog/3_7_14_1.html139
-rw-r--r--www/releaselog/3_7_15.html170
-rw-r--r--www/releaselog/3_7_15_1.html137
-rw-r--r--www/releaselog/3_7_15_2.html137
-rw-r--r--www/releaselog/3_7_16.html182
-rw-r--r--www/releaselog/3_7_16_1.html199
-rw-r--r--www/releaselog/3_7_16_2.html207
-rw-r--r--www/releaselog/3_7_17.html211
-rw-r--r--www/releaselog/3_7_2.html132
-rw-r--r--www/releaselog/3_7_3.html154
-rw-r--r--www/releaselog/3_7_4.html150
-rw-r--r--www/releaselog/3_7_5.html154
-rw-r--r--www/releaselog/3_7_6.html156
-rw-r--r--www/releaselog/3_7_6_1.html136
-rw-r--r--www/releaselog/3_7_6_2.html135
-rw-r--r--www/releaselog/3_7_6_3.html132
-rw-r--r--www/releaselog/3_7_7.html144
-rw-r--r--www/releaselog/3_7_7_1.html135
-rw-r--r--www/releaselog/3_7_8.html145
-rw-r--r--www/releaselog/3_7_9.html171
-rw-r--r--www/releaselog/3_8_0.html178
-rw-r--r--www/releaselog/3_8_0_1.html186
-rw-r--r--www/releaselog/3_8_0_2.html189
-rw-r--r--www/releaselog/3_8_1.html172
-rw-r--r--www/releaselog/3_8_10.html146
-rw-r--r--www/releaselog/3_8_10_1.html155
-rw-r--r--www/releaselog/3_8_10_2.html164
-rw-r--r--www/releaselog/3_8_11.html179
-rw-r--r--www/releaselog/3_8_11_1.html186
-rw-r--r--www/releaselog/3_8_2.html157
-rw-r--r--www/releaselog/3_8_3.html155
-rw-r--r--www/releaselog/3_8_3_1.html136
-rw-r--r--www/releaselog/3_8_4.html167
-rw-r--r--www/releaselog/3_8_4_1.html175
-rw-r--r--www/releaselog/3_8_4_2.html180
-rw-r--r--www/releaselog/3_8_4_3.html188
-rw-r--r--www/releaselog/3_8_5.html184
-rw-r--r--www/releaselog/3_8_6.html187
-rw-r--r--www/releaselog/3_8_7.html189
-rw-r--r--www/releaselog/3_8_7_1.html140
-rw-r--r--www/releaselog/3_8_7_2.html144
-rw-r--r--www/releaselog/3_8_7_3.html141
-rw-r--r--www/releaselog/3_8_7_4.html132
-rw-r--r--www/releaselog/3_8_8.html188
-rw-r--r--www/releaselog/3_8_8_1.html197
-rw-r--r--www/releaselog/3_8_8_2.html204
-rw-r--r--www/releaselog/3_8_8_3.html214
-rw-r--r--www/releaselog/3_8_9.html149
-rw-r--r--www/releaselog/3_9_0.html175
-rw-r--r--www/releaselog/3_9_1.html185
-rw-r--r--www/releaselog/3_9_2.html197
-rw-r--r--www/releaselog/3_9_3.html203
-rw-r--r--www/releaselog/current.html190
-rw-r--r--www/requirements.html14148
-rw-r--r--www/rescode.html1561
-rw-r--r--www/robots.txt21
-rw-r--r--www/rowidtable.html192
-rw-r--r--www/rowvalue.html449
-rw-r--r--www/rtree.html940
-rw-r--r--www/schematab.html281
-rwxr-xr-xwww/search1440
-rwxr-xr-xwww/search.d/admin1248
-rw-r--r--www/search.d/search.dbbin0 -> 9850880 bytes
-rw-r--r--www/security.html330
-rw-r--r--www/selfcontained.html169
-rw-r--r--www/series.html213
-rw-r--r--www/serverless.html224
-rw-r--r--www/session.html1766
-rw-r--r--www/session/c_changeset_abort.html153
-rw-r--r--www/session/c_changeset_conflict.html179
-rw-r--r--www/session/c_changesetapply_invert.html142
-rw-r--r--www/session/c_changesetstart_invert.html131
-rw-r--r--www/session/c_session_config_strmsize.html123
-rw-r--r--www/session/changegroup.html131
-rw-r--r--www/session/changeset_iter.html142
-rw-r--r--www/session/constlist.html141
-rw-r--r--www/session/funclist.html175
-rw-r--r--www/session/intro.html155
-rw-r--r--www/session/objlist.html133
-rw-r--r--www/session/rebaser.html217
-rw-r--r--www/session/session.html141
-rw-r--r--www/session/sqlite3changegroup_add.html195
-rw-r--r--www/session/sqlite3changegroup_add_strm.html291
-rw-r--r--www/session/sqlite3changegroup_delete.html123
-rw-r--r--www/session/sqlite3changegroup_new.html155
-rw-r--r--www/session/sqlite3changegroup_output.html148
-rw-r--r--www/session/sqlite3changeset_apply.html309
-rw-r--r--www/session/sqlite3changeset_concat.html153
-rw-r--r--www/session/sqlite3changeset_conflict.html145
-rw-r--r--www/session/sqlite3changeset_finalize.html149
-rw-r--r--www/session/sqlite3changeset_fk_conflicts.html133
-rw-r--r--www/session/sqlite3changeset_invert.html151
-rw-r--r--www/session/sqlite3changeset_new.html151
-rw-r--r--www/session/sqlite3changeset_next.html142
-rw-r--r--www/session/sqlite3changeset_old.html148
-rw-r--r--www/session/sqlite3changeset_op.html157
-rw-r--r--www/session/sqlite3changeset_pk.html149
-rw-r--r--www/session/sqlite3changeset_start.html170
-rw-r--r--www/session/sqlite3rebaser_configure.html131
-rw-r--r--www/session/sqlite3rebaser_create.html128
-rw-r--r--www/session/sqlite3rebaser_delete.html127
-rw-r--r--www/session/sqlite3rebaser_rebase.html137
-rw-r--r--www/session/sqlite3session_attach.html180
-rw-r--r--www/session/sqlite3session_changeset.html228
-rw-r--r--www/session/sqlite3session_changeset_size.html133
-rw-r--r--www/session/sqlite3session_config.html153
-rw-r--r--www/session/sqlite3session_create.html154
-rw-r--r--www/session/sqlite3session_delete.html132
-rw-r--r--www/session/sqlite3session_diff.html181
-rw-r--r--www/session/sqlite3session_enable.html137
-rw-r--r--www/session/sqlite3session_indirect.html147
-rw-r--r--www/session/sqlite3session_isempty.html135
-rw-r--r--www/session/sqlite3session_memory_used.html126
-rw-r--r--www/session/sqlite3session_patchset.html152
-rw-r--r--www/session/sqlite3session_table_filter.html136
-rw-r--r--www/sessionintro.html649
-rw-r--r--www/sharedcache.html404
-rw-r--r--www/shortnames.html241
-rw-r--r--www/sitemap.html763
-rw-r--r--www/speed.html601
-rw-r--r--www/spellfix1.html754
-rw-r--r--www/sqlanalyze.html1538
-rw-r--r--www/sqlar.html442
-rw-r--r--www/sqldiff.html286
-rw-r--r--www/sqlite.css308
-rw-r--r--www/sqlite.html10
-rw-r--r--www/stmt.html266
-rw-r--r--www/stricttables.html320
-rw-r--r--www/support.html192
-rw-r--r--www/swarmvtab.html429
-rw-r--r--www/syntax.html198
-rw-r--r--www/syntax/aggregate-function-invocation.html187
-rw-r--r--www/syntax/alter-table-stmt.html249
-rw-r--r--www/syntax/analyze-stmt.html170
-rw-r--r--www/syntax/attach-stmt.html159
-rw-r--r--www/syntax/begin-stmt.html169
-rw-r--r--www/syntax/column-constraint.html330
-rw-r--r--www/syntax/column-def.html157
-rw-r--r--www/syntax/column-name-list.html153
-rw-r--r--www/syntax/comment-syntax.html178
-rw-r--r--www/syntax/commit-stmt.html154
-rw-r--r--www/syntax/common-table-expression.html194
-rw-r--r--www/syntax/compound-operator.html164
-rw-r--r--www/syntax/compound-select-stmt.html263
-rw-r--r--www/syntax/conflict-clause.html180
-rw-r--r--www/syntax/create-index-stmt.html219
-rw-r--r--www/syntax/create-table-stmt.html235
-rw-r--r--www/syntax/create-trigger-stmt.html327
-rw-r--r--www/syntax/create-view-stmt.html214
-rw-r--r--www/syntax/create-virtual-table-stmt.html207
-rw-r--r--www/syntax/cte-table-name.html157
-rw-r--r--www/syntax/delete-stmt-limited.html249
-rw-r--r--www/syntax/delete-stmt.html192
-rw-r--r--www/syntax/detach-stmt.html148
-rw-r--r--www/syntax/drop-index-stmt.html167
-rw-r--r--www/syntax/drop-table-stmt.html167
-rw-r--r--www/syntax/drop-trigger-stmt.html167
-rw-r--r--www/syntax/drop-view-stmt.html167
-rw-r--r--www/syntax/expr.html631
-rw-r--r--www/syntax/factored-select-stmt.html230
-rw-r--r--www/syntax/filter-clause.html154
-rw-r--r--www/syntax/foreign-key-clause.html267
-rw-r--r--www/syntax/frame-spec.html333
-rw-r--r--www/syntax/indexed-column.html173
-rw-r--r--www/syntax/insert-stmt.html333
-rw-r--r--www/syntax/join-clause.html156
-rw-r--r--www/syntax/join-constraint.html171
-rw-r--r--www/syntax/join-operator.html189
-rw-r--r--www/syntax/literal-value.html193
-rw-r--r--www/syntax/numeric-literal.html220
-rw-r--r--www/syntax/ordering-term.html184
-rw-r--r--www/syntax/over-clause.html216
-rw-r--r--www/syntax/pragma-stmt.html179
-rw-r--r--www/syntax/pragma-value.html152
-rw-r--r--www/syntax/qualified-table-name.html191
-rw-r--r--www/syntax/raise-function.html178
-rw-r--r--www/syntax/recursive-cte.html170
-rw-r--r--www/syntax/reindex-stmt.html173
-rw-r--r--www/syntax/release-stmt.html148
-rw-r--r--www/syntax/result-column.html176
-rw-r--r--www/syntax/returning-clause.html173
-rw-r--r--www/syntax/rollback-stmt.html162
-rw-r--r--www/syntax/savepoint-stmt.html141
-rw-r--r--www/syntax/select-core.html302
-rw-r--r--www/syntax/select-stmt.html403
-rw-r--r--www/syntax/signed-number.html149
-rw-r--r--www/syntax/simple-function-invocation.html162
-rw-r--r--www/syntax/simple-select-stmt.html223
-rw-r--r--www/syntax/sql-stmt-list.html147
-rw-r--r--www/syntax/sql-stmt.html340
-rw-r--r--www/syntax/table-constraint.html232
-rw-r--r--www/syntax/table-options.html153
-rw-r--r--www/syntax/table-or-subquery.html268
-rw-r--r--www/syntax/type-name.html179
-rw-r--r--www/syntax/update-stmt-limited.html353
-rw-r--r--www/syntax/update-stmt.html294
-rw-r--r--www/syntax/upsert-clause.html233
-rw-r--r--www/syntax/vacuum-stmt.html152
-rw-r--r--www/syntax/window-defn.html205
-rw-r--r--www/syntax/window-function-invocation.html180
-rw-r--r--www/syntax/with-clause.html186
-rw-r--r--www/syntaxdiagrams.html6501
-rw-r--r--www/tclsqlite.html1260
-rw-r--r--www/tempfiles.html880
-rw-r--r--www/testing.html1277
-rw-r--r--www/th3.html570
-rw-r--r--www/threadsafe.html221
-rw-r--r--www/toc.dbbin0 -> 90112 bytes
-rw-r--r--www/transactional.html157
-rw-r--r--www/uintcseq.html193
-rw-r--r--www/undoredo.html534
-rw-r--r--www/unionvtab.html238
-rw-r--r--www/unlock_notify.html492
-rw-r--r--www/uri.html380
-rw-r--r--www/useovernet.html365
-rw-r--r--www/vdbe.html1813
-rw-r--r--www/version3.html418
-rw-r--r--www/versionnumbers.html217
-rw-r--r--www/vfs.html493
-rw-r--r--www/vtab.html1969
-rw-r--r--www/vtablist.html292
-rw-r--r--www/wal.html756
-rw-r--r--www/walformat.html893
-rw-r--r--www/whentouse.html535
-rw-r--r--www/whyc.html361
-rw-r--r--www/whynotgit.html576
-rw-r--r--www/windowfunctions.html7628
-rw-r--r--www/withoutrowid.html424
-rw-r--r--www/xkcd-git.gifbin0 -> 38650 bytes
-rw-r--r--www/zeroconf.html147
-rw-r--r--www/zipfile.html454
959 files changed, 341023 insertions, 0 deletions
diff --git a/www/34to35.html b/www/34to35.html
new file mode 100644
index 0000000..e7b3596
--- /dev/null
+++ b/www/34to35.html
@@ -0,0 +1,945 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Changes From Version 3.4.2 To 3.5.0</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<?xml version="1.0" encoding="Windows-1252"?>
+
+<h1> Moving From SQLite 3.4.2 to 3.5.0</h1><p>
+ SQLite version 3.5.0 (2007-09-04) introduces a new OS interface layer that
+ is incompatible with all prior versions of SQLite. In addition,
+ a few existing interfaces have been generalized to work across all
+ database connections within a process rather than just all
+ connections within a thread. The purpose of this article
+ is to describe the changes to 3.5.0 in detail so that users
+ of prior versions of SQLite can judge what, if any, effort will
+ be required to upgrade to newer versions.
+</p>
+<h2>1.0 Overview Of Changes</h2><p>
+ A quick enumeration of the changes in SQLite version 3.5.0
+ is provided here. Subsequent sections will describe these
+ changes in more detail.
+</p>
+<p>
+ <ol>
+ <li>The OS interface layer has been completely reworked:
+ <ol type="a">
+ <li>The undocumented <b>sqlite3_os_switch()</b> interface has
+ been removed.</li>
+ <li>The <b>SQLITE_ENABLE_REDEF_IO</b> compile-time flag no longer functions.
+ I/O procedures are now always redefinable.</li>
+ <li>Three new objects are defined for specifying I/O procedures:
+ <a href="c3ref/vfs.html">sqlite3_vfs</a>, <a href="c3ref/file.html">sqlite3_file</a>, and <a href="c3ref/io_methods.html">sqlite3_io_methods</a>.</li>
+ <li>Three new interfaces are used to create alternative OS interfaces:
+ <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>, <a href="c3ref/vfs_find.html">sqlite3_vfs_unregister()</a>, and
+ <a href="c3ref/vfs_find.html">sqlite3_vfs_find()</a>.</li>
+ <li>A new interface has been added to provided additional control over
+ the creation of new database connections: <a href="c3ref/open.html">sqlite3_open_v2()</a>.
+ The legacy interfaces of <a href="c3ref/open.html">sqlite3_open()</a> and
+ <a href="c3ref/open.html">sqlite3_open16()</a> continue to be fully supported.</li>
+ </ol></li>
+ <li>The optional shared cache and memory management features that
+ were introduced in version 3.3.0 can now be used across multiple
+ threads within the same process. Formerly, these extensions only
+ applied to database connections operating within a single thread.
+ <ol type="a">
+ <li>The <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> interface now applies to all
+ threads within a process, not to just the one thread in which it
+ was run.</li>
+ <li>The <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a> interface now applies to all threads
+ within a process, not to just the one thread in which it was run.</li>
+ <li>The <a href="c3ref/release_memory.html">sqlite3_release_memory()</a> interface will now attempt to reduce
+ the memory usages across all database connections in all threads, not
+ just connections in the thread where the interface is called.</li>
+ <li>The <a href="c3ref/aggregate_count.html">sqlite3_thread_cleanup()</a> interface has become a no-op.</li>
+ </ol></li>
+ <li>Restrictions on the use of the same database connection by multiple
+ threads have been dropped. It is now safe for
+ multiple threads to use the same database connection at the same
+ time.</li>
+ <li>There is now a compile-time option that allows an application to
+ define alternative malloc()/free() implementations without having
+ to modify any core SQLite code.</li>
+ <li>There is now a compile-time option that allows an application to
+ define alternative mutex implementations without having
+ to modify any core SQLite code.</li>
+ </ol>
+</p>
+<p>
+ Of these changes, only 1a and 2a through 2c are incompatibilities
+ in any formal sense.
+ But users who have previously made custom modifications to the
+ SQLite source (for example to add a custom OS layer for embedded
+ hardware) might find that these changes have a larger impact.
+ On the other hand, an important goal of these changes is to make
+ it much easier to customize SQLite for use on different operating
+ systems.
+</p>
+<h2>2.0 The OS Interface Layer</h2><p>
+ If your system defines a custom OS interface for SQLite or if you
+ were using the undocumented <b>sqlite3_os_switch()</b>
+ interface, then you will need to make modifications in order to
+ upgrade to SQLite version 3.5.0. This may seem painful at first
+ glance. But as you look more closely, you will probably discover
+ that your changes are made smaller and easier to understand and manage
+ by the new SQLite interface. It is likely that your changes will
+ now also work seamlessly with the SQLite amalgamation. You will
+ no longer need to make any changes to the code SQLite source code.
+ All of your changes can be effected by application code and you can
+ link against a standard, unmodified version of the SQLite amalgamation.
+ Furthermore, the OS interface layer, which was formerly undocumented,
+ is now an officially support interface for SQLite. So you have
+ some assurance that this will be a one-time change and that your
+ new backend will continue to work in future versions of SQLite.
+</p>
+<h3>2.1 The Virtual File System Object</h3><p>
+ The new OS interface for SQLite is built around an object named
+ <a href="c3ref/vfs.html">sqlite3_vfs</a>. The "vfs" stands for "Virtual File System".
+ The sqlite3_vfs object is basically a structure containing pointers
+ to functions that implement the primitive disk I/O operations that
+ SQLite needs to perform in order to read and write databases.
+ In this article, we will often refer to an sqlite3_vfs objects as a "VFS".
+</p>
+<p>
+ SQLite is able to use multiple VFSes at the same time. Each
+ individual database connection is associated with just one VFS.
+ But if you have multiple database connections, each connection
+ can be associated with a different VFS.
+</p>
+<p>
+ There is always a default VFS.
+ The legacy interfaces <a href="c3ref/open.html">sqlite3_open()</a> and <a href="c3ref/open.html">sqlite3_open16()</a> always
+ use the default VFS.
+ The new interface for creating database connections,
+ <a href="c3ref/open.html">sqlite3_open_v2()</a>, allows you to specify which VFS you want to
+ use by name.
+</p>
+<h4>2.1.1 Registering New VFS Objects</h4><p>
+ Standard builds of SQLite for Unix or Windows come with a single
+ VFS named "unix" or "win32", as appropriate. This one VFS is also
+ the default. So if you are using the legacy open functions, everything
+ will continue to operate as it has before. The change is that an application
+ now has the flexibility of adding new VFS modules to implement a
+ customized OS layer. The <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> API can be used
+ to tell SQLite about one or more application-defined VFS modules:
+</p>
+<blockquote><pre>
+int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
+</pre></blockquote><p>
+ Applications can call sqlite3_vfs_register() at any time, though of course
+ a VFS needs to be registered before it can be used. The first argument
+ is a pointer to a customized VFS object that the application has prepared.
+ The second argument is true to make the new VFS the default VFS so that
+ it will be used by the legacy <a href="c3ref/open.html">sqlite3_open()</a> and <a href="c3ref/open.html">sqlite3_open16()</a> APIs.
+ If the new VFS is not the default, then you will probably have to use
+ the new <a href="c3ref/open.html">sqlite3_open_v2()</a> API to use it. Note, however, that if
+ a new VFS is the only VFS known to SQLite (if SQLite was compiled without
+ its usual default VFS or if the precompiled default VFS was removed
+ using <a href="c3ref/vfs_find.html">sqlite3_vfs_unregister()</a>) then the new VFS automatically becomes the
+ default VFS regardless of the makeDflt argument to <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>.
+</p>
+<p>
+ Standard builds include the default "unix" or "win32" VFSes.
+ But if you use the -DOS_OTHER=1 compile-time option, then SQLite is
+ built without a default VFS. In that case, the application must
+ register at least one VFS prior to calling <a href="c3ref/open.html">sqlite3_open()</a>.
+ This is the approach that embedded applications should use.
+ Rather than modifying the SQLite source to insert an alternative
+ OS layer as was done in prior releases of SQLite, instead compile
+ an unmodified SQLite source file (preferably the amalgamation)
+ with the -DOS_OTHER=1 option, then invoke <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>
+ to define the interface to the underlying filesystem prior to
+ creating any database connections.
+</p>
+<h4>2.1.2 Additional Control Over VFS Objects</h4><p>
+ The <a href="c3ref/vfs_find.html">sqlite3_vfs_unregister()</a> API is used to remove an existing
+ VFS from the system.
+</p>
+<blockquote><pre>
+int sqlite3_vfs_unregister(sqlite3_vfs*);
+</pre></blockquote><p>
+ The <a href="c3ref/vfs_find.html">sqlite3_vfs_find()</a> API is used to locate a particular VFS
+ by name. Its prototype is as follows:
+</p>
+<blockquote><pre>
+sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
+</pre></blockquote><p>
+ The argument is the symbolic name for the desired VFS. If the
+ argument is a NULL pointer, then the default VFS is returned.
+ The function returns a pointer to the <a href="c3ref/vfs.html">sqlite3_vfs</a> object that
+ implements the VFS. Or it returns a NULL pointer if no object
+ could be found that matched the search criteria.
+</p>
+<h4>2.1.3 Modifications Of Existing VFSes</h4><p>
+ Once a VFS has been registered, it should never be modified. If
+ a change in behavior is required, a new VFS should be registered.
+ The application could, perhaps, use <a href="c3ref/vfs_find.html">sqlite3_vfs_find()</a> to locate
+ the old VFS, make a copy of the old VFS into a new <a href="c3ref/vfs.html">sqlite3_vfs</a>
+ object, make the desired modifications to the new VFS, unregister
+ the old VFS, then register the new VFS in its place. Existing
+ database connections would continue to use the old VFS even after
+ it is unregistered, but new database connections would use the
+ new VFS.
+</p>
+<h4>2.1.4 The VFS Object</h4><p>
+ A VFS object is an instance of the following structure:
+</p>
+<blockquote><pre>
+typedef struct sqlite3_vfs sqlite3_vfs;
+struct sqlite3_vfs {
+ int iVersion; /* Structure version number */
+ int szOsFile; /* Size of subclassed sqlite3_file */
+ int mxPathname; /* Maximum file pathname length */
+ sqlite3_vfs *pNext; /* Next registered VFS */
+ const char *zName; /* Name of this virtual file system */
+ void *pAppData; /* Pointer to application-specific data */
+ int (*xOpen)(sqlite3_vfs*, const char *zName, sqlite3_file*,
+ int flags, int *pOutFlags);
+ int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir);
+ int (*xAccess)(sqlite3_vfs*, const char *zName, int flags);
+ int (*xGetTempName)(sqlite3_vfs*, char *zOut);
+ int (*xFullPathname)(sqlite3_vfs*, const char *zName, char *zOut);
+ void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename);
+ void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg);
+ void *(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol);
+ void (*xDlClose)(sqlite3_vfs*, void*);
+ int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut);
+ int (*xSleep)(sqlite3_vfs*, int microseconds);
+ int (*xCurrentTime)(sqlite3_vfs*, double*);
+ /* New fields may be appended in figure versions. The iVersion
+ ** value will increment whenever this happens. */
+};
+</pre></blockquote><p>
+ To create a new VFS, an application fills in an instance of this
+ structure with appropriate values and then calls <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>.
+</p>
+<p>
+ The iVersion field of <a href="c3ref/vfs.html">sqlite3_vfs</a> should be 1 for SQLite version 3.5.0.
+ This number may increase in future versions of SQLite if we have to
+ modify the VFS object in some way. We hope that this never happens,
+ but the provision is made in case it does.
+</p>
+<p>
+ The szOsFile field is the size in bytes of the structure that defines
+ an open file: the <a href="c3ref/file.html">sqlite3_file</a> object. This object will be described
+ more fully below. The point here is that each VFS implementation can
+ define its own <a href="c3ref/file.html">sqlite3_file</a> object containing whatever information
+ the VFS implementation needs to store about an open file. SQLite needs
+ to know how big this object is, however, in order to preallocate enough
+ space to hold it.
+</p>
+<p>
+ The mxPathname field is the maximum length of a file pathname that
+ this VFS can use. SQLite sometimes has to preallocate buffers of
+ this size, so it should be as small as reasonably possible. Some
+ filesystems permit huge pathnames, but in practice pathnames rarely
+ extend beyond 100 bytes or so. You do not have to put the longest
+ pathname that the underlying filesystem can handle here. You only
+ have to put the longest pathname that you want SQLite to be able to
+ handle. A few hundred is a good value in most cases.
+</p>
+<p>
+ The pNext field is used internally by SQLite. Specifically, SQLite
+ uses this field to form a linked list of registered VFSes.
+</p>
+<p>
+ The zName field is the symbolic name of the VFS. This is the name
+ that the <a href="c3ref/vfs_find.html">sqlite3_vfs_find()</a> compares against when it is looking for
+ a VFS.
+</p>
+<p>
+ The pAppData pointer is unused by the SQLite core. The pointer is
+ available to store auxiliary information that a VFS information might
+ want to carry around.
+</p>
+<p>
+ The remaining fields of the <a href="c3ref/vfs.html">sqlite3_vfs</a> object all store pointers
+ to functions that implement primitive operations. We call these
+ "methods". The first method, xOpen, is used to open files on
+ the underlying storage media. The result is an <a href="c3ref/file.html">sqlite3_file</a>
+ object. There are additional methods, defined by the <a href="c3ref/file.html">sqlite3_file</a>
+ object itself that are used to read and write and close the file.
+ The additional methods are detailed below. The filename is in UTF-8.
+ SQLite will guarantee that the zFilename string passed to
+ xOpen() is a full pathname as generated by xFullPathname() and
+ that the string will be valid and unchanged until xClose() is
+ called. So the <a href="c3ref/file.html">sqlite3_file</a> can store a pointer to the
+ filename if it needs to remember the filename for some reason.
+ The flags argument to xOpen() is a copy of the flags argument
+ to sqlite3_open_v2(). If sqlite3_open() or sqlite3_open16()
+ is used, then flags is <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_READWRITE</a> | <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_CREATE</a>.
+ If xOpen() opens a file read-only then it sets *pOutFlags to
+ include <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_READONLY</a>. Other bits in *pOutFlags may be
+ set.
+ SQLite will also add one of the following flags to the xOpen()
+ call, depending on the object being opened:
+ <ul>
+ <li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_MAIN_DB</a>
+ <li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_MAIN_JOURNAL</a>
+ <li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_TEMP_DB</a>
+ <li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_TEMP_JOURNAL</a>
+ <li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_TRANSIENT_DB</a>
+ <li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_SUBJOURNAL</a>
+ <li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_SUPER_JOURNAL</a>
+ </ul>
+ The file I/O implementation can use the object type flags to
+ changes the way it deals with files. For example, an application
+ that does not care about crash recovery or rollback, might make
+ the open of a journal file a no-op. Writes to this journal are
+ also a no-op. Any attempt to read the journal returns <a href="rescode.html#ioerr">SQLITE_IOERR</a>.
+ Or the implementation might recognize the a database file will
+ be doing page-aligned sector reads and writes in a random order
+ and set up its I/O subsystem accordingly.
+ SQLite might also add one of the following flags to the xOpen
+ method:
+ <ul>
+ <li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_DELETEONCLOSE</a>
+ <li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXCLUSIVE</a>
+ </ul>
+ The <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_DELETEONCLOSE</a> flag means the file should be
+ deleted when it is closed. This will always be set for TEMP
+ databases and journals and for subjournals. The
+ <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXCLUSIVE</a> flag means the file should be opened
+ for exclusive access. This flag is set for all files except
+ for the main database file.
+ The <a href="c3ref/file.html">sqlite3_file</a> structure passed as the third argument to
+ xOpen is allocated by the caller. xOpen just fills it in. The
+ caller allocates a minimum of szOsFile bytes for the <a href="c3ref/file.html">sqlite3_file</a>
+ structure.
+</p>
+<p>
+ The differences between an <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_TEMP_DB</a> database and an
+ <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_TRANSIENT_DB</a> database is this: The <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_TEMP_DB</a>
+ is used for explicitly declared and named TEMP tables (using the
+ CREATE TEMP TABLE syntax) or for named tables in a temporary database
+ that is created by opening a database with a filename that is an empty
+ string. An <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_TRANSIENT_DB</a> holds a database table that
+ SQLite creates automatically in order to evaluate a subquery or
+ ORDER BY or GROUP BY clause. Both TEMP_DB and TRANSIENT_DB databases
+ are private and are deleted automatically. TEMP_DB databases last
+ for the duration of the database connection. TRANSIENT_DB databases
+ last only for the duration of a single SQL statement.
+</p>
+<p>
+ The xDelete method is used to delete a file. The name of the file is
+ given in the second parameter. The filename will be in UTF-8.
+ The VFS must convert the filename into whatever character representation
+ the underlying operating system expects. If the syncDir parameter is
+ true, then the xDelete method should not return until the change
+ to the directory contents for the directory containing the
+ deleted file have been synced to disk in order to ensure that the
+ file does not "reappear" if a power failure occurs soon after.
+</p>
+<p>
+ The xAccess method is used to check for access permissions on a file.
+ The filename will be UTF-8 encoded. The flags argument will be
+ <a href="c3ref/c_access_exists.html">SQLITE_ACCESS_EXISTS</a> to check for the existence of the file,
+ <a href="c3ref/c_access_exists.html">SQLITE_ACCESS_READWRITE</a> to check to see if the file is both readable
+ and writable, or <a href="c3ref/c_access_exists.html">SQLITE_ACCESS_READ</a> to check to see if the file is
+ at least readable. The "file" named by the second parameter might
+ be a directory or folder name.
+</p>
+<p>
+ The xGetTempName method computes the name of a temporary file that
+ SQLite can use. The name should be written into the buffer given
+ by the second parameter. SQLite will size that buffer to hold
+ at least mxPathname bytes. The generated filename should be in UTF-8.
+ To avoid security problems, the generated temporary filename should
+ contain enough randomness to prevent an attacker from guessing the
+ temporary filename in advance.
+</p>
+<p>
+ The xFullPathname method is used to convert a relative pathname
+ into a full pathname. The resulting full pathname is written into
+ the buffer provided by the third parameter. SQLite will size the
+ output buffer to at least mxPathname bytes. Both the input and
+ output names should be in UTF-8.
+</p>
+<p>
+ The xDlOpen, xDlError, xDlSym, and xDlClose methods are all used for
+ accessing shared libraries at run-time. These methods may be omitted
+ (and their pointers set to zero) if the library is compiled with
+ <a href="compile.html#omit_load_extension">SQLITE_OMIT_LOAD_EXTENSION</a> or if the <a href="c3ref/enable_load_extension.html">sqlite3_enable_load_extension()</a>
+ interface is never used to enable dynamic extension loading. The
+ xDlOpen method opens a shared library or DLL and returns a pointer to
+ a handle. NULL is returned if the open fails. If the open fails,
+ the xDlError method can be used to obtain a text error message.
+ The message is written into the zErrMsg buffer of the third parameter
+ which is at least nByte bytes in length. The xDlSym returns a pointer
+ to a symbol in the shared library. The name of the symbol is given
+ by the second parameter. UTF-8 encoding is assumed. If the symbol
+ is not found a NULL pointer is returned. The xDlClose routine closes
+ the shared library.
+</p>
+<p>
+ The xRandomness method is used exactly once to initialize the
+ pseudo-random number generator (PRNG) inside of SQLite. Only
+ the xRandomness method on the default VFS is used. The xRandomness
+ methods on other VFSes are never accessed by SQLite.
+ The xRandomness routine requests that nByte bytes of randomness
+ be written into zOut. The routine returns the actual number of
+ bytes of randomness obtained. The quality of the randomness so obtained
+ will determine the quality of the randomness generated by built-in
+ SQLite functions such as random() and randomblob(). SQLite also
+ uses its PRNG to generate temporary file names. On some platforms
+ (ex: Windows) SQLite assumes that temporary file names are unique
+ without actually testing for collisions, so it is important to have
+ good-quality randomness even if the random() and randomblob()
+ functions are never used.
+</p>
+<p>
+ The xSleep method is used to suspend the calling thread for at
+ least the number of microseconds given. This method is used to
+ implement the <a href="c3ref/sleep.html">sqlite3_sleep()</a> and <a href="c3ref/busy_timeout.html">sqlite3_busy_timeout()</a> APIs.
+ In the case of <a href="c3ref/sleep.html">sqlite3_sleep()</a> the xSleep method of the default
+ VFS is always used. If the underlying system does not have a
+ microsecond resolution sleep capability, then the sleep time should
+ be rounded up. xSleep returns this rounded-up value.
+</p>
+<p>
+ The xCurrentTime method finds the current time and date and writes
+ the result as a double-precision floating point value into pointer
+ provided by the second parameter. The time and date is in
+ coordinated universal time (UTC) and is a fractional Julian day number.
+</p>
+<h4>2.1.5 The Open File Object</h4><p>
+ The result of opening a file is an instance of an <a href="c3ref/file.html">sqlite3_file</a> object.
+ The <a href="c3ref/file.html">sqlite3_file</a> object is an abstract base class defined as follows:
+</p>
+<blockquote><pre>
+typedef struct sqlite3_file sqlite3_file;
+struct sqlite3_file {
+ const struct sqlite3_io_methods *pMethods;
+};
+</pre></blockquote><p>
+ Each VFS implementation will subclass the <a href="c3ref/file.html">sqlite3_file</a> by adding
+ additional fields at the end to hold whatever information the VFS
+ needs to know about an open file. It does not matter what information
+ is stored as long as the total size of the structure does not exceed
+ the szOsFile value recorded in the <a href="c3ref/vfs.html">sqlite3_vfs</a> object.
+</p>
+<p>
+ The <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object is a structure that contains pointers
+ to methods for reading, writing, and otherwise dealing with files.
+ This object is defined as follows:
+</p>
+<blockquote><pre>
+typedef struct sqlite3_io_methods sqlite3_io_methods;
+struct sqlite3_io_methods {
+ int iVersion;
+ int (*xClose)(sqlite3_file*);
+ int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
+ int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst);
+ int (*xTruncate)(sqlite3_file*, sqlite3_int64 size);
+ int (*xSync)(sqlite3_file*, int flags);
+ int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize);
+ int (*xLock)(sqlite3_file*, int);
+ int (*xUnlock)(sqlite3_file*, int);
+ int (*xCheckReservedLock)(sqlite3_file*);
+ int (*xFileControl)(sqlite3_file*, int op, void *pArg);
+ int (*xSectorSize)(sqlite3_file*);
+ int (*xDeviceCharacteristics)(sqlite3_file*);
+ /* Additional methods may be added in future releases */
+};
+</pre></blockquote><p>
+ The iVersion field of <a href="c3ref/io_methods.html">sqlite3_io_methods</a> is provided as insurance
+ against future enhancements. The iVersion value should always be
+ 1 for SQLite version 3.5.
+</p>
+<p>
+ The xClose method closes the file. The space for the <a href="c3ref/file.html">sqlite3_file</a>
+ structure is deallocated by the caller. But if the <a href="c3ref/file.html">sqlite3_file</a>
+ contains pointers to other allocated memory or resources, those
+ allocations should be released by the xClose method.
+</p>
+<p>
+ The xRead method reads iAmt bytes from the file beginning at a byte
+ offset to iOfst. The data read is stored in the pointer of the
+ second parameter. xRead returns the <a href="rescode.html#ok">SQLITE_OK</a> on success,
+ <a href="rescode.html#ioerr_short_read">SQLITE_IOERR_SHORT_READ</a> if it was not able to read the full number
+ of bytes because it reached end-of-file, or <a href="rescode.html#ioerr_read">SQLITE_IOERR_READ</a> for
+ any other error.
+</p>
+<p>
+ The xWrite method writes iAmt bytes of data from the second parameter
+ into the file beginning at an offset of iOfst bytes. If the size of
+ the file is less than iOfst bytes prior to the write, then xWrite should
+ ensure that the file is extended with zeros up to iOfst bytes prior
+ to beginning its write. xWrite continues to extends the file as
+ necessary so that the size of the file is at least iAmt+iOfst bytes
+ at the conclusion of the xWrite call. The xWrite method returns
+ <a href="rescode.html#ok">SQLITE_OK</a> on success. If the write cannot complete because the
+ underlying storage medium is full, then <a href="rescode.html#full">SQLITE_FULL</a> is returned.
+ <a href="rescode.html#ioerr_write">SQLITE_IOERR_WRITE</a> should be returned for any other error.
+</p>
+<p>
+ The xTruncate method truncates a file to be nByte bytes in length.
+ If the file is already nByte bytes or less in length then this
+ method is a no-op. The xTruncate method returns <a href="rescode.html#ok">SQLITE_OK</a> on
+ success and <a href="rescode.html#ioerr_truncate">SQLITE_IOERR_TRUNCATE</a> if anything goes wrong.
+</p>
+<p>
+ The xSync method is used to force previously written data out of
+ operating system cache and into non-volatile memory. The second
+ parameter is usually <a href="c3ref/c_sync_dataonly.html">SQLITE_SYNC_NORMAL</a>. If the second parameter
+ is <a href="c3ref/c_sync_dataonly.html">SQLITE_SYNC_FULL</a> then the xSync method should make sure that
+ data has also been flushed through the disk controllers cache.
+ The <a href="c3ref/c_sync_dataonly.html">SQLITE_SYNC_FULL</a> parameter is the equivalent of the F_FULLSYNC
+ ioctl() on Mac OS X. The xSync method returns
+ <a href="rescode.html#ok">SQLITE_OK</a> on success and <a href="rescode.html#ioerr_fsync">SQLITE_IOERR_FSYNC</a> if anything goes wrong.
+</p>
+<p>
+ The xFileSize() method determines the current size of the file
+ in bytes and writes that value into *pSize. It returns <a href="rescode.html#ok">SQLITE_OK</a>
+ on success and <a href="rescode.html#ioerr_fstat">SQLITE_IOERR_FSTAT</a> if something goes wrong.
+</p>
+<p>
+ The xLock and xUnlock methods are used to set and clear file locks.
+ SQLite supports five levels of file locks, in order:
+ <ul>
+ <li> <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_NONE</a>
+ <li> <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_SHARED</a>
+ <li> <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_RESERVED</a>
+ <li> <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_PENDING</a>
+ <li> <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_EXCLUSIVE</a>
+ </ul>
+ The underlying implementation can support some subset of these locking
+ levels as long as it meets the other requirements of this paragraph.
+ The locking level is specified as the second argument to both xLock
+ and xUnlock. The xLock method increases the locking level to the
+ specified locking level or higher. The xUnlock method decreases the
+ locking level to no lower than the level specified.
+ <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_NONE</a> means that the file is unlocked. <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_SHARED</a>
+ gives permission to read the file. Multiple database connections can
+ hold <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_SHARED</a> at the same time.
+ <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_RESERVED</a> is like <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_SHARED</a> in that it is permission
+ to read the file. But only a single connection can hold a reserved lock
+ at any point in time. The <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_PENDING</a> is also permission to
+ read the file. Other connections can continue to read the file as well,
+ but no other connection is allowed to escalate a lock from none to shared.
+ <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_EXCLUSIVE</a> is permission to write on the file. Only a single
+ connection can hold an exclusive lock and no other connection can hold
+ any lock (other than "none") while one connection holds an exclusive
+ lock. The xLock returns <a href="rescode.html#ok">SQLITE_OK</a> on success, <a href="rescode.html#busy">SQLITE_BUSY</a> if it
+ is unable to obtain the lock, or <a href="rescode.html#ioerr_rdlock">SQLITE_IOERR_RDLOCK</a> if something else
+ goes wrong. The xUnlock method returns <a href="rescode.html#ok">SQLITE_OK</a> on success and
+ <a href="rescode.html#ioerr_unlock">SQLITE_IOERR_UNLOCK</a> for problems.
+</p>
+<p>
+ The xCheckReservedLock() method checks to see if another connection or
+ another process is currently holding a reserved, pending, or exclusive
+ lock on the file. It returns true or false.
+</p>
+<p>
+ The xFileControl() method is a generic interface that allows custom
+ VFS implementations to directly control an open file using the
+ (new and experimental)
+ <a href="c3ref/file_control.html">sqlite3_file_control()</a> interface. The second "op" argument
+ is an integer opcode. The third
+ argument is a generic pointer which is intended to be a pointer
+ to a structure that may contain arguments or space in which to
+ write return values. Potential uses for xFileControl() might be
+ functions to enable blocking locks with timeouts, to change the
+ locking strategy (for example to use dot-file locks), to inquire
+ about the status of a lock, or to break stale locks. The SQLite
+ core reserves opcodes less than 100 for its own use.
+ A <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">list of opcodes</a> less than 100 is available.
+ Applications that define a custom xFileControl method should use opcodes
+ greater than 100 to avoid conflicts.
+</p>
+<p>
+ The xSectorSize returns the "sector size" of the underlying
+ non-volatile media. A "sector" is defined as the smallest unit of
+ storage that can be written without disturbing adjacent storage.
+ On a disk drive the "sector size" has until recently been 512 bytes,
+ though there is a push to increase this value to 4KiB. SQLite needs
+ to know the sector size so that it can write a full sector at a
+ time, and thus avoid corrupting adjacent storage space if a power
+ loss occurs in the middle of a write.
+</p>
+<p>
+ The xDeviceCharacteristics method returns an integer bit vector that
+ defines any special properties that the underlying storage medium might
+ have that SQLite can use to increase performance. The allowed return
+ is the bit-wise OR of the following values:
+ <ul>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC</a>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC512</a>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC1K</a>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC2K</a>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC4K</a>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC8K</a>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC16K</a>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC32K</a>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC64K</a>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_SAFE_APPEND</a>
+ <li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_SEQUENTIAL</a>
+ </ul>
+ The <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC</a> bit means that all writes to this device are
+ atomic in the sense that either the entire write occurs or none of it
+ occurs. The other
+ <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC<i>nnn</i></a> values indicate that
+ writes of aligned blocks of the indicated size are atomic.
+ <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_SAFE_APPEND</a> means that when extending a file with new
+ data, the new data is written first and then the file size is updated.
+ So if a power failure occurs, there is no chance that the file might have
+ been extended with randomness. The <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_SEQUENTIAL</a> bit means
+ that all writes occur in the order that they are issued and are not
+ reordered by the underlying file system.
+</p>
+<h4>2.1.6 Checklist For Constructing A New VFS</h4><p>
+ The preceding paragraphs contain a lot of information.
+ To ease the task of constructing
+ a new VFS for SQLite we offer the following implementation checklist:
+</p>
+<p>
+ <ol>
+ <li> Define an appropriate subclass of the <a href="c3ref/file.html">sqlite3_file</a> object.
+ <li> Implement the methods required by the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object.
+ <li> Create a static and
+ constant <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object containing pointers
+ to the methods from the previous step.
+ <li> Implement the xOpen method that opens a file and populates an
+ <a href="c3ref/file.html">sqlite3_file</a> object, including setting pMethods to
+ point to the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object from the previous step.
+ <li> Implement the other methods required by <a href="c3ref/vfs.html">sqlite3_vfs</a>.
+ <li> Define a static (but not constant) <a href="c3ref/vfs.html">sqlite3_vfs</a> structure that
+ contains pointers to the xOpen method and the other methods and
+ which contains the appropriate values for iVersion, szOsFile,
+ mxPathname, zName, and pAppData.
+ <li> Implement a procedure that calls <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> and
+ passes it a pointer to the <a href="c3ref/vfs.html">sqlite3_vfs</a> structure from the previous
+ step. This procedure is probably the only exported symbol in the
+ source file that implements your VFS.
+ </ol>
+</p>
+<p>
+ Within your application, call the procedure implemented in the last
+ step above as part of your initialization process before any
+ database connections are opened.
+</p>
+<h2>3.0 The Memory Allocation Subsystem</h2><p>
+ Beginning with version 3.5, SQLite obtains all of the heap memory it
+ needs using the routines <a href="c3ref/free.html">sqlite3_malloc()</a>, <a href="c3ref/free.html">sqlite3_free()</a>, and
+ <a href="c3ref/free.html">sqlite3_realloc()</a>. These routines have existed in prior versions
+ of SQLite, but SQLite has previously bypassed these routines and used
+ its own memory allocator. This all changes in version 3.5.0.
+</p>
+<p>
+ The SQLite source tree actually contains multiple versions of the
+ memory allocator. The default high-speed version found in the
+ "mem1.c" source file is used for most builds. But if the SQLITE_MEMDEBUG
+ flag is enabled, a separate memory allocator the "mem2.c" source file
+ is used instead. The mem2.c allocator implements lots of hooks to
+ do error checking and to simulate memory allocation failures for testing
+ purposes. Both of these allocators use the malloc()/free() implementation
+ in the standard C library.
+</p>
+<p>
+ Applications are not required to use either of these standard memory
+ allocators. If SQLite is compiled with <a href="compile.html#omitfeatures">SQLITE_OMIT_MEMORY_ALLOCATION</a>
+ then no implementation for the <a href="c3ref/free.html">sqlite3_malloc()</a>, <a href="c3ref/free.html">sqlite3_realloc()</a>,
+ and <a href="c3ref/free.html">sqlite3_free()</a> functions is provided. Instead, the application
+ that links against SQLite must provide its own implementation of these
+ functions. The application provided memory allocator is not required
+ to use the malloc()/free() implementation in the standard C library.
+ An embedded application might provide an alternative memory allocator
+ that uses memory for a fixed memory pool set aside for the exclusive
+ use of SQLite, for example.
+</p>
+<p>
+ Applications that implement their own memory allocator must provide
+ implementation for the usual three allocation functions
+ <a href="c3ref/free.html">sqlite3_malloc()</a>, <a href="c3ref/free.html">sqlite3_realloc()</a>, and <a href="c3ref/free.html">sqlite3_free()</a>.
+ And they must also implement a fourth function:
+</p>
+<blockquote><pre>
+int sqlite3_memory_alarm(
+ void(*xCallback)(void *pArg, sqlite3_int64 used, int N),
+ void *pArg,
+ sqlite3_int64 iThreshold
+);
+</pre></blockquote><p>
+ The <a href="c3ref/aggregate_count.html">sqlite3_memory_alarm</a> routine is used to register
+ a callback on memory allocation events.
+ This routine registers or clears a callback that fires when
+ the amount of memory allocated exceeds iThreshold. Only
+ a single callback can be registered at a time. Each call
+ to <a href="c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> overwrites the previous callback.
+ The callback is disabled by setting xCallback to a NULL
+ pointer.
+</p>
+<p>
+ The parameters to the callback are the pArg value, the
+ amount of memory currently in use, and the size of the
+ allocation that provoked the callback. The callback will
+ presumably invoke <a href="c3ref/free.html">sqlite3_free()</a> to free up memory space.
+ The callback may invoke <a href="c3ref/free.html">sqlite3_malloc()</a> or <a href="c3ref/free.html">sqlite3_realloc()</a>
+ but if it does, no additional callbacks will be invoked by
+ the recursive calls.
+</p>
+<p>
+ The <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a> interface works by registering
+ a memory alarm at the soft heap limit and invoking
+ <a href="c3ref/release_memory.html">sqlite3_release_memory()</a> in the alarm callback. Application
+ programs should not attempt to use the <a href="c3ref/aggregate_count.html">sqlite3_memory_alarm()</a>
+ interface because doing so will interfere with the
+ <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a> module. This interface is exposed
+ only so that applications can provide their own
+ alternative implementation when the SQLite core is
+ compiled with <a href="compile.html#omitfeatures">SQLITE_OMIT_MEMORY_ALLOCATION</a>.
+</p>
+<p>
+ The built-in memory allocators in SQLite also provide the following
+ additional interfaces:
+</p>
+<blockquote><pre>
+sqlite3_int64 sqlite3_memory_used(void);
+sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
+</pre></blockquote><p>
+ These interfaces can be used by an application to monitor how
+ much memory SQLite is using. The <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> routine
+ returns the number of bytes of memory currently in use and the
+ <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> returns the maximum instantaneous
+ memory usage. Neither routine includes the overhead associated
+ with the memory allocator. These routines are provided for use
+ by the application. SQLite never invokes them itself. So if
+ the application is providing its own memory allocation subsystem,
+ it can omit these interfaces if desired.
+</p>
+<h2>4.0 The Mutex Subsystem</h2><p>
+ SQLite has always been threadsafe in the sense that it is safe to
+ use different SQLite database connections in different threads at the
+ same time. The constraint was that the same database connection
+ could not be used in two separate threads at once. SQLite version 3.5.0
+ relaxes this constraint.
+</p>
+<p>
+ In order to allow multiple threads to use the same database connection
+ at the same time, SQLite must make extensive use of mutexes. And for
+ this reason a new mutex subsystem as been added. The mutex subsystem
+ as the following interface:
+</p>
+<blockquote><pre>
+sqlite3_mutex *sqlite3_mutex_alloc(int);
+void sqlite3_mutex_free(sqlite3_mutex*);
+void sqlite3_mutex_enter(sqlite3_mutex*);
+int sqlite3_mutex_try(sqlite3_mutex*);
+void sqlite3_mutex_leave(sqlite3_mutex*);
+</pre></blockquote><p>
+ Though these routines exist for the use of the SQLite core,
+ application code is free to use these routines as well, if desired.
+ A mutex is an <a href="c3ref/mutex.html">sqlite3_mutex</a> object. The <a href="c3ref/mutex_alloc.html">sqlite3_mutex_alloc()</a>
+ routine allocates a new mutex object and returns a pointer to it.
+ The argument to <a href="c3ref/mutex_alloc.html">sqlite3_mutex_alloc()</a> should be
+ <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_FAST</a> or <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_RECURSIVE</a> for non-recursive
+ and recursive mutexes, respectively. If the underlying system does
+ not provide non-recursive mutexes, then a recursive mutex can be
+ substituted in that case. The argument to <a href="c3ref/mutex_alloc.html">sqlite3_mutex_alloc()</a>
+ can also be a constant designating one of several static mutexes:
+ <ul>
+ <li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_MAIN</a>
+ <li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_MEM</a>
+ <li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_MEM2</a>
+ <li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_PRNG</a>
+ <li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_LRU</a>
+ </ul>
+ These static mutexes are reserved for use internally by SQLite
+ and should not be used by the application. The static mutexes
+ are all non-recursive.
+</p>
+<p>
+ The <a href="c3ref/mutex_alloc.html">sqlite3_mutex_free()</a> routine should be used to deallocate
+ a non-static mutex. If a static mutex is passed to this routine
+ then the behavior is undefined.
+</p>
+<p>
+ The <a href="c3ref/mutex_alloc.html">sqlite3_mutex_enter()</a> attempts to enter the mutex and blocks
+ if another threads is already there. <a href="c3ref/mutex_alloc.html">sqlite3_mutex_try()</a> attempts
+ to enter and returns <a href="rescode.html#ok">SQLITE_OK</a> on success or <a href="rescode.html#busy">SQLITE_BUSY</a> if another
+ thread is already there. <a href="c3ref/mutex_alloc.html">sqlite3_mutex_leave()</a> exits a mutex.
+ The mutex is held until the number of exits matches the number of
+ entrances. If <a href="c3ref/mutex_alloc.html">sqlite3_mutex_leave()</a> is called on a mutex that
+ the thread is not currently holding, then the behavior is undefined.
+ If any routine is called for a deallocated mutex, then the behavior
+ is undefined.
+</p>
+<p>
+ The SQLite source code provides multiple implementations of these
+ APIs, suitable for varying environments. If SQLite is compiled with
+ the SQLITE_THREADSAFE=0 flag then a no-op mutex implementation that
+ is fast but does no real mutual exclusion is provided. That
+ implementation is suitable for use in single-threaded applications
+ or applications that only use SQLite in a single thread. Other
+ real mutex implementations are provided based on the underlying
+ operating system.
+</p>
+<p>
+ Embedded applications may wish to provide their own mutex implementation.
+ If SQLite is compiled with the -DSQLITE_MUTEX_APPDEF=1 compile-time flag
+ then the SQLite core provides no mutex subsystem and a mutex subsystem
+ that matches the interface described above must be provided by the
+ application that links against SQLite.
+</p>
+<h2>5.0 Other Interface Changes</h2><p>
+ Version 3.5.0 of SQLite changes the behavior of a few APIs in ways
+ that are technically incompatible. However, these APIs are seldom
+ used and even when they are used it is difficult to imagine a
+ scenario where the change might break something. The changes
+ actually makes these interface much more useful and powerful.
+</p>
+<p>
+ Prior to version 3.5.0, the <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> API
+ would enable and disable the shared cache feature for all connections
+ within a single thread - the same thread from which the
+ sqlite3_enable_shared_cache() routine was called. Database connections
+ that used the shared cache were restricted to running in the same
+ thread in which they were opened. Beginning with version 3.5.0,
+ the sqlite3_enable_shared_cache() applies to all database connections
+ in all threads within the process. Now database connections running
+ in separate threads can share a cache. And database connections that
+ use shared cache can migrate from one thread to another.
+</p>
+<p>
+ Prior to version 3.5.0 the <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a> set an upper
+ bound on heap memory usage for all database connections within a
+ single thread. Each thread could have its own heap limit. Beginning
+ in version 3.5.0, there is a single heap limit for the entire process.
+ This seems more restrictive (one limit as opposed to many) but in
+ practice it is what most users want.
+</p>
+<p>
+ Prior to version 3.5.0 the <a href="c3ref/release_memory.html">sqlite3_release_memory()</a> function would
+ try to reclaim memory from all database connections in the same thread
+ as the sqlite3_release_memory() call. Beginning with version 3.5.0,
+ the sqlite3_release_memory() function will attempt to reclaim memory
+ from all database connections in all threads.
+</p>
+<h2>6.0 Summary</h2><p>
+ The transition from SQLite version 3.4.2 to 3.5.0 is a major change.
+ Every source code file in the SQLite core had to be modified, some
+ extensively. And the change introduced some minor incompatibilities
+ in the C interface. But we feel that the benefits of the transition
+ from 3.4.2 to 3.5.0 far outweigh the pain of porting. The new
+ VFS layer is now well-defined and stable and should simplify future
+ customizations. The VFS layer, and the separable memory allocator
+ and mutex subsystems allow a standard SQLite source code amalgamation
+ to be used in an embedded project without change, greatly simplifying
+ configuration management. And the resulting system is much more
+ tolerant of highly threaded designs.
+</p>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/34to35.in?m=ea67967bbd60713dd">2020-06-18 21:18:56</a> UTC </small></i></p>
+
diff --git a/www/35to36.html b/www/35to36.html
new file mode 100644
index 0000000..f4a348a
--- /dev/null
+++ b/www/35to36.html
@@ -0,0 +1,355 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Changes From Version 3.5.9 To 3.6.0</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+<h1> Moving From SQLite 3.5.9 to 3.6.0</h1><p>
+ SQLite version 3.6.0 (2008-07-16)
+ contains many changes. As is the custom with
+ the SQLite project, most changes are fully backwards compatible.
+ However, a few of the changes in version 3.6.0 are incompatible and
+ might require modifications to application code and/or makefiles.
+ This document is a briefing on the changes in SQLite 3.6.0
+ with special attention to the incompatible changes.
+</p>
+<blockquote>
+ <strong>Key Points:</strong>
+ <ul>
+ <li> The database file format is unchanged. </li>
+ <li> All incompatibilities are on obscure interfaces and hence should
+ have zero impact on most applications. </li>
+ </ul>
+</blockquote>
+<h2>1.0 Incompatible Changes</h2><p>
+ Incompatible changes are covered first since they are the most
+ important to maintainers and programmers.
+</p>
+<h3>1.1 Overview Of Incompatible Changes</h3><p>
+ <ol>
+ <li><p>Changes to the <a href="c3ref/vfs.html">sqlite3_vfs</a> object</p>
+
+ <ol type="a">
+ <li><p>The signature of the xAccess method has been modified to
+ return an <a href="rescode.html">error code</a> and to store its output into an integer pointed
+ to by a parameter, rather than returning the output directly.
+ This change allows the xAccess() method to report failures.
+ In association with this signature change, a new
+ extended error code <a href="rescode.html#ioerr_access">SQLITE_IOERR_ACCESS</a> has been added.
+ </p></li>
+
+ <li><p>The xGetTempname method has been removed from <a href="c3ref/vfs.html">sqlite3_vfs</a>.
+ In its place, the xOpen method is enhanced to open a temporary file
+ of its own invention when the filename parameter is NULL.</p></li>
+
+ <li><p>Added the xGetLastError() method to <a href="c3ref/vfs.html">sqlite3_vfs</a> for returning
+ filesystem-specific error messages and error codes back to
+ SQLite.</p></li>
+ </ol>
+ </li>
+
+ <li><p>The signature of the xCheckReservedLock method on <a href="c3ref/io_methods.html">sqlite3_io_methods</a>
+ has been modified so that it returns an <a href="rescode.html">error code</a> and stores its
+ boolean result into an integer pointed to by a parameter. In
+ association with this change, a new extended error code
+ <a href="rescode.html#ioerr_checkreservedlock">SQLITE_IOERR_CHECKRESERVEDLOCK</a> has been added.</p></li>
+
+ <li><p>When SQLite is ported to new operating systems (operating systems
+ other than Unix, Windows, and OS/2 for which ports are provided together
+ with the core)
+ two new functions, <a href="c3ref/initialize.html">sqlite3_os_init()</a> and <a href="c3ref/initialize.html">sqlite3_os_end()</a>, must
+ be provided as part of the port.</p></li>
+
+ <li><p>The way in which the IN and NOT IN operators handle NULL values
+ in their right-hand expressions has been brought into compliance with
+ the SQL standard and with other SQL database engines.</p></li>
+
+ <li><p>The column names for the result sets of <a href="lang_select.html">SELECT</a> statements have
+ been tweaked in some cases to work more like other SQL database
+ engines.</p></li>
+
+ <li><p>Changes to compile-time options:</p>
+
+ <ol type="a">
+ <li><p>The SQLITE_MUTEX_APPDEF compile-time parameter is no longer
+ recognized. As a replacement, alternative
+ <a href="c3ref/mutex_alloc.html">mutex implementations</a> may be created
+ at runtime using <a href="c3ref/config.html">sqlite3_config()</a> with the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a>
+ operator and the <a href="c3ref/mutex_methods.html">sqlite3_mutex_methods</a> object.</p></li>
+
+ <li><p>Compile-time options OS_UNIX, OS_WIN, OS_OS2, OS_OTHER, and
+ TEMP_STORE have been renamed to include an "SQLITE_" prefix in order
+ to help avoid namespace collisions with application software. The
+ new names of these options are respectively:
+ SQLITE_OS_UNIX, SQLITE_OS_WIN, SQLITE_OS_OS2, SQLITE_OS_OTHER,
+ and <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a>.</p></li>
+ </ol>
+ </li>
+ </ol>
+</p>
+<h3>1.2 Changes To The VFS Layer</h3><p>
+ SQLite <a href="releaselog/3_5_0.html">version 3.5.0</a> introduced a <a href="34to35.html">new OS interface layer</a> that
+ provided an abstraction of the underlying operating system.
+ This was an important innovation and has proven to be helpful
+ in porting and maintaining SQLite.
+ However, the developers have discovered some minor flaws in the
+ original "virtual file system" design introduced in version 3.5.0
+ and so SQLite 3.6.0 includes some small incompatible changes
+ to address these flaws.
+</p>
+<blockquote>
+ <strong>Key Point:</strong> The incompatible
+ changes in the SQLite operating-system interface for version 3.6.0
+ only affect the rare applications that make use of the
+ <a href="c3ref/vfs.html">virtual file system</a> interface or that
+ supply an application-defined <a href="c3ref/mutex_alloc.html">mutex implementation</a>
+ or that make use of other obscure compile-time options. The
+ changes introduced by SQLite version 3.6.0 will have zero impact on the
+ vast majority of SQLite applications that use the built-in interfaces
+ to Unix, Windows, and OS/2 and that use the standard build configuration.
+</blockquote>
+<h3>1.3 Changes In The Way The IN Operator Handles NULLs</h3><p>
+ All versions of SQLite up to and including version 3.5.9 have mishandled
+ NULL values on the right-hand side of IN and NOT IN operators.
+ Specifically, SQLite has previously ignored NULLs on the right-hand side
+ of IN and NOT IN.
+</p>
+<p>
+ Suppose we have a table X1 defined as follows:
+</p>
+<blockquote><pre>
+ CREATE TABLE x1(x INTEGER);
+ INSERT INTO x1 VALUES(1);
+ INSERT INTO x1 VALUES(2);
+ INSERT INTO x1 VALUES(NULL);
+</pre></blockquote><p>
+ Given the definition of X1 above, the following expressions have
+ historically evaluated to FALSE in SQLite, though the correct
+ answer is actually NULL:
+</p>
+<blockquote><pre>
+ 3 IN (1,2,NULL)
+ 3 IN (SELECT * FROM x1)
+</pre></blockquote><p>
+ Similarly, the following expressions have historically evaluated to
+ TRUE when in fact NULL is also the correct answer here:
+</p>
+<blockquote><pre>
+ 3 NOT IN (1,2,NULL)
+ 3 NOT IN (SELECT * FROM x1)
+</pre></blockquote><p>
+ The historical behavior of SQLite is incorrect according to the SQL:1999
+ standard and it is inconsistent with the behavior of MySQL and
+ PostgreSQL. Version 3.6.0 changes the behavior of the IN and
+ NOT IN operators to conform to the standard and to give the same
+ results as other SQL database engines.
+</p>
+<blockquote>
+ <strong>Key Point:</strong> The change to the way NULL values are handled
+ by the IN and NOT IN operators is technically a bug fix, not a design
+ change. However, maintainers should check to ensure that applications
+ do not depend on the older, buggy behavior prior to upgrading to
+ version 3.6.0.
+</blockquote>
+<h3>1.4 Changes To Column Naming Rules</h3><p>
+ The column names reported by join subqueries have been modified slightly
+ in order to work more like other database engines. Consider the following
+ query:
+</p>
+<blockquote><pre>
+ CREATE TABLE t1(a);
+ CREATE TABLE t2(x);
+ SELECT * FROM (SELECT t1.a FROM t1 JOIN t2 ORDER BY t2.x LIMIT 1) ORDER BY 1;
+</pre></blockquote><p>
+ In version 3.5.9 the query above would return a single column named "t1.a".
+ In version 3.6.0 the column name is just "a".
+</p>
+<p>
+ SQLite has never made any promises about the names of columns in the
+ result set of <a href="lang_select.html">SELECT</a> statement unless the column contains an AS clause.
+ So this change to column name is technically not an incompatibility.
+ SQLite is merely changing from one undefined behavior to another.
+ Nevertheless, many applications depend on the unspecified column naming
+ behavior of SQLite and so this change is discussed under the
+ incompatible changes subheading.
+</p>
+<h3>1.5 Changes To Compile-Time Options</h3><p>
+ Compile-time options to SQLite are controlled by C-preprocessor
+ macros. SQLite version 3.6.0 changes the names of some of these
+ macros so that all C-preprocessor macros that are specific to
+ SQLite begin with the "SQLITE_" prefix. This is done to reduce the
+ risk of name collisions with other software modules.
+</p>
+<blockquote>
+ <strong>Key Point:</strong> Changes to compile-time options have the
+ potential to affect makefiles in projects that do customized builds of
+ SQLite. These changes should have zero impact on application code and for
+ most projects which use a standard, default build of SQLite.
+</blockquote>
+<h2>2.0 Fully Backwards-Compatible Enhancements</h2><p>
+ In addition to the incompatible changes listed above, SQLite
+ version 3.6.0 adds the following backwards compatible changes and
+ enhancements:
+</p>
+<p>
+ <ol>
+
+ <li value="7"><p>The new <a href="c3ref/config.html">sqlite3_config()</a> interface allows an application
+ to customize the behavior of SQLite at run-time. Customizations possible
+ using <a href="c3ref/config.html">sqlite3_config()</a> include the following:</p>
+ <ol type="a">
+ <li><p>Specify an alternative mutex implementation using the
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> verb with the <a href="c3ref/mutex_methods.html">sqlite3_mutex_methods</a> object.</p></li>
+ <li><p>Specify an alternative malloc implementation using the
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a> verb with the <a href="c3ref/mem_methods.html">sqlite3_mem_methods</a> object.</p></li>
+ <li><p>Partially or fully disable the use of mutexes using
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">SQLITE_CONFIG_SINGLETHREAD</a>, <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">SQLITE_CONFIG_MULTITHREAD</a> and
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">SQLITE_CONFIG_SERIALIZED</a>.</p></li>
+ </ol>
+ </li>
+
+ <li><p>A new flag <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a> is made available to the
+ <a href="c3ref/open.html">sqlite3_open_v2()</a> interface.</p></li>
+
+ <li><p>The new <a href="c3ref/status.html">sqlite3_status()</a> interface allows an application to query
+ the performance status of SQLite at runtime.
+ </p></li>
+
+ <li><p>The <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a>
+ interfaces are deprecated. The equivalent functionality is now available
+ through <a href="c3ref/status.html">sqlite3_status()</a>.</p></li>
+
+ <li><p>The <a href="c3ref/initialize.html">sqlite3_initialize()</a> interface can be called to explicitly
+ initialize the SQLite subsystem. The <a href="c3ref/initialize.html">sqlite3_initialize()</a> interface is
+ called automatically when invoking certain interfaces so the use of
+ <a href="c3ref/initialize.html">sqlite3_initialize()</a> is not required, but it is recommended.</p></li>
+
+ <li><p>The <a href="c3ref/initialize.html">sqlite3_shutdown()</a> interface causes SQLite to release any
+ system resources (memory allocations, mutexes, open file handles)
+ that might have been allocated by <a href="c3ref/initialize.html">sqlite3_initialize()</a>.</p></li>
+
+ <li><p>The <a href="c3ref/next_stmt.html">sqlite3_next_stmt()</a> interface allows an application to discover
+ all <a href="c3ref/stmt.html">prepared statements</a> associated with a <a href="c3ref/sqlite3.html">database connection</a>.</p></li>
+
+ <li><p>Added the <a href="pragma.html#pragma_page_count">page_count</a> PRAGMA for returning the size of the underlying
+ database file in pages.</p></li>
+
+ <li><p>Added a new <a href="rtree.html">R*Tree index extension</a>.</p></li>
+
+ </ol>
+</p>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/35to36.in?m=f555d66703e47ed95">2016-09-28 14:07:03</a> UTC </small></i></p>
+
diff --git a/www/about.html b/www/about.html
new file mode 100644
index 0000000..9a6d8c1
--- /dev/null
+++ b/www/about.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>About SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1 align=center>About SQLite</h1>
+
+<div class="rightsidebar border2px">
+<h4 align="center">Executive Summary</h4>
+<ul>
+<li> <a href="fullsql.html">Full-featured SQL</a>
+<li> <a href='mostdeployed.html'>Billions and billions of deployments</a>
+<li> <a href='onefile.html'>Single-file database</a>
+<li> <a href='copyright.html'>Public domain source code</a>
+<li> All source code in one file (<a href='amalgamation.html'>sqlite3.c</a>)
+<li> <a href='footprint.html'>Small footprint</a>
+<li> Max DB size: <a href='limits.html'>281 terabytes</a>
+ (2<sup><small>48</small></sup> bytes)
+<li> Max row size: <a href='limits.html'>1 gigabyte</a>
+<li> <a href='fasterthanfs.html'>Faster than direct file I/O</a>
+<li> <a href='testing.html'>Aviation-grade quality and testing</a>
+<li> <a href='zeroconf.html'>Zero-configuration</a>
+<li> <a href='transactional.html'>ACID transactions, even after power loss</a>
+<li> <a href='fileformat.html'>Stable, enduring file format</a>
+<li> <a href='doclist.html'>Extensive, detailed documentation</a>
+<li> <a href='lts.html'>Long-term support</a>
+</div>
+
+<p>SQLite is an in-process library that implements a
+<a href="selfcontained.html">self-contained</a>,
+<a href="serverless.html">serverless</a>,
+<a href="zeroconf.html">zero-configuration</a>,
+<a href="transactional.html">transactional</a>
+SQL database engine.
+The code for SQLite is in the
+<a href="copyright.html">public domain</a> and is thus free for
+use for any purpose, commercial or private.
+SQLite is the <a href="mostdeployed.html">most widely deployed</a> database in the world
+with more applications than we can
+count, including several <a href="famous.html">high-profile projects.</a></p>
+
+<p>SQLite is an embedded SQL database engine.
+Unlike most other SQL databases, SQLite does not have a separate
+server process. SQLite reads and writes directly to ordinary disk
+files. A complete SQL database with multiple tables, indices,
+triggers, and views, is contained in a single disk file.
+The database <a href="fileformat2.html">file format</a> is cross-platform - you can freely copy a database
+between 32-bit and 64-bit systems or between
+<a href="http://en.wikipedia.org/wiki/Endianness">big-endian</a> and
+<a href="http://en.wikipedia.org/wiki/Endianness">little-endian</a>
+architectures. These features make SQLite a popular choice as
+an <a href="appfileformat.html">Application File Format</a>. SQLite database files are a
+<a href="locrsf.html">recommended storage format</a> by the US Library of Congress.
+Think of SQLite not as a replacement for
+<a href="http://www.oracle.com/database/index.html">Oracle</a> but
+as a replacement for <a href="http://man.he.net/man3/fopen">fopen()</a></p>
+
+<p>SQLite is a compact library.
+With all features enabled, the <a href="footprint.html">library size</a> can be less than 750KiB,
+depending on the target platform and compiler optimization settings.
+(64-bit code is larger. And some compiler optimizations
+such as aggressive function inlining and loop unrolling can cause the
+object code to be much larger.)
+There is a tradeoff between memory usage and speed.
+SQLite generally runs faster the more memory
+you give it. Nevertheless, performance is usually quite good even
+in low-memory environments. Depending on how it is used, SQLite can be
+<a href="fasterthanfs.html">faster than direct filesystem I/O</a>.</p>
+
+<p>SQLite is
+<a href="testing.html">very carefully tested</a> prior to every
+release and has a reputation for being very reliable.
+Most of the SQLite source code is devoted purely to testing and
+verification. An automated test suite runs millions and millions of
+test cases involving hundreds of millions of individual SQL statements
+and achieves <a href="testing.html#coverage">100% branch test coverage</a>.
+SQLite responds gracefully to memory
+allocation failures and disk I/O errors. Transactions are
+<a href="http://en.wikipedia.org/wiki/ACID">ACID</a>
+even if interrupted by system crashes or power failures.
+All of this is verified by
+the automated tests using special test harnesses which simulate
+system failures.
+Of course, even with all this testing, there are still bugs.
+But unlike some similar projects (especially commercial competitors)
+SQLite is open and honest about all bugs and provides
+<a href="http://www.sqlite.org/src/rptview?rn=1">bugs lists</a> and
+minute-by-minute <a href="http://www.sqlite.org/src/timeline">
+chronologies</a> of code changes.</p>
+
+<p>The SQLite code base is supported by an
+<a href="crew.html">international team</a> of developers who work on
+SQLite full-time.
+The developers continue to expand the capabilities of SQLite
+and enhance its reliability and performance while maintaining
+backwards compatibility with the
+<a href="c3ref/intro.html">published interface spec</a>,
+<a href="lang.html">SQL syntax</a>, and database <a href="fileformat2.html">file format</a>.
+The source code is absolutely free to anybody who wants it,
+but <a href="prosupport.html">professional support</a> is also available.</p>
+
+<p>The SQLite project was started on
+<a href="https://www.sqlite.org/src/timeline?c=2000-05-29+14:26:00">2000-05-09</a>.
+The future is always hard to predict, but the intent of the developers
+is to support SQLite through the year 2050. Design decisions are made
+with that objective in mind.</p>
+
+<p>We the developers hope that you find SQLite useful and we
+entreat you to use it well: to make good and beautiful products that
+are fast, reliable, and simple to use. Seek forgiveness for yourself
+as you forgive others. And just as you have received SQLite for free,
+so also freely give, paying the debt forward.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/about.in?m=46de6e4337000513b">2021-10-06 14:45:14</a> UTC </small></i></p>
+
diff --git a/www/aff_short.html b/www/aff_short.html
new file mode 100644
index 0000000..f66cce0
--- /dev/null
+++ b/www/aff_short.html
@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Benefits of SQLite As A File Format</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">
+SQLite As An Application File Format
+</h1>
+
+<p><i>(Note: The current page is a brief summary of why SQLite makes
+a good application file format. The topic is considered at greater
+detail in a <a href="appfileformat.html">separate technical note</a>.)</i></p>
+
+<p>
+SQLite has been used with great success as the on-disk file format
+for desktop applications such as version control systems,
+financial analysis tools, media cataloging and editing suites, CAD
+packages, record keeping programs, and so forth. The traditional
+File/Open operation calls sqlite3_open() to attach to the database
+file. Updates happen automatically as application content is revised
+so the File/Save menu option becomes superfluous. The File/Save_As
+menu option can be implemented using the <a href="backup.html">backup API</a>.
+</p>
+
+<p>
+There are many advantages to using SQLite as an application file format,
+including:
+</p>
+
+<ol type="1">
+<li><b>Better performance</b>
+<ul>
+<li> Reading and writing from an SQLite database
+ is often faster than reading and writing individual files from disk.
+ See <a href="fasterthanfs.html">35% Faster Than The Filesystem</a>
+ and <a href="intern-v-extern-blob.html">Internal Versus External BLOBs</a>.
+<li> The application only has to load the data it needs, rather
+ than reading the entire file and holding a complete parse
+ in memory.
+<li> Small edits only overwrite the parts of the file that change,
+ reducing write time and wear on SSD drives.
+</ul>
+<li><b>Reduced application cost and complexity</b>
+<ul>
+<li> No application file I/O code to write and debug.
+<li> Content can be accessed and updated using concise SQL queries instead
+ of lengthy and error-prone procedural routines.
+<li> The file format can be extended in future releases simply
+ by adding new tables and/or column, preserving backwards compatibility.
+<li> Applications can leverage the
+ <a href="fts3.html">full-text search</a> and <a href="rtree.html">RTREE</a> indexes and use triggers to implement
+ an <a href="undoredo.html">automated undo/redo stack</a>.
+<li> Performance problems can often be resolved, even late in the
+ development cycle, using <a href="lang_createindex.html">CREATE INDEX</a>, avoiding costly
+ redesign, rewrite, and retest efforts.
+</ul>
+<li><b>Portability</b>
+<ul>
+<li> The application file is portable across all operating systems,
+ 32-bit and 64-bit and big- and little-endian architectures.
+<li> A federation of programs, perhaps all written in different programming
+ languages, can access the same application file with no
+ compatibility concerns.
+<li> Multiple processes can attach to the same application
+ file and can read and write without interfering with each another.
+<li> Diverse content which might otherwise be stored as a "pile-of-files"
+ is encapsulated into a single disk file for simpler transport
+ via scp/ftp, USB stick, and/or email attachment.
+</ul>
+<li><b>Reliability</b>
+<ul>
+<li> Content can be updated continuously and atomically so
+ that little or no work is lost in a power failure or crash.
+<li> Bugs are far less likely in SQLite than in custom-written file I/O code.
+<li> SQL queries are many times smaller than the equivalent procedural
+ code, and since the number of bugs per line of code is roughly
+ constant, this means fewer bugs overall.
+</ul>
+<li><b>Accessibility</b>
+<ul>
+<li> SQLite database content can be viewed using a wide variety
+ third-party tools.
+<li> Content stored in an SQLite database is more likely to be
+ recoverable decades in the future, long after all traces of
+ the original application have been lost. Data lives longer than code.
+<li> SQLite database files are <a href="locrsf.html">recommended by the US Library of Congress</a>
+ as a storage format for long-term preservation of digital content.
+</ul>
+</ol>
+
+<p>
+SQLite allows database files to have any desired filename extension, so
+an application can choose a custom filename extension for its own use, if
+desired. The <a href="pragma.html#pragma_application_id">application_id pragma</a> can be used to set an "Application ID"
+integer in the database file so that tools like
+<a href="http://www.darwinsys.com/file/">file(1)</a> can determine that the file
+is associated with your application and is not just a generic
+SQL database.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/aff_short.in?m=e10af018ad82cdfc9">2018-05-29 18:35:58</a> UTC </small></i></p>
+
diff --git a/www/affcase1.html b/www/affcase1.html
new file mode 100644
index 0000000..d1c8e80
--- /dev/null
+++ b/www/affcase1.html
@@ -0,0 +1,686 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>What If OpenDocument Used SQLite?</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">
+What If OpenDocument Used SQLite?</h1>
+
+<h2>Introduction</h2>
+
+<p>Suppose the
+<a href="http://en.wikipedia.org/wiki/OpenDocument">OpenDocument</a> file format,
+and specifically the "ODP" OpenDocument Presentation format, were
+built around SQLite. Benefits would include:
+<ul>
+<li>Smaller documents
+<li>Faster File/Save times
+<li>Faster startup times
+<li>Less memory used
+<li>Document versioning
+<li>A better user experience
+</ul>
+
+<p>
+Note that this is only a thought experiment.
+We are not suggesting that OpenDocument be changed.
+Nor is this article a criticism of the current OpenDocument
+design. The point of this essay is to suggest ways to improve
+future file format designs.
+
+<h2>About OpenDocument And OpenDocument Presentation</h2>
+
+<p>
+The OpenDocument file format is used for office applications:
+word processors, spreadsheets, and presentations. It was originally
+designed for the OpenOffice suite but has since been incorporated into
+other desktop application suites. The OpenOffice application has been
+forked and renamed a few times. This author's primary use for OpenDocument is
+building slide presentations with either
+<a href="https://www.neooffice.org/neojava/en/index.php">NeoOffice</a> on Mac, or
+<a href="http://www.libreoffice.org/">LibreOffice</a> on Linux and Windows.
+
+<p>
+An OpenDocument Presentation or "ODP" file is a
+<a href="http://en.wikipedia.org/wiki/Zip_%28file_format%29">ZIP archive</a> containing
+XML files describing presentation slides and separate image files for the
+various images that are included as part of the presentation.
+(OpenDocument word processor and spreadsheet files are similarly
+structured but are not considered by this article.) The reader can
+easily see the content of an ODP file by using the "zip -l" command.
+For example, the following is the "zip -l" output from a 49-slide presentation
+about SQLite from the 2014
+<a href="http://southeastlinuxfest.org/">SouthEast LinuxFest</a>
+conference:
+
+<blockquote><pre>
+Archive: self2014.odp
+ Length Date Time Name
+--------- ---------- ----- ----
+ 47 2014-06-21 12:34 mimetype
+ 0 2014-06-21 12:34 Configurations2/statusbar/
+ 0 2014-06-21 12:34 Configurations2/accelerator/current.xml
+ 0 2014-06-21 12:34 Configurations2/floater/
+ 0 2014-06-21 12:34 Configurations2/popupmenu/
+ 0 2014-06-21 12:34 Configurations2/progressbar/
+ 0 2014-06-21 12:34 Configurations2/menubar/
+ 0 2014-06-21 12:34 Configurations2/toolbar/
+ 0 2014-06-21 12:34 Configurations2/images/Bitmaps/
+ 54702 2014-06-21 12:34 Pictures/10000000000001F40000018C595A5A3D.png
+ 46269 2014-06-21 12:34 Pictures/100000000000012C000000A8ED96BFD9.png
+<i>... 58 other pictures omitted...</i>
+ 13013 2014-06-21 12:34 Pictures/10000000000000EE0000004765E03BA8.png
+ 1005059 2014-06-21 12:34 Pictures/10000000000004760000034223EACEFD.png
+ 211831 2014-06-21 12:34 content.xml
+ 46169 2014-06-21 12:34 styles.xml
+ 1001 2014-06-21 12:34 meta.xml
+ 9291 2014-06-21 12:34 Thumbnails/thumbnail.png
+ 38705 2014-06-21 12:34 Thumbnails/thumbnail.pdf
+ 9664 2014-06-21 12:34 settings.xml
+ 9704 2014-06-21 12:34 META-INF/manifest.xml
+--------- -------
+ 10961006 78 files
+</pre></blockquote>
+
+<p>
+The ODP ZIP archive contains four different XML files:
+content.xml, styles.xml, meta.xml, and settings.xml. Those four files
+define the slide layout, text content, and styling. This particular
+presentation contains 62 images, ranging from full-screen pictures to
+tiny icons, each stored as a separate file in the Pictures
+folder. The "mimetype" file contains a single line of text that says:
+
+<blockquote><pre>
+application/vnd.oasis.opendocument.presentation
+</pre></blockquote>
+
+<p>The purpose of the other files and folders is presently
+unknown to the author but is probably not difficult to figure out.
+
+<h2>Limitations Of The OpenDocument Presentation Format</h2>
+
+<p>
+The use of a ZIP archive to encapsulate XML files plus resources is an
+elegant approach to an application file format.
+It is clearly superior to a custom binary file format.
+But using an SQLite database as the
+container, instead of ZIP, would be more elegant still.
+
+<p>A ZIP archive is basically a key/value database, optimized for
+the case of write-once/read-many and for a relatively small number
+of distinct keys (a few hundred to a few thousand) each with a large BLOB
+as its value. A ZIP archive can be viewed as a "pile-of-files"
+database. This works, but it has some shortcomings relative to an
+SQLite database, as follows:
+
+<ol>
+<li><p><b>Incremental update is hard.</b>
+<p>
+It is difficult to update individual entries in a ZIP archive.
+It is especially difficult to update individual entries in a ZIP
+archive in a way that does not destroy
+the entire document if the computer loses power and/or crashes
+in the middle of the update. It is not impossible to do this, but
+it is sufficiently difficult that nobody actually does it. Instead, whenever
+the user selects "File/Save", the entire ZIP archive is rewritten.
+Hence, "File/Save" takes longer than it ought, especially on
+older hardware. Newer machines are faster, but it is still bothersome
+that changing a single character in a 50 megabyte presentation causes one
+to burn through 50 megabytes of the finite write life on the SSD.
+
+<li><p><b>Startup is slow.</b>
+<p>
+In keeping with the pile-of-files theme, OpenDocument stores all slide
+content in a single big XML file named "content.xml".
+LibreOffice reads and parses this entire file just to display
+the first slide.
+LibreOffice also seems to
+read all images into memory as well, which makes sense seeing as when
+the user does "File/Save" it is going to have to write them all back out
+again, even though none of them changed. The net effect is that
+start-up is slow. Double-clicking an OpenDocument file brings up a
+progress bar rather than the first slide.
+This results in a bad user experience.
+The situation grows ever more annoying as
+the document size increases.
+
+<li><p><b>More memory is required.</b>
+<p>
+Because ZIP archives are optimized for storing big chunks of content, they
+encourage a style of programming where the entire document is read into
+memory at startup, all editing occurs in memory, then the entire document
+is written to disk during "File/Save". OpenOffice and its descendants
+embrace that pattern.
+
+<p>
+One might argue that it is ok, in this era of multi-gigabyte desktops, to
+read the entire document into memory.
+But it is not ok.
+For one, the amount of memory used far exceeds the (compressed) file size
+on disk. So a 50MB presentation might take 200MB or more RAM.
+That still is not a problem if one only edits a single document at a time.
+But when working on a talk, this author will typically have 10 or 15 different
+presentations up all at the same
+time (to facilitate copy/paste of slides from past presentation) and so
+gigabytes of memory are required.
+Add in an open web browser or two and a few other
+desktop apps, and suddenly the disk is whirling and the machine is swapping.
+And even having just a single document is a problem when working
+on an inexpensive Chromebook retrofitted with Ubuntu.
+Using less memory is always better.
+</p>
+
+<li><p><b>Crash recovery is difficult.</b>
+<p>
+The descendants of OpenOffice tend to segfault more often than commercial
+competitors. Perhaps for this reason, the OpenOffice forks make
+periodic backups of their in-memory documents so that users do not lose
+all pending edits when the inevitable application crash does occur.
+This causes frustrating pauses in the application for the few seconds
+while each backup is being made.
+After restarting from a crash, the user is presented with a dialog box
+that walks them through the recovery process. Managing the crash
+recovery this way involves lots of extra application logic and is
+generally an annoyance to the user.
+
+<li><p><b>Content is inaccessible.</b>
+<p>
+One cannot easily view, change, or extract the content of an
+OpenDocument presentation using generic tools.
+The only reasonable way to view or edit an OpenDocument document is to open
+it up using an application that is specifically designed to read or write
+OpenDocument (read: LibreOffice or one of its cousins). The situation
+could be worse. One can extract and view individual images (say) from
+a presentation using just the "zip" archiver tool. But it is not reasonable
+try to extract the text from a slide. Remember that all content is stored
+in a single "context.xml" file. That file is XML, so it is a text file.
+But it is not a text file that can be managed with an ordinary text
+editor. For the example presentation above, the content.xml file
+consist of exactly two lines. The first line of the file is just:
+
+<blockquote><pre>
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+</pre></blockquote>
+
+<p>The second line of the file contains 211792 characters of
+impenetrable XML. Yes, 211792 characters all on one line.
+This file is a good stress-test for a text editor.
+Thankfully, the file is not some obscure
+binary format, but in terms of accessibility, it might as well be
+written in Klingon.
+</ol>
+
+<h2>First Improvement: Replace ZIP with SQLite</h2>
+
+<p>
+Let us suppose that instead of using a ZIP archive to store its files,
+OpenDocument used a very simple SQLite database with the following
+single-table schema:
+
+<blockquote><pre>
+CREATE TABLE OpenDocTree(
+ filename TEXT PRIMARY KEY, -- Name of file
+ filesize BIGINT, -- Size of file after decompression
+ content BLOB -- Compressed file content
+);
+</pre></blockquote>
+
+<p>
+For this first experiment, nothing else about the file format is changed.
+The OpenDocument is still a pile-of-files, only now each file is a row
+in an SQLite database rather than an entry in a ZIP archive.
+This simple change does not use the power of a relational
+database. Even so, this simple change shows some improvements.
+
+<a name="smaller"></a>
+
+<p>
+Surprisingly, using SQLite in place of ZIP makes the presentation
+file smaller. Really. One would think that a relational database file
+would be larger than a ZIP archive, but at least in the case of NeoOffice
+that is not so. The following is an actual screen-scrape showing
+the sizes of the same NeoOffice presentation, both in its original
+ZIP archive format as generated by NeoOffice (self2014.odp), and
+as repacked as an SQLite database using the
+<a href="http://www.sqlite.org/sqlar/doc/trunk/README.md">SQLAR</a> utility:
+
+<blockquote><pre>
+-rw-r--r-- 1 drh staff 10514994 Jun 8 14:32 self2014.odp
+-rw-r--r-- 1 drh staff 10464256 Jun 8 14:37 self2014.sqlar
+-rw-r--r-- 1 drh staff 10416644 Jun 8 14:40 zip.odp
+</pre></blockquote>
+
+<p>
+The SQLite database file ("self2014.sqlar") is about a
+half percent smaller than the equivalent ODP file! How can this be?
+Apparently the ZIP archive generator logic in NeoOffice
+is not as efficient as it could be, because when the same pile-of-files
+is recompressed using the command-line "zip" utility, one gets a file
+("zip.odp") that is smaller still, by another half percent, as seen
+in the third line above. So, a well-written ZIP archive
+can be slightly smaller than the equivalent SQLite database, as one would
+expect. But the difference is slight. The key take-away is that an
+SQLite database is size-competitive with a ZIP archive.
+
+<p>
+The other advantage to using SQLite in place of
+ZIP is that the document can now be updated incrementally, without risk
+of corrupting the document if a power loss or other crash occurs in the
+middle of the update. (Remember that writes to
+<a href="atomiccommit.html">SQLite databases are atomic</a>.) True, all the
+content is still kept in a single big XML file ("content.xml") which must
+be completely rewritten if so much as a single character changes. But
+with SQLite, only that one file needs to change. The other 77 files in the
+repository can remain unaltered. They do not all have to be rewritten,
+which in turn makes "File/Save" run much faster and saves wear on SSDs.
+
+<h2>Second Improvement: Split content into smaller pieces</h2>
+
+<p>
+A pile-of-files encourages content to be stored in a few large chunks.
+In the case of ODP, there are just four XML files that define the layout
+off all slides in a presentation. An SQLite database allows storing
+information in a few large chunks, but SQLite is also adept and efficient
+at storing information in numerous smaller pieces.
+
+<p>
+So then, instead of storing all content for all slides in a single
+oversized XML file ("content.xml"), suppose there was a separate table
+for storing the content of each slide separately. The table schema
+might look something like this:
+
+<blockquote><pre>
+CREATE TABLE slide(
+ pageNumber INTEGER, -- The slide page number
+ slideContent TEXT -- Slide content as XML or JSON
+);
+CREATE INDEX slide_pgnum ON slide(pageNumber); -- Optional
+</pre></blockquote>
+
+<p>The content of each slide could still be stored as compressed XML.
+But now each page is stored separately. So when opening a new document,
+the application could simply run:
+
+<blockquote><pre>
+SELECT slideContent FROM slide WHERE pageNumber=1;
+</pre></blockquote>
+
+<p>This query will quickly and efficiently return the content of the first
+slide, which could then be speedily parsed and displayed to the user.
+Only one page needs to be read and parsed in order render the first screen,
+which means that the first screen appears much faster and
+there is no longer a need for an annoying progress bar.
+
+<p>If the application wanted
+to keep all content in memory, it could continue reading and parsing the
+other pages using a background thread after drawing the first page. Or,
+since reading from SQLite is so efficient, the application might
+instead choose to reduce its memory footprint and only keep a single
+slide in memory at a time. Or maybe it keeps the current slide and the
+next slide in memory, to facility rapid transitions to the next slide.
+
+<p>
+Notice that dividing up the content into smaller pieces using an SQLite
+table gives flexibility to the implementation. The application can choose
+to read all content into memory at startup. Or it can read just a
+few pages into memory and keep the rest on disk. Or it can read just
+single page into memory at a time. And different versions of the application
+can make different choices without having to make any changes to the
+file format. Such options are not available when all content is in
+a single big XML file in a ZIP archive.
+
+<p>
+Splitting content into smaller pieces also helps File/Save operations
+to go faster. Instead of having to write back the content of all pages
+when doing a File/Save, the application only has to write back those
+pages that have actually changed.
+
+<p>
+One minor downside of splitting content into smaller pieces is that
+compression does not work as well on shorter texts and so the size of
+the document might increase. But as the bulk of the document space
+is used to store images, a small reduction in the compression efficiency
+of the text content will hardly be noticeable, and is a small price
+to pay for an improved user experience.
+
+<h2>Third Improvement: Versioning</h2>
+
+<p>
+Once one is comfortable with the concept of storing each slide separately,
+it is a small step to support versioning of the presentation. Consider
+the following schema:
+
+<blockquote><pre>
+CREATE TABLE slide(
+ slideId INTEGER PRIMARY KEY,
+ derivedFrom INTEGER REFERENCES slide,
+ content TEXT -- XML or JSON or whatever
+);
+CREATE TABLE version(
+ versionId INTEGER PRIMARY KEY,
+ priorVersion INTEGER REFERENCES version,
+ checkinTime DATETIME, -- When this version was saved
+ comment TEXT, -- Description of this version
+ manifest TEXT -- List of integer slideIds
+);
+</pre></blockquote>
+
+<p>
+In this schema, instead of each slide having a page number that determines
+its order within the presentation, each slide has a unique
+integer identifier that is unrelated to where it occurs in sequence.
+The order of slides in the presentation is determined by a list of
+slideIds, stored as a text string in the MANIFEST column of the VERSION
+table.
+Since multiple entries are allowed in the VERSION table, that means that
+multiple presentations can be stored in the same document.
+
+<p>
+On startup, the application first decides which version it
+wants to display. Since the versionId will naturally increase in time
+and one would normally want to see the latest version, an appropriate
+query might be:
+
+<blockquote><pre>
+SELECT manifest, versionId FROM version ORDER BY versionId DESC LIMIT 1;
+</pre></blockquote>
+
+<p>
+Or perhaps the application would rather use the
+most recent checkinTime:
+
+<blockquote><pre>
+SELECT manifest, versionId, max(checkinTime) FROM version;
+</pre></blockquote>
+
+<p>
+Using a single query such as the above, the application obtains a list
+of the slideIds for all slides in the presentation. The application then
+queries for the content of the first slide, and parses and displays that
+content, as before.
+
+<p>(Aside: Yes, that second query above that uses "max(checkinTime)"
+really does work and really does return a well-defined answer in SQLite.
+Such a query either returns an undefined answer or generates an error
+in many other SQL database engines, but in SQLite it does what you would
+expect: it returns the manifest and versionId of the entry that has the
+maximum checkinTime.)
+
+<p>When the user does a "File/Save", instead of overwriting the modified
+slides, the application can now make new entries in the SLIDE table for
+just those slides that have been added or altered. Then it creates a
+new entry in the VERSION table containing the revised manifest.
+
+<p>The VERSION table shown above has columns to record a check-in comment
+(presumably supplied by the user) and the time and date at which the File/Save
+action occurred. It also records the parent version to record the history
+of changes. Perhaps the manifest could be stored as a delta from the
+parent version, though typically the manifest will be small enough that
+storing a delta might be more trouble than it is worth. The SLIDE table
+also contains a derivedFrom column which could be used for delta encoding
+if it is determined that saving the slide content as a delta from its
+previous version is a worthwhile optimization.
+
+<p>So with this simple change, the ODP file now stores not just the most
+recent edit to the presentation, but a history of all historic edits. The
+user would normally want to see just the most recent edition of the
+presentation, but if desired, the user can now go backwards in time to
+see historical versions of the same presentation.
+
+<p>Or, multiple presentations could be stored within the same document.
+
+<p>With such a schema, the application would no longer need to make
+periodic backups of the unsaved changes to a separate file to avoid lost
+work in the event of a crash. Instead, a special "pending" version could
+be allocated and unsaved changes could be written into the pending version.
+Because only changes would need to be written, not the entire document,
+saving the pending changes would only involve writing a few kilobytes of
+content, not multiple megabytes, and would take milliseconds instead of
+seconds, and so it could be done frequently and silently in the background.
+Then when a crash occurs and the user reboots, all (or almost all)
+of their work is retained. If the user decides to discard unsaved changes,
+they simply go back to the previous version.
+
+<p>
+There are details to fill in here.
+Perhaps a screen can be provided that displays a history changes
+(perhaps with a graph) allowing the user to select which version they
+want to view or edit. Perhaps some facility can be provided to merge
+forks that might occur in the version history. And perhaps the
+application should provide a means to purge old and unwanted versions.
+The key point is that using an SQLite database to store the content,
+rather than a ZIP archive, makes all of these features much, much easier
+to implement, which increases the possibility that they will eventually
+get implemented.
+
+<h2>And So Forth...</h2>
+
+<p>
+In the previous sections, we have seen how moving from a key/value
+store implemented as a ZIP archive to a simple SQLite database
+with just three tables can add significant capabilities to an application
+file format.
+We could continue to enhance the schema with new tables, with indexes
+added for performance, with triggers and views for programming convenience,
+and constraints to enforce consistency of content even in the face of
+programming errors. Further enhancement ideas include:
+<ul>
+<li> Store an <a href="undoredo.html">automated undo/redo stack</a> in a database table so that
+ Undo could go back into prior edit sessions.
+<li> Add <a href="fts3.html#fts4">full text search</a> capabilities to the slide deck, or across
+ multiple slide decks.
+<li> Decompose the "settings.xml" file into an SQL table that
+ is more easily viewed and edited by separate applications.
+<li> Break out the "Presentor Notes" from each slide into a separate
+ table, for easier access from third-party applications and/or scripts.
+<li> Enhance the presentation concept beyond the simple linear sequence of
+ slides to allow for side-tracks and excursions to be taken depending on
+ how the audience is responding.
+</ul>
+
+<p>
+An SQLite database has a lot of capability, which
+this essay has only begun to touch upon. But hopefully this quick glimpse
+has convinced some readers that using an SQL database as an application
+file format is worth a second look.
+
+<p>
+Some readers might resist using SQLite as an application
+file format due to prior exposure to enterprise SQL databases and
+the caveats and limitations of those other systems.
+For example, many enterprise database
+engines advise against storing large strings or BLOBs in the database
+and instead suggest that large strings and BLOBs be stored as separate
+files and the filename stored in the database. But SQLite
+is not like that. Any column of an SQLite database can hold
+a string or BLOB up to about a gigabyte in size. And for strings and
+BLOBs of 100 kilobytes or less,
+<a href="intern-v-extern-blob.html">I/O performance is better</a> than using separate
+files.
+
+<p>
+Some readers might be reluctant to consider SQLite as an application
+file format because they have been inculcated with the idea that all
+SQL database schemas must be factored into third normal form and store
+only small primitive data types such as strings and integers. Certainly
+relational theory is important and designers should strive to understand
+it. But, as demonstrated above, it is often quite acceptable to store
+complex information as XML or JSON in text fields of a database.
+Do what works, not what your database professor said you ought to do.
+
+<h2>Review Of The Benefits Of Using SQLite</h2>
+
+<p>
+In summary,
+the claim of this essay is that using SQLite as a container for an application
+file format like OpenDocument
+and storing lots of smaller objects in that container
+works out much better than using a ZIP archive holding a few larger objects.
+To wit:
+
+<ol>
+<li><p>
+An SQLite database file is approximately the same size, and in some cases
+smaller, than a ZIP archive holding the same information.
+
+<li><p>
+The <a href="atomiccommit.html">atomic update capabilities</a>
+of SQLite allow small incremental changes
+to be safely written into the document. This reduces total disk I/O
+and improves File/Save performance, enhancing the user experience.
+
+<li><p>
+Startup time is reduced by allowing the application to read in only the
+content shown for the initial screen. This largely eliminates the
+need to show a progress bar when opening a new document. The document
+just pops up immediately, further enhancing the user experience.
+
+<li><p>
+The memory footprint of the application can be dramatically reduced by
+only loading content that is relevant to the current display and keeping
+the bulk of the content on disk. The fast query capability of SQLite
+make this a viable alternative to keeping all content in memory at all times.
+And when applications use less memory, it makes the entire computer more
+responsive, further enhancing the user experience.
+
+<li><p>
+The schema of an SQL database is able to represent information more directly
+and succinctly than a key/value database such as a ZIP archive. This makes
+the document content more accessible to third-party applications and scripts
+and facilitates advanced features such as built-in document versioning, and
+incremental saving of work in progress for recovery after a crash.
+</ol>
+
+<p>
+These are just a few of the benefits of using SQLite as an application file
+format &mdash; the benefits that seem most likely to improve the user
+experience for applications like OpenOffice. Other applications might
+benefit from SQLite in different ways. See the <a href="appfileformat.html">Application File Format</a>
+document for additional ideas.
+
+<p>
+Finally, let us reiterate that this essay is a thought experiment.
+The OpenDocument format is well-established and already well-designed.
+Nobody really believes that OpenDocument should be changed to use SQLite
+as its container instead of ZIP. Nor is this article a criticism of
+OpenDocument for not choosing SQLite as its container since OpenDocument
+predates SQLite. Rather, the point of this article is to use OpenDocument
+as a concrete example of how SQLite can be used to build better
+application file formats for future projects.
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/affcase1.in?m=cbee5540a91bc6487">2018-11-30 21:04:18</a> UTC </small></i></p>
+
diff --git a/www/amalgamation.html b/www/amalgamation.html
new file mode 100644
index 0000000..94b42e8
--- /dev/null
+++ b/www/amalgamation.html
@@ -0,0 +1,288 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The SQLite Amalgamation</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The SQLite Amalgamation
+</div>
+</div>
+
+
+
+
+
+<h1 id="executive_summary"><span>1. </span>Executive Summary</h1>
+
+<p>Over 100 separate source files are concatenated into a
+single large file of C-code named "sqlite3.c" and
+referred to as "the amalgamation". The amalgamation
+contains everything an application needs to embed SQLite.
+
+</p><p>Combining all the code for SQLite into one big file makes SQLite
+easier to deploy &mdash; there is just one file to keep track of.
+And because all code is in
+a single translation unit, compilers can do
+better inter-procedure and inlining optimization
+resulting in machine code that is between 5% and 10% faster.
+
+</p><h1 id="the_sqlite_amalgamation"><span>2. </span>The SQLite Amalgamation</h1>
+
+<p>The SQLite library consists of 111 files of C code
+(as of <a href="releaselog/3_37_0.html">Version 3.37.0</a> - 2021-11-27)
+in the core with 22 additional files that
+implement certain commonly used extensions.
+
+Of the 133
+main source files, about 75% are C code and about 25% are C header files.
+Most of these are "source" files in the sense that they are stored
+in the <a href="https://www.sqlite.org/src">SQLite version control system</a>
+and are edited manually in an ordinary text editor.
+But some of the C-language files are generated using scripts
+or auxiliary programs. For example, the
+<a href="https://www.sqlite.org/src/artifact?ci=trunk&filename=src/parse.y">parse.y</a>
+file contains an LALR(1) grammar of the SQL language which is compiled,
+by the <a href="lemon.html">Lemon parser generator</a>, to produce a parser contained in the file
+"parse.c" accompanied by token identifiers in "parse.h".
+</p>
+
+<p>The makefiles for SQLite have an "sqlite3.c" target for building the
+amalgamation, to contain all C code for the core SQLite library and the
+<a href="fts3.html">FTS3</a>, <a href="fts5.html">FTS5</a>, <a href="rtree.html">RTREE</a>, <a href="dbstat.html">DBSTAT</a>, <a href="json1.html">JSON1</a>,
+<a href="rbu.html">RBU</a> and <a href="sessionintro.html">SESSION</a>
+extensions.
+This file contains about 238K lines of code
+(or 145K if you omit blank lines and comments) and is over 8.4 megabytes
+in size (as of 2021-12-29).
+
+</p><p>Though the various extensions are included in the
+"sqlite3.c" amalgamation file, they are disabled using #ifdef statements.
+Activate the extensions using <a href="compile.html">compile-time options</a> like:
+
+</p><ul>
+<li> <a href="compile.html#enable_fts3">-DSQLITE_ENABLE_FTS3</a>
+</li><li> <a href="compile.html#enable_fts5">-DSQLITE_ENABLE_FTS5</a>
+</li><li> <a href="compile.html#enable_rtree">-DSQLITE_ENABLE_RTREE</a>
+</li><li> <a href="compile.html#enable_dbstat_vtab">-DSQLITE_ENABLE_DBSTAT_VTAB</a>
+</li><li> <a href="compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a>
+</li><li> <a href="compile.html#enable_rbu">-DSQLITE_ENABLE_RBU</a>
+</li><li> <a href="compile.html#enable_session">-DSQLITE_ENABLE_SESSION</a>
+</li></ul>
+
+<p>The amalgamation contains everything you need to integrate SQLite
+into a larger project. Just copy the amalgamation into your source
+directory and compile it along with the other C code files in your project.
+(A <a href="howtocompile.html">more detailed discussion</a> of the compilation process is
+available.)
+You may also want to make use of the "sqlite3.h" header file that
+defines the programming API for SQLite.
+The sqlite3.h header file is available separately.
+The sqlite3.h file is also contained within the amalgamation, in
+the first few thousand lines. So if you have a copy of
+sqlite3.c but cannot seem to locate sqlite3.h, you can always
+regenerate the sqlite3.h by copying and pasting from the amalgamation.</p>
+
+<p>In addition to making SQLite easier to incorporate into other
+projects, the amalgamation also makes it run faster. Many
+compilers are able to do additional optimizations on code when
+it is contained with in a single translation unit such as it
+is in the amalgamation. We have measured performance improvements
+of between 5 and 10% when we use the amalgamation to compile
+SQLite rather than individual source files. The downside of this
+is that the additional optimizations often take the form of
+function inlining which tends to make the size of the resulting
+binary image larger.</p>
+
+<a name="amal32k"></a>
+
+<h1 id="the_split_amalgamation"><span>3. </span>The Split Amalgamation</h1>
+
+<p>Developers sometimes experience trouble debugging the
+quarter-million line amalgamation source file because some debuggers
+are only able to handle source code line numbers less than 32,768.
+The amalgamation source code runs fine. One just cannot single-step
+through it in a debugger.
+
+</p><p>To circumvent this limitation, the amalgamation is also available in
+a split form, consisting of files "sqlite3-1.c", "sqlite3-2.c", and
+so forth, where each file is less than 32,768 lines in length and
+where the concatenation of the files contain all of the code for the
+complete amalgamation. Then there is a separate source file named
+"sqlite3-all.c" which basically consists of code like this:
+
+</p><div class="codeblock"><pre>#include "sqlite3-1.c"
+#include "sqlite3-2.c"
+#include "sqlite3-3.c"
+#include "sqlite3-4.c"
+#include "sqlite3-5.c"
+#include "sqlite3-6.c"
+#include "sqlite3-7.c"
+</pre></div>
+
+<p>Applications using the split amalgamation simply compile against
+"sqlite3-all.c" instead of "sqlite3.c". The two files work exactly
+the same. But with "sqlite3-all.c", no single source file contains more
+than 32,767 lines of code, and so it is more convenient to use some
+debuggers. The downside of the split amalgamation is that it consists
+of 6 C source code files instead of just 1.
+
+</p><h1 id="download_copies_of_the_amalgamation"><span>4. </span>Download Copies Of The Amalgamation</h1>
+
+<p>The amalgamation and
+the sqlite3.h header file are available on
+the <a href="download.html">download page</a> as a file
+named sqlite-amalgamation-X.zip
+where the X is replaced by the appropriate version number.</p>
+
+<a name="amalgbuild"></a>
+
+<h1 id="building_the_amalgamation_from_canonical_source_code"><span>5. </span>Building The Amalgamation From Canonical Source Code</h1>
+
+<p>To build the amalgamation (either the full amalgamation or the
+split amalgamation), first
+<a href="getthecode.html">get the canonical source code</a> from one of the three servers.
+Then, on both unix-like systems and on Windows systems that have the
+free <a href="http://mingw.org/wiki/msys">MinGW</a> development environment
+installed, the amalgamation can be built using the
+following commands:
+
+</p><div class="codeblock"><pre>sh configure
+make sqlite3.c
+</pre></div>
+
+<p>To build using Microsoft Visual C++, run this command:
+
+</p><div class="codeblock"><pre>nmake /f makefile.msc sqlite3.c
+</pre></div>
+
+<p>In both cases, the split amalgamation can be obtained by
+substituting "sqlite3-all.c" for "sqlite3.c" as the make target.
+
+</p><h2 id="dependencies"><span>5.1. </span>Dependencies</h2>
+
+<p>The build process makes extensive use of the
+<a href="http://www.tcl-lang.org/">Tcl</a> scripting language. You will need to have a
+copy of TCL installed in order for the make targets above to work.
+Easy-to-use installers can be obtained from <a href="http://www.tcl-lang.org/">http://www.tcl-lang.org/</a>.
+Many unix workstations have Tcl installed by default.
+
+</p><h2 id="see_also"><span>5.2. </span>See Also</h2>
+
+<p>Additional notes on compiling SQLite can be found on the
+<a href="howtocompile.html">How To Compile SQLite</a> page.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/amalgamation.in?m=c4ea32719181acf27">2022-04-25 03:42:01</a> UTC </small></i></p>
+
diff --git a/www/appfileformat.html b/www/appfileformat.html
new file mode 100644
index 0000000..e590453
--- /dev/null
+++ b/www/appfileformat.html
@@ -0,0 +1,557 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite As An Application File Format</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">
+SQLite As An Application File Format
+</h1>
+
+<h2>Executive Summary</h2>
+
+<p>An SQLite database file with a defined schema
+often makes an excellent application file format.
+Here are a dozen reasons why this is so:
+
+<ol>
+<li> Simplified Application Development
+<li> Single-File Documents
+<li> High-Level Query Language
+<li> Accessible Content
+<li> Cross-Platform
+<li> Atomic Transactions
+<li> Incremental And Continuous Updates
+<li> Easily Extensible
+<li> Performance
+<li> Concurrent Use By Multiple Processes
+<li> Multiple Programming Languages
+<li> Better Applications
+</ol>
+
+<p>Each of these points will be described in more detail below,
+after first considering more closely the meaning of
+"application file format". See also the <a href="aff_short.html">short version</a> of this
+whitepaper.
+
+<h2>What Is An Application File Format?</h2>
+
+<p>
+An "application file format" is the file format
+used to persist application state to disk or to exchange
+information between programs.
+There are thousands of application file formats in use today.
+Here are just a few examples:
+
+<ul>
+<li>DOC - Word Perfect and Microsoft Office documents
+<li>DWG - AutoCAD drawings
+<li>PDF - Portable Document Format from Adobe
+<li>XLS - Microsoft Excel Spreadsheet
+<li>GIT - Git source code repository
+<li>EPUB - The Electronic Publication format used by non-Kindle eBooks
+<li>ODT - The Open Document format used by OpenOffice and others
+<li>PPT - Microsoft PowerPoint presentations
+<li>ODP - The Open Document presentation format used by OpenOffice and others
+</ul>
+
+<p>We make a distinction between a "file format" and an "application format".
+A file format is used to store a single object. So, for example, a GIF or
+JPEG file stores a single image, and an XHTML file stores text,
+so those are "file formats" and not "application formats". An EPUB file,
+in contrast, stores both text and images (as contained XHTML and GIF/JPEG
+files) and so it is considered an "application format". This article is
+about "application formats".
+
+<p>The boundary between a file format and an application format is fuzzy.
+This article calls JPEG a file format, but for an image editor, JPEG
+might be considered the application format. Much depends on context.
+For this article, let us say that a file format stores a single object
+and an application format stores many different objects and their relationships
+to one another.
+
+<p>Most application formats fit into one of these three categories:
+
+<ol>
+<li><p><b>Fully Custom Formats.</b>
+Custom formats are specifically designed for a single application.
+DOC, DWG, PDF, XLS, and PPT are examples of custom formats. Custom
+formats are usually contained within a single file, for ease of transport.
+They are also usually binary, though the DWG format is a notable exception.
+Custom file formats require specialized application code
+to read and write and are not normally accessible from commonly
+available tools such as unix command-line programs and text editors.
+In other words, custom formats are usually "opaque blobs".
+To access the content of a custom application file format, one needs
+a tool specifically engineered to read and/or write that format.
+
+<li><p><b>Pile-of-Files Formats.</b>
+Sometimes the application state is stored as a hierarchy of
+files. Git is a prime example of this, though the phenomenon occurs
+frequently in one-off and bespoke applications. A pile-of-files format
+essentially uses the filesystem as a key/value database, storing small
+chunks of information into separate files. This gives the
+advantage of making the content more accessible to common utility
+programs such as text editors or "awk" or "grep". But even if many
+of the files in a pile-of-files format
+are easily readable, there are usually some files that have their
+own custom format (example: Git "Packfiles") and are hence
+"opaque blobs" that are not readable
+or writable without specialized tools. It is also much less convenient
+to move a pile-of-files from one place or machine to another, than
+it is to move a single file. And it is hard to make a pile-of-files
+document into an email attachment, for example. Finally, a pile-of-files
+format breaks the "document metaphor":
+there is no one file that a user can point to
+that is "the document".
+
+<li><p><b>Wrapped Pile-of-Files Formats.</b>
+Some applications use a Pile-of-Files that is then encapsulated into
+some kind of single-file container, usually a ZIP archive.
+EPUB, ODT,and ODP are examples of this approach.
+An EPUB book is really just a ZIP archive that contains various
+XHTML files for the text of book chapters, GIF and JPEG images for
+the artwork, and a specialized catalog file that tells the eBook
+reader how all the XML and image files fit together. OpenOffice
+documents (ODT and ODP) are also ZIP archives containing XML and
+images that represent their content as well as "catalog" files that
+show the interrelationships between the component parts.
+
+<p>A wrapped pile-of-files format is a compromise between a full
+custom file format and a pure pile-of-files format.
+A wrapped pile-of-files format is not an opaque blob in the same sense
+as a custom format, since the component parts can still be accessed
+using any common ZIP archiver, but the format is not quite as accessible
+as a pure pile-of-files format because one does still need the ZIP
+archiver, and one cannot normally use command-line tools like "find"
+on the file hierarchy without first un-zipping it. On the other
+hand, a wrapped pile-of-files format does preserve the document
+metaphor by putting all content into a single disk file. And
+because it is compressed, the wrapped pile-of-files format tends to
+be more compact.
+
+<p>As with custom file formats, and unlike pure pile-of-file formats,
+a wrapped pile-of-files format is not as easy to edit, since
+usually the entire file must be rewritten in order to change any
+component part.
+</ol>
+
+<p>The purpose of this document is to argue in favor of a fourth
+new category of application file format: An SQLite database file.
+
+<h2>SQLite As The Application File Format</h2>
+
+<p>
+Any application state that can be recorded in a pile-of-files can
+also be recorded in an SQLite database with a simple key/value schema
+like this:
+<blockquote><pre>
+CREATE TABLE files(filename TEXT PRIMARY KEY, content BLOB);
+</pre></blockquote>
+If the content is compressed, then such an <a href="sqlar.html">SQLite Archive</a> database is
+<a href="affcase1.html#smaller">the same size</a> (&#177;1%)
+as an equivalent ZIP archive, and it has the advantage
+of being able to update individual "files" without rewriting
+the entire document.
+
+<p>
+But an SQLite database is not limited to a simple key/value structure
+like a pile-of-files database. An SQLite database can have dozens
+or hundreds or thousands of different tables, with dozens or
+hundreds or thousands of fields per table, each with different datatypes
+and constraints and particular meanings, all cross-referencing each other,
+appropriately and automatically indexed for rapid retrieval,
+and all stored efficiently and compactly in a single disk file.
+And all of this structure is succinctly documented for humans
+by the SQL schema.
+
+<p>In other words, an SQLite database can do everything that a
+pile-of-files or wrapped pile-of-files format can do, plus much more,
+and with greater lucidity.
+An SQLite database is a more versatile container than key/value
+filesystem or a ZIP archive. (For a detailed example, see the
+<a href="affcase1.html">OpenOffice case study</a> essay.)
+
+<p>The power of an SQLite database could, in theory, be achieved using
+a custom file format. But any custom file format that is as expressive
+as a relational database would likely require an enormous design specification
+and many tens or hundreds of thousands of lines of code to
+implement. And the end result would be an "opaque blob" that is
+inaccessible without specialized tools.
+
+<p>
+Hence, in comparison to other approaches, the use of
+an SQLite database as an application file format has
+compelling advantages. Here are a few of these advantages,
+enumerated and expounded:
+</p>
+
+<ol>
+<li><p><b>Simplified Application Development.</b>
+No new code is needed for reading or writing the application file.
+One has merely to link against the SQLite library, or include the
+<a href="amalgamation.html">single "sqlite3.c" source file</a> with the rest of the
+application C code, and SQLite will take care of all of the application
+file I/O. This can reduce application code size by many thousands of
+lines, with corresponding saving in development and maintenance costs.
+
+<p>SQLite is one of the
+<a href="mostdeployed.html">most used</a> software libraries in the world.
+There are literally tens of billions of SQLite database files in use
+daily, on smartphones and gadgets and in desktop applications.
+SQLite is <a href="testing.html">carefully tested</a> and proven reliable. It is not
+a component that needs much tuning or debugging, allowing developers
+to stay focused on application logic.
+
+<li><p><b>Single-File Documents.</b>
+An SQLite database is contained in a single file, which is easily
+copied or moved or attached. The "document" metaphor is preserved.
+
+<p>SQLite does not have any file naming requirements
+and so the application can use any custom file suffix that it wants
+to help identify the file as "belonging" to the application.
+SQLite database files contain a 4-byte <a href="fileformat2.html#appid">Application ID</a> in
+their headers that can be set to an application-defined value
+and then used to identify the "type" of the document for utility
+programs such as <a href="http://linux.die.net/man/1/file">file(1)</a>, further
+enhancing the document metaphor.
+
+
+<li><p><b>High-Level Query Language.</b>
+SQLite is a complete relational database engine, which means that the
+application can access content using high-level queries. Application
+developers need not spend time thinking about "how" to retrieve the
+information they need from a document. Developers write SQL that
+expresses "what" information they want and let the database engine
+to figure out how to best retrieve that content. This helps developers
+operate "heads up" and remain focused on solving the user's problem,
+and avoid time spent "heads down" fiddling with low-level file
+formatting details.
+
+<p>A pile-of-files format can be viewed as a key/value database.
+A key/value database is better than no database at all.
+But without transactions or indices or a high-level query language or
+a proper schema,
+it is much harder and more error prone to use a key/value database than
+a relational database.
+
+<li><p><b>Accessible Content.</b>
+Information held in an SQLite database file is accessible using
+commonly available open-source command-line tools - tools that
+are installed by default on Mac and Linux systems and that are
+freely available as a self-contained EXE file on Windows.
+Unlike custom file formats, application-specific programs are
+not required to read or write content in an SQLite database.
+An SQLite database file is not an opaque blob. It is true
+that command-line tools such as text editors or "grep" or "awk" are
+not useful on an SQLite database, but the SQL query language is a much
+more powerful and convenient way for examining the content, so the
+inability to use "grep" and "awk" and the like is not seen as a loss.
+
+<p>An SQLite database is a <a href="fileformat2.html">well-defined and well-documented</a>
+file format that is in widespread use by literally millions of applications
+and is backwards compatible to its inception in 2004 and which promises
+to continue to be compatible in decades to come. The longevity of
+SQLite database files is particularly important to bespoke applications,
+since it allows the document content to be accessed far in the
+future, long after all traces of the original application have been lost.
+Data lives longer than code.
+SQLite databases are <a href="locrsf.html">recommended by the US Library of Congress</a>
+as a storage format for long-term preservation of digital content.
+
+
+<li><p><b>Cross-Platform.</b>
+SQLite database files are portable between 32-bit and 64-bit machines and
+between big-endian and little-endian architectures and between any of the
+various flavors of Windows and Unix-like operating systems.
+The application using an SQLite application file format can store
+binary numeric data without having to worry about the byte-order of
+integers or floating point numbers.
+Text content can be read or written as UTF-8, UTF-16LE, or UTF-16BE and
+SQLite will automatically perform any necessary translations on-the-fly.
+
+<li><p><b>Atomic Transactions.</b>
+Writes to an SQLite database are <a href="atomiccommit.html">atomic</a>.
+They either happen completely
+or not at all, even during system crashes or power failures. So
+there is no danger of corrupting a document just because the power happened
+to go out at the same instant that a change was being written to disk.
+
+<p>SQLite is transactional, meaning that multiple changes can be grouped
+together such that either all or none of them occur, and so that the
+changes can be rolled back if a problem is found prior to commit.
+This allows an application to make a change incrementally, then run
+various sanity and consistency checks on the resulting data prior to
+committing the changes to disk. The
+<a href="http://www.fossil-scm.org/">Fossil</a> DVCS
+<a href="http://www.fossil-scm.org/fossil/doc/tip/www/selfcheck.wiki">uses this technique</a>
+to verify that no repository history has been lost prior to each change.
+
+<li><p><b>Incremental And Continuous Updates.</b>
+When writing to an SQLite database file, only those parts of the file that
+actually change are written out to disk. This makes the writing happen faster
+and saves wear on SSDs. This is an enormous advantage over custom
+and wrapped pile-of-files formats, both of which usually require a
+rewrite of the entire document in order to change a single byte.
+Pure pile-of-files formats can also
+do incremental updates to some extent, though the granularity of writes is
+usually larger with pile-of-file formats (a single file) than with SQLite
+(a single page).
+
+<p>SQLite also supports continuous update.
+Instead of collecting changes in memory and then writing
+them to disk only on a File/Save action, changes can be written back to
+the disk as they occur. This avoids loss of work on a system crash or
+power failure. An <a href="undoredo.html">automated undo/redo stack</a>, managed using triggers,
+can be kept in the on-disk database, meaning that undo/redo can occur
+across session boundaries.
+
+<li><p><b>Easily Extensible.</b>
+As an application grows, new features can be added to an
+SQLite application file format simply by adding new tables to the schema
+or by adding new columns to existing tables. Adding columns or tables
+does not change the meaning of prior queries, so with a
+modicum of care to ensuring that the meaning of legacy columns and
+tables are preserved, backwards compatibility is maintained.
+
+<p>It is possible to extend custom or pile-of-files formats too, of course,
+but doing is often much harder. If indices are added, then all application
+code that changes the corresponding tables must be located and modified to
+keep those indices up-to-date. If columns are added, then all application
+code that accesses the corresponding table must be located and modified to
+take into account the new columns.
+
+<li><p><b>Performance.</b>
+In many cases, an SQLite application file format will be
+<a href="fasterthanfs.html">faster than a pile-of-files format</a> or
+a custom format. In addition to being faster for raw read and
+writes, SQLite can often dramatically improves start-up times because
+instead of having to
+read and parse the entire document into memory, the application can
+do queries to extract only the information needed for the initial screen.
+As the application progresses, it only needs to load as much material as
+is needed to draw the next screen, and can discard information from
+prior screens that is no longer in use. This helps keep the memory
+footprint of the application under control.
+
+<p>A pile-of-files format can be read incrementally just like SQLite.
+But many developers are surprised to learn that SQLite can read and
+write smaller BLOBs (less than about 100KB in size) from its database
+faster than those same blobs can be read or written as separate files
+from the filesystem. (See
+<a href="fasterthanfs.html">35% Faster Than The Filesystem</a> and
+<a href="intern-v-extern-blob.html">Internal Versus External BLOBs</a> for further information.)
+There is overhead associated with operating a relational
+database engine, however one should not assume that direct file I/O
+is faster than SQLite database I/O, as often it is not.
+
+<p>In either case, if performance problems do arise in an SQLite application
+those problems can often be resolved by adding one or two <a href="lang_createindex.html">CREATE INDEX</a>
+statements to the schema or perhaps running <a href="lang_analyze.html">ANALYZE</a> one time
+and without having to touch a single line of
+application code. But if a performance problem comes up in a custom or
+pile-of-files format, the fix will often require extensive changes
+to application code to add and maintain new indices or to extract
+information using different algorithms.
+
+<li><p><b>Concurrent Use By Multiple Processes.</b>
+SQLite automatically coordinates concurrent access to the same
+document from multiple threads and/or processes. Two or more
+applications can connect and read from the same document at the
+same time. Writes are serialized, but as writes normally only
+take milliseconds, applications simply take turns writing.
+SQLite automatically ensures that the low-level format of the
+document is uncorrupted. Accomplishing the same with a custom
+or pile-of-files format, in contrast, requires extensive support
+in the application. And the application logic needed to support
+concurrency is a notorious bug-magnet.
+
+<li><p><b>Multiple Programming Languages.</b>
+Though SQLite is itself written in ANSI-C, interfaces exist for
+just about every other programming language you can think of:
+C++, C#, Objective-C, Java, Tcl, Perl, Python, Ruby, Erlang,
+JavaScript, and so forth. So programmers can develop in whatever
+language they are most comfortable with and which best matches
+the needs of the project.
+
+<p>An SQLite application file format is a great
+choice in cases where there is a collection or "federation" of
+separate programs, often written in different languages and by
+different development teams.
+This comes up commonly in research or laboratory
+environments where one team is responsible for data acquisition
+and other teams are responsible for various stages of analysis.
+Each team can use whatever hardware, operating system,
+programming language and development methodology that they are
+most comfortable with, and as long as all programs use an SQLite
+database with a common schema, they can all interoperate.
+
+
+<li><p><b>Better Applications.</b>
+If the application file format is an SQLite database, the complete
+documentation for that file format consists of the database schema,
+with perhaps a few extra words about what each table and column
+represents. The description of a custom file format,
+on the other hand, typically runs on for hundreds of
+pages. A pile-of-files format, while much simpler and easier to
+describe than a fully custom format, still tends to be much larger
+and more complex than an SQL schema dump, since the names and format
+for the individual files must still be described.
+
+<p>This is not a trivial point. A clear, concise, and easy to understand
+file format is a crucial part of any application design.
+Fred Brooks, in his all-time best-selling computer science text,
+<i>The Mythical Man-Month</i> says:
+<blockquote><i>Representation is the
+essence of computer programming.<br />...<br />
+Show me your flowcharts and conceal your tables, and I shall
+continue to be mystified. Show me your tables, and I won't usually
+need your flowcharts; they'll be obvious.</i></blockquote>
+<p>Rob Pike, in his
+<i>Rules of Programming</i> expresses the same idea this way:
+<blockquote>
+<i>Data dominates. If you've chosen the right data structures
+and organized things well, the algorithms will almost always
+be self-evident. Data structures, not algorithms, are central
+to programming.</i></blockquote>
+<p> Linus Torvalds used different words to say
+much the same thing on the Git mailing list on 2006-06-27:
+<blockquote>
+<i>Bad programmers worry about the code. Good programmers worry
+about data structures and their relationships.</i>
+</blockquote>
+
+<p>The point is this: an SQL database schema almost always does
+a far better job of defining and organizing the tables and
+data structures and their relationships.
+And having clear, concise, and well-defined representation
+almost always results in an application that performs better,
+has fewer problems, and is easier to develop and maintain.
+</ol>
+
+<h2>Conclusion</h2>
+
+<p>
+SQLite is not the perfect application file format for every situation.
+But in many cases, SQLite is a far better choice than either a custom
+file format, a pile-of-files, or a wrapped pile-of-files.
+SQLite is a high-level, stable, reliable, cross-platform, widely-deployed,
+extensible, performant, accessible, concurrent file format. It deserves
+your consideration as the standard file format on your next application
+design.
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/appfileformat.in?m=dcc7b088c6d63d3ce">2018-05-29 18:35:58</a> UTC </small></i></p>
+
diff --git a/www/appfunc.html b/www/appfunc.html
new file mode 100644
index 0000000..8460e8a
--- /dev/null
+++ b/www/appfunc.html
@@ -0,0 +1,566 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Application-Defined SQL Functions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Application-Defined SQL Functions
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#executive_summary">1. Executive Summary</a></div>
+<div class="fancy-toc1"><a href="#defining_new_sql_functions">2. Defining New SQL Functions</a></div>
+<div class="fancy-toc2"><a href="#common_parameters">2.1. Common Parameters</a></div>
+<div class="fancy-toc2"><a href="#multiple_calls_to_sqlite3_create_function_for_the_same_function">2.2. Multiple Calls To sqlite3_create_function() For The Same Function</a></div>
+<div class="fancy-toc2"><a href="#callbacks">2.3. Callbacks</a></div>
+<div class="fancy-toc3"><a href="#the_scalar_function_callback">2.3.1. The Scalar Function Callback</a></div>
+<div class="fancy-toc3"><a href="#the_aggregate_function_callbacks">2.3.2. The Aggregate Function Callbacks</a></div>
+<div class="fancy-toc3"><a href="#the_window_function_callbacks">2.3.3. The Window Function Callbacks</a></div>
+<div class="fancy-toc3"><a href="#examples">2.3.4. Examples</a></div>
+<div class="fancy-toc1"><a href="#security_implications">3. Security Implications</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="executive_summary"><span>1. </span>Executive Summary</h1>
+
+<p>Applications that use SQLite can define custom SQL functions that call
+back into application code to compute their results. The custom SQL
+function implementations can be embedded in the application code itself,
+or can be <a href="loadext.html">loadable extensions</a>.
+
+</p><p>Application-defined or custom SQL functions are created using the
+<a href="c3ref/create_function.html">sqlite3_create_function()</a> family of interfaces.
+Custom SQL functions can be scalar functions, aggregate functions,
+or <a href="windowfunctions.html">window functions</a>.
+Custom SQL functions can have any number of arguments from 0 up to
+<a href="limits.html#max_function_arg">SQLITE_MAX_FUNCTION_ARG</a>.
+The <a href="c3ref/create_function.html">sqlite3_create_function()</a> interface specifies callbacks that are
+invoked to carry out the processing for the new SQL function.
+
+</p><p>SQLite also supports custom <a href="vtab.html#tabfunc2">table-valued functions</a>, but they are
+implemented by a different mechanism that is not covered in this document.
+
+</p><h1 id="defining_new_sql_functions"><span>2. </span>Defining New SQL Functions</h1>
+
+<p>
+The <a href="c3ref/create_function.html">sqlite3_create_function()</a> family of interfaces is used to create
+new custom SQL functions. Each member of this family is a wrapper around
+a common core. All family members accomplish the same thing; they merely
+have different calling signatures.
+
+</p><ul>
+<li><p><b><a href="c3ref/create_function.html">sqlite3_create_function()</a></b> &rarr;
+The original version of sqlite3_create_function() allows the application
+to create a single new SQL function that can be either a scalar or an
+aggregate. The name of the function is specified using UTF8.
+
+</p></li><li><p><b><a href="c3ref/create_function.html">sqlite3_create_function16()</a></b> &rarr;
+This variant works exactly like the sqlite3_create_function() original
+except that the name of the function itself is specified as a UTF16
+string rather than as a UTF8 string.
+
+</p></li><li><p><b><a href="c3ref/create_function.html">sqlite3_create_function_v2()</a></b> &rarr;
+This variant works like the original sqlite3_create_function() except
+that it includes an additional parameter that is a pointer to a
+destructor for the <a href="c3ref/user_data.html">sqlite3_user_data()</a> pointer that is passed in
+as the 5th argument to all of the sqlite3_create_function() variants.
+That destructor function (if it is non-NULL) is called when the
+custom function is deleted - usually when the database connection is
+closing.
+
+</p></li><li><p><b><a href="c3ref/create_function.html">sqlite3_create_window_function()</a></b> &rarr;
+This variant works like the original sqlite3_create_function() except
+that it accepts a different set of callback pointers - the callback
+pointers used by <a href="windowfunctions.html">window function</a> definitions.
+</p></li></ul>
+
+<h2 id="common_parameters"><span>2.1. </span>Common Parameters</h2>
+
+<p>Many of the parameters passed to the <a href="c3ref/create_function.html">sqlite3_create_function()</a>
+family of interfaces are common across the entire family.
+
+</p><ol>
+<li><p><b>db</b> &rarr;
+The 1st parameter is always a pointer to the <a href="c3ref/sqlite3.html">database connection</a>
+on which the custom SQL function will work. Custom SQL functions are
+created separately for each database connection. There is no short-hand
+mechanism for creating SQL functions that work across all database
+connections.
+
+</p></li><li><p><b>zFunctionName</b> &rarr;
+The 2nd parameter is the name of the SQL function that is being
+created. The name is usually in UTF8, except that the name should
+be in UTF16 in the native byte order for <a href="c3ref/create_function.html">sqlite3_create_function16()</a>.
+</p><p>
+The maximum length of a SQL function name is 255 bytes of UTF8.
+Any attempt to create a function with a longer name will result in
+an <a href="rescode.html#misuse">SQLITE_MISUSE</a> error.
+</p>
+The SQL function creation interfaces may be called multiple
+times with the same function name.
+If two calls have the same function number but a different number of
+arguments, for example, then two variants of the SQL function will
+be registered, each taking a different number of arguments.
+
+</li><li><p><b>nArg</b> &rarr;
+The 3rd parameter is always the number of arguments that the function
+accepts. The value must be an integer between -1 and
+<a href="limits.html#max_function_arg">SQLITE_MAX_FUNCTION_ARG</a> (default value: 127). A value of -1 means
+that the SQL function is a variadic function that can take any number
+of arguments between 0 and <a href="limits.html#max_function_arg">SQLITE_MAX_FUNCTION_ARG</a>.
+
+</p></li><li><p><b>eTextRep</b> &rarr;
+The 4th parameter is a 32-bit integer flag whose bits convey various
+properties about the new function. The original purpose of this
+parameter was to specify the preferred text encoding for the function,
+using one of the following constants:
+</p><ul>
+<li> <a href="c3ref/c_any.html">SQLITE_UTF8</a>
+</li><li> <a href="c3ref/c_any.html">SQLITE_UTF16BE</a>
+</li><li> <a href="c3ref/c_any.html">SQLITE_UTF16LE</a>
+</li></ul>
+All custom SQL functions will accept text in any encoding. Encoding
+conversions will happen automatically. The preferred encoding merely
+specifies the encoding for which the function implementation is optimized.
+It is possible to specify multiple functions with the same name and the
+same number of arguments, but different preferred encodings and different
+callbacks used to implement the function, and SQLite will chose the
+set of callbacks for which the input encodings most closely match the
+preferred encoding.
+<p>
+The 4th parameter as more recently be extended with additional flag bits
+to convey additional information about the function. The additional
+bits include:
+</p><ul>
+<li> <a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a>
+</li><li> <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>
+</li><li> <a href="c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a>
+</li><li> <a href="c3ref/c_deterministic.html#sqlitesubtype">SQLITE_SUBTYPE</a>
+</li></ul>
+<p>
+Additional bits may be added in future versions of SQLite.
+
+</p></li><li><p><b>pApp</b> &rarr;
+The 5th parameter is an arbitrary pointer that is passed through
+into the callback routines. SQLite itself does nothing with this
+pointer, except to make it available to the callbacks, and to pass
+it into the destructor when the function is unregistered.
+</p></li></ol>
+
+<h2 id="multiple_calls_to_sqlite3_create_function_for_the_same_function"><span>2.2. </span>Multiple Calls To sqlite3_create_function() For The Same Function</h2>
+
+<p>
+It is common for an application to invoke sqlite3_create_function() multiple
+times for the same SQL function. For example, if an SQL function can take
+either 2 or 3 arguments, then sqlite3_create_function() would be invoked
+once for the 2-argument version and a second time for the 3-argument version.
+The underlying implementation (the callbacks) can be different for both
+variants.
+
+</p><p>
+An application can also register multiple SQL functions with the same name
+and same number of arguments, but a different preferred text encoding.
+In that case, SQLite will invoke the function using the callbacks for
+the version whose preferred text encoding most closely matches the database
+text encoding. In this way, multiple implementations of the same function
+can be provided that are optimized for UTF8 or UTF16.
+
+</p><p>
+If multiple calls to sqlite3_create_function() specify the same function name,
+and the same number of arguments, and the same preferred text encoding, then
+the callbacks and other parameters of the second call overwrite the first,
+and the destructor callback from the first call (if it exists) is invoked.
+
+
+</p><h2 id="callbacks"><span>2.3. </span>Callbacks</h2>
+
+<p>
+SQLite evaluates an SQL function by invoking callback routines.
+
+</p><h3 id="the_scalar_function_callback"><span>2.3.1. </span>The Scalar Function Callback</h3>
+
+<p>Scalar SQL functions are implemented by a single callback in the
+<b>xFunc</b> parameter to sqlite3_create_function().
+The following code demonstrations the implementation of a "noop(X)"
+scalar SQL function that merely returns its argument:
+
+</p><div class="codeblock"><pre>static void noopfunc(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ assert( argc==1 );
+ sqlite3_result_value(context, argv&#91;0&#93;);
+}
+</pre></div>
+
+<p>
+The 1st parameter, <b>context</b>, is a pointer to an opaque object
+that describes the content from which the SQL function was invoked. This
+context point becomes the first parameter to many other routines that
+the function implement might to invoke, including:
+
+<div class='columns' style='columns: 15em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='c3ref/aggregate_context.html'>sqlite3_aggregate_context</a></li>
+<li><a href='c3ref/context_db_handle.html'>sqlite3_context_db_handle</a></li>
+<li><a href='c3ref/get_auxdata.html'>sqlite3_get_auxdata</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_blob</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_blob64</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_double</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_error</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_error16</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_error_code</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_error_nomem</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_error_toobig</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_int</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_int64</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_null</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_pointer</a></li>
+<li><a href='c3ref/result_subtype.html'>sqlite3_result_subtype</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_text</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_text16</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_text16be</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_text16le</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_text64</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_value</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_zeroblob</a></li>
+<li><a href='c3ref/result_blob.html'>sqlite3_result_zeroblob64</a></li>
+<li><a href='c3ref/get_auxdata.html'>sqlite3_set_auxdata</a></li>
+<li><a href='c3ref/user_data.html'>sqlite3_user_data</a></li>
+</ul>
+</div>
+
+
+</p><p>The <a href="c3ref/result_blob.html">sqlite3_result() family of functions</a> are
+used to specify the result of the scalar SQL function. One or more of
+these should be invoked by the callback to set the function return value.
+If none of these routines are invoked for a specific callback, then the
+return value will be NULL.
+
+</p><p>The <a href="c3ref/user_data.html">sqlite3_user_data()</a> routine returns a copy of the <b>pArg</b>
+pointer that was given to <a href="c3ref/create_function.html">sqlite3_create_function()</a> when the SQL
+function was created.
+
+</p><p>The <a href="c3ref/context_db_handle.html">sqlite3_context_db_handle()</a> routine returns a pointer to the
+<a href="c3ref/sqlite3.html">database connection</a> object.
+
+</p><p>The <a href="c3ref/aggregate_context.html">sqlite3_aggregate_context()</a> routine is used only in the
+implementations of aggregate and window functions. Scalar functions
+may not use <a href="c3ref/aggregate_context.html">sqlite3_aggregate_context()</a>. The <a href="c3ref/aggregate_context.html">sqlite3_aggregate_context()</a>
+function is included in the interface list only for completeness.
+
+</p><p>
+The 2nd and 3rd arguments to the scalar SQL function implemenetation,
+<b>argc</b> and <b>argv</b>, are
+the number of arguments to the SQL function itself and the values for
+each argument of the SQL function.
+Argument values can be of any datatype and are thus stored in
+instances of the <a href="c3ref/value.html">sqlite3_value</a> object.
+Specific C-language values can be extracted from this object using
+the <a href="c3ref/value_blob.html">sqlite3_value() family of interfaces</a>.
+
+</p><h3 id="the_aggregate_function_callbacks"><span>2.3.2. </span>The Aggregate Function Callbacks</h3>
+
+<p>Aggregate SQL functions are implemented by using two callback
+functions, <b>xStep</b> and <b>xFinal</b>. The xStep() function
+is called for each row of the aggregate and the xFinal() function
+is invoked to compute the final answer at the end.
+The following (slightly simplified) version of the built-in
+count() function illustrates:
+
+</p><div class="codeblock"><pre>typedef struct CountCtx CountCtx;
+struct CountCtx {
+ i64 n;
+};
+static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
+ CountCtx *p;
+ p = sqlite3_aggregate_context(context, sizeof(*p));
+ if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv&#91;0&#93;)) && p ){
+ p->n++;
+ }
+}
+static void countFinalize(sqlite3_context *context){
+ CountCtx *p;
+ p = sqlite3_aggregate_context(context, 0);
+ sqlite3_result_int64(context, p ? p->n : 0);
+}
+</pre></div>
+
+<p>Recall that there are two versions of the count() aggregate.
+With zero arguments, count() returns a count of the number of rows.
+With one argument, count() returns the number of times that the
+argument was non-NULL.
+
+</p><p>The countStep() callback is invoked once for each row in the aggregate.
+As you can see, the count is incremented if either there are no arguments,
+or if the one argument is not NULL.
+
+</p><p>The step function for an aggregate should always begin with a call
+to the <a href="c3ref/aggregate_context.html">sqlite3_aggregate_context()</a> routine to fetch the persistent
+state of the aggregate function. On the first invocation of the step()
+function, the aggregate context is initialized to a block of memory
+that is N bytes in size, where N is the second parameter to
+sqlite3_aggregate_context() and that memory is zeroed. On all subsequent
+calls to the step() function, the same block of memory is returned.
+Except, sqlite3_aggregate_context() might return NULL in the case of
+an out-of-memory error, so aggregate functions should be prepared to
+deal with that case.
+
+</p><p>After all rows are processed the countFinalize() routine is called
+exactly once. This routine computes the final result and invokes
+one of the <a href="c3ref/result_blob.html">sqlite3_result()</a> family of functions
+to set the final result. The aggregate context will be freed automatically
+by SQLite, though the xFinalize() routine must clean up any substructure
+associated with the aggregate context before it returns. If the xStep()
+method is called one or more times, then SQLite guarantees thta the
+xFinal() method will be called at once, even if the query aborts.
+
+</p><h3 id="the_window_function_callbacks"><span>2.3.3. </span>The Window Function Callbacks</h3>
+
+<p><a href="windowfunctions.html">Window functions</a> use the same xStep() and xFinal() callbacks that
+aggregate functions use, plus two others: <b>xValue</b> and <b>xInverse</b>.
+See the documentation on
+<a href="windowfunctions.html#udfwinfunc">application-defined window functions</a> for further details.
+
+</p><h3 id="examples"><span>2.3.4. </span>Examples</h3>
+
+<p>There are dozens and dozens of SQL function implementations scattered
+throughout the SQLite source code that can be used as example applications.
+The built-in SQL functions use the same interface as application-defined
+SQL functions, so built-in functions can be used as examples too.
+Search for "sqlite3_context" in the SQLite source code to find examples.
+
+<a name="sec"></a>
+
+</p><h1 id="security_implications"><span>3. </span>Security Implications</h1>
+
+<p>
+Application-defined SQL functions can become security vulnerabilities if
+not carefully managed. Suppose, for example, an application defines
+a new "system(X)" SQL function that runs its argument X as a command and
+returns the integer result code. Perhaps the implementation is like this:
+
+</p><div class="codeblock"><pre>static void systemFunc(
+ sqlite3_context *context,
+ int argc,
+ sqlite3_value **argv
+){
+ const char *zCmd = (const char*)sqlite3_value_text(argv&#91;0&#93;);
+ if( zCmd!=0 ){
+ int rc = system(zCmd);
+ sqlite3_result_int(context, rc);
+ }
+}
+</pre></div>
+
+<p>
+This is a function with powerful side-effects. Most programmers would
+be naturally cautious about using it, but probably would not see the
+harm in merely having it available. But there is great risk in merely
+defining such a function, even if the application itself never invokes
+it!
+
+</p><p>
+Suppose the application normally does a query against table TAB1
+when it starts up. If an attacker can gain access to the database
+file and modify the schema like this:
+
+</p><div class="codeblock"><pre>ALTER TABLE tab1 RENAME TO tab1_real;
+CREATE VIEW tab1 AS SELECT * FROM tab1 WHERE system('rm -rf *') IS NOT NULL;
+</pre></div>
+
+<p>
+Then, when the application attempts to open the database, register the
+system() function, then run an innocent query against the "tab1" table,
+it instead deletes all the files in its working directory. Yikes!
+
+</p><p>
+To prevent this kind of mischief, applications that create their own
+custom SQL functions should take one or more of the following safety
+precautions. The more precautions taken the better:
+
+</p><ol>
+<li><p>
+Invoke <a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a>,0,0)
+on each <a href="c3ref/sqlite3.html">database connection</a> as soon as it is opened.
+This prevents application-defined functions from being used in places
+where an attacker might be able to surreptiously invoke them by modifying
+a database schema:
+</p><ul>
+<li> In in VIEWs.
+</li><li> In in TRIGGERSs.
+</li><li> In CHECK constraints of a table definition.
+</li><li> In DEFAULT constraints of a table definition.
+</li><li> In the definitions of generated columns.
+</li><li> In the expression part of an index on an expression.
+</li><li> In the WHERE clause of a partial index.
+</li></ul>
+<p>
+To put it another way, this setting requires that application-defined
+functions only be run directly by top-level SQL invoked from the application
+itself, not as a consequence of doing some other innocent-looking query.
+
+</p></li><li><p>
+Use the <a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema=OFF</a> SQL statement to disable trusted
+schema. This has the same effect as the previous bullet, but does not
+require the use of C-code and hence can be performed in programs written
+in another programming language and that do not have access SQLite
+C-language APIs.
+
+</p></li><li><p>
+Compile SQLite using the <a href="compile.html#trusted_schema">-DSQLITE_TRUSTED_SCHEMA=0</a> compile-time option.
+This make SQLite distrust application-defined functions inside of
+the schema by default.
+
+</p></li><li><p>
+If any application-defined SQL functions have potentially dangerous
+side-effects, or if they could potentially leak sensitive information
+to an attacker if misused, then tag those functions using the
+<a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a> option on the "enc" parameter. This means
+that the function can never be run from schema-code even if the
+trusted-schema option is on.
+
+</p></li><li><p>
+Never tag an application-defined SQL function with <a href="c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a>
+unless you really need to and you have checked the implementation closely
+and are certain that it can do no harm even if it falls under the
+control of an attacker.
+</p></li></ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/appfunc.in?m=10c9a7ddcd203576e">2020-09-20 12:35:50</a> UTC </small></i></p>
+
diff --git a/www/arch.html b/www/arch.html
new file mode 100644
index 0000000..5763492
--- /dev/null
+++ b/www/arch.html
@@ -0,0 +1,409 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Architecture of SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Architecture of SQLite
+</div>
+</div>
+
+
+
+
+<h1>Introduction</h1>
+
+
+<p>This document describes the architecture of the SQLite library.
+The information here is useful to those who want to understand or
+modify the inner workings of SQLite.
+</p>
+
+<div class="rightsidebar imgcontainer">
+<div style="max-width:367px;"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" width="367" height="453" viewBox="0 0 490.32 605.52">
+<path d="M2,293L236,293L236,2L2,2Z" style="fill:rgb(216,236,208);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M2,603L236,603L236,311L2,311Z" style="fill:rgb(208,236,232);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,347L488,347L488,2L254,2Z" style="fill:rgb(232,216,208);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,603L488,603L488,394L254,394Z" style="fill:rgb(224,236,200);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M38,92L200,92L200,38L38,38Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="65" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">Interface</text>
+<polygon points="119,120 114,109 123,109" style="fill:rgb(0,0,0)"/>
+<path d="M119,92L119,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M38,174L200,174L200,120L38,120Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="135" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">SQL Command</text>
+<text x="119" y="160" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">Processor</text>
+<polygon points="119,203 114,192 123,192" style="fill:rgb(0,0,0)"/>
+<path d="M119,174L119,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M38,257L200,257L200,203L38,203Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="230" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">Virtual Machine</text>
+<polygon points="119,347 114,336 123,336" style="fill:rgb(0,0,0)"/>
+<path d="M119,257L119,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M38,401L200,401L200,347L38,347Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="374" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">B-Tree</text>
+<polygon points="119,430 114,419 123,419" style="fill:rgb(0,0,0)"/>
+<path d="M119,401L119,424" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M38,484L200,484L200,430L38,430Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="457" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">Pager</text>
+<polygon points="119,513 114,501 123,501" style="fill:rgb(0,0,0)"/>
+<path d="M119,484L119,507" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M38,567L200,567L200,513L38,513Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="540" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">OS Interface</text>
+<path d="M290,92L452,92L452,38L290,38Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="65" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">Tokenizer</text>
+<polygon points="371,120 366,109 375,109" style="fill:rgb(0,0,0)"/>
+<path d="M371,92L371,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,174L452,174L452,120L290,120Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="147" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">Parser</text>
+<polygon points="371,203 366,192 375,192" style="fill:rgb(0,0,0)"/>
+<path d="M371,174L371,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,311L452,311L452,203L290,203Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="245" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">Code</text>
+<text x="371" y="270" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">Generator</text>
+<path d="M290,484L452,484L452,430L290,430Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="457" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">Utilities</text>
+<path d="M290,567L452,567L452,513L290,513Z" style="fill:rgb(255,255,255);stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="540" text-anchor="middle" fill="rgb(0,0,0)" font-size="110%" dominant-baseline="central">Test Code</text>
+<polygon points="290,78 281,87 277,79" style="fill:rgb(0,0,0)"/>
+<path d="M200,120L284,81" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="200,174 212,178 206,185" style="fill:rgb(0,0,0)"/>
+<path d="M290,239L204,178" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="20" y="147" text-anchor="middle" font-style="italic" fill="rgb(0,0,0)" font-size="110%" transform="rotate(-90 20,147)" dominant-baseline="central">Core</text>
+<text x="20" y="457" text-anchor="middle" font-style="italic" fill="rgb(0,0,0)" font-size="110%" transform="rotate(-90 20,457)" dominant-baseline="central">Backend</text>
+<text x="470" y="174" text-anchor="middle" font-style="italic" fill="rgb(0,0,0)" font-size="110%" transform="rotate(-90 470,174)" dominant-baseline="central">SQL Compiler</text>
+<text x="470" y="498" text-anchor="middle" font-style="italic" fill="rgb(0,0,0)" font-size="110%" transform="rotate(-90 470,498)" dominant-baseline="central">Accessories</text>
+</svg>
+</div>
+</div>
+
+<p>
+A nearby diagram shows the main components of SQLite
+and how they interoperate. The text below
+explains the roles of the various components.
+</p>
+
+<h1>Overview</h1>
+
+<p>SQLite works by compiling SQL text into <a href="opcode.html">bytecode</a>, then running
+that bytecode using a virtual machine.
+
+<p>The <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> and related interfaces act as a compiler
+for converting SQL text into bytecode. The <a href="c3ref/stmt.html">sqlite3_stmt</a> object is
+a container for a single bytecode program that implements a single
+SQL statement. The <a href="c3ref/step.html">sqlite3_step()</a> interface passes a bytecode program
+into the virtual machine, and runs the program until it either completes,
+or forms a row of result to be returned, or hits a fatal error, or is
+<a href="c3ref/interrupt.html">interrupted</a>.
+
+<h1>Interface</h1>
+
+<p>Much of the <a href="c3ref/intro.html">C-language Interface</a> is found in source
+files <a href='https://sqlite.org/src/file/src/main.c'>main.c</a>, <a href='https://sqlite.org/src/file/src/legacy.c'>legacy.c</a>, and
+<a href='https://sqlite.org/src/file/src/vdbeapi.c'>vdbeapi.c</a>
+though some routines are
+scattered about in other files where they can have access to data
+structures with file scope.
+The <a href="c3ref/free_table.html">sqlite3_get_table()</a> routine is implemented in <a href='https://sqlite.org/src/file/src/table.c'>table.c</a>.
+The <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> routine is found in <a href='https://sqlite.org/src/file/src/printf.c'>printf.c</a>.
+The <a href="c3ref/complete.html">sqlite3_complete()</a> interface is in <a href='https://sqlite.org/src/file/src/complete.c'>complete.c</a>.
+The <a href="tclsqlite.html">TCL Interface</a> is implemented by <a href='https://sqlite.org/src/file/src/tclsqlite.c'>tclsqlite.c</a>.
+
+<p>To avoid name collisions, all external
+symbols in the SQLite library begin with the prefix <b>sqlite3</b>.
+Those symbols that are intended for external use (in other words,
+those symbols which form the API for SQLite) add an underscore, and
+thus begin with <b>sqlite3_</b>. Extension APIs sometimes add the
+extension name prior to the underscore; for example:
+<b>sqlite3rbu_</b> or <b>sqlite3session_</b>.</p>
+
+<h1>Tokenizer</h1>
+
+<p>When a string containing SQL statements is to be evaluated it is
+first sent to the tokenizer.
+The tokenizer breaks
+the SQL text into tokens and hands those tokens
+one by one to the parser. The tokenizer is hand-coded in
+the file <file>tokenize.c</b>.
+
+<p>Note that in this design, the tokenizer calls the parser. People
+who are familiar with YACC and BISON may be accustomed to doing things the
+other way around &mdash; having the parser call the tokenizer. Having
+the tokenizer call the parser is better, though, because it can be made
+threadsafe and it runs faster.</p>
+
+<h1>Parser</h1>
+
+<p>The parser assigns meaning to tokens based on
+their context. The parser for SQLite is generated using the
+<a href="lemon.html">Lemon parser generator</a>.
+Lemon does the same job as YACC/BISON, but it uses
+a different input syntax which is less error-prone.
+Lemon also generates a parser which is reentrant and thread-safe.
+And Lemon defines the concept of a non-terminal destructor so
+that it does not leak memory when syntax errors are encountered.
+The grammar file that drives Lemon and that defines the SQL language
+that SQLite understands is found in <a href='https://sqlite.org/src/file/src/parse.y'>parse.y</a>.
+
+<p>Because
+Lemon is a program not normally found on development machines, the
+complete source code to Lemon (just one C file) is included in the
+SQLite distribution in the "tool" subdirectory.
+</p>
+
+<h1>Code Generator</h1>
+
+<p>After the parser assembles tokens into a parse tree,
+the code generator runs to analyze the parse tree and generate
+<a href="opcode.html">bytecode</a> that performs the work of the SQL statement.
+The <a href="c3ref/stmt.html">prepared statement</a> object is a container for this bytecode.
+There are many files in the code generator, including:
+<a href='https://sqlite.org/src/file/src/attach.c'>attach.c</a>,
+<a href='https://sqlite.org/src/file/src/auth.c'>auth.c</a>,
+<a href='https://sqlite.org/src/file/src/build.c'>build.c</a>,
+<a href='https://sqlite.org/src/file/src/delete.c'>delete.c</a>,
+<a href='https://sqlite.org/src/file/src/expr.c'>expr.c</a>,
+<a href='https://sqlite.org/src/file/src/insert.c'>insert.c</a>,
+<a href='https://sqlite.org/src/file/src/pragma.c'>pragma.c</a>,
+<a href='https://sqlite.org/src/file/src/select.c'>select.c</a>,
+<a href='https://sqlite.org/src/file/src/trigger.c'>trigger.c</a>,
+<a href='https://sqlite.org/src/file/src/update.c'>update.c</a>,
+<a href='https://sqlite.org/src/file/src/vacuum.c'>vacuum.c</a>,
+<a href='https://sqlite.org/src/file/src/where.c'>where.c</a>,
+<a href='https://sqlite.org/src/file/src/wherecode.c'>wherecode.c</a>, and
+<a href='https://sqlite.org/src/file/src/whereexpr.c'>whereexpr.c</a>.
+In these files is where most of the serious magic happens.
+<a href='https://sqlite.org/src/file/src/expr.c'>expr.c</a> handles code generation for expressions.
+<b>where*.c</b> handles code generation for WHERE clauses on
+SELECT, UPDATE and DELETE statements. The files <a href='https://sqlite.org/src/file/src/attach.c'>attach.c</a>,
+<a href='https://sqlite.org/src/file/src/delete.c'>delete.c</a>, <a href='https://sqlite.org/src/file/src/insert.c'>insert.c</a>, <a href='https://sqlite.org/src/file/src/select.c'>select.c</a>,
+<a href='https://sqlite.org/src/file/src/trigger.c'>trigger.c</a>
+<a href='https://sqlite.org/src/file/src/update.c'>update.c</a>, and <a href='https://sqlite.org/src/file/src/vacuum.c'>vacuum.c</a> handle the code generation
+for SQL statements with the same names. (Each of these files calls routines
+in <a href='https://sqlite.org/src/file/src/expr.c'>expr.c</a> and <a href='https://sqlite.org/src/file/src/where.c'>where.c</a> as necessary.) All other
+SQL statements are coded out of <a href='https://sqlite.org/src/file/src/build.c'>build.c</a>.
+The <a href='https://sqlite.org/src/file/src/auth.c'>auth.c</a> file implements the functionality of
+<a href="c3ref/set_authorizer.html">sqlite3_set_authorizer()</a>.</p>
+
+<p>The code generator, and especially the logic in <b>where*.c</b>
+and in <a href='https://sqlite.org/src/file/src/select.c'>select.c</a>, is sometimes called the
+<a href="optoverview.html">query planner</a>. For any particular SQL statement, there might be
+hundreds, thousands, or millions of different algorithms to compute
+the answer. The query planner is an AI that strives to select the
+best algorithm from these millions of choices.
+
+<h1>Bytecode Engine</h1>
+
+<p>The <a href="opcode.html">bytecode</a> program created by the code generator is run by
+a virtual machine.
+
+<p>The virtual machine itself is entirely contained in a single
+source file <a href='https://sqlite.org/src/file/src/vdbe.c'>vdbe.c</a>. The
+<a href='https://sqlite.org/src/file/src/vdbe.h'>vdbe.h</a> header file defines an interface
+between the virtual machine and the rest of the SQLite library and
+<a href='https://sqlite.org/src/file/src/vdbeInt.h'>vdbeInt.h</a> which defines structures and interfaces that
+are private to the virtual machine itself.
+Various other <b>vdbe*.c</b> files are helpers to the virtual machine.
+The <a href='https://sqlite.org/src/file/src/vdbeaux.c'>vdbeaux.c</a> file contains utilities used by the virtual
+machine and interface modules used by the rest of the library to
+construct VM programs. The <a href='https://sqlite.org/src/file/src/vdbeapi.c'>vdbeapi.c</a> file contains external
+interfaces to the virtual machine such as the
+<a href="c3ref/bind_blob.html">sqlite3_bind_int()</a> and <a href="c3ref/step.html">sqlite3_step()</a>. Individual values
+(strings, integer, floating point numbers, and BLOBs) are stored
+in an internal object named "Mem" which is implemented by
+<a href='https://sqlite.org/src/file/src/vdbemem.c'>vdbemem.c</a>.</p>
+
+<p>
+SQLite implements SQL functions using callbacks to C-language routines.
+Even the built-in SQL functions are implemented this way. Most of
+the built-in SQL functions (ex: <a href="lang_corefunc.html#abs">abs()</a>, <a href="lang_aggfunc.html#count">count()</a>,
+<a href="lang_corefunc.html#substr">substr()</a>, and so forth) can be found in <a href='https://sqlite.org/src/file/src/func.c'>func.c</a> source
+file.
+Date and time conversion functions are found in <a href='https://sqlite.org/src/file/src/date.c'>date.c</a>.
+Some functions such as <a href="lang_corefunc.html#coalesce">coalesce()</a> and <a href="lang_corefunc.html#typeof">typeof()</a> are implemented
+as bytecode directly by the code generator.
+</p>
+
+<h1>B-Tree</h1>
+
+<p>An SQLite database is maintained on disk using a B-tree implementation
+found in the <a href='https://sqlite.org/src/file/src/btree.c'>btree.c</a> source file. Separate B-trees are used for
+each table and each index in the database. All B-trees are stored in the
+same disk file. The <a href="fileformat2.html">file format</a> details are stable and well-defined and
+are guaranteed to be compatible moving forward.</p>
+
+<p>The interface to the B-tree subsystem and the rest of the SQLite library
+is defined by the header file <a href='https://sqlite.org/src/file/src/btree.h'>btree.h</a>.
+</p>
+
+<h1>Page Cache</h1>
+
+<p>The B-tree module requests information from the disk in fixed-size
+pages. The default <a href="pragma.html#pragma_page_size">page_size</a> is 4096 bytes but can be any power of
+two between 512 and 65536 bytes.
+The page cache is responsible for reading, writing, and
+caching these pages.
+The page cache also provides the rollback and atomic commit abstraction
+and takes care of locking of the database file. The
+B-tree driver requests particular pages from the page cache and notifies
+the page cache when it wants to modify pages or commit or rollback
+changes. The page cache handles all the messy details of making sure
+the requests are handled quickly, safely, and efficiently.</p>
+
+<p>The primary page cache implementation is in the
+<a href='https://sqlite.org/src/file/src/pager.c'>pager.c</a> file. <a href="wal.html">WAL mode</a> logic is in the separate
+<a href='https://sqlite.org/src/file/src/wal.c'>wal.c</a>. In-memory caching is implemented by the
+<a href='https://sqlite.org/src/file/src/pcache.c'>pcache.c</a> and <a href='https://sqlite.org/src/file/src/pcache1.c'>pcache1.c</a> files.
+The interface between page cache subsystem
+and the rest of SQLite is defined by the header file <a href='https://sqlite.org/src/file/src/pager.h'>pager.h</a>.
+</p>
+
+<h1>OS Interface</h1>
+
+<p>
+In order to provide portability across operating systems,
+SQLite uses an abstract object called the <a href="vfs.html">VFS</a>. Each VFS provides methods
+for opening, reading, writing, and closing files on disk, and for other
+OS-specific tasks such as finding the current time, or obtaining randomness
+to initialize the built-in pseudo-random number generator.
+SQLite currently provides VFSes for unix (in the <a href='https://sqlite.org/src/file/src/os_unix.c'>os_unix.c</a>
+file) and Windows (in the <a href='https://sqlite.org/src/file/src/os_win.c'>os_win.c</a> file).
+</p>
+
+<h1>Utilities</h1>
+
+<p>
+Memory allocation, caseless string comparison routines,
+portable text-to-number conversion routines, and other utilities
+are located in <a href='https://sqlite.org/src/file/src/util.c'>util.c</a>.
+Symbol tables used by the parser are maintained by hash tables found
+in <a href='https://sqlite.org/src/file/src/hash.c'>hash.c</a>. The <a href='https://sqlite.org/src/file/src/utf.c'>utf.c</a> source file contains Unicode
+conversion subroutines.
+SQLite has its own private implementation of
+<a href="printf.html">printf()</a> (with
+some extensions) in <a href='https://sqlite.org/src/file/src/printf.c'>printf.c</a> and its own
+pseudo-random number generator (PRNG) in <a href='https://sqlite.org/src/file/src/random.c'>random.c</a>.
+</p>
+
+<h1>Test Code</h1>
+
+<p>
+Files in the "src/" folder of the source tree whose names begin with
+<b>test</b> are for testing only and are not included in a standard
+build of the library.
+</p>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/arch.in?m=5dd25044878e88c39">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/assert.html b/www/assert.html
new file mode 100644
index 0000000..c0d8128
--- /dev/null
+++ b/www/assert.html
@@ -0,0 +1,370 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Use Of assert() In SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Use Of assert() In SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#assert_and_similar_macros_in_sqlite">1. Assert() And Similar Macros In SQLite</a></div>
+<div class="fancy-toc2"><a href="#philosophy_of_assert_">1.1. Philosophy of assert()</a></div>
+<div class="fancy-toc2"><a href="#different_behaviors_according_to_build_type">1.2. Different Behaviors According To Build Type</a></div>
+<div class="fancy-toc1"><a href="#examples">2. Examples</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="assert_and_similar_macros_in_sqlite"><span>1. </span>Assert() And Similar Macros In SQLite</h1>
+
+<p>
+The assert(X) macro is
+<a href="https://en.wikipedia.org/wiki/Assert.h">part of standard C</a>, in the
+&lt;assert.h&gt; header file.
+SQLite adds three other assert()-like macros named NEVER(X), ALWAYS(X),
+and testcase(X).
+
+</p><ul>
+<li><p><b>assert(X)</b> &rarr;
+The assert(X) statement indicates that the condition X is always true.
+In other words, X is an invariant. The assert(X) macro works like a
+procedure in that it has no return value.
+
+</p></li><li><p><b>ALWAYS(X)</b> &rarr;
+The ALWAYS(X) function indicates that condition X is always true as far
+as the developers know, but there is no proof the X is true, or the
+proof is complex and error-prone, or the proof depends on implementation
+details that are likely to change in the future. ALWAYS(X) behaves like
+a function that returns the boolean value X, and is intended to be used
+within the conditional of an "if" statement.
+
+</p></li><li><p><b>NEVER(X)</b> &rarr;
+The NEVER(X) function indicates that condition X is never true. This
+is the negative analog of the ALWAYS(X) function.
+
+</p></li><li><p><b>testcase(X)</b> &rarr;
+The testcase(X) statement indicates that X is sometimes true and sometimes
+false. In other words, testcase(X) indicates that X is definitely not an
+invariant. Since SQLite uses 100% <a href="testing.html#mcdc">MC/DC testing</a>, the presence of a
+testcase(X) macro indicates that not only is it possible for X to be either
+true or false, but there are test cases to demonstrate this.
+</p></li></ul>
+
+<p>
+SQLite version 3.22.0 (2018-01-22) contains 5290 assert() macros,
+839 testcase() macros, 88 ALWAYS() macros, and 63 NEVER() macros.
+
+</p><h2 id="philosophy_of_assert_"><span>1.1. </span>Philosophy of assert()</h2>
+
+<p>In SQLite, the presence of assert(X) means that the developers have
+a proof that X is always true. Readers can depend upon X being true to
+help them reason about the code. An assert(X) is a strong statement
+about the truth of X. There is no doubt.
+
+</p><p>The ALWAYS(X) and NEVER(X) macros are a weaker statement about the
+truth of X. The presence of ALWAYS(X) or NEVER(X) means that the developers
+believe X is always or never true, but there is no proof, or the proof
+is complex and error-prone, or the proof depends on other aspects
+of the system that seem likely to change.
+
+</p><p>Other systems sometimes use assert(X) in a way that is
+similar to the use of ALWAYS(X) or NEVER(X) in SQLite.
+Developers will add an assert(X) as a
+<a href="https://blog.regehr.org/archives/1576">tacit acknowledgement that they
+do not fully believe that X is always true</a>.
+We believe that this use of assert(X) is wrong and violates the intent
+and purpose of having assert(X) available in C in the first place.
+An assert(X) should not be seen as a safety-net or top-rope used to
+guard against mistakes. Nor is assert(X) appropriate for defense-in-depth.
+An ALWAYS(X) or NEVER(X) macro, or something similar, should be used in
+those cases because ALWAYS(X) or NEVER(X) will be followed by code to
+actually deal with the problem when the programmers reasoning
+turns out to be wrong. Since the code that follows ALWAYS(X) or NEVER(X)
+is untested, it should be something very simple, like a "return" statement,
+that is easily verified by inspection.
+
+</p><p>
+Because assert() can be and is commonly misused, some programming language
+theorists and designers look upon it with disfavor.
+For example, the designers of the <a href="https://golang.org">Go programming language</a>
+intentionally <a href="https://golang.org/doc/faq#assertions">omit a built-in assert()</a>.
+They feel that the harm caused by misuse of assert()
+outweighs the benefits of including it as a language built-in.
+The SQLite developers disagree. In fact, the original purpose of this
+article is to push back against the common notion that assert() is harmful.
+In our experience, SQLite would be much more difficult to develop, test,
+and maintain without assert().
+
+</p><h2 id="different_behaviors_according_to_build_type"><span>1.2. </span>Different Behaviors According To Build Type</h2>
+
+<p>Three separate builds are used to validate the SQLite software.
+</p><ol>
+<li> A functionality testing build is used to validate the source code.
+</li><li> A coverage testing build is used to validate the test suite, to confirm
+ that the test suite provides 100% MC/DC.
+</li><li> The release build is used to validate the generated machine code.
+</li></ol>
+<p>All tests must give the same answer in all three
+builds. See the <a href="testing.html">"How SQLite Is Tested"</a> document for more detail.
+
+</p><p>The various assert()-like
+macros behave differently according to how SQLite is built.
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+<tr style="text-align:left"><th></th><th>Functionality Testing</th><th>Coverage Testing</th><th>Release</th></tr>
+<tr style="text-align:left;background-color:#DDDDDD"><th valign="top">assert(X)
+</th><td>abort() if X is false
+</td><td>no-op
+</td><td>no-op
+</td></tr>
+<tr style="text-align:left"><th valign="top">ALWAYS(X)
+</th><td>abort() if X is false
+</td><td>always true
+</td><td>pass through the value X
+</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD"><th valign="top">NEVER(X)
+</th><td>abort() if X is true
+</td><td>always false
+</td><td>pass through the value X
+</td></tr>
+<tr style="text-align:left"><th valign="top">testcase(X)
+</th><td>no-op
+</td><td>do some harmless work if X is true
+</td><td>no-op
+</td></tr>
+</table>
+
+<p>The default behavior of assert(X) in standard C is that it is enabled
+for release builds. This is a reasonable default. However, the
+SQLite code base has many assert() statements in performance-sensitive
+areas of the code. Leaving assert(X) turned on causes SQLite to run about
+three times slower. Also, SQLite strives to provide 100% MC/DC in an
+as-delivered configuration, which is obviously impossible if assert(X)
+statements are enabled. For these reasons, assert(X) is a no-op for
+release builds in SQLite.
+
+</p><p>The ALWAYS(X) and NEVER(X) macros behave like assert(X) during
+functionality testing, because the developers want to be immediately
+alerted to the issue if the value of X is different from what is expected.
+But for delivery, ALWAYS(X) and NEVER(X) are simple pass-through macros,
+which provide defense-in-depth. For coverage testing ALWAYS(X) and NEVER(X)
+are hard-coded boolean values so that they do not cause unreachable
+machine code to be generated.
+
+</p><p>The testcase(X) macro is normally a no-op, but for a coverage test
+build it does generate a small amount of extra code that includes at least
+one branch, in order to verify that test cases exist for which X is both
+true and false.
+
+</p><h1 id="examples"><span>2. </span>Examples</h1>
+
+<p>An assert() statement is often used to validate pre-conditions on
+internal functions and methods.
+Example: <a href="https://sqlite.org/src/artifact/c1e97e4c6f?ln=1048">https://sqlite.org/src/artifact/c1e97e4c6f?ln=1048</a>.
+This is deemed better than simply stating the pre-condition in a header
+comment, since the assert() is actually executed. In a highly tested
+program like SQLite, the reader knows that the pre-condition is true
+for all of the hundreds of millions of test cases run against SQLite,
+since it has been verified by the assert().
+In contrast, a text pre-condition statement in a header comment
+is untested. It might have been true when the code was written,
+but who is to say that it is still true now?
+
+</p><p>
+Sometimes SQLite uses compile-time evaluatable assert() statements.
+Consider the code at
+<a href="https://sqlite.org/src/artifact/c1e97e4c6f?ln=2130-2138">https://sqlite.org/src/artifact/c1e97e4c6f?ln=2130-2138</a>.
+Four assert() statements verify the values for compile-time constants
+so that the reader can quickly check the validity of the if-statement
+that follows, without having to look up the constant values in a separate
+header file.
+
+</p><p>
+Sometimes compile-time assert() statements are used to verify that
+SQLite has been correctly compiled. For example, the code at
+<a href="https://sqlite.org/src/artifact/c1e97e4c6f?ln=157">https://sqlite.org/src/artifact/c1e97e4c6f?ln=157</a>
+verifies that the SQLITE_PTRSIZE preprocessor macro is set correctly
+for the target architecture.
+
+</p><p>
+The CORRUPT_DB macro is used in many assert() statements.
+In functional testing builds, CORRUPT_DB references a global variable
+that is true if the database file might contain corruption. This variable
+is true by default, since we do not normally know whether or not a database
+is corrupt, but during testing while working on databases that are known
+to be well-formed, that global variable can be set to false.
+Then the CORRUPT_DB macro
+can be used in assert() statements such as seen at
+<a href="https://sqlite.org/src/artifact/18a53540aa3?ln=1679-1680">https://sqlite.org/src/artifact/18a53540aa3?ln=1679-1680</a>.
+Those assert()s specify pre-conditions to the routine that are true for
+consistent database files, but which might be false if the database file
+is corrupt. Knowledge of these kinds of conditions is very helpful to
+readers who are trying to understand a block of code in isolation.
+
+</p><p>
+ALWAYS(X) and NEVER(X) functions are used in places where we always
+want the test to occur even though the developers believe the value of
+X is always true or false. For example, the sqlite3BtreeCloseCursor()
+routine shown must remove the closing cursor from a linked list of all
+cursors. We know that the cursor is on the list, so that the loop
+must terminate by the "break" statement, but it is convenient to
+use the ALWAYS(X) test at
+<a href="https://sqlite.org/src/artifact/18a53540aa3?ln=4371">https://sqlite.org/src/artifact/18a53540aa3?ln=4371</a> to prevent
+running off the end of the linked list in case there is an error in some
+other part of the code that has corrupted the linked list.
+
+</p><p>
+An ALWAYS(X) or NEVER(X) sometimes verifies pre-conditions that are
+subject to change if other parts of the code are modified in
+subtle ways. At <a href="https://sqlite.org/src/artifact/18a53540aa3?ln=5512-5516">https://sqlite.org/src/artifact/18a53540aa3?ln=5512-5516</a>
+we have a test for two pre-conditions that are true only because
+of the limited scope of use of the sqlite3BtreeRowCountEst() function.
+Future enhancements to SQLite might use sqlite3BtreeRowCountEst() in
+new ways where those preconditions no longer hold, and the NEVER()
+macros will quickly alert the developers to that fact when the
+situation arises. But if, for some reason, the pre-conditions are
+not satisfied in a release build, the program will still behave sanely
+and will not do an undefined memory access.
+
+</p><p>
+The testcase() macro is often used to verify that boundary
+cases of an inequality comparison are checked. For example, at
+<a href="https://sqlite.org/src/artifact/18a53540aa3?ln=5766">https://sqlite.org/src/artifact/18a53540aa3?ln=5766</a>. These
+kind of checks help to prevent off-by-one errors.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/assert.in?m=abade93b77c106b29">2019-04-29 19:27:41</a> UTC </small></i></p>
+
diff --git a/www/asyncvfs.html b/www/asyncvfs.html
new file mode 100644
index 0000000..8ce517c
--- /dev/null
+++ b/www/asyncvfs.html
@@ -0,0 +1,297 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>An Asynchronous I/O Module For SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1 align="center">An Asynchronous I/O Module For SQLite</h1>
+
+<hr>
+<p><font size=+1><b>NOTE:</b>
+<a href="wal.html">WAL mode</a> with <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to NORMAL avoids calls to
+fsync() during transaction commit and only invokes fsync() during
+a <a href="wal.html#ckpt">checkpoint</a> operation. The use of <a href="wal.html">WAL mode</a> largely obviates the
+need for this asynchronous I/O module. Hence, this module is no longer
+supported. The source code continues to exist in the SQLite source tree,
+but it is not a part of any standard build and is no longer maintained.
+This documentation is retained for historical reference.</font></p><hr>
+
+<p>Normally, when SQLite writes to a database file, it waits until the write
+operation is finished before returning control to the calling application.
+Since writing to the file-system is usually very slow compared with CPU
+bound operations, this can be a performance bottleneck. The asynchronous I/O
+backend is an extension that causes SQLite to perform all write requests
+using a separate thread running in the background. Although this does not
+reduce the overall system resources (CPU, disk bandwidth etc.), it does
+allow SQLite to return control to the caller quickly even when writing to
+the database.
+
+<h2>1.0 FUNCTIONALITY</h2>
+
+<p>With asynchronous I/O, write requests are handled by a separate thread
+running in the background. This means that the thread that initiates
+a database write does not have to wait for (sometimes slow) disk I/O
+to occur. The write seems to happen very quickly, though in reality
+it is happening at its usual slow pace in the background.
+
+<p>Asynchronous I/O appears to give better responsiveness, but at a price.
+You lose the Durable property. With the default I/O backend of SQLite,
+once a write completes, you know that the information you wrote is
+safely on disk. With the asynchronous I/O, this is not the case. If
+your program crashes or if a power loss occurs after the database
+write but before the asynchronous write thread has completed, then the
+database change might never make it to disk and the next user of the
+database might not see your change.
+
+<p>You lose Durability with asynchronous I/O, but you still retain the
+other parts of ACID: Atomic, Consistent, and Isolated. Many
+applications get along fine without the Durability.
+
+<h3>1.1 How it Works</h3>
+
+<p>Asynchronous I/O works by creating an SQLite <a href="c3ref/vfs.html">VFS object</a>
+and registering it with <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>.
+When files opened via
+this VFS are written to (using the vfs xWrite() method), the data is not
+written directly to disk, but is placed in the "write-queue" to be
+handled by the background thread.
+
+<p>When files opened with the asynchronous VFS are read from
+(using the vfs xRead() method), the data is read from the file on
+disk and the write-queue, so that from the point of view of
+the vfs reader the xWrite() appears to have already completed.
+
+<p>The asynchronous I/O VFS is registered (and unregistered) by calls to the
+API functions sqlite3async_initialize() and sqlite3async_shutdown().
+See section "Compilation and Usage" below for details.
+
+<h3>1.2 Limitations</h3>
+
+<p>In order to gain experience with the main ideas surrounding asynchronous
+IO, this implementation is deliberately kept simple. Additional
+capabilities may be added in the future.
+
+<p>For example, as currently implemented, if writes are happening at a
+steady stream that exceeds the I/O capability of the background writer
+thread, the queue of pending write operations will grow without bound.
+If this goes on for long enough, the host system could run out of memory.
+A more sophisticated module could to keep track of the quantity of
+pending writes and stop accepting new write requests when the queue of
+pending writes grows too large.
+
+<h3>1.3 Locking and Concurrency</h3>
+
+<p>Multiple connections from within a single process that use this
+implementation of asynchronous IO may access a single database
+file concurrently. From the point of view of the user, if all
+connections are from within a single process, there is no difference
+between the concurrency offered by "normal" SQLite and SQLite
+using the asynchronous backend.
+
+<p>If file-locking is enabled (it is enabled by default), then connections
+from multiple processes may also read and write the database file.
+However concurrency is reduced as follows:
+
+<ul>
+<li><p> When a connection using asynchronous IO begins a database
+ transaction, the database is locked immediately. However the
+ lock is not released until after all relevant operations
+ in the write-queue have been flushed to disk. This means
+ (for example) that the database may remain locked for some
+ time after a "<a href="lang_transaction.html">COMMIT</a>" or "<a href="lang_transaction.html">ROLLBACK</a>" is issued.
+
+<li><p> If an application using asynchronous IO executes transactions
+ in quick succession, other database users may be effectively
+ locked out of the database. This is because when a <a href="lang_transaction.html">BEGIN</a>
+ is executed, a database lock is established immediately. But
+ when the corresponding COMMIT or ROLLBACK occurs, the lock
+ is not released until the relevant part of the write-queue
+ has been flushed through. As a result, if a COMMIT is followed
+ by a BEGIN before the write-queue is flushed through, the database
+ is never unlocked,preventing other processes from accessing
+ the database.
+</ul>
+
+<p>File-locking may be disabled at runtime using the sqlite3async_control()
+API (see below). This may improve performance when an NFS or other
+network file-system, as the synchronous round-trips to the server be
+required to establish file locks are avoided. However, if multiple
+connections attempt to access the same database file when file-locking
+is disabled, application crashes and database corruption is a likely
+outcome.
+
+
+<h2>2.0 COMPILATION AND USAGE</h2>
+
+<p>
+The asynchronous IO extension consists of a single file of C code
+(sqlite3async.c), and a header file (sqlite3async.h), located in the
+<a href="http://www.sqlite.org/src/dir?name=ext/async">
+<tt>ext/async/</tt> subfolder</a> of the SQLite source tree, that defines the
+C API used by applications to activate and control the modules
+functionality.
+
+<p>
+To use the asynchronous IO extension, compile sqlite3async.c as
+part of the application that uses SQLite. Then use the APIs defined
+in sqlite3async.h to initialize and configure the module.
+
+<p>
+The asynchronous IO VFS API is described in detail in comments in
+sqlite3async.h. Using the API usually consists of the following steps:
+
+<ol>
+<li><p>Register the asynchronous IO VFS with SQLite by calling the
+ sqlite3async_initialize() function.
+
+<li><p>Create a background thread to perform write operations and call
+ sqlite3async_run().
+
+<li><p>Use the normal SQLite API to read and write to databases via
+ the asynchronous IO VFS.
+</ol>
+
+<p>Refer to comments in the
+<a href="http://www.sqlite.org/src/finfo?name=ext/async/sqlite3async.h">
+sqlite3async.h header file</a> for details.
+
+
+<h2>3.0 PORTING</h2>
+
+<p>Currently the asynchronous IO extension is compatible with win32 systems
+and systems that support the pthreads interface, including Mac OS X, Linux,
+and other varieties of Unix.
+
+<p>To port the asynchronous IO extension to another platform, the user must
+implement mutex and condition variable primitives for the new platform.
+Currently there is no externally available interface to allow this, but
+modifying the code within sqlite3async.c to include the new platforms
+concurrency primitives is relatively easy. Search within sqlite3async.c
+for the comment string "PORTING FUNCTIONS" for details. Then implement
+new versions of each of the following:
+
+<blockquote><pre>
+static void async_mutex_enter(int eMutex);
+static void async_mutex_leave(int eMutex);
+static void async_cond_wait(int eCond, int eMutex);
+static void async_cond_signal(int eCond);
+static void async_sched_yield(void);
+</pre></blockquote>
+
+<p>The functionality required of each of the above functions is described
+in comments in sqlite3async.c.
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/asyncvfs.in?m=a7aa8bb3c53dced01">2012-12-03 20:10:10</a> UTC </small></i></p>
+
diff --git a/www/atomiccommit.html b/www/atomiccommit.html
new file mode 100644
index 0000000..39ebd3a
--- /dev/null
+++ b/www/atomiccommit.html
@@ -0,0 +1,1577 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Atomic Commit In SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Atomic Commit In SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#_introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#_hardware_assumptions">2. Hardware Assumptions</a></div>
+<div class="fancy-toc1"><a href="#_single_file_commit">3. Single File Commit</a></div>
+<div class="fancy-toc2"><a href="#_initial_state">3.1. Initial State</a></div>
+<div class="fancy-toc2"><a href="#_acquiring_a_read_lock">3.2. Acquiring A Read Lock</a></div>
+<div class="fancy-toc2"><a href="#_reading_information_out_of_the_database">3.3. Reading Information Out Of The Database</a></div>
+<div class="fancy-toc2"><a href="#_obtaining_a_reserved_lock">3.4. Obtaining A Reserved Lock</a></div>
+<div class="fancy-toc2"><a href="#_creating_a_rollback_journal_file">3.5. Creating A Rollback Journal File</a></div>
+<div class="fancy-toc2"><a href="#_changing_database_pages_in_user_space">3.6. Changing Database Pages In User Space</a></div>
+<div class="fancy-toc2"><a href="#_flushing_the_rollback_journal_file_to_mass_storage">3.7. Flushing The Rollback Journal File To Mass Storage</a></div>
+<div class="fancy-toc2"><a href="#_obtaining_an_exclusive_lock">3.8. Obtaining An Exclusive Lock</a></div>
+<div class="fancy-toc2"><a href="#_writing_changes_to_the_database_file">3.9. Writing Changes To The Database File</a></div>
+<div class="fancy-toc2"><a href="#0_flushing_changes_to_mass_storage">3.10. 0 Flushing Changes To Mass Storage</a></div>
+<div class="fancy-toc2"><a href="#1_deleting_the_rollback_journal">3.11. 1 Deleting The Rollback Journal</a></div>
+<div class="fancy-toc2"><a href="#2_releasing_the_lock">3.12. 2 Releasing The Lock</a></div>
+<div class="fancy-toc1"><a href="#_rollback">4. Rollback</a></div>
+<div class="fancy-toc2"><a href="#_when_something_goes_wrong_">4.1. When Something Goes Wrong...</a></div>
+<div class="fancy-toc2"><a href="#_hot_rollback_journals">4.2. Hot Rollback Journals</a></div>
+<div class="fancy-toc2"><a href="#_obtaining_an_exclusive_lock_on_the_database">4.3. Obtaining An Exclusive Lock On The Database</a></div>
+<div class="fancy-toc2"><a href="#_rolling_back_incomplete_changes">4.4. Rolling Back Incomplete Changes</a></div>
+<div class="fancy-toc2"><a href="#_deleting_the_hot_journal">4.5. Deleting The Hot Journal</a></div>
+<div class="fancy-toc2"><a href="#_continue_as_if_the_uncompleted_writes_had_never_happened">4.6. Continue As If The Uncompleted Writes Had Never Happened</a></div>
+<div class="fancy-toc1"><a href="#_multi_file_commit">5. Multi-file Commit</a></div>
+<div class="fancy-toc2"><a href="#_separate_rollback_journals_for_each_database">5.1. Separate Rollback Journals For Each Database</a></div>
+<div class="fancy-toc2"><a href="#_the_super_journal_file">5.2. The Super-Journal File</a></div>
+<div class="fancy-toc2"><a href="#_updating_rollback_journal_headers">5.3. Updating Rollback Journal Headers</a></div>
+<div class="fancy-toc2"><a href="#_updating_the_database_files">5.4. Updating The Database Files</a></div>
+<div class="fancy-toc2"><a href="#_delete_the_super_journal_file">5.5. Delete The Super-Journal File</a></div>
+<div class="fancy-toc2"><a href="#_clean_up_the_rollback_journals">5.6. Clean Up The Rollback Journals</a></div>
+<div class="fancy-toc1"><a href="#_additional_details_of_the_commit_process">6. Additional Details Of The Commit Process</a></div>
+<div class="fancy-toc2"><a href="#_always_journal_complete_sectors">6.1. Always Journal Complete Sectors</a></div>
+<div class="fancy-toc2"><a href="#_dealing_with_garbage_written_into_journal_files">6.2. Dealing With Garbage Written Into Journal Files</a></div>
+<div class="fancy-toc2"><a href="#_cache_spill_prior_to_commit">6.3. Cache Spill Prior To Commit</a></div>
+<div class="fancy-toc1"><a href="#_optimizations">7. Optimizations</a></div>
+<div class="fancy-toc2"><a href="#_cache_retained_between_transactions">7.1. Cache Retained Between Transactions</a></div>
+<div class="fancy-toc2"><a href="#_exclusive_access_mode">7.2. Exclusive Access Mode</a></div>
+<div class="fancy-toc2"><a href="#_do_not_journal_freelist_pages">7.3. Do Not Journal Freelist Pages</a></div>
+<div class="fancy-toc2"><a href="#_single_page_updates_and_atomic_sector_writes">7.4. Single Page Updates And Atomic Sector Writes</a></div>
+<div class="fancy-toc2"><a href="#_filesystems_with_safe_append_semantics">7.5. Filesystems With Safe Append Semantics</a></div>
+<div class="fancy-toc2"><a href="#_persistent_rollback_journals">7.6. Persistent Rollback Journals</a></div>
+<div class="fancy-toc1"><a href="#_testing_atomic_commit_behavior">8. Testing Atomic Commit Behavior</a></div>
+<div class="fancy-toc1"><a href="#_things_that_can_go_wrong">9. Things That Can Go Wrong</a></div>
+<div class="fancy-toc2"><a href="#_broken_locking_implementations">9.1. Broken Locking Implementations</a></div>
+<div class="fancy-toc2"><a href="#_incomplete_disk_flushes">9.2. Incomplete Disk Flushes</a></div>
+<div class="fancy-toc2"><a href="#_partial_file_deletions">9.3. Partial File Deletions</a></div>
+<div class="fancy-toc2"><a href="#_garbage_written_into_files">9.4. Garbage Written Into Files</a></div>
+<div class="fancy-toc2"><a href="#_deleting_or_renaming_a_hot_journal">9.5. Deleting Or Renaming A Hot Journal</a></div>
+<div class="fancy-toc1"><a href="#_future_directions_and_conclusion">10. Future Directions And Conclusion</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="_introduction"><span>1. </span> Introduction</h1>
+
+<p>An important feature of transactional databases like SQLite
+is "atomic commit".
+Atomic commit means that either all database changes within a single
+transaction occur or none of them occur. With atomic commit, it
+is as if many different writes to different sections of the database
+file occur instantaneously and simultaneously.
+Real hardware serializes writes to mass storage, and writing
+a single sector takes a finite amount of time.
+So it is impossible to truly write many different sectors of a
+database file simultaneously and/or instantaneously.
+But the atomic commit logic within
+SQLite makes it appear as if the changes for a transaction
+are all written instantaneously and simultaneously.</p>
+
+<p>SQLite has the important property that transactions appear
+to be atomic even if the transaction is interrupted by an
+operating system crash or power failure.</p>
+
+<p>This article describes the techniques used by SQLite to create the
+illusion of atomic commit.</p>
+
+<p>The information in this article applies only when SQLite is operating
+in "rollback mode", or in other words when SQLite is not
+using a <a href="wal.html">write-ahead log</a>. SQLite still supports atomic commit when
+write-ahead logging is enabled, but it accomplishes atomic commit by
+a different mechanism from the one described in this article. See
+the <a href="wal.html">write-ahead log documentation</a> for additional information on how
+SQLite supports atomic commit in that context.</p>
+
+<a name="hardware"></a>
+
+<h1 id="_hardware_assumptions"><span>2. </span> Hardware Assumptions</h1>
+
+<p>Throughout this article, we will call the mass storage device "disk"
+even though the mass storage device might really be flash memory.</p>
+
+<p>We assume that disk is written in chunks which we call a "sector".
+It is not possible to modify any part of the disk smaller than a sector.
+To change a part of the disk smaller than a sector, you have to read in
+the full sector that contains the part you want to change, make the
+change, then write back out the complete sector.</p>
+
+<p>On a traditional spinning disk, a sector is the minimum unit of transfer
+in both directions, both reading and writing. On flash memory, however,
+the minimum size of a read is typically much smaller than a minimum write.
+SQLite is only concerned with the minimum write amount and so for the
+purposes of this article, when we say "sector" we mean the minimum amount
+of data that can be written to mass storage in a single go.</p>
+
+<p>
+ Prior to SQLite version 3.3.14, a sector size of 512 bytes was
+ assumed in all cases. There was a compile-time option to change
+ this but the code had never been tested with a larger value. The
+ 512 byte sector assumption seemed reasonable since until very recently
+ all disk drives used a 512 byte sector internally. However, there
+ has recently been a push to increase the sector size of disks to
+ 4096 bytes. Also the sector size
+ for flash memory is usually larger than 512 bytes. For these reasons,
+ versions of SQLite beginning with 3.3.14 have a method in the OS
+ interface layer that interrogates the underlying filesystem to find
+ the true sector size. As currently implemented (version 3.5.0) this
+ method still returns a hard-coded value of 512 bytes, since there
+ is no standard way of discovering the true sector size on either
+ Unix or Windows. But the method is available for embedded device
+ manufacturers to tweak according to their own needs. And we have
+ left open the possibility of filling in a more meaningful implementation
+ on Unix and Windows in the future.</p>
+
+<p>SQLite has traditionally assumed that a sector write is <u>not</u> atomic.
+However, SQLite does always assume that a sector write is linear. By "linear"
+we mean that SQLite assumes that when writing a sector, the hardware begins
+at one end of the data and writes byte by byte until it gets to
+the other end. The write might go from beginning to end or from
+end to beginning. If a power failure occurs in the middle of a
+sector write it might be that part of the sector was modified
+and another part was left unchanged. The key assumption by SQLite
+is that if any part of the sector gets changed, then either the
+first or the last bytes will be changed. So the hardware will
+never start writing a sector in the middle and work towards the
+ends. We do not know if this assumption is always true but it
+seems reasonable.</p>
+
+<p>The previous paragraph states that SQLite does not assume that
+sector writes are atomic. This is true by default. But as of
+SQLite version 3.5.0, there is a new interface called the
+Virtual File System (<a href="vfs.html">VFS</a>) interface. The <a href="vfs.html">VFS</a> is the only means
+by which SQLite communicates to the underlying filesystem. The
+code comes with default VFS implementations for Unix and Windows
+and there is a mechanism for creating new custom VFS implementations
+at runtime. In this new VFS interface there is a method called
+xDeviceCharacteristics. This method interrogates the underlying
+filesystem to discover various properties and behaviors that the
+filesystem may or may not exhibit. The xDeviceCharacteristics
+method might indicate that sector writes are atomic, and if it does
+so indicate, SQLite will try to take advantage of that fact. But
+the default xDeviceCharacteristics method for both Unix and Windows
+does not indicate atomic sector writes and so these optimizations
+are normally omitted.</p>
+
+<p>SQLite assumes that the operating system will buffer writes and
+that a write request will return before data has actually been stored
+in the mass storage device.
+SQLite further assumes that write operations will be reordered by
+the operating system.
+For this reason, SQLite does a "flush" or "fsync" operation at key
+points. SQLite assumes that the flush or fsync will not return until
+all pending write operations for the file that is being flushed have
+completed. We are told that the flush and fsync primitives
+are broken on some versions of Windows and Linux. This is unfortunate.
+It opens SQLite up to the possibility of database corruption following
+a power loss in the middle of a commit. However, there is nothing
+that SQLite can do to test for or remedy the situation. SQLite
+assumes that the operating system that it is running on works as
+advertised. If that is not quite the case, well then hopefully you
+will not lose power too often.</p>
+
+<p>SQLite assumes that when a file grows in length that the new
+file space originally contains garbage and then later is filled in
+with the data actually written. In other words, SQLite assumes that
+the file size is updated before the file content. This is a
+pessimistic assumption and SQLite has to do some extra work to make
+sure that it does not cause database corruption if power is lost
+between the time when the file size is increased and when the
+new content is written. The xDeviceCharacteristics method of
+the <a href="vfs.html">VFS</a> might indicate that the filesystem will always write the
+data before updating the file size. (This is the
+SQLITE_IOCAP_SAFE_APPEND property for those readers who are looking
+at the code.) When the xDeviceCharacteristics method indicates
+that files content is written before the file size is increased,
+SQLite can forego some of its pedantic database protection steps
+and thereby decrease the amount of disk I/O needed to perform a
+commit. The current implementation, however, makes no such assumptions
+for the default VFSes for Windows and Unix.</p>
+
+<p>SQLite assumes that a file deletion is atomic from the
+point of view of a user process. By this we mean that if SQLite
+requests that a file be deleted and the power is lost during the
+delete operation, once power is restored either the file will
+exist completely with all if its original content unaltered, or
+else the file will not be seen in the filesystem at all. If
+after power is restored the file is only partially deleted,
+if some of its data has been altered or erased,
+or the file has been truncated but not completely removed, then
+database corruption will likely result.</p>
+
+<p>SQLite assumes that the detection and/or correction of
+bit errors caused by cosmic rays, thermal noise, quantum
+fluctuations, device driver bugs, or other mechanisms, is the
+responsibility of the underlying hardware and operating system.
+SQLite does not add any redundancy to the database file for
+the purpose of detecting corruption or I/O errors.
+SQLite assumes that the data it reads is exactly the same data
+that it previously wrote.</p>
+
+<p>By default, SQLite assumes that an operating system call to write
+a range of bytes will not damage or alter any bytes outside of that range
+even if a power loss or OS crash occurs during that write. We
+call this the "<a href="psow.html">powersafe overwrite</a>" property.
+Prior to <a href="releaselog/3_7_9.html">version 3.7.9</a> (2011-11-01),
+SQLite did not assume powersafe overwrite. But with the standard
+sector size increasing from 512 to 4096 bytes on most disk drives, it
+has become necessary to assume powersafe overwrite in order to maintain
+historical performance levels and so powersafe overwrite is assumed by
+default in recent versions of SQLite. The assumption of powersafe
+overwrite property can be disabled at compile-time or a run-time if
+desired. See the <a href="psow.html">powersafe overwrite documentation</a> for further
+details.
+
+
+<a name="section_3_0"></a>
+</p><h1 id="_single_file_commit"><span>3. </span> Single File Commit</h1>
+
+<p>We begin with an overview of the steps SQLite takes in order to
+perform an atomic commit of a transaction against a single database
+file. The details of file formats used to guard against damage from
+power failures and techniques for performing an atomic commit across
+multiple databases are discussed in later sections.</p>
+
+<a name="initstate"></a>
+
+<h2 id="_initial_state"><span>3.1. </span> Initial State</h2>
+
+<img src="images/ac/commit-0.gif" align="right" hspace="15">
+
+<p>The state of the computer when a database connection is
+first opened is shown conceptually by the diagram at the
+right.
+The area of the diagram on the extreme right (labeled "Disk") represents
+information stored on the mass storage device. Each rectangle is
+a sector. The blue color represents that the sectors contain
+original data.
+The middle area is the operating systems disk cache. At the
+onset of our example, the cache is cold and this is represented
+by leaving the rectangles of the disk cache empty.
+The left area of the diagram shows the content of memory for
+the process that is using SQLite. The database connection has
+just been opened and no information has been read yet, so the
+user space is empty.
+</p>
+<br clear="both">
+
+<a name="rdlck"></a>
+
+<h2 id="_acquiring_a_read_lock"><span>3.2. </span> Acquiring A Read Lock</h2>
+
+<img src="images/ac/commit-1.gif" align="right" hspace="15">
+
+<p>Before SQLite can write to a database, it must first read
+the database to see what is there already. Even if it is just
+appending new data, SQLite still has to read in the database
+schema from the "<a href="schematab.html">sqlite_schema</a>" table so that it can know
+how to parse the INSERT statements and discover where in the
+database file the new information should be stored.</p>
+
+<p>The first step toward reading from the database file
+is obtaining a shared lock on the database file. A "shared"
+lock allows two or more database connections to read from the
+database file at the same time. But a shared lock prevents
+another database connection from writing to the database file
+while we are reading it. This is necessary because if another
+database connection were writing to the database file at the
+same time we are reading from the database file, we might read
+some data before the change and other data after the change.
+This would make it appear as if the change made by the other
+process is not atomic.</p>
+
+<p>Notice that the shared lock is on the operating system
+disk cache, not on the disk itself. File locks
+really are just flags within the operating system kernel,
+usually. (The details depend on the specific OS layer
+interface.) Hence, the lock will instantly vanish if the
+operating system crashes or if there is a power loss. It
+is usually also the case that the lock will vanish if the
+process that created the lock exits.</p>
+
+<br clear="both">
+
+<a name="section_3_3"></a>
+<h2 id="_reading_information_out_of_the_database"><span>3.3. </span> Reading Information Out Of The Database</h2>
+
+<img src="images/ac/commit-2.gif" align="right" hspace="15">
+
+<p>After the shared lock is acquired, we can begin reading
+information from the database file. In this scenario, we
+are assuming a cold cache, so information must first be
+read from mass storage into the operating system cache then
+transferred from operating system cache into user space.
+On subsequent reads, some or all of the information might
+already be found in the operating system cache and so only
+the transfer to user space would be required.</p>
+
+<p>Usually only a subset of the pages in the database file
+are read. In this example we are showing three
+pages out of eight being read. In a typical application, a
+database will have thousands of pages and a query will normally
+only touch a small percentage of those pages.</p>
+
+<br clear="both">
+
+<a name="rsvdlock"></a>
+
+<h2 id="_obtaining_a_reserved_lock"><span>3.4. </span> Obtaining A Reserved Lock</h2>
+
+<img src="images/ac/commit-3.gif" align="right" hspace="15">
+
+<p>Before making changes to the database, SQLite first
+obtains a "reserved" lock on the database file. A reserved
+lock is similar to a shared lock in that both a reserved lock
+and shared lock allow other processes to read from the database
+file. A single reserve lock can coexist with multiple shared
+locks from other processes. However, there can only be a
+single reserved lock on the database file. Hence only a
+single process can be attempting to write to the database
+at one time.</p>
+
+<p>The idea behind a reserved lock is that it signals that
+a process intends to modify the database file in the near
+future but has not yet started to make the modifications.
+And because the modifications have not yet started, other
+processes can continue to read from the database. However,
+no other process should also begin trying to write to the
+database.</p>
+
+<br clear="both">
+<a name="section_3_5"></a>
+<h2 id="_creating_a_rollback_journal_file"><span>3.5. </span> Creating A Rollback Journal File</h2>
+<img src="images/ac/commit-4.gif" align="right" hspace="15">
+
+<p>Prior to making any changes to the database file, SQLite first
+creates a separate rollback journal file and writes into the
+rollback journal the original
+content of the database pages that are to be altered.
+The idea behind the rollback journal is that it contains
+all information needed to restore the database back to
+its original state.</p>
+
+<p>The rollback journal contains a small header (shown in green
+in the diagram) that records the original size of the database
+file. So if a change causes the database file to grow, we
+will still know the original size of the database. The page
+number is stored together with each database page that is
+written into the rollback journal.</p>
+
+<p>
+ When a new file is created, most desktop operating systems
+ (Windows, Linux, Mac OS X) will not actually write anything to
+ disk. The new file is created in the operating systems disk
+ cache only. The file is not created on mass storage until sometime
+ later, when the operating system has a spare moment. This creates
+ the impression to users that I/O is happening much faster than
+ is possible when doing real disk I/O. We illustrate this idea in
+ the diagram to the right by showing that the new rollback journal
+ appears in the operating system disk cache only and not on the
+ disk itself.</p>
+
+<br clear="both">
+<a name="section_3_6"></a>
+<h2 id="_changing_database_pages_in_user_space"><span>3.6. </span> Changing Database Pages In User Space</h2>
+<img src="images/ac/commit-5.gif" align="right" hspace="15">
+
+<p>After the original page content has been saved in the rollback
+journal, the pages can be modified in user memory. Each database
+connection has its own private copy of user space, so the changes
+that are made in user space are only visible to the database connection
+that is making the changes. Other database connections still see
+the information in operating system disk cache buffers which have
+not yet been changed. And so even though one process is busy
+modifying the database, other processes can continue to read their
+own copies of the original database content.</p>
+
+<br clear="both">
+<a name="section_3_7"></a>
+<h2 id="_flushing_the_rollback_journal_file_to_mass_storage"><span>3.7. </span> Flushing The Rollback Journal File To Mass Storage</h2>
+<img src="images/ac/commit-6.gif" align="right" hspace="15">
+
+<p>The next step is to flush the content of the rollback journal
+file to nonvolatile storage.
+As we will see later,
+this is a critical step in insuring that the database can survive
+an unexpected power loss.
+This step also takes a lot of time, since writing to nonvolatile
+storage is normally a slow operation.</p>
+
+<p>This step is usually more complicated than simply flushing
+the rollback journal to the disk. On most platforms two separate
+flush (or fsync()) operations are required. The first flush writes
+out the base rollback journal content. Then the header of the
+rollback journal is modified to show the number of pages in the
+rollback journal. Then the header is flushed to disk. The details
+on why we do this header modification and extra flush are provided
+in a later section of this paper.</p>
+
+<br clear="both">
+<a name="section_3_8"></a>
+<h2 id="_obtaining_an_exclusive_lock"><span>3.8. </span> Obtaining An Exclusive Lock</h2>
+<img src="images/ac/commit-7.gif" align="right" hspace="15">
+
+<p>Prior to making changes to the database file itself, we must
+obtain an exclusive lock on the database file. Obtaining an
+exclusive lock is really a two-step process. First SQLite obtains
+a "pending" lock. Then it escalates the pending lock to an
+exclusive lock.</p>
+
+<p>A pending lock allows other processes that already have a
+shared lock to continue reading the database file. But it
+prevents new shared locks from being established. The idea
+behind a pending lock is to prevent writer starvation caused
+by a large pool of readers. There might be dozens, even hundreds,
+of other processes trying to read the database file. Each process
+acquires a shared lock before it starts reading, reads what it
+needs, then releases the shared lock. If, however, there are
+many different processes all reading from the same database, it
+might happen that a new process always acquires its shared lock before
+the previous process releases its shared lock. And so there is
+never an instant when there are no shared locks on the database
+file and hence there is never an opportunity for the writer to
+seize the exclusive lock. A pending lock is designed to prevent
+that cycle by allowing existing shared locks to proceed but
+blocking new shared locks from being established. Eventually
+all shared locks will clear and the pending lock will then be
+able to escalate into an exclusive lock.</p>
+
+<br clear="both">
+<a name="section_3_9"></a>
+<h2 id="_writing_changes_to_the_database_file"><span>3.9. </span> Writing Changes To The Database File</h2>
+<img src="images/ac/commit-8.gif" align="right" hspace="15">
+
+<p>Once an exclusive lock is held, we know that no other
+processes are reading from the database file and it is
+safe to write changes into the database file. Usually
+those changes only go as far as the operating systems disk
+cache and do not make it all the way to mass storage.</p>
+
+<br clear="both">
+<a name="section_3_10"></a>
+<h2 id="0_flushing_changes_to_mass_storage"><span>3.10. </span>0 Flushing Changes To Mass Storage</h2>
+<img src="images/ac/commit-9.gif" align="right" hspace="15">
+
+<p>Another flush must occur to make sure that all the
+database changes are written into nonvolatile storage.
+This is a critical step to ensure that the database will
+survive a power loss without damage. However, because
+of the inherent slowness of writing to disk or flash memory,
+this step together with the rollback journal file flush in section
+3.7 above takes up most of the time required to complete a
+transaction commit in SQLite.</p>
+
+<br clear="both">
+<a name="section_3_11"></a>
+<h2 id="1_deleting_the_rollback_journal"><span>3.11. </span>1 Deleting The Rollback Journal</h2>
+<img src="images/ac/commit-A.gif" align="right" hspace="15">
+
+<p>After the database changes are all safely on the mass
+storage device, the rollback journal file is deleted.
+This is the instant where the transaction commits.
+If a power failure or system crash occurs prior to this
+point, then recovery processes to be described later make
+it appear as if no changes were ever made to the database
+file. If a power failure or system crash occurs after
+the rollback journal is deleted, then it appears as if
+all changes have been written to disk. Thus, SQLite gives
+the appearance of having made no changes to the database
+file or having made the complete set of changes to the
+database file depending on whether or not the rollback
+journal file exists.</p>
+
+<p>Deleting a file is not really an atomic operation, but
+it appears to be from the point of view of a user process.
+A process is always able to ask the operating system "does
+this file exist?" and the process will get back a yes or no
+answer. After a power failure that occurs during a
+transaction commit, SQLite will ask the operating system
+whether or not the rollback journal file exists. If the
+answer is "yes" then the transaction is incomplete and is
+rolled back. If the answer is "no" then it means the transaction
+did commit.</p>
+
+<p>The existence of a transaction depends on whether or
+not the rollback journal file exists and the deletion
+of a file appears to be an atomic operation from the point of
+view of a user-space process. Therefore,
+a transaction appears to be an atomic operation.</p>
+
+<p>The act of deleting a file is expensive on many systems.
+As an optimization, SQLite can be configured to truncate
+the journal file to zero bytes in length
+or overwrite the journal file header with zeros. In either
+case, the resulting journal file is no longer capable of rolling
+back and so the transaction still commits. Truncating a file
+to zero length, like deleting a file, is assumed to be an atomic
+operation from the point of view of a user process. Overwriting
+the header of the journal with zeros is not atomic, but if any
+part of the header is malformed the journal will not roll back.
+Hence, one can say that the commit occurs as soon as the header
+is sufficiently changed to make it invalid. Typically this happens
+as soon as the first byte of the header is zeroed.</p>
+
+<br clear="both">
+<a name="section_3_12"></a>
+<h2 id="2_releasing_the_lock"><span>3.12. </span>2 Releasing The Lock</h2>
+<img src="images/ac/commit-B.gif" align="right" hspace="15">
+
+<p>The last step in the commit process is to release the
+exclusive lock so that other processes can once again
+start accessing the database file.</p>
+
+<p>In the diagram at the right, we show that the information
+that was held in user space is cleared when the lock is released.
+This used to be literally true for older versions of SQLite. But
+more recent versions of SQLite keep the user space information
+in memory in case it might be needed again at the start of the
+next transaction. It is cheaper to reuse information that is
+already in local memory than to transfer the information back
+from the operating system disk cache or to read it off of the
+disk drive again. Prior to reusing the information in user space,
+we must first reacquire the shared lock and then we have to check
+to make sure that no other process modified the database file while
+we were not holding a lock. There is a counter in the first page
+of the database that is incremented every time the database file
+is modified. We can find out if another process has modified the
+database by checking that counter. If the database was modified,
+then the user space cache must be cleared and reread. But it is
+commonly the case that no changes have been made and the user
+space cache can be reused for a significant performance savings.</p>
+
+<br clear="both">
+<a name="rollback"></a>
+
+<h1 id="_rollback"><span>4. </span> Rollback</h1>
+
+<p>An atomic commit is supposed to happen instantaneously. But the processing
+described above clearly takes a finite amount of time.
+Suppose the power to the computer were cut
+part way through the commit operation described above. In order
+to maintain the illusion that the changes were instantaneous, we
+have to "rollback" any partial changes and restore the database to
+the state it was in prior to the beginning of the transaction.</p>
+
+<a name="crisis"></a>
+
+<h2 id="_when_something_goes_wrong_"><span>4.1. </span> When Something Goes Wrong...</h2>
+<img src="images/ac/rollback-0.gif" align="right" hspace="15">
+
+<p>Suppose the power loss occurred
+during <a href="#section_3_10">step 3.10</a> above,
+while the database changes were being written to disk.
+After power is restored, the situation might be something
+like what is shown to the right. We were trying to change
+three pages of the database file but only one page was
+successfully written. Another page was partially written
+and a third page was not written at all.</p>
+
+<p>The rollback journal is complete and intact on disk when
+the power is restored. This is a key point. The reason for
+the flush operation in <a href="#section_3_7">step 3.7</a>
+is to make absolutely sure that
+all of the rollback journal is safely on nonvolatile storage
+prior to making any changes to the database file itself.</p>
+
+<br clear="both">
+<a name="section_4_2"></a>
+<h2 id="_hot_rollback_journals"><span>4.2. </span> Hot Rollback Journals</h2>
+<img src="images/ac/rollback-1.gif" align="right" hspace="15">
+
+<p>The first time that any SQLite process attempts to access
+the database file, it obtains a shared lock as described in
+<a href="section_3_2">section 3.2</a> above.
+But then it notices that there is a
+rollback journal file present. SQLite then checks to see if
+the rollback journal is a "hot journal". A hot journal is
+a rollback journal that needs to be played back in order to
+restore the database to a sane state. A hot journal only
+exists when an earlier process was in the middle of committing
+a transaction when it crashed or lost power.</p>
+
+<p>A rollback journal is a "hot" journal if all of the following
+are true:</p>
+
+<ul>
+<li>The rollback journal exists.
+</li><li>The rollback journal is not an empty file.
+</li><li>There is no reserved lock on the main database file.
+</li><li>The header of the rollback journal is well-formed and in particular
+ has not been zeroed out.
+</li><li>The rollback journal does not
+contain the name of a super-journal file (see
+<a href="#section_5_5">section 5.5</a> below) or if does
+contain the name of a super-journal, then that super-journal
+file exists.
+</li></ul>
+
+<p>The presence of a hot journal is our indication
+that a previous process was trying to commit a transaction but
+it aborted for some reason prior to the completion of the
+commit. A hot journal means that
+the database file is in an inconsistent state and needs to
+be repaired (by rollback) prior to being used.</p>
+
+<br clear="both">
+<a name="exlock"></a>
+
+<h2 id="_obtaining_an_exclusive_lock_on_the_database"><span>4.3. </span> Obtaining An Exclusive Lock On The Database</h2>
+<img src="images/ac/rollback-2.gif" align="right" hspace="15">
+
+<p>The first step toward dealing with a hot journal is to
+obtain an exclusive lock on the database file. This prevents two
+or more processes from trying to rollback the same hot journal
+at the same time.</p>
+
+<br clear="both">
+<a name="section_4_4"></a>
+<h2 id="_rolling_back_incomplete_changes"><span>4.4. </span> Rolling Back Incomplete Changes</h2>
+<img src="images/ac/rollback-3.gif" align="right" hspace="15">
+
+<p>Once a process obtains an exclusive lock, it is permitted
+to write to the database file. It then proceeds to read the
+original content of pages out of the rollback journal and write
+that content back to where it came from in the database file.
+Recall that the header of the rollback journal records the original
+size of the database file prior to the start of the aborted
+transaction. SQLite uses this information to truncate the
+database file back to its original size in cases where the
+incomplete transaction caused the database to grow. At the
+end of this step, the database should be the same size and
+contain the same information as it did before the start of
+the aborted transaction.</p>
+
+<br clear="both">
+<a name="delhotjrnl"></a>
+
+<h2 id="_deleting_the_hot_journal"><span>4.5. </span> Deleting The Hot Journal</h2>
+<img src="images/ac/rollback-4.gif" align="right" hspace="15">
+
+<p>After all information in the rollback journal has been
+played back into the database file (and flushed to disk in case
+we encounter yet another power failure), the hot rollback journal
+can be deleted.</p>
+
+<p>As in <a href="#section_3_11">section 3.11</a>, the journal
+file might be truncated to zero length or its header might
+be overwritten with zeros as an optimization on systems where
+deleting a file is expensive. Either way, the journal is no
+longer hot after this step.</p>
+
+<br clear="both">
+<a name="cont"></a>
+
+<h2 id="_continue_as_if_the_uncompleted_writes_had_never_happened"><span>4.6. </span> Continue As If The Uncompleted Writes Had Never Happened</h2>
+<img src="images/ac/rollback-5.gif" align="right" hspace="15">
+
+<p>The final recovery step is to reduce the exclusive lock back
+to a shared lock. Once this happens, the database is back in the
+state that it would have been if the aborted transaction had never
+started. Since all of this recovery activity happens completely
+automatically and transparently, it appears to the program using
+SQLite as if the aborted transaction had never begun.</p>
+
+<br clear="both">
+<a name="multicommit"></a>
+
+<h1 id="_multi_file_commit"><span>5. </span> Multi-file Commit</h1>
+
+<p>SQLite allows a single
+<a href="c3ref/sqlite3.html">database connection</a> to talk to
+two or more database files simultaneously through the use of
+the <a href="lang_attach.html">ATTACH DATABASE</a> command.
+When multiple database files are modified within a single
+transaction, all files are updated atomically.
+In other words, either all of the database files are updated or
+else none of them are.
+Achieving an atomic commit across multiple database files is
+more complex that doing so for a single file. This section
+describes how SQLite works that bit of magic.</p>
+
+<a name="multijrnl"></a>
+
+<h2 id="_separate_rollback_journals_for_each_database"><span>5.1. </span> Separate Rollback Journals For Each Database</h2>
+<img src="images/ac/multi-0.gif" align="right" hspace="15">
+
+<p>When multiple database files are involved in a transaction,
+each database has its own rollback journal and each database
+is locked separately. The diagram at the right shows a scenario
+where three different database files have been modified within
+one transaction. The situation at this step is analogous to
+the single-file transaction scenario at
+<a href="#section_3_6">step 3.6</a>. Each database file has
+a reserved lock. For each database, the original content of pages
+that are being changed have been written into the rollback journal
+for that database, but the content of the journals have not yet
+been flushed to disk. No changes have been made to the database
+file itself yet, though presumably there are changes being held
+in user memory.</p>
+
+<p>For brevity, the diagrams in this section are simplified from
+those that came before. Blue color still signifies original content
+and pink still signifies new content. But the individual pages
+in the rollback journal and the database file are not shown and
+we are not making the distinction between information in the
+operating system cache and information that is on disk. All of
+these factors still apply in a multi-file commit scenario. They
+just take up a lot of space in the diagrams and they do not add
+any new information, so they are omitted here.</p>
+
+<br clear="both">
+<a name="sprjrnl"></a>
+
+<h2 id="_the_super_journal_file"><span>5.2. </span> The Super-Journal File</h2>
+<img src="images/ac/multi-1.gif" align="right" hspace="15">
+
+<p>The next step in a multi-file commit is the creation of a
+"super-journal" file. The name of the super-journal file is
+the same name as the original database filename (the database
+that was opened using the
+<a href="c3ref/open.html">sqlite3_open()</a> interface,
+not one of the <a href="lang_attach.html">ATTACHed</a> auxiliary
+databases) with the text "<b>-mj</b><i>HHHHHHHH</i>" appended where
+<i>HHHHHHHH</i> is a random 32-bit hexadecimal number. The
+random <i>HHHHHHHH</i> suffix changes for every new super-journal.</p>
+
+<p><i>(Nota bene: The formula for computing the super-journal filename
+given in the previous paragraph corresponds to the implementation as
+of SQLite version 3.5.0. But this formula is not part of the SQLite
+specification and is subject to change in future releases.)</i></p>
+
+<p>Unlike the rollback journals, the super-journal does not contain
+any original database page content. Instead, the super-journal contains
+the full pathnames for rollback journals for every database that is
+participating in the transaction.</p>
+
+<p>After the super-journal is constructed, its content is flushed
+to disk before any further actions are taken. On Unix, the directory
+that contains the super-journal is also synced in order to make sure
+the super-journal file will appear in the directory following a
+power failure.</p>
+
+<p>The purpose of the super-journal is to ensure that multi-file
+transactions are atomic across a power-loss. But if the database files
+have other settings that compromise integrity across a power-loss event
+(such as <a href="pragma.html#pragma_synchronous">PRAGMA synchronous=OFF</a> or <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=MEMORY</a>) then
+the creation of the super-journal is omitted, as an optimization.
+
+<br clear="both">
+<a name="multijrnlupdate"></a>
+
+</p><h2 id="_updating_rollback_journal_headers"><span>5.3. </span> Updating Rollback Journal Headers</h2>
+<img src="images/ac/multi-2.gif" align="right" hspace="15">
+
+<p>The next step is to record the full pathname of the super-journal file
+in the header of every rollback journal. Space to hold the
+super-journal filename was reserved at the beginning of each rollback journal
+as the rollback journals were created.</p>
+
+<p>The content of each rollback journal is flushed to disk both before
+and after the super-journal filename is written into the rollback
+journal header. It is important to do both of these flushes. Fortunately,
+the second flush is usually inexpensive since typically only a single
+page of the journal file (the first page) has changed.</p>
+
+<p>This step is analogous to
+<a href="#section_3_7">step 3.7</a> in the single-file commit
+scenario described above.</p>
+
+<br clear="both">
+<a name="multidbupdate"></a>
+
+<h2 id="_updating_the_database_files"><span>5.4. </span> Updating The Database Files</h2>
+<img src="images/ac/multi-3.gif" align="right" hspace="15">
+
+<p>Once all rollback journal files have been flushed to disk, it
+is safe to begin updating database files. We have to obtain an
+exclusive lock on all database files before writing the changes.
+After all the changes are written, it is important to flush the
+changes to disk so that they will be preserved in the event of
+a power failure or operating system crash.</p>
+
+<p>This step corresponds to steps
+<a href="#section_3_8">3.8</a>,
+<a href="#section_3_9">3.9</a>, and
+<a href="#section_3_10">3.10</a> in the single-file commit
+scenario described previously.</p>
+
+
+<br clear="both">
+<a name="section_5_5"></a>
+<h2 id="_delete_the_super_journal_file"><span>5.5. </span> Delete The Super-Journal File</h2>
+<img src="images/ac/multi-4.gif" align="right" hspace="15">
+
+<p>The next step is to delete the super-journal file.
+This is the point where the multi-file transaction commits.
+This step corresponds to
+<a href="#section_3_11">step 3.11</a> in the single-file
+commit scenario where the rollback journal is deleted.</p>
+
+<p>If a power failure or operating system crash occurs at this
+point, the transaction will not rollback when the system reboots
+even though there are rollback journals present. The
+difference is the super-journal pathname in the header of the
+rollback journal. Upon restart, SQLite only considers a journal
+to be hot and will only playback the journal if there is no
+super-journal filename in the header (which is the case for
+a single-file commit) or if the super-journal file still
+exists on disk.</p>
+
+<br clear="both">
+<a name="cleanup"></a>
+
+<h2 id="_clean_up_the_rollback_journals"><span>5.6. </span> Clean Up The Rollback Journals</h2>
+<img src="images/ac/multi-5.gif" align="right" hspace="15">
+
+<p>The final step in a multi-file commit is to delete the
+individual rollback journals and drop the exclusive locks on
+the database files so that other processes can see the changes.
+This corresponds to
+<a href="#section_3_12">step 3.12</a> in the single-file
+commit sequence.</p>
+
+<p>The transaction has already committed at this point so timing
+is not critical in the deletion of the rollback journals.
+The current implementation deletes a single rollback journal
+then unlocks the corresponding database file before proceeding
+to the next rollback journal. But in the future we might change
+this so that all rollback journals are deleted before any database
+files are unlocked. As long as the rollback journal is deleted before
+its corresponding database file is unlocked it does not matter in what
+order the rollback journals are deleted or the database files are
+unlocked.</p>
+
+<a name="moredetail"></a>
+
+<h1 id="_additional_details_of_the_commit_process"><span>6. </span> Additional Details Of The Commit Process</h1>
+
+<p><a href="#section_3_0">Section 3.0</a> above provides an overview of
+how atomic commit works in SQLite. But it glosses over a number of
+important details. The following subsections will attempt to fill
+in the gaps.</p>
+
+<a name="completesectors"></a>
+
+<h2 id="_always_journal_complete_sectors"><span>6.1. </span> Always Journal Complete Sectors</h2>
+
+<p>When the original content of a database page is written into
+the rollback journal (as shown in <a href="#section_3_5">section 3.5</a>),
+SQLite always writes a complete sector of data, even if the
+page size of the database is smaller than the sector size.
+Historically, the sector size in SQLite has been hard coded to 512
+bytes and since the minimum page size is also 512 bytes, this has never
+been an issue. But beginning with SQLite version 3.3.14, it is possible
+for SQLite to use mass storage devices with a sector size larger than 512
+bytes. So, beginning with version 3.3.14, whenever any page within a
+sector is written into the journal file, all pages in that same sector
+are stored with it.</p>
+
+<p>It is important to store all pages of a sector in the rollback
+journal in order to prevent database corruption following a power
+loss while writing the sector. Suppose that pages 1, 2, 3, and 4 are
+all stored in sector 1 and that page 2 is modified. In order to write
+the changes to page 2, the underlying hardware must also rewrite the
+content of pages 1, 3, and 4 since the hardware must write the complete
+sector. If this write operation is interrupted by a power outage,
+one or more of the pages 1, 3, or 4 might be left with incorrect data.
+Hence, to avoid lasting corruption to the database, the original content
+of all of those pages must be contained in the rollback journal.</p>
+
+<a name="journalgarbage"></a>
+
+<h2 id="_dealing_with_garbage_written_into_journal_files"><span>6.2. </span> Dealing With Garbage Written Into Journal Files</h2>
+
+<p>When data is appended to the end of the rollback journal,
+SQLite normally makes the pessimistic assumption that the file
+is first extended with invalid "garbage" data and that afterwards
+the correct data replaces the garbage. In other words, SQLite assumes
+that the file size is increased first and then afterwards the content
+is written into the file. If a power failure occurs after the file
+size has been increased but before the file content has been written,
+the rollback journal can be left containing garbage data. If after
+power is restored, another SQLite process sees the rollback journal
+containing the garbage data and tries to roll it back into the original
+database file, it might copy some of the garbage into the database file
+and thus corrupt the database file.</p>
+
+<p>SQLite uses two defenses against this problem. In the first place,
+SQLite records the number of pages in the rollback journal in the header
+of the rollback journal. This number is initially zero. So during an
+attempt to rollback an incomplete (and possibly corrupt) rollback
+journal, the process doing the rollback will see that the journal
+contains zero pages and will thus make no changes to the database. Prior
+to a commit, the rollback journal is flushed to disk to ensure that
+all content has been synced to disk and there is no "garbage" left
+in the file, and only then is the page count in the header changed from
+zero to true number of pages in the rollback journal. The rollback journal
+header is always kept in a separate sector from any page data so that
+it can be overwritten and flushed without risking damage to a data
+page if a power outage occurs. Notice that the rollback journal
+is flushed to disk twice: once to write the page content and a second
+time to write the page count in the header.</p>
+
+<p>The previous paragraph describes what happens when the
+synchronous pragma setting is "full".</p>
+
+<blockquote>
+PRAGMA synchronous=FULL;
+</blockquote>
+
+<p>The default synchronous setting is full so the above is what usually
+happens. However, if the synchronous setting is lowered to "normal",
+SQLite only flushes the rollback journal once, after the page count has
+been written.
+This carries a risk of corruption because it might happen that the
+modified (non-zero) page count reaches the disk surface before all
+of the data does. The data will have been written first, but SQLite
+assumes that the underlying filesystem can reorder write requests and
+that the page count can be burned into oxide first even though its
+write request occurred last. So as a second line of defense, SQLite
+also uses a 32-bit checksum on every page of data in the rollback
+journal. This checksum is evaluated for each page during rollback
+while rolling back a journal as described in
+<a href="#section_4_4">section 4.4</a>. If an incorrect checksum
+is seen, the rollback is abandoned. Note that the checksum does
+not guarantee that the page data is correct since there is a small
+but finite probability that the checksum might be right even if the data is
+corrupt. But the checksum does at least make such an error unlikely.
+</p>
+
+<p>Note that the checksums in the rollback journal are not necessary
+if the synchronous setting is FULL. We only depend on the checksums
+when synchronous is lowered to NORMAL. Nevertheless, the checksums
+never hurt and so they are included in the rollback journal regardless
+of the synchronous setting.</p>
+
+<a name="cachespill"></a>
+
+<h2 id="_cache_spill_prior_to_commit"><span>6.3. </span> Cache Spill Prior To Commit</h2>
+
+<p>The commit process shown in <a href="#section_3_0">section 3.0</a>
+assumes that all database changes fit in memory until it is time to
+commit. This is the common case. But sometimes a larger change will
+overflow the user-space cache prior to transaction commit. In those
+cases, the cache must spill to the database before the transaction
+is complete.</p>
+
+<p>At the beginning of a cache spill, the status of the database
+connection is as shown in <a href="#section_3_6">step 3.6</a>.
+Original page content has been saved in the rollback journal and
+modifications of the pages exist in user memory. To spill the cache,
+SQLite executes steps <a href="#section_3_7">3.7</a> through
+<a href="#section_3_9">3.9</a>. In other words, the rollback journal
+is flushed to disk, an exclusive lock is acquired, and changes are
+written into the database. But the remaining steps are deferred
+until the transaction really commits. A new journal header is
+appended to the end of the rollback journal (in its own sector)
+and the exclusive database lock is retained, but otherwise processing
+returns to <a href="#section_3_6">step 3.6</a>. When the transaction
+commits, or if another cache spill occurs, steps
+<a href="#section_3_7">3.7</a> and <a href="#section_3_9">3.9</a> are
+repeated. (Step <a href="#section_3_8">3.8</a> is omitted on second
+and subsequent passes since an exclusive database lock is already held
+due to the first pass.)</p>
+
+<p>A cache spill causes the lock on the database file to
+escalate from reserved to exclusive. This reduces concurrency.
+A cache spill also causes extra disk flush or fsync operations to
+occur and these operations are slow, hence a cache spill can
+seriously reduce performance.
+For these reasons a cache spill is avoided whenever possible.</p>
+
+<a name="opts"></a>
+
+<h1 id="_optimizations"><span>7. </span> Optimizations</h1>
+
+<p>Profiling indicates that for most systems and in most circumstances
+SQLite spends most of its time doing disk I/O. It follows then that
+anything we can do to reduce the amount of disk I/O will likely have a
+large positive impact on the performance of SQLite. This section
+describes some of the techniques used by SQLite to try to reduce the
+amount of disk I/O to a minimum while still preserving atomic commit.</p>
+
+<a name="keepcache"></a>
+
+<h2 id="_cache_retained_between_transactions"><span>7.1. </span> Cache Retained Between Transactions</h2>
+
+<p><a href="#section_3_12">Step 3.12</a> of the commit process shows
+that once the shared lock has been released, all user-space cache
+images of database content must be discarded. This is done because
+without a shared lock, other processes are free to modify the database
+file content and so any user-space image of that content might become
+obsolete. Consequently, each new transaction would begin by rereading
+data which had previously been read. This is not as bad as it sounds
+at first since the data being read is still likely in the operating
+systems file cache. So the "read" is really just a copy of data
+from kernel space into user space. But even so, it still takes time.</p>
+
+<p>Beginning with SQLite version 3.3.14 a mechanism has been added
+to try to reduce the needless rereading of data. In newer versions
+of SQLite, the data in the user-space pager cache is retained when
+the lock on the database file is released. Later, after the
+shared lock is acquired at the beginning of the next transaction,
+SQLite checks to see if any other process has modified the database
+file. If the database has been changed in any way since the lock
+was last released, the user-space cache is erased at that point.
+But commonly the database file is unchanged and the user-space cache
+can be retained, and some unnecessary read operations can be avoided.</p>
+
+<p>In order to determine whether or not the database file has changed,
+SQLite uses a counter in the database header (in bytes 24 through 27)
+which is incremented during every change operation. SQLite saves a copy
+of this counter prior to releasing its database lock. Then after
+acquiring the next database lock it compares the saved counter value
+against the current counter value and erases the cache if the values
+are different, or reuses the cache if they are the same.</p>
+
+<a name="section_7_2"></a>
+<h2 id="_exclusive_access_mode"><span>7.2. </span> Exclusive Access Mode</h2>
+
+<p>SQLite version 3.3.14 adds the concept of "Exclusive Access Mode".
+In exclusive access mode, SQLite retains the exclusive
+database lock at the conclusion of each transaction. This prevents
+other processes from accessing the database, but in many deployments
+only a single process is using a database so this is not a
+serious problem. The advantage of exclusive access mode is that
+disk I/O can be reduced in three ways:</p>
+
+<ol>
+<li><p>It is not necessary to increment the change counter in the
+database header for transactions after the first transaction. This
+will often save a write of page one to both the rollback
+journal and the main database file.</p></li>
+
+<li><p>No other processes can change the database so there is never
+a need to check the change counter and clear the user-space cache
+at the beginning of a transaction.</p></li>
+
+<li><p>Each transaction can be committed by overwriting the rollback
+journal header with zeros rather than deleting the journal file.
+This avoids having to modify the directory entry for the journal file
+and it avoids having to deallocate disk sectors associated with the
+journal. Furthermore, the next transaction will overwrite existing
+journal file content rather than append new content and on most systems
+overwriting is much faster than appending.</p></li>
+</ol>
+
+<p>The third optimization, zeroing the journal file header rather than
+deleting the rollback journal file,
+does not depend on holding an exclusive lock at all times.
+This optimization can be set independently of exclusive lock mode
+using the <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>
+as described in <a href="#section_7_6">section 7.6</a> below.</p>
+
+<a name="freelistjrnl"></a>
+
+<h2 id="_do_not_journal_freelist_pages"><span>7.3. </span> Do Not Journal Freelist Pages</h2>
+
+<p>When information is deleted from an SQLite database, the pages used
+to hold the deleted information are added to a "<a href="fileformat2.html#freelist">freelist</a>". Subsequent
+inserts will draw pages off of this freelist rather than expanding the
+database file.</p>
+
+<p>Some freelist pages contain critical data; specifically the locations
+of other freelist pages. But most freelist pages contain nothing useful.
+These latter freelist pages are called "leaf" pages. We are free to
+modify the content of a leaf freelist page in the database without
+changing the meaning of the database in any way.</p>
+
+<p>Because the content of leaf freelist pages is unimportant, SQLite
+avoids storing leaf freelist page content in the rollback journal
+in <a href="#section_3_5">step 3.5</a> of the commit process.
+If a leaf freelist page is changed and that change does not get rolled back
+during a transaction recovery, the database is not harmed by the omission.
+Similarly, the content of a new freelist page is never written back
+into the database at <a href="#section_3_9">step 3.9</a> nor
+read from the database at <a href="#section_3_3">step 3.3</a>.
+These optimizations can greatly reduce the amount of I/O that occurs
+when making changes to a database file that contains free space.</p>
+
+<a name="atomicsector"></a>
+
+<h2 id="_single_page_updates_and_atomic_sector_writes"><span>7.4. </span> Single Page Updates And Atomic Sector Writes</h2>
+
+<p>Beginning in SQLite version 3.5.0, the new Virtual File System (VFS)
+interface contains a method named xDeviceCharacteristics which reports
+on special properties that the underlying mass storage device
+might have. Among the special properties that
+xDeviceCharacteristics might report is the ability of to do an
+atomic sector write.</p>
+
+<p>Recall that by default SQLite assumes that sector writes are
+linear but not atomic. A linear write starts at one end of the
+sector and changes information byte by byte until it gets to the
+other end of the sector. If a power loss occurs in the middle of
+a linear write then part of the sector might be modified while the
+other end is unchanged. In an atomic sector write, either the entire
+sector is overwritten or else nothing in the sector is changed.</p>
+
+<p>We believe that most modern disk drives implement atomic sector
+writes. When power is lost, the drive uses energy stored in capacitors
+and/or the angular momentum of the disk platter to provide power to
+complete any operation in progress. Nevertheless, there are so many
+layers in between the write system call and the on-board disk drive
+electronics that we take the safe approach in both Unix and w32 VFS
+implementations and assume that sector writes are not atomic. On the
+other hand, device
+manufacturers with more control over their filesystems might want
+to consider enabling the atomic write property of xDeviceCharacteristics
+if their hardware really does do atomic writes.</p>
+
+<p>When sector writes are atomic and the page size of a database is
+the same as a sector size, and when there is a database change that
+only touches a single database page, then SQLite skips the whole
+journaling and syncing process and simply writes the modified page
+directly into the database file. The change counter in the first
+page of the database file is modified separately since no harm is
+done if power is lost before the change counter can be updated.</p>
+
+<a name="safeappend"></a>
+
+<h2 id="_filesystems_with_safe_append_semantics"><span>7.5. </span> Filesystems With Safe Append Semantics</h2>
+
+<p>Another optimization introduced in SQLite version 3.5.0 makes
+use of "safe append" behavior of the underlying disk.
+Recall that SQLite assumes that when data is appended to a file
+(specifically to the rollback journal) that the size of the file
+is increased first and that the content is written second. So
+if power is lost after the file size is increased but before the
+content is written, the file is left containing invalid "garbage"
+data. The xDeviceCharacteristics method of the VFS might, however,
+indicate that the filesystem implements "safe append" semantics.
+This means that the content is written before the file size is
+increased so that it is impossible for garbage to be introduced
+into the rollback journal by a power loss or system crash.</p>
+
+<p>When safe append semantics are indicated for a filesystem,
+SQLite always stores the special value of -1 for the page count
+in the header of the rollback journal. The -1 page count value
+tells any process attempting to rollback the journal that the
+number of pages in the journal should be computed from the journal
+size. This -1 value is never changed. So that when a commit
+occurs, we save a single flush operation and a sector write of
+the first page of the journal file. Furthermore, when a cache
+spill occurs we no longer need to append a new journal header
+to the end of the journal; we can simply continue appending
+new pages to the end of the existing journal.</p>
+
+<a name="section_7_6"></a>
+<h2 id="_persistent_rollback_journals"><span>7.6. </span> Persistent Rollback Journals</h2>
+
+<p>Deleting a file is an expensive operation on many systems.
+So as an optimization, SQLite can be configured to avoid the
+delete operation of <a href="#section_3_11">section 3.11</a>.
+Instead of deleting the journal file in order to commit a transaction,
+the file is either truncated to zero bytes in length or its
+header is overwritten with zeros. Truncating the file to zero
+length saves having to make modifications to the directory containing
+the file since the file is not removed from the directory.
+Overwriting the header has the additional savings of not having
+to update the length of the file (in the "inode" on many systems)
+and not having to deal with newly freed disk sectors. Furthermore,
+at the next transaction the journal will be created by overwriting
+existing content rather than appending new content onto the end
+of a file, and overwriting is often much faster than appending.</p>
+
+<p>SQLite can be configured to commit transactions by overwriting
+the journal header with zeros instead of deleting the journal file
+by setting the "PERSIST" journaling mode using the
+<a href="pragma.html#pragma_journal_mode">journal_mode</a> PRAGMA.
+For example:</p>
+
+<blockquote><pre>
+PRAGMA journal_mode=PERSIST;
+</pre></blockquote>
+
+<p>The use of persistent journal mode provides a noticeable performance
+improvement on many systems. Of course, the drawback is that the
+journal files remain on the disk, using disk space and cluttering
+directories, long after the transaction commits. The only safe way
+to delete a persistent journal file is to commit a transaction
+with journaling mode set to DELETE:</p>
+
+<blockquote><pre>
+PRAGMA journal_mode=DELETE;
+BEGIN EXCLUSIVE;
+COMMIT;
+</pre></blockquote>
+
+<p>Beware of deleting persistent journal files by any other means
+since the journal file might be hot, in which case deleting it will
+corrupt the corresponding database file.</p>
+
+<p>Beginning in SQLite <a href="releaselog/3_6_4.html">version 3.6.4</a> (2008-10-15),
+the TRUNCATE journal mode is
+also supported:</p>
+
+<blockquote><pre>
+PRAGMA journal_mode=TRUNCATE;
+</pre></blockquote>
+
+<p>In truncate journal mode, the transaction is committed by truncating
+the journal file to zero length rather than deleting the journal file
+(as in DELETE mode) or by zeroing the header (as in PERSIST mode).
+TRUNCATE mode shares the advantage of PERSIST mode that the directory
+that contains the journal file and database does not need to be updated.
+Hence truncating a file is often faster than deleting it. TRUNCATE has
+the additional advantage that it is not followed by a
+system call (ex: fsync()) to synchronize the change to disk. It might
+be safer if it did.
+But on many modern filesystems, a truncate is an atomic and
+synchronous operation and so we think that TRUNCATE will usually be safe
+in the face of power failures. If you are uncertain about whether or
+not TRUNCATE will be synchronous and atomic on your filesystem and it is
+important to you that your database survive a power loss or operating
+system crash that occurs during the truncation operation, then you might
+consider using a different journaling mode.</p>
+
+<p>On embedded systems with synchronous filesystems, TRUNCATE results
+in slower behavior than PERSIST. The commit operation is the same speed.
+But subsequent transactions are slower following a TRUNCATE because it is
+faster to overwrite existing content than to append to the end of a file.
+New journal file entries will always be appended following a TRUNCATE but
+will usually overwrite with PERSIST.</p>
+
+<a name="testing"></a>
+
+<h1 id="_testing_atomic_commit_behavior"><span>8. </span> Testing Atomic Commit Behavior</h1>
+
+<p>The developers of SQLite are confident that it is robust
+in the face of power failures and system crashes because the
+automatic test procedures do extensive checks on
+the ability of SQLite to recover from simulated power loss.
+We call these the "crash tests".</p>
+
+<p>Crash tests in SQLite use a modified VFS that can simulate
+the kinds of filesystem damage that occur during a power
+loss or operating system crash. The crash-test VFS can simulate
+incomplete sector writes, pages filled with garbage data because
+a write has not completed, and out of order writes, all occurring
+at varying points during a test scenario. Crash tests execute
+transactions over and over, varying the time at which a simulated
+power loss occurs and the properties of the damage inflicted.
+Each test then reopens the database after the simulated crash and
+verifies that the transaction either occurred completely
+or not at all and that the database is in a completely
+consistent state.</p>
+
+<p>The crash tests in SQLite have discovered a number of very
+subtle bugs (now fixed) in the recovery mechanism. Some of
+these bugs were very obscure and unlikely to have been found
+using only code inspection and analysis techniques. From this
+experience, the developers of SQLite feel confident that any other
+database system that does not use a similar crash test system
+likely contains undetected bugs that will lead to database
+corruption following a system crash or power failure.</p>
+
+<a name="sect_9_0"></a>
+
+<h1 id="_things_that_can_go_wrong"><span>9. </span> Things That Can Go Wrong</h1>
+
+<p>The atomic commit mechanism in SQLite has proven to be robust,
+but it can be circumvented by a sufficiently creative
+adversary or a sufficiently broken operating system implementation.
+This section describes a few of the ways in which an SQLite database
+might be corrupted by a power failure or system crash.
+(See also: <a href="howtocorrupt.html">How To Corrupt Your Database Files</a>.)</p>
+
+<a name="brokenlocks"></a>
+
+<h2 id="_broken_locking_implementations"><span>9.1. </span> Broken Locking Implementations</h2>
+
+<p>SQLite uses filesystem locks to make sure that only one
+process and database connection is trying to modify the database
+at a time. The filesystem locking mechanism is implemented
+in the VFS layer and is different for every operating system.
+SQLite depends on this implementation being correct. If something
+goes wrong and two or more processes are able to write the same
+database file at the same time, severe damage can result.</p>
+
+<p>We have received reports of implementations of both
+Windows network filesystems and NFS in which locking was
+subtly broken. We can not verify these reports, but as
+locking is difficult to get right on a network filesystem
+we have no reason to doubt them. You are advised to
+avoid using SQLite on a network filesystem in the first place,
+since performance will be slow. But if you must use a
+network filesystem to store SQLite database files, consider
+using a secondary locking mechanism to prevent simultaneous
+writes to the same database even if the native filesystem
+locking mechanism malfunctions.</p>
+
+<p>The versions of SQLite that come preinstalled on Apple
+Mac OS X computers contain a version of SQLite that has been
+extended to use alternative locking strategies that work on
+all network filesystems that Apple supports. These extensions
+used by Apple work great as long as all processes are accessing
+the database file in the same way. Unfortunately, the locking
+mechanisms do not exclude one another, so if one process is
+accessing a file using (for example) AFP locking and another
+process (perhaps on a different machine) is using dot-file locks,
+the two processes might collide because AFP locks do not exclude
+dot-file locks or vice versa.</p>
+
+<a name="fsync"></a>
+
+<h2 id="_incomplete_disk_flushes"><span>9.2. </span> Incomplete Disk Flushes</h2>
+
+<p>SQLite uses the fsync() system call on Unix and the FlushFileBuffers()
+system call on w32 in order to sync the file system buffers onto disk
+oxide as shown in <a href="#section_3_7">step 3.7</a> and
+<a href="#section_3_10">step 3.10</a>. Unfortunately, we have received
+reports that neither of these interfaces works as advertised on many
+systems. We hear that FlushFileBuffers() can be completely disabled
+using registry settings on some Windows versions. Some historical
+versions of Linux contain versions of fsync() which are no-ops on
+some filesystems, we are told. Even on systems where
+FlushFileBuffers() and fsync() are said to be working, often
+the IDE disk control lies and says that data has reached oxide
+while it is still held only in the volatile control cache.</p>
+
+<p>On the Mac, you can set this pragma:</p>
+
+<blockquote>
+PRAGMA fullfsync=ON;
+</blockquote>
+
+<p>Setting fullfsync on a Mac will guarantee that data really does
+get pushed out to the disk platter on a flush. But the implementation
+of fullfsync involves resetting the disk controller. And so not only
+is it profoundly slow, it also slows down other unrelated disk I/O.
+So its use is not recommended.</p>
+
+<a name="filedel"></a>
+
+<h2 id="_partial_file_deletions"><span>9.3. </span> Partial File Deletions</h2>
+
+<p>SQLite assumes that file deletion is an atomic operation from the
+point of view of a user process. If power fails in the middle of
+a file deletion, then after power is restored SQLite expects to see
+either the entire file with all of its original data intact, or it
+expects not to find the file at all. Transactions may not be atomic
+on systems that do not work this way.</p>
+
+<a name="filegarbage"></a>
+
+<h2 id="_garbage_written_into_files"><span>9.4. </span> Garbage Written Into Files</h2>
+
+<p>SQLite database files are ordinary disk files that can be
+opened and written by ordinary user processes. A rogue process
+can open an SQLite database and fill it with corrupt data.
+Corrupt data might also be introduced into an SQLite database
+by bugs in the operating system or disk controller; especially
+bugs triggered by a power failure. There is nothing SQLite can
+do to defend against these kinds of problems.</p>
+
+<a name="mvhotjrnl"></a>
+
+<h2 id="_deleting_or_renaming_a_hot_journal"><span>9.5. </span> Deleting Or Renaming A Hot Journal</h2>
+
+<p>If a crash or power loss does occur and a hot journal is left on
+the disk, it is essential that the original database file and the hot
+journal remain on disk with their original names until the database
+file is opened by another SQLite process and rolled back.
+During recovery at <a href="#section_4_2">step 4.2</a> SQLite locates
+the hot journal by looking for a file in the same directory as the
+database being opened and whose name is derived from the name of the
+file being opened. If either the original database file or the
+hot journal have been moved or renamed, then the hot journal will
+not be seen and the database will not be rolled back.</p>
+
+<p>We suspect that a common failure mode for SQLite recovery happens
+like this: A power failure occurs. After power is restored, a well-meaning
+user or system administrator begins looking around on the disk for
+damage. They see their database file named "important.data". This file
+is perhaps familiar to them. But after the crash, there is also a
+hot journal named "important.data-journal". The user then deletes
+the hot journal, thinking that they are helping to cleanup the system.
+We know of no way to prevent this other than user education.</p>
+
+<p>If there are multiple (hard or symbolic) links to a database file,
+the journal will be created using the name of the link through which
+the file was opened. If a crash occurs and the database is opened again
+using a different link, the hot journal will not be located and no
+rollback will occur.</p>
+
+<p>Sometimes a power failure will cause a filesystem to be corrupted
+such that recently changed filenames are forgotten and the file is
+moved into a "/lost+found" directory. When that happens, the hot
+journal will not be found and recovery will not occur.
+SQLite tries to prevent this
+by opening and syncing the directory containing the rollback journal
+at the same time it syncs the journal file itself. However, the
+movement of files into /lost+found can be caused by unrelated processes
+creating unrelated files in the same directory as the main database file.
+And since this is out from under the control of SQLite, there is nothing
+that SQLite can do to prevent it. If you are running on a system that
+is vulnerable to this kind of filesystem namespace corruption (most
+modern journalling filesystems are immune, we believe) then you might
+want to consider putting each SQLite database file in its own private
+subdirectory.</p>
+
+<a name="future"></a>
+
+<h1 id="_future_directions_and_conclusion"><span>10. </span> Future Directions And Conclusion</h1>
+
+<p>Every now and then someone discovers a new failure mode for
+the atomic commit mechanism in SQLite and the developers have to
+put in a patch. This is happening less and less and the
+failure modes are becoming more and more obscure. But it would
+still be foolish to suppose that the atomic commit logic of
+SQLite is entirely bug-free. The developers are committed to fixing
+these bugs as quickly as they might be found.</p>
+
+<p>
+The developers are also on the lookout for new ways to
+optimize the commit mechanism. The current VFS implementations
+for Unix (Linux and Mac OS X) and Windows make pessimistic assumptions about
+the behavior of those systems. After consultation with experts
+on how these systems work, we might be able to relax some of the
+assumptions on these systems and allow them to run faster. In
+particular, we suspect that most modern filesystems exhibit the
+safe append property and that many of them might support atomic
+sector writes. But until this is known for certain, SQLite will
+take the conservative approach and assume the worst.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/atomiccommit.in?m=daed65c9ccb4a9262">2021-10-05 17:51:47</a> UTC </small></i></p>
+
diff --git a/www/autoinc.html b/www/autoinc.html
new file mode 100644
index 0000000..d120f0d
--- /dev/null
+++ b/www/autoinc.html
@@ -0,0 +1,270 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Autoincrement</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite Autoincrement
+</div>
+</div>
+
+
+
+
+<h1 id="summary"><span>1. </span>Summary</h1>
+
+<ol type="1">
+<li><p>
+ The AUTOINCREMENT keyword imposes extra CPU, memory, disk space,
+ and disk I/O overhead and should be avoided if not strictly needed.
+ It is usually not needed.
+</p></li><li><p>
+ In SQLite, a column with type INTEGER PRIMARY KEY is an alias for the <a href="lang_createtable.html#rowid">ROWID</a>
+ (except in <a href="withoutrowid.html">WITHOUT ROWID</a> tables) which is always a 64-bit signed integer.
+</p></li><li><p>
+ On an <a href="lang_insert.html">INSERT</a>, if the ROWID or INTEGER PRIMARY KEY column is not
+ explicitly given a value, then it
+ will be filled automatically with an unused integer, usually
+ one more than the largest ROWID currently in use.
+ This is true regardless of whether or not the AUTOINCREMENT keyword is used.
+</p></li><li><p>
+ If the AUTOINCREMENT keyword appears after INTEGER PRIMARY KEY, that
+ changes the automatic ROWID assignment algorithm to prevent
+ the reuse of ROWIDs over the lifetime of the database. In other words,
+ the purpose of AUTOINCREMENT is to prevent the reuse of ROWIDs from
+ previously deleted rows.
+</p></li></ol>
+
+<h1 id="background"><span>2. </span>Background</h1>
+
+<p>
+In SQLite, table rows normally have a 64-bit signed integer <a href="lang_createtable.html#rowid">ROWID</a>
+which is unique among all rows in the same table.
+(<a href="withoutrowid.html">WITHOUT ROWID</a> tables are the exception.)
+</p>
+
+<p>
+You can access the ROWID of an SQLite table using one of the special column
+names ROWID, _ROWID_, or OID.
+Except if you declare an ordinary table column to use one of those special
+names, then the use of that name will refer to the declared column not
+to the internal ROWID.
+</p>
+
+<p>
+If a table contains a column of type <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, then that
+column becomes an alias for the ROWID. You can then access the ROWID
+using any of four different names, the original three names described above
+or the name given to the <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column. All these names are
+aliases for one another and work equally well in any context.
+</p>
+
+<p>
+When a new row is inserted into an SQLite table, the ROWID can either
+be specified as part of the INSERT statement or it can be assigned
+automatically by the database engine. To specify a ROWID manually,
+just include it in the list of values to be inserted. For example:
+</p>
+
+<div class="codeblock"><pre>CREATE TABLE test1(a INT, b TEXT);
+INSERT INTO test1(rowid, a, b) VALUES(123, 5, 'hello');
+</pre></div>
+
+<p>
+If no ROWID is specified on the insert, or if the specified ROWID has a value
+of NULL, then an appropriate ROWID is created
+automatically. The usual algorithm is to give the newly created row
+a ROWID that is one larger than the largest ROWID in the table prior
+to the insert. If the table is initially empty, then a ROWID of 1 is
+used. If the largest ROWID is equal to the largest possible integer
+(9223372036854775807) then the database
+engine starts picking positive candidate ROWIDs at random until it finds one
+that is not previously used.
+If no unused ROWID can be found after a reasonable number of attempts,
+the insert operation fails with an <a href="rescode.html#full">SQLITE_FULL</a> error.
+If no negative ROWID values are inserted explicitly, then automatically
+generated ROWID values will always be greater than zero.
+</p>
+
+<p>
+The normal ROWID selection algorithm described above
+will generate monotonically increasing
+unique ROWIDs as long as you never use the maximum ROWID value and you never
+delete the entry in the table with the largest ROWID.
+If you ever delete rows or if you ever create a row with the maximum possible
+ROWID, then ROWIDs from previously deleted rows might be reused when creating
+new rows and newly created ROWIDs might not be in strictly ascending order.
+</p>
+
+
+<h1 id="the_autoincrement_keyword"><span>3. </span>The AUTOINCREMENT Keyword</h1>
+
+<p>
+If a column has the type INTEGER PRIMARY KEY AUTOINCREMENT then a slightly
+different ROWID selection algorithm is used.
+The ROWID chosen for the new row is at least one larger than the largest ROWID
+that has ever before existed in that same table. If the table has never
+before contained any data, then a ROWID of 1 is used. If the largest possible
+ROWID has previously been inserted, then
+new INSERTs are not allowed and any attempt to insert a new row will
+fail with an SQLITE_FULL error.
+Only ROWID values from previous transactions that
+were committed are considered. ROWID values that were rolled back
+are ignored and can be reused.
+</p>
+
+<p>
+SQLite keeps track of the largest ROWID
+using an <a href="fileformat2.html#intschema">internal table</a> named "<a href="fileformat2.html#seqtab">sqlite_sequence</a>".
+The sqlite_sequence table is created
+and initialized automatically whenever a normal table that contains an
+AUTOINCREMENT column is created. The content of the sqlite_sequence table
+can be modified using ordinary UPDATE, INSERT, and DELETE statements.
+But making modifications to this table will likely perturb the AUTOINCREMENT
+key generation algorithm. Make sure you know what you are doing before
+you undertake such changes.
+The sqlite_sequence table does not track ROWID changes associated with
+UPDATE statement, only INSERT statements.
+</p>
+
+<p>
+The behavior implemented by the AUTOINCREMENT keyword is subtly different
+from the default behavior. With AUTOINCREMENT, rows with automatically
+selected ROWIDs are guaranteed to have ROWIDs that have never been used
+before by the same table in the same database. And the automatically generated
+ROWIDs are guaranteed to be monotonically increasing. These are important
+properties in certain applications. But if your application does not
+need these properties, you should probably stay with the default behavior
+since the use of AUTOINCREMENT requires additional work to be done
+as each row is inserted and thus causes INSERTs to run a little slower.
+</p>
+
+<p>Note that "monotonically increasing" does not imply that the ROWID always
+increases by exactly one. One is the usual increment. However, if an
+insert fails due to (for example) a uniqueness constraint, the ROWID of
+the failed insertion attempt might not be reused on subsequent inserts,
+resulting in gaps in the ROWID sequence. AUTOINCREMENT guarantees that
+automatically chosen ROWIDs will be increasing but not that they will be
+sequential.</p>
+
+<p>Because AUTOINCREMENT keyword changes the behavior of the ROWID selection
+algorithm, AUTOINCREMENT is not allowed on <a href="withoutrowid.html">WITHOUT ROWID</a> tables or on any
+table column other than INTEGER PRIMARY KEY. Any attempt to use
+AUTOINCREMENT on a <a href="withoutrowid.html">WITHOUT ROWID</a> table or on a column other than the
+INTEGER PRIMARY KEY column results in an error.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/autoinc.in?m=bd2decf99d7aab9c9">2017-02-02 23:55:23</a> UTC </small></i></p>
+
diff --git a/www/backup.html b/www/backup.html
new file mode 100644
index 0000000..56a555b
--- /dev/null
+++ b/www/backup.html
@@ -0,0 +1,491 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Backup API</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<style>
+ /* Formatting for the blocks containing the example code */
+ pre a:visited, pre a:link { text-decoration: none ; color: #40534b }
+ pre {
+ background: #F3F3F3;
+ float: right;
+ padding: 1ex 2ex;
+ margin-left: 1em;
+ border: solid black 1px;
+ }
+ h1,h2 { clear: both }
+</style>
+
+<div class=fancy>
+<h1>Using the SQLite Online Backup API</h1>
+
+<p>
+ Historically, backups (copies) of SQLite databases have been created
+ using the following method:
+
+<ol>
+ <li> Establish a shared lock on the database file using the SQLite API (i.e.
+ the shell tool).
+ <li> Copy the database file using an external tool (for example the unix 'cp'
+ utility or the DOS 'copy' command).
+ <li> Relinquish the shared lock on the database file obtained in step 1.
+</ol>
+
+<p>
+ This procedure works well in many scenarios and is usually very
+ fast. However, this technique has the following shortcomings:
+
+<ul>
+ <li> Any database clients wishing to write to the database file while a
+ backup is being created must wait until the shared lock is
+ relinquished.
+
+ <li> It cannot be used to copy data to or from in-memory databases.
+
+ <li> If a power failure or operating system failure occurs while copying
+ the database file the backup database may be corrupted following
+ system recovery.
+</ul>
+
+<p>
+ The <a href="c3ref/backup_finish.html#sqlite3backupinit">Online Backup API</a> was created to
+ address these concerns. The online backup API allows the contents of
+ one database to be copied into another database file, replacing any
+ original contents of the target database. The copy operation may be
+ done incrementally, in which case the source database does not need
+ to be locked for the duration of the copy, only for the brief periods
+ of time when it is actually being read from. This allows other database
+ users to continue without excessive delays while a backup of an online
+ database is made.
+<p>
+ The effect of completing the backup call sequence is to make the
+ destination a bit-wise identical copy of the source database as it
+ was when the copying commenced. (The destination becomes a "snapshot.")
+
+<p>
+ The online backup API is <a href="c3ref/backup_finish.html#sqlite3backupinit">documented here</a>.
+ The remainder of this page contains two C language examples illustrating
+ common uses of the API and discussions thereof. Reading these examples
+ is no substitute for reading the API documentation!
+
+<p>
+ Update: The <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> command introduced in
+ SQLite version 3.27.0 (2019-02-07) can serve as an
+ alternative to the backup API.
+
+<h2>Example 1: Loading and Saving In-Memory Databases</h2>
+
+<pre>
+<span style="color:blue;font-style:italic">/*</span>
+<span style="color:blue;font-style:italic">** This function is used to load the contents of a database file on disk </span>
+<span style="color:blue;font-style:italic">** into the "main" database of open database connection pInMemory, or</span>
+<span style="color:blue;font-style:italic">** to save the current contents of the database opened by pInMemory into</span>
+<span style="color:blue;font-style:italic">** a database file on disk. pInMemory is probably an in-memory database, </span>
+<span style="color:blue;font-style:italic">** but this function will also work fine if it is not.</span>
+<span style="color:blue;font-style:italic">**</span>
+<span style="color:blue;font-style:italic">** Parameter zFilename points to a nul-terminated string containing the</span>
+<span style="color:blue;font-style:italic">** name of the database file on disk to load from or save to. If parameter</span>
+<span style="color:blue;font-style:italic">** isSave is non-zero, then the contents of the file zFilename are </span>
+<span style="color:blue;font-style:italic">** overwritten with the contents of the database opened by pInMemory. If</span>
+<span style="color:blue;font-style:italic">** parameter isSave is zero, then the contents of the database opened by</span>
+<span style="color:blue;font-style:italic">** pInMemory are replaced by data loaded from the file zFilename.</span>
+<span style="color:blue;font-style:italic">**</span>
+<span style="color:blue;font-style:italic">** If the operation is successful, SQLITE_OK is returned. Otherwise, if</span>
+<span style="color:blue;font-style:italic">** an error occurs, an SQLite error code is returned.</span>
+<span style="color:blue;font-style:italic">*/</span>
+int loadOrSaveDb(<a href="c3ref/sqlite3.html">sqlite3</a> *pInMemory, const char *zFilename, int isSave){
+ int rc; <span style="color:blue;font-style:italic">/* Function return code */</span>
+ <a href="c3ref/sqlite3.html">sqlite3</a> *pFile; <span style="color:blue;font-style:italic">/* Database connection opened on zFilename */</span>
+ <a href="c3ref/backup.html">sqlite3_backup</a> *pBackup; <span style="color:blue;font-style:italic">/* Backup object used to copy data */</span>
+ <a href="c3ref/sqlite3.html">sqlite3</a> *pTo; <span style="color:blue;font-style:italic">/* Database to copy to (pFile or pInMemory) */</span>
+ <a href="c3ref/sqlite3.html">sqlite3</a> *pFrom; <span style="color:blue;font-style:italic">/* Database to copy from (pFile or pInMemory) */</span>
+
+ <span style="color:blue;font-style:italic">/* Open the database file identified by zFilename. Exit early if this fails</span>
+ <span style="color:blue;font-style:italic">** for any reason. */</span>
+ rc = <a href="c3ref/open.html">sqlite3_open</a>(zFilename, &pFile);
+ if( rc==SQLITE_OK ){
+
+ <span style="color:blue;font-style:italic">/* If this is a 'load' operation (isSave==0), then data is copied</span>
+ <span style="color:blue;font-style:italic">** from the database file just opened to database pInMemory. </span>
+ <span style="color:blue;font-style:italic">** Otherwise, if this is a 'save' operation (isSave==1), then data</span>
+ <span style="color:blue;font-style:italic">** is copied from pInMemory to pFile. Set the variables pFrom and</span>
+ <span style="color:blue;font-style:italic">** pTo accordingly. */</span>
+ pFrom = (isSave ? pInMemory : pFile);
+ pTo = (isSave ? pFile : pInMemory);
+
+ <span style="color:blue;font-style:italic">/* Set up the backup procedure to copy from the "main" database of </span>
+ <span style="color:blue;font-style:italic">** connection pFile to the main database of connection pInMemory.</span>
+ <span style="color:blue;font-style:italic">** If something goes wrong, pBackup will be set to NULL and an error</span>
+ <span style="color:blue;font-style:italic">** code and message left in connection pTo.</span>
+ <span style="color:blue;font-style:italic">**</span>
+ <span style="color:blue;font-style:italic">** If the backup object is successfully created, call backup_step()</span>
+ <span style="color:blue;font-style:italic">** to copy data from pFile to pInMemory. Then call backup_finish()</span>
+ <span style="color:blue;font-style:italic">** to release resources associated with the pBackup object. If an</span>
+ <span style="color:blue;font-style:italic">** error occurred, then an error code and message will be left in</span>
+ <span style="color:blue;font-style:italic">** connection pTo. If no error occurred, then the error code belonging</span>
+ <span style="color:blue;font-style:italic">** to pTo is set to SQLITE_OK.</span>
+ <span style="color:blue;font-style:italic">*/</span>
+ pBackup = <a href="c3ref/backup_finish.html#sqlite3backupinit">sqlite3_backup_init</a>(pTo, "main", pFrom, "main");
+ if( pBackup ){
+ (void)<a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step</a>(pBackup, -1);
+ (void)<a href="c3ref/backup_finish.html#sqlite3backupfinish">sqlite3_backup_finish</a>(pBackup);
+ }
+ rc = <a href="c3ref/errcode.html">sqlite3_errcode</a>(pTo);
+ }
+
+ <span style="color:blue;font-style:italic">/* Close the database connection opened on database file zFilename</span>
+ <span style="color:blue;font-style:italic">** and return the result of this function. */</span>
+ (void)<a href="c3ref/close.html">sqlite3_close</a>(pFile);
+ return rc;
+}
+</pre>
+
+
+<p>
+ The C function to the right demonstrates one of the simplest,
+ and most common, uses of the backup API: loading and saving the contents
+ of an in-memory database to a file on disk. The backup API is used as
+ follows in this example:
+
+ <ol>
+ <li>Function <a href="c3ref/backup_finish.html#sqlite3backupinit">sqlite3_backup_init()</a> is called to create an <a href="c3ref/backup.html">sqlite3_backup</a>
+ object to copy data between the two databases (either from a file and
+ into the in-memory database, or vice-versa).
+ <li>Function <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step()</a> is called with a parameter of
+ <tt>-1</tt> to copy the entire source database to the destination.
+ <li>Function <a href="c3ref/backup_finish.html#sqlite3backupfinish">sqlite3_backup_finish()</a> is called to clean up resources
+ allocated by <a href="c3ref/backup_finish.html#sqlite3backupinit">sqlite3_backup_init()</a>.
+ </ol>
+
+<p><b>Error handling</b>
+
+<p>
+ If an error occurs in any of the three main backup API routines
+ then the <a href="rescode.html">error code</a> and <a href="c3ref/errcode.html">message</a> are attached to
+ the destination <a href="c3ref/sqlite3.html">database connection</a>.
+ Additionally, if
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step()</a> encounters an error, then the <a href="rescode.html">error code</a> is returned
+ by both the <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step()</a> call itself, and by the subsequent call
+ to <a href="c3ref/backup_finish.html#sqlite3backupfinish">sqlite3_backup_finish()</a>. So a call to <a href="c3ref/backup_finish.html#sqlite3backupfinish">sqlite3_backup_finish()</a>
+ does not overwrite an <a href="rescode.html">error code</a> stored in the destination
+ <a href="c3ref/sqlite3.html">database connection</a> by <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step()</a>. This feature
+ is used in the example code to reduce amount of error handling required.
+ The return values of the <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step()</a> and <a href="c3ref/backup_finish.html#sqlite3backupfinish">sqlite3_backup_finish()</a>
+ calls are ignored and the error code indicating the success or failure of
+ the copy operation collected from the destination <a href="c3ref/sqlite3.html">database connection</a>
+ afterward.
+
+<p><b>Possible Enhancements</b>
+
+<p>
+ The implementation of this function could be enhanced in at least two ways:
+
+ <ol>
+ <li> Failing to obtain the lock on database file zFilename (an <a href="rescode.html#busy">SQLITE_BUSY</a>
+ error) could be handled, and
+ <li> Cases where the page-sizes of database pInMemory and zFilename are
+ different could be handled better.
+ </ol>
+
+<p>
+ Since database zFilename is a file on disk, then it may be accessed
+ externally by another process. This means that when the call to
+ sqlite3_backup_step() attempts to read from or write data to it, it may
+ fail to obtain the required file lock. If this happens, this implementation
+ will fail, returning SQLITE_BUSY immediately. The solution would be to
+ register a busy-handler callback or
+ timeout with <a href="c3ref/sqlite3.html">database connection</a> pFile
+ using <a href="c3ref/busy_handler.html">sqlite3_busy_handler()</a> or <a href="c3ref/busy_timeout.html">sqlite3_busy_timeout()</a>
+ as soon as it is opened. If it fails to obtain a required lock immediately,
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step()</a> uses any registered busy-handler callback or timeout
+ in the same way as <a href="c3ref/step.html">sqlite3_step()</a> or <a href="c3ref/exec.html">sqlite3_exec()</a> does.
+
+<p>
+ Usually, it does not matter if the page-sizes of the source database and the
+ destination database are different before the contents of the destination
+ are overwritten. The page-size of the destination database is simply changed
+ as part of the backup operation. The exception is if the destination database
+ happens to be an in-memory database. In this case, if the page sizes
+ are not the same at the start of the backup operation, then the operation
+ fails with an SQLITE_READONLY error. Unfortunately, this could occur when
+ loading a database image from a file into an in-memory database using
+ function loadOrSaveDb().
+
+<p>
+ However, if in-memory database pInMemory has just been opened (and is
+ therefore completely empty) before being passed to function loadOrSaveDb(),
+ then it is still possible to change its page size using an SQLite "PRAGMA
+ page_size" command. Function loadOrSaveDb() could detect this case, and
+ attempt to set the page-size of the in-memory database to the page-size
+ of database zFilename before invoking the online backup API functions.
+
+<h2>Example 2: Online Backup of a Running Database</h2>
+
+<pre>
+<span style="color:blue;font-style:italic">/*</span>
+<span style="color:blue;font-style:italic">** Perform an online backup of database pDb to the database file named</span>
+<span style="color:blue;font-style:italic">** by zFilename. This function copies 5 database pages from pDb to</span>
+<span style="color:blue;font-style:italic">** zFilename, then unlocks pDb and sleeps for 250 ms, then repeats the</span>
+<span style="color:blue;font-style:italic">** process until the entire database is backed up.</span>
+<span style="color:blue;font-style:italic">** </span>
+<span style="color:blue;font-style:italic">** The third argument passed to this function must be a pointer to a progress</span>
+<span style="color:blue;font-style:italic">** function. After each set of 5 pages is backed up, the progress function</span>
+<span style="color:blue;font-style:italic">** is invoked with two integer parameters: the number of pages left to</span>
+<span style="color:blue;font-style:italic">** copy, and the total number of pages in the source file. This information</span>
+<span style="color:blue;font-style:italic">** may be used, for example, to update a GUI progress bar.</span>
+<span style="color:blue;font-style:italic">**</span>
+<span style="color:blue;font-style:italic">** While this function is running, another thread may use the database pDb, or</span>
+<span style="color:blue;font-style:italic">** another process may access the underlying database file via a separate </span>
+<span style="color:blue;font-style:italic">** connection.</span>
+<span style="color:blue;font-style:italic">**</span>
+<span style="color:blue;font-style:italic">** If the backup process is successfully completed, SQLITE_OK is returned.</span>
+<span style="color:blue;font-style:italic">** Otherwise, if an error occurs, an SQLite error code is returned.</span>
+<span style="color:blue;font-style:italic">*/</span>
+int backupDb(
+ <a href="c3ref/sqlite3.html">sqlite3</a> *pDb, <span style="color:blue;font-style:italic">/* Database to back up */</span>
+ const char *zFilename, <span style="color:blue;font-style:italic">/* Name of file to back up to */</span>
+ void(*xProgress)(int, int) <span style="color:blue;font-style:italic">/* Progress function to invoke */ </span>
+){
+ int rc; <span style="color:blue;font-style:italic">/* Function return code */</span>
+ <a href="c3ref/sqlite3.html">sqlite3</a> *pFile; <span style="color:blue;font-style:italic">/* Database connection opened on zFilename */</span>
+ <a href="c3ref/backup.html">sqlite3_backup</a> *pBackup; <span style="color:blue;font-style:italic">/* Backup handle used to copy data */</span>
+
+ <span style="color:blue;font-style:italic">/* Open the database file identified by zFilename. */</span>
+ rc = <a href="c3ref/open.html">sqlite3_open</a>(zFilename, &pFile);
+ if( rc==SQLITE_OK ){
+
+ <span style="color:blue;font-style:italic">/* Open the <a href="c3ref/backup.html">sqlite3_backup</a> object used to accomplish the transfer */</span>
+ pBackup = <a href="c3ref/backup_finish.html#sqlite3backupinit">sqlite3_backup_init</a>(pFile, "main", pDb, "main");
+ if( pBackup ){
+
+ <span style="color:blue;font-style:italic">/* Each iteration of this loop copies 5 database pages from database</span>
+ <span style="color:blue;font-style:italic">** pDb to the backup database. If the return value of backup_step()</span>
+ <span style="color:blue;font-style:italic">** indicates that there are still further pages to copy, sleep for</span>
+ <span style="color:blue;font-style:italic">** 250 ms before repeating. */</span>
+ do {
+ rc = <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step</a>(pBackup, 5);
+ xProgress(
+ <a href="c3ref/backup_finish.html#sqlite3backupremaining">sqlite3_backup_remaining</a>(pBackup),
+ <a href="c3ref/backup_finish.html#sqlite3backuppagecount">sqlite3_backup_pagecount</a>(pBackup)
+ );
+ if( rc==SQLITE_OK || rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){
+ <a href="c3ref/sleep.html">sqlite3_sleep</a>(250);
+ }
+ } while( rc==SQLITE_OK || rc==SQLITE_BUSY || rc==SQLITE_LOCKED );
+
+ <span style="color:blue;font-style:italic">/* Release resources allocated by backup_init(). */</span>
+ (void)<a href="c3ref/backup_finish.html#sqlite3backupfinish">sqlite3_backup_finish</a>(pBackup);
+ }
+ rc = <a href="c3ref/errcode.html">sqlite3_errcode</a>(pFile);
+ }
+
+ <span style="color:blue;font-style:italic">/* Close the database connection opened on database file zFilename</span>
+ <span style="color:blue;font-style:italic">** and return the result of this function. */</span>
+ (void)<a href="c3ref/close.html">sqlite3_close</a>(pFile);
+ return rc;
+}
+</pre>
+
+
+<p>
+ The function presented in the previous example copies the entire source
+ database in one call to <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step()</a>. This requires holding a
+ read-lock on the source database file for the duration of the operation,
+ preventing any other database user from writing to the database. It also
+ holds the mutex associated with database pInMemory throughout the copy,
+ preventing any other thread from using it. The C function in this section,
+ designed to be called by a background thread or process for creating a
+ backup of an online database, avoids these problems using the following
+ approach:
+
+ <ol>
+ <li>Function <a href="c3ref/backup_finish.html#sqlite3backupinit">sqlite3_backup_init()</a> is called to create an <a href="c3ref/backup.html">sqlite3_backup</a>
+ object to copy data from database pDb to the backup database file
+ identified by zFilename.
+ <li>Function <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step()</a> is called with a parameter of 5 to
+ copy 5 pages of database pDb to the backup database (file zFilename).
+ <li>If there are still more pages to copy from database pDb, then the
+ function sleeps for 250 milliseconds (using the <a href="c3ref/sleep.html">sqlite3_sleep()</a>
+ utility) and then returns to step 2.
+ <li>Function <a href="c3ref/backup_finish.html#sqlite3backupfinish">sqlite3_backup_finish()</a> is called to clean up resources
+ allocated by <a href="c3ref/backup_finish.html#sqlite3backupinit">sqlite3_backup_init()</a>.
+ </ol>
+
+<p><b>File and Database Connection Locking</b>
+
+<p>
+ During the 250 ms sleep in step 3 above, no read-lock is held on the database
+ file and the mutex associated with pDb is not held. This allows other threads
+ to use <a href="c3ref/sqlite3.html">database connection</a> pDb and other connections to write to the
+ underlying database file.
+
+<p>
+ If another thread or process writes to the source database while this
+ function is sleeping, then SQLite detects this and usually restarts the
+ backup process when sqlite3_backup_step() is next called. There is one
+ exception to this rule: If the source database is not an in-memory database,
+ and the write is performed from within the same process as the backup
+ operation and uses the same database handle (pDb), then the destination
+ database (the one opened using connection pFile) is automatically updated
+ along with the source. The backup process may then be continued after the
+ sqlite3_sleep() call returns as if nothing had happened.
+
+<p>
+ Whether or not the backup process is restarted as a result of writes to
+ the source database mid-backup, the user can be sure that when the backup
+ operation is completed the backup database contains a consistent and
+ up-to-date snapshot of the original. However:
+
+ <ul>
+ <li> Writes to an in-memory source database, or writes to a file-based
+ source database by an external process or thread using a
+ database connection other than pDb are significantly more expensive
+ than writes made to a file-based source database using pDb (as the
+ entire backup operation must be restarted in the former two cases).
+
+ <li> If the backup process is restarted frequently enough it may never
+ run to completion and the backupDb() function may never return.
+ </ul>
+
+<p><b>backup_remaining() and backup_pagecount()</b>
+
+<p>
+ The backupDb() function uses the sqlite3_backup_remaining() and
+ sqlite3_backup_pagecount() functions to report its progress via the
+ user-supplied xProgress() callback. Function sqlite3_backup_remaining()
+ returns the number of pages left to copy and sqlite3_backup_pagecount()
+ returns the total number of pages in the source database (in this case
+ the database opened by pDb). So the percentage completion of the process
+ may be calculated as:
+
+<p style="font-family:fixed;margin-left:5em">
+ Completion = 100% * (pagecount() - remaining()) / pagecount()
+
+<p>
+ The sqlite3_backup_remaining() and sqlite3_backup_pagecount() APIs report
+ values stored by the previous call to sqlite3_backup_step(), they do not
+ actually inspect the source database file. This means that if the source
+ database is written to by another thread or process after the call to
+ sqlite3_backup_step() returns but before the values returned by
+ sqlite3_backup_remaining() and sqlite3_backup_pagecount() are used, the
+ values may be technically incorrect. This is not usually a problem.
+
+
+<div style="clear:both"></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/backup.in?m=6237da6d29d4e0273">2021-12-10 14:23:30</a> UTC </small></i></p>
+
diff --git a/www/bindptr.html b/www/bindptr.html
new file mode 100644
index 0000000..4d62397
--- /dev/null
+++ b/www/bindptr.html
@@ -0,0 +1,596 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Pointer Passing Interfaces</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Pointer Passing Interfaces
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#a_brief_history_of_pointer_passing_in_sqlite">2. A Brief History Of Pointer Passing In SQLite</a></div>
+<div class="fancy-toc2"><a href="#upping_the_threat_level">2.1. Upping The Threat Level</a></div>
+<div class="fancy-toc2"><a href="#preventing_forged_pointers">2.2. Preventing Forged Pointers</a></div>
+<div class="fancy-toc2"><a href="#pointer_leaks">2.3. Pointer Leaks</a></div>
+<div class="fancy-toc1"><a href="#the_new_pointer_passing_interfaces">3. The New Pointer-Passing Interfaces</a></div>
+<div class="fancy-toc2"><a href="#pointer_types">3.1. Pointer Types</a></div>
+<div class="fancy-toc3"><a href="#pointer_types_are_static_strings">3.1.1. Pointer types are static strings</a></div>
+<div class="fancy-toc2"><a href="#destructor_functions">3.2. Destructor Functions</a></div>
+<div class="fancy-toc1"><a href="#restrictions_on_the_use_of_pointer_values">4. Restrictions On The Use of Pointer Values</a></div>
+<div class="fancy-toc1"><a href="#summary">5. Summary</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+Three new "_pointer()" interfaces were added to SQLite 3.20.0 (2017-08-01):
+</p><ul>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a>,
+</li><li> <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a>, and
+</li><li> <a href="c3ref/value_blob.html">sqlite3_value_pointer()</a>.
+</li></ul>
+
+<p>Questions and confusion quickly arose
+on the <a href="support.html#mailinglists">mailing lists</a> about the purpose behind these new interfaces,
+why they were introduced, and what problem they solve. This essay attempts
+to answer those questions and clear up the confusion.
+
+</p><h1 id="a_brief_history_of_pointer_passing_in_sqlite"><span>2. </span>A Brief History Of Pointer Passing In SQLite</h1>
+
+<p>
+It is sometimes convenient for SQLite extensions to
+communicate non-SQL values between subcomponents or between the extension
+and the application. Some examples:
+
+</p><ul>
+<li><p>
+In the <a href="fts3.html">FTS3</a> extension, the
+<a href="fts3.html#full_text_index_queries">MATCH operator</a> (which does the full-text search)
+needs to communicate details of matching entries
+to the <a href="fts3.html#snippet">snippet()</a>, <a href="fts3.html#offsets">offsets()</a>,
+and <a href="fts3.html#matchinfo">matchinfo()</a> functions so that those functions can convert the details
+of the match into useful output.
+
+</p></li><li><p>
+In order for an application to
+<a href="fts5.html#extending_fts5">add new extensions to FTS5</a>, such as new tokenizers,
+the application needs a pointer to the "fts5_api" object.
+
+</p></li><li><p>
+In the <a href="carray.html">CARRAY extension</a>, the application needs to tell the
+extension the
+location of a C-language array that contains the data for the table-valued
+function that the extension implements.
+</p></li></ul>
+
+<p>
+The traditional way of communicating this information was to transform a
+C-language pointer into a BLOB or a 64-bit integer, then move that BLOB or
+integer through SQLite using the usual interfaces like
+<a href="c3ref/bind_blob.html">sqlite3_bind_blob()</a>, <a href="c3ref/result_blob.html">sqlite3_result_blob()</a>, <a href="c3ref/value_blob.html">sqlite3_value_blob()</a> or
+the integer equivalents.
+
+</p><h2 id="upping_the_threat_level"><span>2.1. </span>Upping The Threat Level</h2>
+
+<p>
+Passing around pointers as if they were integers or BLOBs is easy,
+effective, and works well in an environment where the application
+components are all friendly toward one another. However, passing pointers
+as integers and BLOBs allows hostile SQL text to forge invalid pointers that
+can carry out mischief.
+
+</p><p>
+For example, the first argument to the <a href="fts3.html#snippet">snippet()</a> function is supposed to
+be a special column of the FTS3 table that contains a pointer to an fts3cursor
+object that contains information about the current full text search match.
+That pointer was formerly passed as a BLOB.
+For example, if the FTS3 table is named "t1" and has a column named "cx",
+one might write:
+
+</p><div class="codeblock"><pre>SELECT snippet(t1) FROM t1 WHERE cx MATCH $pattern;
+</pre></div>
+
+<p>
+But if a hacker is able to run arbitrary SQL, he might run a slightly
+different query, like this:
+
+</p><div class="codeblock"><pre>SELECT hex(t1) FROM t1 WHERE cx MATCH $pattern;
+</pre></div>
+
+<p>
+Because the pointer is passed in the t1 column of the t1
+table as a BLOB (in older versions of SQLite), such a query would have
+shown the value of the
+pointer in hex. The attacker could then modify that pointer to try to
+get the snippet() function to modify memory in some other part of
+the application address space instead of the fts3cursor object it
+was supposed to be operating on:
+
+</p><div class="codeblock"><pre>SELECT snippet(x'6092310100000000') FROM t1 WHERE cx MATCH $pattern;
+</pre></div>
+
+<p>
+Historically, this was not considered a threat. The argument was that if
+a hostile agent is able to inject arbitrary SQL text into the application,
+then that agent is already in full control of the application, so
+letting the hostile agent forge a pointer does not give the agent
+any new capability.
+
+</p><p>
+For most cases, it is true that potential attackers have no way of injecting
+arbitrary SQL, and so most uses of SQLite are immune to the attack above.
+But there are some notable exceptions. To wit:
+
+</p><ul>
+<li><p>
+The <a href="https://en.wikipedia.org/wiki/Web_SQL_Database">WebSQL</a> interface
+to webkit allowed any webpage to run arbitrary SQL in the browser
+for Chrome and Safari. That arbitrary SQL was supposed to be run inside
+a sandbox where it could do no harm even if exploited, but that sandbox
+turned out to be less secure than people supposed. In the spring of 2017,
+one team of hackers was able to root an iMac using a long sequence of
+exploits, one of which involved corrupting the pointers passed as BLOB
+values to the snippet() FTS3 function of an SQLite database running via
+the WebSQL interface inside of Safari.
+
+</p></li><li><p>
+On Android, we are told, there are many services that will blindly
+run arbitrary SQL that is passed to them by untrustworthy apps
+that have been downloaded from dodgy corners of the internet.
+Android services are suppose to be more guarded about running SQL
+from unvetted sources. This author does not have any specific examples
+to the contrary, but he has heard rumors that they exist. Even if
+all Android services are more careful and properly vet all the SQL
+they run, it would be difficult to audit them
+all in order to verify that they are safe. Hence, security-minded people
+are keen to ensure that no exploits are possible by passing arbitrary
+SQL text.
+
+</p></li><li><p>
+The <a href="https://www.fossil-scm.org/">Fossil</a> version control system (designed
+and written for the purpose of supporting SQLite development) allows
+mildly trusted users to enter arbitrary SQL for generating trouble-ticket
+reports. That SQL is sanitized using the
+<a href="c3ref/set_authorizer.html">sqlite3_set_authorizer()</a> interface, and no exploits have ever been
+found. But this is an example of potentially hostile agents being able to
+inject arbitrary SQL into the system.
+</p></li></ul>
+
+<h2 id="preventing_forged_pointers"><span>2.2. </span>Preventing Forged Pointers</h2>
+
+<p>
+The first attempt at closing security gaps in pointer passing was to
+prevent pointer values from being forged. This was accomplished by
+having the sender attach a subtype to each pointer using
+<a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> and having the receiver verify that subtype
+using <a href="c3ref/value_subtype.html">sqlite3_value_subtype()</a> and reject pointers that had an incorrect
+subtype. Since there is no way to attach a subtype to a result using
+pure SQL, this prevents pointers from being forged using SQL. The only
+way to send a pointer is to use C code. If an attacker can set a subtype,
+then he is also able to forge a pointer without the help of SQLite.
+
+</p><p>
+Using subtypes to identify valid pointers prevented the WebSQL exploit.
+But it turned out to be an incomplete solution.
+
+<a name="ptrleak"></a>
+
+</p><h2 id="pointer_leaks"><span>2.3. </span>Pointer Leaks</h2>
+
+<p>
+The use of subtypes on pointers prevented pointer forgery using
+pure SQL. But subtypes do nothing to prevent an attacker from reading
+the values of pointers. In other words, subtypes on pointer values
+prevent attacks using SQL statements like this:
+
+</p><div class="codeblock"><pre>SELECT snippet(x'6092310100000000') FROM t1 WHERE cx MATCH $pattern;
+</pre></div>
+
+<p>
+The BLOB argument to snippet() does not have the correct subtype, so the
+snippet function ignores it, makes no changes to any data structures,
+and harmlessly returns NULL.
+
+</p><p>
+But the use of subtypes does nothing to prevent the value of a
+pointer from being read using SQL code like this:
+
+</p><div class="codeblock"><pre>SELECT hex(t1) FROM t1 WHERE cx MATCH $pattern;
+</pre></div>
+
+<p>
+What harm could come of that, you ask? The SQLite developers (including
+this author) wondered the same thing. But then security researchers
+pointed out that knowledge of pointers can help attackers to circumvent
+address-space randomization defenses. This is called a "pointer leak".
+A pointer leak is not itself a vulnerability, but it can aid an attacker
+in effectively exploiting other vulnerabilities.
+
+</p><h1 id="the_new_pointer_passing_interfaces"><span>3. </span>The New Pointer-Passing Interfaces</h1>
+
+<p>
+Allowing extension components to pass private information to one another
+securely and without introducing pointer leaks requires new interfaces:
+
+</p><ul>
+<li><b><a href="c3ref/bind_blob.html">sqlite3_bind_pointer</a>(S,I,P,T,D)</b> &rarr;
+Bind pointer P of type T to the I-th parameter of prepared statement S.
+D is an optional destructor function for P.
+</li><li><b><a href="c3ref/result_blob.html">sqlite3_result_pointer</a>(C,P,T,D)</b> &rarr;
+Return pointer P of type T as the argument of function C.
+D is an optional destructor function for P.
+</li><li><b><a href="c3ref/value_blob.html">sqlite3_value_pointer</a>(V,T)</b> &rarr;
+Return the pointer of type T associated with value V, or if V has no
+associated pointer, or if the pointer on V is of a type different from
+T, then return NULL.
+</li></ul>
+
+<p>
+To SQL, the values created by <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> and
+<a href="c3ref/result_blob.html">sqlite3_result_pointer()</a> are indistinguishable from NULL. An
+SQL statement that tries to use the <a href="lang_corefunc.html#hex">hex()</a> function to read the
+value of a pointer will get an SQL NULL answer. The only way to
+discover whether or not a value has an associated pointer is to
+use the <a href="c3ref/value_blob.html">sqlite3_value_pointer()</a> interface with the appropriate
+type string T.
+
+</p><p>
+Pointer values read by <a href="c3ref/value_blob.html">sqlite3_value_pointer()</a>
+cannot be generated by pure SQL. Hence, it is not possible for SQL to
+forge pointers.
+
+</p><p>
+Pointer values generated by <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> and
+<a href="c3ref/result_blob.html">sqlite3_result_pointer()</a> cannot be read by pure SQL.
+Hence, it is not possible for SQL to leak the value of pointers.
+
+</p><p>
+In this way the new pointer-passing interface seems to solve all of the
+security problems associated with passing pointer values from one
+extension to another in SQLite.
+
+<a name="ptrtyp"></a>
+
+</p><h2 id="pointer_types"><span>3.1. </span>Pointer Types</h2>
+
+<p>
+The "pointer type" in the last parameter to <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a>,
+<a href="c3ref/result_blob.html">sqlite3_result_pointer()</a>, and <a href="c3ref/value_blob.html">sqlite3_value_pointer()</a> is used to prevent
+pointers intended for one extension from being redirected to a different
+extension. For example, without the use of pointer types, an attacker
+could still get access to pointer information in a system that included
+both the <a href="fts3.html">FTS3</a> and the <a href="carray.html">CARRAY extension</a> using SQL like this:
+
+</p><div class="codeblock"><pre>SELECT ca.value FROM t1, carray(t1,10) AS ca WHERE cx MATCH $pattern
+</pre></div>
+
+<p>
+In the statement above, the FTS3 cursor pointer generated by the
+MATCH operator is send into the carray() table-valued function instead
+of its intended recipient snippet(). The carray() function treats the
+pointer as a pointer to an array of integers and returns each integer
+one by one, thus leaking the content of the FTS3 cursor object. Since
+the FTS3 cursor object contains pointers to other objects, the statement
+above would be a pointer leak.
+
+</p><p>
+Except, the statement above does not work, thanks to pointer types.
+The pointer generated by the MATCH operator has a type of "fts3cursor"
+but the carray() function expects to receives a pointer of type "carray".
+Because the pointer type on the <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a> does not match
+the pointer type on the <a href="c3ref/value_blob.html">sqlite3_value_pointer()</a> call,
+<a href="c3ref/value_blob.html">sqlite3_value_pointer()</a> returns NULL in carray() and thus signals
+the CARRAY extension that it has been passed an invalid pointer.
+
+</p><h3 id="pointer_types_are_static_strings"><span>3.1.1. </span>Pointer types are static strings</h3>
+
+<p>
+Pointer types are static strings, which ideally should be string literals
+embedded directly in the SQLite API call, not parameters passed in from
+other functions. Consideration was given to using integer values as
+the pointer type, but static strings provides a much larger name space
+which reduces the chance of accidental type-name collisions between
+unrelated extensions.
+
+</p><p>
+By "static string", we mean a zero-terminated array of bytes that is
+fixed and unchanging for the life of the program. In other words, the
+pointer type string should be a string constant.
+In contrast, a "dynamic string" is a zero-terminated array of bytes
+that is held in memory allocated
+from the heap, and which must be freed to avoid a memory leak.
+Do not use dynamic strings as the pointer type string.
+
+</p><p>
+Multiple commentators have expressed a desire to use dynamic strings
+for the pointer type, and to have SQLite take ownership of the type strings
+and to automatically free the type string
+when it has finished using it. That design is rejected for the
+following reasons:
+
+</p><ol>
+<li><p>
+The pointer type is not intended to be flexible and dynamic. The
+pointer type is intended to be a design-time constant. Applications
+should not synthesize pointer type strings at run-time. Providing
+support for dynamic pointer type strings would lead developers
+to misuse the pointer-passing interfaces by creating run-time
+synthesized pointer type strings. Requiring the pointer type strings
+to be static encourages developers to do the right thing by choosing
+fixed pointer type names at design-time and encoding those names
+as constant strings.
+
+</p></li><li><p>
+All string values at the SQL level in SQLite are dynamic strings.
+Requiring type strings to be static makes it difficult to
+create an application-defined SQL function that
+can synthesize a pointer of an arbitrary type. We do not want users
+to create such SQL functions, since such functions would compromise the
+security of the system. Thus, the requirement to use static strings
+helps to defend that the integrity of the pointer-passing interfaces against
+ill-designed SQL functions. The static string requirement is not
+a perfect defense, since a sophisticated programmer can code around
+it, and a novice program can simply take the memory leak. But by
+stating that the pointer type string must be static, we hope to encourage
+developers who might otherwise use a dynamic string for the pointer type
+to think more carefully about the problem and avoid introducing
+security issues.
+
+</p></li><li><p>
+Having SQLite take ownership of the type strings would impose a performance
+cost on all applications, even applications that do not use the
+pointer-passing interfaces. SQLite passes values around as instances
+of the <a href="c3ref/value.html">sqlite3_value</a> object. That object has a destructor, which because
+of the fact that sqlite3_value objects are used for nearly everything, is
+invoked frequently. If the destructor needs to check to see if there is
+a pointer type string that needs to be freed, that is a few extra CPU
+cycles that need to be burned on each call to the destructor. Those
+cycles add up. We would be willing to bear the cost of the extra CPU
+cycles if pointer-passing was a commonly used programming paradigm, but
+pointer-passing is rare, and so it seems unwise to impose a run-time cost
+on billions and billions of applications that do not use pointer passing
+just for convenience of a few applications that do.
+</p></li></ol>
+
+<p>
+If you feel that you need dynamic pointer type strings in your application,
+that is a strong indicator that you are misusing the pointer-passing interface.
+Your intended use may be unsafe.
+Please rethink your design. Determine if you really need to be passing
+pointers through SQL in the first place. Or perhaps find a different
+mechanism other than the pointer-passing interfaces described by this
+article.
+
+</p><h2 id="destructor_functions"><span>3.2. </span>Destructor Functions</h2>
+
+<p>
+The last parameter to the <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> and
+<a href="c3ref/result_blob.html">sqlite3_result_pointer()</a> routines is a pointer to a procedure
+used to dispose of the P pointer once SQLite has finished with it.
+This pointer can be NULL, in which case no destructor is called.
+
+</p><p>
+When the D parameter is not NULL, that means that ownership of the
+pointer is being transferred to SQLite. SQLite will take responsibility
+for freeing resources associated with the pointer when it has finished
+using the pointer. If the D parameter is NULL, that means that ownership
+of the pointer remains with the caller and the caller is responsible for
+disposing of the pointer.
+
+</p><p>
+Note that the destructor function D is for the pointer value P, not for
+the type string T. The type string T should be a static string with an
+infinite lifetime.
+
+</p><p>
+If ownership of the pointer is passed into SQLite by providing a
+non-NULL D parameter to <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> or <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a>
+then the ownership remains with SQLite until the object is destroyed.
+There is no way to transfer ownership out of SQLite and back into the
+application again.
+
+</p><h1 id="restrictions_on_the_use_of_pointer_values"><span>4. </span>Restrictions On The Use of Pointer Values</h1>
+
+<p>
+The pointers that piggy-back on SQL NULL values using the
+<a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a>, <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a>, and
+<a href="c3ref/value_blob.html">sqlite3_value_pointer()</a> interface are transient and ephemeral.
+The pointers are never written into the database. The pointers
+will not survive sorting. The latter fact is why there is no
+sqlite3_column_pointer() interface, since it is impossible to
+predict whether or not the query planner will insert a sort operation
+prior to returning a value from a query, so it would be impossible to
+know if a pointer value inserted into a query by
+<a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> or <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a> would survive
+through to the result set.
+
+</p><p>
+Pointer values must flow directly from their producer into their
+consumer, with no intermediate operators or functions. Any transformation
+of a pointer value destroys the pointer and transforms the value into
+an ordinary SQL NULL.
+
+</p><h1 id="summary"><span>5. </span>Summary</h1>
+
+<p>Key take-aways from this essay:
+
+</p><ol>
+<li><p>
+The internet is an increasingly hostile place. These day, developers
+should assume that attackers will find a way to execute arbitrary SQL
+in an application.
+Applications should be designed to prevent the execution of arbitrary
+SQL from escalating into a more severe exploit.
+
+</p></li><li><p>
+A few SQLite extensions benefit from passing pointers:
+</p><ul>
+<li>The <a href="fts3.html">FTS3</a> MATCH operator passes pointers into <a href="fts3.html#snippet">snippet()</a>,
+ <a href="fts3.html#offsets">offsets()</a>, and <a href="fts3.html#matchinfo">matchinfo()</a>.
+</li><li>The <a href="carray.html">carray table-valued function</a> needs to accept a pointer to
+ an array of C-language values from the application.
+</li><li>The <a href="https://sqlite.org/src/file/ext/misc/remember.c">remember() extension</a>
+ needs a pointer to a C-language integer variable in which to remember
+ the value it passes.
+</li><li>Applications need to receive a pointer to the "fts5_api" object in order
+ to add extensions, such as custom tokenizers, to the <a href="fts5.html">FTS5</a> extension.
+</li></ul>
+
+</li><li><p>
+Pointers should <u>never</u> be exchanged by encoding them as some other
+SQL datatype, such as integers or BLOBs. Instead, use the interfaces
+designed to facilitate secure pointer passing:
+<a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a>, <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a>, and
+<a href="c3ref/value_blob.html">sqlite3_value_pointer()</a>.
+
+</p></li><li><p>
+The use of pointer-passing is an advanced technique that should be used
+infrequently and cautiously. Pointer-passing should not be
+used haphazardly or carelessly. Pointer-passing is a sharp tool
+that can leave deep scars if misused.
+
+</p></li><li><p>
+The "pointer type" string which is the last parameter to each of the
+pointer-passing interfaces should be a distinct, application-specific
+string literal that appears directly in the API call. The pointer type
+should not be a parameter passed in from a higher-level function.
+</p></li></ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/bindptr.in?m=0313c341708d7be8d">2022-10-07 10:23:26</a> UTC </small></i></p>
+
diff --git a/www/books.html b/www/books.html
new file mode 100644
index 0000000..eedda91
--- /dev/null
+++ b/www/books.html
@@ -0,0 +1,442 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Books About SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align=center>Books About SQLite</h1>
+
+<hr>
+<table border=0><tr><td valign=top><img src="images/books/sanderson2018.jpg" style="border:44px solid white;">
+<td valign=top>
+<h2>SQLite Forensics (2018)</h2>
+
+<p>
+Author: Paul Sanderson<br>
+Publisher: <a href='https://www.amazon.com/SQLite-Forensics-Paul-Sanderson/dp/1980293074'>Amazon</a>
+
+<p>
+This text by noted digital forensics expert, Paul Sanderson, provides
+investigators with low-level technical details useful in analysing
+SQLite database files.
+
+<p>
+Every computer and phone uses hundreds of SQLite databases and there are
+over one trillion SQLite databases in active use. Hence, the importance
+of examining the data held in these databases in an
+investigation, including deleted data when possible, is paramount. This
+book fully explains the format of the SQLite database file. It shows how
+records are encoded, how to decode them manually and how to decode
+records that are partially overwritten. It also describe how the
+workings of SQLite, and in particular the journal and WAL, can be used
+to ascertain what has happened in a manner that cannot be determined
+from the data alone. The book covers basic SQL queries and how they can
+be used to create a custom report that includes data from different
+tables, and shows how one can use SQL queries to test hypotheses about
+the relationships of data in different tables.
+<p>
+This book is aimed mainly at
+forensic practitioners, and it is assumed that the reader has some basic
+knowledge of computer forensics; it will also be of interest to computer
+professionals in general particularly those who have an interest in the
+SQLite file format.
+</table>
+
+
+<hr>
+<table border=0><tr><td valign=top><img src="images/books/darocha2016.jpg">
+<td valign=top>
+<h2>Learning SQLite for iOS (2016)</h2>
+
+<p>
+Author: Gene Da Rocha<br>
+Publisher: <a href="https://www.packtpub.com/application-development/learning-sqlite-ios">Packt Publishing</a>
+
+<p>
+This book starts with the architecture of SQLite database and introduces
+you to concepts in SQL. You will find yourself equipped to design your
+own database system, administer it, and maintain it. Further, you will
+learn how to operate your SQLite databases smoothly using SQL commands.
+
+<p>
+You will be able to extend the functionality of SQLite by using its vast
+arsenal of C API calls to build some interesting, exciting, new, and
+intelligent data-driven applications. Understand how Xcode, HTML5, and
+Phonegap can be used to build a cross-platform modern app which can
+benefit from all these technologies - all through creating a complete,
+customizable application skeleton that you can build on for your own
+apps. This book provides a comprehensive description of SQLite database
+system. It describes design principles, engineering trade-offs,
+implementation issues, and operations of SQLite.
+</table>
+
+<hr>
+<table border=0><tr><td valign=top><img src="images/books/haldar2.jpg">
+<td valign=top>
+<h2>SQLite Database System Design and Implementation (2015)</h2>
+
+<p>
+Author: Sibsankar Haldar<br>
+Publisher: <a href="https://books.google.com/books?id=OEJ1CQAAQBAJ">https://books.google.com/</a><br>
+
+<p>
+This book provides a comprehensive description of SQLite database system.
+It describes design principles, engineering trade-offs, implementation issues,
+and operations of SQLite.
+</table>
+
+<hr>
+<table border=0><tr><td valign=top><img src="images/books/aditya.jpg">
+<td valign=top>
+<h2>Android SQLite Essentials (2014)</h2>
+
+<p>
+Authors: Sunny Kumar Aditya and Vikash Kumar Karn<br>
+Publisher: <a href="https://www.packtpub.com/application-development/android-sqlite-essentials">
+Packt Publishing</a><br>
+
+<p>
+Android SQLite Essentials focuses on the core concepts behind building
+database-driven applications. This book covers the basic and advanced
+topics with equivalent simplicity and detail, in order to enable
+readers to quickly grasp and implement the concepts to build an
+application database.
+
+<p>This book takes a hands-on, example-based approach to help readers
+understand the core topics of SQLite and Android database-driven
+applications. This book focuses on providing you with latent as well
+as widespread knowledge about practices and approaches towards
+development in an easily understandable manner.
+</table>
+
+<hr>
+<table border=0><tr><td valign=top><img src="images/books/das.jpg">
+<td valign=top>
+<h2>SQLite for Mobile Apps Simplified (2014)</h2>
+
+<p>
+Author: Sribatsa Das<br>
+Publisher: Amazon<br>
+<a href="http://amzn.com/B00M3OVSRK">Amazon</a>
+
+<p>
+SQLite for Mobile Apps Simplified is devoted to presenting approach
+and implementation methodology for using SQLite database in mobile apps.
+It presents step-by-step examples to create schema, execute transactions
+and access data from Android, BlackBerry and iOS applications.
+In addition, it presents ADB Shell and SQLite command-line shell from
+ADB Shell to access the SQLite Database created by the Android apps.
+For BlackBerry and iOS application, the book presents ways to access
+the data using the command line shell.
+</table>
+
+<hr>
+<table border=0><tr><td valign=top><img src="images/books/owens.jpg">
+<td valign=top>
+<h2>The Definitive Guide to SQLite (2nd edition, 2010)</h2>
+
+<p>
+Authors: Mike Owens and Grant Allen<br>
+Publisher: Apress<br>
+<a href="http://www.amazon.com/gp/product/1430232250">Amazon</a></p>
+
+<p>
+Outside of the world of enterprise computing, there is one database
+that enables a huge range of software and hardware to flex relational
+database capabilities, without the baggage and cost of traditional
+database management systems. That database is SQLite - an embeddable
+database with an amazingly small footprint, yet able to handle databases
+of enormous size. SQLite comes equipped with an array of powerful
+features available through a host of programming and development
+environments. It is supported by languages such as C, Java, Perl,
+PHP, Python, Ruby, TCL, and more.</p>
+
+<p><i>The Definitive Guide to SQLite, Second Edition</i>
+is devoted to complete coverage of the latest version of this powerful
+database. It offers a thorough overview of SQLite's capabilities
+and APIs. The book also uses SQLite as the basis for helping newcomers
+make their first foray into database development. In only a short time
+you can be writing programs as diverse as a server-side browser plug-in
+or the next great iPhone or Android application!
+</p>
+</table>
+
+<hr>
+<table border=0><tr><td valign=top><p><img src="images/books/kreibich.gif">
+<td valign=top>
+<h2>Using SQLite (2010)</h2>
+
+<p>
+Author: Jay A. Kreibich<br>
+Publisher: O'Reilly Media<br>
+<a href="http://oreilly.com/catalog/9780596521196/">O'Reilly</a></p>
+
+<p>Developers, take note: databases aren't just for the IS group any more.
+You can build database-backed applications for the desktop, Web,
+embedded systems, or operating systems without linking to heavy-duty
+client-server databases such as Oracle and MySQL.
+This book shows how you to use SQLite, a small and lightweight
+database that you can build right into your application during development.
+Applications that handle data have an enormous advantage today, and
+with SQLite, you'll discover how to develop a database-backed application
+that remains manageable in size and complexity. This book guides
+you every step of the way. You'll get a crash course in data modeling,
+become familiar with SQLite's dialect of the SQL database language,
+and learn how you to work with SQLite using either a scripting
+language or a C-based language, such as C# or Objective C.Now,
+even relatively small and nimble applications can be a part of
+the data revolution. Using SQLite shows you how.
+</p>
+</table>
+
+<hr>
+<table border=0><tr><td valign=top><p><img src="images/books/droessler.jpg">
+<td valign=top>
+<h2>SQLite 3 - Einstieg in die Datenbankwelt (2010)</h2>
+
+<p>
+Author: Key Droessler<br>
+Publisher: Lulu.com<br>
+<a href="http://www.amazon.com/SQLite-Einstieg-die-Datenbankwelt-German/dp/1445741075">Amazon</a></p>
+
+<p>Die Datenbanksprache SQL ( Structured Query Language ) wird in Datenbanken
+zur Definition, Manipulation, Sicherung, aber hauptsaechlich zur Abfrage
+von Daten aus der Datenbank eingesetzt. Unabhaengig vom Betriebssystem oder
+aufwendigen, benutzerfreundlichen, graphischen Oberflaechen bleibt die
+Logik aber immer gleich.SQLite ist eine freie Desktop-Datenbank,
+sie kostet nichts, ist fuer viele Betriebssysteme verfuegbar,
+schnell heruntergeladen und installiert und auf das Notwendigste
+reduziert. Fuer den Einsteiger sind das die besten Voraussetzungen,
+ohne viel Aufwand schnell in die Welt der Datenbanken und Datenbanksprache
+reinzuschnuppern.Wer nach den Uebungen aber auf den Geschmack gekommen ist,
+hat schon den groessten Teil an Datenbanken und SQL gelernt, denn alles
+Besprochene ist Wissen, welches auch auf jedes andere der vielen
+Datenbanken grundlegend anwendbar ist. Nun koennen Sie auf die richtig
+Grossen zugehen, vom grossen Fachbuch bis zum riesigen Datenbanksystem.
+</p>
+</table>
+
+<hr>
+<table border=0>
+<tr><td valign=top><img src="images/books/symbiansql.jpg"><td valign=top>
+<h2>Inside Symbian SQL (2010)</h2>
+
+<p>Authors: Ivan Litovski &amp; Richard Maynard<br>
+Publisher: Wiley<br>
+<a href="http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470744022.html">wiley.com</a></p>
+
+<p>
+This is the definitive reference book on the Symbian SQL database
+which is based on SQLite. The authors (both members of the Symbian
+engineering team responsible for the implementation of the code)
+show you how to design code
+and ease migration from an internal and external point of view,
+plus they reveal the dos and don'ts of writing high-performance
+database applications. Packed with resources and sample code,
+this timely book reveals how to design and tune applications
+that use the Symbian SQL framework to ultimately improve performance.</p>
+
+<p>With its sample code and insider expertise, this text has everything
+you need to keep you ahead of the curve.
+</p>
+</table>
+
+<hr>
+<table border=0>
+<tr><td valign=top><img src="images/books/vanderLans.jpg"><td valign=top>
+<h2>The SQL Guide to SQLite (2009)</h2>
+
+<p>Author: Rick F. van der Lans<br>
+Publisher: Lulu.com<br>
+<a href="http://www.amazon.com/SQL-Guide-SQLite-Rick-Lans/dp/0557076765/ref=sr_1_3?ie=UTF8&s=books&qid=1256736387&sr=1-3">Amazon</a></p>
+
+<p>SQLite is a small, fast, embeddable, SQL-based database server.
+It is easy to install, needs no management, and is open source.
+This book describes SQLite in detail. With hundreds of examples, plus a
+proven approach and structure, the book teaches you how to use SQLite
+efficiently and effectively. It contains a complete description of the
+SQL dialect as implemented in SQLite version 3.6. The book can be seen
+as a tutorial and a reference book. Source code for the numerous SQL
+examples and exercises included in this book can be downloaded from www.r20.nl.
+</p>
+</table>
+
+<hr>
+<table border=0>
+<tr><td valign=top><img src="images/books/nishizawa2.jpg"><td valign=top>
+<h2>An Introduction to SQLite - 2nd Edition (2009)</h2>
+
+<p>Author: Naoki Nishizawa<br>
+Publisher: Shoeisha<br>
+<a href="http://www.amazon.co.jp/SQLite%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E8%A5%BF%E6%B2%A2-%E7%9B%B4%E6%9C%A8/dp/479811944X/ref=pd_sim_b_2">Amazon.jp</a></p>
+
+<p>This text is written in fluent Japanese specifically for a Japanese
+audience. This is the second edition of the book - the first edition
+was published in 2005.
+</p>
+</table>
+
+<hr>
+<table border=0><tr><td valign=top><p><img src="images/books/haldar.gif">
+<td valign=top>
+<h2>Inside SQLite (2007)</h2>
+
+<p>
+Author: Sibsankar Haldar<br>
+Publisher: O'Reilly Media<br>
+<a href="http://oreilly.com/catalog/9780596550066">O'Reilly</a></p>
+
+<p>SQLite is a small, zero-configuration, custom-tailored, embeddable,
+thread-safe, easily maintainable, transaction-oriented, SQL-based,
+relational database management system. There is no separate install or
+setup procedure to initialize SQLite before using it.
+There is no configuration file.
+SQLite is open source, and is available in the public domain
+(for more information on open source, visit http://opensource.org).
+You can download SQLite source code from its homepage http://www.sqlite.org,
+compile it using your favorite C compiler, and start using the compiled
+library. SQLite runs on Linux, Windows, Mac OS X, and a few other operating systems. It has been widely used in low-to-medium tier database applications.
+This Short Cut discusses design principles, engineering trade-offs,
+implementation issues, and operations of SQLite. It presents a
+comprehensive description of all important components of the SQLite engine.</p>
+</table>
+
+
+<hr>
+<table border=0><tr><td valign=top><img src="images/books/newman.jpg">
+<td valign=top>
+<h2>SQLite (2004)</h2>
+
+<p>Author: Chris Newman<br>
+Publisher: Sams<br>
+<a href="http://www.amazon.com/SQLite-Chris-Newman/dp/067232685X/ref=sr_1_2?ie=UTF8&s=books&qid=1256736664&sr=1-2">Amazon</a></p>
+
+<p>
+SQLite is a small, fast, embeddable database. What makes it popular is
+the combination of the database engine and interface into a single library
+as well as the ability to store all the data in a single file.
+Its functionality lies between MySQL and PostgreSQL, however it is faster
+than both databases.</p>
+
+<p>In <i>SQLite</i>,
+author Chris Newman provides a thorough, practical guide to
+using, administering and programming this up-and-coming database.
+If you want to learn about SQLite or about its use in conjunction with
+PHP this is the book for you.</p>
+</table>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/books.in?m=4fbe83576f6c58cb4">2019-09-28 19:02:24</a> UTC </small></i></p>
+
diff --git a/www/bytecodevtab.html b/www/bytecodevtab.html
new file mode 100644
index 0000000..3e3ca86
--- /dev/null
+++ b/www/bytecodevtab.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Bytecode() And Tables_Used() Table-Valued Functions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Bytecode() And Tables_Used() Table-Valued Functions
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+Bytecode and tables_used are <a href="vtab.html">virtual tables</a> built into SQLite that
+access information about <a href="c3ref/stmt.html">prepared statements</a>.
+Both bytecode and tables_used operate as <a href="vtab.html#tabfunc2">table-valued functions</a>.
+They take a single required argument which is either the text of
+an SQL statement, or a pointer to an existing prepared statement.
+The bytecode function returns one row of result for each <a href="opcode.html">bytecode</a>
+operation in the prepared statement. The tables_used function returns
+one row for each persistent btree (either a table or an index) accessed
+by the prepared statement.
+
+</p><h1 id="usage"><span>2. </span>Usage</h1>
+
+<p>
+The bytecode and tables_used tables are only available if SQLite has
+been compiled with the <a href="compile.html#enable_bytecode_vtab">-DSQLITE_ENABLE_BYTECODE_VTAB</a> compile-time option.
+The <a href="cli.html">CLI</a> has been compiled that way, and so you can use the standard
+<a href="cli.html">CLI</a> as a test platform to experiement.
+
+</p><p>
+Both virtual tables are read-only <a href="vtab.html#epoonlyvtab">eponymous-only virtual tables</a>. You use them
+by mentioning them directly in the FROM clause of a SELECT statement.
+They both require a single argument which is the SQL statement to be
+analyzed. For example:
+
+</p><div class="codeblock"><pre>SELECT * FROM bytecode('SELECT * FROM bytecode(?1)');
+</pre></div>
+
+<p>
+The argument can be either the text of an SQL statement, in which case
+the bytecode (or tables_used) for that statement is returned, or the
+argument can be a parameter such as ?1 or $stmt that is later bound
+to a <a href="c3ref/stmt.html">prepared statement</a> object using the
+<a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> interface. Use a pointer type of
+"stmt-pointer" for the <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> interface.
+
+</p><h2 id="schema"><span>2.1. </span>Schema</h2>
+
+<p>
+The schema of the bytecode table is:
+
+</p><div class="codeblock"><pre>CREATE TABLE bytecode(
+ addr INT,
+ opcode TEXT,
+ p1 INT,
+ p2 INT,
+ p3 INT,
+ p4 TEXT,
+ p5 INT,
+ comment TEXT,
+ subprog TEXT,
+ stmt HIDDEN
+);
+</pre></div>
+
+<p>
+The first eight columns are the address, opcode, and operands for a
+single <a href="opcode.html">bytecode</a> in the virtual machine that implements the statement.
+These columns are the same columns output when using EXPLAIN. The
+bytecode virtual tables shows all operations in the prepared statement,
+both the main body of the prepared statement and in subprograms used
+to implement triggers or foreign key actions. The "subprog" field
+is NULL for the main body of the prepared statement, or is the trigger
+name or the string "(FK)" for triggers and foreign key actions.
+
+</p><p>
+The schema for the tables_used table is:
+
+</p><div class="codeblock"><pre>CREATE TABLE tables_used(
+ type TEXT,
+ schema TEXT,
+ name TEXT,
+ wr INT,
+ subprog TEXT,
+ stmt HIDDEN
+);
+</pre></div>
+
+<p>
+The tables_used table is intended to show which btrees of the database file
+are read or written by a prepared statement, both by the main statement
+itself but also by related triggers and foreign key actions. The columns
+are as follows:
+
+</p><ul>
+<li><p><b>type</b> &rarr; Either "table" or "index", depending on what role
+the btree is serving.
+
+</p></li><li><p><b>schema</b> &rarr; Which database file the btree is located in.
+This will be "main" for the main database (the usual case), or "temp" for
+TEMP tables and indexes, or the name assigned to <a href="lang_attach.html">attached</a> databases by
+the <a href="lang_attach.html">ATTACH</a> statement.
+
+</p></li><li><p><b>name</b> &rarr; The name of the table or index
+
+</p></li><li><p><b>wr</b> &rarr; 0 if the object is read, 1 if the object is written
+
+</p></li><li><p><b>subprog</b> &rarr; The sub-program in which the object is
+accessed. NULL means the main body of the prepared statement. Otherwise
+this field is the name of a trigger or "(FK)" for a foreign key action.
+</p></li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/bytecodevtab.in?m=fe69f4a05c0a05c37">2020-05-20 17:42:32</a> UTC </small></i></p>
+
diff --git a/www/c3ref/aggregate_context.html b/www/c3ref/aggregate_context.html
new file mode 100644
index 0000000..8b296ea
--- /dev/null
+++ b/www/c3ref/aggregate_context.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Obtain Aggregate Function Context</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_aggregate_context -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Obtain Aggregate Function Context</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_aggregate_context(sqlite3_context*, int nBytes);
+</pre></blockquote>
+<p>
+Implementations of aggregate SQL functions use this
+routine to allocate memory for storing their state.</p>
+
+<p>The first time the sqlite3_aggregate_context(C,N) routine is called
+for a particular aggregate function, SQLite allocates
+N bytes of memory, zeroes out that memory, and returns a pointer
+to the new memory. On second and subsequent calls to
+sqlite3_aggregate_context() for the same aggregate function instance,
+the same buffer is returned. Sqlite3_aggregate_context() is normally
+called once for each invocation of the xStep callback and then one
+last time when the xFinal callback is invoked. When no rows match
+an aggregate query, the xStep() callback of the aggregate function
+implementation is never called and xFinal() is called exactly once.
+In those cases, sqlite3_aggregate_context() might be called for the
+first time from within xFinal().</p>
+
+<p>The sqlite3_aggregate_context(C,N) routine returns a NULL pointer
+when first called if N is less than or equal to zero or if a memory
+allocation error occurs.</p>
+
+<p>The amount of space allocated by sqlite3_aggregate_context(C,N) is
+determined by the N parameter on first successful call. Changing the
+value of N in any subsequent call to sqlite3_aggregate_context() within
+the same aggregate function instance will not resize the memory
+allocation. Within the xFinal callback, it is customary to set
+N=0 in calls to sqlite3_aggregate_context(C,N) so that no
+pointless memory allocations occur.</p>
+
+<p>SQLite automatically frees the memory allocated by
+sqlite3_aggregate_context() when the aggregate query concludes.</p>
+
+<p>The first parameter must be a copy of the
+<a href="../c3ref/context.html">SQL function context</a> that is the first parameter
+to the xStep or xFinal callback routine that implements the aggregate
+function.</p>
+
+<p>This routine must be called from the same thread in which
+the aggregate SQL function is running.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/aggregate_count.html b/www/c3ref/aggregate_count.html
new file mode 100644
index 0000000..c5d8321
--- /dev/null
+++ b/www/c3ref/aggregate_count.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Deprecated Functions</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_aggregate_count sqlite3_expired sqlite3_global_recover sqlite3_memory_alarm sqlite3_thread_cleanup sqlite3_transfer_bindings -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Deprecated Functions</h2>
+</div>
+<blockquote><pre>
+#ifndef SQLITE_OMIT_DEPRECATED
+int sqlite3_aggregate_count(sqlite3_context*);
+int sqlite3_expired(sqlite3_stmt*);
+int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*);
+int sqlite3_global_recover(void);
+void sqlite3_thread_cleanup(void);
+int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),
+ void*,sqlite3_int64);
+#endif
+</pre></blockquote>
+<p>
+These functions are <a href="../c3ref/experimental.html">deprecated</a>. In order to maintain
+backwards compatibility with older code, these functions continue
+to be supported. However, new applications should avoid
+the use of these functions. To encourage programmers to avoid
+these functions, we will not explain what they do.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/api_routines.html b/www/c3ref/api_routines.html
new file mode 100644
index 0000000..3eb6c53
--- /dev/null
+++ b/www/c3ref/api_routines.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Loadable Extension Thunk</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_api_routines -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Loadable Extension Thunk</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_api_routines sqlite3_api_routines;
+</pre></blockquote>
+<p>
+A pointer to the opaque sqlite3_api_routines structure is passed as
+the third parameter to entry points of <a href="../loadext.html">loadable extensions</a>. This
+structure must be typedefed in order to work around compiler warnings
+on some platforms.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/auto_extension.html b/www/c3ref/auto_extension.html
new file mode 100644
index 0000000..9eddf12
--- /dev/null
+++ b/www/c3ref/auto_extension.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Automatically Load Statically Linked Extensions</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_auto_extension -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Automatically Load Statically Linked Extensions</h2>
+</div>
+<blockquote><pre>
+int sqlite3_auto_extension(void(*xEntryPoint)(void));
+</pre></blockquote>
+<p>
+This interface causes the xEntryPoint() function to be invoked for
+each new <a href="../c3ref/sqlite3.html">database connection</a> that is created. The idea here is that
+xEntryPoint() is the entry point for a statically linked <a href="../loadext.html">SQLite extension</a>
+that is to be automatically loaded into all new database connections.</p>
+
+<p>Even though the function prototype shows that xEntryPoint() takes
+no arguments and returns void, SQLite invokes xEntryPoint() with three
+arguments and expects an integer result as if the signature of the
+entry point where as follows:</p>
+
+<p><blockquote><pre>
+&nbsp; int xEntryPoint(
+&nbsp; sqlite3 *db,
+&nbsp; const char **pzErrMsg,
+&nbsp; const struct sqlite3_api_routines *pThunk
+&nbsp; );
+</pre></blockquote></p>
+
+<p>If the xEntryPoint routine encounters an error, it should make *pzErrMsg
+point to an appropriate error message (obtained from <a href="../c3ref/mprintf.html">sqlite3_mprintf()</a>)
+and return an appropriate <a href="../rescode.html">error code</a>. SQLite ensures that *pzErrMsg
+is NULL before calling the xEntryPoint(). SQLite will invoke
+<a href="../c3ref/free.html">sqlite3_free()</a> on *pzErrMsg after xEntryPoint() returns. If any
+xEntryPoint() returns an error, the <a href="../c3ref/open.html">sqlite3_open()</a>, <a href="../c3ref/open.html">sqlite3_open16()</a>,
+or <a href="../c3ref/open.html">sqlite3_open_v2()</a> call that provoked the xEntryPoint() will fail.</p>
+
+<p>Calling sqlite3_auto_extension(X) with an entry point X that is already
+on the list of automatic extensions is a harmless no-op. No entry point
+will be called more than once for each database connection that is opened.</p>
+
+<p>See also: <a href="../c3ref/reset_auto_extension.html">sqlite3_reset_auto_extension()</a>
+and <a href="../c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension()</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/autovacuum_pages.html b/www/c3ref/autovacuum_pages.html
new file mode 100644
index 0000000..cba4622
--- /dev/null
+++ b/www/c3ref/autovacuum_pages.html
@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Autovacuum Compaction Amount Callback</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_autovacuum_pages -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Autovacuum Compaction Amount Callback</h2>
+</div>
+<blockquote><pre>
+int sqlite3_autovacuum_pages(
+ sqlite3 *db,
+ unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int),
+ void*,
+ void(*)(void*)
+);
+</pre></blockquote>
+<p>
+The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback
+function C that is invoked prior to each autovacuum of the database
+file. The callback is passed a copy of the generic data pointer (P),
+the schema-name of the attached database that is being autovacuumed,
+the size of the database file in pages, the number of free pages,
+and the number of bytes per page, respectively. The callback should
+return the number of free pages that should be removed by the
+autovacuum. If the callback returns zero, then no autovacuum happens.
+If the value returned is greater than or equal to the number of
+free pages, then a complete autovacuum happens.</p>
+
+<p><p>If there are multiple ATTACH-ed database files that are being
+modified as part of a transaction commit, then the autovacuum pages
+callback is invoked separately for each file.</p>
+
+<p><p><b>The callback is not reentrant.</b> The callback function should
+not attempt to invoke any other SQLite interface. If it does, bad
+things may happen, including segmentation faults and corrupt database
+files. The callback function should be a simple function that
+does some arithmetic on its input parameters and returns a result.</p>
+
+<p>The X parameter to sqlite3_autovacuum_pages(D,C,P,X) is an optional
+destructor for the P parameter. If X is not NULL, then X(P) is
+invoked whenever the database connection closes or when the callback
+is overwritten by another invocation of sqlite3_autovacuum_pages().</p>
+
+<p><p>There is only one autovacuum pages callback per database connection.
+Each call to the sqlite3_autovacuum_pages() interface overrides all
+previous invocations for that database connection. If the callback
+argument (C) to sqlite3_autovacuum_pages(D,C,P,X) is a NULL pointer,
+then the autovacuum steps callback is cancelled. The return value
+from sqlite3_autovacuum_pages() is normally SQLITE_OK, but might
+be some other error code if something goes wrong. The current
+implementation will only return SQLITE_OK or SQLITE_MISUSE, but other
+return codes might be added in future releases.</p>
+
+<p><p>If no autovacuum pages callback is specified (the usual case) or
+a NULL pointer is provided for the callback,
+then the default behavior is to vacuum all free pages. So, in other
+words, the default behavior is the same as if the callback function
+were something like this:</p>
+
+<p><blockquote><pre>
+&nbsp; unsigned int demonstration_autovac_pages_callback(
+&nbsp; void *pClientData,
+&nbsp; const char *zSchema,
+&nbsp; unsigned int nDbPage,
+&nbsp; unsigned int nFreePage,
+&nbsp; unsigned int nBytePerPage
+&nbsp; ){
+&nbsp; return nFreePage;
+&nbsp; }
+</pre></blockquote>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/backup.html b/www/c3ref/backup.html
new file mode 100644
index 0000000..db0120a
--- /dev/null
+++ b/www/c3ref/backup.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Online Backup Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_backup -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Online Backup Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_backup sqlite3_backup;
+</pre></blockquote>
+<p>
+The sqlite3_backup object records state information about an ongoing
+online backup operation. The sqlite3_backup object is created by
+a call to <a href="../c3ref/backup_finish.html#sqlite3backupinit">sqlite3_backup_init()</a> and is destroyed by a call to
+<a href="../c3ref/backup_finish.html#sqlite3backupfinish">sqlite3_backup_finish()</a>.</p>
+
+<p>See Also: <a href="../backup.html">Using the SQLite Online Backup API</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/backup_finish.html b/www/c3ref/backup_finish.html
new file mode 100644
index 0000000..1cdfe70
--- /dev/null
+++ b/www/c3ref/backup_finish.html
@@ -0,0 +1,327 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Online Backup API.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_backup_finish sqlite3_backup_init sqlite3_backup_pagecount sqlite3_backup_remaining sqlite3_backup_step -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Online Backup API.</h2>
+</div>
+<blockquote><pre>
+sqlite3_backup *sqlite3_backup_init(
+ sqlite3 *pDest, /* Destination database handle */
+ const char *zDestName, /* Destination database name */
+ sqlite3 *pSource, /* Source database handle */
+ const char *zSourceName /* Source database name */
+);
+int sqlite3_backup_step(sqlite3_backup *p, int nPage);
+int sqlite3_backup_finish(sqlite3_backup *p);
+int sqlite3_backup_remaining(sqlite3_backup *p);
+int sqlite3_backup_pagecount(sqlite3_backup *p);
+</pre></blockquote>
+<p>
+The backup API copies the content of one database into another.
+It is useful either for creating backups of databases or
+for copying in-memory databases to or from persistent files.</p>
+
+<p>See Also: <a href="../backup.html">Using the SQLite Online Backup API</a></p>
+
+<p>SQLite holds a write transaction open on the destination database file
+for the duration of the backup operation.
+The source database is read-locked only while it is being read;
+it is not locked continuously for the entire backup operation.
+Thus, the backup may be performed on a live source database without
+preventing other database connections from
+reading or writing to the source database while the backup is underway.</p>
+
+<p>To perform a backup operation:
+<ol>
+<li><b>sqlite3_backup_init()</b> is called once to initialize the
+backup,
+<li><b>sqlite3_backup_step()</b> is called one or more times to transfer
+the data between the two databases, and finally
+<li><b>sqlite3_backup_finish()</b> is called to release all resources
+associated with the backup operation.
+</ol>
+There should be exactly one call to sqlite3_backup_finish() for each
+successful call to sqlite3_backup_init().</p>
+
+<p><a name="sqlite3backupinit"></a>
+ <b>sqlite3_backup_init()</b></p>
+
+<p>The D and N arguments to sqlite3_backup_init(D,N,S,M) are the
+<a href="../c3ref/sqlite3.html">database connection</a> associated with the destination database
+and the database name, respectively.
+The database name is "main" for the main database, "temp" for the
+temporary database, or the name specified after the AS keyword in
+an <a href="../lang_attach.html">ATTACH</a> statement for an attached database.
+The S and M arguments passed to
+sqlite3_backup_init(D,N,S,M) identify the <a href="../c3ref/sqlite3.html">database connection</a>
+and database name of the source database, respectively.
+The source and destination <a href="../c3ref/sqlite3.html">database connections</a> (parameters S and D)
+must be different or else sqlite3_backup_init(D,N,S,M) will fail with
+an error.</p>
+
+<p>A call to sqlite3_backup_init() will fail, returning NULL, if
+there is already a read or read-write transaction open on the
+destination database.</p>
+
+<p>If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
+returned and an error code and error message are stored in the
+destination <a href="../c3ref/sqlite3.html">database connection</a> D.
+The error code and message for the failed call to sqlite3_backup_init()
+can be retrieved using the <a href="../c3ref/errcode.html">sqlite3_errcode()</a>, <a href="../c3ref/errcode.html">sqlite3_errmsg()</a>, and/or
+<a href="../c3ref/errcode.html">sqlite3_errmsg16()</a> functions.
+A successful call to sqlite3_backup_init() returns a pointer to an
+<a href="../c3ref/backup.html">sqlite3_backup</a> object.
+The <a href="../c3ref/backup.html">sqlite3_backup</a> object may be used with the sqlite3_backup_step() and
+sqlite3_backup_finish() functions to perform the specified backup
+operation.</p>
+
+<p><a name="sqlite3backupstep"></a>
+ <b>sqlite3_backup_step()</b></p>
+
+<p>Function sqlite3_backup_step(B,N) will copy up to N pages between
+the source and destination databases specified by <a href="../c3ref/backup.html">sqlite3_backup</a> object B.
+If N is negative, all remaining source pages are copied.
+If sqlite3_backup_step(B,N) successfully copies N pages and there
+are still more pages to be copied, then the function returns <a href="../rescode.html#ok">SQLITE_OK</a>.
+If sqlite3_backup_step(B,N) successfully finishes copying all pages
+from source to destination, then it returns <a href="../rescode.html#done">SQLITE_DONE</a>.
+If an error occurs while running sqlite3_backup_step(B,N),
+then an <a href="../rescode.html">error code</a> is returned. As well as <a href="../rescode.html#ok">SQLITE_OK</a> and
+<a href="../rescode.html#done">SQLITE_DONE</a>, a call to sqlite3_backup_step() may return <a href="../rescode.html#readonly">SQLITE_READONLY</a>,
+<a href="../rescode.html#nomem">SQLITE_NOMEM</a>, <a href="../rescode.html#busy">SQLITE_BUSY</a>, <a href="../rescode.html#locked">SQLITE_LOCKED</a>, or an
+<a href="../rescode.html#ioerr_access">SQLITE_IOERR_XXX</a> extended error code.</p>
+
+<p>The sqlite3_backup_step() might return <a href="../rescode.html#readonly">SQLITE_READONLY</a> if
+<ol>
+<li> the destination database was opened read-only, or
+<li> the destination database is using write-ahead-log journaling
+and the destination and source page sizes differ, or
+<li> the destination database is an in-memory database and the
+destination and source page sizes differ.
+</ol></p>
+
+<p>If sqlite3_backup_step() cannot obtain a required file-system lock, then
+the <a href="../c3ref/busy_handler.html">busy-handler function</a>
+is invoked (if one is specified). If the
+busy-handler returns non-zero before the lock is available, then
+<a href="../rescode.html#busy">SQLITE_BUSY</a> is returned to the caller. In this case the call to
+sqlite3_backup_step() can be retried later. If the source
+<a href="../c3ref/sqlite3.html">database connection</a>
+is being used to write to the source database when sqlite3_backup_step()
+is called, then <a href="../rescode.html#locked">SQLITE_LOCKED</a> is returned immediately. Again, in this
+case the call to sqlite3_backup_step() can be retried later on. If
+<a href="../rescode.html#ioerr_access">SQLITE_IOERR_XXX</a>, <a href="../rescode.html#nomem">SQLITE_NOMEM</a>, or
+<a href="../rescode.html#readonly">SQLITE_READONLY</a> is returned, then
+there is no point in retrying the call to sqlite3_backup_step(). These
+errors are considered fatal. The application must accept
+that the backup operation has failed and pass the backup operation handle
+to the sqlite3_backup_finish() to release associated resources.</p>
+
+<p>The first call to sqlite3_backup_step() obtains an exclusive lock
+on the destination file. The exclusive lock is not released until either
+sqlite3_backup_finish() is called or the backup operation is complete
+and sqlite3_backup_step() returns <a href="../rescode.html#done">SQLITE_DONE</a>. Every call to
+sqlite3_backup_step() obtains a <a href="../lockingv3.html#shared_lock">shared lock</a> on the source database that
+lasts for the duration of the sqlite3_backup_step() call.
+Because the source database is not locked between calls to
+sqlite3_backup_step(), the source database may be modified mid-way
+through the backup process. If the source database is modified by an
+external process or via a database connection other than the one being
+used by the backup operation, then the backup will be automatically
+restarted by the next call to sqlite3_backup_step(). If the source
+database is modified by the using the same database connection as is used
+by the backup operation, then the backup database is automatically
+updated at the same time.</p>
+
+<p><a name="sqlite3backupfinish"></a>
+ <b>sqlite3_backup_finish()</b></p>
+
+<p>When sqlite3_backup_step() has returned <a href="../rescode.html#done">SQLITE_DONE</a>, or when the
+application wishes to abandon the backup operation, the application
+should destroy the <a href="../c3ref/backup.html">sqlite3_backup</a> by passing it to sqlite3_backup_finish().
+The sqlite3_backup_finish() interfaces releases all
+resources associated with the <a href="../c3ref/backup.html">sqlite3_backup</a> object.
+If sqlite3_backup_step() has not yet returned <a href="../rescode.html#done">SQLITE_DONE</a>, then any
+active write-transaction on the destination database is rolled back.
+The <a href="../c3ref/backup.html">sqlite3_backup</a> object is invalid
+and may not be used following a call to sqlite3_backup_finish().</p>
+
+<p>The value returned by sqlite3_backup_finish is <a href="../rescode.html#ok">SQLITE_OK</a> if no
+sqlite3_backup_step() errors occurred, regardless or whether or not
+sqlite3_backup_step() completed.
+If an out-of-memory condition or IO error occurred during any prior
+sqlite3_backup_step() call on the same <a href="../c3ref/backup.html">sqlite3_backup</a> object, then
+sqlite3_backup_finish() returns the corresponding <a href="../rescode.html">error code</a>.</p>
+
+<p>A return of <a href="../rescode.html#busy">SQLITE_BUSY</a> or <a href="../rescode.html#locked">SQLITE_LOCKED</a> from sqlite3_backup_step()
+is not a permanent error and does not affect the return value of
+sqlite3_backup_finish().</p>
+
+<p><a name="sqlite3backupremaining"></a>
+ <a name="sqlite3backuppagecount"></a>
+
+<b>sqlite3_backup_remaining() and sqlite3_backup_pagecount()</b></p>
+
+<p>The sqlite3_backup_remaining() routine returns the number of pages still
+to be backed up at the conclusion of the most recent sqlite3_backup_step().
+The sqlite3_backup_pagecount() routine returns the total number of pages
+in the source database at the conclusion of the most recent
+sqlite3_backup_step().
+The values returned by these functions are only updated by
+sqlite3_backup_step(). If the source database is modified in a way that
+changes the size of the source database or the number of pages remaining,
+those changes are not reflected in the output of sqlite3_backup_pagecount()
+and sqlite3_backup_remaining() until after the next
+sqlite3_backup_step().</p>
+
+<p><b>Concurrent Usage of Database Handles</b></p>
+
+<p>The source <a href="../c3ref/sqlite3.html">database connection</a> may be used by the application for other
+purposes while a backup operation is underway or being initialized.
+If SQLite is compiled and configured to support threadsafe database
+connections, then the source database connection may be used concurrently
+from within other threads.</p>
+
+<p>However, the application must guarantee that the destination
+<a href="../c3ref/sqlite3.html">database connection</a> is not passed to any other API (by any thread) after
+sqlite3_backup_init() is called and before the corresponding call to
+sqlite3_backup_finish(). SQLite does not currently check to see
+if the application incorrectly accesses the destination <a href="../c3ref/sqlite3.html">database connection</a>
+and so no error code is reported, but the operations may malfunction
+nevertheless. Use of the destination database connection while a
+backup is in progress might also cause a mutex deadlock.</p>
+
+<p>If running in <a href="../sharedcache.html">shared cache mode</a>, the application must
+guarantee that the shared cache used by the destination database
+is not accessed while the backup is running. In practice this means
+that the application must guarantee that the disk file being
+backed up to is not accessed by any connection within the process,
+not just the specific connection that was passed to sqlite3_backup_init().</p>
+
+<p>The <a href="../c3ref/backup.html">sqlite3_backup</a> object itself is partially threadsafe. Multiple
+threads may safely make multiple concurrent calls to sqlite3_backup_step().
+However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount()
+APIs are not strictly speaking threadsafe. If they are invoked at the
+same time as another thread is invoking sqlite3_backup_step() it is
+possible that they return invalid values.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/bind_blob.html b/www/c3ref/bind_blob.html
new file mode 100644
index 0000000..5c4eea1
--- /dev/null
+++ b/www/c3ref/bind_blob.html
@@ -0,0 +1,279 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Binding Values To Prepared Statements</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {SQL parameter} {SQL parameters} {host parameter} {host parameter name} {host parameters} {parameter binding} sqlite3_bind_blob sqlite3_bind_blob64 sqlite3_bind_double sqlite3_bind_int sqlite3_bind_int64 sqlite3_bind_null sqlite3_bind_pointer sqlite3_bind_text sqlite3_bind_text16 sqlite3_bind_text64 sqlite3_bind_value sqlite3_bind_zeroblob sqlite3_bind_zeroblob64 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Binding Values To Prepared Statements</h2>
+</div>
+<blockquote><pre>
+int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
+int sqlite3_bind_blob64(sqlite3_stmt*, int, const void*, sqlite3_uint64,
+ void(*)(void*));
+int sqlite3_bind_double(sqlite3_stmt*, int, double);
+int sqlite3_bind_int(sqlite3_stmt*, int, int);
+int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
+int sqlite3_bind_null(sqlite3_stmt*, int);
+int sqlite3_bind_text(sqlite3_stmt*,int,const char*,int,void(*)(void*));
+int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
+int sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64,
+ void(*)(void*), unsigned char encoding);
+int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
+int sqlite3_bind_pointer(sqlite3_stmt*, int, void*, const char*,void(*)(void*));
+int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
+int sqlite3_bind_zeroblob64(sqlite3_stmt*, int, sqlite3_uint64);
+</pre></blockquote>
+<p>
+In the SQL statement text input to <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> and its variants,
+literals may be replaced by a <a href="../lang_expr.html#varparam">parameter</a> that matches one of following
+templates:</p>
+
+<p><ul>
+<li> ?
+<li> ?NNN
+<li> :VVV
+<li> @VVV
+<li> $VVV
+</ul></p>
+
+<p>In the templates above, NNN represents an integer literal,
+and VVV represents an alphanumeric identifier. The values of these
+parameters (also called "host parameter names" or "SQL parameters")
+can be set using the sqlite3_bind_*() routines defined here.</p>
+
+<p>The first argument to the sqlite3_bind_*() routines is always
+a pointer to the <a href="../c3ref/stmt.html">sqlite3_stmt</a> object returned from
+<a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> or its variants.</p>
+
+<p>The second argument is the index of the SQL parameter to be set.
+The leftmost SQL parameter has an index of 1. When the same named
+SQL parameter is used more than once, second and subsequent
+occurrences have the same index as the first occurrence.
+The index for named parameters can be looked up using the
+<a href="../c3ref/bind_parameter_index.html">sqlite3_bind_parameter_index()</a> API if desired. The index
+for "?NNN" parameters is the value of NNN.
+The NNN value must be between 1 and the <a href="../c3ref/limit.html">sqlite3_limit()</a>
+parameter <a href="../c3ref/c_limit_attached.html#sqlitelimitvariablenumber">SQLITE_LIMIT_VARIABLE_NUMBER</a> (default value: 32766).</p>
+
+<p>The third argument is the value to bind to the parameter.
+If the third parameter to sqlite3_bind_text() or sqlite3_bind_text16()
+or sqlite3_bind_blob() is a NULL pointer then the fourth parameter
+is ignored and the end result is the same as sqlite3_bind_null().
+If the third parameter to sqlite3_bind_text() is not NULL, then
+it should be a pointer to well-formed UTF8 text.
+If the third parameter to sqlite3_bind_text16() is not NULL, then
+it should be a pointer to well-formed UTF16 text.
+If the third parameter to sqlite3_bind_text64() is not NULL, then
+it should be a pointer to a well-formed unicode string that is
+either UTF8 if the sixth parameter is SQLITE_UTF8, or UTF16
+otherwise.</p>
+
+<p><a name="byteorderdeterminationrules"></a>
+ The byte-order of
+UTF16 input text is determined by the byte-order mark (BOM, U+FEFF)
+found in first character, which is removed, or in the absence of a BOM
+the byte order is the native byte order of the host
+machine for sqlite3_bind_text16() or the byte order specified in
+the 6th parameter for sqlite3_bind_text64().
+If UTF16 input text contains invalid unicode
+characters, then SQLite might change those invalid characters
+into the unicode replacement character: U+FFFD.</p>
+
+<p>In those routines that have a fourth argument, its value is the
+number of bytes in the parameter. To be clear: the value is the
+number of <u>bytes</u> in the value, not the number of characters.
+If the fourth parameter to sqlite3_bind_text() or sqlite3_bind_text16()
+is negative, then the length of the string is
+the number of bytes up to the first zero terminator.
+If the fourth parameter to sqlite3_bind_blob() is negative, then
+the behavior is undefined.
+If a non-negative fourth parameter is provided to sqlite3_bind_text()
+or sqlite3_bind_text16() or sqlite3_bind_text64() then
+that parameter must be the byte offset
+where the NUL terminator would occur assuming the string were NUL
+terminated. If any NUL characters occurs at byte offsets less than
+the value of the fourth parameter then the resulting string value will
+contain embedded NULs. The result of expressions involving strings
+with embedded NULs is undefined.</p>
+
+<p>The fifth argument to the BLOB and string binding interfaces controls
+or indicates the lifetime of the object referenced by the third parameter.
+These three options exist:
+ (1) A destructor to dispose of the BLOB or string after SQLite has finished
+with it may be passed. It is called to dispose of the BLOB or string even
+if the call to the bind API fails, except the destructor is not called if
+the third parameter is a NULL pointer or the fourth parameter is negative.
+ (2) The special constant, <a href="../c3ref/c_static.html">SQLITE_STATIC</a>, may be passsed to indicate that
+the application remains responsible for disposing of the object. In this
+case, the object and the provided pointer to it must remain valid until
+either the prepared statement is finalized or the same SQL parameter is
+bound to something else, whichever occurs sooner.
+ (3) The constant, <a href="../c3ref/c_static.html">SQLITE_TRANSIENT</a>, may be passed to indicate that the
+object is to be copied prior to the return from sqlite3_bind_*(). The
+object and pointer to it must remain valid until then. SQLite will then
+manage the lifetime of its private copy.</p>
+
+<p>The sixth argument to sqlite3_bind_text64() must be one of
+<a href="../c3ref/c_any.html">SQLITE_UTF8</a>, <a href="../c3ref/c_any.html">SQLITE_UTF16</a>, <a href="../c3ref/c_any.html">SQLITE_UTF16BE</a>, or <a href="../c3ref/c_any.html">SQLITE_UTF16LE</a>
+to specify the encoding of the text in the third parameter. If
+the sixth argument to sqlite3_bind_text64() is not one of the
+allowed values shown above, or if the text encoding is different
+from the encoding specified by the sixth parameter, then the behavior
+is undefined.</p>
+
+<p>The sqlite3_bind_zeroblob() routine binds a BLOB of length N that
+is filled with zeroes. A zeroblob uses a fixed amount of memory
+(just an integer to hold its size) while it is being processed.
+Zeroblobs are intended to serve as placeholders for BLOBs whose
+content is later written using
+<a href="../c3ref/blob_open.html">incremental BLOB I/O</a> routines.
+A negative value for the zeroblob results in a zero-length BLOB.</p>
+
+<p>The sqlite3_bind_pointer(S,I,P,T,D) routine causes the I-th parameter in
+<a href="../c3ref/stmt.html">prepared statement</a> S to have an SQL value of NULL, but to also be
+associated with the pointer P of type T. D is either a NULL pointer or
+a pointer to a destructor function for P. SQLite will invoke the
+destructor D with a single argument of P when it is finished using
+P. The T parameter should be a static string, preferably a string
+literal. The sqlite3_bind_pointer() routine is part of the
+<a href="../bindptr.html">pointer passing interface</a> added for SQLite 3.20.0.</p>
+
+<p>If any of the sqlite3_bind_*() routines are called with a NULL pointer
+for the <a href="../c3ref/stmt.html">prepared statement</a> or with a prepared statement for which
+<a href="../c3ref/step.html">sqlite3_step()</a> has been called more recently than <a href="../c3ref/reset.html">sqlite3_reset()</a>,
+then the call will return <a href="../rescode.html#misuse">SQLITE_MISUSE</a>. If any sqlite3_bind_()
+routine is passed a <a href="../c3ref/stmt.html">prepared statement</a> that has been finalized, the
+result is undefined and probably harmful.</p>
+
+<p>Bindings are not cleared by the <a href="../c3ref/reset.html">sqlite3_reset()</a> routine.
+Unbound parameters are interpreted as NULL.</p>
+
+<p>The sqlite3_bind_* routines return <a href="../rescode.html#ok">SQLITE_OK</a> on success or an
+<a href="../rescode.html">error code</a> if anything goes wrong.
+<a href="../rescode.html#toobig">SQLITE_TOOBIG</a> might be returned if the size of a string or BLOB
+exceeds limits imposed by <a href="../c3ref/limit.html">sqlite3_limit</a>(<a href="../c3ref/c_limit_attached.html#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a>) or
+<a href="../limits.html#max_length">SQLITE_MAX_LENGTH</a>.
+<a href="../rescode.html#range">SQLITE_RANGE</a> is returned if the parameter
+index is out of range. <a href="../rescode.html#nomem">SQLITE_NOMEM</a> is returned if malloc() fails.</p>
+
+<p>See also: <a href="../c3ref/bind_parameter_count.html">sqlite3_bind_parameter_count()</a>,
+<a href="../c3ref/bind_parameter_name.html">sqlite3_bind_parameter_name()</a>, and <a href="../c3ref/bind_parameter_index.html">sqlite3_bind_parameter_index()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/bind_parameter_count.html b/www/c3ref/bind_parameter_count.html
new file mode 100644
index 0000000..aeb8dba
--- /dev/null
+++ b/www/c3ref/bind_parameter_count.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Number Of SQL Parameters</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_bind_parameter_count -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Number Of SQL Parameters</h2>
+</div>
+<blockquote><pre>
+int sqlite3_bind_parameter_count(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+This routine can be used to find the number of <a href="../c3ref/bind_blob.html">SQL parameters</a>
+in a <a href="../c3ref/stmt.html">prepared statement</a>. SQL parameters are tokens of the
+form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as
+placeholders for values that are <a href="../c3ref/bind_blob.html">bound</a>
+to the parameters at a later time.</p>
+
+<p>This routine actually returns the index of the largest (rightmost)
+parameter. For all forms except ?NNN, this will correspond to the
+number of unique parameters. If parameters of the ?NNN form are used,
+there may be gaps in the list.</p>
+
+<p>See also: <a href="../c3ref/bind_blob.html">sqlite3_bind()</a>,
+<a href="../c3ref/bind_parameter_name.html">sqlite3_bind_parameter_name()</a>, and
+<a href="../c3ref/bind_parameter_index.html">sqlite3_bind_parameter_index()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/bind_parameter_index.html b/www/c3ref/bind_parameter_index.html
new file mode 100644
index 0000000..e8fcadf
--- /dev/null
+++ b/www/c3ref/bind_parameter_index.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Index Of A Parameter With A Given Name</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_bind_parameter_index -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Index Of A Parameter With A Given Name</h2>
+</div>
+<blockquote><pre>
+int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName);
+</pre></blockquote>
+<p>
+Return the index of an SQL parameter given its name. The
+index value returned is suitable for use as the second
+parameter to <a href="../c3ref/bind_blob.html">sqlite3_bind()</a>. A zero
+is returned if no matching parameter is found. The parameter
+name must be given in UTF-8 even if the original statement
+was prepared from UTF-16 text using <a href="../c3ref/prepare.html">sqlite3_prepare16_v2()</a> or
+<a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a>.</p>
+
+<p>See also: <a href="../c3ref/bind_blob.html">sqlite3_bind()</a>,
+<a href="../c3ref/bind_parameter_count.html">sqlite3_bind_parameter_count()</a>, and
+<a href="../c3ref/bind_parameter_name.html">sqlite3_bind_parameter_name()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/bind_parameter_name.html b/www/c3ref/bind_parameter_name.html
new file mode 100644
index 0000000..8490871
--- /dev/null
+++ b/www/c3ref/bind_parameter_name.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Name Of A Host Parameter</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_bind_parameter_name -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Name Of A Host Parameter</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int);
+</pre></blockquote>
+<p>
+The sqlite3_bind_parameter_name(P,N) interface returns
+the name of the N-th <a href="../c3ref/bind_blob.html">SQL parameter</a> in the <a href="../c3ref/stmt.html">prepared statement</a> P.
+SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA"
+have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA"
+respectively.
+In other words, the initial ":" or "$" or "@" or "?"
+is included as part of the name.
+Parameters of the form "?" without a following integer have no name
+and are referred to as "nameless" or "anonymous parameters".</p>
+
+<p>The first host parameter has an index of 1, not 0.</p>
+
+<p>If the value N is out of range or if the N-th parameter is
+nameless, then NULL is returned. The returned string is
+always in UTF-8 encoding even if the named parameter was
+originally specified as UTF-16 in <a href="../c3ref/prepare.html">sqlite3_prepare16()</a>,
+<a href="../c3ref/prepare.html">sqlite3_prepare16_v2()</a>, or <a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a>.</p>
+
+<p>See also: <a href="../c3ref/bind_blob.html">sqlite3_bind()</a>,
+<a href="../c3ref/bind_parameter_count.html">sqlite3_bind_parameter_count()</a>, and
+<a href="../c3ref/bind_parameter_index.html">sqlite3_bind_parameter_index()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/blob.html b/www/c3ref/blob.html
new file mode 100644
index 0000000..9731710
--- /dev/null
+++ b/www/c3ref/blob.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>A Handle To An Open BLOB</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {BLOB handle} {BLOB handles} sqlite3_blob -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>A Handle To An Open BLOB</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_blob sqlite3_blob;
+</pre></blockquote>
+<p>
+An instance of this object represents an open BLOB on which
+<a href="../c3ref/blob_open.html">incremental BLOB I/O</a> can be performed.
+Objects of this type are created by <a href="../c3ref/blob_open.html">sqlite3_blob_open()</a>
+and destroyed by <a href="../c3ref/blob_close.html">sqlite3_blob_close()</a>.
+The <a href="../c3ref/blob_read.html">sqlite3_blob_read()</a> and <a href="../c3ref/blob_write.html">sqlite3_blob_write()</a> interfaces
+can be used to read or write small subsections of the BLOB.
+The <a href="../c3ref/blob_bytes.html">sqlite3_blob_bytes()</a> interface returns the size of the BLOB in bytes.
+</p><p>1 Constructor: <a href="../c3ref/blob_open.html">sqlite3_blob_open()</a></p>
+<p>1 Destructor: <a href="../c3ref/blob_close.html">sqlite3_blob_close()</a></p>
+<p>4 Methods:
+ <a href="../c3ref/blob_bytes.html">sqlite3_blob_bytes()</a>,
+<a href="../c3ref/blob_read.html">sqlite3_blob_read()</a>,
+<a href="../c3ref/blob_reopen.html">sqlite3_blob_reopen()</a>,
+<a href="../c3ref/blob_write.html">sqlite3_blob_write()</a></p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/blob_bytes.html b/www/c3ref/blob_bytes.html
new file mode 100644
index 0000000..7eda378
--- /dev/null
+++ b/www/c3ref/blob_bytes.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Return The Size Of An Open BLOB</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_blob_bytes -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Return The Size Of An Open BLOB</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_bytes(sqlite3_blob *);
+</pre></blockquote>
+<p>
+Returns the size in bytes of the BLOB accessible via the
+successfully opened <a href="../c3ref/blob.html">BLOB handle</a> in its only argument. The
+incremental blob I/O routines can only read or overwriting existing
+blob content; they cannot change the size of a blob.</p>
+
+<p>This routine only works on a <a href="../c3ref/blob.html">BLOB handle</a> which has been created
+by a prior successful call to <a href="../c3ref/blob_open.html">sqlite3_blob_open()</a> and which has not
+been closed by <a href="../c3ref/blob_close.html">sqlite3_blob_close()</a>. Passing any other pointer in
+to this routine results in undefined and probably undesirable behavior.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/blob_close.html b/www/c3ref/blob_close.html
new file mode 100644
index 0000000..e6d7d48
--- /dev/null
+++ b/www/c3ref/blob_close.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Close A BLOB Handle</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_blob_close -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Close A BLOB Handle</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_close(sqlite3_blob *);
+</pre></blockquote>
+<p>
+This function closes an open <a href="../c3ref/blob.html">BLOB handle</a>. The BLOB handle is closed
+unconditionally. Even if this routine returns an error code, the
+handle is still closed.</p>
+
+<p>If the blob handle being closed was opened for read-write access, and if
+the database is in auto-commit mode and there are no other open read-write
+blob handles or active write statements, the current transaction is
+committed. If an error occurs while committing the transaction, an error
+code is returned and the transaction rolled back.</p>
+
+<p>Calling this function with an argument that is not a NULL pointer or an
+open blob handle results in undefined behaviour. Calling this routine
+with a null pointer (such as would be returned by a failed call to
+<a href="../c3ref/blob_open.html">sqlite3_blob_open()</a>) is a harmless no-op. Otherwise, if this function
+is passed a valid open blob handle, the values returned by the
+sqlite3_errcode() and sqlite3_errmsg() functions are set before returning.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/blob_open.html b/www/c3ref/blob_open.html
new file mode 100644
index 0000000..06700d3
--- /dev/null
+++ b/www/c3ref/blob_open.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Open A BLOB For Incremental I/O</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_blob_open -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Open A BLOB For Incremental I/O</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_open(
+ sqlite3*,
+ const char *zDb,
+ const char *zTable,
+ const char *zColumn,
+ sqlite3_int64 iRow,
+ int flags,
+ sqlite3_blob **ppBlob
+);
+</pre></blockquote>
+<p>
+This interfaces opens a <a href="../c3ref/blob.html">handle</a> to the BLOB located
+in row iRow, column zColumn, table zTable in database zDb;
+in other words, the same BLOB that would be selected by:</p>
+
+<p><pre>
+SELECT zColumn FROM zDb.zTable WHERE <a href="../lang_createtable.html#rowid">rowid</a> = iRow;
+</pre></p>
+
+<p>Parameter zDb is not the filename that contains the database, but
+rather the symbolic name of the database. For attached databases, this is
+the name that appears after the AS keyword in the <a href="../lang_attach.html">ATTACH</a> statement.
+For the main database file, the database name is "main". For TEMP
+tables, the database name is "temp".</p>
+
+<p>If the flags parameter is non-zero, then the BLOB is opened for read
+and write access. If the flags parameter is zero, the BLOB is opened for
+read-only access.</p>
+
+<p>On success, <a href="../rescode.html#ok">SQLITE_OK</a> is returned and the new <a href="../c3ref/blob.html">BLOB handle</a> is stored
+in *ppBlob. Otherwise an <a href="../rescode.html">error code</a> is returned and, unless the error
+code is SQLITE_MISUSE, *ppBlob is set to NULL. This means that, provided
+the API is not misused, it is always safe to call <a href="../c3ref/blob_close.html">sqlite3_blob_close()</a>
+on *ppBlob after this function it returns.</p>
+
+<p>This function fails with SQLITE_ERROR if any of the following are true:
+<ul>
+<li> Database zDb does not exist,
+<li> Table zTable does not exist within database zDb,
+<li> Table zTable is a WITHOUT ROWID table,
+<li> Column zColumn does not exist,
+<li> Row iRow is not present in the table,
+<li> The specified column of row iRow contains a value that is not
+a TEXT or BLOB value,
+<li> Column zColumn is part of an index, PRIMARY KEY or UNIQUE
+constraint and the blob is being opened for read/write access,
+<li> <a href="../foreignkeys.html">Foreign key constraints</a> are enabled,
+column zColumn is part of a <a href="../foreignkeys.html#parentchild">child key</a> definition and the blob is
+being opened for read/write access.
+</ul></p>
+
+<p>Unless it returns SQLITE_MISUSE, this function sets the
+<a href="../c3ref/sqlite3.html">database connection</a> error code and message accessible via
+<a href="../c3ref/errcode.html">sqlite3_errcode()</a> and <a href="../c3ref/errcode.html">sqlite3_errmsg()</a> and related functions.</p>
+
+<p>A BLOB referenced by sqlite3_blob_open() may be read using the
+<a href="../c3ref/blob_read.html">sqlite3_blob_read()</a> interface and modified by using
+<a href="../c3ref/blob_write.html">sqlite3_blob_write()</a>. The <a href="../c3ref/blob.html">BLOB handle</a> can be moved to a
+different row of the same table using the <a href="../c3ref/blob_reopen.html">sqlite3_blob_reopen()</a>
+interface. However, the column, table, or database of a <a href="../c3ref/blob.html">BLOB handle</a>
+cannot be changed after the <a href="../c3ref/blob.html">BLOB handle</a> is opened.</p>
+
+<p>If the row that a BLOB handle points to is modified by an
+<a href="../lang_update.html">UPDATE</a>, <a href="../lang_delete.html">DELETE</a>, or by <a href="../lang_conflict.html">ON CONFLICT</a> side-effects
+then the BLOB handle is marked as "expired".
+This is true if any column of the row is changed, even a column
+other than the one the BLOB handle is open on.
+Calls to <a href="../c3ref/blob_read.html">sqlite3_blob_read()</a> and <a href="../c3ref/blob_write.html">sqlite3_blob_write()</a> for
+an expired BLOB handle fail with a return code of <a href="../rescode.html#abort">SQLITE_ABORT</a>.
+Changes written into a BLOB prior to the BLOB expiring are not
+rolled back by the expiration of the BLOB. Such changes will eventually
+commit if the transaction continues to completion.</p>
+
+<p>Use the <a href="../c3ref/blob_bytes.html">sqlite3_blob_bytes()</a> interface to determine the size of
+the opened blob. The size of a blob may not be changed by this
+interface. Use the <a href="../lang_update.html">UPDATE</a> SQL command to change the size of a
+blob.</p>
+
+<p>The <a href="../c3ref/bind_blob.html">sqlite3_bind_zeroblob()</a> and <a href="../c3ref/result_blob.html">sqlite3_result_zeroblob()</a> interfaces
+and the built-in <a href="../lang_corefunc.html#zeroblob">zeroblob</a> SQL function may be used to create a
+zero-filled blob to read or write using the incremental-blob interface.</p>
+
+<p>To avoid a resource leak, every open <a href="../c3ref/blob.html">BLOB handle</a> should eventually
+be released by a call to <a href="../c3ref/blob_close.html">sqlite3_blob_close()</a>.</p>
+
+<p>See also: <a href="../c3ref/blob_close.html">sqlite3_blob_close()</a>,
+<a href="../c3ref/blob_reopen.html">sqlite3_blob_reopen()</a>, <a href="../c3ref/blob_read.html">sqlite3_blob_read()</a>,
+<a href="../c3ref/blob_bytes.html">sqlite3_blob_bytes()</a>, <a href="../c3ref/blob_write.html">sqlite3_blob_write()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/blob_read.html b/www/c3ref/blob_read.html
new file mode 100644
index 0000000..932afdd
--- /dev/null
+++ b/www/c3ref/blob_read.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Read Data From A BLOB Incrementally</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_blob_read -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Read Data From A BLOB Incrementally</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
+</pre></blockquote>
+<p>
+This function is used to read data from an open <a href="../c3ref/blob.html">BLOB handle</a> into a
+caller-supplied buffer. N bytes of data are copied into buffer Z
+from the open BLOB, starting at offset iOffset.</p>
+
+<p>If offset iOffset is less than N bytes from the end of the BLOB,
+<a href="../rescode.html#error">SQLITE_ERROR</a> is returned and no data is read. If N or iOffset is
+less than zero, <a href="../rescode.html#error">SQLITE_ERROR</a> is returned and no data is read.
+The size of the blob (and hence the maximum value of N+iOffset)
+can be determined using the <a href="../c3ref/blob_bytes.html">sqlite3_blob_bytes()</a> interface.</p>
+
+<p>An attempt to read from an expired <a href="../c3ref/blob.html">BLOB handle</a> fails with an
+error code of <a href="../rescode.html#abort">SQLITE_ABORT</a>.</p>
+
+<p>On success, sqlite3_blob_read() returns SQLITE_OK.
+Otherwise, an <a href="../rescode.html">error code</a> or an <a href="../rescode.html#extrc">extended error code</a> is returned.</p>
+
+<p>This routine only works on a <a href="../c3ref/blob.html">BLOB handle</a> which has been created
+by a prior successful call to <a href="../c3ref/blob_open.html">sqlite3_blob_open()</a> and which has not
+been closed by <a href="../c3ref/blob_close.html">sqlite3_blob_close()</a>. Passing any other pointer in
+to this routine results in undefined and probably undesirable behavior.</p>
+
+<p>See also: <a href="../c3ref/blob_write.html">sqlite3_blob_write()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/blob_reopen.html b/www/c3ref/blob_reopen.html
new file mode 100644
index 0000000..b818d00
--- /dev/null
+++ b/www/c3ref/blob_reopen.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Move a BLOB Handle to a New Row</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_blob_reopen -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Move a BLOB Handle to a New Row</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
+</pre></blockquote>
+<p>
+This function is used to move an existing <a href="../c3ref/blob.html">BLOB handle</a> so that it points
+to a different row of the same database table. The new row is identified
+by the rowid value passed as the second argument. Only the row can be
+changed. The database, table and column on which the blob handle is open
+remain the same. Moving an existing <a href="../c3ref/blob.html">BLOB handle</a> to a new row is
+faster than closing the existing handle and opening a new one.</p>
+
+<p>The new row must meet the same criteria as for <a href="../c3ref/blob_open.html">sqlite3_blob_open()</a> -
+it must exist and there must be either a blob or text value stored in
+the nominated column. If the new row is not present in the table, or if
+it does not contain a blob or text value, or if another error occurs, an
+SQLite error code is returned and the blob handle is considered aborted.
+All subsequent calls to <a href="../c3ref/blob_read.html">sqlite3_blob_read()</a>, <a href="../c3ref/blob_write.html">sqlite3_blob_write()</a> or
+<a href="../c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> on an aborted blob handle immediately return
+SQLITE_ABORT. Calling <a href="../c3ref/blob_bytes.html">sqlite3_blob_bytes()</a> on an aborted blob handle
+always returns zero.</p>
+
+<p>This function sets the database handle error code and message.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/blob_write.html b/www/c3ref/blob_write.html
new file mode 100644
index 0000000..728897f
--- /dev/null
+++ b/www/c3ref/blob_write.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Write Data Into A BLOB Incrementally</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_blob_write -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Write Data Into A BLOB Incrementally</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset);
+</pre></blockquote>
+<p>
+This function is used to write data into an open <a href="../c3ref/blob.html">BLOB handle</a> from a
+caller-supplied buffer. N bytes of data are copied from the buffer Z
+into the open BLOB, starting at offset iOffset.</p>
+
+<p>On success, sqlite3_blob_write() returns SQLITE_OK.
+Otherwise, an <a href="../rescode.html">error code</a> or an <a href="../rescode.html#extrc">extended error code</a> is returned.
+Unless SQLITE_MISUSE is returned, this function sets the
+<a href="../c3ref/sqlite3.html">database connection</a> error code and message accessible via
+<a href="../c3ref/errcode.html">sqlite3_errcode()</a> and <a href="../c3ref/errcode.html">sqlite3_errmsg()</a> and related functions.</p>
+
+<p>If the <a href="../c3ref/blob.html">BLOB handle</a> passed as the first argument was not opened for
+writing (the flags parameter to <a href="../c3ref/blob_open.html">sqlite3_blob_open()</a> was zero),
+this function returns <a href="../rescode.html#readonly">SQLITE_READONLY</a>.</p>
+
+<p>This function may only modify the contents of the BLOB; it is
+not possible to increase the size of a BLOB using this API.
+If offset iOffset is less than N bytes from the end of the BLOB,
+<a href="../rescode.html#error">SQLITE_ERROR</a> is returned and no data is written. The size of the
+BLOB (and hence the maximum value of N+iOffset) can be determined
+using the <a href="../c3ref/blob_bytes.html">sqlite3_blob_bytes()</a> interface. If N or iOffset are less
+than zero <a href="../rescode.html#error">SQLITE_ERROR</a> is returned and no data is written.</p>
+
+<p>An attempt to write to an expired <a href="../c3ref/blob.html">BLOB handle</a> fails with an
+error code of <a href="../rescode.html#abort">SQLITE_ABORT</a>. Writes to the BLOB that occurred
+before the <a href="../c3ref/blob.html">BLOB handle</a> expired are not rolled back by the
+expiration of the handle, though of course those changes might
+have been overwritten by the statement that expired the BLOB handle
+or by other independent statements.</p>
+
+<p>This routine only works on a <a href="../c3ref/blob.html">BLOB handle</a> which has been created
+by a prior successful call to <a href="../c3ref/blob_open.html">sqlite3_blob_open()</a> and which has not
+been closed by <a href="../c3ref/blob_close.html">sqlite3_blob_close()</a>. Passing any other pointer in
+to this routine results in undefined and probably undesirable behavior.</p>
+
+<p>See also: <a href="../c3ref/blob_read.html">sqlite3_blob_read()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/busy_handler.html b/www/c3ref/busy_handler.html
new file mode 100644
index 0000000..7adcc6f
--- /dev/null
+++ b/www/c3ref/busy_handler.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Register A Callback To Handle SQLITE_BUSY Errors</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {busy handler} {busy-handler callback} sqlite3_busy_handler -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Register A Callback To Handle SQLITE_BUSY Errors</h2>
+</div>
+<blockquote><pre>
+int sqlite3_busy_handler(sqlite3*,int(*)(void*,int),void*);
+</pre></blockquote>
+<p>
+The sqlite3_busy_handler(D,X,P) routine sets a callback function X
+that might be invoked with argument P whenever
+an attempt is made to access a database table associated with
+<a href="../c3ref/sqlite3.html">database connection</a> D when another thread
+or process has the table locked.
+The sqlite3_busy_handler() interface is used to implement
+<a href="../c3ref/busy_timeout.html">sqlite3_busy_timeout()</a> and <a href="../pragma.html#pragma_busy_timeout">PRAGMA busy_timeout</a>.</p>
+
+<p>If the busy callback is NULL, then <a href="../rescode.html#busy">SQLITE_BUSY</a>
+is returned immediately upon encountering the lock. If the busy callback
+is not NULL, then the callback might be invoked with two arguments.</p>
+
+<p>The first argument to the busy handler is a copy of the void* pointer which
+is the third argument to sqlite3_busy_handler(). The second argument to
+the busy handler callback is the number of times that the busy handler has
+been invoked previously for the same locking event. If the
+busy callback returns 0, then no additional attempts are made to
+access the database and <a href="../rescode.html#busy">SQLITE_BUSY</a> is returned
+to the application.
+If the callback returns non-zero, then another attempt
+is made to access the database and the cycle repeats.</p>
+
+<p>The presence of a busy handler does not guarantee that it will be invoked
+when there is lock contention. If SQLite determines that invoking the busy
+handler could result in a deadlock, it will go ahead and return <a href="../rescode.html#busy">SQLITE_BUSY</a>
+to the application instead of invoking the
+busy handler.
+Consider a scenario where one process is holding a read lock that
+it is trying to promote to a reserved lock and
+a second process is holding a reserved lock that it is trying
+to promote to an exclusive lock. The first process cannot proceed
+because it is blocked by the second and the second process cannot
+proceed because it is blocked by the first. If both processes
+invoke the busy handlers, neither will make any progress. Therefore,
+SQLite returns <a href="../rescode.html#busy">SQLITE_BUSY</a> for the first process, hoping that this
+will induce the first process to release its read lock and allow
+the second process to proceed.</p>
+
+<p>The default busy callback is NULL.</p>
+
+<p>There can only be a single busy handler defined for each
+<a href="../c3ref/sqlite3.html">database connection</a>. Setting a new busy handler clears any
+previously set handler. Note that calling <a href="../c3ref/busy_timeout.html">sqlite3_busy_timeout()</a>
+or evaluating <a href="../pragma.html#pragma_busy_timeout">PRAGMA busy_timeout=N</a> will change the
+busy handler and thus clear any previously set busy handler.</p>
+
+<p>The busy callback should not take any actions which modify the
+database connection that invoked the busy handler. In other words,
+the busy handler is not reentrant. Any such actions
+result in undefined behavior.</p>
+
+<p>A busy handler must not close the database connection
+or <a href="../c3ref/stmt.html">prepared statement</a> that invoked the busy handler.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/busy_timeout.html b/www/c3ref/busy_timeout.html
new file mode 100644
index 0000000..617e753
--- /dev/null
+++ b/www/c3ref/busy_timeout.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Set A Busy Timeout</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_busy_timeout -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Set A Busy Timeout</h2>
+</div>
+<blockquote><pre>
+int sqlite3_busy_timeout(sqlite3*, int ms);
+</pre></blockquote>
+<p>
+This routine sets a <a href="../c3ref/busy_handler.html">busy handler</a> that sleeps
+for a specified amount of time when a table is locked. The handler
+will sleep multiple times until at least "ms" milliseconds of sleeping
+have accumulated. After at least "ms" milliseconds of sleeping,
+the handler returns 0 which causes <a href="../c3ref/step.html">sqlite3_step()</a> to return
+<a href="../rescode.html#busy">SQLITE_BUSY</a>.</p>
+
+<p>Calling this routine with an argument less than or equal to zero
+turns off all busy handlers.</p>
+
+<p>There can only be a single busy handler for a particular
+<a href="../c3ref/sqlite3.html">database connection</a> at any given moment. If another busy handler
+was defined (using <a href="../c3ref/busy_handler.html">sqlite3_busy_handler()</a>) prior to calling
+this routine, that other busy handler is cleared.</p>
+
+<p>See also: <a href="../pragma.html#pragma_busy_timeout">PRAGMA busy_timeout</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_abort.html b/www/c3ref/c_abort.html
new file mode 100644
index 0000000..85615b2
--- /dev/null
+++ b/www/c3ref/c_abort.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Result Codes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_ABORT SQLITE_AUTH SQLITE_BUSY SQLITE_CANTOPEN SQLITE_CONSTRAINT SQLITE_CORRUPT SQLITE_DONE SQLITE_EMPTY SQLITE_ERROR SQLITE_FORMAT SQLITE_FULL SQLITE_INTERNAL SQLITE_INTERRUPT SQLITE_IOERR SQLITE_LOCKED SQLITE_MISMATCH SQLITE_MISUSE SQLITE_NOLFS SQLITE_NOMEM SQLITE_NOTADB SQLITE_NOTFOUND SQLITE_NOTICE SQLITE_OK SQLITE_PERM SQLITE_PROTOCOL SQLITE_RANGE SQLITE_READONLY SQLITE_ROW SQLITE_SCHEMA SQLITE_TOOBIG SQLITE_WARNING {result code definitions} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Result Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_OK 0 /* Successful result */
+/* beginning-of-error-codes */
+#define SQLITE_ERROR 1 /* Generic error */
+#define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */
+#define SQLITE_PERM 3 /* Access permission denied */
+#define SQLITE_ABORT 4 /* Callback routine requested an abort */
+#define SQLITE_BUSY 5 /* The database file is locked */
+#define SQLITE_LOCKED 6 /* A table in the database is locked */
+#define SQLITE_NOMEM 7 /* A malloc() failed */
+#define SQLITE_READONLY 8 /* Attempt to write a readonly database */
+#define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/
+#define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */
+#define SQLITE_CORRUPT 11 /* The database disk image is malformed */
+#define SQLITE_NOTFOUND 12 /* Unknown opcode in sqlite3_file_control() */
+#define SQLITE_FULL 13 /* Insertion failed because database is full */
+#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
+#define SQLITE_PROTOCOL 15 /* Database lock protocol error */
+#define SQLITE_EMPTY 16 /* Internal use only */
+#define SQLITE_SCHEMA 17 /* The database schema changed */
+#define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */
+#define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */
+#define SQLITE_MISMATCH 20 /* Data type mismatch */
+#define SQLITE_MISUSE 21 /* Library used incorrectly */
+#define SQLITE_NOLFS 22 /* Uses OS features not supported on host */
+#define SQLITE_AUTH 23 /* Authorization denied */
+#define SQLITE_FORMAT 24 /* Not used */
+#define SQLITE_RANGE 25 /* 2nd parameter to sqlite3_bind out of range */
+#define SQLITE_NOTADB 26 /* File opened that is not a database file */
+#define SQLITE_NOTICE 27 /* Notifications from sqlite3_log() */
+#define SQLITE_WARNING 28 /* Warnings from sqlite3_log() */
+#define SQLITE_ROW 100 /* sqlite3_step() has another row ready */
+#define SQLITE_DONE 101 /* sqlite3_step() has finished executing */
+/* end-of-error-codes */
+</pre></blockquote>
+<p>
+Many SQLite functions return an integer result code from the set shown
+here in order to indicate success or failure.</p>
+
+<p>New error codes may be added in future versions of SQLite.</p>
+
+<p>See also: <a href="../c3ref/c_abort_rollback.html">extended result code definitions</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_abort_rollback.html b/www/c3ref/c_abort_rollback.html
new file mode 100644
index 0000000..83bbd72
--- /dev/null
+++ b/www/c3ref/c_abort_rollback.html
@@ -0,0 +1,217 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Extended Result Codes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_ABORT_ROLLBACK SQLITE_AUTH_USER SQLITE_BUSY_RECOVERY SQLITE_BUSY_SNAPSHOT SQLITE_BUSY_TIMEOUT SQLITE_CANTOPEN_CONVPATH SQLITE_CANTOPEN_DIRTYWAL SQLITE_CANTOPEN_FULLPATH SQLITE_CANTOPEN_ISDIR SQLITE_CANTOPEN_NOTEMPDIR SQLITE_CANTOPEN_SYMLINK SQLITE_CONSTRAINT_CHECK SQLITE_CONSTRAINT_COMMITHOOK SQLITE_CONSTRAINT_DATATYPE SQLITE_CONSTRAINT_FOREIGNKEY SQLITE_CONSTRAINT_FUNCTION SQLITE_CONSTRAINT_NOTNULL SQLITE_CONSTRAINT_PINNED SQLITE_CONSTRAINT_PRIMARYKEY SQLITE_CONSTRAINT_ROWID SQLITE_CONSTRAINT_TRIGGER SQLITE_CONSTRAINT_UNIQUE SQLITE_CONSTRAINT_VTAB SQLITE_CORRUPT_INDEX SQLITE_CORRUPT_SEQUENCE SQLITE_CORRUPT_VTAB SQLITE_ERROR_MISSING_COLLSEQ SQLITE_ERROR_RETRY SQLITE_ERROR_SNAPSHOT SQLITE_IOERR_ACCESS SQLITE_IOERR_AUTH SQLITE_IOERR_BEGIN_ATOMIC SQLITE_IOERR_BLOCKED SQLITE_IOERR_CHECKRESERVEDLOCK SQLITE_IOERR_CLOSE SQLITE_IOERR_COMMIT_ATOMIC SQLITE_IOERR_CONVPATH SQLITE_IOERR_CORRUPTFS SQLITE_IOERR_DATA SQLITE_IOERR_DELETE SQLITE_IOERR_DELETE_NOENT SQLITE_IOERR_DIR_CLOSE SQLITE_IOERR_DIR_FSYNC SQLITE_IOERR_FSTAT SQLITE_IOERR_FSYNC SQLITE_IOERR_GETTEMPPATH SQLITE_IOERR_LOCK SQLITE_IOERR_MMAP SQLITE_IOERR_NOMEM SQLITE_IOERR_RDLOCK SQLITE_IOERR_READ SQLITE_IOERR_ROLLBACK_ATOMIC SQLITE_IOERR_SEEK SQLITE_IOERR_SHMLOCK SQLITE_IOERR_SHMMAP SQLITE_IOERR_SHMOPEN SQLITE_IOERR_SHMSIZE SQLITE_IOERR_SHORT_READ SQLITE_IOERR_TRUNCATE SQLITE_IOERR_UNLOCK SQLITE_IOERR_VNODE SQLITE_IOERR_WRITE SQLITE_LOCKED_SHAREDCACHE SQLITE_LOCKED_VTAB SQLITE_NOTICE_RECOVER_ROLLBACK SQLITE_NOTICE_RECOVER_WAL SQLITE_OK_LOAD_PERMANENTLY SQLITE_OK_SYMLINK SQLITE_READONLY_CANTINIT SQLITE_READONLY_CANTLOCK SQLITE_READONLY_DBMOVED SQLITE_READONLY_DIRECTORY SQLITE_READONLY_RECOVERY SQLITE_READONLY_ROLLBACK SQLITE_WARNING_AUTOINDEX {extended result code definitions} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Extended Result Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1&lt;&lt;8))
+#define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2&lt;&lt;8))
+#define SQLITE_ERROR_SNAPSHOT (SQLITE_ERROR | (3&lt;&lt;8))
+#define SQLITE_IOERR_READ (SQLITE_IOERR | (1&lt;&lt;8))
+#define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2&lt;&lt;8))
+#define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3&lt;&lt;8))
+#define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4&lt;&lt;8))
+#define SQLITE_IOERR_DIR_FSYNC (SQLITE_IOERR | (5&lt;&lt;8))
+#define SQLITE_IOERR_TRUNCATE (SQLITE_IOERR | (6&lt;&lt;8))
+#define SQLITE_IOERR_FSTAT (SQLITE_IOERR | (7&lt;&lt;8))
+#define SQLITE_IOERR_UNLOCK (SQLITE_IOERR | (8&lt;&lt;8))
+#define SQLITE_IOERR_RDLOCK (SQLITE_IOERR | (9&lt;&lt;8))
+#define SQLITE_IOERR_DELETE (SQLITE_IOERR | (10&lt;&lt;8))
+#define SQLITE_IOERR_BLOCKED (SQLITE_IOERR | (11&lt;&lt;8))
+#define SQLITE_IOERR_NOMEM (SQLITE_IOERR | (12&lt;&lt;8))
+#define SQLITE_IOERR_ACCESS (SQLITE_IOERR | (13&lt;&lt;8))
+#define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14&lt;&lt;8))
+#define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15&lt;&lt;8))
+#define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16&lt;&lt;8))
+#define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17&lt;&lt;8))
+#define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18&lt;&lt;8))
+#define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19&lt;&lt;8))
+#define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20&lt;&lt;8))
+#define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21&lt;&lt;8))
+#define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22&lt;&lt;8))
+#define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23&lt;&lt;8))
+#define SQLITE_IOERR_MMAP (SQLITE_IOERR | (24&lt;&lt;8))
+#define SQLITE_IOERR_GETTEMPPATH (SQLITE_IOERR | (25&lt;&lt;8))
+#define SQLITE_IOERR_CONVPATH (SQLITE_IOERR | (26&lt;&lt;8))
+#define SQLITE_IOERR_VNODE (SQLITE_IOERR | (27&lt;&lt;8))
+#define SQLITE_IOERR_AUTH (SQLITE_IOERR | (28&lt;&lt;8))
+#define SQLITE_IOERR_BEGIN_ATOMIC (SQLITE_IOERR | (29&lt;&lt;8))
+#define SQLITE_IOERR_COMMIT_ATOMIC (SQLITE_IOERR | (30&lt;&lt;8))
+#define SQLITE_IOERR_ROLLBACK_ATOMIC (SQLITE_IOERR | (31&lt;&lt;8))
+#define SQLITE_IOERR_DATA (SQLITE_IOERR | (32&lt;&lt;8))
+#define SQLITE_IOERR_CORRUPTFS (SQLITE_IOERR | (33&lt;&lt;8))
+#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1&lt;&lt;8))
+#define SQLITE_LOCKED_VTAB (SQLITE_LOCKED | (2&lt;&lt;8))
+#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1&lt;&lt;8))
+#define SQLITE_BUSY_SNAPSHOT (SQLITE_BUSY | (2&lt;&lt;8))
+#define SQLITE_BUSY_TIMEOUT (SQLITE_BUSY | (3&lt;&lt;8))
+#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1&lt;&lt;8))
+#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2&lt;&lt;8))
+#define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3&lt;&lt;8))
+#define SQLITE_CANTOPEN_CONVPATH (SQLITE_CANTOPEN | (4&lt;&lt;8))
+#define SQLITE_CANTOPEN_DIRTYWAL (SQLITE_CANTOPEN | (5&lt;&lt;8)) /* Not Used */
+#define SQLITE_CANTOPEN_SYMLINK (SQLITE_CANTOPEN | (6&lt;&lt;8))
+#define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1&lt;&lt;8))
+#define SQLITE_CORRUPT_SEQUENCE (SQLITE_CORRUPT | (2&lt;&lt;8))
+#define SQLITE_CORRUPT_INDEX (SQLITE_CORRUPT | (3&lt;&lt;8))
+#define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1&lt;&lt;8))
+#define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2&lt;&lt;8))
+#define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3&lt;&lt;8))
+#define SQLITE_READONLY_DBMOVED (SQLITE_READONLY | (4&lt;&lt;8))
+#define SQLITE_READONLY_CANTINIT (SQLITE_READONLY | (5&lt;&lt;8))
+#define SQLITE_READONLY_DIRECTORY (SQLITE_READONLY | (6&lt;&lt;8))
+#define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2&lt;&lt;8))
+#define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1&lt;&lt;8))
+#define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2&lt;&lt;8))
+#define SQLITE_CONSTRAINT_FOREIGNKEY (SQLITE_CONSTRAINT | (3&lt;&lt;8))
+#define SQLITE_CONSTRAINT_FUNCTION (SQLITE_CONSTRAINT | (4&lt;&lt;8))
+#define SQLITE_CONSTRAINT_NOTNULL (SQLITE_CONSTRAINT | (5&lt;&lt;8))
+#define SQLITE_CONSTRAINT_PRIMARYKEY (SQLITE_CONSTRAINT | (6&lt;&lt;8))
+#define SQLITE_CONSTRAINT_TRIGGER (SQLITE_CONSTRAINT | (7&lt;&lt;8))
+#define SQLITE_CONSTRAINT_UNIQUE (SQLITE_CONSTRAINT | (8&lt;&lt;8))
+#define SQLITE_CONSTRAINT_VTAB (SQLITE_CONSTRAINT | (9&lt;&lt;8))
+#define SQLITE_CONSTRAINT_ROWID (SQLITE_CONSTRAINT |(10&lt;&lt;8))
+#define SQLITE_CONSTRAINT_PINNED (SQLITE_CONSTRAINT |(11&lt;&lt;8))
+#define SQLITE_CONSTRAINT_DATATYPE (SQLITE_CONSTRAINT |(12&lt;&lt;8))
+#define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1&lt;&lt;8))
+#define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2&lt;&lt;8))
+#define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1&lt;&lt;8))
+#define SQLITE_AUTH_USER (SQLITE_AUTH | (1&lt;&lt;8))
+#define SQLITE_OK_LOAD_PERMANENTLY (SQLITE_OK | (1&lt;&lt;8))
+#define SQLITE_OK_SYMLINK (SQLITE_OK | (2&lt;&lt;8)) /* internal use only */
+</pre></blockquote>
+<p>
+In its default configuration, SQLite API routines return one of 30 integer
+<a href="../rescode.html">result codes</a>. However, experience has shown that many of
+these result codes are too coarse-grained. They do not provide as
+much information about problems as programmers might like. In an effort to
+address this, newer versions of SQLite (version 3.3.8 2006-10-09
+and later) include
+support for additional result codes that provide more detailed information
+about errors. These <a href="../rescode.html#extrc">extended result codes</a> are enabled or disabled
+on a per database connection basis using the
+<a href="../c3ref/extended_result_codes.html">sqlite3_extended_result_codes()</a> API. Or, the extended code for
+the most recent error can be obtained using
+<a href="../c3ref/errcode.html">sqlite3_extended_errcode()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_access_exists.html b/www/c3ref/c_access_exists.html
new file mode 100644
index 0000000..27f6f04
--- /dev/null
+++ b/www/c3ref/c_access_exists.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Flags for the xAccess VFS method</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_ACCESS_EXISTS SQLITE_ACCESS_READ SQLITE_ACCESS_READWRITE -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Flags for the xAccess VFS method</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_ACCESS_EXISTS 0
+#define SQLITE_ACCESS_READWRITE 1 /* Used by PRAGMA temp_store_directory */
+#define SQLITE_ACCESS_READ 2 /* Unused */
+</pre></blockquote>
+<p>
+These integer constants can be used as the third parameter to
+the xAccess method of an <a href="../c3ref/vfs.html">sqlite3_vfs</a> object. They determine
+what kind of permissions the xAccess method is looking for.
+With SQLITE_ACCESS_EXISTS, the xAccess method
+simply checks whether the file exists.
+With SQLITE_ACCESS_READWRITE, the xAccess method
+checks whether the named directory is both readable and writable
+(in other words, if files can be added, removed, and renamed within
+the directory).
+The SQLITE_ACCESS_READWRITE constant is currently used only by the
+<a href="../pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a>, though this could change in a future
+release of SQLite.
+With SQLITE_ACCESS_READ, the xAccess method
+checks whether the file is readable. The SQLITE_ACCESS_READ constant is
+currently unused, though it might be used in a future release of
+SQLite.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_alter_table.html b/www/c3ref/c_alter_table.html
new file mode 100644
index 0000000..b0bdfcf
--- /dev/null
+++ b/www/c3ref/c_alter_table.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Authorizer Action Codes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_ALTER_TABLE SQLITE_ANALYZE SQLITE_ATTACH SQLITE_COPY SQLITE_CREATE_INDEX SQLITE_CREATE_TABLE SQLITE_CREATE_TEMP_INDEX SQLITE_CREATE_TEMP_TABLE SQLITE_CREATE_TEMP_TRIGGER SQLITE_CREATE_TEMP_VIEW SQLITE_CREATE_TRIGGER SQLITE_CREATE_VIEW SQLITE_CREATE_VTABLE SQLITE_DELETE SQLITE_DETACH SQLITE_DROP_INDEX SQLITE_DROP_TABLE SQLITE_DROP_TEMP_INDEX SQLITE_DROP_TEMP_TABLE SQLITE_DROP_TEMP_TRIGGER SQLITE_DROP_TEMP_VIEW SQLITE_DROP_TRIGGER SQLITE_DROP_VIEW SQLITE_DROP_VTABLE SQLITE_FUNCTION SQLITE_INSERT SQLITE_PRAGMA SQLITE_READ SQLITE_RECURSIVE SQLITE_REINDEX SQLITE_SAVEPOINT SQLITE_SELECT SQLITE_TRANSACTION SQLITE_UPDATE -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Authorizer Action Codes</h2>
+</div>
+<blockquote><pre>
+/******************************************* 3rd ************ 4th ***********/
+#define SQLITE_CREATE_INDEX 1 /* Index Name Table Name */
+#define SQLITE_CREATE_TABLE 2 /* Table Name NULL */
+#define SQLITE_CREATE_TEMP_INDEX 3 /* Index Name Table Name */
+#define SQLITE_CREATE_TEMP_TABLE 4 /* Table Name NULL */
+#define SQLITE_CREATE_TEMP_TRIGGER 5 /* Trigger Name Table Name */
+#define SQLITE_CREATE_TEMP_VIEW 6 /* View Name NULL */
+#define SQLITE_CREATE_TRIGGER 7 /* Trigger Name Table Name */
+#define SQLITE_CREATE_VIEW 8 /* View Name NULL */
+#define SQLITE_DELETE 9 /* Table Name NULL */
+#define SQLITE_DROP_INDEX 10 /* Index Name Table Name */
+#define SQLITE_DROP_TABLE 11 /* Table Name NULL */
+#define SQLITE_DROP_TEMP_INDEX 12 /* Index Name Table Name */
+#define SQLITE_DROP_TEMP_TABLE 13 /* Table Name NULL */
+#define SQLITE_DROP_TEMP_TRIGGER 14 /* Trigger Name Table Name */
+#define SQLITE_DROP_TEMP_VIEW 15 /* View Name NULL */
+#define SQLITE_DROP_TRIGGER 16 /* Trigger Name Table Name */
+#define SQLITE_DROP_VIEW 17 /* View Name NULL */
+#define SQLITE_INSERT 18 /* Table Name NULL */
+#define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */
+#define SQLITE_READ 20 /* Table Name Column Name */
+#define SQLITE_SELECT 21 /* NULL NULL */
+#define SQLITE_TRANSACTION 22 /* Operation NULL */
+#define SQLITE_UPDATE 23 /* Table Name Column Name */
+#define SQLITE_ATTACH 24 /* Filename NULL */
+#define SQLITE_DETACH 25 /* Database Name NULL */
+#define SQLITE_ALTER_TABLE 26 /* Database Name Table Name */
+#define SQLITE_REINDEX 27 /* Index Name NULL */
+#define SQLITE_ANALYZE 28 /* Table Name NULL */
+#define SQLITE_CREATE_VTABLE 29 /* Table Name Module Name */
+#define SQLITE_DROP_VTABLE 30 /* Table Name Module Name */
+#define SQLITE_FUNCTION 31 /* NULL Function Name */
+#define SQLITE_SAVEPOINT 32 /* Operation Savepoint Name */
+#define SQLITE_COPY 0 /* No longer used */
+#define SQLITE_RECURSIVE 33 /* NULL NULL */
+</pre></blockquote>
+<p>
+The <a href="../c3ref/set_authorizer.html">sqlite3_set_authorizer()</a> interface registers a callback function
+that is invoked to authorize certain SQL statement actions. The
+second parameter to the callback is an integer code that specifies
+what action is being authorized. These are the integer action codes that
+the authorizer callback may be passed.</p>
+
+<p>These action code values signify what kind of operation is to be
+authorized. The 3rd and 4th parameters to the authorization
+callback function will be parameters or NULL depending on which of these
+codes is used as the second parameter. The 5th parameter to the
+authorizer callback is the name of the database ("main", "temp",
+etc.) if applicable. The 6th parameter to the authorizer callback
+is the name of the inner-most trigger or view that is responsible for
+the access attempt or NULL if this access attempt is directly from
+top-level SQL code.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_any.html b/www/c3ref/c_any.html
new file mode 100644
index 0000000..f22c397
--- /dev/null
+++ b/www/c3ref/c_any.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Text Encodings</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_ANY SQLITE_UTF16 SQLITE_UTF16BE SQLITE_UTF16LE SQLITE_UTF16_ALIGNED SQLITE_UTF8 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Text Encodings</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_UTF8 1 /* IMP: R-37514-35566 */
+#define SQLITE_UTF16LE 2 /* IMP: R-03371-37637 */
+#define SQLITE_UTF16BE 3 /* IMP: R-51971-34154 */
+#define SQLITE_UTF16 4 /* Use native byte order */
+#define SQLITE_ANY 5 /* Deprecated */
+#define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */
+</pre></blockquote>
+<p>
+These constant define integer codes that represent the various
+text encodings supported by SQLite.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_blob.html b/www/c3ref/c_blob.html
new file mode 100644
index 0000000..a3f3abb
--- /dev/null
+++ b/www/c3ref/c_blob.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Fundamental Datatypes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_BLOB SQLITE_FLOAT SQLITE_INTEGER SQLITE_NULL SQLITE_TEXT -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Fundamental Datatypes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_INTEGER 1
+#define SQLITE_FLOAT 2
+#define SQLITE_BLOB 4
+#define SQLITE_NULL 5
+#ifdef SQLITE_TEXT
+# undef SQLITE_TEXT
+#else
+# define SQLITE_TEXT 3
+#endif
+#define SQLITE3_TEXT 3
+</pre></blockquote>
+<p>
+Every value in SQLite has one of five fundamental datatypes:</p>
+
+<p><ul>
+<li> 64-bit signed integer
+<li> 64-bit IEEE floating point number
+<li> string
+<li> BLOB
+<li> NULL
+</ul></p>
+
+<p>These constants are codes for each of those types.</p>
+
+<p>Note that the SQLITE_TEXT constant was also used in SQLite version 2
+for a completely different meaning. Software that links against both
+SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not
+SQLITE_TEXT.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_checkpoint_full.html b/www/c3ref/c_checkpoint_full.html
new file mode 100644
index 0000000..df4bc39
--- /dev/null
+++ b/www/c3ref/c_checkpoint_full.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Checkpoint Mode Values</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_CHECKPOINT_FULL SQLITE_CHECKPOINT_PASSIVE SQLITE_CHECKPOINT_RESTART SQLITE_CHECKPOINT_TRUNCATE {checkpoint mode} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Checkpoint Mode Values</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */
+#define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */
+#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */
+#define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */
+</pre></blockquote>
+<p>
+These constants define all valid values for the "checkpoint mode" passed
+as the third parameter to the <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface.
+See the <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> documentation for details on the
+meaning of each of these checkpoint modes.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_config_covering_index_scan.html b/www/c3ref/c_config_covering_index_scan.html
new file mode 100644
index 0000000..a82c32b
--- /dev/null
+++ b/www/c3ref/c_config_covering_index_scan.html
@@ -0,0 +1,535 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Configuration Options</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_CONFIG_COVERING_INDEX_SCAN SQLITE_CONFIG_GETMALLOC SQLITE_CONFIG_GETMUTEX SQLITE_CONFIG_GETPCACHE SQLITE_CONFIG_GETPCACHE2 SQLITE_CONFIG_HEAP SQLITE_CONFIG_LOG SQLITE_CONFIG_LOOKASIDE SQLITE_CONFIG_MALLOC SQLITE_CONFIG_MEMDB_MAXSIZE SQLITE_CONFIG_MEMSTATUS SQLITE_CONFIG_MMAP_SIZE SQLITE_CONFIG_MULTITHREAD SQLITE_CONFIG_MUTEX SQLITE_CONFIG_PAGECACHE SQLITE_CONFIG_PCACHE SQLITE_CONFIG_PCACHE2 SQLITE_CONFIG_PCACHE_HDRSZ SQLITE_CONFIG_PMASZ SQLITE_CONFIG_SCRATCH SQLITE_CONFIG_SERIALIZED SQLITE_CONFIG_SINGLETHREAD SQLITE_CONFIG_SMALL_MALLOC SQLITE_CONFIG_SORTERREF_SIZE SQLITE_CONFIG_SQLLOG SQLITE_CONFIG_STMTJRNL_SPILL SQLITE_CONFIG_URI SQLITE_CONFIG_WIN32_HEAPSIZE {configuration option} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Configuration Options</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
+#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
+#define SQLITE_CONFIG_SERIALIZED 3 /* nil */
+#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
+#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */
+#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */
+#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */
+#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */
+#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */
+#define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */
+#define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */
+/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */
+#define SQLITE_CONFIG_LOOKASIDE 13 /* int int */
+#define SQLITE_CONFIG_PCACHE 14 /* no-op */
+#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */
+#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */
+#define SQLITE_CONFIG_URI 17 /* int */
+#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */
+#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
+#define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */
+#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
+#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
+#define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */
+#define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */
+#define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */
+#define SQLITE_CONFIG_STMTJRNL_SPILL 26 /* int nByte */
+#define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */
+#define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */
+#define SQLITE_CONFIG_MEMDB_MAXSIZE 29 /* sqlite3_int64 */
+</pre></blockquote>
+<p>
+These constants are the available integer configuration options that
+can be passed as the first argument to the <a href="../c3ref/config.html">sqlite3_config()</a> interface.</p>
+
+<p>New configuration options may be added in future releases of SQLite.
+Existing configuration options might be discontinued. Applications
+should check the return code from <a href="../c3ref/config.html">sqlite3_config()</a> to make sure that
+the call worked. The <a href="../c3ref/config.html">sqlite3_config()</a> interface will return a
+non-zero <a href="../rescode.html">error code</a> if a discontinued or unsupported configuration option
+is invoked.</p>
+
+<p><dl>
+<a name="sqliteconfigsinglethread"></a>
+ <dt>SQLITE_CONFIG_SINGLETHREAD</dt>
+<dd>There are no arguments to this option. This option sets the
+<a href="../threadsafe.html">threading mode</a> to Single-thread. In other words, it disables
+all mutexing and puts SQLite into a mode where it can only be used
+by a single thread. If SQLite is compiled with
+the <a href="../compile.html#threadsafe">SQLITE_THREADSAFE=0</a> compile-time option then
+it is not possible to change the <a href="../threadsafe.html">threading mode</a> from its default
+value of Single-thread and so <a href="../c3ref/config.html">sqlite3_config()</a> will return
+<a href="../rescode.html#error">SQLITE_ERROR</a> if called with the SQLITE_CONFIG_SINGLETHREAD
+configuration option.</dd></p>
+
+<p><a name="sqliteconfigmultithread"></a>
+ <dt>SQLITE_CONFIG_MULTITHREAD</dt>
+<dd>There are no arguments to this option. This option sets the
+<a href="../threadsafe.html">threading mode</a> to Multi-thread. In other words, it disables
+mutexing on <a href="../c3ref/sqlite3.html">database connection</a> and <a href="../c3ref/stmt.html">prepared statement</a> objects.
+The application is responsible for serializing access to
+<a href="../c3ref/sqlite3.html">database connections</a> and <a href="../c3ref/stmt.html">prepared statements</a>. But other mutexes
+are enabled so that SQLite will be safe to use in a multi-threaded
+environment as long as no two threads attempt to use the same
+<a href="../c3ref/sqlite3.html">database connection</a> at the same time. If SQLite is compiled with
+the <a href="../compile.html#threadsafe">SQLITE_THREADSAFE=0</a> compile-time option then
+it is not possible to set the Multi-thread <a href="../threadsafe.html">threading mode</a> and
+<a href="../c3ref/config.html">sqlite3_config()</a> will return <a href="../rescode.html#error">SQLITE_ERROR</a> if called with the
+SQLITE_CONFIG_MULTITHREAD configuration option.</dd></p>
+
+<p><a name="sqliteconfigserialized"></a>
+ <dt>SQLITE_CONFIG_SERIALIZED</dt>
+<dd>There are no arguments to this option. This option sets the
+<a href="../threadsafe.html">threading mode</a> to Serialized. In other words, this option enables
+all mutexes including the recursive
+mutexes on <a href="../c3ref/sqlite3.html">database connection</a> and <a href="../c3ref/stmt.html">prepared statement</a> objects.
+In this mode (which is the default when SQLite is compiled with
+<a href="../compile.html#threadsafe">SQLITE_THREADSAFE=1</a>) the SQLite library will itself serialize access
+to <a href="../c3ref/sqlite3.html">database connections</a> and <a href="../c3ref/stmt.html">prepared statements</a> so that the
+application is free to use the same <a href="../c3ref/sqlite3.html">database connection</a> or the
+same <a href="../c3ref/stmt.html">prepared statement</a> in different threads at the same time.
+If SQLite is compiled with
+the <a href="../compile.html#threadsafe">SQLITE_THREADSAFE=0</a> compile-time option then
+it is not possible to set the Serialized <a href="../threadsafe.html">threading mode</a> and
+<a href="../c3ref/config.html">sqlite3_config()</a> will return <a href="../rescode.html#error">SQLITE_ERROR</a> if called with the
+SQLITE_CONFIG_SERIALIZED configuration option.</dd></p>
+
+<p><a name="sqliteconfigmalloc"></a>
+ <dt>SQLITE_CONFIG_MALLOC</dt>
+<dd> The SQLITE_CONFIG_MALLOC option takes a single argument which is
+a pointer to an instance of the <a href="../c3ref/mem_methods.html">sqlite3_mem_methods</a> structure.
+The argument specifies
+alternative low-level memory allocation routines to be used in place of
+the memory allocation routines built into SQLite. SQLite makes
+its own private copy of the content of the <a href="../c3ref/mem_methods.html">sqlite3_mem_methods</a> structure
+before the <a href="../c3ref/config.html">sqlite3_config()</a> call returns.</dd></p>
+
+<p><a name="sqliteconfiggetmalloc"></a>
+ <dt>SQLITE_CONFIG_GETMALLOC</dt>
+<dd> The SQLITE_CONFIG_GETMALLOC option takes a single argument which
+is a pointer to an instance of the <a href="../c3ref/mem_methods.html">sqlite3_mem_methods</a> structure.
+The <a href="../c3ref/mem_methods.html">sqlite3_mem_methods</a>
+structure is filled with the currently defined memory allocation routines.
+This option can be used to overload the default memory allocation
+routines with a wrapper that simulations memory allocation failure or
+tracks memory usage, for example. </dd></p>
+
+<p><a name="sqliteconfigsmallmalloc"></a>
+ <dt>SQLITE_CONFIG_SMALL_MALLOC</dt>
+<dd> The SQLITE_CONFIG_SMALL_MALLOC option takes single argument of
+type int, interpreted as a boolean, which if true provides a hint to
+SQLite that it should avoid large memory allocations if possible.
+SQLite will run faster if it is free to make large memory allocations,
+but some application might prefer to run slower in exchange for
+guarantees about memory fragmentation that are possible if large
+allocations are avoided. This hint is normally off.
+</dd></p>
+
+<p><a name="sqliteconfigmemstatus"></a>
+ <dt>SQLITE_CONFIG_MEMSTATUS</dt>
+<dd> The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int,
+interpreted as a boolean, which enables or disables the collection of
+memory allocation statistics. When memory allocation statistics are
+disabled, the following SQLite interfaces become non-operational:
+<ul>
+<li> <a href="../c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a>
+<li> <a href="../c3ref/memory_highwater.html">sqlite3_memory_used()</a>
+<li> <a href="../c3ref/memory_highwater.html">sqlite3_memory_highwater()</a>
+<li> <a href="../c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a>
+<li> <a href="../c3ref/status.html">sqlite3_status64()</a>
+</ul>
+Memory allocation statistics are enabled by default unless SQLite is
+compiled with <a href="../compile.html#default_memstatus">SQLITE_DEFAULT_MEMSTATUS</a>=0 in which case memory
+allocation statistics are disabled by default.
+</dd></p>
+
+<p><a name="sqliteconfigscratch"></a>
+ <dt>SQLITE_CONFIG_SCRATCH</dt>
+<dd> The SQLITE_CONFIG_SCRATCH option is no longer used.
+</dd></p>
+
+<p><a name="sqliteconfigpagecache"></a>
+ <dt>SQLITE_CONFIG_PAGECACHE</dt>
+<dd> The SQLITE_CONFIG_PAGECACHE option specifies a memory pool
+that SQLite can use for the database page cache with the default page
+cache implementation.
+This configuration option is a no-op if an application-defined page
+cache implementation is loaded using the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a>.
+There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to
+8-byte aligned memory (pMem), the size of each page cache line (sz),
+and the number of cache lines (N).
+The sz argument should be the size of the largest database page
+(a power of two between 512 and 65536) plus some extra bytes for each
+page header. The number of extra bytes needed by the page header
+can be determined using <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a>.
+It is harmless, apart from the wasted memory,
+for the sz parameter to be larger than necessary. The pMem
+argument must be either a NULL pointer or a pointer to an 8-byte
+aligned block of memory of at least sz*N bytes, otherwise
+subsequent behavior is undefined.
+When pMem is not NULL, SQLite will strive to use the memory provided
+to satisfy page cache needs, falling back to <a href="../c3ref/free.html">sqlite3_malloc()</a> if
+a page cache line is larger than sz bytes or if all of the pMem buffer
+is exhausted.
+If pMem is NULL and N is non-zero, then each database connection
+does an initial bulk allocation for page cache memory
+from <a href="../c3ref/free.html">sqlite3_malloc()</a> sufficient for N cache lines if N is positive or
+of -1024*N bytes if N is negative, . If additional
+page cache memory is needed beyond what is provided by the initial
+allocation, then SQLite goes to <a href="../c3ref/free.html">sqlite3_malloc()</a> separately for each
+additional cache line. </dd></p>
+
+<p><a name="sqliteconfigheap"></a>
+ <dt>SQLITE_CONFIG_HEAP</dt>
+<dd> The SQLITE_CONFIG_HEAP option specifies a static memory buffer
+that SQLite will use for all of its dynamic memory allocation needs
+beyond those provided for by <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
+The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
+with either <a href="../compile.html#enable_memsys3">SQLITE_ENABLE_MEMSYS3</a> or <a href="../compile.html#enable_memsys5">SQLITE_ENABLE_MEMSYS5</a> and returns
+<a href="../rescode.html#error">SQLITE_ERROR</a> if invoked otherwise.
+There are three arguments to SQLITE_CONFIG_HEAP:
+An 8-byte aligned pointer to the memory,
+the number of bytes in the memory buffer, and the minimum allocation size.
+If the first pointer (the memory pointer) is NULL, then SQLite reverts
+to using its default memory allocator (the system malloc() implementation),
+undoing any prior invocation of <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a>. If the
+memory pointer is not NULL then the alternative memory
+allocator is engaged to handle all of SQLites memory allocation needs.
+The first pointer (the memory pointer) must be aligned to an 8-byte
+boundary or subsequent behavior of SQLite will be undefined.
+The minimum allocation size is capped at 2**12. Reasonable values
+for the minimum allocation size are 2**5 through 2**8.</dd></p>
+
+<p><a name="sqliteconfigmutex"></a>
+ <dt>SQLITE_CONFIG_MUTEX</dt>
+<dd> The SQLITE_CONFIG_MUTEX option takes a single argument which is a
+pointer to an instance of the <a href="../c3ref/mutex_methods.html">sqlite3_mutex_methods</a> structure.
+The argument specifies alternative low-level mutex routines to be used
+in place the mutex routines built into SQLite. SQLite makes a copy of
+the content of the <a href="../c3ref/mutex_methods.html">sqlite3_mutex_methods</a> structure before the call to
+<a href="../c3ref/config.html">sqlite3_config()</a> returns. If SQLite is compiled with
+the <a href="../compile.html#threadsafe">SQLITE_THREADSAFE=0</a> compile-time option then
+the entire mutexing subsystem is omitted from the build and hence calls to
+<a href="../c3ref/config.html">sqlite3_config()</a> with the SQLITE_CONFIG_MUTEX configuration option will
+return <a href="../rescode.html#error">SQLITE_ERROR</a>.</dd></p>
+
+<p><a name="sqliteconfiggetmutex"></a>
+ <dt>SQLITE_CONFIG_GETMUTEX</dt>
+<dd> The SQLITE_CONFIG_GETMUTEX option takes a single argument which
+is a pointer to an instance of the <a href="../c3ref/mutex_methods.html">sqlite3_mutex_methods</a> structure. The
+<a href="../c3ref/mutex_methods.html">sqlite3_mutex_methods</a>
+structure is filled with the currently defined mutex routines.
+This option can be used to overload the default mutex allocation
+routines with a wrapper used to track mutex usage for performance
+profiling or testing, for example. If SQLite is compiled with
+the <a href="../compile.html#threadsafe">SQLITE_THREADSAFE=0</a> compile-time option then
+the entire mutexing subsystem is omitted from the build and hence calls to
+<a href="../c3ref/config.html">sqlite3_config()</a> with the SQLITE_CONFIG_GETMUTEX configuration option will
+return <a href="../rescode.html#error">SQLITE_ERROR</a>.</dd></p>
+
+<p><a name="sqliteconfiglookaside"></a>
+ <dt>SQLITE_CONFIG_LOOKASIDE</dt>
+<dd> The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine
+the default size of lookaside memory on each <a href="../c3ref/sqlite3.html">database connection</a>.
+The first argument is the
+size of each lookaside buffer slot and the second is the number of
+slots allocated to each database connection. SQLITE_CONFIG_LOOKASIDE
+sets the <i>default</i> lookaside size. The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">SQLITE_DBCONFIG_LOOKASIDE</a>
+option to <a href="../c3ref/db_config.html">sqlite3_db_config()</a> can be used to change the lookaside
+configuration on individual connections. </dd></p>
+
+<p><a name="sqliteconfigpcache2"></a>
+ <dt>SQLITE_CONFIG_PCACHE2</dt>
+<dd> The SQLITE_CONFIG_PCACHE2 option takes a single argument which is
+a pointer to an <a href="../c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> object. This object specifies
+the interface to a custom page cache implementation.
+SQLite makes a copy of the <a href="../c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> object.</dd></p>
+
+<p><a name="sqliteconfiggetpcache2"></a>
+ <dt>SQLITE_CONFIG_GETPCACHE2</dt>
+<dd> The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which
+is a pointer to an <a href="../c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> object. SQLite copies of
+the current page cache implementation into that object. </dd></p>
+
+<p><a name="sqliteconfiglog"></a>
+ <dt>SQLITE_CONFIG_LOG</dt>
+<dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite
+global <a href="../errlog.html">error log</a>.
+(The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a
+function with a call signature of void(*)(void*,int,const char*),
+and a pointer to void. If the function pointer is not NULL, it is
+invoked by <a href="../c3ref/log.html">sqlite3_log()</a> to process each logging event. If the
+function pointer is NULL, the <a href="../c3ref/log.html">sqlite3_log()</a> interface becomes a no-op.
+The void pointer that is the second argument to SQLITE_CONFIG_LOG is
+passed through as the first parameter to the application-defined logger
+function whenever that function is invoked. The second parameter to
+the logger function is a copy of the first parameter to the corresponding
+<a href="../c3ref/log.html">sqlite3_log()</a> call and is intended to be a <a href="../rescode.html">result code</a> or an
+<a href="../rescode.html#extrc">extended result code</a>. The third parameter passed to the logger is
+log message after formatting via <a href="../c3ref/mprintf.html">sqlite3_snprintf()</a>.
+The SQLite logging interface is not reentrant; the logger function
+supplied by the application must not invoke any SQLite interface.
+In a multi-threaded application, the application-defined logger
+function must be threadsafe. </dd></p>
+
+<p><a name="sqliteconfiguri"></a>
+ <dt>SQLITE_CONFIG_URI
+<dd>The SQLITE_CONFIG_URI option takes a single argument of type int.
+If non-zero, then URI handling is globally enabled. If the parameter is zero,
+then URI handling is globally disabled. If URI handling is globally
+enabled, all filenames passed to <a href="../c3ref/open.html">sqlite3_open()</a>, <a href="../c3ref/open.html">sqlite3_open_v2()</a>,
+<a href="../c3ref/open.html">sqlite3_open16()</a> or
+specified as part of <a href="../lang_attach.html">ATTACH</a> commands are interpreted as URIs, regardless
+of whether or not the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_URI</a> flag is set when the database
+connection is opened. If it is globally disabled, filenames are
+only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
+database connection is opened. By default, URI handling is globally
+disabled. The default value may be changed by compiling with the
+<a href="../compile.html#use_uri">SQLITE_USE_URI</a> symbol defined.</p>
+
+<p><a name="sqliteconfigcoveringindexscan"></a>
+ <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN
+<dd>The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer
+argument which is interpreted as a boolean in order to enable or disable
+the use of covering indices for full table scans in the query optimizer.
+The default setting is determined
+by the <a href="../compile.html#allow_covering_index_scan">SQLITE_ALLOW_COVERING_INDEX_SCAN</a> compile-time option, or is "on"
+if that compile-time option is omitted.
+The ability to disable the use of covering indices for full table scans
+is because some incorrectly coded legacy applications might malfunction
+when the optimization is enabled. Providing the ability to
+disable the optimization allows the older, buggy application code to work
+without change even with newer versions of SQLite.</p>
+
+<p><a name="sqliteconfigpcache"></a>
+ <a name="sqliteconfiggetpcache"></a>
+
+<dt>SQLITE_CONFIG_PCACHE and SQLITE_CONFIG_GETPCACHE
+<dd> These options are obsolete and should not be used by new code.
+They are retained for backwards compatibility but are now no-ops.
+</dd></p>
+
+<p><a name="sqliteconfigsqllog"></a>
+
+<dt>SQLITE_CONFIG_SQLLOG
+<dd>This option is only available if sqlite is compiled with the
+<a href="../compile.html#enable_sqllog">SQLITE_ENABLE_SQLLOG</a> pre-processor macro defined. The first argument should
+be a pointer to a function of type void(*)(void*,sqlite3*,const char*, int).
+The second should be of type (void*). The callback is invoked by the library
+in three separate circumstances, identified by the value passed as the
+fourth parameter. If the fourth parameter is 0, then the database connection
+passed as the second argument has just been opened. The third argument
+points to a buffer containing the name of the main database file. If the
+fourth parameter is 1, then the SQL statement that the third parameter
+points to has just been executed. Or, if the fourth parameter is 2, then
+the connection being passed as the second parameter is being closed. The
+third parameter is passed NULL In this case. An example of using this
+configuration option can be seen in the "test_sqllog.c" source file in
+the canonical SQLite source tree.</dd></p>
+
+<p><a name="sqliteconfigmmapsize"></a>
+
+<dt>SQLITE_CONFIG_MMAP_SIZE
+<dd>SQLITE_CONFIG_MMAP_SIZE takes two 64-bit integer (sqlite3_int64) values
+that are the default mmap size limit (the default setting for
+<a href="../pragma.html#pragma_mmap_size">PRAGMA mmap_size</a>) and the maximum allowed mmap size limit.
+The default setting can be overridden by each database connection using
+either the <a href="../pragma.html#pragma_mmap_size">PRAGMA mmap_size</a> command, or by using the
+<a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize">SQLITE_FCNTL_MMAP_SIZE</a> file control. The maximum allowed mmap size
+will be silently truncated if necessary so that it does not exceed the
+compile-time maximum mmap size set by the
+<a href="../compile.html#max_mmap_size">SQLITE_MAX_MMAP_SIZE</a> compile-time option.
+If either argument to this option is negative, then that argument is
+changed to its compile-time default.</p>
+
+<p><a name="sqliteconfigwin32heapsize"></a>
+
+<dt>SQLITE_CONFIG_WIN32_HEAPSIZE
+<dd>The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is
+compiled for Windows with the <a href="../compile.html#win32_malloc">SQLITE_WIN32_MALLOC</a> pre-processor macro
+defined. SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
+that specifies the maximum size of the created heap.</p>
+
+<p><a name="sqliteconfigpcachehdrsz"></a>
+
+<dt>SQLITE_CONFIG_PCACHE_HDRSZ
+<dd>The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which
+is a pointer to an integer and writes into that integer the number of extra
+bytes per page required for each page in <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
+The amount of extra space required can change depending on the compiler,
+target platform, and SQLite version.</p>
+
+<p><a name="sqliteconfigpmasz"></a>
+
+<dt>SQLITE_CONFIG_PMASZ
+<dd>The SQLITE_CONFIG_PMASZ option takes a single parameter which
+is an unsigned integer and sets the "Minimum PMA Size" for the multithreaded
+sorter to that integer. The default minimum PMA Size is set by the
+<a href="../compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> compile-time option. New threads are launched
+to help with sort operations when multithreaded sorting
+is enabled (using the <a href="../pragma.html#pragma_threads">PRAGMA threads</a> command) and the amount of content
+to be sorted exceeds the page size times the minimum of the
+<a href="../pragma.html#pragma_cache_size">PRAGMA cache_size</a> setting and this value.</p>
+
+<p><a name="sqliteconfigstmtjrnlspill"></a>
+
+<dt>SQLITE_CONFIG_STMTJRNL_SPILL
+<dd>The SQLITE_CONFIG_STMTJRNL_SPILL option takes a single parameter which
+becomes the <a href="../tempfiles.html#stmtjrnl">statement journal</a> spill-to-disk threshold.
+<a href="../tempfiles.html#stmtjrnl">Statement journals</a> are held in memory until their size (in bytes)
+exceeds this threshold, at which point they are written to disk.
+Or if the threshold is -1, statement journals are always held
+exclusively in memory.
+Since many statement journals never become large, setting the spill
+threshold to a value such as 64KiB can greatly reduce the amount of
+I/O required to support statement rollback.
+The default value for this setting is controlled by the
+<a href="../compile.html#stmtjrnl_spill">SQLITE_STMTJRNL_SPILL</a> compile-time option.</p>
+
+<p><a name="sqliteconfigsorterrefsize"></a>
+
+<dt>SQLITE_CONFIG_SORTERREF_SIZE
+<dd>The SQLITE_CONFIG_SORTERREF_SIZE option accepts a single parameter
+of type (int) - the new value of the sorter-reference size threshold.
+Usually, when SQLite uses an external sort to order records according
+to an ORDER BY clause, all fields required by the caller are present in the
+sorted records. However, if SQLite determines based on the declared type
+of a table column that its values are likely to be very large - larger
+than the configured sorter-reference size threshold - then a reference
+is stored in each sorted record and the required column values loaded
+from the database as records are returned in sorted order. The default
+value for this option is to never use this optimization. Specifying a
+negative value for this option restores the default behaviour.
+This option is only available if SQLite is compiled with the
+<a href="../compile.html#enable_sorter_references">SQLITE_ENABLE_SORTER_REFERENCES</a> compile-time option.</p>
+
+<p><a name="sqliteconfigmemdbmaxsize"></a>
+
+<dt>SQLITE_CONFIG_MEMDB_MAXSIZE
+<dd>The SQLITE_CONFIG_MEMDB_MAXSIZE option accepts a single parameter
+<a href="../c3ref/int64.html">sqlite3_int64</a> parameter which is the default maximum size for an in-memory
+database created using <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a>. This default maximum
+size can be adjusted up or down for individual databases using the
+<a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> <a href="../c3ref/file_control.html">file-control</a>. If this
+configuration setting is never used, then the default maximum is determined
+by the <a href="../compile.html#memdb_default_maxsize">SQLITE_MEMDB_DEFAULT_MAXSIZE</a> compile-time option. If that
+compile-time option is not set, then the default maximum is 1073741824.
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_dbconfig_defensive.html b/www/c3ref/c_dbconfig_defensive.html
new file mode 100644
index 0000000..3a3506e
--- /dev/null
+++ b/www/c3ref/c_dbconfig_defensive.html
@@ -0,0 +1,445 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Database Connection Configuration Options</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_DBCONFIG_DEFENSIVE SQLITE_DBCONFIG_DQS_DDL SQLITE_DBCONFIG_DQS_DML SQLITE_DBCONFIG_ENABLE_FKEY SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION SQLITE_DBCONFIG_ENABLE_QPSG SQLITE_DBCONFIG_ENABLE_TRIGGER SQLITE_DBCONFIG_ENABLE_VIEW SQLITE_DBCONFIG_LEGACY_ALTER_TABLE SQLITE_DBCONFIG_LEGACY_FILE_FORMAT SQLITE_DBCONFIG_LOOKASIDE SQLITE_DBCONFIG_MAINDBNAME SQLITE_DBCONFIG_MAX SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE SQLITE_DBCONFIG_RESET_DATABASE SQLITE_DBCONFIG_TRIGGER_EQP SQLITE_DBCONFIG_TRUSTED_SCHEMA SQLITE_DBCONFIG_WRITABLE_SCHEMA -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Database Connection Configuration Options</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
+#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
+#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
+#define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */
+#define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */
+#define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */
+#define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */
+#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
+#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
+#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
+#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
+#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
+#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
+#define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */
+#define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
+#define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */
+#define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */
+#define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */
+#define SQLITE_DBCONFIG_MAX 1017 /* Largest DBCONFIG */
+</pre></blockquote>
+<p>
+These constants are the available integer configuration options that
+can be passed as the second argument to the <a href="../c3ref/db_config.html">sqlite3_db_config()</a> interface.</p>
+
+<p>New configuration options may be added in future releases of SQLite.
+Existing configuration options might be discontinued. Applications
+should check the return code from <a href="../c3ref/db_config.html">sqlite3_db_config()</a> to make sure that
+the call worked. The <a href="../c3ref/db_config.html">sqlite3_db_config()</a> interface will return a
+non-zero <a href="../rescode.html">error code</a> if a discontinued or unsupported configuration option
+is invoked.</p>
+
+<p><dl>
+<a name="sqlitedbconfiglookaside"></a>
+
+<dt>SQLITE_DBCONFIG_LOOKASIDE</dt>
+<dd> This option takes three additional arguments that determine the
+<a href="../malloc.html#lookaside">lookaside memory allocator</a> configuration for the <a href="../c3ref/sqlite3.html">database connection</a>.
+The first argument (the third parameter to <a href="../c3ref/db_config.html">sqlite3_db_config()</a> is a
+pointer to a memory buffer to use for lookaside memory.
+The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb
+may be NULL in which case SQLite will allocate the
+lookaside buffer itself using <a href="../c3ref/free.html">sqlite3_malloc()</a>. The second argument is the
+size of each lookaside buffer slot. The third argument is the number of
+slots. The size of the buffer in the first argument must be greater than
+or equal to the product of the second and third arguments. The buffer
+must be aligned to an 8-byte boundary. If the second argument to
+SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally
+rounded down to the next smaller multiple of 8. The lookaside memory
+configuration for a database connection can only be changed when that
+connection is not currently using lookaside memory, or in other words
+when the "current value" returned by
+<a href="../c3ref/db_status.html">sqlite3_db_status</a>(D,<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a>,...) is zero.
+Any attempt to change the lookaside memory configuration when lookaside
+memory is in use leaves the configuration unchanged and returns
+<a href="../rescode.html#busy">SQLITE_BUSY</a>.</dd></p>
+
+<p><a name="sqlitedbconfigenablefkey"></a>
+
+<dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt>
+<dd> This option is used to enable or disable the enforcement of
+<a href="../foreignkeys.html">foreign key constraints</a>. There should be two additional arguments.
+The first argument is an integer which is 0 to disable FK enforcement,
+positive to enable FK enforcement or negative to leave FK enforcement
+unchanged. The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether FK enforcement is off or on
+following this call. The second parameter may be a NULL pointer, in
+which case the FK enforcement setting is not reported back. </dd></p>
+
+<p><a name="sqlitedbconfigenabletrigger"></a>
+
+<dt>SQLITE_DBCONFIG_ENABLE_TRIGGER</dt>
+<dd> This option is used to enable or disable <a href="../lang_createtrigger.html">triggers</a>.
+There should be two additional arguments.
+The first argument is an integer which is 0 to disable triggers,
+positive to enable triggers or negative to leave the setting unchanged.
+The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether triggers are disabled or enabled
+following this call. The second parameter may be a NULL pointer, in
+which case the trigger setting is not reported back.</p>
+
+<p><p>Originally this option disabled all triggers. However, since
+SQLite version 3.35.0, TEMP triggers are still allowed even if
+this option is off. So, in other words, this option now only disables
+triggers in the main database schema or in the schemas of ATTACH-ed
+databases. </dd></p>
+
+<p><a name="sqlitedbconfigenableview"></a>
+
+<dt>SQLITE_DBCONFIG_ENABLE_VIEW</dt>
+<dd> This option is used to enable or disable <a href="../lang_createview.html">views</a>.
+There should be two additional arguments.
+The first argument is an integer which is 0 to disable views,
+positive to enable views or negative to leave the setting unchanged.
+The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether views are disabled or enabled
+following this call. The second parameter may be a NULL pointer, in
+which case the view setting is not reported back.</p>
+
+<p><p>Originally this option disabled all views. However, since
+SQLite version 3.35.0, TEMP views are still allowed even if
+this option is off. So, in other words, this option now only disables
+views in the main database schema or in the schemas of ATTACH-ed
+databases. </dd></p>
+
+<p><a name="sqlitedbconfigenablefts3tokenizer"></a>
+
+<dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
+<dd> This option is used to enable or disable the
+<a href="../fts3.html#f3tknzr">fts3_tokenizer()</a> function which is part of the
+<a href="../fts3.html">FTS3</a> full-text search engine extension.
+There should be two additional arguments.
+The first argument is an integer which is 0 to disable fts3_tokenizer() or
+positive to enable fts3_tokenizer() or negative to leave the setting
+unchanged.
+The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether fts3_tokenizer is disabled or enabled
+following this call. The second parameter may be a NULL pointer, in
+which case the new setting is not reported back. </dd></p>
+
+<p><a name="sqlitedbconfigenableloadextension"></a>
+
+<dt>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</dt>
+<dd> This option is used to enable or disable the <a href="../c3ref/load_extension.html">sqlite3_load_extension()</a>
+interface independently of the <a href="../lang_corefunc.html#load_extension">load_extension()</a> SQL function.
+The <a href="../c3ref/enable_load_extension.html">sqlite3_enable_load_extension()</a> API enables or disables both the
+C-API <a href="../c3ref/load_extension.html">sqlite3_load_extension()</a> and the SQL function <a href="../lang_corefunc.html#load_extension">load_extension()</a>.
+There should be two additional arguments.
+When the first argument to this interface is 1, then only the C-API is
+enabled and the SQL function remains disabled. If the first argument to
+this interface is 0, then both the C-API and the SQL function are disabled.
+If the first argument is -1, then no changes are made to state of either the
+C-API or the SQL function.
+The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether <a href="../c3ref/load_extension.html">sqlite3_load_extension()</a> interface
+is disabled or enabled following this call. The second parameter may
+be a NULL pointer, in which case the new setting is not reported back.
+</dd></p>
+
+<p><a name="sqlitedbconfigmaindbname"></a>
+ <dt>SQLITE_DBCONFIG_MAINDBNAME</dt>
+<dd> This option is used to change the name of the "main" database
+schema. The sole argument is a pointer to a constant UTF8 string
+which will become the new schema name in place of "main". SQLite
+does not make a copy of the new main schema name string, so the application
+must ensure that the argument passed into this DBCONFIG option is unchanged
+until after the database connection closes.
+</dd></p>
+
+<p><a name="sqlitedbconfignockptonclose"></a>
+
+<dt>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</dt>
+<dd> Usually, when a database in wal mode is closed or detached from a
+database handle, SQLite checks if this will mean that there are now no
+connections at all to the database. If so, it performs a checkpoint
+operation before closing the connection. This option may be used to
+override this behaviour. The first parameter passed to this operation
+is an integer - positive to disable checkpoints-on-close, or zero (the
+default) to enable them, and negative to leave the setting unchanged.
+The second parameter is a pointer to an integer
+into which is written 0 or 1 to indicate whether checkpoints-on-close
+have been disabled - 0 if they are not disabled, 1 if they are.
+</dd></p>
+
+<p><a name="sqlitedbconfigenableqpsg"></a>
+ <dt>SQLITE_DBCONFIG_ENABLE_QPSG</dt>
+<dd>The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates
+the <a href="../queryplanner-ng.html#qpstab">query planner stability guarantee</a> (QPSG). When the QPSG is active,
+a single SQL query statement will always use the same algorithm regardless
+of values of <a href="../lang_expr.html#varparam">bound parameters</a>. The QPSG disables some query optimizations
+that look at the values of bound parameters, which can make some queries
+slower. But the QPSG has the advantage of more predictable behavior. With
+the QPSG active, SQLite will always use the same query plan in the field as
+was used during testing in the lab.
+The first argument to this setting is an integer which is 0 to disable
+the QPSG, positive to enable QPSG, or negative to leave the setting
+unchanged. The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether the QPSG is disabled or enabled
+following this call.
+</dd></p>
+
+<p><a name="sqlitedbconfigtriggereqp"></a>
+ <dt>SQLITE_DBCONFIG_TRIGGER_EQP</dt>
+<dd> By default, the output of EXPLAIN QUERY PLAN commands does not
+include output for any operations performed by trigger programs. This
+option is used to set or clear (the default) a flag that governs this
+behavior. The first parameter passed to this operation is an integer -
+positive to enable output for trigger programs, or zero to disable it,
+or negative to leave the setting unchanged.
+The second parameter is a pointer to an integer into which is written
+0 or 1 to indicate whether output-for-triggers has been disabled - 0 if
+it is not disabled, 1 if it is.
+</dd></p>
+
+<p><a name="sqlitedbconfigresetdatabase"></a>
+ <dt>SQLITE_DBCONFIG_RESET_DATABASE</dt>
+<dd> Set the SQLITE_DBCONFIG_RESET_DATABASE flag and then run
+<a href="../lang_vacuum.html">VACUUM</a> in order to reset a database back to an empty database
+with no schema and no content. The following process works even for
+a badly corrupted database file:
+<ol>
+<li> If the database connection is newly opened, make sure it has read the
+database schema by preparing then discarding some query against the
+database, or calling sqlite3_table_column_metadata(), ignoring any
+errors. This step is only necessary if the application desires to keep
+the database in WAL mode after the reset if it was in WAL mode before
+the reset.
+<li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0);
+<li> <a href="../c3ref/exec.html">sqlite3_exec</a>(db, "<a href="../lang_vacuum.html">VACUUM</a>", 0, 0, 0);
+<li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0);
+</ol>
+Because resetting a database is destructive and irreversible, the
+process requires the use of this obscure API and multiple steps to help
+ensure that it does not happen by accident.</p>
+
+<p><a name="sqlitedbconfigdefensive"></a>
+ <dt>SQLITE_DBCONFIG_DEFENSIVE</dt>
+<dd>The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the
+"defensive" flag for a database connection. When the defensive
+flag is enabled, language features that allow ordinary SQL to
+deliberately corrupt the database file are disabled. The disabled
+features include but are not limited to the following:
+<ul>
+<li> The <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a> statement.
+<li> The <a href="../pragma.html#pragma_journal_mode">PRAGMA journal_mode=OFF</a> statement.
+<li> The <a href="../pragma.html#pragma_schema_version">PRAGMA schema_version=N</a> statement.
+<li> Writes to the <a href="../dbpage.html">sqlite_dbpage</a> virtual table.
+<li> Direct writes to <a href="../vtab.html#xshadowname">shadow tables</a>.
+</ul>
+</dd></p>
+
+<p><a name="sqlitedbconfigwritableschema"></a>
+ <dt>SQLITE_DBCONFIG_WRITABLE_SCHEMA</dt>
+<dd>The SQLITE_DBCONFIG_WRITABLE_SCHEMA option activates or deactivates the
+"writable_schema" flag. This has the same effect and is logically equivalent
+to setting <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a> or <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema=OFF</a>.
+The first argument to this setting is an integer which is 0 to disable
+the writable_schema, positive to enable writable_schema, or negative to
+leave the setting unchanged. The second parameter is a pointer to an
+integer into which is written 0 or 1 to indicate whether the writable_schema
+is enabled or disabled following this call.
+</dd></p>
+
+<p><a name="sqlitedbconfiglegacyaltertable"></a>
+
+<dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
+<dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
+the legacy behavior of the <a href="../lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> command such it
+behaves as it did prior to <a href="../releaselog/3_24_0.html">version 3.24.0</a> (2018-06-04). See the
+"Compatibility Notice" on the <a href="../lang_altertable.html#altertabrename">ALTER TABLE RENAME documentation</a> for
+additional information. This feature can also be turned on and off
+using the <a href="../pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table</a> statement.
+</dd></p>
+
+<p><a name="sqlitedbconfigdqsdml"></a>
+
+<dt>SQLITE_DBCONFIG_DQS_DML</td>
+<dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
+the legacy <a href="../quirks.html#dblquote">double-quoted string literal</a> misfeature for DML statements
+only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
+default value of this setting is determined by the <a href="../compile.html#dqs">-DSQLITE_DQS</a>
+compile-time option.
+</dd></p>
+
+<p><a name="sqlitedbconfigdqsddl"></a>
+
+<dt>SQLITE_DBCONFIG_DQS_DDL</td>
+<dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
+the legacy <a href="../quirks.html#dblquote">double-quoted string literal</a> misfeature for DDL statements,
+such as CREATE TABLE and CREATE INDEX. The
+default value of this setting is determined by the <a href="../compile.html#dqs">-DSQLITE_DQS</a>
+compile-time option.
+</dd></p>
+
+<p><a name="sqlitedbconfigtrustedschema"></a>
+
+<dt>SQLITE_DBCONFIG_TRUSTED_SCHEMA</td>
+<dd>The SQLITE_DBCONFIG_TRUSTED_SCHEMA option tells SQLite to
+assume that database schemas are untainted by malicious content.
+When the SQLITE_DBCONFIG_TRUSTED_SCHEMA option is disabled, SQLite
+takes additional defensive steps to protect the application from harm
+including:
+<ul>
+<li> Prohibit the use of SQL functions inside triggers, views,
+CHECK constraints, DEFAULT clauses, expression indexes,
+partial indexes, or generated columns
+unless those functions are tagged with <a href="../c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a>.
+<li> Prohibit the use of virtual tables inside of triggers or views
+unless those virtual tables are tagged with <a href="../c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a>.
+</ul>
+This setting defaults to "on" for legacy compatibility, however
+all applications are advised to turn it off if possible. This setting
+can also be controlled using the <a href="../pragma.html#pragma_trusted_schema">PRAGMA trusted_schema</a> statement.
+</dd></p>
+
+<p><a name="sqlitedbconfiglegacyfileformat"></a>
+
+<dt>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</td>
+<dd>The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates
+the legacy file format flag. When activated, this flag causes all newly
+created database file to have a schema format version number (the 4-byte
+integer found at offset 44 into the database header) of 1. This in turn
+means that the resulting database file will be readable and writable by
+any SQLite version back to 3.0.0 (2004-06-18). Without this setting,
+newly created databases are generally not understandable by SQLite versions
+prior to 3.3.0 (2006-01-11). As these words are written, there
+is now scarcely any need to generated database files that are compatible
+all the way back to version 3.0.0, and so this setting is of little
+practical use, but is provided so that SQLite can continue to claim the
+ability to generate new database files that are compatible with version
+3.0.0.
+<p>Note that when the SQLITE_DBCONFIG_LEGACY_FILE_FORMAT setting is on,
+the <a href="../lang_vacuum.html">VACUUM</a> command will fail with an obscure error when attempting to
+process a table with generated columns and a descending index. This is
+not considered a bug since SQLite versions 3.3.0 and earlier do not support
+either generated columns or decending indexes.
+</dd>
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_dbstatus_options.html b/www/c3ref/c_dbstatus_options.html
new file mode 100644
index 0000000..96716c6
--- /dev/null
+++ b/www/c3ref/c_dbstatus_options.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Status Parameters for database connections</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {SQLITE_DBSTATUS options} SQLITE_DBSTATUS_CACHE_HIT SQLITE_DBSTATUS_CACHE_MISS SQLITE_DBSTATUS_CACHE_SPILL SQLITE_DBSTATUS_CACHE_USED SQLITE_DBSTATUS_CACHE_USED_SHARED SQLITE_DBSTATUS_CACHE_WRITE SQLITE_DBSTATUS_DEFERRED_FKS SQLITE_DBSTATUS_LOOKASIDE_HIT SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE SQLITE_DBSTATUS_LOOKASIDE_USED SQLITE_DBSTATUS_MAX SQLITE_DBSTATUS_SCHEMA_USED SQLITE_DBSTATUS_STMT_USED -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Status Parameters for database connections</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_DBSTATUS_LOOKASIDE_USED 0
+#define SQLITE_DBSTATUS_CACHE_USED 1
+#define SQLITE_DBSTATUS_SCHEMA_USED 2
+#define SQLITE_DBSTATUS_STMT_USED 3
+#define SQLITE_DBSTATUS_LOOKASIDE_HIT 4
+#define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5
+#define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6
+#define SQLITE_DBSTATUS_CACHE_HIT 7
+#define SQLITE_DBSTATUS_CACHE_MISS 8
+#define SQLITE_DBSTATUS_CACHE_WRITE 9
+#define SQLITE_DBSTATUS_DEFERRED_FKS 10
+#define SQLITE_DBSTATUS_CACHE_USED_SHARED 11
+#define SQLITE_DBSTATUS_CACHE_SPILL 12
+#define SQLITE_DBSTATUS_MAX 12 /* Largest defined DBSTATUS */
+</pre></blockquote>
+<p>
+These constants are the available integer "verbs" that can be passed as
+the second argument to the <a href="../c3ref/db_status.html">sqlite3_db_status()</a> interface.</p>
+
+<p>New verbs may be added in future releases of SQLite. Existing verbs
+might be discontinued. Applications should check the return code from
+<a href="../c3ref/db_status.html">sqlite3_db_status()</a> to make sure that the call worked.
+The <a href="../c3ref/db_status.html">sqlite3_db_status()</a> interface will return a non-zero error code
+if a discontinued or unsupported verb is invoked.</p>
+
+<p><dl>
+<a name="sqlitedbstatuslookasideused"></a>
+ <dt>SQLITE_DBSTATUS_LOOKASIDE_USED</dt>
+<dd>This parameter returns the number of lookaside memory slots currently
+checked out.</dd></p>
+
+<p><a name="sqlitedbstatuslookasidehit"></a>
+ <dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
+<dd>This parameter returns the number of malloc attempts that were
+satisfied using lookaside memory. Only the high-water value is meaningful;
+the current value is always zero.</p>
+
+<p><a name="sqlitedbstatuslookasidemisssize"></a>
+
+<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt>
+<dd>This parameter returns the number malloc attempts that might have
+been satisfied using lookaside memory but failed due to the amount of
+memory requested being larger than the lookaside slot size.
+Only the high-water value is meaningful;
+the current value is always zero.</p>
+
+<p><a name="sqlitedbstatuslookasidemissfull"></a>
+
+<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt>
+<dd>This parameter returns the number malloc attempts that might have
+been satisfied using lookaside memory but failed due to all lookaside
+memory already being in use.
+Only the high-water value is meaningful;
+the current value is always zero.</p>
+
+<p><a name="sqlitedbstatuscacheused"></a>
+ <dt>SQLITE_DBSTATUS_CACHE_USED</dt>
+<dd>This parameter returns the approximate number of bytes of heap
+memory used by all pager caches associated with the database connection.
+The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.</p>
+
+<p><a name="sqlitedbstatuscacheusedshared"></a>
+
+<dt>SQLITE_DBSTATUS_CACHE_USED_SHARED</dt>
+<dd>This parameter is similar to DBSTATUS_CACHE_USED, except that if a
+pager cache is shared between two or more connections the bytes of heap
+memory used by that pager cache is divided evenly between the attached
+connections. In other words, if none of the pager caches associated
+with the database connection are shared, this request returns the same
+value as DBSTATUS_CACHE_USED. Or, if one or more or the pager caches are
+shared, the value returned by this call will be smaller than that returned
+by DBSTATUS_CACHE_USED. The highwater mark associated with
+SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0.</p>
+
+<p><a name="sqlitedbstatusschemaused"></a>
+ <dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
+<dd>This parameter returns the approximate number of bytes of heap
+memory used to store the schema for all databases associated
+with the connection - main, temp, and any <a href="../lang_attach.html">ATTACH</a>-ed databases.
+The full amount of memory used by the schemas is reported, even if the
+schema memory is shared with other database connections due to
+<a href="../sharedcache.html">shared cache mode</a> being enabled.
+The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.</p>
+
+<p><a name="sqlitedbstatusstmtused"></a>
+ <dt>SQLITE_DBSTATUS_STMT_USED</dt>
+<dd>This parameter returns the approximate number of bytes of heap
+and lookaside memory used by all prepared statements associated with
+the database connection.
+The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
+</dd></p>
+
+<p><a name="sqlitedbstatuscachehit"></a>
+ <dt>SQLITE_DBSTATUS_CACHE_HIT</dt>
+<dd>This parameter returns the number of pager cache hits that have
+occurred. The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT
+is always 0.
+</dd></p>
+
+<p><a name="sqlitedbstatuscachemiss"></a>
+ <dt>SQLITE_DBSTATUS_CACHE_MISS</dt>
+<dd>This parameter returns the number of pager cache misses that have
+occurred. The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS
+is always 0.
+</dd></p>
+
+<p><a name="sqlitedbstatuscachewrite"></a>
+ <dt>SQLITE_DBSTATUS_CACHE_WRITE</dt>
+<dd>This parameter returns the number of dirty cache entries that have
+been written to disk. Specifically, the number of pages written to the
+wal file in wal mode databases, or the number of pages written to the
+database file in rollback mode databases. Any pages written as part of
+transaction rollback or database recovery operations are not included.
+If an IO or other error occurs while writing a page to disk, the effect
+on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is undefined. The
+highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0.
+</dd></p>
+
+<p><a name="sqlitedbstatuscachespill"></a>
+ <dt>SQLITE_DBSTATUS_CACHE_SPILL</dt>
+<dd>This parameter returns the number of dirty cache entries that have
+been written to disk in the middle of a transaction due to the page
+cache overflowing. Transactions are more efficient if they are written
+to disk all at once. When pages spill mid-transaction, that introduces
+additional overhead. This parameter can be used help identify
+inefficiencies that can be resolved by increasing the cache size.
+</dd></p>
+
+<p><a name="sqlitedbstatusdeferredfks"></a>
+ <dt>SQLITE_DBSTATUS_DEFERRED_FKS</dt>
+<dd>This parameter returns zero for the current value if and only if
+all foreign key constraints (deferred or immediate) have been
+resolved. The highwater mark is always 0.
+</dd>
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_deny.html b/www/c3ref/c_deny.html
new file mode 100644
index 0000000..c5d0c78
--- /dev/null
+++ b/www/c3ref/c_deny.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Authorizer Return Codes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_DENY SQLITE_IGNORE -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Authorizer Return Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_DENY 1 /* Abort the SQL statement with an error */
+#define SQLITE_IGNORE 2 /* Don't allow access, but don't generate an error */
+</pre></blockquote>
+<p>
+The <a href="../c3ref/set_authorizer.html">authorizer callback function</a> must
+return either <a href="../rescode.html#ok">SQLITE_OK</a> or one of these two constants in order
+to signal SQLite whether or not the action is permitted. See the
+<a href="../c3ref/set_authorizer.html">authorizer documentation</a> for additional
+information.</p>
+
+<p>Note that SQLITE_IGNORE is also used as a <a href="../c3ref/c_fail.html">conflict resolution mode</a>
+returned from the <a href="../c3ref/vtab_on_conflict.html">sqlite3_vtab_on_conflict()</a> interface.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_deserialize_freeonclose.html b/www/c3ref/c_deserialize_freeonclose.html
new file mode 100644
index 0000000..d23f7a2
--- /dev/null
+++ b/www/c3ref/c_deserialize_freeonclose.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Flags for sqlite3_deserialize()</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_DESERIALIZE_FREEONCLOSE SQLITE_DESERIALIZE_READONLY SQLITE_DESERIALIZE_RESIZEABLE -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Flags for sqlite3_deserialize()</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_DESERIALIZE_FREEONCLOSE 1 /* Call sqlite3_free() on close */
+#define SQLITE_DESERIALIZE_RESIZEABLE 2 /* Resize using sqlite3_realloc64() */
+#define SQLITE_DESERIALIZE_READONLY 4 /* Database is read-only */
+</pre></blockquote>
+<p>
+The following are allowed values for 6th argument (the F argument) to
+the <a href="../c3ref/deserialize.html">sqlite3_deserialize(D,S,P,N,M,F)</a> interface.</p>
+
+<p>The SQLITE_DESERIALIZE_FREEONCLOSE means that the database serialization
+in the P argument is held in memory obtained from <a href="../c3ref/free.html">sqlite3_malloc64()</a>
+and that SQLite should take ownership of this memory and automatically
+free it when it has finished using it. Without this flag, the caller
+is responsible for freeing any dynamically allocated memory.</p>
+
+<p>The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to
+grow the size of the database using calls to <a href="../c3ref/free.html">sqlite3_realloc64()</a>. This
+flag should only be used if SQLITE_DESERIALIZE_FREEONCLOSE is also used.
+Without this flag, the deserialized database cannot increase in size beyond
+the number of bytes specified by the M parameter.</p>
+
+<p>The SQLITE_DESERIALIZE_READONLY flag means that the deserialized database
+should be treated as read-only.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_deterministic.html b/www/c3ref/c_deterministic.html
new file mode 100644
index 0000000..7e9da00
--- /dev/null
+++ b/www/c3ref/c_deterministic.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Function Flags</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_DETERMINISTIC SQLITE_DIRECTONLY SQLITE_INNOCUOUS SQLITE_SUBTYPE -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Function Flags</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_DETERMINISTIC 0x000000800
+#define SQLITE_DIRECTONLY 0x000080000
+#define SQLITE_SUBTYPE 0x000100000
+#define SQLITE_INNOCUOUS 0x000200000
+</pre></blockquote>
+<p>
+These constants may be ORed together with the
+<a href="../c3ref/c_any.html">preferred text encoding</a> as the fourth argument
+to <a href="../c3ref/create_function.html">sqlite3_create_function()</a>, <a href="../c3ref/create_function.html">sqlite3_create_function16()</a>, or
+<a href="../c3ref/create_function.html">sqlite3_create_function_v2()</a>.</p>
+
+<p><dl>
+<a name="sqlitedeterministic"></a>
+ <dt>SQLITE_DETERMINISTIC</dt><dd>
+The SQLITE_DETERMINISTIC flag means that the new function always gives
+the same output when the input parameters are the same.
+The <a href="../lang_corefunc.html#abs">abs() function</a> is deterministic, for example, but
+<a href="../lang_corefunc.html#randomblob">randomblob()</a> is not. Functions must
+be deterministic in order to be used in certain contexts such as
+with the WHERE clause of <a href="../partialindex.html">partial indexes</a> or in <a href="../gencol.html">generated columns</a>.
+SQLite might also optimize deterministic functions by factoring them
+out of inner loops.
+</dd></p>
+
+<p><a name="sqlitedirectonly"></a>
+ <dt>SQLITE_DIRECTONLY</dt><dd>
+The SQLITE_DIRECTONLY flag means that the function may only be invoked
+from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in
+schema structures such as <a href="../lang_createtable.html#ckconst">CHECK constraints</a>, <a href="../lang_createtable.html#dfltval">DEFAULT clauses</a>,
+<a href="../expridx.html">expression indexes</a>, <a href="../partialindex.html">partial indexes</a>, or <a href="../gencol.html">generated columns</a>.
+The SQLITE_DIRECTONLY flags is a security feature which is recommended
+for all <a href="../appfunc.html">application-defined SQL functions</a>, and especially for functions
+that have side-effects or that could potentially leak sensitive
+information.
+</dd></p>
+
+<p><a name="sqliteinnocuous"></a>
+ <dt>SQLITE_INNOCUOUS</dt><dd>
+The SQLITE_INNOCUOUS flag means that the function is unlikely
+to cause problems even if misused. An innocuous function should have
+no side effects and should not depend on any values other than its
+input parameters. The <a href="../lang_corefunc.html#abs">abs() function</a> is an example of an
+innocuous function.
+The <a href="../lang_corefunc.html#load_extension">load_extension() SQL function</a> is not innocuous because of its
+side effects.
+<p> SQLITE_INNOCUOUS is similar to SQLITE_DETERMINISTIC, but is not
+exactly the same. The <a href="../lang_corefunc.html#random">random() function</a> is an example of a
+function that is innocuous but not deterministic.
+<p>Some heightened security settings
+(<a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a> and <a href="../pragma.html#pragma_trusted_schema">PRAGMA trusted_schema=OFF</a>)
+disable the use of SQL functions inside views and triggers and in
+schema structures such as <a href="../lang_createtable.html#ckconst">CHECK constraints</a>, <a href="../lang_createtable.html#dfltval">DEFAULT clauses</a>,
+<a href="../expridx.html">expression indexes</a>, <a href="../partialindex.html">partial indexes</a>, and <a href="../gencol.html">generated columns</a> unless
+the function is tagged with SQLITE_INNOCUOUS. Most built-in functions
+are innocuous. Developers are advised to avoid using the
+SQLITE_INNOCUOUS flag for application-defined functions unless the
+function has been carefully audited and found to be free of potentially
+security-adverse side-effects and information-leaks.
+</dd></p>
+
+<p><a name="sqlitesubtype"></a>
+ <dt>SQLITE_SUBTYPE</dt><dd>
+The SQLITE_SUBTYPE flag indicates to SQLite that a function may call
+<a href="../c3ref/value_subtype.html">sqlite3_value_subtype()</a> to inspect the sub-types of its arguments.
+Specifying this flag makes no difference for scalar or aggregate user
+functions. However, if it is not specified for a user-defined window
+function, then any sub-types belonging to arguments passed to the window
+function may be discarded before the window function is called (i.e.
+sqlite3_value_subtype() will always return 0).
+</dd>
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_fail.html b/www/c3ref/c_fail.html
new file mode 100644
index 0000000..3579d78
--- /dev/null
+++ b/www/c3ref/c_fail.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Conflict resolution modes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_FAIL SQLITE_REPLACE SQLITE_ROLLBACK {conflict resolution mode} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Conflict resolution modes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_ROLLBACK 1
+/* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
+#define SQLITE_FAIL 3
+/* #define SQLITE_ABORT 4 // Also an error code */
+#define SQLITE_REPLACE 5
+</pre></blockquote>
+<p>
+These constants are returned by <a href="../c3ref/vtab_on_conflict.html">sqlite3_vtab_on_conflict()</a> to
+inform a <a href="../vtab.html">virtual table</a> implementation what the <a href="../lang_conflict.html">ON CONFLICT</a> mode
+is for the SQL statement being evaluated.</p>
+
+<p>Note that the <a href="../c3ref/c_deny.html">SQLITE_IGNORE</a> constant is also used as a potential
+return value from the <a href="../c3ref/set_authorizer.html">sqlite3_set_authorizer()</a> callback and that
+<a href="../rescode.html#abort">SQLITE_ABORT</a> is also a <a href="../rescode.html">result code</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_fcntl_begin_atomic_write.html b/www/c3ref/c_fcntl_begin_atomic_write.html
new file mode 100644
index 0000000..5642d65
--- /dev/null
+++ b/www/c3ref/c_fcntl_begin_atomic_write.html
@@ -0,0 +1,546 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Standard File Control Opcodes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_FCNTL_BEGIN_ATOMIC_WRITE SQLITE_FCNTL_BUSYHANDLER SQLITE_FCNTL_CHUNK_SIZE SQLITE_FCNTL_CKPT_DONE SQLITE_FCNTL_CKPT_START SQLITE_FCNTL_CKSM_FILE SQLITE_FCNTL_COMMIT_ATOMIC_WRITE SQLITE_FCNTL_COMMIT_PHASETWO SQLITE_FCNTL_DATA_VERSION SQLITE_FCNTL_EXTERNAL_READER SQLITE_FCNTL_FILE_POINTER SQLITE_FCNTL_GET_LOCKPROXYFILE SQLITE_FCNTL_HAS_MOVED SQLITE_FCNTL_JOURNAL_POINTER SQLITE_FCNTL_LAST_ERRNO SQLITE_FCNTL_LOCKSTATE SQLITE_FCNTL_LOCK_TIMEOUT SQLITE_FCNTL_MMAP_SIZE SQLITE_FCNTL_OVERWRITE SQLITE_FCNTL_PDB SQLITE_FCNTL_PERSIST_WAL SQLITE_FCNTL_POWERSAFE_OVERWRITE SQLITE_FCNTL_PRAGMA SQLITE_FCNTL_RBU SQLITE_FCNTL_RESERVE_BYTES SQLITE_FCNTL_RESET_CACHE SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE SQLITE_FCNTL_SET_LOCKPROXYFILE SQLITE_FCNTL_SIZE_HINT SQLITE_FCNTL_SIZE_LIMIT SQLITE_FCNTL_SYNC SQLITE_FCNTL_SYNC_OMITTED SQLITE_FCNTL_TEMPFILENAME SQLITE_FCNTL_TRACE SQLITE_FCNTL_VFSNAME SQLITE_FCNTL_VFS_POINTER SQLITE_FCNTL_WAL_BLOCK SQLITE_FCNTL_WIN32_AV_RETRY SQLITE_FCNTL_WIN32_GET_HANDLE SQLITE_FCNTL_WIN32_SET_HANDLE SQLITE_FCNTL_ZIPVFS {file control opcode} {file control opcodes} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Standard File Control Opcodes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_FCNTL_LOCKSTATE 1
+#define SQLITE_FCNTL_GET_LOCKPROXYFILE 2
+#define SQLITE_FCNTL_SET_LOCKPROXYFILE 3
+#define SQLITE_FCNTL_LAST_ERRNO 4
+#define SQLITE_FCNTL_SIZE_HINT 5
+#define SQLITE_FCNTL_CHUNK_SIZE 6
+#define SQLITE_FCNTL_FILE_POINTER 7
+#define SQLITE_FCNTL_SYNC_OMITTED 8
+#define SQLITE_FCNTL_WIN32_AV_RETRY 9
+#define SQLITE_FCNTL_PERSIST_WAL 10
+#define SQLITE_FCNTL_OVERWRITE 11
+#define SQLITE_FCNTL_VFSNAME 12
+#define SQLITE_FCNTL_POWERSAFE_OVERWRITE 13
+#define SQLITE_FCNTL_PRAGMA 14
+#define SQLITE_FCNTL_BUSYHANDLER 15
+#define SQLITE_FCNTL_TEMPFILENAME 16
+#define SQLITE_FCNTL_MMAP_SIZE 18
+#define SQLITE_FCNTL_TRACE 19
+#define SQLITE_FCNTL_HAS_MOVED 20
+#define SQLITE_FCNTL_SYNC 21
+#define SQLITE_FCNTL_COMMIT_PHASETWO 22
+#define SQLITE_FCNTL_WIN32_SET_HANDLE 23
+#define SQLITE_FCNTL_WAL_BLOCK 24
+#define SQLITE_FCNTL_ZIPVFS 25
+#define SQLITE_FCNTL_RBU 26
+#define SQLITE_FCNTL_VFS_POINTER 27
+#define SQLITE_FCNTL_JOURNAL_POINTER 28
+#define SQLITE_FCNTL_WIN32_GET_HANDLE 29
+#define SQLITE_FCNTL_PDB 30
+#define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 31
+#define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32
+#define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33
+#define SQLITE_FCNTL_LOCK_TIMEOUT 34
+#define SQLITE_FCNTL_DATA_VERSION 35
+#define SQLITE_FCNTL_SIZE_LIMIT 36
+#define SQLITE_FCNTL_CKPT_DONE 37
+#define SQLITE_FCNTL_RESERVE_BYTES 38
+#define SQLITE_FCNTL_CKPT_START 39
+#define SQLITE_FCNTL_EXTERNAL_READER 40
+#define SQLITE_FCNTL_CKSM_FILE 41
+#define SQLITE_FCNTL_RESET_CACHE 42
+</pre></blockquote>
+<p>
+These integer constants are opcodes for the xFileControl method
+of the <a href="../c3ref/io_methods.html">sqlite3_io_methods</a> object and for the <a href="../c3ref/file_control.html">sqlite3_file_control()</a>
+interface.</p>
+
+<p><ul>
+<li><a name="sqlitefcntllockstate"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">SQLITE_FCNTL_LOCKSTATE</a> opcode is used for debugging. This
+opcode causes the xFileControl method to write the current state of
+the lock (one of <a href="../c3ref/c_lock_exclusive.html">SQLITE_LOCK_NONE</a>, <a href="../c3ref/c_lock_exclusive.html">SQLITE_LOCK_SHARED</a>,
+<a href="../c3ref/c_lock_exclusive.html">SQLITE_LOCK_RESERVED</a>, <a href="../c3ref/c_lock_exclusive.html">SQLITE_LOCK_PENDING</a>, or <a href="../c3ref/c_lock_exclusive.html">SQLITE_LOCK_EXCLUSIVE</a>)
+into an integer that the pArg argument points to.
+This capability is only available if SQLite is compiled with <a href="../compile.html#debug">SQLITE_DEBUG</a>.</p>
+
+<p><li><a name="sqlitefcntlsizehint"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a> opcode is used by SQLite to give the VFS
+layer a hint of how large the database file will grow to be during the
+current transaction. This hint is not guaranteed to be accurate but it
+is often close. The underlying VFS might choose to preallocate database
+file space based on this hint in order to help writes to the database
+file run faster.</p>
+
+<p><li><a name="sqlitefcntlsizelimit"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> opcode is used by in-memory VFS that
+implements <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> to set an upper bound on the size
+of the in-memory database. The argument is a pointer to a <a href="../c3ref/int64.html">sqlite3_int64</a>.
+If the integer pointed to is negative, then it is filled in with the
+current limit. Otherwise the limit is set to the larger of the value
+of the integer pointed to and the current database size. The integer
+pointed to is set to the new limit.</p>
+
+<p><li><a name="sqlitefcntlchunksize"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">SQLITE_FCNTL_CHUNK_SIZE</a> opcode is used to request that the VFS
+extends and truncates the database file in chunks of a size specified
+by the user. The fourth argument to <a href="../c3ref/file_control.html">sqlite3_file_control()</a> should
+point to an integer (type int) containing the new chunk-size to use
+for the nominated database. Allocating database file space in large
+chunks (say 1MB at a time), may reduce file-system fragmentation and
+improve performance on some systems.</p>
+
+<p><li><a name="sqlitefcntlfilepointer"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a> opcode is used to obtain a pointer
+to the <a href="../c3ref/file.html">sqlite3_file</a> object associated with a particular database
+connection. See also <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a>.</p>
+
+<p><li><a name="sqlitefcntljournalpointer"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> opcode is used to obtain a pointer
+to the <a href="../c3ref/file.html">sqlite3_file</a> object associated with the journal file (either
+the <a href="../lockingv3.html#rollback">rollback journal</a> or the <a href="../wal.html">write-ahead log</a>) for a particular database
+connection. See also <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a>.</p>
+
+<p><li><a name="sqlitefcntlsyncomitted"></a>
+
+No longer in use.</p>
+
+<p><li><a name="sqlitefcntlsync"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync">SQLITE_FCNTL_SYNC</a> opcode is generated internally by SQLite and
+sent to the VFS immediately before the xSync method is invoked on a
+database file descriptor. Or, if the xSync method is not invoked
+because the user has configured SQLite with
+<a href="../pragma.html#pragma_synchronous">PRAGMA synchronous=OFF</a> it is invoked in place
+of the xSync method. In most cases, the pointer argument passed with
+this file-control is NULL. However, if the database file is being synced
+as part of a multi-database commit, the argument points to a nul-terminated
+string containing the transactions super-journal file name. VFSes that
+do not need this signal should silently ignore this opcode. Applications
+should not call <a href="../c3ref/file_control.html">sqlite3_file_control()</a> with this opcode as doing so may
+disrupt the operation of the specialized VFSes that do require it.</p>
+
+<p><li><a name="sqlitefcntlcommitphasetwo"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo">SQLITE_FCNTL_COMMIT_PHASETWO</a> opcode is generated internally by SQLite
+and sent to the VFS after a transaction has been committed immediately
+but before the database is unlocked. VFSes that do not need this signal
+should silently ignore this opcode. Applications should not call
+<a href="../c3ref/file_control.html">sqlite3_file_control()</a> with this opcode as doing so may disrupt the
+operation of the specialized VFSes that do require it.</p>
+
+<p><li><a name="sqlitefcntlwin32avretry"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry">SQLITE_FCNTL_WIN32_AV_RETRY</a> opcode is used to configure automatic
+retry counts and intervals for certain disk I/O operations for the
+windows <a href="../vfs.html">VFS</a> in order to provide robustness in the presence of
+anti-virus programs. By default, the windows VFS will retry file read,
+file write, and file delete operations up to 10 times, with a delay
+of 25 milliseconds before the first retry and with the delay increasing
+by an additional 25 milliseconds with each subsequent retry. This
+opcode allows these two values (10 retries and 25 milliseconds of delay)
+to be adjusted. The values are changed for all database connections
+within the same process. The argument is a pointer to an array of two
+integers where the first integer is the new retry count and the second
+integer is the delay. If either integer is negative, then the setting
+is not changed but instead the prior value of that setting is written
+into the array entry, allowing the current retry settings to be
+interrogated. The zDbName parameter is ignored.</p>
+
+<p><li><a name="sqlitefcntlpersistwal"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">SQLITE_FCNTL_PERSIST_WAL</a> opcode is used to set or query the
+persistent <a href="../wal.html">Write Ahead Log</a> setting. By default, the auxiliary
+write ahead log (<a href="../wal.html#walfile">WAL file</a>) and shared memory
+files used for transaction control
+are automatically deleted when the latest connection to the database
+closes. Setting persistent WAL mode causes those files to persist after
+close. Persisting the files is useful when other processes that do not
+have write permission on the directory containing the database file want
+to read the database file, as the WAL and shared memory files must exist
+in order for the database to be readable. The fourth parameter to
+<a href="../c3ref/file_control.html">sqlite3_file_control()</a> for this opcode should be a pointer to an integer.
+That integer is 0 to disable persistent WAL mode or 1 to enable persistent
+WAL mode. If the integer is -1, then it is overwritten with the current
+WAL persistence setting.</p>
+
+<p><li><a name="sqlitefcntlpowersafeoverwrite"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite">SQLITE_FCNTL_POWERSAFE_OVERWRITE</a> opcode is used to set or query the
+persistent "powersafe-overwrite" or "PSOW" setting. The PSOW setting
+determines the <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a> bit of the
+xDeviceCharacteristics methods. The fourth parameter to
+<a href="../c3ref/file_control.html">sqlite3_file_control()</a> for this opcode should be a pointer to an integer.
+That integer is 0 to disable zero-damage mode or 1 to enable zero-damage
+mode. If the integer is -1, then it is overwritten with the current
+zero-damage mode setting.</p>
+
+<p><li><a name="sqlitefcntloverwrite"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite">SQLITE_FCNTL_OVERWRITE</a> opcode is invoked by SQLite after opening
+a write transaction to indicate that, unless it is rolled back for some
+reason, the entire database file will be overwritten by the current
+transaction. This is used by VACUUM operations.</p>
+
+<p><li><a name="sqlitefcntlvfsname"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname">SQLITE_FCNTL_VFSNAME</a> opcode can be used to obtain the names of
+all <a href="../vfs.html">VFSes</a> in the VFS stack. The names are of all VFS shims and the
+final bottom-level VFS are written into memory obtained from
+<a href="../c3ref/free.html">sqlite3_malloc()</a> and the result is stored in the char* variable
+that the fourth parameter of <a href="../c3ref/file_control.html">sqlite3_file_control()</a> points to.
+The caller is responsible for freeing the memory when done. As with
+all file-control actions, there is no guarantee that this will actually
+do anything. Callers should initialize the char* variable to a NULL
+pointer in case this file-control is not implemented. This file-control
+is intended for diagnostic use only.</p>
+
+<p><li><a name="sqlitefcntlvfspointer"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer">SQLITE_FCNTL_VFS_POINTER</a> opcode finds a pointer to the top-level
+<a href="../vfs.html">VFSes</a> currently in use. The argument X in
+sqlite3_file_control(db,SQLITE_FCNTL_VFS_POINTER,X) must be
+of type "<a href="../c3ref/vfs.html">sqlite3_vfs</a> **". This opcodes will set *X
+to a pointer to the top-level VFS.
+When there are multiple VFS shims in the stack, this opcode finds the
+upper-most shim only.</p>
+
+<p><li><a name="sqlitefcntlpragma"></a>
+
+Whenever a <a href="../pragma.html#syntax">PRAGMA</a> statement is parsed, an <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a>
+file control is sent to the open <a href="../c3ref/file.html">sqlite3_file</a> object corresponding
+to the database file to which the pragma statement refers. The argument
+to the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control is an array of
+pointers to strings (char**) in which the second element of the array
+is the name of the pragma and the third element is the argument to the
+pragma or NULL if the pragma has no argument. The handler for an
+<a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control can optionally make the first element
+of the char** argument point to a string obtained from <a href="../c3ref/mprintf.html">sqlite3_mprintf()</a>
+or the equivalent and that string will become the result of the pragma or
+the error message if the pragma fails. If the
+<a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control returns <a href="../rescode.html#notfound">SQLITE_NOTFOUND</a>, then normal
+<a href="../pragma.html#syntax">PRAGMA</a> processing continues. If the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a>
+file control returns <a href="../rescode.html#ok">SQLITE_OK</a>, then the parser assumes that the
+VFS has handled the PRAGMA itself and the parser generates a no-op
+prepared statement if result string is NULL, or that returns a copy
+of the result string if the string is non-NULL.
+If the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control returns
+any result code other than <a href="../rescode.html#ok">SQLITE_OK</a> or <a href="../rescode.html#notfound">SQLITE_NOTFOUND</a>, that means
+that the VFS encountered an error while handling the <a href="../pragma.html#syntax">PRAGMA</a> and the
+compilation of the PRAGMA fails with an error. The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a>
+file control occurs at the beginning of pragma statement analysis and so
+it is able to override built-in <a href="../pragma.html#syntax">PRAGMA</a> statements.</p>
+
+<p><li><a name="sqlitefcntlbusyhandler"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler">SQLITE_FCNTL_BUSYHANDLER</a>
+file-control may be invoked by SQLite on the database file handle
+shortly after it is opened in order to provide a custom VFS with access
+to the connection's busy-handler callback. The argument is of type (void**)
+- an array of two (void *) values. The first (void *) actually points
+to a function of type (int (*)(void *)). In order to invoke the connection's
+busy-handler, this function should be invoked with the second (void *) in
+the array as the only argument. If it returns non-zero, then the operation
+should be retried. If it returns zero, the custom VFS should abandon the
+current operation.</p>
+
+<p><li><a name="sqlitefcntltempfilename"></a>
+
+Applications can invoke the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename">SQLITE_FCNTL_TEMPFILENAME</a> file-control
+to have SQLite generate a
+temporary filename using the same algorithm that is followed to generate
+temporary filenames for TEMP tables and other internal uses. The
+argument should be a char** which will be filled with the filename
+written into memory obtained from <a href="../c3ref/free.html">sqlite3_malloc()</a>. The caller should
+invoke <a href="../c3ref/free.html">sqlite3_free()</a> on the result to avoid a memory leak.</p>
+
+<p><li><a name="sqlitefcntlmmapsize"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize">SQLITE_FCNTL_MMAP_SIZE</a> file control is used to query or set the
+maximum number of bytes that will be used for memory-mapped I/O.
+The argument is a pointer to a value of type sqlite3_int64 that
+is an advisory maximum number of bytes in the file to memory map. The
+pointer is overwritten with the old value. The limit is not changed if
+the value originally pointed to is negative, and so the current limit
+can be queried by passing in a pointer to a negative number. This
+file-control is used internally to implement <a href="../pragma.html#pragma_mmap_size">PRAGMA mmap_size</a>.</p>
+
+<p><li><a name="sqlitefcntltrace"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace">SQLITE_FCNTL_TRACE</a> file control provides advisory information
+to the VFS about what the higher layers of the SQLite stack are doing.
+This file control is used by some VFS activity tracing <a href="../vfs.html#shim">shims</a>.
+The argument is a zero-terminated string. Higher layers in the
+SQLite stack may generate instances of this file control if
+the <a href="../compile.html#use_fcntl_trace">SQLITE_USE_FCNTL_TRACE</a> compile-time option is enabled.</p>
+
+<p><li><a name="sqlitefcntlhasmoved"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlhasmoved">SQLITE_FCNTL_HAS_MOVED</a> file control interprets its argument as a
+pointer to an integer and it writes a boolean into that integer depending
+on whether or not the file has been renamed, moved, or deleted since it
+was first opened.</p>
+
+<p><li><a name="sqlitefcntlwin32gethandle"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> opcode can be used to obtain the
+underlying native file handle associated with a file handle. This file
+control interprets its argument as a pointer to a native file handle and
+writes the resulting value there.</p>
+
+<p><li><a name="sqlitefcntlwin32sethandle"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32sethandle">SQLITE_FCNTL_WIN32_SET_HANDLE</a> opcode is used for debugging. This
+opcode causes the xFileControl method to swap the file handle with the one
+pointed to by the pArg argument. This capability is used during testing
+and only needs to be supported when SQLITE_TEST is defined.</p>
+
+<p><li><a name="sqlitefcntlwalblock"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwalblock">SQLITE_FCNTL_WAL_BLOCK</a> is a signal to the VFS layer that it might
+be advantageous to block on the next WAL lock if the lock is not immediately
+available. The WAL subsystem issues this signal during rare
+circumstances in order to fix a problem with priority inversion.
+Applications should <em>not</em> use this file-control.</p>
+
+<p><li><a name="sqlitefcntlzipvfs"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlzipvfs">SQLITE_FCNTL_ZIPVFS</a> opcode is implemented by zipvfs only. All other
+VFS should return SQLITE_NOTFOUND for this opcode.</p>
+
+<p><li><a name="sqlitefcntlrbu"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrbu">SQLITE_FCNTL_RBU</a> opcode is implemented by the special VFS used by
+the RBU extension only. All other VFS should return SQLITE_NOTFOUND for
+this opcode.</p>
+
+<p><li><a name="sqlitefcntlbeginatomicwrite"></a>
+
+If the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> opcode returns SQLITE_OK, then
+the file descriptor is placed in "batch write mode", which
+means all subsequent write operations will be deferred and done
+atomically at the next <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a>. Systems
+that do not support batch atomic writes will return SQLITE_NOTFOUND.
+Following a successful SQLITE_FCNTL_BEGIN_ATOMIC_WRITE and prior to
+the closing <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a> or
+<a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite">SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE</a>, SQLite will make
+no VFS interface calls on the same <a href="../c3ref/file.html">sqlite3_file</a> file descriptor
+except for calls to the xWrite method and the xFileControl method
+with <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a>.</p>
+
+<p><li><a name="sqlitefcntlcommitatomicwrite"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a> opcode causes all write
+operations since the previous successful call to
+<a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> to be performed atomically.
+This file control returns <a href="../rescode.html#ok">SQLITE_OK</a> if and only if the writes were
+all performed successfully and have been committed to persistent storage.
+Regardless of whether or not it is successful, this file control takes
+the file descriptor out of batch write mode so that all subsequent
+write operations are independent.
+SQLite will never invoke SQLITE_FCNTL_COMMIT_ATOMIC_WRITE without
+a prior successful call to <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a>.</p>
+
+<p><li><a name="sqlitefcntlrollbackatomicwrite"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite">SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE</a> opcode causes all write
+operations since the previous successful call to
+<a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> to be rolled back.
+This file control takes the file descriptor out of batch write mode
+so that all subsequent write operations are independent.
+SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without
+a prior successful call to <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a>.</p>
+
+<p><li><a name="sqlitefcntllocktimeout"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllocktimeout">SQLITE_FCNTL_LOCK_TIMEOUT</a> opcode is used to configure a VFS
+to block for up to M milliseconds before failing when attempting to
+obtain a file lock using the xLock or xShmLock methods of the VFS.
+The parameter is a pointer to a 32-bit signed integer that contains
+the value that M is to be set to. Before returning, the 32-bit signed
+integer is overwritten with the previous value of M.</p>
+
+<p><li><a name="sqlitefcntldataversion"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> opcode is used to detect changes to
+a database file. The argument is a pointer to a 32-bit unsigned integer.
+The "data version" for the pager is written into the pointer. The
+"data version" changes whenever any change occurs to the corresponding
+database file, either through SQL statements on the same database
+connection or through transactions committed by separate database
+connections possibly in other processes. The <a href="../c3ref/total_changes.html">sqlite3_total_changes()</a>
+interface can be used to find if any database on the connection has changed,
+but that interface responds to changes on TEMP as well as MAIN and does
+not provide a mechanism to detect changes to MAIN only. Also, the
+<a href="../c3ref/total_changes.html">sqlite3_total_changes()</a> interface responds to internal changes only and
+omits changes made by other database connections. The
+<a href="../pragma.html#pragma_data_version">PRAGMA data_version</a> command provides a mechanism to detect changes to
+a single attached database that occur due to other database connections,
+but omits changes implemented by the database connection on which it is
+called. This file control is the only mechanism to detect changes that
+happen either internally or externally and that are associated with
+a particular attached database.</p>
+
+<p><li><a name="sqlitefcntlckptstart"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptstart">SQLITE_FCNTL_CKPT_START</a> opcode is invoked from within a checkpoint
+in wal mode before the client starts to copy pages from the wal
+file to the database file.</p>
+
+<p><li><a name="sqlitefcntlckptdone"></a>
+
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptdone">SQLITE_FCNTL_CKPT_DONE</a> opcode is invoked from within a checkpoint
+in wal mode after the client has finished copying pages from the wal
+file to the database file, but before the *-shm file is updated to
+record the fact that the pages have been checkpointed.
+</ul></p>
+
+<p><li><a name="sqlitefcntlexternalreader"></a>
+
+The EXPERIMENTAL <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlexternalreader">SQLITE_FCNTL_EXTERNAL_READER</a> opcode is used to detect
+whether or not there is a database client in another process with a wal-mode
+transaction open on the database or not. It is only available on unix.The
+(void*) argument passed with this file-control should be a pointer to a
+value of type (int). The integer value is set to 1 if the database is a wal
+mode database and there exists at least one client in another process that
+currently has an SQL transaction open on the database. It is set to 0 if
+the database is not a wal-mode db, or if there is no such connection in any
+other process. This opcode cannot be used to detect transactions opened
+by clients within the current process, only within other processes.
+</ul></p>
+
+<p><li><a name="sqlitefcntlcksmfile"></a>
+
+Used by the cksmvfs VFS module only.</p>
+
+<p><li><a name="sqlitefcntlresetcache"></a>
+
+If there is currently no transaction open on the database, and the
+database is not a temp db, then this file-control purges the contents
+of the in-memory page cache. If there is an open transaction, or if
+the db is a temp-db, it is a no-op, not an error.
+</ul>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_index_constraint_eq.html b/www/c3ref/c_index_constraint_eq.html
new file mode 100644
index 0000000..f80d280
--- /dev/null
+++ b/www/c3ref/c_index_constraint_eq.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Virtual Table Constraint Operator Codes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_INDEX_CONSTRAINT_EQ SQLITE_INDEX_CONSTRAINT_FUNCTION SQLITE_INDEX_CONSTRAINT_GE SQLITE_INDEX_CONSTRAINT_GLOB SQLITE_INDEX_CONSTRAINT_GT SQLITE_INDEX_CONSTRAINT_IS SQLITE_INDEX_CONSTRAINT_ISNOT SQLITE_INDEX_CONSTRAINT_ISNOTNULL SQLITE_INDEX_CONSTRAINT_ISNULL SQLITE_INDEX_CONSTRAINT_LE SQLITE_INDEX_CONSTRAINT_LIKE SQLITE_INDEX_CONSTRAINT_LIMIT SQLITE_INDEX_CONSTRAINT_LT SQLITE_INDEX_CONSTRAINT_MATCH SQLITE_INDEX_CONSTRAINT_NE SQLITE_INDEX_CONSTRAINT_OFFSET SQLITE_INDEX_CONSTRAINT_REGEXP -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Virtual Table Constraint Operator Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_INDEX_CONSTRAINT_EQ 2
+#define SQLITE_INDEX_CONSTRAINT_GT 4
+#define SQLITE_INDEX_CONSTRAINT_LE 8
+#define SQLITE_INDEX_CONSTRAINT_LT 16
+#define SQLITE_INDEX_CONSTRAINT_GE 32
+#define SQLITE_INDEX_CONSTRAINT_MATCH 64
+#define SQLITE_INDEX_CONSTRAINT_LIKE 65
+#define SQLITE_INDEX_CONSTRAINT_GLOB 66
+#define SQLITE_INDEX_CONSTRAINT_REGEXP 67
+#define SQLITE_INDEX_CONSTRAINT_NE 68
+#define SQLITE_INDEX_CONSTRAINT_ISNOT 69
+#define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70
+#define SQLITE_INDEX_CONSTRAINT_ISNULL 71
+#define SQLITE_INDEX_CONSTRAINT_IS 72
+#define SQLITE_INDEX_CONSTRAINT_LIMIT 73
+#define SQLITE_INDEX_CONSTRAINT_OFFSET 74
+#define SQLITE_INDEX_CONSTRAINT_FUNCTION 150
+</pre></blockquote>
+<p>
+These macros define the allowed values for the
+<a href="../c3ref/index_info.html">sqlite3_index_info</a>.aConstraint[].op field. Each value represents
+an operator that is part of a constraint term in the WHERE clause of
+a query that uses a <a href="../vtab.html">virtual table</a>.</p>
+
+<p>The left-hand operand of the operator is given by the corresponding
+aConstraint[].iColumn field. An iColumn of -1 indicates the left-hand
+operand is the rowid.
+The SQLITE_INDEX_CONSTRAINT_LIMIT and SQLITE_INDEX_CONSTRAINT_OFFSET
+operators have no left-hand operand, and so for those operators the
+corresponding aConstraint[].iColumn is meaningless and should not be
+used.</p>
+
+<p>All operator values from SQLITE_INDEX_CONSTRAINT_FUNCTION through
+value 255 are reserved to represent functions that are overloaded
+by the <a href="../vtab.html#xfindfunction">xFindFunction method</a> of the virtual table
+implementation.</p>
+
+<p>The right-hand operands for each constraint might be accessible using
+the <a href="../c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface. Usually the right-hand
+operand is only available if it appears as a single constant literal
+in the input SQL. If the right-hand operand is another column or an
+expression (even a constant expression) or a parameter, then the
+sqlite3_vtab_rhs_value() probably will not be able to extract it.
+The SQLITE_INDEX_CONSTRAINT_ISNULL and
+SQLITE_INDEX_CONSTRAINT_ISNOTNULL operators have no right-hand operand
+and hence calls to sqlite3_vtab_rhs_value() for those operators will
+always return SQLITE_NOTFOUND.</p>
+
+<p>The collating sequence to be used for comparison can be found using
+the <a href="../c3ref/vtab_collation.html">sqlite3_vtab_collation()</a> interface. For most real-world virtual
+tables, the collating sequence of constraints does not matter (for example
+because the constraints are numeric) and so the sqlite3_vtab_collation()
+interface is no commonly needed.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_index_scan_unique.html b/www/c3ref/c_index_scan_unique.html
new file mode 100644
index 0000000..732d4bd
--- /dev/null
+++ b/www/c3ref/c_index_scan_unique.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Virtual Table Scan Flags</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_INDEX_SCAN_UNIQUE -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Virtual Table Scan Flags</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_INDEX_SCAN_UNIQUE 1 /* Scan visits at most 1 row */
+</pre></blockquote>
+<p>
+Virtual table implementations are allowed to set the
+<a href="../c3ref/index_info.html">sqlite3_index_info</a>.idxFlags field to some combination of
+these bits.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_iocap_atomic.html b/www/c3ref/c_iocap_atomic.html
new file mode 100644
index 0000000..b3afb5a
--- /dev/null
+++ b/www/c3ref/c_iocap_atomic.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Device Characteristics</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_IOCAP_ATOMIC SQLITE_IOCAP_ATOMIC16K SQLITE_IOCAP_ATOMIC1K SQLITE_IOCAP_ATOMIC2K SQLITE_IOCAP_ATOMIC32K SQLITE_IOCAP_ATOMIC4K SQLITE_IOCAP_ATOMIC512 SQLITE_IOCAP_ATOMIC64K SQLITE_IOCAP_ATOMIC8K SQLITE_IOCAP_BATCH_ATOMIC SQLITE_IOCAP_IMMUTABLE SQLITE_IOCAP_POWERSAFE_OVERWRITE SQLITE_IOCAP_SAFE_APPEND SQLITE_IOCAP_SEQUENTIAL SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Device Characteristics</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_IOCAP_ATOMIC 0x00000001
+#define SQLITE_IOCAP_ATOMIC512 0x00000002
+#define SQLITE_IOCAP_ATOMIC1K 0x00000004
+#define SQLITE_IOCAP_ATOMIC2K 0x00000008
+#define SQLITE_IOCAP_ATOMIC4K 0x00000010
+#define SQLITE_IOCAP_ATOMIC8K 0x00000020
+#define SQLITE_IOCAP_ATOMIC16K 0x00000040
+#define SQLITE_IOCAP_ATOMIC32K 0x00000080
+#define SQLITE_IOCAP_ATOMIC64K 0x00000100
+#define SQLITE_IOCAP_SAFE_APPEND 0x00000200
+#define SQLITE_IOCAP_SEQUENTIAL 0x00000400
+#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800
+#define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000
+#define SQLITE_IOCAP_IMMUTABLE 0x00002000
+#define SQLITE_IOCAP_BATCH_ATOMIC 0x00004000
+</pre></blockquote>
+<p>
+The xDeviceCharacteristics method of the <a href="../c3ref/io_methods.html">sqlite3_io_methods</a>
+object returns an integer which is a vector of these
+bit values expressing I/O characteristics of the mass storage
+device that holds the file that the <a href="../c3ref/io_methods.html">sqlite3_io_methods</a>
+refers to.</p>
+
+<p>The SQLITE_IOCAP_ATOMIC property means that all writes of
+any size are atomic. The SQLITE_IOCAP_ATOMICnnn values
+mean that writes of blocks that are nnn bytes in size and
+are aligned to an address which is an integer multiple of
+nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means
+that when data is appended to a file, the data is appended
+first then the size of the file is extended, never the other
+way around. The SQLITE_IOCAP_SEQUENTIAL property means that
+information is written to disk in the same order as calls
+to xWrite(). The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that
+after reboot following a crash or power loss, the only bytes in a
+file that were written at the application level might have changed
+and that adjacent bytes, even bytes within the same sector are
+guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
+flag indicates that a file cannot be deleted when open. The
+SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on
+read-only media and cannot be changed even by processes with
+elevated privileges.</p>
+
+<p>The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying
+filesystem supports doing multiple write operations atomically when those
+write operations are bracketed by <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> and
+<a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_limit_attached.html b/www/c3ref/c_limit_attached.html
new file mode 100644
index 0000000..79c4c88
--- /dev/null
+++ b/www/c3ref/c_limit_attached.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Run-Time Limit Categories</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {*limit categories} SQLITE_LIMIT_ATTACHED SQLITE_LIMIT_COLUMN SQLITE_LIMIT_COMPOUND_SELECT SQLITE_LIMIT_EXPR_DEPTH SQLITE_LIMIT_FUNCTION_ARG SQLITE_LIMIT_LENGTH SQLITE_LIMIT_LIKE_PATTERN_LENGTH SQLITE_LIMIT_SQL_LENGTH SQLITE_LIMIT_TRIGGER_DEPTH SQLITE_LIMIT_VARIABLE_NUMBER SQLITE_LIMIT_VDBE_OP SQLITE_LIMIT_WORKER_THREADS {limit category} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Run-Time Limit Categories</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_LIMIT_LENGTH 0
+#define SQLITE_LIMIT_SQL_LENGTH 1
+#define SQLITE_LIMIT_COLUMN 2
+#define SQLITE_LIMIT_EXPR_DEPTH 3
+#define SQLITE_LIMIT_COMPOUND_SELECT 4
+#define SQLITE_LIMIT_VDBE_OP 5
+#define SQLITE_LIMIT_FUNCTION_ARG 6
+#define SQLITE_LIMIT_ATTACHED 7
+#define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8
+#define SQLITE_LIMIT_VARIABLE_NUMBER 9
+#define SQLITE_LIMIT_TRIGGER_DEPTH 10
+#define SQLITE_LIMIT_WORKER_THREADS 11
+</pre></blockquote>
+<p>
+These constants define various performance limits
+that can be lowered at run-time using <a href="../c3ref/limit.html">sqlite3_limit()</a>.
+The synopsis of the meanings of the various limits is shown below.
+Additional information is available at <a href="../limits.html">Limits in SQLite</a>.</p>
+
+<p><dl>
+<a name="sqlitelimitlength"></a>
+ <dt>SQLITE_LIMIT_LENGTH</dt>
+<dd>The maximum size of any string or BLOB or table row, in bytes.<dd></p>
+
+<p><a name="sqlitelimitsqllength"></a>
+ <dt>SQLITE_LIMIT_SQL_LENGTH</dt>
+<dd>The maximum length of an SQL statement, in bytes.</dd></p>
+
+<p><a name="sqlitelimitcolumn"></a>
+ <dt>SQLITE_LIMIT_COLUMN</dt>
+<dd>The maximum number of columns in a table definition or in the
+result set of a <a href="../lang_select.html">SELECT</a> or the maximum number of columns in an index
+or in an ORDER BY or GROUP BY clause.</dd></p>
+
+<p><a name="sqlitelimitexprdepth"></a>
+ <dt>SQLITE_LIMIT_EXPR_DEPTH</dt>
+<dd>The maximum depth of the parse tree on any expression.</dd></p>
+
+<p><a name="sqlitelimitcompoundselect"></a>
+ <dt>SQLITE_LIMIT_COMPOUND_SELECT</dt>
+<dd>The maximum number of terms in a compound SELECT statement.</dd></p>
+
+<p><a name="sqlitelimitvdbeop"></a>
+ <dt>SQLITE_LIMIT_VDBE_OP</dt>
+<dd>The maximum number of instructions in a virtual machine program
+used to implement an SQL statement. If <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> or
+the equivalent tries to allocate space for more than this many opcodes
+in a single prepared statement, an SQLITE_NOMEM error is returned.</dd></p>
+
+<p><a name="sqlitelimitfunctionarg"></a>
+ <dt>SQLITE_LIMIT_FUNCTION_ARG</dt>
+<dd>The maximum number of arguments on a function.</dd></p>
+
+<p><a name="sqlitelimitattached"></a>
+ <dt>SQLITE_LIMIT_ATTACHED</dt>
+<dd>The maximum number of <a href="../lang_attach.html">attached databases</a>.</dd></p>
+
+<p><a name="sqlitelimitlikepatternlength"></a>
+
+<dt>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</dt>
+<dd>The maximum length of the pattern argument to the <a href="../lang_expr.html#like">LIKE</a> or
+<a href="../lang_expr.html#glob">GLOB</a> operators.</dd></p>
+
+<p><a name="sqlitelimitvariablenumber"></a>
+
+<dt>SQLITE_LIMIT_VARIABLE_NUMBER</dt>
+<dd>The maximum index number of any <a href="../lang_expr.html#varparam">parameter</a> in an SQL statement.</p>
+
+<p><a name="sqlitelimittriggerdepth"></a>
+ <dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt>
+<dd>The maximum depth of recursion for triggers.</dd></p>
+
+<p><a name="sqlitelimitworkerthreads"></a>
+ <dt>SQLITE_LIMIT_WORKER_THREADS</dt>
+<dd>The maximum number of auxiliary worker threads that a single
+<a href="../c3ref/stmt.html">prepared statement</a> may start.</dd>
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_lock_exclusive.html b/www/c3ref/c_lock_exclusive.html
new file mode 100644
index 0000000..b1471ee
--- /dev/null
+++ b/www/c3ref/c_lock_exclusive.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>File Locking Levels</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_LOCK_EXCLUSIVE SQLITE_LOCK_NONE SQLITE_LOCK_PENDING SQLITE_LOCK_RESERVED SQLITE_LOCK_SHARED -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>File Locking Levels</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_LOCK_NONE 0 /* xUnlock() only */
+#define SQLITE_LOCK_SHARED 1 /* xLock() or xUnlock() */
+#define SQLITE_LOCK_RESERVED 2 /* xLock() only */
+#define SQLITE_LOCK_PENDING 3 /* xLock() only */
+#define SQLITE_LOCK_EXCLUSIVE 4 /* xLock() only */
+</pre></blockquote>
+<p>
+SQLite uses one of these integer values as the second
+argument to calls it makes to the xLock() and xUnlock() methods
+of an <a href="../c3ref/io_methods.html">sqlite3_io_methods</a> object. These values are ordered from
+lest restrictive to most restrictive.</p>
+
+<p>The argument to xLock() is always SHARED or higher. The argument to
+xUnlock is either SHARED or NONE.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_mutex_fast.html b/www/c3ref/c_mutex_fast.html
new file mode 100644
index 0000000..2db711a
--- /dev/null
+++ b/www/c3ref/c_mutex_fast.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Mutex Types</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_MUTEX_FAST SQLITE_MUTEX_RECURSIVE SQLITE_MUTEX_STATIC_APP1 SQLITE_MUTEX_STATIC_APP2 SQLITE_MUTEX_STATIC_APP3 SQLITE_MUTEX_STATIC_LRU SQLITE_MUTEX_STATIC_LRU2 SQLITE_MUTEX_STATIC_MAIN SQLITE_MUTEX_STATIC_MEM SQLITE_MUTEX_STATIC_MEM2 SQLITE_MUTEX_STATIC_OPEN SQLITE_MUTEX_STATIC_PMEM SQLITE_MUTEX_STATIC_PRNG SQLITE_MUTEX_STATIC_VFS1 SQLITE_MUTEX_STATIC_VFS2 SQLITE_MUTEX_STATIC_VFS3 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Mutex Types</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_MUTEX_FAST 0
+#define SQLITE_MUTEX_RECURSIVE 1
+#define SQLITE_MUTEX_STATIC_MAIN 2
+#define SQLITE_MUTEX_STATIC_MEM 3 /* sqlite3_malloc() */
+#define SQLITE_MUTEX_STATIC_MEM2 4 /* NOT USED */
+#define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */
+#define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_randomness() */
+#define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */
+#define SQLITE_MUTEX_STATIC_LRU2 7 /* NOT USED */
+#define SQLITE_MUTEX_STATIC_PMEM 7 /* sqlite3PageMalloc() */
+#define SQLITE_MUTEX_STATIC_APP1 8 /* For use by application */
+#define SQLITE_MUTEX_STATIC_APP2 9 /* For use by application */
+#define SQLITE_MUTEX_STATIC_APP3 10 /* For use by application */
+#define SQLITE_MUTEX_STATIC_VFS1 11 /* For use by built-in VFS */
+#define SQLITE_MUTEX_STATIC_VFS2 12 /* For use by extension VFS */
+#define SQLITE_MUTEX_STATIC_VFS3 13 /* For use by application VFS */
+</pre></blockquote>
+<p>
+The <a href="../c3ref/mutex_alloc.html">sqlite3_mutex_alloc()</a> interface takes a single argument
+which is one of these integer constants.</p>
+
+<p>The set of static mutexes may change from one SQLite release to the
+next. Applications that override the built-in mutex logic must be
+prepared to accommodate additional static mutexes.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_open_autoproxy.html b/www/c3ref/c_open_autoproxy.html
new file mode 100644
index 0000000..6a87781
--- /dev/null
+++ b/www/c3ref/c_open_autoproxy.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Flags For File Open Operations</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_OPEN_AUTOPROXY SQLITE_OPEN_CREATE SQLITE_OPEN_DELETEONCLOSE SQLITE_OPEN_EXCLUSIVE SQLITE_OPEN_EXRESCODE SQLITE_OPEN_FULLMUTEX SQLITE_OPEN_MAIN_DB SQLITE_OPEN_MAIN_JOURNAL SQLITE_OPEN_MEMORY SQLITE_OPEN_NOFOLLOW SQLITE_OPEN_NOMUTEX SQLITE_OPEN_PRIVATECACHE SQLITE_OPEN_READONLY SQLITE_OPEN_READWRITE SQLITE_OPEN_SHAREDCACHE SQLITE_OPEN_SUBJOURNAL SQLITE_OPEN_SUPER_JOURNAL SQLITE_OPEN_TEMP_DB SQLITE_OPEN_TEMP_JOURNAL SQLITE_OPEN_TRANSIENT_DB SQLITE_OPEN_URI SQLITE_OPEN_WAL -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Flags For File Open Operations</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */
+#define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS only */
+#define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS only */
+#define SQLITE_OPEN_URI 0x00000040 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_MEMORY 0x00000080 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS only */
+#define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS only */
+#define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS only */
+#define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 /* VFS only */
+#define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 /* VFS only */
+#define SQLITE_OPEN_SUBJOURNAL 0x00002000 /* VFS only */
+#define SQLITE_OPEN_SUPER_JOURNAL 0x00004000 /* VFS only */
+#define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_WAL 0x00080000 /* VFS only */
+#define SQLITE_OPEN_NOFOLLOW 0x01000000 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_EXRESCODE 0x02000000 /* Extended result codes */
+</pre></blockquote>
+<p>
+These bit values are intended for use in the
+3rd parameter to the <a href="../c3ref/open.html">sqlite3_open_v2()</a> interface and
+in the 4th parameter to the <a href="../c3ref/vfs.html#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> method.</p>
+
+<p>Only those flags marked as "Ok for sqlite3_open_v2()" may be
+used as the third argument to the <a href="../c3ref/open.html">sqlite3_open_v2()</a> interface.
+The other flags have historically been ignored by sqlite3_open_v2(),
+though future versions of SQLite might change so that an error is
+raised if any of the disallowed bits are passed into sqlite3_open_v2().
+Applications should not depend on the historical behavior.</p>
+
+<p>Note in particular that passing the SQLITE_OPEN_EXCLUSIVE flag into
+<a href="../c3ref/open.html">sqlite3_open_v2()</a> does *not* cause the underlying database file
+to be opened using O_EXCL. Passing SQLITE_OPEN_EXCLUSIVE into
+<a href="../c3ref/open.html">sqlite3_open_v2()</a> has historically be a no-op and might become an
+error in future versions of SQLite.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_prepare_normalize.html b/www/c3ref/c_prepare_normalize.html
new file mode 100644
index 0000000..b6bc421
--- /dev/null
+++ b/www/c3ref/c_prepare_normalize.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Prepare Flags</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_PREPARE_NORMALIZE SQLITE_PREPARE_NO_VTAB SQLITE_PREPARE_PERSISTENT -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Prepare Flags</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_PREPARE_PERSISTENT 0x01
+#define SQLITE_PREPARE_NORMALIZE 0x02
+#define SQLITE_PREPARE_NO_VTAB 0x04
+</pre></blockquote>
+<p>
+These constants define various flags that can be passed into
+"prepFlags" parameter of the <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> and
+<a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a> interfaces.</p>
+
+<p>New flags may be added in future releases of SQLite.</p>
+
+<p><dl>
+<a name="sqlitepreparepersistent"></a>
+ <dt>SQLITE_PREPARE_PERSISTENT</dt>
+<dd>The SQLITE_PREPARE_PERSISTENT flag is a hint to the query planner
+that the prepared statement will be retained for a long time and
+probably reused many times. Without this flag, <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>
+and <a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a> assume that the prepared statement will
+be used just once or at most a few times and then destroyed using
+<a href="../c3ref/finalize.html">sqlite3_finalize()</a> relatively soon. The current implementation acts
+on this hint by avoiding the use of <a href="../malloc.html#lookaside">lookaside memory</a> so as not to
+deplete the limited store of lookaside memory. Future versions of
+SQLite may act on this hint differently.</p>
+
+<p><a name="sqlitepreparenormalize"></a>
+ <dt>SQLITE_PREPARE_NORMALIZE</dt>
+<dd>The SQLITE_PREPARE_NORMALIZE flag is a no-op. This flag used
+to be required for any prepared statement that wanted to use the
+<a href="../c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface. However, the
+<a href="../c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface is now available to all
+prepared statements, regardless of whether or not they use this
+flag.</p>
+
+<p><a name="sqlitepreparenovtab"></a>
+ <dt>SQLITE_PREPARE_NO_VTAB</dt>
+<dd>The SQLITE_PREPARE_NO_VTAB flag causes the SQL compiler
+to return an error (error code SQLITE_ERROR) if the statement uses
+any virtual tables.
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_scanstat_est.html b/www/c3ref/c_scanstat_est.html
new file mode 100644
index 0000000..c18e347
--- /dev/null
+++ b/www/c3ref/c_scanstat_est.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Prepared Statement Scan Status Opcodes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_SCANSTAT_EST SQLITE_SCANSTAT_EXPLAIN SQLITE_SCANSTAT_NAME SQLITE_SCANSTAT_NLOOP SQLITE_SCANSTAT_NVISIT SQLITE_SCANSTAT_SELECTID {scanstatus options} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Prepared Statement Scan Status Opcodes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SCANSTAT_NLOOP 0
+#define SQLITE_SCANSTAT_NVISIT 1
+#define SQLITE_SCANSTAT_EST 2
+#define SQLITE_SCANSTAT_NAME 3
+#define SQLITE_SCANSTAT_EXPLAIN 4
+#define SQLITE_SCANSTAT_SELECTID 5
+</pre></blockquote>
+<p>
+The following constants can be used for the T parameter to the
+<a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus(S,X,T,V)</a> interface. Each constant designates a
+different metric for sqlite3_stmt_scanstatus() to return.</p>
+
+<p>When the value returned to V is a string, space to hold that string is
+managed by the prepared statement S and will be automatically freed when
+S is finalized.</p>
+
+<p><dl>
+<a name="sqlitescanstatnloop"></a>
+ <dt>SQLITE_SCANSTAT_NLOOP</dt>
+<dd>The <a href="../c3ref/int64.html">sqlite3_int64</a> variable pointed to by the V parameter will be
+set to the total number of times that the X-th loop has run.</dd></p>
+
+<p><a name="sqlitescanstatnvisit"></a>
+ <dt>SQLITE_SCANSTAT_NVISIT</dt>
+<dd>The <a href="../c3ref/int64.html">sqlite3_int64</a> variable pointed to by the V parameter will be set
+to the total number of rows examined by all iterations of the X-th loop.</dd></p>
+
+<p><a name="sqlitescanstatest"></a>
+ <dt>SQLITE_SCANSTAT_EST</dt>
+<dd>The "double" variable pointed to by the V parameter will be set to the
+query planner's estimate for the average number of rows output from each
+iteration of the X-th loop. If the query planner's estimates was accurate,
+then this value will approximate the quotient NVISIT/NLOOP and the
+product of this value for all prior loops with the same SELECTID will
+be the NLOOP value for the current loop.</p>
+
+<p><a name="sqlitescanstatname"></a>
+ <dt>SQLITE_SCANSTAT_NAME</dt>
+<dd>The "const char *" variable pointed to by the V parameter will be set
+to a zero-terminated UTF-8 string containing the name of the index or table
+used for the X-th loop.</p>
+
+<p><a name="sqlitescanstatexplain"></a>
+ <dt>SQLITE_SCANSTAT_EXPLAIN</dt>
+<dd>The "const char *" variable pointed to by the V parameter will be set
+to a zero-terminated UTF-8 string containing the <a href="../eqp.html">EXPLAIN QUERY PLAN</a>
+description for the X-th loop.</p>
+
+<p><a name="sqlitescanstatselectid"></a>
+ <dt>SQLITE_SCANSTAT_SELECT</dt>
+<dd>The "int" variable pointed to by the V parameter will be set to the
+"select-id" for the X-th loop. The select-id identifies which query or
+subquery the loop is part of. The main query has a select-id of zero.
+The select-id is the same value as is output in the first column
+of an <a href="../eqp.html">EXPLAIN QUERY PLAN</a> query.
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_serialize_nocopy.html b/www/c3ref/c_serialize_nocopy.html
new file mode 100644
index 0000000..bd030e3
--- /dev/null
+++ b/www/c3ref/c_serialize_nocopy.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Flags for sqlite3_serialize</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_SERIALIZE_NOCOPY -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Flags for sqlite3_serialize</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SERIALIZE_NOCOPY 0x001 /* Do no memory allocations */
+</pre></blockquote>
+<p>
+Zero or more of the following constants can be OR-ed together for
+the F argument to <a href="../c3ref/serialize.html">sqlite3_serialize(D,S,P,F)</a>.</p>
+
+<p>SQLITE_SERIALIZE_NOCOPY means that <a href="../c3ref/serialize.html">sqlite3_serialize()</a> will return
+a pointer to contiguous in-memory database that it is currently using,
+without making a copy of the database. If SQLite is not currently using
+a contiguous in-memory database, then this option causes
+<a href="../c3ref/serialize.html">sqlite3_serialize()</a> to return a NULL pointer. SQLite will only be
+using a contiguous in-memory database if it has been initialized by a
+prior call to <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_shm_exclusive.html b/www/c3ref/c_shm_exclusive.html
new file mode 100644
index 0000000..7cacf31
--- /dev/null
+++ b/www/c3ref/c_shm_exclusive.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Flags for the xShmLock VFS method</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_SHM_EXCLUSIVE SQLITE_SHM_LOCK SQLITE_SHM_SHARED SQLITE_SHM_UNLOCK -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Flags for the xShmLock VFS method</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SHM_UNLOCK 1
+#define SQLITE_SHM_LOCK 2
+#define SQLITE_SHM_SHARED 4
+#define SQLITE_SHM_EXCLUSIVE 8
+</pre></blockquote>
+<p>
+These integer constants define the various locking operations
+allowed by the xShmLock method of <a href="../c3ref/io_methods.html">sqlite3_io_methods</a>. The
+following are the only legal combinations of flags to the
+xShmLock method:</p>
+
+<p><ul>
+<li> SQLITE_SHM_LOCK | SQLITE_SHM_SHARED
+<li> SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE
+<li> SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED
+<li> SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE
+</ul></p>
+
+<p>When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as
+was given on the corresponding lock.</p>
+
+<p>The xShmLock method can transition between unlocked and SHARED or
+between unlocked and EXCLUSIVE. It cannot transition between SHARED
+and EXCLUSIVE.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_shm_nlock.html b/www/c3ref/c_shm_nlock.html
new file mode 100644
index 0000000..7dbae01
--- /dev/null
+++ b/www/c3ref/c_shm_nlock.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Maximum xShmLock index</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_SHM_NLOCK -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Maximum xShmLock index</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SHM_NLOCK 8
+</pre></blockquote>
+<p>
+The xShmLock method on <a href="../c3ref/io_methods.html">sqlite3_io_methods</a> may use values
+between 0 and this upper bound as its "offset" argument.
+The SQLite core will never attempt to acquire or release a
+lock outside of this range
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_source_id.html b/www/c3ref/c_source_id.html
new file mode 100644
index 0000000..8902644
--- /dev/null
+++ b/www/c3ref/c_source_id.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Compile-Time Library Version Numbers</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_SOURCE_ID SQLITE_VERSION SQLITE_VERSION_NUMBER -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Compile-Time Library Version Numbers</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_VERSION "3.40.1"
+#define SQLITE_VERSION_NUMBER 3040001
+#define SQLITE_SOURCE_ID "2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24"
+</pre></blockquote>
+<p>
+The <a href="../c3ref/c_source_id.html">SQLITE_VERSION</a> C preprocessor macro in the sqlite3.h header
+evaluates to a string literal that is the SQLite version in the
+format "X.Y.Z" where X is the major version number (always 3 for
+SQLite3) and Y is the minor version number and Z is the release number.
+The <a href="../c3ref/c_source_id.html">SQLITE_VERSION_NUMBER</a> C preprocessor macro resolves to an integer
+with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same
+numbers used in <a href="../c3ref/c_source_id.html">SQLITE_VERSION</a>.
+The SQLITE_VERSION_NUMBER for any given release of SQLite will also
+be larger than the release from which it is derived. Either Y will
+be held constant and Z will be incremented or else Y will be incremented
+and Z will be reset to zero.</p>
+
+<p>Since <a href="../releaselog/3_6_18.html">version 3.6.18</a> (2009-09-11),
+SQLite source code has been stored in the
+<a href="http://www.fossil-scm.org/">Fossil configuration management
+system</a>. The SQLITE_SOURCE_ID macro evaluates to
+a string which identifies a particular check-in of SQLite
+within its configuration management system. The SQLITE_SOURCE_ID
+string contains the date and time of the check-in (UTC) and a SHA1
+or SHA3-256 hash of the entire source tree. If the source code has
+been edited in any way since it was last checked in, then the last
+four hexadecimal digits of the hash may be modified.</p>
+
+<p>See also: <a href="../c3ref/libversion.html">sqlite3_libversion()</a>,
+<a href="../c3ref/libversion.html">sqlite3_libversion_number()</a>, <a href="../c3ref/libversion.html">sqlite3_sourceid()</a>,
+<a href="../lang_corefunc.html#sqlite_version">sqlite_version()</a> and <a href="../lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_static.html b/www/c3ref/c_static.html
new file mode 100644
index 0000000..856e3e9
--- /dev/null
+++ b/www/c3ref/c_static.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Constants Defining Special Destructor Behavior</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_STATIC SQLITE_TRANSIENT -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Constants Defining Special Destructor Behavior</h2>
+</div>
+<blockquote><pre>
+typedef void (*sqlite3_destructor_type)(void*);
+#define SQLITE_STATIC ((sqlite3_destructor_type)0)
+#define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1)
+</pre></blockquote>
+<p>
+These are special values for the destructor that is passed in as the
+final argument to routines like <a href="../c3ref/result_blob.html">sqlite3_result_blob()</a>. If the destructor
+argument is SQLITE_STATIC, it means that the content pointer is constant
+and will never change. It does not need to be destroyed. The
+SQLITE_TRANSIENT value means that the content will likely change in
+the near future and that SQLite should make its own private copy of
+the content before returning.</p>
+
+<p>The typedef is necessary to work around problems in certain
+C++ compilers.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_status_malloc_count.html b/www/c3ref/c_status_malloc_count.html
new file mode 100644
index 0000000..514f664
--- /dev/null
+++ b/www/c3ref/c_status_malloc_count.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Status Parameters</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_STATUS_MALLOC_COUNT SQLITE_STATUS_MALLOC_SIZE SQLITE_STATUS_MEMORY_USED SQLITE_STATUS_PAGECACHE_OVERFLOW SQLITE_STATUS_PAGECACHE_SIZE SQLITE_STATUS_PAGECACHE_USED SQLITE_STATUS_PARSER_STACK SQLITE_STATUS_SCRATCH_OVERFLOW SQLITE_STATUS_SCRATCH_SIZE SQLITE_STATUS_SCRATCH_USED {status parameters} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Status Parameters</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_STATUS_MEMORY_USED 0
+#define SQLITE_STATUS_PAGECACHE_USED 1
+#define SQLITE_STATUS_PAGECACHE_OVERFLOW 2
+#define SQLITE_STATUS_SCRATCH_USED 3 /* NOT USED */
+#define SQLITE_STATUS_SCRATCH_OVERFLOW 4 /* NOT USED */
+#define SQLITE_STATUS_MALLOC_SIZE 5
+#define SQLITE_STATUS_PARSER_STACK 6
+#define SQLITE_STATUS_PAGECACHE_SIZE 7
+#define SQLITE_STATUS_SCRATCH_SIZE 8 /* NOT USED */
+#define SQLITE_STATUS_MALLOC_COUNT 9
+</pre></blockquote>
+<p>
+These integer constants designate various run-time status parameters
+that can be returned by <a href="../c3ref/status.html">sqlite3_status()</a>.</p>
+
+<p><dl>
+<a name="sqlitestatusmemoryused"></a>
+ <dt>SQLITE_STATUS_MEMORY_USED</dt>
+<dd>This parameter is the current amount of memory checked out
+using <a href="../c3ref/free.html">sqlite3_malloc()</a>, either directly or indirectly. The
+figure includes calls made to <a href="../c3ref/free.html">sqlite3_malloc()</a> by the application
+and internal memory usage by the SQLite library. Auxiliary page-cache
+memory controlled by <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a> is not included in
+this parameter. The amount returned is the sum of the allocation
+sizes as reported by the xSize method in <a href="../c3ref/mem_methods.html">sqlite3_mem_methods</a>.</dd></p>
+
+<p><a name="sqlitestatusmallocsize"></a>
+ <dt>SQLITE_STATUS_MALLOC_SIZE</dt>
+<dd>This parameter records the largest memory allocation request
+handed to <a href="../c3ref/free.html">sqlite3_malloc()</a> or <a href="../c3ref/free.html">sqlite3_realloc()</a> (or their
+internal equivalents). Only the value returned in the
+*pHighwater parameter to <a href="../c3ref/status.html">sqlite3_status()</a> is of interest.
+The value written into the *pCurrent parameter is undefined.</dd></p>
+
+<p><a name="sqlitestatusmalloccount"></a>
+ <dt>SQLITE_STATUS_MALLOC_COUNT</dt>
+<dd>This parameter records the number of separate memory allocations
+currently checked out.</dd></p>
+
+<p><a name="sqlitestatuspagecacheused"></a>
+ <dt>SQLITE_STATUS_PAGECACHE_USED</dt>
+<dd>This parameter returns the number of pages used out of the
+<a href="../malloc.html#pagecache">pagecache memory allocator</a> that was configured using
+<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>. The
+value returned is in pages, not in bytes.</dd></p>
+
+<p><a name="sqlitestatuspagecacheoverflow"></a>
+
+<dt>SQLITE_STATUS_PAGECACHE_OVERFLOW</dt>
+<dd>This parameter returns the number of bytes of page cache
+allocation which could not be satisfied by the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>
+buffer and where forced to overflow to <a href="../c3ref/free.html">sqlite3_malloc()</a>. The
+returned value includes allocations that overflowed because they
+where too large (they were larger than the "sz" parameter to
+<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>) and allocations that overflowed because
+no space was left in the page cache.</dd></p>
+
+<p><a name="sqlitestatuspagecachesize"></a>
+ <dt>SQLITE_STATUS_PAGECACHE_SIZE</dt>
+<dd>This parameter records the largest memory allocation request
+handed to the <a href="../malloc.html#pagecache">pagecache memory allocator</a>. Only the value returned in the
+*pHighwater parameter to <a href="../c3ref/status.html">sqlite3_status()</a> is of interest.
+The value written into the *pCurrent parameter is undefined.</dd></p>
+
+<p><a name="sqlitestatusscratchused"></a>
+ <dt>SQLITE_STATUS_SCRATCH_USED</dt>
+<dd>No longer used.</dd></p>
+
+<p><a name="sqlitestatusscratchoverflow"></a>
+ <dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
+<dd>No longer used.</dd></p>
+
+<p><a name="sqlitestatusscratchsize"></a>
+ <dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
+<dd>No longer used.</dd></p>
+
+<p><a name="sqlitestatusparserstack"></a>
+ <dt>SQLITE_STATUS_PARSER_STACK</dt>
+<dd>The *pHighwater parameter records the deepest parser stack.
+The *pCurrent value is undefined. The *pHighwater value is only
+meaningful if SQLite is compiled with <a href="../compile.html#yytrackmaxstackdepth">YYTRACKMAXSTACKDEPTH</a>.</dd>
+</dl></p>
+
+<p>New status parameters may be added from time to time.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_stmtstatus_counter.html b/www/c3ref/c_stmtstatus_counter.html
new file mode 100644
index 0000000..438d896
--- /dev/null
+++ b/www/c3ref/c_stmtstatus_counter.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Status Parameters for prepared statements</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters} SQLITE_STMTSTATUS_AUTOINDEX SQLITE_STMTSTATUS_FILTER_HIT SQLITE_STMTSTATUS_FILTER_MISS SQLITE_STMTSTATUS_FULLSCAN_STEP SQLITE_STMTSTATUS_MEMUSED SQLITE_STMTSTATUS_REPREPARE SQLITE_STMTSTATUS_RUN SQLITE_STMTSTATUS_SORT SQLITE_STMTSTATUS_VM_STEP -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Status Parameters for prepared statements</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_STMTSTATUS_FULLSCAN_STEP 1
+#define SQLITE_STMTSTATUS_SORT 2
+#define SQLITE_STMTSTATUS_AUTOINDEX 3
+#define SQLITE_STMTSTATUS_VM_STEP 4
+#define SQLITE_STMTSTATUS_REPREPARE 5
+#define SQLITE_STMTSTATUS_RUN 6
+#define SQLITE_STMTSTATUS_FILTER_MISS 7
+#define SQLITE_STMTSTATUS_FILTER_HIT 8
+#define SQLITE_STMTSTATUS_MEMUSED 99
+</pre></blockquote>
+<p>
+These preprocessor macros define integer codes that name counter
+values associated with the <a href="../c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface.
+The meanings of the various counters are as follows:</p>
+
+<p><dl>
+<a name="sqlitestmtstatusfullscanstep"></a>
+ <dt>SQLITE_STMTSTATUS_FULLSCAN_STEP</dt>
+<dd>This is the number of times that SQLite has stepped forward in
+a table as part of a full table scan. Large numbers for this counter
+may indicate opportunities for performance improvement through
+careful use of indices.</dd></p>
+
+<p><a name="sqlitestmtstatussort"></a>
+ <dt>SQLITE_STMTSTATUS_SORT</dt>
+<dd>This is the number of sort operations that have occurred.
+A non-zero value in this counter may indicate an opportunity to
+improvement performance through careful use of indices.</dd></p>
+
+<p><a name="sqlitestmtstatusautoindex"></a>
+ <dt>SQLITE_STMTSTATUS_AUTOINDEX</dt>
+<dd>This is the number of rows inserted into transient indices that
+were created automatically in order to help joins run faster.
+A non-zero value in this counter may indicate an opportunity to
+improvement performance by adding permanent indices that do not
+need to be reinitialized each time the statement is run.</dd></p>
+
+<p><a name="sqlitestmtstatusvmstep"></a>
+ <dt>SQLITE_STMTSTATUS_VM_STEP</dt>
+<dd>This is the number of virtual machine operations executed
+by the prepared statement if that number is less than or equal
+to 2147483647. The number of virtual machine operations can be
+used as a proxy for the total work done by the prepared statement.
+If the number of virtual machine operations exceeds 2147483647
+then the value returned by this statement status code is undefined.</p>
+
+<p><a name="sqlitestmtstatusreprepare"></a>
+ <dt>SQLITE_STMTSTATUS_REPREPARE</dt>
+<dd>This is the number of times that the prepare statement has been
+automatically regenerated due to schema changes or changes to
+<a href="../lang_expr.html#varparam">bound parameters</a> that might affect the query plan.</p>
+
+<p><a name="sqlitestmtstatusrun"></a>
+ <dt>SQLITE_STMTSTATUS_RUN</dt>
+<dd>This is the number of times that the prepared statement has
+been run. A single "run" for the purposes of this counter is one
+or more calls to <a href="../c3ref/step.html">sqlite3_step()</a> followed by a call to <a href="../c3ref/reset.html">sqlite3_reset()</a>.
+The counter is incremented on the first <a href="../c3ref/step.html">sqlite3_step()</a> call of each
+cycle.</p>
+
+<p><a name="sqlitestmtstatusfiltermiss"></a>
+
+<a name="sqlitestmtstatusfilterhit"></a>
+
+<dt>SQLITE_STMTSTATUS_FILTER_HIT<br>
+SQLITE_STMTSTATUS_FILTER_MISS</dt>
+<dd>SQLITE_STMTSTATUS_FILTER_HIT is the number of times that a join
+step was bypassed because a Bloom filter returned not-found. The
+corresponding SQLITE_STMTSTATUS_FILTER_MISS value is the number of
+times that the Bloom filter returned a find, and thus the join step
+had to be processed as normal.</p>
+
+<p><a name="sqlitestmtstatusmemused"></a>
+ <dt>SQLITE_STMTSTATUS_MEMUSED</dt>
+<dd>This is the approximate number of bytes of heap memory
+used to store the prepared statement. This value is not actually
+a counter, and so the resetFlg parameter to sqlite3_stmt_status()
+is ignored when the opcode is SQLITE_STMTSTATUS_MEMUSED.
+</dd>
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_sync_dataonly.html b/www/c3ref/c_sync_dataonly.html
new file mode 100644
index 0000000..019e5e6
--- /dev/null
+++ b/www/c3ref/c_sync_dataonly.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Synchronization Type Flags</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_SYNC_DATAONLY SQLITE_SYNC_FULL SQLITE_SYNC_NORMAL -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Synchronization Type Flags</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SYNC_NORMAL 0x00002
+#define SQLITE_SYNC_FULL 0x00003
+#define SQLITE_SYNC_DATAONLY 0x00010
+</pre></blockquote>
+<p>
+When SQLite invokes the xSync() method of an
+<a href="../c3ref/io_methods.html">sqlite3_io_methods</a> object it uses a combination of
+these integer values as the second argument.</p>
+
+<p>When the SQLITE_SYNC_DATAONLY flag is used, it means that the
+sync operation only needs to flush data to mass storage. Inode
+information need not be flushed. If the lower four bits of the flag
+equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
+If the lower four bits equal SQLITE_SYNC_FULL, that means
+to use Mac OS X style fullsync instead of fsync().</p>
+
+<p>Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
+with the <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a>=NORMAL and <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a>=FULL
+settings. The <a href="../pragma.html#pragma_synchronous">synchronous pragma</a> determines when calls to the
+xSync VFS method occur and applies uniformly across all platforms.
+The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
+energetic or rigorous or forceful the sync operations are and
+only make a difference on Mac OSX for the default SQLite code.
+(Third-party VFS implementations might also make the distinction
+between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
+operating systems natively supported by SQLite, only Mac OSX
+cares about the difference.)
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_testctrl_always.html b/www/c3ref/c_testctrl_always.html
new file mode 100644
index 0000000..abd8d05
--- /dev/null
+++ b/www/c3ref/c_testctrl_always.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Testing Interface Operation Codes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_TESTCTRL_ALWAYS SQLITE_TESTCTRL_ASSERT SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS SQLITE_TESTCTRL_BITVEC_TEST SQLITE_TESTCTRL_BYTEORDER SQLITE_TESTCTRL_EXPLAIN_STMT SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS SQLITE_TESTCTRL_FAULT_INSTALL SQLITE_TESTCTRL_FIRST SQLITE_TESTCTRL_IMPOSTER SQLITE_TESTCTRL_INTERNAL_FUNCTIONS SQLITE_TESTCTRL_ISINIT SQLITE_TESTCTRL_ISKEYWORD SQLITE_TESTCTRL_LAST SQLITE_TESTCTRL_LOCALTIME_FAULT SQLITE_TESTCTRL_LOGEST SQLITE_TESTCTRL_NEVER_CORRUPT SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD SQLITE_TESTCTRL_OPTIMIZATIONS SQLITE_TESTCTRL_PARSER_COVERAGE SQLITE_TESTCTRL_PENDING_BYTE SQLITE_TESTCTRL_PRNG_RESET SQLITE_TESTCTRL_PRNG_RESTORE SQLITE_TESTCTRL_PRNG_SAVE SQLITE_TESTCTRL_PRNG_SEED SQLITE_TESTCTRL_RESERVE SQLITE_TESTCTRL_RESULT_INTREAL SQLITE_TESTCTRL_SCRATCHMALLOC SQLITE_TESTCTRL_SEEK_COUNT SQLITE_TESTCTRL_SORTER_MMAP SQLITE_TESTCTRL_TRACEFLAGS SQLITE_TESTCTRL_TUNE SQLITE_TESTCTRL_VDBE_COVERAGE -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Testing Interface Operation Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_TESTCTRL_FIRST 5
+#define SQLITE_TESTCTRL_PRNG_SAVE 5
+#define SQLITE_TESTCTRL_PRNG_RESTORE 6
+#define SQLITE_TESTCTRL_PRNG_RESET 7 /* NOT USED */
+#define SQLITE_TESTCTRL_BITVEC_TEST 8
+#define SQLITE_TESTCTRL_FAULT_INSTALL 9
+#define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10
+#define SQLITE_TESTCTRL_PENDING_BYTE 11
+#define SQLITE_TESTCTRL_ASSERT 12
+#define SQLITE_TESTCTRL_ALWAYS 13
+#define SQLITE_TESTCTRL_RESERVE 14 /* NOT USED */
+#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
+#define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */
+#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */
+#define SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 17
+#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
+#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
+#define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD 19
+#define SQLITE_TESTCTRL_NEVER_CORRUPT 20
+#define SQLITE_TESTCTRL_VDBE_COVERAGE 21
+#define SQLITE_TESTCTRL_BYTEORDER 22
+#define SQLITE_TESTCTRL_ISINIT 23
+#define SQLITE_TESTCTRL_SORTER_MMAP 24
+#define SQLITE_TESTCTRL_IMPOSTER 25
+#define SQLITE_TESTCTRL_PARSER_COVERAGE 26
+#define SQLITE_TESTCTRL_RESULT_INTREAL 27
+#define SQLITE_TESTCTRL_PRNG_SEED 28
+#define SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS 29
+#define SQLITE_TESTCTRL_SEEK_COUNT 30
+#define SQLITE_TESTCTRL_TRACEFLAGS 31
+#define SQLITE_TESTCTRL_TUNE 32
+#define SQLITE_TESTCTRL_LOGEST 33
+#define SQLITE_TESTCTRL_LAST 33 /* Largest TESTCTRL */
+</pre></blockquote>
+<p>
+These constants are the valid operation code parameters used
+as the first argument to <a href="../c3ref/test_control.html">sqlite3_test_control()</a>.</p>
+
+<p>These parameters and their meanings are subject to change
+without notice. These values are for testing purposes only.
+Applications should not use any of these parameters or the
+<a href="../c3ref/test_control.html">sqlite3_test_control()</a> interface.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_trace.html b/www/c3ref/c_trace.html
new file mode 100644
index 0000000..973ecc5
--- /dev/null
+++ b/www/c3ref/c_trace.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQL Trace Event Codes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_TRACE SQLITE_TRACE_CLOSE SQLITE_TRACE_PROFILE SQLITE_TRACE_ROW SQLITE_TRACE_STMT -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>SQL Trace Event Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_TRACE_STMT 0x01
+#define SQLITE_TRACE_PROFILE 0x02
+#define SQLITE_TRACE_ROW 0x04
+#define SQLITE_TRACE_CLOSE 0x08
+</pre></blockquote>
+<p>
+These constants identify classes of events that can be monitored
+using the <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a> tracing logic. The M argument
+to <a href="../c3ref/trace_v2.html">sqlite3_trace_v2(D,M,X,P)</a> is an OR-ed combination of one or more of
+the following constants. The first argument to the trace callback
+is one of the following constants.</p>
+
+<p>New tracing constants may be added in future releases.</p>
+
+<p>A trace callback has four arguments: xCallback(T,C,P,X).
+The T argument is one of the integer type codes above.
+The C argument is a copy of the context pointer passed in as the
+fourth argument to <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a>.
+The P and X arguments are pointers whose meanings depend on T.</p>
+
+<p><dl>
+<a name="sqlitetracestmt"></a>
+ <dt>SQLITE_TRACE_STMT</dt>
+<dd>An SQLITE_TRACE_STMT callback is invoked when a prepared statement
+first begins running and possibly at other times during the
+execution of the prepared statement, such as at the start of each
+trigger subprogram. The P argument is a pointer to the
+<a href="../c3ref/stmt.html">prepared statement</a>. The X argument is a pointer to a string which
+is the unexpanded SQL text of the prepared statement or an SQL comment
+that indicates the invocation of a trigger. The callback can compute
+the same text that would have been returned by the legacy <a href="../c3ref/profile.html">sqlite3_trace()</a>
+interface by using the X argument when X begins with "--" and invoking
+<a href="../c3ref/expanded_sql.html">sqlite3_expanded_sql(P)</a> otherwise.</p>
+
+<p><a name="sqlitetraceprofile"></a>
+ <dt>SQLITE_TRACE_PROFILE</dt>
+<dd>An SQLITE_TRACE_PROFILE callback provides approximately the same
+information as is provided by the <a href="../c3ref/profile.html">sqlite3_profile()</a> callback.
+The P argument is a pointer to the <a href="../c3ref/stmt.html">prepared statement</a> and the
+X argument points to a 64-bit integer which is the estimated of
+the number of nanosecond that the prepared statement took to run.
+The SQLITE_TRACE_PROFILE callback is invoked when the statement finishes.</p>
+
+<p><a name="sqlitetracerow"></a>
+ <dt>SQLITE_TRACE_ROW</dt>
+<dd>An SQLITE_TRACE_ROW callback is invoked whenever a prepared
+statement generates a single row of result.
+The P argument is a pointer to the <a href="../c3ref/stmt.html">prepared statement</a> and the
+X argument is unused.</p>
+
+<p><a name="sqlitetraceclose"></a>
+ <dt>SQLITE_TRACE_CLOSE</dt>
+<dd>An SQLITE_TRACE_CLOSE callback is invoked when a database
+connection closes.
+The P argument is a pointer to the <a href="../c3ref/sqlite3.html">database connection</a> object
+and the X argument is unused.
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_txn_none.html b/www/c3ref/c_txn_none.html
new file mode 100644
index 0000000..2543a9e
--- /dev/null
+++ b/www/c3ref/c_txn_none.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Allowed return values from [sqlite3_txn_state()]</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_TXN_NONE SQLITE_TXN_READ SQLITE_TXN_WRITE {transaction state} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Allowed return values from [sqlite3_txn_state()]</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_TXN_NONE 0
+#define SQLITE_TXN_READ 1
+#define SQLITE_TXN_WRITE 2
+</pre></blockquote>
+<p>
+These constants define the current transaction state of a database file.
+The <a href="../c3ref/txn_state.html">sqlite3_txn_state(D,S)</a> interface returns one of these
+constants in order to describe the transaction state of schema S
+in <a href="../c3ref/sqlite3.html">database connection</a> D.</p>
+
+<p><dl>
+<a name="sqlitetxnnone"></a>
+ <dt>SQLITE_TXN_NONE</dt>
+<dd>The SQLITE_TXN_NONE state means that no transaction is currently
+pending.</dd></p>
+
+<p><a name="sqlitetxnread"></a>
+ <dt>SQLITE_TXN_READ</dt>
+<dd>The SQLITE_TXN_READ state means that the database is currently
+in a read transaction. Content has been read from the database file
+but nothing in the database file has changed. The transaction state
+will advanced to SQLITE_TXN_WRITE if any changes occur and there are
+no other conflicting concurrent write transactions. The transaction
+state will revert to SQLITE_TXN_NONE following a <a href="../lang_transaction.html">ROLLBACK</a> or
+<a href="../lang_transaction.html">COMMIT</a>.</dd></p>
+
+<p><a name="sqlitetxnwrite"></a>
+ <dt>SQLITE_TXN_WRITE</dt>
+<dd>The SQLITE_TXN_WRITE state means that the database is currently
+in a write transaction. Content has been written to the database file
+but has not yet committed. The transaction state will change to
+to SQLITE_TXN_NONE at the next <a href="../lang_transaction.html">ROLLBACK</a> or <a href="../lang_transaction.html">COMMIT</a>.</dd>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_vtab_constraint_support.html b/www/c3ref/c_vtab_constraint_support.html
new file mode 100644
index 0000000..ba7daad
--- /dev/null
+++ b/www/c3ref/c_vtab_constraint_support.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Virtual Table Configuration Options</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_VTAB_CONSTRAINT_SUPPORT SQLITE_VTAB_DIRECTONLY SQLITE_VTAB_INNOCUOUS {virtual table configuration option} {virtual table configuration options} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Virtual Table Configuration Options</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
+#define SQLITE_VTAB_INNOCUOUS 2
+#define SQLITE_VTAB_DIRECTONLY 3
+</pre></blockquote>
+<p>
+These macros define the various options to the
+<a href="../c3ref/vtab_config.html">sqlite3_vtab_config()</a> interface that <a href="../vtab.html">virtual table</a> implementations
+can use to customize and optimize their behavior.</p>
+
+<p><dl>
+<a name="sqlitevtabconstraintsupport"></a>
+
+<dt>SQLITE_VTAB_CONSTRAINT_SUPPORT</dt>
+<dd>Calls of the form
+<a href="../c3ref/vtab_config.html">sqlite3_vtab_config</a>(db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported,
+where X is an integer. If X is zero, then the <a href="../vtab.html">virtual table</a> whose
+<a href="../vtab.html#xcreate">xCreate</a> or <a href="../vtab.html#xconnect">xConnect</a> method invoked <a href="../c3ref/vtab_config.html">sqlite3_vtab_config()</a> does not
+support constraints. In this configuration (which is the default) if
+a call to the <a href="../vtab.html#xupdate">xUpdate</a> method returns <a href="../rescode.html#constraint">SQLITE_CONSTRAINT</a>, then the entire
+statement is rolled back as if <a href="../lang_conflict.html">OR ABORT</a> had been
+specified as part of the users SQL statement, regardless of the actual
+ON CONFLICT mode specified.</p>
+
+<p>If X is non-zero, then the virtual table implementation guarantees
+that if <a href="../vtab.html#xupdate">xUpdate</a> returns <a href="../rescode.html#constraint">SQLITE_CONSTRAINT</a>, it will do so before
+any modifications to internal or persistent data structures have been made.
+If the <a href="../lang_conflict.html">ON CONFLICT</a> mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite
+is able to roll back a statement or database transaction, and abandon
+or continue processing the current SQL statement as appropriate.
+If the ON CONFLICT mode is REPLACE and the <a href="../vtab.html#xupdate">xUpdate</a> method returns
+<a href="../rescode.html#constraint">SQLITE_CONSTRAINT</a>, SQLite handles this as if the ON CONFLICT mode
+had been ABORT.</p>
+
+<p>Virtual table implementations that are required to handle OR REPLACE
+must do so within the <a href="../vtab.html#xupdate">xUpdate</a> method. If a call to the
+<a href="../c3ref/vtab_on_conflict.html">sqlite3_vtab_on_conflict()</a> function indicates that the current ON
+CONFLICT policy is REPLACE, the virtual table implementation should
+silently replace the appropriate rows within the xUpdate callback and
+return SQLITE_OK. Or, if this is not possible, it may return
+SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT
+constraint handling.
+</dd></p>
+
+<p><a name="sqlitevtabdirectonly"></a>
+<dt>SQLITE_VTAB_DIRECTONLY</dt>
+<dd>Calls of the form
+<a href="../c3ref/vtab_config.html">sqlite3_vtab_config</a>(db,SQLITE_VTAB_DIRECTONLY) from within the
+the <a href="../vtab.html#xconnect">xConnect</a> or <a href="../vtab.html#xcreate">xCreate</a> methods of a <a href="../vtab.html">virtual table</a> implmentation
+prohibits that virtual table from being used from within triggers and
+views.
+</dd></p>
+
+<p><a name="sqlitevtabinnocuous"></a>
+<dt>SQLITE_VTAB_INNOCUOUS</dt>
+<dd>Calls of the form
+<a href="../c3ref/vtab_config.html">sqlite3_vtab_config</a>(db,SQLITE_VTAB_INNOCUOUS) from within the
+the <a href="../vtab.html#xconnect">xConnect</a> or <a href="../vtab.html#xcreate">xCreate</a> methods of a <a href="../vtab.html">virtual table</a> implmentation
+identify that virtual table as being safe to use from within triggers
+and views. Conceptually, the SQLITE_VTAB_INNOCUOUS tag means that the
+virtual table can do no serious harm even if it is controlled by a
+malicious hacker. Developers should avoid setting the SQLITE_VTAB_INNOCUOUS
+flag unless absolutely necessary.
+</dd>
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/c_win32_data_directory_type.html b/www/c3ref/c_win32_data_directory_type.html
new file mode 100644
index 0000000..b872897
--- /dev/null
+++ b/www/c3ref/c_win32_data_directory_type.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Win32 Directory Types</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: SQLITE_WIN32_DATA_DIRECTORY_TYPE SQLITE_WIN32_TEMP_DIRECTORY_TYPE -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Win32 Directory Types</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_WIN32_DATA_DIRECTORY_TYPE 1
+#define SQLITE_WIN32_TEMP_DIRECTORY_TYPE 2
+</pre></blockquote>
+<p>
+These macros are only available on Windows. They define the allowed values
+for the type argument to the <a href="../c3ref/win32_set_directory.html">sqlite3_win32_set_directory</a> interface.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/cancel_auto_extension.html b/www/c3ref/cancel_auto_extension.html
new file mode 100644
index 0000000..e680ee7
--- /dev/null
+++ b/www/c3ref/cancel_auto_extension.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Cancel Automatic Extension Loading</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_cancel_auto_extension -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Cancel Automatic Extension Loading</h2>
+</div>
+<blockquote><pre>
+int sqlite3_cancel_auto_extension(void(*xEntryPoint)(void));
+</pre></blockquote>
+<p>
+The <a href="../c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension(X)</a> interface unregisters the
+initialization routine X that was registered using a prior call to
+<a href="../c3ref/auto_extension.html">sqlite3_auto_extension(X)</a>. The <a href="../c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension(X)</a>
+routine returns 1 if initialization routine X was successfully
+unregistered and it returns 0 if X was not on the list of initialization
+routines.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/changes.html b/www/c3ref/changes.html
new file mode 100644
index 0000000..cc7b09a
--- /dev/null
+++ b/www/c3ref/changes.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Count The Number Of Rows Modified</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_changes sqlite3_changes64 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Count The Number Of Rows Modified</h2>
+</div>
+<blockquote><pre>
+int sqlite3_changes(sqlite3*);
+sqlite3_int64 sqlite3_changes64(sqlite3*);
+</pre></blockquote>
+<p>
+These functions return the number of rows modified, inserted or
+deleted by the most recently completed INSERT, UPDATE or DELETE
+statement on the database connection specified by the only parameter.
+The two functions are identical except for the type of the return value
+and that if the number of rows modified by the most recent INSERT, UPDATE
+or DELETE is greater than the maximum value supported by type "int", then
+the return value of sqlite3_changes() is undefined. Executing any other
+type of SQL statement does not modify the value returned by these functions.</p>
+
+<p>Only changes made directly by the INSERT, UPDATE or DELETE statement are
+considered - auxiliary changes caused by <a href="../lang_createtrigger.html">triggers</a>,
+<a href="../foreignkeys.html#fk_actions">foreign key actions</a> or <a href="../lang_replace.html">REPLACE</a> constraint resolution are not counted.</p>
+
+<p>Changes to a view that are intercepted by
+<a href="../lang_createtrigger.html#instead_of_trigger">INSTEAD OF triggers</a> are not counted. The value
+returned by sqlite3_changes() immediately after an INSERT, UPDATE or
+DELETE statement run on a view is always zero. Only changes made to real
+tables are counted.</p>
+
+<p>Things are more complicated if the sqlite3_changes() function is
+executed while a trigger program is running. This may happen if the
+program uses the <a href="../lang_corefunc.html#changes">changes() SQL function</a>, or if some other callback
+function invokes sqlite3_changes() directly. Essentially:</p>
+
+<p><ul>
+<li> Before entering a trigger program the value returned by
+sqlite3_changes() function is saved. After the trigger program
+has finished, the original value is restored.</p>
+
+<p><li> Within a trigger program each INSERT, UPDATE and DELETE
+statement sets the value returned by sqlite3_changes()
+upon completion as normal. Of course, this value will not include
+any changes performed by sub-triggers, as the sqlite3_changes()
+value will be saved and restored after each sub-trigger has run.
+</ul></p>
+
+<p>This means that if the changes() SQL function (or similar) is used
+by the first INSERT, UPDATE or DELETE statement within a trigger, it
+returns the value as set when the calling statement began executing.
+If it is used by the second or subsequent such statement within a trigger
+program, the value returned reflects the number of rows modified by the
+previous INSERT, UPDATE or DELETE statement within the same trigger.</p>
+
+<p>If a separate thread makes changes on the same database connection
+while <a href="../c3ref/changes.html">sqlite3_changes()</a> is running then the value returned
+is unpredictable and not meaningful.</p>
+
+<p>See also:
+<ul>
+<li> the <a href="../c3ref/total_changes.html">sqlite3_total_changes()</a> interface
+<li> the <a href="../pragma.html#pragma_count_changes">count_changes pragma</a>
+<li> the <a href="../lang_corefunc.html#changes">changes() SQL function</a>
+<li> the <a href="../pragma.html#pragma_data_version">data_version pragma</a>
+</ul>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/clear_bindings.html b/www/c3ref/clear_bindings.html
new file mode 100644
index 0000000..8503907
--- /dev/null
+++ b/www/c3ref/clear_bindings.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Reset All Bindings On A Prepared Statement</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_clear_bindings -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Reset All Bindings On A Prepared Statement</h2>
+</div>
+<blockquote><pre>
+int sqlite3_clear_bindings(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+Contrary to the intuition of many, <a href="../c3ref/reset.html">sqlite3_reset()</a> does not reset
+the <a href="../c3ref/bind_blob.html">bindings</a> on a <a href="../c3ref/stmt.html">prepared statement</a>.
+Use this routine to reset all host parameters to NULL.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/close.html b/www/c3ref/close.html
new file mode 100644
index 0000000..0f67601
--- /dev/null
+++ b/www/c3ref/close.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Closing A Database Connection</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_close sqlite3_close_v2 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Closing A Database Connection</h2>
+</div>
+<blockquote><pre>
+int sqlite3_close(sqlite3*);
+int sqlite3_close_v2(sqlite3*);
+</pre></blockquote>
+<p>
+The sqlite3_close() and sqlite3_close_v2() routines are destructors
+for the <a href="../c3ref/sqlite3.html">sqlite3</a> object.
+Calls to sqlite3_close() and sqlite3_close_v2() return <a href="../rescode.html#ok">SQLITE_OK</a> if
+the <a href="../c3ref/sqlite3.html">sqlite3</a> object is successfully destroyed and all associated
+resources are deallocated.</p>
+
+<p>Ideally, applications should <a href="../c3ref/finalize.html">finalize</a> all
+<a href="../c3ref/stmt.html">prepared statements</a>, <a href="../c3ref/blob_close.html">close</a> all <a href="../c3ref/blob.html">BLOB handles</a>, and
+<a href="../c3ref/backup_finish.html#sqlite3backupfinish">finish</a> all <a href="../c3ref/backup.html">sqlite3_backup</a> objects associated
+with the <a href="../c3ref/sqlite3.html">sqlite3</a> object prior to attempting to close the object.
+If the database connection is associated with unfinalized prepared
+statements, BLOB handlers, and/or unfinished sqlite3_backup objects then
+sqlite3_close() will leave the database connection open and return
+<a href="../rescode.html#busy">SQLITE_BUSY</a>. If sqlite3_close_v2() is called with unfinalized prepared
+statements, unclosed BLOB handlers, and/or unfinished sqlite3_backups,
+it returns <a href="../rescode.html#ok">SQLITE_OK</a> regardless, but instead of deallocating the database
+connection immediately, it marks the database connection as an unusable
+"zombie" and makes arrangements to automatically deallocate the database
+connection after all prepared statements are finalized, all BLOB handles
+are closed, and all backups have finished. The sqlite3_close_v2() interface
+is intended for use with host languages that are garbage collected, and
+where the order in which destructors are called is arbitrary.</p>
+
+<p>If an <a href="../c3ref/sqlite3.html">sqlite3</a> object is destroyed while a transaction is open,
+the transaction is automatically rolled back.</p>
+
+<p>The C parameter to <a href="../c3ref/close.html">sqlite3_close(C)</a> and <a href="../c3ref/close.html">sqlite3_close_v2(C)</a>
+must be either a NULL
+pointer or an <a href="../c3ref/sqlite3.html">sqlite3</a> object pointer obtained
+from <a href="../c3ref/open.html">sqlite3_open()</a>, <a href="../c3ref/open.html">sqlite3_open16()</a>, or
+<a href="../c3ref/open.html">sqlite3_open_v2()</a>, and not previously closed.
+Calling sqlite3_close() or sqlite3_close_v2() with a NULL pointer
+argument is a harmless no-op.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/collation_needed.html b/www/c3ref/collation_needed.html
new file mode 100644
index 0000000..46e11b3
--- /dev/null
+++ b/www/c3ref/collation_needed.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Collation Needed Callbacks</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_collation_needed sqlite3_collation_needed16 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Collation Needed Callbacks</h2>
+</div>
+<blockquote><pre>
+int sqlite3_collation_needed(
+ sqlite3*,
+ void*,
+ void(*)(void*,sqlite3*,int eTextRep,const char*)
+);
+int sqlite3_collation_needed16(
+ sqlite3*,
+ void*,
+ void(*)(void*,sqlite3*,int eTextRep,const void*)
+);
+</pre></blockquote>
+<p>
+To avoid having to register all collation sequences before a database
+can be used, a single callback function may be registered with the
+<a href="../c3ref/sqlite3.html">database connection</a> to be invoked whenever an undefined collation
+sequence is required.</p>
+
+<p>If the function is registered using the sqlite3_collation_needed() API,
+then it is passed the names of undefined collation sequences as strings
+encoded in UTF-8. If sqlite3_collation_needed16() is used,
+the names are passed as UTF-16 in machine native byte order.
+A call to either function replaces the existing collation-needed callback.</p>
+
+<p>When the callback is invoked, the first argument passed is a copy
+of the second argument to sqlite3_collation_needed() or
+sqlite3_collation_needed16(). The second argument is the database
+connection. The third argument is one of <a href="../c3ref/c_any.html">SQLITE_UTF8</a>, <a href="../c3ref/c_any.html">SQLITE_UTF16BE</a>,
+or <a href="../c3ref/c_any.html">SQLITE_UTF16LE</a>, indicating the most desirable form of the collation
+sequence function required. The fourth parameter is the name of the
+required collation sequence.</p>
+
+<p>The callback function should register the desired collation using
+<a href="../c3ref/create_collation.html">sqlite3_create_collation()</a>, <a href="../c3ref/create_collation.html">sqlite3_create_collation16()</a>, or
+<a href="../c3ref/create_collation.html">sqlite3_create_collation_v2()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/column_blob.html b/www/c3ref/column_blob.html
new file mode 100644
index 0000000..c1c6c73
--- /dev/null
+++ b/www/c3ref/column_blob.html
@@ -0,0 +1,347 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Result Values From A Query</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {column access functions} sqlite3_column_blob sqlite3_column_bytes sqlite3_column_bytes16 sqlite3_column_double sqlite3_column_int sqlite3_column_int64 sqlite3_column_text sqlite3_column_text16 sqlite3_column_type sqlite3_column_value -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Result Values From A Query</h2>
+</div>
+<blockquote><pre>
+const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
+double sqlite3_column_double(sqlite3_stmt*, int iCol);
+int sqlite3_column_int(sqlite3_stmt*, int iCol);
+sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
+const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
+const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
+sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);
+int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
+int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
+int sqlite3_column_type(sqlite3_stmt*, int iCol);
+</pre></blockquote>
+<p>
+<b>Summary:</b>
+<blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td><b>sqlite3_column_blob</b><td>&rarr;<td>BLOB result
+<tr><td><b>sqlite3_column_double</b><td>&rarr;<td>REAL result
+<tr><td><b>sqlite3_column_int</b><td>&rarr;<td>32-bit INTEGER result
+<tr><td><b>sqlite3_column_int64</b><td>&rarr;<td>64-bit INTEGER result
+<tr><td><b>sqlite3_column_text</b><td>&rarr;<td>UTF-8 TEXT result
+<tr><td><b>sqlite3_column_text16</b><td>&rarr;<td>UTF-16 TEXT result
+<tr><td><b>sqlite3_column_value</b><td>&rarr;<td>The result as an
+<a href="../c3ref/value.html">unprotected sqlite3_value</a> object.
+<tr><td>&nbsp;<td>&nbsp;<td>&nbsp;
+<tr><td><b>sqlite3_column_bytes</b><td>&rarr;<td>Size of a BLOB
+or a UTF-8 TEXT result in bytes
+<tr><td><b>sqlite3_column_bytes16&nbsp;&nbsp;</b>
+<td>&rarr;&nbsp;&nbsp;<td>Size of UTF-16
+TEXT in bytes
+<tr><td><b>sqlite3_column_type</b><td>&rarr;<td>Default
+datatype of the result
+</table></blockquote></p>
+
+<p><b>Details:</b></p>
+
+<p>These routines return information about a single column of the current
+result row of a query. In every case the first argument is a pointer
+to the <a href="../c3ref/stmt.html">prepared statement</a> that is being evaluated (the <a href="../c3ref/stmt.html">sqlite3_stmt*</a>
+that was returned from <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> or one of its variants)
+and the second argument is the index of the column for which information
+should be returned. The leftmost column of the result set has the index 0.
+The number of columns in the result can be determined using
+<a href="../c3ref/column_count.html">sqlite3_column_count()</a>.</p>
+
+<p>If the SQL statement does not currently point to a valid row, or if the
+column index is out of range, the result is undefined.
+These routines may only be called when the most recent call to
+<a href="../c3ref/step.html">sqlite3_step()</a> has returned <a href="../rescode.html#row">SQLITE_ROW</a> and neither
+<a href="../c3ref/reset.html">sqlite3_reset()</a> nor <a href="../c3ref/finalize.html">sqlite3_finalize()</a> have been called subsequently.
+If any of these routines are called after <a href="../c3ref/reset.html">sqlite3_reset()</a> or
+<a href="../c3ref/finalize.html">sqlite3_finalize()</a> or after <a href="../c3ref/step.html">sqlite3_step()</a> has returned
+something other than <a href="../rescode.html#row">SQLITE_ROW</a>, the results are undefined.
+If <a href="../c3ref/step.html">sqlite3_step()</a> or <a href="../c3ref/reset.html">sqlite3_reset()</a> or <a href="../c3ref/finalize.html">sqlite3_finalize()</a>
+are called from a different thread while any of these routines
+are pending, then the results are undefined.</p>
+
+<p>The first six interfaces (_blob, _double, _int, _int64, _text, and _text16)
+each return the value of a result column in a specific data format. If
+the result column is not initially in the requested format (for example,
+if the query returns an integer but the sqlite3_column_text() interface
+is used to extract the value) then an automatic type conversion is performed.</p>
+
+<p>The sqlite3_column_type() routine returns the
+<a href="../c3ref/c_blob.html">datatype code</a> for the initial data type
+of the result column. The returned value is one of <a href="../c3ref/c_blob.html">SQLITE_INTEGER</a>,
+<a href="../c3ref/c_blob.html">SQLITE_FLOAT</a>, <a href="../c3ref/c_blob.html">SQLITE_TEXT</a>, <a href="../c3ref/c_blob.html">SQLITE_BLOB</a>, or <a href="../c3ref/c_blob.html">SQLITE_NULL</a>.
+The return value of sqlite3_column_type() can be used to decide which
+of the first six interface should be used to extract the column value.
+The value returned by sqlite3_column_type() is only meaningful if no
+automatic type conversions have occurred for the value in question.
+After a type conversion, the result of calling sqlite3_column_type()
+is undefined, though harmless. Future
+versions of SQLite may change the behavior of sqlite3_column_type()
+following a type conversion.</p>
+
+<p>If the result is a BLOB or a TEXT string, then the sqlite3_column_bytes()
+or sqlite3_column_bytes16() interfaces can be used to determine the size
+of that BLOB or string.</p>
+
+<p>If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes()
+routine returns the number of bytes in that BLOB or string.
+If the result is a UTF-16 string, then sqlite3_column_bytes() converts
+the string to UTF-8 and then returns the number of bytes.
+If the result is a numeric value then sqlite3_column_bytes() uses
+<a href="../c3ref/mprintf.html">sqlite3_snprintf()</a> to convert that value to a UTF-8 string and returns
+the number of bytes in that string.
+If the result is NULL, then sqlite3_column_bytes() returns zero.</p>
+
+<p>If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16()
+routine returns the number of bytes in that BLOB or string.
+If the result is a UTF-8 string, then sqlite3_column_bytes16() converts
+the string to UTF-16 and then returns the number of bytes.
+If the result is a numeric value then sqlite3_column_bytes16() uses
+<a href="../c3ref/mprintf.html">sqlite3_snprintf()</a> to convert that value to a UTF-16 string and returns
+the number of bytes in that string.
+If the result is NULL, then sqlite3_column_bytes16() returns zero.</p>
+
+<p>The values returned by <a href="../c3ref/column_blob.html">sqlite3_column_bytes()</a> and
+<a href="../c3ref/column_blob.html">sqlite3_column_bytes16()</a> do not include the zero terminators at the end
+of the string. For clarity: the values returned by
+<a href="../c3ref/column_blob.html">sqlite3_column_bytes()</a> and <a href="../c3ref/column_blob.html">sqlite3_column_bytes16()</a> are the number of
+bytes in the string, not the number of characters.</p>
+
+<p>Strings returned by sqlite3_column_text() and sqlite3_column_text16(),
+even empty strings, are always zero-terminated. The return
+value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.</p>
+
+<p>Strings returned by sqlite3_column_text16() always have the endianness
+which is native to the platform, regardless of the text encoding set
+for the database.</p>
+
+<p><b>Warning:</b> The object returned by <a href="../c3ref/column_blob.html">sqlite3_column_value()</a> is an
+<a href="../c3ref/value.html">unprotected sqlite3_value</a> object. In a multithreaded environment,
+an unprotected sqlite3_value object may only be used safely with
+<a href="../c3ref/bind_blob.html">sqlite3_bind_value()</a> and <a href="../c3ref/result_blob.html">sqlite3_result_value()</a>.
+If the <a href="../c3ref/value.html">unprotected sqlite3_value</a> object returned by
+<a href="../c3ref/column_blob.html">sqlite3_column_value()</a> is used in any other way, including calls
+to routines like <a href="../c3ref/value_blob.html">sqlite3_value_int()</a>, <a href="../c3ref/value_blob.html">sqlite3_value_text()</a>,
+or <a href="../c3ref/value_blob.html">sqlite3_value_bytes()</a>, the behavior is not threadsafe.
+Hence, the sqlite3_column_value() interface
+is normally only useful within the implementation of
+<a href="../appfunc.html">application-defined SQL functions</a> or <a href="../vtab.html">virtual tables</a>, not within
+top-level application code.</p>
+
+<p>These routines may attempt to convert the datatype of the result.
+For example, if the internal representation is FLOAT and a text result
+is requested, <a href="../c3ref/mprintf.html">sqlite3_snprintf()</a> is used internally to perform the
+conversion automatically. The following table details the conversions
+that are applied:</p>
+
+<p><blockquote>
+<table border="1">
+<tr><th> Internal<br>Type <th> Requested<br>Type <th> Conversion</p>
+
+<p><tr><td> NULL <td> INTEGER <td> Result is 0
+<tr><td> NULL <td> FLOAT <td> Result is 0.0
+<tr><td> NULL <td> TEXT <td> Result is a NULL pointer
+<tr><td> NULL <td> BLOB <td> Result is a NULL pointer
+<tr><td> INTEGER <td> FLOAT <td> Convert from integer to float
+<tr><td> INTEGER <td> TEXT <td> ASCII rendering of the integer
+<tr><td> INTEGER <td> BLOB <td> Same as INTEGER->TEXT
+<tr><td> FLOAT <td> INTEGER <td> <a href="../lang_expr.html#castexpr">CAST</a> to INTEGER
+<tr><td> FLOAT <td> TEXT <td> ASCII rendering of the float
+<tr><td> FLOAT <td> BLOB <td> <a href="../lang_expr.html#castexpr">CAST</a> to BLOB
+<tr><td> TEXT <td> INTEGER <td> <a href="../lang_expr.html#castexpr">CAST</a> to INTEGER
+<tr><td> TEXT <td> FLOAT <td> <a href="../lang_expr.html#castexpr">CAST</a> to REAL
+<tr><td> TEXT <td> BLOB <td> No change
+<tr><td> BLOB <td> INTEGER <td> <a href="../lang_expr.html#castexpr">CAST</a> to INTEGER
+<tr><td> BLOB <td> FLOAT <td> <a href="../lang_expr.html#castexpr">CAST</a> to REAL
+<tr><td> BLOB <td> TEXT <td> <a href="../lang_expr.html#castexpr">CAST</a> to TEXT, ensure zero terminator
+</table>
+</blockquote></p>
+
+<p>Note that when type conversions occur, pointers returned by prior
+calls to sqlite3_column_blob(), sqlite3_column_text(), and/or
+sqlite3_column_text16() may be invalidated.
+Type conversions and pointer invalidations might occur
+in the following cases:</p>
+
+<p><ul>
+<li> The initial content is a BLOB and sqlite3_column_text() or
+sqlite3_column_text16() is called. A zero-terminator might
+need to be added to the string.</li>
+<li> The initial content is UTF-8 text and sqlite3_column_bytes16() or
+sqlite3_column_text16() is called. The content must be converted
+to UTF-16.</li>
+<li> The initial content is UTF-16 text and sqlite3_column_bytes() or
+sqlite3_column_text() is called. The content must be converted
+to UTF-8.</li>
+</ul></p>
+
+<p>Conversions between UTF-16be and UTF-16le are always done in place and do
+not invalidate a prior pointer, though of course the content of the buffer
+that the prior pointer references will have been modified. Other kinds
+of conversion are done in place when it is possible, but sometimes they
+are not possible and in those cases prior pointers are invalidated.</p>
+
+<p>The safest policy is to invoke these routines
+in one of the following ways:</p>
+
+<p><ul>
+<li>sqlite3_column_text() followed by sqlite3_column_bytes()</li>
+<li>sqlite3_column_blob() followed by sqlite3_column_bytes()</li>
+<li>sqlite3_column_text16() followed by sqlite3_column_bytes16()</li>
+</ul></p>
+
+<p>In other words, you should call sqlite3_column_text(),
+sqlite3_column_blob(), or sqlite3_column_text16() first to force the result
+into the desired format, then invoke sqlite3_column_bytes() or
+sqlite3_column_bytes16() to find the size of the result. Do not mix calls
+to sqlite3_column_text() or sqlite3_column_blob() with calls to
+sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16()
+with calls to sqlite3_column_bytes().</p>
+
+<p>The pointers returned are valid until a type conversion occurs as
+described above, or until <a href="../c3ref/step.html">sqlite3_step()</a> or <a href="../c3ref/reset.html">sqlite3_reset()</a> or
+<a href="../c3ref/finalize.html">sqlite3_finalize()</a> is called. The memory space used to hold strings
+and BLOBs is freed automatically. Do not pass the pointers returned
+from <a href="../c3ref/column_blob.html">sqlite3_column_blob()</a>, <a href="../c3ref/column_blob.html">sqlite3_column_text()</a>, etc. into
+<a href="../c3ref/free.html">sqlite3_free()</a>.</p>
+
+<p>As long as the input parameters are correct, these routines will only
+fail if an out-of-memory error occurs during a format conversion.
+Only the following subset of interfaces are subject to out-of-memory
+errors:</p>
+
+<p><ul>
+<li> sqlite3_column_blob()
+<li> sqlite3_column_text()
+<li> sqlite3_column_text16()
+<li> sqlite3_column_bytes()
+<li> sqlite3_column_bytes16()
+</ul></p>
+
+<p>If an out-of-memory error occurs, then the return value from these
+routines is the same as if the column had contained an SQL NULL value.
+Valid SQL NULL returns can be distinguished from out-of-memory errors
+by invoking the <a href="../c3ref/errcode.html">sqlite3_errcode()</a> immediately after the suspect
+return value is obtained and before any
+other SQLite interface is called on the same <a href="../c3ref/sqlite3.html">database connection</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/column_count.html b/www/c3ref/column_count.html
new file mode 100644
index 0000000..49b732d
--- /dev/null
+++ b/www/c3ref/column_count.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Number Of Columns In A Result Set</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_column_count -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Number Of Columns In A Result Set</h2>
+</div>
+<blockquote><pre>
+int sqlite3_column_count(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+Return the number of columns in the result set returned by the
+<a href="../c3ref/stmt.html">prepared statement</a>. If this routine returns 0, that means the
+<a href="../c3ref/stmt.html">prepared statement</a> returns no data (for example an <a href="../lang_update.html">UPDATE</a>).
+However, just because this routine returns a positive number does not
+mean that one or more rows of data will be returned. A SELECT statement
+will always have a positive sqlite3_column_count() but depending on the
+WHERE clause constraints and the table content, it might return no rows.</p>
+
+<p>See also: <a href="../c3ref/data_count.html">sqlite3_data_count()</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/column_database_name.html b/www/c3ref/column_database_name.html
new file mode 100644
index 0000000..d85520a
--- /dev/null
+++ b/www/c3ref/column_database_name.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Source Of Data In A Query Result</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_column_database_name sqlite3_column_database_name16 sqlite3_column_origin_name sqlite3_column_origin_name16 sqlite3_column_table_name sqlite3_column_table_name16 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Source Of Data In A Query Result</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_column_database_name(sqlite3_stmt*,int);
+const void *sqlite3_column_database_name16(sqlite3_stmt*,int);
+const char *sqlite3_column_table_name(sqlite3_stmt*,int);
+const void *sqlite3_column_table_name16(sqlite3_stmt*,int);
+const char *sqlite3_column_origin_name(sqlite3_stmt*,int);
+const void *sqlite3_column_origin_name16(sqlite3_stmt*,int);
+</pre></blockquote>
+<p>
+These routines provide a means to determine the database, table, and
+table column that is the origin of a particular result column in
+<a href="../lang_select.html">SELECT</a> statement.
+The name of the database or table or column can be returned as
+either a UTF-8 or UTF-16 string. The _database_ routines return
+the database name, the _table_ routines return the table name, and
+the origin_ routines return the column name.
+The returned string is valid until the <a href="../c3ref/stmt.html">prepared statement</a> is destroyed
+using <a href="../c3ref/finalize.html">sqlite3_finalize()</a> or until the statement is automatically
+reprepared by the first call to <a href="../c3ref/step.html">sqlite3_step()</a> for a particular run
+or until the same information is requested
+again in a different encoding.</p>
+
+<p>The names returned are the original un-aliased names of the
+database, table, and column.</p>
+
+<p>The first argument to these interfaces is a <a href="../c3ref/stmt.html">prepared statement</a>.
+These functions return information about the Nth result column returned by
+the statement, where N is the second function argument.
+The left-most column is column 0 for these routines.</p>
+
+<p>If the Nth column returned by the statement is an expression or
+subquery and is not a column value, then all of these functions return
+NULL. These routines might also return NULL if a memory allocation error
+occurs. Otherwise, they return the name of the attached database, table,
+or column that query result column was extracted from.</p>
+
+<p>As with all other SQLite APIs, those whose names end with "16" return
+UTF-16 encoded strings and the other functions return UTF-8.</p>
+
+<p>These APIs are only available if the library was compiled with the
+<a href="../compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> C-preprocessor symbol.</p>
+
+<p>If two or more threads call one or more
+<a href="../c3ref/column_database_name.html">column metadata interfaces</a>
+for the same <a href="../c3ref/stmt.html">prepared statement</a> and result column
+at the same time then the results are undefined.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/column_decltype.html b/www/c3ref/column_decltype.html
new file mode 100644
index 0000000..97010d2
--- /dev/null
+++ b/www/c3ref/column_decltype.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Declared Datatype Of A Query Result</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_column_decltype sqlite3_column_decltype16 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Declared Datatype Of A Query Result</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_column_decltype(sqlite3_stmt*,int);
+const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
+</pre></blockquote>
+<p>
+The first parameter is a <a href="../c3ref/stmt.html">prepared statement</a>.
+If this statement is a <a href="../lang_select.html">SELECT</a> statement and the Nth column of the
+returned result set of that <a href="../lang_select.html">SELECT</a> is a table column (not an
+expression or subquery) then the declared type of the table
+column is returned. If the Nth column of the result set is an
+expression or subquery, then a NULL pointer is returned.
+The returned string is always UTF-8 encoded.</p>
+
+<p>For example, given the database schema:</p>
+
+<p>CREATE TABLE t1(c1 VARIANT);</p>
+
+<p>and the following statement to be compiled:</p>
+
+<p>SELECT c1 + 1, c1 FROM t1;</p>
+
+<p>this routine would return the string "VARIANT" for the second result
+column (i==1), and a NULL pointer for the first result column (i==0).</p>
+
+<p>SQLite uses dynamic run-time typing. So just because a column
+is declared to contain a particular type does not mean that the
+data stored in that column is of the declared type. SQLite is
+strongly typed, but the typing is dynamic not static. Type
+is associated with individual values, not with the containers
+used to hold those values.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/column_name.html b/www/c3ref/column_name.html
new file mode 100644
index 0000000..3f2bea5
--- /dev/null
+++ b/www/c3ref/column_name.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Column Names In A Result Set</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_column_name sqlite3_column_name16 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Column Names In A Result Set</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_column_name(sqlite3_stmt*, int N);
+const void *sqlite3_column_name16(sqlite3_stmt*, int N);
+</pre></blockquote>
+<p>
+These routines return the name assigned to a particular column
+in the result set of a <a href="../lang_select.html">SELECT</a> statement. The sqlite3_column_name()
+interface returns a pointer to a zero-terminated UTF-8 string
+and sqlite3_column_name16() returns a pointer to a zero-terminated
+UTF-16 string. The first parameter is the <a href="../c3ref/stmt.html">prepared statement</a>
+that implements the <a href="../lang_select.html">SELECT</a> statement. The second parameter is the
+column number. The leftmost column is number 0.</p>
+
+<p>The returned string pointer is valid until either the <a href="../c3ref/stmt.html">prepared statement</a>
+is destroyed by <a href="../c3ref/finalize.html">sqlite3_finalize()</a> or until the statement is automatically
+reprepared by the first call to <a href="../c3ref/step.html">sqlite3_step()</a> for a particular run
+or until the next call to
+sqlite3_column_name() or sqlite3_column_name16() on the same column.</p>
+
+<p>If sqlite3_malloc() fails during the processing of either routine
+(for example during a conversion from UTF-8 to UTF-16) then a
+NULL pointer is returned.</p>
+
+<p>The name of a result column is the value of the "AS" clause for
+that column, if there is an AS clause. If there is no AS clause
+then the name of the column is unspecified and may change from
+one release of SQLite to the next.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/commit_hook.html b/www/c3ref/commit_hook.html
new file mode 100644
index 0000000..284a1e3
--- /dev/null
+++ b/www/c3ref/commit_hook.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Commit And Rollback Notification Callbacks</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_commit_hook sqlite3_rollback_hook -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Commit And Rollback Notification Callbacks</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
+void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
+</pre></blockquote>
+<p>
+The sqlite3_commit_hook() interface registers a callback
+function to be invoked whenever a transaction is <a href="../lang_transaction.html">committed</a>.
+Any callback set by a previous call to sqlite3_commit_hook()
+for the same database connection is overridden.
+The sqlite3_rollback_hook() interface registers a callback
+function to be invoked whenever a transaction is <a href="../lang_transaction.html">rolled back</a>.
+Any callback set by a previous call to sqlite3_rollback_hook()
+for the same database connection is overridden.
+The pArg argument is passed through to the callback.
+If the callback on a commit hook function returns non-zero,
+then the commit is converted into a rollback.</p>
+
+<p>The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions
+return the P argument from the previous call of the same function
+on the same <a href="../c3ref/sqlite3.html">database connection</a> D, or NULL for
+the first call for each function on D.</p>
+
+<p>The commit and rollback hook callbacks are not reentrant.
+The callback implementation must not do anything that will modify
+the database connection that invoked the callback. Any actions
+to modify the database connection must be deferred until after the
+completion of the <a href="../c3ref/step.html">sqlite3_step()</a> call that triggered the commit
+or rollback hook in the first place.
+Note that running any other SQL statements, including SELECT statements,
+or merely calling <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> and <a href="../c3ref/step.html">sqlite3_step()</a> will modify
+the database connections for the meaning of "modify" in this paragraph.</p>
+
+<p>Registering a NULL function disables the callback.</p>
+
+<p>When the commit hook callback routine returns zero, the <a href="../lang_transaction.html">COMMIT</a>
+operation is allowed to continue normally. If the commit hook
+returns non-zero, then the <a href="../lang_transaction.html">COMMIT</a> is converted into a <a href="../lang_transaction.html">ROLLBACK</a>.
+The rollback hook is invoked on a rollback that results from a commit
+hook returning non-zero, just as it would be with any other rollback.</p>
+
+<p>For the purposes of this API, a transaction is said to have been
+rolled back if an explicit "ROLLBACK" statement is executed, or
+an error or constraint causes an implicit rollback to occur.
+The rollback callback is not invoked if a transaction is
+automatically rolled back because the database connection is closed.</p>
+
+<p>See also the <a href="../c3ref/update_hook.html">sqlite3_update_hook()</a> interface.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/compileoption_get.html b/www/c3ref/compileoption_get.html
new file mode 100644
index 0000000..5324671
--- /dev/null
+++ b/www/c3ref/compileoption_get.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Run-Time Library Compilation Options Diagnostics</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_compileoption_get sqlite3_compileoption_used -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Run-Time Library Compilation Options Diagnostics</h2>
+</div>
+<blockquote><pre>
+#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
+int sqlite3_compileoption_used(const char *zOptName);
+const char *sqlite3_compileoption_get(int N);
+#else
+# define sqlite3_compileoption_used(X) 0
+# define sqlite3_compileoption_get(X) ((void*)0)
+#endif
+</pre></blockquote>
+<p>
+The sqlite3_compileoption_used() function returns 0 or 1
+indicating whether the specified option was defined at
+compile time. The SQLITE_ prefix may be omitted from the
+option name passed to sqlite3_compileoption_used().</p>
+
+<p>The sqlite3_compileoption_get() function allows iterating
+over the list of options that were defined at compile time by
+returning the N-th compile time option string. If N is out of range,
+sqlite3_compileoption_get() returns a NULL pointer. The SQLITE_
+prefix is omitted from any strings returned by
+sqlite3_compileoption_get().</p>
+
+<p>Support for the diagnostic functions sqlite3_compileoption_used()
+and sqlite3_compileoption_get() may be omitted by specifying the
+<a href="../compile.html#omit_compileoption_diags">SQLITE_OMIT_COMPILEOPTION_DIAGS</a> option at compile time.</p>
+
+<p>See also: SQL functions <a href="../lang_corefunc.html#sqlite_compileoption_used">sqlite_compileoption_used()</a> and
+<a href="../lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a> and the <a href="../pragma.html#pragma_compile_options">compile_options pragma</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/complete.html b/www/c3ref/complete.html
new file mode 100644
index 0000000..37a62b9
--- /dev/null
+++ b/www/c3ref/complete.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Determine If An SQL Statement Is Complete</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_complete sqlite3_complete16 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Determine If An SQL Statement Is Complete</h2>
+</div>
+<blockquote><pre>
+int sqlite3_complete(const char *sql);
+int sqlite3_complete16(const void *sql);
+</pre></blockquote>
+<p>
+These routines are useful during command-line input to determine if the
+currently entered text seems to form a complete SQL statement or
+if additional input is needed before sending the text into
+SQLite for parsing. These routines return 1 if the input string
+appears to be a complete SQL statement. A statement is judged to be
+complete if it ends with a semicolon token and is not a prefix of a
+well-formed CREATE TRIGGER statement. Semicolons that are embedded within
+string literals or quoted identifier names or comments are not
+independent tokens (they are part of the token in which they are
+embedded) and thus do not count as a statement terminator. Whitespace
+and comments that follow the final semicolon are ignored.</p>
+
+<p>These routines return 0 if the statement is incomplete. If a
+memory allocation fails, then SQLITE_NOMEM is returned.</p>
+
+<p>These routines do not parse the SQL statements thus
+will not detect syntactically incorrect SQL.</p>
+
+<p>If SQLite has not been initialized using <a href="../c3ref/initialize.html">sqlite3_initialize()</a> prior
+to invoking sqlite3_complete16() then sqlite3_initialize() is invoked
+automatically by sqlite3_complete16(). If that initialization fails,
+then the return value from sqlite3_complete16() will be non-zero
+regardless of whether or not the input SQL is complete.</p>
+
+<p>The input to <a href="../c3ref/complete.html">sqlite3_complete()</a> must be a zero-terminated
+UTF-8 string.</p>
+
+<p>The input to <a href="../c3ref/complete.html">sqlite3_complete16()</a> must be a zero-terminated
+UTF-16 string in native byte order.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/config.html b/www/c3ref/config.html
new file mode 100644
index 0000000..1e9832a
--- /dev/null
+++ b/www/c3ref/config.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Configuring The SQLite Library</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_config -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Configuring The SQLite Library</h2>
+</div>
+<blockquote><pre>
+int sqlite3_config(int, ...);
+</pre></blockquote>
+<p>
+The sqlite3_config() interface is used to make global configuration
+changes to SQLite in order to tune SQLite to the specific needs of
+the application. The default configuration is recommended for most
+applications and so this routine is usually not necessary. It is
+provided to support rare applications with unusual needs.</p>
+
+<p><b>The sqlite3_config() interface is not threadsafe. The application
+must ensure that no other SQLite interfaces are invoked by other
+threads while sqlite3_config() is running.</b></p>
+
+<p>The sqlite3_config() interface
+may only be invoked prior to library initialization using
+<a href="../c3ref/initialize.html">sqlite3_initialize()</a> or after shutdown by <a href="../c3ref/initialize.html">sqlite3_shutdown()</a>.
+If sqlite3_config() is called after <a href="../c3ref/initialize.html">sqlite3_initialize()</a> and before
+<a href="../c3ref/initialize.html">sqlite3_shutdown()</a> then it will return SQLITE_MISUSE.
+Note, however, that sqlite3_config() can be called as part of the
+implementation of an application-defined <a href="../c3ref/initialize.html">sqlite3_os_init()</a>.</p>
+
+<p>The first argument to sqlite3_config() is an integer
+<a href="../c3ref/c_config_covering_index_scan.html">configuration option</a> that determines
+what property of SQLite is to be configured. Subsequent arguments
+vary depending on the <a href="../c3ref/c_config_covering_index_scan.html">configuration option</a>
+in the first argument.</p>
+
+<p>When a configuration option is set, sqlite3_config() returns <a href="../rescode.html#ok">SQLITE_OK</a>.
+If the option is unknown or SQLite is unable to set the option
+then this routine returns a non-zero <a href="../rescode.html">error code</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/constlist.html b/www/c3ref/constlist.html
new file mode 100644
index 0000000..0c7af76
--- /dev/null
+++ b/www/c3ref/constlist.html
@@ -0,0 +1,579 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>List Of SQLite Constants</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+
+<h2>List Of Constants:</h2>
+<p>Also available: <a href="../rescode.html">list of error codes</a></p>
+<div class='columns' style='columns: 20em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../rescode.html#abort'>SQLITE_ABORT</a></li>
+<li><a href='../rescode.html#abort_rollback'>SQLITE_ABORT_ROLLBACK</a></li>
+<li><a href='../c3ref/c_access_exists.html'>SQLITE_ACCESS_EXISTS</a></li>
+<li><a href='../c3ref/c_access_exists.html'>SQLITE_ACCESS_READ</a></li>
+<li><a href='../c3ref/c_access_exists.html'>SQLITE_ACCESS_READWRITE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_ALTER_TABLE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_ANALYZE</a></li>
+<li><a href='../c3ref/c_any.html'>SQLITE_ANY</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_ATTACH</a></li>
+<li><a href='../rescode.html#auth'>SQLITE_AUTH</a></li>
+<li><a href='../rescode.html#auth_user'>SQLITE_AUTH_USER</a></li>
+<li><a href='../c3ref/c_blob.html'>SQLITE_BLOB</a></li>
+<li><a href='../rescode.html#busy'>SQLITE_BUSY</a></li>
+<li><a href='../rescode.html#busy_recovery'>SQLITE_BUSY_RECOVERY</a></li>
+<li><a href='../rescode.html#busy_snapshot'>SQLITE_BUSY_SNAPSHOT</a></li>
+<li><a href='../rescode.html#busy_timeout'>SQLITE_BUSY_TIMEOUT</a></li>
+<li><a href='../rescode.html#cantopen'>SQLITE_CANTOPEN</a></li>
+<li><a href='../rescode.html#cantopen_convpath'>SQLITE_CANTOPEN_CONVPATH</a></li>
+<li><a href='../rescode.html#cantopen_dirtywal'>SQLITE_CANTOPEN_DIRTYWAL</a></li>
+<li><a href='../rescode.html#cantopen_fullpath'>SQLITE_CANTOPEN_FULLPATH</a></li>
+<li><a href='../rescode.html#cantopen_isdir'>SQLITE_CANTOPEN_ISDIR</a></li>
+<li><a href='../rescode.html#cantopen_notempdir'>SQLITE_CANTOPEN_NOTEMPDIR</a></li>
+<li><a href='../rescode.html#cantopen_symlink'>SQLITE_CANTOPEN_SYMLINK</a></li>
+<li><a href='../c3ref/c_checkpoint_full.html'>SQLITE_CHECKPOINT_FULL</a></li>
+<li><a href='../c3ref/c_checkpoint_full.html'>SQLITE_CHECKPOINT_PASSIVE</a></li>
+<li><a href='../c3ref/c_checkpoint_full.html'>SQLITE_CHECKPOINT_RESTART</a></li>
+<li><a href='../c3ref/c_checkpoint_full.html'>SQLITE_CHECKPOINT_TRUNCATE</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigcoveringindexscan'>SQLITE_CONFIG_COVERING_INDEX_SCAN</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfiggetmalloc'>SQLITE_CONFIG_GETMALLOC</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex'>SQLITE_CONFIG_GETMUTEX</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache'>SQLITE_CONFIG_GETPCACHE</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2'>SQLITE_CONFIG_GETPCACHE2</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigheap'>SQLITE_CONFIG_HEAP</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfiglog'>SQLITE_CONFIG_LOG</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside'>SQLITE_CONFIG_LOOKASIDE</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc'>SQLITE_CONFIG_MALLOC</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize'>SQLITE_CONFIG_MEMDB_MAXSIZE</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus'>SQLITE_CONFIG_MEMSTATUS</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize'>SQLITE_CONFIG_MMAP_SIZE</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread'>SQLITE_CONFIG_MULTITHREAD</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigmutex'>SQLITE_CONFIG_MUTEX</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache'>SQLITE_CONFIG_PAGECACHE</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigpcache'>SQLITE_CONFIG_PCACHE</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2'>SQLITE_CONFIG_PCACHE2</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz'>SQLITE_CONFIG_PCACHE_HDRSZ</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz'>SQLITE_CONFIG_PMASZ</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigscratch'>SQLITE_CONFIG_SCRATCH</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigserialized'>SQLITE_CONFIG_SERIALIZED</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread'>SQLITE_CONFIG_SINGLETHREAD</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigsmallmalloc'>SQLITE_CONFIG_SMALL_MALLOC</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigsorterrefsize'>SQLITE_CONFIG_SORTERREF_SIZE</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigsqllog'>SQLITE_CONFIG_SQLLOG</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill'>SQLITE_CONFIG_STMTJRNL_SPILL</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfiguri'>SQLITE_CONFIG_URI</a></li>
+<li><a href='../c3ref/c_config_covering_index_scan.html#sqliteconfigwin32heapsize'>SQLITE_CONFIG_WIN32_HEAPSIZE</a></li>
+<li><a href='../rescode.html#constraint'>SQLITE_CONSTRAINT</a></li>
+<li><a href='../rescode.html#constraint_check'>SQLITE_CONSTRAINT_CHECK</a></li>
+<li><a href='../rescode.html#constraint_commithook'>SQLITE_CONSTRAINT_COMMITHOOK</a></li>
+<li><a href='../rescode.html#constraint_datatype'>SQLITE_CONSTRAINT_DATATYPE</a></li>
+<li><a href='../rescode.html#constraint_foreignkey'>SQLITE_CONSTRAINT_FOREIGNKEY</a></li>
+<li><a href='../rescode.html#constraint_function'>SQLITE_CONSTRAINT_FUNCTION</a></li>
+<li><a href='../rescode.html#constraint_notnull'>SQLITE_CONSTRAINT_NOTNULL</a></li>
+<li><a href='../rescode.html#constraint_pinned'>SQLITE_CONSTRAINT_PINNED</a></li>
+<li><a href='../rescode.html#constraint_primarykey'>SQLITE_CONSTRAINT_PRIMARYKEY</a></li>
+<li><a href='../rescode.html#constraint_rowid'>SQLITE_CONSTRAINT_ROWID</a></li>
+<li><a href='../rescode.html#constraint_trigger'>SQLITE_CONSTRAINT_TRIGGER</a></li>
+<li><a href='../rescode.html#constraint_unique'>SQLITE_CONSTRAINT_UNIQUE</a></li>
+<li><a href='../rescode.html#constraint_vtab'>SQLITE_CONSTRAINT_VTAB</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_COPY</a></li>
+<li><a href='../rescode.html#corrupt'>SQLITE_CORRUPT</a></li>
+<li><a href='../rescode.html#corrupt_index'>SQLITE_CORRUPT_INDEX</a></li>
+<li><a href='../rescode.html#corrupt_sequence'>SQLITE_CORRUPT_SEQUENCE</a></li>
+<li><a href='../rescode.html#corrupt_vtab'>SQLITE_CORRUPT_VTAB</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_CREATE_INDEX</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_CREATE_TABLE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_CREATE_TEMP_INDEX</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_CREATE_TEMP_TABLE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_CREATE_TEMP_TRIGGER</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_CREATE_TEMP_VIEW</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_CREATE_TRIGGER</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_CREATE_VIEW</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_CREATE_VTABLE</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive'>SQLITE_DBCONFIG_DEFENSIVE</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl'>SQLITE_DBCONFIG_DQS_DDL</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml'>SQLITE_DBCONFIG_DQS_DML</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefkey'>SQLITE_DBCONFIG_ENABLE_FKEY</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer'>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension'>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg'>SQLITE_DBCONFIG_ENABLE_QPSG</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger'>SQLITE_DBCONFIG_ENABLE_TRIGGER</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview'>SQLITE_DBCONFIG_ENABLE_VIEW</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable'>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat'>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside'>SQLITE_DBCONFIG_LOOKASIDE</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname'>SQLITE_DBCONFIG_MAINDBNAME</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html'>SQLITE_DBCONFIG_MAX</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose'>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase'>SQLITE_DBCONFIG_RESET_DATABASE</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigtriggereqp'>SQLITE_DBCONFIG_TRIGGER_EQP</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema'>SQLITE_DBCONFIG_TRUSTED_SCHEMA</a></li>
+<li><a href='../c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema'>SQLITE_DBCONFIG_WRITABLE_SCHEMA</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit'>SQLITE_DBSTATUS_CACHE_HIT</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss'>SQLITE_DBSTATUS_CACHE_MISS</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill'>SQLITE_DBSTATUS_CACHE_SPILL</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused'>SQLITE_DBSTATUS_CACHE_USED</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared'>SQLITE_DBSTATUS_CACHE_USED_SHARED</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite'>SQLITE_DBSTATUS_CACHE_WRITE</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks'>SQLITE_DBSTATUS_DEFERRED_FKS</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit'>SQLITE_DBSTATUS_LOOKASIDE_HIT</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull'>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize'>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatuslookasideused'>SQLITE_DBSTATUS_LOOKASIDE_USED</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html'>SQLITE_DBSTATUS_MAX</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused'>SQLITE_DBSTATUS_SCHEMA_USED</a></li>
+<li><a href='../c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused'>SQLITE_DBSTATUS_STMT_USED</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DELETE</a></li>
+<li><a href='../c3ref/c_deny.html'>SQLITE_DENY</a></li>
+<li><a href='../c3ref/c_deserialize_freeonclose.html'>SQLITE_DESERIALIZE_FREEONCLOSE</a></li>
+<li><a href='../c3ref/c_deserialize_freeonclose.html'>SQLITE_DESERIALIZE_READONLY</a></li>
+<li><a href='../c3ref/c_deserialize_freeonclose.html'>SQLITE_DESERIALIZE_RESIZEABLE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DETACH</a></li>
+<li><a href='../c3ref/c_deterministic.html#sqlitedeterministic'>SQLITE_DETERMINISTIC</a></li>
+<li><a href='../c3ref/c_deterministic.html#sqlitedirectonly'>SQLITE_DIRECTONLY</a></li>
+<li><a href='../rescode.html#done'>SQLITE_DONE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DROP_INDEX</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DROP_TABLE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DROP_TEMP_INDEX</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DROP_TEMP_TABLE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DROP_TEMP_TRIGGER</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DROP_TEMP_VIEW</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DROP_TRIGGER</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DROP_VIEW</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_DROP_VTABLE</a></li>
+<li><a href='../rescode.html#empty'>SQLITE_EMPTY</a></li>
+<li><a href='../rescode.html#error'>SQLITE_ERROR</a></li>
+<li><a href='../rescode.html#error_missing_collseq'>SQLITE_ERROR_MISSING_COLLSEQ</a></li>
+<li><a href='../rescode.html#error_retry'>SQLITE_ERROR_RETRY</a></li>
+<li><a href='../rescode.html#error_snapshot'>SQLITE_ERROR_SNAPSHOT</a></li>
+<li><a href='../c3ref/c_fail.html'>SQLITE_FAIL</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite'>SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler'>SQLITE_FCNTL_BUSYHANDLER</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize'>SQLITE_FCNTL_CHUNK_SIZE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptdone'>SQLITE_FCNTL_CKPT_DONE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptstart'>SQLITE_FCNTL_CKPT_START</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile'>SQLITE_FCNTL_CKSM_FILE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite'>SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo'>SQLITE_FCNTL_COMMIT_PHASETWO</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion'>SQLITE_FCNTL_DATA_VERSION</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlexternalreader'>SQLITE_FCNTL_EXTERNAL_READER</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer'>SQLITE_FCNTL_FILE_POINTER</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html'>SQLITE_FCNTL_GET_LOCKPROXYFILE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlhasmoved'>SQLITE_FCNTL_HAS_MOVED</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer'>SQLITE_FCNTL_JOURNAL_POINTER</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html'>SQLITE_FCNTL_LAST_ERRNO</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate'>SQLITE_FCNTL_LOCKSTATE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllocktimeout'>SQLITE_FCNTL_LOCK_TIMEOUT</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize'>SQLITE_FCNTL_MMAP_SIZE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite'>SQLITE_FCNTL_OVERWRITE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html'>SQLITE_FCNTL_PDB</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal'>SQLITE_FCNTL_PERSIST_WAL</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite'>SQLITE_FCNTL_POWERSAFE_OVERWRITE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma'>SQLITE_FCNTL_PRAGMA</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrbu'>SQLITE_FCNTL_RBU</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html'>SQLITE_FCNTL_RESERVE_BYTES</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache'>SQLITE_FCNTL_RESET_CACHE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite'>SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html'>SQLITE_FCNTL_SET_LOCKPROXYFILE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint'>SQLITE_FCNTL_SIZE_HINT</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit'>SQLITE_FCNTL_SIZE_LIMIT</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync'>SQLITE_FCNTL_SYNC</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted'>SQLITE_FCNTL_SYNC_OMITTED</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename'>SQLITE_FCNTL_TEMPFILENAME</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace'>SQLITE_FCNTL_TRACE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname'>SQLITE_FCNTL_VFSNAME</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer'>SQLITE_FCNTL_VFS_POINTER</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwalblock'>SQLITE_FCNTL_WAL_BLOCK</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry'>SQLITE_FCNTL_WIN32_AV_RETRY</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle'>SQLITE_FCNTL_WIN32_GET_HANDLE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32sethandle'>SQLITE_FCNTL_WIN32_SET_HANDLE</a></li>
+<li><a href='../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlzipvfs'>SQLITE_FCNTL_ZIPVFS</a></li>
+<li><a href='../c3ref/c_blob.html'>SQLITE_FLOAT</a></li>
+<li><a href='../rescode.html#format'>SQLITE_FORMAT</a></li>
+<li><a href='../rescode.html#full'>SQLITE_FULL</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_FUNCTION</a></li>
+<li><a href='../c3ref/c_deny.html'>SQLITE_IGNORE</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_EQ</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_FUNCTION</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_GE</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_GLOB</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_GT</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_IS</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_ISNOT</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_ISNOTNULL</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_ISNULL</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_LE</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_LIKE</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_LIMIT</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_LT</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_MATCH</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_NE</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_OFFSET</a></li>
+<li><a href='../c3ref/c_index_constraint_eq.html'>SQLITE_INDEX_CONSTRAINT_REGEXP</a></li>
+<li><a href='../c3ref/c_index_scan_unique.html'>SQLITE_INDEX_SCAN_UNIQUE</a></li>
+<li><a href='../c3ref/c_deterministic.html#sqliteinnocuous'>SQLITE_INNOCUOUS</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_INSERT</a></li>
+<li><a href='../c3ref/c_blob.html'>SQLITE_INTEGER</a></li>
+<li><a href='../rescode.html#internal'>SQLITE_INTERNAL</a></li>
+<li><a href='../rescode.html#interrupt'>SQLITE_INTERRUPT</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_ATOMIC</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_ATOMIC16K</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_ATOMIC1K</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_ATOMIC2K</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_ATOMIC32K</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_ATOMIC4K</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_ATOMIC512</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_ATOMIC64K</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_ATOMIC8K</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_BATCH_ATOMIC</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_IMMUTABLE</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_POWERSAFE_OVERWRITE</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_SAFE_APPEND</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_SEQUENTIAL</a></li>
+<li><a href='../c3ref/c_iocap_atomic.html'>SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN</a></li>
+<li><a href='../rescode.html#ioerr'>SQLITE_IOERR</a></li>
+<li><a href='../rescode.html#ioerr_access'>SQLITE_IOERR_ACCESS</a></li>
+<li><a href='../rescode.html#ioerr_auth'>SQLITE_IOERR_AUTH</a></li>
+<li><a href='../rescode.html#ioerr_begin_atomic'>SQLITE_IOERR_BEGIN_ATOMIC</a></li>
+<li><a href='../rescode.html#ioerr_blocked'>SQLITE_IOERR_BLOCKED</a></li>
+<li><a href='../rescode.html#ioerr_checkreservedlock'>SQLITE_IOERR_CHECKRESERVEDLOCK</a></li>
+<li><a href='../rescode.html#ioerr_close'>SQLITE_IOERR_CLOSE</a></li>
+<li><a href='../rescode.html#ioerr_commit_atomic'>SQLITE_IOERR_COMMIT_ATOMIC</a></li>
+<li><a href='../rescode.html#ioerr_convpath'>SQLITE_IOERR_CONVPATH</a></li>
+<li><a href='../rescode.html#ioerr_corruptfs'>SQLITE_IOERR_CORRUPTFS</a></li>
+<li><a href='../rescode.html#ioerr_data'>SQLITE_IOERR_DATA</a></li>
+<li><a href='../rescode.html#ioerr_delete'>SQLITE_IOERR_DELETE</a></li>
+<li><a href='../rescode.html#ioerr_delete_noent'>SQLITE_IOERR_DELETE_NOENT</a></li>
+<li><a href='../rescode.html#ioerr_dir_close'>SQLITE_IOERR_DIR_CLOSE</a></li>
+<li><a href='../rescode.html#ioerr_dir_fsync'>SQLITE_IOERR_DIR_FSYNC</a></li>
+<li><a href='../rescode.html#ioerr_fstat'>SQLITE_IOERR_FSTAT</a></li>
+<li><a href='../rescode.html#ioerr_fsync'>SQLITE_IOERR_FSYNC</a></li>
+<li><a href='../rescode.html#ioerr_gettemppath'>SQLITE_IOERR_GETTEMPPATH</a></li>
+<li><a href='../rescode.html#ioerr_lock'>SQLITE_IOERR_LOCK</a></li>
+<li><a href='../rescode.html#ioerr_mmap'>SQLITE_IOERR_MMAP</a></li>
+<li><a href='../rescode.html#ioerr_nomem'>SQLITE_IOERR_NOMEM</a></li>
+<li><a href='../rescode.html#ioerr_rdlock'>SQLITE_IOERR_RDLOCK</a></li>
+<li><a href='../rescode.html#ioerr_read'>SQLITE_IOERR_READ</a></li>
+<li><a href='../rescode.html#ioerr_rollback_atomic'>SQLITE_IOERR_ROLLBACK_ATOMIC</a></li>
+<li><a href='../rescode.html#ioerr_seek'>SQLITE_IOERR_SEEK</a></li>
+<li><a href='../rescode.html#ioerr_shmlock'>SQLITE_IOERR_SHMLOCK</a></li>
+<li><a href='../rescode.html#ioerr_shmmap'>SQLITE_IOERR_SHMMAP</a></li>
+<li><a href='../rescode.html#ioerr_shmopen'>SQLITE_IOERR_SHMOPEN</a></li>
+<li><a href='../rescode.html#ioerr_shmsize'>SQLITE_IOERR_SHMSIZE</a></li>
+<li><a href='../rescode.html#ioerr_short_read'>SQLITE_IOERR_SHORT_READ</a></li>
+<li><a href='../rescode.html#ioerr_truncate'>SQLITE_IOERR_TRUNCATE</a></li>
+<li><a href='../rescode.html#ioerr_unlock'>SQLITE_IOERR_UNLOCK</a></li>
+<li><a href='../rescode.html#ioerr_vnode'>SQLITE_IOERR_VNODE</a></li>
+<li><a href='../rescode.html#ioerr_write'>SQLITE_IOERR_WRITE</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitattached'>SQLITE_LIMIT_ATTACHED</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitcolumn'>SQLITE_LIMIT_COLUMN</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitcompoundselect'>SQLITE_LIMIT_COMPOUND_SELECT</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitexprdepth'>SQLITE_LIMIT_EXPR_DEPTH</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitfunctionarg'>SQLITE_LIMIT_FUNCTION_ARG</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitlength'>SQLITE_LIMIT_LENGTH</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitlikepatternlength'>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitsqllength'>SQLITE_LIMIT_SQL_LENGTH</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimittriggerdepth'>SQLITE_LIMIT_TRIGGER_DEPTH</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitvariablenumber'>SQLITE_LIMIT_VARIABLE_NUMBER</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitvdbeop'>SQLITE_LIMIT_VDBE_OP</a></li>
+<li><a href='../c3ref/c_limit_attached.html#sqlitelimitworkerthreads'>SQLITE_LIMIT_WORKER_THREADS</a></li>
+<li><a href='../rescode.html#locked'>SQLITE_LOCKED</a></li>
+<li><a href='../rescode.html#locked_sharedcache'>SQLITE_LOCKED_SHAREDCACHE</a></li>
+<li><a href='../rescode.html#locked_vtab'>SQLITE_LOCKED_VTAB</a></li>
+<li><a href='../c3ref/c_lock_exclusive.html'>SQLITE_LOCK_EXCLUSIVE</a></li>
+<li><a href='../c3ref/c_lock_exclusive.html'>SQLITE_LOCK_NONE</a></li>
+<li><a href='../c3ref/c_lock_exclusive.html'>SQLITE_LOCK_PENDING</a></li>
+<li><a href='../c3ref/c_lock_exclusive.html'>SQLITE_LOCK_RESERVED</a></li>
+<li><a href='../c3ref/c_lock_exclusive.html'>SQLITE_LOCK_SHARED</a></li>
+<li><a href='../rescode.html#mismatch'>SQLITE_MISMATCH</a></li>
+<li><a href='../rescode.html#misuse'>SQLITE_MISUSE</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_FAST</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_RECURSIVE</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_APP1</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_APP2</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_APP3</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_LRU</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_LRU2</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_MAIN</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_MEM</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_MEM2</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_OPEN</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_PMEM</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_PRNG</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_VFS1</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_VFS2</a></li>
+<li><a href='../c3ref/c_mutex_fast.html'>SQLITE_MUTEX_STATIC_VFS3</a></li>
+<li><a href='../rescode.html#nolfs'>SQLITE_NOLFS</a></li>
+<li><a href='../rescode.html#nomem'>SQLITE_NOMEM</a></li>
+<li><a href='../rescode.html#notadb'>SQLITE_NOTADB</a></li>
+<li><a href='../rescode.html#notfound'>SQLITE_NOTFOUND</a></li>
+<li><a href='../rescode.html#notice'>SQLITE_NOTICE</a></li>
+<li><a href='../rescode.html#notice_recover_rollback'>SQLITE_NOTICE_RECOVER_ROLLBACK</a></li>
+<li><a href='../rescode.html#notice_recover_wal'>SQLITE_NOTICE_RECOVER_WAL</a></li>
+<li><a href='../c3ref/c_blob.html'>SQLITE_NULL</a></li>
+<li><a href='../rescode.html#ok'>SQLITE_OK</a></li>
+<li><a href='../rescode.html#ok_load_permanently'>SQLITE_OK_LOAD_PERMANENTLY</a></li>
+<li><a href='../c3ref/c_abort_rollback.html'>SQLITE_OK_SYMLINK</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_AUTOPROXY</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_CREATE</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_DELETEONCLOSE</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_EXCLUSIVE</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_EXRESCODE</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_FULLMUTEX</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_MAIN_DB</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_MAIN_JOURNAL</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_MEMORY</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_NOFOLLOW</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_NOMUTEX</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_PRIVATECACHE</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_READONLY</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_READWRITE</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_SHAREDCACHE</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_SUBJOURNAL</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_SUPER_JOURNAL</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_TEMP_DB</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_TEMP_JOURNAL</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_TRANSIENT_DB</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_URI</a></li>
+<li><a href='../c3ref/c_open_autoproxy.html'>SQLITE_OPEN_WAL</a></li>
+<li><a href='../rescode.html#perm'>SQLITE_PERM</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_PRAGMA</a></li>
+<li><a href='../c3ref/c_prepare_normalize.html#sqlitepreparenormalize'>SQLITE_PREPARE_NORMALIZE</a></li>
+<li><a href='../c3ref/c_prepare_normalize.html#sqlitepreparenovtab'>SQLITE_PREPARE_NO_VTAB</a></li>
+<li><a href='../c3ref/c_prepare_normalize.html#sqlitepreparepersistent'>SQLITE_PREPARE_PERSISTENT</a></li>
+<li><a href='../rescode.html#protocol'>SQLITE_PROTOCOL</a></li>
+<li><a href='../rescode.html#range'>SQLITE_RANGE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_READ</a></li>
+<li><a href='../rescode.html#readonly'>SQLITE_READONLY</a></li>
+<li><a href='../rescode.html#readonly_cantinit'>SQLITE_READONLY_CANTINIT</a></li>
+<li><a href='../rescode.html#readonly_cantlock'>SQLITE_READONLY_CANTLOCK</a></li>
+<li><a href='../rescode.html#readonly_dbmoved'>SQLITE_READONLY_DBMOVED</a></li>
+<li><a href='../rescode.html#readonly_directory'>SQLITE_READONLY_DIRECTORY</a></li>
+<li><a href='../rescode.html#readonly_recovery'>SQLITE_READONLY_RECOVERY</a></li>
+<li><a href='../rescode.html#readonly_rollback'>SQLITE_READONLY_ROLLBACK</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_RECURSIVE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_REINDEX</a></li>
+<li><a href='../c3ref/c_fail.html'>SQLITE_REPLACE</a></li>
+<li><a href='../c3ref/c_fail.html'>SQLITE_ROLLBACK</a></li>
+<li><a href='../rescode.html#row'>SQLITE_ROW</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_SAVEPOINT</a></li>
+<li><a href='../c3ref/c_scanstat_est.html#sqlitescanstatest'>SQLITE_SCANSTAT_EST</a></li>
+<li><a href='../c3ref/c_scanstat_est.html#sqlitescanstatexplain'>SQLITE_SCANSTAT_EXPLAIN</a></li>
+<li><a href='../c3ref/c_scanstat_est.html#sqlitescanstatname'>SQLITE_SCANSTAT_NAME</a></li>
+<li><a href='../c3ref/c_scanstat_est.html#sqlitescanstatnloop'>SQLITE_SCANSTAT_NLOOP</a></li>
+<li><a href='../c3ref/c_scanstat_est.html#sqlitescanstatnvisit'>SQLITE_SCANSTAT_NVISIT</a></li>
+<li><a href='../c3ref/c_scanstat_est.html#sqlitescanstatselectid'>SQLITE_SCANSTAT_SELECTID</a></li>
+<li><a href='../rescode.html#schema'>SQLITE_SCHEMA</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_SELECT</a></li>
+<li><a href='../c3ref/c_serialize_nocopy.html'>SQLITE_SERIALIZE_NOCOPY</a></li>
+<li><a href='../c3ref/c_shm_exclusive.html'>SQLITE_SHM_EXCLUSIVE</a></li>
+<li><a href='../c3ref/c_shm_exclusive.html'>SQLITE_SHM_LOCK</a></li>
+<li><a href='../c3ref/c_shm_nlock.html'>SQLITE_SHM_NLOCK</a></li>
+<li><a href='../c3ref/c_shm_exclusive.html'>SQLITE_SHM_SHARED</a></li>
+<li><a href='../c3ref/c_shm_exclusive.html'>SQLITE_SHM_UNLOCK</a></li>
+<li><a href='../c3ref/c_source_id.html'>SQLITE_SOURCE_ID</a></li>
+<li><a href='../c3ref/c_static.html'>SQLITE_STATIC</a></li>
+<li><a href='../c3ref/c_status_malloc_count.html#sqlitestatusmalloccount'>SQLITE_STATUS_MALLOC_COUNT</a></li>
+<li><a href='../c3ref/c_status_malloc_count.html#sqlitestatusmallocsize'>SQLITE_STATUS_MALLOC_SIZE</a></li>
+<li><a href='../c3ref/c_status_malloc_count.html#sqlitestatusmemoryused'>SQLITE_STATUS_MEMORY_USED</a></li>
+<li><a href='../c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow'>SQLITE_STATUS_PAGECACHE_OVERFLOW</a></li>
+<li><a href='../c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize'>SQLITE_STATUS_PAGECACHE_SIZE</a></li>
+<li><a href='../c3ref/c_status_malloc_count.html#sqlitestatuspagecacheused'>SQLITE_STATUS_PAGECACHE_USED</a></li>
+<li><a href='../c3ref/c_status_malloc_count.html#sqlitestatusparserstack'>SQLITE_STATUS_PARSER_STACK</a></li>
+<li><a href='../c3ref/c_status_malloc_count.html#sqlitestatusscratchoverflow'>SQLITE_STATUS_SCRATCH_OVERFLOW</a></li>
+<li><a href='../c3ref/c_status_malloc_count.html#sqlitestatusscratchsize'>SQLITE_STATUS_SCRATCH_SIZE</a></li>
+<li><a href='../c3ref/c_status_malloc_count.html#sqlitestatusscratchused'>SQLITE_STATUS_SCRATCH_USED</a></li>
+<li><a href='../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusautoindex'>SQLITE_STMTSTATUS_AUTOINDEX</a></li>
+<li><a href='../c3ref/c_stmtstatus_counter.html'>SQLITE_STMTSTATUS_FILTER_HIT</a></li>
+<li><a href='../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfiltermiss'>SQLITE_STMTSTATUS_FILTER_MISS</a></li>
+<li><a href='../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfullscanstep'>SQLITE_STMTSTATUS_FULLSCAN_STEP</a></li>
+<li><a href='../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused'>SQLITE_STMTSTATUS_MEMUSED</a></li>
+<li><a href='../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare'>SQLITE_STMTSTATUS_REPREPARE</a></li>
+<li><a href='../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun'>SQLITE_STMTSTATUS_RUN</a></li>
+<li><a href='../c3ref/c_stmtstatus_counter.html#sqlitestmtstatussort'>SQLITE_STMTSTATUS_SORT</a></li>
+<li><a href='../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep'>SQLITE_STMTSTATUS_VM_STEP</a></li>
+<li><a href='../c3ref/c_deterministic.html#sqlitesubtype'>SQLITE_SUBTYPE</a></li>
+<li><a href='../c3ref/c_sync_dataonly.html'>SQLITE_SYNC_DATAONLY</a></li>
+<li><a href='../c3ref/c_sync_dataonly.html'>SQLITE_SYNC_FULL</a></li>
+<li><a href='../c3ref/c_sync_dataonly.html'>SQLITE_SYNC_NORMAL</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_ALWAYS</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_ASSERT</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_BITVEC_TEST</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_BYTEORDER</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_EXPLAIN_STMT</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_FAULT_INSTALL</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_FIRST</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_IMPOSTER</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_INTERNAL_FUNCTIONS</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_ISINIT</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_ISKEYWORD</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_LAST</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_LOCALTIME_FAULT</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_LOGEST</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_NEVER_CORRUPT</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_OPTIMIZATIONS</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_PARSER_COVERAGE</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_PENDING_BYTE</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_PRNG_RESET</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_PRNG_RESTORE</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_PRNG_SAVE</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_PRNG_SEED</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_RESERVE</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_RESULT_INTREAL</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_SCRATCHMALLOC</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_SEEK_COUNT</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_SORTER_MMAP</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_TRACEFLAGS</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_TUNE</a></li>
+<li><a href='../c3ref/c_testctrl_always.html'>SQLITE_TESTCTRL_VDBE_COVERAGE</a></li>
+<li><a href='../c3ref/c_blob.html'>SQLITE_TEXT</a></li>
+<li><a href='../rescode.html#toobig'>SQLITE_TOOBIG</a></li>
+<li><a href='../c3ref/c_trace.html'>SQLITE_TRACE</a></li>
+<li><a href='../c3ref/c_trace.html#sqlitetraceclose'>SQLITE_TRACE_CLOSE</a></li>
+<li><a href='../c3ref/c_trace.html#sqlitetraceprofile'>SQLITE_TRACE_PROFILE</a></li>
+<li><a href='../c3ref/c_trace.html#sqlitetracerow'>SQLITE_TRACE_ROW</a></li>
+<li><a href='../c3ref/c_trace.html#sqlitetracestmt'>SQLITE_TRACE_STMT</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_TRANSACTION</a></li>
+<li><a href='../c3ref/c_static.html'>SQLITE_TRANSIENT</a></li>
+<li><a href='../c3ref/c_txn_none.html#sqlitetxnnone'>SQLITE_TXN_NONE</a></li>
+<li><a href='../c3ref/c_txn_none.html#sqlitetxnread'>SQLITE_TXN_READ</a></li>
+<li><a href='../c3ref/c_txn_none.html#sqlitetxnwrite'>SQLITE_TXN_WRITE</a></li>
+<li><a href='../c3ref/c_alter_table.html'>SQLITE_UPDATE</a></li>
+<li><a href='../c3ref/c_any.html'>SQLITE_UTF16</a></li>
+<li><a href='../c3ref/c_any.html'>SQLITE_UTF16BE</a></li>
+<li><a href='../c3ref/c_any.html'>SQLITE_UTF16LE</a></li>
+<li><a href='../c3ref/c_any.html'>SQLITE_UTF16_ALIGNED</a></li>
+<li><a href='../c3ref/c_any.html'>SQLITE_UTF8</a></li>
+<li><a href='../c3ref/c_source_id.html'>SQLITE_VERSION</a></li>
+<li><a href='../c3ref/c_source_id.html'>SQLITE_VERSION_NUMBER</a></li>
+<li><a href='../c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport'>SQLITE_VTAB_CONSTRAINT_SUPPORT</a></li>
+<li><a href='../c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly'>SQLITE_VTAB_DIRECTONLY</a></li>
+<li><a href='../c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous'>SQLITE_VTAB_INNOCUOUS</a></li>
+<li><a href='../rescode.html#warning'>SQLITE_WARNING</a></li>
+<li><a href='../rescode.html#warning_autoindex'>SQLITE_WARNING_AUTOINDEX</a></li>
+<li><a href='../c3ref/c_win32_data_directory_type.html'>SQLITE_WIN32_DATA_DIRECTORY_TYPE</a></li>
+<li><a href='../c3ref/c_win32_data_directory_type.html'>SQLITE_WIN32_TEMP_DIRECTORY_TYPE</a></li>
+</ul>
+</div>
+<p>Other lists:
+<a href="objlist.html">Objects</a> and
+<a href="funclist.html">Functions</a> and
+<a href="../rescode.html">Result Codes</a>.</p>
+
+
diff --git a/www/c3ref/context.html b/www/c3ref/context.html
new file mode 100644
index 0000000..0699a73
--- /dev/null
+++ b/www/c3ref/context.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQL Function Context Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_context -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>SQL Function Context Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_context sqlite3_context;
+</pre></blockquote>
+<p>
+The context in which an SQL function executes is stored in an
+sqlite3_context object. A pointer to an sqlite3_context object
+is always first parameter to <a href="../appfunc.html">application-defined SQL functions</a>.
+The application-defined SQL function implementation will pass this
+pointer through into calls to <a href="../c3ref/result_blob.html">sqlite3_result()</a>,
+<a href="../c3ref/aggregate_context.html">sqlite3_aggregate_context()</a>, <a href="../c3ref/user_data.html">sqlite3_user_data()</a>,
+<a href="../c3ref/context_db_handle.html">sqlite3_context_db_handle()</a>, <a href="../c3ref/get_auxdata.html">sqlite3_get_auxdata()</a>,
+and/or <a href="../c3ref/get_auxdata.html">sqlite3_set_auxdata()</a>.
+</p><p>26 Methods:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../c3ref/aggregate_context.html'>sqlite3_aggregate_context</a></li>
+<li><a href='../c3ref/context_db_handle.html'>sqlite3_context_db_handle</a></li>
+<li><a href='../c3ref/get_auxdata.html'>sqlite3_get_auxdata</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_blob</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_blob64</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_double</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_error</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_error16</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_error_code</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_error_nomem</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_error_toobig</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_int</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_int64</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_null</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_pointer</a></li>
+<li><a href='../c3ref/result_subtype.html'>sqlite3_result_subtype</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_text</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_text16</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_text16be</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_text16le</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_text64</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_value</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_zeroblob</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_zeroblob64</a></li>
+<li><a href='../c3ref/get_auxdata.html'>sqlite3_set_auxdata</a></li>
+<li><a href='../c3ref/user_data.html'>sqlite3_user_data</a></li>
+</ul>
+</div>
+</p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/context_db_handle.html b/www/c3ref/context_db_handle.html
new file mode 100644
index 0000000..2b37364
--- /dev/null
+++ b/www/c3ref/context_db_handle.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Database Connection For Functions</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_context_db_handle -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Database Connection For Functions</h2>
+</div>
+<blockquote><pre>
+sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
+</pre></blockquote>
+<p>
+The sqlite3_context_db_handle() interface returns a copy of
+the pointer to the <a href="../c3ref/sqlite3.html">database connection</a> (the 1st parameter)
+of the <a href="../c3ref/create_function.html">sqlite3_create_function()</a>
+and <a href="../c3ref/create_function.html">sqlite3_create_function16()</a> routines that originally
+registered the application defined function.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/create_collation.html b/www/c3ref/create_collation.html
new file mode 100644
index 0000000..71e4b87
--- /dev/null
+++ b/www/c3ref/create_collation.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Define New Collating Sequences</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_create_collation sqlite3_create_collation16 sqlite3_create_collation_v2 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Define New Collating Sequences</h2>
+</div>
+<blockquote><pre>
+int sqlite3_create_collation(
+ sqlite3*,
+ const char *zName,
+ int eTextRep,
+ void *pArg,
+ int(*xCompare)(void*,int,const void*,int,const void*)
+);
+int sqlite3_create_collation_v2(
+ sqlite3*,
+ const char *zName,
+ int eTextRep,
+ void *pArg,
+ int(*xCompare)(void*,int,const void*,int,const void*),
+ void(*xDestroy)(void*)
+);
+int sqlite3_create_collation16(
+ sqlite3*,
+ const void *zName,
+ int eTextRep,
+ void *pArg,
+ int(*xCompare)(void*,int,const void*,int,const void*)
+);
+</pre></blockquote>
+<p>
+These functions add, remove, or modify a <a href="../datatype3.html#collation">collation</a> associated
+with the <a href="../c3ref/sqlite3.html">database connection</a> specified as the first argument.</p>
+
+<p>The name of the collation is a UTF-8 string
+for sqlite3_create_collation() and sqlite3_create_collation_v2()
+and a UTF-16 string in native byte order for sqlite3_create_collation16().
+Collation names that compare equal according to <a href="../c3ref/stricmp.html">sqlite3_strnicmp()</a> are
+considered to be the same name.</p>
+
+<p>The third argument (eTextRep) must be one of the constants:
+<ul>
+<li> <a href="../c3ref/c_any.html">SQLITE_UTF8</a>,
+<li> <a href="../c3ref/c_any.html">SQLITE_UTF16LE</a>,
+<li> <a href="../c3ref/c_any.html">SQLITE_UTF16BE</a>,
+<li> <a href="../c3ref/c_any.html">SQLITE_UTF16</a>, or
+<li> <a href="../c3ref/c_any.html">SQLITE_UTF16_ALIGNED</a>.
+</ul>
+The eTextRep argument determines the encoding of strings passed
+to the collating function callback, xCompare.
+The <a href="../c3ref/c_any.html">SQLITE_UTF16</a> and <a href="../c3ref/c_any.html">SQLITE_UTF16_ALIGNED</a> values for eTextRep
+force strings to be UTF16 with native byte order.
+The <a href="../c3ref/c_any.html">SQLITE_UTF16_ALIGNED</a> value for eTextRep forces strings to begin
+on an even byte address.</p>
+
+<p>The fourth argument, pArg, is an application data pointer that is passed
+through as the first argument to the collating function callback.</p>
+
+<p>The fifth argument, xCompare, is a pointer to the collating function.
+Multiple collating functions can be registered using the same name but
+with different eTextRep parameters and SQLite will use whichever
+function requires the least amount of data transformation.
+If the xCompare argument is NULL then the collating function is
+deleted. When all collating functions having the same name are deleted,
+that collation is no longer usable.</p>
+
+<p>The collating function callback is invoked with a copy of the pArg
+application data pointer and with two strings in the encoding specified
+by the eTextRep argument. The two integer parameters to the collating
+function callback are the length of the two strings, in bytes. The collating
+function must return an integer that is negative, zero, or positive
+if the first string is less than, equal to, or greater than the second,
+respectively. A collating function must always return the same answer
+given the same inputs. If two or more collating functions are registered
+to the same collation name (using different eTextRep values) then all
+must give an equivalent answer when invoked with equivalent strings.
+The collating function must obey the following properties for all
+strings A, B, and C:</p>
+
+<p><ol>
+<li> If A==B then B==A.
+<li> If A==B and B==C then A==C.
+<li> If A&lt;B THEN B&gt;A.
+<li> If A&lt;B and B&lt;C then A&lt;C.
+</ol></p>
+
+<p>If a collating function fails any of the above constraints and that
+collating function is registered and used, then the behavior of SQLite
+is undefined.</p>
+
+<p>The sqlite3_create_collation_v2() works like sqlite3_create_collation()
+with the addition that the xDestroy callback is invoked on pArg when
+the collating function is deleted.
+Collating functions are deleted when they are overridden by later
+calls to the collation creation functions or when the
+<a href="../c3ref/sqlite3.html">database connection</a> is closed using <a href="../c3ref/close.html">sqlite3_close()</a>.</p>
+
+<p>The xDestroy callback is <u>not</u> called if the
+sqlite3_create_collation_v2() function fails. Applications that invoke
+sqlite3_create_collation_v2() with a non-NULL xDestroy argument should
+check the return code and dispose of the application data pointer
+themselves rather than expecting SQLite to deal with it for them.
+This is different from every other SQLite interface. The inconsistency
+is unfortunate but cannot be changed without breaking backwards
+compatibility.</p>
+
+<p>See also: <a href="../c3ref/collation_needed.html">sqlite3_collation_needed()</a> and <a href="../c3ref/collation_needed.html">sqlite3_collation_needed16()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/create_filename.html b/www/c3ref/create_filename.html
new file mode 100644
index 0000000..56d503b
--- /dev/null
+++ b/www/c3ref/create_filename.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Create and Destroy VFS Filenames</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_create_filename sqlite3_free_filename -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Create and Destroy VFS Filenames</h2>
+</div>
+<blockquote><pre>
+sqlite3_filename sqlite3_create_filename(
+ const char *zDatabase,
+ const char *zJournal,
+ const char *zWal,
+ int nParam,
+ const char **azParam
+);
+void sqlite3_free_filename(sqlite3_filename);
+</pre></blockquote>
+<p>
+These interfces are provided for use by <a href="../vfs.html#shim">VFS shim</a> implementations and
+are not useful outside of that context.</p>
+
+<p>The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of
+database filename D with corresponding journal file J and WAL file W and
+with N URI parameters key/values pairs in the array P. The result from
+sqlite3_create_filename(D,J,W,N,P) is a pointer to a database filename that
+is safe to pass to routines like:
+<ul>
+<li> <a href="../c3ref/uri_boolean.html">sqlite3_uri_parameter()</a>,
+<li> <a href="../c3ref/uri_boolean.html">sqlite3_uri_boolean()</a>,
+<li> <a href="../c3ref/uri_boolean.html">sqlite3_uri_int64()</a>,
+<li> <a href="../c3ref/uri_boolean.html">sqlite3_uri_key()</a>,
+<li> <a href="../c3ref/filename_database.html">sqlite3_filename_database()</a>,
+<li> <a href="../c3ref/filename_database.html">sqlite3_filename_journal()</a>, or
+<li> <a href="../c3ref/filename_database.html">sqlite3_filename_wal()</a>.
+</ul>
+If a memory allocation error occurs, sqlite3_create_filename() might
+return a NULL pointer. The memory obtained from sqlite3_create_filename(X)
+must be released by a corresponding call to sqlite3_free_filename(Y).</p>
+
+<p>The P parameter in sqlite3_create_filename(D,J,W,N,P) should be an array
+of 2*N pointers to strings. Each pair of pointers in this array corresponds
+to a key and value for a query parameter. The P parameter may be a NULL
+pointer if N is zero. None of the 2*N pointers in the P array may be
+NULL pointers and key pointers should not be empty strings.
+None of the D, J, or W parameters to sqlite3_create_filename(D,J,W,N,P) may
+be NULL pointers, though they can be empty strings.</p>
+
+<p>The sqlite3_free_filename(Y) routine releases a memory allocation
+previously obtained from sqlite3_create_filename(). Invoking
+sqlite3_free_filename(Y) where Y is a NULL pointer is a harmless no-op.</p>
+
+<p>If the Y parameter to sqlite3_free_filename(Y) is anything other
+than a NULL pointer or a pointer previously acquired from
+sqlite3_create_filename(), then bad things such as heap
+corruption or segfaults may occur. The value Y should not be
+used again after sqlite3_free_filename(Y) has been called. This means
+that if the <a href="../c3ref/vfs.html#sqlite3vfsxopen">sqlite3_vfs.xOpen()</a> method of a VFS has been called using Y,
+then the corresponding [sqlite3_module.xClose() method should also be
+invoked prior to calling sqlite3_free_filename(Y).
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/create_function.html b/www/c3ref/create_function.html
new file mode 100644
index 0000000..4ea3510
--- /dev/null
+++ b/www/c3ref/create_function.html
@@ -0,0 +1,290 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Create Or Redefine SQL Functions</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {function creation routines} sqlite3_create_function sqlite3_create_function16 sqlite3_create_function_v2 sqlite3_create_window_function -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Create Or Redefine SQL Functions</h2>
+</div>
+<blockquote><pre>
+int sqlite3_create_function(
+ sqlite3 *db,
+ const char *zFunctionName,
+ int nArg,
+ int eTextRep,
+ void *pApp,
+ void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
+ void (*xFinal)(sqlite3_context*)
+);
+int sqlite3_create_function16(
+ sqlite3 *db,
+ const void *zFunctionName,
+ int nArg,
+ int eTextRep,
+ void *pApp,
+ void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
+ void (*xFinal)(sqlite3_context*)
+);
+int sqlite3_create_function_v2(
+ sqlite3 *db,
+ const char *zFunctionName,
+ int nArg,
+ int eTextRep,
+ void *pApp,
+ void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
+ void (*xFinal)(sqlite3_context*),
+ void(*xDestroy)(void*)
+);
+int sqlite3_create_window_function(
+ sqlite3 *db,
+ const char *zFunctionName,
+ int nArg,
+ int eTextRep,
+ void *pApp,
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
+ void (*xFinal)(sqlite3_context*),
+ void (*xValue)(sqlite3_context*),
+ void (*xInverse)(sqlite3_context*,int,sqlite3_value**),
+ void(*xDestroy)(void*)
+);
+</pre></blockquote>
+<p>
+These functions (collectively known as "function creation routines")
+are used to add SQL functions or aggregates or to redefine the behavior
+of existing SQL functions or aggregates. The only differences between
+the three "sqlite3_create_function*" routines are the text encoding
+expected for the second parameter (the name of the function being
+created) and the presence or absence of a destructor callback for
+the application data pointer. Function sqlite3_create_window_function()
+is similar, but allows the user to supply the extra callback functions
+needed by <a href="../windowfunctions.html#aggwinfunc">aggregate window functions</a>.</p>
+
+<p>The first parameter is the <a href="../c3ref/sqlite3.html">database connection</a> to which the SQL
+function is to be added. If an application uses more than one database
+connection then application-defined SQL functions must be added
+to each database connection separately.</p>
+
+<p>The second parameter is the name of the SQL function to be created or
+redefined. The length of the name is limited to 255 bytes in a UTF-8
+representation, exclusive of the zero-terminator. Note that the name
+length limit is in UTF-8 bytes, not characters nor UTF-16 bytes.
+Any attempt to create a function with a longer name
+will result in <a href="../rescode.html#misuse">SQLITE_MISUSE</a> being returned.</p>
+
+<p>The third parameter (nArg)
+is the number of arguments that the SQL function or
+aggregate takes. If this parameter is -1, then the SQL function or
+aggregate may take any number of arguments between 0 and the limit
+set by <a href="../c3ref/limit.html">sqlite3_limit</a>(<a href="../c3ref/c_limit_attached.html#sqlitelimitfunctionarg">SQLITE_LIMIT_FUNCTION_ARG</a>). If the third
+parameter is less than -1 or greater than 127 then the behavior is
+undefined.</p>
+
+<p>The fourth parameter, eTextRep, specifies what
+<a href="../c3ref/c_any.html">text encoding</a> this SQL function prefers for
+its parameters. The application should set this parameter to
+<a href="../c3ref/c_any.html">SQLITE_UTF16LE</a> if the function implementation invokes
+<a href="../c3ref/value_blob.html">sqlite3_value_text16le()</a> on an input, or <a href="../c3ref/c_any.html">SQLITE_UTF16BE</a> if the
+implementation invokes <a href="../c3ref/value_blob.html">sqlite3_value_text16be()</a> on an input, or
+<a href="../c3ref/c_any.html">SQLITE_UTF16</a> if <a href="../c3ref/value_blob.html">sqlite3_value_text16()</a> is used, or <a href="../c3ref/c_any.html">SQLITE_UTF8</a>
+otherwise. The same SQL function may be registered multiple times using
+different preferred text encodings, with different implementations for
+each encoding.
+When multiple implementations of the same function are available, SQLite
+will pick the one that involves the least amount of data conversion.</p>
+
+<p>The fourth parameter may optionally be ORed with <a href="../c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a>
+to signal that the function will always return the same result given
+the same inputs within a single SQL statement. Most SQL functions are
+deterministic. The built-in <a href="../lang_corefunc.html#random">random()</a> SQL function is an example of a
+function that is not deterministic. The SQLite query planner is able to
+perform additional optimizations on deterministic functions, so use
+of the <a href="../c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a> flag is recommended where possible.</p>
+
+<p>The fourth parameter may also optionally include the <a href="../c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>
+flag, which if present prevents the function from being invoked from
+within VIEWs, TRIGGERs, CHECK constraints, generated column expressions,
+index expressions, or the WHERE clause of partial indexes.</p>
+
+<p>For best security, the <a href="../c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a> flag is recommended for
+all application-defined SQL functions that do not need to be
+used inside of triggers, view, CHECK constraints, or other elements of
+the database schema. This flags is especially recommended for SQL
+functions that have side effects or reveal internal application state.
+Without this flag, an attacker might be able to modify the schema of
+a database file to include invocations of the function with parameters
+chosen by the attacker, which the application will then execute when
+the database file is opened and read.</p>
+
+<p>The fifth parameter is an arbitrary pointer. The implementation of the
+function can gain access to this pointer using <a href="../c3ref/user_data.html">sqlite3_user_data()</a>.</p>
+
+<p>The sixth, seventh and eighth parameters passed to the three
+"sqlite3_create_function*" functions, xFunc, xStep and xFinal, are
+pointers to C-language functions that implement the SQL function or
+aggregate. A scalar SQL function requires an implementation of the xFunc
+callback only; NULL pointers must be passed as the xStep and xFinal
+parameters. An aggregate SQL function requires an implementation of xStep
+and xFinal and NULL pointer must be passed for xFunc. To delete an existing
+SQL function or aggregate, pass NULL pointers for all three function
+callbacks.</p>
+
+<p>The sixth, seventh, eighth and ninth parameters (xStep, xFinal, xValue
+and xInverse) passed to sqlite3_create_window_function are pointers to
+C-language callbacks that implement the new function. xStep and xFinal
+must both be non-NULL. xValue and xInverse may either both be NULL, in
+which case a regular aggregate function is created, or must both be
+non-NULL, in which case the new function may be used as either an aggregate
+or aggregate window function. More details regarding the implementation
+of aggregate window functions are
+<a href="../windowfunctions.html#udfwinfunc">available here</a>.</p>
+
+<p>If the final parameter to sqlite3_create_function_v2() or
+sqlite3_create_window_function() is not NULL, then it is destructor for
+the application data pointer. The destructor is invoked when the function
+is deleted, either by being overloaded or when the database connection
+closes. The destructor is also invoked if the call to
+sqlite3_create_function_v2() fails. When the destructor callback is
+invoked, it is passed a single argument which is a copy of the application
+data pointer which was the fifth parameter to sqlite3_create_function_v2().</p>
+
+<p>It is permitted to register multiple implementations of the same
+functions with the same name but with either differing numbers of
+arguments or differing preferred text encodings. SQLite will use
+the implementation that most closely matches the way in which the
+SQL function is used. A function implementation with a non-negative
+nArg parameter is a better match than a function implementation with
+a negative nArg. A function where the preferred text encoding
+matches the database encoding is a better
+match than a function where the encoding is different.
+A function where the encoding difference is between UTF16le and UTF16be
+is a closer match than a function where the encoding difference is
+between UTF8 and UTF16.</p>
+
+<p>Built-in functions may be overloaded by new application-defined functions.</p>
+
+<p>An application-defined function is permitted to call other
+SQLite interfaces. However, such calls must not
+close the database connection nor finalize or reset the prepared
+statement in which the function is running.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/create_module.html b/www/c3ref/create_module.html
new file mode 100644
index 0000000..eee3311
--- /dev/null
+++ b/www/c3ref/create_module.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Register A Virtual Table Implementation</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_create_module sqlite3_create_module_v2 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Register A Virtual Table Implementation</h2>
+</div>
+<blockquote><pre>
+int sqlite3_create_module(
+ sqlite3 *db, /* SQLite connection to register module with */
+ const char *zName, /* Name of the module */
+ const sqlite3_module *p, /* Methods for the module */
+ void *pClientData /* Client data for xCreate/xConnect */
+);
+int sqlite3_create_module_v2(
+ sqlite3 *db, /* SQLite connection to register module with */
+ const char *zName, /* Name of the module */
+ const sqlite3_module *p, /* Methods for the module */
+ void *pClientData, /* Client data for xCreate/xConnect */
+ void(*xDestroy)(void*) /* Module destructor function */
+);
+</pre></blockquote>
+<p>
+These routines are used to register a new <a href="../c3ref/module.html">virtual table module</a> name.
+Module names must be registered before
+creating a new <a href="../vtab.html">virtual table</a> using the module and before using a
+preexisting <a href="../vtab.html">virtual table</a> for the module.</p>
+
+<p>The module name is registered on the <a href="../c3ref/sqlite3.html">database connection</a> specified
+by the first parameter. The name of the module is given by the
+second parameter. The third parameter is a pointer to
+the implementation of the <a href="../c3ref/module.html">virtual table module</a>. The fourth
+parameter is an arbitrary client data pointer that is passed through
+into the <a href="../vtab.html#xcreate">xCreate</a> and <a href="../vtab.html#xconnect">xConnect</a> methods of the virtual table module
+when a new virtual table is be being created or reinitialized.</p>
+
+<p>The sqlite3_create_module_v2() interface has a fifth parameter which
+is a pointer to a destructor for the pClientData. SQLite will
+invoke the destructor function (if it is not NULL) when SQLite
+no longer needs the pClientData pointer. The destructor will also
+be invoked if the call to sqlite3_create_module_v2() fails.
+The sqlite3_create_module()
+interface is equivalent to sqlite3_create_module_v2() with a NULL
+destructor.</p>
+
+<p>If the third parameter (the pointer to the sqlite3_module object) is
+NULL then no new module is created and any existing modules with the
+same name are dropped.</p>
+
+<p>See also: <a href="../c3ref/drop_modules.html">sqlite3_drop_modules()</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/data_count.html b/www/c3ref/data_count.html
new file mode 100644
index 0000000..489901d
--- /dev/null
+++ b/www/c3ref/data_count.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Number of columns in a result set</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_data_count -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Number of columns in a result set</h2>
+</div>
+<blockquote><pre>
+int sqlite3_data_count(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+The sqlite3_data_count(P) interface returns the number of columns in the
+current row of the result set of <a href="../c3ref/stmt.html">prepared statement</a> P.
+If prepared statement P does not have results ready to return
+(via calls to the <a href="../c3ref/column_blob.html">sqlite3_column()</a> family of
+interfaces) then sqlite3_data_count(P) returns 0.
+The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer.
+The sqlite3_data_count(P) routine returns 0 if the previous call to
+<a href="../c3ref/step.html">sqlite3_step</a>(P) returned <a href="../rescode.html#done">SQLITE_DONE</a>. The sqlite3_data_count(P)
+will return non-zero if previous call to <a href="../c3ref/step.html">sqlite3_step</a>(P) returned
+<a href="../rescode.html#row">SQLITE_ROW</a>, except in the case of the <a href="../pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>
+where it always returns zero since each step of that multi-step
+pragma returns 0 columns of data.</p>
+
+<p>See also: <a href="../c3ref/column_count.html">sqlite3_column_count()</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/data_directory.html b/www/c3ref/data_directory.html
new file mode 100644
index 0000000..a092436
--- /dev/null
+++ b/www/c3ref/data_directory.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Name Of The Folder Holding Database Files</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_data_directory -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Name Of The Folder Holding Database Files</h2>
+</div>
+<blockquote><pre>
+SQLITE_EXTERN char *sqlite3_data_directory;
+</pre></blockquote>
+<p>
+If this global variable is made to point to a string which is
+the name of a folder (a.k.a. directory), then all database files
+specified with a relative pathname and created or accessed by
+SQLite when using a built-in windows <a href="../c3ref/vfs.html">VFS</a> will be assumed
+to be relative to that directory. If this variable is a NULL
+pointer, then SQLite assumes that all database files specified
+with a relative pathname are relative to the current directory
+for the process. Only the windows VFS makes use of this global
+variable; it is ignored by the unix VFS.</p>
+
+<p>Changing the value of this variable while a database connection is
+open can result in a corrupt database.</p>
+
+<p>It is not safe to read or modify this variable in more than one
+thread at a time. It is not safe to read or modify this variable
+if a <a href="../c3ref/sqlite3.html">database connection</a> is being used at the same time in a separate
+thread.
+It is intended that this variable be set once
+as part of process initialization and before any SQLite interface
+routines have been called and that this variable remain unchanged
+thereafter.</p>
+
+<p>The <a href="../pragma.html#pragma_data_store_directory">data_store_directory pragma</a> may modify this variable and cause
+it to point to memory obtained from <a href="../c3ref/free.html">sqlite3_malloc</a>. Furthermore,
+the <a href="../pragma.html#pragma_data_store_directory">data_store_directory pragma</a> always assumes that any string
+that this variable points to is held in memory obtained from
+<a href="../c3ref/free.html">sqlite3_malloc</a> and the pragma may attempt to free that memory
+using <a href="../c3ref/free.html">sqlite3_free</a>.
+Hence, if this variable is modified directly, either it should be
+made NULL or made to point to memory obtained from <a href="../c3ref/free.html">sqlite3_malloc</a>
+or else the use of the <a href="../pragma.html#pragma_data_store_directory">data_store_directory pragma</a> should be avoided.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/database_file_object.html b/www/c3ref/database_file_object.html
new file mode 100644
index 0000000..e31671b
--- /dev/null
+++ b/www/c3ref/database_file_object.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Database File Corresponding To A Journal</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_database_file_object -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Database File Corresponding To A Journal</h2>
+</div>
+<blockquote><pre>
+sqlite3_file *sqlite3_database_file_object(const char*);
+</pre></blockquote>
+<p>
+If X is the name of a rollback or WAL-mode journal file that is
+passed into the xOpen method of <a href="../c3ref/vfs.html">sqlite3_vfs</a>, then
+sqlite3_database_file_object(X) returns a pointer to the <a href="../c3ref/file.html">sqlite3_file</a>
+object that represents the main database file.</p>
+
+<p>This routine is intended for use in custom <a href="../vfs.html">VFS</a> implementations
+only. It is not a general-purpose interface.
+The argument sqlite3_file_object(X) must be a filename pointer that
+has been passed into <a href="../c3ref/vfs.html">sqlite3_vfs</a>.xOpen method where the
+flags parameter to xOpen contains one of the bits
+<a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_MAIN_JOURNAL</a> or <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_WAL</a>. Any other use
+of this routine results in undefined and probably undesirable
+behavior.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/db_cacheflush.html b/www/c3ref/db_cacheflush.html
new file mode 100644
index 0000000..0f9c917
--- /dev/null
+++ b/www/c3ref/db_cacheflush.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Flush caches to disk mid-transaction</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_db_cacheflush -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Flush caches to disk mid-transaction</h2>
+</div>
+<blockquote><pre>
+int sqlite3_db_cacheflush(sqlite3*);
+</pre></blockquote>
+<p>
+If a write-transaction is open on <a href="../c3ref/sqlite3.html">database connection</a> D when the
+<a href="../c3ref/db_cacheflush.html">sqlite3_db_cacheflush(D)</a> interface invoked, any dirty
+pages in the pager-cache that are not currently in use are written out
+to disk. A dirty page may be in use if a database cursor created by an
+active SQL statement is reading from it, or if it is page 1 of a database
+file (page 1 is always "in use"). The <a href="../c3ref/db_cacheflush.html">sqlite3_db_cacheflush(D)</a>
+interface flushes caches for all schemas - "main", "temp", and
+any <a href="../lang_attach.html">attached</a> databases.</p>
+
+<p>If this function needs to obtain extra database locks before dirty pages
+can be flushed to disk, it does so. If those locks cannot be obtained
+immediately and there is a busy-handler callback configured, it is invoked
+in the usual manner. If the required lock still cannot be obtained, then
+the database is skipped and an attempt made to flush any dirty pages
+belonging to the next (if any) database. If any databases are skipped
+because locks cannot be obtained, but no other error occurs, this
+function returns SQLITE_BUSY.</p>
+
+<p>If any other error occurs while flushing dirty pages to disk (for
+example an IO error or out-of-memory condition), then processing is
+abandoned and an SQLite <a href="../rescode.html">error code</a> is returned to the caller immediately.</p>
+
+<p>Otherwise, if no error occurs, <a href="../c3ref/db_cacheflush.html">sqlite3_db_cacheflush()</a> returns SQLITE_OK.</p>
+
+<p>This function does not set the database handle error code or message
+returned by the <a href="../c3ref/errcode.html">sqlite3_errcode()</a> and <a href="../c3ref/errcode.html">sqlite3_errmsg()</a> functions.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/db_config.html b/www/c3ref/db_config.html
new file mode 100644
index 0000000..d062b7e
--- /dev/null
+++ b/www/c3ref/db_config.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Configure database connections</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_db_config -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Configure database connections</h2>
+</div>
+<blockquote><pre>
+int sqlite3_db_config(sqlite3*, int op, ...);
+</pre></blockquote>
+<p>
+The sqlite3_db_config() interface is used to make configuration
+changes to a <a href="../c3ref/sqlite3.html">database connection</a>. The interface is similar to
+<a href="../c3ref/config.html">sqlite3_config()</a> except that the changes apply to a single
+<a href="../c3ref/sqlite3.html">database connection</a> (specified in the first argument).</p>
+
+<p>The second argument to sqlite3_db_config(D,V,...) is the
+<a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">configuration verb</a> - an integer code
+that indicates what aspect of the <a href="../c3ref/sqlite3.html">database connection</a> is being configured.
+Subsequent arguments vary depending on the configuration verb.</p>
+
+<p>Calls to sqlite3_db_config() return SQLITE_OK if and only if
+the call is considered successful.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/db_filename.html b/www/c3ref/db_filename.html
new file mode 100644
index 0000000..850e7dd
--- /dev/null
+++ b/www/c3ref/db_filename.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Return The Filename For A Database Connection</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_db_filename -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Return The Filename For A Database Connection</h2>
+</div>
+<blockquote><pre>
+sqlite3_filename sqlite3_db_filename(sqlite3 *db, const char *zDbName);
+</pre></blockquote>
+<p>
+The sqlite3_db_filename(D,N) interface returns a pointer to the filename
+associated with database N of connection D.
+If there is no attached database N on the database
+connection D, or if database N is a temporary or in-memory database, then
+this function will return either a NULL pointer or an empty string.</p>
+
+<p>The string value returned by this routine is owned and managed by
+the database connection. The value will be valid until the database N
+is <a href="../lang_detach.html">DETACH</a>-ed or until the database connection closes.</p>
+
+<p>The filename returned by this function is the output of the
+xFullPathname method of the <a href="../vfs.html">VFS</a>. In other words, the filename
+will be an absolute pathname, even if the filename used
+to open the database originally was a URI or relative pathname.</p>
+
+<p>If the filename pointer returned by this routine is not NULL, then it
+can be used as the filename input parameter to these routines:
+<ul>
+<li> <a href="../c3ref/uri_boolean.html">sqlite3_uri_parameter()</a>
+<li> <a href="../c3ref/uri_boolean.html">sqlite3_uri_boolean()</a>
+<li> <a href="../c3ref/uri_boolean.html">sqlite3_uri_int64()</a>
+<li> <a href="../c3ref/filename_database.html">sqlite3_filename_database()</a>
+<li> <a href="../c3ref/filename_database.html">sqlite3_filename_journal()</a>
+<li> <a href="../c3ref/filename_database.html">sqlite3_filename_wal()</a>
+</ul>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/db_handle.html b/www/c3ref/db_handle.html
new file mode 100644
index 0000000..8737c1d
--- /dev/null
+++ b/www/c3ref/db_handle.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Find The Database Handle Of A Prepared Statement</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_db_handle -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Find The Database Handle Of A Prepared Statement</h2>
+</div>
+<blockquote><pre>
+sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+The sqlite3_db_handle interface returns the <a href="../c3ref/sqlite3.html">database connection</a> handle
+to which a <a href="../c3ref/stmt.html">prepared statement</a> belongs. The <a href="../c3ref/sqlite3.html">database connection</a>
+returned by sqlite3_db_handle is the same <a href="../c3ref/sqlite3.html">database connection</a>
+that was the first argument
+to the <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> call (or its variants) that was used to
+create the statement in the first place.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/db_mutex.html b/www/c3ref/db_mutex.html
new file mode 100644
index 0000000..3e34385
--- /dev/null
+++ b/www/c3ref/db_mutex.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Retrieve the mutex for a database connection</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_db_mutex -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Retrieve the mutex for a database connection</h2>
+</div>
+<blockquote><pre>
+sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
+</pre></blockquote>
+<p>
+This interface returns a pointer the <a href="../c3ref/mutex.html">sqlite3_mutex</a> object that
+serializes access to the <a href="../c3ref/sqlite3.html">database connection</a> given in the argument
+when the <a href="../threadsafe.html">threading mode</a> is Serialized.
+If the <a href="../threadsafe.html">threading mode</a> is Single-thread or Multi-thread then this
+routine returns a NULL pointer.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/db_name.html b/www/c3ref/db_name.html
new file mode 100644
index 0000000..65d2954
--- /dev/null
+++ b/www/c3ref/db_name.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Return The Schema Name For A Database Connection</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_db_name -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Return The Schema Name For A Database Connection</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_db_name(sqlite3 *db, int N);
+</pre></blockquote>
+<p>
+The sqlite3_db_name(D,N) interface returns a pointer to the schema name
+for the N-th database on database connection D, or a NULL pointer of N is
+out of range. An N value of 0 means the main database file. An N of 1 is
+the "temp" schema. Larger values of N correspond to various ATTACH-ed
+databases.</p>
+
+<p>Space to hold the string that is returned by sqlite3_db_name() is managed
+by SQLite itself. The string might be deallocated by any operation that
+changes the schema, including <a href="../lang_attach.html">ATTACH</a> or <a href="../lang_detach.html">DETACH</a> or calls to
+<a href="../c3ref/serialize.html">sqlite3_serialize()</a> or <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a>, even operations that
+occur on a different thread. Applications that need to
+remember the string long-term should make their own copy. Applications that
+are accessing the same database connection simultaneously on multiple
+threads should mutex-protect calls to this API and should make their own
+private copy of the result prior to releasing the mutex.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/db_readonly.html b/www/c3ref/db_readonly.html
new file mode 100644
index 0000000..a744760
--- /dev/null
+++ b/www/c3ref/db_readonly.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Determine if a database is read-only</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_db_readonly -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Determine if a database is read-only</h2>
+</div>
+<blockquote><pre>
+int sqlite3_db_readonly(sqlite3 *db, const char *zDbName);
+</pre></blockquote>
+<p>
+The sqlite3_db_readonly(D,N) interface returns 1 if the database N
+of connection D is read-only, 0 if it is read/write, or -1 if N is not
+the name of a database on connection D.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/db_release_memory.html b/www/c3ref/db_release_memory.html
new file mode 100644
index 0000000..5772476
--- /dev/null
+++ b/www/c3ref/db_release_memory.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Free Memory Used By A Database Connection</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_db_release_memory -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Free Memory Used By A Database Connection</h2>
+</div>
+<blockquote><pre>
+int sqlite3_db_release_memory(sqlite3*);
+</pre></blockquote>
+<p>
+The sqlite3_db_release_memory(D) interface attempts to free as much heap
+memory as possible from database connection D. Unlike the
+<a href="../c3ref/release_memory.html">sqlite3_release_memory()</a> interface, this interface is in effect even
+when the <a href="../compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a> compile-time option is
+omitted.</p>
+
+<p>See also: <a href="../c3ref/release_memory.html">sqlite3_release_memory()</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/db_status.html b/www/c3ref/db_status.html
new file mode 100644
index 0000000..bbc1989
--- /dev/null
+++ b/www/c3ref/db_status.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Database Connection Status</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_db_status -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Database Connection Status</h2>
+</div>
+<blockquote><pre>
+int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
+</pre></blockquote>
+<p>
+This interface is used to retrieve runtime status information
+about a single <a href="../c3ref/sqlite3.html">database connection</a>. The first argument is the
+database connection object to be interrogated. The second argument
+is an integer constant, taken from the set of
+<a href="../c3ref/c_dbstatus_options.html">SQLITE_DBSTATUS options</a>, that
+determines the parameter to interrogate. The set of
+<a href="../c3ref/c_dbstatus_options.html">SQLITE_DBSTATUS options</a> is likely
+to grow in future releases of SQLite.</p>
+
+<p>The current value of the requested parameter is written into *pCur
+and the highest instantaneous value is written into *pHiwtr. If
+the resetFlg is true, then the highest instantaneous value is
+reset back down to the current value.</p>
+
+<p>The sqlite3_db_status() routine returns SQLITE_OK on success and a
+non-zero <a href="../rescode.html">error code</a> on failure.</p>
+
+<p>See also: <a href="../c3ref/status.html">sqlite3_status()</a> and <a href="../c3ref/stmt_status.html">sqlite3_stmt_status()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/declare_vtab.html b/www/c3ref/declare_vtab.html
new file mode 100644
index 0000000..6327884
--- /dev/null
+++ b/www/c3ref/declare_vtab.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Declare The Schema Of A Virtual Table</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_declare_vtab -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Declare The Schema Of A Virtual Table</h2>
+</div>
+<blockquote><pre>
+int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
+</pre></blockquote>
+<p>
+The <a href="../vtab.html#xcreate">xCreate</a> and <a href="../vtab.html#xconnect">xConnect</a> methods of a
+<a href="../c3ref/module.html">virtual table module</a> call this interface
+to declare the format (the names and datatypes of the columns) of
+the virtual tables they implement.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/deserialize.html b/www/c3ref/deserialize.html
new file mode 100644
index 0000000..40bef72
--- /dev/null
+++ b/www/c3ref/deserialize.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Deserialize a database</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_deserialize -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Deserialize a database</h2>
+</div>
+<blockquote><pre>
+int sqlite3_deserialize(
+ sqlite3 *db, /* The database connection */
+ const char *zSchema, /* Which DB to reopen with the deserialization */
+ unsigned char *pData, /* The serialized database content */
+ sqlite3_int64 szDb, /* Number bytes in the deserialization */
+ sqlite3_int64 szBuf, /* Total size of buffer pData[] */
+ unsigned mFlags /* Zero or more SQLITE_DESERIALIZE_* flags */
+);
+</pre></blockquote>
+<p>
+The sqlite3_deserialize(D,S,P,N,M,F) interface causes the
+<a href="../c3ref/sqlite3.html">database connection</a> D to disconnect from database S and then
+reopen S as an in-memory database based on the serialization contained
+in P. The serialized database P is N bytes in size. M is the size of
+the buffer P, which might be larger than N. If M is larger than N, and
+the SQLITE_DESERIALIZE_READONLY bit is not set in F, then SQLite is
+permitted to add content to the in-memory database as long as the total
+size does not exceed M bytes.</p>
+
+<p>If the SQLITE_DESERIALIZE_FREEONCLOSE bit is set in F, then SQLite will
+invoke sqlite3_free() on the serialization buffer when the database
+connection closes. If the SQLITE_DESERIALIZE_RESIZEABLE bit is set, then
+SQLite will try to increase the buffer size using sqlite3_realloc64()
+if writes on the database cause it to grow larger than M bytes.</p>
+
+<p>The sqlite3_deserialize() interface will fail with SQLITE_BUSY if the
+database is currently in a read transaction or is involved in a backup
+operation.</p>
+
+<p>It is not possible to deserialized into the TEMP database. If the
+S argument to sqlite3_deserialize(D,S,P,N,M,F) is "temp" then the
+function returns SQLITE_ERROR.</p>
+
+<p>If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the
+SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then
+<a href="../c3ref/free.html">sqlite3_free()</a> is invoked on argument P prior to returning.</p>
+
+<p>This interface is omitted if SQLite is compiled with the
+<a href="../compile.html#omit_deserialize">SQLITE_OMIT_DESERIALIZE</a> option.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/drop_modules.html b/www/c3ref/drop_modules.html
new file mode 100644
index 0000000..b153a99
--- /dev/null
+++ b/www/c3ref/drop_modules.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Remove Unnecessary Virtual Table Implementations</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_drop_modules -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Remove Unnecessary Virtual Table Implementations</h2>
+</div>
+<blockquote><pre>
+int sqlite3_drop_modules(
+ sqlite3 *db, /* Remove modules from this connection */
+ const char **azKeep /* Except, do not remove the ones named here */
+);
+</pre></blockquote>
+<p>
+The sqlite3_drop_modules(D,L) interface removes all virtual
+table modules from database connection D except those named on list L.
+The L parameter must be either NULL or a pointer to an array of pointers
+to strings where the array is terminated by a single NULL pointer.
+If the L parameter is NULL, then all virtual table modules are removed.</p>
+
+<p>See also: <a href="../c3ref/create_module.html">sqlite3_create_module()</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/enable_load_extension.html b/www/c3ref/enable_load_extension.html
new file mode 100644
index 0000000..95f102e
--- /dev/null
+++ b/www/c3ref/enable_load_extension.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Enable Or Disable Extension Loading</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_enable_load_extension -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Enable Or Disable Extension Loading</h2>
+</div>
+<blockquote><pre>
+int sqlite3_enable_load_extension(sqlite3 *db, int onoff);
+</pre></blockquote>
+<p>
+So as not to open security holes in older applications that are
+unprepared to deal with <a href="../loadext.html">extension loading</a>, and as a means of disabling
+<a href="../loadext.html">extension loading</a> while evaluating user-entered SQL, the following API
+is provided to turn the <a href="../c3ref/load_extension.html">sqlite3_load_extension()</a> mechanism on and off.</p>
+
+<p>Extension loading is off by default.
+Call the sqlite3_enable_load_extension() routine with onoff==1
+to turn extension loading on and call it with onoff==0 to turn
+it back off again.</p>
+
+<p>This interface enables or disables both the C-API
+<a href="../c3ref/load_extension.html">sqlite3_load_extension()</a> and the SQL function <a href="../lang_corefunc.html#load_extension">load_extension()</a>.
+Use <a href="../c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a>,..)
+to enable or disable only the C-API.</p>
+
+<p><b>Security warning:</b> It is recommended that extension loading
+be enabled using the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a> method
+rather than this interface, so the <a href="../lang_corefunc.html#load_extension">load_extension()</a> SQL function
+remains disabled. This will prevent SQL injections from giving attackers
+access to extension loading capabilities.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/enable_shared_cache.html b/www/c3ref/enable_shared_cache.html
new file mode 100644
index 0000000..4d5562e
--- /dev/null
+++ b/www/c3ref/enable_shared_cache.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Enable Or Disable Shared Pager Cache</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_enable_shared_cache -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Enable Or Disable Shared Pager Cache</h2>
+</div>
+<blockquote><pre>
+int sqlite3_enable_shared_cache(int);
+</pre></blockquote>
+<p>
+This routine enables or disables the sharing of the database cache
+and schema data structures between <a href="../c3ref/sqlite3.html">connections</a>
+to the same database. Sharing is enabled if the argument is true
+and disabled if the argument is false.</p>
+
+<p>This interface is omitted if SQLite is compiled with
+<a href="../compile.html#omit_shared_cache">-DSQLITE_OMIT_SHARED_CACHE</a>. The <a href="../compile.html#omit_shared_cache">-DSQLITE_OMIT_SHARED_CACHE</a>
+compile-time option is recommended because the
+<a href="../sharedcache.html#dontuse">use of shared cache mode is discouraged</a>.</p>
+
+<p>Cache sharing is enabled and disabled for an entire process.
+This is a change as of SQLite <a href="../releaselog/3_5_0.html">version 3.5.0</a> (2007-09-04).
+In prior versions of SQLite,
+sharing was enabled or disabled for each thread separately.</p>
+
+<p>The cache sharing mode set by this interface effects all subsequent
+calls to <a href="../c3ref/open.html">sqlite3_open()</a>, <a href="../c3ref/open.html">sqlite3_open_v2()</a>, and <a href="../c3ref/open.html">sqlite3_open16()</a>.
+Existing database connections continue to use the sharing mode
+that was in effect at the time they were opened.</p>
+
+<p>This routine returns <a href="../rescode.html#ok">SQLITE_OK</a> if shared cache was enabled or disabled
+successfully. An <a href="../rescode.html">error code</a> is returned otherwise.</p>
+
+<p>Shared cache is disabled by default. It is recommended that it stay
+that way. In other words, do not use this routine. This interface
+continues to be provided for historical compatibility, but its use is
+discouraged. Any use of shared cache is discouraged. If shared cache
+must be used, it is recommended that shared cache only be enabled for
+individual database connections using the <a href="../c3ref/open.html">sqlite3_open_v2()</a> interface
+with the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a> flag.</p>
+
+<p>Note: This method is disabled on MacOS X 10.7 and iOS version 5.0
+and will always return SQLITE_MISUSE. On those systems,
+shared cache mode should be enabled per-database connection via
+<a href="../c3ref/open.html">sqlite3_open_v2()</a> with <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a>.</p>
+
+<p>This interface is threadsafe on processors where writing a
+32-bit integer is atomic.</p>
+
+<p>See Also: <a href="../sharedcache.html">SQLite Shared-Cache Mode</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/errcode.html b/www/c3ref/errcode.html
new file mode 100644
index 0000000..2d73201
--- /dev/null
+++ b/www/c3ref/errcode.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Error Codes And Messages</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_errcode sqlite3_errmsg sqlite3_errmsg16 sqlite3_error_offset sqlite3_errstr sqlite3_extended_errcode -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Error Codes And Messages</h2>
+</div>
+<blockquote><pre>
+int sqlite3_errcode(sqlite3 *db);
+int sqlite3_extended_errcode(sqlite3 *db);
+const char *sqlite3_errmsg(sqlite3*);
+const void *sqlite3_errmsg16(sqlite3*);
+const char *sqlite3_errstr(int);
+int sqlite3_error_offset(sqlite3 *db);
+</pre></blockquote>
+<p>
+If the most recent sqlite3_* API call associated with
+<a href="../c3ref/sqlite3.html">database connection</a> D failed, then the sqlite3_errcode(D) interface
+returns the numeric <a href="../rescode.html">result code</a> or <a href="../rescode.html#extrc">extended result code</a> for that
+API call.
+The sqlite3_extended_errcode()
+interface is the same except that it always returns the
+<a href="../rescode.html#extrc">extended result code</a> even when extended result codes are
+disabled.</p>
+
+<p>The values returned by sqlite3_errcode() and/or
+sqlite3_extended_errcode() might change with each API call.
+Except, there are some interfaces that are guaranteed to never
+change the value of the error code. The error-code preserving
+interfaces include the following:</p>
+
+<p><ul>
+<li> sqlite3_errcode()
+<li> sqlite3_extended_errcode()
+<li> sqlite3_errmsg()
+<li> sqlite3_errmsg16()
+<li> sqlite3_error_offset()
+</ul></p>
+
+<p>The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
+text that describes the error, as either UTF-8 or UTF-16 respectively.
+Memory to hold the error message string is managed internally.
+The application does not need to worry about freeing the result.
+However, the error string might be overwritten or deallocated by
+subsequent calls to other SQLite interface functions.</p>
+
+<p>The sqlite3_errstr() interface returns the English-language text
+that describes the <a href="../rescode.html">result code</a>, as UTF-8.
+Memory to hold the error message string is managed internally
+and must not be freed by the application.</p>
+
+<p>If the most recent error references a specific token in the input
+SQL, the sqlite3_error_offset() interface returns the byte offset
+of the start of that token. The byte offset returned by
+sqlite3_error_offset() assumes that the input SQL is UTF8.
+If the most recent error does not reference a specific token in the input
+SQL, then the sqlite3_error_offset() function returns -1.</p>
+
+<p>When the serialized <a href="../threadsafe.html">threading mode</a> is in use, it might be the
+case that a second error occurs on a separate thread in between
+the time of the first error and the call to these interfaces.
+When that happens, the second error will be reported since these
+interfaces always report the most recent result. To avoid
+this, each thread can obtain exclusive use of the <a href="../c3ref/sqlite3.html">database connection</a> D
+by invoking <a href="../c3ref/mutex_alloc.html">sqlite3_mutex_enter</a>(<a href="../c3ref/db_mutex.html">sqlite3_db_mutex</a>(D)) before beginning
+to use D and invoking <a href="../c3ref/mutex_alloc.html">sqlite3_mutex_leave</a>(<a href="../c3ref/db_mutex.html">sqlite3_db_mutex</a>(D)) after
+all calls to the interfaces listed here are completed.</p>
+
+<p>If an interface fails with SQLITE_MISUSE, that means the interface
+was invoked incorrectly by the application. In that case, the
+error code and message may or may not be set.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/exec.html b/www/c3ref/exec.html
new file mode 100644
index 0000000..a750ed6
--- /dev/null
+++ b/www/c3ref/exec.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>One-Step Query Execution Interface</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_exec -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>One-Step Query Execution Interface</h2>
+</div>
+<blockquote><pre>
+int sqlite3_exec(
+ sqlite3*, /* An open database */
+ const char *sql, /* SQL to be evaluated */
+ int (*callback)(void*,int,char**,char**), /* Callback function */
+ void *, /* 1st argument to callback */
+ char **errmsg /* Error msg written here */
+);
+</pre></blockquote>
+<p>
+The sqlite3_exec() interface is a convenience wrapper around
+<a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>, <a href="../c3ref/step.html">sqlite3_step()</a>, and <a href="../c3ref/finalize.html">sqlite3_finalize()</a>,
+that allows an application to run multiple statements of SQL
+without having to use a lot of C code.</p>
+
+<p>The sqlite3_exec() interface runs zero or more UTF-8 encoded,
+semicolon-separate SQL statements passed into its 2nd argument,
+in the context of the <a href="../c3ref/sqlite3.html">database connection</a> passed in as its 1st
+argument. If the callback function of the 3rd argument to
+sqlite3_exec() is not NULL, then it is invoked for each result row
+coming out of the evaluated SQL statements. The 4th argument to
+sqlite3_exec() is relayed through to the 1st argument of each
+callback invocation. If the callback pointer to sqlite3_exec()
+is NULL, then no callback is ever invoked and result rows are
+ignored.</p>
+
+<p>If an error occurs while evaluating the SQL statements passed into
+sqlite3_exec(), then execution of the current statement stops and
+subsequent statements are skipped. If the 5th parameter to sqlite3_exec()
+is not NULL then any error message is written into memory obtained
+from <a href="../c3ref/free.html">sqlite3_malloc()</a> and passed back through the 5th parameter.
+To avoid memory leaks, the application should invoke <a href="../c3ref/free.html">sqlite3_free()</a>
+on error message strings returned through the 5th parameter of
+sqlite3_exec() after the error message string is no longer needed.
+If the 5th parameter to sqlite3_exec() is not NULL and no errors
+occur, then sqlite3_exec() sets the pointer in its 5th parameter to
+NULL before returning.</p>
+
+<p>If an sqlite3_exec() callback returns non-zero, the sqlite3_exec()
+routine returns SQLITE_ABORT without invoking the callback again and
+without running any subsequent SQL statements.</p>
+
+<p>The 2nd argument to the sqlite3_exec() callback function is the
+number of columns in the result. The 3rd argument to the sqlite3_exec()
+callback is an array of pointers to strings obtained as if from
+<a href="../c3ref/column_blob.html">sqlite3_column_text()</a>, one for each column. If an element of a
+result row is NULL then the corresponding string pointer for the
+sqlite3_exec() callback is a NULL pointer. The 4th argument to the
+sqlite3_exec() callback is an array of pointers to strings where each
+entry represents the name of corresponding result column as obtained
+from <a href="../c3ref/column_name.html">sqlite3_column_name()</a>.</p>
+
+<p>If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer
+to an empty string, or a pointer that contains only whitespace and/or
+SQL comments, then no SQL statements are evaluated and the database
+is not changed.</p>
+
+<p>Restrictions:</p>
+
+<p><ul>
+<li> The application must ensure that the 1st parameter to sqlite3_exec()
+is a valid and open <a href="../c3ref/sqlite3.html">database connection</a>.
+<li> The application must not close the <a href="../c3ref/sqlite3.html">database connection</a> specified by
+the 1st parameter to sqlite3_exec() while sqlite3_exec() is running.
+<li> The application must not modify the SQL statement text passed into
+the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running.
+</ul>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/expanded_sql.html b/www/c3ref/expanded_sql.html
new file mode 100644
index 0000000..61ce827
--- /dev/null
+++ b/www/c3ref/expanded_sql.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Retrieving Statement SQL</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_expanded_sql sqlite3_normalized_sql sqlite3_sql -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Retrieving Statement SQL</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_sql(sqlite3_stmt *pStmt);
+char *sqlite3_expanded_sql(sqlite3_stmt *pStmt);
+#ifdef SQLITE_ENABLE_NORMALIZE
+const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt);
+#endif
+</pre></blockquote>
+<p>
+The sqlite3_sql(P) interface returns a pointer to a copy of the UTF-8
+SQL text used to create <a href="../c3ref/stmt.html">prepared statement</a> P if P was
+created by <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>, <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>,
+<a href="../c3ref/prepare.html">sqlite3_prepare16_v2()</a>, or <a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a>.
+The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8
+string containing the SQL text of prepared statement P with
+<a href="../lang_expr.html#varparam">bound parameters</a> expanded.
+The sqlite3_normalized_sql(P) interface returns a pointer to a UTF-8
+string containing the normalized SQL text of prepared statement P. The
+semantics used to normalize a SQL statement are unspecified and subject
+to change. At a minimum, literal values will be replaced with suitable
+placeholders.</p>
+
+<p>For example, if a prepared statement is created using the SQL
+text "SELECT $abc,:xyz" and if parameter $abc is bound to integer 2345
+and parameter :xyz is unbound, then sqlite3_sql() will return
+the original string, "SELECT $abc,:xyz" but sqlite3_expanded_sql()
+will return "SELECT 2345,NULL".</p>
+
+<p>The sqlite3_expanded_sql() interface returns NULL if insufficient memory
+is available to hold the result, or if the result would exceed the
+the maximum string length determined by the <a href="../c3ref/c_limit_attached.html#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a>.</p>
+
+<p>The <a href="../compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> compile-time option limits the size of
+bound parameter expansions. The <a href="../compile.html#omit_trace">SQLITE_OMIT_TRACE</a> compile-time
+option causes sqlite3_expanded_sql() to always return NULL.</p>
+
+<p>The strings returned by sqlite3_sql(P) and sqlite3_normalized_sql(P)
+are managed by SQLite and are automatically freed when the prepared
+statement is finalized.
+The string returned by sqlite3_expanded_sql(P), on the other hand,
+is obtained from <a href="../c3ref/free.html">sqlite3_malloc()</a> and must be freed by the application
+by passing it to <a href="../c3ref/free.html">sqlite3_free()</a>.</p>
+
+<p>The sqlite3_normalized_sql() interface is only available if
+the <a href="../compile.html#enable_normalize">SQLITE_ENABLE_NORMALIZE</a> compile-time option is defined.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/experimental.html b/www/c3ref/experimental.html
new file mode 100644
index 0000000..33fc3f2
--- /dev/null
+++ b/www/c3ref/experimental.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Experimental Interfaces</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+
+<h2>Experimental And Deprecated Interfaces</h2>
+
+<p>SQLite interfaces can be subdivided into three categories:</p>
+
+<ol>
+<li>Stable</li>
+<li>Experimental</li>
+<li>Deprecated</li>
+</ol>
+
+<p>Stable interfaces will be maintained indefinitely in a backwards
+compatible way. An application that uses only stable interfaces
+should always be able to relink against a newer version of SQLite
+without any changes.</p>
+
+<p>Experimental interfaces are subject to change.
+Applications that use experimental interfaces
+may need to be modified when upgrading to a newer SQLite release, though
+this is rare.
+When new interfaces are added to SQLite, they generally begin
+as experimental interfaces. After an interface has been in use for
+a while and the developers are confident that the design of the interface
+is sound and worthy of long-term support, the interface is marked
+as stable.</p>
+
+<p>Deprecated interfaces have been superceded by better methods of
+accomplishing the same thing and should be avoided in new applications.
+Deprecated interfaces continue to be supported for the sake of
+backwards compatibility. At some point in the future, it is possible
+that deprecated interfaces may be removed.</p>
+
+<p>Key points:</p>
+
+<ul>
+<li>Experimental interfaces are subject to change and/or removal
+at any time.</li>
+
+<li>Deprecated interfaces should not be used in new code and might
+be removed in some future release.</li>
+</ul>
+
+
+
diff --git a/www/c3ref/extended_result_codes.html b/www/c3ref/extended_result_codes.html
new file mode 100644
index 0000000..f157ae7
--- /dev/null
+++ b/www/c3ref/extended_result_codes.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Enable Or Disable Extended Result Codes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_extended_result_codes -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Enable Or Disable Extended Result Codes</h2>
+</div>
+<blockquote><pre>
+int sqlite3_extended_result_codes(sqlite3*, int onoff);
+</pre></blockquote>
+<p>
+The sqlite3_extended_result_codes() routine enables or disables the
+<a href="../rescode.html#extrc">extended result codes</a> feature of SQLite. The extended result
+codes are disabled by default for historical compatibility.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/file.html b/www/c3ref/file.html
new file mode 100644
index 0000000..199ab66
--- /dev/null
+++ b/www/c3ref/file.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>OS Interface Open File Handle</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_file -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>OS Interface Open File Handle</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_file sqlite3_file;
+struct sqlite3_file {
+ const struct sqlite3_io_methods *pMethods; /* Methods for an open file */
+};
+</pre></blockquote>
+<p>
+An <a href="../c3ref/file.html">sqlite3_file</a> object represents an open file in the
+<a href="../c3ref/vfs.html">OS interface layer</a>. Individual OS interface
+implementations will
+want to subclass this object by appending additional fields
+for their own use. The pMethods entry is a pointer to an
+<a href="../c3ref/io_methods.html">sqlite3_io_methods</a> object that defines methods for performing
+I/O operations on the open file.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/file_control.html b/www/c3ref/file_control.html
new file mode 100644
index 0000000..a585df9
--- /dev/null
+++ b/www/c3ref/file_control.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Low-Level Control Of Database Files</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {file control} sqlite3_file_control -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Low-Level Control Of Database Files</h2>
+</div>
+<blockquote><pre>
+int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
+</pre></blockquote>
+<p>
+The <a href="../c3ref/file_control.html">sqlite3_file_control()</a> interface makes a direct call to the
+xFileControl method for the <a href="../c3ref/io_methods.html">sqlite3_io_methods</a> object associated
+with a particular database identified by the second argument. The
+name of the database is "main" for the main database or "temp" for the
+TEMP database, or the name that appears after the AS keyword for
+databases that are added using the <a href="../lang_attach.html">ATTACH</a> SQL command.
+A NULL pointer can be used in place of "main" to refer to the
+main database file.
+The third and fourth parameters to this routine
+are passed directly through to the second and third parameters of
+the xFileControl method. The return value of the xFileControl
+method becomes the return value of this routine.</p>
+
+<p>A few opcodes for <a href="../c3ref/file_control.html">sqlite3_file_control()</a> are handled directly
+by the SQLite core and never invoke the
+sqlite3_io_methods.xFileControl method.
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a> value for the op parameter causes
+a pointer to the underlying <a href="../c3ref/file.html">sqlite3_file</a> object to be written into
+the space pointed to by the 4th parameter. The
+<a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> works similarly except that it returns
+the <a href="../c3ref/file.html">sqlite3_file</a> object associated with the journal file instead of
+the main database. The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer">SQLITE_FCNTL_VFS_POINTER</a> opcode returns
+a pointer to the underlying <a href="../c3ref/vfs.html">sqlite3_vfs</a> object for the file.
+The <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> returns the data version counter
+from the pager.</p>
+
+<p>If the second parameter (zDbName) does not match the name of any
+open database file, then SQLITE_ERROR is returned. This error
+code is not remembered and will not be recalled by <a href="../c3ref/errcode.html">sqlite3_errcode()</a>
+or <a href="../c3ref/errcode.html">sqlite3_errmsg()</a>. The underlying xFileControl method might
+also return SQLITE_ERROR. There is no way to distinguish between
+an incorrect zDbName and an SQLITE_ERROR return from the underlying
+xFileControl method.</p>
+
+<p>See also: <a href="../c3ref/c_fcntl_begin_atomic_write.html">file control opcodes</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/filename.html b/www/c3ref/filename.html
new file mode 100644
index 0000000..56da50c
--- /dev/null
+++ b/www/c3ref/filename.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>File Name</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_filename -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>File Name</h2>
+</div>
+<blockquote><pre>
+typedef const char *sqlite3_filename;
+</pre></blockquote>
+<p>
+Type <a href="../c3ref/filename.html">sqlite3_filename</a> is used by SQLite to pass filenames to the
+xOpen method of a <a href="../vfs.html">VFS</a>. It may be cast to (const char*) and treated
+as a normal, nul-terminated, UTF-8 buffer containing the filename, but
+may also be passed to special APIs such as:</p>
+
+<p><ul>
+<li> sqlite3_filename_database()
+<li> sqlite3_filename_journal()
+<li> sqlite3_filename_wal()
+<li> sqlite3_uri_parameter()
+<li> sqlite3_uri_boolean()
+<li> sqlite3_uri_int64()
+<li> sqlite3_uri_key()
+</ul>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/filename_database.html b/www/c3ref/filename_database.html
new file mode 100644
index 0000000..9ed162a
--- /dev/null
+++ b/www/c3ref/filename_database.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Translate filenames</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_filename_database sqlite3_filename_journal sqlite3_filename_wal -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Translate filenames</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_filename_database(sqlite3_filename);
+const char *sqlite3_filename_journal(sqlite3_filename);
+const char *sqlite3_filename_wal(sqlite3_filename);
+</pre></blockquote>
+<p>
+These routines are available to <a href="../vfs.html">custom VFS implementations</a> for
+translating filenames between the main database file, the journal file,
+and the WAL file.</p>
+
+<p>If F is the name of an sqlite database file, journal file, or WAL file
+passed by the SQLite core into the VFS, then sqlite3_filename_database(F)
+returns the name of the corresponding database file.</p>
+
+<p>If F is the name of an sqlite database file, journal file, or WAL file
+passed by the SQLite core into the VFS, or if F is a database filename
+obtained from <a href="../c3ref/db_filename.html">sqlite3_db_filename()</a>, then sqlite3_filename_journal(F)
+returns the name of the corresponding rollback journal file.</p>
+
+<p>If F is the name of an sqlite database file, journal file, or WAL file
+that was passed by the SQLite core into the VFS, or if F is a database
+filename obtained from <a href="../c3ref/db_filename.html">sqlite3_db_filename()</a>, then
+sqlite3_filename_wal(F) returns the name of the corresponding
+WAL file.</p>
+
+<p>In all of the above, if F is not the name of a database, journal or WAL
+filename passed into the VFS from the SQLite core and F is not the
+return value from <a href="../c3ref/db_filename.html">sqlite3_db_filename()</a>, then the result is
+undefined and is likely a memory access violation.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/finalize.html b/www/c3ref/finalize.html
new file mode 100644
index 0000000..e33f711
--- /dev/null
+++ b/www/c3ref/finalize.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Destroy A Prepared Statement Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_finalize -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Destroy A Prepared Statement Object</h2>
+</div>
+<blockquote><pre>
+int sqlite3_finalize(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+The sqlite3_finalize() function is called to delete a <a href="../c3ref/stmt.html">prepared statement</a>.
+If the most recent evaluation of the statement encountered no errors
+or if the statement is never been evaluated, then sqlite3_finalize() returns
+SQLITE_OK. If the most recent evaluation of statement S failed, then
+sqlite3_finalize(S) returns the appropriate <a href="../rescode.html">error code</a> or
+<a href="../rescode.html#extrc">extended error code</a>.</p>
+
+<p>The sqlite3_finalize(S) routine can be called at any point during
+the life cycle of <a href="../c3ref/stmt.html">prepared statement</a> S:
+before statement S is ever evaluated, after
+one or more calls to <a href="../c3ref/reset.html">sqlite3_reset()</a>, or after any call
+to <a href="../c3ref/step.html">sqlite3_step()</a> regardless of whether or not the statement has
+completed execution.</p>
+
+<p>Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op.</p>
+
+<p>The application must finalize every <a href="../c3ref/stmt.html">prepared statement</a> in order to avoid
+resource leaks. It is a grievous error for the application to try to use
+a prepared statement after it has been finalized. Any use of a prepared
+statement after it has been finalized can result in undefined and
+undesirable behavior such as segfaults and heap corruption.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/free.html b/www/c3ref/free.html
new file mode 100644
index 0000000..fa58c26
--- /dev/null
+++ b/www/c3ref/free.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Memory Allocation Subsystem</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_free sqlite3_malloc sqlite3_malloc64 sqlite3_msize sqlite3_realloc sqlite3_realloc64 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Memory Allocation Subsystem</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_malloc(int);
+void *sqlite3_malloc64(sqlite3_uint64);
+void *sqlite3_realloc(void*, int);
+void *sqlite3_realloc64(void*, sqlite3_uint64);
+void sqlite3_free(void*);
+sqlite3_uint64 sqlite3_msize(void*);
+</pre></blockquote>
+<p>
+The SQLite core uses these three routines for all of its own
+internal memory allocation needs. "Core" in the previous sentence
+does not include operating-system specific <a href="../vfs.html">VFS</a> implementation. The
+Windows VFS uses native malloc() and free() for some operations.</p>
+
+<p>The sqlite3_malloc() routine returns a pointer to a block
+of memory at least N bytes in length, where N is the parameter.
+If sqlite3_malloc() is unable to obtain sufficient free
+memory, it returns a NULL pointer. If the parameter N to
+sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
+a NULL pointer.</p>
+
+<p>The sqlite3_malloc64(N) routine works just like
+sqlite3_malloc(N) except that N is an unsigned 64-bit integer instead
+of a signed 32-bit integer.</p>
+
+<p>Calling sqlite3_free() with a pointer previously returned
+by sqlite3_malloc() or sqlite3_realloc() releases that memory so
+that it might be reused. The sqlite3_free() routine is
+a no-op if is called with a NULL pointer. Passing a NULL pointer
+to sqlite3_free() is harmless. After being freed, memory
+should neither be read nor written. Even reading previously freed
+memory might result in a segmentation fault or other severe error.
+Memory corruption, a segmentation fault, or other severe error
+might result if sqlite3_free() is called with a non-NULL pointer that
+was not obtained from sqlite3_malloc() or sqlite3_realloc().</p>
+
+<p>The sqlite3_realloc(X,N) interface attempts to resize a
+prior memory allocation X to be at least N bytes.
+If the X parameter to sqlite3_realloc(X,N)
+is a NULL pointer then its behavior is identical to calling
+sqlite3_malloc(N).
+If the N parameter to sqlite3_realloc(X,N) is zero or
+negative then the behavior is exactly the same as calling
+sqlite3_free(X).
+sqlite3_realloc(X,N) returns a pointer to a memory allocation
+of at least N bytes in size or NULL if insufficient memory is available.
+If M is the size of the prior allocation, then min(N,M) bytes
+of the prior allocation are copied into the beginning of buffer returned
+by sqlite3_realloc(X,N) and the prior allocation is freed.
+If sqlite3_realloc(X,N) returns NULL and N is positive, then the
+prior allocation is not freed.</p>
+
+<p>The sqlite3_realloc64(X,N) interfaces works the same as
+sqlite3_realloc(X,N) except that N is a 64-bit unsigned integer instead
+of a 32-bit signed integer.</p>
+
+<p>If X is a memory allocation previously obtained from sqlite3_malloc(),
+sqlite3_malloc64(), sqlite3_realloc(), or sqlite3_realloc64(), then
+sqlite3_msize(X) returns the size of that memory allocation in bytes.
+The value returned by sqlite3_msize(X) might be larger than the number
+of bytes requested when X was allocated. If X is a NULL pointer then
+sqlite3_msize(X) returns zero. If X points to something that is not
+the beginning of memory allocation, or if it points to a formerly
+valid memory allocation that has now been freed, then the behavior
+of sqlite3_msize(X) is undefined and possibly harmful.</p>
+
+<p>The memory returned by sqlite3_malloc(), sqlite3_realloc(),
+sqlite3_malloc64(), and sqlite3_realloc64()
+is always aligned to at least an 8 byte boundary, or to a
+4 byte boundary if the <a href="../compile.html#4_byte_aligned_malloc">SQLITE_4_BYTE_ALIGNED_MALLOC</a> compile-time
+option is used.</p>
+
+<p>The pointer arguments to <a href="../c3ref/free.html">sqlite3_free()</a> and <a href="../c3ref/free.html">sqlite3_realloc()</a>
+must be either NULL or else pointers obtained from a prior
+invocation of <a href="../c3ref/free.html">sqlite3_malloc()</a> or <a href="../c3ref/free.html">sqlite3_realloc()</a> that have
+not yet been released.</p>
+
+<p>The application must not read or write any part of
+a block of memory after it has been released using
+<a href="../c3ref/free.html">sqlite3_free()</a> or <a href="../c3ref/free.html">sqlite3_realloc()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/free_table.html b/www/c3ref/free_table.html
new file mode 100644
index 0000000..9c08c28
--- /dev/null
+++ b/www/c3ref/free_table.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Convenience Routines For Running Queries</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_free_table sqlite3_get_table -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Convenience Routines For Running Queries</h2>
+</div>
+<blockquote><pre>
+int sqlite3_get_table(
+ sqlite3 *db, /* An open database */
+ const char *zSql, /* SQL to be evaluated */
+ char ***pazResult, /* Results of the query */
+ int *pnRow, /* Number of result rows written here */
+ int *pnColumn, /* Number of result columns written here */
+ char **pzErrmsg /* Error msg written here */
+);
+void sqlite3_free_table(char **result);
+</pre></blockquote>
+<p>
+This is a legacy interface that is preserved for backwards compatibility.
+Use of this interface is not recommended.</p>
+
+<p>Definition: A <b>result table</b> is memory data structure created by the
+<a href="../c3ref/free_table.html">sqlite3_get_table()</a> interface. A result table records the
+complete query results from one or more queries.</p>
+
+<p>The table conceptually has a number of rows and columns. But
+these numbers are not part of the result table itself. These
+numbers are obtained separately. Let N be the number of rows
+and M be the number of columns.</p>
+
+<p>A result table is an array of pointers to zero-terminated UTF-8 strings.
+There are (N+1)*M elements in the array. The first M pointers point
+to zero-terminated strings that contain the names of the columns.
+The remaining entries all point to query results. NULL values result
+in NULL pointers. All other values are in their UTF-8 zero-terminated
+string representation as returned by <a href="../c3ref/column_blob.html">sqlite3_column_text()</a>.</p>
+
+<p>A result table might consist of one or more memory allocations.
+It is not safe to pass a result table directly to <a href="../c3ref/free.html">sqlite3_free()</a>.
+A result table should be deallocated using <a href="../c3ref/free_table.html">sqlite3_free_table()</a>.</p>
+
+<p>As an example of the result table format, suppose a query result
+is as follows:</p>
+
+<p><blockquote><pre>
+Name | Age
+-----------------------
+Alice | 43
+Bob | 28
+Cindy | 21
+</pre></blockquote></p>
+
+<p>There are two columns (M==2) and three rows (N==3). Thus the
+result table has 8 entries. Suppose the result table is stored
+in an array named azResult. Then azResult holds this content:</p>
+
+<p><blockquote><pre>
+azResult&#91;0] = "Name";
+azResult&#91;1] = "Age";
+azResult&#91;2] = "Alice";
+azResult&#91;3] = "43";
+azResult&#91;4] = "Bob";
+azResult&#91;5] = "28";
+azResult&#91;6] = "Cindy";
+azResult&#91;7] = "21";
+</pre></blockquote></p>
+
+<p>The sqlite3_get_table() function evaluates one or more
+semicolon-separated SQL statements in the zero-terminated UTF-8
+string of its 2nd parameter and returns a result table to the
+pointer given in its 3rd parameter.</p>
+
+<p>After the application has finished with the result from sqlite3_get_table(),
+it must pass the result table pointer to sqlite3_free_table() in order to
+release the memory that was malloced. Because of the way the
+<a href="../c3ref/free.html">sqlite3_malloc()</a> happens within sqlite3_get_table(), the calling
+function must not try to call <a href="../c3ref/free.html">sqlite3_free()</a> directly. Only
+<a href="../c3ref/free_table.html">sqlite3_free_table()</a> is able to release the memory properly and safely.</p>
+
+<p>The sqlite3_get_table() interface is implemented as a wrapper around
+<a href="../c3ref/exec.html">sqlite3_exec()</a>. The sqlite3_get_table() routine does not have access
+to any internal data structures of SQLite. It uses only the public
+interface defined here. As a consequence, errors that occur in the
+wrapper layer outside of the internal <a href="../c3ref/exec.html">sqlite3_exec()</a> call are not
+reflected in subsequent calls to <a href="../c3ref/errcode.html">sqlite3_errcode()</a> or
+<a href="../c3ref/errcode.html">sqlite3_errmsg()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/funclist.html b/www/c3ref/funclist.html
new file mode 100644
index 0000000..ac1cc95
--- /dev/null
+++ b/www/c3ref/funclist.html
@@ -0,0 +1,428 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>List Of SQLite Functions</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+
+<h2>List Of Functions:</h2>
+<p>Note: Functions marked with "<small><i>(exp)</i></small>"
+are <a href="../c3ref/experimental.html">experimental</a> and functions whose names are
+<s>struck through</s> are <a href="../c3ref/experimental.html">deprecated</a>.</p>
+<!-- number of functions: 285 -->
+<!-- number of deprecated functions: 7 -->
+<!-- number of experimental functions: 0 -->
+<div class='columns' style='columns: 15em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../c3ref/aggregate_context.html'>sqlite3_aggregate_context</a></li>
+<li><s>sqlite3_aggregate_count</s></li>
+<li><a href='../c3ref/auto_extension.html'>sqlite3_auto_extension</a></li>
+<li><a href='../c3ref/autovacuum_pages.html'>sqlite3_autovacuum_pages</a></li>
+<li><a href='../c3ref/backup_finish.html#sqlite3backupfinish'>sqlite3_backup_finish</a></li>
+<li><a href='../c3ref/backup_finish.html#sqlite3backupinit'>sqlite3_backup_init</a></li>
+<li><a href='../c3ref/backup_finish.html#sqlite3backuppagecount'>sqlite3_backup_pagecount</a></li>
+<li><a href='../c3ref/backup_finish.html#sqlite3backupremaining'>sqlite3_backup_remaining</a></li>
+<li><a href='../c3ref/backup_finish.html#sqlite3backupstep'>sqlite3_backup_step</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_blob</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_blob64</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_double</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_int</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_int64</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_null</a></li>
+<li><a href='../c3ref/bind_parameter_count.html'>sqlite3_bind_parameter_count</a></li>
+<li><a href='../c3ref/bind_parameter_index.html'>sqlite3_bind_parameter_index</a></li>
+<li><a href='../c3ref/bind_parameter_name.html'>sqlite3_bind_parameter_name</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_pointer</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_text</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_text16</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_text64</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_value</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_zeroblob</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_zeroblob64</a></li>
+<li><a href='../c3ref/blob_bytes.html'>sqlite3_blob_bytes</a></li>
+<li><a href='../c3ref/blob_close.html'>sqlite3_blob_close</a></li>
+<li><a href='../c3ref/blob_open.html'>sqlite3_blob_open</a></li>
+<li><a href='../c3ref/blob_read.html'>sqlite3_blob_read</a></li>
+<li><a href='../c3ref/blob_reopen.html'>sqlite3_blob_reopen</a></li>
+<li><a href='../c3ref/blob_write.html'>sqlite3_blob_write</a></li>
+<li><a href='../c3ref/busy_handler.html'>sqlite3_busy_handler</a></li>
+<li><a href='../c3ref/busy_timeout.html'>sqlite3_busy_timeout</a></li>
+<li><a href='../c3ref/cancel_auto_extension.html'>sqlite3_cancel_auto_extension</a></li>
+<li><a href='../c3ref/changes.html'>sqlite3_changes</a></li>
+<li><a href='../c3ref/changes.html'>sqlite3_changes64</a></li>
+<li><a href='../c3ref/clear_bindings.html'>sqlite3_clear_bindings</a></li>
+<li><a href='../c3ref/close.html'>sqlite3_close</a></li>
+<li><a href='../c3ref/close.html'>sqlite3_close_v2</a></li>
+<li><a href='../c3ref/collation_needed.html'>sqlite3_collation_needed</a></li>
+<li><a href='../c3ref/collation_needed.html'>sqlite3_collation_needed16</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_blob</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_bytes</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_bytes16</a></li>
+<li><a href='../c3ref/column_count.html'>sqlite3_column_count</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_database_name</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_database_name16</a></li>
+<li><a href='../c3ref/column_decltype.html'>sqlite3_column_decltype</a></li>
+<li><a href='../c3ref/column_decltype.html'>sqlite3_column_decltype16</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_double</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_int</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_int64</a></li>
+<li><a href='../c3ref/column_name.html'>sqlite3_column_name</a></li>
+<li><a href='../c3ref/column_name.html'>sqlite3_column_name16</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_origin_name</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_origin_name16</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_table_name</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_table_name16</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_text</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_text16</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_type</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_value</a></li>
+<li><a href='../c3ref/commit_hook.html'>sqlite3_commit_hook</a></li>
+<li><a href='../c3ref/compileoption_get.html'>sqlite3_compileoption_get</a></li>
+<li><a href='../c3ref/compileoption_get.html'>sqlite3_compileoption_used</a></li>
+<li><a href='../c3ref/complete.html'>sqlite3_complete</a></li>
+<li><a href='../c3ref/complete.html'>sqlite3_complete16</a></li>
+<li><a href='../c3ref/config.html'>sqlite3_config</a></li>
+<li><a href='../c3ref/context_db_handle.html'>sqlite3_context_db_handle</a></li>
+<li><a href='../c3ref/create_collation.html'>sqlite3_create_collation</a></li>
+<li><a href='../c3ref/create_collation.html'>sqlite3_create_collation16</a></li>
+<li><a href='../c3ref/create_collation.html'>sqlite3_create_collation_v2</a></li>
+<li><a href='../c3ref/create_filename.html'>sqlite3_create_filename</a></li>
+<li><a href='../c3ref/create_function.html'>sqlite3_create_function</a></li>
+<li><a href='../c3ref/create_function.html'>sqlite3_create_function16</a></li>
+<li><a href='../c3ref/create_function.html'>sqlite3_create_function_v2</a></li>
+<li><a href='../c3ref/create_module.html'>sqlite3_create_module</a></li>
+<li><a href='../c3ref/create_module.html'>sqlite3_create_module_v2</a></li>
+<li><a href='../c3ref/create_function.html'>sqlite3_create_window_function</a></li>
+<li><a href='../c3ref/data_count.html'>sqlite3_data_count</a></li>
+<li><a href='../c3ref/database_file_object.html'>sqlite3_database_file_object</a></li>
+<li><a href='../c3ref/db_cacheflush.html'>sqlite3_db_cacheflush</a></li>
+<li><a href='../c3ref/db_config.html'>sqlite3_db_config</a></li>
+<li><a href='../c3ref/db_filename.html'>sqlite3_db_filename</a></li>
+<li><a href='../c3ref/db_handle.html'>sqlite3_db_handle</a></li>
+<li><a href='../c3ref/db_mutex.html'>sqlite3_db_mutex</a></li>
+<li><a href='../c3ref/db_name.html'>sqlite3_db_name</a></li>
+<li><a href='../c3ref/db_readonly.html'>sqlite3_db_readonly</a></li>
+<li><a href='../c3ref/db_release_memory.html'>sqlite3_db_release_memory</a></li>
+<li><a href='../c3ref/db_status.html'>sqlite3_db_status</a></li>
+<li><a href='../c3ref/declare_vtab.html'>sqlite3_declare_vtab</a></li>
+<li><a href='../c3ref/deserialize.html'>sqlite3_deserialize</a></li>
+<li><a href='../c3ref/drop_modules.html'>sqlite3_drop_modules</a></li>
+<li><a href='../c3ref/enable_load_extension.html'>sqlite3_enable_load_extension</a></li>
+<li><a href='../c3ref/enable_shared_cache.html'>sqlite3_enable_shared_cache</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_errcode</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_errmsg</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_errmsg16</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_error_offset</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_errstr</a></li>
+<li><a href='../c3ref/exec.html'>sqlite3_exec</a></li>
+<li><a href='../c3ref/expanded_sql.html'>sqlite3_expanded_sql</a></li>
+<li><s>sqlite3_expired</s></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_extended_errcode</a></li>
+<li><a href='../c3ref/extended_result_codes.html'>sqlite3_extended_result_codes</a></li>
+<li><a href='../c3ref/file_control.html'>sqlite3_file_control</a></li>
+<li><a href='../c3ref/filename_database.html'>sqlite3_filename_database</a></li>
+<li><a href='../c3ref/filename_database.html'>sqlite3_filename_journal</a></li>
+<li><a href='../c3ref/filename_database.html'>sqlite3_filename_wal</a></li>
+<li><a href='../c3ref/finalize.html'>sqlite3_finalize</a></li>
+<li><a href='../c3ref/free.html'>sqlite3_free</a></li>
+<li><a href='../c3ref/create_filename.html'>sqlite3_free_filename</a></li>
+<li><a href='../c3ref/free_table.html'>sqlite3_free_table</a></li>
+<li><a href='../c3ref/get_autocommit.html'>sqlite3_get_autocommit</a></li>
+<li><a href='../c3ref/get_auxdata.html'>sqlite3_get_auxdata</a></li>
+<li><a href='../c3ref/free_table.html'>sqlite3_get_table</a></li>
+<li><s>sqlite3_global_recover</s></li>
+<li><a href='../c3ref/hard_heap_limit64.html'>sqlite3_hard_heap_limit64</a></li>
+<li><a href='../c3ref/initialize.html'>sqlite3_initialize</a></li>
+<li><a href='../c3ref/interrupt.html'>sqlite3_interrupt</a></li>
+<li><a href='../c3ref/keyword_check.html'>sqlite3_keyword_check</a></li>
+<li><a href='../c3ref/keyword_check.html'>sqlite3_keyword_count</a></li>
+<li><a href='../c3ref/keyword_check.html'>sqlite3_keyword_name</a></li>
+<li><a href='../c3ref/last_insert_rowid.html'>sqlite3_last_insert_rowid</a></li>
+<li><a href='../c3ref/libversion.html'>sqlite3_libversion</a></li>
+<li><a href='../c3ref/libversion.html'>sqlite3_libversion_number</a></li>
+<li><a href='../c3ref/limit.html'>sqlite3_limit</a></li>
+<li><a href='../c3ref/load_extension.html'>sqlite3_load_extension</a></li>
+<li><a href='../c3ref/log.html'>sqlite3_log</a></li>
+<li><a href='../c3ref/free.html'>sqlite3_malloc</a></li>
+<li><a href='../c3ref/free.html'>sqlite3_malloc64</a></li>
+<li><s>sqlite3_memory_alarm</s></li>
+<li><a href='../c3ref/memory_highwater.html'>sqlite3_memory_highwater</a></li>
+<li><a href='../c3ref/memory_highwater.html'>sqlite3_memory_used</a></li>
+<li><a href='../c3ref/mprintf.html'>sqlite3_mprintf</a></li>
+<li><a href='../c3ref/free.html'>sqlite3_msize</a></li>
+<li><a href='../c3ref/mutex_alloc.html'>sqlite3_mutex_alloc</a></li>
+<li><a href='../c3ref/mutex_alloc.html'>sqlite3_mutex_enter</a></li>
+<li><a href='../c3ref/mutex_alloc.html'>sqlite3_mutex_free</a></li>
+<li><a href='../c3ref/mutex_held.html'>sqlite3_mutex_held</a></li>
+<li><a href='../c3ref/mutex_alloc.html'>sqlite3_mutex_leave</a></li>
+<li><a href='../c3ref/mutex_held.html'>sqlite3_mutex_notheld</a></li>
+<li><a href='../c3ref/mutex_alloc.html'>sqlite3_mutex_try</a></li>
+<li><a href='../c3ref/next_stmt.html'>sqlite3_next_stmt</a></li>
+<li><a href='../c3ref/expanded_sql.html'>sqlite3_normalized_sql</a></li>
+<li><a href='../c3ref/open.html'>sqlite3_open</a></li>
+<li><a href='../c3ref/open.html'>sqlite3_open16</a></li>
+<li><a href='../c3ref/open.html'>sqlite3_open_v2</a></li>
+<li><a href='../c3ref/initialize.html'>sqlite3_os_end</a></li>
+<li><a href='../c3ref/initialize.html'>sqlite3_os_init</a></li>
+<li><a href='../c3ref/overload_function.html'>sqlite3_overload_function</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare16</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare16_v2</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare16_v3</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare_v2</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare_v3</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_blobwrite</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_count</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_depth</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_hook</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_new</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_old</a></li>
+<li><a href='../c3ref/profile.html'>sqlite3_profile</a></li>
+<li><a href='../c3ref/progress_handler.html'>sqlite3_progress_handler</a></li>
+<li><a href='../c3ref/randomness.html'>sqlite3_randomness</a></li>
+<li><a href='../c3ref/free.html'>sqlite3_realloc</a></li>
+<li><a href='../c3ref/free.html'>sqlite3_realloc64</a></li>
+<li><a href='../c3ref/release_memory.html'>sqlite3_release_memory</a></li>
+<li><a href='../c3ref/reset.html'>sqlite3_reset</a></li>
+<li><a href='../c3ref/reset_auto_extension.html'>sqlite3_reset_auto_extension</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_blob</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_blob64</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_double</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_error</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_error16</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_error_code</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_error_nomem</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_error_toobig</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_int</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_int64</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_null</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_pointer</a></li>
+<li><a href='../c3ref/result_subtype.html'>sqlite3_result_subtype</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_text</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_text16</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_text16be</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_text16le</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_text64</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_value</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_zeroblob</a></li>
+<li><a href='../c3ref/result_blob.html'>sqlite3_result_zeroblob64</a></li>
+<li><a href='../c3ref/commit_hook.html'>sqlite3_rollback_hook</a></li>
+<li><a href='../c3ref/serialize.html'>sqlite3_serialize</a></li>
+<li><a href='../c3ref/set_authorizer.html'>sqlite3_set_authorizer</a></li>
+<li><a href='../c3ref/get_auxdata.html'>sqlite3_set_auxdata</a></li>
+<li><a href='../c3ref/set_last_insert_rowid.html'>sqlite3_set_last_insert_rowid</a></li>
+<li><a href='../c3ref/initialize.html'>sqlite3_shutdown</a></li>
+<li><a href='../c3ref/sleep.html'>sqlite3_sleep</a></li>
+<li><a href='../c3ref/snapshot_cmp.html'>sqlite3_snapshot_cmp</a></li>
+<li><a href='../c3ref/snapshot_free.html'>sqlite3_snapshot_free</a></li>
+<li><a href='../c3ref/snapshot_get.html'>sqlite3_snapshot_get</a></li>
+<li><a href='../c3ref/snapshot_open.html'>sqlite3_snapshot_open</a></li>
+<li><a href='../c3ref/snapshot_recover.html'>sqlite3_snapshot_recover</a></li>
+<li><a href='../c3ref/mprintf.html'>sqlite3_snprintf</a></li>
+<li><s>sqlite3_soft_heap_limit</s></li>
+<li><a href='../c3ref/hard_heap_limit64.html'>sqlite3_soft_heap_limit64</a></li>
+<li><a href='../c3ref/libversion.html'>sqlite3_sourceid</a></li>
+<li><a href='../c3ref/expanded_sql.html'>sqlite3_sql</a></li>
+<li><a href='../c3ref/status.html'>sqlite3_status</a></li>
+<li><a href='../c3ref/status.html'>sqlite3_status64</a></li>
+<li><a href='../c3ref/step.html'>sqlite3_step</a></li>
+<li><a href='../c3ref/stmt_busy.html'>sqlite3_stmt_busy</a></li>
+<li><a href='../c3ref/stmt_isexplain.html'>sqlite3_stmt_isexplain</a></li>
+<li><a href='../c3ref/stmt_readonly.html'>sqlite3_stmt_readonly</a></li>
+<li><a href='../c3ref/stmt_scanstatus.html'>sqlite3_stmt_scanstatus</a></li>
+<li><a href='../c3ref/stmt_scanstatus_reset.html'>sqlite3_stmt_scanstatus_reset</a></li>
+<li><a href='../c3ref/stmt_status.html'>sqlite3_stmt_status</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_append</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_appendall</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_appendchar</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_appendf</a></li>
+<li><a href='../c3ref/str_errcode.html'>sqlite3_str_errcode</a></li>
+<li><a href='../c3ref/str_finish.html'>sqlite3_str_finish</a></li>
+<li><a href='../c3ref/str_errcode.html'>sqlite3_str_length</a></li>
+<li><a href='../c3ref/str_new.html'>sqlite3_str_new</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_reset</a></li>
+<li><a href='../c3ref/str_errcode.html'>sqlite3_str_value</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_vappendf</a></li>
+<li><a href='../c3ref/strglob.html'>sqlite3_strglob</a></li>
+<li><a href='../c3ref/stricmp.html'>sqlite3_stricmp</a></li>
+<li><a href='../c3ref/strlike.html'>sqlite3_strlike</a></li>
+<li><a href='../c3ref/stricmp.html'>sqlite3_strnicmp</a></li>
+<li><a href='../c3ref/system_errno.html'>sqlite3_system_errno</a></li>
+<li><a href='../c3ref/table_column_metadata.html'>sqlite3_table_column_metadata</a></li>
+<li><a href='../c3ref/test_control.html'>sqlite3_test_control</a></li>
+<li><s>sqlite3_thread_cleanup</s></li>
+<li><a href='../c3ref/threadsafe.html'>sqlite3_threadsafe</a></li>
+<li><a href='../c3ref/total_changes.html'>sqlite3_total_changes</a></li>
+<li><a href='../c3ref/total_changes.html'>sqlite3_total_changes64</a></li>
+<li><a href='../c3ref/profile.html'>sqlite3_trace</a></li>
+<li><a href='../c3ref/trace_v2.html'>sqlite3_trace_v2</a></li>
+<li><s>sqlite3_transfer_bindings</s></li>
+<li><a href='../c3ref/txn_state.html'>sqlite3_txn_state</a></li>
+<li><a href='../c3ref/unlock_notify.html'>sqlite3_unlock_notify</a></li>
+<li><a href='../c3ref/update_hook.html'>sqlite3_update_hook</a></li>
+<li><a href='../c3ref/uri_boolean.html'>sqlite3_uri_boolean</a></li>
+<li><a href='../c3ref/uri_boolean.html'>sqlite3_uri_int64</a></li>
+<li><a href='../c3ref/uri_boolean.html'>sqlite3_uri_key</a></li>
+<li><a href='../c3ref/uri_boolean.html'>sqlite3_uri_parameter</a></li>
+<li><a href='../c3ref/user_data.html'>sqlite3_user_data</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_blob</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_bytes</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_bytes16</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_double</a></li>
+<li><a href='../c3ref/value_dup.html'>sqlite3_value_dup</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_encoding</a></li>
+<li><a href='../c3ref/value_dup.html'>sqlite3_value_free</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_frombind</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_int</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_int64</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_nochange</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_numeric_type</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_pointer</a></li>
+<li><a href='../c3ref/value_subtype.html'>sqlite3_value_subtype</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_text</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_text16</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_text16be</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_text16le</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_type</a></li>
+<li><a href='../c3ref/libversion.html'>sqlite3_version</a></li>
+<li><a href='../c3ref/vfs_find.html'>sqlite3_vfs_find</a></li>
+<li><a href='../c3ref/vfs_find.html'>sqlite3_vfs_register</a></li>
+<li><a href='../c3ref/vfs_find.html'>sqlite3_vfs_unregister</a></li>
+<li><a href='../c3ref/mprintf.html'>sqlite3_vmprintf</a></li>
+<li><a href='../c3ref/mprintf.html'>sqlite3_vsnprintf</a></li>
+<li><a href='../c3ref/vtab_collation.html'>sqlite3_vtab_collation</a></li>
+<li><a href='../c3ref/vtab_config.html'>sqlite3_vtab_config</a></li>
+<li><a href='../c3ref/vtab_distinct.html'>sqlite3_vtab_distinct</a></li>
+<li><a href='../c3ref/vtab_in.html'>sqlite3_vtab_in</a></li>
+<li><a href='../c3ref/vtab_in_first.html'>sqlite3_vtab_in_first</a></li>
+<li><a href='../c3ref/vtab_in_first.html'>sqlite3_vtab_in_next</a></li>
+<li><a href='../c3ref/vtab_nochange.html'>sqlite3_vtab_nochange</a></li>
+<li><a href='../c3ref/vtab_on_conflict.html'>sqlite3_vtab_on_conflict</a></li>
+<li><a href='../c3ref/vtab_rhs_value.html'>sqlite3_vtab_rhs_value</a></li>
+<li><a href='../c3ref/wal_autocheckpoint.html'>sqlite3_wal_autocheckpoint</a></li>
+<li><a href='../c3ref/wal_checkpoint.html'>sqlite3_wal_checkpoint</a></li>
+<li><a href='../c3ref/wal_checkpoint_v2.html'>sqlite3_wal_checkpoint_v2</a></li>
+<li><a href='../c3ref/wal_hook.html'>sqlite3_wal_hook</a></li>
+<li><a href='../c3ref/win32_set_directory.html'>sqlite3_win32_set_directory</a></li>
+<li><a href='../c3ref/win32_set_directory.html'>sqlite3_win32_set_directory16</a></li>
+<li><a href='../c3ref/win32_set_directory.html'>sqlite3_win32_set_directory8</a></li>
+</ul>
+</div>
+<p>Other lists:
+<a href="constlist.html">Constants</a> and
+<a href="objlist.html">Objects</a> and
+<a href="../rescode.html">Result Codes</a></p>
+
+
diff --git a/www/c3ref/get_autocommit.html b/www/c3ref/get_autocommit.html
new file mode 100644
index 0000000..a132a10
--- /dev/null
+++ b/www/c3ref/get_autocommit.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Test For Auto-Commit Mode</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {autocommit mode} sqlite3_get_autocommit -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Test For Auto-Commit Mode</h2>
+</div>
+<blockquote><pre>
+int sqlite3_get_autocommit(sqlite3*);
+</pre></blockquote>
+<p>
+The sqlite3_get_autocommit() interface returns non-zero or
+zero if the given database connection is or is not in autocommit mode,
+respectively. Autocommit mode is on by default.
+Autocommit mode is disabled by a <a href="../lang_transaction.html">BEGIN</a> statement.
+Autocommit mode is re-enabled by a <a href="../lang_transaction.html">COMMIT</a> or <a href="../lang_transaction.html">ROLLBACK</a>.</p>
+
+<p>If certain kinds of errors occur on a statement within a multi-statement
+transaction (errors including <a href="../rescode.html#full">SQLITE_FULL</a>, <a href="../rescode.html#ioerr">SQLITE_IOERR</a>,
+<a href="../rescode.html#nomem">SQLITE_NOMEM</a>, <a href="../rescode.html#busy">SQLITE_BUSY</a>, and <a href="../rescode.html#interrupt">SQLITE_INTERRUPT</a>) then the
+transaction might be rolled back automatically. The only way to
+find out whether SQLite automatically rolled back the transaction after
+an error is to use this function.</p>
+
+<p>If another thread changes the autocommit status of the database
+connection while this routine is running, then the return value
+is undefined.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/get_auxdata.html b/www/c3ref/get_auxdata.html
new file mode 100644
index 0000000..4a7dd5f
--- /dev/null
+++ b/www/c3ref/get_auxdata.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Function Auxiliary Data</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_get_auxdata sqlite3_set_auxdata -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Function Auxiliary Data</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_get_auxdata(sqlite3_context*, int N);
+void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*));
+</pre></blockquote>
+<p>
+These functions may be used by (non-aggregate) SQL functions to
+associate metadata with argument values. If the same value is passed to
+multiple invocations of the same SQL function during query execution, under
+some circumstances the associated metadata may be preserved. An example
+of where this might be useful is in a regular-expression matching
+function. The compiled version of the regular expression can be stored as
+metadata associated with the pattern string.
+Then as long as the pattern string remains the same,
+the compiled regular expression can be reused on multiple
+invocations of the same function.</p>
+
+<p>The sqlite3_get_auxdata(C,N) interface returns a pointer to the metadata
+associated by the sqlite3_set_auxdata(C,N,P,X) function with the Nth argument
+value to the application-defined function. N is zero for the left-most
+function argument. If there is no metadata
+associated with the function argument, the sqlite3_get_auxdata(C,N) interface
+returns a NULL pointer.</p>
+
+<p>The sqlite3_set_auxdata(C,N,P,X) interface saves P as metadata for the N-th
+argument of the application-defined function. Subsequent
+calls to sqlite3_get_auxdata(C,N) return P from the most recent
+sqlite3_set_auxdata(C,N,P,X) call if the metadata is still valid or
+NULL if the metadata has been discarded.
+After each call to sqlite3_set_auxdata(C,N,P,X) where X is not NULL,
+SQLite will invoke the destructor function X with parameter P exactly
+once, when the metadata is discarded.
+SQLite is free to discard the metadata at any time, including: <ul>
+<li> when the corresponding function parameter changes, or
+<li> when <a href="../c3ref/reset.html">sqlite3_reset()</a> or <a href="../c3ref/finalize.html">sqlite3_finalize()</a> is called for the
+SQL statement, or
+<li> when sqlite3_set_auxdata() is invoked again on the same
+parameter, or
+<li> during the original sqlite3_set_auxdata() call when a memory
+allocation error occurs. </ul></p>
+
+<p>Note the last bullet in particular. The destructor X in
+sqlite3_set_auxdata(C,N,P,X) might be called immediately, before the
+sqlite3_set_auxdata() interface even returns. Hence sqlite3_set_auxdata()
+should be called near the end of the function implementation and the
+function implementation should not make any use of P after
+sqlite3_set_auxdata() has been called.</p>
+
+<p>In practice, metadata is preserved between function calls for
+function parameters that are compile-time constants, including literal
+values and <a href="../lang_expr.html#varparam">parameters</a> and expressions composed from the same.</p>
+
+<p>The value of the N parameter to these interfaces should be non-negative.
+Future enhancements may make use of negative N values to define new
+kinds of function caching behavior.</p>
+
+<p>These routines must be called from the same thread in which
+the SQL function is running.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/hard_heap_limit64.html b/www/c3ref/hard_heap_limit64.html
new file mode 100644
index 0000000..7b5a320
--- /dev/null
+++ b/www/c3ref/hard_heap_limit64.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Impose A Limit On Heap Size</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_hard_heap_limit64 sqlite3_soft_heap_limit64 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Impose A Limit On Heap Size</h2>
+</div>
+<blockquote><pre>
+sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
+sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N);
+</pre></blockquote>
+<p>
+These interfaces impose limits on the amount of heap memory that will be
+by all database connections within a single process.</p>
+
+<p>The sqlite3_soft_heap_limit64() interface sets and/or queries the
+soft limit on the amount of heap memory that may be allocated by SQLite.
+SQLite strives to keep heap memory utilization below the soft heap
+limit by reducing the number of pages held in the page cache
+as heap memory usages approaches the limit.
+The soft heap limit is "soft" because even though SQLite strives to stay
+below the limit, it will exceed the limit rather than generate
+an <a href="../rescode.html#nomem">SQLITE_NOMEM</a> error. In other words, the soft heap limit
+is advisory only.</p>
+
+<p>The sqlite3_hard_heap_limit64(N) interface sets a hard upper bound of
+N bytes on the amount of memory that will be allocated. The
+sqlite3_hard_heap_limit64(N) interface is similar to
+sqlite3_soft_heap_limit64(N) except that memory allocations will fail
+when the hard heap limit is reached.</p>
+
+<p>The return value from both sqlite3_soft_heap_limit64() and
+sqlite3_hard_heap_limit64() is the size of
+the heap limit prior to the call, or negative in the case of an
+error. If the argument N is negative
+then no change is made to the heap limit. Hence, the current
+size of heap limits can be determined by invoking
+sqlite3_soft_heap_limit64(-1) or sqlite3_hard_heap_limit(-1).</p>
+
+<p>Setting the heap limits to zero disables the heap limiter mechanism.</p>
+
+<p>The soft heap limit may not be greater than the hard heap limit.
+If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N)
+is invoked with a value of N that is greater than the hard heap limit,
+the soft heap limit is set to the value of the hard heap limit.
+The soft heap limit is automatically enabled whenever the hard heap
+limit is enabled. When sqlite3_hard_heap_limit64(N) is invoked and
+the soft heap limit is outside the range of 1..N, then the soft heap
+limit is set to N. Invoking sqlite3_soft_heap_limit64(0) when the
+hard heap limit is enabled makes the soft heap limit equal to the
+hard heap limit.</p>
+
+<p>The memory allocation limits can also be adjusted using
+<a href="../pragma.html#pragma_soft_heap_limit">PRAGMA soft_heap_limit</a> and <a href="../pragma.html#pragma_hard_heap_limit">PRAGMA hard_heap_limit</a>.</p>
+
+<p>The heap limits are not enforced in the current implementation
+if one or more of following conditions are true:</p>
+
+<p><ul>
+<li> The limit value is set to zero.
+<li> Memory accounting is disabled using a combination of the
+<a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a>,...) start-time option and
+the <a href="../compile.html#default_memstatus">SQLITE_DEFAULT_MEMSTATUS</a> compile-time option.
+<li> An alternative page cache implementation is specified using
+<a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a>,...).
+<li> The page cache allocates from its own memory pool supplied
+by <a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>,...) rather than
+from the heap.
+</ul></p>
+
+<p>The circumstances under which SQLite will enforce the heap limits may
+changes in future releases of SQLite.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/index_info.html b/www/c3ref/index_info.html
new file mode 100644
index 0000000..0f684b2
--- /dev/null
+++ b/www/c3ref/index_info.html
@@ -0,0 +1,262 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Virtual Table Indexing Information</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_index_info -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Virtual Table Indexing Information</h2>
+</div>
+<blockquote><pre>
+struct sqlite3_index_info {
+ /* Inputs */
+ int nConstraint; /* Number of entries in aConstraint */
+ struct sqlite3_index_constraint {
+ int iColumn; /* Column constrained. -1 for ROWID */
+ unsigned char op; /* Constraint operator */
+ unsigned char usable; /* True if this constraint is usable */
+ int iTermOffset; /* Used internally - xBestIndex should ignore */
+ } *aConstraint; /* Table of WHERE clause constraints */
+ int nOrderBy; /* Number of terms in the ORDER BY clause */
+ struct sqlite3_index_orderby {
+ int iColumn; /* Column number */
+ unsigned char desc; /* True for DESC. False for ASC. */
+ } *aOrderBy; /* The ORDER BY clause */
+ /* Outputs */
+ struct sqlite3_index_constraint_usage {
+ int argvIndex; /* if &gt;0, constraint is part of argv to xFilter */
+ unsigned char omit; /* Do not code a test for this constraint */
+ } *aConstraintUsage;
+ int idxNum; /* Number used to identify the index */
+ char *idxStr; /* String, possibly obtained from sqlite3_malloc */
+ int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */
+ int orderByConsumed; /* True if output is already ordered */
+ double estimatedCost; /* Estimated cost of using this index */
+ /* Fields below are only available in SQLite 3.8.2 and later */
+ sqlite3_int64 estimatedRows; /* Estimated number of rows returned */
+ /* Fields below are only available in SQLite 3.9.0 and later */
+ int idxFlags; /* Mask of SQLITE_INDEX_SCAN_* flags */
+ /* Fields below are only available in SQLite 3.10.0 and later */
+ sqlite3_uint64 colUsed; /* Input: Mask of columns used by statement */
+};
+</pre></blockquote>
+<p>
+The sqlite3_index_info structure and its substructures is used as part
+of the <a href="../vtab.html">virtual table</a> interface to
+pass information into and receive the reply from the <a href="../vtab.html#xbestindex">xBestIndex</a>
+method of a <a href="../c3ref/module.html">virtual table module</a>. The fields under **Inputs** are the
+inputs to xBestIndex and are read-only. xBestIndex inserts its
+results into the **Outputs** fields.</p>
+
+<p>The aConstraint[] array records WHERE clause constraints of the form:</p>
+
+<p><blockquote>column OP expr</blockquote></p>
+
+<p>where OP is =, &lt;, &lt;=, &gt;, or &gt;=. The particular operator is
+stored in aConstraint[].op using one of the
+<a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_ values</a>.
+The index of the column is stored in
+aConstraint[].iColumn. aConstraint[].usable is TRUE if the
+expr on the right-hand side can be evaluated (and thus the constraint
+is usable) and false if it cannot.</p>
+
+<p>The optimizer automatically inverts terms of the form "expr OP column"
+and makes other simplifications to the WHERE clause in an attempt to
+get as many WHERE clause terms into the form shown above as possible.
+The aConstraint[] array only reports WHERE clause terms that are
+relevant to the particular virtual table being queried.</p>
+
+<p>Information about the ORDER BY clause is stored in aOrderBy[].
+Each term of aOrderBy records a column of the ORDER BY clause.</p>
+
+<p>The colUsed field indicates which columns of the virtual table may be
+required by the current scan. Virtual table columns are numbered from
+zero in the order in which they appear within the CREATE TABLE statement
+passed to sqlite3_declare_vtab(). For the first 63 columns (columns 0-62),
+the corresponding bit is set within the colUsed mask if the column may be
+required by SQLite. If the table has at least 64 columns and any column
+to the right of the first 63 is required, then bit 63 of colUsed is also
+set. In other words, column iCol may be required if the expression
+(colUsed & ((sqlite3_uint64)1 << (iCol>=63 ? 63 : iCol))) evaluates to
+non-zero.</p>
+
+<p>The <a href="../vtab.html#xbestindex">xBestIndex</a> method must fill aConstraintUsage[] with information
+about what parameters to pass to xFilter. If argvIndex>0 then
+the right-hand side of the corresponding aConstraint[] is evaluated
+and becomes the argvIndex-th entry in argv. If aConstraintUsage[].omit
+is true, then the constraint is assumed to be fully handled by the
+virtual table and might not be checked again by the byte code. The
+aConstraintUsage[].omit flag is an optimization hint. When the omit flag
+is left in its default setting of false, the constraint will always be
+checked separately in byte code. If the omit flag is change to true, then
+the constraint may or may not be checked in byte code. In other words,
+when the omit flag is true there is no guarantee that the constraint will
+not be checked again using byte code.</p>
+
+<p>The idxNum and idxPtr values are recorded and passed into the
+<a href="../vtab.html#xfilter">xFilter</a> method.
+<a href="../c3ref/free.html">sqlite3_free()</a> is used to free idxPtr if and only if
+needToFreeIdxPtr is true.</p>
+
+<p>The orderByConsumed means that output from <a href="../vtab.html#xfilter">xFilter</a>/<a href="../vtab.html#xnext">xNext</a> will occur in
+the correct order to satisfy the ORDER BY clause so that no separate
+sorting step is required.</p>
+
+<p>The estimatedCost value is an estimate of the cost of a particular
+strategy. A cost of N indicates that the cost of the strategy is similar
+to a linear scan of an SQLite table with N rows. A cost of log(N)
+indicates that the expense of the operation is similar to that of a
+binary search on a unique indexed field of an SQLite table with N rows.</p>
+
+<p>The estimatedRows value is an estimate of the number of rows that
+will be returned by the strategy.</p>
+
+<p>The xBestIndex method may optionally populate the idxFlags field with a
+mask of SQLITE_INDEX_SCAN_* flags. Currently there is only one such flag -
+SQLITE_INDEX_SCAN_UNIQUE. If the xBestIndex method sets this flag, SQLite
+assumes that the strategy may visit at most one row.</p>
+
+<p>Additionally, if xBestIndex sets the SQLITE_INDEX_SCAN_UNIQUE flag, then
+SQLite also assumes that if a call to the xUpdate() method is made as
+part of the same statement to delete or update a virtual table row and the
+implementation returns SQLITE_CONSTRAINT, then there is no need to rollback
+any database changes. In other words, if the xUpdate() returns
+SQLITE_CONSTRAINT, the database contents must be exactly as they were
+before xUpdate was called. By contrast, if SQLITE_INDEX_SCAN_UNIQUE is not
+set and xUpdate returns SQLITE_CONSTRAINT, any database changes made by
+the xUpdate method are automatically rolled back by SQLite.</p>
+
+<p>IMPORTANT: The estimatedRows field was added to the sqlite3_index_info
+structure for SQLite <a href="../releaselog/3_8_2.html">version 3.8.2</a> (2013-12-06).
+If a virtual table extension is
+used with an SQLite version earlier than 3.8.2, the results of attempting
+to read or write the estimatedRows field are undefined (but are likely
+to include crashing the application). The estimatedRows field should
+therefore only be used if <a href="../c3ref/libversion.html">sqlite3_libversion_number()</a> returns a
+value greater than or equal to 3008002. Similarly, the idxFlags field
+was added for <a href="../releaselog/3_9_0.html">version 3.9.0</a> (2015-10-14).
+It may therefore only be used if
+sqlite3_libversion_number() returns a value greater than or equal to
+3009000.
+</p><p>3 Methods:
+ <a href="../c3ref/vtab_collation.html">sqlite3_vtab_collation()</a>,
+<a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a>,
+<a href="../c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a></p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/initialize.html b/www/c3ref/initialize.html
new file mode 100644
index 0000000..bfeba54
--- /dev/null
+++ b/www/c3ref/initialize.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Initialize The SQLite Library</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_initialize sqlite3_os_end sqlite3_os_init sqlite3_shutdown -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Initialize The SQLite Library</h2>
+</div>
+<blockquote><pre>
+int sqlite3_initialize(void);
+int sqlite3_shutdown(void);
+int sqlite3_os_init(void);
+int sqlite3_os_end(void);
+</pre></blockquote>
+<p>
+The sqlite3_initialize() routine initializes the
+SQLite library. The sqlite3_shutdown() routine
+deallocates any resources that were allocated by sqlite3_initialize().
+These routines are designed to aid in process initialization and
+shutdown on embedded systems. Workstation applications using
+SQLite normally do not need to invoke either of these routines.</p>
+
+<p>A call to sqlite3_initialize() is an "effective" call if it is
+the first time sqlite3_initialize() is invoked during the lifetime of
+the process, or if it is the first time sqlite3_initialize() is invoked
+following a call to sqlite3_shutdown(). Only an effective call
+of sqlite3_initialize() does any initialization. All other calls
+are harmless no-ops.</p>
+
+<p>A call to sqlite3_shutdown() is an "effective" call if it is the first
+call to sqlite3_shutdown() since the last sqlite3_initialize(). Only
+an effective call to sqlite3_shutdown() does any deinitialization.
+All other valid calls to sqlite3_shutdown() are harmless no-ops.</p>
+
+<p>The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown()
+is not. The sqlite3_shutdown() interface must only be called from a
+single thread. All open <a href="../c3ref/sqlite3.html">database connections</a> must be closed and all
+other SQLite resources must be deallocated prior to invoking
+sqlite3_shutdown().</p>
+
+<p>Among other things, sqlite3_initialize() will invoke
+sqlite3_os_init(). Similarly, sqlite3_shutdown()
+will invoke sqlite3_os_end().</p>
+
+<p>The sqlite3_initialize() routine returns <a href="../rescode.html#ok">SQLITE_OK</a> on success.
+If for some reason, sqlite3_initialize() is unable to initialize
+the library (perhaps it is unable to allocate a needed resource such
+as a mutex) it returns an <a href="../rescode.html">error code</a> other than <a href="../rescode.html#ok">SQLITE_OK</a>.</p>
+
+<p>The sqlite3_initialize() routine is called internally by many other
+SQLite interfaces so that an application usually does not need to
+invoke sqlite3_initialize() directly. For example, <a href="../c3ref/open.html">sqlite3_open()</a>
+calls sqlite3_initialize() so the SQLite library will be automatically
+initialized when <a href="../c3ref/open.html">sqlite3_open()</a> is called if it has not be initialized
+already. However, if SQLite is compiled with the <a href="../compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a>
+compile-time option, then the automatic calls to sqlite3_initialize()
+are omitted and the application must call sqlite3_initialize() directly
+prior to using any other SQLite interface. For maximum portability,
+it is recommended that applications always invoke sqlite3_initialize()
+directly prior to using any other SQLite interface. Future releases
+of SQLite may require this. In other words, the behavior exhibited
+when SQLite is compiled with <a href="../compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a> might become the
+default behavior in some future release of SQLite.</p>
+
+<p>The sqlite3_os_init() routine does operating-system specific
+initialization of the SQLite library. The sqlite3_os_end()
+routine undoes the effect of sqlite3_os_init(). Typical tasks
+performed by these routines include allocation or deallocation
+of static resources, initialization of global variables,
+setting up a default <a href="../c3ref/vfs.html">sqlite3_vfs</a> module, or setting up
+a default configuration using <a href="../c3ref/config.html">sqlite3_config()</a>.</p>
+
+<p>The application should never invoke either sqlite3_os_init()
+or sqlite3_os_end() directly. The application should only invoke
+sqlite3_initialize() and sqlite3_shutdown(). The sqlite3_os_init()
+interface is called automatically by sqlite3_initialize() and
+sqlite3_os_end() is called by sqlite3_shutdown(). Appropriate
+implementations for sqlite3_os_init() and sqlite3_os_end()
+are built into SQLite when it is compiled for Unix, Windows, or OS/2.
+When <a href="../custombuild.html">built for other platforms</a>
+(using the <a href="../compile.html#os_other">SQLITE_OS_OTHER=1</a> compile-time
+option) the application must supply a suitable implementation for
+sqlite3_os_init() and sqlite3_os_end(). An application-supplied
+implementation of sqlite3_os_init() or sqlite3_os_end()
+must return <a href="../rescode.html#ok">SQLITE_OK</a> on success and some other <a href="../rescode.html">error code</a> upon
+failure.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/int64.html b/www/c3ref/int64.html
new file mode 100644
index 0000000..5c8deee
--- /dev/null
+++ b/www/c3ref/int64.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>64-Bit Integer Types</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_int64 sqlite3_uint64 sqlite_int64 sqlite_uint64 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>64-Bit Integer Types</h2>
+</div>
+<blockquote><pre>
+#ifdef SQLITE_INT64_TYPE
+ typedef SQLITE_INT64_TYPE sqlite_int64;
+# ifdef SQLITE_UINT64_TYPE
+ typedef SQLITE_UINT64_TYPE sqlite_uint64;
+# else
+ typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
+# endif
+#elif defined(_MSC_VER) || defined(__BORLANDC__)
+ typedef __int64 sqlite_int64;
+ typedef unsigned __int64 sqlite_uint64;
+#else
+ typedef long long int sqlite_int64;
+ typedef unsigned long long int sqlite_uint64;
+#endif
+typedef sqlite_int64 sqlite3_int64;
+typedef sqlite_uint64 sqlite3_uint64;
+</pre></blockquote>
+<p>
+Because there is no cross-platform way to specify 64-bit integer types
+SQLite includes typedefs for 64-bit signed and unsigned integers.</p>
+
+<p>The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions.
+The sqlite_int64 and sqlite_uint64 types are supported for backwards
+compatibility only.</p>
+
+<p>The sqlite3_int64 and sqlite_int64 types can store integer values
+between -9223372036854775808 and +9223372036854775807 inclusive. The
+sqlite3_uint64 and sqlite_uint64 types can store integer values
+between 0 and +18446744073709551615 inclusive.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/interrupt.html b/www/c3ref/interrupt.html
new file mode 100644
index 0000000..2d22cfb
--- /dev/null
+++ b/www/c3ref/interrupt.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Interrupt A Long-Running Query</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_interrupt -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Interrupt A Long-Running Query</h2>
+</div>
+<blockquote><pre>
+void sqlite3_interrupt(sqlite3*);
+</pre></blockquote>
+<p>
+This function causes any pending database operation to abort and
+return at its earliest opportunity. This routine is typically
+called in response to a user action such as pressing "Cancel"
+or Ctrl-C where the user wants a long query operation to halt
+immediately.</p>
+
+<p>It is safe to call this routine from a thread different from the
+thread that is currently running the database operation. But it
+is not safe to call this routine with a <a href="../c3ref/sqlite3.html">database connection</a> that
+is closed or might close before sqlite3_interrupt() returns.</p>
+
+<p>If an SQL operation is very nearly finished at the time when
+sqlite3_interrupt() is called, then it might not have an opportunity
+to be interrupted and might continue to completion.</p>
+
+<p>An SQL operation that is interrupted will return <a href="../rescode.html#interrupt">SQLITE_INTERRUPT</a>.
+If the interrupted SQL operation is an INSERT, UPDATE, or DELETE
+that is inside an explicit transaction, then the entire transaction
+will be rolled back automatically.</p>
+
+<p>The sqlite3_interrupt(D) call is in effect until all currently running
+SQL statements on <a href="../c3ref/sqlite3.html">database connection</a> D complete. Any new SQL statements
+that are started after the sqlite3_interrupt() call and before the
+running statement count reaches zero are interrupted as if they had been
+running prior to the sqlite3_interrupt() call. New SQL statements
+that are started after the running statement count reaches zero are
+not effected by the sqlite3_interrupt().
+A call to sqlite3_interrupt(D) that occurs when there are no running
+SQL statements is a no-op and has no effect on SQL statements
+that are started after the sqlite3_interrupt() call returns.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/intro.html b/www/c3ref/intro.html
new file mode 100644
index 0000000..46c07cc
--- /dev/null
+++ b/www/c3ref/intro.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Introduction</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1 align="center">
+C-language Interface Specification for SQLite
+</h1>
+
+<p>These pages are intended to be precise and detailed specification.
+For a tutorial introduction, see instead:
+<ul>
+<li><a href="../quickstart.html">SQLite In 5 Minutes Or Less</a> and/or
+<li>the <a href="../cintro.html">Introduction To The SQLite C/C++ Interface</a>.
+</ul>
+This same content is also available as a
+<a href="../capi3ref.html">single large HTML file</a>.
+</p>
+
+<p>The SQLite interface elements can be grouped into three categories:</p>
+
+<ol>
+<li><p><a href="objlist.html"><b>List Of Objects.</b></a>
+ This is a list of all abstract objects and datatypes used by the
+ SQLite library. There are couple dozen objects in total, but
+ the two most important objects are:
+ A database connection object <a href="../c3ref/sqlite3.html">sqlite3</a>, and the
+ prepared statement object <a href="../c3ref/stmt.html">sqlite3_stmt</a>.</p></li>
+
+<li><p><a href="constlist.html"><b>List Of Constants.</b></a>
+ This is a list of numeric constants used by SQLite and represented by
+ #defines in the sqlite3.h header file. These constants
+ are things such as numeric <a href="../rescode.html">result codes</a> from
+ various interfaces (ex: <a href="../rescode.html#ok">SQLITE_OK</a>) or flags passed
+ into functions to control behavior
+ (ex: <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READONLY</a>).</p></li>
+
+<li><p><a href="funclist.html"><b>List Of Functions.</b></a>
+ This is a list of all functions and methods operating on the
+ <a href="objlist.html">objects</a> and using and/or
+ returning <a href="constlist.html">constants</a>. There
+ are many functions, but most applications only use a handful.
+ </p></li>
+</ol>
+
+
+
diff --git a/www/c3ref/io_methods.html b/www/c3ref/io_methods.html
new file mode 100644
index 0000000..305a997
--- /dev/null
+++ b/www/c3ref/io_methods.html
@@ -0,0 +1,252 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>OS Interface File Virtual Methods Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_io_methods -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>OS Interface File Virtual Methods Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_io_methods sqlite3_io_methods;
+struct sqlite3_io_methods {
+ int iVersion;
+ int (*xClose)(sqlite3_file*);
+ int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
+ int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst);
+ int (*xTruncate)(sqlite3_file*, sqlite3_int64 size);
+ int (*xSync)(sqlite3_file*, int flags);
+ int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize);
+ int (*xLock)(sqlite3_file*, int);
+ int (*xUnlock)(sqlite3_file*, int);
+ int (*xCheckReservedLock)(sqlite3_file*, int *pResOut);
+ int (*xFileControl)(sqlite3_file*, int op, void *pArg);
+ int (*xSectorSize)(sqlite3_file*);
+ int (*xDeviceCharacteristics)(sqlite3_file*);
+ /* Methods above are valid for version 1 */
+ int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**);
+ int (*xShmLock)(sqlite3_file*, int offset, int n, int flags);
+ void (*xShmBarrier)(sqlite3_file*);
+ int (*xShmUnmap)(sqlite3_file*, int deleteFlag);
+ /* Methods above are valid for version 2 */
+ int (*xFetch)(sqlite3_file*, sqlite3_int64 iOfst, int iAmt, void **pp);
+ int (*xUnfetch)(sqlite3_file*, sqlite3_int64 iOfst, void *p);
+ /* Methods above are valid for version 3 */
+ /* Additional methods may be added in future releases */
+};
+</pre></blockquote>
+<p>
+Every file opened by the <a href="../c3ref/vfs.html#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> method populates an
+<a href="../c3ref/file.html">sqlite3_file</a> object (or, more commonly, a subclass of the
+<a href="../c3ref/file.html">sqlite3_file</a> object) with a pointer to an instance of this object.
+This object defines the methods used to perform various operations
+against the open file represented by the <a href="../c3ref/file.html">sqlite3_file</a> object.</p>
+
+<p>If the <a href="../c3ref/vfs.html#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> method sets the sqlite3_file.pMethods element
+to a non-NULL pointer, then the sqlite3_io_methods.xClose method
+may be invoked even if the <a href="../c3ref/vfs.html#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> reported that it failed. The
+only way to prevent a call to xClose following a failed <a href="../c3ref/vfs.html#sqlite3vfsxopen">sqlite3_vfs.xOpen</a>
+is for the <a href="../c3ref/vfs.html#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> to set the sqlite3_file.pMethods element
+to NULL.</p>
+
+<p>The flags argument to xSync may be one of <a href="../c3ref/c_sync_dataonly.html">SQLITE_SYNC_NORMAL</a> or
+<a href="../c3ref/c_sync_dataonly.html">SQLITE_SYNC_FULL</a>. The first choice is the normal fsync().
+The second choice is a Mac OS X style fullsync. The <a href="../c3ref/c_sync_dataonly.html">SQLITE_SYNC_DATAONLY</a>
+flag may be ORed in to indicate that only the data of the file
+and not its inode needs to be synced.</p>
+
+<p>The integer values to xLock() and xUnlock() are one of
+<ul>
+<li> <a href="../c3ref/c_lock_exclusive.html">SQLITE_LOCK_NONE</a>,
+<li> <a href="../c3ref/c_lock_exclusive.html">SQLITE_LOCK_SHARED</a>,
+<li> <a href="../c3ref/c_lock_exclusive.html">SQLITE_LOCK_RESERVED</a>,
+<li> <a href="../c3ref/c_lock_exclusive.html">SQLITE_LOCK_PENDING</a>, or
+<li> <a href="../c3ref/c_lock_exclusive.html">SQLITE_LOCK_EXCLUSIVE</a>.
+</ul>
+xLock() upgrades the database file lock. In other words, xLock() moves the
+database file lock in the direction NONE toward EXCLUSIVE. The argument to
+xLock() is always on of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
+SQLITE_LOCK_NONE. If the database file lock is already at or above the
+requested lock, then the call to xLock() is a no-op.
+xUnlock() downgrades the database file lock to either SHARED or NONE.
+to xUnlock() is a no-op.
+The xCheckReservedLock() method checks whether any database connection,
+either in this process or in some other process, is holding a RESERVED,
+PENDING, or EXCLUSIVE lock on the file. It returns true
+if such a lock exists and false otherwise.</p>
+
+<p>The xFileControl() method is a generic interface that allows custom
+VFS implementations to directly control an open file using the
+<a href="../c3ref/file_control.html">sqlite3_file_control()</a> interface. The second "op" argument is an
+integer opcode. The third argument is a generic pointer intended to
+point to a structure that may contain arguments or space in which to
+write return values. Potential uses for xFileControl() might be
+functions to enable blocking locks with timeouts, to change the
+locking strategy (for example to use dot-file locks), to inquire
+about the status of a lock, or to break stale locks. The SQLite
+core reserves all opcodes less than 100 for its own use.
+A <a href="../c3ref/c_fcntl_begin_atomic_write.html">list of opcodes</a> less than 100 is available.
+Applications that define a custom xFileControl method should use opcodes
+greater than 100 to avoid conflicts. VFS implementations should
+return <a href="../rescode.html#notfound">SQLITE_NOTFOUND</a> for file control opcodes that they do not
+recognize.</p>
+
+<p>The xSectorSize() method returns the sector size of the
+device that underlies the file. The sector size is the
+minimum write that can be performed without disturbing
+other bytes in the file. The xDeviceCharacteristics()
+method returns a bit vector describing behaviors of the
+underlying device:</p>
+
+<p><ul>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC512</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC1K</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC2K</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC4K</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC8K</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC16K</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC32K</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC64K</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_SAFE_APPEND</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_SEQUENTIAL</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_IMMUTABLE</a>
+<li> <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_BATCH_ATOMIC</a>
+</ul></p>
+
+<p>The SQLITE_IOCAP_ATOMIC property means that all writes of
+any size are atomic. The SQLITE_IOCAP_ATOMICnnn values
+mean that writes of blocks that are nnn bytes in size and
+are aligned to an address which is an integer multiple of
+nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means
+that when data is appended to a file, the data is appended
+first then the size of the file is extended, never the other
+way around. The SQLITE_IOCAP_SEQUENTIAL property means that
+information is written to disk in the same order as calls
+to xWrite().</p>
+
+<p>If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill
+in the unread portions of the buffer with zeros. A VFS that
+fails to zero-fill short reads might seem to work. However,
+failure to zero-fill short reads will eventually lead to
+database corruption.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/keyword_check.html b/www/c3ref/keyword_check.html
new file mode 100644
index 0000000..030c938
--- /dev/null
+++ b/www/c3ref/keyword_check.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQL Keyword Checking</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_keyword_check sqlite3_keyword_count sqlite3_keyword_name -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>SQL Keyword Checking</h2>
+</div>
+<blockquote><pre>
+int sqlite3_keyword_count(void);
+int sqlite3_keyword_name(int,const char**,int*);
+int sqlite3_keyword_check(const char*,int);
+</pre></blockquote>
+<p>
+These routines provide access to the set of SQL language keywords
+recognized by SQLite. Applications can uses these routines to determine
+whether or not a specific identifier needs to be escaped (for example,
+by enclosing in double-quotes) so as not to confuse the parser.</p>
+
+<p>The sqlite3_keyword_count() interface returns the number of distinct
+keywords understood by SQLite.</p>
+
+<p>The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and
+makes *Z point to that keyword expressed as UTF8 and writes the number
+of bytes in the keyword into *L. The string that *Z points to is not
+zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns
+SQLITE_OK if N is within bounds and SQLITE_ERROR if not. If either Z
+or L are NULL or invalid pointers then calls to
+sqlite3_keyword_name(N,Z,L) result in undefined behavior.</p>
+
+<p>The sqlite3_keyword_check(Z,L) interface checks to see whether or not
+the L-byte UTF8 identifier that Z points to is a keyword, returning non-zero
+if it is and zero if not.</p>
+
+<p>The parser used by SQLite is forgiving. It is often possible to use
+a keyword as an identifier as long as such use does not result in a
+parsing ambiguity. For example, the statement
+"CREATE TABLE BEGIN(REPLACE,PRAGMA,END);" is accepted by SQLite, and
+creates a new table named "BEGIN" with three columns named
+"REPLACE", "PRAGMA", and "END". Nevertheless, best practice is to avoid
+using keywords as identifiers. Common techniques used to avoid keyword
+name collisions include:
+<ul>
+<li> Put all identifier names inside double-quotes. This is the official
+SQL way to escape identifier names.
+<li> Put identifier names inside &#91;...&#93;. This is not standard SQL,
+but it is what SQL Server does and so lots of programmers use this
+technique.
+<li> Begin every identifier with the letter "Z" as no SQL keywords start
+with "Z".
+<li> Include a digit somewhere in every identifier name.
+</ul></p>
+
+<p>Note that the number of keywords understood by SQLite can depend on
+compile-time options. For example, "VACUUM" is not a keyword if
+SQLite is compiled with the <a href="../compile.html#omit_vacuum">-DSQLITE_OMIT_VACUUM</a> option. Also,
+new keywords may be added to future releases of SQLite.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/last_insert_rowid.html b/www/c3ref/last_insert_rowid.html
new file mode 100644
index 0000000..a939f11
--- /dev/null
+++ b/www/c3ref/last_insert_rowid.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Last Insert Rowid</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_last_insert_rowid -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Last Insert Rowid</h2>
+</div>
+<blockquote><pre>
+sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
+</pre></blockquote>
+<p>
+Each entry in most SQLite tables (except for <a href="../withoutrowid.html">WITHOUT ROWID</a> tables)
+has a unique 64-bit signed
+integer key called the <a href="../lang_createtable.html#rowid">"rowid"</a>. The rowid is always available
+as an undeclared column named ROWID, OID, or _ROWID_ as long as those
+names are not also used by explicitly declared columns. If
+the table has a column of type <a href="../lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> then that column
+is another alias for the rowid.</p>
+
+<p>The sqlite3_last_insert_rowid(D) interface usually returns the <a href="../lang_createtable.html#rowid">rowid</a> of
+the most recent successful <a href="../lang_insert.html">INSERT</a> into a rowid table or <a href="../vtab.html">virtual table</a>
+on database connection D. Inserts into <a href="../withoutrowid.html">WITHOUT ROWID</a> tables are not
+recorded. If no successful <a href="../lang_insert.html">INSERT</a>s into rowid tables have ever occurred
+on the database connection D, then sqlite3_last_insert_rowid(D) returns
+zero.</p>
+
+<p>As well as being set automatically as rows are inserted into database
+tables, the value returned by this function may be set explicitly by
+<a href="../c3ref/set_last_insert_rowid.html">sqlite3_set_last_insert_rowid()</a></p>
+
+<p>Some virtual table implementations may INSERT rows into rowid tables as
+part of committing a transaction (e.g. to flush data accumulated in memory
+to disk). In this case subsequent calls to this function return the rowid
+associated with these internal INSERT operations, which leads to
+unintuitive results. Virtual table implementations that do write to rowid
+tables in this way can avoid this problem by restoring the original
+rowid value using <a href="../c3ref/set_last_insert_rowid.html">sqlite3_set_last_insert_rowid()</a> before returning
+control to the user.</p>
+
+<p>If an <a href="../lang_insert.html">INSERT</a> occurs within a trigger then this routine will
+return the <a href="../lang_createtable.html#rowid">rowid</a> of the inserted row as long as the trigger is
+running. Once the trigger program ends, the value returned
+by this routine reverts to what it was before the trigger was fired.</p>
+
+<p>An <a href="../lang_insert.html">INSERT</a> that fails due to a constraint violation is not a
+successful <a href="../lang_insert.html">INSERT</a> and does not change the value returned by this
+routine. Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK,
+and INSERT OR ABORT make no changes to the return value of this
+routine when their insertion fails. When INSERT OR REPLACE
+encounters a constraint violation, it does not fail. The
+INSERT continues to completion after deleting rows that caused
+the constraint problem so INSERT OR REPLACE will always change
+the return value of this interface.</p>
+
+<p>For the purposes of this routine, an <a href="../lang_insert.html">INSERT</a> is considered to
+be successful even if it is subsequently rolled back.</p>
+
+<p>This function is accessible to SQL statements via the
+<a href="../lang_corefunc.html#last_insert_rowid">last_insert_rowid() SQL function</a>.</p>
+
+<p>If a separate thread performs a new <a href="../lang_insert.html">INSERT</a> on the same
+database connection while the <a href="../c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a>
+function is running and thus changes the last insert <a href="../lang_createtable.html#rowid">rowid</a>,
+then the value returned by <a href="../c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a> is
+unpredictable and might not equal either the old or the new
+last insert <a href="../lang_createtable.html#rowid">rowid</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/libversion.html b/www/c3ref/libversion.html
new file mode 100644
index 0000000..d9fedeb
--- /dev/null
+++ b/www/c3ref/libversion.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Run-Time Library Version Numbers</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_libversion sqlite3_libversion_number sqlite3_sourceid sqlite3_version -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Run-Time Library Version Numbers</h2>
+</div>
+<blockquote><pre>
+SQLITE_EXTERN const char sqlite3_version[];
+const char *sqlite3_libversion(void);
+const char *sqlite3_sourceid(void);
+int sqlite3_libversion_number(void);
+</pre></blockquote>
+<p>
+These interfaces provide the same information as the <a href="../c3ref/c_source_id.html">SQLITE_VERSION</a>,
+<a href="../c3ref/c_source_id.html">SQLITE_VERSION_NUMBER</a>, and <a href="../c3ref/c_source_id.html">SQLITE_SOURCE_ID</a> C preprocessor macros
+but are associated with the library instead of the header file. Cautious
+programmers might include assert() statements in their application to
+verify that values returned by these interfaces match the macros in
+the header, and thus ensure that the application is
+compiled with matching library and header files.</p>
+
+<p><blockquote><pre>
+assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
+assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 );
+assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
+</pre></blockquote></p>
+
+<p>The sqlite3_version[] string constant contains the text of <a href="../c3ref/c_source_id.html">SQLITE_VERSION</a>
+macro. The sqlite3_libversion() function returns a pointer to the
+to the sqlite3_version[] string constant. The sqlite3_libversion()
+function is provided for use in DLLs since DLL users usually do not have
+direct access to string constants within the DLL. The
+sqlite3_libversion_number() function returns an integer equal to
+<a href="../c3ref/c_source_id.html">SQLITE_VERSION_NUMBER</a>. The sqlite3_sourceid() function returns
+a pointer to a string constant whose value is the same as the
+<a href="../c3ref/c_source_id.html">SQLITE_SOURCE_ID</a> C preprocessor macro. Except if SQLite is built
+using an edited copy of <a href="../amalgamation.html">the amalgamation</a>, then the last four characters
+of the hash might be different from <a href="../c3ref/c_source_id.html">SQLITE_SOURCE_ID</a>.</p>
+
+<p>See also: <a href="../lang_corefunc.html#sqlite_version">sqlite_version()</a> and <a href="../lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/limit.html b/www/c3ref/limit.html
new file mode 100644
index 0000000..56b83d7
--- /dev/null
+++ b/www/c3ref/limit.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Run-time Limits</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_limit -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Run-time Limits</h2>
+</div>
+<blockquote><pre>
+int sqlite3_limit(sqlite3*, int id, int newVal);
+</pre></blockquote>
+<p>
+This interface allows the size of various constructs to be limited
+on a connection by connection basis. The first parameter is the
+<a href="../c3ref/sqlite3.html">database connection</a> whose limit is to be set or queried. The
+second parameter is one of the <a href="../c3ref/c_limit_attached.html">limit categories</a> that define a
+class of constructs to be size limited. The third parameter is the
+new limit for that construct.</p>
+
+<p>If the new limit is a negative number, the limit is unchanged.
+For each limit category SQLITE_LIMIT_<i>NAME</i> there is a
+<a href="../limits.html">hard upper bound</a>
+set at compile-time by a C preprocessor macro called
+<a href="../limits.html">SQLITE_MAX_<i>NAME</i></a>.
+(The "_LIMIT_" in the name is changed to "_MAX_".)
+Attempts to increase a limit above its hard upper bound are
+silently truncated to the hard upper bound.</p>
+
+<p>Regardless of whether or not the limit was changed, the
+<a href="../c3ref/limit.html">sqlite3_limit()</a> interface returns the prior value of the limit.
+Hence, to find the current value of a limit without changing it,
+simply invoke this interface with the third parameter set to -1.</p>
+
+<p>Run-time limits are intended for use in applications that manage
+both their own internal database and also databases that are controlled
+by untrusted external sources. An example application might be a
+web browser that has its own databases for storing history and
+separate databases controlled by JavaScript applications downloaded
+off the Internet. The internal databases can be given the
+large, default limits. Databases managed by external sources can
+be given much smaller limits designed to prevent a denial of service
+attack. Developers might also want to use the <a href="../c3ref/set_authorizer.html">sqlite3_set_authorizer()</a>
+interface to further control untrusted SQL. The size of the database
+created by an untrusted script can be contained using the
+<a href="../pragma.html#pragma_max_page_count">max_page_count</a> <a href="../pragma.html#syntax">PRAGMA</a>.</p>
+
+<p>New run-time limit categories may be added in future releases.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/load_extension.html b/www/c3ref/load_extension.html
new file mode 100644
index 0000000..94c5732
--- /dev/null
+++ b/www/c3ref/load_extension.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Load An Extension</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_load_extension -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Load An Extension</h2>
+</div>
+<blockquote><pre>
+int sqlite3_load_extension(
+ sqlite3 *db, /* Load the extension into this database connection */
+ const char *zFile, /* Name of the shared library containing extension */
+ const char *zProc, /* Entry point. Derived from zFile if 0 */
+ char **pzErrMsg /* Put error message here if not 0 */
+);
+</pre></blockquote>
+<p>
+This interface loads an SQLite extension library from the named file.</p>
+
+<p>The sqlite3_load_extension() interface attempts to load an
+<a href="../loadext.html">SQLite extension</a> library contained in the file zFile. If
+the file cannot be loaded directly, attempts are made to load
+with various operating-system specific extensions added.
+So for example, if "samplelib" cannot be loaded, then names like
+"samplelib.so" or "samplelib.dylib" or "samplelib.dll" might
+be tried also.</p>
+
+<p>The entry point is zProc.
+zProc may be 0, in which case SQLite will try to come up with an
+entry point name on its own. It first tries "sqlite3_extension_init".
+If that does not work, it constructs a name "sqlite3_X_init" where the
+X is consists of the lower-case equivalent of all ASCII alphabetic
+characters in the filename from the last "/" to the first following
+"." and omitting any initial "lib".
+The sqlite3_load_extension() interface returns
+<a href="../rescode.html#ok">SQLITE_OK</a> on success and <a href="../rescode.html#error">SQLITE_ERROR</a> if something goes wrong.
+If an error occurs and pzErrMsg is not 0, then the
+<a href="../c3ref/load_extension.html">sqlite3_load_extension()</a> interface shall attempt to
+fill *pzErrMsg with error message text stored in memory
+obtained from <a href="../c3ref/free.html">sqlite3_malloc()</a>. The calling function
+should free this memory by calling <a href="../c3ref/free.html">sqlite3_free()</a>.</p>
+
+<p>Extension loading must be enabled using
+<a href="../c3ref/enable_load_extension.html">sqlite3_enable_load_extension()</a> or
+<a href="../c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a>,1,NULL)
+prior to calling this API,
+otherwise an error will be returned.</p>
+
+<p><b>Security warning:</b> It is recommended that the
+<a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a> method be used to enable only this
+interface. The use of the <a href="../c3ref/enable_load_extension.html">sqlite3_enable_load_extension()</a> interface
+should be avoided. This will keep the SQL function <a href="../lang_corefunc.html#load_extension">load_extension()</a>
+disabled and prevent SQL injections from giving attackers
+access to extension loading capabilities.</p>
+
+<p>See also the <a href="../lang_corefunc.html#load_extension">load_extension() SQL function</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/log.html b/www/c3ref/log.html
new file mode 100644
index 0000000..5a04382
--- /dev/null
+++ b/www/c3ref/log.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Error Logging Interface</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_log -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Error Logging Interface</h2>
+</div>
+<blockquote><pre>
+void sqlite3_log(int iErrCode, const char *zFormat, ...);
+</pre></blockquote>
+<p>
+The <a href="../c3ref/log.html">sqlite3_log()</a> interface writes a message into the <a href="../errlog.html">error log</a>
+established by the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> option to <a href="../c3ref/config.html">sqlite3_config()</a>.
+If logging is enabled, the zFormat string and subsequent arguments are
+used with <a href="../c3ref/mprintf.html">sqlite3_snprintf()</a> to generate the final output string.</p>
+
+<p>The sqlite3_log() interface is intended for use by extensions such as
+virtual tables, collating functions, and SQL functions. While there is
+nothing to prevent an application from calling sqlite3_log(), doing so
+is considered bad form.</p>
+
+<p>The zFormat string must not be NULL.</p>
+
+<p>To avoid deadlocks and other threading problems, the sqlite3_log() routine
+will not use dynamically allocated memory. The log message is stored in
+a fixed-length buffer on the stack. If the log message is longer than
+a few hundred characters, it will be truncated to the length of the
+buffer.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/mem_methods.html b/www/c3ref/mem_methods.html
new file mode 100644
index 0000000..010f64e
--- /dev/null
+++ b/www/c3ref/mem_methods.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Memory Allocation Routines</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_mem_methods -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Memory Allocation Routines</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_mem_methods sqlite3_mem_methods;
+struct sqlite3_mem_methods {
+ void *(*xMalloc)(int); /* Memory allocation function */
+ void (*xFree)(void*); /* Free a prior allocation */
+ void *(*xRealloc)(void*,int); /* Resize an allocation */
+ int (*xSize)(void*); /* Return the size of an allocation */
+ int (*xRoundup)(int); /* Round up request size to allocation size */
+ int (*xInit)(void*); /* Initialize the memory allocator */
+ void (*xShutdown)(void*); /* Deinitialize the memory allocator */
+ void *pAppData; /* Argument to xInit() and xShutdown() */
+};
+</pre></blockquote>
+<p>
+An instance of this object defines the interface between SQLite
+and low-level memory allocation routines.</p>
+
+<p>This object is used in only one place in the SQLite interface.
+A pointer to an instance of this object is the argument to
+<a href="../c3ref/config.html">sqlite3_config()</a> when the configuration option is
+<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a> or <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiggetmalloc">SQLITE_CONFIG_GETMALLOC</a>.
+By creating an instance of this object
+and passing it to <a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a>)
+during configuration, an application can specify an alternative
+memory allocation subsystem for SQLite to use for all of its
+dynamic memory needs.</p>
+
+<p>Note that SQLite comes with several <a href="../malloc.html#altalloc">built-in memory allocators</a>
+that are perfectly adequate for the overwhelming majority of applications
+and that this object is only useful to a tiny minority of applications
+with specialized memory allocation requirements. This object is
+also used during testing of SQLite in order to specify an alternative
+memory allocator that simulates memory out-of-memory conditions in
+order to verify that SQLite recovers gracefully from such
+conditions.</p>
+
+<p>The xMalloc, xRealloc, and xFree methods must work like the
+malloc(), realloc() and free() functions from the standard C library.
+SQLite guarantees that the second argument to
+xRealloc is always a value returned by a prior call to xRoundup.</p>
+
+<p>xSize should return the allocated size of a memory allocation
+previously obtained from xMalloc or xRealloc. The allocated size
+is always at least as big as the requested size but may be larger.</p>
+
+<p>The xRoundup method returns what would be the allocated size of
+a memory allocation given a particular requested size. Most memory
+allocators round up memory allocations at least to the next multiple
+of 8. Some allocators round up to a larger multiple or to a power of 2.
+Every memory allocation request coming in through <a href="../c3ref/free.html">sqlite3_malloc()</a>
+or <a href="../c3ref/free.html">sqlite3_realloc()</a> first calls xRoundup. If xRoundup returns 0,
+that causes the corresponding memory allocation to fail.</p>
+
+<p>The xInit method initializes the memory allocator. For example,
+it might allocate any required mutexes or initialize internal data
+structures. The xShutdown method is invoked (indirectly) by
+<a href="../c3ref/initialize.html">sqlite3_shutdown()</a> and should deallocate any resources acquired
+by xInit. The pAppData pointer is used as the only parameter to
+xInit and xShutdown.</p>
+
+<p>SQLite holds the <a href="../c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_MAIN</a> mutex when it invokes
+the xInit method, so the xInit method need not be threadsafe. The
+xShutdown method is only called from <a href="../c3ref/initialize.html">sqlite3_shutdown()</a> so it does
+not need to be threadsafe either. For all other methods, SQLite
+holds the <a href="../c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_MEM</a> mutex as long as the
+<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> configuration option is turned on (which
+it is by default) and so the methods are automatically serialized.
+However, if <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> is disabled, then the other
+methods must be threadsafe or else make their own arrangements for
+serialization.</p>
+
+<p>SQLite will never invoke xInit() more than once without an intervening
+call to xShutdown().
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/memory_highwater.html b/www/c3ref/memory_highwater.html
new file mode 100644
index 0000000..5fffd0e
--- /dev/null
+++ b/www/c3ref/memory_highwater.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Memory Allocator Statistics</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_memory_highwater sqlite3_memory_used -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Memory Allocator Statistics</h2>
+</div>
+<blockquote><pre>
+sqlite3_int64 sqlite3_memory_used(void);
+sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
+</pre></blockquote>
+<p>
+SQLite provides these two interfaces for reporting on the status
+of the <a href="../c3ref/free.html">sqlite3_malloc()</a>, <a href="../c3ref/free.html">sqlite3_free()</a>, and <a href="../c3ref/free.html">sqlite3_realloc()</a>
+routines, which form the built-in memory allocation subsystem.</p>
+
+<p>The <a href="../c3ref/memory_highwater.html">sqlite3_memory_used()</a> routine returns the number of bytes
+of memory currently outstanding (malloced but not freed).
+The <a href="../c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> routine returns the maximum
+value of <a href="../c3ref/memory_highwater.html">sqlite3_memory_used()</a> since the high-water mark
+was last reset. The values returned by <a href="../c3ref/memory_highwater.html">sqlite3_memory_used()</a> and
+<a href="../c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> include any overhead
+added by SQLite in its implementation of <a href="../c3ref/free.html">sqlite3_malloc()</a>,
+but not overhead added by the any underlying system library
+routines that <a href="../c3ref/free.html">sqlite3_malloc()</a> may call.</p>
+
+<p>The memory high-water mark is reset to the current value of
+<a href="../c3ref/memory_highwater.html">sqlite3_memory_used()</a> if and only if the parameter to
+<a href="../c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> is true. The value returned
+by <a href="../c3ref/memory_highwater.html">sqlite3_memory_highwater(1)</a> is the high-water mark
+prior to the reset.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/module.html b/www/c3ref/module.html
new file mode 100644
index 0000000..0b057ea
--- /dev/null
+++ b/www/c3ref/module.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Virtual Table Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_module {virtual table module} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Virtual Table Object</h2>
+</div>
+<blockquote><pre>
+struct sqlite3_module {
+ int iVersion;
+ int (*xCreate)(sqlite3*, void *pAux,
+ int argc, const char *const*argv,
+ sqlite3_vtab **ppVTab, char**);
+ int (*xConnect)(sqlite3*, void *pAux,
+ int argc, const char *const*argv,
+ sqlite3_vtab **ppVTab, char**);
+ int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
+ int (*xDisconnect)(sqlite3_vtab *pVTab);
+ int (*xDestroy)(sqlite3_vtab *pVTab);
+ int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
+ int (*xClose)(sqlite3_vtab_cursor*);
+ int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
+ int argc, sqlite3_value **argv);
+ int (*xNext)(sqlite3_vtab_cursor*);
+ int (*xEof)(sqlite3_vtab_cursor*);
+ int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int);
+ int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid);
+ int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *);
+ int (*xBegin)(sqlite3_vtab *pVTab);
+ int (*xSync)(sqlite3_vtab *pVTab);
+ int (*xCommit)(sqlite3_vtab *pVTab);
+ int (*xRollback)(sqlite3_vtab *pVTab);
+ int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName,
+ void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
+ void **ppArg);
+ int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
+ /* The methods above are in version 1 of the sqlite_module object. Those
+ ** below are for version 2 and greater. */
+ int (*xSavepoint)(sqlite3_vtab *pVTab, int);
+ int (*xRelease)(sqlite3_vtab *pVTab, int);
+ int (*xRollbackTo)(sqlite3_vtab *pVTab, int);
+ /* The methods above are in versions 1 and 2 of the sqlite_module object.
+ ** Those below are for version 3 and greater. */
+ int (*xShadowName)(const char*);
+};
+</pre></blockquote>
+<p>
+This structure, sometimes called a "virtual table module",
+defines the implementation of a <a href="../vtab.html">virtual table</a>.
+This structure consists mostly of methods for the module.</p>
+
+<p>A virtual table module is created by filling in a persistent
+instance of this structure and passing a pointer to that instance
+to <a href="../c3ref/create_module.html">sqlite3_create_module()</a> or <a href="../c3ref/create_module.html">sqlite3_create_module_v2()</a>.
+The registration remains valid until it is replaced by a different
+module or until the <a href="../c3ref/sqlite3.html">database connection</a> closes. The content
+of this structure must not change while it is registered with
+any database connection.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/mprintf.html b/www/c3ref/mprintf.html
new file mode 100644
index 0000000..a25ca3f
--- /dev/null
+++ b/www/c3ref/mprintf.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Formatted String Printing Functions</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_mprintf sqlite3_snprintf sqlite3_vmprintf sqlite3_vsnprintf -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Formatted String Printing Functions</h2>
+</div>
+<blockquote><pre>
+char *sqlite3_mprintf(const char*,...);
+char *sqlite3_vmprintf(const char*, va_list);
+char *sqlite3_snprintf(int,char*,const char*, ...);
+char *sqlite3_vsnprintf(int,char*,const char*, va_list);
+</pre></blockquote>
+<p>
+These routines are work-alikes of the "printf()" family of functions
+from the standard C library.
+These routines understand most of the common formatting options from
+the standard library printf()
+plus some additional non-standard formats (<a href="../printf.html#percentq">%q</a>, <a href="../printf.html#percentq">%Q</a>, <a href="../printf.html#percentw">%w</a>, and <a href="../printf.html#percentz">%z</a>).
+See the <a href="../printf.html">built-in printf()</a> documentation for details.</p>
+
+<p>The sqlite3_mprintf() and sqlite3_vmprintf() routines write their
+results into memory obtained from <a href="../c3ref/free.html">sqlite3_malloc64()</a>.
+The strings returned by these two routines should be
+released by <a href="../c3ref/free.html">sqlite3_free()</a>. Both routines return a
+NULL pointer if <a href="../c3ref/free.html">sqlite3_malloc64()</a> is unable to allocate enough
+memory to hold the resulting string.</p>
+
+<p>The sqlite3_snprintf() routine is similar to "snprintf()" from
+the standard C library. The result is written into the
+buffer supplied as the second parameter whose size is given by
+the first parameter. Note that the order of the
+first two parameters is reversed from snprintf(). This is an
+historical accident that cannot be fixed without breaking
+backwards compatibility. Note also that sqlite3_snprintf()
+returns a pointer to its buffer instead of the number of
+characters actually written into the buffer. We admit that
+the number of characters written would be a more useful return
+value but we cannot change the implementation of sqlite3_snprintf()
+now without breaking compatibility.</p>
+
+<p>As long as the buffer size is greater than zero, sqlite3_snprintf()
+guarantees that the buffer is always zero-terminated. The first
+parameter "n" is the total size of the buffer, including space for
+the zero terminator. So the longest string that can be completely
+written will be n-1 characters.</p>
+
+<p>The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf().</p>
+
+<p>See also: <a href="../printf.html">built-in printf()</a>, <a href="../lang_corefunc.html#printf">printf() SQL function</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/mutex.html b/www/c3ref/mutex.html
new file mode 100644
index 0000000..179e24b
--- /dev/null
+++ b/www/c3ref/mutex.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Mutex Handle</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_mutex -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Mutex Handle</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_mutex sqlite3_mutex;
+</pre></blockquote>
+<p>
+The mutex module within SQLite defines <a href="../c3ref/mutex.html">sqlite3_mutex</a> to be an
+abstract type for a mutex object. The SQLite core never looks
+at the internal representation of an <a href="../c3ref/mutex.html">sqlite3_mutex</a>. It only
+deals with pointers to the <a href="../c3ref/mutex.html">sqlite3_mutex</a> object.</p>
+
+<p>Mutexes are created using <a href="../c3ref/mutex_alloc.html">sqlite3_mutex_alloc()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/mutex_alloc.html b/www/c3ref/mutex_alloc.html
new file mode 100644
index 0000000..bf825c4
--- /dev/null
+++ b/www/c3ref/mutex_alloc.html
@@ -0,0 +1,245 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Mutexes</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_mutex_alloc sqlite3_mutex_enter sqlite3_mutex_free sqlite3_mutex_leave sqlite3_mutex_try -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Mutexes</h2>
+</div>
+<blockquote><pre>
+sqlite3_mutex *sqlite3_mutex_alloc(int);
+void sqlite3_mutex_free(sqlite3_mutex*);
+void sqlite3_mutex_enter(sqlite3_mutex*);
+int sqlite3_mutex_try(sqlite3_mutex*);
+void sqlite3_mutex_leave(sqlite3_mutex*);
+</pre></blockquote>
+<p>
+The SQLite core uses these routines for thread
+synchronization. Though they are intended for internal
+use by SQLite, code that links against SQLite is
+permitted to use any of these routines.</p>
+
+<p>The SQLite source code contains multiple implementations
+of these mutex routines. An appropriate implementation
+is selected automatically at compile-time. The following
+implementations are available in the SQLite core:</p>
+
+<p><ul>
+<li> SQLITE_MUTEX_PTHREADS
+<li> SQLITE_MUTEX_W32
+<li> SQLITE_MUTEX_NOOP
+</ul></p>
+
+<p>The SQLITE_MUTEX_NOOP implementation is a set of routines
+that does no real locking and is appropriate for use in
+a single-threaded application. The SQLITE_MUTEX_PTHREADS and
+SQLITE_MUTEX_W32 implementations are appropriate for use on Unix
+and Windows.</p>
+
+<p>If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
+macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
+implementation is included with the library. In this case the
+application must supply a custom mutex implementation using the
+<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> option of the sqlite3_config() function
+before calling sqlite3_initialize() or any other public sqlite3_
+function that calls sqlite3_initialize().</p>
+
+<p>The sqlite3_mutex_alloc() routine allocates a new
+mutex and returns a pointer to it. The sqlite3_mutex_alloc()
+routine returns NULL if it is unable to allocate the requested
+mutex. The argument to sqlite3_mutex_alloc() must one of these
+integer constants:</p>
+
+<p><ul>
+<li> SQLITE_MUTEX_FAST
+<li> SQLITE_MUTEX_RECURSIVE
+<li> SQLITE_MUTEX_STATIC_MAIN
+<li> SQLITE_MUTEX_STATIC_MEM
+<li> SQLITE_MUTEX_STATIC_OPEN
+<li> SQLITE_MUTEX_STATIC_PRNG
+<li> SQLITE_MUTEX_STATIC_LRU
+<li> SQLITE_MUTEX_STATIC_PMEM
+<li> SQLITE_MUTEX_STATIC_APP1
+<li> SQLITE_MUTEX_STATIC_APP2
+<li> SQLITE_MUTEX_STATIC_APP3
+<li> SQLITE_MUTEX_STATIC_VFS1
+<li> SQLITE_MUTEX_STATIC_VFS2
+<li> SQLITE_MUTEX_STATIC_VFS3
+</ul></p>
+
+<p>The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
+cause sqlite3_mutex_alloc() to create
+a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
+is used but not necessarily so when SQLITE_MUTEX_FAST is used.
+The mutex implementation does not need to make a distinction
+between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
+not want to. SQLite will only request a recursive mutex in
+cases where it really needs one. If a faster non-recursive mutex
+implementation is available on the host platform, the mutex subsystem
+might return such a mutex in response to SQLITE_MUTEX_FAST.</p>
+
+<p>The other allowed parameters to sqlite3_mutex_alloc() (anything other
+than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
+a pointer to a static preexisting mutex. Nine static mutexes are
+used by the current version of SQLite. Future versions of SQLite
+may add additional static mutexes. Static mutexes are for internal
+use by SQLite only. Applications that use SQLite mutexes should
+use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
+SQLITE_MUTEX_RECURSIVE.</p>
+
+<p>Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
+or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
+returns a different mutex on every call. For the static
+mutex types, the same mutex is returned on every call that has
+the same type number.</p>
+
+<p>The sqlite3_mutex_free() routine deallocates a previously
+allocated dynamic mutex. Attempting to deallocate a static
+mutex results in undefined behavior.</p>
+
+<p>The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
+to enter a mutex. If another thread is already within the mutex,
+sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
+SQLITE_BUSY. The sqlite3_mutex_try() interface returns <a href="../rescode.html#ok">SQLITE_OK</a>
+upon successful entry. Mutexes created using
+SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
+In such cases, the
+mutex must be exited an equal number of times before another thread
+can enter. If the same thread tries to enter any mutex other
+than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined.</p>
+
+<p>Some systems (for example, Windows 95) do not support the operation
+implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try()
+will always return SQLITE_BUSY. The SQLite core only ever uses
+sqlite3_mutex_try() as an optimization so this is acceptable
+behavior.</p>
+
+<p>The sqlite3_mutex_leave() routine exits a mutex that was
+previously entered by the same thread. The behavior
+is undefined if the mutex is not currently entered by the
+calling thread or is not currently allocated.</p>
+
+<p>If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
+sqlite3_mutex_leave() is a NULL pointer, then all three routines
+behave as no-ops.</p>
+
+<p>See also: <a href="../c3ref/mutex_held.html">sqlite3_mutex_held()</a> and <a href="../c3ref/mutex_held.html">sqlite3_mutex_notheld()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/mutex_held.html b/www/c3ref/mutex_held.html
new file mode 100644
index 0000000..de94d9c
--- /dev/null
+++ b/www/c3ref/mutex_held.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Mutex Verification Routines</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_mutex_held sqlite3_mutex_notheld -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Mutex Verification Routines</h2>
+</div>
+<blockquote><pre>
+#ifndef NDEBUG
+int sqlite3_mutex_held(sqlite3_mutex*);
+int sqlite3_mutex_notheld(sqlite3_mutex*);
+#endif
+</pre></blockquote>
+<p>
+The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
+are intended for use inside assert() statements. The SQLite core
+never uses these routines except inside an assert() and applications
+are advised to follow the lead of the core. The SQLite core only
+provides implementations for these routines when it is compiled
+with the SQLITE_DEBUG flag. External mutex implementations
+are only required to provide these routines if SQLITE_DEBUG is
+defined and if NDEBUG is not defined.</p>
+
+<p>These routines should return true if the mutex in their argument
+is held or not held, respectively, by the calling thread.</p>
+
+<p>The implementation is not required to provide versions of these
+routines that actually work. If the implementation does not provide working
+versions of these routines, it should at least provide stubs that always
+return true so that one does not get spurious assertion failures.</p>
+
+<p>If the argument to sqlite3_mutex_held() is a NULL pointer then
+the routine should return 1. This seems counter-intuitive since
+clearly the mutex cannot be held if it does not exist. But
+the reason the mutex does not exist is because the build is not
+using mutexes. And we do not want the assert() containing the
+call to sqlite3_mutex_held() to fail, so a non-zero return is
+the appropriate thing to do. The sqlite3_mutex_notheld()
+interface should also return 1 when given a NULL pointer.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/mutex_methods.html b/www/c3ref/mutex_methods.html
new file mode 100644
index 0000000..24ac76d
--- /dev/null
+++ b/www/c3ref/mutex_methods.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Mutex Methods Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_mutex_methods -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Mutex Methods Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
+struct sqlite3_mutex_methods {
+ int (*xMutexInit)(void);
+ int (*xMutexEnd)(void);
+ sqlite3_mutex *(*xMutexAlloc)(int);
+ void (*xMutexFree)(sqlite3_mutex *);
+ void (*xMutexEnter)(sqlite3_mutex *);
+ int (*xMutexTry)(sqlite3_mutex *);
+ void (*xMutexLeave)(sqlite3_mutex *);
+ int (*xMutexHeld)(sqlite3_mutex *);
+ int (*xMutexNotheld)(sqlite3_mutex *);
+};
+</pre></blockquote>
+<p>
+An instance of this structure defines the low-level routines
+used to allocate and use mutexes.</p>
+
+<p>Usually, the default mutex implementations provided by SQLite are
+sufficient, however the application has the option of substituting a custom
+implementation for specialized deployments or systems for which SQLite
+does not provide a suitable implementation. In this case, the application
+creates and populates an instance of this structure to pass
+to sqlite3_config() along with the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> option.
+Additionally, an instance of this structure can be used as an
+output variable when querying the system for the current mutex
+implementation, using the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex">SQLITE_CONFIG_GETMUTEX</a> option.</p>
+
+<p>The xMutexInit method defined by this structure is invoked as
+part of system initialization by the sqlite3_initialize() function.
+The xMutexInit routine is called by SQLite exactly once for each
+effective call to <a href="../c3ref/initialize.html">sqlite3_initialize()</a>.</p>
+
+<p>The xMutexEnd method defined by this structure is invoked as
+part of system shutdown by the sqlite3_shutdown() function. The
+implementation of this method is expected to release all outstanding
+resources obtained by the mutex methods implementation, especially
+those obtained by the xMutexInit method. The xMutexEnd()
+interface is invoked exactly once for each call to <a href="../c3ref/initialize.html">sqlite3_shutdown()</a>.</p>
+
+<p>The remaining seven methods defined by this structure (xMutexAlloc,
+xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and
+xMutexNotheld) implement the following interfaces (respectively):</p>
+
+<p><ul>
+<li> <a href="../c3ref/mutex_alloc.html">sqlite3_mutex_alloc()</a> </li>
+<li> <a href="../c3ref/mutex_alloc.html">sqlite3_mutex_free()</a> </li>
+<li> <a href="../c3ref/mutex_alloc.html">sqlite3_mutex_enter()</a> </li>
+<li> <a href="../c3ref/mutex_alloc.html">sqlite3_mutex_try()</a> </li>
+<li> <a href="../c3ref/mutex_alloc.html">sqlite3_mutex_leave()</a> </li>
+<li> <a href="../c3ref/mutex_held.html">sqlite3_mutex_held()</a> </li>
+<li> <a href="../c3ref/mutex_held.html">sqlite3_mutex_notheld()</a> </li>
+</ul></p>
+
+<p>The only difference is that the public sqlite3_XXX functions enumerated
+above silently ignore any invocations that pass a NULL pointer instead
+of a valid mutex handle. The implementations of the methods defined
+by this structure are not required to handle this case. The results
+of passing a NULL pointer instead of a valid mutex handle are undefined
+(i.e. it is acceptable to provide an implementation that segfaults if
+it is passed a NULL pointer).</p>
+
+<p>The xMutexInit() method must be threadsafe. It must be harmless to
+invoke xMutexInit() multiple times within the same process and without
+intervening calls to xMutexEnd(). Second and subsequent calls to
+xMutexInit() must be no-ops.</p>
+
+<p>xMutexInit() must not use SQLite memory allocation (<a href="../c3ref/free.html">sqlite3_malloc()</a>
+and its associates). Similarly, xMutexAlloc() must not use SQLite memory
+allocation for a static mutex. However xMutexAlloc() may use SQLite
+memory allocation for a fast or recursive mutex.</p>
+
+<p>SQLite will invoke the xMutexEnd() method when <a href="../c3ref/initialize.html">sqlite3_shutdown()</a> is
+called, but only if the prior call to xMutexInit returned SQLITE_OK.
+If xMutexInit fails in any way, it is expected to clean up after itself
+prior to returning.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/next_stmt.html b/www/c3ref/next_stmt.html
new file mode 100644
index 0000000..d072462
--- /dev/null
+++ b/www/c3ref/next_stmt.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Find the next prepared statement</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_next_stmt -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Find the next prepared statement</h2>
+</div>
+<blockquote><pre>
+sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+This interface returns a pointer to the next <a href="../c3ref/stmt.html">prepared statement</a> after
+pStmt associated with the <a href="../c3ref/sqlite3.html">database connection</a> pDb. If pStmt is NULL
+then this interface returns a pointer to the first prepared statement
+associated with the database connection pDb. If no prepared statement
+satisfies the conditions of this routine, it returns NULL.</p>
+
+<p>The <a href="../c3ref/sqlite3.html">database connection</a> pointer D in a call to
+<a href="../c3ref/next_stmt.html">sqlite3_next_stmt(D,S)</a> must refer to an open database
+connection and in particular must not be a NULL pointer.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/objlist.html b/www/c3ref/objlist.html
new file mode 100644
index 0000000..24986e2
--- /dev/null
+++ b/www/c3ref/objlist.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>List Of SQLite Objects</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+
+<h2>List Of Objects:</h2>
+<div class='columns' style='columns: 14em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../c3ref/sqlite3.html'>sqlite3</a></li>
+<li><a href='../c3ref/api_routines.html'>sqlite3_api_routines</a></li>
+<li><a href='../c3ref/backup.html'>sqlite3_backup</a></li>
+<li><a href='../c3ref/blob.html'>sqlite3_blob</a></li>
+<li><a href='../c3ref/context.html'>sqlite3_context</a></li>
+<li><a href='../c3ref/data_directory.html'>sqlite3_data_directory</a></li>
+<li><a href='../c3ref/file.html'>sqlite3_file</a></li>
+<li><a href='../c3ref/filename.html'>sqlite3_filename</a></li>
+<li><a href='../c3ref/index_info.html'>sqlite3_index_info</a></li>
+<li><a href='../c3ref/int64.html'>sqlite3_int64</a></li>
+<li><a href='../c3ref/int64.html'>sqlite3_uint64</a></li>
+<li><a href='../c3ref/int64.html'>sqlite_int64</a></li>
+<li><a href='../c3ref/int64.html'>sqlite_uint64</a></li>
+<li><a href='../c3ref/io_methods.html'>sqlite3_io_methods</a></li>
+<li><a href='../c3ref/mem_methods.html'>sqlite3_mem_methods</a></li>
+<li><a href='../c3ref/module.html'>sqlite3_module</a></li>
+<li><a href='../c3ref/mutex.html'>sqlite3_mutex</a></li>
+<li><a href='../c3ref/mutex_methods.html'>sqlite3_mutex_methods</a></li>
+<li><a href='../c3ref/pcache.html'>sqlite3_pcache</a></li>
+<li><a href='../c3ref/pcache_methods2.html'>sqlite3_pcache_methods2</a></li>
+<li><a href='../c3ref/pcache_page.html'>sqlite3_pcache_page</a></li>
+<li><a href='../c3ref/snapshot.html'>sqlite3_snapshot</a></li>
+<li><a href='../c3ref/stmt.html'>sqlite3_stmt</a></li>
+<li><a href='../c3ref/str.html'>sqlite3_str</a></li>
+<li><a href='../c3ref/temp_directory.html'>sqlite3_temp_directory</a></li>
+<li><a href='../c3ref/value.html'>sqlite3_value</a></li>
+<li><a href='../c3ref/vfs.html'>sqlite3_vfs</a></li>
+<li><a href='../c3ref/vtab.html'>sqlite3_vtab</a></li>
+<li><a href='../c3ref/vtab_cursor.html'>sqlite3_vtab_cursor</a></li>
+</ul>
+</div>
+<p>Other lists:
+<a href="constlist.html">Constants</a> and
+<a href="funclist.html">Functions</a> and
+<a href="../rescode.html">Result Codes</a>.
+
+
diff --git a/www/c3ref/open.html b/www/c3ref/open.html
new file mode 100644
index 0000000..c9d4d7c
--- /dev/null
+++ b/www/c3ref/open.html
@@ -0,0 +1,417 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Opening A New Database Connection</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_open sqlite3_open16 sqlite3_open_v2 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Opening A New Database Connection</h2>
+</div>
+<blockquote><pre>
+int sqlite3_open(
+ const char *filename, /* Database filename (UTF-8) */
+ sqlite3 **ppDb /* OUT: SQLite db handle */
+);
+int sqlite3_open16(
+ const void *filename, /* Database filename (UTF-16) */
+ sqlite3 **ppDb /* OUT: SQLite db handle */
+);
+int sqlite3_open_v2(
+ const char *filename, /* Database filename (UTF-8) */
+ sqlite3 **ppDb, /* OUT: SQLite db handle */
+ int flags, /* Flags */
+ const char *zVfs /* Name of VFS module to use */
+);
+</pre></blockquote>
+<p>
+These routines open an SQLite database file as specified by the
+filename argument. The filename argument is interpreted as UTF-8 for
+sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
+order for sqlite3_open16(). A <a href="../c3ref/sqlite3.html">database connection</a> handle is usually
+returned in *ppDb, even if an error occurs. The only exception is that
+if SQLite is unable to allocate memory to hold the <a href="../c3ref/sqlite3.html">sqlite3</a> object,
+a NULL will be written into *ppDb instead of a pointer to the <a href="../c3ref/sqlite3.html">sqlite3</a>
+object. If the database is opened (and/or created) successfully, then
+<a href="../rescode.html#ok">SQLITE_OK</a> is returned. Otherwise an <a href="../rescode.html">error code</a> is returned. The
+<a href="../c3ref/errcode.html">sqlite3_errmsg()</a> or <a href="../c3ref/errcode.html">sqlite3_errmsg16()</a> routines can be used to obtain
+an English language description of the error following a failure of any
+of the sqlite3_open() routines.</p>
+
+<p>The default encoding will be UTF-8 for databases created using
+sqlite3_open() or sqlite3_open_v2(). The default encoding for databases
+created using sqlite3_open16() will be UTF-16 in the native byte order.</p>
+
+<p>Whether or not an error occurs when it is opened, resources
+associated with the <a href="../c3ref/sqlite3.html">database connection</a> handle should be released by
+passing it to <a href="../c3ref/close.html">sqlite3_close()</a> when it is no longer required.</p>
+
+<p>The sqlite3_open_v2() interface works like sqlite3_open()
+except that it accepts two additional parameters for additional control
+over the new database connection. The flags parameter to
+sqlite3_open_v2() must include, at a minimum, one of the following
+three flag combinations:</p>
+
+<p><dl>
+<dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READONLY</a></dt>
+<dd>The database is opened in read-only mode. If the database does not
+already exist, an error is returned.</dd></p>
+
+<p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READWRITE</a></dt>
+<dd>The database is opened for reading and writing if possible, or reading
+only if the file is write protected by the operating system. In either
+case the database must already exist, otherwise an error is returned.</dd></p>
+
+<p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READWRITE</a> | <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_CREATE</a></dt>
+<dd>The database is opened for reading and writing, and is created if
+it does not already exist. This is the behavior that is always used for
+sqlite3_open() and sqlite3_open16().</dd>
+</dl></p>
+
+<p>In addition to the required flags, the following optional flags are
+also supported:</p>
+
+<p><dl>
+<dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_URI</a></dt>
+<dd>The filename can be interpreted as a URI if this flag is set.</dd></p>
+
+<p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_MEMORY</a></dt>
+<dd>The database will be opened as an in-memory database. The database
+is named by the "filename" argument for the purposes of cache-sharing,
+if shared cache mode is enabled, but the "filename" is otherwise ignored.
+</dd></p>
+
+<p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a></dt>
+<dd>The new database connection will use the "multi-thread"
+<a href="../threadsafe.html">threading mode</a>. This means that separate threads are allowed
+to use SQLite at the same time, as long as each thread is using
+a different <a href="../c3ref/sqlite3.html">database connection</a>.</p>
+
+<p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_FULLMUTEX</a></dt>
+<dd>The new database connection will use the "serialized"
+<a href="../threadsafe.html">threading mode</a>. This means the multiple threads can safely
+attempt to use the same database connection at the same time.
+(Mutexes will block any actual concurrency, but in this mode
+there is no harm in trying.)</p>
+
+<p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a></dt>
+<dd>The database is opened <a href="../sharedcache.html">shared cache</a> enabled, overriding
+the default shared cache setting provided by
+<a href="../c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a>.
+The <a href="../sharedcache.html#dontuse">use of shared cache mode is discouraged</a> and hence shared cache
+capabilities may be omitted from many builds of SQLite. In such cases,
+this option is a no-op.</p>
+
+<p><dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_PRIVATECACHE</a></dt>
+<dd>The database is opened <a href="../sharedcache.html">shared cache</a> disabled, overriding
+the default shared cache setting provided by
+<a href="../c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a>.</p>
+
+<p><a name="openexrescode"></a>
+ <dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXRESCODE</a></dt>
+<dd>The database connection comes up in "extended result code mode".
+In other words, the database behaves has if
+<a href="../c3ref/extended_result_codes.html">sqlite3_extended_result_codes(db,1)</a> where called on the database
+connection as soon as the connection is created. In addition to setting
+the extended result code mode, this flag also causes <a href="../c3ref/open.html">sqlite3_open_v2()</a>
+to return an extended result code.</dd></p>
+
+<p><a name="opennofollow"></a>
+ <dt><a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a></dt>
+<dd>The database filename is not allowed to contain a symbolic link</dd>
+</dl></p>
+
+<p>If the 3rd parameter to sqlite3_open_v2() is not one of the
+required combinations shown above optionally combined with other
+<a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_* bits</a>
+then the behavior is undefined. Historic versions of SQLite
+have silently ignored surplus bits in the flags parameter to
+sqlite3_open_v2(), however that behavior might not be carried through
+into future versions of SQLite and so applications should not rely
+upon it. Note in particular that the SQLITE_OPEN_EXCLUSIVE flag is a no-op
+for sqlite3_open_v2(). The SQLITE_OPEN_EXCLUSIVE does *not* cause
+the open to fail if the database already exists. The SQLITE_OPEN_EXCLUSIVE
+flag is intended for use by the <a href="../c3ref/vfs.html">VFS interface</a> only, and not
+by sqlite3_open_v2().</p>
+
+<p>The fourth parameter to sqlite3_open_v2() is the name of the
+<a href="../c3ref/vfs.html">sqlite3_vfs</a> object that defines the operating system interface that
+the new database connection should use. If the fourth parameter is
+a NULL pointer then the default <a href="../c3ref/vfs.html">sqlite3_vfs</a> object is used.</p>
+
+<p>If the filename is ":memory:", then a private, temporary in-memory database
+is created for the connection. This in-memory database will vanish when
+the database connection is closed. Future versions of SQLite might
+make use of additional special filenames that begin with the ":" character.
+It is recommended that when a database filename actually does begin with
+a ":" character you should prefix the filename with a pathname such as
+"./" to avoid ambiguity.</p>
+
+<p>If the filename is an empty string, then a private, temporary
+on-disk database will be created. This private database will be
+automatically deleted as soon as the database connection is closed.</p>
+
+<p><a name="urifilenamesinsqlite3open"></a>
+ <h3>URI Filenames</h3></p>
+
+<p>If <a href="../uri.html">URI filename</a> interpretation is enabled, and the filename argument
+begins with "file:", then the filename is interpreted as a URI. URI
+filename interpretation is enabled if the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_URI</a> flag is
+set in the third argument to sqlite3_open_v2(), or if it has
+been enabled globally using the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiguri">SQLITE_CONFIG_URI</a> option with the
+<a href="../c3ref/config.html">sqlite3_config()</a> method or by the <a href="../compile.html#use_uri">SQLITE_USE_URI</a> compile-time option.
+URI filename interpretation is turned off
+by default, but future releases of SQLite might enable URI filename
+interpretation by default. See "<a href="../uri.html">URI filenames</a>" for additional
+information.</p>
+
+<p>URI filenames are parsed according to RFC 3986. If the URI contains an
+authority, then it must be either an empty string or the string
+"localhost". If the authority is not an empty string or "localhost", an
+error is returned to the caller. The fragment component of a URI, if
+present, is ignored.</p>
+
+<p>SQLite uses the path component of the URI as the name of the disk file
+which contains the database. If the path begins with a '/' character,
+then it is interpreted as an absolute path. If the path does not begin
+with a '/' (meaning that the authority section is omitted from the URI)
+then the path is interpreted as a relative path.
+On windows, the first component of an absolute path
+is a drive specification (e.g. "C:").</p>
+
+<p><a name="coreuriqueryparameters"></a>
+
+The query component of a URI may contain parameters that are interpreted
+either by SQLite itself, or by a <a href="../vfs.html">custom VFS implementation</a>.
+SQLite and its built-in <a href="../vfs.html">VFSes</a> interpret the
+following query parameters:</p>
+
+<p><ul>
+<li> <b>vfs</b>: The "vfs" parameter may be used to specify the name of
+a VFS object that provides the operating system interface that should
+be used to access the database file on disk. If this option is set to
+an empty string the default VFS object is used. Specifying an unknown
+VFS is an error. If sqlite3_open_v2() is used and the vfs option is
+present, then the VFS specified by the option takes precedence over
+the value passed as the fourth parameter to sqlite3_open_v2().</p>
+
+<p><li> <b>mode</b>: The mode parameter may be set to either "ro", "rw",
+"rwc", or "memory". Attempting to set it to any other value is
+an error.
+If "ro" is specified, then the database is opened for read-only
+access, just as if the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READONLY</a> flag had been set in the
+third argument to sqlite3_open_v2(). If the mode option is set to
+"rw", then the database is opened for read-write (but not create)
+access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had
+been set. Value "rwc" is equivalent to setting both
+SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE. If the mode option is
+set to "memory" then a pure <a href="../inmemorydb.html">in-memory database</a> that never reads
+or writes from disk is used. It is an error to specify a value for
+the mode parameter that is less restrictive than that specified by
+the flags passed in the third parameter to sqlite3_open_v2().</p>
+
+<p><li> <b>cache</b>: The cache parameter may be set to either "shared" or
+"private". Setting it to "shared" is equivalent to setting the
+SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to
+sqlite3_open_v2(). Setting the cache parameter to "private" is
+equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit.
+If sqlite3_open_v2() is used and the "cache" parameter is present in
+a URI filename, its value overrides any behavior requested by setting
+SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag.</p>
+
+<p><li> <b>psow</b>: The psow parameter indicates whether or not the
+<a href="../psow.html">powersafe overwrite</a> property does or does not apply to the
+storage media on which the database file resides.</p>
+
+<p><li> <b>nolock</b>: The nolock parameter is a boolean query parameter
+which if set disables file locking in rollback journal modes. This
+is useful for accessing a database on a filesystem that does not
+support locking. Caution: Database corruption might result if two
+or more processes write to the same database and any one of those
+processes uses nolock=1.</p>
+
+<p><li> <b>immutable</b>: The immutable parameter is a boolean query
+parameter that indicates that the database file is stored on
+read-only media. When immutable is set, SQLite assumes that the
+database file cannot be changed, even by a process with higher
+privilege, and so the database is opened read-only and all locking
+and change detection is disabled. Caution: Setting the immutable
+property on a database file that does in fact change can result
+in incorrect query results and/or <a href="../rescode.html#corrupt">SQLITE_CORRUPT</a> errors.
+See also: <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_IMMUTABLE</a>.</p>
+
+<p></ul></p>
+
+<p>Specifying an unknown parameter in the query component of a URI is not an
+error. Future versions of SQLite might understand additional query
+parameters. See "<a href="../uri.html#coreqp">query parameters with special meaning to SQLite</a>" for
+additional information.</p>
+
+<p><a name="urifilenameexamples"></a>
+ <h3>URI filename examples</h3></p>
+
+<p><table border="1" align=center cellpadding=5>
+<tr><th> URI filenames <th> Results
+<tr><td> file:data.db <td>
+Open the file "data.db" in the current directory.
+<tr><td> file:/home/fred/data.db<br>
+file:///home/fred/data.db <br>
+file://localhost/home/fred/data.db <br> <td>
+Open the database file "/home/fred/data.db".
+<tr><td> file://darkstar/home/fred/data.db <td>
+An error. "darkstar" is not a recognized authority.
+<tr><td style="white-space:nowrap">
+file:///C:/Documents%20and%20Settings/fred/Desktop/data.db
+<td> Windows only: Open the file "data.db" on fred's desktop on drive
+C:. Note that the %20 escaping in this example is not strictly
+necessary - space characters can be used literally
+in URI filenames.
+<tr><td> file:data.db?mode=ro&cache=private <td>
+Open file "data.db" in the current directory for read-only access.
+Regardless of whether or not shared-cache mode is enabled by
+default, use a private cache.
+<tr><td> file:/home/fred/data.db?vfs=unix-dotfile <td>
+Open file "/home/fred/data.db". Use the special VFS "unix-dotfile"
+that uses dot-files in place of posix advisory locking.
+<tr><td> file:data.db?mode=readonly <td>
+An error. "readonly" is not a valid option for the "mode" parameter.
+Use "ro" instead: "file:data.db?mode=ro".
+</table></p>
+
+<p>URI hexadecimal escape sequences (%HH) are supported within the path and
+query components of a URI. A hexadecimal escape sequence consists of a
+percent sign - "%" - followed by exactly two hexadecimal digits
+specifying an octet value. Before the path or query components of a
+URI filename are interpreted, they are encoded using UTF-8 and all
+hexadecimal escape sequences replaced by a single byte containing the
+corresponding octet. If this process generates an invalid UTF-8 encoding,
+the results are undefined.</p>
+
+<p><b>Note to Windows users:</b> The encoding used for the filename argument
+of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever
+codepage is currently defined. Filenames containing international
+characters must be converted to UTF-8 prior to passing them into
+sqlite3_open() or sqlite3_open_v2().</p>
+
+<p><b>Note to Windows Runtime users:</b> The temporary directory must be set
+prior to calling sqlite3_open() or sqlite3_open_v2(). Otherwise, various
+features that require the use of temporary files may fail.</p>
+
+<p>See also: <a href="../c3ref/temp_directory.html">sqlite3_temp_directory</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/overload_function.html b/www/c3ref/overload_function.html
new file mode 100644
index 0000000..b3350f7
--- /dev/null
+++ b/www/c3ref/overload_function.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Overload A Function For A Virtual Table</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_overload_function -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Overload A Function For A Virtual Table</h2>
+</div>
+<blockquote><pre>
+int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
+</pre></blockquote>
+<p>
+Virtual tables can provide alternative implementations of functions
+using the <a href="../vtab.html#xfindfunction">xFindFunction</a> method of the <a href="../c3ref/module.html">virtual table module</a>.
+But global versions of those functions
+must exist in order to be overloaded.</p>
+
+<p>This API makes sure a global version of a function with a particular
+name and number of parameters exists. If no such function exists
+before this API is called, a new function is created. The implementation
+of the new function always causes an exception to be thrown. So
+the new function is not good for anything by itself. Its only
+purpose is to be a placeholder function that can be overloaded
+by a <a href="../vtab.html">virtual table</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/pcache.html b/www/c3ref/pcache.html
new file mode 100644
index 0000000..03adaf0
--- /dev/null
+++ b/www/c3ref/pcache.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Custom Page Cache Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_pcache -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Custom Page Cache Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_pcache sqlite3_pcache;
+</pre></blockquote>
+<p>
+The sqlite3_pcache type is opaque. It is implemented by
+the pluggable module. The SQLite core has no knowledge of
+its size or internal structure and never deals with the
+sqlite3_pcache object except by holding and passing pointers
+to the object.</p>
+
+<p>See <a href="../c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> for additional information.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/pcache_methods2.html b/www/c3ref/pcache_methods2.html
new file mode 100644
index 0000000..650df2f
--- /dev/null
+++ b/www/c3ref/pcache_methods2.html
@@ -0,0 +1,311 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Application Defined Page Cache.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {page cache} sqlite3_pcache_methods2 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Application Defined Page Cache.</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2;
+struct sqlite3_pcache_methods2 {
+ int iVersion;
+ void *pArg;
+ int (*xInit)(void*);
+ void (*xShutdown)(void*);
+ sqlite3_pcache *(*xCreate)(int szPage, int szExtra, int bPurgeable);
+ void (*xCachesize)(sqlite3_pcache*, int nCachesize);
+ int (*xPagecount)(sqlite3_pcache*);
+ sqlite3_pcache_page *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag);
+ void (*xUnpin)(sqlite3_pcache*, sqlite3_pcache_page*, int discard);
+ void (*xRekey)(sqlite3_pcache*, sqlite3_pcache_page*,
+ unsigned oldKey, unsigned newKey);
+ void (*xTruncate)(sqlite3_pcache*, unsigned iLimit);
+ void (*xDestroy)(sqlite3_pcache*);
+ void (*xShrink)(sqlite3_pcache*);
+};
+</pre></blockquote>
+<p>
+The <a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a>, ...) interface can
+register an alternative page cache implementation by passing in an
+instance of the sqlite3_pcache_methods2 structure.
+In many applications, most of the heap memory allocated by
+SQLite is used for the page cache.
+By implementing a
+custom page cache using this API, an application can better control
+the amount of memory consumed by SQLite, the way in which
+that memory is allocated and released, and the policies used to
+determine exactly which parts of a database file are cached and for
+how long.</p>
+
+<p>The alternative page cache mechanism is an
+extreme measure that is only needed by the most demanding applications.
+The built-in page cache is recommended for most uses.</p>
+
+<p>The contents of the sqlite3_pcache_methods2 structure are copied to an
+internal buffer by SQLite within the call to <a href="../c3ref/config.html">sqlite3_config</a>. Hence
+the application may discard the parameter after the call to
+<a href="../c3ref/config.html">sqlite3_config()</a> returns.</p>
+
+<p><a name="thexinitpagecachemethod"></a>
+
+The xInit() method is called once for each effective
+call to <a href="../c3ref/initialize.html">sqlite3_initialize()</a>
+(usually only once during the lifetime of the process). The xInit()
+method is passed a copy of the sqlite3_pcache_methods2.pArg value.
+The intent of the xInit() method is to set up global data structures
+required by the custom page cache implementation.
+If the xInit() method is NULL, then the
+built-in default page cache is used instead of the application defined
+page cache.</p>
+
+<p><a name="thexshutdownpagecachemethod"></a>
+
+The xShutdown() method is called by <a href="../c3ref/initialize.html">sqlite3_shutdown()</a>.
+It can be used to clean up
+any outstanding resources before process shutdown, if required.
+The xShutdown() method may be NULL.</p>
+
+<p>SQLite automatically serializes calls to the xInit method,
+so the xInit method need not be threadsafe. The
+xShutdown method is only called from <a href="../c3ref/initialize.html">sqlite3_shutdown()</a> so it does
+not need to be threadsafe either. All other methods must be threadsafe
+in multithreaded applications.</p>
+
+<p>SQLite will never invoke xInit() more than once without an intervening
+call to xShutdown().</p>
+
+<p><a name="thexcreatepagecachemethods"></a>
+
+SQLite invokes the xCreate() method to construct a new cache instance.
+SQLite will typically create one cache instance for each open database file,
+though this is not guaranteed. The
+first parameter, szPage, is the size in bytes of the pages that must
+be allocated by the cache. szPage will always a power of two. The
+second parameter szExtra is a number of bytes of extra storage
+associated with each page cache entry. The szExtra parameter will
+a number less than 250. SQLite will use the
+extra szExtra bytes on each page to store metadata about the underlying
+database page on disk. The value passed into szExtra depends
+on the SQLite version, the target platform, and how SQLite was compiled.
+The third argument to xCreate(), bPurgeable, is true if the cache being
+created will be used to cache database pages of a file stored on disk, or
+false if it is used for an in-memory database. The cache implementation
+does not have to do anything special based with the value of bPurgeable;
+it is purely advisory. On a cache where bPurgeable is false, SQLite will
+never invoke xUnpin() except to deliberately delete a page.
+In other words, calls to xUnpin() on a cache with bPurgeable set to
+false will always have the "discard" flag set to true.
+Hence, a cache created with bPurgeable false will
+never contain any unpinned pages.</p>
+
+<p><a name="thexcachesizepagecachemethod"></a>
+
+The xCachesize() method may be called at any time by SQLite to set the
+suggested maximum cache-size (number of pages stored by) the cache
+instance passed as the first argument. This is the value configured using
+the SQLite "<a href="../pragma.html#pragma_cache_size">PRAGMA cache_size</a>" command. As with the bPurgeable
+parameter, the implementation is not required to do anything with this
+value; it is advisory only.</p>
+
+<p><a name="thexpagecountpagecachemethods"></a>
+
+The xPagecount() method must return the number of pages currently
+stored in the cache, both pinned and unpinned.</p>
+
+<p><a name="thexfetchpagecachemethods"></a>
+
+The xFetch() method locates a page in the cache and returns a pointer to
+an sqlite3_pcache_page object associated with that page, or a NULL pointer.
+The pBuf element of the returned sqlite3_pcache_page object will be a
+pointer to a buffer of szPage bytes used to store the content of a
+single database page. The pExtra element of sqlite3_pcache_page will be
+a pointer to the szExtra bytes of extra storage that SQLite has requested
+for each entry in the page cache.</p>
+
+<p>The page to be fetched is determined by the key. The minimum key value
+is 1. After it has been retrieved using xFetch, the page is considered
+to be "pinned".</p>
+
+<p>If the requested page is already in the page cache, then the page cache
+implementation must return a pointer to the page buffer with its content
+intact. If the requested page is not already in the cache, then the
+cache implementation should use the value of the createFlag
+parameter to help it determined what action to take:</p>
+
+<p><table border=1 width=85% align=center>
+<tr><th> createFlag <th> Behavior when page is not already in cache
+<tr><td> 0 <td> Do not allocate a new page. Return NULL.
+<tr><td> 1 <td> Allocate a new page if it easy and convenient to do so.
+Otherwise return NULL.
+<tr><td> 2 <td> Make every effort to allocate a new page. Only return
+NULL if allocating a new page is effectively impossible.
+</table></p>
+
+<p>SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite
+will only use a createFlag of 2 after a prior call with a createFlag of 1
+failed. In between the xFetch() calls, SQLite may
+attempt to unpin one or more cache pages by spilling the content of
+pinned pages to disk and synching the operating system disk cache.</p>
+
+<p><a name="thexunpinpagecachemethod"></a>
+
+xUnpin() is called by SQLite with a pointer to a currently pinned page
+as its second argument. If the third parameter, discard, is non-zero,
+then the page must be evicted from the cache.
+If the discard parameter is
+zero, then the page may be discarded or retained at the discretion of
+page cache implementation. The page cache implementation
+may choose to evict unpinned pages at any time.</p>
+
+<p>The cache must not perform any reference counting. A single
+call to xUnpin() unpins the page regardless of the number of prior calls
+to xFetch().</p>
+
+<p><a name="thexrekeypagecachemethods"></a>
+
+The xRekey() method is used to change the key value associated with the
+page passed as the second argument. If the cache
+previously contains an entry associated with newKey, it must be
+discarded. Any prior cache entry associated with newKey is guaranteed not
+to be pinned.</p>
+
+<p>When SQLite calls the xTruncate() method, the cache must discard all
+existing cache entries with page numbers (keys) greater than or equal
+to the value of the iLimit parameter passed to xTruncate(). If any
+of these pages are pinned, they are implicitly unpinned, meaning that
+they can be safely discarded.</p>
+
+<p><a name="thexdestroypagecachemethod"></a>
+
+The xDestroy() method is used to delete a cache allocated by xCreate().
+All resources associated with the specified cache should be freed. After
+calling the xDestroy() method, SQLite considers the <a href="../c3ref/pcache.html">sqlite3_pcache*</a>
+handle invalid, and will not use it with any other sqlite3_pcache_methods2
+functions.</p>
+
+<p><a name="thexshrinkpagecachemethod"></a>
+
+SQLite invokes the xShrink() method when it wants the page cache to
+free up as much of heap memory as possible. The page cache implementation
+is not obligated to free any memory, but well-behaved implementations should
+do their best.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/pcache_page.html b/www/c3ref/pcache_page.html
new file mode 100644
index 0000000..287d941
--- /dev/null
+++ b/www/c3ref/pcache_page.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Custom Page Cache Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_pcache_page -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Custom Page Cache Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_pcache_page sqlite3_pcache_page;
+struct sqlite3_pcache_page {
+ void *pBuf; /* The content of the page */
+ void *pExtra; /* Extra information associated with the page */
+};
+</pre></blockquote>
+<p>
+The sqlite3_pcache_page object represents a single page in the
+page cache. The page cache will allocate instances of this
+object. Various methods of the page cache use pointers to instances
+of this object as parameters or as their return value.</p>
+
+<p>See <a href="../c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> for additional information.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/prepare.html b/www/c3ref/prepare.html
new file mode 100644
index 0000000..beca2cd
--- /dev/null
+++ b/www/c3ref/prepare.html
@@ -0,0 +1,267 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Compiling An SQL Statement</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {SQL statement compiler} sqlite3_prepare sqlite3_prepare16 sqlite3_prepare16_v2 sqlite3_prepare16_v3 sqlite3_prepare_v2 sqlite3_prepare_v3 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Compiling An SQL Statement</h2>
+</div>
+<blockquote><pre>
+int sqlite3_prepare(
+ sqlite3 *db, /* Database handle */
+ const char *zSql, /* SQL statement, UTF-8 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const char **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+int sqlite3_prepare_v2(
+ sqlite3 *db, /* Database handle */
+ const char *zSql, /* SQL statement, UTF-8 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const char **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+int sqlite3_prepare_v3(
+ sqlite3 *db, /* Database handle */
+ const char *zSql, /* SQL statement, UTF-8 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const char **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+int sqlite3_prepare16(
+ sqlite3 *db, /* Database handle */
+ const void *zSql, /* SQL statement, UTF-16 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const void **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+int sqlite3_prepare16_v2(
+ sqlite3 *db, /* Database handle */
+ const void *zSql, /* SQL statement, UTF-16 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const void **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+int sqlite3_prepare16_v3(
+ sqlite3 *db, /* Database handle */
+ const void *zSql, /* SQL statement, UTF-16 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const void **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+</pre></blockquote>
+<p>
+To execute an SQL statement, it must first be compiled into a byte-code
+program using one of these routines. Or, in other words, these routines
+are constructors for the <a href="../c3ref/stmt.html">prepared statement</a> object.</p>
+
+<p>The preferred routine to use is <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>. The
+<a href="../c3ref/prepare.html">sqlite3_prepare()</a> interface is legacy and should be avoided.
+<a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> has an extra "prepFlags" option that is used
+for special purposes.</p>
+
+<p>The use of the UTF-8 interfaces is preferred, as SQLite currently
+does all parsing using UTF-8. The UTF-16 interfaces are provided
+as a convenience. The UTF-16 interfaces work by converting the
+input text into UTF-8, then invoking the corresponding UTF-8 interface.</p>
+
+<p>The first argument, "db", is a <a href="../c3ref/sqlite3.html">database connection</a> obtained from a
+prior successful call to <a href="../c3ref/open.html">sqlite3_open()</a>, <a href="../c3ref/open.html">sqlite3_open_v2()</a> or
+<a href="../c3ref/open.html">sqlite3_open16()</a>. The database connection must not have been closed.</p>
+
+<p>The second argument, "zSql", is the statement to be compiled, encoded
+as either UTF-8 or UTF-16. The sqlite3_prepare(), sqlite3_prepare_v2(),
+and sqlite3_prepare_v3()
+interfaces use UTF-8, and sqlite3_prepare16(), sqlite3_prepare16_v2(),
+and sqlite3_prepare16_v3() use UTF-16.</p>
+
+<p>If the nByte argument is negative, then zSql is read up to the
+first zero terminator. If nByte is positive, then it is the
+number of bytes read from zSql. If nByte is zero, then no prepared
+statement is generated.
+If the caller knows that the supplied string is nul-terminated, then
+there is a small performance advantage to passing an nByte parameter that
+is the number of bytes in the input string <i>including</i>
+the nul-terminator.</p>
+
+<p>If pzTail is not NULL then *pzTail is made to point to the first byte
+past the end of the first SQL statement in zSql. These routines only
+compile the first statement in zSql, so *pzTail is left pointing to
+what remains uncompiled.</p>
+
+<p>*ppStmt is left pointing to a compiled <a href="../c3ref/stmt.html">prepared statement</a> that can be
+executed using <a href="../c3ref/step.html">sqlite3_step()</a>. If there is an error, *ppStmt is set
+to NULL. If the input text contains no SQL (if the input is an empty
+string or a comment) then *ppStmt is set to NULL.
+The calling procedure is responsible for deleting the compiled
+SQL statement using <a href="../c3ref/finalize.html">sqlite3_finalize()</a> after it has finished with it.
+ppStmt may not be NULL.</p>
+
+<p>On success, the sqlite3_prepare() family of routines return <a href="../rescode.html#ok">SQLITE_OK</a>;
+otherwise an <a href="../rescode.html">error code</a> is returned.</p>
+
+<p>The sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(),
+and sqlite3_prepare16_v3() interfaces are recommended for all new programs.
+The older interfaces (sqlite3_prepare() and sqlite3_prepare16())
+are retained for backwards compatibility, but their use is discouraged.
+In the "vX" interfaces, the prepared statement
+that is returned (the <a href="../c3ref/stmt.html">sqlite3_stmt</a> object) contains a copy of the
+original SQL text. This causes the <a href="../c3ref/step.html">sqlite3_step()</a> interface to
+behave differently in three ways:</p>
+
+<p><ol>
+<li>
+If the database schema changes, instead of returning <a href="../rescode.html#schema">SQLITE_SCHEMA</a> as it
+always used to do, <a href="../c3ref/step.html">sqlite3_step()</a> will automatically recompile the SQL
+statement and try to run it again. As many as <a href="../compile.html#max_schema_retry">SQLITE_MAX_SCHEMA_RETRY</a>
+retries will occur before sqlite3_step() gives up and returns an error.
+</li></p>
+
+<p><li>
+When an error occurs, <a href="../c3ref/step.html">sqlite3_step()</a> will return one of the detailed
+<a href="../rescode.html">error codes</a> or <a href="../rescode.html#extrc">extended error codes</a>. The legacy behavior was that
+<a href="../c3ref/step.html">sqlite3_step()</a> would only return a generic <a href="../rescode.html#error">SQLITE_ERROR</a> result code
+and the application would have to make a second call to <a href="../c3ref/reset.html">sqlite3_reset()</a>
+in order to find the underlying cause of the problem. With the "v2" prepare
+interfaces, the underlying reason for the error is returned immediately.
+</li></p>
+
+<p><li>
+If the specific value bound to a <a href="../lang_expr.html#varparam">host parameter</a> in the
+WHERE clause might influence the choice of query plan for a statement,
+then the statement will be automatically recompiled, as if there had been
+a schema change, on the first <a href="../c3ref/step.html">sqlite3_step()</a> call following any change
+to the <a href="../c3ref/bind_blob.html">bindings</a> of that <a href="../lang_expr.html#varparam">parameter</a>.
+The specific value of a WHERE-clause <a href="../lang_expr.html#varparam">parameter</a> might influence the
+choice of query plan if the parameter is the left-hand side of a <a href="../lang_expr.html#like">LIKE</a>
+or <a href="../lang_expr.html#glob">GLOB</a> operator or if the parameter is compared to an indexed column
+and the <a href="../compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time option is enabled.
+</li>
+</ol></p>
+
+<p><p>sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having
+the extra prepFlags parameter, which is a bit array consisting of zero or
+more of the <a href="../c3ref/c_prepare_normalize.html#sqlitepreparepersistent">SQLITE_PREPARE_*</a> flags. The
+sqlite3_prepare_v2() interface works exactly the same as
+sqlite3_prepare_v3() with a zero prepFlags parameter.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/preupdate_blobwrite.html b/www/c3ref/preupdate_blobwrite.html
new file mode 100644
index 0000000..126ca27
--- /dev/null
+++ b/www/c3ref/preupdate_blobwrite.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>The pre-update hook.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_preupdate_blobwrite sqlite3_preupdate_count sqlite3_preupdate_depth sqlite3_preupdate_hook sqlite3_preupdate_new sqlite3_preupdate_old -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>The pre-update hook.</h2>
+</div>
+<blockquote><pre>
+#if defined(SQLITE_ENABLE_PREUPDATE_HOOK)
+void *sqlite3_preupdate_hook(
+ sqlite3 *db,
+ void(*xPreUpdate)(
+ void *pCtx, /* Copy of third arg to preupdate_hook() */
+ sqlite3 *db, /* Database handle */
+ int op, /* SQLITE_UPDATE, DELETE or INSERT */
+ char const *zDb, /* Database name */
+ char const *zName, /* Table name */
+ sqlite3_int64 iKey1, /* Rowid of row about to be deleted/updated */
+ sqlite3_int64 iKey2 /* New rowid value (for a rowid UPDATE) */
+ ),
+ void*
+);
+int sqlite3_preupdate_old(sqlite3 *, int, sqlite3_value **);
+int sqlite3_preupdate_count(sqlite3 *);
+int sqlite3_preupdate_depth(sqlite3 *);
+int sqlite3_preupdate_new(sqlite3 *, int, sqlite3_value **);
+int sqlite3_preupdate_blobwrite(sqlite3 *);
+#endif
+</pre></blockquote>
+<p>
+These interfaces are only available if SQLite is compiled using the
+<a href="../compile.html#enable_preupdate_hook">SQLITE_ENABLE_PREUPDATE_HOOK</a> compile-time option.</p>
+
+<p>The <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_hook()</a> interface registers a callback function
+that is invoked prior to each <a href="../lang_insert.html">INSERT</a>, <a href="../lang_update.html">UPDATE</a>, and <a href="../lang_delete.html">DELETE</a> operation
+on a database table.
+At most one preupdate hook may be registered at a time on a single
+<a href="../c3ref/sqlite3.html">database connection</a>; each call to <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_hook()</a> overrides
+the previous setting.
+The preupdate hook is disabled by invoking <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_hook()</a>
+with a NULL pointer as the second parameter.
+The third parameter to <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_hook()</a> is passed through as
+the first parameter to callbacks.</p>
+
+<p>The preupdate hook only fires for changes to real database tables; the
+preupdate hook is not invoked for changes to <a href="../vtab.html">virtual tables</a> or to
+system tables like sqlite_sequence or sqlite_stat1.</p>
+
+<p>The second parameter to the preupdate callback is a pointer to
+the <a href="../c3ref/sqlite3.html">database connection</a> that registered the preupdate hook.
+The third parameter to the preupdate callback is one of the constants
+<a href="../c3ref/c_alter_table.html">SQLITE_INSERT</a>, <a href="../c3ref/c_alter_table.html">SQLITE_DELETE</a>, or <a href="../c3ref/c_alter_table.html">SQLITE_UPDATE</a> to identify the
+kind of update operation that is about to occur.
+The fourth parameter to the preupdate callback is the name of the
+database within the database connection that is being modified. This
+will be "main" for the main database or "temp" for TEMP tables or
+the name given after the AS keyword in the <a href="../lang_attach.html">ATTACH</a> statement for attached
+databases.
+The fifth parameter to the preupdate callback is the name of the
+table that is being modified.</p>
+
+<p>For an UPDATE or DELETE operation on a <a href="../rowidtable.html">rowid table</a>, the sixth
+parameter passed to the preupdate callback is the initial <a href="../lang_createtable.html#rowid">rowid</a> of the
+row being modified or deleted. For an INSERT operation on a rowid table,
+or any operation on a WITHOUT ROWID table, the value of the sixth
+parameter is undefined. For an INSERT or UPDATE on a rowid table the
+seventh parameter is the final rowid value of the row being inserted
+or updated. The value of the seventh parameter passed to the callback
+function is not defined for operations on WITHOUT ROWID tables, or for
+DELETE operations on rowid tables.</p>
+
+<p>The <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_old()</a>, <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_new()</a>,
+<a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_count()</a>, and <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_depth()</a> interfaces
+provide additional information about a preupdate event. These routines
+may only be called from within a preupdate callback. Invoking any of
+these routines from outside of a preupdate callback or with a
+<a href="../c3ref/sqlite3.html">database connection</a> pointer that is different from the one supplied
+to the preupdate callback results in undefined and probably undesirable
+behavior.</p>
+
+<p>The <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_count(D)</a> interface returns the number of columns
+in the row that is being inserted, updated, or deleted.</p>
+
+<p>The <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_old(D,N,P)</a> interface writes into P a pointer to
+a <a href="../c3ref/value.html">protected sqlite3_value</a> that contains the value of the Nth column of
+the table row before it is updated. The N parameter must be between 0
+and one less than the number of columns or the behavior will be
+undefined. This must only be used within SQLITE_UPDATE and SQLITE_DELETE
+preupdate callbacks; if it is used by an SQLITE_INSERT callback then the
+behavior is undefined. The <a href="../c3ref/value.html">sqlite3_value</a> that P points to
+will be destroyed when the preupdate callback returns.</p>
+
+<p>The <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_new(D,N,P)</a> interface writes into P a pointer to
+a <a href="../c3ref/value.html">protected sqlite3_value</a> that contains the value of the Nth column of
+the table row after it is updated. The N parameter must be between 0
+and one less than the number of columns or the behavior will be
+undefined. This must only be used within SQLITE_INSERT and SQLITE_UPDATE
+preupdate callbacks; if it is used by an SQLITE_DELETE callback then the
+behavior is undefined. The <a href="../c3ref/value.html">sqlite3_value</a> that P points to
+will be destroyed when the preupdate callback returns.</p>
+
+<p>The <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_depth(D)</a> interface returns 0 if the preupdate
+callback was invoked as a result of a direct insert, update, or delete
+operation; or 1 for inserts, updates, or deletes invoked by top-level
+triggers; or 2 for changes resulting from triggers called by top-level
+triggers; and so forth.</p>
+
+<p>When the <a href="../c3ref/blob_write.html">sqlite3_blob_write()</a> API is used to update a blob column,
+the pre-update hook is invoked with SQLITE_DELETE. This is because the
+in this case the new values are not available. In this case, when a
+callback made with op==SQLITE_DELETE is actuall a write using the
+sqlite3_blob_write() API, the <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_blobwrite()</a> returns
+the index of the column being written. In other cases, where the
+pre-update hook is being invoked for some other reason, including a
+regular DELETE, sqlite3_preupdate_blobwrite() returns -1.</p>
+
+<p>See also: <a href="../c3ref/update_hook.html">sqlite3_update_hook()</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/profile.html b/www/c3ref/profile.html
new file mode 100644
index 0000000..2d292f4
--- /dev/null
+++ b/www/c3ref/profile.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Tracing And Profiling Functions</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_profile sqlite3_trace -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Tracing And Profiling Functions</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_trace(sqlite3*,
+ void(*xTrace)(void*,const char*), void*);
+void *sqlite3_profile(sqlite3*,
+ void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
+</pre></blockquote>
+<p>
+These routines are deprecated. Use the <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a> interface
+instead of the routines described here.</p>
+
+<p>These routines register callback functions that can be used for
+tracing and profiling the execution of SQL statements.</p>
+
+<p>The callback function registered by sqlite3_trace() is invoked at
+various times when an SQL statement is being run by <a href="../c3ref/step.html">sqlite3_step()</a>.
+The sqlite3_trace() callback is invoked with a UTF-8 rendering of the
+SQL statement text as the statement first begins executing.
+Additional sqlite3_trace() callbacks might occur
+as each triggered subprogram is entered. The callbacks for triggers
+contain a UTF-8 SQL comment that identifies the trigger.</p>
+
+<p>The <a href="../compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> compile-time option can be used to limit
+the length of <a href="../lang_expr.html#varparam">bound parameter</a> expansion in the output of sqlite3_trace().</p>
+
+<p>The callback function registered by sqlite3_profile() is invoked
+as each SQL statement finishes. The profile callback contains
+the original statement text and an estimate of wall-clock time
+of how long that statement took to run. The profile callback
+time is in units of nanoseconds, however the current implementation
+is only capable of millisecond resolution so the six least significant
+digits in the time are meaningless. Future versions of SQLite
+might provide greater resolution on the profiler callback. Invoking
+either <a href="../c3ref/profile.html">sqlite3_trace()</a> or <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a> will cancel the
+profile callback.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/progress_handler.html b/www/c3ref/progress_handler.html
new file mode 100644
index 0000000..e2c91b1
--- /dev/null
+++ b/www/c3ref/progress_handler.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Query Progress Callbacks</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_progress_handler -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Query Progress Callbacks</h2>
+</div>
+<blockquote><pre>
+void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
+</pre></blockquote>
+<p>
+The sqlite3_progress_handler(D,N,X,P) interface causes the callback
+function X to be invoked periodically during long running calls to
+<a href="../c3ref/exec.html">sqlite3_exec()</a>, <a href="../c3ref/step.html">sqlite3_step()</a> and <a href="../c3ref/free_table.html">sqlite3_get_table()</a> for
+database connection D. An example use for this
+interface is to keep a GUI updated during a large query.</p>
+
+<p>The parameter P is passed through as the only parameter to the
+callback function X. The parameter N is the approximate number of
+<a href="../opcode.html">virtual machine instructions</a> that are evaluated between successive
+invocations of the callback X. If N is less than one then the progress
+handler is disabled.</p>
+
+<p>Only a single progress handler may be defined at one time per
+<a href="../c3ref/sqlite3.html">database connection</a>; setting a new progress handler cancels the
+old one. Setting parameter X to NULL disables the progress handler.
+The progress handler is also disabled by setting N to a value less
+than 1.</p>
+
+<p>If the progress callback returns non-zero, the operation is
+interrupted. This feature can be used to implement a
+"Cancel" button on a GUI progress dialog box.</p>
+
+<p>The progress handler callback must not do anything that will modify
+the database connection that invoked the progress handler.
+Note that <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> and <a href="../c3ref/step.html">sqlite3_step()</a> both modify their
+database connections for the meaning of "modify" in this paragraph.</p>
+
+<p></p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/randomness.html b/www/c3ref/randomness.html
new file mode 100644
index 0000000..89aaaf0
--- /dev/null
+++ b/www/c3ref/randomness.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Pseudo-Random Number Generator</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_randomness -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Pseudo-Random Number Generator</h2>
+</div>
+<blockquote><pre>
+void sqlite3_randomness(int N, void *P);
+</pre></blockquote>
+<p>
+SQLite contains a high-quality pseudo-random number generator (PRNG) used to
+select random <a href="../lang_createtable.html#rowid">ROWIDs</a> when inserting new records into a table that
+already uses the largest possible <a href="../lang_createtable.html#rowid">ROWID</a>. The PRNG is also used for
+the built-in random() and randomblob() SQL functions. This interface allows
+applications to access the same PRNG for other purposes.</p>
+
+<p>A call to this routine stores N bytes of randomness into buffer P.
+The P parameter can be a NULL pointer.</p>
+
+<p>If this routine has not been previously called or if the previous
+call had N less than one or a NULL pointer for P, then the PRNG is
+seeded using randomness obtained from the xRandomness method of
+the default <a href="../c3ref/vfs.html">sqlite3_vfs</a> object.
+If the previous call to this routine had an N of 1 or more and a
+non-NULL P then the pseudo-randomness is generated
+internally and without recourse to the <a href="../c3ref/vfs.html">sqlite3_vfs</a> xRandomness
+method.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/release_memory.html b/www/c3ref/release_memory.html
new file mode 100644
index 0000000..4b24de2
--- /dev/null
+++ b/www/c3ref/release_memory.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Attempt To Free Heap Memory</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_release_memory -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Attempt To Free Heap Memory</h2>
+</div>
+<blockquote><pre>
+int sqlite3_release_memory(int);
+</pre></blockquote>
+<p>
+The sqlite3_release_memory() interface attempts to free N bytes
+of heap memory by deallocating non-essential memory allocations
+held by the database library. Memory used to cache database
+pages to improve performance is an example of non-essential memory.
+sqlite3_release_memory() returns the number of bytes actually freed,
+which might be more or less than the amount requested.
+The sqlite3_release_memory() routine is a no-op returning zero
+if SQLite is not compiled with <a href="../compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a>.</p>
+
+<p>See also: <a href="../c3ref/db_release_memory.html">sqlite3_db_release_memory()</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/reset.html b/www/c3ref/reset.html
new file mode 100644
index 0000000..734349a
--- /dev/null
+++ b/www/c3ref/reset.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Reset A Prepared Statement Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_reset -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Reset A Prepared Statement Object</h2>
+</div>
+<blockquote><pre>
+int sqlite3_reset(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+The sqlite3_reset() function is called to reset a <a href="../c3ref/stmt.html">prepared statement</a>
+object back to its initial state, ready to be re-executed.
+Any SQL statement variables that had values bound to them using
+the <a href="../c3ref/bind_blob.html">sqlite3_bind_*() API</a> retain their values.
+Use <a href="../c3ref/clear_bindings.html">sqlite3_clear_bindings()</a> to reset the bindings.</p>
+
+<p>The <a href="../c3ref/reset.html">sqlite3_reset(S)</a> interface resets the <a href="../c3ref/stmt.html">prepared statement</a> S
+back to the beginning of its program.</p>
+
+<p>If the most recent call to <a href="../c3ref/step.html">sqlite3_step(S)</a> for the
+<a href="../c3ref/stmt.html">prepared statement</a> S returned <a href="../rescode.html#row">SQLITE_ROW</a> or <a href="../rescode.html#done">SQLITE_DONE</a>,
+or if <a href="../c3ref/step.html">sqlite3_step(S)</a> has never before been called on S,
+then <a href="../c3ref/reset.html">sqlite3_reset(S)</a> returns <a href="../rescode.html#ok">SQLITE_OK</a>.</p>
+
+<p>If the most recent call to <a href="../c3ref/step.html">sqlite3_step(S)</a> for the
+<a href="../c3ref/stmt.html">prepared statement</a> S indicated an error, then
+<a href="../c3ref/reset.html">sqlite3_reset(S)</a> returns an appropriate <a href="../rescode.html">error code</a>.</p>
+
+<p>The <a href="../c3ref/reset.html">sqlite3_reset(S)</a> interface does not change the values
+of any <a href="../c3ref/bind_blob.html">bindings</a> on the <a href="../c3ref/stmt.html">prepared statement</a> S.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/reset_auto_extension.html b/www/c3ref/reset_auto_extension.html
new file mode 100644
index 0000000..d9fb245
--- /dev/null
+++ b/www/c3ref/reset_auto_extension.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Reset Automatic Extension Loading</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_reset_auto_extension -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Reset Automatic Extension Loading</h2>
+</div>
+<blockquote><pre>
+void sqlite3_reset_auto_extension(void);
+</pre></blockquote>
+<p>
+This interface disables all automatic extensions previously
+registered using <a href="../c3ref/auto_extension.html">sqlite3_auto_extension()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/result_blob.html b/www/c3ref/result_blob.html
new file mode 100644
index 0000000..028abda
--- /dev/null
+++ b/www/c3ref/result_blob.html
@@ -0,0 +1,294 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Setting The Result Of An SQL Function</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_result_blob sqlite3_result_blob64 sqlite3_result_double sqlite3_result_error sqlite3_result_error16 sqlite3_result_error_code sqlite3_result_error_nomem sqlite3_result_error_toobig sqlite3_result_int sqlite3_result_int64 sqlite3_result_null sqlite3_result_pointer sqlite3_result_text sqlite3_result_text16 sqlite3_result_text16be sqlite3_result_text16le sqlite3_result_text64 sqlite3_result_value sqlite3_result_zeroblob sqlite3_result_zeroblob64 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Setting The Result Of An SQL Function</h2>
+</div>
+<blockquote><pre>
+void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
+void sqlite3_result_blob64(sqlite3_context*,const void*,
+ sqlite3_uint64,void(*)(void*));
+void sqlite3_result_double(sqlite3_context*, double);
+void sqlite3_result_error(sqlite3_context*, const char*, int);
+void sqlite3_result_error16(sqlite3_context*, const void*, int);
+void sqlite3_result_error_toobig(sqlite3_context*);
+void sqlite3_result_error_nomem(sqlite3_context*);
+void sqlite3_result_error_code(sqlite3_context*, int);
+void sqlite3_result_int(sqlite3_context*, int);
+void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
+void sqlite3_result_null(sqlite3_context*);
+void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
+void sqlite3_result_text64(sqlite3_context*, const char*,sqlite3_uint64,
+ void(*)(void*), unsigned char encoding);
+void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
+void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
+void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
+void sqlite3_result_value(sqlite3_context*, sqlite3_value*);
+void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*));
+void sqlite3_result_zeroblob(sqlite3_context*, int n);
+int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n);
+</pre></blockquote>
+<p>
+These routines are used by the xFunc or xFinal callbacks that
+implement SQL functions and aggregates. See
+<a href="../c3ref/create_function.html">sqlite3_create_function()</a> and <a href="../c3ref/create_function.html">sqlite3_create_function16()</a>
+for additional information.</p>
+
+<p>These functions work very much like the <a href="../c3ref/bind_blob.html">parameter binding</a> family of
+functions used to bind values to host parameters in prepared statements.
+Refer to the <a href="../c3ref/bind_blob.html">SQL parameter</a> documentation for additional information.</p>
+
+<p>The sqlite3_result_blob() interface sets the result from
+an application-defined function to be the BLOB whose content is pointed
+to by the second parameter and which is N bytes long where N is the
+third parameter.</p>
+
+<p>The sqlite3_result_zeroblob(C,N) and sqlite3_result_zeroblob64(C,N)
+interfaces set the result of the application-defined function to be
+a BLOB containing all zero bytes and N bytes in size.</p>
+
+<p>The sqlite3_result_double() interface sets the result from
+an application-defined function to be a floating point value specified
+by its 2nd argument.</p>
+
+<p>The sqlite3_result_error() and sqlite3_result_error16() functions
+cause the implemented SQL function to throw an exception.
+SQLite uses the string pointed to by the
+2nd parameter of sqlite3_result_error() or sqlite3_result_error16()
+as the text of an error message. SQLite interprets the error
+message string from sqlite3_result_error() as UTF-8. SQLite
+interprets the string from sqlite3_result_error16() as UTF-16 using
+the same <a href="../c3ref/bind_blob.html#byteorderdeterminationrules">byte-order determination rules</a> as <a href="../c3ref/bind_blob.html">sqlite3_bind_text16()</a>.
+If the third parameter to sqlite3_result_error()
+or sqlite3_result_error16() is negative then SQLite takes as the error
+message all text up through the first zero character.
+If the third parameter to sqlite3_result_error() or
+sqlite3_result_error16() is non-negative then SQLite takes that many
+bytes (not characters) from the 2nd parameter as the error message.
+The sqlite3_result_error() and sqlite3_result_error16()
+routines make a private copy of the error message text before
+they return. Hence, the calling function can deallocate or
+modify the text after they return without harm.
+The sqlite3_result_error_code() function changes the error code
+returned by SQLite as a result of an error in a function. By default,
+the error code is SQLITE_ERROR. A subsequent call to sqlite3_result_error()
+or sqlite3_result_error16() resets the error code to SQLITE_ERROR.</p>
+
+<p>The sqlite3_result_error_toobig() interface causes SQLite to throw an
+error indicating that a string or BLOB is too long to represent.</p>
+
+<p>The sqlite3_result_error_nomem() interface causes SQLite to throw an
+error indicating that a memory allocation failed.</p>
+
+<p>The sqlite3_result_int() interface sets the return value
+of the application-defined function to be the 32-bit signed integer
+value given in the 2nd argument.
+The sqlite3_result_int64() interface sets the return value
+of the application-defined function to be the 64-bit signed integer
+value given in the 2nd argument.</p>
+
+<p>The sqlite3_result_null() interface sets the return value
+of the application-defined function to be NULL.</p>
+
+<p>The sqlite3_result_text(), sqlite3_result_text16(),
+sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces
+set the return value of the application-defined function to be
+a text string which is represented as UTF-8, UTF-16 native byte order,
+UTF-16 little endian, or UTF-16 big endian, respectively.
+The sqlite3_result_text64() interface sets the return value of an
+application-defined function to be a text string in an encoding
+specified by the fifth (and last) parameter, which must be one
+of <a href="../c3ref/c_any.html">SQLITE_UTF8</a>, <a href="../c3ref/c_any.html">SQLITE_UTF16</a>, <a href="../c3ref/c_any.html">SQLITE_UTF16BE</a>, or <a href="../c3ref/c_any.html">SQLITE_UTF16LE</a>.
+SQLite takes the text result from the application from
+the 2nd parameter of the sqlite3_result_text* interfaces.
+If the 3rd parameter to any of the sqlite3_result_text* interfaces
+other than sqlite3_result_text64() is negative, then SQLite computes
+the string length itself by searching the 2nd parameter for the first
+zero character.
+If the 3rd parameter to the sqlite3_result_text* interfaces
+is non-negative, then as many bytes (not characters) of the text
+pointed to by the 2nd parameter are taken as the application-defined
+function result. If the 3rd parameter is non-negative, then it
+must be the byte offset into the string where the NUL terminator would
+appear if the string where NUL terminated. If any NUL characters occur
+in the string at a byte offset that is less than the value of the 3rd
+parameter, then the resulting string will contain embedded NULs and the
+result of expressions operating on strings with embedded NULs is undefined.
+If the 4th parameter to the sqlite3_result_text* interfaces
+or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that
+function as the destructor on the text or BLOB result when it has
+finished using that result.
+If the 4th parameter to the sqlite3_result_text* interfaces or to
+sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite
+assumes that the text or BLOB result is in constant space and does not
+copy the content of the parameter nor call a destructor on the content
+when it has finished using that result.
+If the 4th parameter to the sqlite3_result_text* interfaces
+or sqlite3_result_blob is the special constant SQLITE_TRANSIENT
+then SQLite makes a copy of the result into space obtained
+from <a href="../c3ref/free.html">sqlite3_malloc()</a> before it returns.</p>
+
+<p>For the sqlite3_result_text16(), sqlite3_result_text16le(), and
+sqlite3_result_text16be() routines, and for sqlite3_result_text64()
+when the encoding is not UTF8, if the input UTF16 begins with a
+byte-order mark (BOM, U+FEFF) then the BOM is removed from the
+string and the rest of the string is interpreted according to the
+byte-order specified by the BOM. The byte-order specified by
+the BOM at the beginning of the text overrides the byte-order
+specified by the interface procedure. So, for example, if
+sqlite3_result_text16le() is invoked with text that begins
+with bytes 0xfe, 0xff (a big-endian byte-order mark) then the
+first two bytes of input are skipped and the remaining input
+is interpreted as UTF16BE text.</p>
+
+<p>For UTF16 input text to the sqlite3_result_text16(),
+sqlite3_result_text16be(), sqlite3_result_text16le(), and
+sqlite3_result_text64() routines, if the text contains invalid
+UTF16 characters, the invalid characters might be converted
+into the unicode replacement character, U+FFFD.</p>
+
+<p>The sqlite3_result_value() interface sets the result of
+the application-defined function to be a copy of the
+<a href="../c3ref/value.html">unprotected sqlite3_value</a> object specified by the 2nd parameter. The
+sqlite3_result_value() interface makes a copy of the <a href="../c3ref/value.html">sqlite3_value</a>
+so that the <a href="../c3ref/value.html">sqlite3_value</a> specified in the parameter may change or
+be deallocated after sqlite3_result_value() returns without harm.
+A <a href="../c3ref/value.html">protected sqlite3_value</a> object may always be used where an
+<a href="../c3ref/value.html">unprotected sqlite3_value</a> object is required, so either
+kind of <a href="../c3ref/value.html">sqlite3_value</a> object can be used with this interface.</p>
+
+<p>The sqlite3_result_pointer(C,P,T,D) interface sets the result to an
+SQL NULL value, just like <a href="../c3ref/result_blob.html">sqlite3_result_null(C)</a>, except that it
+also associates the host-language pointer P or type T with that
+NULL value such that the pointer can be retrieved within an
+<a href="../appfunc.html">application-defined SQL function</a> using <a href="../c3ref/value_blob.html">sqlite3_value_pointer()</a>.
+If the D parameter is not NULL, then it is a pointer to a destructor
+for the P parameter. SQLite invokes D with P as its only argument
+when SQLite is finished with P. The T parameter should be a static
+string and preferably a string literal. The sqlite3_result_pointer()
+routine is part of the <a href="../bindptr.html">pointer passing interface</a> added for SQLite 3.20.0.</p>
+
+<p>If these routines are called from within the different thread
+than the one containing the application-defined function that received
+the <a href="../c3ref/context.html">sqlite3_context</a> pointer, the results are undefined.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/result_subtype.html b/www/c3ref/result_subtype.html
new file mode 100644
index 0000000..68f09bd
--- /dev/null
+++ b/www/c3ref/result_subtype.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Setting The Subtype Of An SQL Function</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_result_subtype -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Setting The Subtype Of An SQL Function</h2>
+</div>
+<blockquote><pre>
+void sqlite3_result_subtype(sqlite3_context*,unsigned int);
+</pre></blockquote>
+<p>
+The sqlite3_result_subtype(C,T) function causes the subtype of
+the result from the <a href="../appfunc.html">application-defined SQL function</a> with
+<a href="../c3ref/context.html">sqlite3_context</a> C to be the value T. Only the lower 8 bits
+of the subtype T are preserved in current versions of SQLite;
+higher order bits are discarded.
+The number of subtype bytes preserved by SQLite might increase
+in future releases of SQLite.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/serialize.html b/www/c3ref/serialize.html
new file mode 100644
index 0000000..8eee988
--- /dev/null
+++ b/www/c3ref/serialize.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Serialize a database</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_serialize -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Serialize a database</h2>
+</div>
+<blockquote><pre>
+unsigned char *sqlite3_serialize(
+ sqlite3 *db, /* The database connection */
+ const char *zSchema, /* Which DB to serialize. ex: "main", "temp", ... */
+ sqlite3_int64 *piSize, /* Write size of the DB here, if not NULL */
+ unsigned int mFlags /* Zero or more SQLITE_SERIALIZE_* flags */
+);
+</pre></blockquote>
+<p>
+The sqlite3_serialize(D,S,P,F) interface returns a pointer to memory
+that is a serialization of the S database on <a href="../c3ref/sqlite3.html">database connection</a> D.
+If P is not a NULL pointer, then the size of the database in bytes
+is written into *P.</p>
+
+<p>For an ordinary on-disk database file, the serialization is just a
+copy of the disk file. For an in-memory database or a "TEMP" database,
+the serialization is the same sequence of bytes which would be written
+to disk if that database where backed up to disk.</p>
+
+<p>The usual case is that sqlite3_serialize() copies the serialization of
+the database into memory obtained from <a href="../c3ref/free.html">sqlite3_malloc64()</a> and returns
+a pointer to that memory. The caller is responsible for freeing the
+returned value to avoid a memory leak. However, if the F argument
+contains the SQLITE_SERIALIZE_NOCOPY bit, then no memory allocations
+are made, and the sqlite3_serialize() function will return a pointer
+to the contiguous memory representation of the database that SQLite
+is currently using for that database, or NULL if the no such contiguous
+memory representation of the database exists. A contiguous memory
+representation of the database will usually only exist if there has
+been a prior call to <a href="../c3ref/deserialize.html">sqlite3_deserialize(D,S,...)</a> with the same
+values of D and S.
+The size of the database is written into *P even if the
+SQLITE_SERIALIZE_NOCOPY bit is set but no contiguous copy
+of the database exists.</p>
+
+<p>A call to sqlite3_serialize(D,S,P,F) might return NULL even if the
+SQLITE_SERIALIZE_NOCOPY bit is omitted from argument F if a memory
+allocation error occurs.</p>
+
+<p>This interface is omitted if SQLite is compiled with the
+<a href="../compile.html#omit_deserialize">SQLITE_OMIT_DESERIALIZE</a> option.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/set_authorizer.html b/www/c3ref/set_authorizer.html
new file mode 100644
index 0000000..31d9c2c
--- /dev/null
+++ b/www/c3ref/set_authorizer.html
@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Compile-Time Authorization Callbacks</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {authorizer callback} sqlite3_set_authorizer -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Compile-Time Authorization Callbacks</h2>
+</div>
+<blockquote><pre>
+int sqlite3_set_authorizer(
+ sqlite3*,
+ int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
+ void *pUserData
+);
+</pre></blockquote>
+<p>
+This routine registers an authorizer callback with a particular
+<a href="../c3ref/sqlite3.html">database connection</a>, supplied in the first argument.
+The authorizer callback is invoked as SQL statements are being compiled
+by <a href="../c3ref/prepare.html">sqlite3_prepare()</a> or its variants <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>,
+<a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>, <a href="../c3ref/prepare.html">sqlite3_prepare16()</a>, <a href="../c3ref/prepare.html">sqlite3_prepare16_v2()</a>,
+and <a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a>. At various
+points during the compilation process, as logic is being created
+to perform various actions, the authorizer callback is invoked to
+see if those actions are allowed. The authorizer callback should
+return <a href="../rescode.html#ok">SQLITE_OK</a> to allow the action, <a href="../c3ref/c_deny.html">SQLITE_IGNORE</a> to disallow the
+specific action but allow the SQL statement to continue to be
+compiled, or <a href="../c3ref/c_deny.html">SQLITE_DENY</a> to cause the entire SQL statement to be
+rejected with an error. If the authorizer callback returns
+any value other than <a href="../c3ref/c_deny.html">SQLITE_IGNORE</a>, <a href="../rescode.html#ok">SQLITE_OK</a>, or <a href="../c3ref/c_deny.html">SQLITE_DENY</a>
+then the <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> or equivalent call that triggered
+the authorizer will fail with an error message.</p>
+
+<p>When the callback returns <a href="../rescode.html#ok">SQLITE_OK</a>, that means the operation
+requested is ok. When the callback returns <a href="../c3ref/c_deny.html">SQLITE_DENY</a>, the
+<a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> or equivalent call that triggered the
+authorizer will fail with an error message explaining that
+access is denied.</p>
+
+<p>The first parameter to the authorizer callback is a copy of the third
+parameter to the sqlite3_set_authorizer() interface. The second parameter
+to the callback is an integer <a href="../c3ref/c_alter_table.html">action code</a> that specifies
+the particular action to be authorized. The third through sixth parameters
+to the callback are either NULL pointers or zero-terminated strings
+that contain additional details about the action to be authorized.
+Applications must always be prepared to encounter a NULL pointer in any
+of the third through the sixth parameters of the authorization callback.</p>
+
+<p>If the action code is <a href="../c3ref/c_alter_table.html">SQLITE_READ</a>
+and the callback returns <a href="../c3ref/c_deny.html">SQLITE_IGNORE</a> then the
+<a href="../c3ref/stmt.html">prepared statement</a> statement is constructed to substitute
+a NULL value in place of the table column that would have
+been read if <a href="../rescode.html#ok">SQLITE_OK</a> had been returned. The <a href="../c3ref/c_deny.html">SQLITE_IGNORE</a>
+return can be used to deny an untrusted user access to individual
+columns of a table.
+When a table is referenced by a <a href="../lang_select.html">SELECT</a> but no column values are
+extracted from that table (for example in a query like
+"SELECT count(*) FROM tab") then the <a href="../c3ref/c_alter_table.html">SQLITE_READ</a> authorizer callback
+is invoked once for that table with a column name that is an empty string.
+If the action code is <a href="../c3ref/c_alter_table.html">SQLITE_DELETE</a> and the callback returns
+<a href="../c3ref/c_deny.html">SQLITE_IGNORE</a> then the <a href="../lang_delete.html">DELETE</a> operation proceeds but the
+<a href="../lang_delete.html#truncateopt">truncate optimization</a> is disabled and all rows are deleted individually.</p>
+
+<p>An authorizer is used when <a href="../c3ref/prepare.html">preparing</a>
+SQL statements from an untrusted source, to ensure that the SQL statements
+do not try to access data they are not allowed to see, or that they do not
+try to execute malicious statements that damage the database. For
+example, an application may allow a user to enter arbitrary
+SQL queries for evaluation by a database. But the application does
+not want the user to be able to make arbitrary changes to the
+database. An authorizer could then be put in place while the
+user-entered SQL is being <a href="../c3ref/prepare.html">prepared</a> that
+disallows everything except <a href="../lang_select.html">SELECT</a> statements.</p>
+
+<p>Applications that need to process SQL from untrusted sources
+might also consider lowering resource limits using <a href="../c3ref/limit.html">sqlite3_limit()</a>
+and limiting database size using the <a href="../pragma.html#pragma_max_page_count">max_page_count</a> <a href="../pragma.html#syntax">PRAGMA</a>
+in addition to using an authorizer.</p>
+
+<p>Only a single authorizer can be in place on a database connection
+at a time. Each call to sqlite3_set_authorizer overrides the
+previous call. Disable the authorizer by installing a NULL callback.
+The authorizer is disabled by default.</p>
+
+<p>The authorizer callback must not do anything that will modify
+the database connection that invoked the authorizer callback.
+Note that <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> and <a href="../c3ref/step.html">sqlite3_step()</a> both modify their
+database connections for the meaning of "modify" in this paragraph.</p>
+
+<p>When <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> is used to prepare a statement, the
+statement might be re-prepared during <a href="../c3ref/step.html">sqlite3_step()</a> due to a
+schema change. Hence, the application should ensure that the
+correct authorizer callback remains in place during the <a href="../c3ref/step.html">sqlite3_step()</a>.</p>
+
+<p>Note that the authorizer callback is invoked only during
+<a href="../c3ref/prepare.html">sqlite3_prepare()</a> or its variants. Authorization is not
+performed during statement evaluation in <a href="../c3ref/step.html">sqlite3_step()</a>, unless
+as stated in the previous paragraph, sqlite3_step() invokes
+sqlite3_prepare_v2() to reprepare a statement after a schema change.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/set_last_insert_rowid.html b/www/c3ref/set_last_insert_rowid.html
new file mode 100644
index 0000000..be2e3b8
--- /dev/null
+++ b/www/c3ref/set_last_insert_rowid.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Set the Last Insert Rowid value.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_set_last_insert_rowid -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Set the Last Insert Rowid value.</h2>
+</div>
+<blockquote><pre>
+void sqlite3_set_last_insert_rowid(sqlite3*,sqlite3_int64);
+</pre></blockquote>
+<p>
+The sqlite3_set_last_insert_rowid(D, R) method allows the application to
+set the value returned by calling sqlite3_last_insert_rowid(D) to R
+without inserting a row into the database.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/sleep.html b/www/c3ref/sleep.html
new file mode 100644
index 0000000..78eb59c
--- /dev/null
+++ b/www/c3ref/sleep.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Suspend Execution For A Short Time</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_sleep -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Suspend Execution For A Short Time</h2>
+</div>
+<blockquote><pre>
+int sqlite3_sleep(int);
+</pre></blockquote>
+<p>
+The sqlite3_sleep() function causes the current thread to suspend execution
+for at least a number of milliseconds specified in its parameter.</p>
+
+<p>If the operating system does not support sleep requests with
+millisecond time resolution, then the time will be rounded up to
+the nearest second. The number of milliseconds of sleep actually
+requested from the operating system is returned.</p>
+
+<p>SQLite implements this interface by calling the xSleep()
+method of the default <a href="../c3ref/vfs.html">sqlite3_vfs</a> object. If the xSleep() method
+of the default VFS is not implemented correctly, or not implemented at
+all, then the behavior of sqlite3_sleep() may deviate from the description
+in the previous paragraphs.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/snapshot.html b/www/c3ref/snapshot.html
new file mode 100644
index 0000000..81d0b1e
--- /dev/null
+++ b/www/c3ref/snapshot.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Database Snapshot</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: snapshot sqlite3_snapshot -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Database Snapshot</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_snapshot {
+ unsigned char hidden[48];
+} sqlite3_snapshot;
+</pre></blockquote>
+<p>
+An instance of the snapshot object records the state of a <a href="../wal.html">WAL mode</a>
+database for some specific point in history.</p>
+
+<p>In <a href="../wal.html">WAL mode</a>, multiple <a href="../c3ref/sqlite3.html">database connections</a> that are open on the
+same database file can each be reading a different historical version
+of the database file. When a <a href="../c3ref/sqlite3.html">database connection</a> begins a read
+transaction, that connection sees an unchanging copy of the database
+as it existed for the point in time when the transaction first started.
+Subsequent changes to the database from other connections are not seen
+by the reader until a new read transaction is started.</p>
+
+<p>The sqlite3_snapshot object records state information about an historical
+version of the database file so that it is possible to later open a new read
+transaction that sees that historical version of the database rather than
+the most recent version.
+</p><p>1 Constructor: <a href="../c3ref/snapshot_get.html">sqlite3_snapshot_get()</a></p>
+<p>1 Destructor: <a href="../c3ref/snapshot_free.html">sqlite3_snapshot_free()</a></p>
+<p>3 Methods:
+ <a href="../c3ref/snapshot_cmp.html">sqlite3_snapshot_cmp()</a>,
+<a href="../c3ref/snapshot_open.html">sqlite3_snapshot_open()</a>,
+<a href="../c3ref/snapshot_recover.html">sqlite3_snapshot_recover()</a></p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/snapshot_cmp.html b/www/c3ref/snapshot_cmp.html
new file mode 100644
index 0000000..342e0e9
--- /dev/null
+++ b/www/c3ref/snapshot_cmp.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Compare the ages of two snapshot handles.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_snapshot_cmp -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Compare the ages of two snapshot handles.</h2>
+</div>
+<blockquote><pre>
+int sqlite3_snapshot_cmp(
+ sqlite3_snapshot *p1,
+ sqlite3_snapshot *p2
+);
+</pre></blockquote>
+<p>
+The sqlite3_snapshot_cmp(P1, P2) interface is used to compare the ages
+of two valid snapshot handles.</p>
+
+<p>If the two snapshot handles are not associated with the same database
+file, the result of the comparison is undefined.</p>
+
+<p>Additionally, the result of the comparison is only valid if both of the
+snapshot handles were obtained by calling sqlite3_snapshot_get() since the
+last time the wal file was deleted. The wal file is deleted when the
+database is changed back to rollback mode or when the number of database
+clients drops to zero. If either snapshot handle was obtained before the
+wal file was last deleted, the value returned by this function
+is undefined.</p>
+
+<p>Otherwise, this API returns a negative value if P1 refers to an older
+snapshot than P2, zero if the two handles refer to the same database
+snapshot, and a positive value if P1 is a newer snapshot than P2.</p>
+
+<p>This interface is only available if SQLite is compiled with the
+<a href="../compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> option.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/snapshot_free.html b/www/c3ref/snapshot_free.html
new file mode 100644
index 0000000..4216981
--- /dev/null
+++ b/www/c3ref/snapshot_free.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Destroy a snapshot</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_snapshot_free -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Destroy a snapshot</h2>
+</div>
+<blockquote><pre>
+void sqlite3_snapshot_free(sqlite3_snapshot*);
+</pre></blockquote>
+<p>
+The <a href="../c3ref/snapshot_free.html">sqlite3_snapshot_free(P)</a> interface destroys <a href="../c3ref/snapshot.html">sqlite3_snapshot</a> P.
+The application must eventually free every <a href="../c3ref/snapshot.html">sqlite3_snapshot</a> object
+using this routine to avoid a memory leak.</p>
+
+<p>The <a href="../c3ref/snapshot_free.html">sqlite3_snapshot_free()</a> interface is only available when the
+<a href="../compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> compile-time option is used.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/snapshot_get.html b/www/c3ref/snapshot_get.html
new file mode 100644
index 0000000..9a2c85a
--- /dev/null
+++ b/www/c3ref/snapshot_get.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Record A Database Snapshot</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_snapshot_get -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Record A Database Snapshot</h2>
+</div>
+<blockquote><pre>
+int sqlite3_snapshot_get(
+ sqlite3 *db,
+ const char *zSchema,
+ sqlite3_snapshot **ppSnapshot
+);
+</pre></blockquote>
+<p>
+The <a href="../c3ref/snapshot_get.html">sqlite3_snapshot_get(D,S,P)</a> interface attempts to make a
+new <a href="../c3ref/snapshot.html">sqlite3_snapshot</a> object that records the current state of
+schema S in database connection D. On success, the
+<a href="../c3ref/snapshot_get.html">sqlite3_snapshot_get(D,S,P)</a> interface writes a pointer to the newly
+created <a href="../c3ref/snapshot.html">sqlite3_snapshot</a> object into *P and returns SQLITE_OK.
+If there is not already a read-transaction open on schema S when
+this function is called, one is opened automatically.</p>
+
+<p>The following must be true for this function to succeed. If any of
+the following statements are false when sqlite3_snapshot_get() is
+called, SQLITE_ERROR is returned. The final value of *P is undefined
+in this case.</p>
+
+<p><ul>
+<li> The database handle must not be in <a href="../c3ref/get_autocommit.html">autocommit mode</a>.</p>
+
+<p><li> Schema S of <a href="../c3ref/sqlite3.html">database connection</a> D must be a <a href="../wal.html">WAL mode</a> database.</p>
+
+<p><li> There must not be a write transaction open on schema S of database
+connection D.</p>
+
+<p><li> One or more transactions must have been written to the current wal
+file since it was created on disk (by any connection). This means
+that a snapshot cannot be taken on a wal mode database with no wal
+file immediately after it is first opened. At least one transaction
+must be written to it first.
+</ul></p>
+
+<p>This function may also return SQLITE_NOMEM. If it is called with the
+database handle in autocommit mode but fails for some other reason,
+whether or not a read transaction is opened on schema S is undefined.</p>
+
+<p>The <a href="../c3ref/snapshot.html">sqlite3_snapshot</a> object returned from a successful call to
+<a href="../c3ref/snapshot_get.html">sqlite3_snapshot_get()</a> must be freed using <a href="../c3ref/snapshot_free.html">sqlite3_snapshot_free()</a>
+to avoid a memory leak.</p>
+
+<p>The <a href="../c3ref/snapshot_get.html">sqlite3_snapshot_get()</a> interface is only available when the
+<a href="../compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> compile-time option is used.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/snapshot_open.html b/www/c3ref/snapshot_open.html
new file mode 100644
index 0000000..e1377dd
--- /dev/null
+++ b/www/c3ref/snapshot_open.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Start a read transaction on an historical snapshot</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_snapshot_open -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Start a read transaction on an historical snapshot</h2>
+</div>
+<blockquote><pre>
+int sqlite3_snapshot_open(
+ sqlite3 *db,
+ const char *zSchema,
+ sqlite3_snapshot *pSnapshot
+);
+</pre></blockquote>
+<p>
+The <a href="../c3ref/snapshot_open.html">sqlite3_snapshot_open(D,S,P)</a> interface either starts a new read
+transaction or upgrades an existing one for schema S of
+<a href="../c3ref/sqlite3.html">database connection</a> D such that the read transaction refers to
+historical <a href="../c3ref/snapshot.html">snapshot</a> P, rather than the most recent change to the
+database. The <a href="../c3ref/snapshot_open.html">sqlite3_snapshot_open()</a> interface returns SQLITE_OK
+on success or an appropriate <a href="../rescode.html">error code</a> if it fails.</p>
+
+<p>In order to succeed, the database connection must not be in
+<a href="../c3ref/get_autocommit.html">autocommit mode</a> when <a href="../c3ref/snapshot_open.html">sqlite3_snapshot_open(D,S,P)</a> is called. If there
+is already a read transaction open on schema S, then the database handle
+must have no active statements (SELECT statements that have been passed
+to sqlite3_step() but not sqlite3_reset() or sqlite3_finalize()).
+SQLITE_ERROR is returned if either of these conditions is violated, or
+if schema S does not exist, or if the snapshot object is invalid.</p>
+
+<p>A call to sqlite3_snapshot_open() will fail to open if the specified
+snapshot has been overwritten by a <a href="../wal.html#ckpt">checkpoint</a>. In this case
+SQLITE_ERROR_SNAPSHOT is returned.</p>
+
+<p>If there is already a read transaction open when this function is
+invoked, then the same read transaction remains open (on the same
+database snapshot) if SQLITE_ERROR, SQLITE_BUSY or SQLITE_ERROR_SNAPSHOT
+is returned. If another error code - for example SQLITE_PROTOCOL or an
+SQLITE_IOERR error code - is returned, then the final state of the
+read transaction is undefined. If SQLITE_OK is returned, then the
+read transaction is now open on database snapshot P.</p>
+
+<p>A call to <a href="../c3ref/snapshot_open.html">sqlite3_snapshot_open(D,S,P)</a> will fail if the
+database connection D does not know that the database file for
+schema S is in <a href="../wal.html">WAL mode</a>. A database connection might not know
+that the database file is in <a href="../wal.html">WAL mode</a> if there has been no prior
+I/O on that database connection, or if the database entered <a href="../wal.html">WAL mode</a>
+after the most recent I/O on the database connection.
+(Hint: Run "<a href="../pragma.html#pragma_application_id">PRAGMA application_id</a>" against a newly opened
+database connection in order to make it ready to use snapshots.)</p>
+
+<p>The <a href="../c3ref/snapshot_open.html">sqlite3_snapshot_open()</a> interface is only available when the
+<a href="../compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> compile-time option is used.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/snapshot_recover.html b/www/c3ref/snapshot_recover.html
new file mode 100644
index 0000000..3df03a4
--- /dev/null
+++ b/www/c3ref/snapshot_recover.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Recover snapshots from a wal file</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_snapshot_recover -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Recover snapshots from a wal file</h2>
+</div>
+<blockquote><pre>
+int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb);
+</pre></blockquote>
+<p>
+If a <a href="../wal.html#walfile">WAL file</a> remains on disk after all database connections close
+(either through the use of the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">SQLITE_FCNTL_PERSIST_WAL</a> <a href="../c3ref/file_control.html">file control</a>
+or because the last process to have the database opened exited without
+calling <a href="../c3ref/close.html">sqlite3_close()</a>) and a new connection is subsequently opened
+on that database and <a href="../wal.html#walfile">WAL file</a>, the <a href="../c3ref/snapshot_open.html">sqlite3_snapshot_open()</a> interface
+will only be able to open the last transaction added to the WAL file
+even though the WAL file contains other valid transactions.</p>
+
+<p>This function attempts to scan the WAL file associated with database zDb
+of database handle db and make all valid snapshots available to
+sqlite3_snapshot_open(). It is an error if there is already a read
+transaction open on the database, or if the database is not a WAL mode
+database.</p>
+
+<p>SQLITE_OK is returned if successful, or an SQLite error code otherwise.</p>
+
+<p>This interface is only available if SQLite is compiled with the
+<a href="../compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> option.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/soft_heap_limit.html b/www/c3ref/soft_heap_limit.html
new file mode 100644
index 0000000..23566b7
--- /dev/null
+++ b/www/c3ref/soft_heap_limit.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Deprecated Soft Heap Limit Interface</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_soft_heap_limit -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Deprecated Soft Heap Limit Interface</h2>
+</div>
+<blockquote><pre>
+void sqlite3_soft_heap_limit(int N);
+</pre></blockquote>
+<p>
+This is a deprecated version of the <a href="../c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a>
+interface. This routine is provided for historical compatibility
+only. All new applications should use the
+<a href="../c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interface rather than this one.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/sqlite3.html b/www/c3ref/sqlite3.html
new file mode 100644
index 0000000..bc357ea
--- /dev/null
+++ b/www/c3ref/sqlite3.html
@@ -0,0 +1,229 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Database Connection Handle</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {database connection} {database connections} sqlite3 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Database Connection Handle</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3 sqlite3;
+</pre></blockquote>
+<p>
+Each open SQLite database is represented by a pointer to an instance of
+the opaque structure named "sqlite3". It is useful to think of an sqlite3
+pointer as an object. The <a href="../c3ref/open.html">sqlite3_open()</a>, <a href="../c3ref/open.html">sqlite3_open16()</a>, and
+<a href="../c3ref/open.html">sqlite3_open_v2()</a> interfaces are its constructors, and <a href="../c3ref/close.html">sqlite3_close()</a>
+and <a href="../c3ref/close.html">sqlite3_close_v2()</a> are its destructors. There are many other
+interfaces (such as
+<a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>, <a href="../c3ref/create_function.html">sqlite3_create_function()</a>, and
+<a href="../c3ref/busy_timeout.html">sqlite3_busy_timeout()</a> to name but three) that are methods on an
+sqlite3 object.
+</p><p>3 Constructors:
+ <a href="../c3ref/open.html">sqlite3_open()</a>,
+<a href="../c3ref/open.html">sqlite3_open16()</a>,
+<a href="../c3ref/open.html">sqlite3_open_v2()</a></p>
+<p>2 Destructors:
+ <a href="../c3ref/close.html">sqlite3_close()</a>,
+<a href="../c3ref/close.html">sqlite3_close_v2()</a></p>
+<p>76 Methods:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../c3ref/autovacuum_pages.html'>sqlite3_autovacuum_pages</a></li>
+<li><a href='../c3ref/blob_open.html'>sqlite3_blob_open</a></li>
+<li><a href='../c3ref/busy_handler.html'>sqlite3_busy_handler</a></li>
+<li><a href='../c3ref/busy_timeout.html'>sqlite3_busy_timeout</a></li>
+<li><a href='../c3ref/changes.html'>sqlite3_changes</a></li>
+<li><a href='../c3ref/changes.html'>sqlite3_changes64</a></li>
+<li><a href='../c3ref/collation_needed.html'>sqlite3_collation_needed</a></li>
+<li><a href='../c3ref/collation_needed.html'>sqlite3_collation_needed16</a></li>
+<li><a href='../c3ref/commit_hook.html'>sqlite3_commit_hook</a></li>
+<li><a href='../c3ref/create_collation.html'>sqlite3_create_collation</a></li>
+<li><a href='../c3ref/create_collation.html'>sqlite3_create_collation16</a></li>
+<li><a href='../c3ref/create_collation.html'>sqlite3_create_collation_v2</a></li>
+<li><a href='../c3ref/create_function.html'>sqlite3_create_function</a></li>
+<li><a href='../c3ref/create_function.html'>sqlite3_create_function16</a></li>
+<li><a href='../c3ref/create_function.html'>sqlite3_create_function_v2</a></li>
+<li><a href='../c3ref/create_module.html'>sqlite3_create_module</a></li>
+<li><a href='../c3ref/create_module.html'>sqlite3_create_module_v2</a></li>
+<li><a href='../c3ref/create_function.html'>sqlite3_create_window_function</a></li>
+<li><a href='../c3ref/db_cacheflush.html'>sqlite3_db_cacheflush</a></li>
+<li><a href='../c3ref/db_config.html'>sqlite3_db_config</a></li>
+<li><a href='../c3ref/db_filename.html'>sqlite3_db_filename</a></li>
+<li><a href='../c3ref/db_mutex.html'>sqlite3_db_mutex</a></li>
+<li><a href='../c3ref/db_name.html'>sqlite3_db_name</a></li>
+<li><a href='../c3ref/db_readonly.html'>sqlite3_db_readonly</a></li>
+<li><a href='../c3ref/db_release_memory.html'>sqlite3_db_release_memory</a></li>
+<li><a href='../c3ref/db_status.html'>sqlite3_db_status</a></li>
+<li><a href='../c3ref/drop_modules.html'>sqlite3_drop_modules</a></li>
+<li><a href='../c3ref/enable_load_extension.html'>sqlite3_enable_load_extension</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_errcode</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_errmsg</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_errmsg16</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_error_offset</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_errstr</a></li>
+<li><a href='../c3ref/exec.html'>sqlite3_exec</a></li>
+<li><a href='../c3ref/errcode.html'>sqlite3_extended_errcode</a></li>
+<li><a href='../c3ref/extended_result_codes.html'>sqlite3_extended_result_codes</a></li>
+<li><a href='../c3ref/file_control.html'>sqlite3_file_control</a></li>
+<li><a href='../c3ref/free_table.html'>sqlite3_free_table</a></li>
+<li><a href='../c3ref/get_autocommit.html'>sqlite3_get_autocommit</a></li>
+<li><a href='../c3ref/free_table.html'>sqlite3_get_table</a></li>
+<li><a href='../c3ref/interrupt.html'>sqlite3_interrupt</a></li>
+<li><a href='../c3ref/last_insert_rowid.html'>sqlite3_last_insert_rowid</a></li>
+<li><a href='../c3ref/limit.html'>sqlite3_limit</a></li>
+<li><a href='../c3ref/load_extension.html'>sqlite3_load_extension</a></li>
+<li><a href='../c3ref/next_stmt.html'>sqlite3_next_stmt</a></li>
+<li><a href='../c3ref/overload_function.html'>sqlite3_overload_function</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare16</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare16_v2</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare16_v3</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare_v2</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare_v3</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_blobwrite</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_count</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_depth</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_hook</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_new</a></li>
+<li><a href='../c3ref/preupdate_blobwrite.html'>sqlite3_preupdate_old</a></li>
+<li><a href='../c3ref/profile.html'>sqlite3_profile</a></li>
+<li><a href='../c3ref/progress_handler.html'>sqlite3_progress_handler</a></li>
+<li><a href='../c3ref/commit_hook.html'>sqlite3_rollback_hook</a></li>
+<li><a href='../c3ref/set_authorizer.html'>sqlite3_set_authorizer</a></li>
+<li><a href='../c3ref/set_last_insert_rowid.html'>sqlite3_set_last_insert_rowid</a></li>
+<li><a href='../c3ref/system_errno.html'>sqlite3_system_errno</a></li>
+<li><a href='../c3ref/table_column_metadata.html'>sqlite3_table_column_metadata</a></li>
+<li><a href='../c3ref/total_changes.html'>sqlite3_total_changes</a></li>
+<li><a href='../c3ref/total_changes.html'>sqlite3_total_changes64</a></li>
+<li><a href='../c3ref/profile.html'>sqlite3_trace</a></li>
+<li><a href='../c3ref/trace_v2.html'>sqlite3_trace_v2</a></li>
+<li><a href='../c3ref/txn_state.html'>sqlite3_txn_state</a></li>
+<li><a href='../c3ref/unlock_notify.html'>sqlite3_unlock_notify</a></li>
+<li><a href='../c3ref/update_hook.html'>sqlite3_update_hook</a></li>
+<li><a href='../c3ref/wal_autocheckpoint.html'>sqlite3_wal_autocheckpoint</a></li>
+<li><a href='../c3ref/wal_checkpoint.html'>sqlite3_wal_checkpoint</a></li>
+<li><a href='../c3ref/wal_checkpoint_v2.html'>sqlite3_wal_checkpoint_v2</a></li>
+<li><a href='../c3ref/wal_hook.html'>sqlite3_wal_hook</a></li>
+</ul>
+</div>
+</p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/status.html b/www/c3ref/status.html
new file mode 100644
index 0000000..540f948
--- /dev/null
+++ b/www/c3ref/status.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Runtime Status</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_status sqlite3_status64 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>SQLite Runtime Status</h2>
+</div>
+<blockquote><pre>
+int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
+int sqlite3_status64(
+ int op,
+ sqlite3_int64 *pCurrent,
+ sqlite3_int64 *pHighwater,
+ int resetFlag
+);
+</pre></blockquote>
+<p>
+These interfaces are used to retrieve runtime status information
+about the performance of SQLite, and optionally to reset various
+highwater marks. The first argument is an integer code for
+the specific parameter to measure. Recognized integer codes
+are of the form <a href="../c3ref/c_status_malloc_count.html">SQLITE_STATUS_...</a>.
+The current value of the parameter is returned into *pCurrent.
+The highest recorded value is returned in *pHighwater. If the
+resetFlag is true, then the highest record value is reset after
+*pHighwater is written. Some parameters do not record the highest
+value. For those parameters
+nothing is written into *pHighwater and the resetFlag is ignored.
+Other parameters record only the highwater mark and not the current
+value. For these latter parameters nothing is written into *pCurrent.</p>
+
+<p>The sqlite3_status() and sqlite3_status64() routines return
+SQLITE_OK on success and a non-zero <a href="../rescode.html">error code</a> on failure.</p>
+
+<p>If either the current value or the highwater mark is too large to
+be represented by a 32-bit integer, then the values returned by
+sqlite3_status() are undefined.</p>
+
+<p>See also: <a href="../c3ref/db_status.html">sqlite3_db_status()</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/step.html b/www/c3ref/step.html
new file mode 100644
index 0000000..4a8fa09
--- /dev/null
+++ b/www/c3ref/step.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Evaluate An SQL Statement</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_step -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Evaluate An SQL Statement</h2>
+</div>
+<blockquote><pre>
+int sqlite3_step(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+After a <a href="../c3ref/stmt.html">prepared statement</a> has been prepared using any of
+<a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>, <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>, <a href="../c3ref/prepare.html">sqlite3_prepare16_v2()</a>,
+or <a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a> or one of the legacy
+interfaces <a href="../c3ref/prepare.html">sqlite3_prepare()</a> or <a href="../c3ref/prepare.html">sqlite3_prepare16()</a>, this function
+must be called one or more times to evaluate the statement.</p>
+
+<p>The details of the behavior of the sqlite3_step() interface depend
+on whether the statement was prepared using the newer "vX" interfaces
+<a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>, <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>, <a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a>,
+<a href="../c3ref/prepare.html">sqlite3_prepare16_v2()</a> or the older legacy
+interfaces <a href="../c3ref/prepare.html">sqlite3_prepare()</a> and <a href="../c3ref/prepare.html">sqlite3_prepare16()</a>. The use of the
+new "vX" interface is recommended for new applications but the legacy
+interface will continue to be supported.</p>
+
+<p>In the legacy interface, the return value will be either <a href="../rescode.html#busy">SQLITE_BUSY</a>,
+<a href="../rescode.html#done">SQLITE_DONE</a>, <a href="../rescode.html#row">SQLITE_ROW</a>, <a href="../rescode.html#error">SQLITE_ERROR</a>, or <a href="../rescode.html#misuse">SQLITE_MISUSE</a>.
+With the "v2" interface, any of the other <a href="../rescode.html">result codes</a> or
+<a href="../rescode.html#extrc">extended result codes</a> might be returned as well.</p>
+
+<p><a href="../rescode.html#busy">SQLITE_BUSY</a> means that the database engine was unable to acquire the
+database locks it needs to do its job. If the statement is a <a href="../lang_transaction.html">COMMIT</a>
+or occurs outside of an explicit transaction, then you can retry the
+statement. If the statement is not a <a href="../lang_transaction.html">COMMIT</a> and occurs within an
+explicit transaction then you should rollback the transaction before
+continuing.</p>
+
+<p><a href="../rescode.html#done">SQLITE_DONE</a> means that the statement has finished executing
+successfully. sqlite3_step() should not be called again on this virtual
+machine without first calling <a href="../c3ref/reset.html">sqlite3_reset()</a> to reset the virtual
+machine back to its initial state.</p>
+
+<p>If the SQL statement being executed returns any data, then <a href="../rescode.html#row">SQLITE_ROW</a>
+is returned each time a new row of data is ready for processing by the
+caller. The values may be accessed using the <a href="../c3ref/column_blob.html">column access functions</a>.
+sqlite3_step() is called again to retrieve the next row of data.</p>
+
+<p><a href="../rescode.html#error">SQLITE_ERROR</a> means that a run-time error (such as a constraint
+violation) has occurred. sqlite3_step() should not be called again on
+the VM. More information may be found by calling <a href="../c3ref/errcode.html">sqlite3_errmsg()</a>.
+With the legacy interface, a more specific error code (for example,
+<a href="../rescode.html#interrupt">SQLITE_INTERRUPT</a>, <a href="../rescode.html#schema">SQLITE_SCHEMA</a>, <a href="../rescode.html#corrupt">SQLITE_CORRUPT</a>, and so forth)
+can be obtained by calling <a href="../c3ref/reset.html">sqlite3_reset()</a> on the
+<a href="../c3ref/stmt.html">prepared statement</a>. In the "v2" interface,
+the more specific error code is returned directly by sqlite3_step().</p>
+
+<p><a href="../rescode.html#misuse">SQLITE_MISUSE</a> means that the this routine was called inappropriately.
+Perhaps it was called on a <a href="../c3ref/stmt.html">prepared statement</a> that has
+already been <a href="../c3ref/finalize.html">finalized</a> or on one that had
+previously returned <a href="../rescode.html#error">SQLITE_ERROR</a> or <a href="../rescode.html#done">SQLITE_DONE</a>. Or it could
+be the case that the same database connection is being used by two or
+more threads at the same moment in time.</p>
+
+<p>For all versions of SQLite up to and including 3.6.23.1, a call to
+<a href="../c3ref/reset.html">sqlite3_reset()</a> was required after sqlite3_step() returned anything
+other than <a href="../rescode.html#row">SQLITE_ROW</a> before any subsequent invocation of
+sqlite3_step(). Failure to reset the prepared statement using
+<a href="../c3ref/reset.html">sqlite3_reset()</a> would result in an <a href="../rescode.html#misuse">SQLITE_MISUSE</a> return from
+sqlite3_step(). But after <a href="../releaselog/3_6_23_1.html">version 3.6.23.1</a> (2010-03-26,
+sqlite3_step() began
+calling <a href="../c3ref/reset.html">sqlite3_reset()</a> automatically in this circumstance rather
+than returning <a href="../rescode.html#misuse">SQLITE_MISUSE</a>. This is not considered a compatibility
+break because any application that ever receives an SQLITE_MISUSE error
+is broken by definition. The <a href="../compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a> compile-time option
+can be used to restore the legacy behavior.</p>
+
+<p><b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step()
+API always returns a generic error code, <a href="../rescode.html#error">SQLITE_ERROR</a>, following any
+error other than <a href="../rescode.html#busy">SQLITE_BUSY</a> and <a href="../rescode.html#misuse">SQLITE_MISUSE</a>. You must call
+<a href="../c3ref/reset.html">sqlite3_reset()</a> or <a href="../c3ref/finalize.html">sqlite3_finalize()</a> in order to find one of the
+specific <a href="../rescode.html">error codes</a> that better describes the error.
+We admit that this is a goofy design. The problem has been fixed
+with the "v2" interface. If you prepare all of your SQL statements
+using <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> or <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>
+or <a href="../c3ref/prepare.html">sqlite3_prepare16_v2()</a> or <a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a> instead
+of the legacy <a href="../c3ref/prepare.html">sqlite3_prepare()</a> and <a href="../c3ref/prepare.html">sqlite3_prepare16()</a> interfaces,
+then the more specific <a href="../rescode.html">error codes</a> are returned directly
+by sqlite3_step(). The use of the "vX" interfaces is recommended.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stmt.html b/www/c3ref/stmt.html
new file mode 100644
index 0000000..3fdee2a
--- /dev/null
+++ b/www/c3ref/stmt.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Prepared Statement Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {prepared statement} {prepared statements} sqlite3_stmt -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Prepared Statement Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_stmt sqlite3_stmt;
+</pre></blockquote>
+<p>
+An instance of this object represents a single SQL statement that
+has been compiled into binary form and is ready to be evaluated.</p>
+
+<p>Think of each SQL statement as a separate computer program. The
+original SQL text is source code. A prepared statement object
+is the compiled object code. All SQL must be converted into a
+prepared statement before it can be run.</p>
+
+<p>The life-cycle of a prepared statement object usually goes like this:</p>
+
+<p><ol>
+<li> Create the prepared statement object using <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>.
+<li> Bind values to <a href="../lang_expr.html#varparam">parameters</a> using the sqlite3_bind_*()
+interfaces.
+<li> Run the SQL by calling <a href="../c3ref/step.html">sqlite3_step()</a> one or more times.
+<li> Reset the prepared statement using <a href="../c3ref/reset.html">sqlite3_reset()</a> then go back
+to step 2. Do this zero or more times.
+<li> Destroy the object using <a href="../c3ref/finalize.html">sqlite3_finalize()</a>.
+</ol>
+</p><p>6 Constructors:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare16</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare16_v2</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare16_v3</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare_v2</a></li>
+<li><a href='../c3ref/prepare.html'>sqlite3_prepare_v3</a></li>
+</ul>
+</div>
+</p>
+<p>1 Destructor: <a href="../c3ref/finalize.html">sqlite3_finalize()</a></p>
+<p>51 Methods:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_blob</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_blob64</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_double</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_int</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_int64</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_null</a></li>
+<li><a href='../c3ref/bind_parameter_count.html'>sqlite3_bind_parameter_count</a></li>
+<li><a href='../c3ref/bind_parameter_index.html'>sqlite3_bind_parameter_index</a></li>
+<li><a href='../c3ref/bind_parameter_name.html'>sqlite3_bind_parameter_name</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_pointer</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_text</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_text16</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_text64</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_value</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_zeroblob</a></li>
+<li><a href='../c3ref/bind_blob.html'>sqlite3_bind_zeroblob64</a></li>
+<li><a href='../c3ref/clear_bindings.html'>sqlite3_clear_bindings</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_blob</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_bytes</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_bytes16</a></li>
+<li><a href='../c3ref/column_count.html'>sqlite3_column_count</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_database_name</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_database_name16</a></li>
+<li><a href='../c3ref/column_decltype.html'>sqlite3_column_decltype</a></li>
+<li><a href='../c3ref/column_decltype.html'>sqlite3_column_decltype16</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_double</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_int</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_int64</a></li>
+<li><a href='../c3ref/column_name.html'>sqlite3_column_name</a></li>
+<li><a href='../c3ref/column_name.html'>sqlite3_column_name16</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_origin_name</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_origin_name16</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_table_name</a></li>
+<li><a href='../c3ref/column_database_name.html'>sqlite3_column_table_name16</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_text</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_text16</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_type</a></li>
+<li><a href='../c3ref/column_blob.html'>sqlite3_column_value</a></li>
+<li><a href='../c3ref/data_count.html'>sqlite3_data_count</a></li>
+<li><a href='../c3ref/db_handle.html'>sqlite3_db_handle</a></li>
+<li><a href='../c3ref/expanded_sql.html'>sqlite3_expanded_sql</a></li>
+<li><a href='../c3ref/expanded_sql.html'>sqlite3_normalized_sql</a></li>
+<li><a href='../c3ref/reset.html'>sqlite3_reset</a></li>
+<li><a href='../c3ref/expanded_sql.html'>sqlite3_sql</a></li>
+<li><a href='../c3ref/step.html'>sqlite3_step</a></li>
+<li><a href='../c3ref/stmt_busy.html'>sqlite3_stmt_busy</a></li>
+<li><a href='../c3ref/stmt_isexplain.html'>sqlite3_stmt_isexplain</a></li>
+<li><a href='../c3ref/stmt_readonly.html'>sqlite3_stmt_readonly</a></li>
+<li><a href='../c3ref/stmt_scanstatus.html'>sqlite3_stmt_scanstatus</a></li>
+<li><a href='../c3ref/stmt_scanstatus_reset.html'>sqlite3_stmt_scanstatus_reset</a></li>
+<li><a href='../c3ref/stmt_status.html'>sqlite3_stmt_status</a></li>
+</ul>
+</div>
+</p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stmt_busy.html b/www/c3ref/stmt_busy.html
new file mode 100644
index 0000000..ec762a2
--- /dev/null
+++ b/www/c3ref/stmt_busy.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Determine If A Prepared Statement Has Been Reset</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_stmt_busy -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Determine If A Prepared Statement Has Been Reset</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_busy(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+The sqlite3_stmt_busy(S) interface returns true (non-zero) if the
+<a href="../c3ref/stmt.html">prepared statement</a> S has been stepped at least once using
+<a href="../c3ref/step.html">sqlite3_step(S)</a> but has neither run to completion (returned
+<a href="../rescode.html#done">SQLITE_DONE</a> from <a href="../c3ref/step.html">sqlite3_step(S)</a>) nor
+been reset using <a href="../c3ref/reset.html">sqlite3_reset(S)</a>. The sqlite3_stmt_busy(S)
+interface returns false if S is a NULL pointer. If S is not a
+NULL pointer and is not a pointer to a valid <a href="../c3ref/stmt.html">prepared statement</a>
+object, then the behavior is undefined and probably undesirable.</p>
+
+<p>This interface can be used in combination <a href="../c3ref/next_stmt.html">sqlite3_next_stmt()</a>
+to locate all prepared statements associated with a database
+connection that are in need of being reset. This can be used,
+for example, in diagnostic routines to search for prepared
+statements that are holding a transaction open.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stmt_isexplain.html b/www/c3ref/stmt_isexplain.html
new file mode 100644
index 0000000..ea2e064
--- /dev/null
+++ b/www/c3ref/stmt_isexplain.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Query The EXPLAIN Setting For A Prepared Statement</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_stmt_isexplain -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Query The EXPLAIN Setting For A Prepared Statement</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+The sqlite3_stmt_isexplain(S) interface returns 1 if the
+prepared statement S is an EXPLAIN statement, or 2 if the
+statement S is an EXPLAIN QUERY PLAN.
+The sqlite3_stmt_isexplain(S) interface returns 0 if S is
+an ordinary statement or a NULL pointer.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stmt_readonly.html b/www/c3ref/stmt_readonly.html
new file mode 100644
index 0000000..1a68404
--- /dev/null
+++ b/www/c3ref/stmt_readonly.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Determine If An SQL Statement Writes The Database</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_stmt_readonly -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Determine If An SQL Statement Writes The Database</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
+and only if the <a href="../c3ref/stmt.html">prepared statement</a> X makes no direct changes to
+the content of the database file.</p>
+
+<p>Note that <a href="../appfunc.html">application-defined SQL functions</a> or
+<a href="../vtab.html">virtual tables</a> might change the database indirectly as a side effect.
+For example, if an application defines a function "eval()" that
+calls <a href="../c3ref/exec.html">sqlite3_exec()</a>, then the following SQL statement would
+change the database file through side-effects:</p>
+
+<p><blockquote><pre>
+SELECT eval('DELETE FROM t1') FROM t2;
+</pre></blockquote></p>
+
+<p>But because the <a href="../lang_select.html">SELECT</a> statement does not change the database file
+directly, sqlite3_stmt_readonly() would still return true.</p>
+
+<p>Transaction control statements such as <a href="../lang_transaction.html">BEGIN</a>, <a href="../lang_transaction.html">COMMIT</a>, <a href="../lang_transaction.html">ROLLBACK</a>,
+<a href="../lang_savepoint.html">SAVEPOINT</a>, and <a href="../lang_savepoint.html">RELEASE</a> cause sqlite3_stmt_readonly() to return true,
+since the statements themselves do not actually modify the database but
+rather they control the timing of when other statements modify the
+database. The <a href="../lang_attach.html">ATTACH</a> and <a href="../lang_detach.html">DETACH</a> statements also cause
+sqlite3_stmt_readonly() to return true since, while those statements
+change the configuration of a database connection, they do not make
+changes to the content of the database files on disk.
+The sqlite3_stmt_readonly() interface returns true for <a href="../lang_transaction.html">BEGIN</a> since
+<a href="../lang_transaction.html">BEGIN</a> merely sets internal flags, but the <a href="../lang_transaction.html">BEGIN IMMEDIATE</a> and
+<a href="../lang_transaction.html">BEGIN EXCLUSIVE</a> commands do touch the database and so
+sqlite3_stmt_readonly() returns false for those commands.</p>
+
+<p>This routine returns false if there is any possibility that the
+statement might change the database file. A false return does
+not guarantee that the statement will change the database file.
+For example, an UPDATE statement might have a WHERE clause that
+makes it a no-op, but the sqlite3_stmt_readonly() result would still
+be false. Similarly, a CREATE TABLE IF NOT EXISTS statement is a
+read-only no-op if the table already exists, but
+sqlite3_stmt_readonly() still returns false for such a statement.</p>
+
+<p>If prepared statement X is an <a href="../lang_explain.html">EXPLAIN</a> or <a href="../eqp.html">EXPLAIN QUERY PLAN</a>
+statement, then sqlite3_stmt_readonly(X) returns the same value as
+if the EXPLAIN or EXPLAIN QUERY PLAN prefix were omitted.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stmt_scanstatus.html b/www/c3ref/stmt_scanstatus.html
new file mode 100644
index 0000000..4bcb178
--- /dev/null
+++ b/www/c3ref/stmt_scanstatus.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Prepared Statement Scan Status</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_stmt_scanstatus -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Prepared Statement Scan Status</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_scanstatus(
+ sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
+ int idx, /* Index of loop to report on */
+ int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
+ void *pOut /* Result written here */
+);
+</pre></blockquote>
+<p>
+This interface returns information about the predicted and measured
+performance for pStmt. Advanced applications can use this
+interface to compare the predicted and the measured performance and
+issue warnings and/or rerun <a href="../lang_analyze.html">ANALYZE</a> if discrepancies are found.</p>
+
+<p>Since this interface is expected to be rarely used, it is only
+available if SQLite is compiled using the <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>
+compile-time option.</p>
+
+<p>The "iScanStatusOp" parameter determines which status information to return.
+The "iScanStatusOp" must be one of the <a href="../c3ref/c_scanstat_est.html">scanstatus options</a> or the behavior
+of this interface is undefined.
+The requested measurement is written into a variable pointed to by
+the "pOut" parameter.
+Parameter "idx" identifies the specific loop to retrieve statistics for.
+Loops are numbered starting from zero. If idx is out of range - less than
+zero or greater than or equal to the total number of loops used to implement
+the statement - a non-zero value is returned and the variable that pOut
+points to is unchanged.</p>
+
+<p>Statistics might not be available for all loops in all statements. In cases
+where there exist loops with no available statistics, this function behaves
+as if the loop did not exist - it returns non-zero and leave the variable
+that pOut points to unchanged.</p>
+
+<p>See also: <a href="../c3ref/stmt_scanstatus_reset.html">sqlite3_stmt_scanstatus_reset()</a>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stmt_scanstatus_reset.html b/www/c3ref/stmt_scanstatus_reset.html
new file mode 100644
index 0000000..5d44bfe
--- /dev/null
+++ b/www/c3ref/stmt_scanstatus_reset.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Zero Scan-Status Counters</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_stmt_scanstatus_reset -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Zero Scan-Status Counters</h2>
+</div>
+<blockquote><pre>
+void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+Zero all <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> related event counters.</p>
+
+<p>This API is only available if the library is built with pre-processor
+symbol <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a> defined.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stmt_status.html b/www/c3ref/stmt_status.html
new file mode 100644
index 0000000..c77d5b4
--- /dev/null
+++ b/www/c3ref/stmt_status.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Prepared Statement Status</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_stmt_status -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Prepared Statement Status</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
+</pre></blockquote>
+<p>
+Each prepared statement maintains various
+<a href="../c3ref/c_stmtstatus_counter.html">SQLITE_STMTSTATUS counters</a> that measure the number
+of times it has performed specific operations. These counters can
+be used to monitor the performance characteristics of the prepared
+statements. For example, if the number of table steps greatly exceeds
+the number of table searches or result rows, that would tend to indicate
+that the prepared statement is using a full table scan rather than
+an index.</p>
+
+<p>This interface is used to retrieve and reset counter values from
+a <a href="../c3ref/stmt.html">prepared statement</a>. The first argument is the prepared statement
+object to be interrogated. The second argument
+is an integer code for a specific <a href="../c3ref/c_stmtstatus_counter.html">SQLITE_STMTSTATUS counter</a>
+to be interrogated.
+The current value of the requested counter is returned.
+If the resetFlg is true, then the counter is reset to zero after this
+interface call returns.</p>
+
+<p>See also: <a href="../c3ref/status.html">sqlite3_status()</a> and <a href="../c3ref/db_status.html">sqlite3_db_status()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/str.html b/www/c3ref/str.html
new file mode 100644
index 0000000..0623e8b
--- /dev/null
+++ b/www/c3ref/str.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Dynamic String Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {dynamic string} sqlite3_str -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Dynamic String Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_str sqlite3_str;
+</pre></blockquote>
+<p>
+An instance of the sqlite3_str object contains a dynamically-sized
+string under construction.</p>
+
+<p>The lifecycle of an sqlite3_str object is as follows:
+<ol>
+<li> The sqlite3_str object is created using <a href="../c3ref/str_new.html">sqlite3_str_new()</a>.
+<li> Text is appended to the sqlite3_str object using various
+methods, such as <a href="../c3ref/str_append.html">sqlite3_str_appendf()</a>.
+<li> The sqlite3_str object is destroyed and the string it created
+is returned using the <a href="../c3ref/str_finish.html">sqlite3_str_finish()</a> interface.
+</ol>
+</p><p>1 Constructor: <a href="../c3ref/str_new.html">sqlite3_str_new()</a></p>
+<p>1 Destructor: <a href="../c3ref/str_finish.html">sqlite3_str_finish()</a></p>
+<p>9 Methods:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_append</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_appendall</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_appendchar</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_appendf</a></li>
+<li><a href='../c3ref/str_errcode.html'>sqlite3_str_errcode</a></li>
+<li><a href='../c3ref/str_errcode.html'>sqlite3_str_length</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_reset</a></li>
+<li><a href='../c3ref/str_errcode.html'>sqlite3_str_value</a></li>
+<li><a href='../c3ref/str_append.html'>sqlite3_str_vappendf</a></li>
+</ul>
+</div>
+</p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/str_append.html b/www/c3ref/str_append.html
new file mode 100644
index 0000000..b38da20
--- /dev/null
+++ b/www/c3ref/str_append.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Add Content To A Dynamic String</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_str_append sqlite3_str_appendall sqlite3_str_appendchar sqlite3_str_appendf sqlite3_str_reset sqlite3_str_vappendf -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Add Content To A Dynamic String</h2>
+</div>
+<blockquote><pre>
+void sqlite3_str_appendf(sqlite3_str*, const char *zFormat, ...);
+void sqlite3_str_vappendf(sqlite3_str*, const char *zFormat, va_list);
+void sqlite3_str_append(sqlite3_str*, const char *zIn, int N);
+void sqlite3_str_appendall(sqlite3_str*, const char *zIn);
+void sqlite3_str_appendchar(sqlite3_str*, int N, char C);
+void sqlite3_str_reset(sqlite3_str*);
+</pre></blockquote>
+<p>
+These interfaces add content to an sqlite3_str object previously obtained
+from <a href="../c3ref/str_new.html">sqlite3_str_new()</a>.</p>
+
+<p>The <a href="../c3ref/str_append.html">sqlite3_str_appendf(X,F,...)</a> and
+<a href="../c3ref/str_append.html">sqlite3_str_vappendf(X,F,V)</a> interfaces uses the <a href="../printf.html">built-in printf</a>
+functionality of SQLite to append formatted text onto the end of
+<a href="../c3ref/str.html">sqlite3_str</a> object X.</p>
+
+<p>The <a href="../c3ref/str_append.html">sqlite3_str_append(X,S,N)</a> method appends exactly N bytes from string S
+onto the end of the <a href="../c3ref/str.html">sqlite3_str</a> object X. N must be non-negative.
+S must contain at least N non-zero bytes of content. To append a
+zero-terminated string in its entirety, use the <a href="../c3ref/str_append.html">sqlite3_str_appendall()</a>
+method instead.</p>
+
+<p>The <a href="../c3ref/str_append.html">sqlite3_str_appendall(X,S)</a> method appends the complete content of
+zero-terminated string S onto the end of <a href="../c3ref/str.html">sqlite3_str</a> object X.</p>
+
+<p>The <a href="../c3ref/str_append.html">sqlite3_str_appendchar(X,N,C)</a> method appends N copies of the
+single-byte character C onto the end of <a href="../c3ref/str.html">sqlite3_str</a> object X.
+This method can be used, for example, to add whitespace indentation.</p>
+
+<p>The <a href="../c3ref/str_append.html">sqlite3_str_reset(X)</a> method resets the string under construction
+inside <a href="../c3ref/str.html">sqlite3_str</a> object X back to zero bytes in length.</p>
+
+<p>These methods do not return a result code. If an error occurs, that fact
+is recorded in the <a href="../c3ref/str.html">sqlite3_str</a> object and can be recovered by a
+subsequent call to <a href="../c3ref/str_errcode.html">sqlite3_str_errcode(X)</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/str_errcode.html b/www/c3ref/str_errcode.html
new file mode 100644
index 0000000..4d99c41
--- /dev/null
+++ b/www/c3ref/str_errcode.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Status Of A Dynamic String</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_str_errcode sqlite3_str_length sqlite3_str_value -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Status Of A Dynamic String</h2>
+</div>
+<blockquote><pre>
+int sqlite3_str_errcode(sqlite3_str*);
+int sqlite3_str_length(sqlite3_str*);
+char *sqlite3_str_value(sqlite3_str*);
+</pre></blockquote>
+<p>
+These interfaces return the current status of an <a href="../c3ref/str.html">sqlite3_str</a> object.</p>
+
+<p>If any prior errors have occurred while constructing the dynamic string
+in sqlite3_str X, then the <a href="../c3ref/str_errcode.html">sqlite3_str_errcode(X)</a> method will return
+an appropriate error code. The <a href="../c3ref/str_errcode.html">sqlite3_str_errcode(X)</a> method returns
+<a href="../rescode.html#nomem">SQLITE_NOMEM</a> following any out-of-memory error, or
+<a href="../rescode.html#toobig">SQLITE_TOOBIG</a> if the size of the dynamic string exceeds
+<a href="../limits.html#max_length">SQLITE_MAX_LENGTH</a>, or <a href="../rescode.html#ok">SQLITE_OK</a> if there have been no errors.</p>
+
+<p>The <a href="../c3ref/str_errcode.html">sqlite3_str_length(X)</a> method returns the current length, in bytes,
+of the dynamic string under construction in <a href="../c3ref/str.html">sqlite3_str</a> object X.
+The length returned by <a href="../c3ref/str_errcode.html">sqlite3_str_length(X)</a> does not include the
+zero-termination byte.</p>
+
+<p>The <a href="../c3ref/str_errcode.html">sqlite3_str_value(X)</a> method returns a pointer to the current
+content of the dynamic string under construction in X. The value
+returned by <a href="../c3ref/str_errcode.html">sqlite3_str_value(X)</a> is managed by the sqlite3_str object X
+and might be freed or altered by any subsequent method on the same
+<a href="../c3ref/str.html">sqlite3_str</a> object. Applications must not used the pointer returned
+<a href="../c3ref/str_errcode.html">sqlite3_str_value(X)</a> after any subsequent method call on the same
+object. Applications may change the content of the string returned
+by <a href="../c3ref/str_errcode.html">sqlite3_str_value(X)</a> as long as they do not write into any bytes
+outside the range of 0 to <a href="../c3ref/str_errcode.html">sqlite3_str_length(X)</a> and do not read or
+write any byte after any subsequent sqlite3_str method call.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/str_finish.html b/www/c3ref/str_finish.html
new file mode 100644
index 0000000..ea585a2
--- /dev/null
+++ b/www/c3ref/str_finish.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Finalize A Dynamic String</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_str_finish -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Finalize A Dynamic String</h2>
+</div>
+<blockquote><pre>
+char *sqlite3_str_finish(sqlite3_str*);
+</pre></blockquote>
+<p>
+The <a href="../c3ref/str_finish.html">sqlite3_str_finish(X)</a> interface destroys the sqlite3_str object X
+and returns a pointer to a memory buffer obtained from <a href="../c3ref/free.html">sqlite3_malloc64()</a>
+that contains the constructed string. The calling application should
+pass the returned value to <a href="../c3ref/free.html">sqlite3_free()</a> to avoid a memory leak.
+The <a href="../c3ref/str_finish.html">sqlite3_str_finish(X)</a> interface may return a NULL pointer if any
+errors were encountered during construction of the string. The
+<a href="../c3ref/str_finish.html">sqlite3_str_finish(X)</a> interface will also return a NULL pointer if the
+string in <a href="../c3ref/str.html">sqlite3_str</a> object X is zero bytes long.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/str_new.html b/www/c3ref/str_new.html
new file mode 100644
index 0000000..3e337c5
--- /dev/null
+++ b/www/c3ref/str_new.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Create A New Dynamic String Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_str_new -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Create A New Dynamic String Object</h2>
+</div>
+<blockquote><pre>
+sqlite3_str *sqlite3_str_new(sqlite3*);
+</pre></blockquote>
+<p>
+The <a href="../c3ref/str_new.html">sqlite3_str_new(D)</a> interface allocates and initializes
+a new <a href="../c3ref/str.html">sqlite3_str</a> object. To avoid memory leaks, the object returned by
+<a href="../c3ref/str_new.html">sqlite3_str_new()</a> must be freed by a subsequent call to
+<a href="../c3ref/str_finish.html">sqlite3_str_finish(X)</a>.</p>
+
+<p>The <a href="../c3ref/str_new.html">sqlite3_str_new(D)</a> interface always returns a pointer to a
+valid <a href="../c3ref/str.html">sqlite3_str</a> object, though in the event of an out-of-memory
+error the returned object might be a special singleton that will
+silently reject new text, always return SQLITE_NOMEM from
+<a href="../c3ref/str_errcode.html">sqlite3_str_errcode()</a>, always return 0 for
+<a href="../c3ref/str_errcode.html">sqlite3_str_length()</a>, and always return NULL from
+<a href="../c3ref/str_finish.html">sqlite3_str_finish(X)</a>. It is always safe to use the value
+returned by <a href="../c3ref/str_new.html">sqlite3_str_new(D)</a> as the sqlite3_str parameter
+to any of the other <a href="../c3ref/str.html">sqlite3_str</a> methods.</p>
+
+<p>The D parameter to <a href="../c3ref/str_new.html">sqlite3_str_new(D)</a> may be NULL. If the
+D parameter in <a href="../c3ref/str_new.html">sqlite3_str_new(D)</a> is not NULL, then the maximum
+length of the string contained in the <a href="../c3ref/str.html">sqlite3_str</a> object will be
+the value set for <a href="../c3ref/limit.html">sqlite3_limit</a>(D,<a href="../c3ref/c_limit_attached.html#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a>) instead
+of <a href="../limits.html#max_length">SQLITE_MAX_LENGTH</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/strglob.html b/www/c3ref/strglob.html
new file mode 100644
index 0000000..1981019
--- /dev/null
+++ b/www/c3ref/strglob.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>String Globbing</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_strglob -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>String Globbing</h2>
+</div>
+<blockquote><pre>
+int sqlite3_strglob(const char *zGlob, const char *zStr);
+</pre></blockquote>
+<p>The <a href="../c3ref/strglob.html">sqlite3_strglob(P,X)</a> interface returns zero if and only if
+string X matches the <a href="../lang_expr.html#glob">GLOB</a> pattern P.
+The definition of <a href="../lang_expr.html#glob">GLOB</a> pattern matching used in
+<a href="../c3ref/strglob.html">sqlite3_strglob(P,X)</a> is the same as for the "X GLOB P" operator in the
+SQL dialect understood by SQLite. The <a href="../c3ref/strglob.html">sqlite3_strglob(P,X)</a> function
+is case sensitive.</p>
+
+<p>Note that this routine returns zero on a match and non-zero if the strings
+do not match, the same as <a href="../c3ref/stricmp.html">sqlite3_stricmp()</a> and <a href="../c3ref/stricmp.html">sqlite3_strnicmp()</a>.</p>
+
+<p>See also: <a href="../c3ref/strlike.html">sqlite3_strlike()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/stricmp.html b/www/c3ref/stricmp.html
new file mode 100644
index 0000000..5cd7985
--- /dev/null
+++ b/www/c3ref/stricmp.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>String Comparison</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_stricmp sqlite3_strnicmp -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>String Comparison</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stricmp(const char *, const char *);
+int sqlite3_strnicmp(const char *, const char *, int);
+</pre></blockquote>
+<p>
+The <a href="../c3ref/stricmp.html">sqlite3_stricmp()</a> and <a href="../c3ref/stricmp.html">sqlite3_strnicmp()</a> APIs allow applications
+and extensions to compare the contents of two buffers containing UTF-8
+strings in a case-independent fashion, using the same definition of "case
+independence" that SQLite uses internally when comparing identifiers.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/strlike.html b/www/c3ref/strlike.html
new file mode 100644
index 0000000..02f5a77
--- /dev/null
+++ b/www/c3ref/strlike.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>String LIKE Matching</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_strlike -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>String LIKE Matching</h2>
+</div>
+<blockquote><pre>
+int sqlite3_strlike(const char *zGlob, const char *zStr, unsigned int cEsc);
+</pre></blockquote>
+<p>The <a href="../c3ref/strlike.html">sqlite3_strlike(P,X,E)</a> interface returns zero if and only if
+string X matches the <a href="../lang_expr.html#like">LIKE</a> pattern P with escape character E.
+The definition of <a href="../lang_expr.html#like">LIKE</a> pattern matching used in
+<a href="../c3ref/strlike.html">sqlite3_strlike(P,X,E)</a> is the same as for the "X LIKE P ESCAPE E"
+operator in the SQL dialect understood by SQLite. For "X LIKE P" without
+the ESCAPE clause, set the E parameter of <a href="../c3ref/strlike.html">sqlite3_strlike(P,X,E)</a> to 0.
+As with the LIKE operator, the <a href="../c3ref/strlike.html">sqlite3_strlike(P,X,E)</a> function is case
+insensitive - equivalent upper and lower case ASCII characters match
+one another.</p>
+
+<p>The <a href="../c3ref/strlike.html">sqlite3_strlike(P,X,E)</a> function matches Unicode characters, though
+only ASCII characters are case folded.</p>
+
+<p>Note that this routine returns zero on a match and non-zero if the strings
+do not match, the same as <a href="../c3ref/stricmp.html">sqlite3_stricmp()</a> and <a href="../c3ref/stricmp.html">sqlite3_strnicmp()</a>.</p>
+
+<p>See also: <a href="../c3ref/strglob.html">sqlite3_strglob()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/system_errno.html b/www/c3ref/system_errno.html
new file mode 100644
index 0000000..edf3674
--- /dev/null
+++ b/www/c3ref/system_errno.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Low-level system error code</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_system_errno -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Low-level system error code</h2>
+</div>
+<blockquote><pre>
+int sqlite3_system_errno(sqlite3*);
+</pre></blockquote>
+<p>
+Attempt to return the underlying operating system error code or error
+number that caused the most recent I/O error or failure to open a file.
+The return value is OS-dependent. For example, on unix systems, after
+<a href="../c3ref/open.html">sqlite3_open_v2()</a> returns <a href="../rescode.html#cantopen">SQLITE_CANTOPEN</a>, this interface could be
+called to get back the underlying "errno" that caused the problem, such
+as ENOSPC, EAUTH, EISDIR, and so forth.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/table_column_metadata.html b/www/c3ref/table_column_metadata.html
new file mode 100644
index 0000000..d641f69
--- /dev/null
+++ b/www/c3ref/table_column_metadata.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Extract Metadata About A Column Of A Table</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_table_column_metadata -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Extract Metadata About A Column Of A Table</h2>
+</div>
+<blockquote><pre>
+int sqlite3_table_column_metadata(
+ sqlite3 *db, /* Connection handle */
+ const char *zDbName, /* Database name or NULL */
+ const char *zTableName, /* Table name */
+ const char *zColumnName, /* Column name */
+ char const **pzDataType, /* OUTPUT: Declared data type */
+ char const **pzCollSeq, /* OUTPUT: Collation sequence name */
+ int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */
+ int *pPrimaryKey, /* OUTPUT: True if column part of PK */
+ int *pAutoinc /* OUTPUT: True if column is auto-increment */
+);
+</pre></blockquote>
+<p>
+The sqlite3_table_column_metadata(X,D,T,C,....) routine returns
+information about column C of table T in database D
+on <a href="../c3ref/sqlite3.html">database connection</a> X. The sqlite3_table_column_metadata()
+interface returns SQLITE_OK and fills in the non-NULL pointers in
+the final five arguments with appropriate values if the specified
+column exists. The sqlite3_table_column_metadata() interface returns
+SQLITE_ERROR if the specified column does not exist.
+If the column-name parameter to sqlite3_table_column_metadata() is a
+NULL pointer, then this routine simply checks for the existence of the
+table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it
+does not. If the table name parameter T in a call to
+sqlite3_table_column_metadata(X,D,T,C,...) is NULL then the result is
+undefined behavior.</p>
+
+<p>The column is identified by the second, third and fourth parameters to
+this function. The second parameter is either the name of the database
+(i.e. "main", "temp", or an attached database) containing the specified
+table or NULL. If it is NULL, then all attached databases are searched
+for the table using the same algorithm used by the database engine to
+resolve unqualified table references.</p>
+
+<p>The third and fourth parameters to this function are the table and column
+name of the desired column, respectively.</p>
+
+<p>Metadata is returned by writing to the memory locations passed as the 5th
+and subsequent parameters to this function. Any of these arguments may be
+NULL, in which case the corresponding element of metadata is omitted.</p>
+
+<p><blockquote>
+<table border="1">
+<tr><th> Parameter <th> Output<br>Type <th> Description</p>
+
+<p><tr><td> 5th <td> const char* <td> Data type
+<tr><td> 6th <td> const char* <td> Name of default collation sequence
+<tr><td> 7th <td> int <td> True if column has a NOT NULL constraint
+<tr><td> 8th <td> int <td> True if column is part of the PRIMARY KEY
+<tr><td> 9th <td> int <td> True if column is <a href="../autoinc.html">AUTOINCREMENT</a>
+</table>
+</blockquote></p>
+
+<p>The memory pointed to by the character pointers returned for the
+declaration type and collation sequence is valid until the next
+call to any SQLite API function.</p>
+
+<p>If the specified table is actually a view, an <a href="../rescode.html">error code</a> is returned.</p>
+
+<p>If the specified column is "rowid", "oid" or "_rowid_" and the table
+is not a <a href="../withoutrowid.html">WITHOUT ROWID</a> table and an
+<a href="../lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column has been explicitly declared, then the output
+parameters are set for the explicitly declared column. If there is no
+<a href="../lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column, then the outputs
+for the <a href="../lang_createtable.html#rowid">rowid</a> are set as follows:</p>
+
+<p><pre>
+data type: "INTEGER"
+collation sequence: "BINARY"
+not null: 0
+primary key: 1
+auto increment: 0
+</pre></p>
+
+<p>This function causes all database schemas to be read from disk and
+parsed, if that has not already been done, and returns an error if
+any errors are encountered while loading the schema.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/temp_directory.html b/www/c3ref/temp_directory.html
new file mode 100644
index 0000000..0930e62
--- /dev/null
+++ b/www/c3ref/temp_directory.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Name Of The Folder Holding Temporary Files</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_temp_directory -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Name Of The Folder Holding Temporary Files</h2>
+</div>
+<blockquote><pre>
+SQLITE_EXTERN char *sqlite3_temp_directory;
+</pre></blockquote>
+<p>
+If this global variable is made to point to a string which is
+the name of a folder (a.k.a. directory), then all temporary files
+created by SQLite when using a built-in <a href="../c3ref/vfs.html">VFS</a>
+will be placed in that directory. If this variable
+is a NULL pointer, then SQLite performs a search for an appropriate
+temporary file directory.</p>
+
+<p>Applications are strongly discouraged from using this global variable.
+It is required to set a temporary folder on Windows Runtime (WinRT).
+But for all other platforms, it is highly recommended that applications
+neither read nor write this variable. This global variable is a relic
+that exists for backwards compatibility of legacy applications and should
+be avoided in new projects.</p>
+
+<p>It is not safe to read or modify this variable in more than one
+thread at a time. It is not safe to read or modify this variable
+if a <a href="../c3ref/sqlite3.html">database connection</a> is being used at the same time in a separate
+thread.
+It is intended that this variable be set once
+as part of process initialization and before any SQLite interface
+routines have been called and that this variable remain unchanged
+thereafter.</p>
+
+<p>The <a href="../pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a> may modify this variable and cause
+it to point to memory obtained from <a href="../c3ref/free.html">sqlite3_malloc</a>. Furthermore,
+the <a href="../pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a> always assumes that any string
+that this variable points to is held in memory obtained from
+<a href="../c3ref/free.html">sqlite3_malloc</a> and the pragma may attempt to free that memory
+using <a href="../c3ref/free.html">sqlite3_free</a>.
+Hence, if this variable is modified directly, either it should be
+made NULL or made to point to memory obtained from <a href="../c3ref/free.html">sqlite3_malloc</a>
+or else the use of the <a href="../pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a> should be avoided.
+Except when requested by the <a href="../pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a>, SQLite
+does not free the memory that sqlite3_temp_directory points to. If
+the application wants that memory to be freed, it must do
+so itself, taking care to only do so after all <a href="../c3ref/sqlite3.html">database connection</a>
+objects have been destroyed.</p>
+
+<p><b>Note to Windows Runtime users:</b> The temporary directory must be set
+prior to calling <a href="../c3ref/open.html">sqlite3_open</a> or <a href="../c3ref/open.html">sqlite3_open_v2</a>. Otherwise, various
+features that require the use of temporary files may fail. Here is an
+example of how to do this using C++ with the Windows Runtime:</p>
+
+<p><blockquote><pre>
+LPCWSTR zPath = Windows::Storage::ApplicationData::Current->
+&nbsp; TemporaryFolder->Path->Data();
+char zPathBuf&#91;MAX_PATH + 1&#93;;
+memset(zPathBuf, 0, sizeof(zPathBuf));
+WideCharToMultiByte(CP_UTF8, 0, zPath, -1, zPathBuf, sizeof(zPathBuf),
+&nbsp; NULL, NULL);
+sqlite3_temp_directory = sqlite3_mprintf("%s", zPathBuf);
+</pre></blockquote>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/test_control.html b/www/c3ref/test_control.html
new file mode 100644
index 0000000..5821565
--- /dev/null
+++ b/www/c3ref/test_control.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Testing Interface</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_test_control -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Testing Interface</h2>
+</div>
+<blockquote><pre>
+int sqlite3_test_control(int op, ...);
+</pre></blockquote>
+<p>
+The sqlite3_test_control() interface is used to read out internal
+state of SQLite and to inject faults into SQLite for testing
+purposes. The first parameter is an operation code that determines
+the number, meaning, and operation of all subsequent parameters.</p>
+
+<p>This interface is not for use by applications. It exists solely
+for verifying the correct operation of the SQLite library. Depending
+on how the SQLite library is compiled, this interface might not exist.</p>
+
+<p>The details of the operation codes, their meanings, the parameters
+they take, and what they do are all subject to change without notice.
+Unlike most of the SQLite API, this function is not guaranteed to
+operate consistently from one release to the next.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/threadsafe.html b/www/c3ref/threadsafe.html
new file mode 100644
index 0000000..92337d8
--- /dev/null
+++ b/www/c3ref/threadsafe.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Test To See If The Library Is Threadsafe</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_threadsafe -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Test To See If The Library Is Threadsafe</h2>
+</div>
+<blockquote><pre>
+int sqlite3_threadsafe(void);
+</pre></blockquote>
+<p>
+The sqlite3_threadsafe() function returns zero if and only if
+SQLite was compiled with mutexing code omitted due to the
+<a href="../compile.html#threadsafe">SQLITE_THREADSAFE</a> compile-time option being set to 0.</p>
+
+<p>SQLite can be compiled with or without mutexes. When
+the <a href="../compile.html#threadsafe">SQLITE_THREADSAFE</a> C preprocessor macro is 1 or 2, mutexes
+are enabled and SQLite is threadsafe. When the
+<a href="../compile.html#threadsafe">SQLITE_THREADSAFE</a> macro is 0,
+the mutexes are omitted. Without the mutexes, it is not safe
+to use SQLite concurrently from more than one thread.</p>
+
+<p>Enabling mutexes incurs a measurable performance penalty.
+So if speed is of utmost importance, it makes sense to disable
+the mutexes. But for maximum safety, mutexes should be enabled.
+The default behavior is for mutexes to be enabled.</p>
+
+<p>This interface can be used by an application to make sure that the
+version of SQLite that it is linking against was compiled with
+the desired setting of the <a href="../compile.html#threadsafe">SQLITE_THREADSAFE</a> macro.</p>
+
+<p>This interface only reports on the compile-time mutex setting
+of the <a href="../compile.html#threadsafe">SQLITE_THREADSAFE</a> flag. If SQLite is compiled with
+SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but
+can be fully or partially disabled using a call to <a href="../c3ref/config.html">sqlite3_config()</a>
+with the verbs <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">SQLITE_CONFIG_SINGLETHREAD</a>, <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">SQLITE_CONFIG_MULTITHREAD</a>,
+or <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">SQLITE_CONFIG_SERIALIZED</a>. The return value of the
+sqlite3_threadsafe() function shows only the compile-time setting of
+thread safety, not any run-time changes to that setting made by
+sqlite3_config(). In other words, the return value from sqlite3_threadsafe()
+is unchanged by calls to sqlite3_config().</p>
+
+<p>See the <a href="../threadsafe.html">threading mode</a> documentation for additional information.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/total_changes.html b/www/c3ref/total_changes.html
new file mode 100644
index 0000000..dc95c5a
--- /dev/null
+++ b/www/c3ref/total_changes.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Total Number Of Rows Modified</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_total_changes sqlite3_total_changes64 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Total Number Of Rows Modified</h2>
+</div>
+<blockquote><pre>
+int sqlite3_total_changes(sqlite3*);
+sqlite3_int64 sqlite3_total_changes64(sqlite3*);
+</pre></blockquote>
+<p>
+These functions return the total number of rows inserted, modified or
+deleted by all <a href="../lang_insert.html">INSERT</a>, <a href="../lang_update.html">UPDATE</a> or <a href="../lang_delete.html">DELETE</a> statements completed
+since the database connection was opened, including those executed as
+part of trigger programs. The two functions are identical except for the
+type of the return value and that if the number of rows modified by the
+connection exceeds the maximum value supported by type "int", then
+the return value of sqlite3_total_changes() is undefined. Executing
+any other type of SQL statement does not affect the value returned by
+sqlite3_total_changes().</p>
+
+<p>Changes made as part of <a href="../foreignkeys.html#fk_actions">foreign key actions</a> are included in the
+count, but those made as part of REPLACE constraint resolution are
+not. Changes to a view that are intercepted by INSTEAD OF triggers
+are not counted.</p>
+
+<p>The <a href="../c3ref/total_changes.html">sqlite3_total_changes(D)</a> interface only reports the number
+of rows that changed due to SQL statement run against database
+connection D. Any changes by other database connections are ignored.
+To detect changes against a database file from other database
+connections use the <a href="../pragma.html#pragma_data_version">PRAGMA data_version</a> command or the
+<a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> <a href="../c3ref/file_control.html">file control</a>.</p>
+
+<p>If a separate thread makes changes on the same database connection
+while <a href="../c3ref/total_changes.html">sqlite3_total_changes()</a> is running then the value
+returned is unpredictable and not meaningful.</p>
+
+<p>See also:
+<ul>
+<li> the <a href="../c3ref/changes.html">sqlite3_changes()</a> interface
+<li> the <a href="../pragma.html#pragma_count_changes">count_changes pragma</a>
+<li> the <a href="../lang_corefunc.html#changes">changes() SQL function</a>
+<li> the <a href="../pragma.html#pragma_data_version">data_version pragma</a>
+<li> the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> <a href="../c3ref/file_control.html">file control</a>
+</ul>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/trace_v2.html b/www/c3ref/trace_v2.html
new file mode 100644
index 0000000..4a2fd3a
--- /dev/null
+++ b/www/c3ref/trace_v2.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQL Trace Hook</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_trace_v2 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>SQL Trace Hook</h2>
+</div>
+<blockquote><pre>
+int sqlite3_trace_v2(
+ sqlite3*,
+ unsigned uMask,
+ int(*xCallback)(unsigned,void*,void*,void*),
+ void *pCtx
+);
+</pre></blockquote>
+<p>
+The sqlite3_trace_v2(D,M,X,P) interface registers a trace callback
+function X against <a href="../c3ref/sqlite3.html">database connection</a> D, using property mask M
+and context pointer P. If the X callback is
+NULL or if the M mask is zero, then tracing is disabled. The
+M argument should be the bitwise OR-ed combination of
+zero or more <a href="../c3ref/c_trace.html">SQLITE_TRACE</a> constants.</p>
+
+<p>Each call to either sqlite3_trace() or sqlite3_trace_v2() overrides
+(cancels) any prior calls to sqlite3_trace() or sqlite3_trace_v2().</p>
+
+<p>The X callback is invoked whenever any of the events identified by
+mask M occur. The integer return value from the callback is currently
+ignored, though this may change in future releases. Callback
+implementations should return zero to ensure future compatibility.</p>
+
+<p>A trace callback is invoked with four arguments: callback(T,C,P,X).
+The T argument is one of the <a href="../c3ref/c_trace.html">SQLITE_TRACE</a>
+constants to indicate why the callback was invoked.
+The C argument is a copy of the context pointer.
+The P and X arguments are pointers whose meanings depend on T.</p>
+
+<p>The sqlite3_trace_v2() interface is intended to replace the legacy
+interfaces <a href="../c3ref/profile.html">sqlite3_trace()</a> and <a href="../c3ref/profile.html">sqlite3_profile()</a>, both of which
+are deprecated.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/txn_state.html b/www/c3ref/txn_state.html
new file mode 100644
index 0000000..8b4ab3d
--- /dev/null
+++ b/www/c3ref/txn_state.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Determine the transaction state of a database</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_txn_state -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Determine the transaction state of a database</h2>
+</div>
+<blockquote><pre>
+int sqlite3_txn_state(sqlite3*,const char *zSchema);
+</pre></blockquote>
+<p>
+The sqlite3_txn_state(D,S) interface returns the current
+<a href="../c3ref/c_txn_none.html">transaction state</a> of schema S in database connection D. If S is NULL,
+then the highest transaction state of any schema on database connection D
+is returned. Transaction states are (in order of lowest to highest):
+<ol>
+<li value="0"> SQLITE_TXN_NONE
+<li value="1"> SQLITE_TXN_READ
+<li value="2"> SQLITE_TXN_WRITE
+</ol>
+If the S argument to sqlite3_txn_state(D,S) is not the name of
+a valid schema, then -1 is returned.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/unlock_notify.html b/www/c3ref/unlock_notify.html
new file mode 100644
index 0000000..c0d40d1
--- /dev/null
+++ b/www/c3ref/unlock_notify.html
@@ -0,0 +1,245 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Unlock Notification</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_unlock_notify -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Unlock Notification</h2>
+</div>
+<blockquote><pre>
+int sqlite3_unlock_notify(
+ sqlite3 *pBlocked, /* Waiting connection */
+ void (*xNotify)(void **apArg, int nArg), /* Callback function to invoke */
+ void *pNotifyArg /* Argument to pass to xNotify */
+);
+</pre></blockquote>
+<p>
+When running in shared-cache mode, a database operation may fail with
+an <a href="../rescode.html#locked">SQLITE_LOCKED</a> error if the required locks on the shared-cache or
+individual tables within the shared-cache cannot be obtained. See
+<a href="../sharedcache.html">SQLite Shared-Cache Mode</a> for a description of shared-cache locking.
+This API may be used to register a callback that SQLite will invoke
+when the connection currently holding the required lock relinquishes it.
+This API is only available if the library was compiled with the
+<a href="../compile.html#enable_unlock_notify">SQLITE_ENABLE_UNLOCK_NOTIFY</a> C-preprocessor symbol defined.</p>
+
+<p>See Also: <a href="../unlock_notify.html">Using the SQLite Unlock Notification Feature</a>.</p>
+
+<p>Shared-cache locks are released when a database connection concludes
+its current transaction, either by committing it or rolling it back.</p>
+
+<p>When a connection (known as the blocked connection) fails to obtain a
+shared-cache lock and SQLITE_LOCKED is returned to the caller, the
+identity of the database connection (the blocking connection) that
+has locked the required resource is stored internally. After an
+application receives an SQLITE_LOCKED error, it may call the
+sqlite3_unlock_notify() method with the blocked connection handle as
+the first argument to register for a callback that will be invoked
+when the blocking connections current transaction is concluded. The
+callback is invoked from within the <a href="../c3ref/step.html">sqlite3_step</a> or <a href="../c3ref/close.html">sqlite3_close</a>
+call that concludes the blocking connection's transaction.</p>
+
+<p>If sqlite3_unlock_notify() is called in a multi-threaded application,
+there is a chance that the blocking connection will have already
+concluded its transaction by the time sqlite3_unlock_notify() is invoked.
+If this happens, then the specified callback is invoked immediately,
+from within the call to sqlite3_unlock_notify().</p>
+
+<p>If the blocked connection is attempting to obtain a write-lock on a
+shared-cache table, and more than one other connection currently holds
+a read-lock on the same table, then SQLite arbitrarily selects one of
+the other connections to use as the blocking connection.</p>
+
+<p>There may be at most one unlock-notify callback registered by a
+blocked connection. If sqlite3_unlock_notify() is called when the
+blocked connection already has a registered unlock-notify callback,
+then the new callback replaces the old. If sqlite3_unlock_notify() is
+called with a NULL pointer as its second argument, then any existing
+unlock-notify callback is canceled. The blocked connections
+unlock-notify callback may also be canceled by closing the blocked
+connection using <a href="../c3ref/close.html">sqlite3_close()</a>.</p>
+
+<p>The unlock-notify callback is not reentrant. If an application invokes
+any sqlite3_xxx API functions from within an unlock-notify callback, a
+crash or deadlock may be the result.</p>
+
+<p>Unless deadlock is detected (see below), sqlite3_unlock_notify() always
+returns SQLITE_OK.</p>
+
+<p><b>Callback Invocation Details</b></p>
+
+<p>When an unlock-notify callback is registered, the application provides a
+single void* pointer that is passed to the callback when it is invoked.
+However, the signature of the callback function allows SQLite to pass
+it an array of void* context pointers. The first argument passed to
+an unlock-notify callback is a pointer to an array of void* pointers,
+and the second is the number of entries in the array.</p>
+
+<p>When a blocking connection's transaction is concluded, there may be
+more than one blocked connection that has registered for an unlock-notify
+callback. If two or more such blocked connections have specified the
+same callback function, then instead of invoking the callback function
+multiple times, it is invoked once with the set of void* context pointers
+specified by the blocked connections bundled together into an array.
+This gives the application an opportunity to prioritize any actions
+related to the set of unblocked database connections.</p>
+
+<p><b>Deadlock Detection</b></p>
+
+<p>Assuming that after registering for an unlock-notify callback a
+database waits for the callback to be issued before taking any further
+action (a reasonable assumption), then using this API may cause the
+application to deadlock. For example, if connection X is waiting for
+connection Y's transaction to be concluded, and similarly connection
+Y is waiting on connection X's transaction, then neither connection
+will proceed and the system may remain deadlocked indefinitely.</p>
+
+<p>To avoid this scenario, the sqlite3_unlock_notify() performs deadlock
+detection. If a given call to sqlite3_unlock_notify() would put the
+system in a deadlocked state, then SQLITE_LOCKED is returned and no
+unlock-notify callback is registered. The system is said to be in
+a deadlocked state if connection A has registered for an unlock-notify
+callback on the conclusion of connection B's transaction, and connection
+B has itself registered for an unlock-notify callback when connection
+A's transaction is concluded. Indirect deadlock is also detected, so
+the system is also considered to be deadlocked if connection B has
+registered for an unlock-notify callback on the conclusion of connection
+C's transaction, where connection C is waiting on connection A. Any
+number of levels of indirection are allowed.</p>
+
+<p><b>The "DROP TABLE" Exception</b></p>
+
+<p>When a call to <a href="../c3ref/step.html">sqlite3_step()</a> returns SQLITE_LOCKED, it is almost
+always appropriate to call sqlite3_unlock_notify(). There is however,
+one exception. When executing a "DROP TABLE" or "DROP INDEX" statement,
+SQLite checks if there are any currently executing SELECT statements
+that belong to the same connection. If there are, SQLITE_LOCKED is
+returned. In this case there is no "blocking connection", so invoking
+sqlite3_unlock_notify() results in the unlock-notify callback being
+invoked immediately. If the application then re-attempts the "DROP TABLE"
+or "DROP INDEX" query, an infinite loop might be the result.</p>
+
+<p>One way around this problem is to check the extended error code returned
+by an sqlite3_step() call. If there is a blocking connection, then the
+extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in
+the special "DROP TABLE/INDEX" case, the extended error code is just
+SQLITE_LOCKED.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/update_hook.html b/www/c3ref/update_hook.html
new file mode 100644
index 0000000..afed2fa
--- /dev/null
+++ b/www/c3ref/update_hook.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Data Change Notification Callbacks</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_update_hook -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Data Change Notification Callbacks</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_update_hook(
+ sqlite3*,
+ void(*)(void *,int ,char const *,char const *,sqlite3_int64),
+ void*
+);
+</pre></blockquote>
+<p>
+The sqlite3_update_hook() interface registers a callback function
+with the <a href="../c3ref/sqlite3.html">database connection</a> identified by the first argument
+to be invoked whenever a row is updated, inserted or deleted in
+a <a href="../rowidtable.html">rowid table</a>.
+Any callback set by a previous call to this function
+for the same database connection is overridden.</p>
+
+<p>The second argument is a pointer to the function to invoke when a
+row is updated, inserted or deleted in a rowid table.
+The first argument to the callback is a copy of the third argument
+to sqlite3_update_hook().
+The second callback argument is one of <a href="../c3ref/c_alter_table.html">SQLITE_INSERT</a>, <a href="../c3ref/c_alter_table.html">SQLITE_DELETE</a>,
+or <a href="../c3ref/c_alter_table.html">SQLITE_UPDATE</a>, depending on the operation that caused the callback
+to be invoked.
+The third and fourth arguments to the callback contain pointers to the
+database and table name containing the affected row.
+The final callback parameter is the <a href="../lang_createtable.html#rowid">rowid</a> of the row.
+In the case of an update, this is the <a href="../lang_createtable.html#rowid">rowid</a> after the update takes place.</p>
+
+<p>The update hook is not invoked when internal system tables are
+modified (i.e. sqlite_sequence).
+The update hook is not invoked when <a href="../withoutrowid.html">WITHOUT ROWID</a> tables are modified.</p>
+
+<p>In the current implementation, the update hook
+is not invoked when conflicting rows are deleted because of an
+<a href="../lang_conflict.html">ON CONFLICT REPLACE</a> clause. Nor is the update hook
+invoked when rows are deleted using the <a href="../lang_delete.html#truncateopt">truncate optimization</a>.
+The exceptions defined in this paragraph might change in a future
+release of SQLite.</p>
+
+<p>The update hook implementation must not do anything that will modify
+the database connection that invoked the update hook. Any actions
+to modify the database connection must be deferred until after the
+completion of the <a href="../c3ref/step.html">sqlite3_step()</a> call that triggered the update hook.
+Note that <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> and <a href="../c3ref/step.html">sqlite3_step()</a> both modify their
+database connections for the meaning of "modify" in this paragraph.</p>
+
+<p>The sqlite3_update_hook(D,C,P) function
+returns the P argument from the previous call
+on the same <a href="../c3ref/sqlite3.html">database connection</a> D, or NULL for
+the first call on D.</p>
+
+<p>See also the <a href="../c3ref/commit_hook.html">sqlite3_commit_hook()</a>, <a href="../c3ref/commit_hook.html">sqlite3_rollback_hook()</a>,
+and <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_hook()</a> interfaces.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/uri_boolean.html b/www/c3ref/uri_boolean.html
new file mode 100644
index 0000000..d98b766
--- /dev/null
+++ b/www/c3ref/uri_boolean.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Obtain Values For URI Parameters</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_uri_boolean sqlite3_uri_int64 sqlite3_uri_key sqlite3_uri_parameter -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Obtain Values For URI Parameters</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_uri_parameter(sqlite3_filename z, const char *zParam);
+int sqlite3_uri_boolean(sqlite3_filename z, const char *zParam, int bDefault);
+sqlite3_int64 sqlite3_uri_int64(sqlite3_filename, const char*, sqlite3_int64);
+const char *sqlite3_uri_key(sqlite3_filename z, int N);
+</pre></blockquote>
+<p>
+These are utility routines, useful to <a href="../vfs.html">custom VFS implementations</a>,
+that check if a database file was a URI that contained a specific query
+parameter, and if so obtains the value of that query parameter.</p>
+
+<p>The first parameter to these interfaces (hereafter referred to
+as F) must be one of:
+<ul>
+<li> A database filename pointer created by the SQLite core and
+passed into the xOpen() method of a VFS implemention, or
+<li> A filename obtained from <a href="../c3ref/db_filename.html">sqlite3_db_filename()</a>, or
+<li> A new filename constructed using <a href="../c3ref/create_filename.html">sqlite3_create_filename()</a>.
+</ul>
+If the F parameter is not one of the above, then the behavior is
+undefined and probably undesirable. Older versions of SQLite were
+more tolerant of invalid F parameters than newer versions.</p>
+
+<p>If F is a suitable filename (as described in the previous paragraph)
+and if P is the name of the query parameter, then
+sqlite3_uri_parameter(F,P) returns the value of the P
+parameter if it exists or a NULL pointer if P does not appear as a
+query parameter on F. If P is a query parameter of F and it
+has no explicit value, then sqlite3_uri_parameter(F,P) returns
+a pointer to an empty string.</p>
+
+<p>The sqlite3_uri_boolean(F,P,B) routine assumes that P is a boolean
+parameter and returns true (1) or false (0) according to the value
+of P. The sqlite3_uri_boolean(F,P,B) routine returns true (1) if the
+value of query parameter P is one of "yes", "true", or "on" in any
+case or if the value begins with a non-zero number. The
+sqlite3_uri_boolean(F,P,B) routines returns false (0) if the value of
+query parameter P is one of "no", "false", or "off" in any case or
+if the value begins with a numeric zero. If P is not a query
+parameter on F or if the value of P does not match any of the
+above, then sqlite3_uri_boolean(F,P,B) returns (B!=0).</p>
+
+<p>The sqlite3_uri_int64(F,P,D) routine converts the value of P into a
+64-bit signed integer and returns that integer, or D if P does not
+exist. If the value of P is something other than an integer, then
+zero is returned.</p>
+
+<p>The sqlite3_uri_key(F,N) returns a pointer to the name (not
+the value) of the N-th query parameter for filename F, or a NULL
+pointer if N is less than zero or greater than the number of query
+parameters minus 1. The N value is zero-based so N should be 0 to obtain
+the name of the first query parameter, 1 for the second parameter, and
+so forth.</p>
+
+<p>If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and
+sqlite3_uri_boolean(F,P,B) returns B. If F is not a NULL pointer and
+is not a database file pathname pointer that the SQLite core passed
+into the xOpen VFS method, then the behavior of this routine is undefined
+and probably undesirable.</p>
+
+<p>Beginning with SQLite <a href="../releaselog/3_31_0.html">version 3.31.0</a> (2020-01-22) the input F
+parameter can also be the name of a rollback journal file or WAL file
+in addition to the main database file. Prior to version 3.31.0, these
+routines would only work if F was the name of the main database file.
+When the F parameter is the name of the rollback journal or WAL file,
+it has access to all the same query parameters as were found on the
+main database file.</p>
+
+<p>See the <a href="../uri.html">URI filename</a> documentation for additional information.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/user_data.html b/www/c3ref/user_data.html
new file mode 100644
index 0000000..29cc7fa
--- /dev/null
+++ b/www/c3ref/user_data.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>User Data For Functions</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_user_data -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>User Data For Functions</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_user_data(sqlite3_context*);
+</pre></blockquote>
+<p>
+The sqlite3_user_data() interface returns a copy of
+the pointer that was the pUserData parameter (the 5th parameter)
+of the <a href="../c3ref/create_function.html">sqlite3_create_function()</a>
+and <a href="../c3ref/create_function.html">sqlite3_create_function16()</a> routines that originally
+registered the application defined function.</p>
+
+<p>This routine must be called from the same thread in which
+the application-defined function is running.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/value.html b/www/c3ref/value.html
new file mode 100644
index 0000000..a67d056
--- /dev/null
+++ b/www/c3ref/value.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Dynamically Typed Value Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: {protected sqlite3_value} sqlite3_value {unprotected sqlite3_value} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Dynamically Typed Value Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_value sqlite3_value;
+</pre></blockquote>
+<p>
+SQLite uses the sqlite3_value object to represent all values
+that can be stored in a database table. SQLite uses dynamic typing
+for the values it stores. Values stored in sqlite3_value objects
+can be integers, floating point values, strings, BLOBs, or NULL.</p>
+
+<p>An sqlite3_value object may be either "protected" or "unprotected".
+Some interfaces require a protected sqlite3_value. Other interfaces
+will accept either a protected or an unprotected sqlite3_value.
+Every interface that accepts sqlite3_value arguments specifies
+whether or not it requires a protected sqlite3_value. The
+<a href="../c3ref/value_dup.html">sqlite3_value_dup()</a> interface can be used to construct a new
+protected sqlite3_value from an unprotected sqlite3_value.</p>
+
+<p>The terms "protected" and "unprotected" refer to whether or not
+a mutex is held. An internal mutex is held for a protected
+sqlite3_value object but no mutex is held for an unprotected
+sqlite3_value object. If SQLite is compiled to be single-threaded
+(with <a href="../compile.html#threadsafe">SQLITE_THREADSAFE=0</a> and with <a href="../c3ref/threadsafe.html">sqlite3_threadsafe()</a> returning 0)
+or if SQLite is run in one of reduced mutex modes
+<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">SQLITE_CONFIG_SINGLETHREAD</a> or <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">SQLITE_CONFIG_MULTITHREAD</a>
+then there is no distinction between protected and unprotected
+sqlite3_value objects and they can be used interchangeably. However,
+for maximum code portability it is recommended that applications
+still make the distinction between protected and unprotected
+sqlite3_value objects even when not strictly required.</p>
+
+<p>The sqlite3_value objects that are passed as parameters into the
+implementation of <a href="../appfunc.html">application-defined SQL functions</a> are protected.
+The sqlite3_value objects returned by <a href="../c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a>
+are protected.
+The sqlite3_value object returned by
+<a href="../c3ref/column_blob.html">sqlite3_column_value()</a> is unprotected.
+Unprotected sqlite3_value objects may only be used as arguments
+to <a href="../c3ref/result_blob.html">sqlite3_result_value()</a>, <a href="../c3ref/bind_blob.html">sqlite3_bind_value()</a>, and
+<a href="../c3ref/value_dup.html">sqlite3_value_dup()</a>.
+The <a href="../c3ref/value_blob.html">sqlite3_value_type()</a> family of
+interfaces require protected sqlite3_value objects.
+</p><p>19 Methods:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_blob</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_bytes</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_bytes16</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_double</a></li>
+<li><a href='../c3ref/value_dup.html'>sqlite3_value_dup</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_encoding</a></li>
+<li><a href='../c3ref/value_dup.html'>sqlite3_value_free</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_frombind</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_int</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_int64</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_nochange</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_numeric_type</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_pointer</a></li>
+<li><a href='../c3ref/value_subtype.html'>sqlite3_value_subtype</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_text</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_text16</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_text16be</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_text16le</a></li>
+<li><a href='../c3ref/value_blob.html'>sqlite3_value_type</a></li>
+</ul>
+</div>
+</p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/value_blob.html b/www/c3ref/value_blob.html
new file mode 100644
index 0000000..4478b95
--- /dev/null
+++ b/www/c3ref/value_blob.html
@@ -0,0 +1,279 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Obtaining SQL Values</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_value_blob sqlite3_value_bytes sqlite3_value_bytes16 sqlite3_value_double sqlite3_value_encoding sqlite3_value_frombind sqlite3_value_int sqlite3_value_int64 sqlite3_value_nochange sqlite3_value_numeric_type sqlite3_value_pointer sqlite3_value_text sqlite3_value_text16 sqlite3_value_text16be sqlite3_value_text16le sqlite3_value_type -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Obtaining SQL Values</h2>
+</div>
+<blockquote><pre>
+const void *sqlite3_value_blob(sqlite3_value*);
+double sqlite3_value_double(sqlite3_value*);
+int sqlite3_value_int(sqlite3_value*);
+sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
+void *sqlite3_value_pointer(sqlite3_value*, const char*);
+const unsigned char *sqlite3_value_text(sqlite3_value*);
+const void *sqlite3_value_text16(sqlite3_value*);
+const void *sqlite3_value_text16le(sqlite3_value*);
+const void *sqlite3_value_text16be(sqlite3_value*);
+int sqlite3_value_bytes(sqlite3_value*);
+int sqlite3_value_bytes16(sqlite3_value*);
+int sqlite3_value_type(sqlite3_value*);
+int sqlite3_value_numeric_type(sqlite3_value*);
+int sqlite3_value_nochange(sqlite3_value*);
+int sqlite3_value_frombind(sqlite3_value*);
+int sqlite3_value_encoding(sqlite3_value*);
+</pre></blockquote>
+<p>
+<b>Summary:</b>
+<blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td><b>sqlite3_value_blob</b><td>&rarr;<td>BLOB value
+<tr><td><b>sqlite3_value_double</b><td>&rarr;<td>REAL value
+<tr><td><b>sqlite3_value_int</b><td>&rarr;<td>32-bit INTEGER value
+<tr><td><b>sqlite3_value_int64</b><td>&rarr;<td>64-bit INTEGER value
+<tr><td><b>sqlite3_value_pointer</b><td>&rarr;<td>Pointer value
+<tr><td><b>sqlite3_value_text</b><td>&rarr;<td>UTF-8 TEXT value
+<tr><td><b>sqlite3_value_text16</b><td>&rarr;<td>UTF-16 TEXT value in
+the native byteorder
+<tr><td><b>sqlite3_value_text16be</b><td>&rarr;<td>UTF-16be TEXT value
+<tr><td><b>sqlite3_value_text16le</b><td>&rarr;<td>UTF-16le TEXT value
+<tr><td>&nbsp;<td>&nbsp;<td>&nbsp;
+<tr><td><b>sqlite3_value_bytes</b><td>&rarr;<td>Size of a BLOB
+or a UTF-8 TEXT in bytes
+<tr><td><b>sqlite3_value_bytes16&nbsp;&nbsp;</b>
+<td>&rarr;&nbsp;&nbsp;<td>Size of UTF-16
+TEXT in bytes
+<tr><td><b>sqlite3_value_type</b><td>&rarr;<td>Default
+datatype of the value
+<tr><td><b>sqlite3_value_numeric_type&nbsp;&nbsp;</b>
+<td>&rarr;&nbsp;&nbsp;<td>Best numeric datatype of the value
+<tr><td><b>sqlite3_value_nochange&nbsp;&nbsp;</b>
+<td>&rarr;&nbsp;&nbsp;<td>True if the column is unchanged in an UPDATE
+against a virtual table.
+<tr><td><b>sqlite3_value_frombind&nbsp;&nbsp;</b>
+<td>&rarr;&nbsp;&nbsp;<td>True if value originated from a <a href="../lang_expr.html#varparam">bound parameter</a>
+</table></blockquote></p>
+
+<p><b>Details:</b></p>
+
+<p>These routines extract type, size, and content information from
+<a href="../c3ref/value.html">protected sqlite3_value</a> objects. Protected sqlite3_value objects
+are used to pass parameter information into the functions that
+implement <a href="../appfunc.html">application-defined SQL functions</a> and <a href="../vtab.html">virtual tables</a>.</p>
+
+<p>These routines work only with <a href="../c3ref/value.html">protected sqlite3_value</a> objects.
+Any attempt to use these routines on an <a href="../c3ref/value.html">unprotected sqlite3_value</a>
+is not threadsafe.</p>
+
+<p>These routines work just like the corresponding <a href="../c3ref/column_blob.html">column access functions</a>
+except that these routines take a single <a href="../c3ref/value.html">protected sqlite3_value</a> object
+pointer instead of a <a href="../c3ref/stmt.html">sqlite3_stmt*</a> pointer and an integer column number.</p>
+
+<p>The sqlite3_value_text16() interface extracts a UTF-16 string
+in the native byte-order of the host machine. The
+sqlite3_value_text16be() and sqlite3_value_text16le() interfaces
+extract UTF-16 strings as big-endian and little-endian respectively.</p>
+
+<p>If <a href="../c3ref/value.html">sqlite3_value</a> object V was initialized
+using <a href="../c3ref/bind_blob.html">sqlite3_bind_pointer(S,I,P,X,D)</a> or <a href="../c3ref/result_blob.html">sqlite3_result_pointer(C,P,X,D)</a>
+and if X and Y are strings that compare equal according to strcmp(X,Y),
+then sqlite3_value_pointer(V,Y) will return the pointer P. Otherwise,
+sqlite3_value_pointer(V,Y) returns a NULL. The sqlite3_bind_pointer()
+routine is part of the <a href="../bindptr.html">pointer passing interface</a> added for SQLite 3.20.0.</p>
+
+<p>The sqlite3_value_type(V) interface returns the
+<a href="../c3ref/c_blob.html">datatype code</a> for the initial datatype of the
+<a href="../c3ref/value.html">sqlite3_value</a> object V. The returned value is one of <a href="../c3ref/c_blob.html">SQLITE_INTEGER</a>,
+<a href="../c3ref/c_blob.html">SQLITE_FLOAT</a>, <a href="../c3ref/c_blob.html">SQLITE_TEXT</a>, <a href="../c3ref/c_blob.html">SQLITE_BLOB</a>, or <a href="../c3ref/c_blob.html">SQLITE_NULL</a>.
+Other interfaces might change the datatype for an sqlite3_value object.
+For example, if the datatype is initially SQLITE_INTEGER and
+sqlite3_value_text(V) is called to extract a text value for that
+integer, then subsequent calls to sqlite3_value_type(V) might return
+SQLITE_TEXT. Whether or not a persistent internal datatype conversion
+occurs is undefined and may change from one release of SQLite to the next.</p>
+
+<p>The sqlite3_value_numeric_type() interface attempts to apply
+numeric affinity to the value. This means that an attempt is
+made to convert the value to an integer or floating point. If
+such a conversion is possible without loss of information (in other
+words, if the value is a string that looks like a number)
+then the conversion is performed. Otherwise no conversion occurs.
+The <a href="../c3ref/c_blob.html">datatype</a> after conversion is returned.</p>
+
+<p>The sqlite3_value_encoding(X) interface returns one of <a href="../c3ref/c_any.html">SQLITE_UTF8</a>,
+<a href="../c3ref/c_any.html">SQLITE_UTF16BE</a>, or <a href="../c3ref/c_any.html">SQLITE_UTF16LE</a> according to the current encoding
+of the value X, assuming that X has type TEXT. If sqlite3_value_type(X)
+returns something other than SQLITE_TEXT, then the return value from
+sqlite3_value_encoding(X) is meaningless. Calls to
+sqlite3_value_text(X), sqlite3_value_text16(X), sqlite3_value_text16be(X),
+sqlite3_value_text16le(X), sqlite3_value_bytes(X), or
+sqlite3_value_bytes16(X) might change the encoding of the value X and
+thus change the return from subsequent calls to sqlite3_value_encoding(X).</p>
+
+<p>Within the <a href="../vtab.html#xupdate">xUpdate</a> method of a <a href="../vtab.html">virtual table</a>, the
+sqlite3_value_nochange(X) interface returns true if and only if
+the column corresponding to X is unchanged by the UPDATE operation
+that the xUpdate method call was invoked to implement and if
+and the prior <a href="../vtab.html#xcolumn">xColumn</a> method call that was invoked to extracted
+the value for that column returned without setting a result (probably
+because it queried <a href="../c3ref/vtab_nochange.html">sqlite3_vtab_nochange()</a> and found that the column
+was unchanging). Within an <a href="../vtab.html#xupdate">xUpdate</a> method, any value for which
+sqlite3_value_nochange(X) is true will in all other respects appear
+to be a NULL value. If sqlite3_value_nochange(X) is invoked anywhere other
+than within an <a href="../vtab.html#xupdate">xUpdate</a> method call for an UPDATE statement, then
+the return value is arbitrary and meaningless.</p>
+
+<p>The sqlite3_value_frombind(X) interface returns non-zero if the
+value X originated from one of the <a href="../c3ref/bind_blob.html">sqlite3_bind()</a>
+interfaces. If X comes from an SQL literal value, or a table column,
+or an expression, then sqlite3_value_frombind(X) returns zero.</p>
+
+<p>Please pay particular attention to the fact that the pointer returned
+from <a href="../c3ref/value_blob.html">sqlite3_value_blob()</a>, <a href="../c3ref/value_blob.html">sqlite3_value_text()</a>, or
+<a href="../c3ref/value_blob.html">sqlite3_value_text16()</a> can be invalidated by a subsequent call to
+<a href="../c3ref/value_blob.html">sqlite3_value_bytes()</a>, <a href="../c3ref/value_blob.html">sqlite3_value_bytes16()</a>, <a href="../c3ref/value_blob.html">sqlite3_value_text()</a>,
+or <a href="../c3ref/value_blob.html">sqlite3_value_text16()</a>.</p>
+
+<p>These routines must be called from the same thread as
+the SQL function that supplied the <a href="../c3ref/value.html">sqlite3_value*</a> parameters.</p>
+
+<p>As long as the input parameter is correct, these routines can only
+fail if an out-of-memory error occurs during a format conversion.
+Only the following subset of interfaces are subject to out-of-memory
+errors:</p>
+
+<p><ul>
+<li> sqlite3_value_blob()
+<li> sqlite3_value_text()
+<li> sqlite3_value_text16()
+<li> sqlite3_value_text16le()
+<li> sqlite3_value_text16be()
+<li> sqlite3_value_bytes()
+<li> sqlite3_value_bytes16()
+</ul></p>
+
+<p>If an out-of-memory error occurs, then the return value from these
+routines is the same as if the column had contained an SQL NULL value.
+Valid SQL NULL returns can be distinguished from out-of-memory errors
+by invoking the <a href="../c3ref/errcode.html">sqlite3_errcode()</a> immediately after the suspect
+return value is obtained and before any
+other SQLite interface is called on the same <a href="../c3ref/sqlite3.html">database connection</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/value_dup.html b/www/c3ref/value_dup.html
new file mode 100644
index 0000000..289e19c
--- /dev/null
+++ b/www/c3ref/value_dup.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Copy And Free SQL Values</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_value_dup sqlite3_value_free -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Copy And Free SQL Values</h2>
+</div>
+<blockquote><pre>
+sqlite3_value *sqlite3_value_dup(const sqlite3_value*);
+void sqlite3_value_free(sqlite3_value*);
+</pre></blockquote>
+<p>
+The sqlite3_value_dup(V) interface makes a copy of the <a href="../c3ref/value.html">sqlite3_value</a>
+object D and returns a pointer to that copy. The <a href="../c3ref/value.html">sqlite3_value</a> returned
+is a <a href="../c3ref/value.html">protected sqlite3_value</a> object even if the input is not.
+The sqlite3_value_dup(V) interface returns NULL if V is NULL or if a
+memory allocation fails. If V is a <a href="../bindptr.html">pointer value</a>, then the result
+of sqlite3_value_dup(V) is a NULL value.</p>
+
+<p>The sqlite3_value_free(V) interface frees an <a href="../c3ref/value.html">sqlite3_value</a> object
+previously obtained from <a href="../c3ref/value_dup.html">sqlite3_value_dup()</a>. If V is a NULL pointer
+then sqlite3_value_free(V) is a harmless no-op.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/value_subtype.html b/www/c3ref/value_subtype.html
new file mode 100644
index 0000000..9147285
--- /dev/null
+++ b/www/c3ref/value_subtype.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Finding The Subtype Of SQL Values</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_value_subtype -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Finding The Subtype Of SQL Values</h2>
+</div>
+<blockquote><pre>
+unsigned int sqlite3_value_subtype(sqlite3_value*);
+</pre></blockquote>
+<p>
+The sqlite3_value_subtype(V) function returns the subtype for
+an <a href="../appfunc.html">application-defined SQL function</a> argument V. The subtype
+information can be used to pass a limited amount of context from
+one SQL function to another. Use the <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>
+routine to set the subtype for the return value of an SQL function.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vfs.html b/www/c3ref/vfs.html
new file mode 100644
index 0000000..df931fb
--- /dev/null
+++ b/www/c3ref/vfs.html
@@ -0,0 +1,337 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>OS Interface Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vfs -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>OS Interface Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_vfs sqlite3_vfs;
+typedef void (*sqlite3_syscall_ptr)(void);
+struct sqlite3_vfs {
+ int iVersion; /* Structure version number (currently 3) */
+ int szOsFile; /* Size of subclassed sqlite3_file */
+ int mxPathname; /* Maximum file pathname length */
+ sqlite3_vfs *pNext; /* Next registered VFS */
+ const char *zName; /* Name of this virtual file system */
+ void *pAppData; /* Pointer to application-specific data */
+ int (*xOpen)(sqlite3_vfs*, sqlite3_filename zName, sqlite3_file*,
+ int flags, int *pOutFlags);
+ int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir);
+ int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut);
+ int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut);
+ void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename);
+ void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg);
+ void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void);
+ void (*xDlClose)(sqlite3_vfs*, void*);
+ int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut);
+ int (*xSleep)(sqlite3_vfs*, int microseconds);
+ int (*xCurrentTime)(sqlite3_vfs*, double*);
+ int (*xGetLastError)(sqlite3_vfs*, int, char *);
+ /*
+ ** The methods above are in version 1 of the sqlite_vfs object
+ ** definition. Those that follow are added in version 2 or later
+ */
+ int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
+ /*
+ ** The methods above are in versions 1 and 2 of the sqlite_vfs object.
+ ** Those below are for version 3 and greater.
+ */
+ int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr);
+ sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName);
+ const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName);
+ /*
+ ** The methods above are in versions 1 through 3 of the sqlite_vfs object.
+ ** New fields may be appended in future versions. The iVersion
+ ** value will increment whenever this happens.
+ */
+};
+</pre></blockquote>
+<p>
+An instance of the sqlite3_vfs object defines the interface between
+the SQLite core and the underlying operating system. The "vfs"
+in the name of the object stands for "virtual file system". See
+the <a href="../vfs.html">VFS documentation</a> for further information.</p>
+
+<p>The VFS interface is sometimes extended by adding new methods onto
+the end. Each time such an extension occurs, the iVersion field
+is incremented. The iVersion value started out as 1 in
+SQLite <a href="../releaselog/3_5_0.html">version 3.5.0</a> on 2007-09-04, then increased to 2
+with SQLite <a href="../releaselog/3_7_0.html">version 3.7.0</a> on 2010-07-21, and then increased
+to 3 with SQLite <a href="../releaselog/3_7_6.html">version 3.7.6</a> on 2011-04-12. Additional fields
+may be appended to the sqlite3_vfs object and the iVersion value
+may increase again in future versions of SQLite.
+Note that due to an oversight, the structure
+of the sqlite3_vfs object changed in the transition from
+SQLite <a href="../releaselog/3_5_9.html">version 3.5.9</a> to <a href="../releaselog/3_6_0.html">version 3.6.0</a> on 2008-07-16
+and yet the iVersion field was not increased.</p>
+
+<p>The szOsFile field is the size of the subclassed <a href="../c3ref/file.html">sqlite3_file</a>
+structure used by this VFS. mxPathname is the maximum length of
+a pathname in this VFS.</p>
+
+<p>Registered sqlite3_vfs objects are kept on a linked list formed by
+the pNext pointer. The <a href="../c3ref/vfs_find.html">sqlite3_vfs_register()</a>
+and <a href="../c3ref/vfs_find.html">sqlite3_vfs_unregister()</a> interfaces manage this list
+in a thread-safe way. The <a href="../c3ref/vfs_find.html">sqlite3_vfs_find()</a> interface
+searches the list. Neither the application code nor the VFS
+implementation should use the pNext pointer.</p>
+
+<p>The pNext field is the only field in the sqlite3_vfs
+structure that SQLite will ever modify. SQLite will only access
+or modify this field while holding a particular static mutex.
+The application should never modify anything within the sqlite3_vfs
+object once the object has been registered.</p>
+
+<p>The zName field holds the name of the VFS module. The name must
+be unique across all VFS modules.</p>
+
+<p><a name="sqlite3vfsxopen"></a>
+
+SQLite guarantees that the zFilename parameter to xOpen
+is either a NULL pointer or string obtained
+from xFullPathname() with an optional suffix added.
+If a suffix is added to the zFilename parameter, it will
+consist of a single "-" character followed by no more than
+11 alphanumeric and/or "-" characters.
+SQLite further guarantees that
+the string will be valid and unchanged until xClose() is
+called. Because of the previous sentence,
+the <a href="../c3ref/file.html">sqlite3_file</a> can safely store a pointer to the
+filename if it needs to remember the filename for some reason.
+If the zFilename parameter to xOpen is a NULL pointer then xOpen
+must invent its own temporary name for the file. Whenever the
+xFilename parameter is NULL it will also be the case that the
+flags parameter will include <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_DELETEONCLOSE</a>.</p>
+
+<p>The flags argument to xOpen() includes all bits set in
+the flags argument to <a href="../c3ref/open.html">sqlite3_open_v2()</a>. Or if <a href="../c3ref/open.html">sqlite3_open()</a>
+or <a href="../c3ref/open.html">sqlite3_open16()</a> is used, then flags includes at least
+<a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READWRITE</a> | <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_CREATE</a>.
+If xOpen() opens a file read-only then it sets *pOutFlags to
+include <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_READONLY</a>. Other bits in *pOutFlags may be set.</p>
+
+<p>SQLite will also add one of the following flags to the xOpen()
+call, depending on the object being opened:</p>
+
+<p><ul>
+<li> <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_MAIN_DB</a>
+<li> <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_MAIN_JOURNAL</a>
+<li> <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_TEMP_DB</a>
+<li> <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_TEMP_JOURNAL</a>
+<li> <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_TRANSIENT_DB</a>
+<li> <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_SUBJOURNAL</a>
+<li> <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_SUPER_JOURNAL</a>
+<li> <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_WAL</a>
+</ul></p>
+
+<p>The file I/O implementation can use the object type flags to
+change the way it deals with files. For example, an application
+that does not care about crash recovery or rollback might make
+the open of a journal file a no-op. Writes to this journal would
+also be no-ops, and any attempt to read the journal would return
+SQLITE_IOERR. Or the implementation might recognize that a database
+file will be doing page-aligned sector reads and writes in a random
+order and set up its I/O subsystem accordingly.</p>
+
+<p>SQLite might also add one of the following flags to the xOpen method:</p>
+
+<p><ul>
+<li> <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_DELETEONCLOSE</a>
+<li> <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXCLUSIVE</a>
+</ul></p>
+
+<p>The <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_DELETEONCLOSE</a> flag means the file should be
+deleted when it is closed. The <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_DELETEONCLOSE</a>
+will be set for TEMP databases and their journals, transient
+databases, and subjournals.</p>
+
+<p>The <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXCLUSIVE</a> flag is always used in conjunction
+with the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_CREATE</a> flag, which are both directly
+analogous to the O_EXCL and O_CREAT flags of the POSIX open()
+API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the
+SQLITE_OPEN_CREATE, is used to indicate that file should always
+be created, and that it is an error if it already exists.
+It is <i>not</i> used to indicate the file should be opened
+for exclusive access.</p>
+
+<p>At least szOsFile bytes of memory are allocated by SQLite
+to hold the <a href="../c3ref/file.html">sqlite3_file</a> structure passed as the third
+argument to xOpen. The xOpen method does not have to
+allocate the structure; it should just fill it in. Note that
+the xOpen method must set the sqlite3_file.pMethods to either
+a valid <a href="../c3ref/io_methods.html">sqlite3_io_methods</a> object or to NULL. xOpen must do
+this even if the open fails. SQLite expects that the sqlite3_file.pMethods
+element will be valid after xOpen returns regardless of the success
+or failure of the xOpen call.</p>
+
+<p><a name="sqlite3vfsxaccess"></a>
+
+The flags argument to xAccess() may be <a href="../c3ref/c_access_exists.html">SQLITE_ACCESS_EXISTS</a>
+to test for the existence of a file, or <a href="../c3ref/c_access_exists.html">SQLITE_ACCESS_READWRITE</a> to
+test whether a file is readable and writable, or <a href="../c3ref/c_access_exists.html">SQLITE_ACCESS_READ</a>
+to test whether a file is at least readable. The SQLITE_ACCESS_READ
+flag is never actually used and is not implemented in the built-in
+VFSes of SQLite. The file is named by the second argument and can be a
+directory. The xAccess method returns <a href="../rescode.html#ok">SQLITE_OK</a> on success or some
+non-zero error code if there is an I/O error or if the name of
+the file given in the second argument is illegal. If SQLITE_OK
+is returned, then non-zero or zero is written into *pResOut to indicate
+whether or not the file is accessible.</p>
+
+<p>SQLite will always allocate at least mxPathname+1 bytes for the
+output buffer xFullPathname. The exact size of the output buffer
+is also passed as a parameter to both methods. If the output buffer
+is not large enough, <a href="../rescode.html#cantopen">SQLITE_CANTOPEN</a> should be returned. Since this is
+handled as a fatal error by SQLite, vfs implementations should endeavor
+to prevent this by setting mxPathname to a sufficiently large value.</p>
+
+<p>The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64()
+interfaces are not strictly a part of the filesystem, but they are
+included in the VFS structure for completeness.
+The xRandomness() function attempts to return nBytes bytes
+of good-quality randomness into zOut. The return value is
+the actual number of bytes of randomness obtained.
+The xSleep() method causes the calling thread to sleep for at
+least the number of microseconds given. The xCurrentTime()
+method returns a Julian Day Number for the current date and time as
+a floating point value.
+The xCurrentTimeInt64() method returns, as an integer, the Julian
+Day Number multiplied by 86400000 (the number of milliseconds in
+a 24-hour day).
+SQLite will use the xCurrentTimeInt64() method to get the current
+date and time if that method is available (if iVersion is 2 or
+greater and the function pointer is not NULL) and will fall back
+to xCurrentTime() if xCurrentTimeInt64() is unavailable.</p>
+
+<p>The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces
+are not used by the SQLite core. These optional interfaces are provided
+by some VFSes to facilitate testing of the VFS code. By overriding
+system calls with functions under its control, a test program can
+simulate faults and error conditions that would otherwise be difficult
+or impossible to induce. The set of system calls that can be overridden
+varies from one VFS to another, and from one version of the same VFS to the
+next. Applications that use these interfaces must be prepared for any
+or all of these interfaces to be NULL or for their behavior to change
+from one release to the next. Applications must not attempt to access
+any of these methods if the iVersion of the VFS is less than 3.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vfs_find.html b/www/c3ref/vfs_find.html
new file mode 100644
index 0000000..d1a51f1
--- /dev/null
+++ b/www/c3ref/vfs_find.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Virtual File System Objects</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vfs_find sqlite3_vfs_register sqlite3_vfs_unregister -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Virtual File System Objects</h2>
+</div>
+<blockquote><pre>
+sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
+int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
+int sqlite3_vfs_unregister(sqlite3_vfs*);
+</pre></blockquote>
+<p>
+A virtual filesystem (VFS) is an <a href="../c3ref/vfs.html">sqlite3_vfs</a> object
+that SQLite uses to interact
+with the underlying operating system. Most SQLite builds come with a
+single default VFS that is appropriate for the host computer.
+New VFSes can be registered and existing VFSes can be unregistered.
+The following interfaces are provided.</p>
+
+<p>The sqlite3_vfs_find() interface returns a pointer to a VFS given its name.
+Names are case sensitive.
+Names are zero-terminated UTF-8 strings.
+If there is no match, a NULL pointer is returned.
+If zVfsName is NULL then the default VFS is returned.</p>
+
+<p>New VFSes are registered with sqlite3_vfs_register().
+Each new VFS becomes the default VFS if the makeDflt flag is set.
+The same VFS can be registered multiple times without injury.
+To make an existing VFS into the default VFS, register it again
+with the makeDflt flag set. If two different VFSes with the
+same name are registered, the behavior is undefined. If a
+VFS is registered with a name that is NULL or an empty string,
+then the behavior is undefined.</p>
+
+<p>Unregister a VFS with the sqlite3_vfs_unregister() interface.
+If the default VFS is unregistered, another VFS is chosen as
+the default. The choice for the new VFS is arbitrary.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab.html b/www/c3ref/vtab.html
new file mode 100644
index 0000000..4929643
--- /dev/null
+++ b/www/c3ref/vtab.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Virtual Table Instance Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vtab -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Virtual Table Instance Object</h2>
+</div>
+<blockquote><pre>
+struct sqlite3_vtab {
+ const sqlite3_module *pModule; /* The module for this virtual table */
+ int nRef; /* Number of open cursors */
+ char *zErrMsg; /* Error message from sqlite3_mprintf() */
+ /* Virtual table implementations will typically add additional fields */
+};
+</pre></blockquote>
+<p>
+Every <a href="../c3ref/module.html">virtual table module</a> implementation uses a subclass
+of this object to describe a particular instance
+of the <a href="../vtab.html">virtual table</a>. Each subclass will
+be tailored to the specific needs of the module implementation.
+The purpose of this superclass is to define certain fields that are
+common to all module implementations.</p>
+
+<p>Virtual tables methods can set an error message by assigning a
+string obtained from <a href="../c3ref/mprintf.html">sqlite3_mprintf()</a> to zErrMsg. The method should
+take care that any prior string is freed by a call to <a href="../c3ref/free.html">sqlite3_free()</a>
+prior to assigning a new string to zErrMsg. After the error message
+is delivered up to the client application, the string will be automatically
+freed by sqlite3_free() and the zErrMsg field will be zeroed.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab_collation.html b/www/c3ref/vtab_collation.html
new file mode 100644
index 0000000..bfc9768
--- /dev/null
+++ b/www/c3ref/vtab_collation.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Determine The Collation For a Virtual Table Constraint</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vtab_collation -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Determine The Collation For a Virtual Table Constraint</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
+</pre></blockquote>
+<p>
+This function may only be called from within a call to the <a href="../vtab.html#xbestindex">xBestIndex</a>
+method of a <a href="../vtab.html">virtual table</a>. This function returns a pointer to a string
+that is the name of the appropriate collation sequence to use for text
+comparisons on the constraint identified by its arguments.</p>
+
+<p>The first argument must be the pointer to the <a href="../c3ref/index_info.html">sqlite3_index_info</a> object
+that is the first parameter to the xBestIndex() method. The second argument
+must be an index into the aConstraint[] array belonging to the
+sqlite3_index_info structure passed to xBestIndex.</p>
+
+<p>Important:
+The first parameter must be the same pointer that is passed into the
+xBestMethod() method. The first parameter may not be a pointer to a
+different <a href="../c3ref/index_info.html">sqlite3_index_info</a> object, even an exact copy.</p>
+
+<p>The return value is computed as follows:</p>
+
+<p><ol>
+<li><p> If the constraint comes from a WHERE clause expression that contains
+a <a href="../lang_expr.html#collateop">COLLATE operator</a>, then the name of the collation specified by
+that COLLATE operator is returned.
+<li><p> If there is no COLLATE operator, but the column that is the subject
+of the constraint specifies an alternative collating sequence via
+a <a href="../lang_createtable.html#collateclause">COLLATE clause</a> on the column definition within the CREATE TABLE
+statement that was passed into <a href="../c3ref/declare_vtab.html">sqlite3_declare_vtab()</a>, then the
+name of that alternative collating sequence is returned.
+<li><p> Otherwise, "BINARY" is returned.
+</ol>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab_config.html b/www/c3ref/vtab_config.html
new file mode 100644
index 0000000..acc4d7f
--- /dev/null
+++ b/www/c3ref/vtab_config.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Virtual Table Interface Configuration</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vtab_config -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Virtual Table Interface Configuration</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_config(sqlite3*, int op, ...);
+</pre></blockquote>
+<p>
+This function may be called by either the <a href="../vtab.html#xconnect">xConnect</a> or <a href="../vtab.html#xcreate">xCreate</a> method
+of a <a href="../vtab.html">virtual table</a> implementation to configure
+various facets of the virtual table interface.</p>
+
+<p>If this interface is invoked outside the context of an xConnect or
+xCreate virtual table method then the behavior is undefined.</p>
+
+<p>In the call sqlite3_vtab_config(D,C,...) the D parameter is the
+<a href="../c3ref/sqlite3.html">database connection</a> in which the virtual table is being created and
+which is passed in as the first argument to the <a href="../vtab.html#xconnect">xConnect</a> or <a href="../vtab.html#xcreate">xCreate</a>
+method that is invoking sqlite3_vtab_config(). The C parameter is one
+of the <a href="../c3ref/c_vtab_constraint_support.html">virtual table configuration options</a>. The presence and meaning
+of parameters after C depend on which <a href="../c3ref/c_vtab_constraint_support.html">virtual table configuration option</a>
+is used.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab_cursor.html b/www/c3ref/vtab_cursor.html
new file mode 100644
index 0000000..0cb24ec
--- /dev/null
+++ b/www/c3ref/vtab_cursor.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Virtual Table Cursor Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vtab_cursor {virtual table cursor} -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Virtual Table Cursor Object</h2>
+</div>
+<blockquote><pre>
+struct sqlite3_vtab_cursor {
+ sqlite3_vtab *pVtab; /* Virtual table of this cursor */
+ /* Virtual table implementations will typically add additional fields */
+};
+</pre></blockquote>
+<p>
+Every <a href="../c3ref/module.html">virtual table module</a> implementation uses a subclass of the
+following structure to describe cursors that point into the
+<a href="../vtab.html">virtual table</a> and are used
+to loop through the virtual table. Cursors are created using the
+<a href="../vtab.html#xopen">xOpen</a> method of the module and are destroyed
+by the <a href="../vtab.html#xclose">xClose</a> method. Cursors are used
+by the <a href="../vtab.html#xfilter">xFilter</a>, <a href="../vtab.html#xnext">xNext</a>, <a href="../vtab.html#xeof">xEof</a>, <a href="../vtab.html#xcolumn">xColumn</a>, and <a href="../vtab.html#xrowid">xRowid</a> methods
+of the module. Each module implementation will define
+the content of a cursor structure to suit its own needs.</p>
+
+<p>This superclass exists in order to define fields of the cursor that
+are common to all implementations.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab_distinct.html b/www/c3ref/vtab_distinct.html
new file mode 100644
index 0000000..665e817
--- /dev/null
+++ b/www/c3ref/vtab_distinct.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Determine if a virtual table query is DISTINCT</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vtab_distinct -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Determine if a virtual table query is DISTINCT</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_distinct(sqlite3_index_info*);
+</pre></blockquote>
+<p>
+This API may only be used from within an <a href="../vtab.html#xbestindex">xBestIndex method</a>
+of a <a href="../vtab.html">virtual table</a> implementation. The result of calling this
+interface from outside of xBestIndex() is undefined and probably harmful.</p>
+
+<p>The sqlite3_vtab_distinct() interface returns an integer between 0 and
+3. The integer returned by sqlite3_vtab_distinct()
+gives the virtual table additional information about how the query
+planner wants the output to be ordered. As long as the virtual table
+can meet the ordering requirements of the query planner, it may set
+the "orderByConsumed" flag.</p>
+
+<p><ol><li value="0"><p>
+If the sqlite3_vtab_distinct() interface returns 0, that means
+that the query planner needs the virtual table to return all rows in the
+sort order defined by the "nOrderBy" and "aOrderBy" fields of the
+<a href="../c3ref/index_info.html">sqlite3_index_info</a> object. This is the default expectation. If the
+virtual table outputs all rows in sorted order, then it is always safe for
+the xBestIndex method to set the "orderByConsumed" flag, regardless of
+the return value from sqlite3_vtab_distinct().
+<li value="1"><p>
+If the sqlite3_vtab_distinct() interface returns 1, that means
+that the query planner does not need the rows to be returned in sorted order
+as long as all rows with the same values in all columns identified by the
+"aOrderBy" field are adjacent. This mode is used when the query planner
+is doing a GROUP BY.
+<li value="2"><p>
+If the sqlite3_vtab_distinct() interface returns 2, that means
+that the query planner does not need the rows returned in any particular
+order, as long as rows with the same values in all "aOrderBy" columns
+are adjacent. Furthermore, only a single row for each particular
+combination of values in the columns identified by the "aOrderBy" field
+needs to be returned. It is always ok for two or more rows with the same
+values in all "aOrderBy" columns to be returned, as long as all such rows
+are adjacent. The virtual table may, if it chooses, omit extra rows
+that have the same value for all columns identified by "aOrderBy".
+However omitting the extra rows is optional.
+This mode is used for a DISTINCT query.
+<li value="3"><p>
+If the sqlite3_vtab_distinct() interface returns 3, that means
+that the query planner needs only distinct rows but it does need the
+rows to be sorted. The virtual table implementation is free to omit
+rows that are identical in all aOrderBy columns, if it wants to, but
+it is not required to omit any rows. This mode is used for queries
+that have both DISTINCT and ORDER BY clauses.
+</ol></p>
+
+<p>For the purposes of comparing virtual table output values to see if the
+values are same value for sorting purposes, two NULL values are considered
+to be the same. In other words, the comparison operator is "IS"
+(or "IS NOT DISTINCT FROM") and not "==".</p>
+
+<p>If a virtual table implementation is unable to meet the requirements
+specified above, then it must not set the "orderByConsumed" flag in the
+<a href="../c3ref/index_info.html">sqlite3_index_info</a> object or an incorrect answer may result.</p>
+
+<p>A virtual table implementation is always free to return rows in any order
+it wants, as long as the "orderByConsumed" flag is not set. When the
+the "orderByConsumed" flag is unset, the query planner will add extra
+<a href="../opcode.html">bytecode</a> to ensure that the final results returned by the SQL query are
+ordered correctly. The use of the "orderByConsumed" flag and the
+sqlite3_vtab_distinct() interface is merely an optimization. Careful
+use of the sqlite3_vtab_distinct() interface and the "orderByConsumed"
+flag might help queries against a virtual table to run faster. Being
+overly aggressive and setting the "orderByConsumed" flag when it is not
+valid to do so, on the other hand, might cause SQLite to return incorrect
+results.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab_in.html b/www/c3ref/vtab_in.html
new file mode 100644
index 0000000..3fcb68e
--- /dev/null
+++ b/www/c3ref/vtab_in.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Identify and handle IN constraints in xBestIndex</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vtab_in -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Identify and handle IN constraints in xBestIndex</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle);
+</pre></blockquote>
+<p>
+This interface may only be used from within an
+<a href="../vtab.html#xbestindex">xBestIndex() method</a> of a <a href="../vtab.html">virtual table</a> implementation.
+The result of invoking this interface from any other context is
+undefined and probably harmful.</p>
+
+<p>A constraint on a virtual table of the form
+"<a href="../lang_expr.html#in_op">column IN (...)</a>" is
+communicated to the xBestIndex method as a
+<a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_EQ</a> constraint. If xBestIndex wants to use
+this constraint, it must set the corresponding
+aConstraintUsage[].argvIndex to a postive integer. Then, under
+the usual mode of handling IN operators, SQLite generates <a href="../opcode.html">bytecode</a>
+that invokes the <a href="../vtab.html#xfilter">xFilter() method</a> once for each value
+on the right-hand side of the IN operator. Thus the virtual table
+only sees a single value from the right-hand side of the IN operator
+at a time.</p>
+
+<p>In some cases, however, it would be advantageous for the virtual
+table to see all values on the right-hand of the IN operator all at
+once. The sqlite3_vtab_in() interfaces facilitates this in two ways:</p>
+
+<p><ol>
+<li><p>
+A call to sqlite3_vtab_in(P,N,-1) will return true (non-zero)
+if and only if the <a href="../c3ref/index_info.html">P->aConstraint</a>[N] constraint
+is an <a href="../lang_expr.html#in_op">IN operator</a> that can be processed all at once. In other words,
+sqlite3_vtab_in() with -1 in the third argument is a mechanism
+by which the virtual table can ask SQLite if all-at-once processing
+of the IN operator is even possible.</p>
+
+<p><li><p>
+A call to sqlite3_vtab_in(P,N,F) with F==1 or F==0 indicates
+to SQLite that the virtual table does or does not want to process
+the IN operator all-at-once, respectively. Thus when the third
+parameter (F) is non-negative, this interface is the mechanism by
+which the virtual table tells SQLite how it wants to process the
+IN operator.
+</ol></p>
+
+<p>The sqlite3_vtab_in(P,N,F) interface can be invoked multiple times
+within the same xBestIndex method call. For any given P,N pair,
+the return value from sqlite3_vtab_in(P,N,F) will always be the same
+within the same xBestIndex call. If the interface returns true
+(non-zero), that means that the constraint is an IN operator
+that can be processed all-at-once. If the constraint is not an IN
+operator or cannot be processed all-at-once, then the interface returns
+false.</p>
+
+<p>All-at-once processing of the IN operator is selected if both of the
+following conditions are met:</p>
+
+<p><ol>
+<li><p> The P->aConstraintUsage[N].argvIndex value is set to a positive
+integer. This is how the virtual table tells SQLite that it wants to
+use the N-th constraint.</p>
+
+<p><li><p> The last call to sqlite3_vtab_in(P,N,F) for which F was
+non-negative had F>=1.
+</ol></p>
+
+<p>If either or both of the conditions above are false, then SQLite uses
+the traditional one-at-a-time processing strategy for the IN constraint.
+If both conditions are true, then the argvIndex-th parameter to the
+xFilter method will be an <a href="../c3ref/value.html">sqlite3_value</a> that appears to be NULL,
+but which can be passed to <a href="../c3ref/vtab_in_first.html">sqlite3_vtab_in_first()</a> and
+<a href="../c3ref/vtab_in_first.html">sqlite3_vtab_in_next()</a> to find all values on the right-hand side
+of the IN constraint.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab_in_first.html b/www/c3ref/vtab_in_first.html
new file mode 100644
index 0000000..4cfd795
--- /dev/null
+++ b/www/c3ref/vtab_in_first.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Find all elements on the right-hand side of an IN constraint.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vtab_in_first sqlite3_vtab_in_next -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Find all elements on the right-hand side of an IN constraint.</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut);
+int sqlite3_vtab_in_next(sqlite3_value *pVal, sqlite3_value **ppOut);
+</pre></blockquote>
+<p>
+These interfaces are only useful from within the
+<a href="../vtab.html#xfilter">xFilter() method</a> of a <a href="../vtab.html">virtual table</a> implementation.
+The result of invoking these interfaces from any other context
+is undefined and probably harmful.</p>
+
+<p>The X parameter in a call to sqlite3_vtab_in_first(X,P) or
+sqlite3_vtab_in_next(X,P) must be one of the parameters to the
+xFilter method which invokes these routines, and specifically
+a parameter that was previously selected for all-at-once IN constraint
+processing use the <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface in the
+<a href="../vtab.html#xbestindex">xBestIndex method</a>. If the X parameter is not
+an xFilter argument that was selected for all-at-once IN constraint
+processing, then these routines return <a href="../rescode.html#misuse">SQLITE_MISUSE</a> or perhaps
+exhibit some other undefined or harmful behavior.</p>
+
+<p>Use these routines to access all values on the right-hand side
+of the IN constraint using code like the following:</p>
+
+<p><blockquote><pre>
+&nbsp; for(rc=sqlite3_vtab_in_first(pList, &pVal);
+&nbsp; rc==SQLITE_OK && pVal
+&nbsp; rc=sqlite3_vtab_in_next(pList, &pVal)
+&nbsp; ){
+&nbsp; // do something with pVal
+&nbsp; }
+&nbsp; if( rc!=SQLITE_OK ){
+&nbsp; // an error has occurred
+&nbsp; }
+</pre></blockquote></p>
+
+<p>On success, the sqlite3_vtab_in_first(X,P) and sqlite3_vtab_in_next(X,P)
+routines return SQLITE_OK and set *P to point to the first or next value
+on the RHS of the IN constraint. If there are no more values on the
+right hand side of the IN constraint, then *P is set to NULL and these
+routines return <a href="../rescode.html#done">SQLITE_DONE</a>. The return value might be
+some other value, such as SQLITE_NOMEM, in the event of a malfunction.</p>
+
+<p>The *ppOut values returned by these routines are only valid until the
+next call to either of these routines or until the end of the xFilter
+method from which these routines were called. If the virtual table
+implementation needs to retain the *ppOut values for longer, it must make
+copies. The *ppOut values are <a href="../c3ref/value.html">protected</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab_nochange.html b/www/c3ref/vtab_nochange.html
new file mode 100644
index 0000000..12f53b9
--- /dev/null
+++ b/www/c3ref/vtab_nochange.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Determine If Virtual Table Column Access Is For UPDATE</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vtab_nochange -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Determine If Virtual Table Column Access Is For UPDATE</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_nochange(sqlite3_context*);
+</pre></blockquote>
+<p>
+If the sqlite3_vtab_nochange(X) routine is called within the <a href="../vtab.html#xcolumn">xColumn</a>
+method of a <a href="../vtab.html">virtual table</a>, then it might return true if the
+column is being fetched as part of an UPDATE operation during which the
+column value will not change. The virtual table implementation can use
+this hint as permission to substitute a return value that is less
+expensive to compute and that the corresponding
+<a href="../vtab.html#xupdate">xUpdate</a> method understands as a "no-change" value.</p>
+
+<p>If the <a href="../vtab.html#xcolumn">xColumn</a> method calls sqlite3_vtab_nochange() and finds that
+the column is not changed by the UPDATE statement, then the xColumn
+method can optionally return without setting a result, without calling
+any of the <a href="../c3ref/result_blob.html">sqlite3_result_xxxxx() interfaces</a>.
+In that case, <a href="../c3ref/value_blob.html">sqlite3_value_nochange(X)</a> will return true for the
+same column in the <a href="../vtab.html#xupdate">xUpdate</a> method.</p>
+
+<p>The sqlite3_vtab_nochange() routine is an optimization. Virtual table
+implementations should continue to give a correct answer even if the
+sqlite3_vtab_nochange() interface were to always return false. In the
+current implementation, the sqlite3_vtab_nochange() interface does always
+returns false for the enhanced <a href="../lang_update.html#upfrom">UPDATE FROM</a> statement.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab_on_conflict.html b/www/c3ref/vtab_on_conflict.html
new file mode 100644
index 0000000..b96663c
--- /dev/null
+++ b/www/c3ref/vtab_on_conflict.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Determine The Virtual Table Conflict Policy</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vtab_on_conflict -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Determine The Virtual Table Conflict Policy</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_on_conflict(sqlite3 *);
+</pre></blockquote>
+<p>
+This function may only be called from within a call to the <a href="../vtab.html#xupdate">xUpdate</a> method
+of a <a href="../vtab.html">virtual table</a> implementation for an INSERT or UPDATE operation. The
+value returned is one of <a href="../c3ref/c_fail.html">SQLITE_ROLLBACK</a>, <a href="../c3ref/c_deny.html">SQLITE_IGNORE</a>, <a href="../c3ref/c_fail.html">SQLITE_FAIL</a>,
+<a href="../rescode.html#abort">SQLITE_ABORT</a>, or <a href="../c3ref/c_fail.html">SQLITE_REPLACE</a>, according to the <a href="../lang_conflict.html">ON CONFLICT</a> mode
+of the SQL statement that triggered the call to the <a href="../vtab.html#xupdate">xUpdate</a> method of the
+<a href="../vtab.html">virtual table</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/vtab_rhs_value.html b/www/c3ref/vtab_rhs_value.html
new file mode 100644
index 0000000..6157217
--- /dev/null
+++ b/www/c3ref/vtab_rhs_value.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Constraint values in xBestIndex()</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_vtab_rhs_value -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Constraint values in xBestIndex()</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **ppVal);
+</pre></blockquote>
+<p>
+This API may only be used from within the <a href="../vtab.html#xbestindex">xBestIndex method</a>
+of a <a href="../vtab.html">virtual table</a> implementation. The result of calling this interface
+from outside of an xBestIndex method are undefined and probably harmful.</p>
+
+<p>When the sqlite3_vtab_rhs_value(P,J,V) interface is invoked from within
+the <a href="../vtab.html#xbestindex">xBestIndex</a> method of a <a href="../vtab.html">virtual table</a> implementation, with P being
+a copy of the <a href="../c3ref/index_info.html">sqlite3_index_info</a> object pointer passed into xBestIndex and
+J being a 0-based index into P->aConstraint[], then this routine
+attempts to set *V to the value of the right-hand operand of
+that constraint if the right-hand operand is known. If the
+right-hand operand is not known, then *V is set to a NULL pointer.
+The sqlite3_vtab_rhs_value(P,J,V) interface returns SQLITE_OK if
+and only if *V is set to a value. The sqlite3_vtab_rhs_value(P,J,V)
+inteface returns SQLITE_NOTFOUND if the right-hand side of the J-th
+constraint is not available. The sqlite3_vtab_rhs_value() interface
+can return an result code other than SQLITE_OK or SQLITE_NOTFOUND if
+something goes wrong.</p>
+
+<p>The sqlite3_vtab_rhs_value() interface is usually only successful if
+the right-hand operand of a constraint is a literal value in the original
+SQL statement. If the right-hand operand is an expression or a reference
+to some other column or a <a href="../c3ref/bind_blob.html">host parameter</a>, then sqlite3_vtab_rhs_value()
+will probably return <a href="../rescode.html#notfound">SQLITE_NOTFOUND</a>.</p>
+
+<p>Some constraints, such as <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_ISNULL</a> and
+<a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_ISNOTNULL</a>, have no right-hand operand. For such
+constraints, sqlite3_vtab_rhs_value() always returns SQLITE_NOTFOUND.</p>
+
+<p>The <a href="../c3ref/value.html">sqlite3_value</a> object returned in *V is a protected sqlite3_value
+and remains valid for the duration of the xBestIndex method call.
+When xBestIndex returns, the sqlite3_value object returned by
+sqlite3_vtab_rhs_value() is automatically deallocated.</p>
+
+<p>The "_rhs_" in the name of this routine is an abbreviation for
+"Right-Hand Side".
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/wal_autocheckpoint.html b/www/c3ref/wal_autocheckpoint.html
new file mode 100644
index 0000000..2b74b79
--- /dev/null
+++ b/www/c3ref/wal_autocheckpoint.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Configure an auto-checkpoint</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_wal_autocheckpoint -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Configure an auto-checkpoint</h2>
+</div>
+<blockquote><pre>
+int sqlite3_wal_autocheckpoint(sqlite3 *db, int N);
+</pre></blockquote>
+<p>
+The <a href="../c3ref/wal_autocheckpoint.html">sqlite3_wal_autocheckpoint(D,N)</a> is a wrapper around
+<a href="../c3ref/wal_hook.html">sqlite3_wal_hook()</a> that causes any database on <a href="../c3ref/sqlite3.html">database connection</a> D
+to automatically <a href="../wal.html#ckpt">checkpoint</a>
+after committing a transaction if there are N or
+more frames in the <a href="../wal.html">write-ahead log</a> file. Passing zero or
+a negative value as the nFrame parameter disables automatic
+checkpoints entirely.</p>
+
+<p>The callback registered by this function replaces any existing callback
+registered using <a href="../c3ref/wal_hook.html">sqlite3_wal_hook()</a>. Likewise, registering a callback
+using <a href="../c3ref/wal_hook.html">sqlite3_wal_hook()</a> disables the automatic checkpoint mechanism
+configured by this function.</p>
+
+<p>The <a href="../pragma.html#pragma_wal_autocheckpoint">wal_autocheckpoint pragma</a> can be used to invoke this interface
+from SQL.</p>
+
+<p>Checkpoints initiated by this mechanism are
+<a href="../c3ref/wal_checkpoint_v2.html">PASSIVE</a>.</p>
+
+<p>Every new <a href="../c3ref/sqlite3.html">database connection</a> defaults to having the auto-checkpoint
+enabled with a threshold of 1000 or <a href="../compile.html#default_wal_autocheckpoint">SQLITE_DEFAULT_WAL_AUTOCHECKPOINT</a>
+pages. The use of this interface
+is only necessary if the default setting is found to be suboptimal
+for a particular application.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/wal_checkpoint.html b/www/c3ref/wal_checkpoint.html
new file mode 100644
index 0000000..e275ed6
--- /dev/null
+++ b/www/c3ref/wal_checkpoint.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Checkpoint a database</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_wal_checkpoint -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Checkpoint a database</h2>
+</div>
+<blockquote><pre>
+int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb);
+</pre></blockquote>
+<p>
+The sqlite3_wal_checkpoint(D,X) is equivalent to
+<a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2</a>(D,X,<a href="../c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_PASSIVE</a>,0,0).</p>
+
+<p>In brief, sqlite3_wal_checkpoint(D,X) causes the content in the
+<a href="../wal.html">write-ahead log</a> for database X on <a href="../c3ref/sqlite3.html">database connection</a> D to be
+transferred into the database file and for the write-ahead log to
+be reset. See the <a href="../wal.html#ckpt">checkpointing</a> documentation for addition
+information.</p>
+
+<p>This interface used to be the only way to cause a checkpoint to
+occur. But then the newer and more powerful <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a>
+interface was added. This interface is retained for backwards
+compatibility and as a convenience for applications that need to manually
+start a callback but which do not need the full power (and corresponding
+complication) of <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a>.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/wal_checkpoint_v2.html b/www/c3ref/wal_checkpoint_v2.html
new file mode 100644
index 0000000..bbd2e61
--- /dev/null
+++ b/www/c3ref/wal_checkpoint_v2.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Checkpoint a database</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_wal_checkpoint_v2 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Checkpoint a database</h2>
+</div>
+<blockquote><pre>
+int sqlite3_wal_checkpoint_v2(
+ sqlite3 *db, /* Database handle */
+ const char *zDb, /* Name of attached database (or NULL) */
+ int eMode, /* SQLITE_CHECKPOINT_* value */
+ int *pnLog, /* OUT: Size of WAL log in frames */
+ int *pnCkpt /* OUT: Total number of frames checkpointed */
+);
+</pre></blockquote>
+<p>
+The sqlite3_wal_checkpoint_v2(D,X,M,L,C) interface runs a checkpoint
+operation on database X of <a href="../c3ref/sqlite3.html">database connection</a> D in mode M. Status
+information is written back into integers pointed to by L and C.
+The M parameter must be a valid <a href="../c3ref/c_checkpoint_full.html">checkpoint mode</a>:</p>
+
+<p><dl>
+<dt>SQLITE_CHECKPOINT_PASSIVE<dd>
+Checkpoint as many frames as possible without waiting for any database
+readers or writers to finish, then sync the database file if all frames
+in the log were checkpointed. The <a href="../c3ref/busy_handler.html">busy-handler callback</a>
+is never invoked in the SQLITE_CHECKPOINT_PASSIVE mode.
+On the other hand, passive mode might leave the checkpoint unfinished
+if there are concurrent readers or writers.</p>
+
+<p><dt>SQLITE_CHECKPOINT_FULL<dd>
+This mode blocks (it invokes the
+<a href="../c3ref/busy_handler.html">busy-handler callback</a>) until there is no
+database writer and all readers are reading from the most recent database
+snapshot. It then checkpoints all frames in the log file and syncs the
+database file. This mode blocks new database writers while it is pending,
+but new database readers are allowed to continue unimpeded.</p>
+
+<p><dt>SQLITE_CHECKPOINT_RESTART<dd>
+This mode works the same way as SQLITE_CHECKPOINT_FULL with the addition
+that after checkpointing the log file it blocks (calls the
+<a href="../c3ref/busy_handler.html">busy-handler callback</a>)
+until all readers are reading from the database file only. This ensures
+that the next writer will restart the log file from the beginning.
+Like SQLITE_CHECKPOINT_FULL, this mode blocks new
+database writer attempts while it is pending, but does not impede readers.</p>
+
+<p><dt>SQLITE_CHECKPOINT_TRUNCATE<dd>
+This mode works the same way as SQLITE_CHECKPOINT_RESTART with the
+addition that it also truncates the log file to zero bytes just prior
+to a successful return.
+</dl></p>
+
+<p>If pnLog is not NULL, then *pnLog is set to the total number of frames in
+the log file or to -1 if the checkpoint could not run because
+of an error or because the database is not in <a href="../wal.html">WAL mode</a>. If pnCkpt is not
+NULL,then *pnCkpt is set to the total number of checkpointed frames in the
+log file (including any that were already checkpointed before the function
+was called) or to -1 if the checkpoint could not run due to an error or
+because the database is not in WAL mode. Note that upon successful
+completion of an SQLITE_CHECKPOINT_TRUNCATE, the log file will have been
+truncated to zero bytes and so both *pnLog and *pnCkpt will be set to zero.</p>
+
+<p>All calls obtain an exclusive "checkpoint" lock on the database file. If
+any other process is running a checkpoint operation at the same time, the
+lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a
+busy-handler configured, it will not be invoked in this case.</p>
+
+<p>The SQLITE_CHECKPOINT_FULL, RESTART and TRUNCATE modes also obtain the
+exclusive "writer" lock on the database file. If the writer lock cannot be
+obtained immediately, and a busy-handler is configured, it is invoked and
+the writer lock retried until either the busy-handler returns 0 or the lock
+is successfully obtained. The busy-handler is also invoked while waiting for
+database readers as described above. If the busy-handler returns 0 before
+the writer lock is obtained or while waiting for database readers, the
+checkpoint operation proceeds from that point in the same way as
+SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible
+without blocking any further. SQLITE_BUSY is returned in this case.</p>
+
+<p>If parameter zDb is NULL or points to a zero length string, then the
+specified operation is attempted on all WAL databases <a href="../lang_attach.html">attached</a> to
+<a href="../c3ref/sqlite3.html">database connection</a> db. In this case the
+values written to output parameters *pnLog and *pnCkpt are undefined. If
+an SQLITE_BUSY error is encountered when processing one or more of the
+attached WAL databases, the operation is still attempted on any remaining
+attached databases and SQLITE_BUSY is returned at the end. If any other
+error occurs while processing an attached database, processing is abandoned
+and the error code is returned to the caller immediately. If no error
+(SQLITE_BUSY or otherwise) is encountered while processing the attached
+databases, SQLITE_OK is returned.</p>
+
+<p>If database zDb is the name of an attached database that is not in WAL
+mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If
+zDb is not NULL (or a zero length string) and is not the name of any
+attached database, SQLITE_ERROR is returned to the caller.</p>
+
+<p>Unless it returns SQLITE_MISUSE,
+the sqlite3_wal_checkpoint_v2() interface
+sets the error information that is queried by
+<a href="../c3ref/errcode.html">sqlite3_errcode()</a> and <a href="../c3ref/errcode.html">sqlite3_errmsg()</a>.</p>
+
+<p>The <a href="../pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a> command can be used to invoke this interface
+from SQL.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/wal_hook.html b/www/c3ref/wal_hook.html
new file mode 100644
index 0000000..f6cc7a1
--- /dev/null
+++ b/www/c3ref/wal_hook.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Write-Ahead Log Commit Hook</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_wal_hook -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Write-Ahead Log Commit Hook</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_wal_hook(
+ sqlite3*,
+ int(*)(void *,sqlite3*,const char*,int),
+ void*
+);
+</pre></blockquote>
+<p>
+The <a href="../c3ref/wal_hook.html">sqlite3_wal_hook()</a> function is used to register a callback that
+is invoked each time data is committed to a database in wal mode.</p>
+
+<p>The callback is invoked by SQLite after the commit has taken place and
+the associated write-lock on the database released, so the implementation
+may read, write or <a href="../wal.html#ckpt">checkpoint</a> the database as required.</p>
+
+<p>The first parameter passed to the callback function when it is invoked
+is a copy of the third parameter passed to sqlite3_wal_hook() when
+registering the callback. The second is a copy of the database handle.
+The third parameter is the name of the database that was written to -
+either "main" or the name of an <a href="../lang_attach.html">ATTACH</a>-ed database. The fourth parameter
+is the number of pages currently in the write-ahead log file,
+including those that were just committed.</p>
+
+<p>The callback function should normally return <a href="../rescode.html#ok">SQLITE_OK</a>. If an error
+code is returned, that error will propagate back up through the
+SQLite code base to cause the statement that provoked the callback
+to report an error, though the commit will have still occurred. If the
+callback returns <a href="../rescode.html#row">SQLITE_ROW</a> or <a href="../rescode.html#done">SQLITE_DONE</a>, or if it returns a value
+that does not correspond to any valid SQLite error code, the results
+are undefined.</p>
+
+<p>A single database handle may have at most a single write-ahead log callback
+registered at one time. Calling <a href="../c3ref/wal_hook.html">sqlite3_wal_hook()</a> replaces any
+previously registered write-ahead log callback. The return value is
+a copy of the third parameter from the previous call, if any, or 0.
+Note that the <a href="../c3ref/wal_autocheckpoint.html">sqlite3_wal_autocheckpoint()</a> interface and the
+<a href="../pragma.html#pragma_wal_autocheckpoint">wal_autocheckpoint pragma</a> both invoke <a href="../c3ref/wal_hook.html">sqlite3_wal_hook()</a> and will
+overwrite any prior <a href="../c3ref/wal_hook.html">sqlite3_wal_hook()</a> settings.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c3ref/win32_set_directory.html b/www/c3ref/win32_set_directory.html
new file mode 100644
index 0000000..8b3d173
--- /dev/null
+++ b/www/c3ref/win32_set_directory.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Win32 Specific Interface</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- keywords: sqlite3_win32_set_directory sqlite3_win32_set_directory16 sqlite3_win32_set_directory8 -->
+<div class=nosearch>
+<a href="intro.html"><h2>SQLite C Interface</h2></a>
+<h2>Win32 Specific Interface</h2>
+</div>
+<blockquote><pre>
+int sqlite3_win32_set_directory(
+ unsigned long type, /* Identifier for directory being set or reset */
+ void *zValue /* New value for directory being set or reset */
+);
+int sqlite3_win32_set_directory8(unsigned long type, const char *zValue);
+int sqlite3_win32_set_directory16(unsigned long type, const void *zValue);
+</pre></blockquote>
+<p>
+These interfaces are available only on Windows. The
+<a href="../c3ref/win32_set_directory.html">sqlite3_win32_set_directory</a> interface is used to set the value associated
+with the <a href="../c3ref/temp_directory.html">sqlite3_temp_directory</a> or <a href="../c3ref/data_directory.html">sqlite3_data_directory</a> variable, to
+zValue, depending on the value of the type parameter. The zValue parameter
+should be NULL to cause the previous value to be freed via <a href="../c3ref/free.html">sqlite3_free</a>;
+a non-NULL value will be copied into memory obtained from <a href="../c3ref/free.html">sqlite3_malloc</a>
+prior to being used. The <a href="../c3ref/win32_set_directory.html">sqlite3_win32_set_directory</a> interface returns
+<a href="../rescode.html#ok">SQLITE_OK</a> to indicate success, <a href="../rescode.html#error">SQLITE_ERROR</a> if the type is unsupported,
+or <a href="../rescode.html#nomem">SQLITE_NOMEM</a> if memory could not be allocated. The value of the
+<a href="../c3ref/data_directory.html">sqlite3_data_directory</a> variable is intended to act as a replacement for
+the current directory on the sub-platforms of Win32 where that concept is
+not present, e.g. WinRT and UWP. The <a href="../c3ref/win32_set_directory.html">sqlite3_win32_set_directory8</a> and
+<a href="../c3ref/win32_set_directory.html">sqlite3_win32_set_directory16</a> interfaces behave exactly the same as the
+sqlite3_win32_set_directory interface except the string parameter must be
+UTF-8 or UTF-16, respectively.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/c_interface.html b/www/c_interface.html
new file mode 100644
index 0000000..5f59447
--- /dev/null
+++ b/www/c_interface.html
@@ -0,0 +1,1241 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The C language interface to SQLite Version 2</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<p>
+<center><table border="1" cellpadding="10" width="75%">
+<tr><td bgcolor="#ffffbb">
+<b>Editorial Note:</b>
+This document describes SQLite version 2, which was deprecated and
+replaced by SQLite3 in 2004.
+This document is retained as part of the historical record of SQLite.
+Modern programmers should refer to
+more up-to-date documentation on SQLite is available elsewhere
+on this website.
+</table></center>
+<h2>The C language interface to SQLite Version 2</h2>
+
+<p>The SQLite library is designed to be very easy to use from
+a C or C++ program. This document gives an overview of the C/C++
+programming interface.</p>
+
+<h3>1.0 The Core API</h3>
+
+<p>The interface to the SQLite library consists of three core functions,
+one opaque data structure, and some constants used as return values.
+The core interface is as follows:</p>
+
+<blockquote><pre>
+typedef struct sqlite sqlite;
+#define SQLITE_OK 0 /* Successful result */
+
+sqlite *sqlite_open(const char *dbname, int mode, char **errmsg);
+
+void sqlite_close(sqlite *db);
+
+int sqlite_exec(
+ sqlite *db,
+ char *sql,
+ int (*xCallback)(void*,int,char**,char**),
+ void *pArg,
+ char **errmsg
+);
+</pre></blockquote>
+
+<p>
+The above is all you really need to know in order to use SQLite
+in your C or C++ programs. There are other interface functions
+available (and described below) but we will begin by describing
+the core functions shown above.
+</p>
+
+<a name="sqlite_open"></a>
+<h4>1.1 Opening a database</h4>
+
+<p>Use the <b>sqlite_open</b> function to open an existing SQLite
+database or to create a new SQLite database. The first argument
+is the database name. The second argument is intended to signal
+whether the database is going to be used for reading and writing
+or just for reading. But in the current implementation, the
+second argument to <b>sqlite_open</b> is ignored.
+The third argument is a pointer to a string pointer.
+If the third argument is not NULL and an error occurs
+while trying to open the database, then an error message will be
+written to memory obtained from malloc() and *errmsg will be made
+to point to this error message. The calling function is responsible
+for freeing the memory when it has finished with it.</p>
+
+<p>The name of an SQLite database is the name of a file that will
+contain the database. If the file does not exist, SQLite attempts
+to create and initialize it. If the file is read-only (due to
+permission bits or because it is located on read-only media like
+a CD-ROM) then SQLite opens the database for reading only. The
+entire SQL database is stored in a single file on the disk. But
+additional temporary files may be created during the execution of
+an SQL command in order to store the database rollback journal or
+temporary and intermediate results of a query.</p>
+
+<p>The return value of the <b>sqlite_open</b> function is a
+pointer to an opaque <b>sqlite</b> structure. This pointer will
+be the first argument to all subsequent SQLite function calls that
+deal with the same database. NULL is returned if the open fails
+for any reason.</p>
+
+<a name="sqlite_close"></a>
+<h4>1.2 Closing the database</h4>
+
+<p>To close an SQLite database, call the <b>sqlite_close</b>
+function passing it the sqlite structure pointer that was obtained
+from a prior call to <b>sqlite_open</b>.
+If a transaction is active when the database is closed, the transaction
+is rolled back.</p>
+
+<a name="sqlite_exec"></a>
+<h4>1.3 Executing SQL statements</h4>
+
+<p>The <b>sqlite_exec</b> function is used to process SQL statements
+and queries. This function requires 5 parameters as follows:</p>
+
+<ol>
+<li><p>A pointer to the sqlite structure obtained from a prior call
+ to <b>sqlite_open</b>.</p></li>
+<li><p>A zero-terminated string containing the text of one or more
+ SQL statements and/or queries to be processed.</p></li>
+<li><p>A pointer to a callback function which is invoked once for each
+ row in the result of a query. This argument may be NULL, in which
+ case no callbacks will ever be invoked.</p></li>
+<li><p>A pointer that is forwarded to become the first argument
+ to the callback function.</p></li>
+<li><p>A pointer to an error string. Error messages are written to space
+ obtained from malloc() and the error string is made to point to
+ the malloced space. The calling function is responsible for freeing
+ this space when it has finished with it.
+ This argument may be NULL, in which case error messages are not
+ reported back to the calling function.</p></li>
+</ol>
+
+<p>
+The callback function is used to receive the results of a query. A
+prototype for the callback function is as follows:</p>
+
+<blockquote><pre>
+int Callback(void *pArg, int argc, char **argv, char **columnNames){
+ return 0;
+}
+</pre></blockquote>
+
+<a name="callback_row_data"></a>
+<p>The first argument to the callback is just a copy of the fourth argument
+to <b>sqlite_exec</b> This parameter can be used to pass arbitrary
+information through to the callback function from client code.
+The second argument is the number of columns in the query result.
+The third argument is an array of pointers to strings where each string
+is a single column of the result for that record. Note that the
+callback function reports a NULL value in the database as a NULL pointer,
+which is very different from an empty string. If the i-th parameter
+is an empty string, we will get:</p>
+<blockquote><pre>
+argv&#91;i]&#91;0] == 0
+</pre></blockquote>
+<p>But if the i-th parameter is NULL we will get:</p>
+<blockquote><pre>
+argv&#91;i] == 0
+</pre></blockquote>
+
+<p>The names of the columns are contained in first <i>argc</i>
+entries of the fourth argument.
+If the <a href="pragma.html#pragma_show_datatypes">SHOW_DATATYPES</a> pragma
+is on (it is off by default) then
+the second <i>argc</i> entries in the 4th argument are the datatypes
+for the corresponding columns.
+</p>
+
+<p>If the <a href="pragma.html#pragma_empty_result_callbacks">
+EMPTY_RESULT_CALLBACKS</a> pragma is set to ON and the result of
+a query is an empty set, then the callback is invoked once with the
+third parameter (argv) set to 0. In other words
+<blockquote><pre>
+argv == 0
+</pre></blockquote>
+The second parameter (argc)
+and the fourth parameter (columnNames) are still valid
+and can be used to determine the number and names of the result
+columns if there had been a result.
+The default behavior is not to invoke the callback at all if the
+result set is empty.</p>
+
+<a name="callback_returns_nonzero"></a>
+<p>The callback function should normally return 0. If the callback
+function returns non-zero, the query is immediately aborted and
+<b>sqlite_exec</b> will return SQLITE_ABORT.</p>
+
+<h4>1.4 Error Codes</h4>
+
+<p>
+The <b>sqlite_exec</b> function normally returns SQLITE_OK. But
+if something goes wrong it can return a different value to indicate
+the type of error. Here is a complete list of the return codes:
+</p>
+
+<blockquote><pre>
+#define SQLITE_OK 0 /* Successful result */
+#define SQLITE_ERROR 1 /* SQL error or missing database */
+#define SQLITE_INTERNAL 2 /* An internal logic error in SQLite */
+#define SQLITE_PERM 3 /* Access permission denied */
+#define SQLITE_ABORT 4 /* Callback routine requested an abort */
+#define SQLITE_BUSY 5 /* The database file is locked */
+#define SQLITE_LOCKED 6 /* A table in the database is locked */
+#define SQLITE_NOMEM 7 /* A malloc() failed */
+#define SQLITE_READONLY 8 /* Attempt to write a readonly database */
+#define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite_interrupt() */
+#define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */
+#define SQLITE_CORRUPT 11 /* The database disk image is malformed */
+#define SQLITE_NOTFOUND 12 /* (Internal Only) Table or record not found */
+#define SQLITE_FULL 13 /* Insertion failed because database is full */
+#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
+#define SQLITE_PROTOCOL 15 /* Database lock protocol error */
+#define SQLITE_EMPTY 16 /* (Internal Only) Database table is empty */
+#define SQLITE_SCHEMA 17 /* The database schema changed */
+#define SQLITE_TOOBIG 18 /* Too much data for one row of a table */
+#define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */
+#define SQLITE_MISMATCH 20 /* Data type mismatch */
+#define SQLITE_MISUSE 21 /* Library used incorrectly */
+#define SQLITE_NOLFS 22 /* Uses OS features not supported on host */
+#define SQLITE_AUTH 23 /* Authorization denied */
+#define SQLITE_ROW 100 /* sqlite_step() has another row ready */
+#define SQLITE_DONE 101 /* sqlite_step() has finished executing */
+</pre></blockquote>
+
+<p>
+The meanings of these various return values are as follows:
+</p>
+
+<blockquote>
+<dl>
+<dt>SQLITE_OK</dt>
+<dd><p>This value is returned if everything worked and there were no errors.
+</p></dd>
+<dt>SQLITE_INTERNAL</dt>
+<dd><p>This value indicates that an internal consistency check within
+the SQLite library failed. This can only happen if there is a bug in
+the SQLite library. If you ever get an SQLITE_INTERNAL reply from
+an <b>sqlite_exec</b> call, please report the problem on the SQLite
+mailing list.
+</p></dd>
+<dt>SQLITE_ERROR</dt>
+<dd><p>This return value indicates that there was an error in the SQL
+that was passed into the <b>sqlite_exec</b>.
+</p></dd>
+<dt>SQLITE_PERM</dt>
+<dd><p>This return value says that the access permissions on the database
+file are such that the file cannot be opened.
+</p></dd>
+<dt>SQLITE_ABORT</dt>
+<dd><p>This value is returned if the callback function returns non-zero.
+</p></dd>
+<dt>SQLITE_BUSY</dt>
+<dd><p>This return code indicates that another program or thread has
+the database locked. SQLite allows two or more threads to read the
+database at the same time, but only one thread can have the database
+open for writing at the same time. Locking in SQLite is on the
+entire database.</p>
+</p></dd>
+<dt>SQLITE_LOCKED</dt>
+<dd><p>This return code is similar to SQLITE_BUSY in that it indicates
+that the database is locked. But the source of the lock is a recursive
+call to <b>sqlite_exec</b>. This return can only occur if you attempt
+to invoke sqlite_exec from within a callback routine of a query
+from a prior invocation of sqlite_exec. Recursive calls to
+sqlite_exec are allowed as long as they do
+not attempt to write the same table.
+</p></dd>
+<dt>SQLITE_NOMEM</dt>
+<dd><p>This value is returned if a call to <b>malloc</b> fails.
+</p></dd>
+<dt>SQLITE_READONLY</dt>
+<dd><p>This return code indicates that an attempt was made to write to
+a database file that is opened for reading only.
+</p></dd>
+<dt>SQLITE_INTERRUPT</dt>
+<dd><p>This value is returned if a call to <b>sqlite_interrupt</b>
+interrupts a database operation in progress.
+</p></dd>
+<dt>SQLITE_IOERR</dt>
+<dd><p>This value is returned if the operating system informs SQLite
+that it is unable to perform some disk I/O operation. This could mean
+that there is no more space left on the disk.
+</p></dd>
+<dt>SQLITE_CORRUPT</dt>
+<dd><p>This value is returned if SQLite detects that the database it is
+working on has become corrupted. Corruption might occur due to a rogue
+process writing to the database file or it might happen due to a
+previously undetected logic error in of SQLite. This value is also
+returned if a disk I/O error occurs in such a way that SQLite is forced
+to leave the database file in a corrupted state. The latter should only
+happen due to a hardware or operating system malfunction.
+</p></dd>
+<dt>SQLITE_FULL</dt>
+<dd><p>This value is returned if an insertion failed because there is
+no space left on the disk, or the database is too big to hold any
+more information. The latter case should only occur for databases
+that are larger than 2GB in size.
+</p></dd>
+<dt>SQLITE_CANTOPEN</dt>
+<dd><p>This value is returned if the database file could not be opened
+for some reason.
+</p></dd>
+<dt>SQLITE_PROTOCOL</dt>
+<dd><p>This value is returned if some other process is messing with
+file locks and has violated the file locking protocol that SQLite uses
+on its rollback journal files.
+</p></dd>
+<dt>SQLITE_SCHEMA</dt>
+<dd><p>When the database first opened, SQLite reads the database schema
+into memory and uses that schema to parse new SQL statements. If another
+process changes the schema, the command currently being processed will
+abort because the virtual machine code generated assumed the old
+schema. This is the return code for such cases. Retrying the
+command usually will clear the problem.
+</p></dd>
+<dt>SQLITE_TOOBIG</dt>
+<dd><p>SQLite will not store more than about 1 megabyte of data in a single
+row of a single table. If you attempt to store more than 1 megabyte
+in a single row, this is the return code you get.
+</p></dd>
+<dt>SQLITE_CONSTRAINT</dt>
+<dd><p>This constant is returned if the SQL statement would have violated
+a database constraint.
+</p></dd>
+<dt>SQLITE_MISMATCH</dt>
+<dd><p>This error occurs when there is an attempt to insert non-integer
+data into a column labeled INTEGER PRIMARY KEY. For most columns, SQLite
+ignores the data type and allows any kind of data to be stored. But
+an INTEGER PRIMARY KEY column is only allowed to store integer data.
+</p></dd>
+<dt>SQLITE_MISUSE</dt>
+<dd><p>This error might occur if one or more of the SQLite API routines
+is used incorrectly. Examples of incorrect usage include calling
+<b>sqlite_exec</b> after the database has been closed using
+<b>sqlite_close</b> or
+calling <b>sqlite_exec</b> with the same
+database pointer simultaneously from two separate threads.
+</p></dd>
+<dt>SQLITE_NOLFS</dt>
+<dd><p>This error means that you have attempts to create or access a file
+database file that is larger that 2GB on a legacy Unix machine that
+lacks large file support.
+</p></dd>
+<dt>SQLITE_AUTH</dt>
+<dd><p>This error indicates that the authorizer callback
+has disallowed the SQL you are attempting to execute.
+</p></dd>
+<dt>SQLITE_ROW</dt>
+<dd><p>This is one of the return codes from the
+<b>sqlite_step</b> routine which is part of the non-callback API.
+It indicates that another row of result data is available.
+</p></dd>
+<dt>SQLITE_DONE</dt>
+<dd><p>This is one of the return codes from the
+<b>sqlite_step</b> routine which is part of the non-callback API.
+It indicates that the SQL statement has been completely executed and
+the <b>sqlite_finalize</b> routine is ready to be called.
+</p></dd>
+</dl>
+</blockquote>
+
+<h3>2.0 Accessing Data Without Using A Callback Function</h3>
+
+<p>
+The <b>sqlite_exec</b> routine described above used to be the only
+way to retrieve data from an SQLite database. But many programmers found
+it inconvenient to use a callback function to obtain results. So beginning
+with SQLite version 2.7.7, a second access interface is available that
+does not use callbacks.
+</p>
+
+<p>
+The new interface uses three separate functions to replace the single
+<b>sqlite_exec</b> function.
+</p>
+
+<blockquote><pre>
+typedef struct sqlite_vm sqlite_vm;
+
+int sqlite_compile(
+ sqlite *db, /* The open database */
+ const char *zSql, /* SQL statement to be compiled */
+ const char **pzTail, /* OUT: uncompiled tail of zSql */
+ sqlite_vm **ppVm, /* OUT: the virtual machine to execute zSql */
+ char **pzErrmsg /* OUT: Error message. */
+);
+
+int sqlite_step(
+ sqlite_vm *pVm, /* The virtual machine to execute */
+ int *pN, /* OUT: Number of columns in result */
+ const char ***pazValue, /* OUT: Column data */
+ const char ***pazColName /* OUT: Column names and datatypes */
+);
+
+int sqlite_finalize(
+ sqlite_vm *pVm, /* The virtual machine to be finalized */
+ char **pzErrMsg /* OUT: Error message */
+);
+</pre></blockquote>
+
+<p>
+The strategy is to compile a single SQL statement using
+<b>sqlite_compile</b> then invoke <b>sqlite_step</b> multiple times,
+once for each row of output, and finally call <b>sqlite_finalize</b>
+to clean up after the SQL has finished execution.
+</p>
+
+<h4>2.1 Compiling An SQL Statement Into A Virtual Machine</h4>
+
+<p>
+The <b>sqlite_compile</b> "compiles" a single SQL statement (specified
+by the second parameter) and generates a virtual machine that is able
+to execute that statement.
+As with must interface routines, the first parameter must be a pointer
+to an sqlite structure that was obtained from a prior call to
+<b>sqlite_open</b>.
+
+<p>
+A pointer to the virtual machine is stored in a pointer which is passed
+in as the 4th parameter.
+Space to hold the virtual machine is dynamically allocated. To avoid
+a memory leak, the calling function must invoke
+<b>sqlite_finalize</b> on the virtual machine after it has finished
+with it.
+The 4th parameter may be set to NULL if an error is encountered during
+compilation.
+</p>
+
+<p>
+If any errors are encountered during compilation, an error message is
+written into memory obtained from <b>malloc</b> and the 5th parameter
+is made to point to that memory. If the 5th parameter is NULL, then
+no error message is generated. If the 5th parameter is not NULL, then
+the calling function should dispose of the memory containing the error
+message by calling <b>sqlite_freemem</b>.
+</p>
+
+<p>
+If the 2nd parameter actually contains two or more statements of SQL,
+only the first statement is compiled. (This is different from the
+behavior of <b>sqlite_exec</b> which executes all SQL statements
+in its input string.) The 3rd parameter to <b>sqlite_compile</b>
+is made to point to the first character beyond the end of the first
+statement of SQL in the input. If the 2nd parameter contains only
+a single SQL statement, then the 3rd parameter will be made to point
+to the '\000' terminator at the end of the 2nd parameter.
+</p>
+
+<p>
+On success, <b>sqlite_compile</b> returns SQLITE_OK.
+Otherwise and error code is returned.
+</p>
+
+<h4>2.2 Step-By-Step Execution Of An SQL Statement</h4>
+
+<p>
+After a virtual machine has been generated using <b>sqlite_compile</b>
+it is executed by one or more calls to <b>sqlite_step</b>. Each
+invocation of <b>sqlite_step</b>, except the last one,
+returns a single row of the result.
+The number of columns in the result is stored in the integer that
+the 2nd parameter points to.
+The pointer specified by the 3rd parameter is made to point
+to an array of pointers to column values.
+The pointer in the 4th parameter is made to point to an array
+of pointers to column names and datatypes.
+The 2nd through 4th parameters to <b>sqlite_step</b> convey the
+same information as the 2nd through 4th parameters of the
+<b>callback</b> routine when using
+the <b>sqlite_exec</b> interface. Except, with <b>sqlite_step</b>
+the column datatype information is always included in the in the
+4th parameter regardless of whether or not the
+<a href="pragma.html#pragma_show_datatypes">SHOW_DATATYPES</a> pragma
+is on or off.
+</p>
+
+<p>
+Each invocation of <b>sqlite_step</b> returns an integer code that
+indicates what happened during that step. This code may be
+SQLITE_BUSY, SQLITE_ROW, SQLITE_DONE, SQLITE_ERROR, or
+SQLITE_MISUSE.
+</p>
+
+<p>
+If the virtual machine is unable to open the database file because
+it is locked by another thread or process, <b>sqlite_step</b>
+will return SQLITE_BUSY. The calling function should do some other
+activity, or sleep, for a short amount of time to give the lock a
+chance to clear, then invoke <b>sqlite_step</b> again. This can
+be repeated as many times as desired.
+</p>
+
+<p>
+Whenever another row of result data is available,
+<b>sqlite_step</b> will return SQLITE_ROW. The row data is
+stored in an array of pointers to strings and the 2nd parameter
+is made to point to this array.
+</p>
+
+<p>
+When all processing is complete, <b>sqlite_step</b> will return
+either SQLITE_DONE or SQLITE_ERROR. SQLITE_DONE indicates that the
+statement completed successfully and SQLITE_ERROR indicates that there
+was a run-time error. (The details of the error are obtained from
+<b>sqlite_finalize</b>.) It is a misuse of the library to attempt
+to call <b>sqlite_step</b> again after it has returned SQLITE_DONE
+or SQLITE_ERROR.
+</p>
+
+<p>
+When <b>sqlite_step</b> returns SQLITE_DONE or SQLITE_ERROR,
+the *pN and *pazColName values are set to the number of columns
+in the result set and to the names of the columns, just as they
+are for an SQLITE_ROW return. This allows the calling code to
+find the number of result columns and the column names and datatypes
+even if the result set is empty. The *pazValue parameter is always
+set to NULL when the return codes is SQLITE_DONE or SQLITE_ERROR.
+If the SQL being executed is a statement that does not
+return a result (such as an INSERT or an UPDATE) then *pN will
+be set to zero and *pazColName will be set to NULL.
+</p>
+
+<p>
+If you abuse the library by trying to call <b>sqlite_step</b>
+inappropriately it will attempt return SQLITE_MISUSE.
+This can happen if you call sqlite_step() on the same virtual machine
+at the same
+time from two or more threads or if you call sqlite_step()
+again after it returned SQLITE_DONE or SQLITE_ERROR or if you
+pass in an invalid virtual machine pointer to sqlite_step().
+You should not depend on the SQLITE_MISUSE return code to indicate
+an error. It is possible that a misuse of the interface will go
+undetected and result in a program crash. The SQLITE_MISUSE is
+intended as a debugging aid only - to help you detect incorrect
+usage prior to a mishap. The misuse detection logic is not guaranteed
+to work in every case.
+</p>
+
+<h4>2.3 Deleting A Virtual Machine</h4>
+
+<p>
+Every virtual machine that <b>sqlite_compile</b> creates should
+eventually be handed to <b>sqlite_finalize</b>. The sqlite_finalize()
+procedure deallocates the memory and other resources that the virtual
+machine uses. Failure to call sqlite_finalize() will result in
+resource leaks in your program.
+</p>
+
+<p>
+The <b>sqlite_finalize</b> routine also returns the result code
+that indicates success or failure of the SQL operation that the
+virtual machine carried out.
+The value returned by sqlite_finalize() will be the same as would
+have been returned had the same SQL been executed by <b>sqlite_exec</b>.
+The error message returned will also be the same.
+</p>
+
+<p>
+It is acceptable to call <b>sqlite_finalize</b> on a virtual machine
+before <b>sqlite_step</b> has returned SQLITE_DONE. Doing so has
+the effect of interrupting the operation in progress. Partially completed
+changes will be rolled back and the database will be restored to its
+original state (unless an alternative recovery algorithm is selected using
+an ON CONFLICT clause in the SQL being executed.) The effect is the
+same as if a callback function of <b>sqlite_exec</b> had returned
+non-zero.
+</p>
+
+<p>
+It is also acceptable to call <b>sqlite_finalize</b> on a virtual machine
+that has never been passed to <b>sqlite_step</b> even once.
+</p>
+
+<h3>3.0 The Extended API</h3>
+
+<p>Only the three core routines described in section 1.0 are required to use
+SQLite. But there are many other functions that provide
+useful interfaces. These extended routines are as follows:
+</p>
+
+<blockquote><pre>
+int sqlite_last_insert_rowid(sqlite*);
+
+int sqlite_changes(sqlite*);
+
+int sqlite_get_table(
+ sqlite*,
+ char *sql,
+ char ***result,
+ int *nrow,
+ int *ncolumn,
+ char **errmsg
+);
+
+void sqlite_free_table(char**);
+
+void sqlite_interrupt(sqlite*);
+
+int sqlite_complete(const char *sql);
+
+void sqlite_busy_handler(sqlite*, int (*)(void*,const char*,int), void*);
+
+void sqlite_busy_timeout(sqlite*, int ms);
+
+const char sqlite_version&#91;];
+
+const char sqlite_encoding&#91;];
+
+int sqlite_exec_printf(
+ sqlite*,
+ char *sql,
+ int (*)(void*,int,char**,char**),
+ void*,
+ char **errmsg,
+ ...
+);
+
+int sqlite_exec_vprintf(
+ sqlite*,
+ char *sql,
+ int (*)(void*,int,char**,char**),
+ void*,
+ char **errmsg,
+ va_list
+);
+
+int sqlite_get_table_printf(
+ sqlite*,
+ char *sql,
+ char ***result,
+ int *nrow,
+ int *ncolumn,
+ char **errmsg,
+ ...
+);
+
+int sqlite_get_table_vprintf(
+ sqlite*,
+ char *sql,
+ char ***result,
+ int *nrow,
+ int *ncolumn,
+ char **errmsg,
+ va_list
+);
+
+char *sqlite_mprintf(const char *zFormat, ...);
+
+char *sqlite_vmprintf(const char *zFormat, va_list);
+
+void sqlite_freemem(char*);
+
+void sqlite_progress_handler(sqlite*, int, int (*)(void*), void*);
+
+</pre></blockquote>
+
+<p>All of the above definitions are included in the "sqlite.h"
+header file that comes in the source tree.</p>
+
+<h4>3.1 The ROWID of the most recent insert</h4>
+
+<p>Every row of an SQLite table has a unique integer key. If the
+table has a column labeled INTEGER PRIMARY KEY, then that column
+serves as the key. If there is no INTEGER PRIMARY KEY column then
+the key is a unique integer. The key for a row can be accessed in
+a SELECT statement or used in a WHERE or ORDER BY clause using any
+of the names "ROWID", "OID", or "_ROWID_".</p>
+
+<p>When you do an insert into a table that does not have an INTEGER PRIMARY
+KEY column, or if the table does have an INTEGER PRIMARY KEY but the value
+for that column is not specified in the VALUES clause of the insert, then
+the key is automatically generated. You can find the value of the key
+for the most recent INSERT statement using the
+<b>sqlite_last_insert_rowid</b> API function.</p>
+
+<h4>3.2 The number of rows that changed</h4>
+
+<p>The <b>sqlite_changes</b> API function returns the number of rows
+that have been inserted, deleted, or modified since the database was
+last quiescent. A "quiescent" database is one in which there are
+no outstanding calls to <b>sqlite_exec</b> and no VMs created by
+<b>sqlite_compile</b> that have not been finalized by <b>sqlite_finalize</b>.
+In common usage, <b>sqlite_changes</b> returns the number
+of rows inserted, deleted, or modified by the most recent <b>sqlite_exec</b>
+call or since the most recent <b>sqlite_compile</b>. But if you have
+nested calls to <b>sqlite_exec</b> (that is, if the callback routine
+of one <b>sqlite_exec</b> invokes another <b>sqlite_exec</b>) or if
+you invoke <b>sqlite_compile</b> to create a new VM while there is
+still another VM in existence, then
+the meaning of the number returned by <b>sqlite_changes</b> is more
+complex.
+The number reported includes any changes
+that were later undone by a ROLLBACK or ABORT. But rows that are
+deleted because of a DROP TABLE are <em>not</em> counted.</p>
+
+<p>SQLite implements the command "<b>DELETE FROM table</b>" (without
+a WHERE clause) by dropping the table then recreating it.
+This is much faster than deleting the elements of the table individually.
+But it also means that the value returned from <b>sqlite_changes</b>
+will be zero regardless of the number of elements that were originally
+in the table. If an accurate count of the number of elements deleted
+is necessary, use "<b>DELETE FROM table WHERE 1</b>" instead.</p>
+
+<h4>3.3 Querying into memory obtained from malloc()</h4>
+
+<p>The <b>sqlite_get_table</b> function is a wrapper around
+<b>sqlite_exec</b> that collects all the information from successive
+callbacks and writes it into memory obtained from malloc(). This
+is a convenience function that allows the application to get the
+entire result of a database query with a single function call.</p>
+
+<p>The main result from <b>sqlite_get_table</b> is an array of pointers
+to strings. There is one element in this array for each column of
+each row in the result. NULL results are represented by a NULL
+pointer. In addition to the regular data, there is an added row at the
+beginning of the array that contains the name of each column of the
+result.</p>
+
+<p>As an example, consider the following query:</p>
+
+<blockquote>
+SELECT employee_name, login, host FROM users WHERE login LIKE 'd%';
+</blockquote>
+
+<p>This query will return the name, login and host computer name
+for every employee whose login begins with the letter "d". If this
+query is submitted to <b>sqlite_get_table</b> the result might
+look like this:</p>
+
+<blockquote>
+nrow = 2<br>
+ncolumn = 3<br>
+result&#91;0] = "employee_name"<br>
+result&#91;1] = "login"<br>
+result&#91;2] = "host"<br>
+result&#91;3] = "dummy"<br>
+result&#91;4] = "No such user"<br>
+result&#91;5] = 0<br>
+result&#91;6] = "D. Richard Hipp"<br>
+result&#91;7] = "drh"<br>
+result&#91;8] = "zadok"
+</blockquote>
+
+<p>Notice that the "host" value for the "dummy" record is NULL so
+the result&#91;] array contains a NULL pointer at that slot.</p>
+
+<p>If the result set of a query is empty, then by default
+<b>sqlite_get_table</b> will set nrow to 0 and leave its
+result parameter is set to NULL. But if the EMPTY_RESULT_CALLBACKS
+pragma is ON then the result parameter is initialized to the names
+of the columns only. For example, consider this query which has
+an empty result set:</p>
+
+<blockquote>
+SELECT employee_name, login, host FROM users WHERE employee_name IS NULL;
+</blockquote>
+
+<p>
+The default behavior gives this results:
+</p>
+
+<blockquote>
+nrow = 0<br>
+ncolumn = 0<br>
+result = 0<br>
+</blockquote>
+
+<p>
+But if the EMPTY_RESULT_CALLBACKS pragma is ON, then the following
+is returned:
+</p>
+
+<blockquote>
+nrow = 0<br>
+ncolumn = 3<br>
+result&#91;0] = "employee_name"<br>
+result&#91;1] = "login"<br>
+result&#91;2] = "host"<br>
+</blockquote>
+
+<p>Memory to hold the information returned by <b>sqlite_get_table</b>
+is obtained from malloc(). But the calling function should not try
+to free this information directly. Instead, pass the complete table
+to <b>sqlite_free_table</b> when the table is no longer needed.
+It is safe to call <b>sqlite_free_table</b> with a NULL pointer such
+as would be returned if the result set is empty.</p>
+
+<p>The <b>sqlite_get_table</b> routine returns the same integer
+result code as <b>sqlite_exec</b>.</p>
+
+<h4>3.4 Interrupting an SQLite operation</h4>
+
+<p>The <b>sqlite_interrupt</b> function can be called from a
+different thread or from a signal handler to cause the current database
+operation to exit at its first opportunity. When this happens,
+the <b>sqlite_exec</b> routine (or the equivalent) that started
+the database operation will return SQLITE_INTERRUPT.</p>
+
+<h4>3.5 Testing for a complete SQL statement</h4>
+
+<p>The next interface routine to SQLite is a convenience function used
+to test whether or not a string forms a complete SQL statement.
+If the <b>sqlite_complete</b> function returns true when its input
+is a string, then the argument forms a complete SQL statement.
+There are no guarantees that the syntax of that statement is correct,
+but we at least know the statement is complete. If <b>sqlite_complete</b>
+returns false, then more text is required to complete the SQL statement.</p>
+
+<p>For the purpose of the <b>sqlite_complete</b> function, an SQL
+statement is complete if it ends in a semicolon.</p>
+
+<p>The <b>sqlite</b> command-line utility uses the <b>sqlite_complete</b>
+function to know when it needs to call <b>sqlite_exec</b>. After each
+line of input is received, <b>sqlite</b> calls <b>sqlite_complete</b>
+on all input in its buffer. If <b>sqlite_complete</b> returns true,
+then <b>sqlite_exec</b> is called and the input buffer is reset. If
+<b>sqlite_complete</b> returns false, then the prompt is changed to
+the continuation prompt and another line of text is read and added to
+the input buffer.</p>
+
+<h4>3.6 Library version string</h4>
+
+<p>The SQLite library exports the string constant named
+<b>sqlite_version</b> which contains the version number of the
+library. The header file contains a macro SQLITE_VERSION
+with the same information. If desired, a program can compare
+the SQLITE_VERSION macro against the <b>sqlite_version</b>
+string constant to verify that the version number of the
+header file and the library match.</p>
+
+<h4>3.7 Library character encoding</h4>
+
+<p>By default, SQLite assumes that all data uses a fixed-size
+8-bit character (iso8859). But if you give the --enable-utf8 option
+to the configure script, then the library assumes UTF-8 variable
+sized characters. This makes a difference for the LIKE and GLOB
+operators and the LENGTH() and SUBSTR() functions. The static
+string <b>sqlite_encoding</b> will be set to either "UTF-8" or
+"iso8859" to indicate how the library was compiled. In addition,
+the <b>sqlite.h</b> header file will define one of the
+macros <b>SQLITE_UTF8</b> or <b>SQLITE_ISO8859</b>, as appropriate.</p>
+
+<p>Note that the character encoding mechanism used by SQLite cannot
+be changed at run-time. This is a compile-time option only. The
+<b>sqlite_encoding</b> character string just tells you how the library
+was compiled.</p>
+
+<h4>3.8 Changing the library's response to locked files</h4>
+
+<p>The <b>sqlite_busy_handler</b> procedure can be used to register
+a busy callback with an open SQLite database. The busy callback will
+be invoked whenever SQLite tries to access a database that is locked.
+The callback will typically do some other useful work, or perhaps sleep,
+in order to give the lock a chance to clear. If the callback returns
+non-zero, then SQLite tries again to access the database and the cycle
+repeats. If the callback returns zero, then SQLite aborts the current
+operation and returns SQLITE_BUSY.</p>
+
+<p>The arguments to <b>sqlite_busy_handler</b> are the opaque
+structure returned from <b>sqlite_open</b>, a pointer to the busy
+callback function, and a generic pointer that will be passed as
+the first argument to the busy callback. When SQLite invokes the
+busy callback, it sends it three arguments: the generic pointer
+that was passed in as the third argument to <b>sqlite_busy_handler</b>,
+the name of the database table or index that the library is trying
+to access, and the number of times that the library has attempted to
+access the database table or index.</p>
+
+<p>For the common case where we want the busy callback to sleep,
+the SQLite library provides a convenience routine <b>sqlite_busy_timeout</b>.
+The first argument to <b>sqlite_busy_timeout</b> is a pointer to
+an open SQLite database and the second argument is a number of milliseconds.
+After <b>sqlite_busy_timeout</b> has been executed, the SQLite library
+will wait for the lock to clear for at least the number of milliseconds
+specified before it returns SQLITE_BUSY. Specifying zero milliseconds for
+the timeout restores the default behavior.</p>
+
+<h4>3.9 Using the <tt>_printf()</tt> wrapper functions</h4>
+
+<p>The four utility functions</p>
+
+<p>
+<ul>
+<li><b>sqlite_exec_printf()</b></li>
+<li><b>sqlite_exec_vprintf()</b></li>
+<li><b>sqlite_get_table_printf()</b></li>
+<li><b>sqlite_get_table_vprintf()</b></li>
+</ul>
+</p>
+
+<p>implement the same query functionality as <b>sqlite_exec</b>
+and <b>sqlite_get_table</b>. But instead of taking a complete
+SQL statement as their second argument, the four <b>_printf</b>
+routines take a printf-style format string. The SQL statement to
+be executed is generated from this format string and from whatever
+additional arguments are attached to the end of the function call.</p>
+
+<p>There are two advantages to using the SQLite printf
+functions instead of <b>sprintf</b>. First of all, with the
+SQLite printf routines, there is never a danger of overflowing a
+static buffer as there is with <b>sprintf</b>. The SQLite
+printf routines automatically allocate (and later frees)
+as much memory as is
+necessary to hold the SQL statements generated.</p>
+
+<p>The second advantage the SQLite printf routines have over
+<b>sprintf</b> are two new formatting options specifically designed
+to support string literals in SQL. Within the format string,
+the %q formatting option works very much like %s in that it
+reads a null-terminated string from the argument list and inserts
+it into the result. But %q translates the inserted string by
+making two copies of every single-quote (') character in the
+substituted string. This has the effect of escaping the end-of-string
+meaning of single-quote within a string literal. The %Q formatting
+option works similar; it translates the single-quotes like %q and
+additionally encloses the resulting string in single-quotes.
+If the argument for the %Q formatting options is a NULL pointer,
+the resulting string is NULL without single quotes.
+</p>
+
+<p>Consider an example. Suppose you are trying to insert a string
+value into a database table where the string value was obtained from
+user input. Suppose the string to be inserted is stored in a variable
+named zString. The code to do the insertion might look like this:</p>
+
+<blockquote><pre>
+sqlite_exec_printf(db,
+ "INSERT INTO table1 VALUES('%s')",
+ 0, 0, 0, zString);
+</pre></blockquote>
+
+<p>If the zString variable holds text like "Hello", then this statement
+will work just fine. But suppose the user enters a string like
+"Hi y'all!". The SQL statement generated reads as follows:
+
+<blockquote><pre>
+INSERT INTO table1 VALUES('Hi y'all')
+</pre></blockquote>
+
+<p>This is not valid SQL because of the apostrophe in the word "y'all".
+But if the %q formatting option is used instead of %s, like this:</p>
+
+<blockquote><pre>
+sqlite_exec_printf(db,
+ "INSERT INTO table1 VALUES('%q')",
+ 0, 0, 0, zString);
+</pre></blockquote>
+
+<p>Then the generated SQL will look like the following:</p>
+
+<blockquote><pre>
+INSERT INTO table1 VALUES('Hi y''all')
+</pre></blockquote>
+
+<p>Here the apostrophe has been escaped and the SQL statement is well-formed.
+When generating SQL on-the-fly from data that might contain a
+single-quote character ('), it is always a good idea to use the
+SQLite printf routines and the %q formatting option instead of <b>sprintf</b>.
+</p>
+
+<p>If the %Q formatting option is used instead of %q, like this:</p>
+
+<blockquote><pre>
+sqlite_exec_printf(db,
+ "INSERT INTO table1 VALUES(%Q)",
+ 0, 0, 0, zString);
+</pre></blockquote>
+
+<p>Then the generated SQL will look like the following:</p>
+
+<blockquote><pre>
+INSERT INTO table1 VALUES('Hi y''all')
+</pre></blockquote>
+
+<p>If the value of the zString variable is NULL, the generated SQL
+will look like the following:</p>
+
+<blockquote><pre>
+INSERT INTO table1 VALUES(NULL)
+</pre></blockquote>
+
+<p>All of the _printf() routines above are built around the following
+two functions:</p>
+
+<blockquote><pre>
+char *sqlite_mprintf(const char *zFormat, ...);
+char *sqlite_vmprintf(const char *zFormat, va_list);
+</pre></blockquote>
+
+<p>The <b>sqlite_mprintf()</b> routine works like the standard library
+<b>sprintf()</b> except that it writes its results into memory obtained
+from malloc() and returns a pointer to the malloced buffer.
+<b>sqlite_mprintf()</b> also understands the %q and %Q extensions described
+above. The <b>sqlite_vmprintf()</b> is a varargs version of the same
+routine. The string pointer that these routines return should be freed
+by passing it to <b>sqlite_freemem()</b>.
+</p>
+
+<h4>3.10 Performing background jobs during large queries</h3>
+
+<p>The <b>sqlite_progress_handler()</b> routine can be used to register a
+callback routine with an SQLite database to be invoked periodically during long
+running calls to <b>sqlite_exec()</b>, <b>sqlite_step()</b> and the various
+wrapper functions.
+</p>
+
+<p>The callback is invoked every N virtual machine operations, where N is
+supplied as the second argument to <b>sqlite_progress_handler()</b>. The third
+and fourth arguments to <b>sqlite_progress_handler()</b> are a pointer to the
+routine to be invoked and a void pointer to be passed as the first argument to
+it.
+</p>
+
+<p>The time taken to execute each virtual machine operation can vary based on
+many factors. A typical value for a 1 GHz PC is between half and three million
+per second but may be much higher or lower, depending on the query. As such it
+is difficult to schedule background operations based on virtual machine
+operations. Instead, it is recommended that a callback be scheduled relatively
+frequently (say every 1000 instructions) and external timer routines used to
+determine whether or not background jobs need to be run.
+</p>
+
+<a name="cfunc"></a>
+<h3>4.0 Adding New SQL Functions</h3>
+
+<p>Beginning with version 2.4.0, SQLite allows the SQL language to be
+extended with new functions implemented as C code. The following interface
+is used:
+</p>
+
+<blockquote><pre>
+typedef struct sqlite_func sqlite_func;
+
+int sqlite_create_function(
+ sqlite *db,
+ const char *zName,
+ int nArg,
+ void (*xFunc)(sqlite_func*,int,const char**),
+ void *pUserData
+);
+int sqlite_create_aggregate(
+ sqlite *db,
+ const char *zName,
+ int nArg,
+ void (*xStep)(sqlite_func*,int,const char**),
+ void (*xFinalize)(sqlite_func*),
+ void *pUserData
+);
+
+char *sqlite_set_result_string(sqlite_func*,const char*,int);
+void sqlite_set_result_int(sqlite_func*,int);
+void sqlite_set_result_double(sqlite_func*,double);
+void sqlite_set_result_error(sqlite_func*,const char*,int);
+
+void *sqlite_user_data(sqlite_func*);
+void *sqlite_aggregate_context(sqlite_func*, int nBytes);
+int sqlite_aggregate_count(sqlite_func*);
+</pre></blockquote>
+
+<p>
+The <b>sqlite_create_function()</b> interface is used to create
+regular functions and <b>sqlite_create_aggregate()</b> is used to
+create new aggregate functions. In both cases, the <b>db</b>
+parameter is an open SQLite database on which the functions should
+be registered, <b>zName</b> is the name of the new function,
+<b>nArg</b> is the number of arguments, and <b>pUserData</b> is
+a pointer which is passed through unchanged to the C implementation
+of the function. Both routines return 0 on success and non-zero
+if there are any errors.
+</p>
+
+<p>
+The length of a function name may not exceed 255 characters.
+Any attempt to create a function whose name exceeds 255 characters
+in length will result in an error.
+</p>
+
+<p>
+For regular functions, the <b>xFunc</b> callback is invoked once
+for each function call. The implementation of xFunc should call
+one of the <b>sqlite_set_result_...</b> interfaces to return its
+result. The <b>sqlite_user_data()</b> routine can be used to
+retrieve the <b>pUserData</b> pointer that was passed in when the
+function was registered.
+</p>
+
+<p>
+For aggregate functions, the <b>xStep</b> callback is invoked once
+for each row in the result and then <b>xFinalize</b> is invoked at the
+end to compute a final answer. The xStep routine can use the
+<b>sqlite_aggregate_context()</b> interface to allocate memory that
+will be unique to that particular instance of the SQL function.
+This memory will be automatically deleted after xFinalize is called.
+The <b>sqlite_aggregate_count()</b> routine can be used to find out
+how many rows of data were passed to the aggregate. The xFinalize
+callback should invoke one of the <b>sqlite_set_result_...</b>
+interfaces to set the final result of the aggregate.
+</p>
+
+<p>
+SQLite now implements all of its built-in functions using this
+interface. For additional information and examples on how to create
+new SQL functions, review the SQLite source code in the file
+<b>func.c</b>.
+</p>
+
+<h3>5.0 Multi-Threading And SQLite</h3>
+
+<p>
+If SQLite is compiled with the THREADSAFE preprocessor macro set to 1,
+then it is safe to use SQLite from two or more threads of the same process
+at the same time. But each thread should have its own <b>sqlite*</b>
+pointer returned from <b>sqlite_open</b>. It is never safe for two
+or more threads to access the same <b>sqlite*</b> pointer at the same time.
+</p>
+
+<p>
+In precompiled SQLite libraries available on the website, the Unix
+versions are compiled with THREADSAFE turned off but the Windows
+versions are compiled with THREADSAFE turned on. If you need something
+different that this you will have to recompile.
+</p>
+
+<p>
+Under Unix, an <b>sqlite*</b> pointer should not be carried across a
+<b>fork()</b> system call into the child process. The child process
+should open its own copy of the database after the <b>fork()</b>.
+</p>
+
+<h3>6.0 Usage Examples</h3>
+
+<p>For examples of how the SQLite C/C++ interface can be used,
+refer to the source code for the <b>sqlite</b> program in the
+file <a href="https://sqlite.org/src/file/src/shell.c.in">src/shell.c</a>
+of the source tree.
+Additional information about sqlite is available at
+<a href="cli.html">cli.html</a>.
+See also the sources to the Tcl interface for SQLite in
+the source file
+<a href="https://sqlite.org/src/file/src/tclsqlite.c">src/tclsqlite.c</a>.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/c_interface.in?m=37fc83a59c4d4a606">2020-04-14 16:00:55</a> UTC </small></i></p>
+
diff --git a/www/capi3.html b/www/capi3.html
new file mode 100644
index 0000000..af5cb19
--- /dev/null
+++ b/www/capi3.html
@@ -0,0 +1,632 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>C/C++ Interface For SQLite Version 3 (old)</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<font color="#7f001f"><p>
+<b>Note:</b>
+This document was written in 2004 as a guide to helping programmers
+move from using SQLite version 2 to SQLite version 3. The information
+in this document is still essentially correct, however there have been
+many changes and enhancements over the years. We recommend that the
+following documents be used instead:
+<ul>
+<li><a href="cintro.html">An Introduction To The SQLite C/C++ Interface</a></li>
+<li><a href="c3ref/intro.html">SQLite C/C++ Reference Guide</a></li>
+</ul>
+</p>
+</font>
+
+<h2>C/C++ Interface For SQLite Version 3</h2>
+
+<h3>1.0 Overview</h3>
+
+<p>
+SQLite version 3.0 is a new version of SQLite, derived from
+the SQLite 2.8.13 code base, but with an incompatible file format
+and API.
+SQLite version 3.0 was created to answer demand for the following features:
+</p>
+
+<ul>
+<li>Support for UTF-16.</li>
+<li>User-definable text collating sequences.</li>
+<li>The ability to store BLOBs in indexed columns.</li>
+</ul>
+
+<p>
+It was necessary to move to version 3.0 to implement these features because
+each requires incompatible changes to the database file format. Other
+incompatible changes, such as a cleanup of the API, were introduced at the
+same time under the theory that it is best to get your incompatible changes
+out of the way all at once.
+</p>
+
+<p>
+The API for version 3.0 is similar to the version 2.X API,
+but with some important changes. Most noticeably, the "<tt>sqlite_</tt>"
+prefix that occurs on the beginning of all API functions and data
+structures are changed to "<tt>sqlite3_</tt>".
+This avoids confusion between the two APIs and allows linking against both
+SQLite 2.X and SQLite 3.0 at the same time.
+</p>
+
+<p>
+There is no agreement on what the C datatype for a UTF-16
+string should be. Therefore, SQLite uses a generic type of void*
+to refer to UTF-16 strings. Client software can cast the void*
+to whatever datatype is appropriate for their system.
+</p>
+
+<h3>2.0 C/C++ Interface</h3>
+
+<p>
+The API for SQLite 3.0 includes 83 separate functions in addition
+to several data structures and #defines. (A complete
+<a href="c3ref/intro.html">API reference</a> is provided as a separate
+document.)
+Fortunately, the interface is not nearly as complex as its size implies.
+Simple programs can still make do with only 3 functions:
+<a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/exec.html">sqlite3_exec()</a>, and <a href="c3ref/close.html">sqlite3_close()</a>.
+More control over the execution of the database engine is provided
+using <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
+to compile an SQLite statement into byte code and
+<a href="c3ref/step.html">sqlite3_step()</a> to execute that bytecode.
+A family of routines with names beginning with
+<a href="c3ref/column_blob.html">sqlite3_column_</a>
+is used to extract information about the result set of a query.
+Many interface functions come in pairs, with both a UTF-8 and
+UTF-16 version. And there is a collection of routines
+used to implement user-defined SQL functions and user-defined
+text collating sequences.
+</p>
+
+
+<h4>2.1 Opening and closing a database</h4>
+
+<blockquote><pre>
+ typedef struct sqlite3 sqlite3;
+ int sqlite3_open(const char*, sqlite3**);
+ int sqlite3_open16(const void*, sqlite3**);
+ int sqlite3_close(sqlite3*);
+ const char *sqlite3_errmsg(sqlite3*);
+ const void *sqlite3_errmsg16(sqlite3*);
+ int sqlite3_errcode(sqlite3*);
+</pre></blockquote>
+
+<p>
+The sqlite3_open() routine returns an integer error code rather than
+a pointer to the sqlite3 structure as the version 2 interface did.
+The difference between sqlite3_open()
+and sqlite3_open16() is that sqlite3_open16() takes UTF-16 (in host native
+byte order) for the name of the database file. If a new database file
+needs to be created, then sqlite3_open16() sets the internal text
+representation to UTF-16 whereas sqlite3_open() sets the text
+representation to UTF-8.
+</p>
+
+<p>
+The opening and/or creating of the database file is deferred until the
+file is actually needed. This allows options and parameters, such
+as the native text representation and default page size, to be
+set using PRAGMA statements.
+</p>
+
+<p>
+The sqlite3_errcode() routine returns a result code for the most
+recent major API call. sqlite3_errmsg() returns an English-language
+text error message for the most recent error. The error message is
+represented in UTF-8 and will be ephemeral - it could disappear on
+the next call to any SQLite API function. sqlite3_errmsg16() works like
+sqlite3_errmsg() except that it returns the error message represented
+as UTF-16 in host native byte order.
+</p>
+
+<p>
+The error codes for SQLite version 3 are unchanged from version 2.
+They are as follows:
+</p>
+
+<blockquote><pre>
+#define SQLITE_OK 0 /* Successful result */
+#define SQLITE_ERROR 1 /* SQL error or missing database */
+#define SQLITE_INTERNAL 2 /* An internal logic error in SQLite */
+#define SQLITE_PERM 3 /* Access permission denied */
+#define SQLITE_ABORT 4 /* Callback routine requested an abort */
+#define SQLITE_BUSY 5 /* The database file is locked */
+#define SQLITE_LOCKED 6 /* A table in the database is locked */
+#define SQLITE_NOMEM 7 /* A malloc() failed */
+#define SQLITE_READONLY 8 /* Attempt to write a readonly database */
+#define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite_interrupt() */
+#define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */
+#define SQLITE_CORRUPT 11 /* The database disk image is malformed */
+#define SQLITE_NOTFOUND 12 /* (Internal Only) Table or record not found */
+#define SQLITE_FULL 13 /* Insertion failed because database is full */
+#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
+#define SQLITE_PROTOCOL 15 /* Database lock protocol error */
+#define SQLITE_EMPTY 16 /* (Internal Only) Database table is empty */
+#define SQLITE_SCHEMA 17 /* The database schema changed */
+#define SQLITE_TOOBIG 18 /* Too much data for one row of a table */
+#define SQLITE_CONSTRAINT 19 /* Abort due to contraint violation */
+#define SQLITE_MISMATCH 20 /* Data type mismatch */
+#define SQLITE_MISUSE 21 /* Library used incorrectly */
+#define SQLITE_NOLFS 22 /* Uses OS features not supported on host */
+#define SQLITE_AUTH 23 /* Authorization denied */
+#define SQLITE_ROW 100 /* sqlite_step() has another row ready */
+#define SQLITE_DONE 101 /* sqlite_step() has finished executing */
+</pre></blockquote>
+
+<h4>2.2 Executing SQL statements</h4>
+
+<blockquote><pre>
+ typedef int (*sqlite_callback)(void*,int,char**, char**);
+ int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void*, char**);
+</pre></blockquote>
+
+<p>
+The <a href="c3ref/exec.html">sqlite3_exec()</a> function works much as it did in SQLite version 2.
+Zero or more SQL statements specified in the second parameter are compiled
+and executed. Query results are returned to a callback routine.
+</p>
+
+<p>
+In SQLite version 3, the sqlite3_exec routine is just a wrapper around
+calls to the prepared statement interface.
+</p>
+
+<blockquote><pre>
+ typedef struct sqlite3_stmt sqlite3_stmt;
+ int sqlite3_prepare(sqlite3*, const char*, int, sqlite3_stmt**, const char**);
+ int sqlite3_prepare16(sqlite3*, const void*, int, sqlite3_stmt**, const void**);
+ int sqlite3_finalize(sqlite3_stmt*);
+ int sqlite3_reset(sqlite3_stmt*);
+</pre></blockquote>
+
+<p>
+The sqlite3_prepare interface compiles a single SQL statement into byte code
+for later execution. This interface is now the preferred way of accessing
+the database.
+</p>
+
+<p>
+The SQL statement is a UTF-8 string for sqlite3_prepare().
+The sqlite3_prepare16() works the same way except
+that it expects a UTF-16 string as SQL input.
+Only the first SQL statement in the input string is compiled.
+The fifth parameter is filled in with a pointer to the next (uncompiled)
+SQLite statement in the input string, if any.
+The sqlite3_finalize() routine deallocates a prepared SQL statement.
+All prepared statements must be finalized before the database can be
+closed.
+The sqlite3_reset() routine resets a prepared SQL statement so that it
+can be executed again.
+</p>
+
+<p>
+The SQL statement may contain tokens of the form "?" or "?nnn" or ":aaa"
+where "nnn" is an integer and "aaa" is an identifier.
+Such tokens represent unspecified literal values (or "wildcards")
+to be filled in later by the
+<a href="c3ref/bind_blob.html">sqlite3_bind</a> interface.
+Each wildcard has an associated number which is its sequence in the
+statement or the "nnn" in the case of a "?nnn" form.
+It is allowed for the same wildcard
+to occur more than once in the same SQL statement, in which case
+all instance of that wildcard will be filled in with the same value.
+Unbound wildcards have a value of NULL.
+</p>
+
+<blockquote><pre>
+ int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
+ int sqlite3_bind_double(sqlite3_stmt*, int, double);
+ int sqlite3_bind_int(sqlite3_stmt*, int, int);
+ int sqlite3_bind_int64(sqlite3_stmt*, int, long long int);
+ int sqlite3_bind_null(sqlite3_stmt*, int);
+ int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
+ int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
+ int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
+</pre></blockquote>
+
+<p>
+There is an assortment of sqlite3_bind routines used to assign values
+to wildcards in a prepared SQL statement. Unbound wildcards
+are interpreted as NULLs. Bindings are not reset by sqlite3_reset().
+But wildcards can be rebound to new values after an sqlite3_reset().
+</p>
+
+<p>
+After an SQL statement has been prepared (and optionally bound), it
+is executed using:
+</p>
+
+<blockquote><pre>
+ int sqlite3_step(sqlite3_stmt*);
+</pre></blockquote>
+
+<p>
+The sqlite3_step() routine return SQLITE_ROW if it is returning a single
+row of the result set, or SQLITE_DONE if execution has completed, either
+normally or due to an error. It might also return SQLITE_BUSY if it is
+unable to open the database file. If the return value is SQLITE_ROW, then
+the following routines can be used to extract information about that row
+of the result set:
+</p>
+
+<blockquote><pre>
+ const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
+ int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
+ int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
+ int sqlite3_column_count(sqlite3_stmt*);
+ const char *sqlite3_column_decltype(sqlite3_stmt *, int iCol);
+ const void *sqlite3_column_decltype16(sqlite3_stmt *, int iCol);
+ double sqlite3_column_double(sqlite3_stmt*, int iCol);
+ int sqlite3_column_int(sqlite3_stmt*, int iCol);
+ long long int sqlite3_column_int64(sqlite3_stmt*, int iCol);
+ const char *sqlite3_column_name(sqlite3_stmt*, int iCol);
+ const void *sqlite3_column_name16(sqlite3_stmt*, int iCol);
+ const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
+ const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
+ int sqlite3_column_type(sqlite3_stmt*, int iCol);
+</pre></blockquote>
+
+<p>
+The <a href="c3ref/column_count.html">sqlite3_column_count()</a>
+function returns the number of columns in
+the results set. sqlite3_column_count() can be called at any time after
+<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>. <a href="c3ref/data_count.html">sqlite3_data_count()</a> works similarly to
+<a href="c3ref/column_count.html">sqlite3_column_count()</a> except that it only works following <a href="c3ref/step.html">sqlite3_step()</a>.
+If the previous call to <a href="c3ref/step.html">sqlite3_step()</a> returned SQLITE_DONE or an error code,
+then <a href="c3ref/data_count.html">sqlite3_data_count()</a> will return 0 whereas <a href="c3ref/column_count.html">sqlite3_column_count()</a> will
+continue to return the number of columns in the result set.
+</p>
+
+<p>Returned data is examined using the other
+<a href="c3ref/column_blob.html">sqlite3_column_***()</a> functions,
+all of which take a column number as their second parameter. Columns are
+zero-indexed from left to right. Note that this is different to parameters,
+which are indexed starting at one.
+</p>
+
+<p>
+The <a href="c3ref/column_blob.html">sqlite3_column_type()</a> function returns the
+datatype for the value in the Nth column. The return value is one
+of these:
+</p>
+
+<blockquote><pre>
+ #define SQLITE_INTEGER 1
+ #define SQLITE_FLOAT 2
+ #define SQLITE_TEXT 3
+ #define SQLITE_BLOB 4
+ #define SQLITE_NULL 5
+</pre></blockquote>
+
+<p>
+The sqlite3_column_decltype() routine returns text which is the
+declared type of the column in the CREATE TABLE statement. For an
+expression, the return type is an empty string. sqlite3_column_name()
+returns the name of the Nth column. sqlite3_column_bytes() returns
+the number of bytes in a column that has type BLOB or the number of bytes
+in a TEXT string with UTF-8 encoding. sqlite3_column_bytes16() returns
+the same value for BLOBs but for TEXT strings returns the number of bytes
+in a UTF-16 encoding.
+sqlite3_column_blob() return BLOB data.
+sqlite3_column_text() return TEXT data as UTF-8.
+sqlite3_column_text16() return TEXT data as UTF-16.
+sqlite3_column_int() return INTEGER data in the host machines native
+integer format.
+sqlite3_column_int64() returns 64-bit INTEGER data.
+Finally, sqlite3_column_double() return floating point data.
+</p>
+
+<p>
+It is not necessary to retrieve data in the format specify by
+sqlite3_column_type(). If a different format is requested, the data
+is converted automatically.
+</p>
+
+<p>
+Data format conversions can invalidate the pointer returned by
+prior calls to sqlite3_column_blob(), sqlite3_column_text(), and/or
+sqlite3_column_text16(). Pointers might be invalided in the following
+cases:
+</p>
+<ul>
+<li><p>
+The initial content is a BLOB and sqlite3_column_text()
+or sqlite3_column_text16()
+is called. A zero-terminator might need to be added to the string.
+</p></li>
+<li><p>
+The initial content is UTF-8 text and sqlite3_column_bytes16() or
+sqlite3_column_text16() is called. The content must be converted to UTF-16.
+</p></li>
+<li><p>
+The initial content is UTF-16 text and sqlite3_column_bytes() or
+sqlite3_column_text() is called. The content must be converted to UTF-8.
+</p></li>
+</ul>
+<p>
+Note that conversions between UTF-16be and UTF-16le
+are always done in place and do
+not invalidate a prior pointer, though of course the content of the buffer
+that the prior pointer points to will have been modified. Other kinds
+of conversion are done in place when it is possible, but sometime it is
+not possible and in those cases prior pointers are invalidated.
+</p>
+
+<p>
+The safest and easiest to remember policy is this: assume that any
+result from
+<ul>
+<li>sqlite3_column_blob(),</li>
+<li>sqlite3_column_text(), or</li>
+<li>sqlite3_column_text16()</li>
+</ul>
+is invalided by subsequent calls to
+<ul>
+<li>sqlite3_column_bytes(),</li>
+<li>sqlite3_column_bytes16(),</li>
+<li>sqlite3_column_text(), or</li>
+<li>sqlite3_column_text16().</li>
+</ul>
+This means that you should always call sqlite3_column_bytes() or
+sqlite3_column_bytes16() <u>before</u> calling sqlite3_column_blob(),
+sqlite3_column_text(), or sqlite3_column_text16().
+</p>
+
+<h4>2.3 User-defined functions</h4>
+
+<p>
+User defined functions can be created using the following routine:
+</p>
+
+<blockquote><pre>
+ typedef struct sqlite3_value sqlite3_value;
+ int sqlite3_create_function(
+ sqlite3 *,
+ const char *zFunctionName,
+ int nArg,
+ int eTextRep,
+ void*,
+ void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
+ void (*xFinal)(sqlite3_context*)
+ );
+ int sqlite3_create_function16(
+ sqlite3*,
+ const void *zFunctionName,
+ int nArg,
+ int eTextRep,
+ void*,
+ void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
+ void (*xFinal)(sqlite3_context*)
+ );
+ #define SQLITE_UTF8 1
+ #define SQLITE_UTF16 2
+ #define SQLITE_UTF16BE 3
+ #define SQLITE_UTF16LE 4
+ #define SQLITE_ANY 5
+</pre></blockquote>
+
+<p>
+The nArg parameter specifies the number of arguments to the function.
+A value of 0 indicates that any number of arguments is allowed. The
+eTextRep parameter specifies what representation text values are expected
+to be in for arguments to this function. The value of this parameter should
+be one of the parameters defined above. SQLite version 3 allows multiple
+implementations of the same function using different text representations.
+The database engine chooses the function that minimization the number
+of text conversions required.
+</p>
+
+<p>
+Normal functions specify only xFunc and leave xStep and xFinal set to NULL.
+Aggregate functions specify xStep and xFinal and leave xFunc set to NULL.
+There is no separate sqlite3_create_aggregate() API.
+</p>
+
+<p>
+The function name is specified in UTF-8. A separate sqlite3_create_function16()
+API works the same as sqlite_create_function()
+except that the function name is specified in UTF-16 host byte order.
+</p>
+
+<p>
+Notice that the parameters to functions are now pointers to sqlite3_value
+structures instead of pointers to strings as in SQLite version 2.X.
+The following routines are used to extract useful information from these
+"values":
+</p>
+
+<blockquote><pre>
+ const void *sqlite3_value_blob(sqlite3_value*);
+ int sqlite3_value_bytes(sqlite3_value*);
+ int sqlite3_value_bytes16(sqlite3_value*);
+ double sqlite3_value_double(sqlite3_value*);
+ int sqlite3_value_int(sqlite3_value*);
+ long long int sqlite3_value_int64(sqlite3_value*);
+ const unsigned char *sqlite3_value_text(sqlite3_value*);
+ const void *sqlite3_value_text16(sqlite3_value*);
+ int sqlite3_value_type(sqlite3_value*);
+</pre></blockquote>
+
+<p>
+Function implementations use the following APIs to acquire context and
+to report results:
+</p>
+
+<blockquote><pre>
+ void *sqlite3_aggregate_context(sqlite3_context*, int nbyte);
+ void *sqlite3_user_data(sqlite3_context*);
+ void sqlite3_result_blob(sqlite3_context*, const void*, int n, void(*)(void*));
+ void sqlite3_result_double(sqlite3_context*, double);
+ void sqlite3_result_error(sqlite3_context*, const char*, int);
+ void sqlite3_result_error16(sqlite3_context*, const void*, int);
+ void sqlite3_result_int(sqlite3_context*, int);
+ void sqlite3_result_int64(sqlite3_context*, long long int);
+ void sqlite3_result_null(sqlite3_context*);
+ void sqlite3_result_text(sqlite3_context*, const char*, int n, void(*)(void*));
+ void sqlite3_result_text16(sqlite3_context*, const void*, int n, void(*)(void*));
+ void sqlite3_result_value(sqlite3_context*, sqlite3_value*);
+ void *sqlite3_get_auxdata(sqlite3_context*, int);
+ void sqlite3_set_auxdata(sqlite3_context*, int, void*, void (*)(void*));
+</pre></blockquote>
+
+<h4>2.4 User-defined collating sequences</h4>
+
+<p>
+The following routines are used to implement user-defined
+collating sequences:
+</p>
+
+<blockquote><pre>
+ sqlite3_create_collation(sqlite3*, const char *zName, int eTextRep, void*,
+ int(*xCompare)(void*,int,const void*,int,const void*));
+ sqlite3_create_collation16(sqlite3*, const void *zName, int eTextRep, void*,
+ int(*xCompare)(void*,int,const void*,int,const void*));
+ sqlite3_collation_needed(sqlite3*, void*,
+ void(*)(void*,sqlite3*,int eTextRep,const char*));
+ sqlite3_collation_needed16(sqlite3*, void*,
+ void(*)(void*,sqlite3*,int eTextRep,const void*));
+</pre></blockquote>
+
+<p>
+The sqlite3_create_collation() function specifies a collating sequence name
+and a comparison function to implement that collating sequence. The
+comparison function is only used for comparing text values. The eTextRep
+parameter is one of SQLITE_UTF8, SQLITE_UTF16LE, SQLITE_UTF16BE, or
+SQLITE_ANY to specify which text representation the comparison function works
+with. Separate comparison functions can exist for the same collating
+sequence for each of the UTF-8, UTF-16LE and UTF-16BE text representations.
+The sqlite3_create_collation16() works like sqlite3_create_collation() except
+that the collation name is specified in UTF-16 host byte order instead of
+in UTF-8.
+</p>
+
+<p>
+The sqlite3_collation_needed() routine registers a callback which the
+database engine will invoke if it encounters an unknown collating sequence.
+The callback can lookup an appropriate comparison function and invoke
+sqlite_3_create_collation() as needed. The fourth parameter to the callback
+is the name of the collating sequence in UTF-8. For sqlite3_collation_need16()
+the callback sends the collating sequence name in UTF-16 host byte order.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/capi3.in?m=2524a93030a47da74">2009-10-30 17:27:52</a> UTC </small></i></p>
+
diff --git a/www/capi3ref.html b/www/capi3ref.html
new file mode 100644
index 0000000..8248311
--- /dev/null
+++ b/www/capi3ref.html
@@ -0,0 +1,11710 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>C/C++ Interface For SQLite Version 3</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+
+<h1 align="center">
+C-language Interface Specification for SQLite
+</h1>
+
+<p>This page is intended to be a precise and detailed specification.
+For a tutorial introductions, see instead:
+<ul>
+<li><a href="quickstart.html">SQLite In 3 Minutes Or Less</a> and/or
+<li>the <a href="cintro.html">Introduction To The SQLite C/C++ Interface</a>.
+</ul>
+This same content is also available split out into
+<a href="c3ref/intro.html">lots of small pages</a>.</p>
+
+<hr>
+
+
+
+<h2>Experimental And Deprecated Interfaces</h2>
+
+<p>SQLite interfaces can be subdivided into three categories:</p>
+
+<ol>
+<li>Stable</li>
+<li>Experimental</li>
+<li>Deprecated</li>
+</ol>
+
+<p>Stable interfaces will be maintained indefinitely in a backwards
+compatible way. An application that uses only stable interfaces
+should always be able to relink against a newer version of SQLite
+without any changes.</p>
+
+<p>Experimental interfaces are subject to change.
+Applications that use experimental interfaces
+may need to be modified when upgrading to a newer SQLite release, though
+this is rare.
+When new interfaces are added to SQLite, they generally begin
+as experimental interfaces. After an interface has been in use for
+a while and the developers are confident that the design of the interface
+is sound and worthy of long-term support, the interface is marked
+as stable.</p>
+
+<p>Deprecated interfaces have been superceded by better methods of
+accomplishing the same thing and should be avoided in new applications.
+Deprecated interfaces continue to be supported for the sake of
+backwards compatibility. At some point in the future, it is possible
+that deprecated interfaces may be removed.</p>
+
+<p>Key points:</p>
+
+<ul>
+<li>Experimental interfaces are subject to change and/or removal
+at any time.</li>
+
+<li>Deprecated interfaces should not be used in new code and might
+be removed in some future release.</li>
+</ul>
+
+<hr>
+<h2>List Of Objects:</h2>
+<div class='columns' style='columns: 14em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3'>sqlite3</a></li>
+<li><a href='#sqlite3_api_routines'>sqlite3_api_routines</a></li>
+<li><a href='#sqlite3_backup'>sqlite3_backup</a></li>
+<li><a href='#sqlite3_blob'>sqlite3_blob</a></li>
+<li><a href='#sqlite3_context'>sqlite3_context</a></li>
+<li><a href='#sqlite3_data_directory'>sqlite3_data_directory</a></li>
+<li><a href='#sqlite3_file'>sqlite3_file</a></li>
+<li><a href='#sqlite3_filename'>sqlite3_filename</a></li>
+<li><a href='#sqlite3_index_info'>sqlite3_index_info</a></li>
+<li><a href='#sqlite3_int64'>sqlite3_int64</a></li>
+<li><a href='#sqlite3_int64'>sqlite3_uint64</a></li>
+<li><a href='#sqlite3_int64'>sqlite_int64</a></li>
+<li><a href='#sqlite3_int64'>sqlite_uint64</a></li>
+<li><a href='#sqlite3_io_methods'>sqlite3_io_methods</a></li>
+<li><a href='#sqlite3_mem_methods'>sqlite3_mem_methods</a></li>
+<li><a href='#sqlite3_module'>sqlite3_module</a></li>
+<li><a href='#sqlite3_mutex'>sqlite3_mutex</a></li>
+<li><a href='#sqlite3_mutex_methods'>sqlite3_mutex_methods</a></li>
+<li><a href='#sqlite3_pcache'>sqlite3_pcache</a></li>
+<li><a href='#sqlite3_pcache_methods2'>sqlite3_pcache_methods2</a></li>
+<li><a href='#sqlite3_pcache_page'>sqlite3_pcache_page</a></li>
+<li><a href='#sqlite3_snapshot'>sqlite3_snapshot</a></li>
+<li><a href='#sqlite3_stmt'>sqlite3_stmt</a></li>
+<li><a href='#sqlite3_str'>sqlite3_str</a></li>
+<li><a href='#sqlite3_temp_directory'>sqlite3_temp_directory</a></li>
+<li><a href='#sqlite3_value'>sqlite3_value</a></li>
+<li><a href='#sqlite3_vfs'>sqlite3_vfs</a></li>
+<li><a href='#sqlite3_vtab'>sqlite3_vtab</a></li>
+<li><a href='#sqlite3_vtab_cursor'>sqlite3_vtab_cursor</a></li>
+</ul>
+</div>
+<hr>
+
+<h2>List Of Constants:</h2>
+<p>Also available: <a href="rescode.html">list of error codes</a></p>
+<div class='columns' style='columns: 20em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#SQLITE_ABORT'>SQLITE_ABORT</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_ABORT_ROLLBACK</a></li>
+<li><a href='#SQLITE_ACCESS_EXISTS'>SQLITE_ACCESS_EXISTS</a></li>
+<li><a href='#SQLITE_ACCESS_EXISTS'>SQLITE_ACCESS_READ</a></li>
+<li><a href='#SQLITE_ACCESS_EXISTS'>SQLITE_ACCESS_READWRITE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_ALTER_TABLE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_ANALYZE</a></li>
+<li><a href='#SQLITE_ANY'>SQLITE_ANY</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_ATTACH</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_AUTH</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_AUTH_USER</a></li>
+<li><a href='#SQLITE_BLOB'>SQLITE_BLOB</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_BUSY</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_BUSY_RECOVERY</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_BUSY_SNAPSHOT</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_BUSY_TIMEOUT</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_CANTOPEN</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CANTOPEN_CONVPATH</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CANTOPEN_DIRTYWAL</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CANTOPEN_FULLPATH</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CANTOPEN_ISDIR</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CANTOPEN_NOTEMPDIR</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CANTOPEN_SYMLINK</a></li>
+<li><a href='#SQLITE_CHECKPOINT_FULL'>SQLITE_CHECKPOINT_FULL</a></li>
+<li><a href='#SQLITE_CHECKPOINT_FULL'>SQLITE_CHECKPOINT_PASSIVE</a></li>
+<li><a href='#SQLITE_CHECKPOINT_FULL'>SQLITE_CHECKPOINT_RESTART</a></li>
+<li><a href='#SQLITE_CHECKPOINT_FULL'>SQLITE_CHECKPOINT_TRUNCATE</a></li>
+<li><a href='#sqliteconfigcoveringindexscan'>SQLITE_CONFIG_COVERING_INDEX_SCAN</a></li>
+<li><a href='#sqliteconfiggetmalloc'>SQLITE_CONFIG_GETMALLOC</a></li>
+<li><a href='#sqliteconfiggetmutex'>SQLITE_CONFIG_GETMUTEX</a></li>
+<li><a href='#sqliteconfiggetpcache'>SQLITE_CONFIG_GETPCACHE</a></li>
+<li><a href='#sqliteconfiggetpcache2'>SQLITE_CONFIG_GETPCACHE2</a></li>
+<li><a href='#sqliteconfigheap'>SQLITE_CONFIG_HEAP</a></li>
+<li><a href='#sqliteconfiglog'>SQLITE_CONFIG_LOG</a></li>
+<li><a href='#sqliteconfiglookaside'>SQLITE_CONFIG_LOOKASIDE</a></li>
+<li><a href='#sqliteconfigmalloc'>SQLITE_CONFIG_MALLOC</a></li>
+<li><a href='#sqliteconfigmemdbmaxsize'>SQLITE_CONFIG_MEMDB_MAXSIZE</a></li>
+<li><a href='#sqliteconfigmemstatus'>SQLITE_CONFIG_MEMSTATUS</a></li>
+<li><a href='#sqliteconfigmmapsize'>SQLITE_CONFIG_MMAP_SIZE</a></li>
+<li><a href='#sqliteconfigmultithread'>SQLITE_CONFIG_MULTITHREAD</a></li>
+<li><a href='#sqliteconfigmutex'>SQLITE_CONFIG_MUTEX</a></li>
+<li><a href='#sqliteconfigpagecache'>SQLITE_CONFIG_PAGECACHE</a></li>
+<li><a href='#sqliteconfigpcache'>SQLITE_CONFIG_PCACHE</a></li>
+<li><a href='#sqliteconfigpcache2'>SQLITE_CONFIG_PCACHE2</a></li>
+<li><a href='#sqliteconfigpcachehdrsz'>SQLITE_CONFIG_PCACHE_HDRSZ</a></li>
+<li><a href='#sqliteconfigpmasz'>SQLITE_CONFIG_PMASZ</a></li>
+<li><a href='#sqliteconfigscratch'>SQLITE_CONFIG_SCRATCH</a></li>
+<li><a href='#sqliteconfigserialized'>SQLITE_CONFIG_SERIALIZED</a></li>
+<li><a href='#sqliteconfigsinglethread'>SQLITE_CONFIG_SINGLETHREAD</a></li>
+<li><a href='#sqliteconfigsmallmalloc'>SQLITE_CONFIG_SMALL_MALLOC</a></li>
+<li><a href='#sqliteconfigsorterrefsize'>SQLITE_CONFIG_SORTERREF_SIZE</a></li>
+<li><a href='#sqliteconfigsqllog'>SQLITE_CONFIG_SQLLOG</a></li>
+<li><a href='#sqliteconfigstmtjrnlspill'>SQLITE_CONFIG_STMTJRNL_SPILL</a></li>
+<li><a href='#sqliteconfiguri'>SQLITE_CONFIG_URI</a></li>
+<li><a href='#sqliteconfigwin32heapsize'>SQLITE_CONFIG_WIN32_HEAPSIZE</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_CONSTRAINT</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_CHECK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_COMMITHOOK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_DATATYPE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_FOREIGNKEY</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_FUNCTION</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_NOTNULL</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_PINNED</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_PRIMARYKEY</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_ROWID</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_TRIGGER</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_UNIQUE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CONSTRAINT_VTAB</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_COPY</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_CORRUPT</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CORRUPT_INDEX</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CORRUPT_SEQUENCE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_CORRUPT_VTAB</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_CREATE_INDEX</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_CREATE_TABLE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_CREATE_TEMP_INDEX</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_CREATE_TEMP_TABLE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_CREATE_TEMP_TRIGGER</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_CREATE_TEMP_VIEW</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_CREATE_TRIGGER</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_CREATE_VIEW</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_CREATE_VTABLE</a></li>
+<li><a href='#sqlitedbconfigdefensive'>SQLITE_DBCONFIG_DEFENSIVE</a></li>
+<li><a href='#sqlitedbconfigdqsddl'>SQLITE_DBCONFIG_DQS_DDL</a></li>
+<li><a href='#sqlitedbconfigdqsdml'>SQLITE_DBCONFIG_DQS_DML</a></li>
+<li><a href='#sqlitedbconfigenablefkey'>SQLITE_DBCONFIG_ENABLE_FKEY</a></li>
+<li><a href='#sqlitedbconfigenablefts3tokenizer'>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a></li>
+<li><a href='#sqlitedbconfigenableloadextension'>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a></li>
+<li><a href='#sqlitedbconfigenableqpsg'>SQLITE_DBCONFIG_ENABLE_QPSG</a></li>
+<li><a href='#sqlitedbconfigenabletrigger'>SQLITE_DBCONFIG_ENABLE_TRIGGER</a></li>
+<li><a href='#sqlitedbconfigenableview'>SQLITE_DBCONFIG_ENABLE_VIEW</a></li>
+<li><a href='#sqlitedbconfiglegacyaltertable'>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</a></li>
+<li><a href='#sqlitedbconfiglegacyfileformat'>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</a></li>
+<li><a href='#sqlitedbconfiglookaside'>SQLITE_DBCONFIG_LOOKASIDE</a></li>
+<li><a href='#sqlitedbconfigmaindbname'>SQLITE_DBCONFIG_MAINDBNAME</a></li>
+<li><a href='#SQLITE_DBCONFIG_DEFENSIVE'>SQLITE_DBCONFIG_MAX</a></li>
+<li><a href='#sqlitedbconfignockptonclose'>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</a></li>
+<li><a href='#sqlitedbconfigresetdatabase'>SQLITE_DBCONFIG_RESET_DATABASE</a></li>
+<li><a href='#sqlitedbconfigtriggereqp'>SQLITE_DBCONFIG_TRIGGER_EQP</a></li>
+<li><a href='#sqlitedbconfigtrustedschema'>SQLITE_DBCONFIG_TRUSTED_SCHEMA</a></li>
+<li><a href='#sqlitedbconfigwritableschema'>SQLITE_DBCONFIG_WRITABLE_SCHEMA</a></li>
+<li><a href='#sqlitedbstatuscachehit'>SQLITE_DBSTATUS_CACHE_HIT</a></li>
+<li><a href='#sqlitedbstatuscachemiss'>SQLITE_DBSTATUS_CACHE_MISS</a></li>
+<li><a href='#sqlitedbstatuscachespill'>SQLITE_DBSTATUS_CACHE_SPILL</a></li>
+<li><a href='#sqlitedbstatuscacheused'>SQLITE_DBSTATUS_CACHE_USED</a></li>
+<li><a href='#sqlitedbstatuscacheusedshared'>SQLITE_DBSTATUS_CACHE_USED_SHARED</a></li>
+<li><a href='#sqlitedbstatuscachewrite'>SQLITE_DBSTATUS_CACHE_WRITE</a></li>
+<li><a href='#sqlitedbstatusdeferredfks'>SQLITE_DBSTATUS_DEFERRED_FKS</a></li>
+<li><a href='#sqlitedbstatuslookasidehit'>SQLITE_DBSTATUS_LOOKASIDE_HIT</a></li>
+<li><a href='#sqlitedbstatuslookasidemissfull'>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</a></li>
+<li><a href='#sqlitedbstatuslookasidemisssize'>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</a></li>
+<li><a href='#sqlitedbstatuslookasideused'>SQLITE_DBSTATUS_LOOKASIDE_USED</a></li>
+<li><a href='#SQLITE_DBSTATUS options'>SQLITE_DBSTATUS_MAX</a></li>
+<li><a href='#sqlitedbstatusschemaused'>SQLITE_DBSTATUS_SCHEMA_USED</a></li>
+<li><a href='#sqlitedbstatusstmtused'>SQLITE_DBSTATUS_STMT_USED</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DELETE</a></li>
+<li><a href='#SQLITE_DENY'>SQLITE_DENY</a></li>
+<li><a href='#SQLITE_DESERIALIZE_FREEONCLOSE'>SQLITE_DESERIALIZE_FREEONCLOSE</a></li>
+<li><a href='#SQLITE_DESERIALIZE_FREEONCLOSE'>SQLITE_DESERIALIZE_READONLY</a></li>
+<li><a href='#SQLITE_DESERIALIZE_FREEONCLOSE'>SQLITE_DESERIALIZE_RESIZEABLE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DETACH</a></li>
+<li><a href='#sqlitedeterministic'>SQLITE_DETERMINISTIC</a></li>
+<li><a href='#sqlitedirectonly'>SQLITE_DIRECTONLY</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_DONE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DROP_INDEX</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DROP_TABLE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DROP_TEMP_INDEX</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DROP_TEMP_TABLE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DROP_TEMP_TRIGGER</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DROP_TEMP_VIEW</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DROP_TRIGGER</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DROP_VIEW</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_DROP_VTABLE</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_EMPTY</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_ERROR</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_ERROR_MISSING_COLLSEQ</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_ERROR_RETRY</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_ERROR_SNAPSHOT</a></li>
+<li><a href='#SQLITE_FAIL'>SQLITE_FAIL</a></li>
+<li><a href='#sqlitefcntlbeginatomicwrite'>SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a></li>
+<li><a href='#sqlitefcntlbusyhandler'>SQLITE_FCNTL_BUSYHANDLER</a></li>
+<li><a href='#sqlitefcntlchunksize'>SQLITE_FCNTL_CHUNK_SIZE</a></li>
+<li><a href='#sqlitefcntlckptdone'>SQLITE_FCNTL_CKPT_DONE</a></li>
+<li><a href='#sqlitefcntlckptstart'>SQLITE_FCNTL_CKPT_START</a></li>
+<li><a href='#sqlitefcntlcksmfile'>SQLITE_FCNTL_CKSM_FILE</a></li>
+<li><a href='#sqlitefcntlcommitatomicwrite'>SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a></li>
+<li><a href='#sqlitefcntlcommitphasetwo'>SQLITE_FCNTL_COMMIT_PHASETWO</a></li>
+<li><a href='#sqlitefcntldataversion'>SQLITE_FCNTL_DATA_VERSION</a></li>
+<li><a href='#sqlitefcntlexternalreader'>SQLITE_FCNTL_EXTERNAL_READER</a></li>
+<li><a href='#sqlitefcntlfilepointer'>SQLITE_FCNTL_FILE_POINTER</a></li>
+<li><a href='#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE'>SQLITE_FCNTL_GET_LOCKPROXYFILE</a></li>
+<li><a href='#sqlitefcntlhasmoved'>SQLITE_FCNTL_HAS_MOVED</a></li>
+<li><a href='#sqlitefcntljournalpointer'>SQLITE_FCNTL_JOURNAL_POINTER</a></li>
+<li><a href='#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE'>SQLITE_FCNTL_LAST_ERRNO</a></li>
+<li><a href='#sqlitefcntllockstate'>SQLITE_FCNTL_LOCKSTATE</a></li>
+<li><a href='#sqlitefcntllocktimeout'>SQLITE_FCNTL_LOCK_TIMEOUT</a></li>
+<li><a href='#sqlitefcntlmmapsize'>SQLITE_FCNTL_MMAP_SIZE</a></li>
+<li><a href='#sqlitefcntloverwrite'>SQLITE_FCNTL_OVERWRITE</a></li>
+<li><a href='#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE'>SQLITE_FCNTL_PDB</a></li>
+<li><a href='#sqlitefcntlpersistwal'>SQLITE_FCNTL_PERSIST_WAL</a></li>
+<li><a href='#sqlitefcntlpowersafeoverwrite'>SQLITE_FCNTL_POWERSAFE_OVERWRITE</a></li>
+<li><a href='#sqlitefcntlpragma'>SQLITE_FCNTL_PRAGMA</a></li>
+<li><a href='#sqlitefcntlrbu'>SQLITE_FCNTL_RBU</a></li>
+<li><a href='#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE'>SQLITE_FCNTL_RESERVE_BYTES</a></li>
+<li><a href='#sqlitefcntlresetcache'>SQLITE_FCNTL_RESET_CACHE</a></li>
+<li><a href='#sqlitefcntlrollbackatomicwrite'>SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE</a></li>
+<li><a href='#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE'>SQLITE_FCNTL_SET_LOCKPROXYFILE</a></li>
+<li><a href='#sqlitefcntlsizehint'>SQLITE_FCNTL_SIZE_HINT</a></li>
+<li><a href='#sqlitefcntlsizelimit'>SQLITE_FCNTL_SIZE_LIMIT</a></li>
+<li><a href='#sqlitefcntlsync'>SQLITE_FCNTL_SYNC</a></li>
+<li><a href='#sqlitefcntlsyncomitted'>SQLITE_FCNTL_SYNC_OMITTED</a></li>
+<li><a href='#sqlitefcntltempfilename'>SQLITE_FCNTL_TEMPFILENAME</a></li>
+<li><a href='#sqlitefcntltrace'>SQLITE_FCNTL_TRACE</a></li>
+<li><a href='#sqlitefcntlvfsname'>SQLITE_FCNTL_VFSNAME</a></li>
+<li><a href='#sqlitefcntlvfspointer'>SQLITE_FCNTL_VFS_POINTER</a></li>
+<li><a href='#sqlitefcntlwalblock'>SQLITE_FCNTL_WAL_BLOCK</a></li>
+<li><a href='#sqlitefcntlwin32avretry'>SQLITE_FCNTL_WIN32_AV_RETRY</a></li>
+<li><a href='#sqlitefcntlwin32gethandle'>SQLITE_FCNTL_WIN32_GET_HANDLE</a></li>
+<li><a href='#sqlitefcntlwin32sethandle'>SQLITE_FCNTL_WIN32_SET_HANDLE</a></li>
+<li><a href='#sqlitefcntlzipvfs'>SQLITE_FCNTL_ZIPVFS</a></li>
+<li><a href='#SQLITE_BLOB'>SQLITE_FLOAT</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_FORMAT</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_FULL</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_FUNCTION</a></li>
+<li><a href='#SQLITE_DENY'>SQLITE_IGNORE</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_EQ</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_FUNCTION</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_GE</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_GLOB</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_GT</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_IS</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_ISNOT</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_ISNOTNULL</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_ISNULL</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_LE</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_LIKE</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_LIMIT</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_LT</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_MATCH</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_NE</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_OFFSET</a></li>
+<li><a href='#SQLITE_INDEX_CONSTRAINT_EQ'>SQLITE_INDEX_CONSTRAINT_REGEXP</a></li>
+<li><a href='#SQLITE_INDEX_SCAN_UNIQUE'>SQLITE_INDEX_SCAN_UNIQUE</a></li>
+<li><a href='#sqliteinnocuous'>SQLITE_INNOCUOUS</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_INSERT</a></li>
+<li><a href='#SQLITE_BLOB'>SQLITE_INTEGER</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_INTERNAL</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_INTERRUPT</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_ATOMIC</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_ATOMIC16K</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_ATOMIC1K</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_ATOMIC2K</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_ATOMIC32K</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_ATOMIC4K</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_ATOMIC512</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_ATOMIC64K</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_ATOMIC8K</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_BATCH_ATOMIC</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_IMMUTABLE</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_POWERSAFE_OVERWRITE</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_SAFE_APPEND</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_SEQUENTIAL</a></li>
+<li><a href='#SQLITE_IOCAP_ATOMIC'>SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_IOERR</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_ACCESS</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_AUTH</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_BEGIN_ATOMIC</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_BLOCKED</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_CHECKRESERVEDLOCK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_CLOSE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_COMMIT_ATOMIC</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_CONVPATH</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_CORRUPTFS</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_DATA</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_DELETE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_DELETE_NOENT</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_DIR_CLOSE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_DIR_FSYNC</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_FSTAT</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_FSYNC</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_GETTEMPPATH</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_LOCK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_MMAP</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_NOMEM</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_RDLOCK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_READ</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_ROLLBACK_ATOMIC</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_SEEK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_SHMLOCK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_SHMMAP</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_SHMOPEN</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_SHMSIZE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_SHORT_READ</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_TRUNCATE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_UNLOCK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_VNODE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_IOERR_WRITE</a></li>
+<li><a href='#sqlitelimitattached'>SQLITE_LIMIT_ATTACHED</a></li>
+<li><a href='#sqlitelimitcolumn'>SQLITE_LIMIT_COLUMN</a></li>
+<li><a href='#sqlitelimitcompoundselect'>SQLITE_LIMIT_COMPOUND_SELECT</a></li>
+<li><a href='#sqlitelimitexprdepth'>SQLITE_LIMIT_EXPR_DEPTH</a></li>
+<li><a href='#sqlitelimitfunctionarg'>SQLITE_LIMIT_FUNCTION_ARG</a></li>
+<li><a href='#sqlitelimitlength'>SQLITE_LIMIT_LENGTH</a></li>
+<li><a href='#sqlitelimitlikepatternlength'>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</a></li>
+<li><a href='#sqlitelimitsqllength'>SQLITE_LIMIT_SQL_LENGTH</a></li>
+<li><a href='#sqlitelimittriggerdepth'>SQLITE_LIMIT_TRIGGER_DEPTH</a></li>
+<li><a href='#sqlitelimitvariablenumber'>SQLITE_LIMIT_VARIABLE_NUMBER</a></li>
+<li><a href='#sqlitelimitvdbeop'>SQLITE_LIMIT_VDBE_OP</a></li>
+<li><a href='#sqlitelimitworkerthreads'>SQLITE_LIMIT_WORKER_THREADS</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_LOCKED</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_LOCKED_SHAREDCACHE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_LOCKED_VTAB</a></li>
+<li><a href='#SQLITE_LOCK_EXCLUSIVE'>SQLITE_LOCK_EXCLUSIVE</a></li>
+<li><a href='#SQLITE_LOCK_EXCLUSIVE'>SQLITE_LOCK_NONE</a></li>
+<li><a href='#SQLITE_LOCK_EXCLUSIVE'>SQLITE_LOCK_PENDING</a></li>
+<li><a href='#SQLITE_LOCK_EXCLUSIVE'>SQLITE_LOCK_RESERVED</a></li>
+<li><a href='#SQLITE_LOCK_EXCLUSIVE'>SQLITE_LOCK_SHARED</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_MISMATCH</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_MISUSE</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_FAST</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_RECURSIVE</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_APP1</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_APP2</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_APP3</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_LRU</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_LRU2</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_MAIN</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_MEM</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_MEM2</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_OPEN</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_PMEM</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_PRNG</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_VFS1</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_VFS2</a></li>
+<li><a href='#SQLITE_MUTEX_FAST'>SQLITE_MUTEX_STATIC_VFS3</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_NOLFS</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_NOMEM</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_NOTADB</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_NOTFOUND</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_NOTICE</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_NOTICE_RECOVER_ROLLBACK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_NOTICE_RECOVER_WAL</a></li>
+<li><a href='#SQLITE_BLOB'>SQLITE_NULL</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_OK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_OK_LOAD_PERMANENTLY</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_OK_SYMLINK</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_AUTOPROXY</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_CREATE</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_DELETEONCLOSE</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_EXCLUSIVE</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_EXRESCODE</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_FULLMUTEX</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_MAIN_DB</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_MAIN_JOURNAL</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_MEMORY</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_NOFOLLOW</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_NOMUTEX</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_PRIVATECACHE</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_READONLY</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_READWRITE</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_SHAREDCACHE</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_SUBJOURNAL</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_SUPER_JOURNAL</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_TEMP_DB</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_TEMP_JOURNAL</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_TRANSIENT_DB</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_URI</a></li>
+<li><a href='#SQLITE_OPEN_AUTOPROXY'>SQLITE_OPEN_WAL</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_PERM</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_PRAGMA</a></li>
+<li><a href='#sqlitepreparenormalize'>SQLITE_PREPARE_NORMALIZE</a></li>
+<li><a href='#sqlitepreparenovtab'>SQLITE_PREPARE_NO_VTAB</a></li>
+<li><a href='#sqlitepreparepersistent'>SQLITE_PREPARE_PERSISTENT</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_PROTOCOL</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_RANGE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_READ</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_READONLY</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_READONLY_CANTINIT</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_READONLY_CANTLOCK</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_READONLY_DBMOVED</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_READONLY_DIRECTORY</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_READONLY_RECOVERY</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_READONLY_ROLLBACK</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_RECURSIVE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_REINDEX</a></li>
+<li><a href='#SQLITE_FAIL'>SQLITE_REPLACE</a></li>
+<li><a href='#SQLITE_FAIL'>SQLITE_ROLLBACK</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_ROW</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_SAVEPOINT</a></li>
+<li><a href='#sqlitescanstatest'>SQLITE_SCANSTAT_EST</a></li>
+<li><a href='#sqlitescanstatexplain'>SQLITE_SCANSTAT_EXPLAIN</a></li>
+<li><a href='#sqlitescanstatname'>SQLITE_SCANSTAT_NAME</a></li>
+<li><a href='#sqlitescanstatnloop'>SQLITE_SCANSTAT_NLOOP</a></li>
+<li><a href='#sqlitescanstatnvisit'>SQLITE_SCANSTAT_NVISIT</a></li>
+<li><a href='#sqlitescanstatselectid'>SQLITE_SCANSTAT_SELECTID</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_SCHEMA</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_SELECT</a></li>
+<li><a href='#SQLITE_SERIALIZE_NOCOPY'>SQLITE_SERIALIZE_NOCOPY</a></li>
+<li><a href='#SQLITE_SHM_EXCLUSIVE'>SQLITE_SHM_EXCLUSIVE</a></li>
+<li><a href='#SQLITE_SHM_EXCLUSIVE'>SQLITE_SHM_LOCK</a></li>
+<li><a href='#SQLITE_SHM_NLOCK'>SQLITE_SHM_NLOCK</a></li>
+<li><a href='#SQLITE_SHM_EXCLUSIVE'>SQLITE_SHM_SHARED</a></li>
+<li><a href='#SQLITE_SHM_EXCLUSIVE'>SQLITE_SHM_UNLOCK</a></li>
+<li><a href='#SQLITE_SOURCE_ID'>SQLITE_SOURCE_ID</a></li>
+<li><a href='#SQLITE_STATIC'>SQLITE_STATIC</a></li>
+<li><a href='#sqlitestatusmalloccount'>SQLITE_STATUS_MALLOC_COUNT</a></li>
+<li><a href='#sqlitestatusmallocsize'>SQLITE_STATUS_MALLOC_SIZE</a></li>
+<li><a href='#sqlitestatusmemoryused'>SQLITE_STATUS_MEMORY_USED</a></li>
+<li><a href='#sqlitestatuspagecacheoverflow'>SQLITE_STATUS_PAGECACHE_OVERFLOW</a></li>
+<li><a href='#sqlitestatuspagecachesize'>SQLITE_STATUS_PAGECACHE_SIZE</a></li>
+<li><a href='#sqlitestatuspagecacheused'>SQLITE_STATUS_PAGECACHE_USED</a></li>
+<li><a href='#sqlitestatusparserstack'>SQLITE_STATUS_PARSER_STACK</a></li>
+<li><a href='#sqlitestatusscratchoverflow'>SQLITE_STATUS_SCRATCH_OVERFLOW</a></li>
+<li><a href='#sqlitestatusscratchsize'>SQLITE_STATUS_SCRATCH_SIZE</a></li>
+<li><a href='#sqlitestatusscratchused'>SQLITE_STATUS_SCRATCH_USED</a></li>
+<li><a href='#sqlitestmtstatusautoindex'>SQLITE_STMTSTATUS_AUTOINDEX</a></li>
+<li><a href='#SQLITE_STMTSTATUS counter'>SQLITE_STMTSTATUS_FILTER_HIT</a></li>
+<li><a href='#sqlitestmtstatusfiltermiss'>SQLITE_STMTSTATUS_FILTER_MISS</a></li>
+<li><a href='#sqlitestmtstatusfullscanstep'>SQLITE_STMTSTATUS_FULLSCAN_STEP</a></li>
+<li><a href='#sqlitestmtstatusmemused'>SQLITE_STMTSTATUS_MEMUSED</a></li>
+<li><a href='#sqlitestmtstatusreprepare'>SQLITE_STMTSTATUS_REPREPARE</a></li>
+<li><a href='#sqlitestmtstatusrun'>SQLITE_STMTSTATUS_RUN</a></li>
+<li><a href='#sqlitestmtstatussort'>SQLITE_STMTSTATUS_SORT</a></li>
+<li><a href='#sqlitestmtstatusvmstep'>SQLITE_STMTSTATUS_VM_STEP</a></li>
+<li><a href='#sqlitesubtype'>SQLITE_SUBTYPE</a></li>
+<li><a href='#SQLITE_SYNC_DATAONLY'>SQLITE_SYNC_DATAONLY</a></li>
+<li><a href='#SQLITE_SYNC_DATAONLY'>SQLITE_SYNC_FULL</a></li>
+<li><a href='#SQLITE_SYNC_DATAONLY'>SQLITE_SYNC_NORMAL</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_ALWAYS</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_ASSERT</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_BITVEC_TEST</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_BYTEORDER</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_EXPLAIN_STMT</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_FAULT_INSTALL</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_FIRST</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_IMPOSTER</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_INTERNAL_FUNCTIONS</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_ISINIT</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_ISKEYWORD</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_LAST</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_LOCALTIME_FAULT</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_LOGEST</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_NEVER_CORRUPT</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_OPTIMIZATIONS</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_PARSER_COVERAGE</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_PENDING_BYTE</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_PRNG_RESET</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_PRNG_RESTORE</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_PRNG_SAVE</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_PRNG_SEED</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_RESERVE</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_RESULT_INTREAL</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_SCRATCHMALLOC</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_SEEK_COUNT</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_SORTER_MMAP</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_TRACEFLAGS</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_TUNE</a></li>
+<li><a href='#SQLITE_TESTCTRL_ALWAYS'>SQLITE_TESTCTRL_VDBE_COVERAGE</a></li>
+<li><a href='#SQLITE_BLOB'>SQLITE_TEXT</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_TOOBIG</a></li>
+<li><a href='#SQLITE_TRACE'>SQLITE_TRACE</a></li>
+<li><a href='#sqlitetraceclose'>SQLITE_TRACE_CLOSE</a></li>
+<li><a href='#sqlitetraceprofile'>SQLITE_TRACE_PROFILE</a></li>
+<li><a href='#sqlitetracerow'>SQLITE_TRACE_ROW</a></li>
+<li><a href='#sqlitetracestmt'>SQLITE_TRACE_STMT</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_TRANSACTION</a></li>
+<li><a href='#SQLITE_STATIC'>SQLITE_TRANSIENT</a></li>
+<li><a href='#sqlitetxnnone'>SQLITE_TXN_NONE</a></li>
+<li><a href='#sqlitetxnread'>SQLITE_TXN_READ</a></li>
+<li><a href='#sqlitetxnwrite'>SQLITE_TXN_WRITE</a></li>
+<li><a href='#SQLITE_ALTER_TABLE'>SQLITE_UPDATE</a></li>
+<li><a href='#SQLITE_ANY'>SQLITE_UTF16</a></li>
+<li><a href='#SQLITE_ANY'>SQLITE_UTF16BE</a></li>
+<li><a href='#SQLITE_ANY'>SQLITE_UTF16LE</a></li>
+<li><a href='#SQLITE_ANY'>SQLITE_UTF16_ALIGNED</a></li>
+<li><a href='#SQLITE_ANY'>SQLITE_UTF8</a></li>
+<li><a href='#SQLITE_SOURCE_ID'>SQLITE_VERSION</a></li>
+<li><a href='#SQLITE_SOURCE_ID'>SQLITE_VERSION_NUMBER</a></li>
+<li><a href='#sqlitevtabconstraintsupport'>SQLITE_VTAB_CONSTRAINT_SUPPORT</a></li>
+<li><a href='#sqlitevtabdirectonly'>SQLITE_VTAB_DIRECTONLY</a></li>
+<li><a href='#sqlitevtabinnocuous'>SQLITE_VTAB_INNOCUOUS</a></li>
+<li><a href='#SQLITE_ABORT'>SQLITE_WARNING</a></li>
+<li><a href='#SQLITE_ABORT_ROLLBACK'>SQLITE_WARNING_AUTOINDEX</a></li>
+<li><a href='#SQLITE_WIN32_DATA_DIRECTORY_TYPE'>SQLITE_WIN32_DATA_DIRECTORY_TYPE</a></li>
+<li><a href='#SQLITE_WIN32_DATA_DIRECTORY_TYPE'>SQLITE_WIN32_TEMP_DIRECTORY_TYPE</a></li>
+</ul>
+</div>
+<hr>
+
+<h2>List Of Functions:</h2>
+<p>Note: Functions marked with "<small><i>(exp)</i></small>"
+are <a href="capi3ref.html">experimental</a> and functions whose names are
+<s>struck through</s> are <a href="capi3ref.html">deprecated</a>.</p>
+<!-- number of functions: 285 -->
+<!-- number of deprecated functions: 7 -->
+<!-- number of experimental functions: 0 -->
+<div class='columns' style='columns: 15em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3_aggregate_context'>sqlite3_aggregate_context</a></li>
+<li><s>sqlite3_aggregate_count</s></li>
+<li><a href='#sqlite3_auto_extension'>sqlite3_auto_extension</a></li>
+<li><a href='#sqlite3_autovacuum_pages'>sqlite3_autovacuum_pages</a></li>
+<li><a href='#sqlite3backupfinish'>sqlite3_backup_finish</a></li>
+<li><a href='#sqlite3backupinit'>sqlite3_backup_init</a></li>
+<li><a href='#sqlite3backuppagecount'>sqlite3_backup_pagecount</a></li>
+<li><a href='#sqlite3backupremaining'>sqlite3_backup_remaining</a></li>
+<li><a href='#sqlite3backupstep'>sqlite3_backup_step</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_blob</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_blob64</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_double</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_int</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_int64</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_null</a></li>
+<li><a href='#sqlite3_bind_parameter_count'>sqlite3_bind_parameter_count</a></li>
+<li><a href='#sqlite3_bind_parameter_index'>sqlite3_bind_parameter_index</a></li>
+<li><a href='#sqlite3_bind_parameter_name'>sqlite3_bind_parameter_name</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_pointer</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_text</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_text16</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_text64</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_value</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_zeroblob</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_zeroblob64</a></li>
+<li><a href='#sqlite3_blob_bytes'>sqlite3_blob_bytes</a></li>
+<li><a href='#sqlite3_blob_close'>sqlite3_blob_close</a></li>
+<li><a href='#sqlite3_blob_open'>sqlite3_blob_open</a></li>
+<li><a href='#sqlite3_blob_read'>sqlite3_blob_read</a></li>
+<li><a href='#sqlite3_blob_reopen'>sqlite3_blob_reopen</a></li>
+<li><a href='#sqlite3_blob_write'>sqlite3_blob_write</a></li>
+<li><a href='#sqlite3_busy_handler'>sqlite3_busy_handler</a></li>
+<li><a href='#sqlite3_busy_timeout'>sqlite3_busy_timeout</a></li>
+<li><a href='#sqlite3_cancel_auto_extension'>sqlite3_cancel_auto_extension</a></li>
+<li><a href='#sqlite3_changes'>sqlite3_changes</a></li>
+<li><a href='#sqlite3_changes'>sqlite3_changes64</a></li>
+<li><a href='#sqlite3_clear_bindings'>sqlite3_clear_bindings</a></li>
+<li><a href='#sqlite3_close'>sqlite3_close</a></li>
+<li><a href='#sqlite3_close'>sqlite3_close_v2</a></li>
+<li><a href='#sqlite3_collation_needed'>sqlite3_collation_needed</a></li>
+<li><a href='#sqlite3_collation_needed'>sqlite3_collation_needed16</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_blob</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_bytes</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_bytes16</a></li>
+<li><a href='#sqlite3_column_count'>sqlite3_column_count</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_database_name</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_database_name16</a></li>
+<li><a href='#sqlite3_column_decltype'>sqlite3_column_decltype</a></li>
+<li><a href='#sqlite3_column_decltype'>sqlite3_column_decltype16</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_double</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_int</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_int64</a></li>
+<li><a href='#sqlite3_column_name'>sqlite3_column_name</a></li>
+<li><a href='#sqlite3_column_name'>sqlite3_column_name16</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_origin_name</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_origin_name16</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_table_name</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_table_name16</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_text</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_text16</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_type</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_value</a></li>
+<li><a href='#sqlite3_commit_hook'>sqlite3_commit_hook</a></li>
+<li><a href='#sqlite3_compileoption_get'>sqlite3_compileoption_get</a></li>
+<li><a href='#sqlite3_compileoption_get'>sqlite3_compileoption_used</a></li>
+<li><a href='#sqlite3_complete'>sqlite3_complete</a></li>
+<li><a href='#sqlite3_complete'>sqlite3_complete16</a></li>
+<li><a href='#sqlite3_config'>sqlite3_config</a></li>
+<li><a href='#sqlite3_context_db_handle'>sqlite3_context_db_handle</a></li>
+<li><a href='#sqlite3_create_collation'>sqlite3_create_collation</a></li>
+<li><a href='#sqlite3_create_collation'>sqlite3_create_collation16</a></li>
+<li><a href='#sqlite3_create_collation'>sqlite3_create_collation_v2</a></li>
+<li><a href='#sqlite3_create_filename'>sqlite3_create_filename</a></li>
+<li><a href='#sqlite3_create_function'>sqlite3_create_function</a></li>
+<li><a href='#sqlite3_create_function'>sqlite3_create_function16</a></li>
+<li><a href='#sqlite3_create_function'>sqlite3_create_function_v2</a></li>
+<li><a href='#sqlite3_create_module'>sqlite3_create_module</a></li>
+<li><a href='#sqlite3_create_module'>sqlite3_create_module_v2</a></li>
+<li><a href='#sqlite3_create_function'>sqlite3_create_window_function</a></li>
+<li><a href='#sqlite3_data_count'>sqlite3_data_count</a></li>
+<li><a href='#sqlite3_database_file_object'>sqlite3_database_file_object</a></li>
+<li><a href='#sqlite3_db_cacheflush'>sqlite3_db_cacheflush</a></li>
+<li><a href='#sqlite3_db_config'>sqlite3_db_config</a></li>
+<li><a href='#sqlite3_db_filename'>sqlite3_db_filename</a></li>
+<li><a href='#sqlite3_db_handle'>sqlite3_db_handle</a></li>
+<li><a href='#sqlite3_db_mutex'>sqlite3_db_mutex</a></li>
+<li><a href='#sqlite3_db_name'>sqlite3_db_name</a></li>
+<li><a href='#sqlite3_db_readonly'>sqlite3_db_readonly</a></li>
+<li><a href='#sqlite3_db_release_memory'>sqlite3_db_release_memory</a></li>
+<li><a href='#sqlite3_db_status'>sqlite3_db_status</a></li>
+<li><a href='#sqlite3_declare_vtab'>sqlite3_declare_vtab</a></li>
+<li><a href='#sqlite3_deserialize'>sqlite3_deserialize</a></li>
+<li><a href='#sqlite3_drop_modules'>sqlite3_drop_modules</a></li>
+<li><a href='#sqlite3_enable_load_extension'>sqlite3_enable_load_extension</a></li>
+<li><a href='#sqlite3_enable_shared_cache'>sqlite3_enable_shared_cache</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_errcode</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_errmsg</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_errmsg16</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_error_offset</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_errstr</a></li>
+<li><a href='#sqlite3_exec'>sqlite3_exec</a></li>
+<li><a href='#sqlite3_expanded_sql'>sqlite3_expanded_sql</a></li>
+<li><s>sqlite3_expired</s></li>
+<li><a href='#sqlite3_errcode'>sqlite3_extended_errcode</a></li>
+<li><a href='#sqlite3_extended_result_codes'>sqlite3_extended_result_codes</a></li>
+<li><a href='#sqlite3_file_control'>sqlite3_file_control</a></li>
+<li><a href='#sqlite3_filename_database'>sqlite3_filename_database</a></li>
+<li><a href='#sqlite3_filename_database'>sqlite3_filename_journal</a></li>
+<li><a href='#sqlite3_filename_database'>sqlite3_filename_wal</a></li>
+<li><a href='#sqlite3_finalize'>sqlite3_finalize</a></li>
+<li><a href='#sqlite3_free'>sqlite3_free</a></li>
+<li><a href='#sqlite3_create_filename'>sqlite3_free_filename</a></li>
+<li><a href='#sqlite3_free_table'>sqlite3_free_table</a></li>
+<li><a href='#sqlite3_get_autocommit'>sqlite3_get_autocommit</a></li>
+<li><a href='#sqlite3_get_auxdata'>sqlite3_get_auxdata</a></li>
+<li><a href='#sqlite3_free_table'>sqlite3_get_table</a></li>
+<li><s>sqlite3_global_recover</s></li>
+<li><a href='#sqlite3_hard_heap_limit64'>sqlite3_hard_heap_limit64</a></li>
+<li><a href='#sqlite3_initialize'>sqlite3_initialize</a></li>
+<li><a href='#sqlite3_interrupt'>sqlite3_interrupt</a></li>
+<li><a href='#sqlite3_keyword_check'>sqlite3_keyword_check</a></li>
+<li><a href='#sqlite3_keyword_check'>sqlite3_keyword_count</a></li>
+<li><a href='#sqlite3_keyword_check'>sqlite3_keyword_name</a></li>
+<li><a href='#sqlite3_last_insert_rowid'>sqlite3_last_insert_rowid</a></li>
+<li><a href='#sqlite3_libversion'>sqlite3_libversion</a></li>
+<li><a href='#sqlite3_libversion'>sqlite3_libversion_number</a></li>
+<li><a href='#sqlite3_limit'>sqlite3_limit</a></li>
+<li><a href='#sqlite3_load_extension'>sqlite3_load_extension</a></li>
+<li><a href='#sqlite3_log'>sqlite3_log</a></li>
+<li><a href='#sqlite3_free'>sqlite3_malloc</a></li>
+<li><a href='#sqlite3_free'>sqlite3_malloc64</a></li>
+<li><s>sqlite3_memory_alarm</s></li>
+<li><a href='#sqlite3_memory_highwater'>sqlite3_memory_highwater</a></li>
+<li><a href='#sqlite3_memory_highwater'>sqlite3_memory_used</a></li>
+<li><a href='#sqlite3_mprintf'>sqlite3_mprintf</a></li>
+<li><a href='#sqlite3_free'>sqlite3_msize</a></li>
+<li><a href='#sqlite3_mutex_alloc'>sqlite3_mutex_alloc</a></li>
+<li><a href='#sqlite3_mutex_alloc'>sqlite3_mutex_enter</a></li>
+<li><a href='#sqlite3_mutex_alloc'>sqlite3_mutex_free</a></li>
+<li><a href='#sqlite3_mutex_held'>sqlite3_mutex_held</a></li>
+<li><a href='#sqlite3_mutex_alloc'>sqlite3_mutex_leave</a></li>
+<li><a href='#sqlite3_mutex_held'>sqlite3_mutex_notheld</a></li>
+<li><a href='#sqlite3_mutex_alloc'>sqlite3_mutex_try</a></li>
+<li><a href='#sqlite3_next_stmt'>sqlite3_next_stmt</a></li>
+<li><a href='#sqlite3_expanded_sql'>sqlite3_normalized_sql</a></li>
+<li><a href='#sqlite3_open'>sqlite3_open</a></li>
+<li><a href='#sqlite3_open'>sqlite3_open16</a></li>
+<li><a href='#sqlite3_open'>sqlite3_open_v2</a></li>
+<li><a href='#sqlite3_initialize'>sqlite3_os_end</a></li>
+<li><a href='#sqlite3_initialize'>sqlite3_os_init</a></li>
+<li><a href='#sqlite3_overload_function'>sqlite3_overload_function</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare16</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare16_v2</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare16_v3</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare_v2</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare_v3</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_blobwrite</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_count</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_depth</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_hook</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_new</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_old</a></li>
+<li><a href='#sqlite3_profile'>sqlite3_profile</a></li>
+<li><a href='#sqlite3_progress_handler'>sqlite3_progress_handler</a></li>
+<li><a href='#sqlite3_randomness'>sqlite3_randomness</a></li>
+<li><a href='#sqlite3_free'>sqlite3_realloc</a></li>
+<li><a href='#sqlite3_free'>sqlite3_realloc64</a></li>
+<li><a href='#sqlite3_release_memory'>sqlite3_release_memory</a></li>
+<li><a href='#sqlite3_reset'>sqlite3_reset</a></li>
+<li><a href='#sqlite3_reset_auto_extension'>sqlite3_reset_auto_extension</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_blob</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_blob64</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_double</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_error</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_error16</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_error_code</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_error_nomem</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_error_toobig</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_int</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_int64</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_null</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_pointer</a></li>
+<li><a href='#sqlite3_result_subtype'>sqlite3_result_subtype</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_text</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_text16</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_text16be</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_text16le</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_text64</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_value</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_zeroblob</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_zeroblob64</a></li>
+<li><a href='#sqlite3_commit_hook'>sqlite3_rollback_hook</a></li>
+<li><a href='#sqlite3_serialize'>sqlite3_serialize</a></li>
+<li><a href='#sqlite3_set_authorizer'>sqlite3_set_authorizer</a></li>
+<li><a href='#sqlite3_get_auxdata'>sqlite3_set_auxdata</a></li>
+<li><a href='#sqlite3_set_last_insert_rowid'>sqlite3_set_last_insert_rowid</a></li>
+<li><a href='#sqlite3_initialize'>sqlite3_shutdown</a></li>
+<li><a href='#sqlite3_sleep'>sqlite3_sleep</a></li>
+<li><a href='#sqlite3_snapshot_cmp'>sqlite3_snapshot_cmp</a></li>
+<li><a href='#sqlite3_snapshot_free'>sqlite3_snapshot_free</a></li>
+<li><a href='#sqlite3_snapshot_get'>sqlite3_snapshot_get</a></li>
+<li><a href='#sqlite3_snapshot_open'>sqlite3_snapshot_open</a></li>
+<li><a href='#sqlite3_snapshot_recover'>sqlite3_snapshot_recover</a></li>
+<li><a href='#sqlite3_mprintf'>sqlite3_snprintf</a></li>
+<li><s>sqlite3_soft_heap_limit</s></li>
+<li><a href='#sqlite3_hard_heap_limit64'>sqlite3_soft_heap_limit64</a></li>
+<li><a href='#sqlite3_libversion'>sqlite3_sourceid</a></li>
+<li><a href='#sqlite3_expanded_sql'>sqlite3_sql</a></li>
+<li><a href='#sqlite3_status'>sqlite3_status</a></li>
+<li><a href='#sqlite3_status'>sqlite3_status64</a></li>
+<li><a href='#sqlite3_step'>sqlite3_step</a></li>
+<li><a href='#sqlite3_stmt_busy'>sqlite3_stmt_busy</a></li>
+<li><a href='#sqlite3_stmt_isexplain'>sqlite3_stmt_isexplain</a></li>
+<li><a href='#sqlite3_stmt_readonly'>sqlite3_stmt_readonly</a></li>
+<li><a href='#sqlite3_stmt_scanstatus'>sqlite3_stmt_scanstatus</a></li>
+<li><a href='#sqlite3_stmt_scanstatus_reset'>sqlite3_stmt_scanstatus_reset</a></li>
+<li><a href='#sqlite3_stmt_status'>sqlite3_stmt_status</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_append</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_appendall</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_appendchar</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_appendf</a></li>
+<li><a href='#sqlite3_str_errcode'>sqlite3_str_errcode</a></li>
+<li><a href='#sqlite3_str_finish'>sqlite3_str_finish</a></li>
+<li><a href='#sqlite3_str_errcode'>sqlite3_str_length</a></li>
+<li><a href='#sqlite3_str_new'>sqlite3_str_new</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_reset</a></li>
+<li><a href='#sqlite3_str_errcode'>sqlite3_str_value</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_vappendf</a></li>
+<li><a href='#sqlite3_strglob'>sqlite3_strglob</a></li>
+<li><a href='#sqlite3_stricmp'>sqlite3_stricmp</a></li>
+<li><a href='#sqlite3_strlike'>sqlite3_strlike</a></li>
+<li><a href='#sqlite3_stricmp'>sqlite3_strnicmp</a></li>
+<li><a href='#sqlite3_system_errno'>sqlite3_system_errno</a></li>
+<li><a href='#sqlite3_table_column_metadata'>sqlite3_table_column_metadata</a></li>
+<li><a href='#sqlite3_test_control'>sqlite3_test_control</a></li>
+<li><s>sqlite3_thread_cleanup</s></li>
+<li><a href='#sqlite3_threadsafe'>sqlite3_threadsafe</a></li>
+<li><a href='#sqlite3_total_changes'>sqlite3_total_changes</a></li>
+<li><a href='#sqlite3_total_changes'>sqlite3_total_changes64</a></li>
+<li><a href='#sqlite3_profile'>sqlite3_trace</a></li>
+<li><a href='#sqlite3_trace_v2'>sqlite3_trace_v2</a></li>
+<li><s>sqlite3_transfer_bindings</s></li>
+<li><a href='#sqlite3_txn_state'>sqlite3_txn_state</a></li>
+<li><a href='#sqlite3_unlock_notify'>sqlite3_unlock_notify</a></li>
+<li><a href='#sqlite3_update_hook'>sqlite3_update_hook</a></li>
+<li><a href='#sqlite3_uri_boolean'>sqlite3_uri_boolean</a></li>
+<li><a href='#sqlite3_uri_boolean'>sqlite3_uri_int64</a></li>
+<li><a href='#sqlite3_uri_boolean'>sqlite3_uri_key</a></li>
+<li><a href='#sqlite3_uri_boolean'>sqlite3_uri_parameter</a></li>
+<li><a href='#sqlite3_user_data'>sqlite3_user_data</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_blob</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_bytes</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_bytes16</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_double</a></li>
+<li><a href='#sqlite3_value_dup'>sqlite3_value_dup</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_encoding</a></li>
+<li><a href='#sqlite3_value_dup'>sqlite3_value_free</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_frombind</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_int</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_int64</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_nochange</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_numeric_type</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_pointer</a></li>
+<li><a href='#sqlite3_value_subtype'>sqlite3_value_subtype</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_text</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_text16</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_text16be</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_text16le</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_type</a></li>
+<li><a href='#sqlite3_libversion'>sqlite3_version</a></li>
+<li><a href='#sqlite3_vfs_find'>sqlite3_vfs_find</a></li>
+<li><a href='#sqlite3_vfs_find'>sqlite3_vfs_register</a></li>
+<li><a href='#sqlite3_vfs_find'>sqlite3_vfs_unregister</a></li>
+<li><a href='#sqlite3_mprintf'>sqlite3_vmprintf</a></li>
+<li><a href='#sqlite3_mprintf'>sqlite3_vsnprintf</a></li>
+<li><a href='#sqlite3_vtab_collation'>sqlite3_vtab_collation</a></li>
+<li><a href='#sqlite3_vtab_config'>sqlite3_vtab_config</a></li>
+<li><a href='#sqlite3_vtab_distinct'>sqlite3_vtab_distinct</a></li>
+<li><a href='#sqlite3_vtab_in'>sqlite3_vtab_in</a></li>
+<li><a href='#sqlite3_vtab_in_first'>sqlite3_vtab_in_first</a></li>
+<li><a href='#sqlite3_vtab_in_first'>sqlite3_vtab_in_next</a></li>
+<li><a href='#sqlite3_vtab_nochange'>sqlite3_vtab_nochange</a></li>
+<li><a href='#sqlite3_vtab_on_conflict'>sqlite3_vtab_on_conflict</a></li>
+<li><a href='#sqlite3_vtab_rhs_value'>sqlite3_vtab_rhs_value</a></li>
+<li><a href='#sqlite3_wal_autocheckpoint'>sqlite3_wal_autocheckpoint</a></li>
+<li><a href='#sqlite3_wal_checkpoint'>sqlite3_wal_checkpoint</a></li>
+<li><a href='#sqlite3_wal_checkpoint_v2'>sqlite3_wal_checkpoint_v2</a></li>
+<li><a href='#sqlite3_wal_hook'>sqlite3_wal_hook</a></li>
+<li><a href='#sqlite3_win32_set_directory'>sqlite3_win32_set_directory</a></li>
+<li><a href='#sqlite3_win32_set_directory'>sqlite3_win32_set_directory16</a></li>
+<li><a href='#sqlite3_win32_set_directory'>sqlite3_win32_set_directory8</a></li>
+</ul>
+</div>
+<hr>
+<a name="SQLITE_INDEX_SCAN_UNIQUE"></a>
+<h2>Virtual Table Scan Flags</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_INDEX_SCAN_UNIQUE 1 /* Scan visits at most 1 row */
+</pre></blockquote>
+<p>
+Virtual table implementations are allowed to set the
+<a href="#sqlite3_index_info">sqlite3_index_info</a>.idxFlags field to some combination of
+these bits.
+</p><hr><a name="SQLITE_SERIALIZE_NOCOPY"></a>
+<h2>Flags for sqlite3_serialize</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SERIALIZE_NOCOPY 0x001 /* Do no memory allocations */
+</pre></blockquote>
+<p>
+Zero or more of the following constants can be OR-ed together for
+the F argument to <a href="#sqlite3_serialize">sqlite3_serialize(D,S,P,F)</a>.</p>
+
+<p>SQLITE_SERIALIZE_NOCOPY means that <a href="#sqlite3_serialize">sqlite3_serialize()</a> will return
+a pointer to contiguous in-memory database that it is currently using,
+without making a copy of the database. If SQLite is not currently using
+a contiguous in-memory database, then this option causes
+<a href="#sqlite3_serialize">sqlite3_serialize()</a> to return a NULL pointer. SQLite will only be
+using a contiguous in-memory database if it has been initialized by a
+prior call to <a href="#sqlite3_deserialize">sqlite3_deserialize()</a>.
+</p><hr><a name="SQLITE_SHM_NLOCK"></a>
+<h2>Maximum xShmLock index</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SHM_NLOCK 8
+</pre></blockquote>
+<p>
+The xShmLock method on <a href="#sqlite3_io_methods">sqlite3_io_methods</a> may use values
+between 0 and this upper bound as its "offset" argument.
+The SQLite core will never attempt to acquire or release a
+lock outside of this range
+</p><hr><a name="sqlite3_api_routines"></a>
+<h2>Loadable Extension Thunk</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_api_routines sqlite3_api_routines;
+</pre></blockquote>
+<p>
+A pointer to the opaque sqlite3_api_routines structure is passed as
+the third parameter to entry points of <a href="loadext.html">loadable extensions</a>. This
+structure must be typedefed in order to work around compiler warnings
+on some platforms.
+</p><hr><a name="sqlite3_backup"></a>
+<h2>Online Backup Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_backup sqlite3_backup;
+</pre></blockquote>
+<p>
+The sqlite3_backup object records state information about an ongoing
+online backup operation. The sqlite3_backup object is created by
+a call to <a href="#sqlite3backupinit">sqlite3_backup_init()</a> and is destroyed by a call to
+<a href="#sqlite3backupfinish">sqlite3_backup_finish()</a>.</p>
+
+<p>See Also: <a href="backup.html">Using the SQLite Online Backup API</a>
+</p><hr><a name="sqlite3_context"></a>
+<h2>SQL Function Context Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_context sqlite3_context;
+</pre></blockquote>
+<p>
+The context in which an SQL function executes is stored in an
+sqlite3_context object. A pointer to an sqlite3_context object
+is always first parameter to <a href="appfunc.html">application-defined SQL functions</a>.
+The application-defined SQL function implementation will pass this
+pointer through into calls to <a href="#sqlite3_result_blob">sqlite3_result()</a>,
+<a href="#sqlite3_aggregate_context">sqlite3_aggregate_context()</a>, <a href="#sqlite3_user_data">sqlite3_user_data()</a>,
+<a href="#sqlite3_context_db_handle">sqlite3_context_db_handle()</a>, <a href="#sqlite3_get_auxdata">sqlite3_get_auxdata()</a>,
+and/or <a href="#sqlite3_get_auxdata">sqlite3_set_auxdata()</a>.
+</p><p>26 Methods:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3_aggregate_context'>sqlite3_aggregate_context</a></li>
+<li><a href='#sqlite3_context_db_handle'>sqlite3_context_db_handle</a></li>
+<li><a href='#sqlite3_get_auxdata'>sqlite3_get_auxdata</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_blob</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_blob64</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_double</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_error</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_error16</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_error_code</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_error_nomem</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_error_toobig</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_int</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_int64</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_null</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_pointer</a></li>
+<li><a href='#sqlite3_result_subtype'>sqlite3_result_subtype</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_text</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_text16</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_text16be</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_text16le</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_text64</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_value</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_zeroblob</a></li>
+<li><a href='#sqlite3_result_blob'>sqlite3_result_zeroblob64</a></li>
+<li><a href='#sqlite3_get_auxdata'>sqlite3_set_auxdata</a></li>
+<li><a href='#sqlite3_user_data'>sqlite3_user_data</a></li>
+</ul>
+</div>
+</p>
+<hr><a name="sqlite3_data_directory"></a>
+<h2>Name Of The Folder Holding Database Files</h2>
+</div>
+<blockquote><pre>
+SQLITE_EXTERN char *sqlite3_data_directory;
+</pre></blockquote>
+<p>
+If this global variable is made to point to a string which is
+the name of a folder (a.k.a. directory), then all database files
+specified with a relative pathname and created or accessed by
+SQLite when using a built-in windows <a href="#sqlite3_vfs">VFS</a> will be assumed
+to be relative to that directory. If this variable is a NULL
+pointer, then SQLite assumes that all database files specified
+with a relative pathname are relative to the current directory
+for the process. Only the windows VFS makes use of this global
+variable; it is ignored by the unix VFS.</p>
+
+<p>Changing the value of this variable while a database connection is
+open can result in a corrupt database.</p>
+
+<p>It is not safe to read or modify this variable in more than one
+thread at a time. It is not safe to read or modify this variable
+if a <a href="#sqlite3">database connection</a> is being used at the same time in a separate
+thread.
+It is intended that this variable be set once
+as part of process initialization and before any SQLite interface
+routines have been called and that this variable remain unchanged
+thereafter.</p>
+
+<p>The <a href="pragma.html#pragma_data_store_directory">data_store_directory pragma</a> may modify this variable and cause
+it to point to memory obtained from <a href="#sqlite3_free">sqlite3_malloc</a>. Furthermore,
+the <a href="pragma.html#pragma_data_store_directory">data_store_directory pragma</a> always assumes that any string
+that this variable points to is held in memory obtained from
+<a href="#sqlite3_free">sqlite3_malloc</a> and the pragma may attempt to free that memory
+using <a href="#sqlite3_free">sqlite3_free</a>.
+Hence, if this variable is modified directly, either it should be
+made NULL or made to point to memory obtained from <a href="#sqlite3_free">sqlite3_malloc</a>
+or else the use of the <a href="pragma.html#pragma_data_store_directory">data_store_directory pragma</a> should be avoided.
+</p><hr><a name="sqlite3_file"></a>
+<h2>OS Interface Open File Handle</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_file sqlite3_file;
+struct sqlite3_file {
+ const struct sqlite3_io_methods *pMethods; /* Methods for an open file */
+};
+</pre></blockquote>
+<p>
+An <a href="#sqlite3_file">sqlite3_file</a> object represents an open file in the
+<a href="#sqlite3_vfs">OS interface layer</a>. Individual OS interface
+implementations will
+want to subclass this object by appending additional fields
+for their own use. The pMethods entry is a pointer to an
+<a href="#sqlite3_io_methods">sqlite3_io_methods</a> object that defines methods for performing
+I/O operations on the open file.
+</p><hr><a name="sqlite3_filename"></a>
+<h2>File Name</h2>
+</div>
+<blockquote><pre>
+typedef const char *sqlite3_filename;
+</pre></blockquote>
+<p>
+Type <a href="#sqlite3_filename">sqlite3_filename</a> is used by SQLite to pass filenames to the
+xOpen method of a <a href="vfs.html">VFS</a>. It may be cast to (const char*) and treated
+as a normal, nul-terminated, UTF-8 buffer containing the filename, but
+may also be passed to special APIs such as:</p>
+
+<p><ul>
+<li> sqlite3_filename_database()
+<li> sqlite3_filename_journal()
+<li> sqlite3_filename_wal()
+<li> sqlite3_uri_parameter()
+<li> sqlite3_uri_boolean()
+<li> sqlite3_uri_int64()
+<li> sqlite3_uri_key()
+</ul>
+</p><hr><a name="sqlite3_index_info"></a>
+<h2>Virtual Table Indexing Information</h2>
+</div>
+<blockquote><pre>
+struct sqlite3_index_info {
+ /* Inputs */
+ int nConstraint; /* Number of entries in aConstraint */
+ struct sqlite3_index_constraint {
+ int iColumn; /* Column constrained. -1 for ROWID */
+ unsigned char op; /* Constraint operator */
+ unsigned char usable; /* True if this constraint is usable */
+ int iTermOffset; /* Used internally - xBestIndex should ignore */
+ } *aConstraint; /* Table of WHERE clause constraints */
+ int nOrderBy; /* Number of terms in the ORDER BY clause */
+ struct sqlite3_index_orderby {
+ int iColumn; /* Column number */
+ unsigned char desc; /* True for DESC. False for ASC. */
+ } *aOrderBy; /* The ORDER BY clause */
+ /* Outputs */
+ struct sqlite3_index_constraint_usage {
+ int argvIndex; /* if &gt;0, constraint is part of argv to xFilter */
+ unsigned char omit; /* Do not code a test for this constraint */
+ } *aConstraintUsage;
+ int idxNum; /* Number used to identify the index */
+ char *idxStr; /* String, possibly obtained from sqlite3_malloc */
+ int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */
+ int orderByConsumed; /* True if output is already ordered */
+ double estimatedCost; /* Estimated cost of using this index */
+ /* Fields below are only available in SQLite 3.8.2 and later */
+ sqlite3_int64 estimatedRows; /* Estimated number of rows returned */
+ /* Fields below are only available in SQLite 3.9.0 and later */
+ int idxFlags; /* Mask of SQLITE_INDEX_SCAN_* flags */
+ /* Fields below are only available in SQLite 3.10.0 and later */
+ sqlite3_uint64 colUsed; /* Input: Mask of columns used by statement */
+};
+</pre></blockquote>
+<p>
+The sqlite3_index_info structure and its substructures is used as part
+of the <a href="vtab.html">virtual table</a> interface to
+pass information into and receive the reply from the <a href="vtab.html#xbestindex">xBestIndex</a>
+method of a <a href="#sqlite3_module">virtual table module</a>. The fields under **Inputs** are the
+inputs to xBestIndex and are read-only. xBestIndex inserts its
+results into the **Outputs** fields.</p>
+
+<p>The aConstraint[] array records WHERE clause constraints of the form:</p>
+
+<p><blockquote>column OP expr</blockquote></p>
+
+<p>where OP is =, &lt;, &lt;=, &gt;, or &gt;=. The particular operator is
+stored in aConstraint[].op using one of the
+<a href="#SQLITE_INDEX_CONSTRAINT_EQ">SQLITE_INDEX_CONSTRAINT_ values</a>.
+The index of the column is stored in
+aConstraint[].iColumn. aConstraint[].usable is TRUE if the
+expr on the right-hand side can be evaluated (and thus the constraint
+is usable) and false if it cannot.</p>
+
+<p>The optimizer automatically inverts terms of the form "expr OP column"
+and makes other simplifications to the WHERE clause in an attempt to
+get as many WHERE clause terms into the form shown above as possible.
+The aConstraint[] array only reports WHERE clause terms that are
+relevant to the particular virtual table being queried.</p>
+
+<p>Information about the ORDER BY clause is stored in aOrderBy[].
+Each term of aOrderBy records a column of the ORDER BY clause.</p>
+
+<p>The colUsed field indicates which columns of the virtual table may be
+required by the current scan. Virtual table columns are numbered from
+zero in the order in which they appear within the CREATE TABLE statement
+passed to sqlite3_declare_vtab(). For the first 63 columns (columns 0-62),
+the corresponding bit is set within the colUsed mask if the column may be
+required by SQLite. If the table has at least 64 columns and any column
+to the right of the first 63 is required, then bit 63 of colUsed is also
+set. In other words, column iCol may be required if the expression
+(colUsed & ((sqlite3_uint64)1 << (iCol>=63 ? 63 : iCol))) evaluates to
+non-zero.</p>
+
+<p>The <a href="vtab.html#xbestindex">xBestIndex</a> method must fill aConstraintUsage[] with information
+about what parameters to pass to xFilter. If argvIndex>0 then
+the right-hand side of the corresponding aConstraint[] is evaluated
+and becomes the argvIndex-th entry in argv. If aConstraintUsage[].omit
+is true, then the constraint is assumed to be fully handled by the
+virtual table and might not be checked again by the byte code. The
+aConstraintUsage[].omit flag is an optimization hint. When the omit flag
+is left in its default setting of false, the constraint will always be
+checked separately in byte code. If the omit flag is change to true, then
+the constraint may or may not be checked in byte code. In other words,
+when the omit flag is true there is no guarantee that the constraint will
+not be checked again using byte code.</p>
+
+<p>The idxNum and idxPtr values are recorded and passed into the
+<a href="vtab.html#xfilter">xFilter</a> method.
+<a href="#sqlite3_free">sqlite3_free()</a> is used to free idxPtr if and only if
+needToFreeIdxPtr is true.</p>
+
+<p>The orderByConsumed means that output from <a href="vtab.html#xfilter">xFilter</a>/<a href="vtab.html#xnext">xNext</a> will occur in
+the correct order to satisfy the ORDER BY clause so that no separate
+sorting step is required.</p>
+
+<p>The estimatedCost value is an estimate of the cost of a particular
+strategy. A cost of N indicates that the cost of the strategy is similar
+to a linear scan of an SQLite table with N rows. A cost of log(N)
+indicates that the expense of the operation is similar to that of a
+binary search on a unique indexed field of an SQLite table with N rows.</p>
+
+<p>The estimatedRows value is an estimate of the number of rows that
+will be returned by the strategy.</p>
+
+<p>The xBestIndex method may optionally populate the idxFlags field with a
+mask of SQLITE_INDEX_SCAN_* flags. Currently there is only one such flag -
+SQLITE_INDEX_SCAN_UNIQUE. If the xBestIndex method sets this flag, SQLite
+assumes that the strategy may visit at most one row.</p>
+
+<p>Additionally, if xBestIndex sets the SQLITE_INDEX_SCAN_UNIQUE flag, then
+SQLite also assumes that if a call to the xUpdate() method is made as
+part of the same statement to delete or update a virtual table row and the
+implementation returns SQLITE_CONSTRAINT, then there is no need to rollback
+any database changes. In other words, if the xUpdate() returns
+SQLITE_CONSTRAINT, the database contents must be exactly as they were
+before xUpdate was called. By contrast, if SQLITE_INDEX_SCAN_UNIQUE is not
+set and xUpdate returns SQLITE_CONSTRAINT, any database changes made by
+the xUpdate method are automatically rolled back by SQLite.</p>
+
+<p>IMPORTANT: The estimatedRows field was added to the sqlite3_index_info
+structure for SQLite <a href="releaselog/3_8_2.html">version 3.8.2</a> (2013-12-06).
+If a virtual table extension is
+used with an SQLite version earlier than 3.8.2, the results of attempting
+to read or write the estimatedRows field are undefined (but are likely
+to include crashing the application). The estimatedRows field should
+therefore only be used if <a href="#sqlite3_libversion">sqlite3_libversion_number()</a> returns a
+value greater than or equal to 3008002. Similarly, the idxFlags field
+was added for <a href="releaselog/3_9_0.html">version 3.9.0</a> (2015-10-14).
+It may therefore only be used if
+sqlite3_libversion_number() returns a value greater than or equal to
+3009000.
+</p><p>3 Methods:
+ <a href="#sqlite3_vtab_collation">sqlite3_vtab_collation()</a>,
+<a href="#sqlite3_vtab_distinct">sqlite3_vtab_distinct()</a>,
+<a href="#sqlite3_vtab_rhs_value">sqlite3_vtab_rhs_value()</a></p>
+<hr><a name="sqlite3_io_methods"></a>
+<h2>OS Interface File Virtual Methods Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_io_methods sqlite3_io_methods;
+struct sqlite3_io_methods {
+ int iVersion;
+ int (*xClose)(sqlite3_file*);
+ int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
+ int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst);
+ int (*xTruncate)(sqlite3_file*, sqlite3_int64 size);
+ int (*xSync)(sqlite3_file*, int flags);
+ int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize);
+ int (*xLock)(sqlite3_file*, int);
+ int (*xUnlock)(sqlite3_file*, int);
+ int (*xCheckReservedLock)(sqlite3_file*, int *pResOut);
+ int (*xFileControl)(sqlite3_file*, int op, void *pArg);
+ int (*xSectorSize)(sqlite3_file*);
+ int (*xDeviceCharacteristics)(sqlite3_file*);
+ /* Methods above are valid for version 1 */
+ int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**);
+ int (*xShmLock)(sqlite3_file*, int offset, int n, int flags);
+ void (*xShmBarrier)(sqlite3_file*);
+ int (*xShmUnmap)(sqlite3_file*, int deleteFlag);
+ /* Methods above are valid for version 2 */
+ int (*xFetch)(sqlite3_file*, sqlite3_int64 iOfst, int iAmt, void **pp);
+ int (*xUnfetch)(sqlite3_file*, sqlite3_int64 iOfst, void *p);
+ /* Methods above are valid for version 3 */
+ /* Additional methods may be added in future releases */
+};
+</pre></blockquote>
+<p>
+Every file opened by the <a href="#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> method populates an
+<a href="#sqlite3_file">sqlite3_file</a> object (or, more commonly, a subclass of the
+<a href="#sqlite3_file">sqlite3_file</a> object) with a pointer to an instance of this object.
+This object defines the methods used to perform various operations
+against the open file represented by the <a href="#sqlite3_file">sqlite3_file</a> object.</p>
+
+<p>If the <a href="#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> method sets the sqlite3_file.pMethods element
+to a non-NULL pointer, then the sqlite3_io_methods.xClose method
+may be invoked even if the <a href="#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> reported that it failed. The
+only way to prevent a call to xClose following a failed <a href="#sqlite3vfsxopen">sqlite3_vfs.xOpen</a>
+is for the <a href="#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> to set the sqlite3_file.pMethods element
+to NULL.</p>
+
+<p>The flags argument to xSync may be one of <a href="#SQLITE_SYNC_DATAONLY">SQLITE_SYNC_NORMAL</a> or
+<a href="#SQLITE_SYNC_DATAONLY">SQLITE_SYNC_FULL</a>. The first choice is the normal fsync().
+The second choice is a Mac OS X style fullsync. The <a href="#SQLITE_SYNC_DATAONLY">SQLITE_SYNC_DATAONLY</a>
+flag may be ORed in to indicate that only the data of the file
+and not its inode needs to be synced.</p>
+
+<p>The integer values to xLock() and xUnlock() are one of
+<ul>
+<li> <a href="#SQLITE_LOCK_EXCLUSIVE">SQLITE_LOCK_NONE</a>,
+<li> <a href="#SQLITE_LOCK_EXCLUSIVE">SQLITE_LOCK_SHARED</a>,
+<li> <a href="#SQLITE_LOCK_EXCLUSIVE">SQLITE_LOCK_RESERVED</a>,
+<li> <a href="#SQLITE_LOCK_EXCLUSIVE">SQLITE_LOCK_PENDING</a>, or
+<li> <a href="#SQLITE_LOCK_EXCLUSIVE">SQLITE_LOCK_EXCLUSIVE</a>.
+</ul>
+xLock() upgrades the database file lock. In other words, xLock() moves the
+database file lock in the direction NONE toward EXCLUSIVE. The argument to
+xLock() is always on of SHARED, RESERVED, PENDING, or EXCLUSIVE, never
+SQLITE_LOCK_NONE. If the database file lock is already at or above the
+requested lock, then the call to xLock() is a no-op.
+xUnlock() downgrades the database file lock to either SHARED or NONE.
+to xUnlock() is a no-op.
+The xCheckReservedLock() method checks whether any database connection,
+either in this process or in some other process, is holding a RESERVED,
+PENDING, or EXCLUSIVE lock on the file. It returns true
+if such a lock exists and false otherwise.</p>
+
+<p>The xFileControl() method is a generic interface that allows custom
+VFS implementations to directly control an open file using the
+<a href="#sqlite3_file_control">sqlite3_file_control()</a> interface. The second "op" argument is an
+integer opcode. The third argument is a generic pointer intended to
+point to a structure that may contain arguments or space in which to
+write return values. Potential uses for xFileControl() might be
+functions to enable blocking locks with timeouts, to change the
+locking strategy (for example to use dot-file locks), to inquire
+about the status of a lock, or to break stale locks. The SQLite
+core reserves all opcodes less than 100 for its own use.
+A <a href="#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE">list of opcodes</a> less than 100 is available.
+Applications that define a custom xFileControl method should use opcodes
+greater than 100 to avoid conflicts. VFS implementations should
+return <a href="#SQLITE_ABORT">SQLITE_NOTFOUND</a> for file control opcodes that they do not
+recognize.</p>
+
+<p>The xSectorSize() method returns the sector size of the
+device that underlies the file. The sector size is the
+minimum write that can be performed without disturbing
+other bytes in the file. The xDeviceCharacteristics()
+method returns a bit vector describing behaviors of the
+underlying device:</p>
+
+<p><ul>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_ATOMIC</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_ATOMIC512</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_ATOMIC1K</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_ATOMIC2K</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_ATOMIC4K</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_ATOMIC8K</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_ATOMIC16K</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_ATOMIC32K</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_ATOMIC64K</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_SAFE_APPEND</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_SEQUENTIAL</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_IMMUTABLE</a>
+<li> <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_BATCH_ATOMIC</a>
+</ul></p>
+
+<p>The SQLITE_IOCAP_ATOMIC property means that all writes of
+any size are atomic. The SQLITE_IOCAP_ATOMICnnn values
+mean that writes of blocks that are nnn bytes in size and
+are aligned to an address which is an integer multiple of
+nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means
+that when data is appended to a file, the data is appended
+first then the size of the file is extended, never the other
+way around. The SQLITE_IOCAP_SEQUENTIAL property means that
+information is written to disk in the same order as calls
+to xWrite().</p>
+
+<p>If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill
+in the unread portions of the buffer with zeros. A VFS that
+fails to zero-fill short reads might seem to work. However,
+failure to zero-fill short reads will eventually lead to
+database corruption.
+</p><hr><a name="sqlite3_mem_methods"></a>
+<h2>Memory Allocation Routines</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_mem_methods sqlite3_mem_methods;
+struct sqlite3_mem_methods {
+ void *(*xMalloc)(int); /* Memory allocation function */
+ void (*xFree)(void*); /* Free a prior allocation */
+ void *(*xRealloc)(void*,int); /* Resize an allocation */
+ int (*xSize)(void*); /* Return the size of an allocation */
+ int (*xRoundup)(int); /* Round up request size to allocation size */
+ int (*xInit)(void*); /* Initialize the memory allocator */
+ void (*xShutdown)(void*); /* Deinitialize the memory allocator */
+ void *pAppData; /* Argument to xInit() and xShutdown() */
+};
+</pre></blockquote>
+<p>
+An instance of this object defines the interface between SQLite
+and low-level memory allocation routines.</p>
+
+<p>This object is used in only one place in the SQLite interface.
+A pointer to an instance of this object is the argument to
+<a href="#sqlite3_config">sqlite3_config()</a> when the configuration option is
+<a href="#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a> or <a href="#sqliteconfiggetmalloc">SQLITE_CONFIG_GETMALLOC</a>.
+By creating an instance of this object
+and passing it to <a href="#sqlite3_config">sqlite3_config</a>(<a href="#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a>)
+during configuration, an application can specify an alternative
+memory allocation subsystem for SQLite to use for all of its
+dynamic memory needs.</p>
+
+<p>Note that SQLite comes with several <a href="malloc.html#altalloc">built-in memory allocators</a>
+that are perfectly adequate for the overwhelming majority of applications
+and that this object is only useful to a tiny minority of applications
+with specialized memory allocation requirements. This object is
+also used during testing of SQLite in order to specify an alternative
+memory allocator that simulates memory out-of-memory conditions in
+order to verify that SQLite recovers gracefully from such
+conditions.</p>
+
+<p>The xMalloc, xRealloc, and xFree methods must work like the
+malloc(), realloc() and free() functions from the standard C library.
+SQLite guarantees that the second argument to
+xRealloc is always a value returned by a prior call to xRoundup.</p>
+
+<p>xSize should return the allocated size of a memory allocation
+previously obtained from xMalloc or xRealloc. The allocated size
+is always at least as big as the requested size but may be larger.</p>
+
+<p>The xRoundup method returns what would be the allocated size of
+a memory allocation given a particular requested size. Most memory
+allocators round up memory allocations at least to the next multiple
+of 8. Some allocators round up to a larger multiple or to a power of 2.
+Every memory allocation request coming in through <a href="#sqlite3_free">sqlite3_malloc()</a>
+or <a href="#sqlite3_free">sqlite3_realloc()</a> first calls xRoundup. If xRoundup returns 0,
+that causes the corresponding memory allocation to fail.</p>
+
+<p>The xInit method initializes the memory allocator. For example,
+it might allocate any required mutexes or initialize internal data
+structures. The xShutdown method is invoked (indirectly) by
+<a href="#sqlite3_initialize">sqlite3_shutdown()</a> and should deallocate any resources acquired
+by xInit. The pAppData pointer is used as the only parameter to
+xInit and xShutdown.</p>
+
+<p>SQLite holds the <a href="#SQLITE_MUTEX_FAST">SQLITE_MUTEX_STATIC_MAIN</a> mutex when it invokes
+the xInit method, so the xInit method need not be threadsafe. The
+xShutdown method is only called from <a href="#sqlite3_initialize">sqlite3_shutdown()</a> so it does
+not need to be threadsafe either. For all other methods, SQLite
+holds the <a href="#SQLITE_MUTEX_FAST">SQLITE_MUTEX_STATIC_MEM</a> mutex as long as the
+<a href="#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> configuration option is turned on (which
+it is by default) and so the methods are automatically serialized.
+However, if <a href="#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> is disabled, then the other
+methods must be threadsafe or else make their own arrangements for
+serialization.</p>
+
+<p>SQLite will never invoke xInit() more than once without an intervening
+call to xShutdown().
+</p><hr><a name="sqlite3_mutex"></a>
+<h2>Mutex Handle</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_mutex sqlite3_mutex;
+</pre></blockquote>
+<p>
+The mutex module within SQLite defines <a href="#sqlite3_mutex">sqlite3_mutex</a> to be an
+abstract type for a mutex object. The SQLite core never looks
+at the internal representation of an <a href="#sqlite3_mutex">sqlite3_mutex</a>. It only
+deals with pointers to the <a href="#sqlite3_mutex">sqlite3_mutex</a> object.</p>
+
+<p>Mutexes are created using <a href="#sqlite3_mutex_alloc">sqlite3_mutex_alloc()</a>.
+</p><hr><a name="sqlite3_mutex_methods"></a>
+<h2>Mutex Methods Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
+struct sqlite3_mutex_methods {
+ int (*xMutexInit)(void);
+ int (*xMutexEnd)(void);
+ sqlite3_mutex *(*xMutexAlloc)(int);
+ void (*xMutexFree)(sqlite3_mutex *);
+ void (*xMutexEnter)(sqlite3_mutex *);
+ int (*xMutexTry)(sqlite3_mutex *);
+ void (*xMutexLeave)(sqlite3_mutex *);
+ int (*xMutexHeld)(sqlite3_mutex *);
+ int (*xMutexNotheld)(sqlite3_mutex *);
+};
+</pre></blockquote>
+<p>
+An instance of this structure defines the low-level routines
+used to allocate and use mutexes.</p>
+
+<p>Usually, the default mutex implementations provided by SQLite are
+sufficient, however the application has the option of substituting a custom
+implementation for specialized deployments or systems for which SQLite
+does not provide a suitable implementation. In this case, the application
+creates and populates an instance of this structure to pass
+to sqlite3_config() along with the <a href="#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> option.
+Additionally, an instance of this structure can be used as an
+output variable when querying the system for the current mutex
+implementation, using the <a href="#sqliteconfiggetmutex">SQLITE_CONFIG_GETMUTEX</a> option.</p>
+
+<p>The xMutexInit method defined by this structure is invoked as
+part of system initialization by the sqlite3_initialize() function.
+The xMutexInit routine is called by SQLite exactly once for each
+effective call to <a href="#sqlite3_initialize">sqlite3_initialize()</a>.</p>
+
+<p>The xMutexEnd method defined by this structure is invoked as
+part of system shutdown by the sqlite3_shutdown() function. The
+implementation of this method is expected to release all outstanding
+resources obtained by the mutex methods implementation, especially
+those obtained by the xMutexInit method. The xMutexEnd()
+interface is invoked exactly once for each call to <a href="#sqlite3_initialize">sqlite3_shutdown()</a>.</p>
+
+<p>The remaining seven methods defined by this structure (xMutexAlloc,
+xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and
+xMutexNotheld) implement the following interfaces (respectively):</p>
+
+<p><ul>
+<li> <a href="#sqlite3_mutex_alloc">sqlite3_mutex_alloc()</a> </li>
+<li> <a href="#sqlite3_mutex_alloc">sqlite3_mutex_free()</a> </li>
+<li> <a href="#sqlite3_mutex_alloc">sqlite3_mutex_enter()</a> </li>
+<li> <a href="#sqlite3_mutex_alloc">sqlite3_mutex_try()</a> </li>
+<li> <a href="#sqlite3_mutex_alloc">sqlite3_mutex_leave()</a> </li>
+<li> <a href="#sqlite3_mutex_held">sqlite3_mutex_held()</a> </li>
+<li> <a href="#sqlite3_mutex_held">sqlite3_mutex_notheld()</a> </li>
+</ul></p>
+
+<p>The only difference is that the public sqlite3_XXX functions enumerated
+above silently ignore any invocations that pass a NULL pointer instead
+of a valid mutex handle. The implementations of the methods defined
+by this structure are not required to handle this case. The results
+of passing a NULL pointer instead of a valid mutex handle are undefined
+(i.e. it is acceptable to provide an implementation that segfaults if
+it is passed a NULL pointer).</p>
+
+<p>The xMutexInit() method must be threadsafe. It must be harmless to
+invoke xMutexInit() multiple times within the same process and without
+intervening calls to xMutexEnd(). Second and subsequent calls to
+xMutexInit() must be no-ops.</p>
+
+<p>xMutexInit() must not use SQLite memory allocation (<a href="#sqlite3_free">sqlite3_malloc()</a>
+and its associates). Similarly, xMutexAlloc() must not use SQLite memory
+allocation for a static mutex. However xMutexAlloc() may use SQLite
+memory allocation for a fast or recursive mutex.</p>
+
+<p>SQLite will invoke the xMutexEnd() method when <a href="#sqlite3_initialize">sqlite3_shutdown()</a> is
+called, but only if the prior call to xMutexInit returned SQLITE_OK.
+If xMutexInit fails in any way, it is expected to clean up after itself
+prior to returning.
+</p><hr><a name="sqlite3_pcache"></a>
+<h2>Custom Page Cache Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_pcache sqlite3_pcache;
+</pre></blockquote>
+<p>
+The sqlite3_pcache type is opaque. It is implemented by
+the pluggable module. The SQLite core has no knowledge of
+its size or internal structure and never deals with the
+sqlite3_pcache object except by holding and passing pointers
+to the object.</p>
+
+<p>See <a href="#sqlite3_pcache_methods2">sqlite3_pcache_methods2</a> for additional information.
+</p><hr><a name="sqlite3_pcache_page"></a>
+<h2>Custom Page Cache Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_pcache_page sqlite3_pcache_page;
+struct sqlite3_pcache_page {
+ void *pBuf; /* The content of the page */
+ void *pExtra; /* Extra information associated with the page */
+};
+</pre></blockquote>
+<p>
+The sqlite3_pcache_page object represents a single page in the
+page cache. The page cache will allocate instances of this
+object. Various methods of the page cache use pointers to instances
+of this object as parameters or as their return value.</p>
+
+<p>See <a href="#sqlite3_pcache_methods2">sqlite3_pcache_methods2</a> for additional information.
+</p><hr><a name="sqlite3_temp_directory"></a>
+<h2>Name Of The Folder Holding Temporary Files</h2>
+</div>
+<blockquote><pre>
+SQLITE_EXTERN char *sqlite3_temp_directory;
+</pre></blockquote>
+<p>
+If this global variable is made to point to a string which is
+the name of a folder (a.k.a. directory), then all temporary files
+created by SQLite when using a built-in <a href="#sqlite3_vfs">VFS</a>
+will be placed in that directory. If this variable
+is a NULL pointer, then SQLite performs a search for an appropriate
+temporary file directory.</p>
+
+<p>Applications are strongly discouraged from using this global variable.
+It is required to set a temporary folder on Windows Runtime (WinRT).
+But for all other platforms, it is highly recommended that applications
+neither read nor write this variable. This global variable is a relic
+that exists for backwards compatibility of legacy applications and should
+be avoided in new projects.</p>
+
+<p>It is not safe to read or modify this variable in more than one
+thread at a time. It is not safe to read or modify this variable
+if a <a href="#sqlite3">database connection</a> is being used at the same time in a separate
+thread.
+It is intended that this variable be set once
+as part of process initialization and before any SQLite interface
+routines have been called and that this variable remain unchanged
+thereafter.</p>
+
+<p>The <a href="pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a> may modify this variable and cause
+it to point to memory obtained from <a href="#sqlite3_free">sqlite3_malloc</a>. Furthermore,
+the <a href="pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a> always assumes that any string
+that this variable points to is held in memory obtained from
+<a href="#sqlite3_free">sqlite3_malloc</a> and the pragma may attempt to free that memory
+using <a href="#sqlite3_free">sqlite3_free</a>.
+Hence, if this variable is modified directly, either it should be
+made NULL or made to point to memory obtained from <a href="#sqlite3_free">sqlite3_malloc</a>
+or else the use of the <a href="pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a> should be avoided.
+Except when requested by the <a href="pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a>, SQLite
+does not free the memory that sqlite3_temp_directory points to. If
+the application wants that memory to be freed, it must do
+so itself, taking care to only do so after all <a href="#sqlite3">database connection</a>
+objects have been destroyed.</p>
+
+<p><b>Note to Windows Runtime users:</b> The temporary directory must be set
+prior to calling <a href="#sqlite3_open">sqlite3_open</a> or <a href="#sqlite3_open">sqlite3_open_v2</a>. Otherwise, various
+features that require the use of temporary files may fail. Here is an
+example of how to do this using C++ with the Windows Runtime:</p>
+
+<p><blockquote><pre>
+LPCWSTR zPath = Windows::Storage::ApplicationData::Current->
+&nbsp; TemporaryFolder->Path->Data();
+char zPathBuf&#91;MAX_PATH + 1&#93;;
+memset(zPathBuf, 0, sizeof(zPathBuf));
+WideCharToMultiByte(CP_UTF8, 0, zPath, -1, zPathBuf, sizeof(zPathBuf),
+&nbsp; NULL, NULL);
+sqlite3_temp_directory = sqlite3_mprintf("%s", zPathBuf);
+</pre></blockquote>
+</p><hr><a name="sqlite3_vfs"></a>
+<h2>OS Interface Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_vfs sqlite3_vfs;
+typedef void (*sqlite3_syscall_ptr)(void);
+struct sqlite3_vfs {
+ int iVersion; /* Structure version number (currently 3) */
+ int szOsFile; /* Size of subclassed sqlite3_file */
+ int mxPathname; /* Maximum file pathname length */
+ sqlite3_vfs *pNext; /* Next registered VFS */
+ const char *zName; /* Name of this virtual file system */
+ void *pAppData; /* Pointer to application-specific data */
+ int (*xOpen)(sqlite3_vfs*, sqlite3_filename zName, sqlite3_file*,
+ int flags, int *pOutFlags);
+ int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir);
+ int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut);
+ int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut);
+ void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename);
+ void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg);
+ void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void);
+ void (*xDlClose)(sqlite3_vfs*, void*);
+ int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut);
+ int (*xSleep)(sqlite3_vfs*, int microseconds);
+ int (*xCurrentTime)(sqlite3_vfs*, double*);
+ int (*xGetLastError)(sqlite3_vfs*, int, char *);
+ /*
+ ** The methods above are in version 1 of the sqlite_vfs object
+ ** definition. Those that follow are added in version 2 or later
+ */
+ int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
+ /*
+ ** The methods above are in versions 1 and 2 of the sqlite_vfs object.
+ ** Those below are for version 3 and greater.
+ */
+ int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr);
+ sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName);
+ const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName);
+ /*
+ ** The methods above are in versions 1 through 3 of the sqlite_vfs object.
+ ** New fields may be appended in future versions. The iVersion
+ ** value will increment whenever this happens.
+ */
+};
+</pre></blockquote>
+<p>
+An instance of the sqlite3_vfs object defines the interface between
+the SQLite core and the underlying operating system. The "vfs"
+in the name of the object stands for "virtual file system". See
+the <a href="vfs.html">VFS documentation</a> for further information.</p>
+
+<p>The VFS interface is sometimes extended by adding new methods onto
+the end. Each time such an extension occurs, the iVersion field
+is incremented. The iVersion value started out as 1 in
+SQLite <a href="releaselog/3_5_0.html">version 3.5.0</a> on 2007-09-04, then increased to 2
+with SQLite <a href="releaselog/3_7_0.html">version 3.7.0</a> on 2010-07-21, and then increased
+to 3 with SQLite <a href="releaselog/3_7_6.html">version 3.7.6</a> on 2011-04-12. Additional fields
+may be appended to the sqlite3_vfs object and the iVersion value
+may increase again in future versions of SQLite.
+Note that due to an oversight, the structure
+of the sqlite3_vfs object changed in the transition from
+SQLite <a href="releaselog/3_5_9.html">version 3.5.9</a> to <a href="releaselog/3_6_0.html">version 3.6.0</a> on 2008-07-16
+and yet the iVersion field was not increased.</p>
+
+<p>The szOsFile field is the size of the subclassed <a href="#sqlite3_file">sqlite3_file</a>
+structure used by this VFS. mxPathname is the maximum length of
+a pathname in this VFS.</p>
+
+<p>Registered sqlite3_vfs objects are kept on a linked list formed by
+the pNext pointer. The <a href="#sqlite3_vfs_find">sqlite3_vfs_register()</a>
+and <a href="#sqlite3_vfs_find">sqlite3_vfs_unregister()</a> interfaces manage this list
+in a thread-safe way. The <a href="#sqlite3_vfs_find">sqlite3_vfs_find()</a> interface
+searches the list. Neither the application code nor the VFS
+implementation should use the pNext pointer.</p>
+
+<p>The pNext field is the only field in the sqlite3_vfs
+structure that SQLite will ever modify. SQLite will only access
+or modify this field while holding a particular static mutex.
+The application should never modify anything within the sqlite3_vfs
+object once the object has been registered.</p>
+
+<p>The zName field holds the name of the VFS module. The name must
+be unique across all VFS modules.</p>
+
+<p><a name="sqlite3vfsxopen"></a>
+
+SQLite guarantees that the zFilename parameter to xOpen
+is either a NULL pointer or string obtained
+from xFullPathname() with an optional suffix added.
+If a suffix is added to the zFilename parameter, it will
+consist of a single "-" character followed by no more than
+11 alphanumeric and/or "-" characters.
+SQLite further guarantees that
+the string will be valid and unchanged until xClose() is
+called. Because of the previous sentence,
+the <a href="#sqlite3_file">sqlite3_file</a> can safely store a pointer to the
+filename if it needs to remember the filename for some reason.
+If the zFilename parameter to xOpen is a NULL pointer then xOpen
+must invent its own temporary name for the file. Whenever the
+xFilename parameter is NULL it will also be the case that the
+flags parameter will include <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_DELETEONCLOSE</a>.</p>
+
+<p>The flags argument to xOpen() includes all bits set in
+the flags argument to <a href="#sqlite3_open">sqlite3_open_v2()</a>. Or if <a href="#sqlite3_open">sqlite3_open()</a>
+or <a href="#sqlite3_open">sqlite3_open16()</a> is used, then flags includes at least
+<a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_READWRITE</a> | <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_CREATE</a>.
+If xOpen() opens a file read-only then it sets *pOutFlags to
+include <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_READONLY</a>. Other bits in *pOutFlags may be set.</p>
+
+<p>SQLite will also add one of the following flags to the xOpen()
+call, depending on the object being opened:</p>
+
+<p><ul>
+<li> <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_MAIN_DB</a>
+<li> <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_MAIN_JOURNAL</a>
+<li> <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_TEMP_DB</a>
+<li> <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_TEMP_JOURNAL</a>
+<li> <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_TRANSIENT_DB</a>
+<li> <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_SUBJOURNAL</a>
+<li> <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_SUPER_JOURNAL</a>
+<li> <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_WAL</a>
+</ul></p>
+
+<p>The file I/O implementation can use the object type flags to
+change the way it deals with files. For example, an application
+that does not care about crash recovery or rollback might make
+the open of a journal file a no-op. Writes to this journal would
+also be no-ops, and any attempt to read the journal would return
+SQLITE_IOERR. Or the implementation might recognize that a database
+file will be doing page-aligned sector reads and writes in a random
+order and set up its I/O subsystem accordingly.</p>
+
+<p>SQLite might also add one of the following flags to the xOpen method:</p>
+
+<p><ul>
+<li> <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_DELETEONCLOSE</a>
+<li> <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_EXCLUSIVE</a>
+</ul></p>
+
+<p>The <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_DELETEONCLOSE</a> flag means the file should be
+deleted when it is closed. The <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_DELETEONCLOSE</a>
+will be set for TEMP databases and their journals, transient
+databases, and subjournals.</p>
+
+<p>The <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_EXCLUSIVE</a> flag is always used in conjunction
+with the <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_CREATE</a> flag, which are both directly
+analogous to the O_EXCL and O_CREAT flags of the POSIX open()
+API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the
+SQLITE_OPEN_CREATE, is used to indicate that file should always
+be created, and that it is an error if it already exists.
+It is <i>not</i> used to indicate the file should be opened
+for exclusive access.</p>
+
+<p>At least szOsFile bytes of memory are allocated by SQLite
+to hold the <a href="#sqlite3_file">sqlite3_file</a> structure passed as the third
+argument to xOpen. The xOpen method does not have to
+allocate the structure; it should just fill it in. Note that
+the xOpen method must set the sqlite3_file.pMethods to either
+a valid <a href="#sqlite3_io_methods">sqlite3_io_methods</a> object or to NULL. xOpen must do
+this even if the open fails. SQLite expects that the sqlite3_file.pMethods
+element will be valid after xOpen returns regardless of the success
+or failure of the xOpen call.</p>
+
+<p><a name="sqlite3vfsxaccess"></a>
+
+The flags argument to xAccess() may be <a href="#SQLITE_ACCESS_EXISTS">SQLITE_ACCESS_EXISTS</a>
+to test for the existence of a file, or <a href="#SQLITE_ACCESS_EXISTS">SQLITE_ACCESS_READWRITE</a> to
+test whether a file is readable and writable, or <a href="#SQLITE_ACCESS_EXISTS">SQLITE_ACCESS_READ</a>
+to test whether a file is at least readable. The SQLITE_ACCESS_READ
+flag is never actually used and is not implemented in the built-in
+VFSes of SQLite. The file is named by the second argument and can be a
+directory. The xAccess method returns <a href="#SQLITE_ABORT">SQLITE_OK</a> on success or some
+non-zero error code if there is an I/O error or if the name of
+the file given in the second argument is illegal. If SQLITE_OK
+is returned, then non-zero or zero is written into *pResOut to indicate
+whether or not the file is accessible.</p>
+
+<p>SQLite will always allocate at least mxPathname+1 bytes for the
+output buffer xFullPathname. The exact size of the output buffer
+is also passed as a parameter to both methods. If the output buffer
+is not large enough, <a href="#SQLITE_ABORT">SQLITE_CANTOPEN</a> should be returned. Since this is
+handled as a fatal error by SQLite, vfs implementations should endeavor
+to prevent this by setting mxPathname to a sufficiently large value.</p>
+
+<p>The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64()
+interfaces are not strictly a part of the filesystem, but they are
+included in the VFS structure for completeness.
+The xRandomness() function attempts to return nBytes bytes
+of good-quality randomness into zOut. The return value is
+the actual number of bytes of randomness obtained.
+The xSleep() method causes the calling thread to sleep for at
+least the number of microseconds given. The xCurrentTime()
+method returns a Julian Day Number for the current date and time as
+a floating point value.
+The xCurrentTimeInt64() method returns, as an integer, the Julian
+Day Number multiplied by 86400000 (the number of milliseconds in
+a 24-hour day).
+SQLite will use the xCurrentTimeInt64() method to get the current
+date and time if that method is available (if iVersion is 2 or
+greater and the function pointer is not NULL) and will fall back
+to xCurrentTime() if xCurrentTimeInt64() is unavailable.</p>
+
+<p>The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces
+are not used by the SQLite core. These optional interfaces are provided
+by some VFSes to facilitate testing of the VFS code. By overriding
+system calls with functions under its control, a test program can
+simulate faults and error conditions that would otherwise be difficult
+or impossible to induce. The set of system calls that can be overridden
+varies from one VFS to another, and from one version of the same VFS to the
+next. Applications that use these interfaces must be prepared for any
+or all of these interfaces to be NULL or for their behavior to change
+from one release to the next. Applications must not attempt to access
+any of these methods if the iVersion of the VFS is less than 3.
+</p><hr><a name="sqlite3_vtab"></a>
+<h2>Virtual Table Instance Object</h2>
+</div>
+<blockquote><pre>
+struct sqlite3_vtab {
+ const sqlite3_module *pModule; /* The module for this virtual table */
+ int nRef; /* Number of open cursors */
+ char *zErrMsg; /* Error message from sqlite3_mprintf() */
+ /* Virtual table implementations will typically add additional fields */
+};
+</pre></blockquote>
+<p>
+Every <a href="#sqlite3_module">virtual table module</a> implementation uses a subclass
+of this object to describe a particular instance
+of the <a href="vtab.html">virtual table</a>. Each subclass will
+be tailored to the specific needs of the module implementation.
+The purpose of this superclass is to define certain fields that are
+common to all module implementations.</p>
+
+<p>Virtual tables methods can set an error message by assigning a
+string obtained from <a href="#sqlite3_mprintf">sqlite3_mprintf()</a> to zErrMsg. The method should
+take care that any prior string is freed by a call to <a href="#sqlite3_free">sqlite3_free()</a>
+prior to assigning a new string to zErrMsg. After the error message
+is delivered up to the client application, the string will be automatically
+freed by sqlite3_free() and the zErrMsg field will be zeroed.
+</p><hr><a name="sqlite3_aggregate_context"></a>
+<h2>Obtain Aggregate Function Context</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_aggregate_context(sqlite3_context*, int nBytes);
+</pre></blockquote>
+<p>
+Implementations of aggregate SQL functions use this
+routine to allocate memory for storing their state.</p>
+
+<p>The first time the sqlite3_aggregate_context(C,N) routine is called
+for a particular aggregate function, SQLite allocates
+N bytes of memory, zeroes out that memory, and returns a pointer
+to the new memory. On second and subsequent calls to
+sqlite3_aggregate_context() for the same aggregate function instance,
+the same buffer is returned. Sqlite3_aggregate_context() is normally
+called once for each invocation of the xStep callback and then one
+last time when the xFinal callback is invoked. When no rows match
+an aggregate query, the xStep() callback of the aggregate function
+implementation is never called and xFinal() is called exactly once.
+In those cases, sqlite3_aggregate_context() might be called for the
+first time from within xFinal().</p>
+
+<p>The sqlite3_aggregate_context(C,N) routine returns a NULL pointer
+when first called if N is less than or equal to zero or if a memory
+allocation error occurs.</p>
+
+<p>The amount of space allocated by sqlite3_aggregate_context(C,N) is
+determined by the N parameter on first successful call. Changing the
+value of N in any subsequent call to sqlite3_aggregate_context() within
+the same aggregate function instance will not resize the memory
+allocation. Within the xFinal callback, it is customary to set
+N=0 in calls to sqlite3_aggregate_context(C,N) so that no
+pointless memory allocations occur.</p>
+
+<p>SQLite automatically frees the memory allocated by
+sqlite3_aggregate_context() when the aggregate query concludes.</p>
+
+<p>The first parameter must be a copy of the
+<a href="#sqlite3_context">SQL function context</a> that is the first parameter
+to the xStep or xFinal callback routine that implements the aggregate
+function.</p>
+
+<p>This routine must be called from the same thread in which
+the aggregate SQL function is running.
+</p><hr><a name="sqlite3_auto_extension"></a>
+<h2>Automatically Load Statically Linked Extensions</h2>
+</div>
+<blockquote><pre>
+int sqlite3_auto_extension(void(*xEntryPoint)(void));
+</pre></blockquote>
+<p>
+This interface causes the xEntryPoint() function to be invoked for
+each new <a href="#sqlite3">database connection</a> that is created. The idea here is that
+xEntryPoint() is the entry point for a statically linked <a href="loadext.html">SQLite extension</a>
+that is to be automatically loaded into all new database connections.</p>
+
+<p>Even though the function prototype shows that xEntryPoint() takes
+no arguments and returns void, SQLite invokes xEntryPoint() with three
+arguments and expects an integer result as if the signature of the
+entry point where as follows:</p>
+
+<p><blockquote><pre>
+&nbsp; int xEntryPoint(
+&nbsp; sqlite3 *db,
+&nbsp; const char **pzErrMsg,
+&nbsp; const struct sqlite3_api_routines *pThunk
+&nbsp; );
+</pre></blockquote></p>
+
+<p>If the xEntryPoint routine encounters an error, it should make *pzErrMsg
+point to an appropriate error message (obtained from <a href="#sqlite3_mprintf">sqlite3_mprintf()</a>)
+and return an appropriate <a href="rescode.html">error code</a>. SQLite ensures that *pzErrMsg
+is NULL before calling the xEntryPoint(). SQLite will invoke
+<a href="#sqlite3_free">sqlite3_free()</a> on *pzErrMsg after xEntryPoint() returns. If any
+xEntryPoint() returns an error, the <a href="#sqlite3_open">sqlite3_open()</a>, <a href="#sqlite3_open">sqlite3_open16()</a>,
+or <a href="#sqlite3_open">sqlite3_open_v2()</a> call that provoked the xEntryPoint() will fail.</p>
+
+<p>Calling sqlite3_auto_extension(X) with an entry point X that is already
+on the list of automatic extensions is a harmless no-op. No entry point
+will be called more than once for each database connection that is opened.</p>
+
+<p>See also: <a href="#sqlite3_reset_auto_extension">sqlite3_reset_auto_extension()</a>
+and <a href="#sqlite3_cancel_auto_extension">sqlite3_cancel_auto_extension()</a>
+</p><hr><a name="sqlite3_autovacuum_pages"></a>
+<h2>Autovacuum Compaction Amount Callback</h2>
+</div>
+<blockquote><pre>
+int sqlite3_autovacuum_pages(
+ sqlite3 *db,
+ unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int),
+ void*,
+ void(*)(void*)
+);
+</pre></blockquote>
+<p>
+The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback
+function C that is invoked prior to each autovacuum of the database
+file. The callback is passed a copy of the generic data pointer (P),
+the schema-name of the attached database that is being autovacuumed,
+the size of the database file in pages, the number of free pages,
+and the number of bytes per page, respectively. The callback should
+return the number of free pages that should be removed by the
+autovacuum. If the callback returns zero, then no autovacuum happens.
+If the value returned is greater than or equal to the number of
+free pages, then a complete autovacuum happens.</p>
+
+<p><p>If there are multiple ATTACH-ed database files that are being
+modified as part of a transaction commit, then the autovacuum pages
+callback is invoked separately for each file.</p>
+
+<p><p><b>The callback is not reentrant.</b> The callback function should
+not attempt to invoke any other SQLite interface. If it does, bad
+things may happen, including segmentation faults and corrupt database
+files. The callback function should be a simple function that
+does some arithmetic on its input parameters and returns a result.</p>
+
+<p>The X parameter to sqlite3_autovacuum_pages(D,C,P,X) is an optional
+destructor for the P parameter. If X is not NULL, then X(P) is
+invoked whenever the database connection closes or when the callback
+is overwritten by another invocation of sqlite3_autovacuum_pages().</p>
+
+<p><p>There is only one autovacuum pages callback per database connection.
+Each call to the sqlite3_autovacuum_pages() interface overrides all
+previous invocations for that database connection. If the callback
+argument (C) to sqlite3_autovacuum_pages(D,C,P,X) is a NULL pointer,
+then the autovacuum steps callback is cancelled. The return value
+from sqlite3_autovacuum_pages() is normally SQLITE_OK, but might
+be some other error code if something goes wrong. The current
+implementation will only return SQLITE_OK or SQLITE_MISUSE, but other
+return codes might be added in future releases.</p>
+
+<p><p>If no autovacuum pages callback is specified (the usual case) or
+a NULL pointer is provided for the callback,
+then the default behavior is to vacuum all free pages. So, in other
+words, the default behavior is the same as if the callback function
+were something like this:</p>
+
+<p><blockquote><pre>
+&nbsp; unsigned int demonstration_autovac_pages_callback(
+&nbsp; void *pClientData,
+&nbsp; const char *zSchema,
+&nbsp; unsigned int nDbPage,
+&nbsp; unsigned int nFreePage,
+&nbsp; unsigned int nBytePerPage
+&nbsp; ){
+&nbsp; return nFreePage;
+&nbsp; }
+</pre></blockquote>
+</p><hr><a name="sqlite3_bind_parameter_count"></a>
+<h2>Number Of SQL Parameters</h2>
+</div>
+<blockquote><pre>
+int sqlite3_bind_parameter_count(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+This routine can be used to find the number of <a href="#sqlite3_bind_blob">SQL parameters</a>
+in a <a href="#sqlite3_stmt">prepared statement</a>. SQL parameters are tokens of the
+form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as
+placeholders for values that are <a href="#sqlite3_bind_blob">bound</a>
+to the parameters at a later time.</p>
+
+<p>This routine actually returns the index of the largest (rightmost)
+parameter. For all forms except ?NNN, this will correspond to the
+number of unique parameters. If parameters of the ?NNN form are used,
+there may be gaps in the list.</p>
+
+<p>See also: <a href="#sqlite3_bind_blob">sqlite3_bind()</a>,
+<a href="#sqlite3_bind_parameter_name">sqlite3_bind_parameter_name()</a>, and
+<a href="#sqlite3_bind_parameter_index">sqlite3_bind_parameter_index()</a>.
+</p><hr><a name="sqlite3_bind_parameter_index"></a>
+<h2>Index Of A Parameter With A Given Name</h2>
+</div>
+<blockquote><pre>
+int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName);
+</pre></blockquote>
+<p>
+Return the index of an SQL parameter given its name. The
+index value returned is suitable for use as the second
+parameter to <a href="#sqlite3_bind_blob">sqlite3_bind()</a>. A zero
+is returned if no matching parameter is found. The parameter
+name must be given in UTF-8 even if the original statement
+was prepared from UTF-16 text using <a href="#sqlite3_prepare">sqlite3_prepare16_v2()</a> or
+<a href="#sqlite3_prepare">sqlite3_prepare16_v3()</a>.</p>
+
+<p>See also: <a href="#sqlite3_bind_blob">sqlite3_bind()</a>,
+<a href="#sqlite3_bind_parameter_count">sqlite3_bind_parameter_count()</a>, and
+<a href="#sqlite3_bind_parameter_name">sqlite3_bind_parameter_name()</a>.
+</p><hr><a name="sqlite3_bind_parameter_name"></a>
+<h2>Name Of A Host Parameter</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int);
+</pre></blockquote>
+<p>
+The sqlite3_bind_parameter_name(P,N) interface returns
+the name of the N-th <a href="#sqlite3_bind_blob">SQL parameter</a> in the <a href="#sqlite3_stmt">prepared statement</a> P.
+SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA"
+have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA"
+respectively.
+In other words, the initial ":" or "$" or "@" or "?"
+is included as part of the name.
+Parameters of the form "?" without a following integer have no name
+and are referred to as "nameless" or "anonymous parameters".</p>
+
+<p>The first host parameter has an index of 1, not 0.</p>
+
+<p>If the value N is out of range or if the N-th parameter is
+nameless, then NULL is returned. The returned string is
+always in UTF-8 encoding even if the named parameter was
+originally specified as UTF-16 in <a href="#sqlite3_prepare">sqlite3_prepare16()</a>,
+<a href="#sqlite3_prepare">sqlite3_prepare16_v2()</a>, or <a href="#sqlite3_prepare">sqlite3_prepare16_v3()</a>.</p>
+
+<p>See also: <a href="#sqlite3_bind_blob">sqlite3_bind()</a>,
+<a href="#sqlite3_bind_parameter_count">sqlite3_bind_parameter_count()</a>, and
+<a href="#sqlite3_bind_parameter_index">sqlite3_bind_parameter_index()</a>.
+</p><hr><a name="sqlite3_blob_bytes"></a>
+<h2>Return The Size Of An Open BLOB</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_bytes(sqlite3_blob *);
+</pre></blockquote>
+<p>
+Returns the size in bytes of the BLOB accessible via the
+successfully opened <a href="#sqlite3_blob">BLOB handle</a> in its only argument. The
+incremental blob I/O routines can only read or overwriting existing
+blob content; they cannot change the size of a blob.</p>
+
+<p>This routine only works on a <a href="#sqlite3_blob">BLOB handle</a> which has been created
+by a prior successful call to <a href="#sqlite3_blob_open">sqlite3_blob_open()</a> and which has not
+been closed by <a href="#sqlite3_blob_close">sqlite3_blob_close()</a>. Passing any other pointer in
+to this routine results in undefined and probably undesirable behavior.
+</p><hr><a name="sqlite3_blob_close"></a>
+<h2>Close A BLOB Handle</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_close(sqlite3_blob *);
+</pre></blockquote>
+<p>
+This function closes an open <a href="#sqlite3_blob">BLOB handle</a>. The BLOB handle is closed
+unconditionally. Even if this routine returns an error code, the
+handle is still closed.</p>
+
+<p>If the blob handle being closed was opened for read-write access, and if
+the database is in auto-commit mode and there are no other open read-write
+blob handles or active write statements, the current transaction is
+committed. If an error occurs while committing the transaction, an error
+code is returned and the transaction rolled back.</p>
+
+<p>Calling this function with an argument that is not a NULL pointer or an
+open blob handle results in undefined behaviour. Calling this routine
+with a null pointer (such as would be returned by a failed call to
+<a href="#sqlite3_blob_open">sqlite3_blob_open()</a>) is a harmless no-op. Otherwise, if this function
+is passed a valid open blob handle, the values returned by the
+sqlite3_errcode() and sqlite3_errmsg() functions are set before returning.
+</p><hr><a name="sqlite3_blob_open"></a>
+<h2>Open A BLOB For Incremental I/O</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_open(
+ sqlite3*,
+ const char *zDb,
+ const char *zTable,
+ const char *zColumn,
+ sqlite3_int64 iRow,
+ int flags,
+ sqlite3_blob **ppBlob
+);
+</pre></blockquote>
+<p>
+This interfaces opens a <a href="#sqlite3_blob">handle</a> to the BLOB located
+in row iRow, column zColumn, table zTable in database zDb;
+in other words, the same BLOB that would be selected by:</p>
+
+<p><pre>
+SELECT zColumn FROM zDb.zTable WHERE <a href="lang_createtable.html#rowid">rowid</a> = iRow;
+</pre></p>
+
+<p>Parameter zDb is not the filename that contains the database, but
+rather the symbolic name of the database. For attached databases, this is
+the name that appears after the AS keyword in the <a href="lang_attach.html">ATTACH</a> statement.
+For the main database file, the database name is "main". For TEMP
+tables, the database name is "temp".</p>
+
+<p>If the flags parameter is non-zero, then the BLOB is opened for read
+and write access. If the flags parameter is zero, the BLOB is opened for
+read-only access.</p>
+
+<p>On success, <a href="#SQLITE_ABORT">SQLITE_OK</a> is returned and the new <a href="#sqlite3_blob">BLOB handle</a> is stored
+in *ppBlob. Otherwise an <a href="rescode.html">error code</a> is returned and, unless the error
+code is SQLITE_MISUSE, *ppBlob is set to NULL. This means that, provided
+the API is not misused, it is always safe to call <a href="#sqlite3_blob_close">sqlite3_blob_close()</a>
+on *ppBlob after this function it returns.</p>
+
+<p>This function fails with SQLITE_ERROR if any of the following are true:
+<ul>
+<li> Database zDb does not exist,
+<li> Table zTable does not exist within database zDb,
+<li> Table zTable is a WITHOUT ROWID table,
+<li> Column zColumn does not exist,
+<li> Row iRow is not present in the table,
+<li> The specified column of row iRow contains a value that is not
+a TEXT or BLOB value,
+<li> Column zColumn is part of an index, PRIMARY KEY or UNIQUE
+constraint and the blob is being opened for read/write access,
+<li> <a href="foreignkeys.html">Foreign key constraints</a> are enabled,
+column zColumn is part of a <a href="foreignkeys.html#parentchild">child key</a> definition and the blob is
+being opened for read/write access.
+</ul></p>
+
+<p>Unless it returns SQLITE_MISUSE, this function sets the
+<a href="#sqlite3">database connection</a> error code and message accessible via
+<a href="#sqlite3_errcode">sqlite3_errcode()</a> and <a href="#sqlite3_errcode">sqlite3_errmsg()</a> and related functions.</p>
+
+<p>A BLOB referenced by sqlite3_blob_open() may be read using the
+<a href="#sqlite3_blob_read">sqlite3_blob_read()</a> interface and modified by using
+<a href="#sqlite3_blob_write">sqlite3_blob_write()</a>. The <a href="#sqlite3_blob">BLOB handle</a> can be moved to a
+different row of the same table using the <a href="#sqlite3_blob_reopen">sqlite3_blob_reopen()</a>
+interface. However, the column, table, or database of a <a href="#sqlite3_blob">BLOB handle</a>
+cannot be changed after the <a href="#sqlite3_blob">BLOB handle</a> is opened.</p>
+
+<p>If the row that a BLOB handle points to is modified by an
+<a href="lang_update.html">UPDATE</a>, <a href="lang_delete.html">DELETE</a>, or by <a href="lang_conflict.html">ON CONFLICT</a> side-effects
+then the BLOB handle is marked as "expired".
+This is true if any column of the row is changed, even a column
+other than the one the BLOB handle is open on.
+Calls to <a href="#sqlite3_blob_read">sqlite3_blob_read()</a> and <a href="#sqlite3_blob_write">sqlite3_blob_write()</a> for
+an expired BLOB handle fail with a return code of <a href="#SQLITE_ABORT">SQLITE_ABORT</a>.
+Changes written into a BLOB prior to the BLOB expiring are not
+rolled back by the expiration of the BLOB. Such changes will eventually
+commit if the transaction continues to completion.</p>
+
+<p>Use the <a href="#sqlite3_blob_bytes">sqlite3_blob_bytes()</a> interface to determine the size of
+the opened blob. The size of a blob may not be changed by this
+interface. Use the <a href="lang_update.html">UPDATE</a> SQL command to change the size of a
+blob.</p>
+
+<p>The <a href="#sqlite3_bind_blob">sqlite3_bind_zeroblob()</a> and <a href="#sqlite3_result_blob">sqlite3_result_zeroblob()</a> interfaces
+and the built-in <a href="lang_corefunc.html#zeroblob">zeroblob</a> SQL function may be used to create a
+zero-filled blob to read or write using the incremental-blob interface.</p>
+
+<p>To avoid a resource leak, every open <a href="#sqlite3_blob">BLOB handle</a> should eventually
+be released by a call to <a href="#sqlite3_blob_close">sqlite3_blob_close()</a>.</p>
+
+<p>See also: <a href="#sqlite3_blob_close">sqlite3_blob_close()</a>,
+<a href="#sqlite3_blob_reopen">sqlite3_blob_reopen()</a>, <a href="#sqlite3_blob_read">sqlite3_blob_read()</a>,
+<a href="#sqlite3_blob_bytes">sqlite3_blob_bytes()</a>, <a href="#sqlite3_blob_write">sqlite3_blob_write()</a>.
+</p><hr><a name="sqlite3_blob_read"></a>
+<h2>Read Data From A BLOB Incrementally</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
+</pre></blockquote>
+<p>
+This function is used to read data from an open <a href="#sqlite3_blob">BLOB handle</a> into a
+caller-supplied buffer. N bytes of data are copied into buffer Z
+from the open BLOB, starting at offset iOffset.</p>
+
+<p>If offset iOffset is less than N bytes from the end of the BLOB,
+<a href="#SQLITE_ABORT">SQLITE_ERROR</a> is returned and no data is read. If N or iOffset is
+less than zero, <a href="#SQLITE_ABORT">SQLITE_ERROR</a> is returned and no data is read.
+The size of the blob (and hence the maximum value of N+iOffset)
+can be determined using the <a href="#sqlite3_blob_bytes">sqlite3_blob_bytes()</a> interface.</p>
+
+<p>An attempt to read from an expired <a href="#sqlite3_blob">BLOB handle</a> fails with an
+error code of <a href="#SQLITE_ABORT">SQLITE_ABORT</a>.</p>
+
+<p>On success, sqlite3_blob_read() returns SQLITE_OK.
+Otherwise, an <a href="rescode.html">error code</a> or an <a href="rescode.html#extrc">extended error code</a> is returned.</p>
+
+<p>This routine only works on a <a href="#sqlite3_blob">BLOB handle</a> which has been created
+by a prior successful call to <a href="#sqlite3_blob_open">sqlite3_blob_open()</a> and which has not
+been closed by <a href="#sqlite3_blob_close">sqlite3_blob_close()</a>. Passing any other pointer in
+to this routine results in undefined and probably undesirable behavior.</p>
+
+<p>See also: <a href="#sqlite3_blob_write">sqlite3_blob_write()</a>.
+</p><hr><a name="sqlite3_blob_reopen"></a>
+<h2>Move a BLOB Handle to a New Row</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
+</pre></blockquote>
+<p>
+This function is used to move an existing <a href="#sqlite3_blob">BLOB handle</a> so that it points
+to a different row of the same database table. The new row is identified
+by the rowid value passed as the second argument. Only the row can be
+changed. The database, table and column on which the blob handle is open
+remain the same. Moving an existing <a href="#sqlite3_blob">BLOB handle</a> to a new row is
+faster than closing the existing handle and opening a new one.</p>
+
+<p>The new row must meet the same criteria as for <a href="#sqlite3_blob_open">sqlite3_blob_open()</a> -
+it must exist and there must be either a blob or text value stored in
+the nominated column. If the new row is not present in the table, or if
+it does not contain a blob or text value, or if another error occurs, an
+SQLite error code is returned and the blob handle is considered aborted.
+All subsequent calls to <a href="#sqlite3_blob_read">sqlite3_blob_read()</a>, <a href="#sqlite3_blob_write">sqlite3_blob_write()</a> or
+<a href="#sqlite3_blob_reopen">sqlite3_blob_reopen()</a> on an aborted blob handle immediately return
+SQLITE_ABORT. Calling <a href="#sqlite3_blob_bytes">sqlite3_blob_bytes()</a> on an aborted blob handle
+always returns zero.</p>
+
+<p>This function sets the database handle error code and message.
+</p><hr><a name="sqlite3_blob_write"></a>
+<h2>Write Data Into A BLOB Incrementally</h2>
+</div>
+<blockquote><pre>
+int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset);
+</pre></blockquote>
+<p>
+This function is used to write data into an open <a href="#sqlite3_blob">BLOB handle</a> from a
+caller-supplied buffer. N bytes of data are copied from the buffer Z
+into the open BLOB, starting at offset iOffset.</p>
+
+<p>On success, sqlite3_blob_write() returns SQLITE_OK.
+Otherwise, an <a href="rescode.html">error code</a> or an <a href="rescode.html#extrc">extended error code</a> is returned.
+Unless SQLITE_MISUSE is returned, this function sets the
+<a href="#sqlite3">database connection</a> error code and message accessible via
+<a href="#sqlite3_errcode">sqlite3_errcode()</a> and <a href="#sqlite3_errcode">sqlite3_errmsg()</a> and related functions.</p>
+
+<p>If the <a href="#sqlite3_blob">BLOB handle</a> passed as the first argument was not opened for
+writing (the flags parameter to <a href="#sqlite3_blob_open">sqlite3_blob_open()</a> was zero),
+this function returns <a href="#SQLITE_ABORT">SQLITE_READONLY</a>.</p>
+
+<p>This function may only modify the contents of the BLOB; it is
+not possible to increase the size of a BLOB using this API.
+If offset iOffset is less than N bytes from the end of the BLOB,
+<a href="#SQLITE_ABORT">SQLITE_ERROR</a> is returned and no data is written. The size of the
+BLOB (and hence the maximum value of N+iOffset) can be determined
+using the <a href="#sqlite3_blob_bytes">sqlite3_blob_bytes()</a> interface. If N or iOffset are less
+than zero <a href="#SQLITE_ABORT">SQLITE_ERROR</a> is returned and no data is written.</p>
+
+<p>An attempt to write to an expired <a href="#sqlite3_blob">BLOB handle</a> fails with an
+error code of <a href="#SQLITE_ABORT">SQLITE_ABORT</a>. Writes to the BLOB that occurred
+before the <a href="#sqlite3_blob">BLOB handle</a> expired are not rolled back by the
+expiration of the handle, though of course those changes might
+have been overwritten by the statement that expired the BLOB handle
+or by other independent statements.</p>
+
+<p>This routine only works on a <a href="#sqlite3_blob">BLOB handle</a> which has been created
+by a prior successful call to <a href="#sqlite3_blob_open">sqlite3_blob_open()</a> and which has not
+been closed by <a href="#sqlite3_blob_close">sqlite3_blob_close()</a>. Passing any other pointer in
+to this routine results in undefined and probably undesirable behavior.</p>
+
+<p>See also: <a href="#sqlite3_blob_read">sqlite3_blob_read()</a>.
+</p><hr><a name="sqlite3_busy_timeout"></a>
+<h2>Set A Busy Timeout</h2>
+</div>
+<blockquote><pre>
+int sqlite3_busy_timeout(sqlite3*, int ms);
+</pre></blockquote>
+<p>
+This routine sets a <a href="#sqlite3_busy_handler">busy handler</a> that sleeps
+for a specified amount of time when a table is locked. The handler
+will sleep multiple times until at least "ms" milliseconds of sleeping
+have accumulated. After at least "ms" milliseconds of sleeping,
+the handler returns 0 which causes <a href="#sqlite3_step">sqlite3_step()</a> to return
+<a href="#SQLITE_ABORT">SQLITE_BUSY</a>.</p>
+
+<p>Calling this routine with an argument less than or equal to zero
+turns off all busy handlers.</p>
+
+<p>There can only be a single busy handler for a particular
+<a href="#sqlite3">database connection</a> at any given moment. If another busy handler
+was defined (using <a href="#sqlite3_busy_handler">sqlite3_busy_handler()</a>) prior to calling
+this routine, that other busy handler is cleared.</p>
+
+<p>See also: <a href="pragma.html#pragma_busy_timeout">PRAGMA busy_timeout</a>
+</p><hr><a name="sqlite3_cancel_auto_extension"></a>
+<h2>Cancel Automatic Extension Loading</h2>
+</div>
+<blockquote><pre>
+int sqlite3_cancel_auto_extension(void(*xEntryPoint)(void));
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_cancel_auto_extension">sqlite3_cancel_auto_extension(X)</a> interface unregisters the
+initialization routine X that was registered using a prior call to
+<a href="#sqlite3_auto_extension">sqlite3_auto_extension(X)</a>. The <a href="#sqlite3_cancel_auto_extension">sqlite3_cancel_auto_extension(X)</a>
+routine returns 1 if initialization routine X was successfully
+unregistered and it returns 0 if X was not on the list of initialization
+routines.
+</p><hr><a name="sqlite3_clear_bindings"></a>
+<h2>Reset All Bindings On A Prepared Statement</h2>
+</div>
+<blockquote><pre>
+int sqlite3_clear_bindings(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+Contrary to the intuition of many, <a href="#sqlite3_reset">sqlite3_reset()</a> does not reset
+the <a href="#sqlite3_bind_blob">bindings</a> on a <a href="#sqlite3_stmt">prepared statement</a>.
+Use this routine to reset all host parameters to NULL.
+</p><hr><a name="sqlite3_column_count"></a>
+<h2>Number Of Columns In A Result Set</h2>
+</div>
+<blockquote><pre>
+int sqlite3_column_count(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+Return the number of columns in the result set returned by the
+<a href="#sqlite3_stmt">prepared statement</a>. If this routine returns 0, that means the
+<a href="#sqlite3_stmt">prepared statement</a> returns no data (for example an <a href="lang_update.html">UPDATE</a>).
+However, just because this routine returns a positive number does not
+mean that one or more rows of data will be returned. A SELECT statement
+will always have a positive sqlite3_column_count() but depending on the
+WHERE clause constraints and the table content, it might return no rows.</p>
+
+<p>See also: <a href="#sqlite3_data_count">sqlite3_data_count()</a>
+</p><hr><a name="sqlite3_config"></a>
+<h2>Configuring The SQLite Library</h2>
+</div>
+<blockquote><pre>
+int sqlite3_config(int, ...);
+</pre></blockquote>
+<p>
+The sqlite3_config() interface is used to make global configuration
+changes to SQLite in order to tune SQLite to the specific needs of
+the application. The default configuration is recommended for most
+applications and so this routine is usually not necessary. It is
+provided to support rare applications with unusual needs.</p>
+
+<p><b>The sqlite3_config() interface is not threadsafe. The application
+must ensure that no other SQLite interfaces are invoked by other
+threads while sqlite3_config() is running.</b></p>
+
+<p>The sqlite3_config() interface
+may only be invoked prior to library initialization using
+<a href="#sqlite3_initialize">sqlite3_initialize()</a> or after shutdown by <a href="#sqlite3_initialize">sqlite3_shutdown()</a>.
+If sqlite3_config() is called after <a href="#sqlite3_initialize">sqlite3_initialize()</a> and before
+<a href="#sqlite3_initialize">sqlite3_shutdown()</a> then it will return SQLITE_MISUSE.
+Note, however, that sqlite3_config() can be called as part of the
+implementation of an application-defined <a href="#sqlite3_initialize">sqlite3_os_init()</a>.</p>
+
+<p>The first argument to sqlite3_config() is an integer
+<a href="#SQLITE_CONFIG_COVERING_INDEX_SCAN">configuration option</a> that determines
+what property of SQLite is to be configured. Subsequent arguments
+vary depending on the <a href="#SQLITE_CONFIG_COVERING_INDEX_SCAN">configuration option</a>
+in the first argument.</p>
+
+<p>When a configuration option is set, sqlite3_config() returns <a href="#SQLITE_ABORT">SQLITE_OK</a>.
+If the option is unknown or SQLite is unable to set the option
+then this routine returns a non-zero <a href="rescode.html">error code</a>.
+</p><hr><a name="sqlite3_context_db_handle"></a>
+<h2>Database Connection For Functions</h2>
+</div>
+<blockquote><pre>
+sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
+</pre></blockquote>
+<p>
+The sqlite3_context_db_handle() interface returns a copy of
+the pointer to the <a href="#sqlite3">database connection</a> (the 1st parameter)
+of the <a href="#sqlite3_create_function">sqlite3_create_function()</a>
+and <a href="#sqlite3_create_function">sqlite3_create_function16()</a> routines that originally
+registered the application defined function.
+</p><hr><a name="sqlite3_data_count"></a>
+<h2>Number of columns in a result set</h2>
+</div>
+<blockquote><pre>
+int sqlite3_data_count(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+The sqlite3_data_count(P) interface returns the number of columns in the
+current row of the result set of <a href="#sqlite3_stmt">prepared statement</a> P.
+If prepared statement P does not have results ready to return
+(via calls to the <a href="#sqlite3_column_blob">sqlite3_column()</a> family of
+interfaces) then sqlite3_data_count(P) returns 0.
+The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer.
+The sqlite3_data_count(P) routine returns 0 if the previous call to
+<a href="#sqlite3_step">sqlite3_step</a>(P) returned <a href="#SQLITE_ABORT">SQLITE_DONE</a>. The sqlite3_data_count(P)
+will return non-zero if previous call to <a href="#sqlite3_step">sqlite3_step</a>(P) returned
+<a href="#SQLITE_ABORT">SQLITE_ROW</a>, except in the case of the <a href="pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>
+where it always returns zero since each step of that multi-step
+pragma returns 0 columns of data.</p>
+
+<p>See also: <a href="#sqlite3_column_count">sqlite3_column_count()</a>
+</p><hr><a name="sqlite3_database_file_object"></a>
+<h2>Database File Corresponding To A Journal</h2>
+</div>
+<blockquote><pre>
+sqlite3_file *sqlite3_database_file_object(const char*);
+</pre></blockquote>
+<p>
+If X is the name of a rollback or WAL-mode journal file that is
+passed into the xOpen method of <a href="#sqlite3_vfs">sqlite3_vfs</a>, then
+sqlite3_database_file_object(X) returns a pointer to the <a href="#sqlite3_file">sqlite3_file</a>
+object that represents the main database file.</p>
+
+<p>This routine is intended for use in custom <a href="vfs.html">VFS</a> implementations
+only. It is not a general-purpose interface.
+The argument sqlite3_file_object(X) must be a filename pointer that
+has been passed into <a href="#sqlite3_vfs">sqlite3_vfs</a>.xOpen method where the
+flags parameter to xOpen contains one of the bits
+<a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_MAIN_JOURNAL</a> or <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_WAL</a>. Any other use
+of this routine results in undefined and probably undesirable
+behavior.
+</p><hr><a name="sqlite3_db_cacheflush"></a>
+<h2>Flush caches to disk mid-transaction</h2>
+</div>
+<blockquote><pre>
+int sqlite3_db_cacheflush(sqlite3*);
+</pre></blockquote>
+<p>
+If a write-transaction is open on <a href="#sqlite3">database connection</a> D when the
+<a href="#sqlite3_db_cacheflush">sqlite3_db_cacheflush(D)</a> interface invoked, any dirty
+pages in the pager-cache that are not currently in use are written out
+to disk. A dirty page may be in use if a database cursor created by an
+active SQL statement is reading from it, or if it is page 1 of a database
+file (page 1 is always "in use"). The <a href="#sqlite3_db_cacheflush">sqlite3_db_cacheflush(D)</a>
+interface flushes caches for all schemas - "main", "temp", and
+any <a href="lang_attach.html">attached</a> databases.</p>
+
+<p>If this function needs to obtain extra database locks before dirty pages
+can be flushed to disk, it does so. If those locks cannot be obtained
+immediately and there is a busy-handler callback configured, it is invoked
+in the usual manner. If the required lock still cannot be obtained, then
+the database is skipped and an attempt made to flush any dirty pages
+belonging to the next (if any) database. If any databases are skipped
+because locks cannot be obtained, but no other error occurs, this
+function returns SQLITE_BUSY.</p>
+
+<p>If any other error occurs while flushing dirty pages to disk (for
+example an IO error or out-of-memory condition), then processing is
+abandoned and an SQLite <a href="rescode.html">error code</a> is returned to the caller immediately.</p>
+
+<p>Otherwise, if no error occurs, <a href="#sqlite3_db_cacheflush">sqlite3_db_cacheflush()</a> returns SQLITE_OK.</p>
+
+<p>This function does not set the database handle error code or message
+returned by the <a href="#sqlite3_errcode">sqlite3_errcode()</a> and <a href="#sqlite3_errcode">sqlite3_errmsg()</a> functions.
+</p><hr><a name="sqlite3_db_config"></a>
+<h2>Configure database connections</h2>
+</div>
+<blockquote><pre>
+int sqlite3_db_config(sqlite3*, int op, ...);
+</pre></blockquote>
+<p>
+The sqlite3_db_config() interface is used to make configuration
+changes to a <a href="#sqlite3">database connection</a>. The interface is similar to
+<a href="#sqlite3_config">sqlite3_config()</a> except that the changes apply to a single
+<a href="#sqlite3">database connection</a> (specified in the first argument).</p>
+
+<p>The second argument to sqlite3_db_config(D,V,...) is the
+<a href="#sqlitedbconfiglookaside">configuration verb</a> - an integer code
+that indicates what aspect of the <a href="#sqlite3">database connection</a> is being configured.
+Subsequent arguments vary depending on the configuration verb.</p>
+
+<p>Calls to sqlite3_db_config() return SQLITE_OK if and only if
+the call is considered successful.
+</p><hr><a name="sqlite3_db_filename"></a>
+<h2>Return The Filename For A Database Connection</h2>
+</div>
+<blockquote><pre>
+sqlite3_filename sqlite3_db_filename(sqlite3 *db, const char *zDbName);
+</pre></blockquote>
+<p>
+The sqlite3_db_filename(D,N) interface returns a pointer to the filename
+associated with database N of connection D.
+If there is no attached database N on the database
+connection D, or if database N is a temporary or in-memory database, then
+this function will return either a NULL pointer or an empty string.</p>
+
+<p>The string value returned by this routine is owned and managed by
+the database connection. The value will be valid until the database N
+is <a href="lang_detach.html">DETACH</a>-ed or until the database connection closes.</p>
+
+<p>The filename returned by this function is the output of the
+xFullPathname method of the <a href="vfs.html">VFS</a>. In other words, the filename
+will be an absolute pathname, even if the filename used
+to open the database originally was a URI or relative pathname.</p>
+
+<p>If the filename pointer returned by this routine is not NULL, then it
+can be used as the filename input parameter to these routines:
+<ul>
+<li> <a href="#sqlite3_uri_boolean">sqlite3_uri_parameter()</a>
+<li> <a href="#sqlite3_uri_boolean">sqlite3_uri_boolean()</a>
+<li> <a href="#sqlite3_uri_boolean">sqlite3_uri_int64()</a>
+<li> <a href="#sqlite3_filename_database">sqlite3_filename_database()</a>
+<li> <a href="#sqlite3_filename_database">sqlite3_filename_journal()</a>
+<li> <a href="#sqlite3_filename_database">sqlite3_filename_wal()</a>
+</ul>
+</p><hr><a name="sqlite3_db_handle"></a>
+<h2>Find The Database Handle Of A Prepared Statement</h2>
+</div>
+<blockquote><pre>
+sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+The sqlite3_db_handle interface returns the <a href="#sqlite3">database connection</a> handle
+to which a <a href="#sqlite3_stmt">prepared statement</a> belongs. The <a href="#sqlite3">database connection</a>
+returned by sqlite3_db_handle is the same <a href="#sqlite3">database connection</a>
+that was the first argument
+to the <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> call (or its variants) that was used to
+create the statement in the first place.
+</p><hr><a name="sqlite3_db_mutex"></a>
+<h2>Retrieve the mutex for a database connection</h2>
+</div>
+<blockquote><pre>
+sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
+</pre></blockquote>
+<p>
+This interface returns a pointer the <a href="#sqlite3_mutex">sqlite3_mutex</a> object that
+serializes access to the <a href="#sqlite3">database connection</a> given in the argument
+when the <a href="threadsafe.html">threading mode</a> is Serialized.
+If the <a href="threadsafe.html">threading mode</a> is Single-thread or Multi-thread then this
+routine returns a NULL pointer.
+</p><hr><a name="sqlite3_db_name"></a>
+<h2>Return The Schema Name For A Database Connection</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_db_name(sqlite3 *db, int N);
+</pre></blockquote>
+<p>
+The sqlite3_db_name(D,N) interface returns a pointer to the schema name
+for the N-th database on database connection D, or a NULL pointer of N is
+out of range. An N value of 0 means the main database file. An N of 1 is
+the "temp" schema. Larger values of N correspond to various ATTACH-ed
+databases.</p>
+
+<p>Space to hold the string that is returned by sqlite3_db_name() is managed
+by SQLite itself. The string might be deallocated by any operation that
+changes the schema, including <a href="lang_attach.html">ATTACH</a> or <a href="lang_detach.html">DETACH</a> or calls to
+<a href="#sqlite3_serialize">sqlite3_serialize()</a> or <a href="#sqlite3_deserialize">sqlite3_deserialize()</a>, even operations that
+occur on a different thread. Applications that need to
+remember the string long-term should make their own copy. Applications that
+are accessing the same database connection simultaneously on multiple
+threads should mutex-protect calls to this API and should make their own
+private copy of the result prior to releasing the mutex.
+</p><hr><a name="sqlite3_db_readonly"></a>
+<h2>Determine if a database is read-only</h2>
+</div>
+<blockquote><pre>
+int sqlite3_db_readonly(sqlite3 *db, const char *zDbName);
+</pre></blockquote>
+<p>
+The sqlite3_db_readonly(D,N) interface returns 1 if the database N
+of connection D is read-only, 0 if it is read/write, or -1 if N is not
+the name of a database on connection D.
+</p><hr><a name="sqlite3_db_release_memory"></a>
+<h2>Free Memory Used By A Database Connection</h2>
+</div>
+<blockquote><pre>
+int sqlite3_db_release_memory(sqlite3*);
+</pre></blockquote>
+<p>
+The sqlite3_db_release_memory(D) interface attempts to free as much heap
+memory as possible from database connection D. Unlike the
+<a href="#sqlite3_release_memory">sqlite3_release_memory()</a> interface, this interface is in effect even
+when the <a href="compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a> compile-time option is
+omitted.</p>
+
+<p>See also: <a href="#sqlite3_release_memory">sqlite3_release_memory()</a>
+</p><hr><a name="sqlite3_db_status"></a>
+<h2>Database Connection Status</h2>
+</div>
+<blockquote><pre>
+int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
+</pre></blockquote>
+<p>
+This interface is used to retrieve runtime status information
+about a single <a href="#sqlite3">database connection</a>. The first argument is the
+database connection object to be interrogated. The second argument
+is an integer constant, taken from the set of
+<a href="#SQLITE_DBSTATUS options">SQLITE_DBSTATUS options</a>, that
+determines the parameter to interrogate. The set of
+<a href="#SQLITE_DBSTATUS options">SQLITE_DBSTATUS options</a> is likely
+to grow in future releases of SQLite.</p>
+
+<p>The current value of the requested parameter is written into *pCur
+and the highest instantaneous value is written into *pHiwtr. If
+the resetFlg is true, then the highest instantaneous value is
+reset back down to the current value.</p>
+
+<p>The sqlite3_db_status() routine returns SQLITE_OK on success and a
+non-zero <a href="rescode.html">error code</a> on failure.</p>
+
+<p>See also: <a href="#sqlite3_status">sqlite3_status()</a> and <a href="#sqlite3_stmt_status">sqlite3_stmt_status()</a>.
+</p><hr><a name="sqlite3_declare_vtab"></a>
+<h2>Declare The Schema Of A Virtual Table</h2>
+</div>
+<blockquote><pre>
+int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
+</pre></blockquote>
+<p>
+The <a href="vtab.html#xcreate">xCreate</a> and <a href="vtab.html#xconnect">xConnect</a> methods of a
+<a href="#sqlite3_module">virtual table module</a> call this interface
+to declare the format (the names and datatypes of the columns) of
+the virtual tables they implement.
+</p><hr><a name="sqlite3_deserialize"></a>
+<h2>Deserialize a database</h2>
+</div>
+<blockquote><pre>
+int sqlite3_deserialize(
+ sqlite3 *db, /* The database connection */
+ const char *zSchema, /* Which DB to reopen with the deserialization */
+ unsigned char *pData, /* The serialized database content */
+ sqlite3_int64 szDb, /* Number bytes in the deserialization */
+ sqlite3_int64 szBuf, /* Total size of buffer pData[] */
+ unsigned mFlags /* Zero or more SQLITE_DESERIALIZE_* flags */
+);
+</pre></blockquote>
+<p>
+The sqlite3_deserialize(D,S,P,N,M,F) interface causes the
+<a href="#sqlite3">database connection</a> D to disconnect from database S and then
+reopen S as an in-memory database based on the serialization contained
+in P. The serialized database P is N bytes in size. M is the size of
+the buffer P, which might be larger than N. If M is larger than N, and
+the SQLITE_DESERIALIZE_READONLY bit is not set in F, then SQLite is
+permitted to add content to the in-memory database as long as the total
+size does not exceed M bytes.</p>
+
+<p>If the SQLITE_DESERIALIZE_FREEONCLOSE bit is set in F, then SQLite will
+invoke sqlite3_free() on the serialization buffer when the database
+connection closes. If the SQLITE_DESERIALIZE_RESIZEABLE bit is set, then
+SQLite will try to increase the buffer size using sqlite3_realloc64()
+if writes on the database cause it to grow larger than M bytes.</p>
+
+<p>The sqlite3_deserialize() interface will fail with SQLITE_BUSY if the
+database is currently in a read transaction or is involved in a backup
+operation.</p>
+
+<p>It is not possible to deserialized into the TEMP database. If the
+S argument to sqlite3_deserialize(D,S,P,N,M,F) is "temp" then the
+function returns SQLITE_ERROR.</p>
+
+<p>If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the
+SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then
+<a href="#sqlite3_free">sqlite3_free()</a> is invoked on argument P prior to returning.</p>
+
+<p>This interface is omitted if SQLite is compiled with the
+<a href="compile.html#omit_deserialize">SQLITE_OMIT_DESERIALIZE</a> option.
+</p><hr><a name="sqlite3_drop_modules"></a>
+<h2>Remove Unnecessary Virtual Table Implementations</h2>
+</div>
+<blockquote><pre>
+int sqlite3_drop_modules(
+ sqlite3 *db, /* Remove modules from this connection */
+ const char **azKeep /* Except, do not remove the ones named here */
+);
+</pre></blockquote>
+<p>
+The sqlite3_drop_modules(D,L) interface removes all virtual
+table modules from database connection D except those named on list L.
+The L parameter must be either NULL or a pointer to an array of pointers
+to strings where the array is terminated by a single NULL pointer.
+If the L parameter is NULL, then all virtual table modules are removed.</p>
+
+<p>See also: <a href="#sqlite3_create_module">sqlite3_create_module()</a>
+</p><hr><a name="sqlite3_enable_load_extension"></a>
+<h2>Enable Or Disable Extension Loading</h2>
+</div>
+<blockquote><pre>
+int sqlite3_enable_load_extension(sqlite3 *db, int onoff);
+</pre></blockquote>
+<p>
+So as not to open security holes in older applications that are
+unprepared to deal with <a href="loadext.html">extension loading</a>, and as a means of disabling
+<a href="loadext.html">extension loading</a> while evaluating user-entered SQL, the following API
+is provided to turn the <a href="#sqlite3_load_extension">sqlite3_load_extension()</a> mechanism on and off.</p>
+
+<p>Extension loading is off by default.
+Call the sqlite3_enable_load_extension() routine with onoff==1
+to turn extension loading on and call it with onoff==0 to turn
+it back off again.</p>
+
+<p>This interface enables or disables both the C-API
+<a href="#sqlite3_load_extension">sqlite3_load_extension()</a> and the SQL function <a href="lang_corefunc.html#load_extension">load_extension()</a>.
+Use <a href="#sqlite3_db_config">sqlite3_db_config</a>(db,<a href="#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a>,..)
+to enable or disable only the C-API.</p>
+
+<p><b>Security warning:</b> It is recommended that extension loading
+be enabled using the <a href="#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a> method
+rather than this interface, so the <a href="lang_corefunc.html#load_extension">load_extension()</a> SQL function
+remains disabled. This will prevent SQL injections from giving attackers
+access to extension loading capabilities.
+</p><hr><a name="sqlite3_enable_shared_cache"></a>
+<h2>Enable Or Disable Shared Pager Cache</h2>
+</div>
+<blockquote><pre>
+int sqlite3_enable_shared_cache(int);
+</pre></blockquote>
+<p>
+This routine enables or disables the sharing of the database cache
+and schema data structures between <a href="#sqlite3">connections</a>
+to the same database. Sharing is enabled if the argument is true
+and disabled if the argument is false.</p>
+
+<p>This interface is omitted if SQLite is compiled with
+<a href="compile.html#omit_shared_cache">-DSQLITE_OMIT_SHARED_CACHE</a>. The <a href="compile.html#omit_shared_cache">-DSQLITE_OMIT_SHARED_CACHE</a>
+compile-time option is recommended because the
+<a href="sharedcache.html#dontuse">use of shared cache mode is discouraged</a>.</p>
+
+<p>Cache sharing is enabled and disabled for an entire process.
+This is a change as of SQLite <a href="releaselog/3_5_0.html">version 3.5.0</a> (2007-09-04).
+In prior versions of SQLite,
+sharing was enabled or disabled for each thread separately.</p>
+
+<p>The cache sharing mode set by this interface effects all subsequent
+calls to <a href="#sqlite3_open">sqlite3_open()</a>, <a href="#sqlite3_open">sqlite3_open_v2()</a>, and <a href="#sqlite3_open">sqlite3_open16()</a>.
+Existing database connections continue to use the sharing mode
+that was in effect at the time they were opened.</p>
+
+<p>This routine returns <a href="#SQLITE_ABORT">SQLITE_OK</a> if shared cache was enabled or disabled
+successfully. An <a href="rescode.html">error code</a> is returned otherwise.</p>
+
+<p>Shared cache is disabled by default. It is recommended that it stay
+that way. In other words, do not use this routine. This interface
+continues to be provided for historical compatibility, but its use is
+discouraged. Any use of shared cache is discouraged. If shared cache
+must be used, it is recommended that shared cache only be enabled for
+individual database connections using the <a href="#sqlite3_open">sqlite3_open_v2()</a> interface
+with the <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_SHAREDCACHE</a> flag.</p>
+
+<p>Note: This method is disabled on MacOS X 10.7 and iOS version 5.0
+and will always return SQLITE_MISUSE. On those systems,
+shared cache mode should be enabled per-database connection via
+<a href="#sqlite3_open">sqlite3_open_v2()</a> with <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_SHAREDCACHE</a>.</p>
+
+<p>This interface is threadsafe on processors where writing a
+32-bit integer is atomic.</p>
+
+<p>See Also: <a href="sharedcache.html">SQLite Shared-Cache Mode</a>
+</p><hr><a name="sqlite3_exec"></a>
+<h2>One-Step Query Execution Interface</h2>
+</div>
+<blockquote><pre>
+int sqlite3_exec(
+ sqlite3*, /* An open database */
+ const char *sql, /* SQL to be evaluated */
+ int (*callback)(void*,int,char**,char**), /* Callback function */
+ void *, /* 1st argument to callback */
+ char **errmsg /* Error msg written here */
+);
+</pre></blockquote>
+<p>
+The sqlite3_exec() interface is a convenience wrapper around
+<a href="#sqlite3_prepare">sqlite3_prepare_v2()</a>, <a href="#sqlite3_step">sqlite3_step()</a>, and <a href="#sqlite3_finalize">sqlite3_finalize()</a>,
+that allows an application to run multiple statements of SQL
+without having to use a lot of C code.</p>
+
+<p>The sqlite3_exec() interface runs zero or more UTF-8 encoded,
+semicolon-separate SQL statements passed into its 2nd argument,
+in the context of the <a href="#sqlite3">database connection</a> passed in as its 1st
+argument. If the callback function of the 3rd argument to
+sqlite3_exec() is not NULL, then it is invoked for each result row
+coming out of the evaluated SQL statements. The 4th argument to
+sqlite3_exec() is relayed through to the 1st argument of each
+callback invocation. If the callback pointer to sqlite3_exec()
+is NULL, then no callback is ever invoked and result rows are
+ignored.</p>
+
+<p>If an error occurs while evaluating the SQL statements passed into
+sqlite3_exec(), then execution of the current statement stops and
+subsequent statements are skipped. If the 5th parameter to sqlite3_exec()
+is not NULL then any error message is written into memory obtained
+from <a href="#sqlite3_free">sqlite3_malloc()</a> and passed back through the 5th parameter.
+To avoid memory leaks, the application should invoke <a href="#sqlite3_free">sqlite3_free()</a>
+on error message strings returned through the 5th parameter of
+sqlite3_exec() after the error message string is no longer needed.
+If the 5th parameter to sqlite3_exec() is not NULL and no errors
+occur, then sqlite3_exec() sets the pointer in its 5th parameter to
+NULL before returning.</p>
+
+<p>If an sqlite3_exec() callback returns non-zero, the sqlite3_exec()
+routine returns SQLITE_ABORT without invoking the callback again and
+without running any subsequent SQL statements.</p>
+
+<p>The 2nd argument to the sqlite3_exec() callback function is the
+number of columns in the result. The 3rd argument to the sqlite3_exec()
+callback is an array of pointers to strings obtained as if from
+<a href="#sqlite3_column_blob">sqlite3_column_text()</a>, one for each column. If an element of a
+result row is NULL then the corresponding string pointer for the
+sqlite3_exec() callback is a NULL pointer. The 4th argument to the
+sqlite3_exec() callback is an array of pointers to strings where each
+entry represents the name of corresponding result column as obtained
+from <a href="#sqlite3_column_name">sqlite3_column_name()</a>.</p>
+
+<p>If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer
+to an empty string, or a pointer that contains only whitespace and/or
+SQL comments, then no SQL statements are evaluated and the database
+is not changed.</p>
+
+<p>Restrictions:</p>
+
+<p><ul>
+<li> The application must ensure that the 1st parameter to sqlite3_exec()
+is a valid and open <a href="#sqlite3">database connection</a>.
+<li> The application must not close the <a href="#sqlite3">database connection</a> specified by
+the 1st parameter to sqlite3_exec() while sqlite3_exec() is running.
+<li> The application must not modify the SQL statement text passed into
+the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running.
+</ul>
+</p><hr><a name="sqlite3_extended_result_codes"></a>
+<h2>Enable Or Disable Extended Result Codes</h2>
+</div>
+<blockquote><pre>
+int sqlite3_extended_result_codes(sqlite3*, int onoff);
+</pre></blockquote>
+<p>
+The sqlite3_extended_result_codes() routine enables or disables the
+<a href="rescode.html#extrc">extended result codes</a> feature of SQLite. The extended result
+codes are disabled by default for historical compatibility.
+</p><hr><a name="sqlite3_finalize"></a>
+<h2>Destroy A Prepared Statement Object</h2>
+</div>
+<blockquote><pre>
+int sqlite3_finalize(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+The sqlite3_finalize() function is called to delete a <a href="#sqlite3_stmt">prepared statement</a>.
+If the most recent evaluation of the statement encountered no errors
+or if the statement is never been evaluated, then sqlite3_finalize() returns
+SQLITE_OK. If the most recent evaluation of statement S failed, then
+sqlite3_finalize(S) returns the appropriate <a href="rescode.html">error code</a> or
+<a href="rescode.html#extrc">extended error code</a>.</p>
+
+<p>The sqlite3_finalize(S) routine can be called at any point during
+the life cycle of <a href="#sqlite3_stmt">prepared statement</a> S:
+before statement S is ever evaluated, after
+one or more calls to <a href="#sqlite3_reset">sqlite3_reset()</a>, or after any call
+to <a href="#sqlite3_step">sqlite3_step()</a> regardless of whether or not the statement has
+completed execution.</p>
+
+<p>Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op.</p>
+
+<p>The application must finalize every <a href="#sqlite3_stmt">prepared statement</a> in order to avoid
+resource leaks. It is a grievous error for the application to try to use
+a prepared statement after it has been finalized. Any use of a prepared
+statement after it has been finalized can result in undefined and
+undesirable behavior such as segfaults and heap corruption.
+</p><hr><a name="sqlite3_interrupt"></a>
+<h2>Interrupt A Long-Running Query</h2>
+</div>
+<blockquote><pre>
+void sqlite3_interrupt(sqlite3*);
+</pre></blockquote>
+<p>
+This function causes any pending database operation to abort and
+return at its earliest opportunity. This routine is typically
+called in response to a user action such as pressing "Cancel"
+or Ctrl-C where the user wants a long query operation to halt
+immediately.</p>
+
+<p>It is safe to call this routine from a thread different from the
+thread that is currently running the database operation. But it
+is not safe to call this routine with a <a href="#sqlite3">database connection</a> that
+is closed or might close before sqlite3_interrupt() returns.</p>
+
+<p>If an SQL operation is very nearly finished at the time when
+sqlite3_interrupt() is called, then it might not have an opportunity
+to be interrupted and might continue to completion.</p>
+
+<p>An SQL operation that is interrupted will return <a href="#SQLITE_ABORT">SQLITE_INTERRUPT</a>.
+If the interrupted SQL operation is an INSERT, UPDATE, or DELETE
+that is inside an explicit transaction, then the entire transaction
+will be rolled back automatically.</p>
+
+<p>The sqlite3_interrupt(D) call is in effect until all currently running
+SQL statements on <a href="#sqlite3">database connection</a> D complete. Any new SQL statements
+that are started after the sqlite3_interrupt() call and before the
+running statement count reaches zero are interrupted as if they had been
+running prior to the sqlite3_interrupt() call. New SQL statements
+that are started after the running statement count reaches zero are
+not effected by the sqlite3_interrupt().
+A call to sqlite3_interrupt(D) that occurs when there are no running
+SQL statements is a no-op and has no effect on SQL statements
+that are started after the sqlite3_interrupt() call returns.
+</p><hr><a name="sqlite3_last_insert_rowid"></a>
+<h2>Last Insert Rowid</h2>
+</div>
+<blockquote><pre>
+sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
+</pre></blockquote>
+<p>
+Each entry in most SQLite tables (except for <a href="withoutrowid.html">WITHOUT ROWID</a> tables)
+has a unique 64-bit signed
+integer key called the <a href="lang_createtable.html#rowid">"rowid"</a>. The rowid is always available
+as an undeclared column named ROWID, OID, or _ROWID_ as long as those
+names are not also used by explicitly declared columns. If
+the table has a column of type <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> then that column
+is another alias for the rowid.</p>
+
+<p>The sqlite3_last_insert_rowid(D) interface usually returns the <a href="lang_createtable.html#rowid">rowid</a> of
+the most recent successful <a href="lang_insert.html">INSERT</a> into a rowid table or <a href="vtab.html">virtual table</a>
+on database connection D. Inserts into <a href="withoutrowid.html">WITHOUT ROWID</a> tables are not
+recorded. If no successful <a href="lang_insert.html">INSERT</a>s into rowid tables have ever occurred
+on the database connection D, then sqlite3_last_insert_rowid(D) returns
+zero.</p>
+
+<p>As well as being set automatically as rows are inserted into database
+tables, the value returned by this function may be set explicitly by
+<a href="#sqlite3_set_last_insert_rowid">sqlite3_set_last_insert_rowid()</a></p>
+
+<p>Some virtual table implementations may INSERT rows into rowid tables as
+part of committing a transaction (e.g. to flush data accumulated in memory
+to disk). In this case subsequent calls to this function return the rowid
+associated with these internal INSERT operations, which leads to
+unintuitive results. Virtual table implementations that do write to rowid
+tables in this way can avoid this problem by restoring the original
+rowid value using <a href="#sqlite3_set_last_insert_rowid">sqlite3_set_last_insert_rowid()</a> before returning
+control to the user.</p>
+
+<p>If an <a href="lang_insert.html">INSERT</a> occurs within a trigger then this routine will
+return the <a href="lang_createtable.html#rowid">rowid</a> of the inserted row as long as the trigger is
+running. Once the trigger program ends, the value returned
+by this routine reverts to what it was before the trigger was fired.</p>
+
+<p>An <a href="lang_insert.html">INSERT</a> that fails due to a constraint violation is not a
+successful <a href="lang_insert.html">INSERT</a> and does not change the value returned by this
+routine. Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK,
+and INSERT OR ABORT make no changes to the return value of this
+routine when their insertion fails. When INSERT OR REPLACE
+encounters a constraint violation, it does not fail. The
+INSERT continues to completion after deleting rows that caused
+the constraint problem so INSERT OR REPLACE will always change
+the return value of this interface.</p>
+
+<p>For the purposes of this routine, an <a href="lang_insert.html">INSERT</a> is considered to
+be successful even if it is subsequently rolled back.</p>
+
+<p>This function is accessible to SQL statements via the
+<a href="lang_corefunc.html#last_insert_rowid">last_insert_rowid() SQL function</a>.</p>
+
+<p>If a separate thread performs a new <a href="lang_insert.html">INSERT</a> on the same
+database connection while the <a href="#sqlite3_last_insert_rowid">sqlite3_last_insert_rowid()</a>
+function is running and thus changes the last insert <a href="lang_createtable.html#rowid">rowid</a>,
+then the value returned by <a href="#sqlite3_last_insert_rowid">sqlite3_last_insert_rowid()</a> is
+unpredictable and might not equal either the old or the new
+last insert <a href="lang_createtable.html#rowid">rowid</a>.
+</p><hr><a name="sqlite3_limit"></a>
+<h2>Run-time Limits</h2>
+</div>
+<blockquote><pre>
+int sqlite3_limit(sqlite3*, int id, int newVal);
+</pre></blockquote>
+<p>
+This interface allows the size of various constructs to be limited
+on a connection by connection basis. The first parameter is the
+<a href="#sqlite3">database connection</a> whose limit is to be set or queried. The
+second parameter is one of the <a href="#SQLITE_LIMIT_ATTACHED">limit categories</a> that define a
+class of constructs to be size limited. The third parameter is the
+new limit for that construct.</p>
+
+<p>If the new limit is a negative number, the limit is unchanged.
+For each limit category SQLITE_LIMIT_<i>NAME</i> there is a
+<a href="limits.html">hard upper bound</a>
+set at compile-time by a C preprocessor macro called
+<a href="limits.html">SQLITE_MAX_<i>NAME</i></a>.
+(The "_LIMIT_" in the name is changed to "_MAX_".)
+Attempts to increase a limit above its hard upper bound are
+silently truncated to the hard upper bound.</p>
+
+<p>Regardless of whether or not the limit was changed, the
+<a href="#sqlite3_limit">sqlite3_limit()</a> interface returns the prior value of the limit.
+Hence, to find the current value of a limit without changing it,
+simply invoke this interface with the third parameter set to -1.</p>
+
+<p>Run-time limits are intended for use in applications that manage
+both their own internal database and also databases that are controlled
+by untrusted external sources. An example application might be a
+web browser that has its own databases for storing history and
+separate databases controlled by JavaScript applications downloaded
+off the Internet. The internal databases can be given the
+large, default limits. Databases managed by external sources can
+be given much smaller limits designed to prevent a denial of service
+attack. Developers might also want to use the <a href="#sqlite3_set_authorizer">sqlite3_set_authorizer()</a>
+interface to further control untrusted SQL. The size of the database
+created by an untrusted script can be contained using the
+<a href="pragma.html#pragma_max_page_count">max_page_count</a> <a href="pragma.html#syntax">PRAGMA</a>.</p>
+
+<p>New run-time limit categories may be added in future releases.
+</p><hr><a name="sqlite3_load_extension"></a>
+<h2>Load An Extension</h2>
+</div>
+<blockquote><pre>
+int sqlite3_load_extension(
+ sqlite3 *db, /* Load the extension into this database connection */
+ const char *zFile, /* Name of the shared library containing extension */
+ const char *zProc, /* Entry point. Derived from zFile if 0 */
+ char **pzErrMsg /* Put error message here if not 0 */
+);
+</pre></blockquote>
+<p>
+This interface loads an SQLite extension library from the named file.</p>
+
+<p>The sqlite3_load_extension() interface attempts to load an
+<a href="loadext.html">SQLite extension</a> library contained in the file zFile. If
+the file cannot be loaded directly, attempts are made to load
+with various operating-system specific extensions added.
+So for example, if "samplelib" cannot be loaded, then names like
+"samplelib.so" or "samplelib.dylib" or "samplelib.dll" might
+be tried also.</p>
+
+<p>The entry point is zProc.
+zProc may be 0, in which case SQLite will try to come up with an
+entry point name on its own. It first tries "sqlite3_extension_init".
+If that does not work, it constructs a name "sqlite3_X_init" where the
+X is consists of the lower-case equivalent of all ASCII alphabetic
+characters in the filename from the last "/" to the first following
+"." and omitting any initial "lib".
+The sqlite3_load_extension() interface returns
+<a href="#SQLITE_ABORT">SQLITE_OK</a> on success and <a href="#SQLITE_ABORT">SQLITE_ERROR</a> if something goes wrong.
+If an error occurs and pzErrMsg is not 0, then the
+<a href="#sqlite3_load_extension">sqlite3_load_extension()</a> interface shall attempt to
+fill *pzErrMsg with error message text stored in memory
+obtained from <a href="#sqlite3_free">sqlite3_malloc()</a>. The calling function
+should free this memory by calling <a href="#sqlite3_free">sqlite3_free()</a>.</p>
+
+<p>Extension loading must be enabled using
+<a href="#sqlite3_enable_load_extension">sqlite3_enable_load_extension()</a> or
+<a href="#sqlite3_db_config">sqlite3_db_config</a>(db,<a href="#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a>,1,NULL)
+prior to calling this API,
+otherwise an error will be returned.</p>
+
+<p><b>Security warning:</b> It is recommended that the
+<a href="#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a> method be used to enable only this
+interface. The use of the <a href="#sqlite3_enable_load_extension">sqlite3_enable_load_extension()</a> interface
+should be avoided. This will keep the SQL function <a href="lang_corefunc.html#load_extension">load_extension()</a>
+disabled and prevent SQL injections from giving attackers
+access to extension loading capabilities.</p>
+
+<p>See also the <a href="lang_corefunc.html#load_extension">load_extension() SQL function</a>.
+</p><hr><a name="sqlite3_log"></a>
+<h2>Error Logging Interface</h2>
+</div>
+<blockquote><pre>
+void sqlite3_log(int iErrCode, const char *zFormat, ...);
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_log">sqlite3_log()</a> interface writes a message into the <a href="errlog.html">error log</a>
+established by the <a href="#sqliteconfiglog">SQLITE_CONFIG_LOG</a> option to <a href="#sqlite3_config">sqlite3_config()</a>.
+If logging is enabled, the zFormat string and subsequent arguments are
+used with <a href="#sqlite3_mprintf">sqlite3_snprintf()</a> to generate the final output string.</p>
+
+<p>The sqlite3_log() interface is intended for use by extensions such as
+virtual tables, collating functions, and SQL functions. While there is
+nothing to prevent an application from calling sqlite3_log(), doing so
+is considered bad form.</p>
+
+<p>The zFormat string must not be NULL.</p>
+
+<p>To avoid deadlocks and other threading problems, the sqlite3_log() routine
+will not use dynamically allocated memory. The log message is stored in
+a fixed-length buffer on the stack. If the log message is longer than
+a few hundred characters, it will be truncated to the length of the
+buffer.
+</p><hr><a name="sqlite3_next_stmt"></a>
+<h2>Find the next prepared statement</h2>
+</div>
+<blockquote><pre>
+sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+This interface returns a pointer to the next <a href="#sqlite3_stmt">prepared statement</a> after
+pStmt associated with the <a href="#sqlite3">database connection</a> pDb. If pStmt is NULL
+then this interface returns a pointer to the first prepared statement
+associated with the database connection pDb. If no prepared statement
+satisfies the conditions of this routine, it returns NULL.</p>
+
+<p>The <a href="#sqlite3">database connection</a> pointer D in a call to
+<a href="#sqlite3_next_stmt">sqlite3_next_stmt(D,S)</a> must refer to an open database
+connection and in particular must not be a NULL pointer.
+</p><hr><a name="sqlite3_overload_function"></a>
+<h2>Overload A Function For A Virtual Table</h2>
+</div>
+<blockquote><pre>
+int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
+</pre></blockquote>
+<p>
+Virtual tables can provide alternative implementations of functions
+using the <a href="vtab.html#xfindfunction">xFindFunction</a> method of the <a href="#sqlite3_module">virtual table module</a>.
+But global versions of those functions
+must exist in order to be overloaded.</p>
+
+<p>This API makes sure a global version of a function with a particular
+name and number of parameters exists. If no such function exists
+before this API is called, a new function is created. The implementation
+of the new function always causes an exception to be thrown. So
+the new function is not good for anything by itself. Its only
+purpose is to be a placeholder function that can be overloaded
+by a <a href="vtab.html">virtual table</a>.
+</p><hr><a name="sqlite3_progress_handler"></a>
+<h2>Query Progress Callbacks</h2>
+</div>
+<blockquote><pre>
+void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
+</pre></blockquote>
+<p>
+The sqlite3_progress_handler(D,N,X,P) interface causes the callback
+function X to be invoked periodically during long running calls to
+<a href="#sqlite3_exec">sqlite3_exec()</a>, <a href="#sqlite3_step">sqlite3_step()</a> and <a href="#sqlite3_free_table">sqlite3_get_table()</a> for
+database connection D. An example use for this
+interface is to keep a GUI updated during a large query.</p>
+
+<p>The parameter P is passed through as the only parameter to the
+callback function X. The parameter N is the approximate number of
+<a href="opcode.html">virtual machine instructions</a> that are evaluated between successive
+invocations of the callback X. If N is less than one then the progress
+handler is disabled.</p>
+
+<p>Only a single progress handler may be defined at one time per
+<a href="#sqlite3">database connection</a>; setting a new progress handler cancels the
+old one. Setting parameter X to NULL disables the progress handler.
+The progress handler is also disabled by setting N to a value less
+than 1.</p>
+
+<p>If the progress callback returns non-zero, the operation is
+interrupted. This feature can be used to implement a
+"Cancel" button on a GUI progress dialog box.</p>
+
+<p>The progress handler callback must not do anything that will modify
+the database connection that invoked the progress handler.
+Note that <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> and <a href="#sqlite3_step">sqlite3_step()</a> both modify their
+database connections for the meaning of "modify" in this paragraph.</p>
+
+<p></p><hr><a name="sqlite3_randomness"></a>
+<h2>Pseudo-Random Number Generator</h2>
+</div>
+<blockquote><pre>
+void sqlite3_randomness(int N, void *P);
+</pre></blockquote>
+<p>
+SQLite contains a high-quality pseudo-random number generator (PRNG) used to
+select random <a href="lang_createtable.html#rowid">ROWIDs</a> when inserting new records into a table that
+already uses the largest possible <a href="lang_createtable.html#rowid">ROWID</a>. The PRNG is also used for
+the built-in random() and randomblob() SQL functions. This interface allows
+applications to access the same PRNG for other purposes.</p>
+
+<p>A call to this routine stores N bytes of randomness into buffer P.
+The P parameter can be a NULL pointer.</p>
+
+<p>If this routine has not been previously called or if the previous
+call had N less than one or a NULL pointer for P, then the PRNG is
+seeded using randomness obtained from the xRandomness method of
+the default <a href="#sqlite3_vfs">sqlite3_vfs</a> object.
+If the previous call to this routine had an N of 1 or more and a
+non-NULL P then the pseudo-randomness is generated
+internally and without recourse to the <a href="#sqlite3_vfs">sqlite3_vfs</a> xRandomness
+method.
+</p><hr><a name="sqlite3_release_memory"></a>
+<h2>Attempt To Free Heap Memory</h2>
+</div>
+<blockquote><pre>
+int sqlite3_release_memory(int);
+</pre></blockquote>
+<p>
+The sqlite3_release_memory() interface attempts to free N bytes
+of heap memory by deallocating non-essential memory allocations
+held by the database library. Memory used to cache database
+pages to improve performance is an example of non-essential memory.
+sqlite3_release_memory() returns the number of bytes actually freed,
+which might be more or less than the amount requested.
+The sqlite3_release_memory() routine is a no-op returning zero
+if SQLite is not compiled with <a href="compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a>.</p>
+
+<p>See also: <a href="#sqlite3_db_release_memory">sqlite3_db_release_memory()</a>
+</p><hr><a name="sqlite3_reset"></a>
+<h2>Reset A Prepared Statement Object</h2>
+</div>
+<blockquote><pre>
+int sqlite3_reset(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+The sqlite3_reset() function is called to reset a <a href="#sqlite3_stmt">prepared statement</a>
+object back to its initial state, ready to be re-executed.
+Any SQL statement variables that had values bound to them using
+the <a href="#sqlite3_bind_blob">sqlite3_bind_*() API</a> retain their values.
+Use <a href="#sqlite3_clear_bindings">sqlite3_clear_bindings()</a> to reset the bindings.</p>
+
+<p>The <a href="#sqlite3_reset">sqlite3_reset(S)</a> interface resets the <a href="#sqlite3_stmt">prepared statement</a> S
+back to the beginning of its program.</p>
+
+<p>If the most recent call to <a href="#sqlite3_step">sqlite3_step(S)</a> for the
+<a href="#sqlite3_stmt">prepared statement</a> S returned <a href="#SQLITE_ABORT">SQLITE_ROW</a> or <a href="#SQLITE_ABORT">SQLITE_DONE</a>,
+or if <a href="#sqlite3_step">sqlite3_step(S)</a> has never before been called on S,
+then <a href="#sqlite3_reset">sqlite3_reset(S)</a> returns <a href="#SQLITE_ABORT">SQLITE_OK</a>.</p>
+
+<p>If the most recent call to <a href="#sqlite3_step">sqlite3_step(S)</a> for the
+<a href="#sqlite3_stmt">prepared statement</a> S indicated an error, then
+<a href="#sqlite3_reset">sqlite3_reset(S)</a> returns an appropriate <a href="rescode.html">error code</a>.</p>
+
+<p>The <a href="#sqlite3_reset">sqlite3_reset(S)</a> interface does not change the values
+of any <a href="#sqlite3_bind_blob">bindings</a> on the <a href="#sqlite3_stmt">prepared statement</a> S.
+</p><hr><a name="sqlite3_reset_auto_extension"></a>
+<h2>Reset Automatic Extension Loading</h2>
+</div>
+<blockquote><pre>
+void sqlite3_reset_auto_extension(void);
+</pre></blockquote>
+<p>
+This interface disables all automatic extensions previously
+registered using <a href="#sqlite3_auto_extension">sqlite3_auto_extension()</a>.
+</p><hr><a name="sqlite3_result_subtype"></a>
+<h2>Setting The Subtype Of An SQL Function</h2>
+</div>
+<blockquote><pre>
+void sqlite3_result_subtype(sqlite3_context*,unsigned int);
+</pre></blockquote>
+<p>
+The sqlite3_result_subtype(C,T) function causes the subtype of
+the result from the <a href="appfunc.html">application-defined SQL function</a> with
+<a href="#sqlite3_context">sqlite3_context</a> C to be the value T. Only the lower 8 bits
+of the subtype T are preserved in current versions of SQLite;
+higher order bits are discarded.
+The number of subtype bytes preserved by SQLite might increase
+in future releases of SQLite.
+</p><hr><a name="sqlite3_serialize"></a>
+<h2>Serialize a database</h2>
+</div>
+<blockquote><pre>
+unsigned char *sqlite3_serialize(
+ sqlite3 *db, /* The database connection */
+ const char *zSchema, /* Which DB to serialize. ex: "main", "temp", ... */
+ sqlite3_int64 *piSize, /* Write size of the DB here, if not NULL */
+ unsigned int mFlags /* Zero or more SQLITE_SERIALIZE_* flags */
+);
+</pre></blockquote>
+<p>
+The sqlite3_serialize(D,S,P,F) interface returns a pointer to memory
+that is a serialization of the S database on <a href="#sqlite3">database connection</a> D.
+If P is not a NULL pointer, then the size of the database in bytes
+is written into *P.</p>
+
+<p>For an ordinary on-disk database file, the serialization is just a
+copy of the disk file. For an in-memory database or a "TEMP" database,
+the serialization is the same sequence of bytes which would be written
+to disk if that database where backed up to disk.</p>
+
+<p>The usual case is that sqlite3_serialize() copies the serialization of
+the database into memory obtained from <a href="#sqlite3_free">sqlite3_malloc64()</a> and returns
+a pointer to that memory. The caller is responsible for freeing the
+returned value to avoid a memory leak. However, if the F argument
+contains the SQLITE_SERIALIZE_NOCOPY bit, then no memory allocations
+are made, and the sqlite3_serialize() function will return a pointer
+to the contiguous memory representation of the database that SQLite
+is currently using for that database, or NULL if the no such contiguous
+memory representation of the database exists. A contiguous memory
+representation of the database will usually only exist if there has
+been a prior call to <a href="#sqlite3_deserialize">sqlite3_deserialize(D,S,...)</a> with the same
+values of D and S.
+The size of the database is written into *P even if the
+SQLITE_SERIALIZE_NOCOPY bit is set but no contiguous copy
+of the database exists.</p>
+
+<p>A call to sqlite3_serialize(D,S,P,F) might return NULL even if the
+SQLITE_SERIALIZE_NOCOPY bit is omitted from argument F if a memory
+allocation error occurs.</p>
+
+<p>This interface is omitted if SQLite is compiled with the
+<a href="compile.html#omit_deserialize">SQLITE_OMIT_DESERIALIZE</a> option.
+</p><hr><a name="sqlite3_set_last_insert_rowid"></a>
+<h2>Set the Last Insert Rowid value.</h2>
+</div>
+<blockquote><pre>
+void sqlite3_set_last_insert_rowid(sqlite3*,sqlite3_int64);
+</pre></blockquote>
+<p>
+The sqlite3_set_last_insert_rowid(D, R) method allows the application to
+set the value returned by calling sqlite3_last_insert_rowid(D) to R
+without inserting a row into the database.
+</p><hr><a name="sqlite3_sleep"></a>
+<h2>Suspend Execution For A Short Time</h2>
+</div>
+<blockquote><pre>
+int sqlite3_sleep(int);
+</pre></blockquote>
+<p>
+The sqlite3_sleep() function causes the current thread to suspend execution
+for at least a number of milliseconds specified in its parameter.</p>
+
+<p>If the operating system does not support sleep requests with
+millisecond time resolution, then the time will be rounded up to
+the nearest second. The number of milliseconds of sleep actually
+requested from the operating system is returned.</p>
+
+<p>SQLite implements this interface by calling the xSleep()
+method of the default <a href="#sqlite3_vfs">sqlite3_vfs</a> object. If the xSleep() method
+of the default VFS is not implemented correctly, or not implemented at
+all, then the behavior of sqlite3_sleep() may deviate from the description
+in the previous paragraphs.
+</p><hr><a name="sqlite3_snapshot_cmp"></a>
+<h2>Compare the ages of two snapshot handles.</h2>
+</div>
+<blockquote><pre>
+int sqlite3_snapshot_cmp(
+ sqlite3_snapshot *p1,
+ sqlite3_snapshot *p2
+);
+</pre></blockquote>
+<p>
+The sqlite3_snapshot_cmp(P1, P2) interface is used to compare the ages
+of two valid snapshot handles.</p>
+
+<p>If the two snapshot handles are not associated with the same database
+file, the result of the comparison is undefined.</p>
+
+<p>Additionally, the result of the comparison is only valid if both of the
+snapshot handles were obtained by calling sqlite3_snapshot_get() since the
+last time the wal file was deleted. The wal file is deleted when the
+database is changed back to rollback mode or when the number of database
+clients drops to zero. If either snapshot handle was obtained before the
+wal file was last deleted, the value returned by this function
+is undefined.</p>
+
+<p>Otherwise, this API returns a negative value if P1 refers to an older
+snapshot than P2, zero if the two handles refer to the same database
+snapshot, and a positive value if P1 is a newer snapshot than P2.</p>
+
+<p>This interface is only available if SQLite is compiled with the
+<a href="compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> option.
+</p><hr><a name="sqlite3_snapshot_free"></a>
+<h2>Destroy a snapshot</h2>
+</div>
+<blockquote><pre>
+void sqlite3_snapshot_free(sqlite3_snapshot*);
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_snapshot_free">sqlite3_snapshot_free(P)</a> interface destroys <a href="#sqlite3_snapshot">sqlite3_snapshot</a> P.
+The application must eventually free every <a href="#sqlite3_snapshot">sqlite3_snapshot</a> object
+using this routine to avoid a memory leak.</p>
+
+<p>The <a href="#sqlite3_snapshot_free">sqlite3_snapshot_free()</a> interface is only available when the
+<a href="compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> compile-time option is used.
+</p><hr><a name="sqlite3_snapshot_get"></a>
+<h2>Record A Database Snapshot</h2>
+</div>
+<blockquote><pre>
+int sqlite3_snapshot_get(
+ sqlite3 *db,
+ const char *zSchema,
+ sqlite3_snapshot **ppSnapshot
+);
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_snapshot_get">sqlite3_snapshot_get(D,S,P)</a> interface attempts to make a
+new <a href="#sqlite3_snapshot">sqlite3_snapshot</a> object that records the current state of
+schema S in database connection D. On success, the
+<a href="#sqlite3_snapshot_get">sqlite3_snapshot_get(D,S,P)</a> interface writes a pointer to the newly
+created <a href="#sqlite3_snapshot">sqlite3_snapshot</a> object into *P and returns SQLITE_OK.
+If there is not already a read-transaction open on schema S when
+this function is called, one is opened automatically.</p>
+
+<p>The following must be true for this function to succeed. If any of
+the following statements are false when sqlite3_snapshot_get() is
+called, SQLITE_ERROR is returned. The final value of *P is undefined
+in this case.</p>
+
+<p><ul>
+<li> The database handle must not be in <a href="#sqlite3_get_autocommit">autocommit mode</a>.</p>
+
+<p><li> Schema S of <a href="#sqlite3">database connection</a> D must be a <a href="wal.html">WAL mode</a> database.</p>
+
+<p><li> There must not be a write transaction open on schema S of database
+connection D.</p>
+
+<p><li> One or more transactions must have been written to the current wal
+file since it was created on disk (by any connection). This means
+that a snapshot cannot be taken on a wal mode database with no wal
+file immediately after it is first opened. At least one transaction
+must be written to it first.
+</ul></p>
+
+<p>This function may also return SQLITE_NOMEM. If it is called with the
+database handle in autocommit mode but fails for some other reason,
+whether or not a read transaction is opened on schema S is undefined.</p>
+
+<p>The <a href="#sqlite3_snapshot">sqlite3_snapshot</a> object returned from a successful call to
+<a href="#sqlite3_snapshot_get">sqlite3_snapshot_get()</a> must be freed using <a href="#sqlite3_snapshot_free">sqlite3_snapshot_free()</a>
+to avoid a memory leak.</p>
+
+<p>The <a href="#sqlite3_snapshot_get">sqlite3_snapshot_get()</a> interface is only available when the
+<a href="compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> compile-time option is used.
+</p><hr><a name="sqlite3_snapshot_open"></a>
+<h2>Start a read transaction on an historical snapshot</h2>
+</div>
+<blockquote><pre>
+int sqlite3_snapshot_open(
+ sqlite3 *db,
+ const char *zSchema,
+ sqlite3_snapshot *pSnapshot
+);
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_snapshot_open">sqlite3_snapshot_open(D,S,P)</a> interface either starts a new read
+transaction or upgrades an existing one for schema S of
+<a href="#sqlite3">database connection</a> D such that the read transaction refers to
+historical <a href="#sqlite3_snapshot">snapshot</a> P, rather than the most recent change to the
+database. The <a href="#sqlite3_snapshot_open">sqlite3_snapshot_open()</a> interface returns SQLITE_OK
+on success or an appropriate <a href="rescode.html">error code</a> if it fails.</p>
+
+<p>In order to succeed, the database connection must not be in
+<a href="#sqlite3_get_autocommit">autocommit mode</a> when <a href="#sqlite3_snapshot_open">sqlite3_snapshot_open(D,S,P)</a> is called. If there
+is already a read transaction open on schema S, then the database handle
+must have no active statements (SELECT statements that have been passed
+to sqlite3_step() but not sqlite3_reset() or sqlite3_finalize()).
+SQLITE_ERROR is returned if either of these conditions is violated, or
+if schema S does not exist, or if the snapshot object is invalid.</p>
+
+<p>A call to sqlite3_snapshot_open() will fail to open if the specified
+snapshot has been overwritten by a <a href="wal.html#ckpt">checkpoint</a>. In this case
+SQLITE_ERROR_SNAPSHOT is returned.</p>
+
+<p>If there is already a read transaction open when this function is
+invoked, then the same read transaction remains open (on the same
+database snapshot) if SQLITE_ERROR, SQLITE_BUSY or SQLITE_ERROR_SNAPSHOT
+is returned. If another error code - for example SQLITE_PROTOCOL or an
+SQLITE_IOERR error code - is returned, then the final state of the
+read transaction is undefined. If SQLITE_OK is returned, then the
+read transaction is now open on database snapshot P.</p>
+
+<p>A call to <a href="#sqlite3_snapshot_open">sqlite3_snapshot_open(D,S,P)</a> will fail if the
+database connection D does not know that the database file for
+schema S is in <a href="wal.html">WAL mode</a>. A database connection might not know
+that the database file is in <a href="wal.html">WAL mode</a> if there has been no prior
+I/O on that database connection, or if the database entered <a href="wal.html">WAL mode</a>
+after the most recent I/O on the database connection.
+(Hint: Run "<a href="pragma.html#pragma_application_id">PRAGMA application_id</a>" against a newly opened
+database connection in order to make it ready to use snapshots.)</p>
+
+<p>The <a href="#sqlite3_snapshot_open">sqlite3_snapshot_open()</a> interface is only available when the
+<a href="compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> compile-time option is used.
+</p><hr><a name="sqlite3_snapshot_recover"></a>
+<h2>Recover snapshots from a wal file</h2>
+</div>
+<blockquote><pre>
+int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb);
+</pre></blockquote>
+<p>
+If a <a href="wal.html#walfile">WAL file</a> remains on disk after all database connections close
+(either through the use of the <a href="#sqlitefcntlpersistwal">SQLITE_FCNTL_PERSIST_WAL</a> <a href="#sqlite3_file_control">file control</a>
+or because the last process to have the database opened exited without
+calling <a href="#sqlite3_close">sqlite3_close()</a>) and a new connection is subsequently opened
+on that database and <a href="wal.html#walfile">WAL file</a>, the <a href="#sqlite3_snapshot_open">sqlite3_snapshot_open()</a> interface
+will only be able to open the last transaction added to the WAL file
+even though the WAL file contains other valid transactions.</p>
+
+<p>This function attempts to scan the WAL file associated with database zDb
+of database handle db and make all valid snapshots available to
+sqlite3_snapshot_open(). It is an error if there is already a read
+transaction open on the database, or if the database is not a WAL mode
+database.</p>
+
+<p>SQLITE_OK is returned if successful, or an SQLite error code otherwise.</p>
+
+<p>This interface is only available if SQLite is compiled with the
+<a href="compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> option.
+</p><hr><a name="sqlite3_soft_heap_limit"></a>
+<h2>Deprecated Soft Heap Limit Interface</h2>
+</div>
+<blockquote><pre>
+void sqlite3_soft_heap_limit(int N);
+</pre></blockquote>
+<p>
+This is a deprecated version of the <a href="#sqlite3_hard_heap_limit64">sqlite3_soft_heap_limit64()</a>
+interface. This routine is provided for historical compatibility
+only. All new applications should use the
+<a href="#sqlite3_hard_heap_limit64">sqlite3_soft_heap_limit64()</a> interface rather than this one.
+</p><hr><a name="sqlite3_step"></a>
+<h2>Evaluate An SQL Statement</h2>
+</div>
+<blockquote><pre>
+int sqlite3_step(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+After a <a href="#sqlite3_stmt">prepared statement</a> has been prepared using any of
+<a href="#sqlite3_prepare">sqlite3_prepare_v2()</a>, <a href="#sqlite3_prepare">sqlite3_prepare_v3()</a>, <a href="#sqlite3_prepare">sqlite3_prepare16_v2()</a>,
+or <a href="#sqlite3_prepare">sqlite3_prepare16_v3()</a> or one of the legacy
+interfaces <a href="#sqlite3_prepare">sqlite3_prepare()</a> or <a href="#sqlite3_prepare">sqlite3_prepare16()</a>, this function
+must be called one or more times to evaluate the statement.</p>
+
+<p>The details of the behavior of the sqlite3_step() interface depend
+on whether the statement was prepared using the newer "vX" interfaces
+<a href="#sqlite3_prepare">sqlite3_prepare_v3()</a>, <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a>, <a href="#sqlite3_prepare">sqlite3_prepare16_v3()</a>,
+<a href="#sqlite3_prepare">sqlite3_prepare16_v2()</a> or the older legacy
+interfaces <a href="#sqlite3_prepare">sqlite3_prepare()</a> and <a href="#sqlite3_prepare">sqlite3_prepare16()</a>. The use of the
+new "vX" interface is recommended for new applications but the legacy
+interface will continue to be supported.</p>
+
+<p>In the legacy interface, the return value will be either <a href="#SQLITE_ABORT">SQLITE_BUSY</a>,
+<a href="#SQLITE_ABORT">SQLITE_DONE</a>, <a href="#SQLITE_ABORT">SQLITE_ROW</a>, <a href="#SQLITE_ABORT">SQLITE_ERROR</a>, or <a href="#SQLITE_ABORT">SQLITE_MISUSE</a>.
+With the "v2" interface, any of the other <a href="rescode.html">result codes</a> or
+<a href="rescode.html#extrc">extended result codes</a> might be returned as well.</p>
+
+<p><a href="#SQLITE_ABORT">SQLITE_BUSY</a> means that the database engine was unable to acquire the
+database locks it needs to do its job. If the statement is a <a href="lang_transaction.html">COMMIT</a>
+or occurs outside of an explicit transaction, then you can retry the
+statement. If the statement is not a <a href="lang_transaction.html">COMMIT</a> and occurs within an
+explicit transaction then you should rollback the transaction before
+continuing.</p>
+
+<p><a href="#SQLITE_ABORT">SQLITE_DONE</a> means that the statement has finished executing
+successfully. sqlite3_step() should not be called again on this virtual
+machine without first calling <a href="#sqlite3_reset">sqlite3_reset()</a> to reset the virtual
+machine back to its initial state.</p>
+
+<p>If the SQL statement being executed returns any data, then <a href="#SQLITE_ABORT">SQLITE_ROW</a>
+is returned each time a new row of data is ready for processing by the
+caller. The values may be accessed using the <a href="#sqlite3_column_blob">column access functions</a>.
+sqlite3_step() is called again to retrieve the next row of data.</p>
+
+<p><a href="#SQLITE_ABORT">SQLITE_ERROR</a> means that a run-time error (such as a constraint
+violation) has occurred. sqlite3_step() should not be called again on
+the VM. More information may be found by calling <a href="#sqlite3_errcode">sqlite3_errmsg()</a>.
+With the legacy interface, a more specific error code (for example,
+<a href="#SQLITE_ABORT">SQLITE_INTERRUPT</a>, <a href="#SQLITE_ABORT">SQLITE_SCHEMA</a>, <a href="#SQLITE_ABORT">SQLITE_CORRUPT</a>, and so forth)
+can be obtained by calling <a href="#sqlite3_reset">sqlite3_reset()</a> on the
+<a href="#sqlite3_stmt">prepared statement</a>. In the "v2" interface,
+the more specific error code is returned directly by sqlite3_step().</p>
+
+<p><a href="#SQLITE_ABORT">SQLITE_MISUSE</a> means that the this routine was called inappropriately.
+Perhaps it was called on a <a href="#sqlite3_stmt">prepared statement</a> that has
+already been <a href="#sqlite3_finalize">finalized</a> or on one that had
+previously returned <a href="#SQLITE_ABORT">SQLITE_ERROR</a> or <a href="#SQLITE_ABORT">SQLITE_DONE</a>. Or it could
+be the case that the same database connection is being used by two or
+more threads at the same moment in time.</p>
+
+<p>For all versions of SQLite up to and including 3.6.23.1, a call to
+<a href="#sqlite3_reset">sqlite3_reset()</a> was required after sqlite3_step() returned anything
+other than <a href="#SQLITE_ABORT">SQLITE_ROW</a> before any subsequent invocation of
+sqlite3_step(). Failure to reset the prepared statement using
+<a href="#sqlite3_reset">sqlite3_reset()</a> would result in an <a href="#SQLITE_ABORT">SQLITE_MISUSE</a> return from
+sqlite3_step(). But after <a href="releaselog/3_6_23_1.html">version 3.6.23.1</a> (2010-03-26,
+sqlite3_step() began
+calling <a href="#sqlite3_reset">sqlite3_reset()</a> automatically in this circumstance rather
+than returning <a href="#SQLITE_ABORT">SQLITE_MISUSE</a>. This is not considered a compatibility
+break because any application that ever receives an SQLITE_MISUSE error
+is broken by definition. The <a href="compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a> compile-time option
+can be used to restore the legacy behavior.</p>
+
+<p><b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step()
+API always returns a generic error code, <a href="#SQLITE_ABORT">SQLITE_ERROR</a>, following any
+error other than <a href="#SQLITE_ABORT">SQLITE_BUSY</a> and <a href="#SQLITE_ABORT">SQLITE_MISUSE</a>. You must call
+<a href="#sqlite3_reset">sqlite3_reset()</a> or <a href="#sqlite3_finalize">sqlite3_finalize()</a> in order to find one of the
+specific <a href="rescode.html">error codes</a> that better describes the error.
+We admit that this is a goofy design. The problem has been fixed
+with the "v2" interface. If you prepare all of your SQL statements
+using <a href="#sqlite3_prepare">sqlite3_prepare_v3()</a> or <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a>
+or <a href="#sqlite3_prepare">sqlite3_prepare16_v2()</a> or <a href="#sqlite3_prepare">sqlite3_prepare16_v3()</a> instead
+of the legacy <a href="#sqlite3_prepare">sqlite3_prepare()</a> and <a href="#sqlite3_prepare">sqlite3_prepare16()</a> interfaces,
+then the more specific <a href="rescode.html">error codes</a> are returned directly
+by sqlite3_step(). The use of the "vX" interfaces is recommended.
+</p><hr><a name="sqlite3_stmt_busy"></a>
+<h2>Determine If A Prepared Statement Has Been Reset</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_busy(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+The sqlite3_stmt_busy(S) interface returns true (non-zero) if the
+<a href="#sqlite3_stmt">prepared statement</a> S has been stepped at least once using
+<a href="#sqlite3_step">sqlite3_step(S)</a> but has neither run to completion (returned
+<a href="#SQLITE_ABORT">SQLITE_DONE</a> from <a href="#sqlite3_step">sqlite3_step(S)</a>) nor
+been reset using <a href="#sqlite3_reset">sqlite3_reset(S)</a>. The sqlite3_stmt_busy(S)
+interface returns false if S is a NULL pointer. If S is not a
+NULL pointer and is not a pointer to a valid <a href="#sqlite3_stmt">prepared statement</a>
+object, then the behavior is undefined and probably undesirable.</p>
+
+<p>This interface can be used in combination <a href="#sqlite3_next_stmt">sqlite3_next_stmt()</a>
+to locate all prepared statements associated with a database
+connection that are in need of being reset. This can be used,
+for example, in diagnostic routines to search for prepared
+statements that are holding a transaction open.
+</p><hr><a name="sqlite3_stmt_isexplain"></a>
+<h2>Query The EXPLAIN Setting For A Prepared Statement</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+The sqlite3_stmt_isexplain(S) interface returns 1 if the
+prepared statement S is an EXPLAIN statement, or 2 if the
+statement S is an EXPLAIN QUERY PLAN.
+The sqlite3_stmt_isexplain(S) interface returns 0 if S is
+an ordinary statement or a NULL pointer.
+</p><hr><a name="sqlite3_stmt_readonly"></a>
+<h2>Determine If An SQL Statement Writes The Database</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
+</pre></blockquote>
+<p>
+The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
+and only if the <a href="#sqlite3_stmt">prepared statement</a> X makes no direct changes to
+the content of the database file.</p>
+
+<p>Note that <a href="appfunc.html">application-defined SQL functions</a> or
+<a href="vtab.html">virtual tables</a> might change the database indirectly as a side effect.
+For example, if an application defines a function "eval()" that
+calls <a href="#sqlite3_exec">sqlite3_exec()</a>, then the following SQL statement would
+change the database file through side-effects:</p>
+
+<p><blockquote><pre>
+SELECT eval('DELETE FROM t1') FROM t2;
+</pre></blockquote></p>
+
+<p>But because the <a href="lang_select.html">SELECT</a> statement does not change the database file
+directly, sqlite3_stmt_readonly() would still return true.</p>
+
+<p>Transaction control statements such as <a href="lang_transaction.html">BEGIN</a>, <a href="lang_transaction.html">COMMIT</a>, <a href="lang_transaction.html">ROLLBACK</a>,
+<a href="lang_savepoint.html">SAVEPOINT</a>, and <a href="lang_savepoint.html">RELEASE</a> cause sqlite3_stmt_readonly() to return true,
+since the statements themselves do not actually modify the database but
+rather they control the timing of when other statements modify the
+database. The <a href="lang_attach.html">ATTACH</a> and <a href="lang_detach.html">DETACH</a> statements also cause
+sqlite3_stmt_readonly() to return true since, while those statements
+change the configuration of a database connection, they do not make
+changes to the content of the database files on disk.
+The sqlite3_stmt_readonly() interface returns true for <a href="lang_transaction.html">BEGIN</a> since
+<a href="lang_transaction.html">BEGIN</a> merely sets internal flags, but the <a href="lang_transaction.html">BEGIN IMMEDIATE</a> and
+<a href="lang_transaction.html">BEGIN EXCLUSIVE</a> commands do touch the database and so
+sqlite3_stmt_readonly() returns false for those commands.</p>
+
+<p>This routine returns false if there is any possibility that the
+statement might change the database file. A false return does
+not guarantee that the statement will change the database file.
+For example, an UPDATE statement might have a WHERE clause that
+makes it a no-op, but the sqlite3_stmt_readonly() result would still
+be false. Similarly, a CREATE TABLE IF NOT EXISTS statement is a
+read-only no-op if the table already exists, but
+sqlite3_stmt_readonly() still returns false for such a statement.</p>
+
+<p>If prepared statement X is an <a href="lang_explain.html">EXPLAIN</a> or <a href="eqp.html">EXPLAIN QUERY PLAN</a>
+statement, then sqlite3_stmt_readonly(X) returns the same value as
+if the EXPLAIN or EXPLAIN QUERY PLAN prefix were omitted.
+</p><hr><a name="sqlite3_stmt_scanstatus"></a>
+<h2>Prepared Statement Scan Status</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_scanstatus(
+ sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
+ int idx, /* Index of loop to report on */
+ int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
+ void *pOut /* Result written here */
+);
+</pre></blockquote>
+<p>
+This interface returns information about the predicted and measured
+performance for pStmt. Advanced applications can use this
+interface to compare the predicted and the measured performance and
+issue warnings and/or rerun <a href="lang_analyze.html">ANALYZE</a> if discrepancies are found.</p>
+
+<p>Since this interface is expected to be rarely used, it is only
+available if SQLite is compiled using the <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>
+compile-time option.</p>
+
+<p>The "iScanStatusOp" parameter determines which status information to return.
+The "iScanStatusOp" must be one of the <a href="#SQLITE_SCANSTAT_EST">scanstatus options</a> or the behavior
+of this interface is undefined.
+The requested measurement is written into a variable pointed to by
+the "pOut" parameter.
+Parameter "idx" identifies the specific loop to retrieve statistics for.
+Loops are numbered starting from zero. If idx is out of range - less than
+zero or greater than or equal to the total number of loops used to implement
+the statement - a non-zero value is returned and the variable that pOut
+points to is unchanged.</p>
+
+<p>Statistics might not be available for all loops in all statements. In cases
+where there exist loops with no available statistics, this function behaves
+as if the loop did not exist - it returns non-zero and leave the variable
+that pOut points to unchanged.</p>
+
+<p>See also: <a href="#sqlite3_stmt_scanstatus_reset">sqlite3_stmt_scanstatus_reset()</a>
+</p><hr><a name="sqlite3_stmt_scanstatus_reset"></a>
+<h2>Zero Scan-Status Counters</h2>
+</div>
+<blockquote><pre>
+void sqlite3_stmt_scanstatus_reset(sqlite3_stmt*);
+</pre></blockquote>
+<p>
+Zero all <a href="#sqlite3_stmt_scanstatus">sqlite3_stmt_scanstatus()</a> related event counters.</p>
+
+<p>This API is only available if the library is built with pre-processor
+symbol <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a> defined.
+</p><hr><a name="sqlite3_stmt_status"></a>
+<h2>Prepared Statement Status</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
+</pre></blockquote>
+<p>
+Each prepared statement maintains various
+<a href="#SQLITE_STMTSTATUS counter">SQLITE_STMTSTATUS counters</a> that measure the number
+of times it has performed specific operations. These counters can
+be used to monitor the performance characteristics of the prepared
+statements. For example, if the number of table steps greatly exceeds
+the number of table searches or result rows, that would tend to indicate
+that the prepared statement is using a full table scan rather than
+an index.</p>
+
+<p>This interface is used to retrieve and reset counter values from
+a <a href="#sqlite3_stmt">prepared statement</a>. The first argument is the prepared statement
+object to be interrogated. The second argument
+is an integer code for a specific <a href="#SQLITE_STMTSTATUS counter">SQLITE_STMTSTATUS counter</a>
+to be interrogated.
+The current value of the requested counter is returned.
+If the resetFlg is true, then the counter is reset to zero after this
+interface call returns.</p>
+
+<p>See also: <a href="#sqlite3_status">sqlite3_status()</a> and <a href="#sqlite3_db_status">sqlite3_db_status()</a>.
+</p><hr><a name="sqlite3_str_finish"></a>
+<h2>Finalize A Dynamic String</h2>
+</div>
+<blockquote><pre>
+char *sqlite3_str_finish(sqlite3_str*);
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_str_finish">sqlite3_str_finish(X)</a> interface destroys the sqlite3_str object X
+and returns a pointer to a memory buffer obtained from <a href="#sqlite3_free">sqlite3_malloc64()</a>
+that contains the constructed string. The calling application should
+pass the returned value to <a href="#sqlite3_free">sqlite3_free()</a> to avoid a memory leak.
+The <a href="#sqlite3_str_finish">sqlite3_str_finish(X)</a> interface may return a NULL pointer if any
+errors were encountered during construction of the string. The
+<a href="#sqlite3_str_finish">sqlite3_str_finish(X)</a> interface will also return a NULL pointer if the
+string in <a href="#sqlite3_str">sqlite3_str</a> object X is zero bytes long.
+</p><hr><a name="sqlite3_str_new"></a>
+<h2>Create A New Dynamic String Object</h2>
+</div>
+<blockquote><pre>
+sqlite3_str *sqlite3_str_new(sqlite3*);
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_str_new">sqlite3_str_new(D)</a> interface allocates and initializes
+a new <a href="#sqlite3_str">sqlite3_str</a> object. To avoid memory leaks, the object returned by
+<a href="#sqlite3_str_new">sqlite3_str_new()</a> must be freed by a subsequent call to
+<a href="#sqlite3_str_finish">sqlite3_str_finish(X)</a>.</p>
+
+<p>The <a href="#sqlite3_str_new">sqlite3_str_new(D)</a> interface always returns a pointer to a
+valid <a href="#sqlite3_str">sqlite3_str</a> object, though in the event of an out-of-memory
+error the returned object might be a special singleton that will
+silently reject new text, always return SQLITE_NOMEM from
+<a href="#sqlite3_str_errcode">sqlite3_str_errcode()</a>, always return 0 for
+<a href="#sqlite3_str_errcode">sqlite3_str_length()</a>, and always return NULL from
+<a href="#sqlite3_str_finish">sqlite3_str_finish(X)</a>. It is always safe to use the value
+returned by <a href="#sqlite3_str_new">sqlite3_str_new(D)</a> as the sqlite3_str parameter
+to any of the other <a href="#sqlite3_str">sqlite3_str</a> methods.</p>
+
+<p>The D parameter to <a href="#sqlite3_str_new">sqlite3_str_new(D)</a> may be NULL. If the
+D parameter in <a href="#sqlite3_str_new">sqlite3_str_new(D)</a> is not NULL, then the maximum
+length of the string contained in the <a href="#sqlite3_str">sqlite3_str</a> object will be
+the value set for <a href="#sqlite3_limit">sqlite3_limit</a>(D,<a href="#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a>) instead
+of <a href="limits.html#max_length">SQLITE_MAX_LENGTH</a>.
+</p><hr><a name="sqlite3_strglob"></a>
+<h2>String Globbing</h2>
+</div>
+<blockquote><pre>
+int sqlite3_strglob(const char *zGlob, const char *zStr);
+</pre></blockquote>
+<p>The <a href="#sqlite3_strglob">sqlite3_strglob(P,X)</a> interface returns zero if and only if
+string X matches the <a href="lang_expr.html#glob">GLOB</a> pattern P.
+The definition of <a href="lang_expr.html#glob">GLOB</a> pattern matching used in
+<a href="#sqlite3_strglob">sqlite3_strglob(P,X)</a> is the same as for the "X GLOB P" operator in the
+SQL dialect understood by SQLite. The <a href="#sqlite3_strglob">sqlite3_strglob(P,X)</a> function
+is case sensitive.</p>
+
+<p>Note that this routine returns zero on a match and non-zero if the strings
+do not match, the same as <a href="#sqlite3_stricmp">sqlite3_stricmp()</a> and <a href="#sqlite3_stricmp">sqlite3_strnicmp()</a>.</p>
+
+<p>See also: <a href="#sqlite3_strlike">sqlite3_strlike()</a>.
+</p><hr><a name="sqlite3_strlike"></a>
+<h2>String LIKE Matching</h2>
+</div>
+<blockquote><pre>
+int sqlite3_strlike(const char *zGlob, const char *zStr, unsigned int cEsc);
+</pre></blockquote>
+<p>The <a href="#sqlite3_strlike">sqlite3_strlike(P,X,E)</a> interface returns zero if and only if
+string X matches the <a href="lang_expr.html#like">LIKE</a> pattern P with escape character E.
+The definition of <a href="lang_expr.html#like">LIKE</a> pattern matching used in
+<a href="#sqlite3_strlike">sqlite3_strlike(P,X,E)</a> is the same as for the "X LIKE P ESCAPE E"
+operator in the SQL dialect understood by SQLite. For "X LIKE P" without
+the ESCAPE clause, set the E parameter of <a href="#sqlite3_strlike">sqlite3_strlike(P,X,E)</a> to 0.
+As with the LIKE operator, the <a href="#sqlite3_strlike">sqlite3_strlike(P,X,E)</a> function is case
+insensitive - equivalent upper and lower case ASCII characters match
+one another.</p>
+
+<p>The <a href="#sqlite3_strlike">sqlite3_strlike(P,X,E)</a> function matches Unicode characters, though
+only ASCII characters are case folded.</p>
+
+<p>Note that this routine returns zero on a match and non-zero if the strings
+do not match, the same as <a href="#sqlite3_stricmp">sqlite3_stricmp()</a> and <a href="#sqlite3_stricmp">sqlite3_strnicmp()</a>.</p>
+
+<p>See also: <a href="#sqlite3_strglob">sqlite3_strglob()</a>.
+</p><hr><a name="sqlite3_system_errno"></a>
+<h2>Low-level system error code</h2>
+</div>
+<blockquote><pre>
+int sqlite3_system_errno(sqlite3*);
+</pre></blockquote>
+<p>
+Attempt to return the underlying operating system error code or error
+number that caused the most recent I/O error or failure to open a file.
+The return value is OS-dependent. For example, on unix systems, after
+<a href="#sqlite3_open">sqlite3_open_v2()</a> returns <a href="#SQLITE_ABORT">SQLITE_CANTOPEN</a>, this interface could be
+called to get back the underlying "errno" that caused the problem, such
+as ENOSPC, EAUTH, EISDIR, and so forth.
+</p><hr><a name="sqlite3_table_column_metadata"></a>
+<h2>Extract Metadata About A Column Of A Table</h2>
+</div>
+<blockquote><pre>
+int sqlite3_table_column_metadata(
+ sqlite3 *db, /* Connection handle */
+ const char *zDbName, /* Database name or NULL */
+ const char *zTableName, /* Table name */
+ const char *zColumnName, /* Column name */
+ char const **pzDataType, /* OUTPUT: Declared data type */
+ char const **pzCollSeq, /* OUTPUT: Collation sequence name */
+ int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */
+ int *pPrimaryKey, /* OUTPUT: True if column part of PK */
+ int *pAutoinc /* OUTPUT: True if column is auto-increment */
+);
+</pre></blockquote>
+<p>
+The sqlite3_table_column_metadata(X,D,T,C,....) routine returns
+information about column C of table T in database D
+on <a href="#sqlite3">database connection</a> X. The sqlite3_table_column_metadata()
+interface returns SQLITE_OK and fills in the non-NULL pointers in
+the final five arguments with appropriate values if the specified
+column exists. The sqlite3_table_column_metadata() interface returns
+SQLITE_ERROR if the specified column does not exist.
+If the column-name parameter to sqlite3_table_column_metadata() is a
+NULL pointer, then this routine simply checks for the existence of the
+table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it
+does not. If the table name parameter T in a call to
+sqlite3_table_column_metadata(X,D,T,C,...) is NULL then the result is
+undefined behavior.</p>
+
+<p>The column is identified by the second, third and fourth parameters to
+this function. The second parameter is either the name of the database
+(i.e. "main", "temp", or an attached database) containing the specified
+table or NULL. If it is NULL, then all attached databases are searched
+for the table using the same algorithm used by the database engine to
+resolve unqualified table references.</p>
+
+<p>The third and fourth parameters to this function are the table and column
+name of the desired column, respectively.</p>
+
+<p>Metadata is returned by writing to the memory locations passed as the 5th
+and subsequent parameters to this function. Any of these arguments may be
+NULL, in which case the corresponding element of metadata is omitted.</p>
+
+<p><blockquote>
+<table border="1">
+<tr><th> Parameter <th> Output<br>Type <th> Description</p>
+
+<p><tr><td> 5th <td> const char* <td> Data type
+<tr><td> 6th <td> const char* <td> Name of default collation sequence
+<tr><td> 7th <td> int <td> True if column has a NOT NULL constraint
+<tr><td> 8th <td> int <td> True if column is part of the PRIMARY KEY
+<tr><td> 9th <td> int <td> True if column is <a href="autoinc.html">AUTOINCREMENT</a>
+</table>
+</blockquote></p>
+
+<p>The memory pointed to by the character pointers returned for the
+declaration type and collation sequence is valid until the next
+call to any SQLite API function.</p>
+
+<p>If the specified table is actually a view, an <a href="rescode.html">error code</a> is returned.</p>
+
+<p>If the specified column is "rowid", "oid" or "_rowid_" and the table
+is not a <a href="withoutrowid.html">WITHOUT ROWID</a> table and an
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column has been explicitly declared, then the output
+parameters are set for the explicitly declared column. If there is no
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column, then the outputs
+for the <a href="lang_createtable.html#rowid">rowid</a> are set as follows:</p>
+
+<p><pre>
+data type: "INTEGER"
+collation sequence: "BINARY"
+not null: 0
+primary key: 1
+auto increment: 0
+</pre></p>
+
+<p>This function causes all database schemas to be read from disk and
+parsed, if that has not already been done, and returns an error if
+any errors are encountered while loading the schema.
+</p><hr><a name="sqlite3_test_control"></a>
+<h2>Testing Interface</h2>
+</div>
+<blockquote><pre>
+int sqlite3_test_control(int op, ...);
+</pre></blockquote>
+<p>
+The sqlite3_test_control() interface is used to read out internal
+state of SQLite and to inject faults into SQLite for testing
+purposes. The first parameter is an operation code that determines
+the number, meaning, and operation of all subsequent parameters.</p>
+
+<p>This interface is not for use by applications. It exists solely
+for verifying the correct operation of the SQLite library. Depending
+on how the SQLite library is compiled, this interface might not exist.</p>
+
+<p>The details of the operation codes, their meanings, the parameters
+they take, and what they do are all subject to change without notice.
+Unlike most of the SQLite API, this function is not guaranteed to
+operate consistently from one release to the next.
+</p><hr><a name="sqlite3_threadsafe"></a>
+<h2>Test To See If The Library Is Threadsafe</h2>
+</div>
+<blockquote><pre>
+int sqlite3_threadsafe(void);
+</pre></blockquote>
+<p>
+The sqlite3_threadsafe() function returns zero if and only if
+SQLite was compiled with mutexing code omitted due to the
+<a href="compile.html#threadsafe">SQLITE_THREADSAFE</a> compile-time option being set to 0.</p>
+
+<p>SQLite can be compiled with or without mutexes. When
+the <a href="compile.html#threadsafe">SQLITE_THREADSAFE</a> C preprocessor macro is 1 or 2, mutexes
+are enabled and SQLite is threadsafe. When the
+<a href="compile.html#threadsafe">SQLITE_THREADSAFE</a> macro is 0,
+the mutexes are omitted. Without the mutexes, it is not safe
+to use SQLite concurrently from more than one thread.</p>
+
+<p>Enabling mutexes incurs a measurable performance penalty.
+So if speed is of utmost importance, it makes sense to disable
+the mutexes. But for maximum safety, mutexes should be enabled.
+The default behavior is for mutexes to be enabled.</p>
+
+<p>This interface can be used by an application to make sure that the
+version of SQLite that it is linking against was compiled with
+the desired setting of the <a href="compile.html#threadsafe">SQLITE_THREADSAFE</a> macro.</p>
+
+<p>This interface only reports on the compile-time mutex setting
+of the <a href="compile.html#threadsafe">SQLITE_THREADSAFE</a> flag. If SQLite is compiled with
+SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but
+can be fully or partially disabled using a call to <a href="#sqlite3_config">sqlite3_config()</a>
+with the verbs <a href="#sqliteconfigsinglethread">SQLITE_CONFIG_SINGLETHREAD</a>, <a href="#sqliteconfigmultithread">SQLITE_CONFIG_MULTITHREAD</a>,
+or <a href="#sqliteconfigserialized">SQLITE_CONFIG_SERIALIZED</a>. The return value of the
+sqlite3_threadsafe() function shows only the compile-time setting of
+thread safety, not any run-time changes to that setting made by
+sqlite3_config(). In other words, the return value from sqlite3_threadsafe()
+is unchanged by calls to sqlite3_config().</p>
+
+<p>See the <a href="threadsafe.html">threading mode</a> documentation for additional information.
+</p><hr><a name="sqlite3_trace_v2"></a>
+<h2>SQL Trace Hook</h2>
+</div>
+<blockquote><pre>
+int sqlite3_trace_v2(
+ sqlite3*,
+ unsigned uMask,
+ int(*xCallback)(unsigned,void*,void*,void*),
+ void *pCtx
+);
+</pre></blockquote>
+<p>
+The sqlite3_trace_v2(D,M,X,P) interface registers a trace callback
+function X against <a href="#sqlite3">database connection</a> D, using property mask M
+and context pointer P. If the X callback is
+NULL or if the M mask is zero, then tracing is disabled. The
+M argument should be the bitwise OR-ed combination of
+zero or more <a href="#SQLITE_TRACE">SQLITE_TRACE</a> constants.</p>
+
+<p>Each call to either sqlite3_trace() or sqlite3_trace_v2() overrides
+(cancels) any prior calls to sqlite3_trace() or sqlite3_trace_v2().</p>
+
+<p>The X callback is invoked whenever any of the events identified by
+mask M occur. The integer return value from the callback is currently
+ignored, though this may change in future releases. Callback
+implementations should return zero to ensure future compatibility.</p>
+
+<p>A trace callback is invoked with four arguments: callback(T,C,P,X).
+The T argument is one of the <a href="#SQLITE_TRACE">SQLITE_TRACE</a>
+constants to indicate why the callback was invoked.
+The C argument is a copy of the context pointer.
+The P and X arguments are pointers whose meanings depend on T.</p>
+
+<p>The sqlite3_trace_v2() interface is intended to replace the legacy
+interfaces <a href="#sqlite3_profile">sqlite3_trace()</a> and <a href="#sqlite3_profile">sqlite3_profile()</a>, both of which
+are deprecated.
+</p><hr><a name="sqlite3_txn_state"></a>
+<h2>Determine the transaction state of a database</h2>
+</div>
+<blockquote><pre>
+int sqlite3_txn_state(sqlite3*,const char *zSchema);
+</pre></blockquote>
+<p>
+The sqlite3_txn_state(D,S) interface returns the current
+<a href="#SQLITE_TXN_NONE">transaction state</a> of schema S in database connection D. If S is NULL,
+then the highest transaction state of any schema on database connection D
+is returned. Transaction states are (in order of lowest to highest):
+<ol>
+<li value="0"> SQLITE_TXN_NONE
+<li value="1"> SQLITE_TXN_READ
+<li value="2"> SQLITE_TXN_WRITE
+</ol>
+If the S argument to sqlite3_txn_state(D,S) is not the name of
+a valid schema, then -1 is returned.
+</p><hr><a name="sqlite3_unlock_notify"></a>
+<h2>Unlock Notification</h2>
+</div>
+<blockquote><pre>
+int sqlite3_unlock_notify(
+ sqlite3 *pBlocked, /* Waiting connection */
+ void (*xNotify)(void **apArg, int nArg), /* Callback function to invoke */
+ void *pNotifyArg /* Argument to pass to xNotify */
+);
+</pre></blockquote>
+<p>
+When running in shared-cache mode, a database operation may fail with
+an <a href="#SQLITE_ABORT">SQLITE_LOCKED</a> error if the required locks on the shared-cache or
+individual tables within the shared-cache cannot be obtained. See
+<a href="sharedcache.html">SQLite Shared-Cache Mode</a> for a description of shared-cache locking.
+This API may be used to register a callback that SQLite will invoke
+when the connection currently holding the required lock relinquishes it.
+This API is only available if the library was compiled with the
+<a href="compile.html#enable_unlock_notify">SQLITE_ENABLE_UNLOCK_NOTIFY</a> C-preprocessor symbol defined.</p>
+
+<p>See Also: <a href="unlock_notify.html">Using the SQLite Unlock Notification Feature</a>.</p>
+
+<p>Shared-cache locks are released when a database connection concludes
+its current transaction, either by committing it or rolling it back.</p>
+
+<p>When a connection (known as the blocked connection) fails to obtain a
+shared-cache lock and SQLITE_LOCKED is returned to the caller, the
+identity of the database connection (the blocking connection) that
+has locked the required resource is stored internally. After an
+application receives an SQLITE_LOCKED error, it may call the
+sqlite3_unlock_notify() method with the blocked connection handle as
+the first argument to register for a callback that will be invoked
+when the blocking connections current transaction is concluded. The
+callback is invoked from within the <a href="#sqlite3_step">sqlite3_step</a> or <a href="#sqlite3_close">sqlite3_close</a>
+call that concludes the blocking connection's transaction.</p>
+
+<p>If sqlite3_unlock_notify() is called in a multi-threaded application,
+there is a chance that the blocking connection will have already
+concluded its transaction by the time sqlite3_unlock_notify() is invoked.
+If this happens, then the specified callback is invoked immediately,
+from within the call to sqlite3_unlock_notify().</p>
+
+<p>If the blocked connection is attempting to obtain a write-lock on a
+shared-cache table, and more than one other connection currently holds
+a read-lock on the same table, then SQLite arbitrarily selects one of
+the other connections to use as the blocking connection.</p>
+
+<p>There may be at most one unlock-notify callback registered by a
+blocked connection. If sqlite3_unlock_notify() is called when the
+blocked connection already has a registered unlock-notify callback,
+then the new callback replaces the old. If sqlite3_unlock_notify() is
+called with a NULL pointer as its second argument, then any existing
+unlock-notify callback is canceled. The blocked connections
+unlock-notify callback may also be canceled by closing the blocked
+connection using <a href="#sqlite3_close">sqlite3_close()</a>.</p>
+
+<p>The unlock-notify callback is not reentrant. If an application invokes
+any sqlite3_xxx API functions from within an unlock-notify callback, a
+crash or deadlock may be the result.</p>
+
+<p>Unless deadlock is detected (see below), sqlite3_unlock_notify() always
+returns SQLITE_OK.</p>
+
+<p><b>Callback Invocation Details</b></p>
+
+<p>When an unlock-notify callback is registered, the application provides a
+single void* pointer that is passed to the callback when it is invoked.
+However, the signature of the callback function allows SQLite to pass
+it an array of void* context pointers. The first argument passed to
+an unlock-notify callback is a pointer to an array of void* pointers,
+and the second is the number of entries in the array.</p>
+
+<p>When a blocking connection's transaction is concluded, there may be
+more than one blocked connection that has registered for an unlock-notify
+callback. If two or more such blocked connections have specified the
+same callback function, then instead of invoking the callback function
+multiple times, it is invoked once with the set of void* context pointers
+specified by the blocked connections bundled together into an array.
+This gives the application an opportunity to prioritize any actions
+related to the set of unblocked database connections.</p>
+
+<p><b>Deadlock Detection</b></p>
+
+<p>Assuming that after registering for an unlock-notify callback a
+database waits for the callback to be issued before taking any further
+action (a reasonable assumption), then using this API may cause the
+application to deadlock. For example, if connection X is waiting for
+connection Y's transaction to be concluded, and similarly connection
+Y is waiting on connection X's transaction, then neither connection
+will proceed and the system may remain deadlocked indefinitely.</p>
+
+<p>To avoid this scenario, the sqlite3_unlock_notify() performs deadlock
+detection. If a given call to sqlite3_unlock_notify() would put the
+system in a deadlocked state, then SQLITE_LOCKED is returned and no
+unlock-notify callback is registered. The system is said to be in
+a deadlocked state if connection A has registered for an unlock-notify
+callback on the conclusion of connection B's transaction, and connection
+B has itself registered for an unlock-notify callback when connection
+A's transaction is concluded. Indirect deadlock is also detected, so
+the system is also considered to be deadlocked if connection B has
+registered for an unlock-notify callback on the conclusion of connection
+C's transaction, where connection C is waiting on connection A. Any
+number of levels of indirection are allowed.</p>
+
+<p><b>The "DROP TABLE" Exception</b></p>
+
+<p>When a call to <a href="#sqlite3_step">sqlite3_step()</a> returns SQLITE_LOCKED, it is almost
+always appropriate to call sqlite3_unlock_notify(). There is however,
+one exception. When executing a "DROP TABLE" or "DROP INDEX" statement,
+SQLite checks if there are any currently executing SELECT statements
+that belong to the same connection. If there are, SQLITE_LOCKED is
+returned. In this case there is no "blocking connection", so invoking
+sqlite3_unlock_notify() results in the unlock-notify callback being
+invoked immediately. If the application then re-attempts the "DROP TABLE"
+or "DROP INDEX" query, an infinite loop might be the result.</p>
+
+<p>One way around this problem is to check the extended error code returned
+by an sqlite3_step() call. If there is a blocking connection, then the
+extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in
+the special "DROP TABLE/INDEX" case, the extended error code is just
+SQLITE_LOCKED.
+</p><hr><a name="sqlite3_update_hook"></a>
+<h2>Data Change Notification Callbacks</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_update_hook(
+ sqlite3*,
+ void(*)(void *,int ,char const *,char const *,sqlite3_int64),
+ void*
+);
+</pre></blockquote>
+<p>
+The sqlite3_update_hook() interface registers a callback function
+with the <a href="#sqlite3">database connection</a> identified by the first argument
+to be invoked whenever a row is updated, inserted or deleted in
+a <a href="rowidtable.html">rowid table</a>.
+Any callback set by a previous call to this function
+for the same database connection is overridden.</p>
+
+<p>The second argument is a pointer to the function to invoke when a
+row is updated, inserted or deleted in a rowid table.
+The first argument to the callback is a copy of the third argument
+to sqlite3_update_hook().
+The second callback argument is one of <a href="#SQLITE_ALTER_TABLE">SQLITE_INSERT</a>, <a href="#SQLITE_ALTER_TABLE">SQLITE_DELETE</a>,
+or <a href="#SQLITE_ALTER_TABLE">SQLITE_UPDATE</a>, depending on the operation that caused the callback
+to be invoked.
+The third and fourth arguments to the callback contain pointers to the
+database and table name containing the affected row.
+The final callback parameter is the <a href="lang_createtable.html#rowid">rowid</a> of the row.
+In the case of an update, this is the <a href="lang_createtable.html#rowid">rowid</a> after the update takes place.</p>
+
+<p>The update hook is not invoked when internal system tables are
+modified (i.e. sqlite_sequence).
+The update hook is not invoked when <a href="withoutrowid.html">WITHOUT ROWID</a> tables are modified.</p>
+
+<p>In the current implementation, the update hook
+is not invoked when conflicting rows are deleted because of an
+<a href="lang_conflict.html">ON CONFLICT REPLACE</a> clause. Nor is the update hook
+invoked when rows are deleted using the <a href="lang_delete.html#truncateopt">truncate optimization</a>.
+The exceptions defined in this paragraph might change in a future
+release of SQLite.</p>
+
+<p>The update hook implementation must not do anything that will modify
+the database connection that invoked the update hook. Any actions
+to modify the database connection must be deferred until after the
+completion of the <a href="#sqlite3_step">sqlite3_step()</a> call that triggered the update hook.
+Note that <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> and <a href="#sqlite3_step">sqlite3_step()</a> both modify their
+database connections for the meaning of "modify" in this paragraph.</p>
+
+<p>The sqlite3_update_hook(D,C,P) function
+returns the P argument from the previous call
+on the same <a href="#sqlite3">database connection</a> D, or NULL for
+the first call on D.</p>
+
+<p>See also the <a href="#sqlite3_commit_hook">sqlite3_commit_hook()</a>, <a href="#sqlite3_commit_hook">sqlite3_rollback_hook()</a>,
+and <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_hook()</a> interfaces.
+</p><hr><a name="sqlite3_user_data"></a>
+<h2>User Data For Functions</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_user_data(sqlite3_context*);
+</pre></blockquote>
+<p>
+The sqlite3_user_data() interface returns a copy of
+the pointer that was the pUserData parameter (the 5th parameter)
+of the <a href="#sqlite3_create_function">sqlite3_create_function()</a>
+and <a href="#sqlite3_create_function">sqlite3_create_function16()</a> routines that originally
+registered the application defined function.</p>
+
+<p>This routine must be called from the same thread in which
+the application-defined function is running.
+</p><hr><a name="sqlite3_value_subtype"></a>
+<h2>Finding The Subtype Of SQL Values</h2>
+</div>
+<blockquote><pre>
+unsigned int sqlite3_value_subtype(sqlite3_value*);
+</pre></blockquote>
+<p>
+The sqlite3_value_subtype(V) function returns the subtype for
+an <a href="appfunc.html">application-defined SQL function</a> argument V. The subtype
+information can be used to pass a limited amount of context from
+one SQL function to another. Use the <a href="#sqlite3_result_subtype">sqlite3_result_subtype()</a>
+routine to set the subtype for the return value of an SQL function.
+</p><hr><a name="sqlite3_vtab_collation"></a>
+<h2>Determine The Collation For a Virtual Table Constraint</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
+</pre></blockquote>
+<p>
+This function may only be called from within a call to the <a href="vtab.html#xbestindex">xBestIndex</a>
+method of a <a href="vtab.html">virtual table</a>. This function returns a pointer to a string
+that is the name of the appropriate collation sequence to use for text
+comparisons on the constraint identified by its arguments.</p>
+
+<p>The first argument must be the pointer to the <a href="#sqlite3_index_info">sqlite3_index_info</a> object
+that is the first parameter to the xBestIndex() method. The second argument
+must be an index into the aConstraint[] array belonging to the
+sqlite3_index_info structure passed to xBestIndex.</p>
+
+<p>Important:
+The first parameter must be the same pointer that is passed into the
+xBestMethod() method. The first parameter may not be a pointer to a
+different <a href="#sqlite3_index_info">sqlite3_index_info</a> object, even an exact copy.</p>
+
+<p>The return value is computed as follows:</p>
+
+<p><ol>
+<li><p> If the constraint comes from a WHERE clause expression that contains
+a <a href="lang_expr.html#collateop">COLLATE operator</a>, then the name of the collation specified by
+that COLLATE operator is returned.
+<li><p> If there is no COLLATE operator, but the column that is the subject
+of the constraint specifies an alternative collating sequence via
+a <a href="lang_createtable.html#collateclause">COLLATE clause</a> on the column definition within the CREATE TABLE
+statement that was passed into <a href="#sqlite3_declare_vtab">sqlite3_declare_vtab()</a>, then the
+name of that alternative collating sequence is returned.
+<li><p> Otherwise, "BINARY" is returned.
+</ol>
+</p><hr><a name="sqlite3_vtab_config"></a>
+<h2>Virtual Table Interface Configuration</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_config(sqlite3*, int op, ...);
+</pre></blockquote>
+<p>
+This function may be called by either the <a href="vtab.html#xconnect">xConnect</a> or <a href="vtab.html#xcreate">xCreate</a> method
+of a <a href="vtab.html">virtual table</a> implementation to configure
+various facets of the virtual table interface.</p>
+
+<p>If this interface is invoked outside the context of an xConnect or
+xCreate virtual table method then the behavior is undefined.</p>
+
+<p>In the call sqlite3_vtab_config(D,C,...) the D parameter is the
+<a href="#sqlite3">database connection</a> in which the virtual table is being created and
+which is passed in as the first argument to the <a href="vtab.html#xconnect">xConnect</a> or <a href="vtab.html#xcreate">xCreate</a>
+method that is invoking sqlite3_vtab_config(). The C parameter is one
+of the <a href="#SQLITE_VTAB_CONSTRAINT_SUPPORT">virtual table configuration options</a>. The presence and meaning
+of parameters after C depend on which <a href="#SQLITE_VTAB_CONSTRAINT_SUPPORT">virtual table configuration option</a>
+is used.
+</p><hr><a name="sqlite3_vtab_distinct"></a>
+<h2>Determine if a virtual table query is DISTINCT</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_distinct(sqlite3_index_info*);
+</pre></blockquote>
+<p>
+This API may only be used from within an <a href="vtab.html#xbestindex">xBestIndex method</a>
+of a <a href="vtab.html">virtual table</a> implementation. The result of calling this
+interface from outside of xBestIndex() is undefined and probably harmful.</p>
+
+<p>The sqlite3_vtab_distinct() interface returns an integer between 0 and
+3. The integer returned by sqlite3_vtab_distinct()
+gives the virtual table additional information about how the query
+planner wants the output to be ordered. As long as the virtual table
+can meet the ordering requirements of the query planner, it may set
+the "orderByConsumed" flag.</p>
+
+<p><ol><li value="0"><p>
+If the sqlite3_vtab_distinct() interface returns 0, that means
+that the query planner needs the virtual table to return all rows in the
+sort order defined by the "nOrderBy" and "aOrderBy" fields of the
+<a href="#sqlite3_index_info">sqlite3_index_info</a> object. This is the default expectation. If the
+virtual table outputs all rows in sorted order, then it is always safe for
+the xBestIndex method to set the "orderByConsumed" flag, regardless of
+the return value from sqlite3_vtab_distinct().
+<li value="1"><p>
+If the sqlite3_vtab_distinct() interface returns 1, that means
+that the query planner does not need the rows to be returned in sorted order
+as long as all rows with the same values in all columns identified by the
+"aOrderBy" field are adjacent. This mode is used when the query planner
+is doing a GROUP BY.
+<li value="2"><p>
+If the sqlite3_vtab_distinct() interface returns 2, that means
+that the query planner does not need the rows returned in any particular
+order, as long as rows with the same values in all "aOrderBy" columns
+are adjacent. Furthermore, only a single row for each particular
+combination of values in the columns identified by the "aOrderBy" field
+needs to be returned. It is always ok for two or more rows with the same
+values in all "aOrderBy" columns to be returned, as long as all such rows
+are adjacent. The virtual table may, if it chooses, omit extra rows
+that have the same value for all columns identified by "aOrderBy".
+However omitting the extra rows is optional.
+This mode is used for a DISTINCT query.
+<li value="3"><p>
+If the sqlite3_vtab_distinct() interface returns 3, that means
+that the query planner needs only distinct rows but it does need the
+rows to be sorted. The virtual table implementation is free to omit
+rows that are identical in all aOrderBy columns, if it wants to, but
+it is not required to omit any rows. This mode is used for queries
+that have both DISTINCT and ORDER BY clauses.
+</ol></p>
+
+<p>For the purposes of comparing virtual table output values to see if the
+values are same value for sorting purposes, two NULL values are considered
+to be the same. In other words, the comparison operator is "IS"
+(or "IS NOT DISTINCT FROM") and not "==".</p>
+
+<p>If a virtual table implementation is unable to meet the requirements
+specified above, then it must not set the "orderByConsumed" flag in the
+<a href="#sqlite3_index_info">sqlite3_index_info</a> object or an incorrect answer may result.</p>
+
+<p>A virtual table implementation is always free to return rows in any order
+it wants, as long as the "orderByConsumed" flag is not set. When the
+the "orderByConsumed" flag is unset, the query planner will add extra
+<a href="opcode.html">bytecode</a> to ensure that the final results returned by the SQL query are
+ordered correctly. The use of the "orderByConsumed" flag and the
+sqlite3_vtab_distinct() interface is merely an optimization. Careful
+use of the sqlite3_vtab_distinct() interface and the "orderByConsumed"
+flag might help queries against a virtual table to run faster. Being
+overly aggressive and setting the "orderByConsumed" flag when it is not
+valid to do so, on the other hand, might cause SQLite to return incorrect
+results.
+</p><hr><a name="sqlite3_vtab_in"></a>
+<h2>Identify and handle IN constraints in xBestIndex</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle);
+</pre></blockquote>
+<p>
+This interface may only be used from within an
+<a href="vtab.html#xbestindex">xBestIndex() method</a> of a <a href="vtab.html">virtual table</a> implementation.
+The result of invoking this interface from any other context is
+undefined and probably harmful.</p>
+
+<p>A constraint on a virtual table of the form
+"<a href="lang_expr.html#in_op">column IN (...)</a>" is
+communicated to the xBestIndex method as a
+<a href="#SQLITE_INDEX_CONSTRAINT_EQ">SQLITE_INDEX_CONSTRAINT_EQ</a> constraint. If xBestIndex wants to use
+this constraint, it must set the corresponding
+aConstraintUsage[].argvIndex to a postive integer. Then, under
+the usual mode of handling IN operators, SQLite generates <a href="opcode.html">bytecode</a>
+that invokes the <a href="vtab.html#xfilter">xFilter() method</a> once for each value
+on the right-hand side of the IN operator. Thus the virtual table
+only sees a single value from the right-hand side of the IN operator
+at a time.</p>
+
+<p>In some cases, however, it would be advantageous for the virtual
+table to see all values on the right-hand of the IN operator all at
+once. The sqlite3_vtab_in() interfaces facilitates this in two ways:</p>
+
+<p><ol>
+<li><p>
+A call to sqlite3_vtab_in(P,N,-1) will return true (non-zero)
+if and only if the <a href="#sqlite3_index_info">P->aConstraint</a>[N] constraint
+is an <a href="lang_expr.html#in_op">IN operator</a> that can be processed all at once. In other words,
+sqlite3_vtab_in() with -1 in the third argument is a mechanism
+by which the virtual table can ask SQLite if all-at-once processing
+of the IN operator is even possible.</p>
+
+<p><li><p>
+A call to sqlite3_vtab_in(P,N,F) with F==1 or F==0 indicates
+to SQLite that the virtual table does or does not want to process
+the IN operator all-at-once, respectively. Thus when the third
+parameter (F) is non-negative, this interface is the mechanism by
+which the virtual table tells SQLite how it wants to process the
+IN operator.
+</ol></p>
+
+<p>The sqlite3_vtab_in(P,N,F) interface can be invoked multiple times
+within the same xBestIndex method call. For any given P,N pair,
+the return value from sqlite3_vtab_in(P,N,F) will always be the same
+within the same xBestIndex call. If the interface returns true
+(non-zero), that means that the constraint is an IN operator
+that can be processed all-at-once. If the constraint is not an IN
+operator or cannot be processed all-at-once, then the interface returns
+false.</p>
+
+<p>All-at-once processing of the IN operator is selected if both of the
+following conditions are met:</p>
+
+<p><ol>
+<li><p> The P->aConstraintUsage[N].argvIndex value is set to a positive
+integer. This is how the virtual table tells SQLite that it wants to
+use the N-th constraint.</p>
+
+<p><li><p> The last call to sqlite3_vtab_in(P,N,F) for which F was
+non-negative had F>=1.
+</ol></p>
+
+<p>If either or both of the conditions above are false, then SQLite uses
+the traditional one-at-a-time processing strategy for the IN constraint.
+If both conditions are true, then the argvIndex-th parameter to the
+xFilter method will be an <a href="#sqlite3_value">sqlite3_value</a> that appears to be NULL,
+but which can be passed to <a href="#sqlite3_vtab_in_first">sqlite3_vtab_in_first()</a> and
+<a href="#sqlite3_vtab_in_first">sqlite3_vtab_in_next()</a> to find all values on the right-hand side
+of the IN constraint.
+</p><hr><a name="sqlite3_vtab_nochange"></a>
+<h2>Determine If Virtual Table Column Access Is For UPDATE</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_nochange(sqlite3_context*);
+</pre></blockquote>
+<p>
+If the sqlite3_vtab_nochange(X) routine is called within the <a href="vtab.html#xcolumn">xColumn</a>
+method of a <a href="vtab.html">virtual table</a>, then it might return true if the
+column is being fetched as part of an UPDATE operation during which the
+column value will not change. The virtual table implementation can use
+this hint as permission to substitute a return value that is less
+expensive to compute and that the corresponding
+<a href="vtab.html#xupdate">xUpdate</a> method understands as a "no-change" value.</p>
+
+<p>If the <a href="vtab.html#xcolumn">xColumn</a> method calls sqlite3_vtab_nochange() and finds that
+the column is not changed by the UPDATE statement, then the xColumn
+method can optionally return without setting a result, without calling
+any of the <a href="#sqlite3_result_blob">sqlite3_result_xxxxx() interfaces</a>.
+In that case, <a href="#sqlite3_value_blob">sqlite3_value_nochange(X)</a> will return true for the
+same column in the <a href="vtab.html#xupdate">xUpdate</a> method.</p>
+
+<p>The sqlite3_vtab_nochange() routine is an optimization. Virtual table
+implementations should continue to give a correct answer even if the
+sqlite3_vtab_nochange() interface were to always return false. In the
+current implementation, the sqlite3_vtab_nochange() interface does always
+returns false for the enhanced <a href="lang_update.html#upfrom">UPDATE FROM</a> statement.
+</p><hr><a name="sqlite3_vtab_on_conflict"></a>
+<h2>Determine The Virtual Table Conflict Policy</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_on_conflict(sqlite3 *);
+</pre></blockquote>
+<p>
+This function may only be called from within a call to the <a href="vtab.html#xupdate">xUpdate</a> method
+of a <a href="vtab.html">virtual table</a> implementation for an INSERT or UPDATE operation. The
+value returned is one of <a href="#SQLITE_FAIL">SQLITE_ROLLBACK</a>, <a href="#SQLITE_DENY">SQLITE_IGNORE</a>, <a href="#SQLITE_FAIL">SQLITE_FAIL</a>,
+<a href="#SQLITE_ABORT">SQLITE_ABORT</a>, or <a href="#SQLITE_FAIL">SQLITE_REPLACE</a>, according to the <a href="lang_conflict.html">ON CONFLICT</a> mode
+of the SQL statement that triggered the call to the <a href="vtab.html#xupdate">xUpdate</a> method of the
+<a href="vtab.html">virtual table</a>.
+</p><hr><a name="sqlite3_vtab_rhs_value"></a>
+<h2>Constraint values in xBestIndex()</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **ppVal);
+</pre></blockquote>
+<p>
+This API may only be used from within the <a href="vtab.html#xbestindex">xBestIndex method</a>
+of a <a href="vtab.html">virtual table</a> implementation. The result of calling this interface
+from outside of an xBestIndex method are undefined and probably harmful.</p>
+
+<p>When the sqlite3_vtab_rhs_value(P,J,V) interface is invoked from within
+the <a href="vtab.html#xbestindex">xBestIndex</a> method of a <a href="vtab.html">virtual table</a> implementation, with P being
+a copy of the <a href="#sqlite3_index_info">sqlite3_index_info</a> object pointer passed into xBestIndex and
+J being a 0-based index into P->aConstraint[], then this routine
+attempts to set *V to the value of the right-hand operand of
+that constraint if the right-hand operand is known. If the
+right-hand operand is not known, then *V is set to a NULL pointer.
+The sqlite3_vtab_rhs_value(P,J,V) interface returns SQLITE_OK if
+and only if *V is set to a value. The sqlite3_vtab_rhs_value(P,J,V)
+inteface returns SQLITE_NOTFOUND if the right-hand side of the J-th
+constraint is not available. The sqlite3_vtab_rhs_value() interface
+can return an result code other than SQLITE_OK or SQLITE_NOTFOUND if
+something goes wrong.</p>
+
+<p>The sqlite3_vtab_rhs_value() interface is usually only successful if
+the right-hand operand of a constraint is a literal value in the original
+SQL statement. If the right-hand operand is an expression or a reference
+to some other column or a <a href="#sqlite3_bind_blob">host parameter</a>, then sqlite3_vtab_rhs_value()
+will probably return <a href="#SQLITE_ABORT">SQLITE_NOTFOUND</a>.</p>
+
+<p>Some constraints, such as <a href="#SQLITE_INDEX_CONSTRAINT_EQ">SQLITE_INDEX_CONSTRAINT_ISNULL</a> and
+<a href="#SQLITE_INDEX_CONSTRAINT_EQ">SQLITE_INDEX_CONSTRAINT_ISNOTNULL</a>, have no right-hand operand. For such
+constraints, sqlite3_vtab_rhs_value() always returns SQLITE_NOTFOUND.</p>
+
+<p>The <a href="#sqlite3_value">sqlite3_value</a> object returned in *V is a protected sqlite3_value
+and remains valid for the duration of the xBestIndex method call.
+When xBestIndex returns, the sqlite3_value object returned by
+sqlite3_vtab_rhs_value() is automatically deallocated.</p>
+
+<p>The "_rhs_" in the name of this routine is an abbreviation for
+"Right-Hand Side".
+</p><hr><a name="sqlite3_wal_autocheckpoint"></a>
+<h2>Configure an auto-checkpoint</h2>
+</div>
+<blockquote><pre>
+int sqlite3_wal_autocheckpoint(sqlite3 *db, int N);
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_wal_autocheckpoint">sqlite3_wal_autocheckpoint(D,N)</a> is a wrapper around
+<a href="#sqlite3_wal_hook">sqlite3_wal_hook()</a> that causes any database on <a href="#sqlite3">database connection</a> D
+to automatically <a href="wal.html#ckpt">checkpoint</a>
+after committing a transaction if there are N or
+more frames in the <a href="wal.html">write-ahead log</a> file. Passing zero or
+a negative value as the nFrame parameter disables automatic
+checkpoints entirely.</p>
+
+<p>The callback registered by this function replaces any existing callback
+registered using <a href="#sqlite3_wal_hook">sqlite3_wal_hook()</a>. Likewise, registering a callback
+using <a href="#sqlite3_wal_hook">sqlite3_wal_hook()</a> disables the automatic checkpoint mechanism
+configured by this function.</p>
+
+<p>The <a href="pragma.html#pragma_wal_autocheckpoint">wal_autocheckpoint pragma</a> can be used to invoke this interface
+from SQL.</p>
+
+<p>Checkpoints initiated by this mechanism are
+<a href="#sqlite3_wal_checkpoint_v2">PASSIVE</a>.</p>
+
+<p>Every new <a href="#sqlite3">database connection</a> defaults to having the auto-checkpoint
+enabled with a threshold of 1000 or <a href="compile.html#default_wal_autocheckpoint">SQLITE_DEFAULT_WAL_AUTOCHECKPOINT</a>
+pages. The use of this interface
+is only necessary if the default setting is found to be suboptimal
+for a particular application.
+</p><hr><a name="sqlite3_wal_checkpoint"></a>
+<h2>Checkpoint a database</h2>
+</div>
+<blockquote><pre>
+int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb);
+</pre></blockquote>
+<p>
+The sqlite3_wal_checkpoint(D,X) is equivalent to
+<a href="#sqlite3_wal_checkpoint_v2">sqlite3_wal_checkpoint_v2</a>(D,X,<a href="#SQLITE_CHECKPOINT_FULL">SQLITE_CHECKPOINT_PASSIVE</a>,0,0).</p>
+
+<p>In brief, sqlite3_wal_checkpoint(D,X) causes the content in the
+<a href="wal.html">write-ahead log</a> for database X on <a href="#sqlite3">database connection</a> D to be
+transferred into the database file and for the write-ahead log to
+be reset. See the <a href="wal.html#ckpt">checkpointing</a> documentation for addition
+information.</p>
+
+<p>This interface used to be the only way to cause a checkpoint to
+occur. But then the newer and more powerful <a href="#sqlite3_wal_checkpoint_v2">sqlite3_wal_checkpoint_v2()</a>
+interface was added. This interface is retained for backwards
+compatibility and as a convenience for applications that need to manually
+start a callback but which do not need the full power (and corresponding
+complication) of <a href="#sqlite3_wal_checkpoint_v2">sqlite3_wal_checkpoint_v2()</a>.
+</p><hr><a name="sqlite3_wal_checkpoint_v2"></a>
+<h2>Checkpoint a database</h2>
+</div>
+<blockquote><pre>
+int sqlite3_wal_checkpoint_v2(
+ sqlite3 *db, /* Database handle */
+ const char *zDb, /* Name of attached database (or NULL) */
+ int eMode, /* SQLITE_CHECKPOINT_* value */
+ int *pnLog, /* OUT: Size of WAL log in frames */
+ int *pnCkpt /* OUT: Total number of frames checkpointed */
+);
+</pre></blockquote>
+<p>
+The sqlite3_wal_checkpoint_v2(D,X,M,L,C) interface runs a checkpoint
+operation on database X of <a href="#sqlite3">database connection</a> D in mode M. Status
+information is written back into integers pointed to by L and C.
+The M parameter must be a valid <a href="#SQLITE_CHECKPOINT_FULL">checkpoint mode</a>:</p>
+
+<p><dl>
+<dt>SQLITE_CHECKPOINT_PASSIVE<dd>
+Checkpoint as many frames as possible without waiting for any database
+readers or writers to finish, then sync the database file if all frames
+in the log were checkpointed. The <a href="#sqlite3_busy_handler">busy-handler callback</a>
+is never invoked in the SQLITE_CHECKPOINT_PASSIVE mode.
+On the other hand, passive mode might leave the checkpoint unfinished
+if there are concurrent readers or writers.</p>
+
+<p><dt>SQLITE_CHECKPOINT_FULL<dd>
+This mode blocks (it invokes the
+<a href="#sqlite3_busy_handler">busy-handler callback</a>) until there is no
+database writer and all readers are reading from the most recent database
+snapshot. It then checkpoints all frames in the log file and syncs the
+database file. This mode blocks new database writers while it is pending,
+but new database readers are allowed to continue unimpeded.</p>
+
+<p><dt>SQLITE_CHECKPOINT_RESTART<dd>
+This mode works the same way as SQLITE_CHECKPOINT_FULL with the addition
+that after checkpointing the log file it blocks (calls the
+<a href="#sqlite3_busy_handler">busy-handler callback</a>)
+until all readers are reading from the database file only. This ensures
+that the next writer will restart the log file from the beginning.
+Like SQLITE_CHECKPOINT_FULL, this mode blocks new
+database writer attempts while it is pending, but does not impede readers.</p>
+
+<p><dt>SQLITE_CHECKPOINT_TRUNCATE<dd>
+This mode works the same way as SQLITE_CHECKPOINT_RESTART with the
+addition that it also truncates the log file to zero bytes just prior
+to a successful return.
+</dl></p>
+
+<p>If pnLog is not NULL, then *pnLog is set to the total number of frames in
+the log file or to -1 if the checkpoint could not run because
+of an error or because the database is not in <a href="wal.html">WAL mode</a>. If pnCkpt is not
+NULL,then *pnCkpt is set to the total number of checkpointed frames in the
+log file (including any that were already checkpointed before the function
+was called) or to -1 if the checkpoint could not run due to an error or
+because the database is not in WAL mode. Note that upon successful
+completion of an SQLITE_CHECKPOINT_TRUNCATE, the log file will have been
+truncated to zero bytes and so both *pnLog and *pnCkpt will be set to zero.</p>
+
+<p>All calls obtain an exclusive "checkpoint" lock on the database file. If
+any other process is running a checkpoint operation at the same time, the
+lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a
+busy-handler configured, it will not be invoked in this case.</p>
+
+<p>The SQLITE_CHECKPOINT_FULL, RESTART and TRUNCATE modes also obtain the
+exclusive "writer" lock on the database file. If the writer lock cannot be
+obtained immediately, and a busy-handler is configured, it is invoked and
+the writer lock retried until either the busy-handler returns 0 or the lock
+is successfully obtained. The busy-handler is also invoked while waiting for
+database readers as described above. If the busy-handler returns 0 before
+the writer lock is obtained or while waiting for database readers, the
+checkpoint operation proceeds from that point in the same way as
+SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible
+without blocking any further. SQLITE_BUSY is returned in this case.</p>
+
+<p>If parameter zDb is NULL or points to a zero length string, then the
+specified operation is attempted on all WAL databases <a href="lang_attach.html">attached</a> to
+<a href="#sqlite3">database connection</a> db. In this case the
+values written to output parameters *pnLog and *pnCkpt are undefined. If
+an SQLITE_BUSY error is encountered when processing one or more of the
+attached WAL databases, the operation is still attempted on any remaining
+attached databases and SQLITE_BUSY is returned at the end. If any other
+error occurs while processing an attached database, processing is abandoned
+and the error code is returned to the caller immediately. If no error
+(SQLITE_BUSY or otherwise) is encountered while processing the attached
+databases, SQLITE_OK is returned.</p>
+
+<p>If database zDb is the name of an attached database that is not in WAL
+mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If
+zDb is not NULL (or a zero length string) and is not the name of any
+attached database, SQLITE_ERROR is returned to the caller.</p>
+
+<p>Unless it returns SQLITE_MISUSE,
+the sqlite3_wal_checkpoint_v2() interface
+sets the error information that is queried by
+<a href="#sqlite3_errcode">sqlite3_errcode()</a> and <a href="#sqlite3_errcode">sqlite3_errmsg()</a>.</p>
+
+<p>The <a href="pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a> command can be used to invoke this interface
+from SQL.
+</p><hr><a name="sqlite3_wal_hook"></a>
+<h2>Write-Ahead Log Commit Hook</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_wal_hook(
+ sqlite3*,
+ int(*)(void *,sqlite3*,const char*,int),
+ void*
+);
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_wal_hook">sqlite3_wal_hook()</a> function is used to register a callback that
+is invoked each time data is committed to a database in wal mode.</p>
+
+<p>The callback is invoked by SQLite after the commit has taken place and
+the associated write-lock on the database released, so the implementation
+may read, write or <a href="wal.html#ckpt">checkpoint</a> the database as required.</p>
+
+<p>The first parameter passed to the callback function when it is invoked
+is a copy of the third parameter passed to sqlite3_wal_hook() when
+registering the callback. The second is a copy of the database handle.
+The third parameter is the name of the database that was written to -
+either "main" or the name of an <a href="lang_attach.html">ATTACH</a>-ed database. The fourth parameter
+is the number of pages currently in the write-ahead log file,
+including those that were just committed.</p>
+
+<p>The callback function should normally return <a href="#SQLITE_ABORT">SQLITE_OK</a>. If an error
+code is returned, that error will propagate back up through the
+SQLite code base to cause the statement that provoked the callback
+to report an error, though the commit will have still occurred. If the
+callback returns <a href="#SQLITE_ABORT">SQLITE_ROW</a> or <a href="#SQLITE_ABORT">SQLITE_DONE</a>, or if it returns a value
+that does not correspond to any valid SQLite error code, the results
+are undefined.</p>
+
+<p>A single database handle may have at most a single write-ahead log callback
+registered at one time. Calling <a href="#sqlite3_wal_hook">sqlite3_wal_hook()</a> replaces any
+previously registered write-ahead log callback. The return value is
+a copy of the third parameter from the previous call, if any, or 0.
+Note that the <a href="#sqlite3_wal_autocheckpoint">sqlite3_wal_autocheckpoint()</a> interface and the
+<a href="pragma.html#pragma_wal_autocheckpoint">wal_autocheckpoint pragma</a> both invoke <a href="#sqlite3_wal_hook">sqlite3_wal_hook()</a> and will
+overwrite any prior <a href="#sqlite3_wal_hook">sqlite3_wal_hook()</a> settings.
+</p><hr><a name="SQLITE_ABORT"></a>
+<h2>Result Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_OK 0 /* Successful result */
+/* beginning-of-error-codes */
+#define SQLITE_ERROR 1 /* Generic error */
+#define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */
+#define SQLITE_PERM 3 /* Access permission denied */
+#define SQLITE_ABORT 4 /* Callback routine requested an abort */
+#define SQLITE_BUSY 5 /* The database file is locked */
+#define SQLITE_LOCKED 6 /* A table in the database is locked */
+#define SQLITE_NOMEM 7 /* A malloc() failed */
+#define SQLITE_READONLY 8 /* Attempt to write a readonly database */
+#define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/
+#define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */
+#define SQLITE_CORRUPT 11 /* The database disk image is malformed */
+#define SQLITE_NOTFOUND 12 /* Unknown opcode in sqlite3_file_control() */
+#define SQLITE_FULL 13 /* Insertion failed because database is full */
+#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
+#define SQLITE_PROTOCOL 15 /* Database lock protocol error */
+#define SQLITE_EMPTY 16 /* Internal use only */
+#define SQLITE_SCHEMA 17 /* The database schema changed */
+#define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */
+#define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */
+#define SQLITE_MISMATCH 20 /* Data type mismatch */
+#define SQLITE_MISUSE 21 /* Library used incorrectly */
+#define SQLITE_NOLFS 22 /* Uses OS features not supported on host */
+#define SQLITE_AUTH 23 /* Authorization denied */
+#define SQLITE_FORMAT 24 /* Not used */
+#define SQLITE_RANGE 25 /* 2nd parameter to sqlite3_bind out of range */
+#define SQLITE_NOTADB 26 /* File opened that is not a database file */
+#define SQLITE_NOTICE 27 /* Notifications from sqlite3_log() */
+#define SQLITE_WARNING 28 /* Warnings from sqlite3_log() */
+#define SQLITE_ROW 100 /* sqlite3_step() has another row ready */
+#define SQLITE_DONE 101 /* sqlite3_step() has finished executing */
+/* end-of-error-codes */
+</pre></blockquote>
+<p>
+Many SQLite functions return an integer result code from the set shown
+here in order to indicate success or failure.</p>
+
+<p>New error codes may be added in future versions of SQLite.</p>
+
+<p>See also: <a href="#SQLITE_ABORT_ROLLBACK">extended result code definitions</a>
+</p><hr><a name="SQLITE_ABORT_ROLLBACK"></a>
+<h2>Extended Result Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1&lt;&lt;8))
+#define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2&lt;&lt;8))
+#define SQLITE_ERROR_SNAPSHOT (SQLITE_ERROR | (3&lt;&lt;8))
+#define SQLITE_IOERR_READ (SQLITE_IOERR | (1&lt;&lt;8))
+#define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2&lt;&lt;8))
+#define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3&lt;&lt;8))
+#define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4&lt;&lt;8))
+#define SQLITE_IOERR_DIR_FSYNC (SQLITE_IOERR | (5&lt;&lt;8))
+#define SQLITE_IOERR_TRUNCATE (SQLITE_IOERR | (6&lt;&lt;8))
+#define SQLITE_IOERR_FSTAT (SQLITE_IOERR | (7&lt;&lt;8))
+#define SQLITE_IOERR_UNLOCK (SQLITE_IOERR | (8&lt;&lt;8))
+#define SQLITE_IOERR_RDLOCK (SQLITE_IOERR | (9&lt;&lt;8))
+#define SQLITE_IOERR_DELETE (SQLITE_IOERR | (10&lt;&lt;8))
+#define SQLITE_IOERR_BLOCKED (SQLITE_IOERR | (11&lt;&lt;8))
+#define SQLITE_IOERR_NOMEM (SQLITE_IOERR | (12&lt;&lt;8))
+#define SQLITE_IOERR_ACCESS (SQLITE_IOERR | (13&lt;&lt;8))
+#define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14&lt;&lt;8))
+#define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15&lt;&lt;8))
+#define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16&lt;&lt;8))
+#define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17&lt;&lt;8))
+#define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18&lt;&lt;8))
+#define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19&lt;&lt;8))
+#define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20&lt;&lt;8))
+#define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21&lt;&lt;8))
+#define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22&lt;&lt;8))
+#define SQLITE_IOERR_DELETE_NOENT (SQLITE_IOERR | (23&lt;&lt;8))
+#define SQLITE_IOERR_MMAP (SQLITE_IOERR | (24&lt;&lt;8))
+#define SQLITE_IOERR_GETTEMPPATH (SQLITE_IOERR | (25&lt;&lt;8))
+#define SQLITE_IOERR_CONVPATH (SQLITE_IOERR | (26&lt;&lt;8))
+#define SQLITE_IOERR_VNODE (SQLITE_IOERR | (27&lt;&lt;8))
+#define SQLITE_IOERR_AUTH (SQLITE_IOERR | (28&lt;&lt;8))
+#define SQLITE_IOERR_BEGIN_ATOMIC (SQLITE_IOERR | (29&lt;&lt;8))
+#define SQLITE_IOERR_COMMIT_ATOMIC (SQLITE_IOERR | (30&lt;&lt;8))
+#define SQLITE_IOERR_ROLLBACK_ATOMIC (SQLITE_IOERR | (31&lt;&lt;8))
+#define SQLITE_IOERR_DATA (SQLITE_IOERR | (32&lt;&lt;8))
+#define SQLITE_IOERR_CORRUPTFS (SQLITE_IOERR | (33&lt;&lt;8))
+#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1&lt;&lt;8))
+#define SQLITE_LOCKED_VTAB (SQLITE_LOCKED | (2&lt;&lt;8))
+#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1&lt;&lt;8))
+#define SQLITE_BUSY_SNAPSHOT (SQLITE_BUSY | (2&lt;&lt;8))
+#define SQLITE_BUSY_TIMEOUT (SQLITE_BUSY | (3&lt;&lt;8))
+#define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1&lt;&lt;8))
+#define SQLITE_CANTOPEN_ISDIR (SQLITE_CANTOPEN | (2&lt;&lt;8))
+#define SQLITE_CANTOPEN_FULLPATH (SQLITE_CANTOPEN | (3&lt;&lt;8))
+#define SQLITE_CANTOPEN_CONVPATH (SQLITE_CANTOPEN | (4&lt;&lt;8))
+#define SQLITE_CANTOPEN_DIRTYWAL (SQLITE_CANTOPEN | (5&lt;&lt;8)) /* Not Used */
+#define SQLITE_CANTOPEN_SYMLINK (SQLITE_CANTOPEN | (6&lt;&lt;8))
+#define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1&lt;&lt;8))
+#define SQLITE_CORRUPT_SEQUENCE (SQLITE_CORRUPT | (2&lt;&lt;8))
+#define SQLITE_CORRUPT_INDEX (SQLITE_CORRUPT | (3&lt;&lt;8))
+#define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1&lt;&lt;8))
+#define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2&lt;&lt;8))
+#define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3&lt;&lt;8))
+#define SQLITE_READONLY_DBMOVED (SQLITE_READONLY | (4&lt;&lt;8))
+#define SQLITE_READONLY_CANTINIT (SQLITE_READONLY | (5&lt;&lt;8))
+#define SQLITE_READONLY_DIRECTORY (SQLITE_READONLY | (6&lt;&lt;8))
+#define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2&lt;&lt;8))
+#define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1&lt;&lt;8))
+#define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2&lt;&lt;8))
+#define SQLITE_CONSTRAINT_FOREIGNKEY (SQLITE_CONSTRAINT | (3&lt;&lt;8))
+#define SQLITE_CONSTRAINT_FUNCTION (SQLITE_CONSTRAINT | (4&lt;&lt;8))
+#define SQLITE_CONSTRAINT_NOTNULL (SQLITE_CONSTRAINT | (5&lt;&lt;8))
+#define SQLITE_CONSTRAINT_PRIMARYKEY (SQLITE_CONSTRAINT | (6&lt;&lt;8))
+#define SQLITE_CONSTRAINT_TRIGGER (SQLITE_CONSTRAINT | (7&lt;&lt;8))
+#define SQLITE_CONSTRAINT_UNIQUE (SQLITE_CONSTRAINT | (8&lt;&lt;8))
+#define SQLITE_CONSTRAINT_VTAB (SQLITE_CONSTRAINT | (9&lt;&lt;8))
+#define SQLITE_CONSTRAINT_ROWID (SQLITE_CONSTRAINT |(10&lt;&lt;8))
+#define SQLITE_CONSTRAINT_PINNED (SQLITE_CONSTRAINT |(11&lt;&lt;8))
+#define SQLITE_CONSTRAINT_DATATYPE (SQLITE_CONSTRAINT |(12&lt;&lt;8))
+#define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1&lt;&lt;8))
+#define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2&lt;&lt;8))
+#define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1&lt;&lt;8))
+#define SQLITE_AUTH_USER (SQLITE_AUTH | (1&lt;&lt;8))
+#define SQLITE_OK_LOAD_PERMANENTLY (SQLITE_OK | (1&lt;&lt;8))
+#define SQLITE_OK_SYMLINK (SQLITE_OK | (2&lt;&lt;8)) /* internal use only */
+</pre></blockquote>
+<p>
+In its default configuration, SQLite API routines return one of 30 integer
+<a href="rescode.html">result codes</a>. However, experience has shown that many of
+these result codes are too coarse-grained. They do not provide as
+much information about problems as programmers might like. In an effort to
+address this, newer versions of SQLite (version 3.3.8 2006-10-09
+and later) include
+support for additional result codes that provide more detailed information
+about errors. These <a href="rescode.html#extrc">extended result codes</a> are enabled or disabled
+on a per database connection basis using the
+<a href="#sqlite3_extended_result_codes">sqlite3_extended_result_codes()</a> API. Or, the extended code for
+the most recent error can be obtained using
+<a href="#sqlite3_errcode">sqlite3_extended_errcode()</a>.
+</p><hr><a name="SQLITE_ACCESS_EXISTS"></a>
+<h2>Flags for the xAccess VFS method</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_ACCESS_EXISTS 0
+#define SQLITE_ACCESS_READWRITE 1 /* Used by PRAGMA temp_store_directory */
+#define SQLITE_ACCESS_READ 2 /* Unused */
+</pre></blockquote>
+<p>
+These integer constants can be used as the third parameter to
+the xAccess method of an <a href="#sqlite3_vfs">sqlite3_vfs</a> object. They determine
+what kind of permissions the xAccess method is looking for.
+With SQLITE_ACCESS_EXISTS, the xAccess method
+simply checks whether the file exists.
+With SQLITE_ACCESS_READWRITE, the xAccess method
+checks whether the named directory is both readable and writable
+(in other words, if files can be added, removed, and renamed within
+the directory).
+The SQLITE_ACCESS_READWRITE constant is currently used only by the
+<a href="pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a>, though this could change in a future
+release of SQLite.
+With SQLITE_ACCESS_READ, the xAccess method
+checks whether the file is readable. The SQLITE_ACCESS_READ constant is
+currently unused, though it might be used in a future release of
+SQLite.
+</p><hr><a name="SQLITE_ALTER_TABLE"></a>
+<h2>Authorizer Action Codes</h2>
+</div>
+<blockquote><pre>
+/******************************************* 3rd ************ 4th ***********/
+#define SQLITE_CREATE_INDEX 1 /* Index Name Table Name */
+#define SQLITE_CREATE_TABLE 2 /* Table Name NULL */
+#define SQLITE_CREATE_TEMP_INDEX 3 /* Index Name Table Name */
+#define SQLITE_CREATE_TEMP_TABLE 4 /* Table Name NULL */
+#define SQLITE_CREATE_TEMP_TRIGGER 5 /* Trigger Name Table Name */
+#define SQLITE_CREATE_TEMP_VIEW 6 /* View Name NULL */
+#define SQLITE_CREATE_TRIGGER 7 /* Trigger Name Table Name */
+#define SQLITE_CREATE_VIEW 8 /* View Name NULL */
+#define SQLITE_DELETE 9 /* Table Name NULL */
+#define SQLITE_DROP_INDEX 10 /* Index Name Table Name */
+#define SQLITE_DROP_TABLE 11 /* Table Name NULL */
+#define SQLITE_DROP_TEMP_INDEX 12 /* Index Name Table Name */
+#define SQLITE_DROP_TEMP_TABLE 13 /* Table Name NULL */
+#define SQLITE_DROP_TEMP_TRIGGER 14 /* Trigger Name Table Name */
+#define SQLITE_DROP_TEMP_VIEW 15 /* View Name NULL */
+#define SQLITE_DROP_TRIGGER 16 /* Trigger Name Table Name */
+#define SQLITE_DROP_VIEW 17 /* View Name NULL */
+#define SQLITE_INSERT 18 /* Table Name NULL */
+#define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */
+#define SQLITE_READ 20 /* Table Name Column Name */
+#define SQLITE_SELECT 21 /* NULL NULL */
+#define SQLITE_TRANSACTION 22 /* Operation NULL */
+#define SQLITE_UPDATE 23 /* Table Name Column Name */
+#define SQLITE_ATTACH 24 /* Filename NULL */
+#define SQLITE_DETACH 25 /* Database Name NULL */
+#define SQLITE_ALTER_TABLE 26 /* Database Name Table Name */
+#define SQLITE_REINDEX 27 /* Index Name NULL */
+#define SQLITE_ANALYZE 28 /* Table Name NULL */
+#define SQLITE_CREATE_VTABLE 29 /* Table Name Module Name */
+#define SQLITE_DROP_VTABLE 30 /* Table Name Module Name */
+#define SQLITE_FUNCTION 31 /* NULL Function Name */
+#define SQLITE_SAVEPOINT 32 /* Operation Savepoint Name */
+#define SQLITE_COPY 0 /* No longer used */
+#define SQLITE_RECURSIVE 33 /* NULL NULL */
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_set_authorizer">sqlite3_set_authorizer()</a> interface registers a callback function
+that is invoked to authorize certain SQL statement actions. The
+second parameter to the callback is an integer code that specifies
+what action is being authorized. These are the integer action codes that
+the authorizer callback may be passed.</p>
+
+<p>These action code values signify what kind of operation is to be
+authorized. The 3rd and 4th parameters to the authorization
+callback function will be parameters or NULL depending on which of these
+codes is used as the second parameter. The 5th parameter to the
+authorizer callback is the name of the database ("main", "temp",
+etc.) if applicable. The 6th parameter to the authorizer callback
+is the name of the inner-most trigger or view that is responsible for
+the access attempt or NULL if this access attempt is directly from
+top-level SQL code.
+</p><hr><a name="SQLITE_ANY"></a>
+<h2>Text Encodings</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_UTF8 1 /* IMP: R-37514-35566 */
+#define SQLITE_UTF16LE 2 /* IMP: R-03371-37637 */
+#define SQLITE_UTF16BE 3 /* IMP: R-51971-34154 */
+#define SQLITE_UTF16 4 /* Use native byte order */
+#define SQLITE_ANY 5 /* Deprecated */
+#define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */
+</pre></blockquote>
+<p>
+These constant define integer codes that represent the various
+text encodings supported by SQLite.
+</p><hr><a name="SQLITE_BLOB"></a>
+<h2>Fundamental Datatypes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_INTEGER 1
+#define SQLITE_FLOAT 2
+#define SQLITE_BLOB 4
+#define SQLITE_NULL 5
+#ifdef SQLITE_TEXT
+# undef SQLITE_TEXT
+#else
+# define SQLITE_TEXT 3
+#endif
+#define SQLITE3_TEXT 3
+</pre></blockquote>
+<p>
+Every value in SQLite has one of five fundamental datatypes:</p>
+
+<p><ul>
+<li> 64-bit signed integer
+<li> 64-bit IEEE floating point number
+<li> string
+<li> BLOB
+<li> NULL
+</ul></p>
+
+<p>These constants are codes for each of those types.</p>
+
+<p>Note that the SQLITE_TEXT constant was also used in SQLite version 2
+for a completely different meaning. Software that links against both
+SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not
+SQLITE_TEXT.
+</p><hr><a name="SQLITE_CHECKPOINT_FULL"></a>
+<h2>Checkpoint Mode Values</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */
+#define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */
+#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */
+#define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */
+</pre></blockquote>
+<p>
+These constants define all valid values for the "checkpoint mode" passed
+as the third parameter to the <a href="#sqlite3_wal_checkpoint_v2">sqlite3_wal_checkpoint_v2()</a> interface.
+See the <a href="#sqlite3_wal_checkpoint_v2">sqlite3_wal_checkpoint_v2()</a> documentation for details on the
+meaning of each of these checkpoint modes.
+</p><hr><a name="SQLITE_CONFIG_COVERING_INDEX_SCAN"></a>
+<h2>Configuration Options</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
+#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
+#define SQLITE_CONFIG_SERIALIZED 3 /* nil */
+#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
+#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */
+#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */
+#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */
+#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */
+#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */
+#define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */
+#define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */
+/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */
+#define SQLITE_CONFIG_LOOKASIDE 13 /* int int */
+#define SQLITE_CONFIG_PCACHE 14 /* no-op */
+#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */
+#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */
+#define SQLITE_CONFIG_URI 17 /* int */
+#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */
+#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
+#define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */
+#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */
+#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */
+#define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */
+#define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */
+#define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */
+#define SQLITE_CONFIG_STMTJRNL_SPILL 26 /* int nByte */
+#define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */
+#define SQLITE_CONFIG_SORTERREF_SIZE 28 /* int nByte */
+#define SQLITE_CONFIG_MEMDB_MAXSIZE 29 /* sqlite3_int64 */
+</pre></blockquote>
+<p>
+These constants are the available integer configuration options that
+can be passed as the first argument to the <a href="#sqlite3_config">sqlite3_config()</a> interface.</p>
+
+<p>New configuration options may be added in future releases of SQLite.
+Existing configuration options might be discontinued. Applications
+should check the return code from <a href="#sqlite3_config">sqlite3_config()</a> to make sure that
+the call worked. The <a href="#sqlite3_config">sqlite3_config()</a> interface will return a
+non-zero <a href="rescode.html">error code</a> if a discontinued or unsupported configuration option
+is invoked.</p>
+
+<p><dl>
+<a name="sqliteconfigsinglethread"></a>
+ <dt>SQLITE_CONFIG_SINGLETHREAD</dt>
+<dd>There are no arguments to this option. This option sets the
+<a href="threadsafe.html">threading mode</a> to Single-thread. In other words, it disables
+all mutexing and puts SQLite into a mode where it can only be used
+by a single thread. If SQLite is compiled with
+the <a href="compile.html#threadsafe">SQLITE_THREADSAFE=0</a> compile-time option then
+it is not possible to change the <a href="threadsafe.html">threading mode</a> from its default
+value of Single-thread and so <a href="#sqlite3_config">sqlite3_config()</a> will return
+<a href="#SQLITE_ABORT">SQLITE_ERROR</a> if called with the SQLITE_CONFIG_SINGLETHREAD
+configuration option.</dd></p>
+
+<p><a name="sqliteconfigmultithread"></a>
+ <dt>SQLITE_CONFIG_MULTITHREAD</dt>
+<dd>There are no arguments to this option. This option sets the
+<a href="threadsafe.html">threading mode</a> to Multi-thread. In other words, it disables
+mutexing on <a href="#sqlite3">database connection</a> and <a href="#sqlite3_stmt">prepared statement</a> objects.
+The application is responsible for serializing access to
+<a href="#sqlite3">database connections</a> and <a href="#sqlite3_stmt">prepared statements</a>. But other mutexes
+are enabled so that SQLite will be safe to use in a multi-threaded
+environment as long as no two threads attempt to use the same
+<a href="#sqlite3">database connection</a> at the same time. If SQLite is compiled with
+the <a href="compile.html#threadsafe">SQLITE_THREADSAFE=0</a> compile-time option then
+it is not possible to set the Multi-thread <a href="threadsafe.html">threading mode</a> and
+<a href="#sqlite3_config">sqlite3_config()</a> will return <a href="#SQLITE_ABORT">SQLITE_ERROR</a> if called with the
+SQLITE_CONFIG_MULTITHREAD configuration option.</dd></p>
+
+<p><a name="sqliteconfigserialized"></a>
+ <dt>SQLITE_CONFIG_SERIALIZED</dt>
+<dd>There are no arguments to this option. This option sets the
+<a href="threadsafe.html">threading mode</a> to Serialized. In other words, this option enables
+all mutexes including the recursive
+mutexes on <a href="#sqlite3">database connection</a> and <a href="#sqlite3_stmt">prepared statement</a> objects.
+In this mode (which is the default when SQLite is compiled with
+<a href="compile.html#threadsafe">SQLITE_THREADSAFE=1</a>) the SQLite library will itself serialize access
+to <a href="#sqlite3">database connections</a> and <a href="#sqlite3_stmt">prepared statements</a> so that the
+application is free to use the same <a href="#sqlite3">database connection</a> or the
+same <a href="#sqlite3_stmt">prepared statement</a> in different threads at the same time.
+If SQLite is compiled with
+the <a href="compile.html#threadsafe">SQLITE_THREADSAFE=0</a> compile-time option then
+it is not possible to set the Serialized <a href="threadsafe.html">threading mode</a> and
+<a href="#sqlite3_config">sqlite3_config()</a> will return <a href="#SQLITE_ABORT">SQLITE_ERROR</a> if called with the
+SQLITE_CONFIG_SERIALIZED configuration option.</dd></p>
+
+<p><a name="sqliteconfigmalloc"></a>
+ <dt>SQLITE_CONFIG_MALLOC</dt>
+<dd> The SQLITE_CONFIG_MALLOC option takes a single argument which is
+a pointer to an instance of the <a href="#sqlite3_mem_methods">sqlite3_mem_methods</a> structure.
+The argument specifies
+alternative low-level memory allocation routines to be used in place of
+the memory allocation routines built into SQLite. SQLite makes
+its own private copy of the content of the <a href="#sqlite3_mem_methods">sqlite3_mem_methods</a> structure
+before the <a href="#sqlite3_config">sqlite3_config()</a> call returns.</dd></p>
+
+<p><a name="sqliteconfiggetmalloc"></a>
+ <dt>SQLITE_CONFIG_GETMALLOC</dt>
+<dd> The SQLITE_CONFIG_GETMALLOC option takes a single argument which
+is a pointer to an instance of the <a href="#sqlite3_mem_methods">sqlite3_mem_methods</a> structure.
+The <a href="#sqlite3_mem_methods">sqlite3_mem_methods</a>
+structure is filled with the currently defined memory allocation routines.
+This option can be used to overload the default memory allocation
+routines with a wrapper that simulations memory allocation failure or
+tracks memory usage, for example. </dd></p>
+
+<p><a name="sqliteconfigsmallmalloc"></a>
+ <dt>SQLITE_CONFIG_SMALL_MALLOC</dt>
+<dd> The SQLITE_CONFIG_SMALL_MALLOC option takes single argument of
+type int, interpreted as a boolean, which if true provides a hint to
+SQLite that it should avoid large memory allocations if possible.
+SQLite will run faster if it is free to make large memory allocations,
+but some application might prefer to run slower in exchange for
+guarantees about memory fragmentation that are possible if large
+allocations are avoided. This hint is normally off.
+</dd></p>
+
+<p><a name="sqliteconfigmemstatus"></a>
+ <dt>SQLITE_CONFIG_MEMSTATUS</dt>
+<dd> The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int,
+interpreted as a boolean, which enables or disables the collection of
+memory allocation statistics. When memory allocation statistics are
+disabled, the following SQLite interfaces become non-operational:
+<ul>
+<li> <a href="#sqlite3_hard_heap_limit64">sqlite3_hard_heap_limit64()</a>
+<li> <a href="#sqlite3_memory_highwater">sqlite3_memory_used()</a>
+<li> <a href="#sqlite3_memory_highwater">sqlite3_memory_highwater()</a>
+<li> <a href="#sqlite3_hard_heap_limit64">sqlite3_soft_heap_limit64()</a>
+<li> <a href="#sqlite3_status">sqlite3_status64()</a>
+</ul>
+Memory allocation statistics are enabled by default unless SQLite is
+compiled with <a href="compile.html#default_memstatus">SQLITE_DEFAULT_MEMSTATUS</a>=0 in which case memory
+allocation statistics are disabled by default.
+</dd></p>
+
+<p><a name="sqliteconfigscratch"></a>
+ <dt>SQLITE_CONFIG_SCRATCH</dt>
+<dd> The SQLITE_CONFIG_SCRATCH option is no longer used.
+</dd></p>
+
+<p><a name="sqliteconfigpagecache"></a>
+ <dt>SQLITE_CONFIG_PAGECACHE</dt>
+<dd> The SQLITE_CONFIG_PAGECACHE option specifies a memory pool
+that SQLite can use for the database page cache with the default page
+cache implementation.
+This configuration option is a no-op if an application-defined page
+cache implementation is loaded using the <a href="#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a>.
+There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to
+8-byte aligned memory (pMem), the size of each page cache line (sz),
+and the number of cache lines (N).
+The sz argument should be the size of the largest database page
+(a power of two between 512 and 65536) plus some extra bytes for each
+page header. The number of extra bytes needed by the page header
+can be determined using <a href="#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a>.
+It is harmless, apart from the wasted memory,
+for the sz parameter to be larger than necessary. The pMem
+argument must be either a NULL pointer or a pointer to an 8-byte
+aligned block of memory of at least sz*N bytes, otherwise
+subsequent behavior is undefined.
+When pMem is not NULL, SQLite will strive to use the memory provided
+to satisfy page cache needs, falling back to <a href="#sqlite3_free">sqlite3_malloc()</a> if
+a page cache line is larger than sz bytes or if all of the pMem buffer
+is exhausted.
+If pMem is NULL and N is non-zero, then each database connection
+does an initial bulk allocation for page cache memory
+from <a href="#sqlite3_free">sqlite3_malloc()</a> sufficient for N cache lines if N is positive or
+of -1024*N bytes if N is negative, . If additional
+page cache memory is needed beyond what is provided by the initial
+allocation, then SQLite goes to <a href="#sqlite3_free">sqlite3_malloc()</a> separately for each
+additional cache line. </dd></p>
+
+<p><a name="sqliteconfigheap"></a>
+ <dt>SQLITE_CONFIG_HEAP</dt>
+<dd> The SQLITE_CONFIG_HEAP option specifies a static memory buffer
+that SQLite will use for all of its dynamic memory allocation needs
+beyond those provided for by <a href="#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
+The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
+with either <a href="compile.html#enable_memsys3">SQLITE_ENABLE_MEMSYS3</a> or <a href="compile.html#enable_memsys5">SQLITE_ENABLE_MEMSYS5</a> and returns
+<a href="#SQLITE_ABORT">SQLITE_ERROR</a> if invoked otherwise.
+There are three arguments to SQLITE_CONFIG_HEAP:
+An 8-byte aligned pointer to the memory,
+the number of bytes in the memory buffer, and the minimum allocation size.
+If the first pointer (the memory pointer) is NULL, then SQLite reverts
+to using its default memory allocator (the system malloc() implementation),
+undoing any prior invocation of <a href="#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a>. If the
+memory pointer is not NULL then the alternative memory
+allocator is engaged to handle all of SQLites memory allocation needs.
+The first pointer (the memory pointer) must be aligned to an 8-byte
+boundary or subsequent behavior of SQLite will be undefined.
+The minimum allocation size is capped at 2**12. Reasonable values
+for the minimum allocation size are 2**5 through 2**8.</dd></p>
+
+<p><a name="sqliteconfigmutex"></a>
+ <dt>SQLITE_CONFIG_MUTEX</dt>
+<dd> The SQLITE_CONFIG_MUTEX option takes a single argument which is a
+pointer to an instance of the <a href="#sqlite3_mutex_methods">sqlite3_mutex_methods</a> structure.
+The argument specifies alternative low-level mutex routines to be used
+in place the mutex routines built into SQLite. SQLite makes a copy of
+the content of the <a href="#sqlite3_mutex_methods">sqlite3_mutex_methods</a> structure before the call to
+<a href="#sqlite3_config">sqlite3_config()</a> returns. If SQLite is compiled with
+the <a href="compile.html#threadsafe">SQLITE_THREADSAFE=0</a> compile-time option then
+the entire mutexing subsystem is omitted from the build and hence calls to
+<a href="#sqlite3_config">sqlite3_config()</a> with the SQLITE_CONFIG_MUTEX configuration option will
+return <a href="#SQLITE_ABORT">SQLITE_ERROR</a>.</dd></p>
+
+<p><a name="sqliteconfiggetmutex"></a>
+ <dt>SQLITE_CONFIG_GETMUTEX</dt>
+<dd> The SQLITE_CONFIG_GETMUTEX option takes a single argument which
+is a pointer to an instance of the <a href="#sqlite3_mutex_methods">sqlite3_mutex_methods</a> structure. The
+<a href="#sqlite3_mutex_methods">sqlite3_mutex_methods</a>
+structure is filled with the currently defined mutex routines.
+This option can be used to overload the default mutex allocation
+routines with a wrapper used to track mutex usage for performance
+profiling or testing, for example. If SQLite is compiled with
+the <a href="compile.html#threadsafe">SQLITE_THREADSAFE=0</a> compile-time option then
+the entire mutexing subsystem is omitted from the build and hence calls to
+<a href="#sqlite3_config">sqlite3_config()</a> with the SQLITE_CONFIG_GETMUTEX configuration option will
+return <a href="#SQLITE_ABORT">SQLITE_ERROR</a>.</dd></p>
+
+<p><a name="sqliteconfiglookaside"></a>
+ <dt>SQLITE_CONFIG_LOOKASIDE</dt>
+<dd> The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine
+the default size of lookaside memory on each <a href="#sqlite3">database connection</a>.
+The first argument is the
+size of each lookaside buffer slot and the second is the number of
+slots allocated to each database connection. SQLITE_CONFIG_LOOKASIDE
+sets the <i>default</i> lookaside size. The <a href="#sqlitedbconfiglookaside">SQLITE_DBCONFIG_LOOKASIDE</a>
+option to <a href="#sqlite3_db_config">sqlite3_db_config()</a> can be used to change the lookaside
+configuration on individual connections. </dd></p>
+
+<p><a name="sqliteconfigpcache2"></a>
+ <dt>SQLITE_CONFIG_PCACHE2</dt>
+<dd> The SQLITE_CONFIG_PCACHE2 option takes a single argument which is
+a pointer to an <a href="#sqlite3_pcache_methods2">sqlite3_pcache_methods2</a> object. This object specifies
+the interface to a custom page cache implementation.
+SQLite makes a copy of the <a href="#sqlite3_pcache_methods2">sqlite3_pcache_methods2</a> object.</dd></p>
+
+<p><a name="sqliteconfiggetpcache2"></a>
+ <dt>SQLITE_CONFIG_GETPCACHE2</dt>
+<dd> The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which
+is a pointer to an <a href="#sqlite3_pcache_methods2">sqlite3_pcache_methods2</a> object. SQLite copies of
+the current page cache implementation into that object. </dd></p>
+
+<p><a name="sqliteconfiglog"></a>
+ <dt>SQLITE_CONFIG_LOG</dt>
+<dd> The SQLITE_CONFIG_LOG option is used to configure the SQLite
+global <a href="errlog.html">error log</a>.
+(The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a
+function with a call signature of void(*)(void*,int,const char*),
+and a pointer to void. If the function pointer is not NULL, it is
+invoked by <a href="#sqlite3_log">sqlite3_log()</a> to process each logging event. If the
+function pointer is NULL, the <a href="#sqlite3_log">sqlite3_log()</a> interface becomes a no-op.
+The void pointer that is the second argument to SQLITE_CONFIG_LOG is
+passed through as the first parameter to the application-defined logger
+function whenever that function is invoked. The second parameter to
+the logger function is a copy of the first parameter to the corresponding
+<a href="#sqlite3_log">sqlite3_log()</a> call and is intended to be a <a href="rescode.html">result code</a> or an
+<a href="rescode.html#extrc">extended result code</a>. The third parameter passed to the logger is
+log message after formatting via <a href="#sqlite3_mprintf">sqlite3_snprintf()</a>.
+The SQLite logging interface is not reentrant; the logger function
+supplied by the application must not invoke any SQLite interface.
+In a multi-threaded application, the application-defined logger
+function must be threadsafe. </dd></p>
+
+<p><a name="sqliteconfiguri"></a>
+ <dt>SQLITE_CONFIG_URI
+<dd>The SQLITE_CONFIG_URI option takes a single argument of type int.
+If non-zero, then URI handling is globally enabled. If the parameter is zero,
+then URI handling is globally disabled. If URI handling is globally
+enabled, all filenames passed to <a href="#sqlite3_open">sqlite3_open()</a>, <a href="#sqlite3_open">sqlite3_open_v2()</a>,
+<a href="#sqlite3_open">sqlite3_open16()</a> or
+specified as part of <a href="lang_attach.html">ATTACH</a> commands are interpreted as URIs, regardless
+of whether or not the <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_URI</a> flag is set when the database
+connection is opened. If it is globally disabled, filenames are
+only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
+database connection is opened. By default, URI handling is globally
+disabled. The default value may be changed by compiling with the
+<a href="compile.html#use_uri">SQLITE_USE_URI</a> symbol defined.</p>
+
+<p><a name="sqliteconfigcoveringindexscan"></a>
+ <dt>SQLITE_CONFIG_COVERING_INDEX_SCAN
+<dd>The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer
+argument which is interpreted as a boolean in order to enable or disable
+the use of covering indices for full table scans in the query optimizer.
+The default setting is determined
+by the <a href="compile.html#allow_covering_index_scan">SQLITE_ALLOW_COVERING_INDEX_SCAN</a> compile-time option, or is "on"
+if that compile-time option is omitted.
+The ability to disable the use of covering indices for full table scans
+is because some incorrectly coded legacy applications might malfunction
+when the optimization is enabled. Providing the ability to
+disable the optimization allows the older, buggy application code to work
+without change even with newer versions of SQLite.</p>
+
+<p><a name="sqliteconfigpcache"></a>
+ <a name="sqliteconfiggetpcache"></a>
+
+<dt>SQLITE_CONFIG_PCACHE and SQLITE_CONFIG_GETPCACHE
+<dd> These options are obsolete and should not be used by new code.
+They are retained for backwards compatibility but are now no-ops.
+</dd></p>
+
+<p><a name="sqliteconfigsqllog"></a>
+
+<dt>SQLITE_CONFIG_SQLLOG
+<dd>This option is only available if sqlite is compiled with the
+<a href="compile.html#enable_sqllog">SQLITE_ENABLE_SQLLOG</a> pre-processor macro defined. The first argument should
+be a pointer to a function of type void(*)(void*,sqlite3*,const char*, int).
+The second should be of type (void*). The callback is invoked by the library
+in three separate circumstances, identified by the value passed as the
+fourth parameter. If the fourth parameter is 0, then the database connection
+passed as the second argument has just been opened. The third argument
+points to a buffer containing the name of the main database file. If the
+fourth parameter is 1, then the SQL statement that the third parameter
+points to has just been executed. Or, if the fourth parameter is 2, then
+the connection being passed as the second parameter is being closed. The
+third parameter is passed NULL In this case. An example of using this
+configuration option can be seen in the "test_sqllog.c" source file in
+the canonical SQLite source tree.</dd></p>
+
+<p><a name="sqliteconfigmmapsize"></a>
+
+<dt>SQLITE_CONFIG_MMAP_SIZE
+<dd>SQLITE_CONFIG_MMAP_SIZE takes two 64-bit integer (sqlite3_int64) values
+that are the default mmap size limit (the default setting for
+<a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a>) and the maximum allowed mmap size limit.
+The default setting can be overridden by each database connection using
+either the <a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a> command, or by using the
+<a href="#sqlitefcntlmmapsize">SQLITE_FCNTL_MMAP_SIZE</a> file control. The maximum allowed mmap size
+will be silently truncated if necessary so that it does not exceed the
+compile-time maximum mmap size set by the
+<a href="compile.html#max_mmap_size">SQLITE_MAX_MMAP_SIZE</a> compile-time option.
+If either argument to this option is negative, then that argument is
+changed to its compile-time default.</p>
+
+<p><a name="sqliteconfigwin32heapsize"></a>
+
+<dt>SQLITE_CONFIG_WIN32_HEAPSIZE
+<dd>The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is
+compiled for Windows with the <a href="compile.html#win32_malloc">SQLITE_WIN32_MALLOC</a> pre-processor macro
+defined. SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value
+that specifies the maximum size of the created heap.</p>
+
+<p><a name="sqliteconfigpcachehdrsz"></a>
+
+<dt>SQLITE_CONFIG_PCACHE_HDRSZ
+<dd>The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which
+is a pointer to an integer and writes into that integer the number of extra
+bytes per page required for each page in <a href="#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
+The amount of extra space required can change depending on the compiler,
+target platform, and SQLite version.</p>
+
+<p><a name="sqliteconfigpmasz"></a>
+
+<dt>SQLITE_CONFIG_PMASZ
+<dd>The SQLITE_CONFIG_PMASZ option takes a single parameter which
+is an unsigned integer and sets the "Minimum PMA Size" for the multithreaded
+sorter to that integer. The default minimum PMA Size is set by the
+<a href="compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> compile-time option. New threads are launched
+to help with sort operations when multithreaded sorting
+is enabled (using the <a href="pragma.html#pragma_threads">PRAGMA threads</a> command) and the amount of content
+to be sorted exceeds the page size times the minimum of the
+<a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> setting and this value.</p>
+
+<p><a name="sqliteconfigstmtjrnlspill"></a>
+
+<dt>SQLITE_CONFIG_STMTJRNL_SPILL
+<dd>The SQLITE_CONFIG_STMTJRNL_SPILL option takes a single parameter which
+becomes the <a href="tempfiles.html#stmtjrnl">statement journal</a> spill-to-disk threshold.
+<a href="tempfiles.html#stmtjrnl">Statement journals</a> are held in memory until their size (in bytes)
+exceeds this threshold, at which point they are written to disk.
+Or if the threshold is -1, statement journals are always held
+exclusively in memory.
+Since many statement journals never become large, setting the spill
+threshold to a value such as 64KiB can greatly reduce the amount of
+I/O required to support statement rollback.
+The default value for this setting is controlled by the
+<a href="compile.html#stmtjrnl_spill">SQLITE_STMTJRNL_SPILL</a> compile-time option.</p>
+
+<p><a name="sqliteconfigsorterrefsize"></a>
+
+<dt>SQLITE_CONFIG_SORTERREF_SIZE
+<dd>The SQLITE_CONFIG_SORTERREF_SIZE option accepts a single parameter
+of type (int) - the new value of the sorter-reference size threshold.
+Usually, when SQLite uses an external sort to order records according
+to an ORDER BY clause, all fields required by the caller are present in the
+sorted records. However, if SQLite determines based on the declared type
+of a table column that its values are likely to be very large - larger
+than the configured sorter-reference size threshold - then a reference
+is stored in each sorted record and the required column values loaded
+from the database as records are returned in sorted order. The default
+value for this option is to never use this optimization. Specifying a
+negative value for this option restores the default behaviour.
+This option is only available if SQLite is compiled with the
+<a href="compile.html#enable_sorter_references">SQLITE_ENABLE_SORTER_REFERENCES</a> compile-time option.</p>
+
+<p><a name="sqliteconfigmemdbmaxsize"></a>
+
+<dt>SQLITE_CONFIG_MEMDB_MAXSIZE
+<dd>The SQLITE_CONFIG_MEMDB_MAXSIZE option accepts a single parameter
+<a href="#sqlite3_int64">sqlite3_int64</a> parameter which is the default maximum size for an in-memory
+database created using <a href="#sqlite3_deserialize">sqlite3_deserialize()</a>. This default maximum
+size can be adjusted up or down for individual databases using the
+<a href="#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> <a href="#sqlite3_file_control">file-control</a>. If this
+configuration setting is never used, then the default maximum is determined
+by the <a href="compile.html#memdb_default_maxsize">SQLITE_MEMDB_DEFAULT_MAXSIZE</a> compile-time option. If that
+compile-time option is not set, then the default maximum is 1073741824.
+</dl>
+</p><hr><a name="SQLITE_DBCONFIG_DEFENSIVE"></a>
+<h2>Database Connection Configuration Options</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
+#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
+#define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
+#define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */
+#define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */
+#define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */
+#define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */
+#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
+#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
+#define SQLITE_DBCONFIG_RESET_DATABASE 1009 /* int int* */
+#define SQLITE_DBCONFIG_DEFENSIVE 1010 /* int int* */
+#define SQLITE_DBCONFIG_WRITABLE_SCHEMA 1011 /* int int* */
+#define SQLITE_DBCONFIG_LEGACY_ALTER_TABLE 1012 /* int int* */
+#define SQLITE_DBCONFIG_DQS_DML 1013 /* int int* */
+#define SQLITE_DBCONFIG_DQS_DDL 1014 /* int int* */
+#define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */
+#define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */
+#define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */
+#define SQLITE_DBCONFIG_MAX 1017 /* Largest DBCONFIG */
+</pre></blockquote>
+<p>
+These constants are the available integer configuration options that
+can be passed as the second argument to the <a href="#sqlite3_db_config">sqlite3_db_config()</a> interface.</p>
+
+<p>New configuration options may be added in future releases of SQLite.
+Existing configuration options might be discontinued. Applications
+should check the return code from <a href="#sqlite3_db_config">sqlite3_db_config()</a> to make sure that
+the call worked. The <a href="#sqlite3_db_config">sqlite3_db_config()</a> interface will return a
+non-zero <a href="rescode.html">error code</a> if a discontinued or unsupported configuration option
+is invoked.</p>
+
+<p><dl>
+<a name="sqlitedbconfiglookaside"></a>
+
+<dt>SQLITE_DBCONFIG_LOOKASIDE</dt>
+<dd> This option takes three additional arguments that determine the
+<a href="malloc.html#lookaside">lookaside memory allocator</a> configuration for the <a href="#sqlite3">database connection</a>.
+The first argument (the third parameter to <a href="#sqlite3_db_config">sqlite3_db_config()</a> is a
+pointer to a memory buffer to use for lookaside memory.
+The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb
+may be NULL in which case SQLite will allocate the
+lookaside buffer itself using <a href="#sqlite3_free">sqlite3_malloc()</a>. The second argument is the
+size of each lookaside buffer slot. The third argument is the number of
+slots. The size of the buffer in the first argument must be greater than
+or equal to the product of the second and third arguments. The buffer
+must be aligned to an 8-byte boundary. If the second argument to
+SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally
+rounded down to the next smaller multiple of 8. The lookaside memory
+configuration for a database connection can only be changed when that
+connection is not currently using lookaside memory, or in other words
+when the "current value" returned by
+<a href="#sqlite3_db_status">sqlite3_db_status</a>(D,<a href="#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a>,...) is zero.
+Any attempt to change the lookaside memory configuration when lookaside
+memory is in use leaves the configuration unchanged and returns
+<a href="#SQLITE_ABORT">SQLITE_BUSY</a>.</dd></p>
+
+<p><a name="sqlitedbconfigenablefkey"></a>
+
+<dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt>
+<dd> This option is used to enable or disable the enforcement of
+<a href="foreignkeys.html">foreign key constraints</a>. There should be two additional arguments.
+The first argument is an integer which is 0 to disable FK enforcement,
+positive to enable FK enforcement or negative to leave FK enforcement
+unchanged. The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether FK enforcement is off or on
+following this call. The second parameter may be a NULL pointer, in
+which case the FK enforcement setting is not reported back. </dd></p>
+
+<p><a name="sqlitedbconfigenabletrigger"></a>
+
+<dt>SQLITE_DBCONFIG_ENABLE_TRIGGER</dt>
+<dd> This option is used to enable or disable <a href="lang_createtrigger.html">triggers</a>.
+There should be two additional arguments.
+The first argument is an integer which is 0 to disable triggers,
+positive to enable triggers or negative to leave the setting unchanged.
+The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether triggers are disabled or enabled
+following this call. The second parameter may be a NULL pointer, in
+which case the trigger setting is not reported back.</p>
+
+<p><p>Originally this option disabled all triggers. However, since
+SQLite version 3.35.0, TEMP triggers are still allowed even if
+this option is off. So, in other words, this option now only disables
+triggers in the main database schema or in the schemas of ATTACH-ed
+databases. </dd></p>
+
+<p><a name="sqlitedbconfigenableview"></a>
+
+<dt>SQLITE_DBCONFIG_ENABLE_VIEW</dt>
+<dd> This option is used to enable or disable <a href="lang_createview.html">views</a>.
+There should be two additional arguments.
+The first argument is an integer which is 0 to disable views,
+positive to enable views or negative to leave the setting unchanged.
+The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether views are disabled or enabled
+following this call. The second parameter may be a NULL pointer, in
+which case the view setting is not reported back.</p>
+
+<p><p>Originally this option disabled all views. However, since
+SQLite version 3.35.0, TEMP views are still allowed even if
+this option is off. So, in other words, this option now only disables
+views in the main database schema or in the schemas of ATTACH-ed
+databases. </dd></p>
+
+<p><a name="sqlitedbconfigenablefts3tokenizer"></a>
+
+<dt>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</dt>
+<dd> This option is used to enable or disable the
+<a href="fts3.html#f3tknzr">fts3_tokenizer()</a> function which is part of the
+<a href="fts3.html">FTS3</a> full-text search engine extension.
+There should be two additional arguments.
+The first argument is an integer which is 0 to disable fts3_tokenizer() or
+positive to enable fts3_tokenizer() or negative to leave the setting
+unchanged.
+The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether fts3_tokenizer is disabled or enabled
+following this call. The second parameter may be a NULL pointer, in
+which case the new setting is not reported back. </dd></p>
+
+<p><a name="sqlitedbconfigenableloadextension"></a>
+
+<dt>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</dt>
+<dd> This option is used to enable or disable the <a href="#sqlite3_load_extension">sqlite3_load_extension()</a>
+interface independently of the <a href="lang_corefunc.html#load_extension">load_extension()</a> SQL function.
+The <a href="#sqlite3_enable_load_extension">sqlite3_enable_load_extension()</a> API enables or disables both the
+C-API <a href="#sqlite3_load_extension">sqlite3_load_extension()</a> and the SQL function <a href="lang_corefunc.html#load_extension">load_extension()</a>.
+There should be two additional arguments.
+When the first argument to this interface is 1, then only the C-API is
+enabled and the SQL function remains disabled. If the first argument to
+this interface is 0, then both the C-API and the SQL function are disabled.
+If the first argument is -1, then no changes are made to state of either the
+C-API or the SQL function.
+The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether <a href="#sqlite3_load_extension">sqlite3_load_extension()</a> interface
+is disabled or enabled following this call. The second parameter may
+be a NULL pointer, in which case the new setting is not reported back.
+</dd></p>
+
+<p><a name="sqlitedbconfigmaindbname"></a>
+ <dt>SQLITE_DBCONFIG_MAINDBNAME</dt>
+<dd> This option is used to change the name of the "main" database
+schema. The sole argument is a pointer to a constant UTF8 string
+which will become the new schema name in place of "main". SQLite
+does not make a copy of the new main schema name string, so the application
+must ensure that the argument passed into this DBCONFIG option is unchanged
+until after the database connection closes.
+</dd></p>
+
+<p><a name="sqlitedbconfignockptonclose"></a>
+
+<dt>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</dt>
+<dd> Usually, when a database in wal mode is closed or detached from a
+database handle, SQLite checks if this will mean that there are now no
+connections at all to the database. If so, it performs a checkpoint
+operation before closing the connection. This option may be used to
+override this behaviour. The first parameter passed to this operation
+is an integer - positive to disable checkpoints-on-close, or zero (the
+default) to enable them, and negative to leave the setting unchanged.
+The second parameter is a pointer to an integer
+into which is written 0 or 1 to indicate whether checkpoints-on-close
+have been disabled - 0 if they are not disabled, 1 if they are.
+</dd></p>
+
+<p><a name="sqlitedbconfigenableqpsg"></a>
+ <dt>SQLITE_DBCONFIG_ENABLE_QPSG</dt>
+<dd>The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates
+the <a href="queryplanner-ng.html#qpstab">query planner stability guarantee</a> (QPSG). When the QPSG is active,
+a single SQL query statement will always use the same algorithm regardless
+of values of <a href="lang_expr.html#varparam">bound parameters</a>. The QPSG disables some query optimizations
+that look at the values of bound parameters, which can make some queries
+slower. But the QPSG has the advantage of more predictable behavior. With
+the QPSG active, SQLite will always use the same query plan in the field as
+was used during testing in the lab.
+The first argument to this setting is an integer which is 0 to disable
+the QPSG, positive to enable QPSG, or negative to leave the setting
+unchanged. The second parameter is a pointer to an integer into which
+is written 0 or 1 to indicate whether the QPSG is disabled or enabled
+following this call.
+</dd></p>
+
+<p><a name="sqlitedbconfigtriggereqp"></a>
+ <dt>SQLITE_DBCONFIG_TRIGGER_EQP</dt>
+<dd> By default, the output of EXPLAIN QUERY PLAN commands does not
+include output for any operations performed by trigger programs. This
+option is used to set or clear (the default) a flag that governs this
+behavior. The first parameter passed to this operation is an integer -
+positive to enable output for trigger programs, or zero to disable it,
+or negative to leave the setting unchanged.
+The second parameter is a pointer to an integer into which is written
+0 or 1 to indicate whether output-for-triggers has been disabled - 0 if
+it is not disabled, 1 if it is.
+</dd></p>
+
+<p><a name="sqlitedbconfigresetdatabase"></a>
+ <dt>SQLITE_DBCONFIG_RESET_DATABASE</dt>
+<dd> Set the SQLITE_DBCONFIG_RESET_DATABASE flag and then run
+<a href="lang_vacuum.html">VACUUM</a> in order to reset a database back to an empty database
+with no schema and no content. The following process works even for
+a badly corrupted database file:
+<ol>
+<li> If the database connection is newly opened, make sure it has read the
+database schema by preparing then discarding some query against the
+database, or calling sqlite3_table_column_metadata(), ignoring any
+errors. This step is only necessary if the application desires to keep
+the database in WAL mode after the reset if it was in WAL mode before
+the reset.
+<li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0);
+<li> <a href="#sqlite3_exec">sqlite3_exec</a>(db, "<a href="lang_vacuum.html">VACUUM</a>", 0, 0, 0);
+<li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0);
+</ol>
+Because resetting a database is destructive and irreversible, the
+process requires the use of this obscure API and multiple steps to help
+ensure that it does not happen by accident.</p>
+
+<p><a name="sqlitedbconfigdefensive"></a>
+ <dt>SQLITE_DBCONFIG_DEFENSIVE</dt>
+<dd>The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the
+"defensive" flag for a database connection. When the defensive
+flag is enabled, language features that allow ordinary SQL to
+deliberately corrupt the database file are disabled. The disabled
+features include but are not limited to the following:
+<ul>
+<li> The <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a> statement.
+<li> The <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=OFF</a> statement.
+<li> The <a href="pragma.html#pragma_schema_version">PRAGMA schema_version=N</a> statement.
+<li> Writes to the <a href="dbpage.html">sqlite_dbpage</a> virtual table.
+<li> Direct writes to <a href="vtab.html#xshadowname">shadow tables</a>.
+</ul>
+</dd></p>
+
+<p><a name="sqlitedbconfigwritableschema"></a>
+ <dt>SQLITE_DBCONFIG_WRITABLE_SCHEMA</dt>
+<dd>The SQLITE_DBCONFIG_WRITABLE_SCHEMA option activates or deactivates the
+"writable_schema" flag. This has the same effect and is logically equivalent
+to setting <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a> or <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=OFF</a>.
+The first argument to this setting is an integer which is 0 to disable
+the writable_schema, positive to enable writable_schema, or negative to
+leave the setting unchanged. The second parameter is a pointer to an
+integer into which is written 0 or 1 to indicate whether the writable_schema
+is enabled or disabled following this call.
+</dd></p>
+
+<p><a name="sqlitedbconfiglegacyaltertable"></a>
+
+<dt>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</dt>
+<dd>The SQLITE_DBCONFIG_LEGACY_ALTER_TABLE option activates or deactivates
+the legacy behavior of the <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> command such it
+behaves as it did prior to <a href="releaselog/3_24_0.html">version 3.24.0</a> (2018-06-04). See the
+"Compatibility Notice" on the <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME documentation</a> for
+additional information. This feature can also be turned on and off
+using the <a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table</a> statement.
+</dd></p>
+
+<p><a name="sqlitedbconfigdqsdml"></a>
+
+<dt>SQLITE_DBCONFIG_DQS_DML</td>
+<dd>The SQLITE_DBCONFIG_DQS_DML option activates or deactivates
+the legacy <a href="quirks.html#dblquote">double-quoted string literal</a> misfeature for DML statements
+only, that is DELETE, INSERT, SELECT, and UPDATE statements. The
+default value of this setting is determined by the <a href="compile.html#dqs">-DSQLITE_DQS</a>
+compile-time option.
+</dd></p>
+
+<p><a name="sqlitedbconfigdqsddl"></a>
+
+<dt>SQLITE_DBCONFIG_DQS_DDL</td>
+<dd>The SQLITE_DBCONFIG_DQS option activates or deactivates
+the legacy <a href="quirks.html#dblquote">double-quoted string literal</a> misfeature for DDL statements,
+such as CREATE TABLE and CREATE INDEX. The
+default value of this setting is determined by the <a href="compile.html#dqs">-DSQLITE_DQS</a>
+compile-time option.
+</dd></p>
+
+<p><a name="sqlitedbconfigtrustedschema"></a>
+
+<dt>SQLITE_DBCONFIG_TRUSTED_SCHEMA</td>
+<dd>The SQLITE_DBCONFIG_TRUSTED_SCHEMA option tells SQLite to
+assume that database schemas are untainted by malicious content.
+When the SQLITE_DBCONFIG_TRUSTED_SCHEMA option is disabled, SQLite
+takes additional defensive steps to protect the application from harm
+including:
+<ul>
+<li> Prohibit the use of SQL functions inside triggers, views,
+CHECK constraints, DEFAULT clauses, expression indexes,
+partial indexes, or generated columns
+unless those functions are tagged with <a href="#sqliteinnocuous">SQLITE_INNOCUOUS</a>.
+<li> Prohibit the use of virtual tables inside of triggers or views
+unless those virtual tables are tagged with <a href="#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a>.
+</ul>
+This setting defaults to "on" for legacy compatibility, however
+all applications are advised to turn it off if possible. This setting
+can also be controlled using the <a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema</a> statement.
+</dd></p>
+
+<p><a name="sqlitedbconfiglegacyfileformat"></a>
+
+<dt>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</td>
+<dd>The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates
+the legacy file format flag. When activated, this flag causes all newly
+created database file to have a schema format version number (the 4-byte
+integer found at offset 44 into the database header) of 1. This in turn
+means that the resulting database file will be readable and writable by
+any SQLite version back to 3.0.0 (2004-06-18). Without this setting,
+newly created databases are generally not understandable by SQLite versions
+prior to 3.3.0 (2006-01-11). As these words are written, there
+is now scarcely any need to generated database files that are compatible
+all the way back to version 3.0.0, and so this setting is of little
+practical use, but is provided so that SQLite can continue to claim the
+ability to generate new database files that are compatible with version
+3.0.0.
+<p>Note that when the SQLITE_DBCONFIG_LEGACY_FILE_FORMAT setting is on,
+the <a href="lang_vacuum.html">VACUUM</a> command will fail with an obscure error when attempting to
+process a table with generated columns and a descending index. This is
+not considered a bug since SQLite versions 3.3.0 and earlier do not support
+either generated columns or decending indexes.
+</dd>
+</dl>
+</p><hr><a name="SQLITE_DENY"></a>
+<h2>Authorizer Return Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_DENY 1 /* Abort the SQL statement with an error */
+#define SQLITE_IGNORE 2 /* Don't allow access, but don't generate an error */
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_set_authorizer">authorizer callback function</a> must
+return either <a href="#SQLITE_ABORT">SQLITE_OK</a> or one of these two constants in order
+to signal SQLite whether or not the action is permitted. See the
+<a href="#sqlite3_set_authorizer">authorizer documentation</a> for additional
+information.</p>
+
+<p>Note that SQLITE_IGNORE is also used as a <a href="#SQLITE_FAIL">conflict resolution mode</a>
+returned from the <a href="#sqlite3_vtab_on_conflict">sqlite3_vtab_on_conflict()</a> interface.
+</p><hr><a name="SQLITE_DESERIALIZE_FREEONCLOSE"></a>
+<h2>Flags for sqlite3_deserialize()</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_DESERIALIZE_FREEONCLOSE 1 /* Call sqlite3_free() on close */
+#define SQLITE_DESERIALIZE_RESIZEABLE 2 /* Resize using sqlite3_realloc64() */
+#define SQLITE_DESERIALIZE_READONLY 4 /* Database is read-only */
+</pre></blockquote>
+<p>
+The following are allowed values for 6th argument (the F argument) to
+the <a href="#sqlite3_deserialize">sqlite3_deserialize(D,S,P,N,M,F)</a> interface.</p>
+
+<p>The SQLITE_DESERIALIZE_FREEONCLOSE means that the database serialization
+in the P argument is held in memory obtained from <a href="#sqlite3_free">sqlite3_malloc64()</a>
+and that SQLite should take ownership of this memory and automatically
+free it when it has finished using it. Without this flag, the caller
+is responsible for freeing any dynamically allocated memory.</p>
+
+<p>The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to
+grow the size of the database using calls to <a href="#sqlite3_free">sqlite3_realloc64()</a>. This
+flag should only be used if SQLITE_DESERIALIZE_FREEONCLOSE is also used.
+Without this flag, the deserialized database cannot increase in size beyond
+the number of bytes specified by the M parameter.</p>
+
+<p>The SQLITE_DESERIALIZE_READONLY flag means that the deserialized database
+should be treated as read-only.
+</p><hr><a name="SQLITE_DETERMINISTIC"></a>
+<h2>Function Flags</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_DETERMINISTIC 0x000000800
+#define SQLITE_DIRECTONLY 0x000080000
+#define SQLITE_SUBTYPE 0x000100000
+#define SQLITE_INNOCUOUS 0x000200000
+</pre></blockquote>
+<p>
+These constants may be ORed together with the
+<a href="#SQLITE_ANY">preferred text encoding</a> as the fourth argument
+to <a href="#sqlite3_create_function">sqlite3_create_function()</a>, <a href="#sqlite3_create_function">sqlite3_create_function16()</a>, or
+<a href="#sqlite3_create_function">sqlite3_create_function_v2()</a>.</p>
+
+<p><dl>
+<a name="sqlitedeterministic"></a>
+ <dt>SQLITE_DETERMINISTIC</dt><dd>
+The SQLITE_DETERMINISTIC flag means that the new function always gives
+the same output when the input parameters are the same.
+The <a href="lang_corefunc.html#abs">abs() function</a> is deterministic, for example, but
+<a href="lang_corefunc.html#randomblob">randomblob()</a> is not. Functions must
+be deterministic in order to be used in certain contexts such as
+with the WHERE clause of <a href="partialindex.html">partial indexes</a> or in <a href="gencol.html">generated columns</a>.
+SQLite might also optimize deterministic functions by factoring them
+out of inner loops.
+</dd></p>
+
+<p><a name="sqlitedirectonly"></a>
+ <dt>SQLITE_DIRECTONLY</dt><dd>
+The SQLITE_DIRECTONLY flag means that the function may only be invoked
+from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in
+schema structures such as <a href="lang_createtable.html#ckconst">CHECK constraints</a>, <a href="lang_createtable.html#dfltval">DEFAULT clauses</a>,
+<a href="expridx.html">expression indexes</a>, <a href="partialindex.html">partial indexes</a>, or <a href="gencol.html">generated columns</a>.
+The SQLITE_DIRECTONLY flags is a security feature which is recommended
+for all <a href="appfunc.html">application-defined SQL functions</a>, and especially for functions
+that have side-effects or that could potentially leak sensitive
+information.
+</dd></p>
+
+<p><a name="sqliteinnocuous"></a>
+ <dt>SQLITE_INNOCUOUS</dt><dd>
+The SQLITE_INNOCUOUS flag means that the function is unlikely
+to cause problems even if misused. An innocuous function should have
+no side effects and should not depend on any values other than its
+input parameters. The <a href="lang_corefunc.html#abs">abs() function</a> is an example of an
+innocuous function.
+The <a href="lang_corefunc.html#load_extension">load_extension() SQL function</a> is not innocuous because of its
+side effects.
+<p> SQLITE_INNOCUOUS is similar to SQLITE_DETERMINISTIC, but is not
+exactly the same. The <a href="lang_corefunc.html#random">random() function</a> is an example of a
+function that is innocuous but not deterministic.
+<p>Some heightened security settings
+(<a href="#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a> and <a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema=OFF</a>)
+disable the use of SQL functions inside views and triggers and in
+schema structures such as <a href="lang_createtable.html#ckconst">CHECK constraints</a>, <a href="lang_createtable.html#dfltval">DEFAULT clauses</a>,
+<a href="expridx.html">expression indexes</a>, <a href="partialindex.html">partial indexes</a>, and <a href="gencol.html">generated columns</a> unless
+the function is tagged with SQLITE_INNOCUOUS. Most built-in functions
+are innocuous. Developers are advised to avoid using the
+SQLITE_INNOCUOUS flag for application-defined functions unless the
+function has been carefully audited and found to be free of potentially
+security-adverse side-effects and information-leaks.
+</dd></p>
+
+<p><a name="sqlitesubtype"></a>
+ <dt>SQLITE_SUBTYPE</dt><dd>
+The SQLITE_SUBTYPE flag indicates to SQLite that a function may call
+<a href="#sqlite3_value_subtype">sqlite3_value_subtype()</a> to inspect the sub-types of its arguments.
+Specifying this flag makes no difference for scalar or aggregate user
+functions. However, if it is not specified for a user-defined window
+function, then any sub-types belonging to arguments passed to the window
+function may be discarded before the window function is called (i.e.
+sqlite3_value_subtype() will always return 0).
+</dd>
+</dl>
+</p><hr><a name="SQLITE_FAIL"></a>
+<h2>Conflict resolution modes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_ROLLBACK 1
+/* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
+#define SQLITE_FAIL 3
+/* #define SQLITE_ABORT 4 // Also an error code */
+#define SQLITE_REPLACE 5
+</pre></blockquote>
+<p>
+These constants are returned by <a href="#sqlite3_vtab_on_conflict">sqlite3_vtab_on_conflict()</a> to
+inform a <a href="vtab.html">virtual table</a> implementation what the <a href="lang_conflict.html">ON CONFLICT</a> mode
+is for the SQL statement being evaluated.</p>
+
+<p>Note that the <a href="#SQLITE_DENY">SQLITE_IGNORE</a> constant is also used as a potential
+return value from the <a href="#sqlite3_set_authorizer">sqlite3_set_authorizer()</a> callback and that
+<a href="#SQLITE_ABORT">SQLITE_ABORT</a> is also a <a href="rescode.html">result code</a>.
+</p><hr><a name="SQLITE_FCNTL_BEGIN_ATOMIC_WRITE"></a>
+<h2>Standard File Control Opcodes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_FCNTL_LOCKSTATE 1
+#define SQLITE_FCNTL_GET_LOCKPROXYFILE 2
+#define SQLITE_FCNTL_SET_LOCKPROXYFILE 3
+#define SQLITE_FCNTL_LAST_ERRNO 4
+#define SQLITE_FCNTL_SIZE_HINT 5
+#define SQLITE_FCNTL_CHUNK_SIZE 6
+#define SQLITE_FCNTL_FILE_POINTER 7
+#define SQLITE_FCNTL_SYNC_OMITTED 8
+#define SQLITE_FCNTL_WIN32_AV_RETRY 9
+#define SQLITE_FCNTL_PERSIST_WAL 10
+#define SQLITE_FCNTL_OVERWRITE 11
+#define SQLITE_FCNTL_VFSNAME 12
+#define SQLITE_FCNTL_POWERSAFE_OVERWRITE 13
+#define SQLITE_FCNTL_PRAGMA 14
+#define SQLITE_FCNTL_BUSYHANDLER 15
+#define SQLITE_FCNTL_TEMPFILENAME 16
+#define SQLITE_FCNTL_MMAP_SIZE 18
+#define SQLITE_FCNTL_TRACE 19
+#define SQLITE_FCNTL_HAS_MOVED 20
+#define SQLITE_FCNTL_SYNC 21
+#define SQLITE_FCNTL_COMMIT_PHASETWO 22
+#define SQLITE_FCNTL_WIN32_SET_HANDLE 23
+#define SQLITE_FCNTL_WAL_BLOCK 24
+#define SQLITE_FCNTL_ZIPVFS 25
+#define SQLITE_FCNTL_RBU 26
+#define SQLITE_FCNTL_VFS_POINTER 27
+#define SQLITE_FCNTL_JOURNAL_POINTER 28
+#define SQLITE_FCNTL_WIN32_GET_HANDLE 29
+#define SQLITE_FCNTL_PDB 30
+#define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 31
+#define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32
+#define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33
+#define SQLITE_FCNTL_LOCK_TIMEOUT 34
+#define SQLITE_FCNTL_DATA_VERSION 35
+#define SQLITE_FCNTL_SIZE_LIMIT 36
+#define SQLITE_FCNTL_CKPT_DONE 37
+#define SQLITE_FCNTL_RESERVE_BYTES 38
+#define SQLITE_FCNTL_CKPT_START 39
+#define SQLITE_FCNTL_EXTERNAL_READER 40
+#define SQLITE_FCNTL_CKSM_FILE 41
+#define SQLITE_FCNTL_RESET_CACHE 42
+</pre></blockquote>
+<p>
+These integer constants are opcodes for the xFileControl method
+of the <a href="#sqlite3_io_methods">sqlite3_io_methods</a> object and for the <a href="#sqlite3_file_control">sqlite3_file_control()</a>
+interface.</p>
+
+<p><ul>
+<li><a name="sqlitefcntllockstate"></a>
+
+The <a href="#sqlitefcntllockstate">SQLITE_FCNTL_LOCKSTATE</a> opcode is used for debugging. This
+opcode causes the xFileControl method to write the current state of
+the lock (one of <a href="#SQLITE_LOCK_EXCLUSIVE">SQLITE_LOCK_NONE</a>, <a href="#SQLITE_LOCK_EXCLUSIVE">SQLITE_LOCK_SHARED</a>,
+<a href="#SQLITE_LOCK_EXCLUSIVE">SQLITE_LOCK_RESERVED</a>, <a href="#SQLITE_LOCK_EXCLUSIVE">SQLITE_LOCK_PENDING</a>, or <a href="#SQLITE_LOCK_EXCLUSIVE">SQLITE_LOCK_EXCLUSIVE</a>)
+into an integer that the pArg argument points to.
+This capability is only available if SQLite is compiled with <a href="compile.html#debug">SQLITE_DEBUG</a>.</p>
+
+<p><li><a name="sqlitefcntlsizehint"></a>
+
+The <a href="#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a> opcode is used by SQLite to give the VFS
+layer a hint of how large the database file will grow to be during the
+current transaction. This hint is not guaranteed to be accurate but it
+is often close. The underlying VFS might choose to preallocate database
+file space based on this hint in order to help writes to the database
+file run faster.</p>
+
+<p><li><a name="sqlitefcntlsizelimit"></a>
+
+The <a href="#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> opcode is used by in-memory VFS that
+implements <a href="#sqlite3_deserialize">sqlite3_deserialize()</a> to set an upper bound on the size
+of the in-memory database. The argument is a pointer to a <a href="#sqlite3_int64">sqlite3_int64</a>.
+If the integer pointed to is negative, then it is filled in with the
+current limit. Otherwise the limit is set to the larger of the value
+of the integer pointed to and the current database size. The integer
+pointed to is set to the new limit.</p>
+
+<p><li><a name="sqlitefcntlchunksize"></a>
+
+The <a href="#sqlitefcntlchunksize">SQLITE_FCNTL_CHUNK_SIZE</a> opcode is used to request that the VFS
+extends and truncates the database file in chunks of a size specified
+by the user. The fourth argument to <a href="#sqlite3_file_control">sqlite3_file_control()</a> should
+point to an integer (type int) containing the new chunk-size to use
+for the nominated database. Allocating database file space in large
+chunks (say 1MB at a time), may reduce file-system fragmentation and
+improve performance on some systems.</p>
+
+<p><li><a name="sqlitefcntlfilepointer"></a>
+
+The <a href="#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a> opcode is used to obtain a pointer
+to the <a href="#sqlite3_file">sqlite3_file</a> object associated with a particular database
+connection. See also <a href="#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a>.</p>
+
+<p><li><a name="sqlitefcntljournalpointer"></a>
+
+The <a href="#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> opcode is used to obtain a pointer
+to the <a href="#sqlite3_file">sqlite3_file</a> object associated with the journal file (either
+the <a href="lockingv3.html#rollback">rollback journal</a> or the <a href="wal.html">write-ahead log</a>) for a particular database
+connection. See also <a href="#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a>.</p>
+
+<p><li><a name="sqlitefcntlsyncomitted"></a>
+
+No longer in use.</p>
+
+<p><li><a name="sqlitefcntlsync"></a>
+
+The <a href="#sqlitefcntlsync">SQLITE_FCNTL_SYNC</a> opcode is generated internally by SQLite and
+sent to the VFS immediately before the xSync method is invoked on a
+database file descriptor. Or, if the xSync method is not invoked
+because the user has configured SQLite with
+<a href="pragma.html#pragma_synchronous">PRAGMA synchronous=OFF</a> it is invoked in place
+of the xSync method. In most cases, the pointer argument passed with
+this file-control is NULL. However, if the database file is being synced
+as part of a multi-database commit, the argument points to a nul-terminated
+string containing the transactions super-journal file name. VFSes that
+do not need this signal should silently ignore this opcode. Applications
+should not call <a href="#sqlite3_file_control">sqlite3_file_control()</a> with this opcode as doing so may
+disrupt the operation of the specialized VFSes that do require it.</p>
+
+<p><li><a name="sqlitefcntlcommitphasetwo"></a>
+
+The <a href="#sqlitefcntlcommitphasetwo">SQLITE_FCNTL_COMMIT_PHASETWO</a> opcode is generated internally by SQLite
+and sent to the VFS after a transaction has been committed immediately
+but before the database is unlocked. VFSes that do not need this signal
+should silently ignore this opcode. Applications should not call
+<a href="#sqlite3_file_control">sqlite3_file_control()</a> with this opcode as doing so may disrupt the
+operation of the specialized VFSes that do require it.</p>
+
+<p><li><a name="sqlitefcntlwin32avretry"></a>
+
+The <a href="#sqlitefcntlwin32avretry">SQLITE_FCNTL_WIN32_AV_RETRY</a> opcode is used to configure automatic
+retry counts and intervals for certain disk I/O operations for the
+windows <a href="vfs.html">VFS</a> in order to provide robustness in the presence of
+anti-virus programs. By default, the windows VFS will retry file read,
+file write, and file delete operations up to 10 times, with a delay
+of 25 milliseconds before the first retry and with the delay increasing
+by an additional 25 milliseconds with each subsequent retry. This
+opcode allows these two values (10 retries and 25 milliseconds of delay)
+to be adjusted. The values are changed for all database connections
+within the same process. The argument is a pointer to an array of two
+integers where the first integer is the new retry count and the second
+integer is the delay. If either integer is negative, then the setting
+is not changed but instead the prior value of that setting is written
+into the array entry, allowing the current retry settings to be
+interrogated. The zDbName parameter is ignored.</p>
+
+<p><li><a name="sqlitefcntlpersistwal"></a>
+
+The <a href="#sqlitefcntlpersistwal">SQLITE_FCNTL_PERSIST_WAL</a> opcode is used to set or query the
+persistent <a href="wal.html">Write Ahead Log</a> setting. By default, the auxiliary
+write ahead log (<a href="wal.html#walfile">WAL file</a>) and shared memory
+files used for transaction control
+are automatically deleted when the latest connection to the database
+closes. Setting persistent WAL mode causes those files to persist after
+close. Persisting the files is useful when other processes that do not
+have write permission on the directory containing the database file want
+to read the database file, as the WAL and shared memory files must exist
+in order for the database to be readable. The fourth parameter to
+<a href="#sqlite3_file_control">sqlite3_file_control()</a> for this opcode should be a pointer to an integer.
+That integer is 0 to disable persistent WAL mode or 1 to enable persistent
+WAL mode. If the integer is -1, then it is overwritten with the current
+WAL persistence setting.</p>
+
+<p><li><a name="sqlitefcntlpowersafeoverwrite"></a>
+
+The <a href="#sqlitefcntlpowersafeoverwrite">SQLITE_FCNTL_POWERSAFE_OVERWRITE</a> opcode is used to set or query the
+persistent "powersafe-overwrite" or "PSOW" setting. The PSOW setting
+determines the <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a> bit of the
+xDeviceCharacteristics methods. The fourth parameter to
+<a href="#sqlite3_file_control">sqlite3_file_control()</a> for this opcode should be a pointer to an integer.
+That integer is 0 to disable zero-damage mode or 1 to enable zero-damage
+mode. If the integer is -1, then it is overwritten with the current
+zero-damage mode setting.</p>
+
+<p><li><a name="sqlitefcntloverwrite"></a>
+
+The <a href="#sqlitefcntloverwrite">SQLITE_FCNTL_OVERWRITE</a> opcode is invoked by SQLite after opening
+a write transaction to indicate that, unless it is rolled back for some
+reason, the entire database file will be overwritten by the current
+transaction. This is used by VACUUM operations.</p>
+
+<p><li><a name="sqlitefcntlvfsname"></a>
+
+The <a href="#sqlitefcntlvfsname">SQLITE_FCNTL_VFSNAME</a> opcode can be used to obtain the names of
+all <a href="vfs.html">VFSes</a> in the VFS stack. The names are of all VFS shims and the
+final bottom-level VFS are written into memory obtained from
+<a href="#sqlite3_free">sqlite3_malloc()</a> and the result is stored in the char* variable
+that the fourth parameter of <a href="#sqlite3_file_control">sqlite3_file_control()</a> points to.
+The caller is responsible for freeing the memory when done. As with
+all file-control actions, there is no guarantee that this will actually
+do anything. Callers should initialize the char* variable to a NULL
+pointer in case this file-control is not implemented. This file-control
+is intended for diagnostic use only.</p>
+
+<p><li><a name="sqlitefcntlvfspointer"></a>
+
+The <a href="#sqlitefcntlvfspointer">SQLITE_FCNTL_VFS_POINTER</a> opcode finds a pointer to the top-level
+<a href="vfs.html">VFSes</a> currently in use. The argument X in
+sqlite3_file_control(db,SQLITE_FCNTL_VFS_POINTER,X) must be
+of type "<a href="#sqlite3_vfs">sqlite3_vfs</a> **". This opcodes will set *X
+to a pointer to the top-level VFS.
+When there are multiple VFS shims in the stack, this opcode finds the
+upper-most shim only.</p>
+
+<p><li><a name="sqlitefcntlpragma"></a>
+
+Whenever a <a href="pragma.html#syntax">PRAGMA</a> statement is parsed, an <a href="#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a>
+file control is sent to the open <a href="#sqlite3_file">sqlite3_file</a> object corresponding
+to the database file to which the pragma statement refers. The argument
+to the <a href="#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control is an array of
+pointers to strings (char**) in which the second element of the array
+is the name of the pragma and the third element is the argument to the
+pragma or NULL if the pragma has no argument. The handler for an
+<a href="#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control can optionally make the first element
+of the char** argument point to a string obtained from <a href="#sqlite3_mprintf">sqlite3_mprintf()</a>
+or the equivalent and that string will become the result of the pragma or
+the error message if the pragma fails. If the
+<a href="#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control returns <a href="#SQLITE_ABORT">SQLITE_NOTFOUND</a>, then normal
+<a href="pragma.html#syntax">PRAGMA</a> processing continues. If the <a href="#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a>
+file control returns <a href="#SQLITE_ABORT">SQLITE_OK</a>, then the parser assumes that the
+VFS has handled the PRAGMA itself and the parser generates a no-op
+prepared statement if result string is NULL, or that returns a copy
+of the result string if the string is non-NULL.
+If the <a href="#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control returns
+any result code other than <a href="#SQLITE_ABORT">SQLITE_OK</a> or <a href="#SQLITE_ABORT">SQLITE_NOTFOUND</a>, that means
+that the VFS encountered an error while handling the <a href="pragma.html#syntax">PRAGMA</a> and the
+compilation of the PRAGMA fails with an error. The <a href="#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a>
+file control occurs at the beginning of pragma statement analysis and so
+it is able to override built-in <a href="pragma.html#syntax">PRAGMA</a> statements.</p>
+
+<p><li><a name="sqlitefcntlbusyhandler"></a>
+
+The <a href="#sqlitefcntlbusyhandler">SQLITE_FCNTL_BUSYHANDLER</a>
+file-control may be invoked by SQLite on the database file handle
+shortly after it is opened in order to provide a custom VFS with access
+to the connection's busy-handler callback. The argument is of type (void**)
+- an array of two (void *) values. The first (void *) actually points
+to a function of type (int (*)(void *)). In order to invoke the connection's
+busy-handler, this function should be invoked with the second (void *) in
+the array as the only argument. If it returns non-zero, then the operation
+should be retried. If it returns zero, the custom VFS should abandon the
+current operation.</p>
+
+<p><li><a name="sqlitefcntltempfilename"></a>
+
+Applications can invoke the <a href="#sqlitefcntltempfilename">SQLITE_FCNTL_TEMPFILENAME</a> file-control
+to have SQLite generate a
+temporary filename using the same algorithm that is followed to generate
+temporary filenames for TEMP tables and other internal uses. The
+argument should be a char** which will be filled with the filename
+written into memory obtained from <a href="#sqlite3_free">sqlite3_malloc()</a>. The caller should
+invoke <a href="#sqlite3_free">sqlite3_free()</a> on the result to avoid a memory leak.</p>
+
+<p><li><a name="sqlitefcntlmmapsize"></a>
+
+The <a href="#sqlitefcntlmmapsize">SQLITE_FCNTL_MMAP_SIZE</a> file control is used to query or set the
+maximum number of bytes that will be used for memory-mapped I/O.
+The argument is a pointer to a value of type sqlite3_int64 that
+is an advisory maximum number of bytes in the file to memory map. The
+pointer is overwritten with the old value. The limit is not changed if
+the value originally pointed to is negative, and so the current limit
+can be queried by passing in a pointer to a negative number. This
+file-control is used internally to implement <a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a>.</p>
+
+<p><li><a name="sqlitefcntltrace"></a>
+
+The <a href="#sqlitefcntltrace">SQLITE_FCNTL_TRACE</a> file control provides advisory information
+to the VFS about what the higher layers of the SQLite stack are doing.
+This file control is used by some VFS activity tracing <a href="vfs.html#shim">shims</a>.
+The argument is a zero-terminated string. Higher layers in the
+SQLite stack may generate instances of this file control if
+the <a href="compile.html#use_fcntl_trace">SQLITE_USE_FCNTL_TRACE</a> compile-time option is enabled.</p>
+
+<p><li><a name="sqlitefcntlhasmoved"></a>
+
+The <a href="#sqlitefcntlhasmoved">SQLITE_FCNTL_HAS_MOVED</a> file control interprets its argument as a
+pointer to an integer and it writes a boolean into that integer depending
+on whether or not the file has been renamed, moved, or deleted since it
+was first opened.</p>
+
+<p><li><a name="sqlitefcntlwin32gethandle"></a>
+
+The <a href="#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> opcode can be used to obtain the
+underlying native file handle associated with a file handle. This file
+control interprets its argument as a pointer to a native file handle and
+writes the resulting value there.</p>
+
+<p><li><a name="sqlitefcntlwin32sethandle"></a>
+
+The <a href="#sqlitefcntlwin32sethandle">SQLITE_FCNTL_WIN32_SET_HANDLE</a> opcode is used for debugging. This
+opcode causes the xFileControl method to swap the file handle with the one
+pointed to by the pArg argument. This capability is used during testing
+and only needs to be supported when SQLITE_TEST is defined.</p>
+
+<p><li><a name="sqlitefcntlwalblock"></a>
+
+The <a href="#sqlitefcntlwalblock">SQLITE_FCNTL_WAL_BLOCK</a> is a signal to the VFS layer that it might
+be advantageous to block on the next WAL lock if the lock is not immediately
+available. The WAL subsystem issues this signal during rare
+circumstances in order to fix a problem with priority inversion.
+Applications should <em>not</em> use this file-control.</p>
+
+<p><li><a name="sqlitefcntlzipvfs"></a>
+
+The <a href="#sqlitefcntlzipvfs">SQLITE_FCNTL_ZIPVFS</a> opcode is implemented by zipvfs only. All other
+VFS should return SQLITE_NOTFOUND for this opcode.</p>
+
+<p><li><a name="sqlitefcntlrbu"></a>
+
+The <a href="#sqlitefcntlrbu">SQLITE_FCNTL_RBU</a> opcode is implemented by the special VFS used by
+the RBU extension only. All other VFS should return SQLITE_NOTFOUND for
+this opcode.</p>
+
+<p><li><a name="sqlitefcntlbeginatomicwrite"></a>
+
+If the <a href="#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> opcode returns SQLITE_OK, then
+the file descriptor is placed in "batch write mode", which
+means all subsequent write operations will be deferred and done
+atomically at the next <a href="#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a>. Systems
+that do not support batch atomic writes will return SQLITE_NOTFOUND.
+Following a successful SQLITE_FCNTL_BEGIN_ATOMIC_WRITE and prior to
+the closing <a href="#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a> or
+<a href="#sqlitefcntlrollbackatomicwrite">SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE</a>, SQLite will make
+no VFS interface calls on the same <a href="#sqlite3_file">sqlite3_file</a> file descriptor
+except for calls to the xWrite method and the xFileControl method
+with <a href="#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a>.</p>
+
+<p><li><a name="sqlitefcntlcommitatomicwrite"></a>
+
+The <a href="#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a> opcode causes all write
+operations since the previous successful call to
+<a href="#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> to be performed atomically.
+This file control returns <a href="#SQLITE_ABORT">SQLITE_OK</a> if and only if the writes were
+all performed successfully and have been committed to persistent storage.
+Regardless of whether or not it is successful, this file control takes
+the file descriptor out of batch write mode so that all subsequent
+write operations are independent.
+SQLite will never invoke SQLITE_FCNTL_COMMIT_ATOMIC_WRITE without
+a prior successful call to <a href="#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a>.</p>
+
+<p><li><a name="sqlitefcntlrollbackatomicwrite"></a>
+
+The <a href="#sqlitefcntlrollbackatomicwrite">SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE</a> opcode causes all write
+operations since the previous successful call to
+<a href="#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> to be rolled back.
+This file control takes the file descriptor out of batch write mode
+so that all subsequent write operations are independent.
+SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without
+a prior successful call to <a href="#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a>.</p>
+
+<p><li><a name="sqlitefcntllocktimeout"></a>
+
+The <a href="#sqlitefcntllocktimeout">SQLITE_FCNTL_LOCK_TIMEOUT</a> opcode is used to configure a VFS
+to block for up to M milliseconds before failing when attempting to
+obtain a file lock using the xLock or xShmLock methods of the VFS.
+The parameter is a pointer to a 32-bit signed integer that contains
+the value that M is to be set to. Before returning, the 32-bit signed
+integer is overwritten with the previous value of M.</p>
+
+<p><li><a name="sqlitefcntldataversion"></a>
+
+The <a href="#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> opcode is used to detect changes to
+a database file. The argument is a pointer to a 32-bit unsigned integer.
+The "data version" for the pager is written into the pointer. The
+"data version" changes whenever any change occurs to the corresponding
+database file, either through SQL statements on the same database
+connection or through transactions committed by separate database
+connections possibly in other processes. The <a href="#sqlite3_total_changes">sqlite3_total_changes()</a>
+interface can be used to find if any database on the connection has changed,
+but that interface responds to changes on TEMP as well as MAIN and does
+not provide a mechanism to detect changes to MAIN only. Also, the
+<a href="#sqlite3_total_changes">sqlite3_total_changes()</a> interface responds to internal changes only and
+omits changes made by other database connections. The
+<a href="pragma.html#pragma_data_version">PRAGMA data_version</a> command provides a mechanism to detect changes to
+a single attached database that occur due to other database connections,
+but omits changes implemented by the database connection on which it is
+called. This file control is the only mechanism to detect changes that
+happen either internally or externally and that are associated with
+a particular attached database.</p>
+
+<p><li><a name="sqlitefcntlckptstart"></a>
+
+The <a href="#sqlitefcntlckptstart">SQLITE_FCNTL_CKPT_START</a> opcode is invoked from within a checkpoint
+in wal mode before the client starts to copy pages from the wal
+file to the database file.</p>
+
+<p><li><a name="sqlitefcntlckptdone"></a>
+
+The <a href="#sqlitefcntlckptdone">SQLITE_FCNTL_CKPT_DONE</a> opcode is invoked from within a checkpoint
+in wal mode after the client has finished copying pages from the wal
+file to the database file, but before the *-shm file is updated to
+record the fact that the pages have been checkpointed.
+</ul></p>
+
+<p><li><a name="sqlitefcntlexternalreader"></a>
+
+The EXPERIMENTAL <a href="#sqlitefcntlexternalreader">SQLITE_FCNTL_EXTERNAL_READER</a> opcode is used to detect
+whether or not there is a database client in another process with a wal-mode
+transaction open on the database or not. It is only available on unix.The
+(void*) argument passed with this file-control should be a pointer to a
+value of type (int). The integer value is set to 1 if the database is a wal
+mode database and there exists at least one client in another process that
+currently has an SQL transaction open on the database. It is set to 0 if
+the database is not a wal-mode db, or if there is no such connection in any
+other process. This opcode cannot be used to detect transactions opened
+by clients within the current process, only within other processes.
+</ul></p>
+
+<p><li><a name="sqlitefcntlcksmfile"></a>
+
+Used by the cksmvfs VFS module only.</p>
+
+<p><li><a name="sqlitefcntlresetcache"></a>
+
+If there is currently no transaction open on the database, and the
+database is not a temp db, then this file-control purges the contents
+of the in-memory page cache. If there is an open transaction, or if
+the db is a temp-db, it is a no-op, not an error.
+</ul>
+</p><hr><a name="SQLITE_INDEX_CONSTRAINT_EQ"></a>
+<h2>Virtual Table Constraint Operator Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_INDEX_CONSTRAINT_EQ 2
+#define SQLITE_INDEX_CONSTRAINT_GT 4
+#define SQLITE_INDEX_CONSTRAINT_LE 8
+#define SQLITE_INDEX_CONSTRAINT_LT 16
+#define SQLITE_INDEX_CONSTRAINT_GE 32
+#define SQLITE_INDEX_CONSTRAINT_MATCH 64
+#define SQLITE_INDEX_CONSTRAINT_LIKE 65
+#define SQLITE_INDEX_CONSTRAINT_GLOB 66
+#define SQLITE_INDEX_CONSTRAINT_REGEXP 67
+#define SQLITE_INDEX_CONSTRAINT_NE 68
+#define SQLITE_INDEX_CONSTRAINT_ISNOT 69
+#define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70
+#define SQLITE_INDEX_CONSTRAINT_ISNULL 71
+#define SQLITE_INDEX_CONSTRAINT_IS 72
+#define SQLITE_INDEX_CONSTRAINT_LIMIT 73
+#define SQLITE_INDEX_CONSTRAINT_OFFSET 74
+#define SQLITE_INDEX_CONSTRAINT_FUNCTION 150
+</pre></blockquote>
+<p>
+These macros define the allowed values for the
+<a href="#sqlite3_index_info">sqlite3_index_info</a>.aConstraint[].op field. Each value represents
+an operator that is part of a constraint term in the WHERE clause of
+a query that uses a <a href="vtab.html">virtual table</a>.</p>
+
+<p>The left-hand operand of the operator is given by the corresponding
+aConstraint[].iColumn field. An iColumn of -1 indicates the left-hand
+operand is the rowid.
+The SQLITE_INDEX_CONSTRAINT_LIMIT and SQLITE_INDEX_CONSTRAINT_OFFSET
+operators have no left-hand operand, and so for those operators the
+corresponding aConstraint[].iColumn is meaningless and should not be
+used.</p>
+
+<p>All operator values from SQLITE_INDEX_CONSTRAINT_FUNCTION through
+value 255 are reserved to represent functions that are overloaded
+by the <a href="vtab.html#xfindfunction">xFindFunction method</a> of the virtual table
+implementation.</p>
+
+<p>The right-hand operands for each constraint might be accessible using
+the <a href="#sqlite3_vtab_rhs_value">sqlite3_vtab_rhs_value()</a> interface. Usually the right-hand
+operand is only available if it appears as a single constant literal
+in the input SQL. If the right-hand operand is another column or an
+expression (even a constant expression) or a parameter, then the
+sqlite3_vtab_rhs_value() probably will not be able to extract it.
+The SQLITE_INDEX_CONSTRAINT_ISNULL and
+SQLITE_INDEX_CONSTRAINT_ISNOTNULL operators have no right-hand operand
+and hence calls to sqlite3_vtab_rhs_value() for those operators will
+always return SQLITE_NOTFOUND.</p>
+
+<p>The collating sequence to be used for comparison can be found using
+the <a href="#sqlite3_vtab_collation">sqlite3_vtab_collation()</a> interface. For most real-world virtual
+tables, the collating sequence of constraints does not matter (for example
+because the constraints are numeric) and so the sqlite3_vtab_collation()
+interface is no commonly needed.
+</p><hr><a name="SQLITE_IOCAP_ATOMIC"></a>
+<h2>Device Characteristics</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_IOCAP_ATOMIC 0x00000001
+#define SQLITE_IOCAP_ATOMIC512 0x00000002
+#define SQLITE_IOCAP_ATOMIC1K 0x00000004
+#define SQLITE_IOCAP_ATOMIC2K 0x00000008
+#define SQLITE_IOCAP_ATOMIC4K 0x00000010
+#define SQLITE_IOCAP_ATOMIC8K 0x00000020
+#define SQLITE_IOCAP_ATOMIC16K 0x00000040
+#define SQLITE_IOCAP_ATOMIC32K 0x00000080
+#define SQLITE_IOCAP_ATOMIC64K 0x00000100
+#define SQLITE_IOCAP_SAFE_APPEND 0x00000200
+#define SQLITE_IOCAP_SEQUENTIAL 0x00000400
+#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800
+#define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000
+#define SQLITE_IOCAP_IMMUTABLE 0x00002000
+#define SQLITE_IOCAP_BATCH_ATOMIC 0x00004000
+</pre></blockquote>
+<p>
+The xDeviceCharacteristics method of the <a href="#sqlite3_io_methods">sqlite3_io_methods</a>
+object returns an integer which is a vector of these
+bit values expressing I/O characteristics of the mass storage
+device that holds the file that the <a href="#sqlite3_io_methods">sqlite3_io_methods</a>
+refers to.</p>
+
+<p>The SQLITE_IOCAP_ATOMIC property means that all writes of
+any size are atomic. The SQLITE_IOCAP_ATOMICnnn values
+mean that writes of blocks that are nnn bytes in size and
+are aligned to an address which is an integer multiple of
+nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means
+that when data is appended to a file, the data is appended
+first then the size of the file is extended, never the other
+way around. The SQLITE_IOCAP_SEQUENTIAL property means that
+information is written to disk in the same order as calls
+to xWrite(). The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that
+after reboot following a crash or power loss, the only bytes in a
+file that were written at the application level might have changed
+and that adjacent bytes, even bytes within the same sector are
+guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
+flag indicates that a file cannot be deleted when open. The
+SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on
+read-only media and cannot be changed even by processes with
+elevated privileges.</p>
+
+<p>The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying
+filesystem supports doing multiple write operations atomically when those
+write operations are bracketed by <a href="#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> and
+<a href="#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a>.
+</p><hr><a name="SQLITE_LOCK_EXCLUSIVE"></a>
+<h2>File Locking Levels</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_LOCK_NONE 0 /* xUnlock() only */
+#define SQLITE_LOCK_SHARED 1 /* xLock() or xUnlock() */
+#define SQLITE_LOCK_RESERVED 2 /* xLock() only */
+#define SQLITE_LOCK_PENDING 3 /* xLock() only */
+#define SQLITE_LOCK_EXCLUSIVE 4 /* xLock() only */
+</pre></blockquote>
+<p>
+SQLite uses one of these integer values as the second
+argument to calls it makes to the xLock() and xUnlock() methods
+of an <a href="#sqlite3_io_methods">sqlite3_io_methods</a> object. These values are ordered from
+lest restrictive to most restrictive.</p>
+
+<p>The argument to xLock() is always SHARED or higher. The argument to
+xUnlock is either SHARED or NONE.
+</p><hr><a name="SQLITE_MUTEX_FAST"></a>
+<h2>Mutex Types</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_MUTEX_FAST 0
+#define SQLITE_MUTEX_RECURSIVE 1
+#define SQLITE_MUTEX_STATIC_MAIN 2
+#define SQLITE_MUTEX_STATIC_MEM 3 /* sqlite3_malloc() */
+#define SQLITE_MUTEX_STATIC_MEM2 4 /* NOT USED */
+#define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */
+#define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_randomness() */
+#define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */
+#define SQLITE_MUTEX_STATIC_LRU2 7 /* NOT USED */
+#define SQLITE_MUTEX_STATIC_PMEM 7 /* sqlite3PageMalloc() */
+#define SQLITE_MUTEX_STATIC_APP1 8 /* For use by application */
+#define SQLITE_MUTEX_STATIC_APP2 9 /* For use by application */
+#define SQLITE_MUTEX_STATIC_APP3 10 /* For use by application */
+#define SQLITE_MUTEX_STATIC_VFS1 11 /* For use by built-in VFS */
+#define SQLITE_MUTEX_STATIC_VFS2 12 /* For use by extension VFS */
+#define SQLITE_MUTEX_STATIC_VFS3 13 /* For use by application VFS */
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_mutex_alloc">sqlite3_mutex_alloc()</a> interface takes a single argument
+which is one of these integer constants.</p>
+
+<p>The set of static mutexes may change from one SQLite release to the
+next. Applications that override the built-in mutex logic must be
+prepared to accommodate additional static mutexes.
+</p><hr><a name="SQLITE_OPEN_AUTOPROXY"></a>
+<h2>Flags For File Open Operations</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */
+#define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS only */
+#define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS only */
+#define SQLITE_OPEN_URI 0x00000040 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_MEMORY 0x00000080 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS only */
+#define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS only */
+#define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS only */
+#define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 /* VFS only */
+#define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 /* VFS only */
+#define SQLITE_OPEN_SUBJOURNAL 0x00002000 /* VFS only */
+#define SQLITE_OPEN_SUPER_JOURNAL 0x00004000 /* VFS only */
+#define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_WAL 0x00080000 /* VFS only */
+#define SQLITE_OPEN_NOFOLLOW 0x01000000 /* Ok for sqlite3_open_v2() */
+#define SQLITE_OPEN_EXRESCODE 0x02000000 /* Extended result codes */
+</pre></blockquote>
+<p>
+These bit values are intended for use in the
+3rd parameter to the <a href="#sqlite3_open">sqlite3_open_v2()</a> interface and
+in the 4th parameter to the <a href="#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> method.</p>
+
+<p>Only those flags marked as "Ok for sqlite3_open_v2()" may be
+used as the third argument to the <a href="#sqlite3_open">sqlite3_open_v2()</a> interface.
+The other flags have historically been ignored by sqlite3_open_v2(),
+though future versions of SQLite might change so that an error is
+raised if any of the disallowed bits are passed into sqlite3_open_v2().
+Applications should not depend on the historical behavior.</p>
+
+<p>Note in particular that passing the SQLITE_OPEN_EXCLUSIVE flag into
+<a href="#sqlite3_open">sqlite3_open_v2()</a> does *not* cause the underlying database file
+to be opened using O_EXCL. Passing SQLITE_OPEN_EXCLUSIVE into
+<a href="#sqlite3_open">sqlite3_open_v2()</a> has historically be a no-op and might become an
+error in future versions of SQLite.
+</p><hr><a name="SQLITE_PREPARE_NORMALIZE"></a>
+<h2>Prepare Flags</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_PREPARE_PERSISTENT 0x01
+#define SQLITE_PREPARE_NORMALIZE 0x02
+#define SQLITE_PREPARE_NO_VTAB 0x04
+</pre></blockquote>
+<p>
+These constants define various flags that can be passed into
+"prepFlags" parameter of the <a href="#sqlite3_prepare">sqlite3_prepare_v3()</a> and
+<a href="#sqlite3_prepare">sqlite3_prepare16_v3()</a> interfaces.</p>
+
+<p>New flags may be added in future releases of SQLite.</p>
+
+<p><dl>
+<a name="sqlitepreparepersistent"></a>
+ <dt>SQLITE_PREPARE_PERSISTENT</dt>
+<dd>The SQLITE_PREPARE_PERSISTENT flag is a hint to the query planner
+that the prepared statement will be retained for a long time and
+probably reused many times. Without this flag, <a href="#sqlite3_prepare">sqlite3_prepare_v3()</a>
+and <a href="#sqlite3_prepare">sqlite3_prepare16_v3()</a> assume that the prepared statement will
+be used just once or at most a few times and then destroyed using
+<a href="#sqlite3_finalize">sqlite3_finalize()</a> relatively soon. The current implementation acts
+on this hint by avoiding the use of <a href="malloc.html#lookaside">lookaside memory</a> so as not to
+deplete the limited store of lookaside memory. Future versions of
+SQLite may act on this hint differently.</p>
+
+<p><a name="sqlitepreparenormalize"></a>
+ <dt>SQLITE_PREPARE_NORMALIZE</dt>
+<dd>The SQLITE_PREPARE_NORMALIZE flag is a no-op. This flag used
+to be required for any prepared statement that wanted to use the
+<a href="#sqlite3_expanded_sql">sqlite3_normalized_sql()</a> interface. However, the
+<a href="#sqlite3_expanded_sql">sqlite3_normalized_sql()</a> interface is now available to all
+prepared statements, regardless of whether or not they use this
+flag.</p>
+
+<p><a name="sqlitepreparenovtab"></a>
+ <dt>SQLITE_PREPARE_NO_VTAB</dt>
+<dd>The SQLITE_PREPARE_NO_VTAB flag causes the SQL compiler
+to return an error (error code SQLITE_ERROR) if the statement uses
+any virtual tables.
+</dl>
+</p><hr><a name="SQLITE_SCANSTAT_EST"></a>
+<h2>Prepared Statement Scan Status Opcodes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SCANSTAT_NLOOP 0
+#define SQLITE_SCANSTAT_NVISIT 1
+#define SQLITE_SCANSTAT_EST 2
+#define SQLITE_SCANSTAT_NAME 3
+#define SQLITE_SCANSTAT_EXPLAIN 4
+#define SQLITE_SCANSTAT_SELECTID 5
+</pre></blockquote>
+<p>
+The following constants can be used for the T parameter to the
+<a href="#sqlite3_stmt_scanstatus">sqlite3_stmt_scanstatus(S,X,T,V)</a> interface. Each constant designates a
+different metric for sqlite3_stmt_scanstatus() to return.</p>
+
+<p>When the value returned to V is a string, space to hold that string is
+managed by the prepared statement S and will be automatically freed when
+S is finalized.</p>
+
+<p><dl>
+<a name="sqlitescanstatnloop"></a>
+ <dt>SQLITE_SCANSTAT_NLOOP</dt>
+<dd>The <a href="#sqlite3_int64">sqlite3_int64</a> variable pointed to by the V parameter will be
+set to the total number of times that the X-th loop has run.</dd></p>
+
+<p><a name="sqlitescanstatnvisit"></a>
+ <dt>SQLITE_SCANSTAT_NVISIT</dt>
+<dd>The <a href="#sqlite3_int64">sqlite3_int64</a> variable pointed to by the V parameter will be set
+to the total number of rows examined by all iterations of the X-th loop.</dd></p>
+
+<p><a name="sqlitescanstatest"></a>
+ <dt>SQLITE_SCANSTAT_EST</dt>
+<dd>The "double" variable pointed to by the V parameter will be set to the
+query planner's estimate for the average number of rows output from each
+iteration of the X-th loop. If the query planner's estimates was accurate,
+then this value will approximate the quotient NVISIT/NLOOP and the
+product of this value for all prior loops with the same SELECTID will
+be the NLOOP value for the current loop.</p>
+
+<p><a name="sqlitescanstatname"></a>
+ <dt>SQLITE_SCANSTAT_NAME</dt>
+<dd>The "const char *" variable pointed to by the V parameter will be set
+to a zero-terminated UTF-8 string containing the name of the index or table
+used for the X-th loop.</p>
+
+<p><a name="sqlitescanstatexplain"></a>
+ <dt>SQLITE_SCANSTAT_EXPLAIN</dt>
+<dd>The "const char *" variable pointed to by the V parameter will be set
+to a zero-terminated UTF-8 string containing the <a href="eqp.html">EXPLAIN QUERY PLAN</a>
+description for the X-th loop.</p>
+
+<p><a name="sqlitescanstatselectid"></a>
+ <dt>SQLITE_SCANSTAT_SELECT</dt>
+<dd>The "int" variable pointed to by the V parameter will be set to the
+"select-id" for the X-th loop. The select-id identifies which query or
+subquery the loop is part of. The main query has a select-id of zero.
+The select-id is the same value as is output in the first column
+of an <a href="eqp.html">EXPLAIN QUERY PLAN</a> query.
+</dl>
+</p><hr><a name="SQLITE_SHM_EXCLUSIVE"></a>
+<h2>Flags for the xShmLock VFS method</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SHM_UNLOCK 1
+#define SQLITE_SHM_LOCK 2
+#define SQLITE_SHM_SHARED 4
+#define SQLITE_SHM_EXCLUSIVE 8
+</pre></blockquote>
+<p>
+These integer constants define the various locking operations
+allowed by the xShmLock method of <a href="#sqlite3_io_methods">sqlite3_io_methods</a>. The
+following are the only legal combinations of flags to the
+xShmLock method:</p>
+
+<p><ul>
+<li> SQLITE_SHM_LOCK | SQLITE_SHM_SHARED
+<li> SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE
+<li> SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED
+<li> SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE
+</ul></p>
+
+<p>When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as
+was given on the corresponding lock.</p>
+
+<p>The xShmLock method can transition between unlocked and SHARED or
+between unlocked and EXCLUSIVE. It cannot transition between SHARED
+and EXCLUSIVE.
+</p><hr><a name="SQLITE_SOURCE_ID"></a>
+<h2>Compile-Time Library Version Numbers</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_VERSION "3.40.1"
+#define SQLITE_VERSION_NUMBER 3040001
+#define SQLITE_SOURCE_ID "2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24"
+</pre></blockquote>
+<p>
+The <a href="#SQLITE_SOURCE_ID">SQLITE_VERSION</a> C preprocessor macro in the sqlite3.h header
+evaluates to a string literal that is the SQLite version in the
+format "X.Y.Z" where X is the major version number (always 3 for
+SQLite3) and Y is the minor version number and Z is the release number.
+The <a href="#SQLITE_SOURCE_ID">SQLITE_VERSION_NUMBER</a> C preprocessor macro resolves to an integer
+with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same
+numbers used in <a href="#SQLITE_SOURCE_ID">SQLITE_VERSION</a>.
+The SQLITE_VERSION_NUMBER for any given release of SQLite will also
+be larger than the release from which it is derived. Either Y will
+be held constant and Z will be incremented or else Y will be incremented
+and Z will be reset to zero.</p>
+
+<p>Since <a href="releaselog/3_6_18.html">version 3.6.18</a> (2009-09-11),
+SQLite source code has been stored in the
+<a href="http://www.fossil-scm.org/">Fossil configuration management
+system</a>. The SQLITE_SOURCE_ID macro evaluates to
+a string which identifies a particular check-in of SQLite
+within its configuration management system. The SQLITE_SOURCE_ID
+string contains the date and time of the check-in (UTC) and a SHA1
+or SHA3-256 hash of the entire source tree. If the source code has
+been edited in any way since it was last checked in, then the last
+four hexadecimal digits of the hash may be modified.</p>
+
+<p>See also: <a href="#sqlite3_libversion">sqlite3_libversion()</a>,
+<a href="#sqlite3_libversion">sqlite3_libversion_number()</a>, <a href="#sqlite3_libversion">sqlite3_sourceid()</a>,
+<a href="lang_corefunc.html#sqlite_version">sqlite_version()</a> and <a href="lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a>.
+</p><hr><a name="SQLITE_STATIC"></a>
+<h2>Constants Defining Special Destructor Behavior</h2>
+</div>
+<blockquote><pre>
+typedef void (*sqlite3_destructor_type)(void*);
+#define SQLITE_STATIC ((sqlite3_destructor_type)0)
+#define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1)
+</pre></blockquote>
+<p>
+These are special values for the destructor that is passed in as the
+final argument to routines like <a href="#sqlite3_result_blob">sqlite3_result_blob()</a>. If the destructor
+argument is SQLITE_STATIC, it means that the content pointer is constant
+and will never change. It does not need to be destroyed. The
+SQLITE_TRANSIENT value means that the content will likely change in
+the near future and that SQLite should make its own private copy of
+the content before returning.</p>
+
+<p>The typedef is necessary to work around problems in certain
+C++ compilers.
+</p><hr><a name="SQLITE_STATUS_MALLOC_COUNT"></a>
+<h2>Status Parameters</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_STATUS_MEMORY_USED 0
+#define SQLITE_STATUS_PAGECACHE_USED 1
+#define SQLITE_STATUS_PAGECACHE_OVERFLOW 2
+#define SQLITE_STATUS_SCRATCH_USED 3 /* NOT USED */
+#define SQLITE_STATUS_SCRATCH_OVERFLOW 4 /* NOT USED */
+#define SQLITE_STATUS_MALLOC_SIZE 5
+#define SQLITE_STATUS_PARSER_STACK 6
+#define SQLITE_STATUS_PAGECACHE_SIZE 7
+#define SQLITE_STATUS_SCRATCH_SIZE 8 /* NOT USED */
+#define SQLITE_STATUS_MALLOC_COUNT 9
+</pre></blockquote>
+<p>
+These integer constants designate various run-time status parameters
+that can be returned by <a href="#sqlite3_status">sqlite3_status()</a>.</p>
+
+<p><dl>
+<a name="sqlitestatusmemoryused"></a>
+ <dt>SQLITE_STATUS_MEMORY_USED</dt>
+<dd>This parameter is the current amount of memory checked out
+using <a href="#sqlite3_free">sqlite3_malloc()</a>, either directly or indirectly. The
+figure includes calls made to <a href="#sqlite3_free">sqlite3_malloc()</a> by the application
+and internal memory usage by the SQLite library. Auxiliary page-cache
+memory controlled by <a href="#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a> is not included in
+this parameter. The amount returned is the sum of the allocation
+sizes as reported by the xSize method in <a href="#sqlite3_mem_methods">sqlite3_mem_methods</a>.</dd></p>
+
+<p><a name="sqlitestatusmallocsize"></a>
+ <dt>SQLITE_STATUS_MALLOC_SIZE</dt>
+<dd>This parameter records the largest memory allocation request
+handed to <a href="#sqlite3_free">sqlite3_malloc()</a> or <a href="#sqlite3_free">sqlite3_realloc()</a> (or their
+internal equivalents). Only the value returned in the
+*pHighwater parameter to <a href="#sqlite3_status">sqlite3_status()</a> is of interest.
+The value written into the *pCurrent parameter is undefined.</dd></p>
+
+<p><a name="sqlitestatusmalloccount"></a>
+ <dt>SQLITE_STATUS_MALLOC_COUNT</dt>
+<dd>This parameter records the number of separate memory allocations
+currently checked out.</dd></p>
+
+<p><a name="sqlitestatuspagecacheused"></a>
+ <dt>SQLITE_STATUS_PAGECACHE_USED</dt>
+<dd>This parameter returns the number of pages used out of the
+<a href="malloc.html#pagecache">pagecache memory allocator</a> that was configured using
+<a href="#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>. The
+value returned is in pages, not in bytes.</dd></p>
+
+<p><a name="sqlitestatuspagecacheoverflow"></a>
+
+<dt>SQLITE_STATUS_PAGECACHE_OVERFLOW</dt>
+<dd>This parameter returns the number of bytes of page cache
+allocation which could not be satisfied by the <a href="#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>
+buffer and where forced to overflow to <a href="#sqlite3_free">sqlite3_malloc()</a>. The
+returned value includes allocations that overflowed because they
+where too large (they were larger than the "sz" parameter to
+<a href="#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>) and allocations that overflowed because
+no space was left in the page cache.</dd></p>
+
+<p><a name="sqlitestatuspagecachesize"></a>
+ <dt>SQLITE_STATUS_PAGECACHE_SIZE</dt>
+<dd>This parameter records the largest memory allocation request
+handed to the <a href="malloc.html#pagecache">pagecache memory allocator</a>. Only the value returned in the
+*pHighwater parameter to <a href="#sqlite3_status">sqlite3_status()</a> is of interest.
+The value written into the *pCurrent parameter is undefined.</dd></p>
+
+<p><a name="sqlitestatusscratchused"></a>
+ <dt>SQLITE_STATUS_SCRATCH_USED</dt>
+<dd>No longer used.</dd></p>
+
+<p><a name="sqlitestatusscratchoverflow"></a>
+ <dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
+<dd>No longer used.</dd></p>
+
+<p><a name="sqlitestatusscratchsize"></a>
+ <dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
+<dd>No longer used.</dd></p>
+
+<p><a name="sqlitestatusparserstack"></a>
+ <dt>SQLITE_STATUS_PARSER_STACK</dt>
+<dd>The *pHighwater parameter records the deepest parser stack.
+The *pCurrent value is undefined. The *pHighwater value is only
+meaningful if SQLite is compiled with <a href="compile.html#yytrackmaxstackdepth">YYTRACKMAXSTACKDEPTH</a>.</dd>
+</dl></p>
+
+<p>New status parameters may be added from time to time.
+</p><hr><a name="SQLITE_SYNC_DATAONLY"></a>
+<h2>Synchronization Type Flags</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_SYNC_NORMAL 0x00002
+#define SQLITE_SYNC_FULL 0x00003
+#define SQLITE_SYNC_DATAONLY 0x00010
+</pre></blockquote>
+<p>
+When SQLite invokes the xSync() method of an
+<a href="#sqlite3_io_methods">sqlite3_io_methods</a> object it uses a combination of
+these integer values as the second argument.</p>
+
+<p>When the SQLITE_SYNC_DATAONLY flag is used, it means that the
+sync operation only needs to flush data to mass storage. Inode
+information need not be flushed. If the lower four bits of the flag
+equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
+If the lower four bits equal SQLITE_SYNC_FULL, that means
+to use Mac OS X style fullsync instead of fsync().</p>
+
+<p>Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
+with the <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a>=NORMAL and <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a>=FULL
+settings. The <a href="pragma.html#pragma_synchronous">synchronous pragma</a> determines when calls to the
+xSync VFS method occur and applies uniformly across all platforms.
+The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
+energetic or rigorous or forceful the sync operations are and
+only make a difference on Mac OSX for the default SQLite code.
+(Third-party VFS implementations might also make the distinction
+between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
+operating systems natively supported by SQLite, only Mac OSX
+cares about the difference.)
+</p><hr><a name="SQLITE_TESTCTRL_ALWAYS"></a>
+<h2>Testing Interface Operation Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_TESTCTRL_FIRST 5
+#define SQLITE_TESTCTRL_PRNG_SAVE 5
+#define SQLITE_TESTCTRL_PRNG_RESTORE 6
+#define SQLITE_TESTCTRL_PRNG_RESET 7 /* NOT USED */
+#define SQLITE_TESTCTRL_BITVEC_TEST 8
+#define SQLITE_TESTCTRL_FAULT_INSTALL 9
+#define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10
+#define SQLITE_TESTCTRL_PENDING_BYTE 11
+#define SQLITE_TESTCTRL_ASSERT 12
+#define SQLITE_TESTCTRL_ALWAYS 13
+#define SQLITE_TESTCTRL_RESERVE 14 /* NOT USED */
+#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
+#define SQLITE_TESTCTRL_ISKEYWORD 16 /* NOT USED */
+#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */
+#define SQLITE_TESTCTRL_INTERNAL_FUNCTIONS 17
+#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
+#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
+#define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD 19
+#define SQLITE_TESTCTRL_NEVER_CORRUPT 20
+#define SQLITE_TESTCTRL_VDBE_COVERAGE 21
+#define SQLITE_TESTCTRL_BYTEORDER 22
+#define SQLITE_TESTCTRL_ISINIT 23
+#define SQLITE_TESTCTRL_SORTER_MMAP 24
+#define SQLITE_TESTCTRL_IMPOSTER 25
+#define SQLITE_TESTCTRL_PARSER_COVERAGE 26
+#define SQLITE_TESTCTRL_RESULT_INTREAL 27
+#define SQLITE_TESTCTRL_PRNG_SEED 28
+#define SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS 29
+#define SQLITE_TESTCTRL_SEEK_COUNT 30
+#define SQLITE_TESTCTRL_TRACEFLAGS 31
+#define SQLITE_TESTCTRL_TUNE 32
+#define SQLITE_TESTCTRL_LOGEST 33
+#define SQLITE_TESTCTRL_LAST 33 /* Largest TESTCTRL */
+</pre></blockquote>
+<p>
+These constants are the valid operation code parameters used
+as the first argument to <a href="#sqlite3_test_control">sqlite3_test_control()</a>.</p>
+
+<p>These parameters and their meanings are subject to change
+without notice. These values are for testing purposes only.
+Applications should not use any of these parameters or the
+<a href="#sqlite3_test_control">sqlite3_test_control()</a> interface.
+</p><hr><a name="SQLITE_TRACE"></a>
+<h2>SQL Trace Event Codes</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_TRACE_STMT 0x01
+#define SQLITE_TRACE_PROFILE 0x02
+#define SQLITE_TRACE_ROW 0x04
+#define SQLITE_TRACE_CLOSE 0x08
+</pre></blockquote>
+<p>
+These constants identify classes of events that can be monitored
+using the <a href="#sqlite3_trace_v2">sqlite3_trace_v2()</a> tracing logic. The M argument
+to <a href="#sqlite3_trace_v2">sqlite3_trace_v2(D,M,X,P)</a> is an OR-ed combination of one or more of
+the following constants. The first argument to the trace callback
+is one of the following constants.</p>
+
+<p>New tracing constants may be added in future releases.</p>
+
+<p>A trace callback has four arguments: xCallback(T,C,P,X).
+The T argument is one of the integer type codes above.
+The C argument is a copy of the context pointer passed in as the
+fourth argument to <a href="#sqlite3_trace_v2">sqlite3_trace_v2()</a>.
+The P and X arguments are pointers whose meanings depend on T.</p>
+
+<p><dl>
+<a name="sqlitetracestmt"></a>
+ <dt>SQLITE_TRACE_STMT</dt>
+<dd>An SQLITE_TRACE_STMT callback is invoked when a prepared statement
+first begins running and possibly at other times during the
+execution of the prepared statement, such as at the start of each
+trigger subprogram. The P argument is a pointer to the
+<a href="#sqlite3_stmt">prepared statement</a>. The X argument is a pointer to a string which
+is the unexpanded SQL text of the prepared statement or an SQL comment
+that indicates the invocation of a trigger. The callback can compute
+the same text that would have been returned by the legacy <a href="#sqlite3_profile">sqlite3_trace()</a>
+interface by using the X argument when X begins with "--" and invoking
+<a href="#sqlite3_expanded_sql">sqlite3_expanded_sql(P)</a> otherwise.</p>
+
+<p><a name="sqlitetraceprofile"></a>
+ <dt>SQLITE_TRACE_PROFILE</dt>
+<dd>An SQLITE_TRACE_PROFILE callback provides approximately the same
+information as is provided by the <a href="#sqlite3_profile">sqlite3_profile()</a> callback.
+The P argument is a pointer to the <a href="#sqlite3_stmt">prepared statement</a> and the
+X argument points to a 64-bit integer which is the estimated of
+the number of nanosecond that the prepared statement took to run.
+The SQLITE_TRACE_PROFILE callback is invoked when the statement finishes.</p>
+
+<p><a name="sqlitetracerow"></a>
+ <dt>SQLITE_TRACE_ROW</dt>
+<dd>An SQLITE_TRACE_ROW callback is invoked whenever a prepared
+statement generates a single row of result.
+The P argument is a pointer to the <a href="#sqlite3_stmt">prepared statement</a> and the
+X argument is unused.</p>
+
+<p><a name="sqlitetraceclose"></a>
+ <dt>SQLITE_TRACE_CLOSE</dt>
+<dd>An SQLITE_TRACE_CLOSE callback is invoked when a database
+connection closes.
+The P argument is a pointer to the <a href="#sqlite3">database connection</a> object
+and the X argument is unused.
+</dl>
+</p><hr><a name="SQLITE_TXN_NONE"></a>
+<h2>Allowed return values from [sqlite3_txn_state()]</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_TXN_NONE 0
+#define SQLITE_TXN_READ 1
+#define SQLITE_TXN_WRITE 2
+</pre></blockquote>
+<p>
+These constants define the current transaction state of a database file.
+The <a href="#sqlite3_txn_state">sqlite3_txn_state(D,S)</a> interface returns one of these
+constants in order to describe the transaction state of schema S
+in <a href="#sqlite3">database connection</a> D.</p>
+
+<p><dl>
+<a name="sqlitetxnnone"></a>
+ <dt>SQLITE_TXN_NONE</dt>
+<dd>The SQLITE_TXN_NONE state means that no transaction is currently
+pending.</dd></p>
+
+<p><a name="sqlitetxnread"></a>
+ <dt>SQLITE_TXN_READ</dt>
+<dd>The SQLITE_TXN_READ state means that the database is currently
+in a read transaction. Content has been read from the database file
+but nothing in the database file has changed. The transaction state
+will advanced to SQLITE_TXN_WRITE if any changes occur and there are
+no other conflicting concurrent write transactions. The transaction
+state will revert to SQLITE_TXN_NONE following a <a href="lang_transaction.html">ROLLBACK</a> or
+<a href="lang_transaction.html">COMMIT</a>.</dd></p>
+
+<p><a name="sqlitetxnwrite"></a>
+ <dt>SQLITE_TXN_WRITE</dt>
+<dd>The SQLITE_TXN_WRITE state means that the database is currently
+in a write transaction. Content has been written to the database file
+but has not yet committed. The transaction state will change to
+to SQLITE_TXN_NONE at the next <a href="lang_transaction.html">ROLLBACK</a> or <a href="lang_transaction.html">COMMIT</a>.</dd>
+</p><hr><a name="SQLITE_VTAB_CONSTRAINT_SUPPORT"></a>
+<h2>Virtual Table Configuration Options</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
+#define SQLITE_VTAB_INNOCUOUS 2
+#define SQLITE_VTAB_DIRECTONLY 3
+</pre></blockquote>
+<p>
+These macros define the various options to the
+<a href="#sqlite3_vtab_config">sqlite3_vtab_config()</a> interface that <a href="vtab.html">virtual table</a> implementations
+can use to customize and optimize their behavior.</p>
+
+<p><dl>
+<a name="sqlitevtabconstraintsupport"></a>
+
+<dt>SQLITE_VTAB_CONSTRAINT_SUPPORT</dt>
+<dd>Calls of the form
+<a href="#sqlite3_vtab_config">sqlite3_vtab_config</a>(db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported,
+where X is an integer. If X is zero, then the <a href="vtab.html">virtual table</a> whose
+<a href="vtab.html#xcreate">xCreate</a> or <a href="vtab.html#xconnect">xConnect</a> method invoked <a href="#sqlite3_vtab_config">sqlite3_vtab_config()</a> does not
+support constraints. In this configuration (which is the default) if
+a call to the <a href="vtab.html#xupdate">xUpdate</a> method returns <a href="#SQLITE_ABORT">SQLITE_CONSTRAINT</a>, then the entire
+statement is rolled back as if <a href="lang_conflict.html">OR ABORT</a> had been
+specified as part of the users SQL statement, regardless of the actual
+ON CONFLICT mode specified.</p>
+
+<p>If X is non-zero, then the virtual table implementation guarantees
+that if <a href="vtab.html#xupdate">xUpdate</a> returns <a href="#SQLITE_ABORT">SQLITE_CONSTRAINT</a>, it will do so before
+any modifications to internal or persistent data structures have been made.
+If the <a href="lang_conflict.html">ON CONFLICT</a> mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite
+is able to roll back a statement or database transaction, and abandon
+or continue processing the current SQL statement as appropriate.
+If the ON CONFLICT mode is REPLACE and the <a href="vtab.html#xupdate">xUpdate</a> method returns
+<a href="#SQLITE_ABORT">SQLITE_CONSTRAINT</a>, SQLite handles this as if the ON CONFLICT mode
+had been ABORT.</p>
+
+<p>Virtual table implementations that are required to handle OR REPLACE
+must do so within the <a href="vtab.html#xupdate">xUpdate</a> method. If a call to the
+<a href="#sqlite3_vtab_on_conflict">sqlite3_vtab_on_conflict()</a> function indicates that the current ON
+CONFLICT policy is REPLACE, the virtual table implementation should
+silently replace the appropriate rows within the xUpdate callback and
+return SQLITE_OK. Or, if this is not possible, it may return
+SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT
+constraint handling.
+</dd></p>
+
+<p><a name="sqlitevtabdirectonly"></a>
+<dt>SQLITE_VTAB_DIRECTONLY</dt>
+<dd>Calls of the form
+<a href="#sqlite3_vtab_config">sqlite3_vtab_config</a>(db,SQLITE_VTAB_DIRECTONLY) from within the
+the <a href="vtab.html#xconnect">xConnect</a> or <a href="vtab.html#xcreate">xCreate</a> methods of a <a href="vtab.html">virtual table</a> implmentation
+prohibits that virtual table from being used from within triggers and
+views.
+</dd></p>
+
+<p><a name="sqlitevtabinnocuous"></a>
+<dt>SQLITE_VTAB_INNOCUOUS</dt>
+<dd>Calls of the form
+<a href="#sqlite3_vtab_config">sqlite3_vtab_config</a>(db,SQLITE_VTAB_INNOCUOUS) from within the
+the <a href="vtab.html#xconnect">xConnect</a> or <a href="vtab.html#xcreate">xCreate</a> methods of a <a href="vtab.html">virtual table</a> implmentation
+identify that virtual table as being safe to use from within triggers
+and views. Conceptually, the SQLITE_VTAB_INNOCUOUS tag means that the
+virtual table can do no serious harm even if it is controlled by a
+malicious hacker. Developers should avoid setting the SQLITE_VTAB_INNOCUOUS
+flag unless absolutely necessary.
+</dd>
+</dl>
+</p><hr><a name="SQLITE_WIN32_DATA_DIRECTORY_TYPE"></a>
+<h2>Win32 Directory Types</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_WIN32_DATA_DIRECTORY_TYPE 1
+#define SQLITE_WIN32_TEMP_DIRECTORY_TYPE 2
+</pre></blockquote>
+<p>
+These macros are only available on Windows. They define the allowed values
+for the type argument to the <a href="#sqlite3_win32_set_directory">sqlite3_win32_set_directory</a> interface.
+</p><hr><a name="SQLITE_LIMIT_ATTACHED"></a>
+<h2>Run-Time Limit Categories</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_LIMIT_LENGTH 0
+#define SQLITE_LIMIT_SQL_LENGTH 1
+#define SQLITE_LIMIT_COLUMN 2
+#define SQLITE_LIMIT_EXPR_DEPTH 3
+#define SQLITE_LIMIT_COMPOUND_SELECT 4
+#define SQLITE_LIMIT_VDBE_OP 5
+#define SQLITE_LIMIT_FUNCTION_ARG 6
+#define SQLITE_LIMIT_ATTACHED 7
+#define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8
+#define SQLITE_LIMIT_VARIABLE_NUMBER 9
+#define SQLITE_LIMIT_TRIGGER_DEPTH 10
+#define SQLITE_LIMIT_WORKER_THREADS 11
+</pre></blockquote>
+<p>
+These constants define various performance limits
+that can be lowered at run-time using <a href="#sqlite3_limit">sqlite3_limit()</a>.
+The synopsis of the meanings of the various limits is shown below.
+Additional information is available at <a href="limits.html">Limits in SQLite</a>.</p>
+
+<p><dl>
+<a name="sqlitelimitlength"></a>
+ <dt>SQLITE_LIMIT_LENGTH</dt>
+<dd>The maximum size of any string or BLOB or table row, in bytes.<dd></p>
+
+<p><a name="sqlitelimitsqllength"></a>
+ <dt>SQLITE_LIMIT_SQL_LENGTH</dt>
+<dd>The maximum length of an SQL statement, in bytes.</dd></p>
+
+<p><a name="sqlitelimitcolumn"></a>
+ <dt>SQLITE_LIMIT_COLUMN</dt>
+<dd>The maximum number of columns in a table definition or in the
+result set of a <a href="lang_select.html">SELECT</a> or the maximum number of columns in an index
+or in an ORDER BY or GROUP BY clause.</dd></p>
+
+<p><a name="sqlitelimitexprdepth"></a>
+ <dt>SQLITE_LIMIT_EXPR_DEPTH</dt>
+<dd>The maximum depth of the parse tree on any expression.</dd></p>
+
+<p><a name="sqlitelimitcompoundselect"></a>
+ <dt>SQLITE_LIMIT_COMPOUND_SELECT</dt>
+<dd>The maximum number of terms in a compound SELECT statement.</dd></p>
+
+<p><a name="sqlitelimitvdbeop"></a>
+ <dt>SQLITE_LIMIT_VDBE_OP</dt>
+<dd>The maximum number of instructions in a virtual machine program
+used to implement an SQL statement. If <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> or
+the equivalent tries to allocate space for more than this many opcodes
+in a single prepared statement, an SQLITE_NOMEM error is returned.</dd></p>
+
+<p><a name="sqlitelimitfunctionarg"></a>
+ <dt>SQLITE_LIMIT_FUNCTION_ARG</dt>
+<dd>The maximum number of arguments on a function.</dd></p>
+
+<p><a name="sqlitelimitattached"></a>
+ <dt>SQLITE_LIMIT_ATTACHED</dt>
+<dd>The maximum number of <a href="lang_attach.html">attached databases</a>.</dd></p>
+
+<p><a name="sqlitelimitlikepatternlength"></a>
+
+<dt>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</dt>
+<dd>The maximum length of the pattern argument to the <a href="lang_expr.html#like">LIKE</a> or
+<a href="lang_expr.html#glob">GLOB</a> operators.</dd></p>
+
+<p><a name="sqlitelimitvariablenumber"></a>
+
+<dt>SQLITE_LIMIT_VARIABLE_NUMBER</dt>
+<dd>The maximum index number of any <a href="lang_expr.html#varparam">parameter</a> in an SQL statement.</p>
+
+<p><a name="sqlitelimittriggerdepth"></a>
+ <dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt>
+<dd>The maximum depth of recursion for triggers.</dd></p>
+
+<p><a name="sqlitelimitworkerthreads"></a>
+ <dt>SQLITE_LIMIT_WORKER_THREADS</dt>
+<dd>The maximum number of auxiliary worker threads that a single
+<a href="#sqlite3_stmt">prepared statement</a> may start.</dd>
+</dl>
+</p><hr><a name="SQLITE_DBSTATUS options"></a>
+<h2>Status Parameters for database connections</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_DBSTATUS_LOOKASIDE_USED 0
+#define SQLITE_DBSTATUS_CACHE_USED 1
+#define SQLITE_DBSTATUS_SCHEMA_USED 2
+#define SQLITE_DBSTATUS_STMT_USED 3
+#define SQLITE_DBSTATUS_LOOKASIDE_HIT 4
+#define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5
+#define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6
+#define SQLITE_DBSTATUS_CACHE_HIT 7
+#define SQLITE_DBSTATUS_CACHE_MISS 8
+#define SQLITE_DBSTATUS_CACHE_WRITE 9
+#define SQLITE_DBSTATUS_DEFERRED_FKS 10
+#define SQLITE_DBSTATUS_CACHE_USED_SHARED 11
+#define SQLITE_DBSTATUS_CACHE_SPILL 12
+#define SQLITE_DBSTATUS_MAX 12 /* Largest defined DBSTATUS */
+</pre></blockquote>
+<p>
+These constants are the available integer "verbs" that can be passed as
+the second argument to the <a href="#sqlite3_db_status">sqlite3_db_status()</a> interface.</p>
+
+<p>New verbs may be added in future releases of SQLite. Existing verbs
+might be discontinued. Applications should check the return code from
+<a href="#sqlite3_db_status">sqlite3_db_status()</a> to make sure that the call worked.
+The <a href="#sqlite3_db_status">sqlite3_db_status()</a> interface will return a non-zero error code
+if a discontinued or unsupported verb is invoked.</p>
+
+<p><dl>
+<a name="sqlitedbstatuslookasideused"></a>
+ <dt>SQLITE_DBSTATUS_LOOKASIDE_USED</dt>
+<dd>This parameter returns the number of lookaside memory slots currently
+checked out.</dd></p>
+
+<p><a name="sqlitedbstatuslookasidehit"></a>
+ <dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
+<dd>This parameter returns the number of malloc attempts that were
+satisfied using lookaside memory. Only the high-water value is meaningful;
+the current value is always zero.</p>
+
+<p><a name="sqlitedbstatuslookasidemisssize"></a>
+
+<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt>
+<dd>This parameter returns the number malloc attempts that might have
+been satisfied using lookaside memory but failed due to the amount of
+memory requested being larger than the lookaside slot size.
+Only the high-water value is meaningful;
+the current value is always zero.</p>
+
+<p><a name="sqlitedbstatuslookasidemissfull"></a>
+
+<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt>
+<dd>This parameter returns the number malloc attempts that might have
+been satisfied using lookaside memory but failed due to all lookaside
+memory already being in use.
+Only the high-water value is meaningful;
+the current value is always zero.</p>
+
+<p><a name="sqlitedbstatuscacheused"></a>
+ <dt>SQLITE_DBSTATUS_CACHE_USED</dt>
+<dd>This parameter returns the approximate number of bytes of heap
+memory used by all pager caches associated with the database connection.
+The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.</p>
+
+<p><a name="sqlitedbstatuscacheusedshared"></a>
+
+<dt>SQLITE_DBSTATUS_CACHE_USED_SHARED</dt>
+<dd>This parameter is similar to DBSTATUS_CACHE_USED, except that if a
+pager cache is shared between two or more connections the bytes of heap
+memory used by that pager cache is divided evenly between the attached
+connections. In other words, if none of the pager caches associated
+with the database connection are shared, this request returns the same
+value as DBSTATUS_CACHE_USED. Or, if one or more or the pager caches are
+shared, the value returned by this call will be smaller than that returned
+by DBSTATUS_CACHE_USED. The highwater mark associated with
+SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0.</p>
+
+<p><a name="sqlitedbstatusschemaused"></a>
+ <dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
+<dd>This parameter returns the approximate number of bytes of heap
+memory used to store the schema for all databases associated
+with the connection - main, temp, and any <a href="lang_attach.html">ATTACH</a>-ed databases.
+The full amount of memory used by the schemas is reported, even if the
+schema memory is shared with other database connections due to
+<a href="sharedcache.html">shared cache mode</a> being enabled.
+The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.</p>
+
+<p><a name="sqlitedbstatusstmtused"></a>
+ <dt>SQLITE_DBSTATUS_STMT_USED</dt>
+<dd>This parameter returns the approximate number of bytes of heap
+and lookaside memory used by all prepared statements associated with
+the database connection.
+The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
+</dd></p>
+
+<p><a name="sqlitedbstatuscachehit"></a>
+ <dt>SQLITE_DBSTATUS_CACHE_HIT</dt>
+<dd>This parameter returns the number of pager cache hits that have
+occurred. The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT
+is always 0.
+</dd></p>
+
+<p><a name="sqlitedbstatuscachemiss"></a>
+ <dt>SQLITE_DBSTATUS_CACHE_MISS</dt>
+<dd>This parameter returns the number of pager cache misses that have
+occurred. The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS
+is always 0.
+</dd></p>
+
+<p><a name="sqlitedbstatuscachewrite"></a>
+ <dt>SQLITE_DBSTATUS_CACHE_WRITE</dt>
+<dd>This parameter returns the number of dirty cache entries that have
+been written to disk. Specifically, the number of pages written to the
+wal file in wal mode databases, or the number of pages written to the
+database file in rollback mode databases. Any pages written as part of
+transaction rollback or database recovery operations are not included.
+If an IO or other error occurs while writing a page to disk, the effect
+on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is undefined. The
+highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0.
+</dd></p>
+
+<p><a name="sqlitedbstatuscachespill"></a>
+ <dt>SQLITE_DBSTATUS_CACHE_SPILL</dt>
+<dd>This parameter returns the number of dirty cache entries that have
+been written to disk in the middle of a transaction due to the page
+cache overflowing. Transactions are more efficient if they are written
+to disk all at once. When pages spill mid-transaction, that introduces
+additional overhead. This parameter can be used help identify
+inefficiencies that can be resolved by increasing the cache size.
+</dd></p>
+
+<p><a name="sqlitedbstatusdeferredfks"></a>
+ <dt>SQLITE_DBSTATUS_DEFERRED_FKS</dt>
+<dd>This parameter returns zero for the current value if and only if
+all foreign key constraints (deferred or immediate) have been
+resolved. The highwater mark is always 0.
+</dd>
+</dl>
+</p><hr><a name="SQLITE_STMTSTATUS counter"></a>
+<h2>Status Parameters for prepared statements</h2>
+</div>
+<blockquote><pre>
+#define SQLITE_STMTSTATUS_FULLSCAN_STEP 1
+#define SQLITE_STMTSTATUS_SORT 2
+#define SQLITE_STMTSTATUS_AUTOINDEX 3
+#define SQLITE_STMTSTATUS_VM_STEP 4
+#define SQLITE_STMTSTATUS_REPREPARE 5
+#define SQLITE_STMTSTATUS_RUN 6
+#define SQLITE_STMTSTATUS_FILTER_MISS 7
+#define SQLITE_STMTSTATUS_FILTER_HIT 8
+#define SQLITE_STMTSTATUS_MEMUSED 99
+</pre></blockquote>
+<p>
+These preprocessor macros define integer codes that name counter
+values associated with the <a href="#sqlite3_stmt_status">sqlite3_stmt_status()</a> interface.
+The meanings of the various counters are as follows:</p>
+
+<p><dl>
+<a name="sqlitestmtstatusfullscanstep"></a>
+ <dt>SQLITE_STMTSTATUS_FULLSCAN_STEP</dt>
+<dd>This is the number of times that SQLite has stepped forward in
+a table as part of a full table scan. Large numbers for this counter
+may indicate opportunities for performance improvement through
+careful use of indices.</dd></p>
+
+<p><a name="sqlitestmtstatussort"></a>
+ <dt>SQLITE_STMTSTATUS_SORT</dt>
+<dd>This is the number of sort operations that have occurred.
+A non-zero value in this counter may indicate an opportunity to
+improvement performance through careful use of indices.</dd></p>
+
+<p><a name="sqlitestmtstatusautoindex"></a>
+ <dt>SQLITE_STMTSTATUS_AUTOINDEX</dt>
+<dd>This is the number of rows inserted into transient indices that
+were created automatically in order to help joins run faster.
+A non-zero value in this counter may indicate an opportunity to
+improvement performance by adding permanent indices that do not
+need to be reinitialized each time the statement is run.</dd></p>
+
+<p><a name="sqlitestmtstatusvmstep"></a>
+ <dt>SQLITE_STMTSTATUS_VM_STEP</dt>
+<dd>This is the number of virtual machine operations executed
+by the prepared statement if that number is less than or equal
+to 2147483647. The number of virtual machine operations can be
+used as a proxy for the total work done by the prepared statement.
+If the number of virtual machine operations exceeds 2147483647
+then the value returned by this statement status code is undefined.</p>
+
+<p><a name="sqlitestmtstatusreprepare"></a>
+ <dt>SQLITE_STMTSTATUS_REPREPARE</dt>
+<dd>This is the number of times that the prepare statement has been
+automatically regenerated due to schema changes or changes to
+<a href="lang_expr.html#varparam">bound parameters</a> that might affect the query plan.</p>
+
+<p><a name="sqlitestmtstatusrun"></a>
+ <dt>SQLITE_STMTSTATUS_RUN</dt>
+<dd>This is the number of times that the prepared statement has
+been run. A single "run" for the purposes of this counter is one
+or more calls to <a href="#sqlite3_step">sqlite3_step()</a> followed by a call to <a href="#sqlite3_reset">sqlite3_reset()</a>.
+The counter is incremented on the first <a href="#sqlite3_step">sqlite3_step()</a> call of each
+cycle.</p>
+
+<p><a name="sqlitestmtstatusfiltermiss"></a>
+
+<a name="sqlitestmtstatusfilterhit"></a>
+
+<dt>SQLITE_STMTSTATUS_FILTER_HIT<br>
+SQLITE_STMTSTATUS_FILTER_MISS</dt>
+<dd>SQLITE_STMTSTATUS_FILTER_HIT is the number of times that a join
+step was bypassed because a Bloom filter returned not-found. The
+corresponding SQLITE_STMTSTATUS_FILTER_MISS value is the number of
+times that the Bloom filter returned a find, and thus the join step
+had to be processed as normal.</p>
+
+<p><a name="sqlitestmtstatusmemused"></a>
+ <dt>SQLITE_STMTSTATUS_MEMUSED</dt>
+<dd>This is the approximate number of bytes of heap memory
+used to store the prepared statement. This value is not actually
+a counter, and so the resetFlg parameter to sqlite3_stmt_status()
+is ignored when the opcode is SQLITE_STMTSTATUS_MEMUSED.
+</dd>
+</dl>
+</p><hr><a name="sqlite3_snapshot"></a>
+<h2>Database Snapshot</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_snapshot {
+ unsigned char hidden[48];
+} sqlite3_snapshot;
+</pre></blockquote>
+<p>
+An instance of the snapshot object records the state of a <a href="wal.html">WAL mode</a>
+database for some specific point in history.</p>
+
+<p>In <a href="wal.html">WAL mode</a>, multiple <a href="#sqlite3">database connections</a> that are open on the
+same database file can each be reading a different historical version
+of the database file. When a <a href="#sqlite3">database connection</a> begins a read
+transaction, that connection sees an unchanging copy of the database
+as it existed for the point in time when the transaction first started.
+Subsequent changes to the database from other connections are not seen
+by the reader until a new read transaction is started.</p>
+
+<p>The sqlite3_snapshot object records state information about an historical
+version of the database file so that it is possible to later open a new read
+transaction that sees that historical version of the database rather than
+the most recent version.
+</p><p>1 Constructor: <a href="#sqlite3_snapshot_get">sqlite3_snapshot_get()</a></p>
+<p>1 Destructor: <a href="#sqlite3_snapshot_free">sqlite3_snapshot_free()</a></p>
+<p>3 Methods:
+ <a href="#sqlite3_snapshot_cmp">sqlite3_snapshot_cmp()</a>,
+<a href="#sqlite3_snapshot_open">sqlite3_snapshot_open()</a>,
+<a href="#sqlite3_snapshot_recover">sqlite3_snapshot_recover()</a></p>
+<hr><a name="sqlite3_int64"></a>
+<h2>64-Bit Integer Types</h2>
+</div>
+<blockquote><pre>
+#ifdef SQLITE_INT64_TYPE
+ typedef SQLITE_INT64_TYPE sqlite_int64;
+# ifdef SQLITE_UINT64_TYPE
+ typedef SQLITE_UINT64_TYPE sqlite_uint64;
+# else
+ typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
+# endif
+#elif defined(_MSC_VER) || defined(__BORLANDC__)
+ typedef __int64 sqlite_int64;
+ typedef unsigned __int64 sqlite_uint64;
+#else
+ typedef long long int sqlite_int64;
+ typedef unsigned long long int sqlite_uint64;
+#endif
+typedef sqlite_int64 sqlite3_int64;
+typedef sqlite_uint64 sqlite3_uint64;
+</pre></blockquote>
+<p>
+Because there is no cross-platform way to specify 64-bit integer types
+SQLite includes typedefs for 64-bit signed and unsigned integers.</p>
+
+<p>The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions.
+The sqlite_int64 and sqlite_uint64 types are supported for backwards
+compatibility only.</p>
+
+<p>The sqlite3_int64 and sqlite_int64 types can store integer values
+between -9223372036854775808 and +9223372036854775807 inclusive. The
+sqlite3_uint64 and sqlite_uint64 types can store integer values
+between 0 and +18446744073709551615 inclusive.
+</p><hr><a name="sqlite3_module"></a>
+<h2>Virtual Table Object</h2>
+</div>
+<blockquote><pre>
+struct sqlite3_module {
+ int iVersion;
+ int (*xCreate)(sqlite3*, void *pAux,
+ int argc, const char *const*argv,
+ sqlite3_vtab **ppVTab, char**);
+ int (*xConnect)(sqlite3*, void *pAux,
+ int argc, const char *const*argv,
+ sqlite3_vtab **ppVTab, char**);
+ int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
+ int (*xDisconnect)(sqlite3_vtab *pVTab);
+ int (*xDestroy)(sqlite3_vtab *pVTab);
+ int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
+ int (*xClose)(sqlite3_vtab_cursor*);
+ int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
+ int argc, sqlite3_value **argv);
+ int (*xNext)(sqlite3_vtab_cursor*);
+ int (*xEof)(sqlite3_vtab_cursor*);
+ int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int);
+ int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid);
+ int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *);
+ int (*xBegin)(sqlite3_vtab *pVTab);
+ int (*xSync)(sqlite3_vtab *pVTab);
+ int (*xCommit)(sqlite3_vtab *pVTab);
+ int (*xRollback)(sqlite3_vtab *pVTab);
+ int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName,
+ void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
+ void **ppArg);
+ int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
+ /* The methods above are in version 1 of the sqlite_module object. Those
+ ** below are for version 2 and greater. */
+ int (*xSavepoint)(sqlite3_vtab *pVTab, int);
+ int (*xRelease)(sqlite3_vtab *pVTab, int);
+ int (*xRollbackTo)(sqlite3_vtab *pVTab, int);
+ /* The methods above are in versions 1 and 2 of the sqlite_module object.
+ ** Those below are for version 3 and greater. */
+ int (*xShadowName)(const char*);
+};
+</pre></blockquote>
+<p>
+This structure, sometimes called a "virtual table module",
+defines the implementation of a <a href="vtab.html">virtual table</a>.
+This structure consists mostly of methods for the module.</p>
+
+<p>A virtual table module is created by filling in a persistent
+instance of this structure and passing a pointer to that instance
+to <a href="#sqlite3_create_module">sqlite3_create_module()</a> or <a href="#sqlite3_create_module">sqlite3_create_module_v2()</a>.
+The registration remains valid until it is replaced by a different
+module or until the <a href="#sqlite3">database connection</a> closes. The content
+of this structure must not change while it is registered with
+any database connection.
+</p><hr><a name="sqlite3_vtab_cursor"></a>
+<h2>Virtual Table Cursor Object</h2>
+</div>
+<blockquote><pre>
+struct sqlite3_vtab_cursor {
+ sqlite3_vtab *pVtab; /* Virtual table of this cursor */
+ /* Virtual table implementations will typically add additional fields */
+};
+</pre></blockquote>
+<p>
+Every <a href="#sqlite3_module">virtual table module</a> implementation uses a subclass of the
+following structure to describe cursors that point into the
+<a href="vtab.html">virtual table</a> and are used
+to loop through the virtual table. Cursors are created using the
+<a href="vtab.html#xopen">xOpen</a> method of the module and are destroyed
+by the <a href="vtab.html#xclose">xClose</a> method. Cursors are used
+by the <a href="vtab.html#xfilter">xFilter</a>, <a href="vtab.html#xnext">xNext</a>, <a href="vtab.html#xeof">xEof</a>, <a href="vtab.html#xcolumn">xColumn</a>, and <a href="vtab.html#xrowid">xRowid</a> methods
+of the module. Each module implementation will define
+the content of a cursor structure to suit its own needs.</p>
+
+<p>This superclass exists in order to define fields of the cursor that
+are common to all implementations.
+</p><hr><a name="sqlite3_blob"></a>
+<h2>A Handle To An Open BLOB</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_blob sqlite3_blob;
+</pre></blockquote>
+<p>
+An instance of this object represents an open BLOB on which
+<a href="#sqlite3_blob_open">incremental BLOB I/O</a> can be performed.
+Objects of this type are created by <a href="#sqlite3_blob_open">sqlite3_blob_open()</a>
+and destroyed by <a href="#sqlite3_blob_close">sqlite3_blob_close()</a>.
+The <a href="#sqlite3_blob_read">sqlite3_blob_read()</a> and <a href="#sqlite3_blob_write">sqlite3_blob_write()</a> interfaces
+can be used to read or write small subsections of the BLOB.
+The <a href="#sqlite3_blob_bytes">sqlite3_blob_bytes()</a> interface returns the size of the BLOB in bytes.
+</p><p>1 Constructor: <a href="#sqlite3_blob_open">sqlite3_blob_open()</a></p>
+<p>1 Destructor: <a href="#sqlite3_blob_close">sqlite3_blob_close()</a></p>
+<p>4 Methods:
+ <a href="#sqlite3_blob_bytes">sqlite3_blob_bytes()</a>,
+<a href="#sqlite3_blob_read">sqlite3_blob_read()</a>,
+<a href="#sqlite3_blob_reopen">sqlite3_blob_reopen()</a>,
+<a href="#sqlite3_blob_write">sqlite3_blob_write()</a></p>
+<hr><a name="sqlite3"></a>
+<h2>Database Connection Handle</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3 sqlite3;
+</pre></blockquote>
+<p>
+Each open SQLite database is represented by a pointer to an instance of
+the opaque structure named "sqlite3". It is useful to think of an sqlite3
+pointer as an object. The <a href="#sqlite3_open">sqlite3_open()</a>, <a href="#sqlite3_open">sqlite3_open16()</a>, and
+<a href="#sqlite3_open">sqlite3_open_v2()</a> interfaces are its constructors, and <a href="#sqlite3_close">sqlite3_close()</a>
+and <a href="#sqlite3_close">sqlite3_close_v2()</a> are its destructors. There are many other
+interfaces (such as
+<a href="#sqlite3_prepare">sqlite3_prepare_v2()</a>, <a href="#sqlite3_create_function">sqlite3_create_function()</a>, and
+<a href="#sqlite3_busy_timeout">sqlite3_busy_timeout()</a> to name but three) that are methods on an
+sqlite3 object.
+</p><p>3 Constructors:
+ <a href="#sqlite3_open">sqlite3_open()</a>,
+<a href="#sqlite3_open">sqlite3_open16()</a>,
+<a href="#sqlite3_open">sqlite3_open_v2()</a></p>
+<p>2 Destructors:
+ <a href="#sqlite3_close">sqlite3_close()</a>,
+<a href="#sqlite3_close">sqlite3_close_v2()</a></p>
+<p>76 Methods:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3_autovacuum_pages'>sqlite3_autovacuum_pages</a></li>
+<li><a href='#sqlite3_blob_open'>sqlite3_blob_open</a></li>
+<li><a href='#sqlite3_busy_handler'>sqlite3_busy_handler</a></li>
+<li><a href='#sqlite3_busy_timeout'>sqlite3_busy_timeout</a></li>
+<li><a href='#sqlite3_changes'>sqlite3_changes</a></li>
+<li><a href='#sqlite3_changes'>sqlite3_changes64</a></li>
+<li><a href='#sqlite3_collation_needed'>sqlite3_collation_needed</a></li>
+<li><a href='#sqlite3_collation_needed'>sqlite3_collation_needed16</a></li>
+<li><a href='#sqlite3_commit_hook'>sqlite3_commit_hook</a></li>
+<li><a href='#sqlite3_create_collation'>sqlite3_create_collation</a></li>
+<li><a href='#sqlite3_create_collation'>sqlite3_create_collation16</a></li>
+<li><a href='#sqlite3_create_collation'>sqlite3_create_collation_v2</a></li>
+<li><a href='#sqlite3_create_function'>sqlite3_create_function</a></li>
+<li><a href='#sqlite3_create_function'>sqlite3_create_function16</a></li>
+<li><a href='#sqlite3_create_function'>sqlite3_create_function_v2</a></li>
+<li><a href='#sqlite3_create_module'>sqlite3_create_module</a></li>
+<li><a href='#sqlite3_create_module'>sqlite3_create_module_v2</a></li>
+<li><a href='#sqlite3_create_function'>sqlite3_create_window_function</a></li>
+<li><a href='#sqlite3_db_cacheflush'>sqlite3_db_cacheflush</a></li>
+<li><a href='#sqlite3_db_config'>sqlite3_db_config</a></li>
+<li><a href='#sqlite3_db_filename'>sqlite3_db_filename</a></li>
+<li><a href='#sqlite3_db_mutex'>sqlite3_db_mutex</a></li>
+<li><a href='#sqlite3_db_name'>sqlite3_db_name</a></li>
+<li><a href='#sqlite3_db_readonly'>sqlite3_db_readonly</a></li>
+<li><a href='#sqlite3_db_release_memory'>sqlite3_db_release_memory</a></li>
+<li><a href='#sqlite3_db_status'>sqlite3_db_status</a></li>
+<li><a href='#sqlite3_drop_modules'>sqlite3_drop_modules</a></li>
+<li><a href='#sqlite3_enable_load_extension'>sqlite3_enable_load_extension</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_errcode</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_errmsg</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_errmsg16</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_error_offset</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_errstr</a></li>
+<li><a href='#sqlite3_exec'>sqlite3_exec</a></li>
+<li><a href='#sqlite3_errcode'>sqlite3_extended_errcode</a></li>
+<li><a href='#sqlite3_extended_result_codes'>sqlite3_extended_result_codes</a></li>
+<li><a href='#sqlite3_file_control'>sqlite3_file_control</a></li>
+<li><a href='#sqlite3_free_table'>sqlite3_free_table</a></li>
+<li><a href='#sqlite3_get_autocommit'>sqlite3_get_autocommit</a></li>
+<li><a href='#sqlite3_free_table'>sqlite3_get_table</a></li>
+<li><a href='#sqlite3_interrupt'>sqlite3_interrupt</a></li>
+<li><a href='#sqlite3_last_insert_rowid'>sqlite3_last_insert_rowid</a></li>
+<li><a href='#sqlite3_limit'>sqlite3_limit</a></li>
+<li><a href='#sqlite3_load_extension'>sqlite3_load_extension</a></li>
+<li><a href='#sqlite3_next_stmt'>sqlite3_next_stmt</a></li>
+<li><a href='#sqlite3_overload_function'>sqlite3_overload_function</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare16</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare16_v2</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare16_v3</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare_v2</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare_v3</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_blobwrite</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_count</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_depth</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_hook</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_new</a></li>
+<li><a href='#sqlite3_preupdate_blobwrite'>sqlite3_preupdate_old</a></li>
+<li><a href='#sqlite3_profile'>sqlite3_profile</a></li>
+<li><a href='#sqlite3_progress_handler'>sqlite3_progress_handler</a></li>
+<li><a href='#sqlite3_commit_hook'>sqlite3_rollback_hook</a></li>
+<li><a href='#sqlite3_set_authorizer'>sqlite3_set_authorizer</a></li>
+<li><a href='#sqlite3_set_last_insert_rowid'>sqlite3_set_last_insert_rowid</a></li>
+<li><a href='#sqlite3_system_errno'>sqlite3_system_errno</a></li>
+<li><a href='#sqlite3_table_column_metadata'>sqlite3_table_column_metadata</a></li>
+<li><a href='#sqlite3_total_changes'>sqlite3_total_changes</a></li>
+<li><a href='#sqlite3_total_changes'>sqlite3_total_changes64</a></li>
+<li><a href='#sqlite3_profile'>sqlite3_trace</a></li>
+<li><a href='#sqlite3_trace_v2'>sqlite3_trace_v2</a></li>
+<li><a href='#sqlite3_txn_state'>sqlite3_txn_state</a></li>
+<li><a href='#sqlite3_unlock_notify'>sqlite3_unlock_notify</a></li>
+<li><a href='#sqlite3_update_hook'>sqlite3_update_hook</a></li>
+<li><a href='#sqlite3_wal_autocheckpoint'>sqlite3_wal_autocheckpoint</a></li>
+<li><a href='#sqlite3_wal_checkpoint'>sqlite3_wal_checkpoint</a></li>
+<li><a href='#sqlite3_wal_checkpoint_v2'>sqlite3_wal_checkpoint_v2</a></li>
+<li><a href='#sqlite3_wal_hook'>sqlite3_wal_hook</a></li>
+</ul>
+</div>
+</p>
+<hr><a name="sqlite3_str"></a>
+<h2>Dynamic String Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_str sqlite3_str;
+</pre></blockquote>
+<p>
+An instance of the sqlite3_str object contains a dynamically-sized
+string under construction.</p>
+
+<p>The lifecycle of an sqlite3_str object is as follows:
+<ol>
+<li> The sqlite3_str object is created using <a href="#sqlite3_str_new">sqlite3_str_new()</a>.
+<li> Text is appended to the sqlite3_str object using various
+methods, such as <a href="#sqlite3_str_append">sqlite3_str_appendf()</a>.
+<li> The sqlite3_str object is destroyed and the string it created
+is returned using the <a href="#sqlite3_str_finish">sqlite3_str_finish()</a> interface.
+</ol>
+</p><p>1 Constructor: <a href="#sqlite3_str_new">sqlite3_str_new()</a></p>
+<p>1 Destructor: <a href="#sqlite3_str_finish">sqlite3_str_finish()</a></p>
+<p>9 Methods:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3_str_append'>sqlite3_str_append</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_appendall</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_appendchar</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_appendf</a></li>
+<li><a href='#sqlite3_str_errcode'>sqlite3_str_errcode</a></li>
+<li><a href='#sqlite3_str_errcode'>sqlite3_str_length</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_reset</a></li>
+<li><a href='#sqlite3_str_errcode'>sqlite3_str_value</a></li>
+<li><a href='#sqlite3_str_append'>sqlite3_str_vappendf</a></li>
+</ul>
+</div>
+</p>
+<hr><a name="sqlite3_pcache_methods2"></a>
+<h2>Application Defined Page Cache.</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2;
+struct sqlite3_pcache_methods2 {
+ int iVersion;
+ void *pArg;
+ int (*xInit)(void*);
+ void (*xShutdown)(void*);
+ sqlite3_pcache *(*xCreate)(int szPage, int szExtra, int bPurgeable);
+ void (*xCachesize)(sqlite3_pcache*, int nCachesize);
+ int (*xPagecount)(sqlite3_pcache*);
+ sqlite3_pcache_page *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag);
+ void (*xUnpin)(sqlite3_pcache*, sqlite3_pcache_page*, int discard);
+ void (*xRekey)(sqlite3_pcache*, sqlite3_pcache_page*,
+ unsigned oldKey, unsigned newKey);
+ void (*xTruncate)(sqlite3_pcache*, unsigned iLimit);
+ void (*xDestroy)(sqlite3_pcache*);
+ void (*xShrink)(sqlite3_pcache*);
+};
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_config">sqlite3_config</a>(<a href="#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a>, ...) interface can
+register an alternative page cache implementation by passing in an
+instance of the sqlite3_pcache_methods2 structure.
+In many applications, most of the heap memory allocated by
+SQLite is used for the page cache.
+By implementing a
+custom page cache using this API, an application can better control
+the amount of memory consumed by SQLite, the way in which
+that memory is allocated and released, and the policies used to
+determine exactly which parts of a database file are cached and for
+how long.</p>
+
+<p>The alternative page cache mechanism is an
+extreme measure that is only needed by the most demanding applications.
+The built-in page cache is recommended for most uses.</p>
+
+<p>The contents of the sqlite3_pcache_methods2 structure are copied to an
+internal buffer by SQLite within the call to <a href="#sqlite3_config">sqlite3_config</a>. Hence
+the application may discard the parameter after the call to
+<a href="#sqlite3_config">sqlite3_config()</a> returns.</p>
+
+<p><a name="thexinitpagecachemethod"></a>
+
+The xInit() method is called once for each effective
+call to <a href="#sqlite3_initialize">sqlite3_initialize()</a>
+(usually only once during the lifetime of the process). The xInit()
+method is passed a copy of the sqlite3_pcache_methods2.pArg value.
+The intent of the xInit() method is to set up global data structures
+required by the custom page cache implementation.
+If the xInit() method is NULL, then the
+built-in default page cache is used instead of the application defined
+page cache.</p>
+
+<p><a name="thexshutdownpagecachemethod"></a>
+
+The xShutdown() method is called by <a href="#sqlite3_initialize">sqlite3_shutdown()</a>.
+It can be used to clean up
+any outstanding resources before process shutdown, if required.
+The xShutdown() method may be NULL.</p>
+
+<p>SQLite automatically serializes calls to the xInit method,
+so the xInit method need not be threadsafe. The
+xShutdown method is only called from <a href="#sqlite3_initialize">sqlite3_shutdown()</a> so it does
+not need to be threadsafe either. All other methods must be threadsafe
+in multithreaded applications.</p>
+
+<p>SQLite will never invoke xInit() more than once without an intervening
+call to xShutdown().</p>
+
+<p><a name="thexcreatepagecachemethods"></a>
+
+SQLite invokes the xCreate() method to construct a new cache instance.
+SQLite will typically create one cache instance for each open database file,
+though this is not guaranteed. The
+first parameter, szPage, is the size in bytes of the pages that must
+be allocated by the cache. szPage will always a power of two. The
+second parameter szExtra is a number of bytes of extra storage
+associated with each page cache entry. The szExtra parameter will
+a number less than 250. SQLite will use the
+extra szExtra bytes on each page to store metadata about the underlying
+database page on disk. The value passed into szExtra depends
+on the SQLite version, the target platform, and how SQLite was compiled.
+The third argument to xCreate(), bPurgeable, is true if the cache being
+created will be used to cache database pages of a file stored on disk, or
+false if it is used for an in-memory database. The cache implementation
+does not have to do anything special based with the value of bPurgeable;
+it is purely advisory. On a cache where bPurgeable is false, SQLite will
+never invoke xUnpin() except to deliberately delete a page.
+In other words, calls to xUnpin() on a cache with bPurgeable set to
+false will always have the "discard" flag set to true.
+Hence, a cache created with bPurgeable false will
+never contain any unpinned pages.</p>
+
+<p><a name="thexcachesizepagecachemethod"></a>
+
+The xCachesize() method may be called at any time by SQLite to set the
+suggested maximum cache-size (number of pages stored by) the cache
+instance passed as the first argument. This is the value configured using
+the SQLite "<a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a>" command. As with the bPurgeable
+parameter, the implementation is not required to do anything with this
+value; it is advisory only.</p>
+
+<p><a name="thexpagecountpagecachemethods"></a>
+
+The xPagecount() method must return the number of pages currently
+stored in the cache, both pinned and unpinned.</p>
+
+<p><a name="thexfetchpagecachemethods"></a>
+
+The xFetch() method locates a page in the cache and returns a pointer to
+an sqlite3_pcache_page object associated with that page, or a NULL pointer.
+The pBuf element of the returned sqlite3_pcache_page object will be a
+pointer to a buffer of szPage bytes used to store the content of a
+single database page. The pExtra element of sqlite3_pcache_page will be
+a pointer to the szExtra bytes of extra storage that SQLite has requested
+for each entry in the page cache.</p>
+
+<p>The page to be fetched is determined by the key. The minimum key value
+is 1. After it has been retrieved using xFetch, the page is considered
+to be "pinned".</p>
+
+<p>If the requested page is already in the page cache, then the page cache
+implementation must return a pointer to the page buffer with its content
+intact. If the requested page is not already in the cache, then the
+cache implementation should use the value of the createFlag
+parameter to help it determined what action to take:</p>
+
+<p><table border=1 width=85% align=center>
+<tr><th> createFlag <th> Behavior when page is not already in cache
+<tr><td> 0 <td> Do not allocate a new page. Return NULL.
+<tr><td> 1 <td> Allocate a new page if it easy and convenient to do so.
+Otherwise return NULL.
+<tr><td> 2 <td> Make every effort to allocate a new page. Only return
+NULL if allocating a new page is effectively impossible.
+</table></p>
+
+<p>SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite
+will only use a createFlag of 2 after a prior call with a createFlag of 1
+failed. In between the xFetch() calls, SQLite may
+attempt to unpin one or more cache pages by spilling the content of
+pinned pages to disk and synching the operating system disk cache.</p>
+
+<p><a name="thexunpinpagecachemethod"></a>
+
+xUnpin() is called by SQLite with a pointer to a currently pinned page
+as its second argument. If the third parameter, discard, is non-zero,
+then the page must be evicted from the cache.
+If the discard parameter is
+zero, then the page may be discarded or retained at the discretion of
+page cache implementation. The page cache implementation
+may choose to evict unpinned pages at any time.</p>
+
+<p>The cache must not perform any reference counting. A single
+call to xUnpin() unpins the page regardless of the number of prior calls
+to xFetch().</p>
+
+<p><a name="thexrekeypagecachemethods"></a>
+
+The xRekey() method is used to change the key value associated with the
+page passed as the second argument. If the cache
+previously contains an entry associated with newKey, it must be
+discarded. Any prior cache entry associated with newKey is guaranteed not
+to be pinned.</p>
+
+<p>When SQLite calls the xTruncate() method, the cache must discard all
+existing cache entries with page numbers (keys) greater than or equal
+to the value of the iLimit parameter passed to xTruncate(). If any
+of these pages are pinned, they are implicitly unpinned, meaning that
+they can be safely discarded.</p>
+
+<p><a name="thexdestroypagecachemethod"></a>
+
+The xDestroy() method is used to delete a cache allocated by xCreate().
+All resources associated with the specified cache should be freed. After
+calling the xDestroy() method, SQLite considers the <a href="#sqlite3_pcache">sqlite3_pcache*</a>
+handle invalid, and will not use it with any other sqlite3_pcache_methods2
+functions.</p>
+
+<p><a name="thexshrinkpagecachemethod"></a>
+
+SQLite invokes the xShrink() method when it wants the page cache to
+free up as much of heap memory as possible. The page cache implementation
+is not obligated to free any memory, but well-behaved implementations should
+do their best.
+</p><hr><a name="sqlite3_stmt"></a>
+<h2>Prepared Statement Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_stmt sqlite3_stmt;
+</pre></blockquote>
+<p>
+An instance of this object represents a single SQL statement that
+has been compiled into binary form and is ready to be evaluated.</p>
+
+<p>Think of each SQL statement as a separate computer program. The
+original SQL text is source code. A prepared statement object
+is the compiled object code. All SQL must be converted into a
+prepared statement before it can be run.</p>
+
+<p>The life-cycle of a prepared statement object usually goes like this:</p>
+
+<p><ol>
+<li> Create the prepared statement object using <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a>.
+<li> Bind values to <a href="lang_expr.html#varparam">parameters</a> using the sqlite3_bind_*()
+interfaces.
+<li> Run the SQL by calling <a href="#sqlite3_step">sqlite3_step()</a> one or more times.
+<li> Reset the prepared statement using <a href="#sqlite3_reset">sqlite3_reset()</a> then go back
+to step 2. Do this zero or more times.
+<li> Destroy the object using <a href="#sqlite3_finalize">sqlite3_finalize()</a>.
+</ol>
+</p><p>6 Constructors:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare16</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare16_v2</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare16_v3</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare_v2</a></li>
+<li><a href='#sqlite3_prepare'>sqlite3_prepare_v3</a></li>
+</ul>
+</div>
+</p>
+<p>1 Destructor: <a href="#sqlite3_finalize">sqlite3_finalize()</a></p>
+<p>51 Methods:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_blob</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_blob64</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_double</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_int</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_int64</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_null</a></li>
+<li><a href='#sqlite3_bind_parameter_count'>sqlite3_bind_parameter_count</a></li>
+<li><a href='#sqlite3_bind_parameter_index'>sqlite3_bind_parameter_index</a></li>
+<li><a href='#sqlite3_bind_parameter_name'>sqlite3_bind_parameter_name</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_pointer</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_text</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_text16</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_text64</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_value</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_zeroblob</a></li>
+<li><a href='#sqlite3_bind_blob'>sqlite3_bind_zeroblob64</a></li>
+<li><a href='#sqlite3_clear_bindings'>sqlite3_clear_bindings</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_blob</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_bytes</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_bytes16</a></li>
+<li><a href='#sqlite3_column_count'>sqlite3_column_count</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_database_name</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_database_name16</a></li>
+<li><a href='#sqlite3_column_decltype'>sqlite3_column_decltype</a></li>
+<li><a href='#sqlite3_column_decltype'>sqlite3_column_decltype16</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_double</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_int</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_int64</a></li>
+<li><a href='#sqlite3_column_name'>sqlite3_column_name</a></li>
+<li><a href='#sqlite3_column_name'>sqlite3_column_name16</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_origin_name</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_origin_name16</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_table_name</a></li>
+<li><a href='#sqlite3_column_database_name'>sqlite3_column_table_name16</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_text</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_text16</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_type</a></li>
+<li><a href='#sqlite3_column_blob'>sqlite3_column_value</a></li>
+<li><a href='#sqlite3_data_count'>sqlite3_data_count</a></li>
+<li><a href='#sqlite3_db_handle'>sqlite3_db_handle</a></li>
+<li><a href='#sqlite3_expanded_sql'>sqlite3_expanded_sql</a></li>
+<li><a href='#sqlite3_expanded_sql'>sqlite3_normalized_sql</a></li>
+<li><a href='#sqlite3_reset'>sqlite3_reset</a></li>
+<li><a href='#sqlite3_expanded_sql'>sqlite3_sql</a></li>
+<li><a href='#sqlite3_step'>sqlite3_step</a></li>
+<li><a href='#sqlite3_stmt_busy'>sqlite3_stmt_busy</a></li>
+<li><a href='#sqlite3_stmt_isexplain'>sqlite3_stmt_isexplain</a></li>
+<li><a href='#sqlite3_stmt_readonly'>sqlite3_stmt_readonly</a></li>
+<li><a href='#sqlite3_stmt_scanstatus'>sqlite3_stmt_scanstatus</a></li>
+<li><a href='#sqlite3_stmt_scanstatus_reset'>sqlite3_stmt_scanstatus_reset</a></li>
+<li><a href='#sqlite3_stmt_status'>sqlite3_stmt_status</a></li>
+</ul>
+</div>
+</p>
+<hr><a name="sqlite3_value"></a>
+<h2>Dynamically Typed Value Object</h2>
+</div>
+<blockquote><pre>
+typedef struct sqlite3_value sqlite3_value;
+</pre></blockquote>
+<p>
+SQLite uses the sqlite3_value object to represent all values
+that can be stored in a database table. SQLite uses dynamic typing
+for the values it stores. Values stored in sqlite3_value objects
+can be integers, floating point values, strings, BLOBs, or NULL.</p>
+
+<p>An sqlite3_value object may be either "protected" or "unprotected".
+Some interfaces require a protected sqlite3_value. Other interfaces
+will accept either a protected or an unprotected sqlite3_value.
+Every interface that accepts sqlite3_value arguments specifies
+whether or not it requires a protected sqlite3_value. The
+<a href="#sqlite3_value_dup">sqlite3_value_dup()</a> interface can be used to construct a new
+protected sqlite3_value from an unprotected sqlite3_value.</p>
+
+<p>The terms "protected" and "unprotected" refer to whether or not
+a mutex is held. An internal mutex is held for a protected
+sqlite3_value object but no mutex is held for an unprotected
+sqlite3_value object. If SQLite is compiled to be single-threaded
+(with <a href="compile.html#threadsafe">SQLITE_THREADSAFE=0</a> and with <a href="#sqlite3_threadsafe">sqlite3_threadsafe()</a> returning 0)
+or if SQLite is run in one of reduced mutex modes
+<a href="#sqliteconfigsinglethread">SQLITE_CONFIG_SINGLETHREAD</a> or <a href="#sqliteconfigmultithread">SQLITE_CONFIG_MULTITHREAD</a>
+then there is no distinction between protected and unprotected
+sqlite3_value objects and they can be used interchangeably. However,
+for maximum code portability it is recommended that applications
+still make the distinction between protected and unprotected
+sqlite3_value objects even when not strictly required.</p>
+
+<p>The sqlite3_value objects that are passed as parameters into the
+implementation of <a href="appfunc.html">application-defined SQL functions</a> are protected.
+The sqlite3_value objects returned by <a href="#sqlite3_vtab_rhs_value">sqlite3_vtab_rhs_value()</a>
+are protected.
+The sqlite3_value object returned by
+<a href="#sqlite3_column_blob">sqlite3_column_value()</a> is unprotected.
+Unprotected sqlite3_value objects may only be used as arguments
+to <a href="#sqlite3_result_blob">sqlite3_result_value()</a>, <a href="#sqlite3_bind_blob">sqlite3_bind_value()</a>, and
+<a href="#sqlite3_value_dup">sqlite3_value_dup()</a>.
+The <a href="#sqlite3_value_blob">sqlite3_value_type()</a> family of
+interfaces require protected sqlite3_value objects.
+</p><p>19 Methods:
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_blob</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_bytes</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_bytes16</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_double</a></li>
+<li><a href='#sqlite3_value_dup'>sqlite3_value_dup</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_encoding</a></li>
+<li><a href='#sqlite3_value_dup'>sqlite3_value_free</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_frombind</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_int</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_int64</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_nochange</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_numeric_type</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_pointer</a></li>
+<li><a href='#sqlite3_value_subtype'>sqlite3_value_subtype</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_text</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_text16</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_text16be</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_text16le</a></li>
+<li><a href='#sqlite3_value_blob'>sqlite3_value_type</a></li>
+</ul>
+</div>
+</p>
+<hr><a name="sqlite3_aggregate_count"></a>
+<h2>Deprecated Functions</h2>
+</div>
+<blockquote><pre>
+#ifndef SQLITE_OMIT_DEPRECATED
+int sqlite3_aggregate_count(sqlite3_context*);
+int sqlite3_expired(sqlite3_stmt*);
+int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*);
+int sqlite3_global_recover(void);
+void sqlite3_thread_cleanup(void);
+int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),
+ void*,sqlite3_int64);
+#endif
+</pre></blockquote>
+<p>
+These functions are <a href="capi3ref.html">deprecated</a>. In order to maintain
+backwards compatibility with older code, these functions continue
+to be supported. However, new applications should avoid
+the use of these functions. To encourage programmers to avoid
+these functions, we will not explain what they do.
+</p><hr><a name="sqlite3_backup_finish"></a>
+<h2>Online Backup API.</h2>
+</div>
+<blockquote><pre>
+sqlite3_backup *sqlite3_backup_init(
+ sqlite3 *pDest, /* Destination database handle */
+ const char *zDestName, /* Destination database name */
+ sqlite3 *pSource, /* Source database handle */
+ const char *zSourceName /* Source database name */
+);
+int sqlite3_backup_step(sqlite3_backup *p, int nPage);
+int sqlite3_backup_finish(sqlite3_backup *p);
+int sqlite3_backup_remaining(sqlite3_backup *p);
+int sqlite3_backup_pagecount(sqlite3_backup *p);
+</pre></blockquote>
+<p>
+The backup API copies the content of one database into another.
+It is useful either for creating backups of databases or
+for copying in-memory databases to or from persistent files.</p>
+
+<p>See Also: <a href="backup.html">Using the SQLite Online Backup API</a></p>
+
+<p>SQLite holds a write transaction open on the destination database file
+for the duration of the backup operation.
+The source database is read-locked only while it is being read;
+it is not locked continuously for the entire backup operation.
+Thus, the backup may be performed on a live source database without
+preventing other database connections from
+reading or writing to the source database while the backup is underway.</p>
+
+<p>To perform a backup operation:
+<ol>
+<li><b>sqlite3_backup_init()</b> is called once to initialize the
+backup,
+<li><b>sqlite3_backup_step()</b> is called one or more times to transfer
+the data between the two databases, and finally
+<li><b>sqlite3_backup_finish()</b> is called to release all resources
+associated with the backup operation.
+</ol>
+There should be exactly one call to sqlite3_backup_finish() for each
+successful call to sqlite3_backup_init().</p>
+
+<p><a name="sqlite3backupinit"></a>
+ <b>sqlite3_backup_init()</b></p>
+
+<p>The D and N arguments to sqlite3_backup_init(D,N,S,M) are the
+<a href="#sqlite3">database connection</a> associated with the destination database
+and the database name, respectively.
+The database name is "main" for the main database, "temp" for the
+temporary database, or the name specified after the AS keyword in
+an <a href="lang_attach.html">ATTACH</a> statement for an attached database.
+The S and M arguments passed to
+sqlite3_backup_init(D,N,S,M) identify the <a href="#sqlite3">database connection</a>
+and database name of the source database, respectively.
+The source and destination <a href="#sqlite3">database connections</a> (parameters S and D)
+must be different or else sqlite3_backup_init(D,N,S,M) will fail with
+an error.</p>
+
+<p>A call to sqlite3_backup_init() will fail, returning NULL, if
+there is already a read or read-write transaction open on the
+destination database.</p>
+
+<p>If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
+returned and an error code and error message are stored in the
+destination <a href="#sqlite3">database connection</a> D.
+The error code and message for the failed call to sqlite3_backup_init()
+can be retrieved using the <a href="#sqlite3_errcode">sqlite3_errcode()</a>, <a href="#sqlite3_errcode">sqlite3_errmsg()</a>, and/or
+<a href="#sqlite3_errcode">sqlite3_errmsg16()</a> functions.
+A successful call to sqlite3_backup_init() returns a pointer to an
+<a href="#sqlite3_backup">sqlite3_backup</a> object.
+The <a href="#sqlite3_backup">sqlite3_backup</a> object may be used with the sqlite3_backup_step() and
+sqlite3_backup_finish() functions to perform the specified backup
+operation.</p>
+
+<p><a name="sqlite3backupstep"></a>
+ <b>sqlite3_backup_step()</b></p>
+
+<p>Function sqlite3_backup_step(B,N) will copy up to N pages between
+the source and destination databases specified by <a href="#sqlite3_backup">sqlite3_backup</a> object B.
+If N is negative, all remaining source pages are copied.
+If sqlite3_backup_step(B,N) successfully copies N pages and there
+are still more pages to be copied, then the function returns <a href="#SQLITE_ABORT">SQLITE_OK</a>.
+If sqlite3_backup_step(B,N) successfully finishes copying all pages
+from source to destination, then it returns <a href="#SQLITE_ABORT">SQLITE_DONE</a>.
+If an error occurs while running sqlite3_backup_step(B,N),
+then an <a href="rescode.html">error code</a> is returned. As well as <a href="#SQLITE_ABORT">SQLITE_OK</a> and
+<a href="#SQLITE_ABORT">SQLITE_DONE</a>, a call to sqlite3_backup_step() may return <a href="#SQLITE_ABORT">SQLITE_READONLY</a>,
+<a href="#SQLITE_ABORT">SQLITE_NOMEM</a>, <a href="#SQLITE_ABORT">SQLITE_BUSY</a>, <a href="#SQLITE_ABORT">SQLITE_LOCKED</a>, or an
+<a href="#SQLITE_ABORT_ROLLBACK">SQLITE_IOERR_XXX</a> extended error code.</p>
+
+<p>The sqlite3_backup_step() might return <a href="#SQLITE_ABORT">SQLITE_READONLY</a> if
+<ol>
+<li> the destination database was opened read-only, or
+<li> the destination database is using write-ahead-log journaling
+and the destination and source page sizes differ, or
+<li> the destination database is an in-memory database and the
+destination and source page sizes differ.
+</ol></p>
+
+<p>If sqlite3_backup_step() cannot obtain a required file-system lock, then
+the <a href="#sqlite3_busy_handler">busy-handler function</a>
+is invoked (if one is specified). If the
+busy-handler returns non-zero before the lock is available, then
+<a href="#SQLITE_ABORT">SQLITE_BUSY</a> is returned to the caller. In this case the call to
+sqlite3_backup_step() can be retried later. If the source
+<a href="#sqlite3">database connection</a>
+is being used to write to the source database when sqlite3_backup_step()
+is called, then <a href="#SQLITE_ABORT">SQLITE_LOCKED</a> is returned immediately. Again, in this
+case the call to sqlite3_backup_step() can be retried later on. If
+<a href="#SQLITE_ABORT_ROLLBACK">SQLITE_IOERR_XXX</a>, <a href="#SQLITE_ABORT">SQLITE_NOMEM</a>, or
+<a href="#SQLITE_ABORT">SQLITE_READONLY</a> is returned, then
+there is no point in retrying the call to sqlite3_backup_step(). These
+errors are considered fatal. The application must accept
+that the backup operation has failed and pass the backup operation handle
+to the sqlite3_backup_finish() to release associated resources.</p>
+
+<p>The first call to sqlite3_backup_step() obtains an exclusive lock
+on the destination file. The exclusive lock is not released until either
+sqlite3_backup_finish() is called or the backup operation is complete
+and sqlite3_backup_step() returns <a href="#SQLITE_ABORT">SQLITE_DONE</a>. Every call to
+sqlite3_backup_step() obtains a <a href="lockingv3.html#shared_lock">shared lock</a> on the source database that
+lasts for the duration of the sqlite3_backup_step() call.
+Because the source database is not locked between calls to
+sqlite3_backup_step(), the source database may be modified mid-way
+through the backup process. If the source database is modified by an
+external process or via a database connection other than the one being
+used by the backup operation, then the backup will be automatically
+restarted by the next call to sqlite3_backup_step(). If the source
+database is modified by the using the same database connection as is used
+by the backup operation, then the backup database is automatically
+updated at the same time.</p>
+
+<p><a name="sqlite3backupfinish"></a>
+ <b>sqlite3_backup_finish()</b></p>
+
+<p>When sqlite3_backup_step() has returned <a href="#SQLITE_ABORT">SQLITE_DONE</a>, or when the
+application wishes to abandon the backup operation, the application
+should destroy the <a href="#sqlite3_backup">sqlite3_backup</a> by passing it to sqlite3_backup_finish().
+The sqlite3_backup_finish() interfaces releases all
+resources associated with the <a href="#sqlite3_backup">sqlite3_backup</a> object.
+If sqlite3_backup_step() has not yet returned <a href="#SQLITE_ABORT">SQLITE_DONE</a>, then any
+active write-transaction on the destination database is rolled back.
+The <a href="#sqlite3_backup">sqlite3_backup</a> object is invalid
+and may not be used following a call to sqlite3_backup_finish().</p>
+
+<p>The value returned by sqlite3_backup_finish is <a href="#SQLITE_ABORT">SQLITE_OK</a> if no
+sqlite3_backup_step() errors occurred, regardless or whether or not
+sqlite3_backup_step() completed.
+If an out-of-memory condition or IO error occurred during any prior
+sqlite3_backup_step() call on the same <a href="#sqlite3_backup">sqlite3_backup</a> object, then
+sqlite3_backup_finish() returns the corresponding <a href="rescode.html">error code</a>.</p>
+
+<p>A return of <a href="#SQLITE_ABORT">SQLITE_BUSY</a> or <a href="#SQLITE_ABORT">SQLITE_LOCKED</a> from sqlite3_backup_step()
+is not a permanent error and does not affect the return value of
+sqlite3_backup_finish().</p>
+
+<p><a name="sqlite3backupremaining"></a>
+ <a name="sqlite3backuppagecount"></a>
+
+<b>sqlite3_backup_remaining() and sqlite3_backup_pagecount()</b></p>
+
+<p>The sqlite3_backup_remaining() routine returns the number of pages still
+to be backed up at the conclusion of the most recent sqlite3_backup_step().
+The sqlite3_backup_pagecount() routine returns the total number of pages
+in the source database at the conclusion of the most recent
+sqlite3_backup_step().
+The values returned by these functions are only updated by
+sqlite3_backup_step(). If the source database is modified in a way that
+changes the size of the source database or the number of pages remaining,
+those changes are not reflected in the output of sqlite3_backup_pagecount()
+and sqlite3_backup_remaining() until after the next
+sqlite3_backup_step().</p>
+
+<p><b>Concurrent Usage of Database Handles</b></p>
+
+<p>The source <a href="#sqlite3">database connection</a> may be used by the application for other
+purposes while a backup operation is underway or being initialized.
+If SQLite is compiled and configured to support threadsafe database
+connections, then the source database connection may be used concurrently
+from within other threads.</p>
+
+<p>However, the application must guarantee that the destination
+<a href="#sqlite3">database connection</a> is not passed to any other API (by any thread) after
+sqlite3_backup_init() is called and before the corresponding call to
+sqlite3_backup_finish(). SQLite does not currently check to see
+if the application incorrectly accesses the destination <a href="#sqlite3">database connection</a>
+and so no error code is reported, but the operations may malfunction
+nevertheless. Use of the destination database connection while a
+backup is in progress might also cause a mutex deadlock.</p>
+
+<p>If running in <a href="sharedcache.html">shared cache mode</a>, the application must
+guarantee that the shared cache used by the destination database
+is not accessed while the backup is running. In practice this means
+that the application must guarantee that the disk file being
+backed up to is not accessed by any connection within the process,
+not just the specific connection that was passed to sqlite3_backup_init().</p>
+
+<p>The <a href="#sqlite3_backup">sqlite3_backup</a> object itself is partially threadsafe. Multiple
+threads may safely make multiple concurrent calls to sqlite3_backup_step().
+However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount()
+APIs are not strictly speaking threadsafe. If they are invoked at the
+same time as another thread is invoking sqlite3_backup_step() it is
+possible that they return invalid values.
+</p><hr><a name="sqlite3_changes"></a>
+<h2>Count The Number Of Rows Modified</h2>
+</div>
+<blockquote><pre>
+int sqlite3_changes(sqlite3*);
+sqlite3_int64 sqlite3_changes64(sqlite3*);
+</pre></blockquote>
+<p>
+These functions return the number of rows modified, inserted or
+deleted by the most recently completed INSERT, UPDATE or DELETE
+statement on the database connection specified by the only parameter.
+The two functions are identical except for the type of the return value
+and that if the number of rows modified by the most recent INSERT, UPDATE
+or DELETE is greater than the maximum value supported by type "int", then
+the return value of sqlite3_changes() is undefined. Executing any other
+type of SQL statement does not modify the value returned by these functions.</p>
+
+<p>Only changes made directly by the INSERT, UPDATE or DELETE statement are
+considered - auxiliary changes caused by <a href="lang_createtrigger.html">triggers</a>,
+<a href="foreignkeys.html#fk_actions">foreign key actions</a> or <a href="lang_replace.html">REPLACE</a> constraint resolution are not counted.</p>
+
+<p>Changes to a view that are intercepted by
+<a href="lang_createtrigger.html#instead_of_trigger">INSTEAD OF triggers</a> are not counted. The value
+returned by sqlite3_changes() immediately after an INSERT, UPDATE or
+DELETE statement run on a view is always zero. Only changes made to real
+tables are counted.</p>
+
+<p>Things are more complicated if the sqlite3_changes() function is
+executed while a trigger program is running. This may happen if the
+program uses the <a href="lang_corefunc.html#changes">changes() SQL function</a>, or if some other callback
+function invokes sqlite3_changes() directly. Essentially:</p>
+
+<p><ul>
+<li> Before entering a trigger program the value returned by
+sqlite3_changes() function is saved. After the trigger program
+has finished, the original value is restored.</p>
+
+<p><li> Within a trigger program each INSERT, UPDATE and DELETE
+statement sets the value returned by sqlite3_changes()
+upon completion as normal. Of course, this value will not include
+any changes performed by sub-triggers, as the sqlite3_changes()
+value will be saved and restored after each sub-trigger has run.
+</ul></p>
+
+<p>This means that if the changes() SQL function (or similar) is used
+by the first INSERT, UPDATE or DELETE statement within a trigger, it
+returns the value as set when the calling statement began executing.
+If it is used by the second or subsequent such statement within a trigger
+program, the value returned reflects the number of rows modified by the
+previous INSERT, UPDATE or DELETE statement within the same trigger.</p>
+
+<p>If a separate thread makes changes on the same database connection
+while <a href="#sqlite3_changes">sqlite3_changes()</a> is running then the value returned
+is unpredictable and not meaningful.</p>
+
+<p>See also:
+<ul>
+<li> the <a href="#sqlite3_total_changes">sqlite3_total_changes()</a> interface
+<li> the <a href="pragma.html#pragma_count_changes">count_changes pragma</a>
+<li> the <a href="lang_corefunc.html#changes">changes() SQL function</a>
+<li> the <a href="pragma.html#pragma_data_version">data_version pragma</a>
+</ul>
+</p><hr><a name="sqlite3_close"></a>
+<h2>Closing A Database Connection</h2>
+</div>
+<blockquote><pre>
+int sqlite3_close(sqlite3*);
+int sqlite3_close_v2(sqlite3*);
+</pre></blockquote>
+<p>
+The sqlite3_close() and sqlite3_close_v2() routines are destructors
+for the <a href="#sqlite3">sqlite3</a> object.
+Calls to sqlite3_close() and sqlite3_close_v2() return <a href="#SQLITE_ABORT">SQLITE_OK</a> if
+the <a href="#sqlite3">sqlite3</a> object is successfully destroyed and all associated
+resources are deallocated.</p>
+
+<p>Ideally, applications should <a href="#sqlite3_finalize">finalize</a> all
+<a href="#sqlite3_stmt">prepared statements</a>, <a href="#sqlite3_blob_close">close</a> all <a href="#sqlite3_blob">BLOB handles</a>, and
+<a href="#sqlite3backupfinish">finish</a> all <a href="#sqlite3_backup">sqlite3_backup</a> objects associated
+with the <a href="#sqlite3">sqlite3</a> object prior to attempting to close the object.
+If the database connection is associated with unfinalized prepared
+statements, BLOB handlers, and/or unfinished sqlite3_backup objects then
+sqlite3_close() will leave the database connection open and return
+<a href="#SQLITE_ABORT">SQLITE_BUSY</a>. If sqlite3_close_v2() is called with unfinalized prepared
+statements, unclosed BLOB handlers, and/or unfinished sqlite3_backups,
+it returns <a href="#SQLITE_ABORT">SQLITE_OK</a> regardless, but instead of deallocating the database
+connection immediately, it marks the database connection as an unusable
+"zombie" and makes arrangements to automatically deallocate the database
+connection after all prepared statements are finalized, all BLOB handles
+are closed, and all backups have finished. The sqlite3_close_v2() interface
+is intended for use with host languages that are garbage collected, and
+where the order in which destructors are called is arbitrary.</p>
+
+<p>If an <a href="#sqlite3">sqlite3</a> object is destroyed while a transaction is open,
+the transaction is automatically rolled back.</p>
+
+<p>The C parameter to <a href="#sqlite3_close">sqlite3_close(C)</a> and <a href="#sqlite3_close">sqlite3_close_v2(C)</a>
+must be either a NULL
+pointer or an <a href="#sqlite3">sqlite3</a> object pointer obtained
+from <a href="#sqlite3_open">sqlite3_open()</a>, <a href="#sqlite3_open">sqlite3_open16()</a>, or
+<a href="#sqlite3_open">sqlite3_open_v2()</a>, and not previously closed.
+Calling sqlite3_close() or sqlite3_close_v2() with a NULL pointer
+argument is a harmless no-op.
+</p><hr><a name="sqlite3_collation_needed"></a>
+<h2>Collation Needed Callbacks</h2>
+</div>
+<blockquote><pre>
+int sqlite3_collation_needed(
+ sqlite3*,
+ void*,
+ void(*)(void*,sqlite3*,int eTextRep,const char*)
+);
+int sqlite3_collation_needed16(
+ sqlite3*,
+ void*,
+ void(*)(void*,sqlite3*,int eTextRep,const void*)
+);
+</pre></blockquote>
+<p>
+To avoid having to register all collation sequences before a database
+can be used, a single callback function may be registered with the
+<a href="#sqlite3">database connection</a> to be invoked whenever an undefined collation
+sequence is required.</p>
+
+<p>If the function is registered using the sqlite3_collation_needed() API,
+then it is passed the names of undefined collation sequences as strings
+encoded in UTF-8. If sqlite3_collation_needed16() is used,
+the names are passed as UTF-16 in machine native byte order.
+A call to either function replaces the existing collation-needed callback.</p>
+
+<p>When the callback is invoked, the first argument passed is a copy
+of the second argument to sqlite3_collation_needed() or
+sqlite3_collation_needed16(). The second argument is the database
+connection. The third argument is one of <a href="#SQLITE_ANY">SQLITE_UTF8</a>, <a href="#SQLITE_ANY">SQLITE_UTF16BE</a>,
+or <a href="#SQLITE_ANY">SQLITE_UTF16LE</a>, indicating the most desirable form of the collation
+sequence function required. The fourth parameter is the name of the
+required collation sequence.</p>
+
+<p>The callback function should register the desired collation using
+<a href="#sqlite3_create_collation">sqlite3_create_collation()</a>, <a href="#sqlite3_create_collation">sqlite3_create_collation16()</a>, or
+<a href="#sqlite3_create_collation">sqlite3_create_collation_v2()</a>.
+</p><hr><a name="sqlite3_column_database_name"></a>
+<h2>Source Of Data In A Query Result</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_column_database_name(sqlite3_stmt*,int);
+const void *sqlite3_column_database_name16(sqlite3_stmt*,int);
+const char *sqlite3_column_table_name(sqlite3_stmt*,int);
+const void *sqlite3_column_table_name16(sqlite3_stmt*,int);
+const char *sqlite3_column_origin_name(sqlite3_stmt*,int);
+const void *sqlite3_column_origin_name16(sqlite3_stmt*,int);
+</pre></blockquote>
+<p>
+These routines provide a means to determine the database, table, and
+table column that is the origin of a particular result column in
+<a href="lang_select.html">SELECT</a> statement.
+The name of the database or table or column can be returned as
+either a UTF-8 or UTF-16 string. The _database_ routines return
+the database name, the _table_ routines return the table name, and
+the origin_ routines return the column name.
+The returned string is valid until the <a href="#sqlite3_stmt">prepared statement</a> is destroyed
+using <a href="#sqlite3_finalize">sqlite3_finalize()</a> or until the statement is automatically
+reprepared by the first call to <a href="#sqlite3_step">sqlite3_step()</a> for a particular run
+or until the same information is requested
+again in a different encoding.</p>
+
+<p>The names returned are the original un-aliased names of the
+database, table, and column.</p>
+
+<p>The first argument to these interfaces is a <a href="#sqlite3_stmt">prepared statement</a>.
+These functions return information about the Nth result column returned by
+the statement, where N is the second function argument.
+The left-most column is column 0 for these routines.</p>
+
+<p>If the Nth column returned by the statement is an expression or
+subquery and is not a column value, then all of these functions return
+NULL. These routines might also return NULL if a memory allocation error
+occurs. Otherwise, they return the name of the attached database, table,
+or column that query result column was extracted from.</p>
+
+<p>As with all other SQLite APIs, those whose names end with "16" return
+UTF-16 encoded strings and the other functions return UTF-8.</p>
+
+<p>These APIs are only available if the library was compiled with the
+<a href="compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> C-preprocessor symbol.</p>
+
+<p>If two or more threads call one or more
+<a href="#sqlite3_column_database_name">column metadata interfaces</a>
+for the same <a href="#sqlite3_stmt">prepared statement</a> and result column
+at the same time then the results are undefined.
+</p><hr><a name="sqlite3_column_decltype"></a>
+<h2>Declared Datatype Of A Query Result</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_column_decltype(sqlite3_stmt*,int);
+const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
+</pre></blockquote>
+<p>
+The first parameter is a <a href="#sqlite3_stmt">prepared statement</a>.
+If this statement is a <a href="lang_select.html">SELECT</a> statement and the Nth column of the
+returned result set of that <a href="lang_select.html">SELECT</a> is a table column (not an
+expression or subquery) then the declared type of the table
+column is returned. If the Nth column of the result set is an
+expression or subquery, then a NULL pointer is returned.
+The returned string is always UTF-8 encoded.</p>
+
+<p>For example, given the database schema:</p>
+
+<p>CREATE TABLE t1(c1 VARIANT);</p>
+
+<p>and the following statement to be compiled:</p>
+
+<p>SELECT c1 + 1, c1 FROM t1;</p>
+
+<p>this routine would return the string "VARIANT" for the second result
+column (i==1), and a NULL pointer for the first result column (i==0).</p>
+
+<p>SQLite uses dynamic run-time typing. So just because a column
+is declared to contain a particular type does not mean that the
+data stored in that column is of the declared type. SQLite is
+strongly typed, but the typing is dynamic not static. Type
+is associated with individual values, not with the containers
+used to hold those values.
+</p><hr><a name="sqlite3_column_name"></a>
+<h2>Column Names In A Result Set</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_column_name(sqlite3_stmt*, int N);
+const void *sqlite3_column_name16(sqlite3_stmt*, int N);
+</pre></blockquote>
+<p>
+These routines return the name assigned to a particular column
+in the result set of a <a href="lang_select.html">SELECT</a> statement. The sqlite3_column_name()
+interface returns a pointer to a zero-terminated UTF-8 string
+and sqlite3_column_name16() returns a pointer to a zero-terminated
+UTF-16 string. The first parameter is the <a href="#sqlite3_stmt">prepared statement</a>
+that implements the <a href="lang_select.html">SELECT</a> statement. The second parameter is the
+column number. The leftmost column is number 0.</p>
+
+<p>The returned string pointer is valid until either the <a href="#sqlite3_stmt">prepared statement</a>
+is destroyed by <a href="#sqlite3_finalize">sqlite3_finalize()</a> or until the statement is automatically
+reprepared by the first call to <a href="#sqlite3_step">sqlite3_step()</a> for a particular run
+or until the next call to
+sqlite3_column_name() or sqlite3_column_name16() on the same column.</p>
+
+<p>If sqlite3_malloc() fails during the processing of either routine
+(for example during a conversion from UTF-8 to UTF-16) then a
+NULL pointer is returned.</p>
+
+<p>The name of a result column is the value of the "AS" clause for
+that column, if there is an AS clause. If there is no AS clause
+then the name of the column is unspecified and may change from
+one release of SQLite to the next.
+</p><hr><a name="sqlite3_commit_hook"></a>
+<h2>Commit And Rollback Notification Callbacks</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
+void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
+</pre></blockquote>
+<p>
+The sqlite3_commit_hook() interface registers a callback
+function to be invoked whenever a transaction is <a href="lang_transaction.html">committed</a>.
+Any callback set by a previous call to sqlite3_commit_hook()
+for the same database connection is overridden.
+The sqlite3_rollback_hook() interface registers a callback
+function to be invoked whenever a transaction is <a href="lang_transaction.html">rolled back</a>.
+Any callback set by a previous call to sqlite3_rollback_hook()
+for the same database connection is overridden.
+The pArg argument is passed through to the callback.
+If the callback on a commit hook function returns non-zero,
+then the commit is converted into a rollback.</p>
+
+<p>The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions
+return the P argument from the previous call of the same function
+on the same <a href="#sqlite3">database connection</a> D, or NULL for
+the first call for each function on D.</p>
+
+<p>The commit and rollback hook callbacks are not reentrant.
+The callback implementation must not do anything that will modify
+the database connection that invoked the callback. Any actions
+to modify the database connection must be deferred until after the
+completion of the <a href="#sqlite3_step">sqlite3_step()</a> call that triggered the commit
+or rollback hook in the first place.
+Note that running any other SQL statements, including SELECT statements,
+or merely calling <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> and <a href="#sqlite3_step">sqlite3_step()</a> will modify
+the database connections for the meaning of "modify" in this paragraph.</p>
+
+<p>Registering a NULL function disables the callback.</p>
+
+<p>When the commit hook callback routine returns zero, the <a href="lang_transaction.html">COMMIT</a>
+operation is allowed to continue normally. If the commit hook
+returns non-zero, then the <a href="lang_transaction.html">COMMIT</a> is converted into a <a href="lang_transaction.html">ROLLBACK</a>.
+The rollback hook is invoked on a rollback that results from a commit
+hook returning non-zero, just as it would be with any other rollback.</p>
+
+<p>For the purposes of this API, a transaction is said to have been
+rolled back if an explicit "ROLLBACK" statement is executed, or
+an error or constraint causes an implicit rollback to occur.
+The rollback callback is not invoked if a transaction is
+automatically rolled back because the database connection is closed.</p>
+
+<p>See also the <a href="#sqlite3_update_hook">sqlite3_update_hook()</a> interface.
+</p><hr><a name="sqlite3_compileoption_get"></a>
+<h2>Run-Time Library Compilation Options Diagnostics</h2>
+</div>
+<blockquote><pre>
+#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
+int sqlite3_compileoption_used(const char *zOptName);
+const char *sqlite3_compileoption_get(int N);
+#else
+# define sqlite3_compileoption_used(X) 0
+# define sqlite3_compileoption_get(X) ((void*)0)
+#endif
+</pre></blockquote>
+<p>
+The sqlite3_compileoption_used() function returns 0 or 1
+indicating whether the specified option was defined at
+compile time. The SQLITE_ prefix may be omitted from the
+option name passed to sqlite3_compileoption_used().</p>
+
+<p>The sqlite3_compileoption_get() function allows iterating
+over the list of options that were defined at compile time by
+returning the N-th compile time option string. If N is out of range,
+sqlite3_compileoption_get() returns a NULL pointer. The SQLITE_
+prefix is omitted from any strings returned by
+sqlite3_compileoption_get().</p>
+
+<p>Support for the diagnostic functions sqlite3_compileoption_used()
+and sqlite3_compileoption_get() may be omitted by specifying the
+<a href="compile.html#omit_compileoption_diags">SQLITE_OMIT_COMPILEOPTION_DIAGS</a> option at compile time.</p>
+
+<p>See also: SQL functions <a href="lang_corefunc.html#sqlite_compileoption_used">sqlite_compileoption_used()</a> and
+<a href="lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a> and the <a href="pragma.html#pragma_compile_options">compile_options pragma</a>.
+</p><hr><a name="sqlite3_complete"></a>
+<h2>Determine If An SQL Statement Is Complete</h2>
+</div>
+<blockquote><pre>
+int sqlite3_complete(const char *sql);
+int sqlite3_complete16(const void *sql);
+</pre></blockquote>
+<p>
+These routines are useful during command-line input to determine if the
+currently entered text seems to form a complete SQL statement or
+if additional input is needed before sending the text into
+SQLite for parsing. These routines return 1 if the input string
+appears to be a complete SQL statement. A statement is judged to be
+complete if it ends with a semicolon token and is not a prefix of a
+well-formed CREATE TRIGGER statement. Semicolons that are embedded within
+string literals or quoted identifier names or comments are not
+independent tokens (they are part of the token in which they are
+embedded) and thus do not count as a statement terminator. Whitespace
+and comments that follow the final semicolon are ignored.</p>
+
+<p>These routines return 0 if the statement is incomplete. If a
+memory allocation fails, then SQLITE_NOMEM is returned.</p>
+
+<p>These routines do not parse the SQL statements thus
+will not detect syntactically incorrect SQL.</p>
+
+<p>If SQLite has not been initialized using <a href="#sqlite3_initialize">sqlite3_initialize()</a> prior
+to invoking sqlite3_complete16() then sqlite3_initialize() is invoked
+automatically by sqlite3_complete16(). If that initialization fails,
+then the return value from sqlite3_complete16() will be non-zero
+regardless of whether or not the input SQL is complete.</p>
+
+<p>The input to <a href="#sqlite3_complete">sqlite3_complete()</a> must be a zero-terminated
+UTF-8 string.</p>
+
+<p>The input to <a href="#sqlite3_complete">sqlite3_complete16()</a> must be a zero-terminated
+UTF-16 string in native byte order.
+</p><hr><a name="sqlite3_create_collation"></a>
+<h2>Define New Collating Sequences</h2>
+</div>
+<blockquote><pre>
+int sqlite3_create_collation(
+ sqlite3*,
+ const char *zName,
+ int eTextRep,
+ void *pArg,
+ int(*xCompare)(void*,int,const void*,int,const void*)
+);
+int sqlite3_create_collation_v2(
+ sqlite3*,
+ const char *zName,
+ int eTextRep,
+ void *pArg,
+ int(*xCompare)(void*,int,const void*,int,const void*),
+ void(*xDestroy)(void*)
+);
+int sqlite3_create_collation16(
+ sqlite3*,
+ const void *zName,
+ int eTextRep,
+ void *pArg,
+ int(*xCompare)(void*,int,const void*,int,const void*)
+);
+</pre></blockquote>
+<p>
+These functions add, remove, or modify a <a href="datatype3.html#collation">collation</a> associated
+with the <a href="#sqlite3">database connection</a> specified as the first argument.</p>
+
+<p>The name of the collation is a UTF-8 string
+for sqlite3_create_collation() and sqlite3_create_collation_v2()
+and a UTF-16 string in native byte order for sqlite3_create_collation16().
+Collation names that compare equal according to <a href="#sqlite3_stricmp">sqlite3_strnicmp()</a> are
+considered to be the same name.</p>
+
+<p>The third argument (eTextRep) must be one of the constants:
+<ul>
+<li> <a href="#SQLITE_ANY">SQLITE_UTF8</a>,
+<li> <a href="#SQLITE_ANY">SQLITE_UTF16LE</a>,
+<li> <a href="#SQLITE_ANY">SQLITE_UTF16BE</a>,
+<li> <a href="#SQLITE_ANY">SQLITE_UTF16</a>, or
+<li> <a href="#SQLITE_ANY">SQLITE_UTF16_ALIGNED</a>.
+</ul>
+The eTextRep argument determines the encoding of strings passed
+to the collating function callback, xCompare.
+The <a href="#SQLITE_ANY">SQLITE_UTF16</a> and <a href="#SQLITE_ANY">SQLITE_UTF16_ALIGNED</a> values for eTextRep
+force strings to be UTF16 with native byte order.
+The <a href="#SQLITE_ANY">SQLITE_UTF16_ALIGNED</a> value for eTextRep forces strings to begin
+on an even byte address.</p>
+
+<p>The fourth argument, pArg, is an application data pointer that is passed
+through as the first argument to the collating function callback.</p>
+
+<p>The fifth argument, xCompare, is a pointer to the collating function.
+Multiple collating functions can be registered using the same name but
+with different eTextRep parameters and SQLite will use whichever
+function requires the least amount of data transformation.
+If the xCompare argument is NULL then the collating function is
+deleted. When all collating functions having the same name are deleted,
+that collation is no longer usable.</p>
+
+<p>The collating function callback is invoked with a copy of the pArg
+application data pointer and with two strings in the encoding specified
+by the eTextRep argument. The two integer parameters to the collating
+function callback are the length of the two strings, in bytes. The collating
+function must return an integer that is negative, zero, or positive
+if the first string is less than, equal to, or greater than the second,
+respectively. A collating function must always return the same answer
+given the same inputs. If two or more collating functions are registered
+to the same collation name (using different eTextRep values) then all
+must give an equivalent answer when invoked with equivalent strings.
+The collating function must obey the following properties for all
+strings A, B, and C:</p>
+
+<p><ol>
+<li> If A==B then B==A.
+<li> If A==B and B==C then A==C.
+<li> If A&lt;B THEN B&gt;A.
+<li> If A&lt;B and B&lt;C then A&lt;C.
+</ol></p>
+
+<p>If a collating function fails any of the above constraints and that
+collating function is registered and used, then the behavior of SQLite
+is undefined.</p>
+
+<p>The sqlite3_create_collation_v2() works like sqlite3_create_collation()
+with the addition that the xDestroy callback is invoked on pArg when
+the collating function is deleted.
+Collating functions are deleted when they are overridden by later
+calls to the collation creation functions or when the
+<a href="#sqlite3">database connection</a> is closed using <a href="#sqlite3_close">sqlite3_close()</a>.</p>
+
+<p>The xDestroy callback is <u>not</u> called if the
+sqlite3_create_collation_v2() function fails. Applications that invoke
+sqlite3_create_collation_v2() with a non-NULL xDestroy argument should
+check the return code and dispose of the application data pointer
+themselves rather than expecting SQLite to deal with it for them.
+This is different from every other SQLite interface. The inconsistency
+is unfortunate but cannot be changed without breaking backwards
+compatibility.</p>
+
+<p>See also: <a href="#sqlite3_collation_needed">sqlite3_collation_needed()</a> and <a href="#sqlite3_collation_needed">sqlite3_collation_needed16()</a>.
+</p><hr><a name="sqlite3_create_filename"></a>
+<h2>Create and Destroy VFS Filenames</h2>
+</div>
+<blockquote><pre>
+sqlite3_filename sqlite3_create_filename(
+ const char *zDatabase,
+ const char *zJournal,
+ const char *zWal,
+ int nParam,
+ const char **azParam
+);
+void sqlite3_free_filename(sqlite3_filename);
+</pre></blockquote>
+<p>
+These interfces are provided for use by <a href="vfs.html#shim">VFS shim</a> implementations and
+are not useful outside of that context.</p>
+
+<p>The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of
+database filename D with corresponding journal file J and WAL file W and
+with N URI parameters key/values pairs in the array P. The result from
+sqlite3_create_filename(D,J,W,N,P) is a pointer to a database filename that
+is safe to pass to routines like:
+<ul>
+<li> <a href="#sqlite3_uri_boolean">sqlite3_uri_parameter()</a>,
+<li> <a href="#sqlite3_uri_boolean">sqlite3_uri_boolean()</a>,
+<li> <a href="#sqlite3_uri_boolean">sqlite3_uri_int64()</a>,
+<li> <a href="#sqlite3_uri_boolean">sqlite3_uri_key()</a>,
+<li> <a href="#sqlite3_filename_database">sqlite3_filename_database()</a>,
+<li> <a href="#sqlite3_filename_database">sqlite3_filename_journal()</a>, or
+<li> <a href="#sqlite3_filename_database">sqlite3_filename_wal()</a>.
+</ul>
+If a memory allocation error occurs, sqlite3_create_filename() might
+return a NULL pointer. The memory obtained from sqlite3_create_filename(X)
+must be released by a corresponding call to sqlite3_free_filename(Y).</p>
+
+<p>The P parameter in sqlite3_create_filename(D,J,W,N,P) should be an array
+of 2*N pointers to strings. Each pair of pointers in this array corresponds
+to a key and value for a query parameter. The P parameter may be a NULL
+pointer if N is zero. None of the 2*N pointers in the P array may be
+NULL pointers and key pointers should not be empty strings.
+None of the D, J, or W parameters to sqlite3_create_filename(D,J,W,N,P) may
+be NULL pointers, though they can be empty strings.</p>
+
+<p>The sqlite3_free_filename(Y) routine releases a memory allocation
+previously obtained from sqlite3_create_filename(). Invoking
+sqlite3_free_filename(Y) where Y is a NULL pointer is a harmless no-op.</p>
+
+<p>If the Y parameter to sqlite3_free_filename(Y) is anything other
+than a NULL pointer or a pointer previously acquired from
+sqlite3_create_filename(), then bad things such as heap
+corruption or segfaults may occur. The value Y should not be
+used again after sqlite3_free_filename(Y) has been called. This means
+that if the <a href="#sqlite3vfsxopen">sqlite3_vfs.xOpen()</a> method of a VFS has been called using Y,
+then the corresponding [sqlite3_module.xClose() method should also be
+invoked prior to calling sqlite3_free_filename(Y).
+</p><hr><a name="sqlite3_create_module"></a>
+<h2>Register A Virtual Table Implementation</h2>
+</div>
+<blockquote><pre>
+int sqlite3_create_module(
+ sqlite3 *db, /* SQLite connection to register module with */
+ const char *zName, /* Name of the module */
+ const sqlite3_module *p, /* Methods for the module */
+ void *pClientData /* Client data for xCreate/xConnect */
+);
+int sqlite3_create_module_v2(
+ sqlite3 *db, /* SQLite connection to register module with */
+ const char *zName, /* Name of the module */
+ const sqlite3_module *p, /* Methods for the module */
+ void *pClientData, /* Client data for xCreate/xConnect */
+ void(*xDestroy)(void*) /* Module destructor function */
+);
+</pre></blockquote>
+<p>
+These routines are used to register a new <a href="#sqlite3_module">virtual table module</a> name.
+Module names must be registered before
+creating a new <a href="vtab.html">virtual table</a> using the module and before using a
+preexisting <a href="vtab.html">virtual table</a> for the module.</p>
+
+<p>The module name is registered on the <a href="#sqlite3">database connection</a> specified
+by the first parameter. The name of the module is given by the
+second parameter. The third parameter is a pointer to
+the implementation of the <a href="#sqlite3_module">virtual table module</a>. The fourth
+parameter is an arbitrary client data pointer that is passed through
+into the <a href="vtab.html#xcreate">xCreate</a> and <a href="vtab.html#xconnect">xConnect</a> methods of the virtual table module
+when a new virtual table is be being created or reinitialized.</p>
+
+<p>The sqlite3_create_module_v2() interface has a fifth parameter which
+is a pointer to a destructor for the pClientData. SQLite will
+invoke the destructor function (if it is not NULL) when SQLite
+no longer needs the pClientData pointer. The destructor will also
+be invoked if the call to sqlite3_create_module_v2() fails.
+The sqlite3_create_module()
+interface is equivalent to sqlite3_create_module_v2() with a NULL
+destructor.</p>
+
+<p>If the third parameter (the pointer to the sqlite3_module object) is
+NULL then no new module is created and any existing modules with the
+same name are dropped.</p>
+
+<p>See also: <a href="#sqlite3_drop_modules">sqlite3_drop_modules()</a>
+</p><hr><a name="sqlite3_errcode"></a>
+<h2>Error Codes And Messages</h2>
+</div>
+<blockquote><pre>
+int sqlite3_errcode(sqlite3 *db);
+int sqlite3_extended_errcode(sqlite3 *db);
+const char *sqlite3_errmsg(sqlite3*);
+const void *sqlite3_errmsg16(sqlite3*);
+const char *sqlite3_errstr(int);
+int sqlite3_error_offset(sqlite3 *db);
+</pre></blockquote>
+<p>
+If the most recent sqlite3_* API call associated with
+<a href="#sqlite3">database connection</a> D failed, then the sqlite3_errcode(D) interface
+returns the numeric <a href="rescode.html">result code</a> or <a href="rescode.html#extrc">extended result code</a> for that
+API call.
+The sqlite3_extended_errcode()
+interface is the same except that it always returns the
+<a href="rescode.html#extrc">extended result code</a> even when extended result codes are
+disabled.</p>
+
+<p>The values returned by sqlite3_errcode() and/or
+sqlite3_extended_errcode() might change with each API call.
+Except, there are some interfaces that are guaranteed to never
+change the value of the error code. The error-code preserving
+interfaces include the following:</p>
+
+<p><ul>
+<li> sqlite3_errcode()
+<li> sqlite3_extended_errcode()
+<li> sqlite3_errmsg()
+<li> sqlite3_errmsg16()
+<li> sqlite3_error_offset()
+</ul></p>
+
+<p>The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
+text that describes the error, as either UTF-8 or UTF-16 respectively.
+Memory to hold the error message string is managed internally.
+The application does not need to worry about freeing the result.
+However, the error string might be overwritten or deallocated by
+subsequent calls to other SQLite interface functions.</p>
+
+<p>The sqlite3_errstr() interface returns the English-language text
+that describes the <a href="rescode.html">result code</a>, as UTF-8.
+Memory to hold the error message string is managed internally
+and must not be freed by the application.</p>
+
+<p>If the most recent error references a specific token in the input
+SQL, the sqlite3_error_offset() interface returns the byte offset
+of the start of that token. The byte offset returned by
+sqlite3_error_offset() assumes that the input SQL is UTF8.
+If the most recent error does not reference a specific token in the input
+SQL, then the sqlite3_error_offset() function returns -1.</p>
+
+<p>When the serialized <a href="threadsafe.html">threading mode</a> is in use, it might be the
+case that a second error occurs on a separate thread in between
+the time of the first error and the call to these interfaces.
+When that happens, the second error will be reported since these
+interfaces always report the most recent result. To avoid
+this, each thread can obtain exclusive use of the <a href="#sqlite3">database connection</a> D
+by invoking <a href="#sqlite3_mutex_alloc">sqlite3_mutex_enter</a>(<a href="#sqlite3_db_mutex">sqlite3_db_mutex</a>(D)) before beginning
+to use D and invoking <a href="#sqlite3_mutex_alloc">sqlite3_mutex_leave</a>(<a href="#sqlite3_db_mutex">sqlite3_db_mutex</a>(D)) after
+all calls to the interfaces listed here are completed.</p>
+
+<p>If an interface fails with SQLITE_MISUSE, that means the interface
+was invoked incorrectly by the application. In that case, the
+error code and message may or may not be set.
+</p><hr><a name="sqlite3_expanded_sql"></a>
+<h2>Retrieving Statement SQL</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_sql(sqlite3_stmt *pStmt);
+char *sqlite3_expanded_sql(sqlite3_stmt *pStmt);
+#ifdef SQLITE_ENABLE_NORMALIZE
+const char *sqlite3_normalized_sql(sqlite3_stmt *pStmt);
+#endif
+</pre></blockquote>
+<p>
+The sqlite3_sql(P) interface returns a pointer to a copy of the UTF-8
+SQL text used to create <a href="#sqlite3_stmt">prepared statement</a> P if P was
+created by <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a>, <a href="#sqlite3_prepare">sqlite3_prepare_v3()</a>,
+<a href="#sqlite3_prepare">sqlite3_prepare16_v2()</a>, or <a href="#sqlite3_prepare">sqlite3_prepare16_v3()</a>.
+The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8
+string containing the SQL text of prepared statement P with
+<a href="lang_expr.html#varparam">bound parameters</a> expanded.
+The sqlite3_normalized_sql(P) interface returns a pointer to a UTF-8
+string containing the normalized SQL text of prepared statement P. The
+semantics used to normalize a SQL statement are unspecified and subject
+to change. At a minimum, literal values will be replaced with suitable
+placeholders.</p>
+
+<p>For example, if a prepared statement is created using the SQL
+text "SELECT $abc,:xyz" and if parameter $abc is bound to integer 2345
+and parameter :xyz is unbound, then sqlite3_sql() will return
+the original string, "SELECT $abc,:xyz" but sqlite3_expanded_sql()
+will return "SELECT 2345,NULL".</p>
+
+<p>The sqlite3_expanded_sql() interface returns NULL if insufficient memory
+is available to hold the result, or if the result would exceed the
+the maximum string length determined by the <a href="#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a>.</p>
+
+<p>The <a href="compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> compile-time option limits the size of
+bound parameter expansions. The <a href="compile.html#omit_trace">SQLITE_OMIT_TRACE</a> compile-time
+option causes sqlite3_expanded_sql() to always return NULL.</p>
+
+<p>The strings returned by sqlite3_sql(P) and sqlite3_normalized_sql(P)
+are managed by SQLite and are automatically freed when the prepared
+statement is finalized.
+The string returned by sqlite3_expanded_sql(P), on the other hand,
+is obtained from <a href="#sqlite3_free">sqlite3_malloc()</a> and must be freed by the application
+by passing it to <a href="#sqlite3_free">sqlite3_free()</a>.</p>
+
+<p>The sqlite3_normalized_sql() interface is only available if
+the <a href="compile.html#enable_normalize">SQLITE_ENABLE_NORMALIZE</a> compile-time option is defined.
+</p><hr><a name="sqlite3_filename_database"></a>
+<h2>Translate filenames</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_filename_database(sqlite3_filename);
+const char *sqlite3_filename_journal(sqlite3_filename);
+const char *sqlite3_filename_wal(sqlite3_filename);
+</pre></blockquote>
+<p>
+These routines are available to <a href="vfs.html">custom VFS implementations</a> for
+translating filenames between the main database file, the journal file,
+and the WAL file.</p>
+
+<p>If F is the name of an sqlite database file, journal file, or WAL file
+passed by the SQLite core into the VFS, then sqlite3_filename_database(F)
+returns the name of the corresponding database file.</p>
+
+<p>If F is the name of an sqlite database file, journal file, or WAL file
+passed by the SQLite core into the VFS, or if F is a database filename
+obtained from <a href="#sqlite3_db_filename">sqlite3_db_filename()</a>, then sqlite3_filename_journal(F)
+returns the name of the corresponding rollback journal file.</p>
+
+<p>If F is the name of an sqlite database file, journal file, or WAL file
+that was passed by the SQLite core into the VFS, or if F is a database
+filename obtained from <a href="#sqlite3_db_filename">sqlite3_db_filename()</a>, then
+sqlite3_filename_wal(F) returns the name of the corresponding
+WAL file.</p>
+
+<p>In all of the above, if F is not the name of a database, journal or WAL
+filename passed into the VFS from the SQLite core and F is not the
+return value from <a href="#sqlite3_db_filename">sqlite3_db_filename()</a>, then the result is
+undefined and is likely a memory access violation.
+</p><hr><a name="sqlite3_free"></a>
+<h2>Memory Allocation Subsystem</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_malloc(int);
+void *sqlite3_malloc64(sqlite3_uint64);
+void *sqlite3_realloc(void*, int);
+void *sqlite3_realloc64(void*, sqlite3_uint64);
+void sqlite3_free(void*);
+sqlite3_uint64 sqlite3_msize(void*);
+</pre></blockquote>
+<p>
+The SQLite core uses these three routines for all of its own
+internal memory allocation needs. "Core" in the previous sentence
+does not include operating-system specific <a href="vfs.html">VFS</a> implementation. The
+Windows VFS uses native malloc() and free() for some operations.</p>
+
+<p>The sqlite3_malloc() routine returns a pointer to a block
+of memory at least N bytes in length, where N is the parameter.
+If sqlite3_malloc() is unable to obtain sufficient free
+memory, it returns a NULL pointer. If the parameter N to
+sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
+a NULL pointer.</p>
+
+<p>The sqlite3_malloc64(N) routine works just like
+sqlite3_malloc(N) except that N is an unsigned 64-bit integer instead
+of a signed 32-bit integer.</p>
+
+<p>Calling sqlite3_free() with a pointer previously returned
+by sqlite3_malloc() or sqlite3_realloc() releases that memory so
+that it might be reused. The sqlite3_free() routine is
+a no-op if is called with a NULL pointer. Passing a NULL pointer
+to sqlite3_free() is harmless. After being freed, memory
+should neither be read nor written. Even reading previously freed
+memory might result in a segmentation fault or other severe error.
+Memory corruption, a segmentation fault, or other severe error
+might result if sqlite3_free() is called with a non-NULL pointer that
+was not obtained from sqlite3_malloc() or sqlite3_realloc().</p>
+
+<p>The sqlite3_realloc(X,N) interface attempts to resize a
+prior memory allocation X to be at least N bytes.
+If the X parameter to sqlite3_realloc(X,N)
+is a NULL pointer then its behavior is identical to calling
+sqlite3_malloc(N).
+If the N parameter to sqlite3_realloc(X,N) is zero or
+negative then the behavior is exactly the same as calling
+sqlite3_free(X).
+sqlite3_realloc(X,N) returns a pointer to a memory allocation
+of at least N bytes in size or NULL if insufficient memory is available.
+If M is the size of the prior allocation, then min(N,M) bytes
+of the prior allocation are copied into the beginning of buffer returned
+by sqlite3_realloc(X,N) and the prior allocation is freed.
+If sqlite3_realloc(X,N) returns NULL and N is positive, then the
+prior allocation is not freed.</p>
+
+<p>The sqlite3_realloc64(X,N) interfaces works the same as
+sqlite3_realloc(X,N) except that N is a 64-bit unsigned integer instead
+of a 32-bit signed integer.</p>
+
+<p>If X is a memory allocation previously obtained from sqlite3_malloc(),
+sqlite3_malloc64(), sqlite3_realloc(), or sqlite3_realloc64(), then
+sqlite3_msize(X) returns the size of that memory allocation in bytes.
+The value returned by sqlite3_msize(X) might be larger than the number
+of bytes requested when X was allocated. If X is a NULL pointer then
+sqlite3_msize(X) returns zero. If X points to something that is not
+the beginning of memory allocation, or if it points to a formerly
+valid memory allocation that has now been freed, then the behavior
+of sqlite3_msize(X) is undefined and possibly harmful.</p>
+
+<p>The memory returned by sqlite3_malloc(), sqlite3_realloc(),
+sqlite3_malloc64(), and sqlite3_realloc64()
+is always aligned to at least an 8 byte boundary, or to a
+4 byte boundary if the <a href="compile.html#4_byte_aligned_malloc">SQLITE_4_BYTE_ALIGNED_MALLOC</a> compile-time
+option is used.</p>
+
+<p>The pointer arguments to <a href="#sqlite3_free">sqlite3_free()</a> and <a href="#sqlite3_free">sqlite3_realloc()</a>
+must be either NULL or else pointers obtained from a prior
+invocation of <a href="#sqlite3_free">sqlite3_malloc()</a> or <a href="#sqlite3_free">sqlite3_realloc()</a> that have
+not yet been released.</p>
+
+<p>The application must not read or write any part of
+a block of memory after it has been released using
+<a href="#sqlite3_free">sqlite3_free()</a> or <a href="#sqlite3_free">sqlite3_realloc()</a>.
+</p><hr><a name="sqlite3_free_table"></a>
+<h2>Convenience Routines For Running Queries</h2>
+</div>
+<blockquote><pre>
+int sqlite3_get_table(
+ sqlite3 *db, /* An open database */
+ const char *zSql, /* SQL to be evaluated */
+ char ***pazResult, /* Results of the query */
+ int *pnRow, /* Number of result rows written here */
+ int *pnColumn, /* Number of result columns written here */
+ char **pzErrmsg /* Error msg written here */
+);
+void sqlite3_free_table(char **result);
+</pre></blockquote>
+<p>
+This is a legacy interface that is preserved for backwards compatibility.
+Use of this interface is not recommended.</p>
+
+<p>Definition: A <b>result table</b> is memory data structure created by the
+<a href="#sqlite3_free_table">sqlite3_get_table()</a> interface. A result table records the
+complete query results from one or more queries.</p>
+
+<p>The table conceptually has a number of rows and columns. But
+these numbers are not part of the result table itself. These
+numbers are obtained separately. Let N be the number of rows
+and M be the number of columns.</p>
+
+<p>A result table is an array of pointers to zero-terminated UTF-8 strings.
+There are (N+1)*M elements in the array. The first M pointers point
+to zero-terminated strings that contain the names of the columns.
+The remaining entries all point to query results. NULL values result
+in NULL pointers. All other values are in their UTF-8 zero-terminated
+string representation as returned by <a href="#sqlite3_column_blob">sqlite3_column_text()</a>.</p>
+
+<p>A result table might consist of one or more memory allocations.
+It is not safe to pass a result table directly to <a href="#sqlite3_free">sqlite3_free()</a>.
+A result table should be deallocated using <a href="#sqlite3_free_table">sqlite3_free_table()</a>.</p>
+
+<p>As an example of the result table format, suppose a query result
+is as follows:</p>
+
+<p><blockquote><pre>
+Name | Age
+-----------------------
+Alice | 43
+Bob | 28
+Cindy | 21
+</pre></blockquote></p>
+
+<p>There are two columns (M==2) and three rows (N==3). Thus the
+result table has 8 entries. Suppose the result table is stored
+in an array named azResult. Then azResult holds this content:</p>
+
+<p><blockquote><pre>
+azResult&#91;0] = "Name";
+azResult&#91;1] = "Age";
+azResult&#91;2] = "Alice";
+azResult&#91;3] = "43";
+azResult&#91;4] = "Bob";
+azResult&#91;5] = "28";
+azResult&#91;6] = "Cindy";
+azResult&#91;7] = "21";
+</pre></blockquote></p>
+
+<p>The sqlite3_get_table() function evaluates one or more
+semicolon-separated SQL statements in the zero-terminated UTF-8
+string of its 2nd parameter and returns a result table to the
+pointer given in its 3rd parameter.</p>
+
+<p>After the application has finished with the result from sqlite3_get_table(),
+it must pass the result table pointer to sqlite3_free_table() in order to
+release the memory that was malloced. Because of the way the
+<a href="#sqlite3_free">sqlite3_malloc()</a> happens within sqlite3_get_table(), the calling
+function must not try to call <a href="#sqlite3_free">sqlite3_free()</a> directly. Only
+<a href="#sqlite3_free_table">sqlite3_free_table()</a> is able to release the memory properly and safely.</p>
+
+<p>The sqlite3_get_table() interface is implemented as a wrapper around
+<a href="#sqlite3_exec">sqlite3_exec()</a>. The sqlite3_get_table() routine does not have access
+to any internal data structures of SQLite. It uses only the public
+interface defined here. As a consequence, errors that occur in the
+wrapper layer outside of the internal <a href="#sqlite3_exec">sqlite3_exec()</a> call are not
+reflected in subsequent calls to <a href="#sqlite3_errcode">sqlite3_errcode()</a> or
+<a href="#sqlite3_errcode">sqlite3_errmsg()</a>.
+</p><hr><a name="sqlite3_get_auxdata"></a>
+<h2>Function Auxiliary Data</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_get_auxdata(sqlite3_context*, int N);
+void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*));
+</pre></blockquote>
+<p>
+These functions may be used by (non-aggregate) SQL functions to
+associate metadata with argument values. If the same value is passed to
+multiple invocations of the same SQL function during query execution, under
+some circumstances the associated metadata may be preserved. An example
+of where this might be useful is in a regular-expression matching
+function. The compiled version of the regular expression can be stored as
+metadata associated with the pattern string.
+Then as long as the pattern string remains the same,
+the compiled regular expression can be reused on multiple
+invocations of the same function.</p>
+
+<p>The sqlite3_get_auxdata(C,N) interface returns a pointer to the metadata
+associated by the sqlite3_set_auxdata(C,N,P,X) function with the Nth argument
+value to the application-defined function. N is zero for the left-most
+function argument. If there is no metadata
+associated with the function argument, the sqlite3_get_auxdata(C,N) interface
+returns a NULL pointer.</p>
+
+<p>The sqlite3_set_auxdata(C,N,P,X) interface saves P as metadata for the N-th
+argument of the application-defined function. Subsequent
+calls to sqlite3_get_auxdata(C,N) return P from the most recent
+sqlite3_set_auxdata(C,N,P,X) call if the metadata is still valid or
+NULL if the metadata has been discarded.
+After each call to sqlite3_set_auxdata(C,N,P,X) where X is not NULL,
+SQLite will invoke the destructor function X with parameter P exactly
+once, when the metadata is discarded.
+SQLite is free to discard the metadata at any time, including: <ul>
+<li> when the corresponding function parameter changes, or
+<li> when <a href="#sqlite3_reset">sqlite3_reset()</a> or <a href="#sqlite3_finalize">sqlite3_finalize()</a> is called for the
+SQL statement, or
+<li> when sqlite3_set_auxdata() is invoked again on the same
+parameter, or
+<li> during the original sqlite3_set_auxdata() call when a memory
+allocation error occurs. </ul></p>
+
+<p>Note the last bullet in particular. The destructor X in
+sqlite3_set_auxdata(C,N,P,X) might be called immediately, before the
+sqlite3_set_auxdata() interface even returns. Hence sqlite3_set_auxdata()
+should be called near the end of the function implementation and the
+function implementation should not make any use of P after
+sqlite3_set_auxdata() has been called.</p>
+
+<p>In practice, metadata is preserved between function calls for
+function parameters that are compile-time constants, including literal
+values and <a href="lang_expr.html#varparam">parameters</a> and expressions composed from the same.</p>
+
+<p>The value of the N parameter to these interfaces should be non-negative.
+Future enhancements may make use of negative N values to define new
+kinds of function caching behavior.</p>
+
+<p>These routines must be called from the same thread in which
+the SQL function is running.
+</p><hr><a name="sqlite3_hard_heap_limit64"></a>
+<h2>Impose A Limit On Heap Size</h2>
+</div>
+<blockquote><pre>
+sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
+sqlite3_int64 sqlite3_hard_heap_limit64(sqlite3_int64 N);
+</pre></blockquote>
+<p>
+These interfaces impose limits on the amount of heap memory that will be
+by all database connections within a single process.</p>
+
+<p>The sqlite3_soft_heap_limit64() interface sets and/or queries the
+soft limit on the amount of heap memory that may be allocated by SQLite.
+SQLite strives to keep heap memory utilization below the soft heap
+limit by reducing the number of pages held in the page cache
+as heap memory usages approaches the limit.
+The soft heap limit is "soft" because even though SQLite strives to stay
+below the limit, it will exceed the limit rather than generate
+an <a href="#SQLITE_ABORT">SQLITE_NOMEM</a> error. In other words, the soft heap limit
+is advisory only.</p>
+
+<p>The sqlite3_hard_heap_limit64(N) interface sets a hard upper bound of
+N bytes on the amount of memory that will be allocated. The
+sqlite3_hard_heap_limit64(N) interface is similar to
+sqlite3_soft_heap_limit64(N) except that memory allocations will fail
+when the hard heap limit is reached.</p>
+
+<p>The return value from both sqlite3_soft_heap_limit64() and
+sqlite3_hard_heap_limit64() is the size of
+the heap limit prior to the call, or negative in the case of an
+error. If the argument N is negative
+then no change is made to the heap limit. Hence, the current
+size of heap limits can be determined by invoking
+sqlite3_soft_heap_limit64(-1) or sqlite3_hard_heap_limit(-1).</p>
+
+<p>Setting the heap limits to zero disables the heap limiter mechanism.</p>
+
+<p>The soft heap limit may not be greater than the hard heap limit.
+If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N)
+is invoked with a value of N that is greater than the hard heap limit,
+the soft heap limit is set to the value of the hard heap limit.
+The soft heap limit is automatically enabled whenever the hard heap
+limit is enabled. When sqlite3_hard_heap_limit64(N) is invoked and
+the soft heap limit is outside the range of 1..N, then the soft heap
+limit is set to N. Invoking sqlite3_soft_heap_limit64(0) when the
+hard heap limit is enabled makes the soft heap limit equal to the
+hard heap limit.</p>
+
+<p>The memory allocation limits can also be adjusted using
+<a href="pragma.html#pragma_soft_heap_limit">PRAGMA soft_heap_limit</a> and <a href="pragma.html#pragma_hard_heap_limit">PRAGMA hard_heap_limit</a>.</p>
+
+<p>The heap limits are not enforced in the current implementation
+if one or more of following conditions are true:</p>
+
+<p><ul>
+<li> The limit value is set to zero.
+<li> Memory accounting is disabled using a combination of the
+<a href="#sqlite3_config">sqlite3_config</a>(<a href="#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a>,...) start-time option and
+the <a href="compile.html#default_memstatus">SQLITE_DEFAULT_MEMSTATUS</a> compile-time option.
+<li> An alternative page cache implementation is specified using
+<a href="#sqlite3_config">sqlite3_config</a>(<a href="#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a>,...).
+<li> The page cache allocates from its own memory pool supplied
+by <a href="#sqlite3_config">sqlite3_config</a>(<a href="#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>,...) rather than
+from the heap.
+</ul></p>
+
+<p>The circumstances under which SQLite will enforce the heap limits may
+changes in future releases of SQLite.
+</p><hr><a name="sqlite3_initialize"></a>
+<h2>Initialize The SQLite Library</h2>
+</div>
+<blockquote><pre>
+int sqlite3_initialize(void);
+int sqlite3_shutdown(void);
+int sqlite3_os_init(void);
+int sqlite3_os_end(void);
+</pre></blockquote>
+<p>
+The sqlite3_initialize() routine initializes the
+SQLite library. The sqlite3_shutdown() routine
+deallocates any resources that were allocated by sqlite3_initialize().
+These routines are designed to aid in process initialization and
+shutdown on embedded systems. Workstation applications using
+SQLite normally do not need to invoke either of these routines.</p>
+
+<p>A call to sqlite3_initialize() is an "effective" call if it is
+the first time sqlite3_initialize() is invoked during the lifetime of
+the process, or if it is the first time sqlite3_initialize() is invoked
+following a call to sqlite3_shutdown(). Only an effective call
+of sqlite3_initialize() does any initialization. All other calls
+are harmless no-ops.</p>
+
+<p>A call to sqlite3_shutdown() is an "effective" call if it is the first
+call to sqlite3_shutdown() since the last sqlite3_initialize(). Only
+an effective call to sqlite3_shutdown() does any deinitialization.
+All other valid calls to sqlite3_shutdown() are harmless no-ops.</p>
+
+<p>The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown()
+is not. The sqlite3_shutdown() interface must only be called from a
+single thread. All open <a href="#sqlite3">database connections</a> must be closed and all
+other SQLite resources must be deallocated prior to invoking
+sqlite3_shutdown().</p>
+
+<p>Among other things, sqlite3_initialize() will invoke
+sqlite3_os_init(). Similarly, sqlite3_shutdown()
+will invoke sqlite3_os_end().</p>
+
+<p>The sqlite3_initialize() routine returns <a href="#SQLITE_ABORT">SQLITE_OK</a> on success.
+If for some reason, sqlite3_initialize() is unable to initialize
+the library (perhaps it is unable to allocate a needed resource such
+as a mutex) it returns an <a href="rescode.html">error code</a> other than <a href="#SQLITE_ABORT">SQLITE_OK</a>.</p>
+
+<p>The sqlite3_initialize() routine is called internally by many other
+SQLite interfaces so that an application usually does not need to
+invoke sqlite3_initialize() directly. For example, <a href="#sqlite3_open">sqlite3_open()</a>
+calls sqlite3_initialize() so the SQLite library will be automatically
+initialized when <a href="#sqlite3_open">sqlite3_open()</a> is called if it has not be initialized
+already. However, if SQLite is compiled with the <a href="compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a>
+compile-time option, then the automatic calls to sqlite3_initialize()
+are omitted and the application must call sqlite3_initialize() directly
+prior to using any other SQLite interface. For maximum portability,
+it is recommended that applications always invoke sqlite3_initialize()
+directly prior to using any other SQLite interface. Future releases
+of SQLite may require this. In other words, the behavior exhibited
+when SQLite is compiled with <a href="compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a> might become the
+default behavior in some future release of SQLite.</p>
+
+<p>The sqlite3_os_init() routine does operating-system specific
+initialization of the SQLite library. The sqlite3_os_end()
+routine undoes the effect of sqlite3_os_init(). Typical tasks
+performed by these routines include allocation or deallocation
+of static resources, initialization of global variables,
+setting up a default <a href="#sqlite3_vfs">sqlite3_vfs</a> module, or setting up
+a default configuration using <a href="#sqlite3_config">sqlite3_config()</a>.</p>
+
+<p>The application should never invoke either sqlite3_os_init()
+or sqlite3_os_end() directly. The application should only invoke
+sqlite3_initialize() and sqlite3_shutdown(). The sqlite3_os_init()
+interface is called automatically by sqlite3_initialize() and
+sqlite3_os_end() is called by sqlite3_shutdown(). Appropriate
+implementations for sqlite3_os_init() and sqlite3_os_end()
+are built into SQLite when it is compiled for Unix, Windows, or OS/2.
+When <a href="custombuild.html">built for other platforms</a>
+(using the <a href="compile.html#os_other">SQLITE_OS_OTHER=1</a> compile-time
+option) the application must supply a suitable implementation for
+sqlite3_os_init() and sqlite3_os_end(). An application-supplied
+implementation of sqlite3_os_init() or sqlite3_os_end()
+must return <a href="#SQLITE_ABORT">SQLITE_OK</a> on success and some other <a href="rescode.html">error code</a> upon
+failure.
+</p><hr><a name="sqlite3_keyword_check"></a>
+<h2>SQL Keyword Checking</h2>
+</div>
+<blockquote><pre>
+int sqlite3_keyword_count(void);
+int sqlite3_keyword_name(int,const char**,int*);
+int sqlite3_keyword_check(const char*,int);
+</pre></blockquote>
+<p>
+These routines provide access to the set of SQL language keywords
+recognized by SQLite. Applications can uses these routines to determine
+whether or not a specific identifier needs to be escaped (for example,
+by enclosing in double-quotes) so as not to confuse the parser.</p>
+
+<p>The sqlite3_keyword_count() interface returns the number of distinct
+keywords understood by SQLite.</p>
+
+<p>The sqlite3_keyword_name(N,Z,L) interface finds the N-th keyword and
+makes *Z point to that keyword expressed as UTF8 and writes the number
+of bytes in the keyword into *L. The string that *Z points to is not
+zero-terminated. The sqlite3_keyword_name(N,Z,L) routine returns
+SQLITE_OK if N is within bounds and SQLITE_ERROR if not. If either Z
+or L are NULL or invalid pointers then calls to
+sqlite3_keyword_name(N,Z,L) result in undefined behavior.</p>
+
+<p>The sqlite3_keyword_check(Z,L) interface checks to see whether or not
+the L-byte UTF8 identifier that Z points to is a keyword, returning non-zero
+if it is and zero if not.</p>
+
+<p>The parser used by SQLite is forgiving. It is often possible to use
+a keyword as an identifier as long as such use does not result in a
+parsing ambiguity. For example, the statement
+"CREATE TABLE BEGIN(REPLACE,PRAGMA,END);" is accepted by SQLite, and
+creates a new table named "BEGIN" with three columns named
+"REPLACE", "PRAGMA", and "END". Nevertheless, best practice is to avoid
+using keywords as identifiers. Common techniques used to avoid keyword
+name collisions include:
+<ul>
+<li> Put all identifier names inside double-quotes. This is the official
+SQL way to escape identifier names.
+<li> Put identifier names inside &#91;...&#93;. This is not standard SQL,
+but it is what SQL Server does and so lots of programmers use this
+technique.
+<li> Begin every identifier with the letter "Z" as no SQL keywords start
+with "Z".
+<li> Include a digit somewhere in every identifier name.
+</ul></p>
+
+<p>Note that the number of keywords understood by SQLite can depend on
+compile-time options. For example, "VACUUM" is not a keyword if
+SQLite is compiled with the <a href="compile.html#omit_vacuum">-DSQLITE_OMIT_VACUUM</a> option. Also,
+new keywords may be added to future releases of SQLite.
+</p><hr><a name="sqlite3_libversion"></a>
+<h2>Run-Time Library Version Numbers</h2>
+</div>
+<blockquote><pre>
+SQLITE_EXTERN const char sqlite3_version[];
+const char *sqlite3_libversion(void);
+const char *sqlite3_sourceid(void);
+int sqlite3_libversion_number(void);
+</pre></blockquote>
+<p>
+These interfaces provide the same information as the <a href="#SQLITE_SOURCE_ID">SQLITE_VERSION</a>,
+<a href="#SQLITE_SOURCE_ID">SQLITE_VERSION_NUMBER</a>, and <a href="#SQLITE_SOURCE_ID">SQLITE_SOURCE_ID</a> C preprocessor macros
+but are associated with the library instead of the header file. Cautious
+programmers might include assert() statements in their application to
+verify that values returned by these interfaces match the macros in
+the header, and thus ensure that the application is
+compiled with matching library and header files.</p>
+
+<p><blockquote><pre>
+assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
+assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 );
+assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
+</pre></blockquote></p>
+
+<p>The sqlite3_version[] string constant contains the text of <a href="#SQLITE_SOURCE_ID">SQLITE_VERSION</a>
+macro. The sqlite3_libversion() function returns a pointer to the
+to the sqlite3_version[] string constant. The sqlite3_libversion()
+function is provided for use in DLLs since DLL users usually do not have
+direct access to string constants within the DLL. The
+sqlite3_libversion_number() function returns an integer equal to
+<a href="#SQLITE_SOURCE_ID">SQLITE_VERSION_NUMBER</a>. The sqlite3_sourceid() function returns
+a pointer to a string constant whose value is the same as the
+<a href="#SQLITE_SOURCE_ID">SQLITE_SOURCE_ID</a> C preprocessor macro. Except if SQLite is built
+using an edited copy of <a href="amalgamation.html">the amalgamation</a>, then the last four characters
+of the hash might be different from <a href="#SQLITE_SOURCE_ID">SQLITE_SOURCE_ID</a>.</p>
+
+<p>See also: <a href="lang_corefunc.html#sqlite_version">sqlite_version()</a> and <a href="lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a>.
+</p><hr><a name="sqlite3_memory_highwater"></a>
+<h2>Memory Allocator Statistics</h2>
+</div>
+<blockquote><pre>
+sqlite3_int64 sqlite3_memory_used(void);
+sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
+</pre></blockquote>
+<p>
+SQLite provides these two interfaces for reporting on the status
+of the <a href="#sqlite3_free">sqlite3_malloc()</a>, <a href="#sqlite3_free">sqlite3_free()</a>, and <a href="#sqlite3_free">sqlite3_realloc()</a>
+routines, which form the built-in memory allocation subsystem.</p>
+
+<p>The <a href="#sqlite3_memory_highwater">sqlite3_memory_used()</a> routine returns the number of bytes
+of memory currently outstanding (malloced but not freed).
+The <a href="#sqlite3_memory_highwater">sqlite3_memory_highwater()</a> routine returns the maximum
+value of <a href="#sqlite3_memory_highwater">sqlite3_memory_used()</a> since the high-water mark
+was last reset. The values returned by <a href="#sqlite3_memory_highwater">sqlite3_memory_used()</a> and
+<a href="#sqlite3_memory_highwater">sqlite3_memory_highwater()</a> include any overhead
+added by SQLite in its implementation of <a href="#sqlite3_free">sqlite3_malloc()</a>,
+but not overhead added by the any underlying system library
+routines that <a href="#sqlite3_free">sqlite3_malloc()</a> may call.</p>
+
+<p>The memory high-water mark is reset to the current value of
+<a href="#sqlite3_memory_highwater">sqlite3_memory_used()</a> if and only if the parameter to
+<a href="#sqlite3_memory_highwater">sqlite3_memory_highwater()</a> is true. The value returned
+by <a href="#sqlite3_memory_highwater">sqlite3_memory_highwater(1)</a> is the high-water mark
+prior to the reset.
+</p><hr><a name="sqlite3_mprintf"></a>
+<h2>Formatted String Printing Functions</h2>
+</div>
+<blockquote><pre>
+char *sqlite3_mprintf(const char*,...);
+char *sqlite3_vmprintf(const char*, va_list);
+char *sqlite3_snprintf(int,char*,const char*, ...);
+char *sqlite3_vsnprintf(int,char*,const char*, va_list);
+</pre></blockquote>
+<p>
+These routines are work-alikes of the "printf()" family of functions
+from the standard C library.
+These routines understand most of the common formatting options from
+the standard library printf()
+plus some additional non-standard formats (<a href="printf.html#percentq">%q</a>, <a href="printf.html#percentq">%Q</a>, <a href="printf.html#percentw">%w</a>, and <a href="printf.html#percentz">%z</a>).
+See the <a href="printf.html">built-in printf()</a> documentation for details.</p>
+
+<p>The sqlite3_mprintf() and sqlite3_vmprintf() routines write their
+results into memory obtained from <a href="#sqlite3_free">sqlite3_malloc64()</a>.
+The strings returned by these two routines should be
+released by <a href="#sqlite3_free">sqlite3_free()</a>. Both routines return a
+NULL pointer if <a href="#sqlite3_free">sqlite3_malloc64()</a> is unable to allocate enough
+memory to hold the resulting string.</p>
+
+<p>The sqlite3_snprintf() routine is similar to "snprintf()" from
+the standard C library. The result is written into the
+buffer supplied as the second parameter whose size is given by
+the first parameter. Note that the order of the
+first two parameters is reversed from snprintf(). This is an
+historical accident that cannot be fixed without breaking
+backwards compatibility. Note also that sqlite3_snprintf()
+returns a pointer to its buffer instead of the number of
+characters actually written into the buffer. We admit that
+the number of characters written would be a more useful return
+value but we cannot change the implementation of sqlite3_snprintf()
+now without breaking compatibility.</p>
+
+<p>As long as the buffer size is greater than zero, sqlite3_snprintf()
+guarantees that the buffer is always zero-terminated. The first
+parameter "n" is the total size of the buffer, including space for
+the zero terminator. So the longest string that can be completely
+written will be n-1 characters.</p>
+
+<p>The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf().</p>
+
+<p>See also: <a href="printf.html">built-in printf()</a>, <a href="lang_corefunc.html#printf">printf() SQL function</a>
+</p><hr><a name="sqlite3_mutex_alloc"></a>
+<h2>Mutexes</h2>
+</div>
+<blockquote><pre>
+sqlite3_mutex *sqlite3_mutex_alloc(int);
+void sqlite3_mutex_free(sqlite3_mutex*);
+void sqlite3_mutex_enter(sqlite3_mutex*);
+int sqlite3_mutex_try(sqlite3_mutex*);
+void sqlite3_mutex_leave(sqlite3_mutex*);
+</pre></blockquote>
+<p>
+The SQLite core uses these routines for thread
+synchronization. Though they are intended for internal
+use by SQLite, code that links against SQLite is
+permitted to use any of these routines.</p>
+
+<p>The SQLite source code contains multiple implementations
+of these mutex routines. An appropriate implementation
+is selected automatically at compile-time. The following
+implementations are available in the SQLite core:</p>
+
+<p><ul>
+<li> SQLITE_MUTEX_PTHREADS
+<li> SQLITE_MUTEX_W32
+<li> SQLITE_MUTEX_NOOP
+</ul></p>
+
+<p>The SQLITE_MUTEX_NOOP implementation is a set of routines
+that does no real locking and is appropriate for use in
+a single-threaded application. The SQLITE_MUTEX_PTHREADS and
+SQLITE_MUTEX_W32 implementations are appropriate for use on Unix
+and Windows.</p>
+
+<p>If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
+macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
+implementation is included with the library. In this case the
+application must supply a custom mutex implementation using the
+<a href="#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> option of the sqlite3_config() function
+before calling sqlite3_initialize() or any other public sqlite3_
+function that calls sqlite3_initialize().</p>
+
+<p>The sqlite3_mutex_alloc() routine allocates a new
+mutex and returns a pointer to it. The sqlite3_mutex_alloc()
+routine returns NULL if it is unable to allocate the requested
+mutex. The argument to sqlite3_mutex_alloc() must one of these
+integer constants:</p>
+
+<p><ul>
+<li> SQLITE_MUTEX_FAST
+<li> SQLITE_MUTEX_RECURSIVE
+<li> SQLITE_MUTEX_STATIC_MAIN
+<li> SQLITE_MUTEX_STATIC_MEM
+<li> SQLITE_MUTEX_STATIC_OPEN
+<li> SQLITE_MUTEX_STATIC_PRNG
+<li> SQLITE_MUTEX_STATIC_LRU
+<li> SQLITE_MUTEX_STATIC_PMEM
+<li> SQLITE_MUTEX_STATIC_APP1
+<li> SQLITE_MUTEX_STATIC_APP2
+<li> SQLITE_MUTEX_STATIC_APP3
+<li> SQLITE_MUTEX_STATIC_VFS1
+<li> SQLITE_MUTEX_STATIC_VFS2
+<li> SQLITE_MUTEX_STATIC_VFS3
+</ul></p>
+
+<p>The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
+cause sqlite3_mutex_alloc() to create
+a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
+is used but not necessarily so when SQLITE_MUTEX_FAST is used.
+The mutex implementation does not need to make a distinction
+between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
+not want to. SQLite will only request a recursive mutex in
+cases where it really needs one. If a faster non-recursive mutex
+implementation is available on the host platform, the mutex subsystem
+might return such a mutex in response to SQLITE_MUTEX_FAST.</p>
+
+<p>The other allowed parameters to sqlite3_mutex_alloc() (anything other
+than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
+a pointer to a static preexisting mutex. Nine static mutexes are
+used by the current version of SQLite. Future versions of SQLite
+may add additional static mutexes. Static mutexes are for internal
+use by SQLite only. Applications that use SQLite mutexes should
+use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
+SQLITE_MUTEX_RECURSIVE.</p>
+
+<p>Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
+or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
+returns a different mutex on every call. For the static
+mutex types, the same mutex is returned on every call that has
+the same type number.</p>
+
+<p>The sqlite3_mutex_free() routine deallocates a previously
+allocated dynamic mutex. Attempting to deallocate a static
+mutex results in undefined behavior.</p>
+
+<p>The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
+to enter a mutex. If another thread is already within the mutex,
+sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
+SQLITE_BUSY. The sqlite3_mutex_try() interface returns <a href="#SQLITE_ABORT">SQLITE_OK</a>
+upon successful entry. Mutexes created using
+SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
+In such cases, the
+mutex must be exited an equal number of times before another thread
+can enter. If the same thread tries to enter any mutex other
+than an SQLITE_MUTEX_RECURSIVE more than once, the behavior is undefined.</p>
+
+<p>Some systems (for example, Windows 95) do not support the operation
+implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try()
+will always return SQLITE_BUSY. The SQLite core only ever uses
+sqlite3_mutex_try() as an optimization so this is acceptable
+behavior.</p>
+
+<p>The sqlite3_mutex_leave() routine exits a mutex that was
+previously entered by the same thread. The behavior
+is undefined if the mutex is not currently entered by the
+calling thread or is not currently allocated.</p>
+
+<p>If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
+sqlite3_mutex_leave() is a NULL pointer, then all three routines
+behave as no-ops.</p>
+
+<p>See also: <a href="#sqlite3_mutex_held">sqlite3_mutex_held()</a> and <a href="#sqlite3_mutex_held">sqlite3_mutex_notheld()</a>.
+</p><hr><a name="sqlite3_mutex_held"></a>
+<h2>Mutex Verification Routines</h2>
+</div>
+<blockquote><pre>
+#ifndef NDEBUG
+int sqlite3_mutex_held(sqlite3_mutex*);
+int sqlite3_mutex_notheld(sqlite3_mutex*);
+#endif
+</pre></blockquote>
+<p>
+The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
+are intended for use inside assert() statements. The SQLite core
+never uses these routines except inside an assert() and applications
+are advised to follow the lead of the core. The SQLite core only
+provides implementations for these routines when it is compiled
+with the SQLITE_DEBUG flag. External mutex implementations
+are only required to provide these routines if SQLITE_DEBUG is
+defined and if NDEBUG is not defined.</p>
+
+<p>These routines should return true if the mutex in their argument
+is held or not held, respectively, by the calling thread.</p>
+
+<p>The implementation is not required to provide versions of these
+routines that actually work. If the implementation does not provide working
+versions of these routines, it should at least provide stubs that always
+return true so that one does not get spurious assertion failures.</p>
+
+<p>If the argument to sqlite3_mutex_held() is a NULL pointer then
+the routine should return 1. This seems counter-intuitive since
+clearly the mutex cannot be held if it does not exist. But
+the reason the mutex does not exist is because the build is not
+using mutexes. And we do not want the assert() containing the
+call to sqlite3_mutex_held() to fail, so a non-zero return is
+the appropriate thing to do. The sqlite3_mutex_notheld()
+interface should also return 1 when given a NULL pointer.
+</p><hr><a name="sqlite3_open"></a>
+<h2>Opening A New Database Connection</h2>
+</div>
+<blockquote><pre>
+int sqlite3_open(
+ const char *filename, /* Database filename (UTF-8) */
+ sqlite3 **ppDb /* OUT: SQLite db handle */
+);
+int sqlite3_open16(
+ const void *filename, /* Database filename (UTF-16) */
+ sqlite3 **ppDb /* OUT: SQLite db handle */
+);
+int sqlite3_open_v2(
+ const char *filename, /* Database filename (UTF-8) */
+ sqlite3 **ppDb, /* OUT: SQLite db handle */
+ int flags, /* Flags */
+ const char *zVfs /* Name of VFS module to use */
+);
+</pre></blockquote>
+<p>
+These routines open an SQLite database file as specified by the
+filename argument. The filename argument is interpreted as UTF-8 for
+sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
+order for sqlite3_open16(). A <a href="#sqlite3">database connection</a> handle is usually
+returned in *ppDb, even if an error occurs. The only exception is that
+if SQLite is unable to allocate memory to hold the <a href="#sqlite3">sqlite3</a> object,
+a NULL will be written into *ppDb instead of a pointer to the <a href="#sqlite3">sqlite3</a>
+object. If the database is opened (and/or created) successfully, then
+<a href="#SQLITE_ABORT">SQLITE_OK</a> is returned. Otherwise an <a href="rescode.html">error code</a> is returned. The
+<a href="#sqlite3_errcode">sqlite3_errmsg()</a> or <a href="#sqlite3_errcode">sqlite3_errmsg16()</a> routines can be used to obtain
+an English language description of the error following a failure of any
+of the sqlite3_open() routines.</p>
+
+<p>The default encoding will be UTF-8 for databases created using
+sqlite3_open() or sqlite3_open_v2(). The default encoding for databases
+created using sqlite3_open16() will be UTF-16 in the native byte order.</p>
+
+<p>Whether or not an error occurs when it is opened, resources
+associated with the <a href="#sqlite3">database connection</a> handle should be released by
+passing it to <a href="#sqlite3_close">sqlite3_close()</a> when it is no longer required.</p>
+
+<p>The sqlite3_open_v2() interface works like sqlite3_open()
+except that it accepts two additional parameters for additional control
+over the new database connection. The flags parameter to
+sqlite3_open_v2() must include, at a minimum, one of the following
+three flag combinations:</p>
+
+<p><dl>
+<dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_READONLY</a></dt>
+<dd>The database is opened in read-only mode. If the database does not
+already exist, an error is returned.</dd></p>
+
+<p><dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_READWRITE</a></dt>
+<dd>The database is opened for reading and writing if possible, or reading
+only if the file is write protected by the operating system. In either
+case the database must already exist, otherwise an error is returned.</dd></p>
+
+<p><dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_READWRITE</a> | <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_CREATE</a></dt>
+<dd>The database is opened for reading and writing, and is created if
+it does not already exist. This is the behavior that is always used for
+sqlite3_open() and sqlite3_open16().</dd>
+</dl></p>
+
+<p>In addition to the required flags, the following optional flags are
+also supported:</p>
+
+<p><dl>
+<dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_URI</a></dt>
+<dd>The filename can be interpreted as a URI if this flag is set.</dd></p>
+
+<p><dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_MEMORY</a></dt>
+<dd>The database will be opened as an in-memory database. The database
+is named by the "filename" argument for the purposes of cache-sharing,
+if shared cache mode is enabled, but the "filename" is otherwise ignored.
+</dd></p>
+
+<p><dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_NOMUTEX</a></dt>
+<dd>The new database connection will use the "multi-thread"
+<a href="threadsafe.html">threading mode</a>. This means that separate threads are allowed
+to use SQLite at the same time, as long as each thread is using
+a different <a href="#sqlite3">database connection</a>.</p>
+
+<p><dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_FULLMUTEX</a></dt>
+<dd>The new database connection will use the "serialized"
+<a href="threadsafe.html">threading mode</a>. This means the multiple threads can safely
+attempt to use the same database connection at the same time.
+(Mutexes will block any actual concurrency, but in this mode
+there is no harm in trying.)</p>
+
+<p><dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_SHAREDCACHE</a></dt>
+<dd>The database is opened <a href="sharedcache.html">shared cache</a> enabled, overriding
+the default shared cache setting provided by
+<a href="#sqlite3_enable_shared_cache">sqlite3_enable_shared_cache()</a>.
+The <a href="sharedcache.html#dontuse">use of shared cache mode is discouraged</a> and hence shared cache
+capabilities may be omitted from many builds of SQLite. In such cases,
+this option is a no-op.</p>
+
+<p><dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_PRIVATECACHE</a></dt>
+<dd>The database is opened <a href="sharedcache.html">shared cache</a> disabled, overriding
+the default shared cache setting provided by
+<a href="#sqlite3_enable_shared_cache">sqlite3_enable_shared_cache()</a>.</p>
+
+<p><a name="openexrescode"></a>
+ <dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_EXRESCODE</a></dt>
+<dd>The database connection comes up in "extended result code mode".
+In other words, the database behaves has if
+<a href="#sqlite3_extended_result_codes">sqlite3_extended_result_codes(db,1)</a> where called on the database
+connection as soon as the connection is created. In addition to setting
+the extended result code mode, this flag also causes <a href="#sqlite3_open">sqlite3_open_v2()</a>
+to return an extended result code.</dd></p>
+
+<p><a name="opennofollow"></a>
+ <dt><a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_NOFOLLOW</a></dt>
+<dd>The database filename is not allowed to contain a symbolic link</dd>
+</dl></p>
+
+<p>If the 3rd parameter to sqlite3_open_v2() is not one of the
+required combinations shown above optionally combined with other
+<a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_* bits</a>
+then the behavior is undefined. Historic versions of SQLite
+have silently ignored surplus bits in the flags parameter to
+sqlite3_open_v2(), however that behavior might not be carried through
+into future versions of SQLite and so applications should not rely
+upon it. Note in particular that the SQLITE_OPEN_EXCLUSIVE flag is a no-op
+for sqlite3_open_v2(). The SQLITE_OPEN_EXCLUSIVE does *not* cause
+the open to fail if the database already exists. The SQLITE_OPEN_EXCLUSIVE
+flag is intended for use by the <a href="#sqlite3_vfs">VFS interface</a> only, and not
+by sqlite3_open_v2().</p>
+
+<p>The fourth parameter to sqlite3_open_v2() is the name of the
+<a href="#sqlite3_vfs">sqlite3_vfs</a> object that defines the operating system interface that
+the new database connection should use. If the fourth parameter is
+a NULL pointer then the default <a href="#sqlite3_vfs">sqlite3_vfs</a> object is used.</p>
+
+<p>If the filename is ":memory:", then a private, temporary in-memory database
+is created for the connection. This in-memory database will vanish when
+the database connection is closed. Future versions of SQLite might
+make use of additional special filenames that begin with the ":" character.
+It is recommended that when a database filename actually does begin with
+a ":" character you should prefix the filename with a pathname such as
+"./" to avoid ambiguity.</p>
+
+<p>If the filename is an empty string, then a private, temporary
+on-disk database will be created. This private database will be
+automatically deleted as soon as the database connection is closed.</p>
+
+<p><a name="urifilenamesinsqlite3open"></a>
+ <h3>URI Filenames</h3></p>
+
+<p>If <a href="uri.html">URI filename</a> interpretation is enabled, and the filename argument
+begins with "file:", then the filename is interpreted as a URI. URI
+filename interpretation is enabled if the <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_URI</a> flag is
+set in the third argument to sqlite3_open_v2(), or if it has
+been enabled globally using the <a href="#sqliteconfiguri">SQLITE_CONFIG_URI</a> option with the
+<a href="#sqlite3_config">sqlite3_config()</a> method or by the <a href="compile.html#use_uri">SQLITE_USE_URI</a> compile-time option.
+URI filename interpretation is turned off
+by default, but future releases of SQLite might enable URI filename
+interpretation by default. See "<a href="uri.html">URI filenames</a>" for additional
+information.</p>
+
+<p>URI filenames are parsed according to RFC 3986. If the URI contains an
+authority, then it must be either an empty string or the string
+"localhost". If the authority is not an empty string or "localhost", an
+error is returned to the caller. The fragment component of a URI, if
+present, is ignored.</p>
+
+<p>SQLite uses the path component of the URI as the name of the disk file
+which contains the database. If the path begins with a '/' character,
+then it is interpreted as an absolute path. If the path does not begin
+with a '/' (meaning that the authority section is omitted from the URI)
+then the path is interpreted as a relative path.
+On windows, the first component of an absolute path
+is a drive specification (e.g. "C:").</p>
+
+<p><a name="coreuriqueryparameters"></a>
+
+The query component of a URI may contain parameters that are interpreted
+either by SQLite itself, or by a <a href="vfs.html">custom VFS implementation</a>.
+SQLite and its built-in <a href="vfs.html">VFSes</a> interpret the
+following query parameters:</p>
+
+<p><ul>
+<li> <b>vfs</b>: The "vfs" parameter may be used to specify the name of
+a VFS object that provides the operating system interface that should
+be used to access the database file on disk. If this option is set to
+an empty string the default VFS object is used. Specifying an unknown
+VFS is an error. If sqlite3_open_v2() is used and the vfs option is
+present, then the VFS specified by the option takes precedence over
+the value passed as the fourth parameter to sqlite3_open_v2().</p>
+
+<p><li> <b>mode</b>: The mode parameter may be set to either "ro", "rw",
+"rwc", or "memory". Attempting to set it to any other value is
+an error.
+If "ro" is specified, then the database is opened for read-only
+access, just as if the <a href="#SQLITE_OPEN_AUTOPROXY">SQLITE_OPEN_READONLY</a> flag had been set in the
+third argument to sqlite3_open_v2(). If the mode option is set to
+"rw", then the database is opened for read-write (but not create)
+access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had
+been set. Value "rwc" is equivalent to setting both
+SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE. If the mode option is
+set to "memory" then a pure <a href="inmemorydb.html">in-memory database</a> that never reads
+or writes from disk is used. It is an error to specify a value for
+the mode parameter that is less restrictive than that specified by
+the flags passed in the third parameter to sqlite3_open_v2().</p>
+
+<p><li> <b>cache</b>: The cache parameter may be set to either "shared" or
+"private". Setting it to "shared" is equivalent to setting the
+SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to
+sqlite3_open_v2(). Setting the cache parameter to "private" is
+equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit.
+If sqlite3_open_v2() is used and the "cache" parameter is present in
+a URI filename, its value overrides any behavior requested by setting
+SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag.</p>
+
+<p><li> <b>psow</b>: The psow parameter indicates whether or not the
+<a href="psow.html">powersafe overwrite</a> property does or does not apply to the
+storage media on which the database file resides.</p>
+
+<p><li> <b>nolock</b>: The nolock parameter is a boolean query parameter
+which if set disables file locking in rollback journal modes. This
+is useful for accessing a database on a filesystem that does not
+support locking. Caution: Database corruption might result if two
+or more processes write to the same database and any one of those
+processes uses nolock=1.</p>
+
+<p><li> <b>immutable</b>: The immutable parameter is a boolean query
+parameter that indicates that the database file is stored on
+read-only media. When immutable is set, SQLite assumes that the
+database file cannot be changed, even by a process with higher
+privilege, and so the database is opened read-only and all locking
+and change detection is disabled. Caution: Setting the immutable
+property on a database file that does in fact change can result
+in incorrect query results and/or <a href="#SQLITE_ABORT">SQLITE_CORRUPT</a> errors.
+See also: <a href="#SQLITE_IOCAP_ATOMIC">SQLITE_IOCAP_IMMUTABLE</a>.</p>
+
+<p></ul></p>
+
+<p>Specifying an unknown parameter in the query component of a URI is not an
+error. Future versions of SQLite might understand additional query
+parameters. See "<a href="uri.html#coreqp">query parameters with special meaning to SQLite</a>" for
+additional information.</p>
+
+<p><a name="urifilenameexamples"></a>
+ <h3>URI filename examples</h3></p>
+
+<p><table border="1" align=center cellpadding=5>
+<tr><th> URI filenames <th> Results
+<tr><td> file:data.db <td>
+Open the file "data.db" in the current directory.
+<tr><td> file:/home/fred/data.db<br>
+file:///home/fred/data.db <br>
+file://localhost/home/fred/data.db <br> <td>
+Open the database file "/home/fred/data.db".
+<tr><td> file://darkstar/home/fred/data.db <td>
+An error. "darkstar" is not a recognized authority.
+<tr><td style="white-space:nowrap">
+file:///C:/Documents%20and%20Settings/fred/Desktop/data.db
+<td> Windows only: Open the file "data.db" on fred's desktop on drive
+C:. Note that the %20 escaping in this example is not strictly
+necessary - space characters can be used literally
+in URI filenames.
+<tr><td> file:data.db?mode=ro&cache=private <td>
+Open file "data.db" in the current directory for read-only access.
+Regardless of whether or not shared-cache mode is enabled by
+default, use a private cache.
+<tr><td> file:/home/fred/data.db?vfs=unix-dotfile <td>
+Open file "/home/fred/data.db". Use the special VFS "unix-dotfile"
+that uses dot-files in place of posix advisory locking.
+<tr><td> file:data.db?mode=readonly <td>
+An error. "readonly" is not a valid option for the "mode" parameter.
+Use "ro" instead: "file:data.db?mode=ro".
+</table></p>
+
+<p>URI hexadecimal escape sequences (%HH) are supported within the path and
+query components of a URI. A hexadecimal escape sequence consists of a
+percent sign - "%" - followed by exactly two hexadecimal digits
+specifying an octet value. Before the path or query components of a
+URI filename are interpreted, they are encoded using UTF-8 and all
+hexadecimal escape sequences replaced by a single byte containing the
+corresponding octet. If this process generates an invalid UTF-8 encoding,
+the results are undefined.</p>
+
+<p><b>Note to Windows users:</b> The encoding used for the filename argument
+of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever
+codepage is currently defined. Filenames containing international
+characters must be converted to UTF-8 prior to passing them into
+sqlite3_open() or sqlite3_open_v2().</p>
+
+<p><b>Note to Windows Runtime users:</b> The temporary directory must be set
+prior to calling sqlite3_open() or sqlite3_open_v2(). Otherwise, various
+features that require the use of temporary files may fail.</p>
+
+<p>See also: <a href="#sqlite3_temp_directory">sqlite3_temp_directory</a>
+</p><hr><a name="sqlite3_preupdate_blobwrite"></a>
+<h2>The pre-update hook.</h2>
+</div>
+<blockquote><pre>
+#if defined(SQLITE_ENABLE_PREUPDATE_HOOK)
+void *sqlite3_preupdate_hook(
+ sqlite3 *db,
+ void(*xPreUpdate)(
+ void *pCtx, /* Copy of third arg to preupdate_hook() */
+ sqlite3 *db, /* Database handle */
+ int op, /* SQLITE_UPDATE, DELETE or INSERT */
+ char const *zDb, /* Database name */
+ char const *zName, /* Table name */
+ sqlite3_int64 iKey1, /* Rowid of row about to be deleted/updated */
+ sqlite3_int64 iKey2 /* New rowid value (for a rowid UPDATE) */
+ ),
+ void*
+);
+int sqlite3_preupdate_old(sqlite3 *, int, sqlite3_value **);
+int sqlite3_preupdate_count(sqlite3 *);
+int sqlite3_preupdate_depth(sqlite3 *);
+int sqlite3_preupdate_new(sqlite3 *, int, sqlite3_value **);
+int sqlite3_preupdate_blobwrite(sqlite3 *);
+#endif
+</pre></blockquote>
+<p>
+These interfaces are only available if SQLite is compiled using the
+<a href="compile.html#enable_preupdate_hook">SQLITE_ENABLE_PREUPDATE_HOOK</a> compile-time option.</p>
+
+<p>The <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_hook()</a> interface registers a callback function
+that is invoked prior to each <a href="lang_insert.html">INSERT</a>, <a href="lang_update.html">UPDATE</a>, and <a href="lang_delete.html">DELETE</a> operation
+on a database table.
+At most one preupdate hook may be registered at a time on a single
+<a href="#sqlite3">database connection</a>; each call to <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_hook()</a> overrides
+the previous setting.
+The preupdate hook is disabled by invoking <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_hook()</a>
+with a NULL pointer as the second parameter.
+The third parameter to <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_hook()</a> is passed through as
+the first parameter to callbacks.</p>
+
+<p>The preupdate hook only fires for changes to real database tables; the
+preupdate hook is not invoked for changes to <a href="vtab.html">virtual tables</a> or to
+system tables like sqlite_sequence or sqlite_stat1.</p>
+
+<p>The second parameter to the preupdate callback is a pointer to
+the <a href="#sqlite3">database connection</a> that registered the preupdate hook.
+The third parameter to the preupdate callback is one of the constants
+<a href="#SQLITE_ALTER_TABLE">SQLITE_INSERT</a>, <a href="#SQLITE_ALTER_TABLE">SQLITE_DELETE</a>, or <a href="#SQLITE_ALTER_TABLE">SQLITE_UPDATE</a> to identify the
+kind of update operation that is about to occur.
+The fourth parameter to the preupdate callback is the name of the
+database within the database connection that is being modified. This
+will be "main" for the main database or "temp" for TEMP tables or
+the name given after the AS keyword in the <a href="lang_attach.html">ATTACH</a> statement for attached
+databases.
+The fifth parameter to the preupdate callback is the name of the
+table that is being modified.</p>
+
+<p>For an UPDATE or DELETE operation on a <a href="rowidtable.html">rowid table</a>, the sixth
+parameter passed to the preupdate callback is the initial <a href="lang_createtable.html#rowid">rowid</a> of the
+row being modified or deleted. For an INSERT operation on a rowid table,
+or any operation on a WITHOUT ROWID table, the value of the sixth
+parameter is undefined. For an INSERT or UPDATE on a rowid table the
+seventh parameter is the final rowid value of the row being inserted
+or updated. The value of the seventh parameter passed to the callback
+function is not defined for operations on WITHOUT ROWID tables, or for
+DELETE operations on rowid tables.</p>
+
+<p>The <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_old()</a>, <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_new()</a>,
+<a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_count()</a>, and <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_depth()</a> interfaces
+provide additional information about a preupdate event. These routines
+may only be called from within a preupdate callback. Invoking any of
+these routines from outside of a preupdate callback or with a
+<a href="#sqlite3">database connection</a> pointer that is different from the one supplied
+to the preupdate callback results in undefined and probably undesirable
+behavior.</p>
+
+<p>The <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_count(D)</a> interface returns the number of columns
+in the row that is being inserted, updated, or deleted.</p>
+
+<p>The <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_old(D,N,P)</a> interface writes into P a pointer to
+a <a href="#sqlite3_value">protected sqlite3_value</a> that contains the value of the Nth column of
+the table row before it is updated. The N parameter must be between 0
+and one less than the number of columns or the behavior will be
+undefined. This must only be used within SQLITE_UPDATE and SQLITE_DELETE
+preupdate callbacks; if it is used by an SQLITE_INSERT callback then the
+behavior is undefined. The <a href="#sqlite3_value">sqlite3_value</a> that P points to
+will be destroyed when the preupdate callback returns.</p>
+
+<p>The <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_new(D,N,P)</a> interface writes into P a pointer to
+a <a href="#sqlite3_value">protected sqlite3_value</a> that contains the value of the Nth column of
+the table row after it is updated. The N parameter must be between 0
+and one less than the number of columns or the behavior will be
+undefined. This must only be used within SQLITE_INSERT and SQLITE_UPDATE
+preupdate callbacks; if it is used by an SQLITE_DELETE callback then the
+behavior is undefined. The <a href="#sqlite3_value">sqlite3_value</a> that P points to
+will be destroyed when the preupdate callback returns.</p>
+
+<p>The <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_depth(D)</a> interface returns 0 if the preupdate
+callback was invoked as a result of a direct insert, update, or delete
+operation; or 1 for inserts, updates, or deletes invoked by top-level
+triggers; or 2 for changes resulting from triggers called by top-level
+triggers; and so forth.</p>
+
+<p>When the <a href="#sqlite3_blob_write">sqlite3_blob_write()</a> API is used to update a blob column,
+the pre-update hook is invoked with SQLITE_DELETE. This is because the
+in this case the new values are not available. In this case, when a
+callback made with op==SQLITE_DELETE is actuall a write using the
+sqlite3_blob_write() API, the <a href="#sqlite3_preupdate_blobwrite">sqlite3_preupdate_blobwrite()</a> returns
+the index of the column being written. In other cases, where the
+pre-update hook is being invoked for some other reason, including a
+regular DELETE, sqlite3_preupdate_blobwrite() returns -1.</p>
+
+<p>See also: <a href="#sqlite3_update_hook">sqlite3_update_hook()</a>
+</p><hr><a name="sqlite3_profile"></a>
+<h2>Tracing And Profiling Functions</h2>
+</div>
+<blockquote><pre>
+void *sqlite3_trace(sqlite3*,
+ void(*xTrace)(void*,const char*), void*);
+void *sqlite3_profile(sqlite3*,
+ void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
+</pre></blockquote>
+<p>
+These routines are deprecated. Use the <a href="#sqlite3_trace_v2">sqlite3_trace_v2()</a> interface
+instead of the routines described here.</p>
+
+<p>These routines register callback functions that can be used for
+tracing and profiling the execution of SQL statements.</p>
+
+<p>The callback function registered by sqlite3_trace() is invoked at
+various times when an SQL statement is being run by <a href="#sqlite3_step">sqlite3_step()</a>.
+The sqlite3_trace() callback is invoked with a UTF-8 rendering of the
+SQL statement text as the statement first begins executing.
+Additional sqlite3_trace() callbacks might occur
+as each triggered subprogram is entered. The callbacks for triggers
+contain a UTF-8 SQL comment that identifies the trigger.</p>
+
+<p>The <a href="compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> compile-time option can be used to limit
+the length of <a href="lang_expr.html#varparam">bound parameter</a> expansion in the output of sqlite3_trace().</p>
+
+<p>The callback function registered by sqlite3_profile() is invoked
+as each SQL statement finishes. The profile callback contains
+the original statement text and an estimate of wall-clock time
+of how long that statement took to run. The profile callback
+time is in units of nanoseconds, however the current implementation
+is only capable of millisecond resolution so the six least significant
+digits in the time are meaningless. Future versions of SQLite
+might provide greater resolution on the profiler callback. Invoking
+either <a href="#sqlite3_profile">sqlite3_trace()</a> or <a href="#sqlite3_trace_v2">sqlite3_trace_v2()</a> will cancel the
+profile callback.
+</p><hr><a name="sqlite3_result_blob"></a>
+<h2>Setting The Result Of An SQL Function</h2>
+</div>
+<blockquote><pre>
+void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
+void sqlite3_result_blob64(sqlite3_context*,const void*,
+ sqlite3_uint64,void(*)(void*));
+void sqlite3_result_double(sqlite3_context*, double);
+void sqlite3_result_error(sqlite3_context*, const char*, int);
+void sqlite3_result_error16(sqlite3_context*, const void*, int);
+void sqlite3_result_error_toobig(sqlite3_context*);
+void sqlite3_result_error_nomem(sqlite3_context*);
+void sqlite3_result_error_code(sqlite3_context*, int);
+void sqlite3_result_int(sqlite3_context*, int);
+void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
+void sqlite3_result_null(sqlite3_context*);
+void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
+void sqlite3_result_text64(sqlite3_context*, const char*,sqlite3_uint64,
+ void(*)(void*), unsigned char encoding);
+void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
+void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
+void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
+void sqlite3_result_value(sqlite3_context*, sqlite3_value*);
+void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*));
+void sqlite3_result_zeroblob(sqlite3_context*, int n);
+int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n);
+</pre></blockquote>
+<p>
+These routines are used by the xFunc or xFinal callbacks that
+implement SQL functions and aggregates. See
+<a href="#sqlite3_create_function">sqlite3_create_function()</a> and <a href="#sqlite3_create_function">sqlite3_create_function16()</a>
+for additional information.</p>
+
+<p>These functions work very much like the <a href="#sqlite3_bind_blob">parameter binding</a> family of
+functions used to bind values to host parameters in prepared statements.
+Refer to the <a href="#sqlite3_bind_blob">SQL parameter</a> documentation for additional information.</p>
+
+<p>The sqlite3_result_blob() interface sets the result from
+an application-defined function to be the BLOB whose content is pointed
+to by the second parameter and which is N bytes long where N is the
+third parameter.</p>
+
+<p>The sqlite3_result_zeroblob(C,N) and sqlite3_result_zeroblob64(C,N)
+interfaces set the result of the application-defined function to be
+a BLOB containing all zero bytes and N bytes in size.</p>
+
+<p>The sqlite3_result_double() interface sets the result from
+an application-defined function to be a floating point value specified
+by its 2nd argument.</p>
+
+<p>The sqlite3_result_error() and sqlite3_result_error16() functions
+cause the implemented SQL function to throw an exception.
+SQLite uses the string pointed to by the
+2nd parameter of sqlite3_result_error() or sqlite3_result_error16()
+as the text of an error message. SQLite interprets the error
+message string from sqlite3_result_error() as UTF-8. SQLite
+interprets the string from sqlite3_result_error16() as UTF-16 using
+the same <a href="#byteorderdeterminationrules">byte-order determination rules</a> as <a href="#sqlite3_bind_blob">sqlite3_bind_text16()</a>.
+If the third parameter to sqlite3_result_error()
+or sqlite3_result_error16() is negative then SQLite takes as the error
+message all text up through the first zero character.
+If the third parameter to sqlite3_result_error() or
+sqlite3_result_error16() is non-negative then SQLite takes that many
+bytes (not characters) from the 2nd parameter as the error message.
+The sqlite3_result_error() and sqlite3_result_error16()
+routines make a private copy of the error message text before
+they return. Hence, the calling function can deallocate or
+modify the text after they return without harm.
+The sqlite3_result_error_code() function changes the error code
+returned by SQLite as a result of an error in a function. By default,
+the error code is SQLITE_ERROR. A subsequent call to sqlite3_result_error()
+or sqlite3_result_error16() resets the error code to SQLITE_ERROR.</p>
+
+<p>The sqlite3_result_error_toobig() interface causes SQLite to throw an
+error indicating that a string or BLOB is too long to represent.</p>
+
+<p>The sqlite3_result_error_nomem() interface causes SQLite to throw an
+error indicating that a memory allocation failed.</p>
+
+<p>The sqlite3_result_int() interface sets the return value
+of the application-defined function to be the 32-bit signed integer
+value given in the 2nd argument.
+The sqlite3_result_int64() interface sets the return value
+of the application-defined function to be the 64-bit signed integer
+value given in the 2nd argument.</p>
+
+<p>The sqlite3_result_null() interface sets the return value
+of the application-defined function to be NULL.</p>
+
+<p>The sqlite3_result_text(), sqlite3_result_text16(),
+sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces
+set the return value of the application-defined function to be
+a text string which is represented as UTF-8, UTF-16 native byte order,
+UTF-16 little endian, or UTF-16 big endian, respectively.
+The sqlite3_result_text64() interface sets the return value of an
+application-defined function to be a text string in an encoding
+specified by the fifth (and last) parameter, which must be one
+of <a href="#SQLITE_ANY">SQLITE_UTF8</a>, <a href="#SQLITE_ANY">SQLITE_UTF16</a>, <a href="#SQLITE_ANY">SQLITE_UTF16BE</a>, or <a href="#SQLITE_ANY">SQLITE_UTF16LE</a>.
+SQLite takes the text result from the application from
+the 2nd parameter of the sqlite3_result_text* interfaces.
+If the 3rd parameter to any of the sqlite3_result_text* interfaces
+other than sqlite3_result_text64() is negative, then SQLite computes
+the string length itself by searching the 2nd parameter for the first
+zero character.
+If the 3rd parameter to the sqlite3_result_text* interfaces
+is non-negative, then as many bytes (not characters) of the text
+pointed to by the 2nd parameter are taken as the application-defined
+function result. If the 3rd parameter is non-negative, then it
+must be the byte offset into the string where the NUL terminator would
+appear if the string where NUL terminated. If any NUL characters occur
+in the string at a byte offset that is less than the value of the 3rd
+parameter, then the resulting string will contain embedded NULs and the
+result of expressions operating on strings with embedded NULs is undefined.
+If the 4th parameter to the sqlite3_result_text* interfaces
+or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that
+function as the destructor on the text or BLOB result when it has
+finished using that result.
+If the 4th parameter to the sqlite3_result_text* interfaces or to
+sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite
+assumes that the text or BLOB result is in constant space and does not
+copy the content of the parameter nor call a destructor on the content
+when it has finished using that result.
+If the 4th parameter to the sqlite3_result_text* interfaces
+or sqlite3_result_blob is the special constant SQLITE_TRANSIENT
+then SQLite makes a copy of the result into space obtained
+from <a href="#sqlite3_free">sqlite3_malloc()</a> before it returns.</p>
+
+<p>For the sqlite3_result_text16(), sqlite3_result_text16le(), and
+sqlite3_result_text16be() routines, and for sqlite3_result_text64()
+when the encoding is not UTF8, if the input UTF16 begins with a
+byte-order mark (BOM, U+FEFF) then the BOM is removed from the
+string and the rest of the string is interpreted according to the
+byte-order specified by the BOM. The byte-order specified by
+the BOM at the beginning of the text overrides the byte-order
+specified by the interface procedure. So, for example, if
+sqlite3_result_text16le() is invoked with text that begins
+with bytes 0xfe, 0xff (a big-endian byte-order mark) then the
+first two bytes of input are skipped and the remaining input
+is interpreted as UTF16BE text.</p>
+
+<p>For UTF16 input text to the sqlite3_result_text16(),
+sqlite3_result_text16be(), sqlite3_result_text16le(), and
+sqlite3_result_text64() routines, if the text contains invalid
+UTF16 characters, the invalid characters might be converted
+into the unicode replacement character, U+FFFD.</p>
+
+<p>The sqlite3_result_value() interface sets the result of
+the application-defined function to be a copy of the
+<a href="#sqlite3_value">unprotected sqlite3_value</a> object specified by the 2nd parameter. The
+sqlite3_result_value() interface makes a copy of the <a href="#sqlite3_value">sqlite3_value</a>
+so that the <a href="#sqlite3_value">sqlite3_value</a> specified in the parameter may change or
+be deallocated after sqlite3_result_value() returns without harm.
+A <a href="#sqlite3_value">protected sqlite3_value</a> object may always be used where an
+<a href="#sqlite3_value">unprotected sqlite3_value</a> object is required, so either
+kind of <a href="#sqlite3_value">sqlite3_value</a> object can be used with this interface.</p>
+
+<p>The sqlite3_result_pointer(C,P,T,D) interface sets the result to an
+SQL NULL value, just like <a href="#sqlite3_result_blob">sqlite3_result_null(C)</a>, except that it
+also associates the host-language pointer P or type T with that
+NULL value such that the pointer can be retrieved within an
+<a href="appfunc.html">application-defined SQL function</a> using <a href="#sqlite3_value_blob">sqlite3_value_pointer()</a>.
+If the D parameter is not NULL, then it is a pointer to a destructor
+for the P parameter. SQLite invokes D with P as its only argument
+when SQLite is finished with P. The T parameter should be a static
+string and preferably a string literal. The sqlite3_result_pointer()
+routine is part of the <a href="bindptr.html">pointer passing interface</a> added for SQLite 3.20.0.</p>
+
+<p>If these routines are called from within the different thread
+than the one containing the application-defined function that received
+the <a href="#sqlite3_context">sqlite3_context</a> pointer, the results are undefined.
+</p><hr><a name="sqlite3_status"></a>
+<h2>SQLite Runtime Status</h2>
+</div>
+<blockquote><pre>
+int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
+int sqlite3_status64(
+ int op,
+ sqlite3_int64 *pCurrent,
+ sqlite3_int64 *pHighwater,
+ int resetFlag
+);
+</pre></blockquote>
+<p>
+These interfaces are used to retrieve runtime status information
+about the performance of SQLite, and optionally to reset various
+highwater marks. The first argument is an integer code for
+the specific parameter to measure. Recognized integer codes
+are of the form <a href="#SQLITE_STATUS_MALLOC_COUNT">SQLITE_STATUS_...</a>.
+The current value of the parameter is returned into *pCurrent.
+The highest recorded value is returned in *pHighwater. If the
+resetFlag is true, then the highest record value is reset after
+*pHighwater is written. Some parameters do not record the highest
+value. For those parameters
+nothing is written into *pHighwater and the resetFlag is ignored.
+Other parameters record only the highwater mark and not the current
+value. For these latter parameters nothing is written into *pCurrent.</p>
+
+<p>The sqlite3_status() and sqlite3_status64() routines return
+SQLITE_OK on success and a non-zero <a href="rescode.html">error code</a> on failure.</p>
+
+<p>If either the current value or the highwater mark is too large to
+be represented by a 32-bit integer, then the values returned by
+sqlite3_status() are undefined.</p>
+
+<p>See also: <a href="#sqlite3_db_status">sqlite3_db_status()</a>
+</p><hr><a name="sqlite3_str_append"></a>
+<h2>Add Content To A Dynamic String</h2>
+</div>
+<blockquote><pre>
+void sqlite3_str_appendf(sqlite3_str*, const char *zFormat, ...);
+void sqlite3_str_vappendf(sqlite3_str*, const char *zFormat, va_list);
+void sqlite3_str_append(sqlite3_str*, const char *zIn, int N);
+void sqlite3_str_appendall(sqlite3_str*, const char *zIn);
+void sqlite3_str_appendchar(sqlite3_str*, int N, char C);
+void sqlite3_str_reset(sqlite3_str*);
+</pre></blockquote>
+<p>
+These interfaces add content to an sqlite3_str object previously obtained
+from <a href="#sqlite3_str_new">sqlite3_str_new()</a>.</p>
+
+<p>The <a href="#sqlite3_str_append">sqlite3_str_appendf(X,F,...)</a> and
+<a href="#sqlite3_str_append">sqlite3_str_vappendf(X,F,V)</a> interfaces uses the <a href="printf.html">built-in printf</a>
+functionality of SQLite to append formatted text onto the end of
+<a href="#sqlite3_str">sqlite3_str</a> object X.</p>
+
+<p>The <a href="#sqlite3_str_append">sqlite3_str_append(X,S,N)</a> method appends exactly N bytes from string S
+onto the end of the <a href="#sqlite3_str">sqlite3_str</a> object X. N must be non-negative.
+S must contain at least N non-zero bytes of content. To append a
+zero-terminated string in its entirety, use the <a href="#sqlite3_str_append">sqlite3_str_appendall()</a>
+method instead.</p>
+
+<p>The <a href="#sqlite3_str_append">sqlite3_str_appendall(X,S)</a> method appends the complete content of
+zero-terminated string S onto the end of <a href="#sqlite3_str">sqlite3_str</a> object X.</p>
+
+<p>The <a href="#sqlite3_str_append">sqlite3_str_appendchar(X,N,C)</a> method appends N copies of the
+single-byte character C onto the end of <a href="#sqlite3_str">sqlite3_str</a> object X.
+This method can be used, for example, to add whitespace indentation.</p>
+
+<p>The <a href="#sqlite3_str_append">sqlite3_str_reset(X)</a> method resets the string under construction
+inside <a href="#sqlite3_str">sqlite3_str</a> object X back to zero bytes in length.</p>
+
+<p>These methods do not return a result code. If an error occurs, that fact
+is recorded in the <a href="#sqlite3_str">sqlite3_str</a> object and can be recovered by a
+subsequent call to <a href="#sqlite3_str_errcode">sqlite3_str_errcode(X)</a>.
+</p><hr><a name="sqlite3_str_errcode"></a>
+<h2>Status Of A Dynamic String</h2>
+</div>
+<blockquote><pre>
+int sqlite3_str_errcode(sqlite3_str*);
+int sqlite3_str_length(sqlite3_str*);
+char *sqlite3_str_value(sqlite3_str*);
+</pre></blockquote>
+<p>
+These interfaces return the current status of an <a href="#sqlite3_str">sqlite3_str</a> object.</p>
+
+<p>If any prior errors have occurred while constructing the dynamic string
+in sqlite3_str X, then the <a href="#sqlite3_str_errcode">sqlite3_str_errcode(X)</a> method will return
+an appropriate error code. The <a href="#sqlite3_str_errcode">sqlite3_str_errcode(X)</a> method returns
+<a href="#SQLITE_ABORT">SQLITE_NOMEM</a> following any out-of-memory error, or
+<a href="#SQLITE_ABORT">SQLITE_TOOBIG</a> if the size of the dynamic string exceeds
+<a href="limits.html#max_length">SQLITE_MAX_LENGTH</a>, or <a href="#SQLITE_ABORT">SQLITE_OK</a> if there have been no errors.</p>
+
+<p>The <a href="#sqlite3_str_errcode">sqlite3_str_length(X)</a> method returns the current length, in bytes,
+of the dynamic string under construction in <a href="#sqlite3_str">sqlite3_str</a> object X.
+The length returned by <a href="#sqlite3_str_errcode">sqlite3_str_length(X)</a> does not include the
+zero-termination byte.</p>
+
+<p>The <a href="#sqlite3_str_errcode">sqlite3_str_value(X)</a> method returns a pointer to the current
+content of the dynamic string under construction in X. The value
+returned by <a href="#sqlite3_str_errcode">sqlite3_str_value(X)</a> is managed by the sqlite3_str object X
+and might be freed or altered by any subsequent method on the same
+<a href="#sqlite3_str">sqlite3_str</a> object. Applications must not used the pointer returned
+<a href="#sqlite3_str_errcode">sqlite3_str_value(X)</a> after any subsequent method call on the same
+object. Applications may change the content of the string returned
+by <a href="#sqlite3_str_errcode">sqlite3_str_value(X)</a> as long as they do not write into any bytes
+outside the range of 0 to <a href="#sqlite3_str_errcode">sqlite3_str_length(X)</a> and do not read or
+write any byte after any subsequent sqlite3_str method call.
+</p><hr><a name="sqlite3_stricmp"></a>
+<h2>String Comparison</h2>
+</div>
+<blockquote><pre>
+int sqlite3_stricmp(const char *, const char *);
+int sqlite3_strnicmp(const char *, const char *, int);
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_stricmp">sqlite3_stricmp()</a> and <a href="#sqlite3_stricmp">sqlite3_strnicmp()</a> APIs allow applications
+and extensions to compare the contents of two buffers containing UTF-8
+strings in a case-independent fashion, using the same definition of "case
+independence" that SQLite uses internally when comparing identifiers.
+</p><hr><a name="sqlite3_total_changes"></a>
+<h2>Total Number Of Rows Modified</h2>
+</div>
+<blockquote><pre>
+int sqlite3_total_changes(sqlite3*);
+sqlite3_int64 sqlite3_total_changes64(sqlite3*);
+</pre></blockquote>
+<p>
+These functions return the total number of rows inserted, modified or
+deleted by all <a href="lang_insert.html">INSERT</a>, <a href="lang_update.html">UPDATE</a> or <a href="lang_delete.html">DELETE</a> statements completed
+since the database connection was opened, including those executed as
+part of trigger programs. The two functions are identical except for the
+type of the return value and that if the number of rows modified by the
+connection exceeds the maximum value supported by type "int", then
+the return value of sqlite3_total_changes() is undefined. Executing
+any other type of SQL statement does not affect the value returned by
+sqlite3_total_changes().</p>
+
+<p>Changes made as part of <a href="foreignkeys.html#fk_actions">foreign key actions</a> are included in the
+count, but those made as part of REPLACE constraint resolution are
+not. Changes to a view that are intercepted by INSTEAD OF triggers
+are not counted.</p>
+
+<p>The <a href="#sqlite3_total_changes">sqlite3_total_changes(D)</a> interface only reports the number
+of rows that changed due to SQL statement run against database
+connection D. Any changes by other database connections are ignored.
+To detect changes against a database file from other database
+connections use the <a href="pragma.html#pragma_data_version">PRAGMA data_version</a> command or the
+<a href="#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> <a href="#sqlite3_file_control">file control</a>.</p>
+
+<p>If a separate thread makes changes on the same database connection
+while <a href="#sqlite3_total_changes">sqlite3_total_changes()</a> is running then the value
+returned is unpredictable and not meaningful.</p>
+
+<p>See also:
+<ul>
+<li> the <a href="#sqlite3_changes">sqlite3_changes()</a> interface
+<li> the <a href="pragma.html#pragma_count_changes">count_changes pragma</a>
+<li> the <a href="lang_corefunc.html#changes">changes() SQL function</a>
+<li> the <a href="pragma.html#pragma_data_version">data_version pragma</a>
+<li> the <a href="#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> <a href="#sqlite3_file_control">file control</a>
+</ul>
+</p><hr><a name="sqlite3_uri_boolean"></a>
+<h2>Obtain Values For URI Parameters</h2>
+</div>
+<blockquote><pre>
+const char *sqlite3_uri_parameter(sqlite3_filename z, const char *zParam);
+int sqlite3_uri_boolean(sqlite3_filename z, const char *zParam, int bDefault);
+sqlite3_int64 sqlite3_uri_int64(sqlite3_filename, const char*, sqlite3_int64);
+const char *sqlite3_uri_key(sqlite3_filename z, int N);
+</pre></blockquote>
+<p>
+These are utility routines, useful to <a href="vfs.html">custom VFS implementations</a>,
+that check if a database file was a URI that contained a specific query
+parameter, and if so obtains the value of that query parameter.</p>
+
+<p>The first parameter to these interfaces (hereafter referred to
+as F) must be one of:
+<ul>
+<li> A database filename pointer created by the SQLite core and
+passed into the xOpen() method of a VFS implemention, or
+<li> A filename obtained from <a href="#sqlite3_db_filename">sqlite3_db_filename()</a>, or
+<li> A new filename constructed using <a href="#sqlite3_create_filename">sqlite3_create_filename()</a>.
+</ul>
+If the F parameter is not one of the above, then the behavior is
+undefined and probably undesirable. Older versions of SQLite were
+more tolerant of invalid F parameters than newer versions.</p>
+
+<p>If F is a suitable filename (as described in the previous paragraph)
+and if P is the name of the query parameter, then
+sqlite3_uri_parameter(F,P) returns the value of the P
+parameter if it exists or a NULL pointer if P does not appear as a
+query parameter on F. If P is a query parameter of F and it
+has no explicit value, then sqlite3_uri_parameter(F,P) returns
+a pointer to an empty string.</p>
+
+<p>The sqlite3_uri_boolean(F,P,B) routine assumes that P is a boolean
+parameter and returns true (1) or false (0) according to the value
+of P. The sqlite3_uri_boolean(F,P,B) routine returns true (1) if the
+value of query parameter P is one of "yes", "true", or "on" in any
+case or if the value begins with a non-zero number. The
+sqlite3_uri_boolean(F,P,B) routines returns false (0) if the value of
+query parameter P is one of "no", "false", or "off" in any case or
+if the value begins with a numeric zero. If P is not a query
+parameter on F or if the value of P does not match any of the
+above, then sqlite3_uri_boolean(F,P,B) returns (B!=0).</p>
+
+<p>The sqlite3_uri_int64(F,P,D) routine converts the value of P into a
+64-bit signed integer and returns that integer, or D if P does not
+exist. If the value of P is something other than an integer, then
+zero is returned.</p>
+
+<p>The sqlite3_uri_key(F,N) returns a pointer to the name (not
+the value) of the N-th query parameter for filename F, or a NULL
+pointer if N is less than zero or greater than the number of query
+parameters minus 1. The N value is zero-based so N should be 0 to obtain
+the name of the first query parameter, 1 for the second parameter, and
+so forth.</p>
+
+<p>If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and
+sqlite3_uri_boolean(F,P,B) returns B. If F is not a NULL pointer and
+is not a database file pathname pointer that the SQLite core passed
+into the xOpen VFS method, then the behavior of this routine is undefined
+and probably undesirable.</p>
+
+<p>Beginning with SQLite <a href="releaselog/3_31_0.html">version 3.31.0</a> (2020-01-22) the input F
+parameter can also be the name of a rollback journal file or WAL file
+in addition to the main database file. Prior to version 3.31.0, these
+routines would only work if F was the name of the main database file.
+When the F parameter is the name of the rollback journal or WAL file,
+it has access to all the same query parameters as were found on the
+main database file.</p>
+
+<p>See the <a href="uri.html">URI filename</a> documentation for additional information.
+</p><hr><a name="sqlite3_value_blob"></a>
+<h2>Obtaining SQL Values</h2>
+</div>
+<blockquote><pre>
+const void *sqlite3_value_blob(sqlite3_value*);
+double sqlite3_value_double(sqlite3_value*);
+int sqlite3_value_int(sqlite3_value*);
+sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
+void *sqlite3_value_pointer(sqlite3_value*, const char*);
+const unsigned char *sqlite3_value_text(sqlite3_value*);
+const void *sqlite3_value_text16(sqlite3_value*);
+const void *sqlite3_value_text16le(sqlite3_value*);
+const void *sqlite3_value_text16be(sqlite3_value*);
+int sqlite3_value_bytes(sqlite3_value*);
+int sqlite3_value_bytes16(sqlite3_value*);
+int sqlite3_value_type(sqlite3_value*);
+int sqlite3_value_numeric_type(sqlite3_value*);
+int sqlite3_value_nochange(sqlite3_value*);
+int sqlite3_value_frombind(sqlite3_value*);
+int sqlite3_value_encoding(sqlite3_value*);
+</pre></blockquote>
+<p>
+<b>Summary:</b>
+<blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td><b>sqlite3_value_blob</b><td>&rarr;<td>BLOB value
+<tr><td><b>sqlite3_value_double</b><td>&rarr;<td>REAL value
+<tr><td><b>sqlite3_value_int</b><td>&rarr;<td>32-bit INTEGER value
+<tr><td><b>sqlite3_value_int64</b><td>&rarr;<td>64-bit INTEGER value
+<tr><td><b>sqlite3_value_pointer</b><td>&rarr;<td>Pointer value
+<tr><td><b>sqlite3_value_text</b><td>&rarr;<td>UTF-8 TEXT value
+<tr><td><b>sqlite3_value_text16</b><td>&rarr;<td>UTF-16 TEXT value in
+the native byteorder
+<tr><td><b>sqlite3_value_text16be</b><td>&rarr;<td>UTF-16be TEXT value
+<tr><td><b>sqlite3_value_text16le</b><td>&rarr;<td>UTF-16le TEXT value
+<tr><td>&nbsp;<td>&nbsp;<td>&nbsp;
+<tr><td><b>sqlite3_value_bytes</b><td>&rarr;<td>Size of a BLOB
+or a UTF-8 TEXT in bytes
+<tr><td><b>sqlite3_value_bytes16&nbsp;&nbsp;</b>
+<td>&rarr;&nbsp;&nbsp;<td>Size of UTF-16
+TEXT in bytes
+<tr><td><b>sqlite3_value_type</b><td>&rarr;<td>Default
+datatype of the value
+<tr><td><b>sqlite3_value_numeric_type&nbsp;&nbsp;</b>
+<td>&rarr;&nbsp;&nbsp;<td>Best numeric datatype of the value
+<tr><td><b>sqlite3_value_nochange&nbsp;&nbsp;</b>
+<td>&rarr;&nbsp;&nbsp;<td>True if the column is unchanged in an UPDATE
+against a virtual table.
+<tr><td><b>sqlite3_value_frombind&nbsp;&nbsp;</b>
+<td>&rarr;&nbsp;&nbsp;<td>True if value originated from a <a href="lang_expr.html#varparam">bound parameter</a>
+</table></blockquote></p>
+
+<p><b>Details:</b></p>
+
+<p>These routines extract type, size, and content information from
+<a href="#sqlite3_value">protected sqlite3_value</a> objects. Protected sqlite3_value objects
+are used to pass parameter information into the functions that
+implement <a href="appfunc.html">application-defined SQL functions</a> and <a href="vtab.html">virtual tables</a>.</p>
+
+<p>These routines work only with <a href="#sqlite3_value">protected sqlite3_value</a> objects.
+Any attempt to use these routines on an <a href="#sqlite3_value">unprotected sqlite3_value</a>
+is not threadsafe.</p>
+
+<p>These routines work just like the corresponding <a href="#sqlite3_column_blob">column access functions</a>
+except that these routines take a single <a href="#sqlite3_value">protected sqlite3_value</a> object
+pointer instead of a <a href="#sqlite3_stmt">sqlite3_stmt*</a> pointer and an integer column number.</p>
+
+<p>The sqlite3_value_text16() interface extracts a UTF-16 string
+in the native byte-order of the host machine. The
+sqlite3_value_text16be() and sqlite3_value_text16le() interfaces
+extract UTF-16 strings as big-endian and little-endian respectively.</p>
+
+<p>If <a href="#sqlite3_value">sqlite3_value</a> object V was initialized
+using <a href="#sqlite3_bind_blob">sqlite3_bind_pointer(S,I,P,X,D)</a> or <a href="#sqlite3_result_blob">sqlite3_result_pointer(C,P,X,D)</a>
+and if X and Y are strings that compare equal according to strcmp(X,Y),
+then sqlite3_value_pointer(V,Y) will return the pointer P. Otherwise,
+sqlite3_value_pointer(V,Y) returns a NULL. The sqlite3_bind_pointer()
+routine is part of the <a href="bindptr.html">pointer passing interface</a> added for SQLite 3.20.0.</p>
+
+<p>The sqlite3_value_type(V) interface returns the
+<a href="#SQLITE_BLOB">datatype code</a> for the initial datatype of the
+<a href="#sqlite3_value">sqlite3_value</a> object V. The returned value is one of <a href="#SQLITE_BLOB">SQLITE_INTEGER</a>,
+<a href="#SQLITE_BLOB">SQLITE_FLOAT</a>, <a href="#SQLITE_BLOB">SQLITE_TEXT</a>, <a href="#SQLITE_BLOB">SQLITE_BLOB</a>, or <a href="#SQLITE_BLOB">SQLITE_NULL</a>.
+Other interfaces might change the datatype for an sqlite3_value object.
+For example, if the datatype is initially SQLITE_INTEGER and
+sqlite3_value_text(V) is called to extract a text value for that
+integer, then subsequent calls to sqlite3_value_type(V) might return
+SQLITE_TEXT. Whether or not a persistent internal datatype conversion
+occurs is undefined and may change from one release of SQLite to the next.</p>
+
+<p>The sqlite3_value_numeric_type() interface attempts to apply
+numeric affinity to the value. This means that an attempt is
+made to convert the value to an integer or floating point. If
+such a conversion is possible without loss of information (in other
+words, if the value is a string that looks like a number)
+then the conversion is performed. Otherwise no conversion occurs.
+The <a href="#SQLITE_BLOB">datatype</a> after conversion is returned.</p>
+
+<p>The sqlite3_value_encoding(X) interface returns one of <a href="#SQLITE_ANY">SQLITE_UTF8</a>,
+<a href="#SQLITE_ANY">SQLITE_UTF16BE</a>, or <a href="#SQLITE_ANY">SQLITE_UTF16LE</a> according to the current encoding
+of the value X, assuming that X has type TEXT. If sqlite3_value_type(X)
+returns something other than SQLITE_TEXT, then the return value from
+sqlite3_value_encoding(X) is meaningless. Calls to
+sqlite3_value_text(X), sqlite3_value_text16(X), sqlite3_value_text16be(X),
+sqlite3_value_text16le(X), sqlite3_value_bytes(X), or
+sqlite3_value_bytes16(X) might change the encoding of the value X and
+thus change the return from subsequent calls to sqlite3_value_encoding(X).</p>
+
+<p>Within the <a href="vtab.html#xupdate">xUpdate</a> method of a <a href="vtab.html">virtual table</a>, the
+sqlite3_value_nochange(X) interface returns true if and only if
+the column corresponding to X is unchanged by the UPDATE operation
+that the xUpdate method call was invoked to implement and if
+and the prior <a href="vtab.html#xcolumn">xColumn</a> method call that was invoked to extracted
+the value for that column returned without setting a result (probably
+because it queried <a href="#sqlite3_vtab_nochange">sqlite3_vtab_nochange()</a> and found that the column
+was unchanging). Within an <a href="vtab.html#xupdate">xUpdate</a> method, any value for which
+sqlite3_value_nochange(X) is true will in all other respects appear
+to be a NULL value. If sqlite3_value_nochange(X) is invoked anywhere other
+than within an <a href="vtab.html#xupdate">xUpdate</a> method call for an UPDATE statement, then
+the return value is arbitrary and meaningless.</p>
+
+<p>The sqlite3_value_frombind(X) interface returns non-zero if the
+value X originated from one of the <a href="#sqlite3_bind_blob">sqlite3_bind()</a>
+interfaces. If X comes from an SQL literal value, or a table column,
+or an expression, then sqlite3_value_frombind(X) returns zero.</p>
+
+<p>Please pay particular attention to the fact that the pointer returned
+from <a href="#sqlite3_value_blob">sqlite3_value_blob()</a>, <a href="#sqlite3_value_blob">sqlite3_value_text()</a>, or
+<a href="#sqlite3_value_blob">sqlite3_value_text16()</a> can be invalidated by a subsequent call to
+<a href="#sqlite3_value_blob">sqlite3_value_bytes()</a>, <a href="#sqlite3_value_blob">sqlite3_value_bytes16()</a>, <a href="#sqlite3_value_blob">sqlite3_value_text()</a>,
+or <a href="#sqlite3_value_blob">sqlite3_value_text16()</a>.</p>
+
+<p>These routines must be called from the same thread as
+the SQL function that supplied the <a href="#sqlite3_value">sqlite3_value*</a> parameters.</p>
+
+<p>As long as the input parameter is correct, these routines can only
+fail if an out-of-memory error occurs during a format conversion.
+Only the following subset of interfaces are subject to out-of-memory
+errors:</p>
+
+<p><ul>
+<li> sqlite3_value_blob()
+<li> sqlite3_value_text()
+<li> sqlite3_value_text16()
+<li> sqlite3_value_text16le()
+<li> sqlite3_value_text16be()
+<li> sqlite3_value_bytes()
+<li> sqlite3_value_bytes16()
+</ul></p>
+
+<p>If an out-of-memory error occurs, then the return value from these
+routines is the same as if the column had contained an SQL NULL value.
+Valid SQL NULL returns can be distinguished from out-of-memory errors
+by invoking the <a href="#sqlite3_errcode">sqlite3_errcode()</a> immediately after the suspect
+return value is obtained and before any
+other SQLite interface is called on the same <a href="#sqlite3">database connection</a>.
+</p><hr><a name="sqlite3_value_dup"></a>
+<h2>Copy And Free SQL Values</h2>
+</div>
+<blockquote><pre>
+sqlite3_value *sqlite3_value_dup(const sqlite3_value*);
+void sqlite3_value_free(sqlite3_value*);
+</pre></blockquote>
+<p>
+The sqlite3_value_dup(V) interface makes a copy of the <a href="#sqlite3_value">sqlite3_value</a>
+object D and returns a pointer to that copy. The <a href="#sqlite3_value">sqlite3_value</a> returned
+is a <a href="#sqlite3_value">protected sqlite3_value</a> object even if the input is not.
+The sqlite3_value_dup(V) interface returns NULL if V is NULL or if a
+memory allocation fails. If V is a <a href="bindptr.html">pointer value</a>, then the result
+of sqlite3_value_dup(V) is a NULL value.</p>
+
+<p>The sqlite3_value_free(V) interface frees an <a href="#sqlite3_value">sqlite3_value</a> object
+previously obtained from <a href="#sqlite3_value_dup">sqlite3_value_dup()</a>. If V is a NULL pointer
+then sqlite3_value_free(V) is a harmless no-op.
+</p><hr><a name="sqlite3_vfs_find"></a>
+<h2>Virtual File System Objects</h2>
+</div>
+<blockquote><pre>
+sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
+int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
+int sqlite3_vfs_unregister(sqlite3_vfs*);
+</pre></blockquote>
+<p>
+A virtual filesystem (VFS) is an <a href="#sqlite3_vfs">sqlite3_vfs</a> object
+that SQLite uses to interact
+with the underlying operating system. Most SQLite builds come with a
+single default VFS that is appropriate for the host computer.
+New VFSes can be registered and existing VFSes can be unregistered.
+The following interfaces are provided.</p>
+
+<p>The sqlite3_vfs_find() interface returns a pointer to a VFS given its name.
+Names are case sensitive.
+Names are zero-terminated UTF-8 strings.
+If there is no match, a NULL pointer is returned.
+If zVfsName is NULL then the default VFS is returned.</p>
+
+<p>New VFSes are registered with sqlite3_vfs_register().
+Each new VFS becomes the default VFS if the makeDflt flag is set.
+The same VFS can be registered multiple times without injury.
+To make an existing VFS into the default VFS, register it again
+with the makeDflt flag set. If two different VFSes with the
+same name are registered, the behavior is undefined. If a
+VFS is registered with a name that is NULL or an empty string,
+then the behavior is undefined.</p>
+
+<p>Unregister a VFS with the sqlite3_vfs_unregister() interface.
+If the default VFS is unregistered, another VFS is chosen as
+the default. The choice for the new VFS is arbitrary.
+</p><hr><a name="sqlite3_vtab_in_first"></a>
+<h2>Find all elements on the right-hand side of an IN constraint.</h2>
+</div>
+<blockquote><pre>
+int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut);
+int sqlite3_vtab_in_next(sqlite3_value *pVal, sqlite3_value **ppOut);
+</pre></blockquote>
+<p>
+These interfaces are only useful from within the
+<a href="vtab.html#xfilter">xFilter() method</a> of a <a href="vtab.html">virtual table</a> implementation.
+The result of invoking these interfaces from any other context
+is undefined and probably harmful.</p>
+
+<p>The X parameter in a call to sqlite3_vtab_in_first(X,P) or
+sqlite3_vtab_in_next(X,P) must be one of the parameters to the
+xFilter method which invokes these routines, and specifically
+a parameter that was previously selected for all-at-once IN constraint
+processing use the <a href="#sqlite3_vtab_in">sqlite3_vtab_in()</a> interface in the
+<a href="vtab.html#xbestindex">xBestIndex method</a>. If the X parameter is not
+an xFilter argument that was selected for all-at-once IN constraint
+processing, then these routines return <a href="#SQLITE_ABORT">SQLITE_MISUSE</a> or perhaps
+exhibit some other undefined or harmful behavior.</p>
+
+<p>Use these routines to access all values on the right-hand side
+of the IN constraint using code like the following:</p>
+
+<p><blockquote><pre>
+&nbsp; for(rc=sqlite3_vtab_in_first(pList, &pVal);
+&nbsp; rc==SQLITE_OK && pVal
+&nbsp; rc=sqlite3_vtab_in_next(pList, &pVal)
+&nbsp; ){
+&nbsp; // do something with pVal
+&nbsp; }
+&nbsp; if( rc!=SQLITE_OK ){
+&nbsp; // an error has occurred
+&nbsp; }
+</pre></blockquote></p>
+
+<p>On success, the sqlite3_vtab_in_first(X,P) and sqlite3_vtab_in_next(X,P)
+routines return SQLITE_OK and set *P to point to the first or next value
+on the RHS of the IN constraint. If there are no more values on the
+right hand side of the IN constraint, then *P is set to NULL and these
+routines return <a href="#SQLITE_ABORT">SQLITE_DONE</a>. The return value might be
+some other value, such as SQLITE_NOMEM, in the event of a malfunction.</p>
+
+<p>The *ppOut values returned by these routines are only valid until the
+next call to either of these routines or until the end of the xFilter
+method from which these routines were called. If the virtual table
+implementation needs to retain the *ppOut values for longer, it must make
+copies. The *ppOut values are <a href="#sqlite3_value">protected</a>.
+</p><hr><a name="sqlite3_win32_set_directory"></a>
+<h2>Win32 Specific Interface</h2>
+</div>
+<blockquote><pre>
+int sqlite3_win32_set_directory(
+ unsigned long type, /* Identifier for directory being set or reset */
+ void *zValue /* New value for directory being set or reset */
+);
+int sqlite3_win32_set_directory8(unsigned long type, const char *zValue);
+int sqlite3_win32_set_directory16(unsigned long type, const void *zValue);
+</pre></blockquote>
+<p>
+These interfaces are available only on Windows. The
+<a href="#sqlite3_win32_set_directory">sqlite3_win32_set_directory</a> interface is used to set the value associated
+with the <a href="#sqlite3_temp_directory">sqlite3_temp_directory</a> or <a href="#sqlite3_data_directory">sqlite3_data_directory</a> variable, to
+zValue, depending on the value of the type parameter. The zValue parameter
+should be NULL to cause the previous value to be freed via <a href="#sqlite3_free">sqlite3_free</a>;
+a non-NULL value will be copied into memory obtained from <a href="#sqlite3_free">sqlite3_malloc</a>
+prior to being used. The <a href="#sqlite3_win32_set_directory">sqlite3_win32_set_directory</a> interface returns
+<a href="#SQLITE_ABORT">SQLITE_OK</a> to indicate success, <a href="#SQLITE_ABORT">SQLITE_ERROR</a> if the type is unsupported,
+or <a href="#SQLITE_ABORT">SQLITE_NOMEM</a> if memory could not be allocated. The value of the
+<a href="#sqlite3_data_directory">sqlite3_data_directory</a> variable is intended to act as a replacement for
+the current directory on the sub-platforms of Win32 where that concept is
+not present, e.g. WinRT and UWP. The <a href="#sqlite3_win32_set_directory">sqlite3_win32_set_directory8</a> and
+<a href="#sqlite3_win32_set_directory">sqlite3_win32_set_directory16</a> interfaces behave exactly the same as the
+sqlite3_win32_set_directory interface except the string parameter must be
+UTF-8 or UTF-16, respectively.
+</p><hr><a name="sqlite3_bind_blob"></a>
+<h2>Binding Values To Prepared Statements</h2>
+</div>
+<blockquote><pre>
+int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
+int sqlite3_bind_blob64(sqlite3_stmt*, int, const void*, sqlite3_uint64,
+ void(*)(void*));
+int sqlite3_bind_double(sqlite3_stmt*, int, double);
+int sqlite3_bind_int(sqlite3_stmt*, int, int);
+int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
+int sqlite3_bind_null(sqlite3_stmt*, int);
+int sqlite3_bind_text(sqlite3_stmt*,int,const char*,int,void(*)(void*));
+int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
+int sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64,
+ void(*)(void*), unsigned char encoding);
+int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
+int sqlite3_bind_pointer(sqlite3_stmt*, int, void*, const char*,void(*)(void*));
+int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
+int sqlite3_bind_zeroblob64(sqlite3_stmt*, int, sqlite3_uint64);
+</pre></blockquote>
+<p>
+In the SQL statement text input to <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> and its variants,
+literals may be replaced by a <a href="lang_expr.html#varparam">parameter</a> that matches one of following
+templates:</p>
+
+<p><ul>
+<li> ?
+<li> ?NNN
+<li> :VVV
+<li> @VVV
+<li> $VVV
+</ul></p>
+
+<p>In the templates above, NNN represents an integer literal,
+and VVV represents an alphanumeric identifier. The values of these
+parameters (also called "host parameter names" or "SQL parameters")
+can be set using the sqlite3_bind_*() routines defined here.</p>
+
+<p>The first argument to the sqlite3_bind_*() routines is always
+a pointer to the <a href="#sqlite3_stmt">sqlite3_stmt</a> object returned from
+<a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> or its variants.</p>
+
+<p>The second argument is the index of the SQL parameter to be set.
+The leftmost SQL parameter has an index of 1. When the same named
+SQL parameter is used more than once, second and subsequent
+occurrences have the same index as the first occurrence.
+The index for named parameters can be looked up using the
+<a href="#sqlite3_bind_parameter_index">sqlite3_bind_parameter_index()</a> API if desired. The index
+for "?NNN" parameters is the value of NNN.
+The NNN value must be between 1 and the <a href="#sqlite3_limit">sqlite3_limit()</a>
+parameter <a href="#sqlitelimitvariablenumber">SQLITE_LIMIT_VARIABLE_NUMBER</a> (default value: 32766).</p>
+
+<p>The third argument is the value to bind to the parameter.
+If the third parameter to sqlite3_bind_text() or sqlite3_bind_text16()
+or sqlite3_bind_blob() is a NULL pointer then the fourth parameter
+is ignored and the end result is the same as sqlite3_bind_null().
+If the third parameter to sqlite3_bind_text() is not NULL, then
+it should be a pointer to well-formed UTF8 text.
+If the third parameter to sqlite3_bind_text16() is not NULL, then
+it should be a pointer to well-formed UTF16 text.
+If the third parameter to sqlite3_bind_text64() is not NULL, then
+it should be a pointer to a well-formed unicode string that is
+either UTF8 if the sixth parameter is SQLITE_UTF8, or UTF16
+otherwise.</p>
+
+<p><a name="byteorderdeterminationrules"></a>
+ The byte-order of
+UTF16 input text is determined by the byte-order mark (BOM, U+FEFF)
+found in first character, which is removed, or in the absence of a BOM
+the byte order is the native byte order of the host
+machine for sqlite3_bind_text16() or the byte order specified in
+the 6th parameter for sqlite3_bind_text64().
+If UTF16 input text contains invalid unicode
+characters, then SQLite might change those invalid characters
+into the unicode replacement character: U+FFFD.</p>
+
+<p>In those routines that have a fourth argument, its value is the
+number of bytes in the parameter. To be clear: the value is the
+number of <u>bytes</u> in the value, not the number of characters.
+If the fourth parameter to sqlite3_bind_text() or sqlite3_bind_text16()
+is negative, then the length of the string is
+the number of bytes up to the first zero terminator.
+If the fourth parameter to sqlite3_bind_blob() is negative, then
+the behavior is undefined.
+If a non-negative fourth parameter is provided to sqlite3_bind_text()
+or sqlite3_bind_text16() or sqlite3_bind_text64() then
+that parameter must be the byte offset
+where the NUL terminator would occur assuming the string were NUL
+terminated. If any NUL characters occurs at byte offsets less than
+the value of the fourth parameter then the resulting string value will
+contain embedded NULs. The result of expressions involving strings
+with embedded NULs is undefined.</p>
+
+<p>The fifth argument to the BLOB and string binding interfaces controls
+or indicates the lifetime of the object referenced by the third parameter.
+These three options exist:
+ (1) A destructor to dispose of the BLOB or string after SQLite has finished
+with it may be passed. It is called to dispose of the BLOB or string even
+if the call to the bind API fails, except the destructor is not called if
+the third parameter is a NULL pointer or the fourth parameter is negative.
+ (2) The special constant, <a href="#SQLITE_STATIC">SQLITE_STATIC</a>, may be passsed to indicate that
+the application remains responsible for disposing of the object. In this
+case, the object and the provided pointer to it must remain valid until
+either the prepared statement is finalized or the same SQL parameter is
+bound to something else, whichever occurs sooner.
+ (3) The constant, <a href="#SQLITE_STATIC">SQLITE_TRANSIENT</a>, may be passed to indicate that the
+object is to be copied prior to the return from sqlite3_bind_*(). The
+object and pointer to it must remain valid until then. SQLite will then
+manage the lifetime of its private copy.</p>
+
+<p>The sixth argument to sqlite3_bind_text64() must be one of
+<a href="#SQLITE_ANY">SQLITE_UTF8</a>, <a href="#SQLITE_ANY">SQLITE_UTF16</a>, <a href="#SQLITE_ANY">SQLITE_UTF16BE</a>, or <a href="#SQLITE_ANY">SQLITE_UTF16LE</a>
+to specify the encoding of the text in the third parameter. If
+the sixth argument to sqlite3_bind_text64() is not one of the
+allowed values shown above, or if the text encoding is different
+from the encoding specified by the sixth parameter, then the behavior
+is undefined.</p>
+
+<p>The sqlite3_bind_zeroblob() routine binds a BLOB of length N that
+is filled with zeroes. A zeroblob uses a fixed amount of memory
+(just an integer to hold its size) while it is being processed.
+Zeroblobs are intended to serve as placeholders for BLOBs whose
+content is later written using
+<a href="#sqlite3_blob_open">incremental BLOB I/O</a> routines.
+A negative value for the zeroblob results in a zero-length BLOB.</p>
+
+<p>The sqlite3_bind_pointer(S,I,P,T,D) routine causes the I-th parameter in
+<a href="#sqlite3_stmt">prepared statement</a> S to have an SQL value of NULL, but to also be
+associated with the pointer P of type T. D is either a NULL pointer or
+a pointer to a destructor function for P. SQLite will invoke the
+destructor D with a single argument of P when it is finished using
+P. The T parameter should be a static string, preferably a string
+literal. The sqlite3_bind_pointer() routine is part of the
+<a href="bindptr.html">pointer passing interface</a> added for SQLite 3.20.0.</p>
+
+<p>If any of the sqlite3_bind_*() routines are called with a NULL pointer
+for the <a href="#sqlite3_stmt">prepared statement</a> or with a prepared statement for which
+<a href="#sqlite3_step">sqlite3_step()</a> has been called more recently than <a href="#sqlite3_reset">sqlite3_reset()</a>,
+then the call will return <a href="#SQLITE_ABORT">SQLITE_MISUSE</a>. If any sqlite3_bind_()
+routine is passed a <a href="#sqlite3_stmt">prepared statement</a> that has been finalized, the
+result is undefined and probably harmful.</p>
+
+<p>Bindings are not cleared by the <a href="#sqlite3_reset">sqlite3_reset()</a> routine.
+Unbound parameters are interpreted as NULL.</p>
+
+<p>The sqlite3_bind_* routines return <a href="#SQLITE_ABORT">SQLITE_OK</a> on success or an
+<a href="rescode.html">error code</a> if anything goes wrong.
+<a href="#SQLITE_ABORT">SQLITE_TOOBIG</a> might be returned if the size of a string or BLOB
+exceeds limits imposed by <a href="#sqlite3_limit">sqlite3_limit</a>(<a href="#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a>) or
+<a href="limits.html#max_length">SQLITE_MAX_LENGTH</a>.
+<a href="#SQLITE_ABORT">SQLITE_RANGE</a> is returned if the parameter
+index is out of range. <a href="#SQLITE_ABORT">SQLITE_NOMEM</a> is returned if malloc() fails.</p>
+
+<p>See also: <a href="#sqlite3_bind_parameter_count">sqlite3_bind_parameter_count()</a>,
+<a href="#sqlite3_bind_parameter_name">sqlite3_bind_parameter_name()</a>, and <a href="#sqlite3_bind_parameter_index">sqlite3_bind_parameter_index()</a>.
+</p><hr><a name="sqlite3_prepare"></a>
+<h2>Compiling An SQL Statement</h2>
+</div>
+<blockquote><pre>
+int sqlite3_prepare(
+ sqlite3 *db, /* Database handle */
+ const char *zSql, /* SQL statement, UTF-8 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const char **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+int sqlite3_prepare_v2(
+ sqlite3 *db, /* Database handle */
+ const char *zSql, /* SQL statement, UTF-8 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const char **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+int sqlite3_prepare_v3(
+ sqlite3 *db, /* Database handle */
+ const char *zSql, /* SQL statement, UTF-8 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const char **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+int sqlite3_prepare16(
+ sqlite3 *db, /* Database handle */
+ const void *zSql, /* SQL statement, UTF-16 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const void **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+int sqlite3_prepare16_v2(
+ sqlite3 *db, /* Database handle */
+ const void *zSql, /* SQL statement, UTF-16 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const void **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+int sqlite3_prepare16_v3(
+ sqlite3 *db, /* Database handle */
+ const void *zSql, /* SQL statement, UTF-16 encoded */
+ int nByte, /* Maximum length of zSql in bytes. */
+ unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */
+ sqlite3_stmt **ppStmt, /* OUT: Statement handle */
+ const void **pzTail /* OUT: Pointer to unused portion of zSql */
+);
+</pre></blockquote>
+<p>
+To execute an SQL statement, it must first be compiled into a byte-code
+program using one of these routines. Or, in other words, these routines
+are constructors for the <a href="#sqlite3_stmt">prepared statement</a> object.</p>
+
+<p>The preferred routine to use is <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a>. The
+<a href="#sqlite3_prepare">sqlite3_prepare()</a> interface is legacy and should be avoided.
+<a href="#sqlite3_prepare">sqlite3_prepare_v3()</a> has an extra "prepFlags" option that is used
+for special purposes.</p>
+
+<p>The use of the UTF-8 interfaces is preferred, as SQLite currently
+does all parsing using UTF-8. The UTF-16 interfaces are provided
+as a convenience. The UTF-16 interfaces work by converting the
+input text into UTF-8, then invoking the corresponding UTF-8 interface.</p>
+
+<p>The first argument, "db", is a <a href="#sqlite3">database connection</a> obtained from a
+prior successful call to <a href="#sqlite3_open">sqlite3_open()</a>, <a href="#sqlite3_open">sqlite3_open_v2()</a> or
+<a href="#sqlite3_open">sqlite3_open16()</a>. The database connection must not have been closed.</p>
+
+<p>The second argument, "zSql", is the statement to be compiled, encoded
+as either UTF-8 or UTF-16. The sqlite3_prepare(), sqlite3_prepare_v2(),
+and sqlite3_prepare_v3()
+interfaces use UTF-8, and sqlite3_prepare16(), sqlite3_prepare16_v2(),
+and sqlite3_prepare16_v3() use UTF-16.</p>
+
+<p>If the nByte argument is negative, then zSql is read up to the
+first zero terminator. If nByte is positive, then it is the
+number of bytes read from zSql. If nByte is zero, then no prepared
+statement is generated.
+If the caller knows that the supplied string is nul-terminated, then
+there is a small performance advantage to passing an nByte parameter that
+is the number of bytes in the input string <i>including</i>
+the nul-terminator.</p>
+
+<p>If pzTail is not NULL then *pzTail is made to point to the first byte
+past the end of the first SQL statement in zSql. These routines only
+compile the first statement in zSql, so *pzTail is left pointing to
+what remains uncompiled.</p>
+
+<p>*ppStmt is left pointing to a compiled <a href="#sqlite3_stmt">prepared statement</a> that can be
+executed using <a href="#sqlite3_step">sqlite3_step()</a>. If there is an error, *ppStmt is set
+to NULL. If the input text contains no SQL (if the input is an empty
+string or a comment) then *ppStmt is set to NULL.
+The calling procedure is responsible for deleting the compiled
+SQL statement using <a href="#sqlite3_finalize">sqlite3_finalize()</a> after it has finished with it.
+ppStmt may not be NULL.</p>
+
+<p>On success, the sqlite3_prepare() family of routines return <a href="#SQLITE_ABORT">SQLITE_OK</a>;
+otherwise an <a href="rescode.html">error code</a> is returned.</p>
+
+<p>The sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(),
+and sqlite3_prepare16_v3() interfaces are recommended for all new programs.
+The older interfaces (sqlite3_prepare() and sqlite3_prepare16())
+are retained for backwards compatibility, but their use is discouraged.
+In the "vX" interfaces, the prepared statement
+that is returned (the <a href="#sqlite3_stmt">sqlite3_stmt</a> object) contains a copy of the
+original SQL text. This causes the <a href="#sqlite3_step">sqlite3_step()</a> interface to
+behave differently in three ways:</p>
+
+<p><ol>
+<li>
+If the database schema changes, instead of returning <a href="#SQLITE_ABORT">SQLITE_SCHEMA</a> as it
+always used to do, <a href="#sqlite3_step">sqlite3_step()</a> will automatically recompile the SQL
+statement and try to run it again. As many as <a href="compile.html#max_schema_retry">SQLITE_MAX_SCHEMA_RETRY</a>
+retries will occur before sqlite3_step() gives up and returns an error.
+</li></p>
+
+<p><li>
+When an error occurs, <a href="#sqlite3_step">sqlite3_step()</a> will return one of the detailed
+<a href="rescode.html">error codes</a> or <a href="rescode.html#extrc">extended error codes</a>. The legacy behavior was that
+<a href="#sqlite3_step">sqlite3_step()</a> would only return a generic <a href="#SQLITE_ABORT">SQLITE_ERROR</a> result code
+and the application would have to make a second call to <a href="#sqlite3_reset">sqlite3_reset()</a>
+in order to find the underlying cause of the problem. With the "v2" prepare
+interfaces, the underlying reason for the error is returned immediately.
+</li></p>
+
+<p><li>
+If the specific value bound to a <a href="lang_expr.html#varparam">host parameter</a> in the
+WHERE clause might influence the choice of query plan for a statement,
+then the statement will be automatically recompiled, as if there had been
+a schema change, on the first <a href="#sqlite3_step">sqlite3_step()</a> call following any change
+to the <a href="#sqlite3_bind_blob">bindings</a> of that <a href="lang_expr.html#varparam">parameter</a>.
+The specific value of a WHERE-clause <a href="lang_expr.html#varparam">parameter</a> might influence the
+choice of query plan if the parameter is the left-hand side of a <a href="lang_expr.html#like">LIKE</a>
+or <a href="lang_expr.html#glob">GLOB</a> operator or if the parameter is compared to an indexed column
+and the <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time option is enabled.
+</li>
+</ol></p>
+
+<p><p>sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having
+the extra prepFlags parameter, which is a bit array consisting of zero or
+more of the <a href="#sqlitepreparepersistent">SQLITE_PREPARE_*</a> flags. The
+sqlite3_prepare_v2() interface works exactly the same as
+sqlite3_prepare_v3() with a zero prepFlags parameter.
+</p><hr><a name="sqlite3_set_authorizer"></a>
+<h2>Compile-Time Authorization Callbacks</h2>
+</div>
+<blockquote><pre>
+int sqlite3_set_authorizer(
+ sqlite3*,
+ int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
+ void *pUserData
+);
+</pre></blockquote>
+<p>
+This routine registers an authorizer callback with a particular
+<a href="#sqlite3">database connection</a>, supplied in the first argument.
+The authorizer callback is invoked as SQL statements are being compiled
+by <a href="#sqlite3_prepare">sqlite3_prepare()</a> or its variants <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a>,
+<a href="#sqlite3_prepare">sqlite3_prepare_v3()</a>, <a href="#sqlite3_prepare">sqlite3_prepare16()</a>, <a href="#sqlite3_prepare">sqlite3_prepare16_v2()</a>,
+and <a href="#sqlite3_prepare">sqlite3_prepare16_v3()</a>. At various
+points during the compilation process, as logic is being created
+to perform various actions, the authorizer callback is invoked to
+see if those actions are allowed. The authorizer callback should
+return <a href="#SQLITE_ABORT">SQLITE_OK</a> to allow the action, <a href="#SQLITE_DENY">SQLITE_IGNORE</a> to disallow the
+specific action but allow the SQL statement to continue to be
+compiled, or <a href="#SQLITE_DENY">SQLITE_DENY</a> to cause the entire SQL statement to be
+rejected with an error. If the authorizer callback returns
+any value other than <a href="#SQLITE_DENY">SQLITE_IGNORE</a>, <a href="#SQLITE_ABORT">SQLITE_OK</a>, or <a href="#SQLITE_DENY">SQLITE_DENY</a>
+then the <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> or equivalent call that triggered
+the authorizer will fail with an error message.</p>
+
+<p>When the callback returns <a href="#SQLITE_ABORT">SQLITE_OK</a>, that means the operation
+requested is ok. When the callback returns <a href="#SQLITE_DENY">SQLITE_DENY</a>, the
+<a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> or equivalent call that triggered the
+authorizer will fail with an error message explaining that
+access is denied.</p>
+
+<p>The first parameter to the authorizer callback is a copy of the third
+parameter to the sqlite3_set_authorizer() interface. The second parameter
+to the callback is an integer <a href="#SQLITE_ALTER_TABLE">action code</a> that specifies
+the particular action to be authorized. The third through sixth parameters
+to the callback are either NULL pointers or zero-terminated strings
+that contain additional details about the action to be authorized.
+Applications must always be prepared to encounter a NULL pointer in any
+of the third through the sixth parameters of the authorization callback.</p>
+
+<p>If the action code is <a href="#SQLITE_ALTER_TABLE">SQLITE_READ</a>
+and the callback returns <a href="#SQLITE_DENY">SQLITE_IGNORE</a> then the
+<a href="#sqlite3_stmt">prepared statement</a> statement is constructed to substitute
+a NULL value in place of the table column that would have
+been read if <a href="#SQLITE_ABORT">SQLITE_OK</a> had been returned. The <a href="#SQLITE_DENY">SQLITE_IGNORE</a>
+return can be used to deny an untrusted user access to individual
+columns of a table.
+When a table is referenced by a <a href="lang_select.html">SELECT</a> but no column values are
+extracted from that table (for example in a query like
+"SELECT count(*) FROM tab") then the <a href="#SQLITE_ALTER_TABLE">SQLITE_READ</a> authorizer callback
+is invoked once for that table with a column name that is an empty string.
+If the action code is <a href="#SQLITE_ALTER_TABLE">SQLITE_DELETE</a> and the callback returns
+<a href="#SQLITE_DENY">SQLITE_IGNORE</a> then the <a href="lang_delete.html">DELETE</a> operation proceeds but the
+<a href="lang_delete.html#truncateopt">truncate optimization</a> is disabled and all rows are deleted individually.</p>
+
+<p>An authorizer is used when <a href="#sqlite3_prepare">preparing</a>
+SQL statements from an untrusted source, to ensure that the SQL statements
+do not try to access data they are not allowed to see, or that they do not
+try to execute malicious statements that damage the database. For
+example, an application may allow a user to enter arbitrary
+SQL queries for evaluation by a database. But the application does
+not want the user to be able to make arbitrary changes to the
+database. An authorizer could then be put in place while the
+user-entered SQL is being <a href="#sqlite3_prepare">prepared</a> that
+disallows everything except <a href="lang_select.html">SELECT</a> statements.</p>
+
+<p>Applications that need to process SQL from untrusted sources
+might also consider lowering resource limits using <a href="#sqlite3_limit">sqlite3_limit()</a>
+and limiting database size using the <a href="pragma.html#pragma_max_page_count">max_page_count</a> <a href="pragma.html#syntax">PRAGMA</a>
+in addition to using an authorizer.</p>
+
+<p>Only a single authorizer can be in place on a database connection
+at a time. Each call to sqlite3_set_authorizer overrides the
+previous call. Disable the authorizer by installing a NULL callback.
+The authorizer is disabled by default.</p>
+
+<p>The authorizer callback must not do anything that will modify
+the database connection that invoked the authorizer callback.
+Note that <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> and <a href="#sqlite3_step">sqlite3_step()</a> both modify their
+database connections for the meaning of "modify" in this paragraph.</p>
+
+<p>When <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> is used to prepare a statement, the
+statement might be re-prepared during <a href="#sqlite3_step">sqlite3_step()</a> due to a
+schema change. Hence, the application should ensure that the
+correct authorizer callback remains in place during the <a href="#sqlite3_step">sqlite3_step()</a>.</p>
+
+<p>Note that the authorizer callback is invoked only during
+<a href="#sqlite3_prepare">sqlite3_prepare()</a> or its variants. Authorization is not
+performed during statement evaluation in <a href="#sqlite3_step">sqlite3_step()</a>, unless
+as stated in the previous paragraph, sqlite3_step() invokes
+sqlite3_prepare_v2() to reprepare a statement after a schema change.
+</p><hr><a name="sqlite3_get_autocommit"></a>
+<h2>Test For Auto-Commit Mode</h2>
+</div>
+<blockquote><pre>
+int sqlite3_get_autocommit(sqlite3*);
+</pre></blockquote>
+<p>
+The sqlite3_get_autocommit() interface returns non-zero or
+zero if the given database connection is or is not in autocommit mode,
+respectively. Autocommit mode is on by default.
+Autocommit mode is disabled by a <a href="lang_transaction.html">BEGIN</a> statement.
+Autocommit mode is re-enabled by a <a href="lang_transaction.html">COMMIT</a> or <a href="lang_transaction.html">ROLLBACK</a>.</p>
+
+<p>If certain kinds of errors occur on a statement within a multi-statement
+transaction (errors including <a href="#SQLITE_ABORT">SQLITE_FULL</a>, <a href="#SQLITE_ABORT">SQLITE_IOERR</a>,
+<a href="#SQLITE_ABORT">SQLITE_NOMEM</a>, <a href="#SQLITE_ABORT">SQLITE_BUSY</a>, and <a href="#SQLITE_ABORT">SQLITE_INTERRUPT</a>) then the
+transaction might be rolled back automatically. The only way to
+find out whether SQLite automatically rolled back the transaction after
+an error is to use this function.</p>
+
+<p>If another thread changes the autocommit status of the database
+connection while this routine is running, then the return value
+is undefined.
+</p><hr><a name="sqlite3_busy_handler"></a>
+<h2>Register A Callback To Handle SQLITE_BUSY Errors</h2>
+</div>
+<blockquote><pre>
+int sqlite3_busy_handler(sqlite3*,int(*)(void*,int),void*);
+</pre></blockquote>
+<p>
+The sqlite3_busy_handler(D,X,P) routine sets a callback function X
+that might be invoked with argument P whenever
+an attempt is made to access a database table associated with
+<a href="#sqlite3">database connection</a> D when another thread
+or process has the table locked.
+The sqlite3_busy_handler() interface is used to implement
+<a href="#sqlite3_busy_timeout">sqlite3_busy_timeout()</a> and <a href="pragma.html#pragma_busy_timeout">PRAGMA busy_timeout</a>.</p>
+
+<p>If the busy callback is NULL, then <a href="#SQLITE_ABORT">SQLITE_BUSY</a>
+is returned immediately upon encountering the lock. If the busy callback
+is not NULL, then the callback might be invoked with two arguments.</p>
+
+<p>The first argument to the busy handler is a copy of the void* pointer which
+is the third argument to sqlite3_busy_handler(). The second argument to
+the busy handler callback is the number of times that the busy handler has
+been invoked previously for the same locking event. If the
+busy callback returns 0, then no additional attempts are made to
+access the database and <a href="#SQLITE_ABORT">SQLITE_BUSY</a> is returned
+to the application.
+If the callback returns non-zero, then another attempt
+is made to access the database and the cycle repeats.</p>
+
+<p>The presence of a busy handler does not guarantee that it will be invoked
+when there is lock contention. If SQLite determines that invoking the busy
+handler could result in a deadlock, it will go ahead and return <a href="#SQLITE_ABORT">SQLITE_BUSY</a>
+to the application instead of invoking the
+busy handler.
+Consider a scenario where one process is holding a read lock that
+it is trying to promote to a reserved lock and
+a second process is holding a reserved lock that it is trying
+to promote to an exclusive lock. The first process cannot proceed
+because it is blocked by the second and the second process cannot
+proceed because it is blocked by the first. If both processes
+invoke the busy handlers, neither will make any progress. Therefore,
+SQLite returns <a href="#SQLITE_ABORT">SQLITE_BUSY</a> for the first process, hoping that this
+will induce the first process to release its read lock and allow
+the second process to proceed.</p>
+
+<p>The default busy callback is NULL.</p>
+
+<p>There can only be a single busy handler defined for each
+<a href="#sqlite3">database connection</a>. Setting a new busy handler clears any
+previously set handler. Note that calling <a href="#sqlite3_busy_timeout">sqlite3_busy_timeout()</a>
+or evaluating <a href="pragma.html#pragma_busy_timeout">PRAGMA busy_timeout=N</a> will change the
+busy handler and thus clear any previously set busy handler.</p>
+
+<p>The busy callback should not take any actions which modify the
+database connection that invoked the busy handler. In other words,
+the busy handler is not reentrant. Any such actions
+result in undefined behavior.</p>
+
+<p>A busy handler must not close the database connection
+or <a href="#sqlite3_stmt">prepared statement</a> that invoked the busy handler.
+</p><hr><a name="sqlite3_column_blob"></a>
+<h2>Result Values From A Query</h2>
+</div>
+<blockquote><pre>
+const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
+double sqlite3_column_double(sqlite3_stmt*, int iCol);
+int sqlite3_column_int(sqlite3_stmt*, int iCol);
+sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
+const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
+const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
+sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);
+int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
+int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
+int sqlite3_column_type(sqlite3_stmt*, int iCol);
+</pre></blockquote>
+<p>
+<b>Summary:</b>
+<blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td><b>sqlite3_column_blob</b><td>&rarr;<td>BLOB result
+<tr><td><b>sqlite3_column_double</b><td>&rarr;<td>REAL result
+<tr><td><b>sqlite3_column_int</b><td>&rarr;<td>32-bit INTEGER result
+<tr><td><b>sqlite3_column_int64</b><td>&rarr;<td>64-bit INTEGER result
+<tr><td><b>sqlite3_column_text</b><td>&rarr;<td>UTF-8 TEXT result
+<tr><td><b>sqlite3_column_text16</b><td>&rarr;<td>UTF-16 TEXT result
+<tr><td><b>sqlite3_column_value</b><td>&rarr;<td>The result as an
+<a href="#sqlite3_value">unprotected sqlite3_value</a> object.
+<tr><td>&nbsp;<td>&nbsp;<td>&nbsp;
+<tr><td><b>sqlite3_column_bytes</b><td>&rarr;<td>Size of a BLOB
+or a UTF-8 TEXT result in bytes
+<tr><td><b>sqlite3_column_bytes16&nbsp;&nbsp;</b>
+<td>&rarr;&nbsp;&nbsp;<td>Size of UTF-16
+TEXT in bytes
+<tr><td><b>sqlite3_column_type</b><td>&rarr;<td>Default
+datatype of the result
+</table></blockquote></p>
+
+<p><b>Details:</b></p>
+
+<p>These routines return information about a single column of the current
+result row of a query. In every case the first argument is a pointer
+to the <a href="#sqlite3_stmt">prepared statement</a> that is being evaluated (the <a href="#sqlite3_stmt">sqlite3_stmt*</a>
+that was returned from <a href="#sqlite3_prepare">sqlite3_prepare_v2()</a> or one of its variants)
+and the second argument is the index of the column for which information
+should be returned. The leftmost column of the result set has the index 0.
+The number of columns in the result can be determined using
+<a href="#sqlite3_column_count">sqlite3_column_count()</a>.</p>
+
+<p>If the SQL statement does not currently point to a valid row, or if the
+column index is out of range, the result is undefined.
+These routines may only be called when the most recent call to
+<a href="#sqlite3_step">sqlite3_step()</a> has returned <a href="#SQLITE_ABORT">SQLITE_ROW</a> and neither
+<a href="#sqlite3_reset">sqlite3_reset()</a> nor <a href="#sqlite3_finalize">sqlite3_finalize()</a> have been called subsequently.
+If any of these routines are called after <a href="#sqlite3_reset">sqlite3_reset()</a> or
+<a href="#sqlite3_finalize">sqlite3_finalize()</a> or after <a href="#sqlite3_step">sqlite3_step()</a> has returned
+something other than <a href="#SQLITE_ABORT">SQLITE_ROW</a>, the results are undefined.
+If <a href="#sqlite3_step">sqlite3_step()</a> or <a href="#sqlite3_reset">sqlite3_reset()</a> or <a href="#sqlite3_finalize">sqlite3_finalize()</a>
+are called from a different thread while any of these routines
+are pending, then the results are undefined.</p>
+
+<p>The first six interfaces (_blob, _double, _int, _int64, _text, and _text16)
+each return the value of a result column in a specific data format. If
+the result column is not initially in the requested format (for example,
+if the query returns an integer but the sqlite3_column_text() interface
+is used to extract the value) then an automatic type conversion is performed.</p>
+
+<p>The sqlite3_column_type() routine returns the
+<a href="#SQLITE_BLOB">datatype code</a> for the initial data type
+of the result column. The returned value is one of <a href="#SQLITE_BLOB">SQLITE_INTEGER</a>,
+<a href="#SQLITE_BLOB">SQLITE_FLOAT</a>, <a href="#SQLITE_BLOB">SQLITE_TEXT</a>, <a href="#SQLITE_BLOB">SQLITE_BLOB</a>, or <a href="#SQLITE_BLOB">SQLITE_NULL</a>.
+The return value of sqlite3_column_type() can be used to decide which
+of the first six interface should be used to extract the column value.
+The value returned by sqlite3_column_type() is only meaningful if no
+automatic type conversions have occurred for the value in question.
+After a type conversion, the result of calling sqlite3_column_type()
+is undefined, though harmless. Future
+versions of SQLite may change the behavior of sqlite3_column_type()
+following a type conversion.</p>
+
+<p>If the result is a BLOB or a TEXT string, then the sqlite3_column_bytes()
+or sqlite3_column_bytes16() interfaces can be used to determine the size
+of that BLOB or string.</p>
+
+<p>If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes()
+routine returns the number of bytes in that BLOB or string.
+If the result is a UTF-16 string, then sqlite3_column_bytes() converts
+the string to UTF-8 and then returns the number of bytes.
+If the result is a numeric value then sqlite3_column_bytes() uses
+<a href="#sqlite3_mprintf">sqlite3_snprintf()</a> to convert that value to a UTF-8 string and returns
+the number of bytes in that string.
+If the result is NULL, then sqlite3_column_bytes() returns zero.</p>
+
+<p>If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16()
+routine returns the number of bytes in that BLOB or string.
+If the result is a UTF-8 string, then sqlite3_column_bytes16() converts
+the string to UTF-16 and then returns the number of bytes.
+If the result is a numeric value then sqlite3_column_bytes16() uses
+<a href="#sqlite3_mprintf">sqlite3_snprintf()</a> to convert that value to a UTF-16 string and returns
+the number of bytes in that string.
+If the result is NULL, then sqlite3_column_bytes16() returns zero.</p>
+
+<p>The values returned by <a href="#sqlite3_column_blob">sqlite3_column_bytes()</a> and
+<a href="#sqlite3_column_blob">sqlite3_column_bytes16()</a> do not include the zero terminators at the end
+of the string. For clarity: the values returned by
+<a href="#sqlite3_column_blob">sqlite3_column_bytes()</a> and <a href="#sqlite3_column_blob">sqlite3_column_bytes16()</a> are the number of
+bytes in the string, not the number of characters.</p>
+
+<p>Strings returned by sqlite3_column_text() and sqlite3_column_text16(),
+even empty strings, are always zero-terminated. The return
+value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.</p>
+
+<p>Strings returned by sqlite3_column_text16() always have the endianness
+which is native to the platform, regardless of the text encoding set
+for the database.</p>
+
+<p><b>Warning:</b> The object returned by <a href="#sqlite3_column_blob">sqlite3_column_value()</a> is an
+<a href="#sqlite3_value">unprotected sqlite3_value</a> object. In a multithreaded environment,
+an unprotected sqlite3_value object may only be used safely with
+<a href="#sqlite3_bind_blob">sqlite3_bind_value()</a> and <a href="#sqlite3_result_blob">sqlite3_result_value()</a>.
+If the <a href="#sqlite3_value">unprotected sqlite3_value</a> object returned by
+<a href="#sqlite3_column_blob">sqlite3_column_value()</a> is used in any other way, including calls
+to routines like <a href="#sqlite3_value_blob">sqlite3_value_int()</a>, <a href="#sqlite3_value_blob">sqlite3_value_text()</a>,
+or <a href="#sqlite3_value_blob">sqlite3_value_bytes()</a>, the behavior is not threadsafe.
+Hence, the sqlite3_column_value() interface
+is normally only useful within the implementation of
+<a href="appfunc.html">application-defined SQL functions</a> or <a href="vtab.html">virtual tables</a>, not within
+top-level application code.</p>
+
+<p>These routines may attempt to convert the datatype of the result.
+For example, if the internal representation is FLOAT and a text result
+is requested, <a href="#sqlite3_mprintf">sqlite3_snprintf()</a> is used internally to perform the
+conversion automatically. The following table details the conversions
+that are applied:</p>
+
+<p><blockquote>
+<table border="1">
+<tr><th> Internal<br>Type <th> Requested<br>Type <th> Conversion</p>
+
+<p><tr><td> NULL <td> INTEGER <td> Result is 0
+<tr><td> NULL <td> FLOAT <td> Result is 0.0
+<tr><td> NULL <td> TEXT <td> Result is a NULL pointer
+<tr><td> NULL <td> BLOB <td> Result is a NULL pointer
+<tr><td> INTEGER <td> FLOAT <td> Convert from integer to float
+<tr><td> INTEGER <td> TEXT <td> ASCII rendering of the integer
+<tr><td> INTEGER <td> BLOB <td> Same as INTEGER->TEXT
+<tr><td> FLOAT <td> INTEGER <td> <a href="lang_expr.html#castexpr">CAST</a> to INTEGER
+<tr><td> FLOAT <td> TEXT <td> ASCII rendering of the float
+<tr><td> FLOAT <td> BLOB <td> <a href="lang_expr.html#castexpr">CAST</a> to BLOB
+<tr><td> TEXT <td> INTEGER <td> <a href="lang_expr.html#castexpr">CAST</a> to INTEGER
+<tr><td> TEXT <td> FLOAT <td> <a href="lang_expr.html#castexpr">CAST</a> to REAL
+<tr><td> TEXT <td> BLOB <td> No change
+<tr><td> BLOB <td> INTEGER <td> <a href="lang_expr.html#castexpr">CAST</a> to INTEGER
+<tr><td> BLOB <td> FLOAT <td> <a href="lang_expr.html#castexpr">CAST</a> to REAL
+<tr><td> BLOB <td> TEXT <td> <a href="lang_expr.html#castexpr">CAST</a> to TEXT, ensure zero terminator
+</table>
+</blockquote></p>
+
+<p>Note that when type conversions occur, pointers returned by prior
+calls to sqlite3_column_blob(), sqlite3_column_text(), and/or
+sqlite3_column_text16() may be invalidated.
+Type conversions and pointer invalidations might occur
+in the following cases:</p>
+
+<p><ul>
+<li> The initial content is a BLOB and sqlite3_column_text() or
+sqlite3_column_text16() is called. A zero-terminator might
+need to be added to the string.</li>
+<li> The initial content is UTF-8 text and sqlite3_column_bytes16() or
+sqlite3_column_text16() is called. The content must be converted
+to UTF-16.</li>
+<li> The initial content is UTF-16 text and sqlite3_column_bytes() or
+sqlite3_column_text() is called. The content must be converted
+to UTF-8.</li>
+</ul></p>
+
+<p>Conversions between UTF-16be and UTF-16le are always done in place and do
+not invalidate a prior pointer, though of course the content of the buffer
+that the prior pointer references will have been modified. Other kinds
+of conversion are done in place when it is possible, but sometimes they
+are not possible and in those cases prior pointers are invalidated.</p>
+
+<p>The safest policy is to invoke these routines
+in one of the following ways:</p>
+
+<p><ul>
+<li>sqlite3_column_text() followed by sqlite3_column_bytes()</li>
+<li>sqlite3_column_blob() followed by sqlite3_column_bytes()</li>
+<li>sqlite3_column_text16() followed by sqlite3_column_bytes16()</li>
+</ul></p>
+
+<p>In other words, you should call sqlite3_column_text(),
+sqlite3_column_blob(), or sqlite3_column_text16() first to force the result
+into the desired format, then invoke sqlite3_column_bytes() or
+sqlite3_column_bytes16() to find the size of the result. Do not mix calls
+to sqlite3_column_text() or sqlite3_column_blob() with calls to
+sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16()
+with calls to sqlite3_column_bytes().</p>
+
+<p>The pointers returned are valid until a type conversion occurs as
+described above, or until <a href="#sqlite3_step">sqlite3_step()</a> or <a href="#sqlite3_reset">sqlite3_reset()</a> or
+<a href="#sqlite3_finalize">sqlite3_finalize()</a> is called. The memory space used to hold strings
+and BLOBs is freed automatically. Do not pass the pointers returned
+from <a href="#sqlite3_column_blob">sqlite3_column_blob()</a>, <a href="#sqlite3_column_blob">sqlite3_column_text()</a>, etc. into
+<a href="#sqlite3_free">sqlite3_free()</a>.</p>
+
+<p>As long as the input parameters are correct, these routines will only
+fail if an out-of-memory error occurs during a format conversion.
+Only the following subset of interfaces are subject to out-of-memory
+errors:</p>
+
+<p><ul>
+<li> sqlite3_column_blob()
+<li> sqlite3_column_text()
+<li> sqlite3_column_text16()
+<li> sqlite3_column_bytes()
+<li> sqlite3_column_bytes16()
+</ul></p>
+
+<p>If an out-of-memory error occurs, then the return value from these
+routines is the same as if the column had contained an SQL NULL value.
+Valid SQL NULL returns can be distinguished from out-of-memory errors
+by invoking the <a href="#sqlite3_errcode">sqlite3_errcode()</a> immediately after the suspect
+return value is obtained and before any
+other SQLite interface is called on the same <a href="#sqlite3">database connection</a>.
+</p><hr><a name="sqlite3_file_control"></a>
+<h2>Low-Level Control Of Database Files</h2>
+</div>
+<blockquote><pre>
+int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
+</pre></blockquote>
+<p>
+The <a href="#sqlite3_file_control">sqlite3_file_control()</a> interface makes a direct call to the
+xFileControl method for the <a href="#sqlite3_io_methods">sqlite3_io_methods</a> object associated
+with a particular database identified by the second argument. The
+name of the database is "main" for the main database or "temp" for the
+TEMP database, or the name that appears after the AS keyword for
+databases that are added using the <a href="lang_attach.html">ATTACH</a> SQL command.
+A NULL pointer can be used in place of "main" to refer to the
+main database file.
+The third and fourth parameters to this routine
+are passed directly through to the second and third parameters of
+the xFileControl method. The return value of the xFileControl
+method becomes the return value of this routine.</p>
+
+<p>A few opcodes for <a href="#sqlite3_file_control">sqlite3_file_control()</a> are handled directly
+by the SQLite core and never invoke the
+sqlite3_io_methods.xFileControl method.
+The <a href="#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a> value for the op parameter causes
+a pointer to the underlying <a href="#sqlite3_file">sqlite3_file</a> object to be written into
+the space pointed to by the 4th parameter. The
+<a href="#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> works similarly except that it returns
+the <a href="#sqlite3_file">sqlite3_file</a> object associated with the journal file instead of
+the main database. The <a href="#sqlitefcntlvfspointer">SQLITE_FCNTL_VFS_POINTER</a> opcode returns
+a pointer to the underlying <a href="#sqlite3_vfs">sqlite3_vfs</a> object for the file.
+The <a href="#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> returns the data version counter
+from the pager.</p>
+
+<p>If the second parameter (zDbName) does not match the name of any
+open database file, then SQLITE_ERROR is returned. This error
+code is not remembered and will not be recalled by <a href="#sqlite3_errcode">sqlite3_errcode()</a>
+or <a href="#sqlite3_errcode">sqlite3_errmsg()</a>. The underlying xFileControl method might
+also return SQLITE_ERROR. There is no way to distinguish between
+an incorrect zDbName and an SQLITE_ERROR return from the underlying
+xFileControl method.</p>
+
+<p>See also: <a href="#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE">file control opcodes</a>
+</p><hr><a name="sqlite3_create_function"></a>
+<h2>Create Or Redefine SQL Functions</h2>
+</div>
+<blockquote><pre>
+int sqlite3_create_function(
+ sqlite3 *db,
+ const char *zFunctionName,
+ int nArg,
+ int eTextRep,
+ void *pApp,
+ void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
+ void (*xFinal)(sqlite3_context*)
+);
+int sqlite3_create_function16(
+ sqlite3 *db,
+ const void *zFunctionName,
+ int nArg,
+ int eTextRep,
+ void *pApp,
+ void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
+ void (*xFinal)(sqlite3_context*)
+);
+int sqlite3_create_function_v2(
+ sqlite3 *db,
+ const char *zFunctionName,
+ int nArg,
+ int eTextRep,
+ void *pApp,
+ void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
+ void (*xFinal)(sqlite3_context*),
+ void(*xDestroy)(void*)
+);
+int sqlite3_create_window_function(
+ sqlite3 *db,
+ const char *zFunctionName,
+ int nArg,
+ int eTextRep,
+ void *pApp,
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
+ void (*xFinal)(sqlite3_context*),
+ void (*xValue)(sqlite3_context*),
+ void (*xInverse)(sqlite3_context*,int,sqlite3_value**),
+ void(*xDestroy)(void*)
+);
+</pre></blockquote>
+<p>
+These functions (collectively known as "function creation routines")
+are used to add SQL functions or aggregates or to redefine the behavior
+of existing SQL functions or aggregates. The only differences between
+the three "sqlite3_create_function*" routines are the text encoding
+expected for the second parameter (the name of the function being
+created) and the presence or absence of a destructor callback for
+the application data pointer. Function sqlite3_create_window_function()
+is similar, but allows the user to supply the extra callback functions
+needed by <a href="windowfunctions.html#aggwinfunc">aggregate window functions</a>.</p>
+
+<p>The first parameter is the <a href="#sqlite3">database connection</a> to which the SQL
+function is to be added. If an application uses more than one database
+connection then application-defined SQL functions must be added
+to each database connection separately.</p>
+
+<p>The second parameter is the name of the SQL function to be created or
+redefined. The length of the name is limited to 255 bytes in a UTF-8
+representation, exclusive of the zero-terminator. Note that the name
+length limit is in UTF-8 bytes, not characters nor UTF-16 bytes.
+Any attempt to create a function with a longer name
+will result in <a href="#SQLITE_ABORT">SQLITE_MISUSE</a> being returned.</p>
+
+<p>The third parameter (nArg)
+is the number of arguments that the SQL function or
+aggregate takes. If this parameter is -1, then the SQL function or
+aggregate may take any number of arguments between 0 and the limit
+set by <a href="#sqlite3_limit">sqlite3_limit</a>(<a href="#sqlitelimitfunctionarg">SQLITE_LIMIT_FUNCTION_ARG</a>). If the third
+parameter is less than -1 or greater than 127 then the behavior is
+undefined.</p>
+
+<p>The fourth parameter, eTextRep, specifies what
+<a href="#SQLITE_ANY">text encoding</a> this SQL function prefers for
+its parameters. The application should set this parameter to
+<a href="#SQLITE_ANY">SQLITE_UTF16LE</a> if the function implementation invokes
+<a href="#sqlite3_value_blob">sqlite3_value_text16le()</a> on an input, or <a href="#SQLITE_ANY">SQLITE_UTF16BE</a> if the
+implementation invokes <a href="#sqlite3_value_blob">sqlite3_value_text16be()</a> on an input, or
+<a href="#SQLITE_ANY">SQLITE_UTF16</a> if <a href="#sqlite3_value_blob">sqlite3_value_text16()</a> is used, or <a href="#SQLITE_ANY">SQLITE_UTF8</a>
+otherwise. The same SQL function may be registered multiple times using
+different preferred text encodings, with different implementations for
+each encoding.
+When multiple implementations of the same function are available, SQLite
+will pick the one that involves the least amount of data conversion.</p>
+
+<p>The fourth parameter may optionally be ORed with <a href="#sqlitedeterministic">SQLITE_DETERMINISTIC</a>
+to signal that the function will always return the same result given
+the same inputs within a single SQL statement. Most SQL functions are
+deterministic. The built-in <a href="lang_corefunc.html#random">random()</a> SQL function is an example of a
+function that is not deterministic. The SQLite query planner is able to
+perform additional optimizations on deterministic functions, so use
+of the <a href="#sqlitedeterministic">SQLITE_DETERMINISTIC</a> flag is recommended where possible.</p>
+
+<p>The fourth parameter may also optionally include the <a href="#sqlitedirectonly">SQLITE_DIRECTONLY</a>
+flag, which if present prevents the function from being invoked from
+within VIEWs, TRIGGERs, CHECK constraints, generated column expressions,
+index expressions, or the WHERE clause of partial indexes.</p>
+
+<p>For best security, the <a href="#sqlitedirectonly">SQLITE_DIRECTONLY</a> flag is recommended for
+all application-defined SQL functions that do not need to be
+used inside of triggers, view, CHECK constraints, or other elements of
+the database schema. This flags is especially recommended for SQL
+functions that have side effects or reveal internal application state.
+Without this flag, an attacker might be able to modify the schema of
+a database file to include invocations of the function with parameters
+chosen by the attacker, which the application will then execute when
+the database file is opened and read.</p>
+
+<p>The fifth parameter is an arbitrary pointer. The implementation of the
+function can gain access to this pointer using <a href="#sqlite3_user_data">sqlite3_user_data()</a>.</p>
+
+<p>The sixth, seventh and eighth parameters passed to the three
+"sqlite3_create_function*" functions, xFunc, xStep and xFinal, are
+pointers to C-language functions that implement the SQL function or
+aggregate. A scalar SQL function requires an implementation of the xFunc
+callback only; NULL pointers must be passed as the xStep and xFinal
+parameters. An aggregate SQL function requires an implementation of xStep
+and xFinal and NULL pointer must be passed for xFunc. To delete an existing
+SQL function or aggregate, pass NULL pointers for all three function
+callbacks.</p>
+
+<p>The sixth, seventh, eighth and ninth parameters (xStep, xFinal, xValue
+and xInverse) passed to sqlite3_create_window_function are pointers to
+C-language callbacks that implement the new function. xStep and xFinal
+must both be non-NULL. xValue and xInverse may either both be NULL, in
+which case a regular aggregate function is created, or must both be
+non-NULL, in which case the new function may be used as either an aggregate
+or aggregate window function. More details regarding the implementation
+of aggregate window functions are
+<a href="windowfunctions.html#udfwinfunc">available here</a>.</p>
+
+<p>If the final parameter to sqlite3_create_function_v2() or
+sqlite3_create_window_function() is not NULL, then it is destructor for
+the application data pointer. The destructor is invoked when the function
+is deleted, either by being overloaded or when the database connection
+closes. The destructor is also invoked if the call to
+sqlite3_create_function_v2() fails. When the destructor callback is
+invoked, it is passed a single argument which is a copy of the application
+data pointer which was the fifth parameter to sqlite3_create_function_v2().</p>
+
+<p>It is permitted to register multiple implementations of the same
+functions with the same name but with either differing numbers of
+arguments or differing preferred text encodings. SQLite will use
+the implementation that most closely matches the way in which the
+SQL function is used. A function implementation with a non-negative
+nArg parameter is a better match than a function implementation with
+a negative nArg. A function where the preferred text encoding
+matches the database encoding is a better
+match than a function where the encoding is different.
+A function where the encoding difference is between UTF16le and UTF16be
+is a closer match than a function where the encoding difference is
+between UTF8 and UTF16.</p>
+
+<p>Built-in functions may be overloaded by new application-defined functions.</p>
+
+<p>An application-defined function is permitted to call other
+SQLite interfaces. However, such calls must not
+close the database connection nor finalize or reset the prepared
+statement in which the function is running.
+</p><hr>
+
+
diff --git a/www/carray.html b/www/carray.html
new file mode 100644
index 0000000..fec4076
--- /dev/null
+++ b/www/carray.html
@@ -0,0 +1,240 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Carray() Table-Valued Function</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Carray() Table-Valued Function
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>Carray() is a <a href="vtab.html#tabfunc2">table-valued function</a> with a single column (named
+"value") and zero or more rows.
+The "value" of each row in the carray() is taken from a C-language array
+supplied by the application via <a href="c3ref/bind_blob.html">parameter binding</a>.
+In this way, the carray() function provides a convenient mechanism to
+bind C-language arrays to SQL queries.
+
+</p><h1 id="availability"><span>2. </span>Availability</h1>
+
+<p>The carray() function is not compiled into SQLite by default.
+It is available as a <a href="loadext.html">loadable extension</a> in the
+<a href="https://www.sqlite.org/src/file/ext/misc/carray.c">ext/misc/carray.c</a>
+source file.
+
+</p><p>The carray() function was first added to SQLite in version 3.14
+(2016-08-08). The sqlite3_carray_bind() interface and the
+single-argument variant of carray() was added in SQLite version 3.34.0
+(2020-12-01).
+
+</p><h1 id="details"><span>3. </span>Details</h1>
+
+<p>The carray() function takes one, two, or three arguments.
+
+</p><p>For the two- and three-argument versions of carray(),
+the first argument is a pointer to an array. Since pointer values cannot
+be specified directly in SQL, the first argument must be a <a href="lang_expr.html#varparam">parameter</a> that
+is bound to a pointer value using the <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> interface
+using a pointer-type of "carray".
+The second argument is the number of elements in the array. The optional
+third argument is a string that determines the datatype of the elements
+in the C-language array. Allowed values for the third argument are:
+
+</p><ol>
+<li> 'int32'
+</li><li> 'int64'
+</li><li> 'double'
+</li><li> 'char*'
+</li></ol>
+
+<p>The default datatype is 'int32'.
+
+<a name="onearg"></a>
+
+</p><h2 id="single_argument_carray"><span>3.1. </span>Single-Argument CARRAY</h2>
+
+<p>The single-argument form of carray() requires a special C-language
+interface named "sqlite3_carray_bind()" in order to attach values:
+
+</p><blockquote><pre>
+ int sqlite3_carray_bind(
+ sqlite3_stmt *pStmt, /* Statement containing the CARRAY */
+ int idx, /* Parameter number for CARRAY argument */
+ void *aData, /* Data array */
+ int nData, /* Number of entries in the array */
+ int mFlags, /* Datatype flag */
+ void (*xDestroy)(void*) /* Destructor for aData */
+ );
+</pre></blockquote>
+
+<p>The mFlags parameter to sqlite3_carray_bind() must be one of:
+
+</p><blockquote><pre>
+ #define CARRAY_INT32 0
+ #define CARRAY_INT64 1
+ #define CARRAY_DOUBLE 2
+ #define CARRAY_TEXT 3
+</pre></blockquote>
+
+<p>Higher order bits of the mFlags parameter must all be zero for now,
+though they may be used in future enhancements. The definitions for the
+constants that specify the datatype and a prototype for the
+sqlite3_carray_bind() function are both available in the auxiliary
+header file
+<a href="https://www.sqlite.org/src/file/ext/misc/carray.h">ext/misc/carray.h</a>.
+
+</p><p>The xDestroy argument to sqlite3_carray_bind() routine is a pointer
+to a function that frees the input array. SQLite will invoke this
+function after it has finished with the data. The xDestroy argument
+may optionally be one of the following constants defined in
+"sqlite3.h":
+
+</p><ul>
+<li><p>
+ <a href="c3ref/c_static.html">SQLITE_STATIC</a> &rarr; This means that the application that invokes
+ sqlite3_carray_bind() maintains ownership of the data array and that
+ the application promises SQLite that it will not change or deallocate
+ the data until after the prepared statement is finialized.
+
+</p></li><li><p>
+ <a href="c3ref/c_static.html">SQLITE_TRANSIENT</a> &rarr; This special value instructs SQLite to make
+ its own private copy of the data before the
+ sqlite3_carray_bind() interface returns.
+</p></li></ul>
+
+
+<h1 id="usage"><span>4. </span>Usage</h1>
+
+<p>The carray() function can be used in the FROM clause of a query.
+For example, to query two entries from the OBJ table using rowids
+taken from a C-language array at address $PTR.
+
+</p><div class="codeblock"><pre>SELECT obj.* FROM obj, carray($PTR, 10) AS x
+ WHERE obj.rowid=x.value;
+</pre></div>
+
+<p>This query gives the same result:
+
+</p><div class="codeblock"><pre>SELECT * FROM obj WHERE rowid IN carray($PTR, 10);
+</pre></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/carray.in?m=08c42c02278a15de6">2020-11-18 14:36:04</a> UTC </small></i></p>
+
diff --git a/www/changes.html b/www/changes.html
new file mode 100644
index 0000000..eeaee2d
--- /dev/null
+++ b/www/changes.html
@@ -0,0 +1,6700 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Release History Of SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1 align=center>Release History</h1>
+
+<p>
+This page provides a high-level summary of changes to SQLite.
+For more detail, see the Fossil checkin logs at
+<a href="http://www.sqlite.org/src/timeline">
+http://www.sqlite.org/src/timeline</a> and
+<a href="http://www.sqlite.org/src/timeline?t=release">
+http://www.sqlite.org/src/timeline?t=release</a>.
+See the <a href="chronology.html">chronology</a> a succinct listing of releases.
+</p>
+
+<a name="version_3_40_1"></a>
+<h3>2022-12-28 (3.40.1)</h3><p><ol class='lessindent'>
+<li> Fix the <a href="cli.html#safemode">--safe command-line option</a> to the <a href="cli.html">CLI</a> such that it correctly disallows the
+ use of SQL functions like writefile() that can cause harmful side-effects.
+<li> Fix a potential infinite loop in the <a href="malloc.html#memsys5">memsys5</a> alternative memory allocator. This
+ bug was introduced by a performance optimization in version 3.39.0.
+<li> Various other obscure fixes.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24
+<li>SHA3-256 for sqlite3.c: 4d6800e9032ff349376fe612e422b49ba5eb4e378fac0b3e405235d09dd366ab
+
+</ol></p>
+<a name="version_3_40_0"></a>
+<h3>2022-11-16 (3.40.0)</h3><p><ol class='lessindent'>
+<li> Add support for compiling <a href="https://sqlite.org/wasm">SQLite to WASM</a>
+ and running it in web browsers. NB: The WASM build and its interfaces
+ are considered "beta" and are subject to minor changes if the need
+ arises. We anticipate finalizing the interface for the next release.
+<li> Add the <a href="recovery.html">recovery extension</a> that might be able to recover some content
+ from a corrupt database file.
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Recognize <a href="queryplanner.html#covidx">covering indexes</a> on tables with more than 63 columns where
+ columns beyond the 63rd column are used in the query and/or are
+ referenced by the index.
+ <li> Extract the values of expressions contained within <a href="expridx.html">expression indexes</a>
+ where practical, rather than recomputing the expression.
+ <li> The NOT NULL and IS NULL operators (and their equivalents) avoid
+ loading the content of large strings and BLOB values from disk.
+ <li> Avoid materializing a view on which a full scan is performed
+ exactly once. Use and discard the rows of the view as they are computed.
+ <li> Allow flattening of a subquery that is the right-hand operand of
+ a LEFT JOIN in an aggregate query.
+ </ol>
+<li> A new typedef named <a href="c3ref/filename.html">sqlite3_filename</a> is added and used to represent
+ the name of a database file. Various interfaces are
+ modified to use the new typedef instead of "char*". This interface
+ change should be fully backwards compatible, though it might cause
+ (harmless) compiler warnings when rebuilding some legacy applications.
+<li> Add the <a href="c3ref/value_blob.html">sqlite3_value_encoding()</a> interface.
+<li> Security enhancement: <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> is augmented to prohibit
+ changing the <a href="pragma.html#pragma_schema_version">schema_version</a>. The schema_version
+ becomes read-only in defensive mode.
+<li> Enhancements to the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> statement:
+ <ol type="a">
+ <li> Columns in non-STRICT tables with TEXT affinity should not contain numeric values.
+ <li> Columns in non-STRICT tables with NUMERIC affinity should not
+ contain TEXT values that could be converted into numbers.
+ <li> Verify that the rows of a <a href="withoutrowid.html">WITHOUT ROWID</a> table are in the correct order.
+ </ol>
+<li> Enhance the <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> statement so that it honors the
+ <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting.
+<li> Enhance the <a href="c3ref/strglob.html">sqlite3_strglob()</a> and <a href="c3ref/strlike.html">sqlite3_strlike()</a> APIs so that they are able
+ to accept NULL pointers for their string parameters and still generate a sensible
+ result.
+<li> Provide the new <a href="compile.html#max_allocation_size">SQLITE_MAX_ALLOCATION_SIZE</a> compile-time option for limiting
+ the size of memory allocations.
+<li> Change the algorithm used by SQLite's built-in pseudo-random number generator (PRNG)
+ from RC4 to Chacha20.
+<li> Allow two or more indexes to have the same name as long as they are all in
+ separate schemas.
+<li> Miscellaneous performance optimizations result in about 1% fewer CPU cycles
+ used on typical workloads.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-11-16 12:10:08 89c459e766ea7e9165d0beeb124708b955a4950d0f4792f457465d71b158d318
+<li>SHA3-256 for sqlite3.c: ab8da6bc754642989e67d581f26683dc705b068cea671970f0a7d32cfacbad19
+
+</ol></p>
+<a name="version_3_39_4"></a>
+<h3>2022-09-29 (3.39.4)</h3><p><ol class='lessindent'>
+<li> Fix the build on Windows so that it works with -DSQLITE_OMIT_AUTOINIT
+<li> Fix a long-standing problem in the btree balancer that might, in rare cases,
+ cause database corruption if the application uses an
+ <a href="c3ref/pcache_methods2.html">application-defined page cache</a>.
+<li> Enhance <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> so that it disallows <a href="lang_createtrigger.html">CREATE TRIGGER</a>
+ statements if one or more of the statements in the body of the trigger write
+ into <a href="vtab.html#xshadowname">shadow tables</a>.
+<li> Fix a possible integer overflow in the size computation for a memory allocation
+ in FTS3.
+<li> Fix a misuse of the <a href="c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> interface in the
+ <a href="https://sqlite.org/src/dir/ext/icu">ICU Extension</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-09-29 15:55:41 a29f9949895322123f7c38fbe94c649a9d6e6c9cd0c3b41c96d694552f26b309
+<li>SHA3-256 for sqlite3.c: f65082298127e2ddae6539beb94f5204b591df64ba2c7da83c7d0faffd6959d8
+
+</ol></p>
+<a name="version_3_39_3"></a>
+<h3>2022-09-05 (3.39.3)</h3><p><ol class='lessindent'>
+<li> Use a statement journal on DML statement affecting two or more database
+ rows if the statement makes use of a SQL functions that might abort. See
+ <a href="https://sqlite.org/forum/forumpost/9b9e4716c0d7bbd1">forum thread 9b9e4716c0d7bbd1</a>.
+<li> Use a mutex to protect the <a href="pragma.html#pragma_temp_store_directory">PRAGMA temp_store_directory</a> and
+ <a href="pragma.html#pragma_data_store_directory">PRAGMA data_store_directory</a> statements, even though they are deprecated and
+ documented as not being threadsafe. See
+ <a href="https://sqlite.org/forum/forumpost/719a11e1314d1c70">forum post 719a11e1314d1c70</a>.
+<li> Other bug and warning fixes. See the
+ <a href="https://sqlite.org/src/timeline?p=version-3.39.3&bt=version-3.39.2">timeline</a>
+ for details.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8
+<li>SHA3-256 for sqlite3.c: 2fc273cf8032b601c9e06207efa0ae80eb73d5a1d283eb91096c815fa9640257
+
+</ol></p>
+<a name="version_3_39_2"></a>
+<h3>2022-07-21 (3.39.2)</h3><p><ol class='lessindent'>
+<li> Fix a performance regression in the query planner associated with rearranging
+ the order of FROM clause terms in the presences of a LEFT JOIN.
+<li> Apply fixes for CVE-2022-35737, Chromium bugs 1343348 and 1345947,
+ <a href="https://sqlite.org/forum/forumpost/3607259d3c">forum post 3607259d3c</a>, and
+ other minor problems discovered by internal testing.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-07-21 15:24:47 698edb77537b67c41adc68f9b892db56bcf9a55e00371a61420f3ddd668e6603
+<li>SHA3-256 for sqlite3.c: bffbaafa94706f0ed234f183af3eb46e6485e7e2c75983173ded76e0da805f11
+
+</ol></p>
+<a name="version_3_39_1"></a>
+<h3>2022-07-13 (3.39.1)</h3><p><ol class='lessindent'>
+<li> Fix an incorrect result from a query that uses a view that contains a compound
+ SELECT in which only one arm contains a RIGHT JOIN and where the view is not
+ the first FROM clause term of the query that contains the view.
+ <a href="https://sqlite.org/forum/forumpost/174afeae5734d42d">forum post 174afeae5734d42d</a>.
+<li> Fix some harmless compiler warnings.
+<li> Fix a long-standing problem with <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> that can only arise
+ if the <a href="c3ref/limit.html">sqlite3_limit</a>(<a href="c3ref/c_limit_attached.html#sqlitelimitsqllength">SQLITE_LIMIT_SQL_LENGTH</a>) is set to a very small value.
+<li> Fix a long-standing problem in <a href="fts3.html">FTS3</a> that can only arise when compiled with
+ the <a href="compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.
+<li> Fix the build so that is works when the <a href="compile.html#debug">SQLITE_DEBUG</a> and
+ <a href="compile.html#omit_windowfunc">SQLITE_OMIT_WINDOWFUNC</a> compile-time options are both provided at the
+ same time.
+<li> Fix the initial-prefix optimization for the <a href="lang_expr.html#regexp">REGEXP</a> extension so that it works
+ correctly even if the prefix contains characters that require a 3-byte UTF8
+ encoding.
+<li> Enhance the <a href="stmt.html">sqlite_stmt</a> virtual table so that it buffers all of its output.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-07-13 19:41:41 7c16541a0efb3985578181171c9f2bb3fdc4bad6a2ec85c6e31ab96f3eff201f
+<li>SHA3-256 for sqlite3.c: 6d13fcf1c31133da541d1eb8a83552d746f39b81a0657bd4077fed0221749511
+
+</ol></p>
+<a name="version_3_39_0"></a>
+<h3>2022-06-25 (3.39.0)</h3><p><ol class='lessindent'>
+<li> Add (long overdue) support for <a href="lang_select.html#rjoin">RIGHT and FULL OUTER JOIN</a>.
+<li> Add new binary comparison operators <a href="lang_expr.html#isdf">IS NOT DISTINCT FROM</a> and <a href="lang_expr.html#isdf">IS DISTINCT FROM</a>
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+<li> Add a new return code (value "3") from the <a href="c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a>
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+<li> Added the <a href="c3ref/db_name.html">sqlite3_db_name()</a> interface.
+<li> The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a> flag is used with <a href="c3ref/open.html">sqlite3_open_v2()</a>
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+<li> Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+<li> The <a href="lang_select.html#resultset">HAVING clause</a> of a <a href="lang_select.html">SELECT statement</a> is now allowed on any aggregate query,
+ even queries that do not have a <a href="lang_select.html#resultset">GROUP BY clause</a>.
+<li> Many <a href="cpu.html#microopt">microoptimizations</a> collectively reduce CPU cycles by about 2.3%.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-06-25 14:57:57 14e166f40dbfa6e055543f8301525f2ca2e96a02a57269818b9e69e162e98918
+<li>SHA3-256 for sqlite3.c: d9c439cacad5e4992d0d25989cfd27a4c4f59a3183c97873bc03f0ad1aa78b7a
+
+</ol></p>
+<a name="version_3_38_5"></a>
+<h3>2022-05-06 (3.38.5)</h3><p><ol class='lessindent'>
+<li> Fix <a href="news.html#2022-05-06">a blunder</a> in the <a href="cli.html">CLI</a> of the 3.38.4 release.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-05-06 15:25:27 78d9c993d404cdfaa7fdd2973fa1052e3da9f66215cff9c5540ebe55c407d9fe
+<li>SHA3-256 for sqlite3.c: b05ef42ed234009b4b3dfb36c5f5ccf6d728da80f25ee560291269cf6cfe635f
+
+</ol></p>
+<a name="version_3_38_4"></a>
+<h3>2022-05-04 (3.38.4)</h3><p><ol class='lessindent'>
+<li> Fix a byte-code problem in the Bloom filter pull-down optimization added by release
+ 3.38.0 in which an error in the byte code causes the byte code engine to enter an
+ infinite loop when the pull-down optimization encounters a NULL key.
+ <a href='https://sqlite.org/forum/forumpost/2482b32700384a0f'>Forum thread 2482b32700384a0f</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=branch-3.38&bt=version-3.38.3'>timeline</a> for
+ details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-05-04 15:45:55 d402f49871152670a62f4f28cacb15d814f2c1644e9347ad7d258e562978e45e
+<li>SHA3-256 for sqlite3.c: e6a50effb021858c200e885664611ed3c5e949413ff2dca452ac7ee336b9de1d
+
+</ol></p>
+<a name="version_3_38_3"></a>
+<h3>2022-04-27 (3.38.3)</h3><p><ol class='lessindent'>
+<li> Fix a case of the query planner be overly aggressive with optimizing automatic-index
+ and Bloom-filter construction, using inappropriate ON clause terms to restrict the
+ size of the automatic-index or Bloom filter, and resulting in missing rows in the
+ output.
+ <a href='https://sqlite.org/forum/forumpost/0d3200f4f3bcd3a3'>Forum thread 0d3200f4f3bcd3a3</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.3&bt=version-3.38.2'>timeline</a> for
+ details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-04-27 12:03:15 9547e2c38a1c6f751a77d4d796894dec4dc5d8f5d79b1cd39e1ffc50df7b3be4
+<li>SHA3-256 for sqlite3.c: d4d66feffad66ea82073fbb97ae9c84e3615887ebc5168226ccee28d82424517
+
+</ol></p>
+<a name="version_3_38_2"></a>
+<h3>2022-03-26 (3.38.2)</h3><p><ol class='lessindent'>
+<li> Fix a user-discovered problem with the new Bloom filter optimization
+ that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
+ clause constraint that says that one of the columns on the right table of
+ the LEFT JOIN is NULL. See
+ <a href='https://sqlite.org/forum/forumpost/031e262a89b6a9d2'>forum thread 031e262a89b6a9d2</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.2&bt=version-3.38.1'>timeline</a> for
+ details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-03-26 13:51:10 d33c709cc0af66bc5b6dc6216eba9f1f0b40960b9ae83694c986fbf4c1d6f08f
+<li>SHA3-256 for sqlite3.c: 0fbac6b6999f894184899431fb77b9792324c61246b2a010d736694ccaa6d613
+
+</ol></p>
+<a name="version_3_38_1"></a>
+<h3>2022-03-12 (3.38.1)</h3><p><ol class='lessindent'>
+<li> Fix problems with the new Bloom filter optimization that might cause
+ some obscure queries to get an incorrect answer.
+<li> Fix the <a href="lang_datefunc.html#localtime">localtime modifier</a> of the <a href="lang_datefunc.html">date and time functions</a> so that
+ it preserves fractional seconds.
+<li> Fix the <a href="lang_corefunc.html#sqlite_offset">sqlite_offset SQL function</a> so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+<li> Fix <a href="rowvalue.html#rvinop">row value IN operator</a> constraints on <a href="vtab.html">virtual tables</a> so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+<li> Other minor fixes to assert() statements, test cases, and documentation.
+ See the <a href="https://sqlite.org/src/timeline?p=version-3.38.1&bt=version-3.38.0">source code timeline</a>
+ for details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc
+<li>SHA3-256 for sqlite3.c: 262ba071e960a8a0a6ce39307ae30244a2b0dc9fe1c4c09d0e1070d4353cd92c
+
+</ol></p>
+<a name="version_3_38_0"></a>
+<h3>2022-02-22 (3.38.0)</h3><p><ol class='lessindent'>
+<li> Added <a href="json1.html#jptr">the -> and ->> operators</a> for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+<li> The JSON functions are now built-ins. It is no longer necessary
+ to use the <a href="compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new <a href="compile.html#omit_json">-DSQLITE_OMIT_JSON</a> compile-time option.
+<li> Enhancements to <a href="lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added the <a href="lang_datefunc.html#uepch">unixepoch() function</a>.
+ <li> Added the <a href="lang_datefunc.html#automod">auto modifier</a> and the <a href="lang_datefunc.html#jdmod">julianday modifier</a>.
+ </ol>
+<li> Rename the <a href="lang_corefunc.html#printf">printf() SQL function</a> to <a href="lang_corefunc.html#format">format()</a> for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+<li> Added the <a href="c3ref/errcode.html">sqlite3_error_offset()</a> interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+<li> Enhanced the interface to <a href="vtab.html">virtual tables</a> as follows:
+ <ol type="a">
+ <li> Added the <a href="c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface.
+ <li> Added the <a href="c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface.
+ <li> Added new operator types <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a>
+ and <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>.
+ <li> Added the <a href="c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface (and related) to enable
+ a virtual table to process <a href="lang_expr.html#in_op">IN operator</a> constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+ </ol>
+<li> <a href="cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> <a href="cli.html#clmnr">Columnar output modes</a> are enhanced to correctly handle tabs
+ and newlines embedded in text.
+ <li> Added options like "--wrap N", "--wordwrap on", and "--quote"
+ to the <a href="cli.html#clmnr">columnar output modes</a>.
+ <li> Added the <a href="cli.html#qbox">.mode qbox</a> alias.
+ <li> The <a href="cli.html#csv">.import command</a> automatically disambiguates column names.
+ <li> Use the new <a href="c3ref/errcode.html">sqlite3_error_offset()</a> interface to provide better
+ error messages.
+ </ol>
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Use a Bloom filter to speed up large analytic queries.
+ <li> Use a balanced merge tree to evaluate UNION or UNION ALL
+ compound SELECT statements that have an ORDER BY clause.
+ </ol>
+<li> The <a href="lang_altertable.html">ALTER TABLE</a> statement is changed to silently ignores entries in the
+ <a href="schematab.html">sqlite_schema table</a> that do not parse when <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-02-22 18:58:40 40fa792d359f84c3b9e9d6623743e1a59826274e221df1bde8f47086968a1bab
+
+<li>SHA3-256 for sqlite3.c: a69af0a88d59271a2dd3c846a3e93cbd29e7c499864f6c0462a3b4160bee1762
+
+</ol></p>
+<a name="version_3_37_2"></a>
+<h3>2022-01-06 (3.37.2)</h3><p><ol class='lessindent'>
+<li> Fix <a href="https://sqlite.org/forum/forumpost/b03d86f9516cb3a2">a bug</a> introduced
+ in <a href="#version_3_35_0">version 3.35.0</a> (2021-03-12) that
+ <a href="howtocorrupt.html#svptbug">can cause database corruption</a>
+ if a <a href="lang_savepoint.html">SAVEPOINT</a> is rolled back while in <a href="pragma.html#pragma_temp_store">PRAGMA temp_store=MEMORY</a> mode,
+ and other changes are made, and then the outer transaction commits.
+ <a href="https://sqlite.org/src/info/73c2b50211d3ae26">Check-in 73c2b50211d3ae26</a>
+<li> Fix a long-standing problem with ON DELETE CASCADE and ON UPDATE CASCADE
+ in which a cache of the <a href="opcode.html">bytecode</a> used to implement the cascading change
+ was not being reset following a local DDL change.
+ <a href="https://sqlite.org/src/info/5232c9777fe4fb13">Check-in 5232c9777fe4fb13</a>.
+<li> Other minor fixes that should not impact production builds.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5d17a0
+<li>SHA3-256 for sqlite3.c: 1bb01c382295cba85ec4685cedc52a7477cdae71cc37f1ad0f48719a17af1e1e
+
+</ol></p>
+<a name="version_3_37_1"></a>
+<h3>2021-12-30 (3.37.1)</h3><p><ol class='lessindent'>
+<li> Fix a bug introduced by the <a href="lang_upsert.html">UPSERT</a> enhancements of <a href="#version_3_35_0">version 3.35.0</a> that
+ can cause incorrect byte-code to be generated for some obscure but valid
+ SQL, possibly resulting in a NULL-pointer dereference.
+<li> Fix an OOB read that can occur in <a href="fts5.html">FTS5</a> when reading corrupt database files.
+<li> Improved robustness of the --safe option in the <a href="cli.html">CLI</a>.
+<li> Other minor fixes to assert() statements and test cases.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-12-30 15:30:28 378629bf2ea546f73eee84063c5358439a12f7300e433f18c9e1bddd948dea62
+<li>SHA3-256 for sqlite3.c: 915afb3f29c2d217ea0c283326a9df7d505e6c73b40236f0b33ded91f812d174
+
+</ol></p>
+<a name="version_3_37_0"></a>
+<h3>2021-11-27 (3.37.0)</h3><p><ol class='lessindent'>
+<li> <a href="stricttables.html">STRICT tables</a> provide a prescriptive style of data type management,
+ for developers who prefer that kind of thing.
+<li> When adding columns that contain a
+ <a href="lang_createtable.html#ckconst">CHECK constraint</a> or a <a href="gencol.html">generated column</a> containing a <a href="lang_createtable.html#notnullconst">NOT NULL constraint</a>,
+ the <a href="lang_altertable.html#altertabaddcol">ALTER TABLE ADD COLUMN</a> now checks new constraints against
+ preexisting rows in the database and will only proceed if no constraints
+ are violated.
+<li> Added the <a href="pragma.html#pragma_table_list">PRAGMA table_list</a> statement.
+<li> <a href="cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Add the <a href="cli.html#dotconn">.connection</a> command, allowing the CLI to keep multiple database
+ connections open at the same time.
+ <li> Add the <a href="cli.html#safemode">--safe command-line option</a> that disables
+ <a href="cli.html#dotcmd">dot-commands</a> and SQL statements that might cause side-effects that extend
+ beyond the single database file named on the command-line.
+ <li> Performance improvements when reading SQL statements
+ that span many lines.
+ </ol>
+<li> Added the <a href="c3ref/autovacuum_pages.html">sqlite3_autovacuum_pages()</a> interface.
+<li> The <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> does not and has never worked for the TEMP
+ database. That limitation is now noted in the documentation.
+<li> The query planner now omits ORDER BY clauses on subqueries and views
+ if removing those clauses does not change the semantics of the query.
+<li> The <a href="series.html">generate_series</a> table-valued function extension is modified so that
+ the first parameter ("START") is now required. This is done as a way to
+ demonstrate how to write table-valued functions with required parameters.
+ The legacy behavior is available using the -DZERO_ARGUMENT_GENERATE_SERIES
+ compile-time option.
+<li> Added new <a href="c3ref/changes.html">sqlite3_changes64()</a> and <a href="c3ref/total_changes.html">sqlite3_total_changes64()</a> interfaces.
+<li> Added the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXRESCODE</a> flag option to <a href="c3ref/open.html">sqlite3_open_v2()</a>.
+<li> Use less memory to hold the database schema.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-11-27 14:13:22 bd41822c7424d393a30e92ff6cb254d25c26769889c1499a18a0b9339f5d6c8a
+<li>SHA3-256 for sqlite3.c: a202a950ab401cda052e81259e96d6e64ad91faaaaf5690d769f64c2ab962f27
+
+</ol></p>
+<a name="version_3_36_0"></a>
+<h3>2021-06-18 (3.36.0)</h3><p><ol class='lessindent'>
+<li> Improvement to the <a href="eqp.html">EXPLAIN QUERY PLAN</a> output to make it easier to
+ understand.
+<li> Byte-order marks at the start of a token are skipped as if they
+ were whitespace.
+<li> An error is raised on any attempt to access the <a href="lang_createtable.html#rowid">rowid</a> of a VIEW or subquery.
+ Formerly, the rowid of a VIEW would be indeterminate and often would be NULL.
+ The -DSQLITE_ALLOW_ROWID_IN_VIEW compile-time option is available to restore
+ the legacy behavior for applications that need it.
+<li> The <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> and <a href="c3ref/serialize.html">sqlite3_serialize()</a> interfaces are now
+ enabled by default. The -DSQLITE_ENABLE_DESERIALIZE compile-time option is
+ no longer required. Instead, there is a new <a href="compile.html#omit_deserialize">-DSQLITE_OMIT_DESERIALIZE</a>
+ compile-time option to omit those interfaces.
+<li> The "memdb" VFS now allows the same in-memory database to be shared among
+ multiple database connections in the same process as long as the
+ database name begins with "/".
+<li> Back out the EXISTS-to-IN optimization (item 8b in the
+ <a href="#version_3_35_0">SQLite 3.35.0 change log</a>)
+ as it was found to slow down queries more often than speed them up.
+<li> Improve the <a href="optoverview.html#constprop">constant-propagation optimization</a> so that it works on
+ non-join queries.
+<li> The <a href="https://sqlite.org/src/file/ext/misc/regexp.c">REGEXP extension</a> is
+ now included in <a href="cli.html">CLI</a> builds.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-06-18 18:36:39 5c9a6c06871cb9fe42814af9c039eb6da5427a6ec28f187af7ebfb62eafa66e5
+<li>SHA3-256 for sqlite3.c: 2a8e87aaa414ac2d45ace8eb74e710935423607a8de0fafcb36bbde5b952d157
+
+</ol></p>
+<a name="version_3_35_5"></a>
+<h3>2021-04-19 (3.35.5)</h3><p><ol class='lessindent'>
+<li> Fix defects in the new ALTER TABLE DROP COLUMN feature that could
+ corrupt the database file.
+<li> Fix an obscure query optimizer problem that might cause an incorrect
+ query result.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98fae886
+<li>SHA3-256 for sqlite3.c: e42291343e8f03940e57fffcf1631e7921013b94419c2f943e816d3edf4e1bbe
+
+</ol></p>
+<a name="version_3_35_4"></a>
+<h3>2021-04-02 (3.35.4)</h3><p><ol class='lessindent'>
+<li> Fix a defect in the query planner optimization identified by
+ item 8b above. Ticket
+ <a href="https://sqlite.org/src/info/de7db14784a08053">de7db14784a08053</a>.
+<li> Fix a defect in the new <a href="lang_returning.html">RETURNING</a> syntax. Ticket
+ <a href="https://sqlite.org/src/info/132994c8b1063bfb">132994c8b1063bfb</a>.
+<li> Fix the new <a href="lang_returning.html">RETURNING</a> feature so that it raises an error if one of
+ the terms in the RETURNING clause references a unknown table, instead
+ of silently ignoring that error.
+<li> Fix an assertion associated with aggregate function processing that
+ was incorrectly triggered by the <a href="optoverview.html#pushdown">push-down optimization</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e
+<li>SHA3-256 for sqlite3.c: 528b8a26bf5ffd4c7b4647b5b799f86e8fb1a075f715b87a414e94fba3d09dbe
+
+</ol></p>
+<a name="version_3_35_3"></a>
+<h3>2021-03-26 (3.35.3)</h3><p><ol class='lessindent'>
+<li> Enhance the OP_OpenDup opcode of the <a href="opcode.html">bytecode engine</a> so that it works even if the
+ cursor being duplicated itself came from OP_OpenDup. Fix for
+ <a href="https://www.sqlite.org/src/info/bb8a9fd4a9b7fce5">ticket bb8a9fd4a9b7fce5</a>.
+ This problem only came to light due to the recent MATERIALIZED hint enhancement.
+<li> When materializing correlated <a href="lang_with.html">common table expressions</a>, do so separately for each
+ use case, as that is required for correctness. This fixes a problem that was
+ introduced by the MATERIALIZED hint enhancement.
+<li> Fix a problem in the filename normalizer of the unix <a href="vfs.html">VFS</a>.
+<li> Fix the <a href="cli.html#dotmode">"box" output mode</a> in the <a href="cli.html">CLI</a> so that it works with statements that
+ returns one or more rows of zero columns (such as <a href="pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>).
+ <a href="https://sqlite.org/forum/forumpost/afbbcb5b72">Forum post afbbcb5b72</a>.
+<li> Improvements to error messages generated by faulty common table expressions.
+ <a href="https://sqlite.org/forum/forumpost/aa5a0431c99e631">Forum post aa5a0431c99e</a>.
+<li> Fix some incorrect assert() statements.
+<li> Fix to the <a href="syntax/select-stmt.html">SELECT statement syntax diagram</a> so that the FROM clause
+ syntax is shown correctly.
+ <a href="https://sqlite.org/forum/forumpost/9ed02582fe">Forum post 9ed02582fe</a>.
+<li> Fix the EBCDIC character classifier so that it understands newlines as whitespace.
+ <a href="https://sqlite.org/forum/forumpost/58540ce22dcd5fdcd">Forum post 58540ce22dcd</a>.
+<li> Improvements the <a href="vtab.html#xbestindex">xBestIndex</a> method in the implementation of the
+ (unsupported) <a href="https://sqlite.org/src/file/ext/misc/wholenumber.c">wholenumber virtual table</a>
+ extension so that it does a better job of convincing the query planner to
+ avoid trying to materialize a table with an infinite number of rows.
+ <a href="https://sqlite.org/forum/forumpost/b52a020ce4">Forum post b52a020ce4</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a
+<li>SHA3-256 for sqlite3.c: 91ca6c0a30ebfdba4420bb35f4fd9149d13e45fc853d86ad7527db363e282683
+
+</ol></p>
+<a name="version_3_35_2"></a>
+<h3>2021-03-17 (3.35.2)</h3><p><ol class='lessindent'>
+<li> Fix a problem in the
+ <a href="http://www.sqlite.org/src/file/ext/misc/appendvfs.c">appendvfs.c</a>
+ extension that was introduced into version 3.35.0.
+<li> Ensure that date/time functions with no arguments (which generate
+ responses that depend on the current time) are treated as
+ <a href="deterministic.html">non-deterministic functions</a>. Ticket
+ <a href="https://sqlite.org/src/info/2c6c8689fb5f3d2f">2c6c8689fb5f3d2f</a>
+<li> Fix a problem in the <a href="sqldiff.html">sqldiff</a> utility program having to do with
+ unusual whitespace characters in a <a href="vtab.html">virtual table</a> definition.
+<li> Limit the new UNION ALL optimization described by item 8c in the
+ 3.35.0 release so that it does not try to make too many new subqueries.
+ See <a href="https://sqlite.org/forum/forumpost/140a67d3d2">forum thread 140a67d3d2</a>
+ for details.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827
+<li>SHA3-256 for sqlite3.c: e8edc7b1512a2e050d548d0840bec6eef83cc297af1426c34c0ee8720f378a11
+
+</ol></p>
+<a name="version_3_35_1"></a>
+<h3>2021-03-15 (3.35.1)</h3><p><ol class='lessindent'>
+<li> Fix <a href="https://www.sqlite.org/src/info/1c24a659e6d7f3a1">a bug</a> in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+<li> Improve the built-in documentation for the <a href="cli.html#dump">.dump</a> command in the <a href="cli.html">CLI</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-15 16:53:57 aea12399bf1fdc76af43499d4624c3afa17c3e6c2459b71c195804bb98def66a
+<li>SHA3-256 for sqlite3.c: fc79e27fd030226c07691b7d7c23aa81c8d46bc3bef5af39060e1507c82b0523
+
+</ol></p>
+<a name="version_3_35_0"></a>
+<h3>2021-03-12 (3.35.0)</h3><p><ol class='lessindent'>
+<li> Added <a href="lang_mathfunc.html">built-in SQL math functions()</a>. (Requires the
+ <a href="compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> compile-time option.)
+<li> Added support for <a href="lang_altertable.html#altertabdropcol">ALTER TABLE DROP COLUMN</a>.
+<li> Generalize <a href="lang_upsert.html">UPSERT</a>:
+ <ol type="a">
+ <li> Allow multiple ON CONFLICT clauses that are evaluated in order,
+ <li> The final ON CONFLICT clause may omit the conflict target and
+ yet still use DO UPDATE.
+ </ol>
+<li> Add support for the <a href="lang_returning.html">RETURNING</a> clause on <a href="lang_delete.html">DELETE</a>, <a href="lang_insert.html">INSERT</a>, and
+ <a href="lang_update.html">UPDATE</a> statements.
+<li> Use less memory when running <a href="lang_vacuum.html">VACUUM</a> on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+<li> Add support for the <a href="lang_with.html#mathint">MATERIALIZED</a> and <a href="lang_with.html#mathint">NOT MATERIALIZED</a> hints when
+ specifying <a href="lang_with.html">common table expressions</a>. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+<li> The <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a> and <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a>
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+<li> Query planner/optimizer improvements:
+ <ol type="a">
+ <li> Enhancements to the <a href="optoverview.html#minmax">min/max optimization</a> so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+ <li> Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+ <li> Allow UNION ALL sub-queries to be <a href="optoverview.html#flattening">flattened</a> even if the parent query is a join.
+ <li> Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+ <li> Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+ <li> Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+ <li> Allow WHERE terms to be <a href="optoverview.html#pushdown">pushed down</a> into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+ </ol>
+<li> <a href="cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+ <li> Add the ".filectrl data_version" command.
+ <li> Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+ </ol>
+<li> Bug fixes:
+ <ol type="a">
+ <li> Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+ <li> Fix a <a href="https://www.sqlite.org/src/info/ee51301f316c09e9">bug in the IN-operator optimization</a>
+ of version 3.33.0 that can cause an incorrect answer.
+ <li> Fix incorrect answers from the <a href="lang_expr.html#like">LIKE operator</a> if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+ </ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-12 15:10:09 acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
+<li>SHA3-256 for sqlite3.c: 73a740d881735bef9de7f7bce8c9e6b9e57fe3e77fa7d76a6e8fc5c262fbaedf
+
+</ol></p>
+<a name="version_3_34_1"></a>
+<h3>2021-01-20 (3.34.1)</h3><p><ol class='lessindent'>
+<li> Fix a potential use-after-free bug when processing a a subquery with both
+ a correlated WHERE clause and a "HAVING 0" clause and where the parent
+ query is an aggregate.
+<li> Fix documentation typos
+<li> Fix minor problems in extensions.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-01-20 14:10:07 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
+<li>SHA3-256 for sqlite3.c: 799a7be90651fc7296113b641a70b028c142d767b25af1d0a78f93dcf1a2bf20
+
+</ol></p>
+<a name="version_3_34_0"></a>
+<h3>2020-12-01 (3.34.0)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/txn_state.html">sqlite3_txn_state()</a> interface for reporting on the current
+ transaction state of the database connection.
+<li> Enhance <a href="lang_with.html#recursivecte">recursive common table expressions</a> to support two or more
+ recursive terms as is done by SQL Server, since this helps make
+ <a href="lang_with.html#rcex3">queries against graphs</a> easier to write and faster to execute.
+<li> Improved error messages on <a href="lang_createtable.html#ckconst">CHECK constraint</a> failures.
+<li> <a href="cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> The <a href="cli.html#dotread">.read</a> dot-command now accepts a pipeline in addition to
+ a filename.
+ <li> Added options --data-only and --nosys to the <a href="cli.html#dump">.dump</a> dot-command.
+ <li> Added the --nosys option to the <a href="cli.html#dschema">.schema</a> dot-command.
+ <li> Table name quoting works correctly for the <a href="cli.html#csv">.import</a> dot-command.
+ <li> The <a href="series.html">generate_series(START,END,STEP)</a> table-valued function
+ extension is now built into the CLI.
+ <li> The <a href="cli.html#dotdatabases">.databases</a> dot-command now shows the status of each database
+ file as determined by <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> and
+ <a href="c3ref/txn_state.html">sqlite3_txn_state()</a>.
+ <li> Added the --tabs command-line option that sets
+ <a href="cli.html#dotmode">.mode tabs</a>.
+ <li> The --init option reports an error if the file named as its argument
+ cannot be opened. The --init option also now honors the --bail option.
+ </ol>
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Improved estimates for the cost of running a DISTINCT operator.
+ <li> When doing an UPDATE or DELETE using a multi-column index where
+ only a few of the earlier columns of the index are useful for the
+ index lookup, postpone doing the main table seek until after all
+ WHERE clause constraints have been evaluated, in case those
+ constraints can be covered by unused later terms of the index,
+ thus avoiding unnecessary main table seeks.
+ <li> The new OP_SeekScan opcode is used to improve performance of
+ multi-column index look-ups when later columns are constrained
+ by an IN operator.
+ </ol>
+<li> The <a href="lang_transaction.html#immediate">BEGIN IMMEDIATE</a> and <a href="lang_transaction.html#immediate">BEGIN EXCLUSIVE</a> commands now work even
+ if one or more attached database files are read-only.
+<li> Enhanced <a href="fts5.html">FTS5</a> to support <a href="fts5.html#trigramidx">trigram indexes</a>.
+<li> Improved performance of <a href="wal.html">WAL mode</a> locking primitives in cases where
+ there are hundreds of connections all accessing the same database file
+ at once.
+<li> Enhanced the <a href="carray.html">carray() table-valued function</a> to include a single-argument
+ form that is bound using the auxiliary <a href="carray.html#onearg">sqlite3_carray_bind()</a> interface.
+<li> The <a href="lang_corefunc.html#substr">substr() SQL function</a> can now also be called "substring()" for
+ compatibility with SQL Server.
+<li> The <a href="syntaxdiagrams.html">syntax diagrams</a> are now implemented as
+ <a href='https://pikchr.org/'>Pikchr</a> scripts and rendered
+ as SVG for improved legibility and ease of maintenance.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b
+<li>SHA3-256 for sqlite3.c: fbd895b0655a337b2cd657675f314188a4e9fe614444cc63dfeb3f066f674514
+
+
+</ol></p>
+<a name="version_3_33_0"></a>
+<h3>2020-08-14 (3.33.0)</h3><p><ol class='lessindent'>
+<li> Support for <a href="lang_update.html#upfrom">UPDATE FROM</a> following the PostgreSQL syntax.
+<li> Increase the maximum size of database files to 281 TB.
+<li> Extended the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> statement so that it can optionally be
+ limited to verifying just a single table and its indexes, rather than the
+ entire database file.
+<li> Added the <a href="floatingpoint.html#decext">decimal extension</a> for doing arbitrary-precision decimal arithmetic.
+<li> Enhancements to the <a href="floatingpoint.html#ieee754ext">ieee754 extension</a> for working with IEEE 754 binary64 numbers.
+<li> <a href="cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Added four new <a href="cli.html#dotmode">output modes</a>: "box", "json", "markdown",
+ and "table".
+ <li> The "column" output mode automatically expands columns to
+ contain the longest output row and automatically turns
+ ".header" on if it has not been previously set.
+ <li> The "quote" output mode honors ".separator"
+ <li> The <a href="floatingpoint.html#decext">decimal extension</a> and the <a href="floatingpoint.html#ieee754ext">ieee754 extension</a> are built-in to the CLI
+ </ol>
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Add the ability to find a
+ full-index-scan query plan for queries using <a href="lang_indexedby.html">INDEXED BY</a>
+ which previously would fail with "no query solution".
+ <li> Do a better job of
+ detecting missing, incomplete, and/or dodgy <a href="fileformat2.html#stat1tab">sqlite_stat1</a>
+ data and generates good query plans in spite of the
+ misinformation.
+ <li> Improved performance of queries like "SELECT min(x) FROM t WHERE y IN (?,?,?)"
+ assuming an index on t(x,y).
+ </ol>
+<li> In <a href="wal.html">WAL mode</a>, if a writer crashes and leaves the <a href="walformat.html#shm">shm file</a> in an inconsistent
+ state, subsequent transactions are now able to recover the shm file even if
+ there are active read transactions. Before this enhancement, shm file recovery
+ that scenario would result in an <a href="rescode.html#protocol">SQLITE_PROTOCOL</a> error.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f
+<li>SHA3-256 for sqlite3.c: d00b7fffa6d33af2303430eaf394321da2960604d25a4471c7af566344f2abf9
+
+</ol></p>
+<a name="version_3_32_3"></a>
+<h3>2020-06-18 (3.32.3)</h3><p><ol class='lessindent'>
+<li> Various minor bug fixes including fixes for tickets
+ <a href="https://www.sqlite.org/src/info/8f157e8010b22af0">8f157e8010b22af0</a>,
+ <a href="https://www.sqlite.org/src/info/9fb26d37cefaba40">9fb26d37cefaba40</a>,
+ <a href="https://www.sqlite.org/src/info/e367f31901ea8700">e367f31901ea8700</a>,
+ <a href="https://www.sqlite.org/src/info/b706351ce2ecf59a">b706351ce2ecf59a</a>,
+ <a href="https://www.sqlite.org/src/info/7c6d876f84e6e7e2">7c6d876f84e6e7e2</a>, and
+ <a href="https://www.sqlite.org/src/info/c8d3b9f0a750a529">c8d3b9f0a750a529</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd
+<li>SHA3-256 for sqlite3.c: b62b77ee1c561a69a71bb557694aaa5141f1714c1ff6cc1ba8aa8733c92d4f52
+
+</ol></p>
+<a name="version_3_32_2"></a>
+<h3>2020-06-04 (3.32.2)</h3><p><ol class='lessindent'>
+<li> Fix a long-standing bug in the byte-code engine that can cause a
+ <a href="lang_transaction.html">COMMIT</a> command report as success when in fact it failed
+ to commit. Ticket
+ <a href="https://www.sqlite.org/src/info/810dc8038872e212">810dc8038872e212</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c
+<li>SHA3-256 for sqlite3.c: f17a2a57f7eebc72d405f3b640b4a49bcd02364a9c36e04feeb145eccafa3f8d
+
+</ol></p>
+<a name="version_3_32_1"></a>
+<h3>2020-05-25 (3.32.1)</h3><p><ol class='lessindent'>
+<li> Fix two long-standing bugs that allow malicious SQL statements
+ to crash the process that is running SQLite. These bugs were announced
+ by a third-party approximately 24 hours after the 3.32.0 release but are
+ not specific to the 3.32.0 release.
+<li> Other minor compiler-warning fixes and whatnot.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-05-25 16:19:56 0c1fcf4711a2e66c813aed38cf41cd3e2123ee8eb6db98118086764c4ba83350
+<li>SHA3-256 for sqlite3.c: f695ae21abf045e4ee77980a67ab2c6e03275009e593ee860a2eabf840482372
+
+</ol></p>
+<a name="version_3_32_0"></a>
+<h3>2020-05-22 (3.32.0)</h3><p><ol class='lessindent'>
+<li> Added support for <a href="lang_analyze.html#approx">approximate ANALYZE</a> using the
+ <a href="pragma.html#pragma_analysis_limit">PRAGMA analysis_limit</a> command.
+<li> Added the <a href="bytecodevtab.html">bytecode virtual table</a>.
+<li> Add the <a href="cksumvfs.html">checksum VFS shim</a> to the set of run-time loadable
+ extensions included in the source tree.
+<li> Added the <a href="lang_corefunc.html#iif">iif() SQL function</a>.
+<li> INSERT and UPDATE statements now always apply <a href="datatype3.html#affinity">column affinity</a>
+ before computing <a href="lang_createtable.html#ckconst">CHECK constraints</a>. This bug fix could, in
+ theory, cause problems for legacy databases with unorthodox
+ CHECK constraints the require the input type for an INSERT
+ is different from the declared column type. See ticket
+ <a href="https://sqlite.org/src/info/86ba67afafded936">86ba67afafded936</a>
+ for more information.
+<li> Added the <a href="c3ref/create_filename.html">sqlite3_create_filename()</a>, <a href="c3ref/create_filename.html">sqlite3_free_filename()</a>,
+ and <a href="c3ref/database_file_object.html">sqlite3_database_file_object()</a>
+ interfaces to better support of <a href="vfs.html#shim">VFS shim</a> implementations.
+<li> Increase the <a href="limits.html#max_variable_number">default upper bound</a>
+ on the number of <a href="lang_expr.html#varparam">parameters</a> from 999 to 32766.
+<li> Added code for the <a href="uintcseq.html">UINT collating sequence</a> as an optional
+ <a href="loadext.html">loadable extension</a>.
+<li> Enhancements to the <a href="cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add options to the <a href="cli.html#csv">.import</a> command: --csv, --ascii, --skip
+ <li> The <a href="cli.html#dump">.dump</a> command now accepts multiple LIKE-pattern arguments
+ and outputs the union of all matching tables.
+ <li> Add the .oom command in debugging builds
+ <li> Add the --bom option to the <a href="cli.html#dotexcel">.excel</a>, <a href="cli.html#dotoutput">.output</a>, and <a href="cli.html#dotoutput">.once</a>
+ commands.
+ <li> Enhance the .filectrl command to support the --schema option.
+ <li> The <a href="uintcseq.html">UINT collating sequence</a> extension is automatically loaded
+ </ol>
+<li> The <a href="lang_expr.html#like">ESCAPE</a> clause of a <a href="lang_expr.html#like">LIKE</a> operator now overrides wildcard
+ characters, so that the behavior matches what PostgreSQL does.
+<li>SQLITE_SOURCE_ID: 2020-05-22 17:46:16 5998789c9c744bce92e4cff7636bba800a75574243d6977e1fc8281e360f8d5a
+<li>SHA3-256 for sqlite3.c: 33ed868b21b62ce1d0352ed88bdbd9880a42f29046497a222df6459fc32a356f
+
+</ol></p>
+<a name="version_3_31_1"></a>
+<h3>2020-01-27 (3.31.1)</h3><p><ol class='lessindent'>
+<li> Revert the data layout for an internal-use-only SQLite data structure.
+ Applications that use SQLite should never reference internal SQLite
+ data structures, but some do anyhow, and a change to one such
+ data structure in 3.30.0 broke a popular and widely-deployed
+ application. Reverting that change in SQLite, at least temporarily,
+ gives developers of misbehaving applications time to fix their code.
+<li> Fix a typos in the sqlite3ext.h header file that prevented the
+ <a href="c3ref/stmt_isexplain.html">sqlite3_stmt_isexplain()</a> and <a href="c3ref/value_blob.html">sqlite3_value_frombind()</a> interfaces
+ from being called from <a href="loadext.html">run-time loadable extensions</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6
+<li>SHA3-256 for sqlite3.c: de465c64f09529429a38cbdf637acce4dfda6897f93e3db3594009e0fed56d27
+
+</ol></p>
+<a name="version_3_31_0"></a>
+<h3>2020-01-22 (3.31.0)</h3><p><ol class='lessindent'>
+<li>Add support for <a href="gencol.html">generated columns</a>.
+<li>Add the <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a> interface and the corresponding
+ <a href="pragma.html#pragma_hard_heap_limit">PRAGMA hard_heap_limit</a> command.
+<li>Enhance the <a href="pragma.html#pragma_function_list">function_list pragma</a> to show the number of arguments on each
+ function, the type of function (scalar, aggregate, window), and the function
+ property flags <a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a>, <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>,
+ <a href="c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a>, and/or <a href="c3ref/c_deterministic.html#sqlitesubtype">SQLITE_SUBTYPE</a>.
+<li>Add the <a href="dbstat.html#dbstatagg">aggregated mode</a> feature to the
+ <a href="dbstat.html">DBSTAT virtual table</a>.
+<li>Add the <a href="c3ref/open.html#opennofollow">SQLITE_OPEN_NOFOLLOW</a> option to <a href="c3ref/open.html">sqlite3_open_v2()</a> that
+ prevents SQLite from opening symbolic links.
+<li>Added the "#-N" array notation for <a href="json1.html#jsonpath">JSON function path arguments</a>.
+<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a> connection setting which is
+ also controllable via the new <a href="pragma.html#pragma_trusted_schema">trusted_schema pragma</a> and at compile-time
+ using the <a href="compile.html#trusted_schema">-DSQLITE_TRUSTED_SCHEMA</a> compile-time option.
+<li>Added APIs <a href="c3ref/filename_database.html">sqlite3_filename_database()</a>, <a href="c3ref/filename_database.html">sqlite3_filename_journal()</a>, and
+ <a href="c3ref/filename_database.html">sqlite3_filename_wal()</a> which are useful for specialized extensions.
+<li>Add the <a href="c3ref/uri_boolean.html">sqlite3_uri_key()</a> interface.
+<li>Upgraded the <a href="c3ref/uri_boolean.html">sqlite3_uri_parameter()</a> function so that it works with the
+ rollback journal or WAL filename in addition to the database filename.
+<li>Provide the ability to tag <a href="appfunc.html">application-defined SQL functions</a> with
+ new properties <a href="c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a> or <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>.
+<li>Add new verbs to <a href="c3ref/vtab_config.html">sqlite3_vtab_config()</a> so that the <a href="vtab.html#xconnect">xConnect</a> method
+ of virtual tables can declare the virtual table as
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> or <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">SQLITE_VTAB_DIRECTONLY</a>.
+<li>Faster response to <a href="c3ref/interrupt.html">sqlite3_interrupt()</a>.
+<li>Added the <a href="https://sqlite.org/src/file/ext/misc/uuid.c">uuid.c</a> extension module
+ implementing functions for processing RFC-4122 UUIDs.
+<li>The <a href="malloc.html#lookaside">lookaside memory allocator</a> is enhanced to support two separate memory
+ pools with different sized allocations in each pool. This allows more memory
+ allocations to be covered by lookaside while at the same time reducing the
+ heap memory usage to 48KB per connection, down from 120KB.
+<li>The <a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a> is deactivated. It is now a no-op. In its place,
+ the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</a> option to <a href="c3ref/db_config.html">sqlite3_db_config()</a> is
+ provided. The legacy_file_format pragma is deactivated because (1) it is
+ rarely useful and (2) it is incompatible with <a href="lang_vacuum.html">VACUUM</a> in schemas that have
+ tables with both generated columns and descending indexes.
+ Ticket <a href="https://www.sqlite.org/src/info/6484e6ce678fffab">6484e6ce678fffab</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-01-22 18:38:59 f6affdd41608946fcfcea914ece149038a8b25a62bbe719ed2561c649b86d824
+<li>SHA3-256 for sqlite3.c: a5fca0b9f8cbf80ac89b97193378c719d4af4b7d647729d8df9c0c0fca7b1388
+
+</ol></p>
+<a name="version_3_30_1"></a>
+<h3>2019-10-10 (3.30.1)</h3><p><ol class='lessindent'>
+<li> Fix a bug in the <a href="optoverview.html#flattening">query flattener</a> that might cause a segfault
+for nested queries that use the new
+<a href="lang_aggfunc.html#aggfilter">FILTER clause on aggregate functions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/1079ad19993d13fa">1079ad19993d13fa</a>
+<li> Cherrypick fixes for other obscure problems found since the 3.30.0
+ release
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b
+<li>SHA3-256 for sqlite3.c: f96fafe4c110ed7d77fc70a7d690e5edd1e64fefb84b3b5969a722d885de1f2d
+
+</ol></p>
+<a name="version_3_30_0"></a>
+<h3>2019-10-04 (3.30.0)</h3><p><ol class='lessindent'>
+<li> Add support for the <a href="lang_aggfunc.html#aggfilter">FILTER clause on aggregate functions</a>.
+<li> Add support for the <a href="lang_select.html#nullslast">NULLS FIRST</a> and <a href="lang_select.html#nullslast">NULLS LAST</a> syntax in <a href="lang_select.html#orderby">ORDER BY</a> clauses.
+<li> The <a href="pragma.html#pragma_index_info">index_info</a> and <a href="pragma.html#pragma_index_xinfo">index_xinfo</a> pragmas are enhanced to provide
+ information about the on-disk representation of <a href="withoutrowid.html">WITHOUT ROWID</a>
+ tables.
+<li> Add the <a href="c3ref/drop_modules.html">sqlite3_drop_modules()</a> interface, allowing applications
+ to disable automatically loaded virtual tables that they do not
+ need.
+<li> Improvements to the <a href="cli.html#recover">.recover dot-command</a> in the <a href="cli.html">CLI</a> so that
+ it recovers more content from corrupt database files.
+<li> Enhance the <a href="rbu.html">RBU</a> extension to support <a href="expridx.html">indexes on expressions</a>.
+<li> Change the schema parser so that it will error out if any of
+ the type, name, and tbl_name columns of the <a href="schematab.html">sqlite_master table</a>
+ have been corrupted and the database connection is not in
+ <a href="pragma.html#pragma_writable_schema">writable_schema</a> mode.
+<li> The <a href="pragma.html#pragma_function_list">PRAGMA function_list</a>, <a href="pragma.html#pragma_module_list">PRAGMA module_list</a>, and
+ <a href="pragma.html#pragma_pragma_list">PRAGMA pragma_list</a> commands are now
+ enabled in all builds by default. Disable them using
+ <a href="compile.html#omit_introspection_pragmas">-DSQLITE_OMIT_INTROSPECTION_PRAGMAS</a>.
+<li> Add the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> option for <a href="c3ref/db_config.html">sqlite3_db_config()</a>.
+<li> Added the <a href="tclsqlite.html">TCL Interface</a> <a href="tclsqlite.html#config">config method</a> in order to be able to
+ disable <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> as well as control other
+ <a href="c3ref/db_config.html">sqlite3_db_config()</a> options from TCL.
+<li> Added the <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a> flag for
+ <a href="appfunc.html">application-defined SQL functions</a> to prevent those functions from
+ being used inside triggers and views.
+<li> The legacy <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> compile-time option is now a no-op.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
+<li>SHA3-256 for sqlite3.c: f04393dd47205a4ee2b98ff737dc51a3fdbcc14c055b88d58f5b27d0672158f5
+
+</ol></p>
+<a name="version_3_29_0"></a>
+<h3>2019-07-10 (3.29.0)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">SQLITE_DBCONFIG_DQS_DML</a> and <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">SQLITE_DBCONFIG_DQS_DDL</a>
+ actions to <a href="c3ref/db_config.html">sqlite3_db_config()</a> for activating and deactivating
+ the <a href="quirks.html#dblquote">double-quoted string literal</a> misfeature. Both default to "on"
+ for legacy compatibility, but developers are encouraged to turn them
+ "off", perhaps using the <a href="compile.html#dqs">-DSQLITE_DQS=0</a> compile-time option.
+<li> <a href="compile.html#dqs">-DSQLITE_DQS=0</a> is now a <a href="compile.html#rcmd">recommended compile-time option</a>.
+<li> Improvements to the <a href="optoverview.html">query planner</a>:
+<ol type="a">
+ <li> Improved optimization of AND and OR operators when one or the other
+ operand is a constant.
+ <li> Enhancements to the <a href="optoverview.html#like_opt">LIKE optimization</a> for cases when the left-hand
+ side column has numeric affinity.
+ </ol>
+ <li> Added the "<a href="https://sqlite.org/src/file/ext/misc/dbdata.c">sqlite_dbdata</a>"
+ virtual table for extracting raw low-level content from an SQLite database,
+ even a database that is corrupt.
+ <li> Improvements to rounding behavior, so that the results of rounding
+ binary numbers using the <a href="lang_corefunc.html#round">round()</a> function are closer to what people
+ who are used to thinking in decimal actually expect.
+ <li> Enhancements to the <a href="cli.html">CLI</a>:
+<ol type="a">
+ <li> Add the ".recover" command which tries to recover as much content
+ as possible from a corrupt database file.
+ <li> Add the ".filectrl" command useful for testing.
+ <li> Add the long-standing ".testctrl" command to the ".help" menu.
+ <li> Added the ".dbconfig" command
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6
+<li>SHA3-256 for sqlite3.c: d9a5daf7697a827f4b2638276ce639fa04e8e8bb5fd3a6b683cfad10f1c81b12
+
+</ol></p>
+<a name="version_3_28_0"></a>
+<h3>2019-04-16 (3.28.0)</h3><p><ol class='lessindent'>
+<li> Enhanced <a href="windowfunctions.html">window functions</a>:
+<ol type="a">
+ <li> Add support the <a href="windowfunctions.html#wexcls">EXCLUDE clause</a>.
+ <li> Add support for <a href="windowfunctions.html#wchaining">window chaining</a>.
+ <li> Add support for <a href="windowfunctions.html#grouptype">GROUPS frames</a>.
+ <li> Add support for "<a href="windowfunctions.html#exprrange">&lt;expr&gt; PRECEDING</a>" and
+ "<a href="windowfunctions.html#exprrange">&lt;expr&gt; FOLLOWING</a>" boundaries
+ in RANGE <a href="windowfunctions.html#framespec">frames</a>.
+</ol>
+<li> Added the new <a href="c3ref/stmt_isexplain.html">sqlite3_stmt_isexplain(S)</a> interface for determining
+ whether or not a <a href="c3ref/stmt.html">prepared statement</a> is an <a href="lang_explain.html">EXPLAIN</a>.
+<li> Enhanced <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> so that it works for read-only databases.
+<li> New query optimizations:
+<ol type="a">
+ <li> Enable the <a href="optoverview.html#like_opt">LIKE optimization</a> for cases when the ESCAPE keyword
+ is present and <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> is on.
+ <li> In queries that are driven by a <a href="partialindex.html">partial index</a>, avoid unnecessary
+ tests of the constraint named in the WHERE clause of the partial
+ index, since we know that constraint must always be true.
+</ol>
+<li> Enhancements to the <a href="tclsqlite.html">TCL Interface</a>:
+<ol type="a">
+ <li> Added the -returntype option to the <a href="tclsqlite.html#function">function method</a>.
+ <li> Added the new <a href="tclsqlite.html#bind_fallback">bind_fallback method</a>.
+</ol>
+<li> Enhancements to the <a href="cli.html">CLI</a>:
+<ol type="a">
+ <li> Added support for <a href="lang_expr.html#varparam">bound parameters</a> and the <a href="cli.html#param">.parameter command</a>.
+ <li> Fix the <a href="cli.html#fileio">readfile()</a> function so that it returns
+ an empty BLOB rather than throwing an out-of-memory error when
+ reading an empty file.
+ <li> Fix the <a href="cli.html#fileio">writefile()</a> function so that when it
+ creates new directories along the path of a new file, it gives them
+ umask permissions rather than the same permissions as the file.
+ <li> Change <a href="cli.html#arinsup">--update option</a> in the <a href="cli.html#sqlar">.archive command</a> so that it skips
+ files that are already in the archive and are unchanged. Add the
+ new --insert option that works like --update used to work.
+</ol>
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/fossildelta.c">fossildelta.c</a>
+ extension that can create, apply, and deconstruct the
+ <a href="https://fossil-scm.org/fossil/doc/trunk/www/delta_format.wiki">Fossil DVCS file delta format</a>
+ that is used by the <a href="rbu.html">RBU extension</a>.
+<li> Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema">SQLITE_DBCONFIG_WRITABLE_SCHEMA</a> verb for the <a href="c3ref/db_config.html">sqlite3_db_config()</a>
+ interface, that does the same work as <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema</a> without using the
+ SQL parser.
+<li> Added the <a href="c3ref/value_blob.html">sqlite3_value_frombind()</a> API for determining if the argument
+ to an SQL function is from a <a href="lang_expr.html#varparam">bound parameter</a>.
+<li> Security and compatibilities enhancements to <a href="fts3.html#f3tknzr">fts3_tokenizer()</a>:
+<ol type="a">
+ <li> The <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> function always returns NULL
+ unless either the legacy application-defined FTS3 tokenizers interface
+ are enabled using
+ the <a href="c3ref/db_config.html">sqlite3_db_config</a>(<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>)
+ setting, or unless the first argument to fts3_tokenizer() is a <a href="lang_expr.html#varparam">bound parameter</a>.
+ <li> The two-argument version of <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> accepts a pointer to the
+ tokenizer method object even without
+ the <a href="c3ref/db_config.html">sqlite3_db_config</a>(<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>) setting
+ if the second argument is a <a href="lang_expr.html#varparam">bound parameter</a>
+</ol>
+<li> Improved robustness against corrupt database files.
+<li> Miscellaneous performance enhancements
+<li> Established a Git mirror of the offical SQLite source tree.
+ The canonical sources for SQLite are maintained using the
+ <a href="https://fossil-scm.org/">Fossil DVCS</a> at <a href="https://sqlite.org/src">https://sqlite.org/src</a>.
+ The Git mirror can be seen at <a href="https://github.com/sqlite/sqlite">https://github.com/sqlite/sqlite</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50
+<li>SHA3-256 for sqlite3.c: 411efca996b65448d9798eb203d6ebe9627b7161a646f5d00911e2902a57b2e9
+
+</ol></p>
+<a name="version_3_27_2"></a>
+<h3>2019-02-25 (3.27.2)</h3><p><ol class='lessindent'>
+<li> Fix a bug in the IN operator that was introduced by an
+ attempted optimization in version 3.27.0. Ticket
+ <a href="https://www.sqlite.org/src/info/df46dfb631f75694">df46dfb631f75694</a>
+<li> Fix a bug causing a crash when a <a href="windowfunctions.html">window function</a> is misused. Ticket
+ <a href="https://www.sqlite.org/src/info/4feb3159c6bc3f7e33959">4feb3159c6bc3f7e33959</a>.
+<li> Fix various documentation typos
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
+<li>SHA3-256 for sqlite3.c: 1dbae33bff261f979d0042338f72c9e734b11a80720fb32498bae9150cc576e7
+
+</ol></p>
+<a name="version_3_27_1"></a>
+<h3>2019-02-08 (3.27.1)</h3><p><ol class='lessindent'>
+<li> Fix a bug in the query optimizer: an adverse interaction between
+the <a href="optoverview.html#or_opt">OR optimization</a> and the optimization that tries to use values
+read directly from an <a href="expridx.html">expression index</a> instead of recomputing the
+expression.
+Ticket <a href="https://www.sqlite.org/src/info/4e8e4857d32d401f">4e8e4857d32d401f</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd
+<li>SHA3-256 for sqlite3.c: 11c14992660d5ac713ea8bea48dc5e6123f26bc8d3075fe5585d1a217d090233
+
+</ol></p>
+<a name="version_3_27_0"></a>
+<h3>2019-02-07 (3.27.0)</h3><p><ol class='lessindent'>
+<li>Added the <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> command
+<li>Issue an SQLITE_WARNING message on the <a href="errlog.html">error log</a> if a
+<a href="quirks.html#dblquote">double-quoted string literal</a> is used.
+<li>The <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface works on any prepared statement
+created using <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> or <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a>. It is no
+longer necessary to use <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a> with <a href="c3ref/c_prepare_normalize.html#sqlitepreparenormalize">SQLITE_PREPARE_NORMALIZE</a>
+in order to use <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql()</a>.
+<li>Added the remove_diacritics=2 option to <a href="fts3.html">FTS3</a> and <a href="fts5.html">FTS5</a>.
+<li>Added the <a href="c3ref/c_prepare_normalize.html#sqlitepreparenovtab">SQLITE_PREPARE_NO_VTAB</a> option to <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a>.
+Use that option to prevent circular references to <a href="vtab.html#xshadowname">shadow tables</a> from
+causing resource leaks.
+<li>Enhancements to the <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> interface:
+<ol type="a">
+ <li> Add the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> <a href="c3ref/file_control.html">file-control</a> for
+ setting an upper bound on the size of the in-memory database created
+ by sqlite3_deserialize. The default upper bound is 1GiB, or whatever
+ alternative value is specified by
+ <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">SQLITE_CONFIG_MEMDB_MAXSIZE</a>)
+ and/or <a href="compile.html#memdb_default_maxsize">SQLITE_MEMDB_DEFAULT_MAXSIZE</a>.
+ <li> Honor the <a href="c3ref/c_deserialize_freeonclose.html">SQLITE_DESERIALIZE_READONLY</a> flag, which was previously described
+ in the documentation, but was previously a no-op.
+ <li> Enhance the "deserialize" command of the <a href="tclsqlite.html">TCL Interface</a> to give it
+ new "--maxsize N" and "--readonly BOOLEAN" options.
+</ol>
+<li>Enhancements to the <a href="cli.html">CLI</a>, mostly to support testing and debugging
+of the SQLite library itself:
+<ol type="a">
+ <li> Add support for ".open --hexdb". The
+ "<a href="https://sqlite.org/src/doc/trunk/tool/dbtotxt.md">dbtotxt</a>" utility
+ program used to generate the text for the "hexdb" is added to the
+ source tree.
+ <li> Add support for the "--maxsize N" option on ".open --deserialize".
+ <li> Add the "--memtrace" command-line option, to show all memory allocations
+ and deallocations.
+ <li> Add the ".eqp trace" option on builds with SQLITE_DEBUG, to enable
+ bytecode program listing with indentation and
+ <a href="pragma.html#pragma_vdbe_trace">PRAGMA vdbe_trace</a> all in one step.
+ <li> Add the ".progress" command for accessing
+ the <a href="c3ref/progress_handler.html">sqlite3_progress_handler()</a> interface.
+ <li> Add the "--async" option to the ".backup" command.
+ <li> Add options "--expanded", "--normalized", "--plain", "--profile", "--row",
+ "--stmt", and "--close" to the ".trace" command.
+</ol>
+<li> Increased robustness against malicious SQL that is run against a
+ maliciously corrupted database.
+ <p><b>Bug fixes:</b>
+<li>Do not use a partial index to do a table scan on an IN operator.
+Ticket <a href="https://www.sqlite.org/src/info/1d958d90596593a774">1d958d90596593a774</a>.
+<li>Fix the <a href="optoverview.html#flattening">query flattener</a> so that it works on queries that contain
+subqueries that use <a href="windowfunctions.html">window functions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/f09fcd17810f65f717">709fcd17810f65f717</a>
+<li>Ensure that ALTER TABLE modifies table and column names embedded in WITH
+clauses that are part of views and triggers.
+<li>Fix a parser bug that prevented the use of parentheses around table-valued
+functions.
+<li>Fix a problem with the <a href="optoverview.html#or_opt">OR optimization</a> on <a href="expridx.html">indexes on expressions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/d96eba87698a428c1d">d96eba87698a428c1d</a>.
+<li>Fix a problem with the
+<a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> in which the optimization
+was being applied inappropriately due to an IS NOT NULL operator.
+Ticket <a href="https://www.sqlite.org/src/info/5948e09b8c415bc45d">5948e09b8c415bc45d</a>.
+<li>Fix the <a href="lang_replace.html">REPLACE</a> command so that it is no longer able to sneak a
+NULL value into a NOT NULL column even if the NOT NULL column has a default
+value of NULL.
+Ticket <a href="https://www.sqlite.org/src/info/e6f1f2e34dceeb1ed6">e6f1f2e34dceeb1ed6</a>
+<li>Fix a problem with the use of <a href="windowfunctions.html">window functions</a> used within
+<a href="lang_expr.html#cosub">correlated subqueries</a>.
+Ticket <a href="https://www.sqlite.org/src/info/d0866b26f83e9c55e3">d0866b26f83e9c55e3</a>
+<li>Fix the <a href="lang_altertable.html#altertabmvcol">ALTER TABLE RENAME COLUMN</a> command so that it works for tables
+that have redundant UNIQUE constraints.
+Ticket <a href="https://www.sqlite.org/src/info/bc8d94f0fbd633fd9a">bc8d94f0fbd633fd9a</a>
+<li>Fix a bug that caused <a href="lang_corefunc.html#zeroblob">zeroblob</a> values to be truncated when inserted into
+a table that uses an <a href="expridx.html">expression index</a>.
+Ticket <a href="https://www.sqlite.org/src/info/bb4bdb9f7f654b0bb9">bb4bdb9f7f654b0bb9</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2019-02-07 17:02:52 97744701c3bd414e6c9d7182639d8c2ce7cf124c4fce625071ae65658ac61713
+"
+<li>SHA3-256 for sqlite3.c: ca011a10ee8515b33e5643444b98ee3d74dc45d3ac766c3700320def52bc6aba
+
+</ol></p>
+<a name="version_3_26_0"></a>
+<h3>2018-12-01 (3.26.0)</h3><p><ol class='lessindent'>
+<li>Optimization: When doing an <a href="lang_update.html">UPDATE</a> on a table with <a href="expridx.html">indexes on expressions</a>,
+ do not update the expression indexes if they do not refer to any of the columns
+ of the table being updated.
+<li>Allow the <a href="vtab.html#xbestindex">xBestIndex()</a> method of <a href="vtab.html">virtual table</a> implementations to return
+ <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> to indicate that the proposed query plan is unusable and
+ should not be given further consideration.
+<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> option which disables the ability to
+ create corrupt database files using ordinary SQL.
+<li>Added support for read-only <a href="vtab.html#xshadowname">shadow tables</a> when the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a>
+ option is enabled.
+<li>Added the <a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table</a> command, which if enabled causes the
+ <a href="lang_altertable.html">ALTER TABLE</a> command to behave like older version of SQLite (prior to
+ version 3.25.0) for compatibility.
+<li>Added <a href="pragma.html#pragma_table_xinfo">PRAGMA table_xinfo</a> that works just like <a href="pragma.html#pragma_table_info">PRAGMA table_info</a>
+ except that it also shows <a href="vtab.html#hiddencol">hidden columns</a> in virtual tables.
+<li>Added the <a href="https://sqlite.org/src/file/ext/misc/explain.c">explain virtual table</a>
+ as a run-time loadable extension.
+<li>Add a limit counter to the query planner to prevent excessive
+ <a href="c3ref/prepare.html">sqlite3_prepare()</a> times for certain pathological SQL inputs.
+<li>Added support for the <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface, when compiling
+ with SQLITE_ENABLE_NORMALIZE.
+<li>Enhanced triggers so that they can use <a href="vtab.html#tabfunc2">table-valued functions</a> that
+ exist in schemas other than the schema where the trigger is defined.
+<li>Enhancements to the <a href="cli.html">CLI</a>:
+<ol type="a">
+ <li>Improvements to the ".help" command.
+ <li>The SQLITE_HISTORY environment variable, if it exists,
+ specifies the name of the command-line editing history file
+ <li>The --deserialize option associated with opening a new database cause the
+ database file to be read into memory and accessed using the
+ <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> API. This simplifies running tests on a database
+ without modifying the file on disk.
+</ol>
+<li>Enhancements to the <a href="geopoly.html">geopoly</a> extension:
+<ol type="a">
+ <li>Always stores polygons
+ using the binary format, which is faster and uses less space.
+ <li>Added the <a href="geopoly.html#regpoly">geopoly_regular()</a> function.
+ <li>Added the <a href="geopoly.html#ccw">geopoly_ccw()</a> function.
+</ol>
+<li>Enhancements to the <a href="sessionintro.html">session</a> extension:
+<ol type="a">
+ <li>Added the <a href="session/c_changesetapply_invert.html">SQLITE_CHANGESETAPPLY_INVERT</a> flag
+ <li>Added the <a href="session/sqlite3changeset_start.html">sqlite3changeset_start_v2()</a> interface and the
+ <a href="session/c_changesetstart_invert.html">SQLITE_CHANGESETSTART_INVERT</a> flag.
+ <li>Added the
+ <a href="https://sqlite.org/src/file/ext/session/changesetfuzz.c">changesetfuzz.c</a>
+ test-case generator utility.
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238b4f9"
+<li>SHA3-256 for sqlite3.c: 72c08830da9b5d1cb397c612c0e870d7f5eb41a323b41aa3d8aa5ae9ccedb2c4
+
+</ol></p>
+<a name="version_3_25_3"></a>
+<h3>2018-11-05 (3.25.3)</h3><p><ol class='lessindent'>
+<li> Disallow the use of <a href="windowfunctions.html">window functions</a> in the recursive part of
+ a CTE. Ticket <a href="https://sqlite.org/src/info/e8275b415a2f03bee">e8275b415a2f03bee</a>
+<li> Fix the behavior of typeof() and length() on virtual tables. Ticket
+ <a href="https://sqlite.org/src/info/69d642332d25aa3b7315a6d385">69d642332d25aa3b7315a6d385</a>
+<li> Strengthen defenses against deliberately corrupted database files.
+<li> Fix a problem in the query planner that results when a row-value expression
+ is used with a PRIMARY KEY with redundant columns. Ticket
+ <a href="https://sqlite.org/src/info/1a84668dcfdebaf12415d">1a84668dcfdebaf12415d</a>
+<li> Fix the query planner so that it works correctly for IS NOT NULL operators
+ in the ON clause of a LEFT JOIN with the SQLITE_ENABLE_STAT4 compile-time option.
+ <a href="https://sqlite.org/src/info/65eb38f6e46de8c75e188a17ec">65eb38f6e46de8c75e188a17ec</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-11-05 20:37:38 89e099fbe5e13c33e683bef07361231ca525b88f7907be7092058007b75036f2"
+<li>SHA3-256 for sqlite3.c: 45586e4df74de3a43f3a1f8c7a78c3c3f02edce01af7d10cafe68bb94476a5c5
+
+</ol></p>
+<a name="version_3_25_2"></a>
+<h3>2018-09-25 (3.25.2)</h3><p><ol class='lessindent'>
+<li> Add the <a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table=ON</a> command that causes the
+ "ALTER TABLE RENAME" command to behave as it did in SQLite versions 3.24.0
+ and earlier: references to the renamed table inside the bodies of triggers
+ and views are not updated. This new pragma provides a compatibility
+ work around for older programs that expected the older, wonky behavior
+ of ALTER TABLE RENAME.
+<li> Fix a problem with the new <a href="windowfunctions.html">window functions</a> implementation that caused
+ a malfunction when complicated expressions involving window functions were used
+ inside of a view.
+<li> Fixes for various other compiler warnings and minor problems associated
+ with obscure configurations.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7"
+<li>SHA3-256 for sqlite3.c: 34c23ff91631ae10354f8c9d62fd7d65732b3d7f3acfd0bbae31ff4a62fe28af
+
+</ol></p>
+<a name="version_3_25_1"></a>
+<h3>2018-09-18 (3.25.1)</h3><p><ol class='lessindent'>
+<li> Extra sanity checking added to ALTER TABLE in the 3.25.0 release
+ sometimes raises a false-positive
+ when the table being modified has a trigger that
+ updates a virtual table. The false-positive caused the ALTER
+ TABLE to rollback, thus leaving the schema unchanged.
+ Ticket <a href="https://sqlite.org/src/info/b41031ea2b537237">b41031ea2b537237</a>.
+<li> The fix in the 3.25.0 release for the endless-loop in the byte-code
+ associated with the ORDER BY LIMIT optimization did not work for
+ some queries involving window functions. An additional correction
+ is required. Ticket
+ <a href="https://sqlite.org/src/info/510cde277783b5fb">510cde277783b5fb</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-09-18 20:20:44 2ac9003de44da7dafa3fbb1915ac5725a9275c86bf2f3b7aa19321bf1460b386"
+<li>SHA3-256 for sqlite3.c: 1b2302e7a54cc99c84ff699a299f61f069a28e1ed090b89e4430ca80ae2aab06
+
+</ol></p>
+<a name="version_3_25_0"></a>
+<h3>2018-09-15 (3.25.0)</h3><p><ol class='lessindent'>
+<li> Add support for <a href="windowfunctions.html">window functions</a>
+<li> Enhancements the <a href="lang_altertable.html">ALTER TABLE</a> command:
+<ol type="a">
+ <li> Add support for renaming columns within a table using
+ ALTER TABLE <i>table</i> RENAME COLUMN <i>oldname</i> TO <i>newname</i>.
+ <li> Fix table rename feature so that it also updates references
+ to the renamed table in <a href="lang_createtrigger.html">triggers</a> and <a href="lang_createview.html">views</a>.
+</ol>
+<li> Query optimizer improvements:
+<ol type="a">
+ <li> Avoid unnecessary loads of columns in an aggregate query that
+ are not within an aggregate function and that are not part
+ of the GROUP BY clause.
+ <li> The IN-early-out optimization: When doing a look-up on a
+ multi-column index and an IN operator is used on a column
+ other than the left-most column, then if no rows match against
+ the first IN value, check to make sure there exist rows that
+ match the columns to the right before continuing with the
+ next IN value.
+ <li> Use the transitive property to try to propagate constant
+ values within the WHERE clause. For example, convert
+ "a=99 AND b=a" into "a=99 AND b=99".
+</ol>
+<li> Use a separate mutex on every inode in the unix <a href="vfs.html">VFS</a>, rather than
+ a single mutex shared among them all, for slightly better concurrency
+ in multi-threaded environments.
+<li> Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command for improved detection
+ of problems on the page freelist.
+<li> Output infinity as 1e999 in the ".dump" command of the
+ <a href="cli.html">command-line shell</a>.
+<li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> file-control.
+<li> Added the <a href="geopoly.html">Geopoly module</a>
+<p><b>Bug fixes:</b>
+<li> The ORDER BY LIMIT optimization might have caused an infinite loop
+ in the byte code of the prepared statement under very obscure
+ circumstances,
+ due to a confluence of minor defects in the query optimizer.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/9936b2fa443fec03ff25">9936b2fa443fec03ff25</a>
+<li> On an UPSERT when the order of constraint checks is rearranged,
+ ensure that the affinity transformations on the inserted content
+ occur before any of the constraint checks. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/79cad5e4b2e219dd197242e9e">79cad5e4b2e219dd197242e9e</a>.
+<li> Avoid using a prepared statement for ".stats on" command of the
+ <a href="cli.html">CLI</a> after it has been closed by the ".eqp full" logicc. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7be932dfa60a8a6b3b26bcf76">7be932dfa60a8a6b3b26bcf76</a>.
+<li> The LIKE optimization was generating incorrect byte-code and hence
+ getting the wrong answer
+ if the left-hand operand has numeric affinity and the right-hand-side
+ pattern is '/%' or if the pattern begins with the ESCAPE character.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c94369cae9b561b1f996d0054b">c94369cae9b561b1f996d0054b</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-09-15 04:01:47 b63af6c3bd33152742648d5d2e8dc5d5fcbcdd27df409272b6aea00a6f761760"
+<li>SHA3-256 for sqlite3.c: 989e3ff37f2b5eea8e42205f808ccf0ba86c6ea6aa928ad2c011f33a108ac45d
+
+</ol></p>
+<a name="version_3_24_0"></a>
+<h3>2018-06-04 (3.24.0)</h3><p><ol class='lessindent'>
+<li> Add support for PostgreSQL-style <a href="lang_upsert.html">UPSERT</a>.
+<li> Add support for <a href="rtree.html#auxcol">auxiliary columns in r-tree tables</a>.
+<li> Add C-language APIs for discovering SQL keywords used by
+ SQLite: <a href="c3ref/keyword_check.html">sqlite3_keyword_count()</a>, <a href="c3ref/keyword_check.html">sqlite3_keyword_name()</a>, and
+ <a href="c3ref/keyword_check.html">sqlite3_keyword_check()</a>.
+<li> Add C-language APIs for dynamic strings based on the
+ <a href="c3ref/str.html">sqlite3_str</a> object.
+<li> Enhance <a href="lang_altertable.html">ALTER TABLE</a> so that it recognizes "true" and "false" as
+ valid arguments to DEFAULT.
+<li> Add the sorter-reference optimization as a compile-time option.
+ Only available if compiled with SQLITE_ENABLE_SORTER_REFERENCES.
+<li> Improve the format of the <a href="eqp.html">EXPLAIN QUERY PLAN</a> raw output, so that
+ it gives better information about the query plan and about the
+ relationships between the various components of the plan.
+<li> Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase">SQLITE_DBCONFIG_RESET_DATABASE</a> option to the
+ <a href="c3ref/db_config.html">sqlite3_db_config()</a> API.
+<p><b><a href="cli.html">CLI</a> Enhancements:</b>
+<li> Automatically intercepts the raw <a href="eqp.html">EXPLAIN QUERY PLAN</a>
+ output and reformats it into an ASCII-art graph.
+<li> Lines that begin with "#" and that are not in the middle of an
+ SQL statement are interpreted as comments.
+<li> Added the --append option to the ".backup" command.
+<li> Added the ".dbconfig" command.
+<p><b>Performance:</b>
+<li> <a href="lang_update.html">UPDATE</a> avoids unnecessary low-level disk writes when the contents
+ of the database file do not actually change.
+ For example, "UPDATE t1 SET x=25 WHERE y=?" generates no extra
+ disk I/O if the value in column x is already 25. Similarly,
+ when doing <a href="lang_update.html">UPDATE</a> on records that span multiple pages, only
+ the subset of pages that actually change are written to disk.
+ This is a low-level performance optimization only and does not
+ affect the behavior of TRIGGERs or other higher level SQL
+ structures.
+<li> Queries that use ORDER BY and LIMIT now try to avoid computing
+ rows that cannot possibly come in under the LIMIT. This can greatly
+ improve performance of ORDER BY LIMIT queries, especially when the
+ LIMIT is small relative to the number of unrestricted output rows.
+<li> The <a href="optoverview.html#or_opt">OR optimization</a> is allowed to proceed
+ even if the OR expression has also been converted into an IN
+ expression. Uses of the OR optimization are now also
+ <a href="eqp.html#or-opt">more clearly shown</a> in the <a href="eqp.html">EXPLAIN QUERY PLAN</a> output.
+<li> The query planner is more aggressive about using
+ <a href="optoverview.html#autoindex">automatic indexes</a> for views and subqueries for which it is
+ not possible to create a persistent index.
+<li> Make use of the one-pass UPDATE and DELETE query plans in the
+ <a href="rtree.html">R-Tree extension</a> where appropriate.
+<li> Performance improvements in the LEMON-generated parser.
+<p><b>Bug fixes:</b>
+<li> For the right-hand table of a LEFT JOIN, compute the values
+ of expressions directly rather than loading precomputed values
+ out of an <a href="expridx.html">expression index</a> as the expression index might
+ not contain the correct value. Ticket
+ <a href="https://sqlite.org/src/info/7fa8049685b50b5aeb0c2">7fa8049685b50b5aeb0c2</a>
+<li> Do not attempt to use terms from the WHERE clause to enable
+ indexed lookup of the right-hand table of a LEFT JOIN. Ticket
+ <a href="https://sqlite.org/src/info/4ba5abf65c5b0f9a96a7a">4ba5abf65c5b0f9a96a7a</a>
+<li> Fix a memory leak that can occur following a failure to open error
+ in the <a href="csv.html">CSV virtual table</a>
+<li> Fix a long-standing problem wherein a corrupt schema on the
+ <a href="fileformat2.html#seqtab">sqlite_sequence</a> table used by <a href="autoinc.html">AUTOINCREMENT</a> can lead to
+ a crash. Ticket
+ <a href="https://www.sqlite.org/src/info/d8dc2b3a58cd5dc29">d8dc2b3a58cd5dc2918a1</a>
+<li> Fix the <a href="json1.html#jeach">json_each()</a> function so that it returns
+ valid results on its "fullkey" column when the input is a simple value
+ rather than an array or object.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-06-04 19:24:41 c7ee0833225bfd8c5ec2f9bf62b97c4e04d03bd9566366d5221ac8fb199a87ca"
+<li>SHA3-256 for sqlite3.c: 0d384704e1c66026228336d1e91771d295bf688c9c44c7a44f25a4c16c26ab3c
+
+</ol></p>
+<a name="version_3_23_1"></a>
+<h3>2018-04-10 (3.23.1)</h3><p><ol class='lessindent'>
+<li> Fix two problems in the new <a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a>.
+ Tickets <a href="https://sqlite.org/src/info/1e39b966ae9ee739">1e39b966ae9ee739</a>
+ and <a href="https://sqlite.org/src/info/fac496b61722daf2">fac496b61722daf2</a>.
+<li> Fix misbehavior of the FTS5 xBestIndex method. Ticket
+ <a href="https://sqlite.org/src/info/2b8aed9f7c9e61e8">2b8aed9f7c9e61e8</a>.
+<li> Fix a harmless reference to an uninitialized virtual machine register.
+ Ticket <a href="https://sqlite.org/src/info/093420fc0eb7cba7">093420fc0eb7cba7</a>.
+<li> Fix the <a href="cli.html">CLI</a> so that it builds with -DSQLITE_UNTESTABLE
+<li> Fix the <a href="https://sqlite.org/src/file/ext/misc/eval.c">eval.c</a> extension
+ so that it works with <a href="pragma.html#pragma_empty_result_callbacks">PRAGMA empty_result_callbacks=ON</a>.
+<li> Fix the <a href="series.html">generate_series</a> virtual table so that it correctly returns
+ no rows if any of its constraints are NULL.
+<li> Performance enhancements in the parser.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b"
+<li>SHA3-256 for sqlite3.c: 65750d1e506f416a0b0b9dd22d171379679c733e3460549754dc68c92705b5dc
+
+</ol></p>
+<a name="version_3_23_0"></a>
+<h3>2018-04-02 (3.23.0)</h3><p><ol class='lessindent'>
+<li> Add the <a href="c3ref/serialize.html">sqlite3_serialize()</a> and <a href="c3ref/deserialize.html">sqlite3_deserialize()</a> interfaces when
+ the <a href="compile.html#enable_deserialize">SQLITE_ENABLE_DESERIALIZE</a> compile-time option is used.
+<li> Recognize TRUE and FALSE as constants. (For compatibility, if there
+ exist columns named "true" or "false", then the identifiers refer to the
+ columns rather than Boolean constants.)
+<li> Support operators IS TRUE, IS FALSE, IS NOT TRUE, and IS NOT FALSE.
+<li> Added the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill">SQLITE_DBSTATUS_CACHE_SPILL</a> option to <a href="c3ref/db_status.html">sqlite3_db_status()</a> for
+ reporting the number of cache spills that have occurred.
+<li> The "alternate-form-2" flag ("!") on the <a href="printf.html">built-in printf</a> implementation
+ now causes string substitutions to measure the width and precision in
+ characters instead of bytes.
+<li> If the <a href="vtab.html#xcolumn">xColumn</a> method in a <a href="vtab.html">virtual table</a> implementation returns
+ an error message using <a href="c3ref/result_blob.html">sqlite3_result_error()</a> then give that error
+ message preference over internally-generated messages.
+<li> Added the -A command-line option to the <a href="cli.html">CLI</a> to make it easier to manage
+ <a href="sqlar.html">SQLite Archive files</a>.
+<li> Add support for INSERT OR REPLACE, INSERT OR IGNORE, and UPDATE OR REPLACE
+ in the <a href="zipfile.html">Zipfile virtual table</a>.
+<li> Enhance the <a href="session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a> interface so that it is hardened
+ against attacks from deliberately corrupted <a href="sessionintro.html#changeset">changeset</a> objects.
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/normalize.c">sqlite3_normalize()</a>
+ extension function.
+<li> Query optimizer enhancements:
+<ol type='a'>
+ <li> Improve the <a href="optoverview.html#omitnoopjoin">omit-left-join optimization</a> so that it works in cases where
+ the right-hand table is UNIQUE but not necessarily NOT NULL.
+ <li> Improve the <a href="optoverview.html#pushdown">push-down optimization</a> so that it works for many LEFT JOINs.
+ <li> Add the <a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> that converts a LEFT
+ JOIN into an ordinary JOIN if there exist terms in the WHERE clause
+ that would prevent the extra all-NULL row of the LEFT JOIN from
+ appearing in the output set.
+ <li> Avoid unnecessary writes to the sqlite_sequence table when an
+ <a href="autoinc.html">AUTOINCREMENT</a> table is updated with an rowid that is less than the
+ maximum.
+</ol>
+<li> Bug fixes:
+<ol type='a'>
+ <li> Fix the parser to accept valid <a href="rowvalue.html">row value</a> syntax.
+ Ticket <a href="https://www.sqlite.org/src/info/7310e2fb3d046a5">7310e2fb3d046a5</a>
+ <li> Fix the query planner so that it takes into account dependencies in
+ the arguments to table-valued functions in subexpressions in
+ the WHERE clause.
+ Ticket <a href="https://www.sqlite.org/src/info/80177f0c226ff54">80177f0c226ff54</a>
+ <li> Fix incorrect result with complex OR-connected WHERE and STAT4.
+ Ticket <a href="https://www.sqlite.org/src/info/ec32177c99ccac2">ec32177c99ccac2</a>
+ <li> Fix potential corruption in <a href="expridx.html">indexes on expressions</a> due to automatic
+ datatype conversions.
+ Ticket <a href="https://www.sqlite.org/src/info/343634942dd54ab">343634942dd54ab</a>
+ <li> Assertion fault in FTS4.
+ Ticket <a href="https://www.sqlite.org/src/info/d6ec09eccf68cfc">d6ec09eccf68cfc</a>
+ <li> Incorrect result on the less-than operator in <a href="rowvalue.html">row values</a>.
+ Ticket <a href="https://www.sqlite.org/src/info/f484b65f3d62305">f484b65f3d62305</a>
+ <li> Always interpret non-zero floating-point values as TRUE, even if
+ the integer part is zero.
+ Ticket <a href="https://www.sqlite.org/src/info/36fae083b450e3a">36fae083b450e3a</a>
+ <li> Fix an issue in the fsdir(PATH) <a href="vtab.html#tabfunc2">table-valued function</a> to the
+ <a href="https://sqlite.org/src/file/ext/misc/fileio.c">fileio.c</a> extension,
+ that caused a segfault if the fsdir() table was used as the inner table
+ of a join. Problem reported on the mailing list and fixed by check-in
+ <a href="https://www.sqlite.org/src/info/7ce4e71c1b7251be">7ce4e71c1b7251be</a>
+ <li> Issue an error rather instead of an assertion-fault or null-pointer
+ dereference when the sqlite_master table is corrupted so that the
+ sqlite_sequence table root page is really a btree-index page. Check-in
+ <a href="https://www.sqlite.org/src/info/525deb7a67fbd647">525deb7a67fbd647</a>
+ <li> Fix the <a href="lang_analyze.html">ANALYZE</a> command so that it computes statistics on tables
+ whose names begin with "sqlite". Check-in
+ <a href="https://sqlite.org/src/info/0249d9aecf69948d">0249d9aecf69948d</a>
+</ol>
+<li> Additional fixes for issues detected by
+ <a href="https://github.com/google/oss-fuzz">OSSFuzz</a>:
+<ol type='a'>
+ <li> Fix a possible infinite loop on VACUUM for corrupt database files.
+ Check-in <a href="https://www.sqlite.org/src/info/27754b74ddf64">27754b74ddf64</a>
+ <li> Disallow <a href="lang_expr.html#varparam">parameters</a> in the <a href="lang_with.html">WITH clause</a> of triggers and views.
+ Check-in <a href="https://www.sqlite.org/src/info/b918d4b4e546d">b918d4b4e546d</a>
+ <li> Fix a potential memory leak in <a href="rowvalue.html">row value</a> processing.
+ Check-in <a href="https://www.sqlite.org/src/info/2df6bbf1b8ca8">2df6bbf1b8ca8</a>
+ <li> Improve the performance of the <a href="lang_corefunc.html#replace">replace() SQL function</a> for cases where
+ there are many substitutions on megabyte-sized strings, in an attempt
+ to avoid OSSFuzz timeouts during testing.
+ Check-in <a href="https://www.sqlite.org/src/info/fab2c2b07b5d3">fab2c2b07b5d3</a>
+ <li> Provide an appropriate error message when the sqlite_master table
+ contains a CREATE TABLE AS statement. Formerly this caused either an
+ assertion fault or null pointer dereference. Problem found by OSSFuzz
+ on the GDAL project. Check-in
+ <a href="https://www.sqlite.org/src/info/d75e67654aa96">d75e67654aa96</a>
+ <li> Incorrect assert() statement removed. Check-in
+ <a href="https://www.sqlite.org/src/info/823779d31eb09cda">823779d31eb09cda</a>.
+ <li> Fix a problem with using the <a href="optoverview.html#like_opt">LIKE optimization</a> on an
+ <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>. Check-in
+ <a href="https://www.sqlite.org/src/info/b850dd159918af56">b850dd159918af56</a>.
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-04-02 11:04:16 736b53f57f70b23172c30880186dce7ad9baa3b74e3838cae5847cffb98f5cd2"
+<li>SHA3-256 for sqlite3.c: 4bed3dc2dc905ff55e2c21fd2725551fc0ca50912a9c96c6af712a4289cb24fa
+
+</ol></p>
+<a name="version_3_22_0"></a>
+<h3>2018-01-22 (3.22.0)</h3><p><ol class='lessindent'>
+<li> The output of <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a> now shows each individual SQL statement
+ run within a trigger.
+<li> Add the ability to read from <a href="wal.html">WAL mode</a> databases even if the application
+ lacks write permission on the database and its containing directory, as long as
+ the -shm and -wal files exist in that directory.
+<li> Added the <a href="rtree.html#rtreecheck">rtreecheck()</a> scalar SQL function to the <a href="rtree.html">R-Tree extension</a>.
+<li> Added the <a href="c3ref/vtab_nochange.html">sqlite3_vtab_nochange()</a> and <a href="c3ref/value_blob.html">sqlite3_value_nochange()</a> interfaces
+ to help virtual table implementations optimize UPDATE operations.
+<li> Added the <a href="c3ref/vtab_collation.html">sqlite3_vtab_collation()</a> interface.
+<li> Added support for the <a href="fts5.html#carrotq">"&#94;" initial token syntax</a> in FTS5.
+<li> New extensions:
+<ol type='a'>
+ <li> The <a href="zipfile.html">Zipfile virtual table</a> can read and write a
+ <a href="https://en.wikipedia.org/wiki/Zip_(file_format)">ZIP Archive</a>.
+ <li> Added the fsdir(PATH) <a href="vtab.html#tabfunc2">table-valued function</a> to the
+ <a href="https://sqlite.org/src/file/ext/misc/fileio.c">fileio.c</a> extension,
+ for listing the files in a directory.
+ <li> The <a href="https://sqlite.org/src/file/ext/misc/btreeinfo.c">sqlite_btreeinfo</a>
+ eponymous virtual table for introspecting and estimating the sizes of
+ the btrees in a database.
+ <li> The <a href="https://sqlite.org/src/file/ext/misc/appendvfs.c">Append VFS</a> is a
+ <a href="vfs.html#shim">VFS shim</a> that allows an SQLite database to be appended to some other
+ file. This allows (for example) a database to be appended to an
+ executable that then opens and reads the database.
+</ol>
+<li> Query planner enhancements:
+<ol type='a'>
+ <li> The optimization that uses an index to quickly compute an
+ aggregate min() or max() is extended to work with
+ <a href="expridx.html">indexes on expressions</a>.
+ <li> The decision of whether to implement a FROM-clause subquery
+ as a co-routine or using <a href="optoverview.html#flattening">query flattening</a>
+ now considers whether
+ the result set of the outer query is "complex" (if it
+ contains functions or expression subqueries). A complex result
+ set biases the decision toward the use of co-routines.
+ <li> The planner avoids query plans that use indexes with unknown
+ collating functions.
+ <li> The planner omits unused LEFT JOINs even if they are not the
+ right-most joins of a query.
+</ol>
+<li> Other performance optimizations:
+<ol type='a'>
+ <li> A smaller and faster implementation of text to floating-point
+ conversion subroutine: sqlite3AtoF().
+ <li> The <a href="lemon.html">Lemon parser generator</a> creates a faster parser.
+ <li> Use the strcspn() C-library routine to speed up the LIKE and
+ GLOB operators.
+</ol>
+<li> Improvements to the <a href="cli.html">command-line shell</a>:
+<ol type='a'>
+ <li> The ".schema" command shows the structure of virtual tables.
+ <li> Added support for reading and writing
+ <a href="sqlar.html">SQLite Archive</a> files using
+ the <a href="cli.html#sqlar">.archive command</a>.
+ <li> Added the experimental <a href="cli.html#expert">.expert command</a>
+ <li> Added the ".eqp trigger" variant of the ".eqp" command
+ <li> Enhance the ".lint fkey-indexes" command so that it works with
+ <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+ <li> If the filename argument to the shell is a ZIP archive rather than
+ an SQLite database, then the shell automatically opens that ZIP
+ archive using the <a href="zipfile.html">Zipfile virtual table</a>.
+ <li> Added the <a href="cli.html#editfunc">edit() SQL function</a>.
+ <li> Added the <a href="cli.html#exexcel*">.excel command</a> to simplify exporting
+ database content to a spreadsheet.
+ <li> Databases are opened using
+ <a href="https://sqlite.org/src/file/ext/misc/appendvfs.c">Append VFS</a> when
+ the --append flag is used on the command line or with the
+ .open command.
+</ol>
+<li> Enhance the <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a> compile-time option so
+ that it works for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+<li> Provide the <a href="lang_corefunc.html#sqlite_offset">sqlite_offset(X)</a> SQL function that returns
+ the byte offset into the database file to the beginning of the record
+ holding value X, when compiling with <a href="compile.html#enable_offset_sql_func">-DSQLITE_ENABLE_OFFSET_SQL_FUNC</a>.
+<li> Bug fixes:
+<ol type='a'>
+ <li> Infinite loop on an UPDATE that uses an OR operator in the WHERE clause.
+ Problem introduced with 3.17.0 and reported on the mailing list about
+ one year later. Ticket
+ <a href="https://www.sqlite.org/src/info/47b2581aa9bfecec">47b2581aa9bfecec</a>.
+ <li> Incorrect query results when the skip-ahead-distinct optimization is
+ used.
+ Ticket <a href="https://sqlite.org/src/info/ef9318757b152e3a">ef9318757b152e3a</a>.
+ <li> Incorrect query results on a join with a ORDER BY DESC. Ticket
+ <a href="https://sqlite.org/src/info/123c9ba32130a6c9">123c9ba32130a6c9</a>.
+ <li> Inconsistent result set column names between CREATE TABLE AS
+ and a simple SELECT. Ticket
+ <a href="https://sqlite.org/src/info/3b4450072511e621">3b4450072511e621</a>
+ <li> Assertion fault when doing REPLACE on an index on an expression.
+ Ticket <a href="https://sqlite.org/src/info/dc3f932f5a147771">dc3f932f5a147771</a>
+ <li> Assertion fault when doing an IN operator on a constant index.
+ Ticket <a href="https://sqlite.org/src/info/aa98619ad08ddcab">aa98619ad08ddcab</a>
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d"
+<li>SHA3-256 for sqlite3.c: 206df47ebc49cd1710ac0dd716ce5de5854826536993f4feab7a49d136b85069
+
+
+</ol></p>
+<a name="version_3_21_0"></a>
+<h3>2017-10-24 (3.21.0)</h3><p><ol class='lessindent'>
+<li> Take advantage of the atomic-write capabilities in the
+ <a href="https://en.wikipedia.org/wiki/F2FS">F2FS filesystem</a> when available, for
+ greatly reduced transaction overhead. This currently requires the
+ <a href="compile.html#enable_batch_atomic_write">SQLITE_ENABLE_BATCH_ATOMIC_WRITE</a> compile-time option.
+<li> Allow <a href="lang_attach.html">ATTACH</a> and <a href="lang_detach.html">DETACH</a> commands to work inside of a transaction.
+<li> Allow <a href="vtab.html#worid">WITHOUT ROWID virtual tables</a> to be writable if the PRIMARY KEY
+ contains exactly one column.
+<li> The "fsync()" that occurs after the header is written in a WAL reset
+ now uses the sync settings for checkpoints. This means it will use a
+ "fullfsync" on macs if <a href="pragma.html#pragma_checkpoint_fullfsync">PRAGMA checkpoint_fullfsync</a> set on.
+<li> The <a href="c3ref/libversion.html">sqlite3_sourceid()</a> function tries to detect if the source code has
+ been modified from what is checked into version control and if there are
+ modifications, the last four characters of the version hash are shown as
+ "alt1" or "alt2". The objective is to detect accidental and/or careless
+ edits. A forger can subvert this feature.
+<li> Improved de-quoting of column names for <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> statements with
+ an aggregate query on the right-hand side.
+<li> Fewer "stat()" system calls issued by the unix VFS.
+<li> Enhanced the <a href="optoverview.html#like_opt">LIKE optimization</a> so that it works with an <a href="lang_expr.html#like">ESCAPE</a> clause.
+<li> Enhanced <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> to detect obscure
+ row corruption that they were formerly missing. Also update both pragmas
+ so that they return error text rather than SQLITE_CORRUPT when encountering
+ corruption in <a href="fileformat2.html#record_format">records</a>.
+<li> The query planner now prefers to implement FROM-clause subqueries using
+ <a href="optoverview.html#coroutines">co-routines</a> rather using the <a href="optoverview.html#flattening">query flattener</a> optimization. Support for
+ the use of co-routines for subqueries may no longer be disabled.
+<li> Pass information about !=, IS, IS NOT, NOT NULL, and IS NULL constraints
+ into the <a href="vtab.html#xbestindex">xBestIndex</a> method of virtual tables.
+<li> Enhanced the <a href="csv.html">CSV virtual table</a> so that it accepts the last row of
+ input if the final new-line character is missing.
+<li> Remove the rarely-used "scratch" memory allocator. Replace it with the
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsmallmalloc">SQLITE_CONFIG_SMALL_MALLOC</a> configuration setting that gives SQLite
+ a hint that large memory allocations should be avoided when possible.
+<li> Added the
+ <a href="https://sqlite.org/src/file/ext/misc/unionvtab.c">swarm virtual table</a>
+ to the existing union virtual table extension.
+<li> Added the
+ <a href="https://sqlite.org/src/file/src/dbpage.c">sqlite_dbpage virtual table</a>
+ for providing direct access to pages
+ of the database file. The source code is built into the <a href="amalgamation.html">amalgamation</a> and
+ is activated using the <a href="compile.html#enable_dbpage_vtab">-DSQLITE_ENABLE_DBPAGE_VTAB</a> compile-time option.
+<li> Add a new type of fts5vocab virtual table - "instance" - that provides
+ direct access to an FTS5 full-text index at the lowest possible level.
+<li> Remove a call to rand_s() in the Windows VFS since it was causing problems
+ in Firefox on some older laptops.
+<li> The <a href="https://sqlite.org/src/finfo?name=src/shell.c">src/shell.c</a> source code
+ to the <a href="cli.html">command-line shell</a> is no longer under version control. That file
+ is now generated as part of the build process.
+<li> Miscellaneous <a href="cpu.html#microopt">microoptimizations</a> reduce CPU usage by about 2.1%.
+<li> Bug fixes:
+<ol type="a">
+ <li> Fix a faulty assert() statement discovered by OSSFuzz.
+ Ticket <a href="https://sqlite.org/src/info/cb91bf4290c211d">cb91bf4290c211d</a>
+ <li> Fix an obscure memory leak in <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a>.
+ Ticket <a href="https://sqlite.org/src/info/7486aa54b968e9b">7486aa54b968e9b</a>
+ <li> Avoid a possible use-after-free error by deferring schema resets until
+ after the query planner has finished running.
+ Ticket <a href="https://sqlite.org/src/info/be436a7f4587ce5">be436a7f4587ce5</a>
+ <li> Only use indexes-on-expressions to optimize ORDER BY or GROUP BY if
+ the COLLATE is correct.
+ Ticket <a href="https://sqlite.org/src/info/e20dd54ab0e4383">e20dd54ab0e4383</a>
+ <li> Fix an assertion fault that was coming up when the expression in an
+ index-on-expressions is really a constant.
+ Ticket <a href="https://sqlite.org/src/info/aa98619ad08ddca">aa98619ad08ddca</a>
+ <li> Fix an assertion fault that could occur following
+ <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a>.
+ Ticket <a href="https://sqlite.org/src/info/cb91bf4290c211d">cb91bf4290c211d</a>
+ <li> Fix a segfault that can occur for queries that use table-valued functions
+ in an IN or EXISTS subquery.
+ Ticket <a href="https://sqlite.org/src/info/b899b6042f97f5">b899b6042f97f5</a>
+ <li> Fix a potential integer overflow problem when compiling a particular
+ horrendous common table expression. This was another problem discovered
+ by OSSFuzz. Check-in <a href="https://sqlite.org/src/info/6ee8cb6ae5">6ee8cb6ae5</a>.
+ <li> Fix a potential out-of-bound read when querying a corrupt database file,
+ a problem detected by Natalie Silvanovich of Google Project Zero.
+ Check-in <a href="https://sqlite.org/src/info/04925dee41a21f">04925dee41a21f</a>.
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827"
+<li>SHA3-256 for sqlite3.c: 84c181c0283d0320f488357fc8aab51898370c157601459ebee49d779036fe03
+
+</ol></p>
+<a name="version_3_20_1"></a>
+<h3>2017-08-24 (3.20.1)</h3><p><ol class='lessindent'>
+<li> Fix a potential memory leak in the new <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a> interface.
+ Ticket <a href="https://sqlite.org/src/info/7486aa54b968e9b5">7486aa54b968e9b5</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34"
+<li>SHA3-256 for sqlite3.c: 93b1a6d69b48dc39697d1d3a1e4c30b55da0bdd2cad0c054462f91081832954a
+
+</ol></p>
+<a name="version_3_20_0"></a>
+<h3>2017-08-01 (3.20.0)</h3><p><ol class='lessindent'>
+<li> Update the text of error messages returned by <a href="c3ref/errcode.html">sqlite3_errmsg()</a> for some
+ error codes.
+<li> Add new <a href="bindptr.html">pointer passing interfaces</a>.
+<li> Backwards-incompatible changes to some extensions in order to take
+ advantage of the improved security offered by the new
+ <a href="bindptr.html">pointer passing interfaces</a>:
+ <ol type='a'>
+ <li> <a href="fts5.html#extending_fts5">Extending FTS5</a> &rarr; requires <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to find
+ the fts5_api pointer.
+ <li> <a href="carray.html">carray(PTR,N)</a> &rarr; requires <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter.
+ <li> <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
+ &rarr; requires <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter.
+ </ol>
+<li> Added the <a href="stmt.html">SQLITE_STMT virtual table</a> extension.
+<li> Added the <a href="completion.html">COMPLETION extension</a> - designed to suggest
+ tab-completions for interactive user interfaces. This is a work in progress.
+ Expect further enhancements in future releases.
+<li> Added the <a href="unionvtab.html">UNION virtual table</a> extension.
+<li> The built-in <a href="lang_datefunc.html">date and time functions</a> have been enhanced so that they can be
+ used in <a href="lang_createtable.html#ckconst">CHECK constraints</a>, in <a href="expridx.html">indexes on expressions</a>, and in the WHERE clauses
+ of <a href="partialindex.html">partial indexes</a>, provided that they do not use the 'now', 'localtime', or
+ 'utc' keywords. <a href="deterministic.html#dtexception">More information</a>.
+<li> Added the <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a> and <a href="c3ref/prepare.html">sqlite3_prepare16_v3()</a> interfaces
+ with the extra "prepFlags" parameters.
+<li> Provide the <a href="c3ref/c_prepare_normalize.html#sqlitepreparepersistent">SQLITE_PREPARE_PERSISTENT</a> flag for <a href="c3ref/prepare.html">sqlite3_prepare_v3()</a> and
+ use it to limit <a href="malloc.html#lookaside">lookaside memory</a> misuse by <a href="fts3.html">FTS3</a>, <a href="fts5.html">FTS5</a>, and the
+ <a href="rtree.html">R-Tree extension</a>.
+<li> Added the <a href="pragma.html#pragma_secure_delete">PRAGMA secure_delete=FAST</a> command. When secure_delete is
+ set to FAST, old content is overwritten with zeros as long as that does
+ not increase the amount of I/O. Deleted content might still persist on
+ the <a href="fileformat2.html#freelist">free-page list</a> but will be purged from all b-tree pages.
+<li> Enhancements to the <a href="cli.html">command-line shell</a>:
+<ol type='a'>
+ <li> Add support for tab-completion using the <a href="completion.html">COMPLETION extension</a>, for
+ both readline and linenoise.
+ <li> Add the ".cd" command.
+ <li> Enhance the "<a href="cli.html#dschema">.schema</a>" command to show the schema of all attached
+ databases.
+ <li> Enhance "<a href="cli.html#dtables">.tables</a>" so that it shows the schema names for all attached
+ if the name is anything other than "main".
+ <li> The "<a href="cli.html#csv">.import</a>" command ignores an initial UTF-8 BOM.
+ <li> Added the "--newlines" option to the "<a href="cli.html#dump">.dump</a>" command to cause U+000a and
+ U+000d characters to be output literally rather than escaped using the
+ <a href="lang_corefunc.html#replace">replace()</a> function.
+</ol>
+<li> Query planner enhancements:
+<ol type='a'>
+ <li> When generating individual loops for each ORed term of an OR scan,
+ move any constant WHERE expressions outside of the loop, as is
+ done for top-level loops.
+ <li> The query planner examines the values of bound parameters to help
+ determine if a partial index is usable.
+ <li> When deciding between two plans with the same estimated cost, bias
+ the selection toward the one that does not use the sorter.
+ <li> Evaluate WHERE clause constraints involving correlated subqueries
+ last, in the hope that they never have be evaluated at all.
+ <li> Do not use the <a href="optoverview.html#flattening">flattening optimization</a> for a sub-query on the RHS
+ of a LEFT JOIN if that subquery reads data from a <a href="vtab.html">virtual table</a> as
+ doing so prevents the query planner from creating <a href="optoverview.html#autoindex">automatic indexes</a>
+ on the results of the sub-query, which can slow down the query.
+</ol>
+<li> Add <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">SQLITE_STMTSTATUS_REPREPARE</a>, <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">SQLITE_STMTSTATUS_RUN</a>,
+ and <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused">SQLITE_STMTSTATUS_MEMUSED</a> options for the
+ <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface.
+<li> Provide <a href="pragma.html#pragfunc">PRAGMA functions</a> for
+ <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a>, and
+ <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a>.
+<li> Add the -withoutnulls option to the <a href="tclsqlite.html#eval">TCL interface eval method</a>.
+<li> Enhance the <a href="sqlanalyze.html">sqlite3_analyzer.exe</a> utility program so that it shows
+ the number of bytes of metadata on btree pages.
+<li> The <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">SQLITE_DBCONFIG_ENABLE_QPSG</a> run-time option and the
+ <a href="compile.html#enable_qpsg">SQLITE_ENABLE_QPSG</a> compile-time option enable the
+ <a href="queryplanner-ng.html#qpstab">query planner stability guarantee</a>. See also ticket
+ <a href="https://www.sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>
+<li> Miscellaneous optimizations result in a 2% reduction in <a href="cpu.html">CPU cycles used</a>.
+<p><b>Bug Fixes:</b>
+<li> Fix the behavior of <a href="c3ref/column_name.html">sqlite3_column_name()</a> for queries that use the
+ <a href="optoverview.html#flattening">flattening optimization</a> so that the result is consistent with other
+ queries that do not use that optimization, and with PostgreSQL, MySQL,
+ and SQLServer. Ticket <a href="https://sqlite.org/src/info/de3403bf5ae">de3403bf5ae</a>.
+<li> Fix the query planner so that it knows not to use <a href="optoverview.html#autoindex">automatic indexes</a>
+ on the right table of LEFT JOIN if the WHERE clause uses the <a href="lang_expr.html#isisnot">IS operator</a>.
+ Fix for <a href="https://sqlite.org/src/info/ce68383bf6aba">ce68383bf6aba</a>.
+<li> Ensure that the query planner knows that any column of a
+ <a href="optoverview.html#flattening">flattened</a> LEFT JOIN can be NULL even
+ if that column is labeled with "NOT NULL". Fix for ticket
+ <a href="https://sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>.
+<li> Fix rare false-positives in <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> when run on a database connection
+ with <a href="lang_attach.html">attached databases</a>. Ticket
+ <a href="https://sqlite.org/src/info/a4e06e75a9ab61a12">a4e06e75a9ab61a12</a>
+<li> Fix a bug (discovered by OSSFuzz) that causes an assertion fault if certain
+ dodgy CREATE TABLE declarations are used. Ticket
+ <a href="https://sqlite.org/src/info/bc115541132dad136">bc115541132dad136</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8"
+<li>SHA3-256 for sqlite3.c: 79b7f3b977360456350219cba0ba0e5eb55910565eab68ea83edda2f968ebe95
+
+</ol></p>
+<a name="version_3_18_2"></a>
+<h3>2017-06-17 (3.18.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug that might cause duplicate output rows when an IN operator is
+ used in the WHERE clause.
+ Ticket <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-06-17 09:59:36 036ebf729e4b21035d7f4f8e35a6f705e6bf99887889e2dc14ebf2242e7930dd"
+<li>SHA3-256 for sqlite3.c: b0bd014f2776b9f9508a3fc6432f70e2436bf54475369f88f0aeef75b0eec93e
+
+</ol></p>
+<a name="version_3_18_1"></a>
+<h3>2017-06-16 (3.18.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug associated with <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> that can lead to database
+ corruption. The bug was introduced in <a href="#version_3_16_0">version 3.16.0</a> (2017-01-02).
+ Ticket <a href="https://sqlite.org/src/info/fda22108">fda22108</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-06-16 13:41:15 77bb46233db03a3338bacf7e56f439be3dfd1926ea0c44d252eeafa7a7b31c06"
+<li>SHA3-256 for sqlite3.c: 334eaf776db9d09a4e69d6012c266bc837107edc2c981739ef82081cb11c5723
+
+</ol></p>
+<a name="version_3_19_3"></a>
+<h3>2017-06-08 (3.19.3)</h3><p><ol class='lessindent'>
+<li>Fix a bug associated with <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> that can lead to database
+ corruption. The bug was introduced in <a href="#version_3_16_0">version 3.16.0</a> (2017-01-02).
+ Ticket <a href="https://sqlite.org/src/info/fda22108">fda22108</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b"
+<li>SHA3-256 for sqlite3.c: 368f1d31272b1739f804bcfa5485e5de62678015c4adbe575003ded85c164bb8
+
+</ol></p>
+<a name="version_3_19_2"></a>
+<h3>2017-05-25 (3.19.2)</h3><p><ol class='lessindent'>
+<li>Fix more bugs in the LEFT JOIN <a href="optoverview.html#flattening">flattening optimization</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/7fde638e94287d2c">7fde638e94287d2c</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-05-25 16:50:27 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9"
+<li>SHA3-256 for sqlite3.c: 1be0c457869c1f7eba58c3b5097b9ec307a15be338308bee8e5be8570bcf5d1e
+
+</ol></p>
+<a name="version_3_19_1"></a>
+<h3>2017-05-24 (3.19.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the LEFT JOIN <a href="optoverview.html#flattening">flattening optimization</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/cad1ab4cb7b0fc">cad1ab4cb7b0fc</a>.
+<li>Remove a surplus semicolon that was causing problems for older versions of MSVC.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-05-24 13:08:33 f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86"
+<li>SHA3-256 for sqlite3.c: 996b2aff37b6e0c6663d0312cd921bbdf6826c989cbbb07dadde5e9672889bca
+
+</ol></p>
+<a name="version_3_19_0"></a>
+<h3>2017-05-22 (3.19.0)</h3><p><ol class='lessindent'>
+<li> The <a href="c3ref/c_alter_table.html">SQLITE_READ</a> <a href="c3ref/set_authorizer.html">authorizer callback</a> is invoked once
+ with a column name that is an empty string
+ for every table referenced in a query from which no columns are extracted.
+<li> When using an index on an expression, try to use expression values already
+ available in the index, rather than loading the original columns and recomputing
+ the expression.
+<li> Enhance the <a href="optoverview.html#flattening">flattening optimization</a> so that it is able to flatten views
+ on the right-hand side of a LEFT JOIN.
+<li> Use <a href="lang_corefunc.html#replace">replace()</a> instead of <a href="lang_corefunc.html#char">char()</a> for escaping newline and carriage-return
+ characters embedded in strings in the .dump output from the <a href="cli.html">command-line shell</a>.
+<li> Avoid unnecessary foreign key processing in UPDATE statements that do not
+ touch the columns that are constrained by the foreign keys.
+<li> On a DISTINCT query that uses an index, try to skip ahead to the next distinct
+ entry using the index rather than stepping through rows, when an appropriate
+ index is available.
+<li> Avoid unnecessary invalidation of <a href="c3ref/blob.html">sqlite3_blob</a> handles when making
+ changes to unrelated tables.
+<li> Transfer any terms of the HAVING clause that use only columns mentioned in
+ the GROUP BY clause over to the WHERE clause for faster processing.
+<li> Reuse the same materialization of a VIEW if that VIEW appears more than
+ once in the same query.
+<li> Enhance <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> so that it identifies tables that have two
+ or more rows with the same <a href="lang_createtable.html#rowid">rowid</a>.
+<li> Enhance the <a href="fts5.html">FTS5</a> query syntax so that <a href="fts5.html#fts5_column_filters">column filters</a>
+ may be applied to arbitrary expressions.
+<li> Enhance the <a href="json1.html#jex">json_extract()</a> function to cache and reuse parses of JSON
+ input text.
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/anycollseq.c">anycollseq.c</a>
+ <a href="loadext.html">loadable extension</a> that allows a generic SQLite database connection to
+ read a schema that contains unknown and/or
+ application-specific <a href="datatype3.html#collation">collating sequences</a>.
+<p><b>Bug Fixes:</b>
+<li> Fix a problem in <a href="lang_replace.html">REPLACE</a> that can result in a corrupt database containing
+ two or more rows with the same <a href="lang_createtable.html#rowid">rowid</a>. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f68dc596c4e6018d">f68dc596c4e6018d</a>.
+<li> Fix a problem in <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> that was causing a subsequent
+ <a href="lang_vacuum.html">VACUUM</a> to behave suboptimally.
+<li> Fix the <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command so that it works correctly with
+ foreign keys on <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+<li> Fix a bug in the b-tree logic that can result in incorrect duplicate answers
+ for IN operator queries. Ticket
+ <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>
+<li> Disallow leading zeros in numeric constants in JSON. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/b93be8729a895a528e2">b93be8729a895a528e2</a>.
+<li> Disallow control characters inside of strings in JSON. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6c9b5514077fed34551">6c9b5514077fed34551</a>.
+<li> Limit the depth of recursion for JSON objects and arrays in order to avoid
+ excess stack usage in the recursive descent parser. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/981329adeef51011052">981329adeef51011052</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-05-22 13:58:13 28a94eb282822cad1d1420f2dad6bf65e4b8b9062eda4a0b9ee8270b2c608e40"
+<li>SHA3-256 for sqlite3.c: c30326aa1a9cc342061b755725eac9270109acf878bc59200dd4b1cea6bc2908
+
+</ol></p>
+<a name="version_3_18_0"></a>
+<h3>2017-03-30 (3.18.0)</h3><p><ol class='lessindent'>
+<li>Added the <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> command
+<li>The SQLite version identifier returned by the <a href="lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a> SQL function
+ and the <a href="c3ref/libversion.html">sqlite3_sourceid()</a> C API and found in the <a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a> macro is
+ now a 64-digit SHA3-256 hash instead of a 40-digit SHA1 hash.
+<li>Added the <a href="json1.html#jpatch">json_patch()</a> SQL function to the <a href="json1.html">JSON1 extension</a>.
+<li>Enhance the <a href="optoverview.html#like_opt">LIKE optimization</a> so that it works for arbitrary expressions on
+ the left-hand side as long as the LIKE pattern on the right-hand side does not
+ begin with a digit or minus sign.
+<li>Added the <a href="c3ref/set_last_insert_rowid.html">sqlite3_set_last_insert_rowid()</a> interface and use the new interface in
+ the <a href="fts3.html">FTS3</a>, <a href="fts3.html#fts4">FTS4</a>, and <a href="fts5.html">FTS5</a> extensions to ensure that the <a href="c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a>
+ interface always returns reasonable values.
+<li>Enhance <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> so that they verify
+ <a href="lang_createtable.html#ckconst">CHECK constraints</a>.
+<li>Enhance the query plans for joins to detect empty tables early and
+ halt without doing unnecessary work.
+<li>Enhance the <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> family of interfaces and the <a href="lang_corefunc.html#printf">printf SQL function</a>
+ to put comma separators at the thousands marks for integers, if the "," format modifier
+ is used in between the "%" and the "d" (example: "%,d").
+<li>Added the -D<a href="compile.html#max_memory">SQLITE_MAX_MEMORY</a>=<i>N</i> compile-time option.
+<li>Added the <a href="cli.html#sha3sum">.sha3sum dot-command</a> and the <a href="cli.html#selftest">.selftest dot-command</a>
+ to the <a href="cli.html">command-line shell</a>
+<li>Begin enforcing <a href="c3ref/c_limit_attached.html#sqlitelimitvdbeop">SQLITE_LIMIT_VDBE_OP</a>. This can be used, for example, to prevent
+ excessively large prepared statements in systems that accept SQL queries from
+ untrusted users.
+<li>Various performance improvements.
+<p><b>Bug Fixes:</b>
+<li>Ensure that indexed expressions with collating sequences are handled correctly.
+ Fix for ticket <a href="https://www.sqlite.org/src/info/eb703ba7b50c1a5">eb703ba7b50c1a5</a>.
+<li>Fix a bug in the 'start of ...' modifiers for the <a href="lang_datefunc.html">date and time functions</a>.
+ Ticket <a href="https://www.sqlite.org/src/info/6097cb92745327a1">6097cb92745327a1</a>
+<li>Fix a potential segfault in complex recursive triggers, resulting from a
+ bug in the OP_Once opcode introduced as part of a performance optimization in
+ version 3.15.0.
+ Ticket <a href="https://www.sqlite.org/src/info/06796225f59c057c">06796225f59c057c</a>
+<li>In the <a href="rbu.html">RBU extension</a>, add extra sync operations to avoid the possibility of
+ corruption following a power failure.
+<li>The <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a> output for nested SQL statements should always begin
+ with a "--" comment marker.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-03-28 18:48:43 424a0d380332858ee55bdebc4af3789f74e70a2b3ba1cf29d84b9b4bcf3e2e37"
+<li>SHA3-256 for sqlite3.c: cbf322df1f76be57fb3be84f3da1fc71d1d3dfdb7e7c2757fb0ff630b3bc2e5d
+
+</ol></p>
+<a name="version_3_17_0"></a>
+<h3>2017-02-13 (3.17.0)</h3><p><ol class='lessindent'>
+<li>Approximately 25% better performance from the <a href="rtree.html">R-Tree extension</a>.
+ <ol type='a'>
+ <li> Uses compiler built-ins (ex: __builtin_bswap32() or _byteswap_ulong())
+ for byteswapping when available.
+ <li> Uses the <a href="c3ref/blob.html">sqlite3_blob</a> key/value access object instead of SQL
+ for pulling content out of R-Tree nodes
+ <li> Other miscellaneous enhancements such as loop unrolling.
+ </ol>
+<li>Add the <a href="compile.html#default_lookaside">SQLITE_DEFAULT_LOOKASIDE</a> compile-time option.
+<li>Increase the default <a href="malloc.html#lookaside">lookaside</a>
+ size from 512,125 to 1200,100
+ as this provides better performance while only adding 56KB
+ of extra memory per connection. Memory-sensitive
+ applications can restore the old
+ default at compile-time, start-time, or run-time.
+<li>Use compiler built-ins __builtin_sub_overflow(), __builtin_add_overflow(),
+ and __builtin_mul_overflow() when available. (All compiler
+ built-ins can be omitted with the <a href="compile.html#disable_intrinsic">SQLITE_DISABLE_INTRINSIC</a> compile-time
+ option.)
+<li>Added the <a href="compile.html#enable_null_trim">SQLITE_ENABLE_NULL_TRIM</a> compile-time option, which
+ can result in significantly smaller database files for some
+ applications, at the risk of being incompatible with older
+ versions of SQLite.
+<li>Change <a href="compile.html#default_pcache_initsz">SQLITE_DEFAULT_PCACHE_INITSZ</a> from 100 to 20, for
+ improved performance.
+<li>Added the SQLITE_UINT64_TYPE compile-time option as an
+ analog to SQLITE_INT64_TYPE.
+<li>Perform some <a href="lang_update.html">UPDATE</a> operations in a single pass instead of
+ in two passes.
+<li>Enhance the <a href="sessionintro.html">session extension</a> to support <a href="withoutrowid.html">WITHOUT ROWID</a>
+ tables.
+<li>Fixed performance problems and potential stack overflows
+ when creating <a href="lang_createview.html">views</a> from multi-row VALUES clauses with
+ hundreds of thousands of rows.
+<li>Added the <a href="https://www.sqlite.org/src/file/ext/misc/sha1.c">sha1.c</a>
+ extension.
+<li>In the <a href="cli.html">command-line shell</a>, enhance the ".mode" command so that it
+ restores the default column and row separators for modes "line",
+ "list", "column", and "tcl".
+<li>Enhance the <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> option so that it works
+ in <a href="wal.html">WAL mode</a> as long as the pages being read are not in the WAL file.
+<li>Enhance the
+ <a href="lemon.html">Lemon parser generator</a>
+ so that it can store the parser object as a stack variable rather than
+ allocating space from the heap and make use of that enhancement in
+ the <a href="amalgamation.html">amalgamation</a>.
+<li>Other performance improvements. Uses about <a href="cpu.html">6.5% fewer CPU cycles</a>.
+<p><b>Bug Fixes:</b>
+<li>Throw an error if the ON clause of a LEFT JOIN references tables
+ to the right of the ON clause. This is the same behavior as
+ PostgreSQL. Formerly, SQLite silently converted the LEFT JOIN
+ into an INNER JOIN. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/25e335f802dd">25e335f802dd</a>.
+<li>Use the correct affinity for columns of automatic indexes. Ticket
+ <a href="https://www.sqlite.org/src/info/7ffd1ca1d2ad4ec">7ffd1ca1d2ad4ec</a>.
+<li>Ensure that the <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface can correctly
+ handle short rows. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/e6e962d6b0f06f46e">e6e962d6b0f06f46e</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-02-13 16:02:40 ada05cfa86ad7f5645450ac7a2a21c9aa6e57d2c"
+<li>SHA1 for sqlite3.c: cc7d708bb073c44102a59ed63ce6142da1f174d1
+
+
+</ol></p>
+<a name="version_3_16_2"></a>
+<h3>2017-01-06 (3.16.2)</h3><p><ol class='lessindent'>
+<li>Fix the <a href="lang_replace.html">REPLACE</a> statement for
+ <a href="withoutrowid.html">WITHOUT ROWID</a> tables that lack secondary indexes so that
+ it works correctly with triggers and foreign keys. This was a new bug
+ caused by performance optimizations added in version 3.16.0.
+ Ticket <a href="https://www.sqlite.org/src/info/30027b613b4">30027b613b4</a>
+<li>Fix the <a href="c3ref/value_blob.html">sqlite3_value_text()</a> interface so that it correctly
+ translates content generated by <a href="lang_corefunc.html#zeroblob">zeroblob()</a> into a string of all
+ 0x00 characters. This is a long-standing issue discovered after the
+ 3.16.1 release by <a href="https://github.com/google/oss-fuzz">OSS-Fuzz</a>
+<li>Fix the bytecode generator to deal with a subquery in the FROM clause
+ that is itself a UNION ALL where one side of the UNION ALL is a view
+ that contains an ORDER BY. This is a long-standing issue that was
+ discovered after the release of 3.16.1. See ticket
+ <a href="https://www.sqlite.org/src/info/190c2507">190c2507</a>.
+<li>Adjust the <a href="c3ref/column_count.html">sqlite3_column_count()</a> API so it more often returns the same
+ values for <a href="pragma.html#syntax">PRAGMA</a> statements as it did in prior releases, to
+ minimize disruption to applications that might be using that
+ interface in unexpected ways.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209"
+<li>SHA1 for sqlite3.c: 2bebdc3f24911c0d12b6d6c0123c3f84d6946b08
+
+</ol></p>
+<a name="version_3_16_1"></a>
+<h3>2017-01-03 (3.16.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug concerning the use of <a href="rowvalue.html">row values</a> within <a href="lang_createtrigger.html">triggers</a>
+ (see ticket <a href="https://www.sqlite.org/src/info/8c9458e7">8c9458e7</a>)
+ that was in version 3.15.0 but was not reported until moments after the 3.16.0
+ release was published.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd"
+<li>SHA1 for sqlite3.c: 354f6223490b30fd5320b4066b1535e4ce33988d
+
+</ol></p>
+<a name="version_3_16_0"></a>
+<h3>2017-01-02 (3.16.0)</h3><p><ol class='lessindent'>
+<li>Uses 9% fewer CPU cycles. (See the <a href="cpu.html">CPU performance measurement</a> report for
+ details on how this performance increase was computed.)
+<li>Added experimental support for <a href="pragma.html#pragfunc">PRAGMA functions</a>.
+<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose">SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</a> option to <a href="c3ref/db_config.html">sqlite3_db_config()</a>.
+<li>Enhance the <a href="lang_datefunc.html">date and time functions</a> so that the 'unixepoch' modifier works
+ for the full span of supported dates.
+<li>Changed the default configuration of the <a href="malloc.html#lookaside">lookaside memory allocator</a> from
+ 500 slots of 128 bytes each into 125 slots of 512 bytes each.
+<li>Enhanced "WHERE x NOT NULL" <a href="partialindex.html">partial indexes</a> so that they are usable if
+ the "x" column appears in a LIKE or GLOB operator.
+<li>Enhanced <a href="c3ref/interrupt.html">sqlite3_interrupt()</a> so that it interrupts <a href="wal.html#ckpt">checkpoint</a> operations that
+ are in process.
+<li>Enhanced the <a href="lang_expr.html#like">LIKE</a> and <a href="lang_expr.html#glob">GLOB</a> matching algorithm to be faster
+ for cases when the pattern contains multiple wildcards.
+<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
+<li>Added ".mode quote" to the <a href="cli.html">command-line shell</a>.
+<li>Added ".lint fkey-indexes" to the <a href="cli.html">command-line shell</a>.
+<li>Added the <a href="imposter.html#dotimposter">.imposter dot-command</a> to the <a href="cli.html">command-line shell</a>.
+<li>Added the <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
+ SQL function as a <a href="loadext.html">loadable extension</a>.
+<li>Rename the <a href="compile.html#omit_builtin_test">SQLITE_OMIT_BUILTIN_TEST</a> compile-time option to
+ <a href="compile.html#untestable">SQLITE_UNTESTABLE</a> to better reflect the implications of using it.
+<p><b>Bug Fixes:</b>
+<li>Fix a long-standing bug in the query planner that caused incorrect results
+ on a LEFT JOIN where the left-hand table is a subquery and the join constraint
+ is a bare column name coming from the left-hand subquery. Ticket
+ <a href="https://www.sqlite.org/src/info/2df0107b">2df0107b</a>.
+<li>Correctly handle the integer literal -0x8000000000000000 in the query planner.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-01-02 11:57:58 04ac0b75b1716541b2b97704f4809cb7ef19cccf"
+<li>SHA1 for sqlite3.c: e2920fb885569d14197c9b7958e6f1db573ee669
+
+</ol></p>
+<a name="version_3_15_2"></a>
+<h3>2016-11-28 (3.15.2)</h3><p><ol class='lessindent'>
+<li> Multiple bug fixes to the <a href="rowvalue.html">row value</a> logic that was introduced in version 3.15.0.
+<li> Fix a NULL pointer dereference in ATTACH/DETACH following a maliciously constructed
+ syntax error. Ticket
+ <a href="https://www.sqlite.org/src/info/2f1b168ab4d4844">2f1b168ab4d4844</a>.
+<li> Fix a crash that can occur following an out-of-memory condition
+ in the built-in <a href="lang_corefunc.html#instr">instr()</a> function.
+<li> In the <a href="json1.html">JSON extension</a>, fix the JSON validator so that it correctly rejects
+ invalid backslash escapes within strings.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8"
+<li>SHA1 for sqlite3.c: 06d77b42a3e70609f8d4bbb97caf53652f1082cb
+
+</ol></p>
+<a name="version_3_15_1"></a>
+<h3>2016-11-04 (3.15.1)</h3><p><ol class='lessindent'>
+<li> Added <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
+<li> Fix the <a href="lang_vacuum.html">VACUUM</a> command so that it spills excess content to disk rather
+ than holding everything in memory, and possible causing an out-of-memory
+ error for larger database files. This fixes an issue introduced by
+ version 3.15.0.
+<li> Fix a case (present since 3.8.0 - 2013-08-26)
+ where OR-connected terms in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ <a href="https://www.sqlite.org/src/info/34a579141b2c5ac">34a579141b2c5ac</a>.
+<li> Fix a case where the use of <a href="rowvalue.html">row values</a> in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ <a href="https://www.sqlite.org/src/info/fef4bb4bd9185ec8f">fef4bb4bd9185ec8f</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-11-04 12:08:49 1136863c76576110e710dd5d69ab6bf347c65e36"
+<li>SHA1 for sqlite3.c: e7c26a7be3e431dd06898f8d262c4ef240c07366
+
+</ol></p>
+<a name="version_3_15_0"></a>
+<h3>2016-10-14 (3.15.0)</h3><p><ol class='lessindent'>
+<li> Added support for <a href="rowvalue.html">row values</a>.
+<li> Allow <a href="deterministic.html">deterministic SQL functions</a> in the WHERE clause of a <a href="partialindex.html">partial index</a>.
+<li> Added the "<a href="uri.html#urimodeof">modeof=<i>filename</i></a>" URI parameter on the unix VFS
+<li> Added support for <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname">SQLITE_DBCONFIG_MAINDBNAME</a>.
+<li> Added the ability to <a href="lang_vacuum.html">VACUUM</a> an <a href="lang_attach.html">ATTACH-ed</a> database.
+<li> Enhancements to the <a href="cli.html">command-line shell</a>:
+ <ol type='a'>
+ <li> Add the ".testcase" and ".check" <a href="cli.html#dotcmd">dot-commands</a>.
+ <li> Added the --new option to the ".open" dot-command, causing
+ any prior content in the database to be purged prior to
+ opening.
+ </ol>
+<li> Enhance the <a href="fts5.html#the_fts5vocab_virtual_table_module">fts5vocab</a> virtual table to handle "ORDER BY term" efficiently.
+<li> Miscellaneous micro-optimizations reduce CPU usage by more than 7%
+ on common workloads. Most optimization in this release has been on the
+ front-end (<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>).
+<p><b>Bug Fixes:</b>
+<li> The multiply operator now correctly detects 64-bit integer overflow
+ and promotes to floating point in all corner-cases. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/1ec41379c9c1e400">1ec41379c9c1e400</a>.
+<li> Correct handling of columns with redundant unique indexes when those
+ columns are used on the LHS of an <a href="lang_expr.html#in_op">IN operator</a>. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/0eab1ac759">0eab1ac759</a>.
+<li> Skip NULL entries on range queries in <a href="expridx.html">indexes on expressions</a>.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/tktview/4baa46491212947">4baa46491212947</a>.
+<li> Ensure that the <a href="autoinc.html">AUTOINCREMENT</a> counters in the sqlite_sequence
+ table are initialized doing "Xfer Optimization" on "INSERT ... SELECT"
+ statements. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7b3328086a5c116c">7b3328086a5c116c</a>.
+<li> Make sure the ORDER BY LIMIT optimization
+ (from check-in <a href="https://www.sqlite.org/src/info/559733b09e9630fa">559733b09e</a>)
+ works with IN operators on INTEGER PRIMARY KEYs. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/96c1454cbfd9509">96c1454c</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-10-14 10:20:30 707875582fcba352b4906a595ad89198d84711d8"
+<li>SHA1 for sqlite3.c: fba106f8f6493c66eeed08a2dfff0907de54ae76
+
+</ol></p>
+<a name="version_3_14_2"></a>
+<h3>2016-09-12 (3.14.2)</h3><p><ol class='lessindent'>
+<li> Improved support for using the STDCALL calling convention in winsqlite3.dll.
+<li> Fix the <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a> interface so that it is disabled if either the
+callback or the mask arguments are zero, in accordance with the documentation.
+<li> Fix commenting errors and improve the comments generated on <a href="lang_explain.html">EXPLAIN</a> listings
+when the <a href="compile.html#enable_explain_comments">-DSQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is used.
+<li> Fix the ".read" command in the <a href="cli.html">command-line shell</a> so that it understands
+that its input is not interactive.
+<li> Correct affinity computations for a SELECT on the RHS of an IN operator.
+Fix for ticket <a href="https://sqlite.org/src/info/199df4168c">199df4168c</a>.
+<li> The ORDER BY LIMIT optimization is not valid unless the inner-most IN operator
+loop is actually used by the query plan. Fix for
+ticket <a href="https://sqlite.org/src/info/0c4df46116e90f92">0c4df46116e90f92</a>.
+<li> Fix an internal code generator problem that was causing some <a href="lang_delete.html">DELETE</a> operations
+to no-op. Ticket <a href="https://sqlite.org/src/info/ef360601">ef360601</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-09-12 18:50:49 29dbef4b8585f753861a36d6dd102ca634197bd6"
+<li>SHA1 for sqlite3.c: bcc4a1989db45e7f223191f2d0f66c1c28946383
+
+</ol></p>
+<a name="version_3_14_1"></a>
+<h3>2016-08-11 (3.14.1)</h3><p><ol class='lessindent'>
+<li>A performance enhancement to the page-cache "truncate" operation
+ reduces <a href="lang_transaction.html">COMMIT</a> time by dozens of milliseconds on systems with a
+ large <a href="pragma.html#pragma_cache_size">page cache</a>.
+<li>Fix to the --rbu option of <a href="sqldiff.html">sqldiff</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b"
+<li>SHA1 for sqlite3.c: d545b24892278272ce4e40e0567d69c8babf12ea
+
+</ol></p>
+<a name="version_3_14"></a>
+<h3>2016-08-08 (3.14)</h3><p><ol class='lessindent'>
+<div style="width:280px;float:right;padding:10px;margin:0px 10px;">
+<img src='images/sqlitepie.jpg' width=280 height=250></img><br>
+<center>Celebrating the SQLite "<big>&pi;</big> release"
+with a home-baked pie.</center>
+</div>
+<li>Added support for <a href="vtab.html#worid">WITHOUT ROWID virtual tables</a>.
+<li>Improved the query planner so that the <a href="optoverview.html#or_opt">OR optimization</a> can
+ be used on <a href="vtab.html">virtual tables</a> even if one or more of the disjuncts
+ use the <a href="lang_expr.html#like">LIKE</a>, <a href="lang_expr.html#glob">GLOB</a>, <a href="lang_expr.html#regexp">REGEXP</a>, <a href="lang_expr.html#match">MATCH</a> operators.
+<li>Added the <a href="csv.html">CSV virtual table</a> for reading
+ <a href="https://www.ietf.org/rfc/rfc4180.txt">RFC 4180</a> formatted comma-separated
+ value files.
+<li>Added the <a href="carray.html">carray() table-valued function</a> extension.
+<li>Enabled <a href="loadext.html#persist">persistent loadable extensions</a> using the new
+ <a href="rescode.html#ok_load_permanently">SQLITE_OK_LOAD_PERMANENTLY</a> return code from the extension
+ entry point.
+<li>Added the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared">SQLITE_DBSTATUS_CACHE_USED_SHARED</a> option to <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
+<li>Add the
+ <a href="https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/vfsstat.c">vfsstat.c</a>
+ loadable extension - a VFS shim that measures I/O
+ together with an <a href="vtab.html#epovtab">eponymous virtual table</a> that provides access to the measurements.
+<li>Improved algorithm for running queries with both an ORDER BY and a LIMIT where
+ only the inner-most loop naturally generates rows in the correct order.
+<li>Enhancements to <a href="lemon.html">Lemon parser generator</a>, so that it generates a
+ faster parser.
+<li>The <a href="pragma.html#pragma_compile_options">PRAGMA compile_options</a> command now attempts to show the version number
+ of the compiler that generated the library.
+<li>Enhance <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> so that it provides information about
+ <a href="vtab.html#epovtab">eponymous virtual tables</a>.
+<li>Added the "win32-none" VFS, analogous to the "unix-none" VFS, that works like
+ the default "win32" VFS except that it ignores all file locks.
+<li>The query planner uses a full scan of a <a href="partialindex.html">partial index</a> instead of a
+ full scan of the main table, in cases where that makes sense.
+<li>Allow <a href="vtab.html#tabfunc2">table-valued functions</a> to appear on the right-hand side of an <a href="lang_expr.html#in_op">IN operator</a>.
+<li>Created the <a href="dbhash.html">dbhash.exe</a> command-line utility.
+<li>Added two new C-language interfaces: <a href="c3ref/expanded_sql.html">sqlite3_expanded_sql()</a> and
+ <a href="c3ref/trace_v2.html">sqlite3_trace_v2()</a>. These new interfaces subsume the functions of
+ <a href="c3ref/profile.html">sqlite3_trace()</a> and <a href="c3ref/profile.html">sqlite3_profile()</a> which are now deprecated.
+<li>Added the <a href="json1.html#jquote">json_quote()</a> SQL function to <a href="json1.html">the json1 extension</a>.
+<li>Disable the <a href="c3ref/set_authorizer.html">authorizer callback</a> while reparsing the schema.
+<li>Added the <a href="compile.html#enable_unknown_sql_function">SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</a> compile-time option and turned that
+ option on by default when building the <a href="cli.html">command-line shell</a>.
+<p><b>Bug Fixes:</b>
+<li>Fix the <a href="lang_altertable.html">ALTER TABLE</a> command so that it does not corrupt <a href="lang_createindex.html#descidx">descending indexes</a>
+ when adding a column to a <a href="pragma.html#pragma_legacy_file_format">legacy file format</a> database. Ticket
+ <a href="https://www.sqlite.org/src/info/f68bf68513a1c15f">f68bf68513a1c15f</a>
+<li>Fix a NULL-pointer dereference/crash that could occurs when a transitive WHERE
+ clause references a non-existent collating sequence. Ticket
+ <a href="https://www.sqlite.org/src/info/e8d439c77685eca6">e8d439c77685eca6</a>.
+<li>Improved the cost estimation for an index scan which includes a WHERE clause
+ that can be partially or fully evaluated using columns in the index and without
+ having to do a table lookup. This fixes a performance regression that occurred
+ for some obscure queries following the ORDER BY LIMIT optimization introduced
+ in <a href="#version_3_12_0">version 3.12.0</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de"
+<li>SHA1 for sqlite3.c: 234a3275d03a287434ace3ccdf1afb208e6b0e92
+
+</ol></p>
+<a name="version_3_13_0"></a>
+<h3>2016-05-18 (3.13.0)</h3><p><ol class='lessindent'>
+<li>Postpone I/O associated with TEMP files for as long as possible, with the hope
+ that the I/O can ultimately be avoided completely.
+<li>Merged the <a href="sessionintro.html">session</a> extension into trunk.
+<li>Added the ".auth ON|OFF" command to the <a href="cli.html">command-line shell</a>.
+<li>Added the "--indent" option to the ".schema" and ".fullschema" commands of
+ the <a href="cli.html">command-line shell</a>, to turn on pretty-printing.
+<li>Added the ".eqp full" option to the <a href="cli.html">command-line shell</a>, that does both <a href="lang_explain.html">EXPLAIN</a>
+ and <a href="eqp.html">EXPLAIN QUERY PLAN</a> on each statement that is evaluated.
+<li>Improved unicode filename handling in the <a href="cli.html">command-line shell</a> on Windows.
+<li>Improved resistance against goofy query planner decisions caused by
+ incomplete or incorrect modifications to the <a href="fileformat2.html#stat1tab">sqlite_stat1</a>
+ table by the application.
+<li>Added the <a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a>) interface
+ which allows the <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> C-API to be enabled while keeping the
+ <a href="lang_corefunc.html#load_extension">load_extension()</a> SQL function disabled for security.
+<li>Change the <a href="tempfiles.html#tempdir">temporary directory search algorithm</a> on Unix to allow directories with
+ write and execute permission, but without read permission, to serve as temporary
+ directories. Apply this same standard to the "." fallback directory.
+<p><b>Bug Fixes:</b>
+<li>Fix a problem with the multi-row one-pass DELETE optimization that was
+ causing it to compute incorrect answers with a self-referential subquery in
+ the WHERE clause. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/dc6ebeda9396087">dc6ebeda9396087</a>
+<li>Fix a possible segfault with DELETE when table is a <a href="rowidtable.html">rowid table</a> with an
+ <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> and the WHERE clause contains a OR and
+ the table has one or more indexes that are able to trigger the OR optimization,
+ but none of the indexes reference any table columns other than the INTEGER PRIMARY KEY.
+ Ticket <a href="https://www.sqlite.org/src/info/16c9801ceba49">16c9801ceba49</a>.
+<li>When checking for the WHERE-clause push-down optimization, verify that all terms
+ of the compound inner SELECT are non-aggregate, not just the last term. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f7f8c97e97597">f7f8c97e97597</a>.
+<li>Fix a locking race condition in Windows that can occur when two or more processes
+ attempt to recover the same <a href="fileformat2.html#hotjrnl">hot journal</a> at the same time.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-05-18 10:57:30 fc49f556e48970561d7ab6a2f24fdd7d9eb81ff2"
+<li>SHA1 for sqlite3.c: 9b9171b1e6ce7a980e6b714e9c0d9112657ad552
+
+<p><b>Bug fixes backported into patch release 3.12.2 (2016-04-18):</b></p>
+
+<li>Fix a backwards compatibility problem in version 3.12.0 and 3.12.1:
+ Columns declared as <tt>"INTEGER" PRIMARY KEY</tt> (with quotes around
+ the datatype keyword) were not being recognized as an
+ <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, which resulted in an incompatible database file.
+ Ticket <a href="https://www.sqlite.org/src/info/7d7525cb01b68">7d7525cb01b68</a>
+<li>Fix a bug (present since <a href="#version_3_9_0">version 3.9.0</a>) that can cause the <a href="lang_delete.html">DELETE</a>
+ operation to miss rows if <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> is turned on.
+ Ticket <a href="https://www.sqlite.org/src/info/a306e56ff68b8fa5">a306e56ff68b8fa5</a>
+<li>Fix a bug in the code generator that can cause incorrect results if
+ two or more <a href="vtab.html">virtual tables</a> are joined and the virtual table used in
+ outer loop of the join has an <a href="lang_expr.html#in_op">IN operator</a> constraint.
+<li>Correctly interpret negative "PRAGMA cache_size" values when determining
+ the cache size used for sorting large amounts of data.
+
+<p><b>Bug fixes backported into patch release 3.12.1 (2016-04-08):</b></p>
+
+<li>Fix a boundary condition error introduced by version 3.12.0
+ that can result in a crash during heavy <a href="lang_savepoint.html">SAVEPOINT</a> usage.
+ Ticket <a href="https://www.sqlite.org/src/info/7f7f8026eda38">7f7f8026eda38</a>.
+<li>Fix <a href="lang_createview.html">views</a> so that they inherit column datatypes from the
+ table that they are defined against, when possible.
+<li>Fix the query planner so that IS and IS NULL operators are able
+ to drive an index on a LEFT OUTER JOIN.
+
+</ol></p>
+<a name="version_3_12_2"></a>
+<h3>2016-04-18 (3.12.2)</h3><p><ol class='lessindent'>
+<li>Fix a backwards compatibility problem in version 3.12.0 and 3.12.1:
+ Columns declared as <tt>"INTEGER" PRIMARY KEY</tt> (with quotes around
+ the datatype keyword) were not being recognized as an
+ <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, which resulted in an incompatible database file.
+ Ticket <a href="https://www.sqlite.org/src/info/7d7525cb01b68">7d7525cb01b68</a>
+<li>Fix a bug (present since <a href="#version_3_9_0">version 3.9.0</a>) that can cause the <a href="lang_delete.html">DELETE</a>
+ operation to miss rows if <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> is turned on.
+ Ticket <a href="https://www.sqlite.org/src/info/a306e56ff68b8fa5">a306e56ff68b8fa5</a>
+<li>Fix a bug in the code generator that can cause incorrect results if
+ two or more <a href="vtab.html">virtual tables</a> are joined and the virtual table used in
+ outer loop of the join has an <a href="lang_expr.html#in_op">IN operator</a> constraint.
+<li>Correctly interpret negative "PRAGMA cache_size" values when determining
+ the cache size used for sorting large amounts of data.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-04-18 17:30:31 92dc59fd5ad66f646666042eb04195e3a61a9e8e"
+<li>SHA1 for sqlite3.c: de5a5898ebd3a3477d4652db143746d008b24c83
+
+</ol></p>
+<a name="version_3_12_1"></a>
+<h3>2016-04-08 (3.12.1)</h3><p><ol class='lessindent'>
+<li>Fix a boundary condition error introduced by version 3.12.0
+ that can result in a crash during heavy <a href="lang_savepoint.html">SAVEPOINT</a> usage.
+ Ticket <a href="https://www.sqlite.org/src/info/7f7f8026eda38">7f7f8026eda38</a>.
+<li>Fix <a href="lang_createview.html">views</a> so that they inherit column datatypes from the
+ table that they are defined against, when possible.
+<li>Fix the query planner so that IS and IS NULL operators are able
+ to drive an index on a LEFT OUTER JOIN.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-04-08 15:09:49 fe7d3b75fe1bde41511b323925af8ae1b910bc4d"
+<li>SHA1 for sqlite3.c: ebb18593350779850e3e1a930eb84a70fca8c1d1
+
+</ol></p>
+<a name="version_3_9_3"></a>
+<h3>2016-04-01 (3.9.3)</h3><p><ol class='lessindent'>
+<li>Backport a
+ <a href="https://www.sqlite.org/src/info/c648539b52ca28c0">simple query planner optimization</a>
+ that allows the IS operator
+ to drive an index on a LEFT OUTER JOIN. No other changes from the
+ <a href="#version_3_9_2">version 3.9.2</a> baseline.
+
+</ol></p>
+<a name="version_3_12_0"></a>
+<h3>2016-03-29 (3.12.0)</h3><p><ol class='lessindent'>
+<p><b>Potentially Disruptive Change:</b>
+<li>The <a href="compile.html#default_page_size">SQLITE_DEFAULT_PAGE_SIZE</a> is increased from 1024 to 4096.
+ The <a href="compile.html#default_cache_size">SQLITE_DEFAULT_CACHE_SIZE</a> is changed from 2000 to -2000 so
+ the same amount of cache memory is used by default.
+ See the application note on the
+ <a href="pgszchng2016.html">version 3.12.0 page size change</a> for further information.
+<p><b>Performance enhancements:</b>
+<li>Enhancements to the <a href="lemon.html">Lemon parser generator</a>
+ so that it creates a smaller and faster SQL parser.
+<li>Only create <a href="tempfiles.html#superjrnl">master journal</a> files if two or more attached databases are all
+ modified, do not have <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF, and
+ do not have the <a href="pragma.html#pragma_journal_mode">journal_mode</a> set to OFF, MEMORY, or WAL.
+<li>Only create <a href="tempfiles.html#stmtjrnl">statement journal</a> files when their size exceeds a threshold.
+ Otherwise the journal is held in memory and no I/O occurs. The threshold
+ can be configured at compile-time using <a href="compile.html#stmtjrnl_spill">SQLITE_STMTJRNL_SPILL</a> or at
+ start-time using <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">SQLITE_CONFIG_STMTJRNL_SPILL</a>).
+<li>The query planner is able to optimize IN operators on <a href="vtab.html">virtual tables</a>
+ even if the <a href="vtab.html#xbestindex">xBestIndex</a> method does not set the
+ sqlite3_index_constraint_usage.omit flag of the
+ virtual table column to the left of the IN operator.
+<li>The query planner now does a better job of optimizing <a href="vtab.html">virtual table</a>
+ accesses in a 3-way or higher join where constraints on the virtual
+ table are split across two or more other tables of the join.
+<li>More efficient handling of <a href="appfunc.html">application-defined SQL functions</a>, especially
+ in cases where the application defines hundreds or thousands of
+ custom functions.
+<li>The query planner considers the LIMIT clause when estimating the cost
+ of ORDER BY.
+<li>The configure script (on unix) automatically detects
+ pread() and pwrite() and sets compile-time options to use those OS
+ interfaces if they are available.
+<li>Reduce the amount of memory needed to hold the schema.
+<li>Other miscellaneous micro-optimizations for improved performance and reduced
+ memory usage.
+<p><b>New Features:</b>
+<li>Added the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a> option to <a href="c3ref/db_config.html">sqlite3_db_config()</a>
+ which allows the two-argument version of the <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> SQL function to
+ be enabled or disabled at run-time.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/d7cc99350?ln=403-443">sqlite3rbu_bp_progress()</a>
+ interface to the <a href="rbu.html">RBU</a> extension.
+<li>The <a href="pragma.html#pragma_defer_foreign_keys">PRAGMA defer_foreign_keys=ON</a> statement now also disables
+ <a href="foreignkeys.html#fk_actions">RESTRICT actions</a> on foreign key.
+<li>Added the <a href="c3ref/system_errno.html">sqlite3_system_errno()</a> interface.
+<li>Added the <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> and <a href="compile.html#default_wal_synchronous">SQLITE_DEFAULT_WAL_SYNCHRONOUS</a>
+ compile-time options. The <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> compile-time option
+ replaces the <a href="compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> option, which is no longer supported.
+<li>Enhanced the ".stats" command in the <a href="cli.html">command-line shell</a> to show more
+ information about I/O performance obtained from /proc, when available.
+<p><b>Bug fixes:</b>
+<li>Make sure the <a href="c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> values from multiple triggers
+ within a single statement do not interfere with one another.
+ Ticket <a href="https://www.sqlite.org/src/info/dc9b1c91">dc9b1c91</a>.
+<li>Fix the code generator for expressions of the form "x IN (SELECT...)" where
+ the SELECT statement on the RHS is a correlated subquery.
+ Ticket <a href="https://www.sqlite.org/src/info/5e3c886796e5512e">5e3c886796e5512e</a>.
+<li>Fix a harmless TSAN warning associated with the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-03-29 10:14:15 e9bb4cf40f4971974a74468ef922bdee481c988b"
+<li>SHA1 for sqlite3.c: cba2be96d27cb51978cd4a200397a4ad178986eb
+
+</ol></p>
+<a name="version_3_11_1"></a>
+<h3>2016-03-03 (3.11.1)</h3><p><ol class='lessindent'>
+<li>Improvements to the Makefiles and build scripts used by VisualStudio.
+<li>Fix an <a href="fts5.html">FTS5</a> issue in which the 'optimize' command could cause index corruption.
+<li>Fix a buffer overread that might occur if <a href="fts5.html">FTS5</a> is used to query a corrupt
+ database file.
+<li>Increase the maximum "scope" value for the <a href="spellfix1.html">spellfix1</a> extension from 6 to 30.
+<li>SQLITE_SOURCE_ID: "2016-03-03 16:17:53 f047920ce16971e573bc6ec9a48b118c9de2b3a7"
+<li>SHA1 for sqlite3.c: 3da832fd2af36eaedb05d61a8f4c2bb9f3d54265
+
+</ol></p>
+<a name="version_3_11_0"></a>
+<h3>2016-02-15 (3.11.0)</h3><p><ol class='lessindent'>
+<p><b>General improvements:</b>
+<li>Enhanced <a href="wal.html">WAL mode</a> so that it works efficiently with transactions that are
+ larger than the <a href="pragma.html#pragma_cache_size">cache_size</a>.
+<li>Added the <a href="fts5.html#the_detail_option">FTS5 detail option</a>.
+<li>Added the "EXTRA" option to <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> that does a sync of the
+ containing directory when a rollback journal is unlinked in DELETE mode,
+ for better durability. The <a href="compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> compile-time option enables
+ <a href="pragma.html#pragma_synchronous">PRAGMA synchronous=EXTRA</a> by default.
+<li>Enhanced the <a href="optoverview.html">query planner</a> so that it is able to use
+ a <a href="queryplanner.html#covidx">covering index</a> as part of the <a href="optoverview.html#or_opt">OR optimization</a>.
+<li>Avoid recomputing <a href="lang_createtable.html#notnullconst">NOT NULL</a> and <a href="lang_createtable.html#ckconst">CHECK constraints</a> on unchanged
+ columns in <a href="lang_update.html">UPDATE</a> statement.
+<li>Many micro-optimizations, resulting in a library that is
+ faster than the previous release.
+<p><b>Enhancements to the <a href="cli.html">command-line shell</a>:</b>
+<li>By default, the shell is now in "auto-explain" mode. The output of
+ <a href="lang_explain.html">EXPLAIN</a> commands is automatically formatted.
+<li>Added the ".vfslist" <a href="cli.html#dotcmd">dot-command</a>.
+<li>The <a href="compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is now turned
+ on by default in the standard builds.
+<p><b>Enhancements to the <a href="tclsqlite.html">TCL Interface</a>:</b>
+<li>If a database connection is opened with the "-uri 1" option, then
+ <a href="uri.html">URI filenames</a> are honored by the "backup" and "restore" commands.
+<li>Added the "-sourceid" option to the "sqlite3" command.
+<p><b>Makefile improvements:</b>
+<li>Improved pthreads detection in configure scripts.
+<li>Add the ability to do MSVC Windows builds from the <a href="download.html">amalgamation tarball</a>.
+<p><b>Bug fixes</b>
+<li>Fix an issue with incorrect sharing of VDBE temporary registers between
+ co-routines that could cause incorrect query results in obscure cases. Ticket
+ <a href="https://www.sqlite.org/src/info/d06a25c84454a">d06a25c84454a</a>.
+<li>Fix a problem in the <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a> interface that could
+ cause problems for the <a href="json1.html">json1</a> extension under obscure circumstances.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f45ac567eaa9f9">f45ac567eaa9f9</a>.
+<li>Escape control characters in JSON strings. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/ad2559db380abf8">ad2559db380abf8</a>.
+<li>Reenable the xCurrentTime and xGetLastError methods in the built-in
+ unix <a href="vfs.html">VFSes</a> as long as <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a> is not defined.
+<p><b>Backwards Compatibility:</b>
+<li>Because of continuing security concerns, the two-argument version
+ of the seldom-used and little-known <a href="fts3.html#f3tknzr">fts3_tokenizer()</a> function is
+ disabled unless SQLite is compiled with the <a href="compile.html#enable_fts3_tokenizer">SQLITE_ENABLE_FTS3_TOKENIZER</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f"
+<li>SHA1 for sqlite3.c: df01436c5fcfe72d1a95bc172158219796e1a90b
+
+
+</ol></p>
+<a name="version_3_10_2"></a>
+<h3>2016-01-20 (3.10.2)</h3><p><ol class='lessindent'>
+<p><b>Critical bug fix:</b>
+<li>Version 3.10.0 introduced a case-folding bug in the <a href="lang_expr.html#like">LIKE</a> operator which is fixed
+ by this patch release. Ticket
+ <a href="https://www.sqlite.org/src/info/80369eddd5c94">80369eddd5c94</a>.
+<p><b>Other miscellaneous bug fixes:</b>
+<li>Fix a use-after-free that can occur when SQLite is compiled with -DSQLITE_HAS_CODEC.
+<li>Fix the build so that it works with -DSQLITE_OMIT_WAL.
+<li>Fix the configure script for the amalgamation so that the --readline option works again
+ on Raspberry PIs.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-01-20 15:27:19 17efb4209f97fb4971656086b138599a91a75ff9"
+<li>SHA1 for sqlite3.c: f7088b19d97cd7a1c805ee95c696abd54f01de4f
+
+</ol></p>
+<a name="version_3_10_1"></a>
+<h3>2016-01-14 (3.10.1)</h3><p><ol class='lessindent'>
+<p><b>New feature:</b>
+<li>Add the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> file control.
+<p><b>Bug fix:</b>
+<li>Fix a 16-month-old bug in the query planner that could generate incorrect results
+ when a scalar subquery attempts to use the <a href="queryplanner.html#partialsort">block sorting</a> optimization. Ticket
+ <a href="https://www.sqlite.org/src/info/cb3aa0641d9a4">cb3aa0641d9a4</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-01-13 21:41:56 254419c36766225ca542ae873ed38255e3fb8588"
+<li>SHA1 for sqlite3.c: 1398ba8e4043550a533cdd0834bfdad1c9eab0f4
+
+</ol></p>
+<a name="version_3_10_0"></a>
+<h3>2016-01-06 (3.10.0)</h3><p><ol class='lessindent'>
+<p><b>General improvements:</b>
+<li>Added support for <a href="lang_expr.html#like">LIKE</a>, <a href="lang_expr.html#glob">GLOB</a>, and <a href="lang_expr.html#regexp">REGEXP</a> operators on <a href="vtab.html">virtual tables</a>.
+<li>Added the <a href="vtab.html#colUsed">colUsed field</a> to <a href="c3ref/index_info.html">sqlite3_index_info</a> for use by
+ the <a href="vtab.html#xbestindex">sqlite3_module.xBestIndex</a> method.
+<li>Enhance the <a href="pragma.html#pragma_cache_spill">PRAGMA cache_spill</a> statement to accept a 32-bit integer
+ parameter which is the threshold below which cache spilling is prohibited.
+<li>On unix, if a symlink to a database file is opened, then the corresponding
+ journal files are based on the actual filename, not the symlink name.
+<li>Added the "--transaction" option to <a href="sqldiff.html">sqldiff</a>.
+<li>Added the <a href="c3ref/db_cacheflush.html">sqlite3_db_cacheflush()</a> interface.
+<li>Added the <a href="c3ref/strlike.html">sqlite3_strlike()</a> interface.
+<li>When using <a href="mmap.html">memory-mapped I/O</a> map the database file read-only so that stray pointers
+ and/or array overruns in the application cannot accidentally modify the database file.
+<li>Added the <em>experimental</em> <a href="c3ref/snapshot_get.html">sqlite3_snapshot_get()</a>, <a href="c3ref/snapshot_open.html">sqlite3_snapshot_open()</a>,
+ and <a href="c3ref/snapshot_free.html">sqlite3_snapshot_free()</a> interfaces. These are subject to change or removal in
+ a subsequent release.
+<li>Enhance the <a href="lang_datefunc.html#localtime">'utc' modifier</a> in the <a href="lang_datefunc.html">date and time functions</a> so that it is a no-op if
+ the date/time is known to already be in UTC. (This is not a compatibility break since
+ the behavior has long been documented as "undefined" in that case.)
+<li>Added the <a href="json1.html#jgrouparray">json_group_array()</a> and <a href="json1.html#jgroupobject">json_group_object()</a> SQL functions in the
+ <a href="json1.html#jmini">json</a> extension.
+<li>Added the <a href="compile.html#like_doesnt_match_blobs">SQLITE_LIKE_DOESNT_MATCH_BLOBS</a> compile-time option.
+<li>Many small performance optimizations.
+<p><b>Portability enhancements:</b>
+<li>Work around a sign-extension bug in the optimizer of the HP C compiler on HP/UX.
+ <a href="https://www.sqlite.org/src/fdiff?sbs=1&v1=869c95b0fc73026d&v2=232c242a0ccb3d67">(details)</a>
+<p><b>Enhancements to the <a href="cli.html">command-line shell</a>:</b>
+<li>Added the ".changes ON|OFF" and ".vfsinfo" <a href="cli.html#dotcmd">dot-commands</a>.
+<li>Translate between MBCS and UTF8 when
+ running in <a href="https://en.wikipedia.org/wiki/Cmd.exe">cmd.exe</a> on Windows.
+<p><b>Enhancements to makefiles:</b>
+<li>Added the --enable-editline and --enable-static-shell options
+ to the various autoconf-generated configure scripts.
+<li>Omit all use of "awk" in the makefiles, to make building easier for MSVC users.
+<p><b>Important fixes:</b>
+<li>Fix inconsistent integer to floating-point comparison operations that
+ could result in a corrupt index if the index is created on a table
+ column that contains both large integers and floating point values
+ of similar magnitude. Ticket
+ <a href="https://www.sqlite.org/src/tktview?name=38a97a87a6">38a97a87a6</a>.
+<li>Fix an infinite-loop in the query planner that could occur on
+ malformed <a href="lang_with.html">common table expressions</a>.
+<li>Various bug fixes in the <a href="sqldiff.html">sqldiff</a> tool.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-01-06 11:01:07 fd0a50f0797d154fefff724624f00548b5320566"
+<li>SHA1 for sqlite3.c: b92ca988ebb6df02ac0c8f866dbf3256740408ac
+
+
+</ol></p>
+<a name="version_3_9_2"></a>
+<h3>2015-11-02 (3.9.2)</h3><p><ol class='lessindent'>
+<li>Fix the schema parser so that it interprets certain
+ (obscure and ill-formed)
+ CREATE TABLE statements the same as legacy. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/ac661962a2aeab3c331">ac661962a2aeab3c331</a>
+<li>Fix a query planner problem that could result in an incorrect
+ answer due to the use of <a href="optoverview.html#autoindex">automatic indexing</a> in subqueries in
+ the FROM clause of a correlated scalar subqueries. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/8a2adec1">8a2adec1</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328"
+<li>SHA1 for sqlite3.c: 1c4013876f50bbaa3e6f0f98e0147c76287684c1
+
+</ol></p>
+<a name="version_3_9_1"></a>
+<h3>2015-10-16 (3.9.1)</h3><p><ol class='lessindent'>
+<li>Fix <a href="json1.html">the json1 extension</a> so that it does <u>not</u> recognize ASCII form-feed as a
+ whitespace character, in order to comply with RFC-7159. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/57eec374ae1d0a1d">57eec374ae1d0a1d</a>
+<li>Add a few #ifdef and build script changes to address compilation issues that
+ appeared after the 3.9.0 release.
+
+<li>SQLITE_SOURCE_ID: ""2015-10-16 17:31:12 767c1727fec4ce11b83f25b3f1bfcfe68a2c8b02"
+<li>SHA1 for sqlite3.c: 5e6d1873a32d82c2cf8581f143649940cac8ae49
+
+</ol></p>
+<a name="version_3_9_0"></a>
+<h3>2015-10-14 (3.9.0)</h3><p><ol class='lessindent'>
+<p><b>Policy Changes:</b>
+<li>The <a href="versionnumbers.html">version numbering conventions</a> for SQLite are revised to use the
+ emerging standard of <a href="http://semver.org/">semantic versioning</a>.
+<p><b>New Features And Enhancements:</b>
+<li>Added <a href="json1.html">the json1 extension</a> module in the source tree, and in the <a href="amalgamation.html">amalgamation</a>.
+ Enable support using the <a href="compile.html#enable_json1">SQLITE_ENABLE_JSON1</a> compile-time option.
+<li>Added <a href="fts5.html">Full Text Search version 5 (FTS5)</a> to the <a href="amalgamation.html">amalgamation</a>, enabled
+ using <a href="compile.html#enable_fts5">SQLITE_ENABLE_FTS5</a>. FTS5 will be considered "experimental" (subject
+ to incompatible changes) for at least one more release cycle.
+<li>The <a href="lang_createview.html">CREATE VIEW</a> statement now accepts an optional list of
+ column names following the view name.
+<li>Added support for <a href="expridx.html">indexes on expressions</a>.
+<li>Added support for <a href="vtab.html#tabfunc2">table-valued functions</a> in the FROM clause of a
+ <a href="lang_select.html">SELECT</a> statement.
+<li>Added support for <a href="vtab.html#epovtab">eponymous virtual tables</a>.
+<li>A <a href="lang_createview.html">VIEW</a> may now reference undefined tables and functions when
+ initially created. Missing tables and functions are reported when
+ the VIEW is used in a query.
+<li>Added the <a href="c3ref/value_subtype.html">sqlite3_value_subtype()</a> and <a href="c3ref/result_subtype.html">sqlite3_result_subtype()</a>
+ interfaced (used by <a href="json1.html">the json1 extension</a>).
+<li>The query planner is now able to use <a href="partialindex.html">partial indexes</a> that contain
+ AND-connected terms in the WHERE clause.
+<li>The sqlite3_analyzer.exe utility is updated to report the depth of
+ each btree and to show the average fanout for indexes and
+ WITHOUT ROWID tables.
+<li>Enhanced the <a href="dbstat.html">dbstat virtual table</a> so that it can be used as a
+ <a href="vtab.html#tabfunc2">table-valued function</a> where the argument is the schema to be
+ analyzed.
+<p><b>Other changes:</b>
+<li>The <a href="c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> interface, which has been deprecated and
+ undocumented for 8 years, is changed into a no-op.
+<p><b>Important fixes:</b>
+<li>Fixed a critical bug in the
+ <a href="https://www.sqlite.org/see/doc/trunk/www/readme.wiki">SQLite Encryption Extension</a> that
+ could cause the database to become unreadable and unrecoverable if a <a href="lang_vacuum.html">VACUUM</a> command
+ changed the size of the encryption nonce.
+<li>Added a memory barrier in the implementation of
+ <a href="c3ref/initialize.html">sqlite3_initialize()</a> to help ensure that it is thread-safe.
+<li>Fix the <a href="optoverview.html#or_opt">OR optimization</a> so that it always ignores subplans that
+ do not use an index.
+<li>Do not apply the WHERE-clause pushdown optimization on terms that originate
+ in the ON or USING clause of a LEFT JOIN. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c2a19d81652f40568c">c2a19d81652f40568c</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-10-14 12:29:53 a721fc0d89495518fe5612e2e3bbc60befd2e90d"
+<li>SHA1 for sqlite3.c: c03e47e152ddb9c342b84ffb39448bf4a2bd4288
+
+</ol></p>
+<a name="version_3_8_11_1"></a>
+<h3>2015-07-29 (3.8.11.1)</h3><p><ol class='lessindent'>
+<li>Restore an undocumented side-effect of <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a>: force
+ the database schema to be parsed if the database has not been previously accessed.
+<li>Fix a long-standing problem in <a href="c3ref/changes.html">sqlite3_changes()</a> for <a href="withoutrowid.html">WITHOUT ROWID</a>
+ tables that was reported a few hours after the 3.8.11 release.
+<li>SQLITE_SOURCE_ID: "2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f"
+<li>SHA1 for sqlite3.c: 3be71d99121fe5b17f057011025bcf84e7cc6c84
+
+</ol></p>
+<a name="version_3_8_11"></a>
+<h3>2015-07-27 (3.8.11)</h3><p><ol class='lessindent'>
+<li>Added the experimental <a href="rbu.html">RBU</a> extension. Note that this extension is experimental
+ and subject to change in incompatible ways.
+<li>Added the experimental <a href="fts5.html">FTS5</a> extension. Note that this extension is experimental
+ and subject to change in incompatible ways.
+<li>Added the <a href="c3ref/value_dup.html">sqlite3_value_dup()</a> and <a href="c3ref/value_dup.html">sqlite3_value_free()</a> interfaces.
+<li>Enhance the <a href="spellfix1.html">spellfix1</a> extension to support <a href="lang_conflict.html">ON CONFLICT</a> clauses.
+<li>The <a href="lang_expr.html#isisnot">IS operator</a> is now able to drive indexes.
+<li>Enhance the query planner to permit <a href="optoverview.html#autoindex">automatic indexing</a> on FROM-clause
+ subqueries that are implemented by co-routine.
+<li>Disallow the use of "rowid" in <a href="lang_with.html">common table expressions</a>.
+<li>Added the <a href="pragma.html#pragma_cell_size_check">PRAGMA cell_size_check</a> command for better and earlier
+ detection of database file corruption.
+<li>Added the <a href="fts3.html#matchinfo-b">matchinfo 'b' flag</a> to the <a href="fts3.html#matchinfo">matchinfo()</a> function in <a href="fts3.html">FTS3</a>.
+<li>Improved fuzz-testing of database files, with fixes for problems found.
+<li>Add the fuzzcheck test program and automatically run this program
+ using both SQL and database test cases on "make test".
+<li>Added the <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_VFS1</a> static mutex and use it in the
+ Windows <a href="vfs.html">VFS</a>.
+<li>The <a href="c3ref/profile.html">sqlite3_profile()</a> callback is invoked (by <a href="c3ref/reset.html">sqlite3_reset()</a> or
+ <a href="c3ref/finalize.html">sqlite3_finalize()</a>) for statements that did not run to completion.
+<li>Enhance the page cache so that it can preallocate a block of memory to
+ use for the initial set page cache lines. Set the default preallocation
+ to 100 pages. Yields about a 5% performance increase on common workloads.
+<li>Miscellaneous micro-optimizations result in 22.3% more work for the same
+ number of CPU cycles relative to the previous release.
+ SQLite now runs twice as fast as <a href="#version_3_8_0">version 3.8.0</a> and three times as
+ fast as <a href="#version_3_3_9">version 3.3.9</a>.
+ (Measured using
+ <a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
+ <a href="http://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
+ Ubuntu 14.04 x64 with gcc 4.8.2 and -Os. Your performance may vary.)
+<li>Added the <a href="c3ref/result_blob.html">sqlite3_result_zeroblob64()</a> and <a href="c3ref/bind_blob.html">sqlite3_bind_zeroblob64()</a>
+ interfaces.
+<p><b>Important bug fixes:</b>
+<li>Fix <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> so that columns of type TEXT never end up
+ holding an INT value. Ticket
+ <a href="https://www.sqlite.org/src/info/f2ad7de056ab1dc9200">f2ad7de056ab1dc9200</a>
+<li>Fix <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> so that it does not leave NULL entries in the
+ <a href="schematab.html">sqlite_master table</a> if the SELECT statement on the right-hand side
+ aborts with an error. Ticket
+ <a href="https://www.sqlite.org/src/info/873cae2b6e25b">873cae2b6e25b</a>
+<li>Fix the <a href="optoverview.html#skipscan">skip-scan optimization</a> so that it works correctly when
+ the <a href="optoverview.html#or_opt">OR optimization</a> is used on <a href="withoutrowid.html">WITHOUT ROWID</a> tables. Ticket
+ <a href="https://www.sqlite.org/src/info/8fd39115d8f46">8fd39115d8f46</a>
+<li>Fix the <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> interfaces
+ so that they actually do provide a 64-bit answer.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2015-07-27 13:49:41 b8e92227a469de677a66da62e4361f099c0b79d0"
+<li>SHA1 for sqlite3.c: 719f6891abcd9c459b5460b191d731cd12a3643e
+
+</ol></p>
+<a name="version_3_8_10_2"></a>
+<h3>2015-05-20 (3.8.10.2)</h3><p><ol class='lessindent'>
+<li>Fix an index corruption issue introduced by <a href="#version_3_8_7">version 3.8.7</a>. An index
+ with a TEXT key can be corrupted by an <a href="lang_insert.html">INSERT</a> into the corresponding
+ table if the table has two nested triggers that convert the key value to INTEGER
+ and back to TEXT again.
+ Ticket <a href="https://www.sqlite.org/src/info/34cd55d68e0e6e7c9a0711aab81a2ee3c354b4c0">34cd55d68e0</a>
+
+<li>SQLITE_SOURCE_ID: "2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4"
+<li>SHA1 for sqlite3.c: 638abb77965332c956dbbd2c8e4248e84da4eb63
+
+</ol></p>
+<a name="version_3_8_10_1"></a>
+<h3>2015-05-09 (3.8.10.1)</h3><p><ol class='lessindent'>
+<li>Make <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> responsive to the <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a>
+ compile-time option.
+<li>Fix a harmless warning in the <a href="cli.html">command-line shell</a> on some versions of MSVC.
+<li>Fix minor issues with the <a href="dbstat.html">dbstat virtual table</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-05-09 12:14:55 05b4b1f2a937c06c90db70c09890038f6c98ec40"
+<li>SHA1 for sqlite3.c: 85e4e1c08c7df28ef61bb9759a0d466e0eefbaa2
+
+</ol></p>
+<a name="version_3_8_10"></a>
+<h3>2015-05-07 (3.8.10)</h3><p><ol class='lessindent'>
+<li>Added the <a href="sqldiff.html">sqldiff.exe</a> utility program for computing the differences between two
+ SQLite database files.
+<li>Added the <a href="fts3.html#matchinfo-y">matchinfo y flag</a> to the
+ <a href="fts3.html#matchinfo">matchinfo()</a> function of <a href="fts3.html">FTS3</a>.
+<li>Performance improvements for <a href="lang_select.html#orderby">ORDER BY</a>, <a href="lang_vacuum.html">VACUUM</a>, <a href="lang_createindex.html">CREATE INDEX</a>,
+ <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a>.
+<li>Fix many obscure problems discovered while <a href="testing.html#fuzztesting">SQL fuzzing</a>.
+<li>Identify all methods for important objects in the interface documentation.
+ (<a href="c3ref/context.html">example</a>)
+<li>Made the <a href="testing.html#aflfuzz">American Fuzzy Lop fuzzer</a>
+ a standard part of SQLite's <a href="testing.html">testing strategy</a>.
+<li>Add the ".binary" and ".limits" commands to the <a href="cli.html">command-line shell</a>.
+<li>Make the <a href="dbstat.html">dbstat virtual table</a> part of standard builds when
+ compiled with the <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> option.
+
+<li>SQLITE_SOURCE_ID: "2015-05-07 11:53:08 cf975957b9ae671f34bb65f049acf351e650d437"
+<li>SHA1 for sqlite3.c: 0b34f0de356a3f21b9dfc761f3b7821b6353c570
+
+</ol></p>
+<a name="version_3_8_9"></a>
+<h3>2015-04-08 (3.8.9)</h3><p><ol class='lessindent'>
+<li>Add VxWorks-7 as an officially supported and tested platform.
+<li>Added the <a href="c3ref/status.html">sqlite3_status64()</a> interface.
+<li>Fix memory size tracking so that it works even if SQLite uses more
+ than 2GiB of memory.
+<li>Added the <a href="pragma.html#pragma_index_xinfo">PRAGMA index_xinfo</a> command.
+<li>Fix a potential 32-bit integer overflow problem in the
+ <a href="c3ref/blob_read.html">sqlite3_blob_read()</a> and <a href="c3ref/blob_write.html">sqlite3_blob_write()</a> interfaces.
+<li>Ensure that prepared statements automatically reset on extended
+ error codes of SQLITE_BUSY and SQLITE_LOCKED even when compiled
+ using <a href="compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a>.
+<li>Correct miscounts in the sqlite3_analyzer.exe utility related
+ to WITHOUT ROWID tables.
+<li>Added the ".dbinfo" command to the <a href="cli.html">command-line shell</a>.
+<li>Improve the performance of fts3/4 queries that use the OR operator
+ and at least one auxiliary fts function.
+<li>Fix a bug in the fts3 snippet() function causing it to omit
+ leading separator characters from snippets that begin with the
+ first token in a column.
+<li>SQLITE_SOURCE_ID: "2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09"
+<li>SHA1 for sqlite3.c: 49f1c3ae347e1327b5aaa6c7f76126bdf09c6f42
+
+</ol></p>
+<a name="version_3_8_8_3"></a>
+<h3>2015-02-25 (3.8.8.3)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket
+ <a href="https://www.sqlite.org/src/info/2326c258d02ead33">2326c258d02ead33</a>) that can lead
+ to incorrect results if the qualifying constraint of a <a href="partialindex.html">partial index</a> appears in the
+ ON clause of a LEFT JOIN.
+<li>Added the ability to link against the
+ "<a href="https://github.com/antirez/linenoise">linenoise</a>"
+ command-line editing library in unix builds of the <a href="cli.html">command-line shell</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-02-25 13:29:11 9d6c1880fb75660bbabd693175579529785f8a6b"
+<li>SHA1 for sqlite3.c: 74ee38c8c6fd175ec85a47276dfcefe8a262827a
+
+</ol></p>
+<a name="version_3_8_8_2"></a>
+<h3>2015-01-30 (3.8.8.2)</h3><p><ol class='lessindent'>
+<li>Enhance <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2(TRUNCATE)</a> interface so that it truncates the
+ WAL file even if there is no checkpoint work to be done.
+
+<li>SQLITE_SOURCE_ID: "2015-01-30 14:30:45 7757fc721220e136620a89c9d28247f28bbbc098"
+<li>SHA1 for sqlite3.c: 85ce79948116aa9a087ec345c9d2ce2c1d3cd8af
+
+
+</ol></p>
+<a name="version_3_8_8_1"></a>
+<h3>2015-01-20 (3.8.8.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the sorting logic, present since version 3.8.4, that can cause
+ output to appear in the wrong order on queries that contains an ORDER BY clause,
+ a LIMIT clause, and that have approximately 60 or more columns in the result set.
+ Ticket <a href="https://www.sqlite.org/src/tktview?name=f97c4637102a3ae72b79">f97c4637102a3ae72b79</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
+<li>SHA1 for sqlite3.c: 33987fb50dcc09f1429a653d6b47672f5a96f19e
+
+</ol></p>
+<a name="version_3_8_8"></a>
+<h3>2015-01-16 (3.8.8)</h3><p><ol class='lessindent'>
+<p><b>New Features:</b>
+<li>Added the <a href="pragma.html#pragma_data_version">PRAGMA data_version</a> command that can be used to determine if
+ a database file has been modified by another process.
+<li>Added the <a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> option to the
+ <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface, with corresponding enhancements
+ to <a href="pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a>.
+<li>Added the <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface, available only when
+ compiled with <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
+<li>The <a href="c3ref/table_column_metadata.html">sqlite3_table_column_metadata()</a> is enhanced to work correctly on
+ <a href="withoutrowid.html">WITHOUT ROWID</a> tables and to check for the existence of a
+ a table if the column name parameter is NULL. The interface is now
+ also included in the build by default, without requiring
+ the <a href="compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> compile-time option.
+<li>Added the <a href="compile.html#enable_api_armor">SQLITE_ENABLE_API_ARMOR</a> compile-time option.
+<li>Added the <a href="compile.html#reverse_unordered_selects">SQLITE_REVERSE_UNORDERED_SELECTS</a> compile-time option.
+<li>Added the <a href="compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> compile-time option and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a>
+ start-time option.
+<li>Added the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> option to <a href="c3ref/config.html">sqlite3_config()</a>
+ which makes it easier for applications to determine the appropriate
+ amount of memory for use with <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
+<li>The number of rows in a <a href="lang_select.html#values">VALUES clause</a> is no longer limited by
+ <a href="c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a>.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/f971962e92ebb8b0">eval.c</a>
+ <a href="loadext.html">loadable extension</a> that implements an eval() SQL function that will recursively
+ evaluate SQL.
+<p><b>Performance Enhancements:</b>
+<li>Reduce the number of memcpy() operations involved in balancing a b-tree,
+ for 3.2% overall performance boost.
+<li>Improvements to cost estimates for the <a href="optoverview.html#skipscan">skip-scan optimization</a>.
+<li>The <a href="optoverview.html#autoindex">automatic indexing</a> optimization is now capable of generating
+ a <a href="partialindex.html">partial index</a> if that is appropriate.
+<p><b>Bug fixes:</b>
+<li>Ensure durability following a power loss with
+ "PRAGMA journal_mode=TRUNCATE" by calling fsync() right after truncating
+ the journal file.
+<li>The query planner now recognizes that any column in the right-hand
+ table of a LEFT JOIN can be NULL, even if that column has a NOT NULL
+ constraint. Avoid trying to optimize out NULL tests in those cases.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
+<li>Make sure ORDER BY puts rows in ascending order even if the DISTINCT
+ operator is implemented using a descending index. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c5ea805691bfc4204b1cb9e">c5ea805691bfc4204b1cb9e</a>.
+<li>Fix data races that might occur under stress when running with many threads
+ in <a href="sharedcache.html">shared cache mode</a> where some of the threads are opening and
+ closing connections.
+<li>Fix obscure crash bugs found by
+ <a href="http://lcamtuf.coredump.cx/afl/">american fuzzy lop</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/a59ae93ee990a55">a59ae93ee990a55</a>.
+<li>Work around a GCC optimizer bug (for gcc 4.2.1 on MacOS 10.7) that caused the
+ <a href="rtree.html">R-Tree extension</a> to compute incorrect results when compiled with -O3.
+<p><b>Other changes:</b>
+<li>Disable the use of the strchrnul() C-library routine unless it is
+ specifically enabled using the -DHAVE_STRCHRNULL compile-time option.
+<li>Improvements to the effectiveness and accuracy of the
+ <a href="lang_corefunc.html#likelihood">likelihood()</a>, <a href="lang_corefunc.html#likely">likely()</a>, and <a href="lang_corefunc.html#unlikely">unlikely()</a> SQL hint functions.
+
+<li>SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
+<li>SHA1 for sqlite3.c: 91aea4cc722371d58aae3d22e94d2a4165276905
+
+</ol></p>
+<a name="version_3_8_7_4"></a>
+<h3>2014-12-09 (3.8.7.4)</h3><p><ol class='lessindent'>
+<li>Bug fix: Add in a mutex that was omitted from the previous release.
+<li>SQLITE_SOURCE_ID: "2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e"
+<li>SHA1 for sqlite3.c: 0a56693a3c24aa3217098afab1b6fecccdedfd23
+
+</ol></p>
+<a name="version_3_8_7_3"></a>
+<h3>2014-12-05 (3.8.7.3)</h3><p><ol class='lessindent'>
+<li>Bug fix: Ensure the cached KeyInfo objects (an internal abstraction not visible to the
+ application) do not go stale when operating in <a href="sharedcache.html">shared cache mode</a> and frequently closing
+ and reopening some database connections while leaving other database connections on the
+ same shared cache open continuously. Ticket
+ <a href="https://www.sqlite.org/src/info/e4a18565a36884b00edf">e4a18565a36884b00edf</a>.
+<li>Bug fix: Recognize that any column in the right-hand table of a LEFT JOIN can be
+ NULL even if the column has a NOT NULL constraint. Do not apply optimizations that
+ assume the column is never NULL. Ticket
+ <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
+
+<li>SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
+<li>SHA1 for sqlite3.c: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
+
+</ol></p>
+<a name="version_3_8_7_2"></a>
+<h3>2014-11-18 (3.8.7.2)</h3><p><ol class='lessindent'>
+<li>Enhance the <a href="lang_transaction.html">ROLLBACK</a> command so that pending queries are allowed to continue as long
+ as the schema is unchanged. Formerly, a ROLLBACK would cause all pending queries to
+ fail with an <a href="rescode.html#abort">SQLITE_ABORT</a> or <a href="rescode.html#abort_rollback">SQLITE_ABORT_ROLLBACK</a> error. That error is still returned
+ if the ROLLBACK modifies the schema.
+<li>Bug fix: Make sure that NULL results from OP_Column are fully and completely NULL and
+ do not have the MEM_Ephem bit set.
+ Ticket <a href="http://www.sqlite.org/src/info/094d39a4c95ee4">094d39a4c95ee4</a>.
+<li>Bug fix: The %c format in sqlite3_mprintf() is able to handle precisions greater than 70.
+<li>Bug fix: Do not automatically remove the DISTINCT keyword from a SELECT that forms
+ the right-hand side of an IN operator since it is necessary if the SELECT also
+ contains a LIMIT.
+ Ticket <a href="http://www.sqlite.org/src/info/db87229497">db87229497</a>.
+
+<li>SQLITE_SOURCE_ID: "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
+<li>SHA1 for sqlite3.c: b2a68d5783f48dba6a8cb50d8bf69b238c5ec53a
+
+</ol></p>
+<a name="version_3_8_7_1"></a>
+<h3>2014-10-29 (3.8.7.1)</h3><p><ol class='lessindent'>
+<li>In <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=TRUNCATE</a> mode, call fsync() immediately after truncating
+ the journal file to ensure that the transaction is durable across a power loss.
+<li>Fix an assertion fault that can occur when updating the NULL value of a field
+ at the end of a table that was added using <a href="lang_altertable.html">ALTER TABLE ADD COLUMN</a>.
+<li>Do not attempt to use the strchrnul() function from the standard C library unless
+ the HAVE_STRCHRNULL compile-time option is set.
+<li>Fix a couple of problems associated with running an UPDATE or DELETE on a
+ <a href="lang_createview.html">VIEW</a> with a <a href="lang_createtable.html#rowid">rowid</a> in the WHERE clause.
+
+<li>SQLITE_SOURCE_ID: "2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221"
+<li>SHA1 for sqlite3.c: 2d25bd1a73dc40f538f3a81c28e6efa5999bdf0c
+
+</ol></p>
+<a name="version_3_8_7"></a>
+<h3>2014-10-17 (3.8.7)</h3><p><ol class='lessindent'>
+<p><b>Performance Enhancements:</b>
+<li>Many micro-optimizations result in 20.3% more work for the same number
+ of CPU cycles relative to the previous release.
+ The cumulative performance increase since <a href="#version_3_8_0">version 3.8.0</a> is 61%.
+ (Measured using
+ <a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
+ <a href="http://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
+ Ubuntu 13.10 x64 with gcc 4.8.1 and -Os. Your performance may vary.)
+<li>The sorter can use auxiliary helper threads to increase real-time response.
+ This feature is off by default and may be
+ enabled using the <a href="pragma.html#pragma_threads">PRAGMA threads</a> command or the <a href="compile.html#default_worker_threads">SQLITE_DEFAULT_WORKER_THREADS</a>
+ compile-time option.
+<li>Enhance the <a href="optoverview.html#skipscan">skip-scan</a> optimization so that it is able to skip index terms that
+ occur in the middle of the index, not just as the left-hand side of the index.
+<li>Improved optimization of <a href="lang_expr.html#castexpr">CAST</a> operators.
+<li>Various improvements in how the query planner uses <a href="fileformat2.html#stat4tab">sqlite_stat4</a>
+ information to estimate plan costs.
+<p><b>New Features:</b>
+<li>Added new interfaces with 64-bit length parameters:
+ <a href="c3ref/free.html">sqlite3_malloc64()</a>,
+ <a href="c3ref/free.html">sqlite3_realloc64()</a>,
+ <a href="c3ref/bind_blob.html">sqlite3_bind_blob64()</a>,
+ <a href="c3ref/result_blob.html">sqlite3_result_blob64()</a>,
+ <a href="c3ref/bind_blob.html">sqlite3_bind_text64()</a>, and
+ <a href="c3ref/result_blob.html">sqlite3_result_text64()</a>.
+<li>Added the new interface <a href="c3ref/free.html">sqlite3_msize()</a> that returns the size of a memory allocation
+ obtained from <a href="c3ref/free.html">sqlite3_malloc64()</a> and its variants.
+<li>Added the <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a> option to <a href="c3ref/limit.html">sqlite3_limit()</a> and
+ <a href="pragma.html#pragma_threads">PRAGMA threads</a> command for configuring the number of available worker threads.
+<li>The <a href="spellfix1.html">spellfix1</a> extension allows the application to optionally specify the rowid for
+ each INSERT.
+<li>Added the <a href="http://www.sqlite.org/src/doc/trunk/ext/userauth/user-auth.txt">User Authentication</a>
+ extension.
+<p><b>Bug Fixes:</b>
+<li>Fix a bug in the <a href="partialindex.html">partial index</a> implementation that might result in an incorrect
+ answer if a partial index is used in a subquery or in a <a href="lang_createview.html">view</a>.
+ Ticket <a href="http://www.sqlite.org/src/info/98d973b8f5">98d973b8f5</a>.
+<li>Fix a query planner bug that might cause a table to be scanned in the wrong direction
+ (thus reversing the order of output) when a DESC index is used to implement the ORDER BY
+ clause on a query that has an identical GROUP BY clause.
+ Ticket <a href="http://www.sqlite.org/src/info/ba7cbfaedc7e6">ba7cbfaedc7e6</a>.
+<li>Fix a bug in <a href="c3ref/profile.html">sqlite3_trace()</a> that was causing it to sometimes fail to print
+ an SQL statement if that statement needed to be re-prepared.
+ Ticket <a href="http://www.sqlite.org/src/info/11d5aa455e0d98f3c1e6a08">11d5aa455e0d98f3c1e6a08</a>
+<li>Fix a faulty assert() statement.
+ Ticket <a href="http://www.sqlite.org/src/info/369d57fb8e5ccdff06f1">369d57fb8e5ccdff06f1</a>
+<p><b>Test, Debug, and Analysis Changes:</b>
+<li>Show ASCII-art abstract syntax tree diagrams using the ".selecttrace"
+ and ".wheretrace" commands in the
+ <a href="cli.html">command-line shell</a> when compiled with <a href="compile.html#debug">SQLITE_DEBUG</a>, SQLITE_ENABLE_SELECTTRACE,
+ and SQLITE_ENABLE_WHERETRACE. Also provide the sqlite3TreeViewExpr() and
+ sqlite3TreeViewSelect() entry points that can be invoked from with the
+ debugger to show the parse tree when stopped at a breakpoint.
+<li>Drop support for SQLITE_ENABLE_TREE_EXPLAIN. The SELECTTRACE mechanism provides
+ more useful diagnostics information.
+<li>New options to the <a href="cli.html">command-line shell</a> for configuring auxiliary
+ memory usage: --pagecache, --lookaside, and --scratch.
+<li>SQLITE_SOURCE_ID: "2014-10-17 11:24:17 e4ab094f8afce0817f4074e823fabe59fc29ebb4"
+<li>SHA1 for sqlite3.c: 56dcf5e931a9e1fa12fc2d600cd91d3bf9b639cd
+
+
+</ol></p>
+<a name="version_3_8_6"></a>
+<h3>2014-08-15 (3.8.6)</h3><p><ol class='lessindent'>
+<li>Added support for <a href="lang_expr.html#hexint">hexadecimal integer literals</a> in the SQL parser.
+ (Ex: 0x123abc)
+<li>Enhanced the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to detect <a href="lang_createtable.html#uniqueconst">UNIQUE</a> and
+ <a href="lang_createtable.html#notnullconst">NOT NULL</a> constraint violations.
+<li>Increase the maximum value of <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> from 62 to 125.
+<li>Increase the timeout in <a href="wal.html">WAL mode</a> before issuing an <a href="rescode.html#protocol">SQLITE_PROTOCOL</a>
+ error from 1 second to 10 seconds.
+<li>Added the <a href="lang_corefunc.html#likely">likely(X)</a> SQL function.
+<li>The <a href="fts3.html#unicode61">unicode61</a> tokenizer is now included in <a href="fts3.html#fts4">FTS4</a> by default.
+<li>Trigger automatic reprepares on all prepared statements when <a href="lang_analyze.html">ANALYZE</a> is
+ run.
+<li>Added a new
+ <a href="loadext.html">loadable extension</a> source code file to the source tree:
+ <a href="http://www.sqlite.org/src/finfo?name=ext/misc/fileio.c">fileio.c</a>
+<li>Add extension functions <a href="cli.html#fileio">readfile(X) and writefile(X,Y)</a>
+ (using code copy/pasted from fileio.c in the previous bullet) to the
+ <a href="cli.html">command-line shell</a>.
+<li>Added the <a href="cli.html#fullschema">.fullschema</a> dot-command to the <a href="cli.html">command-line shell</a>.
+<p><b>Performance Enhancements:</b>
+<li>Deactivate the <a href="lang_select.html#distinct">DISTINCT</a> keyword on subqueries on the
+ right-hand side of the <a href="lang_expr.html#in_op">IN operator</a>.
+<li>Add the capability of evaluating an <a href="lang_expr.html#in_op">IN operator</a> as a sequence
+ of comparisons as an alternative to using a table lookup. Use the sequence
+ of comparisons implementation in circumstances where it is likely to be
+ faster, such as when the right-hand side of the IN operator
+ is small and/or changes frequently.
+<li>The query planner now uses <a href="fileformat2.html#stat4tab">sqlite_stat4</a> information (created by <a href="lang_analyze.html">ANALYZE</a>)
+ to help determine if the <a href="optoverview.html#skipscan">skip-scan optimization</a> is appropriate.
+<li>Ensure that the query planner never tries to use a self-made transient
+ index in place of a schema-defined index.
+<li>Other minor tweaks to improve the quality of <a href="opcode.html">VDBE</a> code.
+<p><b>Bug Fixes:</b>
+<li>Fix a bug in <a href="lang_createindex.html">CREATE UNIQUE INDEX</a>, introduced when <a href="withoutrowid.html">WITHOUT ROWID</a>
+ support added in version 3.8.2, that allows a non-unique NOT NULL column to be
+ given a UNIQUE index.
+ Ticket <a href="http://www.sqlite.org/src/info/9a6daf340df99ba93c">9a6daf340df99ba93c</a>
+<li>Fix a bug in <a href="rtree.html">R-Tree extension</a>, introduced in the previous release,
+ that can cause an
+ incorrect results for queries that use the rowid of the R-Tree on the
+ left-hand side of an <a href="lang_expr.html#in_op">IN operator</a>.
+ Ticket <a href="http://www.sqlite.org/src/info/d2889096e7bdeac6">d2889096e7bdeac6</a>.
+<li>Fix the <a href="c3ref/stmt_busy.html">sqlite3_stmt_busy()</a> interface so that it gives the correct answer
+ for <a href="lang_transaction.html">ROLLBACK</a> statements that have been stepped but never reset.
+<li>Fix a bug in that would cause a null pointer to be dereferenced
+ if a column with a DEFAULT that is an aggregate function tried to usee its
+ DEFAULT.
+ Ticket <a href="http://www.sqlite.org/src/info/3a88d85f36704eebe1">3a88d85f36704eebe1</a>
+<li>CSV output from the <a href="cli.html">command-line shell</a> now always uses CRNL for the
+ row separator and avoids inserting CR in front of NLs contained in
+ data.
+<li>Fix a <a href="datatype3.html#affinity">column affinity</a> problem with the <a href="lang_expr.html#in_op">IN operator</a>.
+ Ticket <a href="http://www.sqlite.org/src/info/9a8b09f8e6">9a8b09f8e6</a>.
+<li>Fix the <a href="lang_analyze.html">ANALYZE</a> command so that it adds correct samples for
+ <a href="withoutrowid.html">WITHOUT ROWID</a> tables in the <a href="fileformat2.html#stat4tab">sqlite_stat4</a> table.
+ Ticket <a href="http://www.sqlite.org/src/info/b2fa5424e6fcb15">b2fa5424e6fcb15</a>.
+
+<li>SQLITE_SOURCE_ID: "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
+<li>SHA1 for sqlite3.c: 72c64f05cd9babb9c0f9b3c82536d83be7804b1c
+
+</ol></p>
+<a name="version_3_8_5"></a>
+<h3>2014-06-04 (3.8.5)</h3><p><ol class='lessindent'>
+<li>Added support for <a href="queryplanner.html#partialsort">partial sorting by index</a>.
+<li>Enhance the query planner so that it always prefers an index that uses a superset of
+ WHERE clause terms relative to some other index.
+<li>Improvements to the <a href="fts3.html#*fts4automergecmd">automerge command</a> of <a href="fts3.html#fts4">FTS4</a> to better control the index size
+ for a full-text index that is subject to a large number of updates.
+<li>Added the <a href="rtree.html#xquery">sqlite3_rtree_query_callback()</a> interface to <a href="rtree.html">R-Tree extension</a>
+<li>Added new <a href="uri.html#coreqp">URI query parameters</a> "nolock" and "immutable".
+<li>Use less memory by not remembering CHECK constraints on read-only
+ database connections.
+<li>Enable the <a href="queryplanner.html#or_in_where">OR optimization</a> for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+<li>Render expressions of the form "x IN (?)" (with a single value in
+ the list on the right-hand side of the IN operator) as if they where "x==?",
+ Similarly optimize "x NOT IN (?)"
+<li>Add the ".system" and ".once" commands to the <a href="cli.html">command-line shell</a>.
+<li>Added the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_IMMUTABLE</a> bit to the set of bits that can be returned by
+ the xDeviceCharacteristics method of a <a href="vfs.html">VFS</a>.
+<li>Added the <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_BYTEORDER</a> test control.
+<p><b>Bug Fixes:</b>
+<li>OFFSET clause ignored on queries without a FROM clause.
+ Ticket <a href="http://www.sqlite.org/src/info/07d6a0453d">07d6a0453d</a>
+<li>Assertion fault on queries involving expressions of the form
+ "x IN (?)". Ticket <a href="http://www.sqlite.org/src/info/e39d032577">e39d032577</a>.
+<li>Incorrect column datatype reported.
+ Ticket <a href="http://www.sqlite.org/src/info/a8a0d2996a">a8a0d2996a</a>
+<li>Duplicate row returned on a query against a table with more than
+ 16 indices, each on a separate column, and all used via OR-connected constraints.
+ Ticket <a href="http://www.sqlite.org/src/info/10fb063b11">10fb063b11</a>
+<li>Partial index causes assertion fault on UPDATE OR REPLACE.
+ Ticket <a href="http://www.sqlite.org/src/info/2ea3e9fe63">2ea3e9fe63</a>
+<li>Crash when calling undocumented SQL function sqlite_rename_parent()
+ with NULL parameters.
+ Ticket <a href="http://www.sqlite.org/src/info/264b970c4379fd">264b970c43</a>
+<li>ORDER BY ignored if the query has an identical GROUP BY.
+ Ticket <a href="http://www.sqlite.org/src/info/b75a9ca6b0499">b75a9ca6b0</a>
+<li>The group_concat(x,'') SQL function returns NULL instead of an empty string
+ when all inputs are empty strings.
+ Ticket <a href="http://www.sqlite.org/src/info/55746f9e65f85">55746f9e65</a>
+<li>Fix a bug in the VDBE code generator that caused crashes when
+ doing an INSERT INTO ... SELECT statement where the number of columns
+ being inserted is larger than the number of columns in the destination
+ table.
+ Ticket <a href="http://www.sqlite.org/src/info/e9654505cfda9">e9654505cfd</a>
+<li>Fix a problem in CSV import in the <a href="cli.html">command-line shell</a>
+ where if the leftmost field of the first row
+ in the CSV file was both zero bytes in size and unquoted no data would
+ be imported.
+<li>Fix a problem in FTS4 where the left-most column that contained
+ the <a href="fts3.html#fts4notindexed">notindexed column</a> name as a prefix
+ was not indexed rather than the column whose name matched exactly.
+<li>Fix the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface so that it returns true if
+ the database is read-only due to the file format write version number
+ being too large.
+
+<li>SQLITE_SOURCE_ID: "2014-06-04 14:06:34 b1ed4f2a34ba66c29b130f8d13e9092758019212"
+<li>SHA1 for sqlite3.c: 7bc194957238c61b1a47f301270286be5bc5208c
+
+</ol></p>
+<a name="version_3_8_4_3"></a>
+<h3>2014-04-03 (3.8.4.3)</h3><p><ol class='lessindent'>
+<li>Add a
+ <a href="http://www.sqlite.org/src/fdiff?sbs=1&v1=7d539cedb1c&v2=ebad891b7494d&smhdr">one-character fix</a>
+ for a problem that might cause incorrect query results on a query that mixes
+ DISTINCT, GROUP BY in a subquery, and ORDER BY.
+ <a href="http://www.sqlite.org/src/info/98825a79ce1456863">Ticket 98825a79ce14</a>.
+<li>SQLITE_SOURCE_ID: "2014-04-03 16:53:12 a611fa96c4a848614efe899130359c9f6fb889c3"
+<li>SHA1 for sqlite3.c: 310a1faeb9332a3cd8d1f53b4a2e055abf537bdc
+
+</ol></p>
+<a name="version_3_8_4_2"></a>
+<h3>2014-03-26 (3.8.4.2)</h3><p><ol class='lessindent'>
+<li>Fix a potential buffer overread that could result when trying to search a
+ corrupt database file.
+<li>SQLITE_SOURCE_ID: "2014-03-26 18:51:19 02ea166372bdb2ef9d8dfbb05e78a97609673a8e"
+<li>SHA1 for sqlite3.c: 4685ca86c2ea0649ed9f59a500013e90b3fe6d03
+
+</ol></p>
+<a name="version_3_8_4_1"></a>
+<h3>2014-03-11 (3.8.4.1)</h3><p><ol class='lessindent'>
+<li>Work around a C-preprocessor macro conflict that breaks the build for some
+ configurations with Microsoft Visual Studio.
+<li>When computing the cost of the <a href="optoverview.html#skipscan">skip-scan optimization</a>, take into account the
+ fact that multiple seeks are required.
+<li>SQLITE_SOURCE_ID: "2014-03-11 15:27:36 018d317b1257ce68a92908b05c9c7cf1494050d0"
+<li>SHA1 for sqlite3.c: d5cd1535053a50aa8633725e3595740b33709ac5
+
+</ol></p>
+<a name="version_3_8_4"></a>
+<h3>2014-03-10 (3.8.4)</h3><p><ol class='lessindent'>
+<li>Code optimization and refactoring for improved performance.
+<li>Add the ".clone" and ".save" commands to the command-line shell.
+<li>Update the banner on the command-line shell to alert novice users when they
+ are using an ephemeral in-memory database.
+<li>Fix editline support in the command-line shell.
+<li>Add support for coverage testing of VDBE programs using the
+ <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_VDBE_COVERAGE</a> verb of <a href="c3ref/test_control.html">sqlite3_test_control()</a>.
+<li>Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
+<li>Change the datatype of SrcList.nSrc from type u8 to type int to work around
+ an issue in the C compiler on AIX.
+<li>Get extension loading working on Cygwin.
+<li>Bug fix: Fix the <a href="lang_corefunc.html#char">char()</a> SQL function so that it returns an empty string
+ rather than an "out of memory" error when called with zero arguments.
+<li>Bug fix: DISTINCT now recognizes that a <a href="lang_corefunc.html#zeroblob">zeroblob</a> and a blob of all
+ 0x00 bytes are the same thing.
+ <a href="http://www.sqlite.org/src/info/fccbde530a">Ticket &#91;fccbde530a&#93;</a>
+<li>Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
+ term in the WHERE clause and also contain an OR term in the WHERE clause and
+ are compiled with <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>.
+ <a href="http://www.sqlite.org/src/info/4c86b126f2">Ticket &#91;4c86b126f2&#93;</a>
+<li>Bug fix: Make sure "rowid" columns are correctly resolved in joins between
+ normal tables and WITHOUT ROWID tables.
+ <a href="http://www.sqlite.org/src/info/c34d0557f7">Ticket &#91;c34d0557f7&#93;</a>
+<li>Bug fix: Make sure the same temporary registers are not used in concurrent
+ co-routines used to implement compound SELECT statements containing ORDER
+ BY clauses, as such use can lead to incorrect answers.
+ <a href="http://www.sqlite.org/src/info/8c63ff0eca">Ticket &#91;8c63ff0eca&#93;</a>
+<li>Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
+ <a href="http://www.sqlite.org/src/info/65bdeb9739">Ticket &#91;65bdeb9739&#93;</a>
+<li>Bug fix: Repair a name-resolution error that can occur in sub-select statements
+ contained within a TRIGGER.
+ <a href="http://www.sqlite.org/src/info/4ef7e3cfca">Ticket &#91;4ef7e3cfca&#93;</a>
+<li>Bug fix: Fix column default values expressions of the form
+ "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
+ the column to a floating point value approximately equal to
+ +9223372036854775808.0.
+<li>SQLITE_SOURCE_ID: "2014-03-10 12:20:37 530a1ee7dc2435f80960ce4710a3c2d2bfaaccc5"
+<li>SHA1 for sqlite3.c: b0c22e5f15f5ba2afd017ecd990ea507918afe1c
+
+</ol></p>
+<a name="version_3_8_3_1"></a>
+<h3>2014-02-11 (3.8.3.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket <a href="http://www.sqlite.org/src/info/4c86b126f2">4c86b126f2</a>)
+ that causes rows to go missing on some queries with OR clauses and
+ IS NOT NULL operators in the WHERE clause, when the <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a>
+ or <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time options are used.
+<li>Fix a harmless compiler warning that was causing problems for VS2013.
+<li>SQLITE_SOURCE_ID: "2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e"
+<li>SHA1 for sqlite3.c: 990004ef2d0eec6a339e4caa562423897fe02bf0
+
+</ol></p>
+<a name="version_3_8_3"></a>
+<h3>2014-02-03 (3.8.3)</h3><p><ol class='lessindent'>
+<li>Added support for <a href="lang_with.html">common table expressions</a> and the <a href="lang_with.html">WITH clause</a>.
+<li>Added the <a href="lang_corefunc.html#printf">printf()</a> SQL function.
+<li>Added <a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a> as an optional bit in the 4th argument to the
+ <a href="c3ref/create_function.html">sqlite3_create_function()</a> and related interfaces, providing applications with
+ the ability to create new functions that can be factored out of inner loops when
+ they have constant arguments.
+<li>Add <a href="rescode.html#readonly_dbmoved">SQLITE_READONLY_DBMOVED</a> error code, returned at the beginning of a
+ transaction, to indicate that the underlying database file has been renamed
+ or moved out from under SQLite.
+<li>Allow arbitrary expressions, including function calls and subqueries, in
+ the filename argument to <a href="lang_attach.html">ATTACH</a>.
+<li>Allow a <a href="lang_select.html#values">VALUES clause</a> to be used anywhere a <a href="lang_select.html">SELECT</a> statement is valid.
+<li>Reseed the PRNG used by <a href="c3ref/randomness.html">sqlite3_randomness(N,P)</a> when invoked with N==0.
+ Automatically reseed after a fork() on unix.
+<li>Enhance the <a href="spellfix1.html">spellfix1</a> virtual table so that it can search efficiently by rowid.
+<li>Performance enhancements.
+<li>Improvements to the comments in the VDBE byte-code display when running <a href="lang_explain.html">EXPLAIN</a>.
+<li>Add the "%token_class" directive to <a href="lemon.html">Lemon parser generator</a> and use it to simplify
+ the grammar.
+<li>Change the <a href="lemon.html">Lemon</a> source code to avoid calling C-library functions that OpenBSD
+ considers dangerous. (Ex: sprintf).
+<li>Bug fix: In the <a href="cli.html">command-line shell</a> CSV import feature, do not end a field
+ when an escaped double-quote occurs at the end of a CRLN line.
+<li>SQLITE_SOURCE_ID:
+ "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
+<li>SHA1 for sqlite3.c: 98a07da78f71b0275e8d9c510486877adc31dbee
+
+</ol></p>
+<a name="version_3_8_2"></a>
+<h3>2013-12-06 (3.8.2)</h3><p><ol class='lessindent'>
+<li>Changed the defined behavior for the <a href="lang_expr.html#castexpr">CAST expression</a> when floating point values
+ greater than +9223372036854775807 are cast into integers so that the
+ result is the largest possible integer, +9223372036854775807, instead of
+ the smallest possible integer, -9223372036854775808. After this change,
+ CAST(9223372036854775809.0 as INT) yields +9223372036854775807 instead
+ of -9223372036854775808.
+ <b><big>&larr;</big>&nbsp;Potentially Incompatible Change!</b>
+<li>Added support for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+<li>Added the <a href="optoverview.html#skipscan">skip-scan optimization</a> to the query planner.
+<li>Extended the <a href="vtab.html">virtual table</a> interface, and in particular the
+ <a href="c3ref/index_info.html">sqlite3_index_info</a> object to allow a virtual table to report its estimate
+ on the number of rows that will be returned by a query.
+<li>Update the <a href="rtree.html">R-Tree extension</a> to make use of the enhanced virtual table
+ interface.
+<li>Add the <a href="compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option.
+<li>Enhanced the comments that are inserted into <a href="lang_explain.html">EXPLAIN</a> output when the
+ <a href="compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is enabled.
+<li>Performance enhancements in the VDBE, especially to the OP_Column opcode.
+<li>Factor constant subexpressions in inner loops out to the initialization code
+ in prepared statements.
+<li>Enhanced the ".explain" output formatting of the <a href="cli.html">command-line shell</a>
+ so that loops are indented to better show the structure of the program.
+<li>Enhanced the ".timer" feature of the <a href="cli.html">command-line shell</a> so that it
+ shows wall-clock time in addition to system and user times.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-12-06 14:53:30 27392118af4c38c5203a04b8013e1afdb1cebd0d"
+<li>SHA1 for sqlite3.c: 6422c7d69866f5ea3db0968f67ee596e7114544e
+
+</ol></p>
+<a name="version_3_8_1"></a>
+<h3>2013-10-17 (3.8.1)</h3><p><ol class='lessindent'>
+<li>Added the <a href="lang_corefunc.html#unlikely">unlikely()</a> and <a href="lang_corefunc.html#likelihood">likelihood()</a> SQL functions to be used
+ as hints to the query planner.
+<li>Enhancements to the query planner:
+<ol type='a'>
+ <li>Take into account the fact WHERE clause terms that cannot be used with indices
+ still probably reduce the number of output rows.
+ <li>Estimate the sizes of table and index rows and use the smallest applicable B-Tree
+ for full scans and "count(*)" operations.
+</ol>
+<li>Added the <a href="pragma.html#pragma_soft_heap_limit">soft_heap_limit pragma</a>.
+<li>Added support for <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>
+<li>Added support for "sz=NNN" parameters at the end of
+ <a href="fileformat2.html#stat1tab">sqlite_stat1.stat</a> fields
+ used to specify the average length in bytes for table and index rows.
+<li>Avoid running foreign-key constraint checks on an UPDATE if none of the
+ modified columns are associated with foreign keys.
+<li>Added the <a href="compile.html#minimum_file_descriptor">SQLITE_MINIMUM_FILE_DESCRIPTOR</a> compile-time option
+<li>Added the win32-longpath VFS on windows, permitting filenames up to 32K
+ characters in length.
+<li>The <a href="lang_datefunc.html">Date And Time Functions</a> are enhanced so that the current time
+ (ex: julianday('now')) is always the same for multiple function invocations
+ within the same <a href="c3ref/step.html">sqlite3_step()</a> call.
+<li>Add the "totype.c" extension, implementing the tointeger() and toreal()
+ SQL functions.
+<li><a href="fts3.html#fts4">FTS4</a> queries are better able to make use of docid<$limit constraints to
+ limit the amount of I/O required.
+<li>Added the hidden <a href="fts3.html#f4alid">fts4aux languageid column</a> to the <a href="fts3.html#fts4aux">fts4aux</a> virtual table.
+<li>The <a href="lang_vacuum.html">VACUUM</a> command packs the database about 1% tighter.
+<li>The sqlite3_analyzer utility program is updated to provide better descriptions
+ and to compute a more accurate estimate for "Non-sequential pages"
+<li>Refactor the implementation of PRAGMA statements to improve parsing performance.
+<li>The directory used to hold temporary files on unix can now be set using
+ the SQLITE_TMPDIR environment variable, which takes precedence over the
+ TMPDIR environment variable. The <a href="c3ref/temp_directory.html">sqlite3_temp_directory</a> global variable
+ still has higher precedence than both environment variables, however.
+<li>Added the <a href="pragma.html#pragma_stats">PRAGMA stats</a> statement.
+<li><b>Bug fix:</b> Return the correct answer for "SELECT count(*) FROM table" even if
+ there is a <a href="partialindex.html">partial index</a> on the table. Ticket
+ <a href="http://www.sqlite.org/src/info/a5c8ed66ca">a5c8ed66ca</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a"
+<li>SHA1 for sqlite3.c: 0a54d76566728c2ba96292a49b138e4f69a7c391
+
+</ol></p>
+<a name="version_3_8_0_2"></a>
+<h3>2013-09-03 (3.8.0.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the optimization that attempts to omit unused LEFT JOINs
+
+<li>SQLITE_SOURCE_ID:
+ "2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef"
+<li>SHA1 for sqlite3.c: 6cf0c7b46975a87a0dc3fba69c229a7de61b0c21
+
+</ol></p>
+<a name="version_3_8_0_1"></a>
+<h3>2013-08-29 (3.8.0.1)</h3><p><ol class='lessindent'>
+<li>Fix an off-by-one error that caused quoted empty string at the end of a
+CRNL-terminated line of CSV input to be misread by the command-line shell.
+<li>Fix a query planner bug involving a LEFT JOIN with a BETWEEN or LIKE/GLOB
+constraint and then another INNER JOIN to the right that involves an OR constraint.
+<li>Fix a query planner bug that could result in a segfault when querying tables
+with a UNIQUE or PRIMARY KEY constraint with more than four columns.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-08-29 17:35:01 352362bc01660edfbda08179d60f09e2038a2f49"
+<li>SHA1 for sqlite3.c: 99906bf63e6cef63d6f3d7f8526ac4a70e76559e
+
+</ol></p>
+<a name="version_3_8_0"></a>
+<h3>2013-08-26 (3.8.0)</h3><p><ol class='lessindent'>
+<li>Add support for <a href="partialindex.html">partial indexes</a></li>
+<li>Cut-over to the <a href="queryplanner-ng.html">next generation query planner</a> for faster and better query plans.
+<li>The <a href="eqp.html">EXPLAIN QUERY PLAN</a> output no longer shows an estimate of the number of
+ rows generated by each loop in a join.
+<li>Added the <a href="fts3.html#fts4notindexed">FTS4 notindexed option</a>, allowing non-indexed columns in an FTS4 table.
+<li>Added the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">SQLITE_STMTSTATUS_VM_STEP</a> option to <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a>.
+<li>Added the <a href="pragma.html#pragma_cache_spill">cache_spill pragma</a>.
+<li>Added the <a href="pragma.html#pragma_query_only">query_only pragma</a>.
+<li>Added the <a href="pragma.html#pragma_defer_foreign_keys">defer_foreign_keys pragma</a> and the
+ <a href="c3ref/db_status.html">sqlite3_db_status</a>(db, <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">SQLITE_DBSTATUS_DEFERRED_FKS</a>,...) C-language interface.
+<li>Added the "percentile()" function as a <a href="loadext.html">loadable extension</a> in the ext/misc
+ subdirectory of the source tree.
+<li>Added the <a href="compile.html#allow_uri_authority">SQLITE_ALLOW_URI_AUTHORITY</a> compile-time option.
+<li>Add the <a href="c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension(X)</a> interface.
+<li>A running SELECT statement that lacks a FROM clause (or any other statement that
+ never reads or writes from any database file) will not prevent a read
+ transaction from closing.
+<li>Add the <a href="compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a> compile-time option. Setting this option
+ to 0 disables automatic indices by default.
+<li>Issue an <a href="rescode.html#warning_autoindex">SQLITE_WARNING_AUTOINDEX</a> warning on the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> whenever
+ the query planner uses an automatic index.
+<li>Added the <a href="compile.html#fts3_max_expr_depth">SQLITE_FTS3_MAX_EXPR_DEPTH</a> compile-time option.
+<li>Added an optional 5th parameter defining the collating sequence to the
+ next_char() extension SQL function.
+<li>The <a href="rescode.html#busy_snapshot">SQLITE_BUSY_SNAPSHOT</a> extended error code is returned in WAL mode when
+ a read transaction cannot be upgraded to a write transaction because the read is
+ on an older snapshot.
+<li>Enhancements to the sqlite3_analyzer utility program to provide size
+ information separately for each individual index of a table, in addition to
+ the aggregate size.
+<li>Allow read transactions to be freely opened and closed by SQL statements run
+ from within the implementation of <a href="appfunc.html">application-defined SQL functions</a> if the
+ function is called by a SELECT statement that does not access any database table.
+<li>Disable the use of posix_fallocate() on all (unix) systems unless the
+ HAVE_POSIX_FALLOCATE compile-time option is used.
+<li>Update the ".import" command in the <a href="cli.html">command-line shell</a> to support multi-line
+ fields and correct RFC-4180 quoting and to issue warning and/or error messages
+ if the input text is not strictly RFC-4180 compliant.
+<li>Bug fix: In the <a href="fts3.html#unicode61">unicode61</a> tokenizer of <a href="fts3.html#fts4">FTS4</a>, treat all private code points
+ as identifier symbols.
+<li>Bug fix: Bare identifiers in ORDER BY clauses bind more tightly to output column
+ names, but identifiers in expressions bind more tightly to input column names.
+ Identifiers in GROUP BY clauses always prefer output column names, however.
+<li>Bug fixes: Multiple problems in the legacy query optimizer were fixed by the
+ move to <a href="queryplanner-ng.html">NGQP</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-08-26 04:50:08 f64cd21e2e23ed7cff48f7dafa5e76adde9321c2"
+<li>SHA1 for sqlite3.c: b7347f4b4c2a840e6ba12040093d606bd16ea21e
+
+</ol></p>
+<a name="version_3_7_17"></a>
+<h3>2013-05-20 (3.7.17)</h3><p><ol class='lessindent'>
+<li>Add support for <a href="mmap.html">memory-mapped I/O</a>.
+<li>Add the <a href="c3ref/strglob.html">sqlite3_strglob()</a> convenience interface.
+<li>Assigned the integer at offset 68 in the <a href="fileformat2.html#database_header">database header</a> as the
+ <a href="fileformat2.html#appid">Application ID</a> for when SQLite is used as an <a href="appfileformat.html">application file-format</a>.
+ Added the <a href="pragma.html#pragma_application_id">PRAGMA application_id</a> command to query and set the Application ID.
+<li>Report rollback recovery in the <a href="errlog.html">error log</a> as SQLITE_NOTICE_RECOVER_ROLLBACK.
+ Change the error log code for WAL recover from
+ SQLITE_OK to SQLITE_NOTICE_RECOVER_WAL.
+<li>Report the risky uses of <a href="howtocorrupt.html#unlink">unlinked database files</a> and
+ <a href="howtocorrupt.html#alias">database filename aliasing</a> as SQLITE_WARNING messages in the <a href="errlog.html">error log</a>.
+<li>Added the <a href="compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> compile-time option.
+<li>Increase the default value of <a href="compile.html#max_schema_retry">SQLITE_MAX_SCHEMA_RETRY</a> to 50 and make sure
+ that it is honored in every place that a schema change might force a statement
+ retry.
+<li>Add a new test harness called "mptester" used to verify correct operation
+ when multiple processes are using the same database file at the same time.
+<li>Enhance the <a href="loadext.html">extension loading</a> mechanism to be more flexible (while
+ still maintaining backwards compatibility) in two ways:
+ <ol>
+ <li>If the default entry point "sqlite3_extension_init" is not present in
+ the loadable extension, also try an entry point "sqlite3_X_init" where
+ "X" is based on the shared library filename. This allows every extension
+ to have a different entry point, which allows them to be statically linked
+ with no code changes.
+ <li>The shared library filename passed to <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> may
+ omit the filename suffix, and an appropriate architecture-dependent
+ suffix (".so", ".dylib", or ".dll") will be added automatically.
+ </ol>
+<li>Added many new loadable extensions to the source tree, including
+ amatch, closure, fuzzer, ieee754, nextchar, regexp, spellfix,
+ and wholenumber. See header comments on each extension source file
+ for further information about what that extension does.
+<li>Enhance <a href="fts3.html">FTS3</a> to avoid using excess stack space when there are a huge
+ number of terms on the right-hand side of the MATCH operator. A side-effect
+ of this change is that the MATCH operator can only accommodate 12 NEAR
+ operators at a time.
+<li>Enhance the <a href="fts3.html#fts4aux">fts4aux</a> virtual table so that it can be a TEMP table.
+<li>Added the <a href="fts3.html#fts3tok">fts3tokenize virtual table</a> to the <a href="fts3.html">full-text search</a> logic.
+<li>Query planner enhancement: Use the transitive property of constraints
+ to move constraints into the outer loops of a join whenever possible,
+ thereby reducing the amount of work that needs to occur in inner loops.
+<li>Discontinue the use of posix_fallocate() on unix, as it does not work on all
+ filesystems.
+<li>Improved tracing and debugging facilities in the Windows <a href="vfs.html">VFS</a>.
+<li>Bug fix: Fix a potential <b>database corruption bug</b>
+ in <a href="sharedcache.html">shared cache mode</a> when one
+ <a href="c3ref/sqlite3.html">database connection</a> is closed while another is in the middle of a write
+ transaction.
+ Ticket <a href="http://www.sqlite.org/src/info/e636a050b7">e636a050b7</a>
+<li>Bug fix:
+ Only consider AS names from the result set as candidates for resolving
+ identifiers in the WHERE clause if there are no other matches. In the
+ ORDER BY clause, AS names take priority over any column names.
+ Ticket <a href="http://www.sqlite.org/src/info/2500cdb9be05">2500cdb9be05</a>
+<li>Bug fix: Do not allow a virtual table to cancel the ORDER BY clause unless
+ all outer loops are guaranteed to return no more than one row result.
+ Ticket <a href="http://www.sqlite.org/src/info/ba82a4a41eac1">ba82a4a41eac1</a>.
+<li>Bug fix: Do not suppress the ORDER BY clause on a virtual table query if
+ an IN constraint is used.
+ Ticket <a href="http://www.sqlite.org/src/info/f69b96e3076e">f69b96e3076e</a>.
+<li>Bug fix: The <a href="cli.html">command-line shell</a> gives an exit code of 0 when terminated
+ using the ".quit" command.
+<li>Bug fix: Make sure <a href="pragma.html#syntax">PRAGMA</a> statements appear in <a href="c3ref/profile.html">sqlite3_trace()</a> output.
+<li>Bug fix: When a <a href="lang_select.html#compound">compound query</a> that uses an ORDER BY clause
+ with a <a href="lang_expr.html#collateop">COLLATE operator</a>, make sure that the sorting occurs
+ according to the specified collation and that the comparisons associate with
+ the compound query use the native collation. Ticket
+ <a href="http://www.sqlite.org/src/info/6709574d2a8d8">6709574d2a8d8</a>.
+<li>Bug fix: Makes sure the <a href="c3ref/set_authorizer.html">authorizer</a> callback gets
+ a valid pointer to the string "ROWID" for the column-name parameter when
+ doing an <a href="lang_update.html">UPDATE</a> that changes the rowid. Ticket
+ <a href="http://www.sqlite.org/src/info/0eb70d77cb05bb2272">0eb70d77cb05bb2272</a>
+<li>Bug fix: Do not move WHERE clause terms inside OR expressions that are
+ contained within an ON clause of a LEFT JOIN. Ticket
+ <a href="http://www.sqlite.org/src/info/f2369304e4">f2369304e4</a>
+<li>Bug fix: Make sure an error is always reported when attempting to preform
+ an operation that requires a <a href="datatype3.html#collation">collating sequence</a> that is missing.
+ Ticket <a href="http://www.sqlite.org/src/info/0fc59f908b">0fc59f908b</a>
+
+<li>SQLITE_SOURCE_ID:
+ "2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668"
+<li>SHA1 for sqlite3.c: 246987605d0503c700a08b9ee99a6b5d67454aab
+
+</ol></p>
+<a name="version_3_7_16_2"></a>
+<h3>2013-04-12 (3.7.16.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug (present since version 3.7.13) that could result in database corruption
+ on windows if two or more processes try to access the same database file at the
+ same time and immediately after third process crashed in the middle of committing
+ to that same file. See ticket
+ <a href="http://www.sqlite.org/src/info/7ff3120e4f">7ff3120e4f</a> for further
+ information.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-04-12 11:52:43 cbea02d93865ce0e06789db95fd9168ebac970c7"
+<li>SHA1 for sqlite3.c: d466b54789dff4fb0238b9232e74896deaefab94
+
+</ol></p>
+<a name="version_3_7_16_1"></a>
+<h3>2013-03-29 (3.7.16.1)</h3><p><ol class='lessindent'>
+<li>Fix for a bug in the ORDER BY optimizer that was introduced in
+ <a href="#version_3_7_15">version 3.7.15</a> which would sometimes optimize out the sorting step
+ when in fact the sort was required.
+ Ticket <a href="http://www.sqlite.org/src/info/a179fe7465">a179fe7465</a>
+<li>Fix a long-standing bug in the <a href="lang_expr.html#castexpr">CAST expression</a> that would recognize UTF16
+ characters as digits even if their most-significant-byte was not zero.
+ Ticket <a href="http://www.sqlite.org/src/info/689137afb6da41">689137afb6da41</a>.
+<li>Fix a bug in the NEAR operator of <a href="fts3.html">FTS3</a> when applied to subfields.
+ Ticket <a href="http://www.sqlite.org/src/info/38b1ae018f">38b1ae018f</a>.
+<li>Fix a long-standing bug in the storage engine that would (very rarely)
+ cause a spurious report of an SQLITE_CORRUPT error but which was otherwise
+ harmless.
+ Ticket <a href="http://www.sqlite.org/src/info/6bfb98dfc0c">6bfb98dfc0c</a>.
+<li>The SQLITE_OMIT_MERGE_SORT option has been removed. The merge sorter is
+ now a required component of SQLite.
+<li>Fixed lots of spelling errors in the source-code comments
+<li>SQLITE_SOURCE_ID:
+ "2013-03-29 13:44:34 527231bc67285f01fb18d4451b28f61da3c4e39d"
+<li>SHA1 for sqlite3.c: 7a91ceceac9bcf47ceb8219126276e5518f7ff5a
+
+</ol></p>
+<a name="version_3_7_16"></a>
+<h3>2013-03-18 (3.7.16)</h3><p><ol class='lessindent'>
+<li>Added the <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command.
+<li>Added new extended error codes for all SQLITE_CONSTRAINT errors
+<li>Added the SQLITE_READONLY_ROLLBACK extended error code for when a database
+ cannot be opened because it needs rollback recovery but is read-only.
+<li>Added SQL functions <a href="lang_corefunc.html#unicode">unicode(A)</a> and <a href="lang_corefunc.html#char">char(X1,...,XN)</a>.
+<li>Performance improvements for <a href="pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>, especially in
+ cases where the number of free pages is greater than what will fit on a
+ single trunk page of the freelist.
+<li>Improved optimization of queries containing aggregate min() or max().
+<li>Enhance virtual tables so that they can potentially use an index when
+ the WHERE clause contains the IN operator.
+<li>Allow indices to be used for sorting even if prior terms of the index
+ are constrained by IN operators in the WHERE clause.
+<li>Enhance the <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> command so that the "pk" column is an
+ increasing integer to show the order of columns in the primary key.
+<li>Enhance the query optimizer to exploit transitive join constraints.
+<li>Performance improvements in the query optimizer.
+<li>Allow the error message from <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to be longer than
+ 20000 bytes.
+<li>Improved name resolution for deeply nested queries.
+<li>Added the test_regexp.c module as a demonstration of how to implement
+ the REGEXP operator.
+<li>Improved error messages in the <a href="rtree.html">RTREE</a> extension.
+<li>Enhance the <a href="cli.html">command-line shell</a> so that a non-zero argument to the
+ ".exit" command causes the shell to exit immediately without cleanly
+ shutting down the database connection.
+<li>Improved error messages for invalid boolean arguments to dot-commands
+ in the <a href="cli.html">command-line shell</a>.
+<li>Improved error messages for "foreign key mismatch" showing the names of
+ the two tables involved.
+<li>Remove all uses of umask() in the unix VFS.
+<li>Added the <a href="pragma.html#pragma_vdbe_addoptrace">PRAGMA vdbe_addoptrace</a> and <a href="pragma.html#pragma_vdbe_debug">PRAGMA vdbe_debug</a> commands.
+<li>Change to use strncmp() or the equivalent instead of memcmp() when
+ comparing non-zero-terminated strings.
+<li>Update cygwin interfaces to omit deprecated API calls.
+<li>Enhance the <a href="spellfix1.html">spellfix1</a> extension so that the edit distance cost table can
+ be changed at runtime by inserting a string like 'edit_cost_table=TABLE'
+ into the "command" field.
+
+<li>Bug fix: repair a long-standing problem that could cause incorrect query
+ results in a 3-way or larger join that compared INTEGER fields against TEXT
+ fields in two or more places.
+ Ticket <a href="http://www.sqlite.org/src/info/fc7bd6358f">fc7bd6358f</a>
+<li>Bug fix: Issue an error message if the 16-bit reference counter on a
+ view overflows due to an overly complex query.
+<li>Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply
+ nested UNION ALL queries.
+<li>Bug fix: Make sure the schema is up-to-date prior to running pragmas
+ table_info, index_list, index_info, and foreign_key_list.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-03-18 11:39:23 66d5f2b76750f3520eb7a495f6247206758f5b90"
+<li>SHA1 for sqlite3.c: 7308ab891ca1b2ebc596025cfe4dc36f1ee89cf6
+
+</ol></p>
+<a name="version_3_7_15_2"></a>
+<h3>2013-01-09 (3.7.15.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug, introduced in <a href="#version_3_7_15">version 3.7.15</a>, that causes an ORDER BY clause
+ to be optimized out of a three-way join when the ORDER BY is actually
+ required.
+ Ticket <a href="http://www.sqlite.org/src/info/598f5f7596b055">598f5f7596b055</a>
+
+<li>SQLITE_SOURCE_ID:
+ "2013-01-09 11:53:05 c0e09560d26f0a6456be9dd3447f5311eb4f238f"
+<li>SHA1 for sqlite3.c: 5741f47d1bc38aa0a8c38f09e60a5fe0031f272d
+
+</ol></p>
+<a name="version_3_7_15_1"></a>
+<h3>2012-12-19 (3.7.15.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug, introduced in <a href="#version_3_7_15">version 3.7.15</a>, that causes a segfault if
+ the AS name of a result column of a SELECT statement is used as a logical
+ term in the WHERE clause. Ticket
+ <a href="http://www.sqlite.org/src/info/a7b7803e8d1e869">a7b7803e8d1e869</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2012-12-19 20:39:10 6b85b767d0ff7975146156a99ad673f2c1a23318"
+<li>SHA1 for sqlite3.c: bbbaa68061e925bd4d7d18d7e1270935c5f7e39a
+
+</ol></p>
+<a name="version_3_7_15"></a>
+<h3>2012-12-12 (3.7.15)</h3><p><ol class='lessindent'>
+<li>Added the <a href="c3ref/errcode.html">sqlite3_errstr()</a> interface.
+<li>Avoid invoking the <a href="c3ref/profile.html">sqlite3_trace()</a> callback multiple times when a
+ statement is automatically reprepared due to <a href="rescode.html#schema">SQLITE_SCHEMA</a> errors.
+<li>Added support for Windows Phone 8 platforms
+<li>Enhance IN operator processing to make use of indices with numeric
+ affinities.
+<li>Do full-table scans using covering indices when possible, under the
+ theory that an index will be smaller and hence can be scanned with
+ less I/O.
+<li>Enhance the query optimizer so that ORDER BY clauses are more aggressively
+ optimized, especially in joins where various terms of the ORDER BY clause
+ come from separate tables of the join.
+<li>Add the ability to implement FROM clause subqueries as coroutines rather
+ that manifesting the subquery into a temporary table.
+<li>Enhancements the command-line shell:
+ <ol type='a'>
+ <li>Added the ".print" command
+ <li>Negative numbers in the ".width" command cause right-alignment
+ <li>Add the ".wheretrace" command when compiled with SQLITE_DEBUG
+ </ol>
+<li>Added the <a href="pragma.html#pragma_busy_timeout">busy_timeout pragma</a>.
+<li>Added the <a href="lang_corefunc.html#instr">instr()</a> SQL function.
+<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler">SQLITE_FCNTL_BUSYHANDLER</a> file control, used to allow VFS
+ implementations to get access to the busy handler callback.
+<li>The xDelete method in the built-in <a href="vfs.html">VFSes</a> now return
+ SQLITE_IOERR_DELETE_NOENT if the file to be deleted does not exist.
+<li>Enhanced support for QNX.
+<li>Work around an optimizer bug in the MSVC compiler when targeting ARM.
+<li>Bug fix: Avoid various concurrency problems in <a href="sharedcache.html">shared cache mode</a>.
+<li>Bug fix: Avoid a deadlock or crash if the <a href="backup.html">backup API</a>, <a href="sharedcache.html">shared cache</a>,
+ and the SQLite Encryption Extension are all used at once.
+<li>Bug fix: SQL functions created using the TCL interface honor the
+ "nullvalue" setting.
+<li>Bug fix: Fix a 32-bit overflow problem on CREATE INDEX for databases
+ larger than 16GB.
+<li>Bug fix: Avoid segfault when using the <a href="lang_expr.html#collateop">COLLATE operator</a> inside of a
+ <a href="lang_createtable.html#ckconst">CHECK constraint</a> or <a href="lang_createview.html">view</a> in <a href="sharedcache.html">shared cache mode</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2012-12-12 13:36:53 cd0b37c52658bfdf992b1e3dc467bae1835a94ae"
+<li>SHA1 for sqlite3.c: 2b413611f5e3e3b6ef5f618f2a9209cdf25cbcff"
+
+</ol></p>
+<a name="version_3_7_14_1"></a>
+<h3>2012-10-04 (3.7.14.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket
+<a href="www.sqlite.org/src/tktview/d02e1406a58ea02d">&#91;d02e1406a58ea02d]&#93;</a>)
+that causes a segfault on a LEFT JOIN that includes an OR in the ON clause.
+<li>Work around a bug in the optimizer in the VisualStudio-2012 compiler that
+causes invalid code to be generated when compiling SQLite on ARM.
+<li>Fix the TCL interface so that the "nullvalue" setting is honored for
+TCL implementations of SQL functions.
+<li>SQLITE_SOURCE_ID:
+ "2012-10-04 19:37:12 091570e46d04e84b67228e0bdbcd6e1fb60c6bdb"
+<li>SHA1 for sqlite3.c: 62aaecaacab3a4bf4a8fe4aec1cfdc1571fe9a44
+
+</ol></p>
+<a name="version_3_7_14"></a>
+<h3>2012-09-03 (3.7.14)</h3><p><ol class='lessindent'>
+<li>Drop built-in support for OS/2. If you need to upgrade an OS/2
+ application to use this or a later version of SQLite,
+ then add an application-defined <a href="vfs.html">VFS</a> using the
+ <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> interface. The code removed in this release can
+ serve as a baseline for the application-defined VFS.
+<li>Ensure that floating point values are preserved exactly when reconstructing
+ a database from the output of the ".dump" command of the
+ <a href="cli.html">command-line shell</a>.
+<li>Added the <a href="c3ref/close.html">sqlite3_close_v2()</a> interface.
+<li>Updated the <a href="cli.html">command-line shell</a> so that it can be built using
+ <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a> and <a href="compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a>.
+<li>Improvements to the windows makefiles and build processes.
+<li>Enhancements to <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> so that
+ they can optionally check just a single attached database instead of all
+ attached databases.
+<li>Enhancements to <a href="wal.html">WAL mode</a> processing that ensure that at least one
+ valid read-mark is available at all times, so that read-only processes
+ can always read the database.
+<li>Performance enhancements in the sorter used by ORDER BY and CREATE INDEX.
+<li>Added the <a href="compile.html#disable_fts4_deferred">SQLITE_DISABLE_FTS4_DEFERRED</a> compile-time option.
+<li>Better handling of aggregate queries where the aggregate functions are
+ contained within subqueries.
+<li>Enhance the query planner so that it will try to use a <a href="queryplanner.html#covidx">covering index</a>
+ on queries that make use of <a href="optoverview.html#or_opt">or optimization</a>.
+<li>SQLITE_SOURCE_ID:
+ "2012-09-03 15:42:36 c0d89d4a9752922f9e367362366efde4f1b06f2a"
+<li>SHA1 for sqlite3.c: 5fdf596b29bb426001f28b488ff356ae14d5a5a6
+
+</ol></p>
+<a name="version_3_7_13"></a>
+<h3>2012-06-11 (3.7.13)</h3><p><ol class='lessindent'>
+<li><a href="inmemorydb.html">In-memory databases</a> that are specified using
+ <a href="uri.html">URI filenames</a> are allowed to use <a href="sharedcache.html#inmemsharedcache">shared cache</a>,
+ so that the same
+ in-memory database can be accessed from multiple database connections.
+<li>Recognize and use the <a href="uri.html#coreqp">mode=memory</a> query parameter in
+ <a href="uri.html">URI filenames</a>.
+<li>Avoid resetting the schema of <a href="sharedcache.html">shared cache</a> connections when any one
+ connection closes. Instead, wait for the last connection to close before
+ resetting the schema.
+<li>In the <a href="rtree.html">RTREE</a> extension, when rounding 64-bit floating point numbers
+ to 32-bit for storage, always round in a direction that causes the
+ bounding box to get larger.
+<li>Adjust the unix driver to avoid unnecessary calls to fchown().
+<li>Add interfaces sqlite3_quota_ferror() and sqlite3_quota_file_available()
+ to the test_quota.c module.
+<li>The <a href="c3ref/create_module.html">sqlite3_create_module()</a> and <a href="c3ref/create_module.html">sqlite3_create_module_v2()</a> interfaces
+ return SQLITE_MISUSE on any attempt to overload or replace a <a href="vtab.html">virtual table</a>
+ module. The destructor is always called in this case, in accordance with
+ historical and current documentation.
+<li>SQLITE_SOURCE_ID:
+ "2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc"
+<li>SHA1 for sqlite3.c: ff0a771d6252545740ba9685e312b0e3bb6a641b
+
+</ol></p>
+<a name="version_3_7_12_1"></a>
+<h3>2012-05-22 (3.7.12.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug
+ <a href="http://www.sqlite.org/src/info/c2ad16f997ee9c">(ticket c2ad16f997)</a>
+ in the 3.7.12 release that can cause a segfault for certain
+ obscure nested aggregate queries.
+<li>Fix various other minor test script problems.
+<li>SQLITE_SOURCE_ID:
+ "2012-05-22 02:45:53 6d326d44fd1d626aae0e8456e5fa2049f1ce0789"
+<li>SHA1 for sqlite3.c: d494e8d81607f0515d4f386156fb0fd86d5ba7df
+
+</ol></p>
+<a name="version_3_7_12"></a>
+<h3>2012-05-14 (3.7.12)</h3><p><ol class='lessindent'>
+<li>Add the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite">SQLITE_DBSTATUS_CACHE_WRITE</a> option for <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
+<li>Optimize the <a href="lang_corefunc.html#typeof">typeof()</a> and <a href="lang_corefunc.html#length">length()</a> SQL functions so that they avoid
+ unnecessary reading of database content from disk.
+<li>Add the <a href="fts3.html#*fts4mergecmd">FTS4 "merge" command</a>, the <a href="fts3.html#*fts4automergecmd">FTS4 "automerge" command</a>, and
+ the <a href="fts3.html#*fts4ickcmd">FTS4 "integrity-check" command</a>.
+<li>Report the name of specific <a href="lang_createtable.html#ckconst">CHECK</a> constraints that fail.
+<li>In the command-line shell, use popen() instead of fopen() if the first
+ character of the argument to the ".output" command is "|".
+<li>Make use of OVERLAPPED in the windows <a href="vfs.html">VFS</a> to avoid some system calls
+ and thereby obtain a performance improvement.
+<li>More aggressive optimization of the AND operator when one side or the
+ other is always false.
+<li>Improved performance of queries with many OR-connected terms in the
+ WHERE clause that can all be indexed.
+<li>Add the <a href="compile.html#rtree_int_only">SQLITE_RTREE_INT_ONLY</a> compile-time option to force the
+ <a href="rtree.html">R*Tree Extension Module</a> to use integer instead of
+ floating point values for both storage and computation.
+<li>Enhance the <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to use much less memory when
+ processing multi-gigabyte databases.
+<li>New interfaces added to the test_quota.c add-on module.
+<li>Added the ".trace" dot-command to the command-line shell.
+<li>Allow virtual table constructors to be invoked recursively.
+<li>Improved optimization of ORDER BY clauses on compound queries.
+<li>Improved optimization of aggregate subqueries contained within an
+ aggregate query.
+<li>Bug fix: Fix the <a href="lang_savepoint.html">RELEASE</a> command so that it does not cancel pending
+ queries. This repairs a problem introduced in 3.7.11.
+<li>Bug fix: Do not discard the DISTINCT as superfluous unless a subset of
+ the result set is subject to a UNIQUE constraint <em>and</em> it none
+ of the columns in that subset can be NULL.
+ Ticket <a href="http://www.sqlite.org/src/info/385a5b56b9">385a5b56b9</a>.
+<li>Bug fix: Do not optimize away an ORDER BY clause that has the same terms
+ as a UNIQUE index unless those terms are also NOT NULL.
+ Ticket <a href="http://www.sqlite.org/src/info/2a5629202f">2a5629202f</a>.
+<li>SQLITE_SOURCE_ID:
+ "2012-05-14 01:41:23 8654aa9540fe9fd210899d83d17f3f407096c004"
+<li>SHA1 for sqlite3.c: 57e2104a0f7b3f528e7f6b7a8e553e2357ccd2e1
+
+
+</ol></p>
+<a name="version_3_7_11"></a>
+<h3>2012-03-20 (3.7.11)</h3><p><ol class='lessindent'>
+<li>Enhance the <a href="lang_insert.html">INSERT</a> syntax to allow multiple rows to be inserted
+ via the VALUES clause.
+<li>Enhance the <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> command to support the
+ IF NOT EXISTS clause.
+<li>Added the <a href="c3ref/stricmp.html">sqlite3_stricmp()</a> interface as a counterpart to
+ <a href="c3ref/stricmp.html">sqlite3_strnicmp()</a>.
+<li>Added the <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
+<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control, giving <a href="vfs.html">VFS</a> implementations
+ the ability to add new <a href="pragma.html#syntax">PRAGMA</a> statements or to override built-in
+ PRAGMAs.
+<li>Queries of the form: "SELECT max(x), y FROM table" returns the
+ value of y on the same row that contains the maximum x value.
+<li>Added support for the <a href="fts3.html#*fts4languageid">FTS4 languageid option</a>.
+<li>Documented support for the <a href="fts3.html#*fts4content">FTS4 content option</a>. This feature has
+ actually been in the code since <a href="#version_3_7_9">version 3.7.9</a> but is only now considered
+ to be officially supported.
+<li>Pending statements no longer block <a href="lang_transaction.html">ROLLBACK</a>. Instead, the pending
+ statement will return SQLITE_ABORT upon next access after the ROLLBACK.
+<li>Improvements to the handling of CSV inputs in the <a href="cli.html">command-line shell</a>
+<li>Fix a <a href="http://www.sqlite.org/src/info/b7c8682cc1">bug</a> introduced
+ in <a href="#version_3_7_10">version 3.7.10</a> that might cause a LEFT JOIN
+ to be incorrectly converted into an INNER JOIN if the WHERE clause
+ indexable terms connected by OR.
+
+<li>SQLITE_SOURCE_ID:
+ "2012-03-20 11:35:50 00bb9c9ce4f465e6ac321ced2a9d0062dc364669"
+<li>SHA1 for sqlite3.c: d460d7eda3a9dccd291aed2a9fda868b9b120a10
+
+</ol></p>
+<a name="version_3_7_10"></a>
+<h3>2012-01-16 (3.7.10)</h3><p><ol class='lessindent'>
+<li>The default <a href="fileformat2.html#schemaformat">schema format number</a> is changed from 1 to 4.
+ This means that, unless
+ the <a href="pragma.html#pragma_legacy_file_format">PRAGMA legacy_file_format=ON</a> statement is
+ run, newly created database files will be unreadable by version of SQLite
+ prior to 3.3.0 (2006-01-10). It also means that the <a href="lang_createindex.html#descidx">descending indices</a>
+ are enabled by default.
+<li>The sqlite3_pcache_methods structure and the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache">SQLITE_CONFIG_PCACHE</a>
+ and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache">SQLITE_CONFIG_GETPCACHE</a> configuration parameters are deprecated.
+ They are replaced by a new <a href="c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> structure and
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2">SQLITE_CONFIG_GETPCACHE2</a> configuration
+ parameters.
+<li>Added the <a href="psow.html">powersafe overwrite</a> property to the VFS interface. Provide
+ the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a> I/O capability, the
+ <a href="compile.html#powersafe_overwrite">SQLITE_POWERSAFE_OVERWRITE</a> compile-time option, and the
+ "psow=BOOLEAN" query parameter for <a href="uri.html">URI filenames</a>.
+<li>Added the <a href="c3ref/db_release_memory.html">sqlite3_db_release_memory()</a> interface and the
+ <a href="pragma.html#pragma_shrink_memory">shrink_memory pragma</a>.
+<li>Added the <a href="c3ref/db_filename.html">sqlite3_db_filename()</a> interface.
+<li>Added the <a href="c3ref/stmt_busy.html">sqlite3_stmt_busy()</a> interface.
+<li>Added the <a href="c3ref/uri_boolean.html">sqlite3_uri_boolean()</a> and <a href="c3ref/uri_boolean.html">sqlite3_uri_int64()</a> interfaces.
+<li>If the argument to <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> is negative N, that means to use
+ approximately -1024*N bytes of memory for the page cache regardless of
+ the page size.
+<li>Enhanced the default memory allocator to make use of _msize() on windows,
+ malloc_size() on Mac, and malloc_usable_size() on Linux.
+<li>Enhanced the query planner to support index queries with range constraints
+ on the rowid.
+<li>Enhanced the query planner flattening logic to allow UNION ALL compounds
+ to be promoted upwards to replace a simple wrapper SELECT even if the
+ compounds are joins.
+<li>Enhanced the query planner so that the xfer optimization can be used with
+ INTEGER PRIMARY KEY ON CONFLICT as long as the destination table is
+ initially empty.
+<li>Enhanced the windows <a href="vfs.html">VFS</a> so that all system calls can be overridden
+ using the xSetSystemCall interface.
+<li>Updated the "unix-dotfile" <a href="vfs.html">VFS</a> to use locking directories with mkdir()
+ and rmdir() instead of locking files with open() and unlink().
+<li>Enhancements to the test_quota.c extension to support stdio-like interfaces
+ with quotas.
+<li>Change the unix <a href="vfs.html">VFS</a> to be tolerant of read() system calls that return
+ less then the full number of requested bytes.
+<li>Change both unix and windows <a href="vfs.html">VFSes</a> to report a sector size of 4096
+ instead of the old default of 512.
+<li>In the <a href="tclsqlite.html">TCL Interface</a>, add the -uri option to the "sqlite3" TCL command
+ used for creating new database connection objects.
+<li>Added the <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_EXPLAIN_STMT</a> test-control option with the
+ <a href="compile.html#enable_tree_explain">SQLITE_ENABLE_TREE_EXPLAIN</a> compile-time option to enable the
+ <a href="cli.html">command-line shell</a> to display ASCII-art parse trees of SQL statements
+ that it processes, for debugging and analysis.
+<li><b>Bug fix:</b>
+ Add an additional xSync when restarting a WAL in order to prevent an
+ exceedingly unlikely but theoretically possible
+ database corruption following power-loss.
+ Ticket <a href="http://www.sqlite.org/src/info/ff5be73dee">ff5be73dee</a>.
+<li><b>Bug fix:</b>
+ Change the VDBE so that all registers are initialized to Invalid
+ instead of NULL.
+ Ticket <a href="http://www.sqlite.org/src/info/7bbfb7d442">7bbfb7d442</a>
+<li><b>Bug fix:</b>
+ Fix problems that can result from 32-bit integer overflow.
+ Ticket <a href="http://www.sqlite.org/src/info/ac0ff496b7e2">ac00f496b7e2</a>
+<li>SQLITE_SOURCE_ID:
+ "2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204"
+<li>SHA1 for sqlite3.c: 6497cbbaad47220bd41e2e4216c54706e7ae95d4
+
+</ol></p>
+<a name="version_3_7_9"></a>
+<h3>2011-11-01 (3.7.9)</h3><p><ol class='lessindent'>
+<li>If a search token (on the right-hand side of the MATCH operator) in
+ <a href="fts3.html#fts4">FTS4</a> begins with "&#94;" then that token must be the first in its field
+ of the document. <b>** Potentially Incompatible Change **</b>
+<li>Added options <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit">SQLITE_DBSTATUS_CACHE_HIT</a> and <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss">SQLITE_DBSTATUS_CACHE_MISS</a>
+ to the <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface.
+<li>Removed support for <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a>, replacing it with the much
+ more capable <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> option.
+<li>Enhancements to the sqlite3_analyzer utility program, including the
+ --pageinfo and --stats options and support for multiplexed databases.
+<li>Enhance the <a href="c3ref/data_count.html">sqlite3_data_count()</a> interface so that it can be used to
+ determine if SQLITE_DONE has been seen on the prepared statement.
+<li>Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite">SQLITE_FCNTL_OVERWRITE</a> file-control by which the SQLite core
+ indicates to the VFS that the current transaction will overwrite the
+ entire database file.
+<li>Increase the default <a href="malloc.html#lookaside">lookaside memory allocator</a> allocation size from
+ 100 to 128 bytes.
+<li>Enhanced the query planner so that it can factor terms in and out of
+ OR expressions in the WHERE clause in an effort to find better indices.
+<li>Added the <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> compile-time option, causing
+ <a href="fileformat2.html#ovflpgs">overflow pages</a> to be read directly from the database file,
+ bypassing the <a href="c3ref/pcache_methods2.html">page cache</a>.
+<li>Remove limits on the magnitude of precision and width value in the
+ format specifiers of the <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> family of string rendering
+ routines.
+<li>Fix a bug that prevent <a href="lang_altertable.html">ALTER TABLE ... RENAME</a> from working
+ on some virtual tables in a database with a UTF16 encoding.
+<li>Fix a bug in ASCII-to-float conversion that causes slow performance and
+ incorrect results when converting numbers with ridiculously large exponents.
+<li>Fix a bug that causes incorrect results in aggregate queries that use
+ multiple aggregate functions whose arguments contain complicated expressions
+ that differ only in the case of string literals contained within those
+ expressions.
+<li>Fix a bug that prevented the <a href="pragma.html#pragma_page_count">page_count</a> and <a href="pragma.html#pragma_quick_check">quick_check</a> pragmas from
+ working correctly if their names were capitalized.
+<li>Fix a bug that caused <a href="lang_vacuum.html">VACUUM</a> to fail if the <a href="pragma.html#pragma_count_changes">count_changes pragma</a> was
+ engaged.
+<li>Fix a bug in <a href="vtab.html">virtual table</a> implementation that causes a crash if
+ an <a href="fts3.html#fts4">FTS4</a> table is <a href="lang_droptable.html">dropped</a> inside a transaction and
+ a <a href="lang_savepoint.html">SAVEPOINT</a> occurs afterwards.
+<li>SQLITE_SOURCE_ID:
+ "2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e"
+<li>SHA1 for sqlite3.c: becd16877f4f9b281b91c97e106089497d71bb47
+
+</ol></p>
+<a name="version_3_7_8"></a>
+<h3>2011-09-19 (3.7.8)</h3><p><ol class='lessindent'>
+<li> Orders of magnitude performance improvement for <a href="lang_createindex.html">CREATE INDEX</a> on
+ very large tables.
+<li> Improved the windows VFS to better defend against interference
+ from anti-virus software.
+<li> Improved query plan optimization when the DISTINCT keyword is present.
+<li> Allow more system calls to be overridden in the unix VFS - to provide
+ better support for chromium sandboxes.
+<li> Increase the default size of a lookahead cache line from 100 to 128 bytes.
+<li> Enhancements to the test_quota.c module so that it can track
+ preexisting files.
+<li> Bug fix: Virtual tables now handle IS NOT NULL constraints correctly.
+<li> Bug fixes: Correctly handle nested correlated subqueries used with
+ indices in a WHERE clause.
+<li> SQLITE_SOURCE_ID:
+ "2011-09-19 14:49:19 3e0da808d2f5b4d12046e05980ca04578f581177"
+<li> SHA1 for sqlite3.c: bfcd74a655636b592c5dba6d0d5729c0f8e3b4de
+
+</ol></p>
+<a name="version_3_7_7_1"></a>
+<h3>2011-06-28 (3.7.7.1)</h3><p><ol class='lessindent'>
+<li> Fix <a href="http://www.sqlite.org/src/info/25ee812710">a bug</a> causing
+ <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statements compiled using sqlite3_prepare()
+ to fail with an <a href="rescode.html#schema">SQLITE_SCHEMA</a> error.
+<li> SQLITE_SOURCE_ID:
+ "2011-06-28 17:39:05 af0d91adf497f5f36ec3813f04235a6e195a605f"
+<li> SHA1 for sqlite3.c: d47594b8a02f6cf58e91fb673e96cb1b397aace0
+
+</ol></p>
+<a name="version_3_7_7"></a>
+<h3>2011-06-23 (3.7.7)</h3><p><ol class='lessindent'>
+<li> Add support for <a href="uri.html">URI filenames</a>
+<li> Add the <a href="c3ref/vtab_config.html">sqlite3_vtab_config()</a> interface in
+ support of <a href="lang_conflict.html">ON CONFLICT</a> clauses with <a href="vtab.html">virtual tables</a>.
+<li> Add the <a href="vtab.html#xsavepoint">xSavepoint</a>, <a href="vtab.html#xsavepoint">xRelease</a> and <a href="vtab.html#xsavepoint">xRollbackTo</a> methods in
+ <a href="vtab.html">virtual tables</a> in support of <a href="lang_savepoint.html">SAVEPOINT</a> for virtual tables.
+<li> Update the built-in <a href="fts3.html">FTS3/FTS4</a> and <a href="rtree.html">RTREE</a> virtual tables to support
+ <a href="lang_conflict.html">ON CONFLICT</a> clauses and <a href="lang_replace.html">REPLACE</a>.
+<li> Avoid unnecessary reparsing of the database schema.
+<li> Added support for the <a href="fts3.html#fts4prefix">FTS4 prefix option</a> and the <a href="fts3.html#fts4order">FTS4 order option</a>.
+<li> Allow <a href="wal.html">WAL-mode</a> databases to be opened read-only as long as
+ there is an existing read/write connection.
+<li> Added support for <a href="shortnames.html">short filenames</a>.
+<li> SQLITE_SOURCE_ID:
+ "2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2"
+<li> SHA1 for sqlite3.c: 5bbe79e206ae5ffeeca760dbd0d66862228db551
+
+</ol></p>
+<a name="version_3_7_6_3"></a>
+<h3>2011-05-19 (3.7.6.3)</h3><p><ol class='lessindent'>
+<li> Fix a problem with <a href="wal.html">WAL mode</a> which could cause transactions to
+ silently rollback if the <a href="pragma.html#pragma_cache_size">cache_size</a> is set very small (less than 10)
+ and SQLite comes under memory pressure.
+
+</ol></p>
+<a name="version_3_7_6_2"></a>
+<h3>2011-04-17 (3.7.6.2)</h3><p><ol class='lessindent'>
+<li> Fix the function prototype for the open(2) system call to agree with
+ POSIX. Without this fix, pthreads does not work correctly on NetBSD.
+<li> SQLITE_SOURCE_ID:
+ "2011-04-17 17:25:17 154ddbc17120be2915eb03edc52af1225eb7cb5e"
+<li> SHA1 for sqlite3.c: 806577fd524dd5f3bfd8d4d27392ed2752bc9701
+
+
+</ol></p>
+<a name="version_3_7_6_1"></a>
+<h3>2011-04-13 (3.7.6.1)</h3><p><ol class='lessindent'>
+<li> Fix a bug in 3.7.6 that only appears if the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a>
+ file control is used with a build of SQLite that makes use of the
+ HAVE_POSIX_FALLOCATE compile-time option and which has
+ SQLITE_ENABLE_LOCKING_MODE turned off.
+<li> SQLITE_SOURCE_ID:
+ "2011-04-13 14:40:25 a35e83eac7b185f4d363d7fa51677f2fdfa27695"
+<li> SHA1 for sqlite3.c: b81bfa27d3e09caf3251475863b1ce6dd9f6ab66
+
+</ol></p>
+<a name="version_3_7_6"></a>
+<h3>2011-04-12 (3.7.6)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface and enhanced the
+ <a href="pragma.html#pragma_wal_checkpoint">wal_checkpoint pragma</a> to support blocking checkpoints.
+<li> Improvements to the query planner so that it makes better estimates of
+ plan costs and hence does a better job of choosing the right plan,
+ especially when <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> is used.
+<li> Fix a bug which prevented deferred foreign key constraints from being
+ enforced when <a href="c3ref/finalize.html">sqlite3_finalize()</a> was not
+ called by one statement with a failed foreign key constraint prior to
+ another statement with foreign key constraints running.
+<li> Integer arithmetic operations that would have resulted in overflow
+ are now performed using floating-point instead.
+<li> Increased the version number on the <a href="c3ref/vfs.html">VFS object</a> to
+ 3 and added new methods xSetSysCall, xGetSysCall, and xNextSysCall
+ used for doing full-coverage testing.
+<li> Increase the maximum value of <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> from 30 to 62
+ (though the default value remains at 10).
+<li> Enhancements to FTS4:
+ <ol type="a">
+ <li> Added the <a href="fts3.html#fts4aux">fts4aux</a> table
+ <li> Added support for <a href="fts3.html#*fts4compression">compressed FTS4 content</a>
+ </ol>
+<li> Enhance the <a href="lang_analyze.html">ANALYZE</a> command to support the name of an index
+ as its argument, in order to analyze just that one index.
+<li> Added the "unix-excl" built-in VFS on unix and unix-like platforms.
+<li> SQLITE_SOURCE_ID:
+ "2011-04-12 01:58:40 f9d43fa363d54beab6f45db005abac0a7c0c47a7"
+<li> SHA1 for sqlite3.c: f38df08547efae0ff4343da607b723f588bbd66b
+
+</ol></p>
+<a name="version_3_7_5"></a>
+<h3>2011-02-01 (3.7.5)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/mprintf.html">sqlite3_vsnprintf()</a> interface.
+<li> Added the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit">SQLITE_DBSTATUS_LOOKASIDE_HIT</a>,
+ <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize">SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</a>, and
+ <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull">SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</a> options for the
+ <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface.
+<li> Added the <a href="compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a> compile-time option.
+<li> Added the <a href="compile.html#default_foreign_keys">SQLITE_DEFAULT_FOREIGN_KEYS</a> compile-time option.
+<li> Updates to <a href="c3ref/stmt_readonly.html">sqlite3_stmt_readonly()</a> so that its result is well-defined
+ for all prepared statements and so that it works with <a href="lang_vacuum.html">VACUUM</a>.
+<li> Added the "-heap" option to the <a href="cli.html">command-line shell</a>
+<li> Fix <a href="http://www.sqlite.org/src/info/5d863f876e">a bug</a> involving
+ frequent changes in and out of WAL mode and
+ VACUUM that could (in theory) cause database corruption.
+<li> Enhance the <a href="c3ref/profile.html">sqlite3_trace()</a> mechanism so that nested SQL statements
+ such as might be generated by virtual tables are shown but are shown
+ in comments and without parameter expansion. This
+ greatly improves tracing output when using the FTS3/4 and/or RTREE
+ virtual tables.
+<li> Change the xFileControl() methods on all built-in VFSes to return
+ <a href="rescode.html#notfound">SQLITE_NOTFOUND</a> instead of <a href="rescode.html#error">SQLITE_ERROR</a> for an unrecognized
+ operation code.
+<li> The SQLite core invokes the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted">SQLITE_FCNTL_SYNC_OMITTED</a>
+ <a href="c3ref/file_control.html">file control</a>
+ to the VFS in place of a call to xSync if the database has
+ <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF.
+
+</ol></p>
+<a name="version_3_7_4"></a>
+<h3>2010-12-07 (3.7.4)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface to allow an existing
+ <a href="c3ref/blob.html">sqlite3_blob</a> object to be rebound to a new row.
+<li> Use the new <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface to improve the performance
+ of FTS.
+<li> <a href="c3ref/vfs.html">VFSes</a> that do not support shared memory are allowed
+ to access <a href="wal.html">WAL</a> databases if <a href="pragma.html#pragma_locking_mode">PRAGMA locking_mode</a> is set to EXCLUSIVE.
+<li> Enhancements to <a href="eqp.html">EXPLAIN QUERY PLAN</a>.
+<li> Added the <a href="c3ref/stmt_readonly.html">sqlite3_stmt_readonly()</a> interface.
+<li> Added <a href="pragma.html#pragma_checkpoint_fullfsync">PRAGMA checkpoint_fullfsync</a>.
+<li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a> option
+ to <a href="c3ref/file_control.html">sqlite3_file_control()</a>.
+<li> Added support for <a href="fts3.html#fts4">FTS4</a> and enhancements
+ to the FTS <a href="fts3.html#matchinfo">matchinfo()</a> function.
+<li> Added the test_superlock.c module which provides example
+ code for obtaining an exclusive lock to a rollback
+ or WAL database.
+<li> Added the test_multiplex.c module which provides
+ an example VFS that provides multiplexing (sharding)
+ of a DB, splitting it over multiple files of fixed size.
+<li> A <a href="http://www.sqlite.org/src/info/80ba201079">very obscure bug</a>
+ associated with the <a href="optoverview.html#or_opt">or optimization</a> was fixed.
+
+</ol></p>
+<a name="version_3_7_3"></a>
+<h3>2010-10-08 (3.7.3)</h3><p><ol class='lessindent'>
+<li> Added the <a href="c3ref/create_function.html">sqlite3_create_function_v2()</a> interface that includes a
+ destructor callback.
+<li> Added support for <a href="rtree.html#customquery">custom r-tree queries</a> using application-supplied
+ callback routines to define the boundary of the query region.
+<li> The default page cache strives more diligently to avoid using memory
+ beyond what is allocated to it by <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>. Or if
+ using page cache is allocating from the heap, it strives to avoid
+ going over the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a>, even if
+ <a href="compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a> is not set.
+<li> Added the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interface as a replacement for
+ <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>.
+<li> The <a href="lang_analyze.html">ANALYZE</a> command now gathers statistics on tables even if they
+ have no indices.
+<li> Tweaks to the query planner to help it do a better job of finding the
+ most efficient query plan for each query.
+<li> Enhanced the internal text-to-numeric conversion routines so that they
+ work with UTF8 or UTF16, thereby avoiding some UTF16-to-UTF8 text
+ conversions.
+<li> Fix a problem that was causing excess memory usage with large <a href="wal.html">WAL</a>
+ transactions in win32 systems.
+<li> The interface between the VDBE and B-Tree layer is enhanced such that
+ the VDBE provides hints to the B-Tree layer letting the B-Tree layer
+ know when it is safe to use hashing instead of B-Trees for transient
+ tables.
+<li> Miscellaneous documentation enhancements.
+
+</ol></p>
+<a name="version_3_7_2"></a>
+<h3>2010-08-24 (3.7.2)</h3><p><ol class='lessindent'>
+<li> Fix an <a href="http://www.sqlite.org/src/info/5e10420e8d">
+ old and very obscure bug</a> that can lead to corruption of the
+ database <a href="fileformat2.html#freelist">free-page list</a> when <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> is used.
+
+</ol></p>
+<a name="version_3_7_1"></a>
+<h3>2010-08-23 (3.7.1)</h3><p><ol class='lessindent'>
+<li> Added new commands <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused">SQLITE_DBSTATUS_SCHEMA_USED</a> and
+ <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused">SQLITE_DBSTATUS_STMT_USED</a> to the <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface, in
+ order to report out the amount of memory used to hold the schema and
+ prepared statements of a connection.
+<li> Increase the maximum size of a database pages from 32KiB to 64KiB.
+<li> Use the <a href="optoverview.html#like_opt">LIKE optimization</a> even if the right-hand side string contains
+ no wildcards.
+<li> Added the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">SQLITE_FCNTL_CHUNK_SIZE</a> verb to the <a href="c3ref/file_control.html">sqlite3_file_control()</a>
+ interface for both unix and windows, to cause database files to grow in
+ large chunks in order to reduce disk fragmentation.
+<li> Fixed a bug in the query planner that caused performance regressions
+ relative to 3.6.23.1 on some complex joins.
+<li> Fixed a typo in the OS/2 backend.
+<li> Refactored the pager module.
+<li> The SQLITE_MAX_PAGE_SIZE compile-time option is now silently ignored.
+ The maximum page size is hard-coded at 65536 bytes.
+
+</ol></p>
+<a name="version_3_7_0_1"></a>
+<h3>2010-08-04 (3.7.0.1)</h3><p><ol class='lessindent'>
+<li> Fix a potential database corruption bug that can occur if version 3.7.0
+ and version 3.6.23.1 alternately write to the same database file.
+ <a href="http://www.sqlite.org/src/info/51ae9cad317a1">
+ Ticket &#91;51ae9cad317a1&#93;</a>
+<li> Fix a performance regression related to the query planner enhancements
+ of version 3.7.0.
+
+</ol></p>
+<a name="version_3_7_0"></a>
+<h3>2010-07-21 (3.7.0)</h3><p><ol class='lessindent'>
+<li> Added support for <a href="wal.html">write-ahead logging</a>.
+<li> Query planner enhancement - automatic transient indices are created
+ when doing so reduces the estimated query time.
+<li> Query planner enhancement - the ORDER BY becomes a no-op if the query
+ also contains a GROUP BY clause that forces the correct output order.
+<li> Add the <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused">SQLITE_DBSTATUS_CACHE_USED</a> verb for <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
+<li> The logical database size is now stored in the database header so that
+ bytes can be appended to the end of the database file without corrupting
+ it and so that SQLite will work correctly on systems that lack support
+ for ftruncate().
+
+</ol></p>
+<a name="version_3_6_23_1"></a>
+<h3>2010-03-26 (3.6.23.1)</h3><p><ol class='lessindent'>
+<li> Fix a bug in the offsets() function of <a href="fts3.html">FTS3</a>
+<li> Fix a missing "sync" that when omitted could lead to database
+ corruption if a power failure or OS crash occurred just as a
+ ROLLBACK operation was finishing.
+
+</ol></p>
+<a name="version_3_6_23"></a>
+<h3>2010-03-09 (3.6.23)</h3><p><ol class='lessindent'>
+<li> Added the <a href="pragma.html#pragma_secure_delete">secure_delete pragma</a>.
+<li> Added the <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> and
+ <a href="c3ref/compileoption_get.html">sqlite3_compileoption_get()</a> interfaces as well as the
+ <a href="pragma.html#pragma_compile_options">compile_options pragma</a> and the <a href="lang_corefunc.html#sqlite_compileoption_used">sqlite_compileoption_used()</a> and
+ <a href="lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a> SQL functions.
+<li> Added the <a href="c3ref/log.html">sqlite3_log()</a> interface together with the
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> verb to <a href="c3ref/config.html">sqlite3_config()</a>. The ".log" command
+ is added to the <a href="cli.html">Command Line Interface</a>.
+<li> Improvements to <a href="fts3.html">FTS3</a>.
+<li> Improvements and bug-fixes in support for <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a>.
+<li> The <a href="pragma.html#pragma_integrity_check">integrity_check pragma</a> is enhanced to detect out-of-order rowids.
+<li> The ".genfkey" operator has been removed from the
+ <a href="cli.html">Command Line Interface</a>.
+<li> Updates to the co-hosted <a href="lemon.html">Lemon LALR(1) parser generator</a>. (These
+ updates did not affect SQLite.)
+<li> Various minor bug fixes and performance enhancements.
+
+</ol></p>
+<a name="version_3_6_22"></a>
+<h3>2010-01-06 (3.6.22)</h3><p><ol class='lessindent'>
+<li>Fix bugs that can (rarely) lead to incorrect query results when
+ the CAST or OR operators are used in the WHERE clause of a query.
+<li>Continuing enhancements and improvements to <a href="fts3.html">FTS3</a>.
+<li>Other miscellaneous bug fixes.
+
+</ol></p>
+<a name="version_3_6_21"></a>
+<h3>2009-12-07 (3.6.21)</h3><p><ol class='lessindent'>
+<li>The SQL output resulting from <a href="c3ref/profile.html">sqlite3_trace()</a> is now modified to include
+the values of <a href="lang_expr.html#varparam">bound parameters</a>.
+<li>Performance optimizations targeting a specific use case from
+a single high-profile user of SQLite. A 12% reduction in the number of
+CPU operations is achieved (as measured by Valgrind). Actual performance
+improvements in practice may vary depending on workload. Changes
+include:
+<ol type='a'>
+ <li>The <a href="lang_corefunc.html#ifnull">ifnull()</a> and <a href="lang_corefunc.html#coalesce">coalesce()</a> SQL functions are now implemented
+ using in-line VDBE code rather than calling external functions, so that
+ unused arguments need never be evaluated.
+ <li>The <a href="lang_corefunc.html#substr">substr()</a> SQL function does not bother to measure the length
+ its entire input string if it is only computing a prefix
+ <li>Unnecessary OP_IsNull, OP_Affinity, and OP_MustBeInt VDBE opcodes
+ are suppressed
+ <li>Various code refactorizations for performance
+</ol>
+<li>The FTS3 extension has undergone a major rework and cleanup.
+New <a href="fts3.html">FTS3 documentation</a> is now available.
+<li>The <a href="compile.html#secure_delete">SQLITE_SECURE_DELETE</a> compile-time option fixed to make sure that
+content is deleted even when the <a href="lang_delete.html#truncateopt">truncate optimization</a> applies.
+<li>Improvements to "dot-command" handling in the
+<a href="cli.html">Command Line Interface</a>.
+<li>Other minor bug fixes and documentation enhancements.
+
+</ol></p>
+<a name="version_3_6_20"></a>
+<h3>2009-11-04 (3.6.20)</h3><p><ol class='lessindent'>
+<li>Optimizer enhancement: <a href="c3ref/stmt.html">prepared statements</a> are automatically
+re-compiled when a binding on the RHS of a LIKE operator changes or
+when any range constraint changes under <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a>.
+<li>Various minor bug fixes and documentation enhancements.
+
+</ol></p>
+<a name="version_3_6_16_1"></a>
+<h3>2009-10-30 (3.6.16.1)</h3><p><ol class='lessindent'>
+<li>A small patch to version 3.6.16 to fix
+<a href="http://www.sqlite.org/src/info/6b00e0a34c">the OP_If bug</a>.
+
+</ol></p>
+<a name="version_3_6_19"></a>
+<h3>2009-10-14 (3.6.19)</h3><p><ol class='lessindent'>
+<li>Added support for <a href="foreignkeys.html">foreign key constraints</a>. Foreign key constraints
+ are disabled by default. Use the <a href="pragma.html#pragma_foreign_keys">foreign_keys pragma</a> to turn them on.
+<li>Generalized the IS and IS NOT operators to take arbitrary expressions
+ on their right-hand side.
+<li>The <a href="tclsqlite.html">TCL Interface</a> has been enhanced to use the
+ <a href="http://www.tcl-lang.org/cgi-bin/tct/tip/322.html">Non-Recursive Engine (NRE)</a>
+ interface to the TCL interpreter when linked against TCL 8.6 or later.
+<li>Fix a bug introduced in 3.6.18 that can lead to a segfault when an
+ attempt is made to write on a read-only database.
+
+</ol></p>
+<a name="version_3_6_18"></a>
+<h3>2009-09-11 (3.6.18)</h3><p><ol class='lessindent'>
+<li>Versioning of the SQLite source code has transitioned from CVS to
+ <a href="http://www.fossil-scm.org/">Fossil</a>.
+<li>Query planner enhancements.
+<li>The <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> compile-time option causes the <a href="lang_analyze.html">ANALYZE</a>
+ command to collect a small histogram of each index, to help SQLite better
+ select among competing range query indices.
+<li>Recursive triggers can be enabled using the <a href="pragma.html#pragma_recursive_triggers">PRAGMA recursive_triggers</a>
+ statement.
+<li>Delete triggers fire when rows are removed due to a
+ <a href="lang_conflict.html">REPLACE conflict resolution</a>. This feature is only
+ enabled when recursive triggers are enabled.
+<li>Added the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a> and <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_PRIVATECACHE</a>
+ flags for <a href="c3ref/open.html">sqlite3_open_v2()</a> used to override the global
+ <a href="sharedcache.html">shared cache mode</a> settings for individual database connections.
+<li>Added improved version identification features:
+ C-Preprocessor macro <a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a>,
+ C/C++ interface <a href="c3ref/libversion.html">sqlite3_sourceid()</a>, and SQL function <a href="lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a>.
+<li>Obscure bug fix on triggers
+(<a href="http://www.sqlite.org/src/info/efc02f9779">&#91;efc02f9779&#93;</a>).
+
+</ol></p>
+<a name="version_3_6_17"></a>
+<h3>2009-08-10 (3.6.17)</h3><p><ol class='lessindent'>
+<li>Expose the <a href="c3ref/stricmp.html">sqlite3_strnicmp()</a> interface for use by extensions and
+ applications.
+<li>Remove the restriction on <a href="vtab.html">virtual tables</a> and <a href="sharedcache.html">shared cache mode</a>.
+ Virtual tables and shared cache can now be used at the same time.
+<li>Many code simplifications and obscure bug fixes in support of
+ providing <a href="testing.html#coverage">100% branch test coverage</a>.
+
+</ol></p>
+<a name="version_3_6_16"></a>
+<h3>2009-06-27 (3.6.16)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket #3929) that occasionally causes INSERT or UPDATE
+ operations to fail on an indexed table that has a self-modifying trigger.
+<li>Other minor bug fixes and performance optimizations.
+
+</ol></p>
+<a name="version_3_6_15"></a>
+<h3>2009-06-15 (3.6.15)</h3><p><ol class='lessindent'>
+<li>Refactor the internal representation of SQL expressions so that they
+ use less memory on embedded platforms.
+<li>Reduce the amount of stack space used
+<li>Fix an 64-bit alignment bug on HP/UX and Sparc
+<li>The <a href="c3ref/create_function.html">sqlite3_create_function()</a> family of interfaces now return
+ <a href="rescode.html#misuse">SQLITE_MISUSE</a> instead of <a href="rescode.html#error">SQLITE_ERROR</a> when passed invalid
+ parameter combinations.
+<li>When new tables are created using CREATE TABLE ... AS SELECT ... the
+ datatype of the columns is the simplified SQLite datatype (TEXT, INT,
+ REAL, NUMERIC, or BLOB) instead of a copy of the original datatype from
+ the source table.
+<li>Resolve race conditions when checking for a hot rollback journal.
+<li>The <a href="c3ref/initialize.html">sqlite3_shutdown()</a> interface frees all mutexes under windows.
+<li>Enhanced robustness against corrupt database files
+<li>Continuing improvements to the test suite and fixes to obscure
+ bugs and inconsistencies that the test suite improvements are
+ uncovering.
+
+
+</ol></p>
+<a name="version_3_6_14_2"></a>
+<h3>2009-05-25 (3.6.14.2)</h3><p><ol class='lessindent'>
+<li>Fix a code generator bug introduced in <a href="#version_3_6_14">version 3.6.14</a>. This bug
+ can cause incorrect query results under obscure circumstances.
+ Ticket #3879.
+
+</ol></p>
+<a name="version_3_6_14_1"></a>
+<h3>2009-05-19 (3.6.14.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in <a href="lang_aggfunc.html#group_concat">group_concat()</a>, ticket #3841
+<li>Fix a performance bug in the pager cache, ticket #3844
+<li>Fix a bug in the <a href="c3ref/backup.html">sqlite3_backup</a> implementation that can lead
+ to a corrupt backup database. Ticket #3858.
+
+</ol></p>
+<a name="version_3_6_14"></a>
+<h3>2009-05-07 (3.6.14)</h3><p><ol class='lessindent'>
+<li>Added the optional <a href="asyncvfs.html">asynchronous VFS</a> module.</li>
+<li>Enhanced the query optimizer so that <a href="vtab.html">virtual tables</a> are able to
+ make use of OR and IN operators in the WHERE clause.</li>
+<li>Speed improvements in the btree and pager layers.</li>
+<li>Added the <a href="compile.html#have_isnan">SQLITE_HAVE_ISNAN</a> compile-time option which will cause
+ the isnan() function from the standard math library to be used instead
+ of SQLite's own home-brew NaN checker.</li>
+<li>Countless minor bug fixes, documentation improvements, new and
+ improved test cases, and code simplifications and cleanups.</p>
+
+</ol></p>
+<a name="version_3_6_13"></a>
+<h3>2009-04-13 (3.6.13)</h3><p><ol class='lessindent'>
+<li>Fix a bug in <a href="#version_3_6_12">version 3.6.12</a> that causes a segfault when running
+ a count(*) on the sqlite_master table of an empty database. Ticket #3774.
+<li>Fix a bug in <a href="#version_3_6_12">version 3.6.12</a> that causes a segfault that when
+ inserting into a table using a DEFAULT value where there is a
+ function as part of the DEFAULT value expression. Ticket #3791.
+<li>Fix data structure alignment issues on Sparc. Ticket #3777.
+<li>Other minor bug fixes.
+
+</ol></p>
+<a name="version_3_6_12"></a>
+<h3>2009-03-31 (3.6.12)</h3><p><ol class='lessindent'>
+<li>Fixed a bug that caused database corruption when an <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> is
+ rolled back in an in-memory database. Ticket #3761.
+<li>Added the <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> interface.
+<li>Added the <a href="pragma.html#pragma_reverse_unordered_selects">reverse_unordered_selects pragma</a>.
+<li>The default page size on windows is automatically adjusted to match the
+ capabilities of the underlying filesystem.
+<li>Add the new ".genfkey" command in the <a href="cli.html">CLI</a> for generating triggers to
+ implement foreign key constraints.
+<li>Performance improvements for "count(*)" queries.
+<li>Reduce the amount of heap memory used, especially by TRIGGERs.
+<li>
+
+</ol></p>
+<a name="version_3_6_11"></a>
+<h3>2009-02-18 (3.6.11)</h3><p><ol class='lessindent'>
+<li>Added the <a href="c3ref/backup_finish.html#sqlite3backupinit">hot-backup interface</a>.
+<li>Added new commands ".backup" and ".restore" to the <a href="cli.html">CLI</a>.
+<li>Added new methods <a href="tclsqlite.html#backup">backup</a> and
+ <a href="tclsqlite.html#restore">restore</a> to the TCL interface.
+<li>Improvements to the <a href="syntaxdiagrams.html">syntax bubble
+ diagrams</a>
+<li>Various minor bug fixes
+
+</ol></p>
+<a name="version_3_6_10"></a>
+<h3>2009-01-15 (3.6.10)</h3><p><ol class='lessindent'>
+<li>Fix a cache coherency problem that could lead to database corruption.
+ Ticket #3584.
+
+</ol></p>
+<a name="version_3_6_9"></a>
+<h3>2009-01-14 (3.6.9)</h3><p><ol class='lessindent'>
+<li>Fix two bugs, which when combined might result in incorrect
+ query results. Both bugs were harmless by themselves; only when
+ they team up do they cause problems. Ticket #3581.
+
+</ol></p>
+<a name="version_3_6_8"></a>
+<h3>2009-01-12 (3.6.8)</h3><p><ol class='lessindent'>
+<li>Added support for <a href="lang_savepoint.html">nested transactions</a></li>
+<li>Enhanced the query optimizer so that it is able to use
+ multiple indices to efficiently process
+ <a href="optoverview.html#or_opt">OR-connected constraints</a>
+ in a WHERE clause.</li>
+<li>Added support for parentheses in FTS3 query patterns using the
+ <a href="compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.</li>
+
+</ol></p>
+<a name="version_3_6_7"></a>
+<h3>2008-12-16 (3.6.7)</h3><p><ol class='lessindent'>
+<li>Reorganize the Unix interface in os_unix.c</li>
+<li>Added support for "Proxy Locking" on Mac OS X.</li>
+<li>Changed the prototype of the <a href="c3ref/auto_extension.html">sqlite3_auto_extension()</a> interface in a
+ way that is backwards compatible but which might cause warnings in new
+ builds of applications that use that interface.</li>
+<li>Changed the signature of the xDlSym method of the <a href="c3ref/vfs.html">sqlite3_vfs</a> object
+ in a way that is backwards compatible but which might cause
+ compiler warnings.</li>
+<li>Added superfluous casts and variable initializations in order
+ to suppress nuisance compiler warnings.</li>
+<li>Fixes for various minor bugs.</li>
+
+</ol></p>
+<a name="version_3_6_6_2"></a>
+<h3>2008-11-26 (3.6.6.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the b-tree delete algorithm that seems like it might be
+ able to cause database corruption. The bug was first introduced in
+ <a href="#version_3_6_6">version 3.6.6</a> by check-in &#91;5899&#93; on 2008-11-13.</li>
+<li>Fix a memory leak that can occur following a disk I/O error.</li>
+
+</ol></p>
+<a name="version_3_6_6_1"></a>
+<h3>2008-11-22 (3.6.6.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the page cache that can lead database corruption following
+ a rollback. This bug was first introduced in <a href="#version_3_6_4">version 3.6.4</a>.</li>
+<li>Two other very minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_6_6"></a>
+<h3>2008-11-19 (3.6.6)</h3><p><ol class='lessindent'>
+<li>Fix a #define that prevented <a href="malloc.html#memsys5">memsys5</a> from compiling</li>
+<li>Fix a problem in the virtual table commit mechanism that was causing
+ a crash in FTS3. Ticket #3497.</li>
+<li>Add the <a href="c3ref/pcache_methods2.html">application-defined page cache</a></li>
+<li>Added built-in support for VxWorks</li>
+
+</ol></p>
+<a name="version_3_6_5"></a>
+<h3>2008-11-12 (3.6.5)</h3><p><ol class='lessindent'>
+<li>Add the MEMORY option to the <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>.</li>
+<li>Added the <a href="c3ref/db_mutex.html">sqlite3_db_mutex()</a> interface.</li>
+<li>Added the <a href="compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time option.</li>
+<li>Fixed the <a href="lang_delete.html#truncateopt">truncate optimization</a> so that <a href="c3ref/changes.html">sqlite3_changes()</a> and
+ <a href="c3ref/total_changes.html">sqlite3_total_changes()</a> interfaces and the <a href="pragma.html#pragma_count_changes">count_changes pragma</a>
+ return the correct values.</li>
+<li>Added the <a href="c3ref/errcode.html">sqlite3_extended_errcode()</a> interface.</li>
+<li>The <a href="lang_transaction.html">COMMIT</a> command now succeeds even if there are pending queries.
+ It returns <a href="rescode.html#busy">SQLITE_BUSY</a> if there are pending incremental BLOB I/O requests.
+<li>The error code is changed to <a href="rescode.html#busy">SQLITE_BUSY</a> (instead of <a href="rescode.html#error">SQLITE_ERROR</a>)
+ when an attempt is made to <a href="lang_transaction.html">ROLLBACK</a> while one or more queries are
+ still pending.</li>
+<li>Drop all support for the <a href="malloc.html#memsysx">experimental memory allocators</a> memsys4 and
+ memsys6.</li>
+<li>Added the <a href="compile.html#zero_malloc">SQLITE_ZERO_MALLOC</a> compile-time option.</li>
+
+</ol></p>
+<a name="version_3_6_4"></a>
+<h3>2008-10-15 (3.6.4)</h3><p><ol class='lessindent'>
+<li>Add option support for LIMIT and ORDER BY clauses on <a href="lang_delete.html">DELETE</a> and
+ <a href="lang_update.html">UPDATE</a> statements. Only works if SQLite is compiled with
+ <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a>.
+<li>Added the <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface for performance monitoring.</li>
+<li>Add the <a href="lang_indexedby.html">INDEXED BY</a> clause.</li>
+<li>The LOCKING_STYLE extension is now enabled by default on Mac OS X</li>
+<li>Added the TRUNCATE option to <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode</a></li>
+<li>Performance enhancements to tree balancing logic in the B-Tree layer.</li>
+<li>Added the
+ <a href="http://www.sqlite.org/src/finfo?name=tool/genfkey.c">
+ source code</a> and
+ <a href="http://www.sqlite.org/src/finfo?name=tool/genfkey.README">
+ documentation</a> for the <b>genfkey</b> program for automatically generating
+ triggers to enforce foreign key constraints.</li>
+<li>Added the <a href="compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time option.</li>
+<li>The <a href="lang.html">SQL language documentation</a> is converted to use
+<a href="syntaxdiagrams.html">syntax diagrams</a> instead of BNF.</li>
+<li>Other minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_6_3"></a>
+<h3>2008-09-22 (3.6.3)</h3><p><ol class='lessindent'>
+<li>Fix for a bug in the SELECT DISTINCT logic that was introduced by the
+ prior version.</li>
+<li>Other minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_6_2"></a>
+<h3>2008-08-30 (3.6.2)</h3><p><ol class='lessindent'>
+<li>Split the pager subsystem into separate pager and pcache subsystems.</li>
+<li>Factor out identifier resolution procedures into separate files.</li>
+<li>Bug fixes</li>
+
+</ol></p>
+<a name="version_3_6_1"></a>
+<h3>2008-08-06 (3.6.1)</h3><p><ol class='lessindent'>
+<li>Added the <a href="malloc.html#lookaside">lookaside memory allocator</a> for a speed improvement in excess
+ of 15% on some workloads. (Your mileage may vary.)</li>
+<li>Added the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a> verb to <a href="c3ref/config.html">sqlite3_config()</a> to control
+ the default lookaside configuration.</li>
+<li>Added verbs <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">SQLITE_STATUS_PAGECACHE_SIZE</a> and
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchsize">SQLITE_STATUS_SCRATCH_SIZE</a> to the <a href="c3ref/status.html">sqlite3_status()</a> interface.
+<li>Modified <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a> and <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigscratch">SQLITE_CONFIG_SCRATCH</a> to remove
+ the "+4" magic number in the buffer size computation.
+<li>Added the <a href="c3ref/db_config.html">sqlite3_db_config()</a> and <a href="c3ref/db_status.html">sqlite3_db_status()</a> interfaces for
+ controlling and monitoring the lookaside allocator separately on each
+ <a href="c3ref/sqlite3.html">database connection</a>.</li>
+<li>Numerous other performance enhancements</li>
+<li>Miscellaneous minor bug fixes</li>
+
+</ol></p>
+<h3>2008-07-16 (3.6.0 beta)</h3><p><ol class='lessindent'>
+<li>Modifications to the <a href="c3ref/vfs.html">virtual file system</a> interface
+ to support a wider range of embedded systems.
+ See <a href="35to36.html">35to36.html</a> for additional information.
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>All C-preprocessor macros used to control compile-time options
+ now begin with the prefix "SQLITE_". This may require changes to
+ applications that compile SQLite using their own makefiles and with
+ custom compile-time options, hence we mark this as a
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>The SQLITE_MUTEX_APPDEF compile-time option is no longer supported.
+ Alternative mutex implementations can now be added at run-time using
+ the <a href="c3ref/config.html">sqlite3_config()</a> interface with the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> verb.
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>The handling of IN and NOT IN operators that contain a NULL on their
+ right-hand side expression is brought into compliance with the SQL
+ standard and with other SQL database engines. This is a bug fix,
+ but as it has the potential to break legacy applications that depend
+ on the older buggy behavior, we mark that as a
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>The result column names generated for compound subqueries have been
+ simplified to show only the name of the column of the original table and
+ omit the table name. This makes SQLite operate more like other SQL
+ database engines.</li>
+<li>Added the <a href="c3ref/config.html">sqlite3_config()</a> interface for doing run-time configuration
+ of the entire SQLite library.</li>
+<li>Added the <a href="c3ref/status.html">sqlite3_status()</a> interface used for querying run-time status
+ information about the overall SQLite library and its subsystems.</li>
+<li>Added the <a href="c3ref/initialize.html">sqlite3_initialize()</a> and <a href="c3ref/initialize.html">sqlite3_shutdown()</a> interfaces.</li>
+<li>The <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a> option was added to <a href="c3ref/open.html">sqlite3_open_v2()</a>.</li>
+<li>Added the <a href="pragma.html#pragma_page_count">PRAGMA page_count</a> command.</li>
+<li>Added the <a href="c3ref/next_stmt.html">sqlite3_next_stmt()</a> interface.</li>
+<li>Added a new <a href="rtree.html">R*Tree virtual table</a></li>
+
+</ol></p>
+<a name="version_3_5_9"></a>
+<h3>2008-05-14 (3.5.9)</h3><p><ol class='lessindent'>
+<li>Added <em>experimental</em>
+ support for the <a href="pragma.html#pragma_journal_mode">journal_mode</a> PRAGMA and persistent journal.</li>
+<li><a href="pragma.html#pragma_journal_mode">Journal mode PERSIST</a> is the default behavior in
+ <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a>.</li>
+<li>Fix a performance regression on LEFT JOIN (see ticket #3015)
+ that was mistakenly introduced in <a href="#version_3_5_8">version 3.5.8</a>.</li>
+<li>Performance enhancement: Reengineer the internal routines used
+ to interpret and render variable-length integers.</li>
+<li>Fix a buffer-overrun problem in <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> which occurs
+ when a string without a zero-terminator is passed to "%.*s".</li>
+<li>Always convert IEEE floating point NaN values into NULL during
+ processing. (Ticket #3060)</li>
+<li>Make sure that when a connection blocks on a RESERVED lock that
+ it is able to continue after the lock is released. (Ticket #3093)</li>
+<li>The "configure" scripts should now automatically configure Unix
+ systems for large file support. Improved error messages for
+ when large files are encountered and large file support is disabled.</li>
+<li>Avoid cache pages leaks following disk-full or I/O errors</li>
+<li>And, many more minor bug fixes and performance enhancements....</li>
+
+</ol></p>
+<a name="version_3_5_8"></a>
+<h3>2008-04-16 (3.5.8)</h3><p><ol class='lessindent'>
+<li>Expose SQLite's internal pseudo-random number generator (PRNG)
+ via the <a href="c3ref/randomness.html">sqlite3_randomness()</a> interface</li>
+<li>New interface <a href="c3ref/context_db_handle.html">sqlite3_context_db_handle()</a> that returns the
+ <a href="c3ref/sqlite3.html">database connection</a> handle that has invoked an application-defined
+ SQL function.</li>
+<li>New interface <a href="c3ref/limit.html">sqlite3_limit()</a> allows size and length limits to be
+ set on a per-connection basis and at run-time.</li>
+<li>Improved crash-robustness: write the database page size into the rollback
+ journal header.</li>
+<li>Allow the <a href="lang_vacuum.html">VACUUM</a> command to change the page size of a database file.</li>
+<li>The xAccess() method of the VFS is allowed to return -1 to signal
+ a memory allocation error.</li>
+<li>Performance improvement: The OP_IdxDelete opcode uses unpacked records,
+ obviating the need for one OP_MakeRecord opcode call for each index
+ record deleted.</li>
+<li>Performance improvement: Constant subexpressions are factored out of
+ loops.</li>
+<li>Performance improvement: Results of OP_Column are reused rather than
+ issuing multiple OP_Column opcodes.</li>
+<li>Fix a bug in the RTRIM collating sequence.</li>
+<li>Fix a bug in the SQLITE_SECURE_DELETE option that was causing
+ Firefox crashes. Make arrangements to always test SQLITE_SECURE_DELETE
+ prior to each release.</li>
+<li>Other miscellaneous performance enhancements.</li>
+<li>Other miscellaneous minor bug fixes.</li>
+
+</ol></p>
+<a name="version_3_5_7"></a>
+<h3>2008-03-17 (3.5.7)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket #2927) in the register allocation for
+compound selects - introduced by the new VM code in version 3.5.5.</li>
+<li>ALTER TABLE uses double-quotes instead of single-quotes for quoting
+filenames.</li>
+<li>Use the WHERE clause to reduce the size of a materialized VIEW in
+an UPDATE or DELETE statement. (Optimization)</li>
+<li>Do not apply the flattening optimization if the outer query is an
+aggregate and the inner query contains ORDER BY. (Ticket #2943)</li>
+<li>Additional OS/2 updates</li>
+<li>Added an experimental power-of-two, first-fit memory allocator.</li>
+<li>Remove all instances of sprintf() from the code</li>
+<li>Accept "Z" as the zulu timezone at the end of date strings</li>
+<li>Fix a bug in the LIKE optimizer that occurs when the last character
+before the first wildcard is an upper-case "Z"</li>
+<li>Added the "bitvec" object for keeping track of which pages have
+been journalled. Improves speed and reduces memory consumption, especially
+for large database files.</li>
+<li>Get the SQLITE_ENABLE_LOCKING_STYLE macro working again on Mac OS X.</li>
+<li>Store the statement journal in the temporary file directory instead of
+collocated with the database file.</li>
+<li>Many improvements and cleanups to the configure script</li>
+
+</ol></p>
+<a name="version_3_5_6"></a>
+<h3>2008-02-06 (3.5.6)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket #2913)
+that prevented virtual tables from working in a LEFT JOIN.
+The problem was introduced into shortly before the 3.5.5 release.</li>
+<li>Bring the OS/2 porting layer up-to-date.</li>
+<li>Add the new <a href="c3ref/result_blob.html">sqlite3_result_error_code()</a> API and use it in the
+implementation of <a href="lang_attach.html">ATTACH</a> so that proper error codes are returned
+when an <a href="lang_attach.html">ATTACH</a> fails.</li>
+
+</ol></p>
+<a name="version_3_5_5"></a>
+<h3>2008-01-31 (3.5.5)</h3><p><ol class='lessindent'>
+<li>Convert the underlying virtual machine to be a register-based machine
+rather than a stack-based machine. The only user-visible change
+is in the output of EXPLAIN.</li>
+<li>Add the build-in RTRIM collating sequence.</li>
+
+</ol></p>
+<a name="version_3_5_4"></a>
+<h3>2007-12-14 (3.5.4)</h3><p><ol class='lessindent'>
+<li>Fix a critical bug in UPDATE or DELETE that occurs when an
+OR REPLACE clause or a trigger causes rows in the same table to
+be deleted as side effects. (See ticket #2832.) The most likely
+result of this bug is a segmentation fault, though database
+corruption is a possibility.</li>
+<li>Bring the processing of ORDER BY into compliance with the
+SQL standard for case where a result alias and a table column name
+are in conflict. Correct behavior is to prefer the result alias.
+Older versions of SQLite incorrectly picked the table column.
+(See ticket #2822.)</li>
+<li>The <a href="lang_vacuum.html">VACUUM</a> command preserves
+the setting of the
+<a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a>.
+(Ticket #2804.)</li>
+<li>Productize and officially support the group_concat() SQL function.</li>
+<li>Better optimization of some IN operator expressions.</li>
+<li>Add the ability to change the
+<a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> status of a
+database by setting the auto_vaccum pragma and VACUUMing the database.</li>
+<li>Prefix search in FTS3 is much more efficient.</li>
+<li>Relax the SQL statement length restriction in the CLI so that
+the ".dump" output of databases with very large BLOBs and strings can
+be played back to recreate the database.</li>
+<li>Other small bug fixes and optimizations.</li>
+
+</ol></p>
+<a name="version_3_5_3"></a>
+<h3>2007-11-27 (3.5.3)</h3><p><ol class='lessindent'>
+<li>Move website and documentation files out of the source tree into
+a <a href="http://www.sqlite.org/docsrc/">separate CM system</a>.
+<li>Fix a long-standing bug in INSERT INTO ... SELECT ... statements
+where the SELECT is compound.
+<li>Fix a long-standing bug in RAISE(IGNORE) as used in BEFORE triggers.
+<li>Fixed the operator precedence for the ~ operator.
+<li>On Win32, do not return an error when attempting to delete a file
+that does not exist.
+<li>Allow collating sequence names to be quoted.
+<li>Modify the TCL interface to use <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>.
+<li>Fix multiple bugs that can occur following a malloc() failure.
+<li><a href="c3ref/step.html">sqlite3_step()</a> returns <a href="rescode.html#misuse">SQLITE_MISUSE</a> instead of crashing when
+called with a NULL parameter.
+<li>FTS3 now uses the SQLite memory allocator exclusively. The
+FTS3 amalgamation can now be appended to the SQLite amalgamation to
+generate a super-amalgamation containing both.
+<li>The DISTINCT keyword now will sometimes use an INDEX if an
+appropriate index is available and the optimizer thinks its use
+might be advantageous.
+
+</ol></p>
+<a name="version_3_5_2"></a>
+<h3>2007-11-05 (3.5.2)</h3><p><ol class='lessindent'>
+<li>Dropped support for the <a href="compile.html#omitfeatures">SQLITE_OMIT_MEMORY_ALLOCATION</a> compile-time
+option.
+<li>Always open files using FILE_FLAG_RANDOM_ACCESS under Windows.
+<li>The 3rd parameter of the built-in SUBSTR() function is now optional.
+<li>Bug fix: do not invoke the authorizer when reparsing the schema after
+a schema change.
+<li>Added the experimental malloc-free memory allocator in mem3.c.
+<li>Virtual machine stores 64-bit integer and floating point constants
+in binary instead of text for a performance boost.
+<li>Fix a race condition in test_async.c.
+<li>Added the ".timer" command to the CLI
+
+</ol></p>
+<a name="version_3_5_1"></a>
+<h3>2007-10-04 (3.5.1)</h3><p><ol class='lessindent'>
+<li><i><b>Nota Bene:</b> We are not using terms "alpha" or "beta" on this
+ release because the code is stable and because if we use those terms,
+ nobody will upgrade. However, we still reserve the right to make
+ incompatible changes to the new VFS interface in future releases.</i></li>
+
+<li>Fix a bug in the handling of <a href="rescode.html#full">SQLITE_FULL</a> errors that could lead
+ to database corruption. Ticket #2686.
+<li>The test_async.c drive now does full file locking and works correctly
+ when used simultaneously by multiple processes on the same database.
+<li>The CLI ignores whitespace (including comments) at the end of lines
+<li>Make sure the query optimizer checks dependencies on all terms of
+ a compound SELECT statement. Ticket #2640.
+<li>Add demonstration code showing how to build a VFS for a raw
+ mass storage without a filesystem.
+<li>Added an output buffer size parameter to the xGetTempname() method
+ of the VFS layer.
+<li>Sticky <a href="rescode.html#full">SQLITE_FULL</a> or <a href="rescode.html#ioerr">SQLITE_IOERR</a> errors in the pager are reset
+ when a new transaction is started.
+
+</ol></p>
+<a name="version_3_5_0"></a>
+<h3>2007-09-04 (3.5.0) alpha</h3><p><ol class='lessindent'>
+<li>Redesign the OS interface layer. See
+ <a href="34to35.html">34to35.html</a> for details.
+ <font color="red">*** Potentially incompatible change ***</font>
+<li>The <a href="c3ref/release_memory.html">sqlite3_release_memory()</a>, <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>,
+ and <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> interfaces now work cross all
+ threads in the process, not just the single thread in which they
+ are invoked.
+ <font color="red">*** Potentially incompatible change ***</font>
+<li>Added the <a href="c3ref/open.html">sqlite3_open_v2()</a> interface.
+<li>Reimplemented the memory allocation subsystem and made it
+ replaceable at compile-time.
+<li>Created a new mutex subsystem and made it replicable at
+ compile-time.
+<li>The same database connection may now be used simultaneously by
+ separate threads.
+
+</ol></p>
+<a name="version_3_4_2"></a>
+<h3>2007-08-13 (3.4.2)</h3><p><ol class='lessindent'>
+<li>Fix a database corruption bug that might occur if a ROLLBACK command
+is executed in <a href="pragma.html#pragma_auto_vacuum">auto-vacuum mode</a>
+and a very small <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a> is set.
+Ticket #2565.
+
+<li>Add the ability to run a full regression test with a small
+<a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a>.
+
+<li>Fix other minor problems with using small soft heap limits.
+
+<li>Work-around for
+<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32575">GCC bug 32575</a>.
+
+<li>Improved error detection of misused aggregate functions.
+
+<li>Improvements to the amalgamation generator script so that all symbols
+are prefixed with either SQLITE_PRIVATE or SQLITE_API.
+
+</ol></p>
+<a name="version_3_4_1"></a>
+<h3>2007-07-20 (3.4.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in <a href="lang_vacuum.html">VACUUM</a> that can lead to
+ database corruptio if two
+ processes are connected to the database at the same time and one
+ VACUUMs then the other then modifies the database.</li>
+<li>The expression "+column" is now considered the same as "column"
+ when computing the collating sequence to use on the expression.</li>
+<li>In the <a href="tclsqlite.html">TCL language interface</a>,
+ "@variable" instead of "$variable" always binds as a blob.</li>
+<li>Added <a href="pragma.html#pragma_freelist_count">PRAGMA freelist_count</a>
+ for determining the current size of the freelist.</li>
+<li>The <a href="pragma.html#pragma_auto_vacuum">
+ PRAGMA auto_vacuum=incremental</a> setting is now persistent.</li>
+<li>Add FD_CLOEXEC to all open files under Unix.</li>
+<li>Fix a bug in the <a href="optoverview.html#minmax">
+ min()/max() optimization</a> when applied to
+ descending indices.</li>
+<li>Make sure the TCL language interface works correctly with 64-bit
+ integers on 64-bit machines.</li>
+<li>Allow the value -9223372036854775808 as an integer literal in SQL
+ statements.</li>
+<li>Add the capability of "hidden" columns in virtual tables.</li>
+<li>Use the macro SQLITE_PRIVATE (defaulting to "static") on all
+ internal functions in the amalgamation.</li>
+<li>Add pluggable tokenizers and <a href="http://www.icu-project.org/">ICU</a>
+ tokenization support to FTS2</li>
+<li>Other minor bug fixes and documentation enhancements</li>
+
+</ol></p>
+<a name="version_3_4_0"></a>
+<h3>2007-06-18 (3.4.0)</h3><p><ol class='lessindent'>
+<li>Fix a bug that can lead to database corruption if an <a href="rescode.html#busy">SQLITE_BUSY</a> error
+ occurs in the middle of an explicit transaction and that transaction
+ is later committed. Ticket #2409.
+<li>Fix a bug that can lead to database corruption if autovacuum mode is
+ on and a malloc() failure follows a CREATE TABLE or CREATE INDEX statement
+ which itself follows a cache overflow inside a transaction. See
+ ticket #2418.
+ </li>
+<li>Added explicit <a href="limits.html">upper bounds</a> on the sizes and
+ quantities of things SQLite can process. This change might cause
+ compatibility problems for
+ applications that use SQLite in the extreme, which is why the current
+ release is 3.4.0 instead of 3.3.18.</li>
+<li>Added support for <a href="c3ref/blob_open.html">Incremental BLOB I/O</a>.</li>
+<li>Added the <a href="c3ref/bind_blob.html">sqlite3_bind_zeroblob()</a> API</a>
+ and the <a href="lang_expr.html#zeroblob">zeroblob()</a> SQL function.</li>
+<li>Added support for <a href="pragma.html#pragma_incremental_vacuum">
+ Incremental Vacuum</a>.</li>
+<li>Added the SQLITE_MIXED_ENDIAN_64BIT_FLOAT compile-time option to support
+ ARM7 processors with goofy endianness.</li>
+<li>Removed all instances of sprintf() and strcpy() from the core library.</li>
+<li>Added support for
+ <a href="http://www.icu-project.org/">International Components for Unicode (ICU)</a>
+ to the full-text search extensions.
+<li>In the Windows OS driver, reacquire a SHARED lock if an attempt to
+ acquire an EXCLUSIVE lock fails. Ticket #2354</li>
+<li>Fix the REPLACE() function so that it returns NULL if the second argument
+ is an empty string. Ticket #2324.</li>
+<li>Document the hazards of type conversions in
+ <a href="c3ref/column_blob.html">sqlite3_column_blob()</a>
+ and related APIs. Fix unnecessary type conversions. Ticket #2321.</li>
+<li>Internationalization of the TRIM() function. Ticket #2323</li>
+<li>Use memmove() instead of memcpy() when moving between memory regions
+ that might overlap. Ticket #2334</li>
+<li>Fix an optimizer bug involving subqueries in a compound SELECT that has
+ both an ORDER BY and a LIMIT clause. Ticket #2339.</li>
+<li>Make sure the <a href="c3ref/mprintf.html">sqlite3_snprintf()</a>
+ interface does not zero-terminate the buffer if the buffer size is
+ less than 1. Ticket #2341</li>
+<li>Fix the built-in printf logic so that it prints "NaN" not "Inf" for
+ floating-point NaNs. Ticket #2345</li>
+<li>When converting BLOB to TEXT, use the text encoding of the main database.
+ Ticket #2349</li>
+<li>Keep the full precision of integers (if possible) when casting to
+ NUMERIC. Ticket #2364</li>
+<li>Fix a bug in the handling of UTF16 codepoint 0xE000</li>
+<li>Consider explicit collate clauses when matching WHERE constraints
+ to indices in the query optimizer. Ticket #2391</li>
+<li>Fix the query optimizer to correctly handle constant expressions in
+ the ON clause of a LEFT JOIN. Ticket #2403</li>
+<li>Fix the query optimizer to handle rowid comparisons to NULL
+ correctly. Ticket #2404</li>
+<li>Fix many potential segfaults that could be caused by malicious SQL
+ statements.</li>
+
+</ol></p>
+<a name="version_3_3_17"></a>
+<h3>2007-04-25 (3.3.17)</h3><p><ol class='lessindent'>
+<li>When the "write_version" value of the database header is larger than
+ what the library understands, make the database read-only instead of
+ unreadable.</li>
+<li>Other minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_3_16"></a>
+<h3>2007-04-18 (3.3.16)</h3><p><ol class='lessindent'>
+<li>Fix a bug that caused VACUUM to fail if NULLs appeared in a
+ UNIQUE column.</li>
+<li>Reinstate performance improvements that were added in
+ <a href="#version_3_3_14">Version 3.3.14</a>
+ but regressed in <a href="#version_3_3_15">Version 3.3.15</a>.</li>
+<li>Fix problems with the handling of ORDER BY expressions on
+ compound SELECT statements in subqueries.</li>
+<li>Fix a potential segfault when destroying locks on WinCE in
+ a multi-threaded environment.</li>
+<li>Documentation updates.</li>
+
+</ol></p>
+<a name="version_3_3_15"></a>
+<h3>2007-04-09 (3.3.15)</h3><p><ol class='lessindent'>
+<li>Fix a bug introduced in 3.3.14 that caused a rollback of
+ CREATE TEMP TABLE to leave the database connection wedged.</li>
+<li>Fix a bug that caused an extra NULL row to be returned when
+ a descending query was interrupted by a change to the database.</li>
+<li>The FOR EACH STATEMENT clause on a trigger now causes a syntax
+ error. It used to be silently ignored.</li>
+<li>Fix an obscure and relatively harmless problem that might have caused
+ a resource leak following an I/O error.</li>
+<li>Many improvements to the test suite. Test coverage now exceeded 98%</li>
+
+</ol></p>
+<a name="version_3_3_14"></a>
+<h3>2007-04-02 (3.3.14)</h3><p><ol class='lessindent'>
+<li>Fix a bug (ticket #2273)
+ that could cause a segfault when the IN operator
+ is used one term of a two-column index and the right-hand side of
+ the IN operator contains a NULL.</li>
+<li>Added a new OS interface method for determining the sector size
+ of underlying media: sqlite3OsSectorSize().</li>
+<li>A new algorithm for statements of the form
+ INSERT INTO <i>table1</i> SELECT * FROM <i>table2</i>
+ is faster and reduces fragmentation. VACUUM uses statements of
+ this form and thus runs faster and defragments better.</li>
+<li>Performance enhancements through reductions in disk I/O:
+<ol type='a'>
+ <li>Do not read the last page of an overflow chain when
+ deleting the row - just add that page to the freelist.</li>
+ <li>Do not store pages being deleted in the
+ rollback journal.</li>
+ <li>Do not read in the (meaningless) content of
+ pages extracted from the freelist.</li>
+ <li>Do not flush the page cache (and thus avoiding
+ a cache refill) unless another process changes the underlying
+ database file.</li>
+ <li>Truncate rather than delete the rollback journal when committing
+ a transaction in exclusive access mode, or when committing the TEMP
+ database.</li>
+</ol></li>
+<li>Added support for exclusive access mode using
+ <a href="pragma.html#pragma_locking_mode">
+ "PRAGMA locking_mode=EXCLUSIVE"</a></li>
+<li>Use heap space instead of stack space for large buffers in the
+ pager - useful on embedded platforms with stack-space
+ limitations.</li>
+<li>Add a makefile target "sqlite3.c" that builds an amalgamation containing
+ the core SQLite library C code in a single file.</li>
+<li>Get the library working correctly when compiled
+ with GCC option "-fstrict-aliasing".</li>
+<li>Removed the vestigal SQLITE_PROTOCOL error.</li>
+<li>Improvements to test coverage, other minor bugs fixed,
+ memory leaks plugged,
+ code refactored and/or recommended in places for easier reading.</li>
+
+</ol></p>
+<a name="version_3_3_13"></a>
+<h3>2007-02-13 (3.3.13)</h3><p><ol class='lessindent'>
+<li>Add a "fragmentation" measurement in the output of sqlite3_analyzer.</li>
+<li>Add the COLLATE operator used to explicitly set the collating sequence
+used by an expression. This feature is considered experimental pending
+additional testing.</li>
+<li>Allow up to 64 tables in a join - the old limit was 32.</li>
+<li>Added two new experimental functions:
+<a href="lang_expr.html#randomblobFunc">randomBlob()</a> and
+<a href="lang_expr.html#hexFunc">hex()</a>.
+Their intended use is to facilitate generating
+<a href="http://en.wikipedia.org/wiki/UUID">UUIDs</a>.
+</li>
+<li>Fix a problem where
+<a href="pragma.html#pragma_count_changes">PRAGMA count_changes</a> was
+causing incorrect results for updates on tables with triggers</li>
+<li>Fix a bug in the ORDER BY clause optimizer for joins where the
+left-most table in the join is constrained by a UNIQUE index.</li>
+<li>Fixed a bug in the "copy" method of the TCL interface.</li>
+<li>Bug fixes in fts1 and fts2 modules.</li>
+
+</ol></p>
+<a name="version_3_3_12"></a>
+<h3>2007-01-27 (3.3.12)</h3><p><ol class='lessindent'>
+<li>Fix another bug in the IS NULL optimization that was added in
+version 3.3.9.</li>
+<li>Fix an assertion fault that occurred on deeply nested views.</li>
+<li>Limit the amount of output that
+<a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>
+generates.</li>
+<li>Minor syntactic changes to support a wider variety of compilers.</li>
+
+</ol></p>
+<a name="version_3_3_11"></a>
+<h3>2007-01-22 (3.3.11)</h3><p><ol class='lessindent'>
+<li>Fix another bug in the implementation of the new
+<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> API.
+We'll get it right eventually...</li>
+<li>Fix a bug in the IS NULL optimization that was added in version 3.3.9 -
+the bug was causing incorrect results on certain LEFT JOINs that included
+in the WHERE clause an IS NULL constraint for the right table of the
+LEFT JOIN.</li>
+<li>Make AreFileApisANSI() a no-op macro in WinCE since WinCE does not
+support this function.</li>
+
+</ol></p>
+<a name="version_3_3_10"></a>
+<h3>2007-01-09 (3.3.10)</h3><p><ol class='lessindent'>
+<li>Fix bugs in the implementation of the new
+<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> API
+that can lead to segfaults.</li>
+<li>Fix 1-second round-off errors in the
+strftime() function</li>
+<li>Enhance the Windows OS layer to provide detailed error codes</li>
+<li>Work around a win2k problem so that SQLite can use single-character
+database file names</li>
+<li>The
+<a href="pragma.html#pragma_user_version">user_version</a> and
+<a href="pragma.html#pragma_schema_version">schema_version</a> pragmas
+correctly set their column names in the result set</li>
+<li>Documentation updates</li>
+
+</ol></p>
+<a name="version_3_3_9"></a>
+<h3>2007-01-04 (3.3.9)</h3><p><ol class='lessindent'>
+<li>Fix bugs in pager.c that could lead to database corruption if two
+processes both try to recover a hot journal at the same instant</li>
+<li>Added the <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
+API.</li>
+<li>Fixed the ".dump" command in the command-line shell to show
+indices, triggers and views again.</li>
+<li>Change the table_info pragma so that it returns NULL for the default
+value if there is no default value</li>
+<li>Support for non-ASCII characters in win95 filenames</li>
+<li>Query optimizer enhancements:
+<ol type='a'>
+ <li>Optimizer does a better job of using indices to satisfy ORDER BY
+ clauses that sort on the integer primary key</li>
+ <li>Use an index to satisfy an IS NULL operator in the WHERE clause</li>
+ <li>Fix a bug that was causing the optimizer to miss an OR optimization
+ opportunity</li>
+ <li>The optimizer has more freedom to reorder tables in the FROM clause
+ even in there are LEFT joins.</li>
+</ol>
+<li>Extension loading supported added to WinCE</li>
+<li>Allow constraint names on the DEFAULT clause in a table definition</li>
+<li>Added the ".bail" command to the command-line shell</li>
+<li>Make CSV (comma separate value) output from the command-line shell
+more closely aligned to accepted practice</li>
+<li>Experimental FTS2 module added</li>
+<li>Use sqlite3_mprintf() instead of strdup() to avoid libc dependencies</li>
+<li>VACUUM uses a temporary file in the official TEMP folder, not in the
+same directory as the original database</li>
+<li>The prefix on temporary filenames on Windows is changed from "sqlite"
+to "etilqs".</li>
+
+</ol></p>
+<a name="version_3_3_8"></a>
+<h3>2006-10-09 (3.3.8)</h3><p><ol class='lessindent'>
+<li>Support for full text search using the FTS1 module (beta)</li>
+<li>Added Mac OS X locking patches (beta - disabled by default)</li>
+<li>Introduce extended error codes and add error codes for various
+kinds of I/O errors.</li>
+<li>Added support for IF EXISTS on CREATE/DROP TRIGGER/VIEW</li>
+<li>Fix the regression test suite so that it works with Tcl8.5</li>
+<li>Enhance sqlite3_set_authorizer() to provide notification of calls to
+ SQL functions.</li>
+<li>Added experimental API: sqlite3_auto_extension()</li>
+<li>Various minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_3_7"></a>
+<h3>2006-08-12 (3.3.7)</h3><p><ol class='lessindent'>
+<li>Added support for virtual tables (beta)</li>
+<li>Added support for dynamically loaded extensions (beta)</li>
+<li>The
+<a href="c3ref/interrupt.html">sqlite3_interrupt()</a>
+routine can be called for a different thread</li>
+<li>Added the <a href="lang_expr.html#match">MATCH</a> operator.</li>
+<li>The default file format is now 1.
+
+</ol></p>
+<a name="version_3_3_6"></a>
+<h3>2006-06-06 (3.3.6)</h3><p><ol class='lessindent'>
+<li>Plays better with virus scanners on Windows</li>
+<li>Faster :memory: databases</li>
+<li>Fix an obscure segfault in UTF-8 to UTF-16 conversions</li>
+<li>Added driver for OS/2</li>
+<li>Correct column meta-information returned for aggregate queries</li>
+<li>Enhanced output from EXPLAIN QUERY PLAN</li>
+<li>LIMIT 0 now works on subqueries</li>
+<li>Bug fixes and performance enhancements in the query optimizer</li>
+<li>Correctly handle NULL filenames in ATTACH and DETACH</li>
+<li>Improved syntax error messages in the parser</li>
+<li>Fix type coercion rules for the IN operator</li>
+
+</ol></p>
+<a name="version_3_3_5"></a>
+<h3>2006-04-05 (3.3.5)</h3><p><ol class='lessindent'>
+<li>CHECK constraints use conflict resolution algorithms correctly.</li>
+<li>The SUM() function throws an error on integer overflow.</li>
+<li>Choose the column names in a compound query from the left-most SELECT
+ instead of the right-most.</li>
+<li>The sqlite3_create_collation() function
+ honors the SQLITE_UTF16_ALIGNED flag.</li>
+<li>SQLITE_SECURE_DELETE compile-time option causes deletes to overwrite
+ old data with zeros.</li>
+<li>Detect integer overflow in abs().</li>
+<li>The random() function provides 64 bits of randomness instead of
+ only 32 bits.</li>
+<li>Parser detects and reports automaton stack overflow.</li>
+<li>Change the round() function to return REAL instead of TEXT.</li>
+<li>Allow WHERE clause terms on the left table of a LEFT OUTER JOIN to
+ contain aggregate subqueries.</li>
+<li>Skip over leading spaces in text to numeric conversions.</li>
+<li>Various minor bug and documentation typo fixes and
+ performance enhancements.</li>
+
+</ol></p>
+<a name="version_3_3_4"></a>
+<h3>2006-02-11 (3.3.4)</h3><p><ol class='lessindent'>
+<li>Fix a blunder in the Unix mutex implementation that can lead to
+deadlock on multithreaded systems.</li>
+<li>Fix an alignment problem on 64-bit machines</li>
+<li>Added the fullfsync pragma.</li>
+<li>Fix an optimizer bug that could have caused some unusual LEFT OUTER JOINs
+to give incorrect results.</li>
+<li>The SUM function detects integer overflow and converts to accumulating
+an approximate result using floating point numbers</li>
+<li>Host parameter names can begin with '@' for compatibility with SQL Server.
+</li>
+<li>Other miscellaneous bug fixes</li>
+
+</ol></p>
+<a name="version_3_3_3"></a>
+<h3>2006-01-31 (3.3.3)</h3><p><ol class='lessindent'>
+<li>Removed support for an ON CONFLICT clause on CREATE INDEX - it never
+worked correctly so this should not present any backward compatibility
+problems.</li>
+<li>Authorizer callback now notified of ALTER TABLE ADD COLUMN commands</li>
+<li>After any changes to the TEMP database schema, all prepared statements
+are invalidated and must be recreated using a new call to
+sqlite3_prepare()</li>
+<li>Other minor bug fixes in preparation for the first stable release
+of version 3.3</li>
+
+</ol></p>
+<h3>2006-01-24 (3.3.2 beta)</h3><p><ol class='lessindent'>
+<li>Bug fixes and speed improvements. Improved test coverage.</li>
+<li>Changes to the OS-layer interface: mutexes must now be recursive.</li>
+<li>Discontinue the use of thread-specific data for out-of-memory
+exception handling</li>
+
+</ol></p>
+<h3>2006-01-16 (3.3.1 alpha)</h3><p><ol class='lessindent'>
+<li>Countless bug fixes</li>
+<li>Speed improvements</li>
+<li>Database connections can now be used by multiple threads, not just
+the thread in which they were created.</li>
+
+</ol></p>
+<h3>2006-01-11 (3.3.0 alpha)</h3><p><ol class='lessindent'>
+<li>CHECK constraints</li>
+<li>IF EXISTS and IF NOT EXISTS clauses on CREATE/DROP TABLE/INDEX.</li>
+<li>DESC indices</li>
+<li>More efficient encoding of boolean values resulting in smaller database
+files</li>
+<li>More aggressive <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a></li>
+<li>Separate INTEGER and REAL affinity</li>
+<li>Added a virtual function layer for the OS interface</li>
+<li>"exists" method added to the TCL interface</li>
+<li>Improved response to out-of-memory errors</li>
+<li>Database cache can be optionally shared between connections
+in the same thread</li>
+<li>Optional READ UNCOMMITTED isolation (instead of the default
+isolation level of SERIALIZABLE) and table level locking when
+database connections share a common cache.</li>
+
+</ol></p>
+<a name="version_3_2_8"></a>
+<h3>2005-12-19 (3.2.8)</h3><p><ol class='lessindent'>
+<li>Fix an obscure bug that can cause database corruption under the
+following unusual circumstances: A large INSERT or UPDATE statement which
+is part of an even larger transaction fails due to a uniqueness constraint
+but the containing transaction commits.</li>
+
+</ol></p>
+<a name="version_2_8_17"></a>
+<h3>2005-12-19 (2.8.17)</h3><p><ol class='lessindent'>
+<li>Fix an obscure bug that can cause database corruption under the
+following unusual circumstances: A large INSERT or UPDATE statement which
+is part of an even larger transaction fails due to a uniqueness contraint
+but the containing transaction commits.</li>
+
+</ol></p>
+<a name="version_3_2_7"></a>
+<h3>2005-09-24 (3.2.7)</h3><p><ol class='lessindent'>
+<li>GROUP BY now considers NULLs to be equal again, as it should
+</li>
+<li>Now compiles on Solaris and OpenBSD and other Unix variants
+that lack the fdatasync() function</li>
+<li>Now compiles on MSVC++6 again</li>
+<li>Fix uninitialized variables causing malfunctions for various obscure
+queries</li>
+<li>Correctly compute a LEFT OUTER JOINs that is constrained on the
+left table only</li>
+
+</ol></p>
+<a name="version_3_2_6"></a>
+<h3>2005-09-17 (3.2.6)</h3><p><ol class='lessindent'>
+<li>Fix a bug that can cause database corruption if a VACUUM (or
+ autovacuum) fails and is rolled back on a database that is
+ larger than 1GiB</li>
+<li>LIKE optimization now works for columns with COLLATE NOCASE</li>
+<li>ORDER BY and GROUP BY now use bounded memory</li>
+<li>Added support for COUNT(DISTINCT expr)</li>
+<li>Change the way SUM() handles NULL values in order to comply with
+ the SQL standard</li>
+<li>Use fdatasync() instead of fsync() where possible in order to speed
+ up commits slightly</li>
+<li>Use of the CROSS keyword in a join turns off the table reordering
+ optimization</li>
+<li>Added the experimental and undocumented EXPLAIN QUERY PLAN capability</li>
+<li>Use the unicode API in Windows</li>
+
+</ol></p>
+<a name="version_3_2_5"></a>
+<h3>2005-08-27 (3.2.5)</h3><p><ol class='lessindent'>
+<li>Fix a bug effecting DELETE and UPDATE statements that changed
+more than 40960 rows.</li>
+<li>Change the makefile so that it no longer requires GNUmake extensions</li>
+<li>Fix the --enable-threadsafe option on the configure script</li>
+<li>Fix a code generator bug that occurs when the left-hand side of an IN
+operator is constant and the right-hand side is a SELECT statement</li>
+<li>The PRAGMA synchronous=off statement now disables syncing of the
+master journal file in addition to the normal rollback journals</li>
+
+</ol></p>
+<a name="version_3_2_4"></a>
+<h3>2005-08-24 (3.2.4)</h3><p><ol class='lessindent'>
+<li>Fix a bug introduced in the previous release
+that can cause a segfault while generating code
+for complex WHERE clauses.</li>
+<li>Allow floating point literals to begin or end with a decimal point.</li>
+
+</ol></p>
+<a name="version_3_2_3"></a>
+<h3>2005-08-21 (3.2.3)</h3><p><ol class='lessindent'>
+<li>Added support for the CAST operator</li>
+<li>Tcl interface allows BLOB values to be transferred to user-defined
+functions</li>
+<li>Added the "transaction" method to the Tcl interface</li>
+<li>Allow the DEFAULT value of a column to call functions that have constant
+operands</li>
+<li>Added the ANALYZE command for gathering statistics on indices and
+using those statistics when picking an index in the optimizer</li>
+<li>Remove the limit (formerly 100) on the number of terms in the
+WHERE clause</li>
+<li>The right-hand side of the IN operator can now be a list of expressions
+instead of just a list of constants</li>
+<li>Rework the optimizer so that it is able to make better use of indices</li>
+<li>The order of tables in a join is adjusted automatically to make
+better use of indices</li>
+<li>The IN operator is now a candidate for optimization even if the left-hand
+side is not the left-most term of the index. Multiple IN operators can be
+used with the same index.</li>
+<li>WHERE clause expressions using BETWEEN and OR are now candidates
+for optimization</li>
+<li>Added the "case_sensitive_like" pragma and the SQLITE_CASE_SENSITIVE_LIKE
+compile-time option to set its default value to "on".</li>
+<li>Use indices to help with GLOB expressions and LIKE expressions too
+when the case_sensitive_like pragma is enabled</li>
+<li>Added support for grave-accent quoting for compatibility with MySQL</li>
+<li>Improved test coverage</li>
+<li>Dozens of minor bug fixes</li>
+
+</ol></p>
+<a name="version_3_2_2"></a>
+<h3>2005-06-12 (3.2.2)</h3><p><ol class='lessindent'>
+<li>Added the sqlite3_db_handle() API</li>
+<li>Added the sqlite3_get_autocommit() API</li>
+<li>Added a REGEXP operator to the parser. There is no function to back
+up this operator in the standard build but users can add their own using
+sqlite3_create_function()</li>
+<li>Speed improvements and library footprint reductions.</li>
+<li>Fix byte alignment problems on 64-bit architectures.</li>
+<li>Many, many minor bug fixes and documentation updates.</li>
+
+</ol></p>
+<a name="version_3_2_1"></a>
+<h3>2005-03-29 (3.2.1)</h3><p><ol class='lessindent'>
+<li>Fix a memory allocation error in the new ADD COLUMN comment.</li>
+<li>Documentation updates</li>
+
+</ol></p>
+<a name="version_3_2_0"></a>
+<h3>2005-03-21 (3.2.0)</h3><p><ol class='lessindent'>
+<li>Added support for ALTER TABLE ADD COLUMN.</li>
+<li>Added support for the "T" separator in ISO-8601 date/time strings.</li>
+<li>Improved support for Cygwin.</li>
+<li>Numerous bug fixes and documentation updates.</li>
+
+</ol></p>
+<a name="version_3_1_6"></a>
+<h3>2005-03-17 (3.1.6)</h3><p><ol class='lessindent'>
+<li>Fix a bug that could cause database corruption when inserting
+ record into tables with around 125 columns.</li>
+<li>sqlite3_step() is now much more likely to invoke the busy handler
+ and less likely to return SQLITE_BUSY.</li>
+<li>Fix memory leaks that used to occur after a malloc() failure.</li>
+
+</ol></p>
+<a name="version_3_1_5"></a>
+<h3>2005-03-11 (3.1.5)</h3><p><ol class='lessindent'>
+<li>The ioctl on Mac OS X to control syncing to disk is F_FULLFSYNC,
+ not F_FULLSYNC. The previous release had it wrong.</li>
+
+</ol></p>
+<a name="version_3_1_4"></a>
+<h3>2005-03-11 (3.1.4)</h3><p><ol class='lessindent'>
+<li>Fix a bug in autovacuum that could cause database corruption if
+a CREATE UNIQUE INDEX fails because of a constraint violation.
+This problem only occurs if the new autovacuum feature introduced in
+version 3.1 is turned on.</li>
+<li>The F_FULLSYNC ioctl (currently only supported on Mac OS X) is disabled
+if the synchronous pragma is set to something other than "full".</li>
+<li>Add additional forward compatibility to the future version 3.2 database
+file format.</li>
+<li>Fix a bug in WHERE clauses of the form (rowid<'2')</li>
+<li>New <a href="compile.html#omitfeatures">SQLITE_OMIT_...</a> compile-time options added</li>
+<li>Updates to the man page</li>
+<li>Remove the use of strcasecmp() from the shell</li>
+<li>Windows DLL exports symbols Tclsqlite_Init and Sqlite_Init</li>
+
+</ol></p>
+<a name="version_3_1_3"></a>
+<h3>2005-02-19 (3.1.3)</h3><p><ol class='lessindent'>
+<li>Fix a problem with VACUUM on databases from which tables containing
+AUTOINCREMENT have been dropped.</li>
+<li>Add forward compatibility to the future version 3.2 database file
+format.</li>
+<li>Documentation updates</li>
+
+</ol></p>
+<a name="version_3_1_2"></a>
+<h3>2005-02-15 (3.1.2)</h3><p><ol class='lessindent'>
+<li>Fix a bug that can lead to database corruption if there are two
+open connections to the same database and one connection does a VACUUM
+and the second makes some change to the database.</li>
+<li>Allow "?" parameters in the LIMIT clause.</li>
+<li>Fix VACUUM so that it works with AUTOINCREMENT.</li>
+<li>Fix a race condition in AUTOVACUUM that can lead to corrupt databases</li>
+<li>Add a numeric version number to the sqlite3.h include file.</li>
+<li>Other minor bug fixes and performance enhancements.</li>
+
+</ol></p>
+<a name="version_2_8_16"></a>
+<h3>2005-02-15 (2.8.16)</h3><p><ol class='lessindent'>
+<li>Fix a bug that can lead to database corruption if there are two
+open connections to the same database and one connection does a VACUUM
+and the second makes some change to the database.</li>
+<li>Correctly handle quoted names in CREATE INDEX statements.</li>
+<li>Fix a naming conflict between sqlite.h and sqlite3.h.</li>
+<li>Avoid excess heap usage when copying expressions.</li>
+<li>Other minor bug fixes.</li>
+
+</ol></p>
+<h3>2005-02-01 (3.1.1 BETA)</h3><p><ol class='lessindent'>
+<li>Automatic caching of prepared statements in the TCL interface</li>
+<li>ATTACH and DETACH as well as some other operations cause existing
+ prepared statements to expire.</li>
+<li>Numerous minor bug fixes</li>
+
+</ol></p>
+<h3>2005-01-21 (3.1.0 ALPHA)</h3><p><ol class='lessindent'>
+<li>Autovacuum support added</li>
+<li>CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP added</li>
+<li>Support for the EXISTS clause added.</li>
+<li>Support for correlated subqueries added.</li>
+<li>Added the ESCAPE clause on the LIKE operator.</li>
+<li>Support for ALTER TABLE ... RENAME TABLE ... added</li>
+<li>AUTOINCREMENT keyword supported on INTEGER PRIMARY KEY</li>
+<li>Many SQLITE_OMIT_ macros inserts to omit features at compile-time
+ and reduce the library footprint.</li>
+<li>The REINDEX command was added.</li>
+<li>The engine no longer consults the main table if it can get
+ all the information it needs from an index.</li>
+<li>Many nuisance bugs fixed.</li>
+
+</ol></p>
+<a name="version_3_0_8"></a>
+<h3>2004-10-12 (3.0.8)</h3><p><ol class='lessindent'>
+<li>Add support for DEFERRED, IMMEDIATE, and EXCLUSIVE transactions.</li>
+<li>Allow new user-defined functions to be created when there are
+already one or more precompiled SQL statements.<li>
+<li>Fix portability problems for MinGW/MSYS.</li>
+<li>Fix a byte alignment problem on 64-bit Sparc machines.</li>
+<li>Fix the ".import" command of the shell so that it ignores \r
+characters at the end of lines.</li>
+<li>The "csv" mode option in the shell puts strings inside double-quotes.</li>
+<li>Fix typos in documentation.</li>
+<li>Convert array constants in the code to have type "const".</li>
+<li>Numerous code optimizations, specially optimizations designed to
+make the code footprint smaller.</li>
+
+</ol></p>
+<a name="version_3_0_7"></a>
+<h3>2004-09-18 (3.0.7)</h3><p><ol class='lessindent'>
+<li>The BTree module allocates large buffers using malloc() instead of
+ off of the stack, in order to play better on machines with limited
+ stack space.</li>
+<li>Fixed naming conflicts so that versions 2.8 and 3.0 can be
+ linked and used together in the same ANSI-C source file.</li>
+<li>New interface: sqlite3_bind_parameter_index()</li>
+<li>Add support for wildcard parameters of the form: "?nnn"</li>
+<li>Fix problems found on 64-bit systems.</li>
+<li>Removed encode.c file (containing unused routines) from the
+ version 3.0 source tree.</li>
+<li>The sqlite3_trace() callbacks occur before each statement
+ is executed, not when the statement is compiled.</li>
+<li>Makefile updates and miscellaneous bug fixes.</li>
+
+</ol></p>
+<h3>2004-09-02 (3.0.6 beta)</h3><p><ol class='lessindent'>
+<li>Better detection and handling of corrupt database files.</li>
+<li>The sqlite3_step() interface returns SQLITE_BUSY if it is unable
+ to commit a change because of a lock</li>
+<li>Combine the implementations of LIKE and GLOB into a single
+ pattern-matching subroutine.</li>
+<li>Miscellaneous code size optimizations and bug fixes</li>
+
+</ol></p>
+<h3>2004-08-29 (3.0.5 beta)</h3><p><ol class='lessindent'>
+<li>Support for ":AAA" style bind parameter names.</li>
+<li>Added the new sqlite3_bind_parameter_name() interface.</li>
+<li>Support for TCL variable names embedded in SQL statements in the
+ TCL bindings.</li>
+<li>The TCL bindings transfer data without necessarily doing a conversion
+ to a string.</li>
+<li>The database for TEMP tables is not created until it is needed.</li>
+<li>Add the ability to specify an alternative temporary file directory
+ using the "sqlite_temp_directory" global variable.</li>
+<li>A compile-time option (SQLITE_BUSY_RESERVED_LOCK) causes the busy
+ handler to be called when there is contention for a RESERVED lock.</li>
+<li>Various bug fixes and optimizations</li>
+
+</ol></p>
+<h3>2004-08-09 (3.0.4 beta)</h3><p><ol class='lessindent'>
+<li>CREATE TABLE and DROP TABLE now work correctly as prepared statements.</li>
+<li>Fix a bug in VACUUM and UNIQUE indices.</li>
+<li>Add the ".import" command to the command-line shell.</li>
+<li>Fix a bug that could cause index corruption when an attempt to
+ delete rows of a table is blocked by a pending query.</li>
+<li>Library size optimizations.</li>
+<li>Other minor bug fixes.</li>
+
+</ol></p>
+<a name="version_2_8_15"></a>
+<h3>2004-07-22 (2.8.15)</h3><p><ol class='lessindent'>
+<li>This is a maintenance release only. Various minor bugs have been
+fixed and some portability enhancements are added.</li>
+
+</ol></p>
+<h3>2004-07-22 (3.0.3 beta)</h3><p><ol class='lessindent'>
+<li>The second beta release for SQLite 3.0.</li>
+<li>Add support for "PRAGMA page_size" to adjust the page size of
+the database.</li>
+<li>Various bug fixes and documentation updates.</li>
+
+</ol></p>
+<h3>2004-06-30 (3.0.2 beta)</h3><p><ol class='lessindent'>
+<li>The first beta release for SQLite 3.0.</li>
+
+</ol></p>
+<h3>2004-06-22 (3.0.1 alpha)</h3><p><ol class='lessindent'>
+<li><font color="red"><b>
+ *** Alpha Release - Research And Testing Use Only ***</b></font>
+<li>Lots of bug fixes.</li>
+
+</ol></p>
+<h3>2004-06-18 (3.0.0 alpha)</h3><p><ol class='lessindent'>
+<li><font color="red"><b>
+ *** Alpha Release - Research And Testing Use Only ***</b></font>
+<li>Support for internationalization including UTF-8, UTF-16, and
+ user defined collating sequences.</li>
+<li>New file format that is 25% to 35% smaller for typical use.</li>
+<li>Improved concurrency.</li>
+<li>Atomic commits for ATTACHed databases.</li>
+<li>Remove cruft from the APIs.</li>
+<li>BLOB support.</li>
+<li>64-bit rowids.</li>
+<li><a href="version3.html">More information</a>.
+
+</ol></p>
+<a name="version_2_8_14"></a>
+<h3>2004-06-09 (2.8.14)</h3><p><ol class='lessindent'>
+<li>Fix the min() and max() optimizer so that it works when the FROM
+ clause consists of a subquery.</li>
+<li>Ignore extra whitespace at the end of "." commands in the shell.</li>
+<li>Bundle sqlite_encode_binary() and sqlite_decode_binary() with the
+ library.</li>
+<li>The TEMP_STORE and DEFAULT_TEMP_STORE pragmas now work.</li>
+<li>Code changes to compile cleanly using OpenWatcom.</li>
+<li>Fix VDBE stack overflow problems with INSTEAD OF triggers and
+ NULLs in IN operators.</li>
+<li>Add the global variable sqlite_temp_directory which if set defines the
+ directory in which temporary files are stored.</li>
+<li>sqlite_interrupt() plays well with VACUUM.</li>
+<li>Other minor bug fixes.</li>
+
+</ol></p>
+<a name="version_2_8_13"></a>
+<h3>2004-03-08 (2.8.13)</h3><p><ol class='lessindent'>
+<li>Refactor parts of the code in order to make the code footprint
+ smaller. The code is now also a little bit faster.</li>
+<li>sqlite_exec() is now implemented as a wrapper around sqlite_compile()
+ and sqlite_step().</li>
+<li>The built-in min() and max() functions now honor the difference between
+ NUMERIC and TEXT datatypes. Formerly, min() and max() always assumed
+ their arguments were of type NUMERIC.</li>
+<li>New HH:MM:SS modifier to the built-in date/time functions.</li>
+<li>Experimental sqlite_last_statement_changes() API added. Fixed
+ the last_insert_rowid() function so that it works correctly with
+ triggers.</li>
+<li>Add functions prototypes for the database encryption API.</li>
+<li>Fix several nuisance bugs.</li>
+
+</ol></p>
+<a name="version_2_8_12"></a>
+<h3>2004-02-08 (2.8.12)</h3><p><ol class='lessindent'>
+<li>Fix a bug that will might corrupt the rollback journal if a power failure
+ or external program halt occurs in the middle of a COMMIT. The corrupt
+ journal can lead to database corruption when it is rolled back.</li>
+<li>Reduce the size and increase the speed of various modules, especially
+ the virtual machine.</li>
+<li>Allow "&lt;expr&gt; IN &lt;table&gt;" as a shorthand for
+ "&lt;expr&gt; IN (SELECT * FROM &lt;table&gt;".</li>
+<li>Optimizations to the sqlite_mprintf() routine.</li>
+<li>Make sure the MIN() and MAX() optimizations work within subqueries.</li>
+
+</ol></p>
+<a name="version_2_8_11"></a>
+<h3>2004-01-14 (2.8.11)</h3><p><ol class='lessindent'>
+<li>Fix a bug in how the IN operator handles NULLs in subqueries. The bug
+ was introduced by the previous release.</li>
+
+</ol></p>
+<a name="version_2_8_10"></a>
+<h3>2004-01-14 (2.8.10)</h3><p><ol class='lessindent'>
+<li>Fix a potential database corruption problem on Unix caused by the fact
+ that all POSIX advisory locks are cleared whenever you close() a file.
+ The work around it to embargo all close() calls while locks are
+ outstanding.</li>
+<li>Performance enhancements on some corner cases of COUNT(*).</li>
+<li>Make sure the in-memory backend response sanely if malloc() fails.</li>
+<li>Allow sqlite_exec() to be called from within user-defined SQL
+ functions.</li>
+<li>Improved accuracy of floating-point conversions using "long double".</li>
+<li>Bug fixes in the experimental date/time functions.</li>
+
+</ol></p>
+<a name="version_2_8_9"></a>
+<h3>2004-01-06 (2.8.9)</h3><p><ol class='lessindent'>
+<li>Fix a 32-bit integer overflow problem that could result in corrupt
+ indices in a database if large negative numbers (less than -2147483648)
+ were inserted into an indexed numeric column.</li>
+<li>Fix a locking problem on multi-threaded Linux implementations.</li>
+<li>Always use "." instead of "," as the decimal point even if the locale
+ requests ",".</li>
+<li>Added UTC to localtime conversions to the experimental date/time
+ functions.</li>
+<li>Bug fixes to date/time functions.</li>
+
+</ol></p>
+<a name="version_2_8_8"></a>
+<h3>2003-12-18 (2.8.8)</h3><p><ol class='lessindent'>
+<li>Fix a critical bug introduced into 2.8.0 which could cause
+ database corruption.</li>
+<li>Fix a problem with 3-way joins that do not use indices</li>
+<li>The VACUUM command now works with the non-callback API</li>
+<li>Improvements to the "PRAGMA integrity_check" command</li>
+
+</ol></p>
+<a name="version_2_8_7"></a>
+<h3>2003-12-04 (2.8.7)</h3><p><ol class='lessindent'>
+<li>Added experimental sqlite_bind() and sqlite_reset() APIs.</li>
+<li>If the name of the database is an empty string, open a new database
+ in a temporary file that is automatically deleted when the database
+ is closed.</li>
+<li>Performance enhancements in the <a href="lemon.html">Lemon</a>-generated parser</li>
+<li>Experimental date/time functions revised.</li>
+<li>Disallow temporary indices on permanent tables.</li>
+<li>Documentation updates and typo fixes</li>
+<li>Added experimental sqlite_progress_handler() callback API</li>
+<li>Removed support for the Oracle8 outer join syntax.</li>
+<li>Allow GLOB and LIKE operators to work as functions.</li>
+<li>Other minor documentation and makefile changes and bug fixes.</li>
+
+</ol></p>
+<a name="version_2_8_6"></a>
+<h3>2003-08-22 (2.8.6)</h3><p><ol class='lessindent'>
+<li>Moved the CVS repository to www.sqlite.org</li>
+<li>Update the NULL-handling documentation.</li>
+<li>Experimental date/time functions added.</li>
+<li>Bug fix: correctly evaluate a view of a view without segfaulting.</li>
+<li>Bug fix: prevent database corruption if you dropped a
+ trigger that had the same name as a table.</li>
+<li>Bug fix: allow a VACUUM (without segfaulting) on an empty
+ database after setting the EMPTY_RESULT_CALLBACKS pragma.</li>
+<li>Bug fix: if an integer value will not fit in a 32-bit int, store it in
+ a double instead.</li>
+<li>Bug fix: Make sure the journal file directory entry is committed to disk
+ before writing the database file.</li>
+
+</ol></p>
+<a name="version_2_8_5"></a>
+<h3>2003-07-22 (2.8.5)</h3><p><ol class='lessindent'>
+<li>Make LIMIT work on a compound SELECT statement.</li>
+<li>LIMIT 0 now shows no rows. Use LIMIT -1 to see all rows.</li>
+<li>Correctly handle comparisons between an INTEGER PRIMARY KEY and
+ a floating point number.</li>
+<li>Fix several important bugs in the new ATTACH and DETACH commands.</li>
+<li>Updated the <a href="nulls.html">NULL-handling document</a>.</li>
+<li>Allow NULL arguments in sqlite_compile() and sqlite_step().</li>
+<li>Many minor bug fixes</li>
+
+</ol></p>
+<a name="version_2_8_4"></a>
+<h3>2003-06-29 (2.8.4)</h3><p><ol class='lessindent'>
+<li>Enhanced the "PRAGMA integrity_check" command to verify indices.</li>
+<li>Added authorization hooks for the new ATTACH and DETACH commands.</li>
+<li>Many documentation updates</li>
+<li>Many minor bug fixes</li>
+
+</ol></p>
+<a name="version_2_8_3"></a>
+<h3>2003-06-04 (2.8.3)</h3><p><ol class='lessindent'>
+<li>Fix a problem that will corrupt the indices on a table if you
+ do an INSERT OR REPLACE or an UPDATE OR REPLACE on a table that
+ contains an INTEGER PRIMARY KEY plus one or more indices.</li>
+<li>Fix a bug in Windows locking code so that locks work correctly
+ when simultaneously accessed by Win95 and WinNT systems.</li>
+<li>Add the ability for INSERT and UPDATE statements to refer to the
+ "rowid" (or "_rowid_" or "oid") columns.</li>
+<li>Other important bug fixes</li>
+
+</ol></p>
+<a name="version_2_8_2"></a>
+<h3>2003-05-17 (2.8.2)</h3><p><ol class='lessindent'>
+<li>Fix a problem that will corrupt the database file if you drop a
+ table from the main database that has a TEMP index.</li>
+
+</ol></p>
+<a name="version_2_8_1"></a>
+<h3>2003-05-17 (2.8.1)</h3><p><ol class='lessindent'>
+<li>Reactivated the VACUUM command that reclaims unused disk space in
+ a database file.</li>
+<li>Added the ATTACH and DETACH commands to allow interacting with multiple
+ database files at the same time.</li>
+<li>Added support for TEMP triggers and indices.</li>
+<li>Added support for in-memory databases.</li>
+<li>Removed the experimental sqlite_open_aux_file(). Its function is
+ subsumed in the new ATTACH command.</li>
+<li>The precedence order for ON CONFLICT clauses was changed so that
+ ON CONFLICT clauses on BEGIN statements have a higher precedence than
+ ON CONFLICT clauses on constraints.
+<li>Many, many bug fixes and compatibility enhancements.</li>
+
+</ol></p>
+<a name="version_2_8_0"></a>
+<h3>2003-02-16 (2.8.0)</h3><p><ol class='lessindent'>
+<li>Modified the journal file format to make it more resistant to corruption
+ that can occur after an OS crash or power failure.</li>
+<li>Added a new C/C++ API that does not use callback for returning data.</li>
+
+</ol></p>
+<a name="version_2_7_6"></a>
+<h3>2003-01-25 (2.7.6)</h3><p><ol class='lessindent'>
+<li>Performance improvements. The library is now much faster.</li>
+<li>Added the <b>sqlite_set_authorizer()</b> API. Formal documentation has
+ not been written - see the source code comments for instructions on
+ how to use this function.</li>
+<li>Fix a bug in the GLOB operator that was preventing it from working
+ with upper-case letters.</li>
+<li>Various minor bug fixes.</li>
+
+</ol></p>
+<a name="version_2_7_5"></a>
+<h3>2002-12-28 (2.7.5)</h3><p><ol class='lessindent'>
+<li>Fix an uninitialized variable in pager.c which could (with a probability
+ of about 1 in 4 billion) result in a corrupted database.</li>
+
+</ol></p>
+<a name="version_2_7_4"></a>
+<h3>2002-12-17 (2.7.4)</h3><p><ol class='lessindent'>
+<li>Database files can now grow to be up to 2&#94;41 bytes. The old limit
+ was 2&#94;31 bytes.</li>
+<li>The optimizer will now scan tables in the reverse if doing so will
+ satisfy an ORDER BY ... DESC clause.</li>
+<li>The full pathname of the database file is now remembered even if
+ a relative path is passed into sqlite_open(). This allows
+ the library to continue operating correctly after a chdir().</li>
+<li>Speed improvements in the VDBE.</li>
+<li>Lots of little bug fixes.</li>
+
+</ol></p>
+<a name="version_2_7_3"></a>
+<h3>2002-10-31 (2.7.3)</h3><p><ol class='lessindent'>
+<li>Various compiler compatibility fixes.</li>
+<li>Fix a bug in the "expr IN ()" operator.</li>
+<li>Accept column names in parentheses.</li>
+<li>Fix a problem with string memory management in the VDBE</li>
+<li>Fix a bug in the "table_info" pragma"</li>
+<li>Export the sqlite_function_type() API function in the Windows DLL</li>
+<li>Fix locking behavior under Windows</li>
+<li>Fix a bug in LEFT OUTER JOIN</li>
+
+</ol></p>
+<a name="version_2_7_2"></a>
+<h3>2002-09-25 (2.7.2)</h3><p><ol class='lessindent'>
+<li>Prevent journal file overflows on huge transactions.</li>
+<li>Fix a memory leak that occurred when sqlite_open() failed.</li>
+<li>Honor the ORDER BY and LIMIT clause of a SELECT even if the
+ result set is used for an INSERT.</li>
+<li>Do not put write locks on the file used to hold TEMP tables.</li>
+<li>Added documentation on SELECT DISTINCT and on how SQLite handles NULLs.</li>
+<li>Fix a problem that was causing poor performance when many thousands
+ of SQL statements were executed by a single sqlite_exec() call.</li>
+
+</ol></p>
+<a name="version_2_7_1"></a>
+<h3>2002-08-31 (2.7.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the ORDER BY logic that was introduced in version 2.7.0</li>
+<li>C-style comments are now accepted by the tokenizer.</li>
+<li>INSERT runs a little faster when the source is a SELECT statement.</li>
+
+</ol></p>
+<a name="version_2_7_0"></a>
+<h3>2002-08-25 (2.7.0)</h3><p><ol class='lessindent'>
+<li>Make a distinction between numeric and text values when sorting.
+ Text values sort according to memcmp(). Numeric values sort in
+ numeric order.</li>
+<li>Allow multiple simultaneous readers under Windows by simulating
+ the reader/writers locks that are missing from Win95/98/ME.</li>
+<li>An error is now returned when trying to start a transaction if
+ another transaction is already active.</li>
+
+</ol></p>
+<a name="version_2_6_3"></a>
+<h3>2002-08-13 (2.6.3)</h3><p><ol class='lessindent'>
+<li>Add the ability to read both little-endian and big-endian databases.
+ So a database created under SunOS or Mac OS X can be read and written
+ under Linux or Windows and vice versa.</li>
+<li>Convert to the new website: http://www.sqlite.org/</li>
+<li>Allow transactions to span Linux Threads</li>
+<li>Bug fix in the processing of the ORDER BY clause for GROUP BY queries</li>
+
+</ol></p>
+<a name="version_2_6_2"></a>
+<h3>2002-07-31 (2.6.2)</h3><p><ol class='lessindent'>
+<li>Text files read by the COPY command can now have line terminators
+ of LF, CRLF, or CR.</li>
+<li>SQLITE_BUSY is handled correctly if encountered during database
+ initialization.</li>
+<li>Fix to UPDATE triggers on TEMP tables.</li>
+<li>Documentation updates.</li>
+
+</ol></p>
+<a name="version_2_6_1"></a>
+<h3>2002-07-19 (2.6.1)</h3><p><ol class='lessindent'>
+<li>Include a static string in the library that responds to the RCS
+ "ident" command and which contains the library version number.</li>
+<li>Fix an assertion failure that occurred when deleting all rows of
+ a table with the "count_changes" pragma turned on.</li>
+<li>Better error reporting when problems occur during the automatic
+ 2.5.6 to 2.6.0 database format upgrade.</li>
+
+</ol></p>
+<a name="version_2_6_0"></a>
+<h3>2002-07-18 (2.6.0)</h3><p><ol class='lessindent'>
+<li>Change the format of indices to correct a design flaw the originated
+ with version 2.1.0. <font color="red">*** This is an incompatible
+ file format change ***</font> When version 2.6.0 or later of the
+ library attempts to open a database file created by version 2.5.6 or
+ earlier, it will automatically and irreversibly convert the file format.
+ <b>Make backup copies of older database files before opening them with
+ version 2.6.0 of the library.</b>
+ </li>
+
+</ol></p>
+<a name="version_2_5_6"></a>
+<h3>2002-07-07 (2.5.6)</h3><p><ol class='lessindent'>
+<li>Fix more problems with rollback. Enhance the test suite to exercise
+ the rollback logic extensively in order to prevent any future problems.
+ </li>
+
+</ol></p>
+<a name="version_2_5_5"></a>
+<h3>2002-07-06 (2.5.5)</h3><p><ol class='lessindent'>
+<li>Fix a bug which could cause database corruption during a rollback.
+ This bugs was introduced in version 2.4.0 by the freelist
+ optimization of checkin &#91;410&#93;.</li>
+<li>Fix a bug in aggregate functions for VIEWs.</li>
+<li>Other minor changes and enhancements.</li>
+
+</ol></p>
+<a name="version_2_5_4"></a>
+<h3>2002-07-01 (2.5.4)</h3><p><ol class='lessindent'>
+<li>Make the "AS" keyword optional again.</li>
+<li>The datatype of columns now appear in the 4th argument to the
+ callback.</li>
+<li>Added the <b>sqlite_open_aux_file()</b> API, though it is still
+ mostly undocumented and untested.</li>
+<li>Added additional test cases and fixed a few bugs that those
+ test cases found.</li>
+
+</ol></p>
+<a name="version_2_5_3"></a>
+<h3>2002-06-25 (2.5.3)</h3><p><ol class='lessindent'>
+<li>Bug fix: Database corruption can occur due to the optimization
+ that was introduced in version 2.4.0 (check-in &#91;410&#93;). The problem
+ should now be fixed. The use of versions 2.4.0 through 2.5.2 is
+ not recommended.</li>
+
+</ol></p>
+<a name="version_2_5_2"></a>
+<h3>2002-06-25 (2.5.2)</h3><p><ol class='lessindent'>
+<li>Added the new <b>SQLITE_TEMP_MASTER</b> table which records the schema
+ for temporary tables in the same way that <b>SQLITE_MASTER</b> does for
+ persistent tables.</li>
+<li>Added an optimization to UNION ALL</li>
+<li>Fixed a bug in the processing of LEFT OUTER JOIN</li>
+<li>The LIMIT clause now works on subselects</li>
+<li>ORDER BY works on subselects</li>
+<li>There is a new TypeOf() function used to determine if an expression
+ is numeric or text.</li>
+<li>Autoincrement now works for INSERT from a SELECT.</li>
+
+</ol></p>
+<a name="version_2_5_1"></a>
+<h3>2002-06-19 (2.5.1)</h3><p><ol class='lessindent'>
+<li>The query optimizer now attempts to implement the ORDER BY clause
+ using an index. Sorting is still used if not suitable index is
+ available.</li>
+
+</ol></p>
+<a name="version_2_5_0"></a>
+<h3>2002-06-17 (2.5.0)</h3><p><ol class='lessindent'>
+<li>Added support for row triggers.</li>
+<li>Added SQL-92 compliant handling of NULLs.</li>
+<li>Add support for the full SQL-92 join syntax and LEFT OUTER JOINs.</li>
+<li>Double-quoted strings interpreted as column names not text literals.</li>
+<li>Parse (but do not implement) foreign keys.</li>
+<li>Performance improvements in the parser, pager, and WHERE clause code
+ generator.</li>
+<li>Make the LIMIT clause work on subqueries. (ORDER BY still does not
+ work, though.)</li>
+<li>Added the "%Q" expansion to sqlite_*_printf().</li>
+<li>Bug fixes too numerous to mention (see the change log).</li>
+
+</ol></p>
+<a name="version_2_4_12"></a>
+<h3>2002-05-10 (2.4.12)</h3><p><ol class='lessindent'>
+<li>Added logic to detect when the library API routines are called out
+ of sequence.</li>
+
+</ol></p>
+<a name="version_2_4_11"></a>
+<h3>2002-05-08 (2.4.11)</h3><p><ol class='lessindent'>
+<li>Bug fix: Column names in the result set were not being generated
+ correctly for some (rather complex) VIEWs. This could cause a
+ segfault under certain circumstances.</li>
+
+</ol></p>
+<a name="version_2_4_10"></a>
+<h3>2002-05-03 (2.4.10)</h3><p><ol class='lessindent'>
+<li>Bug fix: Generate correct column headers when a compound SELECT is used
+ as a subquery.</li>
+<li>Added the sqlite_encode_binary() and sqlite_decode_binary() functions to
+ the source tree. But they are not yet linked into the library.</li>
+<li>Documentation updates.</li>
+<li>Export the sqlite_changes() function from Windows DLLs.</li>
+<li>Bug fix: Do not attempt the subquery flattening optimization on queries
+ that lack a FROM clause. To do so causes a segfault.</li>
+
+</ol></p>
+<a name="version_2_4_9"></a>
+<h3>2002-04-22 (2.4.9)</h3><p><ol class='lessindent'>
+<li>Fix a bug that was causing the precompiled binary of SQLITE.EXE to
+ report "out of memory" under Windows 98.</li>
+
+</ol></p>
+<a name="version_2_4_8"></a>
+<h3>2002-04-20 (2.4.8)</h3><p><ol class='lessindent'>
+<li>Make sure VIEWs are created after their corresponding TABLEs in the
+ output of the <b>.dump</b> command in the shell.</li>
+<li>Speed improvements: Do not do synchronous updates on TEMP tables.</li>
+<li>Many improvements and enhancements to the shell.</li>
+<li>Make the GLOB and LIKE operators functions that can be overridden
+ by a programmer. This allows, for example, the LIKE operator to
+ be changed to be case sensitive.</li>
+
+</ol></p>
+<a name="version_2_4_7"></a>
+<h3>2002-04-12 (2.4.7)</h3><p><ol class='lessindent'>
+<li>Add the ability to put TABLE.* in the column list of a
+ SELECT statement.</li>
+<li>Permit SELECT statements without a FROM clause.</li>
+<li>Added the <b>last_insert_rowid()</b> SQL function.</li>
+<li>Do not count rows where the IGNORE conflict resolution occurs in
+ the row count.</li>
+<li>Make sure functions expressions in the VALUES clause of an INSERT
+ are correct.</li>
+<li>Added the <b>sqlite_changes()</b> API function to return the number
+ of row that changed in the most recent operation.</li>
+
+</ol></p>
+<a name="version_2_4_6"></a>
+<h3>2002-04-02 (2.4.6)</h3><p><ol class='lessindent'>
+<li>Bug fix: Correctly handle terms in the WHERE clause of a join that
+ do not contain a comparison operator.</li>
+
+</ol></p>
+<a name="version_2_4_5"></a>
+<h3>2002-04-02 (2.4.5)</h3><p><ol class='lessindent'>
+<li>Bug fix: Correctly handle functions that appear in the WHERE clause
+ of a join.</li>
+<li>When the PRAGMA vdbe_trace=ON is set, correctly print the P3 operand
+ value when it is a pointer to a structure rather than a pointer to
+ a string.</li>
+<li>When inserting an explicit NULL into an INTEGER PRIMARY KEY, convert
+ the NULL value into a unique key automatically.</li>
+
+</ol></p>
+<a name="version_2_4_4"></a>
+<h3>2002-03-30 (2.4.4)</h3><p><ol class='lessindent'>
+<li>Allow "VIEW" to be a column name</li>
+<li>Added support for CASE expressions (patch from Dan Kennedy)</li>
+<li>Added RPMS to the delivery (patches from Doug Henry)</li>
+<li>Fix typos in the documentation</li>
+<li>Cut over configuration management to a new CVS repository with
+ its own CVSTrac bug tracking system.</li>
+
+</ol></p>
+<a name="version_2_4_3"></a>
+<h3>2002-03-23 (2.4.3)</h3><p><ol class='lessindent'>
+<li>Fix a bug in SELECT that occurs when a compound SELECT is used as a
+ subquery in the FROM of a SELECT.</li>
+<li>The <b>sqlite_get_table()</b> function now returns an error if you
+ give it two or more SELECTs that return different numbers of columns.</li>
+
+</ol></p>
+<a name="version_2_4_2"></a>
+<h3>2002-03-20 (2.4.2)</h3><p><ol class='lessindent'>
+<li>Bug fix: Fix an assertion failure that occurred when ROWID was a column
+ in a SELECT statement on a view.</li>
+<li>Bug fix: Fix an uninitialized variable in the VDBE that would could an
+ assert failure.</li>
+<li>Make the os.h header file more robust in detecting when the compile is
+ for Windows and when it is for Unix.</li>
+
+</ol></p>
+<a name="version_2_4_1"></a>
+<h3>2002-03-13 (2.4.1)</h3><p><ol class='lessindent'>
+<li>Using an unnamed subquery in a FROM clause would cause a segfault.</li>
+<li>The parser now insists on seeing a semicolon or the end of input before
+ executing a statement. This avoids an accidental disaster if the
+ WHERE keyword is misspelled in an UPDATE or DELETE statement.</li>
+
+</ol></p>
+<a name="version_2_4_0"></a>
+<h3>2002-03-11 (2.4.0)</h3><p><ol class='lessindent'>
+<li>Change the name of the sanity_check PRAGMA to <b>integrity_check</b>
+ and make it available in all compiles.</li>
+<li>SELECT min() or max() of an indexed column with no WHERE or GROUP BY
+ clause is handled as a special case which avoids a complete table scan.</li>
+<li>Automatically generated ROWIDs are now sequential.</li>
+<li>Do not allow dot-commands of the command-line shell to occur in the
+ middle of a real SQL command.</li>
+<li>Modifications to the <a href="lemon.html">Lemon parser generator</a> so that the parser tables
+ are 4 times smaller.</li>
+<li>Added support for user-defined functions implemented in C.</li>
+<li>Added support for new functions: <b>coalesce()</b>, <b>lower()</b>,
+ <b>upper()</b>, and <b>random()</b>
+<li>Added support for VIEWs.</li>
+<li>Added the subquery flattening optimizer.</li>
+<li>Modified the B-Tree and Pager modules so that disk pages that do not
+ contain real data (free pages) are not journaled and are not
+ written from memory back to the disk when they change. This does not
+ impact database integrity, since the
+ pages contain no real data, but it does make large INSERT operations
+ about 2.5 times faster and large DELETEs about 5 times faster.</li>
+<li>Made the CACHE_SIZE pragma persistent</li>
+<li>Added the SYNCHRONOUS pragma</li>
+<li>Fixed a bug that was causing updates to fail inside of transactions when
+ the database contained a temporary table.</li>
+
+</ol></p>
+<a name="version_2_3_3"></a>
+<h3>2002-02-19 (2.3.3)</h3><p><ol class='lessindent'>
+<li>Allow identifiers to be quoted in square brackets, for compatibility
+ with MS-Access.</li>
+<li>Added support for sub-queries in the FROM clause of a SELECT.</li>
+<li>More efficient implementation of sqliteFileExists() under Windows.
+ (by Joel Luscy)</li>
+<li>The VALUES clause of an INSERT can now contain expressions, including
+ scalar SELECT clauses.</li>
+<li>Added support for CREATE TABLE AS SELECT</li>
+<li>Bug fix: Creating and dropping a table all within a single
+ transaction was not working.</li>
+
+</ol></p>
+<a name="version_2_3_2"></a>
+<h3>2002-02-14 (2.3.2)</h3><p><ol class='lessindent'>
+<li>Bug fix: There was an incorrect assert() in pager.c. The real code was
+ all correct (as far as is known) so everything should work OK if you
+ compile with -DNDEBUG=1. When asserts are not disabled, there
+ could be a fault.</li>
+
+</ol></p>
+<a name="version_2_3_1"></a>
+<h3>2002-02-13 (2.3.1)</h3><p><ol class='lessindent'>
+<li>Bug fix: An assertion was failing if "PRAGMA full_column_names=ON;" was
+ set and you did a query that used a rowid, like this:
+ "SELECT rowid, * FROM ...".</li>
+
+</ol></p>
+<a name="version_2_3_0"></a>
+<h3>2002-02-03 (2.3.0)</h3><p><ol class='lessindent'>
+<li>Fix a serious bug in the INSERT command which was causing data to go
+ into the wrong columns if the data source was a SELECT and the INSERT
+ clauses specified its columns in some order other than the default.</li>
+<li>Added the ability to resolve constraint conflicts is ways other than
+ an abort and rollback. See the documentation on the "ON CONFLICT"
+ clause for details.</li>
+<li>Temporary files are now automatically deleted by the operating system
+ when closed. There are no more dangling temporary files on a program
+ crash. (If the OS crashes, fsck will delete the file after reboot
+ under Unix. I do not know what happens under Windows.)</li>
+<li>NOT NULL constraints are honored.</li>
+<li>The COPY command puts NULLs in columns whose data is '\N'.</li>
+<li>In the COPY command, backslash can now be used to escape a newline.</li>
+<li>Added the SANITY_CHECK pragma.</li>
+
+</ol></p>
+<a name="version_2_2_5"></a>
+<h3>2002-01-28 (2.2.5)</h3><p><ol class='lessindent'>
+<li>Important bug fix: the IN operator was not working if either the
+ left-hand or right-hand side was derived from an INTEGER PRIMARY KEY.</li>
+<li>Do not escape the backslash '\' character in the output of the
+ <b>sqlite</b> command-line access program.</li>
+
+</ol></p>
+<a name="version_2_2_4"></a>
+<h3>2002-01-22 (2.2.4)</h3><p><ol class='lessindent'>
+<li>The label to the right of an AS in the column list of a SELECT can now
+ be used as part of an expression in the WHERE, ORDER BY, GROUP BY, and/or
+ HAVING clauses.</li>
+<li>Fix a bug in the <b>-separator</b> command-line option to the <b>sqlite</b>
+ command.</li>
+<li>Fix a problem with the sort order when comparing upper-case strings against
+ characters greater than 'Z' but less than 'a'.</li>
+<li>Report an error if an ORDER BY or GROUP BY expression is constant.</li>
+
+</ol></p>
+<a name="version_2_2_3"></a>
+<h3>2002-01-16 (2.2.3)</h3><p><ol class='lessindent'>
+<li>Fix warning messages in VC++ 7.0. (Patches from nicolas352001)</li>
+<li>Make the library thread-safe. (The code is there and appears to work
+ but has not been stressed.)</li>
+<li>Added the new <b>sqlite_last_insert_rowid()</b> API function.</li>
+
+</ol></p>
+<a name="version_2_2_2"></a>
+<h3>2002-01-14 (2.2.2)</h3><p><ol class='lessindent'>
+<li>Bug fix: An assertion was failing when a temporary table with an index
+ had the same name as a permanent table created by a separate process.</li>
+<li>Bug fix: Updates to tables containing an INTEGER PRIMARY KEY and an
+ index could fail.</li>
+
+</ol></p>
+<a name="version_2_2_1"></a>
+<h3>2002-01-09 (2.2.1)</h3><p><ol class='lessindent'>
+<li>Bug fix: An attempt to delete a single row of a table with a WHERE
+ clause of "ROWID=x" when no such rowid exists was causing an error.</li>
+<li>Bug fix: Passing in a NULL as the 3rd parameter to <b>sqlite_open()</b>
+ would sometimes cause a coredump.</li>
+<li>Bug fix: DROP TABLE followed by a CREATE TABLE with the same name all
+ within a single transaction was causing a coredump.</li>
+<li>Makefile updates from A. Rottmann</li>
+
+</ol></p>
+<a name="version_2_2_0"></a>
+<h3>2001-12-22 (2.2.0)</h3><p><ol class='lessindent'>
+<li>Columns of type INTEGER PRIMARY KEY are actually used as the primary
+ key in underlying B-Tree representation of the table.</li>
+<li>Several obscure, unrelated bugs were found and fixed while
+ implemented the integer primary key change of the previous bullet.</li>
+<li>Added the ability to specify "*" as part of a larger column list in
+ the result section of a SELECT statement. For example:
+ <nobr>"<b>SELECT rowid, * FROM table1;</b>"</nobr>.</li>
+<li>Updates to comments and documentation.</li>
+
+</ol></p>
+<a name="version_2_1_7"></a>
+<h3>2001-12-15 (2.1.7)</h3><p><ol class='lessindent'>
+<li>Fix a bug in <b>CREATE TEMPORARY TABLE</b> which was causing the
+ table to be initially allocated in the main database file instead
+ of in the separate temporary file. This bug could cause the library
+ to suffer an assertion failure and it could cause "page leaks" in the
+ main database file.
+<li>Fix a bug in the b-tree subsystem that could sometimes cause the first
+ row of a table to be repeated during a database scan.</li>
+
+</ol></p>
+<a name="version_2_1_6"></a>
+<h3>2001-12-14 (2.1.6)</h3><p><ol class='lessindent'>
+<li>Fix the locking mechanism yet again to prevent
+ <b>sqlite_exec()</b> from returning SQLITE_PROTOCOL
+ unnecessarily. This time the bug was a race condition in
+ the locking code. This change affects both POSIX and Windows users.</li>
+
+</ol></p>
+<a name="version_2_1_5"></a>
+<h3>2001-12-06 (2.1.5)</h3><p><ol class='lessindent'>
+<li>Fix for another problem (unrelated to the one fixed in 2.1.4)
+ that sometimes causes <b>sqlite_exec()</b> to return SQLITE_PROTOCOL
+ unnecessarily. This time the bug was
+ in the POSIX locking code and should not effect Windows users.</li>
+
+</ol></p>
+<a name="version_2_1_4"></a>
+<h3>2001-12-05 (2.1.4)</h3><p><ol class='lessindent'>
+<li>Sometimes <b>sqlite_exec()</b> would return SQLITE_PROTOCOL when it
+ should have returned SQLITE_BUSY.</li>
+<li>The fix to the previous bug uncovered a deadlock which was also
+ fixed.</li>
+<li>Add the ability to put a single .command in the second argument
+ of the sqlite shell</li>
+<li>Updates to the FAQ</li>
+
+</ol></p>
+<a name="version_2_1_3"></a>
+<h3>2001-11-24 (2.1.3)</h3><p><ol class='lessindent'>
+<li>Fix the behavior of comparison operators
+ (ex: "<b>&lt;</b>", "<b>==</b>", etc.)
+ so that they are consistent with the order of entries in an index.</li>
+<li>Correct handling of integers in SQL expressions that are larger than
+ what can be represented by the machine integer.</li>
+
+</ol></p>
+<a name="version_2_1_2"></a>
+<h3>2001-11-23 (2.1.2)</h3><p><ol class='lessindent'>
+<li>Changes to support 64-bit architectures.</li>
+<li>Fix a bug in the locking protocol.</li>
+<li>Fix a bug that could (rarely) cause the database to become
+ unreadable after a DROP TABLE due to corruption to the SQLITE_MASTER
+ table.</li>
+<li>Change the code so that version 2.1.1 databases that were rendered
+ unreadable by the above bug can be read by this version of
+ the library even though the SQLITE_MASTER table is (slightly)
+ corrupted.</li>
+
+</ol></p>
+<a name="version_2_1_1"></a>
+<h3>2001-11-13 (2.1.1)</h3><p><ol class='lessindent'>
+<li>Bug fix: Sometimes arbitrary strings were passed to the callback
+ function when the actual value of a column was NULL.</li>
+
+</ol></p>
+<a name="version_2_1_0"></a>
+<h3>2001-11-12 (2.1.0)</h3><p><ol class='lessindent'>
+<li>Change the format of data records so that records up to 16MB in size
+ can be stored.</li>
+<li>Change the format of indices to allow for better query optimization.</li>
+<li>Implement the "LIMIT ... OFFSET ..." clause on SELECT statements.</li>
+
+</ol></p>
+<a name="version_2_0_8"></a>
+<h3>2001-11-03 (2.0.8)</h3><p><ol class='lessindent'>
+<li>Made selected parameters in API functions <b>const</b>. This should
+ be fully backwards compatible.</li>
+<li>Documentation updates</li>
+<li>Simplify the design of the VDBE by restricting the number of sorters
+ and lists to 1.
+ In practice, no more than one sorter and one list was ever used anyhow.
+ </li>
+
+</ol></p>
+<a name="version_2_0_7"></a>
+<h3>2001-10-22 (2.0.7)</h3><p><ol class='lessindent'>
+<li>Any UTF-8 character or ISO8859 character can be used as part of
+ an identifier.</li>
+<li>Patches from Christian Werner to improve ODBC compatibility and to
+ fix a bug in the round() function.</li>
+<li>Plug some memory leaks that use to occur if malloc() failed.
+ We have been and continue to be memory leak free as long as
+ malloc() works.</li>
+<li>Changes to some test scripts so that they work on Windows in
+ addition to Unix.</li>
+
+</ol></p>
+<a name="version_2_0_6"></a>
+<h3>2001-10-19 (2.0.6)</h3><p><ol class='lessindent'>
+<li>Added the EMPTY_RESULT_CALLBACKS pragma</li>
+<li>Support for UTF-8 and ISO8859 characters in column and table names.</li>
+<li>Bug fix: Compute correct table names with the FULL_COLUMN_NAMES pragma
+ is turned on.</li>
+
+</ol></p>
+<a name="version_2_0_5"></a>
+<h3>2001-10-15 (2.0.5)</h3><p><ol class='lessindent'>
+<li>Added the COUNT_CHANGES pragma.</li>
+<li>Changes to the FULL_COLUMN_NAMES pragma to help out the ODBC driver.</li>
+<li>Bug fix: "SELECT count(*)" was returning NULL for empty tables.
+ Now it returns 0.</li>
+
+</ol></p>
+<a name="version_2_0_4"></a>
+<h3>2001-10-13 (2.0.4)</h3><p><ol class='lessindent'>
+<li>Bug fix: an obscure and relatively harmless bug was causing one of
+ the tests to fail when gcc optimizations are turned on. This release
+ fixes the problem.</li>
+
+</ol></p>
+<a name="version_2_0_3"></a>
+<h3>2001-10-13 (2.0.3)</h3><p><ol class='lessindent'>
+<li>Bug fix: the <b>sqlite_busy_timeout()</b> function was delaying 1000
+ times too long before failing.</li>
+<li>Bug fix: an assertion was failing if the disk holding the database
+ file became full or stopped accepting writes for some other reason.
+ New tests were added to detect similar problems in the future.</li>
+<li>Added new operators: <b>&amp;</b> (bitwise-and)
+ <b>|</b> (bitwise-or), <b>~</b> (ones-complement),
+ <b>&lt;&lt;</b> (shift left), <b>&gt;&gt;</b> (shift right).</li>
+<li>Added new functions: <b>round()</b> and <b>abs()</b>.</li>
+
+</ol></p>
+<a name="version_2_0_2"></a>
+<h3>2001-10-09 (2.0.2)</h3><p><ol class='lessindent'>
+<li>Fix two bugs in the locking protocol. (One was masking the other.)</li>
+<li>Removed some unused "#include <unistd.h>" that were causing problems
+ for VC++.</li>
+<li>Fixed <b>sqlite.h</b> so that it is usable from C++</li>
+<li>Added the FULL_COLUMN_NAMES pragma. When set to "ON", the names of
+ columns are reported back as TABLE.COLUMN instead of just COLUMN.</li>
+<li>Added the TABLE_INFO() and INDEX_INFO() pragmas to help support the
+ ODBC interface.</li>
+<li>Added support for TEMPORARY tables and indices.</li>
+
+</ol></p>
+<a name="version_2_0_1"></a>
+<h3>2001-10-02 (2.0.1)</h3><p><ol class='lessindent'>
+<li>Remove some C++ style comments from btree.c so that it will compile
+ using compilers other than gcc.</li>
+<li>The ".dump" output from the shell does not work if there are embedded
+ newlines anywhere in the data. This is an old bug that was carried
+ forward from version 1.0. To fix it, the ".dump" output no longer
+ uses the COPY command. It instead generates INSERT statements.</li>
+<li>Extend the expression syntax to support "expr NOT NULL" (with a
+ space between the "NOT" and the "NULL") in addition to "expr NOTNULL"
+ (with no space).</li>
+
+</ol></p>
+<a name="version_2_0_0"></a>
+<h3>2001-09-28 (2.0.0)</h3><p><ol class='lessindent'>
+<li>Automatically build binaries for Linux and Windows and put them on
+ the website.</li>
+
+</ol></p>
+<h3>2001-09-28 (2.0-alpha-4)</h3><p><ol class='lessindent'>
+<li>Incorporate makefile patches form A. Rottmann to use LIBTOOL</li>
+
+</ol></p>
+<h3>2001-09-27 (2.0-alpha-3)</h3><p><ol class='lessindent'>
+<li>SQLite now honors the UNIQUE keyword in CREATE UNIQUE INDEX. Primary
+ keys are required to be unique.</li>
+<li>File format changed back to what it was for alpha-1</li>
+<li>Fixes to the rollback and locking behavior</li>
+
+</ol></p>
+<h3>2001-09-20 (2.0-alpha-2)</h3><p><ol class='lessindent'>
+<li>Initial release of version 2.0. The idea of renaming the library
+ to "SQLus" was abandoned in favor of keeping the "SQLite" name and
+ bumping the major version number.</li>
+<li>The pager and btree subsystems added back. They are now the only
+ available backend.</li>
+<li>The Dbbe abstraction and the GDBM and memory drivers were removed.</li>
+<li>Copyright on all code was disclaimed. The library is now in the
+ public domain.</li>
+
+</ol></p>
+<a name="version_1_0_32"></a>
+<h3>2001-07-23 (1.0.32)</h3><p><ol class='lessindent'>
+<li>Pager and btree subsystems removed. These will be used in a follow-on
+ SQL server library named "SQLus".</li>
+<li>Add the ability to use quoted strings as table and column names in
+ expressions.</li>
+
+</ol></p>
+<a name="version_1_0_31"></a>
+<h3>2001-04-15 (1.0.31)</h3><p><ol class='lessindent'>
+<li>Pager subsystem added but not yet used.</li>
+<li>More robust handling of out-of-memory errors.</li>
+<li>New tests added to the test suite.</li>
+
+</ol></p>
+<a name="version_1_0_30"></a>
+<h3>2001-04-06 (1.0.30)</h3><p><ol class='lessindent'>
+<li>Remove the <b>sqlite_encoding</b> TCL variable that was introduced
+ in the previous version.</li>
+<li>Add options <b>-encoding</b> and <b>-tcl-uses-utf</b> to the
+ <b>sqlite</b> TCL command.</li>
+<li>Add tests to make sure that tclsqlite was compiled using Tcl header
+ files and libraries that match.</li>
+
+</ol></p>
+<a name="version_1_0_29"></a>
+<h3>2001-04-05 (1.0.29)</h3><p><ol class='lessindent'>
+<li>The library now assumes data is stored as UTF-8 if the --enable-utf8
+ option is given to configure. The default behavior is to assume
+ iso8859-x, as it has always done. This only makes a difference for
+ LIKE and GLOB operators and the LENGTH and SUBSTR functions.</li>
+<li>If the library is not configured for UTF-8 and the Tcl library
+ is one of the newer ones that uses UTF-8 internally,
+ then a conversion from UTF-8 to iso8859 and
+ back again is done inside the TCL interface.</li>
+
+</ol></p>
+<a name="version_1_0_28"></a>
+<h3>2001-04-04 (1.0.28)</h3><p><ol class='lessindent'>
+<li>Added limited support for transactions. At this point, transactions
+ will do table locking on the GDBM backend. There is no support (yet)
+ for rollback or atomic commit.</li>
+<li>Added special column names ROWID, OID, and _ROWID_ that refer to the
+ unique random integer key associated with every row of every table.</li>
+<li>Additional tests added to the regression suite to cover the new ROWID
+ feature and the TCL interface bugs mentioned below.</li>
+<li>Changes to the <a href="lemon.html">Lemon parser generator</a> to help it work better when
+ compiled using MSVC.</li>
+<li>Bug fixes in the TCL interface identified by Oleg Oleinick.</li>
+
+</ol></p>
+<a name="version_1_0_27"></a>
+<h3>2001-03-20 (1.0.27)</h3><p><ol class='lessindent'>
+<li>When doing DELETE and UPDATE, the library used to write the record
+ numbers of records to be deleted or updated into a temporary file.
+ This is changed so that the record numbers are held in memory.</li>
+<li>The DELETE command without a WHILE clause just removes the database
+ files from the disk, rather than going through and deleting record
+ by record.</li>
+
+</ol></p>
+<a name="version_1_0_26"></a>
+<h3>2001-03-20 (1.0.26)</h3><p><ol class='lessindent'>
+<li>A serious bug fixed on Windows. Windows users should upgrade.
+ No impact to Unix.</li>
+
+</ol></p>
+<a name="version_1_0_25"></a>
+<h3>2001-03-15 (1.0.25)</h3><p><ol class='lessindent'>
+<li>Modify the test scripts to identify tests that depend on system
+ load and processor speed and
+ to warn the user that a failure of one of those (rare) tests does
+ not necessarily mean the library is malfunctioning. No changes to
+ code.
+ </li>
+
+</ol></p>
+<a name="version_1_0_24"></a>
+<h3>2001-03-14 (1.0.24)</h3><p><ol class='lessindent'>
+<li>Fix a bug which was causing
+ the UPDATE command to fail on systems where "malloc(0)" returns
+ NULL. The problem does not appear on Windows, Linux, or HPUX but does
+ cause the library to fail on QNX.
+ </li>
+
+</ol></p>
+<a name="version_1_0_23"></a>
+<h3>2001-02-20 (1.0.23)</h3><p><ol class='lessindent'>
+<li>An unrelated (and minor) bug from Mark Muranwski fixed. The algorithm
+ for figuring out where to put temporary files for a "memory:" database
+ was not working quite right.
+ </li>
+
+</ol></p>
+<a name="version_1_0_22"></a>
+<h3>2001-02-19 (1.0.22)</h3><p><ol class='lessindent'>
+<li>The previous fix was not quite right. This one seems to work better.
+ </li>
+
+</ol></p>
+<a name="version_1_0_21"></a>
+<h3>2001-02-19 (1.0.21)</h3><p><ol class='lessindent'>
+<li>The UPDATE statement was not working when the WHERE clause contained
+ some terms that could be satisfied using indices and other terms that
+ could not. Fixed.</li>
+
+</ol></p>
+<a name="version_1_0_20"></a>
+<h3>2001-02-11 (1.0.20)</h3><p><ol class='lessindent'>
+<li>Merge development changes into the main trunk. Future work toward
+ using a BTree file structure will use a separate CVS source tree. This
+ CVS tree will continue to support the GDBM version of SQLite only.</li>
+
+</ol></p>
+<a name="version_1_0_19"></a>
+<h3>2001-02-06 (1.0.19)</h3><p><ol class='lessindent'>
+<li>Fix a strange (but valid) C declaration that was causing problems
+ for QNX. No logical changes.</li>
+
+</ol></p>
+<a name="version_1_0_18"></a>
+<h3>2001-01-04 (1.0.18)</h3><p><ol class='lessindent'>
+<li>Print the offending SQL statement when an error occurs.</li>
+<li>Do not require commas between constraints in CREATE TABLE statements.</li>
+<li>Added the "-echo" option to the shell.</li>
+<li>Changes to comments.</li>
+
+</ol></p>
+<a name="version_1_0_17"></a>
+<h3>2000-12-10 (1.0.17)</h3><p><ol class='lessindent'>
+<li>Rewrote <b>sqlite_complete()</b> to make it faster.</li>
+<li>Minor tweaks to other code to make it run a little faster.</li>
+<li>Added new tests for <b>sqlite_complete()</b> and for memory leaks.</li>
+
+</ol></p>
+<a name="version_1_0_16"></a>
+<h3>2000-11-28 (1.0.16)</h3><p><ol class='lessindent'>
+<li>Documentation updates. Mostly fixing of typos and spelling errors.</li>
+
+</ol></p>
+<a name="version_1_0_15"></a>
+<h3>2000-10-23 (1.0.15)</h3><p><ol class='lessindent'>
+<li>Documentation updates</li>
+<li>Some sanity checking code was removed from the inner loop of vdbe.c
+ to help the library to run a little faster. The code is only
+ removed if you compile with -DNDEBUG.</li>
+
+</ol></p>
+<a name="version_1_0_14"></a>
+<h3>2000-10-19 (1.0.14)</h3><p><ol class='lessindent'>
+<li>Added a "memory:" backend driver that stores its database in an
+ in-memory hash table.</li>
+
+</ol></p>
+<a name="version_1_0_13"></a>
+<h3>2000-10-19 (1.0.13)</h3><p><ol class='lessindent'>
+<li>Break out the GDBM driver into a separate file in anticipation
+ to added new drivers.</li>
+<li>Allow the name of a database to be prefixed by the driver type.
+ For now, the only driver type is "gdbm:".</li>
+
+</ol></p>
+<a name="version_1_0_12"></a>
+<h3>2000-10-17 (1.0.12)</h3><p><ol class='lessindent'>
+<li>Fixed an off-by-one error that was causing a coredump in
+ the '%q' format directive of the new
+ <b>sqlite_..._printf()</b> routines.</li>
+<li>Added the <b>sqlite_interrupt()</b> interface.</li>
+<li>In the shell, <b>sqlite_interrupt()</b> is invoked when the
+ user presses Control-C</li>
+<li>Fixed some instances where <b>sqlite_exec()</b> was
+ returning the wrong error code.</li>
+
+</ol></p>
+<a name="version_1_0_10"></a>
+<h3>2000-10-11 (1.0.10)</h3><p><ol class='lessindent'>
+<li>Added notes on how to compile for Windows95/98.</li>
+<li>Removed a few variables that were not being used. Etc.</li>
+
+</ol></p>
+<a name="version_1_0_9"></a>
+<h3>2000-10-09 (1.0.9)</h3><p><ol class='lessindent'>
+<li>Added the <b>sqlite_..._printf()</b> interface routines.</li>
+<li>Modified the <b>sqlite</b> shell program to use the new interface
+ routines.</li>
+<li>Modified the <b>sqlite</b> shell program to print the schema for
+ the built-in SQLITE_MASTER table, if explicitly requested.</li>
+
+</ol></p>
+<a name="version_1_0_8"></a>
+<h3>2000-09-30 (1.0.8)</h3><p><ol class='lessindent'>
+<li>Begin writing documentation on the TCL interface.</li>
+
+</ol></p>
+<h3>2000-09-29 (Not Released)</h3><p><ol class='lessindent'>
+<li>Added the <b>sqlite_get_table()</b> API</li>
+<li>Updated the documentation for due to the above change.</li>
+<li>Modified the <b>sqlite</b> shell to make use of the new
+ sqlite_get_table() API in order to print a list of tables
+ in multiple columns, similar to the way "ls" prints filenames.</li>
+<li>Modified the <b>sqlite</b> shell to print a semicolon at the
+ end of each CREATE statement in the output of the ".schema" command.</li>
+
+</ol></p>
+<h3>2000-09-21 (Not Released)</h3><p><ol class='lessindent'>
+<li>Change the tclsqlite "eval" method to return a list of results if
+ no callback script is specified.</li>
+<li>Change tclsqlite.c to use the Tcl_Obj interface</li>
+<li>Add tclsqlite.c to the libsqlite.a library</li>
+
+</ol></p>
+<a name="version_1_0_5"></a>
+<h3>2000-09-14 (1.0.5)</h3><p><ol class='lessindent'>
+<li>Changed the print format for floating point values from "%g" to "%.15g".
+ </li>
+<li>Changed the comparison function so that numbers in exponential notation
+ (ex: 1.234e+05) sort in numerical order.</li>
+
+</ol></p>
+<a name="version_1_0_4"></a>
+<h3>2000-08-28 (1.0.4)</h3><p><ol class='lessindent'>
+<li>Added functions <b>length()</b> and <b>substr()</b>.</li>
+<li>Fix a bug in the <b>sqlite</b> shell program that was causing
+ a coredump when the output mode was "column" and the first row
+ of data contained a NULL.</li>
+
+</ol></p>
+<a name="version_1_0_3"></a>
+<h3>2000-08-22 (1.0.3)</h3><p><ol class='lessindent'>
+<li>In the sqlite shell, print the "Database opened READ ONLY" message
+ to stderr instead of stdout.</li>
+<li>In the sqlite shell, now print the version number on initial startup.</li>
+<li>Add the <b>sqlite_version&#91;&#93;</b> string constant to the library</li>
+<li>Makefile updates</li>
+<li>Bug fix: incorrect VDBE code was being generated for the following
+ circumstance: a query on an indexed table containing a WHERE clause with
+ an IN operator that had a subquery on its right-hand side.</li>
+
+</ol></p>
+<a name="version_1_0_1"></a>
+<h3>2000-08-18 (1.0.1)</h3><p><ol class='lessindent'>
+<li>Fix a bug in the configure script.</li>
+<li>Minor revisions to the website.</li>
+
+</ol></p>
+<a name="version_1_0"></a>
+<h3>2000-08-17 (1.0)</h3><p><ol class='lessindent'>
+<li>Change the <b>sqlite</b> program so that it can read
+ databases for which it lacks write permission. (It used to
+ refuse all access if it could not write.)</li>
+
+</ol></p>
+<h3>2000-08-09</h3><p><ol class='lessindent'>
+<li>Treat carriage returns as white space.</li>
+
+</ol></p>
+<h3>2000-08-08</h3><p><ol class='lessindent'>
+<li>Added pattern matching to the ".table" command in the "sqlite"
+command shell.</li>
+
+</ol></p>
+<h3>2000-08-04</h3><p><ol class='lessindent'>
+<li>Documentation updates</li>
+<li>Added "busy" and "timeout" methods to the Tcl interface</li>
+
+</ol></p>
+<h3>2000-08-03</h3><p><ol class='lessindent'>
+<li>File format version number was being stored in sqlite_master.tcl
+ multiple times. This was harmless, but unnecessary. It is now fixed.</li>
+
+</ol></p>
+<h3>2000-08-02</h3><p><ol class='lessindent'>
+<li>The file format for indices was changed slightly in order to work
+ around an inefficiency that can sometimes come up with GDBM when
+ there are large indices having many entries with the same key.
+ <font color="red">** Incompatible Change **</font></li>
+
+</ol></p>
+<h3>2000-08-01</h3><p><ol class='lessindent'>
+<li>The parser's stack was overflowing on a very long UPDATE statement.
+ This is now fixed.</li>
+
+</ol></p>
+<h3>2000-07-31</h3><p><ol class='lessindent'>
+<li>Finish the <a href="vdbe.html">VDBE tutorial</a>.</li>
+<li>Added documentation on compiling to WinNT.</li>
+<li>Fix a configuration program for WinNT.</li>
+<li>Fix a configuration problem for HPUX.</li>
+
+</ol></p>
+<h3>2000-07-29</h3><p><ol class='lessindent'>
+<li>Better labels on column names of the result.</li>
+
+</ol></p>
+<h3>2000-07-28</h3><p><ol class='lessindent'>
+<li>Added the <b>sqlite_busy_handler()</b>
+ and <b>sqlite_busy_timeout()</b> interface.</li>
+
+</ol></p>
+<h3>2000-06-23</h3><p><ol class='lessindent'>
+<li>Begin writing the <a href="vdbe.html">VDBE tutorial</a>.</li>
+
+</ol></p>
+<h3>2000-06-21</h3><p><ol class='lessindent'>
+<li>Clean up comments and variable names. Changes to documentation.
+ No functional changes to the code.</li>
+
+</ol></p>
+<h3>2000-06-19</h3><p><ol class='lessindent'>
+<li>Column names in UPDATE statements were case sensitive.
+ This mistake has now been fixed.</li>
+
+</ol></p>
+<h3>2000-06-18</h3><p><ol class='lessindent'>
+<li>Added the concatenate string operator (||)</li>
+
+</ol></p>
+<h3>2000-06-12</h3><p><ol class='lessindent'>
+<li>Added the fcnt() function to the SQL interpreter. The fcnt() function
+ returns the number of database "Fetch" operations that have occurred.
+ This function is designed for use in test scripts to verify that
+ queries are efficient and appropriately optimized. Fcnt() has no other
+ useful purpose, as far as I know.</li>
+<li>Added a bunch more tests that take advantage of the new fcnt() function.
+ The new tests did not uncover any new problems.</li>
+
+</ol></p>
+<h3>2000-06-08</h3><p><ol class='lessindent'>
+<li>Added lots of new test cases</li>
+<li>Fix a few bugs discovered while adding test cases</li>
+<li>Begin adding lots of new documentation</li>
+
+</ol></p>
+<h3>2000-06-06</h3><p><ol class='lessindent'>
+<li>Added compound select operators: <B>UNION</b>, <b>UNION ALL</B>,
+<b>INTERSECT</b>, and <b>EXCEPT</b></li>
+<li>Added support for using <b>(SELECT ...)</b> within expressions</li>
+<li>Added support for <b>IN</b> and <b>BETWEEN</b> operators</li>
+<li>Added support for <b>GROUP BY</b> and <b>HAVING</b></li>
+<li>NULL values are now reported to the callback as a NULL pointer
+ rather than an empty string.</li>
+
+</ol></p>
+<h3>2000-06-03</h3><p><ol class='lessindent'>
+<li>Added support for default values on columns of a table.</li>
+<li>Improved test coverage. Fixed a few obscure bugs found by the
+improved tests.</li>
+
+</ol></p>
+<h3>2000-06-02</h3><p><ol class='lessindent'>
+<li>All database files to be modified by an UPDATE, INSERT or DELETE are
+now locked before any changes are made to any files.
+This makes it safe (I think) to access
+the same database simultaneously from multiple processes.</li>
+<li>The code appears stable so we are now calling it "beta".</li>
+
+</ol></p>
+<h3>2000-06-01</h3><p><ol class='lessindent'>
+<li>Better support for file locking so that two or more processes
+(or threads)
+can access the same database simultaneously. More work needed in
+this area, though.</li>
+
+</ol></p>
+<h3>2000-05-31</h3><p><ol class='lessindent'>
+<li>Added support for aggregate functions (Ex: <b>COUNT(*)</b>, <b>MIN(...)</b>)
+to the SELECT statement.</li>
+<li>Added support for <B>SELECT DISTINCT ...</B></li>
+
+</ol></p>
+<h3>2000-05-30</h3><p><ol class='lessindent'>
+<li>Added the <b>LIKE</b> operator.</li>
+<li>Added a <b>GLOB</b> operator: similar to <B>LIKE</B>
+but it uses Unix shell globbing wildcards instead of the '%'
+and '_' wildcards of SQL.</li>
+<li>Added the <B>COPY</b> command patterned after
+<a href="http://www.postgresql.org/">PostgreSQL</a> so that SQLite
+can now read the output of the <b>pg_dump</b> database dump utility
+of PostgreSQL.</li>
+<li>Added a <B>VACUUM</B> command that calls the
+<b>gdbm_reorganize()</b> function on the underlying database
+files.</li>
+<li>And many, many bug fixes...</li>
+
+</ol></p>
+<h3>2000-05-29</h3><p><ol class='lessindent'>
+<li>Initial Public Release of Alpha code</li>
+
+</ol></p>
+
+</dl>
+
+
diff --git a/www/chronology.html b/www/chronology.html
new file mode 100644
index 0000000..965e137
--- /dev/null
+++ b/www/chronology.html
@@ -0,0 +1,923 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>History Of SQLite Releases</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1 align=center>History Of SQLite Releases</h1>
+
+<center>
+<table border=0 cellspacing=0 id='chrontab'>
+<thead>
+<tr><th class='sort desc'>Date<th class='sort none'>Version
+</thead>
+<tbody>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=df5c253c0b&y=ci'>2022-12-28</a></td>
+<td width='100' align='center' data-sortkey='3400100'><a href="releaselog/3_40_1.html">3.40.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=89c459e766&y=ci'>2022-11-16</a></td>
+<td width='100' align='center' data-sortkey='3400000'><a href="releaselog/3_40_0.html">3.40.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a29f994989&y=ci'>2022-09-29</a></td>
+<td width='100' align='center' data-sortkey='3390400'><a href="releaselog/3_39_4.html">3.39.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4635f4a69c&y=ci'>2022-09-05</a></td>
+<td width='100' align='center' data-sortkey='3390300'><a href="releaselog/3_39_3.html">3.39.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=698edb7753&y=ci'>2022-07-21</a></td>
+<td width='100' align='center' data-sortkey='3390200'><a href="releaselog/3_39_2.html">3.39.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7c16541a0e&y=ci'>2022-07-13</a></td>
+<td width='100' align='center' data-sortkey='3390100'><a href="releaselog/3_39_1.html">3.39.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=14e166f40d&y=ci'>2022-06-25</a></td>
+<td width='100' align='center' data-sortkey='3390000'><a href="releaselog/3_39_0.html">3.39.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=78d9c993d4&y=ci'>2022-05-06</a></td>
+<td width='100' align='center' data-sortkey='3380500'><a href="releaselog/3_38_5.html">3.38.5</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d402f49871&y=ci'>2022-05-04</a></td>
+<td width='100' align='center' data-sortkey='3380400'><a href="releaselog/3_38_4.html">3.38.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=9547e2c38a&y=ci'>2022-04-27</a></td>
+<td width='100' align='center' data-sortkey='3380300'><a href="releaselog/3_38_3.html">3.38.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d33c709cc0&y=ci'>2022-03-26</a></td>
+<td width='100' align='center' data-sortkey='3380200'><a href="releaselog/3_38_2.html">3.38.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=38c210fdd2&y=ci'>2022-03-12</a></td>
+<td width='100' align='center' data-sortkey='3380100'><a href="releaselog/3_38_1.html">3.38.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=40fa792d35&y=ci'>2022-02-22</a></td>
+<td width='100' align='center' data-sortkey='3380000'><a href="releaselog/3_38_0.html">3.38.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=872ba256cb&y=ci'>2022-01-06</a></td>
+<td width='100' align='center' data-sortkey='3370200'><a href="releaselog/3_37_2.html">3.37.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=378629bf2e&y=ci'>2021-12-30</a></td>
+<td width='100' align='center' data-sortkey='3370100'><a href="releaselog/3_37_1.html">3.37.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=bd41822c74&y=ci'>2021-11-27</a></td>
+<td width='100' align='center' data-sortkey='3370000'><a href="releaselog/3_37_0.html">3.37.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=5c9a6c0687&y=ci'>2021-06-18</a></td>
+<td width='100' align='center' data-sortkey='3360000'><a href="releaselog/3_36_0.html">3.36.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1b256d97b5&y=ci'>2021-04-19</a></td>
+<td width='100' align='center' data-sortkey='3350500'><a href="releaselog/3_35_5.html">3.35.5</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=5d4c65779d&y=ci'>2021-04-02</a></td>
+<td width='100' align='center' data-sortkey='3350400'><a href="releaselog/3_35_4.html">3.35.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4c5e6c200a&y=ci'>2021-03-26</a></td>
+<td width='100' align='center' data-sortkey='3350300'><a href="releaselog/3_35_3.html">3.35.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ea80f3002f&y=ci'>2021-03-17</a></td>
+<td width='100' align='center' data-sortkey='3350200'><a href="releaselog/3_35_2.html">3.35.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=aea12399bf&y=ci'>2021-03-15</a></td>
+<td width='100' align='center' data-sortkey='3350100'><a href="releaselog/3_35_1.html">3.35.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=acd63062eb&y=ci'>2021-03-12</a></td>
+<td width='100' align='center' data-sortkey='3350000'><a href="releaselog/3_35_0.html">3.35.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=10e20c0b43&y=ci'>2021-01-20</a></td>
+<td width='100' align='center' data-sortkey='3340100'><a href="releaselog/3_34_1.html">3.34.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a26b6597e3&y=ci'>2020-12-01</a></td>
+<td width='100' align='center' data-sortkey='3340000'><a href="releaselog/3_34_0.html">3.34.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=fca8dc8b57&y=ci'>2020-08-14</a></td>
+<td width='100' align='center' data-sortkey='3330000'><a href="releaselog/3_33_0.html">3.33.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7ebdfa80be&y=ci'>2020-06-18</a></td>
+<td width='100' align='center' data-sortkey='3320300'><a href="releaselog/3_32_3.html">3.32.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ec02243ea6&y=ci'>2020-06-04</a></td>
+<td width='100' align='center' data-sortkey='3320200'><a href="releaselog/3_32_2.html">3.32.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0c1fcf4711&y=ci'>2020-05-25</a></td>
+<td width='100' align='center' data-sortkey='3320100'><a href="releaselog/3_32_1.html">3.32.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=5998789c9c&y=ci'>2020-05-22</a></td>
+<td width='100' align='center' data-sortkey='3320000'><a href="releaselog/3_32_0.html">3.32.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=3bfa9cc97d&y=ci'>2020-01-27</a></td>
+<td width='100' align='center' data-sortkey='3310100'><a href="releaselog/3_31_1.html">3.31.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f6affdd416&y=ci'>2020-01-22</a></td>
+<td width='100' align='center' data-sortkey='3310000'><a href="releaselog/3_31_0.html">3.31.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=18db032d05&y=ci'>2019-10-10</a></td>
+<td width='100' align='center' data-sortkey='3300100'><a href="releaselog/3_30_1.html">3.30.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c20a353364&y=ci'>2019-10-04</a></td>
+<td width='100' align='center' data-sortkey='3300000'><a href="releaselog/3_30_0.html">3.30.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=fc82b73eaa&y=ci'>2019-07-10</a></td>
+<td width='100' align='center' data-sortkey='3290000'><a href="releaselog/3_29_0.html">3.29.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=884b4b7e50&y=ci'>2019-04-16</a></td>
+<td width='100' align='center' data-sortkey='3280000'><a href="releaselog/3_28_0.html">3.28.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=bd49a8271d&y=ci'>2019-02-25</a></td>
+<td width='100' align='center' data-sortkey='3270200'><a href="releaselog/3_27_2.html">3.27.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0eca3dd3d3&y=ci'>2019-02-08</a></td>
+<td width='100' align='center' data-sortkey='3270100'><a href="releaselog/3_27_1.html">3.27.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=97744701c3&y=ci'>2019-02-07</a></td>
+<td width='100' align='center' data-sortkey='3270000'><a href="releaselog/3_27_0.html">3.27.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=bf8c1b2b7a&y=ci'>2018-12-01</a></td>
+<td width='100' align='center' data-sortkey='3260000'><a href="releaselog/3_26_0.html">3.26.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=89e099fbe5&y=ci'>2018-11-05</a></td>
+<td width='100' align='center' data-sortkey='3250300'><a href="releaselog/3_25_3.html">3.25.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=fb90e7189a&y=ci'>2018-09-25</a></td>
+<td width='100' align='center' data-sortkey='3250200'><a href="releaselog/3_25_2.html">3.25.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=2ac9003de4&y=ci'>2018-09-18</a></td>
+<td width='100' align='center' data-sortkey='3250100'><a href="releaselog/3_25_1.html">3.25.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b63af6c3bd&y=ci'>2018-09-15</a></td>
+<td width='100' align='center' data-sortkey='3250000'><a href="releaselog/3_25_0.html">3.25.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c7ee083322&y=ci'>2018-06-04</a></td>
+<td width='100' align='center' data-sortkey='3240000'><a href="releaselog/3_24_0.html">3.24.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4bb2294022&y=ci'>2018-04-10</a></td>
+<td width='100' align='center' data-sortkey='3230100'><a href="releaselog/3_23_1.html">3.23.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=736b53f57f&y=ci'>2018-04-02</a></td>
+<td width='100' align='center' data-sortkey='3230000'><a href="releaselog/3_23_0.html">3.23.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0c55d17973&y=ci'>2018-01-22</a></td>
+<td width='100' align='center' data-sortkey='3220000'><a href="releaselog/3_22_0.html">3.22.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1a584e4999&y=ci'>2017-10-24</a></td>
+<td width='100' align='center' data-sortkey='3210000'><a href="releaselog/3_21_0.html">3.21.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8d3a7ea6c5&y=ci'>2017-08-24</a></td>
+<td width='100' align='center' data-sortkey='3200100'><a href="releaselog/3_20_1.html">3.20.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=9501e22dfe&y=ci'>2017-08-01</a></td>
+<td width='100' align='center' data-sortkey='3200000'><a href="releaselog/3_20_0.html">3.20.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=036ebf729e&y=ci'>2017-06-17</a></td>
+<td width='100' align='center' data-sortkey='3180200'><a href="releaselog/3_18_2.html">3.18.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=77bb46233d&y=ci'>2017-06-16</a></td>
+<td width='100' align='center' data-sortkey='3180100'><a href="releaselog/3_18_1.html">3.18.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0ee482a1e0&y=ci'>2017-06-08</a></td>
+<td width='100' align='center' data-sortkey='3190300'><a href="releaselog/3_19_3.html">3.19.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=edb4e819b0&y=ci'>2017-05-25</a></td>
+<td width='100' align='center' data-sortkey='3190200'><a href="releaselog/3_19_2.html">3.19.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f6d7b988f4&y=ci'>2017-05-24</a></td>
+<td width='100' align='center' data-sortkey='3190100'><a href="releaselog/3_19_1.html">3.19.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=28a94eb282&y=ci'>2017-05-22</a></td>
+<td width='100' align='center' data-sortkey='3190000'><a href="releaselog/3_19_0.html">3.19.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=424a0d3803&y=ci'>2017-03-28</a></td>
+<td width='100' align='center' data-sortkey='3180000'><a href="releaselog/3_18_0.html">3.18.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ada05cfa86&y=ci'>2017-02-13</a></td>
+<td width='100' align='center' data-sortkey='3170000'><a href="releaselog/3_17_0.html">3.17.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a65a62893c&y=ci'>2017-01-06</a></td>
+<td width='100' align='center' data-sortkey='3160200'><a href="releaselog/3_16_2.html">3.16.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=979f043928&y=ci'>2017-01-03</a></td>
+<td width='100' align='center' data-sortkey='3160100'><a href="releaselog/3_16_1.html">3.16.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=04ac0b75b1&y=ci'>2017-01-02</a></td>
+<td width='100' align='center' data-sortkey='3160000'><a href="releaselog/3_16_0.html">3.16.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=bbd85d235f&y=ci'>2016-11-28</a></td>
+<td width='100' align='center' data-sortkey='3150200'><a href="releaselog/3_15_2.html">3.15.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1136863c76&y=ci'>2016-11-04</a></td>
+<td width='100' align='center' data-sortkey='3150100'><a href="releaselog/3_15_1.html">3.15.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=707875582f&y=ci'>2016-10-14</a></td>
+<td width='100' align='center' data-sortkey='3150000'><a href="releaselog/3_15_0.html">3.15.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=29dbef4b85&y=ci'>2016-09-12</a></td>
+<td width='100' align='center' data-sortkey='3140200'><a href="releaselog/3_14_2.html">3.14.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a12d805977&y=ci'>2016-08-11</a></td>
+<td width='100' align='center' data-sortkey='3140100'><a href="releaselog/3_14_1.html">3.14.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d5e9805702&y=ci'>2016-08-08</a></td>
+<td width='100' align='center' data-sortkey='3140000'><a href="releaselog/3_14.html">3.14</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=fc49f556e4&y=ci'>2016-05-18</a></td>
+<td width='100' align='center' data-sortkey='3130000'><a href="releaselog/3_13_0.html">3.13.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=92dc59fd5a&y=ci'>2016-04-18</a></td>
+<td width='100' align='center' data-sortkey='3120200'><a href="releaselog/3_12_2.html">3.12.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=fe7d3b75fe&y=ci'>2016-04-08</a></td>
+<td width='100' align='center' data-sortkey='3120100'><a href="releaselog/3_12_1.html">3.12.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=dfbfd34b3f&y=ci'>2016-03-31</a></td>
+<td width='100' align='center' data-sortkey='3090300'><a href="releaselog/3_9_3.html">3.9.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=e9bb4cf40f&y=ci'>2016-03-29</a></td>
+<td width='100' align='center' data-sortkey='3120000'><a href="releaselog/3_12_0.html">3.12.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f047920ce1&y=ci'>2016-03-03</a></td>
+<td width='100' align='center' data-sortkey='3110100'><a href="releaselog/3_11_1.html">3.11.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=3d862f207e&y=ci'>2016-02-15</a></td>
+<td width='100' align='center' data-sortkey='3110000'><a href="releaselog/3_11_0.html">3.11.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=17efb4209f&y=ci'>2016-01-20</a></td>
+<td width='100' align='center' data-sortkey='3100200'><a href="releaselog/3_10_2.html">3.10.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=254419c367&y=ci'>2016-01-14</a></td>
+<td width='100' align='center' data-sortkey='3100100'><a href="releaselog/3_10_1.html">3.10.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=fd0a50f079&y=ci'>2016-01-06</a></td>
+<td width='100' align='center' data-sortkey='3100000'><a href="releaselog/3_10_0.html">3.10.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=bda77dda96&y=ci'>2015-11-02</a></td>
+<td width='100' align='center' data-sortkey='3090200'><a href="releaselog/3_9_2.html">3.9.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=767c1727fe&y=ci'>2015-10-16</a></td>
+<td width='100' align='center' data-sortkey='3090100'><a href="releaselog/3_9_1.html">3.9.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a721fc0d89&y=ci'>2015-10-14</a></td>
+<td width='100' align='center' data-sortkey='3090000'><a href="releaselog/3_9_0.html">3.9.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=cf538e2783&y=ci'>2015-07-29</a></td>
+<td width='100' align='center' data-sortkey='3081101'><a href="releaselog/3_8_11_1.html">3.8.11.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b8e92227a4&y=ci'>2015-07-27</a></td>
+<td width='100' align='center' data-sortkey='3081100'><a href="releaselog/3_8_11.html">3.8.11</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=2ef4f3a5b1&y=ci'>2015-05-20</a></td>
+<td width='100' align='center' data-sortkey='3081002'><a href="releaselog/3_8_10_2.html">3.8.10.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=05b4b1f2a9&y=ci'>2015-05-09</a></td>
+<td width='100' align='center' data-sortkey='3081001'><a href="releaselog/3_8_10_1.html">3.8.10.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=cf975957b9&y=ci'>2015-05-07</a></td>
+<td width='100' align='center' data-sortkey='3081000'><a href="releaselog/3_8_10.html">3.8.10</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8a8ffc862e&y=ci'>2015-04-08</a></td>
+<td width='100' align='center' data-sortkey='3080900'><a href="releaselog/3_8_9.html">3.8.9</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=9d6c1880fb&y=ci'>2015-02-25</a></td>
+<td width='100' align='center' data-sortkey='3080803'><a href="releaselog/3_8_8_3.html">3.8.8.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7757fc7212&y=ci'>2015-01-30</a></td>
+<td width='100' align='center' data-sortkey='3080802'><a href="releaselog/3_8_8_2.html">3.8.8.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f73337e3e2&y=ci'>2015-01-20</a></td>
+<td width='100' align='center' data-sortkey='3080801'><a href="releaselog/3_8_8_1.html">3.8.8.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7d68a42fac&y=ci'>2015-01-16</a></td>
+<td width='100' align='center' data-sortkey='3080800'><a href="releaselog/3_8_8.html">3.8.8</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f66f7a17b7&y=ci'>2014-12-09</a></td>
+<td width='100' align='center' data-sortkey='3080704'><a href="releaselog/3_8_7_4.html">3.8.7.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=647e77e853&y=ci'>2014-12-05</a></td>
+<td width='100' align='center' data-sortkey='3080703'><a href="releaselog/3_8_7_3.html">3.8.7.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=2ab564bf96&y=ci'>2014-11-18</a></td>
+<td width='100' align='center' data-sortkey='3080702'><a href="releaselog/3_8_7_2.html">3.8.7.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=3b7b72c468&y=ci'>2014-10-29</a></td>
+<td width='100' align='center' data-sortkey='3080701'><a href="releaselog/3_8_7_1.html">3.8.7.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1581c30c38&y=ci'>2014-10-22</a></td>
+<td width='100' align='center' data-sortkey='3080601'>3.8.6.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=e4ab094f8a&y=ci'>2014-10-17</a></td>
+<td width='100' align='center' data-sortkey='3080700'><a href="releaselog/3_8_7.html">3.8.7</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=9491ba7d73&y=ci'>2014-08-15</a></td>
+<td width='100' align='center' data-sortkey='3080600'><a href="releaselog/3_8_6.html">3.8.6</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b1ed4f2a34&y=ci'>2014-06-04</a></td>
+<td width='100' align='center' data-sortkey='3080500'><a href="releaselog/3_8_5.html">3.8.5</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a611fa96c4&y=ci'>2014-04-03</a></td>
+<td width='100' align='center' data-sortkey='3080403'><a href="releaselog/3_8_4_3.html">3.8.4.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=02ea166372&y=ci'>2014-03-26</a></td>
+<td width='100' align='center' data-sortkey='3080402'><a href="releaselog/3_8_4_2.html">3.8.4.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=018d317b12&y=ci'>2014-03-11</a></td>
+<td width='100' align='center' data-sortkey='3080401'><a href="releaselog/3_8_4_1.html">3.8.4.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=530a1ee7dc&y=ci'>2014-03-10</a></td>
+<td width='100' align='center' data-sortkey='3080400'><a href="releaselog/3_8_4.html">3.8.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ea3317a480&y=ci'>2014-02-11</a></td>
+<td width='100' align='center' data-sortkey='3080301'><a href="releaselog/3_8_3_1.html">3.8.3.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=e816dd9246&y=ci'>2014-02-03</a></td>
+<td width='100' align='center' data-sortkey='3080300'><a href="releaselog/3_8_3.html">3.8.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=27392118af&y=ci'>2013-12-06</a></td>
+<td width='100' align='center' data-sortkey='3080200'><a href="releaselog/3_8_2.html">3.8.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c78be6d786&y=ci'>2013-10-17</a></td>
+<td width='100' align='center' data-sortkey='3080100'><a href="releaselog/3_8_1.html">3.8.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7dd4968f23&y=ci'>2013-09-03</a></td>
+<td width='100' align='center' data-sortkey='3080002'><a href="releaselog/3_8_0_2.html">3.8.0.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=352362bc01&y=ci'>2013-08-29</a></td>
+<td width='100' align='center' data-sortkey='3080001'><a href="releaselog/3_8_0_1.html">3.8.0.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f64cd21e2e&y=ci'>2013-08-26</a></td>
+<td width='100' align='center' data-sortkey='3080000'><a href="releaselog/3_8_0.html">3.8.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=118a3b3569&y=ci'>2013-05-20</a></td>
+<td width='100' align='center' data-sortkey='3071700'><a href="releaselog/3_7_17.html">3.7.17</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=cbea02d938&y=ci'>2013-04-12</a></td>
+<td width='100' align='center' data-sortkey='3071602'><a href="releaselog/3_7_16_2.html">3.7.16.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=527231bc67&y=ci'>2013-03-29</a></td>
+<td width='100' align='center' data-sortkey='3071601'><a href="releaselog/3_7_16_1.html">3.7.16.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=66d5f2b767&y=ci'>2013-03-18</a></td>
+<td width='100' align='center' data-sortkey='3071600'><a href="releaselog/3_7_16.html">3.7.16</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c0e09560d2&y=ci'>2013-01-09</a></td>
+<td width='100' align='center' data-sortkey='3071502'><a href="releaselog/3_7_15_2.html">3.7.15.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=6b85b767d0&y=ci'>2012-12-19</a></td>
+<td width='100' align='center' data-sortkey='3071501'><a href="releaselog/3_7_15_1.html">3.7.15.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=cd0b37c526&y=ci'>2012-12-12</a></td>
+<td width='100' align='center' data-sortkey='3071500'><a href="releaselog/3_7_15.html">3.7.15</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=091570e46d&y=ci'>2012-10-04</a></td>
+<td width='100' align='center' data-sortkey='3071401'><a href="releaselog/3_7_14_1.html">3.7.14.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c0d89d4a97&y=ci'>2012-09-03</a></td>
+<td width='100' align='center' data-sortkey='3071400'><a href="releaselog/3_7_14.html">3.7.14</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f5b5a13f73&y=ci'>2012-06-11</a></td>
+<td width='100' align='center' data-sortkey='3071300'><a href="releaselog/3_7_13.html">3.7.13</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=6d326d44fd&y=ci'>2012-05-22</a></td>
+<td width='100' align='center' data-sortkey='3071201'><a href="releaselog/3_7_12_1.html">3.7.12.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d9348b2a4e&y=ci'>2012-05-14</a></td>
+<td width='100' align='center' data-sortkey='3071200'><a href="releaselog/3_7_12.html">3.7.12</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=be71d2f667&y=ci'>2012-05-14</a></td>
+<td width='100' align='center' data-sortkey='3071200'><a href="releaselog/3_7_12.html">3.7.12</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8654aa9540&y=ci'>2012-05-14</a></td>
+<td width='100' align='center' data-sortkey='3071200'><a href="releaselog/3_7_12.html">3.7.12</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=00bb9c9ce4&y=ci'>2012-03-20</a></td>
+<td width='100' align='center' data-sortkey='3071100'><a href="releaselog/3_7_11.html">3.7.11</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ebd01a8def&y=ci'>2012-01-16</a></td>
+<td width='100' align='center' data-sortkey='3071000'><a href="releaselog/3_7_10.html">3.7.10</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c7c6050ef0&y=ci'>2011-11-01</a></td>
+<td width='100' align='center' data-sortkey='3070900'><a href="releaselog/3_7_9.html">3.7.9</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=3e0da808d2&y=ci'>2011-09-19</a></td>
+<td width='100' align='center' data-sortkey='3070800'><a href="releaselog/3_7_8.html">3.7.8</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=af0d91adf4&y=ci'>2011-06-28</a></td>
+<td width='100' align='center' data-sortkey='3070701'><a href="releaselog/3_7_7_1.html">3.7.7.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4374b7e83e&y=ci'>2011-06-23</a></td>
+<td width='100' align='center' data-sortkey='3070700'><a href="releaselog/3_7_7.html">3.7.7</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ed1da510a2&y=ci'>2011-05-19</a></td>
+<td width='100' align='center' data-sortkey='3070603'><a href="releaselog/3_7_6_3.html">3.7.6.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=154ddbc171&y=ci'>2011-04-17</a></td>
+<td width='100' align='center' data-sortkey='3070602'><a href="releaselog/3_7_6_2.html">3.7.6.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a35e83eac7&y=ci'>2011-04-13</a></td>
+<td width='100' align='center' data-sortkey='3070601'><a href="releaselog/3_7_6_1.html">3.7.6.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f9d43fa363&y=ci'>2011-04-12</a></td>
+<td width='100' align='center' data-sortkey='3070600'><a href="releaselog/3_7_6.html">3.7.6</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ed759d5a9e&y=ci'>2011-02-01</a></td>
+<td width='100' align='center' data-sortkey='3070500'><a href="releaselog/3_7_5.html">3.7.5</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a586a4deeb&y=ci'>2010-12-07</a></td>
+<td width='100' align='center' data-sortkey='3070400'><a href="releaselog/3_7_4.html">3.7.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=2677848087&y=ci'>2010-10-08</a></td>
+<td width='100' align='center' data-sortkey='3070300'><a href="releaselog/3_7_3.html">3.7.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=42537b6056&y=ci'>2010-08-24</a></td>
+<td width='100' align='center' data-sortkey='3070200'><a href="releaselog/3_7_2.html">3.7.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=3613b0695a&y=ci'>2010-08-23</a></td>
+<td width='100' align='center' data-sortkey='3070100'><a href="releaselog/3_7_1.html">3.7.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=042a1abb03&y=ci'>2010-08-04</a></td>
+<td width='100' align='center' data-sortkey='3070001'><a href="releaselog/3_7_0_1.html">3.7.0.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b36b105eab&y=ci'>2010-07-21</a></td>
+<td width='100' align='center' data-sortkey='3070000'><a href="releaselog/3_7_0.html">3.7.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b078b588d6&y=ci'>2010-03-26</a></td>
+<td width='100' align='center' data-sortkey='3062301'><a href="releaselog/3_6_23_1.html">3.6.23.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4ae453ea7b&y=ci'>2010-03-09</a></td>
+<td width='100' align='center' data-sortkey='3062300'><a href="releaselog/3_6_23.html">3.6.23</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=28d0d77107&y=ci'>2010-01-06</a></td>
+<td width='100' align='center' data-sortkey='3062200'><a href="releaselog/3_6_22.html">3.6.22</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1ed88e9d01&y=ci'>2009-12-07</a></td>
+<td width='100' align='center' data-sortkey='3062100'><a href="releaselog/3_6_21.html">3.6.21</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=eb7a544fe4&y=ci'>2009-11-04</a></td>
+<td width='100' align='center' data-sortkey='3062000'><a href="releaselog/3_6_20.html">3.6.20</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=2a832b19b6&y=ci'>2009-10-30</a></td>
+<td width='100' align='center' data-sortkey='3061601'><a href="releaselog/3_6_16_1.html">3.6.16.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c1d499afc5&y=ci'>2009-10-14</a></td>
+<td width='100' align='center' data-sortkey='3061900'><a href="releaselog/3_6_19.html">3.6.19</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b084828a77&y=ci'>2009-09-11</a></td>
+<td width='100' align='center' data-sortkey='3061800'><a href="releaselog/3_6_18.html">3.6.18</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=3665010228&y=ci'>2009-08-10</a></td>
+<td width='100' align='center' data-sortkey='3061700'><a href="releaselog/3_6_17.html">3.6.17</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ff691a6b2a&y=ci'>2009-06-27</a></td>
+<td width='100' align='center' data-sortkey='3061600'><a href="releaselog/3_6_16.html">3.6.16</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=aff34826aa&y=ci'>2009-06-15</a></td>
+<td width='100' align='center' data-sortkey='3061500'><a href="releaselog/3_6_15.html">3.6.15</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ab76d1a252&y=ci'>2009-05-25</a></td>
+<td width='100' align='center' data-sortkey='3061402'><a href="releaselog/3_6_14_2.html">3.6.14.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=e4267c87e5&y=ci'>2009-05-19</a></td>
+<td width='100' align='center' data-sortkey='3061401'><a href="releaselog/3_6_14_1.html">3.6.14.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=469ad1ded3&y=ci'>2009-05-07</a></td>
+<td width='100' align='center' data-sortkey='3061400'><a href="releaselog/3_6_14.html">3.6.14</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=982cc7f4e7&y=ci'>2009-04-13</a></td>
+<td width='100' align='center' data-sortkey='3061300'><a href="releaselog/3_6_13.html">3.6.13</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0db862a23a&y=ci'>2009-03-31</a></td>
+<td width='100' align='center' data-sortkey='3061200'><a href="releaselog/3_6_12.html">3.6.12</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=6abd630c87&y=ci'>2009-02-18</a></td>
+<td width='100' align='center' data-sortkey='3061100'><a href="releaselog/3_6_11.html">3.6.11</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=21b720cc9b&y=ci'>2009-01-15</a></td>
+<td width='100' align='center' data-sortkey='3061000'><a href="releaselog/3_6_10.html">3.6.10</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b6ce8199a9&y=ci'>2009-01-14</a></td>
+<td width='100' align='center' data-sortkey='3060900'><a href="releaselog/3_6_9.html">3.6.9</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8ca0b7c136&y=ci'>2009-01-12</a></td>
+<td width='100' align='center' data-sortkey='3060800'><a href="releaselog/3_6_8.html">3.6.8</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f4f40370fb&y=ci'>2008-12-16</a></td>
+<td width='100' align='center' data-sortkey='3060700'><a href="releaselog/3_6_7.html">3.6.7</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=30a2080777&y=ci'>2008-11-26</a></td>
+<td width='100' align='center' data-sortkey='3060602'><a href="releaselog/3_6_6_2.html">3.6.6.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c2266aa094&y=ci'>2008-11-22</a></td>
+<td width='100' align='center' data-sortkey='3060601'><a href="releaselog/3_6_6_1.html">3.6.6.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=01a6e2820a&y=ci'>2008-11-19</a></td>
+<td width='100' align='center' data-sortkey='3060600'><a href="releaselog/3_6_6.html">3.6.6</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=369f74983b&y=ci'>2008-11-12</a></td>
+<td width='100' align='center' data-sortkey='3060500'><a href="releaselog/3_6_5.html">3.6.5</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=cd73cffab3&y=ci'>2008-10-15</a></td>
+<td width='100' align='center' data-sortkey='3060400'><a href="releaselog/3_6_4.html">3.6.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1634fd223d&y=ci'>2008-09-22</a></td>
+<td width='100' align='center' data-sortkey='3060300'><a href="releaselog/3_6_3.html">3.6.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=88c51b9f15&y=ci'>2008-08-30</a></td>
+<td width='100' align='center' data-sortkey='3060200'><a href="releaselog/3_6_2.html">3.6.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=65ab777fd0&y=ci'>2008-08-06</a></td>
+<td width='100' align='center' data-sortkey='3060100'><a href="releaselog/3_6_1.html">3.6.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1841aee604&y=ci'>2008-07-16</a></td>
+<td width='100' align='center' data-sortkey='3060000'><a href="releaselog/3_6_0.html">3.6.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b6129f4cc2&y=ci'>2008-05-14</a></td>
+<td width='100' align='center' data-sortkey='3050900'><a href="releaselog/3_5_9.html">3.5.9</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=6a2e3eb26a&y=ci'>2008-04-16</a></td>
+<td width='100' align='center' data-sortkey='3050800'><a href="releaselog/3_5_8.html">3.5.8</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=9a6583d375&y=ci'>2008-03-17</a></td>
+<td width='100' align='center' data-sortkey='3050700'><a href="releaselog/3_5_7.html">3.5.7</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1d82ab6987&y=ci'>2008-02-06</a></td>
+<td width='100' align='center' data-sortkey='3050600'><a href="releaselog/3_5_6.html">3.5.6</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=cb5bf4642f&y=ci'>2008-01-31</a></td>
+<td width='100' align='center' data-sortkey='3050500'><a href="releaselog/3_5_5.html">3.5.5</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=cf4a11b2a8&y=ci'>2007-12-14</a></td>
+<td width='100' align='center' data-sortkey='3050400'><a href="releaselog/3_5_4.html">3.5.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a39007d5b1&y=ci'>2007-11-27</a></td>
+<td width='100' align='center' data-sortkey='3050300'><a href="releaselog/3_5_3.html">3.5.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=60da01630a&y=ci'>2007-11-05</a></td>
+<td width='100' align='center' data-sortkey='3050200'><a href="releaselog/3_5_2.html">3.5.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=81cf518646&y=ci'>2007-10-04</a></td>
+<td width='100' align='center' data-sortkey='3050100'><a href="releaselog/3_5_1.html">3.5.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1b690be22a&y=ci'>2007-09-04</a></td>
+<td width='100' align='center' data-sortkey='3050000'><a href="releaselog/3_5_0.html">3.5.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=64989904d4&y=ci'>2007-08-13</a></td>
+<td width='100' align='center' data-sortkey='3040200'><a href="releaselog/3_4_2.html">3.4.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=81a4dd07c1&y=ci'>2007-07-20</a></td>
+<td width='100' align='center' data-sortkey='3040100'><a href="releaselog/3_4_1.html">3.4.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=2647980fba&y=ci'>2007-06-18</a></td>
+<td width='100' align='center' data-sortkey='3040000'><a href="releaselog/3_4_0.html">3.4.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=16979f4525&y=ci'>2007-04-25</a></td>
+<td width='100' align='center' data-sortkey='3031700'><a href="releaselog/3_3_17.html">3.3.17</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8c6b5adb5c&y=ci'>2007-04-18</a></td>
+<td width='100' align='center' data-sortkey='3031600'><a href="releaselog/3_3_16.html">3.3.16</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ba5f4a55fa&y=ci'>2007-04-09</a></td>
+<td width='100' align='center' data-sortkey='3031500'><a href="releaselog/3_3_15.html">3.3.15</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=3dbf4f98ac&y=ci'>2007-04-02</a></td>
+<td width='100' align='center' data-sortkey='3031400'><a href="releaselog/3_3_14.html">3.3.14</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=286c4eb30d&y=ci'>2007-02-13</a></td>
+<td width='100' align='center' data-sortkey='3031300'><a href="releaselog/3_3_13.html">3.3.13</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=fc66070393&y=ci'>2007-01-27</a></td>
+<td width='100' align='center' data-sortkey='3031200'><a href="releaselog/3_3_12.html">3.3.12</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=66cbbe0442&y=ci'>2007-01-22</a></td>
+<td width='100' align='center' data-sortkey='3031100'><a href="releaselog/3_3_11.html">3.3.11</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=204a212a28&y=ci'>2007-01-10</a></td>
+<td width='100' align='center' data-sortkey='3031000'><a href="releaselog/3_3_10.html">3.3.10</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8bf19a6a41&y=ci'>2007-01-04</a></td>
+<td width='100' align='center' data-sortkey='3030900'><a href="releaselog/3_3_9.html">3.3.9</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0658bb9e3f&y=ci'>2006-10-09</a></td>
+<td width='100' align='center' data-sortkey='3030800'><a href="releaselog/3_3_8.html">3.3.8</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=85434a4b96&y=ci'>2006-08-12</a></td>
+<td width='100' align='center' data-sortkey='3030700'><a href="releaselog/3_3_7.html">3.3.7</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c11cb07e4b&y=ci'>2006-06-06</a></td>
+<td width='100' align='center' data-sortkey='3030600'><a href="releaselog/3_3_6.html">3.3.6</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a091a61d88&y=ci'>2006-04-05</a></td>
+<td width='100' align='center' data-sortkey='3030500'><a href="releaselog/3_3_5.html">3.3.5</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=033aaab67f&y=ci'>2006-02-11</a></td>
+<td width='100' align='center' data-sortkey='3030400'><a href="releaselog/3_3_4.html">3.3.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=10a3f56546&y=ci'>2006-01-31</a></td>
+<td width='100' align='center' data-sortkey='3030300'><a href="releaselog/3_3_3.html">3.3.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1fdde6c506&y=ci'>2006-01-24</a></td>
+<td width='100' align='center' data-sortkey='3030200'><a href="releaselog/3_3_2.html">3.3.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=bd7c569993&y=ci'>2006-01-16</a></td>
+<td width='100' align='center' data-sortkey='3030100'><a href="releaselog/3_3_1.html">3.3.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=59a7a56c1b&y=ci'>2006-01-11</a></td>
+<td width='100' align='center' data-sortkey='3030000'><a href="releaselog/3_3_0.html">3.3.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=50d7e50a96&y=ci'>2005-12-19</a></td>
+<td width='100' align='center' data-sortkey='2081700'>2.8.17</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=e61382aed4&y=ci'>2005-12-19</a></td>
+<td width='100' align='center' data-sortkey='3020800'><a href="releaselog/3_2_8.html">3.2.8</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=bd141a7c12&y=ci'>2005-09-24</a></td>
+<td width='100' align='center' data-sortkey='3020700'><a href="releaselog/3_2_7.html">3.2.7</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1cdfe66714&y=ci'>2005-09-17</a></td>
+<td width='100' align='center' data-sortkey='3020600'><a href="releaselog/3_2_6.html">3.2.6</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b2415a749c&y=ci'>2005-08-27</a></td>
+<td width='100' align='center' data-sortkey='3020500'><a href="releaselog/3_2_5.html">3.2.5</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8cef2c1ae7&y=ci'>2005-08-24</a></td>
+<td width='100' align='center' data-sortkey='3020400'><a href="releaselog/3_2_4.html">3.2.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f620319b44&y=ci'>2005-08-21</a></td>
+<td width='100' align='center' data-sortkey='3020300'><a href="releaselog/3_2_3.html">3.2.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0e190e9d91&y=ci'>2005-06-12</a></td>
+<td width='100' align='center' data-sortkey='3020200'><a href="releaselog/3_2_2.html">3.2.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=844f01af72&y=ci'>2005-03-29</a></td>
+<td width='100' align='center' data-sortkey='3020100'><a href="releaselog/3_2_1.html">3.2.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=debf40e8ff&y=ci'>2005-03-21</a></td>
+<td width='100' align='center' data-sortkey='3020000'><a href="releaselog/3_2_0.html">3.2.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=6a3f4e4be6&y=ci'>2005-03-17</a></td>
+<td width='100' align='center' data-sortkey='3010600'><a href="releaselog/3_1_6.html">3.1.6</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b1792ae516&y=ci'>2005-03-11</a></td>
+<td width='100' align='center' data-sortkey='3010500'><a href="releaselog/3_1_5.html">3.1.5</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=3d070a9b4d&y=ci'>2005-03-11</a></td>
+<td width='100' align='center' data-sortkey='3010400'><a href="releaselog/3_1_4.html">3.1.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=957333a7b2&y=ci'>2005-02-28</a></td>
+<td width='100' align='center' data-sortkey='3010301'>3.1.3.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=36dbf5e929&y=ci'>2005-02-20</a></td>
+<td width='100' align='center' data-sortkey='3010300'><a href="releaselog/3_1_3.html">3.1.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=e9012d917a&y=ci'>2005-02-15</a></td>
+<td width='100' align='center' data-sortkey='3010200'><a href="releaselog/3_1_2.html">3.1.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=2efbbba55a&y=ci'>2005-02-15</a></td>
+<td width='100' align='center' data-sortkey='2081600'>2.8.16</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=2e1c71c468&y=ci'>2005-02-01</a></td>
+<td width='100' align='center' data-sortkey='3010100'><a href="releaselog/3_1_1.html">3.1.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=45094abe38&y=ci'>2005-01-21</a></td>
+<td width='100' align='center' data-sortkey='3010000'><a href="releaselog/3_1_0.html">3.1.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7dd66d7653&y=ci'>2004-10-12</a></td>
+<td width='100' align='center' data-sortkey='3000800'><a href="releaselog/3_0_8.html">3.0.8</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d82ded9543&y=ci'>2004-09-18</a></td>
+<td width='100' align='center' data-sortkey='3000700'><a href="releaselog/3_0_7.html">3.0.7</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c190b95c30&y=ci'>2004-09-02</a></td>
+<td width='100' align='center' data-sortkey='3000600'><a href="releaselog/3_0_6.html">3.0.6</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f3fe8c9fa6&y=ci'>2004-08-29</a></td>
+<td width='100' align='center' data-sortkey='3000500'><a href="releaselog/3_0_5.html">3.0.5</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=98edbdd517&y=ci'>2004-08-09</a></td>
+<td width='100' align='center' data-sortkey='3000400'><a href="releaselog/3_0_4.html">3.0.4</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=068b15ae2a&y=ci'>2004-07-22</a></td>
+<td width='100' align='center' data-sortkey='3000300'><a href="releaselog/3_0_3.html">3.0.3</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=102ab94167&y=ci'>2004-07-22</a></td>
+<td width='100' align='center' data-sortkey='2081500'>2.8.15</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=26a559b658&y=ci'>2004-06-30</a></td>
+<td width='100' align='center' data-sortkey='3000200'><a href="releaselog/3_0_2.html">3.0.2</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ac6683e380&y=ci'>2004-06-22</a></td>
+<td width='100' align='center' data-sortkey='3000100'><a href="releaselog/3_0_1.html">3.0.1</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8b409aaae4&y=ci'>2004-06-18</a></td>
+<td width='100' align='center' data-sortkey='3000000'><a href="releaselog/3_0_0.html">3.0.0</a></td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7d3937743f&y=ci'>2004-06-09</a></td>
+<td width='100' align='center' data-sortkey='2081400'>2.8.14</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4d5bbb3dc3&y=ci'>2004-03-08</a></td>
+<td width='100' align='center' data-sortkey='2081300'>2.8.13</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=1736d415d7&y=ci'>2004-02-08</a></td>
+<td width='100' align='center' data-sortkey='2081200'>2.8.12</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a9f25347de&y=ci'>2004-01-14</a></td>
+<td width='100' align='center' data-sortkey='2081100'>2.8.11</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8bef75ab85&y=ci'>2004-01-14</a></td>
+<td width='100' align='center' data-sortkey='2081000'>2.8.10</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d8ae6bddeb&y=ci'>2004-01-06</a></td>
+<td width='100' align='center' data-sortkey='2080900'>2.8.9</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a0451ccf2d&y=ci'>2003-12-18</a></td>
+<td width='100' align='center' data-sortkey='2080800'>2.8.8</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d48b0b018d&y=ci'>2003-12-04</a></td>
+<td width='100' align='center' data-sortkey='2080700'>2.8.7</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0bde7ae2ba&y=ci'>2003-08-22</a></td>
+<td width='100' align='center' data-sortkey='2080600'>2.8.6</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=95fba440e7&y=ci'>2003-07-22</a></td>
+<td width='100' align='center' data-sortkey='2080500'>2.8.5</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7f5e8894ae&y=ci'>2003-06-29</a></td>
+<td width='100' align='center' data-sortkey='2080400'>2.8.4</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=433570e3e6&y=ci'>2003-06-04</a></td>
+<td width='100' align='center' data-sortkey='2080300'>2.8.3</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f542e5fc88&y=ci'>2003-05-17</a></td>
+<td width='100' align='center' data-sortkey='2080200'>2.8.2</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=590f963b65&y=ci'>2003-05-17</a></td>
+<td width='100' align='center' data-sortkey='2080100'>2.8.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=5db98b3f40&y=ci'>2003-02-16</a></td>
+<td width='100' align='center' data-sortkey='2080000'>2.8.0</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=bdba796f3b&y=ci'>2003-01-25</a></td>
+<td width='100' align='center' data-sortkey='2070600'>2.7.6</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ee95eefe12&y=ci'>2002-12-28</a></td>
+<td width='100' align='center' data-sortkey='2070500'>2.7.5</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0224db6f8c&y=ci'>2002-12-17</a></td>
+<td width='100' align='center' data-sortkey='2070400'>2.7.4</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4051dbdb05&y=ci'>2002-10-31</a></td>
+<td width='100' align='center' data-sortkey='2070300'>2.7.3</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=59ba43449a&y=ci'>2002-09-25</a></td>
+<td width='100' align='center' data-sortkey='2070200'>2.7.2</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=5f51e13d56&y=ci'>2002-08-31</a></td>
+<td width='100' align='center' data-sortkey='2070100'>2.7.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=9e341d9c93&y=ci'>2002-08-25</a></td>
+<td width='100' align='center' data-sortkey='2070000'>2.7.0</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ba706aca0a&y=ci'>2002-08-13</a></td>
+<td width='100' align='center' data-sortkey='2060300'>2.6.3</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=223a2150ac&y=ci'>2002-07-31</a></td>
+<td width='100' align='center' data-sortkey='2060200'>2.6.2</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=610b7bc70a&y=ci'>2002-07-19</a></td>
+<td width='100' align='center' data-sortkey='2060100'>2.6.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=cc4f824b15&y=ci'>2002-07-18</a></td>
+<td width='100' align='center' data-sortkey='2060000'>2.6.0</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=111c78e683&y=ci'>2002-07-07</a></td>
+<td width='100' align='center' data-sortkey='2050600'>2.5.6</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=6284c65c17&y=ci'>2002-07-06</a></td>
+<td width='100' align='center' data-sortkey='2050500'>2.5.5</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f7159fde6b&y=ci'>2002-07-01</a></td>
+<td width='100' align='center' data-sortkey='2050400'>2.5.4</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d5cb675432&y=ci'>2002-06-25</a></td>
+<td width='100' align='center' data-sortkey='2050300'>2.5.3</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=756310cad2&y=ci'>2002-06-25</a></td>
+<td width='100' align='center' data-sortkey='2050200'>2.5.2</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=5e8a3131ab&y=ci'>2002-06-19</a></td>
+<td width='100' align='center' data-sortkey='2050100'>2.5.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=9baef3e240&y=ci'>2002-06-17</a></td>
+<td width='100' align='center' data-sortkey='2050000'>2.5.0</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=06cdaf1c80&y=ci'>2002-05-10</a></td>
+<td width='100' align='center' data-sortkey='2041200'>2.4.12</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b13151794b&y=ci'>2002-05-08</a></td>
+<td width='100' align='center' data-sortkey='2041100'>2.4.11</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=5f3618142f&y=ci'>2002-05-03</a></td>
+<td width='100' align='center' data-sortkey='2041000'>2.4.10</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0691720a4b&y=ci'>2002-04-22</a></td>
+<td width='100' align='center' data-sortkey='2040900'>2.4.9</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d703a2c5c4&y=ci'>2002-04-20</a></td>
+<td width='100' align='center' data-sortkey='2040800'>2.4.8</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=977abbaebe&y=ci'>2002-04-12</a></td>
+<td width='100' align='center' data-sortkey='2040700'>2.4.7</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=5ae7efd87f&y=ci'>2002-04-02</a></td>
+<td width='100' align='center' data-sortkey='2040600'>2.4.6</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b18a7b777c&y=ci'>2002-04-02</a></td>
+<td width='100' align='center' data-sortkey='2040500'>2.4.5</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c4b6c0be00&y=ci'>2002-03-30</a></td>
+<td width='100' align='center' data-sortkey='2040400'>2.4.4</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=99d6764e57&y=ci'>2002-03-23</a></td>
+<td width='100' align='center' data-sortkey='2040300'>2.4.3</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=49d0323255&y=ci'>2002-03-20</a></td>
+<td width='100' align='center' data-sortkey='2040200'>2.4.2</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=9f12b8805f&y=ci'>2002-03-13</a></td>
+<td width='100' align='center' data-sortkey='2040100'>2.4.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=9333ecca1e&y=ci'>2002-03-13</a></td>
+<td width='100' align='center' data-sortkey='2040100'>2.4.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d3f66b44e5&y=ci'>2002-03-11</a></td>
+<td width='100' align='center' data-sortkey='2040000'>2.4.0</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=72c5a92aa6&y=ci'>2002-02-19</a></td>
+<td width='100' align='center' data-sortkey='2030300'>2.3.3</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4d06700007&y=ci'>2002-02-14</a></td>
+<td width='100' align='center' data-sortkey='2030200'>2.3.2</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=846148d6e3&y=ci'>2002-02-13</a></td>
+<td width='100' align='center' data-sortkey='2030100'>2.3.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4c7dfd9353&y=ci'>2002-02-03</a></td>
+<td width='100' align='center' data-sortkey='2030000'>2.3.0</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=af3bb80810&y=ci'>2002-01-28</a></td>
+<td width='100' align='center' data-sortkey='2020500'>2.2.5</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=16712dae4f&y=ci'>2002-01-22</a></td>
+<td width='100' align='center' data-sortkey='2020400'>2.2.4</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a4fe893ce7&y=ci'>2002-01-16</a></td>
+<td width='100' align='center' data-sortkey='2020300'>2.2.3</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7da00a33fe&y=ci'>2002-01-14</a></td>
+<td width='100' align='center' data-sortkey='2020200'>2.2.2</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=61c38f3bfe&y=ci'>2002-01-09</a></td>
+<td width='100' align='center' data-sortkey='2020100'>2.2.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=6bb62d8fab&y=ci'>2001-12-22</a></td>
+<td width='100' align='center' data-sortkey='2020000'>2.2.0</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0d44465347&y=ci'>2001-12-15</a></td>
+<td width='100' align='center' data-sortkey='2010700'>2.1.7</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=6ecd90b6c3&y=ci'>2001-12-14</a></td>
+<td width='100' align='center' data-sortkey='2010600'>2.1.6</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8e90ad552f&y=ci'>2001-12-06</a></td>
+<td width='100' align='center' data-sortkey='2010500'>2.1.5</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=121c522e67&y=ci'>2001-12-05</a></td>
+<td width='100' align='center' data-sortkey='2010400'>2.1.4</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=974d42839b&y=ci'>2001-11-24</a></td>
+<td width='100' align='center' data-sortkey='2010300'>2.1.3</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f14835df32&y=ci'>2001-11-23</a></td>
+<td width='100' align='center' data-sortkey='2010200'>2.1.2</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=be228cd13a&y=ci'>2001-11-13</a></td>
+<td width='100' align='center' data-sortkey='2010100'>2.1.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=56d8390e47&y=ci'>2001-11-12</a></td>
+<td width='100' align='center' data-sortkey='2010000'>2.1.0</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=0fd2874205&y=ci'>2001-11-04</a></td>
+<td width='100' align='center' data-sortkey='2000800'>2.0.8</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b0442cb9c6&y=ci'>2001-10-22</a></td>
+<td width='100' align='center' data-sortkey='2000700'>2.0.7</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c8535a0de9&y=ci'>2001-10-19</a></td>
+<td width='100' align='center' data-sortkey='2000600'>2.0.6</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=e2d84f71ed&y=ci'>2001-10-15</a></td>
+<td width='100' align='center' data-sortkey='2000500'>2.0.5</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=444447007a&y=ci'>2001-10-13</a></td>
+<td width='100' align='center' data-sortkey='2000400'>2.0.4</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a8fee23f86&y=ci'>2001-10-13</a></td>
+<td width='100' align='center' data-sortkey='2000300'>2.0.3</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=44d00a6f58&y=ci'>2001-10-09</a></td>
+<td width='100' align='center' data-sortkey='2000200'>2.0.2</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=e498084940&y=ci'>2001-10-02</a></td>
+<td width='100' align='center' data-sortkey='2000100'>2.0.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=c0a8a1fb42&y=ci'>2001-09-28</a></td>
+<td width='100' align='center' data-sortkey='2000000'>2.0.0</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=cfc86dc48a&y=ci'>2001-07-23</a></td>
+<td width='100' align='center' data-sortkey='1003200'>1.0.32</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=a7bfcbb413&y=ci'>2001-04-15</a></td>
+<td width='100' align='center' data-sortkey='1003100'>1.0.31</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8f0d98193e&y=ci'>2001-04-06</a></td>
+<td width='100' align='center' data-sortkey='1003000'>1.0.30</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4b3ffa161a&y=ci'>2001-04-05</a></td>
+<td width='100' align='center' data-sortkey='1002900'>1.0.29</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8b4c87e8cf&y=ci'>2001-04-04</a></td>
+<td width='100' align='center' data-sortkey='1002800'>1.0.28</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=833291c227&y=ci'>2001-03-20</a></td>
+<td width='100' align='center' data-sortkey='1002700'>1.0.27</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=99f9ea412f&y=ci'>2001-03-20</a></td>
+<td width='100' align='center' data-sortkey='1002600'>1.0.26</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7564b223ab&y=ci'>2001-03-15</a></td>
+<td width='100' align='center' data-sortkey='1002500'>1.0.25</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=34b17e6ce1&y=ci'>2001-03-14</a></td>
+<td width='100' align='center' data-sortkey='1002400'>1.0.24</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=cbfa44c323&y=ci'>2001-02-20</a></td>
+<td width='100' align='center' data-sortkey='1002300'>1.0.23</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ec861066e3&y=ci'>2001-02-19</a></td>
+<td width='100' align='center' data-sortkey='1002200'>1.0.22</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7a1147ff52&y=ci'>2001-02-19</a></td>
+<td width='100' align='center' data-sortkey='1002100'>1.0.21</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=eb0a523c49&y=ci'>2001-02-11</a></td>
+<td width='100' align='center' data-sortkey='1002000'>1.0.20</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=08e179b076&y=ci'>2001-02-06</a></td>
+<td width='100' align='center' data-sortkey='1001900'>1.0.19</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=46b86abb1c&y=ci'>2001-01-04</a></td>
+<td width='100' align='center' data-sortkey='1001800'>1.0.18</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=bee0c81859&y=ci'>2000-12-10</a></td>
+<td width='100' align='center' data-sortkey='1001700'>1.0.17</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=8c36b248fd&y=ci'>2000-11-28</a></td>
+<td width='100' align='center' data-sortkey='1001600'>1.0.16</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d2ad3d2b4e&y=ci'>2000-10-23</a></td>
+<td width='100' align='center' data-sortkey='1001500'>1.0.15</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=4788dc32a5&y=ci'>2000-10-19</a></td>
+<td width='100' align='center' data-sortkey='1001400'>1.0.14</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=b9c84fa579&y=ci'>2000-10-19</a></td>
+<td width='100' align='center' data-sortkey='1001300'>1.0.13</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=7330218a91&y=ci'>2000-10-17</a></td>
+<td width='100' align='center' data-sortkey='1001200'>1.0.12</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=e0c9e80bdb&y=ci'>2000-10-11</a></td>
+<td width='100' align='center' data-sortkey='1001000'>1.0.10</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=ebbb9e4a66&y=ci'>2000-10-09</a></td>
+<td width='100' align='center' data-sortkey='1000900'>1.0.9</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=384909e50f&y=ci'>2000-09-30</a></td>
+<td width='100' align='center' data-sortkey='1000800'>1.0.8</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=84839d8764&y=ci'>2000-09-14</a></td>
+<td width='100' align='center' data-sortkey='1000500'>1.0.5</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=92346e003e&y=ci'>2000-08-28</a></td>
+<td width='100' align='center' data-sortkey='1000400'>1.0.4</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=d35a1f8b37&y=ci'>2000-08-22</a></td>
+<td width='100' align='center' data-sortkey='1000300'>1.0.3</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=e8521fc10d&y=ci'>2000-08-18</a></td>
+<td width='100' align='center' data-sortkey='1000100'>1.0.1</td></tr>
+<tr><td width='100' align='center'><a href='https://www.sqlite.org/src/timeline?c=f37dd18e3f&y=ci'>2000-08-17</a></td>
+<td width='100' align='center' data-sortkey='1000000'>1.0</td></tr>
+
+</tbody>
+</table>
+<script>
+function SortableTable(tableEl,columnTypes,initSort){
+ this.tbody = tableEl.getElementsByTagName('tbody');
+ this.columnTypes = columnTypes;
+ var ncols = tableEl.rows[0].cells.length;
+ for(var i = columnTypes.length; i<=ncols; i++){this.columnTypes += 't';}
+ this.sort = function (cell) {
+ var column = cell.cellIndex;
+ var sortFn;
+ switch( cell.sortType ){
+ case "n": sortFn = this.sortNumeric; break;
+ case "t": sortFn = this.sortText; break;
+ case "T": sortFn = this.sortReverseText; break;
+ case "k": sortFn = this.sortKey; break;
+ case "K": sortFn = this.sortReverseKey; break;
+ default: return;
+ }
+ this.sortIndex = column;
+ var newRows = new Array();
+ for (j = 0; j < this.tbody[0].rows.length; j++) {
+ newRows[j] = this.tbody[0].rows[j];
+ }
+ if( this.sortIndex==Math.abs(this.prevColumn)-1 ){
+ newRows.reverse();
+ this.prevColumn = -this.prevColumn;
+ }else{
+ newRows.sort(sortFn);
+ this.prevColumn = this.sortIndex+1;
+ }
+ for (i=0;i<newRows.length;i++) {
+ this.tbody[0].appendChild(newRows[i]);
+ }
+ this.setHdrIcons();
+ }
+ this.setHdrIcons = function() {
+ for (var i=0; i<this.hdrRow.cells.length; i++) {
+ if( this.columnTypes[i]=='x' ) continue;
+ var sortType;
+ if( this.prevColumn==i+1 ){
+ sortType = 'asc';
+ }else if( this.prevColumn==(-1-i) ){
+ sortType = 'desc'
+ }else{
+ sortType = 'none';
+ }
+ var hdrCell = this.hdrRow.cells[i];
+ var clsName = hdrCell.className.replace(/\s*\bsort\s*\w+/, '');
+ clsName += ' sort ' + sortType;
+ hdrCell.className = clsName;
+ }
+ }
+ this.sortText = function(a,b) {
+ var i = thisObject.sortIndex;
+ aa = a.cells[i].textContent.replace(/\W+/,'').toLowerCase();
+ bb = b.cells[i].textContent.replace(/\W+/,'').toLowerCase();
+ if(aa<bb) return -1;
+ if(aa==bb) return a.rowIndex-b.rowIndex;
+ return 1;
+ }
+ this.sortReverseText = function(a,b) {
+ var i = thisObject.sortIndex;
+ aa = a.cells[i].textContent.replace(/\W+/,'').toLowerCase();
+ bb = b.cells[i].textContent.replace(/\W+/,'').toLowerCase();
+ if(aa<bb) return +1;
+ if(aa==bb) return a.rowIndex-b.rowIndex;
+ return -1;
+ }
+ this.sortNumeric = function(a,b) {
+ var i = thisObject.sortIndex;
+ aa = parseFloat(a.cells[i].textContent);
+ if (isNaN(aa)) aa = 0;
+ bb = parseFloat(b.cells[i].textContent);
+ if (isNaN(bb)) bb = 0;
+ if(aa==bb) return a.rowIndex-b.rowIndex;
+ return aa-bb;
+ }
+ this.sortKey = function(a,b) {
+ var i = thisObject.sortIndex;
+ aa = a.cells[i].getAttribute("data-sortkey");
+ bb = b.cells[i].getAttribute("data-sortkey");
+ if(aa<bb) return -1;
+ if(aa==bb) return a.rowIndex-b.rowIndex;
+ return 1;
+ }
+ this.sortReverseKey = function(a,b) {
+ var i = thisObject.sortIndex;
+ aa = a.cells[i].getAttribute("data-sortkey");
+ bb = b.cells[i].getAttribute("data-sortkey");
+ if(aa<bb) return +1;
+ if(aa==bb) return a.rowIndex-b.rowIndex;
+ return -1;
+ }
+ var x = tableEl.getElementsByTagName('thead');
+ if(!(this.tbody && this.tbody[0].rows && this.tbody[0].rows.length>0)){
+ return;
+ }
+ if(x && x[0].rows && x[0].rows.length > 0) {
+ this.hdrRow = x[0].rows[0];
+ } else {
+ return;
+ }
+ var thisObject = this;
+ this.prevColumn = initSort;
+ for (var i=0; i<this.hdrRow.cells.length; i++) {
+ if( columnTypes[i]=='x' ) continue;
+ var hdrcell = this.hdrRow.cells[i];
+ hdrcell.sTable = this;
+ hdrcell.style.cursor = "pointer";
+ hdrcell.sortType = columnTypes[i] || 't';
+ hdrcell.onclick = function () {
+ this.sTable.sort(this);
+ return false;
+ }
+ }
+ this.setHdrIcons()
+}
+var t = new SortableTable(document.getElementById("chrontab"),"TK",1);
+</script>
+
+<p>
+<i>334 releases
+over 22.4 years.</i>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/chronology.in?m=5a279b547839d9754">2022-12-28 14:21:19</a> UTC </small></i></p>
+
diff --git a/www/cintro.html b/www/cintro.html
new file mode 100644
index 0000000..6c881d0
--- /dev/null
+++ b/www/cintro.html
@@ -0,0 +1,600 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>An Introduction To The SQLite C/C++ Interface</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+An Introduction To The SQLite C/C++ Interface
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#summary">1. Summary</a></div>
+<div class="fancy-toc1"><a href="#introduction">2. Introduction</a></div>
+<div class="fancy-toc1"><a href="#core_objects_and_interfaces">3. Core Objects And Interfaces</a></div>
+<div class="fancy-toc1"><a href="#typical_usage_of_core_routines_and_objects">4. Typical Usage Of Core Routines And Objects</a></div>
+<div class="fancy-toc1"><a href="#convenience_wrappers_around_core_routines">5. Convenience Wrappers Around Core Routines</a></div>
+<div class="fancy-toc1"><a href="#binding_parameters_and_reusing_prepared_statements">6. Binding Parameters and Reusing Prepared Statements</a></div>
+<div class="fancy-toc1"><a href="#configuring_sqlite">7. Configuring SQLite</a></div>
+<div class="fancy-toc1"><a href="#extending_sqlite">8. Extending SQLite</a></div>
+<div class="fancy-toc1"><a href="#other_interfaces">9. Other Interfaces</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+
+<h1 id="summary"><span>1. </span>Summary</h1>
+
+<p>The following two objects and eight methods comprise the essential
+elements of the SQLite interface:
+
+</p><ul>
+<li><p><b><a href="c3ref/sqlite3.html">sqlite3</a></b> &rarr;
+The database connection object. Created by
+<a href="c3ref/open.html">sqlite3_open()</a> and destroyed by <a href="c3ref/close.html">sqlite3_close()</a>.
+
+</p></li><li><p><b><a href="c3ref/stmt.html">sqlite3_stmt</a></b> &rarr;
+The prepared statement object. Created by
+<a href="c3ref/prepare.html">sqlite3_prepare()</a> and destroyed by <a href="c3ref/finalize.html">sqlite3_finalize()</a>.
+
+
+</p></li><li><p><b><a href="c3ref/open.html">sqlite3_open()</a></b> &rarr;
+Open a connection to a new or existing SQLite database.
+The constructor for <a href="c3ref/sqlite3.html">sqlite3</a>.
+
+</p></li><li><p><b><a href="c3ref/prepare.html">sqlite3_prepare()</a></b> &rarr;
+Compile SQL text into
+byte-code that will do the work of querying or updating the database.
+The constructor for <a href="c3ref/stmt.html">sqlite3_stmt</a>.
+
+</p></li><li><p><b><a href="c3ref/bind_blob.html">sqlite3_bind()</a></b> &rarr;
+Store application data into
+<a href="lang_expr.html#varparam">parameters</a> of the original SQL.
+
+
+</p></li><li><p><b><a href="c3ref/step.html">sqlite3_step()</a></b> &rarr;
+Advance an <a href="c3ref/stmt.html">sqlite3_stmt</a> to the next result row or to completion.
+
+</p></li><li><p><b><a href="c3ref/column_blob.html">sqlite3_column()</a></b> &rarr;
+Column values in the current result row for an <a href="c3ref/stmt.html">sqlite3_stmt</a>.
+
+</p></li><li><p><b><a href="c3ref/finalize.html">sqlite3_finalize()</a></b> &rarr;
+Destructor for <a href="c3ref/stmt.html">sqlite3_stmt</a>.
+
+</p></li><li><p><b><a href="c3ref/close.html">sqlite3_close()</a></b> &rarr;
+Destructor for <a href="c3ref/sqlite3.html">sqlite3</a>.
+
+</p></li><li><p><b><a href="c3ref/exec.html">sqlite3_exec()</a></b> &rarr;
+A wrapper function that does <a href="c3ref/prepare.html">sqlite3_prepare()</a>, <a href="c3ref/step.html">sqlite3_step()</a>,
+<a href="c3ref/column_blob.html">sqlite3_column()</a>, and <a href="c3ref/finalize.html">sqlite3_finalize()</a> for
+a string of one or more SQL statements.
+</p></li></ul>
+
+<h1 id="introduction"><span>2. </span>Introduction</h1>
+
+<p>
+ SQLite has more than 225 APIs.
+ However, most of the APIs are optional and very specialized
+ and can be ignored by beginners.
+ The core API is small, simple, and easy to learn.
+ This article summarizes the core API.
+</p>
+
+<p>
+ A separate document, <a href="c3ref/intro.html">The SQLite C/C++ Interface</a>,
+ provides detailed
+ specifications for all C/C++ APIs for SQLite. Once
+ the reader
+ understands the basic principles of operation for SQLite,
+ <a href="c3ref/intro.html">that document</a> should be used as a reference
+ guide. This article is intended as introduction only and is neither a
+ complete nor authoritative reference for the SQLite API.
+</p>
+
+<h1 id="core_objects_and_interfaces"><span>3. </span>Core Objects And Interfaces</h1>
+
+<p>
+ The principal task of an SQL database engine is to evaluate SQL statements
+ of SQL. To accomplish this, the developer needs two objects:
+</p>
+
+<p></p><ul>
+ <li> The <a href="c3ref/sqlite3.html">database connection</a> object: sqlite3 </li>
+ <li> The <a href="c3ref/stmt.html">prepared statement</a> object: sqlite3_stmt </li>
+</ul>
+
+<p>
+ Strictly speaking, the <a href="c3ref/stmt.html">prepared statement</a> object is not required since
+ the convenience wrapper interfaces, <a href="c3ref/exec.html">sqlite3_exec</a> or
+ <a href="c3ref/free_table.html">sqlite3_get_table</a>, can be used and these convenience wrappers
+ encapsulate and hide the <a href="c3ref/stmt.html">prepared statement</a> object.
+ Nevertheless, an understanding of
+ <a href="c3ref/stmt.html">prepared statements</a> is needed to make full use of SQLite.
+</p>
+
+<p>
+ The <a href="c3ref/sqlite3.html">database connection</a> and <a href="c3ref/stmt.html">prepared statement</a> objects are controlled
+ by a small set of C/C++ interface routine listed below.
+</p>
+
+<p></p><ul>
+ <li> <a href="c3ref/open.html">sqlite3_open()</a> </li>
+ <li> <a href="c3ref/prepare.html">sqlite3_prepare()</a> </li>
+ <li> <a href="c3ref/step.html">sqlite3_step()</a> </li>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column()</a> </li>
+ <li> <a href="c3ref/finalize.html">sqlite3_finalize()</a> </li>
+ <li> <a href="c3ref/close.html">sqlite3_close()</a> </li>
+</ul>
+
+<p>
+ Note that the list of routines above is conceptual rather than actual.
+ Many of these routines come in multiple versions.
+ For example, the list above shows a single routine
+ named <a href="c3ref/open.html">sqlite3_open()</a> when in fact there are three separate routines
+ that accomplish the same thing in slightly different ways:
+ <a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/open.html">sqlite3_open16()</a> and <a href="c3ref/open.html">sqlite3_open_v2()</a>.
+ The list mentions <a href="c3ref/column_blob.html">sqlite3_column()</a>
+ when in fact no such routine exists.
+ The "sqlite3_column()" shown in the list is a placeholder for
+ an entire family of routines that extra column
+ data in various datatypes.
+</p>
+
+<p>
+ Here is a summary of what the core interfaces do:
+</p>
+
+<ul>
+
+<li><p><b><a href="c3ref/open.html">sqlite3_open()</a></b>
+</p><p>
+ This routine
+ opens a connection to an SQLite database file and returns a
+ <a href="c3ref/sqlite3.html">database connection</a> object. This is often the first SQLite API
+ call that an application makes and is a prerequisite for most other
+ SQLite APIs. Many SQLite interfaces require a pointer to
+ the <a href="c3ref/sqlite3.html">database connection</a> object as their first parameter and can
+ be thought of as methods on the <a href="c3ref/sqlite3.html">database connection</a> object.
+ This routine is the constructor for the <a href="c3ref/sqlite3.html">database connection</a> object.
+</p>
+
+</li><li><p><b><a href="c3ref/prepare.html">sqlite3_prepare()</a></b>
+</p><p>
+ This routine
+ converts SQL text into a <a href="c3ref/stmt.html">prepared statement</a> object and returns a pointer
+ to that object. This interface requires a <a href="c3ref/sqlite3.html">database connection</a> pointer
+ created by a prior call to <a href="c3ref/open.html">sqlite3_open()</a> and a text string containing
+ the SQL statement to be prepared. This API does not actually evaluate
+ the SQL statement. It merely prepares the SQL statement for evaluation.
+
+ </p><p>Think of each SQL statement as a small computer program. The purpose
+ of <a href="c3ref/prepare.html">sqlite3_prepare()</a> is to compile that program into object code.
+ The <a href="c3ref/stmt.html">prepared statement</a> is the object code. The <a href="c3ref/step.html">sqlite3_step()</a> interface
+ then runs the object code to get a result.
+
+ </p><p>New applications should always invoke <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> instead
+ of <a href="c3ref/prepare.html">sqlite3_prepare()</a>. The older <a href="c3ref/prepare.html">sqlite3_prepare()</a> is retained for
+ backwards compatibility. But <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> provides a much
+ better interface.</p>
+
+</li><li><p><b><a href="c3ref/step.html">sqlite3_step()</a></b>
+</p><p>
+ This routine is used to evaluate a <a href="c3ref/stmt.html">prepared statement</a> that has been
+ previously created by the <a href="c3ref/prepare.html">sqlite3_prepare()</a> interface. The statement
+ is evaluated up to the point where the first row of results are available.
+ To advance to the second row of results, invoke <a href="c3ref/step.html">sqlite3_step()</a> again.
+ Continue invoking <a href="c3ref/step.html">sqlite3_step()</a> until the statement is complete.
+ Statements that do not return results (ex: INSERT, UPDATE, or DELETE
+ statements) run to completion on a single call to <a href="c3ref/step.html">sqlite3_step()</a>.
+
+</p></li><li><p><b><a href="c3ref/column_blob.html">sqlite3_column()</a></b>
+</p><p>
+ This routine returns a single column from the current row of a result
+ set for a <a href="c3ref/stmt.html">prepared statement</a> that is being evaluated by <a href="c3ref/step.html">sqlite3_step()</a>.
+ Each time <a href="c3ref/step.html">sqlite3_step()</a> stops with a new result set row, this routine
+ can be called multiple times to find the values of all columns in that row.
+
+ </p><p>As noted above, there really is no such thing as a "sqlite3_column()"
+ function in the SQLite API. Instead, what we here call "sqlite3_column()"
+ is a place-holder for an entire family of functions that return
+ a value from the result set in various data types. There are also routines
+ in this family that return the size of the result (if it is a string or
+ BLOB) and the number of columns in the result set.
+
+ </p><p></p><ul>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column_blob()</a> </li>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column_bytes()</a> </li>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column_bytes16()</a> </li>
+ <li> <a href="c3ref/column_count.html">sqlite3_column_count()</a> </li>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column_double()</a> </li>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column_int()</a> </li>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column_int64()</a> </li>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column_text()</a> </li>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column_text16()</a> </li>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column_type()</a> </li>
+ <li> <a href="c3ref/column_blob.html">sqlite3_column_value()</a> </li>
+ </ul>
+
+
+</li><li><p><b><a href="c3ref/finalize.html">sqlite3_finalize()</a></b>
+</p><p>
+ This routine destroys a <a href="c3ref/stmt.html">prepared statement</a> created by a prior call
+ to <a href="c3ref/prepare.html">sqlite3_prepare()</a>. Every prepared statement must be destroyed using
+ a call to this routine in order to avoid memory leaks.
+
+</p></li><li><p><b><a href="c3ref/close.html">sqlite3_close()</a></b>
+</p><p>
+ This routine closes a <a href="c3ref/sqlite3.html">database connection</a> previously opened by a call
+ to <a href="c3ref/open.html">sqlite3_open()</a>. All <a href="c3ref/stmt.html">prepared statements</a> associated with the
+ connection should be <a href="c3ref/finalize.html">finalized</a> prior to closing the
+ connection.
+</p></li></ul>
+
+<h1 id="typical_usage_of_core_routines_and_objects"><span>4. </span>Typical Usage Of Core Routines And Objects</h1>
+
+<p>
+ An application will typically use
+ <a href="c3ref/open.html">sqlite3_open()</a> to create a single <a href="c3ref/sqlite3.html">database connection</a>
+ during initialization.
+ Note that <a href="c3ref/open.html">sqlite3_open()</a> can be used to either open existing database
+ files or to create and open new database files.
+ While many applications use only a single <a href="c3ref/sqlite3.html">database connection</a>, there is
+ no reason why an application cannot call <a href="c3ref/open.html">sqlite3_open()</a> multiple times
+ in order to open multiple <a href="c3ref/sqlite3.html">database connections</a> - either to the same
+ database or to different databases. Sometimes a multi-threaded application
+ will create separate <a href="c3ref/sqlite3.html">database connections</a> for each thread.
+ Note that a single <a href="c3ref/sqlite3.html">database connection</a> can access two or more
+ databases using the <a href="lang_attach.html">ATTACH</a> SQL command, so it is not necessary to
+ have a separate database connection for each database file.
+</p>
+
+<p>
+ Many applications destroy their <a href="c3ref/sqlite3.html">database connections</a> using calls to
+ <a href="c3ref/close.html">sqlite3_close()</a> at shutdown. Or, for example, an application that
+ uses SQLite as its <a href="appfileformat.html">application file format</a> might
+ open <a href="c3ref/sqlite3.html">database connections</a> in response to a File/Open menu action
+ and then destroy the corresponding <a href="c3ref/sqlite3.html">database connection</a> in response
+ to the File/Close menu.
+</p>
+
+<p>
+ To run an SQL statement, the application follows these steps:
+</p>
+
+<p></p><ol>
+ <li> Create a <a href="c3ref/stmt.html">prepared statement</a> using <a href="c3ref/prepare.html">sqlite3_prepare()</a>. </li>
+ <li> Evaluate the <a href="c3ref/stmt.html">prepared statement</a> by calling <a href="c3ref/step.html">sqlite3_step()</a> one
+ or more times. </li>
+ <li> For queries, extract results by calling
+ <a href="c3ref/column_blob.html">sqlite3_column()</a> in between
+ two calls to <a href="c3ref/step.html">sqlite3_step()</a>. </li>
+ <li> Destroy the <a href="c3ref/stmt.html">prepared statement</a> using <a href="c3ref/finalize.html">sqlite3_finalize()</a>. </li>
+</ol>
+
+<p>
+ The foregoing is all one really needs to know in order to use SQLite
+ effectively. All the rest is optimization and detail.
+</p>
+
+<h1 id="convenience_wrappers_around_core_routines"><span>5. </span>Convenience Wrappers Around Core Routines</h1>
+
+<p>
+ The <a href="c3ref/exec.html">sqlite3_exec()</a> interface is a convenience wrapper that carries out
+ all four of the above steps with a single function call. A callback
+ function passed into <a href="c3ref/exec.html">sqlite3_exec()</a> is used to process each row of
+ the result set. The <a href="c3ref/free_table.html">sqlite3_get_table()</a> is another convenience wrapper
+ that does all four of the above steps. The <a href="c3ref/free_table.html">sqlite3_get_table()</a> interface
+ differs from <a href="c3ref/exec.html">sqlite3_exec()</a> in that it stores the results of queries
+ in heap memory rather than invoking a callback.
+</p>
+
+<p>
+ It is important to realize that neither <a href="c3ref/exec.html">sqlite3_exec()</a> nor
+ <a href="c3ref/free_table.html">sqlite3_get_table()</a> do anything that cannot be accomplished using
+ the core routines. In fact, these wrappers are implemented purely in
+ terms of the core routines.
+</p>
+
+
+<h1 id="binding_parameters_and_reusing_prepared_statements"><span>6. </span>Binding Parameters and Reusing Prepared Statements</h1>
+
+<p>
+ In prior discussion, it was assumed that each SQL statement is prepared
+ once, evaluated, then destroyed. However, SQLite allows the same
+ <a href="c3ref/stmt.html">prepared statement</a> to be evaluated multiple times. This is accomplished
+ using the following routines:
+</p>
+
+<p></p><ul>
+ <li> <a href="c3ref/reset.html">sqlite3_reset()</a> </li>
+ <li> <a href="c3ref/bind_blob.html">sqlite3_bind()</a> </li>
+</ul>
+
+<p>
+ After a <a href="c3ref/stmt.html">prepared statement</a> has been evaluated by one or more calls to
+ <a href="c3ref/step.html">sqlite3_step()</a>, it can be reset in order to be evaluated again by a
+ call to <a href="c3ref/reset.html">sqlite3_reset()</a>.
+ Think of <a href="c3ref/reset.html">sqlite3_reset()</a> as rewinding the <a href="c3ref/stmt.html">prepared statement</a> program
+ back to the beginning.
+ Using <a href="c3ref/reset.html">sqlite3_reset()</a> on an existing <a href="c3ref/stmt.html">prepared statement</a> rather than
+ creating a new <a href="c3ref/stmt.html">prepared statement</a> avoids unnecessary calls to
+ <a href="c3ref/prepare.html">sqlite3_prepare()</a>.
+ For many SQL statements, the time needed
+ to run <a href="c3ref/prepare.html">sqlite3_prepare()</a> equals or exceeds the time needed by
+ <a href="c3ref/step.html">sqlite3_step()</a>. So avoiding calls to <a href="c3ref/prepare.html">sqlite3_prepare()</a> can give
+ a significant performance improvement.
+</p>
+
+<p>
+ It is not commonly useful to evaluate the <em>exact</em> same SQL
+ statement more than once. More often, one wants to evaluate similar
+ statements. For example, you might want to evaluate an INSERT statement
+ multiple times with different values. Or you might want to evaluate
+ the same query multiple times using a different key in the WHERE clause.
+ To accommodate
+ this, SQLite allows SQL statements to contain <a href="lang_expr.html#varparam">parameters</a>
+ which are "bound" to values prior to being evaluated. These values can
+ later be changed and the same <a href="c3ref/stmt.html">prepared statement</a> can be evaluated
+ a second time using the new values.
+</p>
+
+<p>
+ SQLite allows a <a href="lang_expr.html#varparam">parameter</a> wherever
+ a string literal, numeric constant, or NULL is allowed.
+ (Parameters may not be used for column or table names.)
+ A <a href="lang_expr.html#varparam">parameter</a> takes one of the following forms:
+</p>
+
+<p></p><ul>
+ <li> <b>?</b> </li>
+ <li> <b>?</b><i>NNN</i> </li>
+ <li> <b>:</b><i>AAA</i> </li>
+ <li> <b>$</b><i>AAA</i> </li>
+ <li> <b>@</b><i>AAA</i> </li>
+</ul>
+
+<p>
+ In the examples above, <i>NNN</i> is an integer value and
+ <i>AAA</i> is an identifier.
+ A parameter initially has a value of NULL.
+ Prior to calling <a href="c3ref/step.html">sqlite3_step()</a> for the first time or immediately
+ after <a href="c3ref/reset.html">sqlite3_reset()</a>, the application can invoke the
+ <a href="c3ref/bind_blob.html">sqlite3_bind()</a> interfaces to attach values
+ to the parameters. Each call to <a href="c3ref/bind_blob.html">sqlite3_bind()</a>
+ overrides prior bindings on the same parameter.
+</p>
+
+<p>
+ An application is allowed to prepare multiple SQL statements in advance
+ and evaluate them as needed.
+ There is no arbitrary limit to the number of outstanding
+ <a href="c3ref/stmt.html">prepared statements</a>.
+ Some applications call <a href="c3ref/prepare.html">sqlite3_prepare()</a> multiple times at start-up to
+ create all of the <a href="c3ref/stmt.html">prepared statements</a> they will ever need. Other
+ applications keep a cache of the most recently used <a href="c3ref/stmt.html">prepared statements</a>
+ and then reuse <a href="c3ref/stmt.html">prepared statements</a> out of the cache when available.
+ Another approach is to only reuse <a href="c3ref/stmt.html">prepared statements</a> when they are
+ inside of a loop.
+</p>
+
+<h1 id="configuring_sqlite"><span>7. </span>Configuring SQLite</h1>
+
+<p>
+ The default configuration for SQLite works great for most applications.
+ But sometimes developers want to tweak the setup to try to squeeze out
+ a little more performance, or take advantage of some obscure feature.
+</p><p>
+ The <a href="c3ref/config.html">sqlite3_config()</a> interface is used to make global, process-wide
+ configuration changes for SQLite. The <a href="c3ref/config.html">sqlite3_config()</a> interface must
+ be called before any <a href="c3ref/sqlite3.html">database connections</a> are created. The
+ <a href="c3ref/config.html">sqlite3_config()</a> interface allows the programmer to do things like:
+</p><ul>
+<li>Adjust how SQLite does <a href="malloc.html">memory allocation</a>, including setting up
+ alternative memory allocators appropriate for safety-critical
+ real-time embedded systems and application-defined memory allocators.
+</li><li>Set up a process-wide <a href="errlog.html">error log</a>.
+</li><li>Specify an application-defined page cache.
+</li><li>Adjust the use of mutexes so that they are appropriate for various
+ <a href="threadsafe.html">threading models</a>, or substitute an
+ application-defined mutex system.
+</li></ul>
+<p>
+ After process-wide configuration is complete and <a href="c3ref/sqlite3.html">database connections</a>
+ have been created, individual database connections can be configured using
+ calls to <a href="c3ref/limit.html">sqlite3_limit()</a> and <a href="c3ref/db_config.html">sqlite3_db_config()</a>.
+
+</p><h1 id="extending_sqlite"><span>8. </span>Extending SQLite</h1>
+
+<p>
+ SQLite includes interfaces that can be used to extend its functionality.
+ Such routines include:
+</p>
+
+<p></p><ul>
+ <li> <a href="c3ref/create_collation.html">sqlite3_create_collation()</a> </li>
+ <li> <a href="c3ref/create_function.html">sqlite3_create_function()</a> </li>
+ <li> <a href="c3ref/create_module.html">sqlite3_create_module()</a> </li>
+ <li> <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> </li>
+</ul>
+
+<p>
+ The <a href="c3ref/create_collation.html">sqlite3_create_collation()</a> interface is used to create new
+ <a href="datatype3.html#collation">collating sequences</a> for sorting text.
+ The <a href="c3ref/create_module.html">sqlite3_create_module()</a> interface is used to register new
+ <a href="vtab.html">virtual table</a> implementations.
+ The <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> interface creates new <a href="vfs.html">VFSes</a>.
+</p>
+
+<p>
+ The <a href="c3ref/create_function.html">sqlite3_create_function()</a> interface creates new SQL functions -
+ either scalar or aggregate. The new function implementation typically
+ makes use of the following additional interfaces:
+</p>
+
+<p></p><ul>
+ <li> <a href="c3ref/aggregate_context.html">sqlite3_aggregate_context()</a> </li>
+ <li> <a href="c3ref/result_blob.html">sqlite3_result()</a> </li>
+ <li> <a href="c3ref/user_data.html">sqlite3_user_data()</a> </li>
+ <li> <a href="c3ref/value_blob.html">sqlite3_value()</a> </li>
+</ul>
+
+<p>
+ All of the built-in SQL functions of SQLite are created using exactly
+ these same interfaces. Refer to the SQLite source code, and in particular
+ the
+ <a href="http://www.sqlite.org/src/doc/trunk/src/date.c">date.c</a> and
+ <a href="http://www.sqlite.org/src/doc/trunk/src/func.c">func.c</a> source files
+ for examples.
+</p>
+
+<p>
+ Shared libraries or DLLs can be used as <a href="loadext.html">loadable extensions</a> to SQLite.
+
+</p><h1 id="other_interfaces"><span>9. </span>Other Interfaces</h1>
+
+<p>
+ This article only mentions the most important and most commonly
+ used SQLite interfaces.
+ The SQLite library includes many other APIs implementing useful
+ features that are not described here.
+ A <a href="c3ref/funclist.html">complete list of functions</a> that form the SQLite
+ application programming interface is found at the
+ <a href="c3ref/intro.html">C/C++ Interface Specification</a>.
+ Refer to that document for complete and authoritative information about
+ all SQLite interfaces.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/cintro.in?m=21c6c0dd3b573d0f6">2017-09-29 12:11:33</a> UTC </small></i></p>
+
diff --git a/www/cksumvfs.html b/www/cksumvfs.html
new file mode 100644
index 0000000..2d73ce8
--- /dev/null
+++ b/www/cksumvfs.html
@@ -0,0 +1,314 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Checksum VFS Shim</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Checksum VFS Shim
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#compiling">2. Compiling</a></div>
+<div class="fancy-toc1"><a href="#loading">3. Loading</a></div>
+<div class="fancy-toc1"><a href="#usage">4. Usage</a></div>
+<div class="fancy-toc1"><a href="#verification_of_checksums">5. Verification Of Checksums</a></div>
+<div class="fancy-toc1"><a href="#controlling_checksum_verification">6. Controlling Checksum Verification</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>The checksum VFS extension is a <a href="vfs.html#shim">VFS shim</a> that adds an 8-byte
+checksum to the end of every page in an SQLite database. The checksum
+is added as each page is written and verified as each page is read.
+The checksum is intended to help detect database corruption caused by
+random bit-flips in the mass storage device.
+
+</p><p>The checksum VFS extension requires
+SQLite version 3.32.0 (2020-05-22) or later. It will not
+work with earlier versions of SQLite.
+
+</p><h1 id="compiling"><span>2. </span>Compiling</h1>
+
+<p>The checksum VFS module is a <a href="loadext.html">loadable extension</a>. It is not
+included in the <a href="amalgamation.html">amalgamation</a>. It must be added to SQLite
+either at compile-time or at run-time. The source code to
+the checksum VFS module is in the
+<a href="https://sqlite.org/src/file/ext/misc/cksumvfs.c">ext/misc/cksumvfs.c</a>
+source file in the
+<a href="https://sqlite.org/src">SQLite source tree</a>.
+
+</p><p>To build the checksum VFS module into a run-time loadable
+extension, use commands similar to the following:
+
+</p><ul>
+<li>(linux) &rarr; <tt>gcc -fPIC -shared cksumvfs.c -o cksumvfs.so</tt>
+</li><li>(mac) &rarr; <tt>clang -fPIC -dynamiclib cksumvfs.c -o cksumvfs.dylib</tt>
+</li><li>(windows) &rarr; <tt>cl cksumvfs.c -link -dll -out:cksumvfs.dll</tt>
+</li></ul>
+
+<p>You may want to add additional compiler options, of course,
+according to the needs of your project.
+
+</p><p>To statically link this extension with your product,
+compile it like any other C-language module but add the
+"-DSQLITE_CKSUMVFS_STATIC" option so that this module knows that
+it is being statically linked rather than dynamically linked.
+
+</p><h1 id="loading"><span>3. </span>Loading</h1>
+
+<p>To load this extension as a shared library, you first have to
+bring up a dummy SQLite database connection to use as the argument
+to the <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> API call. Then you invoke the
+<a href="c3ref/load_extension.html">sqlite3_load_extension()</a> API and shutdown the dummy database
+connection. All subsequent database connections that are opened
+will include this extension. For example:
+
+</p><div class="codeblock"><pre>sqlite3 *db;
+sqlite3_open(":memory:", &db);
+sqlite3_load_extension(db, "./cksumvfs");
+sqlite3_close(db);
+</pre></div>
+
+<p>If this extension is compiled with -DSQLITE_CKSUMVFS_STATIC and
+statically linked against the application, initialize it using
+a single API call as follows:
+
+</p><div class="codeblock"><pre>sqlite3_cksumvfs_init();
+</pre></div>
+
+<p>Cksumvfs is a <a href="vfs.html#shim">VFS shim</a>. When loaded, "cksmvfs" becomes the new
+default VFS, and it uses the prior default VFS as the next VFS
+down in the stack. This is normally what you want. However, in
+complex situations where multiple VFS shims are being loaded,
+it might be important to ensure that cksumvfs is loaded in the
+correct order so that it sequences itself into the default VFS
+Shim stack in the right order.
+
+</p><h1 id="usage"><span>4. </span>Usage</h1>
+
+<p>Open database connections using the <a href="c3ref/open.html">sqlite3_open()</a> or
+<a href="c3ref/open.html">sqlite3_open_v2()</a> interfaces, as normal. Ordinary database files
+(without a checksum) will operate normally. Databases with
+checksums will return an SQLITE_IOERR_DATA error if a page is
+encountered that contains an invalid checksum.
+
+</p><p>Checksumming only works on databases that have a <a href="fileformat2.html#resbyte">reserve bytes</a>
+value of exactly 8. The default value for reserve-bytes is 0.
+Hence, newly created database files will omit the checksum by
+default. To create a database that includes a checksum, change
+the reserve-bytes value to 8 by running code similar to this:
+
+</p><div class="codeblock"><pre>int n = 8;
+sqlite3_file_control(db, 0, SQLITE_FCNTL_RESERVE_BYTES, &n);
+</pre></div>
+
+<p>If you do this immediately after creating a new database file,
+before anything else has been written into the file, then that
+might be all that you need to do. Otherwise, the API call
+above should be followed by:
+
+</p><div class="codeblock"><pre>sqlite3_exec(db, "VACUUM", 0, 0, 0);
+</pre></div>
+
+<p>It never hurts to run the VACUUM, even if you don't need it.
+If the database is in WAL mode, you should shutdown and
+reopen all database connections before continuing.
+
+</p><p>From the CLI, use the ".filectrl reserve_bytes 8" command,
+followed by "VACUUM;".
+
+</p><p>Note that SQLite allows the number of reserve-bytes to be
+increased but not decreased. So if a database file already
+has a reserve-bytes value greater than 8, there is no way to
+activate checksumming on that database, other than to dump
+and restore the database file. Note also that other extensions
+might also make use of the reserve-bytes. Checksumming will
+be incompatible with those other extensions.
+
+</p><h1 id="verification_of_checksums"><span>5. </span>Verification Of Checksums</h1>
+
+<p>If any checksum is incorrect, the "PRAGMA quick_check" command
+will find it. To verify that checksums are actually enabled
+and running, use SQL like the following:
+
+</p><div class="codeblock"><pre>SELECT count(*), verify_checksum(data)
+ FROM sqlite_dbpage
+ GROUP BY 2;
+</pre></div>
+
+<p>There are three possible outputs from the verify_checksum()
+function: 1, 0, and NULL. 1 is returned if the checksum is
+correct. 0 is returned if the checksum is incorrect. NULL
+is returned if the page is unreadable. If checksumming is
+enabled, the read will fail if the checksum is wrong, so the
+usual result from verify_checksum() on a bad checksum is NULL.
+
+</p><p>If everything is OK, the query above should return a single
+row where the second column is 1. Any other result indicates
+either that there is a checksum error, or checksum validation
+is disabled.
+
+</p><h1 id="controlling_checksum_verification"><span>6. </span>Controlling Checksum Verification</h1>
+
+<p>The cksumvfs extension implements a new PRAGMA statement that can
+be used to disable, re-enable, or query the status of checksum
+verification:
+
+</p><div class="codeblock"><pre>PRAGMA checksum_verification; -- query status
+PRAGMA checksum_verification=OFF; -- disable verification
+PRAGMA checksum_verification=ON; -- re-enable verification
+</pre></div>
+
+<p>The "checksum_verification" pragma will return "1" (true) or "0"
+(false) if checksum verification is enabled or disabled, respectively.
+"Verification" in this context means the feature that causes
+SQLITE_IOERR_DATA errors if a checksum mismatch is detected while
+reading. Checksums are always kept up-to-date as long as the
+<a href="fileformat2.html#resbyte">reserve bytes</a> value of the database is 8, regardless of the setting
+of this pragma. Checksum verification can be disabled (for example)
+to do forensic analysis of a database that has previously reported
+a checksum error.
+
+</p><p>The "checksum_verification" pragma will always respond with "0" if
+the database file does not have a <a href="fileformat2.html#resbyte">reserve bytes</a> value of 8. The
+pragma will return no rows at all if the cksumvfs extension is
+not loaded.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/cksumvfs.in?m=c9b2514ff040a5792">2020-12-10 10:53:35</a> UTC </small></i></p>
+
diff --git a/www/cli.html b/www/cli.html
new file mode 100644
index 0000000..01fda85
--- /dev/null
+++ b/www/cli.html
@@ -0,0 +1,2007 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Command Line Shell For SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Command Line Shell For SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#getting_started">1. Getting Started</a></div>
+<div class="fancy-toc1"><a href="#double_click_startup_on_windows">2. Double-click Startup On Windows</a></div>
+<div class="fancy-toc1"><a href="#special_commands_to_sqlite3_dot_commands_">3. Special commands to sqlite3 (dot-commands)</a></div>
+<div class="fancy-toc1"><a href="#rules_for_dot_commands_sql_and_more">4. Rules for "dot-commands", SQL and More</a></div>
+<div class="fancy-toc2"><a href="#line_structure">4.1. Line Structure</a></div>
+<div class="fancy-toc2"><a href="#dot_command_arguments">4.2. Dot-command arguments</a></div>
+<div class="fancy-toc2"><a href="#dot_command_execution">4.3. Dot-command execution</a></div>
+<div class="fancy-toc1"><a href="#changing_output_formats">5. Changing Output Formats</a></div>
+<div class="fancy-toc1"><a href="#querying_the_database_schema">6. Querying the database schema</a></div>
+<div class="fancy-toc1"><a href="#opening_database_files">7. Opening Database Files</a></div>
+<div class="fancy-toc1"><a href="#redirecting_i_o">8. Redirecting I/O</a></div>
+<div class="fancy-toc2"><a href="#writing_results_to_a_file">8.1. Writing results to a file</a></div>
+<div class="fancy-toc2"><a href="#reading_sql_from_a_file">8.2. Reading SQL from a file</a></div>
+<div class="fancy-toc2"><a href="#file_i_o_functions">8.3. File I/O Functions</a></div>
+<div class="fancy-toc2"><a href="#the_edit_sql_function">8.4. The edit() SQL function</a></div>
+<div class="fancy-toc2"><a href="#importing_files_as_csv_or_other_formats">8.5. Importing files as CSV or other formats</a></div>
+<div class="fancy-toc2"><a href="#export_to_csv">8.6. Export to CSV</a></div>
+<div class="fancy-toc3"><a href="#_export_to_excel_">8.6.1. Export to Excel </a></div>
+<div class="fancy-toc3"><a href="#_export_to_tsv_tab_separated_values_">8.6.2. Export to TSV (tab separated values)</a></div>
+<div class="fancy-toc1"><a href="#accessing_zip_archives_as_database_files">9. Accessing ZIP Archives As Database Files</a></div>
+<div class="fancy-toc2"><a href="#how_zip_archive_access_is_implemented">9.1. How ZIP archive access is implemented</a></div>
+<div class="fancy-toc1"><a href="#converting_an_entire_database_to_a_text_file">10. Converting An Entire Database To A Text File</a></div>
+<div class="fancy-toc1"><a href="#recover_data_from_a_corrupted_database">11. Recover Data From a Corrupted Database</a></div>
+<div class="fancy-toc1"><a href="#loading_extensions">12. Loading Extensions</a></div>
+<div class="fancy-toc1"><a href="#cryptographic_hashes_of_database_content">13. Cryptographic Hashes Of Database Content</a></div>
+<div class="fancy-toc1"><a href="#database_content_self_tests">14. Database Content Self-Tests</a></div>
+<div class="fancy-toc1"><a href="#sqlite_archive_support">15. SQLite Archive Support</a></div>
+<div class="fancy-toc2"><a href="#_sqlite_archive_create_command_">15.1. SQLite Archive Create Command </a></div>
+<div class="fancy-toc2"><a href="#_sqlite_archive_extract_command_">15.2. SQLite Archive Extract Command </a></div>
+<div class="fancy-toc2"><a href="#_sqlite_archive_list_command_">15.3. SQLite Archive List Command </a></div>
+<div class="fancy-toc2"><a href="#_sqlite_archive_insert_and_update_commands_">15.4. SQLite Archive Insert And Update Commands </a></div>
+<div class="fancy-toc2"><a href="#_sqlite_archive_remove_command_">15.5. SQLite Archive Remove Command </a></div>
+<div class="fancy-toc2"><a href="#_operations_on_zip_archives_">15.6. Operations On ZIP Archives </a></div>
+<div class="fancy-toc2"><a href="#_sql_used_to_implement_sqlite_archive_operations_">15.7. SQL Used To Implement SQLite Archive Operations </a></div>
+<div class="fancy-toc1"><a href="#sql_parameters">16. SQL Parameters</a></div>
+<div class="fancy-toc1"><a href="#index_recommendations_sqlite_expert_">17. Index Recommendations (SQLite Expert)</a></div>
+<div class="fancy-toc1"><a href="#working_with_multiple_database_connections">18. Working With Multiple Database Connections</a></div>
+<div class="fancy-toc1"><a href="#miscellaneous_extension_features">19. Miscellaneous Extension Features</a></div>
+<div class="fancy-toc1"><a href="#other_dot_commands">20. Other Dot Commands</a></div>
+<div class="fancy-toc1"><a href="#using_sqlite3_in_a_shell_script">21. Using sqlite3 in a shell script</a></div>
+<div class="fancy-toc1"><a href="#marking_the_end_of_an_sql_statement">22. Marking The End Of An SQL Statement</a></div>
+<div class="fancy-toc1"><a href="#command_line_options">23. Command-line Options</a></div>
+<div class="fancy-toc2"><a href="#the_safe_command_line_option">23.1. The --safe command-line option</a></div>
+<div class="fancy-toc3"><a href="#bypassing_safe_restrictions_for_specific_commands">23.1.1. Bypassing --safe restrictions for specific commands</a></div>
+<div class="fancy-toc1"><a href="#compiling_the_sqlite3_program_from_sources">24. Compiling the sqlite3 program from sources</a></div>
+<div class="fancy-toc2"><a href="#_do_it_yourself_builds_">24.1. Do-It-Yourself Builds </a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<a name="intro"></a>
+
+<h1 id="getting_started"><span>1. </span>Getting Started</h1>
+
+<p>The SQLite project provides a simple command-line program named
+<b>sqlite3</b> (or <b>sqlite3.exe</b> on Windows)
+that allows the user to manually enter and execute SQL
+statements against an SQLite database or against a
+<a href="#zipdb">ZIP archive</a>. This document provides a brief
+introduction on how to use the <b>sqlite3</b> program.
+
+</p><p>Start the <b>sqlite3</b> program by typing "sqlite3" at the
+command prompt, optionally followed
+by the name of the file that holds the SQLite database
+(or <a href="#zipdb">ZIP archive</a>). If the named
+file does not exist, a new database file with the given name will be
+created automatically. If no database file is specified on the
+command-line, a temporary database is created and automatically deleted when
+the "sqlite3" program exits.
+
+</p><p>On startup, the <b>sqlite3</b> program will show a brief banner
+message then prompt you to enter SQL. Type in SQL statements (terminated
+by a semicolon), press "Enter" and the SQL will be executed.</p>
+
+<p>For example, to create a new SQLite database named "ex1"
+with a single table named "tbl1", you might do this:</p>
+
+<div class="codeblock"><pre>$ <b>sqlite3 ex1</b>
+SQLite version 3.36.0 2021-06-18 18:36:39
+Enter ".help" for usage hints.
+sqlite&gt; <b>create table tbl1(one text, two int);</b>
+sqlite&gt; <b>insert into tbl1 values('hello!',10);</b>
+sqlite&gt; <b>insert into tbl1 values('goodbye', 20);</b>
+sqlite&gt; <b>select * from tbl1;</b>
+hello!|10
+goodbye|20
+sqlite&gt;
+</pre></div>
+
+<p>Terminate the sqlite3 program by typing your system
+End-Of-File character (usually a Control-D). Use the interrupt
+character (usually a Control-C) to stop a long-running SQL statement.</p>
+
+<p>Make sure you type a semicolon at the end of each SQL command!
+The sqlite3 program looks for a semicolon to know when your SQL command is
+complete. If you omit the semicolon, sqlite3 will give you a
+continuation prompt and wait for you to enter more text to
+complete the SQL command. This feature allows you to
+enter SQL commands that span multiple lines. For example:</p>
+
+
+<div class="codeblock"><pre>sqlite&gt; <b>CREATE TABLE tbl2 (</b>
+ ...&gt; <b> f1 varchar(30) primary key,</b>
+ ...&gt; <b> f2 text,</b>
+ ...&gt; <b> f3 real</b>
+ ...&gt; <b>);</b>
+sqlite&gt;
+</pre></div>
+
+<a name="dblclick"></a>
+
+<h1 id="double_click_startup_on_windows"><span>2. </span>Double-click Startup On Windows</h1>
+
+<p>Windows users can double-click on the <b>sqlite3.exe</b> icon to cause
+the command-line shell to pop-up a terminal window running SQLite. However,
+because double-clicking starts the sqlite3.exe without command-line arguments,
+no database file will have been specified, so SQLite will use a temporary
+database that is deleted when the session exits.
+To use a persistent disk file as the database, enter the ".open" command
+immediately after the terminal window starts up:
+
+</p><div class="codeblock"><pre>SQLite version 3.36.0 2021-06-18 18:36:39
+Enter ".help" for usage hints.
+Connected to a transient in-memory database.
+Use ".open FILENAME" to reopen on a persistent database.
+sqlite&gt; <b>.open ex1.db</b>
+sqlite&gt;
+</pre></div>
+
+<p>The example above causes the database file named "ex1.db" to be opened
+and used. The "ex1.db" file is created if it does not previously exist.
+You might want to
+use a full pathname to ensure that the file is in the directory that you
+think it is in. Use forward-slashes as the directory separator character.
+In other words use "c:/work/ex1.db", not "c:\work\ex1.db".</p>
+
+<p>Alternatively, you can create a new database using the default temporary
+storage, then save that database into a disk file using the ".save" command:
+
+</p><div class="codeblock"><pre>SQLite version 3.36.0 2021-06-18 18:36:39
+Enter ".help" for usage hints.
+Connected to a transient in-memory database.
+Use ".open FILENAME" to reopen on a persistent database.
+sqlite&gt; <i>... many SQL commands omitted ...</i>
+sqlite&gt; <b>.save ex1.db</b>
+sqlite&gt;
+</pre></div>
+
+<p>Be careful when using the ".save" command as it will overwrite any
+preexisting database files having the same name without prompting for
+confirmation. As with the ".open" command, you might want to use a
+full pathname with forward-slash directory separators to avoid ambiguity.
+
+<a name="dotcmd"></a>
+
+</p><h1 id="special_commands_to_sqlite3_dot_commands_"><span>3. </span>Special commands to sqlite3 (dot-commands)</h1>
+
+<p>
+Most of the time, sqlite3 just reads lines of input and passes them
+on to the SQLite library for execution.
+But input lines that begin with a dot (".")
+are intercepted and interpreted by the sqlite3 program itself.
+These "dot commands" are typically used to change the output format
+of queries, or to execute certain prepackaged query statements.
+There were originally just a few dot commands, but over the years
+many new features have accumulated so that today there are over 60.
+</p>
+
+<p>
+For a listing of the available dot commands, you can enter ".help" with
+no arguments. Or enter ".help TOPIC" for detailed information about TOPIC.
+The list of available dot-commands follows:
+</p>
+
+<div class="codeblock"><pre>sqlite&gt; <b>.help</b>
+.archive ... Manage SQL archives
+.auth ON|OFF Show authorizer callbacks
+.backup ?DB? FILE Backup DB (default "main") to FILE
+.bail on|off Stop after hitting an error. Default OFF
+.binary on|off Turn binary output on or off. Default OFF
+.cd DIRECTORY Change the working directory to DIRECTORY
+.changes on|off Show number of rows changed by SQL
+.check GLOB Fail if output since .testcase does not match
+.clone NEWDB Clone data into NEWDB from the existing database
+.connection &#91;close&#93; &#91;#&#93; Open or close an auxiliary database connection
+.databases List names and files of attached databases
+.dbconfig ?op? ?val? List or change sqlite3_db_config() options
+.dbinfo ?DB? Show status information about the database
+.dump ?OBJECTS? Render database content as SQL
+.echo on|off Turn command echo on or off
+.eqp on|off|full|... Enable or disable automatic EXPLAIN QUERY PLAN
+.excel Display the output of next command in spreadsheet
+.exit ?CODE? Exit this program with return-code CODE
+.expert EXPERIMENTAL. Suggest indexes for queries
+.explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto
+.filectrl CMD ... Run various sqlite3_file_control() operations
+.fullschema ?--indent? Show schema and the content of sqlite_stat tables
+.headers on|off Turn display of headers on or off
+.help ?-all? ?PATTERN? Show help text for PATTERN
+.import FILE TABLE Import data from FILE into TABLE
+.imposter INDEX TABLE Create imposter table TABLE on index INDEX
+.indexes ?TABLE? Show names of indexes
+.limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT
+.lint OPTIONS Report potential schema issues.
+.load FILE ?ENTRY? Load an extension library
+.log FILE|off Turn logging on or off. FILE can be stderr/stdout
+.mode MODE ?TABLE? Set output mode
+.nonce STRING Disable safe mode for one command if the nonce matches
+.nullvalue STRING Use STRING in place of NULL values
+.once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE
+.open ?OPTIONS? ?FILE? Close existing database and reopen FILE
+.output ?FILE? Send output to FILE or stdout if FILE is omitted
+.parameter CMD ... Manage SQL parameter bindings
+.print STRING... Print literal STRING
+.progress N Invoke progress handler after every N opcodes
+.prompt MAIN CONTINUE Replace the standard prompts
+.quit Exit this program
+.read FILE Read input from FILE
+.recover Recover as much data as possible from corrupt db.
+.restore ?DB? FILE Restore content of DB (default "main") from FILE
+.save FILE Write in-memory database into FILE
+.scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off
+.schema ?PATTERN? Show the CREATE statements matching PATTERN
+.selftest ?OPTIONS? Run tests defined in the SELFTEST table
+.separator COL ?ROW? Change the column and row separators
+.session ?NAME? CMD ... Create or control sessions
+.sha3sum ... Compute a SHA3 hash of database content
+.shell CMD ARGS... Run CMD ARGS... in a system shell
+.show Show the current values for various settings
+.stats ?ARG? Show stats or turn stats on or off
+.system CMD ARGS... Run CMD ARGS... in a system shell
+.tables ?TABLE? List names of tables matching LIKE pattern TABLE
+.testcase NAME Begin redirecting output to 'testcase-out.txt'
+.testctrl CMD ... Run various sqlite3_test_control() operations
+.timeout MS Try opening locked tables for MS milliseconds
+.timer on|off Turn SQL timer on or off
+.trace ?OPTIONS? Output each SQL statement as it is run
+.vfsinfo ?AUX? Information about the top-level VFS
+.vfslist List all available VFSes
+.vfsname ?AUX? Print the name of the VFS stack
+.width NUM1 NUM2 ... Set minimum column widths for columnar output
+sqlite&gt;
+</pre></div>
+
+<a name="dotrules"></a>
+
+<h1 id="rules_for_dot_commands_sql_and_more"><span>4. </span>Rules for "dot-commands", SQL and More</h1>
+
+<h2 id="line_structure"><span>4.1. </span>Line Structure</h2>
+
+<p>The CLI's input is parsed into a sequence consisting of:
+ </p><ul>
+ <li>SQL statements;</li>
+ <li>dot-commands; or</li>
+ <li>CLI comments</li>
+ </ul>
+<p>SQL statements are free-form, and can be spread across multiple lines,
+ with whitespace or SQL comments embedded anywhere.
+ They are terminated by either a ';' character at the end of an input line,
+ or a '/' character or the word "go" on a line by itself.
+ When not at the end of an input line, the ';' character
+ acts to separate SQL statements.
+ Trailing whitespace is ignored for purposes of termination.
+</p><p>A dot-command has a more restrictive structure:
+</p><ul>
+<li>It must begin with its "." at the left margin
+ with no preceding whitespace.</li>
+<li>It must be entirely contained on a single input line.</li>
+<li>It cannot occur in the middle of an ordinary SQL
+ statement. In other words, it cannot occur at a
+ continuation prompt.</li>
+<li>There is no comment syntax for dot-commands.</li>
+</ul>
+<p>The CLI also accepts whole-line comments that
+begin with a '#' character and extend to the end of the line.
+There can be no with whitespace prior to the '#'.
+
+</p><h2 id="dot_command_arguments"><span>4.2. </span>Dot-command arguments</h2>
+<p>The arguments passed to dot-commands are parsed from the command tail,
+ per these rules:
+</p><ol>
+ <li>The trailing newline and any other trailing whitespace is discarded;</li>
+ <li>Whitespace immediately following the dot-command name, or any argument
+ input end bound is discarded;</li>
+ <li>An argument input begins with any non-whitespace character;</li>
+ <li>An argument input ends with a character which
+ depends upon its leading character thusly:</li>
+ <ul>
+ <li>for a leading single-quote ('), a single-quote acts
+ as the end delimiter;</li>
+ <li>for a leading double-quote ("), an unescaped double-quote
+ acts as the end delimiter;</li>
+ <li>for any other leading character, the end delimiter is
+ any whitespace; and</li>
+ <li>the command tail end acts as the end delimiter for any argument;</li>
+ </ul>
+ <li>Within a double-quoted argument input, a backslash-escaped double-quote
+ is part of the argument rather than its terminating quote;</li>
+ <li>Within a double-quoted argument, traditional C-string literal, backslash
+ escape sequence translation is done; and</li>
+ <li>Argument input delimiters (the bounding quotes or whitespace)
+ are discarded to yield the passed argument.</li>
+</ol>
+
+<h2 id="dot_command_execution"><span>4.3. </span>Dot-command execution</h2>
+<p>The dot-commands
+are interpreted by the sqlite3.exe command-line program, not by
+SQLite itself. So none of the dot-commands will work as an argument
+to SQLite interfaces such as <a href="c3ref/prepare.html">sqlite3_prepare()</a> or <a href="c3ref/exec.html">sqlite3_exec()</a>.
+
+<a name="dotmode"></a>
+
+</p><h1 id="changing_output_formats"><span>5. </span>Changing Output Formats</h1>
+
+<p>The sqlite3 program is able to show the results of a query
+in 14 different output formats:
+</p><div class="columns" style="columns:8em auto;">
+<ul style="padding-top:0;padding-left:4em;">
+<li> ascii
+</li><li> box
+</li><li> csv
+</li><li> column
+</li><li> html
+</li><li> insert
+</li><li> json
+</li><li> line
+</li><li> list
+</li><li> markdown
+</li><li> quote
+</li><li> table
+</li><li> tabs
+</li><li> tcl
+</li></ul></div>
+
+<p>You can use the ".mode" dot command to switch between these output
+formats.
+The default output mode is "list". In
+list mode, each row of a query result is written on one line of
+output and each column within that row is separated by a specific
+separator string. The default separator is a pipe symbol ("|").
+List mode is especially useful when you are going to send the output
+of a query to another program (such as AWK) for additional processing.</p>
+
+<div class="codeblock"><pre>sqlite&gt; <b>.mode list</b>
+sqlite&gt; <b>select * from tbl1;</b>
+hello!|10
+goodbye|20
+sqlite&gt;
+</pre></div>
+
+<p>Type ".mode" with no arguments to show the current mode:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.mode</b>
+current output mode: list
+sqlite&gt;
+</pre></div>
+
+<p>Use the ".separator" dot command to change the separator.
+For example, to change the separator to a comma and
+a space, you could do this:</p>
+
+<div class="codeblock"><pre>sqlite&gt; <b>.separator ", "</b>
+sqlite&gt; <b>select * from tbl1;</b>
+hello!, 10
+goodbye, 20
+sqlite&gt;
+</pre></div>
+
+<p>The next ".mode" command might reset the ".separator" back to some
+default value (depending on its arguments).
+So you will likely need to repeat the ".separator" command whenever you
+change modes if you want to continue using a non-standard separator.
+
+<a name="dotmodequote"></a>
+
+</p><p>In "quote" mode, the output is formatted as SQL literals. Strings are
+enclosed in single-quotes and internal single-quotes are escaped by doubling.
+Blobs are displayed in hexadecimal blob literal notation (Ex: x'abcd').
+Numbers are displayed as ASCII text and NULL values are shown as "NULL".
+All columns are separated from each other by a comma (or whatever alternative
+character is selected using ".separator").
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.mode quote</b>
+sqlite&gt; <b>select * from tbl1;</b>
+'hello!',10
+'goodbye',20
+sqlite&gt;
+</pre></div>
+
+<p>In "line" mode, each column in a row of the database
+is shown on a line by itself. Each line consists of the column
+name, an equal sign and the column data. Successive records are
+separated by a blank line. Here is an example of line mode
+output:</p>
+
+<div class="codeblock"><pre>sqlite&gt; <b>.mode line</b>
+sqlite&gt; <b>select * from tbl1;</b>
+one = hello!
+two = 10
+
+one = goodbye
+two = 20
+sqlite&gt;
+</pre></div>
+
+<a name="clmnr"></a>
+
+
+<p>In column mode, each record is shown on a separate line with the
+data aligned in columns. For example:</p>
+
+<div class="codeblock"><pre>sqlite&gt; <b>.mode column</b>
+sqlite&gt; <b>select * from tbl1;</b>
+one two
+-------- ---
+hello! 10
+goodbye 20
+sqlite&gt;
+</pre></div>
+
+<p>In "column" mode (and also in "box", "table", and "markdown" modes)
+the width of columns adjusts automatically. But you can override this,
+providing a speicified width for each column using the ".width" command.
+The arguments to ".width" are integers which are the number of
+characters to devote to each column. Negative numbers mean right-justify.
+Thus:</p>
+
+<div class="codeblock"><pre>sqlite&gt; <b>.width 12 -6</b>
+sqlite&gt; <b>select * from tbl1;</b>
+one two
+------------ ------
+hello! 10
+goodbye 20
+sqlite&gt;
+</pre></div>
+
+<p>A width of 0 means the column width is chosen automatically.
+Unspecified column widths become zero. Hence, the command
+".width" with no arguments resets all column widths to zero and
+hence causes all column widths to be determined automatically.
+
+</p><p>The "column" mode is a tabular output format. Other
+tabular output formats are "box", "markdown", and "table":
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.width</b>
+sqlite&gt; <b>.mode markdown</b>
+sqlite&gt; <b>select * from tbl1;</b>
+| one | two |
+|---------|-----|
+| hello! | 10 |
+| goodbye | 20 |
+sqlite&gt; <b>.mode table</b>
+sqlite&gt; <b>select * from tbl1;</b>
++---------+-----+
+| one | two |
++---------+-----+
+| hello! | 10 |
+| goodbye | 20 |
++---------+-----+
+sqlite&gt; <b>.mode box</b>
+sqlite&gt; <b>select * from tbl1;</b>
+┌─────────┬─────┐
+│ one │ two │
+├─────────┼─────┤
+│ hello! │ 10 │
+│ goodbye │ 20 │
+└─────────┴─────┘
+sqlite&gt;
+</pre></div>
+
+<a name="wrap1"></a>
+
+
+<p>The columnar modes accept some addition options to control formatting.
+The "--wrap <i>N</i>" option (where <i>N</i> is an integer) causes columns
+to wrap text that is longer than N characters. Wrapping is disabled if
+N is zero.
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>insert into tbl1 values('The quick fox jumps over a lazy brown dog.',90);</b>
+sqlite&gt; <b>.mode box --wrap 30</b>
+sqlite&gt; <b>select * from tbl1 where two&gt;50;</b>
+┌────────────────────────────────┬─────┐
+│ one │ two │
+├────────────────────────────────┼─────┤
+│ The quick fox jumps over a laz │ 90 │
+│ y brown dog. │ │
+└────────────────────────────────┴─────┘
+sqlite&gt;
+</pre></div>
+
+<p>Wrapping happens after exactly <i>N</i> characters,
+which might be in the middle of a word.
+To wrap at a word boundary, add the "--wordwrap on" option
+(or just "-ww" for short):
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.mode box --wrap 30 -ww</b>
+sqlite&gt; <b>select * from tbl1 where two&gt;50;</b>
+┌─────────────────────────────┬─────┐
+│ one │ two │
+├─────────────────────────────┼─────┤
+│ The quick fox jumps over a │ 90 │
+│ lazy brown dog. │ │
+└─────────────────────────────┴─────┘
+sqlite&gt;
+</pre></div>
+
+<p>The "--quote" option causes the results in each column to be
+quoted like an SQL literal, as in the "quote" mode. See the on-line
+help for additional options.
+
+<a name="qbox"></a>
+
+</p><p>The command ".mode box --wrap 60 --quote" is so useful for general-purpose
+database queries that it is given its own alias. Instead of typing out
+that whole 27-character command, you can just say ".mode qbox".
+
+</p><p>Another useful output mode is "insert". In insert mode, the output
+is formatted to look like SQL INSERT statements. Use insert
+mode to generate text that can later be used to input data into a
+different database.</p>
+
+<p>When specifying insert mode, you have to give an extra argument
+which is the name of the table to be inserted into. For example:</p>
+
+<div class="codeblock"><pre>sqlite&gt; <b>.mode insert new_table</b>
+sqlite&gt; <b>select * from tbl1 where two&lt;50;</b>
+INSERT INTO "new_table" VALUES('hello',10);
+INSERT INTO "new_table" VALUES('goodbye',20);
+sqlite&gt;
+</pre></div>
+
+
+<p>Other output modes include "csv", "json", and "tcl". Try these
+yourself to see what they do.
+</p>
+
+<a name="schema"></a>
+
+<h1 id="querying_the_database_schema"><span>6. </span>Querying the database schema</h1>
+
+<p>The sqlite3 program provides several convenience commands that
+are useful for looking at the schema of the database. There is
+nothing that these commands do that cannot be done by some other
+means. These commands are provided purely as a shortcut.</p>
+
+<a name="dtables"></a>
+
+<p>For example, to see a list of the tables in the database, you
+can enter ".tables".</p>
+
+
+<div class="codeblock"><pre>sqlite&gt; <b>.tables</b>
+tbl1 tbl2
+sqlite&gt;
+</pre></div>
+
+
+<p>The ".tables" command is similar to setting list mode then
+executing the following query:</p>
+
+<div class="codeblock"><pre>SELECT name FROM sqlite_schema
+WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
+ORDER BY 1
+</pre></div>
+
+<p>But the ".tables" command does more. It queries the <a href="schematab.html">sqlite_schema</a> table
+for all <a href="lang_attach.html">attached</a> databases, not just the primary database. And it arranges
+its output into neat columns.
+
+</p><p>The ".indexes" command works in a similar way to list all of
+the indexes. If the ".indexes" command is given an argument which is
+the name of a table, then it shows just indexes on that table.
+
+<a name="dschema"></a>
+
+</p><p>The ".schema" command shows the complete schema for the database,
+or for a single table if an optional tablename argument is provided:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.schema</b>
+create table tbl1(one varchar(10), two smallint)
+CREATE TABLE tbl2 (
+ f1 varchar(30) primary key,
+ f2 text,
+ f3 real
+);
+sqlite&gt; <b>.schema tbl2</b>
+CREATE TABLE tbl2 (
+ f1 varchar(30) primary key,
+ f2 text,
+ f3 real
+);
+sqlite&gt;
+</pre></div>
+
+
+<p>The ".schema" command is roughly the same as setting
+list mode, then entering the following query:</p>
+
+<div class="codeblock"><pre>SELECT sql FROM sqlite_schema
+ORDER BY tbl_name, type DESC, name
+</pre></div>
+
+<p>As with ".tables", the ".schema" command shows the schema for
+all <a href="lang_attach.html">attached</a> databases. If you only want to see the schema for
+a single database (perhaps "main") then you can add an argument
+to ".schema" to restrict its output:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.schema main.*</b>
+</pre></div>
+
+<p>The ".schema" command can be augmented with the "--indent" option,
+in which case it tries to reformat the various CREATE statements of
+the schema so that they are more easily readable by humans.
+
+<a name="dotdatabases"></a>
+
+</p><p>The ".databases" command shows a list of all databases open in
+the current connection. There will always be at least 2. The first
+one is "main", the original database opened. The second is "temp",
+the database used for temporary tables. There may be additional
+databases listed for databases attached using the ATTACH statement.
+The first output column is the name the database is attached with,
+and the second result column is the filename of the external file.
+There may be a third result column which will be either "'r/o'" or
+"'r/w'" depending on whether the database file is read-only or read-write.
+And there might be a fourth result column showing the result of
+<a href="c3ref/txn_state.html">sqlite3_txn_state()</a> for that database file.
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.databases</b>
+</pre></div>
+
+<a name="fullschema"></a>
+
+<p>The ".fullschema" dot-command works like the ".schema" command in
+that it displays the entire database schema. But ".fullschema" also
+includes dumps of the statistics tables "sqlite_stat1", "sqlite_stat3",
+and "sqlite_stat4", if they exist. The ".fullschema" command normally
+provides all of the information needed to exactly recreate a query
+plan for a specific query. When reporting suspected problems with
+the SQLite query planner to the SQLite development team, developers
+are requested to provide the complete ".fullschema" output as part
+of the trouble report. Note that the sqlite_stat3 and sqlite_stat4
+tables contain samples of index entries and so might contain sensitive
+data, so do not send the ".fullschema" output of a proprietary database
+over a public channel.</p>
+
+<a name="dotopen"></a>
+
+<h1 id="opening_database_files"><span>7. </span>Opening Database Files</h1>
+
+<p>The ".open" command opens a new database connection, after first closing the
+previously opened database command. In its simplest form, the ".open" command merely
+invokes <a href="c3ref/open.html">sqlite3_open()</a> on the file named as its argument. Use the name ":memory:"
+to open a new in-memory database that disappears when the CLI exits or when the
+".open" command is run again.
+
+</p><p>If the --new option is included with ".open", then the database is reset prior
+to being opened. Any prior data is destroyed. This is a destructive overwrite of
+prior data and no confirmation is requested, so use this option carefully.
+
+</p><p>The --readonly option opens the database in read-only mode. Write will be
+prohibited.
+
+</p><p>The --deserialize option causes the entire content of the on-disk file to be
+read into memory and then opened as an in-memory database using the
+<a href="c3ref/deserialize.html">sqlite3_deserialize()</a> interface. This will, of course, require a lot of memory
+if you have a large database. Also, any changes you make to the database will not
+be saved back to disk unless you explicitly save them using the ".save" or ".backup"
+commands.
+
+</p><p>The --append option causes the SQLite database to be appended to an existing
+file rather than working as a stand-alone file. See the
+<a href="https://www.sqlite.org/src/file/ext/misc/appendvfs.c">appendvfs extension</a> for
+more information.
+
+</p><p>The --zip option causes the specified input file to be interpreted as a ZIP archive
+instead of as an SQLite database file.
+
+</p><p>The --hexdb option causes the database content to be to be read from subsequent
+lines of input in a hex format, rather than from a separate file on disk.
+The "dbtotxt" command-line tool can be used to generate
+the appropriate text for a database. The --hexdb option is intended for use by the
+SQLite developers for testing purposes. We do not know of any use cases for this
+option outside of internal SQLite testing and development.
+
+</p><h1 id="redirecting_i_o"><span>8. </span>Redirecting I/O</h1>
+
+<a name="dotoutput"></a>
+
+<h2 id="writing_results_to_a_file"><span>8.1. </span>Writing results to a file</h2>
+
+<p>By default, sqlite3 sends query results to standard output. You
+can change this using the ".output" and ".once" commands. Just put
+the name of an output file as an argument to .output and all subsequent
+query results will be written to that file. Or use the .once command
+instead of .output and output will only be redirected for the single next
+command before reverting to the console. Use .output with no arguments to
+begin writing to standard output again. For example:</p>
+
+<div class="codeblock"><pre>sqlite&gt; <b>.mode list</b>
+sqlite&gt; <b>.separator |</b>
+sqlite&gt; <b>.output test_file_1.txt</b>
+sqlite&gt; <b>select * from tbl1;</b>
+sqlite&gt; <b>.exit</b>
+$ <b>cat test_file_1.txt</b>
+hello|10
+goodbye|20
+$
+</pre></div>
+
+<p>If the first character of the ".output" or ".once" filename is a pipe
+symbol ("|") then the remaining characters are treated as a command and the
+output is sent to that command. This makes it easy to pipe the results
+of a query into some other process. For example, the
+"open -f" command on a Mac opens a text editor to display the content that
+it reads from standard input. So to see the results of a query
+in a text editor, one could type:</p>
+
+<div class="codeblock"><pre>sqlite&gt; <b>.once | open -f</b>
+sqlite&gt; <b>SELECT * FROM bigTable;</b>
+</pre></div>
+
+<p>If the ".output" or ".once" commands have an argument of "-e" then
+output is collected into a temporary file and the system text editor is
+invoked on that text file. Thus, the command ".once -e" achieves the
+same result as ".once '|open -f'" but with the benefit of being portable
+across all systems.
+
+</p><p>If the ".output" or ".once" commands have a "-x" argument, that causes
+them to accumulate output as Comma-Separated-Values (CSV) in a temporary
+file, then invoke the default system utility for viewing CSV files
+(usually a spreadsheet program) on the result. This is a quick way of
+sending the result of a query to a spreadsheet for easy viewing:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.once -x</b>
+sqlite&gt; <b>SELECT * FROM bigTable;</b>
+</pre></div>
+
+<a name="dotexcel"></a>
+
+<p>The ".excel" command is an alias for ".once -x". It does exactly the same
+thing.
+
+<a name="dotread"></a>
+
+</p><h2 id="reading_sql_from_a_file"><span>8.2. </span>Reading SQL from a file</h2>
+
+<p>In interactive mode, sqlite3 reads input text (either SQL statements
+or <a href="cli.html#dotcmd">dot-commands</a>) from the keyboard. You can also redirect input from
+a file when you launch sqlite3, of course, but then you do not have the
+ability to interact with the program. Sometimes it is useful to run an
+SQL script contained in a file entering other commands from the command-line.
+For this, the ".read" dot-command is provided.
+
+</p><p>The ".read" command takes a single argument which is (usually) the name
+of a file from which to read input text.
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.read myscript.sql</b>
+</pre></div>
+
+<p>The ".read" command temporarily stops reading from the keyboard and instead
+takes its input from the file named. Upon reaching the end of the file,
+input reverts back to the keyboard. The script file may contain dot-commands,
+just like ordinary interactive input.
+
+</p><p>If the argument to ".read" begins with the "|" character, then instead of
+opening the argument as a file, it runs the argument (without the leading "|")
+as a command, then uses the output of that command as its input. Thus, if you
+have a script that generates SQL, you can execute that SQL directly using
+a command similar to the following:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.read |myscript.bat</b>
+</pre></div>
+
+
+<a name="fileio"></a>
+
+<h2 id="file_i_o_functions"><span>8.3. </span>File I/O Functions</h2>
+
+<p>The command-line shell adds two <a href="appfunc.html">application-defined SQL functions</a> that
+facilitate reading content from a file into a table column, and writing the
+content of a column into a file, respectively.
+
+</p><p>The readfile(X) SQL function reads the entire content of the file named
+X and returns that content as a BLOB. This can be used to load content into
+a table. For example:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>CREATE TABLE images(name TEXT, type TEXT, img BLOB);</b>
+sqlite&gt; <b>INSERT INTO images(name,type,img</b>)
+ ...&gt; <b> VALUES('icon','jpeg',readfile('icon.jpg'));</b>
+</pre></div>
+
+<p>The writefile(X,Y) SQL function write the blob Y into the file named X
+and returns the number of bytes written. Use this function to extract
+the content of a single table column into a file. For example:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>SELECT writefile('icon.jpg',img) FROM images WHERE name='icon';</b>
+</pre></div>
+
+<p>Note that the readfile(X) and writefile(X,Y) functions are extension
+functions and are not built into the core SQLite library. These routines
+are available as a <a href="loadext.html">loadable extension</a> in the
+<a href="http://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/fileio.c">ext/misc/fileio.c</a>
+source file in the <a href="download.html#srctree">SQLite source code repositories</a>.
+
+<a name="editfunc"></a>
+
+</p><h2 id="the_edit_sql_function"><span>8.4. </span>The edit() SQL function</h2>
+
+<p>The CLI has another built-in SQL function named edit(). Edit() takes
+one or two arguments. The first argument is a value - often a large
+multi-line string to be edited. The second argument is the invocation
+for a text editor. (It may include options to affect the editor's
+behavior.) If the second argument is omitted, the VISUAL environment
+variable is used. The edit() function writes its first argument into a
+temporary file, invokes the editor on the temporary file, rereads the file
+back into memory after the editor is done, then returns the edited text.
+
+</p><p>The edit() function can be used to make changes to large text
+values. For example:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>UPDATE docs SET body=edit(body) WHERE name='report-15';</b>
+</pre></div>
+
+<p>In this example, the content of the docs.body field for the entry where
+docs.name is "report-15" will be sent to the editor. After the editor returns,
+the result will be written back into the docs.body field.
+
+</p><p>The default operation of edit() is to invoke a text editor. But by using
+an alternative edit program in the second argument, you can also get it to edit
+images or other non-text resources. For example, if you want to modify a JPEG
+image that happens to be stored in a field of a table, you could run:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>UPDATE pics SET img=edit(img,'gimp') WHERE id='pic-1542';</b>
+</pre></div>
+
+<p>The edit program can also be used as a viewer, by simply ignoring the
+return value. For example, to merely look at the image above, you might run:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>SELECT length(edit(img,'gimp')) WHERE id='pic-1542';</b>
+</pre></div>
+
+<a name="csv"></a>
+
+<h2 id="importing_files_as_csv_or_other_formats"><span>8.5. </span>Importing files as CSV or other formats</h2>
+
+<p>Use the ".import" command to import CSV (comma separated value)
+or similarly delimited data into an SQLite table.
+The ".import" command takes two arguments which are the
+source from which data is to be read and the name of the
+SQLite table into which the data is to be inserted. The source argument
+is the name of a file to be read or, if it begins with a "|" character,
+it specifies a command which will be run to produce the input data.
+
+</p><p>Note that it may be important to set the "mode" before running the
+ ".import" command. This is prudent to prevent the command-line shell
+from trying to interpret the input file text as some format other than
+how the file is structured. If the --csv or --ascii options are used,
+they control import input delimiters. Otherwise, the delimiters are
+those in effect for the current output mode.
+
+</p><p>To import into a table not in the "main" schema, the --schema option
+may be used to specify that the table is in some other schema. This can
+be useful for ATTACH'ed databases or to import into a TEMP table.
+
+</p><p>When .import is run, its treatment of the first input row depends
+upon whether the target table already exists. If it does not exist,
+the table is automatically created and the content of the first input
+row is used to set the name of all the columns in the table. In this
+case, the table data content is taken from the second and subsequent
+input rows. If the target table already exists, every row of the
+input, including the first, is taken to be actual data content. If
+the input file contains an initial row of column labels, you can make
+the .import command skip that initial row using the "--skip 1" option.
+
+</p><p>Here is an example usage, loading a pre-existing temporary table
+from a CSV file which has column names in its first row:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.import --csv --skip 1 --schema temp C:/work/somedata.csv tab1</b>
+</pre></div>
+
+<p>While reading input data in modes other than 'ascii', ".import"
+interprets input as records composed of fields according to the RFC 4180
+specification with this exception: The input record and field separators
+are as set by the mode or by use of the .separator command. Fields are
+always subject to quote removal to reverse quoting done per RFC 4180,
+except in ascii mode.
+
+</p><p>To import data with arbitrary delimiters and no quoting,
+first set ascii mode (".mode&nbsp;ascii"), then set the field
+and record delimiters using the ".separators" command. This
+will suppress dequoting. Upon ".import", the data will be split
+into fields and records according to the delimiters so specified.
+
+<a name="csvout"></a>
+
+</p><h2 id="export_to_csv"><span>8.6. </span>Export to CSV</h2>
+
+<p>To export an SQLite table (or part of a table) as CSV, simply set
+the "mode" to "csv" and then run a query to extract the desired rows
+of the table. The output will formatted as CSV per RFC 4180.
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.headers on</b>
+sqlite&gt; <b>.mode csv</b>
+sqlite&gt; <b>.once c:/work/dataout.csv</b>
+sqlite&gt; <b>SELECT * FROM tab1;</b>
+sqlite&gt; <b>.system c:/work/dataout.csv</b>
+</pre></div>
+
+<p>In the example above, the ".headers on" line causes column labels to
+be printed as the first row of output. This means that the first row of
+the resulting CSV file will contain column labels. If column labels are
+not desired, set ".headers off" instead. (The ".headers off" setting is
+the default and can be omitted if the headers have not been previously
+turned on.)
+
+</p><p>The line ".once <i>FILENAME</i>" causes all query output to go into
+the named file instead of being printed on the console. In the example
+above, that line causes the CSV content to be written into a file named
+"C:/work/dataout.csv".
+
+</p><p>The final line of the example (the ".system c:/work/dataout.csv")
+has the same effect as double-clicking on the c:/work/dataout.csv file
+in windows. This will typically bring up a spreadsheet program to display
+the CSV file.
+
+</p><p>That command only works as written on Windows.
+The equivalent line on a Mac would be:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.system open dataout.csv</b>
+</pre></div>
+
+<p>On Linux and other unix systems you will need to enter something like:
+
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.system xdg-open dataout.csv</b>
+</pre></div>
+
+<a name="exexcel*"></a>
+
+<h3 id="_export_to_excel_"><span>8.6.1. </span> Export to Excel </h3>
+
+<p>To simplify export to a spreadsheet, the CLI provides the
+".excel" command which captures the output of a single query and sends
+that output to the default spreadsheet program on the host computer.
+Use it like this:
+
+</p><div class="codeblock"><pre>sqlite&gt; <b>.excel</b>
+sqlite&gt; <b>SELECT * FROM tab;</b>
+</pre></div>
+
+<p>
+The command above writes the output of the query as CSV into a temporary
+file, invokes the default handler for CSV files (usually the preferred
+spreadsheet program such as Excel or LibreOffice), then deletes the
+temporary file. This is essentially a short-hand method of doing
+the sequence of ".csv", ".once", and ".system" commands described above.
+
+</p><p>
+The ".excel" command is really an alias for ".once -x". The -x option
+to .once causes it to writes results as CSV into a temporary file that
+is named with a ".csv" suffix, then invoke the systems default handler
+for CSV files.
+
+</p><p>
+There is also a ".once -e" command which works similarly, except that
+it names the temporary file with a ".txt" suffix so that the default
+text editor for the system will be invoked, instead of the default
+spreadsheet.
+
+<a name="extsv*"></a>
+
+</p><h3 id="_export_to_tsv_tab_separated_values_"><span>8.6.2. </span> Export to TSV (tab separated values)</h3>
+
+<p>
+Exporting to pure TSV, without any field quoting, can be done by
+entering ".mode tabs" before running a query. However, the output
+will not be read correctly in tabs mode by the ".import" command
+if it contains doublequote characters. To get TSV quoted per
+RFC 4180 so that it can be input in tabs mode with ".import",
+first enter ".mode&nbsp;csv", then enter '.separator&nbsp;"\t"'
+before running a query.
+
+<a name="zipdb"></a>
+
+</p><h1 id="accessing_zip_archives_as_database_files"><span>9. </span>Accessing ZIP Archives As Database Files</h1>
+
+<p>In addition to reading and writing SQLite database files,
+the <b>sqlite3</b> program will also read and write ZIP archives.
+Simply specify a ZIP archive filename in place of an SQLite database
+filename on the initial command line, or in the ".open" command,
+and <b>sqlite3</b> will automatically detect that the file is a
+ZIP archive instead of an SQLite database and will open it as such.
+This works regardless of file suffix. So you can open JAR, DOCX,
+and ODP files and any other file format that is really a ZIP
+archive and SQLite will read it for you.
+
+</p><p>A ZIP archive appears to be a database containing a single table
+with the following schema:
+
+</p><div class="codeblock"><pre>CREATE TABLE zip(
+ name, // Name of the file
+ mode, // Unix-style file permissions
+ mtime, // Timestamp, seconds since 1970
+ sz, // File size after decompression
+ rawdata, // Raw compressed file data
+ data, // Uncompressed file content
+ method // ZIP compression method code
+);
+</pre></div>
+
+<p>So, for example, if you wanted to see the compression efficiency
+(expressed as the size of the compressed content relative to the
+original uncompressed file size) for all files in the ZIP archive,
+sorted from most compressed to least compressed, you could run a
+query like this:
+
+</p><div class="codeblock"><pre>sqlite&gt; SELECT name, (100.0*length(rawdata))/sz FROM zip ORDER BY 2;
+</pre></div>
+
+<p>Or using <a href="cli.html#fileio">file I/O functions</a>, you can extract elements of the
+ZIP archive:
+
+</p><div class="codeblock"><pre>sqlite&gt; SELECT writefile(name,content) FROM zip
+ ...&gt; WHERE name LIKE 'docProps/%';
+</pre></div>
+
+<h2 id="how_zip_archive_access_is_implemented"><span>9.1. </span>How ZIP archive access is implemented</h2>
+
+<p>The command-line shell uses the <a href="zipfile.html">Zipfile virtual table</a> to
+access ZIP archives. You can see this by running the ".schema"
+command when a ZIP archive is open:
+
+</p><div class="codeblock"><pre>sqlite&gt; .schema
+CREATE VIRTUAL TABLE zip USING zipfile('document.docx')
+/* zip(name,mode,mtime,sz,rawdata,data,method) */;
+</pre></div>
+
+<p>When opening a file, if the command-line client discovers that the
+file is ZIP archive instead of an SQLite database, it actually opens
+an <a href="inmemorydb.html">in-memory database</a> and then in that in-memory database it creates
+an instance of the <a href="zipfile.html">Zipfile virtual table</a> that is attached to the
+ZIP archive.
+
+</p><p>The special processing for opening ZIP archives is a trick of the
+command-line shell, not the core SQLite library. So if you want to
+open a ZIP archive as a database in your application, you will need to
+activate the <a href="zipfile.html">Zipfile virtual table</a> module then run an appropriate
+<a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement.
+
+
+<a name="dump"></a>
+
+</p><h1 id="converting_an_entire_database_to_a_text_file"><span>10. </span>Converting An Entire Database To A Text File</h1>
+
+<p>Use the ".dump" command to convert the entire contents of a
+database into a single UTF-8 text file. This file can be converted
+back into a database by piping it back into <b>sqlite3</b>.</p>
+
+<p>A good way to make an archival copy of a database is this:</p>
+
+
+<div class="codeblock"><pre>$ <b>sqlite3 ex1 .dump | gzip -c &gt;ex1.dump.gz</b>
+</pre></div>
+
+
+<p>This generates a file named <b>ex1.dump.gz</b> that contains everything
+you need to reconstruct the database at a later time, or on another
+machine. To reconstruct the database, just type:</p>
+
+
+<div class="codeblock"><pre>$ <b>zcat ex1.dump.gz | sqlite3 ex2</b>
+</pre></div>
+
+
+<p>The text format is pure SQL so you
+can also use the .dump command to export an SQLite database
+into other popular SQL database engines. Like this:</p>
+
+
+<div class="codeblock"><pre>$ <b>createdb ex2</b>
+$ <b>sqlite3 ex1 .dump | psql ex2</b>
+</pre></div>
+
+<a name="recover"></a>
+
+<h1 id="recover_data_from_a_corrupted_database"><span>11. </span>Recover Data From a Corrupted Database</h1>
+
+<p>Like the ".dump" command, ".recover" attempts to convert the entire
+contents of a database file to text. The difference is that instead of
+reading data using the normal SQL database interface, ".recover"
+attempts to reassemble the database based on data extracted directly from
+as many database pages as possible. If the database is corrupt, ".recover"
+is usually able to recover data from all uncorrupted parts of the database,
+whereas ".dump" stops when the first sign of corruption is encountered.
+
+</p><p>If the ".recover" command recovers one or more rows that it cannot
+attribute to any database table, the output script creates a "lost_and_found"
+table to store the orphaned rows. The schema of the lost_and_found
+table is as follows:
+
+</p><div class="codeblock"><pre>CREATE TABLE lost_and_found(
+ rootpgno INTEGER, -- root page of tree pgno is a part of
+ pgno INTEGER, -- page number row was found on
+ nfield INTEGER, -- number of fields in row
+ id INTEGER, -- value of rowid field, or NULL
+ c0, c1, c2, c3... -- columns for fields of row
+);
+</pre></div>
+
+<p>The "lost_and_found" table contains one row for each orphaned row recovered
+from the database. Additionally, there is one row for each recovered index
+entry that cannot be attributed to any SQL index. This is because, in an
+SQLite database, the same format is used to store SQL index entries and
+WITHOUT ROWID table entries.
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th style="width:15ex">Column</th><th>Contents
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>rootpgno</td><td> Even though it may not be possible to attribute the
+ row to a specific database table, it may be part of a tree structure
+ within the database file. In this case, the root page number of that
+ tree structure is stored in this column. Or, if the page the row was
+ found on is not part of a tree structure, this column stores a copy of
+ the value in column "pgno" - the page number of the page the row was
+ found on. In many, although not all, cases, all rows in the
+ lost_and_found table with the same value in this column belong to the
+ same table.
+
+ </td></tr><tr style="text-align:left"><td>pgno</td><td> The page number of the page on which this row was found.
+
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>nfield</td><td> The number of fields in this row.
+
+ </td></tr><tr style="text-align:left"><td>id</td><td> If the row comes from a WITHOUT ROWID table, this column
+ contains NULL. Otherwise, it contains the 64-bit integer rowid value for
+ the row.
+
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>c0,&nbsp;c1,&nbsp;c2...</td><td> The values for each column of the row
+ are stored in these columns. The ".recover" command creates the
+ lost_and_found table with as many columns as required by the longest
+ orphaned row.
+</td></tr></table>
+
+<p>If the recovered database schema already contains a table named
+"lost_and_found", the ".recover" command uses the name "lost_and_found0". If
+the name "lost_and_found0" is also already taken, "lost_and_found1", and so
+on. The default name "lost_and_found" may be overridden by invoking ".recover"
+with the --lost-and-found switch. For example, to have the output script call
+the table "orphaned_rows":
+
+</p><div class="codeblock"><pre>sqlite&gt; .recover --lost-and-found orphaned_rows
+</pre></div>
+
+<a name="dotload"></a>
+
+<h1 id="loading_extensions"><span>12. </span>Loading Extensions</h1>
+
+<p>You can add new custom <a href="appfunc.html">application-defined SQL functions</a>,
+<a href="datatype3.html#collation">collating sequences</a>, <a href="vtab.html">virtual tables</a>, and <a href="vfs.html">VFSes</a> to the command-line
+shell at run-time using the ".load" command. First, build the
+extension as a DLL or shared library (as described in the
+<a href="loadext.html">Run-Time Loadable Extensions</a> document) then type:
+
+</p><div class="codeblock"><pre>sqlite&gt; .load /path/to/my_extension
+</pre></div>
+
+<p>Note that SQLite automatically adds the appropriate extension suffix
+(".dll" on windows, ".dylib" on Mac, ".so" on most other unixes) to the
+extension filename. It is generally a good idea to specify the full
+pathname of the extension.
+
+</p><p>SQLite computes the entry point for the extension based on the extension
+filename. To override this choice, simply add the name of the extension
+as a second argument to the ".load" command.
+
+</p><p>Source code for several useful extensions can be found in the
+<a href="http://www.sqlite.org/src/tree?name=ext/misc&ci=trunk">ext/misc</a>
+subdirectory of the SQLite source tree. You can use these extensions
+as-is, or as a basis for creating your own custom extensions to address
+your own particular needs.
+
+
+<a name="sha3sum"></a>
+
+</p><h1 id="cryptographic_hashes_of_database_content"><span>13. </span>Cryptographic Hashes Of Database Content</h1>
+
+<p>The ".sha3sum" dot-command computes a
+<a href="https://en.wikipedia.org/wiki/SHA-3">SHA3</a> hash of the <em>content</em>
+of the database. To be clear, the hash is computed over the database content,
+not its representation on disk. This means, for example, that a <a href="lang_vacuum.html">VACUUM</a>
+or similar data-preserving transformation does not change the hash.
+
+</p><p>The ".sha3sum" command supports options "--sha3-224", "--sha3-256",
+"--sha3-384", and "--sha3-512" to define which variety of SHA3 to use
+for the hash. The default is SHA3-256.
+
+</p><p>The database schema (in the <a href="schematab.html">sqlite_schema</a> table) is not normally
+included in the hash, but can be added by the "--schema" option.
+
+</p><p>The ".sha3sum" command takes a single optional argument which is a
+<a href="lang_expr.html#like">LIKE</a> pattern. If this option is present, only tables whose names match
+the <a href="lang_expr.html#like">LIKE</a> pattern will be hashed.
+
+</p><p>The ".sha3sum" command is implemented with the help of the
+<a href="https://www.sqlite.org/src/file/ext/misc/shathree.c">extension function "sha3_query()"</a>
+that is included with the command-line shell.
+
+<a name="selftest"></a>
+
+</p><h1 id="database_content_self_tests"><span>14. </span>Database Content Self-Tests</h1>
+
+<p>The ".selftest" command attempts to verify that a database is
+intact and is not corrupt.
+The .selftest command looks for a table in schema named "selftest"
+and defined as follows:
+
+</p><div class="codeblock"><pre>CREATE TABLE selftest(
+ tno INTEGER PRIMARY KEY, -- Test number
+ op TEXT, -- 'run' or 'memo'
+ cmd TEXT, -- SQL command to run, or text of "memo"
+ ans TEXT -- Expected result of the SQL command
+);
+</pre></div>
+
+<p>The .selftest command reads the rows of the selftest table in
+selftest.tno order.
+For each 'memo' row, it writes the text in 'cmd' to the output. For
+each 'run' row, it runs the 'cmd' text as SQL and compares the result
+to the value in 'ans', and shows an error message if the results differ.
+
+</p><p>If there is no selftest table, the ".selftest" command runs
+<a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>.
+
+</p><p>The ".selftest --init" command creates the selftest table if it
+does not already exists, then appends entries that check the SHA3
+hash of the content of all tables. Subsequent runs of ".selftest"
+will verify that the database has not been changed in any way. To
+generate tests to verify that a subset of the tables is unchanged,
+simply run ".selftest --init" then <a href="lang_delete.html">DELETE</a> the selftest rows that
+refer to tables that are not constant.
+
+<a name="sqlar"></a>
+
+</p><h1 id="sqlite_archive_support"><span>15. </span>SQLite Archive Support</h1>
+
+<p>The ".archive" dot-command and the "-A" command-line option
+provide built-in support for the
+<a href="sqlar.html">SQLite Archive format</a>. The interface is similar to
+that of the "tar" command on unix systems. Each invocation of the ".ar"
+command must specify a single command option. The following commands
+are available for ".archive":
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th style="width:15ex">Option</th><th style="width:17ex">Long&nbsp;Option</th><th>Purpose
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>-c</td><td>--create</td><td>Create a new archive containing specified files.
+ </td></tr><tr style="text-align:left"><td>-x</td><td>--extract</td><td>Extract specified files from archive.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>-i</td><td>--insert</td><td>Add files to existing archive.
+ </td></tr><tr style="text-align:left"><td>-r</td><td>--remove</td><td>Remove files from the archive.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>-t</td><td>--list</td><td>List the files in the archive.
+ </td></tr><tr style="text-align:left"><td>-u</td><td>--update</td><td>Add files to existing archive <em>if</em> they have changed.
+</td></tr></table>
+
+<p>As well as the command option, each invocation of ".ar" may specify
+one or more modifier options. Some modifier options require an argument,
+some do not. The following modifier options are available:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th style="width:15ex">Option</th><th style="width:17ex">Long&nbsp;Option</th><th>Purpose
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>-v</td><td>--verbose</td><td>List each file as it is processed.
+ </td></tr><tr style="text-align:left"><td>-f FILE</td><td>--file FILE</td><td>If specified, use file FILE as the
+ archive. Otherwise, assume that the current "main" database is the
+ archive to be operated on.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>-a FILE</td><td>--append FILE</td><td>Like --file, use file FILE as the
+ archive, but open the file using the
+ <a href="https://sqlite.org/src/file/ext/misc/appendvfs.c">apndvfs VFS</a> so that
+ the archive will be appended to the end of FILE if FILE already exists.
+ </td></tr><tr style="text-align:left"><td>-C DIR</td><td>--directory DIR</td><td>If specified, interpret all relative
+ paths as relative to DIR, instead of the current working directory.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>-g</td><td>--glob</td><td>Use <a href="lang_corefunc.html#glob">glob(<i>Y</i>,<i>X</i>)</a> to match arguments
+ against names in the archive.
+ </td></tr><tr style="text-align:left"><td>-n</td><td>--dryrun</td><td>Show the SQL that would be run to carry out the
+ archive operation, but do not actually change anything.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>--</td><td>--</td><td>All subsequent command line words are command arguments,
+ not options.
+</td></tr></table>
+
+<p>
+For command-line usage, add the short style command-line options immediately
+following the "-A", without an intervening space. All subsequent arguments
+are considered to be part of the .archive command. For example, the following
+commands are equivalent:
+
+</p><div class="codeblock"><pre>sqlite3 new_archive.db -Acv file1 file2 file3
+sqlite3 new_archive.db ".ar -cv file1 file2 file3"
+</pre></div>
+
+<p>
+Long and short style options may be mixed. For example, the following are
+equivalent:
+
+</p><div class="codeblock"><pre><i>-- Two ways to create a new archive named "new_archive.db" containing</i>
+<i>-- files "file1", "file2" and "file3".</i>
+.ar -c --file new_archive.db file1 file2 file3
+.ar -f new_archive.db --create file1 file2 file3
+</pre></div>
+
+<p>Alternatively, the first argument following to ".ar" may be the concatenation
+of the short form of all required options (without the "-" characters). In
+this case arguments for options requiring them are read from the command line
+next, and any remaining words are considered command arguments. For example:
+
+</p><div class="codeblock"><pre><i>-- Create a new archive "new_archive.db" containing files "file1" and</i>
+<i>-- "file2" from directory "dir1".</i>
+.ar cCf dir1 new_archive.db file1 file2 file3
+</pre></div>
+
+<h2 id="_sqlite_archive_create_command_"><span>15.1. </span> SQLite Archive Create Command </h2>
+
+<p>Create a new archive, overwriting any existing archive (either in the current
+"main" db or in the file specified by a --file option). Each argument following
+the options is a file to add to the archive. Directories are imported
+recursively. See above for examples.
+
+</p><h2 id="_sqlite_archive_extract_command_"><span>15.2. </span> SQLite Archive Extract Command </h2>
+
+<p>Extract files from the archive (either to the current working directory or
+to the directory specified by a --directory option).
+Files or directories whose names match the arguments,
+as affected by the --glob option, are extracted.
+Or, if no arguments follow the options, all files and directories are extracted.
+Any specified directories are extracted recursively. It is an error if any
+specified names or match patterns cannot be found in the archive.
+
+</p><div class="codeblock"><pre><i>-- Extract all files from the archive in the current "main" db to the</i>
+<i>-- current working directory. List files as they are extracted. </i>
+.ar --extract --verbose
+
+<i>-- Extract file "file1" from archive "ar.db" to directory "dir1".</i>
+.ar fCx ar.db dir1 file1
+
+<i>-- Extract files with ".h" extension to directory "headers".</i>
+.ar -gCx headers *.h
+</pre></div>
+
+<h2 id="_sqlite_archive_list_command_"><span>15.3. </span> SQLite Archive List Command </h2>
+
+<p>List the contents of the archive. If no arguments are specified, then all
+files are listed. Otherwise, only those which match the arguments,
+as affected by the --glob option, are listed. Currently,
+the --verbose option does not change the behaviour of this command. That may
+change in the future.
+
+</p><div class="codeblock"><pre><i>-- List contents of archive in current "main" db.</i>.
+.ar --list
+</pre></div>
+
+<a name="arinsup"></a>
+
+<h2 id="_sqlite_archive_insert_and_update_commands_"><span>15.4. </span> SQLite Archive Insert And Update Commands </h2>
+
+<p> The --update and --insert commands work like --create command, except that
+they do not delete the current archive before commencing. New versions of
+files silently replace existing files with the same names, but otherwise
+the initial contents of the archive (if any) remain intact.
+
+</p><p> For the --insert command, all files listed are inserted into the archive.
+For the --update command, files are only inserted if they do not previously
+exist in the archive, or if their "mtime" or "mode" is different from what
+is currently in the archive.
+
+</p><p> Compatibility node: Prior to SQLite version 3.28.0 (2019-04-16) only
+the --update option was supported but that option worked like --insert in that
+it always reinserted every file regardless of whether or not it had changed.
+
+</p><h2 id="_sqlite_archive_remove_command_"><span>15.5. </span> SQLite Archive Remove Command </h2>
+
+<p> The --remove command deletes files and directories which match the
+provided arguments (if any) as affected by the --glob option.
+It is an error to provide arguments which match nothing in the archive.
+
+</p><h2 id="_operations_on_zip_archives_"><span>15.6. </span> Operations On ZIP Archives </h2>
+
+<p>If FILE is a ZIP archive rather than an SQLite Archive, the ".archive"
+command and the "-A" command-line option still work. This is accomplished
+using of the <a href="zipfile.html">zipfile</a> extension.
+Hence, the following commands are roughly equivalent,
+differing only in output formatting:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Traditional Command</th><th>Equivalent sqlite3.exe Command
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>unzip archive.zip</td><td>sqlite3 -Axf archive.zip
+ </td></tr><tr style="text-align:left"><td>unzip -l archive.zip</td><td>sqlite3 -Atvf archive.zip
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>zip -r archive2.zip dir</td><td>sqlite3 -Acf archive2.zip dir
+</td></tr></table>
+
+<h2 id="_sql_used_to_implement_sqlite_archive_operations_"><span>15.7. </span> SQL Used To Implement SQLite Archive Operations </h2>
+
+<p>The various SQLite Archive Archive commands are implemented using SQL statements.
+Application developers can easily add SQLite Archive Archive reading and writing
+support to their own projects by running the appropriate SQL.
+
+</p><p>To see what SQL statements are used to implement an SQLite Archive
+operation, add the --dryrun or -n option. This causes the SQL to be
+displayed but inhibits the execution of the SQL.
+
+</p><p>The SQL statements used to implement SQLite Archive operations make use of
+various <a href="loadext.html">loadable extensions</a>. These extensions are all available in
+the <a href="https://sqlite.org/src">SQLite source tree</a> in the
+<a href="https://sqlite.org/src/file/ext/misc">ext/misc/ subfolder</a>.
+The extensions needed for full SQLite Archive support include:
+
+</p><ol>
+<li><p>
+<a href="https://sqlite.org/src/file/ext/misc/fileio.c">fileio.c</a> &mdash;
+This extension adds SQL functions readfile() and writefile() for
+reading and writing content from files on disk. The fileio.c
+extension also includes fsdir() table-valued function for listing
+the contents of a directory and the lsmode() function for converting
+numeric st_mode integers from the stat() system call into human-readable
+strings after the fashion of the "ls -l" command.
+
+</p></li><li><p>
+<a href="https://sqlite.org/src/file/ext/misc/sqlar.c">sqlar.c</a> &mdash;
+This extension adds the sqlar_compress() and sqlar_uncompress()
+functions that are needed to compress and uncompress file content
+as it is inserted and extracted from an SQLite Archive.
+
+</p></li><li><p>
+<a href="zipfile.html">zipfile.c</a> &mdash;
+This extension implements the "zipfile(FILE)" table-valued function
+which is used to read ZIP archives. This extension is only needed
+when reading ZIP archives instead of SQLite archives.
+
+</p></li><li><p>
+<a href="https://sqlite.org/src/file/ext/misc/appendvfs.c">appendvfs.c</a> &mdash;
+This extension implements a new <a href="vfs.html">VFS</a> that allows an SQLite database
+to be appended to some other file, such as an executable. This
+extension is only needed if the --append option to the .archive
+command is used.
+</p></li></ol>
+
+<a name="param"></a>
+
+<h1 id="sql_parameters"><span>16. </span>SQL Parameters</h1>
+
+<p>SQLite allows <a href="lang_expr.html#varparam">bound parameters</a> to appear in an SQL statement anywhere
+that a literal value is allowed. The values for these parameters are set
+using the <a href="c3ref/bind_blob.html">sqlite3_bind_...()</a> family of APIs.
+
+</p><p>Parameters can be either named or unnamed. An unnamed parameter is a single
+question mark ("?"). Named parameters are a "?" followed immediately by a number
+(ex: "?15" or "?123") or one of the characters "$", ":", or "@" followed by an
+alphanumeric name (ex: "$var1", ":xyz", "@bingo").
+
+</p><p>This command-line shell leaves unnamed parameters unbound, meaning that they
+will have a value of an SQL NULL, but named parameters might be assigned values.
+If there exists a TEMP table named "sqlite_parameters" with a schema like this:
+
+</p><div class="codeblock"><pre>CREATE TEMP TABLE sqlite_parameters(
+ key TEXT PRIMARY KEY,
+ value
+) WITHOUT ROWID;
+</pre></div>
+
+<p>And if there is an entry in that table where the key column exactly matches
+the name of parameter (including the initial "?", "$", ":", or "@" character)
+then the parameter is assigned the value of the value column. If no entry exists,
+the parameter defaults to NULL.
+
+</p><p>The ".parameter" command exists to simplify managing this table. The
+".parameter init" command (often abbreviated as just ".param init") creates
+the temp.sqlite_parameters table if it does not already exist. The ".param list"
+command shows all entries in the temp.sqlite_parameters table. The ".param clear"
+command drops the temp.sqlite_parameters table. The ".param set KEY VALUE" and
+".param unset KEY" commands create or delete entries from the
+temp.sqlite_parameters table.
+
+</p><p>The VALUE passed to ".param set KEY VALUE" can be either a SQL literal
+or any other SQL expression or query which can be evaluated to yield a value.
+This allows values of differing types to be set.
+If such evaluation fails, the provided VALUE is instead quoted and inserted
+as text.
+Because such initial evaluation may or may not fail depending upon
+the VALUE content, the reliable way to get a text value is to enclose it
+with single-quotes protected from the above-described command-tail parsing.
+For example, (unless one intends a value of -1365):<br>
+</p><div class="codeblock"><pre>.parameter init
+.parameter set @phoneNumber "'202-456-1111'"
+</pre></div>
+<p>Note that the double-quotes serve to protect the single-quotes
+and ensure that the quoted text is parsed as one argument.
+
+</p><p>The temp.sqlite_parameters table only provides values for parameters in the
+command-line shell. The temp.sqlite_parameter table has no effect on queries
+that are run directly using the SQLite C-language API. Individual applications
+are expected to implement their own parameter binding. You can search for
+"sqlite_parameters" in the
+<a href="https://sqlite.org/src/file/src/shell.c.in">command-line shell source code</a>
+to see how the command-line shell does parameter binding, and use that as
+a hint for how to implement it yourself.
+
+<a name="expert"></a>
+
+</p><h1 id="index_recommendations_sqlite_expert_"><span>17. </span>Index Recommendations (SQLite Expert)</h1>
+
+<p><b>Note: This command is experimental. It may be removed or the
+interface modified in incompatible ways at some point in the future.
+
+</b></p><p>For most non-trivial SQL databases, the key to performance is creating
+the right SQL indexes. In this context "the right SQL indexes" means those
+that cause the queries that an application needs to optimize run fast. The
+".expert" command can assist with this by proposing indexes that might
+assist with specific queries, were they present in the database.
+
+</p><p>The ".expert" command is issued first, followed by the SQL query
+on a separate line. For example, consider the following session:
+
+</p><div class="codeblock"><pre>sqlite&gt; CREATE TABLE x1(a, b, c); <i>-- Create table in database </i>
+sqlite&gt; .expert
+sqlite&gt; SELECT * FROM x1 WHERE a=? AND b&gt;?; <i>-- Analyze this SELECT </i>
+CREATE INDEX x1_idx_000123a7 ON x1(a, b);
+
+0|0|0|SEARCH TABLE x1 USING INDEX x1_idx_000123a7 (a=? AND b&gt;?)
+
+sqlite&gt; CREATE INDEX x1ab ON x1(a, b); <i>-- Create the recommended index </i>
+sqlite&gt; .expert
+sqlite&gt; SELECT * FROM x1 WHERE a=? AND b&gt;?; <i>-- Re-analyze the same SELECT </i>
+(no new indexes)
+
+0|0|0|SEARCH TABLE x1 USING INDEX x1ab (a=? AND b&gt;?)
+</pre></div>
+
+<p>In the above, the user creates the database schema (a single table - "x1"),
+and then uses the ".expert" command to analyze a query, in this case
+"SELECT * FROM x1 WHERE a=? AND b&gt;?". The shell tool recommends that the
+user create a new index (index "x1_idx_000123a7") and outputs the plan
+that the query would use in <a href="eqp.html">EXPLAIN QUERY PLAN</a> format. The user then creates
+an index with an equivalent schema and runs the analysis on the same query
+again. This time the shell tool does not recommend any new indexes, and
+outputs the plan that SQLite will use for the query given the existing
+indexes.
+
+</p><p>The ".expert" command accepts the following options:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+<tr style="text-align:left"><th> Option </th><th> Purpose
+</th></tr><tr style="text-align:left;background-color:#DDDDDD"><td> &#8209;&#8209;verbose
+ </td><td> If present, output a more verbose report for each query analyzed.
+</td></tr><tr style="text-align:left"><td> &#8209;&#8209;sample&nbsp;PERCENT
+ </td><td> This parameter defaults to 0, causing the ".expert" command to
+ recommend indexes based on the query and database schema alone.
+ This is similar to the way the <a href="optoverview.html">SQLite query planner</a> selects
+ indexes for queries if the user has not run the <a href="lang_analyze.html">ANALYZE</a> command
+ on the database to generate data distribution statistics.
+ <div style="margin-top:1ex">
+ If this option is passed a non-zero argument, the ".expert" command
+ generates similar data distribution statistics for all indexes
+ considered based on PERCENT percent of the rows currently stored in
+ each database table. For databases with unusual data distributions,
+ this may lead to better index recommendations, particularly if the
+ application intends to run ANALYZE.
+ <div style="margin-top:1ex">
+ For small databases and modern CPUs, there is usually no reason not
+ to pass "--sample 100". However, gathering data distribution
+ statistics can be expensive for large database tables. If the
+ operation is too slow, try passing a smaller value for the --sample
+ option.
+</div></div></td></tr></table>
+
+<p>The functionality described in this section may be integrated into other
+applications or tools using the
+<a href="http://www.sqlite.org/src/dir?ci=trunk&name=ext/expert">
+SQLite expert extension</a> code.
+
+</p><p>A database schema which incorporate SQL custom functions made available
+via the extension load mechanism may need special provision to work with
+the .expert feature. Because the feature uses additional connections to
+implement its functionality, those custom functions must be made available
+to those additional connections. This can be done by means of the extension
+load/usage options described at
+<a href="c3ref/auto_extension.html">
+Automatically Load Statically Linked Extensions</a>
+and <a href="loadext.html#persist">
+Persistent Loadable Extensions</a>.
+
+<a name="dotconn"></a>
+
+</p><h1 id="working_with_multiple_database_connections"><span>18. </span>Working With Multiple Database Connections</h1>
+
+<p>
+Beginning with version 3.37.0 (2021-11-27), the CLI has the ability to
+hold multiple <a href="c3ref/sqlite3.html">database connections</a> open at once. Only one database connection
+is active at a time. The inactive connections are still open but are idle.
+
+</p><p>
+Use the ".connection" dot-command (often abbreviated as just ".conn") to see a
+list of database connections and an indication of which one is currently active.
+Each database connection is identified by an integer between 0 and 9. (There
+can be at most 10 simultaneously open connections.) Change to another database
+connection, creating it if it does not already exist, by typing the ".conn"
+command followed by its number. Close a database connection by typing
+".conn close N" where N is the connection number.
+
+</p><p>
+Though the underlying SQLite database connections are completely independent
+of one another, many of the CLI settings, such as the output format, are
+shared across all database connections. Thus, changing the <a href="cli.html#dotmode">output mode</a> in
+one connection will change it in them all. On the other hand, some
+<a href="cli.html#dotcmd">dot-commands</a> such as <a href="cli.html#dotopen">.open</a> only affect the current connection.
+
+<a name="miscfeatures"></a>
+
+</p><h1 id="miscellaneous_extension_features"><span>19. </span>Miscellaneous Extension Features</h1>
+
+<p>
+The CLI is built with several SQLite extensions that are not
+included with the SQLite library. A few add features
+not described in the preceding sections, namely:
+</p><ul>
+<li>the UINT collating sequence which treats
+unsigned integers embedded in text according to
+their value, along with other text, for ordering;
+</li><li>decimal arithmetic as provided by the <a href="floatingpoint.html#decext">decimal extension</a>;
+</li><li>the <a href="series.html">generate_series</a>() table-valued function; and
+</li><li>support for POSIX extended regular expressions
+bound to the <a href="lang_expr.html#regexp">REGEXP</a> operator.
+</li></ul>
+
+<a name="dotother"></a>
+
+<h1 id="other_dot_commands"><span>20. </span>Other Dot Commands</h1>
+
+<p>There are many other dot-commands available in the command-line
+shell. See the ".help" command for a complete list for any particular
+version and build of SQLite.
+
+<a name="insh"></a>
+
+</p><h1 id="using_sqlite3_in_a_shell_script"><span>21. </span>Using sqlite3 in a shell script</h1>
+
+<p>
+One way to use sqlite3 in a shell script is to use "echo" or
+"cat" to generate a sequence of commands in a file, then invoke sqlite3
+while redirecting input from the generated command file. This
+works fine and is appropriate in many circumstances. But as
+an added convenience, sqlite3 allows a single SQL command to be
+entered on the command line as a second argument after the
+database name. When the sqlite3 program is launched with two
+arguments, the second argument is passed to the SQLite library
+for processing, the query results are printed on standard output
+in list mode, and the program exits. This mechanism is designed
+to make sqlite3 easy to use in conjunction with programs like
+"awk". For example:</p>
+
+<div class="codeblock"><pre>$ <b>sqlite3 ex1 'select * from tbl1' \</b>
+&gt; <b> | awk '{printf "&lt;tr&gt;&lt;td&gt;%s&lt;td&gt;%s\n",$1,$2 }'</b>
+&lt;tr&gt;&lt;td&gt;hello&lt;td&gt;10
+&lt;tr&gt;&lt;td&gt;goodbye&lt;td&gt;20
+$
+</pre></div>
+
+<a name="endsh"></a>
+
+<h1 id="marking_the_end_of_an_sql_statement"><span>22. </span>Marking The End Of An SQL Statement</h1>
+
+<p>
+SQLite commands are normally terminated by a semicolon. In the CLI
+you can also use the word "GO" (case-insensitive) or a slash character
+"/" on a line by itself to end a command. These are used by SQL Server
+and Oracle, respectively, and are supported by the SQLite CLI for
+compatibility. These won't work in <b>sqlite3_exec()</b>,
+because the CLI translates these inputs into a semicolon before passing
+them down into the SQLite core.</p>
+
+<a name="clopts"></a>
+
+<h1 id="command_line_options"><span>23. </span>Command-line Options</h1>
+
+<p>
+There are many command-line options available to the CLI. Use the --help
+command-line option to see a list:
+
+</p><div class="codeblock"><pre>$ <b>sqlite3 --help</b>
+Usage: ./sqlite3 &#91;OPTIONS&#93; FILENAME &#91;SQL&#93;
+FILENAME is the name of an SQLite database. A new database is created
+if the file does not previously exist.
+OPTIONS include:
+ -A ARGS... run ".archive ARGS" and exit
+ -append append the database to the end of the file
+ -ascii set output mode to 'ascii'
+ -bail stop after hitting an error
+ -batch force batch I/O
+ -box set output mode to 'box'
+ -column set output mode to 'column'
+ -cmd COMMAND run "COMMAND" before reading stdin
+ -csv set output mode to 'csv'
+ -deserialize open the database using sqlite3_deserialize()
+ -echo print commands before execution
+ -init FILENAME read/process named file
+ -&#91;no&#93;header turn headers on or off
+ -help show this message
+ -html set output mode to HTML
+ -interactive force interactive I/O
+ -json set output mode to 'json'
+ -line set output mode to 'line'
+ -list set output mode to 'list'
+ -lookaside SIZE N use N entries of SZ bytes for lookaside memory
+ -markdown set output mode to 'markdown'
+ -maxsize N maximum size for a --deserialize database
+ -memtrace trace all memory allocations and deallocations
+ -mmap N default mmap size set to N
+ -newline SEP set output row separator. Default: '\n'
+ -nofollow refuse to open symbolic links to database files
+ -nonce STRING set the safe-mode escape nonce
+ -nullvalue TEXT set text string for NULL values. Default ''
+ -pagecache SIZE N use N slots of SZ bytes each for page cache memory
+ -quote set output mode to 'quote'
+ -readonly open the database read-only
+ -safe enable safe-mode
+ -separator SEP set output column separator. Default: '|'
+ -stats print memory stats before each finalize
+ -table set output mode to 'table'
+ -tabs set output mode to 'tabs'
+ -version show SQLite version
+ -vfs NAME use NAME as the default VFS
+ -zip open the file as a ZIP Archive
+</pre></div>
+
+<p>The CLI is flexible regarding command-line option formatting.
+Either one or two leading "-" characters are permitted.
+Thus "-box" and "--box" mean the same thing.
+Command-line options are processed from left to right.
+Hence a "--box" option will override a prior "--quote" option.
+
+</p><p>
+Most of the command-line options are self-explanatory, but a few merit additional
+discussion below.
+
+<a name="safemode"></a>
+
+</p><h2 id="the_safe_command_line_option"><span>23.1. </span>The --safe command-line option</h2>
+
+<p>The --safe command-line option attempts to disable all features of the CLI that
+might cause any changes to the host computer other than changes to the specific database
+file named on the command-line. The idea is that if you receive a large SQL script
+from an unknown or untrusted source, you can run that script to see what it does without
+risking an exploit by using the --safe option. The --safe option disables (among other
+things):
+
+</p><ul>
+<li> The <a href="cli.html#dotopen">.open command</a>, unless the --hexdb option is used or the filename is ":memory:".
+ This prevents the script from reading or writing any database files not named on
+ the original command-line.
+</li><li> The <a href="lang_attach.html">ATTACH</a> SQL command.
+</li><li> SQL functions that have potentially harmful side-effects, such as
+ edit(), fts3_tokenizer(), load_extension(), readfile() and writefile().
+</li><li> The <a href="cli.html#sqlar">.archive command</a>.
+</li><li> The .backup and .save commands.
+</li><li> The <a href="cli.html#csv">.import command</a>.
+</li><li> The <a href="cli.html#dotload">.load command</a>.
+</li><li> The .log command.
+</li><li> The .shell and .system commands.
+</li><li> The .excel, .once and .output commands.
+</li><li> Other commands that can have deleterious side effects.
+
+</li></ul>
+
+<p>Basically, any feature of the CLI that reads or writes from a file on disk other
+than the main database file is disabled.
+
+</p><h3 id="bypassing_safe_restrictions_for_specific_commands"><span>23.1.1. </span>Bypassing --safe restrictions for specific commands</h3>
+
+<p>If the "--nonce NONCE" option is also included on the command-line, for some
+large and arbitrary NONCE string, then the ".nonce NONCE" command (with the
+same large nonce string) will permit the next SQL statement or dot-command
+to bypass the --safe restrictions.
+
+</p><p>Suppose you want to run a suspicious script and the script requires one or
+two of the features that --safe normally disables. For example, suppose it
+needs to ATTACH one additional database. Or suppose the script needs to load
+a specific extension. This can be accomplished by preceding the (carefully
+audited) ATTACH statement or the ".load" command with an appropriate ".nonce"
+command and supplying the same nonce value using the "--nonce" command-line
+option. Those specific commands will then be allowed to execute normally,
+but all other unsafe commands will still be restricted.
+
+</p><p>The use of ".nonce" is dangerous in the sense that a mistake can allow a
+hostile script to damage your system. Therefore, use ".nonce" carefully,
+sparingly, and as a last resort when there are no other ways to get a
+script to run under --safe mode.
+
+<a name="compiling"></a>
+
+</p><h1 id="compiling_the_sqlite3_program_from_sources"><span>24. </span>Compiling the sqlite3 program from sources</h1>
+
+<p>
+To compile the command-line shell on unix systems and on Windows with MinGW,
+the usual configure-make command works:
+
+</p><div class="codeblock"><pre>sh configure; make
+</pre></div>
+
+<p>
+The configure-make works whether you are building from the canonical sources
+from the source tree, or from an amalgamated bundle. There are few
+dependencies. When building from canonical sources, a working
+<a href="https://www.tcl.tk/man/tcl8.3/UserCmd/tclsh.htm">tclsh</a> is required.
+If using an amalgamation bundle, all the preprocessing work normally
+done by tclsh will have already been carried out and only normal build
+tools are required.
+
+</p><p>
+A working <a href="https://zlib.net">zlib compression library</a> is
+needed in order for the <a href="cli.html#sqlar">.archive command</a> to operate.
+
+</p><p>
+On Windows with MSVC, use nmake with the Makefile.msc:
+
+</p><div class="codeblock"><pre>nmake /f Makefile.msc
+</pre></div>
+
+<p>
+For correct operation of the <a href="cli.html#sqlar">.archive command</a>, make a copy of the
+<a href="https://zlib.net">zlib source code</a> into the compat/zlib subdirectory
+of the source tree and compile this way:
+
+</p><div class="codeblock"><pre>nmake /f Makefile.msc USE_ZLIB=1
+</pre></div>
+
+<h2 id="_do_it_yourself_builds_"><span>24.1. </span> Do-It-Yourself Builds </h2>
+
+<p>
+The source code to the sqlite3 command line interface is in a single
+file named "shell.c". The shell.c source file is generated from other
+sources, but most of the code for shell.c can be found in
+<a href="https://sqlite.org/src/file/src/shell.c.in">src/shell.c.in</a>.
+(Regenerate shell.c by typing "make shell.c" from the canonical source tree.)
+<a href="howtocompile.html">Compile</a> the shell.c file (together
+with the <a href="amalgamation.html">sqlite3 library source code</a>) to generate
+the executable. For example:</p>
+
+<div class="codeblock"><pre>gcc -o sqlite3 shell.c sqlite3.c -ldl -lpthread -lz -lm
+</pre></div>
+
+<p>
+The following additional compile-time options are recommended in order to
+provide a full-featured command-line shell:
+
+</p><ul>
+<li> <a href="compile.html#threadsafe">-DSQLITE_THREADSAFE=0</a>
+</li><li> <a href="compile.html#enable_explain_comments">-DSQLITE_ENABLE_EXPLAIN_COMMENTS</a>
+</li><li> <a href="compile.html#have_zlib">-DSQLITE_HAVE_ZLIB</a>
+</li><li> <a href="compile.html#introspection_pragmas">-DSQLITE_INTROSPECTION_PRAGMAS</a>
+</li><li> <a href="compile.html#enable_unknown_sql_function">-DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</a>
+</li><li> <a href="compile.html#enable_stmtvtab">-DSQLITE_ENABLE_STMTVTAB</a>
+</li><li> <a href="compile.html#enable_dbpage_vtab">-DSQLITE_ENABLE_DBPAGE_VTAB</a>
+</li><li> <a href="compile.html#enable_dbstat_vtab">-DSQLITE_ENABLE_DBSTAT_VTAB</a>
+</li><li> <a href="compile.html#enable_offset_sql_func">-DSQLITE_ENABLE_OFFSET_SQL_FUNC</a>
+</li><li> <a href="compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a>
+</li><li> <a href="compile.html#enable_rtree">-DSQLITE_ENABLE_RTREE</a>
+</li><li> <a href="compile.html#enable_fts4">-DSQLITE_ENABLE_FTS4</a>
+</li><li> <a href="compile.html#enable_fts5">-DSQLITE_ENABLE_FTS5</a>
+</li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/cli.in?m=c517a02dadecc02f8">2022-12-27 16:51:24</a> UTC </small></i></p>
+
diff --git a/www/codeofconduct.html b/www/codeofconduct.html
new file mode 100644
index 0000000..a244314
--- /dev/null
+++ b/www/codeofconduct.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Code Of Conduct</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1>Code of Conduct</h1>
+
+<p>
+Due to concerns raised by readers, this document has been removed.
+The separate <a href="codeofethics.html">Code of Ethics</a> document is similar to what this
+document used to be, but with a different name. The new name is an
+effort to more clearly communicate the purpose and scope of the document.
+
+<p>
+To be clear:
+The removal of this document does not represent a policy shift. Rather
+the change is merely an improvement in how the policy is communicated.
+
+<p>
+For historical reference, the complete history for the source code to
+this document is available in the SQLite Documentation source repository:
+<a href="https://www.sqlite.org/docsrc/finfo/pages/codeofconduct.in">
+https://www.sqlite.org/docsrc/finfo/pages/codeofconduct.in</a>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/codeofconduct.in?m=fa6662a963732a3c5">2020-12-07 14:28:45</a> UTC </small></i></p>
+
diff --git a/www/codeofethics.html b/www/codeofethics.html
new file mode 100644
index 0000000..7ab4b9e
--- /dev/null
+++ b/www/codeofethics.html
@@ -0,0 +1,336 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Code Of Ethics</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Code Of Ethics
+</div>
+</div>
+
+
+
+
+
+<h1 id="history"><span>1. </span>History</h1>
+
+<p>This document was originally called a "Code of Conduct" and
+was created for the purpose of filling in a box on "supplier registration"
+forms submitted to the SQLite developers by some clients. However,
+we subsequently learned that "Code of Conduct" has a very specific and
+almost sacred meaning to some readers, a meaning to which this
+document does not conform
+<a href="https://www.theregister.co.uk/2018/10/22/sqlite_code_of_conduct/">[1]</a><a href="https://pjmedia.com/news-and-politics/paula-bolyard/2018/10/24/tech-community-outraged-after-sqlite-founder-adopts-christian-code-of-conduct-n61746">[2]</a><a href="https://www.youtube.com/watch?v=S48VzyCwwtk">[3]</a>.
+Therefore this document was renamed to "Code of Ethics", as
+we are encouraged to do by rule 71 in particular and also rules 2, 8, 9, 18, 19,
+30, 66, and in the spirit of all the rest.
+
+</p><p>This document continues to be used for its original purpose - providing
+a reference to fill in the "code of conduct" box on supplier registration
+forms.
+
+</p><h1 id="purpose"><span>2. </span>Purpose</h1>
+
+<p>The founder of SQLite, and all of the current developers at the time
+when this document was composed, have pledged to govern their
+interactions with each other, with their clients,
+and with the larger SQLite user community in
+accordance with the "instruments of good works" from chapter 4 of
+<a href="https://en.wikipedia.org/wiki/Rule_of_Saint_Benedict">The Rule of St. Benedict</a>
+(hereafter: "The Rule").
+This code of ethics has proven its mettle in thousands of diverse
+communities for over 1,500 years, and has served as a baseline for many
+civil law codes since the time of Charlemagne.
+
+</p><h2 id="scope_of_application"><span>2.1. </span>Scope of Application</h2>
+
+<p>
+No one is required to follow The Rule, to know The Rule, or even
+to think that The Rule is a good idea. The Founder of SQLite believes
+that anyone who follows The Rule will live a happier and more productive
+life, but individuals are free to dispute or ignore that advice if
+they wish.
+
+</p><p>
+The founder of SQLite and all
+current developers have pledged to follow the spirit of The Rule
+to the best of their ability. They
+view The Rule as their promise to all SQLite users of how the developers
+are expected to behave.
+This is a one-way promise, or covenant.
+In other words, the developers are saying: "We will treat you this
+way regardless of how you treat us."
+
+
+</p><h1 id="the_rule"><span>3. </span>The Rule</h1>
+
+<ol>
+<a name="r1"></a>
+<li> First of all, love the Lord God with your whole heart,
+ your whole soul, and your whole strength.
+<a name="r2"></a>
+</li><li> Then, love your neighbor as yourself.
+<a name="r3"></a>
+</li><li> Do not murder.
+<a name="r4"></a>
+</li><li> Do not commit adultery.
+<a name="r5"></a>
+</li><li> Do not steal.
+<a name="r6"></a>
+</li><li> Do not covet.
+<a name="r7"></a>
+</li><li> Do not bear false witness.
+<a name="r8"></a>
+</li><li> Honor all people.
+<a name="r9"></a>
+</li><li> Do not do to another what you would not have done to yourself.
+<a name="r10"></a>
+</li><li> Deny oneself in order to follow Christ.
+<a name="r11"></a>
+</li><li> Chastise the body.
+<a name="r12"></a>
+</li><li> Do not become attached to pleasures.
+<a name="r13"></a>
+</li><li> Love fasting.
+<a name="r14"></a>
+</li><li> Relieve the poor.
+<a name="r15"></a>
+</li><li> Clothe the naked.
+<a name="r16"></a>
+</li><li> Visit the sick.
+<a name="r17"></a>
+</li><li> Bury the dead.
+<a name="r18"></a>
+</li><li> Be a help in times of trouble.
+<a name="r19"></a>
+</li><li> Console the sorrowing.
+<a name="r20"></a>
+</li><li> Be a stranger to the world's ways.
+<a name="r21"></a>
+</li><li> Prefer nothing more than the love of Christ.
+<a name="r22"></a>
+</li><li> Do not give way to anger.
+<a name="r23"></a>
+</li><li> Do not nurse a grudge.
+<a name="r24"></a>
+</li><li> Do not entertain deceit in your heart.
+<a name="r25"></a>
+</li><li> Do not give a false peace.
+<a name="r26"></a>
+</li><li> Do not forsake charity.
+<a name="r27"></a>
+</li><li> Do not swear, for fear of perjuring yourself.
+<a name="r28"></a>
+</li><li> Utter only truth from heart and mouth.
+<a name="r29"></a>
+</li><li> Do not return evil for evil.
+<a name="r30"></a>
+</li><li> Do no wrong to anyone, and bear patiently wrongs done to yourself.
+<a name="r31"></a>
+</li><li> Love your enemies.
+<a name="r32"></a>
+</li><li> Do not curse those who curse you, but rather bless them.
+<a name="r33"></a>
+</li><li> Bear persecution for justice's sake.
+<a name="r34"></a>
+</li><li> Be not proud.
+<a name="r35"></a>
+</li><li> Be not addicted to wine.
+<a name="r36"></a>
+</li><li> Be not a great eater.
+<a name="r37"></a>
+</li><li> Be not drowsy.
+<a name="r38"></a>
+</li><li> Be not lazy.
+<a name="r39"></a>
+</li><li> Be not a grumbler.
+<a name="r40"></a>
+</li><li> Be not a detractor.
+<a name="r41"></a>
+</li><li> Put your hope in God.
+<a name="r42"></a>
+</li><li> Attribute to God, and not to self, whatever good you see in yourself.
+<a name="r43"></a>
+</li><li> Recognize always that evil is your own doing,
+ and to impute it to yourself.
+<a name="r44"></a>
+</li><li> Fear the Day of Judgment.
+<a name="r45"></a>
+</li><li> Be in dread of hell.
+<a name="r46"></a>
+</li><li> Desire eternal life with all the passion of the spirit.
+<a name="r47"></a>
+</li><li> Keep death daily before your eyes.
+<a name="r48"></a>
+</li><li> Keep constant guard over the actions of your life.
+<a name="r49"></a>
+</li><li> Know for certain that God sees you everywhere.
+<a name="r50"></a>
+</li><li> When wrongful thoughts come into your heart, dash them against
+ Christ immediately.
+<a name="r51"></a>
+</li><li> Disclose wrongful thoughts to your spiritual mentor.
+<a name="r52"></a>
+</li><li> Guard your tongue against evil and depraved speech.
+<a name="r53"></a>
+</li><li> Do not love much talking.
+<a name="r54"></a>
+</li><li> Speak no useless words or words that move to laughter.
+<a name="r55"></a>
+</li><li> Do not love much or boisterous laughter.
+<a name="r56"></a>
+</li><li> Listen willingly to holy reading.
+<a name="r57"></a>
+</li><li> Devote yourself frequently to prayer.
+<a name="r58"></a>
+</li><li> Daily in your prayers, with tears and sighs, confess your
+ past sins to God, and amend them for the future.
+<a name="r59"></a>
+</li><li> Fulfill not the desires of the flesh; hate your own will.
+<a name="r60"></a>
+</li><li> Obey in all things the commands of those whom God has placed
+ in authority over you even though they (which God forbid) should
+ act otherwise, mindful of the Lord's precept, "Do what they say,
+ but not what they do."
+<a name="r61"></a>
+</li><li> Do not wish to be called holy before one is holy; but first to be
+ holy, that you may be truly so called.
+<a name="r62"></a>
+</li><li> Fulfill God's commandments daily in your deeds.
+<a name="r63"></a>
+</li><li> Love chastity.
+<a name="r64"></a>
+</li><li> Hate no one.
+<a name="r65"></a>
+</li><li> Be not jealous, nor harbor envy.
+<a name="r66"></a>
+</li><li> Do not love quarreling.
+<a name="r67"></a>
+</li><li> Shun arrogance.
+<a name="r68"></a>
+</li><li> Respect your seniors.
+<a name="r69"></a>
+</li><li> Love your juniors.
+<a name="r70"></a>
+</li><li> Pray for your enemies in the love of Christ.
+<a name="r71"></a>
+</li><li> Make peace with your adversary before the sun sets.
+<a name="r72"></a>
+</li><li> Never despair of God's mercy.
+</li></ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/codeofethics.in?m=85f98a3f831b618a0">2020-12-07 14:28:45</a> UTC </small></i></p>
+
diff --git a/www/compile.html b/www/compile.html
new file mode 100644
index 0000000..5afc02b
--- /dev/null
+++ b/www/compile.html
@@ -0,0 +1,2047 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Compile-time Options</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Compile-time Options
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#recommended_compile_time_options">2. Recommended Compile-time Options</a></div>
+<div class="fancy-toc1"><a href="#_platform_configuration">3. Platform Configuration</a></div>
+<div class="fancy-toc1"><a href="#_options_to_set_default_parameter_values">4. Options To Set Default Parameter Values</a></div>
+<div class="fancy-toc1"><a href="#_options_to_set_size_limits">5. Options To Set Size Limits</a></div>
+<div class="fancy-toc1"><a href="#_options_to_control_operating_characteristics">6. Options To Control Operating Characteristics</a></div>
+<div class="fancy-toc1"><a href="#_options_to_enable_features_normally_turned_off">7. Options To Enable Features Normally Turned Off</a></div>
+<div class="fancy-toc1"><a href="#_options_to_disable_features_normally_turned_on">8. Options To Disable Features Normally Turned On</a></div>
+<div class="fancy-toc1"><a href="#_options_to_omit_features">9. Options To Omit Features</a></div>
+<div class="fancy-toc1"><a href="#_analysis_and_debugging_options">10. Analysis and Debugging Options</a></div>
+<div class="fancy-toc1"><a href="#_windows_specific_options">11. Windows-Specific Options</a></div>
+<div class="fancy-toc1"><a href="#compiler_linkage_and_calling_convention_control">12. Compiler Linkage and Calling Convention Control</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+For most purposes, SQLite can be built just fine using the default
+compilation options. However, if required, the compile-time options
+documented below can be used to
+<a href="#omitfeatures">omit SQLite features</a> (resulting in
+a <a href="footprint.html">smaller compiled library size</a>) or to change the
+<a href="#defaults">default values</a> of some parameters.
+</p>
+
+<p>
+Every effort has been made to ensure that the various combinations
+of compilation options work harmoniously and produce a working library.
+Nevertheless, it is strongly recommended that the SQLite test-suite
+be executed to check for errors before using an SQLite library built
+with non-standard compilation options.
+</p>
+
+<a name="rcmd"></a>
+
+
+<h1 id="recommended_compile_time_options"><span>2. </span>Recommended Compile-time Options</h1>
+
+<p>The following compile-time options are recommended for applications that
+are able to use them, in order to minimized the number of CPU cycles and
+the bytes of memory used by SQLite.
+Not all of these compile-time options are usable by every application.
+For example, the SQLITE_THREADSAFE=0 option is only usable by applications
+that never access SQLite from more than one thread at a time. And the
+SQLITE_OMIT_PROGRESS_CALLBACK option is only usable by applications that
+do not use the <a href="c3ref/progress_handler.html">sqlite3_progress_handler()</a> interface. And so forth.
+
+</p><p>It is impossible to test every possible combination of compile-time
+options for SQLite. But the following set of compile-time options is
+one configuration that is always fully tested.
+
+</p><ol>
+<li><p><b><a href="compile.html#dqs">SQLITE_DQS=0</a></b>.
+This setting disables the <a href="quirks.html#dblquote">double-quoted string literal</a> misfeature.
+
+</p></li><li><p><b><a href="compile.html#threadsafe">SQLITE_THREADSAFE=0</a></b>.
+Setting -DSQLITE_THREADSAFE=0 causes all of the mutex and thread-safety logic
+in SQLite to be omitted. This is the single compile-time option causes SQLite
+to run about 2% faster and also reduces the size of the library by about 2%.
+But the downside is that using the compile-time option means that SQLite can never
+be used by more than a single thread at a time, even if each thread has its own
+database connection.
+
+</p></li><li><p><b><a href="compile.html#default_memstatus">SQLITE_DEFAULT_MEMSTATUS=0</a></b>.
+This setting causes the <a href="c3ref/status.html">sqlite3_status()</a> interfaces that track memory usage
+to be disabled. This helps the <a href="c3ref/free.html">sqlite3_malloc()</a> routines run much faster,
+and since SQLite uses <a href="c3ref/free.html">sqlite3_malloc()</a> internally, this helps to make the
+entire library faster.
+
+</p></li><li><p><b><a href="compile.html#default_wal_synchronous">SQLITE_DEFAULT_WAL_SYNCHRONOUS=1</a></b>.
+For maximum database safety following a power loss, the setting of
+<a href="pragma.html#pragma_synchronous">PRAGMA synchronous=FULL</a> is recommended. However, in <a href="wal.html">WAL mode</a>, complete
+database integrity is guaranteed with <a href="pragma.html#pragma_synchronous">PRAGMA synchronous=NORMAL</a>. With
+<a href="pragma.html#pragma_synchronous">PRAGMA synchronous=NORMAL</a> in <a href="wal.html">WAL mode</a>, recent changes to the database might
+be rolled back by a power loss, but the database will not be corrupted.
+Furthermore, transaction commit is much faster in WAL mode using
+synchronous=NORMAL than with the default synchronous=FULL. For these
+reasons, it is recommended that the synchronous setting be changed from
+FULL to NORMAL when switching to WAL mode. This compile-time option will
+accomplish that.
+
+</p></li><li><p><b><a href="compile.html#like_doesnt_match_blobs">SQLITE_LIKE_DOESNT_MATCH_BLOBS</a></b>.
+Historically, SQLite has allowed BLOB operands to the <a href="lang_expr.html#like">LIKE</a> and <a href="lang_expr.html#glob">GLOB</a>
+operators. But having a BLOB as an operand of <a href="lang_expr.html#like">LIKE</a> or <a href="lang_expr.html#glob">GLOB</a> complicates
+and slows the <a href="optoverview.html#like_opt">LIKE optimization</a>. When this option is set, it means that
+the LIKE and GLOB operators always return FALSE if either operand is a BLOB.
+That simplifies the implementation of the <a href="optoverview.html#like_opt">LIKE optimization</a> and allows
+queries that use the <a href="optoverview.html#like_opt">LIKE optimization</a> to run faster.
+
+</p></li><li><p><b><a href="limits.html#max_expr_depth">SQLITE_MAX_EXPR_DEPTH=0</a></b>.
+Setting the maximum expression parse-tree depth to zero disables all checking
+of the expression parse-tree depth, which simplifies the code resulting in
+faster execution, and helps the parse tree to use less memory.
+
+</p></li><li><p><b><a href="compile.html#omit_decltype">SQLITE_OMIT_DECLTYPE</a></b>.
+By omitting the (seldom-needed) ability to return the declared type of
+columns from the result set of query, <a href="c3ref/stmt.html">prepared statements</a> can be made
+to consume less memory.
+
+</p></li><li><p><b><a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a></b>.
+Omitting deprecated interfaces and features will not help SQLite to
+run any faster. It will reduce the library footprint, however. And
+it is the right thing to do.
+
+</p></li><li><p><b><a href="compile.html#omit_progress_callback">SQLITE_OMIT_PROGRESS_CALLBACK</a></b>.
+The progress handler callback counter must be checked in the inner loop
+of the <a href="opcode.html">bytecode engine</a>. By omitting this interface, a single conditional
+is removed from the inner loop of the <a href="opcode.html">bytecode engine</a>, helping SQL statements
+to run slightly faster.
+
+</p></li><li><p><b><a href="compile.html#omit_shared_cache">SQLITE_OMIT_SHARED_CACHE</a></b>.
+Omitting the possibility of using <a href="sharedcache.html">shared cache</a> allows many conditionals
+in performance-critical sections of the code to be eliminated. This can
+give a noticeable improvement in performance.
+
+</p></li><li><p><b><a href="compile.html#use_alloca">SQLITE_USE_ALLOCA</a></b>.
+Make use of alloca() for dynamically allocating temporary stack space for
+use within a single function, on systems that support alloca(). Without
+this option, temporary space is allocated from the heap.
+
+</p></li><li><p><b><a href="compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a></b>.
+The SQLite library needs to be initialized using a call to
+<a href="c3ref/initialize.html">sqlite3_initialize()</a> before certain interfaces are used.
+This initialization normally happens automatically the first time
+it is needed. However, with the SQLITE_OMIT_AUTOINIT option, the automatic
+initialization is omitted. This helps many API calls to run a little faster
+(since they do not have to check to see if initialization has already occurred
+and then run initialization if it has not previously been invoked) but it
+also means that the application must call <a href="c3ref/initialize.html">sqlite3_initialize()</a> manually.
+If SQLite is compiled with -DSQLITE_OMIT_AUTOINIT and a routine like
+<a href="c3ref/free.html">sqlite3_malloc()</a> or <a href="c3ref/vfs_find.html">sqlite3_vfs_find()</a> or <a href="c3ref/open.html">sqlite3_open()</a> is invoked
+without first calling <a href="c3ref/initialize.html">sqlite3_initialize()</a>, the likely result will be
+a segfault.
+</p></li></ol>
+
+<p>When all of the recommended compile-time options above are used,
+the SQLite library will be approximately 3% smaller and use about 5% fewer
+CPU cycles. So these options do not make a huge difference. But in
+some design situations, every little bit helps.
+
+<a name="osconfig"></a>
+</p><h1 id="_platform_configuration"><span>3. </span> Platform Configuration</h1>
+
+<a name="sqlite_config_h"></a>
+<p><b>_HAVE_SQLITE_CONFIG_H</b></p><blockquote><p>
+ If the _HAVE_SQLITE_CONFIG_H macro is defined
+ then the SQLite source code will attempt to #include a file named "config.h".
+ The "config.h" file usually contains other configuration options, especially
+ "HAVE_<i>INTERFACE</i>" type options generated by autoconf scripts.
+</p></blockquote><a name="fdatasync"></a>
+<p><b>HAVE_FDATASYNC</b></p><blockquote><p>
+ If the HAVE_FDATASYNC compile-time option is true, then the default <a href="vfs.html">VFS</a>
+ for unix systems will attempt to use fdatasync() instead of fsync() where
+ appropriate. If this flag is missing or false, then fsync() is always used.
+</p></blockquote><a name="gmtime_r"></a>
+<p><b>HAVE_GMTIME_R</b></p><blockquote><p>
+ If the HAVE_GMTIME_R option is true and if <a href="compile.html#omit_datetime_funcs">SQLITE_OMIT_DATETIME_FUNCS</a> is true,
+ then the CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP keywords will use
+ the threadsafe "gmtime_r()" interface rather than "gmtime()". In the usual case
+ where <a href="compile.html#omit_datetime_funcs">SQLITE_OMIT_DATETIME_FUNCS</a> is not defined or is false, then the
+ built-in <a href="lang_datefunc.html">date and time functions</a> are used to implement the CURRENT_TIME,
+ CURRENT_DATE, and CURRENT_TIMESTAMP keywords and neither gmtime_r() nor
+ gmtime() is ever called.
+</p></blockquote><a name="isnan"></a>
+<p><b>HAVE_ISNAN</b></p><blockquote><p>
+ If the HAVE_ISNAN option is true, then SQLite invokes the system library isnan()
+ function to determine if a double-precision floating point value is a NaN.
+ If HAVE_ISNAN is undefined or false, then SQLite substitutes its own home-grown
+ implementation of isnan().
+</p></blockquote><a name="localtime_r"></a>
+<p><b>HAVE_LOCALTIME_R</b></p><blockquote><p>
+ If the HAVE_LOCALTIME_R option is true, then SQLite uses the threadsafe
+ localtime_r() library routine instead of localtime()
+ to help implement the <a href="lang_datefunc.html#localtime">localtime modifier</a>
+ to the built-in <a href="lang_datefunc.html">date and time functions</a>.
+</p></blockquote><a name="localtime_s"></a>
+<p><b>HAVE_LOCALTIME_S</b></p><blockquote><p>
+ If the HAVE_LOCALTIME_S option is true, then SQLite uses the threadsafe
+ localtime_s() library routine instead of localtime()
+ to help implement the <a href="lang_datefunc.html#localtime">localtime modifier</a>
+ to the built-in <a href="lang_datefunc.html">date and time functions</a>.
+</p></blockquote><a name="malloc_usable_size"></a>
+<p><b>HAVE_MALLOC_USABLE_SIZE</b></p><blockquote><p>
+ If the HAVE_MALLOC_USABLE_SIZE option is true, then SQLite tries uses the
+ malloc_usable_size() interface to find the size of a memory allocation obtained
+ from the standard-library malloc() or realloc() routines. This option is only
+ applicable if the standard-library malloc() is used. On Apple systems,
+ "zone malloc" is used instead, and so this option is not applicable. And, of
+ course, if the application supplies its own malloc implementation using
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a> then this option has no effect.
+ <p>
+ If the HAVE_MALLOC_USABLE_SIZE option is omitted or is false, then SQLite
+ uses a wrapper around system malloc() and realloc() that enlarges each allocation
+ by 8 bytes and writes the size of the allocation in the initial 8 bytes, and
+ then SQLite also implements its own home-grown version of malloc_usable_size()
+ that consults that 8-byte prefix to find the allocation size. This approach
+ works but it is suboptimal. Applications are encouraged to use
+ HAVE_MALLOC_USABLE_SIZE whenever possible.
+</p></blockquote><a name="strchrnul"></a>
+<p><b>HAVE_STRCHRNUL</b></p><blockquote><p>
+ If the HAVE_STRCHRNUL option is true, then SQLite uses the strchrnul() library
+ function. If this option is missing or false, then SQLite substitutes its own
+ home-grown implementation of strchrnul().
+</p></blockquote><a name="usleep"></a>
+<p><b>HAVE_USLEEP</b></p><blockquote><p>
+ If the HAVE_USLEEP option is true, then the default unix VFS uses the
+ usleep() system call to implement the xSleep method. If this option is
+ undefined or false, then xSleep on unix is implemented using sleep() which
+ means that <a href="c3ref/sleep.html">sqlite3_sleep()</a> will have a minimum wait interval of 1000
+ milliseconds regardless of its argument.
+</p></blockquote><a name="utime"></a>
+<p><b>HAVE_UTIME</b></p><blockquote><p>
+ If the HAVE_UTIME option is true, then the built-in but non-standard
+ "unix-dotfile" VFS will use the utime() system call, instead of utimes(),
+ to set the last access time on the lock file.
+</p></blockquote><a name="byteorder"></a>
+<p><b>SQLITE_BYTEORDER=<i>(0|1234|4321)</i></b></p><blockquote><p>
+ SQLite needs to know if the native byte order of the target CPU is
+ big-endian or little-ending. The SQLITE_BYTEORDER preprocessor is set
+ to 4321 for big-endian machines and 1234 for little-endian machines, or
+ it can be 0 to mean that the byte order must be determined at run-time.
+ There are #ifdefs in the code that set SQLITE_BYTEORDER automatically
+ for all common platforms and compilers. However, it may be advantageous
+ to set SQLITE_BYTEORDER appropriately when compiling SQLite for obscure
+ targets. If the target byte order cannot be determined at compile-time,
+ then SQLite falls back to doing run-time checks, which always work, though
+ with a small performance penalty.
+</p></blockquote>
+
+<a name="defaults"></a>
+<h1 id="_options_to_set_default_parameter_values"><span>4. </span> Options To Set Default Parameter Values</h1>
+
+<a name="default_automatic_index"></a>
+<p><b>SQLITE_DEFAULT_AUTOMATIC_INDEX=<i>&lt;0 or 1&gt;</i></b></p><blockquote><p>
+ This macro determines the initial setting for <a href="pragma.html#pragma_automatic_index">PRAGMA automatic_index</a>
+ for newly opened <a href="c3ref/sqlite3.html">database connections</a>.
+ For all versions of SQLite through 3.7.17,
+ automatic indices are normally enabled for new database connections if
+ this compile-time option is omitted.
+ However, that might change in future releases of SQLite.
+ <p>See also: <a href="compile.html#omit_automatic_index">SQLITE_OMIT_AUTOMATIC_INDEX</a>
+</p></blockquote><a name="default_autovacuum"></a>
+<p><b>SQLITE_DEFAULT_AUTOVACUUM=<i>&lt;0 or 1 or 2&gt;</i></b></p><blockquote><p>
+ This macro determines if SQLite creates databases with the
+ <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> flag set by default to OFF (0), FULL (1), or
+ INCREMENTAL (2). The default value is 0 meaning that databases
+ are created with auto-vacuum turned off.
+ In any case the compile-time default may be overridden by the
+ <a href="pragma.html#pragma_auto_vacuum">PRAGMA auto_vacuum</a> command.
+</p></blockquote><a name="default_cache_size"></a>
+<p><b>SQLITE_DEFAULT_CACHE_SIZE=<i>&lt;N&gt;</i></b></p><blockquote><p>
+ This macro sets the default maximum size of the page-cache for each attached
+ database. A positive value means that the limit is N page. If N is negative
+ that means to limit the cache size to -N*1024 bytes.
+ The suggested maximum cache size can be overridden by the
+ <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> command. The default value is -2000, which translates
+ into a maximum of 2048000 bytes per cache.
+</p></blockquote><a name="default_file_format"></a>
+<p><b>SQLITE_DEFAULT_FILE_FORMAT=<i>&lt;1 or 4&gt;</i></b></p><blockquote><p>
+ The default <a href="fileformat2.html#schemaformat">schema format number</a> used by SQLite when creating
+ new database files is set by this macro. The schema formats are all
+ very similar. The difference between formats 1 and 4 is that format
+ 4 understands <a href="lang_createindex.html#descidx">descending indices</a> and has a tighter encoding for
+ boolean values.</p>
+
+<p> All versions of SQLite since 3.3.0 (2006-01-10)
+ can read and write any schema format
+ between 1 and 4. But older versions of SQLite might not be able to
+ read formats greater than 1. So that older versions of SQLite will
+ be able to read and write database files created by newer versions
+ of SQLite, the default schema format was set to 1 for SQLite versions
+ through 3.7.9 (2011-11-01). Beginning with
+ <a href="releaselog/3_7_10.html">version 3.7.10</a> (2012-01-16), the default
+ schema format is 4.</p>
+
+<p> The schema format number for a new database can be set at runtime using
+ the <a href="pragma.html#pragma_legacy_file_format">PRAGMA legacy_file_format</a> command.
+</p></blockquote><a name="default_file_permissions"></a>
+<p><b>SQLITE_DEFAULT_FILE_PERMISSIONS=<i>N</i></b></p><blockquote><p>
+ The default numeric file permissions for newly created database files
+ under unix. If not specified, the default is 0644 which means that
+ the files is globally readable but only writable by the creator.
+</p></blockquote><a name="default_foreign_keys"></a>
+<p><b>SQLITE_DEFAULT_FOREIGN_KEYS=<i>&lt;0 or 1&gt;</i></b></p><blockquote><p>
+ This macro determines whether enforcement of
+ <a href="foreignkeys.html">foreign key constraints</a> is enabled or disabled by default for
+ new database connections. Each database connection can always turn
+ enforcement of foreign key constraints on and off and run-time using
+ the <a href="pragma.html#pragma_foreign_keys">foreign_keys pragma</a>. Enforcement of foreign key constraints
+ is normally off by default, but if this compile-time parameter is
+ set to 1, enforcement of foreign key constraints will be on by default.
+</p></blockquote><a name="default_mmap_size"></a>
+<p><b>SQLITE_DEFAULT_MMAP_SIZE=<i>N</i></b></p><blockquote><p>
+ This macro sets the default limit on the amount of memory that
+ will be used for memory-mapped I/O
+ for each open database file. If the <i>N</i>
+ is zero, then memory mapped I/O is disabled by default. This
+ compile-time limit and the <a href="compile.html#max_mmap_size">SQLITE_MAX_MMAP_SIZE</a> can be modified
+ at start-time using the
+ <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a>) call, or at run-time
+ using the <a href="pragma.html#pragma_mmap_size">mmap_size pragma</a>.
+</p></blockquote><a name="default_journal_size_limit"></a>
+<p><b>SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=<i>&lt;bytes&gt;</i></b></p><blockquote><p>
+ This option sets the size limit on <a href="lockingv3.html#rollback">rollback journal</a> files in
+ <a href="pragma.html#pragma_journal_mode">persistent journal mode</a> and
+ <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a> and on the size of the
+ write-ahead log file in <a href="wal.html">WAL mode</a>. When this
+ compile-time option is omitted there is no upper bound on the
+ size of the rollback journals or write-ahead logs.
+ The journal file size limit
+ can be changed at run-time using the <a href="pragma.html#pragma_journal_size_limit">journal_size_limit pragma</a>.
+</p></blockquote><a name="default_locking_mode"></a>
+<p><b>SQLITE_DEFAULT_LOCKING_MODE=<i>&lt;1 or 0&gt;</i></b></p><blockquote><p>
+ If set to 1, then the default <a href="pragma.html#pragma_locking_mode">locking_mode</a> is set to EXCLUSIVE.
+ If omitted or set to 0 then the default <a href="pragma.html#pragma_locking_mode">locking_mode</a> is NORMAL.
+</p></blockquote><a name="default_lookaside"></a>
+<p><b>SQLITE_DEFAULT_LOOKASIDE=<i>SZ,N</i></b></p><blockquote><p>
+ Sets the default size of the <a href="malloc.html#lookaside">lookaside memory allocator</a> memory pool
+ to N entries of SZ bytes each. This setting can be modified at
+ start-time using <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a>) and/or
+ as each <a href="c3ref/sqlite3.html">database connection</a> is opened using
+ <a href="c3ref/db_config.html">sqlite3_db_config</a>(db, <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">SQLITE_DBCONFIG_LOOKASIDE</a>).
+</p></blockquote><a name="default_memstatus"></a>
+<p><b>SQLITE_DEFAULT_MEMSTATUS=<i>&lt;1 or 0&gt;</i></b></p><blockquote><p>
+ This macro is used to determine whether or not the features enabled and
+ disabled using the SQLITE_CONFIG_MEMSTATUS argument to <a href="c3ref/config.html">sqlite3_config()</a>
+ are available by default. The default value is 1 (<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a>
+ related features enabled).
+ <p>
+ The <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> interfaces,
+ the <a href="c3ref/status.html">sqlite3_status64</a>(<a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">SQLITE_STATUS_MEMORY_USED</a>) interface,
+ and the <a href="compile.html#max_memory">SQLITE_MAX_MEMORY</a> compile-time option are all non-functional
+ when memory usage tracking is disabled.
+</p></blockquote><a name="default_pcache_initsz"></a>
+<p><b>SQLITE_DEFAULT_PCACHE_INITSZ=<i>N</i></b></p><blockquote><p>
+ This macro determines the number of pages initially allocated by the
+ page cache module when <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a> configuration option is
+ not use and memory for the page cache is obtained from <a href="c3ref/free.html">sqlite3_malloc()</a>
+ instead. The number of pages set by this macro are allocated in a single
+ allocation, which reduces the load on the memory allocator.
+</p></blockquote><a name="default_page_size"></a>
+<p><b>SQLITE_DEFAULT_PAGE_SIZE=<i>&lt;bytes&gt;</i></b></p><blockquote><p>
+ This macro is used to set the default page-size used when a
+ database is created. The value assigned must be a power of 2. The
+ default value is 4096. The compile-time default may be overridden at
+ runtime by the <a href="pragma.html#pragma_page_size">PRAGMA page_size</a> command.
+</p></blockquote><a name="default_synchronous"></a>
+<p><b>SQLITE_DEFAULT_SYNCHRONOUS=<i>&lt;0-3&gt;</i></b></p><blockquote><p>
+ This macro determines the default value of the
+ <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting. If not overridden at compile-time,
+ the default setting is 2 (FULL).
+</p></blockquote><a name="default_wal_synchronous"></a>
+<p><b>SQLITE_DEFAULT_WAL_SYNCHRONOUS=<i>&lt;0-3&gt;</i></b></p><blockquote><p>
+ This macro determines the default value of the
+ <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting for database files that open in
+ <a href="wal.html">WAL mode</a>. If not overridden at compile-time, this value is the
+ same as <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a>.
+ <p>
+ If SQLITE_DEFAULT_WAL_SYNCHRONOUS differs from SQLITE_DEFAULT_SYNCHRONOUS,
+ and if the application has not modified the synchronous setting for
+ the database file using the <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> statement, then
+ the synchronous setting is changed to value defined by
+ SQLITE_DEFAULT_WAL_SYNCHRONOUS when the database connection switches
+ into WAL mode for the first time.
+ If the SQLITE_DEFAULT_WAL_SYNCHRONOUS value is not overridden at
+ compile-time, then it will always be the same as
+ <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> and so no automatic synchronous setting
+ changes will ever occur.
+</p></blockquote><a name="default_wal_autocheckpoint"></a>
+<p><b>SQLITE_DEFAULT_WAL_AUTOCHECKPOINT=<i>&lt;pages&gt;</i></b></p><blockquote><p>
+ This macro sets the default page count for the <a href="wal.html">WAL</a>
+ <a href="wal.html#ckpt">automatic checkpointing</a> feature. If unspecified,
+ the default page count is 1000.
+</p></blockquote><a name="default_worker_threads"></a>
+<p><b>SQLITE_DEFAULT_WORKER_THREADS=<i>N</i></b></p><blockquote><p>
+ This macro sets the default value for
+ the <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a> parameter. The <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a>
+ parameter sets the maximum number of auxiliary threads that a single
+ <a href="c3ref/stmt.html">prepared statement</a> will launch to assist it with a query. If not specified,
+ the default maximum is 0.
+ The value set here cannot be more than <a href="compile.html#max_worker_threads">SQLITE_MAX_WORKER_THREADS</a>.
+</p></blockquote><a name="dqs"></a>
+<p><b>SQLITE_DQS=<i>N</i></b></p><blockquote><p>
+ This macro determines the default values for
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">SQLITE_DBCONFIG_DQS_DDL</a> and <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">SQLITE_DBCONFIG_DQS_DML</a>, which
+ in turn how SQLite handles each <a href="quirks.html#dblquote">double-quoted string literal</a>.
+ The "DQS" name stands for
+ "<u>D</u>ouble-<u>Q</u>uoted <u>S</u>tring".
+ The <i>N</i> argument should be an integer 0, 1, 2, or 3.
+ <blockquote><table border=1 cellpadding="0" cellspacing="0">
+ <tr><th rowspan="2">SQLITE_DQS<th colspan="2">Double-Quoted Strings Allowed
+ <th rowspan="2">Remarks
+ <tr><th>In DDL<th>In DML
+ <tr><td>3<td>yes<td>yes<td>default
+ <tr><td>2<td>yes<td>no<td>&nbsp;
+ <tr><td>1<td>no<td>yes<td>&nbsp;
+ <tr><td>0<td>no<td>no<td>recommended
+ </table></blockquote>
+ <p>The recommended setting is 0, meaning that double-quoted
+ strings are disallowed in all contexts. However, the default
+ setting is 3 for maximum compatibility with legacy applications.
+</p></blockquote><a name="extra_durable"></a>
+<p><b>SQLITE_EXTRA_DURABLE</b></p><blockquote><p>
+ The SQLITE_EXTRA_DURABLE compile-time option that used to cause the default
+ <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting to be EXTRA, rather than FULL. This option
+ is no longer supported. Use
+ <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS=3</a> instead.
+</p></blockquote><a name="fts3_max_expr_depth"></a>
+<p><b>SQLITE_FTS3_MAX_EXPR_DEPTH=<i>N</i></b></p><blockquote><p>
+ This macro sets the maximum depth of the search tree that corresponds to
+ the right-hand side of the MATCH operator in an <a href="fts3.html">FTS3</a> or <a href="fts3.html#fts4">FTS4</a> full-text
+ index. The full-text search uses a recursive algorithm, so the depth of
+ the tree is limited to prevent using too much stack space. The default
+ limit is 12. This limit is sufficient for up to 4095 search terms on the
+ right-hand side of the MATCH operator and it holds stack space usage to
+ less than 2000 bytes.
+ <p>
+ For ordinary FTS3/FTS4 queries, the search tree depth is approximately
+ the base-2 logarithm of the number of terms in the right-hand side of the
+ MATCH operator. However, for <a href="fts3.html#phrase">phrase queries</a> and <a href="fts3.html#near">NEAR queries</a> the
+ search tree depth is linear in the number of right-hand side terms.
+ So the default depth limit of 12 is sufficient for up to 4095 ordinary
+ terms on a MATCH, it is only sufficient for 11 or 12 phrase or NEAR
+ terms. Even so, the default is more than enough for most application.
+</p></blockquote><a name="like_doesnt_match_blobs"></a>
+<p><b>SQLITE_LIKE_DOESNT_MATCH_BLOBS</b></p><blockquote><p>
+ This compile-time option causes the <a href="lang_expr.html#like">LIKE</a> operator to always return
+ False if either operand is a BLOB. The default behavior of <a href="lang_expr.html#like">LIKE</a>
+ is that BLOB operands are cast to TEXT before the comparison is done.
+ <p>
+ This compile-time option makes SQLite run more efficiently when processing
+ queries that use the <a href="lang_expr.html#like">LIKE</a> operator, at the expense of breaking backwards
+ compatibility. However, the backwards compatibility break may be only
+ a technicality. There was a long-standing bug in the <a href="lang_expr.html#like">LIKE</a> processing logic
+ (see <a href="https://www.sqlite.org/src/info/05f43be8fdda9f">https://www.sqlite.org/src/info/05f43be8fdda9f</a>) that caused it to
+ misbehavior for BLOB operands and nobody observed that bug in nearly
+ 10 years of active use. So for more users, it is probably safe to
+ enable this compile-time option and thereby save a little CPU time
+ on LIKE queries.
+ <p>
+ This compile-time option affects the SQL <a href="lang_expr.html#like">LIKE</a> operator only and has
+ no impact on the <a href="c3ref/strlike.html">sqlite3_strlike()</a> C-language interface.
+</p></blockquote><a name="max_memory"></a>
+<p><b>SQLITE_MAX_MEMORY=<i>N</i></b></p><blockquote><p>
+ This option limits the total amount of memory that SQLite will request
+ from malloc() to <i>N</i> bytes. Any attempt by SQLite to allocate
+ new memory that would cause the sum of all allocations held by SQLite to exceed
+ <i>N</i> bytes will result in an out-of-memory error.
+ This is a hard upper limit. See also the <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>
+ interface.
+ <p>
+ This limit is only functional if memory usage statistics are available via
+ the <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="c3ref/status.html">sqlite3_status64</a>(<a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">SQLITE_STATUS_MEMORY_USED</a>)
+ interfaces. Without that memory usage information, SQLite has no way of
+ knowing when it is about to go over the limit, and thus is unable to prevent
+ the excess memory allocation. Memory usage tracking is turned on by default,
+ but can be disabled at compile-time using the <a href="compile.html#default_memstatus">SQLITE_DEFAULT_MEMSTATUS</a> option,
+ or at start-time using <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a>).
+</p></blockquote><a name="max_mmap_size"></a>
+<p><b>SQLITE_MAX_MMAP_SIZE=<i>N</i></b></p><blockquote><p>
+ This macro sets a hard upper bound on the amount of address space that
+ can be used by any single database for memory-mapped I/O.
+ Setting this value to 0 completely disables memory-mapped I/O and
+ causes logic associated with memory-mapped I/O to be omitted from the
+ build. This option does change the default memory-mapped I/O address
+ space size (set by <a href="compile.html#default_mmap_size">SQLITE_DEFAULT_MMAP_SIZE</a> or
+ sqlite3_config(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a>) or the
+ run-time memory-mapped I/O address space size (set by
+ sqlite3_file_control(<a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize">SQLITE_FCNTL_MMAP_SIZE</a>) or
+ <a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a>) as long as those other settings are less than the
+ maximum value defined here.
+</p></blockquote><a name="max_schema_retry"></a>
+<p><b>SQLITE_MAX_SCHEMA_RETRY=<i>N</i></b></p><blockquote><p>
+ Whenever the database schema changes, prepared statements are automatically
+ reprepared to accommodate the new schema. There is a race condition here
+ in that if one thread is constantly changing the schema, another thread
+ might spin on reparses and repreparations of a prepared statement and
+ never get any real work done. This parameter prevents an infinite loop
+ by forcing the spinning thread to give up after a fixed number of attempts
+ at recompiling the prepared statement. The default setting is 50 which is
+ more than adequate for most applications.
+</p></blockquote><a name="max_worker_threads"></a>
+<p><b>SQLITE_MAX_WORKER_THREADS=<i>N</i></b></p><blockquote><p>
+ Set an upper bound on the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a>,N)
+ setting that determines the maximum number of auxiliary threads that a single
+ <a href="c3ref/stmt.html">prepared statement</a> will use to aid with CPU-intensive computations
+ (mostly sorting). See also the <a href="compile.html#default_worker_threads">SQLITE_DEFAULT_WORKER_THREADS</a> options.
+</p></blockquote><a name="memdb_default_maxsize"></a>
+<p><b>SQLITE_MEMDB_DEFAULT_MAXSIZE=<i>N</i></b></p><blockquote><p>
+ Set the default size limit (in bytes) for in-memory databases created using
+ <a href="c3ref/deserialize.html">sqlite3_deserialize()</a>. This is just the default. The limit can be
+ changed at start-time using
+ <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">SQLITE_CONFIG_MEMDB_MAXSIZE</a>,N)
+ or at run-time for individual databases using the
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> <a href="c3ref/file_control.html">file-control</a>.
+ If no default is specified, 1073741824 is used.
+</p></blockquote><a name="minimum_file_descriptor"></a>
+<p><b>SQLITE_MINIMUM_FILE_DESCRIPTOR=<i>N</i></b></p><blockquote><p>
+ The unix <a href="vfs.html">VFS</a> will never use a file descriptor less than <i>N</i>. The
+ default value of <i>N</i> is 3.
+ <p>
+ Avoiding the use of low-numbered file descriptors is a defense against
+ accidental database corruption. If a database file was opened using
+ file descriptor 2, for example, and then an assert() failed and invoked
+ write(2,...), that would likely cause database corruption by overwriting
+ part of the database file with the assertion error message. Using only
+ higher-valued file descriptors avoids this potential problem. The
+ protection against
+ using low-numbered file descriptors can be disabled by setting this
+ compile-time option to 0.
+</p></blockquote><a name="powersafe_overwrite"></a>
+<p><b>SQLITE_POWERSAFE_OVERWRITE=<i>&lt;0 or 1&gt;</i></b></p><blockquote><p>
+ This option changes the default assumption about <a href="psow.html">powersafe overwrite</a>
+ for the underlying filesystems for the unix and windows <a href="vfs.html">VFSes</a>.
+ Setting SQLITE_POWERSAFE_OVERWRITE to 1 causes SQLite to assume that
+ application-level writes cannot changes bytes outside the range of
+ bytes written even if the write occurs just before a power loss.
+ With SQLITE_POWERSAFE_OVERWRITE set to 0, SQLite assumes that other
+ bytes in the same sector with a written byte might be changed or
+ damaged by a power loss.
+</p></blockquote><a name="printf_precision_limit"></a>
+<p><b>SQLITE_PRINTF_PRECISION_LIMIT=<i>N</i></b></p><blockquote><p>
+ This option limits the maximum width and precision of substitutions
+ for the <a href="lang_corefunc.html#printf">printf() SQL function</a> and the other C-language string
+ formatting functions such as <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> and
+ <a href="c3ref/str_append.html">sqlite3_str_appendf()</a>. This is turn can prevent a hostile or
+ malfunctioning script from using excessive memory by invoking
+ a format such as: "<tt>printf('%*s',2147483647,'hi')</tt>".
+ A value for <i>N</i> of around 100000 is normally sufficient.
+ <p>
+ The <a href="lang_corefunc.html#printf">printf() SQL function</a> is subject to the <a href="c3ref/c_limit_attached.html#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a>
+ limit of <a href="c3ref/limit.html">sqlite3_limit()</a>. Hence any printf() result with a
+ width or precision more than the SQLITE_LIMIT_LENGTH will cause
+ an <a href="rescode.html#toobig">SQLITE_TOOBIG</a> error. However, the low-level formatting
+ for the printf() function is done by a subroutine that does not
+ have access to SQLITE_LIMIT_LENGTH. So the low-level formatting
+ is done into a memory allocation that might be considerably larger
+ than SQLITE_LIMIT_LENGTH and the SQLITE_LIMIT_LENGTH check is only
+ performed after all formatting is complete. Thus there might be a
+ transient buffer that exceeds SQLITE_LIMIT_LENGTH. The
+ SQLITE_PRINTF_PRECISION_LIMIT option is an additional check
+ that prevents excess sizes for the transient buffer used inside
+ the low-level formatting subroutine, prior to the
+ SQLITE_LIMIT_LENGTH check.
+ <p>
+ Be careful not to set SQLITE_PRINTF_PRECISION_LIMIT too low.
+ SQLite uses its <a href="printf.html">built-in printf()</a> functionality to format the text
+ of CREATE statements stored in the <a href="schematab.html">sqlite_schema table</a>. So
+ SQLITE_PRINTF_PRECISION_LIMIT should be at least as big as the largest
+ table, index, view, or trigger definition that you are likely to
+ encounter.
+ <p>
+ No error is raised if a width or precision exceeds
+ SQLITE_PRINTF_PRECISION_LIMIT. Instead, the large width or
+ precision is silently truncated.
+ <p>
+ The default value for SQLITE_PRINTF_PRECISION_LIMIT is 2147483647
+ (0x7fffffff).</p>
+
+<p></p></blockquote><a name="query_planner_limit"></a>
+<p><b>SQLITE_QUERY_PLANNER_LIMIT=<i>N</i></b></p><blockquote><p>
+ As part of the query planning process, SQLite enumerates all usable
+ combinations of indexes and WHERE-clause constraints. For certain
+ pathological queries, the number of these index-and-constraint combinations
+ can be very large, resulting in slow performance by the query planner.
+ The SQLITE_QUERY_PLANNER_LIMIT value (in conjunction with the
+ related <a href="compile.html#query_planner_limit_incr">SQLITE_QUERY_PLANNER_LIMIT_INCR</a> setting) limits the number
+ of index-and-constraint combinations that the query planner will
+ consider, in order to prevent the query planner from using excess
+ CPU time. The default value for SQLITE_QUERY_PLANNER_LIMIT is set
+ high enough so that is never reached for real-world queries. The
+ query planner search limit only applies to queries that are deliberately
+ crafted to use excess planning time.
+</p></blockquote><a name="query_planner_limit_incr"></a>
+<p><b>SQLITE_QUERY_PLANNER_LIMIT_INCR=<i>N</i></b></p><blockquote><p>
+ The <a href="compile.html#query_planner_limit">SQLITE_QUERY_PLANNER_LIMIT</a> option sets an initial baseline value
+ for the maximum number of index-and-constraint combinations that the
+ query planner consider. The baseline query planner limit is increased
+ by SQLITE_QUERY_PLANNER_LIMIT_INCR prior to processing each table of a
+ join so that each table is guaranteed to be able to propose at least
+ some index-and-constraint combinations to the optimizer even if prior
+ tables of the join have exhausted the baseline limit. The default
+ value for both this compile-time option and the
+ <a href="compile.html#query_planner_limit">SQLITE_QUERY_PLANNER_LIMIT</a> option are set high enough so that they should
+ never be reached for real-world queries.
+</p></blockquote><a name="reverse_unordered_selects"></a>
+<p><b>SQLITE_REVERSE_UNORDERED_SELECTS</b></p><blockquote><p>
+ This option causes the <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> setting to be
+ enabled by default. When enabled, <a href="lang_select.html">SELECT</a> statements that lack an
+ ORDER BY clause will run in reverse order.<p>
+ This option is useful for detecting when applications (incorrectly)
+ assume that the order of rows in a SELECT without an ORDER BY clause
+ will always be the same.
+</p></blockquote><a name="sorter_pmasz"></a>
+<p><b>SQLITE_SORTER_PMASZ=<i>N</i></b></p><blockquote><p>
+ If multi-threaded processing is enabled via the
+ <a href="pragma.html#pragma_threads">PRAGMA threads</a> setting, then sort operations will
+ attempt to start helper threads when the amount of content
+ to be sorted exceeds the minimum of the <a href="pragma.html#pragma_cache_size">cache_size</a> and PMA Size
+ determined by the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a> start-time option.
+ This compile-time option sets the default value for the
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a> start-time option.
+ The default value is 250.
+</p></blockquote><a name="stmtjrnl_spill"></a>
+<p><b>SQLITE_STMTJRNL_SPILL=<i>N</i></b></p><blockquote><p>
+ The SQLITE_STMTJRNL_SPILL compile-time option determines the
+ default setting of the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">SQLITE_CONFIG_STMTJRNL_SPILL</a> start-time
+ setting. That setting determines the size threshold above which
+ <a href="tempfiles.html#stmtjrnl">statement journals</a> are moved from memory to disk.
+</p></blockquote><a name="win32_malloc"></a>
+<p><b>SQLITE_WIN32_MALLOC</b></p><blockquote><p>
+ This option enables the use of the Windows Heap API functions for memory
+ allocation instead of the standard library malloc() and free() routines.
+</p></blockquote><a name="yystackdepth"></a>
+<p><b>YYSTACKDEPTH=<i>&lt;max_depth&gt;</i></b></p><blockquote><p>
+ This macro sets the maximum depth of the LALR(1) stack used by
+ the SQL parser within SQLite. The default value is 100. A typical
+ application will use less than about 20 levels of the stack.
+ Developers whose applications contain SQL statements that
+ need more than 100 LALR(1) stack entries should seriously
+ consider refactoring their SQL as it is likely to be well beyond
+ the ability of any human to comprehend.
+</p></blockquote>
+
+<h1 id="_options_to_set_size_limits"><span>5. </span> Options To Set Size Limits</h1>
+
+<p>There are compile-time options that will set upper bounds
+on the sizes of various structures in SQLite. The compile-time
+options normally set a hard upper bound that can be changed
+at run-time on individual <a href="c3ref/sqlite3.html">database connections</a> using the
+<a href="c3ref/limit.html">sqlite3_limit()</a> interface.</p>
+
+<p>The compile-time options for setting upper bounds are
+<a href="limits.html">documented separately</a>. The following is a list of
+the available settings:</p>
+
+<ul>
+<li> <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> </li>
+<li> <a href="limits.html#max_column">SQLITE_MAX_COLUMN</a> </li>
+<li> <a href="limits.html#max_compound_select">SQLITE_MAX_COMPOUND_SELECT</a> </li>
+<li> <a href="limits.html#max_expr_depth">SQLITE_MAX_EXPR_DEPTH</a> </li>
+<li> <a href="limits.html#max_function_arg">SQLITE_MAX_FUNCTION_ARG</a> </li>
+<li> <a href="limits.html#max_length">SQLITE_MAX_LENGTH</a> </li>
+<li> <a href="limits.html#max_like_pattern_length">SQLITE_MAX_LIKE_PATTERN_LENGTH</a> </li>
+<li> <a href="limits.html#max_page_count">SQLITE_MAX_PAGE_COUNT</a> </li>
+<li> <a href="limits.html#max_sql_length">SQLITE_MAX_SQL_LENGTH</a> </li>
+<li> <a href="limits.html#max_variable_number">SQLITE_MAX_VARIABLE_NUMBER</a> </li>
+</ul>
+
+<a name="controlfeatures"></a>
+<h1 id="_options_to_control_operating_characteristics"><span>6. </span> Options To Control Operating Characteristics</h1>
+
+<a name="4_byte_aligned_malloc"></a>
+<p><b>SQLITE_4_BYTE_ALIGNED_MALLOC</b></p><blockquote><p>
+ On most systems, the malloc() system call returns a buffer that is
+ aligned to an 8-byte boundary. But on some systems (ex: windows) malloc()
+ returns 4-byte aligned pointer. This compile-time option must be used
+ on systems that return 4-byte aligned pointers from malloc().
+</p></blockquote><a name="case_sensitive_like"></a>
+<p><b>SQLITE_CASE_SENSITIVE_LIKE</b></p><blockquote><p>
+ If this option is present, then the built-in <a href="lang_expr.html#like">LIKE</a> operator will be
+ case sensitive. This same effect can be achieved at run-time using
+ the <a href="pragma.html#pragma_case_sensitive_like">case_sensitive_like pragma</a>.
+</p></blockquote><a name="direct_overflow_read"></a>
+<p><b>SQLITE_DIRECT_OVERFLOW_READ</b></p><blockquote><p>
+ When this option is present, content contained in
+ <a href="fileformat2.html#ovflpgs">overflow pages</a> of the database file is read directly from disk,
+ bypassing the <a href="c3ref/pcache_methods2.html">page cache</a>, during read transactions. In applications
+ that do a lot of reads of large BLOBs, this option might improve read
+ performance.
+</p></blockquote><a name="have_isnan"></a>
+<p><b>SQLITE_HAVE_ISNAN</b></p><blockquote><p>
+ If this option is present, then SQLite will use the isnan() function from
+ the system math library. This is an alias for the <a href="compile.html#isnan">HAVE_ISNAN</a> configuration
+ option.
+</p></blockquote><a name="max_allocation_size"></a>
+<p><b>SQLITE_MAX_ALLOCATION_SIZE=<i>N</i></b></p><blockquote><p>
+ This compile-time option sets an upper bound on the size of memory
+ allocations that can be requested using <a href="c3ref/free.html">sqlite3_malloc64()</a>,
+ <a href="c3ref/free.html">sqlite3_realloc64()</a>, and similar. The default value is
+ 2,147,483,391 (0x7ffffeff) and this should be considered an
+ upper bound. Most applications can get by with an maximum allocation
+ size of a few million bytes.
+ <p>
+ This is a limit on the maximum size of any single memory allocation.
+ It is <i>not</i> a limit on the total amount of memory allocated.
+ <p>
+ Reducing the maximum size of individual memory allocations provides
+ extra defense against denial-of-service attacks that attempt to exhaust
+ system memory by doing many large allocations. It is also an extra layer
+ of defense against application bugs where the size of a memory allocation
+ is computed using a signed 32-bit integer that could overflow &rarr;
+ with a small maximum allocation size, such buggy memory allocation size
+ computations are likely to be spotted sooner due to out-of-memory errors
+ and before the integer actually overflows.
+</p></blockquote><a name="os_other"></a>
+<p><b>SQLITE_OS_OTHER=<i>&lt;0 or 1&gt;</i></b></p><blockquote><p>
+ The option causes SQLite to omit its built-in operating system interfaces
+ for Unix, Windows, and OS/2. The resulting library will have no default
+ <a href="c3ref/vfs.html">operating system interface</a>. Applications must use
+ <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> to register an appropriate interface before
+ using SQLite. Applications must also supply implementations for the
+ <a href="c3ref/initialize.html">sqlite3_os_init()</a> and <a href="c3ref/initialize.html">sqlite3_os_end()</a> interfaces. The usual practice
+ is for the supplied <a href="c3ref/initialize.html">sqlite3_os_init()</a> to invoke <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>.
+ SQLite will automatically invoke <a href="c3ref/initialize.html">sqlite3_os_init()</a> when it initializes.</p>
+
+<p> This option is typically used when building SQLite for an embedded
+ platform with a custom operating system.
+</p></blockquote><a name="secure_delete"></a>
+<p><b>SQLITE_SECURE_DELETE</b></p><blockquote><p>
+ This compile-time option changes the default setting of the
+ <a href="pragma.html#pragma_secure_delete">secure_delete pragma</a>. When this option is not used, secure_delete defaults
+ to off. When this option is present, secure_delete defaults to on.</p>
+
+<p> The secure_delete setting causes deleted content to be overwritten with
+ zeros. There is a small performance penalty since additional I/O
+ must occur. On the other hand, secure_delete can prevent fragments of
+ sensitive information from lingering in unused parts of the database file
+ after it has been deleted. See the documentation on the
+ <a href="pragma.html#pragma_secure_delete">secure_delete pragma</a> for additional information.
+</p></blockquote><a name="threadsafe"></a>
+<p><b>SQLITE_THREADSAFE=<i>&lt;0 or 1 or 2&gt;</i></b></p><blockquote><p>
+ This option controls whether or not code is included in SQLite to
+ enable it to operate safely in a multithreaded environment. The
+ default is SQLITE_THREADSAFE=1 which is safe for use in a multithreaded
+ environment. When compiled with SQLITE_THREADSAFE=0 all mutexing code
+ is omitted and it is unsafe to use SQLite in a multithreaded program.
+ When compiled with SQLITE_THREADSAFE=2, SQLite can be used in a multithreaded
+ program so long as no two threads attempt to use the same
+ <a href="c3ref/sqlite3.html">database connection</a> (or any <a href="c3ref/stmt.html">prepared statements</a> derived from
+ that database connection) at the same time.</p>
+
+<p> To put it another way, SQLITE_THREADSAFE=1 sets the default
+ <a href="threadsafe.html">threading mode</a> to Serialized. SQLITE_THREADSAFE=2 sets the default
+ <a href="threadsafe.html">threading mode</a> to Multi-threaded. And SQLITE_THREADSAFE=0 sets the
+ <a href="threadsafe.html">threading mode</a> to Single-threaded.</p>
+
+<p> The value of SQLITE_THREADSAFE can be determined at run-time
+ using the <a href="c3ref/threadsafe.html">sqlite3_threadsafe()</a> interface.</p>
+
+<p> When SQLite has been compiled with SQLITE_THREADSAFE=1 or
+ SQLITE_THREADSAFE=2 then the <a href="threadsafe.html">threading mode</a>
+ can be altered at run-time using the <a href="c3ref/config.html">sqlite3_config()</a> interface together
+ with one of these verbs:</p>
+
+<p> <ul>
+ <li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">SQLITE_CONFIG_SINGLETHREAD</a>
+ <li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">SQLITE_CONFIG_MULTITHREAD</a>
+ <li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">SQLITE_CONFIG_SERIALIZED</a>
+ </ul></p>
+
+<p> The <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a> and
+ <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_FULLMUTEX</a> flags to <a href="c3ref/open.html">sqlite3_open_v2()</a> can also be used
+ to adjust the <a href="threadsafe.html">threading mode</a> of individual <a href="c3ref/sqlite3.html">database connections</a>
+ at run-time.</p>
+
+<p> Note that when SQLite is compiled with SQLITE_THREADSAFE=0, the code
+ to make SQLite threadsafe is omitted from the build. When this occurs,
+ it is impossible to change the <a href="threadsafe.html">threading mode</a> at start-time or run-time.</p>
+
+<p> See the <a href="threadsafe.html">threading mode</a> documentation for additional information
+ on aspects of using SQLite in a multithreaded environment.
+</p></blockquote><a name="temp_store"></a>
+<p><b>SQLITE_TEMP_STORE=<i>&lt;0 through 3&gt;</i></b></p><blockquote><p>
+ This option controls whether temporary files are stored on disk or
+ in memory. The meanings for various settings of this compile-time
+ option are as follows:</p>
+
+<p> <table cellpadding="2" border="1">
+ <tr><th>SQLITE_TEMP_STORE</th><th>Meaning</th></tr>
+ <tr><td align="center">0</td><td>Always use temporary files</td></tr>
+ <tr><td align="center">1</td><td>Use files by default but allow the
+ <a href="pragma.html#pragma_temp_store">PRAGMA temp_store</a> command to override</td></tr>
+ <tr><td align="center">2</td><td>Use memory by default but allow the
+ <a href="pragma.html#pragma_temp_store">PRAGMA temp_store</a> command to override</td></tr>
+ <tr><td align="center">3</td><td>Always use memory</td></tr>
+ </table></p>
+
+<p> The default setting is 1.
+ Additional information can be found in <a href="tempfiles.html#tempstore">tempfiles.html</a>.
+</p></blockquote><a name="trace_size_limit"></a>
+<p><b>SQLITE_TRACE_SIZE_LIMIT=<i>N</i></b></p><blockquote><p>
+ If this macro is defined to a positive integer <i>N</i>, then the length of
+ strings and BLOB that are expanded into parameters in the output of
+ <a href="c3ref/profile.html">sqlite3_trace()</a> is limited to <i>N</i> bytes.
+</p></blockquote><a name="trusted_schema"></a>
+<p><b>SQLITE_TRUSTED_SCHEMA=<i>&lt;0 or 1&gt;</i></b></p><blockquote><p>
+ This macro determines the default value for the
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a> and <a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema</a> setting.
+ If no alternative is specified, the trusted-schema setting defaults
+ to ON (a value of 1) for legacy compatibility. However, for best
+ security, systems that implement
+ <a href="appfunc.html">application-defined SQL functions</a> and/or <a href="vtab.html">virtual tables</a> should
+ consider changing the default to OFF.
+</p></blockquote><a name="use_uri"></a>
+<p><b>SQLITE_USE_URI</b></p><blockquote><p>
+ This option causes the <a href="uri.html">URI filename</a> process logic to be enabled by
+ default.
+</p></blockquote>
+
+<a name="enablefeatures"></a>
+<h1 id="_options_to_enable_features_normally_turned_off"><span>7. </span> Options To Enable Features Normally Turned Off</h1>
+
+<a name="allow_uri_authority"></a>
+<p><b>SQLITE_ALLOW_URI_AUTHORITY</b></p><blockquote><p>
+ <a href="uri.html">URI filenames</a> normally throws an error if the authority section is
+ not either empty or "localhost". However, if SQLite is compiled with
+ the SQLITE_ALLOW_URI_AUTHORITY compile-time option, then the URI is
+ converted into a Uniform Naming Convention (UNC) filename and passed
+ down to the underlying operating system that way.
+ <p>
+ Some future versions of SQLite may change to enable this feature
+ by default.
+</p></blockquote><a name="allow_covering_index_scan"></a>
+<p><b>SQLITE_ALLOW_COVERING_INDEX_SCAN=<i>&lt;0 or 1&gt;</i></b></p><blockquote><p>
+ This C-preprocess macro determines the default setting of the
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigcoveringindexscan">SQLITE_CONFIG_COVERING_INDEX_SCAN</a> configuration setting. It defaults
+ to 1 (on) which means that covering indices are used for full table
+ scans where possible, in order to reduce I/O and improve performance.
+ However, the use of a covering index for a full scan will cause results
+ to appear in a different order from legacy, which could cause some
+ (incorrectly-coded) legacy applications to break. Hence, the covering
+ index scan option can be disabled at compile-time on systems that what
+ to minimize their risk of exposing errors in legacy applications.
+</p></blockquote><a name="enable_8_3_names"></a>
+<p><b>SQLITE_ENABLE_8_3_NAMES=<i>&lt;1 or 2&gt;</i></b></p><blockquote><p>
+ If this C-preprocessor macro is defined, then extra code is
+ included that allows SQLite to function on a filesystem that
+ only support 8+3 filenames. If the value of this macro is 1,
+ then the default behavior is to continue to use long filenames and
+ to only use 8+3 filenames if the
+ database connection is opened using <a href="uri.html">URI filenames</a> with
+ the "<tt>8_3_names=1</tt>" query parameter. If the value of
+ this macro is 2, then the use of 8+3 filenames becomes the default
+ but may be disabled on using the <tt>8_3_names=0</tt> query parameter.
+</p></blockquote><a name="enable_api_armor"></a>
+<p><b>SQLITE_ENABLE_API_ARMOR</b></p><blockquote><p>
+ When defined, this C-preprocessor macro activates extra code that
+ attempts to detect misuse of the SQLite API, such as passing in NULL
+ pointers to required parameters or using objects after they have been
+ destroyed.
+</p></blockquote><a name="enable_atomic_write"></a>
+<p><b>SQLITE_ENABLE_ATOMIC_WRITE</b></p><blockquote><p>
+ If this C-preprocessor macro is defined and if the
+ xDeviceCharacteristics method of <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object for
+ a database file reports (via one of the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC</a> bits)
+ that the filesystem supports atomic writes and if a transaction
+ involves a change to only a single page of the database file,
+ then the transaction commits with just a single write request of
+ a single page of the database and no rollback journal is created
+ or written. On filesystems that support atomic writes, this
+ optimization can result in significant speed improvements for
+ small updates. However, few filesystems support this capability
+ and the code paths that check for this capability slow down write
+ performance on systems that lack atomic write capability, so this
+ feature is disabled by default.
+</p></blockquote><a name="enable_batch_atomic_write"></a>
+<p><b>SQLITE_ENABLE_BATCH_ATOMIC_WRITE</b></p><blockquote><p>
+ This compile-time option enables SQLite to take advantage batch
+ atomic write capabilities in the underlying filesystem. As of
+ SQLite version 3.21.0 (2017-10-24) this is only supported on
+ <a href="https://en.wikipedia.org/wiki/F2FS">F2FS</a>. However, the interface
+ is implemented generically, using <a href="c3ref/file_control.html">sqlite3_file_control()</a> with
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> and <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a>
+ so the capability can be added to other filesystem times in the
+ future. When this option is enabled, SQLite automatically detects
+ that the underlying filesystem supports batch atomic writes, and
+ when it does so it avoids writing the <a href="lockingv3.html#rollback">rollback journal</a> for transaction
+ control. This can make transactions over twice as fast, while
+ simultaneously reducing wear on SSD storage devices.
+<p>
+ Future versions of SQLite might enable the batch-atomic-write
+ capability by default, at which point this compile-time option
+ will become superfluous.
+</p></blockquote><a name="enable_bytecode_vtab"></a>
+<p><b>SQLITE_ENABLE_BYTECODE_VTAB</b></p><blockquote><p>
+ This option enables the <a href="bytecodevtab.html">bytecode and tables_used virtual tables</a>.
+</p></blockquote><a name="enable_column_metadata"></a>
+<p><b>SQLITE_ENABLE_COLUMN_METADATA</b></p><blockquote><p>
+ When this C-preprocessor macro is defined, SQLite includes some
+ additional APIs that provide convenient access to meta-data about
+ tables and queries. The APIs that are enabled by this option are:</p>
+
+<p> <ul>
+ <li> <a href="c3ref/column_database_name.html">sqlite3_column_database_name()</a> </li>
+ <li> <a href="c3ref/column_database_name.html">sqlite3_column_database_name16()</a> </li>
+ <li> <a href="c3ref/column_database_name.html">sqlite3_column_table_name()</a> </li>
+ <li> <a href="c3ref/column_database_name.html">sqlite3_column_table_name16()</a> </li>
+ <li> <a href="c3ref/column_database_name.html">sqlite3_column_origin_name()</a> </li>
+ <li> <a href="c3ref/column_database_name.html">sqlite3_column_origin_name16()</a> </li>
+ </ul>
+</p></blockquote><a name="enable_dbpage_vtab"></a>
+<p><b>SQLITE_ENABLE_DBPAGE_VTAB</b></p><blockquote><p>
+ This option enables the <a href="dbpage.html">SQLITE_DBPAGE virtual table</a>.
+</p></blockquote><a name="enable_dbstat_vtab"></a>
+<p><b>SQLITE_ENABLE_DBSTAT_VTAB</b></p><blockquote><p>
+ This option enables the <a href="dbstat.html">dbstat virtual table</a>.
+</p></blockquote><a name="enable_deserialize"></a>
+<p><b>SQLITE_ENABLE_DESERIALIZE</b></p><blockquote><p>
+ This option was formerly used to enable
+ the <a href="c3ref/serialize.html">sqlite3_serialize()</a> and <a href="c3ref/deserialize.html">sqlite3_deserialize()</a>
+ interfaces. However, as of SQLite 3.36.0 (2021-06-18)
+ those interfaces are enabled by default and a new
+ compile-time option <a href="compile.html#omit_deserialize">SQLITE_OMIT_DESERIALIZE</a> is added
+ to omit them.
+</p></blockquote><a name="enable_explain_comments"></a>
+<p><b>SQLITE_ENABLE_EXPLAIN_COMMENTS</b></p><blockquote><p>
+ This option adds extra logic to SQLite that inserts comment text into the
+ output of <a href="lang_explain.html">EXPLAIN</a>. These extra comments use extra memory, thus
+ making <a href="c3ref/stmt.html">prepared statements</a> larger and very slightly slower, and so they are
+ turned off by default and in most application. But some applications, such
+ as the <a href="cli.html">command-line shell</a> for SQLite, value clarity of EXPLAIN output
+ over raw performance and so this compile-time option is available to them.
+ The SQLITE_ENABLE_EXPLAIN_COMMENTS compile-time option is also enabled
+ automatically if <a href="compile.html#debug">SQLITE_DEBUG</a> is enabled.
+</p></blockquote><a name="enable_fts3"></a>
+<p><b>SQLITE_ENABLE_FTS3</b></p><blockquote><p>
+ When this option is defined in the <a href="amalgamation.html">amalgamation</a>, version 3
+ of the full-text search engine is added to the build automatically.
+</p></blockquote><a name="enable_fts3_parenthesis"></a>
+<p><b>SQLITE_ENABLE_FTS3_PARENTHESIS</b></p><blockquote><p>
+ This option modifies the query pattern parser in FTS3 such that it
+ supports operators AND and NOT (in addition to the usual OR and NEAR)
+ and also allows query expressions to contain nested parenthesis.
+</p></blockquote><a name="enable_fts3_tokenizer"></a>
+<p><b>SQLITE_ENABLE_FTS3_TOKENIZER</b></p><blockquote><p>
+ This option enables the two-argument version of the <a href="fts3.html#f3tknzr">fts3_tokenizer()</a>
+ interface. The second argument to fts3_tokenizer() is suppose to be a
+ pointer to a function (encoded as a BLOB) that implements an
+ application defined tokenizer. If hostile actors are able to run
+ the two-argument version of fts3_tokenizer() with an arbitrary second
+ argument, they could use crash or take control of the process.
+ <p>
+ Because of security concerns, the two-argument fts3_tokenizer() feature
+ was disabled beginning with <a href="releaselog/3_11_0.html">Version 3.11.0</a> (2016-02-15)
+ unless this compile-time option is used.
+ <a href="releaselog/3_12_0.html">Version 3.12.0</a> (2016-03-29) added the
+ <a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>,1,0) interface
+ that activates the two-argument version of <a href="fts3.html#f3tknzr">fts3_tokenizer()</a>
+ for a specific <a href="c3ref/sqlite3.html">database connection</a> at run-time.
+</p></blockquote><a name="enable_fts4"></a>
+<p><b>SQLITE_ENABLE_FTS4</b></p><blockquote><p>
+ When this option is defined in the <a href="amalgamation.html">amalgamation</a>, versions 3 and 4
+ of the full-text search engine is added to the build automatically.
+</p></blockquote><a name="enable_fts5"></a>
+<p><b>SQLITE_ENABLE_FTS5</b></p><blockquote><p>
+ When this option is defined in the <a href="amalgamation.html">amalgamation</a>, versions 5
+ of the full-text search engine (<a href="fts5.html">fts5</a>) is added to the build automatically.
+</p></blockquote><a name="enable_geopoly"></a>
+<p><b>SQLITE_ENABLE_GEOPOLY</b></p><blockquote><p>
+ When this option is defined in the <a href="amalgamation.html">amalgamation</a>, the <a href="geopoly.html">Geopoly extension</a>
+ is included in the build.
+</p></blockquote><a name="enable_icu"></a>
+<p><b>SQLITE_ENABLE_ICU</b></p><blockquote><p>
+ This option causes the
+ <a href="http://www.icu-project.org/">International Components for Unicode</a>
+ or "ICU" extension to SQLite to be added to the build.
+</p></blockquote><a name="enable_iotrace"></a>
+<p><b>SQLITE_ENABLE_IOTRACE</b></p><blockquote><p>
+ When both the SQLite core and the <a href="cli.html">Command Line Interface</a> (CLI) are both
+ compiled with this option, then the CLI provides an extra command
+ named ".iotrace" that provides a low-level log of I/O activity.
+ This option is experimental and may be discontinued in a future release.
+</p></blockquote><a name="enable_math_functions"></a>
+<p><b>SQLITE_ENABLE_MATH_FUNCTIONS</b></p><blockquote><p>
+ This macro enables the <a href="lang_mathfunc.html">built-in SQL math functions</a>. This option
+ is automatically added to the Makefile by the configure script on unix platforms,
+ unless the --disable-math option is used.
+ This option is also included on Windows builds using the
+ "Makefile.msc" makefile for nmake.
+</p></blockquote><a name="enable_json1"></a>
+<p><b>SQLITE_ENABLE_JSON1</b></p><blockquote><p>
+ This compile-time option is a no-op. Prior to SQLite version 3.38.0
+ (2022-02-22), it was necessary to compile with this option in order
+ to include the <a href="json1.html">JSON SQL functions</a> in the build. However, beginning
+ with SQLite version 3.38.0, those functions are included by default.
+ Use the <a href="compile.html#omit_json">-DSQLITE_OMIT_JSON</a> option to omit them.
+</p></blockquote><a name="enable_locking_style"></a>
+<p><b>SQLITE_ENABLE_LOCKING_STYLE</b></p><blockquote><p>
+ This option enables additional logic in the OS interface layer for
+ Mac OS X. The additional logic attempts to determine the type of the
+ underlying filesystem and choose and alternative locking strategy
+ that works correctly for that filesystem type. Five locking strategies
+ are available:</p>
+
+<p> <ul>
+ <li> POSIX locking style. This is the default locking style and the
+ style used by other (non Mac OS X) Unixes. Locks are obtained and
+ released using the fcntl() system call.</p>
+
+<p> <li> AFP locking style. This locking style is used for network file
+ systems that use the AFP (Apple Filing Protocol) protocol. Locks
+ are obtained by calling the library function _AFPFSSetLock().</p>
+
+<p> <li> Flock locking style. This is used for file-systems that do not
+ support POSIX locking style. Locks are obtained and released using
+ the flock() system call.</p>
+
+<p> <li> Dot-file locking style. This locking style is used when neither
+ flock nor POSIX locking styles are supported by the file system.
+ Database locks are obtained by creating and entry in the file-system
+ at a well-known location relative to the database file (a "dot-file")
+ and relinquished by deleting the same file.</p>
+
+<p> <li> No locking style. If none of the above can be supported, this
+ locking style is used. No database locking mechanism is used. When
+ this system is used it is not safe for a single database to be
+ accessed by multiple clients.
+ </ul></p>
+
+<p> Additionally, five extra <a href="vfs.html">VFS</a> implementations are provided as well as the
+ default. By specifying one of the extra VFS implementations
+ when calling <a href="c3ref/open.html">sqlite3_open_v2()</a>, an application may bypass the file-system
+ detection logic and explicitly select one of the above locking styles. The
+ five extra <a href="vfs.html">VFS</a> implementations are called "unix-posix", "unix-afp",
+ "unix-flock", "unix-dotfile" and "unix-none".
+</p></blockquote><a name="enable_memory_management"></a>
+<p><b>SQLITE_ENABLE_MEMORY_MANAGEMENT</b></p><blockquote><p>
+ This option adds extra logic to SQLite that allows it to release unused
+ memory upon request. This option must be enabled in order for the
+ <a href="c3ref/release_memory.html">sqlite3_release_memory()</a> interface to work. If this compile-time
+ option is not used, the <a href="c3ref/release_memory.html">sqlite3_release_memory()</a> interface is a
+ no-op.
+</p></blockquote><a name="enable_memsys3"></a>
+<p><b>SQLITE_ENABLE_MEMSYS3</b></p><blockquote><p>
+ This option includes code in SQLite that implements an alternative
+ memory allocator. This alternative memory allocator is only engaged
+ when the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a> option to <a href="c3ref/config.html">sqlite3_config()</a> is used to
+ supply a large chunk of memory from which all memory allocations are
+ taken.
+ The MEMSYS3 memory allocator uses a hybrid allocation algorithm
+ patterned after dlmalloc(). Only one of SQLITE_ENABLE_MEMSYS3 and
+ SQLITE_ENABLE_MEMSYS5 may be enabled at once.
+</p></blockquote><a name="enable_memsys5"></a>
+<p><b>SQLITE_ENABLE_MEMSYS5</b></p><blockquote><p>
+ This option includes code in SQLite that implements an alternative
+ memory allocator. This alternative memory allocator is only engaged
+ when the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a> option to <a href="c3ref/config.html">sqlite3_config()</a> is used to
+ supply a large chunk of memory from which all memory allocations are
+ taken.
+ The MEMSYS5 module rounds all allocations up to the next power
+ of two and uses a first-fit, buddy-allocator algorithm
+ that provides strong guarantees against fragmentation and breakdown
+ subject to certain operating constraints.
+</p></blockquote><a name="enable_normalize"></a>
+<p><b>SQLITE_ENABLE_NORMALIZE</b></p><blockquote><p>
+ This option includes the <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> API.
+</p></blockquote><a name="enable_null_trim"></a>
+<p><b>SQLITE_ENABLE_NULL_TRIM</b></p><blockquote><p>
+ This option enables an optimization that omits NULL columns at
+ the ends of rows, for a space savings on disk.
+ <p>
+ Databases generated with this option enabled are not readable
+ by SQLite version 3.1.6 (2005-03-17) and earlier. Also,
+ databases generated with this option enabled are prone to
+ triggering the
+ <a href="https://www.sqlite.org/src/info/e6e962d6b0f06f46e">e6e962d6b0f06f46</a>
+ bug in the <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface. For those reasons,
+ this optimization is disabled by default. However, this optimization
+ may be enabled by default in a future release of SQLite.
+</p></blockquote><a name="enable_offset_sql_func"></a>
+<p><b>SQLITE_ENABLE_OFFSET_SQL_FUNC</b></p><blockquote><p>
+ This option enables support for the <a href="lang_corefunc.html#sqlite_offset">sqlite_offset(X)</a> SQL function.
+ <p>
+ The <a href="lang_corefunc.html#sqlite_offset">sqlite_offset(X)</a> SQL function requires a new interface on the
+ B-tree storage engine, a new opcode in the <a href="opcode.html">virtual machine</a> that
+ runs SQL statements, and a new conditional in a critical path of the
+ code generator. To avoid that overhead in applications that do not
+ need the utility of sqlite_offset(X), the function is disabled by
+ default.
+</p></blockquote><a name="enable_preupdate_hook"></a>
+<p><b>SQLITE_ENABLE_PREUPDATE_HOOK</b></p><blockquote><p>
+ This option enables
+ <a href="c3ref/preupdate_blobwrite.html">several new APIs</a> that provide callbacks
+ prior to any change to a <a href="rowidtable.html">rowid table</a>. The callbacks can be used
+ to record the state of the row before the change occurs.
+ <p>The action of the preupdate hook is similar to the
+ <a href="c3ref/update_hook.html">update hook</a> except that the callback is
+ invoked before the change, not afterwards, and the preupdate
+ hook interfaces are omitted unless this compile-time option is
+ used.
+ <p>The preupdate hook interfaces were originally added to
+ support the <a href="sessionintro.html">session</a> extension.
+</p></blockquote><a name="enable_qpsg"></a>
+<p><b>SQLITE_ENABLE_QPSG</b></p><blockquote><p>
+ This option causes the <a href="queryplanner-ng.html#qpstab">query planner stability guarantee</a> (QPSG) to
+ be on by default. Normally the QPSG is off and must be activated
+ at run-time using the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">SQLITE_DBCONFIG_ENABLE_QPSG</a> option to the
+ <a href="c3ref/db_config.html">sqlite3_db_config()</a> interface.
+</p></blockquote><a name="enable_rbu"></a>
+<p><b>SQLITE_ENABLE_RBU</b></p><blockquote><p>
+ Enable the code the implements the <a href="rbu.html">RBU extension</a>.
+</p></blockquote><a name="enable_rtree"></a>
+<p><b>SQLITE_ENABLE_RTREE</b></p><blockquote><p>
+ This option causes SQLite to include support for the
+ <a href="rtree.html">R*Tree index extension</a>.
+</p></blockquote><a name="enable_session"></a>
+<p><b>SQLITE_ENABLE_SESSION</b></p><blockquote><p>
+ This option enables the <a href="sessionintro.html">session extension</a>.
+</p></blockquote><a name="enable_snapshot"></a>
+<p><b>SQLITE_ENABLE_SNAPSHOT</b></p><blockquote><p>
+ This option enables the code to support the <a href="c3ref/snapshot.html">sqlite3_snapshot</a> object
+ and its related interfaces:
+ <ul>
+ <li> <a href="c3ref/snapshot_get.html">sqlite3_snapshot_get()</a> (constructor)
+ <li> <a href="c3ref/snapshot_free.html">sqlite3_snapshot_free()</a> (destructor)
+ <li> <a href="c3ref/snapshot_open.html">sqlite3_snapshot_open()</a>
+ <li> <a href="c3ref/snapshot_cmp.html">sqlite3_snapshot_cmp()</a>
+ <li> <a href="c3ref/snapshot_recover.html">sqlite3_snapshot_recover()</a>
+ </ul>
+</p></blockquote><a name="enable_sorter_references"></a>
+<p><b>SQLITE_ENABLE_SORTER_REFERENCES</b></p><blockquote><p>
+ This option activates an optimization that reduces the memory required
+ by the sorter at the cost of doing additional B-tree lookups after
+ the sort has occurred.
+ <p>
+ The default sorting procedure is to gather all information that will
+ ultimately be output into a "record" and pass that complete record
+ to the sorter. But in some cases, for example if some of the output
+ columns consists of large BLOB values, the size of the each record
+ can be large, which means that the sorter has to either use more memory,
+ and/or write more content to temporary storage.
+ <p>
+ When SQLITE_ENABLE_SORTER_REFERENCES is enabled, the records passed to
+ the sorter often contain only a <a href="lang_createtable.html#rowid">ROWID</a> value. Such records are much
+ smaller. This means the sorter has much less "payload" to deal with and
+ can run faster. After sorting has occurred, the ROWID is used to look up
+ the output column values in the original table. That requires another
+ search into the table, and could potentially result in a slowdown. Or,
+ it might be a performance win, depending on how large the values are.
+ <p>
+ Even when the SQLITE_ENABLE_SORTER_REFERENCES compile-time option is on,
+ sorter references are still disabled by default. To use sorter references,
+ the application must set a sorter reference size threshold using the
+ <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsorterrefsize">SQLITE_CONFIG_SORTERREF_SIZE</a>) interface at start-time.
+ <p>
+ Because the SQLite developers do not know whether the
+ SQLITE_ENABLE_SORTER_REFERENCES option will help or hurt performance,
+ it is disabled by default at this time (2018-05-04). It might be enabled
+ by default in some future release, depending on what is learned about its
+ impact on performance.
+</p></blockquote><a name="enable_stmt_scanstatus"></a>
+<p><b>SQLITE_ENABLE_STMT_SCANSTATUS</b></p><blockquote><p>
+ This option enables the <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface. The
+ <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface is normally omitted from the build
+ because it imposes a small performance penalty, even on statements that
+ do not use the feature.
+</p></blockquote><a name="enable_stmtvtab"></a>
+<p><b>SQLITE_ENABLE_STMTVTAB</b></p><blockquote><p>
+ This compile-time option enables the <a href="stmt.html">SQLITE_STMT virtual table</a> logic.
+</p></blockquote><a name="rtree_int_only"></a>
+<p><b>SQLITE_RTREE_INT_ONLY</b></p><blockquote><p>
+ This compile-time option is deprecated and untested.
+</p></blockquote><a name="enable_sqllog"></a>
+<p><b>SQLITE_ENABLE_SQLLOG</b></p><blockquote><p>
+ This option enables extra code (especially the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsqllog">SQLITE_CONFIG_SQLLOG</a>
+ option to <a href="c3ref/config.html">sqlite3_config()</a>) that can be used to create logs of all
+ SQLite processing performed by an application. These logs can be useful
+ in doing off-line analysis of the behavior of an application, and especially
+ for performance analysis. In order for the SQLITE_ENABLE_SQLLOG option to
+ be useful, some extra code is required. The
+ <a href="http://www.sqlite.org/src/doc/trunk/src/test_sqllog.c">"test_sqllog.c"</a>
+ source code
+ file in the SQLite source tree is a working example of the required extra
+ code. On unix and windows systems, a developer can append the text of the
+ "test_sqllog.c" source code file to the end of an "sqlite3.c" amalgamation,
+ recompile the application using the -DSQLITE_ENABLE_SQLLOG option, then
+ control logging using environment variables. See the header comment on
+ the "test_sqllog.c" source file for additional detail.
+</p></blockquote><a name="enable_stat2"></a>
+<p><b>SQLITE_ENABLE_STAT2</b></p><blockquote><p>
+ This option used to cause the <a href="lang_analyze.html">ANALYZE</a> command to collect
+ index histogram data in the <b>sqlite_stat2</b> table. But that
+ functionality was superceded by <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> as of
+ SQLite <a href="releaselog/3_7_9.html">version 3.7.9</a> (2011-11-01).
+ The SQLITE_ENABLE_STAT2 compile-time option
+ is now a no-op.
+</p></blockquote><a name="enable_stat3"></a>
+<p><b>SQLITE_ENABLE_STAT3</b></p><blockquote><p>
+ This option used to cause the <a href="lang_analyze.html">ANALYZE</a> command to collect
+ index histogram data in the <b>sqlite_stat3</b> table. But that
+ functionality was superceded by <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> as of
+ SQLite <a href="releaselog/3_8_1.html">version 3.8.1</a> (2013-10-17).
+ The SQLITE_ENABLE_STAT3 compile-time option
+ continued to be supported through <a href="releaselog/3_29_0.html">version 3.29.0</a> (2019-07-10)
+ but has now become a no-op.
+ <p>
+</p></blockquote><a name="enable_stat4"></a>
+<p><b>SQLITE_ENABLE_STAT4</b></p><blockquote><p>
+ This option adds additional logic to the <a href="lang_analyze.html">ANALYZE</a> command and to
+ the <a href="optoverview.html">query planner</a> that can help SQLite to chose a better query plan
+ under certain situations. The <a href="lang_analyze.html">ANALYZE</a> command is enhanced to collect
+ histogram data from all columns of every index and store that data
+ in the <a href="fileformat2.html#stat4tab">sqlite_stat4</a> table. The query planner will then use the
+ histogram data to help it make better index choices. The downside of
+ this compile-time option is that it violates the
+ <a href="queryplanner-ng.html#qpstab">query planner stability guarantee</a> making it more difficult to ensure
+ consistent performance in mass-produced applications.
+ <p>
+ SQLITE_ENABLE_STAT4 is an enhancement of <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a>. STAT3
+ only recorded histogram data for the left-most column of each index
+ whereas the STAT4 enhancement records histogram data from all columns
+ of each index.
+ The <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> compile-time option has become a no-op.
+</p></blockquote><a name="enable_tree_explain"></a>
+<p><b>SQLITE_ENABLE_TREE_EXPLAIN</b></p><blockquote><p>
+ This compile-time option is no longer used.
+</p></blockquote><a name="enable_update_delete_limit"></a>
+<p><b>SQLITE_ENABLE_UPDATE_DELETE_LIMIT</b></p><blockquote><p>
+ This option enables an optional ORDER BY and LIMIT clause on
+ <a href="lang_update.html">UPDATE</a> and <a href="lang_delete.html">DELETE</a> statements.</p>
+
+<p> <p>If this option is defined, then it must also be
+ defined when using the <a href="lemon.html">Lemon parser generator</a> tool to generate a parse.c
+ file. Because of this, this option may only be used when the library is built
+ from source, not from the <a href="amalgamation.html">amalgamation</a> or from the collection of
+ pre-packaged C files provided for non-Unix like platforms on the website.
+ </p>
+</p></blockquote><a name="enable_unknown_sql_function"></a>
+<p><b>SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</b></p><blockquote><p>
+ When the SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION compile-time option is
+ activated, SQLite will suppress "unknown function" errors when running
+ an <a href="lang_explain.html">EXPLAIN</a> or <a href="eqp.html">EXPLAIN QUERY PLAN</a>. Instead of throwing an error,
+ SQLite will insert a substitute no-op function named "unknown()".
+ The substitution of "unknown()" in place of unrecognized functions
+ only occurs on <a href="lang_explain.html">EXPLAIN</a> and <a href="eqp.html">EXPLAIN QUERY PLAN</a>, not on ordinary
+ statements.
+ <p>
+ When used in the <a href="cli.html">command-line shell</a>, the
+ SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION feature allows SQL text that contains
+ application-defined functions to be pasted into the shell for
+ analysis and debugging without having to create and load an
+ extension that implements the application-defined functions.
+</p></blockquote><a name="enable_unlock_notify"></a>
+<p><b>SQLITE_ENABLE_UNLOCK_NOTIFY</b></p><blockquote><p>
+ This option enables the <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> interface and
+ its associated functionality. See the documentation titled
+ <a href="unlock_notify.html">Using the SQLite Unlock Notification Feature</a> for additional
+ information.
+</p></blockquote><a name="introspection_pragmas"></a>
+<p><b>SQLITE_INTROSPECTION_PRAGMAS</b></p><blockquote><p>
+ This option is obsolete. It used to enable some extra
+ some extra PRAGMA statements such as
+ <a href="pragma.html#pragma_function_list">PRAGMA function_list</a>, <a href="pragma.html#pragma_module_list">PRAGMA module_list</a>, and
+ <a href="pragma.html#pragma_pragma_list">PRAGMA pragma_list</a>, but those pragmas are now all
+ enabled by default. See <a href="compile.html#omit_introspection_pragmas">SQLITE_OMIT_INTROSPECTION_PRAGMAS</a>.
+</p></blockquote><a name="soundex"></a>
+<p><b>SQLITE_SOUNDEX</b></p><blockquote><p>
+ This option enables the <a href="lang_corefunc.html#soundex">soundex() SQL function</a>.
+</p></blockquote><a name="use_alloca"></a>
+<p><b>SQLITE_USE_ALLOCA</b></p><blockquote><p>
+ If this option is enabled, then the alloca() memory allocator will be
+ used in a few situations where it is appropriate. This results in a slightly
+ smaller and faster binary. The SQLITE_USE_ALLOCA compile-time only
+ works, of course, on systems that support alloca().
+</p></blockquote><a name="use_fcntl_trace"></a>
+<p><b>SQLITE_USE_FCNTL_TRACE</b></p><blockquote><p>
+ This option causes SQLite to issue extra <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace">SQLITE_FCNTL_TRACE</a> file controls
+ to provide supplementary information to the VFS. The "vfslog.c" extension
+ makes use of this to provide enhanced logs of VFS activity.
+</p></blockquote><a name="have_zlib"></a>
+<p><b>SQLITE_HAVE_ZLIB</b></p><blockquote><p>
+ This option causes some extensions to link against the
+ <a href="https://zlib.net">zlib compression library</a>.
+ <p>
+ This option has no effect on the SQLite core. It is only used by extensions.
+ This is option is necessary for the compression and decompression
+ functions that are part of <a href="sqlar.html">SQL Archive</a> support in the
+ <a href="cli.html">command-line shell</a>.
+ <p>
+ When compiling with this option, it will normally
+ be necessary to add a linker option to include the zlib library in the
+ build. Normal this option is "-lz" but might be different on different
+ systems.
+ <p>
+ When building with MSVC on Windows systems, one can put the zlib source
+ code in the compat/zlib subdirectory of the source tree and then add
+ the USE_ZLIB=1 option to the nmake command to cause the The Makefile.msc
+ to automatically build and use an appropriate zlib library implementation.
+</p></blockquote><a name="yytrackmaxstackdepth"></a>
+<p><b>YYTRACKMAXSTACKDEPTH</b></p><blockquote><p>
+ This option causes the LALR(1) parser stack depth to be tracked
+ and reported using the <a href="c3ref/status.html">sqlite3_status</a>(<a href="c3ref/c_status_malloc_count.html#sqlitestatusparserstack">SQLITE_STATUS_PARSER_STACK</a>,...)
+ interface. SQLite's LALR(1) parser has a fixed stack depth
+ (determined at compile-time using the <a href="compile.html#yystackdepth">YYSTACKDEPTH</a> options).
+ This option can be used to help determine if an application is
+ getting close to exceeding the maximum LALR(1) stack depth.
+</p></blockquote>
+
+<a name="disablefeatures"></a>
+<h1 id="_options_to_disable_features_normally_turned_on"><span>8. </span> Options To Disable Features Normally Turned On</h1>
+
+<a name="disable_lfs"></a>
+<p><b>SQLITE_DISABLE_LFS</b></p><blockquote><p>
+ If this C-preprocessor macro is defined, large file support
+ is disabled.
+</p></blockquote><a name="disable_dirsync"></a>
+<p><b>SQLITE_DISABLE_DIRSYNC</b></p><blockquote><p>
+ If this C-preprocessor macro is defined, directory syncs
+ are disabled. SQLite typically attempts to sync the parent
+ directory when a file is deleted to ensure the directory
+ entries are updated immediately on disk.
+</p></blockquote><a name="disable_fts3_unicode"></a>
+<p><b>SQLITE_DISABLE_FTS3_UNICODE</b></p><blockquote><p>
+ If this C-preprocessor macro is defined, the <a href="fts3.html#unicode61">unicode61</a> tokenizer
+ in <a href="fts3.html">FTS3</a> is omitted from the build and is unavailable to
+ applications.
+</p></blockquote><a name="disable_fts4_deferred"></a>
+<p><b>SQLITE_DISABLE_FTS4_DEFERRED</b></p><blockquote><p>
+ If this C-preprocessor macro disables the "deferred token" optimization
+ in <a href="fts3.html#fts4">FTS4</a>. The "deferred token" optimization avoids loading massive
+ posting lists for terms that are in most documents of the collection
+ and instead simply scans for those tokens in the document source. <a href="fts3.html#fts4">FTS4</a>
+ should get exactly the same answer both with and without this optimization.
+</p></blockquote><a name="disable_intrinsic"></a>
+<p><b>SQLITE_DISABLE_INTRINSIC</b></p><blockquote><p>
+ This option disables the use of compiler-specific built-in functions
+ such as __builtin_bswap32() and __builtin_add_overflow() in GCC and Clang,
+ or _byteswap_ulong() and _ReadWriteBarrier() with MSVC.
+</p></blockquote>
+
+<a name="omitfeatures"></a>
+
+<h1 id="_options_to_omit_features"><span>9. </span> Options To Omit Features</h1>
+
+<p>The following options can be used to
+<a href="footprint.html">reduce the size of the compiled library</a>
+by omitting unused features. This is probably only useful
+in embedded systems where space is especially tight, as even with all
+features included the SQLite library is relatively small. Don't forget
+to tell your compiler to optimize for binary size! (the -Os option if
+using GCC). Telling your compiler to optimize for size usually has
+a much larger impact on library footprint than employing any of these
+compile-time options. You should also verify that
+<a href="#debugoptions">debugging options</a> are disabled.</p>
+
+<p>The macros in this section do not require values. The following
+compilation switches all have the same effect:<br>
+-DSQLITE_OMIT_ALTERTABLE<br>
+-DSQLITE_OMIT_ALTERTABLE=1<br>
+-DSQLITE_OMIT_ALTERTABLE=0
+</p>
+
+<p>If any of these options are defined, then the same set of SQLITE_OMIT_*
+options must also be defined when using the <a href="lemon.html">Lemon parser generator</a>
+tool to generate the
+parse.c file and when compiling the 'mkkeywordhash' tool which generates
+the keywordhash.h file.
+Because of this, these options may only be used when the library is built
+from canonical source, not from the <a href="amalgamation.html">amalgamation</a>.
+Some SQLITE_OMIT_* options might work, or appear to work, when used with
+the <a href="amalgamation.html">amalgamation</a>. But this is not guaranteed. In general, always compile
+from canonical sources in order to take advantage of SQLITE_OMIT_* options.
+</p>
+
+<blockquote>
+<i><b>Important Note:</b> The SQLITE_OMIT_* options may not work with the
+<a href="amalgamation.html">amalgamation</a>. SQLITE_OMIT_* compile-time
+options usually work correctly only when SQLite is built from canonical
+source files.
+</i>
+</blockquote>
+
+
+<p>Special versions of the SQLite amalgamation that do work with a
+predetermined set of SQLITE_OMIT_* options can be generated. To do so,
+make a copy of the Makefile.linux-gcc makefile template in the canonical
+source code distribution. Change the name of your copy to simply "Makefile".
+Then edit "Makefile" to set up appropriate compile-time options. Then
+type:
+</p><div class="codeblock"><pre>make clean; make sqlite3.c
+</pre></div>
+<p>The resulting "sqlite3.c" amalgamation code file (and its associated
+header file "sqlite3.h") can then be moved to a non-unix platform
+for final compilation using a native compiler.</p>
+
+<p>The SQLITE_OMIT_* options are unsupported. By this we mean that
+an SQLITE_OMIT_* option that omits code from the build in the current
+release might become a no-op in the next release. Or the other way around:
+an SQLITE_OMIT_* that is a no-op in the current release might cause code
+to be excluded in the next release. Also, not all SQLITE_OMIT_* options
+are tested. Some SQLITE_OMIT_* options might cause SQLite to malfunction
+and/or provide incorrect answers.
+
+</p><blockquote>
+<i><b>Important Note:</b>
+The SQLITE_OMIT_* compile-time options are mostly unsupported.
+</i></blockquote>
+
+<p>The following are the available OMIT options:
+
+<a name="omit_altertable"></a>
+<p><b>SQLITE_OMIT_ALTERTABLE</b></p><blockquote><p>
+ When this option is defined, the
+ <a href="lang_altertable.html">ALTER TABLE</a> command is not included in the
+ library. Executing an <a href="lang_altertable.html">ALTER TABLE</a> statement causes a parse error.
+</p></blockquote><a name="omit_analyze"></a>
+<p><b>SQLITE_OMIT_ANALYZE</b></p><blockquote><p>
+ When this option is defined, the <a href="lang_analyze.html">ANALYZE</a> command is omitted from
+ the build.
+</p></blockquote><a name="omit_attach"></a>
+<p><b>SQLITE_OMIT_ATTACH</b></p><blockquote><p>
+ When this option is defined, the <a href="lang_attach.html">ATTACH</a> and <a href="lang_detach.html">DETACH</a> commands are
+ omitted from the build.
+</p></blockquote><a name="omit_authorization"></a>
+<p><b>SQLITE_OMIT_AUTHORIZATION</b></p><blockquote><p>
+ Defining this option omits the authorization callback feature from the
+ library. The <a href="c3ref/set_authorizer.html">sqlite3_set_authorizer()</a> API function is not present
+ in the library.
+</p></blockquote><a name="omit_autoincrement"></a>
+<p><b>SQLITE_OMIT_AUTOINCREMENT</b></p><blockquote><p>
+ This option is omits the <a href="autoinc.html">AUTOINCREMENT</a> feature.
+ When this is macro is defined, columns declared as
+ "<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> AUTOINCREMENT"
+ behave in the same way as columns declared as "<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>" when a
+ NULL is inserted. The sqlite_sequence system table is neither created, nor
+ respected if it already exists.
+</p></blockquote><a name="omit_autoinit"></a>
+<p><b>SQLITE_OMIT_AUTOINIT</b></p><blockquote><p>
+ For backwards compatibility with older versions of SQLite that lack
+ the <a href="c3ref/initialize.html">sqlite3_initialize()</a> interface, the <a href="c3ref/initialize.html">sqlite3_initialize()</a> interface
+ is called automatically upon entry to certain key interfaces such as
+ <a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>, and <a href="c3ref/mprintf.html">sqlite3_mprintf()</a>.
+ The overhead of invoking <a href="c3ref/initialize.html">sqlite3_initialize()</a> automatically in this
+ way may be omitted by building SQLite with the SQLITE_OMIT_AUTOINIT
+ C-preprocessor macro. When built using SQLITE_OMIT_AUTOINIT, SQLite
+ will not automatically initialize itself and the application is required
+ to invoke <a href="c3ref/initialize.html">sqlite3_initialize()</a> directly prior to beginning use of the
+ SQLite library.
+</p></blockquote><a name="omit_automatic_index"></a>
+<p><b>SQLITE_OMIT_AUTOMATIC_INDEX</b></p><blockquote><p>
+ This option is used to omit the
+ <a href="optoverview.html#autoindex">automatic indexing</a> functionality.
+ See also: <a href="compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a>.
+</p></blockquote><a name="omit_autoreset"></a>
+<p><b>SQLITE_OMIT_AUTORESET</b></p><blockquote><p>
+ By default, the <a href="c3ref/step.html">sqlite3_step()</a> interface will automatically invoke
+ <a href="c3ref/reset.html">sqlite3_reset()</a> to reset the <a href="c3ref/stmt.html">prepared statement</a> if necessary. This
+ compile-time option changes that behavior so that <a href="c3ref/step.html">sqlite3_step()</a> will
+ return <a href="rescode.html#misuse">SQLITE_MISUSE</a> if it called again after returning anything other
+ than <a href="rescode.html#row">SQLITE_ROW</a>, <a href="rescode.html#busy">SQLITE_BUSY</a>, or <a href="rescode.html#locked">SQLITE_LOCKED</a> unless there was an
+ intervening call to <a href="c3ref/reset.html">sqlite3_reset()</a>.</p>
+
+<p> In SQLite <a href="releaselog/3_6_23_1.html">version 3.6.23.1</a> (2010-03-26)
+ and earlier, <a href="c3ref/step.html">sqlite3_step()</a> used to always
+ return <a href="rescode.html#misuse">SQLITE_MISUSE</a> if it was invoked again after returning anything
+ other than <a href="rescode.html#row">SQLITE_ROW</a> without an intervening call to <a href="c3ref/reset.html">sqlite3_reset()</a>.
+ This caused problems on some poorly written smartphone applications which
+ did not correctly handle the <a href="rescode.html#locked">SQLITE_LOCKED</a> and <a href="rescode.html#busy">SQLITE_BUSY</a> error
+ returns. Rather than fix the many defective smartphone applications,
+ the behavior of SQLite was changed in 3.6.23.2 to automatically reset
+ the prepared statement. But that changed caused issues in other
+ improperly implemented applications that were actually looking
+ for an <a href="rescode.html#misuse">SQLITE_MISUSE</a> return to terminate their query loops. (Anytime
+ an application gets an SQLITE_MISUSE error code from SQLite, that means the
+ application is misusing the SQLite interface and is thus incorrectly
+ implemented.) The SQLITE_OMIT_AUTORESET interface was added to SQLite
+ <a href="releaselog/3_7_5.html">version 3.7.5</a> (2011-02-01) in an effort to get all of the (broken)
+ applications to work again without having to actually fix the applications.
+</p></blockquote><a name="omit_autovacuum"></a>
+<p><b>SQLITE_OMIT_AUTOVACUUM</b></p><blockquote><p>
+ If this option is defined, the library cannot create or write to
+ databases that support <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a>.
+ Executing a <a href="pragma.html#pragma_auto_vacuum">PRAGMA auto_vacuum</a> statement is not an error
+ (since unknown PRAGMAs are silently ignored), but does not return a value
+ or modify the auto-vacuum flag in the database file. If a database that
+ supports auto-vacuum is opened by a library compiled with this option, it
+ is automatically opened in read-only mode.
+</p></blockquote><a name="omit_between_optimization"></a>
+<p><b>SQLITE_OMIT_BETWEEN_OPTIMIZATION</b></p><blockquote><p>
+ This option disables the use of indices with WHERE clause terms
+ that employ the BETWEEN operator.
+</p></blockquote><a name="omit_blob_literal"></a>
+<p><b>SQLITE_OMIT_BLOB_LITERAL</b></p><blockquote><p>
+ When this option is defined, it is not possible to specify a blob in
+ an SQL statement using the X'ABCD' syntax.
+</p></blockquote><a name="omit_btreecount"></a>
+<p><b>SQLITE_OMIT_BTREECOUNT</b></p><blockquote><p>
+ This option is no longer used for anything. It is a no-op.
+</p></blockquote><a name="omit_builtin_test"></a>
+<p><b>SQLITE_OMIT_BUILTIN_TEST</b></p><blockquote><p>
+ This compile-time option has been renamed to <a href="compile.html#untestable">SQLITE_UNTESTABLE</a>.
+</p></blockquote><a name="omit_case_sensitive_like_pragma"></a>
+<p><b>SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA</b></p><blockquote><p>
+ This compile-time option disables the <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a>
+ command.
+</p></blockquote><a name="omit_cast"></a>
+<p><b>SQLITE_OMIT_CAST</b></p><blockquote><p>
+ This option causes SQLite to omit support for the CAST operator.
+</p></blockquote><a name="omit_check"></a>
+<p><b>SQLITE_OMIT_CHECK</b></p><blockquote><p>
+ This option causes SQLite to omit support for CHECK constraints.
+ The parser will still accept CHECK constraints in SQL statements,
+ they will just not be enforced.
+</p></blockquote><a name="omit_compileoption_diags"></a>
+<p><b>SQLITE_OMIT_COMPILEOPTION_DIAGS</b></p><blockquote><p>
+ This option is used to omit the compile-time option diagnostics available
+ in SQLite, including the <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> and
+ <a href="c3ref/compileoption_get.html">sqlite3_compileoption_get()</a> C/C++ functions, the
+ <a href="lang_corefunc.html#sqlite_compileoption_used">sqlite_compileoption_used()</a> and <a href="lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a> SQL functions,
+ and the <a href="pragma.html#pragma_compile_options">compile_options pragma</a>.
+</p></blockquote><a name="omit_complete"></a>
+<p><b>SQLITE_OMIT_COMPLETE</b></p><blockquote><p>
+ This option causes the <a href="c3ref/complete.html">sqlite3_complete()</a> and <a href="c3ref/complete.html">sqlite3_complete16()</a>
+ interfaces to be omitted.
+</p></blockquote><a name="omit_compound_select"></a>
+<p><b>SQLITE_OMIT_COMPOUND_SELECT</b></p><blockquote><p>
+ This option is used to omit the compound <a href="lang_select.html">SELECT</a> functionality.
+ <a href="lang_select.html">SELECT</a> statements that use the
+ UNION, UNION ALL, INTERSECT or EXCEPT compound SELECT operators will
+ cause a parse error.</p>
+
+<p> An <a href="lang_insert.html">INSERT</a> statement with multiple values in the VALUES clause is
+ implemented internally as a compound SELECT. Hence, this option also
+ disables the ability to insert more than a single row using an
+ INSERT INTO ... VALUES ... statement.
+</p></blockquote><a name="omit_cte"></a>
+<p><b>SQLITE_OMIT_CTE</b></p><blockquote><p>
+ This option causes support for <a href="lang_with.html">common table expressions</a> to be omitted.
+</p></blockquote><a name="omit_datetime_funcs"></a>
+<p><b>SQLITE_OMIT_DATETIME_FUNCS</b></p><blockquote><p>
+ If this option is defined, SQLite's built-in date and time manipulation
+ functions are omitted. Specifically, the SQL functions julianday(), date(),
+ time(), datetime() and strftime() are not available. The default column
+ values CURRENT_TIME, CURRENT_DATE and CURRENT_TIMESTAMP are still available.
+</p></blockquote><a name="omit_decltype"></a>
+<p><b>SQLITE_OMIT_DECLTYPE</b></p><blockquote><p>
+ This option causes SQLite to omit support for the
+ <a href="c3ref/column_decltype.html">sqlite3_column_decltype()</a> and <a href="c3ref/column_decltype.html">sqlite3_column_decltype16()</a>
+ interfaces.
+</p></blockquote><a name="omit_deprecated"></a>
+<p><b>SQLITE_OMIT_DEPRECATED</b></p><blockquote><p>
+ This option causes SQLite to omit support for interfaces
+ marked as deprecated. This includes
+ <a href="c3ref/aggregate_count.html">sqlite3_aggregate_count()</a>,
+ <a href="c3ref/aggregate_count.html">sqlite3_expired()</a>,
+ <a href="c3ref/aggregate_count.html">sqlite3_transfer_bindings()</a>,
+ <a href="c3ref/aggregate_count.html">sqlite3_global_recover()</a>,
+ <a href="c3ref/aggregate_count.html">sqlite3_thread_cleanup()</a> and
+ <a href="c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> interfaces and
+ <a href="pragma.html#syntax">PRAGMA</a> statements <a href="pragma.html#pragma_count_changes">PRAGMA count_changes</a>,
+ <a href="pragma.html#pragma_data_store_directory">PRAGMA data_store_directory</a>,
+ <a href="pragma.html#pragma_default_cache_size">PRAGMA default_cache_size</a>,
+ <a href="pragma.html#pragma_empty_result_callbacks">PRAGMA empty_result_callbacks</a>,
+ <a href="pragma.html#pragma_full_column_names">PRAGMA full_column_names</a>,
+ <a href="pragma.html#pragma_short_column_names">PRAGMA short_column_names</a>, and
+ <a href="pragma.html#pragma_temp_store_directory">PRAGMA temp_store_directory</a>.
+</p></blockquote><a name="omit_deserialize"></a>
+<p><b>SQLITE_OMIT_DESERIALIZE</b></p><blockquote><p>
+ This option causes the
+ <a href="c3ref/serialize.html">sqlite3_serialize()</a> and <a href="c3ref/deserialize.html">sqlite3_deserialize()</a>
+ interfaces to be omitted from the build.
+</p></blockquote><a name="omit_diskio"></a>
+<p><b>SQLITE_OMIT_DISKIO</b></p><blockquote><p>
+ This option omits all support for writing to the disk and forces
+ databases to exist in memory only. This option has not been
+ maintained and probably does not work with newer versions of SQLite.
+</p></blockquote><a name="omit_explain"></a>
+<p><b>SQLITE_OMIT_EXPLAIN</b></p><blockquote><p>
+ Defining this option causes the <a href="lang_explain.html">EXPLAIN</a> command to be omitted from the
+ library. Attempting to execute an <a href="lang_explain.html">EXPLAIN</a> statement will cause a parse
+ error.
+</p></blockquote><a name="omit_flag_pragmas"></a>
+<p><b>SQLITE_OMIT_FLAG_PRAGMAS</b></p><blockquote><p>
+ This option omits support for a subset of <a href="pragma.html#syntax">PRAGMA</a> commands that
+ query and set boolean properties.
+</p></blockquote><a name="omit_floating_point"></a>
+<p><b>SQLITE_OMIT_FLOATING_POINT</b></p><blockquote><p>
+ This option is used to omit floating-point number support from the SQLite
+ library. When specified, specifying a floating point number as a literal
+ (i.e. "1.01") results in a parse error.</p>
+
+<p> <p>In the future, this option may also disable other floating point
+ functionality, for example the <a href="c3ref/result_blob.html">sqlite3_result_double()</a>,
+ <a href="c3ref/bind_blob.html">sqlite3_bind_double()</a>, <a href="c3ref/value_blob.html">sqlite3_value_double()</a> and
+ <a href="c3ref/column_blob.html">sqlite3_column_double()</a> API functions.
+ </p>
+</p></blockquote><a name="omit_foreign_key"></a>
+<p><b>SQLITE_OMIT_FOREIGN_KEY</b></p><blockquote><p>
+ If this option is defined, then <a href="foreignkeys.html">foreign key constraint</a> syntax is
+ not recognized.
+</p></blockquote><a name="omit_generated_columns"></a>
+<p><b>SQLITE_OMIT_GENERATED_COLUMNS</b></p><blockquote><p>
+ If this option is defined, then <a href="gencol.html">generated column</a> syntax is
+ not recognized.
+</p></blockquote><a name="omit_get_table"></a>
+<p><b>SQLITE_OMIT_GET_TABLE</b></p><blockquote><p>
+ This option causes support for <a href="c3ref/free_table.html">sqlite3_get_table()</a> and
+ <a href="c3ref/free_table.html">sqlite3_free_table()</a> to be omitted.
+</p></blockquote><a name="omit_hex_integer"></a>
+<p><b>SQLITE_OMIT_HEX_INTEGER</b></p><blockquote><p>
+ This option omits support for <a href="lang_expr.html#hexint">hexadecimal integer literals</a>.
+</p></blockquote><a name="omit_incrblob"></a>
+<p><b>SQLITE_OMIT_INCRBLOB</b></p><blockquote><p>
+ This option causes support for <a href="c3ref/blob.html">incremental BLOB I/O</a>
+ to be omitted.
+</p></blockquote><a name="omit_integrity_check"></a>
+<p><b>SQLITE_OMIT_INTEGRITY_CHECK</b></p><blockquote><p>
+ This option omits support for the <a href="pragma.html#pragma_integrity_check">integrity_check pragma</a>.
+</p></blockquote><a name="omit_introspection_pragmas"></a>
+<p><b>SQLITE_OMIT_INTROSPECTION_PRAGMAS</b></p><blockquote><p>
+ This option omits support for
+ <a href="pragma.html#pragma_function_list">PRAGMA function_list</a>, <a href="pragma.html#pragma_module_list">PRAGMA module_list</a>, and
+ <a href="pragma.html#pragma_pragma_list">PRAGMA pragma_list</a>.
+</p></blockquote><a name="omit_json"></a>
+<p><b>SQLITE_OMIT_JSON</b></p><blockquote><p>
+ This option omits the <a href="json1.html">JSON SQL functions</a> from the build.
+</p></blockquote><a name="omit_like_optimization"></a>
+<p><b>SQLITE_OMIT_LIKE_OPTIMIZATION</b></p><blockquote><p>
+ This option disables the ability of SQLite to use indices to help
+ resolve <a href="lang_expr.html#like">LIKE</a> and <a href="lang_expr.html#glob">GLOB</a> operators in a WHERE clause.
+</p></blockquote><a name="omit_load_extension"></a>
+<p><b>SQLITE_OMIT_LOAD_EXTENSION</b></p><blockquote><p>
+ This option omits the entire extension loading mechanism from
+ SQLite, including <a href="c3ref/enable_load_extension.html">sqlite3_enable_load_extension()</a> and
+ <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> interfaces.
+</p></blockquote><a name="omit_localtime"></a>
+<p><b>SQLITE_OMIT_LOCALTIME</b></p><blockquote><p>
+ This option omits the "localtime" modifier from the date and time
+ functions. This option is sometimes useful when trying to compile
+ the date and time functions on a platform that does not support the
+ concept of local time.
+</p></blockquote><a name="omit_lookaside"></a>
+<p><b>SQLITE_OMIT_LOOKASIDE</b></p><blockquote><p>
+ This option omits the <a href="malloc.html#lookaside">lookaside memory allocator</a>.
+</p></blockquote><a name="omit_memorydb"></a>
+<p><b>SQLITE_OMIT_MEMORYDB</b></p><blockquote><p>
+ When this is defined, the library does not respect the special database
+ name ":memory:" (normally used to create an <a href="inmemorydb.html">in-memory database</a>). If
+ ":memory:" is passed to <a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/open.html">sqlite3_open16()</a>, or
+ <a href="c3ref/open.html">sqlite3_open_v2()</a>, a file with this name will be
+ opened or created.
+</p></blockquote><a name="omit_or_optimization"></a>
+<p><b>SQLITE_OMIT_OR_OPTIMIZATION</b></p><blockquote><p>
+ This option disables the ability of SQLite to use an index together
+ with terms of a WHERE clause connected by the OR operator.
+</p></blockquote><a name="omit_pager_pragmas"></a>
+<p><b>SQLITE_OMIT_PAGER_PRAGMAS</b></p><blockquote><p>
+ Defining this option omits pragmas related to the pager subsystem from
+ the build.
+</p></blockquote><a name="omit_pragma"></a>
+<p><b>SQLITE_OMIT_PRAGMA</b></p><blockquote><p>
+ This option is used to omit the <a href="pragma.html#syntax">PRAGMA</a> command
+ from the library. Note that it is useful to define the macros that omit
+ specific pragmas in addition to this, as they may also remove supporting code
+ in other sub-systems. This macro removes the <a href="pragma.html#syntax">PRAGMA</a> command only.
+</p></blockquote><a name="omit_progress_callback"></a>
+<p><b>SQLITE_OMIT_PROGRESS_CALLBACK</b></p><blockquote><p>
+ This option may be defined to omit the capability to issue "progress"
+ callbacks during long-running SQL statements. The
+ <a href="c3ref/progress_handler.html">sqlite3_progress_handler()</a>
+ API function is not present in the library.
+</p></blockquote><a name="omit_quickbalance"></a>
+<p><b>SQLITE_OMIT_QUICKBALANCE</b></p><blockquote><p>
+ This option omits an alternative, faster B-Tree balancing routine.
+ Using this option makes SQLite slightly smaller at the expense of
+ making it run slightly slower.
+</p></blockquote><a name="omit_reindex"></a>
+<p><b>SQLITE_OMIT_REINDEX</b></p><blockquote><p>
+ When this option is defined, the <a href="lang_reindex.html">REINDEX</a>
+ command is not included in the library.
+ Executing a <a href="lang_reindex.html">REINDEX</a> statement causes
+ a parse error.
+</p></blockquote><a name="omit_schema_pragmas"></a>
+<p><b>SQLITE_OMIT_SCHEMA_PRAGMAS</b></p><blockquote><p>
+ Defining this option omits pragmas for querying the database schema from
+ the build.
+</p></blockquote><a name="omit_schema_version_pragmas"></a>
+<p><b>SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS</b></p><blockquote><p>
+ Defining this option omits pragmas for querying and modifying the
+ database schema version and user version from the build. Specifically, the
+ <a href="pragma.html#pragma_schema_version">schema_version</a> and <a href="pragma.html#pragma_user_version">user_version</a> PRAGMAs are omitted.
+</p></blockquote><a name="omit_shared_cache"></a>
+<p><b>SQLITE_OMIT_SHARED_CACHE</b></p><blockquote><p>
+ This option builds SQLite without support for <a href="sharedcache.html">shared cache mode</a>.
+ The <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> is omitted along with a fair
+ amount of logic within the B-Tree subsystem associated with shared
+ cache management.</p>
+
+<p> This compile-time option is recommended most applications as it
+ results in improved performance and reduced library footprint.
+</p></blockquote><a name="omit_subquery"></a>
+<p><b>SQLITE_OMIT_SUBQUERY</b></p><blockquote><p>
+ If defined, support for sub-selects and the IN() operator are omitted.
+</p></blockquote><a name="omit_tcl_variable"></a>
+<p><b>SQLITE_OMIT_TCL_VARIABLE</b></p><blockquote><p>
+ If this macro is defined, then the special "$<variable-name>" syntax
+ used to automatically bind SQL variables to TCL variables is omitted.
+</p></blockquote><a name="omit_tempdb"></a>
+<p><b>SQLITE_OMIT_TEMPDB</b></p><blockquote><p>
+ This option omits support for TEMP or TEMPORARY tables.
+</p></blockquote><a name="omit_trace"></a>
+<p><b>SQLITE_OMIT_TRACE</b></p><blockquote><p>
+ This option omits support for the <a href="c3ref/profile.html">sqlite3_profile()</a> and
+ <a href="c3ref/profile.html">sqlite3_trace()</a> interfaces and their associated logic.
+</p></blockquote><a name="omit_trigger"></a>
+<p><b>SQLITE_OMIT_TRIGGER</b></p><blockquote><p>
+ Defining this option omits support for TRIGGER objects. Neither the
+ <a href="lang_createtrigger.html">CREATE TRIGGER</a> or <a href="lang_droptrigger.html">DROP TRIGGER</a>
+ commands are available in this case, and attempting to execute
+ either will result in a parse error.
+ This option also disables enforcement of <a href="foreignkeys.html">foreign key constraints</a>,
+ since the code that implements triggers and which is omitted by this
+ option is also used to implement <a href="foreignkeys.html#fk_actions">foreign key actions</a>.
+</p></blockquote><a name="omit_truncate_optimization"></a>
+<p><b>SQLITE_OMIT_TRUNCATE_OPTIMIZATION</b></p><blockquote><p>
+ A default build of SQLite, if a <a href="lang_delete.html">DELETE</a> statement has no WHERE clause
+ and operates on a table with no triggers, an optimization occurs that
+ causes the DELETE to occur by dropping and recreating the table.
+ Dropping and recreating a table is usually much faster than deleting
+ the table content row by row. This is the "truncate optimization".
+</p></blockquote><a name="omit_utf16"></a>
+<p><b>SQLITE_OMIT_UTF16</b></p><blockquote><p>
+ This macro is used to omit support for UTF16 text encoding. When this is
+ defined all API functions that return or accept UTF16 encoded text are
+ unavailable. These functions can be identified by the fact that they end
+ with '16', for example <a href="c3ref/prepare.html">sqlite3_prepare16()</a>, <a href="c3ref/column_blob.html">sqlite3_column_text16()</a> and
+ <a href="c3ref/bind_blob.html">sqlite3_bind_text16()</a>.
+</p></blockquote><a name="omit_vacuum"></a>
+<p><b>SQLITE_OMIT_VACUUM</b></p><blockquote><p>
+ When this option is defined, the <a href="lang_vacuum.html">VACUUM</a>
+ command is not included in the library.
+ Executing a <a href="lang_vacuum.html">VACUUM</a> statement causes
+ a parse error.
+</p></blockquote><a name="omit_view"></a>
+<p><b>SQLITE_OMIT_VIEW</b></p><blockquote><p>
+ Defining this option omits support for VIEW objects. Neither the
+ <a href="lang_createview.html">CREATE VIEW</a> nor the <a href="lang_dropview.html">DROP VIEW</a>
+ commands are available in this case, and
+ attempting to execute either will result in a parse error.</p>
+
+<p> WARNING: If this macro is defined, it will not be possible to open a database
+ for which the schema contains VIEW objects.
+</p></blockquote><a name="omit_virtualtable"></a>
+<p><b>SQLITE_OMIT_VIRTUALTABLE</b></p><blockquote><p>
+ This option omits support for the <a href="c3ref/vtab.html">Virtual Table</a>
+ mechanism in SQLite.
+</p></blockquote><a name="omit_wal"></a>
+<p><b>SQLITE_OMIT_WAL</b></p><blockquote><p>
+ This option omits the "<a href="wal.html">write-ahead log</a>" (a.k.a. "<a href="wal.html">WAL</a>") capability.
+</p></blockquote><a name="omit_windowfunc"></a>
+<p><b>SQLITE_OMIT_WINDOWFUNC</b></p><blockquote><p>
+ This option omits <a href="windowfunctions.html">window functions</a> from the build.
+</p></blockquote><a name="omit_wsd"></a>
+<p><b>SQLITE_OMIT_WSD</b></p><blockquote><p>
+ This option builds a version of the SQLite library that contains no
+ Writable Static Data (WSD). WSD is global variables and/or static
+ variables. Some platforms do not support WSD, and this option is necessary
+ in order for SQLite to work those platforms. </p>
+
+<p> Unlike other OMIT options which make the SQLite library smaller,
+ this option actually increases the size of SQLite and makes it run
+ a little slower. Only use this option if SQLite is being built for an
+ embedded target that does not support WSD.
+</p></blockquote><a name="omit_xfer_opt"></a>
+<p><b>SQLITE_OMIT_XFER_OPT</b></p><blockquote><p>
+ This option omits support for optimizations that help statements
+ of the form "INSERT INTO ... SELECT ..." run faster.
+</p></blockquote><a name="untestable"></a>
+<p><b>SQLITE_UNTESTABLE</b></p><blockquote><p>
+ A standard SQLite build includes a small amount of logic associated
+ with <a href="c3ref/test_control.html">sqlite3_test_control()</a> to exercise
+ parts of the SQLite core that are otherwise difficult to validate.
+ This compile-time option omits that extra testing logic. This
+ compile-time option was called "SQLITE_OMIT_BUILTIN_TEST" prior
+ to SQLite version 3.16.0 (2017-01-02). The name was changed
+ to better describe the implications of using it.
+ <p>
+ Setting this compile-time option prevents SQLite from being fully
+ testable. Branch test coverage drops from 100% down to about 95%.
+ <p>
+ SQLite developers follow the NASA principle of
+ "fly what you test and test what you fly". This principle is violated
+ if this option is enabled for delivery but disabled for testing.
+ But if this option is enabled during testing, not all branches are
+ reachable. Therefore, the use of this compile-time option is discouraged.
+</p></blockquote><a name="zero_malloc"></a>
+<p><b>SQLITE_ZERO_MALLOC</b></p><blockquote><p>
+ This option omits both the <a href="malloc.html#defaultalloc">default memory allocator</a> and the
+ <a href="malloc.html#memdebug">debugging memory allocator</a> from the build and substitutes a stub
+ memory allocator that always fails. SQLite will not run with this
+ stub memory allocator since it will be unable to allocate memory. But
+ this stub can be replaced at start-time using
+ <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a>,...) or
+ <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a>,...).
+ So the net effect of this compile-time option is that it allows SQLite
+ to be compiled and linked against a system library that does not support
+ malloc(), free(), and/or realloc().
+</p></blockquote>
+<a name="debugoptions"></a>
+</p><h1 id="_analysis_and_debugging_options"><span>10. </span> Analysis and Debugging Options</h1>
+<a name="debug"></a>
+<p><b>SQLITE_DEBUG</b></p><blockquote><p>
+ The SQLite source code contains literally thousands of assert() statements
+ used to verify internal assumptions and subroutine preconditions and
+ postconditions. These assert() statements are normally turned off
+ (they generate no code) since turning them on makes SQLite run approximately
+ three times slower. But for testing and analysis, it is useful to turn
+ the assert() statements on. The SQLITE_DEBUG compile-time option does this.
+ <p>SQLITE_DEBUG also enables some other debugging features, such as
+ special <a href="pragma.html#syntax">PRAGMA</a> statements that turn on tracing and listing features
+ used for troubleshooting and analysis of the <a href="opcode.html">VDBE</a> and code generator.
+</p></blockquote><a name="memdebug"></a>
+<p><b>SQLITE_MEMDEBUG</b></p><blockquote><p>
+ The SQLITE_MEMDEBUG option causes an instrumented
+ <a href="malloc.html#memdebug">debugging memory allocator</a>
+ to be used as the default memory allocator within SQLite. The
+ instrumented memory allocator checks for misuse of dynamically allocated
+ memory. Examples of misuse include using memory after it is freed,
+ writing off the ends of a memory allocation, freeing memory not previously
+ obtained from the memory allocator, or failing to initialize newly
+ allocated memory.
+</p></blockquote>
+<a name="win32options"></a>
+<h1 id="_windows_specific_options"><span>11. </span> Windows-Specific Options</h1>
+<a name="win32_heap_create"></a>
+<p><b>SQLITE_WIN32_HEAP_CREATE</b></p><blockquote><p>
+ This option forces the Win32 native memory allocator, when enabled, to
+ create a private heap to hold all memory allocations.
+</p></blockquote><a name="win32_malloc_validate"></a>
+<p><b>SQLITE_WIN32_MALLOC_VALIDATE</b></p><blockquote><p>
+ This option forces the Win32 native memory allocator, when enabled, to
+ make strategic calls into the HeapValidate() function if assert() is also
+ enabled.
+</p></blockquote>
+<a name="linkage"></a>
+<h1 id="compiler_linkage_and_calling_convention_control"><span>12. </span>Compiler Linkage and Calling Convention Control</h1>
+
+<p>The following macros specify interface details
+for certain kinds of SQLite builds. The Makefiles will normally
+handle setting these macros automatically. Application developers should
+not need to worry with these macros. The following documentation about these
+macros is included for completeness.</p>
+
+<a name="api"></a>
+<p><b>SQLITE_API</b></p><blockquote><p>
+ This macro identifies an externally visible interface for SQLite.
+ This macro is sometimes set to "extern". But the definition is
+ compiler-specific.
+</p></blockquote><a name="apicall"></a>
+<p><b>SQLITE_APICALL</b></p><blockquote><p>
+ This macro identifies the calling convention used by public interface
+ routines in SQLite which accept a fixed number of arguments.
+ This macro is normally defined to be nothing,
+ though on Windows builds it can sometimes be set to "__cdecl" or "__stdcall".
+ The "__cdecl" setting is the default, but "__stdcall" is used when SQLite
+ is intended to be compiled as a Windows system library.
+ <p>
+ A single function declaration should contain no more than one of
+ the following: <a href="compile.html#apicall">SQLITE_APICALL</a>, <a href="compile.html#cdecl">SQLITE_CDECL</a>, or <a href="compile.html#sysapi">SQLITE_SYSAPI</a>.
+</p></blockquote><a name="callback"></a>
+<p><b>SQLITE_CALLBACK</b></p><blockquote><p>
+ This macro specifies the calling convention used with callback pointers
+ in SQLite. This macro is normally defined to be nothing, though on Windows
+ builds it can sometimes be set to "__cdecl" or "__stdcall". The
+ "__cdecl" setting is the default, but "__stdcall" is used when SQLite
+ is intended to be compiled as a Windows system library.
+</p></blockquote><a name="cdecl"></a>
+<p><b>SQLITE_CDECL</b></p><blockquote><p>
+ This macro specifies the calling convention used by varargs interface
+ routines in SQLite. This macro is normally defined to be nothing,
+ though on Windows builds it can sometimes be set to "__cdecl". This
+ macro is used on varargs routines and so cannot be set to "__stdcall"
+ since the __stdcall calling convention does not support varargs functions.
+ <p>
+ A single function declaration should contain no more than one of
+ the following: <a href="compile.html#apicall">SQLITE_APICALL</a>, <a href="compile.html#cdecl">SQLITE_CDECL</a>, or <a href="compile.html#sysapi">SQLITE_SYSAPI</a>.
+</p></blockquote><a name="extern"></a>
+<p><b>SQLITE_EXTERN</b></p><blockquote><p>
+ This macro specifies linkage for public interface variables in SQLite.
+ It should normally be allowed to default to "extern".
+</p></blockquote><a name="stdcall"></a>
+<p><b>SQLITE_STDCALL</b></p><blockquote><p>
+ This macro is no longer used and is now deprecated.
+</p></blockquote><a name="sysapi"></a>
+<p><b>SQLITE_SYSAPI</b></p><blockquote><p>
+ This macro identifies the calling convention used by operating system
+ interfaces for the target platform for an SQLite build.
+ This macro is normally defined to be nothing,
+ though on Windows builds it can sometimes be set to "__stdcall".
+ <p>
+ A single function declaration should contain no more than one of
+ the following: <a href="compile.html#apicall">SQLITE_APICALL</a>, <a href="compile.html#cdecl">SQLITE_CDECL</a>, or <a href="compile.html#sysapi">SQLITE_SYSAPI</a>.
+</p></blockquote><a name="tclapi"></a>
+<p><b>SQLITE_TCLAPI</b></p><blockquote><p>
+ This macro specifies the calling convention used by the
+ <a href="http://www.tcl.tk">TCL</a> library interface routines.
+ This macro is not used by the SQLite core, but only by the <a href="tclsqlite.html">TCL Interface</a>
+ and <a href="testing.html#tcl">TCL test suite</a>.
+ This macro is normally defined to be nothing,
+ though on Windows builds it can sometimes be set to "__cdecl". This
+ macro is used on TCL library interface routines which are always compiled
+ as __cdecl, even on platforms that prefer to use __stdcall, so this
+ macro should not be set to __stdcall unless the platform has a custom
+ TCL library build that supports __stdcall.
+ <p>
+ This macro may not be used in combination with any of <a href="compile.html#apicall">SQLITE_APICALL</a>,
+ <a href="compile.html#callback">SQLITE_CALLBACK</a>, <a href="compile.html#cdecl">SQLITE_CDECL</a> or <a href="compile.html#sysapi">SQLITE_SYSAPI</a>.
+</p></blockquote>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/compile.in?m=509c9df319dd688a4">2022-11-07 14:28:05</a> UTC </small></i></p>
+
diff --git a/www/completion.html b/www/completion.html
new file mode 100644
index 0000000..aacff75
--- /dev/null
+++ b/www/completion.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The COMPLETION() Table-Valued Function</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The COMPLETION() Table-Valued Function
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>The COMPLETION extension implements a <a href="vtab.html#tabfunc2">table-valued function</a> named
+"completion" that can be used to suggest completions of partially entered
+words during interactive SQL input. The completion table can be
+used to help implement tab-completion, for example.
+
+</p><h1 id="details"><span>2. </span>Details</h1>
+
+<p>The designed query interface is:
+
+</p><div class="codeblock"><pre>SELECT DISTINCT candidate COLLATE nocase
+ FROM completion($prefix, $wholeline)
+ ORDER BY 1;
+</pre></div>
+
+<p>The query above will return suggestions for the whole input word that
+begins with $prefix. The $wholeline parameter is all text from the beginning
+of the line up to the insertion point. The $wholeline parameter is used
+for context.
+
+</p><p>The $prefix parameter may be NULL, in which case the prefix is deduced
+from $wholeline. Or, the $wholeline parameter may be NULL or omitted if
+context information is unavailable or if context-aware completion is not
+desired.
+
+</p><p>The completion table might return the same candidate more than once, and
+it will return candidates in an arbitrary order. The DISTINCT keyword and
+the ORDER BY in the sample query above are added to make the answers unique
+and in lexicographical order.
+
+</p><h2 id="example_usage"><span>2.1. </span>Example Usage</h2>
+
+<p>The completion table is used to implement tab-completion in the
+<a href="cli.html">command-line shell</a> in conjunction with either the readline or linenoise
+input line editing packages for unix. See the
+<a href="https://sqlite.org/src/file/src/shell.c.in">https://sqlite.org/src/file/src/shell.c.in</a> source file for example
+code. Search for "FROM completion" to find the relevant code sections.
+
+</p><p>Because the completion table is built into the command-line shell in order
+to provide for tab-completions, you can run test queries against the
+completion table directly in the command-line shell. Simply type a
+query such as the example shown above, filling in appropriate values
+for $prefix and $wholeline, and observe the output.
+
+</p><h1 id="limitations"><span>3. </span>Limitations</h1>
+
+<p>The completion table is designed for interactive use. It will return
+answers at a speed appropriate for human typing. No effort is made to
+be unusually efficient, so long as the response time is nearly instantaneous
+in a user interface.
+
+</p><p>As of this writing (2017-07-13), the completion virtual table only
+looks for SQL keywords, and schema, table, and column names. The
+context contained in $wholeline is completely ignored. Future enhancements
+will try to return new completions taken from function and pragma names
+and other sources, as well as consider more context. The completion
+table should be considered a work-in-progress.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/completion.in?m=887445dcd19c18f0d">2017-07-14 03:53:46</a> UTC </small></i></p>
+
diff --git a/www/conflict.html b/www/conflict.html
new file mode 100644
index 0000000..4fd6e17
--- /dev/null
+++ b/www/conflict.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Constraint Conflict Resolution in SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1>Constraint Conflict Resolution in SQLite</h1>
+
+<p>
+In most SQL databases, if you have a <a href="lang_createtable.html#uniqueconst">UNIQUE</a>, <a href="lang_createtable.html#notnullconst">NOT NULL</a>, or
+<a href="lang_createtable.html#ckconst">CHECK</a> constraint on
+a table and you try to do an <a href="lang_update.html">UPDATE</a> or <a href="lang_insert.html">INSERT</a> that violates
+the constraint, the database will abort the operation in
+progress, back out any prior changes associated with the same
+UPDATE or INSERT statement, and return an error.
+This is the default behavior of SQLite, though SQLite also allows one to
+define alternative ways for dealing with constraint violations.
+This article describes those alternatives and how to use them.
+</p>
+
+<h2>Conflict Resolution Algorithms</h2>
+
+<p>
+SQLite defines five constraint conflict resolution algorithms
+as follows:
+</p>
+
+<dl>
+<dt><b>ROLLBACK</b></dt>
+<dd><p>When a constraint violation occurs, an immediate ROLLBACK
+occurs, thus ending the current transaction, and the command aborts
+with a return code of SQLITE_CONSTRAINT. If no transaction is
+active (other than the implied transaction that is created on every
+command) then this algorithm works the same as ABORT.</p></dd>
+
+<dt><b>ABORT</b></dt>
+<dd><p>When a constraint violation occurs, the command backs out
+any prior changes it might have made and aborts with a return code
+of SQLITE_CONSTRAINT. But no ROLLBACK is executed so changes
+from prior commands within the same transaction
+are preserved. This is the default behavior for SQLite.</p></dd>
+
+<dt><b>FAIL</b></dt>
+<dd><p>When a constraint violation occurs, the command aborts with a
+return code SQLITE_CONSTRAINT. But any changes to the database that
+the command made prior to encountering the constraint violation
+are preserved and are not backed out. For example, if an UPDATE
+statement encountered a constraint violation on the 100th row that
+it attempts to update, then the first 99 row changes are preserved
+but change to rows 100 and beyond never occur.</p></dd>
+
+<dt><b>IGNORE</b></dt>
+<dd><p>When a constraint violation occurs, the one row that contains
+the constraint violation is not inserted or changed. But the command
+continues executing normally. Other rows before and after the row that
+contained the constraint violation continue to be inserted or updated
+normally. No error is returned.</p></dd>
+
+<dt><b>REPLACE</b></dt>
+<dd><p>When a UNIQUE constraint violation occurs, the pre-existing row
+that caused the constraint violation is removed prior to inserting
+or updating the current row. Thus the insert or update always occurs.
+The command continues executing normally. No error is returned.</p></dd>
+</dl>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/conflict.in?m=1ad44025d4f9e5f52">2014-08-15 14:59:54</a> UTC </small></i></p>
+
diff --git a/www/consortium.html b/www/consortium.html
new file mode 100644
index 0000000..b028ab9
--- /dev/null
+++ b/www/consortium.html
@@ -0,0 +1,251 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Consortium</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align=center>The SQLite Consortium</h1>
+
+<p>
+The SQLite Consortium is a membership association dedicated to
+insuring the continuing vitality and independence of SQLite.
+SQLite is high-quality, public domain software. The goal of
+the SQLite Consortium is to make sure it stays that way.
+</p>
+
+<p>
+Consortium members contribute funding to support the ongoing
+development and maintenance of SQLite and in return receive
+enterprise-level technical support and legal assurances that
+SQLite will remain independent and open-source. Consortium
+members have direct access to
+the SQLite developers and receive priority consideration for
+any bug fixes or feature requests. However, technical control
+and direction of SQLite remains with the SQLite architect and
+developers. An important goal of the SQLite Consortium, after
+all, is to make sure that SQLite does not fall under the governance
+of any single company but remains independent and fully under the
+control of the SQLite developers.
+</p>
+
+<p>
+Companies that use SQLite as a critical component in their
+products or infrastructure may want to consider becoming
+SQLite Consortium Members as inexpensive insurance
+in the future vitality and independence of SQLite. The SQLite Consortium
+membership fee is a fraction of the cost of devoting internal
+staff to supporting the SQLite code base. Benefits of
+membership include:
+</p>
+
+<ul>
+<li><p>
+Consortium members have the guaranteed, undivided attention of the SQLite
+developers for 23 staff-days per year and for as much additional time
+above and beyond that amount that the core developers have available.
+There are no arbitrary limits on contact time.
+The consortium will never be over-subscribed. New SQLite developers
+will be recruited and trained as necessary to cover the 23 day/year
+support commitment.
+</p></li>
+
+<li><p>
+Consortium members can call any developer at any time, day or
+night, and expect to get their full and immediate attention.
+Consortium members have access to the home telephone numbers
+and cellphone numbers and work schedules of the core developers
+so that the developers can be tracked down quickly in a crisis.
+</p></li>
+
+<li><p>
+The SQLite developers are eager and happy to write new code
+or debug existing code for consortium members.
+Consortium members can request and expect to receive significant
+new enhancements to the public SQLite code base. Consortium
+members can also request their own private, proprietary extensions
+and enhancements.
+</p></li>
+
+<li><p>
+Consortium members can receive support for any
+version of SQLite no matter how old.
+Bug fixes will be back ported to older versions of SQLite upon
+request.
+</p></li>
+
+<li><p>
+Consortium members can receive private
+email and/or telephone notifications and briefings covering
+new bugs or recently added features.
+The core developers are constantly watching out for the
+interests of consortium members and will attempt to protect
+those interests in every way possible and alert members
+when their interests are threatened in any way.
+</p></li>
+
+<li><p>
+The SQLite developers will set up customized regression tests
+to fully and completely test SQLite as configured by consortium
+members. Normally, only the standard SQLite configuration is fully
+tested at each release. Consortium members that use a non-standard
+configuration can request that their configuration be tested to the
+same level of detail.
+</p></li>
+
+<li><p>
+Support requests are accepted from any employee or contractor working
+for a consortium member.
+Support is not limited to a single development
+team as it is with a maintenance subscription or technical support
+agreement.
+</p></li>
+
+<li><p>
+Support requests, comments, and suggestions for future
+changes to SQLite coming from consortium members take priority
+over requests from all other sources.
+Consortium members go to the front of the line.
+</p></li>
+
+<li><p>
+We will be happy to
+<a href="index.html#consortium_members">recognize consortium members</a>
+ on the SQLite website
+with a logo and/or a brief acknowledgement of their contribution to the
+project. This is an opportunity for companies to build good will by
+demonstrating that they are giving back to the community. Or, members
+can remain anonymous.
+</p></li>
+
+</ul>
+
+
+<h2>How To Become A Consortium Member</h2>
+
+<p>
+Membership in the SQLite Consortium is via
+contract with <a href="https://www.hwaci.com/">Hipp, Wyrick &amp; Company, Inc.</a>.
+Send email to <a href="mailto:drh@sqlite.org">drh@sqlite.org</a> or phone
++1.704.948.4565 during US east-coast business hours
+for additional information.
+</p>
+
+
+
+</body></html>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/consortium.in?m=ad2c94214ceb26239">2020-08-28 15:34:44</a> UTC </small></i></p>
+
diff --git a/www/consortium_agreement-20071201.html b/www/consortium_agreement-20071201.html
new file mode 100644
index 0000000..0a73ef1
--- /dev/null
+++ b/www/consortium_agreement-20071201.html
@@ -0,0 +1,558 @@
+<html>
+<head>
+<title>SQLite Consortium Agreement</title>
+</head>
+<body bgcolor="white">
+<h1 align="center">
+SQLite Consortium Agreement
+</h1>
+
+<p>This SQLite Consortium Agreement ("Agreement") is made and
+entered into as of the _____ day of ______________, 2007 ("Effective Date")
+by and between ___________________ (the "Company"), and
+Hipp, Wyrick & Company, Inc., a Georgia Corporation with
+headquarters at 6200 Maple Cove Lane, Charlotte, NC ("Hwaci").</p>
+
+<p>WHEREAS, Hwaci is the developer of a serverless, embeddable, public
+domain SQL database engine available at
+<a href="http://www.sqlite.org/">http://www.sqlite.org/</a>
+("SQLite"); and</p>
+
+<p>WHEREAS, Company wishes to support the independent development of
+the SQLite database engine to insure the continuing reliability,
+vitality, and independence of SQLite, and in connection therewith,
+Company wishes to provide funds for ongoing research, development,
+and maintenance of the SQLite code base, operation of the SQLite
+website, protection and maintenance of the SQLite
+trademark, as well as for promotion of SQLite at conferences and
+trade shows; and</p>
+
+<p>WHEREAS, Company wishes to receive benefits in the form of
+services from Hwaci in consideration for their support of SQLite; and</b>
+
+<p>WHEREAS, Company and Hwaci each wish SQLite to be supported and
+maintained as an independent, community-driven project, and to
+ensure the SQLite development team remains independent.</p>
+
+<p>NOW, THEREFORE, in consideration of the mutual promises contained
+herein, the parties agree as follows:</p>
+
+<h2>1.0 Definitions</h2>
+
+<h3>1.1 SQLite Developers</h3>
+<p>The "SQLite Developers" are the employees or contractors of Hwaci engaged
+in the development of SQLite, including without limitation the
+SQLite Architect.</p>
+
+<h3>1.2 SQLite Architect</h3>
+<p>The "SQLite Architect" is the SQLite Developer with ultimate
+responsibility and authority over changes and maintenance of the
+SQLite code. The current SQLite Architect is the original designer
+and developer of SQLite, D. Richard Hipp. Hwaci may change the
+SQLite Architect from time to time upon approval by Company.</p>
+
+<h3>1.3 Consortium Member</h3>
+<p>A "Consortium Member" is a company or organization, including
+but not limited to Company, which has entered into an agreement
+with Hwaci which is substantially similar to this Agreement.
+</p>
+
+<h2>2.0 Agreement<h2>
+
+<h3>2.1 Responsibilities And Obligations Of SQLite Developers</h3>
+
+<h4>2.1.1 General Support</h4>
+<p>The SQLite Developers shall provide, without limit,
+timely and accurate answers, advice, and instruction
+in response to questions and comments from Company about SQLite
+submitted by email or by telephone at any time day or night.
+</p>
+
+<h4>2.1.2 Debugging Support</h4>
+The SQLite Developers shall at Company's request provide
+Company with direct assistance
+in debugging applications that are built upon or use SQLite.
+The combined time for Debugging Support and Custom
+Development for Company is limited to 330 hours per year.
+</p>
+
+<h4>2.1.3 Custom Development</h4>
+<p>The SQLite Developers shall at the request of Company
+write new extensions or enhancements
+to SQLite according to Company's specifications. These extensions
+and enhancements may be proprietary to Company or open source or
+with the consent of both Company and the SQLite Architect may
+be folded into the public domain SQLite source tree.
+The time devoted to Custom Development for Company is limited 220 hours
+per year.
+</p>
+
+<h4>2.1.4 Custom Builds</h4>
+The SQLite Developers shall at Company's request provide Company
+with specialized builds of SQLite according to Company's specifications.
+</p>
+
+<h4>2.1.5 Legacy Support</h4>
+<p>The SQLite Developers shall at Company's request provide support
+and bug-fix patches for any historical version of SQLite.
+</p>
+
+<h4>2.1.6 Custom Testing</h4>
+<p>The SQLite Developers shall at Company's request set up and run
+acceptance tests according Company's specifications that are specifically
+designed to exercise SQLite as configured and used by Company.
+These acceptance tests shall be run and shall pass prior to any release
+of SQLite.
+</p>
+
+<h4>2.1.7 Priority Bug Fixes</h4>
+<p>The SQLite Developers shall assign highest priority to fixing bugs
+in SQLite that are reported by Company or in which Company has
+expressed a specific interest.
+</p>
+
+<h4>2.1.8 Code Quality</h4>
+<p>The SQLite Developers shall at all times keep the SQLite source
+code well commented and documented and clearly structured and
+organized so that an experienced and competent programmer can
+understand it and support it after no more than a few months of study.
+</p>
+
+<h4>2.1.9 Backwards Compatibility</h4>
+<p>The SQLite Developers recognize that Company uses SQLite
+in mission-critical applications and therefore shall work diligently
+to ensure continuing bug-free correct operation and backwards
+compatibility with prior releases.
+</p>
+
+<h4>2.1.10 Test Coverage</h4>
+<p>The SQLite Developers shall maintain the SQLite test suite such
+that no less than 95% source code coverage is provided.
+</p>
+
+<h4>2.1.11 Website</h4>
+<p>The SQLite Developers shall maintain the SQLite website at
+<a href="http://www.sqlite.org/">http://www.sqlite.org/</a>
+in good working order and all SQLite source code shall
+be made freely available at such website.
+</p>
+
+
+<h3>2.2 Responsibilities And Obligations Of The SQLite Architect</h3>
+
+<h4>2.2.1 Private Briefings</h4>
+<p>The SQLite Architect shall, at the request of Company,
+provide Company with private notification and briefings
+of any new bugs or new features in SQLite that might
+effect Company's products.
+</p>
+
+<h4>2.2.2 Direction</h4>
+<p>The SQLite Architect shall coordinate the activities of SQLite
+Developers and shall publish from time to time a roadmap of
+proposed future changes and enhancements to SQLite.
+</p>
+
+<h4>2.2.3 Oversight</h4>
+<p>The SQLite Architect shall personally review all changes to
+the SQLite Source Code and take responsibility for the quality
+and correctness of those changes.
+</p>
+
+<h4>2.2.4 Continuity</h4>
+<p>The initial SQLite Architect shall be the original developer
+of SQLite, D. Richard Hipp. The role of SQLite Architect shall
+not be assigned to another during the term of this Agreement except
+due to the disability of Dr. Hipp and with approval of Company.
+</p>
+
+<h3>2.3 Responsibilities And Obligations Of Hwaci</h3>
+
+<h4>2.3.1 Employer</h4>
+<p>Hwaci shall act as the employer of the SQLite Developers and
+SQLite Architect and shall make all tax and legal filings
+and tax withholding required by employers. Hwaci shall provide
+Company with W-9 information upon request.
+</p>
+
+<h4>2.3.2 Responsible Party</h4>
+<p>All obligations of the SQLite Developers set forth in this
+agreement are deemed obligations of Hwaci. Hwaci shall recruit,
+employ, and supervise SQLite Developers in such a way that the
+responsibilities and obligations of the SQLite Developers set
+forth in this agreement are upheld.</p>
+
+<h4>2.3.3 Multiple Developers</h4>
+<p>Hwaci shall recruit and employ as many SQLite Developers for as
+many hours as can be reasonably achieved using the funds received
+from Consortium Members under this agreement.
+So that support for SQLite will not be interrupted by the
+disability or withdrawal of any one SQLite Developer, Hwaci will
+keep at least two knowledgeable and competent SQLite Developers
+on staff.</p>
+
+<h4>2.3.4 Mentorship</h4>
+<p>Hwaci shall work to encourage independent
+programmers from around the world
+to become familiar with SQLite internals so that there will be a
+pool of talent able to support SQLite in the future.
+</p>
+
+<h4>2.3.5 Audits</h4>
+<p>Hwaci shall keep and maintain complete and accurate records
+of the use of development funds provided by Company
+and shall allow Company, or its representative, a certified
+public accountant mutually acceptable to Hwaci and Company,
+during office hours and at reasonable intervals, no more than
+once every 12 months, to inspect and make extracts or copies
+of such records solely for the purpose of ascertaining Hwaci's
+compliance with the objectives and requirements of this agreement.
+</p>
+
+<h4>2.3.6 Disaster Planning</h4>
+<p>Hwaci shall maintain backup copies of all
+SQLite source files and documentation, current and historical,
+at at least two separate locations separated from each
+other and from the primary on-line SQLite repository
+by at least 400 kilometers.
+</p>
+
+<h4>2.3.7 Trademark</h4>
+<p>Hwaci shall maintain ownership of the SQLite trademark and
+the sqlite.org domain name and shall purchase bandwidth and
+server space for the <a href="http://www.sqlite.org/">
+http://www.sqlite.org/</a> website.
+</p>
+
+<h4>2.3.8 No Take-overs or Buy-outs</h4>
+<p>Neither Hwaci nor the SQLite Architect shall relinquish development
+control of SQLite during the term of this Agreement, by acquisition or merger
+or by any other means,
+except with the consent of Company.
+</p>
+
+<h4>2.3.9 New Consortium Members</h4>
+<p>New Consortium Members may be accepted into the consortium from
+time to time under identical terms as this agreement, or under
+substantially similar terms that have been approved by existing
+Consortium Members.</p>
+
+<h4>2.3.10 Adequate Staff</h4>
+Hwaci shall recruit and employ a sufficient number of qualified
+SQLite Developers to easily cover all custom development,
+debugging, and general support service obligations for all
+Consortium Members while still providing ample time for
+the SQLite Developers to engage in general maintenance
+and extension of SQLite.
+</p>
+
+<h4>2.3.11 Use Of Funds</h4>
+<p>Hwaci shall use the funds provided hereunder
+solely for the development and maintenance of SQLite as set forth in
+this Agreement.
+Interest on funds received in advance and held in trust will
+be reinvested and used for the same purposes as the principal.
+</p>
+
+<h3>2.4 Responsibilities And Obligations Of Company</h3>
+
+<h4>2.4.1 Funding</h4>
+<p>Company shall provide funding for the ongoing support and
+maintenance of SQLite as set forth in section 3.0 "Fees".
+</p>
+
+<h4>2.4.2 Copyright Disclaimer</h4>
+<p>Company acknowledges that SQLite source code and documentation
+published on the <a href="http://www.sqlite.org/">SQLite website</a>
+is in the public domain and that nothing in this agreement shall change
+that fact.
+</p>
+
+<h2>3.0 Fees</h2>
+
+<p>In consideration of the performance
+by Hwaci, the SQLite Developers, and the SQLite Architect
+of the obligations described herein,
+Company shall pay Hwaci at least US $75,000 per year in advance
+either annually, quarterly, or monthly, at Company's discretion.</p>
+
+<h2>4.0 Confidentiality</h2>
+
+<h3>4.1 Definition of Confidential Information</h3>
+
+<p>"Confidential Information" means any Company proprietary information,
+technical data, trade secrets or know-how, including, but not limited to,
+research, product plans, products, services, customers, customer lists,
+markets, software, developments, inventions, processes, formulas,
+technology, designs, drawings, engineering, hardware configuration
+information, marketing, finances or other business information
+disclosed by Company either directly or indirectly in writing,
+orally or by drawings or inspection of parts or equipment.</p>
+
+<h3>4.2 Non-Use and Non-Disclosure.</h3>
+
+<p>Hwaci shall not, during or subsequent to the term of this Agreement,
+use Company's Confidential Information for any purpose whatsoever
+other than the performance of the Services or disclose
+Company's Confidential Information to any third party. The parties
+acknowledge that Confidential Information will remain the sole
+property of Company. Hwaci shall take all reasonable precautions
+to prevent any unauthorized disclosure of Confidential Information
+including, but not limited to, having each employee or
+consultant of Hwaci, if any, with access to any
+Confidential Information, execute a nondisclosure agreement
+containing provisions in Company's favor substantially similar
+to this Agreement. Confidential Information does not include
+information that: (i) is known to Hwaci at the time of
+disclosure to Hwaci by Company as evidenced by written
+records of Hwaci; (ii) has become publicly known and made
+generally available through no wrongful act of Hwaci; or
+(iii) has been received by Hwaci from a third party who is
+authorized to make such disclosure.</p>
+
+<h4>4.2.1 Disclosure Required by Law</h4>
+In the event any Confidential Information is required to be disclosed
+by Hwaci under the terms of a valid and effective subpoena or order
+issued by a court of competent jurisdiction, or by a demand or
+information request from an executive or administrative agency
+or other governmental authority, Hwaci shall, unless prohibited
+by the terms of a subpoena, order, or demand, promptly notify
+Company of the existence, terms and circumstances surrounding
+such demand or request, shall consult with Company on the
+advisability of taking legally available steps to resist
+or narrow such demand or request, and, if disclosure of
+such Confidential Information is required, shall exercise
+its reasonable best efforts to narrow the scope of disclosure
+and obtain an order or other reliable assurance that
+confidential treatment will be accorded to such
+Confidential Information. To the extent that Hwaci
+is prohibited from notifying Company of a subpoena,
+order or demand, by the terms of same, Hwaci shall exercise
+its reasonable efforts to narrow the scope of disclosure.</p>
+
+<h3>4.3 Return of Materials.</h3>
+
+<p>Upon the termination of this Agreement, or upon Company's
+earlier request, Hwaci shall deliver to Company all of
+Company's property or Confidential Information that Hwaci
+may have in Hwaci's possession or control.</p>
+
+<h2>5.0 Intellectual Property</h2>
+
+<h3>5.1 No Assignment</h3>
+
+<p>Company acknowledges that all copyrightable material, notes,
+records, drawings, designs, inventions, improvements, developments,
+discoveries and trade secrets made, generated, conceived, or
+reduced to practice by Hwaci related to SQLite
+will remain the property of Hwaci. Nothing in this Agreement
+will be construed to transfer any intellectual property right
+of Hwaci to Company.</p>
+
+<h3>5.2 Availability and Public Domain Dedication</h3>
+
+<p>The SQLite Developers and Hwaci shall,
+subject to their discretion as to the quality
+and suitability of the SQLite source code and documentation
+for public release, make
+the SQLite source code and documentation
+publicly available as downloadable files
+and make a public statement ceding all intellectual
+property rights, including but not limited to copyright
+and patent rights, in the SQLite source code and documentation
+to the public domain.
+To the extent that the SQLite Developers and Hwaci
+elect not to release the SQLite
+source code and documentation
+publicly, they shall provide copies thereof to
+Company and hereby grants to Company, under all of the
+SQLite Developers' and Hwaci's
+rights
+including but not limited to copyright and patent rights,
+in and to the SQLite source code and documentation,
+perpetual, irrevocable,
+worldwide, non-exclusive, sublicenseable license to use,
+copy, prepare derivative works of, publicly perform and
+display the SQLite source code and documentation
+and derivative works thereof.</p>
+
+<h3>5.3 Trademark</h3>
+
+<p>Hwaci shall use the name "SQLite" only to apply to the
+publicly available project known by such name as of the
+Effective Date. Hwaci may in its discretion file such
+trademark applications or registrations as it deems
+appropriate to protect or record its rights therein,
+and may set such policies as it deems appropriate for
+licensing the use of the trademark.</p>
+
+<h2>6.0 Representations And Warranties</h3>
+
+<h3>6.1 Intellectual Property Clearances.</h3>
+
+<p>Hwaci hereby represents and warrants that Hwaci shall
+enter into agreements with the SQLite Developers sufficient
+to enable Hwaci to undertake the obligations of Section 5.</p>
+
+<h3>6.2 Disclaimer.</h3>
+
+<p>THE WORK PRODUCT AND ALL MATERIAL PROVIDED BY HWACI AND
+COMPANY ARE PROVIDED "AS IS." NEITHER PARTY MAKES ANY
+REPRESENTATIONS OR WARRANTIES OF ANY KIND, WHETHER ORAL
+OR WRITTEN, WHETHER EXPRESS, IMPLIED, OR ARISING BY STATUTE,
+CUSTOM, COURSE OF DEALING OR TRADE USAGE, WITH RESPECT TO
+THE SUBJECT MATTER HEREOF, IN CONNECTION WITH THIS AGREEMENT.
+EACH PARTY SPECIFICALLY DISCLAIMS ANY AND ALL IMPLIED
+WARRANTIES OR CONDITIONS OF TITLE, MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.</p>
+
+<h2>7.0 Term And Termination</h2>
+
+<h3>7.1 Term.</h3>
+
+<p>This Agreement will commence on the Effective Date and
+will continue until 12 months after the Effective Date.
+Thereafter, the parties may by mutual consent renew
+this Agreement subject to agreement on fees to be paid by
+Company for sponsorship for additional periods.</p>
+
+<h3>7.2 Termination.</h3>
+
+<p>If either party materially defaults in the performance
+of any of its material obligations hereunder and if any
+such default is not corrected within 30 days after notice
+in writing, then the non-defaulting party, at its option,
+may, in addition to any other remedies it may have, thereupon
+terminate this Agreement by giving written notice of
+termination to the defaulting party.</p>
+
+<h3>7.3 Survival.</h3>
+
+<p>Upon such termination all rights and duties of the
+parties toward each other will cease except:
+Sections 4 (Confidentiality), 5 (Intellectual Property),
+and 8 (Miscellaneous) will survive termination of this Agreement.</p>
+
+<h2>8. Miscellaneous</h2>
+
+<h3>8.1 Nonassignment/Binding Agreement.</h3>
+
+<p>The parties acknowledge that the unique nature of
+Hwaci's services are substantial consideration for the
+parties' entering into this Agreement. Neither this
+Agreement nor any rights under this Agreement may be
+assigned or otherwise transferred by Hwaci, in whole
+or in part, whether voluntarily or by operation of law,
+without the prior written consent of Company, which
+consent will not be unreasonably withheld.
+Subject to the foregoing, this Agreement will be binding
+upon and will inure to the benefit of the parties and
+their respective successors and assigns. Any assignment
+in violation of the foregoing will be null and void.</p>
+
+<h3>8.2 Notices.</h3>
+
+<p>Any notice required or permitted under the terms of
+this Agreement or required by law must be in writing
+and must be: (a) delivered in person; (b) sent by first
+class registered mail, or air mail, as appropriate; or
+(c) sent by overnight air courier, in each case properly
+posted and fully prepaid to the appropriate address set
+forth in the preamble to this Agreement. Either party
+may change its address for notice by notice to the other
+party given in accordance with this Section. Notices
+will be considered to have been given at the time of
+actual delivery in person, three business days after
+deposit in the mail as set forth above, or one day after
+delivery to an overnight air courier service.</p>
+
+<h3>8.3 Waiver.</h3>
+
+<p>Any waiver of the provisions of this Agreement or
+of a party's rights or remedies under this Agreement
+must be in writing to be effective. Failure, neglect,
+or delay by a party to enforce the provisions of this
+Agreement or its rights or remedies at any time, will
+not be construed as a waiver of such party's rights
+under this Agreement and will not in any way affect
+the validity of the whole or any part of this Agreement
+or prejudice such party's right to take subsequent action.
+No exercise or enforcement by either party of any right
+or remedy under this Agreement will preclude the
+enforcement by such party of any other right or remedy
+under this Agreement or that such party is entitled by
+law to enforce.</p>
+
+<h3>8.4 Severability.</h3>
+
+<p>If any term, condition, or provision in this Agreement
+is found to be invalid, unlawful or unenforceable to
+any extent, the parties shall endeavor in good faith
+to agree to such amendments that will preserve, as far
+as possible, the intentions expressed in this Agreement.
+If the parties fail to agree on such an amendment,
+such invalid term, condition or provision will be
+severed from the remaining terms, conditions and
+provisions, which will continue to be valid and
+enforceable to the fullest extent permitted by law.</p>
+
+<h3>8.5 Integration.</h3>
+
+<p>This Agreement contains the entire agreement of the
+parties with respect to the subject matter of this
+Agreement and supersedes all previous communications,
+representations, understandings and agreements,
+either oral or written, between the parties with
+respect to said subject matter. This Agreement
+may not be amended, except by a writing signed by both parties.</p>
+
+<h3>8.6 Counterparts.</h3>
+
+<p>This Agreement may be executed in counterparts,
+each of which so executed will be deemed to be an
+original and such counterparts together will constitute
+one and the same agreement.</p>
+
+<h3>8.7 Governing Law.</h3>
+
+<p>This Agreement will be interpreted and construed in
+accordance with the laws of the State of North Carolina
+and the United States of America, without regard to
+conflict of law principles. All disputes arising out
+of this Agreement will be subject to the exclusive
+jurisdiction of the state and federal courts located in
+North Carolina, and each party hereby consents to the
+personal jurisdiction thereof.</p>
+
+<h3>8.8 Independent Contractors.</h3>
+
+<p>It is the intention of the parties that Hwaci is an
+independent contractor. Nothing in this Agreement will
+in any way be construed to constitute Hwaci or any of
+its employees as an agent, employee or representative
+of Company.</p>
+
+<h2>9.0 Signatures</h2>
+
+<p>The parties have executed this Agreement below to
+indicate their acceptance of its terms.</p>
+
+<table width="100%" border="0">
+<tr><td valign="top">
+HWACI<br>
+By:<hr>
+<p>&nbsp;</p>
+Print Name:<hr>
+<p>&nbsp;</p>
+Title:<hr>
+<p>&nbsp;</p>
+</td><td width="10%"></td>
+<td valign="top">
+COMPANY<br>
+By:<hr>
+<p>&nbsp;</p>
+Print Name:<hr>
+<p>&nbsp;</p>
+Title:<hr>
+<p>&nbsp;</p>
+</td></tr></table>
diff --git a/www/copyright-release.html b/www/copyright-release.html
new file mode 100644
index 0000000..d150b19
--- /dev/null
+++ b/www/copyright-release.html
@@ -0,0 +1,110 @@
+<html>
+<title>SQLite Copyright Release Template</title>
+<body bgcolor="white">
+<h1 align="center">
+Copyright Release for<br>
+Contributions To SQLite
+</h1>
+
+<p>
+SQLite is software that implements an embeddable SQL database engine.
+SQLite is available for free download from http://www.sqlite.org/.
+The principal author and maintainer of SQLite has disclaimed all
+copyright interest in his contributions to SQLite
+and thus released his contributions into the public domain.
+In order to keep the SQLite software unencumbered by copyright
+claims, the principal author asks others who may from time to
+time contribute changes and enhancements to likewise disclaim
+their own individual copyright interest.
+</p>
+
+<p>
+Because the SQLite software found at http://www.sqlite.org/ is in the
+public domain, anyone is free to download the SQLite software
+from that website, make changes to the software, use, distribute,
+or sell the modified software, under either the original name or
+under some new name, without any need to obtain permission, pay
+royalties, acknowledge the original source of the software, or
+in any other way compensate, identify, or notify the original authors.
+Nobody is in any way compelled to contribute their SQLite changes and
+enhancements back to the SQLite website. This document concerns
+only changes and enhancements to SQLite that are intentionally and
+deliberately contributed back to the SQLite website.
+</p>
+
+<p>
+For the purposes of this document, "SQLite software" shall mean any
+computer source code, documentation, makefiles, test scripts, or
+other information that is published on the SQLite website,
+http://www.sqlite.org/. Precompiled binaries are excluded from
+the definition of "SQLite software" in this document because the
+process of compiling the software may introduce information from
+outside sources which is not properly a part of SQLite.
+</p>
+
+<p>
+The header comments on the SQLite source files exhort the reader to
+share freely and to never take more than one gives.
+In the spirit of that exhortation I make the following declarations:
+</p>
+
+<ol>
+<li><p>
+I dedicate to the public domain
+any and all copyright interest in the SQLite software that
+was publicly available on the SQLite website (http://www.sqlite.org/) prior
+to the date of the signature below and any changes or enhancements to
+the SQLite software
+that I may cause to be published on that website in the future.
+I make this dedication for the benefit of the public at large and
+to the detriment of my heirs and successors. I intend this
+dedication to be an overt act of relinquishment in perpetuity of
+all present and future rights to the SQLite software under copyright
+law.
+</p></li>
+
+<li><p>
+To the best of my knowledge and belief, the changes and enhancements that
+I have contributed to SQLite are either originally written by me
+or are derived from prior works which I have verified are also
+in the public domain and are not subject to claims of copyright
+by other parties.
+</p></li>
+
+<li><p>
+To the best of my knowledge and belief, no individual, business, organization,
+government, or other entity has any copyright interest
+in the SQLite software as it existed on the
+SQLite website as of the date on the signature line below.
+</p></li>
+
+<li><p>
+I agree never to publish any additional information
+to the SQLite website (by CVS, email, scp, FTP, or any other means) unless
+that information is an original work of authorship by me or is derived from
+prior published versions of SQLite.
+I agree never to copy and paste code into the SQLite code base from
+other sources.
+I agree never to publish on the SQLite website any information that
+would violate a law or breach a contract.
+</p></li>
+</ol>
+
+<p>
+<table width="100%" cellpadding="0" cellspacing="0">
+<tr>
+<td width="60%" valign="top">
+Signature:
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+</td><td valign="top" align="left">
+Date:
+</td></tr>
+<td colspan=2>
+Name (printed):
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/www/copyright-release.pdf b/www/copyright-release.pdf
new file mode 100644
index 0000000..9465d31
--- /dev/null
+++ b/www/copyright-release.pdf
Binary files differ
diff --git a/www/copyright.html b/www/copyright.html
new file mode 100644
index 0000000..8a0551b
--- /dev/null
+++ b/www/copyright.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Copyright</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h2>SQLite Is Public Domain</h2>
+
+<div class="rightsidebar desktoponly">
+<center>
+<img src="images/nocopy.gif"><br>
+SQLite is in the<br>
+<a href="http://en.wikipedia.org/wiki/Public_Domain">Public Domain</a>
+</center>
+</div>
+
+<p>
+All of the code and documentation in SQLite has been dedicated to the
+<a href="http://en.wikipedia.org/wiki/Public_Domain">public domain</a>
+by the authors.
+All code authors, and representatives of the companies they work for,
+have signed affidavits dedicating their contributions to
+the public domain and originals of
+those signed affidavits are stored in a firesafe at the main offices
+of <a href="https://www.hwaci.com">Hwaci</a>. All contributors are citizens
+of countries that allow creative works to be dedicated into the public
+domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute
+the original SQLite code, either in source code form or as a compiled binary,
+for any purpose, commercial or non-commercial, and by any means.
+</p>
+
+<p>
+The previous paragraph applies to the deliverable code and documentation
+in SQLite - those parts of the SQLite library that you actually bundle and
+ship with a larger application. Some scripts used as part of the
+build process (for example the "configure" scripts generated by autoconf)
+might fall under other open-source licenses. Nothing from these build
+scripts ever reaches the final deliverable SQLite library, however, and
+so the licenses associated with those scripts should not be
+a factor in assessing your rights to copy and use the SQLite library.
+</p>
+
+<p>
+All of the deliverable code in SQLite has been written from scratch.
+No code has been taken from other projects or from the open
+internet. Every line of code can be traced back to its original
+author, and all of those authors have public domain dedications
+on file. So the SQLite code base is clean and is
+uncontaminated with licensed code from other projects.
+</p>
+
+<a name="notopencontrib"></a>
+
+<h2>Open-Source, not Open-Contribution</h2>
+
+<p>
+SQLite is open-source, meaning that you can make as many copies of it as
+you want and do whatever you want with those copies, without limitation.
+But SQLite is not open-contribution. In order to keep SQLite in the public
+domain and ensure that the code does not become contaminated with proprietary
+or licensed content, the project does not accept patches from people who
+have not submitted an affidavit dedicating their contribution into the
+public domain.
+
+<p>
+All of the code in SQLite is original, having been written
+specifically for use by SQLite. No code has been copied from unknown
+sources on the internet.
+
+<a name="warrantyoftitle"></a>
+
+
+<div class="rightsidebar">
+<form method="GET" action="https://www.sqlite.org/purchase/license">
+<input type="submit" value="Buy An SQLite License">
+</form>
+</div>
+
+<h2>Warranty of Title</h2>
+
+<p>
+SQLite is in the public domain and does not require a license.
+Even so, some organizations want legal proof of their right to use
+SQLite. Circumstances where this might occurs include the following:
+</p>
+
+<ul>
+<li> Your company desires indemnity against claims of copyright infringement.
+<li> You are using SQLite in a jurisdiction that does not recognize
+ the public domain. </li>
+<li> You are using SQLite in a jurisdiction that does not recognize
+ the right of an author to dedicate their work to the public
+ domain. </li>
+<li> You want to hold a tangible legal document
+ as evidence that you have the legal right to use and distribute
+ SQLite. </li>
+<li> Your legal department tells you that you must purchase a license.
+ </li>
+</ul>
+
+<p>
+If any of the above circumstances apply to you,
+<a href="https://www.hwaci.com/">Hwaci</a>, the company that employs
+all the developers of SQLite, will
+<a href="https://www.sqlite.org/purchase/license">sell you
+a Warranty of Title for SQLite</a>.
+A Warranty of Title is a legal document that asserts that the claimed
+authors of SQLite are the true authors, and that the authors
+have the legal right to dedicate the SQLite to the public domain, and
+that Hwaci will vigorously defend against challenges to those claims.
+All proceeds from the sale of SQLite Warranties of Title are used to fund
+continuing improvement and support of SQLite.
+</p>
+
+<h2>Contributed Code</h2>
+
+<p>
+In order to keep SQLite completely free and unencumbered by copyright,
+the project does not accept patches. If you would like to suggest a
+change and you include a patch as a proof-of-concept, that would
+be great. However, please do not be offended if we rewrite your patch
+from scratch.
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/copyright.in?m=19090139cc8cb2157">2021-11-10 19:19:27</a> UTC </small></i></p>
+
diff --git a/www/cpu.html b/www/cpu.html
new file mode 100644
index 0000000..563dc5a
--- /dev/null
+++ b/www/cpu.html
@@ -0,0 +1,377 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Measuring and Reducing CPU Usage in SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Measuring and Reducing CPU Usage in SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#measuring_performance">2. Measuring Performance</a></div>
+<div class="fancy-toc2"><a href="#compile_options">2.1. Compile Options</a></div>
+<div class="fancy-toc2"><a href="#workload">2.2. Workload</a></div>
+<div class="fancy-toc2"><a href="#performance_measurement">2.3. Performance Measurement</a></div>
+<div class="fancy-toc2"><a href="#microoptimizations">2.4. Microoptimizations</a></div>
+<div class="fancy-toc1"><a href="#performance_measurement_workflow">3. Performance Measurement Workflow</a></div>
+<div class="fancy-toc1"><a href="#limitations">4. Limitations</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>The graph below shows the number of CPU cycles used by SQLite on a
+standard workload, for versions of SQLite going back about 10 years.
+Recent versions of SQLite use about one third as many the CPU cycles
+compared to older versions.
+
+</p><p>
+This article describes how the SQLite developers measure CPU usage,
+what those measurements actually mean, and the techniques used by
+SQLite developers on their continuing quest to further reduce the
+CPU usage of the SQLite library.
+</p>
+
+<center>
+<hr>
+<div class="imgcontainer">
+<img src="./images/cpu-usage.jpg"></div><br>
+Measured using cachegrind on Ubuntu 16.04 on x64 with gcc 5.4.0 and -Os.<br>
+<hr>
+</center>
+
+<h1 id="measuring_performance"><span>2. </span>Measuring Performance</h1>
+
+<p>In brief, the CPU performance of SQLite is measured as follows:
+
+</p><p></p><ol>
+<li> Compile SQLite in an as-delivered configuration, without any special
+ telemetry or debugging options.
+</li><li> Link SQLite against a test program that runs approximately 30,000
+ SQL statements representing a typical workload.
+</li><li> Count the number of CPU cycles consumed using
+ <a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a>.
+</li></ol>
+
+<h2 id="compile_options"><span>2.1. </span>Compile Options</h2>
+
+<p>For performance measurement, SQLite is compiled in approximately the same
+way as it would be for use in production systems. The compile-time configuration
+is "approximate" in the sense that every production use of SQLite is
+different. Compile-time options used by one system are not necessarily
+the same as those used by others. The key point is that options that
+significantly impact the generated machine code are avoided. For example,
+the -DSQLITE_DEBUG option is omitted because that option inserts thousands
+of assert() statements in the middle of performance critical sections of the
+SQLite library. The -pg option (on GCC) is omitted because it causes the
+compiler to emit extra probabilistic performance measuring code which interferes
+with actual performance measurements.
+
+</p><p>
+For performance measurements,
+the -Os option is used (optimize for size) rather than -O2 because the
+-O2 option creates so much code movement that it is difficult to associate
+specific CPU instructions to C source code lines.
+
+</p><h2 id="workload"><span>2.2. </span>Workload</h2>
+
+<p>
+The "typical" workload is generated by the
+<a href="https://sqlite.org/src/file/test/speedtest1.c">speedtest1.c</a>
+program in the canonical SQLite source tree. This program strives to
+exercise the SQLite library in a way that is typical of real-world
+applications. Of course, every application is different, and so
+no test program can exactly mirror the behavior of all applications.
+
+</p><p>
+The speedtest1.c program is updated from time to time as the SQLite
+developers' understanding of what constitutes "typical" usage evolves.
+
+</p><p>
+The
+<a href="https://sqlite.org/src/file/tool/speed-check.sh">speed-check.sh</a> shell
+script, also in the canonical source tree, is used to run the speedtest1.c
+program. To replicate the performance measurements, collect the following
+files into a single directory:
+</p><ul>
+<li> the "speed-check.sh" script,
+</li><li> the "speedtest1.c" test program, and
+</li><li> the <a href="amalgamation.html">SQLite amalgamation</a> source files "sqlite3.c" and
+ "sqlite3.h"
+</li></ul>
+<p>
+Then run "sh speed-check.sh trunk".
+
+
+</p><h2 id="performance_measurement"><span>2.3. </span>Performance Measurement</h2>
+
+<p>
+<a href="http://valgrind.org/docs/manual/cg-manual.html">Cachegrind</a> is used to
+measure performance because it gives answers that are repeatable to
+7 or more significant digits. In comparison, actual (wall-clock)
+run times are scarcely repeatable beyond one significant digit.
+
+<a name="microopt"></a>
+
+</p><h2 id="microoptimizations"><span>2.4. </span>Microoptimizations</h2>
+
+<p>
+The high repeatability of cachegrind allows the SQLite developers to
+implement and measure "microoptimizations". A microoptimization is
+a change to the code that results in a very small performance increase.
+Typical micro-optimizations reduce the number of CPU cycles by 0.1% or
+0.05% or even less. Such improvements are impossible to measure with
+real-world timings. But hundreds or thousands of microoptimizations
+add up, resulting in measurable real-world performance gains.
+
+</p><h1 id="performance_measurement_workflow"><span>3. </span>Performance Measurement Workflow</h1>
+
+<p>
+As SQLite developers edit the SQLite source code, they run the
+<a href="https://sqlite.org/src/file/tool/speed-check.sh">speed-check.sh</a>
+shell script to track the performance impact of changes. This
+script compiles the speedtest1.c program, runs it under cachegrind,
+processes the cachegrind output using the
+<a href="https://sqlite.org/src/file/tool/cg_anno.tcl">cg_anno.tcl</a> TCL
+script, then saves the results in a series of text files.
+Typical output from the speed-check.sh script looks like this:
+
+</p><blockquote><pre>
+==8683==
+==8683== I refs: <font color="red">1,060,925,768</font>
+==8683== I1 misses: 23,731,246
+==8683== LLi misses: 5,176
+==8683== I1 miss rate: 2.24%
+==8683== LLi miss rate: 0.00%
+==8683==
+==8683== D refs: 557,686,925 (361,828,925 rd + 195,858,000 wr)
+==8683== D1 misses: 5,067,063 ( 3,544,278 rd + 1,522,785 wr)
+==8683== LLd misses: 57,958 ( 16,067 rd + 41,891 wr)
+==8683== D1 miss rate: 0.9% ( 1.0% + 0.8% )
+==8683== LLd miss rate: 0.0% ( 0.0% + 0.0% )
+==8683==
+==8683== LL refs: 28,798,309 ( 27,275,524 rd + 1,522,785 wr)
+==8683== LL misses: 63,134 ( 21,243 rd + 41,891 wr)
+==8683== LL miss rate: 0.0% ( 0.0% + 0.0% )
+ text data bss dec hex filename
+ 523044 8240 1976 <font color="red">533260</font> 8230c sqlite3.o
+ 220507 1007870 7769352 sqlite3.c
+</pre></blockquote>
+
+<p>The important parts of the output (the parts that the developers pay
+the most attention to) are shown in red.
+Basically, the developers want to know the size of the compiled SQLite
+library and how many CPU cycles were needed to run the performance test.
+
+</p><p>The output from the
+<a href="https://sqlite.org/src/file/tool/cg_anno.tcl">cg_anno.tcl</a> script
+shows the number of CPU cycles spent on each line of code.
+The report is approximately 80,000 lines long. The following is a brief
+snippet taken from the middle of the report to show what it looks like:
+
+</p><blockquote><pre>
+ . SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
+ . MemPage *pPage;
+ . assert( cursorOwnsBtShared(pCur) );
+ . assert( pRes!=0 );
+ . assert( *pRes==0 || *pRes==1 );
+ . assert( pCur-&gt;skipNext==0 || pCur-&gt;eState!=CURSOR_VALID );
+ 369,648 pCur-&gt;info.nSize = 0;
+ 369,648 pCur-&gt;curFlags &amp;= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
+ 369,648 *pRes = 0;
+ 739,296 if( pCur-&gt;eState!=CURSOR_VALID ) return btreeNext(pCur, pRes);
+ 1,473,580 pPage = pCur-&gt;apPage&#91;pCur-&gt;iPage&#93;;
+ 1,841,975 if( (++pCur-&gt;aiIdx&#91;pCur-&gt;iPage&#93;)&gt;=pPage-&gt;nCell ){
+ 4,340 pCur-&gt;aiIdx&#91;pCur-&gt;iPage&#93;--;
+ 5,593 return btreeNext(pCur, pRes);
+ . }
+ 728,110 if( pPage-&gt;leaf ){
+ . return SQLITE_OK;
+ . }else{
+ 3,117 return moveToLeftmost(pCur);
+ . }
+ 721,876 }
+</pre></blockquote>
+
+<p>
+The numbers on the left are the CPU cycle counts for that line of code,
+of course.
+
+</p><p>
+The cg_anno.tcl script removes extraneous details from the default
+cachegrind annotation
+output so that before-and-after reports can be compared using a
+side-by-side diff to view specific details of how a
+micro-optimization attempt affected performance.
+
+
+</p><h1 id="limitations"><span>4. </span>Limitations</h1>
+
+<p>The use of the standardized speedtest1.c workload and cachegrind has
+enabled significant performance improvement.
+However, it is important to recognize the limitations of this approach:
+
+</p><ul>
+<li><p>
+Performance measurements are done with a single compiler (gcc 5.4.0),
+optimization setting (-Os), and
+on a single platform (Ubuntu 16.04 LTS on x64). The performance of
+other compilers and processors may vary.
+
+</p></li><li><p>
+The speedtest1.c workload that is being measured tries to be representative
+of a wide range of typical uses of SQLite. But every application is
+different. The speedtest1.c workload might not be a good proxy for the
+kinds of activities performed by some applications. The SQLite developers
+are constantly working to improve the speedtest1.c program, to make it
+a better proxy for actual SQLite usage. Community feedback is welcomed.
+
+</p></li><li><p>
+The cycle counts provided by cachegrind are a good proxy for actual
+performance, but they are not 100% accurate.
+
+</p></li><li><p>
+Only CPU cycle counts are being measured here.
+CPU cycle counts are a good proxy for energy consumption,
+but do not necessary correlate well with real-world timings.
+Time spent doing I/O is not reflected in the CPU cycle counts,
+and I/O time predominates in many SQLite usage scenarios.
+</p></li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/cpu.in?m=30de04a5bf4ee2b54">2018-11-24 19:14:44</a> UTC </small></i></p>
+
diff --git a/www/crew.html b/www/crew.html
new file mode 100644
index 0000000..8e5b0ce
--- /dev/null
+++ b/www/crew.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Developers</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite Developers
+</div>
+</div>
+
+
+
+
+
+<img src="images/drh1.jpg" align="left" hspace="25" vspace="0">
+<p>
+<b>D. Richard Hipp
+</b> began the SQLite project on 2000-05-29
+and continues to serve as the project architect. Richard was born,
+lives, and works in
+<a href="http://en.wikipedia.org/wiki/Charlotte,_North_Carolina">Charlotte, North Carolina.</a> He holds degrees from
+<a href="http://www.gatech.edu/">Georgia Tech</a> (MSEE, 1984) and
+<a href="http://www.duke.edu/">Duke University</a> (PhD, 1992) and is
+the founder of the consulting firm
+<a href="https://www.hwaci.com/">Hwaci</a>.</p>
+
+<br clear="both">
+<hr>
+
+<a name="dan"></a>
+
+<img src="images/dan1.jpg" align="left" hspace="25" vspace="0">
+<p>
+<b>Dan Kennedy</b> is an Australian currently based in South-East Asia.
+He holds a degree in Computer System Engineering from the University of
+Queensland and has worked in a variety of fields, including industrial
+automation, computer graphics and embedded software development.
+Dan has been a key contributor to SQLite since 2002.
+</p>
+
+<br clear="both">
+<hr>
+
+<img src="images/joe1.jpg" align="left" hspace="25" vspace="0">
+<p>
+<b>Joe Mistachkin</b>
+(pronounced "miss-tash-kin") is a software engineer and one
+of the maintainers of Tcl/Tk. He is also the author of the TclBridge
+component and the Eagle scripting language. He has been working in the
+software industry since 1994.
+
+<br clear="both">
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/crew.in?m=520fe02caf65b59de">2018-05-31 17:37:17</a> UTC </small></i></p>
+
diff --git a/www/csv.html b/www/csv.html
new file mode 100644
index 0000000..1b87759
--- /dev/null
+++ b/www/csv.html
@@ -0,0 +1,240 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The CSV Virtual Table</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The CSV Virtual Table
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+The CSV virtual table reads
+<a href="https://www.ietf.org/rfc/rfc4180.txt">RFC 4180</a> formatted comma-separated
+values, and returns that content as if it were rows and columns of an SQL
+table.
+</p>
+
+<p>
+The CSV virtual table is useful to applications that need to bulk-load
+large amounts of comma-separated value content.
+The CSV virtual table is also useful as a template source file for
+implementing other virtual tables.
+</p>
+
+
+<p>
+The CSV virtual table is not built into the SQLite amalgamation.
+It is available as a
+<a href="https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/csv.c">separate source file</a>
+that can be compiled into a <a href="loadext.html">loadable extension</a>.
+Typical usage of the CSV virtual table from the
+<a href="cli.html">command-line shell</a> would be something like this:
+
+</p><div class="codeblock"><pre>.load ./csv
+CREATE VIRTUAL TABLE temp.t1 USING csv(filename='thefile.csv');
+SELECT * FROM t1;
+</pre></div>
+
+<p>
+The first line of the script above causes the <a href="cli.html">command-line shell</a> to
+read and activate the run-time loadable extension for CSV. For an
+application, the equivalent C-language API is
+<a href="c3ref/load_extension.html">sqlite3_load_extension()</a>.
+Observe that the filename extension (ex: ".dll" or ".so" or ".dylib") is
+omitted from the extension filename. Omitting the filename extension is
+not required, but it helps in making the script cross-platform. SQLite
+will automatically append the appropriate extension.
+
+</p><p>
+The second line above creates a virtual table named "t1" that reads
+the content of the file named in the argument. The number and names of
+the columns is determined automatically by reading the first line of
+content. Other options to the CSV virtual table provide the ability to
+take the CSV content from a string rather than a separate file, and give
+the programmer more control over the number and names of the columns.
+The options are detailed below. The CSV virtual table is usually
+created as a TEMP table so that it exists only for the current database
+connection and does not become a permanent part of the database schema.
+Note that there is no "CREATE TEMP VIRTUAL TABLE" command in SQLite.
+Instead, prepend the "temp." schema prefix to the name of the virtual
+table.
+
+</p><p>
+The third line of the example shows the virtual table being used, to read
+all content of the CSV file. This is perhaps the simplest possible use
+of the virtual table. The CSV virtual table can be used anywhere an ordinary
+virtual table can be used. One can use the CSV virtual table inside subqueries,
+or <a href="lang_with.html">common table expressions</a> or add WHERE, GROUP BY, HAVING, ORDER BY,
+and LIMIT clauses as required.
+
+</p><h1 id="arguments"><span>2. </span>Arguments</h1>
+
+<p>
+The example above showed a single <b>filename='thefile.csv'</b> argument
+for the CSV virtual table. But other arguments are also possible.
+
+</p><ul>
+<li><p><b>filename=</b><i>FILENAME</i>
+</p><p>The <b>filename=</b> argument specifies an external file from which
+CSV content is read. Every CSV virtual table must have either a
+<b>filename=</b> argument or a <b>data=</b> argument and not both.
+
+</p></li><li><p><b>data=</b><i>TEXT</i>
+</p><p>The <b>data=</b> argument specifies that <i>TEXT</i> is the literal
+content of the CSV file.
+
+</p></li><li><p><b>schema=</b><i>SCHEMA</i>
+</p><p> The <b>schema=</b> argument specifies a <a href="lang_createtable.html">CREATE TABLE</a> statement that
+the CSV virtual table passes to the <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a> interface in
+order to define the names of the columns in the virtual table.
+
+</p></li><li><p><b>columns=</b><i>N</i>
+</p><p>The <b>columns=</b><i>N</i> argument specifies the number of columns
+in the CSV file.
+If the input data contains more columns than this,
+then the excess columns are ignored. If the input data contains fewer columns,
+then extra columns are filled with NULL.
+If the <b>columns=</b><i>N</i> argument is omitted, the first line of the
+CSV file is read to determine the number of columns.
+
+</p></li><li><p><b>header=</b><i>BOOLEAN</i><br>
+or just<br>
+<b>header</b>
+</p><p>If the <b>header</b> argument is true then the first row of the CSV file
+to be treated as a header rather than as data. The second line of the CSV
+file becomes the first row of content.
+If the <b>schema=</b> options is omitted, then the first line of the CSV
+file determines the names of the columns.
+</p></li></ul>
+
+<h1 id="column_names"><span>3. </span>Column Names</h1>
+
+<p>
+The column names of the virtual table are determined primarily by the
+<b>schema=</b> argument.
+If the <b>schema=</b> argument is omitted, but <b>header</b> is true, then
+the values found in the first line of the CSV file become the column names.
+If the <b>schema=</b> argument is omitted and <b>header</b> is false, then
+the columns are named "c0", "c1", "c2", and so forth.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/csv.in?m=5f8e2137c13221b7b">2018-11-16 01:45:15</a> UTC </small></i></p>
+
diff --git a/www/custombuild.html b/www/custombuild.html
new file mode 100644
index 0000000..94f52a6
--- /dev/null
+++ b/www/custombuild.html
@@ -0,0 +1,403 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Custom Builds Of SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+
+<h1 align="center">
+Custom Builds Of SQLite<br>
+or<br>
+Porting SQLite To New Operating Systems
+</h1>
+
+<h2>1.0 Introduction</h2>
+
+<p>For most applications, the recommended method for building
+SQLite is to use <a href="amalgamation.html">the amalgamation</a> code
+file, <b>sqlite3.c</b>, and its corresponding header file
+<b>sqlite3.h</b>. The sqlite3.c code file should compile and
+run on any Unix, Windows system without any changes
+or special compiler options. Most applications can simply include
+the sqlite3.c file together with the other C code files that make
+up the application, compile them all together, and have working
+and well configured version of SQLite.</p>
+
+<blockquote><i>Most applications work great with SQLite in its
+default configuration and with no special compile-time configuration.
+Most developers should be able to completely ignore this document
+and simply build SQLite from
+<a href="amalgamation.html">the amalgamation</a> without any
+special knowledge and without taking any special actions.</i></blockquote>
+
+<p>However, highly tuned and specialized
+applications may want or need to replace some of
+SQLite's built-in system interfaces with alternative implementations
+more suitable for the needs of the application. SQLite is designed
+to be easily reconfigured at compile-time to meet the specific
+needs of individual projects. Among the compile-time configuration
+options for SQLite are these:</p>
+
+<ul>
+<li><p> Replace the built-in mutex subsystem with an alternative
+ implementation. </p></li>
+
+<li><p> Completely disable all mutexing for use in single-threaded
+ applications. </p></li>
+
+<li><p> Reconfigure the memory allocation subsystem to use a memory
+ allocator other the malloc() implementation from the standard
+ library. </p></li>
+
+<li><p> Realign the memory allocation subsystem so that it never calls
+ malloc() at all but instead satisfies all memory requests using
+ a fixed-size memory buffer assigned to SQLite at startup. </p></li>
+
+<li><p> Replace the interface to the file system with an alternative
+ design. In other words, override all of the system calls that
+ SQLite makes in order to talk to the disk with a completely different
+ set of system calls. </p></li>
+
+<li><p> Override other operating system interfaces such as calls to obtain
+ Zulu or local time. </p></li>
+</ul>
+
+<p>Generally speaking, there are three separate subsystems within
+SQLite that can be modified or overridden at compile-time. The
+mutex subsystem is used to serialize access to SQLite resources that
+are shared among threads. The memory allocation subsystem is used
+to allocate memory required by SQLite objects and for the database
+cache. Finally, the <a href="c3ref/vfs.html">Virtual File System</a> subsystem is
+used to provide a portable interface between SQLite and the underlying
+operating system and especially the file system. We call these three
+subsystems the "interface" subsystems of SQLite.</p>
+
+<p>We emphasis that most applications are well-served by the
+built-in default implementations of the SQLite interface subsystems.
+Developers are encouraged to use the
+default built-in implementations whenever possible
+and to build SQLite without any special compile-time options or parameters.
+However, some highly specialized applications may benefit from
+substituting or modifying one or more of these built-in SQLite
+interface subsystems.
+Or, if SQLite is used on an operating system other than
+Unix (Linux or Mac OS X), Windows (Win32 or WinCE), or OS/2 then none
+of the interface subsystems that come built into SQLite will work
+and the application will need to provide alternative implementations
+suitable for the target platform.</p>
+
+<h2>2.0 Configuring Or Replacing The Mutex Subsystem</h2>
+
+<p>In a multithreaded environment, SQLite uses mutexes to serialize
+access to shared resources.
+The mutex subsystem is only required for applications that access
+SQLite from multiple threads. For single-threaded applications, or
+applications which only call SQLite from a single thread, the mutex
+subsystem can be completely disabled by recompiling with the following
+option:</p>
+
+<blockquote><pre>
+-DSQLITE_THREADSAFE=0
+</pre></blockquote>
+
+<p>Mutexes are cheap but they are not free, so performance will be better
+when mutexes are completely disabled. The resulting library footprint
+will also be a little smaller. Disabling the mutexes at compile-time
+is a recommended optimization for applications where it makes sense.</p>
+
+<p>When using SQLite as a shared library, an application can test to see
+whether or not mutexes have been disabled using the
+<a href="c3ref/threadsafe.html">sqlite3_threadsafe()</a> API. Applications that link against SQLite at
+run-time and use SQLite from multiple threads should probably check this
+API to make sure they did not accidentally get linked against a version of
+the SQLite library that has its mutexes disabled. Single-threaded
+applications will, of course, work correctly regardless of whether or
+not SQLite is configured to be threadsafe, though they will be a little
+bit faster when using versions of SQLite with mutexes disabled.</p>
+
+<p>SQLite mutexes can also be disabled at run-time using the
+<a href="c3ref/config.html">sqlite3_config()</a> interface. To completely disable all mutexing,
+the application can invoke:</p>
+
+<blockquote><pre>
+sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
+</pre></blockquote>
+
+<p>Disabling mutexes at run-time is not as effective as disabling them
+at compile-time since SQLite still must do a test of a boolean variable
+to see if mutexes are enabled or disabled at each point where a mutex
+might be required. But there is still a performance advantage for
+disabling mutexes at run-time.</p>
+
+<p>For multi-threaded applications that are careful about how they
+manage threads, SQLite supports an alternative run-time configuration
+that is half way between not using any mutexes and the default situation
+of mutexing everything in sight. This in-the-middle mutex alignment can
+be established as follows:</p>
+
+<blockquote><pre>
+sqlite3_config(SQLITE_CONFIG_MULTITHREAD);
+sqlite3_config(SQLITE_CONFIG_MEMSTATUS, 0);
+</pre></blockquote>
+
+<p>There are two separate configuration changes here which can
+be used either together or separately. The
+<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">SQLITE_CONFIG_MULTITHREAD</a> setting disables the mutexes that
+serialize access to <a href="c3ref/sqlite3.html">database connection</a> objects and
+<a href="c3ref/stmt.html">prepared statement</a> objects. With this setting, the application
+is free to use SQLite from multiple threads, but it must make sure
+than no two threads try to access the same <a href="c3ref/sqlite3.html">database connection</a>
+or any <a href="c3ref/stmt.html">prepared statements</a> associated with the same
+<a href="c3ref/sqlite3.html">database connection</a> at the same time. Two threads can use SQLite
+at the same time, but they must use separate <a href="c3ref/sqlite3.html">database connections</a>.
+The second <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> setting disables the mechanism
+in SQLite that tracks the total size of all outstanding memory
+allocation requests. This omits the need to mutex each call
+to <a href="c3ref/free.html">sqlite3_malloc()</a> and <a href="c3ref/free.html">sqlite3_free()</a>, which saves a huge
+number of mutex operations. But a consequence of disabling the
+memory statistics mechanism is that the
+<a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a>, <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a>, and
+<a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interfaces cease to work.
+</p>
+
+<p>SQLite uses pthreads for its mutex implementation on Unix and
+SQLite requires a recursive mutex. Most modern pthread implementations
+support recursive mutexes, but not all do. For systems that do not
+support recursive mutexes, it is recommended that applications operate
+in single-threaded mode only. If this is not possible, SQLite provides
+an alternative recursive mutex implementation built on top of the
+standard "fast" mutexes of pthreads. This alternative
+implementation should work correctly as long as pthread_equal() is
+atomic and the processor has a coherent data cache. The alternative
+recursive mutex implementation is enabled by the following
+compiler command-line switch:</p>
+
+<blockquote><pre>
+-DSQLITE_HOMEGROWN_RECURSIVE_MUTEX=1
+</pre></blockquote>
+
+<p>When porting SQLite to a new operating system, it is usually necessary
+to completely replace the built-in mutex subsystem with an alternative
+built around the mutex primitives of the new operating system. This
+is accomplished by compiling SQLite with the following option:</p>
+
+<blockquote><pre>
+-DSQLITE_MUTEX_APPDEF=1
+</pre></blockquote>
+
+<p>When SQLite is compiled with the SQLITE_MUTEX_APPDEF=1 option, it
+completely omits the implementation of its
+<a href="c3ref/mutex_alloc.html">mutex primitive functions</a>. But the SQLite
+library still attempts to call these functions where necessary, so the
+application must itself implement the
+<a href="c3ref/mutex_alloc.html">mutex primitive functions</a> and link them together
+with SQLite.</p>
+
+<h2>3.0 Configuring Or Replacing The Memory Allocation Subsystem</h2>
+
+<p>By default, SQLite obtains the memory it needs for objects and
+cache from the malloc()/free() implementation of the standard library.
+There is also on-going work with experimental memory allocators that
+satisfy all memory requests from a single fixed memory buffer handed
+to SQLite at application start. Additional information on these
+experimental memory allocators will be provided in a future revision
+of this document.</p>
+
+<p>SQLite supports the ability of an application to specify an alternative
+memory allocator at run-time by filling in an instance of the
+<a href="c3ref/mem_methods.html">sqlite3_mem_methods</a> object with pointers to the routines of the
+alternative implementation then registering the new alternative
+implementation using the <a href="c3ref/config.html">sqlite3_config()</a> interface.
+For example:</p>
+
+<blockquote><pre>
+sqlite3_config(SQLITE_CONFIG_MALLOC, &my_malloc_implementation);
+</pre></blockquote>
+
+<p>SQLite makes a copy of the content of the <a href="c3ref/mem_methods.html">sqlite3_mem_methods</a> object
+so the object can be modified after the <a href="c3ref/config.html">sqlite3_config()</a> call returns.</p>
+
+<h2>4.0 Adding New Virtual File Systems</h2>
+
+<p>Since <a href="releaselog/3_5_0.html">version 3.5.0</a> (2007-09-04),
+SQLite has supported an interface called the
+<a href="c3ref/vfs.html">virtual file system</a> or "VFS".
+This object is somewhat misnamed since it
+is really an interface to the whole underlying operating system, not
+just the filesystem.</p>
+
+<p> One of the interesting features
+of the VFS interface is that SQLite can support multiple VFSes at the
+same time. Each <a href="c3ref/sqlite3.html">database connection</a> has to choose a single VFS for its
+use when the connection is first opened using <a href="c3ref/open.html">sqlite3_open_v2()</a>.
+But if a process contains multiple <a href="c3ref/sqlite3.html">database connections</a> each can choose
+a different VFS. VFSes can be added at run-time using the
+<a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> interface.</p>
+
+<p>The default builds for SQLite on Unix, Windows, and OS/2 include
+a VFS appropriate for the target platform. SQLite builds for other
+operating systems do not contain a VFS by default, but the application
+can register one or more at run-time.</p>
+
+<h2>5.0 Porting SQLite To A New Operating System</h2>
+
+<p>In order to port SQLite to a new operating system - an operating
+system not supported by default - the application
+must provide...</p>
+
+<ul>
+<li> a working mutex subsystem (but only if it is multithreaded), </li>
+<li> a working memory allocation subsystem (assuming it lacks malloc()
+in its standard library), and</li>
+<li> a working VFS implementation.</li>
+</ul>
+
+<p>All of these things can be provided in a single auxiliary C code file
+and then linked with the stock "sqlite3.c" code file to generate a working
+SQLite build for the target operating system. In addition to the
+alternative mutex and memory allocation subsystems and the new VFS,
+the auxiliary C code file should contain implementations for the
+following two routines:</p>
+
+<ul>
+<li> <a href="c3ref/initialize.html">sqlite3_os_init()</a> </li>
+<li> <a href="c3ref/initialize.html">sqlite3_os_end()</a> </li>
+</ul>
+
+<p>The "sqlite3.c" code file contains default implementations of a VFS
+and of the <a href="c3ref/initialize.html">sqlite3_initialize()</a> and <a href="c3ref/initialize.html">sqlite3_shutdown()</a> functions that
+are appropriate for Unix, Windows, and OS/2.
+To prevent one of these default components from being loaded when sqlite3.c
+is compiled, it is necessary to add the following compile-time
+option:</p>
+
+<blockquote><pre>
+-DSQLITE_OS_OTHER=1
+</pre></blockquote>
+
+
+<p>The SQLite core will call <a href="c3ref/initialize.html">sqlite3_initialize()</a> early. The auxiliary
+C code file can contain an implementation of sqlite3_initialize() that
+registers an appropriate VFS and also perhaps initializes an alternative
+mutex system (if mutexes are required) or does any memory allocation
+subsystem initialization that is required.
+The SQLite core never calls <a href="c3ref/initialize.html">sqlite3_shutdown()</a> but it is part of the
+official SQLite API and is not otherwise provided when compiled with
+-DSQLITE_OS_OTHER=1, so the auxiliary C code file should probably provide
+it for completeness.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/custombuild.in?m=681be6b966409b3f6">2021-11-17 15:30:21</a> UTC </small></i></p>
+
diff --git a/www/cves.html b/www/cves.html
new file mode 100644
index 0000000..e989a18
--- /dev/null
+++ b/www/cves.html
@@ -0,0 +1,714 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Vulnerabilities</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Vulnerabilities
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#executive_summary">1. Executive Summary</a></div>
+<div class="fancy-toc1"><a href="#about_cves">2. About CVEs</a></div>
+<div class="fancy-toc2"><a href="#a_separate_sql_injection_vulnerability_is_usually_required">2.1. A separate SQL injection vulnerability is usually required</a></div>
+<div class="fancy-toc2"><a href="#defense_against_dark_arts">2.2. Defense Against Dark Arts</a></div>
+<div class="fancy-toc2"><a href="#the_sqlite_developer_policy_toward_cves">2.3. The SQLite Developer Policy Toward CVEs</a></div>
+<div class="fancy-toc1"><a href="#status_of_recent_sqlite_cves">3. Status Of Recent SQLite CVEs</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="executive_summary"><span>1. </span>Executive Summary</h1>
+
+<ul>
+<li><p>
+CVEs about SQLite probably do not apply to your use of SQLite.
+
+</p></li><li><p>
+All historical vulnerabilities reported against SQLite require at least
+one of these preconditions:
+</p><ol type="1">
+<li><p>
+The attacker can submit and run arbitrary SQL statements.
+</p></li><li><p>
+The attacker can submit a maliciously crafted database file to the
+application that the application will then open and query.
+</p></li></ol>
+
+</li><li><p>
+Few real-world applications meet either of these preconditions, and hence
+few real-world applications are vulnerable, even if they use older
+and unpatched versions of SQLite.
+
+</p></li><li><p>
+The SQLite development team fixes bugs promptly,
+usually within hours of discovery. New releases of SQLite
+are issued if the bug seems likely to impact real-world
+applications.
+
+</p></li><li><p>
+Grey-hat hackers are rewarded based on the number and severity of
+CVEs that they write. This results in a proliferation of CVEs that
+have minor impact, or no impact at all, but which make
+exaggerated impact claims.
+
+</p></li><li><p><a name="notnew"></a>
+Very few CVEs written about SQLite are real vulnerabilities in the
+sense that they do not give any new capabilities to an attacker.
+Consider:
+</p><ol type="a">
+<li><p>
+ Almost all CVEs written against SQLite require the ability to
+ inject and run arbitrary SQL.
+</p></li><li><p>
+ The advertised consequence of most CVEs is "denial of service",
+ typically by causing a crash through a NULL pointer dereference or
+ a division by zero, or similar.
+</p></li><li><p>
+ But if an attacker can already run
+ arbitrary SQL, they do not need a bug to cause a denial of service.
+ There are plenty of perfectly legal and valid SQL statements
+ that will consume unlimited CPU, memory, and disk I/O in order
+ to create a denial-of-service without requiring help from bugs.
+</p></li><li><p>
+ Hence, the mere fact that an attacker has a way to inject and run
+ arbitrary SQL is in and of itself a denial-of-service attack. That
+ the arbitrary SQL might also tickle a bug in SQLite and cause a
+ crash is not a new vulnerability.
+</p></li></ol>
+
+</li><li><p>
+The SQLite developers do not write CVEs. Any CVEs you find on
+SQLite are generated by third-parties, often without any input from the
+core developers. A common scenario is that someone will report a bug in
+SQLite, which will promptly be fixed, then weeks later a CVE for that bug will
+appear, unbeknownst to the developers.
+
+</p></li><li><p>
+You should not assume that a CVE about
+SQLite contains authoritative information.
+CVEs often contain inaccuracies.
+The SQLite developers have attempted to add clarifications and
+corrections to CVEs about SQLite.
+
+</p></li></ul>
+
+<h1 id="about_cves"><span>2. </span>About CVEs</h1>
+
+<p>CVEs ("Common Vulnerabilities and Exposures") are reports of software
+bugs that might allow a system to be hacked. The idea
+behind CVEs is sound. They provide a common naming scheme whereby
+software bugs that might compromise information security can be easily
+tracked.
+
+</p><p>While the original idea being CVEs is sound, the current processes for
+creating and managing CVEs are inadequate. There are countless grey-hat
+hackers running fuzzers against a wide-variety of open-source software
+products (SQLite as well as many others) and writing up CVEs against
+any problems they find. The grey-hats are rewarded, sometimes with
+prestige and sometimes financially, by the number and severity of
+the CVEs they write. This incentive results in a proliferation
+of CVEs which are often not well-vetted and which can have exaggerated
+impact claims. The quality-control procedures for CVEs are unable
+to cope with this flood of inputs, making it difficult to correct
+exaggerated, misleading, omitted, or inaccurate claims.
+
+</p><p>This is not to say that CVEs are useless. CVEs do still (mostly)
+report actual bugs. But in most cases the bugs are not true vulnerabilities,
+in the sense that they do not contribute to data loss or compromise
+in and of themselves.
+It is good that bugs are reported and fixed. But not every bug is
+accessible from every application. In the case of SQLite, most of the
+bugs reported by CVEs are inaccessible in most applications. Upgrading
+to the latest version of SQLite is always a good plan, but it need not
+be an emergency just because an anonymous grey-hat on the internet
+wrote up a CVE.
+
+</p><h2 id="a_separate_sql_injection_vulnerability_is_usually_required"><span>2.1. </span>A separate SQL injection vulnerability is usually required</h2>
+
+<p>
+Other C-libraries that process complex structured inputs will
+routinely be asked to deal with unvetted inputs from untrusted
+sources. Libraries like libjpeg, or libzip, or OpenSSL are
+handed input streams that come directly from potentially hostile
+agents.
+
+</p><p>
+But database engines like SQLite are usually not this way.
+The SQL scripts that are passed into SQLite come from the
+(trusted) application itself, not from an attacker. Sometimes
+applications contain bugs by which an external attacker can
+trick the application into sending SQL of the attackers design
+into the database engine. This is a separate bug in the
+application called an
+<a href="https://en.wikipedia.org/wiki/SQL_injection">SQL Injection
+vulnerability</a>. Since SQL text is executable code, an
+SQL Injection vulnerability is actually a special case of a
+<a href="https://en.wikipedia.org/wiki/Arbitrary_code_execution">Remote
+Code Execution (RCE) vulnerability</a>. An SQL Injection is perhaps not
+quite as bad as other kinds of RCEs because,
+while SQL is a powerful language, it is not as convenient
+for crafting an exploit as Python or shell script or raw machine code.
+Nevertheless, an SQL Injection is a serious problem.
+
+</p><p>
+Most CVEs written about SQLite assume that the attacker is
+able to run arbitrary SQL scripts in SQLite. In most applications,
+this means that there must first be an SQL Injection vulnerability
+that allows the attacker to inject the malicious SQL.
+
+</p><p>
+A few applications do allow untrusted SQL scripts received from
+potentially hostile agents to be run direct in SQLite. The main
+example of this is the Chrome and Safari web browsers, which allow
+an anonymous web page to run SQL using the WebSQL feature of Javascript.
+This is done inside a sandbox with tightly controlled constraints on
+resources, lest the SQL script try to soak up all available memory
+or CPU cycles in a denial-of-service attack. Chrome and Safari
+have the infrastructure in place to allow a hostile agent to run
+code which does not harm or compromise the rest of the machine.
+They have to, as they also run Javascript which could, if not
+tightly controlled, do even more damage than unrestrained SQL.
+Apart from Chrome and Safari, no applications known to the
+SQLite developers deliberately allows an anonymous remote agent
+to run arbitrary SQL text.
+
+</p><p>However, most CVEs written against SQLite flippantly assume
+that an attacker is free to run any arbitrary SQL in the database
+engine. So to a good approximation, this means most CVEs
+written against SQLite really only apply to SQLite as it is
+used in Chrome and Safari. Or, in other words, most CVEs
+for SQLite do not apply to you unless you are one of the
+developers of Chrome or Safari.
+
+</p><h2 id="defense_against_dark_arts"><span>2.2. </span>Defense Against Dark Arts</h2>
+
+<p>
+Most applications can use SQLite without having to worry about
+bugs in obscure SQL inputs. If the application controls
+the SQL, and the application is not deliberately trying to break
+SQLite, then everything should just work.
+It is not necessary to have the latest patched version of SQLite.
+Any older version should work just fine.
+
+</p><p>
+However, there are some occasions where an application does need
+to be able to safely run untrusted SQL. The SQLite developers work hard
+to make SQLite safe for this purpose, though there are occasional
+slip-ups. It is good to keep up-to-date with the latest patches
+in this case. The separate <a href="security.html">defense against dark arts</a> document
+contains additional suggestions that can help prevent zero-day
+attacks in cases where SQLite is given inputs that come directly
+from untrusted sources.
+
+</p><h2 id="the_sqlite_developer_policy_toward_cves"><span>2.3. </span>The SQLite Developer Policy Toward CVEs</h2>
+
+<p>SQLite developers fix all bugs in SQLite as soon as they are reported,
+usually within a few hours. The fixes are immediately available on the
+<a href="https://sqlite.org/src/timeline">public SQLite source tree</a>.
+If a bug seems like it might cause problems for existing applications,
+a new patch release for SQLite will be issued.
+
+</p><p>However, the SQLite developers do not track CVEs. There are
+various reasons for this:
+
+</p><ol>
+<li><p>
+The developers often do not find out about CVEs until long after the
+bug is fixed. You can see this by the fact that many CVEs reference the
+bug fix in their initial report.
+
+</p></li><li><p>
+CVEs are a low-quality source of information about bugs in SQLite
+that are likely to affect most applications.
+
+</p></li><li><p>
+Almost all bugs reported by CVEs are just bugs and not
+true vulnerabilities. Claiming that they are vulnerabilities is
+stretching the meaning of the word "vulnerability" and the SQLite
+developers do not wish to participate in that deception.
+
+</p></li><li><p>
+The developers have no editorial influence on the content of CVEs,
+and they do not like to be controlled by groups in which they have
+no voice.
+</p></li></ol>
+
+
+<a name="cvetab"></a>
+
+<h1 id="status_of_recent_sqlite_cves"><span>3. </span>Status Of Recent SQLite CVEs</h1>
+
+<p>Though the SQLite developers do not consider CVEs to be a reliable
+source of information about bugs in SQLite, they recognize that many
+groups, and especially small teams working at the bottom of tall
+bureaucracies, sometimes need to track CVEs, whether they are useful
+or not. To aid in this chore, the following table of recent CVEs
+affecting SQLite is provided.
+
+</p><p>If you notice new CVEs associated with SQLite that are not in
+the table below, please bring them to the attention of the developers
+on the <a href="https://sqlite.org/forum/about">SQLite Forum</a> so they can
+be added.
+
+</p><table border="1" cellpadding="5" cellspacing="0" style="margin-left:5ex;">
+<thead>
+<tr>
+<th valign="bottom">CVE Number</th>
+<th valign="bottom">Fix</th>
+<th valign="bottom">Comments</th>
+</tr>
+</thead>
+<tbody>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2022-46908'>CVE-2022-46908</a>
+</td>
+<td valign='top'>Bug not in the SQLite library</td>
+<td valign='top'>This is a bug in the --safe command-line option of the <a href="cli.html">command-line shell</a>
+ program that is available for accessing SQLite database files. The bug does
+ not exist in the SQLite library. Nor is it an issue for the <a href="cli.html">CLI</a> as long as
+ the user does not depend on the --safe option. It is not serious. It is
+ debatable whether or not this is a security issue.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2022-35737'>CVE-2022-35737</a>
+</td>
+<td valign='top'><a href="releaselog/3_39_2.html">3.39.2</a><br>(2022-07-21)</td>
+<td valign='top'>This bug is an array-bounds overflow. The bug is only accessible when using some
+ of the C-language APIs provided by SQLite. The bug cannot be reached using SQL
+ nor can it be reached by providing SQLite with a corrupt database file.
+ The bug only comes up when very long string inputs (greater than 2 billion bytes
+ in length) are provided as arguments to a few specific C-language interfaces,
+ and even then only under special circumstances.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2022-24854'>CVE-2022-24854</a>
+</td>
+<td valign='top'>Not a bug</td>
+<td valign='top'>This CVE describes a bug in an application that uses SQLite, not in SQLite itself.
+ SQLite is doing everything correctly. The application grants users the ability to
+ run SQL statements, using SQLite, that can leak or change information that those users
+ should not normally have access to. This is purely an application bug. It does not
+ describe a malfunction or vulnerability in SQLite.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2022-21227'>CVE-2022-21227</a>
+</td>
+<td valign='top'>Not a bug</td>
+<td valign='top'>This CVE describes a bug in a third-party packages that provides a binding
+ for SQLite to Node.js. The bug reported is in the third-party Node.js binding,
+ not in SQLite itself. Do not be confused by the use of the word "SQLite" in the
+ ambiguously-worded CVE description.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2021-45346'>CVE-2021-45346</a>
+</td>
+<td valign='top'>Not a bug</td>
+<td valign='top'>This CVE is misinformation. See the discussion around
+ <a href="https://sqlite.org/forum/forumpost/53de8864ba114bf6">SQLite forum post 53de8864ba114bf</a>.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2021-42169'>CVE-2021-42169</a>
+</td>
+<td valign='top'>Not a bug</td>
+<td valign='top'>This CVE has nothing whatsoever to do with SQLite. It is about a bug in
+ application that happens to use SQLite. Since SQLite is mentioned in the
+ CVE description, the CVE is included here to emphasize that
+ this is not an SQLite bug.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2021-36690'>CVE-2021-36690</a>
+</td>
+<td valign='top'>Bug not in the SQLite library</td>
+<td valign='top'>This bug is not in the SQLite core library, but rather in an
+ <a href="http://www.sqlite.org/src/dir?ci=trunk&name=ext/expert">
+ experimental extension</a> that is used to implement the
+ <a href="cli.html#expert">.expert command</a> in the <a href="cli.html">CLI</a>. The code that contains the bug
+ does not appear in <a href="amalgamation.html">standard SQLite builds</a>, though it
+ is included in the <a href="cli.html">sqlite3.exe command-line tool</a>.
+ Applications must link against the extra source code files that
+ implement the extension and take other deliberate actions to
+ activate the extension before the troublesome code can be run.
+ For the rare application that uses the troublesome extension,
+ the consequence of this bug is that malicious SQL can cause a
+ NULL pointer deference and denial of service.
+<a href='https://sqlite.org/forum/info/78165fa25061742f'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2021-28305'>CVE-2021-28305</a>
+</td>
+<td valign='top'>Not a bug</td>
+<td valign='top'>This is not a bug in SQLite. The bug is in a third-party application that
+ uses SQLite. SQLite is mentioned by name in the CVE description,
+ however, so we have included the CVE in the list.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2021-23404'>CVE-2021-23404</a>
+</td>
+<td valign='top'>Not a bug</td>
+<td valign='top'>This is not a bug in SQLite. The bug is in a third-party application that
+ uses SQLite and includes "sqlite" in its name. This CVE is included on the
+ list because it mentions SQLite even though the bug has nothing to do
+ with SQLite.</td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2021-20227'>CVE-2021-20227</a>
+</td>
+<td valign='top'><a href="releaselog/3_34_1.html">3.34.1</a><br>(2021-01-20)</td>
+<td valign='top'>Malicious SQL statement causes read-after-free. No harm can come of this
+ particular read-after-free instance, as far as anyone knows. The bug is
+ undetectable without a memory sanitizer. The CVE
+ claims that this bug is an RCE - a Remote Code Execution
+ vulnerability, but that claim is incorrect.
+ The RCE claim is misinformation.
+<a href='https://sqlite.org/src/info/30a4c323650cc949'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2021-20223'>CVE-2021-20223</a>
+</td>
+<td valign='top'><a href="releaselog/3_34_0.html">3.34.0</a><br>(2020-12-01)</td>
+<td valign='top'>The problem identified by this CVE is <u>not</u> a vulnerability.
+ It is a malfunction. A coding error causes <a href="fts5.html">FTS5</a>
+ to sometimes return inconsistent and incorrect results under obscure circumstances,
+ but no memory errors occur.
+<a href='https://sqlite.org/src/info/b7b7bde9b7a03665'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-15358'>CVE-2020-15358</a>
+</td>
+<td valign='top'><a href="releaselog/3_32_3.html">3.32.3</a><br>(2020-06-18)</td>
+<td valign='top'>Malicious SQL statement causes an read past the end of a heap buffer.
+<a href='https://sqlite.org/src/info/8f157e8010b22af0'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-13871'>CVE-2020-13871</a>
+</td>
+<td valign='top'><a href="releaselog/3_32_3.html">3.32.3</a><br>(2020-06-18)</td>
+<td valign='top'>Malicious SQL statement causes a read-only use-after-free memory error.
+<a href='https://sqlite.org/src/info/c8d3b9f0a750a529'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-13632'>CVE-2020-13632</a>
+</td>
+<td valign='top'><a href="releaselog/3_32_0.html">3.32.0</a><br>(2020-05-22)</td>
+<td valign='top'>Malicious SQL statement causes a read of a NULL pointer in the
+ <a href="fts3.html#matchinfo">matchinfo()</a> SQL function of the <a href="fts3.html">FTS3</a> extension, resulting in
+ denial of service.
+<a href='https://sqlite.org/src/info/a4dd148928ea65bd'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-13631'>CVE-2020-13631</a>
+</td>
+<td valign='top'><a href="releaselog/3_32_0.html">3.32.0</a><br>(2020-05-22)</td>
+<td valign='top'>Malicious SQL statement (an ALTER TABLE that tries to rename a
+ <a href="vtab.html">virtual table</a> into one of its own <a href="vtab.html#xshadowname">shadow tables</a>)
+ causes an infinite loop and denial of service.
+<a href='https://sqlite.org/src/info/eca0ba2cf4c0fdf7'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-13630'>CVE-2020-13630</a>
+</td>
+<td valign='top'><a href="releaselog/3_32_0.html">3.32.0</a><br>(2020-05-22)</td>
+<td valign='top'>Malicious SQL statement causes a read-only use-after-free,
+ possibly resulting in a incorrect output from the <a href="fts3.html#snippet">snippet()</a>
+ SQL function of the <a href="fts3.html">FTS3</a> extension. There is no known
+ way to exfiltrate data or crash the application using this bug.
+<a href='https://sqlite.org/src/info/0d69f76f0865f962'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-13435'>CVE-2020-13435</a>
+</td>
+<td valign='top'><a href="releaselog/3_32_1.html">3.32.1</a><br>(2020-05-25)</td>
+<td valign='top'>Malicious SQL statement causes a read access to a NULL pointer and
+ denial of service.
+<a href='https://www.sqlite.org/src/info/7a5279a25c57adf1'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-13434'>CVE-2020-13434</a>
+</td>
+<td valign='top'><a href="releaselog/3_32_1.html">3.32.1</a><br>(2020-05-25)</td>
+<td valign='top'>Malicious SQL statement involving the printf() SQL function results
+ in an integer overflow which can overwrite the stack with over 2
+ billion bytes of 0x30 or 0x20 (ASCII '0' or ' ').
+ Even though this is a stack overwrite, there is no known way to
+ redirect control or otherwise escalate the level of harm.
+ This is a denial-of-service attack only.
+<a href='https://www.sqlite.org/src/info/23439ea582241138'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-11656'>CVE-2020-11656</a>
+</td>
+<td valign='top'><a href="releaselog/3_32_0.html">3.32.0</a><br>(2020-05-22)</td>
+<td valign='top'>Malicious SQL statement causes read-only use-after-free of memory allocation
+ if SQLite is compile with -DSQLITE_DEBUG. Does not affect release
+ builds.
+<a href='https://www.sqlite.org/src/info/4722bdab08cb1'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-11655'>CVE-2020-11655</a>
+</td>
+<td valign='top'><a href="releaselog/3_32_0.html">3.32.0</a><br>(2020-05-22)</td>
+<td valign='top'>Malicious SQL statement causes a read using an uninitialized pointer
+ and denial-of-service.
+<a href='https://www.sqlite.org/src/info/af4556bb5c285c08'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-9327'>CVE-2020-9327</a>
+</td>
+<td valign='top'><a href="releaselog/3_32_0.html">3.32.0</a><br>(2020-05-22)</td>
+<td valign='top'>Malicious SQL statement causes a read using an uninitialized pointer
+ and denial-of-service
+<a href='https://www.sqlite.org/src/info/4374860b29383380'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2020-6405'>CVE-2020-6405</a>
+</td>
+<td valign='top'><a href="releaselog/3_31_0.html">3.31.0</a><br>(2020-01-22)</td>
+<td valign='top'>Malicious SQL statement causes a NULL pointer dereference and
+ denial-of-service
+<a href='https://www.sqlite.org/src/info/1bc783da63d58b05'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2019-20218'>CVE-2019-20218</a>
+</td>
+<td valign='top'><a href="releaselog/3_31_0.html">3.31.0</a><br>(2020-01-22)</td>
+<td valign='top'>Malicious SQL statement causes an uninitialized pointer read and
+ denial-of-service.
+<a href='https://www.sqlite.org/src/timeline?r=better-error-handling-1'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2019-19959'>CVE-2019-19959</a>
+</td>
+<td valign='top'><a href="releaselog/3_31_0.html">3.31.0</a><br>(2020-01-22)</td>
+<td valign='top'>Malicious SQL statement causes a NULL pointer dereference
+ in the <a href="zipfile.html">Zipfile virtual table</a> extension and
+ denial-of-service. This is only possible when the optional
+ <a href="zipfile.html">Zipfile virtual table</a> extension is deployed, which is not
+ the case in default builds.
+<a href='https://www.sqlite.org/src/info/cc0fb00a128fd077'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2019-19926'>CVE-2019-19926</a>
+</td>
+<td valign='top'><a href="releaselog/3_31_0.html">3.31.0</a><br>(2020-01-22)</td>
+<td valign='top'>Malicious SQL statement causes an uninitialized pointer read and
+ denial-of-service.
+<a href='https://www.sqlite.org/src/info/cba2a2a44cdf138a'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2019-19925'>CVE-2019-19925</a>
+</td>
+<td valign='top'><a href="releaselog/3_31_0.html">3.31.0</a><br>(2020-01-22)</td>
+<td valign='top'>Malicious SQL statement causes a NULL pointer dereference and
+ in the <a href="zipfile.html">Zipfile virtual table</a> extension and
+ denial-of-service. This is only possible when the optional
+ <a href="zipfile.html">Zipfile virtual table</a> extension is deployed, which is not
+ the case in default builds.
+<a href='https://www.sqlite.org/src/info/a80f84b511231204'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2019-19924'>CVE-2019-19924</a>
+</td>
+<td valign='top'><a href="releaselog/3_31_0.html">3.31.0</a><br>(2020-01-22)</td>
+<td valign='top'>Malicious SQL statement causes a uninitialized pointer reference and
+ denial-of-service.
+<a href='https://www.sqlite.org/src/info/e2bddcd4c55ba3cb'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2019-19923'>CVE-2019-19923</a>
+</td>
+<td valign='top'><a href="releaselog/3_31_0.html">3.31.0</a><br>(2020-01-22)</td>
+<td valign='top'>Malicious SQL statement causes a NULL pointer dereference and
+ denial-of-service.
+<a href='https://www.sqlite.org/src/info/862974312edf00e9'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2019-19646'>CVE-2019-19646</a>
+</td>
+<td valign='top'><a href="releaselog/3_31_0.html">3.31.0</a><br>(2020-01-22)</td>
+<td valign='top'>The <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command might cause the byte-code for a prepared
+ statement to loop indefinitely. This might enable a denial-of-service, if the
+ application has not taken appropriate and prudent steps
+ to limit the run-time of SQL statements. This is not a vulnerability, as there
+ are countless perfectly valid SQL queries, especially queries involving
+ <a href="lang_with.html#recursivecte">recursive common table expressions</a>, that also run essentially forever.
+<a href='https://sqlite.org/src/info/bd8c280671ba44a7'>(details)</a></td>
+</tr>
+
+<tr><td valign='top'>
+<a href='https://nvd.nist.gov/vuln/detail/CVE-2019-19317'>CVE-2019-19317</a>
+</td>
+<td valign='top'><a href="releaselog/3_31_0.html">3.31.0</a><br>(2020-01-22)</td>
+<td valign='top'>This CVE identifies a bug in a development check-in of
+ SQLite. The bug never appeared in any official SQLite release.
+<a href='https://www.sqlite.org/src/info/6601da58032d18ae'>(details)</a></td>
+</tr>
+
+
+</tbody>
+</table>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/cves.in?m=62f06b3313c11e780">2022-12-14 16:29:06</a> UTC </small></i></p>
+
diff --git a/www/cvstrac.css b/www/cvstrac.css
new file mode 100644
index 0000000..422aded
--- /dev/null
+++ b/www/cvstrac.css
@@ -0,0 +1,315 @@
+
+body {
+ margin: auto;
+ font-family: "Verdana" "sans-serif";
+ padding: 8px;
+}
+
+.sqlite_header {
+ margin: auto;
+}
+
+a { color: #45735f }
+a:visited { color: #734559 }
+
+.logo { position:absolute; margin:3px; }
+.tagline {
+ float:right;
+ text-align:right;
+ font-style:italic;
+ width:240px;
+ margin:12px;
+ margin-top:58px;
+}
+
+.toolbar {
+ font-variant: small-caps;
+ text-align: center;
+ line-height: 1.6em;
+ margin: 0;
+ padding:1px 8px;
+}
+.toolbar a { color: white; text-decoration: none; padding: 6px 12px; }
+.toolbar a:visited { color: white; }
+.toolbar a:hover { color: #80a796; background: white; }
+
+.content { margin: 5%; }
+.content dt { font-weight:bold; }
+.content dd { margin-bottom: 25px; margin-left:20%; }
+.content ul { padding:0px; padding-left: 15px; margin:0px; }
+
+/* rounded corners */
+.se { background: url(/images/se.png) 100% 100% no-repeat #80a796}
+.sw { background: url(/images/sw.png) 0% 100% no-repeat }
+.ne { background: url(/images/ne.png) 100% 0% no-repeat }
+.nw { background: url(/images/nw.png) 0% 0% no-repeat }
+/* CVSTrac default stylesheet.
+** This more or less replicates the "original" CVSTrac style.
+*/
+
+/* ********* Standard/default header and footer ************************* */
+body {background-color: white}
+#footer {font-size: .67em; clear: both;}
+
+hr {clear: both;}
+
+/* ********* Page header ************************************************ */
+
+#header {
+ background: #f0ffff;
+ padding: 0px;
+ border: 2px #80a796 solid;
+ margin: 0px;
+ display: block;
+ position: relative;
+ }
+
+#title {font-weight: bold;
+ font-size: 1.17em;
+ margin: 2px;
+ max-width: 30%;
+ }
+
+#identity {font-size: .83em;
+ font-weight: normal;
+ margin: 2px;
+ max-width: 30%;
+ }
+
+/* The "current" item is traditionally omitted from the navigation bar */
+#navigation #current {display: none;}
+
+#navigation li {display: inline; margin: 1px; white-space: nowrap;}
+#navigation li :before {content: "["; color: black;}
+#navigation li :after {content: "]"; color: black;}
+#navigation {text-align: right; list-style-type: none;
+ padding: 0;
+ margin: 0;
+ float: right;
+ max-width: 50%;
+ position: absolute;
+ top: 0em;
+ right: 0em;
+ }
+
+#action li {display: inline; margin: 1px; white-space: nowrap;}
+#action li :before {content: "["; color: black;}
+#action li :after {content: "]"; color: black;}
+#action {list-style-type: none; text-align: right; background: #f0f0f0;
+ margin: 1px;
+ padding: 1px;
+ padding: 1px;
+ clear: both;
+ }
+
+#content {clear: both;}
+
+/* File breadcrumb off by default in stock CVSTrac */
+#breadcrumb {display: none}
+
+/* ********* Bits and boxes ******************************************** */
+
+/* wiki history */
+#history {
+ float: right;
+ border: 2px #a0b5f4 solid;
+ white-space: nowrap;
+ margin: 2px; padding: 0px;
+ }
+#history h3 { margin: 2px; padding: 0px; background: #d0d9f4;
+ font-size: 1em; font-weight: bold;
+ text-align: center;
+ }
+#history ul { list-style-type: none; text-align: left;
+ margin: 2px; padding: 0px;
+ }
+#history .current { font-weight: bold; }
+#history .off { font-weight: bold; }
+#history p { margin: 2px; padding: 0px; }
+
+#wikitoc {border-spacing: 20px 0px;}
+#wikitoc th {background: #d0d0d0;}
+
+/* ********* Timeline page ******************************************** */
+#timeline {text-align: left;
+ margin: .5em 0 0 0;
+ padding: 0;
+ }
+
+/* date and milestone dividers */
+#timeline .dt {background: #f0ffff;
+ border: 2px #80a796 solid;
+ font-size: 1em; font-weight: normal;
+ padding: .25em;
+ margin: .2em 0 .2em 0;
+ float: left;
+ clear: left;
+ }
+#timeline .dm {background: #f7c0c0;
+ border: 2px #ec9898 solid;
+ font-size: 1em; font-weight: normal;
+ padding: .25em;
+ margin: .2em 0 .2em 0;
+ float: left;
+ clear: left;
+ }
+
+#timeline .entries {
+ vertical-align: top;
+ clear: both;
+ margin: 0; padding: 0;
+ margin-left: 1em;
+ }
+#timeline .entries dt {
+ clear: both;
+ float: left;
+ margin: 0; padding: 0;
+ }
+#timeline .entries dd {
+ float: left;
+ margin: 0; padding: 0;
+ }
+#timeline .entries .datetime {text-align: right;
+ width: 10%;
+ }
+#timeline .entries .time {text-align: center; /* width: 8%; */}
+#timeline .entries .hint {text-align: center; width: 5%;}
+#timeline .entries .branch {
+ background: #dddddd;
+ width: 85%;
+ }
+#timeline .entries .action {
+ width: 85%;
+ }
+
+/* timeline options, down at the bottom */
+#timelineopts {
+ margin-top: 1em;
+ padding: 3px;
+ padding-top: 1em;
+ clear: both;
+ border-top: 1px solid black;
+ }
+#timelineopts fieldset {
+ margin: 1px;
+ padding: 3px;
+ border: 1px solid black;
+ }
+#timelineopts #days {}
+#timelineopts #checkout {width: 45%; float: left; padding: 3px;}
+#timelineopts #ticket {width: 45%; float: left; padding: 3px;}
+#timelineopts #timeline {width: 45%; clear: left; float: left; padding: 3px;}
+#timelineopts #other {width: 45%; float: left; padding: 3px;}
+#timelineopts #show {clear: both;}
+
+/* ********* Setup ******************************************** */
+/* setup menu */
+#index, #setup {margin: 1em 0; padding: 0;}
+
+#index dt, #setup dt {
+ display: block;
+ width: 30%;
+ float: left;
+ margin: 0 0 0 0;
+ padding: .5em;
+ font-weight: bold;
+ clear: left;
+ white-space: nowrap;
+ }
+#index dd, #setup dd {
+ width: 55%;
+ float: left;
+ margin: 0 0 0 0;
+ padding: .5em;
+ }
+
+/* ********* Wiki formatting ******************************************** */
+/* ticket markup... various forms of "fixed" are shown as striked. This list
+** would need to be updated if the user changes the ticket states
+*/
+/* .ticket {font-weight: bold} */
+.ticket .closed, .ticket .fixed, .ticket .tested, .ticket .defer
+ {text-decoration: line-through}
+
+/* chng markup. Check-ins and milestones. */
+/* .chng {font-weight: bold} */
+/* .chng .event {color: orange} */
+/* .chng .release {color: orange} */
+/* .chng .checkin {color: red} */
+.chng .branch {background: #dddddd;}
+
+/* links to Wiki pages */
+/* .wiki {font-weight: bold} */
+.wiki .missing {color: gray; font-style: italic; font-weight: normal;}
+
+/* .diff {background: #e0e0e0} */
+/* hr.diff {visibility: hidden} */
+div.difftop {float: right}
+
+/* raw HTML in wiki */
+/* div.restricted {background-color: #e0e0e0} */
+
+/* URL's in wiki markup. This puts a special character in front, but
+** you could also use a link to an image or something...
+*/
+a.external:before {content: "\0000a4"; color: #a0a0a0;}
+
+/* Path's to code mentioned in wiki markup. */
+a.file {font-family: monospace;}
+
+/* two and three asterisks... The class names are a bit lame, but
+** I'm not sure what else to call 'em
+*/
+.two {font-size: 1.17em}
+.three {font-size: 1.33em}
+
+/* user id */
+/* .user {font-weight: bold;} */
+
+/* revision */
+/* .vers {font-style: italic;} */
+
+/* ********* Icons ****************************************************** */
+.icon:before {content: "\002022"; color: black;}
+
+.icon.milestone:before {content: "\0000a4"; color: #007878;}
+.icon.del:before {content: "\0000d7"; color: red;}
+.icon.file:before {content: "\002022"; color: black;}
+.icon.dir:before {content: "\0000bb"; color: green;}
+.icon.backup:before {content: "\0000ab"; color: black;}
+.icon.checkin:before {content: "\002022"; color: blue;}
+.icon.ticket:before {content: "\00203a"; color: blue;}
+.icon.edit:before {content: "\00002a"; color: #8C80A3;}
+.icon.attach:before {content: "\0000bb"; color: blue;}
+.icon.inspect:before {content: "\002022"; color: blue;}
+
+/* each ticket type can have a timeline icon. This is usually
+** used for the ticket creation.
+*/
+.icon.type:before {content: "\0000bb"; color: purple;}
+.icon.type.code:before {content: "\0000d7"; color: red;}
+
+/* each ticket state can also have a timeline icon */
+.icon.state:before {content: "\002666"; color: #ffa000;}
+.icon.state.new:before {content: "\0000d7"; color: red;}
+.icon.state.active:before {content: "\0000d7"; color: red;}
+.icon.state.fixed:before {content: "\00221a"; color: green;}
+.icon.state.closed:before {content: "\00221a"; color: green;}
+.icon.state.defer:before {content: "\00221a"; color: green;}
+
+/* deprecated icons... they'll disappear shortly, hopefully */
+.icon.dot:before {content: "\002022"; color: blue;}
+.icon.ptr1:before {content: "\0000bb"; color: purple;}
+
+/* ********* Other ****************************************************** */
+
+.rlog {padding: 0; margin: 0; border-width: 0;}
+.rlog td, .rlog th {text-align: left;}
+.rlog .version {width: 80px; text-align: center;}
+.rlog .date {white-space: nowrap; text-align: left;}
+
+/* Zebra stripe background effect */
+.rlog .odd {background: #efefff;}
+.rlog .milestone {background: #f7c0c0;}
+
+.rlog .branch {background: #dddddd;}
diff --git a/www/datatype3.html b/www/datatype3.html
new file mode 100644
index 0000000..f350cb4
--- /dev/null
+++ b/www/datatype3.html
@@ -0,0 +1,967 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Datatypes In SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Datatypes In SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#datatypes_in_sqlite">1. Datatypes In SQLite</a></div>
+<div class="fancy-toc1"><a href="#storage_classes_and_datatypes">2. Storage Classes and Datatypes</a></div>
+<div class="fancy-toc2"><a href="#boolean_datatype">2.1. Boolean Datatype</a></div>
+<div class="fancy-toc2"><a href="#date_and_time_datatype">2.2. Date and Time Datatype</a></div>
+<div class="fancy-toc1"><a href="#type_affinity">3. Type Affinity</a></div>
+<div class="fancy-toc2"><a href="#determination_of_column_affinity">3.1. Determination Of Column Affinity</a></div>
+<div class="fancy-toc3"><a href="#affinity_name_examples">3.1.1. Affinity Name Examples</a></div>
+<div class="fancy-toc2"><a href="#affinity_of_expressions">3.2. Affinity Of Expressions</a></div>
+<div class="fancy-toc2"><a href="#column_affinity_for_views_and_subqueries">3.3. Column Affinity For Views And Subqueries</a></div>
+<div class="fancy-toc3"><a href="#column_affinity_for_compound_views">3.3.1. Column Affinity For Compound Views</a></div>
+<div class="fancy-toc2"><a href="#column_affinity_behavior_example">3.4. Column Affinity Behavior Example</a></div>
+<div class="fancy-toc1"><a href="#comparison_expressions">4. Comparison Expressions</a></div>
+<div class="fancy-toc2"><a href="#sort_order">4.1. Sort Order</a></div>
+<div class="fancy-toc2"><a href="#type_conversions_prior_to_comparison">4.2. Type Conversions Prior To Comparison</a></div>
+<div class="fancy-toc2"><a href="#comparison_example">4.3. Comparison Example</a></div>
+<div class="fancy-toc1"><a href="#operators">5. Operators</a></div>
+<div class="fancy-toc1"><a href="#sorting_grouping_and_compound_selects">6. Sorting, Grouping and Compound SELECTs</a></div>
+<div class="fancy-toc1"><a href="#collating_sequences">7. Collating Sequences</a></div>
+<div class="fancy-toc2"><a href="#assigning_collating_sequences_from_sql">7.1. Assigning Collating Sequences from SQL</a></div>
+<div class="fancy-toc2"><a href="#collation_sequence_examples">7.2. Collation Sequence Examples</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="datatypes_in_sqlite"><span>1. </span>Datatypes In SQLite</h1>
+<p>Most SQL database engines (every SQL database engine other than SQLite,
+as far as we know) uses static, rigid typing. With static typing, the datatype
+of a value is determined by its container - the particular column in
+which the value is stored.</p>
+
+<p>SQLite uses a more general dynamic type system. In SQLite, the datatype
+of a value is associated with the value itself, not with its container.
+The dynamic type system of SQLite is backwards
+compatible with the more common static type systems of other database engines
+in the sense that SQL statements that work on statically typed databases
+work the same way in SQLite. However, the dynamic typing in SQLite allows
+it to do things which are not possible in traditional rigidly typed
+databases. <a href="flextypegood.html">Flexible typing is a feature</a> of SQLite, not a bug.</p>
+
+<p>Update:
+As of version 3.37.0 (2021-11-27), SQLite provides <a href="stricttables.html">STRICT tables</a>
+that do rigid type enforcement, for developers who prefer that kind of thing.
+
+<a name="storageclasses"></a>
+
+</p><h1 id="storage_classes_and_datatypes"><span>2. </span>Storage Classes and Datatypes</h1>
+
+<p>Each value stored in an SQLite database (or manipulated by the
+database engine) has one of the following storage classes:</p>
+<ul>
+ <li><p><b>NULL</b>.
+ The value is a NULL value.</p>
+
+ </li><li><p><b>INTEGER</b>. The value is a signed integer, stored in 0, 1,
+ 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.</p>
+
+ </li><li><p><b>REAL</b>. The value is a floating point value, stored as
+ an 8-byte IEEE floating point number.</p>
+
+ </li><li><p><b>TEXT</b>. The value is a text string, stored using the
+ database encoding (UTF-8, UTF-16BE or UTF-16LE).</p>
+
+ </li><li><p><b>BLOB</b>. The value is a blob of data, stored exactly as
+ it was input.</p>
+</li></ul>
+
+<p>A storage class is more general than a datatype.
+The INTEGER storage class, for example, includes 7 different integer
+datatypes of different lengths.
+<a href="fileformat2.html#record_format">This makes a difference on disk.</a>
+But as soon as INTEGER values are read off of disk and into memory for
+processing, they are converted to the most general datatype
+(8-byte signed integer).
+And so for the most part, "storage class" is indistinguishable from
+"datatype" and the two terms can be used interchangeably.</p>
+
+<p>Any column in an SQLite version 3 database,
+except an <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column, may be used to store a value
+of any storage class.</p>
+
+<p>All values in SQL statements, whether they are literals embedded in SQL
+statement text or <a href="lang_expr.html#varparam">parameters</a> bound to
+<a href="c3ref/stmt.html">precompiled SQL statements</a>
+have an implicit storage class.
+Under circumstances described below, the
+database engine may convert values between numeric storage classes
+(INTEGER and REAL) and TEXT during query execution.
+</p>
+
+<a name="boolean"></a>
+
+<h2 id="boolean_datatype"><span>2.1. </span>Boolean Datatype</h2>
+
+<p>SQLite does not have a separate Boolean storage class.
+Instead, Boolean values are stored as integers 0 (false) and 1 (true).</p>
+
+<p>SQLite recognizes the keywords "TRUE" and "FALSE",
+as of version 3.23.0 (2018-04-02) but those keywords are
+really just alternative spellings for the integer literals 1 and 0
+respectively.
+
+<a name="datetime"></a>
+
+</p><h2 id="date_and_time_datatype"><span>2.2. </span>Date and Time Datatype</h2>
+
+<p>SQLite does not have a storage class set aside for storing
+dates and/or times.
+Instead, the built-in <a href="lang_datefunc.html">Date And Time Functions</a> of SQLite are capable of
+storing dates and times as TEXT, REAL, or INTEGER values:</p>
+
+<ul>
+<li><b>TEXT</b> as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
+</li><li><b>REAL</b> as Julian day numbers, the number of days since
+noon in Greenwich on November 24, 4714 B.C. according to the
+proleptic Gregorian calendar.
+</li><li><b>INTEGER</b> as Unix Time, the number of seconds since
+1970-01-01 00:00:00 UTC.
+</li></ul>
+
+<p>Applications can choose to store dates and times in any of these
+formats and freely convert between formats using the built-in
+<a href="lang_datefunc.html">date and time functions</a>.</p>
+
+
+<a name="affinity"></a>
+
+<h1 id="type_affinity"><span>3. </span>Type Affinity</h1>
+
+<p>
+SQL database engines that use rigid typing will usually try to
+automatically convert values to the appropriate datatype. Consider this:
+
+</p><blockquote><pre>
+CREATE TABLE t1(a INT, b VARCHAR(10));
+INSERT INTO t1(a,b) VALUES('123',456);
+</pre></blockquote>
+
+<p>
+Rigidly-typed database will convert the string '123' into an
+integer 123 and the integer 456 into a string '456' prior to
+doing the insert.
+
+</p><p>
+In order to maximize compatibility between SQLite and other database
+engines, and so that the example above will work on SQLite as it does
+on other SQL database engines,
+SQLite supports the concept of "type affinity" on columns.
+The type affinity of a column is the recommended type for data stored
+in that column. The important idea here is that the type is recommended, not
+required. Any column can still store any type of data.
+It is just that some columns, given the choice, will prefer to use
+one storage class over another. The preferred storage class for
+a column is called its "affinity".
+</p>
+
+<p>Each column in an SQLite 3 database is assigned one of the
+following type affinities:</p>
+<ul>
+ <li>TEXT</li>
+ <li>NUMERIC</li>
+ <li>INTEGER</li>
+ <li>REAL</li>
+ <li>BLOB</li>
+</ul>
+
+<p>(Historical note: The "BLOB" type affinity used to be called "NONE".
+But that term was easy to confuse with "no affinity" and so it was
+renamed.)
+
+</p><p>A column with TEXT affinity stores all data using storage classes
+NULL, TEXT or BLOB. If numerical data is inserted into a column with
+TEXT affinity it is converted into text form before being stored.</p>
+
+<p>A column with NUMERIC affinity may contain values using all five
+storage classes. When text data is inserted into a NUMERIC column, the
+storage class of the text is converted to INTEGER or REAL (in order of
+preference) if the text is a well-formed integer or real literal, respectively.
+If the TEXT value is a well-formed integer literal that is too large
+to fit in a 64-bit signed integer, it is converted to REAL.
+For conversions between TEXT and REAL storage classes, only the first
+15 significant decimal digits of the number are preserved.
+If the TEXT value is not a well-formed integer or real literal,
+then the value is stored as TEXT.
+For the purposes of this paragraph, hexadecimal integer
+literals are not considered well-formed and are stored as TEXT.
+(This is done for historical compatibility with versions of SQLite
+prior to <a href="releaselog/3_8_6.html">version 3.8.6</a> 2014-08-15 where hexadecimal integer
+literals were first introduced into SQLite.)
+If a floating point value that can be represented exactly as an integer
+is inserted into a column with NUMERIC affinity, the value is
+converted into an integer.
+No attempt is made to convert NULL or BLOB values.</p>
+
+<p>A string might look like a floating-point literal with
+a decimal point and/or exponent notation but as long as
+the value can be expressed as an integer, the NUMERIC affinity will convert
+it into an integer. Hence, the string '3.0e+5' is stored in a
+column with NUMERIC affinity as the integer 300000, not as the floating
+point value 300000.0.</p>
+
+<p>A column that uses INTEGER affinity behaves the same as a column
+with NUMERIC affinity. The difference between INTEGER and NUMERIC affinity
+is only evident in a <a href="lang_expr.html#castexpr">CAST expression</a>: The expression
+"CAST(4.0 AS INT)" returns an integer 4, whereas
+"CAST(4.0 AS NUMERIC)" leaves the value as a floating-point 4.0.</p>
+
+<p>A column with REAL affinity behaves like a column with NUMERIC
+affinity except that it forces integer values into floating point
+representation. (As an internal optimization, small floating point
+values with no fractional component and stored in columns with REAL
+affinity are written to disk as integers in order to take up less
+space and are automatically converted back into floating point as
+the value is read out.
+This optimization is completely invisible at the SQL level and can only
+be detected by examining the raw bits of the database file.)</p>
+
+<p>A column with affinity BLOB does not prefer one storage class over
+another and no attempt is made to coerce data from one storage class into
+another.</p>
+
+<a name="affname"></a>
+
+<h2 id="determination_of_column_affinity"><span>3.1. </span>Determination Of Column Affinity</h2>
+
+<p>For tables not declared as <a href="stricttables.html">STRICT</a>,
+the affinity of a column is determined by the declared type
+of the column, according to the following rules in the order shown:</p>
+
+<ol>
+ <li><p>If the declared type contains the string "INT" then it
+ is assigned INTEGER affinity.</p>
+
+ </li><li><p>If the declared type of the column contains any of the strings
+ "CHAR", "CLOB", or "TEXT" then that
+ column has TEXT affinity. Notice that the type VARCHAR contains the
+ string "CHAR" and is thus assigned TEXT affinity.</p>
+
+ </li><li><p>If the declared type for a column
+ contains the string "BLOB" or if
+ no type is specified then the column has affinity BLOB.</p>
+
+ </li><li><p>If the declared type for a column
+ contains any of the strings "REAL", "FLOA",
+ or "DOUB" then the column has REAL affinity.</p>
+
+ </li><li><p>Otherwise, the affinity is NUMERIC.</p>
+</li></ol>
+
+<p>Note that the order of the rules for determining column affinity
+is important. A column whose declared type is "CHARINT" will match
+both rules 1 and 2 but the first rule takes precedence and so the
+column affinity will be INTEGER.</p>
+
+<h3 id="affinity_name_examples"><span>3.1.1. </span>Affinity Name Examples</h3>
+
+<p>The following table shows how many common datatype names from
+more traditional SQL implementations are converted into affinities by the five rules of the
+previous section. This table shows only a small subset of the
+datatype names that SQLite will accept. Note that numeric arguments
+in parentheses that following the type name (ex: "VARCHAR(255)") are
+ignored by SQLite - SQLite does not impose any length restrictions
+(other than the large global <a href="limits.html#max_length">SQLITE_MAX_LENGTH</a> limit) on the length of
+strings, BLOBs or numeric values.</p>
+
+<blockquote>
+<table border="1" cellpadding="5">
+<tr><th>Example Typenames From The<br>CREATE TABLE Statement<br>
+ or CAST Expression
+ </th><th>Resulting Affinity
+ </th><th>Rule Used To Determine Affinity
+
+</th></tr><tr><td align="center" valign="top">
+ INT<br>
+ INTEGER<br>
+ TINYINT<br>
+ SMALLINT<br>
+ MEDIUMINT<br>
+ BIGINT<br>
+ UNSIGNED BIG INT<br>
+ INT2<br>
+ INT8
+</td><td align="center">INTEGER
+</td><td align="center">1
+
+</td></tr><tr><td align="center" valign="top">
+ CHARACTER(20)<br>
+ VARCHAR(255)<br>
+ VARYING CHARACTER(255)<br>
+ NCHAR(55)<br>
+ NATIVE CHARACTER(70)<br>
+ NVARCHAR(100)<br>
+ TEXT<br>
+ CLOB
+</td><td align="center">TEXT
+</td><td align="center">2
+
+</td></tr><tr><td align="center" valign="top">
+ BLOB<br>
+ <i>no datatype specified</i>
+</td><td align="center">BLOB
+</td><td align="center">3
+
+</td></tr><tr><td align="center" valign="top">
+ REAL<br>
+ DOUBLE<br>
+ DOUBLE PRECISION<br>
+ FLOAT
+</td><td align="center">REAL
+</td><td align="center">4
+
+</td></tr><tr><td align="center" valign="top">
+ NUMERIC<br>
+ DECIMAL(10,5)<br>
+ BOOLEAN<br>
+ DATE<br>
+ DATETIME
+</td><td align="center">NUMERIC
+</td><td align="center">5
+</td></tr></table>
+</blockquote>
+
+<p>Note that a declared type of "FLOATING POINT" would give INTEGER
+affinity, not REAL affinity, due to the "INT" at the end of "POINT".
+And the declared type of "STRING" has an affinity of NUMERIC, not TEXT.
+
+<a name="expraff"></a>
+
+</p><h2 id="affinity_of_expressions"><span>3.2. </span>Affinity Of Expressions</h2>
+
+<p>Every table column has a type affinity (one of BLOB, TEXT, INTEGER,
+REAL, or NUMERIC) but expressions do not necessarily have an affinity.
+
+</p><p>Expression affinity is determined by the following rules:
+
+</p><ul>
+ <li><p>The right-hand operand of an IN or NOT IN
+ operator has no affinity if the operand is a list, or has the same
+ affinity as the affinity of the result set expression if the operand
+ is a SELECT.
+
+ </p></li><li><p>When an expression is a simple reference to a column of a
+ real table (not a <a href="lang_createview.html">VIEW</a> or subquery) then the expression
+ has the same affinity as the table column.
+ </p><ul>
+ <li><p>Parentheses around the column name are ignored. Hence if
+ X and Y.Z are column names, then (X) and (Y.Z) are also considered
+ column names and have the affinity of the corresponding columns.
+ </p></li><li><p>
+ Any operators applied to column names, including the no-op
+ unary "+" operator, convert the column name into an expression which
+ always has no affinity. Hence even if X and Y.Z are column names, the
+ expressions +X and +Y.Z are not column names and have no affinity.
+ </p></li></ul>
+
+ </li><li><p>An expression of the form "CAST(<i>expr</i> AS <i>type</i>)"
+ has an affinity that is the same as a column with a declared
+ type of "<i>type</i>".
+
+ </p></li><li><p>A COLLATE operator has the same affinity as its left-hand side operand.
+
+ </p></li><li><p>Otherwise, an expression has no affinity.
+</p></li></ul>
+
+<a name="affview"></a>
+
+<h2 id="column_affinity_for_views_and_subqueries"><span>3.3. </span>Column Affinity For Views And Subqueries</h2>
+
+<p>The "columns" of a <a href="lang_createview.html">VIEW</a> or FROM-clause subquery are really
+the expressions
+in the result set of the <a href="lang_select.html">SELECT</a> statement that implements the VIEW
+or subquery. Thus, the affinity for columns of a VIEW or subquery
+are determined by the expression affinity rules above.
+Consider an example:
+
+</p><blockquote><pre>
+CREATE TABLE t1(a INT, b TEXT, c REAL);
+CREATE VIEW v1(x,y,z) AS SELECT b, a+c, 42 FROM t1 WHERE b!=11;
+</pre></blockquote>
+
+<p>The affinity of the v1.x column will be the same as the affinity
+of t1.b (TEXT), since v1.x maps directly into t1.b. But
+columns v1.y and v1.z both have no affinity, since those columns
+map into expression a+c and 42, and expressions always have no
+affinity.
+
+<a name="affcompoundview"></a>
+
+</p><h3 id="column_affinity_for_compound_views"><span>3.3.1. </span>Column Affinity For Compound Views</h3>
+
+<p>When the <a href="lang_select.html">SELECT</a> statement that implements a <a href="lang_createview.html">VIEW</a> or
+FROM-clause subquery is a <a href="lang_select.html#compound">compound SELECT</a> then the affinity of
+each column of the VIEW or subquery will
+be the affinity of the corresponding result column for
+one of the individual SELECT statements that make up
+the compound.
+However, it is indeterminate which of the SELECT statements will
+be used to determine affinity.
+Different constituent SELECT statements might be used to determine
+affinity at different times during query evaluation. The choice
+might vary across different versions of SQLite. The choice might
+change between one query and the next in the same version of SQLite.
+The choice might be different at different times within the same
+query. Hence, you can never be sure what affinity will be used
+for columns of a compound SELECT that have different affinities in
+the constituent subqueries.
+
+</p><p>Best practice is to avoid mixing affinities in a compound SELECT
+if you care about the datatype of the result. Mixing affinities in
+a compound SELECT can lead to surprising and unintuitive results.
+See, for example, <a href="https://sqlite.org/forum/forumpost/02d7be94d7">forum post 02d7be94d7</a>.
+
+</p><h2 id="column_affinity_behavior_example"><span>3.4. </span>Column Affinity Behavior Example</h2>
+
+<p>The following SQL demonstrates how SQLite uses column affinity
+to do type conversions when values are inserted into a table.</p>
+
+<blockquote>
+<pre>
+CREATE TABLE t1(
+ t TEXT, -- text affinity by rule 2
+ nu NUMERIC, -- numeric affinity by rule 5
+ i INTEGER, -- integer affinity by rule 1
+ r REAL, -- real affinity by rule 4
+ no BLOB -- no affinity by rule 3
+);
+
+-- Values stored as TEXT, INTEGER, INTEGER, REAL, TEXT.
+INSERT INTO t1 VALUES('500.0', '500.0', '500.0', '500.0', '500.0');
+SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1;
+text|integer|integer|real|text
+
+-- Values stored as TEXT, INTEGER, INTEGER, REAL, REAL.
+DELETE FROM t1;
+INSERT INTO t1 VALUES(500.0, 500.0, 500.0, 500.0, 500.0);
+SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1;
+text|integer|integer|real|real
+
+-- Values stored as TEXT, INTEGER, INTEGER, REAL, INTEGER.
+DELETE FROM t1;
+INSERT INTO t1 VALUES(500, 500, 500, 500, 500);
+SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1;
+text|integer|integer|real|integer
+
+-- BLOBs are always stored as BLOBs regardless of column affinity.
+DELETE FROM t1;
+INSERT INTO t1 VALUES(x'0500', x'0500', x'0500', x'0500', x'0500');
+SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1;
+blob|blob|blob|blob|blob
+
+-- NULLs are also unaffected by affinity
+DELETE FROM t1;
+INSERT INTO t1 VALUES(NULL,NULL,NULL,NULL,NULL);
+SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1;
+null|null|null|null|null
+</pre>
+</blockquote>
+
+<a name="comparisons"></a>
+
+<h1 id="comparison_expressions"><span>4. </span>Comparison Expressions</h1>
+
+<p>SQLite version 3 has the usual set of SQL comparison operators
+including "=", "==", "&lt;", "&lt;=", "&gt;", "&gt;=", "!=", "",
+"IN", "NOT IN", "BETWEEN", "IS", and "IS NOT", .
+
+<a name="sortorder"></a>
+
+</p><h2 id="sort_order"><span>4.1. </span>Sort Order</h2>
+
+<p>The results of a comparison depend on the storage classes of the
+operands, according to the following rules:</p>
+<ul>
+ <li><p>A value with storage class NULL is considered less than any
+ other value (including another value with storage class NULL).</p>
+
+ </li><li><p>An INTEGER or REAL value is less than any TEXT or BLOB value.
+ When an INTEGER or REAL is compared to another INTEGER or REAL, a
+ numerical comparison is performed.</p>
+
+ </li><li><p>A TEXT value is less than a BLOB value. When two TEXT values
+ are compared an appropriate collating sequence is used to determine
+ the result. </p>
+
+ </li><li><p>When two BLOB values are compared, the result is
+ determined using memcmp().</p>
+</li></ul>
+
+<a name="compaff"></a>
+
+<h2 id="type_conversions_prior_to_comparison"><span>4.2. </span>Type Conversions Prior To Comparison</h2>
+
+<p>SQLite may attempt to convert values between the storage classes
+INTEGER, REAL, and/or TEXT before performing a comparison.
+Whether or not any conversions are attempted before the comparison takes
+place depends on the type affinity of the operands.
+
+</p><p>To "apply affinity" means to convert an operand to a particular storage
+class if and only if the conversion does not lose essential information.
+Numeric values can always be converted into TEXT. TEXT values
+can be converted into numeric values if the text content is a well-formed
+integer or real literal, but not a hexadecimal integer literal.
+BLOB values are converted into TEXT values by simply interpreting
+the binary BLOB content as a text string in the current database
+encoding.
+
+</p><p>Affinity is applied to operands of a comparison operator prior to
+the comparison according to the following rules in the order shown:</p>
+
+<ul>
+<li><p>If one operand has INTEGER, REAL or NUMERIC affinity
+and the other operand has TEXT or BLOB or no affinity
+then NUMERIC affinity is applied to other operand.
+
+</p></li><li><p>If one operand has TEXT affinity and the other has no affinity,
+then TEXT affinity is applied to the other operand.
+
+</p></li><li><p>Otherwise, no affinity is applied and both operands are compared
+as is.</p>
+</li></ul>
+
+<p>The expression "a BETWEEN b AND c" is treated as two separate
+binary comparisons "a &gt;= b AND a &lt;= c", even if that means
+different affinities are applied to 'a' in each of the comparisons.
+Datatype conversions in comparisons of the
+form "x IN (SELECT y ...)" are handled as if
+the comparison were really "x=y".
+The expression "a IN (x, y, z, ...)" is equivalent to "a = +x OR
+a = +y OR a = +z OR ...".
+In other words, the values to the right of the IN operator (the "x", "y",
+and "z" values in this example) are considered to have no affinity,
+even if they happen to be column values or CAST expressions.
+</p>
+
+<h2 id="comparison_example"><span>4.3. </span>Comparison Example</h2>
+
+<blockquote>
+<pre>
+CREATE TABLE t1(
+ a TEXT, -- text affinity
+ b NUMERIC, -- numeric affinity
+ c BLOB, -- no affinity
+ d -- no affinity
+);
+
+-- Values will be stored as TEXT, INTEGER, TEXT, and INTEGER respectively
+INSERT INTO t1 VALUES('500', '500', '500', 500);
+SELECT typeof(a), typeof(b), typeof(c), typeof(d) FROM t1;
+text|integer|text|integer
+
+-- Because column "a" has text affinity, numeric values on the
+-- right-hand side of the comparisons are converted to text before
+-- the comparison occurs.
+SELECT a &lt; 40, a &lt; 60, a &lt; 600 FROM t1;
+0|1|1
+
+-- Text affinity is applied to the right-hand operands but since
+-- they are already TEXT this is a no-op; no conversions occur.
+SELECT a &lt; '40', a &lt; '60', a &lt; '600' FROM t1;
+0|1|1
+
+-- Column "b" has numeric affinity and so numeric affinity is applied
+-- to the operands on the right. Since the operands are already numeric,
+-- the application of affinity is a no-op; no conversions occur. All
+-- values are compared numerically.
+SELECT b &lt; 40, b &lt; 60, b &lt; 600 FROM t1;
+0|0|1
+
+-- Numeric affinity is applied to operands on the right, converting them
+-- from text to integers. Then a numeric comparison occurs.
+SELECT b &lt; '40', b &lt; '60', b &lt; '600' FROM t1;
+0|0|1
+
+-- No affinity conversions occur. Right-hand side values all have
+-- storage class INTEGER which are always less than the TEXT values
+-- on the left.
+SELECT c &lt; 40, c &lt; 60, c &lt; 600 FROM t1;
+0|0|0
+
+-- No affinity conversions occur. Values are compared as TEXT.
+SELECT c &lt; '40', c &lt; '60', c &lt; '600' FROM t1;
+0|1|1
+
+-- No affinity conversions occur. Right-hand side values all have
+-- storage class INTEGER which compare numerically with the INTEGER
+-- values on the left.
+SELECT d &lt; 40, d &lt; 60, d &lt; 600 FROM t1;
+0|0|1
+
+-- No affinity conversions occur. INTEGER values on the left are
+-- always less than TEXT values on the right.
+SELECT d &lt; '40', d &lt; '60', d &lt; '600' FROM t1;
+1|1|1
+</pre>
+</blockquote>
+
+<p>All of the results in the example are the same if the comparisons are
+commuted - if expressions of the form "a&lt;40" are rewritten
+as "40&gt;a".
+
+</p><h1 id="operators"><span>5. </span>Operators</h1>
+
+<p>Mathematical operators (+, -, *, /, %, &lt;&lt;, &gt;&gt;,
+&amp;, and |) interpret both operands as if they were numbers.
+STRING or BLOB operands automatically convert into REAL or INTEGER values.
+If the STRING or BLOB looks like a real number (if it has a decimal point
+or an exponent) or if the value is outside the range that can be represented
+as a 64-bit signed integer, then it converts to REAL. Otherwise the operand
+converts to INTEGER.
+The implied type conversion of mathematical operands is slightly different
+from <a href="lang_expr.html#castexpr">CAST to NUMERIC</a> in that string and BLOB values that
+look like real numbers but have no fractional part are kept as REAL
+instead of being converted into INTEGER as they would be for <a href="lang_expr.html#castexpr">CAST to NUMERIC</a>.
+The conversion from STRING or BLOB into REAL or INTEGER is performed
+even if it is lossy and irreversible.
+Some mathematical operators (%, &lt;&lt;, &gt;&gt;, &amp;, and |) expect
+INTEGER operands. For those operators, REAL operands are converted into INTEGER
+in the same way as a <a href="lang_expr.html#castexpr">CAST to INTEGER</a>.
+The &lt;&lt;, &gt;&gt;, &amp;, and | operators always return an INTEGER (or NULL)
+result, but the % operator returns either INTEGER or REAL (or NULL)
+depending on the type of its operands.
+A NULL operand on a mathematical operator yields a NULL result.
+An operand on a mathematical operator that does not look in any way
+numeric and is not NULL is converted to 0 or 0.0.
+Division by zero gives a result of NULL.
+</p>
+
+<h1 id="sorting_grouping_and_compound_selects"><span>6. </span>Sorting, Grouping and Compound SELECTs</h1>
+
+<p>When query results are sorted by an ORDER BY clause, values with storage
+class NULL come first, followed by INTEGER and REAL values
+interspersed in numeric order, followed by TEXT values in collating
+sequence order, and finally BLOB values in memcmp() order. No storage
+class conversions occur before the sort.</p>
+
+<p>When grouping values with the GROUP BY clause values with
+different storage classes are considered distinct, except for INTEGER
+and REAL values which are considered equal if they are numerically
+equal. No affinities are applied to any values as the result of a
+GROUP by clause.</p>
+
+<p>The compound SELECT operators UNION,
+INTERSECT and EXCEPT perform implicit comparisons between values.
+No affinity is applied to comparison operands for the implicit
+comparisons associated with UNION, INTERSECT, or EXCEPT - the values
+are compared as is.</p>
+
+<a name="collation"></a>
+
+<h1 id="collating_sequences"><span>7. </span>Collating Sequences</h1>
+
+<p>When SQLite compares two strings, it uses a collating sequence or
+collating function (two terms for the same thing) to determine which
+string is greater or if the two strings are equal.
+SQLite has three built-in collating functions: BINARY, NOCASE, and
+RTRIM.</p>
+
+<ul>
+<li><b>BINARY</b> - Compares string data using memcmp(), regardless
+ of text encoding.</li>
+<li><b>NOCASE</b> - Similar to binary, except that it uses
+ <a href="c3ref/stricmp.html">sqlite3_strnicmp()</a> for the comparison. Hence the 26 upper case
+ characters of ASCII are folded to their lower case equivalents before
+ the comparison is performed. Note that only ASCII characters
+ are case folded. SQLite does not attempt to do full
+ UTF case folding due to the size of the tables required.
+ Also note that any U+0000 characters in the string are considered
+ string terminators for comparison purposes.
+
+</li><li><b>RTRIM</b> - The same as binary, except that trailing space
+ characters are ignored.</li>
+</ul>
+
+<p>An application can register additional collating functions using
+the <a href="c3ref/create_collation.html">sqlite3_create_collation()</a> interface.</p>
+
+<p>Collating functions only matter when comparing string values.
+Numeric values are always compared numerically, and BLOBs are always
+compared byte-by-byte using memcmp().</p>
+
+<h2 id="assigning_collating_sequences_from_sql"><span>7.1. </span>Assigning Collating Sequences from SQL</h2>
+
+<p>
+Every column of every
+table has an associated collating function. If no collating function
+is explicitly defined, then the collating function defaults to BINARY.
+The COLLATE clause of the <a href="lang_createtable.html#tablecoldef">column definition</a> is used
+to define alternative collating functions for a column.
+</p>
+
+<a name="colrules"></a>
+
+
+<p>
+The rules for determining which collating function to use for a
+binary comparison operator (=, &lt;, &gt;, &lt;=, &gt;=, !=, IS, and
+IS NOT) are as follows:
+
+</p><ol>
+<li><p>If either operand has an explicit collating function assignment
+using the postfix <a href="lang_expr.html#collateop">COLLATE operator</a>, then the explicit collating function
+is used for comparison, with precedence to the collating function of the
+left operand.</p></li>
+
+<li><p>If either operand is a column, then the collating function of
+that column is used with precedence to the left operand.
+For the purposes of the previous sentence, a column name
+preceded by one or more unary "+" operators and/or CAST operators
+is still considered a column name.
+</p></li>
+
+<li><p>Otherwise, the BINARY collating function is used for comparison.
+</p></li>
+</ol>
+
+<p>
+An operand of a comparison is considered to have an explicit
+collating function assignment (rule 1 above)
+if any subexpression of the operand uses
+the postfix <a href="lang_expr.html#collateop">COLLATE operator</a>. Thus, if a <a href="lang_expr.html#collateop">COLLATE operator</a> is used
+anywhere in a comparison expression, the collating function defined
+by that operator is used for string comparison regardless of what
+table columns might be a part of that expression. If two or more
+<a href="lang_expr.html#collateop">COLLATE operator</a> subexpressions appear anywhere in a comparison, the
+left most explicit collating function is used regardless of how deeply the
+COLLATE operators are nested in the expression and regardless of
+how the expression is parenthesized.
+</p>
+
+<p>
+The expression "x BETWEEN y and z" is logically
+equivalent to two comparisons "x &gt;= y AND x &lt;= z" and works with
+respect to collating functions as if it were two separate comparisons.
+The expression "x IN (SELECT y ...)" is handled in the same way as the
+expression "x = y" for the purposes of determining the collating sequence.
+The collating sequence used for expressions of the form
+"x IN (y, z, ...)" is the collating sequence of x.
+If an explicit collating sequence is required on an IN operator
+it should be applied to the left operand, like this:
+"x COLLATE nocase IN (y,z, ...)".
+</p>
+
+<p>
+Terms of the ORDER BY clause that is part of a <a href="lang_select.html">SELECT</a>
+statement may be assigned a collating sequence using the
+<a href="lang_expr.html#collateop">COLLATE operator</a>, in which case the specified collating function is
+used for sorting.
+Otherwise, if the expression sorted by an ORDER BY clause is
+a column, then the collating sequence of the column is used to
+determine sort order. If the expression is not a column and has no
+COLLATE clause, then the BINARY collating sequence is used.
+</p>
+
+<h2 id="collation_sequence_examples"><span>7.2. </span>Collation Sequence Examples</h2>
+<p>
+The examples below identify the collating sequences that would be used to
+determine the results of text comparisons that may be performed by various
+SQL statements. Note that a text comparison may not be required, and no
+collating sequence used, in the case of numeric, blob or NULL values.
+</p>
+<blockquote>
+<pre>
+CREATE TABLE t1(
+ x INTEGER PRIMARY KEY,
+ a, /* collating sequence BINARY */
+ b COLLATE BINARY, /* collating sequence BINARY */
+ c COLLATE RTRIM, /* collating sequence RTRIM */
+ d COLLATE NOCASE /* collating sequence NOCASE */
+);
+ /* x a b c d */
+INSERT INTO t1 VALUES(1,'abc','abc', 'abc ','abc');
+INSERT INTO t1 VALUES(2,'abc','abc', 'abc', 'ABC');
+INSERT INTO t1 VALUES(3,'abc','abc', 'abc ', 'Abc');
+INSERT INTO t1 VALUES(4,'abc','abc ','ABC', 'abc');
+
+/* Text comparison a=b is performed using the BINARY collating sequence. */
+SELECT x FROM t1 WHERE a = b ORDER BY x;
+--result 1 2 3
+
+/* Text comparison a=b is performed using the RTRIM collating sequence. */
+SELECT x FROM t1 WHERE a = b COLLATE RTRIM ORDER BY x;
+--result 1 2 3 4
+
+/* Text comparison d=a is performed using the NOCASE collating sequence. */
+SELECT x FROM t1 WHERE d = a ORDER BY x;
+--result 1 2 3 4
+
+/* Text comparison a=d is performed using the BINARY collating sequence. */
+SELECT x FROM t1 WHERE a = d ORDER BY x;
+--result 1 4
+
+/* Text comparison 'abc'=c is performed using the RTRIM collating sequence. */
+SELECT x FROM t1 WHERE 'abc' = c ORDER BY x;
+--result 1 2 3
+
+/* Text comparison c='abc' is performed using the RTRIM collating sequence. */
+SELECT x FROM t1 WHERE c = 'abc' ORDER BY x;
+--result 1 2 3
+
+/* Grouping is performed using the NOCASE collating sequence (Values
+** 'abc', 'ABC', and 'Abc' are placed in the same group). */
+SELECT count(*) FROM t1 GROUP BY d ORDER BY 1;
+--result 4
+
+/* Grouping is performed using the BINARY collating sequence. 'abc' and
+** 'ABC' and 'Abc' form different groups */
+SELECT count(*) FROM t1 GROUP BY (d || '') ORDER BY 1;
+--result 1 1 2
+
+/* Sorting or column c is performed using the RTRIM collating sequence. */
+SELECT x FROM t1 ORDER BY c, x;
+--result 4 1 2 3
+
+/* Sorting of (c||'') is performed using the BINARY collating sequence. */
+SELECT x FROM t1 ORDER BY (c||''), x;
+--result 4 2 3 1
+
+/* Sorting of column c is performed using the NOCASE collating sequence. */
+SELECT x FROM t1 ORDER BY c COLLATE NOCASE, x;
+--result 2 4 3 1
+</pre>
+</blockquote>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/datatype3.in?m=f7b103ca249842b97">2022-04-12 00:22:10</a> UTC </small></i></p>
+
diff --git a/www/datatypes.html b/www/datatypes.html
new file mode 100644
index 0000000..a5b30f0
--- /dev/null
+++ b/www/datatypes.html
@@ -0,0 +1,355 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Datatypes In SQLite version 2</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h2>Datatypes In SQLite Version 2</h2>
+
+<h3>1.0 &nbsp; Typelessness</h3>
+<p>
+SQLite is "typeless". This means that you can store any
+kind of data you want in any column of any table, regardless of the
+declared datatype of that column.
+(See the one exception to this rule in section 2.0 below.)
+This behavior is a feature, not
+a bug. A database is supposed to store and retrieve data and it
+should not matter to the database what format that data is in.
+The strong typing system found in most other SQL engines and
+codified in the SQL language spec is a misfeature -
+it is an example of the implementation showing through into the
+interface. SQLite seeks to overcome this misfeature by allowing
+you to store any kind of data into any kind of column and by
+allowing flexibility in the specification of datatypes.
+</p>
+
+<p>
+A datatype to SQLite is any sequence of zero or more names
+optionally followed by a parenthesized lists of one or two
+signed integers. Notice in particular that a datatype may
+be <em>zero</em> or more names. That means that an empty
+string is a valid datatype as far as SQLite is concerned.
+So you can declare tables where the datatype of each column
+is left unspecified, like this:
+</p>
+
+<blockquote><pre>
+CREATE TABLE ex1(a,b,c);
+</pre></blockquote>
+
+<p>
+Even though SQLite allows the datatype to be omitted, it is
+still a good idea to include it in your CREATE TABLE statements,
+since the data type often serves as a good hint to other
+programmers about what you intend to put in the column. And
+if you ever port your code to another database engine, that
+other engine will probably require a datatype of some kind.
+SQLite accepts all the usual datatypes. For example:
+</p>
+
+<blockquote><pre>
+CREATE TABLE ex2(
+ a VARCHAR(10),
+ b NVARCHAR(15),
+ c TEXT,
+ d INTEGER,
+ e FLOAT,
+ f BOOLEAN,
+ g CLOB,
+ h BLOB,
+ i TIMESTAMP,
+ j NUMERIC(10,5)
+ k VARYING CHARACTER (24),
+ l NATIONAL VARYING CHARACTER(16)
+);
+</pre></blockquote>
+
+<p>
+And so forth. Basically any sequence of names optionally followed by
+one or two signed integers in parentheses will do.
+</p>
+
+<h3>2.0 &nbsp; The INTEGER PRIMARY KEY</h3>
+
+<p>
+One exception to the typelessness of SQLite is a column whose type
+is INTEGER PRIMARY KEY. (And you must use "INTEGER" not "INT".
+A column of type INT PRIMARY KEY is typeless just like any other.)
+INTEGER PRIMARY KEY columns must contain a 32-bit signed integer. Any
+attempt to insert non-integer data will result in an error.
+</p>
+
+<p>
+INTEGER PRIMARY KEY columns can be used to implement the equivalent
+of AUTOINCREMENT. If you try to insert a NULL into an INTEGER PRIMARY
+KEY column, the column will actually be filled with an integer that is
+one greater than the largest key already in the table. Or if the
+largest key is 2147483647, then the column will be filled with a
+random integer. Either way, the INTEGER PRIMARY KEY column will be
+assigned a unique integer. You can retrieve this integer using
+the <b>sqlite_last_insert_rowid()</b> API function or using the
+<b>last_insert_rowid()</b> SQL function in a subsequent SELECT statement.
+</p>
+
+<h3>3.0 &nbsp; Comparison and Sort Order</h3>
+
+<p>
+SQLite is typeless for the purpose of deciding what data is allowed
+to be stored in a column. But some notion of type comes into play
+when sorting and comparing data. For these purposes, a column or
+an expression can be one of two types: <b>numeric</b> and <b>text</b>.
+The sort or comparison may give different results depending on which
+type of data is being sorted or compared.
+</p>
+
+<p>
+If data is of type <b>text</b> then the comparison is determined by
+the standard C data comparison functions <b>memcmp()</b> or
+<b>strcmp()</b>. The comparison looks at bytes from two inputs one
+by one and returns the first non-zero difference.
+Strings are '\000' terminated so shorter
+strings sort before longer strings, as you would expect.
+</p>
+
+<p>
+For numeric data, this situation is more complex. If both inputs
+look like well-formed numbers, then they are converted
+into floating point values using <b>atof()</b> and compared numerically.
+If one input is not a well-formed number but the other is, then the
+number is considered to be less than the non-number. If neither inputs
+is a well-formed number, then <b>strcmp()</b> is used to do the
+comparison.
+</p>
+
+<p>
+Do not be confused by the fact that a column might have a "numeric"
+datatype. This does not mean that the column can contain only numbers.
+It merely means that if the column does contain a number, that number
+will sort in numerical order.
+</p>
+
+<p>
+For both text and numeric values, NULL sorts before any other value.
+A comparison of any value against NULL using operators like "&lt;" or
+"&gt;=" is always false.
+</p>
+
+<h3>4.0 &nbsp; How SQLite Determines Datatypes</h3>
+
+<p>
+For SQLite version 2.6.3 and earlier, all values used the numeric datatype.
+The text datatype appears in version 2.7.0 and later. In the sequel it
+is assumed that you are using version 2.7.0 or later of SQLite.
+</p>
+
+<p>
+For an expression, the datatype of the result is often determined by
+the outermost operator. For example, arithmetic operators ("+", "*", "%")
+always return a numeric results. The string concatenation operator
+("||") returns a text result. And so forth. If you are ever in doubt
+about the datatype of an expression you can use the special <b>typeof()</b>
+SQL function to determine what the datatype is. For example:
+</p>
+
+<blockquote><pre>
+sqlite&gt; SELECT typeof('abc'+123);
+numeric
+sqlite&gt; SELECT typeof('abc'||123);
+text
+</pre></blockquote>
+
+<p>
+For table columns, the datatype is determined by the type declaration
+of the CREATE TABLE statement. The datatype is text if and only if
+the type declaration contains one or more of the following strings:
+</p>
+
+<blockquote>
+BLOB<br>
+CHAR<br>
+CLOB<br>
+TEXT
+</blockquote>
+
+<p>
+The search for these strings in the type declaration is case insensitive,
+of course. If any of the above strings occur anywhere in the type
+declaration, then the datatype of the column is text. Notice that
+the type "VARCHAR" contains "CHAR" as a substring so it is considered
+text.</p>
+
+<p>If none of the strings above occur anywhere in the type declaration,
+then the datatype is numeric. Note in particular that the datatype for columns
+with an empty type declaration is numeric.
+</p>
+
+<h3>5.0 &nbsp; Examples</h3>
+
+<p>
+Consider the following two command sequences:
+</p>
+
+<blockquote><pre>
+CREATE TABLE t1(a INTEGER UNIQUE); CREATE TABLE t2(b TEXT UNIQUE);
+INSERT INTO t1 VALUES('0'); INSERT INTO t2 VALUES(0);
+INSERT INTO t1 VALUES('0.0'); INSERT INTO t2 VALUES(0.0);
+</pre></blockquote>
+
+<p>In the sequence on the left, the second insert will fail. In this case,
+the strings '0' and '0.0' are treated as numbers since they are being
+inserted into a numeric column but 0==0.0 which violates the uniqueness
+constraint. However, the second insert in the right-hand sequence works. In
+this case, the constants 0 and 0.0 are treated a strings which means that
+they are distinct.</p>
+
+<p>SQLite always converts numbers into double-precision (64-bit) floats
+for comparison purposes. This means that a long sequence of digits that
+differ only in insignificant digits will compare equal if they
+are in a numeric column but will compare unequal if they are in a text
+column. We have:</p>
+
+<blockquote><pre>
+INSERT INTO t1 INSERT INTO t2
+ VALUES('12345678901234567890'); VALUES(12345678901234567890);
+INSERT INTO t1 INSERT INTO t2
+ VALUES('12345678901234567891'); VALUES(12345678901234567891);
+</pre></blockquote>
+
+<p>As before, the second insert on the left will fail because the comparison
+will convert both strings into floating-point number first and the only
+difference in the strings is in the 20-th digit which exceeds the resolution
+of a 64-bit float. In contrast, the second insert on the right will work
+because in that case, the numbers being inserted are strings and are
+compared using memcmp().</p>
+
+<p>
+Numeric and text types make a difference for the DISTINCT keyword too:
+</p>
+
+<blockquote><pre>
+CREATE TABLE t3(a INTEGER); CREATE TABLE t4(b TEXT);
+INSERT INTO t3 VALUES('0'); INSERT INTO t4 VALUES(0);
+INSERT INTO t3 VALUES('0.0'); INSERT INTO t4 VALUES(0.0);
+SELECT DISTINCT * FROM t3; SELECT DISTINCT * FROM t4;
+</pre></blockquote>
+
+<p>
+The SELECT statement on the left returns a single row since '0' and '0.0'
+are treated as numbers and are therefore indistinct. But the SELECT
+statement on the right returns two rows since 0 and 0.0 are treated
+a strings which are different.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/datatypes.in?m=52a7afb2f5b176a04">2016-02-17 04:59:42</a> UTC </small></i></p>
+
diff --git a/www/dbhash.html b/www/dbhash.html
new file mode 100644
index 0000000..1aee868
--- /dev/null
+++ b/www/dbhash.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The dbhash.exe Utility Program</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The dbhash.exe Utility Program
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>The <b>dbhash</b> (or <b>dbhash.exe</b> on Windows) utility is a
+command-line program that computes the SHA1 hash of the schema and content
+for an SQLite database.
+
+</p><p>Dbhash ignores extraneous formatting details and hashes only the database
+schema and content. Hence the hash is constant even if the database file
+is modified by:
+
+</p><ul>
+<li> <a href="lang_vacuum.html">VACUUM</a>
+</li><li> <a href="pragma.html#pragma_page_size">PRAGMA page_size</a>
+</li><li> <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode</a>
+</li><li> <a href="lang_reindex.html">REINDEX</a>
+</li><li> <a href="lang_analyze.html">ANALYZE</a>
+</li><li> copied via the <a href="backup.html">backup API</a>
+</li><li> ... and so forth
+</li></ul>
+
+<p>The operations above can potentially cause vast changes the raw database file,
+and hence cause very different SHA1 hashes at the file level.
+But since the content represented in the database file is unchanged by these
+operations, the hash computed by dbhash is also unchanged.
+
+</p><p>Dbhash can be used to compare two databases to confirm that they
+are equivalent, even though their representation on disk is quite different.
+Dbhash might also be used to verify the content of a remote database without having
+to transmit the entire content of the remote database over a slow link.
+
+</p><h1 id="usage"><span>2. </span>Usage</h1>
+
+<p>Dbhash is a command-line utility.
+To run it, type "dbhash" on a command-line prompt followed by the names of
+one or more SQLite database files that are to be hashed.
+The database hashes will be displayed on standard output.
+For example:
+
+</p><div class="codeblock"><pre>drh@bella:~/sqlite/bld$ dbhash ~/Fossils/sqlite.fossil
+8d3da9ff87196312aaa33076627ccb7943ef79e3 /home/drh/Fossils/sqlite.fossil
+</pre></div>
+
+<p>Dbhash supports command-line options that can restrict the tables of the
+database file that are hashed, or restrict the hash to only content or only
+the schema. Run "dbhash --help" for further information.
+
+</p><h1 id="building"><span>3. </span>Building</h1>
+
+<p>To build a copy of the dbhash utility program on unix, get a copy of the
+canonical SQLite source code and enter:
+
+</p><div class="codeblock"><pre>./configure
+make dbhash
+</pre></div>
+
+<p>On Windows, enter:
+
+</p><div class="codeblock"><pre>nmake /f makefile.msc dbhash.exe
+</pre></div>
+
+<p>The dbhash program is implemented by a single file of C-code
+called <a href="https://www.sqlite.org/src/artifact?ci=trunk&filename=tool/dbhash.c">dbhash.c</a>.
+To build the dbhash program manually, simply compile the dbhash.c source file
+and link it against the SQLite library.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/dbhash.in?m=e56508811fb75e69b">2016-07-13 13:57:06</a> UTC </small></i></p>
+
diff --git a/www/dbpage.html b/www/dbpage.html
new file mode 100644
index 0000000..fb9625a
--- /dev/null
+++ b/www/dbpage.html
@@ -0,0 +1,236 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The SQLITE_DBPAGE Virtual Table</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The SQLITE_DBPAGE Virtual Table
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+The SQLITE_DBPAGE extension implements an <a href="vtab.html#epoonlyvtab">eponymous-only virtual table</a> that
+provides direct access to the underlying database file by interacting
+with the pager. SQLITE_DBPAGE is capable of both reading and writing any
+page of the database. Because interaction is through the pager layer, all
+changes are transactional.
+</p>
+
+<p>
+<b>Warning:</b> writing to the SQLITE_DBPAGE virtual table can very easily
+cause unrecoverably database corruption. Do not allow untrusted components
+to access the SQLITE_DBPAGE table. Use appropriate care while using the
+SQLITE_DBPAGE table. Back up important data prior to experimenting with the
+SQLITE_DBPAGE table. Writes to the SQLITE_DBPAGE virtual table are
+disabled when the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> flag is set.
+
+</p><p>
+The SQLITE_DBPAGE extension is included in the <a href="amalgamation.html">amalgamation</a> though
+it is disabled
+by default. Use the <a href="compile.html#enable_dbpage_vtab">SQLITE_ENABLE_DBPAGE_VTAB</a> compile-time option to enable
+the SQLITE_DBPAGE extension. The SQLITE_DBPAGE extension makes use of
+unpublished internal interfaces and is not run-time loadable. The only way
+to add SQLITE_DBPAGE to an application is to compile it in using the
+<a href="compile.html#enable_dbpage_vtab">SQLITE_ENABLE_DBPAGE_VTAB</a> compile-time option.
+</p>
+
+<p>
+The SQLITE_DBPAGE extension is enabled in default builds
+of the <a href="cli.html">command-line shell</a>.
+
+</p><h1 id="usage"><span>2. </span>Usage</h1>
+
+<p>
+The SQLITE_DBPAGE virtual table read/write table that provides direct
+access to the underlying disk file on a page-by-page basis. The
+virtual table appears to have a schema like this:
+
+</p><div class="codeblock"><pre>CREATE TABLE sqlite_dbpage(
+ pgno INTEGER PRIMARY KEY,
+ data BLOB
+);
+</pre></div>
+
+<p>
+An SQLite database file is divided into pages.
+The first page is 1, the second page is 2, and so forth.
+There is no page 0.
+Every page is the same size.
+The size of every page is a power of 2 between 512 and 65536.
+See the <a href="fileformat2.html">file format</a> documentation for further details.
+
+</p><p>
+The SQLITE_DBPAGE table allows an application to view or replace the
+raw binary content of each page of the database file.
+No attempt is made to interpret the content of the page.
+Content is returned byte-for-byte as it appears on disk.
+
+</p><p>
+The SQLITE_DBPAGE table has one row for each page in the database file.
+SQLITE_DBPAGE allows pages to be read or to be overwritten.
+However the size of the database file cannot be changed. It is not
+possible to change the number of rows in the SQLITE_DBPAGE table by
+running DELETE or INSERT operations against that table.
+
+</p><h2 id="using_sqlite_dbpage_on_attach_ed_databases"><span>2.1. </span>Using SQLITE_DBPAGE On ATTACH-ed Databases</h2>
+
+<p>
+The SQLITE_DBPAGE table schema shown above is incomplete. There is
+a third <a href="vtab.html#hiddencol">hidden column</a> named "schema" that determines which
+<a href="lang_attach.html">ATTACH-ed database</a> should be read or written. Because
+the "schema" column is hidden, it can be used as a parameter when
+SQLITE_DBPAGE is invoked as a <a href="vtab.html#tabfunc2">table-valued function</a>.
+
+</p><p>
+For example, suppose an additional database is attached to the
+database connection using a statement like this:
+
+</p><div class="codeblock"><pre>ATTACH 'auxdata1.db' AS aux1;
+</pre></div>
+
+<p>
+Then to read the first page of that database file, one merely runs:
+
+</p><div class="codeblock"><pre>SELECT data FROM sqlite_dbpage('aux1') WHERE pgno=1;
+</pre></div>
+
+<p>
+If the "schema" is omitted, it defaults to the primary database
+(usually called 'main', unless renamed using <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname">SQLITE_DBCONFIG_MAINDBNAME</a>).
+Hence, the following two queries are normally equivalent:
+
+</p><div class="codeblock"><pre>SELECT data FROM sqlite_dbpage('main') WHERE pgno=1;
+SELECT data FROM sqlite_dbpage WHERE pgno=1;
+</pre></div>
+
+<p>
+The SQLITE_DBPAGE table can participate in a join just like any other
+table. Hence, to see the content of the first page to all connected
+database files, one might run a statement like this:
+
+</p><div class="codeblock"><pre>SELECT dbpage.data, dblist.name
+ FROM pragma_database_list AS dblist
+ JOIN sqlite_dbpage(dblist.name) AS dbpage
+ WHERE dbpage.pgno=1;
+</pre></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/dbpage.in?m=21798cdb09def756b">2018-11-12 15:24:40</a> UTC </small></i></p>
+
diff --git a/www/dbstat.html b/www/dbstat.html
new file mode 100644
index 0000000..1157e4c
--- /dev/null
+++ b/www/dbstat.html
@@ -0,0 +1,360 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The DBSTAT Virtual Table</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The DBSTAT Virtual Table
+</div>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+The DBSTAT virtual table is a read-only <a href="vtab.html#epovtab">eponymous virtual table</a> that returns
+information about the amount of disk space used to store the content
+of an SQLite database.
+Example use cases for the
+DBSTAT virtual table include the <a href="sqlanalyze.html">sqlite3_analyzer.exe</a>
+utility program and the
+<a href="https://www.sqlite.org/src/repo-tabsize">table size pie-chart</a> in
+the <a href="https://www.fossil-scm.org/">Fossil-implemented</a> version control system
+for SQLite.
+</p>
+
+<p>
+The DBSTAT virtual table is available on all
+<a href="c3ref/sqlite3.html">database connections</a> when SQLite is built using the
+<a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> compile-time option.
+
+</p><p>
+The DBSTAT virtual table is an <a href="vtab.html#epovtab">eponymous virtual table</a>, meaning
+that is not necessary to run <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> to create an
+instance of the dbstat virtual table before using it. The "dbstat"
+module name can be used as if it were a table name to query the
+dbstat virtual table directly. For example:
+
+</p><div class="codeblock"><pre>SELECT * FROM dbstat;
+</pre></div>
+
+<p>
+If a named virtual table that uses the dbstat module is desired,
+then the recommended way to create an instance of the dbstat
+virtual table is as follows:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE temp.stat USING dbstat(main);
+</pre></div>
+
+<p>
+Note the "temp." qualifier before the virtual table name ("stat"). This
+qualifier causes the virtual table to be temporary - to only exist for
+the duration of the current database connection. This is the
+recommended approach.
+
+</p><p>
+The "main" argument to dbstat is default schema
+for which information is to be provided. The default is "main", and
+so the use of "main" in the example above is redundant. For any
+particular query, the schema can be changed by specifying the
+alternative schema as a function argument to the virtual table
+name in the FROM clause of the query. (See further discussion of
+<a href="lang_select.html#tabfunc1">table-valued functions in the FROM clause</a> for more details.)
+
+</p><p>
+The schema for the DBSTAT virtual table looks like this:
+</p><div class="codeblock"><pre>CREATE TABLE dbstat(
+ name TEXT, -- Name of table or index
+ path TEXT, -- Path to page from root
+ pageno INTEGER, -- Page number, or page count
+ pagetype TEXT, -- 'internal', 'leaf', 'overflow', or NULL
+ ncell INTEGER, -- Cells on page (0 for overflow pages)
+ payload INTEGER, -- Bytes of payload on this page or btree
+ unused INTEGER, -- Bytes of unused space on this page or btree
+ mx_payload INTEGER, -- Largest payload size of all cells on this row
+ pgoffset INTEGER, -- Byte offset of the page in the database file
+ pgsize INTEGER, -- Size of the page, in bytes
+ schema TEXT HIDDEN, -- Database schema being analyzed
+ aggregate BOOL HIDDEN -- True to enable aggregate mode
+);
+</pre></div>
+
+<p>
+The DBSTAT table only reports on the content of btrees within the database file.
+Freelist pages, pointer-map pages, and the lock page are omitted from
+the analysis.
+
+</p><p>
+By default, there is a single row in the DBSTAT table for each
+btree page the database file. Each row provides
+information about the space utilization of that one page of the
+database. However, if the hidden column "aggregate" is TRUE, then
+results are aggregated and there is a single row in the DBSTAT table
+for each btree in the database, providing information about space
+utilization across the entire btree.
+
+<a name="dbstatpath"></a>
+</p><h1 id="the_path_column_of_the_dbstat_virtual_table"><span>2. </span>The "path" column of the dbstat virtual table</h1>
+
+<p>
+The "path" column describes the path taken from the
+root node of the btree structure to each page. The
+"path" of the root node itself is '/'.
+The "path" is NULL when "aggregate" is TRUE.
+
+The "path" for the left-most child page of the root of
+a btree page is '/000/'. (Btrees store content ordered from left to right
+so the pages to the left have smaller keys than the pages to the right.)
+The next to left-most child of the root page is '/001', and so on,
+each sibling page identified by a 3-digit hex value.
+The children of the 451st left-most sibling have paths such
+as '/1c2/000/, '/1c2/001/' etc.
+
+Overflow pages are specified by appending a '+' character and a
+six-digit hexadecimal value to the path to the cell they are linked
+from. For example, the three overflow pages in a chain linked from
+the left-most cell of the 450th child of the root page are identified
+by the paths:
+
+</p><div class="codeblock"><pre>'/1c2/000+000000' // First page in overflow chain
+'/1c2/000+000001' // Second page in overflow chain
+'/1c2/000+000002' // Third page in overflow chain
+</pre></div>
+
+<p>
+If the paths are sorted using the BINARY collation sequence, then
+the overflow pages associated with a cell will appear earlier in the
+sort-order than its child page:
+
+</p><div class="codeblock"><pre>'/1c2/000/' // Left-most child of 451st child of root
+</pre></div>
+
+<a name="dbstatagg"></a>
+
+<h1 id="aggregated_data"><span>3. </span>Aggregated Data</h1>
+
+<p>
+Beginning with SQLite version 3.31.0 (2020-01-22), the DBSTAT table
+has a new <a href="vtab.html#hiddencol">hidden column</a> named "aggregate", which if constrained to be
+TRUE will cause DBSTAT to generate one row per btree in the database,
+rather than one row per page. When running in aggregated mode, the
+"path", "pagetype", and "pgoffset" columns are always NULL and the
+"pageno" column holds the number of pages in the entire btree, rather
+than the number of the page that corresponds to the row.
+
+</p><p>
+The following table shows the meanings of the (non-hidden) columns of
+DBSTAT in both normal and aggregated mode:
+
+</p><center><blockquote>
+<table border="1" cellpadding="5" cellspacing="0">
+<tr>
+<th>Column
+</th><th>Normal meaning
+</th><th>Aggregate-mode meaning
+</th></tr>
+<tr>
+<th>name
+</th><td colspan="2">
+The name of the table or index that is implemented by
+the btree of the current row
+</td></tr><tr>
+<th>path
+</th><td>See <a href="#dbstatpath">description above</a>
+</td><td>Always NULL
+</td></tr><tr>
+<th>pageno
+</th><td>The page number of the database page for the current row
+</td><td>The total number of pages in the btree for the current row
+</td></tr><tr>
+<th>pagetype
+</th><td>'leaf' or 'interior'
+</td><td>Always NULL
+</td></tr><tr>
+<th>ncell
+</th><td colspan="2">Number of cells on the current page or btree
+</td></tr><tr>
+<th>payload
+</th><td colspan="2">Bytes of useful payload on the current page or btree
+</td></tr><tr>
+<th>unused
+</th><td colspan="2">Unused bytes of on the current page or btree
+</td></tr><tr>
+<th>mx_payload
+</th><td colspan="2">The largest payload found anywhere in the current page
+or btree.
+</td></tr><tr>
+<th>pgoffset
+</th><td>Byte offset to the start of the page
+</td><td>Always NULL
+</td></tr><tr>
+<th>pgsize
+</th><td colspan="2">Total storage space used by the current page or btree.
+</td></tr></table>
+</blockquote></center>
+
+<h1 id="example_uses_of_the_dbstat_virtual_table"><span>4. </span>Example uses of the dbstat virtual table</h1>
+
+<p>
+To find the total number of pages used to store table "xyz" in schema "aux1",
+use either of the following two queries (the first is the traditional way,
+and the second shows the use of the aggregated feature):
+
+</p><div class="codeblock"><pre>SELECT count(*) FROM dbstat('aux1') WHERE name='xyz';
+SELECT pageno FROM dbstat('aux1',1) WHERE name='xyz';
+</pre></div>
+
+<p>
+To see how efficiently the content of a table is stored on disk,
+compute the amount of space used to hold actual content divided
+by the total amount of disk space used. The closer this number
+is to 100%, the more efficient the packing. (In this example, the
+'xyz' table is assumed to be in the 'main' schema. Again, there
+are two different versions that show the use of DBSTAT both without
+and with the new aggregated feature, respectively.)
+
+</p><div class="codeblock"><pre>SELECT sum(pgsize-unused)*100.0/sum(pgsize) FROM dbstat WHERE name='xyz';
+SELECT (pgsize-unused)*100.0/pgsize FROM dbstat
+ WHERE name='xyz' AND aggregate=TRUE;
+</pre></div>
+
+<p>
+To find the average fan-out for a table, run:
+
+</p><div class="codeblock"><pre>SELECT avg(ncell) FROM dbstat WHERE name='xyz' AND pagetype='internal';
+</pre></div>
+
+
+<p>
+Modern filesystems operate faster when disk accesses are sequential.
+Hence, SQLite will run faster if the content of the database file
+is on sequential pages. To find out what fraction of the pages in
+a database are sequential (and thus obtain a measurement that might
+be useful in determining when to <a href="lang_vacuum.html">VACUUM</a>), run a query like the following:
+
+</p><div class="codeblock"><pre>CREATE TEMP TABLE s(rowid INTEGER PRIMARY KEY, pageno INT);
+INSERT INTO s(pageno) SELECT pageno FROM dbstat ORDER BY path;
+SELECT sum(s1.pageno+1==s2.pageno)*1.0/count(*)
+ FROM s AS s1, s AS s2
+ WHERE s1.rowid+1=s2.rowid;
+DROP TABLE s;
+</pre></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/dbstat.in?m=47144226efc96ca2e">2020-01-22 17:49:40</a> UTC </small></i></p>
+
diff --git a/www/debugging.html b/www/debugging.html
new file mode 100644
index 0000000..4de2811
--- /dev/null
+++ b/www/debugging.html
@@ -0,0 +1,253 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Hints for Debugging SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1 align='center'>Debugging Hints</h1>
+
+<p>
+The following is a random assortment of techniques used by the
+SQLite developers to trace, examine, and understand the behavior of the
+core SQLite library.
+
+<p>
+These techniques are designed to aid in understanding the
+core SQLite library itself, not applications that merely use SQLite.
+
+<ol>
+<li>
+<p><b>Use the ".eqp full" option on the <a href="cli.html">command-line shell</a></b>
+
+<p>When you have a SQL script that you are debugging or trying
+to understand, it is often useful to run it in the <a href="cli.html">command-line shell</a>
+with the ".eqp full" setting. When ".eqp" is set to FULL, the shell
+automatically shows the <a href="lang_explain.html">EXPLAIN</a> and <a href="eqp.html">EXPLAIN QUERY PLAN</a> output for
+each command prior to actually running that command.
+
+<p>For added readability, also set ".echo on" so that the output contains
+the original SQL text.
+
+<p>The newer ".eqp trace" command does everything that ".eqp full" does
+and also turns on <a href="pragma.html#pragma_vdbe_trace">VDBE tracing</a>.
+</li>
+
+<li>
+<p><b>Use compile-time options to enable debugging features.</b>
+
+<p>Suggested compile-time options include:
+<ul>
+<li><a href="compile.html#debug">-DSQLITE_DEBUG</a>
+<li><a href="compile.html#enable_explain_comments">-DSQLITE_ENABLE_EXPLAIN_COMMENTS</a>
+<li>-DSQLITE_ENABLE_TREETRACE
+<li>-DSQLITE_ENABLE_WHERETRACE
+</ul>
+</li>
+
+<p>The SQLITE_ENABLE_TREETRACE and SQLITE_ENABLE_WHERETRACE options
+are not documented in <a href="compile.html">compile-time options</a> document because they
+are not officially supported. What they do is activate the
+".treetrace" and ".wheretrace" dot-commands in the command-line
+shell, which provide low-level tracing output for the logic that
+generates code for SELECT and DML statements and WHERE clauses, respectively.
+
+<li>
+<p><b>Call sqlite3ShowExpr() and similar from the debugger.</b>
+
+<p>When compiled with <a href="compile.html#debug">SQLITE_DEBUG</a>, SQLite includes routines that will
+print out various internal abstract syntax tree structures as ASCII-art graphs.
+This can be very useful in a debugging in order to understand the variables
+that SQLite is working with. The following routines are available:
+
+<ul>
+<li> void sqlite3ShowExpr(const Expr*);
+<li> void sqlite3ShowExprList(const ExprList*);
+<li> void sqlite3ShowIdList(const IdList*);
+<li> void sqlite3ShowSrcList(const SrcList*);
+<li> void sqlite3ShowSelect(const Select*);
+<li> void sqlite3ShowWith(const With*);
+<li> void sqlite3ShowUpsert(const Upsert*);
+<li> void sqlite3ShowTrigger(const Trigger*);
+<li> void sqlite3ShowTriggerList(const Trigger*);
+<li> void sqlite3ShowTriggerStep(const TriggerStep*);
+<li> void sqlite3ShowTriggerStepList(const TriggerStep*);
+<li> void sqlite3ShowWindow(const Window*);
+<li> void sqlite3ShowWinFunc(const Window*);
+</ul>
+
+<p>These routines are not APIs and are subject to change. They are
+for interactive debugging use only.</p>
+</li>
+
+<li>
+<p><b>Breakpoints on test_addoptrace</b>
+
+<p>When debugging the <a href="opcode.html">bytecode</a> generator, it is often useful to know
+where a particular opcode is being generated. To find this easily,
+run the script in a debugger. Set a breakpoint on the "test_addoptrace"
+routine. Then run the "PRAGMA vdbe_addoptrace=ON;" followed by the
+SQL statement in question. Each opcode will be displayed as it is
+appended to the VDBE program, and the breakpoint will fire immediately
+thereafter. Step until reaching the opcode then look backwards
+in the stack to see where and how it was generated.
+
+<p>This only works when compiled with <a href="compile.html#debug">SQLITE_DEBUG</a>.
+</li>
+
+<li>
+<p><b>Using the ".treetrace" and ".wheretrace" shell commands</b>
+
+<p>When the command-line shell and the core SQLite library are
+both compiled with <a href="compile.html#debug">SQLITE_DEBUG</a> and
+SQLITE_ENABLE_TREETRACE and SQLITE_ENABLE_WHERETRACE, then the
+shell has two commands used to turn on debugging facilities for the
+most intricate parts of the code generator - the logic dealing with
+SELECT statements and WHERE clauses, respectively.
+The ".treetrace" and ".wheretrace" commands each take a numeric
+argument which can be expressed in hexadecimal. Each bit turns on
+various parts of debugging. Values of "0xfff" and "0xff" are commonly
+used. Use an argument of "0" to turn all tracing output back off.
+</li>
+
+<li>
+<p><b>Using the ".breakpoint" shell command</b>
+
+<p>The ".breakpoint" command in the CLI does nothing but invoke the
+procedure named "test_breakpoint()", which is a no-op.
+
+<p>If you have a script and you want to start debugging at some point
+half-way through that script, simply set a breakpoint in gdb (or whatever
+debugger you are using) on the test_breakpoint() function, and add a
+".breakpoint" command where you want to stop. When you reach that first
+breakpoint, set whatever additional breakpoints are variable traces you
+need.
+
+<li>
+<p><b>Disable the <a href="malloc.html#lookaside">lookaside memory allocator</a></b>
+
+<p>When looking for memory allocation problems (memory leaks, use-after-free
+errors, buffer overflows, etc) it is sometimes useful to disable the
+<a href="malloc.html#lookaside">lookaside memory allocator</a> then run the test under valgrind or MSAN or
+some other heap memory debugging tool.
+The lookaside memory allocator can
+be disabled at start-time using the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a>
+interface. The <a href="cli.html">command-line shell</a> will use that interface to
+disable lookaside if it is started with the "--lookaside 0 0"
+command line option.
+</li>
+</ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/debugging.in?m=ffab87c7343ef0cf5">2022-04-06 18:55:14</a> UTC </small></i></p>
+
diff --git a/www/deterministic.html b/www/deterministic.html
new file mode 100644
index 0000000..e124a44
--- /dev/null
+++ b/www/deterministic.html
@@ -0,0 +1,255 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Deterministic SQL Functions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Deterministic SQL Functions
+</div>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+SQL functions in SQLite can be either "deterministic" or "non-deterministic".
+
+</p><p>
+A deterministic function always gives the same answer when it has
+the same inputs. Most built-in SQL functions in SQLite are
+deterministic. For example, the <a href="lang_corefunc.html#abs">abs(X)</a> function always returns
+the same answer as long as its input X is the same.
+
+</p><p>
+Non-deterministic functions might give different answers on each
+invocation, even if the arguments are always the same. The following
+are examples of non-deterministic functions:
+
+</p><ul>
+<li> <a href="lang_corefunc.html#random">random()</a>
+</li><li> <a href="lang_corefunc.html#changes">changes()</a>
+</li><li> <a href="lang_corefunc.html#last_insert_rowid">last_insert_rowid()</a>
+</li><li> <a href="c3ref/libversion.html">sqlite3_version()</a>
+</li></ul>
+
+<p>
+The <a href="lang_corefunc.html#random">random()</a> function is obviously non-deterministic because it gives
+a different answer every time it is invoked. The answers from <a href="lang_corefunc.html#changes">changes()</a>
+and <a href="lang_corefunc.html#last_insert_rowid">last_insert_rowid()</a> depend on prior SQL statements, and so they
+are also non-deterministic. The
+<a href="c3ref/libversion.html">sqlite3_version()</a> function is mostly constant, but it can change when
+SQLite is upgraded, and so even though it always returns the same answer
+for any particular session, because it can change answers across sessions
+it is still considered non-deterministic.
+
+
+</p><h1 id="restrictions_on_the_use_of_non_deterministic_functions"><span>2. </span>Restrictions on the use of non-deterministic functions</h1>
+
+<p>
+There are some contexts in SQLite that do not allow the use of
+non-deterministic functions:
+
+</p><ul>
+<li>In the expression of a <a href="lang_createtable.html#ckconst">CHECK constraint</a>.
+</li><li>In the WHERE clause of a <a href="partialindex.html">partial index</a>.
+</li><li>In an expression used as part of an <a href="expridx.html">expression index</a>.
+</li><li>In the expression of a <a href="gencol.html">generated column</a>.
+</li></ul>
+
+<p>
+In the cases above, the values returned by the function affects the
+information stored in the database file. The values of functions
+in CHECK constraints determines which entries are valid for a table,
+and functions in the WHERE clause of a partial index or in an index on
+an expression compute values stored in the index b-tree.
+If any of these functions later returns a different
+value, then the database might no longer be well-formed.
+Hence, to avoid database corruption,
+only deterministic functions can be used in the contexts
+above.
+
+<a name="dtexception"></a>
+
+</p><h1 id="special_case_processing_for_date_time_functions"><span>3. </span>Special-case Processing For Date/Time Functions</h1>
+
+<p>
+The built-in <a href="lang_datefunc.html">date and time functions</a> of SQLite are a special case.
+These functions are usually considered deterministic. However, if
+these functions use the string "now" as the date, or if they use
+the <a href="lang_datefunc.html#localtime">localtime modifier</a> or the <a href="lang_datefunc.html#localtime">utc modifier</a>, then they are
+considered non-deterministic. Because the function inputs are
+not necessarily known until run-time, the date/time functions will
+throw an exception if they encounter any of the non-deterministic
+features in a context where only deterministic functions are allowed.
+
+</p><p>
+Prior to SQLite 3.20.0 (2017-08-01) all date/time functions were
+always considered non-deterministic. The ability for date/time functions
+to be deterministic sometimes and non-deterministic at other times,
+depending on their arguments, was added for the 3.20.0 release.
+
+</p><h2 id="bug_fix_in_version_3_35_2"><span>3.1. </span>Bug fix in version 3.35.2</h2>
+
+<p>
+When the enhancement was made to SQLite 3.20.0 such that date/time
+functions would be considered deterministic as they do not depend
+on the current time, one case was overlooked:
+Many of the date/time functions can be called
+with no arguments at all. These no-argument date/time functions
+behave as if they had a single "<tt>'now'</tt>" argument.
+Thus "<tt>datetime()</tt>" and
+"<tt>datetime('now')</tt>" both yield the current date and time.
+However, only the second form was recognized as non-deterministic.
+This meant that developers could sneak the non-deterministic
+"<tt>datetime()</tt>" form into CHECK constraints, index
+expressions, generated column expressions, and similar places
+where non-deterministic functions make no sense.
+This oversight was fixed in version 3.35.2 (2021-03-17).
+However, there may be legacy databases in circulation that were created
+by SQLite version 3.20.0 through 3.35.1 that have non-deterministic
+date/time functions in their schemas.
+
+</p><h1 id="application_defined_deterministic_functions"><span>4. </span>Application-defined deterministic functions</h1>
+
+<p>
+By default, <a href="appfunc.html">application-defined SQL functions</a> are considered to
+be non-deterministic. However, if the 4th parameter to
+<a href="c3ref/create_function.html">sqlite3_create_function_v2()</a> is OR-ed with
+<a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a>, then SQLite will treat that function as if it
+were deterministic.
+
+</p><p>
+Note that if a non-deterministic function is tagged with
+<a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a> and if that function ends up being used in
+the WHERE clause of a <a href="partialindex.html">partial index</a> or in an
+<a href="expridx.html">expression index</a>, then when the function begins to return different
+answers, the associated index may become corrupt. If an SQL function
+is nearly deterministic (which is to say, if it only rarely changes,
+like <a href="lang_corefunc.html#sqlite_version">sqlite_version()</a>) and it is used in an index that becomes
+corrupt, the corruption can be fixed by running <a href="lang_reindex.html">REINDEX</a>.
+
+</p><p>
+The interfaces necessary to construct a function that is sometimes
+deterministic and sometimes non-deterministic depending on their
+inputs, such as the built-in date/time functions, are not published.
+Generic <a href="appfunc.html">application-defined SQL functions</a> must
+be always deterministic or always non-deterministic.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/deterministic.in?m=72aa24619c4616127">2021-06-17 16:11:09</a> UTC </small></i></p>
+
diff --git a/www/different.html b/www/different.html
new file mode 100644
index 0000000..8f315ce
--- /dev/null
+++ b/www/different.html
@@ -0,0 +1,358 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Distinctive Features Of SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+<h1 align=center>Distinctive Features Of SQLite</h1>
+
+<p>
+This page highlights some of the characteristics of SQLite that are
+unusual and which make SQLite different from many other SQL
+database engines.
+</p>
+
+<a name="zeroconfig"></a>
+<p><b>Zero-Configuration</b></p>
+<blockquote>
+ SQLite does not need to be "installed" before it is used.
+ There is no "setup" procedure. There is no
+ server process that needs to be started, stopped, or configured.
+ There is
+ no need for an administrator to create a new database instance or assign
+ access permissions to users.
+ SQLite uses no configuration files.
+ Nothing needs to be done to tell the system that SQLite is running.
+ No actions are required to recover after a system crash or power failure.
+ There is nothing to troubleshoot.
+ <p>
+ SQLite just works.
+ <p>
+ Other more familiar database engines run great once you get them going.
+ But doing the initial installation and configuration can be
+ intimidatingly complex.
+</blockquote>
+<a name="serverless"></a>
+<p><b>Serverless</b></p>
+<blockquote>
+ <p>
+ <i>(See also the <a href="serverless.html">serverless</a> documentation page.)</i>
+ <p>
+ Most SQL database engines are implemented as a separate server
+ process. Programs that want to access the database communicate
+ with the server using some kind of interprocess communication
+ (typically TCP/IP) to send requests to the server and to receive
+ back results. SQLite does not work this way. With SQLite, the
+ process that wants to access the database reads and writes
+ directly from the database files on disk. There is no intermediary
+ server process.
+ <p>
+ There are advantages and disadvantages to being serverless. The
+ main advantage is that there is no separate server process
+ to install, setup, configure, initialize, manage, and troubleshoot.
+ This is one reason why SQLite is a "zero-configuration" database
+ engine. Programs that use SQLite require no administrative support
+ for setting up the database engine before they are run. Any program
+ that is able to access the disk is able to use an SQLite database.
+ <p>
+ On the other hand, a database engine that uses a server can provide
+ better protection from bugs in the client application - stray pointers
+ in a client cannot corrupt memory on the server. And because a server
+ is a single persistent process, it is able control database access with
+ more precision, allowing for finer grain locking and better concurrency.
+ <p>
+ Most SQL database engines are client/server based. Of those that are
+ serverless, SQLite is the only one that this author knows of that
+ allows multiple applications to access the same database at the same time.
+</blockquote>
+<a name="onefile"></a>
+<p><b>Single Database File</b></p>
+<blockquote>
+ An SQLite database is a single ordinary disk file that can be located
+ anywhere in the directory hierarchy. If SQLite can read
+ the disk file then it can read anything in the database. If the disk
+ file and its directory are writable, then SQLite can change anything
+ in the database. Database files can easily be copied onto a USB
+ memory stick or emailed for sharing.
+ <p>
+ Other SQL database engines tend to store data as a large collection of
+ files. Often these files are in a standard location that only the
+ database engine itself can access. This makes the data more secure,
+ but also makes it harder to access. Some SQL database engines provide
+ the option of writing directly to disk and bypassing the filesystem
+ altogether. This provides added performance, but at the cost of
+ considerable setup and maintenance complexity.
+</blockquote>
+<a name="onefile"></a>
+<p><b>Stable Cross-Platform Database File</b></p>
+<blockquote>
+ The SQLite file format is cross-platform. A database file written
+ on one machine can be copied to and used on a different machine with
+ a different architecture. Big-endian or little-endian, 32-bit or
+ 64-bit does not matter. All machines use the same file format.
+ Furthermore, the developers have pledged to keep the file format
+ stable and backwards compatible, so newer versions of SQLite can
+ read and write older database files.
+ <p>
+ Most other SQL database engines require you to dump and restore
+ the database when moving from one platform to another and often
+ when upgrading to a newer version of the software.
+</blockquote>
+<a name="small"></a>
+<p><b>Compact</b></p>
+<blockquote>
+ When optimized for size, the whole SQLite library with everything enabled
+ is <a href="footprint.html">less than 500KiB in size</a>
+ (as measured on an ix86 using the "size"
+ utility from the GNU compiler suite.) Unneeded features can be disabled
+ at compile-time to further reduce the size of the library to under
+ 300KiB if desired.
+ <p>
+ Most other SQL database engines are much larger than this. IBM boasts
+ that its recently released CloudScape database engine is "only" a 2MiB
+ jar file - an order of magnitude larger than SQLite even after it is
+ compressed!
+ Firebird boasts that its client-side library is only 350KiB. That's
+ as big as SQLite and does not even contain the database engine.
+ The Berkeley DB library from Oracle is 450KiB and it omits SQL
+ support, providing the programmer with only simple key/value pairs.
+</blockquote>
+<a name="typing"></a>
+<p><b>Manifest typing</b></p>
+<blockquote>
+ Most SQL database engines use static typing. A datatype is associated
+ with each column in a table and only values of that particular datatype
+ are allowed to be stored in that column. SQLite relaxes this restriction
+ by using manifest typing.
+ In manifest typing, the datatype is a property of the value itself, not
+ of the column in which the value is stored.
+ SQLite thus allows the user to store
+ any value of any datatype into any column regardless of the declared type
+ of that column. (There are some exceptions to this rule: An INTEGER
+ PRIMARY KEY column may only store integers. And SQLite attempts to coerce
+ values into the declared datatype of the column when it can.)
+ <p>
+ As far as we can tell, the SQL language specification allows the use
+ of manifest typing. Nevertheless, most other SQL database engines are
+ statically typed and so some people
+ feel that the use of manifest typing is a bug in SQLite. But the authors
+ of SQLite feel very strongly that this is a feature. The use of manifest
+ typing in SQLite is a deliberate design decision which has proven in practice
+ to make SQLite more reliable and easier to use, especially when used in
+ combination with dynamically typed programming languages such as Tcl and
+ Python.
+</blockquote>
+<a name="flex"></a>
+<p><b>Variable-length records</b></p>
+<blockquote>
+ Most other SQL database engines allocated a fixed amount of disk space
+ for each row in most tables. They play special tricks for handling
+ BLOBs and CLOBs which can be of wildly varying length. But for most
+ tables, if you declare a column to be a VARCHAR(100) then the database
+ engine will allocate
+ 100 bytes of disk space regardless of how much information you actually
+ store in that column.
+ <p>
+ SQLite, in contrast, use only the amount of disk space actually
+ needed to store the information in a row. If you store a single
+ character in a VARCHAR(100) column, then only a single byte of disk
+ space is consumed. (Actually two bytes - there is some overhead at
+ the beginning of each column to record its datatype and length.)
+ <p>
+ The use of variable-length records by SQLite has a number of advantages.
+ It results in smaller database files, obviously. It also makes the
+ database run faster, since there is less information to move to and from
+ disk. And, the use of variable-length records makes it possible for
+ SQLite to employ manifest typing instead of static typing.
+</blockquote>
+<a name="readable"></a>
+<p><b>Readable source code</b></p>
+<blockquote>
+ The source code to SQLite is designed to be readable and accessible to
+ the average programmer. All procedures and data structures and many
+ automatic variables are carefully commented with useful information about
+ what they do. Boilerplate commenting is omitted.
+</blockquote>
+<a name="vdbe"></a>
+<p><b>SQL statements compile into virtual machine code</b></p>
+<blockquote>
+ Every SQL database engine compiles each SQL statement into some kind of
+ internal data structure which is then used to carry out the work of the
+ statement. But in most SQL engines that internal data structure is a
+ complex web of interlinked structures and objects. In SQLite, the compiled
+ form of statements is a short program in a machine-language like
+ representation. Users of the database can view this
+ <a href="opcode.html">virtual machine language</a>
+ by prepending the <a href="lang_explain.html">EXPLAIN</a> keyword
+ to a query.
+ <p>
+ The use of a virtual machine in SQLite has been a great benefit to the
+ library's development. The virtual machine provides a crisp, well-defined
+ junction between the front-end of SQLite (the part that parses SQL
+ statements and generates virtual machine code) and the back-end (the
+ part that executes the virtual machine code and computes a result.)
+ The virtual machine allows the developers to see clearly and in an
+ easily readable form what SQLite is trying to do with each statement
+ it compiles, which is a tremendous help in debugging.
+ Depending on how it is compiled, SQLite also has the capability of
+ tracing the execution of the virtual machine - printing each
+ virtual machine instruction and its result as it executes.
+</blockquote>
+<a name="license"></a>
+<p><b>Public domain</b></p>
+<blockquote>
+ The source code for SQLite is in the public domain. No claim of copyright
+ is made on any part of the core source code. (The documentation and test
+ code is a different matter - some sections of documentation and test logic
+ are governed by open-source licenses.) All contributors to the
+ SQLite core software have signed affidavits specifically disavowing any
+ copyright interest in the code. This means that anybody is able to legally
+ do anything they want with the SQLite source code.
+ <p>
+ There are other SQL database engines with liberal licenses that allow
+ the code to be broadly and freely used. But those other engines are
+ still governed by copyright law. SQLite is different in that copyright
+ law simply does not apply.
+ <p>
+ The source code files for other SQL database engines typically begin
+ with a comment describing your legal rights to view and copy that file.
+ The SQLite source code contains no license since it is not governed by
+ copyright. Instead of a license, the SQLite source code offers a blessing:
+ <blockquote>
+ <i>May you do good and not evil<br>
+ May you find forgiveness for yourself and forgive others<br>
+ May you share freely, never taking more than you give.</i>
+ </blockquote>
+</blockquote>
+<a name="extensions"></a>
+<p><b>SQL language extensions</b></p>
+<blockquote>
+ SQLite provides a number of enhancements to the SQL language
+ not normally found in other database engines.
+ The EXPLAIN keyword and manifest typing have already been mentioned
+ above. SQLite also provides statements such as
+ <a href="lang_replace.html">REPLACE</a> and the
+ <a href="lang_conflict.html">ON CONFLICT</a> clause that allow for
+ added control over the resolution of constraint conflicts.
+ SQLite supports <a href="lang_attach.html">ATTACH</a> and
+ <a href="lang_detach.html">DETACH</a> commands that allow multiple
+ independent databases to be used together in the same query.
+ And SQLite defines APIs which allow the user to add new
+ <a href="c3ref/create_function.html">SQL functions</a>
+ and <a href="c3ref/create_collation.html">collating sequences</a>.
+</blockquote>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/different.in?m=95a3317bd2a3d0b7a">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/doc_backlink_crossref.html b/www/doc_backlink_crossref.html
new file mode 100644
index 0000000..1aba190
--- /dev/null
+++ b/www/doc_backlink_crossref.html
@@ -0,0 +1,14332 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Backlink Crossreference</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<ul><li>--safe command-line option &rarr; <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="changes.html#version_3_40_1">changes.html#version_3_40_1</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+<li>--update option &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>-DSQLITE_DEBUG &rarr; <a href="debugging.html">debugging.html</a>
+<li>-DSQLITE_DEFAULT_FOREIGN_KEYS &rarr; <a href="quirks.html">quirks.html</a>
+<li>-DSQLITE_DEFAULT_MEMSTATUS &rarr; <a href="footprint.html">footprint.html</a>
+<li>-DSQLITE_DEFAULT_WAL_SYNCHRONOUS &rarr; <a href="footprint.html">footprint.html</a>
+<li>-DSQLITE_DIRECT_OVERFLOW_READ &rarr; <a href="fasterthanfs.html">fasterthanfs.html</a>
+<li>-DSQLITE_DQS &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml</a>
+ <a href="capi3ref.html#sqlitedbconfigdqsddl">capi3ref.html#sqlitedbconfigdqsddl</a>
+ <a href="capi3ref.html#sqlitedbconfigdqsdml">capi3ref.html#sqlitedbconfigdqsdml</a>
+ <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="news.html">news.html</a>
+ <a href="quirks.html#dblquote">quirks.html#dblquote</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+<li>-DSQLITE_ENABLE_BYTECODE_VTAB &rarr; <a href="bytecodevtab.html">bytecodevtab.html</a>
+<li>-DSQLITE_ENABLE_DBPAGE_VTAB &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>-DSQLITE_ENABLE_DBSTAT_VTAB &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+<li>-DSQLITE_ENABLE_EXPLAIN_COMMENTS &rarr; <a href="changes.html#version_3_14_2">changes.html#version_3_14_2</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="debugging.html">debugging.html</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="opcode.html#subprog">opcode.html#subprog</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>-DSQLITE_ENABLE_FTS3 &rarr; <a href="amalgamation.html">amalgamation.html</a>
+<li>-DSQLITE_ENABLE_FTS4 &rarr; <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+<li>-DSQLITE_ENABLE_FTS5 &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="footprint.html">footprint.html</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+<li>-DSQLITE_ENABLE_GEOPOLY &rarr; <a href="geopoly.html">geopoly.html</a>
+<li>-DSQLITE_ENABLE_ICU &rarr; <a href="quirks.html">quirks.html</a>
+<li>-DSQLITE_ENABLE_JSON1 &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="footprint.html">footprint.html</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>-DSQLITE_ENABLE_MATH_FUNCTIONS &rarr; <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>-DSQLITE_ENABLE_MEMSYS5 &rarr; <a href="footprint.html">footprint.html</a>
+ <a href="security.html">security.html</a>
+<li>-DSQLITE_ENABLE_OFFSET_SQL_FUNC &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="lang_corefunc.html#sqlite_offset">lang_corefunc.html#sqlite_offset</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>-DSQLITE_ENABLE_RBU &rarr; <a href="amalgamation.html">amalgamation.html</a>
+<li>-DSQLITE_ENABLE_RTREE &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="footprint.html">footprint.html</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+<li>-DSQLITE_ENABLE_SESSION &rarr; <a href="amalgamation.html">amalgamation.html</a>
+<li>-DSQLITE_ENABLE_SNAPSHOT &rarr; <a href="rescode.html#error_snapshot">rescode.html#error_snapshot</a>
+<li>-DSQLITE_ENABLE_STMTVTAB &rarr; <a href="cli.html#compiling">cli.html#compiling</a>
+<li>-DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION &rarr; <a href="cli.html#compiling">cli.html#compiling</a>
+<li>-DSQLITE_HAVE_ZLIB &rarr; <a href="cli.html#compiling">cli.html#compiling</a>
+<li>-DSQLITE_INTROSPECTION_PRAGMAS &rarr; <a href="cli.html#compiling">cli.html#compiling</a>
+<li>-DSQLITE_LIKE_DOESNT_MATCH_BLOBS &rarr; <a href="footprint.html">footprint.html</a>
+<li>-DSQLITE_OMIT_DECLTYPE &rarr; <a href="footprint.html">footprint.html</a>
+<li>-DSQLITE_OMIT_DEPRECATED &rarr; <a href="footprint.html">footprint.html</a>
+<li>-DSQLITE_OMIT_DESERIALIZE &rarr; <a href="changes.html#version_3_36_0">changes.html#version_3_36_0</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+<li>-DSQLITE_OMIT_INTROSPECTION_PRAGMAS &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>-DSQLITE_OMIT_JSON &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="compile.html#enable_json1">compile.html#enable_json1</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>-DSQLITE_OMIT_PROGRESS_CALLBACK &rarr; <a href="footprint.html">footprint.html</a>
+<li>-DSQLITE_OMIT_SHARED_CACHE &rarr; <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="footprint.html">footprint.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+<li>-DSQLITE_OMIT_VACUUM &rarr; <a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a>
+ <a href="capi3ref.html#sqlite3_keyword_check">capi3ref.html#sqlite3_keyword_check</a>
+<li>-DSQLITE_PRINTF_PRECISION_LIMIT &rarr; <a href="security.html">security.html</a>
+<li>-DSQLITE_TEMP_STORE &rarr; <a href="howtocorrupt.html#svptbug">howtocorrupt.html#svptbug</a>
+ <a href="news.html">news.html</a>
+<li>-DSQLITE_THREADSAFE &rarr; <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="fasterthanfs.html">fasterthanfs.html</a>
+ <a href="footprint.html">footprint.html</a>
+<li>-DSQLITE_TRUSTED_SCHEMA &rarr; <a href="appfunc.html#sec">appfunc.html#sec</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+<li>-DSQLITE_USE_ALLOCA &rarr; <a href="footprint.html">footprint.html</a>
+<li>-DSQLITE_USE_URI &rarr; <a href="lang_vacuum.html#vacuuminto">lang_vacuum.html#vacuuminto</a>
+<li>.archive command &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="cli.html#safemode">cli.html#safemode</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="sqlar.html#cltools">sqlar.html#cltools</a>
+ <a href="vtablist.html">vtablist.html</a>
+ <a href="whentouse.html#container">whentouse.html#container</a>
+<li>.connection &rarr; <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>.databases &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>.dump &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="changes.html#version_3_35_1">changes.html#version_3_35_1</a>
+ <a href="nulinstr.html">nulinstr.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="stricttables.html">stricttables.html</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+<li>.excel &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>.expert command &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>.fullschema &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>.import &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>.import command &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="cli.html#safemode">cli.html#safemode</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>.imposter dot-command &rarr; <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>.load command &rarr; <a href="cli.html#safemode">cli.html#safemode</a>
+<li>.mode &rarr; <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>.mode quote &rarr; <a href="nulinstr.html">nulinstr.html</a>
+<li>.once &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>.open &rarr; <a href="cli.html#dotconn">cli.html#dotconn</a>
+<li>.open command &rarr; <a href="cli.html#safemode">cli.html#safemode</a>
+<li>.output &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>.parameter command &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>.read &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>.recover dot-command &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>.schema &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>.selftest dot-command &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>.sha3sum dot-command &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>.tables &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>34to35 &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>35 Faster Than The Filesystem &rarr; <a href="whyc.html">whyc.html</a>
+<li>35to36 &rarr; <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+<li>about 200 SQL statements per webpage &rarr; <a href="whentouse.html#website">whentouse.html#website</a>
+<li>abs &rarr; <a href="arch.html">arch.html</a>
+ <a href="c3ref/c_deterministic.html#sqlitedeterministic">c3ref/c_deterministic.html#sqlitedeterministic</a>
+ <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a>
+ <a href="capi3ref.html#sqlitedeterministic">capi3ref.html#sqlitedeterministic</a>
+ <a href="capi3ref.html#sqliteinnocuous">capi3ref.html#sqliteinnocuous</a>
+ <a href="deterministic.html">deterministic.html</a>
+<li>ACID &rarr; <a href="useovernet.html">useovernet.html</a>
+<li>add column &rarr; <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+<li>advantages of WAL-mode &rarr; <a href="wal.html#busy">wal.html#busy</a>
+<li>affinities &rarr; <a href="optoverview.html#constprop">optoverview.html#constprop</a>
+<li>affinity &rarr; <a href="faq.html#q3">faq.html#q3</a>
+ <a href="fileformat2.html##sqltab">fileformat2.html##sqltab</a>
+ <a href="foreignkeys.html#parentchild">foreignkeys.html#parentchild</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+ <a href="gencol.html">gencol.html</a>
+ <a href="lang_createtable.html#rowid">lang_createtable.html#rowid</a>
+ <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>
+ <a href="lang_select.html#fromclause">lang_select.html#fromclause</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+<li>affshort &rarr; <a href="appfileformat.html">appfileformat.html</a>
+ <a href="famous.html">famous.html</a>
+ <a href="index.html">index.html</a>
+<li>AFL &rarr; <a href="testing.html#fuzzcheck">testing.html#fuzzcheck</a>
+<li>aggfunc &rarr; <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+ <a href="lang_select.html#bareagg">lang_select.html#bareagg</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#aggwinfunc">windowfunctions.html#aggwinfunc</a>
+<li>aggregate functions &rarr; <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>
+<li>Aggregate Functions &rarr; <a href="fullsql.html">fullsql.html</a>
+ <a href="json1.html#jgroupobject">json1.html#jgroupobject</a>
+ <a href="windowfunctions.html#aggwinfunc">windowfunctions.html#aggwinfunc</a>
+<li>aggregate window functions &rarr; <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#biwinfunc">windowfunctions.html#biwinfunc</a>
+<li>aggregate-function-invocation &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+<li>ALTER &rarr; <a href="foreignkeys.html">foreignkeys.html</a>
+<li>ALTER TABLE &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="changes.html#version_3_8_7_1">changes.html#version_3_8_7_1</a>
+ <a href="compile.html#omit_altertable">compile.html#omit_altertable</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+ <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a>
+ <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_naming.html">lang_naming.html</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="releaselog/3_8_7_1.html">releaselog/3_8_7_1.html</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="vtab.html">vtab.html</a>
+<li>ALTER TABLE ADD COLUMN &rarr; <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="gencol.html">gencol.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>ALTER TABLE DROP COLUMN &rarr; <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>ALTER TABLE RENAME &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable</a>
+ <a href="capi3ref.html#sqlitedbconfiglegacyaltertable">capi3ref.html#sqlitedbconfiglegacyaltertable</a>
+ <a href="changes.html#version_3_39_1">changes.html#version_3_39_1</a>
+ <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>ALTER TABLE RENAME COLUMN &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>ALTER TABLE RENAME documentation &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable</a>
+ <a href="capi3ref.html#sqlitedbconfiglegacyaltertable">capi3ref.html#sqlitedbconfiglegacyaltertable</a>
+<li>alter-table-stmt &rarr; <a href="lang_altertable.html">lang_altertable.html</a>
+<li>amalgamation &rarr; <a href="appfileformat.html">appfileformat.html</a>
+ <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="cksumvfs.html">cksumvfs.html</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="compile.html#enable_fts3">compile.html#enable_fts3</a>
+ <a href="compile.html#enable_fts4">compile.html#enable_fts4</a>
+ <a href="compile.html#enable_fts5">compile.html#enable_fts5</a>
+ <a href="compile.html#enable_geopoly">compile.html#enable_geopoly</a>
+ <a href="compile.html#enable_update_delete_limit">compile.html#enable_update_delete_limit</a>
+ <a href="compile.html#omitfeatures">compile.html#omitfeatures</a>
+ <a href="cpu.html">cpu.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="dbpage.html">dbpage.html</a>
+ <a href="download.html#srctree">download.html#srctree</a>
+ <a href="faq.html#q23">faq.html#q23</a>
+ <a href="fasterthanfs.html">fasterthanfs.html</a>
+ <a href="floatingpoint.html#decext">floatingpoint.html#decext</a>
+ <a href="floatingpoint.html#ieee754ext">floatingpoint.html#ieee754ext</a>
+ <a href="fts5.html#compiling_and_using_fts5">fts5.html#compiling_and_using_fts5</a>
+ <a href="geopoly.html">geopoly.html</a>
+ <a href="getthecode.html">getthecode.html</a>
+ <a href="howtocompile.html">howtocompile.html</a>
+ <a href="lemon.html">lemon.html</a>
+ <a href="malloc.html#memsysx">malloc.html#memsysx</a>
+ <a href="privatebranch.html">privatebranch.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+ <a href="rbu.html">rbu.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="rtree.html">rtree.html</a>
+ <a href="selfcontained.html">selfcontained.html</a>
+ <a href="sessionintro.html">sessionintro.html</a>
+ <a href="spellfix1.html">spellfix1.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>amalgamation tarball &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+<li>American Fuzzy Lop fuzzer &rarr; <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+<li>analysis_limit &rarr; <a href="lang_analyze.html#approx">lang_analyze.html#approx</a>
+<li>analysis_limit pragma &rarr; <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+<li>ANALYZE &rarr; <a href="appfileformat.html">appfileformat.html</a>
+ <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_scanstatus">capi3ref.html#sqlite3_stmt_scanstatus</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="changes.html#version_3_7_3">changes.html#version_3_7_3</a>
+ <a href="changes.html#version_3_7_6">changes.html#version_3_7_6</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="cli.html#expert">cli.html#expert</a>
+ <a href="compile.html#enable_stat2">compile.html#enable_stat2</a>
+ <a href="compile.html#enable_stat3">compile.html#enable_stat3</a>
+ <a href="compile.html#enable_stat4">compile.html#enable_stat4</a>
+ <a href="compile.html#omit_analyze">compile.html#omit_analyze</a>
+ <a href="dbhash.html">dbhash.html</a>
+ <a href="fileformat2.html#intschema">fileformat2.html#intschema</a>
+ <a href="fileformat2.html#stat1tab">fileformat2.html#stat1tab</a>
+ <a href="fileformat2.html#stat3tab">fileformat2.html#stat3tab</a>
+ <a href="fileformat2.html#stat4tab">fileformat2.html#stat4tab</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#autoindex">optoverview.html#autoindex</a>
+ <a href="optoverview.html#manctrl">optoverview.html#manctrl</a>
+ <a href="optoverview.html#multi_index">optoverview.html#multi_index</a>
+ <a href="optoverview.html#option2">optoverview.html#option2</a>
+ <a href="optoverview.html#rangequery">optoverview.html#rangequery</a>
+ <a href="optoverview.html#skipscan">optoverview.html#skipscan</a>
+ <a href="optoverview.html#table_order">optoverview.html#table_order</a>
+ <a href="pragma.html#pragma_analysis_limit">pragma.html#pragma_analysis_limit</a>
+ <a href="pragma.html#pragma_optimize">pragma.html#pragma_optimize</a>
+ <a href="queryplanner-ng.html#fossilcasestudy">queryplanner-ng.html#fossilcasestudy</a>
+ <a href="queryplanner-ng.html#hazards">queryplanner-ng.html#hazards</a>
+ <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a>
+ <a href="queryplanner-ng.html#qpstab">queryplanner-ng.html#qpstab</a>
+ <a href="queryplanner.html#searching">queryplanner.html#searching</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>analyze-stmt &rarr; <a href="lang_analyze.html">lang_analyze.html</a>
+<li>appformat &rarr; <a href="index.html">index.html</a>
+<li>Application File Format &rarr; <a href="about.html">about.html</a>
+ <a href="affcase1.html#smaller">affcase1.html#smaller</a>
+ <a href="onefile.html">onefile.html</a>
+<li>application file format &rarr; <a href="cintro.html">cintro.html</a>
+ <a href="features.html">features.html</a>
+ <a href="flextypegood.html">flextypegood.html</a>
+ <a href="sessionintro.html">sessionintro.html</a>
+ <a href="undoredo.html">undoredo.html</a>
+<li>application file-format &rarr; <a href="aff_short.html">aff_short.html</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="features.html">features.html</a>
+ <a href="fileformat2.html#appid">fileformat2.html#appid</a>
+ <a href="pragma.html#pragma_application_id">pragma.html#pragma_application_id</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+ <a href="whentouse.html#appfileformat">whentouse.html#appfileformat</a>
+<li>Application ID &rarr; <a href="appfileformat.html">appfileformat.html</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>application-defined SQL function &rarr; <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a>
+ <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_result_subtype">capi3ref.html#sqlite3_result_subtype</a>
+ <a href="capi3ref.html#sqlite3_value_subtype">capi3ref.html#sqlite3_value_subtype</a>
+ <a href="fts5.html#custom_auxiliary_functions">fts5.html#custom_auxiliary_functions</a>
+ <a href="lang_expr.html#regexp">lang_expr.html#regexp</a>
+ <a href="swarmvtab.html#the_missing_callback">swarmvtab.html#the_missing_callback</a>
+ <a href="swarmvtab.html#the_openclose_callback">swarmvtab.html#the_openclose_callback</a>
+<li>application-defined SQL functions &rarr; <a href="c3ref/c_deterministic.html#sqlitedirectonly">c3ref/c_deterministic.html#sqlitedirectonly</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="capi3ref.html#sqlitedirectonly">capi3ref.html#sqlitedirectonly</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="cli.html#dotload">cli.html#dotload</a>
+ <a href="cli.html#fileio">cli.html#fileio</a>
+ <a href="compile.html#trusted_schema">compile.html#trusted_schema</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="expridx.html">expridx.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="loadext.html">loadext.html</a>
+ <a href="loadext.html#write">loadext.html#write</a>
+ <a href="optoverview.html#leftjoinreduction">optoverview.html#leftjoinreduction</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="rescode.html#internal">rescode.html#internal</a>
+<li>application-defined window functions &rarr; <a href="appfunc.html">appfunc.html</a>
+<li>application_id pragma &rarr; <a href="aff_short.html">aff_short.html</a>
+ <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a>
+ <a href="pragma.html#pragma_user_version">pragma.html#pragma_user_version</a>
+<li>appreciate the freedom &rarr; <a href="stricttables.html">stricttables.html</a>
+<li>Appropriate Uses For SQLite &rarr; <a href="quirks.html">quirks.html</a>
+<li>approximate ANALYZE &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="news.html">news.html</a>
+ <a href="pragma.html#pragma_analysis_limit">pragma.html#pragma_analysis_limit</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>asynchronous I/O backend &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>asynchronous VFS &rarr; <a href="changes.html#version_3_6_14">changes.html#version_3_6_14</a>
+ <a href="releaselog/3_6_14.html">releaselog/3_6_14.html</a>
+<li>Atomic Commit &rarr; <a href="howitworks.html">howitworks.html</a>
+ <a href="lockingv3.html#how_to_corrupt">lockingv3.html#how_to_corrupt</a>
+<li>atomic commit &rarr; <a href="affcase1.html#smaller">affcase1.html#smaller</a>
+ <a href="appfileformat.html">appfileformat.html</a>
+ <a href="wal.html">wal.html</a>
+<li>ATTACH &rarr; <a href="bytecodevtab.html">bytecodevtab.html</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupinit">c3ref/backup_finish.html#sqlite3backupinit</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">c3ref/c_config_covering_index_scan.html#sqliteconfiguri</a>
+ <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused">c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused</a>
+ <a href="c3ref/c_limit_attached.html#sqlitelimitattached">c3ref/c_limit_attached.html#sqlitelimitattached</a>
+ <a href="c3ref/db_name.html">c3ref/db_name.html</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_db_name">capi3ref.html#sqlite3_db_name</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="capi3ref.html#sqlite3_wal_hook">capi3ref.html#sqlite3_wal_hook</a>
+ <a href="capi3ref.html#sqlite3backupinit">capi3ref.html#sqlite3backupinit</a>
+ <a href="capi3ref.html#sqliteconfiguri">capi3ref.html#sqliteconfiguri</a>
+ <a href="capi3ref.html#sqlitedbstatusschemaused">capi3ref.html#sqlitedbstatusschemaused</a>
+ <a href="capi3ref.html#sqlitelimitattached">capi3ref.html#sqlitelimitattached</a>
+ <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_5_6">changes.html#version_3_5_6</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cli.html#safemode">cli.html#safemode</a>
+ <a href="compile.html#omit_attach">compile.html#omit_attach</a>
+ <a href="dbpage.html">dbpage.html</a>
+ <a href="fts3.html#_external_content_fts4_tables_">fts3.html#_external_content_fts4_tables_</a>
+ <a href="inmemorydb.html">inmemorydb.html</a>
+ <a href="inmemorydb.html#temp_db">inmemorydb.html#temp_db</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_detach.html">lang_detach.html</a>
+ <a href="lang_naming.html">lang_naming.html</a>
+ <a href="lang_vacuum.html">lang_vacuum.html</a>
+ <a href="lockingv3.html#rollback">lockingv3.html#rollback</a>
+ <a href="pragma.html#pragfunc">pragma.html#pragfunc</a>
+ <a href="pragma.html#pragma_encoding">pragma.html#pragma_encoding</a>
+ <a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a>
+ <a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a>
+ <a href="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</a>
+ <a href="pragma.html#syntax">pragma.html#syntax</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_5_6.html">releaselog/3_5_6.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+ <a href="shortnames.html">shortnames.html</a>
+ <a href="tclsqlite.html#backup">tclsqlite.html#backup</a>
+ <a href="tclsqlite.html#restore">tclsqlite.html#restore</a>
+ <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a>
+ <a href="tempfiles.html#tempdb">tempfiles.html#tempdb</a>
+ <a href="unionvtab.html">unionvtab.html</a>
+ <a href="uri.html">uri.html</a>
+ <a href="vfs.html">vfs.html</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+<li>ATTACH DATABASE &rarr; <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+<li>attach-stmt &rarr; <a href="lang_attach.html">lang_attach.html</a>
+<li>attached &rarr; <a href="bytecodevtab.html">bytecodevtab.html</a>
+ <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>
+ <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>
+ <a href="capi3ref.html#sqlite3_db_cacheflush">capi3ref.html#sqlite3_db_cacheflush</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint_v2">capi3ref.html#sqlite3_wal_checkpoint_v2</a>
+ <a href="cli.html#dschema">cli.html#dschema</a>
+ <a href="cli.html#dtables">cli.html#dtables</a>
+<li>authorizer callback &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="lang_explain.html">lang_explain.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>auto modifier &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>auto_vacuum &rarr; <a href="changes.html#version_3_18_1">changes.html#version_3_18_1</a>
+ <a href="changes.html#version_3_19_3">changes.html#version_3_19_3</a>
+ <a href="compile.html#default_autovacuum">compile.html#default_autovacuum</a>
+ <a href="compile.html#omit_autovacuum">compile.html#omit_autovacuum</a>
+ <a href="fileformat2.html#ovflpgs">fileformat2.html#ovflpgs</a>
+ <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+ <a href="lang_vacuum.html">lang_vacuum.html</a>
+ <a href="lang_vacuum.html#howvacuumworks">lang_vacuum.html#howvacuumworks</a>
+ <a href="mmap.html">mmap.html</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>autocommit mode &rarr; <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a>
+ <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot_get">capi3ref.html#sqlite3_snapshot_get</a>
+ <a href="capi3ref.html#sqlite3_snapshot_open">capi3ref.html#sqlite3_snapshot_open</a>
+ <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+<li>AUTOINCREMENT &rarr; <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>
+ <a href="capi3ref.html#sqlite3_table_column_metadata">capi3ref.html#sqlite3_table_column_metadata</a>
+ <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="compile.html#omit_autoincrement">compile.html#omit_autoincrement</a>
+ <a href="faq.html#q1">faq.html#q1</a>
+ <a href="fileformat2.html#intschema">fileformat2.html#intschema</a>
+ <a href="fileformat2.html#seqtab">fileformat2.html#seqtab</a>
+ <a href="quirks.html#dblquote">quirks.html#dblquote</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="rescode.html#corrupt_sequence">rescode.html#corrupt_sequence</a>
+ <a href="stricttables.html">stricttables.html</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+<li>automated undo/redo stack &rarr; <a href="aff_short.html">aff_short.html</a>
+ <a href="affcase1.html#smaller">affcase1.html#smaller</a>
+ <a href="appfileformat.html">appfileformat.html</a>
+<li>automatic indexes &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>Automatic indexing &rarr; <a href="pragma.html#pragma_automatic_index">pragma.html#pragma_automatic_index</a>
+<li>automatic indexing &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="changes.html#version_3_9_2">changes.html#version_3_9_2</a>
+ <a href="compile.html#omit_automatic_index">compile.html#omit_automatic_index</a>
+ <a href="eqp.html">eqp.html</a>
+ <a href="pragma.html#pragma_automatic_index">pragma.html#pragma_automatic_index</a>
+ <a href="queryplanner-ng.html#qpstab">queryplanner-ng.html#qpstab</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="rescode.html#warning_autoindex">rescode.html#warning_autoindex</a>
+<li>automatic_index pragma &rarr; <a href="optoverview.html#autoindex">optoverview.html#autoindex</a>
+<li>automerge command &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>auxiliary columns &rarr; <a href="rtree.html#xshadow">rtree.html#xshadow</a>
+<li>auxiliary columns in r-tree tables &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>auxiliary function mapping &rarr; <a href="fts5.html#the_rank_configuration_option">fts5.html#the_rank_configuration_option</a>
+<li>B-tree &rarr; <a href="imposter.html">imposter.html</a>
+ <a href="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</a>
+ <a href="rowidtable.html">rowidtable.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>B-Trees &rarr; <a href="withoutrowid.html#wtu">withoutrowid.html#wtu</a>
+<li>backup API &rarr; <a href="aff_short.html">aff_short.html</a>
+ <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="dbhash.html">dbhash.html</a>
+ <a href="howtocorrupt.html#stalefd">howtocorrupt.html#stalefd</a>
+ <a href="lang_vacuum.html#vacuuminto">lang_vacuum.html#vacuuminto</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+ <a href="whentouse.html#appfileformat">whentouse.html#appfileformat</a>
+<li>bcvtab &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>BEGIN &rarr; <a href="asyncvfs.html">asyncvfs.html</a>
+ <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_get_autocommit">capi3ref.html#sqlite3_get_autocommit</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="faq.html#q19">faq.html#q19</a>
+ <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="fts3.html#*fts4mergecmd">fts3.html#*fts4mergecmd</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_savepoint.html">lang_savepoint.html</a>
+ <a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+<li>BEGIN EXCLUSIVE &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>BEGIN IMMEDIATE &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+<li>begin-stmt &rarr; <a href="lang_transaction.html">lang_transaction.html</a>
+<li>BETWEEN &rarr; <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+<li>BINARY &rarr; <a href="lang_corefunc.html#replace">lang_corefunc.html#replace</a>
+ <a href="lang_createtable.html#collateclause">lang_createtable.html#collateclause</a>
+ <a href="lang_select.html#nullslast">lang_select.html#nullslast</a>
+ <a href="rbu.html#fts4_tables">rbu.html#fts4_tables</a>
+<li>bind_fallback method &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>BLOB handle &rarr; <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a>
+ <a href="c3ref/blob_close.html">c3ref/blob_close.html</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>
+ <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="capi3ref.html#sqlite3_blob_bytes">capi3ref.html#sqlite3_blob_bytes</a>
+ <a href="capi3ref.html#sqlite3_blob_close">capi3ref.html#sqlite3_blob_close</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_read">capi3ref.html#sqlite3_blob_read</a>
+ <a href="capi3ref.html#sqlite3_blob_reopen">capi3ref.html#sqlite3_blob_reopen</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+<li>BLOB handles &rarr; <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+<li>BLOB I/O performance &rarr; <a href="affcase1.html#smaller">affcase1.html#smaller</a>
+<li>block sorting &rarr; <a href="changes.html#version_3_10_1">changes.html#version_3_10_1</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>books about SQLite &rarr; <a href="doclist.html">doclist.html</a>
+ <a href="keyword_index.html">keyword_index.html</a>
+ <a href="sitemap.html">sitemap.html</a>
+<li>boolean expression &rarr; <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_select.html#fromclause">lang_select.html#fromclause</a>
+ <a href="lang_select.html#resultset">lang_select.html#resultset</a>
+ <a href="lang_select.html#whereclause">lang_select.html#whereclause</a>
+ <a href="lang_update.html">lang_update.html</a>
+<li>bound parameter &rarr; <a href="c3ref/profile.html">c3ref/profile.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_profile">capi3ref.html#sqlite3_profile</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>bound parameters &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg</a>
+ <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare</a>
+ <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+ <a href="capi3ref.html#sqlitedbconfigenableqpsg">capi3ref.html#sqlitedbconfigenableqpsg</a>
+ <a href="capi3ref.html#sqlitestmtstatusreprepare">capi3ref.html#sqlitestmtstatusreprepare</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_6_21">changes.html#version_3_6_21</a>
+ <a href="cli.html#param">cli.html#param</a>
+ <a href="fts3.html#f3tknzr">fts3.html#f3tknzr</a>
+ <a href="lang_createtable.html#dfltval">lang_createtable.html#dfltval</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+<li>building the amalgamation &rarr; <a href="howtocompile.html">howtocompile.html</a>
+<li>built-in memory allocators &rarr; <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mem_methods">capi3ref.html#sqlite3_mem_methods</a>
+<li>built-in printf &rarr; <a href="arch.html">arch.html</a>
+ <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>
+ <a href="c3ref/str_append.html">c3ref/str_append.html</a>
+ <a href="capi3ref.html#sqlite3_mprintf">capi3ref.html#sqlite3_mprintf</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a>
+ <a href="lang_corefunc.html#format">lang_corefunc.html#format</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>built-in SQL math functions &rarr; <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="compile.html#enable_math_functions">compile.html#enable_math_functions</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>built-in window functions &rarr; <a href="windowfunctions.html">windowfunctions.html</a>
+<li>builtin window functions &rarr; <a href="lang_corefunc.html">lang_corefunc.html</a>
+<li>busy-handler callback &rarr; <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint_v2">capi3ref.html#sqlite3_wal_checkpoint_v2</a>
+<li>busy_timeout pragma &rarr; <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+<li>byte-order determination rules &rarr; <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+<li>bytecode &rarr; <a href="arch.html">arch.html</a>
+ <a href="bytecodevtab.html">bytecodevtab.html</a>
+ <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>
+ <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_distinct">capi3ref.html#sqlite3_vtab_distinct</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+ <a href="changes.html#version_3_37_2">changes.html#version_3_37_2</a>
+ <a href="debugging.html">debugging.html</a>
+ <a href="lang_corefunc.html#iif">lang_corefunc.html#iif</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+ <a href="rowvalue.html#rvinop">rowvalue.html#rvinop</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+<li>bytecode and tables_used virtual tables &rarr; <a href="compile.html#enable_bytecode_vtab">compile.html#enable_bytecode_vtab</a>
+<li>bytecode engine &rarr; <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="howitworks.html">howitworks.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>bytecode virtual table &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>C-language Interface &rarr; <a href="arch.html">arch.html</a>
+ <a href="rescode.html">rescode.html</a>
+<li>cache_size &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_7_6_3">changes.html#version_3_7_6_3</a>
+ <a href="compile.html#sorter_pmasz">compile.html#sorter_pmasz</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pgszchng2016.html">pgszchng2016.html</a>
+ <a href="pragma.html#pragma_default_cache_size">pragma.html#pragma_default_cache_size</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_7_6_3.html">releaselog/3_7_6_3.html</a>
+<li>cache_size pragma &rarr; <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="pgszchng2016.html">pgszchng2016.html</a>
+<li>cache_spill pragma &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>capi3ref &rarr; <a href="cintro.html">cintro.html</a>
+ <a href="quickstart.html">quickstart.html</a>
+<li>capi3ref_funclist &rarr; <a href="cintro.html">cintro.html</a>
+<li>carray &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>carray table-valued function &rarr; <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="loadext.html#write">loadext.html#write</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>CASE expression &rarr; <a href="lang_corefunc.html#iif">lang_corefunc.html#iif</a>
+<li>case_sensitive_like &rarr; <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+<li>case_sensitive_like pragma &rarr; <a href="compile.html#case_sensitive_like">compile.html#case_sensitive_like</a>
+ <a href="lang_expr.html#like">lang_expr.html#like</a>
+<li>cast &rarr; <a href="lang_expr.html#collateop">lang_expr.html#collateop</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>CAST &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="datatype3.html#compaff">datatype3.html#compaff</a>
+ <a href="nulinstr.html">nulinstr.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>CAST expression &rarr; <a href="changes.html#version_3_7_16_1">changes.html#version_3_7_16_1</a>
+ <a href="changes.html#version_3_8_2">changes.html#version_3_8_2</a>
+ <a href="datatype3.html#affinity">datatype3.html#affinity</a>
+ <a href="lang_createtable.html#ckconst">lang_createtable.html#ckconst</a>
+ <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+ <a href="lang_expr.html#hexint">lang_expr.html#hexint</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+<li>categorical listing of SQLite documents &rarr; <a href="doclist.html">doclist.html</a>
+ <a href="keyword_index.html">keyword_index.html</a>
+ <a href="sitemap.html">sitemap.html</a>
+<li>ceiling &rarr; <a href="lang_mathfunc.html#trunc">lang_mathfunc.html#trunc</a>
+<li>cfgerrors &rarr; <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a>
+ <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a>
+ <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a>
+ <a href="pragma.html#pragma_writable_schema">pragma.html#pragma_writable_schema</a>
+ <a href="schematab.html">schematab.html</a>
+<li>change counter &rarr; <a href="fileformat2.html#filesize">fileformat2.html#filesize</a>
+ <a href="fileformat2.html#validfor">fileformat2.html#validfor</a>
+<li>changes &rarr; <a href="deterministic.html">deterministic.html</a>
+<li>changes SQL function &rarr; <a href="c3ref/changes.html">c3ref/changes.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_changes">capi3ref.html#sqlite3_changes</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+<li>changeset &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="session.html#sqlite3_changeset_iter">session.html#sqlite3_changeset_iter</a>
+ <a href="session/changeset_iter.html">session/changeset_iter.html</a>
+<li>changesets &rarr; <a href="session.html#sqlite3_changegroup">session.html#sqlite3_changegroup</a>
+ <a href="session/changegroup.html">session/changegroup.html</a>
+<li>char &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>CHECK &rarr; <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="conflict.html">conflict.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>CHECK constraint &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="deterministic.html">deterministic.html</a>
+ <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>
+ <a href="lang_altertable.html#altertabdropcol">lang_altertable.html#altertabdropcol</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="rescode.html#constraint_check">rescode.html#constraint_check</a>
+<li>CHECK constraints &rarr; <a href="c3ref/c_deterministic.html#sqlitedirectonly">c3ref/c_deterministic.html#sqlitedirectonly</a>
+ <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a>
+ <a href="capi3ref.html#sqlitedirectonly">capi3ref.html#sqlitedirectonly</a>
+ <a href="capi3ref.html#sqliteinnocuous">capi3ref.html#sqliteinnocuous</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="stricttables.html">stricttables.html</a>
+<li>checklist &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>checkpoint &rarr; <a href="asyncvfs.html">asyncvfs.html</a>
+ <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>
+ <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>
+ <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot_open">capi3ref.html#sqlite3_snapshot_open</a>
+ <a href="capi3ref.html#sqlite3_wal_autocheckpoint">capi3ref.html#sqlite3_wal_autocheckpoint</a>
+ <a href="capi3ref.html#sqlite3_wal_hook">capi3ref.html#sqlite3_wal_hook</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="fasterthanfs.html">fasterthanfs.html</a>
+ <a href="fileformat2.html#walcksm">fileformat2.html#walcksm</a>
+ <a href="howtocorrupt.html#fork">howtocorrupt.html#fork</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_checkpoint_fullfsync">pragma.html#pragma_checkpoint_fullfsync</a>
+ <a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a>
+ <a href="pragma.html#pragma_query_only">pragma.html#pragma_query_only</a>
+ <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a>
+ <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="tclsqlite.html#wal_hook">tclsqlite.html#wal_hook</a>
+ <a href="walformat.html#locks">walformat.html#locks</a>
+ <a href="walformat.html#shm">walformat.html#shm</a>
+<li>checkpoint mode &rarr; <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint_v2">capi3ref.html#sqlite3_wal_checkpoint_v2</a>
+<li>checkpoint_fullfsync &rarr; <a href="pragma.html#pragma_fullfsync">pragma.html#pragma_fullfsync</a>
+ <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a>
+<li>checkpointing &rarr; <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint">capi3ref.html#sqlite3_wal_checkpoint</a>
+ <a href="compile.html#default_wal_autocheckpoint">compile.html#default_wal_autocheckpoint</a>
+ <a href="pragma.html#pragma_wal_autocheckpoint">pragma.html#pragma_wal_autocheckpoint</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+<li>checksum VFS shim &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="rescode.html#ioerr_data">rescode.html#ioerr_data</a>
+<li>child key &rarr; <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+<li>chronology &rarr; <a href="changes.html">changes.html</a>
+ <a href="getthecode.html">getthecode.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+ <a href="releaselog/3_0_0.html">releaselog/3_0_0.html</a>
+ <a href="releaselog/3_0_1.html">releaselog/3_0_1.html</a>
+ <a href="releaselog/3_0_2.html">releaselog/3_0_2.html</a>
+ <a href="releaselog/3_0_3.html">releaselog/3_0_3.html</a>
+ <a href="releaselog/3_0_4.html">releaselog/3_0_4.html</a>
+ <a href="releaselog/3_0_5.html">releaselog/3_0_5.html</a>
+ <a href="releaselog/3_0_6.html">releaselog/3_0_6.html</a>
+ <a href="releaselog/3_0_7.html">releaselog/3_0_7.html</a>
+ <a href="releaselog/3_0_8.html">releaselog/3_0_8.html</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_1_0.html">releaselog/3_1_0.html</a>
+ <a href="releaselog/3_1_1.html">releaselog/3_1_1.html</a>
+ <a href="releaselog/3_1_2.html">releaselog/3_1_2.html</a>
+ <a href="releaselog/3_1_3.html">releaselog/3_1_3.html</a>
+ <a href="releaselog/3_1_4.html">releaselog/3_1_4.html</a>
+ <a href="releaselog/3_1_5.html">releaselog/3_1_5.html</a>
+ <a href="releaselog/3_1_6.html">releaselog/3_1_6.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+ <a href="releaselog/3_2_0.html">releaselog/3_2_0.html</a>
+ <a href="releaselog/3_2_1.html">releaselog/3_2_1.html</a>
+ <a href="releaselog/3_2_2.html">releaselog/3_2_2.html</a>
+ <a href="releaselog/3_2_3.html">releaselog/3_2_3.html</a>
+ <a href="releaselog/3_2_4.html">releaselog/3_2_4.html</a>
+ <a href="releaselog/3_2_5.html">releaselog/3_2_5.html</a>
+ <a href="releaselog/3_2_6.html">releaselog/3_2_6.html</a>
+ <a href="releaselog/3_2_7.html">releaselog/3_2_7.html</a>
+ <a href="releaselog/3_2_8.html">releaselog/3_2_8.html</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="releaselog/3_3_0.html">releaselog/3_3_0.html</a>
+ <a href="releaselog/3_3_1.html">releaselog/3_3_1.html</a>
+ <a href="releaselog/3_3_10.html">releaselog/3_3_10.html</a>
+ <a href="releaselog/3_3_11.html">releaselog/3_3_11.html</a>
+ <a href="releaselog/3_3_12.html">releaselog/3_3_12.html</a>
+ <a href="releaselog/3_3_13.html">releaselog/3_3_13.html</a>
+ <a href="releaselog/3_3_14.html">releaselog/3_3_14.html</a>
+ <a href="releaselog/3_3_15.html">releaselog/3_3_15.html</a>
+ <a href="releaselog/3_3_16.html">releaselog/3_3_16.html</a>
+ <a href="releaselog/3_3_17.html">releaselog/3_3_17.html</a>
+ <a href="releaselog/3_3_2.html">releaselog/3_3_2.html</a>
+ <a href="releaselog/3_3_3.html">releaselog/3_3_3.html</a>
+ <a href="releaselog/3_3_4.html">releaselog/3_3_4.html</a>
+ <a href="releaselog/3_3_5.html">releaselog/3_3_5.html</a>
+ <a href="releaselog/3_3_6.html">releaselog/3_3_6.html</a>
+ <a href="releaselog/3_3_7.html">releaselog/3_3_7.html</a>
+ <a href="releaselog/3_3_8.html">releaselog/3_3_8.html</a>
+ <a href="releaselog/3_3_9.html">releaselog/3_3_9.html</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+ <a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a>
+ <a href="releaselog/3_4_1.html">releaselog/3_4_1.html</a>
+ <a href="releaselog/3_4_2.html">releaselog/3_4_2.html</a>
+ <a href="releaselog/3_5_0.html">releaselog/3_5_0.html</a>
+ <a href="releaselog/3_5_1.html">releaselog/3_5_1.html</a>
+ <a href="releaselog/3_5_2.html">releaselog/3_5_2.html</a>
+ <a href="releaselog/3_5_3.html">releaselog/3_5_3.html</a>
+ <a href="releaselog/3_5_4.html">releaselog/3_5_4.html</a>
+ <a href="releaselog/3_5_5.html">releaselog/3_5_5.html</a>
+ <a href="releaselog/3_5_6.html">releaselog/3_5_6.html</a>
+ <a href="releaselog/3_5_7.html">releaselog/3_5_7.html</a>
+ <a href="releaselog/3_5_8.html">releaselog/3_5_8.html</a>
+ <a href="releaselog/3_5_9.html">releaselog/3_5_9.html</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+ <a href="releaselog/3_6_10.html">releaselog/3_6_10.html</a>
+ <a href="releaselog/3_6_11.html">releaselog/3_6_11.html</a>
+ <a href="releaselog/3_6_12.html">releaselog/3_6_12.html</a>
+ <a href="releaselog/3_6_13.html">releaselog/3_6_13.html</a>
+ <a href="releaselog/3_6_14.html">releaselog/3_6_14.html</a>
+ <a href="releaselog/3_6_14_1.html">releaselog/3_6_14_1.html</a>
+ <a href="releaselog/3_6_14_2.html">releaselog/3_6_14_2.html</a>
+ <a href="releaselog/3_6_15.html">releaselog/3_6_15.html</a>
+ <a href="releaselog/3_6_16.html">releaselog/3_6_16.html</a>
+ <a href="releaselog/3_6_16_1.html">releaselog/3_6_16_1.html</a>
+ <a href="releaselog/3_6_17.html">releaselog/3_6_17.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="releaselog/3_6_19.html">releaselog/3_6_19.html</a>
+ <a href="releaselog/3_6_2.html">releaselog/3_6_2.html</a>
+ <a href="releaselog/3_6_20.html">releaselog/3_6_20.html</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+ <a href="releaselog/3_6_22.html">releaselog/3_6_22.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+ <a href="releaselog/3_6_23_1.html">releaselog/3_6_23_1.html</a>
+ <a href="releaselog/3_6_3.html">releaselog/3_6_3.html</a>
+ <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="releaselog/3_6_6.html">releaselog/3_6_6.html</a>
+ <a href="releaselog/3_6_6_1.html">releaselog/3_6_6_1.html</a>
+ <a href="releaselog/3_6_6_2.html">releaselog/3_6_6_2.html</a>
+ <a href="releaselog/3_6_7.html">releaselog/3_6_7.html</a>
+ <a href="releaselog/3_6_8.html">releaselog/3_6_8.html</a>
+ <a href="releaselog/3_6_9.html">releaselog/3_6_9.html</a>
+ <a href="releaselog/3_7_0.html">releaselog/3_7_0.html</a>
+ <a href="releaselog/3_7_0_1.html">releaselog/3_7_0_1.html</a>
+ <a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+ <a href="releaselog/3_7_12_1.html">releaselog/3_7_12_1.html</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+ <a href="releaselog/3_7_14_1.html">releaselog/3_7_14_1.html</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="releaselog/3_7_15_1.html">releaselog/3_7_15_1.html</a>
+ <a href="releaselog/3_7_15_2.html">releaselog/3_7_15_2.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="releaselog/3_7_2.html">releaselog/3_7_2.html</a>
+ <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+ <a href="releaselog/3_7_6_1.html">releaselog/3_7_6_1.html</a>
+ <a href="releaselog/3_7_6_2.html">releaselog/3_7_6_2.html</a>
+ <a href="releaselog/3_7_6_3.html">releaselog/3_7_6_3.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+ <a href="releaselog/3_7_7_1.html">releaselog/3_7_7_1.html</a>
+ <a href="releaselog/3_7_8.html">releaselog/3_7_8.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+ <a href="releaselog/3_8_3_1.html">releaselog/3_8_3_1.html</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+ <a href="releaselog/3_8_7_1.html">releaselog/3_8_7_1.html</a>
+ <a href="releaselog/3_8_7_2.html">releaselog/3_8_7_2.html</a>
+ <a href="releaselog/3_8_7_3.html">releaselog/3_8_7_3.html</a>
+ <a href="releaselog/3_8_7_4.html">releaselog/3_8_7_4.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="versionnumbers.html">versionnumbers.html</a>
+<li>cintro &rarr; <a href="c3ref/intro.html">c3ref/intro.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="lts.html">lts.html</a>
+ <a href="quickstart.html">quickstart.html</a>
+<li>CLI &rarr; <a href="bytecodevtab.html">bytecodevtab.html</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_23_1">changes.html#version_3_23_1</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="changes.html#version_3_35_1">changes.html#version_3_35_1</a>
+ <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="changes.html#version_3_36_0">changes.html#version_3_36_0</a>
+ <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="changes.html#version_3_37_1">changes.html#version_3_37_1</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="changes.html#version_3_38_5">changes.html#version_3_38_5</a>
+ <a href="changes.html#version_3_40_1">changes.html#version_3_40_1</a>
+ <a href="changes.html#version_3_6_11">changes.html#version_3_6_11</a>
+ <a href="changes.html#version_3_6_12">changes.html#version_3_6_12</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="eqp.html">eqp.html</a>
+ <a href="floatingpoint.html#decext">floatingpoint.html#decext</a>
+ <a href="floatingpoint.html#ieee754ext">floatingpoint.html#ieee754ext</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="news.html">news.html</a>
+ <a href="nulinstr.html">nulinstr.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+ <a href="quickstart.html">quickstart.html</a>
+ <a href="recovery.html">recovery.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+ <a href="releaselog/3_6_11.html">releaselog/3_6_11.html</a>
+ <a href="releaselog/3_6_12.html">releaselog/3_6_12.html</a>
+ <a href="sqlar.html#cltools">sqlar.html#cltools</a>
+ <a href="stricttables.html">stricttables.html</a>
+ <a href="uintcseq.html">uintcseq.html</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>clone the entire repository &rarr; <a href="download.html#srctree">download.html#srctree</a>
+<li>Clustered indexes &rarr; <a href="fullsql.html">fullsql.html</a>
+<li>co-routines &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>coalesce &rarr; <a href="arch.html">arch.html</a>
+ <a href="changes.html#version_3_6_21">changes.html#version_3_6_21</a>
+ <a href="lang_corefunc.html#ifnull">lang_corefunc.html#ifnull</a>
+ <a href="optoverview.html#leftjoinreduction">optoverview.html#leftjoinreduction</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+<li>Code of Ethics &rarr; <a href="codeofconduct.html">codeofconduct.html</a>
+<li>COLLATE &rarr; <a href="fullsql.html">fullsql.html</a>
+<li>COLLATE clause &rarr; <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_collation">capi3ref.html#sqlite3_vtab_collation</a>
+ <a href="gencol.html">gencol.html</a>
+<li>COLLATE clauses &rarr; <a href="stricttables.html">stricttables.html</a>
+<li>COLLATE operator &rarr; <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_collation">capi3ref.html#sqlite3_vtab_collation</a>
+ <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="datatype3.html#colrules">datatype3.html#colrules</a>
+ <a href="lang_select.html#nullslast">lang_select.html#nullslast</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>collating function &rarr; <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a>
+<li>collating sequence &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="foreignkeys.html#parentchild">foreignkeys.html#parentchild</a>
+ <a href="gencol.html">gencol.html</a>
+ <a href="lang_createtable.html#collateclause">lang_createtable.html#collateclause</a>
+ <a href="lang_expr.html#collateop">lang_expr.html#collateop</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+<li>collating sequences &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cli.html#dotload">cli.html#dotload</a>
+ <a href="loadext.html">loadext.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+<li>collation &rarr; <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+ <a href="lang_select.html#fromclause">lang_select.html#fromclause</a>
+ <a href="lang_select.html#resultset">lang_select.html#resultset</a>
+<li>column access functions &rarr; <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>column affinity &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a>
+ <a href="lang_expr.html#hexint">lang_expr.html#hexint</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>column definition &rarr; <a href="datatype3.html#collation">datatype3.html#collation</a>
+ <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a>
+ <a href="lang_expr.html#collateop">lang_expr.html#collateop</a>
+<li>column definitions &rarr; <a href="lang_createvtab.html">lang_createvtab.html</a>
+ <a href="vtab.html">vtab.html</a>
+<li>column-constraint &rarr; <a href="gencol.html">gencol.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>
+<li>column-def &rarr; <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>
+<li>column-name-list &rarr; <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+<li>Columnar output modes &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>columnar output modes &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>colUsed field &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>Command Line Interface &rarr; <a href="changes.html#version_3_6_21">changes.html#version_3_6_21</a>
+ <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="compile.html#enable_iotrace">compile.html#enable_iotrace</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="recovery.html">recovery.html</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+<li>command-line interface &rarr; <a href="features.html">features.html</a>
+<li>command-line shell &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_14_2">changes.html#version_3_14_2</a>
+ <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="changes.html#version_3_8_10_1">changes.html#version_3_8_10_1</a>
+ <a href="changes.html#version_3_8_2">changes.html#version_3_8_2</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="changes.html#version_3_8_8_3">changes.html#version_3_8_8_3</a>
+ <a href="changes.html#version_3_8_9">changes.html#version_3_8_9</a>
+ <a href="compile.html#enable_explain_comments">compile.html#enable_explain_comments</a>
+ <a href="compile.html#enable_unknown_sql_function">compile.html#enable_unknown_sql_function</a>
+ <a href="compile.html#have_zlib">compile.html#have_zlib</a>
+ <a href="completion.html">completion.html</a>
+ <a href="csv.html">csv.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="dbpage.html">dbpage.html</a>
+ <a href="debugging.html">debugging.html</a>
+ <a href="eqp.html">eqp.html</a>
+ <a href="imposter.html#dotimposter">imposter.html#dotimposter</a>
+ <a href="lang_with.html#mandelbrot">lang_with.html#mandelbrot</a>
+ <a href="loadext.html">loadext.html</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="opcode.html#subprog">opcode.html#subprog</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a>
+ <a href="series.html">series.html</a>
+ <a href="sqlanalyze.html">sqlanalyze.html</a>
+ <a href="stmt.html">stmt.html</a>
+ <a href="vfs.html#shim">vfs.html#shim</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+ <a href="whentouse.html#website">whentouse.html#website</a>
+ <a href="zipfile.html">zipfile.html</a>
+<li>comment-syntax &rarr; <a href="lang_comment.html">lang_comment.html</a>
+<li>COMMIT &rarr; <a href="asyncvfs.html">asyncvfs.html</a>
+ <a href="c3ref/c_txn_none.html#sqlitetxnread">c3ref/c_txn_none.html#sqlitetxnread</a>
+ <a href="c3ref/c_txn_none.html#sqlitetxnwrite">c3ref/c_txn_none.html#sqlitetxnwrite</a>
+ <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>
+ <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_commit_hook">capi3ref.html#sqlite3_commit_hook</a>
+ <a href="capi3ref.html#sqlite3_get_autocommit">capi3ref.html#sqlite3_get_autocommit</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="capi3ref.html#sqlitetxnread">capi3ref.html#sqlitetxnread</a>
+ <a href="capi3ref.html#sqlitetxnwrite">capi3ref.html#sqlitetxnwrite</a>
+ <a href="changes.html#version_3_14_1">changes.html#version_3_14_1</a>
+ <a href="changes.html#version_3_32_2">changes.html#version_3_32_2</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="faq.html#q19">faq.html#q19</a>
+ <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="fts3.html#*fts4mergecmd">fts3.html#*fts4mergecmd</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_savepoint.html">lang_savepoint.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_cache_spill">pragma.html#pragma_cache_spill</a>
+ <a href="pragma.html#pragma_query_only">pragma.html#pragma_query_only</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+ <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+<li>commit-stmt &rarr; <a href="lang_transaction.html">lang_transaction.html</a>
+<li>common table expressions &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="compile.html#omit_cte">compile.html#omit_cte</a>
+ <a href="csv.html">csv.html</a>
+ <a href="features.html">features.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html#values">lang_select.html#values</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+ <a href="versionnumbers.html">versionnumbers.html</a>
+<li>common-table-expression &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>comparison expressions &rarr; <a href="lang_select.html#nullslast">lang_select.html#nullslast</a>
+<li>compile fts &rarr; <a href="fts3.html#fts4aux">fts3.html#fts4aux</a>
+ <a href="fts3.html#near">fts3.html#near</a>
+<li>compile loadable extensions &rarr; <a href="memstat.html">memstat.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>compile-time options &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="debugging.html">debugging.html</a>
+ <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="howtocompile.html#dll">howtocompile.html#dll</a>
+ <a href="lang_keywords.html">lang_keywords.html</a>
+ <a href="pragma.html#pragma_compile_options">pragma.html#pragma_compile_options</a>
+ <a href="privatebranch.html">privatebranch.html</a>
+<li>compile_options pragma &rarr; <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a>
+ <a href="capi3ref.html#sqlite3_compileoption_get">capi3ref.html#sqlite3_compileoption_get</a>
+ <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="compile.html#omit_compileoption_diags">compile.html#omit_compileoption_diags</a>
+ <a href="lang_corefunc.html#sqlite_compileoption_get">lang_corefunc.html#sqlite_compileoption_get</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+<li>Compiling Loadable Extensions &rarr; <a href="fts5.html#compiling_and_using_fts5">fts5.html#compiling_and_using_fts5</a>
+<li>complete list of SQLite releases &rarr; <a href="qmplan.html">qmplan.html</a>
+ <a href="releaselog/3_0_0.html">releaselog/3_0_0.html</a>
+ <a href="releaselog/3_0_1.html">releaselog/3_0_1.html</a>
+ <a href="releaselog/3_0_2.html">releaselog/3_0_2.html</a>
+ <a href="releaselog/3_0_3.html">releaselog/3_0_3.html</a>
+ <a href="releaselog/3_0_4.html">releaselog/3_0_4.html</a>
+ <a href="releaselog/3_0_5.html">releaselog/3_0_5.html</a>
+ <a href="releaselog/3_0_6.html">releaselog/3_0_6.html</a>
+ <a href="releaselog/3_0_7.html">releaselog/3_0_7.html</a>
+ <a href="releaselog/3_0_8.html">releaselog/3_0_8.html</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_1_0.html">releaselog/3_1_0.html</a>
+ <a href="releaselog/3_1_1.html">releaselog/3_1_1.html</a>
+ <a href="releaselog/3_1_2.html">releaselog/3_1_2.html</a>
+ <a href="releaselog/3_1_3.html">releaselog/3_1_3.html</a>
+ <a href="releaselog/3_1_4.html">releaselog/3_1_4.html</a>
+ <a href="releaselog/3_1_5.html">releaselog/3_1_5.html</a>
+ <a href="releaselog/3_1_6.html">releaselog/3_1_6.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+ <a href="releaselog/3_2_0.html">releaselog/3_2_0.html</a>
+ <a href="releaselog/3_2_1.html">releaselog/3_2_1.html</a>
+ <a href="releaselog/3_2_2.html">releaselog/3_2_2.html</a>
+ <a href="releaselog/3_2_3.html">releaselog/3_2_3.html</a>
+ <a href="releaselog/3_2_4.html">releaselog/3_2_4.html</a>
+ <a href="releaselog/3_2_5.html">releaselog/3_2_5.html</a>
+ <a href="releaselog/3_2_6.html">releaselog/3_2_6.html</a>
+ <a href="releaselog/3_2_7.html">releaselog/3_2_7.html</a>
+ <a href="releaselog/3_2_8.html">releaselog/3_2_8.html</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="releaselog/3_3_0.html">releaselog/3_3_0.html</a>
+ <a href="releaselog/3_3_1.html">releaselog/3_3_1.html</a>
+ <a href="releaselog/3_3_10.html">releaselog/3_3_10.html</a>
+ <a href="releaselog/3_3_11.html">releaselog/3_3_11.html</a>
+ <a href="releaselog/3_3_12.html">releaselog/3_3_12.html</a>
+ <a href="releaselog/3_3_13.html">releaselog/3_3_13.html</a>
+ <a href="releaselog/3_3_14.html">releaselog/3_3_14.html</a>
+ <a href="releaselog/3_3_15.html">releaselog/3_3_15.html</a>
+ <a href="releaselog/3_3_16.html">releaselog/3_3_16.html</a>
+ <a href="releaselog/3_3_17.html">releaselog/3_3_17.html</a>
+ <a href="releaselog/3_3_2.html">releaselog/3_3_2.html</a>
+ <a href="releaselog/3_3_3.html">releaselog/3_3_3.html</a>
+ <a href="releaselog/3_3_4.html">releaselog/3_3_4.html</a>
+ <a href="releaselog/3_3_5.html">releaselog/3_3_5.html</a>
+ <a href="releaselog/3_3_6.html">releaselog/3_3_6.html</a>
+ <a href="releaselog/3_3_7.html">releaselog/3_3_7.html</a>
+ <a href="releaselog/3_3_8.html">releaselog/3_3_8.html</a>
+ <a href="releaselog/3_3_9.html">releaselog/3_3_9.html</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+ <a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a>
+ <a href="releaselog/3_4_1.html">releaselog/3_4_1.html</a>
+ <a href="releaselog/3_4_2.html">releaselog/3_4_2.html</a>
+ <a href="releaselog/3_5_0.html">releaselog/3_5_0.html</a>
+ <a href="releaselog/3_5_1.html">releaselog/3_5_1.html</a>
+ <a href="releaselog/3_5_2.html">releaselog/3_5_2.html</a>
+ <a href="releaselog/3_5_3.html">releaselog/3_5_3.html</a>
+ <a href="releaselog/3_5_4.html">releaselog/3_5_4.html</a>
+ <a href="releaselog/3_5_5.html">releaselog/3_5_5.html</a>
+ <a href="releaselog/3_5_6.html">releaselog/3_5_6.html</a>
+ <a href="releaselog/3_5_7.html">releaselog/3_5_7.html</a>
+ <a href="releaselog/3_5_8.html">releaselog/3_5_8.html</a>
+ <a href="releaselog/3_5_9.html">releaselog/3_5_9.html</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+ <a href="releaselog/3_6_10.html">releaselog/3_6_10.html</a>
+ <a href="releaselog/3_6_11.html">releaselog/3_6_11.html</a>
+ <a href="releaselog/3_6_12.html">releaselog/3_6_12.html</a>
+ <a href="releaselog/3_6_13.html">releaselog/3_6_13.html</a>
+ <a href="releaselog/3_6_14.html">releaselog/3_6_14.html</a>
+ <a href="releaselog/3_6_14_1.html">releaselog/3_6_14_1.html</a>
+ <a href="releaselog/3_6_14_2.html">releaselog/3_6_14_2.html</a>
+ <a href="releaselog/3_6_15.html">releaselog/3_6_15.html</a>
+ <a href="releaselog/3_6_16.html">releaselog/3_6_16.html</a>
+ <a href="releaselog/3_6_16_1.html">releaselog/3_6_16_1.html</a>
+ <a href="releaselog/3_6_17.html">releaselog/3_6_17.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="releaselog/3_6_19.html">releaselog/3_6_19.html</a>
+ <a href="releaselog/3_6_2.html">releaselog/3_6_2.html</a>
+ <a href="releaselog/3_6_20.html">releaselog/3_6_20.html</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+ <a href="releaselog/3_6_22.html">releaselog/3_6_22.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+ <a href="releaselog/3_6_23_1.html">releaselog/3_6_23_1.html</a>
+ <a href="releaselog/3_6_3.html">releaselog/3_6_3.html</a>
+ <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="releaselog/3_6_6.html">releaselog/3_6_6.html</a>
+ <a href="releaselog/3_6_6_1.html">releaselog/3_6_6_1.html</a>
+ <a href="releaselog/3_6_6_2.html">releaselog/3_6_6_2.html</a>
+ <a href="releaselog/3_6_7.html">releaselog/3_6_7.html</a>
+ <a href="releaselog/3_6_8.html">releaselog/3_6_8.html</a>
+ <a href="releaselog/3_6_9.html">releaselog/3_6_9.html</a>
+ <a href="releaselog/3_7_0.html">releaselog/3_7_0.html</a>
+ <a href="releaselog/3_7_0_1.html">releaselog/3_7_0_1.html</a>
+ <a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+ <a href="releaselog/3_7_12_1.html">releaselog/3_7_12_1.html</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+ <a href="releaselog/3_7_14_1.html">releaselog/3_7_14_1.html</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="releaselog/3_7_15_1.html">releaselog/3_7_15_1.html</a>
+ <a href="releaselog/3_7_15_2.html">releaselog/3_7_15_2.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="releaselog/3_7_2.html">releaselog/3_7_2.html</a>
+ <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+ <a href="releaselog/3_7_6_1.html">releaselog/3_7_6_1.html</a>
+ <a href="releaselog/3_7_6_2.html">releaselog/3_7_6_2.html</a>
+ <a href="releaselog/3_7_6_3.html">releaselog/3_7_6_3.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+ <a href="releaselog/3_7_7_1.html">releaselog/3_7_7_1.html</a>
+ <a href="releaselog/3_7_8.html">releaselog/3_7_8.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+ <a href="releaselog/3_8_3_1.html">releaselog/3_8_3_1.html</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+ <a href="releaselog/3_8_7_1.html">releaselog/3_8_7_1.html</a>
+ <a href="releaselog/3_8_7_2.html">releaselog/3_8_7_2.html</a>
+ <a href="releaselog/3_8_7_3.html">releaselog/3_8_7_3.html</a>
+ <a href="releaselog/3_8_7_4.html">releaselog/3_8_7_4.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>COMPLETION &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>COMPLETION extension &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>compound query &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="eqp.html#or-opt">eqp.html#or-opt</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>compound select &rarr; <a href="lang_with.html#mathint">lang_with.html#mathint</a>
+ <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>
+<li>compound SELECT &rarr; <a href="datatype3.html#affcompoundview">datatype3.html#affcompoundview</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#limitoffset">lang_select.html#limitoffset</a>
+ <a href="lang_select.html#nullslast">lang_select.html#nullslast</a>
+ <a href="lang_select.html#orderby">lang_select.html#orderby</a>
+<li>compound SELECTs &rarr; <a href="lang_insert.html">lang_insert.html</a>
+<li>compound-operator &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>compound-select-stmt &rarr; <a href="lang_select.html#compound">lang_select.html#compound</a>
+<li>compressed FTS4 content &rarr; <a href="changes.html#version_3_7_6">changes.html#version_3_7_6</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+<li>compute the Mandelbrot set &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>config method &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>configuration option &rarr; <a href="c3ref/config.html">c3ref/config.html</a>
+ <a href="capi3ref.html#sqlite3_config">capi3ref.html#sqlite3_config</a>
+<li>conflict clause &rarr; <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+<li>conflict resolution algorithm &rarr; <a href="lang_upsert.html#parseambig">lang_upsert.html#parseambig</a>
+<li>conflict resolution mode &rarr; <a href="c3ref/c_deny.html">c3ref/c_deny.html</a>
+ <a href="capi3ref.html#SQLITE_DENY">capi3ref.html#SQLITE_DENY</a>
+ <a href="rescode.html#abort">rescode.html#abort</a>
+<li>conflict-clause &rarr; <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+<li>constant-propagation optimization &rarr; <a href="changes.html#version_3_36_0">changes.html#version_3_36_0</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+<li>contentless fts4 tables &rarr; <a href="rbu.html#fts4_tables">rbu.html#fts4_tables</a>
+<li>copyright &rarr; <a href="hirely.html">hirely.html</a>
+<li>Core Functions &rarr; <a href="fullsql.html">fullsql.html</a>
+<li>corefunc &rarr; <a href="fts5.html">fts5.html</a>
+ <a href="fts5.html#_auxiliary_functions_">fts5.html#_auxiliary_functions_</a>
+ <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+<li>coreqp &rarr; <a href="changes.html#version_3_7_13">changes.html#version_3_7_13</a>
+ <a href="inmemorydb.html#sharedmemdb">inmemorydb.html#sharedmemdb</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+<li>correlated subqueries &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>count &rarr; <a href="arch.html">arch.html</a>
+<li>count_changes pragma &rarr; <a href="c3ref/changes.html">c3ref/changes.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_changes">capi3ref.html#sqlite3_changes</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="lang_createtrigger.html#instead_of_trigger">lang_createtrigger.html#instead_of_trigger</a>
+ <a href="lang_delete.html#truncateopt">lang_delete.html#truncateopt</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>covering index &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="eqp.html">eqp.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="queryplanner.html#srchsortcovidx">queryplanner.html#srchsortcovidx</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+<li>covering indexes &rarr; <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+<li>CPU cycles used &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>CPU performance measurement &rarr; <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>CREATE INDEX &rarr; <a href="aff_short.html">aff_short.html</a>
+ <a href="appfileformat.html">appfileformat.html</a>
+ <a href="changes.html#version_3_7_8">changes.html#version_3_7_8</a>
+ <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="expridx.html">expridx.html</a>
+ <a href="fileformat2.html##sqltab">fileformat2.html##sqltab</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a>
+ <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+ <a href="lang_dropindex.html">lang_dropindex.html</a>
+ <a href="limits.html#max_page_count">limits.html#max_page_count</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#where_clause">optoverview.html#where_clause</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a>
+ <a href="pragma.html#pragma_index_list">pragma.html#pragma_index_list</a>
+ <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a>
+ <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a>
+ <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a>
+ <a href="releaselog/3_7_8.html">releaselog/3_7_8.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="vtab.html">vtab.html</a>
+<li>CREATE TABLE &rarr; <a href="csv.html">csv.html</a>
+ <a href="eqp.html">eqp.html</a>
+ <a href="expridx.html">expridx.html</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a>
+ <a href="foreignkeys.html">foreignkeys.html</a>
+ <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>
+ <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+ <a href="lang_createindex.html#collidx">lang_createindex.html#collidx</a>
+ <a href="lang_createvtab.html">lang_createvtab.html</a>
+ <a href="lang_droptable.html">lang_droptable.html</a>
+ <a href="lang_expr.html#in_op">lang_expr.html#in_op</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="stricttables.html">stricttables.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+<li>CREATE TABLE AS &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>CREATE TRIGGER &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger</a>
+ <a href="c3ref/changes.html">c3ref/changes.html</a>
+ <a href="capi3ref.html#sqlite3_changes">capi3ref.html#sqlite3_changes</a>
+ <a href="capi3ref.html#sqlitedbconfigenabletrigger">capi3ref.html#sqlitedbconfigenabletrigger</a>
+ <a href="changes.html#version_3_16_1">changes.html#version_3_16_1</a>
+ <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="changes.html#version_3_39_4">changes.html#version_3_39_4</a>
+ <a href="compile.html#omit_trigger">compile.html#omit_trigger</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_droptrigger.html">lang_droptrigger.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_with.html#mathint">lang_with.html#mathint</a>
+ <a href="opcode.html#subprog">opcode.html#subprog</a>
+ <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="rescode.html#constraint_trigger">rescode.html#constraint_trigger</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+<li>CREATE VIEW &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview</a>
+ <a href="capi3ref.html#sqlitedbconfigenableview">capi3ref.html#sqlitedbconfigenableview</a>
+ <a href="changes.html#version_3_8_7_1">changes.html#version_3_8_7_1</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="compile.html#omit_view">compile.html#omit_view</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+ <a href="lang_dropview.html">lang_dropview.html</a>
+ <a href="releaselog/3_8_7_1.html">releaselog/3_8_7_1.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+<li>CREATE VIRTUAL TABLE &rarr; <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="cli.html#zipdb">cli.html#zipdb</a>
+ <a href="dbstat.html">dbstat.html</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#epovtab">vtab.html#epovtab</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+<li>create-index-stmt &rarr; <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+<li>create-table-stmt &rarr; <a href="lang_createtable.html">lang_createtable.html</a>
+<li>create-trigger-stmt &rarr; <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+<li>create-view-stmt &rarr; <a href="lang_createview.html">lang_createview.html</a>
+<li>create-virtual-table-stmt &rarr; <a href="lang_createvtab.html">lang_createvtab.html</a>
+ <a href="vtab.html">vtab.html</a>
+<li>CROSS JOIN &rarr; <a href="lang_select.html#crossjoin">lang_select.html#crossjoin</a>
+ <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a>
+<li>csv &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>CSV virtual table &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>cte-table-name &rarr; <a href="lang_with.html">lang_with.html</a>
+ <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>
+<li>custom auxiliary functions &rarr; <a href="fts5.html#appendix_a">fts5.html#appendix_a</a>
+<li>custom builds &rarr; <a href="c3ref/initialize.html">c3ref/initialize.html</a>
+ <a href="capi3ref.html#sqlite3_initialize">capi3ref.html#sqlite3_initialize</a>
+<li>custom r-tree queries &rarr; <a href="changes.html#version_3_7_3">changes.html#version_3_7_3</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a>
+<li>custom SQL functions &rarr; <a href="security.html#baddb">security.html#baddb</a>
+<li>custom tokenizers &rarr; <a href="fts5.html#tokenizers">fts5.html#tokenizers</a>
+<li>custom virtual tables &rarr; <a href="security.html#baddb">security.html#baddb</a>
+<li>Dan Kennedy &rarr; <a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a>
+<li>data_store_directory pragma &rarr; <a href="c3ref/data_directory.html">c3ref/data_directory.html</a>
+ <a href="capi3ref.html#sqlite3_data_directory">capi3ref.html#sqlite3_data_directory</a>
+<li>data_version pragma &rarr; <a href="c3ref/changes.html">c3ref/changes.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_changes">capi3ref.html#sqlite3_changes</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+<li>database connection &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="appfunc.html">appfunc.html</a>
+ <a href="appfunc.html#sec">appfunc.html#sec</a>
+ <a href="backup.html">backup.html</a>
+ <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupinit">c3ref/backup_finish.html#sqlite3backupinit</a>
+ <a href="c3ref/backup_finish.html#sqlite3backuppagecount">c3ref/backup_finish.html#sqlite3backuppagecount</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>
+ <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">c3ref/c_config_covering_index_scan.html#sqliteconfigserialized</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside</a>
+ <a href="c3ref/c_trace.html#sqlitetraceclose">c3ref/c_trace.html#sqlitetraceclose</a>
+ <a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a>
+ <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>
+ <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a>
+ <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/create_module.html">c3ref/create_module.html</a>
+ <a href="c3ref/data_directory.html">c3ref/data_directory.html</a>
+ <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>
+ <a href="c3ref/db_config.html">c3ref/db_config.html</a>
+ <a href="c3ref/db_handle.html">c3ref/db_handle.html</a>
+ <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a>
+ <a href="c3ref/db_status.html">c3ref/db_status.html</a>
+ <a href="c3ref/deserialize.html">c3ref/deserialize.html</a>
+ <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="c3ref/errcode.html">c3ref/errcode.html</a>
+ <a href="c3ref/exec.html">c3ref/exec.html</a>
+ <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>
+ <a href="c3ref/limit.html">c3ref/limit.html</a>
+ <a href="c3ref/module.html">c3ref/module.html</a>
+ <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>
+ <a href="c3ref/serialize.html">c3ref/serialize.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/snapshot.html">c3ref/snapshot.html</a>
+ <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a>
+ <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>
+ <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>
+ <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>
+ <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a>
+ <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>
+ <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a>
+ <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>
+ <a href="capi3ref.html#SQLITE_TXN_NONE">capi3ref.html#SQLITE_TXN_NONE</a>
+ <a href="capi3ref.html#sqlite3_auto_extension">capi3ref.html#sqlite3_auto_extension</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="capi3ref.html#sqlite3_busy_handler">capi3ref.html#sqlite3_busy_handler</a>
+ <a href="capi3ref.html#sqlite3_busy_timeout">capi3ref.html#sqlite3_busy_timeout</a>
+ <a href="capi3ref.html#sqlite3_collation_needed">capi3ref.html#sqlite3_collation_needed</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_commit_hook">capi3ref.html#sqlite3_commit_hook</a>
+ <a href="capi3ref.html#sqlite3_context_db_handle">capi3ref.html#sqlite3_context_db_handle</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqlite3_create_module">capi3ref.html#sqlite3_create_module</a>
+ <a href="capi3ref.html#sqlite3_data_directory">capi3ref.html#sqlite3_data_directory</a>
+ <a href="capi3ref.html#sqlite3_db_cacheflush">capi3ref.html#sqlite3_db_cacheflush</a>
+ <a href="capi3ref.html#sqlite3_db_config">capi3ref.html#sqlite3_db_config</a>
+ <a href="capi3ref.html#sqlite3_db_handle">capi3ref.html#sqlite3_db_handle</a>
+ <a href="capi3ref.html#sqlite3_db_mutex">capi3ref.html#sqlite3_db_mutex</a>
+ <a href="capi3ref.html#sqlite3_db_status">capi3ref.html#sqlite3_db_status</a>
+ <a href="capi3ref.html#sqlite3_deserialize">capi3ref.html#sqlite3_deserialize</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="capi3ref.html#sqlite3_errcode">capi3ref.html#sqlite3_errcode</a>
+ <a href="capi3ref.html#sqlite3_exec">capi3ref.html#sqlite3_exec</a>
+ <a href="capi3ref.html#sqlite3_interrupt">capi3ref.html#sqlite3_interrupt</a>
+ <a href="capi3ref.html#sqlite3_limit">capi3ref.html#sqlite3_limit</a>
+ <a href="capi3ref.html#sqlite3_module">capi3ref.html#sqlite3_module</a>
+ <a href="capi3ref.html#sqlite3_next_stmt">capi3ref.html#sqlite3_next_stmt</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_progress_handler">capi3ref.html#sqlite3_progress_handler</a>
+ <a href="capi3ref.html#sqlite3_serialize">capi3ref.html#sqlite3_serialize</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_snapshot">capi3ref.html#sqlite3_snapshot</a>
+ <a href="capi3ref.html#sqlite3_snapshot_get">capi3ref.html#sqlite3_snapshot_get</a>
+ <a href="capi3ref.html#sqlite3_snapshot_open">capi3ref.html#sqlite3_snapshot_open</a>
+ <a href="capi3ref.html#sqlite3_table_column_metadata">capi3ref.html#sqlite3_table_column_metadata</a>
+ <a href="capi3ref.html#sqlite3_temp_directory">capi3ref.html#sqlite3_temp_directory</a>
+ <a href="capi3ref.html#sqlite3_trace_v2">capi3ref.html#sqlite3_trace_v2</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="capi3ref.html#sqlite3_vtab_config">capi3ref.html#sqlite3_vtab_config</a>
+ <a href="capi3ref.html#sqlite3_wal_autocheckpoint">capi3ref.html#sqlite3_wal_autocheckpoint</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint">capi3ref.html#sqlite3_wal_checkpoint</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint_v2">capi3ref.html#sqlite3_wal_checkpoint_v2</a>
+ <a href="capi3ref.html#sqlite3backupinit">capi3ref.html#sqlite3backupinit</a>
+ <a href="capi3ref.html#sqlite3backuppagecount">capi3ref.html#sqlite3backuppagecount</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="capi3ref.html#sqliteconfiglookaside">capi3ref.html#sqliteconfiglookaside</a>
+ <a href="capi3ref.html#sqliteconfigmultithread">capi3ref.html#sqliteconfigmultithread</a>
+ <a href="capi3ref.html#sqliteconfigserialized">capi3ref.html#sqliteconfigserialized</a>
+ <a href="capi3ref.html#sqlitedbconfiglookaside">capi3ref.html#sqlitedbconfiglookaside</a>
+ <a href="capi3ref.html#sqlitetraceclose">capi3ref.html#sqlitetraceclose</a>
+ <a href="changes.html#version_3_5_8">changes.html#version_3_5_8</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#default_lookaside">compile.html#default_lookaside</a>
+ <a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="lang_analyze.html#autoanalyze">lang_analyze.html#autoanalyze</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_expr.html#varparam">lang_expr.html#varparam</a>
+ <a href="lang_vacuum.html#vacuuminto">lang_vacuum.html#vacuuminto</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a>
+ <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a>
+ <a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a>
+ <a href="pragma.html#pragma_optimize">pragma.html#pragma_optimize</a>
+ <a href="releaselog/3_5_8.html">releaselog/3_5_8.html</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="rescode.html#abort">rescode.html#abort</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+ <a href="rescode.html#busy_snapshot">rescode.html#busy_snapshot</a>
+ <a href="rescode.html#locked">rescode.html#locked</a>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+ <a href="stmt.html">stmt.html</a>
+ <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a>
+ <a href="tempfiles.html#tempdb">tempfiles.html#tempdb</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+ <a href="useovernet.html">useovernet.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="vtablist.html">vtablist.html</a>
+ <a href="wal.html#walfile">wal.html#walfile</a>
+<li>database connections &rarr; <a href="c3ref/backup_finish.html#sqlite3backupinit">c3ref/backup_finish.html#sqlite3backupinit</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">c3ref/c_config_covering_index_scan.html#sqliteconfigserialized</a>
+ <a href="c3ref/initialize.html">c3ref/initialize.html</a>
+ <a href="c3ref/snapshot.html">c3ref/snapshot.html</a>
+ <a href="capi3ref.html#sqlite3_initialize">capi3ref.html#sqlite3_initialize</a>
+ <a href="capi3ref.html#sqlite3_snapshot">capi3ref.html#sqlite3_snapshot</a>
+ <a href="capi3ref.html#sqlite3backupinit">capi3ref.html#sqlite3backupinit</a>
+ <a href="capi3ref.html#sqliteconfigmultithread">capi3ref.html#sqliteconfigmultithread</a>
+ <a href="capi3ref.html#sqliteconfigserialized">capi3ref.html#sqliteconfigserialized</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cli.html#dotconn">cli.html#dotconn</a>
+ <a href="compile.html#default_automatic_index">compile.html#default_automatic_index</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="dbstat.html">dbstat.html</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="rescode.html#protocol">rescode.html#protocol</a>
+ <a href="uri.html#urinolock">uri.html#urinolock</a>
+ <a href="vfs.html">vfs.html</a>
+<li>database corruption caused by inconsistent use of 83 filenames &rarr; <a href="howtocorrupt.html#delhotjrnl">howtocorrupt.html#delhotjrnl</a>
+ <a href="shortnames.html">shortnames.html</a>
+<li>database filename aliasing &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="errlog.html">errlog.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>database header &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="pragma.html#pragma_application_id">pragma.html#pragma_application_id</a>
+ <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a>
+ <a href="pragma.html#pragma_user_version">pragma.html#pragma_user_version</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="wal.html#bkwrds">wal.html#bkwrds</a>
+<li>datatype &rarr; <a href="faq.html#q3">faq.html#q3</a>
+ <a href="faq.html#q4">faq.html#q4</a>
+ <a href="flextypegood.html">flextypegood.html</a>
+ <a href="lang_corefunc.html#typeof">lang_corefunc.html#typeof</a>
+ <a href="lang_expr.html#collateop">lang_expr.html#collateop</a>
+ <a href="quirks.html">quirks.html</a>
+ <a href="stricttables.html">stricttables.html</a>
+<li>Date And Time Functions &rarr; <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="datatype3.html#datetime">datatype3.html#datetime</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+<li>date and time functions &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="changes.html#version_3_38_1">changes.html#version_3_38_1</a>
+ <a href="compile.html#gmtime_r">compile.html#gmtime_r</a>
+ <a href="compile.html#localtime_r">compile.html#localtime_r</a>
+ <a href="compile.html#localtime_s">compile.html#localtime_s</a>
+ <a href="datatype3.html#datetime">datatype3.html#datetime</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="quirks.html">quirks.html</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>date/time special case &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>datefunc &rarr; <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+<li>datetime SQL function &rarr; <a href="optoverview.html#leftjoinreduction">optoverview.html#leftjoinreduction</a>
+<li>dbhash.exe &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>dbsqlfuzz &rarr; <a href="testing.html#fuzzcheck">testing.html#fuzzcheck</a>
+ <a href="testing.html#tension">testing.html#tension</a>
+<li>dbstat &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>DBSTAT aggregated mode &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>dbstat virtual table &rarr; <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="changes.html#version_3_8_10_1">changes.html#version_3_8_10_1</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="compile.html#enable_dbstat_vtab">compile.html#enable_dbstat_vtab</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="sqlanalyze.html">sqlanalyze.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtab.html#epovtab">vtab.html#epovtab</a>
+<li>DBSTAT virtual table &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>debugging memory allocator &rarr; <a href="compile.html#memdebug">compile.html#memdebug</a>
+ <a href="compile.html#zero_malloc">compile.html#zero_malloc</a>
+<li>decimal extension &rarr; <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="cli.html#miscfeatures">cli.html#miscfeatures</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+<li>DEFAULT clauses &rarr; <a href="c3ref/c_deterministic.html#sqlitedirectonly">c3ref/c_deterministic.html#sqlitedirectonly</a>
+ <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a>
+ <a href="capi3ref.html#sqlitedirectonly">capi3ref.html#sqlitedirectonly</a>
+ <a href="capi3ref.html#sqliteinnocuous">capi3ref.html#sqliteinnocuous</a>
+ <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a>
+ <a href="stricttables.html">stricttables.html</a>
+<li>default column value &rarr; <a href="lang_insert.html">lang_insert.html</a>
+<li>default memory allocator &rarr; <a href="compile.html#zero_malloc">compile.html#zero_malloc</a>
+ <a href="malloc.html#memsysx">malloc.html#memsysx</a>
+<li>default value &rarr; <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a>
+ <a href="gencol.html">gencol.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+<li>default_cache_size pragma &rarr; <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+<li>defense against dark arts &rarr; <a href="cves.html">cves.html</a>
+ <a href="news.html">news.html</a>
+<li>defensive code &rarr; <a href="testing.html#tension">testing.html#tension</a>
+<li>defer_foreign_keys pragma &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>DELETE &rarr; <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+ <a href="changes.html#version_3_12_2">changes.html#version_3_12_2</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_14_2">changes.html#version_3_14_2</a>
+ <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="changes.html#version_3_6_4">changes.html#version_3_6_4</a>
+ <a href="cli.html#selftest">cli.html#selftest</a>
+ <a href="compile.html#enable_update_delete_limit">compile.html#enable_update_delete_limit</a>
+ <a href="compile.html#omit_truncate_optimization">compile.html#omit_truncate_optimization</a>
+ <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="fts5.html">fts5.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_droptable.html">lang_droptable.html</a>
+ <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a>
+ <a href="pragma.html#pragma_writable_schema">pragma.html#pragma_writable_schema</a>
+ <a href="rbu.html">rbu.html</a>
+ <a href="rbu.html#rbu_updates">rbu.html#rbu_updates</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a>
+ <a href="rtree.html">rtree.html</a>
+ <a href="vtab.html">vtab.html</a>
+<li>delete-stmt &rarr; <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+<li>delete-stmt-limited &rarr; <a href="lang_delete.html">lang_delete.html</a>
+<li>deleting a hot journal &rarr; <a href="shortnames.html#db83corrupt">shortnames.html#db83corrupt</a>
+<li>deprecated &rarr; <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a>
+ <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_aggregate_count">capi3ref.html#sqlite3_aggregate_count</a>
+<li>DESC &rarr; <a href="fullsql.html">fullsql.html</a>
+<li>descending indexes &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>descending indices &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="compile.html#default_file_format">compile.html#default_file_format</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>DETACH &rarr; <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>
+ <a href="c3ref/db_name.html">c3ref/db_name.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_db_filename">capi3ref.html#sqlite3_db_filename</a>
+ <a href="capi3ref.html#sqlite3_db_name">capi3ref.html#sqlite3_db_name</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="compile.html#omit_attach">compile.html#omit_attach</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="tempfiles.html#tempdb">tempfiles.html#tempdb</a>
+<li>DETACH DATABASE &rarr; <a href="lang_attach.html">lang_attach.html</a>
+<li>detach-stmt &rarr; <a href="lang_detach.html">lang_detach.html</a>
+<li>deterministic functions &rarr; <a href="expridx.html">expridx.html</a>
+ <a href="gencol.html">gencol.html</a>
+<li>deterministic SQL functions &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>DISTINCT &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>doclist &rarr; <a href="keyword_index.html">keyword_index.html</a>
+ <a href="sitemap.html">sitemap.html</a>
+<li>dot-commands &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="cli.html#dotconn">cli.html#dotconn</a>
+ <a href="cli.html#dotread">cli.html#dotread</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>double-quoted string literal &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml</a>
+ <a href="capi3ref.html#sqlitedbconfigdqsddl">capi3ref.html#sqlitedbconfigdqsddl</a>
+ <a href="capi3ref.html#sqlitedbconfigdqsdml">capi3ref.html#sqlitedbconfigdqsdml</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="compile.html#dqs">compile.html#dqs</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+<li>download page &rarr; <a href="getthecode.html">getthecode.html</a>
+ <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="howtocompile.html#tcl">howtocompile.html#tcl</a>
+<li>drop column &rarr; <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+<li>DROP INDEX &rarr; <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_naming.html">lang_naming.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+<li>DROP TABLE &rarr; <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="foreignkeys.html">foreignkeys.html</a>
+ <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createvtab.html">lang_createvtab.html</a>
+ <a href="lang_naming.html">lang_naming.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="rescode.html#locked">rescode.html#locked</a>
+ <a href="rtree.html">rtree.html</a>
+ <a href="unionvtab.html">unionvtab.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtab.html#sqlite3_module.xDestroy">vtab.html#sqlite3_module.xDestroy</a>
+<li>DROP TRIGGER &rarr; <a href="compile.html#omit_trigger">compile.html#omit_trigger</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_naming.html">lang_naming.html</a>
+<li>DROP VIEW &rarr; <a href="compile.html#omit_view">compile.html#omit_view</a>
+ <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_naming.html">lang_naming.html</a>
+<li>drop-index-stmt &rarr; <a href="lang_dropindex.html">lang_dropindex.html</a>
+<li>drop-table-stmt &rarr; <a href="lang_droptable.html">lang_droptable.html</a>
+<li>drop-trigger-stmt &rarr; <a href="lang_droptrigger.html">lang_droptrigger.html</a>
+<li>drop-view-stmt &rarr; <a href="lang_dropview.html">lang_dropview.html</a>
+<li>dynamic typing &rarr; <a href="faq.html#q2">faq.html#q2</a>
+ <a href="faq.html#q3">faq.html#q3</a>
+ <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>
+<li>edit SQL function &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>editdist3 &rarr; <a href="spellfix1.html#configeditdist">spellfix1.html#configeditdist</a>
+<li>encoding &rarr; <a href="fts3.html#limitations">fts3.html#limitations</a>
+ <a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a>
+<li>enhanced query syntax &rarr; <a href="fts3.html#compiling_and_enabling_fts3_and_fts4">fts3.html#compiling_and_enabling_fts3_and_fts4</a>
+<li>eponymous virtual table &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="dbstat.html">dbstat.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+<li>eponymous virtual tables &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+<li>eponymous-only virtual table &rarr; <a href="dbpage.html">dbpage.html</a>
+ <a href="memstat.html">memstat.html</a>
+ <a href="stmt.html">stmt.html</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+<li>eponymous-only virtual tables &rarr; <a href="bytecodevtab.html">bytecodevtab.html</a>
+<li>eqp-or-opt &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>error code &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="backup.html">backup.html</a>
+ <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupfinish">c3ref/backup_finish.html#sqlite3backupfinish</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>
+ <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>
+ <a href="c3ref/config.html">c3ref/config.html</a>
+ <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>
+ <a href="c3ref/db_status.html">c3ref/db_status.html</a>
+ <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="c3ref/finalize.html">c3ref/finalize.html</a>
+ <a href="c3ref/initialize.html">c3ref/initialize.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>
+ <a href="c3ref/status.html">c3ref/status.html</a>
+ <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>
+ <a href="capi3ref.html#SQLITE_CONFIG_COVERING_INDEX_SCAN">capi3ref.html#SQLITE_CONFIG_COVERING_INDEX_SCAN</a>
+ <a href="capi3ref.html#SQLITE_DBCONFIG_DEFENSIVE">capi3ref.html#SQLITE_DBCONFIG_DEFENSIVE</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_auto_extension">capi3ref.html#sqlite3_auto_extension</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_read">capi3ref.html#sqlite3_blob_read</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="capi3ref.html#sqlite3_config">capi3ref.html#sqlite3_config</a>
+ <a href="capi3ref.html#sqlite3_db_cacheflush">capi3ref.html#sqlite3_db_cacheflush</a>
+ <a href="capi3ref.html#sqlite3_db_status">capi3ref.html#sqlite3_db_status</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="capi3ref.html#sqlite3_finalize">capi3ref.html#sqlite3_finalize</a>
+ <a href="capi3ref.html#sqlite3_initialize">capi3ref.html#sqlite3_initialize</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</a>
+ <a href="capi3ref.html#sqlite3_snapshot_open">capi3ref.html#sqlite3_snapshot_open</a>
+ <a href="capi3ref.html#sqlite3_status">capi3ref.html#sqlite3_status</a>
+ <a href="capi3ref.html#sqlite3_table_column_metadata">capi3ref.html#sqlite3_table_column_metadata</a>
+ <a href="capi3ref.html#sqlite3backupfinish">capi3ref.html#sqlite3backupfinish</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+ <a href="vtab.html#xfilter">vtab.html#xfilter</a>
+ <a href="vtab.html#xnext">vtab.html#xnext</a>
+ <a href="vtab.html#xrename">vtab.html#xrename</a>
+ <a href="vtab.html#xrowid">vtab.html#xrowid</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>error codes &rarr; <a href="c3ref/constlist.html">c3ref/constlist.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+<li>error log &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">c3ref/c_config_covering_index_scan.html#sqliteconfiglog</a>
+ <a href="c3ref/log.html">c3ref/log.html</a>
+ <a href="capi3ref.html#sqlite3_log">capi3ref.html#sqlite3_log</a>
+ <a href="capi3ref.html#sqliteconfiglog">capi3ref.html#sqliteconfiglog</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="howtocorrupt.html#alias">howtocorrupt.html#alias</a>
+ <a href="howtocorrupt.html#unlink">howtocorrupt.html#unlink</a>
+ <a href="optoverview.html#autoindex">optoverview.html#autoindex</a>
+ <a href="quirks.html#dblquote">quirks.html#dblquote</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>ESCAPE &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>eval method &rarr; <a href="quickstart.html">quickstart.html</a>
+<li>EXCLUDE clause &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>EXCLUSIVE lock &rarr; <a href="pragma.html#pragma_cache_spill">pragma.html#pragma_cache_spill</a>
+<li>exclusive locking mode &rarr; <a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a>
+ <a href="walformat.html#shm">walformat.html#shm</a>
+<li>experimental &rarr; <a href="c3ref/funclist.html">c3ref/funclist.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+ <a href="session.html#sqlite3_rebaser">session.html#sqlite3_rebaser</a>
+ <a href="session.html#sqlite3rebaser_configure">session.html#sqlite3rebaser_configure</a>
+ <a href="session.html#sqlite3rebaser_create">session.html#sqlite3rebaser_create</a>
+ <a href="session.html#sqlite3rebaser_delete">session.html#sqlite3rebaser_delete</a>
+ <a href="session.html#sqlite3rebaser_rebase">session.html#sqlite3rebaser_rebase</a>
+ <a href="session/rebaser.html">session/rebaser.html</a>
+ <a href="session/sqlite3rebaser_configure.html">session/sqlite3rebaser_configure.html</a>
+ <a href="session/sqlite3rebaser_create.html">session/sqlite3rebaser_create.html</a>
+ <a href="session/sqlite3rebaser_delete.html">session/sqlite3rebaser_delete.html</a>
+ <a href="session/sqlite3rebaser_rebase.html">session/sqlite3rebaser_rebase.html</a>
+<li>experimental memory allocators &rarr; <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+<li>EXPLAIN &rarr; <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_14_2">changes.html#version_3_14_2</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_8_2">changes.html#version_3_8_2</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="compile.html#enable_explain_comments">compile.html#enable_explain_comments</a>
+ <a href="compile.html#enable_unknown_sql_function">compile.html#enable_unknown_sql_function</a>
+ <a href="compile.html#omit_explain">compile.html#omit_explain</a>
+ <a href="debugging.html">debugging.html</a>
+ <a href="eqp.html">eqp.html</a>
+ <a href="howitworks.html">howitworks.html</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="opcode.html">opcode.html</a>
+ <a href="opcode.html#subprog">opcode.html#subprog</a>
+ <a href="optoverview.html#or_opt">optoverview.html#or_opt</a>
+ <a href="pragma.html">pragma.html</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+<li>EXPLAIN QUERY PLAN &rarr; <a href="c3ref/c_scanstat_est.html#sqlitescanstatexplain">c3ref/c_scanstat_est.html#sqlitescanstatexplain</a>
+ <a href="c3ref/c_scanstat_est.html#sqlitescanstatselectid">c3ref/c_scanstat_est.html#sqlitescanstatselectid</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="capi3ref.html#sqlitescanstatexplain">capi3ref.html#sqlitescanstatexplain</a>
+ <a href="capi3ref.html#sqlitescanstatselectid">capi3ref.html#sqlitescanstatselectid</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="changes.html#version_3_36_0">changes.html#version_3_36_0</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="cli.html#expert">cli.html#expert</a>
+ <a href="compile.html#enable_unknown_sql_function">compile.html#enable_unknown_sql_function</a>
+ <a href="debugging.html">debugging.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html">pragma.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>explain query plan &rarr; <a href="lang_explain.html">lang_explain.html</a>
+<li>export to excel &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>expr &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>expression affinity &rarr; <a href="lang_createtable.html#createtabas">lang_createtable.html#createtabas</a>
+<li>expression index &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_27_1">changes.html#version_3_27_1</a>
+ <a href="deterministic.html">deterministic.html</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a>
+ <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>expression indexes &rarr; <a href="c3ref/c_deterministic.html#sqlitedirectonly">c3ref/c_deterministic.html#sqlitedirectonly</a>
+ <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a>
+ <a href="capi3ref.html#sqlitedirectonly">capi3ref.html#sqlitedirectonly</a>
+ <a href="capi3ref.html#sqliteinnocuous">capi3ref.html#sqliteinnocuous</a>
+ <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+<li>ext-v-prim &rarr; <a href="rescode.html#abort_rollback">rescode.html#abort_rollback</a>
+ <a href="rescode.html#auth_user">rescode.html#auth_user</a>
+ <a href="rescode.html#busy_recovery">rescode.html#busy_recovery</a>
+ <a href="rescode.html#busy_snapshot">rescode.html#busy_snapshot</a>
+ <a href="rescode.html#cantopen_convpath">rescode.html#cantopen_convpath</a>
+ <a href="rescode.html#cantopen_fullpath">rescode.html#cantopen_fullpath</a>
+ <a href="rescode.html#cantopen_isdir">rescode.html#cantopen_isdir</a>
+ <a href="rescode.html#constraint_check">rescode.html#constraint_check</a>
+ <a href="rescode.html#constraint_commithook">rescode.html#constraint_commithook</a>
+ <a href="rescode.html#constraint_datatype">rescode.html#constraint_datatype</a>
+ <a href="rescode.html#constraint_foreignkey">rescode.html#constraint_foreignkey</a>
+ <a href="rescode.html#constraint_notnull">rescode.html#constraint_notnull</a>
+ <a href="rescode.html#constraint_pinned">rescode.html#constraint_pinned</a>
+ <a href="rescode.html#constraint_primarykey">rescode.html#constraint_primarykey</a>
+ <a href="rescode.html#constraint_rowid">rescode.html#constraint_rowid</a>
+ <a href="rescode.html#constraint_trigger">rescode.html#constraint_trigger</a>
+ <a href="rescode.html#constraint_unique">rescode.html#constraint_unique</a>
+ <a href="rescode.html#corrupt_vtab">rescode.html#corrupt_vtab</a>
+ <a href="rescode.html#ioerr_access">rescode.html#ioerr_access</a>
+ <a href="rescode.html#ioerr_checkreservedlock">rescode.html#ioerr_checkreservedlock</a>
+ <a href="rescode.html#ioerr_close">rescode.html#ioerr_close</a>
+ <a href="rescode.html#ioerr_convpath">rescode.html#ioerr_convpath</a>
+ <a href="rescode.html#ioerr_corruptfs">rescode.html#ioerr_corruptfs</a>
+ <a href="rescode.html#ioerr_data">rescode.html#ioerr_data</a>
+ <a href="rescode.html#ioerr_delete">rescode.html#ioerr_delete</a>
+ <a href="rescode.html#ioerr_delete_noent">rescode.html#ioerr_delete_noent</a>
+ <a href="rescode.html#ioerr_dir_fsync">rescode.html#ioerr_dir_fsync</a>
+ <a href="rescode.html#ioerr_fstat">rescode.html#ioerr_fstat</a>
+ <a href="rescode.html#ioerr_fsync">rescode.html#ioerr_fsync</a>
+ <a href="rescode.html#ioerr_gettemppath">rescode.html#ioerr_gettemppath</a>
+ <a href="rescode.html#ioerr_lock">rescode.html#ioerr_lock</a>
+ <a href="rescode.html#ioerr_mmap">rescode.html#ioerr_mmap</a>
+ <a href="rescode.html#ioerr_rdlock">rescode.html#ioerr_rdlock</a>
+ <a href="rescode.html#ioerr_read">rescode.html#ioerr_read</a>
+ <a href="rescode.html#ioerr_seek">rescode.html#ioerr_seek</a>
+ <a href="rescode.html#ioerr_shmmap">rescode.html#ioerr_shmmap</a>
+ <a href="rescode.html#ioerr_shmopen">rescode.html#ioerr_shmopen</a>
+ <a href="rescode.html#ioerr_shmsize">rescode.html#ioerr_shmsize</a>
+ <a href="rescode.html#ioerr_short_read">rescode.html#ioerr_short_read</a>
+ <a href="rescode.html#ioerr_truncate">rescode.html#ioerr_truncate</a>
+ <a href="rescode.html#ioerr_unlock">rescode.html#ioerr_unlock</a>
+ <a href="rescode.html#ioerr_write">rescode.html#ioerr_write</a>
+ <a href="rescode.html#readonly_cantlock">rescode.html#readonly_cantlock</a>
+ <a href="rescode.html#readonly_dbmoved">rescode.html#readonly_dbmoved</a>
+ <a href="rescode.html#readonly_recovery">rescode.html#readonly_recovery</a>
+ <a href="rescode.html#readonly_rollback">rescode.html#readonly_rollback</a>
+<li>extended error code &rarr; <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="c3ref/finalize.html">c3ref/finalize.html</a>
+ <a href="capi3ref.html#sqlite3_blob_read">capi3ref.html#sqlite3_blob_read</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="capi3ref.html#sqlite3_finalize">capi3ref.html#sqlite3_finalize</a>
+ <a href="errlog.html">errlog.html</a>
+ <a href="rescode.html#constraint">rescode.html#constraint</a>
+<li>extended error codes &rarr; <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="rescode.html#notice">rescode.html#notice</a>
+ <a href="rescode.html#warning">rescode.html#warning</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+<li>extended result code &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">c3ref/c_config_covering_index_scan.html#sqliteconfiglog</a>
+ <a href="c3ref/errcode.html">c3ref/errcode.html</a>
+ <a href="capi3ref.html#sqlite3_errcode">capi3ref.html#sqlite3_errcode</a>
+ <a href="capi3ref.html#sqliteconfiglog">capi3ref.html#sqliteconfiglog</a>
+<li>extended result code definitions &rarr; <a href="c3ref/c_abort.html">c3ref/c_abort.html</a>
+ <a href="capi3ref.html#SQLITE_ABORT">capi3ref.html#SQLITE_ABORT</a>
+ <a href="rescode.html#extrc">rescode.html#extrc</a>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>extended result codes &rarr; <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a>
+ <a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#SQLITE_ABORT_ROLLBACK">capi3ref.html#SQLITE_ABORT_ROLLBACK</a>
+ <a href="capi3ref.html#sqlite3_extended_result_codes">capi3ref.html#sqlite3_extended_result_codes</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+<li>Extending FTS5 &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="fts5.html#compiling_and_using_fts5">fts5.html#compiling_and_using_fts5</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>extension loading &rarr; <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a>
+ <a href="capi3ref.html#sqlite3_enable_load_extension">capi3ref.html#sqlite3_enable_load_extension</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>external content fts4 tables &rarr; <a href="rbu.html#fts4_tables">rbu.html#fts4_tables</a>
+<li>factored-select-stmt &rarr; <a href="lang_select.html">lang_select.html</a>
+<li>faster than the filesystem &rarr; <a href="about.html">about.html</a>
+ <a href="aff_short.html">aff_short.html</a>
+ <a href="appfileformat.html">appfileformat.html</a>
+ <a href="features.html">features.html</a>
+ <a href="howitworks.html">howitworks.html</a>
+ <a href="index.html">index.html</a>
+ <a href="intern-v-extern-blob.html">intern-v-extern-blob.html</a>
+ <a href="whentouse.html#appfileformat">whentouse.html#appfileformat</a>
+ <a href="whentouse.html#container">whentouse.html#container</a>
+<li>file control &rarr; <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot_recover">capi3ref.html#sqlite3_snapshot_recover</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+ <a href="wal.html#walfile">wal.html#walfile</a>
+<li>file control opcode &rarr; <a href="rescode.html#notfound">rescode.html#notfound</a>
+<li>file control opcodes &rarr; <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>file format &rarr; <a href="about.html">about.html</a>
+ <a href="appfileformat.html">appfileformat.html</a>
+ <a href="arch.html">arch.html</a>
+ <a href="dbpage.html">dbpage.html</a>
+ <a href="formatchng.html">formatchng.html</a>
+ <a href="howitworks.html">howitworks.html</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="index.html">index.html</a>
+ <a href="lts.html">lts.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="onefile.html">onefile.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+ <a href="rowidtable.html">rowidtable.html</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a>
+ <a href="stricttables.html">stricttables.html</a>
+ <a href="version3.html">version3.html</a>
+ <a href="walformat.html">walformat.html</a>
+ <a href="whentouse.html#container">whentouse.html#container</a>
+ <a href="whentouse.html#wireproto">whentouse.html#wireproto</a>
+<li>file format version numbers &rarr; <a href="walformat.html">walformat.html</a>
+<li>file I/O functions &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="cli.html#zipdb">cli.html#zipdb</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="zipfile.html">zipfile.html</a>
+<li>file-format benefits &rarr; <a href="whentouse.html#appfileformat">whentouse.html#appfileformat</a>
+<li>FILTER clause on aggregate functions &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_30_1">changes.html#version_3_30_1</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>filter-clause &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>flattened &rarr; <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="lang_with.html#mathint">lang_with.html#mathint</a>
+ <a href="optoverview.html#pushdown">optoverview.html#pushdown</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>flattening optimization &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_19_1">changes.html#version_3_19_1</a>
+ <a href="changes.html#version_3_19_2">changes.html#version_3_19_2</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="eqp.html#or-opt">eqp.html#or-opt</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>Flexible typing is a feature &rarr; <a href="datatype3.html">datatype3.html</a>
+ <a href="quirks.html">quirks.html</a>
+<li>floor &rarr; <a href="lang_mathfunc.html#trunc">lang_mathfunc.html#trunc</a>
+<li>footprint &rarr; <a href="different.html#small">different.html#small</a>
+ <a href="features.html">features.html</a>
+ <a href="index.html">index.html</a>
+<li>foreign key actions &rarr; <a href="c3ref/changes.html">c3ref/changes.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_changes">capi3ref.html#sqlite3_changes</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="compile.html#omit_trigger">compile.html#omit_trigger</a>
+ <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="lang_droptable.html">lang_droptable.html</a>
+ <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>foreign key constraint &rarr; <a href="compile.html#omit_foreign_key">compile.html#omit_foreign_key</a>
+ <a href="lang_altertable.html#altertabdropcol">lang_altertable.html#altertabdropcol</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="lang_createtable.html#rowid">lang_createtable.html#rowid</a>
+ <a href="pragma.html#pragma_foreign_key_list">pragma.html#pragma_foreign_key_list</a>
+ <a href="pragma.html#pragma_integrity_check">pragma.html#pragma_integrity_check</a>
+ <a href="rescode.html#constraint_foreignkey">rescode.html#constraint_foreignkey</a>
+<li>FOREIGN KEY constraints &rarr; <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="stricttables.html">stricttables.html</a>
+<li>foreign key constraints &rarr; <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefkey">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefkey</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlitedbconfigenablefkey">capi3ref.html#sqlitedbconfigenablefkey</a>
+ <a href="changes.html#version_3_6_19">changes.html#version_3_6_19</a>
+ <a href="compile.html#default_foreign_keys">compile.html#default_foreign_keys</a>
+ <a href="compile.html#omit_trigger">compile.html#omit_trigger</a>
+ <a href="faq.html#q22">faq.html#q22</a>
+ <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>
+ <a href="lang_altertable.html#altertabrename">lang_altertable.html#altertabrename</a>
+ <a href="lang_droptable.html">lang_droptable.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_defer_foreign_keys">pragma.html#pragma_defer_foreign_keys</a>
+ <a href="pragma.html#pragma_foreign_key_check">pragma.html#pragma_foreign_key_check</a>
+ <a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a>
+ <a href="releaselog/3_6_19.html">releaselog/3_6_19.html</a>
+<li>foreign key constraints are enabled &rarr; <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+<li>foreign-key-clause &rarr; <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+<li>foreign_key_list pragma &rarr; <a href="pragma.html#pragma_foreign_key_check">pragma.html#pragma_foreign_key_check</a>
+<li>foreign_keys pragma &rarr; <a href="changes.html#version_3_6_19">changes.html#version_3_6_19</a>
+ <a href="compile.html#default_foreign_keys">compile.html#default_foreign_keys</a>
+ <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_19.html">releaselog/3_6_19.html</a>
+<li>format &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="printf.html">printf.html</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>format SQL function &rarr; <a href="lang_corefunc.html#printf">lang_corefunc.html#printf</a>
+ <a href="printf.html">printf.html</a>
+ <a href="printf.html#percentw">printf.html#percentw</a>
+ <a href="printf.html#percentz">printf.html#percentz</a>
+<li>forum &rarr; <a href="fasterthanfs.html">fasterthanfs.html</a>
+<li>frame-spec &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>frames &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>free-page list &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_7_2">changes.html#version_3_7_2</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_7_2.html">releaselog/3_7_2.html</a>
+<li>freelist &rarr; <a href="atomiccommit.html#freelistjrnl">atomiccommit.html#freelistjrnl</a>
+ <a href="pragma.html#pragma_auto_vacuum">pragma.html#pragma_auto_vacuum</a>
+ <a href="pragma.html#pragma_incremental_vacuum">pragma.html#pragma_incremental_vacuum</a>
+ <a href="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</a>
+<li>FROM clause &rarr; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+<li>FTS auxiliary functions &rarr; <a href="fts3.html#hiddencol">fts3.html#hiddencol</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+ <a href="fts5.html#appendix_a">fts5.html#appendix_a</a>
+ <a href="vtab.html#hiddencol">vtab.html#hiddencol</a>
+<li>FTS hidden column &rarr; <a href="fts3.html#matchinfo">fts3.html#matchinfo</a>
+ <a href="fts3.html#snippet">fts3.html#snippet</a>
+ <a href="vtab.html#hiddencol">vtab.html#hiddencol</a>
+<li>FTS MATCH &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="fts3.html#hiddencol">fts3.html#hiddencol</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+ <a href="vtab.html#hiddencol">vtab.html#hiddencol</a>
+<li>FTS shadow tables &rarr; <a href="fts3.html#*fts4ickcmd">fts3.html#*fts4ickcmd</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="rbu.html#sqldiff">rbu.html#sqldiff</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+<li>FTS3 &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="bindptr.html">bindptr.html</a>
+ <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer</a>
+ <a href="capi3ref.html#sqlitedbconfigenablefts3tokenizer">capi3ref.html#sqlitedbconfigenablefts3tokenizer</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_39_1">changes.html#version_3_39_1</a>
+ <a href="changes.html#version_3_6_22">changes.html#version_3_6_22</a>
+ <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="changes.html#version_3_6_23_1">changes.html#version_3_6_23_1</a>
+ <a href="changes.html#version_3_7_16_1">changes.html#version_3_7_16_1</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="compile.html#disable_fts3_unicode">compile.html#disable_fts3_unicode</a>
+ <a href="compile.html#fts3_max_expr_depth">compile.html#fts3_max_expr_depth</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="fts5.html#fts5shadowtables">fts5.html#fts5shadowtables</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="rbu.html#fts4_tables">rbu.html#fts4_tables</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="releaselog/3_6_22.html">releaselog/3_6_22.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+ <a href="releaselog/3_6_23_1.html">releaselog/3_6_23_1.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+ <a href="vtab.html#hiddencol">vtab.html#hiddencol</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+<li>fts3 &rarr; <a href="changes.html#version_3_6_21">changes.html#version_3_6_21</a>
+ <a href="fts5.html#appendix_a">fts5.html#appendix_a</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+<li>fts3_tokenizer &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer</a>
+ <a href="capi3ref.html#sqlitedbconfigenablefts3tokenizer">capi3ref.html#sqlitedbconfigenablefts3tokenizer</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>fts3tokenize virtual table &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>FTS4 &rarr; <a href="affcase1.html#smaller">affcase1.html#smaller</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="compile.html#disable_fts4_deferred">compile.html#disable_fts4_deferred</a>
+ <a href="compile.html#fts3_max_expr_depth">compile.html#fts3_max_expr_depth</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="spellfix1.html">spellfix1.html</a>
+ <a href="th3.html">th3.html</a>
+<li>FTS4 automerge command &rarr; <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>fts4 compress option &rarr; <a href="fts3.html#fts4_options">fts3.html#fts4_options</a>
+ <a href="fts3.html#fts4order">fts3.html#fts4order</a>
+<li>FTS4 content option &rarr; <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="fts3.html#*fts4ickcmd">fts3.html#*fts4ickcmd</a>
+ <a href="fts3.html#*fts4rebuidcmd">fts3.html#*fts4rebuidcmd</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+<li>FTS4 integrity-check command &rarr; <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>FTS4 languageid option &rarr; <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+<li>FTS4 matchinfo option &rarr; <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="fts3.html#shadow_tables">fts3.html#shadow_tables</a>
+<li>FTS4 merge command &rarr; <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>FTS4 notindexed option &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>FTS4 options &rarr; <a href="fts3.html#fts4">fts3.html#fts4</a>
+<li>FTS4 order option &rarr; <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+<li>FTS4 prefix option &rarr; <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+<li>fts4 prefix option &rarr; <a href="fts3.html#fts4order">fts3.html#fts4order</a>
+<li>FTS4 rebuild command &rarr; <a href="fts3.html#_external_content_fts4_tables_">fts3.html#_external_content_fts4_tables_</a>
+<li>fts4aux &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="changes.html#version_3_7_6">changes.html#version_3_7_6</a>
+ <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="spellfix1.html">spellfix1.html</a>
+<li>fts4aux languageid column &rarr; <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+<li>FTS5 &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="changes.html#version_3_11_1">changes.html#version_3_11_1</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="changes.html#version_3_37_1">changes.html#version_3_37_1</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lemon.html">lemon.html</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>fts5 &rarr; <a href="compile.html#enable_fts5">compile.html#enable_fts5</a>
+<li>FTS5 automerge option &rarr; <a href="fts5.html#appendix_a">fts5.html#appendix_a</a>
+ <a href="fts5.html#the_merge_command">fts5.html#the_merge_command</a>
+ <a href="fts5.html#the_optimize_command">fts5.html#the_optimize_command</a>
+<li>FTS5 auxiliary functions &rarr; <a href="fts5.html">fts5.html</a>
+ <a href="fts5.html#the_unindexed_column_option">fts5.html#the_unindexed_column_option</a>
+<li>FTS5 bm25 &rarr; <a href="fts5.html#_auxiliary_functions_">fts5.html#_auxiliary_functions_</a>
+ <a href="fts5.html#the_columnsize_option">fts5.html#the_columnsize_option</a>
+<li>FTS5 column filters &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="fts5.html">fts5.html</a>
+ <a href="fts5.html#fts5_initial_token_queries">fts5.html#fts5_initial_token_queries</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>FTS5 columnsize option &rarr; <a href="fts5.html#appendix_a">fts5.html#appendix_a</a>
+ <a href="fts5.html#fts5_table_creation_and_initialization">fts5.html#fts5_table_creation_and_initialization</a>
+<li>FTS5 content option &rarr; <a href="fts5.html#fts5_table_creation_and_initialization">fts5.html#fts5_table_creation_and_initialization</a>
+<li>FTS5 contentless tables &rarr; <a href="fts5.html#the_columnsize_option">fts5.html#the_columnsize_option</a>
+ <a href="fts5.html#the_delete_all_command">fts5.html#the_delete_all_command</a>
+ <a href="fts5.html#the_delete_command">fts5.html#the_delete_command</a>
+ <a href="fts5.html#the_detail_option">fts5.html#the_detail_option</a>
+ <a href="fts5.html#the_rebuild_command">fts5.html#the_rebuild_command</a>
+<li>FTS5 CREATE TABLE Options &rarr; <a href="fts5.html">fts5.html</a>
+<li>FTS5 custom auxiliary functions &rarr; <a href="fts5.html">fts5.html</a>
+ <a href="fts5.html#_auxiliary_functions_">fts5.html#_auxiliary_functions_</a>
+<li>FTS5 delete command &rarr; <a href="fts5.html#contentless_tables">fts5.html#contentless_tables</a>
+<li>FTS5 delete-all command &rarr; <a href="fts5.html#the_delete_command">fts5.html#the_delete_command</a>
+<li>FTS5 detail option &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="fts5.html#fts5_table_creation_and_initialization">fts5.html#fts5_table_creation_and_initialization</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+<li>FTS5 external content tables &rarr; <a href="fts5.html#fts5_table_creation_and_initialization">fts5.html#fts5_table_creation_and_initialization</a>
+ <a href="fts5.html#the_delete_all_command">fts5.html#the_delete_all_command</a>
+ <a href="fts5.html#the_delete_command">fts5.html#the_delete_command</a>
+ <a href="fts5.html#the_rebuild_command">fts5.html#the_rebuild_command</a>
+<li>FTS5 highlight &rarr; <a href="fts5.html#_auxiliary_functions_">fts5.html#_auxiliary_functions_</a>
+<li>FTS5 initial token &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>FTS5 merge command &rarr; <a href="fts5.html#appendix_a">fts5.html#appendix_a</a>
+ <a href="fts5.html#the_optimize_command">fts5.html#the_optimize_command</a>
+<li>FTS5 optimize command &rarr; <a href="fts5.html#the_merge_command">fts5.html#the_merge_command</a>
+<li>FTS5 pgsz option &rarr; <a href="fts5.html#the_merge_command">fts5.html#the_merge_command</a>
+<li>FTS5 prefix indexes &rarr; <a href="fts5.html#fts5_table_creation_and_initialization">fts5.html#fts5_table_creation_and_initialization</a>
+<li>FTS5 query syntax &rarr; <a href="fts5.html">fts5.html</a>
+<li>FTS5 rank configuration option &rarr; <a href="fts5.html#sorting_by_auxiliary_function_results">fts5.html#sorting_by_auxiliary_function_results</a>
+<li>fts5 shadow tables &rarr; <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+<li>FTS5 snippet &rarr; <a href="fts5.html#_auxiliary_functions_">fts5.html#_auxiliary_functions_</a>
+<li>fts5 technical differences &rarr; <a href="fts5.html#appendix_a">fts5.html#appendix_a</a>
+<li>FTS5 tokenizers &rarr; <a href="fts5.html#fts5_table_creation_and_initialization">fts5.html#fts5_table_creation_and_initialization</a>
+<li>FTS5 usermerge option &rarr; <a href="fts5.html#the_merge_command">fts5.html#the_merge_command</a>
+<li>fts5vocab &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="fts5.html#appendix_a">fts5.html#appendix_a</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>Full-featured SQL &rarr; <a href="about.html">about.html</a>
+ <a href="features.html">features.html</a>
+<li>full-featured SQL &rarr; <a href="index.html">index.html</a>
+<li>full-text search &rarr; <a href="aff_short.html">aff_short.html</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="howtocompile.html#dll">howtocompile.html#dll</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>full_column_names &rarr; <a href="pragma.html#pragma_full_column_names">pragma.html#pragma_full_column_names</a>
+ <a href="pragma.html#pragma_short_column_names">pragma.html#pragma_short_column_names</a>
+<li>fullfsync &rarr; <a href="pragma.html#pragma_checkpoint_fullfsync">pragma.html#pragma_checkpoint_fullfsync</a>
+ <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a>
+<li>function method &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>function_list pragma &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>fuzz testing &rarr; <a href="testing.html#slt">testing.html#slt</a>
+<li>generalized ALTER TABLE procedure &rarr; <a href="lang_altertable.html#caution">lang_altertable.html#caution</a>
+<li>generate_series &rarr; <a href="changes.html#version_3_23_1">changes.html#version_3_23_1</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="cli.html#miscfeatures">cli.html#miscfeatures</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>generated column &rarr; <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="compile.html#omit_generated_columns">compile.html#omit_generated_columns</a>
+ <a href="deterministic.html">deterministic.html</a>
+ <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>
+ <a href="lang_altertable.html#altertabdropcol">lang_altertable.html#altertabdropcol</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtable.html#collateclause">lang_createtable.html#collateclause</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>Generated columns &rarr; <a href="stricttables.html">stricttables.html</a>
+<li>generated columns &rarr; <a href="c3ref/c_deterministic.html#sqlitedeterministic">c3ref/c_deterministic.html#sqlitedeterministic</a>
+ <a href="c3ref/c_deterministic.html#sqlitedirectonly">c3ref/c_deterministic.html#sqlitedirectonly</a>
+ <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a>
+ <a href="capi3ref.html#sqlitedeterministic">capi3ref.html#sqlitedeterministic</a>
+ <a href="capi3ref.html#sqlitedirectonly">capi3ref.html#sqlitedirectonly</a>
+ <a href="capi3ref.html#sqliteinnocuous">capi3ref.html#sqliteinnocuous</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>
+ <a href="news.html">news.html</a>
+ <a href="pragma.html#pragma_table_info">pragma.html#pragma_table_info</a>
+ <a href="pragma.html#pragma_table_list">pragma.html#pragma_table_list</a>
+ <a href="pragma.html#pragma_table_xinfo">pragma.html#pragma_table_xinfo</a>
+ <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>geopoly &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+<li>Geopoly extension &rarr; <a href="compile.html#enable_geopoly">compile.html#enable_geopoly</a>
+<li>Geopoly module &rarr; <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>geopoly_ccw &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="geopoly.html#xform">geopoly.html#xform</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+<li>geopoly_overlap &rarr; <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>geopoly_regular &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+<li>geopoly_within &rarr; <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>get the canonical source code &rarr; <a href="amalgamation.html#amalgbuild">amalgamation.html#amalgbuild</a>
+<li>GLOB &rarr; <a href="c3ref/c_limit_attached.html#sqlitelimitlikepatternlength">c3ref/c_limit_attached.html#sqlitelimitlikepatternlength</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/strglob.html">c3ref/strglob.html</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_strglob">capi3ref.html#sqlite3_strglob</a>
+ <a href="capi3ref.html#sqlitelimitlikepatternlength">capi3ref.html#sqlitelimitlikepatternlength</a>
+ <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="compile.html#omit_like_optimization">compile.html#omit_like_optimization</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_corefunc.html#glob">lang_corefunc.html#glob</a>
+ <a href="limits.html#max_like_pattern_length">limits.html#max_like_pattern_length</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="vfs.html#shim">vfs.html#shim</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>glob &rarr; <a href="cli.html#sqlar">cli.html#sqlar</a>
+ <a href="lang_expr.html#glob">lang_expr.html#glob</a>
+<li>GROUP BY &rarr; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+<li>GROUP BY clause &rarr; <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>group_concat &rarr; <a href="changes.html#version_3_6_14_1">changes.html#version_3_6_14_1</a>
+ <a href="releaselog/3_6_14_1.html">releaselog/3_6_14_1.html</a>
+<li>GROUPS frames &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>hard_heap_limit pragma &rarr; <a href="pragma.html#pragma_soft_heap_limit">pragma.html#pragma_soft_heap_limit</a>
+<li>HAVE_ISNAN &rarr; <a href="compile.html#have_isnan">compile.html#have_isnan</a>
+<li>HAVING clause &rarr; <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>hazards of upgrading to the NGQP &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>hex &rarr; <a href="bindptr.html#ptrleak">bindptr.html#ptrleak</a>
+ <a href="lang_corefunc.html#randomblob">lang_corefunc.html#randomblob</a>
+<li>hexadecimal integer literals &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="compile.html#omit_hex_integer">compile.html#omit_hex_integer</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>hexadecimal integers &rarr; <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>hidden column &rarr; <a href="dbpage.html">dbpage.html</a>
+ <a href="dbstat.html#dbstatagg">dbstat.html#dbstatagg</a>
+ <a href="fts3.html#hiddencol">fts3.html#hiddencol</a>
+ <a href="fts3.html#the_languageid_option">fts3.html#the_languageid_option</a>
+<li>hidden columns &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html#tabfunc1">lang_select.html#tabfunc1</a>
+ <a href="pragma.html#pragma_table_info">pragma.html#pragma_table_info</a>
+ <a href="pragma.html#pragma_table_list">pragma.html#pragma_table_list</a>
+ <a href="pragma.html#pragma_table_xinfo">pragma.html#pragma_table_xinfo</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</a>
+<li>high-reliability &rarr; <a href="index.html">index.html</a>
+<li>Hipp &rarr; <a href="printf.html#percentw">printf.html#percentw</a>
+<li>host parameter &rarr; <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_rhs_value">capi3ref.html#sqlite3_vtab_rhs_value</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+<li>hot journal &rarr; <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="howtocorrupt.html#delhotjrnl">howtocorrupt.html#delhotjrnl</a>
+ <a href="lockingv3.html#rollback">lockingv3.html#rollback</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="rescode.html#notice_recover_rollback">rescode.html#notice_recover_rollback</a>
+ <a href="rescode.html#readonly_rollback">rescode.html#readonly_rollback</a>
+ <a href="tclsqlite.html">tclsqlite.html</a>
+<li>hot journal files &rarr; <a href="howtocorrupt.html#delhotjrnl">howtocorrupt.html#delhotjrnl</a>
+<li>how collation is determined &rarr; <a href="lang_select.html#distinct">lang_select.html#distinct</a>
+<li>How SQLite Works &rarr; <a href="eqp.html">eqp.html</a>
+<li>how to compile &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="features.html">features.html</a>
+<li>How To Compile SQLite &rarr; <a href="amalgamation.html#amalgbuild">amalgamation.html#amalgbuild</a>
+ <a href="download.html#srctree">download.html#srctree</a>
+ <a href="fts5.html#compiling_and_using_fts5">fts5.html#compiling_and_using_fts5</a>
+ <a href="getthecode.html">getthecode.html</a>
+ <a href="quickstart.html">quickstart.html</a>
+<li>how to corrupt &rarr; <a href="atomiccommit.html#sect_9_0">atomiccommit.html#sect_9_0</a>
+ <a href="fts3.html#*fts4ickcmd">fts3.html#*fts4ickcmd</a>
+ <a href="recovery.html">recovery.html</a>
+<li>How To Corrupt Your Database Files &rarr; <a href="rescode.html#corrupt">rescode.html#corrupt</a>
+ <a href="useovernet.html">useovernet.html</a>
+<li>http://atulgawande.com/book/the-checklist-manifesto/ &rarr; <a href="testing.html#cklist">testing.html#cklist</a>
+<li>http://clang-analyzer.llvm.org/ &rarr; <a href="testing.html#staticanalysis">testing.html#staticanalysis</a>
+<li>http://code.google.com/android/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://community.intuit.com/posts/database-error-sqlite-error-code1 &rarr; <a href="famous.html">famous.html</a>
+<li>http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/open.1.html &rarr; <a href="uri.html">uri.html</a>
+<li>http://dmalloc.com &rarr; <a href="malloc.html">malloc.html</a>
+<li>http://docs.python.org/lib/module-sqlite3.html &rarr; <a href="famous.html">famous.html</a>
+<li>http://en.wikipedia.org/wiki/ACID &rarr; <a href="about.html">about.html</a>
+ <a href="transactional.html">transactional.html</a>
+<li>http://en.wikipedia.org/wiki/Charlotte,_North_Carolina &rarr; <a href="crew.html">crew.html</a>
+<li>http://en.wikipedia.org/wiki/Coordinated_Universal_Time &rarr; <a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a>
+<li>http://en.wikipedia.org/wiki/Endianness &rarr; <a href="about.html">about.html</a>
+ <a href="onefile.html">onefile.html</a>
+<li>http://en.wikipedia.org/wiki/Fuzz_testing &rarr; <a href="testing.html#fuzztesting">testing.html#fuzztesting</a>
+<li>http://en.wikipedia.org/wiki/Gregorian_calendar &rarr; <a href="lang_datefunc.html#localtime">lang_datefunc.html#localtime</a>
+<li>http://en.wikipedia.org/wiki/ISO_8601 &rarr; <a href="lang_datefunc.html">lang_datefunc.html</a>
+<li>http://en.wikipedia.org/wiki/Julian_day &rarr; <a href="lang_datefunc.html">lang_datefunc.html</a>
+ <a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a>
+<li>http://en.wikipedia.org/wiki/Kibibyte &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://en.wikipedia.org/wiki/Modified_Condition/Decision_Coverage &rarr; <a href="testing.html#mcdc">testing.html#mcdc</a>
+<li>http://en.wikipedia.org/wiki/OpenDocument &rarr; <a href="affcase1.html">affcase1.html</a>
+<li>http://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar &rarr; <a href="lang_datefunc.html">lang_datefunc.html</a>
+<li>http://en.wikipedia.org/wiki/Public_Domain &rarr; <a href="copyright.html">copyright.html</a>
+<li>http://en.wikipedia.org/wiki/R-tree &rarr; <a href="rtree.html">rtree.html</a>
+<li>http://en.wikipedia.org/wiki/Serializability &rarr; <a href="transactional.html">transactional.html</a>
+<li>http://en.wikipedia.org/wiki/Syslog &rarr; <a href="errlog.html">errlog.html</a>
+<li>http://en.wikipedia.org/wiki/Unix_time &rarr; <a href="lang_datefunc.html#dtmods">lang_datefunc.html#dtmods</a>
+<li>http://en.wikipedia.org/wiki/UUID &rarr; <a href="changes.html#version_3_3_13">changes.html#version_3_3_13</a>
+ <a href="releaselog/3_3_13.html">releaselog/3_3_13.html</a>
+<li>http://en.wikipedia.org/wiki/Zip_%28file_format%29 &rarr; <a href="affcase1.html">affcase1.html</a>
+<li>http://forums.mcafeehelp.com/showthread.php?t=173519 &rarr; <a href="famous.html">famous.html</a>
+<li>http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32575 &rarr; <a href="changes.html#version_3_4_2">changes.html#version_3_4_2</a>
+ <a href="releaselog/3_4_2.html">releaselog/3_4_2.html</a>
+<li>http://gcc.gnu.org/onlinedocs/gcc/Gcov.html &rarr; <a href="testing.html#coverage">testing.html#coverage</a>
+ <a href="th3.html">th3.html</a>
+<li>http://geojson.org &rarr; <a href="geopoly.html">geopoly.html</a>
+<li>http://geonames.usgs.gov/domestic/download_data.htm &rarr; <a href="spellfix1.html">spellfix1.html</a>
+<li>http://git.savannah.gnu.org/cgit/readline.git?h=devel &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>http://heartbleed.com &rarr; <a href="malloc.html">malloc.html</a>
+<li>http://labs.adobe.com/technologies/air/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://lcamtuf.coredump.cx/afl/ &rarr; <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>http://linux.die.net/man/1/file &rarr; <a href="appfileformat.html">appfileformat.html</a>
+<li>http://llvm.org/docs/LibFuzzer.html &rarr; <a href="testing.html#dbsqlfuzz">testing.html#dbsqlfuzz</a>
+ <a href="testing.html#slt">testing.html#slt</a>
+<li>http://man.he.net/man3/fopen &rarr; <a href="about.html">about.html</a>
+ <a href="whentouse.html">whentouse.html</a>
+ <a href="whentouse.html#container">whentouse.html#container</a>
+<li>http://man.he.net/man3/fread &rarr; <a href="whentouse.html#container">whentouse.html#container</a>
+<li>http://man.he.net/man3/fwrite &rarr; <a href="whentouse.html#container">whentouse.html#container</a>
+<li>http://mingw.org/wiki/msys &rarr; <a href="amalgamation.html#amalgbuild">amalgamation.html#amalgbuild</a>
+<li>http://opengroup.org/onlinepubs/007908799/xsh/strftime.html &rarr; <a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a>
+<li>http://osdir.com/Article6677.phtml &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://semver.org &rarr; <a href="versionnumbers.html">versionnumbers.html</a>
+<li>http://semver.org/ &rarr; <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>http://site.icu-project.org/ &rarr; <a href="quirks.html">quirks.html</a>
+<li>http://System.Data.SQLite.org/ &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://thrysoee.dk/editline/ &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>http://tools.ietf.org/html/rfc3986 &rarr; <a href="uri.html">uri.html</a>
+<li>http://turbotax.intuit.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://valgrind.org &rarr; <a href="faq.html#q17">faq.html#q17</a>
+ <a href="malloc.html">malloc.html</a>
+<li>http://valgrind.org/ &rarr; <a href="oldnews.html">oldnews.html</a>
+ <a href="testing.html#valgrind">testing.html#valgrind</a>
+<li>http://valgrind.org/docs/manual/cg-manual.html &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="cpu.html">cpu.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>http://wiki.tcl-lang.org/21708 &rarr; <a href="faq.html#q25">faq.html#q25</a>
+<li>http://wiki.tcl-lang.org/2364 &rarr; <a href="howtocompile.html#tcl">howtocompile.html#tcl</a>
+<li>http://wiki.tcl-lang.org/2541 &rarr; <a href="howtocompile.html#tcl">howtocompile.html#tcl</a>
+<li>http://wiki.tcl-lang.org/9830 &rarr; <a href="howtocompile.html#tcl">howtocompile.html#tcl</a>
+<li>http://windows.microsoft.com/en-US/internet-explorer/products/ie/home &rarr; <a href="uri.html">uri.html</a>
+<li>http://www.adobe.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.adobe.com/products/acrobat/readstep2.html &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.adobe.com/products/photoshoplightroom/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.airbus.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.aircraft.airbus.com/aircraftfamilies/passengeraircraft/a350xwbfamily/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.apple.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.apple.com/itunes/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.apple.com/safari/ &rarr; <a href="uri.html">uri.html</a>
+<li>http://www.apress.com &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.apress.com/book/bookDisplay.html?bID=10130 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.baymoon.com/~tg2/ &rarr; <a href="rtree.html">rtree.html</a>
+<li>http://www.bentley.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.bloomberg.com/ &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.bosch.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.darwinsys.com/file/ &rarr; <a href="aff_short.html">aff_short.html</a>
+ <a href="fileformat2.html#appid">fileformat2.html#appid</a>
+ <a href="pragma.html#pragma_application_id">pragma.html#pragma_application_id</a>
+<li>http://www.devio.us/ &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.dropbox.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.duke.edu/ &rarr; <a href="crew.html">crew.html</a>
+<li>http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf &rarr; <a href="faq.html#q6">faq.html#q6</a>
+<li>http://www.fossil-scm.org &rarr; <a href="privatebranch.html">privatebranch.html</a>
+<li>http://www.fossil-scm.org/ &rarr; <a href="appfileformat.html">appfileformat.html</a>
+ <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="download.html#srctree">download.html#srctree</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="privatebranch.html">privatebranch.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="th3.html">th3.html</a>
+<li>http://www.fossil-scm.org/fossil/doc/tip/www/selfcheck.wiki &rarr; <a href="appfileformat.html">appfileformat.html</a>
+<li>http://www.fossil-scm.org/index.html/doc/tip/www/quickstart.wiki &rarr; <a href="privatebranch.html">privatebranch.html</a>
+<li>http://www.gatech.edu/ &rarr; <a href="crew.html">crew.html</a>
+<li>http://www.ge.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.git-scm.org/ &rarr; <a href="privatebranch.html">privatebranch.html</a>
+<li>http://www.google.com/chrome &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.google.com/chrome/ &rarr; <a href="uri.html">uri.html</a>
+<li>http://www.icu-project.org/ &rarr; <a href="changes.html#version_3_4_0">changes.html#version_3_4_0</a>
+ <a href="changes.html#version_3_4_1">changes.html#version_3_4_1</a>
+ <a href="compile.html#enable_icu">compile.html#enable_icu</a>
+ <a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a>
+ <a href="releaselog/3_4_1.html">releaselog/3_4_1.html</a>
+<li>http://www.intuit.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.libreoffice.org/ &rarr; <a href="affcase1.html">affcase1.html</a>
+<li>http://www.mail-archive.com/sqlite-users%40sqlite.org/msg27326.html &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.mail-archive.com/sqlite-users%40sqlite.org/msg27332.html &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.mail-archive.com/sqlite-users%40sqlite.org/msg85350.html &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.mail-archive.com/sqlite-users@sqlite.org/msg16931.html &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.mcafee.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.mercurial-scm.org/ &rarr; <a href="sessionintro.html">sessionintro.html</a>
+<li>http://www.microsoft.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/start.mspx &rarr; <a href="uri.html">uri.html</a>
+<li>http://www.mikesclutter.com &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.mingw.org/ &rarr; <a href="mingw.html">mingw.html</a>
+<li>http://www.monotone.ca/ &rarr; <a href="privatebranch.html">privatebranch.html</a>
+<li>http://www.mozilla.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.mozilla.com/en-US/firefox/new/ &rarr; <a href="uri.html">uri.html</a>
+<li>http://www.mozilla.com/thunderbird/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.mozilla.org/ &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.nds-association.org/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.opera.com/ &rarr; <a href="uri.html">uri.html</a>
+<li>http://www.oracle.com/database/index.html &rarr; <a href="about.html">about.html</a>
+<li>http://www.paulgraham.com/ &rarr; <a href="version3.html">version3.html</a>
+<li>http://www.paulgraham.com/acl.html &rarr; <a href="version3.html">version3.html</a>
+<li>http://www.php.net/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.postgresql.org/ &rarr; <a href="changes.html#version_1_0">changes.html#version_1_0</a>
+<li>http://www.quickbooks.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.realbasic.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://www.rfc-editor.org/rfc/rfc7159.txt &rarr; <a href="json1.html#howtocompile">json1.html#howtocompile</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>http://www.selenic.com/mercurial/wiki/ &rarr; <a href="privatebranch.html">privatebranch.html</a>
+<li>http://www.sergeant.org/sqlite_vs_pgsync.html &rarr; <a href="speed.html">speed.html</a>
+<li>http://www.sqlite.org/download.html &rarr; <a href="howtocompile.html#dll">howtocompile.html#dll</a>
+ <a href="withoutrowid.html#wtu">withoutrowid.html#wtu</a>
+<li>http://www.sqlite.org/sqlar/doc/trunk/README.md &rarr; <a href="affcase1.html#smaller">affcase1.html#smaller</a>
+<li>http://www.sqlite.org/src &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+ <a href="privatebranch.html">privatebranch.html</a>
+<li>http://www.sqlite.org/src/artifact/83f6b3318f7ee &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>http://www.sqlite.org/src/artifact/d29c8048beb7e &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/fileio.c &rarr; <a href="cli.html#fileio">cli.html#fileio</a>
+<li>http://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/series.c &rarr; <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</a>
+<li>http://www.sqlite.org/src/artifact?ci=trunk&filename=magic.txt &rarr; <a href="fileformat2.html#appid">fileformat2.html#appid</a>
+ <a href="pragma.html#pragma_application_id">pragma.html#pragma_application_id</a>
+<li>http://www.sqlite.org/src/doc/trunk/ext/userauth/user-auth.txt &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>http://www.sqlite.org/src/doc/trunk/src/date.c &rarr; <a href="cintro.html">cintro.html</a>
+<li>http://www.sqlite.org/src/doc/trunk/src/func.c &rarr; <a href="cintro.html">cintro.html</a>
+<li>http://www.sqlite.org/src/doc/trunk/src/os_unix.c &rarr; <a href="vfs.html">vfs.html</a>
+<li>http://www.sqlite.org/src/doc/trunk/src/test_demovfs.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>http://www.sqlite.org/src/doc/trunk/src/test_journal.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>http://www.sqlite.org/src/doc/trunk/src/test_multiplex.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>http://www.sqlite.org/src/doc/trunk/src/test_onefile.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>http://www.sqlite.org/src/doc/trunk/src/test_quota.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>http://www.sqlite.org/src/doc/trunk/src/test_vfs.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>http://www.sqlite.org/src/doc/trunk/src/test_vfstrace.c &rarr; <a href="vfs.html#shim">vfs.html#shim</a>
+<li>http://www.sqlite.org/src/fdiff?sbs=1&v1=7d539cedb1c&v2=ebad891b7494d&smhdr &rarr; <a href="changes.html#version_3_8_4_3">changes.html#version_3_8_4_3</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>http://www.sqlite.org/src/fdiff?v1=e45e3f9daf38c5be&v2=714df4e1c82f629d&sbs=1 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.sqlite.org/src/file/ext/misc/appendvfs.c &rarr; <a href="changes.html#version_3_35_2">changes.html#version_3_35_2</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="vfs.html#shim">vfs.html#shim</a>
+<li>http://www.sqlite.org/src/file/src/vdbe.c &rarr; <a href="opcode.html">opcode.html</a>
+<li>http://www.sqlite.org/src/finfo?name=ext/misc/fileio.c &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>http://www.sqlite.org/src/finfo?name=ext/misc/spellfix.c &rarr; <a href="spellfix1.html">spellfix1.html</a>
+<li>http://www.sqlite.org/src/info/07d6a0453d &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>http://www.sqlite.org/src/info/094d39a4c95ee4 &rarr; <a href="changes.html#version_3_8_7_2">changes.html#version_3_8_7_2</a>
+ <a href="releaselog/3_8_7_2.html">releaselog/3_8_7_2.html</a>
+<li>http://www.sqlite.org/src/info/0eb70d77cb05bb2272 &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>http://www.sqlite.org/src/info/0fc59f908b &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>http://www.sqlite.org/src/info/10fb063b11 &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>http://www.sqlite.org/src/info/11d5aa455e0d98f3c1e6a08 &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>http://www.sqlite.org/src/info/2500cdb9be05 &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>http://www.sqlite.org/src/info/25ee812710 &rarr; <a href="changes.html#version_3_7_7_1">changes.html#version_3_7_7_1</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_7_1.html">releaselog/3_7_7_1.html</a>
+<li>http://www.sqlite.org/src/info/264b970c4379fd &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>http://www.sqlite.org/src/info/2a5629202f &rarr; <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>http://www.sqlite.org/src/info/2d1a5c67df &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.sqlite.org/src/info/2ea3e9fe63 &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>http://www.sqlite.org/src/info/31338dca7e &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.sqlite.org/src/info/369d57fb8e5ccdff06f1 &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>http://www.sqlite.org/src/info/385a5b56b9 &rarr; <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>http://www.sqlite.org/src/info/38b1ae018f &rarr; <a href="changes.html#version_3_7_16_1">changes.html#version_3_7_16_1</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>http://www.sqlite.org/src/info/3a88d85f36704eebe1 &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>http://www.sqlite.org/src/info/4c86b126f2 &rarr; <a href="changes.html#version_3_8_3_1">changes.html#version_3_8_3_1</a>
+ <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_3_1.html">releaselog/3_8_3_1.html</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>http://www.sqlite.org/src/info/4ef7e3cfca &rarr; <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>http://www.sqlite.org/src/info/55746f9e65f85 &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>http://www.sqlite.org/src/info/598f5f7596b055 &rarr; <a href="changes.html#version_3_7_15_2">changes.html#version_3_7_15_2</a>
+ <a href="releaselog/3_7_15_2.html">releaselog/3_7_15_2.html</a>
+<li>http://www.sqlite.org/src/info/5d863f876e &rarr; <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+<li>http://www.sqlite.org/src/info/65bdeb9739 &rarr; <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>http://www.sqlite.org/src/info/6709574d2a8d8 &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>http://www.sqlite.org/src/info/689137afb6da41 &rarr; <a href="changes.html#version_3_7_16_1">changes.html#version_3_7_16_1</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>http://www.sqlite.org/src/info/6bfb98dfc0c &rarr; <a href="changes.html#version_3_7_16_1">changes.html#version_3_7_16_1</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>http://www.sqlite.org/src/info/7bbfb7d442 &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>http://www.sqlite.org/src/info/7ff3120e4f &rarr; <a href="changes.html#version_3_7_16_2">changes.html#version_3_7_16_2</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>http://www.sqlite.org/src/info/80ba201079 &rarr; <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+<li>http://www.sqlite.org/src/info/8c63ff0eca &rarr; <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>http://www.sqlite.org/src/info/98825a79ce1456863 &rarr; <a href="changes.html#version_3_8_4_3">changes.html#version_3_8_4_3</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>http://www.sqlite.org/src/info/98825a79ce145686392d8074032ae54863aa21a3 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.sqlite.org/src/info/98d973b8f5 &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>http://www.sqlite.org/src/info/9a6daf340df99ba93c &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>http://www.sqlite.org/src/info/9a8b09f8e6 &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>http://www.sqlite.org/src/info/a179fe7465 &rarr; <a href="changes.html#version_3_7_16_1">changes.html#version_3_7_16_1</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>http://www.sqlite.org/src/info/a5c8ed66ca &rarr; <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+<li>http://www.sqlite.org/src/info/a7b7803e8d1e869 &rarr; <a href="changes.html#version_3_7_15_1">changes.html#version_3_7_15_1</a>
+ <a href="releaselog/3_7_15_1.html">releaselog/3_7_15_1.html</a>
+<li>http://www.sqlite.org/src/info/a8a0d2996a &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>http://www.sqlite.org/src/info/ac0ff496b7e2 &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>http://www.sqlite.org/src/info/b2fa5424e6fcb15 &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>http://www.sqlite.org/src/info/b75a9ca6b0499 &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>http://www.sqlite.org/src/info/b7c8682cc1 &rarr; <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+<li>http://www.sqlite.org/src/info/ba7cbfaedc7e6 &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>http://www.sqlite.org/src/info/ba82a4a41eac1 &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>http://www.sqlite.org/src/info/c2ad16f997ee9c &rarr; <a href="changes.html#version_3_7_12_1">changes.html#version_3_7_12_1</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_12_1.html">releaselog/3_7_12_1.html</a>
+<li>http://www.sqlite.org/src/info/c34d0557f7 &rarr; <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>http://www.sqlite.org/src/info/d2889096e7bdeac6 &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>http://www.sqlite.org/src/info/db87229497 &rarr; <a href="changes.html#version_3_8_7_2">changes.html#version_3_8_7_2</a>
+ <a href="releaselog/3_8_7_2.html">releaselog/3_8_7_2.html</a>
+<li>http://www.sqlite.org/src/info/e39d032577 &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>http://www.sqlite.org/src/info/e636a050b7 &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>http://www.sqlite.org/src/info/e9654505cfda9 &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>http://www.sqlite.org/src/info/eb5548a849 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.sqlite.org/src/info/f2369304e4 &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>http://www.sqlite.org/src/info/f69b96e3076e &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>http://www.sqlite.org/src/info/fc7bd6358f &rarr; <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>http://www.sqlite.org/src/info/fccbde530a &rarr; <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>http://www.sqlite.org/src/info/ff5be73dee &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>http://www.sqlite.org/src/tktview?name=5d863f876e &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.sqlite.org/src/tree?ci=trunk &rarr; <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</a>
+<li>http://www.stunnel.org/ &rarr; <a href="howtocorrupt.html#stalefd">howtocorrupt.html#stalefd</a>
+<li>http://www.symbian.com/ &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.tcl-lang.org &rarr; <a href="quickstart.html">quickstart.html</a>
+ <a href="tclsqlite.html">tclsqlite.html</a>
+ <a href="undoredo.html">undoredo.html</a>
+<li>http://www.tcl-lang.org/ &rarr; <a href="amalgamation.html#amalgbuild">amalgamation.html#amalgbuild</a>
+ <a href="lang_expr.html#varparam">lang_expr.html#varparam</a>
+ <a href="testing.html#tcl">testing.html#tcl</a>
+<li>http://www.tcl-lang.org/cgi-bin/tct/tip/322.html &rarr; <a href="changes.html#version_3_6_19">changes.html#version_3_6_19</a>
+ <a href="releaselog/3_6_19.html">releaselog/3_6_19.html</a>
+<li>http://www.tcl-lang.org/community/tcl2004/ &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>http://www.tcl-lang.org/doc/tea/ &rarr; <a href="tclsqlite.html">tclsqlite.html</a>
+<li>http://www.tcl.tk &rarr; <a href="compile.html#tclapi">compile.html#tclapi</a>
+<li>http://www.tcl.tk/ &rarr; <a href="sqlanalyze.html">sqlanalyze.html</a>
+ <a href="th3.html">th3.html</a>
+<li>http://www.valgrind.org/ &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>http://www.w3c.org/TR/NOTE-datetime &rarr; <a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a>
+<li>http://www.xojo.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>http://zlib.net/ &rarr; <a href="sqlar.html">sqlar.html</a>
+<li>https://aws.amazon.com/s3/ &rarr; <a href="serverless.html">serverless.html</a>
+<li>https://blog.regehr.org/archives/1576 &rarr; <a href="assert.html">assert.html</a>
+<li>https://code.facebook.com/posts/313033472212144/debugging-file-corruption-on-ios/ &rarr; <a href="howtocorrupt.html#stalefd">howtocorrupt.html#stalefd</a>
+<li>https://code.facebook.com/projects/658950180885092 &rarr; <a href="famous.html">famous.html</a>
+<li>https://core.tcl.tk/ &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://digitalocean.com &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://docs.microsoft.com/en-us/azure/cosmos-db/serverless-computing-database &rarr; <a href="serverless.html">serverless.html</a>
+<li>https://en.wikipedia.org/wiki/Abstract_syntax_tree &rarr; <a href="howitworks.html">howitworks.html</a>
+<li>https://en.wikipedia.org/wiki/Artificial_intelligence &rarr; <a href="queryplanner.html">queryplanner.html</a>
+<li>https://en.wikipedia.org/wiki/Assert.h &rarr; <a href="assert.html">assert.html</a>
+<li>https://en.wikipedia.org/wiki/Berkeley_DB &rarr; <a href="howitworks.html">howitworks.html</a>
+<li>https://en.wikipedia.org/wiki/Cmd.exe &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>https://en.wikipedia.org/wiki/Database_index#Clustered &rarr; <a href="withoutrowid.html">withoutrowid.html</a>
+<li>https://en.wikipedia.org/wiki/Database_transaction &rarr; <a href="howitworks.html">howitworks.html</a>
+<li>https://en.wikipedia.org/wiki/Declarative_programming &rarr; <a href="howitworks.html">howitworks.html</a>
+<li>https://en.wikipedia.org/wiki/DO-178B &rarr; <a href="hirely.html">hirely.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+ <a href="th3.html">th3.html</a>
+<li>https://en.wikipedia.org/wiki/F2FS &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="compile.html#enable_batch_atomic_write">compile.html#enable_batch_atomic_write</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://en.wikipedia.org/wiki/GNU_bison &rarr; <a href="lemon.html">lemon.html</a>
+<li>https://en.wikipedia.org/wiki/Grey_hat &rarr; <a href="news.html">news.html</a>
+<li>https://en.wikipedia.org/wiki/Hash_join &rarr; <a href="optoverview.html#hashjoin">optoverview.html#hashjoin</a>
+<li>https://en.wikipedia.org/wiki/Imperative_programming &rarr; <a href="howitworks.html">howitworks.html</a>
+<li>https://en.wikipedia.org/wiki/Information_schema &rarr; <a href="pragma.html#pragfunc">pragma.html#pragfunc</a>
+<li>https://en.wikipedia.org/wiki/Julian_day &rarr; <a href="quirks.html">quirks.html</a>
+<li>https://en.wikipedia.org/wiki/LALR_parser &rarr; <a href="howitworks.html">howitworks.html</a>
+<li>https://en.wikipedia.org/wiki/Library_(computing) &rarr; <a href="howitworks.html">howitworks.html</a>
+<li>https://en.wikipedia.org/wiki/Linus%27s_law &rarr; <a href="testing.html#3pfuzz">testing.html#3pfuzz</a>
+<li>https://en.wikipedia.org/wiki/Modified_condition/decision_coverage &rarr; <a href="th3.html">th3.html</a>
+<li>https://en.wikipedia.org/wiki/Mutation_testing &rarr; <a href="testing.html#mutationtests">testing.html#mutationtests</a>
+<li>https://en.wikipedia.org/wiki/Patch_(Unix) &rarr; <a href="sessionintro.html">sessionintro.html</a>
+<li>https://en.wikipedia.org/wiki/Robustness_principle &rarr; <a href="lang_select.html#nonstd">lang_select.html#nonstd</a>
+ <a href="quirks.html#dblquote">quirks.html#dblquote</a>
+<li>https://en.wikipedia.org/wiki/RocksDB &rarr; <a href="howitworks.html">howitworks.html</a>
+<li>https://en.wikipedia.org/wiki/ROT13 &rarr; <a href="loadext.html#write">loadext.html#write</a>
+<li>https://en.wikipedia.org/wiki/RPM_Package_Manager &rarr; <a href="famous.html">famous.html</a>
+<li>https://en.wikipedia.org/wiki/Rule_of_Saint_Benedict &rarr; <a href="codeofethics.html">codeofethics.html</a>
+<li>https://en.wikipedia.org/wiki/Scalable_Vector_Graphics &rarr; <a href="geopoly.html">geopoly.html</a>
+ <a href="geopoly.html#gsvg">geopoly.html#gsvg</a>
+<li>https://en.wikipedia.org/wiki/SHA-3 &rarr; <a href="cli.html#sha3sum">cli.html#sha3sum</a>
+<li>https://en.wikipedia.org/wiki/SQL &rarr; <a href="howitworks.html">howitworks.html</a>
+<li>https://en.wikipedia.org/wiki/Symbian &rarr; <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+ <a href="th3.html">th3.html</a>
+<li>https://en.wikipedia.org/wiki/Tar_(computing) &rarr; <a href="sqlar.html">sqlar.html</a>
+<li>https://en.wikipedia.org/wiki/Tcl &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>https://en.wikipedia.org/wiki/Web_SQL_Database &rarr; <a href="bindptr.html">bindptr.html</a>
+<li>https://en.wikipedia.org/wiki/Yacc &rarr; <a href="lemon.html">lemon.html</a>
+<li>https://en.wikipedia.org/wiki/Zip_%28file_format%29 &rarr; <a href="zipfile.html">zipfile.html</a>
+<li>https://en.wikipedia.org/wiki/Zip_(file_format) &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="sqlar.html">sqlar.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>https://fossil-scm.org &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://fossil-scm.org/ &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="flextypegood.html">flextypegood.html</a>
+ <a href="howtocorrupt.html#stalefd">howtocorrupt.html#stalefd</a>
+ <a href="qmplan.html">qmplan.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a>
+ <a href="vtablist.html">vtablist.html</a>
+ <a href="whynotgit.html">whynotgit.html</a>
+<li>https://fossil-scm.org/forum &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://fossil-scm.org/forum/forumpost/c51b9a1169 &rarr; <a href="howtocorrupt.html#stalefd">howtocorrupt.html#stalefd</a>
+<li>https://fossil-scm.org/fossil &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://fossil-scm.org/fossil/doc/trunk/www/checkin_names.wiki &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://fossil-scm.org/fossil/doc/trunk/www/delta_format.wiki &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>https://fossil-scm.org/fossil/doc/trunk/www/fossil-v-git.wiki &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://fossil-scm.org/fossil/doc/trunk/www/permutedindex.html &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://fossil-scm.org/fossil/doc/trunk/www/webpage-ex.md &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://fossil-scm.org/fossil/file/src/foci.c &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>https://fossil-scm.org/fossil/uv/download.html &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://gcc.gnu.org/onlinedocs/gcc/Gcov.html &rarr; <a href="qmplan.html">qmplan.html</a>
+ <a href="testing.html#mcdc">testing.html#mcdc</a>
+<li>https://git-man-page-generator.lokaltog.net/ &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://git-scm.com &rarr; <a href="sessionintro.html">sessionintro.html</a>
+<li>https://git-scm.org &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://github.com/antirez/linenoise &rarr; <a href="changes.html#version_3_8_8_3">changes.html#version_3_8_8_3</a>
+ <a href="qmplan.html">qmplan.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>https://github.com/facebook/osquery &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>https://github.com/google/fuzzing/blob/master/docs/structure-aware-fuzzing.md &rarr; <a href="testing.html#dbsqlfuzz">testing.html#dbsqlfuzz</a>
+<li>https://github.com/google/fuzzing/blob/master/docs/structure-aware-fuzzing.md#user-content-example-sqlite &rarr; <a href="testing.html#dbsqlfuzz">testing.html#dbsqlfuzz</a>
+<li>https://github.com/google/oss-fuzz &rarr; <a href="changes.html#version_3_16_2">changes.html#version_3_16_2</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="testing.html#ossfuzz">testing.html#ossfuzz</a>
+<li>https://github.com/libfuse/libfuse &rarr; <a href="sqlar.html#cltools">sqlar.html#cltools</a>
+<li>https://github.com/sqlite/sqlite &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="whynotgit.html">whynotgit.html</a>
+<li>https://github.com/sqlite/sqlite/ &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://github.com/sqlite/sqlite/commits/master &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://github.com/sqlite/sqlite/commits/prefer-coroutine-sort-subquery &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://github.com/sqlite/sqlite/network &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://gitup.co/ &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://golang.org &rarr; <a href="assert.html">assert.html</a>
+<li>https://golang.org/doc/faq#assertions &rarr; <a href="assert.html">assert.html</a>
+<li>https://linode.com &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://news.ycombinator.com/item?id=16585120 &rarr; <a href="whyc.html">whyc.html</a>
+<li>https://news.ycombinator.com/item?id=16806955 &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://news.ycombinator.com/item?id=17964243 &rarr; <a href="news.html">news.html</a>
+<li>https://news.ycombinator.com/item?id=33975635 &rarr; <a href="whentouse.html#website">whentouse.html#website</a>
+<li>https://odin.cse.buffalo.edu/papers/2015/TPCTC-sqlite-final.pdf &rarr; <a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a>
+<li>https://osquery.readthedocs.io/en/stable/ &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>https://sqlite.org/docsrc/finfo/pages/whynotgit.in &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://sqlite.org/forum/about &rarr; <a href="cves.html#cvetab">cves.html#cvetab</a>
+<li>https://sqlite.org/forum/forum &rarr; <a href="flextypegood.html">flextypegood.html</a>
+ <a href="quirks.html">quirks.html</a>
+<li>https://sqlite.org/forum/forumpost/02d7be94d7 &rarr; <a href="datatype3.html#affcompoundview">datatype3.html#affcompoundview</a>
+<li>https://sqlite.org/forum/forumpost/140a67d3d2 &rarr; <a href="changes.html#version_3_35_2">changes.html#version_3_35_2</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://sqlite.org/forum/forumpost/174afeae5734d42d &rarr; <a href="changes.html#version_3_39_1">changes.html#version_3_39_1</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>https://sqlite.org/forum/forumpost/3607259d3c &rarr; <a href="changes.html#version_3_39_2">changes.html#version_3_39_2</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>https://sqlite.org/forum/forumpost/53de8864ba114bf6 &rarr; <a href="cves.html#cvetab">cves.html#cvetab</a>
+<li>https://sqlite.org/forum/forumpost/58540ce22dcd5fdcd &rarr; <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://sqlite.org/forum/forumpost/719a11e1314d1c70 &rarr; <a href="changes.html#version_3_39_3">changes.html#version_3_39_3</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>https://sqlite.org/forum/forumpost/9b9e4716c0d7bbd1 &rarr; <a href="changes.html#version_3_39_3">changes.html#version_3_39_3</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>https://sqlite.org/forum/forumpost/9ed02582fe &rarr; <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://sqlite.org/forum/forumpost/aa5a0431c99e631 &rarr; <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://sqlite.org/forum/forumpost/afbbcb5b72 &rarr; <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://sqlite.org/forum/forumpost/b03d86f9516cb3a2 &rarr; <a href="changes.html#version_3_37_2">changes.html#version_3_37_2</a>
+ <a href="howtocorrupt.html#svptbug">howtocorrupt.html#svptbug</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>https://sqlite.org/forum/forumpost/b52a020ce4 &rarr; <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://sqlite.org/optoverview.html#flattening &rarr; <a href="news.html">news.html</a>
+<li>https://sqlite.org/sqlar &rarr; <a href="sqlar.html#cltools">sqlar.html#cltools</a>
+<li>https://sqlite.org/src &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="cksumvfs.html">cksumvfs.html</a>
+ <a href="cli.html#arinsup">cli.html#arinsup</a>
+ <a href="index.html">index.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="zipfile.html">zipfile.html</a>
+<li>https://sqlite.org/src/artifact/18a53540aa3?ln=1679-1680 &rarr; <a href="assert.html">assert.html</a>
+<li>https://sqlite.org/src/artifact/18a53540aa3?ln=4371 &rarr; <a href="assert.html">assert.html</a>
+<li>https://sqlite.org/src/artifact/18a53540aa3?ln=5512-5516 &rarr; <a href="assert.html">assert.html</a>
+<li>https://sqlite.org/src/artifact/18a53540aa3?ln=5766 &rarr; <a href="assert.html">assert.html</a>
+<li>https://sqlite.org/src/artifact/c1e97e4c6f?ln=1048 &rarr; <a href="assert.html">assert.html</a>
+<li>https://sqlite.org/src/artifact/c1e97e4c6f?ln=157 &rarr; <a href="assert.html">assert.html</a>
+<li>https://sqlite.org/src/artifact/c1e97e4c6f?ln=2130-2138 &rarr; <a href="assert.html">assert.html</a>
+<li>https://sqlite.org/src/dir/ext/icu &rarr; <a href="changes.html#version_3_39_4">changes.html#version_3_39_4</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>https://sqlite.org/src/dir?ci=trunk&type=tree &rarr; <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+<li>https://sqlite.org/src/doc/trunk/doc/lemon.html &rarr; <a href="lemon.html">lemon.html</a>
+<li>https://sqlite.org/src/doc/trunk/tool/dbtotxt.md &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://sqlite.org/src/ext/checklist/top/index &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://sqlite.org/src/file/ext/fts5/fts5parse.y &rarr; <a href="lemon.html">lemon.html</a>
+<li>https://sqlite.org/src/file/ext/misc &rarr; <a href="cli.html#arinsup">cli.html#arinsup</a>
+ <a href="uintcseq.html">uintcseq.html</a>
+<li>https://sqlite.org/src/file/ext/misc/amatch.c &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>https://sqlite.org/src/file/ext/misc/anycollseq.c &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>https://sqlite.org/src/file/ext/misc/appendvfs.c &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="cli.html#arinsup">cli.html#arinsup</a>
+ <a href="cli.html#sqlar">cli.html#sqlar</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>https://sqlite.org/src/file/ext/misc/btreeinfo.c &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>https://sqlite.org/src/file/ext/misc/cksumvfs.c &rarr; <a href="cksumvfs.html">cksumvfs.html</a>
+<li>https://sqlite.org/src/file/ext/misc/closure.c &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>https://sqlite.org/src/file/ext/misc/csv.c &rarr; <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+<li>https://sqlite.org/src/file/ext/misc/dbdata.c &rarr; <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+<li>https://sqlite.org/src/file/ext/misc/eval.c &rarr; <a href="changes.html#version_3_23_1">changes.html#version_3_23_1</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://sqlite.org/src/file/ext/misc/explain.c &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+<li>https://sqlite.org/src/file/ext/misc/fileio.c &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="cli.html#arinsup">cli.html#arinsup</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>https://sqlite.org/src/file/ext/misc/fossildelta.c &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>https://sqlite.org/src/file/ext/misc/memstat.c &rarr; <a href="memstat.html">memstat.html</a>
+<li>https://sqlite.org/src/file/ext/misc/normalize.c &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://sqlite.org/src/file/ext/misc/regexp.c &rarr; <a href="changes.html#version_3_36_0">changes.html#version_3_36_0</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+<li>https://sqlite.org/src/file/ext/misc/remember.c &rarr; <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+<li>https://sqlite.org/src/file/ext/misc/series.c &rarr; <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+<li>https://sqlite.org/src/file/ext/misc/sqlar.c &rarr; <a href="cli.html#arinsup">cli.html#arinsup</a>
+ <a href="sqlar.html#cltools">sqlar.html#cltools</a>
+ <a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a>
+<li>https://sqlite.org/src/file/ext/misc/stmt.c &rarr; <a href="stmt.html">stmt.html</a>
+<li>https://sqlite.org/src/file/ext/misc/templatevtab.c &rarr; <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>https://sqlite.org/src/file/ext/misc/uint.c &rarr; <a href="uintcseq.html">uintcseq.html</a>
+<li>https://sqlite.org/src/file/ext/misc/unionvtab.c &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="unionvtab.html">unionvtab.html</a>
+<li>https://sqlite.org/src/file/ext/misc/uuid.c &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>https://sqlite.org/src/file/ext/misc/vfsstat.c &rarr; <a href="loadext.html#persist">loadext.html#persist</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>https://sqlite.org/src/file/ext/misc/vtablog.c &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>https://sqlite.org/src/file/ext/misc/wholenumber.c &rarr; <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>https://sqlite.org/src/file/ext/misc/zipfile.c &rarr; <a href="zipfile.html">zipfile.html</a>
+<li>https://sqlite.org/src/file/ext/recover/sqlite3recover.h &rarr; <a href="recovery.html">recovery.html</a>
+<li>https://sqlite.org/src/file/ext/session/changesetfuzz.c &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+<li>https://sqlite.org/src/file/src/dbpage.c &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://sqlite.org/src/file/src/json.c &rarr; <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+<li>https://sqlite.org/src/file/src/parse.y &rarr; <a href="lemon.html">lemon.html</a>
+<li>https://sqlite.org/src/file/src/printf.c &rarr; <a href="printf.html#percentw">printf.html#percentw</a>
+<li>https://sqlite.org/src/file/src/shell.c.in &rarr; <a href="c_interface.html">c_interface.html</a>
+ <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="cli.html#param">cli.html#param</a>
+ <a href="completion.html">completion.html</a>
+<li>https://sqlite.org/src/file/src/tclsqlite.c &rarr; <a href="c_interface.html">c_interface.html</a>
+<li>https://sqlite.org/src/file/src/test_tclvar.c &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>https://sqlite.org/src/file/test/speedtest1.c &rarr; <a href="cpu.html">cpu.html</a>
+ <a href="footprint.html">footprint.html</a>
+<li>https://sqlite.org/src/file/tool/cg_anno.tcl &rarr; <a href="cpu.html#microopt">cpu.html#microopt</a>
+<li>https://sqlite.org/src/file/tool/lemon.c &rarr; <a href="lemon.html">lemon.html</a>
+<li>https://sqlite.org/src/file/tool/lempar.c &rarr; <a href="lemon.html">lemon.html</a>
+<li>https://sqlite.org/src/file/tool/speed-check.sh &rarr; <a href="cpu.html">cpu.html</a>
+ <a href="cpu.html#microopt">cpu.html#microopt</a>
+<li>https://sqlite.org/src/finfo?name=src/shell.c &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://sqlite.org/src/info/0249d9aecf69948d &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://sqlite.org/src/info/04925dee41a21f &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://sqlite.org/src/info/093420fc0eb7cba7 &rarr; <a href="changes.html#version_3_23_1">changes.html#version_3_23_1</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://sqlite.org/src/info/0c4df46116e90f92 &rarr; <a href="changes.html#version_3_14_2">changes.html#version_3_14_2</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>https://sqlite.org/src/info/123c9ba32130a6c9 &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>https://sqlite.org/src/info/132994c8b1063bfb &rarr; <a href="changes.html#version_3_35_4">changes.html#version_3_35_4</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://sqlite.org/src/info/199df4168c &rarr; <a href="changes.html#version_3_14_2">changes.html#version_3_14_2</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>https://sqlite.org/src/info/1a84668dcfdebaf12415d &rarr; <a href="changes.html#version_3_25_3">changes.html#version_3_25_3</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>https://sqlite.org/src/info/1e39b966ae9ee739 &rarr; <a href="changes.html#version_3_23_1">changes.html#version_3_23_1</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://sqlite.org/src/info/2b8aed9f7c9e61e8 &rarr; <a href="changes.html#version_3_23_1">changes.html#version_3_23_1</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://sqlite.org/src/info/2c6c8689fb5f3d2f &rarr; <a href="changes.html#version_3_35_2">changes.html#version_3_35_2</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://sqlite.org/src/info/30475c820dc5ab8a8?ln=999,1026 &rarr; <a href="recovery.html">recovery.html</a>
+<li>https://sqlite.org/src/info/3b4450072511e621 &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>https://sqlite.org/src/info/4ba5abf65c5b0f9a96a7a &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>https://sqlite.org/src/info/510cde277783b5fb &rarr; <a href="changes.html#version_3_25_1">changes.html#version_3_25_1</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>https://sqlite.org/src/info/5232c9777fe4fb13 &rarr; <a href="changes.html#version_3_37_2">changes.html#version_3_37_2</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>https://sqlite.org/src/info/61fe9745 &rarr; <a href="changes.html#version_3_18_2">changes.html#version_3_18_2</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>https://sqlite.org/src/info/65eb38f6e46de8c75e188a17ec &rarr; <a href="changes.html#version_3_25_3">changes.html#version_3_25_3</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>https://sqlite.org/src/info/69d642332d25aa3b7315a6d385 &rarr; <a href="changes.html#version_3_25_3">changes.html#version_3_25_3</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>https://sqlite.org/src/info/6ee8cb6ae5 &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://sqlite.org/src/info/73c2b50211d3ae26 &rarr; <a href="changes.html#version_3_37_2">changes.html#version_3_37_2</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>https://sqlite.org/src/info/7486aa54b968e9b &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://sqlite.org/src/info/7486aa54b968e9b5 &rarr; <a href="changes.html#version_3_20_1">changes.html#version_3_20_1</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>https://sqlite.org/src/info/77b5b4235c9f7f11?ln=801-819 &rarr; <a href="loadext.html#persist">loadext.html#persist</a>
+<li>https://sqlite.org/src/info/7fa8049685b50b5aeb0c2 &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>https://sqlite.org/src/info/84bb08d8762920285f08f1c0?ln=7299,7361 &rarr; <a href="recovery.html">recovery.html</a>
+<li>https://sqlite.org/src/info/86ba67afafded936 &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>https://sqlite.org/src/info/892fc34f173e99d8 &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>https://sqlite.org/src/info/a4e06e75a9ab61a12 &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>https://sqlite.org/src/info/aa98619ad08ddca &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://sqlite.org/src/info/aa98619ad08ddcab &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>https://sqlite.org/src/info/b41031ea2b537237 &rarr; <a href="changes.html#version_3_25_1">changes.html#version_3_25_1</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>https://sqlite.org/src/info/b899b6042f97f5 &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://sqlite.org/src/info/bc115541132dad136 &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>https://sqlite.org/src/info/be436a7f4587ce5 &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://sqlite.org/src/info/cad1ab4cb7b0fc344 &rarr; <a href="news.html">news.html</a>
+<li>https://sqlite.org/src/info/cb91bf4290c211d &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://sqlite.org/src/info/ce68383bf6aba &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>https://sqlite.org/src/info/dc3f932f5a147771 &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>https://sqlite.org/src/info/de3403bf5ae &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>https://sqlite.org/src/info/de7db14784a08053 &rarr; <a href="changes.html#version_3_35_4">changes.html#version_3_35_4</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://sqlite.org/src/info/e20dd54ab0e4383 &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>https://sqlite.org/src/info/e8275b415a2f03bee &rarr; <a href="changes.html#version_3_25_3">changes.html#version_3_25_3</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>https://sqlite.org/src/info/ef360601 &rarr; <a href="changes.html#version_3_14_2">changes.html#version_3_14_2</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>https://sqlite.org/src/info/ef9318757b152e3a &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>https://sqlite.org/src/info/fac496b61722daf2 &rarr; <a href="changes.html#version_3_23_1">changes.html#version_3_23_1</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://sqlite.org/src/info/fda22108 &rarr; <a href="changes.html#version_3_18_1">changes.html#version_3_18_1</a>
+ <a href="changes.html#version_3_19_3">changes.html#version_3_19_3</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>https://sqlite.org/src/timeline &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://sqlite.org/src/timeline?c=5594a121bf132a98 &rarr; <a href="footprint.html">footprint.html</a>
+<li>https://sqlite.org/src/timeline?c=f9372072a6 &rarr; <a href="printf.html#percentw">printf.html#percentw</a>
+<li>https://sqlite.org/src/timeline?df=major-release &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://sqlite.org/src/timeline?p=version-3.38.1&bt=version-3.38.0 &rarr; <a href="changes.html#version_3_38_1">changes.html#version_3_38_1</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>https://sqlite.org/src/timeline?p=version-3.39.3&bt=version-3.39.2 &rarr; <a href="changes.html#version_3_39_3">changes.html#version_3_39_3</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>https://sqlite.org/src/timeline?r=branch-3.25 &rarr; <a href="news.html">news.html</a>
+<li>https://sqlite.org/src/timeline?r=branch-3.40 &rarr; <a href="news.html">news.html</a>
+<li>https://sqlite.org/src/timeline?r=prefer-coroutine-sort-subquery &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://sqlite.org/wasm &rarr; <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+<li>https://sqlite.org/wasm/doc/trunk/index.md &rarr; <a href="news.html">news.html</a>
+<li>https://stackoverflow.com/questions/27960605/find-all-the-direct-descendants-of-a-given-commit#27962018 &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://support.google.com/mail/answer/6590 &rarr; <a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a>
+<li>https://tools.ietf.org/html/rfc7159#section-9 &rarr; <a href="json1.html#varg">json1.html#varg</a>
+<li>https://tools.ietf.org/html/rfc7396 &rarr; <a href="json1.html#jpatch">json1.html#jpatch</a>
+<li>https://tools.ietf.org/html/rfc7946 &rarr; <a href="geopoly.html">geopoly.html</a>
+ <a href="geopoly.html#ccw">geopoly.html#ccw</a>
+<li>https://ttlc.intuit.com/post/show_full/cJf8mIhC4r4jjracfArQzM/when-i-try-to-update-turbotax-i-receive-an-unexpected-error-message &rarr; <a href="famous.html">famous.html</a>
+<li>https://www.bentley.com/en/products/product-line/modeling-and-visualization-software/microstation &rarr; <a href="famous.html">famous.html</a>
+<li>https://www.expensify.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>https://www.facebook.com/ &rarr; <a href="famous.html">famous.html</a>
+<li>https://www.fossil-scm.org/ &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="dbstat.html">dbstat.html</a>
+ <a href="getthecode.html">getthecode.html</a>
+ <a href="news.html">news.html</a>
+ <a href="np1queryprob.html">np1queryprob.html</a>
+ <a href="printf.html#percentw">printf.html#percentw</a>
+ <a href="rowvalue.html#rvinop">rowvalue.html#rvinop</a>
+ <a href="sessionintro.html">sessionintro.html</a>
+ <a href="whentouse.html#container">whentouse.html#container</a>
+<li>https://www.fossil-scm.org/download.html &rarr; <a href="getthecode.html#clone">getthecode.html#clone</a>
+<li>https://www.fossil-scm.org/fossil/artifact/e5d6a82d?ln=1594-1605 &rarr; <a href="rowvalue.html#rvinop">rowvalue.html#rvinop</a>
+<li>https://www.fossil-scm.org/fossil/artifact/e5d6a82d?ln=1618-1628 &rarr; <a href="rowvalue.html#rvinop">rowvalue.html#rvinop</a>
+<li>https://www.fossil-scm.org/fossil/artifact/e5d6a82d?ln=1641-1650 &rarr; <a href="rowvalue.html#rvinop">rowvalue.html#rvinop</a>
+<li>https://www.fossil-scm.org/fossil/doc/trunk/www/quotes.wiki &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://www.gnu.org/software/gdbm/gdbm.html &rarr; <a href="versionnumbers.html">versionnumbers.html</a>
+<li>https://www.hwaci.com/ &rarr; <a href="consortium.html">consortium.html</a>
+ <a href="crew.html">crew.html</a>
+<li>https://www.hwaci.com/sw/sqlite/cerod.html &rarr; <a href="support.html#prosupport">support.html#prosupport</a>
+<li>https://www.hwaci.com/sw/sqlite/see.html &rarr; <a href="support.html#prosupport">support.html#prosupport</a>
+<li>https://www.hwaci.com/sw/sqlite/zipvfs.html &rarr; <a href="memstat.html">memstat.html</a>
+ <a href="support.html#prosupport">support.html#prosupport</a>
+<li>https://www.ietf.org/rfc/rfc4180.txt &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="csv.html">csv.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>https://www.llvm.org/docs/LibFuzzer.html &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www.loc.gov &rarr; <a href="lts.html">lts.html</a>
+<li>https://www.loc.gov/ &rarr; <a href="locrsf.html">locrsf.html</a>
+<li>https://www.loc.gov/preservation/digital/formats/fdd/fdd000461.shtml#local &rarr; <a href="locrsf.html">locrsf.html</a>
+<li>https://www.loc.gov/preservation/resources/rfs/ &rarr; <a href="locrsf.html">locrsf.html</a>
+<li>https://www.loc.gov/preservation/resources/rfs/data.html &rarr; <a href="locrsf.html">locrsf.html</a>
+<li>https://www.microsoft.com/en-us/research/people/gray/ &rarr; <a href="fasterthanfs.html">fasterthanfs.html</a>
+<li>https://www.microsoft.com/en-us/research/publication/to-blob-or-not-to-blob-large-object-storage-in-a-database-or-a-filesystem/ &rarr; <a href="fasterthanfs.html">fasterthanfs.html</a>
+<li>https://www.neooffice.org/neojava/en/index.php &rarr; <a href="affcase1.html">affcase1.html</a>
+<li>https://www.postgresql.org &rarr; <a href="lang_returning.html">lang_returning.html</a>
+<li>https://www.reddit.com/r/programming/comments/84fzoc/why_is_sqlite_coded_in_c/ &rarr; <a href="whyc.html">whyc.html</a>
+<li>https://www.reddit.com/r/programming/comments/9ezy8c/serious_bug_causing_infinite_loop_in_some_queries/ &rarr; <a href="news.html">news.html</a>
+<li>https://www.sqlite.org &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www.sqlite.org/ &rarr; <a href="qmplan.html">qmplan.html</a>
+ <a href="whentouse.html#website">whentouse.html#website</a>
+<li>https://www.sqlite.org/checklistapp &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www.sqlite.org/dbsqlfuzz &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www.sqlite.org/docsrc &rarr; <a href="getthecode.html">getthecode.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+<li>https://www.sqlite.org/forum &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www.sqlite.org/see/doc/trunk/www/readme.wiki &rarr; <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>https://www.sqlite.org/sqllogictest &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www.sqlite.org/src &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="getthecode.html">getthecode.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+<li>https://www.sqlite.org/src/artifact/55b5fb474?ln=55-62 &rarr; <a href="testing.html#mutationtests">testing.html#mutationtests</a>
+<li>https://www.sqlite.org/src/artifact/d7cc99350?ln=403-443 &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>https://www.sqlite.org/src/artifact/f971962e92ebb8b0 &rarr; <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/csv.c &rarr; <a href="csv.html">csv.html</a>
+<li>https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/vfsstat.c &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>https://www.sqlite.org/src/artifact?ci=trunk&filename=src/parse.y &rarr; <a href="amalgamation.html">amalgamation.html</a>
+<li>https://www.sqlite.org/src/artifact?ci=trunk&filename=tool/dbhash.c &rarr; <a href="dbhash.html">dbhash.html</a>
+<li>https://www.sqlite.org/src/fdiff?sbs=1&v1=869c95b0fc73026d&v2=232c242a0ccb3d67 &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>https://www.sqlite.org/src/file/ext &rarr; <a href="loadext.html#write">loadext.html#write</a>
+<li>https://www.sqlite.org/src/file/ext/misc &rarr; <a href="loadext.html#write">loadext.html#write</a>
+<li>https://www.sqlite.org/src/file/ext/misc/appendvfs.c &rarr; <a href="cli.html#dotopen">cli.html#dotopen</a>
+<li>https://www.sqlite.org/src/file/ext/misc/carray.c &rarr; <a href="carray.html">carray.html</a>
+ <a href="loadext.html#write">loadext.html#write</a>
+<li>https://www.sqlite.org/src/file/ext/misc/carray.h &rarr; <a href="carray.html#onearg">carray.html#onearg</a>
+<li>https://www.sqlite.org/src/file/ext/misc/compress.c &rarr; <a href="loadext.html#write">loadext.html#write</a>
+<li>https://www.sqlite.org/src/file/ext/misc/json1.c &rarr; <a href="loadext.html#write">loadext.html#write</a>
+<li>https://www.sqlite.org/src/file/ext/misc/memvfs.c &rarr; <a href="loadext.html#write">loadext.html#write</a>
+<li>https://www.sqlite.org/src/file/ext/misc/remember.c &rarr; <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>https://www.sqlite.org/src/file/ext/misc/rot13.c &rarr; <a href="loadext.html#write">loadext.html#write</a>
+<li>https://www.sqlite.org/src/file/ext/misc/series.c &rarr; <a href="loadext.html#write">loadext.html#write</a>
+<li>https://www.sqlite.org/src/file/ext/misc/sha1.c &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+<li>https://www.sqlite.org/src/file/ext/misc/shathree.c &rarr; <a href="cli.html#sha3sum">cli.html#sha3sum</a>
+<li>https://www.sqlite.org/src/file/test/kvtest.c &rarr; <a href="fasterthanfs.html">fasterthanfs.html</a>
+<li>https://www.sqlite.org/src/file/test/ossfuzz.c &rarr; <a href="testing.html#ossfuzz">testing.html#ossfuzz</a>
+<li>https://www.sqlite.org/src/info/05f43be8fdda9f &rarr; <a href="compile.html#like_doesnt_match_blobs">compile.html#like_doesnt_match_blobs</a>
+<li>https://www.sqlite.org/src/info/06796225f59c057c &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>https://www.sqlite.org/src/info/0eab1ac759 &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>https://www.sqlite.org/src/info/1079ad19993d13fa &rarr; <a href="changes.html#version_3_30_1">changes.html#version_3_30_1</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>https://www.sqlite.org/src/info/16c9801ceba49 &rarr; <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+<li>https://www.sqlite.org/src/info/190c2507 &rarr; <a href="changes.html#version_3_16_2">changes.html#version_3_16_2</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>https://www.sqlite.org/src/info/1c24a659e6d7f3a1 &rarr; <a href="changes.html#version_3_35_1">changes.html#version_3_35_1</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://www.sqlite.org/src/info/1d958d90596593a774 &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/1ec41379c9c1e400 &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>https://www.sqlite.org/src/info/2326c258d02ead33 &rarr; <a href="changes.html#version_3_8_8_3">changes.html#version_3_8_8_3</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>https://www.sqlite.org/src/info/25e335f802dd &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+<li>https://www.sqlite.org/src/info/27754b74ddf64 &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/2df0107b &rarr; <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>https://www.sqlite.org/src/info/2df6bbf1b8ca8 &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/2f1b168ab4d4844 &rarr; <a href="changes.html#version_3_15_2">changes.html#version_3_15_2</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>https://www.sqlite.org/src/info/30027b613b4 &rarr; <a href="changes.html#version_3_16_2">changes.html#version_3_16_2</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>https://www.sqlite.org/src/info/343634942dd54ab &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/34a579141b2c5ac &rarr; <a href="changes.html#version_3_15_1">changes.html#version_3_15_1</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>https://www.sqlite.org/src/info/34cd55d6 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>https://www.sqlite.org/src/info/34cd55d68e0e6e7c9a0711aab81a2ee3c354b4c0 &rarr; <a href="changes.html#version_3_8_10_2">changes.html#version_3_8_10_2</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+<li>https://www.sqlite.org/src/info/36fae083b450e3a &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/43107840f1c02 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>https://www.sqlite.org/src/info/47b2581aa9bfecec &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>https://www.sqlite.org/src/info/4e8e4857d32d401f &rarr; <a href="changes.html#version_3_27_1">changes.html#version_3_27_1</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/4feb3159c6bc3f7e33959 &rarr; <a href="changes.html#version_3_27_2">changes.html#version_3_27_2</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/525deb7a67fbd647 &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/559733b09e9630fa &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>https://www.sqlite.org/src/info/57eec374ae1d0a1d &rarr; <a href="changes.html#version_3_9_1">changes.html#version_3_9_1</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>https://www.sqlite.org/src/info/57eec374ae1d0a1d4a &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>https://www.sqlite.org/src/info/5948e09b8c415bc45d &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/5e3c886796e5512e &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>https://www.sqlite.org/src/info/6097cb92745327a1 &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>https://www.sqlite.org/src/info/6484e6ce678fffab &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>https://www.sqlite.org/src/info/6c9b5514077fed34551 &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed &rarr; <a href="changes.html#version_3_8_7_3">changes.html#version_3_8_7_3</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_7_3.html">releaselog/3_8_7_3.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>https://www.sqlite.org/src/info/7310e2fb3d046a5 &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/73c2b50211d3ae26 &rarr; <a href="howtocorrupt.html#svptbug">howtocorrupt.html#svptbug</a>
+<li>https://www.sqlite.org/src/info/79cad5e4b2e219dd197242e9e &rarr; <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>https://www.sqlite.org/src/info/7b3328086a5c116c &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>https://www.sqlite.org/src/info/7be932dfa60a8a6b3b26bcf76 &rarr; <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>https://www.sqlite.org/src/info/7c6d876f84e6e7e2 &rarr; <a href="changes.html#version_3_32_3">changes.html#version_3_32_3</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>https://www.sqlite.org/src/info/7ce4e71c1b7251be &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/7d7525cb01b68 &rarr; <a href="changes.html#version_3_12_2">changes.html#version_3_12_2</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+<li>https://www.sqlite.org/src/info/7f7f8026eda38 &rarr; <a href="changes.html#version_3_12_1">changes.html#version_3_12_1</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+<li>https://www.sqlite.org/src/info/7fde638e94287d2c &rarr; <a href="changes.html#version_3_19_2">changes.html#version_3_19_2</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>https://www.sqlite.org/src/info/7ffd1ca1d2ad4ec &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+<li>https://www.sqlite.org/src/info/80177f0c226ff54 &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/80369eddd5c94 &rarr; <a href="changes.html#version_3_10_2">changes.html#version_3_10_2</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>https://www.sqlite.org/src/info/810dc8038872e212 &rarr; <a href="changes.html#version_3_32_2">changes.html#version_3_32_2</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>https://www.sqlite.org/src/info/823779d31eb09cda &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/873cae2b6e25b &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>https://www.sqlite.org/src/info/892fc34f173e99d8 &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>https://www.sqlite.org/src/info/8a2adec1 &rarr; <a href="changes.html#version_3_9_2">changes.html#version_3_9_2</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>https://www.sqlite.org/src/info/8c9458e7 &rarr; <a href="changes.html#version_3_16_1">changes.html#version_3_16_1</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>https://www.sqlite.org/src/info/8f157e8010b22af0 &rarr; <a href="changes.html#version_3_32_3">changes.html#version_3_32_3</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>https://www.sqlite.org/src/info/8fd39115d8f46 &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>https://www.sqlite.org/src/info/96c1454cbfd9509 &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>https://www.sqlite.org/src/info/981329adeef51011052 &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>https://www.sqlite.org/src/info/9936b2fa443fec03ff25 &rarr; <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>https://www.sqlite.org/src/info/9b78184be266fd70 &rarr; <a href="news.html">news.html</a>
+<li>https://www.sqlite.org/src/info/9fb26d37cefaba40 &rarr; <a href="changes.html#version_3_32_3">changes.html#version_3_32_3</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>https://www.sqlite.org/src/info/a306e56ff68b8fa5 &rarr; <a href="changes.html#version_3_12_2">changes.html#version_3_12_2</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+<li>https://www.sqlite.org/src/info/a59ae93ee990a55 &rarr; <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>https://www.sqlite.org/src/info/ac661962a2aeab3c331 &rarr; <a href="changes.html#version_3_9_2">changes.html#version_3_9_2</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>https://www.sqlite.org/src/info/ad2559db380abf8 &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+<li>https://www.sqlite.org/src/info/b706351ce2ecf59a &rarr; <a href="changes.html#version_3_32_3">changes.html#version_3_32_3</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>https://www.sqlite.org/src/info/b850dd159918af56 &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/b918d4b4e546d &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/b93be8729a895a528e2 &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>https://www.sqlite.org/src/info/bb4bdb9f7f654b0bb9 &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/bb8a9fd4a9b7fce5 &rarr; <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://www.sqlite.org/src/info/bc8d94f0fbd633fd9a &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/c2a19d81652f40568c &rarr; <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>https://www.sqlite.org/src/info/c5ea805691bfc4204b1cb9e &rarr; <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>https://www.sqlite.org/src/info/c648539b52ca28c0 &rarr; <a href="changes.html#version_3_9_3">changes.html#version_3_9_3</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>https://www.sqlite.org/src/info/c8d3b9f0a750a529 &rarr; <a href="changes.html#version_3_32_3">changes.html#version_3_32_3</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>https://www.sqlite.org/src/info/c94369cae9b561b1f996d0054b &rarr; <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>https://www.sqlite.org/src/info/cad1ab4cb7b0fc &rarr; <a href="changes.html#version_3_19_1">changes.html#version_3_19_1</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>https://www.sqlite.org/src/info/cb3aa0641d9a4 &rarr; <a href="changes.html#version_3_10_1">changes.html#version_3_10_1</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>https://www.sqlite.org/src/info/d06a25c84454a &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+<li>https://www.sqlite.org/src/info/d0866b26f83e9c55e3 &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/d6ec09eccf68cfc &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/d75e67654aa96 &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/d8dc2b3a58cd5dc29 &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>https://www.sqlite.org/src/info/d96eba87698a428c1d &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/dc6ebeda9396087 &rarr; <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+<li>https://www.sqlite.org/src/info/dc9b1c91 &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>https://www.sqlite.org/src/info/df46dfb631f75694 &rarr; <a href="changes.html#version_3_27_2">changes.html#version_3_27_2</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/e367f31901ea8700 &rarr; <a href="changes.html#version_3_32_3">changes.html#version_3_32_3</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>https://www.sqlite.org/src/info/e4a18565a36884b00edf &rarr; <a href="changes.html#version_3_8_7_3">changes.html#version_3_8_7_3</a>
+ <a href="releaselog/3_8_7_3.html">releaselog/3_8_7_3.html</a>
+<li>https://www.sqlite.org/src/info/e6e962d6b0f06f46e &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="compile.html#enable_null_trim">compile.html#enable_null_trim</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+<li>https://www.sqlite.org/src/info/e6f1f2e34dceeb1ed6 &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/e8d439c77685eca6 &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>https://www.sqlite.org/src/info/eb703ba7b50c1a5 &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>https://www.sqlite.org/src/info/ec32177c99ccac2 &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/ec7addc87f97bcff &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://www.sqlite.org/src/info/ee51301f316c09e9 &rarr; <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>https://www.sqlite.org/src/info/f09fcd17810f65f717 &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>https://www.sqlite.org/src/info/f2ad7de056ab1dc9200 &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>https://www.sqlite.org/src/info/f45ac567eaa9f9 &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+<li>https://www.sqlite.org/src/info/f484b65f3d62305 &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/f68bf68513a1c15f &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>https://www.sqlite.org/src/info/f68dc596c4e6018d &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>https://www.sqlite.org/src/info/f7f8c97e97597 &rarr; <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+<li>https://www.sqlite.org/src/info/f97c4637102a3ae72b7911 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>https://www.sqlite.org/src/info/fab2c2b07b5d3 &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>https://www.sqlite.org/src/info/fef4bb4bd9185ec8f &rarr; <a href="changes.html#version_3_15_1">changes.html#version_3_15_1</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>https://www.sqlite.org/src/repo-tabsize &rarr; <a href="dbstat.html">dbstat.html</a>
+<li>https://www.sqlite.org/src/timeline &rarr; <a href="getthecode.html">getthecode.html</a>
+ <a href="np1queryprob.html">np1queryprob.html</a>
+<li>https://www.sqlite.org/src/timeline?c=2000-05-29+14:26:00 &rarr; <a href="about.html">about.html</a>
+<li>https://www.sqlite.org/src/timeline?c=2013-08-26 &rarr; <a href="getthecode.html">getthecode.html</a>
+<li>https://www.sqlite.org/src/timeline?c=2018-03-16&n=10 &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://www.sqlite.org/src/timeline?p=version-3.32.3&bt=version-3.32.0 &rarr; <a href="news.html">news.html</a>
+<li>https://www.sqlite.org/src/timeline?y=ci&c=0a2eb949f8a759e5 &rarr; <a href="testing.html#ossfuzz">testing.html#ossfuzz</a>
+<li>https://www.sqlite.org/src/timeline?y=ci&c=62f2235adf796c72 &rarr; <a href="testing.html#ossfuzz">testing.html#ossfuzz</a>
+<li>https://www.sqlite.org/src/timeline?y=ci&c=c422afb507dc8757 &rarr; <a href="testing.html#ossfuzz">testing.html#ossfuzz</a>
+<li>https://www.sqlite.org/src/timeline?y=t&u=mrigger&n=all &rarr; <a href="testing.html#3pfuzz">testing.html#3pfuzz</a>
+<li>https://www.sqlite.org/src/tktview/4baa46491212947 &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>https://www.sqlite.org/src/tktview?name=38a97a87a6 &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>https://www.sqlite.org/src/tktview?name=8a2adec166 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>https://www.sqlite.org/src/tktview?name=ac661962a2 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>https://www.sqlite.org/src/tktview?name=f97c4637102a3ae72b79 &rarr; <a href="changes.html#version_3_8_8_1">changes.html#version_3_8_8_1</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>https://www.sqlite.org/src/vdiff?from=e4ab094f8afce0817f4074e823fabe59fc29ebb4&to=83afe23e553e802c0947c80d0ffdd120423e7c52&sbs=1 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>https://www.sqlite.org/src/vpatch?from=version-3.9.0&to=version-3.9.1 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>https://www.sqlite.org/th3 &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www.tcl.tk/man/tcl8.3/UserCmd/tclsh.htm &rarr; <a href="cli.html#compiling">cli.html#compiling</a>
+<li>https://www2.sqlite.org &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www2.sqlite.org/docsrc &rarr; <a href="getthecode.html">getthecode.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+<li>https://www2.sqlite.org/forum &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www2.sqlite.org/src &rarr; <a href="getthecode.html">getthecode.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+<li>https://www3.sqlite.org &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www3.sqlite.org/cgi/dbsqlfuzz &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www3.sqlite.org/cgi/docsrc &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www3.sqlite.org/cgi/forum &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www3.sqlite.org/cgi/src &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www3.sqlite.org/cgi/th3 &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>https://www3.sqlite.org/docsrc &rarr; <a href="getthecode.html">getthecode.html</a>
+<li>https://www3.sqlite.org/src &rarr; <a href="getthecode.html">getthecode.html</a>
+<li>https://xkcd.com/1597/ &rarr; <a href="whynotgit.html">whynotgit.html</a>
+<li>https://zlib.net &rarr; <a href="cli.html#compiling">cli.html#compiling</a>
+ <a href="compile.html#have_zlib">compile.html#have_zlib</a>
+ <a href="zipfile.html">zipfile.html</a>
+<li>https://zlib.net/ &rarr; <a href="qmplan.html">qmplan.html</a>
+ <a href="sqlar.html#cltools">sqlar.html#cltools</a>
+ <a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a>
+<li>ieee754 extension &rarr; <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+<li>ifnull &rarr; <a href="changes.html#version_3_6_21">changes.html#version_3_6_21</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+<li>iif &rarr; <a href="lang_expr.html#case">lang_expr.html#case</a>
+<li>iif SQL function &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>immutable query parameter &rarr; <a href="wal.html#advantages">wal.html#advantages</a>
+ <a href="wal.html#readonly">wal.html#readonly</a>
+ <a href="walformat.html#locks">walformat.html#locks</a>
+<li>IN operator &rarr; <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+ <a href="changes.html#version_3_12_2">changes.html#version_3_12_2</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="rowvalue.html#rvinop">rowvalue.html#rvinop</a>
+<li>in-memory database &rarr; <a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a>
+ <a href="capi3ref.html#coreuriqueryparameters">capi3ref.html#coreuriqueryparameters</a>
+ <a href="changes.html#version_3_7_13">changes.html#version_3_7_13</a>
+ <a href="cli.html#zipdb">cli.html#zipdb</a>
+ <a href="compile.html#omit_memorydb">compile.html#omit_memorydb</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+<li>in-memory databases &rarr; <a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a>
+ <a href="pragma.html#pragma_temp_store">pragma.html#pragma_temp_store</a>
+ <a href="sharedcache.html#inmemsharedcache">sharedcache.html#inmemsharedcache</a>
+<li>in-memory shared-cache &rarr; <a href="changes.html#version_3_7_13">changes.html#version_3_7_13</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+<li>increase in the default page size &rarr; <a href="news.html">news.html</a>
+<li>incremental_vacuum &rarr; <a href="changes.html#version_3_6_12">changes.html#version_3_6_12</a>
+ <a href="changes.html#version_3_7_2">changes.html#version_3_7_2</a>
+ <a href="fileformat2.html#ovflpgs">fileformat2.html#ovflpgs</a>
+ <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+ <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_auto_vacuum">pragma.html#pragma_auto_vacuum</a>
+ <a href="releaselog/3_6_12.html">releaselog/3_6_12.html</a>
+ <a href="releaselog/3_7_2.html">releaselog/3_7_2.html</a>
+<li>index b-tree &rarr; <a href="opcode.html#codes">opcode.html#codes</a>
+<li>index_info &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>index_info pragma &rarr; <a href="pragma.html#pragfunc">pragma.html#pragfunc</a>
+ <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a>
+<li>index_xinfo &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>index_xinfo pragma &rarr; <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a>
+<li>INDEXED BY &rarr; <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="changes.html#version_3_6_4">changes.html#version_3_6_4</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a>
+<li>indexed-column &rarr; <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a>
+ <a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+<li>Indexes &rarr; <a href="stricttables.html">stricttables.html</a>
+<li>Indexes On Expressions &rarr; <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_createindex.html#indexexpr">lang_createindex.html#indexexpr</a>
+<li>indexes on expressions &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="features.html">features.html</a>
+ <a href="lang_reindex.html">lang_reindex.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#where_clause">optoverview.html#where_clause</a>
+ <a href="rbu.html#rbu_updates">rbu.html#rbu_updates</a>
+ <a href="rbu.html#rbu_vacuum">rbu.html#rbu_vacuum</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="versionnumbers.html">versionnumbers.html</a>
+<li>indexing &rarr; <a href="eqp.html">eqp.html</a>
+ <a href="queryplanner-ng.html">queryplanner-ng.html</a>
+<li>indexing tutorial &rarr; <a href="imposter.html">imposter.html</a>
+ <a href="optoverview.html">optoverview.html</a>
+<li>INSERT &rarr; <a href="autoinc.html">autoinc.html</a>
+ <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_last_insert_rowid">capi3ref.html#sqlite3_last_insert_rowid</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+ <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="changes.html#version_3_8_10_2">changes.html#version_3_8_10_2</a>
+ <a href="compile.html#omit_compound_select">compile.html#omit_compound_select</a>
+ <a href="conflict.html">conflict.html</a>
+ <a href="faq.html#q1">faq.html#q1</a>
+ <a href="faq.html#q19">faq.html#q19</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="fts5.html">fts5.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="lang_createtable.html#dfltval">lang_createtable.html#dfltval</a>
+ <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+ <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_replace.html">lang_replace.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_upsert.html#parseambig">lang_upsert.html#parseambig</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="pragma.html">pragma.html</a>
+ <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a>
+ <a href="pragma.html#pragma_writable_schema">pragma.html#pragma_writable_schema</a>
+ <a href="rbu.html">rbu.html</a>
+ <a href="rbu.html#rbu_updates">rbu.html#rbu_updates</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="rtree.html">rtree.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtab.html#hiddencol">vtab.html#hiddencol</a>
+<li>insert-stmt &rarr; <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+<li>INSTEAD OF trigger &rarr; <a href="c3ref/changes.html">c3ref/changes.html</a>
+ <a href="capi3ref.html#sqlite3_changes">capi3ref.html#sqlite3_changes</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a>
+<li>instr &rarr; <a href="changes.html#version_3_15_2">changes.html#version_3_15_2</a>
+ <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+<li>INTEGER PRIMARY KEY &rarr; <a href="autoinc.html">autoinc.html</a>
+ <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>
+ <a href="capi3ref.html#sqlite3_last_insert_rowid">capi3ref.html#sqlite3_last_insert_rowid</a>
+ <a href="capi3ref.html#sqlite3_table_column_metadata">capi3ref.html#sqlite3_table_column_metadata</a>
+ <a href="changes.html#version_3_12_2">changes.html#version_3_12_2</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="compile.html#omit_autoincrement">compile.html#omit_autoincrement</a>
+ <a href="datatype3.html#storageclasses">datatype3.html#storageclasses</a>
+ <a href="faq.html#q1">faq.html#q1</a>
+ <a href="faq.html#q3">faq.html#q3</a>
+ <a href="fileformat2.html##sqltab">fileformat2.html##sqltab</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="fileformat2.html#intschema">fileformat2.html#intschema</a>
+ <a href="fileformat2.html#seqtab">fileformat2.html#seqtab</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+ <a href="gencol.html">gencol.html</a>
+ <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a>
+ <a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a>
+ <a href="lang_vacuum.html#howvacuumworks">lang_vacuum.html#howvacuumworks</a>
+ <a href="queryplanner.html#searching">queryplanner.html#searching</a>
+ <a href="quirks.html">quirks.html</a>
+ <a href="quirks.html#dblquote">quirks.html#dblquote</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="rowidtable.html">rowidtable.html</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="stricttables.html">stricttables.html</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+ <a href="withoutrowid.html#bene">withoutrowid.html#bene</a>
+<li>integrity_check &rarr; <a href="pragma.html#pragma_quick_check">pragma.html#pragma_quick_check</a>
+ <a href="testing.html#crashtesting">testing.html#crashtesting</a>
+<li>integrity_check pragma &rarr; <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="compile.html#omit_integrity_check">compile.html#omit_integrity_check</a>
+ <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+<li>internal indexes &rarr; <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="optoverview.html#autoindex">optoverview.html#autoindex</a>
+ <a href="schematab.html">schematab.html</a>
+<li>internal schema objects &rarr; <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+<li>internal table &rarr; <a href="autoinc.html">autoinc.html</a>
+<li>internal tables &rarr; <a href="lang_analyze.html">lang_analyze.html</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+<li>Internal Versus External BLOBs &rarr; <a href="aff_short.html">aff_short.html</a>
+ <a href="appfileformat.html">appfileformat.html</a>
+ <a href="fasterthanfs.html">fasterthanfs.html</a>
+ <a href="whyc.html">whyc.html</a>
+<li>IS DISTINCT FROM &rarr; <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>IS NOT DISTINCT FROM &rarr; <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>IS operator &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="windowfunctions.html#grouptype">windowfunctions.html#grouptype</a>
+<li>join order &rarr; <a href="eqp.html">eqp.html</a>
+<li>join-clause &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>join-constraint &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#fromclause">lang_select.html#fromclause</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>join-operator &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#fromclause">lang_select.html#fromclause</a>
+ <a href="lang_select.html#nonstd">lang_select.html#nonstd</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>journal_mode &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_5_9">changes.html#version_3_5_9</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_5_9.html">releaselog/3_5_9.html</a>
+ <a href="tempfiles.html#tempdb">tempfiles.html#tempdb</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+ <a href="wal.html#readonly">wal.html#readonly</a>
+<li>journal_mode pragma &rarr; <a href="atomiccommit.html#keepcache">atomiccommit.html#keepcache</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="compile.html#default_journal_size_limit">compile.html#default_journal_size_limit</a>
+ <a href="fileformat2.html#rollbackjournal">fileformat2.html#rollbackjournal</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="pragma.html#pragma_wal_autocheckpoint">pragma.html#pragma_wal_autocheckpoint</a>
+ <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="tempfiles.html#rollbackjrnl">tempfiles.html#rollbackjrnl</a>
+<li>journal_size_limit pragma &rarr; <a href="compile.html#default_journal_size_limit">compile.html#default_journal_size_limit</a>
+ <a href="wal.html#bigwal">wal.html#bigwal</a>
+<li>json &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="json1.html#jarray">json1.html#jarray</a>
+ <a href="json1.html#jobj">json1.html#jobj</a>
+ <a href="json1.html#jset">json1.html#jset</a>
+ <a href="json1.html#varg">json1.html#varg</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>JSON function path arguments &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>JSON SQL functions &rarr; <a href="compile.html#enable_json1">compile.html#enable_json1</a>
+ <a href="compile.html#omit_json">compile.html#omit_json</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="loadext.html#write">loadext.html#write</a>
+<li>json1 &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_15_2">changes.html#version_3_15_2</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="features.html">features.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>json_array &rarr; <a href="json1.html#jobj">json1.html#jobj</a>
+ <a href="json1.html#jset">json1.html#jset</a>
+ <a href="json1.html#varg">json1.html#varg</a>
+<li>json_each &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="flextypegood.html">flextypegood.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>json_extract &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="json1.html#jptr">json1.html#jptr</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>json_group_array &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>json_group_object &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>json_object &rarr; <a href="json1.html#jarray">json1.html#jarray</a>
+ <a href="json1.html#jset">json1.html#jset</a>
+<li>json_patch &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>json_quote &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="json1.html#howtocompile">json1.html#howtocompile</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>json_remove &rarr; <a href="json1.html#jpatch">json1.html#jpatch</a>
+<li>json_set &rarr; <a href="json1.html#jpatch">json1.html#jpatch</a>
+<li>json_tree &rarr; <a href="flextypegood.html">flextypegood.html</a>
+ <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>json_valid &rarr; <a href="json1.html#howtocompile">json1.html#howtocompile</a>
+ <a href="json1.html#jmini">json1.html#jmini</a>
+<li>julianday modifier &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>keyword index &rarr; <a href="doclist.html">doclist.html</a>
+ <a href="sitemap.html">sitemap.html</a>
+<li>languageid &rarr; <a href="fts3.html#f4alid">fts3.html#f4alid</a>
+<li>last_insert_rowid &rarr; <a href="deterministic.html">deterministic.html</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+<li>last_insert_rowid SQL function &rarr; <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="capi3ref.html#sqlite3_last_insert_rowid">capi3ref.html#sqlite3_last_insert_rowid</a>
+<li>LEFT JOIN strength reduction optimization &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_23_1">changes.html#version_3_23_1</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>legacy_file_format &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>legacy_file_format pragma &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+ <a href="lang_createindex.html#descidx">lang_createindex.html#descidx</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>Lemon &rarr; <a href="changes.html#version_2_8_7">changes.html#version_2_8_7</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+<li>Lemon LALR parser generator &rarr; <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+<li>Lemon parser generator &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="arch.html">arch.html</a>
+ <a href="changes.html#version_1_0_28">changes.html#version_1_0_28</a>
+ <a href="changes.html#version_2_4_0">changes.html#version_2_4_0</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="compile.html#enable_update_delete_limit">compile.html#enable_update_delete_limit</a>
+ <a href="compile.html#omitfeatures">compile.html#omitfeatures</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+<li>length &rarr; <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>length SQL function &rarr; <a href="nulinstr.html">nulinstr.html</a>
+<li>library size &rarr; <a href="about.html">about.html</a>
+<li>like &rarr; <a href="faq.html#q18">faq.html#q18</a>
+ <a href="lang_expr.html#like">lang_expr.html#like</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+<li>LIKE &rarr; <a href="c3ref/c_limit_attached.html#sqlitelimitlikepatternlength">c3ref/c_limit_attached.html#sqlitelimitlikepatternlength</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/strlike.html">c3ref/strlike.html</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_strlike">capi3ref.html#sqlite3_strlike</a>
+ <a href="capi3ref.html#sqlitelimitlikepatternlength">capi3ref.html#sqlitelimitlikepatternlength</a>
+ <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_10_2">changes.html#version_3_10_2</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="cli.html#sha3sum">cli.html#sha3sum</a>
+ <a href="compile.html#case_sensitive_like">compile.html#case_sensitive_like</a>
+ <a href="compile.html#like_doesnt_match_blobs">compile.html#like_doesnt_match_blobs</a>
+ <a href="compile.html#omit_like_optimization">compile.html#omit_like_optimization</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="invalidutf.html">invalidutf.html</a>
+ <a href="lang_corefunc.html#like">lang_corefunc.html#like</a>
+ <a href="limits.html#max_like_pattern_length">limits.html#max_like_pattern_length</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="pragma.html#pragma_case_sensitive_like">pragma.html#pragma_case_sensitive_like</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>LIKE optimization &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="changes.html#version_3_7_1">changes.html#version_3_7_1</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+ <a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a>
+<li>likelihood &rarr; <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="lang_corefunc.html#likely">lang_corefunc.html#likely</a>
+ <a href="lang_corefunc.html#unlikely">lang_corefunc.html#unlikely</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>likely &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="lang_corefunc.html#likelihood">lang_corefunc.html#likelihood</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>LIMIT &rarr; <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#values">lang_select.html#values</a>
+<li>limit categories &rarr; <a href="c3ref/limit.html">c3ref/limit.html</a>
+ <a href="capi3ref.html#sqlite3_limit">capi3ref.html#sqlite3_limit</a>
+<li>limits &rarr; <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>
+ <a href="c3ref/limit.html">c3ref/limit.html</a>
+ <a href="capi3ref.html#SQLITE_LIMIT_ATTACHED">capi3ref.html#SQLITE_LIMIT_ATTACHED</a>
+ <a href="capi3ref.html#sqlite3_limit">capi3ref.html#sqlite3_limit</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="security.html">security.html</a>
+ <a href="testing.html#tension">testing.html#tension</a>
+<li>list of virtual tables &rarr; <a href="vtab.html">vtab.html</a>
+<li>literal-value &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>load_extension &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension</a>
+ <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="capi3ref.html#sqlite3_enable_load_extension">capi3ref.html#sqlite3_enable_load_extension</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+ <a href="capi3ref.html#sqlitedbconfigenableloadextension">capi3ref.html#sqlitedbconfigenableloadextension</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="loadext.html">loadext.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="tclsqlite.html#enable_load_extension">tclsqlite.html#enable_load_extension</a>
+<li>load_extension SQL function &rarr; <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+ <a href="capi3ref.html#sqliteinnocuous">capi3ref.html#sqliteinnocuous</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+<li>loadable extension &rarr; <a href="carray.html">carray.html</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="cksumvfs.html">cksumvfs.html</a>
+ <a href="cli.html#fileio">cli.html#fileio</a>
+ <a href="csv.html">csv.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="rescode.html#ok_load_permanently">rescode.html#ok_load_permanently</a>
+ <a href="series.html">series.html</a>
+ <a href="spellfix1.html">spellfix1.html</a>
+ <a href="swarmvtab.html#compiling_and_using_swarmvtab">swarmvtab.html#compiling_and_using_swarmvtab</a>
+ <a href="uintcseq.html">uintcseq.html</a>
+ <a href="unionvtab.html">unionvtab.html</a>
+ <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+ <a href="zipfile.html">zipfile.html</a>
+<li>loadable extensions &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/api_routines.html">c3ref/api_routines.html</a>
+ <a href="capi3ref.html#sqlite3_api_routines">capi3ref.html#sqlite3_api_routines</a>
+ <a href="changes.html#version_3_31_1">changes.html#version_3_31_1</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cli.html#arinsup">cli.html#arinsup</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="rescode.html#ok_load_permanently">rescode.html#ok_load_permanently</a>
+<li>localtime modifier &rarr; <a href="changes.html#version_3_38_1">changes.html#version_3_38_1</a>
+ <a href="compile.html#localtime_r">compile.html#localtime_r</a>
+ <a href="compile.html#localtime_s">compile.html#localtime_s</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>lock-byte page &rarr; <a href="walformat.html#locks">walformat.html#locks</a>
+<li>locking_mode &rarr; <a href="changes.html#version_3_5_9">changes.html#version_3_5_9</a>
+ <a href="compile.html#default_journal_size_limit">compile.html#default_journal_size_limit</a>
+ <a href="compile.html#default_locking_mode">compile.html#default_locking_mode</a>
+ <a href="howtocorrupt.html#fakeusb">howtocorrupt.html#fakeusb</a>
+ <a href="releaselog/3_5_9.html">releaselog/3_5_9.html</a>
+ <a href="wal.html#busy">wal.html#busy</a>
+ <a href="wal.html#noshm">wal.html#noshm</a>
+<li>long term support &rarr; <a href="index.html">index.html</a>
+ <a href="versionnumbers.html">versionnumbers.html</a>
+<li>lookaside buffer &rarr; <a href="news.html">news.html</a>
+<li>lookaside memory &rarr; <a href="c3ref/c_prepare_normalize.html#sqlitepreparepersistent">c3ref/c_prepare_normalize.html#sqlitepreparepersistent</a>
+ <a href="capi3ref.html#sqlitepreparepersistent">capi3ref.html#sqlitepreparepersistent</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>lookaside memory allocator &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside</a>
+ <a href="capi3ref.html#sqlitedbconfiglookaside">capi3ref.html#sqlitedbconfiglookaside</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="compile.html#default_lookaside">compile.html#default_lookaside</a>
+ <a href="compile.html#omit_lookaside">compile.html#omit_lookaside</a>
+ <a href="debugging.html">debugging.html</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>lower &rarr; <a href="faq.html#q18">faq.html#q18</a>
+ <a href="lang_corefunc.html#randomblob">lang_corefunc.html#randomblob</a>
+<li>mailing lists &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+<li>Manual Control Of Query Plans Using SQLITE_STAT Tables &rarr; <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+<li>master journal &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>MATCH &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>matchinfo &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="fts3.html#appendix_a">fts3.html#appendix_a</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="fts3.html#fts4_options">fts3.html#fts4_options</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+ <a href="fts3.html#the_matchinfo_option">fts3.html#the_matchinfo_option</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>matchinfo b flag &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>matchinfo x flag &rarr; <a href="fts3.html#matchinfo-y">fts3.html#matchinfo-y</a>
+<li>matchinfo y flag &rarr; <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="fts3.html#matchinfo-b">fts3.html#matchinfo-b</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+<li>MATERIALIZED &rarr; <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>mathfunc &rarr; <a href="lang_corefunc.html">lang_corefunc.html</a>
+<li>max_agg &rarr; <a href="lang_corefunc.html#max_scalar">lang_corefunc.html#max_scalar</a>
+ <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+ <a href="lang_select.html#bareagg">lang_select.html#bareagg</a>
+<li>max_page_count &rarr; <a href="c3ref/limit.html">c3ref/limit.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="capi3ref.html#sqlite3_limit">capi3ref.html#sqlite3_limit</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+<li>max_scalar &rarr; <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+<li>MC/DC &rarr; <a href="lemon.html">lemon.html</a>
+ <a href="testing.html#tcl">testing.html#tcl</a>
+ <a href="testing.html#tension">testing.html#tension</a>
+ <a href="th3.html">th3.html</a>
+<li>MC/DC testing &rarr; <a href="assert.html">assert.html</a>
+<li>memory &rarr; <a href="lang_attach.html">lang_attach.html</a>
+ <a href="tclsqlite.html">tclsqlite.html</a>
+<li>memory allocation &rarr; <a href="cintro.html">cintro.html</a>
+ <a href="testing.html#memtesting">testing.html#memtesting</a>
+ <a href="testing.html#oomtesting">testing.html#oomtesting</a>
+<li>memory statistics &rarr; <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+<li>memory-mapped I/O &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="fasterthanfs.html">fasterthanfs.html</a>
+ <a href="howtocorrupt.html#fakeusb">howtocorrupt.html#fakeusb</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>memsys2 &rarr; <a href="testing.html#memtesting">testing.html#memtesting</a>
+<li>memsys5 &rarr; <a href="changes.html#version_3_40_1">changes.html#version_3_40_1</a>
+ <a href="changes.html#version_3_6_6">changes.html#version_3_6_6</a>
+ <a href="footprint.html">footprint.html</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+ <a href="releaselog/3_6_6.html">releaselog/3_6_6.html</a>
+<li>merge command &rarr; <a href="fts3.html#*fts4automergecmd">fts3.html#*fts4automergecmd</a>
+<li>microoptimizations &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>min/max optimization &rarr; <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>min_agg &rarr; <a href="lang_corefunc.html#min_scalar">lang_corefunc.html#min_scalar</a>
+ <a href="lang_select.html#bareagg">lang_select.html#bareagg</a>
+<li>mmap_size pragma &rarr; <a href="compile.html#default_mmap_size">compile.html#default_mmap_size</a>
+ <a href="mmap.html">mmap.html</a>
+<li>modeof &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>most used &rarr; <a href="index.html">index.html</a>
+<li>most widely deployed &rarr; <a href="about.html">about.html</a>
+ <a href="appfileformat.html">appfileformat.html</a>
+ <a href="famous.html">famous.html</a>
+ <a href="testing.html#thoughts1">testing.html#thoughts1</a>
+<li>mutation test script &rarr; <a href="testing.html#mutationtests">testing.html#mutationtests</a>
+<li>mutation testing &rarr; <a href="th3.html#muttest">th3.html#muttest</a>
+<li>mxFrame &rarr; <a href="fileformat2.html#walread">fileformat2.html#walread</a>
+ <a href="walformat.html#locks">walformat.html#locks</a>
+ <a href="walformat.html#nbackfill">walformat.html#nbackfill</a>
+ <a href="walformat.html#recovery">walformat.html#recovery</a>
+<li>nBackfill &rarr; <a href="walformat.html#locks">walformat.html#locks</a>
+ <a href="walformat.html#mxframe">walformat.html#mxframe</a>
+ <a href="walformat.html#recovery">walformat.html#recovery</a>
+<li>NEAR queries &rarr; <a href="compile.html#fts3_max_expr_depth">compile.html#fts3_max_expr_depth</a>
+<li>next generation query planner &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="eqp.html">eqp.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="queryplanner.html">queryplanner.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="versionnumbers.html">versionnumbers.html</a>
+<li>Next Generation Query Planner &rarr; <a href="howitworks.html">howitworks.html</a>
+ <a href="optoverview.html">optoverview.html</a>
+<li>NGQP &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="limits.html#max_sql_length">limits.html#max_sql_length</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html">optoverview.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>NOCASE &rarr; <a href="faq.html#q18">faq.html#q18</a>
+<li>non-deterministic functions &rarr; <a href="changes.html#version_3_35_2">changes.html#version_3_35_2</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>NOT MATERIALIZED &rarr; <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>NOT NULL &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="conflict.html">conflict.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>NOT NULL constraint &rarr; <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+ <a href="rescode.html#constraint_notnull">rescode.html#constraint_notnull</a>
+<li>NOT NULL constraints &rarr; <a href="stricttables.html">stricttables.html</a>
+<li>NUL characters in strings &rarr; <a href="quirks.html#dblquote">quirks.html#dblquote</a>
+<li>NULLS FIRST &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>NULLS LAST &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>numeric-literal &rarr; <a href="lang_expr.html#litvalue">lang_expr.html#litvalue</a>
+<li>object resolution &rarr; <a href="lang_dropview.html">lang_dropview.html</a>
+<li>offsets &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="fts3.html#appendix_a">fts3.html#appendix_a</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+<li>omit-left-join optimization &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>omitfeatures &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="changes.html#version_3_1_4">changes.html#version_3_1_4</a>
+ <a href="changes.html#version_3_5_2">changes.html#version_3_5_2</a>
+ <a href="faq.html#q23">faq.html#q23</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_1_4.html">releaselog/3_1_4.html</a>
+ <a href="releaselog/3_5_2.html">releaselog/3_5_2.html</a>
+<li>ON CONFLICT &rarr; <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/c_fail.html">c3ref/c_fail.html</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html#SQLITE_FAIL">capi3ref.html#SQLITE_FAIL</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="capi3ref.html#sqlite3_vtab_on_conflict">capi3ref.html#sqlite3_vtab_on_conflict</a>
+ <a href="capi3ref.html#sqlitevtabconstraintsupport">capi3ref.html#sqlitevtabconstraintsupport</a>
+ <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createtrigger.html#raise">lang_createtrigger.html#raise</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_replace.html">lang_replace.html</a>
+ <a href="lang_transaction.html">lang_transaction.html</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="tempfiles.html#stmtjrnl">tempfiles.html#stmtjrnl</a>
+<li>ON CONFLICT clauses &rarr; <a href="stricttables.html">stricttables.html</a>
+<li>on-disk format &rarr; <a href="stricttables.html">stricttables.html</a>
+<li>opcode definitions &rarr; <a href="opcode.html">opcode.html</a>
+<li>OPEN_NOFOLLOW &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>OpenOffice case study &rarr; <a href="appfileformat.html">appfileformat.html</a>
+<li>optimize command &rarr; <a href="fts3.html#fts4">fts3.html#fts4</a>
+<li>optimize pragma &rarr; <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+<li>optimizer &rarr; <a href="eqp.html">eqp.html</a>
+<li>OR optimization &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_27_1">changes.html#version_3_27_1</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="eqp.html#or-opt">eqp.html#or-opt</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>or optimization &rarr; <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+<li>or-connected-terms &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="eqp.html#or-opt">eqp.html#or-opt</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>ORDER BY &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#values">lang_select.html#values</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+<li>order by &rarr; <a href="lang_createtable.html#createtabas">lang_createtable.html#createtabas</a>
+<li>ordering-term &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>OS backend &rarr; <a href="testing.html#journaltest">testing.html#journaltest</a>
+<li>OSS Fuzz &rarr; <a href="testing.html#fuzzcheck">testing.html#fuzzcheck</a>
+<li>output mode &rarr; <a href="cli.html#dotconn">cli.html#dotconn</a>
+<li>over-clause &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>overflow pages &rarr; <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="compile.html#direct_overflow_read">compile.html#direct_overflow_read</a>
+ <a href="fileformat2.html#btree">fileformat2.html#btree</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>page cache &rarr; <a href="changes.html#version_3_39_4">changes.html#version_3_39_4</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="compile.html#direct_overflow_read">compile.html#direct_overflow_read</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>page_count &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>page_size &rarr; <a href="arch.html">arch.html</a>
+ <a href="lang_vacuum.html">lang_vacuum.html</a>
+ <a href="pgszchng2016.html">pgszchng2016.html</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+<li>page_size pragma &rarr; <a href="lang_vacuum.html">lang_vacuum.html</a>
+ <a href="pgszchng2016.html">pgszchng2016.html</a>
+<li>pagecache memory allocator &rarr; <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheused">c3ref/c_status_malloc_count.html#sqlitestatuspagecacheused</a>
+ <a href="capi3ref.html#sqlitestatuspagecachesize">capi3ref.html#sqlitestatuspagecachesize</a>
+ <a href="capi3ref.html#sqlitestatuspagecacheused">capi3ref.html#sqlitestatuspagecacheused</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+<li>parameter &rarr; <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>
+ <a href="c3ref/c_limit_attached.html#sqlitelimitvariablenumber">c3ref/c_limit_attached.html#sqlitelimitvariablenumber</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="capi3ref.html#sqlite3_bind_blob">capi3ref.html#sqlite3_bind_blob</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlitelimitvariablenumber">capi3ref.html#sqlitelimitvariablenumber</a>
+ <a href="carray.html">carray.html</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="fts3.html#f3tknzr">fts3.html#f3tknzr</a>
+ <a href="limits.html#max_variable_number">limits.html#max_variable_number</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="optoverview.html#rangequery">optoverview.html#rangequery</a>
+<li>parameter binding &rarr; <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="carray.html">carray.html</a>
+<li>parameters &rarr; <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html#sqlite3_get_auxdata">capi3ref.html#sqlite3_get_auxdata</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="datatype3.html#storageclasses">datatype3.html#storageclasses</a>
+ <a href="limits.html#max_sql_length">limits.html#max_sql_length</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>parent key &rarr; <a href="lang_createtable.html#rowid">lang_createtable.html#rowid</a>
+<li>parent table &rarr; <a href="lang_altertable.html#altertabrename">lang_altertable.html#altertabrename</a>
+<li>partial index &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="changes.html#version_3_8_8_3">changes.html#version_3_8_8_3</a>
+ <a href="deterministic.html">deterministic.html</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="fileformat2.html##sqltab">fileformat2.html##sqltab</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_altertable.html#altertabdropcol">lang_altertable.html#altertabdropcol</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_index_list">pragma.html#pragma_index_list</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>partial indexes &rarr; <a href="c3ref/c_deterministic.html#sqlitedeterministic">c3ref/c_deterministic.html#sqlitedeterministic</a>
+ <a href="c3ref/c_deterministic.html#sqlitedirectonly">c3ref/c_deterministic.html#sqlitedirectonly</a>
+ <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a>
+ <a href="capi3ref.html#sqlitedeterministic">capi3ref.html#sqlitedeterministic</a>
+ <a href="capi3ref.html#sqlitedirectonly">capi3ref.html#sqlitedirectonly</a>
+ <a href="capi3ref.html#sqliteinnocuous">capi3ref.html#sqliteinnocuous</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="features.html">features.html</a>
+ <a href="fileformat2.html#stat1tab">fileformat2.html#stat1tab</a>
+ <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a>
+ <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="versionnumbers.html">versionnumbers.html</a>
+<li>partial indices &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>partial sorting by index &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>partition &rarr; <a href="windowfunctions.html#exprrange">windowfunctions.html#exprrange</a>
+ <a href="windowfunctions.html#frameboundary">windowfunctions.html#frameboundary</a>
+<li>patchset &rarr; <a href="session.html#sqlite3_changeset_iter">session.html#sqlite3_changeset_iter</a>
+ <a href="session/changeset_iter.html">session/changeset_iter.html</a>
+<li>patchsets &rarr; <a href="session.html#sqlite3_changegroup">session.html#sqlite3_changegroup</a>
+ <a href="session/changegroup.html">session/changegroup.html</a>
+<li>PENDING lock &rarr; <a href="rescode.html#ioerr_lock">rescode.html#ioerr_lock</a>
+<li>permuted index &rarr; <a href="doclist.html">doclist.html</a>
+ <a href="keyword_index.html">keyword_index.html</a>
+<li>persistent journal mode &rarr; <a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a>
+<li>persistent loadable extensions &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>phrase queries &rarr; <a href="compile.html#fts3_max_expr_depth">compile.html#fts3_max_expr_depth</a>
+<li>pi &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>pointer passing interface &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>pointer passing interfaces &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>pointer value &rarr; <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>
+ <a href="capi3ref.html#sqlite3_value_dup">capi3ref.html#sqlite3_value_dup</a>
+<li>power-safe &rarr; <a href="fasterthanfs.html">fasterthanfs.html</a>
+<li>power-safe transactions &rarr; <a href="fasterthanfs.html">fasterthanfs.html</a>
+<li>powersafe overwrite &rarr; <a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a>
+ <a href="capi3ref.html#coreuriqueryparameters">capi3ref.html#coreuriqueryparameters</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="compile.html#powersafe_overwrite">compile.html#powersafe_overwrite</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+ <a href="uri.html#uripsow">uri.html#uripsow</a>
+<li>PRAGMA &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma</a>
+ <a href="c3ref/limit.html">c3ref/limit.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="capi3ref.html#sqlite3_limit">capi3ref.html#sqlite3_limit</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlitefcntlpragma">capi3ref.html#sqlitefcntlpragma</a>
+ <a href="changes.html#version_3_16_2">changes.html#version_3_16_2</a>
+ <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="compile.html#debug">compile.html#debug</a>
+ <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+ <a href="compile.html#omit_flag_pragmas">compile.html#omit_flag_pragmas</a>
+ <a href="compile.html#omit_pragma">compile.html#omit_pragma</a>
+ <a href="lang_explain.html">lang_explain.html</a>
+ <a href="lang_transaction.html">lang_transaction.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="opcode.html#subprog">opcode.html#subprog</a>
+ <a href="pragma.html#pragma_defer_foreign_keys">pragma.html#pragma_defer_foreign_keys</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="testing.html#crashtesting">testing.html#crashtesting</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>PRAGMA analysis_limit &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="lang_analyze.html#approx">lang_analyze.html#approx</a>
+ <a href="pragma.html#pragma_optimize">pragma.html#pragma_optimize</a>
+ <a href="queryplanner-ng.html#fossilcasestudy">queryplanner-ng.html#fossilcasestudy</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>PRAGMA application_id &rarr; <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot_open">capi3ref.html#sqlite3_snapshot_open</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="fileformat2.html#appid">fileformat2.html#appid</a>
+ <a href="fileformat2.html#database_header">fileformat2.html#database_header</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>PRAGMA auto_vacuum &rarr; <a href="compile.html#default_autovacuum">compile.html#default_autovacuum</a>
+ <a href="compile.html#omit_autovacuum">compile.html#omit_autovacuum</a>
+<li>PRAGMA automatic_index &rarr; <a href="compile.html#default_automatic_index">compile.html#default_automatic_index</a>
+<li>PRAGMA busy_timeout &rarr; <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>
+ <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a>
+ <a href="capi3ref.html#sqlite3_busy_handler">capi3ref.html#sqlite3_busy_handler</a>
+ <a href="capi3ref.html#sqlite3_busy_timeout">capi3ref.html#sqlite3_busy_timeout</a>
+<li>PRAGMA cache_size &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz</a>
+ <a href="c3ref/pcache_methods2.html#thexcachesizepagecachemethod">c3ref/pcache_methods2.html#thexcachesizepagecachemethod</a>
+ <a href="capi3ref.html#sqliteconfigpmasz">capi3ref.html#sqliteconfigpmasz</a>
+ <a href="capi3ref.html#thexcachesizepagecachemethod">capi3ref.html#thexcachesizepagecachemethod</a>
+ <a href="changes.html#version_3_14_1">changes.html#version_3_14_1</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="changes.html#version_3_8_11_1">changes.html#version_3_8_11_1</a>
+ <a href="compile.html#default_cache_size">compile.html#default_cache_size</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_cache_spill">pragma.html#pragma_cache_spill</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>PRAGMA cache_spill &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>PRAGMA case_sensitive_like &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_7_7_1">changes.html#version_3_7_7_1</a>
+ <a href="compile.html#omit_case_sensitive_like_pragma">compile.html#omit_case_sensitive_like_pragma</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_7_7_1.html">releaselog/3_7_7_1.html</a>
+<li>PRAGMA cell_size_check &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+<li>PRAGMA checkpoint_fullfsync &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+<li>PRAGMA compile_options &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>PRAGMA count_changes &rarr; <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+<li>PRAGMA data_store_directory &rarr; <a href="changes.html#version_3_39_3">changes.html#version_3_39_3</a>
+ <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>PRAGMA data_version &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+ <a href="capi3ref.html#sqlitefcntldataversion">capi3ref.html#sqlitefcntldataversion</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>PRAGMA default_cache_size &rarr; <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+<li>PRAGMA defer_foreign_keys &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>PRAGMA empty_result_callbacks &rarr; <a href="changes.html#version_3_23_1">changes.html#version_3_23_1</a>
+ <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>PRAGMA encoding &rarr; <a href="invalidutf.html">invalidutf.html</a>
+<li>PRAGMA foreign_key_check &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+ <a href="pragma.html#pragma_integrity_check">pragma.html#pragma_integrity_check</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>PRAGMA foreign_key_list &rarr; <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+<li>PRAGMA foreign_keys &rarr; <a href="faq.html#q22">faq.html#q22</a>
+ <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="lang_altertable.html#altertabrename">lang_altertable.html#altertabrename</a>
+ <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+ <a href="quirks.html">quirks.html</a>
+<li>PRAGMA full_column_names &rarr; <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+<li>PRAGMA function &rarr; <a href="news.html">news.html</a>
+<li>PRAGMA function_list &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="compile.html#introspection_pragmas">compile.html#introspection_pragmas</a>
+ <a href="compile.html#omit_introspection_pragmas">compile.html#omit_introspection_pragmas</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>PRAGMA functions &rarr; <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>PRAGMA hard_heap_limit &rarr; <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>
+ <a href="capi3ref.html#sqlite3_hard_heap_limit64">capi3ref.html#sqlite3_hard_heap_limit64</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>PRAGMA ignore_check_constraints &rarr; <a href="lang_createtable.html#ckconst">lang_createtable.html#ckconst</a>
+ <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+<li>PRAGMA incremental_vacuum &rarr; <a href="c3ref/data_count.html">c3ref/data_count.html</a>
+ <a href="capi3ref.html#sqlite3_data_count">capi3ref.html#sqlite3_data_count</a>
+ <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>PRAGMA index_info &rarr; <a href="withoutrowid.html#wtu">withoutrowid.html#wtu</a>
+<li>PRAGMA index_xinfo &rarr; <a href="changes.html#version_3_8_9">changes.html#version_3_8_9</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a>
+<li>PRAGMA integrity_check &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="cli.html#selftest">cli.html#selftest</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="fts3.html#*fts4ickcmd">fts3.html#*fts4ickcmd</a>
+ <a href="lang_altertable.html#caution">lang_altertable.html#caution</a>
+ <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+ <a href="mmap.html">mmap.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_quick_check">pragma.html#pragma_quick_check</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="rtree.html#rtreecheck">rtree.html#rtreecheck</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+ <a href="stricttables.html">stricttables.html</a>
+ <a href="testing.html#ioerrtesting">testing.html#ioerrtesting</a>
+<li>PRAGMA journal_mode &rarr; <a href="atomiccommit.html#sprjrnl">atomiccommit.html#sprjrnl</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive</a>
+ <a href="capi3ref.html#sqlitedbconfigdefensive">capi3ref.html#sqlitedbconfigdefensive</a>
+ <a href="changes.html#version_3_6_4">changes.html#version_3_6_4</a>
+ <a href="changes.html#version_3_8_7_1">changes.html#version_3_8_7_1</a>
+ <a href="dbhash.html">dbhash.html</a>
+ <a href="fasterthanfs.html">fasterthanfs.html</a>
+ <a href="fileformat2.html#walindexformat">fileformat2.html#walindexformat</a>
+ <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="lockingv3.html#hot_journals">lockingv3.html#hot_journals</a>
+ <a href="lockingv3.html#writing">lockingv3.html#writing</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a>
+ <a href="releaselog/3_8_7_1.html">releaselog/3_8_7_1.html</a>
+ <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a>
+<li>PRAGMA journal_size_limit &rarr; <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a>
+<li>PRAGMA legacy_alter_table &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable</a>
+ <a href="capi3ref.html#sqlitedbconfiglegacyaltertable">capi3ref.html#sqlitedbconfiglegacyaltertable</a>
+ <a href="changes.html#version_3_25_2">changes.html#version_3_25_2</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="lang_altertable.html#altertabrename">lang_altertable.html#altertabrename</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="vtab.html#xrename">vtab.html#xrename</a>
+<li>PRAGMA legacy_file_format &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="compile.html#default_file_format">compile.html#default_file_format</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>PRAGMA locking_mode &rarr; <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="tempfiles.html#rollbackjrnl">tempfiles.html#rollbackjrnl</a>
+ <a href="tempfiles.html#shmfile">tempfiles.html#shmfile</a>
+ <a href="walformat.html#shm">walformat.html#shm</a>
+<li>PRAGMA mmap_size &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize</a>
+ <a href="capi3ref.html#sqliteconfigmmapsize">capi3ref.html#sqliteconfigmmapsize</a>
+ <a href="capi3ref.html#sqlitefcntlmmapsize">capi3ref.html#sqlitefcntlmmapsize</a>
+ <a href="compile.html#max_mmap_size">compile.html#max_mmap_size</a>
+ <a href="mmap.html">mmap.html</a>
+ <a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+<li>PRAGMA module_list &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="compile.html#introspection_pragmas">compile.html#introspection_pragmas</a>
+ <a href="compile.html#omit_introspection_pragmas">compile.html#omit_introspection_pragmas</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>PRAGMA optimize &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="lang_analyze.html#approx">lang_analyze.html#approx</a>
+ <a href="lang_analyze.html#autoanalyze">lang_analyze.html#autoanalyze</a>
+ <a href="news.html">news.html</a>
+ <a href="pragma.html#pragma_analysis_limit">pragma.html#pragma_analysis_limit</a>
+ <a href="queryplanner-ng.html#fossilcasestudy">queryplanner-ng.html#fossilcasestudy</a>
+ <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>PRAGMA page_count &rarr; <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+<li>PRAGMA page_size &rarr; <a href="compile.html#default_page_size">compile.html#default_page_size</a>
+ <a href="dbhash.html">dbhash.html</a>
+ <a href="pragma.html#pragma_cache_size">pragma.html#pragma_cache_size</a>
+ <a href="psow.html">psow.html</a>
+<li>PRAGMA parser_trace &rarr; <a href="opcode.html#subprog">opcode.html#subprog</a>
+<li>PRAGMA pragma_list &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="compile.html#introspection_pragmas">compile.html#introspection_pragmas</a>
+ <a href="compile.html#omit_introspection_pragmas">compile.html#omit_introspection_pragmas</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>PRAGMA quick_check &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+ <a href="pragma.html#pragma_integrity_check">pragma.html#pragma_integrity_check</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+ <a href="stricttables.html">stricttables.html</a>
+<li>PRAGMA read_uncommitted &rarr; <a href="isolation.html">isolation.html</a>
+<li>PRAGMA recursive_triggers &rarr; <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="limits.html#max_trigger_depth">limits.html#max_trigger_depth</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+<li>PRAGMA reverse_unordered_selects &rarr; <a href="changes.html#version_3_12_2">changes.html#version_3_12_2</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="compile.html#reverse_unordered_selects">compile.html#reverse_unordered_selects</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>PRAGMA schema_version &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive</a>
+ <a href="capi3ref.html#sqlitedbconfigdefensive">capi3ref.html#sqlitedbconfigdefensive</a>
+ <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a>
+ <a href="lang_altertable.html#caution">lang_altertable.html#caution</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+<li>PRAGMA secure_delete &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="lang_vacuum.html">lang_vacuum.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>PRAGMA short_column_names &rarr; <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+<li>PRAGMA shrink_memory &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>PRAGMA soft_heap_limit &rarr; <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>
+ <a href="capi3ref.html#sqlite3_hard_heap_limit64">capi3ref.html#sqlite3_hard_heap_limit64</a>
+<li>PRAGMA stats &rarr; <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+<li>PRAGMA synchronous &rarr; <a href="asyncvfs.html">asyncvfs.html</a>
+ <a href="atomiccommit.html#sprjrnl">atomiccommit.html#sprjrnl</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync</a>
+ <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a>
+ <a href="capi3ref.html#SQLITE_SYNC_DATAONLY">capi3ref.html#SQLITE_SYNC_DATAONLY</a>
+ <a href="capi3ref.html#sqlitefcntlsync">capi3ref.html#sqlitefcntlsync</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="compile.html#default_synchronous">compile.html#default_synchronous</a>
+ <a href="compile.html#default_wal_synchronous">compile.html#default_wal_synchronous</a>
+ <a href="compile.html#extra_durable">compile.html#extra_durable</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="faq.html#q19">faq.html#q19</a>
+ <a href="fasterthanfs.html">fasterthanfs.html</a>
+ <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+<li>PRAGMA table_info &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="gencol.html">gencol.html</a>
+ <a href="pragma.html#pragma_table_xinfo">pragma.html#pragma_table_xinfo</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+ <a href="vtab.html#hiddencol">vtab.html#hiddencol</a>
+ <a href="withoutrowid.html#wtu">withoutrowid.html#wtu</a>
+<li>PRAGMA table_list &rarr; <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>PRAGMA table_xinfo &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="gencol.html">gencol.html</a>
+ <a href="pragma.html#pragma_table_info">pragma.html#pragma_table_info</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="withoutrowid.html#wtu">withoutrowid.html#wtu</a>
+<li>PRAGMA temp_store &rarr; <a href="changes.html#version_3_37_2">changes.html#version_3_37_2</a>
+ <a href="compile.html#temp_store">compile.html#temp_store</a>
+ <a href="howtocorrupt.html#svptbug">howtocorrupt.html#svptbug</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>PRAGMA temp_store_directory &rarr; <a href="changes.html#version_3_39_3">changes.html#version_3_39_3</a>
+ <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="tempfiles.html#tempdir">tempfiles.html#tempdir</a>
+<li>PRAGMA threads &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz</a>
+ <a href="capi3ref.html#sqliteconfigpmasz">capi3ref.html#sqliteconfigpmasz</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="compile.html#sorter_pmasz">compile.html#sorter_pmasz</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>PRAGMA trusted_schema &rarr; <a href="appfunc.html#sec">appfunc.html#sec</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema</a>
+ <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a>
+ <a href="capi3ref.html#sqlitedbconfigtrustedschema">capi3ref.html#sqlitedbconfigtrustedschema</a>
+ <a href="capi3ref.html#sqliteinnocuous">capi3ref.html#sqliteinnocuous</a>
+ <a href="compile.html#trusted_schema">compile.html#trusted_schema</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+ <a href="tclsqlite.html#enable_load_extension">tclsqlite.html#enable_load_extension</a>
+ <a href="tclsqlite.html#function">tclsqlite.html#function</a>
+<li>PRAGMA vdbe_addoptrace &rarr; <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="opcode.html#subprog">opcode.html#subprog</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>PRAGMA vdbe_debug &rarr; <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="opcode.html#subprog">opcode.html#subprog</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>PRAGMA vdbe_listing &rarr; <a href="opcode.html#subprog">opcode.html#subprog</a>
+<li>PRAGMA vdbe_trace &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="opcode.html#subprog">opcode.html#subprog</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>PRAGMA wal_checkpoint &rarr; <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint_v2">capi3ref.html#sqlite3_wal_checkpoint_v2</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>PRAGMA writable_schema &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema">c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema</a>
+ <a href="capi3ref.html#sqlitedbconfigdefensive">capi3ref.html#sqlitedbconfigdefensive</a>
+ <a href="capi3ref.html#sqlitedbconfigwritableschema">capi3ref.html#sqlitedbconfigwritableschema</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="faq.html#q7">faq.html#q7</a>
+ <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="lang_altertable.html#altertabdropcol">lang_altertable.html#altertabdropcol</a>
+ <a href="lang_altertable.html#caution">lang_altertable.html#caution</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="stricttables.html">stricttables.html</a>
+<li>pragma-stmt &rarr; <a href="pragma.html#syntax">pragma.html#syntax</a>
+<li>pragma-value &rarr; <a href="pragma.html#syntax">pragma.html#syntax</a>
+<li>prefix queries &rarr; <a href="fts3.html#fts4order">fts3.html#fts4order</a>
+ <a href="fts3.html#the_prefix_option">fts3.html#the_prefix_option</a>
+<li>prepared statement &rarr; <a href="arch.html">arch.html</a>
+ <a href="bytecodevtab.html">bytecodevtab.html</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a>
+ <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>
+ <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">c3ref/c_config_covering_index_scan.html#sqliteconfigserialized</a>
+ <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">c3ref/c_limit_attached.html#sqlitelimitworkerthreads</a>
+ <a href="c3ref/c_trace.html#sqlitetraceprofile">c3ref/c_trace.html#sqlitetraceprofile</a>
+ <a href="c3ref/c_trace.html#sqlitetracerow">c3ref/c_trace.html#sqlitetracerow</a>
+ <a href="c3ref/c_trace.html#sqlitetracestmt">c3ref/c_trace.html#sqlitetracestmt</a>
+ <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/column_count.html">c3ref/column_count.html</a>
+ <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>
+ <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a>
+ <a href="c3ref/column_name.html">c3ref/column_name.html</a>
+ <a href="c3ref/data_count.html">c3ref/data_count.html</a>
+ <a href="c3ref/db_handle.html">c3ref/db_handle.html</a>
+ <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="c3ref/finalize.html">c3ref/finalize.html</a>
+ <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_count">capi3ref.html#sqlite3_bind_parameter_count</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_name">capi3ref.html#sqlite3_bind_parameter_name</a>
+ <a href="capi3ref.html#sqlite3_busy_handler">capi3ref.html#sqlite3_busy_handler</a>
+ <a href="capi3ref.html#sqlite3_clear_bindings">capi3ref.html#sqlite3_clear_bindings</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_column_count">capi3ref.html#sqlite3_column_count</a>
+ <a href="capi3ref.html#sqlite3_column_database_name">capi3ref.html#sqlite3_column_database_name</a>
+ <a href="capi3ref.html#sqlite3_column_decltype">capi3ref.html#sqlite3_column_decltype</a>
+ <a href="capi3ref.html#sqlite3_column_name">capi3ref.html#sqlite3_column_name</a>
+ <a href="capi3ref.html#sqlite3_data_count">capi3ref.html#sqlite3_data_count</a>
+ <a href="capi3ref.html#sqlite3_db_handle">capi3ref.html#sqlite3_db_handle</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+ <a href="capi3ref.html#sqlite3_finalize">capi3ref.html#sqlite3_finalize</a>
+ <a href="capi3ref.html#sqlite3_next_stmt">capi3ref.html#sqlite3_next_stmt</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_stmt_busy">capi3ref.html#sqlite3_stmt_busy</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="capi3ref.html#sqlite3_stmt_status">capi3ref.html#sqlite3_stmt_status</a>
+ <a href="capi3ref.html#sqliteconfigmultithread">capi3ref.html#sqliteconfigmultithread</a>
+ <a href="capi3ref.html#sqliteconfigserialized">capi3ref.html#sqliteconfigserialized</a>
+ <a href="capi3ref.html#sqlitelimitworkerthreads">capi3ref.html#sqlitelimitworkerthreads</a>
+ <a href="capi3ref.html#sqlitetraceprofile">capi3ref.html#sqlitetraceprofile</a>
+ <a href="capi3ref.html#sqlitetracerow">capi3ref.html#sqlitetracerow</a>
+ <a href="capi3ref.html#sqlitetracestmt">capi3ref.html#sqlitetracestmt</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#default_worker_threads">compile.html#default_worker_threads</a>
+ <a href="compile.html#max_worker_threads">compile.html#max_worker_threads</a>
+ <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="faq.html#q15">faq.html#q15</a>
+ <a href="howitworks.html">howitworks.html</a>
+ <a href="lang_explain.html">lang_explain.html</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="opcode.html">opcode.html</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="pragma.html#pragma_threads">pragma.html#pragma_threads</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="rescode.html#misuse">rescode.html#misuse</a>
+ <a href="rescode.html#schema">rescode.html#schema</a>
+ <a href="stmt.html">stmt.html</a>
+ <a href="vfs.html">vfs.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>prepared statements &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="bytecodevtab.html">bytecodevtab.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">c3ref/c_config_covering_index_scan.html#sqliteconfigserialized</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="capi3ref.html#sqliteconfigmultithread">capi3ref.html#sqliteconfigmultithread</a>
+ <a href="capi3ref.html#sqliteconfigserialized">capi3ref.html#sqliteconfigserialized</a>
+ <a href="changes.html#version_3_6_20">changes.html#version_3_6_20</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#enable_explain_comments">compile.html#enable_explain_comments</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="datatype3.html#storageclasses">datatype3.html#storageclasses</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_20.html">releaselog/3_6_20.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>PRIMARY KEY &rarr; <a href="expridx.html">expridx.html</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="fileformat2.html#intschema">fileformat2.html#intschema</a>
+ <a href="fts5.html">fts5.html</a>
+ <a href="gencol.html">gencol.html</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="rowidtable.html">rowidtable.html</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+<li>PRIMARY KEY constraint &rarr; <a href="optoverview.html#autoindex">optoverview.html#autoindex</a>
+ <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a>
+ <a href="pragma.html#pragma_index_list">pragma.html#pragma_index_list</a>
+ <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a>
+ <a href="rescode.html#constraint_primarykey">rescode.html#constraint_primarykey</a>
+<li>printf &rarr; <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+<li>printf SQL function &rarr; <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>
+ <a href="capi3ref.html#sqlite3_mprintf">capi3ref.html#sqlite3_mprintf</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="security.html">security.html</a>
+<li>professional support &rarr; <a href="about.html">about.html</a>
+ <a href="support.html#prosupport">support.html#prosupport</a>
+<li>protected sqlite3_value &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>
+ <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="capi3ref.html#sqlite3_value_dup">capi3ref.html#sqlite3_value_dup</a>
+ <a href="capi3ref.html#sqlite3_vtab_in_first">capi3ref.html#sqlite3_vtab_in_first</a>
+<li>PSOW &rarr; <a href="atomiccommit.html#hardware">atomiccommit.html#hardware</a>
+<li>public-domain &rarr; <a href="index.html">index.html</a>
+<li>push-down optimization &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="changes.html#version_3_35_4">changes.html#version_3_35_4</a>
+ <a href="lang_with.html#mathint">lang_with.html#mathint</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>Q &rarr; <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>
+ <a href="capi3ref.html#sqlite3_mprintf">capi3ref.html#sqlite3_mprintf</a>
+ <a href="printf.html">printf.html</a>
+<li>q &rarr; <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>
+ <a href="capi3ref.html#sqlite3_mprintf">capi3ref.html#sqlite3_mprintf</a>
+ <a href="printf.html">printf.html</a>
+<li>qbox &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>qualified-table-name &rarr; <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="lang_update.html">lang_update.html</a>
+<li>queries against graphs &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>query flattener &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_30_1">changes.html#version_3_30_1</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>query parameters with special meaning to SQLite &rarr; <a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a>
+ <a href="capi3ref.html#coreuriqueryparameters">capi3ref.html#coreuriqueryparameters</a>
+<li>query planner &rarr; <a href="arch.html">arch.html</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="compile.html#enable_stat4">compile.html#enable_stat4</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="queryplanner-ng.html">queryplanner-ng.html</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+<li>query planner checklist &rarr; <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#crossjoin">optoverview.html#crossjoin</a>
+ <a href="queryplanner-ng.html#hazards">queryplanner-ng.html#hazards</a>
+<li>query planner stability guarantee &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg</a>
+ <a href="capi3ref.html#sqlitedbconfigenableqpsg">capi3ref.html#sqlitedbconfigenableqpsg</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="compile.html#enable_qpsg">compile.html#enable_qpsg</a>
+ <a href="compile.html#enable_stat4">compile.html#enable_stat4</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>query_only pragma &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>quick_check &rarr; <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>quickstart &rarr; <a href="c3ref/intro.html">c3ref/intro.html</a>
+ <a href="capi3ref.html">capi3ref.html</a>
+<li>Quirks &rarr; <a href="omitted.html">omitted.html</a>
+<li>quote SQL function &rarr; <a href="nulinstr.html">nulinstr.html</a>
+ <a href="undoredo.html">undoredo.html</a>
+<li>R-Tree extension &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="changes.html#version_3_8_2">changes.html#version_3_8_2</a>
+ <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="floatingpoint.html">floatingpoint.html</a>
+ <a href="geopoly.html">geopoly.html</a>
+ <a href="geopoly.html#ccw">geopoly.html#ccw</a>
+ <a href="howtocompile.html#dll">howtocompile.html#dll</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="rescode.html#locked_vtab">rescode.html#locked_vtab</a>
+<li>R-Trees &rarr; <a href="fullsql.html">fullsql.html</a>
+ <a href="th3.html">th3.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>RAISE function &rarr; <a href="rescode.html#constraint_trigger">rescode.html#constraint_trigger</a>
+<li>raise-function &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createtrigger.html#raise">lang_createtrigger.html#raise</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>random &rarr; <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqliteinnocuous">capi3ref.html#sqliteinnocuous</a>
+ <a href="deterministic.html">deterministic.html</a>
+ <a href="expridx.html">expridx.html</a>
+ <a href="lang_createindex.html#indexexpr">lang_createindex.html#indexexpr</a>
+<li>randomblob &rarr; <a href="c3ref/c_deterministic.html#sqlitedeterministic">c3ref/c_deterministic.html#sqlitedeterministic</a>
+ <a href="capi3ref.html#sqlitedeterministic">capi3ref.html#sqlitedeterministic</a>
+<li>RANGE n FOLLOWING &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>RANGE n PRECEDING &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="windowfunctions.html#rangetype">windowfunctions.html#rangetype</a>
+<li>RBU &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>RBU Database Contents &rarr; <a href="rbu.html#rbu_updates">rbu.html#rbu_updates</a>
+<li>RBU Database Tables &rarr; <a href="rbu.html#rbu_updates">rbu.html#rbu_updates</a>
+<li>RBU extension &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="compile.html#enable_rbu">compile.html#enable_rbu</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>RBU FTS3/4 Tables &rarr; <a href="rbu.html#database_tables">rbu.html#database_tables</a>
+<li>RBU Update &rarr; <a href="rbu.html">rbu.html</a>
+<li>RBU Vacuum &rarr; <a href="rbu.html">rbu.html</a>
+<li>read-only WAL databases &rarr; <a href="wal.html#advantages">wal.html#advantages</a>
+<li>read_uncommitted &rarr; <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+<li>read_uncommitted pragma &rarr; <a href="isolation.html">isolation.html</a>
+<li>recommended by the US Library of Congress &rarr; <a href="aff_short.html">aff_short.html</a>
+ <a href="appfileformat.html">appfileformat.html</a>
+<li>recommended compile-time option &rarr; <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+<li>recommended compile-time options &rarr; <a href="fasterthanfs.html">fasterthanfs.html</a>
+<li>recommended storage format &rarr; <a href="about.html">about.html</a>
+ <a href="famous.html">famous.html</a>
+ <a href="index.html">index.html</a>
+ <a href="lang_altertable.html#altertableishard">lang_altertable.html#altertableishard</a>
+ <a href="lts.html">lts.html</a>
+ <a href="onefile.html">onefile.html</a>
+<li>record format &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="fileformat2.html#stat4tab">fileformat2.html#stat4tab</a>
+ <a href="opcode.html#codes">opcode.html#codes</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>recovery &rarr; <a href="walformat.html#locks">walformat.html#locks</a>
+<li>recovery extension &rarr; <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+<li>recursive common table expression &rarr; <a href="series.html">series.html</a>
+<li>recursive common table expressions &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>recursive-cte &rarr; <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>
+<li>recursive_triggers pragma &rarr; <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>REGEXP &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_39_1">changes.html#version_3_39_1</a>
+ <a href="cli.html#miscfeatures">cli.html#miscfeatures</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>REINDEX &rarr; <a href="compile.html#omit_reindex">compile.html#omit_reindex</a>
+ <a href="dbhash.html">dbhash.html</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="fts3.html#*fts4rebuidcmd">fts3.html#*fts4rebuidcmd</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="lang_naming.html">lang_naming.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="rescode.html#corrupt_index">rescode.html#corrupt_index</a>
+<li>reindex-stmt &rarr; <a href="lang_reindex.html">lang_reindex.html</a>
+<li>RELEASE &rarr; <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_transaction.html">lang_transaction.html</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>release history &rarr; <a href="versionnumbers.html">versionnumbers.html</a>
+<li>release testing checklists &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>release-stmt &rarr; <a href="lang_savepoint.html">lang_savepoint.html</a>
+<li>relfootprint &rarr; <a href="compile.html">compile.html</a>
+ <a href="compile.html#omitfeatures">compile.html#omitfeatures</a>
+<li>rename column &rarr; <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+<li>rename table &rarr; <a href="lang_altertable.html#caution">lang_altertable.html#caution</a>
+ <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a>
+<li>REPLACE &rarr; <a href="c3ref/changes.html">c3ref/changes.html</a>
+ <a href="capi3ref.html#sqlite3_changes">capi3ref.html#sqlite3_changes</a>
+ <a href="changes.html#version_3_16_2">changes.html#version_3_16_2</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+<li>replace &rarr; <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="invalidutf.html">invalidutf.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>replace SQL function &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>reserve bytes &rarr; <a href="cksumvfs.html">cksumvfs.html</a>
+<li>reset the WAL &rarr; <a href="walformat.html#locks">walformat.html#locks</a>
+ <a href="walformat.html#mxframe">walformat.html#mxframe</a>
+ <a href="walformat.html#nbackfill">walformat.html#nbackfill</a>
+<li>result code &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">c3ref/c_config_covering_index_scan.html#sqliteconfiglog</a>
+ <a href="c3ref/c_fail.html">c3ref/c_fail.html</a>
+ <a href="c3ref/errcode.html">c3ref/errcode.html</a>
+ <a href="capi3ref.html#SQLITE_FAIL">capi3ref.html#SQLITE_FAIL</a>
+ <a href="capi3ref.html#sqlite3_errcode">capi3ref.html#sqlite3_errcode</a>
+ <a href="capi3ref.html#sqliteconfiglog">capi3ref.html#sqliteconfiglog</a>
+<li>result code definitions &rarr; <a href="rescode.html#pve">rescode.html#pve</a>
+<li>result codes &rarr; <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a>
+ <a href="c3ref/intro.html">c3ref/intro.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#SQLITE_ABORT_ROLLBACK">capi3ref.html#SQLITE_ABORT_ROLLBACK</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+<li>result-column &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>RETURNING &rarr; <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="changes.html#version_3_35_4">changes.html#version_3_35_4</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>RETURNING clause &rarr; <a href="lang_delete.html">lang_delete.html</a>
+<li>returning-clause &rarr; <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_update.html">lang_update.html</a>
+<li>reverse_unordered_selects pragma &rarr; <a href="changes.html#version_3_6_12">changes.html#version_3_6_12</a>
+ <a href="releaselog/3_6_12.html">releaselog/3_6_12.html</a>
+<li>RIGHT and FULL OUTER JOIN &rarr; <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>Robson proof &rarr; <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="malloc.html#memsys5">malloc.html#memsys5</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="malloc.html#pagecache">malloc.html#pagecache</a>
+<li>ROLLBACK &rarr; <a href="asyncvfs.html">asyncvfs.html</a>
+ <a href="c3ref/c_txn_none.html#sqlitetxnread">c3ref/c_txn_none.html#sqlitetxnread</a>
+ <a href="c3ref/c_txn_none.html#sqlitetxnwrite">c3ref/c_txn_none.html#sqlitetxnwrite</a>
+ <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>
+ <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_commit_hook">capi3ref.html#sqlite3_commit_hook</a>
+ <a href="capi3ref.html#sqlite3_get_autocommit">capi3ref.html#sqlite3_get_autocommit</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="capi3ref.html#sqlitetxnread">capi3ref.html#sqlitetxnread</a>
+ <a href="capi3ref.html#sqlitetxnwrite">capi3ref.html#sqlitetxnwrite</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="changes.html#version_3_8_7_2">changes.html#version_3_8_7_2</a>
+ <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_savepoint.html">lang_savepoint.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="releaselog/3_8_7_2.html">releaselog/3_8_7_2.html</a>
+ <a href="rescode.html#abort">rescode.html#abort</a>
+ <a href="rescode.html#abort_rollback">rescode.html#abort_rollback</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+<li>rollback journal &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer</a>
+ <a href="capi3ref.html#sqlitefcntljournalpointer">capi3ref.html#sqlitefcntljournalpointer</a>
+ <a href="compile.html#default_journal_size_limit">compile.html#default_journal_size_limit</a>
+ <a href="compile.html#enable_batch_atomic_write">compile.html#enable_batch_atomic_write</a>
+ <a href="errlog.html">errlog.html</a>
+ <a href="news.html">news.html</a>
+ <a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a>
+ <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a>
+ <a href="rescode.html#readonly_dbmoved">rescode.html#readonly_dbmoved</a>
+ <a href="shortnames.html">shortnames.html</a>
+ <a href="shortnames.html#db83corrupt">shortnames.html#db83corrupt</a>
+ <a href="wal.html">wal.html</a>
+<li>rollback-stmt &rarr; <a href="lang_savepoint.html">lang_savepoint.html</a>
+ <a href="lang_transaction.html">lang_transaction.html</a>
+<li>round &rarr; <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+<li>row value &rarr; <a href="changes.html#version_3_15_2">changes.html#version_3_15_2</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_expr.html#in_op">lang_expr.html#in_op</a>
+ <a href="lang_expr.html#subq">lang_expr.html#subq</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>row value IN operator &rarr; <a href="changes.html#version_3_38_1">changes.html#version_3_38_1</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>row values &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="changes.html#version_3_15_1">changes.html#version_3_15_1</a>
+ <a href="changes.html#version_3_16_1">changes.html#version_3_16_1</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>ROWID &rarr; <a href="autoinc.html">autoinc.html</a>
+ <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="c3ref/randomness.html">c3ref/randomness.html</a>
+ <a href="capi3ref.html#sqlite3_last_insert_rowid">capi3ref.html#sqlite3_last_insert_rowid</a>
+ <a href="capi3ref.html#sqlite3_randomness">capi3ref.html#sqlite3_randomness</a>
+ <a href="compile.html#enable_sorter_references">compile.html#enable_sorter_references</a>
+ <a href="gencol.html">gencol.html</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="lang_corefunc.html#last_insert_rowid">lang_corefunc.html#last_insert_rowid</a>
+ <a href="lang_vacuum.html#howvacuumworks">lang_vacuum.html#howvacuumworks</a>
+ <a href="rbu.html#database_tables">rbu.html#database_tables</a>
+ <a href="vtab.html#worid">vtab.html#worid</a>
+<li>rowid &rarr; <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_last_insert_rowid">capi3ref.html#sqlite3_last_insert_rowid</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_table_column_metadata">capi3ref.html#sqlite3_table_column_metadata</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_36_0">changes.html#version_3_36_0</a>
+ <a href="changes.html#version_3_8_7_1">changes.html#version_3_8_7_1</a>
+ <a href="fileformat2.html##sqltab">fileformat2.html##sqltab</a>
+ <a href="fileformat2.html#btypes">fileformat2.html#btypes</a>
+ <a href="fileformat2.html#varint">fileformat2.html#varint</a>
+ <a href="foreignkeys.html#parentchild">foreignkeys.html#parentchild</a>
+ <a href="lang_createtable.html#createtabas">lang_createtable.html#createtabas</a>
+ <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a>
+ <a href="lang_expr.html#in_op">lang_expr.html#in_op</a>
+ <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="optoverview.html#covidx">optoverview.html#covidx</a>
+ <a href="pragma.html#pragma_foreign_key_check">pragma.html#pragma_foreign_key_check</a>
+ <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a>
+ <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a>
+ <a href="queryplanner.html#searching">queryplanner.html#searching</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+ <a href="releaselog/3_8_7_1.html">releaselog/3_8_7_1.html</a>
+ <a href="rescode.html#constraint_rowid">rescode.html#constraint_rowid</a>
+ <a href="rescode.html#mismatch">rescode.html#mismatch</a>
+ <a href="rowidtable.html">rowidtable.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+ <a href="stricttables.html">stricttables.html</a>
+ <a href="vtab.html#xrowid">vtab.html#xrowid</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+ <a href="withoutrowid.html#bene">withoutrowid.html#bene</a>
+<li>rowid table &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="compile.html#enable_preupdate_hook">compile.html#enable_preupdate_hook</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+<li>rowid tables &rarr; <a href="sessionintro.html">sessionintro.html</a>
+ <a href="unionvtab.html">unionvtab.html</a>
+<li>rtree &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="compile.html#enable_rtree">compile.html#enable_rtree</a>
+ <a href="fts5.html#fts5shadowtables">fts5.html#fts5shadowtables</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+<li>RTREE &rarr; <a href="aff_short.html">aff_short.html</a>
+ <a href="amalgamation.html">amalgamation.html</a>
+ <a href="changes.html#version_3_7_13">changes.html#version_3_7_13</a>
+ <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+<li>rtree shadow tables &rarr; <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+<li>rtreecheck &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>rules for determining column affinity &rarr; <a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a>
+<li>Run-Time Loadable Extensions &rarr; <a href="cli.html#dotload">cli.html#dotload</a>
+<li>SAVEPOINT &rarr; <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="changes.html#version_3_12_1">changes.html#version_3_12_1</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_37_2">changes.html#version_3_37_2</a>
+ <a href="changes.html#version_3_6_8">changes.html#version_3_6_8</a>
+ <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="howtocorrupt.html#svptbug">howtocorrupt.html#svptbug</a>
+ <a href="lang_transaction.html">lang_transaction.html</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+ <a href="releaselog/3_6_8.html">releaselog/3_6_8.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="session.html#SQLITE_CHANGESETAPPLY_INVERT">session.html#SQLITE_CHANGESETAPPLY_INVERT</a>
+ <a href="session/c_changesetapply_invert.html">session/c_changesetapply_invert.html</a>
+<li>SAVEPOINT bug &rarr; <a href="changes.html#version_3_37_2">changes.html#version_3_37_2</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>savepoint-stmt &rarr; <a href="lang_savepoint.html">lang_savepoint.html</a>
+<li>scanstatus options &rarr; <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_scanstatus">capi3ref.html#sqlite3_stmt_scanstatus</a>
+<li>schema format &rarr; <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a>
+<li>schema format number &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="compile.html#default_file_format">compile.html#default_file_format</a>
+ <a href="lang_createindex.html#descidx">lang_createindex.html#descidx</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>schema storage &rarr; <a href="schematab.html">schematab.html</a>
+<li>schema_version &rarr; <a href="compile.html#omit_schema_version_pragmas">compile.html#omit_schema_version_pragmas</a>
+<li>schema_version pragma &rarr; <a href="pragma.html#pragma_user_version">pragma.html#pragma_user_version</a>
+<li>search application tips &rarr; <a href="fts3.html#matchinfo-b">fts3.html#matchinfo-b</a>
+<li>secure_delete pragma &rarr; <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="compile.html#secure_delete">compile.html#secure_delete</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+<li>security &rarr; <a href="hirely.html">hirely.html</a>
+<li>segment btree &rarr; <a href="fts3.html#fts4">fts3.html#fts4</a>
+<li>SELECT &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/c_limit_attached.html#sqlitelimitcolumn">c3ref/c_limit_attached.html#sqlitelimitcolumn</a>
+ <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>
+ <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a>
+ <a href="c3ref/column_name.html">c3ref/column_name.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3ref.html#sqlite3_column_database_name">capi3ref.html#sqlite3_column_database_name</a>
+ <a href="capi3ref.html#sqlite3_column_decltype">capi3ref.html#sqlite3_column_decltype</a>
+ <a href="capi3ref.html#sqlite3_column_name">capi3ref.html#sqlite3_column_name</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="capi3ref.html#sqlitelimitcolumn">capi3ref.html#sqlitelimitcolumn</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="compile.html#omit_compound_select">compile.html#omit_compound_select</a>
+ <a href="compile.html#reverse_unordered_selects">compile.html#reverse_unordered_selects</a>
+ <a href="datatype3.html#affcompoundview">datatype3.html#affcompoundview</a>
+ <a href="datatype3.html#affview">datatype3.html#affview</a>
+ <a href="datatype3.html#colrules">datatype3.html#colrules</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_expr.html#cosub">lang_expr.html#cosub</a>
+ <a href="lang_expr.html#subq">lang_expr.html#subq</a>
+ <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="lang_upsert.html#parseambig">lang_upsert.html#parseambig</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="lang_with.html#mathint">lang_with.html#mathint</a>
+ <a href="limits.html#max_compound_select">limits.html#max_compound_select</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html">pragma.html</a>
+ <a href="pragma.html#pragfunc">pragma.html#pragfunc</a>
+ <a href="pragma.html#pragma_full_column_names">pragma.html#pragma_full_column_names</a>
+ <a href="pragma.html#pragma_reverse_unordered_selects">pragma.html#pragma_reverse_unordered_selects</a>
+ <a href="pragma.html#pragma_short_column_names">pragma.html#pragma_short_column_names</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="unionvtab.html">unionvtab.html</a>
+ <a href="vtab.html#hiddencol">vtab.html#hiddencol</a>
+ <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</a>
+<li>SELECT statement &rarr; <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>select-core &rarr; <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+<li>select-stmt &rarr; <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>self-contained &rarr; <a href="index.html">index.html</a>
+<li>serial types &rarr; <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+<li>series &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>server-side database &rarr; <a href="whentouse.html#dbcklst">whentouse.html#dbcklst</a>
+<li>serverless &rarr; <a href="different.html#serverless">different.html#serverless</a>
+ <a href="howitworks.html">howitworks.html</a>
+ <a href="quirks.html">quirks.html</a>
+<li>session &rarr; <a href="amalgamation.html">amalgamation.html</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="compile.html#enable_preupdate_hook">compile.html#enable_preupdate_hook</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session/intro.html">session/intro.html</a>
+ <a href="session/session.html">session/session.html</a>
+<li>session extension &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="compile.html#enable_session">compile.html#enable_session</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="session.html">session.html</a>
+ <a href="session/intro.html">session/intro.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+<li>Session Extension C-language Interface &rarr; <a href="sessionintro.html">sessionintro.html</a>
+<li>shadow tables &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive</a>
+ <a href="capi3ref.html#sqlitedbconfigdefensive">capi3ref.html#sqlitedbconfigdefensive</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_39_4">changes.html#version_3_39_4</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="fileformat2.html#btypes">fileformat2.html#btypes</a>
+ <a href="fts5.html#fts5shadowtables">fts5.html#fts5shadowtables</a>
+ <a href="pragma.html#pragma_table_list">pragma.html#pragma_table_list</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="rtree.html">rtree.html</a>
+ <a href="rtree.html#xshadow">rtree.html#xshadow</a>
+ <a href="vtab.html#xrename">vtab.html#xrename</a>
+<li>shared cache &rarr; <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="changes.html#version_3_7_13">changes.html#version_3_7_13</a>
+ <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="inmemorydb.html#sharedmemdb">inmemorydb.html#sharedmemdb</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="pragma.html#pragma_data_version">pragma.html#pragma_data_version</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+ <a href="rescode.html#locked">rescode.html#locked</a>
+<li>shared cache mode &rarr; <a href="c3ref/backup_finish.html#sqlite3backuppagecount">c3ref/backup_finish.html#sqlite3backuppagecount</a>
+ <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused">c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused</a>
+ <a href="capi3ref.html#sqlite3backuppagecount">capi3ref.html#sqlite3backuppagecount</a>
+ <a href="capi3ref.html#sqlitedbstatusschemaused">capi3ref.html#sqlitedbstatusschemaused</a>
+ <a href="changes.html#version_3_6_17">changes.html#version_3_6_17</a>
+ <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="changes.html#version_3_8_7_3">changes.html#version_3_8_7_3</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="compile.html#omit_shared_cache">compile.html#omit_shared_cache</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_detach.html">lang_detach.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_17.html">releaselog/3_6_17.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="releaselog/3_8_7_3.html">releaselog/3_8_7_3.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="rescode.html#locked_sharedcache">rescode.html#locked_sharedcache</a>
+ <a href="uri.html#uricache">uri.html#uricache</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+<li>shared lock &rarr; <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+<li>shims &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace</a>
+ <a href="capi3ref.html#sqlitefcntltrace">capi3ref.html#sqlitefcntltrace</a>
+<li>shm file &rarr; <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="rescode.html#ioerr_shmsize">rescode.html#ioerr_shmsize</a>
+<li>short filenames &rarr; <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+<li>short_column_names &rarr; <a href="pragma.html#pragma_full_column_names">pragma.html#pragma_full_column_names</a>
+<li>shrink_memory pragma &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>signed-number &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="pragma.html#syntax">pragma.html#syntax</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>simple fts queries &rarr; <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="fts3.html#full_text_index_queries">fts3.html#full_text_index_queries</a>
+ <a href="fts3.html#termprefix">fts3.html#termprefix</a>
+<li>simple SELECT &rarr; <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#limitoffset">lang_select.html#limitoffset</a>
+ <a href="lang_select.html#orderby">lang_select.html#orderby</a>
+<li>simple-function-invocation &rarr; <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+<li>simple-select-stmt &rarr; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+<li>skip-scan &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>skip-scan optimization &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_8_2">changes.html#version_3_8_2</a>
+ <a href="changes.html#version_3_8_4_1">changes.html#version_3_8_4_1</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="fileformat2.html#stat1tab">fileformat2.html#stat1tab</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#where_clause">optoverview.html#where_clause</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>snapshot &rarr; <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot_open">capi3ref.html#sqlite3_snapshot_open</a>
+<li>snippet &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="fts3.html#appendix_a">fts3.html#appendix_a</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+<li>soft_heap_limit pragma &rarr; <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="pragma.html#pragma_hard_heap_limit">pragma.html#pragma_hard_heap_limit</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+<li>solve Sudoku puzzles &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>sort order &rarr; <a href="lang_createindex.html#descidx">lang_createindex.html#descidx</a>
+<li>sorting &rarr; <a href="eqp.html#or-opt">eqp.html#or-opt</a>
+<li>soundex SQL function &rarr; <a href="compile.html#soundex">compile.html#soundex</a>
+<li>spellfix1 &rarr; <a href="changes.html#version_3_11_1">changes.html#version_3_11_1</a>
+ <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>SQL Archive &rarr; <a href="compile.html#have_zlib">compile.html#have_zlib</a>
+<li>SQL fuzzing &rarr; <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+<li>SQL keywords &rarr; <a href="lang.html">lang.html</a>
+<li>SQL Logic Tests &rarr; <a href="qmplan.html">qmplan.html</a>
+<li>SQL parameter &rarr; <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_name">capi3ref.html#sqlite3_bind_parameter_name</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+<li>SQL parameters &rarr; <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_count">capi3ref.html#sqlite3_bind_parameter_count</a>
+<li>sql-stmt &rarr; <a href="lang.html">lang.html</a>
+ <a href="lang_explain.html">lang_explain.html</a>
+<li>sql-stmt-list &rarr; <a href="lang.html">lang.html</a>
+<li>SQLAR &rarr; <a href="index.html">index.html</a>
+<li>sqldiff &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_14_1">changes.html#version_3_14_1</a>
+ <a href="changes.html#version_3_35_2">changes.html#version_3_35_2</a>
+ <a href="rbu.html#sqldiff">rbu.html#sqldiff</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+<li>sqldiff --rbu &rarr; <a href="rbu.html#database_contents">rbu.html#database_contents</a>
+<li>sqldiff.exe &rarr; <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+<li>SQLite amalgamation source file &rarr; <a href="lang_mathfunc.html">lang_mathfunc.html</a>
+<li>SQLite Archive &rarr; <a href="appfileformat.html">appfileformat.html</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="whentouse.html#container">whentouse.html#container</a>
+ <a href="whynotgit.html">whynotgit.html</a>
+<li>SQLite Archive files &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="whentouse.html#container">whentouse.html#container</a>
+<li>SQLite Archive format &rarr; <a href="cli.html#sqlar">cli.html#sqlar</a>
+<li>SQLite Archive smaller than ZIP &rarr; <a href="appfileformat.html">appfileformat.html</a>
+<li>SQLite Consortium &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>SQLite database file format &rarr; <a href="lang_altertable.html#altertableishard">lang_altertable.html#altertableishard</a>
+<li>SQLite extension &rarr; <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="capi3ref.html#sqlite3_auto_extension">capi3ref.html#sqlite3_auto_extension</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+<li>SQLite extensions &rarr; <a href="lang_corefunc.html#load_extension">lang_corefunc.html#load_extension</a>
+<li>SQLite query planner &rarr; <a href="cli.html#expert">cli.html#expert</a>
+ <a href="howitworks.html">howitworks.html</a>
+ <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="queryplanner.html">queryplanner.html</a>
+<li>SQLite Shared-Cache Mode &rarr; <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="capi3ref.html#sqlite3_unlock_notify">capi3ref.html#sqlite3_unlock_notify</a>
+ <a href="pragma.html#pragma_read_uncommitted">pragma.html#pragma_read_uncommitted</a>
+<li>SQLite source code repositories &rarr; <a href="cli.html#fileio">cli.html#fileio</a>
+<li>sqlite3 &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="c3ref/intro.html">c3ref/intro.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+ <a href="tclsqlite.html#trace_v2">tclsqlite.html#trace_v2</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3.exe &rarr; <a href="cves.html#cvetab">cves.html#cvetab</a>
+<li>sqlite3.exe command-line shell &rarr; <a href="sqlar.html#cltools">sqlar.html#cltools</a>
+ <a href="whentouse.html#container">whentouse.html#container</a>
+<li>sqlite3_aggregate_context &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_aggregate_count &rarr; <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+<li>sqlite3_analyzer &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>sqlite3_analyzer.exe &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="dbstat.html">dbstat.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>sqlite3_auto_extension &rarr; <a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a>
+ <a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a>
+ <a href="capi3ref.html#sqlite3_cancel_auto_extension">capi3ref.html#sqlite3_cancel_auto_extension</a>
+ <a href="capi3ref.html#sqlite3_reset_auto_extension">capi3ref.html#sqlite3_reset_auto_extension</a>
+ <a href="changes.html#version_3_6_7">changes.html#version_3_6_7</a>
+ <a href="loadext.html#persist">loadext.html#persist</a>
+ <a href="releaselog/3_6_7.html">releaselog/3_6_7.html</a>
+<li>sqlite3_autovacuum_pages &rarr; <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>sqlite3_backup &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupfinish">c3ref/backup_finish.html#sqlite3backupfinish</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupinit">c3ref/backup_finish.html#sqlite3backupinit</a>
+ <a href="c3ref/backup_finish.html#sqlite3backuppagecount">c3ref/backup_finish.html#sqlite3backuppagecount</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="capi3ref.html#sqlite3backupfinish">capi3ref.html#sqlite3backupfinish</a>
+ <a href="capi3ref.html#sqlite3backupinit">capi3ref.html#sqlite3backupinit</a>
+ <a href="capi3ref.html#sqlite3backuppagecount">capi3ref.html#sqlite3backuppagecount</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="changes.html#version_3_6_14_1">changes.html#version_3_6_14_1</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_14_1.html">releaselog/3_6_14_1.html</a>
+<li>sqlite3_backup_finish &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/backup.html">c3ref/backup.html</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="capi3ref.html#sqlite3_backup">capi3ref.html#sqlite3_backup</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+<li>sqlite3_backup_init &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/backup.html">c3ref/backup.html</a>
+ <a href="capi3ref.html#sqlite3_backup">capi3ref.html#sqlite3_backup</a>
+ <a href="changes.html#version_3_6_11">changes.html#version_3_6_11</a>
+ <a href="releaselog/3_6_11.html">releaselog/3_6_11.html</a>
+<li>sqlite3_backup_pagecount &rarr; <a href="backup.html">backup.html</a>
+<li>sqlite3_backup_remaining &rarr; <a href="backup.html">backup.html</a>
+<li>sqlite3_backup_step &rarr; <a href="backup.html">backup.html</a>
+ <a href="rescode.html#done">rescode.html#done</a>
+<li>sqlite3_bind_blob &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a>
+ <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a>
+ <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>
+ <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a>
+ <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_count">capi3ref.html#sqlite3_bind_parameter_count</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_index">capi3ref.html#sqlite3_bind_parameter_index</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_name">capi3ref.html#sqlite3_bind_parameter_name</a>
+ <a href="capi3ref.html#sqlite3_clear_bindings">capi3ref.html#sqlite3_clear_bindings</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</a>
+ <a href="fts3.html#f3tknzr">fts3.html#f3tknzr</a>
+ <a href="lang_expr.html#varparam">lang_expr.html#varparam</a>
+ <a href="limits.html#max_sql_length">limits.html#max_sql_length</a>
+ <a href="rescode.html#range">rescode.html#range</a>
+<li>sqlite3_bind_blob64 &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>sqlite3_bind_double &rarr; <a href="compile.html#omit_floating_point">compile.html#omit_floating_point</a>
+<li>sqlite3_bind_int &rarr; <a href="arch.html">arch.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cli.html#param">cli.html#param</a>
+<li>sqlite3_bind_parameter_count &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a>
+ <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_index">capi3ref.html#sqlite3_bind_parameter_index</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_name">capi3ref.html#sqlite3_bind_parameter_name</a>
+<li>sqlite3_bind_parameter_index &rarr; <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a>
+ <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_bind_blob">capi3ref.html#sqlite3_bind_blob</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_count">capi3ref.html#sqlite3_bind_parameter_count</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_name">capi3ref.html#sqlite3_bind_parameter_name</a>
+ <a href="lang_expr.html#varparam">lang_expr.html#varparam</a>
+<li>sqlite3_bind_parameter_name &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a>
+ <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_count">capi3ref.html#sqlite3_bind_parameter_count</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_index">capi3ref.html#sqlite3_bind_parameter_index</a>
+ <a href="lang_expr.html#varparam">lang_expr.html#varparam</a>
+<li>sqlite3_bind_pointer &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="bindptr.html#ptrleak">bindptr.html#ptrleak</a>
+ <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="bytecodevtab.html">bytecodevtab.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="carray.html">carray.html</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="fts5.html#extending_fts5">fts5.html#extending_fts5</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>sqlite3_bind_text &rarr; <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="fts3.html#f3tknzr">fts3.html#f3tknzr</a>
+ <a href="fts3.html#limitations">fts3.html#limitations</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+<li>sqlite3_bind_text16 &rarr; <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="compile.html#omit_utf16">compile.html#omit_utf16</a>
+<li>sqlite3_bind_text64 &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>sqlite3_bind_value &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+<li>sqlite3_bind_zeroblob &rarr; <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="changes.html#version_3_4_0">changes.html#version_3_4_0</a>
+ <a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a>
+<li>sqlite3_bind_zeroblob64 &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>sqlite3_blob &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="compile.html#omit_incrblob">compile.html#omit_incrblob</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+<li>sqlite3_blob_bytes &rarr; <a href="c3ref/blob.html">c3ref/blob.html</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>
+ <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="capi3ref.html#sqlite3_blob">capi3ref.html#sqlite3_blob</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_read">capi3ref.html#sqlite3_blob_read</a>
+ <a href="capi3ref.html#sqlite3_blob_reopen">capi3ref.html#sqlite3_blob_reopen</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+<li>sqlite3_blob_close &rarr; <a href="c3ref/blob.html">c3ref/blob.html</a>
+ <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="capi3ref.html#sqlite3_blob">capi3ref.html#sqlite3_blob</a>
+ <a href="capi3ref.html#sqlite3_blob_bytes">capi3ref.html#sqlite3_blob_bytes</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_read">capi3ref.html#sqlite3_blob_read</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+<li>sqlite3_blob_open &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/blob.html">c3ref/blob.html</a>
+ <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a>
+ <a href="c3ref/blob_close.html">c3ref/blob_close.html</a>
+ <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>
+ <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_blob">capi3ref.html#sqlite3_blob</a>
+ <a href="capi3ref.html#sqlite3_blob_bytes">capi3ref.html#sqlite3_blob_bytes</a>
+ <a href="capi3ref.html#sqlite3_blob_close">capi3ref.html#sqlite3_blob_close</a>
+ <a href="capi3ref.html#sqlite3_blob_read">capi3ref.html#sqlite3_blob_read</a>
+ <a href="capi3ref.html#sqlite3_blob_reopen">capi3ref.html#sqlite3_blob_reopen</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="changes.html#version_3_4_0">changes.html#version_3_4_0</a>
+ <a href="lang_corefunc.html#zeroblob">lang_corefunc.html#zeroblob</a>
+ <a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a>
+ <a href="unionvtab.html">unionvtab.html</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+<li>sqlite3_blob_read &rarr; <a href="c3ref/blob.html">c3ref/blob.html</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="capi3ref.html#sqlite3_blob">capi3ref.html#sqlite3_blob</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_reopen">capi3ref.html#sqlite3_blob_reopen</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="changes.html#version_3_8_9">changes.html#version_3_8_9</a>
+ <a href="fasterthanfs.html">fasterthanfs.html</a>
+ <a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a>
+<li>sqlite3_blob_reopen &rarr; <a href="c3ref/blob.html">c3ref/blob.html</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>
+ <a href="capi3ref.html#sqlite3_blob">capi3ref.html#sqlite3_blob</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_reopen">capi3ref.html#sqlite3_blob_reopen</a>
+ <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="compile.html#enable_null_trim">compile.html#enable_null_trim</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+<li>sqlite3_blob_write &rarr; <a href="c3ref/blob.html">c3ref/blob.html</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>
+ <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="capi3ref.html#sqlite3_blob">capi3ref.html#sqlite3_blob</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_read">capi3ref.html#sqlite3_blob_read</a>
+ <a href="capi3ref.html#sqlite3_blob_reopen">capi3ref.html#sqlite3_blob_reopen</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="changes.html#version_3_8_9">changes.html#version_3_8_9</a>
+ <a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a>
+<li>sqlite3_busy_handler &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a>
+ <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>
+ <a href="capi3ref.html#sqlite3_busy_timeout">capi3ref.html#sqlite3_busy_timeout</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint_v2">capi3ref.html#sqlite3_wal_checkpoint_v2</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="faq.html#q5">faq.html#q5</a>
+ <a href="pragma.html#pragma_busy_timeout">pragma.html#pragma_busy_timeout</a>
+ <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+<li>sqlite3_busy_timeout &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="backup.html">backup.html</a>
+ <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_busy_handler">capi3ref.html#sqlite3_busy_handler</a>
+ <a href="faq.html#q5">faq.html#q5</a>
+ <a href="pragma.html#pragma_busy_timeout">pragma.html#pragma_busy_timeout</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+<li>sqlite3_cancel_auto_extension &rarr; <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>
+ <a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a>
+ <a href="capi3ref.html#sqlite3_auto_extension">capi3ref.html#sqlite3_auto_extension</a>
+ <a href="capi3ref.html#sqlite3_cancel_auto_extension">capi3ref.html#sqlite3_cancel_auto_extension</a>
+ <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>sqlite3_carray_bind &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>sqlite3_changegroup &rarr; <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3_changes &rarr; <a href="c3ref/changes.html">c3ref/changes.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_changes">capi3ref.html#sqlite3_changes</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="changes.html#version_3_8_11_1">changes.html#version_3_8_11_1</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="lang_createtrigger.html#instead_of_trigger">lang_createtrigger.html#instead_of_trigger</a>
+ <a href="lang_delete.html#truncateopt">lang_delete.html#truncateopt</a>
+ <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>sqlite3_changes64 &rarr; <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="lang_corefunc.html#changes">lang_corefunc.html#changes</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>sqlite3_clear_bindings &rarr; <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</a>
+<li>sqlite3_close &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqlite3_snapshot_recover">capi3ref.html#sqlite3_snapshot_recover</a>
+ <a href="capi3ref.html#sqlite3_unlock_notify">capi3ref.html#sqlite3_unlock_notify</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="howtocorrupt.html#fork">howtocorrupt.html#fork</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="quickstart.html">quickstart.html</a>
+ <a href="stmt.html">stmt.html</a>
+ <a href="tempfiles.html#tempdb">tempfiles.html#tempdb</a>
+ <a href="wal.html#walfile">wal.html#walfile</a>
+ <a href="walformat.html#locks">walformat.html#locks</a>
+ <a href="walformat.html#shm">walformat.html#shm</a>
+<li>sqlite3_close_v2 &rarr; <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+ <a href="walformat.html#locks">walformat.html#locks</a>
+<li>sqlite3_collation_needed &rarr; <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+<li>sqlite3_collation_needed16 &rarr; <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+<li>sqlite3_column_blob &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="changes.html#version_3_4_0">changes.html#version_3_4_0</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a>
+<li>sqlite3_column_bytes &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="cintro.html">cintro.html</a>
+<li>sqlite3_column_bytes16 &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="cintro.html">cintro.html</a>
+<li>sqlite3_column_count &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/data_count.html">c3ref/data_count.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_data_count">capi3ref.html#sqlite3_data_count</a>
+ <a href="changes.html#version_3_16_2">changes.html#version_3_16_2</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>sqlite3_column_database_name &rarr; <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>
+ <a href="capi3ref.html#sqlite3_column_database_name">capi3ref.html#sqlite3_column_database_name</a>
+ <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_database_name16 &rarr; <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_decltype &rarr; <a href="compile.html#omit_decltype">compile.html#omit_decltype</a>
+<li>sqlite3_column_decltype16 &rarr; <a href="compile.html#omit_decltype">compile.html#omit_decltype</a>
+<li>sqlite3_column_double &rarr; <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#omit_floating_point">compile.html#omit_floating_point</a>
+<li>sqlite3_column_int &rarr; <a href="c3ref/data_count.html">c3ref/data_count.html</a>
+ <a href="capi3ref.html#sqlite3_data_count">capi3ref.html#sqlite3_data_count</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="opcode.html">opcode.html</a>
+ <a href="rescode.html#range">rescode.html#range</a>
+<li>sqlite3_column_int64 &rarr; <a href="cintro.html">cintro.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>sqlite3_column_name &rarr; <a href="c3ref/exec.html">c3ref/exec.html</a>
+ <a href="capi3ref.html#sqlite3_exec">capi3ref.html#sqlite3_exec</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="faq.html#q28">faq.html#q28</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>sqlite3_column_origin_name &rarr; <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_origin_name16 &rarr; <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_table_name &rarr; <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_table_name16 &rarr; <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a>
+<li>sqlite3_column_text &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/exec.html">c3ref/exec.html</a>
+ <a href="c3ref/free_table.html">c3ref/free_table.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_exec">capi3ref.html#sqlite3_exec</a>
+ <a href="capi3ref.html#sqlite3_free_table">capi3ref.html#sqlite3_free_table</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="invalidutf.html">invalidutf.html</a>
+ <a href="opcode.html">opcode.html</a>
+<li>sqlite3_column_text16 &rarr; <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#omit_utf16">compile.html#omit_utf16</a>
+ <a href="invalidutf.html">invalidutf.html</a>
+<li>sqlite3_column_type &rarr; <a href="capi3.html">capi3.html</a>
+ <a href="cintro.html">cintro.html</a>
+<li>sqlite3_column_value &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="cintro.html">cintro.html</a>
+<li>sqlite3_commit_hook &rarr; <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="rescode.html#constraint_commithook">rescode.html#constraint_commithook</a>
+<li>sqlite3_compileoption_get &rarr; <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="compile.html#omit_compileoption_diags">compile.html#omit_compileoption_diags</a>
+ <a href="lang_corefunc.html#sqlite_compileoption_get">lang_corefunc.html#sqlite_compileoption_get</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_compile_options">pragma.html#pragma_compile_options</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+ <a href="th3.html">th3.html</a>
+<li>sqlite3_compileoption_used &rarr; <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="changes.html#version_3_8_10_1">changes.html#version_3_8_10_1</a>
+ <a href="compile.html#omit_compileoption_diags">compile.html#omit_compileoption_diags</a>
+ <a href="lang_corefunc.html#sqlite_compileoption_used">lang_corefunc.html#sqlite_compileoption_used</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+<li>sqlite3_complete &rarr; <a href="arch.html">arch.html</a>
+ <a href="c3ref/complete.html">c3ref/complete.html</a>
+ <a href="capi3ref.html#sqlite3_complete">capi3ref.html#sqlite3_complete</a>
+ <a href="compile.html#omit_complete">compile.html#omit_complete</a>
+<li>sqlite3_complete16 &rarr; <a href="c3ref/complete.html">c3ref/complete.html</a>
+ <a href="capi3ref.html#sqlite3_complete">capi3ref.html#sqlite3_complete</a>
+ <a href="compile.html#omit_complete">compile.html#omit_complete</a>
+<li>sqlite3_config &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex">c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">c3ref/c_config_covering_index_scan.html#sqliteconfigmutex</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">c3ref/c_config_covering_index_scan.html#sqliteconfigserialized</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread</a>
+ <a href="c3ref/db_config.html">c3ref/db_config.html</a>
+ <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>
+ <a href="c3ref/initialize.html">c3ref/initialize.html</a>
+ <a href="c3ref/log.html">c3ref/log.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="c3ref/open.html#urifilenamesinsqlite3open">c3ref/open.html#urifilenamesinsqlite3open</a>
+ <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>
+ <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a>
+ <a href="capi3ref.html#SQLITE_CONFIG_COVERING_INDEX_SCAN">capi3ref.html#SQLITE_CONFIG_COVERING_INDEX_SCAN</a>
+ <a href="capi3ref.html#sqlite3_db_config">capi3ref.html#sqlite3_db_config</a>
+ <a href="capi3ref.html#sqlite3_hard_heap_limit64">capi3ref.html#sqlite3_hard_heap_limit64</a>
+ <a href="capi3ref.html#sqlite3_initialize">capi3ref.html#sqlite3_initialize</a>
+ <a href="capi3ref.html#sqlite3_log">capi3ref.html#sqlite3_log</a>
+ <a href="capi3ref.html#sqlite3_mem_methods">capi3ref.html#sqlite3_mem_methods</a>
+ <a href="capi3ref.html#sqlite3_pcache_methods2">capi3ref.html#sqlite3_pcache_methods2</a>
+ <a href="capi3ref.html#sqlite3_threadsafe">capi3ref.html#sqlite3_threadsafe</a>
+ <a href="capi3ref.html#sqliteconfiggetmutex">capi3ref.html#sqliteconfiggetmutex</a>
+ <a href="capi3ref.html#sqliteconfigmalloc">capi3ref.html#sqliteconfigmalloc</a>
+ <a href="capi3ref.html#sqliteconfigmultithread">capi3ref.html#sqliteconfigmultithread</a>
+ <a href="capi3ref.html#sqliteconfigmutex">capi3ref.html#sqliteconfigmutex</a>
+ <a href="capi3ref.html#sqliteconfigserialized">capi3ref.html#sqliteconfigserialized</a>
+ <a href="capi3ref.html#sqliteconfigsinglethread">capi3ref.html#sqliteconfigsinglethread</a>
+ <a href="capi3ref.html#urifilenamesinsqlite3open">capi3ref.html#urifilenamesinsqlite3open</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#default_lookaside">compile.html#default_lookaside</a>
+ <a href="compile.html#default_memstatus">compile.html#default_memstatus</a>
+ <a href="compile.html#default_mmap_size">compile.html#default_mmap_size</a>
+ <a href="compile.html#enable_memsys3">compile.html#enable_memsys3</a>
+ <a href="compile.html#enable_memsys5">compile.html#enable_memsys5</a>
+ <a href="compile.html#enable_sorter_references">compile.html#enable_sorter_references</a>
+ <a href="compile.html#enable_sqllog">compile.html#enable_sqllog</a>
+ <a href="compile.html#max_memory">compile.html#max_memory</a>
+ <a href="compile.html#memdb_default_maxsize">compile.html#memdb_default_maxsize</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="compile.html#zero_malloc">compile.html#zero_malloc</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="errlog.html">errlog.html</a>
+ <a href="lang_vacuum.html#vacuuminto">lang_vacuum.html#vacuuminto</a>
+ <a href="loadext.html#persist">loadext.html#persist</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="malloc.html#memsys5">malloc.html#memsys5</a>
+ <a href="malloc.html#memsysx">malloc.html#memsysx</a>
+ <a href="malloc.html#pagecache">malloc.html#pagecache</a>
+ <a href="mmap.html">mmap.html</a>
+ <a href="news.html">news.html</a>
+ <a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a>
+ <a href="privatebranch.html">privatebranch.html</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="security.html">security.html</a>
+ <a href="testing.html#oomtesting">testing.html#oomtesting</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+ <a href="uri.html">uri.html</a>
+<li>sqlite3_context &rarr; <a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a>
+ <a href="capi3ref.html#sqlite3_aggregate_context">capi3ref.html#sqlite3_aggregate_context</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_result_subtype">capi3ref.html#sqlite3_result_subtype</a>
+ <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_context_db_handle &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="changes.html#version_3_5_8">changes.html#version_3_5_8</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_5_8.html">releaselog/3_5_8.html</a>
+<li>sqlite3_create_collation &rarr; <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>
+ <a href="capi3ref.html#sqlite3_collation_needed">capi3ref.html#sqlite3_collation_needed</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="datatype3.html#collation">datatype3.html#collation</a>
+ <a href="faq.html#q18">faq.html#q18</a>
+ <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a>
+ <a href="fullsql.html">fullsql.html</a>
+<li>sqlite3_create_collation16 &rarr; <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>
+ <a href="capi3ref.html#sqlite3_collation_needed">capi3ref.html#sqlite3_collation_needed</a>
+<li>sqlite3_create_collation_v2 &rarr; <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>
+ <a href="capi3ref.html#sqlite3_collation_needed">capi3ref.html#sqlite3_collation_needed</a>
+<li>sqlite3_create_filename &rarr; <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a>
+ <a href="capi3ref.html#sqlite3_uri_boolean">capi3ref.html#sqlite3_uri_boolean</a>
+ <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>sqlite3_create_function &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a>
+ <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/user_data.html">c3ref/user_data.html</a>
+ <a href="capi3ref.html#SQLITE_DETERMINISTIC">capi3ref.html#SQLITE_DETERMINISTIC</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_context_db_handle">capi3ref.html#sqlite3_context_db_handle</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_user_data">capi3ref.html#sqlite3_user_data</a>
+ <a href="changes.html#version_3_6_15">changes.html#version_3_6_15</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="faq.html#q18">faq.html#q18</a>
+ <a href="fts3.html#appendix_a">fts3.html#appendix_a</a>
+ <a href="fts3.html#the_compress_and_uncompress_options">fts3.html#the_compress_and_uncompress_options</a>
+ <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_corefunc.html">lang_corefunc.html</a>
+ <a href="lang_corefunc.html#glob">lang_corefunc.html#glob</a>
+ <a href="lang_corefunc.html#like">lang_corefunc.html#like</a>
+ <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="pragma.html#pragma_case_sensitive_like">pragma.html#pragma_case_sensitive_like</a>
+ <a href="releaselog/3_6_15.html">releaselog/3_6_15.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+ <a href="rtree.html#readwrite">rtree.html#readwrite</a>
+<li>sqlite3_create_function16 &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a>
+ <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/user_data.html">c3ref/user_data.html</a>
+ <a href="capi3ref.html#SQLITE_DETERMINISTIC">capi3ref.html#SQLITE_DETERMINISTIC</a>
+ <a href="capi3ref.html#sqlite3_context_db_handle">capi3ref.html#sqlite3_context_db_handle</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_user_data">capi3ref.html#sqlite3_user_data</a>
+<li>sqlite3_create_function_v2 &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a>
+ <a href="capi3ref.html#SQLITE_DETERMINISTIC">capi3ref.html#SQLITE_DETERMINISTIC</a>
+ <a href="changes.html#version_3_7_3">changes.html#version_3_7_3</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="rbu.html#sqldiff">rbu.html#sqldiff</a>
+ <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a>
+<li>sqlite3_create_module &rarr; <a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a>
+ <a href="c3ref/module.html">c3ref/module.html</a>
+ <a href="capi3ref.html#sqlite3_drop_modules">capi3ref.html#sqlite3_drop_modules</a>
+ <a href="capi3ref.html#sqlite3_module">capi3ref.html#sqlite3_module</a>
+ <a href="changes.html#version_3_7_13">changes.html#version_3_7_13</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="lang_createvtab.html">lang_createvtab.html</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+ <a href="rtree.html">rtree.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+<li>sqlite3_create_module_v2 &rarr; <a href="c3ref/module.html">c3ref/module.html</a>
+ <a href="capi3ref.html#sqlite3_module">capi3ref.html#sqlite3_module</a>
+ <a href="changes.html#version_3_7_13">changes.html#version_3_7_13</a>
+ <a href="lang_createvtab.html">lang_createvtab.html</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+ <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+<li>sqlite3_create_window_function &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_data_count &rarr; <a href="c3ref/column_count.html">c3ref/column_count.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html#sqlite3_column_count">capi3ref.html#sqlite3_column_count</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>sqlite3_data_directory &rarr; <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html#sqlite3_win32_set_directory">capi3ref.html#sqlite3_win32_set_directory</a>
+ <a href="pragma.html#pragma_data_store_directory">pragma.html#pragma_data_store_directory</a>
+<li>sqlite3_database_file_object &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>sqlite3_db_cacheflush &rarr; <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>
+ <a href="capi3ref.html#sqlite3_db_cacheflush">capi3ref.html#sqlite3_db_cacheflush</a>
+ <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>sqlite3_db_config &rarr; <a href="appfunc.html#sec">appfunc.html#sec</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside</a>
+ <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside</a>
+ <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="capi3ref.html#SQLITE_DBCONFIG_DEFENSIVE">capi3ref.html#SQLITE_DBCONFIG_DEFENSIVE</a>
+ <a href="capi3ref.html#sqlite3_enable_load_extension">capi3ref.html#sqlite3_enable_load_extension</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+ <a href="capi3ref.html#sqliteconfiglookaside">capi3ref.html#sqliteconfiglookaside</a>
+ <a href="capi3ref.html#sqlitedbconfiglookaside">capi3ref.html#sqlitedbconfiglookaside</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#default_lookaside">compile.html#default_lookaside</a>
+ <a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</a>
+ <a href="compile.html#enable_qpsg">compile.html#enable_qpsg</a>
+ <a href="fts3.html#f3tknzr">fts3.html#f3tknzr</a>
+ <a href="lang_altertable.html#altertabrename">lang_altertable.html#altertabrename</a>
+ <a href="loadext.html">loadext.html</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="news.html">news.html</a>
+ <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a>
+ <a href="pragma.html#pragma_legacy_file_format">pragma.html#pragma_legacy_file_format</a>
+ <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a>
+ <a href="privatebranch.html">privatebranch.html</a>
+ <a href="queryplanner-ng.html#qpstab">queryplanner-ng.html#qpstab</a>
+ <a href="quirks.html#dblquote">quirks.html#dblquote</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+ <a href="tclsqlite.html#config">tclsqlite.html#config</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+<li>sqlite3_db_filename &rarr; <a href="c3ref/filename_database.html">c3ref/filename_database.html</a>
+ <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a>
+ <a href="capi3ref.html#sqlite3_filename_database">capi3ref.html#sqlite3_filename_database</a>
+ <a href="capi3ref.html#sqlite3_uri_boolean">capi3ref.html#sqlite3_uri_boolean</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>sqlite3_db_handle &rarr; <a href="unlock_notify.html">unlock_notify.html</a>
+<li>sqlite3_db_mutex &rarr; <a href="c3ref/errcode.html">c3ref/errcode.html</a>
+ <a href="capi3ref.html#sqlite3_errcode">capi3ref.html#sqlite3_errcode</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+<li>sqlite3_db_name &rarr; <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>sqlite3_db_readonly &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="pragma.html#pragma_query_only">pragma.html#pragma_query_only</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>sqlite3_db_release_memory &rarr; <a href="c3ref/release_memory.html">c3ref/release_memory.html</a>
+ <a href="capi3ref.html#sqlite3_release_memory">capi3ref.html#sqlite3_release_memory</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_shrink_memory">pragma.html#pragma_shrink_memory</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>sqlite3_db_status &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside</a>
+ <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>
+ <a href="c3ref/status.html">c3ref/status.html</a>
+ <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a>
+ <a href="capi3ref.html#SQLITE_DBSTATUS options">capi3ref.html#SQLITE_DBSTATUS options</a>
+ <a href="capi3ref.html#sqlite3_status">capi3ref.html#sqlite3_status</a>
+ <a href="capi3ref.html#sqlite3_stmt_status">capi3ref.html#sqlite3_stmt_status</a>
+ <a href="capi3ref.html#sqlitedbconfiglookaside">capi3ref.html#sqlitedbconfiglookaside</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="changes.html#version_3_7_0">changes.html#version_3_7_0</a>
+ <a href="changes.html#version_3_7_1">changes.html#version_3_7_1</a>
+ <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="memstat.html">memstat.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_defer_foreign_keys">pragma.html#pragma_defer_foreign_keys</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+ <a href="releaselog/3_7_0.html">releaselog/3_7_0.html</a>
+ <a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>sqlite3_declare_vtab &rarr; <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_collation">capi3ref.html#sqlite3_vtab_collation</a>
+ <a href="csv.html">csv.html</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+ <a href="vtab.html#hiddencol">vtab.html#hiddencol</a>
+ <a href="vtab.html#worid">vtab.html#worid</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>sqlite3_deserialize &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize</a>
+ <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit</a>
+ <a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a>
+ <a href="c3ref/db_name.html">c3ref/db_name.html</a>
+ <a href="c3ref/serialize.html">c3ref/serialize.html</a>
+ <a href="capi3ref.html#SQLITE_DESERIALIZE_FREEONCLOSE">capi3ref.html#SQLITE_DESERIALIZE_FREEONCLOSE</a>
+ <a href="capi3ref.html#SQLITE_SERIALIZE_NOCOPY">capi3ref.html#SQLITE_SERIALIZE_NOCOPY</a>
+ <a href="capi3ref.html#sqlite3_db_name">capi3ref.html#sqlite3_db_name</a>
+ <a href="capi3ref.html#sqlite3_serialize">capi3ref.html#sqlite3_serialize</a>
+ <a href="capi3ref.html#sqliteconfigmemdbmaxsize">capi3ref.html#sqliteconfigmemdbmaxsize</a>
+ <a href="capi3ref.html#sqlitefcntlsizelimit">capi3ref.html#sqlitefcntlsizelimit</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_36_0">changes.html#version_3_36_0</a>
+ <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="cli.html#dotopen">cli.html#dotopen</a>
+ <a href="compile.html#enable_deserialize">compile.html#enable_deserialize</a>
+ <a href="compile.html#memdb_default_maxsize">compile.html#memdb_default_maxsize</a>
+ <a href="compile.html#omit_deserialize">compile.html#omit_deserialize</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>sqlite3_drop_modules &rarr; <a href="c3ref/create_module.html">c3ref/create_module.html</a>
+ <a href="capi3ref.html#sqlite3_create_module">capi3ref.html#sqlite3_create_module</a>
+ <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>sqlite3_enable_load_extension &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+ <a href="capi3ref.html#sqlitedbconfigenableloadextension">capi3ref.html#sqlitedbconfigenableloadextension</a>
+ <a href="compile.html#omit_load_extension">compile.html#omit_load_extension</a>
+ <a href="lang_corefunc.html#load_extension">lang_corefunc.html#load_extension</a>
+ <a href="loadext.html">loadext.html</a>
+ <a href="tclsqlite.html#enable_load_extension">tclsqlite.html#enable_load_extension</a>
+<li>sqlite3_enable_shared_cache &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="changes.html#version_3_5_0">changes.html#version_3_5_0</a>
+ <a href="compile.html#omit_shared_cache">compile.html#omit_shared_cache</a>
+ <a href="pragma.html#pragma_read_uncommitted">pragma.html#pragma_read_uncommitted</a>
+ <a href="releaselog/3_5_0.html">releaselog/3_5_0.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+<li>sqlite3_errcode &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupinit">c3ref/backup_finish.html#sqlite3backupinit</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="c3ref/free_table.html">c3ref/free_table.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_db_cacheflush">capi3ref.html#sqlite3_db_cacheflush</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlite3_free_table">capi3ref.html#sqlite3_free_table</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint_v2">capi3ref.html#sqlite3_wal_checkpoint_v2</a>
+ <a href="capi3ref.html#sqlite3backupinit">capi3ref.html#sqlite3backupinit</a>
+<li>sqlite3_errmsg &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupinit">c3ref/backup_finish.html#sqlite3backupinit</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="c3ref/free_table.html">c3ref/free_table.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="capi3ref.html#sqlite3_db_cacheflush">capi3ref.html#sqlite3_db_cacheflush</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlite3_free_table">capi3ref.html#sqlite3_free_table</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint_v2">capi3ref.html#sqlite3_wal_checkpoint_v2</a>
+ <a href="capi3ref.html#sqlite3backupinit">capi3ref.html#sqlite3backupinit</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="rescode.html#constraint">rescode.html#constraint</a>
+<li>sqlite3_errmsg16 &rarr; <a href="c3ref/backup_finish.html#sqlite3backupinit">c3ref/backup_finish.html#sqlite3backupinit</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqlite3backupinit">capi3ref.html#sqlite3backupinit</a>
+ <a href="rescode.html#constraint">rescode.html#constraint</a>
+<li>sqlite3_error_offset &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>sqlite3_errstr &rarr; <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+<li>sqlite3_exec &rarr; <a href="backup.html">backup.html</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase">c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase</a>
+ <a href="c3ref/free_table.html">c3ref/free_table.html</a>
+ <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html#sqlite3_free_table">capi3ref.html#sqlite3_free_table</a>
+ <a href="capi3ref.html#sqlite3_progress_handler">capi3ref.html#sqlite3_progress_handler</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="capi3ref.html#sqlitedbconfigresetdatabase">capi3ref.html#sqlitedbconfigresetdatabase</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cli.html#dotrules">cli.html#dotrules</a>
+ <a href="faq.html#q15">faq.html#q15</a>
+ <a href="lang.html">lang.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_empty_result_callbacks">pragma.html#pragma_empty_result_callbacks</a>
+ <a href="quickstart.html">quickstart.html</a>
+ <a href="rescode.html#abort">rescode.html#abort</a>
+<li>sqlite3_expanded_sql &rarr; <a href="c3ref/c_trace.html#sqlitetracestmt">c3ref/c_trace.html#sqlitetracestmt</a>
+ <a href="capi3ref.html#sqlitetracestmt">capi3ref.html#sqlitetracestmt</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>sqlite3_expired &rarr; <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+<li>sqlite3_extended_errcode &rarr; <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a>
+ <a href="capi3ref.html#SQLITE_ABORT_ROLLBACK">capi3ref.html#SQLITE_ABORT_ROLLBACK</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>sqlite3_extended_result_codes &rarr; <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a>
+ <a href="c3ref/open.html#openexrescode">c3ref/open.html#openexrescode</a>
+ <a href="capi3ref.html#SQLITE_ABORT_ROLLBACK">capi3ref.html#SQLITE_ABORT_ROLLBACK</a>
+ <a href="capi3ref.html#openexrescode">capi3ref.html#openexrescode</a>
+ <a href="rescode.html#pve">rescode.html#pve</a>
+<li>sqlite3_file &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma</a>
+ <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a>
+ <a href="c3ref/file.html">c3ref/file.html</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3_database_file_object">capi3ref.html#sqlite3_database_file_object</a>
+ <a href="capi3ref.html#sqlite3_file">capi3ref.html#sqlite3_file</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlitefcntlbeginatomicwrite">capi3ref.html#sqlitefcntlbeginatomicwrite</a>
+ <a href="capi3ref.html#sqlitefcntlfilepointer">capi3ref.html#sqlitefcntlfilepointer</a>
+ <a href="capi3ref.html#sqlitefcntljournalpointer">capi3ref.html#sqlitefcntljournalpointer</a>
+ <a href="capi3ref.html#sqlitefcntlpragma">capi3ref.html#sqlitefcntlpragma</a>
+ <a href="vfs.html#shim">vfs.html#shim</a>
+<li>sqlite3_file_control &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE">capi3ref.html#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="capi3ref.html#sqliteconfigmemdbmaxsize">capi3ref.html#sqliteconfigmemdbmaxsize</a>
+ <a href="capi3ref.html#sqlitefcntlchunksize">capi3ref.html#sqlitefcntlchunksize</a>
+ <a href="capi3ref.html#sqlitefcntlcommitphasetwo">capi3ref.html#sqlitefcntlcommitphasetwo</a>
+ <a href="capi3ref.html#sqlitefcntlpersistwal">capi3ref.html#sqlitefcntlpersistwal</a>
+ <a href="capi3ref.html#sqlitefcntlpowersafeoverwrite">capi3ref.html#sqlitefcntlpowersafeoverwrite</a>
+ <a href="capi3ref.html#sqlitefcntlsync">capi3ref.html#sqlitefcntlsync</a>
+ <a href="capi3ref.html#sqlitefcntlvfsname">capi3ref.html#sqlitefcntlvfsname</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_7_1">changes.html#version_3_7_1</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="compile.html#enable_batch_atomic_write">compile.html#enable_batch_atomic_write</a>
+ <a href="compile.html#memdb_default_maxsize">compile.html#memdb_default_maxsize</a>
+ <a href="memstat.html">memstat.html</a>
+ <a href="pragma.html">pragma.html</a>
+ <a href="psow.html#tornpage">psow.html#tornpage</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="rescode.html#notfound">rescode.html#notfound</a>
+ <a href="walformat.html#locks">walformat.html#locks</a>
+ <a href="walformat.html#shm">walformat.html#shm</a>
+<li>sqlite3_filename &rarr; <a href="c3ref/filename.html">c3ref/filename.html</a>
+ <a href="capi3ref.html#sqlite3_filename">capi3ref.html#sqlite3_filename</a>
+ <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+<li>sqlite3_filename_database &rarr; <a href="c3ref/create_filename.html">c3ref/create_filename.html</a>
+ <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>
+ <a href="capi3ref.html#sqlite3_create_filename">capi3ref.html#sqlite3_create_filename</a>
+ <a href="capi3ref.html#sqlite3_db_filename">capi3ref.html#sqlite3_db_filename</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>sqlite3_filename_journal &rarr; <a href="c3ref/create_filename.html">c3ref/create_filename.html</a>
+ <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>
+ <a href="capi3ref.html#sqlite3_create_filename">capi3ref.html#sqlite3_create_filename</a>
+ <a href="capi3ref.html#sqlite3_db_filename">capi3ref.html#sqlite3_db_filename</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>sqlite3_filename_wal &rarr; <a href="c3ref/create_filename.html">c3ref/create_filename.html</a>
+ <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>
+ <a href="capi3ref.html#sqlite3_create_filename">capi3ref.html#sqlite3_create_filename</a>
+ <a href="capi3ref.html#sqlite3_db_filename">capi3ref.html#sqlite3_db_filename</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>sqlite3_finalize &rarr; <a href="c3ref/c_prepare_normalize.html#sqlitepreparepersistent">c3ref/c_prepare_normalize.html#sqlitepreparepersistent</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>
+ <a href="c3ref/column_name.html">c3ref/column_name.html</a>
+ <a href="c3ref/exec.html">c3ref/exec.html</a>
+ <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_column_database_name">capi3ref.html#sqlite3_column_database_name</a>
+ <a href="capi3ref.html#sqlite3_column_name">capi3ref.html#sqlite3_column_name</a>
+ <a href="capi3ref.html#sqlite3_exec">capi3ref.html#sqlite3_exec</a>
+ <a href="capi3ref.html#sqlite3_get_auxdata">capi3ref.html#sqlite3_get_auxdata</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="capi3ref.html#sqlitepreparepersistent">capi3ref.html#sqlitepreparepersistent</a>
+ <a href="changes.html#version_3_7_6">changes.html#version_3_7_6</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="opcode.html">opcode.html</a>
+ <a href="pragma.html">pragma.html</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="rescode.html#misuse">rescode.html#misuse</a>
+ <a href="stmt.html">stmt.html</a>
+<li>sqlite3_free &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/data_directory.html">c3ref/data_directory.html</a>
+ <a href="c3ref/deserialize.html">c3ref/deserialize.html</a>
+ <a href="c3ref/exec.html">c3ref/exec.html</a>
+ <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="c3ref/free.html">c3ref/free.html</a>
+ <a href="c3ref/free_table.html">c3ref/free_table.html</a>
+ <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>
+ <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>
+ <a href="c3ref/str_finish.html">c3ref/str_finish.html</a>
+ <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>
+ <a href="c3ref/vtab.html">c3ref/vtab.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html#sqlite3_auto_extension">capi3ref.html#sqlite3_auto_extension</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_data_directory">capi3ref.html#sqlite3_data_directory</a>
+ <a href="capi3ref.html#sqlite3_deserialize">capi3ref.html#sqlite3_deserialize</a>
+ <a href="capi3ref.html#sqlite3_exec">capi3ref.html#sqlite3_exec</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+ <a href="capi3ref.html#sqlite3_free">capi3ref.html#sqlite3_free</a>
+ <a href="capi3ref.html#sqlite3_free_table">capi3ref.html#sqlite3_free_table</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+ <a href="capi3ref.html#sqlite3_memory_highwater">capi3ref.html#sqlite3_memory_highwater</a>
+ <a href="capi3ref.html#sqlite3_mprintf">capi3ref.html#sqlite3_mprintf</a>
+ <a href="capi3ref.html#sqlite3_str_finish">capi3ref.html#sqlite3_str_finish</a>
+ <a href="capi3ref.html#sqlite3_temp_directory">capi3ref.html#sqlite3_temp_directory</a>
+ <a href="capi3ref.html#sqlite3_vtab">capi3ref.html#sqlite3_vtab</a>
+ <a href="capi3ref.html#sqlite3_win32_set_directory">capi3ref.html#sqlite3_win32_set_directory</a>
+ <a href="capi3ref.html#sqlitefcntltempfilename">capi3ref.html#sqlitefcntltempfilename</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="printf.html#percentz">printf.html#percentz</a>
+ <a href="session.html#sqlite3session_changeset">session.html#sqlite3session_changeset</a>
+ <a href="session/sqlite3session_changeset.html">session/sqlite3session_changeset.html</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+<li>sqlite3_free_filename &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>sqlite3_free_table &rarr; <a href="c3ref/free_table.html">c3ref/free_table.html</a>
+ <a href="capi3ref.html#sqlite3_free_table">capi3ref.html#sqlite3_free_table</a>
+ <a href="compile.html#omit_get_table">compile.html#omit_get_table</a>
+<li>sqlite3_get_autocommit &rarr; <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+<li>sqlite3_get_auxdata &rarr; <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+<li>sqlite3_get_table &rarr; <a href="arch.html">arch.html</a>
+ <a href="c3ref/free_table.html">c3ref/free_table.html</a>
+ <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>
+ <a href="capi3ref.html#sqlite3_free_table">capi3ref.html#sqlite3_free_table</a>
+ <a href="capi3ref.html#sqlite3_progress_handler">capi3ref.html#sqlite3_progress_handler</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#omit_get_table">compile.html#omit_get_table</a>
+ <a href="lang.html">lang.html</a>
+<li>sqlite3_global_recover &rarr; <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+<li>sqlite3_hard_heap_limit64 &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus</a>
+ <a href="capi3ref.html#sqliteconfigmemstatus">capi3ref.html#sqliteconfigmemstatus</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="pragma.html#pragma_hard_heap_limit">pragma.html#pragma_hard_heap_limit</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="security.html">security.html</a>
+<li>sqlite3_index_info &rarr; <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a>
+ <a href="c3ref/c_index_scan_unique.html">c3ref/c_index_scan_unique.html</a>
+ <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a>
+ <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>
+ <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>
+ <a href="capi3ref.html#SQLITE_INDEX_CONSTRAINT_EQ">capi3ref.html#SQLITE_INDEX_CONSTRAINT_EQ</a>
+ <a href="capi3ref.html#SQLITE_INDEX_SCAN_UNIQUE">capi3ref.html#SQLITE_INDEX_SCAN_UNIQUE</a>
+ <a href="capi3ref.html#sqlite3_vtab_collation">capi3ref.html#sqlite3_vtab_collation</a>
+ <a href="capi3ref.html#sqlite3_vtab_distinct">capi3ref.html#sqlite3_vtab_distinct</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+ <a href="capi3ref.html#sqlite3_vtab_rhs_value">capi3ref.html#sqlite3_vtab_rhs_value</a>
+ <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_8_2">changes.html#version_3_8_2</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+ <a href="vtab.html#xfilter">vtab.html#xfilter</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>sqlite3_initialize &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/complete.html">c3ref/complete.html</a>
+ <a href="c3ref/config.html">c3ref/config.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="c3ref/pcache_methods2.html#thexinitpagecachemethod">c3ref/pcache_methods2.html#thexinitpagecachemethod</a>
+ <a href="capi3ref.html#sqlite3_complete">capi3ref.html#sqlite3_complete</a>
+ <a href="capi3ref.html#sqlite3_config">capi3ref.html#sqlite3_config</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+ <a href="capi3ref.html#thexinitpagecachemethod">capi3ref.html#thexinitpagecachemethod</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="compile.html#omit_autoinit">compile.html#omit_autoinit</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="loadext.html#persist">loadext.html#persist</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>sqlite3_int64 &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit</a>
+ <a href="c3ref/c_scanstat_est.html#sqlitescanstatnloop">c3ref/c_scanstat_est.html#sqlitescanstatnloop</a>
+ <a href="c3ref/c_scanstat_est.html#sqlitescanstatnvisit">c3ref/c_scanstat_est.html#sqlitescanstatnvisit</a>
+ <a href="capi3ref.html#sqliteconfigmemdbmaxsize">capi3ref.html#sqliteconfigmemdbmaxsize</a>
+ <a href="capi3ref.html#sqlitefcntlsizelimit">capi3ref.html#sqlitefcntlsizelimit</a>
+ <a href="capi3ref.html#sqlitescanstatnloop">capi3ref.html#sqlitescanstatnloop</a>
+ <a href="capi3ref.html#sqlitescanstatnvisit">capi3ref.html#sqlitescanstatnvisit</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_interrupt &rarr; <a href="arch.html">arch.html</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="pragma.html#pragma_optimize">pragma.html#pragma_optimize</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="rescode.html#interrupt">rescode.html#interrupt</a>
+ <a href="security.html">security.html</a>
+ <a href="tclsqlite.html#interrupt">tclsqlite.html#interrupt</a>
+<li>sqlite3_io_methods &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>
+ <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a>
+ <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a>
+ <a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a>
+ <a href="c3ref/c_shm_nlock.html">c3ref/c_shm_nlock.html</a>
+ <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a>
+ <a href="c3ref/file.html">c3ref/file.html</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE">capi3ref.html#SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a>
+ <a href="capi3ref.html#SQLITE_IOCAP_ATOMIC">capi3ref.html#SQLITE_IOCAP_ATOMIC</a>
+ <a href="capi3ref.html#SQLITE_LOCK_EXCLUSIVE">capi3ref.html#SQLITE_LOCK_EXCLUSIVE</a>
+ <a href="capi3ref.html#SQLITE_SHM_EXCLUSIVE">capi3ref.html#SQLITE_SHM_EXCLUSIVE</a>
+ <a href="capi3ref.html#SQLITE_SHM_NLOCK">capi3ref.html#SQLITE_SHM_NLOCK</a>
+ <a href="capi3ref.html#SQLITE_SYNC_DATAONLY">capi3ref.html#SQLITE_SYNC_DATAONLY</a>
+ <a href="capi3ref.html#sqlite3_file">capi3ref.html#sqlite3_file</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+ <a href="compile.html#enable_atomic_write">compile.html#enable_atomic_write</a>
+ <a href="fileformat2.html#walcksm">fileformat2.html#walcksm</a>
+ <a href="mmap.html">mmap.html</a>
+ <a href="rescode.html#ioerr_checkreservedlock">rescode.html#ioerr_checkreservedlock</a>
+ <a href="rescode.html#ioerr_close">rescode.html#ioerr_close</a>
+ <a href="rescode.html#ioerr_mmap">rescode.html#ioerr_mmap</a>
+ <a href="rescode.html#ioerr_rdlock">rescode.html#ioerr_rdlock</a>
+ <a href="rescode.html#ioerr_seek">rescode.html#ioerr_seek</a>
+ <a href="rescode.html#ioerr_shmmap">rescode.html#ioerr_shmmap</a>
+ <a href="rescode.html#ioerr_shmopen">rescode.html#ioerr_shmopen</a>
+ <a href="rescode.html#ioerr_shmsize">rescode.html#ioerr_shmsize</a>
+ <a href="rescode.html#ioerr_unlock">rescode.html#ioerr_unlock</a>
+ <a href="vfs.html#shim">vfs.html#shim</a>
+ <a href="wal.html#noshm">wal.html#noshm</a>
+ <a href="walformat.html#locks">walformat.html#locks</a>
+<li>sqlite3_keyword_check &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="lang_keywords.html">lang_keywords.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>sqlite3_keyword_count &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="lang_keywords.html">lang_keywords.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>sqlite3_keyword_name &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="lang_keywords.html">lang_keywords.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>sqlite3_last_insert_rowid &rarr; <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="capi3ref.html#sqlite3_last_insert_rowid">capi3ref.html#sqlite3_last_insert_rowid</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="faq.html#q1">faq.html#q1</a>
+ <a href="lang_corefunc.html#last_insert_rowid">lang_corefunc.html#last_insert_rowid</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+<li>sqlite3_libversion &rarr; <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>
+ <a href="capi3ref.html#SQLITE_SOURCE_ID">capi3ref.html#SQLITE_SOURCE_ID</a>
+ <a href="lang_corefunc.html#sqlite_version">lang_corefunc.html#sqlite_version</a>
+<li>sqlite3_libversion_number &rarr; <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>
+ <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="capi3ref.html#SQLITE_SOURCE_ID">capi3ref.html#SQLITE_SOURCE_ID</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="versionnumbers.html">versionnumbers.html</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+<li>sqlite3_limit &rarr; <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/limit.html">c3ref/limit.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/str_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html#SQLITE_LIMIT_ATTACHED">capi3ref.html#SQLITE_LIMIT_ATTACHED</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_bind_blob">capi3ref.html#sqlite3_bind_blob</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqlite3_limit">capi3ref.html#sqlite3_limit</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_str_new">capi3ref.html#sqlite3_str_new</a>
+ <a href="changes.html#version_3_39_1">changes.html#version_3_39_1</a>
+ <a href="changes.html#version_3_5_8">changes.html#version_3_5_8</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#max_worker_threads">compile.html#max_worker_threads</a>
+ <a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>
+ <a href="lang_expr.html#varparam">lang_expr.html#varparam</a>
+ <a href="limits.html">limits.html</a>
+ <a href="limits.html#max_attached">limits.html#max_attached</a>
+ <a href="limits.html#max_column">limits.html#max_column</a>
+ <a href="limits.html#max_compound_select">limits.html#max_compound_select</a>
+ <a href="limits.html#max_expr_depth">limits.html#max_expr_depth</a>
+ <a href="limits.html#max_function_arg">limits.html#max_function_arg</a>
+ <a href="limits.html#max_length">limits.html#max_length</a>
+ <a href="limits.html#max_like_pattern_length">limits.html#max_like_pattern_length</a>
+ <a href="limits.html#max_sql_length">limits.html#max_sql_length</a>
+ <a href="limits.html#max_variable_number">limits.html#max_variable_number</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_recursive_triggers">pragma.html#pragma_recursive_triggers</a>
+ <a href="pragma.html#pragma_threads">pragma.html#pragma_threads</a>
+ <a href="privatebranch.html">privatebranch.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="releaselog/3_5_8.html">releaselog/3_5_8.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+ <a href="rescode.html#toobig">rescode.html#toobig</a>
+ <a href="security.html">security.html</a>
+<li>sqlite3_load_extension &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension</a>
+ <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="capi3ref.html#sqlite3_enable_load_extension">capi3ref.html#sqlite3_enable_load_extension</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+ <a href="capi3ref.html#sqlitedbconfigenableloadextension">capi3ref.html#sqlitedbconfigenableloadextension</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="cksumvfs.html">cksumvfs.html</a>
+ <a href="compile.html#omit_load_extension">compile.html#omit_load_extension</a>
+ <a href="csv.html">csv.html</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="lang_corefunc.html#load_extension">lang_corefunc.html#load_extension</a>
+ <a href="loadext.html">loadext.html</a>
+ <a href="loadext.html#persist">loadext.html#persist</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="rescode.html#ok_load_permanently">rescode.html#ok_load_permanently</a>
+<li>sqlite3_log &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">c3ref/c_config_covering_index_scan.html#sqliteconfiglog</a>
+ <a href="c3ref/log.html">c3ref/log.html</a>
+ <a href="capi3ref.html#sqlite3_log">capi3ref.html#sqlite3_log</a>
+ <a href="capi3ref.html#sqliteconfiglog">capi3ref.html#sqliteconfiglog</a>
+ <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="errlog.html">errlog.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+ <a href="rescode.html#notice">rescode.html#notice</a>
+ <a href="rescode.html#notice_recover_rollback">rescode.html#notice_recover_rollback</a>
+ <a href="rescode.html#notice_recover_wal">rescode.html#notice_recover_wal</a>
+ <a href="rescode.html#warning">rescode.html#warning</a>
+ <a href="rescode.html#warning_autoindex">rescode.html#warning_autoindex</a>
+<li>sqlite3_malloc &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatusmallocsize">c3ref/c_status_malloc_count.html#sqlitestatusmallocsize</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">c3ref/c_status_malloc_count.html#sqlitestatusmemoryused</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow">c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow</a>
+ <a href="c3ref/data_directory.html">c3ref/data_directory.html</a>
+ <a href="c3ref/exec.html">c3ref/exec.html</a>
+ <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="c3ref/free.html">c3ref/free.html</a>
+ <a href="c3ref/free_table.html">c3ref/free_table.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html#sqlite3_data_directory">capi3ref.html#sqlite3_data_directory</a>
+ <a href="capi3ref.html#sqlite3_exec">capi3ref.html#sqlite3_exec</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+ <a href="capi3ref.html#sqlite3_free">capi3ref.html#sqlite3_free</a>
+ <a href="capi3ref.html#sqlite3_free_table">capi3ref.html#sqlite3_free_table</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+ <a href="capi3ref.html#sqlite3_mem_methods">capi3ref.html#sqlite3_mem_methods</a>
+ <a href="capi3ref.html#sqlite3_memory_highwater">capi3ref.html#sqlite3_memory_highwater</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_temp_directory">capi3ref.html#sqlite3_temp_directory</a>
+ <a href="capi3ref.html#sqlite3_win32_set_directory">capi3ref.html#sqlite3_win32_set_directory</a>
+ <a href="capi3ref.html#sqliteconfigpagecache">capi3ref.html#sqliteconfigpagecache</a>
+ <a href="capi3ref.html#sqlitedbconfiglookaside">capi3ref.html#sqlitedbconfiglookaside</a>
+ <a href="capi3ref.html#sqlitefcntltempfilename">capi3ref.html#sqlitefcntltempfilename</a>
+ <a href="capi3ref.html#sqlitefcntlvfsname">capi3ref.html#sqlitefcntlvfsname</a>
+ <a href="capi3ref.html#sqlitestatusmallocsize">capi3ref.html#sqlitestatusmallocsize</a>
+ <a href="capi3ref.html#sqlitestatusmemoryused">capi3ref.html#sqlitestatusmemoryused</a>
+ <a href="capi3ref.html#sqlitestatuspagecacheoverflow">capi3ref.html#sqlitestatuspagecacheoverflow</a>
+ <a href="compile.html#default_pcache_initsz">compile.html#default_pcache_initsz</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="malloc.html#memsys5">malloc.html#memsys5</a>
+ <a href="rescode.html#nomem">rescode.html#nomem</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>sqlite3_malloc64 &rarr; <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a>
+ <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>
+ <a href="c3ref/serialize.html">c3ref/serialize.html</a>
+ <a href="c3ref/str_finish.html">c3ref/str_finish.html</a>
+ <a href="capi3ref.html#SQLITE_DESERIALIZE_FREEONCLOSE">capi3ref.html#SQLITE_DESERIALIZE_FREEONCLOSE</a>
+ <a href="capi3ref.html#sqlite3_mprintf">capi3ref.html#sqlite3_mprintf</a>
+ <a href="capi3ref.html#sqlite3_serialize">capi3ref.html#sqlite3_serialize</a>
+ <a href="capi3ref.html#sqlite3_str_finish">capi3ref.html#sqlite3_str_finish</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="compile.html#max_allocation_size">compile.html#max_allocation_size</a>
+ <a href="printf.html">printf.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>sqlite3_mem_methods &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmalloc">c3ref/c_config_covering_index_scan.html#sqliteconfiggetmalloc</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">c3ref/c_status_malloc_count.html#sqlitestatusmemoryused</a>
+ <a href="capi3ref.html#sqliteconfiggetmalloc">capi3ref.html#sqliteconfiggetmalloc</a>
+ <a href="capi3ref.html#sqliteconfigmalloc">capi3ref.html#sqliteconfigmalloc</a>
+ <a href="capi3ref.html#sqlitestatusmemoryused">capi3ref.html#sqlitestatusmemoryused</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="malloc.html#memsysx">malloc.html#memsysx</a>
+<li>sqlite3_memory_alarm &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>sqlite3_memory_highwater &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus</a>
+ <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>
+ <a href="capi3ref.html#sqlite3_memory_highwater">capi3ref.html#sqlite3_memory_highwater</a>
+ <a href="capi3ref.html#sqliteconfigmemstatus">capi3ref.html#sqliteconfigmemstatus</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="compile.html#default_memstatus">compile.html#default_memstatus</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="security.html">security.html</a>
+<li>sqlite3_memory_used &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus</a>
+ <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>
+ <a href="capi3ref.html#sqlite3_memory_highwater">capi3ref.html#sqlite3_memory_highwater</a>
+ <a href="capi3ref.html#sqliteconfigmemstatus">capi3ref.html#sqliteconfigmemstatus</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="compile.html#default_memstatus">compile.html#default_memstatus</a>
+ <a href="compile.html#max_memory">compile.html#max_memory</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>sqlite3_module &rarr; <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#xBegin">vtab.html#xBegin</a>
+ <a href="vtab.html#xcommit">vtab.html#xcommit</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="vtab.html#xrollback">vtab.html#xrollback</a>
+ <a href="vtab.html#xsync">vtab.html#xsync</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>sqlite3_module.xBestIndex &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</a>
+<li>sqlite3_module.xClose &rarr; <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_cursor">capi3ref.html#sqlite3_vtab_cursor</a>
+ <a href="vtab.html#xopen">vtab.html#xopen</a>
+<li>sqlite3_module.xOpen &rarr; <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_cursor">capi3ref.html#sqlite3_vtab_cursor</a>
+ <a href="vtab.html#xclose">vtab.html#xclose</a>
+ <a href="vtab.html#xfilter">vtab.html#xfilter</a>
+<li>sqlite3_module.xRename &rarr; <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a>
+<li>sqlite3_module.xSync &rarr; <a href="vtab.html#xcommit">vtab.html#xcommit</a>
+<li>sqlite3_mprintf &rarr; <a href="arch.html">arch.html</a>
+ <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma</a>
+ <a href="c3ref/vtab.html">c3ref/vtab.html</a>
+ <a href="capi3ref.html#sqlite3_auto_extension">capi3ref.html#sqlite3_auto_extension</a>
+ <a href="capi3ref.html#sqlite3_vtab">capi3ref.html#sqlite3_vtab</a>
+ <a href="capi3ref.html#sqlitefcntlpragma">capi3ref.html#sqlitefcntlpragma</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_5_9">changes.html#version_3_5_9</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="compile.html#omit_autoinit">compile.html#omit_autoinit</a>
+ <a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a>
+ <a href="lang_corefunc.html#format">lang_corefunc.html#format</a>
+ <a href="printf.html">printf.html</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_5_9.html">releaselog/3_5_9.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>sqlite3_msize &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>sqlite3_mutex &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a>
+ <a href="c3ref/mutex.html">c3ref/mutex.html</a>
+ <a href="capi3ref.html#sqlite3_db_mutex">capi3ref.html#sqlite3_db_mutex</a>
+ <a href="capi3ref.html#sqlite3_mutex">capi3ref.html#sqlite3_mutex</a>
+<li>sqlite3_mutex_alloc &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a>
+ <a href="c3ref/mutex.html">c3ref/mutex.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html#SQLITE_MUTEX_FAST">capi3ref.html#SQLITE_MUTEX_FAST</a>
+ <a href="capi3ref.html#sqlite3_mutex">capi3ref.html#sqlite3_mutex</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+ <a href="custombuild.html">custombuild.html</a>
+<li>sqlite3_mutex_enter &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/errcode.html">c3ref/errcode.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html#sqlite3_errcode">capi3ref.html#sqlite3_errcode</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+<li>sqlite3_mutex_free &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+<li>sqlite3_mutex_held &rarr; <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mutex_alloc">capi3ref.html#sqlite3_mutex_alloc</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+ <a href="testing.html#mutextesting">testing.html#mutextesting</a>
+<li>sqlite3_mutex_leave &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/errcode.html">c3ref/errcode.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html#sqlite3_errcode">capi3ref.html#sqlite3_errcode</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+<li>sqlite3_mutex_methods &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex">c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">c3ref/c_config_covering_index_scan.html#sqliteconfigmutex</a>
+ <a href="capi3ref.html#sqliteconfiggetmutex">capi3ref.html#sqliteconfiggetmutex</a>
+ <a href="capi3ref.html#sqliteconfigmutex">capi3ref.html#sqliteconfigmutex</a>
+<li>sqlite3_mutex_notheld &rarr; <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mutex_alloc">capi3ref.html#sqlite3_mutex_alloc</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+ <a href="testing.html#mutextesting">testing.html#mutextesting</a>
+<li>sqlite3_mutex_try &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+<li>sqlite3_next_stmt &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a>
+ <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a>
+ <a href="capi3ref.html#sqlite3_next_stmt">capi3ref.html#sqlite3_next_stmt</a>
+ <a href="capi3ref.html#sqlite3_stmt_busy">capi3ref.html#sqlite3_stmt_busy</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+<li>sqlite3_normalized_sql &rarr; <a href="c3ref/c_prepare_normalize.html#sqlitepreparenormalize">c3ref/c_prepare_normalize.html#sqlitepreparenormalize</a>
+ <a href="capi3ref.html#sqlitepreparenormalize">capi3ref.html#sqlitepreparenormalize</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="compile.html#enable_normalize">compile.html#enable_normalize</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>sqlite3_open &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="backup.html">backup.html</a>
+ <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">c3ref/c_config_covering_index_scan.html#sqliteconfiguri</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="c3ref/initialize.html">c3ref/initialize.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_auto_extension">capi3ref.html#sqlite3_auto_extension</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="capi3ref.html#sqlite3_initialize">capi3ref.html#sqlite3_initialize</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_temp_directory">capi3ref.html#sqlite3_temp_directory</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqliteconfiguri">capi3ref.html#sqliteconfiguri</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cksumvfs.html">cksumvfs.html</a>
+ <a href="cli.html#dotopen">cli.html#dotopen</a>
+ <a href="compile.html#omit_autoinit">compile.html#omit_autoinit</a>
+ <a href="compile.html#omit_memorydb">compile.html#omit_memorydb</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="inmemorydb.html">inmemorydb.html</a>
+ <a href="inmemorydb.html#temp_db">inmemorydb.html#temp_db</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="pragma.html#pragma_encoding">pragma.html#pragma_encoding</a>
+ <a href="quickstart.html">quickstart.html</a>
+ <a href="rescode.html#cantopen_symlink">rescode.html#cantopen_symlink</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+ <a href="shortnames.html">shortnames.html</a>
+ <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+ <a href="uri.html">uri.html</a>
+ <a href="vfs.html">vfs.html</a>
+ <a href="wal.html#walfile">wal.html#walfile</a>
+<li>sqlite3_open16 &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">c3ref/c_config_covering_index_scan.html#sqliteconfiguri</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_auto_extension">capi3ref.html#sqlite3_auto_extension</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqliteconfiguri">capi3ref.html#sqliteconfiguri</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#omit_memorydb">compile.html#omit_memorydb</a>
+ <a href="inmemorydb.html">inmemorydb.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+ <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+ <a href="uri.html">uri.html</a>
+ <a href="vfs.html">vfs.html</a>
+<li>sqlite3_open_v2 &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">c3ref/c_config_covering_index_scan.html#sqliteconfiguri</a>
+ <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="c3ref/open.html#openexrescode">c3ref/open.html#openexrescode</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/system_errno.html">c3ref/system_errno.html</a>
+ <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#SQLITE_OPEN_AUTOPROXY">capi3ref.html#SQLITE_OPEN_AUTOPROXY</a>
+ <a href="capi3ref.html#openexrescode">capi3ref.html#openexrescode</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_auto_extension">capi3ref.html#sqlite3_auto_extension</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_system_errno">capi3ref.html#sqlite3_system_errno</a>
+ <a href="capi3ref.html#sqlite3_temp_directory">capi3ref.html#sqlite3_temp_directory</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqliteconfiguri">capi3ref.html#sqliteconfiguri</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="changes.html#version_3_5_0">changes.html#version_3_5_0</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cksumvfs.html">cksumvfs.html</a>
+ <a href="compile.html#enable_locking_style">compile.html#enable_locking_style</a>
+ <a href="compile.html#omit_memorydb">compile.html#omit_memorydb</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="howtocorrupt.html#posix_close_bug">howtocorrupt.html#posix_close_bug</a>
+ <a href="howtocorrupt.html#stalefd">howtocorrupt.html#stalefd</a>
+ <a href="inmemorydb.html">inmemorydb.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="releaselog/3_5_0.html">releaselog/3_5_0.html</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+ <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+ <a href="uri.html">uri.html</a>
+ <a href="uri.html#urimodeof">uri.html#urimodeof</a>
+ <a href="vfs.html">vfs.html</a>
+<li>sqlite3_os_end &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="compile.html#os_other">compile.html#os_other</a>
+ <a href="custombuild.html">custombuild.html</a>
+<li>sqlite3_os_init &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/config.html">c3ref/config.html</a>
+ <a href="capi3ref.html#sqlite3_config">capi3ref.html#sqlite3_config</a>
+ <a href="compile.html#os_other">compile.html#os_other</a>
+ <a href="custombuild.html">custombuild.html</a>
+<li>sqlite3_pcache &rarr; <a href="c3ref/pcache_methods2.html#thexdestroypagecachemethod">c3ref/pcache_methods2.html#thexdestroypagecachemethod</a>
+ <a href="capi3ref.html#thexdestroypagecachemethod">capi3ref.html#thexdestroypagecachemethod</a>
+<li>sqlite3_pcache_methods2 &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2">c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2</a>
+ <a href="c3ref/pcache.html">c3ref/pcache.html</a>
+ <a href="c3ref/pcache_page.html">c3ref/pcache_page.html</a>
+ <a href="capi3ref.html#sqlite3_pcache">capi3ref.html#sqlite3_pcache</a>
+ <a href="capi3ref.html#sqlite3_pcache_page">capi3ref.html#sqlite3_pcache_page</a>
+ <a href="capi3ref.html#sqliteconfiggetpcache2">capi3ref.html#sqliteconfiggetpcache2</a>
+ <a href="capi3ref.html#sqliteconfigpcache2">capi3ref.html#sqliteconfigpcache2</a>
+ <a href="changes.html#version_3_6_6">changes.html#version_3_6_6</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="pragma.html#pragma_cache_size">pragma.html#pragma_cache_size</a>
+ <a href="releaselog/3_6_6.html">releaselog/3_6_6.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>sqlite3_prepare &rarr; <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cli.html#dotrules">cli.html#dotrules</a>
+ <a href="faq.html#q15">faq.html#q15</a>
+ <a href="lang.html">lang.html</a>
+ <a href="lang_explain.html">lang_explain.html</a>
+ <a href="limits.html#max_sql_length">limits.html#max_sql_length</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="pragma.html">pragma.html</a>
+ <a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a>
+ <a href="pragma.html#pragma_recursive_triggers">pragma.html#pragma_recursive_triggers</a>
+ <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a>
+ <a href="queryplanner-ng.html#qpstab">queryplanner-ng.html#qpstab</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="rescode.html#schema">rescode.html#schema</a>
+ <a href="stmt.html">stmt.html</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+ <a href="vtab.html#obc">vtab.html#obc</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>sqlite3_prepare16 &rarr; <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_name">capi3ref.html#sqlite3_bind_parameter_name</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="compile.html#omit_utf16">compile.html#omit_utf16</a>
+ <a href="lang.html">lang.html</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="rescode.html#schema">rescode.html#schema</a>
+<li>sqlite3_prepare16_v2 &rarr; <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a>
+ <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>
+ <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_index">capi3ref.html#sqlite3_bind_parameter_index</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_name">capi3ref.html#sqlite3_bind_parameter_name</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="lang.html">lang.html</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+<li>sqlite3_prepare16_v3 &rarr; <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a>
+ <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>
+ <a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a>
+ <a href="c3ref/c_prepare_normalize.html#sqlitepreparepersistent">c3ref/c_prepare_normalize.html#sqlitepreparepersistent</a>
+ <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#SQLITE_PREPARE_NORMALIZE">capi3ref.html#SQLITE_PREPARE_NORMALIZE</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_index">capi3ref.html#sqlite3_bind_parameter_index</a>
+ <a href="capi3ref.html#sqlite3_bind_parameter_name">capi3ref.html#sqlite3_bind_parameter_name</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlitepreparepersistent">capi3ref.html#sqlitepreparepersistent</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>sqlite3_prepare_v2 &rarr; <a href="arch.html">arch.html</a>
+ <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>
+ <a href="c3ref/c_limit_attached.html#sqlitelimitvdbeop">c3ref/c_limit_attached.html#sqlitelimitvdbeop</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>
+ <a href="c3ref/db_handle.html">c3ref/db_handle.html</a>
+ <a href="c3ref/exec.html">c3ref/exec.html</a>
+ <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html#sqlite3">capi3ref.html#sqlite3</a>
+ <a href="capi3ref.html#sqlite3_bind_blob">capi3ref.html#sqlite3_bind_blob</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_commit_hook">capi3ref.html#sqlite3_commit_hook</a>
+ <a href="capi3ref.html#sqlite3_db_handle">capi3ref.html#sqlite3_db_handle</a>
+ <a href="capi3ref.html#sqlite3_exec">capi3ref.html#sqlite3_exec</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_progress_handler">capi3ref.html#sqlite3_progress_handler</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="capi3ref.html#sqlitelimitvdbeop">capi3ref.html#sqlitelimitvdbeop</a>
+ <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_5_3">changes.html#version_3_5_3</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="errlog.html">errlog.html</a>
+ <a href="faq.html#q15">faq.html#q15</a>
+ <a href="lang.html">lang.html</a>
+ <a href="lang_comment.html">lang_comment.html</a>
+ <a href="limits.html#max_column">limits.html#max_column</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="news.html">news.html</a>
+ <a href="opcode.html">opcode.html</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_5_3.html">releaselog/3_5_3.html</a>
+ <a href="rescode.html#error_missing_collseq">rescode.html#error_missing_collseq</a>
+ <a href="rescode.html#error_retry">rescode.html#error_retry</a>
+ <a href="rescode.html#schema">rescode.html#schema</a>
+ <a href="rescode.html#toobig">rescode.html#toobig</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+ <a href="vfs.html">vfs.html</a>
+<li>sqlite3_prepare_v3 &rarr; <a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a>
+ <a href="c3ref/c_prepare_normalize.html#sqlitepreparepersistent">c3ref/c_prepare_normalize.html#sqlitepreparepersistent</a>
+ <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#SQLITE_PREPARE_NORMALIZE">capi3ref.html#SQLITE_PREPARE_NORMALIZE</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlitepreparepersistent">capi3ref.html#sqlitepreparepersistent</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>sqlite3_preupdate_blobwrite &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+<li>sqlite3_preupdate_count &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+<li>sqlite3_preupdate_depth &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+<li>sqlite3_preupdate_hook &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="compile.html#enable_preupdate_hook">compile.html#enable_preupdate_hook</a>
+ <a href="session.html#sqlite3session_create">session.html#sqlite3session_create</a>
+ <a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a>
+<li>sqlite3_preupdate_new &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+<li>sqlite3_preupdate_old &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+<li>sqlite3_profile &rarr; <a href="c3ref/c_trace.html#sqlitetraceprofile">c3ref/c_trace.html#sqlitetraceprofile</a>
+ <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>
+ <a href="capi3ref.html#sqlite3_trace_v2">capi3ref.html#sqlite3_trace_v2</a>
+ <a href="capi3ref.html#sqlitetraceprofile">capi3ref.html#sqlitetraceprofile</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="compile.html#omit_trace">compile.html#omit_trace</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>sqlite3_progress_handler &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="compile.html#omit_progress_callback">compile.html#omit_progress_callback</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="security.html">security.html</a>
+<li>sqlite3_randomness &rarr; <a href="changes.html#version_3_5_8">changes.html#version_3_5_8</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_5_8.html">releaselog/3_5_8.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+<li>sqlite3_realloc &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatusmallocsize">c3ref/c_status_malloc_count.html#sqlitestatusmallocsize</a>
+ <a href="c3ref/free.html">c3ref/free.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>
+ <a href="capi3ref.html#sqlite3_free">capi3ref.html#sqlite3_free</a>
+ <a href="capi3ref.html#sqlite3_mem_methods">capi3ref.html#sqlite3_mem_methods</a>
+ <a href="capi3ref.html#sqlite3_memory_highwater">capi3ref.html#sqlite3_memory_highwater</a>
+ <a href="capi3ref.html#sqlitestatusmallocsize">capi3ref.html#sqlitestatusmallocsize</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="rescode.html#nomem">rescode.html#nomem</a>
+<li>sqlite3_realloc64 &rarr; <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a>
+ <a href="capi3ref.html#SQLITE_DESERIALIZE_FREEONCLOSE">capi3ref.html#SQLITE_DESERIALIZE_FREEONCLOSE</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="compile.html#max_allocation_size">compile.html#max_allocation_size</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>sqlite3_release_memory &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a>
+ <a href="capi3ref.html#sqlite3_db_release_memory">capi3ref.html#sqlite3_db_release_memory</a>
+ <a href="changes.html#version_3_5_0">changes.html#version_3_5_0</a>
+ <a href="compile.html#enable_memory_management">compile.html#enable_memory_management</a>
+ <a href="releaselog/3_5_0.html">releaselog/3_5_0.html</a>
+<li>sqlite3_reset &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun</a>
+ <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/finalize.html">c3ref/finalize.html</a>
+ <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_clear_bindings">capi3ref.html#sqlite3_clear_bindings</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_finalize">capi3ref.html#sqlite3_finalize</a>
+ <a href="capi3ref.html#sqlite3_get_auxdata">capi3ref.html#sqlite3_get_auxdata</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="capi3ref.html#sqlite3_stmt_busy">capi3ref.html#sqlite3_stmt_busy</a>
+ <a href="capi3ref.html#sqlitestmtstatusrun">capi3ref.html#sqlitestmtstatusrun</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="opcode.html">opcode.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="stmt.html">stmt.html</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+<li>sqlite3_reset_auto_extension &rarr; <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>
+ <a href="capi3ref.html#sqlite3_auto_extension">capi3ref.html#sqlite3_auto_extension</a>
+<li>sqlite3_result_blob &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="bindptr.html">bindptr.html</a>
+ <a href="c3ref/c_static.html">c3ref/c_static.html</a>
+ <a href="capi3ref.html#SQLITE_STATIC">capi3ref.html#SQLITE_STATIC</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_blob64 &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>sqlite3_result_double &rarr; <a href="compile.html#omit_floating_point">compile.html#omit_floating_point</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_error &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_result_error_code &rarr; <a href="changes.html#version_3_5_6">changes.html#version_3_5_6</a>
+ <a href="releaselog/3_5_6.html">releaselog/3_5_6.html</a>
+<li>sqlite3_result_int &rarr; <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="capi3ref.html#sqlite3_vtab_nochange">capi3ref.html#sqlite3_vtab_nochange</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>sqlite3_result_int64 &rarr; <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_result_null &rarr; <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_pointer &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="bindptr.html#ptrleak">bindptr.html#ptrleak</a>
+ <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="changes.html#version_3_20_1">changes.html#version_3_20_1</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>sqlite3_result_subtype &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a>
+ <a href="capi3ref.html#sqlite3_value_subtype">capi3ref.html#sqlite3_value_subtype</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>sqlite3_result_text &rarr; <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_text16 &rarr; <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_text16be &rarr; <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_text16le &rarr; <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_text64 &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>sqlite3_result_value &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+<li>sqlite3_result_zeroblob &rarr; <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="lang_corefunc.html#zeroblob">lang_corefunc.html#zeroblob</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+<li>sqlite3_result_zeroblob64 &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>sqlite3_rollback_hook &rarr; <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+<li>sqlite3_rtree_query_callback &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>sqlite3_serialize &rarr; <a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a>
+ <a href="c3ref/db_name.html">c3ref/db_name.html</a>
+ <a href="capi3ref.html#SQLITE_SERIALIZE_NOCOPY">capi3ref.html#SQLITE_SERIALIZE_NOCOPY</a>
+ <a href="capi3ref.html#sqlite3_db_name">capi3ref.html#sqlite3_db_name</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_36_0">changes.html#version_3_36_0</a>
+ <a href="compile.html#enable_deserialize">compile.html#enable_deserialize</a>
+ <a href="compile.html#omit_deserialize">compile.html#omit_deserialize</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+<li>sqlite3_set_authorizer &rarr; <a href="arch.html">arch.html</a>
+ <a href="bindptr.html">bindptr.html</a>
+ <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a>
+ <a href="c3ref/c_deny.html">c3ref/c_deny.html</a>
+ <a href="c3ref/c_fail.html">c3ref/c_fail.html</a>
+ <a href="c3ref/limit.html">c3ref/limit.html</a>
+ <a href="capi3ref.html#SQLITE_ALTER_TABLE">capi3ref.html#SQLITE_ALTER_TABLE</a>
+ <a href="capi3ref.html#SQLITE_DENY">capi3ref.html#SQLITE_DENY</a>
+ <a href="capi3ref.html#SQLITE_FAIL">capi3ref.html#SQLITE_FAIL</a>
+ <a href="capi3ref.html#sqlite3_limit">capi3ref.html#sqlite3_limit</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="compile.html#omit_authorization">compile.html#omit_authorization</a>
+ <a href="lang_delete.html#truncateopt">lang_delete.html#truncateopt</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="rescode.html#auth">rescode.html#auth</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="security.html">security.html</a>
+<li>sqlite3_set_auxdata &rarr; <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_39_4">changes.html#version_3_39_4</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>sqlite3_set_last_insert_rowid &rarr; <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="capi3ref.html#sqlite3_last_insert_rowid">capi3ref.html#sqlite3_last_insert_rowid</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>sqlite3_shutdown &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/config.html">c3ref/config.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="c3ref/pcache_methods2.html#thexshutdownpagecachemethod">c3ref/pcache_methods2.html#thexshutdownpagecachemethod</a>
+ <a href="capi3ref.html#sqlite3_config">capi3ref.html#sqlite3_config</a>
+ <a href="capi3ref.html#sqlite3_mem_methods">capi3ref.html#sqlite3_mem_methods</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+ <a href="capi3ref.html#thexshutdownpagecachemethod">capi3ref.html#thexshutdownpagecachemethod</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="changes.html#version_3_6_15">changes.html#version_3_6_15</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+ <a href="releaselog/3_6_15.html">releaselog/3_6_15.html</a>
+<li>sqlite3_sleep &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="backup.html">backup.html</a>
+ <a href="compile.html#usleep">compile.html#usleep</a>
+<li>sqlite3_snapshot &rarr; <a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a>
+ <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot_free">capi3ref.html#sqlite3_snapshot_free</a>
+ <a href="capi3ref.html#sqlite3_snapshot_get">capi3ref.html#sqlite3_snapshot_get</a>
+ <a href="compile.html#enable_snapshot">compile.html#enable_snapshot</a>
+<li>sqlite3_snapshot_cmp &rarr; <a href="c3ref/snapshot.html">c3ref/snapshot.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot">capi3ref.html#sqlite3_snapshot</a>
+ <a href="compile.html#enable_snapshot">compile.html#enable_snapshot</a>
+<li>sqlite3_snapshot_free &rarr; <a href="c3ref/snapshot.html">c3ref/snapshot.html</a>
+ <a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a>
+ <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot">capi3ref.html#sqlite3_snapshot</a>
+ <a href="capi3ref.html#sqlite3_snapshot_free">capi3ref.html#sqlite3_snapshot_free</a>
+ <a href="capi3ref.html#sqlite3_snapshot_get">capi3ref.html#sqlite3_snapshot_get</a>
+ <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="compile.html#enable_snapshot">compile.html#enable_snapshot</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>sqlite3_snapshot_get &rarr; <a href="c3ref/snapshot.html">c3ref/snapshot.html</a>
+ <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot">capi3ref.html#sqlite3_snapshot</a>
+ <a href="capi3ref.html#sqlite3_snapshot_get">capi3ref.html#sqlite3_snapshot_get</a>
+ <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="compile.html#enable_snapshot">compile.html#enable_snapshot</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>sqlite3_snapshot_open &rarr; <a href="c3ref/snapshot.html">c3ref/snapshot.html</a>
+ <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>
+ <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot">capi3ref.html#sqlite3_snapshot</a>
+ <a href="capi3ref.html#sqlite3_snapshot_open">capi3ref.html#sqlite3_snapshot_open</a>
+ <a href="capi3ref.html#sqlite3_snapshot_recover">capi3ref.html#sqlite3_snapshot_recover</a>
+ <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="compile.html#enable_snapshot">compile.html#enable_snapshot</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="rescode.html#error_snapshot">rescode.html#error_snapshot</a>
+<li>sqlite3_snapshot_recover &rarr; <a href="c3ref/snapshot.html">c3ref/snapshot.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot">capi3ref.html#sqlite3_snapshot</a>
+ <a href="compile.html#enable_snapshot">compile.html#enable_snapshot</a>
+<li>sqlite3_snprintf &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">c3ref/c_config_covering_index_scan.html#sqliteconfiglog</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/log.html">c3ref/log.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_log">capi3ref.html#sqlite3_log</a>
+ <a href="capi3ref.html#sqliteconfiglog">capi3ref.html#sqliteconfiglog</a>
+ <a href="changes.html#version_3_4_0">changes.html#version_3_4_0</a>
+ <a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="printf.html">printf.html</a>
+ <a href="printf.html#percentw">printf.html#percentw</a>
+ <a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a>
+<li>sqlite3_soft_heap_limit &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="changes.html#version_3_4_2">changes.html#version_3_4_2</a>
+ <a href="changes.html#version_3_5_0">changes.html#version_3_5_0</a>
+ <a href="changes.html#version_3_7_3">changes.html#version_3_7_3</a>
+ <a href="compile.html#max_memory">compile.html#max_memory</a>
+ <a href="releaselog/3_4_2.html">releaselog/3_4_2.html</a>
+ <a href="releaselog/3_5_0.html">releaselog/3_5_0.html</a>
+ <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a>
+<li>sqlite3_soft_heap_limit64 &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus</a>
+ <a href="c3ref/soft_heap_limit.html">c3ref/soft_heap_limit.html</a>
+ <a href="capi3ref.html#sqlite3_soft_heap_limit">capi3ref.html#sqlite3_soft_heap_limit</a>
+ <a href="capi3ref.html#sqliteconfigmemstatus">capi3ref.html#sqliteconfigmemstatus</a>
+ <a href="changes.html#version_3_7_3">changes.html#version_3_7_3</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_soft_heap_limit">pragma.html#pragma_soft_heap_limit</a>
+ <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a>
+<li>sqlite3_sourceid &rarr; <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>
+ <a href="capi3ref.html#SQLITE_SOURCE_ID">capi3ref.html#SQLITE_SOURCE_ID</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="lang_corefunc.html#sqlite_source_id">lang_corefunc.html#sqlite_source_id</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="th3.html">th3.html</a>
+<li>sqlite3_status &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatusmallocsize">c3ref/c_status_malloc_count.html#sqlitestatusmallocsize</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize</a>
+ <a href="c3ref/db_status.html">c3ref/db_status.html</a>
+ <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a>
+ <a href="capi3ref.html#SQLITE_STATUS_MALLOC_COUNT">capi3ref.html#SQLITE_STATUS_MALLOC_COUNT</a>
+ <a href="capi3ref.html#sqlite3_db_status">capi3ref.html#sqlite3_db_status</a>
+ <a href="capi3ref.html#sqlite3_stmt_status">capi3ref.html#sqlite3_stmt_status</a>
+ <a href="capi3ref.html#sqlitestatusmallocsize">capi3ref.html#sqlitestatusmallocsize</a>
+ <a href="capi3ref.html#sqlitestatuspagecachesize">capi3ref.html#sqlitestatuspagecachesize</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="compile.html#yytrackmaxstackdepth">compile.html#yytrackmaxstackdepth</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+<li>sqlite3_status64 &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus</a>
+ <a href="capi3ref.html#sqliteconfigmemstatus">capi3ref.html#sqliteconfigmemstatus</a>
+ <a href="changes.html#version_3_8_9">changes.html#version_3_8_9</a>
+ <a href="compile.html#default_memstatus">compile.html#default_memstatus</a>
+ <a href="compile.html#max_memory">compile.html#max_memory</a>
+ <a href="memstat.html">memstat.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>sqlite3_step &rarr; <a href="arch.html">arch.html</a>
+ <a href="backup.html">backup.html</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a>
+ <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>
+ <a href="c3ref/column_name.html">c3ref/column_name.html</a>
+ <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>
+ <a href="c3ref/data_count.html">c3ref/data_count.html</a>
+ <a href="c3ref/exec.html">c3ref/exec.html</a>
+ <a href="c3ref/finalize.html">c3ref/finalize.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/profile.html">c3ref/profile.html</a>
+ <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>
+ <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/stmt.html">c3ref/stmt.html</a>
+ <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a>
+ <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3.html">capi3.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_busy_timeout">capi3ref.html#sqlite3_busy_timeout</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_column_database_name">capi3ref.html#sqlite3_column_database_name</a>
+ <a href="capi3ref.html#sqlite3_column_name">capi3ref.html#sqlite3_column_name</a>
+ <a href="capi3ref.html#sqlite3_commit_hook">capi3ref.html#sqlite3_commit_hook</a>
+ <a href="capi3ref.html#sqlite3_data_count">capi3ref.html#sqlite3_data_count</a>
+ <a href="capi3ref.html#sqlite3_exec">capi3ref.html#sqlite3_exec</a>
+ <a href="capi3ref.html#sqlite3_finalize">capi3ref.html#sqlite3_finalize</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_profile">capi3ref.html#sqlite3_profile</a>
+ <a href="capi3ref.html#sqlite3_progress_handler">capi3ref.html#sqlite3_progress_handler</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_stmt">capi3ref.html#sqlite3_stmt</a>
+ <a href="capi3ref.html#sqlite3_stmt_busy">capi3ref.html#sqlite3_stmt_busy</a>
+ <a href="capi3ref.html#sqlite3_unlock_notify">capi3ref.html#sqlite3_unlock_notify</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="capi3ref.html#sqlitestmtstatusrun">capi3ref.html#sqlitestmtstatusrun</a>
+ <a href="changes.html#version_3_5_3">changes.html#version_3_5_3</a>
+ <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a>
+ <a href="eqp.html">eqp.html</a>
+ <a href="errlog.html">errlog.html</a>
+ <a href="faq.html#q15">faq.html#q15</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_corefunc.html#likelihood">lang_corefunc.html#likelihood</a>
+ <a href="lang_corefunc.html#likely">lang_corefunc.html#likely</a>
+ <a href="lang_corefunc.html#unlikely">lang_corefunc.html#unlikely</a>
+ <a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a>
+ <a href="lang_explain.html">lang_explain.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="opcode.html">opcode.html</a>
+ <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+ <a href="pragma.html">pragma.html</a>
+ <a href="releaselog/3_5_3.html">releaselog/3_5_3.html</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="rescode.html#done">rescode.html#done</a>
+ <a href="rescode.html#row">rescode.html#row</a>
+ <a href="rescode.html#schema">rescode.html#schema</a>
+ <a href="stmt.html">stmt.html</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+ <a href="vfs.html">vfs.html</a>
+<li>sqlite3_stmt &rarr; <a href="arch.html">arch.html</a>
+ <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/intro.html">c3ref/intro.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_bind_blob">capi3ref.html#sqlite3_bind_blob</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="tclsqlite.html#trace_v2">tclsqlite.html#trace_v2</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+<li>sqlite3_stmt_busy &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>sqlite3_stmt_isexplain &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_31_1">changes.html#version_3_31_1</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>sqlite3_stmt_readonly &rarr; <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+<li>sqlite3_stmt_scanstatus &rarr; <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a>
+ <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a>
+ <a href="capi3ref.html#SQLITE_SCANSTAT_EST">capi3ref.html#SQLITE_SCANSTAT_EST</a>
+ <a href="capi3ref.html#sqlite3_stmt_scanstatus_reset">capi3ref.html#sqlite3_stmt_scanstatus_reset</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="compile.html#enable_stmt_scanstatus">compile.html#enable_stmt_scanstatus</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>sqlite3_stmt_scanstatus_reset &rarr; <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_scanstatus">capi3ref.html#sqlite3_stmt_scanstatus</a>
+<li>sqlite3_stmt_status &rarr; <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a>
+ <a href="c3ref/db_status.html">c3ref/db_status.html</a>
+ <a href="capi3ref.html#SQLITE_STMTSTATUS counter">capi3ref.html#SQLITE_STMTSTATUS counter</a>
+ <a href="capi3ref.html#sqlite3_db_status">capi3ref.html#sqlite3_db_status</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_6_4">changes.html#version_3_6_4</a>
+ <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="tclsqlite.html#status">tclsqlite.html#status</a>
+<li>sqlite3_str &rarr; <a href="c3ref/str_append.html">c3ref/str_append.html</a>
+ <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>
+ <a href="c3ref/str_finish.html">c3ref/str_finish.html</a>
+ <a href="c3ref/str_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+ <a href="capi3ref.html#sqlite3_str_errcode">capi3ref.html#sqlite3_str_errcode</a>
+ <a href="capi3ref.html#sqlite3_str_finish">capi3ref.html#sqlite3_str_finish</a>
+ <a href="capi3ref.html#sqlite3_str_new">capi3ref.html#sqlite3_str_new</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>sqlite3_str_append &rarr; <a href="c3ref/str_append.html">c3ref/str_append.html</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+<li>sqlite3_str_appendall &rarr; <a href="c3ref/str_append.html">c3ref/str_append.html</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+<li>sqlite3_str_appendchar &rarr; <a href="c3ref/str_append.html">c3ref/str_append.html</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+<li>sqlite3_str_appendf &rarr; <a href="c3ref/str.html">c3ref/str.html</a>
+ <a href="c3ref/str_append.html">c3ref/str_append.html</a>
+ <a href="capi3ref.html#sqlite3_str">capi3ref.html#sqlite3_str</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+ <a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a>
+ <a href="printf.html">printf.html</a>
+<li>sqlite3_str_errcode &rarr; <a href="c3ref/str_append.html">c3ref/str_append.html</a>
+ <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>
+ <a href="c3ref/str_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+ <a href="capi3ref.html#sqlite3_str_errcode">capi3ref.html#sqlite3_str_errcode</a>
+ <a href="capi3ref.html#sqlite3_str_new">capi3ref.html#sqlite3_str_new</a>
+<li>sqlite3_str_finish &rarr; <a href="c3ref/str.html">c3ref/str.html</a>
+ <a href="c3ref/str_finish.html">c3ref/str_finish.html</a>
+ <a href="c3ref/str_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html#sqlite3_str">capi3ref.html#sqlite3_str</a>
+ <a href="capi3ref.html#sqlite3_str_finish">capi3ref.html#sqlite3_str_finish</a>
+ <a href="capi3ref.html#sqlite3_str_new">capi3ref.html#sqlite3_str_new</a>
+<li>sqlite3_str_length &rarr; <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>
+ <a href="c3ref/str_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html#sqlite3_str_errcode">capi3ref.html#sqlite3_str_errcode</a>
+ <a href="capi3ref.html#sqlite3_str_new">capi3ref.html#sqlite3_str_new</a>
+<li>sqlite3_str_new &rarr; <a href="c3ref/str.html">c3ref/str.html</a>
+ <a href="c3ref/str_append.html">c3ref/str_append.html</a>
+ <a href="c3ref/str_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html#sqlite3_str">capi3ref.html#sqlite3_str</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+ <a href="capi3ref.html#sqlite3_str_new">capi3ref.html#sqlite3_str_new</a>
+<li>sqlite3_str_reset &rarr; <a href="c3ref/str_append.html">c3ref/str_append.html</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+<li>sqlite3_str_value &rarr; <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>
+ <a href="capi3ref.html#sqlite3_str_errcode">capi3ref.html#sqlite3_str_errcode</a>
+<li>sqlite3_str_vappendf &rarr; <a href="c3ref/str_append.html">c3ref/str_append.html</a>
+ <a href="capi3ref.html#sqlite3_str_append">capi3ref.html#sqlite3_str_append</a>
+ <a href="printf.html">printf.html</a>
+<li>sqlite3_strglob &rarr; <a href="c3ref/strglob.html">c3ref/strglob.html</a>
+ <a href="c3ref/strlike.html">c3ref/strlike.html</a>
+ <a href="capi3ref.html#sqlite3_strglob">capi3ref.html#sqlite3_strglob</a>
+ <a href="capi3ref.html#sqlite3_strlike">capi3ref.html#sqlite3_strlike</a>
+ <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>sqlite3_stricmp &rarr; <a href="c3ref/strglob.html">c3ref/strglob.html</a>
+ <a href="c3ref/stricmp.html">c3ref/stricmp.html</a>
+ <a href="c3ref/strlike.html">c3ref/strlike.html</a>
+ <a href="capi3ref.html#sqlite3_strglob">capi3ref.html#sqlite3_strglob</a>
+ <a href="capi3ref.html#sqlite3_stricmp">capi3ref.html#sqlite3_stricmp</a>
+ <a href="capi3ref.html#sqlite3_strlike">capi3ref.html#sqlite3_strlike</a>
+ <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+<li>sqlite3_strlike &rarr; <a href="c3ref/strglob.html">c3ref/strglob.html</a>
+ <a href="c3ref/strlike.html">c3ref/strlike.html</a>
+ <a href="capi3ref.html#sqlite3_strglob">capi3ref.html#sqlite3_strglob</a>
+ <a href="capi3ref.html#sqlite3_strlike">capi3ref.html#sqlite3_strlike</a>
+ <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="compile.html#like_doesnt_match_blobs">compile.html#like_doesnt_match_blobs</a>
+ <a href="pragma.html#pragma_case_sensitive_like">pragma.html#pragma_case_sensitive_like</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+<li>sqlite3_strnicmp &rarr; <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="c3ref/strglob.html">c3ref/strglob.html</a>
+ <a href="c3ref/stricmp.html">c3ref/stricmp.html</a>
+ <a href="c3ref/strlike.html">c3ref/strlike.html</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+ <a href="capi3ref.html#sqlite3_strglob">capi3ref.html#sqlite3_strglob</a>
+ <a href="capi3ref.html#sqlite3_stricmp">capi3ref.html#sqlite3_stricmp</a>
+ <a href="capi3ref.html#sqlite3_strlike">capi3ref.html#sqlite3_strlike</a>
+ <a href="changes.html#version_3_6_17">changes.html#version_3_6_17</a>
+ <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="datatype3.html#collation">datatype3.html#collation</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_17.html">releaselog/3_6_17.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+<li>sqlite3_system_errno &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>sqlite3_table_column_metadata &rarr; <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>sqlite3_temp_directory &rarr; <a href="c3ref/open.html#urifilenameexamples">c3ref/open.html#urifilenameexamples</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html#sqlite3_win32_set_directory">capi3ref.html#sqlite3_win32_set_directory</a>
+ <a href="capi3ref.html#urifilenameexamples">capi3ref.html#urifilenameexamples</a>
+ <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="pragma.html#pragma_temp_store_directory">pragma.html#pragma_temp_store_directory</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="tempfiles.html#tempdir">tempfiles.html#tempdir</a>
+<li>sqlite3_test_control &rarr; <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a>
+ <a href="capi3ref.html#SQLITE_TESTCTRL_ALWAYS">capi3ref.html#SQLITE_TESTCTRL_ALWAYS</a>
+ <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="compile.html#untestable">compile.html#untestable</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+ <a href="testing.html#defcode">testing.html#defcode</a>
+ <a href="testing.html#disopttest">testing.html#disopttest</a>
+<li>sqlite3_thread_cleanup &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+<li>sqlite3_threadsafe &rarr; <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="faq.html#q6">faq.html#q6</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+<li>sqlite3_total_changes &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion</a>
+ <a href="c3ref/changes.html">c3ref/changes.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_changes">capi3ref.html#sqlite3_changes</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+ <a href="capi3ref.html#sqlitefcntldataversion">capi3ref.html#sqlitefcntldataversion</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="fts3.html#*fts4mergecmd">fts3.html#*fts4mergecmd</a>
+ <a href="fts5.html#the_merge_command">fts5.html#the_merge_command</a>
+ <a href="lang_createtrigger.html#instead_of_trigger">lang_createtrigger.html#instead_of_trigger</a>
+ <a href="lang_delete.html#truncateopt">lang_delete.html#truncateopt</a>
+ <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+<li>sqlite3_total_changes64 &rarr; <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="lang_corefunc.html#total_changes">lang_corefunc.html#total_changes</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>sqlite3_trace &rarr; <a href="c3ref/c_trace.html#sqlitetracestmt">c3ref/c_trace.html#sqlitetracestmt</a>
+ <a href="c3ref/profile.html">c3ref/profile.html</a>
+ <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>
+ <a href="capi3ref.html#sqlite3_profile">capi3ref.html#sqlite3_profile</a>
+ <a href="capi3ref.html#sqlite3_trace_v2">capi3ref.html#sqlite3_trace_v2</a>
+ <a href="capi3ref.html#sqlitetracestmt">capi3ref.html#sqlitetracestmt</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_6_21">changes.html#version_3_6_21</a>
+ <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="compile.html#omit_trace">compile.html#omit_trace</a>
+ <a href="compile.html#trace_size_limit">compile.html#trace_size_limit</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>sqlite3_trace_v2 &rarr; <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>
+ <a href="c3ref/profile.html">c3ref/profile.html</a>
+ <a href="capi3ref.html#SQLITE_TRACE">capi3ref.html#SQLITE_TRACE</a>
+ <a href="capi3ref.html#sqlite3_profile">capi3ref.html#sqlite3_profile</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_14_2">changes.html#version_3_14_2</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>sqlite3_transfer_bindings &rarr; <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a>
+<li>sqlite3_txn_state &rarr; <a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a>
+ <a href="capi3ref.html#SQLITE_TXN_NONE">capi3ref.html#SQLITE_TXN_NONE</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="cli.html#dotdatabases">cli.html#dotdatabases</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>sqlite3_unlock_notify &rarr; <a href="changes.html#version_3_6_12">changes.html#version_3_6_12</a>
+ <a href="compile.html#enable_unlock_notify">compile.html#enable_unlock_notify</a>
+ <a href="releaselog/3_6_12.html">releaselog/3_6_12.html</a>
+ <a href="tclsqlite.html#unlock_notify">tclsqlite.html#unlock_notify</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+<li>sqlite3_update_hook &rarr; <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="capi3ref.html#sqlite3_commit_hook">capi3ref.html#sqlite3_commit_hook</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="compile.html#enable_preupdate_hook">compile.html#enable_preupdate_hook</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+<li>sqlite3_uri_boolean &rarr; <a href="c3ref/create_filename.html">c3ref/create_filename.html</a>
+ <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>
+ <a href="capi3ref.html#sqlite3_create_filename">capi3ref.html#sqlite3_create_filename</a>
+ <a href="capi3ref.html#sqlite3_db_filename">capi3ref.html#sqlite3_db_filename</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>sqlite3_uri_int64 &rarr; <a href="c3ref/create_filename.html">c3ref/create_filename.html</a>
+ <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>
+ <a href="capi3ref.html#sqlite3_create_filename">capi3ref.html#sqlite3_create_filename</a>
+ <a href="capi3ref.html#sqlite3_db_filename">capi3ref.html#sqlite3_db_filename</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>sqlite3_uri_key &rarr; <a href="c3ref/create_filename.html">c3ref/create_filename.html</a>
+ <a href="capi3ref.html#sqlite3_create_filename">capi3ref.html#sqlite3_create_filename</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>sqlite3_uri_parameter &rarr; <a href="c3ref/create_filename.html">c3ref/create_filename.html</a>
+ <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>
+ <a href="capi3ref.html#sqlite3_create_filename">capi3ref.html#sqlite3_create_filename</a>
+ <a href="capi3ref.html#sqlite3_db_filename">capi3ref.html#sqlite3_db_filename</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>sqlite3_user_data &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/context.html">c3ref/context.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html#sqlite3_context">capi3ref.html#sqlite3_context</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="cintro.html">cintro.html</a>
+<li>sqlite3_value &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>
+ <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="capi3ref.html#sqlite3_value_dup">capi3ref.html#sqlite3_value_dup</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+ <a href="capi3ref.html#sqlite3_vtab_rhs_value">capi3ref.html#sqlite3_vtab_rhs_value</a>
+ <a href="opcode.html">opcode.html</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_value_blob &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>sqlite3_value_bytes &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>sqlite3_value_bytes16 &rarr; <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>sqlite3_value_double &rarr; <a href="compile.html#omit_floating_point">compile.html#omit_floating_point</a>
+<li>sqlite3_value_dup &rarr; <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="capi3ref.html#sqlite3_value_dup">capi3ref.html#sqlite3_value_dup</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>sqlite3_value_encoding &rarr; <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+<li>sqlite3_value_free &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>sqlite3_value_frombind &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_31_1">changes.html#version_3_31_1</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>sqlite3_value_int &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="cintro.html">cintro.html</a>
+<li>sqlite3_value_int64 &rarr; <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_value_nochange &rarr; <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_nochange">capi3ref.html#sqlite3_vtab_nochange</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>sqlite3_value_pointer &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="bindptr.html#ptrleak">bindptr.html#ptrleak</a>
+ <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+<li>sqlite3_value_subtype &rarr; <a href="bindptr.html">bindptr.html</a>
+ <a href="c3ref/c_deterministic.html#sqlitesubtype">c3ref/c_deterministic.html#sqlitesubtype</a>
+ <a href="capi3ref.html#sqlitesubtype">capi3ref.html#sqlitesubtype</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>sqlite3_value_text &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="changes.html#version_3_16_2">changes.html#version_3_16_2</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>sqlite3_value_text16 &rarr; <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>sqlite3_value_text16be &rarr; <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+<li>sqlite3_value_text16le &rarr; <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+<li>sqlite3_value_type &rarr; <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>sqlite3_version &rarr; <a href="deterministic.html">deterministic.html</a>
+<li>sqlite3_vfs &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="35to36.html">35to36.html</a>
+ <a href="asyncvfs.html">asyncvfs.html</a>
+ <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer</a>
+ <a href="c3ref/data_directory.html">c3ref/data_directory.html</a>
+ <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a>
+ <a href="c3ref/file.html">c3ref/file.html</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="c3ref/initialize.html">c3ref/initialize.html</a>
+ <a href="c3ref/open.html#opennofollow">c3ref/open.html#opennofollow</a>
+ <a href="c3ref/randomness.html">c3ref/randomness.html</a>
+ <a href="c3ref/sleep.html">c3ref/sleep.html</a>
+ <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>
+ <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>
+ <a href="capi3ref.html#SQLITE_ACCESS_EXISTS">capi3ref.html#SQLITE_ACCESS_EXISTS</a>
+ <a href="capi3ref.html#opennofollow">capi3ref.html#opennofollow</a>
+ <a href="capi3ref.html#sqlite3_data_directory">capi3ref.html#sqlite3_data_directory</a>
+ <a href="capi3ref.html#sqlite3_database_file_object">capi3ref.html#sqlite3_database_file_object</a>
+ <a href="capi3ref.html#sqlite3_file">capi3ref.html#sqlite3_file</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlite3_initialize">capi3ref.html#sqlite3_initialize</a>
+ <a href="capi3ref.html#sqlite3_randomness">capi3ref.html#sqlite3_randomness</a>
+ <a href="capi3ref.html#sqlite3_sleep">capi3ref.html#sqlite3_sleep</a>
+ <a href="capi3ref.html#sqlite3_temp_directory">capi3ref.html#sqlite3_temp_directory</a>
+ <a href="capi3ref.html#sqlite3_vfs_find">capi3ref.html#sqlite3_vfs_find</a>
+ <a href="capi3ref.html#sqlitefcntlvfspointer">capi3ref.html#sqlitefcntlvfspointer</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="changes.html#version_3_6_7">changes.html#version_3_6_7</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="changes.html#version_3_7_6">changes.html#version_3_7_6</a>
+ <a href="compile.html#os_other">compile.html#os_other</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="howtocorrupt.html#posix_close_bug">howtocorrupt.html#posix_close_bug</a>
+ <a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a>
+ <a href="loadext.html#persist">loadext.html#persist</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+ <a href="releaselog/3_6_7.html">releaselog/3_6_7.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+ <a href="rescode.html#ioerr_access">rescode.html#ioerr_access</a>
+ <a href="rescode.html#ioerr_delete">rescode.html#ioerr_delete</a>
+ <a href="rescode.html#ioerr_delete_noent">rescode.html#ioerr_delete_noent</a>
+ <a href="rescode.html#notfound">rescode.html#notfound</a>
+ <a href="rescode.html#ok_load_permanently">rescode.html#ok_load_permanently</a>
+ <a href="testing.html#crashtesting">testing.html#crashtesting</a>
+ <a href="testing.html#ioerrtesting">testing.html#ioerrtesting</a>
+ <a href="vfs.html#shim">vfs.html#shim</a>
+<li>sqlite3_vfs.xOpen &rarr; <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a>
+ <a href="c3ref/create_filename.html">c3ref/create_filename.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#SQLITE_OPEN_AUTOPROXY">capi3ref.html#SQLITE_OPEN_AUTOPROXY</a>
+ <a href="capi3ref.html#sqlite3_create_filename">capi3ref.html#sqlite3_create_filename</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>sqlite3_vfs_find &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+<li>sqlite3_vfs_register &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="asyncvfs.html">asyncvfs.html</a>
+ <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+ <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#omit_autoinit">compile.html#omit_autoinit</a>
+ <a href="compile.html#os_other">compile.html#os_other</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="privatebranch.html">privatebranch.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+ <a href="uri.html#urivfs">uri.html#urivfs</a>
+ <a href="vfs.html">vfs.html</a>
+ <a href="vfs.html#shim">vfs.html#shim</a>
+<li>sqlite3_vfs_unregister &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+<li>sqlite3_vmprintf &rarr; <a href="printf.html">printf.html</a>
+<li>sqlite3_vsnprintf &rarr; <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="printf.html">printf.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+<li>sqlite3_vtab &rarr; <a href="compile.html#omit_virtualtable">compile.html#omit_virtualtable</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="vtab.html#xdisconnect">vtab.html#xdisconnect</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>sqlite3_vtab_collation &rarr; <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a>
+ <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="capi3ref.html#SQLITE_INDEX_CONSTRAINT_EQ">capi3ref.html#SQLITE_INDEX_CONSTRAINT_EQ</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+<li>sqlite3_vtab_config &rarr; <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous</a>
+ <a href="capi3ref.html#SQLITE_VTAB_CONSTRAINT_SUPPORT">capi3ref.html#SQLITE_VTAB_CONSTRAINT_SUPPORT</a>
+ <a href="capi3ref.html#sqlitevtabconstraintsupport">capi3ref.html#sqlitevtabconstraintsupport</a>
+ <a href="capi3ref.html#sqlitevtabdirectonly">capi3ref.html#sqlitevtabdirectonly</a>
+ <a href="capi3ref.html#sqlitevtabinnocuous">capi3ref.html#sqlitevtabinnocuous</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+<li>sqlite3_vtab_cursor &rarr; <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#xclose">vtab.html#xclose</a>
+ <a href="vtab.html#xnext">vtab.html#xnext</a>
+ <a href="vtab.html#xopen">vtab.html#xopen</a>
+ <a href="vtab.html#xrowid">vtab.html#xrowid</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>sqlite3_vtab_distinct &rarr; <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="vtab.html#obc">vtab.html#obc</a>
+<li>sqlite3_vtab_in &rarr; <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_in_first">capi3ref.html#sqlite3_vtab_in_first</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>sqlite3_vtab_in_first &rarr; <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+<li>sqlite3_vtab_in_next &rarr; <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+<li>sqlite3_vtab_nochange &rarr; <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>sqlite3_vtab_on_conflict &rarr; <a href="c3ref/c_deny.html">c3ref/c_deny.html</a>
+ <a href="c3ref/c_fail.html">c3ref/c_fail.html</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport</a>
+ <a href="capi3ref.html#SQLITE_DENY">capi3ref.html#SQLITE_DENY</a>
+ <a href="capi3ref.html#SQLITE_FAIL">capi3ref.html#SQLITE_FAIL</a>
+ <a href="capi3ref.html#sqlitevtabconstraintsupport">capi3ref.html#sqlitevtabconstraintsupport</a>
+ <a href="rescode.html#abort">rescode.html#abort</a>
+<li>sqlite3_vtab_rhs_value &rarr; <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a>
+ <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html#SQLITE_INDEX_CONSTRAINT_EQ">capi3ref.html#SQLITE_INDEX_CONSTRAINT_EQ</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="rescode.html#notfound">rescode.html#notfound</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>sqlite3_wal_autocheckpoint &rarr; <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>
+ <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>
+ <a href="capi3ref.html#sqlite3_wal_autocheckpoint">capi3ref.html#sqlite3_wal_autocheckpoint</a>
+ <a href="capi3ref.html#sqlite3_wal_hook">capi3ref.html#sqlite3_wal_hook</a>
+ <a href="pragma.html#pragma_wal_autocheckpoint">pragma.html#pragma_wal_autocheckpoint</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+ <a href="walformat.html#walidxfmt">walformat.html#walidxfmt</a>
+<li>sqlite3_wal_checkpoint &rarr; <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+<li>sqlite3_wal_checkpoint_v2 &rarr; <a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a>
+ <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>
+ <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a>
+ <a href="capi3ref.html#SQLITE_CHECKPOINT_FULL">capi3ref.html#SQLITE_CHECKPOINT_FULL</a>
+ <a href="capi3ref.html#sqlite3_wal_autocheckpoint">capi3ref.html#sqlite3_wal_autocheckpoint</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint">capi3ref.html#sqlite3_wal_checkpoint</a>
+ <a href="changes.html#version_3_7_6">changes.html#version_3_7_6</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="changes.html#version_3_8_8_2">changes.html#version_3_8_8_2</a>
+ <a href="pragma.html#pragma_wal_autocheckpoint">pragma.html#pragma_wal_autocheckpoint</a>
+ <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+<li>sqlite3_wal_hook &rarr; <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>
+ <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>
+ <a href="capi3ref.html#sqlite3_wal_autocheckpoint">capi3ref.html#sqlite3_wal_autocheckpoint</a>
+ <a href="capi3ref.html#sqlite3_wal_hook">capi3ref.html#sqlite3_wal_hook</a>
+ <a href="tclsqlite.html#wal_hook">tclsqlite.html#wal_hook</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+<li>sqlite3_win32_set_directory &rarr; <a href="c3ref/c_win32_data_directory_type.html">c3ref/c_win32_data_directory_type.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html#SQLITE_WIN32_DATA_DIRECTORY_TYPE">capi3ref.html#SQLITE_WIN32_DATA_DIRECTORY_TYPE</a>
+ <a href="capi3ref.html#sqlite3_win32_set_directory">capi3ref.html#sqlite3_win32_set_directory</a>
+<li>sqlite3_win32_set_directory16 &rarr; <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html#sqlite3_win32_set_directory">capi3ref.html#sqlite3_win32_set_directory</a>
+<li>sqlite3_win32_set_directory8 &rarr; <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html#sqlite3_win32_set_directory">capi3ref.html#sqlite3_win32_set_directory</a>
+<li>sqlite3changegroup_add &rarr; <a href="session.html#sqlite3_changegroup">session.html#sqlite3_changegroup</a>
+ <a href="session/changegroup.html">session/changegroup.html</a>
+<li>sqlite3changegroup_delete &rarr; <a href="session.html#sqlite3_changegroup">session.html#sqlite3_changegroup</a>
+ <a href="session/changegroup.html">session/changegroup.html</a>
+<li>sqlite3changegroup_new &rarr; <a href="session.html#sqlite3_changegroup">session.html#sqlite3_changegroup</a>
+ <a href="session/changegroup.html">session/changegroup.html</a>
+<li>sqlite3changegroup_output &rarr; <a href="session.html#sqlite3_changegroup">session.html#sqlite3_changegroup</a>
+ <a href="session/changegroup.html">session/changegroup.html</a>
+<li>sqlite3changeset_apply &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="session.html#sqlite3changegroup_add_strm">session.html#sqlite3changegroup_add_strm</a>
+ <a href="session.html#sqlite3changeset_conflict">session.html#sqlite3changeset_conflict</a>
+ <a href="session.html#sqlite3changeset_finalize">session.html#sqlite3changeset_finalize</a>
+ <a href="session.html#sqlite3changeset_new">session.html#sqlite3changeset_new</a>
+ <a href="session.html#sqlite3changeset_next">session.html#sqlite3changeset_next</a>
+ <a href="session.html#sqlite3changeset_old">session.html#sqlite3changeset_old</a>
+ <a href="session.html#sqlite3changeset_op">session.html#sqlite3changeset_op</a>
+ <a href="session.html#sqlite3session_changeset">session.html#sqlite3session_changeset</a>
+ <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a>
+ <a href="session/sqlite3changeset_conflict.html">session/sqlite3changeset_conflict.html</a>
+ <a href="session/sqlite3changeset_finalize.html">session/sqlite3changeset_finalize.html</a>
+ <a href="session/sqlite3changeset_new.html">session/sqlite3changeset_new.html</a>
+ <a href="session/sqlite3changeset_next.html">session/sqlite3changeset_next.html</a>
+ <a href="session/sqlite3changeset_old.html">session/sqlite3changeset_old.html</a>
+ <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a>
+ <a href="session/sqlite3session_changeset.html">session/sqlite3session_changeset.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_apply_v2 &rarr; <a href="session.html#SQLITE_CHANGESETAPPLY_INVERT">session.html#SQLITE_CHANGESETAPPLY_INVERT</a>
+ <a href="session.html#sqlite3changegroup_add_strm">session.html#sqlite3changegroup_add_strm</a>
+ <a href="session/c_changesetapply_invert.html">session/c_changesetapply_invert.html</a>
+ <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a>
+<li>sqlite3changeset_apply_v2_strm &rarr; <a href="session.html#SQLITE_CHANGESETAPPLY_INVERT">session.html#SQLITE_CHANGESETAPPLY_INVERT</a>
+ <a href="session/c_changesetapply_invert.html">session/c_changesetapply_invert.html</a>
+<li>sqlite3changeset_concat &rarr; <a href="session.html#sqlite3changegroup_add_strm">session.html#sqlite3changegroup_add_strm</a>
+ <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_finalize &rarr; <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_invert &rarr; <a href="session.html#sqlite3changegroup_add_strm">session.html#sqlite3changegroup_add_strm</a>
+ <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_new &rarr; <a href="session.html#sqlite3changeset_finalize">session.html#sqlite3changeset_finalize</a>
+ <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/sqlite3changeset_finalize.html">session/sqlite3changeset_finalize.html</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_next &rarr; <a href="session.html#sqlite3changeset_finalize">session.html#sqlite3changeset_finalize</a>
+ <a href="session.html#sqlite3changeset_new">session.html#sqlite3changeset_new</a>
+ <a href="session.html#sqlite3changeset_old">session.html#sqlite3changeset_old</a>
+ <a href="session.html#sqlite3changeset_op">session.html#sqlite3changeset_op</a>
+ <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/sqlite3changeset_finalize.html">session/sqlite3changeset_finalize.html</a>
+ <a href="session/sqlite3changeset_new.html">session/sqlite3changeset_new.html</a>
+ <a href="session/sqlite3changeset_old.html">session/sqlite3changeset_old.html</a>
+ <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_old &rarr; <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_op &rarr; <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_start &rarr; <a href="session.html#sqlite3_changeset_iter">session.html#sqlite3_changeset_iter</a>
+ <a href="session.html#sqlite3changegroup_add_strm">session.html#sqlite3changegroup_add_strm</a>
+ <a href="session.html#sqlite3changeset_finalize">session.html#sqlite3changeset_finalize</a>
+ <a href="session.html#sqlite3changeset_new">session.html#sqlite3changeset_new</a>
+ <a href="session.html#sqlite3changeset_next">session.html#sqlite3changeset_next</a>
+ <a href="session.html#sqlite3changeset_old">session.html#sqlite3changeset_old</a>
+ <a href="session.html#sqlite3changeset_op">session.html#sqlite3changeset_op</a>
+ <a href="session.html#sqlite3session_changeset">session.html#sqlite3session_changeset</a>
+ <a href="session/changeset_iter.html">session/changeset_iter.html</a>
+ <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a>
+ <a href="session/sqlite3changeset_finalize.html">session/sqlite3changeset_finalize.html</a>
+ <a href="session/sqlite3changeset_new.html">session/sqlite3changeset_new.html</a>
+ <a href="session/sqlite3changeset_next.html">session/sqlite3changeset_next.html</a>
+ <a href="session/sqlite3changeset_old.html">session/sqlite3changeset_old.html</a>
+ <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a>
+ <a href="session/sqlite3session_changeset.html">session/sqlite3session_changeset.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3changeset_start_v2 &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="session.html#SQLITE_CHANGESETSTART_INVERT">session.html#SQLITE_CHANGESETSTART_INVERT</a>
+ <a href="session.html#sqlite3_changeset_iter">session.html#sqlite3_changeset_iter</a>
+ <a href="session/c_changesetstart_invert.html">session/c_changesetstart_invert.html</a>
+ <a href="session/changeset_iter.html">session/changeset_iter.html</a>
+<li>sqlite3changeset_start_v2_strm &rarr; <a href="session.html#SQLITE_CHANGESETSTART_INVERT">session.html#SQLITE_CHANGESETSTART_INVERT</a>
+ <a href="session/c_changesetstart_invert.html">session/c_changesetstart_invert.html</a>
+<li>sqlite3session_attach &rarr; <a href="session.html#sqlite3session_diff">session.html#sqlite3session_diff</a>
+ <a href="session/sqlite3session_diff.html">session/sqlite3session_diff.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3session_changeset &rarr; <a href="session.html#sqlite3changegroup_add_strm">session.html#sqlite3changegroup_add_strm</a>
+ <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session.html#sqlite3session_attach">session.html#sqlite3session_attach</a>
+ <a href="session.html#sqlite3session_diff">session.html#sqlite3session_diff</a>
+ <a href="session.html#sqlite3session_enable">session.html#sqlite3session_enable</a>
+ <a href="session.html#sqlite3session_isempty">session.html#sqlite3session_isempty</a>
+ <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+ <a href="session/sqlite3session_attach.html">session/sqlite3session_attach.html</a>
+ <a href="session/sqlite3session_diff.html">session/sqlite3session_diff.html</a>
+ <a href="session/sqlite3session_enable.html">session/sqlite3session_enable.html</a>
+ <a href="session/sqlite3session_isempty.html">session/sqlite3session_isempty.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3session_create &rarr; <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session.html#sqlite3session_delete">session.html#sqlite3session_delete</a>
+ <a href="session/session.html">session/session.html</a>
+ <a href="session/sqlite3session_delete.html">session/sqlite3session_delete.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3session_delete &rarr; <a href="session.html#sqlite3_session">session.html#sqlite3_session</a>
+ <a href="session.html#sqlite3session_create">session.html#sqlite3session_create</a>
+ <a href="session/session.html">session/session.html</a>
+ <a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>sqlite3session_enable &rarr; <a href="session.html#sqlite3session_changeset">session.html#sqlite3session_changeset</a>
+ <a href="session/sqlite3session_changeset.html">session/sqlite3session_changeset.html</a>
+<li>sqlite3session_indirect &rarr; <a href="session.html#sqlite3changeset_op">session.html#sqlite3changeset_op</a>
+ <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a>
+<li>sqlite3session_patchset &rarr; <a href="session.html#sqlite3changegroup_add_strm">session.html#sqlite3changegroup_add_strm</a>
+ <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a>
+ <a href="sessionintro.html#changeset">sessionintro.html#changeset</a>
+<li>SQLITE_4_BYTE_ALIGNED_MALLOC &rarr; <a href="c3ref/free.html">c3ref/free.html</a>
+ <a href="capi3ref.html#sqlite3_free">capi3ref.html#sqlite3_free</a>
+<li>SQLITE_ABORT &rarr; <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="c3ref/c_fail.html">c3ref/c_fail.html</a>
+ <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html#SQLITE_FAIL">capi3ref.html#SQLITE_FAIL</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_blob_read">capi3ref.html#sqlite3_blob_read</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="capi3ref.html#sqlite3_vtab_on_conflict">capi3ref.html#sqlite3_vtab_on_conflict</a>
+ <a href="changes.html#version_3_8_7_2">changes.html#version_3_8_7_2</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_7_2.html">releaselog/3_8_7_2.html</a>
+ <a href="rescode.html#abort_rollback">rescode.html#abort_rollback</a>
+ <a href="rescode.html#interrupt">rescode.html#interrupt</a>
+<li>SQLITE_ABORT_ROLLBACK &rarr; <a href="changes.html#version_3_8_7_2">changes.html#version_3_8_7_2</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_7_2.html">releaselog/3_8_7_2.html</a>
+ <a href="rescode.html#abort">rescode.html#abort</a>
+<li>SQLITE_ACCESS_EXISTS &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxaccess">c3ref/vfs.html#sqlite3vfsxaccess</a>
+ <a href="capi3ref.html#sqlite3vfsxaccess">capi3ref.html#sqlite3vfsxaccess</a>
+<li>SQLITE_ACCESS_READ &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxaccess">c3ref/vfs.html#sqlite3vfsxaccess</a>
+ <a href="capi3ref.html#sqlite3vfsxaccess">capi3ref.html#sqlite3vfsxaccess</a>
+<li>SQLITE_ACCESS_READWRITE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxaccess">c3ref/vfs.html#sqlite3vfsxaccess</a>
+ <a href="capi3ref.html#sqlite3vfsxaccess">capi3ref.html#sqlite3vfsxaccess</a>
+<li>SQLITE_ALLOW_COVERING_INDEX_SCAN &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigcoveringindexscan">c3ref/c_config_covering_index_scan.html#sqliteconfigcoveringindexscan</a>
+ <a href="capi3ref.html#sqliteconfigcoveringindexscan">capi3ref.html#sqliteconfigcoveringindexscan</a>
+<li>SQLITE_ALLOW_URI_AUTHORITY &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="uri.html">uri.html</a>
+<li>SQLITE_APICALL &rarr; <a href="compile.html#apicall">compile.html#apicall</a>
+ <a href="compile.html#cdecl">compile.html#cdecl</a>
+ <a href="compile.html#sysapi">compile.html#sysapi</a>
+ <a href="compile.html#tclapi">compile.html#tclapi</a>
+<li>SQLITE_AUTH &rarr; <a href="rescode.html#auth_user">rescode.html#auth_user</a>
+<li>SQLITE_BLOB &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>SQLITE_BUSY &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="backup.html">backup.html</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupfinish">c3ref/backup_finish.html#sqlite3backupfinish</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>
+ <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#sqlite3_busy_handler">capi3ref.html#sqlite3_busy_handler</a>
+ <a href="capi3ref.html#sqlite3_busy_timeout">capi3ref.html#sqlite3_busy_timeout</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="capi3ref.html#sqlite3_get_autocommit">capi3ref.html#sqlite3_get_autocommit</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3backupfinish">capi3ref.html#sqlite3backupfinish</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="capi3ref.html#sqlitedbconfiglookaside">capi3ref.html#sqlitedbconfiglookaside</a>
+ <a href="changes.html#version_3_4_0">changes.html#version_3_4_0</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_transaction.html">lang_transaction.html</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="news.html">news.html</a>
+ <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a>
+ <a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="rescode.html#busy_recovery">rescode.html#busy_recovery</a>
+ <a href="rescode.html#busy_snapshot">rescode.html#busy_snapshot</a>
+ <a href="rescode.html#locked">rescode.html#locked</a>
+ <a href="wal.html#busy">wal.html#busy</a>
+<li>SQLITE_BUSY_RECOVERY &rarr; <a href="rescode.html#busy">rescode.html#busy</a>
+<li>SQLITE_BUSY_SNAPSHOT &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+<li>SQLITE_CALLBACK &rarr; <a href="compile.html#tclapi">compile.html#tclapi</a>
+<li>SQLITE_CANTOPEN &rarr; <a href="c3ref/system_errno.html">c3ref/system_errno.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxaccess">c3ref/vfs.html#sqlite3vfsxaccess</a>
+ <a href="capi3ref.html#sqlite3_system_errno">capi3ref.html#sqlite3_system_errno</a>
+ <a href="capi3ref.html#sqlite3vfsxaccess">capi3ref.html#sqlite3vfsxaccess</a>
+ <a href="rescode.html#cantopen_convpath">rescode.html#cantopen_convpath</a>
+ <a href="rescode.html#cantopen_fullpath">rescode.html#cantopen_fullpath</a>
+ <a href="rescode.html#cantopen_isdir">rescode.html#cantopen_isdir</a>
+<li>SQLITE_CANTOPEN_CONVPATH &rarr; <a href="rescode.html#ioerr_convpath">rescode.html#ioerr_convpath</a>
+<li>SQLITE_CASE_SENSITIVE_LIKE &rarr; <a href="optoverview.html#like_opt">optoverview.html#like_opt</a>
+<li>SQLITE_CDECL &rarr; <a href="compile.html#apicall">compile.html#apicall</a>
+ <a href="compile.html#cdecl">compile.html#cdecl</a>
+ <a href="compile.html#sysapi">compile.html#sysapi</a>
+ <a href="compile.html#tclapi">compile.html#tclapi</a>
+<li>SQLITE_CHANGESET_ABORT &rarr; <a href="session.html#sqlite3changeset_apply">session.html#sqlite3changeset_apply</a>
+ <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a>
+<li>SQLITE_CHANGESET_CONFLICT &rarr; <a href="session.html#sqlite3changeset_apply">session.html#sqlite3changeset_apply</a>
+ <a href="session.html#sqlite3changeset_conflict">session.html#sqlite3changeset_conflict</a>
+ <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a>
+ <a href="session/sqlite3changeset_conflict.html">session/sqlite3changeset_conflict.html</a>
+<li>SQLITE_CHANGESET_CONSTRAINT &rarr; <a href="session.html#sqlite3changeset_apply">session.html#sqlite3changeset_apply</a>
+ <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a>
+<li>SQLITE_CHANGESET_DATA &rarr; <a href="session.html#sqlite3changeset_apply">session.html#sqlite3changeset_apply</a>
+ <a href="session.html#sqlite3changeset_conflict">session.html#sqlite3changeset_conflict</a>
+ <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a>
+ <a href="session/sqlite3changeset_conflict.html">session/sqlite3changeset_conflict.html</a>
+<li>SQLITE_CHANGESET_NOTFOUND &rarr; <a href="session.html#sqlite3changeset_apply">session.html#sqlite3changeset_apply</a>
+ <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a>
+<li>SQLITE_CHANGESET_OMIT &rarr; <a href="session.html#sqlite3changeset_apply">session.html#sqlite3changeset_apply</a>
+ <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a>
+<li>SQLITE_CHANGESET_REPLACE &rarr; <a href="session.html#sqlite3changeset_apply">session.html#sqlite3changeset_apply</a>
+ <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a>
+<li>SQLITE_CHANGESETAPPLY_INVERT &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+<li>SQLITE_CHANGESETAPPLY_NOSAVEPOINT &rarr; <a href="session.html#sqlite3changeset_apply">session.html#sqlite3changeset_apply</a>
+ <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a>
+<li>SQLITE_CHANGESETSTART_INVERT &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="session.html#sqlite3changeset_start">session.html#sqlite3changeset_start</a>
+ <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a>
+<li>SQLITE_CHECKPOINT_PASSIVE &rarr; <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint">capi3ref.html#sqlite3_wal_checkpoint</a>
+ <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a>
+<li>SQLITE_CHECKPOINT_RESTART &rarr; <a href="wal.html#bigwal">wal.html#bigwal</a>
+<li>SQLITE_CHECKPOINT_TRUNCATE &rarr; <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="wal.html#bigwal">wal.html#bigwal</a>
+<li>sqlite_compileoption_get &rarr; <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a>
+ <a href="capi3ref.html#sqlite3_compileoption_get">capi3ref.html#sqlite3_compileoption_get</a>
+ <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="compile.html#omit_compileoption_diags">compile.html#omit_compileoption_diags</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_compile_options">pragma.html#pragma_compile_options</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+<li>sqlite_compileoption_used &rarr; <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a>
+ <a href="capi3ref.html#sqlite3_compileoption_get">capi3ref.html#sqlite3_compileoption_get</a>
+ <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="compile.html#omit_compileoption_diags">compile.html#omit_compileoption_diags</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+<li>SQLITE_CONFIG_COVERING_INDEX_SCAN &rarr; <a href="compile.html#allow_covering_index_scan">compile.html#allow_covering_index_scan</a>
+<li>SQLITE_CONFIG_GETMALLOC &rarr; <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mem_methods">capi3ref.html#sqlite3_mem_methods</a>
+ <a href="malloc.html#memsysx">malloc.html#memsysx</a>
+<li>SQLITE_CONFIG_GETMUTEX &rarr; <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+<li>SQLITE_CONFIG_GETPCACHE &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>SQLITE_CONFIG_GETPCACHE2 &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>SQLITE_CONFIG_HEAP &rarr; <a href="compile.html#enable_memsys3">compile.html#enable_memsys3</a>
+ <a href="compile.html#enable_memsys5">compile.html#enable_memsys5</a>
+ <a href="compile.html#zero_malloc">compile.html#zero_malloc</a>
+ <a href="malloc.html#memsys5">malloc.html#memsys5</a>
+ <a href="malloc.html#memsysx">malloc.html#memsysx</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="news.html">news.html</a>
+ <a href="security.html">security.html</a>
+<li>SQLITE_CONFIG_LOG &rarr; <a href="c3ref/log.html">c3ref/log.html</a>
+ <a href="capi3ref.html#sqlite3_log">capi3ref.html#sqlite3_log</a>
+ <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="errlog.html">errlog.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>SQLITE_CONFIG_LOOKASIDE &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside</a>
+ <a href="capi3ref.html#sqlitedbconfiglookaside">capi3ref.html#sqlitedbconfiglookaside</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="compile.html#default_lookaside">compile.html#default_lookaside</a>
+ <a href="debugging.html">debugging.html</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+<li>SQLITE_CONFIG_MALLOC &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">c3ref/c_config_covering_index_scan.html#sqliteconfigheap</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mem_methods">capi3ref.html#sqlite3_mem_methods</a>
+ <a href="capi3ref.html#sqliteconfigheap">capi3ref.html#sqliteconfigheap</a>
+ <a href="compile.html#malloc_usable_size">compile.html#malloc_usable_size</a>
+ <a href="compile.html#zero_malloc">compile.html#zero_malloc</a>
+ <a href="malloc.html#memsysx">malloc.html#memsysx</a>
+ <a href="testing.html#oomtesting">testing.html#oomtesting</a>
+<li>SQLITE_CONFIG_MEMDB_MAXSIZE &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="compile.html#memdb_default_maxsize">compile.html#memdb_default_maxsize</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>SQLITE_CONFIG_MEMSTATUS &rarr; <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="capi3ref.html#sqlite3_hard_heap_limit64">capi3ref.html#sqlite3_hard_heap_limit64</a>
+ <a href="capi3ref.html#sqlite3_mem_methods">capi3ref.html#sqlite3_mem_methods</a>
+ <a href="compile.html#default_memstatus">compile.html#default_memstatus</a>
+ <a href="compile.html#max_memory">compile.html#max_memory</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="malloc.html#memsysx">malloc.html#memsysx</a>
+<li>SQLITE_CONFIG_MMAP_SIZE &rarr; <a href="compile.html#default_mmap_size">compile.html#default_mmap_size</a>
+ <a href="compile.html#max_mmap_size">compile.html#max_mmap_size</a>
+ <a href="mmap.html">mmap.html</a>
+ <a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a>
+<li>SQLITE_CONFIG_MULTITHREAD &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html#sqlite3_threadsafe">capi3ref.html#sqlite3_threadsafe</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+<li>SQLITE_CONFIG_MUTEX &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>
+ <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mutex_alloc">capi3ref.html#sqlite3_mutex_alloc</a>
+ <a href="capi3ref.html#sqlite3_mutex_methods">capi3ref.html#sqlite3_mutex_methods</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+<li>SQLITE_CONFIG_PAGECACHE &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">c3ref/c_config_covering_index_scan.html#sqliteconfigheap</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">c3ref/c_status_malloc_count.html#sqlitestatusmemoryused</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow">c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow</a>
+ <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheused">c3ref/c_status_malloc_count.html#sqlitestatuspagecacheused</a>
+ <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>
+ <a href="capi3ref.html#sqlite3_hard_heap_limit64">capi3ref.html#sqlite3_hard_heap_limit64</a>
+ <a href="capi3ref.html#sqliteconfigheap">capi3ref.html#sqliteconfigheap</a>
+ <a href="capi3ref.html#sqliteconfigpcachehdrsz">capi3ref.html#sqliteconfigpcachehdrsz</a>
+ <a href="capi3ref.html#sqlitestatusmemoryused">capi3ref.html#sqlitestatusmemoryused</a>
+ <a href="capi3ref.html#sqlitestatuspagecacheoverflow">capi3ref.html#sqlitestatuspagecacheoverflow</a>
+ <a href="capi3ref.html#sqlitestatuspagecacheused">capi3ref.html#sqlitestatuspagecacheused</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="changes.html#version_3_7_3">changes.html#version_3_7_3</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="compile.html#default_pcache_initsz">compile.html#default_pcache_initsz</a>
+ <a href="malloc.html#pagecache">malloc.html#pagecache</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+ <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>SQLITE_CONFIG_PCACHE &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>SQLITE_CONFIG_PCACHE2 &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache</a>
+ <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>
+ <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>
+ <a href="capi3ref.html#sqlite3_hard_heap_limit64">capi3ref.html#sqlite3_hard_heap_limit64</a>
+ <a href="capi3ref.html#sqlite3_pcache_methods2">capi3ref.html#sqlite3_pcache_methods2</a>
+ <a href="capi3ref.html#sqliteconfigpagecache">capi3ref.html#sqliteconfigpagecache</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>SQLITE_CONFIG_PCACHE_HDRSZ &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache</a>
+ <a href="capi3ref.html#sqliteconfigpagecache">capi3ref.html#sqliteconfigpagecache</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>SQLITE_CONFIG_PMASZ &rarr; <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="compile.html#sorter_pmasz">compile.html#sorter_pmasz</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>SQLITE_CONFIG_SCRATCH &rarr; <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+<li>SQLITE_CONFIG_SERIALIZED &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a>
+ <a href="capi3ref.html#sqlite3_threadsafe">capi3ref.html#sqlite3_threadsafe</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+<li>SQLITE_CONFIG_SINGLETHREAD &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html#sqlite3_threadsafe">capi3ref.html#sqlite3_threadsafe</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+<li>SQLITE_CONFIG_SMALL_MALLOC &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>SQLITE_CONFIG_SORTERREF_SIZE &rarr; <a href="compile.html#enable_sorter_references">compile.html#enable_sorter_references</a>
+<li>SQLITE_CONFIG_SQLLOG &rarr; <a href="compile.html#enable_sqllog">compile.html#enable_sqllog</a>
+<li>SQLITE_CONFIG_STMTJRNL_SPILL &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="compile.html#stmtjrnl_spill">compile.html#stmtjrnl_spill</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>SQLITE_CONFIG_URI &rarr; <a href="c3ref/open.html#urifilenamesinsqlite3open">c3ref/open.html#urifilenamesinsqlite3open</a>
+ <a href="capi3ref.html#urifilenamesinsqlite3open">capi3ref.html#urifilenamesinsqlite3open</a>
+ <a href="lang_vacuum.html#vacuuminto">lang_vacuum.html#vacuuminto</a>
+ <a href="uri.html">uri.html</a>
+<li>SQLITE_CONSTRAINT &rarr; <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport</a>
+ <a href="capi3ref.html#sqlitevtabconstraintsupport">capi3ref.html#sqlitevtabconstraintsupport</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="lang_createtrigger.html#raise">lang_createtrigger.html#raise</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="rescode.html#constraint_check">rescode.html#constraint_check</a>
+ <a href="rescode.html#constraint_commithook">rescode.html#constraint_commithook</a>
+ <a href="rescode.html#constraint_datatype">rescode.html#constraint_datatype</a>
+ <a href="rescode.html#constraint_foreignkey">rescode.html#constraint_foreignkey</a>
+ <a href="rescode.html#constraint_notnull">rescode.html#constraint_notnull</a>
+ <a href="rescode.html#constraint_pinned">rescode.html#constraint_pinned</a>
+ <a href="rescode.html#constraint_primarykey">rescode.html#constraint_primarykey</a>
+ <a href="rescode.html#constraint_rowid">rescode.html#constraint_rowid</a>
+ <a href="rescode.html#constraint_trigger">rescode.html#constraint_trigger</a>
+ <a href="rescode.html#constraint_unique">rescode.html#constraint_unique</a>
+ <a href="vtab.html#obc">vtab.html#obc</a>
+<li>SQLITE_COPY &rarr; <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+<li>SQLITE_CORRUPT &rarr; <a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#coreuriqueryparameters">capi3ref.html#coreuriqueryparameters</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="faq.html#q21">faq.html#q21</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="rescode.html#corrupt_index">rescode.html#corrupt_index</a>
+ <a href="rescode.html#corrupt_vtab">rescode.html#corrupt_vtab</a>
+ <a href="session.html#sqlite3changeset_finalize">session.html#sqlite3changeset_finalize</a>
+ <a href="session/sqlite3changeset_finalize.html">session/sqlite3changeset_finalize.html</a>
+ <a href="tclsqlite.html#deserialize">tclsqlite.html#deserialize</a>
+ <a href="testing.html#tension">testing.html#tension</a>
+ <a href="uri.html#uriimmutable">uri.html#uriimmutable</a>
+<li>SQLITE_CORRUPT_VTAB &rarr; <a href="fts5.html#the_delete_all_command">fts5.html#the_delete_all_command</a>
+<li>SQLITE_DBCONFIG_DEFENSIVE &rarr; <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_39_4">changes.html#version_3_39_4</a>
+ <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="dbpage.html">dbpage.html</a>
+ <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a>
+ <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a>
+ <a href="pragma.html#pragma_writable_schema">pragma.html#pragma_writable_schema</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+ <a href="security.html">security.html</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+<li>SQLITE_DBCONFIG_DQS_DDL &rarr; <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="compile.html#dqs">compile.html#dqs</a>
+ <a href="news.html">news.html</a>
+ <a href="quirks.html#dblquote">quirks.html#dblquote</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+<li>SQLITE_DBCONFIG_DQS_DML &rarr; <a href="changes.html#version_3_29_0">changes.html#version_3_29_0</a>
+ <a href="compile.html#dqs">compile.html#dqs</a>
+ <a href="news.html">news.html</a>
+ <a href="quirks.html#dblquote">quirks.html#dblquote</a>
+ <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a>
+<li>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</a>
+ <a href="fts3.html#f3tknzr">fts3.html#f3tknzr</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION &rarr; <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="capi3ref.html#sqlite3_enable_load_extension">capi3ref.html#sqlite3_enable_load_extension</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="loadext.html">loadext.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+<li>SQLITE_DBCONFIG_ENABLE_QPSG &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="compile.html#enable_qpsg">compile.html#enable_qpsg</a>
+ <a href="queryplanner-ng.html#qpstab">queryplanner-ng.html#qpstab</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>SQLITE_DBCONFIG_ENABLE_TRIGGER &rarr; <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+<li>SQLITE_DBCONFIG_ENABLE_VIEW &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+<li>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE &rarr; <a href="lang_altertable.html#altertabrename">lang_altertable.html#altertabrename</a>
+ <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a>
+<li>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="pragma.html#pragma_legacy_file_format">pragma.html#pragma_legacy_file_format</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>SQLITE_DBCONFIG_LOOKASIDE &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside</a>
+ <a href="c3ref/db_config.html">c3ref/db_config.html</a>
+ <a href="capi3ref.html#sqlite3_db_config">capi3ref.html#sqlite3_db_config</a>
+ <a href="capi3ref.html#sqliteconfiglookaside">capi3ref.html#sqliteconfiglookaside</a>
+ <a href="compile.html#default_lookaside">compile.html#default_lookaside</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="news.html">news.html</a>
+<li>SQLITE_DBCONFIG_MAINDBNAME &rarr; <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="dbpage.html">dbpage.html</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+<li>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE &rarr; <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>SQLITE_DBCONFIG_RESET_DATABASE &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>SQLITE_DBCONFIG_TRUSTED_SCHEMA &rarr; <a href="appfunc.html#sec">appfunc.html#sec</a>
+ <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a>
+ <a href="capi3ref.html#sqliteinnocuous">capi3ref.html#sqliteinnocuous</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="compile.html#trusted_schema">compile.html#trusted_schema</a>
+ <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+<li>SQLITE_DBCONFIG_WRITABLE_SCHEMA &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>sqlite_dbpage &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive</a>
+ <a href="capi3ref.html#sqlitedbconfigdefensive">capi3ref.html#sqlitedbconfigdefensive</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>SQLITE_DBPAGE virtual table &rarr; <a href="compile.html#enable_dbpage_vtab">compile.html#enable_dbpage_vtab</a>
+<li>SQLITE_DBSTATUS options &rarr; <a href="c3ref/db_status.html">c3ref/db_status.html</a>
+ <a href="capi3ref.html#sqlite3_db_status">capi3ref.html#sqlite3_db_status</a>
+<li>SQLITE_DBSTATUS_CACHE_HIT &rarr; <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>SQLITE_DBSTATUS_CACHE_MISS &rarr; <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>SQLITE_DBSTATUS_CACHE_SPILL &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>SQLITE_DBSTATUS_CACHE_USED &rarr; <a href="changes.html#version_3_7_0">changes.html#version_3_7_0</a>
+ <a href="memstat.html">memstat.html</a>
+ <a href="releaselog/3_7_0.html">releaselog/3_7_0.html</a>
+<li>SQLITE_DBSTATUS_CACHE_USED_SHARED &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>SQLITE_DBSTATUS_CACHE_WRITE &rarr; <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>SQLITE_DBSTATUS_DEFERRED_FKS &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="pragma.html#pragma_defer_foreign_keys">pragma.html#pragma_defer_foreign_keys</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>SQLITE_DBSTATUS_LOOKASIDE_HIT &rarr; <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+<li>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL &rarr; <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+<li>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE &rarr; <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+<li>SQLITE_DBSTATUS_LOOKASIDE_USED &rarr; <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+<li>SQLITE_DBSTATUS_SCHEMA_USED &rarr; <a href="changes.html#version_3_7_1">changes.html#version_3_7_1</a>
+ <a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a>
+<li>SQLITE_DBSTATUS_STMT_USED &rarr; <a href="changes.html#version_3_7_1">changes.html#version_3_7_1</a>
+ <a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a>
+<li>SQLITE_DEBUG &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate</a>
+ <a href="capi3ref.html#sqlitefcntllockstate">capi3ref.html#sqlitefcntllockstate</a>
+ <a href="changes.html#version_3_39_1">changes.html#version_3_39_1</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="compile.html#enable_explain_comments">compile.html#enable_explain_comments</a>
+ <a href="debugging.html">debugging.html</a>
+ <a href="opcode.html#subprog">opcode.html#subprog</a>
+ <a href="pragma.html#pragma_parser_trace">pragma.html#pragma_parser_trace</a>
+ <a href="pragma.html#pragma_vdbe_addoptrace">pragma.html#pragma_vdbe_addoptrace</a>
+ <a href="pragma.html#pragma_vdbe_debug">pragma.html#pragma_vdbe_debug</a>
+ <a href="pragma.html#pragma_vdbe_listing">pragma.html#pragma_vdbe_listing</a>
+ <a href="pragma.html#pragma_vdbe_trace">pragma.html#pragma_vdbe_trace</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+ <a href="th3.html">th3.html</a>
+<li>SQLITE_DEFAULT_AUTOMATIC_INDEX &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="compile.html#omit_automatic_index">compile.html#omit_automatic_index</a>
+ <a href="optoverview.html#autoindex">optoverview.html#autoindex</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>SQLITE_DEFAULT_AUTOVACUUM &rarr; <a href="pragma.html#pragma_auto_vacuum">pragma.html#pragma_auto_vacuum</a>
+<li>SQLITE_DEFAULT_CACHE_SIZE &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="pragma.html#pragma_cache_size">pragma.html#pragma_cache_size</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>SQLITE_DEFAULT_FILE_FORMAT &rarr; <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+<li>SQLITE_DEFAULT_FOREIGN_KEYS &rarr; <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="faq.html#q22">faq.html#q22</a>
+ <a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+<li>SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT &rarr; <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a>
+ <a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a>
+<li>SQLITE_DEFAULT_LOCKING_MODE &rarr; <a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a>
+<li>SQLITE_DEFAULT_LOOKASIDE &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+<li>SQLITE_DEFAULT_MEMSTATUS &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus</a>
+ <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>
+ <a href="capi3ref.html#sqlite3_hard_heap_limit64">capi3ref.html#sqlite3_hard_heap_limit64</a>
+ <a href="capi3ref.html#sqliteconfigmemstatus">capi3ref.html#sqliteconfigmemstatus</a>
+ <a href="compile.html#max_memory">compile.html#max_memory</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+<li>SQLITE_DEFAULT_MMAP_SIZE &rarr; <a href="compile.html#max_mmap_size">compile.html#max_mmap_size</a>
+ <a href="mmap.html">mmap.html</a>
+ <a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a>
+<li>SQLITE_DEFAULT_PAGE_SIZE &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="pragma.html#pragma_page_size">pragma.html#pragma_page_size</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>SQLITE_DEFAULT_PCACHE_INITSZ &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+<li>SQLITE_DEFAULT_SYNCHRONOUS &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="compile.html#default_wal_synchronous">compile.html#default_wal_synchronous</a>
+ <a href="compile.html#extra_durable">compile.html#extra_durable</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>SQLITE_DEFAULT_WAL_AUTOCHECKPOINT &rarr; <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>
+ <a href="capi3ref.html#sqlite3_wal_autocheckpoint">capi3ref.html#sqlite3_wal_autocheckpoint</a>
+ <a href="pragma.html#pragma_wal_autocheckpoint">pragma.html#pragma_wal_autocheckpoint</a>
+ <a href="wal.html#ckpt">wal.html#ckpt</a>
+<li>SQLITE_DEFAULT_WAL_SYNCHRONOUS &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>SQLITE_DEFAULT_WORKER_THREADS &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="compile.html#max_worker_threads">compile.html#max_worker_threads</a>
+ <a href="pragma.html#pragma_threads">pragma.html#pragma_threads</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>SQLITE_DELETE &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="lang_delete.html#truncateopt">lang_delete.html#truncateopt</a>
+ <a href="session.html#sqlite3changeset_old">session.html#sqlite3changeset_old</a>
+ <a href="session.html#sqlite3changeset_op">session.html#sqlite3changeset_op</a>
+ <a href="session/sqlite3changeset_old.html">session/sqlite3changeset_old.html</a>
+ <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a>
+<li>SQLITE_DENY &rarr; <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+<li>SQLITE_DESERIALIZE_READONLY &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>SQLITE_DETERMINISTIC &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="expridx.html">expridx.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+<li>SQLITE_DIRECT_OVERFLOW_READ &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>SQLITE_DIRECTONLY &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="appfunc.html#sec">appfunc.html#sec</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+<li>SQLITE_DISABLE_FTS4_DEFERRED &rarr; <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+<li>SQLITE_DISABLE_INTRINSIC &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+<li>SQLITE_DONE &rarr; <a href="c3ref/backup_finish.html#sqlite3backupfinish">c3ref/backup_finish.html#sqlite3backupfinish</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="c3ref/data_count.html">c3ref/data_count.html</a>
+ <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a>
+ <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>
+ <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>
+ <a href="capi3ref.html#sqlite3_data_count">capi3ref.html#sqlite3_data_count</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_stmt_busy">capi3ref.html#sqlite3_stmt_busy</a>
+ <a href="capi3ref.html#sqlite3_vtab_in_first">capi3ref.html#sqlite3_vtab_in_first</a>
+ <a href="capi3ref.html#sqlite3_wal_hook">capi3ref.html#sqlite3_wal_hook</a>
+ <a href="capi3ref.html#sqlite3backupfinish">capi3ref.html#sqlite3backupfinish</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="rescode.html">rescode.html</a>
+<li>SQLITE_DQS &rarr; <a href="compile.html#rcmd">compile.html#rcmd</a>
+<li>SQLITE_ENABLE_8_3_NAMES &rarr; <a href="shortnames.html">shortnames.html</a>
+ <a href="wal.html#walfile">wal.html#walfile</a>
+<li>SQLITE_ENABLE_API_ARMOR &rarr; <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>SQLITE_ENABLE_ATOMIC_WRITE &rarr; <a href="rescode.html#ioerr_begin_atomic">rescode.html#ioerr_begin_atomic</a>
+ <a href="rescode.html#ioerr_commit_atomic">rescode.html#ioerr_commit_atomic</a>
+ <a href="rescode.html#ioerr_rollback_atomic">rescode.html#ioerr_rollback_atomic</a>
+<li>SQLITE_ENABLE_BATCH_ATOMIC_WRITE &rarr; <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>SQLITE_ENABLE_COLUMN_METADATA &rarr; <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>
+ <a href="capi3ref.html#sqlite3_column_database_name">capi3ref.html#sqlite3_column_database_name</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>SQLITE_ENABLE_DBPAGE_VTAB &rarr; <a href="dbpage.html">dbpage.html</a>
+<li>SQLITE_ENABLE_DBSTAT_VTAB &rarr; <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="changes.html#version_3_8_10_1">changes.html#version_3_8_10_1</a>
+ <a href="dbstat.html">dbstat.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="vtab.html#epovtab">vtab.html#epovtab</a>
+<li>SQLITE_ENABLE_DESERIALIZE &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+<li>SQLITE_ENABLE_EXPLAIN_COMMENTS &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_8_2">changes.html#version_3_8_2</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+<li>SQLITE_ENABLE_FTS3 &rarr; <a href="fts3.html#compiling_and_enabling_fts3_and_fts4">fts3.html#compiling_and_enabling_fts3_and_fts4</a>
+<li>SQLITE_ENABLE_FTS3_PARENTHESIS &rarr; <a href="changes.html#version_3_39_1">changes.html#version_3_39_1</a>
+ <a href="changes.html#version_3_6_8">changes.html#version_3_6_8</a>
+ <a href="fts3.html#compiling_and_enabling_fts3_and_fts4">fts3.html#compiling_and_enabling_fts3_and_fts4</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="releaselog/3_6_8.html">releaselog/3_6_8.html</a>
+<li>SQLITE_ENABLE_FTS3_TOKENIZER &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+<li>SQLITE_ENABLE_FTS5 &rarr; <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>SQLITE_ENABLE_JSON1 &rarr; <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>SQLITE_ENABLE_MEMORY_MANAGEMENT &rarr; <a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a>
+ <a href="c3ref/release_memory.html">c3ref/release_memory.html</a>
+ <a href="capi3ref.html#sqlite3_db_release_memory">capi3ref.html#sqlite3_db_release_memory</a>
+ <a href="capi3ref.html#sqlite3_release_memory">capi3ref.html#sqlite3_release_memory</a>
+ <a href="changes.html#version_3_7_3">changes.html#version_3_7_3</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a>
+<li>SQLITE_ENABLE_MEMSYS3 &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">c3ref/c_config_covering_index_scan.html#sqliteconfigheap</a>
+ <a href="capi3ref.html#sqliteconfigheap">capi3ref.html#sqliteconfigheap</a>
+ <a href="malloc.html#memsysx">malloc.html#memsysx</a>
+<li>SQLITE_ENABLE_MEMSYS5 &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">c3ref/c_config_covering_index_scan.html#sqliteconfigheap</a>
+ <a href="capi3ref.html#sqliteconfigheap">capi3ref.html#sqliteconfigheap</a>
+ <a href="malloc.html#memsys5">malloc.html#memsys5</a>
+<li>SQLITE_ENABLE_NORMALIZE &rarr; <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+<li>SQLITE_ENABLE_NULL_TRIM &rarr; <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+<li>SQLITE_ENABLE_PREUPDATE_HOOK &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+<li>SQLITE_ENABLE_QPSG &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="queryplanner-ng.html#qpstab">queryplanner-ng.html#qpstab</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>SQLITE_ENABLE_RBU &rarr; <a href="rbu.html">rbu.html</a>
+<li>SQLITE_ENABLE_RTREE &rarr; <a href="rtree.html">rtree.html</a>
+<li>SQLITE_ENABLE_SNAPSHOT &rarr; <a href="c3ref/snapshot_cmp.html">c3ref/snapshot_cmp.html</a>
+ <a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a>
+ <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a>
+ <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>
+ <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot_cmp">capi3ref.html#sqlite3_snapshot_cmp</a>
+ <a href="capi3ref.html#sqlite3_snapshot_free">capi3ref.html#sqlite3_snapshot_free</a>
+ <a href="capi3ref.html#sqlite3_snapshot_get">capi3ref.html#sqlite3_snapshot_get</a>
+ <a href="capi3ref.html#sqlite3_snapshot_open">capi3ref.html#sqlite3_snapshot_open</a>
+ <a href="capi3ref.html#sqlite3_snapshot_recover">capi3ref.html#sqlite3_snapshot_recover</a>
+<li>SQLITE_ENABLE_SORTER_REFERENCES &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsorterrefsize">c3ref/c_config_covering_index_scan.html#sqliteconfigsorterrefsize</a>
+ <a href="capi3ref.html#sqliteconfigsorterrefsize">capi3ref.html#sqliteconfigsorterrefsize</a>
+<li>SQLITE_ENABLE_SQLLOG &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsqllog">c3ref/c_config_covering_index_scan.html#sqliteconfigsqllog</a>
+ <a href="capi3ref.html#sqliteconfigsqllog">capi3ref.html#sqliteconfigsqllog</a>
+<li>SQLITE_ENABLE_STAT2 &rarr; <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="changes.html#version_3_6_20">changes.html#version_3_6_20</a>
+ <a href="changes.html#version_3_7_6">changes.html#version_3_7_6</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="releaselog/3_6_20.html">releaselog/3_6_20.html</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>SQLITE_ENABLE_STAT3 &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="changes.html#version_3_8_3_1">changes.html#version_3_8_3_1</a>
+ <a href="compile.html#enable_stat2">compile.html#enable_stat2</a>
+ <a href="compile.html#enable_stat4">compile.html#enable_stat4</a>
+ <a href="fileformat2.html#stat3tab">fileformat2.html#stat3tab</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#rangequery">optoverview.html#rangequery</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="releaselog/3_8_3_1.html">releaselog/3_8_3_1.html</a>
+<li>SQLITE_ENABLE_STAT4 &rarr; <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="changes.html#version_3_8_3_1">changes.html#version_3_8_3_1</a>
+ <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="compile.html#enable_stat3">compile.html#enable_stat3</a>
+ <a href="fileformat2.html#stat3tab">fileformat2.html#stat3tab</a>
+ <a href="fileformat2.html#stat4tab">fileformat2.html#stat4tab</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#rangequery">optoverview.html#rangequery</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="releaselog/3_8_3_1.html">releaselog/3_8_3_1.html</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>SQLITE_ENABLE_STMT_SCANSTATUS &rarr; <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a>
+ <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_scanstatus">capi3ref.html#sqlite3_stmt_scanstatus</a>
+ <a href="capi3ref.html#sqlite3_stmt_scanstatus_reset">capi3ref.html#sqlite3_stmt_scanstatus_reset</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>SQLITE_ENABLE_STMTVTAB &rarr; <a href="stmt.html">stmt.html</a>
+<li>SQLITE_ENABLE_TREE_EXPLAIN &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>SQLITE_ENABLE_UNLOCK_NOTIFY &rarr; <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>
+ <a href="capi3ref.html#sqlite3_unlock_notify">capi3ref.html#sqlite3_unlock_notify</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+<li>SQLITE_ENABLE_UPDATE_DELETE_LIMIT &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_6_4">changes.html#version_3_6_4</a>
+ <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_update.html#upfrom">lang_update.html#upfrom</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a>
+<li>SQLITE_ERROR &rarr; <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex">c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">c3ref/c_config_covering_index_scan.html#sqliteconfigheap</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">c3ref/c_config_covering_index_scan.html#sqliteconfigmutex</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">c3ref/c_config_covering_index_scan.html#sqliteconfigserialized</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html#sqlite3_blob_read">capi3ref.html#sqlite3_blob_read</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_win32_set_directory">capi3ref.html#sqlite3_win32_set_directory</a>
+ <a href="capi3ref.html#sqliteconfiggetmutex">capi3ref.html#sqliteconfiggetmutex</a>
+ <a href="capi3ref.html#sqliteconfigheap">capi3ref.html#sqliteconfigheap</a>
+ <a href="capi3ref.html#sqliteconfigmultithread">capi3ref.html#sqliteconfigmultithread</a>
+ <a href="capi3ref.html#sqliteconfigmutex">capi3ref.html#sqliteconfigmutex</a>
+ <a href="capi3ref.html#sqliteconfigserialized">capi3ref.html#sqliteconfigserialized</a>
+ <a href="capi3ref.html#sqliteconfigsinglethread">capi3ref.html#sqliteconfigsinglethread</a>
+ <a href="changes.html#version_3_6_15">changes.html#version_3_6_15</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="releaselog/3_6_15.html">releaselog/3_6_15.html</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+<li>SQLITE_ERROR_RETRY &rarr; <a href="rescode.html#error_missing_collseq">rescode.html#error_missing_collseq</a>
+<li>SQLITE_EXTRA_DURABLE &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>SQLITE_FAIL &rarr; <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_on_conflict">capi3ref.html#sqlite3_vtab_on_conflict</a>
+<li>SQLITE_FCNTL_BEGIN_ATOMIC_WRITE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite</a>
+ <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a>
+ <a href="capi3ref.html#SQLITE_IOCAP_ATOMIC">capi3ref.html#SQLITE_IOCAP_ATOMIC</a>
+ <a href="capi3ref.html#sqlitefcntlbeginatomicwrite">capi3ref.html#sqlitefcntlbeginatomicwrite</a>
+ <a href="capi3ref.html#sqlitefcntlcommitatomicwrite">capi3ref.html#sqlitefcntlcommitatomicwrite</a>
+ <a href="capi3ref.html#sqlitefcntlrollbackatomicwrite">capi3ref.html#sqlitefcntlrollbackatomicwrite</a>
+ <a href="compile.html#enable_batch_atomic_write">compile.html#enable_batch_atomic_write</a>
+ <a href="rescode.html#ioerr_begin_atomic">rescode.html#ioerr_begin_atomic</a>
+<li>SQLITE_FCNTL_BUSYHANDLER &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler</a>
+ <a href="capi3ref.html#sqlitefcntlbusyhandler">capi3ref.html#sqlitefcntlbusyhandler</a>
+ <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+<li>SQLITE_FCNTL_CHUNK_SIZE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize</a>
+ <a href="capi3ref.html#sqlitefcntlchunksize">capi3ref.html#sqlitefcntlchunksize</a>
+ <a href="changes.html#version_3_7_1">changes.html#version_3_7_1</a>
+ <a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a>
+<li>SQLITE_FCNTL_CKPT_DONE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptdone">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptdone</a>
+ <a href="capi3ref.html#sqlitefcntlckptdone">capi3ref.html#sqlitefcntlckptdone</a>
+<li>SQLITE_FCNTL_CKPT_START &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptstart">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptstart</a>
+ <a href="capi3ref.html#sqlitefcntlckptstart">capi3ref.html#sqlitefcntlckptstart</a>
+<li>SQLITE_FCNTL_COMMIT_ATOMIC_WRITE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite</a>
+ <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a>
+ <a href="capi3ref.html#SQLITE_IOCAP_ATOMIC">capi3ref.html#SQLITE_IOCAP_ATOMIC</a>
+ <a href="capi3ref.html#sqlitefcntlbeginatomicwrite">capi3ref.html#sqlitefcntlbeginatomicwrite</a>
+ <a href="capi3ref.html#sqlitefcntlcommitatomicwrite">capi3ref.html#sqlitefcntlcommitatomicwrite</a>
+ <a href="compile.html#enable_batch_atomic_write">compile.html#enable_batch_atomic_write</a>
+ <a href="rescode.html#ioerr_commit_atomic">rescode.html#ioerr_commit_atomic</a>
+<li>SQLITE_FCNTL_COMMIT_PHASETWO &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo</a>
+ <a href="capi3ref.html#sqlitefcntlcommitphasetwo">capi3ref.html#sqlitefcntlcommitphasetwo</a>
+<li>SQLITE_FCNTL_DATA_VERSION &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+ <a href="capi3ref.html#sqlitefcntldataversion">capi3ref.html#sqlitefcntldataversion</a>
+ <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>SQLITE_FCNTL_EXTERNAL_READER &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlexternalreader">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlexternalreader</a>
+ <a href="capi3ref.html#sqlitefcntlexternalreader">capi3ref.html#sqlitefcntlexternalreader</a>
+<li>SQLITE_FCNTL_FILE_POINTER &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlitefcntlfilepointer">capi3ref.html#sqlitefcntlfilepointer</a>
+ <a href="capi3ref.html#sqlitefcntljournalpointer">capi3ref.html#sqlitefcntljournalpointer</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+<li>SQLITE_FCNTL_HAS_MOVED &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlhasmoved">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlhasmoved</a>
+ <a href="capi3ref.html#sqlitefcntlhasmoved">capi3ref.html#sqlitefcntlhasmoved</a>
+<li>SQLITE_FCNTL_JOURNAL_POINTER &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlitefcntlfilepointer">capi3ref.html#sqlitefcntlfilepointer</a>
+ <a href="capi3ref.html#sqlitefcntljournalpointer">capi3ref.html#sqlitefcntljournalpointer</a>
+ <a href="changes.html#version_3_10_1">changes.html#version_3_10_1</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>SQLITE_FCNTL_LOCK_TIMEOUT &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllocktimeout">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllocktimeout</a>
+ <a href="capi3ref.html#sqlitefcntllocktimeout">capi3ref.html#sqlitefcntllocktimeout</a>
+<li>SQLITE_FCNTL_LOCKSTATE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate</a>
+ <a href="capi3ref.html#sqlitefcntllockstate">capi3ref.html#sqlitefcntllockstate</a>
+<li>SQLITE_FCNTL_MMAP_SIZE &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize</a>
+ <a href="capi3ref.html#sqliteconfigmmapsize">capi3ref.html#sqliteconfigmmapsize</a>
+ <a href="capi3ref.html#sqlitefcntlmmapsize">capi3ref.html#sqlitefcntlmmapsize</a>
+ <a href="compile.html#max_mmap_size">compile.html#max_mmap_size</a>
+<li>SQLITE_FCNTL_OVERWRITE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite</a>
+ <a href="capi3ref.html#sqlitefcntloverwrite">capi3ref.html#sqlitefcntloverwrite</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+<li>SQLITE_FCNTL_PERSIST_WAL &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal</a>
+ <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot_recover">capi3ref.html#sqlite3_snapshot_recover</a>
+ <a href="capi3ref.html#sqlitefcntlpersistwal">capi3ref.html#sqlitefcntlpersistwal</a>
+ <a href="wal.html#walfile">wal.html#walfile</a>
+ <a href="walformat.html#locks">walformat.html#locks</a>
+ <a href="walformat.html#shm">walformat.html#shm</a>
+<li>SQLITE_FCNTL_POWERSAFE_OVERWRITE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite</a>
+ <a href="capi3ref.html#sqlitefcntlpowersafeoverwrite">capi3ref.html#sqlitefcntlpowersafeoverwrite</a>
+ <a href="psow.html#tornpage">psow.html#tornpage</a>
+<li>SQLITE_FCNTL_PRAGMA &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma</a>
+ <a href="capi3ref.html#sqlitefcntlpragma">capi3ref.html#sqlitefcntlpragma</a>
+ <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="pragma.html">pragma.html</a>
+ <a href="pragma.html#pragfunc">pragma.html#pragfunc</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+<li>SQLITE_FCNTL_RBU &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrbu">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrbu</a>
+ <a href="capi3ref.html#sqlitefcntlrbu">capi3ref.html#sqlitefcntlrbu</a>
+<li>SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite</a>
+ <a href="capi3ref.html#sqlitefcntlbeginatomicwrite">capi3ref.html#sqlitefcntlbeginatomicwrite</a>
+ <a href="capi3ref.html#sqlitefcntlrollbackatomicwrite">capi3ref.html#sqlitefcntlrollbackatomicwrite</a>
+ <a href="rescode.html#ioerr_rollback_atomic">rescode.html#ioerr_rollback_atomic</a>
+<li>SQLITE_FCNTL_SIZE_HINT &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint</a>
+ <a href="capi3ref.html#sqlitefcntlbeginatomicwrite">capi3ref.html#sqlitefcntlbeginatomicwrite</a>
+ <a href="capi3ref.html#sqlitefcntlsizehint">capi3ref.html#sqlitefcntlsizehint</a>
+ <a href="changes.html#version_3_7_6_1">changes.html#version_3_7_6_1</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_6_1.html">releaselog/3_7_6_1.html</a>
+<li>SQLITE_FCNTL_SIZE_LIMIT &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit</a>
+ <a href="capi3ref.html#sqliteconfigmemdbmaxsize">capi3ref.html#sqliteconfigmemdbmaxsize</a>
+ <a href="capi3ref.html#sqlitefcntlsizelimit">capi3ref.html#sqlitefcntlsizelimit</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="compile.html#memdb_default_maxsize">compile.html#memdb_default_maxsize</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>SQLITE_FCNTL_SYNC &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync</a>
+ <a href="capi3ref.html#sqlitefcntlsync">capi3ref.html#sqlitefcntlsync</a>
+<li>SQLITE_FCNTL_SYNC_OMITTED &rarr; <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+<li>SQLITE_FCNTL_TEMPFILENAME &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename</a>
+ <a href="capi3ref.html#sqlitefcntltempfilename">capi3ref.html#sqlitefcntltempfilename</a>
+<li>SQLITE_FCNTL_TRACE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace</a>
+ <a href="capi3ref.html#sqlitefcntltrace">capi3ref.html#sqlitefcntltrace</a>
+ <a href="compile.html#use_fcntl_trace">compile.html#use_fcntl_trace</a>
+<li>SQLITE_FCNTL_VFS_POINTER &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer</a>
+ <a href="c3ref/file_control.html">c3ref/file_control.html</a>
+ <a href="capi3ref.html#sqlite3_file_control">capi3ref.html#sqlite3_file_control</a>
+ <a href="capi3ref.html#sqlitefcntlvfspointer">capi3ref.html#sqlitefcntlvfspointer</a>
+<li>SQLITE_FCNTL_VFSNAME &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname</a>
+ <a href="capi3ref.html#sqlitefcntlvfsname">capi3ref.html#sqlitefcntlvfsname</a>
+<li>SQLITE_FCNTL_WAL_BLOCK &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwalblock">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwalblock</a>
+ <a href="capi3ref.html#sqlitefcntlwalblock">capi3ref.html#sqlitefcntlwalblock</a>
+<li>SQLITE_FCNTL_WIN32_AV_RETRY &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry</a>
+ <a href="capi3ref.html#sqlitefcntlwin32avretry">capi3ref.html#sqlitefcntlwin32avretry</a>
+<li>SQLITE_FCNTL_WIN32_GET_HANDLE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle</a>
+ <a href="capi3ref.html#sqlitefcntlwin32gethandle">capi3ref.html#sqlitefcntlwin32gethandle</a>
+ <a href="changes.html#version_3_15_1">changes.html#version_3_15_1</a>
+ <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>SQLITE_FCNTL_WIN32_SET_HANDLE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32sethandle">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32sethandle</a>
+ <a href="capi3ref.html#sqlitefcntlwin32sethandle">capi3ref.html#sqlitefcntlwin32sethandle</a>
+<li>SQLITE_FCNTL_ZIPVFS &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlzipvfs">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlzipvfs</a>
+ <a href="capi3ref.html#sqlitefcntlzipvfs">capi3ref.html#sqlitefcntlzipvfs</a>
+<li>SQLITE_FLOAT &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>SQLITE_FTS3_MAX_EXPR_DEPTH &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>SQLITE_FULL &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="autoinc.html">autoinc.html</a>
+ <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>
+ <a href="capi3ref.html#sqlite3_get_autocommit">capi3ref.html#sqlite3_get_autocommit</a>
+ <a href="changes.html#version_3_5_1">changes.html#version_3_5_1</a>
+ <a href="faq.html#q1">faq.html#q1</a>
+ <a href="fileformat2.html#seqtab">fileformat2.html#seqtab</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="releaselog/3_5_1.html">releaselog/3_5_1.html</a>
+ <a href="rescode.html#ioerr">rescode.html#ioerr</a>
+ <a href="vfs.html#shim">vfs.html#shim</a>
+<li>SQLITE_HAVE_ISNAN &rarr; <a href="changes.html#version_3_6_14">changes.html#version_3_6_14</a>
+ <a href="releaselog/3_6_14.html">releaselog/3_6_14.html</a>
+<li>SQLITE_IGNORE &rarr; <a href="c3ref/c_fail.html">c3ref/c_fail.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html#SQLITE_FAIL">capi3ref.html#SQLITE_FAIL</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_vtab_on_conflict">capi3ref.html#sqlite3_vtab_on_conflict</a>
+ <a href="lang_delete.html#truncateopt">lang_delete.html#truncateopt</a>
+<li>SQLITE_INDEX_CONSTRAINT_EQ &rarr; <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+<li>SQLITE_INDEX_CONSTRAINT_FUNCTION &rarr; <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>SQLITE_INDEX_CONSTRAINT_ISNOTNULL &rarr; <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_rhs_value">capi3ref.html#sqlite3_vtab_rhs_value</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+<li>SQLITE_INDEX_CONSTRAINT_ISNULL &rarr; <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_rhs_value">capi3ref.html#sqlite3_vtab_rhs_value</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+<li>SQLITE_INDEX_CONSTRAINT_LIMIT &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>SQLITE_INDEX_CONSTRAINT_OFFSET &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+<li>SQLITE_INNOCUOUS &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="appfunc.html#sec">appfunc.html#sec</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema</a>
+ <a href="capi3ref.html#sqlitedbconfigtrustedschema">capi3ref.html#sqlitedbconfigtrustedschema</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>SQLITE_INSERT &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="session.html#sqlite3changeset_new">session.html#sqlite3changeset_new</a>
+ <a href="session.html#sqlite3changeset_op">session.html#sqlite3changeset_op</a>
+ <a href="session/sqlite3changeset_new.html">session/sqlite3changeset_new.html</a>
+ <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a>
+<li>SQLITE_INTEGER &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>SQLITE_INTERRUPT &rarr; <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>
+ <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#sqlite3_get_autocommit">capi3ref.html#sqlite3_get_autocommit</a>
+ <a href="capi3ref.html#sqlite3_interrupt">capi3ref.html#sqlite3_interrupt</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="rescode.html#abort">rescode.html#abort</a>
+<li>SQLITE_IOCAP_ATOMIC &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="compile.html#enable_atomic_write">compile.html#enable_atomic_write</a>
+ <a href="psow.html#tornpage">psow.html#tornpage</a>
+<li>SQLITE_IOCAP_ATOMIC16K &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_ATOMIC1K &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_ATOMIC2K &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_ATOMIC32K &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_ATOMIC4K &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_ATOMIC512 &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_ATOMIC64K &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_ATOMIC8K &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_BATCH_ATOMIC &rarr; <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_IMMUTABLE &rarr; <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a>
+ <a href="capi3ref.html#coreuriqueryparameters">capi3ref.html#coreuriqueryparameters</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+ <a href="uri.html#uriimmutable">uri.html#uriimmutable</a>
+<li>SQLITE_IOCAP_POWERSAFE_OVERWRITE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="capi3ref.html#sqlitefcntlpowersafeoverwrite">capi3ref.html#sqlitefcntlpowersafeoverwrite</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="psow.html#tornpage">psow.html#tornpage</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>SQLITE_IOCAP_SAFE_APPEND &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_SEQUENTIAL &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN &rarr; <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_IOERR &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>
+ <a href="capi3ref.html#sqlite3_get_autocommit">capi3ref.html#sqlite3_get_autocommit</a>
+ <a href="changes.html#version_3_5_1">changes.html#version_3_5_1</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="releaselog/3_5_1.html">releaselog/3_5_1.html</a>
+ <a href="rescode.html#ioerr_access">rescode.html#ioerr_access</a>
+ <a href="rescode.html#ioerr_checkreservedlock">rescode.html#ioerr_checkreservedlock</a>
+ <a href="rescode.html#ioerr_close">rescode.html#ioerr_close</a>
+ <a href="rescode.html#ioerr_convpath">rescode.html#ioerr_convpath</a>
+ <a href="rescode.html#ioerr_corruptfs">rescode.html#ioerr_corruptfs</a>
+ <a href="rescode.html#ioerr_data">rescode.html#ioerr_data</a>
+ <a href="rescode.html#ioerr_delete">rescode.html#ioerr_delete</a>
+ <a href="rescode.html#ioerr_delete_noent">rescode.html#ioerr_delete_noent</a>
+ <a href="rescode.html#ioerr_dir_fsync">rescode.html#ioerr_dir_fsync</a>
+ <a href="rescode.html#ioerr_fstat">rescode.html#ioerr_fstat</a>
+ <a href="rescode.html#ioerr_fsync">rescode.html#ioerr_fsync</a>
+ <a href="rescode.html#ioerr_gettemppath">rescode.html#ioerr_gettemppath</a>
+ <a href="rescode.html#ioerr_lock">rescode.html#ioerr_lock</a>
+ <a href="rescode.html#ioerr_mmap">rescode.html#ioerr_mmap</a>
+ <a href="rescode.html#ioerr_rdlock">rescode.html#ioerr_rdlock</a>
+ <a href="rescode.html#ioerr_read">rescode.html#ioerr_read</a>
+ <a href="rescode.html#ioerr_seek">rescode.html#ioerr_seek</a>
+ <a href="rescode.html#ioerr_shmmap">rescode.html#ioerr_shmmap</a>
+ <a href="rescode.html#ioerr_shmopen">rescode.html#ioerr_shmopen</a>
+ <a href="rescode.html#ioerr_shmsize">rescode.html#ioerr_shmsize</a>
+ <a href="rescode.html#ioerr_short_read">rescode.html#ioerr_short_read</a>
+ <a href="rescode.html#ioerr_truncate">rescode.html#ioerr_truncate</a>
+ <a href="rescode.html#ioerr_unlock">rescode.html#ioerr_unlock</a>
+ <a href="rescode.html#ioerr_write">rescode.html#ioerr_write</a>
+<li>SQLITE_IOERR_ACCESS &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+<li>SQLITE_IOERR_CHECKRESERVEDLOCK &rarr; <a href="35to36.html">35to36.html</a>
+<li>SQLITE_IOERR_CONVPATH &rarr; <a href="rescode.html#cantopen_convpath">rescode.html#cantopen_convpath</a>
+<li>SQLITE_IOERR_FSTAT &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_IOERR_FSYNC &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_IOERR_RDLOCK &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_IOERR_READ &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_IOERR_SHORT_READ &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_IOERR_TRUNCATE &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_IOERR_UNLOCK &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_IOERR_WRITE &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_LIKE_DOESNT_MATCH_BLOBS &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>SQLITE_LIMIT_ATTACHED &rarr; <a href="lang_attach.html">lang_attach.html</a>
+ <a href="limits.html#max_attached">limits.html#max_attached</a>
+<li>SQLITE_LIMIT_COLUMN &rarr; <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="limits.html#max_column">limits.html#max_column</a>
+<li>SQLITE_LIMIT_COMPOUND_SELECT &rarr; <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="lang_select.html#values">lang_select.html#values</a>
+ <a href="limits.html#max_compound_select">limits.html#max_compound_select</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>SQLITE_LIMIT_EXPR_DEPTH &rarr; <a href="limits.html#max_expr_depth">limits.html#max_expr_depth</a>
+<li>SQLITE_LIMIT_FUNCTION_ARG &rarr; <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="limits.html#max_function_arg">limits.html#max_function_arg</a>
+<li>SQLITE_LIMIT_LENGTH &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="c3ref/str_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+ <a href="capi3ref.html#sqlite3_str_new">capi3ref.html#sqlite3_str_new</a>
+ <a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a>
+ <a href="limits.html">limits.html</a>
+ <a href="limits.html#max_length">limits.html#max_length</a>
+ <a href="rescode.html#toobig">rescode.html#toobig</a>
+<li>SQLITE_LIMIT_LIKE_PATTERN_LENGTH &rarr; <a href="limits.html#max_like_pattern_length">limits.html#max_like_pattern_length</a>
+<li>SQLITE_LIMIT_SQL_LENGTH &rarr; <a href="changes.html#version_3_39_1">changes.html#version_3_39_1</a>
+ <a href="limits.html#max_sql_length">limits.html#max_sql_length</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="rescode.html#toobig">rescode.html#toobig</a>
+<li>SQLITE_LIMIT_TRIGGER_DEPTH &rarr; <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="pragma.html#pragma_recursive_triggers">pragma.html#pragma_recursive_triggers</a>
+<li>SQLITE_LIMIT_VARIABLE_NUMBER &rarr; <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>
+ <a href="capi3ref.html#sqlite3_bind_blob">capi3ref.html#sqlite3_bind_blob</a>
+ <a href="lang_expr.html#varparam">lang_expr.html#varparam</a>
+ <a href="limits.html#max_variable_number">limits.html#max_variable_number</a>
+<li>SQLITE_LIMIT_VDBE_OP &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>SQLITE_LIMIT_WORKER_THREADS &rarr; <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="compile.html#default_worker_threads">compile.html#default_worker_threads</a>
+ <a href="compile.html#max_worker_threads">compile.html#max_worker_threads</a>
+ <a href="pragma.html#pragma_threads">pragma.html#pragma_threads</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>SQLITE_LOCK_EXCLUSIVE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="capi3ref.html#sqlitefcntllockstate">capi3ref.html#sqlitefcntllockstate</a>
+<li>SQLITE_LOCK_NONE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="capi3ref.html#sqlitefcntllockstate">capi3ref.html#sqlitefcntllockstate</a>
+<li>SQLITE_LOCK_PENDING &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="capi3ref.html#sqlitefcntllockstate">capi3ref.html#sqlitefcntllockstate</a>
+<li>SQLITE_LOCK_RESERVED &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="capi3ref.html#sqlitefcntllockstate">capi3ref.html#sqlitefcntllockstate</a>
+<li>SQLITE_LOCK_SHARED &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="capi3ref.html#sqlitefcntllockstate">capi3ref.html#sqlitefcntllockstate</a>
+<li>SQLITE_LOCKED &rarr; <a href="c3ref/backup_finish.html#sqlite3backupfinish">c3ref/backup_finish.html#sqlite3backupfinish</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>
+ <a href="capi3ref.html#sqlite3_unlock_notify">capi3ref.html#sqlite3_unlock_notify</a>
+ <a href="capi3ref.html#sqlite3backupfinish">capi3ref.html#sqlite3backupfinish</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a>
+ <a href="rescode.html#busy">rescode.html#busy</a>
+ <a href="rtree.html#readwrite">rtree.html#readwrite</a>
+<li>sqlite_master table &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>SQLITE_MAX_ALLOCATION_SIZE &rarr; <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+ <a href="security.html">security.html</a>
+<li>SQLITE_MAX_ATTACHED &rarr; <a href="changes.html#version_3_7_6">changes.html#version_3_7_6</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>SQLITE_MAX_COLUMN &rarr; <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>
+<li>SQLITE_MAX_COMPOUND_SELECT &rarr; <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+<li>SQLITE_MAX_EXPR_DEPTH &rarr; <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="footprint.html">footprint.html</a>
+<li>SQLITE_MAX_FUNCTION_ARG &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+<li>SQLITE_MAX_LENGTH &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>
+ <a href="c3ref/str_new.html">c3ref/str_new.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_str_errcode">capi3ref.html#sqlite3_str_errcode</a>
+ <a href="capi3ref.html#sqlite3_str_new">capi3ref.html#sqlite3_str_new</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="datatype3.html#affname">datatype3.html#affname</a>
+ <a href="fts5.html#_summary_of_technical_differences_">fts5.html#_summary_of_technical_differences_</a>
+ <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>
+ <a href="rescode.html#toobig">rescode.html#toobig</a>
+<li>SQLITE_MAX_LIKE_PATTERN_LENGTH &rarr; <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+<li>SQLITE_MAX_MEMORY &rarr; <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="compile.html#default_memstatus">compile.html#default_memstatus</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+<li>SQLITE_MAX_MMAP_SIZE &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize</a>
+ <a href="capi3ref.html#sqliteconfigmmapsize">capi3ref.html#sqliteconfigmmapsize</a>
+ <a href="compile.html#default_mmap_size">compile.html#default_mmap_size</a>
+ <a href="mmap.html">mmap.html</a>
+ <a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a>
+<li>SQLITE_MAX_PAGE_COUNT &rarr; <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+<li>SQLITE_MAX_SCHEMA_RETRY &rarr; <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="rescode.html#schema">rescode.html#schema</a>
+<li>SQLITE_MAX_SQL_LENGTH &rarr; <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="rescode.html#toobig">rescode.html#toobig</a>
+<li>SQLITE_MAX_TRIGGER_DEPTH &rarr; <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="pragma.html#pragma_recursive_triggers">pragma.html#pragma_recursive_triggers</a>
+<li>SQLITE_MAX_VARIABLE_NUMBER &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="compile.html#yystackdepth">compile.html#yystackdepth</a>
+ <a href="lang_expr.html#varparam">lang_expr.html#varparam</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>SQLITE_MAX_WORKER_THREADS &rarr; <a href="compile.html#default_worker_threads">compile.html#default_worker_threads</a>
+<li>SQLITE_MEMDB_DEFAULT_MAXSIZE &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize</a>
+ <a href="capi3ref.html#sqliteconfigmemdbmaxsize">capi3ref.html#sqliteconfigmemdbmaxsize</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>SQLITE_MEMDEBUG &rarr; <a href="malloc.html">malloc.html</a>
+ <a href="malloc.html#memdebug">malloc.html#memdebug</a>
+ <a href="testing.html#memtesting">testing.html#memtesting</a>
+ <a href="th3.html">th3.html</a>
+<li>sqlite_memstat &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>SQLITE_MINIMUM_FILE_DESCRIPTOR &rarr; <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="howtocorrupt.html#stalefd">howtocorrupt.html#stalefd</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+<li>SQLITE_MISUSE &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_vtab_in_first">capi3ref.html#sqlite3_vtab_in_first</a>
+ <a href="changes.html#version_3_5_3">changes.html#version_3_5_3</a>
+ <a href="changes.html#version_3_6_15">changes.html#version_3_6_15</a>
+ <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a>
+ <a href="releaselog/3_5_3.html">releaselog/3_5_3.html</a>
+ <a href="releaselog/3_6_15.html">releaselog/3_6_15.html</a>
+ <a href="session.html#sqlite3changeset_conflict">session.html#sqlite3changeset_conflict</a>
+ <a href="session.html#sqlite3changeset_finalize">session.html#sqlite3changeset_finalize</a>
+ <a href="session.html#sqlite3changeset_new">session.html#sqlite3changeset_new</a>
+ <a href="session.html#sqlite3changeset_old">session.html#sqlite3changeset_old</a>
+ <a href="session.html#sqlite3changeset_op">session.html#sqlite3changeset_op</a>
+ <a href="session/sqlite3changeset_conflict.html">session/sqlite3changeset_conflict.html</a>
+ <a href="session/sqlite3changeset_finalize.html">session/sqlite3changeset_finalize.html</a>
+ <a href="session/sqlite3changeset_new.html">session/sqlite3changeset_new.html</a>
+ <a href="session/sqlite3changeset_old.html">session/sqlite3changeset_old.html</a>
+ <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a>
+<li>SQLITE_MUTEX_FAST &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_MUTEX_RECURSIVE &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_MUTEX_STATIC_LRU &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_MUTEX_STATIC_MAIN &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mem_methods">capi3ref.html#sqlite3_mem_methods</a>
+<li>SQLITE_MUTEX_STATIC_MEM &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>
+ <a href="capi3ref.html#sqlite3_mem_methods">capi3ref.html#sqlite3_mem_methods</a>
+<li>SQLITE_MUTEX_STATIC_MEM2 &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_MUTEX_STATIC_PRNG &rarr; <a href="34to35.html">34to35.html</a>
+<li>SQLITE_MUTEX_STATIC_VFS1 &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>SQLITE_NOMEM &rarr; <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>
+ <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>
+ <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_get_autocommit">capi3ref.html#sqlite3_get_autocommit</a>
+ <a href="capi3ref.html#sqlite3_hard_heap_limit64">capi3ref.html#sqlite3_hard_heap_limit64</a>
+ <a href="capi3ref.html#sqlite3_str_errcode">capi3ref.html#sqlite3_str_errcode</a>
+ <a href="capi3ref.html#sqlite3_win32_set_directory">capi3ref.html#sqlite3_win32_set_directory</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="rescode.html#ioerr_nomem">rescode.html#ioerr_nomem</a>
+ <a href="session.html#sqlite3changeset_finalize">session.html#sqlite3changeset_finalize</a>
+ <a href="session/sqlite3changeset_finalize.html">session/sqlite3changeset_finalize.html</a>
+ <a href="vtab.html#obc">vtab.html#obc</a>
+<li>SQLITE_NOTFOUND &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+ <a href="capi3ref.html#sqlite3_vtab_rhs_value">capi3ref.html#sqlite3_vtab_rhs_value</a>
+ <a href="capi3ref.html#sqlitefcntlpragma">capi3ref.html#sqlitefcntlpragma</a>
+ <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+<li>SQLITE_NULL &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>sqlite_offset &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="compile.html#enable_offset_sql_func">compile.html#enable_offset_sql_func</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+<li>sqlite_offset SQL function &rarr; <a href="changes.html#version_3_38_1">changes.html#version_3_38_1</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>SQLITE_OK &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupfinish">c3ref/backup_finish.html#sqlite3backupfinish</a>
+ <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/c_deny.html">c3ref/c_deny.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma</a>
+ <a href="c3ref/close.html">c3ref/close.html</a>
+ <a href="c3ref/config.html">c3ref/config.html</a>
+ <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="c3ref/initialize.html">c3ref/initialize.html</a>
+ <a href="c3ref/intro.html">c3ref/intro.html</a>
+ <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>
+ <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxaccess">c3ref/vfs.html#sqlite3vfsxaccess</a>
+ <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>
+ <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a>
+ <a href="capi3ref.html#SQLITE_DENY">capi3ref.html#SQLITE_DENY</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_close">capi3ref.html#sqlite3_close</a>
+ <a href="capi3ref.html#sqlite3_config">capi3ref.html#sqlite3_config</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="capi3ref.html#sqlite3_initialize">capi3ref.html#sqlite3_initialize</a>
+ <a href="capi3ref.html#sqlite3_load_extension">capi3ref.html#sqlite3_load_extension</a>
+ <a href="capi3ref.html#sqlite3_mutex_alloc">capi3ref.html#sqlite3_mutex_alloc</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_str_errcode">capi3ref.html#sqlite3_str_errcode</a>
+ <a href="capi3ref.html#sqlite3_wal_hook">capi3ref.html#sqlite3_wal_hook</a>
+ <a href="capi3ref.html#sqlite3_win32_set_directory">capi3ref.html#sqlite3_win32_set_directory</a>
+ <a href="capi3ref.html#sqlite3backupfinish">capi3ref.html#sqlite3backupfinish</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="capi3ref.html#sqlite3vfsxaccess">capi3ref.html#sqlite3vfsxaccess</a>
+ <a href="capi3ref.html#sqlitefcntlcommitatomicwrite">capi3ref.html#sqlitefcntlcommitatomicwrite</a>
+ <a href="capi3ref.html#sqlitefcntlpragma">capi3ref.html#sqlitefcntlpragma</a>
+ <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a>
+ <a href="rescode.html">rescode.html</a>
+ <a href="vtab.html#xcolumn">vtab.html#xcolumn</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="vtab.html#xfilter">vtab.html#xfilter</a>
+ <a href="vtab.html#xnext">vtab.html#xnext</a>
+ <a href="vtab.html#xopen">vtab.html#xopen</a>
+ <a href="vtab.html#xrename">vtab.html#xrename</a>
+ <a href="vtab.html#xrowid">vtab.html#xrowid</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>SQLITE_OK_LOAD_PERMANENTLY &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="loadext.html#persist">loadext.html#persist</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>SQLITE_OMIT_ALTERTABLE &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_ANALYZE &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_ATTACH &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_AUTOINCREMENT &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_AUTOINIT &rarr; <a href="c3ref/initialize.html">c3ref/initialize.html</a>
+ <a href="capi3ref.html#sqlite3_initialize">capi3ref.html#sqlite3_initialize</a>
+ <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+<li>SQLITE_OMIT_AUTOMATIC_INDEX &rarr; <a href="compile.html#default_automatic_index">compile.html#default_automatic_index</a>
+ <a href="optoverview.html#autoindex">optoverview.html#autoindex</a>
+<li>SQLITE_OMIT_AUTORESET &rarr; <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="changes.html#version_3_8_9">changes.html#version_3_8_9</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a>
+<li>SQLITE_OMIT_BUILTIN_TEST &rarr; <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>SQLITE_OMIT_CAST &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_COMPILEOPTION_DIAGS &rarr; <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a>
+ <a href="capi3ref.html#sqlite3_compileoption_get">capi3ref.html#sqlite3_compileoption_get</a>
+<li>SQLITE_OMIT_COMPOUND_SELECT &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_DATETIME_FUNCS &rarr; <a href="compile.html#gmtime_r">compile.html#gmtime_r</a>
+<li>SQLITE_OMIT_DECLTYPE &rarr; <a href="compile.html#rcmd">compile.html#rcmd</a>
+<li>SQLITE_OMIT_DEPRECATED &rarr; <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a>
+ <a href="pragma.html#pragma_data_store_directory">pragma.html#pragma_data_store_directory</a>
+ <a href="pragma.html#pragma_default_cache_size">pragma.html#pragma_default_cache_size</a>
+ <a href="pragma.html#pragma_empty_result_callbacks">pragma.html#pragma_empty_result_callbacks</a>
+ <a href="pragma.html#pragma_full_column_names">pragma.html#pragma_full_column_names</a>
+ <a href="pragma.html#pragma_short_column_names">pragma.html#pragma_short_column_names</a>
+ <a href="pragma.html#pragma_temp_store_directory">pragma.html#pragma_temp_store_directory</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+<li>SQLITE_OMIT_DESERIALIZE &rarr; <a href="c3ref/deserialize.html">c3ref/deserialize.html</a>
+ <a href="c3ref/serialize.html">c3ref/serialize.html</a>
+ <a href="capi3ref.html#sqlite3_deserialize">capi3ref.html#sqlite3_deserialize</a>
+ <a href="capi3ref.html#sqlite3_serialize">capi3ref.html#sqlite3_serialize</a>
+ <a href="compile.html#enable_deserialize">compile.html#enable_deserialize</a>
+<li>SQLITE_OMIT_EXPLAIN &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_FLOATING_POINT &rarr; <a href="changes.html#version_3_3_3">changes.html#version_3_3_3</a>
+ <a href="changes.html#version_3_6_23">changes.html#version_3_6_23</a>
+ <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_3_0.html">releaselog/3_3_0.html</a>
+ <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+<li>SQLITE_OMIT_FOREIGN_KEY &rarr; <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_INTROSPECTION_PRAGMAS &rarr; <a href="compile.html#introspection_pragmas">compile.html#introspection_pragmas</a>
+<li>SQLITE_OMIT_LOAD_EXTENSION &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="howtocompile.html#cli">howtocompile.html#cli</a>
+ <a href="loadext.html#persist">loadext.html#persist</a>
+<li>SQLITE_OMIT_PRAGMA &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_PROGRESS_CALLBACK &rarr; <a href="compile.html#rcmd">compile.html#rcmd</a>
+<li>SQLITE_OMIT_REINDEX &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_SHARED_CACHE &rarr; <a href="compile.html#rcmd">compile.html#rcmd</a>
+<li>SQLITE_OMIT_SUBQUERY &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_TEMPDB &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_TRACE &rarr; <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+<li>SQLITE_OMIT_TRIGGER &rarr; <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_TRUNCATE_OPTIMIZATION &rarr; <a href="changes.html#version_3_6_4">changes.html#version_3_6_4</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="lang_delete.html#truncateopt">lang_delete.html#truncateopt</a>
+ <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+<li>SQLITE_OMIT_VACUUM &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_VIEW &rarr; <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_VIRTUALTABLE &rarr; <a href="fts3.html#compiling_and_enabling_fts3_and_fts4">fts3.html#compiling_and_enabling_fts3_and_fts4</a>
+ <a href="howtocompile.html#amal">howtocompile.html#amal</a>
+<li>SQLITE_OMIT_WINDOWFUNC &rarr; <a href="changes.html#version_3_39_1">changes.html#version_3_39_1</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+<li>SQLITE_OPEN_CREATE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_DELETEONCLOSE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_EXCLUSIVE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_EXRESCODE &rarr; <a href="c3ref/open.html#openexrescode">c3ref/open.html#openexrescode</a>
+ <a href="capi3ref.html#openexrescode">capi3ref.html#openexrescode</a>
+ <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>SQLITE_OPEN_FULLMUTEX &rarr; <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+<li>SQLITE_OPEN_MAIN_DB &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_MAIN_JOURNAL &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3_database_file_object">capi3ref.html#sqlite3_database_file_object</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_MEMORY &rarr; <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+<li>SQLITE_OPEN_NOFOLLOW &rarr; <a href="c3ref/open.html#opennofollow">c3ref/open.html#opennofollow</a>
+ <a href="capi3ref.html#opennofollow">capi3ref.html#opennofollow</a>
+ <a href="changes.html#version_3_39_0">changes.html#version_3_39_0</a>
+ <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="rescode.html#cantopen_symlink">rescode.html#cantopen_symlink</a>
+<li>SQLITE_OPEN_NOMUTEX &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+<li>SQLITE_OPEN_PRIVATECACHE &rarr; <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+<li>SQLITE_OPEN_READONLY &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/intro.html">c3ref/intro.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a>
+ <a href="c3ref/open.html#opennofollow">c3ref/open.html#opennofollow</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#coreuriqueryparameters">capi3ref.html#coreuriqueryparameters</a>
+ <a href="capi3ref.html#opennofollow">capi3ref.html#opennofollow</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_READWRITE &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_SHAREDCACHE &rarr; <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+<li>SQLITE_OPEN_SUBJOURNAL &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_SUPER_JOURNAL &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_TEMP_DB &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_TEMP_JOURNAL &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_TRANSIENT_DB &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OPEN_URI &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">c3ref/c_config_covering_index_scan.html#sqliteconfiguri</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/open.html#urifilenamesinsqlite3open">c3ref/open.html#urifilenamesinsqlite3open</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqliteconfiguri">capi3ref.html#sqliteconfiguri</a>
+ <a href="capi3ref.html#urifilenamesinsqlite3open">capi3ref.html#urifilenamesinsqlite3open</a>
+ <a href="lang_vacuum.html#vacuuminto">lang_vacuum.html#vacuuminto</a>
+ <a href="uri.html">uri.html</a>
+<li>SQLITE_OPEN_WAL &rarr; <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a>
+ <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a>
+ <a href="capi3ref.html#sqlite3_database_file_object">capi3ref.html#sqlite3_database_file_object</a>
+ <a href="capi3ref.html#sqlite3vfsxopen">capi3ref.html#sqlite3vfsxopen</a>
+<li>SQLITE_OS_OTHER &rarr; <a href="c3ref/initialize.html">c3ref/initialize.html</a>
+ <a href="capi3ref.html#sqlite3_initialize">capi3ref.html#sqlite3_initialize</a>
+<li>SQLITE_POWERSAFE_OVERWRITE &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="psow.html#tornpage">psow.html#tornpage</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>SQLITE_PREPARE_NO_VTAB &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>SQLITE_PREPARE_NORMALIZE &rarr; <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>SQLITE_PREPARE_PERSISTENT &rarr; <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>SQLITE_PROTOCOL &rarr; <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>SQLITE_QUERY_PLANNER_LIMIT &rarr; <a href="compile.html#query_planner_limit_incr">compile.html#query_planner_limit_incr</a>
+<li>SQLITE_QUERY_PLANNER_LIMIT_INCR &rarr; <a href="compile.html#query_planner_limit">compile.html#query_planner_limit</a>
+<li>SQLITE_RANGE &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="session.html#sqlite3changeset_conflict">session.html#sqlite3changeset_conflict</a>
+ <a href="session.html#sqlite3changeset_new">session.html#sqlite3changeset_new</a>
+ <a href="session.html#sqlite3changeset_old">session.html#sqlite3changeset_old</a>
+ <a href="session/sqlite3changeset_conflict.html">session/sqlite3changeset_conflict.html</a>
+ <a href="session/sqlite3changeset_new.html">session/sqlite3changeset_new.html</a>
+ <a href="session/sqlite3changeset_old.html">session/sqlite3changeset_old.html</a>
+<li>SQLITE_READ &rarr; <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>SQLITE_READONLY &rarr; <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a>
+ <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>
+ <a href="capi3ref.html#sqlite3_blob_write">capi3ref.html#sqlite3_blob_write</a>
+ <a href="capi3ref.html#sqlite3backupstep">capi3ref.html#sqlite3backupstep</a>
+ <a href="pragma.html#pragma_query_only">pragma.html#pragma_query_only</a>
+ <a href="rescode.html#readonly_cantlock">rescode.html#readonly_cantlock</a>
+ <a href="rescode.html#readonly_dbmoved">rescode.html#readonly_dbmoved</a>
+ <a href="rescode.html#readonly_recovery">rescode.html#readonly_recovery</a>
+ <a href="rescode.html#readonly_rollback">rescode.html#readonly_rollback</a>
+<li>SQLITE_READONLY_DBMOVED &rarr; <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+<li>SQLITE_REPLACE &rarr; <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_on_conflict">capi3ref.html#sqlite3_vtab_on_conflict</a>
+<li>SQLITE_REVERSE_UNORDERED_SELECTS &rarr; <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>SQLITE_ROLLBACK &rarr; <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_on_conflict">capi3ref.html#sqlite3_vtab_on_conflict</a>
+<li>SQLITE_ROW &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/data_count.html">c3ref/data_count.html</a>
+ <a href="c3ref/reset.html">c3ref/reset.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_data_count">capi3ref.html#sqlite3_data_count</a>
+ <a href="capi3ref.html#sqlite3_reset">capi3ref.html#sqlite3_reset</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="capi3ref.html#sqlite3_wal_hook">capi3ref.html#sqlite3_wal_hook</a>
+ <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a>
+ <a href="opcode.html">opcode.html</a>
+ <a href="rescode.html">rescode.html</a>
+ <a href="session.html#sqlite3changeset_op">session.html#sqlite3changeset_op</a>
+ <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a>
+<li>SQLITE_RTREE_INT_ONLY &rarr; <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>SQLITE_SCHEMA &rarr; <a href="c3ref/prepare.html">c3ref/prepare.html</a>
+ <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#sqlite3_prepare">capi3ref.html#sqlite3_prepare</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="changes.html#version_3_7_7_1">changes.html#version_3_7_7_1</a>
+ <a href="faq.html#q15">faq.html#q15</a>
+ <a href="fileformat2.html#filesize">fileformat2.html#filesize</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a>
+ <a href="pragma.html#pragma_recursive_triggers">pragma.html#pragma_recursive_triggers</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="releaselog/3_7_7_1.html">releaselog/3_7_7_1.html</a>
+<li>sqlite_schema &rarr; <a href="atomiccommit.html#rdlck">atomiccommit.html#rdlck</a>
+ <a href="cli.html#dtables">cli.html#dtables</a>
+ <a href="cli.html#sha3sum">cli.html#sha3sum</a>
+ <a href="fileformat2.html#btypes">fileformat2.html#btypes</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="lang_altertable.html#altertableishard">lang_altertable.html#altertableishard</a>
+ <a href="lang_droptrigger.html">lang_droptrigger.html</a>
+ <a href="lemon.html">lemon.html</a>
+ <a href="pragma.html#pragma_integrity_check">pragma.html#pragma_integrity_check</a>
+ <a href="pragma.html#pragma_writable_schema">pragma.html#pragma_writable_schema</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+<li>sqlite_schema table &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a>
+ <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>
+ <a href="lang_altertable.html#altertabdropcol">lang_altertable.html#altertabdropcol</a>
+ <a href="lang_altertable.html#caution">lang_altertable.html#caution</a>
+ <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="security.html">security.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+ <a href="unlock_notify.html">unlock_notify.html</a>
+<li>SQLITE_SECURE_DELETE &rarr; <a href="changes.html#version_3_6_21">changes.html#version_3_6_21</a>
+ <a href="faq.html#q20">faq.html#q20</a>
+ <a href="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+<li>sqlite_sequence &rarr; <a href="autoinc.html">autoinc.html</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+<li>SQLITE_SORTER_PMASZ &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz</a>
+ <a href="capi3ref.html#sqliteconfigpmasz">capi3ref.html#sqliteconfigpmasz</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>SQLITE_SOUNDEX &rarr; <a href="lang_corefunc.html#soundex">lang_corefunc.html#soundex</a>
+<li>SQLITE_SOURCE_ID &rarr; <a href="c3ref/libversion.html">c3ref/libversion.html</a>
+ <a href="capi3ref.html#sqlite3_libversion">capi3ref.html#sqlite3_libversion</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+ <a href="th3.html">th3.html</a>
+<li>sqlite_source_id &rarr; <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>
+ <a href="c3ref/libversion.html">c3ref/libversion.html</a>
+ <a href="capi3ref.html#SQLITE_SOURCE_ID">capi3ref.html#SQLITE_SOURCE_ID</a>
+ <a href="capi3ref.html#sqlite3_libversion">capi3ref.html#sqlite3_libversion</a>
+ <a href="changes.html#version_3_18_0">changes.html#version_3_18_0</a>
+ <a href="changes.html#version_3_6_18">changes.html#version_3_6_18</a>
+ <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a>
+<li>sqlite_stat1 &rarr; <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#manctrl">optoverview.html#manctrl</a>
+ <a href="optoverview.html#multi_index">optoverview.html#multi_index</a>
+ <a href="pragma.html#pragma_optimize">pragma.html#pragma_optimize</a>
+ <a href="queryplanner-ng.html#fossilcasestudy">queryplanner-ng.html#fossilcasestudy</a>
+ <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+<li>SQLITE_STAT1 &rarr; <a href="queryplanner-ng.html#fossilcasestudy">queryplanner-ng.html#fossilcasestudy</a>
+ <a href="queryplanner-ng.html#hazards">queryplanner-ng.html#hazards</a>
+ <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a>
+<li>sqlite_stat2 &rarr; <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+<li>sqlite_stat3 &rarr; <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="optoverview.html#manctrl">optoverview.html#manctrl</a>
+ <a href="optoverview.html#rangequery">optoverview.html#rangequery</a>
+<li>sqlite_stat4 &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="compile.html#enable_stat4">compile.html#enable_stat4</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="optoverview.html#manctrl">optoverview.html#manctrl</a>
+ <a href="optoverview.html#rangequery">optoverview.html#rangequery</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>SQLITE_STAT4 &rarr; <a href="th3.html">th3.html</a>
+<li>SQLITE_STATIC &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="carray.html#onearg">carray.html#onearg</a>
+<li>SQLITE_STATUS_MALLOC_SIZE &rarr; <a href="memstat.html">memstat.html</a>
+<li>SQLITE_STATUS_MEMORY_USED &rarr; <a href="compile.html#default_memstatus">compile.html#default_memstatus</a>
+ <a href="compile.html#max_memory">compile.html#max_memory</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+ <a href="malloc.html#nofrag">malloc.html#nofrag</a>
+ <a href="memstat.html">memstat.html</a>
+<li>SQLITE_STATUS_PAGECACHE_SIZE &rarr; <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+<li>SQLITE_STATUS_PARSER_STACK &rarr; <a href="compile.html#yytrackmaxstackdepth">compile.html#yytrackmaxstackdepth</a>
+<li>SQLITE_STATUS_SCRATCH_SIZE &rarr; <a href="changes.html#version_3_6_1">changes.html#version_3_6_1</a>
+ <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a>
+<li>sqlite_stmt &rarr; <a href="changes.html#version_3_39_1">changes.html#version_3_39_1</a>
+ <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a>
+ <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a>
+ <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a>
+ <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>SQLITE_STMT virtual table &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="compile.html#enable_stmtvtab">compile.html#enable_stmtvtab</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>SQLITE_STMTJRNL_SPILL &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill</a>
+ <a href="capi3ref.html#sqliteconfigstmtjrnlspill">capi3ref.html#sqliteconfigstmtjrnlspill</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>SQLITE_STMTSTATUS counter &rarr; <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_status">capi3ref.html#sqlite3_stmt_status</a>
+<li>SQLITE_STMTSTATUS counters &rarr; <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a>
+ <a href="capi3ref.html#sqlite3_stmt_status">capi3ref.html#sqlite3_stmt_status</a>
+<li>SQLITE_STMTSTATUS_AUTOINDEX &rarr; <a href="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_FULLSCAN_STEP &rarr; <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_MEMUSED &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_REPREPARE &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_RUN &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_SORT &rarr; <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>SQLITE_STMTSTATUS_VM_STEP &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="stmt.html">stmt.html</a>
+<li>SQLITE_SUBTYPE &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>SQLITE_SYNC_DATAONLY &rarr; <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_SYNC_FULL &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_SYNC_NORMAL &rarr; <a href="34to35.html">34to35.html</a>
+ <a href="c3ref/io_methods.html">c3ref/io_methods.html</a>
+ <a href="capi3ref.html#sqlite3_io_methods">capi3ref.html#sqlite3_io_methods</a>
+<li>SQLITE_SYSAPI &rarr; <a href="compile.html#apicall">compile.html#apicall</a>
+ <a href="compile.html#cdecl">compile.html#cdecl</a>
+ <a href="compile.html#sysapi">compile.html#sysapi</a>
+ <a href="compile.html#tclapi">compile.html#tclapi</a>
+<li>SQLITE_TEMP_STORE &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="inmemorydb.html#temp_db">inmemorydb.html#temp_db</a>
+ <a href="pragma.html#pragma_temp_store">pragma.html#pragma_temp_store</a>
+ <a href="tempfiles.html#otheropt">tempfiles.html#otheropt</a>
+ <a href="tempfiles.html#tempstore">tempfiles.html#tempstore</a>
+<li>SQLITE_TESTCTRL_ALWAYS &rarr; <a href="testing.html#defcode">testing.html#defcode</a>
+<li>SQLITE_TESTCTRL_BYTEORDER &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>SQLITE_TESTCTRL_EXPLAIN_STMT &rarr; <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>SQLITE_TESTCTRL_OPTIMIZATIONS &rarr; <a href="testing.html#disopttest">testing.html#disopttest</a>
+<li>SQLITE_TESTCTRL_VDBE_COVERAGE &rarr; <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>SQLITE_TEXT &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>SQLITE_THREADSAFE &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex">c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">c3ref/c_config_covering_index_scan.html#sqliteconfigmutex</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">c3ref/c_config_covering_index_scan.html#sqliteconfigserialized</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread</a>
+ <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a>
+ <a href="c3ref/value.html">c3ref/value.html</a>
+ <a href="capi3ref.html#sqlite3_threadsafe">capi3ref.html#sqlite3_threadsafe</a>
+ <a href="capi3ref.html#sqlite3_value">capi3ref.html#sqlite3_value</a>
+ <a href="capi3ref.html#sqliteconfiggetmutex">capi3ref.html#sqliteconfiggetmutex</a>
+ <a href="capi3ref.html#sqliteconfigmultithread">capi3ref.html#sqliteconfigmultithread</a>
+ <a href="capi3ref.html#sqliteconfigmutex">capi3ref.html#sqliteconfigmutex</a>
+ <a href="capi3ref.html#sqliteconfigserialized">capi3ref.html#sqliteconfigserialized</a>
+ <a href="capi3ref.html#sqliteconfigsinglethread">capi3ref.html#sqliteconfigsinglethread</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="threadsafe.html">threadsafe.html</a>
+<li>SQLITE_TOOBIG &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_str_errcode">capi3ref.html#sqlite3_str_errcode</a>
+ <a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a>
+<li>SQLITE_TRACE &rarr; <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>
+ <a href="capi3ref.html#sqlite3_trace_v2">capi3ref.html#sqlite3_trace_v2</a>
+<li>SQLITE_TRACE_SIZE_LIMIT &rarr; <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>
+ <a href="c3ref/profile.html">c3ref/profile.html</a>
+ <a href="capi3ref.html#sqlite3_expanded_sql">capi3ref.html#sqlite3_expanded_sql</a>
+ <a href="capi3ref.html#sqlite3_profile">capi3ref.html#sqlite3_profile</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>SQLITE_TRANSIENT &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="carray.html#onearg">carray.html#onearg</a>
+<li>SQLITE_UNTESTABLE &rarr; <a href="changes.html#version_3_16_0">changes.html#version_3_16_0</a>
+ <a href="compile.html#omit_builtin_test">compile.html#omit_builtin_test</a>
+ <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a>
+ <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+<li>SQLITE_UPDATE &rarr; <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="session.html#sqlite3changeset_new">session.html#sqlite3changeset_new</a>
+ <a href="session.html#sqlite3changeset_old">session.html#sqlite3changeset_old</a>
+ <a href="session.html#sqlite3changeset_op">session.html#sqlite3changeset_op</a>
+ <a href="session/sqlite3changeset_new.html">session/sqlite3changeset_new.html</a>
+ <a href="session/sqlite3changeset_old.html">session/sqlite3changeset_old.html</a>
+ <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a>
+<li>SQLITE_USE_ALLOCA &rarr; <a href="compile.html#rcmd">compile.html#rcmd</a>
+<li>SQLITE_USE_FCNTL_TRACE &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace</a>
+ <a href="capi3ref.html#sqlitefcntltrace">capi3ref.html#sqlitefcntltrace</a>
+<li>SQLITE_USE_URI &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">c3ref/c_config_covering_index_scan.html#sqliteconfiguri</a>
+ <a href="c3ref/open.html#urifilenamesinsqlite3open">c3ref/open.html#urifilenamesinsqlite3open</a>
+ <a href="capi3ref.html#sqliteconfiguri">capi3ref.html#sqliteconfiguri</a>
+ <a href="capi3ref.html#urifilenamesinsqlite3open">capi3ref.html#urifilenamesinsqlite3open</a>
+ <a href="uri.html">uri.html</a>
+<li>SQLITE_UTF16 &rarr; <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+<li>SQLITE_UTF16_ALIGNED &rarr; <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+<li>SQLITE_UTF16BE &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>
+ <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_collation_needed">capi3ref.html#sqlite3_collation_needed</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>SQLITE_UTF16LE &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>
+ <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_collation_needed">capi3ref.html#sqlite3_collation_needed</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>SQLITE_UTF8 &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a>
+ <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a>
+ <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>
+ <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>
+ <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#SQLITE_DETERMINISTIC">capi3ref.html#SQLITE_DETERMINISTIC</a>
+ <a href="capi3ref.html#byteorderdeterminationrules">capi3ref.html#byteorderdeterminationrules</a>
+ <a href="capi3ref.html#sqlite3_collation_needed">capi3ref.html#sqlite3_collation_needed</a>
+ <a href="capi3ref.html#sqlite3_create_collation">capi3ref.html#sqlite3_create_collation</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>SQLITE_VERSION &rarr; <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>
+ <a href="c3ref/libversion.html">c3ref/libversion.html</a>
+ <a href="capi3ref.html#SQLITE_SOURCE_ID">capi3ref.html#SQLITE_SOURCE_ID</a>
+ <a href="capi3ref.html#sqlite3_libversion">capi3ref.html#sqlite3_libversion</a>
+<li>sqlite_version &rarr; <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>
+ <a href="c3ref/libversion.html">c3ref/libversion.html</a>
+ <a href="capi3ref.html#SQLITE_SOURCE_ID">capi3ref.html#SQLITE_SOURCE_ID</a>
+ <a href="capi3ref.html#sqlite3_libversion">capi3ref.html#sqlite3_libversion</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="expridx.html">expridx.html</a>
+ <a href="lang_createindex.html#indexexpr">lang_createindex.html#indexexpr</a>
+<li>SQLITE_VERSION_NUMBER &rarr; <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>
+ <a href="c3ref/libversion.html">c3ref/libversion.html</a>
+ <a href="capi3ref.html#SQLITE_SOURCE_ID">capi3ref.html#SQLITE_SOURCE_ID</a>
+ <a href="capi3ref.html#sqlite3_libversion">capi3ref.html#sqlite3_libversion</a>
+ <a href="fileformat2.html#database_header">fileformat2.html#database_header</a>
+ <a href="fileformat2.html#validfor">fileformat2.html#validfor</a>
+ <a href="versionnumbers.html">versionnumbers.html</a>
+<li>SQLITE_VTAB_DIRECTONLY &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="security.html#baddb">security.html#baddb</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+<li>SQLITE_VTAB_INNOCUOUS &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema</a>
+ <a href="capi3ref.html#sqlitedbconfigtrustedschema">capi3ref.html#sqlitedbconfigtrustedschema</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>SQLITE_WARNING_AUTOINDEX &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="optoverview.html#autoindex">optoverview.html#autoindex</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+<li>SQLITE_WIN32_HEAP_CREATE &rarr; <a href="malloc.html#win32heap">malloc.html#win32heap</a>
+<li>SQLITE_WIN32_MALLOC &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigwin32heapsize">c3ref/c_config_covering_index_scan.html#sqliteconfigwin32heapsize</a>
+ <a href="capi3ref.html#sqliteconfigwin32heapsize">capi3ref.html#sqliteconfigwin32heapsize</a>
+ <a href="malloc.html#win32heap">malloc.html#win32heap</a>
+<li>SQLITE_WIN32_MALLOC_VALIDATE &rarr; <a href="malloc.html#win32heap">malloc.html#win32heap</a>
+<li>SQLITE_ZERO_MALLOC &rarr; <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="malloc.html#memsysx">malloc.html#memsysx</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+ <a href="selfcontained.html">selfcontained.html</a>
+<li>statement journal &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill</a>
+ <a href="capi3ref.html#sqliteconfigstmtjrnlspill">capi3ref.html#sqliteconfigstmtjrnlspill</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>Statement journals &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill</a>
+ <a href="capi3ref.html#sqliteconfigstmtjrnlspill">capi3ref.html#sqliteconfigstmtjrnlspill</a>
+<li>statement journals &rarr; <a href="compile.html#stmtjrnl_spill">compile.html#stmtjrnl_spill</a>
+<li>status parameters &rarr; <a href="c3ref/status.html">c3ref/status.html</a>
+ <a href="capi3ref.html#sqlite3_status">capi3ref.html#sqlite3_status</a>
+<li>storage class &rarr; <a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a>
+<li>strategies &rarr; <a href="eqp.html">eqp.html</a>
+<li>STRICT &rarr; <a href="datatype3.html#affname">datatype3.html#affname</a>
+ <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a>
+<li>STRICT table &rarr; <a href="pragma.html#pragma_table_list">pragma.html#pragma_table_list</a>
+<li>STRICT tables &rarr; <a href="changes.html#version_3_37_0">changes.html#version_3_37_0</a>
+ <a href="datatype3.html">datatype3.html</a>
+ <a href="flextypegood.html">flextypegood.html</a>
+ <a href="news.html">news.html</a>
+ <a href="quirks.html">quirks.html</a>
+ <a href="recovery.html">recovery.html</a>
+ <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>strict type checking &rarr; <a href="lang_createtable.html">lang_createtable.html</a>
+<li>subprograms &rarr; <a href="opcode.html">opcode.html</a>
+<li>Subqueries &rarr; <a href="fullsql.html">fullsql.html</a>
+<li>substr &rarr; <a href="arch.html">arch.html</a>
+ <a href="changes.html#version_3_6_21">changes.html#version_3_6_21</a>
+ <a href="fts3.html#fts3tok">fts3.html#fts3tok</a>
+ <a href="invalidutf.html">invalidutf.html</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+<li>substr SQL function &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>sum &rarr; <a href="lang_select.html#bareagg">lang_select.html#bareagg</a>
+<li>sum aggregate function &rarr; <a href="floatingpoint.html#decext">floatingpoint.html#decext</a>
+<li>swarmvtab &rarr; <a href="vtablist.html">vtablist.html</a>
+<li>swarmvtab context &rarr; <a href="swarmvtab.html#overview">swarmvtab.html#overview</a>
+<li>synchronous &rarr; <a href="tempfiles.html#tempdb">tempfiles.html#tempdb</a>
+<li>synchronous pragma &rarr; <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a>
+ <a href="capi3ref.html#SQLITE_SYNC_DATAONLY">capi3ref.html#SQLITE_SYNC_DATAONLY</a>
+ <a href="howtocorrupt.html#fork">howtocorrupt.html#fork</a>
+<li>syntax diagrams &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="lang.html">lang.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>table b-tree &rarr; <a href="opcode.html#codes">opcode.html#codes</a>
+<li>table data format &rarr; <a href="stricttables.html">stricttables.html</a>
+<li>table-constraint &rarr; <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a>
+ <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>
+ <a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a>
+<li>table-options &rarr; <a href="lang_createtable.html">lang_createtable.html</a>
+<li>table-or-subquery &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>table-valued function &rarr; <a href="carray.html">carray.html</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="completion.html">completion.html</a>
+ <a href="dbpage.html">dbpage.html</a>
+ <a href="fts5.html">fts5.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_expr.html#in_op">lang_expr.html#in_op</a>
+ <a href="lang_select.html#tabfunc1">lang_select.html#tabfunc1</a>
+ <a href="loadext.html#write">loadext.html#write</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="series.html">series.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+ <a href="zipfile.html">zipfile.html</a>
+<li>table-valued functions &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="bytecodevtab.html">bytecodevtab.html</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="json1.html">json1.html</a>
+ <a href="json1.html#jtree">json1.html#jtree</a>
+ <a href="lang_select.html#tabfunc1">lang_select.html#tabfunc1</a>
+ <a href="loadext.html#write">loadext.html#write</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragfunc">pragma.html#pragfunc</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#obc">vtab.html#obc</a>
+ <a href="vtab.html#xshadowname">vtab.html#xshadowname</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>table-valued functions in the FROM clause &rarr; <a href="dbstat.html">dbstat.html</a>
+<li>Tcl extension &rarr; <a href="lang_expr.html#varparam">lang_expr.html#varparam</a>
+<li>TCL Interface &rarr; <a href="arch.html">arch.html</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_6_19">changes.html#version_3_6_19</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="compile.html#tclapi">compile.html#tclapi</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_6_19.html">releaselog/3_6_19.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+<li>TCL interface eval method &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>TCL test suite &rarr; <a href="compile.html#tclapi">compile.html#tclapi</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+<li>TEA tarball &rarr; <a href="howtocompile.html#tcl">howtocompile.html#tcl</a>
+<li>temp_store pragma &rarr; <a href="inmemorydb.html#temp_db">inmemorydb.html#temp_db</a>
+ <a href="tempfiles.html#otheropt">tempfiles.html#otheropt</a>
+ <a href="tempfiles.html#tempstore">tempfiles.html#tempstore</a>
+<li>temp_store_directory &rarr; <a href="pragma.html#pragma_temp_store">pragma.html#pragma_temp_store</a>
+<li>temp_store_directory pragma &rarr; <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a>
+ <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>
+ <a href="capi3ref.html#SQLITE_ACCESS_EXISTS">capi3ref.html#SQLITE_ACCESS_EXISTS</a>
+ <a href="capi3ref.html#sqlite3_temp_directory">capi3ref.html#sqlite3_temp_directory</a>
+<li>temporary directory search algorithm &rarr; <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+<li>temporary disk files &rarr; <a href="rescode.html#cantopen">rescode.html#cantopen</a>
+ <a href="rescode.html#full">rescode.html#full</a>
+ <a href="shortnames.html">shortnames.html</a>
+<li>temporary tables &rarr; <a href="pragma.html#pragma_temp_store">pragma.html#pragma_temp_store</a>
+ <a href="pragma.html#pragma_temp_store_directory">pragma.html#pragma_temp_store_directory</a>
+<li>tempstore &rarr; <a href="compile.html#temp_store">compile.html#temp_store</a>
+<li>test coverage &rarr; <a href="about.html">about.html</a>
+ <a href="changes.html#version_3_6_17">changes.html#version_3_6_17</a>
+ <a href="faq.html#q17">faq.html#q17</a>
+ <a href="features.html">features.html</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_17.html">releaselog/3_6_17.html</a>
+ <a href="support.html#prosupport">support.html#prosupport</a>
+ <a href="th3.html">th3.html</a>
+<li>test suite &rarr; <a href="limits.html">limits.html</a>
+ <a href="tclsqlite.html">tclsqlite.html</a>
+<li>testcase macros &rarr; <a href="testing.html#tension">testing.html#tension</a>
+<li>tested &rarr; <a href="appfileformat.html">appfileformat.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>testing &rarr; <a href="assert.html">assert.html</a>
+ <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="hirely.html">hirely.html</a>
+ <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a>
+ <a href="malloc.html">malloc.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+<li>text encoding &rarr; <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a>
+<li>TH3 &rarr; <a href="malloc.html">malloc.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="qmplan.html">qmplan.html</a>
+ <a href="support.html#prosupport">support.html#prosupport</a>
+ <a href="testing.html#coverage">testing.html#coverage</a>
+ <a href="testing.html#stmtvbr">testing.html#stmtvbr</a>
+ <a href="testing.html#tcl">testing.html#tcl</a>
+<li>the - and - operators &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>the - operator &rarr; <a href="json1.html#jobj">json1.html#jobj</a>
+ <a href="json1.html#jset">json1.html#jset</a>
+ <a href="json1.html#varg">json1.html#varg</a>
+<li>the amalgamation &rarr; <a href="c3ref/libversion.html">c3ref/libversion.html</a>
+ <a href="capi3ref.html#sqlite3_libversion">capi3ref.html#sqlite3_libversion</a>
+<li>The Fossil NGQP Upgrade Case Study &rarr; <a href="optoverview.html#crossjoin">optoverview.html#crossjoin</a>
+<li>the json1 extension &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="changes.html#version_3_9_1">changes.html#version_3_9_1</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>The Use Of assert In SQLite &rarr; <a href="howtocorrupt.html#svptbug">howtocorrupt.html#svptbug</a>
+ <a href="testing.html#asserts">testing.html#asserts</a>
+<li>Things That Can Go Wrong &rarr; <a href="lockingv3.html#how_to_corrupt">lockingv3.html#how_to_corrupt</a>
+<li>threading mode &rarr; <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">c3ref/c_config_covering_index_scan.html#sqliteconfigserialized</a>
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread</a>
+ <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a>
+ <a href="c3ref/errcode.html">c3ref/errcode.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a>
+ <a href="capi3ref.html#sqlite3_db_mutex">capi3ref.html#sqlite3_db_mutex</a>
+ <a href="capi3ref.html#sqlite3_errcode">capi3ref.html#sqlite3_errcode</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+ <a href="capi3ref.html#sqlite3_threadsafe">capi3ref.html#sqlite3_threadsafe</a>
+ <a href="capi3ref.html#sqliteconfigmultithread">capi3ref.html#sqliteconfigmultithread</a>
+ <a href="capi3ref.html#sqliteconfigserialized">capi3ref.html#sqliteconfigserialized</a>
+ <a href="capi3ref.html#sqliteconfigsinglethread">capi3ref.html#sqliteconfigsinglethread</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="compile.html#threadsafe">compile.html#threadsafe</a>
+ <a href="faq.html#q6">faq.html#q6</a>
+<li>three test harnesses &rarr; <a href="th3.html">th3.html</a>
+<li>tokenizer &rarr; <a href="fts3.html#compiling_and_enabling_fts3_and_fts4">fts3.html#compiling_and_enabling_fts3_and_fts4</a>
+ <a href="fts3.html#f4alid">fts3.html#f4alid</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+<li>transaction state &rarr; <a href="c3ref/txn_state.html">c3ref/txn_state.html</a>
+ <a href="capi3ref.html#sqlite3_txn_state">capi3ref.html#sqlite3_txn_state</a>
+<li>transactional &rarr; <a href="fasterthanfs.html">fasterthanfs.html</a>
+<li>treats the CROSS JOIN operator specially &rarr; <a href="optoverview.html#table_order">optoverview.html#table_order</a>
+ <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a>
+<li>triggers &rarr; <a href="lang_returning.html">lang_returning.html</a>
+<li>trigram indexes &rarr; <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+<li>truncate optimization &rarr; <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html#sqlite3_set_authorizer">capi3ref.html#sqlite3_set_authorizer</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="changes.html#version_3_6_21">changes.html#version_3_6_21</a>
+ <a href="changes.html#version_3_6_5">changes.html#version_3_6_5</a>
+ <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a>
+ <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a>
+<li>trusted_schema pragma &rarr; <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+<li>type affinity &rarr; <a href="rtree.html">rtree.html</a>
+ <a href="rtree.html#auxcol">rtree.html#auxcol</a>
+<li>type-name &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>typeof &rarr; <a href="arch.html">arch.html</a>
+ <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+<li>UINT collating sequence &rarr; <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+<li>unicode &rarr; <a href="changes.html#version_3_7_16">changes.html#version_3_7_16</a>
+ <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>unicode61 &rarr; <a href="changes.html#version_3_8_0">changes.html#version_3_8_0</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="compile.html#disable_fts3_unicode">compile.html#disable_fts3_unicode</a>
+ <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a>
+ <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a>
+ <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>unindexed &rarr; <a href="fts5.html#appendix_a">fts5.html#appendix_a</a>
+ <a href="fts5.html#fts5_table_creation_and_initialization">fts5.html#fts5_table_creation_and_initialization</a>
+<li>UNION virtual table &rarr; <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+<li>unionvtab &rarr; <a href="swarmvtab.html#compiling_and_using_swarmvtab">swarmvtab.html#compiling_and_using_swarmvtab</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>UNIQUE &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="conflict.html">conflict.html</a>
+ <a href="expridx.html">expridx.html</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="fileformat2.html#intschema">fileformat2.html#intschema</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="withoutrowid.html#bene">withoutrowid.html#bene</a>
+<li>UNIQUE constraint &rarr; <a href="optoverview.html#autoindex">optoverview.html#autoindex</a>
+ <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a>
+ <a href="pragma.html#pragma_index_list">pragma.html#pragma_index_list</a>
+ <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a>
+ <a href="rescode.html#constraint_unique">rescode.html#constraint_unique</a>
+ <a href="rowidtable.html">rowidtable.html</a>
+<li>UNIQUE constraints &rarr; <a href="stricttables.html">stricttables.html</a>
+<li>unique index &rarr; <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="withoutrowid.html#bene">withoutrowid.html#bene</a>
+<li>unixepoch function &rarr; <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+<li>unlikely &rarr; <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="lang_corefunc.html#likelihood">lang_corefunc.html#likelihood</a>
+ <a href="lang_corefunc.html#likely">lang_corefunc.html#likely</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+<li>unlink corruption &rarr; <a href="errlog.html">errlog.html</a>
+<li>unlinked database files &rarr; <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+<li>unprotected sqlite3_value &rarr; <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_result_blob">capi3ref.html#sqlite3_result_blob</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+<li>UPDATE &rarr; <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="c3ref/column_count.html">c3ref/column_count.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="capi3ref.html#sqlite3_column_count">capi3ref.html#sqlite3_column_count</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_total_changes">capi3ref.html#sqlite3_total_changes</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="changes.html#version_3_6_4">changes.html#version_3_6_4</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="compile.html#enable_update_delete_limit">compile.html#enable_update_delete_limit</a>
+ <a href="conflict.html">conflict.html</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="fts5.html">fts5.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_altertable.html#caution">lang_altertable.html#caution</a>
+ <a href="lang_analyze.html#req">lang_analyze.html#req</a>
+ <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+ <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a>
+ <a href="pragma.html#pragma_writable_schema">pragma.html#pragma_writable_schema</a>
+ <a href="rbu.html">rbu.html</a>
+ <a href="rbu.html#rbu_updates">rbu.html#rbu_updates</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="rowvalue.html">rowvalue.html</a>
+ <a href="rowvalue.html#rvinop">rowvalue.html#rvinop</a>
+ <a href="rtree.html">rtree.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>UPDATE FROM &rarr; <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_nochange">capi3ref.html#sqlite3_vtab_nochange</a>
+ <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+<li>UPDATE trigger &rarr; <a href="rescode.html#constraint_pinned">rescode.html#constraint_pinned</a>
+<li>update-stmt &rarr; <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_update.html">lang_update.html</a>
+<li>update-stmt-limited &rarr; <a href="lang_update.html#upfrom">lang_update.html#upfrom</a>
+<li>upluscontrol &rarr; <a href="lang_indexedby.html">lang_indexedby.html</a>
+ <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a>
+<li>upper &rarr; <a href="faq.html#q18">faq.html#q18</a>
+<li>upsert &rarr; <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a>
+<li>UPSERT &rarr; <a href="changes.html#version_3_24_0">changes.html#version_3_24_0</a>
+ <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="changes.html#version_3_37_1">changes.html#version_3_37_1</a>
+ <a href="footprint.html">footprint.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_conflict.html">lang_conflict.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>upsert clause &rarr; <a href="lang_insert.html">lang_insert.html</a>
+<li>upsert-clause &rarr; <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+<li>URI filename &rarr; <a href="c3ref/open.html#urifilenamesinsqlite3open">c3ref/open.html#urifilenamesinsqlite3open</a>
+ <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a>
+ <a href="capi3ref.html#sqlite3_uri_boolean">capi3ref.html#sqlite3_uri_boolean</a>
+ <a href="capi3ref.html#urifilenamesinsqlite3open">capi3ref.html#urifilenamesinsqlite3open</a>
+ <a href="compile.html#use_uri">compile.html#use_uri</a>
+ <a href="inmemorydb.html#sharedmemdb">inmemorydb.html#sharedmemdb</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_vacuum.html#vacuuminto">lang_vacuum.html#vacuuminto</a>
+ <a href="psow.html#tornpage">psow.html#tornpage</a>
+ <a href="sharedcache.html#inmemsharedcache">sharedcache.html#inmemsharedcache</a>
+ <a href="tclsqlite.html">tclsqlite.html</a>
+<li>URI filename examples &rarr; <a href="uri.html#urivfs">uri.html#urivfs</a>
+<li>URI filenames &rarr; <a href="c3ref/open.html#urifilenamesinsqlite3open">c3ref/open.html#urifilenamesinsqlite3open</a>
+ <a href="capi3ref.html#urifilenamesinsqlite3open">capi3ref.html#urifilenamesinsqlite3open</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="changes.html#version_3_7_13">changes.html#version_3_7_13</a>
+ <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="compile.html#allow_uri_authority">compile.html#allow_uri_authority</a>
+ <a href="compile.html#enable_8_3_names">compile.html#enable_8_3_names</a>
+ <a href="inmemorydb.html">inmemorydb.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+ <a href="shortnames.html">shortnames.html</a>
+ <a href="tclsqlite.html">tclsqlite.html</a>
+ <a href="vfs.html">vfs.html</a>
+<li>URI filenames in sqlite3_open &rarr; <a href="uri.html#urivfs">uri.html#urivfs</a>
+<li>URI query parameters &rarr; <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+<li>use of shared cache mode is discouraged &rarr; <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="c3ref/open.html">c3ref/open.html</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="capi3ref.html#sqlite3_open">capi3ref.html#sqlite3_open</a>
+<li>user-defined window functions &rarr; <a href="c3ref/create_function.html">c3ref/create_function.html</a>
+ <a href="capi3ref.html#sqlite3_create_function">capi3ref.html#sqlite3_create_function</a>
+ <a href="windowfunctions.html#aggwinfunc">windowfunctions.html#aggwinfunc</a>
+<li>user_version &rarr; <a href="compile.html#omit_schema_version_pragmas">compile.html#omit_schema_version_pragmas</a>
+<li>user_version pragma &rarr; <a href="fileformat2.html#database_header">fileformat2.html#database_header</a>
+ <a href="fileformat2.html#enc">fileformat2.html#enc</a>
+ <a href="pragma.html#pragma_application_id">pragma.html#pragma_application_id</a>
+ <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a>
+<li>using SQLite for websites &rarr; <a href="np1queryprob.html">np1queryprob.html</a>
+<li>Using the SQLite Online Backup API &rarr; <a href="c3ref/backup.html">c3ref/backup.html</a>
+ <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>
+ <a href="capi3ref.html#sqlite3_backup">capi3ref.html#sqlite3_backup</a>
+ <a href="capi3ref.html#sqlite3_backup_finish">capi3ref.html#sqlite3_backup_finish</a>
+<li>Using the SQLite Unlock Notification Feature &rarr; <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>
+ <a href="capi3ref.html#sqlite3_unlock_notify">capi3ref.html#sqlite3_unlock_notify</a>
+ <a href="compile.html#enable_unlock_notify">compile.html#enable_unlock_notify</a>
+<li>utc modifier &rarr; <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="deterministic.html#dtexception">deterministic.html#dtexception</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+<li>VACUUM &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat</a>
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase">c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase</a>
+ <a href="capi3ref.html#sqlitedbconfiglegacyfileformat">capi3ref.html#sqlitedbconfiglegacyfileformat</a>
+ <a href="capi3ref.html#sqlitedbconfigresetdatabase">capi3ref.html#sqlitedbconfigresetdatabase</a>
+ <a href="changes.html#version_3_15_0">changes.html#version_3_15_0</a>
+ <a href="changes.html#version_3_15_1">changes.html#version_3_15_1</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="changes.html#version_3_35_0">changes.html#version_3_35_0</a>
+ <a href="changes.html#version_3_5_8">changes.html#version_3_5_8</a>
+ <a href="changes.html#version_3_7_5">changes.html#version_3_7_5</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="changes.html#version_3_8_1">changes.html#version_3_8_1</a>
+ <a href="changes.html#version_3_8_10">changes.html#version_3_8_10</a>
+ <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="cli.html#sha3sum">cli.html#sha3sum</a>
+ <a href="compile.html#omit_vacuum">compile.html#omit_vacuum</a>
+ <a href="dbhash.html">dbhash.html</a>
+ <a href="dbstat.html#dbstatagg">dbstat.html#dbstatagg</a>
+ <a href="faq.html#q20">faq.html#q20</a>
+ <a href="fts3.html#*fts4optcmd">fts3.html#*fts4optcmd</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="mmap.html">mmap.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_auto_vacuum">pragma.html#pragma_auto_vacuum</a>
+ <a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a>
+ <a href="pragma.html#pragma_page_size">pragma.html#pragma_page_size</a>
+ <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a>
+ <a href="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</a>
+ <a href="rbu.html">rbu.html</a>
+ <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a>
+ <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a>
+ <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a>
+ <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_5_8.html">releaselog/3_5_8.html</a>
+ <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a>
+ <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a>
+ <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+ <a href="rowidtable.html">rowidtable.html</a>
+ <a href="tempfiles.html">tempfiles.html</a>
+ <a href="tempfiles.html#vacuumdb">tempfiles.html#vacuumdb</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+<li>VACUUM INTO &rarr; <a href="backup.html">backup.html</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+<li>vacuum-stmt &rarr; <a href="lang_vacuum.html">lang_vacuum.html</a>
+<li>value argument &rarr; <a href="json1.html#jmini">json1.html#jmini</a>
+<li>VALUES &rarr; <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#orderby">lang_select.html#orderby</a>
+<li>VALUES clause &rarr; <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="lang_select.html#limitoffset">lang_select.html#limitoffset</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="unionvtab.html">unionvtab.html</a>
+<li>variable-length integer &rarr; <a href="fileformat2.html#record_format">fileformat2.html#record_format</a>
+ <a href="rowidtable.html">rowidtable.html</a>
+<li>varint &rarr; <a href="fileformat2.html#record_format">fileformat2.html#record_format</a>
+<li>VDBE &rarr; <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="compile.html#debug">compile.html#debug</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+<li>vdbe_trace &rarr; <a href="debugging.html">debugging.html</a>
+ <a href="opcode.html#subprog">opcode.html#subprog</a>
+<li>Version 3.0.0 &rarr; <a href="lockingv3.html">lockingv3.html</a>
+<li>version 3.0.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+<li>version 3.0.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.0.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.0.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.0.4 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.0.5 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.0.6 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.0.7 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.0.8 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.1.0 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.1.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.1.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.1.3 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+<li>version 3.1.4 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a>
+<li>version 3.1.5 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.1.6 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.10.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="howtocorrupt.html#alias">howtocorrupt.html#alias</a>
+ <a href="news.html">news.html</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+<li>version 3.10.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.10.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>Version 3.11.0 &rarr; <a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</a>
+<li>version 3.11.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="fts3.html#f3tknzr">fts3.html#f3tknzr</a>
+ <a href="news.html">news.html</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+ <a href="wal.html#bigwal">wal.html#bigwal</a>
+<li>version 3.11.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>Version 3.12.0 &rarr; <a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</a>
+<li>version 3.12.0 &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+ <a href="pgszchng2016.html">pgszchng2016.html</a>
+ <a href="pragma.html#pragma_page_size">pragma.html#pragma_page_size</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+<li>version 3.12.0 page size change &rarr; <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+<li>version 3.12.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.12.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.13.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+ <a href="sessionintro.html">sessionintro.html</a>
+<li>version 3.14 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.14.0 &rarr; <a href="vtab.html#worid">vtab.html#worid</a>
+<li>version 3.14.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.14.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.15.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_vacuum.html">lang_vacuum.html</a>
+ <a href="news.html">news.html</a>
+ <a href="rowvalue.html#rvinop">rowvalue.html#rvinop</a>
+ <a href="uri.html#coreqp">uri.html#coreqp</a>
+<li>version 3.15.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.15.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.16.0 &rarr; <a href="changes.html#version_3_18_1">changes.html#version_3_18_1</a>
+ <a href="changes.html#version_3_19_3">changes.html#version_3_19_3</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a>
+ <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+<li>version 3.16.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.16.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.17.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.18.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.18.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.18.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.19.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.19.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.19.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>Version 3.19.3 &rarr; <a href="news.html">news.html</a>
+<li>version 3.19.3 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.2.0 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.2.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.2.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.2.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.2.4 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.2.5 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.2.6 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.2.7 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.2.8 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.20.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.20.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.21.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.22.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+ <a href="sqlar.html#cltools">sqlar.html#cltools</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+ <a href="wal.html#readonly">wal.html#readonly</a>
+<li>version 3.23.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+ <a href="quirks.html">quirks.html</a>
+ <a href="sqlar.html#cltools">sqlar.html#cltools</a>
+<li>version 3.23.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.24.0 &rarr; <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable</a>
+ <a href="capi3ref.html#sqlitedbconfiglegacyaltertable">capi3ref.html#sqlitedbconfiglegacyaltertable</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.25.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>version 3.25.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.25.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.25.3 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.26.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.27.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+<li>version 3.27.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.27.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.28.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+ <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a>
+<li>version 3.29.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="compile.html#enable_stat3">compile.html#enable_stat3</a>
+ <a href="news.html">news.html</a>
+ <a href="testing.html#aflfuzz">testing.html#aflfuzz</a>
+<li>version 3.3.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="sharedcache.html">sharedcache.html</a>
+<li>version 3.3.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.10 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.11 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.12 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.13 &rarr; <a href="chronology.html">chronology.html</a>
+<li>Version 3.3.14 &rarr; <a href="changes.html#version_3_3_16">changes.html#version_3_3_16</a>
+ <a href="releaselog/3_3_16.html">releaselog/3_3_16.html</a>
+<li>version 3.3.14 &rarr; <a href="chronology.html">chronology.html</a>
+<li>Version 3.3.15 &rarr; <a href="changes.html#version_3_3_16">changes.html#version_3_3_16</a>
+ <a href="releaselog/3_3_16.html">releaselog/3_3_16.html</a>
+<li>version 3.3.15 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.16 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.17 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.4 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.5 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.6 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.7 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.8 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.3.9 &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+<li>version 3.30.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="news.html">news.html</a>
+ <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a>
+ <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a>
+<li>version 3.30.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.31.0 &rarr; <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a>
+ <a href="capi3ref.html#sqlite3_uri_boolean">capi3ref.html#sqlite3_uri_boolean</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="news.html">news.html</a>
+<li>version 3.31.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.32.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="news.html">news.html</a>
+<li>version 3.32.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+<li>version 3.32.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.32.3 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+<li>version 3.33.0 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.34.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>
+<li>version 3.34.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+<li>version 3.35.0 &rarr; <a href="changes.html#version_3_36_0">changes.html#version_3_36_0</a>
+ <a href="changes.html#version_3_37_1">changes.html#version_3_37_1</a>
+ <a href="changes.html#version_3_37_2">changes.html#version_3_37_2</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="howtocorrupt.html#svptbug">howtocorrupt.html#svptbug</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a>
+ <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a>
+ <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a>
+<li>version 3.35.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.35.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.35.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.35.4 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.35.5 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.36.0 &rarr; <a href="chronology.html">chronology.html</a>
+<li>Version 3.37.0 &rarr; <a href="amalgamation.html">amalgamation.html</a>
+<li>version 3.37.0 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.37.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.37.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="howtocorrupt.html#svptbug">howtocorrupt.html#svptbug</a>
+<li>version 3.38.0 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.38.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.38.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.38.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.38.4 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.38.5 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.39.0 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="testing.html">testing.html</a>
+<li>version 3.39.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.39.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+<li>version 3.39.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.39.4 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.4.0 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.4.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.4.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.40.0 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.40.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.5.0 &rarr; <a href="35to36.html">35to36.html</a>
+ <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>
+ <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html#sqlite3_enable_shared_cache">capi3ref.html#sqlite3_enable_shared_cache</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="custombuild.html">custombuild.html</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="sharedcache.html">sharedcache.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+<li>version 3.5.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.5.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.5.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.5.4 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="tempfiles.html#views">tempfiles.html#views</a>
+<li>version 3.5.5 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.5.6 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.5.7 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.5.8 &rarr; <a href="changes.html#version_3_5_9">changes.html#version_3_5_9</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="releaselog/3_5_9.html">releaselog/3_5_9.html</a>
+<li>version 3.5.9 &rarr; <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+ <a href="chronology.html">chronology.html</a>
+<li>version 3.6.0 &rarr; <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+ <a href="chronology.html">chronology.html</a>
+<li>version 3.6.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="malloc.html#lookaside">malloc.html#lookaside</a>
+ <a href="malloc.html#memstatus">malloc.html#memstatus</a>
+<li>version 3.6.10 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.6.11 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.6.12 &rarr; <a href="changes.html#version_3_6_13">changes.html#version_3_6_13</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="releaselog/3_6_13.html">releaselog/3_6_13.html</a>
+<li>version 3.6.13 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.6.14 &rarr; <a href="changes.html#version_3_6_14_2">changes.html#version_3_6_14_2</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_14_2.html">releaselog/3_6_14_2.html</a>
+<li>version 3.6.14.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.14.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.15 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.16 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.16.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.6.17 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+ <a href="th3.html">th3.html</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+<li>version 3.6.18 &rarr; <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>
+ <a href="capi3ref.html#SQLITE_SOURCE_ID">capi3ref.html#SQLITE_SOURCE_ID</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="limits.html#max_trigger_depth">limits.html#max_trigger_depth</a>
+ <a href="pragma.html#pragma_recursive_triggers">pragma.html#pragma_recursive_triggers</a>
+<li>version 3.6.19 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="faq.html#q22">faq.html#q22</a>
+ <a href="foreignkeys.html">foreignkeys.html</a>
+ <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a>
+ <a href="quirks.html">quirks.html</a>
+<li>version 3.6.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.6.20 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.21 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.22 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.23 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.23.1 &rarr; <a href="c3ref/step.html">c3ref/step.html</a>
+ <a href="capi3ref.html#sqlite3_step">capi3ref.html#sqlite3_step</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.6.4 &rarr; <a href="atomiccommit.html#safeappend">atomiccommit.html#safeappend</a>
+ <a href="changes.html#version_3_6_6_1">changes.html#version_3_6_6_1</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_6_1.html">releaselog/3_6_6_1.html</a>
+<li>version 3.6.5 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="lang_delete.html#truncateopt">lang_delete.html#truncateopt</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.6 &rarr; <a href="changes.html#version_3_6_6_2">changes.html#version_3_6_6_2</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_6_6_2.html">releaselog/3_6_6_2.html</a>
+<li>version 3.6.6.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.6.6.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.7 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.6.8 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.6.9 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.7.0 &rarr; <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="fileformat2.html#walformat">fileformat2.html#walformat</a>
+ <a href="howtocorrupt.html#fakeusb">howtocorrupt.html#fakeusb</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="limits.html#max_trigger_depth">limits.html#max_trigger_depth</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a>
+ <a href="wal.html">wal.html</a>
+<li>version 3.7.0.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="fileformat2.html#database_header">fileformat2.html#database_header</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.10 &rarr; <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="compile.html#default_file_format">compile.html#default_file_format</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_cache_size">pragma.html#pragma_cache_size</a>
+ <a href="psow.html">psow.html</a>
+ <a href="psow.html#tornpage">psow.html#tornpage</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+<li>version 3.7.11 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.12 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.12.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.13 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="fts3.html#unicode61">fts3.html#unicode61</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="sharedcache.html#inmemsharedcache">sharedcache.html#inmemsharedcache</a>
+<li>version 3.7.14 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.14.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.15 &rarr; <a href="changes.html#version_3_7_15_1">changes.html#version_3_7_15_1</a>
+ <a href="changes.html#version_3_7_15_2">changes.html#version_3_7_15_2</a>
+ <a href="changes.html#version_3_7_16_1">changes.html#version_3_7_16_1</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_15_1.html">releaselog/3_7_15_1.html</a>
+ <a href="releaselog/3_7_15_2.html">releaselog/3_7_15_2.html</a>
+ <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a>
+ <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a>
+<li>version 3.7.15.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.15.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.16 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.16.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.16.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.17 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="fts3.html#fts4aux">fts3.html#fts4aux</a>
+ <a href="howtocorrupt.html#alias">howtocorrupt.html#alias</a>
+ <a href="howtocorrupt.html#unlink">howtocorrupt.html#unlink</a>
+ <a href="mmap.html">mmap.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_automatic_index">pragma.html#pragma_automatic_index</a>
+<li>version 3.7.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.3 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.4 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="fts3.html#fts4">fts3.html#fts4</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="wal.html#noshm">wal.html#noshm</a>
+<li>version 3.7.5 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.6 &rarr; <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="fts3.html#fts4aux">fts3.html#fts4aux</a>
+ <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.6.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.6.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.6.3 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.7 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="uri.html">uri.html</a>
+ <a href="vtab.html#xsavepoint">vtab.html#xsavepoint</a>
+<li>version 3.7.7.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.8 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="intern-v-extern-blob.html">intern-v-extern-blob.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.7.9 &rarr; <a href="atomiccommit.html#hardware">atomiccommit.html#hardware</a>
+ <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="compile.html#enable_stat2">compile.html#enable_stat2</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="psow.html">psow.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+<li>version 3.8.0 &rarr; <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#autoindex">optoverview.html#autoindex</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="queryplanner-ng.html">queryplanner-ng.html</a>
+ <a href="queryplanner-ng.html#qpstab">queryplanner-ng.html#qpstab</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>version 3.8.0.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.0.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="compile.html#enable_stat3">compile.html#enable_stat3</a>
+ <a href="howtocorrupt.html#stalefd">howtocorrupt.html#stalefd</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.10 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="testing.html#aflfuzz">testing.html#aflfuzz</a>
+<li>version 3.8.10.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.10.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.8.11 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.11.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+<li>version 3.8.2 &rarr; <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="lang_createtable.html#rowid">lang_createtable.html#rowid</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="withoutrowid.html">withoutrowid.html</a>
+<li>version 3.8.3 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.3.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.4 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.4.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.4.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>Version 3.8.4.2 &rarr; <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.4.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.8.5 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="rtree.html#customquery">rtree.html#customquery</a>
+<li>version 3.8.6 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="datatype3.html#affinity">datatype3.html#affinity</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.7 &rarr; <a href="changes.html#version_3_8_10_2">changes.html#version_3_8_10_2</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a>
+<li>version 3.8.7.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.7.2 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.7.3 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.7.4 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.8 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.8.8.1 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.8.8.2 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.8.8.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.8.9 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version 3.9.0 &rarr; <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="changes.html#version_3_12_2">changes.html#version_3_12_2</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="expridx.html">expridx.html</a>
+ <a href="fts5.html#compiling_and_using_fts5">fts5.html#compiling_and_using_fts5</a>
+ <a href="lang_createindex.html#indexexpr">lang_createindex.html#indexexpr</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="rbu.html#sqldiff">rbu.html#sqldiff</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="versionnumbers.html">versionnumbers.html</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+<li>version 3.9.1 &rarr; <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+<li>version 3.9.2 &rarr; <a href="changes.html#version_3_9_3">changes.html#version_3_9_3</a>
+ <a href="chronology.html">chronology.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>version 3.9.3 &rarr; <a href="chronology.html">chronology.html</a>
+<li>version numbering conventions &rarr; <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="qmplan.html">qmplan.html</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>version-valid-for number &rarr; <a href="fileformat2.html#database_header">fileformat2.html#database_header</a>
+ <a href="fileformat2.html#filesize">fileformat2.html#filesize</a>
+<li>VFS &rarr; <a href="arch.html">arch.html</a>
+ <a href="atomiccommit.html#hardware">atomiccommit.html#hardware</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry</a>
+ <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a>
+ <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>
+ <a href="c3ref/filename.html">c3ref/filename.html</a>
+ <a href="c3ref/filename_database.html">c3ref/filename_database.html</a>
+ <a href="c3ref/free.html">c3ref/free.html</a>
+ <a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a>
+ <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a>
+ <a href="c3ref/vfs.html">c3ref/vfs.html</a>
+ <a href="capi3ref.html#coreuriqueryparameters">capi3ref.html#coreuriqueryparameters</a>
+ <a href="capi3ref.html#sqlite3_database_file_object">capi3ref.html#sqlite3_database_file_object</a>
+ <a href="capi3ref.html#sqlite3_db_filename">capi3ref.html#sqlite3_db_filename</a>
+ <a href="capi3ref.html#sqlite3_filename">capi3ref.html#sqlite3_filename</a>
+ <a href="capi3ref.html#sqlite3_filename_database">capi3ref.html#sqlite3_filename_database</a>
+ <a href="capi3ref.html#sqlite3_free">capi3ref.html#sqlite3_free</a>
+ <a href="capi3ref.html#sqlite3_uri_boolean">capi3ref.html#sqlite3_uri_boolean</a>
+ <a href="capi3ref.html#sqlite3_vfs">capi3ref.html#sqlite3_vfs</a>
+ <a href="capi3ref.html#sqlitefcntlwin32avretry">capi3ref.html#sqlitefcntlwin32avretry</a>
+ <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="changes.html#version_3_7_11">changes.html#version_3_7_11</a>
+ <a href="changes.html#version_3_7_12">changes.html#version_3_7_12</a>
+ <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="changes.html#version_3_7_17">changes.html#version_3_7_17</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="cli.html#arinsup">cli.html#arinsup</a>
+ <a href="compile.html#enable_locking_style">compile.html#enable_locking_style</a>
+ <a href="compile.html#fdatasync">compile.html#fdatasync</a>
+ <a href="compile.html#minimum_file_descriptor">compile.html#minimum_file_descriptor</a>
+ <a href="fileformat2.html#lockbyte">fileformat2.html#lockbyte</a>
+ <a href="loadext.html#persist">loadext.html#persist</a>
+ <a href="loadext.html#write">loadext.html#write</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html">pragma.html</a>
+ <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a>
+ <a href="psow.html">psow.html</a>
+ <a href="psow.html#tornpage">psow.html#tornpage</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+ <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a>
+ <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+ <a href="rescode.html#cantopen_convpath">rescode.html#cantopen_convpath</a>
+ <a href="rescode.html#ioerr_convpath">rescode.html#ioerr_convpath</a>
+ <a href="rescode.html#ioerr_dir_fsync">rescode.html#ioerr_dir_fsync</a>
+ <a href="rescode.html#ioerr_fstat">rescode.html#ioerr_fstat</a>
+ <a href="rescode.html#ioerr_fsync">rescode.html#ioerr_fsync</a>
+ <a href="rescode.html#ioerr_gettemppath">rescode.html#ioerr_gettemppath</a>
+ <a href="rescode.html#ioerr_nomem">rescode.html#ioerr_nomem</a>
+ <a href="rescode.html#ioerr_read">rescode.html#ioerr_read</a>
+ <a href="rescode.html#ioerr_short_read">rescode.html#ioerr_short_read</a>
+ <a href="rescode.html#ioerr_truncate">rescode.html#ioerr_truncate</a>
+ <a href="rescode.html#ioerr_write">rescode.html#ioerr_write</a>
+ <a href="rescode.html#notfound">rescode.html#notfound</a>
+ <a href="rescode.html#readonly_cantinit">rescode.html#readonly_cantinit</a>
+ <a href="selfcontained.html">selfcontained.html</a>
+ <a href="tclsqlite.html">tclsqlite.html</a>
+ <a href="tempfiles.html#shmfile">tempfiles.html#shmfile</a>
+ <a href="tempfiles.html#tempdir">tempfiles.html#tempdir</a>
+ <a href="testing.html#coverage">testing.html#coverage</a>
+ <a href="testing.html#crashtesting">testing.html#crashtesting</a>
+ <a href="uri.html">uri.html</a>
+ <a href="uri.html#coreqp">uri.html#coreqp</a>
+ <a href="uri.html#urivfs">uri.html#urivfs</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+ <a href="wal.html#bigwal">wal.html#bigwal</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+ <a href="walformat.html">walformat.html</a>
+<li>VFS shim &rarr; <a href="c3ref/create_filename.html">c3ref/create_filename.html</a>
+ <a href="capi3ref.html#sqlite3_create_filename">capi3ref.html#sqlite3_create_filename</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_32_0">changes.html#version_3_32_0</a>
+ <a href="cksumvfs.html">cksumvfs.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a>
+ <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a>
+ <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a>
+ <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>VFSes &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer</a>
+ <a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a>
+ <a href="capi3ref.html#coreuriqueryparameters">capi3ref.html#coreuriqueryparameters</a>
+ <a href="capi3ref.html#sqlitefcntlvfsname">capi3ref.html#sqlitefcntlvfsname</a>
+ <a href="capi3ref.html#sqlitefcntlvfspointer">capi3ref.html#sqlitefcntlvfspointer</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_7_10">changes.html#version_3_7_10</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cli.html#dotload">cli.html#dotload</a>
+ <a href="compile.html#powersafe_overwrite">compile.html#powersafe_overwrite</a>
+ <a href="loadext.html">loadext.html</a>
+ <a href="loadext.html#persist">loadext.html#persist</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="psow.html">psow.html</a>
+ <a href="psow.html#tornpage">psow.html#tornpage</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a>
+ <a href="rescode.html#internal">rescode.html#internal</a>
+ <a href="rescode.html#ioerr_lock">rescode.html#ioerr_lock</a>
+ <a href="rescode.html#ok_load_permanently">rescode.html#ok_load_permanently</a>
+ <a href="uri.html#uripsow">uri.html#uripsow</a>
+ <a href="wal.html#noshm">wal.html#noshm</a>
+ <a href="walformat.html">walformat.html</a>
+<li>view &rarr; <a href="changes.html#version_3_7_15">changes.html#version_3_7_15</a>
+ <a href="changes.html#version_3_8_7">changes.html#version_3_8_7</a>
+ <a href="lang_with.html#ordinarycte">lang_with.html#ordinarycte</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a>
+ <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a>
+<li>VIEW &rarr; <a href="changes.html#version_3_9_0">changes.html#version_3_9_0</a>
+ <a href="datatype3.html#affcompoundview">datatype3.html#affcompoundview</a>
+ <a href="datatype3.html#affview">datatype3.html#affview</a>
+ <a href="datatype3.html#expraff">datatype3.html#expraff</a>
+ <a href="pragma.html#pragfunc">pragma.html#pragfunc</a>
+ <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a>
+ <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a>
+ <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a>
+ <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a>
+<li>views &rarr; <a href="changes.html#version_3_12_1">changes.html#version_3_12_1</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+<li>virtual machine &rarr; <a href="compile.html#enable_offset_sql_func">compile.html#enable_offset_sql_func</a>
+<li>virtual machine instructions &rarr; <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>
+ <a href="capi3ref.html#sqlite3_progress_handler">capi3ref.html#sqlite3_progress_handler</a>
+ <a href="lang_explain.html">lang_explain.html</a>
+ <a href="vdbe.html">vdbe.html</a>
+<li>virtual table &rarr; <a href="c3ref/c_fail.html">c3ref/c_fail.html</a>
+ <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a>
+ <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous</a>
+ <a href="c3ref/create_module.html">c3ref/create_module.html</a>
+ <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="c3ref/module.html">c3ref/module.html</a>
+ <a href="c3ref/overload_function.html">c3ref/overload_function.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="c3ref/vtab.html">c3ref/vtab.html</a>
+ <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a>
+ <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a>
+ <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a>
+ <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>
+ <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>
+ <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a>
+ <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>
+ <a href="capi3ref.html#SQLITE_FAIL">capi3ref.html#SQLITE_FAIL</a>
+ <a href="capi3ref.html#SQLITE_INDEX_CONSTRAINT_EQ">capi3ref.html#SQLITE_INDEX_CONSTRAINT_EQ</a>
+ <a href="capi3ref.html#SQLITE_VTAB_CONSTRAINT_SUPPORT">capi3ref.html#SQLITE_VTAB_CONSTRAINT_SUPPORT</a>
+ <a href="capi3ref.html#sqlite3_create_module">capi3ref.html#sqlite3_create_module</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="capi3ref.html#sqlite3_last_insert_rowid">capi3ref.html#sqlite3_last_insert_rowid</a>
+ <a href="capi3ref.html#sqlite3_module">capi3ref.html#sqlite3_module</a>
+ <a href="capi3ref.html#sqlite3_overload_function">capi3ref.html#sqlite3_overload_function</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="capi3ref.html#sqlite3_vtab">capi3ref.html#sqlite3_vtab</a>
+ <a href="capi3ref.html#sqlite3_vtab_collation">capi3ref.html#sqlite3_vtab_collation</a>
+ <a href="capi3ref.html#sqlite3_vtab_config">capi3ref.html#sqlite3_vtab_config</a>
+ <a href="capi3ref.html#sqlite3_vtab_cursor">capi3ref.html#sqlite3_vtab_cursor</a>
+ <a href="capi3ref.html#sqlite3_vtab_distinct">capi3ref.html#sqlite3_vtab_distinct</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+ <a href="capi3ref.html#sqlite3_vtab_in_first">capi3ref.html#sqlite3_vtab_in_first</a>
+ <a href="capi3ref.html#sqlite3_vtab_nochange">capi3ref.html#sqlite3_vtab_nochange</a>
+ <a href="capi3ref.html#sqlite3_vtab_on_conflict">capi3ref.html#sqlite3_vtab_on_conflict</a>
+ <a href="capi3ref.html#sqlite3_vtab_rhs_value">capi3ref.html#sqlite3_vtab_rhs_value</a>
+ <a href="capi3ref.html#sqlitevtabconstraintsupport">capi3ref.html#sqlitevtabconstraintsupport</a>
+ <a href="capi3ref.html#sqlitevtabdirectonly">capi3ref.html#sqlitevtabdirectonly</a>
+ <a href="capi3ref.html#sqlitevtabinnocuous">capi3ref.html#sqlitevtabinnocuous</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_20_0">changes.html#version_3_20_0</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_35_2">changes.html#version_3_35_2</a>
+ <a href="changes.html#version_3_7_13">changes.html#version_3_7_13</a>
+ <a href="changes.html#version_3_7_9">changes.html#version_3_7_9</a>
+ <a href="changes.html#version_3_8_2">changes.html#version_3_8_2</a>
+ <a href="cintro.html">cintro.html</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_createvtab.html">lang_createvtab.html</a>
+ <a href="lang_select.html#tabfunc1">lang_select.html#tabfunc1</a>
+ <a href="loadext.html#write">loadext.html#write</a>
+ <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a>
+ <a href="pragma.html#pragma_module_list">pragma.html#pragma_module_list</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a>
+ <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a>
+ <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+ <a href="rescode.html#constraint">rescode.html#constraint</a>
+ <a href="rescode.html#corrupt_vtab">rescode.html#corrupt_vtab</a>
+ <a href="rowidtable.html">rowidtable.html</a>
+ <a href="spellfix1.html">spellfix1.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+ <a href="unionvtab.html">unionvtab.html</a>
+ <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>virtual table configuration option &rarr; <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_config">capi3ref.html#sqlite3_vtab_config</a>
+<li>virtual table configuration options &rarr; <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_config">capi3ref.html#sqlite3_vtab_config</a>
+<li>virtual table list &rarr; <a href="vtab.html#customvtab">vtab.html#customvtab</a>
+<li>virtual table module &rarr; <a href="c3ref/create_module.html">c3ref/create_module.html</a>
+ <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a>
+ <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="c3ref/overload_function.html">c3ref/overload_function.html</a>
+ <a href="c3ref/vtab.html">c3ref/vtab.html</a>
+ <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a>
+ <a href="capi3ref.html#sqlite3_create_module">capi3ref.html#sqlite3_create_module</a>
+ <a href="capi3ref.html#sqlite3_declare_vtab">capi3ref.html#sqlite3_declare_vtab</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="capi3ref.html#sqlite3_overload_function">capi3ref.html#sqlite3_overload_function</a>
+ <a href="capi3ref.html#sqlite3_vtab">capi3ref.html#sqlite3_vtab</a>
+ <a href="capi3ref.html#sqlite3_vtab_cursor">capi3ref.html#sqlite3_vtab_cursor</a>
+ <a href="fts5.html">fts5.html</a>
+<li>virtual tables &rarr; <a href="bytecodevtab.html">bytecodevtab.html</a>
+ <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>
+ <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>
+ <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="capi3ref.html#sqlite3_column_blob">capi3ref.html#sqlite3_column_blob</a>
+ <a href="capi3ref.html#sqlite3_preupdate_blobwrite">capi3ref.html#sqlite3_preupdate_blobwrite</a>
+ <a href="capi3ref.html#sqlite3_stmt_readonly">capi3ref.html#sqlite3_stmt_readonly</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="changes.html#version_3_10_0">changes.html#version_3_10_0</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_12_2">changes.html#version_3_12_2</a>
+ <a href="changes.html#version_3_13_0">changes.html#version_3_13_0</a>
+ <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_38_0">changes.html#version_3_38_0</a>
+ <a href="changes.html#version_3_38_1">changes.html#version_3_38_1</a>
+ <a href="changes.html#version_3_6_14">changes.html#version_3_6_14</a>
+ <a href="changes.html#version_3_6_17">changes.html#version_3_6_17</a>
+ <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="cli.html#dotload">cli.html#dotload</a>
+ <a href="compile.html#trusted_schema">compile.html#trusted_schema</a>
+ <a href="fileformat2.html#btypes">fileformat2.html#btypes</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_upsert.html#parseambig">lang_upsert.html#parseambig</a>
+ <a href="loadext.html">loadext.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_table_list">pragma.html#pragma_table_list</a>
+ <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a>
+ <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a>
+ <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a>
+ <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a>
+ <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a>
+ <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a>
+ <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a>
+ <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a>
+ <a href="releaselog/3_6_14.html">releaselog/3_6_14.html</a>
+ <a href="releaselog/3_6_17.html">releaselog/3_6_17.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+ <a href="rescode.html#constraint_vtab">rescode.html#constraint_vtab</a>
+ <a href="rescode.html#corrupt_vtab">rescode.html#corrupt_vtab</a>
+ <a href="rescode.html#internal">rescode.html#internal</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="sessionintro.html">sessionintro.html</a>
+<li>w &rarr; <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>
+ <a href="capi3ref.html#sqlite3_mprintf">capi3ref.html#sqlite3_mprintf</a>
+ <a href="printf.html">printf.html</a>
+<li>WAL &rarr; <a href="atomiccommit.html">atomiccommit.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal</a>
+ <a href="capi3ref.html#sqlitefcntlpersistwal">capi3ref.html#sqlitefcntlpersistwal</a>
+ <a href="changes.html#version_3_7_0">changes.html#version_3_7_0</a>
+ <a href="changes.html#version_3_7_3">changes.html#version_3_7_3</a>
+ <a href="changes.html#version_3_7_4">changes.html#version_3_7_4</a>
+ <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="compile.html#default_wal_autocheckpoint">compile.html#default_wal_autocheckpoint</a>
+ <a href="compile.html#omit_wal">compile.html#omit_wal</a>
+ <a href="fileformat2.html#database_header">fileformat2.html#database_header</a>
+ <a href="fileformat2.html#vnums">fileformat2.html#vnums</a>
+ <a href="fileformat2.html#walformat">fileformat2.html#walformat</a>
+ <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a>
+ <a href="howtocorrupt.html#fakeusb">howtocorrupt.html#fakeusb</a>
+ <a href="howtocorrupt.html#fork">howtocorrupt.html#fork</a>
+ <a href="howtocorrupt.html#roguejrnl">howtocorrupt.html#roguejrnl</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lockingv3.html#rollback">lockingv3.html#rollback</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a>
+ <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a>
+ <a href="releaselog/3_7_0.html">releaselog/3_7_0.html</a>
+ <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a>
+ <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+<li>WAL file &rarr; <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal</a>
+ <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot_recover">capi3ref.html#sqlite3_snapshot_recover</a>
+ <a href="capi3ref.html#sqlitefcntlpersistwal">capi3ref.html#sqlitefcntlpersistwal</a>
+ <a href="fileformat2.html#walformat">fileformat2.html#walformat</a>
+<li>WAL file format &rarr; <a href="wal.html#walfile">wal.html#walfile</a>
+<li>WAL format &rarr; <a href="walformat.html">walformat.html</a>
+<li>WAL mode &rarr; <a href="arch.html">arch.html</a>
+ <a href="asyncvfs.html">asyncvfs.html</a>
+ <a href="c3ref/snapshot.html">c3ref/snapshot.html</a>
+ <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a>
+ <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>
+ <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>
+ <a href="capi3ref.html#sqlite3_snapshot">capi3ref.html#sqlite3_snapshot</a>
+ <a href="capi3ref.html#sqlite3_snapshot_get">capi3ref.html#sqlite3_snapshot_get</a>
+ <a href="capi3ref.html#sqlite3_snapshot_open">capi3ref.html#sqlite3_snapshot_open</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint_v2">capi3ref.html#sqlite3_wal_checkpoint_v2</a>
+ <a href="changes.html#version_3_11_0">changes.html#version_3_11_0</a>
+ <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_33_0">changes.html#version_3_33_0</a>
+ <a href="changes.html#version_3_34_0">changes.html#version_3_34_0</a>
+ <a href="changes.html#version_3_7_14">changes.html#version_3_7_14</a>
+ <a href="changes.html#version_3_7_6_3">changes.html#version_3_7_6_3</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="compile.html#default_journal_size_limit">compile.html#default_journal_size_limit</a>
+ <a href="compile.html#default_wal_synchronous">compile.html#default_wal_synchronous</a>
+ <a href="compile.html#rcmd">compile.html#rcmd</a>
+ <a href="fasterthanfs.html">fasterthanfs.html</a>
+ <a href="fileformat2.html">fileformat2.html</a>
+ <a href="formatchng.html">formatchng.html</a>
+ <a href="howtocorrupt.html#fakeusb">howtocorrupt.html#fakeusb</a>
+ <a href="isolation.html">isolation.html</a>
+ <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a>
+ <a href="lockingv3.html">lockingv3.html</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a>
+ <a href="pragma.html#pragma_page_size">pragma.html#pragma_page_size</a>
+ <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a>
+ <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a>
+ <a href="psow.html">psow.html</a>
+ <a href="rbu.html#rbu_updates">rbu.html#rbu_updates</a>
+ <a href="rbu.html#rbu_vacuum">rbu.html#rbu_vacuum</a>
+ <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a>
+ <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a>
+ <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a>
+ <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a>
+ <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a>
+ <a href="releaselog/3_7_6_3.html">releaselog/3_7_6_3.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="rescode.html#busy_recovery">rescode.html#busy_recovery</a>
+ <a href="rescode.html#busy_snapshot">rescode.html#busy_snapshot</a>
+ <a href="rescode.html#ioerr_shmsize">rescode.html#ioerr_shmsize</a>
+ <a href="rescode.html#notice_recover_wal">rescode.html#notice_recover_wal</a>
+ <a href="rescode.html#protocol">rescode.html#protocol</a>
+ <a href="rescode.html#readonly_cantinit">rescode.html#readonly_cantinit</a>
+ <a href="rescode.html#readonly_cantlock">rescode.html#readonly_cantlock</a>
+ <a href="rescode.html#readonly_recovery">rescode.html#readonly_recovery</a>
+ <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a>
+ <a href="tclsqlite.html#wal_hook">tclsqlite.html#wal_hook</a>
+ <a href="tempfiles.html#shmfile">tempfiles.html#shmfile</a>
+ <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a>
+ <a href="tempfiles.html#walfile">tempfiles.html#walfile</a>
+ <a href="useovernet.html">useovernet.html</a>
+ <a href="versionnumbers.html">versionnumbers.html</a>
+ <a href="walformat.html">walformat.html</a>
+<li>WAL read algorithm &rarr; <a href="fileformat2.html#walindexformat">fileformat2.html#walindexformat</a>
+<li>WAL reset &rarr; <a href="walformat.html#locks">walformat.html#locks</a>
+ <a href="walformat.html#nbackfill">walformat.html#nbackfill</a>
+<li>WAL without shared memory &rarr; <a href="howtocorrupt.html#fakeusb">howtocorrupt.html#fakeusb</a>
+ <a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+<li>wal-index &rarr; <a href="vfs.html">vfs.html</a>
+ <a href="wal.html#advantages">wal.html#advantages</a>
+ <a href="wal.html#bigwal">wal.html#bigwal</a>
+ <a href="wal.html#bkwrds">wal.html#bkwrds</a>
+<li>WAL-index File Format &rarr; <a href="fileformat2.html#walindexformat">fileformat2.html#walindexformat</a>
+<li>WAL-mode locks &rarr; <a href="walformat.html#locks">walformat.html#locks</a>
+<li>wal_autocheckpoint pragma &rarr; <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>
+ <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>
+ <a href="capi3ref.html#sqlite3_wal_autocheckpoint">capi3ref.html#sqlite3_wal_autocheckpoint</a>
+ <a href="capi3ref.html#sqlite3_wal_hook">capi3ref.html#sqlite3_wal_hook</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+<li>wal_checkpoint pragma &rarr; <a href="changes.html#version_3_7_6">changes.html#version_3_7_6</a>
+ <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a>
+ <a href="wal.html#fast">wal.html#fast</a>
+<li>WHERE clause &rarr; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+<li>window chaining &rarr; <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>window function &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="changes.html#version_3_27_2">changes.html#version_3_27_2</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+<li>window functions &rarr; <a href="appfunc.html">appfunc.html</a>
+ <a href="changes.html#version_3_25_0">changes.html#version_3_25_0</a>
+ <a href="changes.html#version_3_25_2">changes.html#version_3_25_2</a>
+ <a href="changes.html#version_3_25_3">changes.html#version_3_25_3</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_28_0">changes.html#version_3_28_0</a>
+ <a href="compile.html#omit_windowfunc">compile.html#omit_windowfunc</a>
+ <a href="features.html">features.html</a>
+ <a href="footprint.html">footprint.html</a>
+ <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>
+ <a href="news.html">news.html</a>
+ <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a>
+ <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a>
+ <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a>
+ <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a>
+<li>Window functions &rarr; <a href="appfunc.html">appfunc.html</a>
+<li>window-defn &rarr; <a href="lang_aggfunc.html">lang_aggfunc.html</a>
+ <a href="lang_altertable.html">lang_altertable.html</a>
+ <a href="lang_attach.html">lang_attach.html</a>
+ <a href="lang_createindex.html">lang_createindex.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+ <a href="lang_createview.html">lang_createview.html</a>
+ <a href="lang_delete.html">lang_delete.html</a>
+ <a href="lang_expr.html">lang_expr.html</a>
+ <a href="lang_insert.html">lang_insert.html</a>
+ <a href="lang_returning.html">lang_returning.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+ <a href="lang_select.html#compound">lang_select.html#compound</a>
+ <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+ <a href="lang_update.html">lang_update.html</a>
+ <a href="lang_upsert.html">lang_upsert.html</a>
+ <a href="lang_with.html">lang_with.html</a>
+ <a href="partialindex.html">partialindex.html</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+ <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a>
+ <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a>
+<li>window-function-invocation &rarr; <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+ <a href="windowfunctions.html">windowfunctions.html</a>
+<li>WITH &rarr; <a href="fullsql.html">fullsql.html</a>
+ <a href="lang_select.html">lang_select.html</a>
+<li>WITH clause &rarr; <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="changes.html#version_3_8_3">changes.html#version_3_8_3</a>
+ <a href="lang_select.html#values">lang_select.html#values</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a>
+<li>with-clause &rarr; <a href="lang_with.html">lang_with.html</a>
+<li>WITHOUT ROWID &rarr; <a href="autoinc.html">autoinc.html</a>
+ <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>
+ <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>
+ <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>
+ <a href="capi3ref.html#sqlite3_last_insert_rowid">capi3ref.html#sqlite3_last_insert_rowid</a>
+ <a href="capi3ref.html#sqlite3_table_column_metadata">capi3ref.html#sqlite3_table_column_metadata</a>
+ <a href="capi3ref.html#sqlite3_update_hook">capi3ref.html#sqlite3_update_hook</a>
+ <a href="changes.html#version_3_16_2">changes.html#version_3_16_2</a>
+ <a href="changes.html#version_3_17_0">changes.html#version_3_17_0</a>
+ <a href="changes.html#version_3_19_0">changes.html#version_3_19_0</a>
+ <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="changes.html#version_3_40_0">changes.html#version_3_40_0</a>
+ <a href="changes.html#version_3_8_11">changes.html#version_3_8_11</a>
+ <a href="changes.html#version_3_8_11_1">changes.html#version_3_8_11_1</a>
+ <a href="changes.html#version_3_8_2">changes.html#version_3_8_2</a>
+ <a href="changes.html#version_3_8_5">changes.html#version_3_8_5</a>
+ <a href="changes.html#version_3_8_6">changes.html#version_3_8_6</a>
+ <a href="changes.html#version_3_8_8">changes.html#version_3_8_8</a>
+ <a href="fileformat2.html##sqltab">fileformat2.html##sqltab</a>
+ <a href="fileformat2.html#btypes">fileformat2.html#btypes</a>
+ <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a>
+ <a href="fileformat2.html#stat1tab">fileformat2.html#stat1tab</a>
+ <a href="fileformat2.html#stat4tab">fileformat2.html#stat4tab</a>
+ <a href="imposter.html">imposter.html</a>
+ <a href="lang_createtable.html">lang_createtable.html</a>
+ <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a>
+ <a href="lang_createtable.html#rowid">lang_createtable.html#rowid</a>
+ <a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a>
+ <a href="lang_expr.html#in_op">lang_expr.html#in_op</a>
+ <a href="news.html">news.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="optoverview.html#or_opt">optoverview.html#or_opt</a>
+ <a href="pragma.html#pragma_foreign_key_check">pragma.html#pragma_foreign_key_check</a>
+ <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a>
+ <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a>
+ <a href="pragma.html#pragma_table_list">pragma.html#pragma_table_list</a>
+ <a href="queryplanner.html#partialsort">queryplanner.html#partialsort</a>
+ <a href="queryplanner.html#searching">queryplanner.html#searching</a>
+ <a href="quirks.html">quirks.html</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a>
+ <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a>
+ <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a>
+ <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a>
+ <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+ <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a>
+ <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a>
+ <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a>
+ <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a>
+ <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a>
+ <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a>
+ <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a>
+ <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a>
+ <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a>
+ <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a>
+ <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a>
+ <a href="rowidtable.html">rowidtable.html</a>
+ <a href="schematab.html">schematab.html</a>
+ <a href="sessionintro.html">sessionintro.html</a>
+ <a href="sqldiff.html">sqldiff.html</a>
+ <a href="stricttables.html">stricttables.html</a>
+ <a href="vtab.html#worid">vtab.html#worid</a>
+<li>WITHOUT ROWID virtual table &rarr; <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>WITHOUT ROWID virtual tables &rarr; <a href="changes.html#version_3_14">changes.html#version_3_14</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="releaselog/3_14.html">releaselog/3_14.html</a>
+ <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a>
+ <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+<li>writable_schema &rarr; <a href="changes.html#version_3_30_0">changes.html#version_3_30_0</a>
+ <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a>
+ <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a>
+<li>write-ahead log &rarr; <a href="atomiccommit.html">atomiccommit.html</a>
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer</a>
+ <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>
+ <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a>
+ <a href="capi3ref.html#sqlite3_wal_autocheckpoint">capi3ref.html#sqlite3_wal_autocheckpoint</a>
+ <a href="capi3ref.html#sqlite3_wal_checkpoint">capi3ref.html#sqlite3_wal_checkpoint</a>
+ <a href="capi3ref.html#sqlitefcntljournalpointer">capi3ref.html#sqlitefcntljournalpointer</a>
+ <a href="compile.html#omit_wal">compile.html#omit_wal</a>
+ <a href="errlog.html">errlog.html</a>
+ <a href="howtocorrupt.html#roguejrnl">howtocorrupt.html#roguejrnl</a>
+ <a href="lang_vacuum.html">lang_vacuum.html</a>
+ <a href="lang_vacuum.html#howvacuumworks">lang_vacuum.html#howvacuumworks</a>
+ <a href="lockingv3.html">lockingv3.html</a>
+ <a href="oldnews.html">oldnews.html</a>
+ <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a>
+ <a href="pragma.html#pragma_wal_autocheckpoint">pragma.html#pragma_wal_autocheckpoint</a>
+ <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a>
+ <a href="shortnames.html">shortnames.html</a>
+ <a href="shortnames.html#db83corrupt">shortnames.html#db83corrupt</a>
+<li>xBegin &rarr; <a href="vtab.html#xcommit">vtab.html#xcommit</a>
+ <a href="vtab.html#xrollback">vtab.html#xrollback</a>
+ <a href="vtab.html#xsync">vtab.html#xsync</a>
+<li>xBestIndex &rarr; <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a>
+ <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>
+ <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>
+ <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="capi3ref.html#sqlite3_vtab_collation">capi3ref.html#sqlite3_vtab_collation</a>
+ <a href="capi3ref.html#sqlite3_vtab_distinct">capi3ref.html#sqlite3_vtab_distinct</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+ <a href="capi3ref.html#sqlite3_vtab_in_first">capi3ref.html#sqlite3_vtab_in_first</a>
+ <a href="capi3ref.html#sqlite3_vtab_rhs_value">capi3ref.html#sqlite3_vtab_rhs_value</a>
+ <a href="changes.html#version_3_12_0">changes.html#version_3_12_0</a>
+ <a href="changes.html#version_3_21_0">changes.html#version_3_21_0</a>
+ <a href="changes.html#version_3_26_0">changes.html#version_3_26_0</a>
+ <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>
+ <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a>
+ <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a>
+ <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a>
+ <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a>
+ <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a>
+ <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>
+ <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>
+ <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+ <a href="rescode.html#constraint">rescode.html#constraint</a>
+ <a href="rescode.html#notfound">rescode.html#notfound</a>
+ <a href="vtab.html#xfilter">vtab.html#xfilter</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+<li>xColumn &rarr; <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a>
+ <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="capi3ref.html#sqlite3_vtab_cursor">capi3ref.html#sqlite3_vtab_cursor</a>
+ <a href="capi3ref.html#sqlite3_vtab_nochange">capi3ref.html#sqlite3_vtab_nochange</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+ <a href="vtab.html#xfilter">vtab.html#xfilter</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>xCommit &rarr; <a href="vtab.html#xBegin">vtab.html#xBegin</a>
+ <a href="vtab.html#xsync">vtab.html#xsync</a>
+<li>xConnect &rarr; <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous</a>
+ <a href="c3ref/create_module.html">c3ref/create_module.html</a>
+ <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a>
+ <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a>
+ <a href="capi3ref.html#sqlite3_create_module">capi3ref.html#sqlite3_create_module</a>
+ <a href="capi3ref.html#sqlite3_declare_vtab">capi3ref.html#sqlite3_declare_vtab</a>
+ <a href="capi3ref.html#sqlite3_vtab_config">capi3ref.html#sqlite3_vtab_config</a>
+ <a href="capi3ref.html#sqlitevtabconstraintsupport">capi3ref.html#sqlitevtabconstraintsupport</a>
+ <a href="capi3ref.html#sqlitevtabdirectonly">capi3ref.html#sqlitevtabdirectonly</a>
+ <a href="capi3ref.html#sqlitevtabinnocuous">capi3ref.html#sqlitevtabinnocuous</a>
+ <a href="changes.html#version_3_31_0">changes.html#version_3_31_0</a>
+ <a href="lang_createvtab.html">lang_createvtab.html</a>
+ <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a>
+ <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a>
+ <a href="vtab.html#epovtab">vtab.html#epovtab</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+ <a href="vtab.html#xcreate">vtab.html#xcreate</a>
+ <a href="vtab.html#xdisconnect">vtab.html#xdisconnect</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>xCreate &rarr; <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly</a>
+ <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous</a>
+ <a href="c3ref/create_module.html">c3ref/create_module.html</a>
+ <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a>
+ <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a>
+ <a href="capi3ref.html#sqlite3_create_module">capi3ref.html#sqlite3_create_module</a>
+ <a href="capi3ref.html#sqlite3_declare_vtab">capi3ref.html#sqlite3_declare_vtab</a>
+ <a href="capi3ref.html#sqlite3_vtab_config">capi3ref.html#sqlite3_vtab_config</a>
+ <a href="capi3ref.html#sqlitevtabconstraintsupport">capi3ref.html#sqlitevtabconstraintsupport</a>
+ <a href="capi3ref.html#sqlitevtabdirectonly">capi3ref.html#sqlitevtabdirectonly</a>
+ <a href="capi3ref.html#sqlitevtabinnocuous">capi3ref.html#sqlitevtabinnocuous</a>
+ <a href="lang_createvtab.html">lang_createvtab.html</a>
+ <a href="vtab.html">vtab.html</a>
+ <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a>
+ <a href="vtab.html#epovtab">vtab.html#epovtab</a>
+ <a href="vtab.html#sqlite3_module.xDestroy">vtab.html#sqlite3_module.xDestroy</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+ <a href="vtab.html#xconnect">vtab.html#xconnect</a>
+ <a href="vtab.html#xupdate">vtab.html#xupdate</a>
+<li>xDestroy &rarr; <a href="vtab.html#xdisconnect">vtab.html#xdisconnect</a>
+<li>xDisconnect &rarr; <a href="vtab.html#sqlite3_module.xDestroy">vtab.html#sqlite3_module.xDestroy</a>
+<li>xEof &rarr; <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_cursor">capi3ref.html#sqlite3_vtab_cursor</a>
+ <a href="vtab.html#xfilter">vtab.html#xfilter</a>
+ <a href="vtab.html#xnext">vtab.html#xnext</a>
+<li>xFilter &rarr; <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a>
+ <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>
+ <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="capi3ref.html#sqlite3_vtab_cursor">capi3ref.html#sqlite3_vtab_cursor</a>
+ <a href="capi3ref.html#sqlite3_vtab_in">capi3ref.html#sqlite3_vtab_in</a>
+ <a href="capi3ref.html#sqlite3_vtab_in_first">capi3ref.html#sqlite3_vtab_in_first</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+ <a href="vtab.html#xeof">vtab.html#xeof</a>
+ <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a>
+ <a href="vtab.html#xnext">vtab.html#xnext</a>
+ <a href="vtab.html#xopen">vtab.html#xopen</a>
+<li>xFindFunction &rarr; <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a>
+ <a href="c3ref/overload_function.html">c3ref/overload_function.html</a>
+ <a href="capi3ref.html#SQLITE_INDEX_CONSTRAINT_EQ">capi3ref.html#SQLITE_INDEX_CONSTRAINT_EQ</a>
+ <a href="capi3ref.html#sqlite3_overload_function">capi3ref.html#sqlite3_overload_function</a>
+ <a href="vtab.html#colUsed">vtab.html#colUsed</a>
+ <a href="vtab.html#xbestindex">vtab.html#xbestindex</a>
+<li>xNext &rarr; <a href="c3ref/index_info.html">c3ref/index_info.html</a>
+ <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a>
+ <a href="capi3ref.html#sqlite3_index_info">capi3ref.html#sqlite3_index_info</a>
+ <a href="capi3ref.html#sqlite3_vtab_cursor">capi3ref.html#sqlite3_vtab_cursor</a>
+ <a href="vtab.html#xeof">vtab.html#xeof</a>
+ <a href="vtab.html#xfilter">vtab.html#xfilter</a>
+<li>xRelease &rarr; <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+<li>xRollback &rarr; <a href="vtab.html#xBegin">vtab.html#xBegin</a>
+ <a href="vtab.html#xsync">vtab.html#xsync</a>
+<li>xRollbackTo &rarr; <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+<li>xRowid &rarr; <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a>
+ <a href="capi3ref.html#sqlite3_vtab_cursor">capi3ref.html#sqlite3_vtab_cursor</a>
+ <a href="vtab.html#xfilter">vtab.html#xfilter</a>
+<li>xSavepoint &rarr; <a href="changes.html#version_3_7_7">changes.html#version_3_7_7</a>
+ <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a>
+<li>xUpdate &rarr; <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport</a>
+ <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>
+ <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a>
+ <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>
+ <a href="capi3ref.html#sqlite3_value_blob">capi3ref.html#sqlite3_value_blob</a>
+ <a href="capi3ref.html#sqlite3_vtab_nochange">capi3ref.html#sqlite3_vtab_nochange</a>
+ <a href="capi3ref.html#sqlite3_vtab_on_conflict">capi3ref.html#sqlite3_vtab_on_conflict</a>
+ <a href="capi3ref.html#sqlitevtabconstraintsupport">capi3ref.html#sqlitevtabconstraintsupport</a>
+ <a href="vtab.html#worid">vtab.html#worid</a>
+<li>YYSTACKDEPTH &rarr; <a href="compile.html#yytrackmaxstackdepth">compile.html#yytrackmaxstackdepth</a>
+<li>YYTRACKMAXSTACKDEPTH &rarr; <a href="c3ref/c_status_malloc_count.html#sqlitestatusparserstack">c3ref/c_status_malloc_count.html#sqlitestatusparserstack</a>
+ <a href="capi3ref.html#sqlitestatusparserstack">capi3ref.html#sqlitestatusparserstack</a>
+<li>z &rarr; <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>
+ <a href="capi3ref.html#sqlite3_mprintf">capi3ref.html#sqlite3_mprintf</a>
+ <a href="printf.html">printf.html</a>
+<li>zeroblob &rarr; <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>
+ <a href="capi3ref.html#sqlite3_blob_open">capi3ref.html#sqlite3_blob_open</a>
+ <a href="changes.html#version_3_16_2">changes.html#version_3_16_2</a>
+ <a href="changes.html#version_3_27_0">changes.html#version_3_27_0</a>
+ <a href="changes.html#version_3_8_4">changes.html#version_3_8_4</a>
+ <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a>
+ <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a>
+ <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a>
+ <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a>
+ <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a>
+ <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a>
+ <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a>
+ <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a>
+<li>zipfile &rarr; <a href="cli.html#arinsup">cli.html#arinsup</a>
+ <a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a>
+ <a href="vtablist.html">vtablist.html</a>
+<li>Zipfile virtual table &rarr; <a href="changes.html#version_3_22_0">changes.html#version_3_22_0</a>
+ <a href="changes.html#version_3_23_0">changes.html#version_3_23_0</a>
+ <a href="cli.html#zipdb">cli.html#zipdb</a>
+ <a href="cves.html#cvetab">cves.html#cvetab</a>
+ <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a>
+ <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a>
+ <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a>
+</ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/wrap.tcl?m=86a88e65fd2db6eba">2022-12-07 17:49:21</a> UTC </small></i></p>
+
diff --git a/www/doc_keyword_crossref.html b/www/doc_keyword_crossref.html
new file mode 100644
index 0000000..d1b528f
--- /dev/null
+++ b/www/doc_keyword_crossref.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Keyword Crossreference</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<ul><li>--insert option - <a href="cli.html#arinsup">cli.html#arinsup</a></li><li>--safe command-line option - <a href="cli.html#safemode">cli.html#safemode</a></li><li>--update option - <a href="cli.html#arinsup">cli.html#arinsup</a></li><li>-DHAVE_FDATASYNC - <a href="compile.html#fdatasync">compile.html#fdatasync</a></li><li>-DHAVE_GMTIME_R - <a href="compile.html#gmtime_r">compile.html#gmtime_r</a></li><li>-DHAVE_ISNAN - <a href="compile.html#isnan">compile.html#isnan</a></li><li>-DHAVE_LOCALTIME_R - <a href="compile.html#localtime_r">compile.html#localtime_r</a></li><li>-DHAVE_LOCALTIME_S - <a href="compile.html#localtime_s">compile.html#localtime_s</a></li><li>-DHAVE_MALLOC_USABLE_SIZE - <a href="compile.html#malloc_usable_size">compile.html#malloc_usable_size</a></li><li>-DHAVE_SQLITE_CONFIG_H - <a href="compile.html#sqlite_config_h">compile.html#sqlite_config_h</a></li><li>-DHAVE_STRCHRNUL - <a href="compile.html#strchrnul">compile.html#strchrnul</a></li><li>-DHAVE_USLEEP - <a href="compile.html#usleep">compile.html#usleep</a></li><li>-DHAVE_UTIME - <a href="compile.html#utime">compile.html#utime</a></li><li>-DSQLITE_4_BYTE_ALIGNED_MALLOC - <a href="compile.html#4_byte_aligned_malloc">compile.html#4_byte_aligned_malloc</a></li><li>-DSQLITE_ALLOW_COVERING_INDEX_SCAN - <a href="compile.html#allow_covering_index_scan">compile.html#allow_covering_index_scan</a></li><li>-DSQLITE_ALLOW_URI_AUTHORITY - <a href="compile.html#allow_uri_authority">compile.html#allow_uri_authority</a></li><li>-DSQLITE_API - <a href="compile.html#api">compile.html#api</a></li><li>-DSQLITE_APICALL - <a href="compile.html#apicall">compile.html#apicall</a></li><li>-DSQLITE_BYTEORDER - <a href="compile.html#byteorder">compile.html#byteorder</a></li><li>-DSQLITE_CALLBACK - <a href="compile.html#callback">compile.html#callback</a></li><li>-DSQLITE_CASE_SENSITIVE_LIKE - <a href="compile.html#case_sensitive_like">compile.html#case_sensitive_like</a></li><li>-DSQLITE_CDECL - <a href="compile.html#cdecl">compile.html#cdecl</a></li><li>-DSQLITE_DEBUG - <a href="compile.html#debug">compile.html#debug</a></li><li>-DSQLITE_DEFAULT_AUTOMATIC_INDEX - <a href="compile.html#default_automatic_index">compile.html#default_automatic_index</a></li><li>-DSQLITE_DEFAULT_AUTOVACUUM - <a href="compile.html#default_autovacuum">compile.html#default_autovacuum</a></li><li>-DSQLITE_DEFAULT_CACHE_SIZE - <a href="compile.html#default_cache_size">compile.html#default_cache_size</a></li><li>-DSQLITE_DEFAULT_FILE_FORMAT - <a href="compile.html#default_file_format">compile.html#default_file_format</a></li><li>-DSQLITE_DEFAULT_FILE_PERMISSIONS - <a href="compile.html#default_file_permissions">compile.html#default_file_permissions</a></li><li>-DSQLITE_DEFAULT_FOREIGN_KEYS - <a href="compile.html#default_foreign_keys">compile.html#default_foreign_keys</a></li><li>-DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT - <a href="compile.html#default_journal_size_limit">compile.html#default_journal_size_limit</a></li><li>-DSQLITE_DEFAULT_LOCKING_MODE - <a href="compile.html#default_locking_mode">compile.html#default_locking_mode</a></li><li>-DSQLITE_DEFAULT_LOOKASIDE - <a href="compile.html#default_lookaside">compile.html#default_lookaside</a></li><li>-DSQLITE_DEFAULT_MEMSTATUS - <a href="compile.html#default_memstatus">compile.html#default_memstatus</a></li><li>-DSQLITE_DEFAULT_MMAP_SIZE - <a href="compile.html#default_mmap_size">compile.html#default_mmap_size</a></li><li>-DSQLITE_DEFAULT_PAGE_SIZE - <a href="compile.html#default_page_size">compile.html#default_page_size</a></li><li>-DSQLITE_DEFAULT_PCACHE_INITSZ - <a href="compile.html#default_pcache_initsz">compile.html#default_pcache_initsz</a></li><li>-DSQLITE_DEFAULT_SYNCHRONOUS - <a href="compile.html#default_synchronous">compile.html#default_synchronous</a></li><li>-DSQLITE_DEFAULT_WAL_AUTOCHECKPOINT - <a href="compile.html#default_wal_autocheckpoint">compile.html#default_wal_autocheckpoint</a></li><li>-DSQLITE_DEFAULT_WAL_SYNCHRONOUS - <a href="compile.html#default_wal_synchronous">compile.html#default_wal_synchronous</a></li><li>-DSQLITE_DEFAULT_WORKER_THREADS - <a href="compile.html#default_worker_threads">compile.html#default_worker_threads</a></li><li>-DSQLITE_DIRECT_OVERFLOW_READ - <a href="compile.html#direct_overflow_read">compile.html#direct_overflow_read</a></li><li>-DSQLITE_DISABLE_DIRSYNC - <a href="compile.html#disable_dirsync">compile.html#disable_dirsync</a></li><li>-DSQLITE_DISABLE_FTS3_UNICODE - <a href="compile.html#disable_fts3_unicode">compile.html#disable_fts3_unicode</a></li><li>-DSQLITE_DISABLE_FTS4_DEFERRED - <a href="compile.html#disable_fts4_deferred">compile.html#disable_fts4_deferred</a></li><li>-DSQLITE_DISABLE_INTRINSIC - <a href="compile.html#disable_intrinsic">compile.html#disable_intrinsic</a></li><li>-DSQLITE_DISABLE_LFS - <a href="compile.html#disable_lfs">compile.html#disable_lfs</a></li><li>-DSQLITE_DQS - <a href="compile.html#dqs">compile.html#dqs</a></li><li>-DSQLITE_ENABLE_8_3_NAMES - <a href="compile.html#enable_8_3_names">compile.html#enable_8_3_names</a></li><li>-DSQLITE_ENABLE_API_ARMOR - <a href="compile.html#enable_api_armor">compile.html#enable_api_armor</a></li><li>-DSQLITE_ENABLE_ATOMIC_WRITE - <a href="compile.html#enable_atomic_write">compile.html#enable_atomic_write</a></li><li>-DSQLITE_ENABLE_BATCH_ATOMIC_WRITE - <a href="compile.html#enable_batch_atomic_write">compile.html#enable_batch_atomic_write</a></li><li>-DSQLITE_ENABLE_BYTECODE_VTAB - <a href="compile.html#enable_bytecode_vtab">compile.html#enable_bytecode_vtab</a></li><li>-DSQLITE_ENABLE_COLUMN_METADATA - <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a></li><li>-DSQLITE_ENABLE_DBPAGE_VTAB - <a href="compile.html#enable_dbpage_vtab">compile.html#enable_dbpage_vtab</a></li><li>-DSQLITE_ENABLE_DBSTAT_VTAB - <a href="compile.html#enable_dbstat_vtab">compile.html#enable_dbstat_vtab</a></li><li>-DSQLITE_ENABLE_DESERIALIZE - <a href="compile.html#enable_deserialize">compile.html#enable_deserialize</a></li><li>-DSQLITE_ENABLE_EXPLAIN_COMMENTS - <a href="compile.html#enable_explain_comments">compile.html#enable_explain_comments</a></li><li>-DSQLITE_ENABLE_FTS3 - <a href="compile.html#enable_fts3">compile.html#enable_fts3</a></li><li>-DSQLITE_ENABLE_FTS3_PARENTHESIS - <a href="compile.html#enable_fts3_parenthesis">compile.html#enable_fts3_parenthesis</a></li><li>-DSQLITE_ENABLE_FTS3_TOKENIZER - <a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</a></li><li>-DSQLITE_ENABLE_FTS4 - <a href="compile.html#enable_fts4">compile.html#enable_fts4</a></li><li>-DSQLITE_ENABLE_FTS5 - <a href="compile.html#enable_fts5">compile.html#enable_fts5</a></li><li>-DSQLITE_ENABLE_GEOPOLY - <a href="compile.html#enable_geopoly">compile.html#enable_geopoly</a></li><li>-DSQLITE_ENABLE_ICU - <a href="compile.html#enable_icu">compile.html#enable_icu</a></li><li>-DSQLITE_ENABLE_IOTRACE - <a href="compile.html#enable_iotrace">compile.html#enable_iotrace</a></li><li>-DSQLITE_ENABLE_JSON1 - <a href="compile.html#enable_json1">compile.html#enable_json1</a></li><li>-DSQLITE_ENABLE_LOCKING_STYLE - <a href="compile.html#enable_locking_style">compile.html#enable_locking_style</a></li><li>-DSQLITE_ENABLE_MATH_FUNCTIONS - <a href="compile.html#enable_math_functions">compile.html#enable_math_functions</a></li><li>-DSQLITE_ENABLE_MEMORY_MANAGEMENT - <a href="compile.html#enable_memory_management">compile.html#enable_memory_management</a></li><li>-DSQLITE_ENABLE_MEMSYS3 - <a href="compile.html#enable_memsys3">compile.html#enable_memsys3</a></li><li>-DSQLITE_ENABLE_MEMSYS5 - <a href="compile.html#enable_memsys5">compile.html#enable_memsys5</a></li><li>-DSQLITE_ENABLE_NORMALIZE - <a href="compile.html#enable_normalize">compile.html#enable_normalize</a></li><li>-DSQLITE_ENABLE_NULL_TRIM - <a href="compile.html#enable_null_trim">compile.html#enable_null_trim</a></li><li>-DSQLITE_ENABLE_OFFSET_SQL_FUNC - <a href="compile.html#enable_offset_sql_func">compile.html#enable_offset_sql_func</a></li><li>-DSQLITE_ENABLE_PREUPDATE_HOOK - <a href="compile.html#enable_preupdate_hook">compile.html#enable_preupdate_hook</a></li><li>-DSQLITE_ENABLE_QPSG - <a href="compile.html#enable_qpsg">compile.html#enable_qpsg</a></li><li>-DSQLITE_ENABLE_RBU - <a href="compile.html#enable_rbu">compile.html#enable_rbu</a></li><li>-DSQLITE_ENABLE_RTREE - <a href="compile.html#enable_rtree">compile.html#enable_rtree</a></li><li>-DSQLITE_ENABLE_SESSION - <a href="compile.html#enable_session">compile.html#enable_session</a></li><li>-DSQLITE_ENABLE_SNAPSHOT - <a href="compile.html#enable_snapshot">compile.html#enable_snapshot</a></li><li>-DSQLITE_ENABLE_SORTER_REFERENCES - <a href="compile.html#enable_sorter_references">compile.html#enable_sorter_references</a></li><li>-DSQLITE_ENABLE_SQLLOG - <a href="compile.html#enable_sqllog">compile.html#enable_sqllog</a></li><li>-DSQLITE_ENABLE_STAT2 - <a href="compile.html#enable_stat2">compile.html#enable_stat2</a></li><li>-DSQLITE_ENABLE_STAT3 - <a href="compile.html#enable_stat3">compile.html#enable_stat3</a></li><li>-DSQLITE_ENABLE_STAT4 - <a href="compile.html#enable_stat4">compile.html#enable_stat4</a></li><li>-DSQLITE_ENABLE_STMT_SCANSTATUS - <a href="compile.html#enable_stmt_scanstatus">compile.html#enable_stmt_scanstatus</a></li><li>-DSQLITE_ENABLE_STMTVTAB - <a href="compile.html#enable_stmtvtab">compile.html#enable_stmtvtab</a></li><li>-DSQLITE_ENABLE_TREE_EXPLAIN - <a href="compile.html#enable_tree_explain">compile.html#enable_tree_explain</a></li><li>-DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION - <a href="compile.html#enable_unknown_sql_function">compile.html#enable_unknown_sql_function</a></li><li>-DSQLITE_ENABLE_UNLOCK_NOTIFY - <a href="compile.html#enable_unlock_notify">compile.html#enable_unlock_notify</a></li><li>-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT - <a href="compile.html#enable_update_delete_limit">compile.html#enable_update_delete_limit</a></li><li>-DSQLITE_EXTERN - <a href="compile.html#extern">compile.html#extern</a></li><li>-DSQLITE_EXTRA_DURABLE - <a href="compile.html#extra_durable">compile.html#extra_durable</a></li><li>-DSQLITE_FTS3_MAX_EXPR_DEPTH - <a href="compile.html#fts3_max_expr_depth">compile.html#fts3_max_expr_depth</a></li><li>-DSQLITE_HAVE_ISNAN - <a href="compile.html#have_isnan">compile.html#have_isnan</a></li><li>-DSQLITE_HAVE_ZLIB - <a href="compile.html#have_zlib">compile.html#have_zlib</a></li><li>-DSQLITE_INTROSPECTION_PRAGMAS - <a href="compile.html#introspection_pragmas">compile.html#introspection_pragmas</a></li><li>-DSQLITE_LIKE_DOESNT_MATCH_BLOBS - <a href="compile.html#like_doesnt_match_blobs">compile.html#like_doesnt_match_blobs</a></li><li>-DSQLITE_MAX_ALLOCATION_SIZE - <a href="compile.html#max_allocation_size">compile.html#max_allocation_size</a></li><li>-DSQLITE_MAX_MEMORY - <a href="compile.html#max_memory">compile.html#max_memory</a></li><li>-DSQLITE_MAX_MMAP_SIZE - <a href="compile.html#max_mmap_size">compile.html#max_mmap_size</a></li><li>-DSQLITE_MAX_SCHEMA_RETRY - <a href="compile.html#max_schema_retry">compile.html#max_schema_retry</a></li><li>-DSQLITE_MAX_WORKER_THREADS - <a href="compile.html#max_worker_threads">compile.html#max_worker_threads</a></li><li>-DSQLITE_MEMDB_DEFAULT_MAXSIZE - <a href="compile.html#memdb_default_maxsize">compile.html#memdb_default_maxsize</a></li><li>-DSQLITE_MEMDEBUG - <a href="compile.html#memdebug">compile.html#memdebug</a></li><li>-DSQLITE_MINIMUM_FILE_DESCRIPTOR - <a href="compile.html#minimum_file_descriptor">compile.html#minimum_file_descriptor</a></li><li>-DSQLITE_OMIT_ALTERTABLE - <a href="compile.html#omit_altertable">compile.html#omit_altertable</a></li><li>-DSQLITE_OMIT_ANALYZE - <a href="compile.html#omit_analyze">compile.html#omit_analyze</a></li><li>-DSQLITE_OMIT_ATTACH - <a href="compile.html#omit_attach">compile.html#omit_attach</a></li><li>-DSQLITE_OMIT_AUTHORIZATION - <a href="compile.html#omit_authorization">compile.html#omit_authorization</a></li><li>-DSQLITE_OMIT_AUTOINCREMENT - <a href="compile.html#omit_autoincrement">compile.html#omit_autoincrement</a></li><li>-DSQLITE_OMIT_AUTOINIT - <a href="compile.html#omit_autoinit">compile.html#omit_autoinit</a></li><li>-DSQLITE_OMIT_AUTOMATIC_INDEX - <a href="compile.html#omit_automatic_index">compile.html#omit_automatic_index</a></li><li>-DSQLITE_OMIT_AUTORESET - <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a></li><li>-DSQLITE_OMIT_AUTOVACUUM - <a href="compile.html#omit_autovacuum">compile.html#omit_autovacuum</a></li><li>-DSQLITE_OMIT_BETWEEN_OPTIMIZATION - <a href="compile.html#omit_between_optimization">compile.html#omit_between_optimization</a></li><li>-DSQLITE_OMIT_BLOB_LITERAL - <a href="compile.html#omit_blob_literal">compile.html#omit_blob_literal</a></li><li>-DSQLITE_OMIT_BTREECOUNT - <a href="compile.html#omit_btreecount">compile.html#omit_btreecount</a></li><li>-DSQLITE_OMIT_BUILTIN_TEST - <a href="compile.html#omit_builtin_test">compile.html#omit_builtin_test</a></li><li>-DSQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA - <a href="compile.html#omit_case_sensitive_like_pragma">compile.html#omit_case_sensitive_like_pragma</a></li><li>-DSQLITE_OMIT_CAST - <a href="compile.html#omit_cast">compile.html#omit_cast</a></li><li>-DSQLITE_OMIT_CHECK - <a href="compile.html#omit_check">compile.html#omit_check</a></li><li>-DSQLITE_OMIT_COMPILEOPTION_DIAGS - <a href="compile.html#omit_compileoption_diags">compile.html#omit_compileoption_diags</a></li><li>-DSQLITE_OMIT_COMPLETE - <a href="compile.html#omit_complete">compile.html#omit_complete</a></li><li>-DSQLITE_OMIT_COMPOUND_SELECT - <a href="compile.html#omit_compound_select">compile.html#omit_compound_select</a></li><li>-DSQLITE_OMIT_CTE - <a href="compile.html#omit_cte">compile.html#omit_cte</a></li><li>-DSQLITE_OMIT_DATETIME_FUNCS - <a href="compile.html#omit_datetime_funcs">compile.html#omit_datetime_funcs</a></li><li>-DSQLITE_OMIT_DECLTYPE - <a href="compile.html#omit_decltype">compile.html#omit_decltype</a></li><li>-DSQLITE_OMIT_DEPRECATED - <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a></li><li>-DSQLITE_OMIT_DESERIALIZE - <a href="compile.html#omit_deserialize">compile.html#omit_deserialize</a></li><li>-DSQLITE_OMIT_DISKIO - <a href="compile.html#omit_diskio">compile.html#omit_diskio</a></li><li>-DSQLITE_OMIT_EXPLAIN - <a href="compile.html#omit_explain">compile.html#omit_explain</a></li><li>-DSQLITE_OMIT_FLAG_PRAGMAS - <a href="compile.html#omit_flag_pragmas">compile.html#omit_flag_pragmas</a></li><li>-DSQLITE_OMIT_FLOATING_POINT - <a href="compile.html#omit_floating_point">compile.html#omit_floating_point</a></li><li>-DSQLITE_OMIT_FOREIGN_KEY - <a href="compile.html#omit_foreign_key">compile.html#omit_foreign_key</a></li><li>-DSQLITE_OMIT_GENERATED_COLUMNS - <a href="compile.html#omit_generated_columns">compile.html#omit_generated_columns</a></li><li>-DSQLITE_OMIT_GET_TABLE - <a href="compile.html#omit_get_table">compile.html#omit_get_table</a></li><li>-DSQLITE_OMIT_HEX_INTEGER - <a href="compile.html#omit_hex_integer">compile.html#omit_hex_integer</a></li><li>-DSQLITE_OMIT_INCRBLOB - <a href="compile.html#omit_incrblob">compile.html#omit_incrblob</a></li><li>-DSQLITE_OMIT_INTEGRITY_CHECK - <a href="compile.html#omit_integrity_check">compile.html#omit_integrity_check</a></li><li>-DSQLITE_OMIT_INTROSPECTION_PRAGMAS - <a href="compile.html#omit_introspection_pragmas">compile.html#omit_introspection_pragmas</a></li><li>-DSQLITE_OMIT_JSON - <a href="compile.html#omit_json">compile.html#omit_json</a></li><li>-DSQLITE_OMIT_LIKE_OPTIMIZATION - <a href="compile.html#omit_like_optimization">compile.html#omit_like_optimization</a></li><li>-DSQLITE_OMIT_LOAD_EXTENSION - <a href="compile.html#omit_load_extension">compile.html#omit_load_extension</a></li><li>-DSQLITE_OMIT_LOCALTIME - <a href="compile.html#omit_localtime">compile.html#omit_localtime</a></li><li>-DSQLITE_OMIT_LOOKASIDE - <a href="compile.html#omit_lookaside">compile.html#omit_lookaside</a></li><li>-DSQLITE_OMIT_MEMORYDB - <a href="compile.html#omit_memorydb">compile.html#omit_memorydb</a></li><li>-DSQLITE_OMIT_OR_OPTIMIZATION - <a href="compile.html#omit_or_optimization">compile.html#omit_or_optimization</a></li><li>-DSQLITE_OMIT_PAGER_PRAGMAS - <a href="compile.html#omit_pager_pragmas">compile.html#omit_pager_pragmas</a></li><li>-DSQLITE_OMIT_PRAGMA - <a href="compile.html#omit_pragma">compile.html#omit_pragma</a></li><li>-DSQLITE_OMIT_PROGRESS_CALLBACK - <a href="compile.html#omit_progress_callback">compile.html#omit_progress_callback</a></li><li>-DSQLITE_OMIT_QUICKBALANCE - <a href="compile.html#omit_quickbalance">compile.html#omit_quickbalance</a></li><li>-DSQLITE_OMIT_REINDEX - <a href="compile.html#omit_reindex">compile.html#omit_reindex</a></li><li>-DSQLITE_OMIT_SCHEMA_PRAGMAS - <a href="compile.html#omit_schema_pragmas">compile.html#omit_schema_pragmas</a></li><li>-DSQLITE_OMIT_SCHEMA_VERSION_PRAGMAS - <a href="compile.html#omit_schema_version_pragmas">compile.html#omit_schema_version_pragmas</a></li><li>-DSQLITE_OMIT_SHARED_CACHE - <a href="compile.html#omit_shared_cache">compile.html#omit_shared_cache</a></li><li>-DSQLITE_OMIT_SUBQUERY - <a href="compile.html#omit_subquery">compile.html#omit_subquery</a></li><li>-DSQLITE_OMIT_TCL_VARIABLE - <a href="compile.html#omit_tcl_variable">compile.html#omit_tcl_variable</a></li><li>-DSQLITE_OMIT_TEMPDB - <a href="compile.html#omit_tempdb">compile.html#omit_tempdb</a></li><li>-DSQLITE_OMIT_TRACE - <a href="compile.html#omit_trace">compile.html#omit_trace</a></li><li>-DSQLITE_OMIT_TRIGGER - <a href="compile.html#omit_trigger">compile.html#omit_trigger</a></li><li>-DSQLITE_OMIT_TRUNCATE_OPTIMIZATION - <a href="compile.html#omit_truncate_optimization">compile.html#omit_truncate_optimization</a></li><li>-DSQLITE_OMIT_UTF16 - <a href="compile.html#omit_utf16">compile.html#omit_utf16</a></li><li>-DSQLITE_OMIT_VACUUM - <a href="compile.html#omit_vacuum">compile.html#omit_vacuum</a></li><li>-DSQLITE_OMIT_VIEW - <a href="compile.html#omit_view">compile.html#omit_view</a></li><li>-DSQLITE_OMIT_VIRTUALTABLE - <a href="compile.html#omit_virtualtable">compile.html#omit_virtualtable</a></li><li>-DSQLITE_OMIT_WAL - <a href="compile.html#omit_wal">compile.html#omit_wal</a></li><li>-DSQLITE_OMIT_WINDOWFUNC - <a href="compile.html#omit_windowfunc">compile.html#omit_windowfunc</a></li><li>-DSQLITE_OMIT_WSD - <a href="compile.html#omit_wsd">compile.html#omit_wsd</a></li><li>-DSQLITE_OMIT_XFER_OPT - <a href="compile.html#omit_xfer_opt">compile.html#omit_xfer_opt</a></li><li>-DSQLITE_OS_OTHER - <a href="compile.html#os_other">compile.html#os_other</a></li><li>-DSQLITE_POWERSAFE_OVERWRITE - <a href="compile.html#powersafe_overwrite">compile.html#powersafe_overwrite</a></li><li>-DSQLITE_PRINTF_PRECISION_LIMIT - <a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a></li><li>-DSQLITE_QUERY_PLANNER_LIMIT - <a href="compile.html#query_planner_limit">compile.html#query_planner_limit</a></li><li>-DSQLITE_QUERY_PLANNER_LIMIT_INCR - <a href="compile.html#query_planner_limit_incr">compile.html#query_planner_limit_incr</a></li><li>-DSQLITE_REVERSE_UNORDERED_SELECTS - <a href="compile.html#reverse_unordered_selects">compile.html#reverse_unordered_selects</a></li><li>-DSQLITE_RTREE_INT_ONLY - <a href="compile.html#rtree_int_only">compile.html#rtree_int_only</a></li><li>-DSQLITE_SECURE_DELETE - <a href="compile.html#secure_delete">compile.html#secure_delete</a></li><li>-DSQLITE_SORTER_PMASZ - <a href="compile.html#sorter_pmasz">compile.html#sorter_pmasz</a></li><li>-DSQLITE_SOUNDEX - <a href="compile.html#soundex">compile.html#soundex</a></li><li>-DSQLITE_STDCALL - <a href="compile.html#stdcall">compile.html#stdcall</a></li><li>-DSQLITE_STMTJRNL_SPILL - <a href="compile.html#stmtjrnl_spill">compile.html#stmtjrnl_spill</a></li><li>-DSQLITE_SYSAPI - <a href="compile.html#sysapi">compile.html#sysapi</a></li><li>-DSQLITE_TCLAPI - <a href="compile.html#tclapi">compile.html#tclapi</a></li><li>-DSQLITE_TEMP_STORE - <a href="compile.html#temp_store">compile.html#temp_store</a></li><li>-DSQLITE_THREADSAFE - <a href="compile.html#threadsafe">compile.html#threadsafe</a></li><li>-DSQLITE_TRACE_SIZE_LIMIT - <a href="compile.html#trace_size_limit">compile.html#trace_size_limit</a></li><li>-DSQLITE_TRUSTED_SCHEMA - <a href="compile.html#trusted_schema">compile.html#trusted_schema</a></li><li>-DSQLITE_UNTESTABLE - <a href="compile.html#untestable">compile.html#untestable</a></li><li>-DSQLITE_USE_ALLOCA - <a href="compile.html#use_alloca">compile.html#use_alloca</a></li><li>-DSQLITE_USE_FCNTL_TRACE - <a href="compile.html#use_fcntl_trace">compile.html#use_fcntl_trace</a></li><li>-DSQLITE_USE_URI - <a href="compile.html#use_uri">compile.html#use_uri</a></li><li>-DSQLITE_WIN32_HEAP_CREATE - <a href="compile.html#win32_heap_create">compile.html#win32_heap_create</a></li><li>-DSQLITE_WIN32_MALLOC - <a href="compile.html#win32_malloc">compile.html#win32_malloc</a></li><li>-DSQLITE_WIN32_MALLOC_VALIDATE - <a href="compile.html#win32_malloc_validate">compile.html#win32_malloc_validate</a></li><li>-DSQLITE_ZERO_MALLOC - <a href="compile.html#zero_malloc">compile.html#zero_malloc</a></li><li>.archive command - <a href="cli.html#sqlar">cli.html#sqlar</a></li><li>.connection - <a href="cli.html#dotconn">cli.html#dotconn</a></li><li>.databases - <a href="cli.html#dotdatabases">cli.html#dotdatabases</a></li><li>.databases command - <a href="cli.html#dotdatabases">cli.html#dotdatabases</a></li><li>.dump - <a href="cli.html#dump">cli.html#dump</a></li><li>.excel - <a href="cli.html#dotexcel">cli.html#dotexcel</a></li><li>.expert command - <a href="cli.html#expert">cli.html#expert</a></li><li>.fullschema - <a href="cli.html#fullschema">cli.html#fullschema</a></li><li>.import - <a href="cli.html#csv">cli.html#csv</a></li><li>.import command - <a href="cli.html#csv">cli.html#csv</a></li><li>.imposter dot-command - <a href="imposter.html#dotimposter">imposter.html#dotimposter</a></li><li>.load command - <a href="cli.html#dotload">cli.html#dotload</a></li><li>.mode - <a href="cli.html#dotmode">cli.html#dotmode</a></li><li>.mode quote - <a href="cli.html#dotmodequote">cli.html#dotmodequote</a></li><li>.once - <a href="cli.html#dotoutput">cli.html#dotoutput</a></li><li>.open - <a href="cli.html#dotopen">cli.html#dotopen</a></li><li>.open command - <a href="cli.html#dotopen">cli.html#dotopen</a></li><li>.output - <a href="cli.html#dotoutput">cli.html#dotoutput</a></li><li>.parameter command - <a href="cli.html#param">cli.html#param</a></li><li>.read - <a href="cli.html#dotread">cli.html#dotread</a></li><li>.recover dot-command - <a href="cli.html#recover">cli.html#recover</a></li><li>.schema - <a href="cli.html#dschema">cli.html#dschema</a></li><li>.selftest dot-command - <a href="cli.html#selftest">cli.html#selftest</a></li><li>.sha3sum dot-command - <a href="cli.html#sha3sum">cli.html#sha3sum</a></li><li>.tables - <a href="cli.html#dtables">cli.html#dtables</a></li><li>3rd-party fuzzers - <a href="testing.html#3pfuzz">testing.html#3pfuzz</a></li><li>34to35 - <a href="34to35.html">34to35.html</a></li><li>35 Faster Than The Filesystem - <a href="fasterthanfs.html">fasterthanfs.html</a></li><li>35to36 - <a href="35to36.html">35to36.html</a></li><li>about 200 SQL statements per webpage - <a href="np1queryprob.html">np1queryprob.html</a></li><li>abs - <a href="lang_corefunc.html#abs">lang_corefunc.html#abs</a></li><li>abs SQL function - <a href="lang_corefunc.html#abs">lang_corefunc.html#abs</a></li><li>ACID - <a href="transactional.html">transactional.html</a></li><li>acos - <a href="lang_mathfunc.html#acos">lang_mathfunc.html#acos</a></li><li>acos SQL function - <a href="lang_mathfunc.html#acos">lang_mathfunc.html#acos</a></li><li>acosh - <a href="lang_mathfunc.html#acosh">lang_mathfunc.html#acosh</a></li><li>acosh SQL function - <a href="lang_mathfunc.html#acosh">lang_mathfunc.html#acosh</a></li><li>add column - <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a></li><li>Adding to Zip - <a href="zipfile.html#adding_entries_to_a_zip_archive">zipfile.html#adding_entries_to_a_zip_archive</a></li><li>advanced - <a href="swarmvtab.html#advanced_usage">swarmvtab.html#advanced_usage</a></li><li>advantages of WAL-mode - <a href="wal.html#advantages">wal.html#advantages</a></li><li>affinities - <a href="datatype3.html#affinity">datatype3.html#affinity</a></li><li>affinity - <a href="datatype3.html#affinity">datatype3.html#affinity</a></li><li>affinity in compound VIEWs - <a href="datatype3.html#affcompoundview">datatype3.html#affcompoundview</a></li><li>Affinity Of Expressions - <a href="datatype3.html#expraff">datatype3.html#expraff</a></li><li>affshort - <a href="aff_short.html">aff_short.html</a></li><li>AFL - <a href="testing.html#aflfuzz">testing.html#aflfuzz</a></li><li>aggfunc - <a href="lang_aggfunc.html">lang_aggfunc.html</a></li><li>Aggregate Functions - <a href="lang_aggfunc.html">lang_aggfunc.html</a></li><li>aggregate functions - <a href="lang_aggfunc.html">lang_aggfunc.html</a></li><li>aggregate window functions - <a href="windowfunctions.html#aggwinfunc">windowfunctions.html#aggwinfunc</a></li><li>aggregate-function-invocation - <a href="syntax/aggregate-function-invocation.html">syntax/aggregate-function-invocation.html</a></li><li>aggregate-function-invocation syntax diagram - <a href="syntax/aggregate-function-invocation.html">syntax/aggregate-function-invocation.html</a></li><li>alphabetical listing of documents - <a href="doclist.html">doclist.html</a></li><li>ALTER - <a href="lang_altertable.html">lang_altertable.html</a></li><li>ALTER TABLE - <a href="lang_altertable.html">lang_altertable.html</a></li><li>ALTER TABLE ADD COLUMN - <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a></li><li>ALTER TABLE DROP COLUMN - <a href="lang_altertable.html#altertabdropcol">lang_altertable.html#altertabdropcol</a></li><li>ALTER TABLE RENAME - <a href="lang_altertable.html#altertabrename">lang_altertable.html#altertabrename</a></li><li>ALTER TABLE RENAME COLUMN - <a href="lang_altertable.html#altertabmvcol">lang_altertable.html#altertabmvcol</a></li><li>ALTER TABLE RENAME documentation - <a href="lang_altertable.html#altertabrename">lang_altertable.html#altertabrename</a></li><li>alter-table-stmt - <a href="syntax/alter-table-stmt.html">syntax/alter-table-stmt.html</a></li><li>alter-table-stmt syntax diagram - <a href="syntax/alter-table-stmt.html">syntax/alter-table-stmt.html</a></li><li>altertable - <a href="lang_altertable.html">lang_altertable.html</a></li><li>amalgamation - <a href="amalgamation.html">amalgamation.html</a></li><li>amalgamation tarball - <a href="download.html">download.html</a></li><li>American Fuzzy Lop fuzzer - <a href="testing.html#aflfuzz">testing.html#aflfuzz</a></li><li>analysis_limit - <a href="pragma.html#pragma_analysis_limit">pragma.html#pragma_analysis_limit</a></li><li>analysis_limit pragma - <a href="pragma.html#pragma_analysis_limit">pragma.html#pragma_analysis_limit</a></li><li>ANALYZE - <a href="lang_analyze.html">lang_analyze.html</a></li><li>analyze - <a href="lang_analyze.html">lang_analyze.html</a></li><li>analyze-stmt - <a href="syntax/analyze-stmt.html">syntax/analyze-stmt.html</a></li><li>analyze-stmt syntax diagram - <a href="syntax/analyze-stmt.html">syntax/analyze-stmt.html</a></li><li>appformat - <a href="appfileformat.html">appfileformat.html</a></li><li>Application File Format - <a href="appfileformat.html">appfileformat.html</a></li><li>application file format - <a href="appfileformat.html">appfileformat.html</a></li><li>application file-format - <a href="appfileformat.html">appfileformat.html</a></li><li>Application ID - <a href="fileformat2.html#appid">fileformat2.html#appid</a></li><li>application-defined function attacks - <a href="appfunc.html#sec">appfunc.html#sec</a></li><li>application-defined SQL function - <a href="appfunc.html">appfunc.html</a></li><li>application-defined SQL functions - <a href="appfunc.html">appfunc.html</a></li><li>application-defined window functions - <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a></li><li>application_id - <a href="pragma.html#pragma_application_id">pragma.html#pragma_application_id</a></li><li>application_id pragma - <a href="pragma.html#pragma_application_id">pragma.html#pragma_application_id</a></li><li>appreciate the freedom - <a href="flextypegood.html">flextypegood.html</a></li><li>Appropriate Uses For SQLite - <a href="whentouse.html">whentouse.html</a></li><li>approximate ANALYZE - <a href="lang_analyze.html#approx">lang_analyze.html#approx</a></li><li>asin - <a href="lang_mathfunc.html#asin">lang_mathfunc.html#asin</a></li><li>asin SQL function - <a href="lang_mathfunc.html#asin">lang_mathfunc.html#asin</a></li><li>asinh - <a href="lang_mathfunc.html#asinh">lang_mathfunc.html#asinh</a></li><li>asinh SQL function - <a href="lang_mathfunc.html#asinh">lang_mathfunc.html#asinh</a></li><li>asynchronous I/O backend - <a href="asyncvfs.html">asyncvfs.html</a></li><li>asynchronous VFS - <a href="asyncvfs.html">asyncvfs.html</a></li><li>atan - <a href="lang_mathfunc.html#atan">lang_mathfunc.html#atan</a></li><li>atan SQL function - <a href="lang_mathfunc.html#atan">lang_mathfunc.html#atan</a></li><li>atan2 - <a href="lang_mathfunc.html#atan2">lang_mathfunc.html#atan2</a></li><li>atan2 SQL function - <a href="lang_mathfunc.html#atan2">lang_mathfunc.html#atan2</a></li><li>atanh - <a href="lang_mathfunc.html#atanh">lang_mathfunc.html#atanh</a></li><li>atanh SQL function - <a href="lang_mathfunc.html#atanh">lang_mathfunc.html#atanh</a></li><li>Atomic Commit - <a href="atomiccommit.html">atomiccommit.html</a></li><li>atomic commit - <a href="atomiccommit.html">atomiccommit.html</a></li><li>ATTACH - <a href="lang_attach.html">lang_attach.html</a></li><li>attach - <a href="lang_attach.html">lang_attach.html</a></li><li>ATTACH DATABASE - <a href="lang_attach.html">lang_attach.html</a></li><li>attach-stmt - <a href="syntax/attach-stmt.html">syntax/attach-stmt.html</a></li><li>attach-stmt syntax diagram - <a href="syntax/attach-stmt.html">syntax/attach-stmt.html</a></li><li>attached - <a href="lang_attach.html">lang_attach.html</a></li><li>attack resistance - <a href="security.html">security.html</a></li><li>authorizer callback - <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a></li><li>authorizer method - <a href="tclsqlite.html#authorizer">tclsqlite.html#authorizer</a></li><li>auto modifier - <a href="lang_datefunc.html#automod">lang_datefunc.html#automod</a></li><li>auto_vacuum - <a href="pragma.html#pragma_auto_vacuum">pragma.html#pragma_auto_vacuum</a></li><li>auto_vacuum pragma - <a href="pragma.html#pragma_auto_vacuum">pragma.html#pragma_auto_vacuum</a></li><li>autocommit mode - <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a></li><li>AUTOINCREMENT - <a href="autoinc.html">autoinc.html</a></li><li>automated undo/redo stack - <a href="undoredo.html">undoredo.html</a></li><li>automatic indexes - <a href="optoverview.html#autoindex">optoverview.html#autoindex</a></li><li>Automatic indexing - <a href="optoverview.html#autoindex">optoverview.html#autoindex</a></li><li>automatic indexing - <a href="optoverview.html#autoindex">optoverview.html#autoindex</a></li><li>automatic_index - <a href="pragma.html#pragma_automatic_index">pragma.html#pragma_automatic_index</a></li><li>automatic_index pragma - <a href="pragma.html#pragma_automatic_index">pragma.html#pragma_automatic_index</a></li><li>automatically running ANALYZE - <a href="lang_analyze.html#autoanalyze">lang_analyze.html#autoanalyze</a></li><li>automerge command - <a href="fts3.html#*fts4automergecmd">fts3.html#*fts4automergecmd</a></li><li>auxiliary columns - <a href="rtree.html#auxcol">rtree.html#auxcol</a></li><li>auxiliary columns in r-tree tables - <a href="rtree.html#auxcol">rtree.html#auxcol</a></li><li>auxiliary function mapping - <a href="fts5.html#sorting_by_auxiliary_function_results">fts5.html#sorting_by_auxiliary_function_results</a></li><li>avg - <a href="lang_aggfunc.html#avg">lang_aggfunc.html#avg</a></li><li>avg aggregate function - <a href="lang_aggfunc.html#avg">lang_aggfunc.html#avg</a></li><li>avoiding large WAL files - <a href="wal.html#bigwal">wal.html#bigwal</a></li><li>B-tree - <a href="fileformat2.html#btree">fileformat2.html#btree</a></li><li>B-Trees - <a href="fileformat2.html#btree">fileformat2.html#btree</a></li><li>backup API - <a href="backup.html">backup.html</a></li><li>backup method - <a href="tclsqlite.html#backup">tclsqlite.html#backup</a></li><li>bare aggregate terms - <a href="lang_select.html#bareagg">lang_select.html#bareagg</a></li><li>bcvtab - <a href="bytecodevtab.html">bytecodevtab.html</a></li><li>BEGIN - <a href="lang_transaction.html">lang_transaction.html</a></li><li>BEGIN EXCLUSIVE - <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a></li><li>BEGIN IMMEDIATE - <a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a></li><li>begin-stmt - <a href="syntax/begin-stmt.html">syntax/begin-stmt.html</a></li><li>begin-stmt syntax diagram - <a href="syntax/begin-stmt.html">syntax/begin-stmt.html</a></li><li>benefits of using WITHOUT ROWID - <a href="withoutrowid.html#bene">withoutrowid.html#bene</a></li><li>BETWEEN - <a href="lang_expr.html#between">lang_expr.html#between</a></li><li>BINARY - <a href="datatype3.html#collation">datatype3.html#collation</a></li><li>BINARY collating function - <a href="datatype3.html#collation">datatype3.html#collation</a></li><li>binary operators - <a href="lang_expr.html#binaryops">lang_expr.html#binaryops</a></li><li>bind_fallback method - <a href="tclsqlite.html#bind_fallback">tclsqlite.html#bind_fallback</a></li><li>BLOB handle - <a href="c3ref/blob.html">c3ref/blob.html</a></li><li>BLOB handles - <a href="c3ref/blob.html">c3ref/blob.html</a></li><li>BLOB I/O performance - <a href="intern-v-extern-blob.html">intern-v-extern-blob.html</a></li><li>block sorting - <a href="queryplanner.html#partialsort">queryplanner.html#partialsort</a></li><li>books about SQLite - <a href="books.html">books.html</a></li><li>boolean datatype - <a href="datatype3.html#boolean">datatype3.html#boolean</a></li><li>boolean expression - <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a></li><li>bound parameter - <a href="lang_expr.html#varparam">lang_expr.html#varparam</a></li><li>bound parameters - <a href="lang_expr.html#varparam">lang_expr.html#varparam</a></li><li>bugs - <a href="fts3.html#limitations">fts3.html#limitations</a></li><li>build product names - <a href="download.html#encoding">download.html#encoding</a></li><li>building a DLL - <a href="howtocompile.html#dll">howtocompile.html#dll</a></li><li>building the amalgamation - <a href="howtocompile.html#amal">howtocompile.html#amal</a></li><li>built-in memory allocators - <a href="malloc.html#altalloc">malloc.html#altalloc</a></li><li>built-in printf - <a href="printf.html">printf.html</a></li><li>built-in SQL math functions - <a href="lang_mathfunc.html">lang_mathfunc.html</a></li><li>built-in window functions - <a href="windowfunctions.html#builtins">windowfunctions.html#builtins</a></li><li>built-ins - <a href="windowfunctions.html#builtins">windowfunctions.html#builtins</a></li><li>builtin window functions - <a href="windowfunctions.html#biwinfunc">windowfunctions.html#biwinfunc</a></li><li>busy handler - <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a></li><li>busy method - <a href="tclsqlite.html#busy">tclsqlite.html#busy</a></li><li>busy-handler callback - <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a></li><li>busy_timeout - <a href="pragma.html#pragma_busy_timeout">pragma.html#pragma_busy_timeout</a></li><li>busy_timeout pragma - <a href="pragma.html#pragma_busy_timeout">pragma.html#pragma_busy_timeout</a></li><li>byte-order determination rules - <a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a></li><li>bytecode - <a href="opcode.html">opcode.html</a></li><li>bytecode and tables_used virtual tables - <a href="bytecodevtab.html">bytecodevtab.html</a></li><li>bytecode engine - <a href="opcode.html">opcode.html</a></li><li>bytecode virtual table - <a href="bytecodevtab.html">bytecodevtab.html</a></li><li>bytecodes - <a href="opcode.html">opcode.html</a></li><li>C-API function list - <a href="c3ref/funclist.html">c3ref/funclist.html</a></li><li>C-language Interface - <a href="c3ref/intro.html">c3ref/intro.html</a></li><li>cache method - <a href="tclsqlite.html#cache">tclsqlite.html#cache</a></li><li>cache query parameter - <a href="uri.html#uricache">uri.html#uricache</a></li><li>cache_size - <a href="pragma.html#pragma_cache_size">pragma.html#pragma_cache_size</a></li><li>cache_size pragma - <a href="pragma.html#pragma_cache_size">pragma.html#pragma_cache_size</a></li><li>cache_spill - <a href="pragma.html#pragma_cache_spill">pragma.html#pragma_cache_spill</a></li><li>cache_spill pragma - <a href="pragma.html#pragma_cache_spill">pragma.html#pragma_cache_spill</a></li><li>canonical source code - <a href="getthecode.html">getthecode.html</a></li><li>capi3ref - <a href="c3ref/intro.html">c3ref/intro.html</a></li><li>capi3ref_funclist - <a href="c3ref/funclist.html">c3ref/funclist.html</a></li><li>carray - <a href="carray.html">carray.html</a></li><li>carray table-valued function - <a href="carray.html">carray.html</a></li><li>CASE expression - <a href="lang_expr.html#case">lang_expr.html#case</a></li><li>case_sensitive_like - <a href="pragma.html#pragma_case_sensitive_like">pragma.html#pragma_case_sensitive_like</a></li><li>case_sensitive_like pragma - <a href="pragma.html#pragma_case_sensitive_like">pragma.html#pragma_case_sensitive_like</a></li><li>CAST - <a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a></li><li>cast - <a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a></li><li>CAST expression - <a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a></li><li>CAST operator - <a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a></li><li>categorical listing of SQLite documents - <a href="docs.html">docs.html</a></li><li>ceil - <a href="lang_mathfunc.html#ceil">lang_mathfunc.html#ceil</a></li><li>ceiling - <a href="lang_mathfunc.html#ceil">lang_mathfunc.html#ceil</a></li><li>cell format summary - <a href="fileformat2.html#cellformat">fileformat2.html#cellformat</a></li><li>cell payload - <a href="fileformat2.html#cell_payload">fileformat2.html#cell_payload</a></li><li>cell_size_check - <a href="pragma.html#pragma_cell_size_check">pragma.html#pragma_cell_size_check</a></li><li>cell_size_check pragma - <a href="pragma.html#pragma_cell_size_check">pragma.html#pragma_cell_size_check</a></li><li>cfgerrors - <a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a></li><li>change counter - <a href="fileformat2.html#chngctr">fileformat2.html#chngctr</a></li><li>changes - <a href="lang_corefunc.html#changes">lang_corefunc.html#changes</a></li><li>changes method - <a href="tclsqlite.html#changes">tclsqlite.html#changes</a></li><li>changes SQL function - <a href="lang_corefunc.html#changes">lang_corefunc.html#changes</a></li><li>changeset - <a href="sessionintro.html#changeset">sessionintro.html#changeset</a></li><li>changesets - <a href="sessionintro.html#changeset">sessionintro.html#changeset</a></li><li>char - <a href="lang_corefunc.html#char">lang_corefunc.html#char</a></li><li>char SQL function - <a href="lang_corefunc.html#char">lang_corefunc.html#char</a></li><li>CHECK - <a href="lang_createtable.html#ckconst">lang_createtable.html#ckconst</a></li><li>CHECK constraint - <a href="lang_createtable.html#ckconst">lang_createtable.html#ckconst</a></li><li>CHECK constraints - <a href="lang_createtable.html#ckconst">lang_createtable.html#ckconst</a></li><li>checklist - <a href="testing.html#cklist">testing.html#cklist</a></li><li>checkpoint - <a href="wal.html#ckpt">wal.html#ckpt</a></li><li>checkpoint mode - <a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a></li><li>checkpoint_fullfsync - <a href="pragma.html#pragma_checkpoint_fullfsync">pragma.html#pragma_checkpoint_fullfsync</a></li><li>checkpoint_fullfsync pragma - <a href="pragma.html#pragma_checkpoint_fullfsync">pragma.html#pragma_checkpoint_fullfsync</a></li><li>checkpointed - <a href="wal.html#ckpt">wal.html#ckpt</a></li><li>checkpointing - <a href="wal.html#ckpt">wal.html#ckpt</a></li><li>checksum VFS - <a href="cksumvfs.html">cksumvfs.html</a></li><li>checksum VFS shim - <a href="cksumvfs.html">cksumvfs.html</a></li><li>child key - <a href="foreignkeys.html#parentchild">foreignkeys.html#parentchild</a></li><li>child table - <a href="foreignkeys.html#parentchild">foreignkeys.html#parentchild</a></li><li>chronology - <a href="chronology.html">chronology.html</a></li><li>cintro - <a href="cintro.html">cintro.html</a></li><li>cksumvfs - <a href="cksumvfs.html">cksumvfs.html</a></li><li>CLI - <a href="cli.html">cli.html</a></li><li>clone the entire repository - <a href="getthecode.html#clone">getthecode.html#clone</a></li><li>close method - <a href="tclsqlite.html#close">tclsqlite.html#close</a></li><li>Clustered indexes - <a href="withoutrowid.html">withoutrowid.html</a></li><li>co-routines - <a href="optoverview.html#coroutines">optoverview.html#coroutines</a></li><li>coalesce - <a href="lang_corefunc.html#coalesce">lang_corefunc.html#coalesce</a></li><li>coalesce SQL function - <a href="lang_corefunc.html#coalesce">lang_corefunc.html#coalesce</a></li><li>Code of Conduct - <a href="codeofconduct.html">codeofconduct.html</a></li><li>Code of Ethics - <a href="codeofethics.html">codeofethics.html</a></li><li>Code of Ethics of the Project Founder - <a href="codeofethics.html">codeofethics.html</a></li><li>code repositories - <a href="download.html#srctree">download.html#srctree</a></li><li>COLLATE - <a href="lang_createindex.html#collidx">lang_createindex.html#collidx</a></li><li>COLLATE clause - <a href="lang_createtable.html#collateclause">lang_createtable.html#collateclause</a></li><li>COLLATE clauses - <a href="lang_createtable.html#collateclause">lang_createtable.html#collateclause</a></li><li>COLLATE constraint - <a href="lang_createtable.html#collateclause">lang_createtable.html#collateclause</a></li><li>collate method - <a href="tclsqlite.html#collate">tclsqlite.html#collate</a></li><li>COLLATE operator - <a href="lang_expr.html#collateop">lang_expr.html#collateop</a></li><li>collating function - <a href="datatype3.html#collation">datatype3.html#collation</a></li><li>collating sequence - <a href="datatype3.html#collation">datatype3.html#collation</a></li><li>collating sequences - <a href="datatype3.html#collation">datatype3.html#collation</a></li><li>collation - <a href="datatype3.html#collation">datatype3.html#collation</a></li><li>collation_list - <a href="pragma.html#pragma_collation_list">pragma.html#pragma_collation_list</a></li><li>collation_list pragma - <a href="pragma.html#pragma_collation_list">pragma.html#pragma_collation_list</a></li><li>collation_needed method - <a href="tclsqlite.html#collation_needed">tclsqlite.html#collation_needed</a></li><li>column access functions - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>column affinity - <a href="datatype3.html#affinity">datatype3.html#affinity</a></li><li>column definition - <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a></li><li>column definitions - <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a></li><li>column-constraint - <a href="syntax/column-constraint.html">syntax/column-constraint.html</a></li><li>column-constraint syntax diagram - <a href="syntax/column-constraint.html">syntax/column-constraint.html</a></li><li>column-def - <a href="syntax/column-def.html">syntax/column-def.html</a></li><li>column-def syntax diagram - <a href="syntax/column-def.html">syntax/column-def.html</a></li><li>column-name-list - <a href="syntax/column-name-list.html">syntax/column-name-list.html</a></li><li>column-name-list syntax diagram - <a href="syntax/column-name-list.html">syntax/column-name-list.html</a></li><li>Columnar output modes - <a href="cli.html#clmnr">cli.html#clmnr</a></li><li>columnar output modes - <a href="cli.html#clmnr">cli.html#clmnr</a></li><li>colUsed field - <a href="vtab.html#colUsed">vtab.html#colUsed</a></li><li>Command Line Interface - <a href="cli.html">cli.html</a></li><li>command-line interface - <a href="cli.html">cli.html</a></li><li>command-line options - <a href="cli.html#clopts">cli.html#clopts</a></li><li>command-line shell - <a href="cli.html">cli.html</a></li><li>commands - <a href="fts3.html#commands">fts3.html#commands</a></li><li>comment - <a href="lang_comment.html">lang_comment.html</a></li><li>comment-syntax - <a href="syntax/comment-syntax.html">syntax/comment-syntax.html</a></li><li>comment-syntax syntax diagram - <a href="syntax/comment-syntax.html">syntax/comment-syntax.html</a></li><li>comments - <a href="lang_comment.html">lang_comment.html</a></li><li>COMMIT - <a href="lang_transaction.html">lang_transaction.html</a></li><li>commit-stmt - <a href="syntax/commit-stmt.html">syntax/commit-stmt.html</a></li><li>commit-stmt syntax diagram - <a href="syntax/commit-stmt.html">syntax/commit-stmt.html</a></li><li>commit_hook method - <a href="tclsqlite.html#commit_hook">tclsqlite.html#commit_hook</a></li><li>common table expressions - <a href="lang_with.html">lang_with.html</a></li><li>common-table-expression - <a href="syntax/common-table-expression.html">syntax/common-table-expression.html</a></li><li>common-table-expression syntax diagram - <a href="syntax/common-table-expression.html">syntax/common-table-expression.html</a></li><li>comparison affinity rules - <a href="datatype3.html#compaff">datatype3.html#compaff</a></li><li>comparison expressions - <a href="datatype3.html#comparisons">datatype3.html#comparisons</a></li><li>comparison with fts4 - <a href="fts5.html#appendix_a">fts5.html#appendix_a</a></li><li>compilation - <a href="swarmvtab.html#compiling_and_using_swarmvtab">swarmvtab.html#compiling_and_using_swarmvtab</a></li><li>compile fts - <a href="fts3.html#compiling_and_enabling_fts3_and_fts4">fts3.html#compiling_and_enabling_fts3_and_fts4</a></li><li>compile loadable extensions - <a href="loadext.html#build">loadext.html#build</a></li><li>compile-time options - <a href="compile.html">compile.html</a></li><li>compile_options - <a href="pragma.html#pragma_compile_options">pragma.html#pragma_compile_options</a></li><li>compile_options pragma - <a href="pragma.html#pragma_compile_options">pragma.html#pragma_compile_options</a></li><li>Compiling Loadable Extensions - <a href="loadext.html#build">loadext.html#build</a></li><li>compiling the CLI - <a href="howtocompile.html#cli">howtocompile.html#cli</a></li><li>compiling the TCL interface - <a href="howtocompile.html#tcl">howtocompile.html#tcl</a></li><li>complete list of SQLite releases - <a href="changes.html">changes.html</a></li><li>complete method - <a href="tclsqlite.html#complete">tclsqlite.html#complete</a></li><li>COMPLETION - <a href="completion.html">completion.html</a></li><li>COMPLETION extension - <a href="completion.html">completion.html</a></li><li>COMPLETION table-valued function - <a href="completion.html">completion.html</a></li><li>compound query - <a href="lang_select.html#compound">lang_select.html#compound</a></li><li>compound SELECT - <a href="lang_select.html#compound">lang_select.html#compound</a></li><li>compound select - <a href="lang_select.html#compound">lang_select.html#compound</a></li><li>compound SELECTs - <a href="lang_select.html#compound">lang_select.html#compound</a></li><li>compound-operator - <a href="syntax/compound-operator.html">syntax/compound-operator.html</a></li><li>compound-operator syntax diagram - <a href="syntax/compound-operator.html">syntax/compound-operator.html</a></li><li>compound-select-stmt - <a href="syntax/compound-select-stmt.html">syntax/compound-select-stmt.html</a></li><li>compound-select-stmt syntax diagram - <a href="syntax/compound-select-stmt.html">syntax/compound-select-stmt.html</a></li><li>compressed FTS4 content - <a href="fts3.html#*fts4compression">fts3.html#*fts4compression</a></li><li>compute the Mandelbrot set - <a href="lang_with.html#mandelbrot">lang_with.html#mandelbrot</a></li><li>computed columns - <a href="gencol.html">gencol.html</a></li><li>config method - <a href="tclsqlite.html#config">tclsqlite.html#config</a></li><li>configurable edit distances - <a href="spellfix1.html#configeditdist">spellfix1.html#configeditdist</a></li><li>configuration option - <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a></li><li>conflict - <a href="lang_conflict.html">lang_conflict.html</a></li><li>conflict clause - <a href="lang_conflict.html">lang_conflict.html</a></li><li>conflict resolution algorithm - <a href="lang_conflict.html">lang_conflict.html</a></li><li>conflict resolution mode - <a href="c3ref/c_fail.html">c3ref/c_fail.html</a></li><li>conflict-clause - <a href="syntax/conflict-clause.html">syntax/conflict-clause.html</a></li><li>conflict-clause syntax diagram - <a href="syntax/conflict-clause.html">syntax/conflict-clause.html</a></li><li>constant-propagation optimization - <a href="optoverview.html#constprop">optoverview.html#constprop</a></li><li>contentless fts4 tables - <a href="fts3.html#_contentless_fts4_tables_">fts3.html#_contentless_fts4_tables_</a></li><li>copy method - <a href="tclsqlite.html#copy">tclsqlite.html#copy</a></li><li>copyright - <a href="copyright.html">copyright.html</a></li><li>Core Functions - <a href="lang_corefunc.html">lang_corefunc.html</a></li><li>core URI query parameters - <a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a></li><li>corefunc - <a href="lang_corefunc.html">lang_corefunc.html</a></li><li>coreqp - <a href="uri.html#coreqp">uri.html#coreqp</a></li><li>correlated subqueries - <a href="lang_expr.html#cosub">lang_expr.html#cosub</a></li><li>cos - <a href="lang_mathfunc.html#cos">lang_mathfunc.html#cos</a></li><li>cos SQL function - <a href="lang_mathfunc.html#cos">lang_mathfunc.html#cos</a></li><li>cosh - <a href="lang_mathfunc.html#cosh">lang_mathfunc.html#cosh</a></li><li>cosh SQL function - <a href="lang_mathfunc.html#cosh">lang_mathfunc.html#cosh</a></li><li>count - <a href="lang_aggfunc.html#count">lang_aggfunc.html#count</a></li><li>count aggregate function - <a href="lang_aggfunc.html#count">lang_aggfunc.html#count</a></li><li>count_changes - <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a></li><li>count_changes pragma - <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a></li><li>coverage testing vs. fuzz testing - <a href="testing.html#tension">testing.html#tension</a></li><li>covering index - <a href="queryplanner.html#covidx">queryplanner.html#covidx</a></li><li>covering indexes - <a href="queryplanner.html#covidx">queryplanner.html#covidx</a></li><li>covering indices - <a href="queryplanner.html#covidx">queryplanner.html#covidx</a></li><li>CPU cycles used - <a href="cpu.html">cpu.html</a></li><li>CPU performance measurement - <a href="cpu.html">cpu.html</a></li><li>CREATE INDEX - <a href="lang_createindex.html">lang_createindex.html</a></li><li>CREATE TABLE - <a href="lang_createtable.html">lang_createtable.html</a></li><li>CREATE TABLE AS - <a href="lang_createtable.html#createtabas">lang_createtable.html#createtabas</a></li><li>CREATE TRIGGER - <a href="lang_createtrigger.html">lang_createtrigger.html</a></li><li>CREATE VIEW - <a href="lang_createview.html">lang_createview.html</a></li><li>CREATE VIRTUAL TABLE - <a href="lang_createvtab.html">lang_createvtab.html</a></li><li>create-index-stmt - <a href="syntax/create-index-stmt.html">syntax/create-index-stmt.html</a></li><li>create-index-stmt syntax diagram - <a href="syntax/create-index-stmt.html">syntax/create-index-stmt.html</a></li><li>create-table-stmt - <a href="syntax/create-table-stmt.html">syntax/create-table-stmt.html</a></li><li>create-table-stmt syntax diagram - <a href="syntax/create-table-stmt.html">syntax/create-table-stmt.html</a></li><li>create-trigger-stmt - <a href="syntax/create-trigger-stmt.html">syntax/create-trigger-stmt.html</a></li><li>create-trigger-stmt syntax diagram - <a href="syntax/create-trigger-stmt.html">syntax/create-trigger-stmt.html</a></li><li>create-view-stmt - <a href="syntax/create-view-stmt.html">syntax/create-view-stmt.html</a></li><li>create-view-stmt syntax diagram - <a href="syntax/create-view-stmt.html">syntax/create-view-stmt.html</a></li><li>create-virtual-table-stmt - <a href="syntax/create-virtual-table-stmt.html">syntax/create-virtual-table-stmt.html</a></li><li>create-virtual-table-stmt syntax diagram - <a href="syntax/create-virtual-table-stmt.html">syntax/create-virtual-table-stmt.html</a></li><li>createindex - <a href="lang_createindex.html">lang_createindex.html</a></li><li>createtable - <a href="lang_createtable.html">lang_createtable.html</a></li><li>createtrigger - <a href="lang_createtrigger.html">lang_createtrigger.html</a></li><li>createview - <a href="lang_createview.html">lang_createview.html</a></li><li>createvtab - <a href="lang_createvtab.html">lang_createvtab.html</a></li><li>crew - <a href="crew.html">crew.html</a></li><li>CROSS JOIN - <a href="optoverview.html#crossjoin">optoverview.html#crossjoin</a></li><li>csv - <a href="csv.html">csv.html</a></li><li>CSV export - <a href="cli.html#csvout">cli.html#csvout</a></li><li>CSV import - <a href="cli.html#csv">cli.html#csv</a></li><li>CSV virtual table - <a href="csv.html">csv.html</a></li><li>cte-table-name - <a href="syntax/cte-table-name.html">syntax/cte-table-name.html</a></li><li>cte-table-name syntax diagram - <a href="syntax/cte-table-name.html">syntax/cte-table-name.html</a></li><li>custom auxiliary functions - <a href="fts5.html#_custom_auxiliary_functions_api_reference_">fts5.html#_custom_auxiliary_functions_api_reference_</a></li><li>custom builds - <a href="custombuild.html">custombuild.html</a></li><li>custom r-tree queries - <a href="rtree.html#customquery">rtree.html#customquery</a></li><li>custom SQL function - <a href="appfunc.html">appfunc.html</a></li><li>custom SQL functions - <a href="appfunc.html">appfunc.html</a></li><li>custom tokenizers - <a href="fts5.html#custom_tokenizers">fts5.html#custom_tokenizers</a></li><li>custom virtual tables - <a href="vtab.html#customvtab">vtab.html#customvtab</a></li><li>CVEs - <a href="cves.html">cves.html</a></li><li>Dan Kennedy - <a href="crew.html#dan">crew.html#dan</a></li><li>data container - <a href="whentouse.html#container">whentouse.html#container</a></li><li>data transfer format - <a href="whentouse.html#wireproto">whentouse.html#wireproto</a></li><li>data_store_directory - <a href="pragma.html#pragma_data_store_directory">pragma.html#pragma_data_store_directory</a></li><li>data_store_directory pragma - <a href="pragma.html#pragma_data_store_directory">pragma.html#pragma_data_store_directory</a></li><li>data_version - <a href="pragma.html#pragma_data_version">pragma.html#pragma_data_version</a></li><li>data_version pragma - <a href="pragma.html#pragma_data_version">pragma.html#pragma_data_version</a></li><li>database as container object - <a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a></li><li>database as object - <a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a></li><li>database connection - <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a></li><li>database connections - <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a></li><li>database corruption caused by inconsistent use of 83 filenames - <a href="shortnames.html#db83corrupt">shortnames.html#db83corrupt</a></li><li>database filename aliasing - <a href="howtocorrupt.html#alias">howtocorrupt.html#alias</a></li><li>database header - <a href="fileformat2.html#database_header">fileformat2.html#database_header</a></li><li>database_list - <a href="pragma.html#pragma_database_list">pragma.html#pragma_database_list</a></li><li>database_list pragma - <a href="pragma.html#pragma_database_list">pragma.html#pragma_database_list</a></li><li>datatype - <a href="datatype3.html">datatype3.html</a></li><li>date and time datatype - <a href="datatype3.html#datetime">datatype3.html#datetime</a></li><li>Date And Time Functions - <a href="lang_datefunc.html">lang_datefunc.html</a></li><li>date and time functions - <a href="lang_datefunc.html">lang_datefunc.html</a></li><li>date SQL function - <a href="lang_datefunc.html">lang_datefunc.html</a></li><li>date/time modifiers - <a href="lang_datefunc.html#dtmods">lang_datefunc.html#dtmods</a></li><li>date/time special case - <a href="deterministic.html#dtexception">deterministic.html#dtexception</a></li><li>datefunc - <a href="lang_datefunc.html">lang_datefunc.html</a></li><li>datetime SQL function - <a href="lang_datefunc.html">lang_datefunc.html</a></li><li>dbghints - <a href="debugging.html">debugging.html</a></li><li>dbhash - <a href="dbhash.html">dbhash.html</a></li><li>dbhash.exe - <a href="dbhash.html">dbhash.html</a></li><li>dbsqlfuzz - <a href="testing.html#dbsqlfuzz">testing.html#dbsqlfuzz</a></li><li>dbstat - <a href="dbstat.html">dbstat.html</a></li><li>DBSTAT aggregated mode - <a href="dbstat.html#dbstatagg">dbstat.html#dbstatagg</a></li><li>DBSTAT virtual table - <a href="dbstat.html">dbstat.html</a></li><li>dbstat virtual table - <a href="dbstat.html">dbstat.html</a></li><li>debugging hints - <a href="debugging.html">debugging.html</a></li><li>debugging memory allocator - <a href="malloc.html#memdebug">malloc.html#memdebug</a></li><li>decimal extension - <a href="floatingpoint.html#decext">floatingpoint.html#decext</a></li><li>decision checklist - <a href="whentouse.html#dbcklst">whentouse.html#dbcklst</a></li><li>DEFAULT clauses - <a href="lang_createtable.html#dfltval">lang_createtable.html#dfltval</a></li><li>default column value - <a href="lang_createtable.html#dfltval">lang_createtable.html#dfltval</a></li><li>default memory allocator - <a href="malloc.html#defaultalloc">malloc.html#defaultalloc</a></li><li>default value - <a href="lang_createtable.html#dfltval">lang_createtable.html#dfltval</a></li><li>default_cache_size - <a href="pragma.html#pragma_default_cache_size">pragma.html#pragma_default_cache_size</a></li><li>default_cache_size pragma - <a href="pragma.html#pragma_default_cache_size">pragma.html#pragma_default_cache_size</a></li><li>defense against dark arts - <a href="security.html">security.html</a></li><li>defense against the dark arts - <a href="security.html">security.html</a></li><li>defensive code - <a href="testing.html#defcode">testing.html#defcode</a></li><li>defer_foreign_keys - <a href="pragma.html#pragma_defer_foreign_keys">pragma.html#pragma_defer_foreign_keys</a></li><li>defer_foreign_keys pragma - <a href="pragma.html#pragma_defer_foreign_keys">pragma.html#pragma_defer_foreign_keys</a></li><li>degrees - <a href="lang_mathfunc.html#degrees">lang_mathfunc.html#degrees</a></li><li>degrees SQL function - <a href="lang_mathfunc.html#degrees">lang_mathfunc.html#degrees</a></li><li>DELETE - <a href="lang_delete.html">lang_delete.html</a></li><li>delete - <a href="lang_delete.html">lang_delete.html</a></li><li>delete-stmt - <a href="syntax/delete-stmt.html">syntax/delete-stmt.html</a></li><li>delete-stmt syntax diagram - <a href="syntax/delete-stmt.html">syntax/delete-stmt.html</a></li><li>delete-stmt-limited - <a href="syntax/delete-stmt-limited.html">syntax/delete-stmt-limited.html</a></li><li>delete-stmt-limited syntax diagram - <a href="syntax/delete-stmt-limited.html">syntax/delete-stmt-limited.html</a></li><li>DELETEs - <a href="lang_delete.html">lang_delete.html</a></li><li>deleting a hot journal - <a href="howtocorrupt.html#delhotjrnl">howtocorrupt.html#delhotjrnl</a></li><li>deprecated - <a href="c3ref/experimental.html">c3ref/experimental.html</a></li><li>DESC - <a href="lang_createindex.html#descidx">lang_createindex.html#descidx</a></li><li>descending index - <a href="lang_createindex.html#descidx">lang_createindex.html#descidx</a></li><li>descending indexes - <a href="lang_createindex.html#descidx">lang_createindex.html#descidx</a></li><li>descending indices - <a href="lang_createindex.html#descidx">lang_createindex.html#descidx</a></li><li>deserialize method - <a href="tclsqlite.html#deserialize">tclsqlite.html#deserialize</a></li><li>DETACH - <a href="lang_detach.html">lang_detach.html</a></li><li>detach - <a href="lang_detach.html">lang_detach.html</a></li><li>DETACH DATABASE - <a href="lang_detach.html">lang_detach.html</a></li><li>detach-stmt - <a href="syntax/detach-stmt.html">syntax/detach-stmt.html</a></li><li>detach-stmt syntax diagram - <a href="syntax/detach-stmt.html">syntax/detach-stmt.html</a></li><li>deterministic function - <a href="deterministic.html">deterministic.html</a></li><li>deterministic functions - <a href="deterministic.html">deterministic.html</a></li><li>deterministic SQL functions - <a href="deterministic.html">deterministic.html</a></li><li>DISTINCT - <a href="lang_select.html#distinct">lang_select.html#distinct</a></li><li>doclist - <a href="doclist.html">doclist.html</a></li><li>documents by category - <a href="docs.html">docs.html</a></li><li>dot-commands - <a href="cli.html#dotcmd">cli.html#dotcmd</a></li><li>double-quoted string literal - <a href="quirks.html#dblquote">quirks.html#dblquote</a></li><li>download page - <a href="download.html">download.html</a></li><li>drop column - <a href="lang_altertable.html#altertabdropcol">lang_altertable.html#altertabdropcol</a></li><li>DROP INDEX - <a href="lang_dropindex.html">lang_dropindex.html</a></li><li>DROP TABLE - <a href="lang_droptable.html">lang_droptable.html</a></li><li>DROP TRIGGER - <a href="lang_droptrigger.html">lang_droptrigger.html</a></li><li>DROP VIEW - <a href="lang_dropview.html">lang_dropview.html</a></li><li>drop-index-stmt - <a href="syntax/drop-index-stmt.html">syntax/drop-index-stmt.html</a></li><li>drop-index-stmt syntax diagram - <a href="syntax/drop-index-stmt.html">syntax/drop-index-stmt.html</a></li><li>drop-table-stmt - <a href="syntax/drop-table-stmt.html">syntax/drop-table-stmt.html</a></li><li>drop-table-stmt syntax diagram - <a href="syntax/drop-table-stmt.html">syntax/drop-table-stmt.html</a></li><li>drop-trigger-stmt - <a href="syntax/drop-trigger-stmt.html">syntax/drop-trigger-stmt.html</a></li><li>drop-trigger-stmt syntax diagram - <a href="syntax/drop-trigger-stmt.html">syntax/drop-trigger-stmt.html</a></li><li>drop-view-stmt - <a href="syntax/drop-view-stmt.html">syntax/drop-view-stmt.html</a></li><li>drop-view-stmt syntax diagram - <a href="syntax/drop-view-stmt.html">syntax/drop-view-stmt.html</a></li><li>dropindex - <a href="lang_dropindex.html">lang_dropindex.html</a></li><li>droptable - <a href="lang_droptable.html">lang_droptable.html</a></li><li>droptrigger - <a href="lang_droptrigger.html">lang_droptrigger.html</a></li><li>dropview - <a href="lang_dropview.html">lang_dropview.html</a></li><li>dynamic string - <a href="c3ref/str.html">c3ref/str.html</a></li><li>dynamic typing - <a href="datatype3.html">datatype3.html</a></li><li>edit SQL function - <a href="cli.html#editfunc">cli.html#editfunc</a></li><li>editdist3 - <a href="spellfix1.html#editdist3">spellfix1.html#editdist3</a></li><li>embedded - <a href="serverless.html">serverless.html</a></li><li>empty_result_callbacks - <a href="pragma.html#pragma_empty_result_callbacks">pragma.html#pragma_empty_result_callbacks</a></li><li>empty_result_callbacks pragma - <a href="pragma.html#pragma_empty_result_callbacks">pragma.html#pragma_empty_result_callbacks</a></li><li>enable_load_extension method - <a href="tclsqlite.html#enable_load_extension">tclsqlite.html#enable_load_extension</a></li><li>encoding - <a href="pragma.html#pragma_encoding">pragma.html#pragma_encoding</a></li><li>encoding pragma - <a href="pragma.html#pragma_encoding">pragma.html#pragma_encoding</a></li><li>enhanced query syntax - <a href="fts3.html#_set_operations_using_the_enhanced_query_syntax">fts3.html#_set_operations_using_the_enhanced_query_syntax</a></li><li>eponymous virtual table - <a href="vtab.html#epovtab">vtab.html#epovtab</a></li><li>eponymous virtual tables - <a href="vtab.html#epovtab">vtab.html#epovtab</a></li><li>eponymous-only virtual table - <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a></li><li>eponymous-only virtual tables - <a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a></li><li>eqp-or-opt - <a href="eqp.html#or-opt">eqp.html#or-opt</a></li><li>errlog - <a href="errlog.html">errlog.html</a></li><li>error code - <a href="rescode.html">rescode.html</a></li><li>error codes - <a href="rescode.html">rescode.html</a></li><li>error log - <a href="errlog.html">errlog.html</a></li><li>errorcode method - <a href="tclsqlite.html#errorcode">tclsqlite.html#errorcode</a></li><li>ESCAPE - <a href="lang_expr.html#like">lang_expr.html#like</a></li><li>eval method - <a href="tclsqlite.html#eval">tclsqlite.html#eval</a></li><li>EXCLUDE clause - <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a></li><li>exclude clause - <a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a></li><li>EXCLUSIVE - <a href="lockingv3.html#excl_lock">lockingv3.html#excl_lock</a></li><li>EXCLUSIVE lock - <a href="lockingv3.html#excl_lock">lockingv3.html#excl_lock</a></li><li>exclusive lock - <a href="lockingv3.html#excl_lock">lockingv3.html#excl_lock</a></li><li>EXCLUSIVE locking mode - <a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a></li><li>exclusive locking mode - <a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a></li><li>exists method - <a href="tclsqlite.html#exists">tclsqlite.html#exists</a></li><li>EXISTS operator - <a href="lang_expr.html#exists_op">lang_expr.html#exists_op</a></li><li>exp - <a href="lang_mathfunc.html#exp">lang_mathfunc.html#exp</a></li><li>exp SQL function - <a href="lang_mathfunc.html#exp">lang_mathfunc.html#exp</a></li><li>experimental - <a href="c3ref/experimental.html">c3ref/experimental.html</a></li><li>experimental memory allocators - <a href="malloc.html#memsysx">malloc.html#memsysx</a></li><li>EXPLAIN - <a href="lang_explain.html">lang_explain.html</a></li><li>explain - <a href="lang_explain.html">lang_explain.html</a></li><li>EXPLAIN QUERY PLAN - <a href="eqp.html">eqp.html</a></li><li>explain query plan - <a href="eqp.html">eqp.html</a></li><li>export to excel - <a href="cli.html#exexcel*">cli.html#exexcel*</a></li><li>export to TSV - <a href="cli.html#extsv*">cli.html#extsv*</a></li><li>expr - <a href="syntax/expr.html">syntax/expr.html</a></li><li>expr syntax diagram - <a href="syntax/expr.html">syntax/expr.html</a></li><li>expression - <a href="lang_expr.html">lang_expr.html</a></li><li>expression affinity - <a href="datatype3.html#expraff">datatype3.html#expraff</a></li><li>expression index - <a href="expridx.html">expridx.html</a></li><li>expression indexes - <a href="expridx.html">expridx.html</a></li><li>expression syntax - <a href="lang_expr.html">lang_expr.html</a></li><li>ext-v-prim - <a href="rescode.html#pve">rescode.html#pve</a></li><li>extended error code - <a href="rescode.html#extrc">rescode.html#extrc</a></li><li>extended error codes - <a href="rescode.html#extrc">rescode.html#extrc</a></li><li>extended result code - <a href="rescode.html#extrc">rescode.html#extrc</a></li><li>extended result code definitions - <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a></li><li>extended result codes - <a href="rescode.html#extrc">rescode.html#extrc</a></li><li>Extending FTS5 - <a href="fts5.html#extending_fts5">fts5.html#extending_fts5</a></li><li>extension loading - <a href="loadext.html">loadext.html</a></li><li>external content fts4 tables - <a href="fts3.html#_external_content_fts4_tables_">fts3.html#_external_content_fts4_tables_</a></li><li>extract - <a href="lang_expr.html#extract">lang_expr.html#extract</a></li><li>factored-select-stmt - <a href="syntax/factored-select-stmt.html">syntax/factored-select-stmt.html</a></li><li>factored-select-stmt syntax diagram - <a href="syntax/factored-select-stmt.html">syntax/factored-select-stmt.html</a></li><li>faster than the filesystem - <a href="fasterthanfs.html">fasterthanfs.html</a></li><li>file control - <a href="c3ref/file_control.html">c3ref/file_control.html</a></li><li>file control opcode - <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a></li><li>file control opcodes - <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a></li><li>file format - <a href="fileformat2.html">fileformat2.html</a></li><li>file format version numbers - <a href="fileformat2.html#vnums">fileformat2.html#vnums</a></li><li>file I/O functions - <a href="cli.html#fileio">cli.html#fileio</a></li><li>file locking and concurrency control - <a href="lockingv3.html">lockingv3.html</a></li><li>file locking states - <a href="lockingv3.html#locking">lockingv3.html#locking</a></li><li>file-format benefits - <a href="aff_short.html">aff_short.html</a></li><li>filesystem corruption - <a href="howtocorrupt.html#fscorruption">howtocorrupt.html#fscorruption</a></li><li>FILTER clause on aggregate functions - <a href="lang_aggfunc.html#aggfilter">lang_aggfunc.html#aggfilter</a></li><li>filter-clause - <a href="syntax/filter-clause.html">syntax/filter-clause.html</a></li><li>filter-clause syntax diagram - <a href="syntax/filter-clause.html">syntax/filter-clause.html</a></li><li>flattened - <a href="optoverview.html#flattening">optoverview.html#flattening</a></li><li>flattening optimization - <a href="optoverview.html#flattening">optoverview.html#flattening</a></li><li>flexible type system - <a href="datatype3.html">datatype3.html</a></li><li>Flexible typing is a feature - <a href="flextypegood.html">flextypegood.html</a></li><li>floor - <a href="lang_mathfunc.html#floor">lang_mathfunc.html#floor</a></li><li>floor SQL function - <a href="lang_mathfunc.html#floor">lang_mathfunc.html#floor</a></li><li>footprint - <a href="footprint.html">footprint.html</a></li><li>foreign key actions - <a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a></li><li>foreign key constraint - <a href="foreignkeys.html">foreignkeys.html</a></li><li>FOREIGN KEY constraints - <a href="foreignkeys.html">foreignkeys.html</a></li><li>foreign key constraints - <a href="foreignkeys.html">foreignkeys.html</a></li><li>foreign key constraints are enabled - <a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a></li><li>foreign-key-clause - <a href="syntax/foreign-key-clause.html">syntax/foreign-key-clause.html</a></li><li>foreign-key-clause syntax diagram - <a href="syntax/foreign-key-clause.html">syntax/foreign-key-clause.html</a></li><li>foreign_key_check - <a href="pragma.html#pragma_foreign_key_check">pragma.html#pragma_foreign_key_check</a></li><li>foreign_key_check pragma - <a href="pragma.html#pragma_foreign_key_check">pragma.html#pragma_foreign_key_check</a></li><li>foreign_key_list - <a href="pragma.html#pragma_foreign_key_list">pragma.html#pragma_foreign_key_list</a></li><li>foreign_key_list pragma - <a href="pragma.html#pragma_foreign_key_list">pragma.html#pragma_foreign_key_list</a></li><li>foreign_keys - <a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a></li><li>foreign_keys pragma - <a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a></li><li>format - <a href="lang_corefunc.html#format">lang_corefunc.html#format</a></li><li>format SQL function - <a href="lang_corefunc.html#format">lang_corefunc.html#format</a></li><li>forum - <a href="support.html#fx">support.html#fx</a></li><li>frame boundary - <a href="windowfunctions.html#frameboundary">windowfunctions.html#frameboundary</a></li><li>frame specification - <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a></li><li>frame type - <a href="windowfunctions.html#frametype">windowfunctions.html#frametype</a></li><li>frame-spec - <a href="syntax/frame-spec.html">syntax/frame-spec.html</a></li><li>frame-spec syntax diagram - <a href="syntax/frame-spec.html">syntax/frame-spec.html</a></li><li>frames - <a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a></li><li>free-page list - <a href="fileformat2.html#freelist">fileformat2.html#freelist</a></li><li>freelist - <a href="fileformat2.html#freelist">fileformat2.html#freelist</a></li><li>freelist_count - <a href="pragma.html#pragma_freelist_count">pragma.html#pragma_freelist_count</a></li><li>freelist_count pragma - <a href="pragma.html#pragma_freelist_count">pragma.html#pragma_freelist_count</a></li><li>FROM clause - <a href="lang_select.html#fromclause">lang_select.html#fromclause</a></li><li>FTS auxiliary functions - <a href="fts3.html#snippet">fts3.html#snippet</a></li><li>FTS hidden column - <a href="fts3.html#hiddencol">fts3.html#hiddencol</a></li><li>FTS MATCH - <a href="fts3.html#full_text_index_queries">fts3.html#full_text_index_queries</a></li><li>FTS shadow tables - <a href="fts3.html#*shadowtab">fts3.html#*shadowtab</a></li><li>FTS3 - <a href="fts3.html">fts3.html</a></li><li>fts3 - <a href="fts3.html">fts3.html</a></li><li>fts3_tokenizer - <a href="fts3.html#f3tknzr">fts3.html#f3tknzr</a></li><li>fts3tokenize - <a href="fts3.html#fts3tok">fts3.html#fts3tok</a></li><li>fts3tokenize virtual table - <a href="fts3.html#fts3tok">fts3.html#fts3tok</a></li><li>FTS4 - <a href="fts3.html#fts4">fts3.html#fts4</a></li><li>FTS4 automerge command - <a href="fts3.html#*fts4automergecmd">fts3.html#*fts4automergecmd</a></li><li>FTS4 commands - <a href="fts3.html#*cmds">fts3.html#*cmds</a></li><li>fts4 compress option - <a href="fts3.html#the_compress_and_uncompress_options">fts3.html#the_compress_and_uncompress_options</a></li><li>FTS4 content option - <a href="fts3.html#*fts4content">fts3.html#*fts4content</a></li><li>fts4 content option - <a href="fts3.html#the_content_option_">fts3.html#the_content_option_</a></li><li>FTS4 integrity-check command - <a href="fts3.html#*fts4ickcmd">fts3.html#*fts4ickcmd</a></li><li>FTS4 languageid option - <a href="fts3.html#*fts4languageid">fts3.html#*fts4languageid</a></li><li>fts4 languageid option - <a href="fts3.html#the_languageid_option">fts3.html#the_languageid_option</a></li><li>FTS4 matchinfo option - <a href="fts3.html#fts4matchinfo">fts3.html#fts4matchinfo</a></li><li>fts4 matchinfo option - <a href="fts3.html#the_matchinfo_option">fts3.html#the_matchinfo_option</a></li><li>FTS4 merge command - <a href="fts3.html#*fts4mergecmd">fts3.html#*fts4mergecmd</a></li><li>FTS4 notindexed option - <a href="fts3.html#fts4notindexed">fts3.html#fts4notindexed</a></li><li>fts4 notindexed option - <a href="fts3.html#the_notindexed_option">fts3.html#the_notindexed_option</a></li><li>FTS4 optimize command - <a href="fts3.html#*fts4optcmd">fts3.html#*fts4optcmd</a></li><li>FTS4 options - <a href="fts3.html#fts4_options">fts3.html#fts4_options</a></li><li>FTS4 order option - <a href="fts3.html#fts4order">fts3.html#fts4order</a></li><li>FTS4 prefix option - <a href="fts3.html#fts4prefix">fts3.html#fts4prefix</a></li><li>fts4 prefix option - <a href="fts3.html#the_prefix_option">fts3.html#the_prefix_option</a></li><li>FTS4 rebuild command - <a href="fts3.html#*fts4rebuidcmd">fts3.html#*fts4rebuidcmd</a></li><li>fts4aux - <a href="fts3.html#fts4aux">fts3.html#fts4aux</a></li><li>fts4aux languageid column - <a href="fts3.html#f4alid">fts3.html#f4alid</a></li><li>FTS5 - <a href="fts5.html">fts5.html</a></li><li>fts5 - <a href="fts5.html">fts5.html</a></li><li>FTS5 automerge option - <a href="fts5.html#the_automerge_configuration_option">fts5.html#the_automerge_configuration_option</a></li><li>FTS5 auxiliary functions - <a href="fts5.html#_auxiliary_functions_">fts5.html#_auxiliary_functions_</a></li><li>FTS5 bm25 - <a href="fts5.html#the_bm25_function">fts5.html#the_bm25_function</a></li><li>FTS5 boolean operators - <a href="fts5.html#fts5_boolean_operators">fts5.html#fts5_boolean_operators</a></li><li>FTS5 building - <a href="fts5.html#compiling_and_using_fts5">fts5.html#compiling_and_using_fts5</a></li><li>FTS5 column filters - <a href="fts5.html#fts5_column_filters">fts5.html#fts5_column_filters</a></li><li>FTS5 columnsize option - <a href="fts5.html#the_columnsize_option">fts5.html#the_columnsize_option</a></li><li>FTS5 content option - <a href="fts5.html#external_content_and_contentless_tables">fts5.html#external_content_and_contentless_tables</a></li><li>FTS5 contentless tables - <a href="fts5.html#contentless_tables">fts5.html#contentless_tables</a></li><li>FTS5 CREATE TABLE Options - <a href="fts5.html#fts5_table_creation_and_initialization">fts5.html#fts5_table_creation_and_initialization</a></li><li>FTS5 custom auxiliary functions - <a href="fts5.html#custom_auxiliary_functions">fts5.html#custom_auxiliary_functions</a></li><li>FTS5 delete command - <a href="fts5.html#the_delete_command">fts5.html#the_delete_command</a></li><li>FTS5 delete-all command - <a href="fts5.html#the_delete_all_command">fts5.html#the_delete_all_command</a></li><li>FTS5 detail option - <a href="fts5.html#the_detail_option">fts5.html#the_detail_option</a></li><li>FTS5 external content tables - <a href="fts5.html#external_content_tables">fts5.html#external_content_tables</a></li><li>FTS5 highlight - <a href="fts5.html#the_highlight_function">fts5.html#the_highlight_function</a></li><li>FTS5 initial token - <a href="fts5.html#carrotq">fts5.html#carrotq</a></li><li>FTS5 initial token queries - <a href="fts5.html#fts5_initial_token_queries">fts5.html#fts5_initial_token_queries</a></li><li>FTS5 merge command - <a href="fts5.html#the_merge_command">fts5.html#the_merge_command</a></li><li>FTS5 NEAR queries - <a href="fts5.html#fts5_near_queries">fts5.html#fts5_near_queries</a></li><li>FTS5 optimize command - <a href="fts5.html#the_optimize_command">fts5.html#the_optimize_command</a></li><li>FTS5 pgsz option - <a href="fts5.html#the_pgsz_configuration_option">fts5.html#the_pgsz_configuration_option</a></li><li>FTS5 Phrases - <a href="fts5.html#fts5_phrases">fts5.html#fts5_phrases</a></li><li>FTS5 prefix indexes - <a href="fts5.html#prefix_indexes">fts5.html#prefix_indexes</a></li><li>FTS5 prefix queries - <a href="fts5.html#fts5_prefix_queries">fts5.html#fts5_prefix_queries</a></li><li>FTS5 query syntax - <a href="fts5.html#full_text_query_syntax">fts5.html#full_text_query_syntax</a></li><li>FTS5 rank configuration option - <a href="fts5.html#the_rank_configuration_option">fts5.html#the_rank_configuration_option</a></li><li>FTS5 rebuild command - <a href="fts5.html#the_rebuild_command">fts5.html#the_rebuild_command</a></li><li>fts5 shadow tables - <a href="fts5.html#fts5shadowtables">fts5.html#fts5shadowtables</a></li><li>FTS5 snippet - <a href="fts5.html#the_snippet_function">fts5.html#the_snippet_function</a></li><li>FTS5 Strings - <a href="fts5.html#fts5_strings">fts5.html#fts5_strings</a></li><li>fts5 technical differences - <a href="fts5.html#_summary_of_technical_differences_">fts5.html#_summary_of_technical_differences_</a></li><li>FTS5 tokenizers - <a href="fts5.html#tokenizers">fts5.html#tokenizers</a></li><li>FTS5 usermerge option - <a href="fts5.html#the_usermerge_configuration_option">fts5.html#the_usermerge_configuration_option</a></li><li>fts5vocab - <a href="fts5.html#the_fts5vocab_virtual_table_module">fts5.html#the_fts5vocab_virtual_table_module</a></li><li>FULL JOIN - <a href="lang_select.html#fulljoin">lang_select.html#fulljoin</a></li><li>FULL OUTER JOIN - <a href="lang_select.html#fulljoin">lang_select.html#fulljoin</a></li><li>Full-featured SQL - <a href="fullsql.html">fullsql.html</a></li><li>full-featured SQL - <a href="fullsql.html">fullsql.html</a></li><li>full-text search - <a href="fts3.html">fts3.html</a></li><li>full_column_names - <a href="pragma.html#pragma_full_column_names">pragma.html#pragma_full_column_names</a></li><li>full_column_names pragma - <a href="pragma.html#pragma_full_column_names">pragma.html#pragma_full_column_names</a></li><li>fullfsync - <a href="pragma.html#pragma_fullfsync">pragma.html#pragma_fullfsync</a></li><li>fullfsync pragma - <a href="pragma.html#pragma_fullfsync">pragma.html#pragma_fullfsync</a></li><li>function creation routines - <a href="c3ref/create_function.html">c3ref/create_function.html</a></li><li>function method - <a href="tclsqlite.html#function">tclsqlite.html#function</a></li><li>function_list - <a href="pragma.html#pragma_function_list">pragma.html#pragma_function_list</a></li><li>function_list pragma - <a href="pragma.html#pragma_function_list">pragma.html#pragma_function_list</a></li><li>fuzz testing - <a href="testing.html#fuzztesting">testing.html#fuzztesting</a></li><li>fuzzcheck - <a href="testing.html#fuzzcheck">testing.html#fuzzcheck</a></li><li>generalized ALTER TABLE procedure - <a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a></li><li>generate_series - <a href="series.html">series.html</a></li><li>generated column - <a href="gencol.html">gencol.html</a></li><li>Generated columns - <a href="gencol.html">gencol.html</a></li><li>generated columns - <a href="gencol.html">gencol.html</a></li><li>geopoly - <a href="geopoly.html">geopoly.html</a></li><li>Geopoly extension - <a href="geopoly.html">geopoly.html</a></li><li>Geopoly module - <a href="geopoly.html">geopoly.html</a></li><li>geopoly_area - <a href="geopoly.html#garea">geopoly.html#garea</a></li><li>geopoly_bbox - <a href="geopoly.html#gbbox">geopoly.html#gbbox</a></li><li>geopoly_blob - <a href="geopoly.html#gblob">geopoly.html#gblob</a></li><li>geopoly_ccw - <a href="geopoly.html#ccw">geopoly.html#ccw</a></li><li>geopoly_contains_point - <a href="geopoly.html#gpoint">geopoly.html#gpoint</a></li><li>geopoly_group_bbox - <a href="geopoly.html#gbbox">geopoly.html#gbbox</a></li><li>geopoly_json - <a href="geopoly.html#gjson">geopoly.html#gjson</a></li><li>geopoly_overlap - <a href="geopoly.html#goverlap">geopoly.html#goverlap</a></li><li>geopoly_regular - <a href="geopoly.html#regpoly">geopoly.html#regpoly</a></li><li>geopoly_svg - <a href="geopoly.html#gsvg">geopoly.html#gsvg</a></li><li>geopoly_within - <a href="geopoly.html#gwithin">geopoly.html#gwithin</a></li><li>geopoly_xform - <a href="geopoly.html#xform">geopoly.html#xform</a></li><li>get the canonical source code - <a href="getthecode.html">getthecode.html</a></li><li>GLOB - <a href="lang_expr.html#glob">lang_expr.html#glob</a></li><li>glob - <a href="lang_corefunc.html#glob">lang_corefunc.html#glob</a></li><li>glob SQL function - <a href="lang_corefunc.html#glob">lang_corefunc.html#glob</a></li><li>GROUP BY - <a href="lang_select.html#resultset">lang_select.html#resultset</a></li><li>GROUP BY clause - <a href="lang_select.html#resultset">lang_select.html#resultset</a></li><li>group_concat - <a href="lang_aggfunc.html#group_concat">lang_aggfunc.html#group_concat</a></li><li>group_concat aggregate function - <a href="lang_aggfunc.html#group_concat">lang_aggfunc.html#group_concat</a></li><li>GROUPS frames - <a href="windowfunctions.html#grouptype">windowfunctions.html#grouptype</a></li><li>hard_heap_limit - <a href="pragma.html#pragma_hard_heap_limit">pragma.html#pragma_hard_heap_limit</a></li><li>hard_heap_limit pragma - <a href="pragma.html#pragma_hard_heap_limit">pragma.html#pragma_hard_heap_limit</a></li><li>hash join - <a href="optoverview.html#hashjoin">optoverview.html#hashjoin</a></li><li>HAVE_FDATASYNC - <a href="compile.html#fdatasync">compile.html#fdatasync</a></li><li>HAVE_GMTIME_R - <a href="compile.html#gmtime_r">compile.html#gmtime_r</a></li><li>HAVE_ISNAN - <a href="compile.html#isnan">compile.html#isnan</a></li><li>HAVE_LOCALTIME_R - <a href="compile.html#localtime_r">compile.html#localtime_r</a></li><li>HAVE_LOCALTIME_S - <a href="compile.html#localtime_s">compile.html#localtime_s</a></li><li>HAVE_MALLOC_USABLE_SIZE - <a href="compile.html#malloc_usable_size">compile.html#malloc_usable_size</a></li><li>HAVE_SQLITE_CONFIG_H - <a href="compile.html#sqlite_config_h">compile.html#sqlite_config_h</a></li><li>HAVE_STRCHRNUL - <a href="compile.html#strchrnul">compile.html#strchrnul</a></li><li>HAVE_USLEEP - <a href="compile.html#usleep">compile.html#usleep</a></li><li>HAVE_UTIME - <a href="compile.html#utime">compile.html#utime</a></li><li>HAVING - <a href="lang_select.html#resultset">lang_select.html#resultset</a></li><li>HAVING clause - <a href="lang_select.html#resultset">lang_select.html#resultset</a></li><li>hazards of upgrading to the NGQP - <a href="queryplanner-ng.html#hazards">queryplanner-ng.html#hazards</a></li><li>hex - <a href="lang_corefunc.html#hex">lang_corefunc.html#hex</a></li><li>hex SQL function - <a href="lang_corefunc.html#hex">lang_corefunc.html#hex</a></li><li>hexadecimal integer literals - <a href="lang_expr.html#hexint">lang_expr.html#hexint</a></li><li>hexadecimal integers - <a href="lang_expr.html#hexint">lang_expr.html#hexint</a></li><li>hidden column - <a href="vtab.html#hiddencol">vtab.html#hiddencol</a></li><li>hidden columns - <a href="vtab.html#hiddencol">vtab.html#hiddencol</a></li><li>high-reliability - <a href="hirely.html">hirely.html</a></li><li>Hipp - <a href="crew.html">crew.html</a></li><li>host parameter - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>host parameter name - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>host parameters - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>hot journal - <a href="fileformat2.html#hotjrnl">fileformat2.html#hotjrnl</a></li><li>hot journal files - <a href="fileformat2.html#hotjrnl">fileformat2.html#hotjrnl</a></li><li>how collation is determined - <a href="datatype3.html#colrules">datatype3.html#colrules</a></li><li>How SQL Works - <a href="howitworks.html">howitworks.html</a></li><li>How SQLite Works - <a href="howitworks.html">howitworks.html</a></li><li>how to compile - <a href="howtocompile.html">howtocompile.html</a></li><li>How To Compile SQLite - <a href="howtocompile.html">howtocompile.html</a></li><li>how to corrupt - <a href="howtocorrupt.html">howtocorrupt.html</a></li><li>how to corrupt a database - <a href="useovernet.html">useovernet.html</a></li><li>How To Corrupt Your Database Files - <a href="lockingv3.html#how_to_corrupt">lockingv3.html#how_to_corrupt</a></li><li>how vacuum works - <a href="lang_vacuum.html#howvacuumworks">lang_vacuum.html#howvacuumworks</a></li><li>ieee754 extension - <a href="floatingpoint.html#ieee754ext">floatingpoint.html#ieee754ext</a></li><li>ieee754 function - <a href="floatingpoint.html#ieee754">floatingpoint.html#ieee754</a></li><li>ieee754_exponent function - <a href="floatingpoint.html#ieee754m">floatingpoint.html#ieee754m</a></li><li>ieee754_from_blob function - <a href="floatingpoint.html#ieee754b">floatingpoint.html#ieee754b</a></li><li>ieee754_mantissa function - <a href="floatingpoint.html#ieee754m">floatingpoint.html#ieee754m</a></li><li>ieee754_to_blob function - <a href="floatingpoint.html#ieee754b">floatingpoint.html#ieee754b</a></li><li>ifnull - <a href="lang_corefunc.html#ifnull">lang_corefunc.html#ifnull</a></li><li>ifnull SQL function - <a href="lang_corefunc.html#ifnull">lang_corefunc.html#ifnull</a></li><li>ignore_check_constraints - <a href="pragma.html#pragma_ignore_check_constraints">pragma.html#pragma_ignore_check_constraints</a></li><li>ignore_check_constraints pragma - <a href="pragma.html#pragma_ignore_check_constraints">pragma.html#pragma_ignore_check_constraints</a></li><li>iif - <a href="lang_corefunc.html#iif">lang_corefunc.html#iif</a></li><li>iif SQL function - <a href="lang_corefunc.html#iif">lang_corefunc.html#iif</a></li><li>immutable query parameter - <a href="uri.html#uriimmutable">uri.html#uriimmutable</a></li><li>imposter tables - <a href="imposter.html">imposter.html</a></li><li>IN operator - <a href="lang_expr.html#in_op">lang_expr.html#in_op</a></li><li>in-header database size - <a href="fileformat2.html#filesize">fileformat2.html#filesize</a></li><li>in-memory database - <a href="inmemorydb.html">inmemorydb.html</a></li><li>in-memory databases - <a href="inmemorydb.html">inmemorydb.html</a></li><li>in-memory shared cache database - <a href="inmemorydb.html#sharedmemdb">inmemorydb.html#sharedmemdb</a></li><li>in-memory shared-cache - <a href="sharedcache.html#inmemsharedcache">sharedcache.html#inmemsharedcache</a></li><li>incrblob method - <a href="tclsqlite.html#incrblob">tclsqlite.html#incrblob</a></li><li>increase in the default page size - <a href="pgszchng2016.html">pgszchng2016.html</a></li><li>incremental_vacuum - <a href="pragma.html#pragma_incremental_vacuum">pragma.html#pragma_incremental_vacuum</a></li><li>incremental_vacuum pragma - <a href="pragma.html#pragma_incremental_vacuum">pragma.html#pragma_incremental_vacuum</a></li><li>index b-tree - <a href="fileformat2.html#btypes">fileformat2.html#btypes</a></li><li>index_info - <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a></li><li>index_info pragma - <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a></li><li>index_list - <a href="pragma.html#pragma_index_list">pragma.html#pragma_index_list</a></li><li>index_list pragma - <a href="pragma.html#pragma_index_list">pragma.html#pragma_index_list</a></li><li>index_xinfo - <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a></li><li>index_xinfo pragma - <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a></li><li>INDEXED BY - <a href="lang_indexedby.html">lang_indexedby.html</a></li><li>indexed-column - <a href="syntax/indexed-column.html">syntax/indexed-column.html</a></li><li>indexed-column syntax diagram - <a href="syntax/indexed-column.html">syntax/indexed-column.html</a></li><li>Indexes - <a href="lang_createindex.html">lang_createindex.html</a></li><li>Indexes On Expressions - <a href="expridx.html">expridx.html</a></li><li>indexes on expressions - <a href="expridx.html">expridx.html</a></li><li>indexing - <a href="queryplanner.html">queryplanner.html</a></li><li>indexing tutorial - <a href="queryplanner.html">queryplanner.html</a></li><li>INSERT - <a href="lang_insert.html">lang_insert.html</a></li><li>insert - <a href="lang_insert.html">lang_insert.html</a></li><li>insert-stmt - <a href="syntax/insert-stmt.html">syntax/insert-stmt.html</a></li><li>insert-stmt syntax diagram - <a href="syntax/insert-stmt.html">syntax/insert-stmt.html</a></li><li>INSERTs - <a href="lang_insert.html">lang_insert.html</a></li><li>INSTEAD OF - <a href="lang_createtrigger.html#instead_of_trigger">lang_createtrigger.html#instead_of_trigger</a></li><li>INSTEAD OF trigger - <a href="lang_createtrigger.html#instead_of_trigger">lang_createtrigger.html#instead_of_trigger</a></li><li>instr - <a href="lang_corefunc.html#instr">lang_corefunc.html#instr</a></li><li>instr SQL function - <a href="lang_corefunc.html#instr">lang_corefunc.html#instr</a></li><li>INTEGER PRIMARY KEY - <a href="lang_createtable.html#rowid">lang_createtable.html#rowid</a></li><li>integer-valued r-trees - <a href="rtree.html#intrtree">rtree.html#intrtree</a></li><li>integrity_check - <a href="pragma.html#pragma_integrity_check">pragma.html#pragma_integrity_check</a></li><li>integrity_check pragma - <a href="pragma.html#pragma_integrity_check">pragma.html#pragma_integrity_check</a></li><li>internal index - <a href="fileformat2.html#intschema">fileformat2.html#intschema</a></li><li>internal indexes - <a href="fileformat2.html#intschema">fileformat2.html#intschema</a></li><li>internal schema object - <a href="fileformat2.html#intschema">fileformat2.html#intschema</a></li><li>internal schema objects - <a href="fileformat2.html#intschema">fileformat2.html#intschema</a></li><li>internal table - <a href="fileformat2.html#intschema">fileformat2.html#intschema</a></li><li>internal tables - <a href="fileformat2.html#intschema">fileformat2.html#intschema</a></li><li>Internal Versus External BLOBs - <a href="intern-v-extern-blob.html">intern-v-extern-blob.html</a></li><li>interrupt method - <a href="tclsqlite.html#interrupt">tclsqlite.html#interrupt</a></li><li>invalid UTF - <a href="invalidutf.html">invalidutf.html</a></li><li>IS DISTINCT FROM - <a href="lang_expr.html#isdf">lang_expr.html#isdf</a></li><li>IS NOT DISTINCT FROM - <a href="lang_expr.html#isdf">lang_expr.html#isdf</a></li><li>IS NOT operator - <a href="lang_expr.html#isisnot">lang_expr.html#isisnot</a></li><li>IS operator - <a href="lang_expr.html#isisnot">lang_expr.html#isisnot</a></li><li>isolation - <a href="isolation.html">isolation.html</a></li><li>join order - <a href="optoverview.html#table_order">optoverview.html#table_order</a></li><li>join-clause - <a href="syntax/join-clause.html">syntax/join-clause.html</a></li><li>join-clause syntax diagram - <a href="syntax/join-clause.html">syntax/join-clause.html</a></li><li>join-constraint - <a href="syntax/join-constraint.html">syntax/join-constraint.html</a></li><li>join-constraint syntax diagram - <a href="syntax/join-constraint.html">syntax/join-constraint.html</a></li><li>join-operator - <a href="syntax/join-operator.html">syntax/join-operator.html</a></li><li>join-operator syntax diagram - <a href="syntax/join-operator.html">syntax/join-operator.html</a></li><li>journal_mode - <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a></li><li>journal_mode pragma - <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a></li><li>journal_size_limit - <a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a></li><li>journal_size_limit pragma - <a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a></li><li>json - <a href="json1.html#jmini">json1.html#jmini</a></li><li>JSON function path arguments - <a href="json1.html#jsonpath">json1.html#jsonpath</a></li><li>JSON paths - <a href="json1.html#jsonpath">json1.html#jsonpath</a></li><li>json SQL function - <a href="json1.html#jmini">json1.html#jmini</a></li><li>JSON SQL functions - <a href="json1.html">json1.html</a></li><li>json1 - <a href="json1.html">json1.html</a></li><li>json_array - <a href="json1.html#jarray">json1.html#jarray</a></li><li>json_array SQL function - <a href="json1.html#jarray">json1.html#jarray</a></li><li>json_array_length - <a href="json1.html#jarraylen">json1.html#jarraylen</a></li><li>json_array_length SQL function - <a href="json1.html#jarraylen">json1.html#jarraylen</a></li><li>json_each - <a href="json1.html#jeach">json1.html#jeach</a></li><li>json_each table-valued function - <a href="json1.html#jeach">json1.html#jeach</a></li><li>json_extract - <a href="json1.html#jex">json1.html#jex</a></li><li>json_extract SQL function - <a href="json1.html#jex">json1.html#jex</a></li><li>json_group_array - <a href="json1.html#jgrouparray">json1.html#jgrouparray</a></li><li>json_group_array SQL function - <a href="json1.html#jgrouparray">json1.html#jgrouparray</a></li><li>json_group_object - <a href="json1.html#jgroupobject">json1.html#jgroupobject</a></li><li>json_group_object SQL function - <a href="json1.html#jgroupobject">json1.html#jgroupobject</a></li><li>json_insert - <a href="json1.html#jins">json1.html#jins</a></li><li>json_insert SQL function - <a href="json1.html#jins">json1.html#jins</a></li><li>json_object - <a href="json1.html#jobj">json1.html#jobj</a></li><li>json_object SQL function - <a href="json1.html#jobj">json1.html#jobj</a></li><li>json_patch - <a href="json1.html#jpatch">json1.html#jpatch</a></li><li>json_patch SQL function - <a href="json1.html#jpatch">json1.html#jpatch</a></li><li>json_quote - <a href="json1.html#jquote">json1.html#jquote</a></li><li>json_quote SQL function - <a href="json1.html#jquote">json1.html#jquote</a></li><li>json_remove - <a href="json1.html#jrm">json1.html#jrm</a></li><li>json_remove SQL function - <a href="json1.html#jrm">json1.html#jrm</a></li><li>json_replace - <a href="json1.html#jrepl">json1.html#jrepl</a></li><li>json_replace SQL function - <a href="json1.html#jrepl">json1.html#jrepl</a></li><li>json_set - <a href="json1.html#jset">json1.html#jset</a></li><li>json_set SQL function - <a href="json1.html#jset">json1.html#jset</a></li><li>json_tree - <a href="json1.html#jtree">json1.html#jtree</a></li><li>json_tree table-valued function - <a href="json1.html#jtree">json1.html#jtree</a></li><li>json_type - <a href="json1.html#jtype">json1.html#jtype</a></li><li>json_type SQL function - <a href="json1.html#jtype">json1.html#jtype</a></li><li>json_valid - <a href="json1.html#jvalid">json1.html#jvalid</a></li><li>json_valid SQL function - <a href="json1.html#jvalid">json1.html#jvalid</a></li><li>julianday modifier - <a href="lang_datefunc.html#jdmod">lang_datefunc.html#jdmod</a></li><li>julianday SQL function - <a href="lang_datefunc.html">lang_datefunc.html</a></li><li>Kennedy - <a href="crew.html">crew.html</a></li><li>keyword index - <a href="keyword_index.html">keyword_index.html</a></li><li>keywords - <a href="lang_keywords.html">lang_keywords.html</a></li><li>langexpr - <a href="lang_expr.html">lang_expr.html</a></li><li>langindexedby - <a href="lang_indexedby.html">lang_indexedby.html</a></li><li>langkeywords - <a href="lang_keywords.html">lang_keywords.html</a></li><li>langreplace - <a href="lang_replace.html">lang_replace.html</a></li><li>languageid - <a href="fts3.html#*fts4languageid">fts3.html#*fts4languageid</a></li><li>langupdate - <a href="lang_update.html">lang_update.html</a></li><li>langvacuum - <a href="lang_vacuum.html">lang_vacuum.html</a></li><li>large WAL files - <a href="wal.html#bigwal">wal.html#bigwal</a></li><li>last_insert_rowid - <a href="lang_corefunc.html#last_insert_rowid">lang_corefunc.html#last_insert_rowid</a></li><li>last_insert_rowid method - <a href="tclsqlite.html#last_insert_rowid">tclsqlite.html#last_insert_rowid</a></li><li>last_insert_rowid SQL function - <a href="lang_corefunc.html#last_insert_rowid">lang_corefunc.html#last_insert_rowid</a></li><li>LEFT JOIN strength reduction optimization - <a href="optoverview.html#leftjoinreduction">optoverview.html#leftjoinreduction</a></li><li>legacy_alter_table - <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a></li><li>legacy_alter_table pragma - <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a></li><li>legacy_file_format - <a href="pragma.html#pragma_legacy_file_format">pragma.html#pragma_legacy_file_format</a></li><li>legacy_file_format pragma - <a href="pragma.html#pragma_legacy_file_format">pragma.html#pragma_legacy_file_format</a></li><li>Lemon - <a href="lemon.html">lemon.html</a></li><li>Lemon LALR parser generator - <a href="lemon.html">lemon.html</a></li><li>Lemon parser generator - <a href="lemon.html">lemon.html</a></li><li>length - <a href="lang_corefunc.html#length">lang_corefunc.html#length</a></li><li>length SQL function - <a href="lang_corefunc.html#length">lang_corefunc.html#length</a></li><li>library size - <a href="footprint.html">footprint.html</a></li><li>license - <a href="copyright.html">copyright.html</a></li><li>LIKE - <a href="lang_expr.html#like">lang_expr.html#like</a></li><li>like - <a href="lang_corefunc.html#like">lang_corefunc.html#like</a></li><li>LIKE optimization - <a href="optoverview.html#like_opt">optoverview.html#like_opt</a></li><li>like SQL function - <a href="lang_corefunc.html#like">lang_corefunc.html#like</a></li><li>likelihood - <a href="lang_corefunc.html#likelihood">lang_corefunc.html#likelihood</a></li><li>likelihood SQL function - <a href="lang_corefunc.html#likelihood">lang_corefunc.html#likelihood</a></li><li>likely - <a href="lang_corefunc.html#likely">lang_corefunc.html#likely</a></li><li>likely SQL function - <a href="lang_corefunc.html#likely">lang_corefunc.html#likely</a></li><li>LIMIT - <a href="lang_select.html#limitoffset">lang_select.html#limitoffset</a></li><li>limit categories - <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a></li><li>limit category - <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a></li><li>limits - <a href="limits.html">limits.html</a></li><li>list of current bytecodes - <a href="opcode.html#codes">opcode.html#codes</a></li><li>list of virtual tables - <a href="vtablist.html">vtablist.html</a></li><li>literal value - <a href="lang_expr.html#litvalue">lang_expr.html#litvalue</a></li><li>literal-value - <a href="syntax/literal-value.html">syntax/literal-value.html</a></li><li>literal-value syntax diagram - <a href="syntax/literal-value.html">syntax/literal-value.html</a></li><li>ln - <a href="lang_mathfunc.html#ln">lang_mathfunc.html#ln</a></li><li>ln SQL function - <a href="lang_mathfunc.html#ln">lang_mathfunc.html#ln</a></li><li>load_extension - <a href="lang_corefunc.html#load_extension">lang_corefunc.html#load_extension</a></li><li>load_extension SQL function - <a href="lang_corefunc.html#load_extension">lang_corefunc.html#load_extension</a></li><li>loadable extension - <a href="loadext.html">loadext.html</a></li><li>loadable extensions - <a href="loadext.html">loadext.html</a></li><li>loadext - <a href="loadext.html">loadext.html</a></li><li>localtime modifier - <a href="lang_datefunc.html#localtime">lang_datefunc.html#localtime</a></li><li>lock-byte page - <a href="fileformat2.html#lockbyte">fileformat2.html#lockbyte</a></li><li>locking_mode - <a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a></li><li>locking_mode pragma - <a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a></li><li>log - <a href="lang_mathfunc.html#log">lang_mathfunc.html#log</a></li><li>log2 - <a href="lang_mathfunc.html#log2">lang_mathfunc.html#log2</a></li><li>log2 SQL function - <a href="lang_mathfunc.html#log2">lang_mathfunc.html#log2</a></li><li>log10 - <a href="lang_mathfunc.html#log">lang_mathfunc.html#log</a></li><li>long term support - <a href="lts.html">lts.html</a></li><li>lookaside - <a href="malloc.html#lookaside">malloc.html#lookaside</a></li><li>lookaside buffer - <a href="malloc.html#lookaside">malloc.html#lookaside</a></li><li>lookaside memory - <a href="malloc.html#lookaside">malloc.html#lookaside</a></li><li>lookaside memory allocator - <a href="malloc.html#lookaside">malloc.html#lookaside</a></li><li>low-dependency - <a href="selfcontained.html">selfcontained.html</a></li><li>lower - <a href="lang_corefunc.html#lower">lang_corefunc.html#lower</a></li><li>lower SQL function - <a href="lang_corefunc.html#lower">lang_corefunc.html#lower</a></li><li>ltrim - <a href="lang_corefunc.html#ltrim">lang_corefunc.html#ltrim</a></li><li>ltrim SQL function - <a href="lang_corefunc.html#ltrim">lang_corefunc.html#ltrim</a></li><li>mailing lists - <a href="support.html#mailinglists">support.html#mailinglists</a></li><li>managing SQLite Archives from the command-line - <a href="sqlar.html#cltools">sqlar.html#cltools</a></li><li>Manual Control Of Query Plans Using CROSS JOIN - <a href="optoverview.html#crossjoin">optoverview.html#crossjoin</a></li><li>Manual Control Of Query Plans Using SQLITE_STAT Tables - <a href="optoverview.html#manctrl">optoverview.html#manctrl</a></li><li>master journal - <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a></li><li>MATCH - <a href="lang_expr.html#match">lang_expr.html#match</a></li><li>matchinfo - <a href="fts3.html#matchinfo">fts3.html#matchinfo</a></li><li>matchinfo b flag - <a href="fts3.html#matchinfo-b">fts3.html#matchinfo-b</a></li><li>matchinfo x flag - <a href="fts3.html#matchinfo-x">fts3.html#matchinfo-x</a></li><li>matchinfo y flag - <a href="fts3.html#matchinfo-y">fts3.html#matchinfo-y</a></li><li>materialization hints - <a href="lang_with.html#mathint">lang_with.html#mathint</a></li><li>MATERIALIZED - <a href="lang_with.html#mathint">lang_with.html#mathint</a></li><li>Math Functions - <a href="lang_mathfunc.html">lang_mathfunc.html</a></li><li>math functions - <a href="lang_mathfunc.html">lang_mathfunc.html</a></li><li>mathfunc - <a href="lang_mathfunc.html">lang_mathfunc.html</a></li><li>max - <a href="lang_corefunc.html#max_scalar">lang_corefunc.html#max_scalar</a></li><li>max aggregate function - <a href="lang_aggfunc.html#max_agg">lang_aggfunc.html#max_agg</a></li><li>max SQL function - <a href="lang_corefunc.html#max_scalar">lang_corefunc.html#max_scalar</a></li><li>max_agg - <a href="lang_aggfunc.html#max_agg">lang_aggfunc.html#max_agg</a></li><li>max_page_count - <a href="pragma.html#pragma_max_page_count">pragma.html#pragma_max_page_count</a></li><li>max_page_count pragma - <a href="pragma.html#pragma_max_page_count">pragma.html#pragma_max_page_count</a></li><li>max_scalar - <a href="lang_corefunc.html#max_scalar">lang_corefunc.html#max_scalar</a></li><li>maxopen parameter - <a href="swarmvtab.html#the_maxopen_parameter">swarmvtab.html#the_maxopen_parameter</a></li><li>MC/DC - <a href="testing.html#mcdc">testing.html#mcdc</a></li><li>MC/DC testing - <a href="testing.html#mcdc">testing.html#mcdc</a></li><li>memory - <a href="inmemorydb.html">inmemorydb.html</a></li><li>memory allocation - <a href="malloc.html">malloc.html</a></li><li>memory statistics - <a href="malloc.html#memstatus">malloc.html#memstatus</a></li><li>memory-mapped I/O - <a href="mmap.html">mmap.html</a></li><li>memsys2 - <a href="malloc.html#memdebug">malloc.html#memdebug</a></li><li>memsys5 - <a href="malloc.html#memsys5">malloc.html#memsys5</a></li><li>merge command - <a href="fts3.html#*fts4mergecmd">fts3.html#*fts4mergecmd</a></li><li>microoptimizations - <a href="cpu.html#microopt">cpu.html#microopt</a></li><li>min - <a href="lang_corefunc.html#min_scalar">lang_corefunc.html#min_scalar</a></li><li>min aggregate function - <a href="lang_aggfunc.html#min_agg">lang_aggfunc.html#min_agg</a></li><li>min SQL function - <a href="lang_corefunc.html#min_scalar">lang_corefunc.html#min_scalar</a></li><li>min/max optimization - <a href="optoverview.html#minmax">optoverview.html#minmax</a></li><li>min_agg - <a href="lang_aggfunc.html#min_agg">lang_aggfunc.html#min_agg</a></li><li>min_scalar - <a href="lang_corefunc.html#min_scalar">lang_corefunc.html#min_scalar</a></li><li>missing callback - <a href="swarmvtab.html#the_missing_callback">swarmvtab.html#the_missing_callback</a></li><li>mmap - <a href="mmap.html">mmap.html</a></li><li>mmap_size - <a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a></li><li>mmap_size pragma - <a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a></li><li>mod - <a href="lang_mathfunc.html#mod">lang_mathfunc.html#mod</a></li><li>mod SQL function - <a href="lang_mathfunc.html#mod">lang_mathfunc.html#mod</a></li><li>mode query parameter - <a href="uri.html#urimode">uri.html#urimode</a></li><li>modeof - <a href="uri.html#urimodeof">uri.html#urimodeof</a></li><li>modeof query parameter - <a href="uri.html#urimodeof">uri.html#urimodeof</a></li><li>modifiers - <a href="lang_datefunc.html#dtmods">lang_datefunc.html#dtmods</a></li><li>module_list - <a href="pragma.html#pragma_module_list">pragma.html#pragma_module_list</a></li><li>module_list pragma - <a href="pragma.html#pragma_module_list">pragma.html#pragma_module_list</a></li><li>most used - <a href="mostdeployed.html">mostdeployed.html</a></li><li>most widely deployed - <a href="mostdeployed.html">mostdeployed.html</a></li><li>most widely used - <a href="mostdeployed.html">mostdeployed.html</a></li><li>mutation test script - <a href="th3.html#muttest">th3.html#muttest</a></li><li>mutation testing - <a href="testing.html#mutationtests">testing.html#mutationtests</a></li><li>mxFrame - <a href="walformat.html#mxframe">walformat.html#mxframe</a></li><li>naming - <a href="lang_naming.html">lang_naming.html</a></li><li>nBackfill - <a href="walformat.html#nbackfill">walformat.html#nbackfill</a></li><li>NEAR queries - <a href="fts3.html#near">fts3.html#near</a></li><li>network filesystem use - <a href="useovernet.html">useovernet.html</a></li><li>Next Generation Query Planner - <a href="queryplanner-ng.html">queryplanner-ng.html</a></li><li>next generation query planner - <a href="queryplanner-ng.html">queryplanner-ng.html</a></li><li>NGQP - <a href="queryplanner-ng.html">queryplanner-ng.html</a></li><li>NOCASE - <a href="datatype3.html#collation">datatype3.html#collation</a></li><li>NOCASE collating function - <a href="datatype3.html#collation">datatype3.html#collation</a></li><li>nolock query parameter - <a href="uri.html#urinolock">uri.html#urinolock</a></li><li>non-deterministic functions - <a href="deterministic.html">deterministic.html</a></li><li>non-standard SELECT syntax - <a href="lang_select.html#nonstd">lang_select.html#nonstd</a></li><li>NOT EXISTS operator - <a href="lang_expr.html#exists_op">lang_expr.html#exists_op</a></li><li>NOT IN operator - <a href="lang_expr.html#in_op">lang_expr.html#in_op</a></li><li>NOT INDEXED - <a href="lang_indexedby.html">lang_indexedby.html</a></li><li>NOT MATERIALIZED - <a href="lang_with.html#mathint">lang_with.html#mathint</a></li><li>NOT NULL - <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a></li><li>NOT NULL constraint - <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a></li><li>NOT NULL constraints - <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a></li><li>not open-contributin - <a href="copyright.html#notopencontrib">copyright.html#notopencontrib</a></li><li>NUL characters in strings - <a href="nulinstr.html">nulinstr.html</a></li><li>nullif - <a href="lang_corefunc.html#nullif">lang_corefunc.html#nullif</a></li><li>nullif SQL function - <a href="lang_corefunc.html#nullif">lang_corefunc.html#nullif</a></li><li>NULLS FIRST - <a href="lang_select.html#nullslast">lang_select.html#nullslast</a></li><li>NULLS LAST - <a href="lang_select.html#nullslast">lang_select.html#nullslast</a></li><li>nullvalue method - <a href="tclsqlite.html#nullvalue">tclsqlite.html#nullvalue</a></li><li>numeric-literal - <a href="syntax/numeric-literal.html">syntax/numeric-literal.html</a></li><li>numeric-literal syntax diagram - <a href="syntax/numeric-literal.html">syntax/numeric-literal.html</a></li><li>object resolution - <a href="lang_naming.html">lang_naming.html</a></li><li>OFFSET - <a href="lang_select.html#limitoffset">lang_select.html#limitoffset</a></li><li>offsets - <a href="fts3.html#offsets">fts3.html#offsets</a></li><li>omit-left-join optimization - <a href="optoverview.html#omitnoopjoin">optoverview.html#omitnoopjoin</a></li><li>omitfeatures - <a href="compile.html#omitfeatures">compile.html#omitfeatures</a></li><li>ON CONFLICT - <a href="lang_conflict.html">lang_conflict.html</a></li><li>ON CONFLICT clause - <a href="lang_conflict.html">lang_conflict.html</a></li><li>ON CONFLICT clauses - <a href="lang_conflict.html">lang_conflict.html</a></li><li>on-disk format - <a href="fileformat2.html">fileformat2.html</a></li><li>onecolumn method - <a href="tclsqlite.html#onecolumn">tclsqlite.html#onecolumn</a></li><li>opcode definitions - <a href="opcode.html#codes">opcode.html#codes</a></li><li>opcodes - <a href="opcode.html">opcode.html</a></li><li>OPEN_EXRESCODE - <a href="c3ref/open.html#openexrescode">c3ref/open.html#openexrescode</a></li><li>OPEN_NOFOLLOW - <a href="c3ref/open.html#opennofollow">c3ref/open.html#opennofollow</a></li><li>openclose callback - <a href="swarmvtab.html#the_openclose_callback">swarmvtab.html#the_openclose_callback</a></li><li>OpenOffice case study - <a href="affcase1.html">affcase1.html</a></li><li>optimize - <a href="pragma.html#pragma_optimize">pragma.html#pragma_optimize</a></li><li>optimize command - <a href="fts3.html#*fts4optcmd">fts3.html#*fts4optcmd</a></li><li>optimize pragma - <a href="pragma.html#pragma_optimize">pragma.html#pragma_optimize</a></li><li>optimizer - <a href="optoverview.html">optoverview.html</a></li><li>OR optimization - <a href="optoverview.html#or_opt">optoverview.html#or_opt</a></li><li>or optimization - <a href="optoverview.html#or_opt">optoverview.html#or_opt</a></li><li>or-connected-terms - <a href="queryplanner.html#or_in_where">queryplanner.html#or_in_where</a></li><li>ORDER BY - <a href="lang_select.html#orderby">lang_select.html#orderby</a></li><li>order by - <a href="lang_select.html#orderby">lang_select.html#orderby</a></li><li>orderByConsumed - <a href="vtab.html#obc">vtab.html#obc</a></li><li>ordering-term - <a href="syntax/ordering-term.html">syntax/ordering-term.html</a></li><li>ordering-term syntax diagram - <a href="syntax/ordering-term.html">syntax/ordering-term.html</a></li><li>ordinary common table expressions - <a href="lang_with.html#ordinarycte">lang_with.html#ordinarycte</a></li><li>OS backend - <a href="vfs.html">vfs.html</a></li><li>OSS Fuzz - <a href="testing.html#ossfuzz">testing.html#ossfuzz</a></li><li>output mode - <a href="cli.html#dotmode">cli.html#dotmode</a></li><li>over-clause - <a href="syntax/over-clause.html">syntax/over-clause.html</a></li><li>over-clause syntax diagram - <a href="syntax/over-clause.html">syntax/over-clause.html</a></li><li>overflow page - <a href="fileformat2.html#ovflpgs">fileformat2.html#ovflpgs</a></li><li>overflow pages - <a href="fileformat2.html#ovflpgs">fileformat2.html#ovflpgs</a></li><li>page cache - <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a></li><li>page_count - <a href="pragma.html#pragma_page_count">pragma.html#pragma_page_count</a></li><li>page_count pragma - <a href="pragma.html#pragma_page_count">pragma.html#pragma_page_count</a></li><li>page_size - <a href="pragma.html#pragma_page_size">pragma.html#pragma_page_size</a></li><li>page_size pragma - <a href="pragma.html#pragma_page_size">pragma.html#pragma_page_size</a></li><li>pagecache memory allocator - <a href="malloc.html#pagecache">malloc.html#pagecache</a></li><li>parameter - <a href="lang_expr.html#varparam">lang_expr.html#varparam</a></li><li>parameter binding - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>parameters - <a href="lang_expr.html#varparam">lang_expr.html#varparam</a></li><li>parent key - <a href="foreignkeys.html#parentchild">foreignkeys.html#parentchild</a></li><li>parent table - <a href="foreignkeys.html#parentchild">foreignkeys.html#parentchild</a></li><li>parser_trace - <a href="pragma.html#pragma_parser_trace">pragma.html#pragma_parser_trace</a></li><li>parser_trace pragma - <a href="pragma.html#pragma_parser_trace">pragma.html#pragma_parser_trace</a></li><li>partial index - <a href="partialindex.html">partialindex.html</a></li><li>partial indexes - <a href="partialindex.html">partialindex.html</a></li><li>partial indices - <a href="partialindex.html">partialindex.html</a></li><li>partial sorting by index - <a href="queryplanner.html#partialsort">queryplanner.html#partialsort</a></li><li>partition - <a href="windowfunctions.html#ptxn">windowfunctions.html#ptxn</a></li><li>patchset - <a href="sessionintro.html#changeset">sessionintro.html#changeset</a></li><li>patchsets - <a href="sessionintro.html#changeset">sessionintro.html#changeset</a></li><li>PENDING - <a href="lockingv3.html#pending_lock">lockingv3.html#pending_lock</a></li><li>PENDING lock - <a href="lockingv3.html#pending_lock">lockingv3.html#pending_lock</a></li><li>pending lock - <a href="lockingv3.html#pending_lock">lockingv3.html#pending_lock</a></li><li>permuted index - <a href="sitemap.html">sitemap.html</a></li><li>persistent journal mode - <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a></li><li>persistent loadable extensions - <a href="loadext.html#persist">loadext.html#persist</a></li><li>phrase queries - <a href="fts3.html#phrase">fts3.html#phrase</a></li><li>pi - <a href="lang_mathfunc.html#pi">lang_mathfunc.html#pi</a></li><li>pi SQL function - <a href="lang_mathfunc.html#pi">lang_mathfunc.html#pi</a></li><li>pointer leak - <a href="bindptr.html#ptrleak">bindptr.html#ptrleak</a></li><li>pointer leaks - <a href="bindptr.html#ptrleak">bindptr.html#ptrleak</a></li><li>pointer passing interface - <a href="bindptr.html">bindptr.html</a></li><li>pointer passing interfaces - <a href="bindptr.html">bindptr.html</a></li><li>pointer types - <a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a></li><li>pointer value - <a href="bindptr.html">bindptr.html</a></li><li>porting SQLite - <a href="custombuild.html">custombuild.html</a></li><li>pow - <a href="lang_mathfunc.html#pow">lang_mathfunc.html#pow</a></li><li>pow SQL function - <a href="lang_mathfunc.html#pow">lang_mathfunc.html#pow</a></li><li>power-safe - <a href="transactional.html">transactional.html</a></li><li>power-safe transactions - <a href="transactional.html">transactional.html</a></li><li>powersafe overwrite - <a href="psow.html">psow.html</a></li><li>PRAGMA - <a href="pragma.html#syntax">pragma.html#syntax</a></li><li>PRAGMA analysis_limit - <a href="pragma.html#pragma_analysis_limit">pragma.html#pragma_analysis_limit</a></li><li>PRAGMA application_id - <a href="pragma.html#pragma_application_id">pragma.html#pragma_application_id</a></li><li>PRAGMA auto_vacuum - <a href="pragma.html#pragma_auto_vacuum">pragma.html#pragma_auto_vacuum</a></li><li>PRAGMA automatic_index - <a href="pragma.html#pragma_automatic_index">pragma.html#pragma_automatic_index</a></li><li>PRAGMA busy_timeout - <a href="pragma.html#pragma_busy_timeout">pragma.html#pragma_busy_timeout</a></li><li>PRAGMA cache_size - <a href="pragma.html#pragma_cache_size">pragma.html#pragma_cache_size</a></li><li>PRAGMA cache_spill - <a href="pragma.html#pragma_cache_spill">pragma.html#pragma_cache_spill</a></li><li>PRAGMA case_sensitive_like - <a href="pragma.html#pragma_case_sensitive_like">pragma.html#pragma_case_sensitive_like</a></li><li>PRAGMA cell_size_check - <a href="pragma.html#pragma_cell_size_check">pragma.html#pragma_cell_size_check</a></li><li>PRAGMA checkpoint_fullfsync - <a href="pragma.html#pragma_checkpoint_fullfsync">pragma.html#pragma_checkpoint_fullfsync</a></li><li>PRAGMA collation_list - <a href="pragma.html#pragma_collation_list">pragma.html#pragma_collation_list</a></li><li>PRAGMA compile_options - <a href="pragma.html#pragma_compile_options">pragma.html#pragma_compile_options</a></li><li>PRAGMA count_changes - <a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a></li><li>PRAGMA data_store_directory - <a href="pragma.html#pragma_data_store_directory">pragma.html#pragma_data_store_directory</a></li><li>PRAGMA data_version - <a href="pragma.html#pragma_data_version">pragma.html#pragma_data_version</a></li><li>PRAGMA database_list - <a href="pragma.html#pragma_database_list">pragma.html#pragma_database_list</a></li><li>PRAGMA default_cache_size - <a href="pragma.html#pragma_default_cache_size">pragma.html#pragma_default_cache_size</a></li><li>PRAGMA defer_foreign_keys - <a href="pragma.html#pragma_defer_foreign_keys">pragma.html#pragma_defer_foreign_keys</a></li><li>PRAGMA empty_result_callbacks - <a href="pragma.html#pragma_empty_result_callbacks">pragma.html#pragma_empty_result_callbacks</a></li><li>PRAGMA encoding - <a href="pragma.html#pragma_encoding">pragma.html#pragma_encoding</a></li><li>PRAGMA foreign_key_check - <a href="pragma.html#pragma_foreign_key_check">pragma.html#pragma_foreign_key_check</a></li><li>PRAGMA foreign_key_list - <a href="pragma.html#pragma_foreign_key_list">pragma.html#pragma_foreign_key_list</a></li><li>PRAGMA foreign_keys - <a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a></li><li>PRAGMA freelist_count - <a href="pragma.html#pragma_freelist_count">pragma.html#pragma_freelist_count</a></li><li>PRAGMA full_column_names - <a href="pragma.html#pragma_full_column_names">pragma.html#pragma_full_column_names</a></li><li>PRAGMA fullfsync - <a href="pragma.html#pragma_fullfsync">pragma.html#pragma_fullfsync</a></li><li>PRAGMA function - <a href="pragma.html#pragfunc">pragma.html#pragfunc</a></li><li>PRAGMA function_list - <a href="pragma.html#pragma_function_list">pragma.html#pragma_function_list</a></li><li>PRAGMA functions - <a href="pragma.html#pragfunc">pragma.html#pragfunc</a></li><li>PRAGMA hard_heap_limit - <a href="pragma.html#pragma_hard_heap_limit">pragma.html#pragma_hard_heap_limit</a></li><li>PRAGMA ignore_check_constraints - <a href="pragma.html#pragma_ignore_check_constraints">pragma.html#pragma_ignore_check_constraints</a></li><li>PRAGMA incremental_vacuum - <a href="pragma.html#pragma_incremental_vacuum">pragma.html#pragma_incremental_vacuum</a></li><li>PRAGMA index_info - <a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a></li><li>PRAGMA index_list - <a href="pragma.html#pragma_index_list">pragma.html#pragma_index_list</a></li><li>PRAGMA index_xinfo - <a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a></li><li>PRAGMA integrity_check - <a href="pragma.html#pragma_integrity_check">pragma.html#pragma_integrity_check</a></li><li>PRAGMA journal_mode - <a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a></li><li>PRAGMA journal_size_limit - <a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a></li><li>PRAGMA legacy_alter_table - <a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a></li><li>PRAGMA legacy_file_format - <a href="pragma.html#pragma_legacy_file_format">pragma.html#pragma_legacy_file_format</a></li><li>pragma list - <a href="pragma.html#toc">pragma.html#toc</a></li><li>PRAGMA locking_mode - <a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a></li><li>PRAGMA max_page_count - <a href="pragma.html#pragma_max_page_count">pragma.html#pragma_max_page_count</a></li><li>PRAGMA mmap_size - <a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a></li><li>PRAGMA module_list - <a href="pragma.html#pragma_module_list">pragma.html#pragma_module_list</a></li><li>PRAGMA optimize - <a href="pragma.html#pragma_optimize">pragma.html#pragma_optimize</a></li><li>PRAGMA page_count - <a href="pragma.html#pragma_page_count">pragma.html#pragma_page_count</a></li><li>PRAGMA page_size - <a href="pragma.html#pragma_page_size">pragma.html#pragma_page_size</a></li><li>PRAGMA parser_trace - <a href="pragma.html#pragma_parser_trace">pragma.html#pragma_parser_trace</a></li><li>PRAGMA pragma_list - <a href="pragma.html#pragma_pragma_list">pragma.html#pragma_pragma_list</a></li><li>PRAGMA query_only - <a href="pragma.html#pragma_query_only">pragma.html#pragma_query_only</a></li><li>PRAGMA quick_check - <a href="pragma.html#pragma_quick_check">pragma.html#pragma_quick_check</a></li><li>PRAGMA read_uncommitted - <a href="pragma.html#pragma_read_uncommitted">pragma.html#pragma_read_uncommitted</a></li><li>PRAGMA recursive_triggers - <a href="pragma.html#pragma_recursive_triggers">pragma.html#pragma_recursive_triggers</a></li><li>PRAGMA reverse_unordered_selects - <a href="pragma.html#pragma_reverse_unordered_selects">pragma.html#pragma_reverse_unordered_selects</a></li><li>PRAGMA schema_version - <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a></li><li>PRAGMA secure_delete - <a href="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</a></li><li>PRAGMA short_column_names - <a href="pragma.html#pragma_short_column_names">pragma.html#pragma_short_column_names</a></li><li>PRAGMA shrink_memory - <a href="pragma.html#pragma_shrink_memory">pragma.html#pragma_shrink_memory</a></li><li>PRAGMA soft_heap_limit - <a href="pragma.html#pragma_soft_heap_limit">pragma.html#pragma_soft_heap_limit</a></li><li>PRAGMA stats - <a href="pragma.html#pragma_stats">pragma.html#pragma_stats</a></li><li>PRAGMA synchronous - <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a></li><li>PRAGMA table_info - <a href="pragma.html#pragma_table_info">pragma.html#pragma_table_info</a></li><li>PRAGMA table_list - <a href="pragma.html#pragma_table_list">pragma.html#pragma_table_list</a></li><li>PRAGMA table_xinfo - <a href="pragma.html#pragma_table_xinfo">pragma.html#pragma_table_xinfo</a></li><li>PRAGMA temp_store - <a href="pragma.html#pragma_temp_store">pragma.html#pragma_temp_store</a></li><li>PRAGMA temp_store_directory - <a href="pragma.html#pragma_temp_store_directory">pragma.html#pragma_temp_store_directory</a></li><li>PRAGMA threads - <a href="pragma.html#pragma_threads">pragma.html#pragma_threads</a></li><li>PRAGMA trusted_schema - <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a></li><li>PRAGMA user_version - <a href="pragma.html#pragma_user_version">pragma.html#pragma_user_version</a></li><li>PRAGMA vdbe_addoptrace - <a href="pragma.html#pragma_vdbe_addoptrace">pragma.html#pragma_vdbe_addoptrace</a></li><li>PRAGMA vdbe_debug - <a href="pragma.html#pragma_vdbe_debug">pragma.html#pragma_vdbe_debug</a></li><li>PRAGMA vdbe_listing - <a href="pragma.html#pragma_vdbe_listing">pragma.html#pragma_vdbe_listing</a></li><li>PRAGMA vdbe_trace - <a href="pragma.html#pragma_vdbe_trace">pragma.html#pragma_vdbe_trace</a></li><li>PRAGMA wal_autocheckpoint - <a href="pragma.html#pragma_wal_autocheckpoint">pragma.html#pragma_wal_autocheckpoint</a></li><li>PRAGMA wal_checkpoint - <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a></li><li>PRAGMA writable_schema - <a href="pragma.html#pragma_writable_schema">pragma.html#pragma_writable_schema</a></li><li>pragma-stmt - <a href="syntax/pragma-stmt.html">syntax/pragma-stmt.html</a></li><li>pragma-stmt syntax diagram - <a href="syntax/pragma-stmt.html">syntax/pragma-stmt.html</a></li><li>pragma-value - <a href="syntax/pragma-value.html">syntax/pragma-value.html</a></li><li>pragma-value syntax diagram - <a href="syntax/pragma-value.html">syntax/pragma-value.html</a></li><li>pragma_list - <a href="pragma.html#pragma_pragma_list">pragma.html#pragma_pragma_list</a></li><li>pragma_list pragma - <a href="pragma.html#pragma_pragma_list">pragma.html#pragma_pragma_list</a></li><li>prefix queries - <a href="fts3.html#termprefix">fts3.html#termprefix</a></li><li>prefix query - <a href="fts3.html#termprefix">fts3.html#termprefix</a></li><li>prepared statement - <a href="c3ref/stmt.html">c3ref/stmt.html</a></li><li>prepared statements - <a href="c3ref/stmt.html">c3ref/stmt.html</a></li><li>PRIMARY KEY - <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a></li><li>PRIMARY KEY constraint - <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a></li><li>primary versus extended result codes - <a href="rescode.html#pve">rescode.html#pve</a></li><li>printf - <a href="lang_corefunc.html#printf">lang_corefunc.html#printf</a></li><li>printf SQL function - <a href="lang_corefunc.html#printf">lang_corefunc.html#printf</a></li><li>prior releases - <a href="chronology.html">chronology.html</a></li><li>private branches - <a href="privatebranch.html">privatebranch.html</a></li><li>professional support - <a href="prosupport.html">prosupport.html</a></li><li>profile method - <a href="tclsqlite.html#profile">tclsqlite.html#profile</a></li><li>Programming Loadable Extensions - <a href="loadext.html#write">loadext.html#write</a></li><li>progress method - <a href="tclsqlite.html#progress">tclsqlite.html#progress</a></li><li>protected sqlite3_value - <a href="c3ref/value.html">c3ref/value.html</a></li><li>PSOW - <a href="psow.html">psow.html</a></li><li>psow query parameter - <a href="uri.html#uripsow">uri.html#uripsow</a></li><li>public-domain - <a href="copyright.html">copyright.html</a></li><li>push-down optimization - <a href="optoverview.html#pushdown">optoverview.html#pushdown</a></li><li>Q - <a href="printf.html#percentq">printf.html#percentq</a></li><li>q - <a href="printf.html#percentq">printf.html#percentq</a></li><li>qbox - <a href="cli.html#qbox">cli.html#qbox</a></li><li>qbox output mode - <a href="cli.html#qbox">cli.html#qbox</a></li><li>QPSG - <a href="queryplanner-ng.html#qpstab">queryplanner-ng.html#qpstab</a></li><li>qualified-table-name - <a href="syntax/qualified-table-name.html">syntax/qualified-table-name.html</a></li><li>qualified-table-name syntax diagram - <a href="syntax/qualified-table-name.html">syntax/qualified-table-name.html</a></li><li>queries against graphs - <a href="lang_with.html#rcex3">lang_with.html#rcex3</a></li><li>query flattener - <a href="optoverview.html#flattening">optoverview.html#flattening</a></li><li>query parameters with special meaning to SQLite - <a href="uri.html#coreqp">uri.html#coreqp</a></li><li>query planner - <a href="optoverview.html">optoverview.html</a></li><li>query planner checklist - <a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a></li><li>query planner stability guarantee - <a href="queryplanner-ng.html#qpstab">queryplanner-ng.html#qpstab</a></li><li>query_only - <a href="pragma.html#pragma_query_only">pragma.html#pragma_query_only</a></li><li>query_only pragma - <a href="pragma.html#pragma_query_only">pragma.html#pragma_query_only</a></li><li>Quick Start Guide - <a href="quickstart.html">quickstart.html</a></li><li>quick_check - <a href="pragma.html#pragma_quick_check">pragma.html#pragma_quick_check</a></li><li>quick_check pragma - <a href="pragma.html#pragma_quick_check">pragma.html#pragma_quick_check</a></li><li>quickstart - <a href="quickstart.html">quickstart.html</a></li><li>Quirks - <a href="quirks.html">quirks.html</a></li><li>quote - <a href="lang_corefunc.html#quote">lang_corefunc.html#quote</a></li><li>quote SQL function - <a href="lang_corefunc.html#quote">lang_corefunc.html#quote</a></li><li>R-Tree extension - <a href="rtree.html">rtree.html</a></li><li>R-Trees - <a href="rtree.html">rtree.html</a></li><li>radians - <a href="lang_mathfunc.html#radians">lang_mathfunc.html#radians</a></li><li>radians SQL function - <a href="lang_mathfunc.html#radians">lang_mathfunc.html#radians</a></li><li>RAISE function - <a href="lang_createtrigger.html#raise">lang_createtrigger.html#raise</a></li><li>raise-function - <a href="syntax/raise-function.html">syntax/raise-function.html</a></li><li>raise-function syntax diagram - <a href="syntax/raise-function.html">syntax/raise-function.html</a></li><li>random - <a href="lang_corefunc.html#random">lang_corefunc.html#random</a></li><li>random SQL function - <a href="lang_corefunc.html#random">lang_corefunc.html#random</a></li><li>randomblob - <a href="lang_corefunc.html#randomblob">lang_corefunc.html#randomblob</a></li><li>randomblob SQL function - <a href="lang_corefunc.html#randomblob">lang_corefunc.html#randomblob</a></li><li>RANGE frames - <a href="windowfunctions.html#rangetype">windowfunctions.html#rangetype</a></li><li>RANGE n FOLLOWING - <a href="windowfunctions.html#exprrange">windowfunctions.html#exprrange</a></li><li>RANGE n PRECEDING - <a href="windowfunctions.html#exprrange">windowfunctions.html#exprrange</a></li><li>range query optimization - <a href="optoverview.html#rangequery">optoverview.html#rangequery</a></li><li>RBU - <a href="rbu.html">rbu.html</a></li><li>RBU Database Contents - <a href="rbu.html#database_contents">rbu.html#database_contents</a></li><li>RBU Database Tables - <a href="rbu.html#database_tables">rbu.html#database_tables</a></li><li>RBU extension - <a href="rbu.html">rbu.html</a></li><li>RBU FTS3/4 Tables - <a href="rbu.html#fts4_tables">rbu.html#fts4_tables</a></li><li>RBU Update - <a href="rbu.html#rbu_updates">rbu.html#rbu_updates</a></li><li>RBU Vacuum - <a href="rbu.html#rbu_vacuum">rbu.html#rbu_vacuum</a></li><li>read-only WAL databases - <a href="wal.html#readonly">wal.html#readonly</a></li><li>read_uncommitted - <a href="pragma.html#pragma_read_uncommitted">pragma.html#pragma_read_uncommitted</a></li><li>read_uncommitted pragma - <a href="pragma.html#pragma_read_uncommitted">pragma.html#pragma_read_uncommitted</a></li><li>reading and writing an rtree at the same time - <a href="rtree.html#readwrite">rtree.html#readwrite</a></li><li>rebuild command - <a href="fts3.html#*fts4rebuidcmd">fts3.html#*fts4rebuidcmd</a></li><li>recent CVEs - <a href="cves.html#cvetab">cves.html#cvetab</a></li><li>recommended ANALYZE usage pattern - <a href="lang_analyze.html#req">lang_analyze.html#req</a></li><li>recommended by the US Library of Congress - <a href="locrsf.html">locrsf.html</a></li><li>recommended compile-time option - <a href="compile.html#rcmd">compile.html#rcmd</a></li><li>recommended compile-time options - <a href="compile.html#rcmd">compile.html#rcmd</a></li><li>recommended storage format - <a href="locrsf.html">locrsf.html</a></li><li>record format - <a href="fileformat2.html#record_format">fileformat2.html#record_format</a></li><li>recovery - <a href="walformat.html#recovery">walformat.html#recovery</a></li><li>recovery extension - <a href="recovery.html">recovery.html</a></li><li>recursive common table expression - <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a></li><li>recursive common table expressions - <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a></li><li>recursive query - <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a></li><li>recursive-cte - <a href="syntax/recursive-cte.html">syntax/recursive-cte.html</a></li><li>recursive-cte syntax diagram - <a href="syntax/recursive-cte.html">syntax/recursive-cte.html</a></li><li>recursive_triggers - <a href="pragma.html#pragma_recursive_triggers">pragma.html#pragma_recursive_triggers</a></li><li>recursive_triggers pragma - <a href="pragma.html#pragma_recursive_triggers">pragma.html#pragma_recursive_triggers</a></li><li>REGEXP - <a href="lang_expr.html#regexp">lang_expr.html#regexp</a></li><li>REINDEX - <a href="lang_reindex.html">lang_reindex.html</a></li><li>reindex - <a href="lang_reindex.html">lang_reindex.html</a></li><li>reindex-stmt - <a href="syntax/reindex-stmt.html">syntax/reindex-stmt.html</a></li><li>reindex-stmt syntax diagram - <a href="syntax/reindex-stmt.html">syntax/reindex-stmt.html</a></li><li>RELEASE - <a href="lang_savepoint.html">lang_savepoint.html</a></li><li>release history - <a href="changes.html">changes.html</a></li><li>release testing checklists - <a href="testing.html#cklist">testing.html#cklist</a></li><li>release-stmt - <a href="syntax/release-stmt.html">syntax/release-stmt.html</a></li><li>release-stmt syntax diagram - <a href="syntax/release-stmt.html">syntax/release-stmt.html</a></li><li>relfootprint - <a href="footprint.html">footprint.html</a></li><li>rename column - <a href="lang_altertable.html#altertabmvcol">lang_altertable.html#altertabmvcol</a></li><li>rename table - <a href="lang_altertable.html#altertabrename">lang_altertable.html#altertabrename</a></li><li>REPLACE - <a href="lang_replace.html">lang_replace.html</a></li><li>replace - <a href="lang_corefunc.html#replace">lang_corefunc.html#replace</a></li><li>replace SQL function - <a href="lang_corefunc.html#replace">lang_corefunc.html#replace</a></li><li>reported vulnerabilities - <a href="cves.html">cves.html</a></li><li>requirements - <a href="requirements.html">requirements.html</a></li><li>reserve bytes - <a href="fileformat2.html#resbyte">fileformat2.html#resbyte</a></li><li>RESERVED - <a href="lockingv3.html#reserved_lock">lockingv3.html#reserved_lock</a></li><li>RESERVED lock - <a href="lockingv3.html#reserved_lock">lockingv3.html#reserved_lock</a></li><li>reserved lock - <a href="lockingv3.html#reserved_lock">lockingv3.html#reserved_lock</a></li><li>reset the WAL - <a href="fileformat2.html#walreset">fileformat2.html#walreset</a></li><li>restore method - <a href="tclsqlite.html#restore">tclsqlite.html#restore</a></li><li>result code - <a href="rescode.html">rescode.html</a></li><li>result code definitions - <a href="c3ref/c_abort.html">c3ref/c_abort.html</a></li><li>result codes - <a href="rescode.html">rescode.html</a></li><li>result-column - <a href="syntax/result-column.html">syntax/result-column.html</a></li><li>result-column syntax diagram - <a href="syntax/result-column.html">syntax/result-column.html</a></li><li>result-set expressions - <a href="lang_select.html#resultset">lang_select.html#resultset</a></li><li>RETURNING - <a href="lang_returning.html">lang_returning.html</a></li><li>returning - <a href="lang_returning.html">lang_returning.html</a></li><li>RETURNING clause - <a href="lang_returning.html">lang_returning.html</a></li><li>returning-clause - <a href="syntax/returning-clause.html">syntax/returning-clause.html</a></li><li>returning-clause syntax diagram - <a href="syntax/returning-clause.html">syntax/returning-clause.html</a></li><li>reverse_unordered_selects - <a href="pragma.html#pragma_reverse_unordered_selects">pragma.html#pragma_reverse_unordered_selects</a></li><li>reverse_unordered_selects pragma - <a href="pragma.html#pragma_reverse_unordered_selects">pragma.html#pragma_reverse_unordered_selects</a></li><li>RIGHT and FULL OUTER JOIN - <a href="lang_select.html#rjoin">lang_select.html#rjoin</a></li><li>RIGHT JOIN - <a href="lang_select.html#rjoin">lang_select.html#rjoin</a></li><li>Robson proof - <a href="malloc.html#nofrag">malloc.html#nofrag</a></li><li>ROLLBACK - <a href="lang_transaction.html">lang_transaction.html</a></li><li>rollback journal - <a href="lockingv3.html#rollback">lockingv3.html#rollback</a></li><li>rollback journal format - <a href="fileformat2.html#rollbackjournal">fileformat2.html#rollbackjournal</a></li><li>rollback-stmt - <a href="syntax/rollback-stmt.html">syntax/rollback-stmt.html</a></li><li>rollback-stmt syntax diagram - <a href="syntax/rollback-stmt.html">syntax/rollback-stmt.html</a></li><li>rollback_hook method - <a href="tclsqlite.html#rollback_hook">tclsqlite.html#rollback_hook</a></li><li>round - <a href="lang_corefunc.html#round">lang_corefunc.html#round</a></li><li>round SQL function - <a href="lang_corefunc.html#round">lang_corefunc.html#round</a></li><li>row value - <a href="rowvalue.html">rowvalue.html</a></li><li>row value IN operator - <a href="rowvalue.html#rvinop">rowvalue.html#rvinop</a></li><li>row values - <a href="rowvalue.html">rowvalue.html</a></li><li>ROWID - <a href="lang_createtable.html#rowid">lang_createtable.html#rowid</a></li><li>rowid - <a href="lang_createtable.html#rowid">lang_createtable.html#rowid</a></li><li>rowid table - <a href="rowidtable.html">rowidtable.html</a></li><li>rowid tables - <a href="rowidtable.html">rowidtable.html</a></li><li>rowvalue - <a href="rowvalue.html">rowvalue.html</a></li><li>RTREE - <a href="rtree.html">rtree.html</a></li><li>rtree - <a href="rtree.html">rtree.html</a></li><li>rtree shadow tables - <a href="rtree.html#xshadow">rtree.html#xshadow</a></li><li>rtreecheck - <a href="rtree.html#rtreecheck">rtree.html#rtreecheck</a></li><li>RTRIM - <a href="datatype3.html#collation">datatype3.html#collation</a></li><li>rtrim - <a href="lang_corefunc.html#rtrim">lang_corefunc.html#rtrim</a></li><li>RTRIM collating function - <a href="datatype3.html#collation">datatype3.html#collation</a></li><li>rtrim SQL function - <a href="lang_corefunc.html#rtrim">lang_corefunc.html#rtrim</a></li><li>rules for determining column affinity - <a href="datatype3.html#affname">datatype3.html#affname</a></li><li>rules for determining column affinity in VIEWs - <a href="datatype3.html#affview">datatype3.html#affview</a></li><li>Run-Time Loadable Extensions - <a href="loadext.html">loadext.html</a></li><li>safe command-line option - <a href="cli.html#safemode">cli.html#safemode</a></li><li>SAVEPOINT - <a href="lang_savepoint.html">lang_savepoint.html</a></li><li>savepoint - <a href="lang_savepoint.html">lang_savepoint.html</a></li><li>SAVEPOINT bug - <a href="howtocorrupt.html#svptbug">howtocorrupt.html#svptbug</a></li><li>savepoint-stmt - <a href="syntax/savepoint-stmt.html">syntax/savepoint-stmt.html</a></li><li>savepoint-stmt syntax diagram - <a href="syntax/savepoint-stmt.html">syntax/savepoint-stmt.html</a></li><li>scanstatus options - <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a></li><li>schema format - <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a></li><li>schema format number - <a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a></li><li>schema storage - <a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a></li><li>schema_version - <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a></li><li>schema_version pragma - <a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a></li><li>search application tips - <a href="fts3.html#appendix_a">fts3.html#appendix_a</a></li><li>second edition file format document - <a href="fileformat2.html">fileformat2.html</a></li><li>secure_delete - <a href="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</a></li><li>secure_delete pragma - <a href="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</a></li><li>security - <a href="security.html">security.html</a></li><li>segment btree - <a href="fts3.html#data_structures">fts3.html#data_structures</a></li><li>SELECT - <a href="lang_select.html">lang_select.html</a></li><li>select - <a href="lang_select.html">lang_select.html</a></li><li>SELECT query - <a href="lang_select.html">lang_select.html</a></li><li>SELECT statement - <a href="lang_select.html">lang_select.html</a></li><li>select-core - <a href="syntax/select-core.html">syntax/select-core.html</a></li><li>select-core syntax diagram - <a href="syntax/select-core.html">syntax/select-core.html</a></li><li>select-stmt - <a href="syntax/select-stmt.html">syntax/select-stmt.html</a></li><li>select-stmt syntax diagram - <a href="syntax/select-stmt.html">syntax/select-stmt.html</a></li><li>self-contained - <a href="selfcontained.html">selfcontained.html</a></li><li>separating a database from its journal - <a href="howtocorrupt.html#roguejrnl">howtocorrupt.html#roguejrnl</a></li><li>serial type - <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a></li><li>serial types - <a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a></li><li>serialize method - <a href="tclsqlite.html#serialize">tclsqlite.html#serialize</a></li><li>series - <a href="series.html">series.html</a></li><li>server-side database - <a href="whentouse.html#serversidedb">whentouse.html#serversidedb</a></li><li>serverless - <a href="serverless.html">serverless.html</a></li><li>session - <a href="sessionintro.html">sessionintro.html</a></li><li>session extension - <a href="sessionintro.html">sessionintro.html</a></li><li>Session Extension C-language Interface - <a href="session/intro.html">session/intro.html</a></li><li>Session Module C-API function list - <a href="session/funclist.html">session/funclist.html</a></li><li>session-capi - <a href="session/intro.html">session/intro.html</a></li><li>session_funclist - <a href="session/funclist.html">session/funclist.html</a></li><li>shadow table - <a href="vtab.html#xshadowname">vtab.html#xshadowname</a></li><li>shadow tables - <a href="vtab.html#xshadowname">vtab.html#xshadowname</a></li><li>shadowtabs - <a href="fts3.html#shadow_tables">fts3.html#shadow_tables</a></li><li>SHARED - <a href="lockingv3.html#shared_lock">lockingv3.html#shared_lock</a></li><li>shared cache - <a href="sharedcache.html">sharedcache.html</a></li><li>shared cache mode - <a href="sharedcache.html">sharedcache.html</a></li><li>SHARED lock - <a href="lockingv3.html#shared_lock">lockingv3.html#shared_lock</a></li><li>shared lock - <a href="lockingv3.html#shared_lock">lockingv3.html#shared_lock</a></li><li>shims - <a href="vfs.html#shim">vfs.html#shim</a></li><li>shm file - <a href="walformat.html#shm">walformat.html#shm</a></li><li>short filenames - <a href="shortnames.html">shortnames.html</a></li><li>short_column_names - <a href="pragma.html#pragma_short_column_names">pragma.html#pragma_short_column_names</a></li><li>short_column_names pragma - <a href="pragma.html#pragma_short_column_names">pragma.html#pragma_short_column_names</a></li><li>shrink_memory - <a href="pragma.html#pragma_shrink_memory">pragma.html#pragma_shrink_memory</a></li><li>shrink_memory pragma - <a href="pragma.html#pragma_shrink_memory">pragma.html#pragma_shrink_memory</a></li><li>sign - <a href="lang_corefunc.html#sign">lang_corefunc.html#sign</a></li><li>sign SQL function - <a href="lang_corefunc.html#sign">lang_corefunc.html#sign</a></li><li>signed-number - <a href="syntax/signed-number.html">syntax/signed-number.html</a></li><li>signed-number syntax diagram - <a href="syntax/signed-number.html">syntax/signed-number.html</a></li><li>simple fts queries - <a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a></li><li>simple SELECT - <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a></li><li>simple-function-invocation - <a href="syntax/simple-function-invocation.html">syntax/simple-function-invocation.html</a></li><li>simple-function-invocation syntax diagram - <a href="syntax/simple-function-invocation.html">syntax/simple-function-invocation.html</a></li><li>simple-select-stmt - <a href="syntax/simple-select-stmt.html">syntax/simple-select-stmt.html</a></li><li>simple-select-stmt syntax diagram - <a href="syntax/simple-select-stmt.html">syntax/simple-select-stmt.html</a></li><li>sin - <a href="lang_mathfunc.html#sin">lang_mathfunc.html#sin</a></li><li>sin SQL function - <a href="lang_mathfunc.html#sin">lang_mathfunc.html#sin</a></li><li>single-argument carray - <a href="carray.html#onearg">carray.html#onearg</a></li><li>sinh - <a href="lang_mathfunc.html#sinh">lang_mathfunc.html#sinh</a></li><li>sinh SQL function - <a href="lang_mathfunc.html#sinh">lang_mathfunc.html#sinh</a></li><li>skip-scan - <a href="optoverview.html#skipscan">optoverview.html#skipscan</a></li><li>skip-scan optimization - <a href="optoverview.html#skipscan">optoverview.html#skipscan</a></li><li>SLT - <a href="testing.html#slt">testing.html#slt</a></li><li>snapshot - <a href="c3ref/snapshot.html">c3ref/snapshot.html</a></li><li>snippet - <a href="fts3.html#snippet">fts3.html#snippet</a></li><li>soft_heap_limit - <a href="pragma.html#pragma_soft_heap_limit">pragma.html#pragma_soft_heap_limit</a></li><li>soft_heap_limit pragma - <a href="pragma.html#pragma_soft_heap_limit">pragma.html#pragma_soft_heap_limit</a></li><li>solve Sudoku puzzles - <a href="lang_with.html#sudoku">lang_with.html#sudoku</a></li><li>sort order - <a href="datatype3.html#sortorder">datatype3.html#sortorder</a></li><li>sorting - <a href="queryplanner.html#sorting">queryplanner.html#sorting</a></li><li>sorting subsets of the result - <a href="optoverview.html#partsort">optoverview.html#partsort</a></li><li>soundex - <a href="lang_corefunc.html#soundex">lang_corefunc.html#soundex</a></li><li>soundex SQL function - <a href="lang_corefunc.html#soundex">lang_corefunc.html#soundex</a></li><li>spellfix1 - <a href="spellfix1.html">spellfix1.html</a></li><li>split amalgamation - <a href="amalgamation.html#amal32k">amalgamation.html#amal32k</a></li><li>SQL Archive - <a href="sqlar.html">sqlar.html</a></li><li>SQL fuzzing - <a href="testing.html#fuzztesting">testing.html#fuzztesting</a></li><li>SQL keyword - <a href="lang_keywords.html">lang_keywords.html</a></li><li>SQL keywords - <a href="lang_keywords.html">lang_keywords.html</a></li><li>SQL Logic Tests - <a href="testing.html#slt">testing.html#slt</a></li><li>SQL parameter - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>SQL parameters - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sql parameters - <a href="swarmvtab.html#sql_parameters">swarmvtab.html#sql_parameters</a></li><li>SQL statement compiler - <a href="c3ref/prepare.html">c3ref/prepare.html</a></li><li>sql-stmt - <a href="syntax/sql-stmt.html">syntax/sql-stmt.html</a></li><li>sql-stmt syntax diagram - <a href="syntax/sql-stmt.html">syntax/sql-stmt.html</a></li><li>sql-stmt-list - <a href="syntax/sql-stmt-list.html">syntax/sql-stmt-list.html</a></li><li>sql-stmt-list syntax diagram - <a href="syntax/sql-stmt-list.html">syntax/sql-stmt-list.html</a></li><li>SQLAR - <a href="sqlar.html">sqlar.html</a></li><li>sqldiff - <a href="sqldiff.html">sqldiff.html</a></li><li>sqldiff --rbu - <a href="rbu.html#sqldiff">rbu.html#sqldiff</a></li><li>sqldiff.exe - <a href="sqldiff.html">sqldiff.html</a></li><li>SQLite amalgamation source file - <a href="amalgamation.html">amalgamation.html</a></li><li>SQLite Archive - <a href="sqlar.html">sqlar.html</a></li><li>SQLite Archive files - <a href="sqlar.html">sqlar.html</a></li><li>SQLite Archive format - <a href="sqlar.html">sqlar.html</a></li><li>SQLite Archive smaller than ZIP - <a href="affcase1.html#smaller">affcase1.html#smaller</a></li><li>SQLite Consortium - <a href="consortium.html">consortium.html</a></li><li>SQLite database file format - <a href="fileformat2.html">fileformat2.html</a></li><li>SQLite extension - <a href="loadext.html">loadext.html</a></li><li>SQLite extensions - <a href="loadext.html">loadext.html</a></li><li>SQLite Keywords - <a href="lang_keywords.html">lang_keywords.html</a></li><li>SQLite query planner - <a href="optoverview.html">optoverview.html</a></li><li>SQLite Shared-Cache Mode - <a href="sharedcache.html">sharedcache.html</a></li><li>SQLite source code repositories - <a href="download.html#srctree">download.html#srctree</a></li><li>sqlite3 - <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a></li><li>sqlite3.exe - <a href="cli.html">cli.html</a></li><li>sqlite3.exe command-line shell - <a href="cli.html">cli.html</a></li><li>sqlite3_aggregate_context - <a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a></li><li>sqlite3_aggregate_count - <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a></li><li>sqlite3_analyzer - <a href="sqlanalyze.html">sqlanalyze.html</a></li><li>sqlite3_analyzer.exe - <a href="sqlanalyze.html">sqlanalyze.html</a></li><li>sqlite3_api_routines - <a href="c3ref/api_routines.html">c3ref/api_routines.html</a></li><li>sqlite3_auto_extension - <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a></li><li>sqlite3_autovacuum_pages - <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a></li><li>sqlite3_backup - <a href="c3ref/backup.html">c3ref/backup.html</a></li><li>sqlite3_backup_finish - <a href="c3ref/backup_finish.html#sqlite3backupfinish">c3ref/backup_finish.html#sqlite3backupfinish</a></li><li>sqlite3_backup_init - <a href="c3ref/backup_finish.html#sqlite3backupinit">c3ref/backup_finish.html#sqlite3backupinit</a></li><li>sqlite3_backup_pagecount - <a href="c3ref/backup_finish.html#sqlite3backuppagecount">c3ref/backup_finish.html#sqlite3backuppagecount</a></li><li>sqlite3_backup_remaining - <a href="c3ref/backup_finish.html#sqlite3backupremaining">c3ref/backup_finish.html#sqlite3backupremaining</a></li><li>sqlite3_backup_step - <a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a></li><li>sqlite3_bind_blob - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_blob64 - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_double - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_int - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_int64 - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_null - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_parameter_count - <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a></li><li>sqlite3_bind_parameter_index - <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a></li><li>sqlite3_bind_parameter_name - <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a></li><li>sqlite3_bind_pointer - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_text - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_text16 - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_text64 - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_value - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_zeroblob - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_bind_zeroblob64 - <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a></li><li>sqlite3_blob - <a href="c3ref/blob.html">c3ref/blob.html</a></li><li>sqlite3_blob_bytes - <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a></li><li>sqlite3_blob_close - <a href="c3ref/blob_close.html">c3ref/blob_close.html</a></li><li>sqlite3_blob_open - <a href="c3ref/blob_open.html">c3ref/blob_open.html</a></li><li>sqlite3_blob_read - <a href="c3ref/blob_read.html">c3ref/blob_read.html</a></li><li>sqlite3_blob_reopen - <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a></li><li>sqlite3_blob_write - <a href="c3ref/blob_write.html">c3ref/blob_write.html</a></li><li>sqlite3_busy_handler - <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a></li><li>sqlite3_busy_timeout - <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a></li><li>sqlite3_cancel_auto_extension - <a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a></li><li>sqlite3_carray_bind - <a href="carray.html#onearg">carray.html#onearg</a></li><li>sqlite3_changegroup - <a href="session/changegroup.html">session/changegroup.html</a></li><li>sqlite3_changes - <a href="c3ref/changes.html">c3ref/changes.html</a></li><li>sqlite3_changes64 - <a href="c3ref/changes.html">c3ref/changes.html</a></li><li>sqlite3_changeset_iter - <a href="session/changeset_iter.html">session/changeset_iter.html</a></li><li>sqlite3_clear_bindings - <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a></li><li>sqlite3_close - <a href="c3ref/close.html">c3ref/close.html</a></li><li>sqlite3_close_v2 - <a href="c3ref/close.html">c3ref/close.html</a></li><li>sqlite3_collation_needed - <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a></li><li>sqlite3_collation_needed16 - <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a></li><li>sqlite3_column_blob - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>sqlite3_column_bytes - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>sqlite3_column_bytes16 - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>sqlite3_column_count - <a href="c3ref/column_count.html">c3ref/column_count.html</a></li><li>sqlite3_column_database_name - <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a></li><li>sqlite3_column_database_name16 - <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a></li><li>sqlite3_column_decltype - <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a></li><li>sqlite3_column_decltype16 - <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a></li><li>sqlite3_column_double - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>sqlite3_column_int - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>sqlite3_column_int64 - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>sqlite3_column_name - <a href="c3ref/column_name.html">c3ref/column_name.html</a></li><li>sqlite3_column_name16 - <a href="c3ref/column_name.html">c3ref/column_name.html</a></li><li>sqlite3_column_origin_name - <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a></li><li>sqlite3_column_origin_name16 - <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a></li><li>sqlite3_column_table_name - <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a></li><li>sqlite3_column_table_name16 - <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a></li><li>sqlite3_column_text - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>sqlite3_column_text16 - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>sqlite3_column_type - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>sqlite3_column_value - <a href="c3ref/column_blob.html">c3ref/column_blob.html</a></li><li>sqlite3_commit_hook - <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a></li><li>sqlite3_compileoption_get - <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a></li><li>sqlite3_compileoption_used - <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a></li><li>sqlite3_complete - <a href="c3ref/complete.html">c3ref/complete.html</a></li><li>sqlite3_complete16 - <a href="c3ref/complete.html">c3ref/complete.html</a></li><li>sqlite3_config - <a href="c3ref/config.html">c3ref/config.html</a></li><li>sqlite3_context - <a href="c3ref/context.html">c3ref/context.html</a></li><li>sqlite3_context_db_handle - <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a></li><li>sqlite3_create_collation - <a href="c3ref/create_collation.html">c3ref/create_collation.html</a></li><li>sqlite3_create_collation16 - <a href="c3ref/create_collation.html">c3ref/create_collation.html</a></li><li>sqlite3_create_collation_v2 - <a href="c3ref/create_collation.html">c3ref/create_collation.html</a></li><li>sqlite3_create_filename - <a href="c3ref/create_filename.html">c3ref/create_filename.html</a></li><li>sqlite3_create_function - <a href="c3ref/create_function.html">c3ref/create_function.html</a></li><li>sqlite3_create_function16 - <a href="c3ref/create_function.html">c3ref/create_function.html</a></li><li>sqlite3_create_function_v2 - <a href="c3ref/create_function.html">c3ref/create_function.html</a></li><li>sqlite3_create_module - <a href="c3ref/create_module.html">c3ref/create_module.html</a></li><li>sqlite3_create_module_v2 - <a href="c3ref/create_module.html">c3ref/create_module.html</a></li><li>sqlite3_create_window_function - <a href="c3ref/create_function.html">c3ref/create_function.html</a></li><li>sqlite3_data_count - <a href="c3ref/data_count.html">c3ref/data_count.html</a></li><li>sqlite3_data_directory - <a href="c3ref/data_directory.html">c3ref/data_directory.html</a></li><li>sqlite3_database_file_object - <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a></li><li>sqlite3_db_cacheflush - <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a></li><li>sqlite3_db_config - <a href="c3ref/db_config.html">c3ref/db_config.html</a></li><li>sqlite3_db_filename - <a href="c3ref/db_filename.html">c3ref/db_filename.html</a></li><li>sqlite3_db_handle - <a href="c3ref/db_handle.html">c3ref/db_handle.html</a></li><li>sqlite3_db_mutex - <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a></li><li>sqlite3_db_name - <a href="c3ref/db_name.html">c3ref/db_name.html</a></li><li>sqlite3_db_readonly - <a href="c3ref/db_readonly.html">c3ref/db_readonly.html</a></li><li>sqlite3_db_release_memory - <a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a></li><li>sqlite3_db_status - <a href="c3ref/db_status.html">c3ref/db_status.html</a></li><li>sqlite3_declare_vtab - <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a></li><li>sqlite3_deserialize - <a href="c3ref/deserialize.html">c3ref/deserialize.html</a></li><li>sqlite3_drop_modules - <a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a></li><li>sqlite3_enable_load_extension - <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a></li><li>sqlite3_enable_shared_cache - <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a></li><li>sqlite3_errcode - <a href="c3ref/errcode.html">c3ref/errcode.html</a></li><li>sqlite3_errmsg - <a href="c3ref/errcode.html">c3ref/errcode.html</a></li><li>sqlite3_errmsg16 - <a href="c3ref/errcode.html">c3ref/errcode.html</a></li><li>sqlite3_error_offset - <a href="c3ref/errcode.html">c3ref/errcode.html</a></li><li>sqlite3_errstr - <a href="c3ref/errcode.html">c3ref/errcode.html</a></li><li>sqlite3_exec - <a href="c3ref/exec.html">c3ref/exec.html</a></li><li>sqlite3_expanded_sql - <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a></li><li>sqlite3_expired - <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a></li><li>sqlite3_extended_errcode - <a href="c3ref/errcode.html">c3ref/errcode.html</a></li><li>sqlite3_extended_result_codes - <a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a></li><li>sqlite3_file - <a href="c3ref/file.html">c3ref/file.html</a></li><li>sqlite3_file_control - <a href="c3ref/file_control.html">c3ref/file_control.html</a></li><li>sqlite3_filename - <a href="c3ref/filename.html">c3ref/filename.html</a></li><li>sqlite3_filename_database - <a href="c3ref/filename_database.html">c3ref/filename_database.html</a></li><li>sqlite3_filename_journal - <a href="c3ref/filename_database.html">c3ref/filename_database.html</a></li><li>sqlite3_filename_wal - <a href="c3ref/filename_database.html">c3ref/filename_database.html</a></li><li>sqlite3_finalize - <a href="c3ref/finalize.html">c3ref/finalize.html</a></li><li>sqlite3_free - <a href="c3ref/free.html">c3ref/free.html</a></li><li>sqlite3_free_filename - <a href="c3ref/create_filename.html">c3ref/create_filename.html</a></li><li>sqlite3_free_table - <a href="c3ref/free_table.html">c3ref/free_table.html</a></li><li>sqlite3_get_autocommit - <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a></li><li>sqlite3_get_auxdata - <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a></li><li>sqlite3_get_table - <a href="c3ref/free_table.html">c3ref/free_table.html</a></li><li>sqlite3_global_recover - <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a></li><li>sqlite3_hard_heap_limit64 - <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a></li><li>sqlite3_index_info - <a href="c3ref/index_info.html">c3ref/index_info.html</a></li><li>sqlite3_initialize - <a href="c3ref/initialize.html">c3ref/initialize.html</a></li><li>sqlite3_int64 - <a href="c3ref/int64.html">c3ref/int64.html</a></li><li>sqlite3_interrupt - <a href="c3ref/interrupt.html">c3ref/interrupt.html</a></li><li>sqlite3_io_methods - <a href="c3ref/io_methods.html">c3ref/io_methods.html</a></li><li>sqlite3_keyword_check - <a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a></li><li>sqlite3_keyword_count - <a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a></li><li>sqlite3_keyword_name - <a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a></li><li>sqlite3_last_insert_rowid - <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a></li><li>sqlite3_libversion - <a href="c3ref/libversion.html">c3ref/libversion.html</a></li><li>sqlite3_libversion_number - <a href="c3ref/libversion.html">c3ref/libversion.html</a></li><li>sqlite3_limit - <a href="c3ref/limit.html">c3ref/limit.html</a></li><li>sqlite3_load_extension - <a href="c3ref/load_extension.html">c3ref/load_extension.html</a></li><li>sqlite3_log - <a href="c3ref/log.html">c3ref/log.html</a></li><li>sqlite3_malloc - <a href="c3ref/free.html">c3ref/free.html</a></li><li>sqlite3_malloc64 - <a href="c3ref/free.html">c3ref/free.html</a></li><li>sqlite3_mem_methods - <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a></li><li>sqlite3_memory_alarm - <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a></li><li>sqlite3_memory_highwater - <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a></li><li>sqlite3_memory_used - <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a></li><li>sqlite3_module - <a href="c3ref/module.html">c3ref/module.html</a></li><li>sqlite3_module.xBegin - <a href="vtab.html#xBegin">vtab.html#xBegin</a></li><li>sqlite3_module.xBestIndex - <a href="vtab.html#xbestindex">vtab.html#xbestindex</a></li><li>sqlite3_module.xClose - <a href="vtab.html#xclose">vtab.html#xclose</a></li><li>sqlite3_module.xColumn - <a href="vtab.html#xcolumn">vtab.html#xcolumn</a></li><li>sqlite3_module.xCommit - <a href="vtab.html#xcommit">vtab.html#xcommit</a></li><li>sqlite3_module.xConnect - <a href="vtab.html#xconnect">vtab.html#xconnect</a></li><li>sqlite3_module.xCreate - <a href="vtab.html#xcreate">vtab.html#xcreate</a></li><li>sqlite3_module.xDisconnect - <a href="vtab.html#xdisconnect">vtab.html#xdisconnect</a></li><li>sqlite3_module.xEof - <a href="vtab.html#xeof">vtab.html#xeof</a></li><li>sqlite3_module.xFilter - <a href="vtab.html#xfilter">vtab.html#xfilter</a></li><li>sqlite3_module.xFindFunction - <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a></li><li>sqlite3_module.xNext - <a href="vtab.html#xnext">vtab.html#xnext</a></li><li>sqlite3_module.xOpen - <a href="vtab.html#xopen">vtab.html#xopen</a></li><li>sqlite3_module.xRename - <a href="vtab.html#xrename">vtab.html#xrename</a></li><li>sqlite3_module.xRollback - <a href="vtab.html#xrollback">vtab.html#xrollback</a></li><li>sqlite3_module.xRowid - <a href="vtab.html#xrowid">vtab.html#xrowid</a></li><li>sqlite3_module.xSavepoint - <a href="vtab.html#xsavepoint">vtab.html#xsavepoint</a></li><li>sqlite3_module.xShadowName - <a href="vtab.html#xshadowname">vtab.html#xshadowname</a></li><li>sqlite3_module.xSync - <a href="vtab.html#xsync">vtab.html#xsync</a></li><li>sqlite3_module.xUpdate - <a href="vtab.html#xupdate">vtab.html#xupdate</a></li><li>sqlite3_mprintf - <a href="c3ref/mprintf.html">c3ref/mprintf.html</a></li><li>sqlite3_msize - <a href="c3ref/free.html">c3ref/free.html</a></li><li>sqlite3_mutex - <a href="c3ref/mutex.html">c3ref/mutex.html</a></li><li>sqlite3_mutex_alloc - <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a></li><li>sqlite3_mutex_enter - <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a></li><li>sqlite3_mutex_free - <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a></li><li>sqlite3_mutex_held - <a href="c3ref/mutex_held.html">c3ref/mutex_held.html</a></li><li>sqlite3_mutex_leave - <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a></li><li>sqlite3_mutex_methods - <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a></li><li>sqlite3_mutex_notheld - <a href="c3ref/mutex_held.html">c3ref/mutex_held.html</a></li><li>sqlite3_mutex_try - <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a></li><li>sqlite3_next_stmt - <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a></li><li>sqlite3_normalized_sql - <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a></li><li>sqlite3_open - <a href="c3ref/open.html">c3ref/open.html</a></li><li>sqlite3_open16 - <a href="c3ref/open.html">c3ref/open.html</a></li><li>sqlite3_open_v2 - <a href="c3ref/open.html">c3ref/open.html</a></li><li>sqlite3_os_end - <a href="c3ref/initialize.html">c3ref/initialize.html</a></li><li>sqlite3_os_init - <a href="c3ref/initialize.html">c3ref/initialize.html</a></li><li>sqlite3_overload_function - <a href="c3ref/overload_function.html">c3ref/overload_function.html</a></li><li>sqlite3_pcache - <a href="c3ref/pcache.html">c3ref/pcache.html</a></li><li>sqlite3_pcache_methods2 - <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a></li><li>sqlite3_pcache_page - <a href="c3ref/pcache_page.html">c3ref/pcache_page.html</a></li><li>sqlite3_prepare - <a href="c3ref/prepare.html">c3ref/prepare.html</a></li><li>sqlite3_prepare16 - <a href="c3ref/prepare.html">c3ref/prepare.html</a></li><li>sqlite3_prepare16_v2 - <a href="c3ref/prepare.html">c3ref/prepare.html</a></li><li>sqlite3_prepare16_v3 - <a href="c3ref/prepare.html">c3ref/prepare.html</a></li><li>sqlite3_prepare_v2 - <a href="c3ref/prepare.html">c3ref/prepare.html</a></li><li>sqlite3_prepare_v3 - <a href="c3ref/prepare.html">c3ref/prepare.html</a></li><li>sqlite3_preupdate_blobwrite - <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a></li><li>sqlite3_preupdate_count - <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a></li><li>sqlite3_preupdate_depth - <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a></li><li>sqlite3_preupdate_hook - <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a></li><li>sqlite3_preupdate_new - <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a></li><li>sqlite3_preupdate_old - <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a></li><li>sqlite3_profile - <a href="c3ref/profile.html">c3ref/profile.html</a></li><li>sqlite3_progress_handler - <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a></li><li>sqlite3_randomness - <a href="c3ref/randomness.html">c3ref/randomness.html</a></li><li>sqlite3_realloc - <a href="c3ref/free.html">c3ref/free.html</a></li><li>sqlite3_realloc64 - <a href="c3ref/free.html">c3ref/free.html</a></li><li>sqlite3_rebaser - <a href="session/rebaser.html">session/rebaser.html</a></li><li>sqlite3_release_memory - <a href="c3ref/release_memory.html">c3ref/release_memory.html</a></li><li>sqlite3_reset - <a href="c3ref/reset.html">c3ref/reset.html</a></li><li>sqlite3_reset_auto_extension - <a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a></li><li>sqlite3_result_blob - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_blob64 - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_double - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_error - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_error16 - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_error_code - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_error_nomem - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_error_toobig - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_int - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_int64 - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_null - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_pointer - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_subtype - <a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a></li><li>sqlite3_result_text - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_text16 - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_text16be - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_text16le - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_text64 - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_value - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_zeroblob - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_result_zeroblob64 - <a href="c3ref/result_blob.html">c3ref/result_blob.html</a></li><li>sqlite3_rollback_hook - <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a></li><li>sqlite3_rtree_query_callback - <a href="rtree.html#xquery">rtree.html#xquery</a></li><li>sqlite3_serialize - <a href="c3ref/serialize.html">c3ref/serialize.html</a></li><li>sqlite3_session - <a href="session/session.html">session/session.html</a></li><li>sqlite3_set_authorizer - <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a></li><li>sqlite3_set_auxdata - <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a></li><li>sqlite3_set_last_insert_rowid - <a href="c3ref/set_last_insert_rowid.html">c3ref/set_last_insert_rowid.html</a></li><li>sqlite3_shutdown - <a href="c3ref/initialize.html">c3ref/initialize.html</a></li><li>sqlite3_sleep - <a href="c3ref/sleep.html">c3ref/sleep.html</a></li><li>sqlite3_snapshot - <a href="c3ref/snapshot.html">c3ref/snapshot.html</a></li><li>sqlite3_snapshot_cmp - <a href="c3ref/snapshot_cmp.html">c3ref/snapshot_cmp.html</a></li><li>sqlite3_snapshot_free - <a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a></li><li>sqlite3_snapshot_get - <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a></li><li>sqlite3_snapshot_open - <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a></li><li>sqlite3_snapshot_recover - <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a></li><li>sqlite3_snprintf - <a href="c3ref/mprintf.html">c3ref/mprintf.html</a></li><li>sqlite3_soft_heap_limit - <a href="c3ref/soft_heap_limit.html">c3ref/soft_heap_limit.html</a></li><li>sqlite3_soft_heap_limit64 - <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a></li><li>sqlite3_sourceid - <a href="c3ref/libversion.html">c3ref/libversion.html</a></li><li>sqlite3_sql - <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a></li><li>sqlite3_status - <a href="c3ref/status.html">c3ref/status.html</a></li><li>sqlite3_status64 - <a href="c3ref/status.html">c3ref/status.html</a></li><li>sqlite3_step - <a href="c3ref/step.html">c3ref/step.html</a></li><li>sqlite3_stmt - <a href="c3ref/stmt.html">c3ref/stmt.html</a></li><li>sqlite3_stmt_busy - <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a></li><li>sqlite3_stmt_isexplain - <a href="c3ref/stmt_isexplain.html">c3ref/stmt_isexplain.html</a></li><li>sqlite3_stmt_readonly - <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a></li><li>sqlite3_stmt_scanstatus - <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a></li><li>sqlite3_stmt_scanstatus_reset - <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a></li><li>sqlite3_stmt_status - <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a></li><li>sqlite3_str - <a href="c3ref/str.html">c3ref/str.html</a></li><li>sqlite3_str_append - <a href="c3ref/str_append.html">c3ref/str_append.html</a></li><li>sqlite3_str_appendall - <a href="c3ref/str_append.html">c3ref/str_append.html</a></li><li>sqlite3_str_appendchar - <a href="c3ref/str_append.html">c3ref/str_append.html</a></li><li>sqlite3_str_appendf - <a href="c3ref/str_append.html">c3ref/str_append.html</a></li><li>sqlite3_str_errcode - <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a></li><li>sqlite3_str_finish - <a href="c3ref/str_finish.html">c3ref/str_finish.html</a></li><li>sqlite3_str_length - <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a></li><li>sqlite3_str_new - <a href="c3ref/str_new.html">c3ref/str_new.html</a></li><li>sqlite3_str_reset - <a href="c3ref/str_append.html">c3ref/str_append.html</a></li><li>sqlite3_str_value - <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a></li><li>sqlite3_str_vappendf - <a href="c3ref/str_append.html">c3ref/str_append.html</a></li><li>sqlite3_strglob - <a href="c3ref/strglob.html">c3ref/strglob.html</a></li><li>sqlite3_stricmp - <a href="c3ref/stricmp.html">c3ref/stricmp.html</a></li><li>sqlite3_strlike - <a href="c3ref/strlike.html">c3ref/strlike.html</a></li><li>sqlite3_strnicmp - <a href="c3ref/stricmp.html">c3ref/stricmp.html</a></li><li>sqlite3_system_errno - <a href="c3ref/system_errno.html">c3ref/system_errno.html</a></li><li>sqlite3_table_column_metadata - <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a></li><li>sqlite3_temp_directory - <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a></li><li>sqlite3_test_control - <a href="c3ref/test_control.html">c3ref/test_control.html</a></li><li>sqlite3_thread_cleanup - <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a></li><li>sqlite3_threadsafe - <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a></li><li>sqlite3_total_changes - <a href="c3ref/total_changes.html">c3ref/total_changes.html</a></li><li>sqlite3_total_changes64 - <a href="c3ref/total_changes.html">c3ref/total_changes.html</a></li><li>sqlite3_trace - <a href="c3ref/profile.html">c3ref/profile.html</a></li><li>sqlite3_trace_v2 - <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a></li><li>sqlite3_transfer_bindings - <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a></li><li>sqlite3_txn_state - <a href="c3ref/txn_state.html">c3ref/txn_state.html</a></li><li>sqlite3_uint64 - <a href="c3ref/int64.html">c3ref/int64.html</a></li><li>sqlite3_unlock_notify - <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a></li><li>sqlite3_update_hook - <a href="c3ref/update_hook.html">c3ref/update_hook.html</a></li><li>sqlite3_uri_boolean - <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a></li><li>sqlite3_uri_int64 - <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a></li><li>sqlite3_uri_key - <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a></li><li>sqlite3_uri_parameter - <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a></li><li>sqlite3_user_data - <a href="c3ref/user_data.html">c3ref/user_data.html</a></li><li>sqlite3_value - <a href="c3ref/value.html">c3ref/value.html</a></li><li>sqlite3_value_blob - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_bytes - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_bytes16 - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_double - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_dup - <a href="c3ref/value_dup.html">c3ref/value_dup.html</a></li><li>sqlite3_value_encoding - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_free - <a href="c3ref/value_dup.html">c3ref/value_dup.html</a></li><li>sqlite3_value_frombind - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_int - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_int64 - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_nochange - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_numeric_type - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_pointer - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_subtype - <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a></li><li>sqlite3_value_text - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_text16 - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_text16be - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_text16le - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_value_type - <a href="c3ref/value_blob.html">c3ref/value_blob.html</a></li><li>sqlite3_version - <a href="c3ref/libversion.html">c3ref/libversion.html</a></li><li>sqlite3_vfs - <a href="c3ref/vfs.html">c3ref/vfs.html</a></li><li>sqlite3_vfs.xAccess - <a href="c3ref/vfs.html#sqlite3vfsxaccess">c3ref/vfs.html#sqlite3vfsxaccess</a></li><li>sqlite3_vfs.xOpen - <a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a></li><li>sqlite3_vfs_find - <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a></li><li>sqlite3_vfs_register - <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a></li><li>sqlite3_vfs_unregister - <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a></li><li>sqlite3_vmprintf - <a href="c3ref/mprintf.html">c3ref/mprintf.html</a></li><li>sqlite3_vsnprintf - <a href="c3ref/mprintf.html">c3ref/mprintf.html</a></li><li>sqlite3_vtab - <a href="c3ref/vtab.html">c3ref/vtab.html</a></li><li>sqlite3_vtab_collation - <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a></li><li>sqlite3_vtab_config - <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a></li><li>sqlite3_vtab_cursor - <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a></li><li>sqlite3_vtab_distinct - <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a></li><li>sqlite3_vtab_in - <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a></li><li>sqlite3_vtab_in_first - <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a></li><li>sqlite3_vtab_in_next - <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a></li><li>sqlite3_vtab_nochange - <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a></li><li>sqlite3_vtab_on_conflict - <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a></li><li>sqlite3_vtab_rhs_value - <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a></li><li>sqlite3_wal_autocheckpoint - <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a></li><li>sqlite3_wal_checkpoint - <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a></li><li>sqlite3_wal_checkpoint_v2 - <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a></li><li>sqlite3_wal_hook - <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a></li><li>sqlite3_win32_set_directory - <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a></li><li>sqlite3_win32_set_directory8 - <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a></li><li>sqlite3_win32_set_directory16 - <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a></li><li>sqlite3changegroup_add - <a href="session/sqlite3changegroup_add.html">session/sqlite3changegroup_add.html</a></li><li>sqlite3changegroup_add_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3changegroup_delete - <a href="session/sqlite3changegroup_delete.html">session/sqlite3changegroup_delete.html</a></li><li>sqlite3changegroup_new - <a href="session/sqlite3changegroup_new.html">session/sqlite3changegroup_new.html</a></li><li>sqlite3changegroup_output - <a href="session/sqlite3changegroup_output.html">session/sqlite3changegroup_output.html</a></li><li>sqlite3changegroup_output_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3changeset_apply - <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a></li><li>sqlite3changeset_apply_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3changeset_apply_v2 - <a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a></li><li>sqlite3changeset_apply_v2_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3changeset_concat - <a href="session/sqlite3changeset_concat.html">session/sqlite3changeset_concat.html</a></li><li>sqlite3changeset_concat_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3changeset_conflict - <a href="session/sqlite3changeset_conflict.html">session/sqlite3changeset_conflict.html</a></li><li>sqlite3changeset_finalize - <a href="session/sqlite3changeset_finalize.html">session/sqlite3changeset_finalize.html</a></li><li>sqlite3changeset_fk_conflicts - <a href="session/sqlite3changeset_fk_conflicts.html">session/sqlite3changeset_fk_conflicts.html</a></li><li>sqlite3changeset_invert - <a href="session/sqlite3changeset_invert.html">session/sqlite3changeset_invert.html</a></li><li>sqlite3changeset_invert_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3changeset_new - <a href="session/sqlite3changeset_new.html">session/sqlite3changeset_new.html</a></li><li>sqlite3changeset_next - <a href="session/sqlite3changeset_next.html">session/sqlite3changeset_next.html</a></li><li>sqlite3changeset_old - <a href="session/sqlite3changeset_old.html">session/sqlite3changeset_old.html</a></li><li>sqlite3changeset_op - <a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a></li><li>sqlite3changeset_pk - <a href="session/sqlite3changeset_pk.html">session/sqlite3changeset_pk.html</a></li><li>sqlite3changeset_start - <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a></li><li>sqlite3changeset_start_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3changeset_start_v2 - <a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a></li><li>sqlite3changeset_start_v2_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3rebaser_configure - <a href="session/sqlite3rebaser_configure.html">session/sqlite3rebaser_configure.html</a></li><li>sqlite3rebaser_create - <a href="session/sqlite3rebaser_create.html">session/sqlite3rebaser_create.html</a></li><li>sqlite3rebaser_delete - <a href="session/sqlite3rebaser_delete.html">session/sqlite3rebaser_delete.html</a></li><li>sqlite3rebaser_rebase - <a href="session/sqlite3rebaser_rebase.html">session/sqlite3rebaser_rebase.html</a></li><li>sqlite3rebaser_rebase_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3session_attach - <a href="session/sqlite3session_attach.html">session/sqlite3session_attach.html</a></li><li>sqlite3session_changeset - <a href="session/sqlite3session_changeset.html">session/sqlite3session_changeset.html</a></li><li>sqlite3session_changeset_size - <a href="session/sqlite3session_changeset_size.html">session/sqlite3session_changeset_size.html</a></li><li>sqlite3session_changeset_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3session_config - <a href="session/sqlite3session_config.html">session/sqlite3session_config.html</a></li><li>sqlite3session_create - <a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a></li><li>sqlite3session_delete - <a href="session/sqlite3session_delete.html">session/sqlite3session_delete.html</a></li><li>sqlite3session_diff - <a href="session/sqlite3session_diff.html">session/sqlite3session_diff.html</a></li><li>sqlite3session_enable - <a href="session/sqlite3session_enable.html">session/sqlite3session_enable.html</a></li><li>sqlite3session_indirect - <a href="session/sqlite3session_indirect.html">session/sqlite3session_indirect.html</a></li><li>sqlite3session_isempty - <a href="session/sqlite3session_isempty.html">session/sqlite3session_isempty.html</a></li><li>sqlite3session_memory_used - <a href="session/sqlite3session_memory_used.html">session/sqlite3session_memory_used.html</a></li><li>sqlite3session_patchset - <a href="session/sqlite3session_patchset.html">session/sqlite3session_patchset.html</a></li><li>sqlite3session_patchset_strm - <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a></li><li>sqlite3session_table_filter - <a href="session/sqlite3session_table_filter.html">session/sqlite3session_table_filter.html</a></li><li>SQLITE_4_BYTE_ALIGNED_MALLOC - <a href="compile.html#4_byte_aligned_malloc">compile.html#4_byte_aligned_malloc</a></li><li>SQLITE_ABORT - <a href="rescode.html#abort">rescode.html#abort</a></li><li>SQLITE_ABORT_ROLLBACK - <a href="rescode.html#abort_rollback">rescode.html#abort_rollback</a></li><li>SQLITE_ACCESS_EXISTS - <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a></li><li>SQLITE_ACCESS_READ - <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a></li><li>SQLITE_ACCESS_READWRITE - <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a></li><li>SQLITE_ALLOW_COVERING_INDEX_SCAN - <a href="compile.html#allow_covering_index_scan">compile.html#allow_covering_index_scan</a></li><li>SQLITE_ALLOW_URI_AUTHORITY - <a href="compile.html#allow_uri_authority">compile.html#allow_uri_authority</a></li><li>SQLITE_ALTER_TABLE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_ANALYZE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_ANY - <a href="c3ref/c_any.html">c3ref/c_any.html</a></li><li>SQLITE_API - <a href="compile.html#api">compile.html#api</a></li><li>SQLITE_APICALL - <a href="compile.html#apicall">compile.html#apicall</a></li><li>SQLITE_ATTACH - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_AUTH - <a href="rescode.html#auth">rescode.html#auth</a></li><li>SQLITE_AUTH_USER - <a href="rescode.html#auth_user">rescode.html#auth_user</a></li><li>SQLITE_BLOB - <a href="c3ref/c_blob.html">c3ref/c_blob.html</a></li><li>SQLITE_BUSY - <a href="rescode.html#busy">rescode.html#busy</a></li><li>SQLITE_BUSY_RECOVERY - <a href="rescode.html#busy_recovery">rescode.html#busy_recovery</a></li><li>SQLITE_BUSY_SNAPSHOT - <a href="rescode.html#busy_snapshot">rescode.html#busy_snapshot</a></li><li>SQLITE_BUSY_TIMEOUT - <a href="rescode.html#busy_timeout">rescode.html#busy_timeout</a></li><li>SQLITE_BYTEORDER - <a href="compile.html#byteorder">compile.html#byteorder</a></li><li>SQLITE_CALLBACK - <a href="compile.html#callback">compile.html#callback</a></li><li>SQLITE_CANTOPEN - <a href="rescode.html#cantopen">rescode.html#cantopen</a></li><li>SQLITE_CANTOPEN_CONVPATH - <a href="rescode.html#cantopen_convpath">rescode.html#cantopen_convpath</a></li><li>SQLITE_CANTOPEN_DIRTYWAL - <a href="rescode.html#cantopen_dirtywal">rescode.html#cantopen_dirtywal</a></li><li>SQLITE_CANTOPEN_FULLPATH - <a href="rescode.html#cantopen_fullpath">rescode.html#cantopen_fullpath</a></li><li>SQLITE_CANTOPEN_ISDIR - <a href="rescode.html#cantopen_isdir">rescode.html#cantopen_isdir</a></li><li>SQLITE_CANTOPEN_NOTEMPDIR - <a href="rescode.html#cantopen_notempdir">rescode.html#cantopen_notempdir</a></li><li>SQLITE_CANTOPEN_SYMLINK - <a href="rescode.html#cantopen_symlink">rescode.html#cantopen_symlink</a></li><li>SQLITE_CASE_SENSITIVE_LIKE - <a href="compile.html#case_sensitive_like">compile.html#case_sensitive_like</a></li><li>SQLITE_CDECL - <a href="compile.html#cdecl">compile.html#cdecl</a></li><li>SQLITE_CHANGESET_ABORT - <a href="session/c_changeset_abort.html">session/c_changeset_abort.html</a></li><li>SQLITE_CHANGESET_CONFLICT - <a href="session/c_changeset_conflict.html">session/c_changeset_conflict.html</a></li><li>SQLITE_CHANGESET_CONSTRAINT - <a href="session/c_changeset_conflict.html">session/c_changeset_conflict.html</a></li><li>SQLITE_CHANGESET_DATA - <a href="session/c_changeset_conflict.html">session/c_changeset_conflict.html</a></li><li>SQLITE_CHANGESET_FOREIGN_KEY - <a href="session/c_changeset_conflict.html">session/c_changeset_conflict.html</a></li><li>SQLITE_CHANGESET_NOTFOUND - <a href="session/c_changeset_conflict.html">session/c_changeset_conflict.html</a></li><li>SQLITE_CHANGESET_OMIT - <a href="session/c_changeset_abort.html">session/c_changeset_abort.html</a></li><li>SQLITE_CHANGESET_REPLACE - <a href="session/c_changeset_abort.html">session/c_changeset_abort.html</a></li><li>SQLITE_CHANGESETAPPLY_INVERT - <a href="session/c_changesetapply_invert.html">session/c_changesetapply_invert.html</a></li><li>SQLITE_CHANGESETAPPLY_NOSAVEPOINT - <a href="session/c_changesetapply_invert.html">session/c_changesetapply_invert.html</a></li><li>SQLITE_CHANGESETSTART_INVERT - <a href="session/c_changesetstart_invert.html">session/c_changesetstart_invert.html</a></li><li>SQLITE_CHECKPOINT_FULL - <a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a></li><li>SQLITE_CHECKPOINT_PASSIVE - <a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a></li><li>SQLITE_CHECKPOINT_RESTART - <a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a></li><li>SQLITE_CHECKPOINT_TRUNCATE - <a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a></li><li>sqlite_compileoption_get - <a href="lang_corefunc.html#sqlite_compileoption_get">lang_corefunc.html#sqlite_compileoption_get</a></li><li>sqlite_compileoption_get SQL function - <a href="lang_corefunc.html#sqlite_compileoption_get">lang_corefunc.html#sqlite_compileoption_get</a></li><li>sqlite_compileoption_used - <a href="lang_corefunc.html#sqlite_compileoption_used">lang_corefunc.html#sqlite_compileoption_used</a></li><li>sqlite_compileoption_used SQL function - <a href="lang_corefunc.html#sqlite_compileoption_used">lang_corefunc.html#sqlite_compileoption_used</a></li><li>SQLITE_CONFIG_COVERING_INDEX_SCAN - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigcoveringindexscan">c3ref/c_config_covering_index_scan.html#sqliteconfigcoveringindexscan</a></li><li>SQLITE_CONFIG_GETMALLOC - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmalloc">c3ref/c_config_covering_index_scan.html#sqliteconfiggetmalloc</a></li><li>SQLITE_CONFIG_GETMUTEX - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex">c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex</a></li><li>SQLITE_CONFIG_GETPCACHE - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache">c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache</a></li><li>SQLITE_CONFIG_GETPCACHE2 - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2">c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2</a></li><li>SQLITE_CONFIG_HEAP - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">c3ref/c_config_covering_index_scan.html#sqliteconfigheap</a></li><li>SQLITE_CONFIG_LOG - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">c3ref/c_config_covering_index_scan.html#sqliteconfiglog</a></li><li>SQLITE_CONFIG_LOOKASIDE - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside</a></li><li>SQLITE_CONFIG_MALLOC - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc</a></li><li>SQLITE_CONFIG_MEMDB_MAXSIZE - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize</a></li><li>SQLITE_CONFIG_MEMSTATUS - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus</a></li><li>SQLITE_CONFIG_MMAP_SIZE - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize</a></li><li>SQLITE_CONFIG_MULTITHREAD - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread</a></li><li>SQLITE_CONFIG_MUTEX - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">c3ref/c_config_covering_index_scan.html#sqliteconfigmutex</a></li><li>SQLITE_CONFIG_PAGECACHE - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache</a></li><li>SQLITE_CONFIG_PCACHE - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache">c3ref/c_config_covering_index_scan.html#sqliteconfigpcache</a></li><li>SQLITE_CONFIG_PCACHE2 - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2</a></li><li>SQLITE_CONFIG_PCACHE_HDRSZ - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz</a></li><li>SQLITE_CONFIG_PMASZ - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz</a></li><li>SQLITE_CONFIG_SCRATCH - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigscratch">c3ref/c_config_covering_index_scan.html#sqliteconfigscratch</a></li><li>SQLITE_CONFIG_SERIALIZED - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">c3ref/c_config_covering_index_scan.html#sqliteconfigserialized</a></li><li>SQLITE_CONFIG_SINGLETHREAD - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread</a></li><li>SQLITE_CONFIG_SMALL_MALLOC - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsmallmalloc">c3ref/c_config_covering_index_scan.html#sqliteconfigsmallmalloc</a></li><li>SQLITE_CONFIG_SORTERREF_SIZE - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsorterrefsize">c3ref/c_config_covering_index_scan.html#sqliteconfigsorterrefsize</a></li><li>SQLITE_CONFIG_SQLLOG - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsqllog">c3ref/c_config_covering_index_scan.html#sqliteconfigsqllog</a></li><li>SQLITE_CONFIG_STMTJRNL_SPILL - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill</a></li><li>SQLITE_CONFIG_URI - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">c3ref/c_config_covering_index_scan.html#sqliteconfiguri</a></li><li>SQLITE_CONFIG_WIN32_HEAPSIZE - <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigwin32heapsize">c3ref/c_config_covering_index_scan.html#sqliteconfigwin32heapsize</a></li><li>SQLITE_CONSTRAINT - <a href="rescode.html#constraint">rescode.html#constraint</a></li><li>SQLITE_CONSTRAINT_CHECK - <a href="rescode.html#constraint_check">rescode.html#constraint_check</a></li><li>SQLITE_CONSTRAINT_COMMITHOOK - <a href="rescode.html#constraint_commithook">rescode.html#constraint_commithook</a></li><li>SQLITE_CONSTRAINT_DATATYPE - <a href="rescode.html#constraint_datatype">rescode.html#constraint_datatype</a></li><li>SQLITE_CONSTRAINT_FOREIGNKEY - <a href="rescode.html#constraint_foreignkey">rescode.html#constraint_foreignkey</a></li><li>SQLITE_CONSTRAINT_FUNCTION - <a href="rescode.html#constraint_function">rescode.html#constraint_function</a></li><li>SQLITE_CONSTRAINT_NOTNULL - <a href="rescode.html#constraint_notnull">rescode.html#constraint_notnull</a></li><li>SQLITE_CONSTRAINT_PINNED - <a href="rescode.html#constraint_pinned">rescode.html#constraint_pinned</a></li><li>SQLITE_CONSTRAINT_PRIMARYKEY - <a href="rescode.html#constraint_primarykey">rescode.html#constraint_primarykey</a></li><li>SQLITE_CONSTRAINT_ROWID - <a href="rescode.html#constraint_rowid">rescode.html#constraint_rowid</a></li><li>SQLITE_CONSTRAINT_TRIGGER - <a href="rescode.html#constraint_trigger">rescode.html#constraint_trigger</a></li><li>SQLITE_CONSTRAINT_UNIQUE - <a href="rescode.html#constraint_unique">rescode.html#constraint_unique</a></li><li>SQLITE_CONSTRAINT_VTAB - <a href="rescode.html#constraint_vtab">rescode.html#constraint_vtab</a></li><li>SQLITE_COPY - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_CORRUPT - <a href="rescode.html#corrupt">rescode.html#corrupt</a></li><li>SQLITE_CORRUPT_INDEX - <a href="rescode.html#corrupt_index">rescode.html#corrupt_index</a></li><li>SQLITE_CORRUPT_SEQUENCE - <a href="rescode.html#corrupt_sequence">rescode.html#corrupt_sequence</a></li><li>SQLITE_CORRUPT_VTAB - <a href="rescode.html#corrupt_vtab">rescode.html#corrupt_vtab</a></li><li>SQLITE_CREATE_INDEX - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_CREATE_TABLE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_CREATE_TEMP_INDEX - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_CREATE_TEMP_TABLE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_CREATE_TEMP_TRIGGER - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_CREATE_TEMP_VIEW - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_CREATE_TRIGGER - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_CREATE_VIEW - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_CREATE_VTABLE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DBCONFIG_DEFENSIVE - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive</a></li><li>SQLITE_DBCONFIG_DQS_DDL - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl</a></li><li>SQLITE_DBCONFIG_DQS_DML - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml</a></li><li>SQLITE_DBCONFIG_ENABLE_FKEY - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefkey">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefkey</a></li><li>SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer</a></li><li>SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension</a></li><li>SQLITE_DBCONFIG_ENABLE_QPSG - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg</a></li><li>SQLITE_DBCONFIG_ENABLE_TRIGGER - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger</a></li><li>SQLITE_DBCONFIG_ENABLE_VIEW - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview</a></li><li>SQLITE_DBCONFIG_LEGACY_ALTER_TABLE - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable</a></li><li>SQLITE_DBCONFIG_LEGACY_FILE_FORMAT - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat</a></li><li>SQLITE_DBCONFIG_LOOKASIDE - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside</a></li><li>SQLITE_DBCONFIG_MAINDBNAME - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname">c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname</a></li><li>SQLITE_DBCONFIG_MAX - <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a></li><li>SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose">c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose</a></li><li>SQLITE_DBCONFIG_RESET_DATABASE - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase">c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase</a></li><li>SQLITE_DBCONFIG_TRIGGER_EQP - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtriggereqp">c3ref/c_dbconfig_defensive.html#sqlitedbconfigtriggereqp</a></li><li>SQLITE_DBCONFIG_TRUSTED_SCHEMA - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema</a></li><li>SQLITE_DBCONFIG_WRITABLE_SCHEMA - <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema">c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema</a></li><li>sqlite_dbpage - <a href="dbpage.html">dbpage.html</a></li><li>SQLITE_DBPAGE virtual table - <a href="dbpage.html">dbpage.html</a></li><li>SQLITE_DBSTATUS options - <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a></li><li>SQLITE_DBSTATUS_CACHE_HIT - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit">c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit</a></li><li>SQLITE_DBSTATUS_CACHE_MISS - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss">c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss</a></li><li>SQLITE_DBSTATUS_CACHE_SPILL - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill">c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill</a></li><li>SQLITE_DBSTATUS_CACHE_USED - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused">c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused</a></li><li>SQLITE_DBSTATUS_CACHE_USED_SHARED - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared">c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared</a></li><li>SQLITE_DBSTATUS_CACHE_WRITE - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite">c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite</a></li><li>SQLITE_DBSTATUS_DEFERRED_FKS - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks</a></li><li>SQLITE_DBSTATUS_LOOKASIDE_HIT - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit">c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit</a></li><li>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull">c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull</a></li><li>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize">c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize</a></li><li>SQLITE_DBSTATUS_LOOKASIDE_USED - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasideused">c3ref/c_dbstatus_options.html#sqlitedbstatuslookasideused</a></li><li>SQLITE_DBSTATUS_MAX - <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a></li><li>SQLITE_DBSTATUS_SCHEMA_USED - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused">c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused</a></li><li>SQLITE_DBSTATUS_STMT_USED - <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused">c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused</a></li><li>SQLITE_DEBUG - <a href="compile.html#debug">compile.html#debug</a></li><li>SQLITE_DEFAULT_AUTOMATIC_INDEX - <a href="compile.html#default_automatic_index">compile.html#default_automatic_index</a></li><li>SQLITE_DEFAULT_AUTOVACUUM - <a href="compile.html#default_autovacuum">compile.html#default_autovacuum</a></li><li>SQLITE_DEFAULT_CACHE_SIZE - <a href="compile.html#default_cache_size">compile.html#default_cache_size</a></li><li>SQLITE_DEFAULT_FILE_FORMAT - <a href="compile.html#default_file_format">compile.html#default_file_format</a></li><li>SQLITE_DEFAULT_FILE_PERMISSIONS - <a href="compile.html#default_file_permissions">compile.html#default_file_permissions</a></li><li>SQLITE_DEFAULT_FOREIGN_KEYS - <a href="compile.html#default_foreign_keys">compile.html#default_foreign_keys</a></li><li>SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT - <a href="compile.html#default_journal_size_limit">compile.html#default_journal_size_limit</a></li><li>SQLITE_DEFAULT_LOCKING_MODE - <a href="compile.html#default_locking_mode">compile.html#default_locking_mode</a></li><li>SQLITE_DEFAULT_LOOKASIDE - <a href="compile.html#default_lookaside">compile.html#default_lookaside</a></li><li>SQLITE_DEFAULT_MEMSTATUS - <a href="compile.html#default_memstatus">compile.html#default_memstatus</a></li><li>SQLITE_DEFAULT_MMAP_SIZE - <a href="compile.html#default_mmap_size">compile.html#default_mmap_size</a></li><li>SQLITE_DEFAULT_PAGE_SIZE - <a href="compile.html#default_page_size">compile.html#default_page_size</a></li><li>SQLITE_DEFAULT_PCACHE_INITSZ - <a href="compile.html#default_pcache_initsz">compile.html#default_pcache_initsz</a></li><li>SQLITE_DEFAULT_SYNCHRONOUS - <a href="compile.html#default_synchronous">compile.html#default_synchronous</a></li><li>SQLITE_DEFAULT_WAL_AUTOCHECKPOINT - <a href="compile.html#default_wal_autocheckpoint">compile.html#default_wal_autocheckpoint</a></li><li>SQLITE_DEFAULT_WAL_SYNCHRONOUS - <a href="compile.html#default_wal_synchronous">compile.html#default_wal_synchronous</a></li><li>SQLITE_DEFAULT_WORKER_THREADS - <a href="compile.html#default_worker_threads">compile.html#default_worker_threads</a></li><li>SQLITE_DELETE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DENY - <a href="c3ref/c_deny.html">c3ref/c_deny.html</a></li><li>SQLITE_DESERIALIZE_FREEONCLOSE - <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a></li><li>SQLITE_DESERIALIZE_READONLY - <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a></li><li>SQLITE_DESERIALIZE_RESIZEABLE - <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a></li><li>SQLITE_DETACH - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DETERMINISTIC - <a href="c3ref/c_deterministic.html#sqlitedeterministic">c3ref/c_deterministic.html#sqlitedeterministic</a></li><li>SQLITE_DIRECT_OVERFLOW_READ - <a href="compile.html#direct_overflow_read">compile.html#direct_overflow_read</a></li><li>SQLITE_DIRECTONLY - <a href="c3ref/c_deterministic.html#sqlitedirectonly">c3ref/c_deterministic.html#sqlitedirectonly</a></li><li>SQLITE_DISABLE_DIRSYNC - <a href="compile.html#disable_dirsync">compile.html#disable_dirsync</a></li><li>SQLITE_DISABLE_FTS3_UNICODE - <a href="compile.html#disable_fts3_unicode">compile.html#disable_fts3_unicode</a></li><li>SQLITE_DISABLE_FTS4_DEFERRED - <a href="compile.html#disable_fts4_deferred">compile.html#disable_fts4_deferred</a></li><li>SQLITE_DISABLE_INTRINSIC - <a href="compile.html#disable_intrinsic">compile.html#disable_intrinsic</a></li><li>SQLITE_DISABLE_LFS - <a href="compile.html#disable_lfs">compile.html#disable_lfs</a></li><li>SQLITE_DONE - <a href="rescode.html#done">rescode.html#done</a></li><li>SQLITE_DQS - <a href="compile.html#dqs">compile.html#dqs</a></li><li>SQLITE_DROP_INDEX - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DROP_TABLE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DROP_TEMP_INDEX - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DROP_TEMP_TABLE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DROP_TEMP_TRIGGER - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DROP_TEMP_VIEW - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DROP_TRIGGER - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DROP_VIEW - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_DROP_VTABLE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_EMPTY - <a href="rescode.html#empty">rescode.html#empty</a></li><li>SQLITE_ENABLE_8_3_NAMES - <a href="compile.html#enable_8_3_names">compile.html#enable_8_3_names</a></li><li>SQLITE_ENABLE_API_ARMOR - <a href="compile.html#enable_api_armor">compile.html#enable_api_armor</a></li><li>SQLITE_ENABLE_ATOMIC_WRITE - <a href="compile.html#enable_atomic_write">compile.html#enable_atomic_write</a></li><li>SQLITE_ENABLE_BATCH_ATOMIC_WRITE - <a href="compile.html#enable_batch_atomic_write">compile.html#enable_batch_atomic_write</a></li><li>SQLITE_ENABLE_BYTECODE_VTAB - <a href="compile.html#enable_bytecode_vtab">compile.html#enable_bytecode_vtab</a></li><li>SQLITE_ENABLE_COLUMN_METADATA - <a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a></li><li>SQLITE_ENABLE_DBPAGE_VTAB - <a href="compile.html#enable_dbpage_vtab">compile.html#enable_dbpage_vtab</a></li><li>SQLITE_ENABLE_DBSTAT_VTAB - <a href="compile.html#enable_dbstat_vtab">compile.html#enable_dbstat_vtab</a></li><li>SQLITE_ENABLE_DESERIALIZE - <a href="compile.html#enable_deserialize">compile.html#enable_deserialize</a></li><li>SQLITE_ENABLE_EXPLAIN_COMMENTS - <a href="compile.html#enable_explain_comments">compile.html#enable_explain_comments</a></li><li>SQLITE_ENABLE_FTS3 - <a href="compile.html#enable_fts3">compile.html#enable_fts3</a></li><li>SQLITE_ENABLE_FTS3_PARENTHESIS - <a href="compile.html#enable_fts3_parenthesis">compile.html#enable_fts3_parenthesis</a></li><li>SQLITE_ENABLE_FTS3_TOKENIZER - <a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</a></li><li>SQLITE_ENABLE_FTS4 - <a href="compile.html#enable_fts4">compile.html#enable_fts4</a></li><li>SQLITE_ENABLE_FTS5 - <a href="compile.html#enable_fts5">compile.html#enable_fts5</a></li><li>SQLITE_ENABLE_GEOPOLY - <a href="compile.html#enable_geopoly">compile.html#enable_geopoly</a></li><li>SQLITE_ENABLE_ICU - <a href="compile.html#enable_icu">compile.html#enable_icu</a></li><li>SQLITE_ENABLE_IOTRACE - <a href="compile.html#enable_iotrace">compile.html#enable_iotrace</a></li><li>SQLITE_ENABLE_JSON1 - <a href="compile.html#enable_json1">compile.html#enable_json1</a></li><li>SQLITE_ENABLE_LOCKING_STYLE - <a href="compile.html#enable_locking_style">compile.html#enable_locking_style</a></li><li>SQLITE_ENABLE_MATH_FUNCTIONS - <a href="compile.html#enable_math_functions">compile.html#enable_math_functions</a></li><li>SQLITE_ENABLE_MEMORY_MANAGEMENT - <a href="compile.html#enable_memory_management">compile.html#enable_memory_management</a></li><li>SQLITE_ENABLE_MEMSYS3 - <a href="compile.html#enable_memsys3">compile.html#enable_memsys3</a></li><li>SQLITE_ENABLE_MEMSYS5 - <a href="compile.html#enable_memsys5">compile.html#enable_memsys5</a></li><li>SQLITE_ENABLE_NORMALIZE - <a href="compile.html#enable_normalize">compile.html#enable_normalize</a></li><li>SQLITE_ENABLE_NULL_TRIM - <a href="compile.html#enable_null_trim">compile.html#enable_null_trim</a></li><li>SQLITE_ENABLE_OFFSET_SQL_FUNC - <a href="compile.html#enable_offset_sql_func">compile.html#enable_offset_sql_func</a></li><li>SQLITE_ENABLE_PREUPDATE_HOOK - <a href="compile.html#enable_preupdate_hook">compile.html#enable_preupdate_hook</a></li><li>SQLITE_ENABLE_QPSG - <a href="compile.html#enable_qpsg">compile.html#enable_qpsg</a></li><li>SQLITE_ENABLE_RBU - <a href="compile.html#enable_rbu">compile.html#enable_rbu</a></li><li>SQLITE_ENABLE_RTREE - <a href="compile.html#enable_rtree">compile.html#enable_rtree</a></li><li>SQLITE_ENABLE_SESSION - <a href="compile.html#enable_session">compile.html#enable_session</a></li><li>SQLITE_ENABLE_SNAPSHOT - <a href="compile.html#enable_snapshot">compile.html#enable_snapshot</a></li><li>SQLITE_ENABLE_SORTER_REFERENCES - <a href="compile.html#enable_sorter_references">compile.html#enable_sorter_references</a></li><li>SQLITE_ENABLE_SQLLOG - <a href="compile.html#enable_sqllog">compile.html#enable_sqllog</a></li><li>SQLITE_ENABLE_STAT2 - <a href="compile.html#enable_stat2">compile.html#enable_stat2</a></li><li>SQLITE_ENABLE_STAT3 - <a href="compile.html#enable_stat3">compile.html#enable_stat3</a></li><li>SQLITE_ENABLE_STAT4 - <a href="compile.html#enable_stat4">compile.html#enable_stat4</a></li><li>SQLITE_ENABLE_STMT_SCANSTATUS - <a href="compile.html#enable_stmt_scanstatus">compile.html#enable_stmt_scanstatus</a></li><li>SQLITE_ENABLE_STMTVTAB - <a href="compile.html#enable_stmtvtab">compile.html#enable_stmtvtab</a></li><li>SQLITE_ENABLE_TREE_EXPLAIN - <a href="compile.html#enable_tree_explain">compile.html#enable_tree_explain</a></li><li>SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION - <a href="compile.html#enable_unknown_sql_function">compile.html#enable_unknown_sql_function</a></li><li>SQLITE_ENABLE_UNLOCK_NOTIFY - <a href="compile.html#enable_unlock_notify">compile.html#enable_unlock_notify</a></li><li>SQLITE_ENABLE_UPDATE_DELETE_LIMIT - <a href="compile.html#enable_update_delete_limit">compile.html#enable_update_delete_limit</a></li><li>SQLITE_ERROR - <a href="rescode.html#error">rescode.html#error</a></li><li>SQLITE_ERROR_MISSING_COLLSEQ - <a href="rescode.html#error_missing_collseq">rescode.html#error_missing_collseq</a></li><li>SQLITE_ERROR_RETRY - <a href="rescode.html#error_retry">rescode.html#error_retry</a></li><li>SQLITE_ERROR_SNAPSHOT - <a href="rescode.html#error_snapshot">rescode.html#error_snapshot</a></li><li>SQLITE_EXTERN - <a href="compile.html#extern">compile.html#extern</a></li><li>SQLITE_EXTRA_DURABLE - <a href="compile.html#extra_durable">compile.html#extra_durable</a></li><li>SQLITE_FAIL - <a href="c3ref/c_fail.html">c3ref/c_fail.html</a></li><li>SQLITE_FCNTL_BEGIN_ATOMIC_WRITE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite</a></li><li>SQLITE_FCNTL_BUSYHANDLER - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler</a></li><li>SQLITE_FCNTL_CHUNK_SIZE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize</a></li><li>SQLITE_FCNTL_CKPT_DONE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptdone">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptdone</a></li><li>SQLITE_FCNTL_CKPT_START - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptstart">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptstart</a></li><li>SQLITE_FCNTL_CKSM_FILE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile</a></li><li>SQLITE_FCNTL_COMMIT_ATOMIC_WRITE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite</a></li><li>SQLITE_FCNTL_COMMIT_PHASETWO - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo</a></li><li>SQLITE_FCNTL_DATA_VERSION - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion</a></li><li>SQLITE_FCNTL_EXTERNAL_READER - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlexternalreader">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlexternalreader</a></li><li>SQLITE_FCNTL_FILE_POINTER - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer</a></li><li>SQLITE_FCNTL_GET_LOCKPROXYFILE - <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a></li><li>SQLITE_FCNTL_HAS_MOVED - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlhasmoved">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlhasmoved</a></li><li>SQLITE_FCNTL_JOURNAL_POINTER - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer</a></li><li>SQLITE_FCNTL_LAST_ERRNO - <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a></li><li>SQLITE_FCNTL_LOCK_TIMEOUT - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllocktimeout">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllocktimeout</a></li><li>SQLITE_FCNTL_LOCKSTATE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate</a></li><li>SQLITE_FCNTL_MMAP_SIZE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize</a></li><li>SQLITE_FCNTL_OVERWRITE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite</a></li><li>SQLITE_FCNTL_PDB - <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a></li><li>SQLITE_FCNTL_PERSIST_WAL - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal</a></li><li>SQLITE_FCNTL_POWERSAFE_OVERWRITE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite</a></li><li>SQLITE_FCNTL_PRAGMA - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma</a></li><li>SQLITE_FCNTL_RBU - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrbu">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrbu</a></li><li>SQLITE_FCNTL_RESERVE_BYTES - <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a></li><li>SQLITE_FCNTL_RESET_CACHE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache</a></li><li>SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite</a></li><li>SQLITE_FCNTL_SET_LOCKPROXYFILE - <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a></li><li>SQLITE_FCNTL_SIZE_HINT - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint</a></li><li>SQLITE_FCNTL_SIZE_LIMIT - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit</a></li><li>SQLITE_FCNTL_SYNC - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync</a></li><li>SQLITE_FCNTL_SYNC_OMITTED - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted</a></li><li>SQLITE_FCNTL_TEMPFILENAME - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename</a></li><li>SQLITE_FCNTL_TRACE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace</a></li><li>SQLITE_FCNTL_VFS_POINTER - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer</a></li><li>SQLITE_FCNTL_VFSNAME - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname</a></li><li>SQLITE_FCNTL_WAL_BLOCK - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwalblock">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwalblock</a></li><li>SQLITE_FCNTL_WIN32_AV_RETRY - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry</a></li><li>SQLITE_FCNTL_WIN32_GET_HANDLE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle</a></li><li>SQLITE_FCNTL_WIN32_SET_HANDLE - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32sethandle">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32sethandle</a></li><li>SQLITE_FCNTL_ZIPVFS - <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlzipvfs">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlzipvfs</a></li><li>SQLITE_FLOAT - <a href="c3ref/c_blob.html">c3ref/c_blob.html</a></li><li>SQLITE_FORMAT - <a href="rescode.html#format">rescode.html#format</a></li><li>SQLITE_FTS3_MAX_EXPR_DEPTH - <a href="compile.html#fts3_max_expr_depth">compile.html#fts3_max_expr_depth</a></li><li>SQLITE_FULL - <a href="rescode.html#full">rescode.html#full</a></li><li>SQLITE_FUNCTION - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_HAVE_ISNAN - <a href="compile.html#have_isnan">compile.html#have_isnan</a></li><li>SQLITE_HAVE_ZLIB - <a href="compile.html#have_zlib">compile.html#have_zlib</a></li><li>SQLITE_IGNORE - <a href="c3ref/c_deny.html">c3ref/c_deny.html</a></li><li>SQLITE_INDEX_CONSTRAINT_EQ - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_FUNCTION - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_GE - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_GLOB - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_GT - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_IS - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_ISNOT - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_ISNOTNULL - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_ISNULL - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_LE - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_LIKE - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_LIMIT - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_LT - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_MATCH - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_NE - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_OFFSET - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_CONSTRAINT_REGEXP - <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a></li><li>SQLITE_INDEX_SCAN_UNIQUE - <a href="c3ref/c_index_scan_unique.html">c3ref/c_index_scan_unique.html</a></li><li>SQLITE_INNOCUOUS - <a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a></li><li>SQLITE_INSERT - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>sqlite_int64 - <a href="c3ref/int64.html">c3ref/int64.html</a></li><li>SQLITE_INTEGER - <a href="c3ref/c_blob.html">c3ref/c_blob.html</a></li><li>SQLITE_INTERNAL - <a href="rescode.html#internal">rescode.html#internal</a></li><li>SQLITE_INTERRUPT - <a href="rescode.html#interrupt">rescode.html#interrupt</a></li><li>SQLITE_INTROSPECTION_PRAGMAS - <a href="compile.html#introspection_pragmas">compile.html#introspection_pragmas</a></li><li>SQLITE_IOCAP_ATOMIC - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_ATOMIC1K - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_ATOMIC2K - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_ATOMIC4K - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_ATOMIC8K - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_ATOMIC16K - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_ATOMIC32K - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_ATOMIC64K - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_ATOMIC512 - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_BATCH_ATOMIC - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_IMMUTABLE - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_POWERSAFE_OVERWRITE - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_SAFE_APPEND - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_SEQUENTIAL - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN - <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a></li><li>SQLITE_IOERR - <a href="rescode.html#ioerr">rescode.html#ioerr</a></li><li>SQLITE_IOERR_ACCESS - <a href="rescode.html#ioerr_access">rescode.html#ioerr_access</a></li><li>SQLITE_IOERR_AUTH - <a href="rescode.html#ioerr_auth">rescode.html#ioerr_auth</a></li><li>SQLITE_IOERR_BEGIN_ATOMIC - <a href="rescode.html#ioerr_begin_atomic">rescode.html#ioerr_begin_atomic</a></li><li>SQLITE_IOERR_BLOCKED - <a href="rescode.html#ioerr_blocked">rescode.html#ioerr_blocked</a></li><li>SQLITE_IOERR_CHECKRESERVEDLOCK - <a href="rescode.html#ioerr_checkreservedlock">rescode.html#ioerr_checkreservedlock</a></li><li>SQLITE_IOERR_CLOSE - <a href="rescode.html#ioerr_close">rescode.html#ioerr_close</a></li><li>SQLITE_IOERR_COMMIT_ATOMIC - <a href="rescode.html#ioerr_commit_atomic">rescode.html#ioerr_commit_atomic</a></li><li>SQLITE_IOERR_CONVPATH - <a href="rescode.html#ioerr_convpath">rescode.html#ioerr_convpath</a></li><li>SQLITE_IOERR_CORRUPTFS - <a href="rescode.html#ioerr_corruptfs">rescode.html#ioerr_corruptfs</a></li><li>SQLITE_IOERR_DATA - <a href="rescode.html#ioerr_data">rescode.html#ioerr_data</a></li><li>SQLITE_IOERR_DELETE - <a href="rescode.html#ioerr_delete">rescode.html#ioerr_delete</a></li><li>SQLITE_IOERR_DELETE_NOENT - <a href="rescode.html#ioerr_delete_noent">rescode.html#ioerr_delete_noent</a></li><li>SQLITE_IOERR_DIR_CLOSE - <a href="rescode.html#ioerr_dir_close">rescode.html#ioerr_dir_close</a></li><li>SQLITE_IOERR_DIR_FSYNC - <a href="rescode.html#ioerr_dir_fsync">rescode.html#ioerr_dir_fsync</a></li><li>SQLITE_IOERR_FSTAT - <a href="rescode.html#ioerr_fstat">rescode.html#ioerr_fstat</a></li><li>SQLITE_IOERR_FSYNC - <a href="rescode.html#ioerr_fsync">rescode.html#ioerr_fsync</a></li><li>SQLITE_IOERR_GETTEMPPATH - <a href="rescode.html#ioerr_gettemppath">rescode.html#ioerr_gettemppath</a></li><li>SQLITE_IOERR_LOCK - <a href="rescode.html#ioerr_lock">rescode.html#ioerr_lock</a></li><li>SQLITE_IOERR_MMAP - <a href="rescode.html#ioerr_mmap">rescode.html#ioerr_mmap</a></li><li>SQLITE_IOERR_NOMEM - <a href="rescode.html#ioerr_nomem">rescode.html#ioerr_nomem</a></li><li>SQLITE_IOERR_RDLOCK - <a href="rescode.html#ioerr_rdlock">rescode.html#ioerr_rdlock</a></li><li>SQLITE_IOERR_READ - <a href="rescode.html#ioerr_read">rescode.html#ioerr_read</a></li><li>SQLITE_IOERR_ROLLBACK_ATOMIC - <a href="rescode.html#ioerr_rollback_atomic">rescode.html#ioerr_rollback_atomic</a></li><li>SQLITE_IOERR_SEEK - <a href="rescode.html#ioerr_seek">rescode.html#ioerr_seek</a></li><li>SQLITE_IOERR_SHMLOCK - <a href="rescode.html#ioerr_shmlock">rescode.html#ioerr_shmlock</a></li><li>SQLITE_IOERR_SHMMAP - <a href="rescode.html#ioerr_shmmap">rescode.html#ioerr_shmmap</a></li><li>SQLITE_IOERR_SHMOPEN - <a href="rescode.html#ioerr_shmopen">rescode.html#ioerr_shmopen</a></li><li>SQLITE_IOERR_SHMSIZE - <a href="rescode.html#ioerr_shmsize">rescode.html#ioerr_shmsize</a></li><li>SQLITE_IOERR_SHORT_READ - <a href="rescode.html#ioerr_short_read">rescode.html#ioerr_short_read</a></li><li>SQLITE_IOERR_TRUNCATE - <a href="rescode.html#ioerr_truncate">rescode.html#ioerr_truncate</a></li><li>SQLITE_IOERR_UNLOCK - <a href="rescode.html#ioerr_unlock">rescode.html#ioerr_unlock</a></li><li>SQLITE_IOERR_VNODE - <a href="rescode.html#ioerr_vnode">rescode.html#ioerr_vnode</a></li><li>SQLITE_IOERR_WRITE - <a href="rescode.html#ioerr_write">rescode.html#ioerr_write</a></li><li>SQLITE_LIKE_DOESNT_MATCH_BLOBS - <a href="compile.html#like_doesnt_match_blobs">compile.html#like_doesnt_match_blobs</a></li><li>SQLITE_LIMIT_ATTACHED - <a href="c3ref/c_limit_attached.html#sqlitelimitattached">c3ref/c_limit_attached.html#sqlitelimitattached</a></li><li>SQLITE_LIMIT_COLUMN - <a href="c3ref/c_limit_attached.html#sqlitelimitcolumn">c3ref/c_limit_attached.html#sqlitelimitcolumn</a></li><li>SQLITE_LIMIT_COMPOUND_SELECT - <a href="c3ref/c_limit_attached.html#sqlitelimitcompoundselect">c3ref/c_limit_attached.html#sqlitelimitcompoundselect</a></li><li>SQLITE_LIMIT_EXPR_DEPTH - <a href="c3ref/c_limit_attached.html#sqlitelimitexprdepth">c3ref/c_limit_attached.html#sqlitelimitexprdepth</a></li><li>SQLITE_LIMIT_FUNCTION_ARG - <a href="c3ref/c_limit_attached.html#sqlitelimitfunctionarg">c3ref/c_limit_attached.html#sqlitelimitfunctionarg</a></li><li>SQLITE_LIMIT_LENGTH - <a href="c3ref/c_limit_attached.html#sqlitelimitlength">c3ref/c_limit_attached.html#sqlitelimitlength</a></li><li>SQLITE_LIMIT_LIKE_PATTERN_LENGTH - <a href="c3ref/c_limit_attached.html#sqlitelimitlikepatternlength">c3ref/c_limit_attached.html#sqlitelimitlikepatternlength</a></li><li>SQLITE_LIMIT_SQL_LENGTH - <a href="c3ref/c_limit_attached.html#sqlitelimitsqllength">c3ref/c_limit_attached.html#sqlitelimitsqllength</a></li><li>SQLITE_LIMIT_TRIGGER_DEPTH - <a href="c3ref/c_limit_attached.html#sqlitelimittriggerdepth">c3ref/c_limit_attached.html#sqlitelimittriggerdepth</a></li><li>SQLITE_LIMIT_VARIABLE_NUMBER - <a href="c3ref/c_limit_attached.html#sqlitelimitvariablenumber">c3ref/c_limit_attached.html#sqlitelimitvariablenumber</a></li><li>SQLITE_LIMIT_VDBE_OP - <a href="c3ref/c_limit_attached.html#sqlitelimitvdbeop">c3ref/c_limit_attached.html#sqlitelimitvdbeop</a></li><li>SQLITE_LIMIT_WORKER_THREADS - <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">c3ref/c_limit_attached.html#sqlitelimitworkerthreads</a></li><li>SQLITE_LOCK_EXCLUSIVE - <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a></li><li>SQLITE_LOCK_NONE - <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a></li><li>SQLITE_LOCK_PENDING - <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a></li><li>SQLITE_LOCK_RESERVED - <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a></li><li>SQLITE_LOCK_SHARED - <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a></li><li>SQLITE_LOCKED - <a href="rescode.html#locked">rescode.html#locked</a></li><li>SQLITE_LOCKED_SHAREDCACHE - <a href="rescode.html#locked_sharedcache">rescode.html#locked_sharedcache</a></li><li>SQLITE_LOCKED_VTAB - <a href="rescode.html#locked_vtab">rescode.html#locked_vtab</a></li><li>sqlite_master table - <a href="schematab.html">schematab.html</a></li><li>SQLITE_MAX_ALLOCATION_SIZE - <a href="compile.html#max_allocation_size">compile.html#max_allocation_size</a></li><li>SQLITE_MAX_ATTACHED - <a href="limits.html#max_attached">limits.html#max_attached</a></li><li>SQLITE_MAX_COLUMN - <a href="limits.html#max_column">limits.html#max_column</a></li><li>SQLITE_MAX_COMPOUND_SELECT - <a href="limits.html#max_compound_select">limits.html#max_compound_select</a></li><li>SQLITE_MAX_EXPR_DEPTH - <a href="limits.html#max_expr_depth">limits.html#max_expr_depth</a></li><li>SQLITE_MAX_FUNCTION_ARG - <a href="limits.html#max_function_arg">limits.html#max_function_arg</a></li><li>SQLITE_MAX_LENGTH - <a href="limits.html#max_length">limits.html#max_length</a></li><li>SQLITE_MAX_LIKE_PATTERN_LENGTH - <a href="limits.html#max_like_pattern_length">limits.html#max_like_pattern_length</a></li><li>SQLITE_MAX_MEMORY - <a href="compile.html#max_memory">compile.html#max_memory</a></li><li>SQLITE_MAX_MMAP_SIZE - <a href="compile.html#max_mmap_size">compile.html#max_mmap_size</a></li><li>SQLITE_MAX_PAGE_COUNT - <a href="limits.html#max_page_count">limits.html#max_page_count</a></li><li>SQLITE_MAX_SCHEMA_RETRY - <a href="compile.html#max_schema_retry">compile.html#max_schema_retry</a></li><li>SQLITE_MAX_SQL_LENGTH - <a href="limits.html#max_sql_length">limits.html#max_sql_length</a></li><li>SQLITE_MAX_TRIGGER_DEPTH - <a href="limits.html#max_trigger_depth">limits.html#max_trigger_depth</a></li><li>SQLITE_MAX_VARIABLE_NUMBER - <a href="limits.html#max_variable_number">limits.html#max_variable_number</a></li><li>SQLITE_MAX_WORKER_THREADS - <a href="compile.html#max_worker_threads">compile.html#max_worker_threads</a></li><li>SQLITE_MEMDB_DEFAULT_MAXSIZE - <a href="compile.html#memdb_default_maxsize">compile.html#memdb_default_maxsize</a></li><li>SQLITE_MEMDEBUG - <a href="compile.html#memdebug">compile.html#memdebug</a></li><li>sqlite_memstat - <a href="memstat.html">memstat.html</a></li><li>SQLITE_MEMSTAT virtual table - <a href="memstat.html">memstat.html</a></li><li>SQLITE_MINIMUM_FILE_DESCRIPTOR - <a href="compile.html#minimum_file_descriptor">compile.html#minimum_file_descriptor</a></li><li>SQLITE_MISMATCH - <a href="rescode.html#mismatch">rescode.html#mismatch</a></li><li>SQLITE_MISUSE - <a href="rescode.html#misuse">rescode.html#misuse</a></li><li>SQLITE_MUTEX_FAST - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_RECURSIVE - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_APP1 - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_APP2 - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_APP3 - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_LRU - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_LRU2 - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_MAIN - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_MEM - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_MEM2 - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_OPEN - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_PMEM - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_PRNG - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_VFS1 - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_VFS2 - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_MUTEX_STATIC_VFS3 - <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a></li><li>SQLITE_NOLFS - <a href="rescode.html#nolfs">rescode.html#nolfs</a></li><li>SQLITE_NOMEM - <a href="rescode.html#nomem">rescode.html#nomem</a></li><li>SQLITE_NOTADB - <a href="rescode.html#notadb">rescode.html#notadb</a></li><li>SQLITE_NOTFOUND - <a href="rescode.html#notfound">rescode.html#notfound</a></li><li>SQLITE_NOTICE - <a href="rescode.html#notice">rescode.html#notice</a></li><li>SQLITE_NOTICE_RECOVER_ROLLBACK - <a href="rescode.html#notice_recover_rollback">rescode.html#notice_recover_rollback</a></li><li>SQLITE_NOTICE_RECOVER_WAL - <a href="rescode.html#notice_recover_wal">rescode.html#notice_recover_wal</a></li><li>SQLITE_NULL - <a href="c3ref/c_blob.html">c3ref/c_blob.html</a></li><li>sqlite_offset - <a href="lang_corefunc.html#sqlite_offset">lang_corefunc.html#sqlite_offset</a></li><li>sqlite_offset SQL function - <a href="lang_corefunc.html#sqlite_offset">lang_corefunc.html#sqlite_offset</a></li><li>SQLITE_OK - <a href="rescode.html#ok">rescode.html#ok</a></li><li>SQLITE_OK_LOAD_PERMANENTLY - <a href="rescode.html#ok_load_permanently">rescode.html#ok_load_permanently</a></li><li>SQLITE_OK_SYMLINK - <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a></li><li>SQLITE_OMIT_ALTERTABLE - <a href="compile.html#omit_altertable">compile.html#omit_altertable</a></li><li>SQLITE_OMIT_ANALYZE - <a href="compile.html#omit_analyze">compile.html#omit_analyze</a></li><li>SQLITE_OMIT_ATTACH - <a href="compile.html#omit_attach">compile.html#omit_attach</a></li><li>SQLITE_OMIT_AUTHORIZATION - <a href="compile.html#omit_authorization">compile.html#omit_authorization</a></li><li>SQLITE_OMIT_AUTOINCREMENT - <a href="compile.html#omit_autoincrement">compile.html#omit_autoincrement</a></li><li>SQLITE_OMIT_AUTOINIT - <a href="compile.html#omit_autoinit">compile.html#omit_autoinit</a></li><li>SQLITE_OMIT_AUTOMATIC_INDEX - <a href="compile.html#omit_automatic_index">compile.html#omit_automatic_index</a></li><li>SQLITE_OMIT_AUTORESET - <a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a></li><li>SQLITE_OMIT_AUTOVACUUM - <a href="compile.html#omit_autovacuum">compile.html#omit_autovacuum</a></li><li>SQLITE_OMIT_BETWEEN_OPTIMIZATION - <a href="compile.html#omit_between_optimization">compile.html#omit_between_optimization</a></li><li>SQLITE_OMIT_BLOB_LITERAL - <a href="compile.html#omit_blob_literal">compile.html#omit_blob_literal</a></li><li>SQLITE_OMIT_BTREECOUNT - <a href="compile.html#omit_btreecount">compile.html#omit_btreecount</a></li><li>SQLITE_OMIT_BUILTIN_TEST - <a href="compile.html#omit_builtin_test">compile.html#omit_builtin_test</a></li><li>SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA - <a href="compile.html#omit_case_sensitive_like_pragma">compile.html#omit_case_sensitive_like_pragma</a></li><li>SQLITE_OMIT_CAST - <a href="compile.html#omit_cast">compile.html#omit_cast</a></li><li>SQLITE_OMIT_CHECK - <a href="compile.html#omit_check">compile.html#omit_check</a></li><li>SQLITE_OMIT_COMPILEOPTION_DIAGS - <a href="compile.html#omit_compileoption_diags">compile.html#omit_compileoption_diags</a></li><li>SQLITE_OMIT_COMPLETE - <a href="compile.html#omit_complete">compile.html#omit_complete</a></li><li>SQLITE_OMIT_COMPOUND_SELECT - <a href="compile.html#omit_compound_select">compile.html#omit_compound_select</a></li><li>SQLITE_OMIT_CTE - <a href="compile.html#omit_cte">compile.html#omit_cte</a></li><li>SQLITE_OMIT_DATETIME_FUNCS - <a href="compile.html#omit_datetime_funcs">compile.html#omit_datetime_funcs</a></li><li>SQLITE_OMIT_DECLTYPE - <a href="compile.html#omit_decltype">compile.html#omit_decltype</a></li><li>SQLITE_OMIT_DEPRECATED - <a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a></li><li>SQLITE_OMIT_DESERIALIZE - <a href="compile.html#omit_deserialize">compile.html#omit_deserialize</a></li><li>SQLITE_OMIT_DISKIO - <a href="compile.html#omit_diskio">compile.html#omit_diskio</a></li><li>SQLITE_OMIT_EXPLAIN - <a href="compile.html#omit_explain">compile.html#omit_explain</a></li><li>SQLITE_OMIT_FLAG_PRAGMAS - <a href="compile.html#omit_flag_pragmas">compile.html#omit_flag_pragmas</a></li><li>SQLITE_OMIT_FLOATING_POINT - <a href="compile.html#omit_floating_point">compile.html#omit_floating_point</a></li><li>SQLITE_OMIT_FOREIGN_KEY - <a href="compile.html#omit_foreign_key">compile.html#omit_foreign_key</a></li><li>SQLITE_OMIT_GENERATED_COLUMNS - <a href="compile.html#omit_generated_columns">compile.html#omit_generated_columns</a></li><li>SQLITE_OMIT_GET_TABLE - <a href="compile.html#omit_get_table">compile.html#omit_get_table</a></li><li>SQLITE_OMIT_HEX_INTEGER - <a href="compile.html#omit_hex_integer">compile.html#omit_hex_integer</a></li><li>SQLITE_OMIT_INCRBLOB - <a href="compile.html#omit_incrblob">compile.html#omit_incrblob</a></li><li>SQLITE_OMIT_INTEGRITY_CHECK - <a href="compile.html#omit_integrity_check">compile.html#omit_integrity_check</a></li><li>SQLITE_OMIT_INTROSPECTION_PRAGMAS - <a href="compile.html#omit_introspection_pragmas">compile.html#omit_introspection_pragmas</a></li><li>SQLITE_OMIT_JSON - <a href="compile.html#omit_json">compile.html#omit_json</a></li><li>SQLITE_OMIT_LIKE_OPTIMIZATION - <a href="compile.html#omit_like_optimization">compile.html#omit_like_optimization</a></li><li>SQLITE_OMIT_LOAD_EXTENSION - <a href="compile.html#omit_load_extension">compile.html#omit_load_extension</a></li><li>SQLITE_OMIT_LOCALTIME - <a href="compile.html#omit_localtime">compile.html#omit_localtime</a></li><li>SQLITE_OMIT_LOOKASIDE - <a href="compile.html#omit_lookaside">compile.html#omit_lookaside</a></li><li>SQLITE_OMIT_MEMORYDB - <a href="compile.html#omit_memorydb">compile.html#omit_memorydb</a></li><li>SQLITE_OMIT_OR_OPTIMIZATION - <a href="compile.html#omit_or_optimization">compile.html#omit_or_optimization</a></li><li>SQLITE_OMIT_PAGER_PRAGMAS - <a href="compile.html#omit_pager_pragmas">compile.html#omit_pager_pragmas</a></li><li>SQLITE_OMIT_PRAGMA - <a href="compile.html#omit_pragma">compile.html#omit_pragma</a></li><li>SQLITE_OMIT_PROGRESS_CALLBACK - <a href="compile.html#omit_progress_callback">compile.html#omit_progress_callback</a></li><li>SQLITE_OMIT_QUICKBALANCE - <a href="compile.html#omit_quickbalance">compile.html#omit_quickbalance</a></li><li>SQLITE_OMIT_REINDEX - <a href="compile.html#omit_reindex">compile.html#omit_reindex</a></li><li>SQLITE_OMIT_SCHEMA_PRAGMAS - <a href="compile.html#omit_schema_pragmas">compile.html#omit_schema_pragmas</a></li><li>SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS - <a href="compile.html#omit_schema_version_pragmas">compile.html#omit_schema_version_pragmas</a></li><li>SQLITE_OMIT_SHARED_CACHE - <a href="compile.html#omit_shared_cache">compile.html#omit_shared_cache</a></li><li>SQLITE_OMIT_SUBQUERY - <a href="compile.html#omit_subquery">compile.html#omit_subquery</a></li><li>SQLITE_OMIT_TCL_VARIABLE - <a href="compile.html#omit_tcl_variable">compile.html#omit_tcl_variable</a></li><li>SQLITE_OMIT_TEMPDB - <a href="compile.html#omit_tempdb">compile.html#omit_tempdb</a></li><li>SQLITE_OMIT_TRACE - <a href="compile.html#omit_trace">compile.html#omit_trace</a></li><li>SQLITE_OMIT_TRIGGER - <a href="compile.html#omit_trigger">compile.html#omit_trigger</a></li><li>SQLITE_OMIT_TRUNCATE_OPTIMIZATION - <a href="compile.html#omit_truncate_optimization">compile.html#omit_truncate_optimization</a></li><li>SQLITE_OMIT_UTF16 - <a href="compile.html#omit_utf16">compile.html#omit_utf16</a></li><li>SQLITE_OMIT_VACUUM - <a href="compile.html#omit_vacuum">compile.html#omit_vacuum</a></li><li>SQLITE_OMIT_VIEW - <a href="compile.html#omit_view">compile.html#omit_view</a></li><li>SQLITE_OMIT_VIRTUALTABLE - <a href="compile.html#omit_virtualtable">compile.html#omit_virtualtable</a></li><li>SQLITE_OMIT_WAL - <a href="compile.html#omit_wal">compile.html#omit_wal</a></li><li>SQLITE_OMIT_WINDOWFUNC - <a href="compile.html#omit_windowfunc">compile.html#omit_windowfunc</a></li><li>SQLITE_OMIT_WSD - <a href="compile.html#omit_wsd">compile.html#omit_wsd</a></li><li>SQLITE_OMIT_XFER_OPT - <a href="compile.html#omit_xfer_opt">compile.html#omit_xfer_opt</a></li><li>SQLITE_OPEN_AUTOPROXY - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_CREATE - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_DELETEONCLOSE - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_EXCLUSIVE - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_EXRESCODE - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_FULLMUTEX - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_MAIN_DB - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_MAIN_JOURNAL - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_MEMORY - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_NOFOLLOW - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_NOMUTEX - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_PRIVATECACHE - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_READONLY - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_READWRITE - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_SHAREDCACHE - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_SUBJOURNAL - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_SUPER_JOURNAL - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_TEMP_DB - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_TEMP_JOURNAL - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_TRANSIENT_DB - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_URI - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OPEN_WAL - <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a></li><li>SQLITE_OS_OTHER - <a href="compile.html#os_other">compile.html#os_other</a></li><li>SQLITE_PERM - <a href="rescode.html#perm">rescode.html#perm</a></li><li>SQLITE_POWERSAFE_OVERWRITE - <a href="compile.html#powersafe_overwrite">compile.html#powersafe_overwrite</a></li><li>SQLITE_PRAGMA - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_PREPARE_NO_VTAB - <a href="c3ref/c_prepare_normalize.html#sqlitepreparenovtab">c3ref/c_prepare_normalize.html#sqlitepreparenovtab</a></li><li>SQLITE_PREPARE_NORMALIZE - <a href="c3ref/c_prepare_normalize.html#sqlitepreparenormalize">c3ref/c_prepare_normalize.html#sqlitepreparenormalize</a></li><li>SQLITE_PREPARE_PERSISTENT - <a href="c3ref/c_prepare_normalize.html#sqlitepreparepersistent">c3ref/c_prepare_normalize.html#sqlitepreparepersistent</a></li><li>SQLITE_PRINTF_PRECISION_LIMIT - <a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a></li><li>SQLITE_PROTOCOL - <a href="rescode.html#protocol">rescode.html#protocol</a></li><li>SQLITE_QUERY_PLANNER_LIMIT - <a href="compile.html#query_planner_limit">compile.html#query_planner_limit</a></li><li>SQLITE_QUERY_PLANNER_LIMIT_INCR - <a href="compile.html#query_planner_limit_incr">compile.html#query_planner_limit_incr</a></li><li>SQLITE_RANGE - <a href="rescode.html#range">rescode.html#range</a></li><li>SQLITE_READ - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_READONLY - <a href="rescode.html#readonly">rescode.html#readonly</a></li><li>SQLITE_READONLY_CANTINIT - <a href="rescode.html#readonly_cantinit">rescode.html#readonly_cantinit</a></li><li>SQLITE_READONLY_CANTLOCK - <a href="rescode.html#readonly_cantlock">rescode.html#readonly_cantlock</a></li><li>SQLITE_READONLY_DBMOVED - <a href="rescode.html#readonly_dbmoved">rescode.html#readonly_dbmoved</a></li><li>SQLITE_READONLY_DIRECTORY - <a href="rescode.html#readonly_directory">rescode.html#readonly_directory</a></li><li>SQLITE_READONLY_RECOVERY - <a href="rescode.html#readonly_recovery">rescode.html#readonly_recovery</a></li><li>SQLITE_READONLY_ROLLBACK - <a href="rescode.html#readonly_rollback">rescode.html#readonly_rollback</a></li><li>SQLITE_RECURSIVE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_REINDEX - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_REPLACE - <a href="c3ref/c_fail.html">c3ref/c_fail.html</a></li><li>SQLITE_REVERSE_UNORDERED_SELECTS - <a href="compile.html#reverse_unordered_selects">compile.html#reverse_unordered_selects</a></li><li>SQLITE_ROLLBACK - <a href="c3ref/c_fail.html">c3ref/c_fail.html</a></li><li>SQLITE_ROW - <a href="rescode.html#row">rescode.html#row</a></li><li>SQLITE_RTREE_INT_ONLY - <a href="compile.html#rtree_int_only">compile.html#rtree_int_only</a></li><li>SQLITE_SAVEPOINT - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_SCANSTAT_EST - <a href="c3ref/c_scanstat_est.html#sqlitescanstatest">c3ref/c_scanstat_est.html#sqlitescanstatest</a></li><li>SQLITE_SCANSTAT_EXPLAIN - <a href="c3ref/c_scanstat_est.html#sqlitescanstatexplain">c3ref/c_scanstat_est.html#sqlitescanstatexplain</a></li><li>SQLITE_SCANSTAT_NAME - <a href="c3ref/c_scanstat_est.html#sqlitescanstatname">c3ref/c_scanstat_est.html#sqlitescanstatname</a></li><li>SQLITE_SCANSTAT_NLOOP - <a href="c3ref/c_scanstat_est.html#sqlitescanstatnloop">c3ref/c_scanstat_est.html#sqlitescanstatnloop</a></li><li>SQLITE_SCANSTAT_NVISIT - <a href="c3ref/c_scanstat_est.html#sqlitescanstatnvisit">c3ref/c_scanstat_est.html#sqlitescanstatnvisit</a></li><li>SQLITE_SCANSTAT_SELECTID - <a href="c3ref/c_scanstat_est.html#sqlitescanstatselectid">c3ref/c_scanstat_est.html#sqlitescanstatselectid</a></li><li>SQLITE_SCHEMA - <a href="rescode.html#schema">rescode.html#schema</a></li><li>sqlite_schema - <a href="schematab.html">schematab.html</a></li><li>sqlite_schema table - <a href="schematab.html">schematab.html</a></li><li>SQLITE_SECURE_DELETE - <a href="compile.html#secure_delete">compile.html#secure_delete</a></li><li>SQLITE_SELECT - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>sqlite_sequence - <a href="fileformat2.html#seqtab">fileformat2.html#seqtab</a></li><li>SQLITE_SERIALIZE_NOCOPY - <a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a></li><li>SQLITE_SESSION_CONFIG_STRMSIZE - <a href="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a></li><li>SQLITE_SHM_EXCLUSIVE - <a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a></li><li>SQLITE_SHM_LOCK - <a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a></li><li>SQLITE_SHM_NLOCK - <a href="c3ref/c_shm_nlock.html">c3ref/c_shm_nlock.html</a></li><li>SQLITE_SHM_SHARED - <a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a></li><li>SQLITE_SHM_UNLOCK - <a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a></li><li>SQLITE_SORTER_PMASZ - <a href="compile.html#sorter_pmasz">compile.html#sorter_pmasz</a></li><li>SQLITE_SOUNDEX - <a href="compile.html#soundex">compile.html#soundex</a></li><li>SQLITE_SOURCE_ID - <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a></li><li>sqlite_source_id - <a href="lang_corefunc.html#sqlite_source_id">lang_corefunc.html#sqlite_source_id</a></li><li>sqlite_source_id SQL function - <a href="lang_corefunc.html#sqlite_source_id">lang_corefunc.html#sqlite_source_id</a></li><li>SQLITE_STAT1 - <a href="fileformat2.html#stat1tab">fileformat2.html#stat1tab</a></li><li>sqlite_stat1 - <a href="fileformat2.html#stat1tab">fileformat2.html#stat1tab</a></li><li>sqlite_stat2 - <a href="fileformat2.html#stat2tab">fileformat2.html#stat2tab</a></li><li>SQLITE_STAT3 - <a href="fileformat2.html#stat3tab">fileformat2.html#stat3tab</a></li><li>sqlite_stat3 - <a href="fileformat2.html#stat3tab">fileformat2.html#stat3tab</a></li><li>SQLITE_STAT4 - <a href="fileformat2.html#stat4tab">fileformat2.html#stat4tab</a></li><li>sqlite_stat4 - <a href="fileformat2.html#stat4tab">fileformat2.html#stat4tab</a></li><li>SQLITE_STATIC - <a href="c3ref/c_static.html">c3ref/c_static.html</a></li><li>SQLITE_STATUS_MALLOC_COUNT - <a href="c3ref/c_status_malloc_count.html#sqlitestatusmalloccount">c3ref/c_status_malloc_count.html#sqlitestatusmalloccount</a></li><li>SQLITE_STATUS_MALLOC_SIZE - <a href="c3ref/c_status_malloc_count.html#sqlitestatusmallocsize">c3ref/c_status_malloc_count.html#sqlitestatusmallocsize</a></li><li>SQLITE_STATUS_MEMORY_USED - <a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">c3ref/c_status_malloc_count.html#sqlitestatusmemoryused</a></li><li>SQLITE_STATUS_PAGECACHE_OVERFLOW - <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow">c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow</a></li><li>SQLITE_STATUS_PAGECACHE_SIZE - <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize</a></li><li>SQLITE_STATUS_PAGECACHE_USED - <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheused">c3ref/c_status_malloc_count.html#sqlitestatuspagecacheused</a></li><li>SQLITE_STATUS_PARSER_STACK - <a href="c3ref/c_status_malloc_count.html#sqlitestatusparserstack">c3ref/c_status_malloc_count.html#sqlitestatusparserstack</a></li><li>SQLITE_STATUS_SCRATCH_OVERFLOW - <a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchoverflow">c3ref/c_status_malloc_count.html#sqlitestatusscratchoverflow</a></li><li>SQLITE_STATUS_SCRATCH_SIZE - <a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchsize">c3ref/c_status_malloc_count.html#sqlitestatusscratchsize</a></li><li>SQLITE_STATUS_SCRATCH_USED - <a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchused">c3ref/c_status_malloc_count.html#sqlitestatusscratchused</a></li><li>SQLITE_STDCALL - <a href="compile.html#stdcall">compile.html#stdcall</a></li><li>sqlite_stmt - <a href="stmt.html">stmt.html</a></li><li>SQLITE_STMT virtual table - <a href="stmt.html">stmt.html</a></li><li>SQLITE_STMTJRNL_SPILL - <a href="compile.html#stmtjrnl_spill">compile.html#stmtjrnl_spill</a></li><li>SQLITE_STMTSTATUS counter - <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a></li><li>SQLITE_STMTSTATUS counters - <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a></li><li>SQLITE_STMTSTATUS_AUTOINDEX - <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusautoindex">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusautoindex</a></li><li>SQLITE_STMTSTATUS_FILTER HIT - <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfilterhit">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfilterhit</a></li><li>SQLITE_STMTSTATUS_FILTER_HIT - <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a></li><li>SQLITE_STMTSTATUS_FILTER_MISS - <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfiltermiss">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfiltermiss</a></li><li>SQLITE_STMTSTATUS_FULLSCAN_STEP - <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfullscanstep">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfullscanstep</a></li><li>SQLITE_STMTSTATUS_MEMUSED - <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused</a></li><li>SQLITE_STMTSTATUS_REPREPARE - <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare</a></li><li>SQLITE_STMTSTATUS_RUN - <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun</a></li><li>SQLITE_STMTSTATUS_SORT - <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatussort">c3ref/c_stmtstatus_counter.html#sqlitestmtstatussort</a></li><li>SQLITE_STMTSTATUS_VM_STEP - <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep</a></li><li>SQLITE_SUBTYPE - <a href="c3ref/c_deterministic.html#sqlitesubtype">c3ref/c_deterministic.html#sqlitesubtype</a></li><li>SQLITE_SYNC_DATAONLY - <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a></li><li>SQLITE_SYNC_FULL - <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a></li><li>SQLITE_SYNC_NORMAL - <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a></li><li>SQLITE_SYSAPI - <a href="compile.html#sysapi">compile.html#sysapi</a></li><li>SQLITE_TCLAPI - <a href="compile.html#tclapi">compile.html#tclapi</a></li><li>sqlite_temp_schema - <a href="schematab.html">schematab.html</a></li><li>SQLITE_TEMP_STORE - <a href="compile.html#temp_store">compile.html#temp_store</a></li><li>SQLITE_TESTCTRL_ALWAYS - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_ASSERT - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_BITVEC_TEST - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_BYTEORDER - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_EXPLAIN_STMT - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_FAULT_INSTALL - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_FIRST - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_IMPOSTER - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_INTERNAL_FUNCTIONS - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_ISINIT - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_ISKEYWORD - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_LAST - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_LOCALTIME_FAULT - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_LOGEST - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_NEVER_CORRUPT - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_OPTIMIZATIONS - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_PARSER_COVERAGE - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_PENDING_BYTE - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_PRNG_RESET - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_PRNG_RESTORE - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_PRNG_SAVE - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_PRNG_SEED - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_RESERVE - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_RESULT_INTREAL - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_SCRATCHMALLOC - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_SEEK_COUNT - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_SORTER_MMAP - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_TRACEFLAGS - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_TUNE - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TESTCTRL_VDBE_COVERAGE - <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a></li><li>SQLITE_TEXT - <a href="c3ref/c_blob.html">c3ref/c_blob.html</a></li><li>SQLITE_THREADSAFE - <a href="compile.html#threadsafe">compile.html#threadsafe</a></li><li>SQLITE_TOOBIG - <a href="rescode.html#toobig">rescode.html#toobig</a></li><li>SQLITE_TRACE - <a href="c3ref/c_trace.html">c3ref/c_trace.html</a></li><li>SQLITE_TRACE_CLOSE - <a href="c3ref/c_trace.html#sqlitetraceclose">c3ref/c_trace.html#sqlitetraceclose</a></li><li>SQLITE_TRACE_PROFILE - <a href="c3ref/c_trace.html#sqlitetraceprofile">c3ref/c_trace.html#sqlitetraceprofile</a></li><li>SQLITE_TRACE_ROW - <a href="c3ref/c_trace.html#sqlitetracerow">c3ref/c_trace.html#sqlitetracerow</a></li><li>SQLITE_TRACE_SIZE_LIMIT - <a href="compile.html#trace_size_limit">compile.html#trace_size_limit</a></li><li>SQLITE_TRACE_STMT - <a href="c3ref/c_trace.html#sqlitetracestmt">c3ref/c_trace.html#sqlitetracestmt</a></li><li>SQLITE_TRANSACTION - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_TRANSIENT - <a href="c3ref/c_static.html">c3ref/c_static.html</a></li><li>SQLITE_TRUSTED_SCHEMA - <a href="compile.html#trusted_schema">compile.html#trusted_schema</a></li><li>SQLITE_TXN_NONE - <a href="c3ref/c_txn_none.html#sqlitetxnnone">c3ref/c_txn_none.html#sqlitetxnnone</a></li><li>SQLITE_TXN_READ - <a href="c3ref/c_txn_none.html#sqlitetxnread">c3ref/c_txn_none.html#sqlitetxnread</a></li><li>SQLITE_TXN_WRITE - <a href="c3ref/c_txn_none.html#sqlitetxnwrite">c3ref/c_txn_none.html#sqlitetxnwrite</a></li><li>sqlite_uint64 - <a href="c3ref/int64.html">c3ref/int64.html</a></li><li>SQLITE_UNTESTABLE - <a href="compile.html#untestable">compile.html#untestable</a></li><li>SQLITE_UPDATE - <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a></li><li>SQLITE_USE_ALLOCA - <a href="compile.html#use_alloca">compile.html#use_alloca</a></li><li>SQLITE_USE_FCNTL_TRACE - <a href="compile.html#use_fcntl_trace">compile.html#use_fcntl_trace</a></li><li>SQLITE_USE_URI - <a href="compile.html#use_uri">compile.html#use_uri</a></li><li>SQLITE_UTF8 - <a href="c3ref/c_any.html">c3ref/c_any.html</a></li><li>SQLITE_UTF16 - <a href="c3ref/c_any.html">c3ref/c_any.html</a></li><li>SQLITE_UTF16_ALIGNED - <a href="c3ref/c_any.html">c3ref/c_any.html</a></li><li>SQLITE_UTF16BE - <a href="c3ref/c_any.html">c3ref/c_any.html</a></li><li>SQLITE_UTF16LE - <a href="c3ref/c_any.html">c3ref/c_any.html</a></li><li>SQLITE_VERSION - <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a></li><li>sqlite_version - <a href="lang_corefunc.html#sqlite_version">lang_corefunc.html#sqlite_version</a></li><li>sqlite_version SQL function - <a href="lang_corefunc.html#sqlite_version">lang_corefunc.html#sqlite_version</a></li><li>SQLITE_VERSION_NUMBER - <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a></li><li>SQLITE_VTAB_CONSTRAINT_SUPPORT - <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport</a></li><li>SQLITE_VTAB_DIRECTONLY - <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly</a></li><li>SQLITE_VTAB_INNOCUOUS - <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous</a></li><li>SQLITE_WARNING - <a href="rescode.html#warning">rescode.html#warning</a></li><li>SQLITE_WARNING_AUTOINDEX - <a href="rescode.html#warning_autoindex">rescode.html#warning_autoindex</a></li><li>SQLITE_WIN32_DATA_DIRECTORY_TYPE - <a href="c3ref/c_win32_data_directory_type.html">c3ref/c_win32_data_directory_type.html</a></li><li>SQLITE_WIN32_HEAP_CREATE - <a href="compile.html#win32_heap_create">compile.html#win32_heap_create</a></li><li>SQLITE_WIN32_MALLOC - <a href="compile.html#win32_malloc">compile.html#win32_malloc</a></li><li>SQLITE_WIN32_MALLOC_VALIDATE - <a href="compile.html#win32_malloc_validate">compile.html#win32_malloc_validate</a></li><li>SQLITE_WIN32_TEMP_DIRECTORY_TYPE - <a href="c3ref/c_win32_data_directory_type.html">c3ref/c_win32_data_directory_type.html</a></li><li>SQLITE_ZERO_MALLOC - <a href="compile.html#zero_malloc">compile.html#zero_malloc</a></li><li>sqrt - <a href="lang_mathfunc.html#sqrt">lang_mathfunc.html#sqrt</a></li><li>sqrt SQL function - <a href="lang_mathfunc.html#sqrt">lang_mathfunc.html#sqrt</a></li><li>stale file descriptor - <a href="howtocorrupt.html#stalefd">howtocorrupt.html#stalefd</a></li><li>standard query parameters - <a href="uri.html#coreqp">uri.html#coreqp</a></li><li>statement journal - <a href="tempfiles.html#stmtjrnl">tempfiles.html#stmtjrnl</a></li><li>Statement journals - <a href="tempfiles.html#stmtjrnl">tempfiles.html#stmtjrnl</a></li><li>statement journals - <a href="tempfiles.html#stmtjrnl">tempfiles.html#stmtjrnl</a></li><li>stats - <a href="pragma.html#pragma_stats">pragma.html#pragma_stats</a></li><li>stats pragma - <a href="pragma.html#pragma_stats">pragma.html#pragma_stats</a></li><li>status method - <a href="tclsqlite.html#status">tclsqlite.html#status</a></li><li>status parameters - <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a></li><li>storage class - <a href="datatype3.html#storageclasses">datatype3.html#storageclasses</a></li><li>strategies - <a href="queryplanner.html#searching">queryplanner.html#searching</a></li><li>strftime SQL function - <a href="lang_datefunc.html">lang_datefunc.html</a></li><li>STRICT - <a href="stricttables.html">stricttables.html</a></li><li>STRICT table - <a href="stricttables.html">stricttables.html</a></li><li>STRICT tables - <a href="stricttables.html">stricttables.html</a></li><li>strict type checking - <a href="stricttables.html">stricttables.html</a></li><li>subprograms - <a href="opcode.html#subprog">opcode.html#subprog</a></li><li>Subqueries - <a href="lang_expr.html#subq">lang_expr.html#subq</a></li><li>subquery co-routines - <a href="optoverview.html#coroutines">optoverview.html#coroutines</a></li><li>substr - <a href="lang_corefunc.html#substr">lang_corefunc.html#substr</a></li><li>substr SQL function - <a href="lang_corefunc.html#substr">lang_corefunc.html#substr</a></li><li>sum - <a href="lang_aggfunc.html#sumunc">lang_aggfunc.html#sumunc</a></li><li>sum aggregate function - <a href="lang_aggfunc.html#sumunc">lang_aggfunc.html#sumunc</a></li><li>sumFunc - <a href="lang_aggfunc.html#sumunc">lang_aggfunc.html#sumunc</a></li><li>super-journal - <a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a></li><li>swarmvtab - <a href="swarmvtab.html#overview">swarmvtab.html#overview</a></li><li>swarmvtab context - <a href="swarmvtab.html#component_table_context_values">swarmvtab.html#component_table_context_values</a></li><li>synchronous - <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a></li><li>synchronous pragma - <a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a></li><li>syntax diagrams - <a href="syntaxdiagrams.html">syntaxdiagrams.html</a></li><li>table b-tree - <a href="fileformat2.html#btypes">fileformat2.html#btypes</a></li><li>table data format - <a href="fileformat2.html##sqltab">fileformat2.html##sqltab</a></li><li>table-constraint - <a href="syntax/table-constraint.html">syntax/table-constraint.html</a></li><li>table-constraint syntax diagram - <a href="syntax/table-constraint.html">syntax/table-constraint.html</a></li><li>table-options - <a href="syntax/table-options.html">syntax/table-options.html</a></li><li>table-options syntax diagram - <a href="syntax/table-options.html">syntax/table-options.html</a></li><li>table-or-subquery - <a href="syntax/table-or-subquery.html">syntax/table-or-subquery.html</a></li><li>table-or-subquery syntax diagram - <a href="syntax/table-or-subquery.html">syntax/table-or-subquery.html</a></li><li>table-valued function - <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</a></li><li>table-valued functions - <a href="vtab.html#tabfunc2">vtab.html#tabfunc2</a></li><li>table-valued functions in the FROM clause - <a href="lang_select.html#tabfunc1">lang_select.html#tabfunc1</a></li><li>table_info - <a href="pragma.html#pragma_table_info">pragma.html#pragma_table_info</a></li><li>table_info pragma - <a href="pragma.html#pragma_table_info">pragma.html#pragma_table_info</a></li><li>table_list - <a href="pragma.html#pragma_table_list">pragma.html#pragma_table_list</a></li><li>table_list pragma - <a href="pragma.html#pragma_table_list">pragma.html#pragma_table_list</a></li><li>table_xinfo - <a href="pragma.html#pragma_table_xinfo">pragma.html#pragma_table_xinfo</a></li><li>table_xinfo pragma - <a href="pragma.html#pragma_table_xinfo">pragma.html#pragma_table_xinfo</a></li><li>tables_used virtual table - <a href="bytecodevtab.html">bytecodevtab.html</a></li><li>tan - <a href="lang_mathfunc.html#tan">lang_mathfunc.html#tan</a></li><li>tan SQL function - <a href="lang_mathfunc.html#tan">lang_mathfunc.html#tan</a></li><li>tanh - <a href="lang_mathfunc.html#tanh">lang_mathfunc.html#tanh</a></li><li>tanh SQL function - <a href="lang_mathfunc.html#tanh">lang_mathfunc.html#tanh</a></li><li>Tcl extension - <a href="tclsqlite.html">tclsqlite.html</a></li><li>TCL Interface - <a href="tclsqlite.html">tclsqlite.html</a></li><li>TCL interface authorizer method - <a href="tclsqlite.html#authorizer">tclsqlite.html#authorizer</a></li><li>TCL interface backup method - <a href="tclsqlite.html#backup">tclsqlite.html#backup</a></li><li>TCL interface bind_fallback method - <a href="tclsqlite.html#bind_fallback">tclsqlite.html#bind_fallback</a></li><li>TCL interface busy method - <a href="tclsqlite.html#busy">tclsqlite.html#busy</a></li><li>TCL interface cache method - <a href="tclsqlite.html#cache">tclsqlite.html#cache</a></li><li>TCL interface changes method - <a href="tclsqlite.html#changes">tclsqlite.html#changes</a></li><li>TCL interface close method - <a href="tclsqlite.html#close">tclsqlite.html#close</a></li><li>TCL interface collate method - <a href="tclsqlite.html#collate">tclsqlite.html#collate</a></li><li>TCL interface collation_needed method - <a href="tclsqlite.html#collation_needed">tclsqlite.html#collation_needed</a></li><li>TCL interface commit_hook method - <a href="tclsqlite.html#commit_hook">tclsqlite.html#commit_hook</a></li><li>TCL interface complete method - <a href="tclsqlite.html#complete">tclsqlite.html#complete</a></li><li>TCL interface config method - <a href="tclsqlite.html#config">tclsqlite.html#config</a></li><li>TCL interface copy method - <a href="tclsqlite.html#copy">tclsqlite.html#copy</a></li><li>TCL interface deserialize method - <a href="tclsqlite.html#deserialize">tclsqlite.html#deserialize</a></li><li>TCL interface enable_load_extension method - <a href="tclsqlite.html#enable_load_extension">tclsqlite.html#enable_load_extension</a></li><li>TCL interface errorcode method - <a href="tclsqlite.html#errorcode">tclsqlite.html#errorcode</a></li><li>TCL interface eval method - <a href="tclsqlite.html#eval">tclsqlite.html#eval</a></li><li>TCL interface exists method - <a href="tclsqlite.html#exists">tclsqlite.html#exists</a></li><li>TCL interface function method - <a href="tclsqlite.html#function">tclsqlite.html#function</a></li><li>TCL interface incrblob method - <a href="tclsqlite.html#incrblob">tclsqlite.html#incrblob</a></li><li>TCL interface interrupt method - <a href="tclsqlite.html#interrupt">tclsqlite.html#interrupt</a></li><li>TCL interface last_insert_rowid method - <a href="tclsqlite.html#last_insert_rowid">tclsqlite.html#last_insert_rowid</a></li><li>TCL interface nullvalue method - <a href="tclsqlite.html#nullvalue">tclsqlite.html#nullvalue</a></li><li>TCL interface onecolumn method - <a href="tclsqlite.html#onecolumn">tclsqlite.html#onecolumn</a></li><li>TCL interface profile method - <a href="tclsqlite.html#profile">tclsqlite.html#profile</a></li><li>TCL interface progress method - <a href="tclsqlite.html#progress">tclsqlite.html#progress</a></li><li>TCL interface restore method - <a href="tclsqlite.html#restore">tclsqlite.html#restore</a></li><li>TCL interface rollback_hook method - <a href="tclsqlite.html#rollback_hook">tclsqlite.html#rollback_hook</a></li><li>TCL interface serialize method - <a href="tclsqlite.html#serialize">tclsqlite.html#serialize</a></li><li>TCL interface status method - <a href="tclsqlite.html#status">tclsqlite.html#status</a></li><li>TCL interface timeout method - <a href="tclsqlite.html#timeout">tclsqlite.html#timeout</a></li><li>TCL interface total_changes method - <a href="tclsqlite.html#total_changes">tclsqlite.html#total_changes</a></li><li>TCL interface trace method - <a href="tclsqlite.html#trace">tclsqlite.html#trace</a></li><li>TCL interface trace_v2 method - <a href="tclsqlite.html#trace_v2">tclsqlite.html#trace_v2</a></li><li>TCL interface transaction method - <a href="tclsqlite.html#transaction">tclsqlite.html#transaction</a></li><li>TCL interface unlock_notify method - <a href="tclsqlite.html#unlock_notify">tclsqlite.html#unlock_notify</a></li><li>TCL interface update_hook method - <a href="tclsqlite.html#update_hook">tclsqlite.html#update_hook</a></li><li>TCL interface version method - <a href="tclsqlite.html#version">tclsqlite.html#version</a></li><li>TCL interface wal_hook method - <a href="tclsqlite.html#wal_hook">tclsqlite.html#wal_hook</a></li><li>TCL test suite - <a href="testing.html#tcl">testing.html#tcl</a></li><li>TCL variable substitution - <a href="tclsqlite.html#varsubst">tclsqlite.html#varsubst</a></li><li>TEA tarball - <a href="download.html">download.html</a></li><li>TEMP triggers on non-TEMP tables - <a href="lang_createtrigger.html#temptrig">lang_createtrigger.html#temptrig</a></li><li>temp_store - <a href="pragma.html#pragma_temp_store">pragma.html#pragma_temp_store</a></li><li>temp_store pragma - <a href="pragma.html#pragma_temp_store">pragma.html#pragma_temp_store</a></li><li>temp_store_directory - <a href="pragma.html#pragma_temp_store_directory">pragma.html#pragma_temp_store_directory</a></li><li>temp_store_directory pragma - <a href="pragma.html#pragma_temp_store_directory">pragma.html#pragma_temp_store_directory</a></li><li>temporary databases - <a href="inmemorydb.html#temp_db">inmemorydb.html#temp_db</a></li><li>temporary directory search algorithm - <a href="tempfiles.html#tempdir">tempfiles.html#tempdir</a></li><li>temporary disk files - <a href="tempfiles.html">tempfiles.html</a></li><li>temporary tables - <a href="inmemorydb.html#temp_db">inmemorydb.html#temp_db</a></li><li>tempstore - <a href="tempfiles.html#tempstore">tempfiles.html#tempstore</a></li><li>test coverage - <a href="testing.html#coverage">testing.html#coverage</a></li><li>test harness - <a href="testing.html#harnesses">testing.html#harnesses</a></li><li>test suite - <a href="testing.html">testing.html</a></li><li>testcase macros - <a href="testing.html#testcase">testing.html#testcase</a></li><li>tested - <a href="testing.html">testing.html</a></li><li>testing - <a href="testing.html">testing.html</a></li><li>text encoding - <a href="fileformat2.html#enc">fileformat2.html#enc</a></li><li>TH3 - <a href="th3.html">th3.html</a></li><li>the - and - operators - <a href="json1.html#jptr">json1.html#jptr</a></li><li>the - operator - <a href="json1.html#jptr">json1.html#jptr</a></li><li>the .fullschema dot-command - <a href="cli.html#fullschema">cli.html#fullschema</a></li><li>the amalgamation - <a href="amalgamation.html">amalgamation.html</a></li><li>the ext3 barrier problem - <a href="lockingv3.html#ext3-barrier-problem">lockingv3.html#ext3-barrier-problem</a></li><li>The Fossil NGQP Upgrade Case Study - <a href="queryplanner-ng.html#fossilcasestudy">queryplanner-ng.html#fossilcasestudy</a></li><li>the json1 extension - <a href="json1.html">json1.html</a></li><li>the SQLITE_DBPAGE extension - <a href="dbpage.html">dbpage.html</a></li><li>the SQLITE_MEMSTAT extension - <a href="memstat.html">memstat.html</a></li><li>the SQLITE_STMT extension - <a href="stmt.html">stmt.html</a></li><li>The Use Of assert In SQLite - <a href="assert.html">assert.html</a></li><li>the xCachesize page cache method - <a href="c3ref/pcache_methods2.html#thexcachesizepagecachemethod">c3ref/pcache_methods2.html#thexcachesizepagecachemethod</a></li><li>the xCreate page cache methods - <a href="c3ref/pcache_methods2.html#thexcreatepagecachemethods">c3ref/pcache_methods2.html#thexcreatepagecachemethods</a></li><li>the xDestroy page cache method - <a href="c3ref/pcache_methods2.html#thexdestroypagecachemethod">c3ref/pcache_methods2.html#thexdestroypagecachemethod</a></li><li>the xFetch page cache methods - <a href="c3ref/pcache_methods2.html#thexfetchpagecachemethods">c3ref/pcache_methods2.html#thexfetchpagecachemethods</a></li><li>the xInit page cache method - <a href="c3ref/pcache_methods2.html#thexinitpagecachemethod">c3ref/pcache_methods2.html#thexinitpagecachemethod</a></li><li>the xPagecount page cache methods - <a href="c3ref/pcache_methods2.html#thexpagecountpagecachemethods">c3ref/pcache_methods2.html#thexpagecountpagecachemethods</a></li><li>the xRekey page cache methods - <a href="c3ref/pcache_methods2.html#thexrekeypagecachemethods">c3ref/pcache_methods2.html#thexrekeypagecachemethods</a></li><li>the xShrink page cache method - <a href="c3ref/pcache_methods2.html#thexshrinkpagecachemethod">c3ref/pcache_methods2.html#thexshrinkpagecachemethod</a></li><li>the xShutdown page cache method - <a href="c3ref/pcache_methods2.html#thexshutdownpagecachemethod">c3ref/pcache_methods2.html#thexshutdownpagecachemethod</a></li><li>the xUnpin page cache method - <a href="c3ref/pcache_methods2.html#thexunpinpagecachemethod">c3ref/pcache_methods2.html#thexunpinpagecachemethod</a></li><li>Things That Can Go Wrong - <a href="atomiccommit.html#sect_9_0">atomiccommit.html#sect_9_0</a></li><li>threading mode - <a href="threadsafe.html">threadsafe.html</a></li><li>threads - <a href="pragma.html#pragma_threads">pragma.html#pragma_threads</a></li><li>threads pragma - <a href="pragma.html#pragma_threads">pragma.html#pragma_threads</a></li><li>three test harnesses - <a href="testing.html#harnesses">testing.html#harnesses</a></li><li>time SQL function - <a href="lang_datefunc.html">lang_datefunc.html</a></li><li>timeout method - <a href="tclsqlite.html#timeout">tclsqlite.html#timeout</a></li><li>tokenizer - <a href="fts3.html#tokenizer">fts3.html#tokenizer</a></li><li>torn page - <a href="psow.html#tornpage">psow.html#tornpage</a></li><li>total - <a href="lang_aggfunc.html#sumunc">lang_aggfunc.html#sumunc</a></li><li>total aggregate function - <a href="lang_aggfunc.html#sumunc">lang_aggfunc.html#sumunc</a></li><li>total_changes - <a href="lang_corefunc.html#total_changes">lang_corefunc.html#total_changes</a></li><li>total_changes method - <a href="tclsqlite.html#total_changes">tclsqlite.html#total_changes</a></li><li>total_changes SQL function - <a href="lang_corefunc.html#total_changes">lang_corefunc.html#total_changes</a></li><li>trace method - <a href="tclsqlite.html#trace">tclsqlite.html#trace</a></li><li>trace_v2 method - <a href="tclsqlite.html#trace_v2">tclsqlite.html#trace_v2</a></li><li>transaction - <a href="lang_transaction.html">lang_transaction.html</a></li><li>transaction method - <a href="tclsqlite.html#transaction">tclsqlite.html#transaction</a></li><li>transaction state - <a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a></li><li>transactional - <a href="transactional.html">transactional.html</a></li><li>treats the CROSS JOIN operator specially - <a href="lang_select.html#crossjoin">lang_select.html#crossjoin</a></li><li>trigger - <a href="lang_createtrigger.html">lang_createtrigger.html</a></li><li>triggers - <a href="lang_createtrigger.html">lang_createtrigger.html</a></li><li>trigram indexes - <a href="fts5.html#trigramidx">fts5.html#trigramidx</a></li><li>trigram tokenizer - <a href="fts5.html#trigramidx">fts5.html#trigramidx</a></li><li>trim - <a href="lang_corefunc.html#trim">lang_corefunc.html#trim</a></li><li>trim SQL function - <a href="lang_corefunc.html#trim">lang_corefunc.html#trim</a></li><li>trunc - <a href="lang_mathfunc.html#trunc">lang_mathfunc.html#trunc</a></li><li>trunc SQL function - <a href="lang_mathfunc.html#trunc">lang_mathfunc.html#trunc</a></li><li>truncate optimization - <a href="lang_delete.html#truncateopt">lang_delete.html#truncateopt</a></li><li>trusted_schema - <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a></li><li>trusted_schema pragma - <a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a></li><li>type affinity - <a href="datatype3.html#affinity">datatype3.html#affinity</a></li><li>type-name - <a href="syntax/type-name.html">syntax/type-name.html</a></li><li>type-name syntax diagram - <a href="syntax/type-name.html">syntax/type-name.html</a></li><li>typeof - <a href="lang_corefunc.html#typeof">lang_corefunc.html#typeof</a></li><li>typeof SQL function - <a href="lang_corefunc.html#typeof">lang_corefunc.html#typeof</a></li><li>UINT - <a href="uintcseq.html">uintcseq.html</a></li><li>UINT collating sequence - <a href="uintcseq.html">uintcseq.html</a></li><li>undefined BEFORE trigger behavior - <a href="lang_createtrigger.html#undef_before">lang_createtrigger.html#undef_before</a></li><li>undo/redo - <a href="undoredo.html">undoredo.html</a></li><li>undoredo - <a href="undoredo.html">undoredo.html</a></li><li>unicode - <a href="lang_corefunc.html#unicode">lang_corefunc.html#unicode</a></li><li>unicode SQL function - <a href="lang_corefunc.html#unicode">lang_corefunc.html#unicode</a></li><li>unicode61 - <a href="fts3.html#unicode61">fts3.html#unicode61</a></li><li>Uniform Resource Identifier - <a href="uri.html">uri.html</a></li><li>unindexed - <a href="fts5.html#the_unindexed_column_option">fts5.html#the_unindexed_column_option</a></li><li>UNION virtual table - <a href="unionvtab.html">unionvtab.html</a></li><li>union-vtab - <a href="unionvtab.html">unionvtab.html</a></li><li>unionvtab - <a href="unionvtab.html">unionvtab.html</a></li><li>UNIQUE - <a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a></li><li>UNIQUE constraint - <a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a></li><li>unique constraint - <a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a></li><li>UNIQUE constraints - <a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a></li><li>unique index - <a href="lang_createindex.html#uniqueidx">lang_createindex.html#uniqueidx</a></li><li>unixepoch function - <a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a></li><li>unlikely - <a href="lang_corefunc.html#unlikely">lang_corefunc.html#unlikely</a></li><li>unlikely SQL function - <a href="lang_corefunc.html#unlikely">lang_corefunc.html#unlikely</a></li><li>unlink corruption - <a href="howtocorrupt.html#unlink">howtocorrupt.html#unlink</a></li><li>unlinked database files - <a href="howtocorrupt.html#unlink">howtocorrupt.html#unlink</a></li><li>unlock_notify method - <a href="tclsqlite.html#unlock_notify">tclsqlite.html#unlock_notify</a></li><li>unprotected sqlite3_value - <a href="c3ref/value.html">c3ref/value.html</a></li><li>untrusted database files - <a href="security.html#baddb">security.html#baddb</a></li><li>UPDATE - <a href="lang_update.html">lang_update.html</a></li><li>UPDATE FROM - <a href="lang_update.html#upfrom">lang_update.html#upfrom</a></li><li>UPDATE trigger - <a href="lang_createtrigger.html">lang_createtrigger.html</a></li><li>update-stmt - <a href="syntax/update-stmt.html">syntax/update-stmt.html</a></li><li>update-stmt syntax diagram - <a href="syntax/update-stmt.html">syntax/update-stmt.html</a></li><li>update-stmt-limited - <a href="syntax/update-stmt-limited.html">syntax/update-stmt-limited.html</a></li><li>update-stmt-limited syntax diagram - <a href="syntax/update-stmt-limited.html">syntax/update-stmt-limited.html</a></li><li>update_hook method - <a href="tclsqlite.html#update_hook">tclsqlite.html#update_hook</a></li><li>UPDATEs - <a href="lang_update.html">lang_update.html</a></li><li>upluscontrol - <a href="optoverview.html#uplus">optoverview.html#uplus</a></li><li>upper - <a href="lang_corefunc.html#upper">lang_corefunc.html#upper</a></li><li>upper SQL function - <a href="lang_corefunc.html#upper">lang_corefunc.html#upper</a></li><li>UPSERT - <a href="lang_upsert.html">lang_upsert.html</a></li><li>upsert - <a href="lang_upsert.html">lang_upsert.html</a></li><li>upsert clause - <a href="lang_upsert.html">lang_upsert.html</a></li><li>UPSERT parsing ambiguity - <a href="lang_upsert.html#parseambig">lang_upsert.html#parseambig</a></li><li>upsert-clause - <a href="syntax/upsert-clause.html">syntax/upsert-clause.html</a></li><li>upsert-clause syntax diagram - <a href="syntax/upsert-clause.html">syntax/upsert-clause.html</a></li><li>URI - <a href="uri.html">uri.html</a></li><li>URI filename - <a href="uri.html">uri.html</a></li><li>URI filename examples - <a href="c3ref/open.html#urifilenameexamples">c3ref/open.html#urifilenameexamples</a></li><li>URI filenames - <a href="uri.html">uri.html</a></li><li>URI filenames in sqlite3_open - <a href="c3ref/open.html#urifilenamesinsqlite3open">c3ref/open.html#urifilenamesinsqlite3open</a></li><li>URI query parameters - <a href="uri.html#coreqp">uri.html#coreqp</a></li><li>usable size - <a href="fileformat2.html#usable_size">fileformat2.html#usable_size</a></li><li>use of shared cache mode is discouraged - <a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a></li><li>user-defined window functions - <a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a></li><li>user_version - <a href="pragma.html#pragma_user_version">pragma.html#pragma_user_version</a></li><li>user_version pragma - <a href="pragma.html#pragma_user_version">pragma.html#pragma_user_version</a></li><li>using SQLite for websites - <a href="whentouse.html#website">whentouse.html#website</a></li><li>Using the SQLite Online Backup API - <a href="backup.html">backup.html</a></li><li>Using the SQLite Unlock Notification Feature - <a href="unlock_notify.html">unlock_notify.html</a></li><li>utc modifier - <a href="lang_datefunc.html#localtime">lang_datefunc.html#localtime</a></li><li>VACUUM - <a href="lang_vacuum.html">lang_vacuum.html</a></li><li>vacuum - <a href="lang_vacuum.html">lang_vacuum.html</a></li><li>VACUUM INTO - <a href="lang_vacuum.html#vacuuminto">lang_vacuum.html#vacuuminto</a></li><li>vacuum-stmt - <a href="syntax/vacuum-stmt.html">syntax/vacuum-stmt.html</a></li><li>vacuum-stmt syntax diagram - <a href="syntax/vacuum-stmt.html">syntax/vacuum-stmt.html</a></li><li>value argument - <a href="json1.html#varg">json1.html#varg</a></li><li>VALUES - <a href="lang_select.html#values">lang_select.html#values</a></li><li>VALUES clause - <a href="lang_select.html#values">lang_select.html#values</a></li><li>variable-length integer - <a href="fileformat2.html#varint">fileformat2.html#varint</a></li><li>varint - <a href="fileformat2.html#varint">fileformat2.html#varint</a></li><li>VDBE - <a href="opcode.html">opcode.html</a></li><li>vdbe_addoptrace - <a href="pragma.html#pragma_vdbe_addoptrace">pragma.html#pragma_vdbe_addoptrace</a></li><li>vdbe_addoptrace pragma - <a href="pragma.html#pragma_vdbe_addoptrace">pragma.html#pragma_vdbe_addoptrace</a></li><li>vdbe_debug - <a href="pragma.html#pragma_vdbe_debug">pragma.html#pragma_vdbe_debug</a></li><li>vdbe_debug pragma - <a href="pragma.html#pragma_vdbe_debug">pragma.html#pragma_vdbe_debug</a></li><li>vdbe_listing - <a href="pragma.html#pragma_vdbe_listing">pragma.html#pragma_vdbe_listing</a></li><li>vdbe_listing pragma - <a href="pragma.html#pragma_vdbe_listing">pragma.html#pragma_vdbe_listing</a></li><li>vdbe_trace - <a href="pragma.html#pragma_vdbe_trace">pragma.html#pragma_vdbe_trace</a></li><li>vdbe_trace pragma - <a href="pragma.html#pragma_vdbe_trace">pragma.html#pragma_vdbe_trace</a></li><li>vectors - <a href="rowvalue.html">rowvalue.html</a></li><li>Version 3.0.0 - <a href="releaselog/3_0_0.html">releaselog/3_0_0.html</a></li><li>version 3.0.0 - <a href="releaselog/3_0_0.html">releaselog/3_0_0.html</a></li><li>Version 3.0.1 - <a href="releaselog/3_0_1.html">releaselog/3_0_1.html</a></li><li>version 3.0.1 - <a href="releaselog/3_0_1.html">releaselog/3_0_1.html</a></li><li>Version 3.0.2 - <a href="releaselog/3_0_2.html">releaselog/3_0_2.html</a></li><li>version 3.0.2 - <a href="releaselog/3_0_2.html">releaselog/3_0_2.html</a></li><li>Version 3.0.3 - <a href="releaselog/3_0_3.html">releaselog/3_0_3.html</a></li><li>version 3.0.3 - <a href="releaselog/3_0_3.html">releaselog/3_0_3.html</a></li><li>Version 3.0.4 - <a href="releaselog/3_0_4.html">releaselog/3_0_4.html</a></li><li>version 3.0.4 - <a href="releaselog/3_0_4.html">releaselog/3_0_4.html</a></li><li>Version 3.0.5 - <a href="releaselog/3_0_5.html">releaselog/3_0_5.html</a></li><li>version 3.0.5 - <a href="releaselog/3_0_5.html">releaselog/3_0_5.html</a></li><li>Version 3.0.6 - <a href="releaselog/3_0_6.html">releaselog/3_0_6.html</a></li><li>version 3.0.6 - <a href="releaselog/3_0_6.html">releaselog/3_0_6.html</a></li><li>Version 3.0.7 - <a href="releaselog/3_0_7.html">releaselog/3_0_7.html</a></li><li>version 3.0.7 - <a href="releaselog/3_0_7.html">releaselog/3_0_7.html</a></li><li>Version 3.0.8 - <a href="releaselog/3_0_8.html">releaselog/3_0_8.html</a></li><li>version 3.0.8 - <a href="releaselog/3_0_8.html">releaselog/3_0_8.html</a></li><li>Version 3.1.0 - <a href="releaselog/3_1_0.html">releaselog/3_1_0.html</a></li><li>version 3.1.0 - <a href="releaselog/3_1_0.html">releaselog/3_1_0.html</a></li><li>Version 3.1.1 - <a href="releaselog/3_1_1.html">releaselog/3_1_1.html</a></li><li>version 3.1.1 - <a href="releaselog/3_1_1.html">releaselog/3_1_1.html</a></li><li>Version 3.1.2 - <a href="releaselog/3_1_2.html">releaselog/3_1_2.html</a></li><li>version 3.1.2 - <a href="releaselog/3_1_2.html">releaselog/3_1_2.html</a></li><li>Version 3.1.3 - <a href="releaselog/3_1_3.html">releaselog/3_1_3.html</a></li><li>version 3.1.3 - <a href="releaselog/3_1_3.html">releaselog/3_1_3.html</a></li><li>Version 3.1.4 - <a href="releaselog/3_1_4.html">releaselog/3_1_4.html</a></li><li>version 3.1.4 - <a href="releaselog/3_1_4.html">releaselog/3_1_4.html</a></li><li>Version 3.1.5 - <a href="releaselog/3_1_5.html">releaselog/3_1_5.html</a></li><li>version 3.1.5 - <a href="releaselog/3_1_5.html">releaselog/3_1_5.html</a></li><li>Version 3.1.6 - <a href="releaselog/3_1_6.html">releaselog/3_1_6.html</a></li><li>version 3.1.6 - <a href="releaselog/3_1_6.html">releaselog/3_1_6.html</a></li><li>Version 3.2.0 - <a href="releaselog/3_2_0.html">releaselog/3_2_0.html</a></li><li>version 3.2.0 - <a href="releaselog/3_2_0.html">releaselog/3_2_0.html</a></li><li>Version 3.2.1 - <a href="releaselog/3_2_1.html">releaselog/3_2_1.html</a></li><li>version 3.2.1 - <a href="releaselog/3_2_1.html">releaselog/3_2_1.html</a></li><li>Version 3.2.2 - <a href="releaselog/3_2_2.html">releaselog/3_2_2.html</a></li><li>version 3.2.2 - <a href="releaselog/3_2_2.html">releaselog/3_2_2.html</a></li><li>Version 3.2.3 - <a href="releaselog/3_2_3.html">releaselog/3_2_3.html</a></li><li>version 3.2.3 - <a href="releaselog/3_2_3.html">releaselog/3_2_3.html</a></li><li>Version 3.2.4 - <a href="releaselog/3_2_4.html">releaselog/3_2_4.html</a></li><li>version 3.2.4 - <a href="releaselog/3_2_4.html">releaselog/3_2_4.html</a></li><li>Version 3.2.5 - <a href="releaselog/3_2_5.html">releaselog/3_2_5.html</a></li><li>version 3.2.5 - <a href="releaselog/3_2_5.html">releaselog/3_2_5.html</a></li><li>Version 3.2.6 - <a href="releaselog/3_2_6.html">releaselog/3_2_6.html</a></li><li>version 3.2.6 - <a href="releaselog/3_2_6.html">releaselog/3_2_6.html</a></li><li>Version 3.2.7 - <a href="releaselog/3_2_7.html">releaselog/3_2_7.html</a></li><li>version 3.2.7 - <a href="releaselog/3_2_7.html">releaselog/3_2_7.html</a></li><li>Version 3.2.8 - <a href="releaselog/3_2_8.html">releaselog/3_2_8.html</a></li><li>version 3.2.8 - <a href="releaselog/3_2_8.html">releaselog/3_2_8.html</a></li><li>Version 3.3.0 - <a href="releaselog/3_3_0.html">releaselog/3_3_0.html</a></li><li>version 3.3.0 - <a href="releaselog/3_3_0.html">releaselog/3_3_0.html</a></li><li>Version 3.3.0.0 - <a href="releaselog/3_3_0.html">releaselog/3_3_0.html</a></li><li>version 3.3.0.0 - <a href="releaselog/3_3_0.html">releaselog/3_3_0.html</a></li><li>Version 3.3.1 - <a href="releaselog/3_3_1.html">releaselog/3_3_1.html</a></li><li>version 3.3.1 - <a href="releaselog/3_3_1.html">releaselog/3_3_1.html</a></li><li>Version 3.3.1.0 - <a href="releaselog/3_3_1.html">releaselog/3_3_1.html</a></li><li>version 3.3.1.0 - <a href="releaselog/3_3_1.html">releaselog/3_3_1.html</a></li><li>Version 3.3.2 - <a href="releaselog/3_3_2.html">releaselog/3_3_2.html</a></li><li>version 3.3.2 - <a href="releaselog/3_3_2.html">releaselog/3_3_2.html</a></li><li>Version 3.3.2.0 - <a href="releaselog/3_3_2.html">releaselog/3_3_2.html</a></li><li>version 3.3.2.0 - <a href="releaselog/3_3_2.html">releaselog/3_3_2.html</a></li><li>Version 3.3.3 - <a href="releaselog/3_3_3.html">releaselog/3_3_3.html</a></li><li>version 3.3.3 - <a href="releaselog/3_3_3.html">releaselog/3_3_3.html</a></li><li>Version 3.3.3.0 - <a href="releaselog/3_3_3.html">releaselog/3_3_3.html</a></li><li>version 3.3.3.0 - <a href="releaselog/3_3_3.html">releaselog/3_3_3.html</a></li><li>Version 3.3.4 - <a href="releaselog/3_3_4.html">releaselog/3_3_4.html</a></li><li>version 3.3.4 - <a href="releaselog/3_3_4.html">releaselog/3_3_4.html</a></li><li>Version 3.3.4.0 - <a href="releaselog/3_3_4.html">releaselog/3_3_4.html</a></li><li>version 3.3.4.0 - <a href="releaselog/3_3_4.html">releaselog/3_3_4.html</a></li><li>Version 3.3.5 - <a href="releaselog/3_3_5.html">releaselog/3_3_5.html</a></li><li>version 3.3.5 - <a href="releaselog/3_3_5.html">releaselog/3_3_5.html</a></li><li>Version 3.3.5.0 - <a href="releaselog/3_3_5.html">releaselog/3_3_5.html</a></li><li>version 3.3.5.0 - <a href="releaselog/3_3_5.html">releaselog/3_3_5.html</a></li><li>Version 3.3.6 - <a href="releaselog/3_3_6.html">releaselog/3_3_6.html</a></li><li>version 3.3.6 - <a href="releaselog/3_3_6.html">releaselog/3_3_6.html</a></li><li>Version 3.3.6.0 - <a href="releaselog/3_3_6.html">releaselog/3_3_6.html</a></li><li>version 3.3.6.0 - <a href="releaselog/3_3_6.html">releaselog/3_3_6.html</a></li><li>Version 3.3.7 - <a href="releaselog/3_3_7.html">releaselog/3_3_7.html</a></li><li>version 3.3.7 - <a href="releaselog/3_3_7.html">releaselog/3_3_7.html</a></li><li>Version 3.3.7.0 - <a href="releaselog/3_3_7.html">releaselog/3_3_7.html</a></li><li>version 3.3.7.0 - <a href="releaselog/3_3_7.html">releaselog/3_3_7.html</a></li><li>Version 3.3.8 - <a href="releaselog/3_3_8.html">releaselog/3_3_8.html</a></li><li>version 3.3.8 - <a href="releaselog/3_3_8.html">releaselog/3_3_8.html</a></li><li>Version 3.3.8.0 - <a href="releaselog/3_3_8.html">releaselog/3_3_8.html</a></li><li>version 3.3.8.0 - <a href="releaselog/3_3_8.html">releaselog/3_3_8.html</a></li><li>Version 3.3.9 - <a href="releaselog/3_3_9.html">releaselog/3_3_9.html</a></li><li>version 3.3.9 - <a href="releaselog/3_3_9.html">releaselog/3_3_9.html</a></li><li>Version 3.3.9.0 - <a href="releaselog/3_3_9.html">releaselog/3_3_9.html</a></li><li>version 3.3.9.0 - <a href="releaselog/3_3_9.html">releaselog/3_3_9.html</a></li><li>Version 3.3.10 - <a href="releaselog/3_3_10.html">releaselog/3_3_10.html</a></li><li>version 3.3.10 - <a href="releaselog/3_3_10.html">releaselog/3_3_10.html</a></li><li>Version 3.3.10.0 - <a href="releaselog/3_3_10.html">releaselog/3_3_10.html</a></li><li>version 3.3.10.0 - <a href="releaselog/3_3_10.html">releaselog/3_3_10.html</a></li><li>Version 3.3.11 - <a href="releaselog/3_3_11.html">releaselog/3_3_11.html</a></li><li>version 3.3.11 - <a href="releaselog/3_3_11.html">releaselog/3_3_11.html</a></li><li>Version 3.3.11.0 - <a href="releaselog/3_3_11.html">releaselog/3_3_11.html</a></li><li>version 3.3.11.0 - <a href="releaselog/3_3_11.html">releaselog/3_3_11.html</a></li><li>Version 3.3.12 - <a href="releaselog/3_3_12.html">releaselog/3_3_12.html</a></li><li>version 3.3.12 - <a href="releaselog/3_3_12.html">releaselog/3_3_12.html</a></li><li>Version 3.3.12.0 - <a href="releaselog/3_3_12.html">releaselog/3_3_12.html</a></li><li>version 3.3.12.0 - <a href="releaselog/3_3_12.html">releaselog/3_3_12.html</a></li><li>Version 3.3.13 - <a href="releaselog/3_3_13.html">releaselog/3_3_13.html</a></li><li>version 3.3.13 - <a href="releaselog/3_3_13.html">releaselog/3_3_13.html</a></li><li>Version 3.3.13.0 - <a href="releaselog/3_3_13.html">releaselog/3_3_13.html</a></li><li>version 3.3.13.0 - <a href="releaselog/3_3_13.html">releaselog/3_3_13.html</a></li><li>Version 3.3.14 - <a href="releaselog/3_3_14.html">releaselog/3_3_14.html</a></li><li>version 3.3.14 - <a href="releaselog/3_3_14.html">releaselog/3_3_14.html</a></li><li>Version 3.3.14.0 - <a href="releaselog/3_3_14.html">releaselog/3_3_14.html</a></li><li>version 3.3.14.0 - <a href="releaselog/3_3_14.html">releaselog/3_3_14.html</a></li><li>Version 3.3.15 - <a href="releaselog/3_3_15.html">releaselog/3_3_15.html</a></li><li>version 3.3.15 - <a href="releaselog/3_3_15.html">releaselog/3_3_15.html</a></li><li>Version 3.3.15.0 - <a href="releaselog/3_3_15.html">releaselog/3_3_15.html</a></li><li>version 3.3.15.0 - <a href="releaselog/3_3_15.html">releaselog/3_3_15.html</a></li><li>Version 3.3.16 - <a href="releaselog/3_3_16.html">releaselog/3_3_16.html</a></li><li>version 3.3.16 - <a href="releaselog/3_3_16.html">releaselog/3_3_16.html</a></li><li>Version 3.3.16.0 - <a href="releaselog/3_3_16.html">releaselog/3_3_16.html</a></li><li>version 3.3.16.0 - <a href="releaselog/3_3_16.html">releaselog/3_3_16.html</a></li><li>Version 3.3.17 - <a href="releaselog/3_3_17.html">releaselog/3_3_17.html</a></li><li>version 3.3.17 - <a href="releaselog/3_3_17.html">releaselog/3_3_17.html</a></li><li>Version 3.3.17.0 - <a href="releaselog/3_3_17.html">releaselog/3_3_17.html</a></li><li>version 3.3.17.0 - <a href="releaselog/3_3_17.html">releaselog/3_3_17.html</a></li><li>Version 3.4.0 - <a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a></li><li>version 3.4.0 - <a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a></li><li>Version 3.4.1 - <a href="releaselog/3_4_1.html">releaselog/3_4_1.html</a></li><li>version 3.4.1 - <a href="releaselog/3_4_1.html">releaselog/3_4_1.html</a></li><li>Version 3.4.2 - <a href="releaselog/3_4_2.html">releaselog/3_4_2.html</a></li><li>version 3.4.2 - <a href="releaselog/3_4_2.html">releaselog/3_4_2.html</a></li><li>Version 3.5.0 - <a href="releaselog/3_5_0.html">releaselog/3_5_0.html</a></li><li>version 3.5.0 - <a href="releaselog/3_5_0.html">releaselog/3_5_0.html</a></li><li>Version 3.5.1 - <a href="releaselog/3_5_1.html">releaselog/3_5_1.html</a></li><li>version 3.5.1 - <a href="releaselog/3_5_1.html">releaselog/3_5_1.html</a></li><li>Version 3.5.2 - <a href="releaselog/3_5_2.html">releaselog/3_5_2.html</a></li><li>version 3.5.2 - <a href="releaselog/3_5_2.html">releaselog/3_5_2.html</a></li><li>Version 3.5.3 - <a href="releaselog/3_5_3.html">releaselog/3_5_3.html</a></li><li>version 3.5.3 - <a href="releaselog/3_5_3.html">releaselog/3_5_3.html</a></li><li>Version 3.5.4 - <a href="releaselog/3_5_4.html">releaselog/3_5_4.html</a></li><li>version 3.5.4 - <a href="releaselog/3_5_4.html">releaselog/3_5_4.html</a></li><li>Version 3.5.5 - <a href="releaselog/3_5_5.html">releaselog/3_5_5.html</a></li><li>version 3.5.5 - <a href="releaselog/3_5_5.html">releaselog/3_5_5.html</a></li><li>Version 3.5.6 - <a href="releaselog/3_5_6.html">releaselog/3_5_6.html</a></li><li>version 3.5.6 - <a href="releaselog/3_5_6.html">releaselog/3_5_6.html</a></li><li>Version 3.5.7 - <a href="releaselog/3_5_7.html">releaselog/3_5_7.html</a></li><li>version 3.5.7 - <a href="releaselog/3_5_7.html">releaselog/3_5_7.html</a></li><li>Version 3.5.8 - <a href="releaselog/3_5_8.html">releaselog/3_5_8.html</a></li><li>version 3.5.8 - <a href="releaselog/3_5_8.html">releaselog/3_5_8.html</a></li><li>Version 3.5.9 - <a href="releaselog/3_5_9.html">releaselog/3_5_9.html</a></li><li>version 3.5.9 - <a href="releaselog/3_5_9.html">releaselog/3_5_9.html</a></li><li>Version 3.6.0 - <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a></li><li>version 3.6.0 - <a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a></li><li>Version 3.6.1 - <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a></li><li>version 3.6.1 - <a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a></li><li>Version 3.6.2 - <a href="releaselog/3_6_2.html">releaselog/3_6_2.html</a></li><li>version 3.6.2 - <a href="releaselog/3_6_2.html">releaselog/3_6_2.html</a></li><li>Version 3.6.3 - <a href="releaselog/3_6_3.html">releaselog/3_6_3.html</a></li><li>version 3.6.3 - <a href="releaselog/3_6_3.html">releaselog/3_6_3.html</a></li><li>Version 3.6.4 - <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a></li><li>version 3.6.4 - <a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a></li><li>Version 3.6.5 - <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a></li><li>version 3.6.5 - <a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a></li><li>Version 3.6.6 - <a href="releaselog/3_6_6.html">releaselog/3_6_6.html</a></li><li>version 3.6.6 - <a href="releaselog/3_6_6.html">releaselog/3_6_6.html</a></li><li>Version 3.6.6.1 - <a href="releaselog/3_6_6_1.html">releaselog/3_6_6_1.html</a></li><li>version 3.6.6.1 - <a href="releaselog/3_6_6_1.html">releaselog/3_6_6_1.html</a></li><li>Version 3.6.6.2 - <a href="releaselog/3_6_6_2.html">releaselog/3_6_6_2.html</a></li><li>version 3.6.6.2 - <a href="releaselog/3_6_6_2.html">releaselog/3_6_6_2.html</a></li><li>Version 3.6.7 - <a href="releaselog/3_6_7.html">releaselog/3_6_7.html</a></li><li>version 3.6.7 - <a href="releaselog/3_6_7.html">releaselog/3_6_7.html</a></li><li>Version 3.6.8 - <a href="releaselog/3_6_8.html">releaselog/3_6_8.html</a></li><li>version 3.6.8 - <a href="releaselog/3_6_8.html">releaselog/3_6_8.html</a></li><li>Version 3.6.9 - <a href="releaselog/3_6_9.html">releaselog/3_6_9.html</a></li><li>version 3.6.9 - <a href="releaselog/3_6_9.html">releaselog/3_6_9.html</a></li><li>Version 3.6.10 - <a href="releaselog/3_6_10.html">releaselog/3_6_10.html</a></li><li>version 3.6.10 - <a href="releaselog/3_6_10.html">releaselog/3_6_10.html</a></li><li>Version 3.6.11 - <a href="releaselog/3_6_11.html">releaselog/3_6_11.html</a></li><li>version 3.6.11 - <a href="releaselog/3_6_11.html">releaselog/3_6_11.html</a></li><li>Version 3.6.12 - <a href="releaselog/3_6_12.html">releaselog/3_6_12.html</a></li><li>version 3.6.12 - <a href="releaselog/3_6_12.html">releaselog/3_6_12.html</a></li><li>Version 3.6.13 - <a href="releaselog/3_6_13.html">releaselog/3_6_13.html</a></li><li>version 3.6.13 - <a href="releaselog/3_6_13.html">releaselog/3_6_13.html</a></li><li>Version 3.6.14 - <a href="releaselog/3_6_14.html">releaselog/3_6_14.html</a></li><li>version 3.6.14 - <a href="releaselog/3_6_14.html">releaselog/3_6_14.html</a></li><li>Version 3.6.14.1 - <a href="releaselog/3_6_14_1.html">releaselog/3_6_14_1.html</a></li><li>version 3.6.14.1 - <a href="releaselog/3_6_14_1.html">releaselog/3_6_14_1.html</a></li><li>Version 3.6.14.2 - <a href="releaselog/3_6_14_2.html">releaselog/3_6_14_2.html</a></li><li>version 3.6.14.2 - <a href="releaselog/3_6_14_2.html">releaselog/3_6_14_2.html</a></li><li>Version 3.6.15 - <a href="releaselog/3_6_15.html">releaselog/3_6_15.html</a></li><li>version 3.6.15 - <a href="releaselog/3_6_15.html">releaselog/3_6_15.html</a></li><li>Version 3.6.16 - <a href="releaselog/3_6_16.html">releaselog/3_6_16.html</a></li><li>version 3.6.16 - <a href="releaselog/3_6_16.html">releaselog/3_6_16.html</a></li><li>Version 3.6.16.1 - <a href="releaselog/3_6_16_1.html">releaselog/3_6_16_1.html</a></li><li>version 3.6.16.1 - <a href="releaselog/3_6_16_1.html">releaselog/3_6_16_1.html</a></li><li>Version 3.6.17 - <a href="releaselog/3_6_17.html">releaselog/3_6_17.html</a></li><li>version 3.6.17 - <a href="releaselog/3_6_17.html">releaselog/3_6_17.html</a></li><li>Version 3.6.18 - <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a></li><li>version 3.6.18 - <a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a></li><li>Version 3.6.19 - <a href="releaselog/3_6_19.html">releaselog/3_6_19.html</a></li><li>version 3.6.19 - <a href="releaselog/3_6_19.html">releaselog/3_6_19.html</a></li><li>Version 3.6.20 - <a href="releaselog/3_6_20.html">releaselog/3_6_20.html</a></li><li>version 3.6.20 - <a href="releaselog/3_6_20.html">releaselog/3_6_20.html</a></li><li>Version 3.6.21 - <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a></li><li>version 3.6.21 - <a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a></li><li>Version 3.6.22 - <a href="releaselog/3_6_22.html">releaselog/3_6_22.html</a></li><li>version 3.6.22 - <a href="releaselog/3_6_22.html">releaselog/3_6_22.html</a></li><li>Version 3.6.23 - <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a></li><li>version 3.6.23 - <a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a></li><li>Version 3.6.23.1 - <a href="releaselog/3_6_23_1.html">releaselog/3_6_23_1.html</a></li><li>version 3.6.23.1 - <a href="releaselog/3_6_23_1.html">releaselog/3_6_23_1.html</a></li><li>Version 3.6.23.1.0 - <a href="releaselog/3_6_23_1.html">releaselog/3_6_23_1.html</a></li><li>version 3.6.23.1.0 - <a href="releaselog/3_6_23_1.html">releaselog/3_6_23_1.html</a></li><li>Version 3.7.0 - <a href="releaselog/3_7_0.html">releaselog/3_7_0.html</a></li><li>version 3.7.0 - <a href="releaselog/3_7_0.html">releaselog/3_7_0.html</a></li><li>Version 3.7.0.1 - <a href="releaselog/3_7_0_1.html">releaselog/3_7_0_1.html</a></li><li>version 3.7.0.1 - <a href="releaselog/3_7_0_1.html">releaselog/3_7_0_1.html</a></li><li>Version 3.7.1 - <a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a></li><li>version 3.7.1 - <a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a></li><li>Version 3.7.2 - <a href="releaselog/3_7_2.html">releaselog/3_7_2.html</a></li><li>version 3.7.2 - <a href="releaselog/3_7_2.html">releaselog/3_7_2.html</a></li><li>Version 3.7.3 - <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a></li><li>version 3.7.3 - <a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a></li><li>Version 3.7.4 - <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a></li><li>version 3.7.4 - <a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a></li><li>Version 3.7.5 - <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a></li><li>version 3.7.5 - <a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a></li><li>Version 3.7.6 - <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a></li><li>version 3.7.6 - <a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a></li><li>Version 3.7.6.1 - <a href="releaselog/3_7_6_1.html">releaselog/3_7_6_1.html</a></li><li>version 3.7.6.1 - <a href="releaselog/3_7_6_1.html">releaselog/3_7_6_1.html</a></li><li>Version 3.7.6.2 - <a href="releaselog/3_7_6_2.html">releaselog/3_7_6_2.html</a></li><li>version 3.7.6.2 - <a href="releaselog/3_7_6_2.html">releaselog/3_7_6_2.html</a></li><li>Version 3.7.6.3 - <a href="releaselog/3_7_6_3.html">releaselog/3_7_6_3.html</a></li><li>version 3.7.6.3 - <a href="releaselog/3_7_6_3.html">releaselog/3_7_6_3.html</a></li><li>Version 3.7.7 - <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a></li><li>version 3.7.7 - <a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a></li><li>Version 3.7.7.1 - <a href="releaselog/3_7_7_1.html">releaselog/3_7_7_1.html</a></li><li>version 3.7.7.1 - <a href="releaselog/3_7_7_1.html">releaselog/3_7_7_1.html</a></li><li>Version 3.7.8 - <a href="releaselog/3_7_8.html">releaselog/3_7_8.html</a></li><li>version 3.7.8 - <a href="releaselog/3_7_8.html">releaselog/3_7_8.html</a></li><li>Version 3.7.9 - <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a></li><li>version 3.7.9 - <a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a></li><li>Version 3.7.10 - <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a></li><li>version 3.7.10 - <a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a></li><li>Version 3.7.11 - <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a></li><li>version 3.7.11 - <a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a></li><li>Version 3.7.12 - <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a></li><li>version 3.7.12 - <a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a></li><li>Version 3.7.12.1 - <a href="releaselog/3_7_12_1.html">releaselog/3_7_12_1.html</a></li><li>version 3.7.12.1 - <a href="releaselog/3_7_12_1.html">releaselog/3_7_12_1.html</a></li><li>Version 3.7.13 - <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a></li><li>version 3.7.13 - <a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a></li><li>Version 3.7.14 - <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a></li><li>version 3.7.14 - <a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a></li><li>Version 3.7.14.1 - <a href="releaselog/3_7_14_1.html">releaselog/3_7_14_1.html</a></li><li>version 3.7.14.1 - <a href="releaselog/3_7_14_1.html">releaselog/3_7_14_1.html</a></li><li>Version 3.7.15 - <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a></li><li>version 3.7.15 - <a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a></li><li>Version 3.7.15.1 - <a href="releaselog/3_7_15_1.html">releaselog/3_7_15_1.html</a></li><li>version 3.7.15.1 - <a href="releaselog/3_7_15_1.html">releaselog/3_7_15_1.html</a></li><li>Version 3.7.15.2 - <a href="releaselog/3_7_15_2.html">releaselog/3_7_15_2.html</a></li><li>version 3.7.15.2 - <a href="releaselog/3_7_15_2.html">releaselog/3_7_15_2.html</a></li><li>Version 3.7.16 - <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a></li><li>version 3.7.16 - <a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a></li><li>Version 3.7.16.1 - <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a></li><li>version 3.7.16.1 - <a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a></li><li>Version 3.7.16.2 - <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a></li><li>version 3.7.16.2 - <a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a></li><li>Version 3.7.17 - <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a></li><li>version 3.7.17 - <a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a></li><li>Version 3.8.0 - <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a></li><li>version 3.8.0 - <a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a></li><li>Version 3.8.0.1 - <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a></li><li>version 3.8.0.1 - <a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a></li><li>Version 3.8.0.2 - <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a></li><li>version 3.8.0.2 - <a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a></li><li>Version 3.8.1 - <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a></li><li>version 3.8.1 - <a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a></li><li>Version 3.8.2 - <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a></li><li>version 3.8.2 - <a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a></li><li>Version 3.8.3 - <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a></li><li>version 3.8.3 - <a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a></li><li>Version 3.8.3.1 - <a href="releaselog/3_8_3_1.html">releaselog/3_8_3_1.html</a></li><li>version 3.8.3.1 - <a href="releaselog/3_8_3_1.html">releaselog/3_8_3_1.html</a></li><li>Version 3.8.3.1.0 - <a href="releaselog/3_8_3_1.html">releaselog/3_8_3_1.html</a></li><li>version 3.8.3.1.0 - <a href="releaselog/3_8_3_1.html">releaselog/3_8_3_1.html</a></li><li>Version 3.8.4 - <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a></li><li>version 3.8.4 - <a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a></li><li>Version 3.8.4.1 - <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a></li><li>version 3.8.4.1 - <a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a></li><li>Version 3.8.4.2 - <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a></li><li>version 3.8.4.2 - <a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a></li><li>Version 3.8.4.3 - <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a></li><li>version 3.8.4.3 - <a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a></li><li>Version 3.8.5 - <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a></li><li>version 3.8.5 - <a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a></li><li>Version 3.8.6 - <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a></li><li>version 3.8.6 - <a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a></li><li>Version 3.8.7 - <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a></li><li>version 3.8.7 - <a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a></li><li>Version 3.8.7.1 - <a href="releaselog/3_8_7_1.html">releaselog/3_8_7_1.html</a></li><li>version 3.8.7.1 - <a href="releaselog/3_8_7_1.html">releaselog/3_8_7_1.html</a></li><li>Version 3.8.7.2 - <a href="releaselog/3_8_7_2.html">releaselog/3_8_7_2.html</a></li><li>version 3.8.7.2 - <a href="releaselog/3_8_7_2.html">releaselog/3_8_7_2.html</a></li><li>Version 3.8.7.3 - <a href="releaselog/3_8_7_3.html">releaselog/3_8_7_3.html</a></li><li>version 3.8.7.3 - <a href="releaselog/3_8_7_3.html">releaselog/3_8_7_3.html</a></li><li>Version 3.8.7.4 - <a href="releaselog/3_8_7_4.html">releaselog/3_8_7_4.html</a></li><li>version 3.8.7.4 - <a href="releaselog/3_8_7_4.html">releaselog/3_8_7_4.html</a></li><li>Version 3.8.8 - <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a></li><li>version 3.8.8 - <a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a></li><li>Version 3.8.8.1 - <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a></li><li>version 3.8.8.1 - <a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a></li><li>Version 3.8.8.2 - <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a></li><li>version 3.8.8.2 - <a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a></li><li>Version 3.8.8.3 - <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a></li><li>version 3.8.8.3 - <a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a></li><li>Version 3.8.9 - <a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a></li><li>version 3.8.9 - <a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a></li><li>Version 3.8.10 - <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a></li><li>version 3.8.10 - <a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a></li><li>Version 3.8.10.1 - <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a></li><li>version 3.8.10.1 - <a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a></li><li>Version 3.8.10.2 - <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a></li><li>version 3.8.10.2 - <a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a></li><li>Version 3.8.11 - <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a></li><li>version 3.8.11 - <a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a></li><li>Version 3.8.11.1 - <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a></li><li>version 3.8.11.1 - <a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a></li><li>Version 3.9.0 - <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a></li><li>version 3.9.0 - <a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a></li><li>Version 3.9.1 - <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a></li><li>version 3.9.1 - <a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a></li><li>Version 3.9.2 - <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a></li><li>version 3.9.2 - <a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a></li><li>Version 3.9.3 - <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a></li><li>version 3.9.3 - <a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a></li><li>Version 3.10.0 - <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a></li><li>version 3.10.0 - <a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a></li><li>Version 3.10.1 - <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a></li><li>version 3.10.1 - <a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a></li><li>Version 3.10.2 - <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a></li><li>version 3.10.2 - <a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a></li><li>Version 3.11.0 - <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a></li><li>version 3.11.0 - <a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a></li><li>Version 3.11.1 - <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a></li><li>version 3.11.1 - <a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a></li><li>Version 3.12.0 - <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a></li><li>version 3.12.0 - <a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a></li><li>version 3.12.0 page size change - <a href="pgszchng2016.html">pgszchng2016.html</a></li><li>Version 3.12.1 - <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a></li><li>version 3.12.1 - <a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a></li><li>Version 3.12.2 - <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a></li><li>version 3.12.2 - <a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a></li><li>Version 3.13.0 - <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a></li><li>version 3.13.0 - <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a></li><li>Version 3.13.0.0 - <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a></li><li>version 3.13.0.0 - <a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a></li><li>Version 3.14 - <a href="releaselog/3_14.html">releaselog/3_14.html</a></li><li>version 3.14 - <a href="releaselog/3_14.html">releaselog/3_14.html</a></li><li>Version 3.14.0 - <a href="releaselog/3_14.html">releaselog/3_14.html</a></li><li>version 3.14.0 - <a href="releaselog/3_14.html">releaselog/3_14.html</a></li><li>Version 3.14.1 - <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a></li><li>version 3.14.1 - <a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a></li><li>Version 3.14.2 - <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a></li><li>version 3.14.2 - <a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a></li><li>Version 3.15.0 - <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a></li><li>version 3.15.0 - <a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a></li><li>Version 3.15.1 - <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a></li><li>version 3.15.1 - <a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a></li><li>Version 3.15.2 - <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a></li><li>version 3.15.2 - <a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a></li><li>Version 3.16.0 - <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a></li><li>version 3.16.0 - <a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a></li><li>Version 3.16.1 - <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a></li><li>version 3.16.1 - <a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a></li><li>Version 3.16.2 - <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a></li><li>version 3.16.2 - <a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a></li><li>Version 3.17.0 - <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a></li><li>version 3.17.0 - <a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a></li><li>Version 3.18.0 - <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a></li><li>version 3.18.0 - <a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a></li><li>Version 3.18.1 - <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a></li><li>version 3.18.1 - <a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a></li><li>Version 3.18.2 - <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a></li><li>version 3.18.2 - <a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a></li><li>Version 3.19.0 - <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a></li><li>version 3.19.0 - <a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a></li><li>Version 3.19.1 - <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a></li><li>version 3.19.1 - <a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a></li><li>Version 3.19.2 - <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a></li><li>version 3.19.2 - <a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a></li><li>Version 3.19.3 - <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a></li><li>version 3.19.3 - <a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a></li><li>Version 3.20.0 - <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a></li><li>version 3.20.0 - <a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a></li><li>Version 3.20.1 - <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a></li><li>version 3.20.1 - <a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a></li><li>Version 3.21.0 - <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a></li><li>version 3.21.0 - <a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a></li><li>Version 3.22.0 - <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a></li><li>version 3.22.0 - <a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a></li><li>Version 3.23.0 - <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a></li><li>version 3.23.0 - <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a></li><li>Version 3.23.0.0 - <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a></li><li>version 3.23.0.0 - <a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a></li><li>Version 3.23.1 - <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a></li><li>version 3.23.1 - <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a></li><li>Version 3.23.1.0 - <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a></li><li>version 3.23.1.0 - <a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a></li><li>Version 3.24.0 - <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a></li><li>version 3.24.0 - <a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a></li><li>Version 3.25.0 - <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a></li><li>version 3.25.0 - <a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a></li><li>Version 3.25.1 - <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a></li><li>version 3.25.1 - <a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a></li><li>Version 3.25.2 - <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a></li><li>version 3.25.2 - <a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a></li><li>Version 3.25.3 - <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a></li><li>version 3.25.3 - <a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a></li><li>Version 3.26.0 - <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a></li><li>version 3.26.0 - <a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a></li><li>Version 3.27.0 - <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a></li><li>version 3.27.0 - <a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a></li><li>Version 3.27.1 - <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a></li><li>version 3.27.1 - <a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a></li><li>Version 3.27.2 - <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a></li><li>version 3.27.2 - <a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a></li><li>Version 3.28.0 - <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a></li><li>version 3.28.0 - <a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a></li><li>Version 3.29.0 - <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a></li><li>version 3.29.0 - <a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a></li><li>Version 3.30.0 - <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a></li><li>version 3.30.0 - <a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a></li><li>Version 3.30.1 - <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a></li><li>version 3.30.1 - <a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a></li><li>Version 3.31.0 - <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a></li><li>version 3.31.0 - <a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a></li><li>Version 3.31.1 - <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a></li><li>version 3.31.1 - <a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a></li><li>Version 3.32.0 - <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a></li><li>version 3.32.0 - <a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a></li><li>Version 3.32.1 - <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a></li><li>version 3.32.1 - <a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a></li><li>Version 3.32.2 - <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a></li><li>version 3.32.2 - <a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a></li><li>Version 3.32.3 - <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a></li><li>version 3.32.3 - <a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a></li><li>Version 3.33.0 - <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a></li><li>version 3.33.0 - <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a></li><li>Version 3.33.0.0 - <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a></li><li>version 3.33.0.0 - <a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a></li><li>Version 3.34.0 - <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a></li><li>version 3.34.0 - <a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a></li><li>Version 3.34.1 - <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a></li><li>version 3.34.1 - <a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a></li><li>Version 3.35.0 - <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a></li><li>version 3.35.0 - <a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a></li><li>Version 3.35.1 - <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a></li><li>version 3.35.1 - <a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a></li><li>Version 3.35.2 - <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a></li><li>version 3.35.2 - <a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a></li><li>Version 3.35.3 - <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a></li><li>version 3.35.3 - <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a></li><li>Version 3.35.4 - <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a></li><li>version 3.35.4 - <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a></li><li>Version 3.35.5 - <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a></li><li>version 3.35.5 - <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a></li><li>Version 3.36.0 - <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a></li><li>version 3.36.0 - <a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a></li><li>Version 3.37.0 - <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a></li><li>version 3.37.0 - <a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a></li><li>Version 3.37.1 - <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a></li><li>version 3.37.1 - <a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a></li><li>Version 3.37.2 - <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a></li><li>version 3.37.2 - <a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a></li><li>Version 3.38.0 - <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a></li><li>version 3.38.0 - <a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a></li><li>Version 3.38.1 - <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a></li><li>version 3.38.1 - <a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a></li><li>Version 3.38.2 - <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a></li><li>version 3.38.2 - <a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a></li><li>Version 3.38.3 - <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a></li><li>version 3.38.3 - <a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a></li><li>Version 3.38.4 - <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a></li><li>version 3.38.4 - <a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a></li><li>Version 3.38.5 - <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a></li><li>version 3.38.5 - <a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a></li><li>Version 3.39.0 - <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a></li><li>version 3.39.0 - <a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a></li><li>Version 3.39.1 - <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a></li><li>version 3.39.1 - <a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a></li><li>Version 3.39.2 - <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a></li><li>version 3.39.2 - <a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a></li><li>Version 3.39.3 - <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a></li><li>version 3.39.3 - <a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a></li><li>Version 3.39.4 - <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a></li><li>version 3.39.4 - <a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a></li><li>Version 3.40.0 - <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a></li><li>version 3.40.0 - <a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a></li><li>Version 3.40.1 - <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a></li><li>version 3.40.1 - <a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a></li><li>version method - <a href="tclsqlite.html#version">tclsqlite.html#version</a></li><li>version numbering conventions - <a href="versionnumbers.html">versionnumbers.html</a></li><li>version-valid-for number - <a href="fileformat2.html#validfor">fileformat2.html#validfor</a></li><li>VFS - <a href="vfs.html">vfs.html</a></li><li>vfs query parameter - <a href="uri.html#urivfs">uri.html#urivfs</a></li><li>VFS shim - <a href="vfs.html#shim">vfs.html#shim</a></li><li>VFS shims - <a href="vfs.html#shim">vfs.html#shim</a></li><li>VFSes - <a href="vfs.html">vfs.html</a></li><li>VIEW - <a href="lang_createview.html">lang_createview.html</a></li><li>view - <a href="lang_createview.html">lang_createview.html</a></li><li>views - <a href="lang_createview.html">lang_createview.html</a></li><li>virtual machine - <a href="opcode.html">opcode.html</a></li><li>virtual machine instructions - <a href="opcode.html">opcode.html</a></li><li>virtual table - <a href="vtab.html">vtab.html</a></li><li>virtual table configuration option - <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a></li><li>virtual table configuration options - <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a></li><li>virtual table cursor - <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a></li><li>virtual table list - <a href="vtablist.html">vtablist.html</a></li><li>virtual table module - <a href="c3ref/module.html">c3ref/module.html</a></li><li>virtual tables - <a href="vtab.html">vtab.html</a></li><li>vulnerabilities - <a href="cves.html">cves.html</a></li><li>w - <a href="printf.html#percentw">printf.html#percentw</a></li><li>WAL - <a href="wal.html">wal.html</a></li><li>WAL backwards compatibility - <a href="wal.html#bkwrds">wal.html#bkwrds</a></li><li>WAL checksum algorithm - <a href="fileformat2.html#walcksm">fileformat2.html#walcksm</a></li><li>WAL concurrency - <a href="wal.html#concurrency">wal.html#concurrency</a></li><li>WAL file - <a href="wal.html#walfile">wal.html#walfile</a></li><li>WAL file format - <a href="fileformat2.html#walformat">fileformat2.html#walformat</a></li><li>WAL format - <a href="fileformat2.html#walformat">fileformat2.html#walformat</a></li><li>WAL mode - <a href="wal.html">wal.html</a></li><li>WAL read algorithm - <a href="fileformat2.html#walread">fileformat2.html#walread</a></li><li>WAL reset - <a href="fileformat2.html#walreset">fileformat2.html#walreset</a></li><li>WAL without shared memory - <a href="wal.html#noshm">wal.html#noshm</a></li><li>wal-index - <a href="walformat.html#shm">walformat.html#shm</a></li><li>WAL-index File Format - <a href="walformat.html#walidxfmt">walformat.html#walidxfmt</a></li><li>WAL-index format - <a href="walformat.html#walidxfmt">walformat.html#walidxfmt</a></li><li>WAL-mode crash recovery - <a href="walformat.html#recovery">walformat.html#recovery</a></li><li>WAL-mode File Format - <a href="walformat.html">walformat.html</a></li><li>WAL-mode locks - <a href="walformat.html#locks">walformat.html#locks</a></li><li>WAL-mode read blocking - <a href="wal.html#busy">wal.html#busy</a></li><li>wal_autocheckpoint - <a href="pragma.html#pragma_wal_autocheckpoint">pragma.html#pragma_wal_autocheckpoint</a></li><li>wal_autocheckpoint pragma - <a href="pragma.html#pragma_wal_autocheckpoint">pragma.html#pragma_wal_autocheckpoint</a></li><li>wal_checkpoint - <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a></li><li>wal_checkpoint pragma - <a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a></li><li>wal_hook method - <a href="tclsqlite.html#wal_hook">tclsqlite.html#wal_hook</a></li><li>Warranty of Title - <a href="copyright.html#warrantyoftitle">copyright.html#warrantyoftitle</a></li><li>What If OpenOffice Used SQLite - <a href="affcase1.html">affcase1.html</a></li><li>when to use WITHOUT ROWID - <a href="withoutrowid.html#wtu">withoutrowid.html#wtu</a></li><li>WHERE clause - <a href="lang_select.html#whereclause">lang_select.html#whereclause</a></li><li>why ALTER TABLE is so difficult - <a href="lang_altertable.html#altertableishard">lang_altertable.html#altertableishard</a></li><li>Win32 native memory allocator - <a href="malloc.html#win32heap">malloc.html#win32heap</a></li><li>window chaining - <a href="windowfunctions.html#wchaining">windowfunctions.html#wchaining</a></li><li>window function - <a href="windowfunctions.html">windowfunctions.html</a></li><li>Window functions - <a href="windowfunctions.html">windowfunctions.html</a></li><li>window functions - <a href="windowfunctions.html">windowfunctions.html</a></li><li>window-defn - <a href="syntax/window-defn.html">syntax/window-defn.html</a></li><li>window-defn syntax diagram - <a href="syntax/window-defn.html">syntax/window-defn.html</a></li><li>window-function-invocation - <a href="syntax/window-function-invocation.html">syntax/window-function-invocation.html</a></li><li>window-function-invocation syntax diagram - <a href="syntax/window-function-invocation.html">syntax/window-function-invocation.html</a></li><li>WITH - <a href="lang_with.html">lang_with.html</a></li><li>with - <a href="lang_with.html">lang_with.html</a></li><li>WITH clause - <a href="lang_with.html">lang_with.html</a></li><li>with-clause - <a href="syntax/with-clause.html">syntax/with-clause.html</a></li><li>with-clause syntax diagram - <a href="syntax/with-clause.html">syntax/with-clause.html</a></li><li>WITHOUT ROWID - <a href="withoutrowid.html">withoutrowid.html</a></li><li>WITHOUT rowid - <a href="withoutrowid.html">withoutrowid.html</a></li><li>WITHOUT ROWID virtual table - <a href="vtab.html#worid">vtab.html#worid</a></li><li>WITHOUT ROWID virtual tables - <a href="vtab.html#worid">vtab.html#worid</a></li><li>wrapping text - <a href="cli.html#wrap1">cli.html#wrap1</a></li><li>writable_schema - <a href="pragma.html#pragma_writable_schema">pragma.html#pragma_writable_schema</a></li><li>writable_schema pragma - <a href="pragma.html#pragma_writable_schema">pragma.html#pragma_writable_schema</a></li><li>write-ahead log - <a href="wal.html">wal.html</a></li><li>writer starvation - <a href="lockingv3.html#writer_starvation">lockingv3.html#writer_starvation</a></li><li>xBegin - <a href="vtab.html#xBegin">vtab.html#xBegin</a></li><li>xBestIndex - <a href="vtab.html#xbestindex">vtab.html#xbestindex</a></li><li>xColumn - <a href="vtab.html#xcolumn">vtab.html#xcolumn</a></li><li>xCommit - <a href="vtab.html#xcommit">vtab.html#xcommit</a></li><li>xConnect - <a href="vtab.html#xconnect">vtab.html#xconnect</a></li><li>xCreate - <a href="vtab.html#xcreate">vtab.html#xcreate</a></li><li>xDestroy - <a href="vtab.html#sqlite3_module.xDestroy">vtab.html#sqlite3_module.xDestroy</a></li><li>xDisconnect - <a href="vtab.html#xdisconnect">vtab.html#xdisconnect</a></li><li>xEof - <a href="vtab.html#xeof">vtab.html#xeof</a></li><li>xFilter - <a href="vtab.html#xfilter">vtab.html#xfilter</a></li><li>xFindFunction - <a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a></li><li>xNext - <a href="vtab.html#xnext">vtab.html#xnext</a></li><li>xQueryFunc RTree callback - <a href="rtree.html#xquery">rtree.html#xquery</a></li><li>xRelease - <a href="vtab.html#xsavepoint">vtab.html#xsavepoint</a></li><li>xRename - <a href="vtab.html#xrename">vtab.html#xrename</a></li><li>xRollback - <a href="vtab.html#xrollback">vtab.html#xrollback</a></li><li>xRollbackTo - <a href="vtab.html#xsavepoint">vtab.html#xsavepoint</a></li><li>xRowid - <a href="vtab.html#xrowid">vtab.html#xrowid</a></li><li>xSavepoint - <a href="vtab.html#xsavepoint">vtab.html#xsavepoint</a></li><li>xShadowName - <a href="vtab.html#xshadowname">vtab.html#xshadowname</a></li><li>xUpdate - <a href="vtab.html#xupdate">vtab.html#xupdate</a></li><li>YYSTACKDEPTH - <a href="compile.html#yystackdepth">compile.html#yystackdepth</a></li><li>YYTRACKMAXSTACKDEPTH - <a href="compile.html#yytrackmaxstackdepth">compile.html#yytrackmaxstackdepth</a></li><li>z - <a href="printf.html#percentz">printf.html#percentz</a></li><li>zero-configuration - <a href="zeroconf.html">zeroconf.html</a></li><li>zero-malloc memory allocator - <a href="malloc.html#memsys5">malloc.html#memsys5</a></li><li>zeroblob - <a href="lang_corefunc.html#zeroblob">lang_corefunc.html#zeroblob</a></li><li>zeroblob SQL function - <a href="lang_corefunc.html#zeroblob">lang_corefunc.html#zeroblob</a></li><li>ZIP file as database - <a href="cli.html#zipdb">cli.html#zipdb</a></li><li>zipfile - <a href="zipfile.html">zipfile.html</a></li><li>Zipfile virtual table - <a href="zipfile.html">zipfile.html</a></li></ul><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/wrap.tcl?m=86a88e65fd2db6eba">2022-12-07 17:49:21</a> UTC </small></i></p>
+
diff --git a/www/doc_pagelink_crossref.html b/www/doc_pagelink_crossref.html
new file mode 100644
index 0000000..21d73b8
--- /dev/null
+++ b/www/doc_pagelink_crossref.html
@@ -0,0 +1,1171 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Pagelink Crossreference</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<p>Key: Target_Page &rarr; pages that have hyperlinks to the target page.</p><p>Pages matching (news|changes|releaselog|[0-9]to[0-9]|&#94;doc_.*_crossref) are skipped.</p><ul><li><a href="./arch.html">./arch.html</a> &rarr;
+<a href="lts.html">lts.html</a> </li>
+<li><a href="./compile.html">./compile.html</a> &rarr;
+<a href="lts.html">lts.html</a> </li>
+<li><a href="./debugging.html">./debugging.html</a> &rarr;
+<a href="lts.html">lts.html</a> </li>
+<li><a href="./fileformat.html">./fileformat.html</a> &rarr;
+<a href="lts.html">lts.html</a> </li>
+<li><a href="./howtocorrupt.html">./howtocorrupt.html</a> &rarr;
+<a href="lts.html">lts.html</a> </li>
+<li><a href="./malloc.html">./malloc.html</a> &rarr;
+<a href="lts.html">lts.html</a> </li>
+<li><a href="./opcode.html">./opcode.html</a> &rarr;
+<a href="lts.html">lts.html</a> </li>
+<li><a href="./queryplanner.html">./queryplanner.html</a> &rarr;
+<a href="lts.html">lts.html</a> </li>
+<li><a href="./whentouse.html">./whentouse.html</a> &rarr;
+<a href="features.html">features.html</a> </li>
+<li><a href="about.html">about.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="index.html">index.html</a> <a href="qmplan.html">qmplan.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="aff_short.html">aff_short.html</a> &rarr;
+<a href="appfileformat.html">appfileformat.html</a> <a href="doclist.html">doclist.html</a> <a href="famous.html">famous.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="whentouse.html">whentouse.html</a> </li>
+<li><a href="affcase1.html">affcase1.html</a> &rarr;
+<a href="appfileformat.html">appfileformat.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="amalgamation.html">amalgamation.html</a> &rarr;
+<a href="appfileformat.html">appfileformat.html</a> <a href="c3ref/libversion.html">c3ref/libversion.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cksumvfs.html">cksumvfs.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="cpu.html">cpu.html</a> <a href="custombuild.html">custombuild.html</a> <a href="cves.html">cves.html</a> <a href="dbpage.html">dbpage.html</a> <a href="doclist.html">doclist.html</a> <a href="download.html">download.html</a> <a href="faq.html">faq.html</a> <a href="fasterthanfs.html">fasterthanfs.html</a> <a href="features.html">features.html</a> <a href="floatingpoint.html">floatingpoint.html</a> <a href="fts5.html">fts5.html</a> <a href="geopoly.html">geopoly.html</a> <a href="getthecode.html">getthecode.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_mathfunc.html">lang_mathfunc.html</a> <a href="lemon.html">lemon.html</a> <a href="malloc.html">malloc.html</a> <a href="privatebranch.html">privatebranch.html</a> <a href="qmplan.html">qmplan.html</a> <a href="rbu.html">rbu.html</a> <a href="rtree.html">rtree.html</a> <a href="selfcontained.html">selfcontained.html</a> <a href="sessionintro.html">sessionintro.html</a> <a href="sitemap.html">sitemap.html</a> <a href="spellfix1.html">spellfix1.html</a> <a href="stmt.html">stmt.html</a> </li>
+<li><a href="appfileformat.html">appfileformat.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="aff_short.html">aff_short.html</a> <a href="affcase1.html">affcase1.html</a> <a href="cintro.html">cintro.html</a> <a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="flextypegood.html">flextypegood.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="onefile.html">onefile.html</a> <a href="pragma.html">pragma.html</a> <a href="sessionintro.html">sessionintro.html</a> <a href="sitemap.html">sitemap.html</a> <a href="undoredo.html">undoredo.html</a> <a href="wal.html">wal.html</a> <a href="whentouse.html">whentouse.html</a> </li>
+<li><a href="appfunc.html">appfunc.html</a> &rarr;
+<a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="deterministic.html">deterministic.html</a> <a href="doclist.html">doclist.html</a> <a href="expridx.html">expridx.html</a> <a href="fts5.html">fts5.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="loadext.html">loadext.html</a> <a href="optoverview.html">optoverview.html</a> <a href="rescode.html">rescode.html</a> <a href="security.html">security.html</a> <a href="sitemap.html">sitemap.html</a> <a href="swarmvtab.html">swarmvtab.html</a> </li>
+<li><a href="arch.html">arch.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vdbe.html">vdbe.html</a> </li>
+<li><a href="assert.html">assert.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="testing.html">testing.html</a> </li>
+<li><a href="asyncvfs.html">asyncvfs.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="atomiccommit.html">atomiccommit.html</a> &rarr;
+<a href="affcase1.html">affcase1.html</a> <a href="appfileformat.html">appfileformat.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="howitworks.html">howitworks.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lockingv3.html">lockingv3.html</a> <a href="pragma.html">pragma.html</a> <a href="sitemap.html">sitemap.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="testing.html">testing.html</a> <a href="transactional.html">transactional.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="autoinc.html">autoinc.html</a> &rarr;
+<a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="quirks.html">quirks.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="sitemap.html">sitemap.html</a> <a href="stricttables.html">stricttables.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="backup.html">backup.html</a> &rarr;
+<a href="aff_short.html">aff_short.html</a> <a href="c3ref/backup.html">c3ref/backup.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="dbhash.html">dbhash.html</a> <a href="doclist.html">doclist.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="sitemap.html">sitemap.html</a> <a href="wal.html">wal.html</a> <a href="whentouse.html">whentouse.html</a> </li>
+<li><a href="bindptr.html">bindptr.html</a> &rarr;
+<a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/value_dup.html">c3ref/value_dup.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="books.html">books.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="bytecodevtab.html">bytecodevtab.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/api_routines.html">c3ref/api_routines.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> &rarr;
+<a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a> <a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="loadext.html">loadext.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/backup.html">c3ref/backup.html</a> &rarr;
+<a href="backup.html">backup.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> &rarr;
+<a href="backup.html">backup.html</a> <a href="c3ref/backup.html">c3ref/backup.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="bindptr.html">bindptr.html</a> <a href="bytecodevtab.html">bytecodevtab.html</a> <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a> <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a> <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/reset.html">c3ref/reset.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="carray.html">carray.html</a> <a href="cintro.html">cintro.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="fts3.html">fts3.html</a> <a href="fts5.html">fts5.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="limits.html">limits.html</a> <a href="optoverview.html">optoverview.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a> &rarr;
+<a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a> <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a> &rarr;
+<a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a> <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> &rarr;
+<a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a> <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/blob.html">c3ref/blob.html</a> &rarr;
+<a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a> <a href="c3ref/blob_close.html">c3ref/blob_close.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_read.html">c3ref/blob_read.html</a> <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="malloc.html">malloc.html</a> <a href="requirements.html">requirements.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a> &rarr;
+<a href="c3ref/blob.html">c3ref/blob.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_read.html">c3ref/blob_read.html</a> <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/blob_close.html">c3ref/blob_close.html</a> &rarr;
+<a href="c3ref/blob.html">c3ref/blob.html</a> <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_read.html">c3ref/blob_read.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/blob_open.html">c3ref/blob_open.html</a> &rarr;
+<a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/blob.html">c3ref/blob.html</a> <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a> <a href="c3ref/blob_close.html">c3ref/blob_close.html</a> <a href="c3ref/blob_read.html">c3ref/blob_read.html</a> <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="requirements.html">requirements.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="unionvtab.html">unionvtab.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="c3ref/blob_read.html">c3ref/blob_read.html</a> &rarr;
+<a href="c3ref/blob.html">c3ref/blob.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="fasterthanfs.html">fasterthanfs.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> &rarr;
+<a href="c3ref/blob.html">c3ref/blob.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/blob_write.html">c3ref/blob_write.html</a> &rarr;
+<a href="c3ref/blob.html">c3ref/blob.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_read.html">c3ref/blob_read.html</a> <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> &rarr;
+<a href="backup.html">backup.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="faq.html">faq.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> &rarr;
+<a href="backup.html">backup.html</a> <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="faq.html">faq.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/c_abort.html">c3ref/c_abort.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a> &rarr;
+<a href="c3ref/c_abort.html">c3ref/c_abort.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a> &rarr;
+<a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a> &rarr;
+<a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="requirements.html">requirements.html</a> <a href="session.html">session.html</a> </li>
+<li><a href="c3ref/c_any.html">c3ref/c_any.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a> <a href="c3ref/create_collation.html">c3ref/create_collation.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_blob.html">c3ref/c_blob.html</a> &rarr;
+<a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a> &rarr;
+<a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="c3ref/config.html">c3ref/config.html</a> <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> <a href="c3ref/log.html">c3ref/log.html</a> <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a> <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="debugging.html">debugging.html</a> <a href="errlog.html">errlog.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="malloc.html">malloc.html</a> <a href="mmap.html">mmap.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="security.html">security.html</a> <a href="testing.html">testing.html</a> <a href="threadsafe.html">threadsafe.html</a> <a href="uri.html">uri.html</a> </li>
+<li><a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/db_config.html">c3ref/db_config.html</a> <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="dbpage.html">dbpage.html</a> <a href="fts3.html">fts3.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="loadext.html">loadext.html</a> <a href="malloc.html">malloc.html</a> <a href="pragma.html">pragma.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="quirks.html">quirks.html</a> <a href="requirements.html">requirements.html</a> <a href="security.html">security.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a> &rarr;
+<a href="c3ref/db_status.html">c3ref/db_status.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="malloc.html">malloc.html</a> <a href="memstat.html">memstat.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/c_deny.html">c3ref/c_deny.html</a> &rarr;
+<a href="c3ref/c_fail.html">c3ref/c_fail.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_delete.html">lang_delete.html</a> </li>
+<li><a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="deterministic.html">deterministic.html</a> <a href="expridx.html">expridx.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="security.html">security.html</a> </li>
+<li><a href="c3ref/c_fail.html">c3ref/c_fail.html</a> &rarr;
+<a href="c3ref/c_deny.html">c3ref/c_deny.html</a> <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a> <a href="c3ref/file_control.html">c3ref/file_control.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="psow.html">psow.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="wal.html">wal.html</a> <a href="walformat.html">walformat.html</a> </li>
+<li><a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a> &rarr;
+<a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/c_index_scan_unique.html">c3ref/c_index_scan_unique.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a> &rarr;
+<a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="psow.html">psow.html</a> <a href="uri.html">uri.html</a> </li>
+<li><a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> &rarr;
+<a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> <a href="c3ref/limit.html">c3ref/limit.html</a> <a href="c3ref/str_new.html">c3ref/str_new.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_select.html">lang_select.html</a> <a href="limits.html">limits.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a> &rarr;
+<a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a> &rarr;
+<a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> <a href="c3ref/intro.html">c3ref/intro.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="rescode.html">rescode.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="threadsafe.html">threadsafe.html</a> <a href="uri.html">uri.html</a> </li>
+<li><a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a> &rarr;
+<a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a> &rarr;
+<a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_shm_nlock.html">c3ref/c_shm_nlock.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a> &rarr;
+<a href="c3ref/libversion.html">c3ref/libversion.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="th3.html">th3.html</a> <a href="versionnumbers.html">versionnumbers.html</a> </li>
+<li><a href="c3ref/c_static.html">c3ref/c_static.html</a> &rarr;
+<a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="carray.html">carray.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> &rarr;
+<a href="c3ref/status.html">c3ref/status.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="malloc.html">malloc.html</a> <a href="memstat.html">memstat.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> &rarr;
+<a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_indexedby.html">lang_indexedby.html</a> <a href="requirements.html">requirements.html</a> <a href="stmt.html">stmt.html</a> </li>
+<li><a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a> &rarr;
+<a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="testing.html">testing.html</a> </li>
+<li><a href="c3ref/c_trace.html">c3ref/c_trace.html</a> &rarr;
+<a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a> &rarr;
+<a href="c3ref/txn_state.html">c3ref/txn_state.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="security.html">security.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/c_win32_data_directory_type.html">c3ref/c_win32_data_directory_type.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a> &rarr;
+<a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a> &rarr;
+<a href="c3ref/reset.html">c3ref/reset.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/close.html">c3ref/close.html</a> &rarr;
+<a href="backup.html">backup.html</a> <a href="c3ref/create_collation.html">c3ref/create_collation.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="malloc.html">malloc.html</a> <a href="quickstart.html">quickstart.html</a> <a href="requirements.html">requirements.html</a> <a href="stmt.html">stmt.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="wal.html">wal.html</a> <a href="walformat.html">walformat.html</a> </li>
+<li><a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a> &rarr;
+<a href="c3ref/create_collation.html">c3ref/create_collation.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/column_blob.html">c3ref/column_blob.html</a> &rarr;
+<a href="c3ref/data_count.html">c3ref/data_count.html</a> <a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/free_table.html">c3ref/free_table.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="invalidutf.html">invalidutf.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="opcode.html">opcode.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/column_count.html">c3ref/column_count.html</a> &rarr;
+<a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/data_count.html">c3ref/data_count.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> &rarr;
+<a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/column_name.html">c3ref/column_name.html</a> &rarr;
+<a href="c3ref/exec.html">c3ref/exec.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="faq.html">faq.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> &rarr;
+<a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="th3.html">th3.html</a> </li>
+<li><a href="c3ref/complete.html">c3ref/complete.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="tclsqlite.html">tclsqlite.html</a> </li>
+<li><a href="c3ref/config.html">c3ref/config.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/db_config.html">c3ref/db_config.html</a> <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> <a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="c3ref/log.html">c3ref/log.html</a> <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="errlog.html">errlog.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="loadext.html">loadext.html</a> <a href="malloc.html">malloc.html</a> <a href="mmap.html">mmap.html</a> <a href="pragma.html">pragma.html</a> <a href="privatebranch.html">privatebranch.html</a> <a href="requirements.html">requirements.html</a> <a href="security.html">security.html</a> <a href="testing.html">testing.html</a> <a href="threadsafe.html">threadsafe.html</a> <a href="uri.html">uri.html</a> </li>
+<li><a href="c3ref/constlist.html">c3ref/constlist.html</a> &rarr;
+</li>
+<li><a href="c3ref/context.html">c3ref/context.html</a> &rarr;
+<a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/create_collation.html">c3ref/create_collation.html</a> &rarr;
+<a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="datatype3.html">datatype3.html</a> <a href="different.html">different.html</a> <a href="faq.html">faq.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/create_filename.html">c3ref/create_filename.html</a> &rarr;
+<a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/create_function.html">c3ref/create_function.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="c3ref/user_data.html">c3ref/user_data.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="deterministic.html">deterministic.html</a> <a href="different.html">different.html</a> <a href="faq.html">faq.html</a> <a href="fts3.html">fts3.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="rbu.html">rbu.html</a> <a href="requirements.html">requirements.html</a> <a href="rtree.html">rtree.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="c3ref/create_module.html">c3ref/create_module.html</a> &rarr;
+<a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a> <a href="c3ref/module.html">c3ref/module.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createvtab.html">lang_createvtab.html</a> <a href="requirements.html">requirements.html</a> <a href="rtree.html">rtree.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/data_count.html">c3ref/data_count.html</a> &rarr;
+<a href="c3ref/column_count.html">c3ref/column_count.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/data_directory.html">c3ref/data_directory.html</a> &rarr;
+<a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> &rarr;
+<a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/db_config.html">c3ref/db_config.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="fts3.html">fts3.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="loadext.html">loadext.html</a> <a href="malloc.html">malloc.html</a> <a href="pragma.html">pragma.html</a> <a href="privatebranch.html">privatebranch.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="quirks.html">quirks.html</a> <a href="requirements.html">requirements.html</a> <a href="security.html">security.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/db_filename.html">c3ref/db_filename.html</a> &rarr;
+<a href="c3ref/filename_database.html">c3ref/filename_database.html</a> <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/db_handle.html">c3ref/db_handle.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="unlock_notify.html">unlock_notify.html</a> </li>
+<li><a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a> &rarr;
+<a href="c3ref/errcode.html">c3ref/errcode.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/db_name.html">c3ref/db_name.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/db_readonly.html">c3ref/db_readonly.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a> &rarr;
+<a href="c3ref/release_memory.html">c3ref/release_memory.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/db_status.html">c3ref/db_status.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a> <a href="c3ref/status.html">c3ref/status.html</a> <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="malloc.html">malloc.html</a> <a href="memstat.html">memstat.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a> &rarr;
+<a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="csv.html">csv.html</a> <a href="fts3.html">fts3.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/deserialize.html">c3ref/deserialize.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a> <a href="c3ref/db_name.html">c3ref/db_name.html</a> <a href="c3ref/serialize.html">c3ref/serialize.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a> &rarr;
+<a href="c3ref/create_module.html">c3ref/create_module.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="loadext.html">loadext.html</a> <a href="requirements.html">requirements.html</a> <a href="tclsqlite.html">tclsqlite.html</a> </li>
+<li><a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> &rarr;
+<a href="c3ref/open.html">c3ref/open.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="sharedcache.html">sharedcache.html</a> </li>
+<li><a href="c3ref/errcode.html">c3ref/errcode.html</a> &rarr;
+<a href="backup.html">backup.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> <a href="c3ref/file_control.html">c3ref/file_control.html</a> <a href="c3ref/free_table.html">c3ref/free_table.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/exec.html">c3ref/exec.html</a> &rarr;
+<a href="backup.html">backup.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/free_table.html">c3ref/free_table.html</a> <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="cli.html">cli.html</a> <a href="faq.html">faq.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang.html">lang.html</a> <a href="pragma.html">pragma.html</a> <a href="quickstart.html">quickstart.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> &rarr;
+<a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a> <a href="c3ref/c_trace.html">c3ref/c_trace.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/experimental.html">c3ref/experimental.html</a> &rarr;
+<a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a> <a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/rebaser.html">session/rebaser.html</a> <a href="session/sqlite3rebaser_configure.html">session/sqlite3rebaser_configure.html</a> <a href="session/sqlite3rebaser_create.html">session/sqlite3rebaser_create.html</a> <a href="session/sqlite3rebaser_delete.html">session/sqlite3rebaser_delete.html</a> <a href="session/sqlite3rebaser_rebase.html">session/sqlite3rebaser_rebase.html</a> </li>
+<li><a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a> &rarr;
+<a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/file.html">c3ref/file.html</a> &rarr;
+<a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> <a href="c3ref/file_control.html">c3ref/file_control.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="vfs.html">vfs.html</a> </li>
+<li><a href="c3ref/file_control.html">c3ref/file_control.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="memstat.html">memstat.html</a> <a href="pragma.html">pragma.html</a> <a href="psow.html">psow.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="wal.html">wal.html</a> <a href="walformat.html">walformat.html</a> </li>
+<li><a href="c3ref/filename.html">c3ref/filename.html</a> &rarr;
+<a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/filename_database.html">c3ref/filename_database.html</a> &rarr;
+<a href="c3ref/create_filename.html">c3ref/create_filename.html</a> <a href="c3ref/db_filename.html">c3ref/db_filename.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/finalize.html">c3ref/finalize.html</a> &rarr;
+<a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> <a href="c3ref/column_name.html">c3ref/column_name.html</a> <a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="malloc.html">malloc.html</a> <a href="opcode.html">opcode.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="stmt.html">stmt.html</a> <a href="tclsqlite.html">tclsqlite.html</a> </li>
+<li><a href="c3ref/free.html">c3ref/free.html</a> &rarr;
+<a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/data_directory.html">c3ref/data_directory.html</a> <a href="c3ref/deserialize.html">c3ref/deserialize.html</a> <a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> <a href="c3ref/free_table.html">c3ref/free_table.html</a> <a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a> <a href="c3ref/mprintf.html">c3ref/mprintf.html</a> <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/serialize.html">c3ref/serialize.html</a> <a href="c3ref/str_finish.html">c3ref/str_finish.html</a> <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> <a href="c3ref/vtab.html">c3ref/vtab.html</a> <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="malloc.html">malloc.html</a> <a href="printf.html">printf.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="session.html">session.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/free_table.html">c3ref/free_table.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang.html">lang.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/funclist.html">c3ref/funclist.html</a> &rarr;
+<a href="cintro.html">cintro.html</a> <a href="docs.html">docs.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a> &rarr;
+<a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> &rarr;
+<a href="c3ref/context.html">c3ref/context.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/soft_heap_limit.html">c3ref/soft_heap_limit.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="custombuild.html">custombuild.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="malloc.html">malloc.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="security.html">security.html</a> </li>
+<li><a href="c3ref/index_info.html">c3ref/index_info.html</a> &rarr;
+<a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a> <a href="c3ref/c_index_scan_unique.html">c3ref/c_index_scan_unique.html</a> <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a> <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/initialize.html">c3ref/initialize.html</a> &rarr;
+<a href="c3ref/complete.html">c3ref/complete.html</a> <a href="c3ref/config.html">c3ref/config.html</a> <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="loadext.html">loadext.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/int64.html">c3ref/int64.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="c3ref/interrupt.html">c3ref/interrupt.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="security.html">security.html</a> <a href="tclsqlite.html">tclsqlite.html</a> </li>
+<li><a href="c3ref/intro.html">c3ref/intro.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="arch.html">arch.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="docs.html">docs.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="quickstart.html">quickstart.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/io_methods.html">c3ref/io_methods.html</a> &rarr;
+<a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a> <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a> <a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a> <a href="c3ref/c_shm_nlock.html">c3ref/c_shm_nlock.html</a> <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a> <a href="c3ref/file.html">c3ref/file.html</a> <a href="c3ref/file_control.html">c3ref/file_control.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="mmap.html">mmap.html</a> <a href="rescode.html">rescode.html</a> <a href="vfs.html">vfs.html</a> <a href="wal.html">wal.html</a> <a href="walformat.html">walformat.html</a> </li>
+<li><a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_keywords.html">lang_keywords.html</a> </li>
+<li><a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> &rarr;
+<a href="capi3ref.html">capi3ref.html</a> <a href="faq.html">faq.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="requirements.html">requirements.html</a> <a href="vtab.html">vtab.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="c3ref/libversion.html">c3ref/libversion.html</a> &rarr;
+<a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a> <a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="deterministic.html">deterministic.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="requirements.html">requirements.html</a> <a href="th3.html">th3.html</a> <a href="versionnumbers.html">versionnumbers.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/limit.html">c3ref/limit.html</a> &rarr;
+<a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/str_new.html">c3ref/str_new.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="limits.html">limits.html</a> <a href="pragma.html">pragma.html</a> <a href="privatebranch.html">privatebranch.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="security.html">security.html</a> </li>
+<li><a href="c3ref/load_extension.html">c3ref/load_extension.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cksumvfs.html">cksumvfs.html</a> <a href="compile.html">compile.html</a> <a href="csv.html">csv.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="loadext.html">loadext.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/log.html">c3ref/log.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="errlog.html">errlog.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="custombuild.html">custombuild.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="malloc.html">malloc.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="security.html">security.html</a> </li>
+<li><a href="c3ref/module.html">c3ref/module.html</a> &rarr;
+<a href="c3ref/create_module.html">c3ref/create_module.html</a> <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a> <a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="c3ref/overload_function.html">c3ref/overload_function.html</a> <a href="c3ref/vtab.html">c3ref/vtab.html</a> <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="fts5.html">fts5.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/mprintf.html">c3ref/mprintf.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/log.html">c3ref/log.html</a> <a href="c3ref/vtab.html">c3ref/vtab.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="printf.html">printf.html</a> <a href="requirements.html">requirements.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/mutex.html">c3ref/mutex.html</a> &rarr;
+<a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a> &rarr;
+<a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a> <a href="c3ref/errcode.html">c3ref/errcode.html</a> <a href="c3ref/mutex.html">c3ref/mutex.html</a> <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="custombuild.html">custombuild.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/mutex_held.html">c3ref/mutex_held.html</a> &rarr;
+<a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a> <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="testing.html">testing.html</a> </li>
+<li><a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a> &rarr;
+<a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/objlist.html">c3ref/objlist.html</a> &rarr;
+</li>
+<li><a href="c3ref/open.html">c3ref/open.html</a> &rarr;
+<a href="atomiccommit.html">atomiccommit.html</a> <a href="backup.html">backup.html</a> <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> <a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="c3ref/system_errno.html">c3ref/system_errno.html</a> <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="cksumvfs.html">cksumvfs.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="inmemorydb.html">inmemorydb.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="malloc.html">malloc.html</a> <a href="pragma.html">pragma.html</a> <a href="quickstart.html">quickstart.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="shortnames.html">shortnames.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="threadsafe.html">threadsafe.html</a> <a href="uri.html">uri.html</a> <a href="vfs.html">vfs.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="c3ref/overload_function.html">c3ref/overload_function.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/pcache.html">c3ref/pcache.html</a> &rarr;
+<a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/pcache.html">c3ref/pcache.html</a> <a href="c3ref/pcache_page.html">c3ref/pcache_page.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/pcache_page.html">c3ref/pcache_page.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/prepare.html">c3ref/prepare.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a> <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> <a href="c3ref/db_handle.html">c3ref/db_handle.html</a> <a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="errlog.html">errlog.html</a> <a href="faq.html">faq.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang.html">lang.html</a> <a href="lang_comment.html">lang_comment.html</a> <a href="lang_explain.html">lang_explain.html</a> <a href="limits.html">limits.html</a> <a href="malloc.html">malloc.html</a> <a href="opcode.html">opcode.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="stmt.html">stmt.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="unlock_notify.html">unlock_notify.html</a> <a href="vfs.html">vfs.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> &rarr;
+<a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="session.html">session.html</a> <a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a> </li>
+<li><a href="c3ref/profile.html">c3ref/profile.html</a> &rarr;
+<a href="c3ref/c_trace.html">c3ref/c_trace.html</a> <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="security.html">security.html</a> </li>
+<li><a href="c3ref/randomness.html">c3ref/randomness.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/release_memory.html">c3ref/release_memory.html</a> &rarr;
+<a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/reset.html">c3ref/reset.html</a> &rarr;
+<a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/finalize.html">c3ref/finalize.html</a> <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="opcode.html">opcode.html</a> <a href="requirements.html">requirements.html</a> <a href="stmt.html">stmt.html</a> <a href="unlock_notify.html">unlock_notify.html</a> </li>
+<li><a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a> &rarr;
+<a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/result_blob.html">c3ref/result_blob.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="bindptr.html">bindptr.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/c_static.html">c3ref/c_static.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="requirements.html">requirements.html</a> <a href="vtab.html">vtab.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a> &rarr;
+<a href="bindptr.html">bindptr.html</a> <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/serialize.html">c3ref/serialize.html</a> &rarr;
+<a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a> <a href="c3ref/db_name.html">c3ref/db_name.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="bindptr.html">bindptr.html</a> <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a> <a href="c3ref/c_deny.html">c3ref/c_deny.html</a> <a href="c3ref/c_fail.html">c3ref/c_fail.html</a> <a href="c3ref/limit.html">c3ref/limit.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_explain.html">lang_explain.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="schematab.html">schematab.html</a> <a href="security.html">security.html</a> <a href="tclsqlite.html">tclsqlite.html</a> </li>
+<li><a href="c3ref/set_last_insert_rowid.html">c3ref/set_last_insert_rowid.html</a> &rarr;
+<a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/sleep.html">c3ref/sleep.html</a> &rarr;
+<a href="backup.html">backup.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/snapshot.html">c3ref/snapshot.html</a> &rarr;
+<a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a> <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/snapshot_cmp.html">c3ref/snapshot_cmp.html</a> &rarr;
+<a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a> &rarr;
+<a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> &rarr;
+<a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> &rarr;
+<a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> &rarr;
+<a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/soft_heap_limit.html">c3ref/soft_heap_limit.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="atomiccommit.html">atomiccommit.html</a> <a href="backup.html">backup.html</a> <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_trace.html">c3ref/c_trace.html</a> <a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a> <a href="c3ref/create_collation.html">c3ref/create_collation.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/create_module.html">c3ref/create_module.html</a> <a href="c3ref/data_directory.html">c3ref/data_directory.html</a> <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> <a href="c3ref/db_config.html">c3ref/db_config.html</a> <a href="c3ref/db_handle.html">c3ref/db_handle.html</a> <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a> <a href="c3ref/db_status.html">c3ref/db_status.html</a> <a href="c3ref/deserialize.html">c3ref/deserialize.html</a> <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> <a href="c3ref/errcode.html">c3ref/errcode.html</a> <a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="c3ref/interrupt.html">c3ref/interrupt.html</a> <a href="c3ref/intro.html">c3ref/intro.html</a> <a href="c3ref/limit.html">c3ref/limit.html</a> <a href="c3ref/module.html">c3ref/module.html</a> <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> <a href="c3ref/serialize.html">c3ref/serialize.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a> <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="dbstat.html">dbstat.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fullsql.html">fullsql.html</a> <a href="imposter.html">imposter.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="malloc.html">malloc.html</a> <a href="pragma.html">pragma.html</a> <a href="rescode.html">rescode.html</a> <a href="schematab.html">schematab.html</a> <a href="security.html">security.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="stmt.html">stmt.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="unlock_notify.html">unlock_notify.html</a> <a href="uri.html">uri.html</a> <a href="useovernet.html">useovernet.html</a> <a href="vfs.html">vfs.html</a> <a href="vtab.html">vtab.html</a> <a href="vtablist.html">vtablist.html</a> <a href="wal.html">wal.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="c3ref/status.html">c3ref/status.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="c3ref/db_status.html">c3ref/db_status.html</a> <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="malloc.html">malloc.html</a> <a href="memstat.html">memstat.html</a> <a href="requirements.html">requirements.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="c3ref/step.html">c3ref/step.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="backup.html">backup.html</a> <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> <a href="c3ref/column_name.html">c3ref/column_name.html</a> <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> <a href="c3ref/data_count.html">c3ref/data_count.html</a> <a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/finalize.html">c3ref/finalize.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/profile.html">c3ref/profile.html</a> <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> <a href="c3ref/reset.html">c3ref/reset.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="eqp.html">eqp.html</a> <a href="errlog.html">errlog.html</a> <a href="faq.html">faq.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_datefunc.html">lang_datefunc.html</a> <a href="lang_explain.html">lang_explain.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="malloc.html">malloc.html</a> <a href="opcode.html">opcode.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="stmt.html">stmt.html</a> <a href="unlock_notify.html">unlock_notify.html</a> <a href="vfs.html">vfs.html</a> </li>
+<li><a href="c3ref/stmt.html">c3ref/stmt.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="bytecodevtab.html">bytecodevtab.html</a> <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a> <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/c_trace.html">c3ref/c_trace.html</a> <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/column_count.html">c3ref/column_count.html</a> <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a> <a href="c3ref/column_name.html">c3ref/column_name.html</a> <a href="c3ref/data_count.html">c3ref/data_count.html</a> <a href="c3ref/db_handle.html">c3ref/db_handle.html</a> <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> <a href="c3ref/finalize.html">c3ref/finalize.html</a> <a href="c3ref/intro.html">c3ref/intro.html</a> <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/reset.html">c3ref/reset.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="datatype3.html">datatype3.html</a> <a href="faq.html">faq.html</a> <a href="howitworks.html">howitworks.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_explain.html">lang_explain.html</a> <a href="malloc.html">malloc.html</a> <a href="opcode.html">opcode.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="rescode.html">rescode.html</a> <a href="stmt.html">stmt.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="unlock_notify.html">unlock_notify.html</a> <a href="vfs.html">vfs.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/stmt_isexplain.html">c3ref/stmt_isexplain.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a> &rarr;
+<a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a> <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a> &rarr;
+<a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a> &rarr;
+<a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> <a href="c3ref/db_status.html">c3ref/db_status.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_indexedby.html">lang_indexedby.html</a> <a href="requirements.html">requirements.html</a> <a href="tclsqlite.html">tclsqlite.html</a> </li>
+<li><a href="c3ref/str.html">c3ref/str.html</a> &rarr;
+<a href="c3ref/str_append.html">c3ref/str_append.html</a> <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a> <a href="c3ref/str_finish.html">c3ref/str_finish.html</a> <a href="c3ref/str_new.html">c3ref/str_new.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/str_append.html">c3ref/str_append.html</a> &rarr;
+<a href="c3ref/str.html">c3ref/str.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="printf.html">printf.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a> &rarr;
+<a href="c3ref/str_append.html">c3ref/str_append.html</a> <a href="c3ref/str_new.html">c3ref/str_new.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/str_finish.html">c3ref/str_finish.html</a> &rarr;
+<a href="c3ref/str.html">c3ref/str.html</a> <a href="c3ref/str_new.html">c3ref/str_new.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/str_new.html">c3ref/str_new.html</a> &rarr;
+<a href="c3ref/str.html">c3ref/str.html</a> <a href="c3ref/str_append.html">c3ref/str_append.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/strglob.html">c3ref/strglob.html</a> &rarr;
+<a href="c3ref/strlike.html">c3ref/strlike.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/stricmp.html">c3ref/stricmp.html</a> &rarr;
+<a href="c3ref/create_collation.html">c3ref/create_collation.html</a> <a href="c3ref/strglob.html">c3ref/strglob.html</a> <a href="c3ref/strlike.html">c3ref/strlike.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="datatype3.html">datatype3.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/strlike.html">c3ref/strlike.html</a> &rarr;
+<a href="c3ref/strglob.html">c3ref/strglob.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/system_errno.html">c3ref/system_errno.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> &rarr;
+<a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="tempfiles.html">tempfiles.html</a> </li>
+<li><a href="c3ref/test_control.html">c3ref/test_control.html</a> &rarr;
+<a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="imposter.html">imposter.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="testing.html">testing.html</a> </li>
+<li><a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> &rarr;
+<a href="c3ref/value.html">c3ref/value.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="faq.html">faq.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="threadsafe.html">threadsafe.html</a> </li>
+<li><a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a> &rarr;
+<a href="c3ref/c_trace.html">c3ref/c_trace.html</a> <a href="c3ref/profile.html">c3ref/profile.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/txn_state.html">c3ref/txn_state.html</a> &rarr;
+<a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="unlock_notify.html">unlock_notify.html</a> </li>
+<li><a href="c3ref/update_hook.html">c3ref/update_hook.html</a> &rarr;
+<a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_conflict.html">lang_conflict.html</a> <a href="requirements.html">requirements.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a> &rarr;
+<a href="c3ref/create_filename.html">c3ref/create_filename.html</a> <a href="c3ref/db_filename.html">c3ref/db_filename.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/user_data.html">c3ref/user_data.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/value.html">c3ref/value.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="bindptr.html">bindptr.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/value_dup.html">c3ref/value_dup.html</a> <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="opcode.html">opcode.html</a> <a href="requirements.html">requirements.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="c3ref/value_blob.html">c3ref/value_blob.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="bindptr.html">bindptr.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="vtab.html">vtab.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="c3ref/value_dup.html">c3ref/value_dup.html</a> &rarr;
+<a href="c3ref/value.html">c3ref/value.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/value_encoding.html">c3ref/value_encoding.html</a> &rarr;
+<a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a> &rarr;
+<a href="bindptr.html">bindptr.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c3ref/vfs.html">c3ref/vfs.html</a> &rarr;
+<a href="asyncvfs.html">asyncvfs.html</a> <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a> <a href="c3ref/create_filename.html">c3ref/create_filename.html</a> <a href="c3ref/data_directory.html">c3ref/data_directory.html</a> <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> <a href="c3ref/file.html">c3ref/file.html</a> <a href="c3ref/file_control.html">c3ref/file_control.html</a> <a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/randomness.html">c3ref/randomness.html</a> <a href="c3ref/sleep.html">c3ref/sleep.html</a> <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_datefunc.html">lang_datefunc.html</a> <a href="loadext.html">loadext.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="testing.html">testing.html</a> <a href="vfs.html">vfs.html</a> </li>
+<li><a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a> &rarr;
+<a href="asyncvfs.html">asyncvfs.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="custombuild.html">custombuild.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="privatebranch.html">privatebranch.html</a> <a href="requirements.html">requirements.html</a> <a href="uri.html">uri.html</a> <a href="vfs.html">vfs.html</a> </li>
+<li><a href="c3ref/vtab.html">c3ref/vtab.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> &rarr;
+<a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a> <a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a> &rarr;
+<a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a> &rarr;
+<a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> &rarr;
+<a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> &rarr;
+<a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> </li>
+<li><a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> &rarr;
+<a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> &rarr;
+<a href="c3ref/c_deny.html">c3ref/c_deny.html</a> <a href="c3ref/c_fail.html">c3ref/c_fail.html</a> <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> </li>
+<li><a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> &rarr;
+<a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a> <a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> &rarr;
+<a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="wal.html">wal.html</a> <a href="walformat.html">walformat.html</a> </li>
+<li><a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> &rarr;
+<a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a> <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> &rarr;
+<a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a> &rarr;
+<a href="c3ref/c_win32_data_directory_type.html">c3ref/c_win32_data_directory_type.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="c_interface.html">c_interface.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="capi3.html">capi3.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="capi3ref.html">capi3ref.html</a> &rarr;
+<a href="c3ref/intro.html">c3ref/intro.html</a> <a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="carray.html">carray.html</a> &rarr;
+<a href="bindptr.html">bindptr.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="loadext.html">loadext.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="checklists/index.html">checklists/index.html</a> &rarr;
+<a href="testing.html">testing.html</a> </li>
+<li><a href="chronology.html">chronology.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="getthecode.html">getthecode.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="qmplan.html">qmplan.html</a> <a href="sitemap.html">sitemap.html</a> <a href="versionnumbers.html">versionnumbers.html</a> </li>
+<li><a href="cintro.html">cintro.html</a> &rarr;
+<a href="c3ref/intro.html">c3ref/intro.html</a> <a href="capi3.html">capi3.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="features.html">features.html</a> <a href="index.html">index.html</a> <a href="lts.html">lts.html</a> <a href="quickstart.html">quickstart.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="cksumvfs.html">cksumvfs.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="rescode.html">rescode.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="cli.html">cli.html</a> &rarr;
+<a href="bytecodevtab.html">bytecodevtab.html</a> <a href="c_interface.html">c_interface.html</a> <a href="compile.html">compile.html</a> <a href="completion.html">completion.html</a> <a href="csv.html">csv.html</a> <a href="cves.html">cves.html</a> <a href="dbpage.html">dbpage.html</a> <a href="debugging.html">debugging.html</a> <a href="doclist.html">doclist.html</a> <a href="eqp.html">eqp.html</a> <a href="features.html">features.html</a> <a href="floatingpoint.html">floatingpoint.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="imposter.html">imposter.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_with.html">lang_with.html</a> <a href="loadext.html">loadext.html</a> <a href="nulinstr.html">nulinstr.html</a> <a href="opcode.html">opcode.html</a> <a href="qmplan.html">qmplan.html</a> <a href="quickstart.html">quickstart.html</a> <a href="recovery.html">recovery.html</a> <a href="series.html">series.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqlanalyze.html">sqlanalyze.html</a> <a href="sqlar.html">sqlar.html</a> <a href="stmt.html">stmt.html</a> <a href="stricttables.html">stricttables.html</a> <a href="uintcseq.html">uintcseq.html</a> <a href="vfs.html">vfs.html</a> <a href="vtab.html">vtab.html</a> <a href="vtablist.html">vtablist.html</a> <a href="wal.html">wal.html</a> <a href="whentouse.html">whentouse.html</a> <a href="zipfile.html">zipfile.html</a> </li>
+<li><a href="codeofconduct.html">codeofconduct.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="codeofethics.html">codeofethics.html</a> &rarr;
+<a href="codeofconduct.html">codeofconduct.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="compile.html">compile.html</a> &rarr;
+<a href="amalgamation.html">amalgamation.html</a> <a href="appfunc.html">appfunc.html</a> <a href="bytecodevtab.html">bytecodevtab.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a> <a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a> <a href="c3ref/deserialize.html">c3ref/deserialize.html</a> <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> <a href="c3ref/free.html">c3ref/free.html</a> <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> <a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/profile.html">c3ref/profile.html</a> <a href="c3ref/release_memory.html">c3ref/release_memory.html</a> <a href="c3ref/serialize.html">c3ref/serialize.html</a> <a href="c3ref/snapshot_cmp.html">c3ref/snapshot_cmp.html</a> <a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a> <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a> <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a> <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="dbpage.html">dbpage.html</a> <a href="dbstat.html">dbstat.html</a> <a href="debugging.html">debugging.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="fasterthanfs.html">fasterthanfs.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="footprint.html">footprint.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fts3.html">fts3.html</a> <a href="geopoly.html">geopoly.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="inmemorydb.html">inmemorydb.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_keywords.html">lang_keywords.html</a> <a href="lang_mathfunc.html">lang_mathfunc.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="loadext.html">loadext.html</a> <a href="malloc.html">malloc.html</a> <a href="mmap.html">mmap.html</a> <a href="opcode.html">opcode.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="privatebranch.html">privatebranch.html</a> <a href="psow.html">psow.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="quirks.html">quirks.html</a> <a href="rbu.html">rbu.html</a> <a href="rescode.html">rescode.html</a> <a href="rtree.html">rtree.html</a> <a href="security.html">security.html</a> <a href="selfcontained.html">selfcontained.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="shortnames.html">shortnames.html</a> <a href="sitemap.html">sitemap.html</a> <a href="stmt.html">stmt.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="testing.html">testing.html</a> <a href="th3.html">th3.html</a> <a href="threadsafe.html">threadsafe.html</a> <a href="unlock_notify.html">unlock_notify.html</a> <a href="uri.html">uri.html</a> <a href="vtab.html">vtab.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="completion.html">completion.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="conflict.html">conflict.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="consortium.html">consortium.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="constlist.html">constlist.html</a> &rarr;
+<a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a> <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a> <a href="c3ref/api_routines.html">c3ref/api_routines.html</a> <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a> <a href="c3ref/backup.html">c3ref/backup.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a> <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a> <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> <a href="c3ref/blob.html">c3ref/blob.html</a> <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a> <a href="c3ref/blob_close.html">c3ref/blob_close.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_read.html">c3ref/blob_read.html</a> <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> <a href="c3ref/c_abort.html">c3ref/c_abort.html</a> <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a> <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a> <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a> <a href="c3ref/c_any.html">c3ref/c_any.html</a> <a href="c3ref/c_blob.html">c3ref/c_blob.html</a> <a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a> <a href="c3ref/c_deny.html">c3ref/c_deny.html</a> <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/c_fail.html">c3ref/c_fail.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a> <a href="c3ref/c_index_scan_unique.html">c3ref/c_index_scan_unique.html</a> <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a> <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a> <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a> <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a> <a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a> <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a> <a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a> <a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a> <a href="c3ref/c_shm_nlock.html">c3ref/c_shm_nlock.html</a> <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a> <a href="c3ref/c_static.html">c3ref/c_static.html</a> <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a> <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a> <a href="c3ref/c_trace.html">c3ref/c_trace.html</a> <a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a> <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> <a href="c3ref/c_win32_data_directory_type.html">c3ref/c_win32_data_directory_type.html</a> <a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a> <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/column_count.html">c3ref/column_count.html</a> <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a> <a href="c3ref/column_name.html">c3ref/column_name.html</a> <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a> <a href="c3ref/complete.html">c3ref/complete.html</a> <a href="c3ref/config.html">c3ref/config.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a> <a href="c3ref/create_collation.html">c3ref/create_collation.html</a> <a href="c3ref/create_filename.html">c3ref/create_filename.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/create_module.html">c3ref/create_module.html</a> <a href="c3ref/data_count.html">c3ref/data_count.html</a> <a href="c3ref/data_directory.html">c3ref/data_directory.html</a> <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> <a href="c3ref/db_config.html">c3ref/db_config.html</a> <a href="c3ref/db_filename.html">c3ref/db_filename.html</a> <a href="c3ref/db_handle.html">c3ref/db_handle.html</a> <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a> <a href="c3ref/db_name.html">c3ref/db_name.html</a> <a href="c3ref/db_readonly.html">c3ref/db_readonly.html</a> <a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a> <a href="c3ref/db_status.html">c3ref/db_status.html</a> <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a> <a href="c3ref/deserialize.html">c3ref/deserialize.html</a> <a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a> <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> <a href="c3ref/errcode.html">c3ref/errcode.html</a> <a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> <a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a> <a href="c3ref/file.html">c3ref/file.html</a> <a href="c3ref/file_control.html">c3ref/file_control.html</a> <a href="c3ref/filename.html">c3ref/filename.html</a> <a href="c3ref/filename_database.html">c3ref/filename_database.html</a> <a href="c3ref/finalize.html">c3ref/finalize.html</a> <a href="c3ref/free.html">c3ref/free.html</a> <a href="c3ref/free_table.html">c3ref/free_table.html</a> <a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a> <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> <a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="c3ref/int64.html">c3ref/int64.html</a> <a href="c3ref/interrupt.html">c3ref/interrupt.html</a> <a href="c3ref/intro.html">c3ref/intro.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a> <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="c3ref/libversion.html">c3ref/libversion.html</a> <a href="c3ref/limit.html">c3ref/limit.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="c3ref/log.html">c3ref/log.html</a> <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a> <a href="c3ref/module.html">c3ref/module.html</a> <a href="c3ref/mprintf.html">c3ref/mprintf.html</a> <a href="c3ref/mutex.html">c3ref/mutex.html</a> <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a> <a href="c3ref/mutex_held.html">c3ref/mutex_held.html</a> <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a> <a href="c3ref/objlist.html">c3ref/objlist.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/overload_function.html">c3ref/overload_function.html</a> <a href="c3ref/pcache.html">c3ref/pcache.html</a> <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> <a href="c3ref/pcache_page.html">c3ref/pcache_page.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/profile.html">c3ref/profile.html</a> <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> <a href="c3ref/randomness.html">c3ref/randomness.html</a> <a href="c3ref/release_memory.html">c3ref/release_memory.html</a> <a href="c3ref/reset.html">c3ref/reset.html</a> <a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a> <a href="c3ref/serialize.html">c3ref/serialize.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/set_last_insert_rowid.html">c3ref/set_last_insert_rowid.html</a> <a href="c3ref/sleep.html">c3ref/sleep.html</a> <a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="c3ref/snapshot_cmp.html">c3ref/snapshot_cmp.html</a> <a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a> <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> <a href="c3ref/soft_heap_limit.html">c3ref/soft_heap_limit.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="c3ref/status.html">c3ref/status.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> <a href="c3ref/stmt_isexplain.html">c3ref/stmt_isexplain.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a> <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a> <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a> <a href="c3ref/str.html">c3ref/str.html</a> <a href="c3ref/str_append.html">c3ref/str_append.html</a> <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a> <a href="c3ref/str_finish.html">c3ref/str_finish.html</a> <a href="c3ref/str_new.html">c3ref/str_new.html</a> <a href="c3ref/strglob.html">c3ref/strglob.html</a> <a href="c3ref/stricmp.html">c3ref/stricmp.html</a> <a href="c3ref/strlike.html">c3ref/strlike.html</a> <a href="c3ref/system_errno.html">c3ref/system_errno.html</a> <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> <a href="c3ref/test_control.html">c3ref/test_control.html</a> <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a> <a href="c3ref/txn_state.html">c3ref/txn_state.html</a> <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a> <a href="c3ref/user_data.html">c3ref/user_data.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/value_dup.html">c3ref/value_dup.html</a> <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a> <a href="c3ref/vtab.html">c3ref/vtab.html</a> <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a> <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a> <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a> <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a> <a href="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a> <a href="session/changegroup.html">session/changegroup.html</a> <a href="session/funclist.html">session/funclist.html</a> <a href="session/intro.html">session/intro.html</a> <a href="session/objlist.html">session/objlist.html</a> <a href="session/rebaser.html">session/rebaser.html</a> <a href="session/session.html">session/session.html</a> <a href="session/sqlite3changegroup_add.html">session/sqlite3changegroup_add.html</a> <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a> <a href="session/sqlite3changegroup_delete.html">session/sqlite3changegroup_delete.html</a> <a href="session/sqlite3changegroup_new.html">session/sqlite3changegroup_new.html</a> <a href="session/sqlite3changegroup_output.html">session/sqlite3changegroup_output.html</a> <a href="session/sqlite3rebaser_configure.html">session/sqlite3rebaser_configure.html</a> <a href="session/sqlite3rebaser_create.html">session/sqlite3rebaser_create.html</a> <a href="session/sqlite3rebaser_delete.html">session/sqlite3rebaser_delete.html</a> <a href="session/sqlite3rebaser_rebase.html">session/sqlite3rebaser_rebase.html</a> <a href="session/sqlite3session_attach.html">session/sqlite3session_attach.html</a> <a href="session/sqlite3session_config.html">session/sqlite3session_config.html</a> <a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a> <a href="session/sqlite3session_delete.html">session/sqlite3session_delete.html</a> <a href="session/sqlite3session_diff.html">session/sqlite3session_diff.html</a> <a href="session/sqlite3session_enable.html">session/sqlite3session_enable.html</a> <a href="session/sqlite3session_indirect.html">session/sqlite3session_indirect.html</a> <a href="session/sqlite3session_isempty.html">session/sqlite3session_isempty.html</a> <a href="session/sqlite3session_memory_used.html">session/sqlite3session_memory_used.html</a> <a href="session/sqlite3session_patchset.html">session/sqlite3session_patchset.html</a> <a href="session/sqlite3session_table_filter.html">session/sqlite3session_table_filter.html</a> </li>
+<li><a href="copyright.html">copyright.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="doclist.html">doclist.html</a> <a href="famous.html">famous.html</a> <a href="faq.html">faq.html</a> <a href="features.html">features.html</a> <a href="hirely.html">hirely.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="support.html">support.html</a> <a href="th3.html">th3.html</a> </li>
+<li><a href="cpu.html">cpu.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="crew.html">crew.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="printf.html">printf.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqlar.html">sqlar.html</a> </li>
+<li><a href="csv.html">csv.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="custombuild.html">custombuild.html</a> &rarr;
+<a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="cves.html">cves.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="datatype3.html">datatype3.html</a> &rarr;
+<a href="c3ref/create_collation.html">c3ref/create_collation.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="cli.html">cli.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="flextypegood.html">flextypegood.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fts3.html">fts3.html</a> <a href="gencol.html">gencol.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_select.html">lang_select.html</a> <a href="loadext.html">loadext.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="quirks.html">quirks.html</a> <a href="rbu.html">rbu.html</a> <a href="requirements.html">requirements.html</a> <a href="rtree.html">rtree.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqldiff.html">sqldiff.html</a> <a href="stricttables.html">stricttables.html</a> <a href="version3.html">version3.html</a> <a href="vtab.html">vtab.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="datatypes.html">datatypes.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="dbhash.html">dbhash.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="dbpage.html">dbpage.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="dbstat.html">dbstat.html</a> &rarr;
+<a href="amalgamation.html">amalgamation.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqlanalyze.html">sqlanalyze.html</a> <a href="vtab.html">vtab.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="debugging.html">debugging.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="deterministic.html">deterministic.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="expridx.html">expridx.html</a> <a href="gencol.html">gencol.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="partialindex.html">partialindex.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="different.html">different.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> <a href="tempfiles.html">tempfiles.html</a> </li>
+<li><a href="doclist.html">doclist.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="docs.html">docs.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="download.html">download.html</a> &rarr;
+<a href="amalgamation.html">amalgamation.html</a> <a href="cli.html">cli.html</a> <a href="doclist.html">doclist.html</a> <a href="getthecode.html">getthecode.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="quickstart.html">quickstart.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="eqp.html">eqp.html</a> &rarr;
+<a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="debugging.html">debugging.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_explain.html">lang_explain.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="errlog.html">errlog.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/log.html">c3ref/log.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="doclist.html">doclist.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="optoverview.html">optoverview.html</a> <a href="quirks.html">quirks.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="expridx.html">expridx.html</a> &rarr;
+<a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="deterministic.html">deterministic.html</a> <a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_reindex.html">lang_reindex.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="rbu.html">rbu.html</a> <a href="sitemap.html">sitemap.html</a> <a href="versionnumbers.html">versionnumbers.html</a> </li>
+<li><a href="famous.html">famous.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="faq.html">faq.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="index.html">index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="fasterthanfs.html">fasterthanfs.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="aff_short.html">aff_short.html</a> <a href="appfileformat.html">appfileformat.html</a> <a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="howitworks.html">howitworks.html</a> <a href="index.html">index.html</a> <a href="intern-v-extern-blob.html">intern-v-extern-blob.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="whentouse.html">whentouse.html</a> <a href="whyc.html">whyc.html</a> </li>
+<li><a href="features.html">features.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="index.html">index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="fileformat.html">fileformat.html</a> &rarr;
+<a href="fts3.html">fts3.html</a> <a href="vdbe.html">vdbe.html</a> </li>
+<li><a href="fileformat2.html">fileformat2.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="appfileformat.html">appfileformat.html</a> <a href="arch.html">arch.html</a> <a href="atomiccommit.html">atomiccommit.html</a> <a href="autoinc.html">autoinc.html</a> <a href="cksumvfs.html">cksumvfs.html</a> <a href="compile.html">compile.html</a> <a href="datatype3.html">datatype3.html</a> <a href="dbpage.html">dbpage.html</a> <a href="doclist.html">doclist.html</a> <a href="formatchng.html">formatchng.html</a> <a href="howitworks.html">howitworks.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="imposter.html">imposter.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lockingv3.html">lockingv3.html</a> <a href="lts.html">lts.html</a> <a href="onefile.html">onefile.html</a> <a href="opcode.html">opcode.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="qmplan.html">qmplan.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="rowidtable.html">rowidtable.html</a> <a href="schematab.html">schematab.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqlar.html">sqlar.html</a> <a href="stricttables.html">stricttables.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="th3.html">th3.html</a> <a href="version3.html">version3.html</a> <a href="vtablist.html">vtablist.html</a> <a href="wal.html">wal.html</a> <a href="walformat.html">walformat.html</a> <a href="whentouse.html">whentouse.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="flextypegood.html">flextypegood.html</a> &rarr;
+<a href="datatype3.html">datatype3.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="quirks.html">quirks.html</a> <a href="sitemap.html">sitemap.html</a> <a href="stricttables.html">stricttables.html</a> </li>
+<li><a href="floatingpoint.html">floatingpoint.html</a> &rarr;
+<a href="cli.html">cli.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="footprint.html">footprint.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="compile.html">compile.html</a> <a href="different.html">different.html</a> <a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="foreignkeys.html">foreignkeys.html</a> &rarr;
+<a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_conflict.html">lang_conflict.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_droptable.html">lang_droptable.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="sitemap.html">sitemap.html</a> <a href="stricttables.html">stricttables.html</a> </li>
+<li><a href="formatchng.html">formatchng.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="fts3.html">fts3.html</a> &rarr;
+<a href="aff_short.html">aff_short.html</a> <a href="affcase1.html">affcase1.html</a> <a href="amalgamation.html">amalgamation.html</a> <a href="bindptr.html">bindptr.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="cves.html">cves.html</a> <a href="doclist.html">doclist.html</a> <a href="fts5.html">fts5.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="rbu.html">rbu.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="spellfix1.html">spellfix1.html</a> <a href="sqldiff.html">sqldiff.html</a> <a href="th3.html">th3.html</a> <a href="vtab.html">vtab.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="fts5.html">fts5.html</a> &rarr;
+<a href="amalgamation.html">amalgamation.html</a> <a href="bindptr.html">bindptr.html</a> <a href="compile.html">compile.html</a> <a href="cves.html">cves.html</a> <a href="doclist.html">doclist.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lemon.html">lemon.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqldiff.html">sqldiff.html</a> <a href="vtab.html">vtab.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="fullsql.html">fullsql.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="funclist.html">funclist.html</a> &rarr;
+<a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a> <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a> <a href="c3ref/api_routines.html">c3ref/api_routines.html</a> <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a> <a href="c3ref/backup.html">c3ref/backup.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a> <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a> <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> <a href="c3ref/blob.html">c3ref/blob.html</a> <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a> <a href="c3ref/blob_close.html">c3ref/blob_close.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_read.html">c3ref/blob_read.html</a> <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> <a href="c3ref/c_abort.html">c3ref/c_abort.html</a> <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a> <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a> <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a> <a href="c3ref/c_any.html">c3ref/c_any.html</a> <a href="c3ref/c_blob.html">c3ref/c_blob.html</a> <a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a> <a href="c3ref/c_deny.html">c3ref/c_deny.html</a> <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/c_fail.html">c3ref/c_fail.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a> <a href="c3ref/c_index_scan_unique.html">c3ref/c_index_scan_unique.html</a> <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a> <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a> <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a> <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a> <a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a> <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a> <a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a> <a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a> <a href="c3ref/c_shm_nlock.html">c3ref/c_shm_nlock.html</a> <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a> <a href="c3ref/c_static.html">c3ref/c_static.html</a> <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a> <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a> <a href="c3ref/c_trace.html">c3ref/c_trace.html</a> <a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a> <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> <a href="c3ref/c_win32_data_directory_type.html">c3ref/c_win32_data_directory_type.html</a> <a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a> <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/column_count.html">c3ref/column_count.html</a> <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a> <a href="c3ref/column_name.html">c3ref/column_name.html</a> <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a> <a href="c3ref/complete.html">c3ref/complete.html</a> <a href="c3ref/config.html">c3ref/config.html</a> <a href="c3ref/constlist.html">c3ref/constlist.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a> <a href="c3ref/create_collation.html">c3ref/create_collation.html</a> <a href="c3ref/create_filename.html">c3ref/create_filename.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/create_module.html">c3ref/create_module.html</a> <a href="c3ref/data_count.html">c3ref/data_count.html</a> <a href="c3ref/data_directory.html">c3ref/data_directory.html</a> <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> <a href="c3ref/db_config.html">c3ref/db_config.html</a> <a href="c3ref/db_filename.html">c3ref/db_filename.html</a> <a href="c3ref/db_handle.html">c3ref/db_handle.html</a> <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a> <a href="c3ref/db_name.html">c3ref/db_name.html</a> <a href="c3ref/db_readonly.html">c3ref/db_readonly.html</a> <a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a> <a href="c3ref/db_status.html">c3ref/db_status.html</a> <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a> <a href="c3ref/deserialize.html">c3ref/deserialize.html</a> <a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a> <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> <a href="c3ref/errcode.html">c3ref/errcode.html</a> <a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> <a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a> <a href="c3ref/file.html">c3ref/file.html</a> <a href="c3ref/file_control.html">c3ref/file_control.html</a> <a href="c3ref/filename.html">c3ref/filename.html</a> <a href="c3ref/filename_database.html">c3ref/filename_database.html</a> <a href="c3ref/finalize.html">c3ref/finalize.html</a> <a href="c3ref/free.html">c3ref/free.html</a> <a href="c3ref/free_table.html">c3ref/free_table.html</a> <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a> <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> <a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="c3ref/int64.html">c3ref/int64.html</a> <a href="c3ref/interrupt.html">c3ref/interrupt.html</a> <a href="c3ref/intro.html">c3ref/intro.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a> <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="c3ref/libversion.html">c3ref/libversion.html</a> <a href="c3ref/limit.html">c3ref/limit.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="c3ref/log.html">c3ref/log.html</a> <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a> <a href="c3ref/module.html">c3ref/module.html</a> <a href="c3ref/mprintf.html">c3ref/mprintf.html</a> <a href="c3ref/mutex.html">c3ref/mutex.html</a> <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a> <a href="c3ref/mutex_held.html">c3ref/mutex_held.html</a> <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a> <a href="c3ref/objlist.html">c3ref/objlist.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/overload_function.html">c3ref/overload_function.html</a> <a href="c3ref/pcache.html">c3ref/pcache.html</a> <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> <a href="c3ref/pcache_page.html">c3ref/pcache_page.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/profile.html">c3ref/profile.html</a> <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> <a href="c3ref/randomness.html">c3ref/randomness.html</a> <a href="c3ref/release_memory.html">c3ref/release_memory.html</a> <a href="c3ref/reset.html">c3ref/reset.html</a> <a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a> <a href="c3ref/serialize.html">c3ref/serialize.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/set_last_insert_rowid.html">c3ref/set_last_insert_rowid.html</a> <a href="c3ref/sleep.html">c3ref/sleep.html</a> <a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="c3ref/snapshot_cmp.html">c3ref/snapshot_cmp.html</a> <a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a> <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> <a href="c3ref/soft_heap_limit.html">c3ref/soft_heap_limit.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="c3ref/status.html">c3ref/status.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> <a href="c3ref/stmt_isexplain.html">c3ref/stmt_isexplain.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a> <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a> <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a> <a href="c3ref/str.html">c3ref/str.html</a> <a href="c3ref/str_append.html">c3ref/str_append.html</a> <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a> <a href="c3ref/str_finish.html">c3ref/str_finish.html</a> <a href="c3ref/str_new.html">c3ref/str_new.html</a> <a href="c3ref/strglob.html">c3ref/strglob.html</a> <a href="c3ref/stricmp.html">c3ref/stricmp.html</a> <a href="c3ref/strlike.html">c3ref/strlike.html</a> <a href="c3ref/system_errno.html">c3ref/system_errno.html</a> <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> <a href="c3ref/test_control.html">c3ref/test_control.html</a> <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a> <a href="c3ref/txn_state.html">c3ref/txn_state.html</a> <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a> <a href="c3ref/user_data.html">c3ref/user_data.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/value_dup.html">c3ref/value_dup.html</a> <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a> <a href="c3ref/vtab.html">c3ref/vtab.html</a> <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a> <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a> <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a> <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a> <a href="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a> <a href="session/changegroup.html">session/changegroup.html</a> <a href="session/constlist.html">session/constlist.html</a> <a href="session/intro.html">session/intro.html</a> <a href="session/objlist.html">session/objlist.html</a> <a href="session/rebaser.html">session/rebaser.html</a> <a href="session/session.html">session/session.html</a> <a href="session/sqlite3changegroup_add.html">session/sqlite3changegroup_add.html</a> <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a> <a href="session/sqlite3changegroup_delete.html">session/sqlite3changegroup_delete.html</a> <a href="session/sqlite3changegroup_new.html">session/sqlite3changegroup_new.html</a> <a href="session/sqlite3changegroup_output.html">session/sqlite3changegroup_output.html</a> <a href="session/sqlite3rebaser_configure.html">session/sqlite3rebaser_configure.html</a> <a href="session/sqlite3rebaser_create.html">session/sqlite3rebaser_create.html</a> <a href="session/sqlite3rebaser_delete.html">session/sqlite3rebaser_delete.html</a> <a href="session/sqlite3rebaser_rebase.html">session/sqlite3rebaser_rebase.html</a> <a href="session/sqlite3session_attach.html">session/sqlite3session_attach.html</a> <a href="session/sqlite3session_config.html">session/sqlite3session_config.html</a> <a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a> <a href="session/sqlite3session_delete.html">session/sqlite3session_delete.html</a> <a href="session/sqlite3session_diff.html">session/sqlite3session_diff.html</a> <a href="session/sqlite3session_enable.html">session/sqlite3session_enable.html</a> <a href="session/sqlite3session_indirect.html">session/sqlite3session_indirect.html</a> <a href="session/sqlite3session_isempty.html">session/sqlite3session_isempty.html</a> <a href="session/sqlite3session_memory_used.html">session/sqlite3session_memory_used.html</a> <a href="session/sqlite3session_patchset.html">session/sqlite3session_patchset.html</a> <a href="session/sqlite3session_table_filter.html">session/sqlite3session_table_filter.html</a> </li>
+<li><a href="gencol.html">gencol.html</a> &rarr;
+<a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="deterministic.html">deterministic.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="stricttables.html">stricttables.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="geopoly.html">geopoly.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="getthecode.html">getthecode.html</a> &rarr;
+<a href="amalgamation.html">amalgamation.html</a> <a href="doclist.html">doclist.html</a> <a href="download.html">download.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="hirely.html">hirely.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="howitworks.html">howitworks.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="eqp.html">eqp.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="howtocompile.html">howtocompile.html</a> &rarr;
+<a href="amalgamation.html">amalgamation.html</a> <a href="cli.html">cli.html</a> <a href="doclist.html">doclist.html</a> <a href="download.html">download.html</a> <a href="features.html">features.html</a> <a href="fts5.html">fts5.html</a> <a href="getthecode.html">getthecode.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="quickstart.html">quickstart.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="howtocorrupt.html">howtocorrupt.html</a> &rarr;
+<a href="atomiccommit.html">atomiccommit.html</a> <a href="doclist.html">doclist.html</a> <a href="errlog.html">errlog.html</a> <a href="faq.html">faq.html</a> <a href="fts3.html">fts3.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="recovery.html">recovery.html</a> <a href="schematab.html">schematab.html</a> <a href="shortnames.html">shortnames.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="hp1.html">hp1.html</a> &rarr;
+<a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="imposter.html">imposter.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="index.html">index.html</a> &rarr;
+<a href="consortium.html">consortium.html</a> <a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="inmemorydb.html">inmemorydb.html</a> &rarr;
+<a href="c3ref/open.html">c3ref/open.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="pragma.html">pragma.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="sitemap.html">sitemap.html</a> <a href="tclsqlite.html">tclsqlite.html</a> </li>
+<li><a href="intern-v-extern-blob.html">intern-v-extern-blob.html</a> &rarr;
+<a href="aff_short.html">aff_short.html</a> <a href="affcase1.html">affcase1.html</a> <a href="appfileformat.html">appfileformat.html</a> <a href="doclist.html">doclist.html</a> <a href="fasterthanfs.html">fasterthanfs.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="whyc.html">whyc.html</a> </li>
+<li><a href="intro.html">intro.html</a> &rarr;
+<a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a> <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a> <a href="c3ref/api_routines.html">c3ref/api_routines.html</a> <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a> <a href="c3ref/backup.html">c3ref/backup.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a> <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a> <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> <a href="c3ref/blob.html">c3ref/blob.html</a> <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a> <a href="c3ref/blob_close.html">c3ref/blob_close.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_read.html">c3ref/blob_read.html</a> <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> <a href="c3ref/c_abort.html">c3ref/c_abort.html</a> <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a> <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a> <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a> <a href="c3ref/c_any.html">c3ref/c_any.html</a> <a href="c3ref/c_blob.html">c3ref/c_blob.html</a> <a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a> <a href="c3ref/c_deny.html">c3ref/c_deny.html</a> <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/c_fail.html">c3ref/c_fail.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a> <a href="c3ref/c_index_scan_unique.html">c3ref/c_index_scan_unique.html</a> <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a> <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a> <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a> <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a> <a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a> <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a> <a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a> <a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a> <a href="c3ref/c_shm_nlock.html">c3ref/c_shm_nlock.html</a> <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a> <a href="c3ref/c_static.html">c3ref/c_static.html</a> <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a> <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a> <a href="c3ref/c_trace.html">c3ref/c_trace.html</a> <a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a> <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> <a href="c3ref/c_win32_data_directory_type.html">c3ref/c_win32_data_directory_type.html</a> <a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a> <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/column_count.html">c3ref/column_count.html</a> <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a> <a href="c3ref/column_name.html">c3ref/column_name.html</a> <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a> <a href="c3ref/complete.html">c3ref/complete.html</a> <a href="c3ref/config.html">c3ref/config.html</a> <a href="c3ref/constlist.html">c3ref/constlist.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a> <a href="c3ref/create_collation.html">c3ref/create_collation.html</a> <a href="c3ref/create_filename.html">c3ref/create_filename.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/create_module.html">c3ref/create_module.html</a> <a href="c3ref/data_count.html">c3ref/data_count.html</a> <a href="c3ref/data_directory.html">c3ref/data_directory.html</a> <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> <a href="c3ref/db_config.html">c3ref/db_config.html</a> <a href="c3ref/db_filename.html">c3ref/db_filename.html</a> <a href="c3ref/db_handle.html">c3ref/db_handle.html</a> <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a> <a href="c3ref/db_name.html">c3ref/db_name.html</a> <a href="c3ref/db_readonly.html">c3ref/db_readonly.html</a> <a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a> <a href="c3ref/db_status.html">c3ref/db_status.html</a> <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a> <a href="c3ref/deserialize.html">c3ref/deserialize.html</a> <a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a> <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> <a href="c3ref/errcode.html">c3ref/errcode.html</a> <a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> <a href="c3ref/experimental.html">c3ref/experimental.html</a> <a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a> <a href="c3ref/file.html">c3ref/file.html</a> <a href="c3ref/file_control.html">c3ref/file_control.html</a> <a href="c3ref/filename.html">c3ref/filename.html</a> <a href="c3ref/filename_database.html">c3ref/filename_database.html</a> <a href="c3ref/finalize.html">c3ref/finalize.html</a> <a href="c3ref/free.html">c3ref/free.html</a> <a href="c3ref/free_table.html">c3ref/free_table.html</a> <a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a> <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> <a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="c3ref/int64.html">c3ref/int64.html</a> <a href="c3ref/interrupt.html">c3ref/interrupt.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a> <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="c3ref/libversion.html">c3ref/libversion.html</a> <a href="c3ref/limit.html">c3ref/limit.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="c3ref/log.html">c3ref/log.html</a> <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a> <a href="c3ref/module.html">c3ref/module.html</a> <a href="c3ref/mprintf.html">c3ref/mprintf.html</a> <a href="c3ref/mutex.html">c3ref/mutex.html</a> <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a> <a href="c3ref/mutex_held.html">c3ref/mutex_held.html</a> <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a> <a href="c3ref/objlist.html">c3ref/objlist.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/overload_function.html">c3ref/overload_function.html</a> <a href="c3ref/pcache.html">c3ref/pcache.html</a> <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> <a href="c3ref/pcache_page.html">c3ref/pcache_page.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/profile.html">c3ref/profile.html</a> <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> <a href="c3ref/randomness.html">c3ref/randomness.html</a> <a href="c3ref/release_memory.html">c3ref/release_memory.html</a> <a href="c3ref/reset.html">c3ref/reset.html</a> <a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a> <a href="c3ref/serialize.html">c3ref/serialize.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/set_last_insert_rowid.html">c3ref/set_last_insert_rowid.html</a> <a href="c3ref/sleep.html">c3ref/sleep.html</a> <a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="c3ref/snapshot_cmp.html">c3ref/snapshot_cmp.html</a> <a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a> <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> <a href="c3ref/soft_heap_limit.html">c3ref/soft_heap_limit.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="c3ref/status.html">c3ref/status.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> <a href="c3ref/stmt_isexplain.html">c3ref/stmt_isexplain.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a> <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a> <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a> <a href="c3ref/str.html">c3ref/str.html</a> <a href="c3ref/str_append.html">c3ref/str_append.html</a> <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a> <a href="c3ref/str_finish.html">c3ref/str_finish.html</a> <a href="c3ref/str_new.html">c3ref/str_new.html</a> <a href="c3ref/strglob.html">c3ref/strglob.html</a> <a href="c3ref/stricmp.html">c3ref/stricmp.html</a> <a href="c3ref/strlike.html">c3ref/strlike.html</a> <a href="c3ref/system_errno.html">c3ref/system_errno.html</a> <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> <a href="c3ref/test_control.html">c3ref/test_control.html</a> <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a> <a href="c3ref/txn_state.html">c3ref/txn_state.html</a> <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a> <a href="c3ref/user_data.html">c3ref/user_data.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/value_dup.html">c3ref/value_dup.html</a> <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a> <a href="c3ref/vtab.html">c3ref/vtab.html</a> <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a> <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a> <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a> <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a> <a href="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a> <a href="session/changegroup.html">session/changegroup.html</a> <a href="session/constlist.html">session/constlist.html</a> <a href="session/funclist.html">session/funclist.html</a> <a href="session/objlist.html">session/objlist.html</a> <a href="session/rebaser.html">session/rebaser.html</a> <a href="session/session.html">session/session.html</a> <a href="session/sqlite3changegroup_add.html">session/sqlite3changegroup_add.html</a> <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a> <a href="session/sqlite3changegroup_delete.html">session/sqlite3changegroup_delete.html</a> <a href="session/sqlite3changegroup_new.html">session/sqlite3changegroup_new.html</a> <a href="session/sqlite3changegroup_output.html">session/sqlite3changegroup_output.html</a> <a href="session/sqlite3rebaser_configure.html">session/sqlite3rebaser_configure.html</a> <a href="session/sqlite3rebaser_create.html">session/sqlite3rebaser_create.html</a> <a href="session/sqlite3rebaser_delete.html">session/sqlite3rebaser_delete.html</a> <a href="session/sqlite3rebaser_rebase.html">session/sqlite3rebaser_rebase.html</a> <a href="session/sqlite3session_attach.html">session/sqlite3session_attach.html</a> <a href="session/sqlite3session_config.html">session/sqlite3session_config.html</a> <a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a> <a href="session/sqlite3session_delete.html">session/sqlite3session_delete.html</a> <a href="session/sqlite3session_diff.html">session/sqlite3session_diff.html</a> <a href="session/sqlite3session_enable.html">session/sqlite3session_enable.html</a> <a href="session/sqlite3session_indirect.html">session/sqlite3session_indirect.html</a> <a href="session/sqlite3session_isempty.html">session/sqlite3session_isempty.html</a> <a href="session/sqlite3session_memory_used.html">session/sqlite3session_memory_used.html</a> <a href="session/sqlite3session_patchset.html">session/sqlite3session_patchset.html</a> <a href="session/sqlite3session_table_filter.html">session/sqlite3session_table_filter.html</a> </li>
+<li><a href="invalidutf.html">invalidutf.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="isolation.html">isolation.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="useovernet.html">useovernet.html</a> </li>
+<li><a href="json1.html">json1.html</a> &rarr;
+<a href="amalgamation.html">amalgamation.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="features.html">features.html</a> <a href="flextypegood.html">flextypegood.html</a> <a href="fullsql.html">fullsql.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="loadext.html">loadext.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtab.html">vtab.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="keyword_index.html">keyword_index.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="lang.html">lang.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="index.html">index.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="tclsqlite.html">tclsqlite.html</a> </li>
+<li><a href="lang_aggfunc.html">lang_aggfunc.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="floatingpoint.html">floatingpoint.html</a> <a href="fullsql.html">fullsql.html</a> <a href="index.html">index.html</a> <a href="json1.html">json1.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_with.html">lang_with.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="lang_altertable.html">lang_altertable.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="gencol.html">gencol.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_naming.html">lang_naming.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="schematab.html">schematab.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="lang_analyze.html">lang_analyze.html</a> &rarr;
+<a href="appfileformat.html">appfileformat.html</a> <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="dbhash.html">dbhash.html</a> <a href="doclist.html">doclist.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="queryplanner.html">queryplanner.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_attach.html">lang_attach.html</a> &rarr;
+<a href="atomiccommit.html">atomiccommit.html</a> <a href="bytecodevtab.html">bytecodevtab.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a> <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> <a href="c3ref/db_name.html">c3ref/db_name.html</a> <a href="c3ref/file_control.html">c3ref/file_control.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="dbpage.html">dbpage.html</a> <a href="different.html">different.html</a> <a href="doclist.html">doclist.html</a> <a href="fts3.html">fts3.html</a> <a href="fullsql.html">fullsql.html</a> <a href="inmemorydb.html">inmemorydb.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_detach.html">lang_detach.html</a> <a href="lang_naming.html">lang_naming.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="limits.html">limits.html</a> <a href="lockingv3.html">lockingv3.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="shortnames.html">shortnames.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="unionvtab.html">unionvtab.html</a> <a href="uri.html">uri.html</a> <a href="vfs.html">vfs.html</a> <a href="vtab.html">vtab.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="lang_comment.html">lang_comment.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_conflict.html">lang_conflict.html</a> &rarr;
+<a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/c_fail.html">c3ref/c_fail.html</a> <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="different.html">different.html</a> <a href="doclist.html">doclist.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_replace.html">lang_replace.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="stricttables.html">stricttables.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="tempfiles.html">tempfiles.html</a> </li>
+<li><a href="lang_corefunc.html">lang_corefunc.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="bindptr.html">bindptr.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a> <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="c3ref/libversion.html">c3ref/libversion.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="c3ref/mprintf.html">c3ref/mprintf.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="deterministic.html">deterministic.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="expridx.html">expridx.html</a> <a href="faq.html">faq.html</a> <a href="fts3.html">fts3.html</a> <a href="fts5.html">fts5.html</a> <a href="fullsql.html">fullsql.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="index.html">index.html</a> <a href="invalidutf.html">invalidutf.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="loadext.html">loadext.html</a> <a href="nulinstr.html">nulinstr.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="printf.html">printf.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="requirements.html">requirements.html</a> <a href="security.html">security.html</a> <a href="sitemap.html">sitemap.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="undoredo.html">undoredo.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="lang_createindex.html">lang_createindex.html</a> &rarr;
+<a href="aff_short.html">aff_short.html</a> <a href="appfileformat.html">appfileformat.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="expridx.html">expridx.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_dropindex.html">lang_dropindex.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="limits.html">limits.html</a> <a href="optoverview.html">optoverview.html</a> <a href="partialindex.html">partialindex.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="schematab.html">schematab.html</a> <a href="sitemap.html">sitemap.html</a> <a href="stricttables.html">stricttables.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="vtab.html">vtab.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="lang_createtable.html">lang_createtable.html</a> &rarr;
+<a href="autoinc.html">autoinc.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/randomness.html">c3ref/randomness.html</a> <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="conflict.html">conflict.html</a> <a href="csv.html">csv.html</a> <a href="datatype3.html">datatype3.html</a> <a href="deterministic.html">deterministic.html</a> <a href="doclist.html">doclist.html</a> <a href="eqp.html">eqp.html</a> <a href="expridx.html">expridx.html</a> <a href="faq.html">faq.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fts3.html">fts3.html</a> <a href="fts5.html">fts5.html</a> <a href="fullsql.html">fullsql.html</a> <a href="gencol.html">gencol.html</a> <a href="imposter.html">imposter.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_conflict.html">lang_conflict.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createvtab.html">lang_createvtab.html</a> <a href="lang_droptable.html">lang_droptable.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_indexedby.html">lang_indexedby.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="queryplanner.html">queryplanner.html</a> <a href="quirks.html">quirks.html</a> <a href="rbu.html">rbu.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="rowidtable.html">rowidtable.html</a> <a href="schematab.html">schematab.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqldiff.html">sqldiff.html</a> <a href="stricttables.html">stricttables.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="vtab.html">vtab.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="lang_createtrigger.html">lang_createtrigger.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_conflict.html">lang_conflict.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_droptrigger.html">lang_droptrigger.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_with.html">lang_with.html</a> <a href="opcode.html">opcode.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="schematab.html">schematab.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqldiff.html">sqldiff.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_createview.html">lang_createview.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="datatype3.html">datatype3.html</a> <a href="doclist.html">doclist.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_dropview.html">lang_dropview.html</a> <a href="lang_with.html">lang_with.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="schematab.html">schematab.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqldiff.html">sqldiff.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_createvtab.html">lang_createvtab.html</a> &rarr;
+<a href="cli.html">cli.html</a> <a href="dbstat.html">dbstat.html</a> <a href="doclist.html">doclist.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="fts3.html">fts3.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="schematab.html">schematab.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="lang_datefunc.html">lang_datefunc.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="datatype3.html">datatype3.html</a> <a href="deterministic.html">deterministic.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="optoverview.html">optoverview.html</a> <a href="quirks.html">quirks.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="lang_delete.html">lang_delete.html</a> &rarr;
+<a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fts3.html">fts3.html</a> <a href="fts5.html">fts5.html</a> <a href="fullsql.html">fullsql.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_droptable.html">lang_droptable.html</a> <a href="lang_indexedby.html">lang_indexedby.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_with.html">lang_with.html</a> <a href="pragma.html">pragma.html</a> <a href="rbu.html">rbu.html</a> <a href="requirements.html">requirements.html</a> <a href="rtree.html">rtree.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="lang_detach.html">lang_detach.html</a> &rarr;
+<a href="c3ref/db_filename.html">c3ref/db_filename.html</a> <a href="c3ref/db_name.html">c3ref/db_name.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="different.html">different.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="tempfiles.html">tempfiles.html</a> </li>
+<li><a href="lang_dropindex.html">lang_dropindex.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_naming.html">lang_naming.html</a> <a href="partialindex.html">partialindex.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_droptable.html">lang_droptable.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fts3.html">fts3.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createvtab.html">lang_createvtab.html</a> <a href="lang_naming.html">lang_naming.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="rtree.html">rtree.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="unionvtab.html">unionvtab.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="lang_droptrigger.html">lang_droptrigger.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_naming.html">lang_naming.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_dropview.html">lang_dropview.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_naming.html">lang_naming.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_explain.html">lang_explain.html</a> &rarr;
+<a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="debugging.html">debugging.html</a> <a href="different.html">different.html</a> <a href="doclist.html">doclist.html</a> <a href="eqp.html">eqp.html</a> <a href="howitworks.html">howitworks.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="opcode.html">opcode.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_expr.html">lang_expr.html</a> &rarr;
+<a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/profile.html">c3ref/profile.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="c3ref/strglob.html">c3ref/strglob.html</a> <a href="c3ref/strlike.html">c3ref/strlike.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="carray.html">carray.html</a> <a href="cintro.html">cintro.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="datatype3.html">datatype3.html</a> <a href="doclist.html">doclist.html</a> <a href="fts3.html">fts3.html</a> <a href="fullsql.html">fullsql.html</a> <a href="invalidutf.html">invalidutf.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="limits.html">limits.html</a> <a href="nulinstr.html">nulinstr.html</a> <a href="optoverview.html">optoverview.html</a> <a href="partialindex.html">partialindex.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rowvalue.html">rowvalue.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="vfs.html">vfs.html</a> <a href="vtab.html">vtab.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="lang_indexedby.html">lang_indexedby.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_insert.html">lang_insert.html</a> &rarr;
+<a href="autoinc.html">autoinc.html</a> <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="conflict.html">conflict.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="fts3.html">fts3.html</a> <a href="fts5.html">fts5.html</a> <a href="fullsql.html">fullsql.html</a> <a href="isolation.html">isolation.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_conflict.html">lang_conflict.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_replace.html">lang_replace.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="pragma.html">pragma.html</a> <a href="rbu.html">rbu.html</a> <a href="requirements.html">requirements.html</a> <a href="rtree.html">rtree.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="lang_keywords.html">lang_keywords.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang.html">lang.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="lang_mathfunc.html">lang_mathfunc.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="lang_naming.html">lang_naming.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_dropview.html">lang_dropview.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="lang_reindex.html">lang_reindex.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="dbhash.html">dbhash.html</a> <a href="deterministic.html">deterministic.html</a> <a href="doclist.html">doclist.html</a> <a href="fts3.html">fts3.html</a> <a href="fullsql.html">fullsql.html</a> <a href="imposter.html">imposter.html</a> <a href="lang_naming.html">lang_naming.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_replace.html">lang_replace.html</a> &rarr;
+<a href="capi3ref.html">capi3ref.html</a> <a href="different.html">different.html</a> <a href="doclist.html">doclist.html</a> <a href="fullsql.html">fullsql.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="lang_returning.html">lang_returning.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_savepoint.html">lang_savepoint.html</a> &rarr;
+<a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="doclist.html">doclist.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fullsql.html">fullsql.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="session.html">session.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_select.html">lang_select.html</a> &rarr;
+<a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a> <a href="c3ref/column_name.html">c3ref/column_name.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="datatype3.html">datatype3.html</a> <a href="dbstat.html">dbstat.html</a> <a href="doclist.html">doclist.html</a> <a href="eqp.html">eqp.html</a> <a href="fts3.html">fts3.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_indexedby.html">lang_indexedby.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="limits.html">limits.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="unionvtab.html">unionvtab.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="lang_transaction.html">lang_transaction.html</a> &rarr;
+<a href="asyncvfs.html">asyncvfs.html</a> <a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a> <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fts3.html">fts3.html</a> <a href="fullsql.html">fullsql.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_savepoint.html">lang_savepoint.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="lang_update.html">lang_update.html</a> &rarr;
+<a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/column_count.html">c3ref/column_count.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="conflict.html">conflict.html</a> <a href="doclist.html">doclist.html</a> <a href="fts3.html">fts3.html</a> <a href="fts5.html">fts5.html</a> <a href="fullsql.html">fullsql.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_indexedby.html">lang_indexedby.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="pragma.html">pragma.html</a> <a href="rbu.html">rbu.html</a> <a href="requirements.html">requirements.html</a> <a href="rowvalue.html">rowvalue.html</a> <a href="rtree.html">rtree.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="lang_upsert.html">lang_upsert.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="footprint.html">footprint.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_conflict.html">lang_conflict.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="pragma.html">pragma.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> </li>
+<li><a href="lang_vacuum.html">lang_vacuum.html</a> &rarr;
+<a href="backup.html">backup.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="dbhash.html">dbhash.html</a> <a href="dbstat.html">dbstat.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="fts3.html">fts3.html</a> <a href="fullsql.html">fullsql.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="imposter.html">imposter.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="mmap.html">mmap.html</a> <a href="pragma.html">pragma.html</a> <a href="rbu.html">rbu.html</a> <a href="requirements.html">requirements.html</a> <a href="rowidtable.html">rowidtable.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="lang_with.html">lang_with.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="csv.html">csv.html</a> <a href="cves.html">cves.html</a> <a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="series.html">series.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="versionnumbers.html">versionnumbers.html</a> </li>
+<li><a href="lemon.html">lemon.html</a> &rarr;
+<a href="amalgamation.html">amalgamation.html</a> <a href="arch.html">arch.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="limits.html">limits.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/limit.html">c3ref/limit.html</a> <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a> <a href="c3ref/str_new.html">c3ref/str_new.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="datatype3.html">datatype3.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="features.html">features.html</a> <a href="footprint.html">footprint.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fts5.html">fts5.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="pragma.html">pragma.html</a> <a href="rescode.html">rescode.html</a> <a href="security.html">security.html</a> <a href="sitemap.html">sitemap.html</a> <a href="testing.html">testing.html</a> </li>
+<li><a href="loadext.html">loadext.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/api_routines.html">c3ref/api_routines.html</a> <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="carray.html">carray.html</a> <a href="cintro.html">cintro.html</a> <a href="cksumvfs.html">cksumvfs.html</a> <a href="cli.html">cli.html</a> <a href="csv.html">csv.html</a> <a href="doclist.html">doclist.html</a> <a href="fts5.html">fts5.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="memstat.html">memstat.html</a> <a href="rescode.html">rescode.html</a> <a href="series.html">series.html</a> <a href="sitemap.html">sitemap.html</a> <a href="spellfix1.html">spellfix1.html</a> <a href="stmt.html">stmt.html</a> <a href="swarmvtab.html">swarmvtab.html</a> <a href="uintcseq.html">uintcseq.html</a> <a href="unionvtab.html">unionvtab.html</a> <a href="vtab.html">vtab.html</a> <a href="zipfile.html">zipfile.html</a> </li>
+<li><a href="lockingv3.html">lockingv3.html</a> &rarr;
+<a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="errlog.html">errlog.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> <a href="rescode.html">rescode.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="shortnames.html">shortnames.html</a> <a href="sitemap.html">sitemap.html</a> <a href="useovernet.html">useovernet.html</a> <a href="version3.html">version3.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="locrsf.html">locrsf.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="aff_short.html">aff_short.html</a> <a href="appfileformat.html">appfileformat.html</a> <a href="doclist.html">doclist.html</a> <a href="famous.html">famous.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lts.html">lts.html</a> <a href="onefile.html">onefile.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="lts.html">lts.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="versionnumbers.html">versionnumbers.html</a> </li>
+<li><a href="malloc.html">malloc.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a> <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="debugging.html">debugging.html</a> <a href="doclist.html">doclist.html</a> <a href="footprint.html">footprint.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="testing.html">testing.html</a> </li>
+<li><a href="memstat.html">memstat.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="mingw.html">mingw.html</a> &rarr;
+</li>
+<li><a href="mmap.html">mmap.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="fasterthanfs.html">fasterthanfs.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="mostdeployed.html">mostdeployed.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="appfileformat.html">appfileformat.html</a> <a href="doclist.html">doclist.html</a> <a href="famous.html">famous.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="testing.html">testing.html</a> </li>
+<li><a href="np1queryprob.html">np1queryprob.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="whentouse.html">whentouse.html</a> </li>
+<li><a href="nulinstr.html">nulinstr.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="quirks.html">quirks.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="nulls.html">nulls.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sessionintro.html">sessionintro.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="objlist.html">objlist.html</a> &rarr;
+<a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a> <a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a> <a href="c3ref/api_routines.html">c3ref/api_routines.html</a> <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a> <a href="c3ref/backup.html">c3ref/backup.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a> <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a> <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> <a href="c3ref/blob.html">c3ref/blob.html</a> <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a> <a href="c3ref/blob_close.html">c3ref/blob_close.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_read.html">c3ref/blob_read.html</a> <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> <a href="c3ref/c_abort.html">c3ref/c_abort.html</a> <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a> <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a> <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a> <a href="c3ref/c_any.html">c3ref/c_any.html</a> <a href="c3ref/c_blob.html">c3ref/c_blob.html</a> <a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a> <a href="c3ref/c_deny.html">c3ref/c_deny.html</a> <a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/c_fail.html">c3ref/c_fail.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a> <a href="c3ref/c_index_scan_unique.html">c3ref/c_index_scan_unique.html</a> <a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a> <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> <a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a> <a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a> <a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a> <a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a> <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a> <a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a> <a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a> <a href="c3ref/c_shm_nlock.html">c3ref/c_shm_nlock.html</a> <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a> <a href="c3ref/c_static.html">c3ref/c_static.html</a> <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a> <a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a> <a href="c3ref/c_trace.html">c3ref/c_trace.html</a> <a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a> <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> <a href="c3ref/c_win32_data_directory_type.html">c3ref/c_win32_data_directory_type.html</a> <a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a> <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/column_count.html">c3ref/column_count.html</a> <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a> <a href="c3ref/column_name.html">c3ref/column_name.html</a> <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a> <a href="c3ref/complete.html">c3ref/complete.html</a> <a href="c3ref/config.html">c3ref/config.html</a> <a href="c3ref/constlist.html">c3ref/constlist.html</a> <a href="c3ref/context.html">c3ref/context.html</a> <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a> <a href="c3ref/create_collation.html">c3ref/create_collation.html</a> <a href="c3ref/create_filename.html">c3ref/create_filename.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/create_module.html">c3ref/create_module.html</a> <a href="c3ref/data_count.html">c3ref/data_count.html</a> <a href="c3ref/data_directory.html">c3ref/data_directory.html</a> <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> <a href="c3ref/db_config.html">c3ref/db_config.html</a> <a href="c3ref/db_filename.html">c3ref/db_filename.html</a> <a href="c3ref/db_handle.html">c3ref/db_handle.html</a> <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a> <a href="c3ref/db_name.html">c3ref/db_name.html</a> <a href="c3ref/db_readonly.html">c3ref/db_readonly.html</a> <a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a> <a href="c3ref/db_status.html">c3ref/db_status.html</a> <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a> <a href="c3ref/deserialize.html">c3ref/deserialize.html</a> <a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a> <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> <a href="c3ref/errcode.html">c3ref/errcode.html</a> <a href="c3ref/exec.html">c3ref/exec.html</a> <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> <a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a> <a href="c3ref/file.html">c3ref/file.html</a> <a href="c3ref/file_control.html">c3ref/file_control.html</a> <a href="c3ref/filename.html">c3ref/filename.html</a> <a href="c3ref/filename_database.html">c3ref/filename_database.html</a> <a href="c3ref/finalize.html">c3ref/finalize.html</a> <a href="c3ref/free.html">c3ref/free.html</a> <a href="c3ref/free_table.html">c3ref/free_table.html</a> <a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a> <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> <a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="c3ref/int64.html">c3ref/int64.html</a> <a href="c3ref/interrupt.html">c3ref/interrupt.html</a> <a href="c3ref/intro.html">c3ref/intro.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a> <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="c3ref/libversion.html">c3ref/libversion.html</a> <a href="c3ref/limit.html">c3ref/limit.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="c3ref/log.html">c3ref/log.html</a> <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a> <a href="c3ref/module.html">c3ref/module.html</a> <a href="c3ref/mprintf.html">c3ref/mprintf.html</a> <a href="c3ref/mutex.html">c3ref/mutex.html</a> <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a> <a href="c3ref/mutex_held.html">c3ref/mutex_held.html</a> <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/overload_function.html">c3ref/overload_function.html</a> <a href="c3ref/pcache.html">c3ref/pcache.html</a> <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> <a href="c3ref/pcache_page.html">c3ref/pcache_page.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/profile.html">c3ref/profile.html</a> <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> <a href="c3ref/randomness.html">c3ref/randomness.html</a> <a href="c3ref/release_memory.html">c3ref/release_memory.html</a> <a href="c3ref/reset.html">c3ref/reset.html</a> <a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a> <a href="c3ref/result_blob.html">c3ref/result_blob.html</a> <a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a> <a href="c3ref/serialize.html">c3ref/serialize.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/set_last_insert_rowid.html">c3ref/set_last_insert_rowid.html</a> <a href="c3ref/sleep.html">c3ref/sleep.html</a> <a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="c3ref/snapshot_cmp.html">c3ref/snapshot_cmp.html</a> <a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a> <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> <a href="c3ref/soft_heap_limit.html">c3ref/soft_heap_limit.html</a> <a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> <a href="c3ref/status.html">c3ref/status.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt.html">c3ref/stmt.html</a> <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> <a href="c3ref/stmt_isexplain.html">c3ref/stmt_isexplain.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a> <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a> <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a> <a href="c3ref/str.html">c3ref/str.html</a> <a href="c3ref/str_append.html">c3ref/str_append.html</a> <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a> <a href="c3ref/str_finish.html">c3ref/str_finish.html</a> <a href="c3ref/str_new.html">c3ref/str_new.html</a> <a href="c3ref/strglob.html">c3ref/strglob.html</a> <a href="c3ref/stricmp.html">c3ref/stricmp.html</a> <a href="c3ref/strlike.html">c3ref/strlike.html</a> <a href="c3ref/system_errno.html">c3ref/system_errno.html</a> <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> <a href="c3ref/test_control.html">c3ref/test_control.html</a> <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a> <a href="c3ref/txn_state.html">c3ref/txn_state.html</a> <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a> <a href="c3ref/user_data.html">c3ref/user_data.html</a> <a href="c3ref/value.html">c3ref/value.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/value_dup.html">c3ref/value_dup.html</a> <a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a> <a href="c3ref/vtab.html">c3ref/vtab.html</a> <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a> <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a> <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a> <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a> <a href="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a> <a href="session/changegroup.html">session/changegroup.html</a> <a href="session/constlist.html">session/constlist.html</a> <a href="session/funclist.html">session/funclist.html</a> <a href="session/intro.html">session/intro.html</a> <a href="session/rebaser.html">session/rebaser.html</a> <a href="session/session.html">session/session.html</a> <a href="session/sqlite3changegroup_add.html">session/sqlite3changegroup_add.html</a> <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a> <a href="session/sqlite3changegroup_delete.html">session/sqlite3changegroup_delete.html</a> <a href="session/sqlite3changegroup_new.html">session/sqlite3changegroup_new.html</a> <a href="session/sqlite3changegroup_output.html">session/sqlite3changegroup_output.html</a> <a href="session/sqlite3rebaser_configure.html">session/sqlite3rebaser_configure.html</a> <a href="session/sqlite3rebaser_create.html">session/sqlite3rebaser_create.html</a> <a href="session/sqlite3rebaser_delete.html">session/sqlite3rebaser_delete.html</a> <a href="session/sqlite3rebaser_rebase.html">session/sqlite3rebaser_rebase.html</a> <a href="session/sqlite3session_attach.html">session/sqlite3session_attach.html</a> <a href="session/sqlite3session_config.html">session/sqlite3session_config.html</a> <a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a> <a href="session/sqlite3session_delete.html">session/sqlite3session_delete.html</a> <a href="session/sqlite3session_diff.html">session/sqlite3session_diff.html</a> <a href="session/sqlite3session_enable.html">session/sqlite3session_enable.html</a> <a href="session/sqlite3session_indirect.html">session/sqlite3session_indirect.html</a> <a href="session/sqlite3session_isempty.html">session/sqlite3session_isempty.html</a> <a href="session/sqlite3session_memory_used.html">session/sqlite3session_memory_used.html</a> <a href="session/sqlite3session_patchset.html">session/sqlite3session_patchset.html</a> <a href="session/sqlite3session_table_filter.html">session/sqlite3session_table_filter.html</a> </li>
+<li><a href="omitted.html">omitted.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="lang.html">lang.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="onefile.html">onefile.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="opcode.html">opcode.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="bytecodevtab.html">bytecodevtab.html</a> <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a> <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="debugging.html">debugging.html</a> <a href="different.html">different.html</a> <a href="doclist.html">doclist.html</a> <a href="howitworks.html">howitworks.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_explain.html">lang_explain.html</a> <a href="rowvalue.html">rowvalue.html</a> <a href="sitemap.html">sitemap.html</a> <a href="stmt.html">stmt.html</a> <a href="vdbe.html">vdbe.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="optoverview.html">optoverview.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="eqp.html">eqp.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="fts3.html">fts3.html</a> <a href="fullsql.html">fullsql.html</a> <a href="howitworks.html">howitworks.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_indexedby.html">lang_indexedby.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_with.html">lang_with.html</a> <a href="pragma.html">pragma.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="queryplanner.html">queryplanner.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="sitemap.html">sitemap.html</a> <a href="stmt.html">stmt.html</a> </li>
+<li><a href="partialindex.html">partialindex.html</a> &rarr;
+<a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="deterministic.html">deterministic.html</a> <a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="versionnumbers.html">versionnumbers.html</a> </li>
+<li><a href="pgszchng2016.html">pgszchng2016.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="php2004/page-001.html">php2004/page-001.html</a> &rarr;
+</li>
+<li><a href="pragma.html">pragma.html</a> &rarr;
+<a href="aff_short.html">aff_short.html</a> <a href="appfunc.html">appfunc.html</a> <a href="arch.html">arch.html</a> <a href="asyncvfs.html">asyncvfs.html</a> <a href="atomiccommit.html">atomiccommit.html</a> <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> <a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_deterministic.html">c3ref/c_deterministic.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a> <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a> <a href="c3ref/data_count.html">c3ref/data_count.html</a> <a href="c3ref/data_directory.html">c3ref/data_directory.html</a> <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> <a href="c3ref/limit.html">c3ref/limit.html</a> <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> <a href="c_interface.html">c_interface.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="cves.html">cves.html</a> <a href="dbhash.html">dbhash.html</a> <a href="debugging.html">debugging.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="faq.html">faq.html</a> <a href="fasterthanfs.html">fasterthanfs.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="fts3.html">fts3.html</a> <a href="gencol.html">gencol.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="imposter.html">imposter.html</a> <a href="index.html">index.html</a> <a href="inmemorydb.html">inmemorydb.html</a> <a href="invalidutf.html">invalidutf.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_analyze.html">lang_analyze.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_conflict.html">lang_conflict.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_explain.html">lang_explain.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="limits.html">limits.html</a> <a href="lockingv3.html">lockingv3.html</a> <a href="malloc.html">malloc.html</a> <a href="mmap.html">mmap.html</a> <a href="opcode.html">opcode.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pgszchng2016.html">pgszchng2016.html</a> <a href="psow.html">psow.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="quirks.html">quirks.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="rtree.html">rtree.html</a> <a href="security.html">security.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="sitemap.html">sitemap.html</a> <a href="stricttables.html">stricttables.html</a> <a href="syntaxdiagrams.html">syntaxdiagrams.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="testing.html">testing.html</a> <a href="vdbe.html">vdbe.html</a> <a href="vtab.html">vtab.html</a> <a href="vtablist.html">vtablist.html</a> <a href="wal.html">wal.html</a> <a href="walformat.html">walformat.html</a> <a href="withoutrowid.html">withoutrowid.html</a> </li>
+<li><a href="pressrelease-20071212.html">pressrelease-20071212.html</a> &rarr;
+</li>
+<li><a href="printf.html">printf.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="c3ref/mprintf.html">c3ref/mprintf.html</a> <a href="c3ref/str_append.html">c3ref/str_append.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="privatebranch.html">privatebranch.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="prosupport.html">prosupport.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="support.html">support.html</a> </li>
+<li><a href="psow.html">psow.html</a> &rarr;
+<a href="atomiccommit.html">atomiccommit.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="uri.html">uri.html</a> </li>
+<li><a href="qmplan.html">qmplan.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="queryplanner-ng.html">queryplanner-ng.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="eqp.html">eqp.html</a> <a href="howitworks.html">howitworks.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_indexedby.html">lang_indexedby.html</a> <a href="limits.html">limits.html</a> <a href="optoverview.html">optoverview.html</a> <a href="queryplanner.html">queryplanner.html</a> <a href="sitemap.html">sitemap.html</a> <a href="versionnumbers.html">versionnumbers.html</a> </li>
+<li><a href="queryplanner.html">queryplanner.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="eqp.html">eqp.html</a> <a href="fullsql.html">fullsql.html</a> <a href="imposter.html">imposter.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="optoverview.html">optoverview.html</a> <a href="queryplanner-ng.html">queryplanner-ng.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="quickstart.html">quickstart.html</a> &rarr;
+<a href="c3ref/intro.html">c3ref/intro.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="quirks.html">quirks.html</a> &rarr;
+<a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="omitted.html">omitted.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="rbu.html">rbu.html</a> &rarr;
+<a href="amalgamation.html">amalgamation.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="recovery.html">recovery.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="releasenotes310.html">releasenotes310.html</a> &rarr;
+</li>
+<li><a href="requirements.html">requirements.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="rescode.html">rescode.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="autoinc.html">autoinc.html</a> <a href="backup.html">backup.html</a> <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> <a href="c3ref/blob_open.html">c3ref/blob_open.html</a> <a href="c3ref/blob_read.html">c3ref/blob_read.html</a> <a href="c3ref/blob_write.html">c3ref/blob_write.html</a> <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> <a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a> <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_deny.html">c3ref/c_deny.html</a> <a href="c3ref/c_fail.html">c3ref/c_fail.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> <a href="c3ref/close.html">c3ref/close.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/config.html">c3ref/config.html</a> <a href="c3ref/constlist.html">c3ref/constlist.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="c3ref/data_count.html">c3ref/data_count.html</a> <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> <a href="c3ref/db_status.html">c3ref/db_status.html</a> <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> <a href="c3ref/errcode.html">c3ref/errcode.html</a> <a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a> <a href="c3ref/finalize.html">c3ref/finalize.html</a> <a href="c3ref/funclist.html">c3ref/funclist.html</a> <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a> <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> <a href="c3ref/initialize.html">c3ref/initialize.html</a> <a href="c3ref/interrupt.html">c3ref/interrupt.html</a> <a href="c3ref/intro.html">c3ref/intro.html</a> <a href="c3ref/io_methods.html">c3ref/io_methods.html</a> <a href="c3ref/load_extension.html">c3ref/load_extension.html</a> <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a> <a href="c3ref/objlist.html">c3ref/objlist.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/prepare.html">c3ref/prepare.html</a> <a href="c3ref/reset.html">c3ref/reset.html</a> <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="c3ref/status.html">c3ref/status.html</a> <a href="c3ref/step.html">c3ref/step.html</a> <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a> <a href="c3ref/system_errno.html">c3ref/system_errno.html</a> <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> <a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="errlog.html">errlog.html</a> <a href="faq.html">faq.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="fts5.html">fts5.html</a> <a href="imposter.html">imposter.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="loadext.html">loadext.html</a> <a href="malloc.html">malloc.html</a> <a href="opcode.html">opcode.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rtree.html">rtree.html</a> <a href="session.html">session.html</a> <a href="sitemap.html">sitemap.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="testing.html">testing.html</a> <a href="unlock_notify.html">unlock_notify.html</a> <a href="uri.html">uri.html</a> <a href="vfs.html">vfs.html</a> <a href="vtab.html">vtab.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="rowidtable.html">rowidtable.html</a> &rarr;
+<a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sessionintro.html">sessionintro.html</a> <a href="sitemap.html">sitemap.html</a> <a href="unionvtab.html">unionvtab.html</a> </li>
+<li><a href="rowvalue.html">rowvalue.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="fullsql.html">fullsql.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_update.html">lang_update.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="rtree.html">rtree.html</a> &rarr;
+<a href="aff_short.html">aff_short.html</a> <a href="amalgamation.html">amalgamation.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="floatingpoint.html">floatingpoint.html</a> <a href="fts5.html">fts5.html</a> <a href="fullsql.html">fullsql.html</a> <a href="geopoly.html">geopoly.html</a> <a href="howtocompile.html">howtocompile.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqldiff.html">sqldiff.html</a> <a href="th3.html">th3.html</a> <a href="vtab.html">vtab.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="schematab.html">schematab.html</a> &rarr;
+<a href="atomiccommit.html">atomiccommit.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="foreignkeys.html">foreignkeys.html</a> <a href="imposter.html">imposter.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_droptrigger.html">lang_droptrigger.html</a> <a href="lemon.html">lemon.html</a> <a href="pragma.html">pragma.html</a> <a href="security.html">security.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="sitemap.html">sitemap.html</a> <a href="unlock_notify.html">unlock_notify.html</a> </li>
+<li><a href="security.html">security.html</a> &rarr;
+<a href="cves.html">cves.html</a> <a href="doclist.html">doclist.html</a> <a href="hirely.html">hirely.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="selfcontained.html">selfcontained.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="series.html">series.html</a> &rarr;
+<a href="cli.html">cli.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="serverless.html">serverless.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="different.html">different.html</a> <a href="doclist.html">doclist.html</a> <a href="howitworks.html">howitworks.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="quirks.html">quirks.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="session.html">session.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="session/intro.html">session/intro.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/changegroup.html">session/changegroup.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="sessionintro.html">sessionintro.html</a> </li>
+<li><a href="session/constlist.html">session/constlist.html</a> &rarr;
+</li>
+<li><a href="session/funclist.html">session/funclist.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/intro.html">session/intro.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="sessionintro.html">sessionintro.html</a> <a href="sqldiff.html">sqldiff.html</a> </li>
+<li><a href="session/objlist.html">session/objlist.html</a> &rarr;
+</li>
+<li><a href="session/rebaser.html">session/rebaser.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/session.html">session/session.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/sqlite3changegroup_add.html">session/sqlite3changegroup_add.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/changegroup.html">session/changegroup.html</a> </li>
+<li><a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> </li>
+<li><a href="session/sqlite3changegroup_delete.html">session/sqlite3changegroup_delete.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/changegroup.html">session/changegroup.html</a> </li>
+<li><a href="session/sqlite3changegroup_new.html">session/sqlite3changegroup_new.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/changegroup.html">session/changegroup.html</a> </li>
+<li><a href="session/sqlite3changegroup_output.html">session/sqlite3changegroup_output.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/changegroup.html">session/changegroup.html</a> </li>
+<li><a href="session/sqlite3rebaser_configure.html">session/sqlite3rebaser_configure.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/sqlite3rebaser_create.html">session/sqlite3rebaser_create.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/sqlite3rebaser_delete.html">session/sqlite3rebaser_delete.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/sqlite3rebaser_rebase.html">session/sqlite3rebaser_rebase.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/sqlite3session_attach.html">session/sqlite3session_attach.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/sqlite3session_diff.html">session/sqlite3session_diff.html</a> <a href="sessionintro.html">sessionintro.html</a> </li>
+<li><a href="session/sqlite3session_config.html">session/sqlite3session_config.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/session.html">session/session.html</a> <a href="session/sqlite3session_delete.html">session/sqlite3session_delete.html</a> <a href="sessionintro.html">sessionintro.html</a> </li>
+<li><a href="session/sqlite3session_delete.html">session/sqlite3session_delete.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/session.html">session/session.html</a> <a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a> <a href="sessionintro.html">sessionintro.html</a> </li>
+<li><a href="session/sqlite3session_diff.html">session/sqlite3session_diff.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/sqlite3session_enable.html">session/sqlite3session_enable.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> </li>
+<li><a href="session/sqlite3session_indirect.html">session/sqlite3session_indirect.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> </li>
+<li><a href="session/sqlite3session_isempty.html">session/sqlite3session_isempty.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/sqlite3session_memory_used.html">session/sqlite3session_memory_used.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="session/sqlite3session_patchset.html">session/sqlite3session_patchset.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a> <a href="sessionintro.html">sessionintro.html</a> </li>
+<li><a href="session/sqlite3session_table_filter.html">session/sqlite3session_table_filter.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="sessionintro.html">sessionintro.html</a> &rarr;
+<a href="amalgamation.html">amalgamation.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="session.html">session.html</a> <a href="session/changegroup.html">session/changegroup.html</a> <a href="session/intro.html">session/intro.html</a> <a href="session/session.html">session/session.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqldiff.html">sqldiff.html</a> </li>
+<li><a href="sharedcache.html">sharedcache.html</a> &rarr;
+<a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a> <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a> <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="inmemorydb.html">inmemorydb.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_detach.html">lang_detach.html</a> <a href="pragma.html">pragma.html</a> <a href="rescode.html">rescode.html</a> <a href="sitemap.html">sitemap.html</a> <a href="uri.html">uri.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="shortnames.html">shortnames.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="sitemap.html">sitemap.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> </li>
+<li><a href="speed.html">speed.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="spellfix1.html">spellfix1.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="sqlanalyze.html">sqlanalyze.html</a> &rarr;
+<a href="dbstat.html">dbstat.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="sqlar.html">sqlar.html</a> &rarr;
+<a href="appfileformat.html">appfileformat.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="whentouse.html">whentouse.html</a> <a href="whynotgit.html">whynotgit.html</a> </li>
+<li><a href="sqldiff.html">sqldiff.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="rbu.html">rbu.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="stmt.html">stmt.html</a> &rarr;
+<a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="stricttables.html">stricttables.html</a> &rarr;
+<a href="datatype3.html">datatype3.html</a> <a href="doclist.html">doclist.html</a> <a href="flextypegood.html">flextypegood.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="pragma.html">pragma.html</a> <a href="quirks.html">quirks.html</a> <a href="recovery.html">recovery.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="support.html">support.html</a> &rarr;
+<a href="bindptr.html">bindptr.html</a> <a href="doclist.html">doclist.html</a> <a href="fasterthanfs.html">fasterthanfs.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="qmplan.html">qmplan.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="swarmvtab.html">swarmvtab.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="syntax.html">syntax.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="syntax/aggregate-function-invocation.html">syntax/aggregate-function-invocation.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_expr.html">lang_expr.html</a> </li>
+<li><a href="syntax/alter-table-stmt.html">syntax/alter-table-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> </li>
+<li><a href="syntax/analyze-stmt.html">syntax/analyze-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_analyze.html">lang_analyze.html</a> </li>
+<li><a href="syntax/attach-stmt.html">syntax/attach-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_attach.html">lang_attach.html</a> </li>
+<li><a href="syntax/begin-stmt.html">syntax/begin-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_transaction.html">lang_transaction.html</a> </li>
+<li><a href="syntax/column-constraint.html">syntax/column-constraint.html</a> &rarr;
+<a href="gencol.html">gencol.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_createtable.html">lang_createtable.html</a> </li>
+<li><a href="syntax/column-def.html">syntax/column-def.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_createtable.html">lang_createtable.html</a> </li>
+<li><a href="syntax/column-name-list.html">syntax/column-name-list.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> </li>
+<li><a href="syntax/comment-syntax.html">syntax/comment-syntax.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_comment.html">lang_comment.html</a> </li>
+<li><a href="syntax/commit-stmt.html">syntax/commit-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_transaction.html">lang_transaction.html</a> </li>
+<li><a href="syntax/common-table-expression.html">syntax/common-table-expression.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/compound-operator.html">syntax/compound-operator.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/compound-select-stmt.html">syntax/compound-select-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_select.html">lang_select.html</a> </li>
+<li><a href="syntax/conflict-clause.html">syntax/conflict-clause.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_conflict.html">lang_conflict.html</a> <a href="lang_createtable.html">lang_createtable.html</a> </li>
+<li><a href="syntax/create-index-stmt.html">syntax/create-index-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="partialindex.html">partialindex.html</a> </li>
+<li><a href="syntax/create-table-stmt.html">syntax/create-table-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtable.html">lang_createtable.html</a> </li>
+<li><a href="syntax/create-trigger-stmt.html">syntax/create-trigger-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> </li>
+<li><a href="syntax/create-view-stmt.html">syntax/create-view-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createview.html">lang_createview.html</a> </li>
+<li><a href="syntax/create-virtual-table-stmt.html">syntax/create-virtual-table-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createvtab.html">lang_createvtab.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="syntax/cte-table-name.html">syntax/cte-table-name.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_with.html">lang_with.html</a> </li>
+<li><a href="syntax/delete-stmt-limited.html">syntax/delete-stmt-limited.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_delete.html">lang_delete.html</a> </li>
+<li><a href="syntax/delete-stmt.html">syntax/delete-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_delete.html">lang_delete.html</a> </li>
+<li><a href="syntax/detach-stmt.html">syntax/detach-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_detach.html">lang_detach.html</a> </li>
+<li><a href="syntax/drop-index-stmt.html">syntax/drop-index-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_dropindex.html">lang_dropindex.html</a> </li>
+<li><a href="syntax/drop-table-stmt.html">syntax/drop-table-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_droptable.html">lang_droptable.html</a> </li>
+<li><a href="syntax/drop-trigger-stmt.html">syntax/drop-trigger-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_droptrigger.html">lang_droptrigger.html</a> </li>
+<li><a href="syntax/drop-view-stmt.html">syntax/drop-view-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_dropview.html">lang_dropview.html</a> </li>
+<li><a href="syntax/expr.html">syntax/expr.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/factored-select-stmt.html">syntax/factored-select-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_select.html">lang_select.html</a> </li>
+<li><a href="syntax/filter-clause.html">syntax/filter-clause.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/foreign-key-clause.html">syntax/foreign-key-clause.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_createtable.html">lang_createtable.html</a> </li>
+<li><a href="syntax/frame-spec.html">syntax/frame-spec.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/indexed-column.html">syntax/indexed-column.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="partialindex.html">partialindex.html</a> </li>
+<li><a href="syntax/insert-stmt.html">syntax/insert-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_insert.html">lang_insert.html</a> </li>
+<li><a href="syntax/join-clause.html">syntax/join-clause.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/join-constraint.html">syntax/join-constraint.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/join-operator.html">syntax/join-operator.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/literal-value.html">syntax/literal-value.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/numeric-literal.html">syntax/numeric-literal.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_expr.html">lang_expr.html</a> </li>
+<li><a href="syntax/ordering-term.html">syntax/ordering-term.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/over-clause.html">syntax/over-clause.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/pragma-stmt.html">syntax/pragma-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> </li>
+<li><a href="syntax/pragma-value.html">syntax/pragma-value.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="pragma.html">pragma.html</a> </li>
+<li><a href="syntax/qualified-table-name.html">syntax/qualified-table-name.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_indexedby.html">lang_indexedby.html</a> <a href="lang_update.html">lang_update.html</a> </li>
+<li><a href="syntax/raise-function.html">syntax/raise-function.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/recursive-cte.html">syntax/recursive-cte.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_with.html">lang_with.html</a> </li>
+<li><a href="syntax/reindex-stmt.html">syntax/reindex-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_reindex.html">lang_reindex.html</a> </li>
+<li><a href="syntax/release-stmt.html">syntax/release-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_savepoint.html">lang_savepoint.html</a> </li>
+<li><a href="syntax/result-column.html">syntax/result-column.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/returning-clause.html">syntax/returning-clause.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_update.html">lang_update.html</a> </li>
+<li><a href="syntax/rollback-stmt.html">syntax/rollback-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_savepoint.html">lang_savepoint.html</a> <a href="lang_transaction.html">lang_transaction.html</a> </li>
+<li><a href="syntax/savepoint-stmt.html">syntax/savepoint-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_savepoint.html">lang_savepoint.html</a> </li>
+<li><a href="syntax/select-core.html">syntax/select-core.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_select.html">lang_select.html</a> </li>
+<li><a href="syntax/select-stmt.html">syntax/select-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/signed-number.html">syntax/signed-number.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="pragma.html">pragma.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/simple-function-invocation.html">syntax/simple-function-invocation.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_expr.html">lang_expr.html</a> </li>
+<li><a href="syntax/simple-select-stmt.html">syntax/simple-select-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_select.html">lang_select.html</a> </li>
+<li><a href="syntax/sql-stmt-list.html">syntax/sql-stmt-list.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang.html">lang.html</a> </li>
+<li><a href="syntax/sql-stmt.html">syntax/sql-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang.html">lang.html</a> <a href="lang_explain.html">lang_explain.html</a> </li>
+<li><a href="syntax/table-constraint.html">syntax/table-constraint.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtable.html">lang_createtable.html</a> </li>
+<li><a href="syntax/table-options.html">syntax/table-options.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtable.html">lang_createtable.html</a> </li>
+<li><a href="syntax/table-or-subquery.html">syntax/table-or-subquery.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/type-name.html">syntax/type-name.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/update-stmt-limited.html">syntax/update-stmt-limited.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_update.html">lang_update.html</a> </li>
+<li><a href="syntax/update-stmt.html">syntax/update-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_update.html">lang_update.html</a> </li>
+<li><a href="syntax/upsert-clause.html">syntax/upsert-clause.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_upsert.html">lang_upsert.html</a> </li>
+<li><a href="syntax/vacuum-stmt.html">syntax/vacuum-stmt.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> </li>
+<li><a href="syntax/window-defn.html">syntax/window-defn.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_aggfunc.html">lang_aggfunc.html</a> <a href="lang_altertable.html">lang_altertable.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_createindex.html">lang_createindex.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_createtrigger.html">lang_createtrigger.html</a> <a href="lang_createview.html">lang_createview.html</a> <a href="lang_delete.html">lang_delete.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_insert.html">lang_insert.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_update.html">lang_update.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="lang_with.html">lang_with.html</a> <a href="partialindex.html">partialindex.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/window-function-invocation.html">syntax/window-function-invocation.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="windowfunctions.html">windowfunctions.html</a> </li>
+<li><a href="syntax/with-clause.html">syntax/with-clause.html</a> &rarr;
+<a href="keyword_index.html">keyword_index.html</a> <a href="lang_with.html">lang_with.html</a> </li>
+<li><a href="syntaxdiagrams.html">syntaxdiagrams.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang.html">lang.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="tclconf2004/page-001.html">tclconf2004/page-001.html</a> &rarr;
+</li>
+<li><a href="tclsqlite.html">tclsqlite.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="features.html">features.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="quickstart.html">quickstart.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="tempfiles.html">tempfiles.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="rescode.html">rescode.html</a> <a href="shortnames.html">shortnames.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="testing.html">testing.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="appfileformat.html">appfileformat.html</a> <a href="assert.html">assert.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="features.html">features.html</a> <a href="hirely.html">hirely.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lemon.html">lemon.html</a> <a href="limits.html">limits.html</a> <a href="lts.html">lts.html</a> <a href="malloc.html">malloc.html</a> <a href="qmplan.html">qmplan.html</a> <a href="sitemap.html">sitemap.html</a> <a href="support.html">support.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="th3.html">th3.html</a> </li>
+<li><a href="th3.html">th3.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="malloc.html">malloc.html</a> <a href="qmplan.html">qmplan.html</a> <a href="sitemap.html">sitemap.html</a> <a href="support.html">support.html</a> <a href="testing.html">testing.html</a> </li>
+<li><a href="threadsafe.html">threadsafe.html</a> &rarr;
+<a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a> <a href="c3ref/errcode.html">c3ref/errcode.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="faq.html">faq.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="transactional.html">transactional.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="doclist.html">doclist.html</a> <a href="fasterthanfs.html">fasterthanfs.html</a> <a href="features.html">features.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="useovernet.html">useovernet.html</a> </li>
+<li><a href="uintcseq.html">uintcseq.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="undoredo.html">undoredo.html</a> &rarr;
+<a href="aff_short.html">aff_short.html</a> <a href="affcase1.html">affcase1.html</a> <a href="appfileformat.html">appfileformat.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="unionvtab.html">unionvtab.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="swarmvtab.html">swarmvtab.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+<li><a href="unlock_notify.html">unlock_notify.html</a> &rarr;
+<a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="uri.html">uri.html</a> &rarr;
+<a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="inmemorydb.html">inmemorydb.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="psow.html">psow.html</a> <a href="requirements.html">requirements.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="shortnames.html">shortnames.html</a> <a href="sitemap.html">sitemap.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="vfs.html">vfs.html</a> <a href="wal.html">wal.html</a> <a href="walformat.html">walformat.html</a> </li>
+<li><a href="useovernet.html">useovernet.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="vdbe.html">vdbe.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="pragma.html">pragma.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="version3.html">version3.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="versionnumbers.html">versionnumbers.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="qmplan.html">qmplan.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="vfs.html">vfs.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="atomiccommit.html">atomiccommit.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/create_filename.html">c3ref/create_filename.html</a> <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> <a href="c3ref/db_filename.html">c3ref/db_filename.html</a> <a href="c3ref/filename.html">c3ref/filename.html</a> <a href="c3ref/filename_database.html">c3ref/filename_database.html</a> <a href="c3ref/free.html">c3ref/free.html</a> <a href="c3ref/open.html">c3ref/open.html</a> <a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a> <a href="c3ref/vfs.html">c3ref/vfs.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="cintro.html">cintro.html</a> <a href="cksumvfs.html">cksumvfs.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="loadext.html">loadext.html</a> <a href="pragma.html">pragma.html</a> <a href="psow.html">psow.html</a> <a href="rescode.html">rescode.html</a> <a href="selfcontained.html">selfcontained.html</a> <a href="sitemap.html">sitemap.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="testing.html">testing.html</a> <a href="uri.html">uri.html</a> <a href="vtablist.html">vtablist.html</a> <a href="wal.html">wal.html</a> <a href="walformat.html">walformat.html</a> </li>
+<li><a href="vtab.html">vtab.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="bytecodevtab.html">bytecodevtab.html</a> <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> <a href="c3ref/c_fail.html">c3ref/c_fail.html</a> <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a> <a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> <a href="c3ref/column_blob.html">c3ref/column_blob.html</a> <a href="c3ref/create_module.html">c3ref/create_module.html</a> <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a> <a href="c3ref/index_info.html">c3ref/index_info.html</a> <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="c3ref/module.html">c3ref/module.html</a> <a href="c3ref/overload_function.html">c3ref/overload_function.html</a> <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> <a href="c3ref/value_blob.html">c3ref/value_blob.html</a> <a href="c3ref/vtab.html">c3ref/vtab.html</a> <a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> <a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a> <a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a> <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a> <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> <a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="carray.html">carray.html</a> <a href="cintro.html">cintro.html</a> <a href="cli.html">cli.html</a> <a href="compile.html">compile.html</a> <a href="completion.html">completion.html</a> <a href="cves.html">cves.html</a> <a href="dbpage.html">dbpage.html</a> <a href="dbstat.html">dbstat.html</a> <a href="doclist.html">doclist.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="fts3.html">fts3.html</a> <a href="fts5.html">fts5.html</a> <a href="fullsql.html">fullsql.html</a> <a href="json1.html">json1.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createvtab.html">lang_createvtab.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_select.html">lang_select.html</a> <a href="lang_upsert.html">lang_upsert.html</a> <a href="loadext.html">loadext.html</a> <a href="memstat.html">memstat.html</a> <a href="pragma.html">pragma.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="rowidtable.html">rowidtable.html</a> <a href="rtree.html">rtree.html</a> <a href="schematab.html">schematab.html</a> <a href="security.html">security.html</a> <a href="series.html">series.html</a> <a href="sessionintro.html">sessionintro.html</a> <a href="sitemap.html">sitemap.html</a> <a href="spellfix1.html">spellfix1.html</a> <a href="sqldiff.html">sqldiff.html</a> <a href="stmt.html">stmt.html</a> <a href="unionvtab.html">unionvtab.html</a> <a href="vtablist.html">vtablist.html</a> <a href="zipfile.html">zipfile.html</a> </li>
+<li><a href="vtablist.html">vtablist.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="wal.html">wal.html</a> &rarr;
+<a href="arch.html">arch.html</a> <a href="asyncvfs.html">asyncvfs.html</a> <a href="atomiccommit.html">atomiccommit.html</a> <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> <a href="c3ref/snapshot.html">c3ref/snapshot.html</a> <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> <a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a> <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="errlog.html">errlog.html</a> <a href="fasterthanfs.html">fasterthanfs.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="formatchng.html">formatchng.html</a> <a href="howtocorrupt.html">howtocorrupt.html</a> <a href="isolation.html">isolation.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_attach.html">lang_attach.html</a> <a href="lang_transaction.html">lang_transaction.html</a> <a href="lang_vacuum.html">lang_vacuum.html</a> <a href="lockingv3.html">lockingv3.html</a> <a href="pragma.html">pragma.html</a> <a href="psow.html">psow.html</a> <a href="rbu.html">rbu.html</a> <a href="requirements.html">requirements.html</a> <a href="rescode.html">rescode.html</a> <a href="sharedcache.html">sharedcache.html</a> <a href="shortnames.html">shortnames.html</a> <a href="sitemap.html">sitemap.html</a> <a href="tclsqlite.html">tclsqlite.html</a> <a href="tempfiles.html">tempfiles.html</a> <a href="useovernet.html">useovernet.html</a> <a href="versionnumbers.html">versionnumbers.html</a> <a href="walformat.html">walformat.html</a> </li>
+<li><a href="walformat.html">walformat.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="rescode.html">rescode.html</a> <a href="sitemap.html">sitemap.html</a> <a href="vfs.html">vfs.html</a> <a href="wal.html">wal.html</a> </li>
+<li><a href="whentouse.html">whentouse.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="famous.html">famous.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="np1queryprob.html">np1queryprob.html</a> <a href="quirks.html">quirks.html</a> <a href="sitemap.html">sitemap.html</a> <a href="tempfiles.html">tempfiles.html</a> </li>
+<li><a href="whyc.html">whyc.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="whynotgit.html">whynotgit.html</a> &rarr;
+<a href="doclist.html">doclist.html</a> <a href="requirements.html">requirements.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="windowfunctions.html">windowfunctions.html</a> &rarr;
+<a href="appfunc.html">appfunc.html</a> <a href="c3ref/create_function.html">c3ref/create_function.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="compile.html">compile.html</a> <a href="doclist.html">doclist.html</a> <a href="docs.html">docs.html</a> <a href="features.html">features.html</a> <a href="footprint.html">footprint.html</a> <a href="fullsql.html">fullsql.html</a> <a href="index.html">index.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_corefunc.html">lang_corefunc.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="lang_returning.html">lang_returning.html</a> <a href="lang_with.html">lang_with.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="withoutrowid.html">withoutrowid.html</a> &rarr;
+<a href="autoinc.html">autoinc.html</a> <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> <a href="c3ref/update_hook.html">c3ref/update_hook.html</a> <a href="capi3ref.html">capi3ref.html</a> <a href="doclist.html">doclist.html</a> <a href="fileformat2.html">fileformat2.html</a> <a href="fullsql.html">fullsql.html</a> <a href="imposter.html">imposter.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="lang_createtable.html">lang_createtable.html</a> <a href="lang_expr.html">lang_expr.html</a> <a href="optoverview.html">optoverview.html</a> <a href="pragma.html">pragma.html</a> <a href="queryplanner.html">queryplanner.html</a> <a href="quirks.html">quirks.html</a> <a href="requirements.html">requirements.html</a> <a href="rowidtable.html">rowidtable.html</a> <a href="schematab.html">schematab.html</a> <a href="sessionintro.html">sessionintro.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqldiff.html">sqldiff.html</a> <a href="stricttables.html">stricttables.html</a> <a href="vtab.html">vtab.html</a> </li>
+<li><a href="zeroconf.html">zeroconf.html</a> &rarr;
+<a href="about.html">about.html</a> <a href="doclist.html">doclist.html</a> <a href="features.html">features.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="serverless.html">serverless.html</a> <a href="sitemap.html">sitemap.html</a> </li>
+<li><a href="zipfile.html">zipfile.html</a> &rarr;
+<a href="cli.html">cli.html</a> <a href="cves.html">cves.html</a> <a href="doclist.html">doclist.html</a> <a href="keyword_index.html">keyword_index.html</a> <a href="sitemap.html">sitemap.html</a> <a href="sqlar.html">sqlar.html</a> <a href="vtablist.html">vtablist.html</a> </li>
+</ul><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/wrap.tcl?m=86a88e65fd2db6eba">2022-12-07 17:49:21</a> UTC </small></i></p>
+
diff --git a/www/doc_target_crossref.html b/www/doc_target_crossref.html
new file mode 100644
index 0000000..80d33a1
--- /dev/null
+++ b/www/doc_target_crossref.html
@@ -0,0 +1,2022 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Target Crossreference</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<ul>
+<li><a href="34to35.html">34to35.html</a> &rarr; 34to35</li>
+<li><a href="35to36.html">35to36.html</a> &rarr; 35to36</li>
+<li><a href="aff_short.html">aff_short.html</a> &rarr; affshort {file-format benefits}</li>
+<li><a href="affcase1.html">affcase1.html</a> &rarr; {OpenOffice case study} {What If OpenOffice Used SQLite}</li>
+<li><a href="affcase1.html#smaller">affcase1.html#smaller</a> &rarr; {SQLite Archive smaller than ZIP}</li>
+<li><a href="amalgamation.html">amalgamation.html</a> &rarr; {SQLite amalgamation source file} amalgamation {the amalgamation}</li>
+<li><a href="amalgamation.html#amal32k">amalgamation.html#amal32k</a> &rarr; {split amalgamation}</li>
+<li><a href="appfileformat.html">appfileformat.html</a> &rarr; {Application File Format} appformat {application file format} {application file-format}</li>
+<li><a href="appfunc.html">appfunc.html</a> &rarr; {application-defined SQL function} {application-defined SQL functions} {custom SQL function} {custom SQL functions}</li>
+<li><a href="appfunc.html#sec">appfunc.html#sec</a> &rarr; {application-defined function attacks}</li>
+<li><a href="assert.html">assert.html</a> &rarr; {The Use Of assert In SQLite}</li>
+<li><a href="asyncvfs.html">asyncvfs.html</a> &rarr; {asynchronous I/O backend} {asynchronous VFS}</li>
+<li><a href="atomiccommit.html">atomiccommit.html</a> &rarr; {Atomic Commit} {atomic commit}</li>
+<li><a href="atomiccommit.html#sect_9_0">atomiccommit.html#sect_9_0</a> &rarr; {Things That Can Go Wrong}</li>
+<li><a href="autoinc.html">autoinc.html</a> &rarr; AUTOINCREMENT</li>
+<li><a href="backup.html">backup.html</a> &rarr; {Using the SQLite Online Backup API} {backup API}</li>
+<li><a href="bindptr.html">bindptr.html</a> &rarr; {pointer passing interface} {pointer passing interfaces} {pointer value}</li>
+<li><a href="bindptr.html#ptrleak">bindptr.html#ptrleak</a> &rarr; {pointer leak} {pointer leaks}</li>
+<li><a href="bindptr.html#ptrtyp">bindptr.html#ptrtyp</a> &rarr; {pointer types}</li>
+<li><a href="books.html">books.html</a> &rarr; {books about SQLite}</li>
+<li><a href="bytecodevtab.html">bytecodevtab.html</a> &rarr; bcvtab {bytecode and tables_used virtual tables} {bytecode virtual table} {tables_used virtual table}</li>
+<li><a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a> &rarr; sqlite3_aggregate_context</li>
+<li><a href="c3ref/aggregate_count.html">c3ref/aggregate_count.html</a> &rarr; sqlite3_aggregate_count sqlite3_expired sqlite3_global_recover sqlite3_memory_alarm sqlite3_thread_cleanup sqlite3_transfer_bindings</li>
+<li><a href="c3ref/api_routines.html">c3ref/api_routines.html</a> &rarr; sqlite3_api_routines</li>
+<li><a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a> &rarr; sqlite3_auto_extension</li>
+<li><a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a> &rarr; sqlite3_autovacuum_pages</li>
+<li><a href="c3ref/backup.html">c3ref/backup.html</a> &rarr; sqlite3_backup</li>
+<li><a href="c3ref/backup_finish.html#sqlite3backupfinish">c3ref/backup_finish.html#sqlite3backupfinish</a> &rarr; sqlite3_backup_finish</li>
+<li><a href="c3ref/backup_finish.html#sqlite3backupinit">c3ref/backup_finish.html#sqlite3backupinit</a> &rarr; sqlite3_backup_init</li>
+<li><a href="c3ref/backup_finish.html#sqlite3backuppagecount">c3ref/backup_finish.html#sqlite3backuppagecount</a> &rarr; sqlite3_backup_pagecount</li>
+<li><a href="c3ref/backup_finish.html#sqlite3backupremaining">c3ref/backup_finish.html#sqlite3backupremaining</a> &rarr; sqlite3_backup_remaining</li>
+<li><a href="c3ref/backup_finish.html#sqlite3backupstep">c3ref/backup_finish.html#sqlite3backupstep</a> &rarr; sqlite3_backup_step</li>
+<li><a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a> &rarr; {SQL parameter} {SQL parameters} {host parameter} {host parameter name} {host parameters} {parameter binding} sqlite3_bind_blob sqlite3_bind_blob64 sqlite3_bind_double sqlite3_bind_int sqlite3_bind_int64 sqlite3_bind_null sqlite3_bind_pointer sqlite3_bind_text sqlite3_bind_text16 sqlite3_bind_text64 sqlite3_bind_value sqlite3_bind_zeroblob sqlite3_bind_zeroblob64</li>
+<li><a href="c3ref/bind_blob.html#byteorderdeterminationrules">c3ref/bind_blob.html#byteorderdeterminationrules</a> &rarr; {byte-order determination rules}</li>
+<li><a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a> &rarr; sqlite3_bind_parameter_count</li>
+<li><a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a> &rarr; sqlite3_bind_parameter_index</li>
+<li><a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a> &rarr; sqlite3_bind_parameter_name</li>
+<li><a href="c3ref/blob.html">c3ref/blob.html</a> &rarr; {BLOB handle} {BLOB handles} sqlite3_blob</li>
+<li><a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a> &rarr; sqlite3_blob_bytes</li>
+<li><a href="c3ref/blob_close.html">c3ref/blob_close.html</a> &rarr; sqlite3_blob_close</li>
+<li><a href="c3ref/blob_open.html">c3ref/blob_open.html</a> &rarr; sqlite3_blob_open</li>
+<li><a href="c3ref/blob_read.html">c3ref/blob_read.html</a> &rarr; sqlite3_blob_read</li>
+<li><a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a> &rarr; sqlite3_blob_reopen</li>
+<li><a href="c3ref/blob_write.html">c3ref/blob_write.html</a> &rarr; sqlite3_blob_write</li>
+<li><a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a> &rarr; {busy handler} {busy-handler callback} sqlite3_busy_handler</li>
+<li><a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a> &rarr; sqlite3_busy_timeout</li>
+<li><a href="c3ref/c_abort.html">c3ref/c_abort.html</a> &rarr; {result code definitions}</li>
+<li><a href="c3ref/c_abort_rollback.html">c3ref/c_abort_rollback.html</a> &rarr; SQLITE_OK_SYMLINK {extended result code definitions}</li>
+<li><a href="c3ref/c_access_exists.html">c3ref/c_access_exists.html</a> &rarr; SQLITE_ACCESS_EXISTS SQLITE_ACCESS_READ SQLITE_ACCESS_READWRITE</li>
+<li><a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a> &rarr; SQLITE_ALTER_TABLE SQLITE_ANALYZE SQLITE_ATTACH SQLITE_COPY SQLITE_CREATE_INDEX SQLITE_CREATE_TABLE SQLITE_CREATE_TEMP_INDEX SQLITE_CREATE_TEMP_TABLE SQLITE_CREATE_TEMP_TRIGGER SQLITE_CREATE_TEMP_VIEW SQLITE_CREATE_TRIGGER SQLITE_CREATE_VIEW SQLITE_CREATE_VTABLE SQLITE_DELETE SQLITE_DETACH SQLITE_DROP_INDEX SQLITE_DROP_TABLE SQLITE_DROP_TEMP_INDEX SQLITE_DROP_TEMP_TABLE SQLITE_DROP_TEMP_TRIGGER SQLITE_DROP_TEMP_VIEW SQLITE_DROP_TRIGGER SQLITE_DROP_VIEW SQLITE_DROP_VTABLE SQLITE_FUNCTION SQLITE_INSERT SQLITE_PRAGMA SQLITE_READ SQLITE_RECURSIVE SQLITE_REINDEX SQLITE_SAVEPOINT SQLITE_SELECT SQLITE_TRANSACTION SQLITE_UPDATE</li>
+<li><a href="c3ref/c_any.html">c3ref/c_any.html</a> &rarr; SQLITE_ANY SQLITE_UTF16 SQLITE_UTF16BE SQLITE_UTF16LE SQLITE_UTF16_ALIGNED SQLITE_UTF8</li>
+<li><a href="c3ref/c_blob.html">c3ref/c_blob.html</a> &rarr; SQLITE_BLOB SQLITE_FLOAT SQLITE_INTEGER SQLITE_NULL SQLITE_TEXT</li>
+<li><a href="c3ref/c_checkpoint_full.html">c3ref/c_checkpoint_full.html</a> &rarr; SQLITE_CHECKPOINT_FULL SQLITE_CHECKPOINT_PASSIVE SQLITE_CHECKPOINT_RESTART SQLITE_CHECKPOINT_TRUNCATE {checkpoint mode}</li>
+<li><a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a> &rarr; {configuration option}</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigcoveringindexscan">c3ref/c_config_covering_index_scan.html#sqliteconfigcoveringindexscan</a> &rarr; SQLITE_CONFIG_COVERING_INDEX_SCAN</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmalloc">c3ref/c_config_covering_index_scan.html#sqliteconfiggetmalloc</a> &rarr; SQLITE_CONFIG_GETMALLOC</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex">c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex</a> &rarr; SQLITE_CONFIG_GETMUTEX</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache">c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache</a> &rarr; SQLITE_CONFIG_GETPCACHE</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2">c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2</a> &rarr; SQLITE_CONFIG_GETPCACHE2</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">c3ref/c_config_covering_index_scan.html#sqliteconfigheap</a> &rarr; SQLITE_CONFIG_HEAP</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">c3ref/c_config_covering_index_scan.html#sqliteconfiglog</a> &rarr; SQLITE_CONFIG_LOG</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside</a> &rarr; SQLITE_CONFIG_LOOKASIDE</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc</a> &rarr; SQLITE_CONFIG_MALLOC</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize</a> &rarr; SQLITE_CONFIG_MEMDB_MAXSIZE</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus</a> &rarr; SQLITE_CONFIG_MEMSTATUS</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize</a> &rarr; SQLITE_CONFIG_MMAP_SIZE</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread</a> &rarr; SQLITE_CONFIG_MULTITHREAD</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">c3ref/c_config_covering_index_scan.html#sqliteconfigmutex</a> &rarr; SQLITE_CONFIG_MUTEX</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache</a> &rarr; SQLITE_CONFIG_PAGECACHE</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache">c3ref/c_config_covering_index_scan.html#sqliteconfigpcache</a> &rarr; SQLITE_CONFIG_PCACHE</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2</a> &rarr; SQLITE_CONFIG_PCACHE2</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz</a> &rarr; SQLITE_CONFIG_PCACHE_HDRSZ</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz</a> &rarr; SQLITE_CONFIG_PMASZ</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigscratch">c3ref/c_config_covering_index_scan.html#sqliteconfigscratch</a> &rarr; SQLITE_CONFIG_SCRATCH</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">c3ref/c_config_covering_index_scan.html#sqliteconfigserialized</a> &rarr; SQLITE_CONFIG_SERIALIZED</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread</a> &rarr; SQLITE_CONFIG_SINGLETHREAD</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsmallmalloc">c3ref/c_config_covering_index_scan.html#sqliteconfigsmallmalloc</a> &rarr; SQLITE_CONFIG_SMALL_MALLOC</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsorterrefsize">c3ref/c_config_covering_index_scan.html#sqliteconfigsorterrefsize</a> &rarr; SQLITE_CONFIG_SORTERREF_SIZE</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsqllog">c3ref/c_config_covering_index_scan.html#sqliteconfigsqllog</a> &rarr; SQLITE_CONFIG_SQLLOG</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill</a> &rarr; SQLITE_CONFIG_STMTJRNL_SPILL</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">c3ref/c_config_covering_index_scan.html#sqliteconfiguri</a> &rarr; SQLITE_CONFIG_URI</li>
+<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigwin32heapsize">c3ref/c_config_covering_index_scan.html#sqliteconfigwin32heapsize</a> &rarr; SQLITE_CONFIG_WIN32_HEAPSIZE</li>
+<li><a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a> &rarr; SQLITE_DBCONFIG_MAX</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive</a> &rarr; SQLITE_DBCONFIG_DEFENSIVE</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl</a> &rarr; SQLITE_DBCONFIG_DQS_DDL</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml</a> &rarr; SQLITE_DBCONFIG_DQS_DML</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefkey">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefkey</a> &rarr; SQLITE_DBCONFIG_ENABLE_FKEY</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer</a> &rarr; SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension</a> &rarr; SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg</a> &rarr; SQLITE_DBCONFIG_ENABLE_QPSG</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger</a> &rarr; SQLITE_DBCONFIG_ENABLE_TRIGGER</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview</a> &rarr; SQLITE_DBCONFIG_ENABLE_VIEW</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable</a> &rarr; SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat</a> &rarr; SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside</a> &rarr; SQLITE_DBCONFIG_LOOKASIDE</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname">c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname</a> &rarr; SQLITE_DBCONFIG_MAINDBNAME</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose">c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose</a> &rarr; SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase">c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase</a> &rarr; SQLITE_DBCONFIG_RESET_DATABASE</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtriggereqp">c3ref/c_dbconfig_defensive.html#sqlitedbconfigtriggereqp</a> &rarr; SQLITE_DBCONFIG_TRIGGER_EQP</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema</a> &rarr; SQLITE_DBCONFIG_TRUSTED_SCHEMA</li>
+<li><a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema">c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema</a> &rarr; SQLITE_DBCONFIG_WRITABLE_SCHEMA</li>
+<li><a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a> &rarr; {SQLITE_DBSTATUS options} SQLITE_DBSTATUS_MAX</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit">c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit</a> &rarr; SQLITE_DBSTATUS_CACHE_HIT</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss">c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss</a> &rarr; SQLITE_DBSTATUS_CACHE_MISS</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill">c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill</a> &rarr; SQLITE_DBSTATUS_CACHE_SPILL</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused">c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused</a> &rarr; SQLITE_DBSTATUS_CACHE_USED</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared">c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared</a> &rarr; SQLITE_DBSTATUS_CACHE_USED_SHARED</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite">c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite</a> &rarr; SQLITE_DBSTATUS_CACHE_WRITE</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks</a> &rarr; SQLITE_DBSTATUS_DEFERRED_FKS</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit">c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit</a> &rarr; SQLITE_DBSTATUS_LOOKASIDE_HIT</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull">c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull</a> &rarr; SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize">c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize</a> &rarr; SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasideused">c3ref/c_dbstatus_options.html#sqlitedbstatuslookasideused</a> &rarr; SQLITE_DBSTATUS_LOOKASIDE_USED</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused">c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused</a> &rarr; SQLITE_DBSTATUS_SCHEMA_USED</li>
+<li><a href="c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused">c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused</a> &rarr; SQLITE_DBSTATUS_STMT_USED</li>
+<li><a href="c3ref/c_deny.html">c3ref/c_deny.html</a> &rarr; SQLITE_DENY SQLITE_IGNORE</li>
+<li><a href="c3ref/c_deserialize_freeonclose.html">c3ref/c_deserialize_freeonclose.html</a> &rarr; SQLITE_DESERIALIZE_FREEONCLOSE SQLITE_DESERIALIZE_READONLY SQLITE_DESERIALIZE_RESIZEABLE</li>
+<li><a href="c3ref/c_deterministic.html#sqlitedeterministic">c3ref/c_deterministic.html#sqlitedeterministic</a> &rarr; SQLITE_DETERMINISTIC</li>
+<li><a href="c3ref/c_deterministic.html#sqlitedirectonly">c3ref/c_deterministic.html#sqlitedirectonly</a> &rarr; SQLITE_DIRECTONLY</li>
+<li><a href="c3ref/c_deterministic.html#sqliteinnocuous">c3ref/c_deterministic.html#sqliteinnocuous</a> &rarr; SQLITE_INNOCUOUS</li>
+<li><a href="c3ref/c_deterministic.html#sqlitesubtype">c3ref/c_deterministic.html#sqlitesubtype</a> &rarr; SQLITE_SUBTYPE</li>
+<li><a href="c3ref/c_fail.html">c3ref/c_fail.html</a> &rarr; SQLITE_FAIL SQLITE_REPLACE SQLITE_ROLLBACK {conflict resolution mode}</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a> &rarr; SQLITE_FCNTL_GET_LOCKPROXYFILE SQLITE_FCNTL_LAST_ERRNO SQLITE_FCNTL_PDB SQLITE_FCNTL_RESERVE_BYTES SQLITE_FCNTL_SET_LOCKPROXYFILE {file control opcode} {file control opcodes}</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite</a> &rarr; SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler</a> &rarr; SQLITE_FCNTL_BUSYHANDLER</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize</a> &rarr; SQLITE_FCNTL_CHUNK_SIZE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptdone">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptdone</a> &rarr; SQLITE_FCNTL_CKPT_DONE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptstart">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptstart</a> &rarr; SQLITE_FCNTL_CKPT_START</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile</a> &rarr; SQLITE_FCNTL_CKSM_FILE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite</a> &rarr; SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo</a> &rarr; SQLITE_FCNTL_COMMIT_PHASETWO</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion</a> &rarr; SQLITE_FCNTL_DATA_VERSION</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlexternalreader">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlexternalreader</a> &rarr; SQLITE_FCNTL_EXTERNAL_READER</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer</a> &rarr; SQLITE_FCNTL_FILE_POINTER</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlhasmoved">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlhasmoved</a> &rarr; SQLITE_FCNTL_HAS_MOVED</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer</a> &rarr; SQLITE_FCNTL_JOURNAL_POINTER</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate</a> &rarr; SQLITE_FCNTL_LOCKSTATE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllocktimeout">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllocktimeout</a> &rarr; SQLITE_FCNTL_LOCK_TIMEOUT</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize</a> &rarr; SQLITE_FCNTL_MMAP_SIZE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite</a> &rarr; SQLITE_FCNTL_OVERWRITE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal</a> &rarr; SQLITE_FCNTL_PERSIST_WAL</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite</a> &rarr; SQLITE_FCNTL_POWERSAFE_OVERWRITE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma</a> &rarr; SQLITE_FCNTL_PRAGMA</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrbu">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrbu</a> &rarr; SQLITE_FCNTL_RBU</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache</a> &rarr; SQLITE_FCNTL_RESET_CACHE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite</a> &rarr; SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint</a> &rarr; SQLITE_FCNTL_SIZE_HINT</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit</a> &rarr; SQLITE_FCNTL_SIZE_LIMIT</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync</a> &rarr; SQLITE_FCNTL_SYNC</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted</a> &rarr; SQLITE_FCNTL_SYNC_OMITTED</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename</a> &rarr; SQLITE_FCNTL_TEMPFILENAME</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace</a> &rarr; SQLITE_FCNTL_TRACE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname</a> &rarr; SQLITE_FCNTL_VFSNAME</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer</a> &rarr; SQLITE_FCNTL_VFS_POINTER</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwalblock">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwalblock</a> &rarr; SQLITE_FCNTL_WAL_BLOCK</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry</a> &rarr; SQLITE_FCNTL_WIN32_AV_RETRY</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle</a> &rarr; SQLITE_FCNTL_WIN32_GET_HANDLE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32sethandle">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32sethandle</a> &rarr; SQLITE_FCNTL_WIN32_SET_HANDLE</li>
+<li><a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlzipvfs">c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlzipvfs</a> &rarr; SQLITE_FCNTL_ZIPVFS</li>
+<li><a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a> &rarr; SQLITE_INDEX_CONSTRAINT_EQ SQLITE_INDEX_CONSTRAINT_FUNCTION SQLITE_INDEX_CONSTRAINT_GE SQLITE_INDEX_CONSTRAINT_GLOB SQLITE_INDEX_CONSTRAINT_GT SQLITE_INDEX_CONSTRAINT_IS SQLITE_INDEX_CONSTRAINT_ISNOT SQLITE_INDEX_CONSTRAINT_ISNOTNULL SQLITE_INDEX_CONSTRAINT_ISNULL SQLITE_INDEX_CONSTRAINT_LE SQLITE_INDEX_CONSTRAINT_LIKE SQLITE_INDEX_CONSTRAINT_LIMIT SQLITE_INDEX_CONSTRAINT_LT SQLITE_INDEX_CONSTRAINT_MATCH SQLITE_INDEX_CONSTRAINT_NE SQLITE_INDEX_CONSTRAINT_OFFSET SQLITE_INDEX_CONSTRAINT_REGEXP</li>
+<li><a href="c3ref/c_index_scan_unique.html">c3ref/c_index_scan_unique.html</a> &rarr; SQLITE_INDEX_SCAN_UNIQUE</li>
+<li><a href="c3ref/c_iocap_atomic.html">c3ref/c_iocap_atomic.html</a> &rarr; SQLITE_IOCAP_ATOMIC SQLITE_IOCAP_ATOMIC16K SQLITE_IOCAP_ATOMIC1K SQLITE_IOCAP_ATOMIC2K SQLITE_IOCAP_ATOMIC32K SQLITE_IOCAP_ATOMIC4K SQLITE_IOCAP_ATOMIC512 SQLITE_IOCAP_ATOMIC64K SQLITE_IOCAP_ATOMIC8K SQLITE_IOCAP_BATCH_ATOMIC SQLITE_IOCAP_IMMUTABLE SQLITE_IOCAP_POWERSAFE_OVERWRITE SQLITE_IOCAP_SAFE_APPEND SQLITE_IOCAP_SEQUENTIAL SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN</li>
+<li><a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a> &rarr; {limit categories} {limit category}</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitattached">c3ref/c_limit_attached.html#sqlitelimitattached</a> &rarr; SQLITE_LIMIT_ATTACHED</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitcolumn">c3ref/c_limit_attached.html#sqlitelimitcolumn</a> &rarr; SQLITE_LIMIT_COLUMN</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitcompoundselect">c3ref/c_limit_attached.html#sqlitelimitcompoundselect</a> &rarr; SQLITE_LIMIT_COMPOUND_SELECT</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitexprdepth">c3ref/c_limit_attached.html#sqlitelimitexprdepth</a> &rarr; SQLITE_LIMIT_EXPR_DEPTH</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitfunctionarg">c3ref/c_limit_attached.html#sqlitelimitfunctionarg</a> &rarr; SQLITE_LIMIT_FUNCTION_ARG</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitlength">c3ref/c_limit_attached.html#sqlitelimitlength</a> &rarr; SQLITE_LIMIT_LENGTH</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitlikepatternlength">c3ref/c_limit_attached.html#sqlitelimitlikepatternlength</a> &rarr; SQLITE_LIMIT_LIKE_PATTERN_LENGTH</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitsqllength">c3ref/c_limit_attached.html#sqlitelimitsqllength</a> &rarr; SQLITE_LIMIT_SQL_LENGTH</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimittriggerdepth">c3ref/c_limit_attached.html#sqlitelimittriggerdepth</a> &rarr; SQLITE_LIMIT_TRIGGER_DEPTH</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitvariablenumber">c3ref/c_limit_attached.html#sqlitelimitvariablenumber</a> &rarr; SQLITE_LIMIT_VARIABLE_NUMBER</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitvdbeop">c3ref/c_limit_attached.html#sqlitelimitvdbeop</a> &rarr; SQLITE_LIMIT_VDBE_OP</li>
+<li><a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">c3ref/c_limit_attached.html#sqlitelimitworkerthreads</a> &rarr; SQLITE_LIMIT_WORKER_THREADS</li>
+<li><a href="c3ref/c_lock_exclusive.html">c3ref/c_lock_exclusive.html</a> &rarr; SQLITE_LOCK_EXCLUSIVE SQLITE_LOCK_NONE SQLITE_LOCK_PENDING SQLITE_LOCK_RESERVED SQLITE_LOCK_SHARED</li>
+<li><a href="c3ref/c_mutex_fast.html">c3ref/c_mutex_fast.html</a> &rarr; SQLITE_MUTEX_FAST SQLITE_MUTEX_RECURSIVE SQLITE_MUTEX_STATIC_APP1 SQLITE_MUTEX_STATIC_APP2 SQLITE_MUTEX_STATIC_APP3 SQLITE_MUTEX_STATIC_LRU SQLITE_MUTEX_STATIC_LRU2 SQLITE_MUTEX_STATIC_MAIN SQLITE_MUTEX_STATIC_MEM SQLITE_MUTEX_STATIC_MEM2 SQLITE_MUTEX_STATIC_OPEN SQLITE_MUTEX_STATIC_PMEM SQLITE_MUTEX_STATIC_PRNG SQLITE_MUTEX_STATIC_VFS1 SQLITE_MUTEX_STATIC_VFS2 SQLITE_MUTEX_STATIC_VFS3</li>
+<li><a href="c3ref/c_open_autoproxy.html">c3ref/c_open_autoproxy.html</a> &rarr; SQLITE_OPEN_AUTOPROXY SQLITE_OPEN_CREATE SQLITE_OPEN_DELETEONCLOSE SQLITE_OPEN_EXCLUSIVE SQLITE_OPEN_EXRESCODE SQLITE_OPEN_FULLMUTEX SQLITE_OPEN_MAIN_DB SQLITE_OPEN_MAIN_JOURNAL SQLITE_OPEN_MEMORY SQLITE_OPEN_NOFOLLOW SQLITE_OPEN_NOMUTEX SQLITE_OPEN_PRIVATECACHE SQLITE_OPEN_READONLY SQLITE_OPEN_READWRITE SQLITE_OPEN_SHAREDCACHE SQLITE_OPEN_SUBJOURNAL SQLITE_OPEN_SUPER_JOURNAL SQLITE_OPEN_TEMP_DB SQLITE_OPEN_TEMP_JOURNAL SQLITE_OPEN_TRANSIENT_DB SQLITE_OPEN_URI SQLITE_OPEN_WAL</li>
+<li><a href="c3ref/c_prepare_normalize.html#sqlitepreparenormalize">c3ref/c_prepare_normalize.html#sqlitepreparenormalize</a> &rarr; SQLITE_PREPARE_NORMALIZE</li>
+<li><a href="c3ref/c_prepare_normalize.html#sqlitepreparenovtab">c3ref/c_prepare_normalize.html#sqlitepreparenovtab</a> &rarr; SQLITE_PREPARE_NO_VTAB</li>
+<li><a href="c3ref/c_prepare_normalize.html#sqlitepreparepersistent">c3ref/c_prepare_normalize.html#sqlitepreparepersistent</a> &rarr; SQLITE_PREPARE_PERSISTENT</li>
+<li><a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a> &rarr; {scanstatus options}</li>
+<li><a href="c3ref/c_scanstat_est.html#sqlitescanstatest">c3ref/c_scanstat_est.html#sqlitescanstatest</a> &rarr; SQLITE_SCANSTAT_EST</li>
+<li><a href="c3ref/c_scanstat_est.html#sqlitescanstatexplain">c3ref/c_scanstat_est.html#sqlitescanstatexplain</a> &rarr; SQLITE_SCANSTAT_EXPLAIN</li>
+<li><a href="c3ref/c_scanstat_est.html#sqlitescanstatname">c3ref/c_scanstat_est.html#sqlitescanstatname</a> &rarr; SQLITE_SCANSTAT_NAME</li>
+<li><a href="c3ref/c_scanstat_est.html#sqlitescanstatnloop">c3ref/c_scanstat_est.html#sqlitescanstatnloop</a> &rarr; SQLITE_SCANSTAT_NLOOP</li>
+<li><a href="c3ref/c_scanstat_est.html#sqlitescanstatnvisit">c3ref/c_scanstat_est.html#sqlitescanstatnvisit</a> &rarr; SQLITE_SCANSTAT_NVISIT</li>
+<li><a href="c3ref/c_scanstat_est.html#sqlitescanstatselectid">c3ref/c_scanstat_est.html#sqlitescanstatselectid</a> &rarr; SQLITE_SCANSTAT_SELECTID</li>
+<li><a href="c3ref/c_serialize_nocopy.html">c3ref/c_serialize_nocopy.html</a> &rarr; SQLITE_SERIALIZE_NOCOPY</li>
+<li><a href="c3ref/c_shm_exclusive.html">c3ref/c_shm_exclusive.html</a> &rarr; SQLITE_SHM_EXCLUSIVE SQLITE_SHM_LOCK SQLITE_SHM_SHARED SQLITE_SHM_UNLOCK</li>
+<li><a href="c3ref/c_shm_nlock.html">c3ref/c_shm_nlock.html</a> &rarr; SQLITE_SHM_NLOCK</li>
+<li><a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a> &rarr; SQLITE_SOURCE_ID SQLITE_VERSION SQLITE_VERSION_NUMBER</li>
+<li><a href="c3ref/c_static.html">c3ref/c_static.html</a> &rarr; SQLITE_STATIC SQLITE_TRANSIENT</li>
+<li><a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a> &rarr; {status parameters}</li>
+<li><a href="c3ref/c_status_malloc_count.html#sqlitestatusmalloccount">c3ref/c_status_malloc_count.html#sqlitestatusmalloccount</a> &rarr; SQLITE_STATUS_MALLOC_COUNT</li>
+<li><a href="c3ref/c_status_malloc_count.html#sqlitestatusmallocsize">c3ref/c_status_malloc_count.html#sqlitestatusmallocsize</a> &rarr; SQLITE_STATUS_MALLOC_SIZE</li>
+<li><a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">c3ref/c_status_malloc_count.html#sqlitestatusmemoryused</a> &rarr; SQLITE_STATUS_MEMORY_USED</li>
+<li><a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow">c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow</a> &rarr; SQLITE_STATUS_PAGECACHE_OVERFLOW</li>
+<li><a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize</a> &rarr; SQLITE_STATUS_PAGECACHE_SIZE</li>
+<li><a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheused">c3ref/c_status_malloc_count.html#sqlitestatuspagecacheused</a> &rarr; SQLITE_STATUS_PAGECACHE_USED</li>
+<li><a href="c3ref/c_status_malloc_count.html#sqlitestatusparserstack">c3ref/c_status_malloc_count.html#sqlitestatusparserstack</a> &rarr; SQLITE_STATUS_PARSER_STACK</li>
+<li><a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchoverflow">c3ref/c_status_malloc_count.html#sqlitestatusscratchoverflow</a> &rarr; SQLITE_STATUS_SCRATCH_OVERFLOW</li>
+<li><a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchsize">c3ref/c_status_malloc_count.html#sqlitestatusscratchsize</a> &rarr; SQLITE_STATUS_SCRATCH_SIZE</li>
+<li><a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchused">c3ref/c_status_malloc_count.html#sqlitestatusscratchused</a> &rarr; SQLITE_STATUS_SCRATCH_USED</li>
+<li><a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a> &rarr; {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters} SQLITE_STMTSTATUS_FILTER_HIT</li>
+<li><a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusautoindex">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusautoindex</a> &rarr; SQLITE_STMTSTATUS_AUTOINDEX</li>
+<li><a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfilterhit">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfilterhit</a> &rarr; {SQLITE_STMTSTATUS_FILTER HIT}</li>
+<li><a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfiltermiss">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfiltermiss</a> &rarr; SQLITE_STMTSTATUS_FILTER_MISS</li>
+<li><a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfullscanstep">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfullscanstep</a> &rarr; SQLITE_STMTSTATUS_FULLSCAN_STEP</li>
+<li><a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused</a> &rarr; SQLITE_STMTSTATUS_MEMUSED</li>
+<li><a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare</a> &rarr; SQLITE_STMTSTATUS_REPREPARE</li>
+<li><a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun</a> &rarr; SQLITE_STMTSTATUS_RUN</li>
+<li><a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatussort">c3ref/c_stmtstatus_counter.html#sqlitestmtstatussort</a> &rarr; SQLITE_STMTSTATUS_SORT</li>
+<li><a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep</a> &rarr; SQLITE_STMTSTATUS_VM_STEP</li>
+<li><a href="c3ref/c_sync_dataonly.html">c3ref/c_sync_dataonly.html</a> &rarr; SQLITE_SYNC_DATAONLY SQLITE_SYNC_FULL SQLITE_SYNC_NORMAL</li>
+<li><a href="c3ref/c_testctrl_always.html">c3ref/c_testctrl_always.html</a> &rarr; SQLITE_TESTCTRL_ALWAYS SQLITE_TESTCTRL_ASSERT SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS SQLITE_TESTCTRL_BITVEC_TEST SQLITE_TESTCTRL_BYTEORDER SQLITE_TESTCTRL_EXPLAIN_STMT SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS SQLITE_TESTCTRL_FAULT_INSTALL SQLITE_TESTCTRL_FIRST SQLITE_TESTCTRL_IMPOSTER SQLITE_TESTCTRL_INTERNAL_FUNCTIONS SQLITE_TESTCTRL_ISINIT SQLITE_TESTCTRL_ISKEYWORD SQLITE_TESTCTRL_LAST SQLITE_TESTCTRL_LOCALTIME_FAULT SQLITE_TESTCTRL_LOGEST SQLITE_TESTCTRL_NEVER_CORRUPT SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD SQLITE_TESTCTRL_OPTIMIZATIONS SQLITE_TESTCTRL_PARSER_COVERAGE SQLITE_TESTCTRL_PENDING_BYTE SQLITE_TESTCTRL_PRNG_RESET SQLITE_TESTCTRL_PRNG_RESTORE SQLITE_TESTCTRL_PRNG_SAVE SQLITE_TESTCTRL_PRNG_SEED SQLITE_TESTCTRL_RESERVE SQLITE_TESTCTRL_RESULT_INTREAL SQLITE_TESTCTRL_SCRATCHMALLOC SQLITE_TESTCTRL_SEEK_COUNT SQLITE_TESTCTRL_SORTER_MMAP SQLITE_TESTCTRL_TRACEFLAGS SQLITE_TESTCTRL_TUNE SQLITE_TESTCTRL_VDBE_COVERAGE</li>
+<li><a href="c3ref/c_trace.html">c3ref/c_trace.html</a> &rarr; SQLITE_TRACE</li>
+<li><a href="c3ref/c_trace.html#sqlitetraceclose">c3ref/c_trace.html#sqlitetraceclose</a> &rarr; SQLITE_TRACE_CLOSE</li>
+<li><a href="c3ref/c_trace.html#sqlitetraceprofile">c3ref/c_trace.html#sqlitetraceprofile</a> &rarr; SQLITE_TRACE_PROFILE</li>
+<li><a href="c3ref/c_trace.html#sqlitetracerow">c3ref/c_trace.html#sqlitetracerow</a> &rarr; SQLITE_TRACE_ROW</li>
+<li><a href="c3ref/c_trace.html#sqlitetracestmt">c3ref/c_trace.html#sqlitetracestmt</a> &rarr; SQLITE_TRACE_STMT</li>
+<li><a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a> &rarr; {transaction state}</li>
+<li><a href="c3ref/c_txn_none.html#sqlitetxnnone">c3ref/c_txn_none.html#sqlitetxnnone</a> &rarr; SQLITE_TXN_NONE</li>
+<li><a href="c3ref/c_txn_none.html#sqlitetxnread">c3ref/c_txn_none.html#sqlitetxnread</a> &rarr; SQLITE_TXN_READ</li>
+<li><a href="c3ref/c_txn_none.html#sqlitetxnwrite">c3ref/c_txn_none.html#sqlitetxnwrite</a> &rarr; SQLITE_TXN_WRITE</li>
+<li><a href="c3ref/c_vtab_constraint_support.html">c3ref/c_vtab_constraint_support.html</a> &rarr; {virtual table configuration option} {virtual table configuration options}</li>
+<li><a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport</a> &rarr; SQLITE_VTAB_CONSTRAINT_SUPPORT</li>
+<li><a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly</a> &rarr; SQLITE_VTAB_DIRECTONLY</li>
+<li><a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous</a> &rarr; SQLITE_VTAB_INNOCUOUS</li>
+<li><a href="c3ref/c_win32_data_directory_type.html">c3ref/c_win32_data_directory_type.html</a> &rarr; SQLITE_WIN32_DATA_DIRECTORY_TYPE SQLITE_WIN32_TEMP_DIRECTORY_TYPE</li>
+<li><a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a> &rarr; sqlite3_cancel_auto_extension</li>
+<li><a href="c3ref/changes.html">c3ref/changes.html</a> &rarr; sqlite3_changes sqlite3_changes64</li>
+<li><a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a> &rarr; sqlite3_clear_bindings</li>
+<li><a href="c3ref/close.html">c3ref/close.html</a> &rarr; sqlite3_close sqlite3_close_v2</li>
+<li><a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a> &rarr; sqlite3_collation_needed sqlite3_collation_needed16</li>
+<li><a href="c3ref/column_blob.html">c3ref/column_blob.html</a> &rarr; {column access functions} sqlite3_column_blob sqlite3_column_bytes sqlite3_column_bytes16 sqlite3_column_double sqlite3_column_int sqlite3_column_int64 sqlite3_column_text sqlite3_column_text16 sqlite3_column_type sqlite3_column_value</li>
+<li><a href="c3ref/column_count.html">c3ref/column_count.html</a> &rarr; sqlite3_column_count</li>
+<li><a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a> &rarr; sqlite3_column_database_name sqlite3_column_database_name16 sqlite3_column_origin_name sqlite3_column_origin_name16 sqlite3_column_table_name sqlite3_column_table_name16</li>
+<li><a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a> &rarr; sqlite3_column_decltype sqlite3_column_decltype16</li>
+<li><a href="c3ref/column_name.html">c3ref/column_name.html</a> &rarr; sqlite3_column_name sqlite3_column_name16</li>
+<li><a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a> &rarr; sqlite3_commit_hook sqlite3_rollback_hook</li>
+<li><a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a> &rarr; sqlite3_compileoption_get sqlite3_compileoption_used</li>
+<li><a href="c3ref/complete.html">c3ref/complete.html</a> &rarr; sqlite3_complete sqlite3_complete16</li>
+<li><a href="c3ref/config.html">c3ref/config.html</a> &rarr; sqlite3_config</li>
+<li><a href="c3ref/context.html">c3ref/context.html</a> &rarr; sqlite3_context</li>
+<li><a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a> &rarr; sqlite3_context_db_handle</li>
+<li><a href="c3ref/create_collation.html">c3ref/create_collation.html</a> &rarr; sqlite3_create_collation sqlite3_create_collation16 sqlite3_create_collation_v2</li>
+<li><a href="c3ref/create_filename.html">c3ref/create_filename.html</a> &rarr; sqlite3_create_filename sqlite3_free_filename</li>
+<li><a href="c3ref/create_function.html">c3ref/create_function.html</a> &rarr; {function creation routines} sqlite3_create_function sqlite3_create_function16 sqlite3_create_function_v2 sqlite3_create_window_function</li>
+<li><a href="c3ref/create_module.html">c3ref/create_module.html</a> &rarr; sqlite3_create_module sqlite3_create_module_v2</li>
+<li><a href="c3ref/data_count.html">c3ref/data_count.html</a> &rarr; sqlite3_data_count</li>
+<li><a href="c3ref/data_directory.html">c3ref/data_directory.html</a> &rarr; sqlite3_data_directory</li>
+<li><a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a> &rarr; sqlite3_database_file_object</li>
+<li><a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a> &rarr; sqlite3_db_cacheflush</li>
+<li><a href="c3ref/db_config.html">c3ref/db_config.html</a> &rarr; sqlite3_db_config</li>
+<li><a href="c3ref/db_filename.html">c3ref/db_filename.html</a> &rarr; sqlite3_db_filename</li>
+<li><a href="c3ref/db_handle.html">c3ref/db_handle.html</a> &rarr; sqlite3_db_handle</li>
+<li><a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a> &rarr; sqlite3_db_mutex</li>
+<li><a href="c3ref/db_name.html">c3ref/db_name.html</a> &rarr; sqlite3_db_name</li>
+<li><a href="c3ref/db_readonly.html">c3ref/db_readonly.html</a> &rarr; sqlite3_db_readonly</li>
+<li><a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a> &rarr; sqlite3_db_release_memory</li>
+<li><a href="c3ref/db_status.html">c3ref/db_status.html</a> &rarr; sqlite3_db_status</li>
+<li><a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a> &rarr; sqlite3_declare_vtab</li>
+<li><a href="c3ref/deserialize.html">c3ref/deserialize.html</a> &rarr; sqlite3_deserialize</li>
+<li><a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a> &rarr; sqlite3_drop_modules</li>
+<li><a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a> &rarr; sqlite3_enable_load_extension</li>
+<li><a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a> &rarr; sqlite3_enable_shared_cache</li>
+<li><a href="c3ref/errcode.html">c3ref/errcode.html</a> &rarr; sqlite3_errcode sqlite3_errmsg sqlite3_errmsg16 sqlite3_error_offset sqlite3_errstr sqlite3_extended_errcode</li>
+<li><a href="c3ref/exec.html">c3ref/exec.html</a> &rarr; sqlite3_exec</li>
+<li><a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a> &rarr; sqlite3_expanded_sql sqlite3_normalized_sql sqlite3_sql</li>
+<li><a href="c3ref/experimental.html">c3ref/experimental.html</a> &rarr; deprecated experimental</li>
+<li><a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a> &rarr; sqlite3_extended_result_codes</li>
+<li><a href="c3ref/file.html">c3ref/file.html</a> &rarr; sqlite3_file</li>
+<li><a href="c3ref/file_control.html">c3ref/file_control.html</a> &rarr; {file control} sqlite3_file_control</li>
+<li><a href="c3ref/filename.html">c3ref/filename.html</a> &rarr; sqlite3_filename</li>
+<li><a href="c3ref/filename_database.html">c3ref/filename_database.html</a> &rarr; sqlite3_filename_database sqlite3_filename_journal sqlite3_filename_wal</li>
+<li><a href="c3ref/finalize.html">c3ref/finalize.html</a> &rarr; sqlite3_finalize</li>
+<li><a href="c3ref/free.html">c3ref/free.html</a> &rarr; sqlite3_free sqlite3_malloc sqlite3_malloc64 sqlite3_msize sqlite3_realloc sqlite3_realloc64</li>
+<li><a href="c3ref/free_table.html">c3ref/free_table.html</a> &rarr; sqlite3_free_table sqlite3_get_table</li>
+<li><a href="c3ref/funclist.html">c3ref/funclist.html</a> &rarr; {C-API function list} capi3ref_funclist</li>
+<li><a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a> &rarr; {autocommit mode} sqlite3_get_autocommit</li>
+<li><a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a> &rarr; sqlite3_get_auxdata sqlite3_set_auxdata</li>
+<li><a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a> &rarr; sqlite3_hard_heap_limit64 sqlite3_soft_heap_limit64</li>
+<li><a href="c3ref/index_info.html">c3ref/index_info.html</a> &rarr; sqlite3_index_info</li>
+<li><a href="c3ref/initialize.html">c3ref/initialize.html</a> &rarr; sqlite3_initialize sqlite3_os_end sqlite3_os_init sqlite3_shutdown</li>
+<li><a href="c3ref/int64.html">c3ref/int64.html</a> &rarr; sqlite3_int64 sqlite3_uint64 sqlite_int64 sqlite_uint64</li>
+<li><a href="c3ref/interrupt.html">c3ref/interrupt.html</a> &rarr; sqlite3_interrupt</li>
+<li><a href="c3ref/intro.html">c3ref/intro.html</a> &rarr; {C-language Interface} capi3ref</li>
+<li><a href="c3ref/io_methods.html">c3ref/io_methods.html</a> &rarr; sqlite3_io_methods</li>
+<li><a href="c3ref/keyword_check.html">c3ref/keyword_check.html</a> &rarr; sqlite3_keyword_check sqlite3_keyword_count sqlite3_keyword_name</li>
+<li><a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a> &rarr; sqlite3_last_insert_rowid</li>
+<li><a href="c3ref/libversion.html">c3ref/libversion.html</a> &rarr; sqlite3_libversion sqlite3_libversion_number sqlite3_sourceid sqlite3_version</li>
+<li><a href="c3ref/limit.html">c3ref/limit.html</a> &rarr; sqlite3_limit</li>
+<li><a href="c3ref/load_extension.html">c3ref/load_extension.html</a> &rarr; sqlite3_load_extension</li>
+<li><a href="c3ref/log.html">c3ref/log.html</a> &rarr; sqlite3_log</li>
+<li><a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a> &rarr; sqlite3_mem_methods</li>
+<li><a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a> &rarr; sqlite3_memory_highwater sqlite3_memory_used</li>
+<li><a href="c3ref/module.html">c3ref/module.html</a> &rarr; sqlite3_module {virtual table module}</li>
+<li><a href="c3ref/mprintf.html">c3ref/mprintf.html</a> &rarr; sqlite3_mprintf sqlite3_snprintf sqlite3_vmprintf sqlite3_vsnprintf</li>
+<li><a href="c3ref/mutex.html">c3ref/mutex.html</a> &rarr; sqlite3_mutex</li>
+<li><a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a> &rarr; sqlite3_mutex_alloc sqlite3_mutex_enter sqlite3_mutex_free sqlite3_mutex_leave sqlite3_mutex_try</li>
+<li><a href="c3ref/mutex_held.html">c3ref/mutex_held.html</a> &rarr; sqlite3_mutex_held sqlite3_mutex_notheld</li>
+<li><a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a> &rarr; sqlite3_mutex_methods</li>
+<li><a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a> &rarr; sqlite3_next_stmt</li>
+<li><a href="c3ref/open.html">c3ref/open.html</a> &rarr; sqlite3_open sqlite3_open16 sqlite3_open_v2</li>
+<li><a href="c3ref/open.html#coreuriqueryparameters">c3ref/open.html#coreuriqueryparameters</a> &rarr; {core URI query parameters}</li>
+<li><a href="c3ref/open.html#openexrescode">c3ref/open.html#openexrescode</a> &rarr; OPEN_EXRESCODE</li>
+<li><a href="c3ref/open.html#opennofollow">c3ref/open.html#opennofollow</a> &rarr; OPEN_NOFOLLOW</li>
+<li><a href="c3ref/open.html#urifilenameexamples">c3ref/open.html#urifilenameexamples</a> &rarr; {URI filename examples}</li>
+<li><a href="c3ref/open.html#urifilenamesinsqlite3open">c3ref/open.html#urifilenamesinsqlite3open</a> &rarr; {URI filenames in sqlite3_open}</li>
+<li><a href="c3ref/overload_function.html">c3ref/overload_function.html</a> &rarr; sqlite3_overload_function</li>
+<li><a href="c3ref/pcache.html">c3ref/pcache.html</a> &rarr; sqlite3_pcache</li>
+<li><a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a> &rarr; {page cache} sqlite3_pcache_methods2</li>
+<li><a href="c3ref/pcache_methods2.html#thexcachesizepagecachemethod">c3ref/pcache_methods2.html#thexcachesizepagecachemethod</a> &rarr; {the xCachesize page cache method}</li>
+<li><a href="c3ref/pcache_methods2.html#thexcreatepagecachemethods">c3ref/pcache_methods2.html#thexcreatepagecachemethods</a> &rarr; {the xCreate page cache methods}</li>
+<li><a href="c3ref/pcache_methods2.html#thexdestroypagecachemethod">c3ref/pcache_methods2.html#thexdestroypagecachemethod</a> &rarr; {the xDestroy page cache method}</li>
+<li><a href="c3ref/pcache_methods2.html#thexfetchpagecachemethods">c3ref/pcache_methods2.html#thexfetchpagecachemethods</a> &rarr; {the xFetch page cache methods}</li>
+<li><a href="c3ref/pcache_methods2.html#thexinitpagecachemethod">c3ref/pcache_methods2.html#thexinitpagecachemethod</a> &rarr; {the xInit page cache method}</li>
+<li><a href="c3ref/pcache_methods2.html#thexpagecountpagecachemethods">c3ref/pcache_methods2.html#thexpagecountpagecachemethods</a> &rarr; {the xPagecount page cache methods}</li>
+<li><a href="c3ref/pcache_methods2.html#thexrekeypagecachemethods">c3ref/pcache_methods2.html#thexrekeypagecachemethods</a> &rarr; {the xRekey page cache methods}</li>
+<li><a href="c3ref/pcache_methods2.html#thexshrinkpagecachemethod">c3ref/pcache_methods2.html#thexshrinkpagecachemethod</a> &rarr; {the xShrink page cache method}</li>
+<li><a href="c3ref/pcache_methods2.html#thexshutdownpagecachemethod">c3ref/pcache_methods2.html#thexshutdownpagecachemethod</a> &rarr; {the xShutdown page cache method}</li>
+<li><a href="c3ref/pcache_methods2.html#thexunpinpagecachemethod">c3ref/pcache_methods2.html#thexunpinpagecachemethod</a> &rarr; {the xUnpin page cache method}</li>
+<li><a href="c3ref/pcache_page.html">c3ref/pcache_page.html</a> &rarr; sqlite3_pcache_page</li>
+<li><a href="c3ref/prepare.html">c3ref/prepare.html</a> &rarr; {SQL statement compiler} sqlite3_prepare sqlite3_prepare16 sqlite3_prepare16_v2 sqlite3_prepare16_v3 sqlite3_prepare_v2 sqlite3_prepare_v3</li>
+<li><a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a> &rarr; sqlite3_preupdate_blobwrite sqlite3_preupdate_count sqlite3_preupdate_depth sqlite3_preupdate_hook sqlite3_preupdate_new sqlite3_preupdate_old</li>
+<li><a href="c3ref/profile.html">c3ref/profile.html</a> &rarr; sqlite3_profile sqlite3_trace</li>
+<li><a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a> &rarr; sqlite3_progress_handler</li>
+<li><a href="c3ref/randomness.html">c3ref/randomness.html</a> &rarr; sqlite3_randomness</li>
+<li><a href="c3ref/release_memory.html">c3ref/release_memory.html</a> &rarr; sqlite3_release_memory</li>
+<li><a href="c3ref/reset.html">c3ref/reset.html</a> &rarr; sqlite3_reset</li>
+<li><a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a> &rarr; sqlite3_reset_auto_extension</li>
+<li><a href="c3ref/result_blob.html">c3ref/result_blob.html</a> &rarr; sqlite3_result_blob sqlite3_result_blob64 sqlite3_result_double sqlite3_result_error sqlite3_result_error16 sqlite3_result_error_code sqlite3_result_error_nomem sqlite3_result_error_toobig sqlite3_result_int sqlite3_result_int64 sqlite3_result_null sqlite3_result_pointer sqlite3_result_text sqlite3_result_text16 sqlite3_result_text16be sqlite3_result_text16le sqlite3_result_text64 sqlite3_result_value sqlite3_result_zeroblob sqlite3_result_zeroblob64</li>
+<li><a href="c3ref/result_subtype.html">c3ref/result_subtype.html</a> &rarr; sqlite3_result_subtype</li>
+<li><a href="c3ref/serialize.html">c3ref/serialize.html</a> &rarr; sqlite3_serialize</li>
+<li><a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a> &rarr; {authorizer callback} sqlite3_set_authorizer</li>
+<li><a href="c3ref/set_last_insert_rowid.html">c3ref/set_last_insert_rowid.html</a> &rarr; sqlite3_set_last_insert_rowid</li>
+<li><a href="c3ref/sleep.html">c3ref/sleep.html</a> &rarr; sqlite3_sleep</li>
+<li><a href="c3ref/snapshot.html">c3ref/snapshot.html</a> &rarr; snapshot sqlite3_snapshot</li>
+<li><a href="c3ref/snapshot_cmp.html">c3ref/snapshot_cmp.html</a> &rarr; sqlite3_snapshot_cmp</li>
+<li><a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a> &rarr; sqlite3_snapshot_free</li>
+<li><a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a> &rarr; sqlite3_snapshot_get</li>
+<li><a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a> &rarr; sqlite3_snapshot_open</li>
+<li><a href="c3ref/snapshot_recover.html">c3ref/snapshot_recover.html</a> &rarr; sqlite3_snapshot_recover</li>
+<li><a href="c3ref/soft_heap_limit.html">c3ref/soft_heap_limit.html</a> &rarr; sqlite3_soft_heap_limit</li>
+<li><a href="c3ref/sqlite3.html">c3ref/sqlite3.html</a> &rarr; {database connection} {database connections} sqlite3</li>
+<li><a href="c3ref/status.html">c3ref/status.html</a> &rarr; sqlite3_status sqlite3_status64</li>
+<li><a href="c3ref/step.html">c3ref/step.html</a> &rarr; sqlite3_step</li>
+<li><a href="c3ref/stmt.html">c3ref/stmt.html</a> &rarr; {prepared statement} {prepared statements} sqlite3_stmt</li>
+<li><a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a> &rarr; sqlite3_stmt_busy</li>
+<li><a href="c3ref/stmt_isexplain.html">c3ref/stmt_isexplain.html</a> &rarr; sqlite3_stmt_isexplain</li>
+<li><a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a> &rarr; sqlite3_stmt_readonly</li>
+<li><a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a> &rarr; sqlite3_stmt_scanstatus</li>
+<li><a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a> &rarr; sqlite3_stmt_scanstatus_reset</li>
+<li><a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a> &rarr; sqlite3_stmt_status</li>
+<li><a href="c3ref/str.html">c3ref/str.html</a> &rarr; {dynamic string} sqlite3_str</li>
+<li><a href="c3ref/str_append.html">c3ref/str_append.html</a> &rarr; sqlite3_str_append sqlite3_str_appendall sqlite3_str_appendchar sqlite3_str_appendf sqlite3_str_reset sqlite3_str_vappendf</li>
+<li><a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a> &rarr; sqlite3_str_errcode sqlite3_str_length sqlite3_str_value</li>
+<li><a href="c3ref/str_finish.html">c3ref/str_finish.html</a> &rarr; sqlite3_str_finish</li>
+<li><a href="c3ref/str_new.html">c3ref/str_new.html</a> &rarr; sqlite3_str_new</li>
+<li><a href="c3ref/strglob.html">c3ref/strglob.html</a> &rarr; sqlite3_strglob</li>
+<li><a href="c3ref/stricmp.html">c3ref/stricmp.html</a> &rarr; sqlite3_stricmp sqlite3_strnicmp</li>
+<li><a href="c3ref/strlike.html">c3ref/strlike.html</a> &rarr; sqlite3_strlike</li>
+<li><a href="c3ref/system_errno.html">c3ref/system_errno.html</a> &rarr; sqlite3_system_errno</li>
+<li><a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a> &rarr; sqlite3_table_column_metadata</li>
+<li><a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a> &rarr; sqlite3_temp_directory</li>
+<li><a href="c3ref/test_control.html">c3ref/test_control.html</a> &rarr; sqlite3_test_control</li>
+<li><a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a> &rarr; sqlite3_threadsafe</li>
+<li><a href="c3ref/total_changes.html">c3ref/total_changes.html</a> &rarr; sqlite3_total_changes sqlite3_total_changes64</li>
+<li><a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a> &rarr; sqlite3_trace_v2</li>
+<li><a href="c3ref/txn_state.html">c3ref/txn_state.html</a> &rarr; sqlite3_txn_state</li>
+<li><a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a> &rarr; sqlite3_unlock_notify</li>
+<li><a href="c3ref/update_hook.html">c3ref/update_hook.html</a> &rarr; sqlite3_update_hook</li>
+<li><a href="c3ref/uri_boolean.html">c3ref/uri_boolean.html</a> &rarr; sqlite3_uri_boolean sqlite3_uri_int64 sqlite3_uri_key sqlite3_uri_parameter</li>
+<li><a href="c3ref/user_data.html">c3ref/user_data.html</a> &rarr; sqlite3_user_data</li>
+<li><a href="c3ref/value.html">c3ref/value.html</a> &rarr; {protected sqlite3_value} sqlite3_value {unprotected sqlite3_value}</li>
+<li><a href="c3ref/value_blob.html">c3ref/value_blob.html</a> &rarr; sqlite3_value_blob sqlite3_value_bytes sqlite3_value_bytes16 sqlite3_value_double sqlite3_value_encoding sqlite3_value_frombind sqlite3_value_int sqlite3_value_int64 sqlite3_value_nochange sqlite3_value_numeric_type sqlite3_value_pointer sqlite3_value_text sqlite3_value_text16 sqlite3_value_text16be sqlite3_value_text16le sqlite3_value_type</li>
+<li><a href="c3ref/value_dup.html">c3ref/value_dup.html</a> &rarr; sqlite3_value_dup sqlite3_value_free</li>
+<li><a href="c3ref/value_subtype.html">c3ref/value_subtype.html</a> &rarr; sqlite3_value_subtype</li>
+<li><a href="c3ref/vfs.html">c3ref/vfs.html</a> &rarr; sqlite3_vfs</li>
+<li><a href="c3ref/vfs.html#sqlite3vfsxaccess">c3ref/vfs.html#sqlite3vfsxaccess</a> &rarr; sqlite3_vfs.xAccess</li>
+<li><a href="c3ref/vfs.html#sqlite3vfsxopen">c3ref/vfs.html#sqlite3vfsxopen</a> &rarr; sqlite3_vfs.xOpen</li>
+<li><a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a> &rarr; sqlite3_vfs_find sqlite3_vfs_register sqlite3_vfs_unregister</li>
+<li><a href="c3ref/vtab.html">c3ref/vtab.html</a> &rarr; sqlite3_vtab</li>
+<li><a href="c3ref/vtab_collation.html">c3ref/vtab_collation.html</a> &rarr; sqlite3_vtab_collation</li>
+<li><a href="c3ref/vtab_config.html">c3ref/vtab_config.html</a> &rarr; sqlite3_vtab_config</li>
+<li><a href="c3ref/vtab_cursor.html">c3ref/vtab_cursor.html</a> &rarr; sqlite3_vtab_cursor {virtual table cursor}</li>
+<li><a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a> &rarr; sqlite3_vtab_distinct</li>
+<li><a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a> &rarr; sqlite3_vtab_in</li>
+<li><a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a> &rarr; sqlite3_vtab_in_first sqlite3_vtab_in_next</li>
+<li><a href="c3ref/vtab_nochange.html">c3ref/vtab_nochange.html</a> &rarr; sqlite3_vtab_nochange</li>
+<li><a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a> &rarr; sqlite3_vtab_on_conflict</li>
+<li><a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a> &rarr; sqlite3_vtab_rhs_value</li>
+<li><a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a> &rarr; sqlite3_wal_autocheckpoint</li>
+<li><a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a> &rarr; sqlite3_wal_checkpoint</li>
+<li><a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a> &rarr; sqlite3_wal_checkpoint_v2</li>
+<li><a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a> &rarr; sqlite3_wal_hook</li>
+<li><a href="c3ref/win32_set_directory.html">c3ref/win32_set_directory.html</a> &rarr; sqlite3_win32_set_directory sqlite3_win32_set_directory16 sqlite3_win32_set_directory8</li>
+<li><a href="carray.html">carray.html</a> &rarr; carray {carray table-valued function}</li>
+<li><a href="carray.html#onearg">carray.html#onearg</a> &rarr; {single-argument carray} sqlite3_carray_bind</li>
+<li><a href="changes.html">changes.html</a> &rarr; {complete list of SQLite releases} {release history}</li>
+<li><a href="chronology.html">chronology.html</a> &rarr; chronology {prior releases}</li>
+<li><a href="cintro.html">cintro.html</a> &rarr; cintro</li>
+<li><a href="cksumvfs.html">cksumvfs.html</a> &rarr; {checksum VFS} {checksum VFS shim} cksumvfs</li>
+<li><a href="cli.html">cli.html</a> &rarr; CLI {Command Line Interface} {command-line interface} {command-line shell} sqlite3.exe {sqlite3.exe command-line shell}</li>
+<li><a href="cli.html#arinsup">cli.html#arinsup</a> &rarr; {--insert option} {--update option}</li>
+<li><a href="cli.html#clmnr">cli.html#clmnr</a> &rarr; {Columnar output modes} {columnar output modes}</li>
+<li><a href="cli.html#clopts">cli.html#clopts</a> &rarr; {command-line options}</li>
+<li><a href="cli.html#csv">cli.html#csv</a> &rarr; .import {.import command} {CSV import}</li>
+<li><a href="cli.html#csvout">cli.html#csvout</a> &rarr; {CSV export}</li>
+<li><a href="cli.html#dotcmd">cli.html#dotcmd</a> &rarr; dot-commands</li>
+<li><a href="cli.html#dotconn">cli.html#dotconn</a> &rarr; .connection</li>
+<li><a href="cli.html#dotdatabases">cli.html#dotdatabases</a> &rarr; .databases {.databases command}</li>
+<li><a href="cli.html#dotexcel">cli.html#dotexcel</a> &rarr; .excel</li>
+<li><a href="cli.html#dotload">cli.html#dotload</a> &rarr; {.load command}</li>
+<li><a href="cli.html#dotmode">cli.html#dotmode</a> &rarr; .mode {output mode}</li>
+<li><a href="cli.html#dotmodequote">cli.html#dotmodequote</a> &rarr; {.mode quote}</li>
+<li><a href="cli.html#dotopen">cli.html#dotopen</a> &rarr; .open {.open command}</li>
+<li><a href="cli.html#dotoutput">cli.html#dotoutput</a> &rarr; .once .output</li>
+<li><a href="cli.html#dotread">cli.html#dotread</a> &rarr; .read</li>
+<li><a href="cli.html#dschema">cli.html#dschema</a> &rarr; .schema</li>
+<li><a href="cli.html#dtables">cli.html#dtables</a> &rarr; .tables</li>
+<li><a href="cli.html#dump">cli.html#dump</a> &rarr; .dump</li>
+<li><a href="cli.html#editfunc">cli.html#editfunc</a> &rarr; {edit SQL function}</li>
+<li><a href="cli.html#exexcel*">cli.html#exexcel*</a> &rarr; {export to excel}</li>
+<li><a href="cli.html#expert">cli.html#expert</a> &rarr; {.expert command}</li>
+<li><a href="cli.html#extsv*">cli.html#extsv*</a> &rarr; {export to TSV}</li>
+<li><a href="cli.html#fileio">cli.html#fileio</a> &rarr; {file I/O functions}</li>
+<li><a href="cli.html#fullschema">cli.html#fullschema</a> &rarr; .fullschema {the .fullschema dot-command}</li>
+<li><a href="cli.html#param">cli.html#param</a> &rarr; {.parameter command}</li>
+<li><a href="cli.html#qbox">cli.html#qbox</a> &rarr; qbox {qbox output mode}</li>
+<li><a href="cli.html#recover">cli.html#recover</a> &rarr; {.recover dot-command}</li>
+<li><a href="cli.html#safemode">cli.html#safemode</a> &rarr; {--safe command-line option} {safe command-line option}</li>
+<li><a href="cli.html#selftest">cli.html#selftest</a> &rarr; {.selftest dot-command}</li>
+<li><a href="cli.html#sha3sum">cli.html#sha3sum</a> &rarr; {.sha3sum dot-command}</li>
+<li><a href="cli.html#sqlar">cli.html#sqlar</a> &rarr; {.archive command}</li>
+<li><a href="cli.html#wrap1">cli.html#wrap1</a> &rarr; {wrapping text}</li>
+<li><a href="cli.html#zipdb">cli.html#zipdb</a> &rarr; {ZIP file as database}</li>
+<li><a href="codeofconduct.html">codeofconduct.html</a> &rarr; {Code of Conduct}</li>
+<li><a href="codeofethics.html">codeofethics.html</a> &rarr; {Code of Ethics} {Code of Ethics of the Project Founder}</li>
+<li><a href="compile.html">compile.html</a> &rarr; {compile-time options}</li>
+<li><a href="compile.html#4_byte_aligned_malloc">compile.html#4_byte_aligned_malloc</a> &rarr; -DSQLITE_4_BYTE_ALIGNED_MALLOC SQLITE_4_BYTE_ALIGNED_MALLOC</li>
+<li><a href="compile.html#allow_covering_index_scan">compile.html#allow_covering_index_scan</a> &rarr; -DSQLITE_ALLOW_COVERING_INDEX_SCAN SQLITE_ALLOW_COVERING_INDEX_SCAN</li>
+<li><a href="compile.html#allow_uri_authority">compile.html#allow_uri_authority</a> &rarr; -DSQLITE_ALLOW_URI_AUTHORITY SQLITE_ALLOW_URI_AUTHORITY</li>
+<li><a href="compile.html#api">compile.html#api</a> &rarr; -DSQLITE_API SQLITE_API</li>
+<li><a href="compile.html#apicall">compile.html#apicall</a> &rarr; -DSQLITE_APICALL SQLITE_APICALL</li>
+<li><a href="compile.html#byteorder">compile.html#byteorder</a> &rarr; -DSQLITE_BYTEORDER SQLITE_BYTEORDER</li>
+<li><a href="compile.html#callback">compile.html#callback</a> &rarr; -DSQLITE_CALLBACK SQLITE_CALLBACK</li>
+<li><a href="compile.html#case_sensitive_like">compile.html#case_sensitive_like</a> &rarr; -DSQLITE_CASE_SENSITIVE_LIKE SQLITE_CASE_SENSITIVE_LIKE</li>
+<li><a href="compile.html#cdecl">compile.html#cdecl</a> &rarr; -DSQLITE_CDECL SQLITE_CDECL</li>
+<li><a href="compile.html#debug">compile.html#debug</a> &rarr; -DSQLITE_DEBUG SQLITE_DEBUG</li>
+<li><a href="compile.html#default_automatic_index">compile.html#default_automatic_index</a> &rarr; -DSQLITE_DEFAULT_AUTOMATIC_INDEX SQLITE_DEFAULT_AUTOMATIC_INDEX</li>
+<li><a href="compile.html#default_autovacuum">compile.html#default_autovacuum</a> &rarr; -DSQLITE_DEFAULT_AUTOVACUUM SQLITE_DEFAULT_AUTOVACUUM</li>
+<li><a href="compile.html#default_cache_size">compile.html#default_cache_size</a> &rarr; -DSQLITE_DEFAULT_CACHE_SIZE SQLITE_DEFAULT_CACHE_SIZE</li>
+<li><a href="compile.html#default_file_format">compile.html#default_file_format</a> &rarr; -DSQLITE_DEFAULT_FILE_FORMAT SQLITE_DEFAULT_FILE_FORMAT</li>
+<li><a href="compile.html#default_file_permissions">compile.html#default_file_permissions</a> &rarr; -DSQLITE_DEFAULT_FILE_PERMISSIONS SQLITE_DEFAULT_FILE_PERMISSIONS</li>
+<li><a href="compile.html#default_foreign_keys">compile.html#default_foreign_keys</a> &rarr; -DSQLITE_DEFAULT_FOREIGN_KEYS SQLITE_DEFAULT_FOREIGN_KEYS</li>
+<li><a href="compile.html#default_journal_size_limit">compile.html#default_journal_size_limit</a> &rarr; -DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT</li>
+<li><a href="compile.html#default_locking_mode">compile.html#default_locking_mode</a> &rarr; -DSQLITE_DEFAULT_LOCKING_MODE SQLITE_DEFAULT_LOCKING_MODE</li>
+<li><a href="compile.html#default_lookaside">compile.html#default_lookaside</a> &rarr; -DSQLITE_DEFAULT_LOOKASIDE SQLITE_DEFAULT_LOOKASIDE</li>
+<li><a href="compile.html#default_memstatus">compile.html#default_memstatus</a> &rarr; -DSQLITE_DEFAULT_MEMSTATUS SQLITE_DEFAULT_MEMSTATUS</li>
+<li><a href="compile.html#default_mmap_size">compile.html#default_mmap_size</a> &rarr; -DSQLITE_DEFAULT_MMAP_SIZE SQLITE_DEFAULT_MMAP_SIZE</li>
+<li><a href="compile.html#default_page_size">compile.html#default_page_size</a> &rarr; -DSQLITE_DEFAULT_PAGE_SIZE SQLITE_DEFAULT_PAGE_SIZE</li>
+<li><a href="compile.html#default_pcache_initsz">compile.html#default_pcache_initsz</a> &rarr; -DSQLITE_DEFAULT_PCACHE_INITSZ SQLITE_DEFAULT_PCACHE_INITSZ</li>
+<li><a href="compile.html#default_synchronous">compile.html#default_synchronous</a> &rarr; -DSQLITE_DEFAULT_SYNCHRONOUS SQLITE_DEFAULT_SYNCHRONOUS</li>
+<li><a href="compile.html#default_wal_autocheckpoint">compile.html#default_wal_autocheckpoint</a> &rarr; -DSQLITE_DEFAULT_WAL_AUTOCHECKPOINT SQLITE_DEFAULT_WAL_AUTOCHECKPOINT</li>
+<li><a href="compile.html#default_wal_synchronous">compile.html#default_wal_synchronous</a> &rarr; -DSQLITE_DEFAULT_WAL_SYNCHRONOUS SQLITE_DEFAULT_WAL_SYNCHRONOUS</li>
+<li><a href="compile.html#default_worker_threads">compile.html#default_worker_threads</a> &rarr; -DSQLITE_DEFAULT_WORKER_THREADS SQLITE_DEFAULT_WORKER_THREADS</li>
+<li><a href="compile.html#direct_overflow_read">compile.html#direct_overflow_read</a> &rarr; -DSQLITE_DIRECT_OVERFLOW_READ SQLITE_DIRECT_OVERFLOW_READ</li>
+<li><a href="compile.html#disable_dirsync">compile.html#disable_dirsync</a> &rarr; -DSQLITE_DISABLE_DIRSYNC SQLITE_DISABLE_DIRSYNC</li>
+<li><a href="compile.html#disable_fts3_unicode">compile.html#disable_fts3_unicode</a> &rarr; -DSQLITE_DISABLE_FTS3_UNICODE SQLITE_DISABLE_FTS3_UNICODE</li>
+<li><a href="compile.html#disable_fts4_deferred">compile.html#disable_fts4_deferred</a> &rarr; -DSQLITE_DISABLE_FTS4_DEFERRED SQLITE_DISABLE_FTS4_DEFERRED</li>
+<li><a href="compile.html#disable_intrinsic">compile.html#disable_intrinsic</a> &rarr; -DSQLITE_DISABLE_INTRINSIC SQLITE_DISABLE_INTRINSIC</li>
+<li><a href="compile.html#disable_lfs">compile.html#disable_lfs</a> &rarr; -DSQLITE_DISABLE_LFS SQLITE_DISABLE_LFS</li>
+<li><a href="compile.html#dqs">compile.html#dqs</a> &rarr; -DSQLITE_DQS SQLITE_DQS</li>
+<li><a href="compile.html#enable_8_3_names">compile.html#enable_8_3_names</a> &rarr; -DSQLITE_ENABLE_8_3_NAMES SQLITE_ENABLE_8_3_NAMES</li>
+<li><a href="compile.html#enable_api_armor">compile.html#enable_api_armor</a> &rarr; -DSQLITE_ENABLE_API_ARMOR SQLITE_ENABLE_API_ARMOR</li>
+<li><a href="compile.html#enable_atomic_write">compile.html#enable_atomic_write</a> &rarr; -DSQLITE_ENABLE_ATOMIC_WRITE SQLITE_ENABLE_ATOMIC_WRITE</li>
+<li><a href="compile.html#enable_batch_atomic_write">compile.html#enable_batch_atomic_write</a> &rarr; -DSQLITE_ENABLE_BATCH_ATOMIC_WRITE SQLITE_ENABLE_BATCH_ATOMIC_WRITE</li>
+<li><a href="compile.html#enable_bytecode_vtab">compile.html#enable_bytecode_vtab</a> &rarr; -DSQLITE_ENABLE_BYTECODE_VTAB SQLITE_ENABLE_BYTECODE_VTAB</li>
+<li><a href="compile.html#enable_column_metadata">compile.html#enable_column_metadata</a> &rarr; -DSQLITE_ENABLE_COLUMN_METADATA SQLITE_ENABLE_COLUMN_METADATA</li>
+<li><a href="compile.html#enable_dbpage_vtab">compile.html#enable_dbpage_vtab</a> &rarr; -DSQLITE_ENABLE_DBPAGE_VTAB SQLITE_ENABLE_DBPAGE_VTAB</li>
+<li><a href="compile.html#enable_dbstat_vtab">compile.html#enable_dbstat_vtab</a> &rarr; -DSQLITE_ENABLE_DBSTAT_VTAB SQLITE_ENABLE_DBSTAT_VTAB</li>
+<li><a href="compile.html#enable_deserialize">compile.html#enable_deserialize</a> &rarr; -DSQLITE_ENABLE_DESERIALIZE SQLITE_ENABLE_DESERIALIZE</li>
+<li><a href="compile.html#enable_explain_comments">compile.html#enable_explain_comments</a> &rarr; -DSQLITE_ENABLE_EXPLAIN_COMMENTS SQLITE_ENABLE_EXPLAIN_COMMENTS</li>
+<li><a href="compile.html#enable_fts3">compile.html#enable_fts3</a> &rarr; -DSQLITE_ENABLE_FTS3 SQLITE_ENABLE_FTS3</li>
+<li><a href="compile.html#enable_fts3_parenthesis">compile.html#enable_fts3_parenthesis</a> &rarr; -DSQLITE_ENABLE_FTS3_PARENTHESIS SQLITE_ENABLE_FTS3_PARENTHESIS</li>
+<li><a href="compile.html#enable_fts3_tokenizer">compile.html#enable_fts3_tokenizer</a> &rarr; -DSQLITE_ENABLE_FTS3_TOKENIZER SQLITE_ENABLE_FTS3_TOKENIZER</li>
+<li><a href="compile.html#enable_fts4">compile.html#enable_fts4</a> &rarr; -DSQLITE_ENABLE_FTS4 SQLITE_ENABLE_FTS4</li>
+<li><a href="compile.html#enable_fts5">compile.html#enable_fts5</a> &rarr; -DSQLITE_ENABLE_FTS5 SQLITE_ENABLE_FTS5</li>
+<li><a href="compile.html#enable_geopoly">compile.html#enable_geopoly</a> &rarr; -DSQLITE_ENABLE_GEOPOLY SQLITE_ENABLE_GEOPOLY</li>
+<li><a href="compile.html#enable_icu">compile.html#enable_icu</a> &rarr; -DSQLITE_ENABLE_ICU SQLITE_ENABLE_ICU</li>
+<li><a href="compile.html#enable_iotrace">compile.html#enable_iotrace</a> &rarr; -DSQLITE_ENABLE_IOTRACE SQLITE_ENABLE_IOTRACE</li>
+<li><a href="compile.html#enable_json1">compile.html#enable_json1</a> &rarr; -DSQLITE_ENABLE_JSON1 SQLITE_ENABLE_JSON1</li>
+<li><a href="compile.html#enable_locking_style">compile.html#enable_locking_style</a> &rarr; -DSQLITE_ENABLE_LOCKING_STYLE SQLITE_ENABLE_LOCKING_STYLE</li>
+<li><a href="compile.html#enable_math_functions">compile.html#enable_math_functions</a> &rarr; -DSQLITE_ENABLE_MATH_FUNCTIONS SQLITE_ENABLE_MATH_FUNCTIONS</li>
+<li><a href="compile.html#enable_memory_management">compile.html#enable_memory_management</a> &rarr; -DSQLITE_ENABLE_MEMORY_MANAGEMENT SQLITE_ENABLE_MEMORY_MANAGEMENT</li>
+<li><a href="compile.html#enable_memsys3">compile.html#enable_memsys3</a> &rarr; -DSQLITE_ENABLE_MEMSYS3 SQLITE_ENABLE_MEMSYS3</li>
+<li><a href="compile.html#enable_memsys5">compile.html#enable_memsys5</a> &rarr; -DSQLITE_ENABLE_MEMSYS5 SQLITE_ENABLE_MEMSYS5</li>
+<li><a href="compile.html#enable_normalize">compile.html#enable_normalize</a> &rarr; -DSQLITE_ENABLE_NORMALIZE SQLITE_ENABLE_NORMALIZE</li>
+<li><a href="compile.html#enable_null_trim">compile.html#enable_null_trim</a> &rarr; -DSQLITE_ENABLE_NULL_TRIM SQLITE_ENABLE_NULL_TRIM</li>
+<li><a href="compile.html#enable_offset_sql_func">compile.html#enable_offset_sql_func</a> &rarr; -DSQLITE_ENABLE_OFFSET_SQL_FUNC SQLITE_ENABLE_OFFSET_SQL_FUNC</li>
+<li><a href="compile.html#enable_preupdate_hook">compile.html#enable_preupdate_hook</a> &rarr; -DSQLITE_ENABLE_PREUPDATE_HOOK SQLITE_ENABLE_PREUPDATE_HOOK</li>
+<li><a href="compile.html#enable_qpsg">compile.html#enable_qpsg</a> &rarr; -DSQLITE_ENABLE_QPSG SQLITE_ENABLE_QPSG</li>
+<li><a href="compile.html#enable_rbu">compile.html#enable_rbu</a> &rarr; -DSQLITE_ENABLE_RBU SQLITE_ENABLE_RBU</li>
+<li><a href="compile.html#enable_rtree">compile.html#enable_rtree</a> &rarr; -DSQLITE_ENABLE_RTREE SQLITE_ENABLE_RTREE</li>
+<li><a href="compile.html#enable_session">compile.html#enable_session</a> &rarr; -DSQLITE_ENABLE_SESSION SQLITE_ENABLE_SESSION</li>
+<li><a href="compile.html#enable_snapshot">compile.html#enable_snapshot</a> &rarr; -DSQLITE_ENABLE_SNAPSHOT SQLITE_ENABLE_SNAPSHOT</li>
+<li><a href="compile.html#enable_sorter_references">compile.html#enable_sorter_references</a> &rarr; -DSQLITE_ENABLE_SORTER_REFERENCES SQLITE_ENABLE_SORTER_REFERENCES</li>
+<li><a href="compile.html#enable_sqllog">compile.html#enable_sqllog</a> &rarr; -DSQLITE_ENABLE_SQLLOG SQLITE_ENABLE_SQLLOG</li>
+<li><a href="compile.html#enable_stat2">compile.html#enable_stat2</a> &rarr; -DSQLITE_ENABLE_STAT2 SQLITE_ENABLE_STAT2</li>
+<li><a href="compile.html#enable_stat3">compile.html#enable_stat3</a> &rarr; -DSQLITE_ENABLE_STAT3 SQLITE_ENABLE_STAT3</li>
+<li><a href="compile.html#enable_stat4">compile.html#enable_stat4</a> &rarr; -DSQLITE_ENABLE_STAT4 SQLITE_ENABLE_STAT4</li>
+<li><a href="compile.html#enable_stmt_scanstatus">compile.html#enable_stmt_scanstatus</a> &rarr; -DSQLITE_ENABLE_STMT_SCANSTATUS SQLITE_ENABLE_STMT_SCANSTATUS</li>
+<li><a href="compile.html#enable_stmtvtab">compile.html#enable_stmtvtab</a> &rarr; -DSQLITE_ENABLE_STMTVTAB SQLITE_ENABLE_STMTVTAB</li>
+<li><a href="compile.html#enable_tree_explain">compile.html#enable_tree_explain</a> &rarr; -DSQLITE_ENABLE_TREE_EXPLAIN SQLITE_ENABLE_TREE_EXPLAIN</li>
+<li><a href="compile.html#enable_unknown_sql_function">compile.html#enable_unknown_sql_function</a> &rarr; -DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</li>
+<li><a href="compile.html#enable_unlock_notify">compile.html#enable_unlock_notify</a> &rarr; -DSQLITE_ENABLE_UNLOCK_NOTIFY SQLITE_ENABLE_UNLOCK_NOTIFY</li>
+<li><a href="compile.html#enable_update_delete_limit">compile.html#enable_update_delete_limit</a> &rarr; -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT SQLITE_ENABLE_UPDATE_DELETE_LIMIT</li>
+<li><a href="compile.html#extern">compile.html#extern</a> &rarr; -DSQLITE_EXTERN SQLITE_EXTERN</li>
+<li><a href="compile.html#extra_durable">compile.html#extra_durable</a> &rarr; -DSQLITE_EXTRA_DURABLE SQLITE_EXTRA_DURABLE</li>
+<li><a href="compile.html#fdatasync">compile.html#fdatasync</a> &rarr; -DHAVE_FDATASYNC HAVE_FDATASYNC</li>
+<li><a href="compile.html#fts3_max_expr_depth">compile.html#fts3_max_expr_depth</a> &rarr; -DSQLITE_FTS3_MAX_EXPR_DEPTH SQLITE_FTS3_MAX_EXPR_DEPTH</li>
+<li><a href="compile.html#gmtime_r">compile.html#gmtime_r</a> &rarr; -DHAVE_GMTIME_R HAVE_GMTIME_R</li>
+<li><a href="compile.html#have_isnan">compile.html#have_isnan</a> &rarr; -DSQLITE_HAVE_ISNAN SQLITE_HAVE_ISNAN</li>
+<li><a href="compile.html#have_zlib">compile.html#have_zlib</a> &rarr; -DSQLITE_HAVE_ZLIB SQLITE_HAVE_ZLIB</li>
+<li><a href="compile.html#introspection_pragmas">compile.html#introspection_pragmas</a> &rarr; -DSQLITE_INTROSPECTION_PRAGMAS SQLITE_INTROSPECTION_PRAGMAS</li>
+<li><a href="compile.html#isnan">compile.html#isnan</a> &rarr; -DHAVE_ISNAN HAVE_ISNAN</li>
+<li><a href="compile.html#like_doesnt_match_blobs">compile.html#like_doesnt_match_blobs</a> &rarr; -DSQLITE_LIKE_DOESNT_MATCH_BLOBS SQLITE_LIKE_DOESNT_MATCH_BLOBS</li>
+<li><a href="compile.html#localtime_r">compile.html#localtime_r</a> &rarr; -DHAVE_LOCALTIME_R HAVE_LOCALTIME_R</li>
+<li><a href="compile.html#localtime_s">compile.html#localtime_s</a> &rarr; -DHAVE_LOCALTIME_S HAVE_LOCALTIME_S</li>
+<li><a href="compile.html#malloc_usable_size">compile.html#malloc_usable_size</a> &rarr; -DHAVE_MALLOC_USABLE_SIZE HAVE_MALLOC_USABLE_SIZE</li>
+<li><a href="compile.html#max_allocation_size">compile.html#max_allocation_size</a> &rarr; -DSQLITE_MAX_ALLOCATION_SIZE SQLITE_MAX_ALLOCATION_SIZE</li>
+<li><a href="compile.html#max_memory">compile.html#max_memory</a> &rarr; -DSQLITE_MAX_MEMORY SQLITE_MAX_MEMORY</li>
+<li><a href="compile.html#max_mmap_size">compile.html#max_mmap_size</a> &rarr; -DSQLITE_MAX_MMAP_SIZE SQLITE_MAX_MMAP_SIZE</li>
+<li><a href="compile.html#max_schema_retry">compile.html#max_schema_retry</a> &rarr; -DSQLITE_MAX_SCHEMA_RETRY SQLITE_MAX_SCHEMA_RETRY</li>
+<li><a href="compile.html#max_worker_threads">compile.html#max_worker_threads</a> &rarr; -DSQLITE_MAX_WORKER_THREADS SQLITE_MAX_WORKER_THREADS</li>
+<li><a href="compile.html#memdb_default_maxsize">compile.html#memdb_default_maxsize</a> &rarr; -DSQLITE_MEMDB_DEFAULT_MAXSIZE SQLITE_MEMDB_DEFAULT_MAXSIZE</li>
+<li><a href="compile.html#memdebug">compile.html#memdebug</a> &rarr; -DSQLITE_MEMDEBUG SQLITE_MEMDEBUG</li>
+<li><a href="compile.html#minimum_file_descriptor">compile.html#minimum_file_descriptor</a> &rarr; -DSQLITE_MINIMUM_FILE_DESCRIPTOR SQLITE_MINIMUM_FILE_DESCRIPTOR</li>
+<li><a href="compile.html#omit_altertable">compile.html#omit_altertable</a> &rarr; -DSQLITE_OMIT_ALTERTABLE SQLITE_OMIT_ALTERTABLE</li>
+<li><a href="compile.html#omit_analyze">compile.html#omit_analyze</a> &rarr; -DSQLITE_OMIT_ANALYZE SQLITE_OMIT_ANALYZE</li>
+<li><a href="compile.html#omit_attach">compile.html#omit_attach</a> &rarr; -DSQLITE_OMIT_ATTACH SQLITE_OMIT_ATTACH</li>
+<li><a href="compile.html#omit_authorization">compile.html#omit_authorization</a> &rarr; -DSQLITE_OMIT_AUTHORIZATION SQLITE_OMIT_AUTHORIZATION</li>
+<li><a href="compile.html#omit_autoincrement">compile.html#omit_autoincrement</a> &rarr; -DSQLITE_OMIT_AUTOINCREMENT SQLITE_OMIT_AUTOINCREMENT</li>
+<li><a href="compile.html#omit_autoinit">compile.html#omit_autoinit</a> &rarr; -DSQLITE_OMIT_AUTOINIT SQLITE_OMIT_AUTOINIT</li>
+<li><a href="compile.html#omit_automatic_index">compile.html#omit_automatic_index</a> &rarr; -DSQLITE_OMIT_AUTOMATIC_INDEX SQLITE_OMIT_AUTOMATIC_INDEX</li>
+<li><a href="compile.html#omit_autoreset">compile.html#omit_autoreset</a> &rarr; -DSQLITE_OMIT_AUTORESET SQLITE_OMIT_AUTORESET</li>
+<li><a href="compile.html#omit_autovacuum">compile.html#omit_autovacuum</a> &rarr; -DSQLITE_OMIT_AUTOVACUUM SQLITE_OMIT_AUTOVACUUM</li>
+<li><a href="compile.html#omit_between_optimization">compile.html#omit_between_optimization</a> &rarr; -DSQLITE_OMIT_BETWEEN_OPTIMIZATION SQLITE_OMIT_BETWEEN_OPTIMIZATION</li>
+<li><a href="compile.html#omit_blob_literal">compile.html#omit_blob_literal</a> &rarr; -DSQLITE_OMIT_BLOB_LITERAL SQLITE_OMIT_BLOB_LITERAL</li>
+<li><a href="compile.html#omit_btreecount">compile.html#omit_btreecount</a> &rarr; -DSQLITE_OMIT_BTREECOUNT SQLITE_OMIT_BTREECOUNT</li>
+<li><a href="compile.html#omit_builtin_test">compile.html#omit_builtin_test</a> &rarr; -DSQLITE_OMIT_BUILTIN_TEST SQLITE_OMIT_BUILTIN_TEST</li>
+<li><a href="compile.html#omit_case_sensitive_like_pragma">compile.html#omit_case_sensitive_like_pragma</a> &rarr; -DSQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA</li>
+<li><a href="compile.html#omit_cast">compile.html#omit_cast</a> &rarr; -DSQLITE_OMIT_CAST SQLITE_OMIT_CAST</li>
+<li><a href="compile.html#omit_check">compile.html#omit_check</a> &rarr; -DSQLITE_OMIT_CHECK SQLITE_OMIT_CHECK</li>
+<li><a href="compile.html#omit_compileoption_diags">compile.html#omit_compileoption_diags</a> &rarr; -DSQLITE_OMIT_COMPILEOPTION_DIAGS SQLITE_OMIT_COMPILEOPTION_DIAGS</li>
+<li><a href="compile.html#omit_complete">compile.html#omit_complete</a> &rarr; -DSQLITE_OMIT_COMPLETE SQLITE_OMIT_COMPLETE</li>
+<li><a href="compile.html#omit_compound_select">compile.html#omit_compound_select</a> &rarr; -DSQLITE_OMIT_COMPOUND_SELECT SQLITE_OMIT_COMPOUND_SELECT</li>
+<li><a href="compile.html#omit_cte">compile.html#omit_cte</a> &rarr; -DSQLITE_OMIT_CTE SQLITE_OMIT_CTE</li>
+<li><a href="compile.html#omit_datetime_funcs">compile.html#omit_datetime_funcs</a> &rarr; -DSQLITE_OMIT_DATETIME_FUNCS SQLITE_OMIT_DATETIME_FUNCS</li>
+<li><a href="compile.html#omit_decltype">compile.html#omit_decltype</a> &rarr; -DSQLITE_OMIT_DECLTYPE SQLITE_OMIT_DECLTYPE</li>
+<li><a href="compile.html#omit_deprecated">compile.html#omit_deprecated</a> &rarr; -DSQLITE_OMIT_DEPRECATED SQLITE_OMIT_DEPRECATED</li>
+<li><a href="compile.html#omit_deserialize">compile.html#omit_deserialize</a> &rarr; -DSQLITE_OMIT_DESERIALIZE SQLITE_OMIT_DESERIALIZE</li>
+<li><a href="compile.html#omit_diskio">compile.html#omit_diskio</a> &rarr; -DSQLITE_OMIT_DISKIO SQLITE_OMIT_DISKIO</li>
+<li><a href="compile.html#omit_explain">compile.html#omit_explain</a> &rarr; -DSQLITE_OMIT_EXPLAIN SQLITE_OMIT_EXPLAIN</li>
+<li><a href="compile.html#omit_flag_pragmas">compile.html#omit_flag_pragmas</a> &rarr; -DSQLITE_OMIT_FLAG_PRAGMAS SQLITE_OMIT_FLAG_PRAGMAS</li>
+<li><a href="compile.html#omit_floating_point">compile.html#omit_floating_point</a> &rarr; -DSQLITE_OMIT_FLOATING_POINT SQLITE_OMIT_FLOATING_POINT</li>
+<li><a href="compile.html#omit_foreign_key">compile.html#omit_foreign_key</a> &rarr; -DSQLITE_OMIT_FOREIGN_KEY SQLITE_OMIT_FOREIGN_KEY</li>
+<li><a href="compile.html#omit_generated_columns">compile.html#omit_generated_columns</a> &rarr; -DSQLITE_OMIT_GENERATED_COLUMNS SQLITE_OMIT_GENERATED_COLUMNS</li>
+<li><a href="compile.html#omit_get_table">compile.html#omit_get_table</a> &rarr; -DSQLITE_OMIT_GET_TABLE SQLITE_OMIT_GET_TABLE</li>
+<li><a href="compile.html#omit_hex_integer">compile.html#omit_hex_integer</a> &rarr; -DSQLITE_OMIT_HEX_INTEGER SQLITE_OMIT_HEX_INTEGER</li>
+<li><a href="compile.html#omit_incrblob">compile.html#omit_incrblob</a> &rarr; -DSQLITE_OMIT_INCRBLOB SQLITE_OMIT_INCRBLOB</li>
+<li><a href="compile.html#omit_integrity_check">compile.html#omit_integrity_check</a> &rarr; -DSQLITE_OMIT_INTEGRITY_CHECK SQLITE_OMIT_INTEGRITY_CHECK</li>
+<li><a href="compile.html#omit_introspection_pragmas">compile.html#omit_introspection_pragmas</a> &rarr; -DSQLITE_OMIT_INTROSPECTION_PRAGMAS SQLITE_OMIT_INTROSPECTION_PRAGMAS</li>
+<li><a href="compile.html#omit_json">compile.html#omit_json</a> &rarr; -DSQLITE_OMIT_JSON SQLITE_OMIT_JSON</li>
+<li><a href="compile.html#omit_like_optimization">compile.html#omit_like_optimization</a> &rarr; -DSQLITE_OMIT_LIKE_OPTIMIZATION SQLITE_OMIT_LIKE_OPTIMIZATION</li>
+<li><a href="compile.html#omit_load_extension">compile.html#omit_load_extension</a> &rarr; -DSQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_LOAD_EXTENSION</li>
+<li><a href="compile.html#omit_localtime">compile.html#omit_localtime</a> &rarr; -DSQLITE_OMIT_LOCALTIME SQLITE_OMIT_LOCALTIME</li>
+<li><a href="compile.html#omit_lookaside">compile.html#omit_lookaside</a> &rarr; -DSQLITE_OMIT_LOOKASIDE SQLITE_OMIT_LOOKASIDE</li>
+<li><a href="compile.html#omit_memorydb">compile.html#omit_memorydb</a> &rarr; -DSQLITE_OMIT_MEMORYDB SQLITE_OMIT_MEMORYDB</li>
+<li><a href="compile.html#omit_or_optimization">compile.html#omit_or_optimization</a> &rarr; -DSQLITE_OMIT_OR_OPTIMIZATION SQLITE_OMIT_OR_OPTIMIZATION</li>
+<li><a href="compile.html#omit_pager_pragmas">compile.html#omit_pager_pragmas</a> &rarr; -DSQLITE_OMIT_PAGER_PRAGMAS SQLITE_OMIT_PAGER_PRAGMAS</li>
+<li><a href="compile.html#omit_pragma">compile.html#omit_pragma</a> &rarr; -DSQLITE_OMIT_PRAGMA SQLITE_OMIT_PRAGMA</li>
+<li><a href="compile.html#omit_progress_callback">compile.html#omit_progress_callback</a> &rarr; -DSQLITE_OMIT_PROGRESS_CALLBACK SQLITE_OMIT_PROGRESS_CALLBACK</li>
+<li><a href="compile.html#omit_quickbalance">compile.html#omit_quickbalance</a> &rarr; -DSQLITE_OMIT_QUICKBALANCE SQLITE_OMIT_QUICKBALANCE</li>
+<li><a href="compile.html#omit_reindex">compile.html#omit_reindex</a> &rarr; -DSQLITE_OMIT_REINDEX SQLITE_OMIT_REINDEX</li>
+<li><a href="compile.html#omit_schema_pragmas">compile.html#omit_schema_pragmas</a> &rarr; -DSQLITE_OMIT_SCHEMA_PRAGMAS SQLITE_OMIT_SCHEMA_PRAGMAS</li>
+<li><a href="compile.html#omit_schema_version_pragmas">compile.html#omit_schema_version_pragmas</a> &rarr; -DSQLITE_OMIT_SCHEMA_VERSION_PRAGMAS SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS</li>
+<li><a href="compile.html#omit_shared_cache">compile.html#omit_shared_cache</a> &rarr; -DSQLITE_OMIT_SHARED_CACHE SQLITE_OMIT_SHARED_CACHE</li>
+<li><a href="compile.html#omit_subquery">compile.html#omit_subquery</a> &rarr; -DSQLITE_OMIT_SUBQUERY SQLITE_OMIT_SUBQUERY</li>
+<li><a href="compile.html#omit_tcl_variable">compile.html#omit_tcl_variable</a> &rarr; -DSQLITE_OMIT_TCL_VARIABLE SQLITE_OMIT_TCL_VARIABLE</li>
+<li><a href="compile.html#omit_tempdb">compile.html#omit_tempdb</a> &rarr; -DSQLITE_OMIT_TEMPDB SQLITE_OMIT_TEMPDB</li>
+<li><a href="compile.html#omit_trace">compile.html#omit_trace</a> &rarr; -DSQLITE_OMIT_TRACE SQLITE_OMIT_TRACE</li>
+<li><a href="compile.html#omit_trigger">compile.html#omit_trigger</a> &rarr; -DSQLITE_OMIT_TRIGGER SQLITE_OMIT_TRIGGER</li>
+<li><a href="compile.html#omit_truncate_optimization">compile.html#omit_truncate_optimization</a> &rarr; -DSQLITE_OMIT_TRUNCATE_OPTIMIZATION SQLITE_OMIT_TRUNCATE_OPTIMIZATION</li>
+<li><a href="compile.html#omit_utf16">compile.html#omit_utf16</a> &rarr; -DSQLITE_OMIT_UTF16 SQLITE_OMIT_UTF16</li>
+<li><a href="compile.html#omit_vacuum">compile.html#omit_vacuum</a> &rarr; -DSQLITE_OMIT_VACUUM SQLITE_OMIT_VACUUM</li>
+<li><a href="compile.html#omit_view">compile.html#omit_view</a> &rarr; -DSQLITE_OMIT_VIEW SQLITE_OMIT_VIEW</li>
+<li><a href="compile.html#omit_virtualtable">compile.html#omit_virtualtable</a> &rarr; -DSQLITE_OMIT_VIRTUALTABLE SQLITE_OMIT_VIRTUALTABLE</li>
+<li><a href="compile.html#omit_wal">compile.html#omit_wal</a> &rarr; -DSQLITE_OMIT_WAL SQLITE_OMIT_WAL</li>
+<li><a href="compile.html#omit_windowfunc">compile.html#omit_windowfunc</a> &rarr; -DSQLITE_OMIT_WINDOWFUNC SQLITE_OMIT_WINDOWFUNC</li>
+<li><a href="compile.html#omit_wsd">compile.html#omit_wsd</a> &rarr; -DSQLITE_OMIT_WSD SQLITE_OMIT_WSD</li>
+<li><a href="compile.html#omit_xfer_opt">compile.html#omit_xfer_opt</a> &rarr; -DSQLITE_OMIT_XFER_OPT SQLITE_OMIT_XFER_OPT</li>
+<li><a href="compile.html#omitfeatures">compile.html#omitfeatures</a> &rarr; omitfeatures</li>
+<li><a href="compile.html#os_other">compile.html#os_other</a> &rarr; -DSQLITE_OS_OTHER SQLITE_OS_OTHER</li>
+<li><a href="compile.html#powersafe_overwrite">compile.html#powersafe_overwrite</a> &rarr; -DSQLITE_POWERSAFE_OVERWRITE SQLITE_POWERSAFE_OVERWRITE</li>
+<li><a href="compile.html#printf_precision_limit">compile.html#printf_precision_limit</a> &rarr; -DSQLITE_PRINTF_PRECISION_LIMIT SQLITE_PRINTF_PRECISION_LIMIT</li>
+<li><a href="compile.html#query_planner_limit">compile.html#query_planner_limit</a> &rarr; -DSQLITE_QUERY_PLANNER_LIMIT SQLITE_QUERY_PLANNER_LIMIT</li>
+<li><a href="compile.html#query_planner_limit_incr">compile.html#query_planner_limit_incr</a> &rarr; -DSQLITE_QUERY_PLANNER_LIMIT_INCR SQLITE_QUERY_PLANNER_LIMIT_INCR</li>
+<li><a href="compile.html#rcmd">compile.html#rcmd</a> &rarr; {recommended compile-time option} {recommended compile-time options}</li>
+<li><a href="compile.html#reverse_unordered_selects">compile.html#reverse_unordered_selects</a> &rarr; -DSQLITE_REVERSE_UNORDERED_SELECTS SQLITE_REVERSE_UNORDERED_SELECTS</li>
+<li><a href="compile.html#rtree_int_only">compile.html#rtree_int_only</a> &rarr; -DSQLITE_RTREE_INT_ONLY SQLITE_RTREE_INT_ONLY</li>
+<li><a href="compile.html#secure_delete">compile.html#secure_delete</a> &rarr; -DSQLITE_SECURE_DELETE SQLITE_SECURE_DELETE</li>
+<li><a href="compile.html#sorter_pmasz">compile.html#sorter_pmasz</a> &rarr; -DSQLITE_SORTER_PMASZ SQLITE_SORTER_PMASZ</li>
+<li><a href="compile.html#soundex">compile.html#soundex</a> &rarr; -DSQLITE_SOUNDEX SQLITE_SOUNDEX</li>
+<li><a href="compile.html#sqlite_config_h">compile.html#sqlite_config_h</a> &rarr; -DHAVE_SQLITE_CONFIG_H HAVE_SQLITE_CONFIG_H</li>
+<li><a href="compile.html#stdcall">compile.html#stdcall</a> &rarr; -DSQLITE_STDCALL SQLITE_STDCALL</li>
+<li><a href="compile.html#stmtjrnl_spill">compile.html#stmtjrnl_spill</a> &rarr; -DSQLITE_STMTJRNL_SPILL SQLITE_STMTJRNL_SPILL</li>
+<li><a href="compile.html#strchrnul">compile.html#strchrnul</a> &rarr; -DHAVE_STRCHRNUL HAVE_STRCHRNUL</li>
+<li><a href="compile.html#sysapi">compile.html#sysapi</a> &rarr; -DSQLITE_SYSAPI SQLITE_SYSAPI</li>
+<li><a href="compile.html#tclapi">compile.html#tclapi</a> &rarr; -DSQLITE_TCLAPI SQLITE_TCLAPI</li>
+<li><a href="compile.html#temp_store">compile.html#temp_store</a> &rarr; -DSQLITE_TEMP_STORE SQLITE_TEMP_STORE</li>
+<li><a href="compile.html#threadsafe">compile.html#threadsafe</a> &rarr; -DSQLITE_THREADSAFE SQLITE_THREADSAFE</li>
+<li><a href="compile.html#trace_size_limit">compile.html#trace_size_limit</a> &rarr; -DSQLITE_TRACE_SIZE_LIMIT SQLITE_TRACE_SIZE_LIMIT</li>
+<li><a href="compile.html#trusted_schema">compile.html#trusted_schema</a> &rarr; -DSQLITE_TRUSTED_SCHEMA SQLITE_TRUSTED_SCHEMA</li>
+<li><a href="compile.html#untestable">compile.html#untestable</a> &rarr; -DSQLITE_UNTESTABLE SQLITE_UNTESTABLE</li>
+<li><a href="compile.html#use_alloca">compile.html#use_alloca</a> &rarr; -DSQLITE_USE_ALLOCA SQLITE_USE_ALLOCA</li>
+<li><a href="compile.html#use_fcntl_trace">compile.html#use_fcntl_trace</a> &rarr; -DSQLITE_USE_FCNTL_TRACE SQLITE_USE_FCNTL_TRACE</li>
+<li><a href="compile.html#use_uri">compile.html#use_uri</a> &rarr; -DSQLITE_USE_URI SQLITE_USE_URI</li>
+<li><a href="compile.html#usleep">compile.html#usleep</a> &rarr; -DHAVE_USLEEP HAVE_USLEEP</li>
+<li><a href="compile.html#utime">compile.html#utime</a> &rarr; -DHAVE_UTIME HAVE_UTIME</li>
+<li><a href="compile.html#win32_heap_create">compile.html#win32_heap_create</a> &rarr; -DSQLITE_WIN32_HEAP_CREATE SQLITE_WIN32_HEAP_CREATE</li>
+<li><a href="compile.html#win32_malloc">compile.html#win32_malloc</a> &rarr; -DSQLITE_WIN32_MALLOC SQLITE_WIN32_MALLOC</li>
+<li><a href="compile.html#win32_malloc_validate">compile.html#win32_malloc_validate</a> &rarr; -DSQLITE_WIN32_MALLOC_VALIDATE SQLITE_WIN32_MALLOC_VALIDATE</li>
+<li><a href="compile.html#yystackdepth">compile.html#yystackdepth</a> &rarr; YYSTACKDEPTH</li>
+<li><a href="compile.html#yytrackmaxstackdepth">compile.html#yytrackmaxstackdepth</a> &rarr; YYTRACKMAXSTACKDEPTH</li>
+<li><a href="compile.html#zero_malloc">compile.html#zero_malloc</a> &rarr; -DSQLITE_ZERO_MALLOC SQLITE_ZERO_MALLOC</li>
+<li><a href="completion.html">completion.html</a> &rarr; COMPLETION {COMPLETION extension} {COMPLETION table-valued function}</li>
+<li><a href="consortium.html">consortium.html</a> &rarr; {SQLite Consortium}</li>
+<li><a href="copyright.html">copyright.html</a> &rarr; copyright license public-domain</li>
+<li><a href="copyright.html#notopencontrib">copyright.html#notopencontrib</a> &rarr; {not open-contributin}</li>
+<li><a href="copyright.html#warrantyoftitle">copyright.html#warrantyoftitle</a> &rarr; {Warranty of Title}</li>
+<li><a href="cpu.html">cpu.html</a> &rarr; {CPU cycles used} {CPU performance measurement}</li>
+<li><a href="cpu.html#microopt">cpu.html#microopt</a> &rarr; microoptimizations</li>
+<li><a href="crew.html">crew.html</a> &rarr; Hipp Kennedy crew</li>
+<li><a href="crew.html#dan">crew.html#dan</a> &rarr; {Dan Kennedy}</li>
+<li><a href="csv.html">csv.html</a> &rarr; {CSV virtual table} csv</li>
+<li><a href="custombuild.html">custombuild.html</a> &rarr; {custom builds} {porting SQLite}</li>
+<li><a href="cves.html">cves.html</a> &rarr; CVEs {reported vulnerabilities} vulnerabilities</li>
+<li><a href="cves.html#cvetab">cves.html#cvetab</a> &rarr; {recent CVEs}</li>
+<li><a href="datatype3.html">datatype3.html</a> &rarr; datatype {dynamic typing} {flexible type system}</li>
+<li><a href="datatype3.html#affcompoundview">datatype3.html#affcompoundview</a> &rarr; {affinity in compound VIEWs}</li>
+<li><a href="datatype3.html#affinity">datatype3.html#affinity</a> &rarr; affinities affinity {column affinity} {type affinity}</li>
+<li><a href="datatype3.html#affname">datatype3.html#affname</a> &rarr; {rules for determining column affinity}</li>
+<li><a href="datatype3.html#affview">datatype3.html#affview</a> &rarr; {rules for determining column affinity in VIEWs}</li>
+<li><a href="datatype3.html#boolean">datatype3.html#boolean</a> &rarr; {boolean datatype}</li>
+<li><a href="datatype3.html#collation">datatype3.html#collation</a> &rarr; BINARY {BINARY collating function} NOCASE {NOCASE collating function} RTRIM {RTRIM collating function} {collating function} {collating sequence} {collating sequences} collation</li>
+<li><a href="datatype3.html#colrules">datatype3.html#colrules</a> &rarr; {how collation is determined}</li>
+<li><a href="datatype3.html#compaff">datatype3.html#compaff</a> &rarr; {comparison affinity rules}</li>
+<li><a href="datatype3.html#comparisons">datatype3.html#comparisons</a> &rarr; {comparison expressions}</li>
+<li><a href="datatype3.html#datetime">datatype3.html#datetime</a> &rarr; {date and time datatype}</li>
+<li><a href="datatype3.html#expraff">datatype3.html#expraff</a> &rarr; {Affinity Of Expressions} {expression affinity}</li>
+<li><a href="datatype3.html#sortorder">datatype3.html#sortorder</a> &rarr; {sort order}</li>
+<li><a href="datatype3.html#storageclasses">datatype3.html#storageclasses</a> &rarr; {storage class}</li>
+<li><a href="dbhash.html">dbhash.html</a> &rarr; dbhash dbhash.exe</li>
+<li><a href="dbpage.html">dbpage.html</a> &rarr; {SQLITE_DBPAGE virtual table} sqlite_dbpage {the SQLITE_DBPAGE extension}</li>
+<li><a href="dbstat.html">dbstat.html</a> &rarr; {DBSTAT virtual table} dbstat {dbstat virtual table}</li>
+<li><a href="dbstat.html#dbstatagg">dbstat.html#dbstatagg</a> &rarr; {DBSTAT aggregated mode}</li>
+<li><a href="debugging.html">debugging.html</a> &rarr; dbghints {debugging hints}</li>
+<li><a href="deterministic.html">deterministic.html</a> &rarr; {deterministic SQL functions} {deterministic function} {deterministic functions} {non-deterministic functions}</li>
+<li><a href="deterministic.html#dtexception">deterministic.html#dtexception</a> &rarr; {date/time special case}</li>
+<li><a href="doclist.html">doclist.html</a> &rarr; {alphabetical listing of documents} doclist</li>
+<li><a href="docs.html">docs.html</a> &rarr; {categorical listing of SQLite documents} {documents by category}</li>
+<li><a href="download.html">download.html</a> &rarr; {TEA tarball} {amalgamation tarball} {download page}</li>
+<li><a href="download.html#encoding">download.html#encoding</a> &rarr; {build product names}</li>
+<li><a href="download.html#srctree">download.html#srctree</a> &rarr; {SQLite source code repositories} {code repositories}</li>
+<li><a href="eqp.html">eqp.html</a> &rarr; {EXPLAIN QUERY PLAN} {explain query plan}</li>
+<li><a href="eqp.html#or-opt">eqp.html#or-opt</a> &rarr; eqp-or-opt</li>
+<li><a href="errlog.html">errlog.html</a> &rarr; errlog {error log}</li>
+<li><a href="expridx.html">expridx.html</a> &rarr; {Indexes On Expressions} {expression index} {expression indexes} {indexes on expressions}</li>
+<li><a href="fasterthanfs.html">fasterthanfs.html</a> &rarr; {35 Faster Than The Filesystem} {faster than the filesystem}</li>
+<li><a href="fileformat2.html">fileformat2.html</a> &rarr; {SQLite database file format} {file format} {on-disk format} {second edition file format document}</li>
+<li><a href="fileformat2.html##sqltab">fileformat2.html##sqltab</a> &rarr; {table data format}</li>
+<li><a href="fileformat2.html#appid">fileformat2.html#appid</a> &rarr; {Application ID}</li>
+<li><a href="fileformat2.html#btree">fileformat2.html#btree</a> &rarr; B-Trees B-tree</li>
+<li><a href="fileformat2.html#btypes">fileformat2.html#btypes</a> &rarr; {index b-tree} {table b-tree}</li>
+<li><a href="fileformat2.html#cell_payload">fileformat2.html#cell_payload</a> &rarr; {cell payload}</li>
+<li><a href="fileformat2.html#cellformat">fileformat2.html#cellformat</a> &rarr; {cell format summary}</li>
+<li><a href="fileformat2.html#chngctr">fileformat2.html#chngctr</a> &rarr; {change counter}</li>
+<li><a href="fileformat2.html#database_header">fileformat2.html#database_header</a> &rarr; {database header}</li>
+<li><a href="fileformat2.html#enc">fileformat2.html#enc</a> &rarr; {text encoding}</li>
+<li><a href="fileformat2.html#ffschema">fileformat2.html#ffschema</a> &rarr; {schema storage}</li>
+<li><a href="fileformat2.html#filesize">fileformat2.html#filesize</a> &rarr; {in-header database size}</li>
+<li><a href="fileformat2.html#freelist">fileformat2.html#freelist</a> &rarr; {free-page list} freelist</li>
+<li><a href="fileformat2.html#hotjrnl">fileformat2.html#hotjrnl</a> &rarr; {hot journal} {hot journal files}</li>
+<li><a href="fileformat2.html#intschema">fileformat2.html#intschema</a> &rarr; {internal index} {internal indexes} {internal schema object} {internal schema objects} {internal table} {internal tables}</li>
+<li><a href="fileformat2.html#lockbyte">fileformat2.html#lockbyte</a> &rarr; {lock-byte page}</li>
+<li><a href="fileformat2.html#ovflpgs">fileformat2.html#ovflpgs</a> &rarr; {overflow page} {overflow pages}</li>
+<li><a href="fileformat2.html#record_format">fileformat2.html#record_format</a> &rarr; {record format}</li>
+<li><a href="fileformat2.html#resbyte">fileformat2.html#resbyte</a> &rarr; {reserve bytes}</li>
+<li><a href="fileformat2.html#rollbackjournal">fileformat2.html#rollbackjournal</a> &rarr; {rollback journal format}</li>
+<li><a href="fileformat2.html#schemaformat">fileformat2.html#schemaformat</a> &rarr; {schema format} {schema format number}</li>
+<li><a href="fileformat2.html#seqtab">fileformat2.html#seqtab</a> &rarr; sqlite_sequence</li>
+<li><a href="fileformat2.html#serialtype">fileformat2.html#serialtype</a> &rarr; {serial type} {serial types}</li>
+<li><a href="fileformat2.html#stat1tab">fileformat2.html#stat1tab</a> &rarr; SQLITE_STAT1 sqlite_stat1</li>
+<li><a href="fileformat2.html#stat2tab">fileformat2.html#stat2tab</a> &rarr; sqlite_stat2</li>
+<li><a href="fileformat2.html#stat3tab">fileformat2.html#stat3tab</a> &rarr; SQLITE_STAT3 sqlite_stat3</li>
+<li><a href="fileformat2.html#stat4tab">fileformat2.html#stat4tab</a> &rarr; SQLITE_STAT4 sqlite_stat4</li>
+<li><a href="fileformat2.html#usable_size">fileformat2.html#usable_size</a> &rarr; {usable size}</li>
+<li><a href="fileformat2.html#validfor">fileformat2.html#validfor</a> &rarr; {version-valid-for number}</li>
+<li><a href="fileformat2.html#varint">fileformat2.html#varint</a> &rarr; {variable-length integer} varint</li>
+<li><a href="fileformat2.html#vnums">fileformat2.html#vnums</a> &rarr; {file format version numbers}</li>
+<li><a href="fileformat2.html#walcksm">fileformat2.html#walcksm</a> &rarr; {WAL checksum algorithm}</li>
+<li><a href="fileformat2.html#walformat">fileformat2.html#walformat</a> &rarr; {WAL file format} {WAL format}</li>
+<li><a href="fileformat2.html#walread">fileformat2.html#walread</a> &rarr; {WAL read algorithm}</li>
+<li><a href="fileformat2.html#walreset">fileformat2.html#walreset</a> &rarr; {WAL reset} {reset the WAL}</li>
+<li><a href="flextypegood.html">flextypegood.html</a> &rarr; {Flexible typing is a feature} {appreciate the freedom}</li>
+<li><a href="floatingpoint.html#decext">floatingpoint.html#decext</a> &rarr; {decimal extension}</li>
+<li><a href="floatingpoint.html#ieee754">floatingpoint.html#ieee754</a> &rarr; {ieee754 function}</li>
+<li><a href="floatingpoint.html#ieee754b">floatingpoint.html#ieee754b</a> &rarr; {ieee754_from_blob function} {ieee754_to_blob function}</li>
+<li><a href="floatingpoint.html#ieee754ext">floatingpoint.html#ieee754ext</a> &rarr; {ieee754 extension}</li>
+<li><a href="floatingpoint.html#ieee754m">floatingpoint.html#ieee754m</a> &rarr; {ieee754_exponent function} {ieee754_mantissa function}</li>
+<li><a href="footprint.html">footprint.html</a> &rarr; footprint {library size} relfootprint</li>
+<li><a href="foreignkeys.html">foreignkeys.html</a> &rarr; {FOREIGN KEY constraints} {foreign key constraint} {foreign key constraints}</li>
+<li><a href="foreignkeys.html#fk_actions">foreignkeys.html#fk_actions</a> &rarr; {foreign key actions}</li>
+<li><a href="foreignkeys.html#fk_enable">foreignkeys.html#fk_enable</a> &rarr; {foreign key constraints are enabled}</li>
+<li><a href="foreignkeys.html#parentchild">foreignkeys.html#parentchild</a> &rarr; {child key} {child table} {parent key} {parent table}</li>
+<li><a href="fts3.html">fts3.html</a> &rarr; FTS3 fts3 {full-text search}</li>
+<li><a href="fts3.html#*cmds">fts3.html#*cmds</a> &rarr; {FTS4 commands}</li>
+<li><a href="fts3.html#*fts4automergecmd">fts3.html#*fts4automergecmd</a> &rarr; {FTS4 automerge command} {automerge command}</li>
+<li><a href="fts3.html#*fts4compression">fts3.html#*fts4compression</a> &rarr; {compressed FTS4 content}</li>
+<li><a href="fts3.html#*fts4content">fts3.html#*fts4content</a> &rarr; {FTS4 content option}</li>
+<li><a href="fts3.html#*fts4ickcmd">fts3.html#*fts4ickcmd</a> &rarr; {FTS4 integrity-check command}</li>
+<li><a href="fts3.html#*fts4languageid">fts3.html#*fts4languageid</a> &rarr; {FTS4 languageid option} languageid</li>
+<li><a href="fts3.html#*fts4mergecmd">fts3.html#*fts4mergecmd</a> &rarr; {FTS4 merge command} {merge command}</li>
+<li><a href="fts3.html#*fts4optcmd">fts3.html#*fts4optcmd</a> &rarr; {FTS4 optimize command} {optimize command}</li>
+<li><a href="fts3.html#*fts4rebuidcmd">fts3.html#*fts4rebuidcmd</a> &rarr; {FTS4 rebuild command} {rebuild command}</li>
+<li><a href="fts3.html#*shadowtab">fts3.html#*shadowtab</a> &rarr; {FTS shadow tables}</li>
+<li><a href="fts3.html#_contentless_fts4_tables_">fts3.html#_contentless_fts4_tables_</a> &rarr; {contentless fts4 tables}</li>
+<li><a href="fts3.html#_external_content_fts4_tables_">fts3.html#_external_content_fts4_tables_</a> &rarr; {external content fts4 tables}</li>
+<li><a href="fts3.html#_set_operations_using_the_enhanced_query_syntax">fts3.html#_set_operations_using_the_enhanced_query_syntax</a> &rarr; {enhanced query syntax}</li>
+<li><a href="fts3.html#appendix_a">fts3.html#appendix_a</a> &rarr; {search application tips}</li>
+<li><a href="fts3.html#commands">fts3.html#commands</a> &rarr; commands</li>
+<li><a href="fts3.html#compiling_and_enabling_fts3_and_fts4">fts3.html#compiling_and_enabling_fts3_and_fts4</a> &rarr; {compile fts}</li>
+<li><a href="fts3.html#data_structures">fts3.html#data_structures</a> &rarr; {segment btree}</li>
+<li><a href="fts3.html#f3tknzr">fts3.html#f3tknzr</a> &rarr; fts3_tokenizer</li>
+<li><a href="fts3.html#f4alid">fts3.html#f4alid</a> &rarr; {fts4aux languageid column}</li>
+<li><a href="fts3.html#fts3tok">fts3.html#fts3tok</a> &rarr; fts3tokenize {fts3tokenize virtual table}</li>
+<li><a href="fts3.html#fts4">fts3.html#fts4</a> &rarr; FTS4</li>
+<li><a href="fts3.html#fts4_options">fts3.html#fts4_options</a> &rarr; {FTS4 options}</li>
+<li><a href="fts3.html#fts4aux">fts3.html#fts4aux</a> &rarr; fts4aux</li>
+<li><a href="fts3.html#fts4matchinfo">fts3.html#fts4matchinfo</a> &rarr; {FTS4 matchinfo option}</li>
+<li><a href="fts3.html#fts4notindexed">fts3.html#fts4notindexed</a> &rarr; {FTS4 notindexed option}</li>
+<li><a href="fts3.html#fts4order">fts3.html#fts4order</a> &rarr; {FTS4 order option}</li>
+<li><a href="fts3.html#fts4prefix">fts3.html#fts4prefix</a> &rarr; {FTS4 prefix option}</li>
+<li><a href="fts3.html#full_text_index_queries">fts3.html#full_text_index_queries</a> &rarr; {FTS MATCH}</li>
+<li><a href="fts3.html#hiddencol">fts3.html#hiddencol</a> &rarr; {FTS hidden column}</li>
+<li><a href="fts3.html#limitations">fts3.html#limitations</a> &rarr; bugs</li>
+<li><a href="fts3.html#matchinfo">fts3.html#matchinfo</a> &rarr; matchinfo</li>
+<li><a href="fts3.html#matchinfo-b">fts3.html#matchinfo-b</a> &rarr; {matchinfo b flag}</li>
+<li><a href="fts3.html#matchinfo-x">fts3.html#matchinfo-x</a> &rarr; {matchinfo x flag}</li>
+<li><a href="fts3.html#matchinfo-y">fts3.html#matchinfo-y</a> &rarr; {matchinfo y flag}</li>
+<li><a href="fts3.html#near">fts3.html#near</a> &rarr; {NEAR queries}</li>
+<li><a href="fts3.html#offsets">fts3.html#offsets</a> &rarr; offsets</li>
+<li><a href="fts3.html#phrase">fts3.html#phrase</a> &rarr; {phrase queries}</li>
+<li><a href="fts3.html#shadow_tables">fts3.html#shadow_tables</a> &rarr; shadowtabs</li>
+<li><a href="fts3.html#simple_fts_queries">fts3.html#simple_fts_queries</a> &rarr; {simple fts queries}</li>
+<li><a href="fts3.html#snippet">fts3.html#snippet</a> &rarr; {FTS auxiliary functions} snippet</li>
+<li><a href="fts3.html#termprefix">fts3.html#termprefix</a> &rarr; {prefix queries} {prefix query}</li>
+<li><a href="fts3.html#the_compress_and_uncompress_options">fts3.html#the_compress_and_uncompress_options</a> &rarr; {fts4 compress option}</li>
+<li><a href="fts3.html#the_content_option_">fts3.html#the_content_option_</a> &rarr; {fts4 content option}</li>
+<li><a href="fts3.html#the_languageid_option">fts3.html#the_languageid_option</a> &rarr; {fts4 languageid option}</li>
+<li><a href="fts3.html#the_matchinfo_option">fts3.html#the_matchinfo_option</a> &rarr; {fts4 matchinfo option}</li>
+<li><a href="fts3.html#the_notindexed_option">fts3.html#the_notindexed_option</a> &rarr; {fts4 notindexed option}</li>
+<li><a href="fts3.html#the_prefix_option">fts3.html#the_prefix_option</a> &rarr; {fts4 prefix option}</li>
+<li><a href="fts3.html#tokenizer">fts3.html#tokenizer</a> &rarr; tokenizer</li>
+<li><a href="fts3.html#unicode61">fts3.html#unicode61</a> &rarr; unicode61</li>
+<li><a href="fts5.html">fts5.html</a> &rarr; FTS5 fts5</li>
+<li><a href="fts5.html#_auxiliary_functions_">fts5.html#_auxiliary_functions_</a> &rarr; {FTS5 auxiliary functions}</li>
+<li><a href="fts5.html#_custom_auxiliary_functions_api_reference_">fts5.html#_custom_auxiliary_functions_api_reference_</a> &rarr; {custom auxiliary functions}</li>
+<li><a href="fts5.html#_summary_of_technical_differences_">fts5.html#_summary_of_technical_differences_</a> &rarr; {fts5 technical differences}</li>
+<li><a href="fts5.html#appendix_a">fts5.html#appendix_a</a> &rarr; {comparison with fts4}</li>
+<li><a href="fts5.html#carrotq">fts5.html#carrotq</a> &rarr; {FTS5 initial token}</li>
+<li><a href="fts5.html#compiling_and_using_fts5">fts5.html#compiling_and_using_fts5</a> &rarr; {FTS5 building}</li>
+<li><a href="fts5.html#contentless_tables">fts5.html#contentless_tables</a> &rarr; {FTS5 contentless tables}</li>
+<li><a href="fts5.html#custom_auxiliary_functions">fts5.html#custom_auxiliary_functions</a> &rarr; {FTS5 custom auxiliary functions}</li>
+<li><a href="fts5.html#custom_tokenizers">fts5.html#custom_tokenizers</a> &rarr; {custom tokenizers}</li>
+<li><a href="fts5.html#extending_fts5">fts5.html#extending_fts5</a> &rarr; {Extending FTS5}</li>
+<li><a href="fts5.html#external_content_and_contentless_tables">fts5.html#external_content_and_contentless_tables</a> &rarr; {FTS5 content option}</li>
+<li><a href="fts5.html#external_content_tables">fts5.html#external_content_tables</a> &rarr; {FTS5 external content tables}</li>
+<li><a href="fts5.html#fts5_boolean_operators">fts5.html#fts5_boolean_operators</a> &rarr; {FTS5 boolean operators}</li>
+<li><a href="fts5.html#fts5_column_filters">fts5.html#fts5_column_filters</a> &rarr; {FTS5 column filters}</li>
+<li><a href="fts5.html#fts5_initial_token_queries">fts5.html#fts5_initial_token_queries</a> &rarr; {FTS5 initial token queries}</li>
+<li><a href="fts5.html#fts5_near_queries">fts5.html#fts5_near_queries</a> &rarr; {FTS5 NEAR queries}</li>
+<li><a href="fts5.html#fts5_phrases">fts5.html#fts5_phrases</a> &rarr; {FTS5 Phrases}</li>
+<li><a href="fts5.html#fts5_prefix_queries">fts5.html#fts5_prefix_queries</a> &rarr; {FTS5 prefix queries}</li>
+<li><a href="fts5.html#fts5_strings">fts5.html#fts5_strings</a> &rarr; {FTS5 Strings}</li>
+<li><a href="fts5.html#fts5_table_creation_and_initialization">fts5.html#fts5_table_creation_and_initialization</a> &rarr; {FTS5 CREATE TABLE Options}</li>
+<li><a href="fts5.html#fts5shadowtables">fts5.html#fts5shadowtables</a> &rarr; {fts5 shadow tables}</li>
+<li><a href="fts5.html#full_text_query_syntax">fts5.html#full_text_query_syntax</a> &rarr; {FTS5 query syntax}</li>
+<li><a href="fts5.html#prefix_indexes">fts5.html#prefix_indexes</a> &rarr; {FTS5 prefix indexes}</li>
+<li><a href="fts5.html#sorting_by_auxiliary_function_results">fts5.html#sorting_by_auxiliary_function_results</a> &rarr; {auxiliary function mapping}</li>
+<li><a href="fts5.html#the_automerge_configuration_option">fts5.html#the_automerge_configuration_option</a> &rarr; {FTS5 automerge option}</li>
+<li><a href="fts5.html#the_bm25_function">fts5.html#the_bm25_function</a> &rarr; {FTS5 bm25}</li>
+<li><a href="fts5.html#the_columnsize_option">fts5.html#the_columnsize_option</a> &rarr; {FTS5 columnsize option}</li>
+<li><a href="fts5.html#the_delete_all_command">fts5.html#the_delete_all_command</a> &rarr; {FTS5 delete-all command}</li>
+<li><a href="fts5.html#the_delete_command">fts5.html#the_delete_command</a> &rarr; {FTS5 delete command}</li>
+<li><a href="fts5.html#the_detail_option">fts5.html#the_detail_option</a> &rarr; {FTS5 detail option}</li>
+<li><a href="fts5.html#the_fts5vocab_virtual_table_module">fts5.html#the_fts5vocab_virtual_table_module</a> &rarr; fts5vocab</li>
+<li><a href="fts5.html#the_highlight_function">fts5.html#the_highlight_function</a> &rarr; {FTS5 highlight}</li>
+<li><a href="fts5.html#the_merge_command">fts5.html#the_merge_command</a> &rarr; {FTS5 merge command}</li>
+<li><a href="fts5.html#the_optimize_command">fts5.html#the_optimize_command</a> &rarr; {FTS5 optimize command}</li>
+<li><a href="fts5.html#the_pgsz_configuration_option">fts5.html#the_pgsz_configuration_option</a> &rarr; {FTS5 pgsz option}</li>
+<li><a href="fts5.html#the_rank_configuration_option">fts5.html#the_rank_configuration_option</a> &rarr; {FTS5 rank configuration option}</li>
+<li><a href="fts5.html#the_rebuild_command">fts5.html#the_rebuild_command</a> &rarr; {FTS5 rebuild command}</li>
+<li><a href="fts5.html#the_snippet_function">fts5.html#the_snippet_function</a> &rarr; {FTS5 snippet}</li>
+<li><a href="fts5.html#the_unindexed_column_option">fts5.html#the_unindexed_column_option</a> &rarr; unindexed</li>
+<li><a href="fts5.html#the_usermerge_configuration_option">fts5.html#the_usermerge_configuration_option</a> &rarr; {FTS5 usermerge option}</li>
+<li><a href="fts5.html#tokenizers">fts5.html#tokenizers</a> &rarr; {FTS5 tokenizers}</li>
+<li><a href="fts5.html#trigramidx">fts5.html#trigramidx</a> &rarr; {trigram indexes} {trigram tokenizer}</li>
+<li><a href="fullsql.html">fullsql.html</a> &rarr; {Full-featured SQL} {full-featured SQL}</li>
+<li><a href="gencol.html">gencol.html</a> &rarr; {Generated columns} {computed columns} {generated column} {generated columns}</li>
+<li><a href="geopoly.html">geopoly.html</a> &rarr; {Geopoly extension} {Geopoly module} geopoly</li>
+<li><a href="geopoly.html#ccw">geopoly.html#ccw</a> &rarr; geopoly_ccw</li>
+<li><a href="geopoly.html#garea">geopoly.html#garea</a> &rarr; geopoly_area</li>
+<li><a href="geopoly.html#gbbox">geopoly.html#gbbox</a> &rarr; geopoly_bbox geopoly_group_bbox</li>
+<li><a href="geopoly.html#gblob">geopoly.html#gblob</a> &rarr; geopoly_blob</li>
+<li><a href="geopoly.html#gjson">geopoly.html#gjson</a> &rarr; geopoly_json</li>
+<li><a href="geopoly.html#goverlap">geopoly.html#goverlap</a> &rarr; geopoly_overlap</li>
+<li><a href="geopoly.html#gpoint">geopoly.html#gpoint</a> &rarr; geopoly_contains_point</li>
+<li><a href="geopoly.html#gsvg">geopoly.html#gsvg</a> &rarr; geopoly_svg</li>
+<li><a href="geopoly.html#gwithin">geopoly.html#gwithin</a> &rarr; geopoly_within</li>
+<li><a href="geopoly.html#regpoly">geopoly.html#regpoly</a> &rarr; geopoly_regular</li>
+<li><a href="geopoly.html#xform">geopoly.html#xform</a> &rarr; geopoly_xform</li>
+<li><a href="getthecode.html">getthecode.html</a> &rarr; {canonical source code} {get the canonical source code}</li>
+<li><a href="getthecode.html#clone">getthecode.html#clone</a> &rarr; {clone the entire repository}</li>
+<li><a href="hirely.html">hirely.html</a> &rarr; high-reliability</li>
+<li><a href="howitworks.html">howitworks.html</a> &rarr; {How SQL Works} {How SQLite Works}</li>
+<li><a href="howtocompile.html">howtocompile.html</a> &rarr; {How To Compile SQLite} {how to compile}</li>
+<li><a href="howtocompile.html#amal">howtocompile.html#amal</a> &rarr; {building the amalgamation}</li>
+<li><a href="howtocompile.html#cli">howtocompile.html#cli</a> &rarr; {compiling the CLI}</li>
+<li><a href="howtocompile.html#dll">howtocompile.html#dll</a> &rarr; {building a DLL}</li>
+<li><a href="howtocompile.html#tcl">howtocompile.html#tcl</a> &rarr; {compiling the TCL interface}</li>
+<li><a href="howtocorrupt.html">howtocorrupt.html</a> &rarr; {how to corrupt}</li>
+<li><a href="howtocorrupt.html#alias">howtocorrupt.html#alias</a> &rarr; {database filename aliasing}</li>
+<li><a href="howtocorrupt.html#cfgerr">howtocorrupt.html#cfgerr</a> &rarr; cfgerrors</li>
+<li><a href="howtocorrupt.html#delhotjrnl">howtocorrupt.html#delhotjrnl</a> &rarr; {deleting a hot journal}</li>
+<li><a href="howtocorrupt.html#fscorruption">howtocorrupt.html#fscorruption</a> &rarr; {filesystem corruption}</li>
+<li><a href="howtocorrupt.html#roguejrnl">howtocorrupt.html#roguejrnl</a> &rarr; {separating a database from its journal}</li>
+<li><a href="howtocorrupt.html#stalefd">howtocorrupt.html#stalefd</a> &rarr; {stale file descriptor}</li>
+<li><a href="howtocorrupt.html#svptbug">howtocorrupt.html#svptbug</a> &rarr; {SAVEPOINT bug}</li>
+<li><a href="howtocorrupt.html#unlink">howtocorrupt.html#unlink</a> &rarr; {unlink corruption} {unlinked database files}</li>
+<li><a href="imposter.html">imposter.html</a> &rarr; {imposter tables}</li>
+<li><a href="imposter.html#dotimposter">imposter.html#dotimposter</a> &rarr; {.imposter dot-command}</li>
+<li><a href="inmemorydb.html">inmemorydb.html</a> &rarr; {in-memory database} {in-memory databases} memory</li>
+<li><a href="inmemorydb.html#sharedmemdb">inmemorydb.html#sharedmemdb</a> &rarr; {in-memory shared cache database}</li>
+<li><a href="inmemorydb.html#temp_db">inmemorydb.html#temp_db</a> &rarr; {temporary databases} {temporary tables}</li>
+<li><a href="intern-v-extern-blob.html">intern-v-extern-blob.html</a> &rarr; {BLOB I/O performance} {Internal Versus External BLOBs}</li>
+<li><a href="invalidutf.html">invalidutf.html</a> &rarr; {invalid UTF}</li>
+<li><a href="isolation.html">isolation.html</a> &rarr; isolation</li>
+<li><a href="json1.html">json1.html</a> &rarr; {JSON SQL functions} json1 {the json1 extension}</li>
+<li><a href="json1.html#jarray">json1.html#jarray</a> &rarr; json_array {json_array SQL function}</li>
+<li><a href="json1.html#jarraylen">json1.html#jarraylen</a> &rarr; json_array_length {json_array_length SQL function}</li>
+<li><a href="json1.html#jeach">json1.html#jeach</a> &rarr; json_each {json_each table-valued function}</li>
+<li><a href="json1.html#jex">json1.html#jex</a> &rarr; json_extract {json_extract SQL function}</li>
+<li><a href="json1.html#jgrouparray">json1.html#jgrouparray</a> &rarr; json_group_array {json_group_array SQL function}</li>
+<li><a href="json1.html#jgroupobject">json1.html#jgroupobject</a> &rarr; json_group_object {json_group_object SQL function}</li>
+<li><a href="json1.html#jins">json1.html#jins</a> &rarr; json_insert {json_insert SQL function}</li>
+<li><a href="json1.html#jmini">json1.html#jmini</a> &rarr; json {json SQL function}</li>
+<li><a href="json1.html#jobj">json1.html#jobj</a> &rarr; json_object {json_object SQL function}</li>
+<li><a href="json1.html#jpatch">json1.html#jpatch</a> &rarr; json_patch {json_patch SQL function}</li>
+<li><a href="json1.html#jptr">json1.html#jptr</a> &rarr; {the - and - operators} {the - operator}</li>
+<li><a href="json1.html#jquote">json1.html#jquote</a> &rarr; json_quote {json_quote SQL function}</li>
+<li><a href="json1.html#jrepl">json1.html#jrepl</a> &rarr; json_replace {json_replace SQL function}</li>
+<li><a href="json1.html#jrm">json1.html#jrm</a> &rarr; json_remove {json_remove SQL function}</li>
+<li><a href="json1.html#jset">json1.html#jset</a> &rarr; json_set {json_set SQL function}</li>
+<li><a href="json1.html#jsonpath">json1.html#jsonpath</a> &rarr; {JSON function path arguments} {JSON paths}</li>
+<li><a href="json1.html#jtree">json1.html#jtree</a> &rarr; json_tree {json_tree table-valued function}</li>
+<li><a href="json1.html#jtype">json1.html#jtype</a> &rarr; json_type {json_type SQL function}</li>
+<li><a href="json1.html#jvalid">json1.html#jvalid</a> &rarr; json_valid {json_valid SQL function}</li>
+<li><a href="json1.html#varg">json1.html#varg</a> &rarr; {value argument}</li>
+<li><a href="keyword_index.html">keyword_index.html</a> &rarr; {keyword index}</li>
+<li><a href="lang_aggfunc.html">lang_aggfunc.html</a> &rarr; {Aggregate Functions} aggfunc {aggregate functions}</li>
+<li><a href="lang_aggfunc.html#aggfilter">lang_aggfunc.html#aggfilter</a> &rarr; {FILTER clause on aggregate functions}</li>
+<li><a href="lang_aggfunc.html#avg">lang_aggfunc.html#avg</a> &rarr; avg {avg aggregate function}</li>
+<li><a href="lang_aggfunc.html#count">lang_aggfunc.html#count</a> &rarr; count {count aggregate function}</li>
+<li><a href="lang_aggfunc.html#group_concat">lang_aggfunc.html#group_concat</a> &rarr; group_concat {group_concat aggregate function}</li>
+<li><a href="lang_aggfunc.html#max_agg">lang_aggfunc.html#max_agg</a> &rarr; {max aggregate function} max_agg</li>
+<li><a href="lang_aggfunc.html#min_agg">lang_aggfunc.html#min_agg</a> &rarr; {min aggregate function} min_agg</li>
+<li><a href="lang_aggfunc.html#sumunc">lang_aggfunc.html#sumunc</a> &rarr; sum {sum aggregate function} sumFunc total {total aggregate function}</li>
+<li><a href="lang_altertable.html">lang_altertable.html</a> &rarr; ALTER {ALTER TABLE} altertable</li>
+<li><a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a> &rarr; {ALTER TABLE ADD COLUMN} {add column}</li>
+<li><a href="lang_altertable.html#altertabdropcol">lang_altertable.html#altertabdropcol</a> &rarr; {ALTER TABLE DROP COLUMN} {drop column}</li>
+<li><a href="lang_altertable.html#altertableishard">lang_altertable.html#altertableishard</a> &rarr; {why ALTER TABLE is so difficult}</li>
+<li><a href="lang_altertable.html#altertabmvcol">lang_altertable.html#altertabmvcol</a> &rarr; {ALTER TABLE RENAME COLUMN} {rename column}</li>
+<li><a href="lang_altertable.html#altertabrename">lang_altertable.html#altertabrename</a> &rarr; {ALTER TABLE RENAME} {ALTER TABLE RENAME documentation} {rename table}</li>
+<li><a href="lang_altertable.html#otheralter">lang_altertable.html#otheralter</a> &rarr; {generalized ALTER TABLE procedure}</li>
+<li><a href="lang_analyze.html">lang_analyze.html</a> &rarr; ANALYZE analyze</li>
+<li><a href="lang_analyze.html#approx">lang_analyze.html#approx</a> &rarr; {approximate ANALYZE}</li>
+<li><a href="lang_analyze.html#autoanalyze">lang_analyze.html#autoanalyze</a> &rarr; {automatically running ANALYZE}</li>
+<li><a href="lang_analyze.html#req">lang_analyze.html#req</a> &rarr; {recommended ANALYZE usage pattern}</li>
+<li><a href="lang_attach.html">lang_attach.html</a> &rarr; ATTACH {ATTACH DATABASE} attach attached</li>
+<li><a href="lang_comment.html">lang_comment.html</a> &rarr; comment comments</li>
+<li><a href="lang_conflict.html">lang_conflict.html</a> &rarr; {ON CONFLICT} {ON CONFLICT clause} {ON CONFLICT clauses} conflict {conflict clause} {conflict resolution algorithm}</li>
+<li><a href="lang_corefunc.html">lang_corefunc.html</a> &rarr; {Core Functions} corefunc</li>
+<li><a href="lang_corefunc.html#abs">lang_corefunc.html#abs</a> &rarr; abs {abs SQL function}</li>
+<li><a href="lang_corefunc.html#changes">lang_corefunc.html#changes</a> &rarr; changes {changes SQL function}</li>
+<li><a href="lang_corefunc.html#char">lang_corefunc.html#char</a> &rarr; char {char SQL function}</li>
+<li><a href="lang_corefunc.html#coalesce">lang_corefunc.html#coalesce</a> &rarr; coalesce {coalesce SQL function}</li>
+<li><a href="lang_corefunc.html#format">lang_corefunc.html#format</a> &rarr; format {format SQL function}</li>
+<li><a href="lang_corefunc.html#glob">lang_corefunc.html#glob</a> &rarr; glob {glob SQL function}</li>
+<li><a href="lang_corefunc.html#hex">lang_corefunc.html#hex</a> &rarr; hex {hex SQL function}</li>
+<li><a href="lang_corefunc.html#ifnull">lang_corefunc.html#ifnull</a> &rarr; ifnull {ifnull SQL function}</li>
+<li><a href="lang_corefunc.html#iif">lang_corefunc.html#iif</a> &rarr; iif {iif SQL function}</li>
+<li><a href="lang_corefunc.html#instr">lang_corefunc.html#instr</a> &rarr; instr {instr SQL function}</li>
+<li><a href="lang_corefunc.html#last_insert_rowid">lang_corefunc.html#last_insert_rowid</a> &rarr; last_insert_rowid {last_insert_rowid SQL function}</li>
+<li><a href="lang_corefunc.html#length">lang_corefunc.html#length</a> &rarr; length {length SQL function}</li>
+<li><a href="lang_corefunc.html#like">lang_corefunc.html#like</a> &rarr; like {like SQL function}</li>
+<li><a href="lang_corefunc.html#likelihood">lang_corefunc.html#likelihood</a> &rarr; likelihood {likelihood SQL function}</li>
+<li><a href="lang_corefunc.html#likely">lang_corefunc.html#likely</a> &rarr; likely {likely SQL function}</li>
+<li><a href="lang_corefunc.html#load_extension">lang_corefunc.html#load_extension</a> &rarr; load_extension {load_extension SQL function}</li>
+<li><a href="lang_corefunc.html#lower">lang_corefunc.html#lower</a> &rarr; lower {lower SQL function}</li>
+<li><a href="lang_corefunc.html#ltrim">lang_corefunc.html#ltrim</a> &rarr; ltrim {ltrim SQL function}</li>
+<li><a href="lang_corefunc.html#max_scalar">lang_corefunc.html#max_scalar</a> &rarr; max {max SQL function} max_scalar</li>
+<li><a href="lang_corefunc.html#min_scalar">lang_corefunc.html#min_scalar</a> &rarr; min {min SQL function} min_scalar</li>
+<li><a href="lang_corefunc.html#nullif">lang_corefunc.html#nullif</a> &rarr; nullif {nullif SQL function}</li>
+<li><a href="lang_corefunc.html#printf">lang_corefunc.html#printf</a> &rarr; printf {printf SQL function}</li>
+<li><a href="lang_corefunc.html#quote">lang_corefunc.html#quote</a> &rarr; quote {quote SQL function}</li>
+<li><a href="lang_corefunc.html#random">lang_corefunc.html#random</a> &rarr; random {random SQL function}</li>
+<li><a href="lang_corefunc.html#randomblob">lang_corefunc.html#randomblob</a> &rarr; randomblob {randomblob SQL function}</li>
+<li><a href="lang_corefunc.html#replace">lang_corefunc.html#replace</a> &rarr; replace {replace SQL function}</li>
+<li><a href="lang_corefunc.html#round">lang_corefunc.html#round</a> &rarr; round {round SQL function}</li>
+<li><a href="lang_corefunc.html#rtrim">lang_corefunc.html#rtrim</a> &rarr; rtrim {rtrim SQL function}</li>
+<li><a href="lang_corefunc.html#sign">lang_corefunc.html#sign</a> &rarr; sign {sign SQL function}</li>
+<li><a href="lang_corefunc.html#soundex">lang_corefunc.html#soundex</a> &rarr; soundex {soundex SQL function}</li>
+<li><a href="lang_corefunc.html#sqlite_compileoption_get">lang_corefunc.html#sqlite_compileoption_get</a> &rarr; sqlite_compileoption_get {sqlite_compileoption_get SQL function}</li>
+<li><a href="lang_corefunc.html#sqlite_compileoption_used">lang_corefunc.html#sqlite_compileoption_used</a> &rarr; sqlite_compileoption_used {sqlite_compileoption_used SQL function}</li>
+<li><a href="lang_corefunc.html#sqlite_offset">lang_corefunc.html#sqlite_offset</a> &rarr; sqlite_offset {sqlite_offset SQL function}</li>
+<li><a href="lang_corefunc.html#sqlite_source_id">lang_corefunc.html#sqlite_source_id</a> &rarr; sqlite_source_id {sqlite_source_id SQL function}</li>
+<li><a href="lang_corefunc.html#sqlite_version">lang_corefunc.html#sqlite_version</a> &rarr; sqlite_version {sqlite_version SQL function}</li>
+<li><a href="lang_corefunc.html#substr">lang_corefunc.html#substr</a> &rarr; substr {substr SQL function}</li>
+<li><a href="lang_corefunc.html#total_changes">lang_corefunc.html#total_changes</a> &rarr; total_changes {total_changes SQL function}</li>
+<li><a href="lang_corefunc.html#trim">lang_corefunc.html#trim</a> &rarr; trim {trim SQL function}</li>
+<li><a href="lang_corefunc.html#typeof">lang_corefunc.html#typeof</a> &rarr; typeof {typeof SQL function}</li>
+<li><a href="lang_corefunc.html#unicode">lang_corefunc.html#unicode</a> &rarr; unicode {unicode SQL function}</li>
+<li><a href="lang_corefunc.html#unlikely">lang_corefunc.html#unlikely</a> &rarr; unlikely {unlikely SQL function}</li>
+<li><a href="lang_corefunc.html#upper">lang_corefunc.html#upper</a> &rarr; upper {upper SQL function}</li>
+<li><a href="lang_corefunc.html#zeroblob">lang_corefunc.html#zeroblob</a> &rarr; zeroblob {zeroblob SQL function}</li>
+<li><a href="lang_createindex.html">lang_createindex.html</a> &rarr; {CREATE INDEX} Indexes createindex</li>
+<li><a href="lang_createindex.html#collidx">lang_createindex.html#collidx</a> &rarr; COLLATE</li>
+<li><a href="lang_createindex.html#descidx">lang_createindex.html#descidx</a> &rarr; DESC {descending index} {descending indexes} {descending indices}</li>
+<li><a href="lang_createindex.html#uniqueidx">lang_createindex.html#uniqueidx</a> &rarr; {unique index}</li>
+<li><a href="lang_createtable.html">lang_createtable.html</a> &rarr; {CREATE TABLE} createtable</li>
+<li><a href="lang_createtable.html#ckconst">lang_createtable.html#ckconst</a> &rarr; CHECK {CHECK constraint} {CHECK constraints}</li>
+<li><a href="lang_createtable.html#collateclause">lang_createtable.html#collateclause</a> &rarr; {COLLATE clause} {COLLATE clauses} {COLLATE constraint}</li>
+<li><a href="lang_createtable.html#createtabas">lang_createtable.html#createtabas</a> &rarr; {CREATE TABLE AS}</li>
+<li><a href="lang_createtable.html#dfltval">lang_createtable.html#dfltval</a> &rarr; {DEFAULT clauses} {default column value} {default value}</li>
+<li><a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a> &rarr; {NOT NULL} {NOT NULL constraint} {NOT NULL constraints}</li>
+<li><a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a> &rarr; {PRIMARY KEY} {PRIMARY KEY constraint}</li>
+<li><a href="lang_createtable.html#rowid">lang_createtable.html#rowid</a> &rarr; {INTEGER PRIMARY KEY} ROWID rowid</li>
+<li><a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a> &rarr; {column definition} {column definitions}</li>
+<li><a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a> &rarr; UNIQUE {UNIQUE constraint} {UNIQUE constraints} {unique constraint}</li>
+<li><a href="lang_createtrigger.html">lang_createtrigger.html</a> &rarr; {CREATE TRIGGER} {UPDATE trigger} createtrigger trigger triggers</li>
+<li><a href="lang_createtrigger.html#instead_of_trigger">lang_createtrigger.html#instead_of_trigger</a> &rarr; {INSTEAD OF} {INSTEAD OF trigger}</li>
+<li><a href="lang_createtrigger.html#raise">lang_createtrigger.html#raise</a> &rarr; {RAISE function}</li>
+<li><a href="lang_createtrigger.html#temptrig">lang_createtrigger.html#temptrig</a> &rarr; {TEMP triggers on non-TEMP tables}</li>
+<li><a href="lang_createtrigger.html#undef_before">lang_createtrigger.html#undef_before</a> &rarr; {undefined BEFORE trigger behavior}</li>
+<li><a href="lang_createview.html">lang_createview.html</a> &rarr; {CREATE VIEW} VIEW createview view views</li>
+<li><a href="lang_createvtab.html">lang_createvtab.html</a> &rarr; {CREATE VIRTUAL TABLE} createvtab</li>
+<li><a href="lang_datefunc.html">lang_datefunc.html</a> &rarr; {Date And Time Functions} {date SQL function} {date and time functions} datefunc {datetime SQL function} {julianday SQL function} {strftime SQL function} {time SQL function}</li>
+<li><a href="lang_datefunc.html#automod">lang_datefunc.html#automod</a> &rarr; {auto modifier}</li>
+<li><a href="lang_datefunc.html#dtmods">lang_datefunc.html#dtmods</a> &rarr; {date/time modifiers} modifiers</li>
+<li><a href="lang_datefunc.html#jdmod">lang_datefunc.html#jdmod</a> &rarr; {julianday modifier}</li>
+<li><a href="lang_datefunc.html#localtime">lang_datefunc.html#localtime</a> &rarr; {localtime modifier} {utc modifier}</li>
+<li><a href="lang_datefunc.html#uepch">lang_datefunc.html#uepch</a> &rarr; {unixepoch function}</li>
+<li><a href="lang_delete.html">lang_delete.html</a> &rarr; DELETE DELETEs delete</li>
+<li><a href="lang_delete.html#truncateopt">lang_delete.html#truncateopt</a> &rarr; {truncate optimization}</li>
+<li><a href="lang_detach.html">lang_detach.html</a> &rarr; DETACH {DETACH DATABASE} detach</li>
+<li><a href="lang_dropindex.html">lang_dropindex.html</a> &rarr; {DROP INDEX} dropindex</li>
+<li><a href="lang_droptable.html">lang_droptable.html</a> &rarr; {DROP TABLE} droptable</li>
+<li><a href="lang_droptrigger.html">lang_droptrigger.html</a> &rarr; {DROP TRIGGER} droptrigger</li>
+<li><a href="lang_dropview.html">lang_dropview.html</a> &rarr; {DROP VIEW} dropview</li>
+<li><a href="lang_explain.html">lang_explain.html</a> &rarr; EXPLAIN explain</li>
+<li><a href="lang_expr.html">lang_expr.html</a> &rarr; expression {expression syntax} langexpr</li>
+<li><a href="lang_expr.html#between">lang_expr.html#between</a> &rarr; BETWEEN</li>
+<li><a href="lang_expr.html#binaryops">lang_expr.html#binaryops</a> &rarr; {binary operators}</li>
+<li><a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a> &rarr; {boolean expression}</li>
+<li><a href="lang_expr.html#case">lang_expr.html#case</a> &rarr; {CASE expression}</li>
+<li><a href="lang_expr.html#castexpr">lang_expr.html#castexpr</a> &rarr; CAST {CAST expression} {CAST operator} cast</li>
+<li><a href="lang_expr.html#collateop">lang_expr.html#collateop</a> &rarr; {COLLATE operator}</li>
+<li><a href="lang_expr.html#cosub">lang_expr.html#cosub</a> &rarr; {correlated subqueries}</li>
+<li><a href="lang_expr.html#exists_op">lang_expr.html#exists_op</a> &rarr; {EXISTS operator} {NOT EXISTS operator}</li>
+<li><a href="lang_expr.html#extract">lang_expr.html#extract</a> &rarr; extract</li>
+<li><a href="lang_expr.html#glob">lang_expr.html#glob</a> &rarr; GLOB</li>
+<li><a href="lang_expr.html#hexint">lang_expr.html#hexint</a> &rarr; {hexadecimal integer literals} {hexadecimal integers}</li>
+<li><a href="lang_expr.html#in_op">lang_expr.html#in_op</a> &rarr; {IN operator} {NOT IN operator}</li>
+<li><a href="lang_expr.html#isdf">lang_expr.html#isdf</a> &rarr; {IS DISTINCT FROM} {IS NOT DISTINCT FROM}</li>
+<li><a href="lang_expr.html#isisnot">lang_expr.html#isisnot</a> &rarr; {IS NOT operator} {IS operator}</li>
+<li><a href="lang_expr.html#like">lang_expr.html#like</a> &rarr; ESCAPE LIKE</li>
+<li><a href="lang_expr.html#litvalue">lang_expr.html#litvalue</a> &rarr; {literal value}</li>
+<li><a href="lang_expr.html#match">lang_expr.html#match</a> &rarr; MATCH</li>
+<li><a href="lang_expr.html#regexp">lang_expr.html#regexp</a> &rarr; REGEXP</li>
+<li><a href="lang_expr.html#subq">lang_expr.html#subq</a> &rarr; Subqueries</li>
+<li><a href="lang_expr.html#varparam">lang_expr.html#varparam</a> &rarr; {bound parameter} {bound parameters} parameter parameters</li>
+<li><a href="lang_indexedby.html">lang_indexedby.html</a> &rarr; {INDEXED BY} {NOT INDEXED} langindexedby</li>
+<li><a href="lang_insert.html">lang_insert.html</a> &rarr; INSERT INSERTs insert</li>
+<li><a href="lang_keywords.html">lang_keywords.html</a> &rarr; {SQL keyword} {SQL keywords} {SQLite Keywords} keywords langkeywords</li>
+<li><a href="lang_mathfunc.html">lang_mathfunc.html</a> &rarr; {Math Functions} {built-in SQL math functions} {math functions} mathfunc</li>
+<li><a href="lang_mathfunc.html#acos">lang_mathfunc.html#acos</a> &rarr; acos {acos SQL function}</li>
+<li><a href="lang_mathfunc.html#acosh">lang_mathfunc.html#acosh</a> &rarr; acosh {acosh SQL function}</li>
+<li><a href="lang_mathfunc.html#asin">lang_mathfunc.html#asin</a> &rarr; asin {asin SQL function}</li>
+<li><a href="lang_mathfunc.html#asinh">lang_mathfunc.html#asinh</a> &rarr; asinh {asinh SQL function}</li>
+<li><a href="lang_mathfunc.html#atan">lang_mathfunc.html#atan</a> &rarr; atan {atan SQL function}</li>
+<li><a href="lang_mathfunc.html#atan2">lang_mathfunc.html#atan2</a> &rarr; atan2 {atan2 SQL function}</li>
+<li><a href="lang_mathfunc.html#atanh">lang_mathfunc.html#atanh</a> &rarr; atanh {atanh SQL function}</li>
+<li><a href="lang_mathfunc.html#ceil">lang_mathfunc.html#ceil</a> &rarr; ceil ceiling</li>
+<li><a href="lang_mathfunc.html#cos">lang_mathfunc.html#cos</a> &rarr; cos {cos SQL function}</li>
+<li><a href="lang_mathfunc.html#cosh">lang_mathfunc.html#cosh</a> &rarr; cosh {cosh SQL function}</li>
+<li><a href="lang_mathfunc.html#degrees">lang_mathfunc.html#degrees</a> &rarr; degrees {degrees SQL function}</li>
+<li><a href="lang_mathfunc.html#exp">lang_mathfunc.html#exp</a> &rarr; exp {exp SQL function}</li>
+<li><a href="lang_mathfunc.html#floor">lang_mathfunc.html#floor</a> &rarr; floor {floor SQL function}</li>
+<li><a href="lang_mathfunc.html#ln">lang_mathfunc.html#ln</a> &rarr; ln {ln SQL function}</li>
+<li><a href="lang_mathfunc.html#log">lang_mathfunc.html#log</a> &rarr; log log10</li>
+<li><a href="lang_mathfunc.html#log2">lang_mathfunc.html#log2</a> &rarr; log2 {log2 SQL function}</li>
+<li><a href="lang_mathfunc.html#mod">lang_mathfunc.html#mod</a> &rarr; mod {mod SQL function}</li>
+<li><a href="lang_mathfunc.html#pi">lang_mathfunc.html#pi</a> &rarr; pi {pi SQL function}</li>
+<li><a href="lang_mathfunc.html#pow">lang_mathfunc.html#pow</a> &rarr; pow {pow SQL function}</li>
+<li><a href="lang_mathfunc.html#radians">lang_mathfunc.html#radians</a> &rarr; radians {radians SQL function}</li>
+<li><a href="lang_mathfunc.html#sin">lang_mathfunc.html#sin</a> &rarr; sin {sin SQL function}</li>
+<li><a href="lang_mathfunc.html#sinh">lang_mathfunc.html#sinh</a> &rarr; sinh {sinh SQL function}</li>
+<li><a href="lang_mathfunc.html#sqrt">lang_mathfunc.html#sqrt</a> &rarr; sqrt {sqrt SQL function}</li>
+<li><a href="lang_mathfunc.html#tan">lang_mathfunc.html#tan</a> &rarr; tan {tan SQL function}</li>
+<li><a href="lang_mathfunc.html#tanh">lang_mathfunc.html#tanh</a> &rarr; tanh {tanh SQL function}</li>
+<li><a href="lang_mathfunc.html#trunc">lang_mathfunc.html#trunc</a> &rarr; trunc {trunc SQL function}</li>
+<li><a href="lang_naming.html">lang_naming.html</a> &rarr; naming {object resolution}</li>
+<li><a href="lang_reindex.html">lang_reindex.html</a> &rarr; REINDEX reindex</li>
+<li><a href="lang_replace.html">lang_replace.html</a> &rarr; REPLACE langreplace</li>
+<li><a href="lang_returning.html">lang_returning.html</a> &rarr; RETURNING {RETURNING clause} returning</li>
+<li><a href="lang_savepoint.html">lang_savepoint.html</a> &rarr; RELEASE SAVEPOINT savepoint</li>
+<li><a href="lang_select.html">lang_select.html</a> &rarr; SELECT {SELECT query} {SELECT statement} select</li>
+<li><a href="lang_select.html#bareagg">lang_select.html#bareagg</a> &rarr; {bare aggregate terms}</li>
+<li><a href="lang_select.html#compound">lang_select.html#compound</a> &rarr; {compound SELECT} {compound SELECTs} {compound query} {compound select}</li>
+<li><a href="lang_select.html#crossjoin">lang_select.html#crossjoin</a> &rarr; {treats the CROSS JOIN operator specially}</li>
+<li><a href="lang_select.html#distinct">lang_select.html#distinct</a> &rarr; DISTINCT</li>
+<li><a href="lang_select.html#fromclause">lang_select.html#fromclause</a> &rarr; {FROM clause}</li>
+<li><a href="lang_select.html#fulljoin">lang_select.html#fulljoin</a> &rarr; {FULL JOIN} {FULL OUTER JOIN}</li>
+<li><a href="lang_select.html#limitoffset">lang_select.html#limitoffset</a> &rarr; LIMIT OFFSET</li>
+<li><a href="lang_select.html#nonstd">lang_select.html#nonstd</a> &rarr; {non-standard SELECT syntax}</li>
+<li><a href="lang_select.html#nullslast">lang_select.html#nullslast</a> &rarr; {NULLS FIRST} {NULLS LAST}</li>
+<li><a href="lang_select.html#orderby">lang_select.html#orderby</a> &rarr; {ORDER BY} {order by}</li>
+<li><a href="lang_select.html#resultset">lang_select.html#resultset</a> &rarr; {GROUP BY} {GROUP BY clause} HAVING {HAVING clause} {result-set expressions}</li>
+<li><a href="lang_select.html#rjoin">lang_select.html#rjoin</a> &rarr; {RIGHT JOIN} {RIGHT and FULL OUTER JOIN}</li>
+<li><a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a> &rarr; {simple SELECT}</li>
+<li><a href="lang_select.html#tabfunc1">lang_select.html#tabfunc1</a> &rarr; {table-valued functions in the FROM clause}</li>
+<li><a href="lang_select.html#values">lang_select.html#values</a> &rarr; VALUES {VALUES clause}</li>
+<li><a href="lang_select.html#whereclause">lang_select.html#whereclause</a> &rarr; {WHERE clause}</li>
+<li><a href="lang_transaction.html">lang_transaction.html</a> &rarr; BEGIN COMMIT ROLLBACK transaction</li>
+<li><a href="lang_transaction.html#immediate">lang_transaction.html#immediate</a> &rarr; {BEGIN EXCLUSIVE} {BEGIN IMMEDIATE}</li>
+<li><a href="lang_update.html">lang_update.html</a> &rarr; UPDATE UPDATEs langupdate</li>
+<li><a href="lang_update.html#upfrom">lang_update.html#upfrom</a> &rarr; {UPDATE FROM}</li>
+<li><a href="lang_upsert.html">lang_upsert.html</a> &rarr; UPSERT upsert {upsert clause}</li>
+<li><a href="lang_upsert.html#parseambig">lang_upsert.html#parseambig</a> &rarr; {UPSERT parsing ambiguity}</li>
+<li><a href="lang_vacuum.html">lang_vacuum.html</a> &rarr; VACUUM langvacuum vacuum</li>
+<li><a href="lang_vacuum.html#howvacuumworks">lang_vacuum.html#howvacuumworks</a> &rarr; {how vacuum works}</li>
+<li><a href="lang_vacuum.html#vacuuminto">lang_vacuum.html#vacuuminto</a> &rarr; {VACUUM INTO}</li>
+<li><a href="lang_with.html">lang_with.html</a> &rarr; WITH {WITH clause} {common table expressions} with</li>
+<li><a href="lang_with.html#mandelbrot">lang_with.html#mandelbrot</a> &rarr; {compute the Mandelbrot set}</li>
+<li><a href="lang_with.html#mathint">lang_with.html#mathint</a> &rarr; MATERIALIZED {NOT MATERIALIZED} {materialization hints}</li>
+<li><a href="lang_with.html#ordinarycte">lang_with.html#ordinarycte</a> &rarr; {ordinary common table expressions}</li>
+<li><a href="lang_with.html#rcex3">lang_with.html#rcex3</a> &rarr; {queries against graphs}</li>
+<li><a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a> &rarr; {recursive common table expression} {recursive common table expressions} {recursive query}</li>
+<li><a href="lang_with.html#sudoku">lang_with.html#sudoku</a> &rarr; {solve Sudoku puzzles}</li>
+<li><a href="lemon.html">lemon.html</a> &rarr; Lemon {Lemon LALR parser generator} {Lemon parser generator}</li>
+<li><a href="limits.html">limits.html</a> &rarr; limits</li>
+<li><a href="limits.html#max_attached">limits.html#max_attached</a> &rarr; SQLITE_MAX_ATTACHED</li>
+<li><a href="limits.html#max_column">limits.html#max_column</a> &rarr; SQLITE_MAX_COLUMN</li>
+<li><a href="limits.html#max_compound_select">limits.html#max_compound_select</a> &rarr; SQLITE_MAX_COMPOUND_SELECT</li>
+<li><a href="limits.html#max_expr_depth">limits.html#max_expr_depth</a> &rarr; SQLITE_MAX_EXPR_DEPTH</li>
+<li><a href="limits.html#max_function_arg">limits.html#max_function_arg</a> &rarr; SQLITE_MAX_FUNCTION_ARG</li>
+<li><a href="limits.html#max_length">limits.html#max_length</a> &rarr; SQLITE_MAX_LENGTH</li>
+<li><a href="limits.html#max_like_pattern_length">limits.html#max_like_pattern_length</a> &rarr; SQLITE_MAX_LIKE_PATTERN_LENGTH</li>
+<li><a href="limits.html#max_page_count">limits.html#max_page_count</a> &rarr; SQLITE_MAX_PAGE_COUNT</li>
+<li><a href="limits.html#max_sql_length">limits.html#max_sql_length</a> &rarr; SQLITE_MAX_SQL_LENGTH</li>
+<li><a href="limits.html#max_trigger_depth">limits.html#max_trigger_depth</a> &rarr; SQLITE_MAX_TRIGGER_DEPTH</li>
+<li><a href="limits.html#max_variable_number">limits.html#max_variable_number</a> &rarr; SQLITE_MAX_VARIABLE_NUMBER</li>
+<li><a href="loadext.html">loadext.html</a> &rarr; {Run-Time Loadable Extensions} {SQLite extension} {SQLite extensions} {extension loading} {loadable extension} {loadable extensions} loadext</li>
+<li><a href="loadext.html#build">loadext.html#build</a> &rarr; {Compiling Loadable Extensions} {compile loadable extensions}</li>
+<li><a href="loadext.html#persist">loadext.html#persist</a> &rarr; {persistent loadable extensions}</li>
+<li><a href="loadext.html#write">loadext.html#write</a> &rarr; {Programming Loadable Extensions}</li>
+<li><a href="lockingv3.html">lockingv3.html</a> &rarr; {file locking and concurrency control}</li>
+<li><a href="lockingv3.html#excl_lock">lockingv3.html#excl_lock</a> &rarr; EXCLUSIVE {EXCLUSIVE lock} {exclusive lock}</li>
+<li><a href="lockingv3.html#ext3-barrier-problem">lockingv3.html#ext3-barrier-problem</a> &rarr; {the ext3 barrier problem}</li>
+<li><a href="lockingv3.html#how_to_corrupt">lockingv3.html#how_to_corrupt</a> &rarr; {How To Corrupt Your Database Files}</li>
+<li><a href="lockingv3.html#locking">lockingv3.html#locking</a> &rarr; {file locking states}</li>
+<li><a href="lockingv3.html#pending_lock">lockingv3.html#pending_lock</a> &rarr; PENDING {PENDING lock} {pending lock}</li>
+<li><a href="lockingv3.html#reserved_lock">lockingv3.html#reserved_lock</a> &rarr; RESERVED {RESERVED lock} {reserved lock}</li>
+<li><a href="lockingv3.html#rollback">lockingv3.html#rollback</a> &rarr; {rollback journal}</li>
+<li><a href="lockingv3.html#shared_lock">lockingv3.html#shared_lock</a> &rarr; SHARED {SHARED lock} {shared lock}</li>
+<li><a href="lockingv3.html#writer_starvation">lockingv3.html#writer_starvation</a> &rarr; {writer starvation}</li>
+<li><a href="locrsf.html">locrsf.html</a> &rarr; {recommended by the US Library of Congress} {recommended storage format}</li>
+<li><a href="lts.html">lts.html</a> &rarr; {long term support}</li>
+<li><a href="malloc.html">malloc.html</a> &rarr; {memory allocation}</li>
+<li><a href="malloc.html#altalloc">malloc.html#altalloc</a> &rarr; {built-in memory allocators}</li>
+<li><a href="malloc.html#defaultalloc">malloc.html#defaultalloc</a> &rarr; {default memory allocator}</li>
+<li><a href="malloc.html#lookaside">malloc.html#lookaside</a> &rarr; lookaside {lookaside buffer} {lookaside memory} {lookaside memory allocator}</li>
+<li><a href="malloc.html#memdebug">malloc.html#memdebug</a> &rarr; {debugging memory allocator} memsys2</li>
+<li><a href="malloc.html#memstatus">malloc.html#memstatus</a> &rarr; {memory statistics}</li>
+<li><a href="malloc.html#memsys5">malloc.html#memsys5</a> &rarr; memsys5 {zero-malloc memory allocator}</li>
+<li><a href="malloc.html#memsysx">malloc.html#memsysx</a> &rarr; {experimental memory allocators}</li>
+<li><a href="malloc.html#nofrag">malloc.html#nofrag</a> &rarr; {Robson proof}</li>
+<li><a href="malloc.html#pagecache">malloc.html#pagecache</a> &rarr; {pagecache memory allocator}</li>
+<li><a href="malloc.html#win32heap">malloc.html#win32heap</a> &rarr; {Win32 native memory allocator}</li>
+<li><a href="memstat.html">memstat.html</a> &rarr; {SQLITE_MEMSTAT virtual table} sqlite_memstat {the SQLITE_MEMSTAT extension}</li>
+<li><a href="mmap.html">mmap.html</a> &rarr; {memory-mapped I/O} mmap</li>
+<li><a href="mostdeployed.html">mostdeployed.html</a> &rarr; {most used} {most widely deployed} {most widely used}</li>
+<li><a href="np1queryprob.html">np1queryprob.html</a> &rarr; {about 200 SQL statements per webpage}</li>
+<li><a href="nulinstr.html">nulinstr.html</a> &rarr; {NUL characters in strings}</li>
+<li><a href="opcode.html">opcode.html</a> &rarr; VDBE bytecode {bytecode engine} bytecodes opcodes {virtual machine} {virtual machine instructions}</li>
+<li><a href="opcode.html#codes">opcode.html#codes</a> &rarr; {list of current bytecodes} {opcode definitions}</li>
+<li><a href="opcode.html#subprog">opcode.html#subprog</a> &rarr; subprograms</li>
+<li><a href="optoverview.html">optoverview.html</a> &rarr; {SQLite query planner} optimizer {query planner}</li>
+<li><a href="optoverview.html#autoindex">optoverview.html#autoindex</a> &rarr; {Automatic indexing} {automatic indexes} {automatic indexing}</li>
+<li><a href="optoverview.html#constprop">optoverview.html#constprop</a> &rarr; {constant-propagation optimization}</li>
+<li><a href="optoverview.html#coroutines">optoverview.html#coroutines</a> &rarr; co-routines {subquery co-routines}</li>
+<li><a href="optoverview.html#crossjoin">optoverview.html#crossjoin</a> &rarr; {CROSS JOIN} {Manual Control Of Query Plans Using CROSS JOIN}</li>
+<li><a href="optoverview.html#flattening">optoverview.html#flattening</a> &rarr; flattened {flattening optimization} {query flattener}</li>
+<li><a href="optoverview.html#hashjoin">optoverview.html#hashjoin</a> &rarr; {hash join}</li>
+<li><a href="optoverview.html#leftjoinreduction">optoverview.html#leftjoinreduction</a> &rarr; {LEFT JOIN strength reduction optimization}</li>
+<li><a href="optoverview.html#like_opt">optoverview.html#like_opt</a> &rarr; {LIKE optimization}</li>
+<li><a href="optoverview.html#manctrl">optoverview.html#manctrl</a> &rarr; {Manual Control Of Query Plans Using SQLITE_STAT Tables}</li>
+<li><a href="optoverview.html#minmax">optoverview.html#minmax</a> &rarr; {min/max optimization}</li>
+<li><a href="optoverview.html#omitnoopjoin">optoverview.html#omitnoopjoin</a> &rarr; {omit-left-join optimization}</li>
+<li><a href="optoverview.html#or_opt">optoverview.html#or_opt</a> &rarr; {OR optimization} {or optimization}</li>
+<li><a href="optoverview.html#partsort">optoverview.html#partsort</a> &rarr; {sorting subsets of the result}</li>
+<li><a href="optoverview.html#pushdown">optoverview.html#pushdown</a> &rarr; {push-down optimization}</li>
+<li><a href="optoverview.html#rangequery">optoverview.html#rangequery</a> &rarr; {range query optimization}</li>
+<li><a href="optoverview.html#skipscan">optoverview.html#skipscan</a> &rarr; skip-scan {skip-scan optimization}</li>
+<li><a href="optoverview.html#table_order">optoverview.html#table_order</a> &rarr; {join order}</li>
+<li><a href="optoverview.html#uplus">optoverview.html#uplus</a> &rarr; upluscontrol</li>
+<li><a href="partialindex.html">partialindex.html</a> &rarr; {partial index} {partial indexes} {partial indices}</li>
+<li><a href="pgszchng2016.html">pgszchng2016.html</a> &rarr; {increase in the default page size} {version 3.12.0 page size change}</li>
+<li><a href="pragma.html#pragfunc">pragma.html#pragfunc</a> &rarr; {PRAGMA function} {PRAGMA functions}</li>
+<li><a href="pragma.html#pragma_analysis_limit">pragma.html#pragma_analysis_limit</a> &rarr; {PRAGMA analysis_limit} analysis_limit {analysis_limit pragma}</li>
+<li><a href="pragma.html#pragma_application_id">pragma.html#pragma_application_id</a> &rarr; {PRAGMA application_id} application_id {application_id pragma}</li>
+<li><a href="pragma.html#pragma_auto_vacuum">pragma.html#pragma_auto_vacuum</a> &rarr; {PRAGMA auto_vacuum} auto_vacuum {auto_vacuum pragma}</li>
+<li><a href="pragma.html#pragma_automatic_index">pragma.html#pragma_automatic_index</a> &rarr; {PRAGMA automatic_index} automatic_index {automatic_index pragma}</li>
+<li><a href="pragma.html#pragma_busy_timeout">pragma.html#pragma_busy_timeout</a> &rarr; {PRAGMA busy_timeout} busy_timeout {busy_timeout pragma}</li>
+<li><a href="pragma.html#pragma_cache_size">pragma.html#pragma_cache_size</a> &rarr; {PRAGMA cache_size} cache_size {cache_size pragma}</li>
+<li><a href="pragma.html#pragma_cache_spill">pragma.html#pragma_cache_spill</a> &rarr; {PRAGMA cache_spill} cache_spill {cache_spill pragma}</li>
+<li><a href="pragma.html#pragma_case_sensitive_like">pragma.html#pragma_case_sensitive_like</a> &rarr; {PRAGMA case_sensitive_like} case_sensitive_like {case_sensitive_like pragma}</li>
+<li><a href="pragma.html#pragma_cell_size_check">pragma.html#pragma_cell_size_check</a> &rarr; {PRAGMA cell_size_check} cell_size_check {cell_size_check pragma}</li>
+<li><a href="pragma.html#pragma_checkpoint_fullfsync">pragma.html#pragma_checkpoint_fullfsync</a> &rarr; {PRAGMA checkpoint_fullfsync} checkpoint_fullfsync {checkpoint_fullfsync pragma}</li>
+<li><a href="pragma.html#pragma_collation_list">pragma.html#pragma_collation_list</a> &rarr; {PRAGMA collation_list} collation_list {collation_list pragma}</li>
+<li><a href="pragma.html#pragma_compile_options">pragma.html#pragma_compile_options</a> &rarr; {PRAGMA compile_options} compile_options {compile_options pragma}</li>
+<li><a href="pragma.html#pragma_count_changes">pragma.html#pragma_count_changes</a> &rarr; {PRAGMA count_changes} count_changes {count_changes pragma}</li>
+<li><a href="pragma.html#pragma_data_store_directory">pragma.html#pragma_data_store_directory</a> &rarr; {PRAGMA data_store_directory} data_store_directory {data_store_directory pragma}</li>
+<li><a href="pragma.html#pragma_data_version">pragma.html#pragma_data_version</a> &rarr; {PRAGMA data_version} data_version {data_version pragma}</li>
+<li><a href="pragma.html#pragma_database_list">pragma.html#pragma_database_list</a> &rarr; {PRAGMA database_list} database_list {database_list pragma}</li>
+<li><a href="pragma.html#pragma_default_cache_size">pragma.html#pragma_default_cache_size</a> &rarr; {PRAGMA default_cache_size} default_cache_size {default_cache_size pragma}</li>
+<li><a href="pragma.html#pragma_defer_foreign_keys">pragma.html#pragma_defer_foreign_keys</a> &rarr; {PRAGMA defer_foreign_keys} defer_foreign_keys {defer_foreign_keys pragma}</li>
+<li><a href="pragma.html#pragma_empty_result_callbacks">pragma.html#pragma_empty_result_callbacks</a> &rarr; {PRAGMA empty_result_callbacks} empty_result_callbacks {empty_result_callbacks pragma}</li>
+<li><a href="pragma.html#pragma_encoding">pragma.html#pragma_encoding</a> &rarr; {PRAGMA encoding} encoding {encoding pragma}</li>
+<li><a href="pragma.html#pragma_foreign_key_check">pragma.html#pragma_foreign_key_check</a> &rarr; {PRAGMA foreign_key_check} foreign_key_check {foreign_key_check pragma}</li>
+<li><a href="pragma.html#pragma_foreign_key_list">pragma.html#pragma_foreign_key_list</a> &rarr; {PRAGMA foreign_key_list} foreign_key_list {foreign_key_list pragma}</li>
+<li><a href="pragma.html#pragma_foreign_keys">pragma.html#pragma_foreign_keys</a> &rarr; {PRAGMA foreign_keys} foreign_keys {foreign_keys pragma}</li>
+<li><a href="pragma.html#pragma_freelist_count">pragma.html#pragma_freelist_count</a> &rarr; {PRAGMA freelist_count} freelist_count {freelist_count pragma}</li>
+<li><a href="pragma.html#pragma_full_column_names">pragma.html#pragma_full_column_names</a> &rarr; {PRAGMA full_column_names} full_column_names {full_column_names pragma}</li>
+<li><a href="pragma.html#pragma_fullfsync">pragma.html#pragma_fullfsync</a> &rarr; {PRAGMA fullfsync} fullfsync {fullfsync pragma}</li>
+<li><a href="pragma.html#pragma_function_list">pragma.html#pragma_function_list</a> &rarr; {PRAGMA function_list} function_list {function_list pragma}</li>
+<li><a href="pragma.html#pragma_hard_heap_limit">pragma.html#pragma_hard_heap_limit</a> &rarr; {PRAGMA hard_heap_limit} hard_heap_limit {hard_heap_limit pragma}</li>
+<li><a href="pragma.html#pragma_ignore_check_constraints">pragma.html#pragma_ignore_check_constraints</a> &rarr; {PRAGMA ignore_check_constraints} ignore_check_constraints {ignore_check_constraints pragma}</li>
+<li><a href="pragma.html#pragma_incremental_vacuum">pragma.html#pragma_incremental_vacuum</a> &rarr; {PRAGMA incremental_vacuum} incremental_vacuum {incremental_vacuum pragma}</li>
+<li><a href="pragma.html#pragma_index_info">pragma.html#pragma_index_info</a> &rarr; {PRAGMA index_info} index_info {index_info pragma}</li>
+<li><a href="pragma.html#pragma_index_list">pragma.html#pragma_index_list</a> &rarr; {PRAGMA index_list} index_list {index_list pragma}</li>
+<li><a href="pragma.html#pragma_index_xinfo">pragma.html#pragma_index_xinfo</a> &rarr; {PRAGMA index_xinfo} index_xinfo {index_xinfo pragma}</li>
+<li><a href="pragma.html#pragma_integrity_check">pragma.html#pragma_integrity_check</a> &rarr; {PRAGMA integrity_check} integrity_check {integrity_check pragma}</li>
+<li><a href="pragma.html#pragma_journal_mode">pragma.html#pragma_journal_mode</a> &rarr; {PRAGMA journal_mode} journal_mode {journal_mode pragma} {persistent journal mode}</li>
+<li><a href="pragma.html#pragma_journal_size_limit">pragma.html#pragma_journal_size_limit</a> &rarr; {PRAGMA journal_size_limit} journal_size_limit {journal_size_limit pragma}</li>
+<li><a href="pragma.html#pragma_legacy_alter_table">pragma.html#pragma_legacy_alter_table</a> &rarr; {PRAGMA legacy_alter_table} legacy_alter_table {legacy_alter_table pragma}</li>
+<li><a href="pragma.html#pragma_legacy_file_format">pragma.html#pragma_legacy_file_format</a> &rarr; {PRAGMA legacy_file_format} legacy_file_format {legacy_file_format pragma}</li>
+<li><a href="pragma.html#pragma_locking_mode">pragma.html#pragma_locking_mode</a> &rarr; {EXCLUSIVE locking mode} {PRAGMA locking_mode} {exclusive locking mode} locking_mode {locking_mode pragma}</li>
+<li><a href="pragma.html#pragma_max_page_count">pragma.html#pragma_max_page_count</a> &rarr; {PRAGMA max_page_count} max_page_count {max_page_count pragma}</li>
+<li><a href="pragma.html#pragma_mmap_size">pragma.html#pragma_mmap_size</a> &rarr; {PRAGMA mmap_size} mmap_size {mmap_size pragma}</li>
+<li><a href="pragma.html#pragma_module_list">pragma.html#pragma_module_list</a> &rarr; {PRAGMA module_list} module_list {module_list pragma}</li>
+<li><a href="pragma.html#pragma_optimize">pragma.html#pragma_optimize</a> &rarr; {PRAGMA optimize} optimize {optimize pragma}</li>
+<li><a href="pragma.html#pragma_page_count">pragma.html#pragma_page_count</a> &rarr; {PRAGMA page_count} page_count {page_count pragma}</li>
+<li><a href="pragma.html#pragma_page_size">pragma.html#pragma_page_size</a> &rarr; {PRAGMA page_size} page_size {page_size pragma}</li>
+<li><a href="pragma.html#pragma_parser_trace">pragma.html#pragma_parser_trace</a> &rarr; {PRAGMA parser_trace} parser_trace {parser_trace pragma}</li>
+<li><a href="pragma.html#pragma_pragma_list">pragma.html#pragma_pragma_list</a> &rarr; {PRAGMA pragma_list} pragma_list {pragma_list pragma}</li>
+<li><a href="pragma.html#pragma_query_only">pragma.html#pragma_query_only</a> &rarr; {PRAGMA query_only} query_only {query_only pragma}</li>
+<li><a href="pragma.html#pragma_quick_check">pragma.html#pragma_quick_check</a> &rarr; {PRAGMA quick_check} quick_check {quick_check pragma}</li>
+<li><a href="pragma.html#pragma_read_uncommitted">pragma.html#pragma_read_uncommitted</a> &rarr; {PRAGMA read_uncommitted} read_uncommitted {read_uncommitted pragma}</li>
+<li><a href="pragma.html#pragma_recursive_triggers">pragma.html#pragma_recursive_triggers</a> &rarr; {PRAGMA recursive_triggers} recursive_triggers {recursive_triggers pragma}</li>
+<li><a href="pragma.html#pragma_reverse_unordered_selects">pragma.html#pragma_reverse_unordered_selects</a> &rarr; {PRAGMA reverse_unordered_selects} reverse_unordered_selects {reverse_unordered_selects pragma}</li>
+<li><a href="pragma.html#pragma_schema_version">pragma.html#pragma_schema_version</a> &rarr; {PRAGMA schema_version} schema_version {schema_version pragma}</li>
+<li><a href="pragma.html#pragma_secure_delete">pragma.html#pragma_secure_delete</a> &rarr; {PRAGMA secure_delete} secure_delete {secure_delete pragma}</li>
+<li><a href="pragma.html#pragma_short_column_names">pragma.html#pragma_short_column_names</a> &rarr; {PRAGMA short_column_names} short_column_names {short_column_names pragma}</li>
+<li><a href="pragma.html#pragma_shrink_memory">pragma.html#pragma_shrink_memory</a> &rarr; {PRAGMA shrink_memory} shrink_memory {shrink_memory pragma}</li>
+<li><a href="pragma.html#pragma_soft_heap_limit">pragma.html#pragma_soft_heap_limit</a> &rarr; {PRAGMA soft_heap_limit} soft_heap_limit {soft_heap_limit pragma}</li>
+<li><a href="pragma.html#pragma_stats">pragma.html#pragma_stats</a> &rarr; {PRAGMA stats} stats {stats pragma}</li>
+<li><a href="pragma.html#pragma_synchronous">pragma.html#pragma_synchronous</a> &rarr; {PRAGMA synchronous} synchronous {synchronous pragma}</li>
+<li><a href="pragma.html#pragma_table_info">pragma.html#pragma_table_info</a> &rarr; {PRAGMA table_info} table_info {table_info pragma}</li>
+<li><a href="pragma.html#pragma_table_list">pragma.html#pragma_table_list</a> &rarr; {PRAGMA table_list} table_list {table_list pragma}</li>
+<li><a href="pragma.html#pragma_table_xinfo">pragma.html#pragma_table_xinfo</a> &rarr; {PRAGMA table_xinfo} table_xinfo {table_xinfo pragma}</li>
+<li><a href="pragma.html#pragma_temp_store">pragma.html#pragma_temp_store</a> &rarr; {PRAGMA temp_store} temp_store {temp_store pragma}</li>
+<li><a href="pragma.html#pragma_temp_store_directory">pragma.html#pragma_temp_store_directory</a> &rarr; {PRAGMA temp_store_directory} temp_store_directory {temp_store_directory pragma}</li>
+<li><a href="pragma.html#pragma_threads">pragma.html#pragma_threads</a> &rarr; {PRAGMA threads} threads {threads pragma}</li>
+<li><a href="pragma.html#pragma_trusted_schema">pragma.html#pragma_trusted_schema</a> &rarr; {PRAGMA trusted_schema} trusted_schema {trusted_schema pragma}</li>
+<li><a href="pragma.html#pragma_user_version">pragma.html#pragma_user_version</a> &rarr; {PRAGMA user_version} user_version {user_version pragma}</li>
+<li><a href="pragma.html#pragma_vdbe_addoptrace">pragma.html#pragma_vdbe_addoptrace</a> &rarr; {PRAGMA vdbe_addoptrace} vdbe_addoptrace {vdbe_addoptrace pragma}</li>
+<li><a href="pragma.html#pragma_vdbe_debug">pragma.html#pragma_vdbe_debug</a> &rarr; {PRAGMA vdbe_debug} vdbe_debug {vdbe_debug pragma}</li>
+<li><a href="pragma.html#pragma_vdbe_listing">pragma.html#pragma_vdbe_listing</a> &rarr; {PRAGMA vdbe_listing} vdbe_listing {vdbe_listing pragma}</li>
+<li><a href="pragma.html#pragma_vdbe_trace">pragma.html#pragma_vdbe_trace</a> &rarr; {PRAGMA vdbe_trace} vdbe_trace {vdbe_trace pragma}</li>
+<li><a href="pragma.html#pragma_wal_autocheckpoint">pragma.html#pragma_wal_autocheckpoint</a> &rarr; {PRAGMA wal_autocheckpoint} wal_autocheckpoint {wal_autocheckpoint pragma}</li>
+<li><a href="pragma.html#pragma_wal_checkpoint">pragma.html#pragma_wal_checkpoint</a> &rarr; {PRAGMA wal_checkpoint} wal_checkpoint {wal_checkpoint pragma}</li>
+<li><a href="pragma.html#pragma_writable_schema">pragma.html#pragma_writable_schema</a> &rarr; {PRAGMA writable_schema} writable_schema {writable_schema pragma}</li>
+<li><a href="pragma.html#syntax">pragma.html#syntax</a> &rarr; PRAGMA</li>
+<li><a href="pragma.html#toc">pragma.html#toc</a> &rarr; {pragma list}</li>
+<li><a href="printf.html">printf.html</a> &rarr; {built-in printf}</li>
+<li><a href="printf.html#percentq">printf.html#percentq</a> &rarr; Q q</li>
+<li><a href="printf.html#percentw">printf.html#percentw</a> &rarr; w</li>
+<li><a href="printf.html#percentz">printf.html#percentz</a> &rarr; z</li>
+<li><a href="privatebranch.html">privatebranch.html</a> &rarr; {private branches}</li>
+<li><a href="prosupport.html">prosupport.html</a> &rarr; {professional support}</li>
+<li><a href="psow.html">psow.html</a> &rarr; PSOW {powersafe overwrite}</li>
+<li><a href="psow.html#tornpage">psow.html#tornpage</a> &rarr; {torn page}</li>
+<li><a href="queryplanner-ng.html">queryplanner-ng.html</a> &rarr; NGQP {Next Generation Query Planner} {next generation query planner}</li>
+<li><a href="queryplanner-ng.html#fossilcasestudy">queryplanner-ng.html#fossilcasestudy</a> &rarr; {The Fossil NGQP Upgrade Case Study}</li>
+<li><a href="queryplanner-ng.html#hazards">queryplanner-ng.html#hazards</a> &rarr; {hazards of upgrading to the NGQP}</li>
+<li><a href="queryplanner-ng.html#howtofix">queryplanner-ng.html#howtofix</a> &rarr; {query planner checklist}</li>
+<li><a href="queryplanner-ng.html#qpstab">queryplanner-ng.html#qpstab</a> &rarr; QPSG {query planner stability guarantee}</li>
+<li><a href="queryplanner.html">queryplanner.html</a> &rarr; indexing {indexing tutorial}</li>
+<li><a href="queryplanner.html#covidx">queryplanner.html#covidx</a> &rarr; {covering index} {covering indexes} {covering indices}</li>
+<li><a href="queryplanner.html#or_in_where">queryplanner.html#or_in_where</a> &rarr; or-connected-terms</li>
+<li><a href="queryplanner.html#partialsort">queryplanner.html#partialsort</a> &rarr; {block sorting} {partial sorting by index}</li>
+<li><a href="queryplanner.html#searching">queryplanner.html#searching</a> &rarr; strategies</li>
+<li><a href="queryplanner.html#sorting">queryplanner.html#sorting</a> &rarr; sorting</li>
+<li><a href="quickstart.html">quickstart.html</a> &rarr; {Quick Start Guide} quickstart</li>
+<li><a href="quirks.html">quirks.html</a> &rarr; Quirks</li>
+<li><a href="quirks.html#dblquote">quirks.html#dblquote</a> &rarr; {double-quoted string literal}</li>
+<li><a href="rbu.html">rbu.html</a> &rarr; RBU {RBU extension}</li>
+<li><a href="rbu.html#database_contents">rbu.html#database_contents</a> &rarr; {RBU Database Contents}</li>
+<li><a href="rbu.html#database_tables">rbu.html#database_tables</a> &rarr; {RBU Database Tables}</li>
+<li><a href="rbu.html#fts4_tables">rbu.html#fts4_tables</a> &rarr; {RBU FTS3/4 Tables}</li>
+<li><a href="rbu.html#rbu_updates">rbu.html#rbu_updates</a> &rarr; {RBU Update}</li>
+<li><a href="rbu.html#rbu_vacuum">rbu.html#rbu_vacuum</a> &rarr; {RBU Vacuum}</li>
+<li><a href="rbu.html#sqldiff">rbu.html#sqldiff</a> &rarr; {sqldiff --rbu}</li>
+<li><a href="recovery.html">recovery.html</a> &rarr; {recovery extension}</li>
+<li><a href="releaselog/3_0_0.html">releaselog/3_0_0.html</a> &rarr; {Version 3.0.0} {version 3.0.0}</li>
+<li><a href="releaselog/3_0_1.html">releaselog/3_0_1.html</a> &rarr; {Version 3.0.1} {version 3.0.1}</li>
+<li><a href="releaselog/3_0_2.html">releaselog/3_0_2.html</a> &rarr; {Version 3.0.2} {version 3.0.2}</li>
+<li><a href="releaselog/3_0_3.html">releaselog/3_0_3.html</a> &rarr; {Version 3.0.3} {version 3.0.3}</li>
+<li><a href="releaselog/3_0_4.html">releaselog/3_0_4.html</a> &rarr; {Version 3.0.4} {version 3.0.4}</li>
+<li><a href="releaselog/3_0_5.html">releaselog/3_0_5.html</a> &rarr; {Version 3.0.5} {version 3.0.5}</li>
+<li><a href="releaselog/3_0_6.html">releaselog/3_0_6.html</a> &rarr; {Version 3.0.6} {version 3.0.6}</li>
+<li><a href="releaselog/3_0_7.html">releaselog/3_0_7.html</a> &rarr; {Version 3.0.7} {version 3.0.7}</li>
+<li><a href="releaselog/3_0_8.html">releaselog/3_0_8.html</a> &rarr; {Version 3.0.8} {version 3.0.8}</li>
+<li><a href="releaselog/3_10_0.html">releaselog/3_10_0.html</a> &rarr; {Version 3.10.0} {version 3.10.0}</li>
+<li><a href="releaselog/3_10_1.html">releaselog/3_10_1.html</a> &rarr; {Version 3.10.1} {version 3.10.1}</li>
+<li><a href="releaselog/3_10_2.html">releaselog/3_10_2.html</a> &rarr; {Version 3.10.2} {version 3.10.2}</li>
+<li><a href="releaselog/3_11_0.html">releaselog/3_11_0.html</a> &rarr; {Version 3.11.0} {version 3.11.0}</li>
+<li><a href="releaselog/3_11_1.html">releaselog/3_11_1.html</a> &rarr; {Version 3.11.1} {version 3.11.1}</li>
+<li><a href="releaselog/3_12_0.html">releaselog/3_12_0.html</a> &rarr; {Version 3.12.0} {version 3.12.0}</li>
+<li><a href="releaselog/3_12_1.html">releaselog/3_12_1.html</a> &rarr; {Version 3.12.1} {version 3.12.1}</li>
+<li><a href="releaselog/3_12_2.html">releaselog/3_12_2.html</a> &rarr; {Version 3.12.2} {version 3.12.2}</li>
+<li><a href="releaselog/3_13_0.html">releaselog/3_13_0.html</a> &rarr; {Version 3.13.0} {Version 3.13.0.0} {version 3.13.0} {version 3.13.0.0}</li>
+<li><a href="releaselog/3_14.html">releaselog/3_14.html</a> &rarr; {Version 3.14} {Version 3.14.0} {version 3.14} {version 3.14.0}</li>
+<li><a href="releaselog/3_14_1.html">releaselog/3_14_1.html</a> &rarr; {Version 3.14.1} {version 3.14.1}</li>
+<li><a href="releaselog/3_14_2.html">releaselog/3_14_2.html</a> &rarr; {Version 3.14.2} {version 3.14.2}</li>
+<li><a href="releaselog/3_15_0.html">releaselog/3_15_0.html</a> &rarr; {Version 3.15.0} {version 3.15.0}</li>
+<li><a href="releaselog/3_15_1.html">releaselog/3_15_1.html</a> &rarr; {Version 3.15.1} {version 3.15.1}</li>
+<li><a href="releaselog/3_15_2.html">releaselog/3_15_2.html</a> &rarr; {Version 3.15.2} {version 3.15.2}</li>
+<li><a href="releaselog/3_16_0.html">releaselog/3_16_0.html</a> &rarr; {Version 3.16.0} {version 3.16.0}</li>
+<li><a href="releaselog/3_16_1.html">releaselog/3_16_1.html</a> &rarr; {Version 3.16.1} {version 3.16.1}</li>
+<li><a href="releaselog/3_16_2.html">releaselog/3_16_2.html</a> &rarr; {Version 3.16.2} {version 3.16.2}</li>
+<li><a href="releaselog/3_17_0.html">releaselog/3_17_0.html</a> &rarr; {Version 3.17.0} {version 3.17.0}</li>
+<li><a href="releaselog/3_18_0.html">releaselog/3_18_0.html</a> &rarr; {Version 3.18.0} {version 3.18.0}</li>
+<li><a href="releaselog/3_18_1.html">releaselog/3_18_1.html</a> &rarr; {Version 3.18.1} {version 3.18.1}</li>
+<li><a href="releaselog/3_18_2.html">releaselog/3_18_2.html</a> &rarr; {Version 3.18.2} {version 3.18.2}</li>
+<li><a href="releaselog/3_19_0.html">releaselog/3_19_0.html</a> &rarr; {Version 3.19.0} {version 3.19.0}</li>
+<li><a href="releaselog/3_19_1.html">releaselog/3_19_1.html</a> &rarr; {Version 3.19.1} {version 3.19.1}</li>
+<li><a href="releaselog/3_19_2.html">releaselog/3_19_2.html</a> &rarr; {Version 3.19.2} {version 3.19.2}</li>
+<li><a href="releaselog/3_19_3.html">releaselog/3_19_3.html</a> &rarr; {Version 3.19.3} {version 3.19.3}</li>
+<li><a href="releaselog/3_1_0.html">releaselog/3_1_0.html</a> &rarr; {Version 3.1.0} {version 3.1.0}</li>
+<li><a href="releaselog/3_1_1.html">releaselog/3_1_1.html</a> &rarr; {Version 3.1.1} {version 3.1.1}</li>
+<li><a href="releaselog/3_1_2.html">releaselog/3_1_2.html</a> &rarr; {Version 3.1.2} {version 3.1.2}</li>
+<li><a href="releaselog/3_1_3.html">releaselog/3_1_3.html</a> &rarr; {Version 3.1.3} {version 3.1.3}</li>
+<li><a href="releaselog/3_1_4.html">releaselog/3_1_4.html</a> &rarr; {Version 3.1.4} {version 3.1.4}</li>
+<li><a href="releaselog/3_1_5.html">releaselog/3_1_5.html</a> &rarr; {Version 3.1.5} {version 3.1.5}</li>
+<li><a href="releaselog/3_1_6.html">releaselog/3_1_6.html</a> &rarr; {Version 3.1.6} {version 3.1.6}</li>
+<li><a href="releaselog/3_20_0.html">releaselog/3_20_0.html</a> &rarr; {Version 3.20.0} {version 3.20.0}</li>
+<li><a href="releaselog/3_20_1.html">releaselog/3_20_1.html</a> &rarr; {Version 3.20.1} {version 3.20.1}</li>
+<li><a href="releaselog/3_21_0.html">releaselog/3_21_0.html</a> &rarr; {Version 3.21.0} {version 3.21.0}</li>
+<li><a href="releaselog/3_22_0.html">releaselog/3_22_0.html</a> &rarr; {Version 3.22.0} {version 3.22.0}</li>
+<li><a href="releaselog/3_23_0.html">releaselog/3_23_0.html</a> &rarr; {Version 3.23.0} {Version 3.23.0.0} {version 3.23.0} {version 3.23.0.0}</li>
+<li><a href="releaselog/3_23_1.html">releaselog/3_23_1.html</a> &rarr; {Version 3.23.1} {Version 3.23.1.0} {version 3.23.1} {version 3.23.1.0}</li>
+<li><a href="releaselog/3_24_0.html">releaselog/3_24_0.html</a> &rarr; {Version 3.24.0} {version 3.24.0}</li>
+<li><a href="releaselog/3_25_0.html">releaselog/3_25_0.html</a> &rarr; {Version 3.25.0} {version 3.25.0}</li>
+<li><a href="releaselog/3_25_1.html">releaselog/3_25_1.html</a> &rarr; {Version 3.25.1} {version 3.25.1}</li>
+<li><a href="releaselog/3_25_2.html">releaselog/3_25_2.html</a> &rarr; {Version 3.25.2} {version 3.25.2}</li>
+<li><a href="releaselog/3_25_3.html">releaselog/3_25_3.html</a> &rarr; {Version 3.25.3} {version 3.25.3}</li>
+<li><a href="releaselog/3_26_0.html">releaselog/3_26_0.html</a> &rarr; {Version 3.26.0} {version 3.26.0}</li>
+<li><a href="releaselog/3_27_0.html">releaselog/3_27_0.html</a> &rarr; {Version 3.27.0} {version 3.27.0}</li>
+<li><a href="releaselog/3_27_1.html">releaselog/3_27_1.html</a> &rarr; {Version 3.27.1} {version 3.27.1}</li>
+<li><a href="releaselog/3_27_2.html">releaselog/3_27_2.html</a> &rarr; {Version 3.27.2} {version 3.27.2}</li>
+<li><a href="releaselog/3_28_0.html">releaselog/3_28_0.html</a> &rarr; {Version 3.28.0} {version 3.28.0}</li>
+<li><a href="releaselog/3_29_0.html">releaselog/3_29_0.html</a> &rarr; {Version 3.29.0} {version 3.29.0}</li>
+<li><a href="releaselog/3_2_0.html">releaselog/3_2_0.html</a> &rarr; {Version 3.2.0} {version 3.2.0}</li>
+<li><a href="releaselog/3_2_1.html">releaselog/3_2_1.html</a> &rarr; {Version 3.2.1} {version 3.2.1}</li>
+<li><a href="releaselog/3_2_2.html">releaselog/3_2_2.html</a> &rarr; {Version 3.2.2} {version 3.2.2}</li>
+<li><a href="releaselog/3_2_3.html">releaselog/3_2_3.html</a> &rarr; {Version 3.2.3} {version 3.2.3}</li>
+<li><a href="releaselog/3_2_4.html">releaselog/3_2_4.html</a> &rarr; {Version 3.2.4} {version 3.2.4}</li>
+<li><a href="releaselog/3_2_5.html">releaselog/3_2_5.html</a> &rarr; {Version 3.2.5} {version 3.2.5}</li>
+<li><a href="releaselog/3_2_6.html">releaselog/3_2_6.html</a> &rarr; {Version 3.2.6} {version 3.2.6}</li>
+<li><a href="releaselog/3_2_7.html">releaselog/3_2_7.html</a> &rarr; {Version 3.2.7} {version 3.2.7}</li>
+<li><a href="releaselog/3_2_8.html">releaselog/3_2_8.html</a> &rarr; {Version 3.2.8} {version 3.2.8}</li>
+<li><a href="releaselog/3_30_0.html">releaselog/3_30_0.html</a> &rarr; {Version 3.30.0} {version 3.30.0}</li>
+<li><a href="releaselog/3_30_1.html">releaselog/3_30_1.html</a> &rarr; {Version 3.30.1} {version 3.30.1}</li>
+<li><a href="releaselog/3_31_0.html">releaselog/3_31_0.html</a> &rarr; {Version 3.31.0} {version 3.31.0}</li>
+<li><a href="releaselog/3_31_1.html">releaselog/3_31_1.html</a> &rarr; {Version 3.31.1} {version 3.31.1}</li>
+<li><a href="releaselog/3_32_0.html">releaselog/3_32_0.html</a> &rarr; {Version 3.32.0} {version 3.32.0}</li>
+<li><a href="releaselog/3_32_1.html">releaselog/3_32_1.html</a> &rarr; {Version 3.32.1} {version 3.32.1}</li>
+<li><a href="releaselog/3_32_2.html">releaselog/3_32_2.html</a> &rarr; {Version 3.32.2} {version 3.32.2}</li>
+<li><a href="releaselog/3_32_3.html">releaselog/3_32_3.html</a> &rarr; {Version 3.32.3} {version 3.32.3}</li>
+<li><a href="releaselog/3_33_0.html">releaselog/3_33_0.html</a> &rarr; {Version 3.33.0} {Version 3.33.0.0} {version 3.33.0} {version 3.33.0.0}</li>
+<li><a href="releaselog/3_34_0.html">releaselog/3_34_0.html</a> &rarr; {Version 3.34.0} {version 3.34.0}</li>
+<li><a href="releaselog/3_34_1.html">releaselog/3_34_1.html</a> &rarr; {Version 3.34.1} {version 3.34.1}</li>
+<li><a href="releaselog/3_35_0.html">releaselog/3_35_0.html</a> &rarr; {Version 3.35.0} {version 3.35.0}</li>
+<li><a href="releaselog/3_35_1.html">releaselog/3_35_1.html</a> &rarr; {Version 3.35.1} {version 3.35.1}</li>
+<li><a href="releaselog/3_35_2.html">releaselog/3_35_2.html</a> &rarr; {Version 3.35.2} {version 3.35.2}</li>
+<li><a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a> &rarr; {Version 3.35.3} {version 3.35.3}</li>
+<li><a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a> &rarr; {Version 3.35.4} {version 3.35.4}</li>
+<li><a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a> &rarr; {Version 3.35.5} {version 3.35.5}</li>
+<li><a href="releaselog/3_36_0.html">releaselog/3_36_0.html</a> &rarr; {Version 3.36.0} {version 3.36.0}</li>
+<li><a href="releaselog/3_37_0.html">releaselog/3_37_0.html</a> &rarr; {Version 3.37.0} {version 3.37.0}</li>
+<li><a href="releaselog/3_37_1.html">releaselog/3_37_1.html</a> &rarr; {Version 3.37.1} {version 3.37.1}</li>
+<li><a href="releaselog/3_37_2.html">releaselog/3_37_2.html</a> &rarr; {Version 3.37.2} {version 3.37.2}</li>
+<li><a href="releaselog/3_38_0.html">releaselog/3_38_0.html</a> &rarr; {Version 3.38.0} {version 3.38.0}</li>
+<li><a href="releaselog/3_38_1.html">releaselog/3_38_1.html</a> &rarr; {Version 3.38.1} {version 3.38.1}</li>
+<li><a href="releaselog/3_38_2.html">releaselog/3_38_2.html</a> &rarr; {Version 3.38.2} {version 3.38.2}</li>
+<li><a href="releaselog/3_38_3.html">releaselog/3_38_3.html</a> &rarr; {Version 3.38.3} {version 3.38.3}</li>
+<li><a href="releaselog/3_38_4.html">releaselog/3_38_4.html</a> &rarr; {Version 3.38.4} {version 3.38.4}</li>
+<li><a href="releaselog/3_38_5.html">releaselog/3_38_5.html</a> &rarr; {Version 3.38.5} {version 3.38.5}</li>
+<li><a href="releaselog/3_39_0.html">releaselog/3_39_0.html</a> &rarr; {Version 3.39.0} {version 3.39.0}</li>
+<li><a href="releaselog/3_39_1.html">releaselog/3_39_1.html</a> &rarr; {Version 3.39.1} {version 3.39.1}</li>
+<li><a href="releaselog/3_39_2.html">releaselog/3_39_2.html</a> &rarr; {Version 3.39.2} {version 3.39.2}</li>
+<li><a href="releaselog/3_39_3.html">releaselog/3_39_3.html</a> &rarr; {Version 3.39.3} {version 3.39.3}</li>
+<li><a href="releaselog/3_39_4.html">releaselog/3_39_4.html</a> &rarr; {Version 3.39.4} {version 3.39.4}</li>
+<li><a href="releaselog/3_3_0.html">releaselog/3_3_0.html</a> &rarr; {Version 3.3.0} {Version 3.3.0.0} {version 3.3.0} {version 3.3.0.0}</li>
+<li><a href="releaselog/3_3_1.html">releaselog/3_3_1.html</a> &rarr; {Version 3.3.1} {Version 3.3.1.0} {version 3.3.1} {version 3.3.1.0}</li>
+<li><a href="releaselog/3_3_10.html">releaselog/3_3_10.html</a> &rarr; {Version 3.3.10} {Version 3.3.10.0} {version 3.3.10} {version 3.3.10.0}</li>
+<li><a href="releaselog/3_3_11.html">releaselog/3_3_11.html</a> &rarr; {Version 3.3.11} {Version 3.3.11.0} {version 3.3.11} {version 3.3.11.0}</li>
+<li><a href="releaselog/3_3_12.html">releaselog/3_3_12.html</a> &rarr; {Version 3.3.12} {Version 3.3.12.0} {version 3.3.12} {version 3.3.12.0}</li>
+<li><a href="releaselog/3_3_13.html">releaselog/3_3_13.html</a> &rarr; {Version 3.3.13} {Version 3.3.13.0} {version 3.3.13} {version 3.3.13.0}</li>
+<li><a href="releaselog/3_3_14.html">releaselog/3_3_14.html</a> &rarr; {Version 3.3.14} {Version 3.3.14.0} {version 3.3.14} {version 3.3.14.0}</li>
+<li><a href="releaselog/3_3_15.html">releaselog/3_3_15.html</a> &rarr; {Version 3.3.15} {Version 3.3.15.0} {version 3.3.15} {version 3.3.15.0}</li>
+<li><a href="releaselog/3_3_16.html">releaselog/3_3_16.html</a> &rarr; {Version 3.3.16} {Version 3.3.16.0} {version 3.3.16} {version 3.3.16.0}</li>
+<li><a href="releaselog/3_3_17.html">releaselog/3_3_17.html</a> &rarr; {Version 3.3.17} {Version 3.3.17.0} {version 3.3.17} {version 3.3.17.0}</li>
+<li><a href="releaselog/3_3_2.html">releaselog/3_3_2.html</a> &rarr; {Version 3.3.2} {Version 3.3.2.0} {version 3.3.2} {version 3.3.2.0}</li>
+<li><a href="releaselog/3_3_3.html">releaselog/3_3_3.html</a> &rarr; {Version 3.3.3} {Version 3.3.3.0} {version 3.3.3} {version 3.3.3.0}</li>
+<li><a href="releaselog/3_3_4.html">releaselog/3_3_4.html</a> &rarr; {Version 3.3.4} {Version 3.3.4.0} {version 3.3.4} {version 3.3.4.0}</li>
+<li><a href="releaselog/3_3_5.html">releaselog/3_3_5.html</a> &rarr; {Version 3.3.5} {Version 3.3.5.0} {version 3.3.5} {version 3.3.5.0}</li>
+<li><a href="releaselog/3_3_6.html">releaselog/3_3_6.html</a> &rarr; {Version 3.3.6} {Version 3.3.6.0} {version 3.3.6} {version 3.3.6.0}</li>
+<li><a href="releaselog/3_3_7.html">releaselog/3_3_7.html</a> &rarr; {Version 3.3.7} {Version 3.3.7.0} {version 3.3.7} {version 3.3.7.0}</li>
+<li><a href="releaselog/3_3_8.html">releaselog/3_3_8.html</a> &rarr; {Version 3.3.8} {Version 3.3.8.0} {version 3.3.8} {version 3.3.8.0}</li>
+<li><a href="releaselog/3_3_9.html">releaselog/3_3_9.html</a> &rarr; {Version 3.3.9} {Version 3.3.9.0} {version 3.3.9} {version 3.3.9.0}</li>
+<li><a href="releaselog/3_40_0.html">releaselog/3_40_0.html</a> &rarr; {Version 3.40.0} {version 3.40.0}</li>
+<li><a href="releaselog/3_40_1.html">releaselog/3_40_1.html</a> &rarr; {Version 3.40.1} {version 3.40.1}</li>
+<li><a href="releaselog/3_4_0.html">releaselog/3_4_0.html</a> &rarr; {Version 3.4.0} {version 3.4.0}</li>
+<li><a href="releaselog/3_4_1.html">releaselog/3_4_1.html</a> &rarr; {Version 3.4.1} {version 3.4.1}</li>
+<li><a href="releaselog/3_4_2.html">releaselog/3_4_2.html</a> &rarr; {Version 3.4.2} {version 3.4.2}</li>
+<li><a href="releaselog/3_5_0.html">releaselog/3_5_0.html</a> &rarr; {Version 3.5.0} {version 3.5.0}</li>
+<li><a href="releaselog/3_5_1.html">releaselog/3_5_1.html</a> &rarr; {Version 3.5.1} {version 3.5.1}</li>
+<li><a href="releaselog/3_5_2.html">releaselog/3_5_2.html</a> &rarr; {Version 3.5.2} {version 3.5.2}</li>
+<li><a href="releaselog/3_5_3.html">releaselog/3_5_3.html</a> &rarr; {Version 3.5.3} {version 3.5.3}</li>
+<li><a href="releaselog/3_5_4.html">releaselog/3_5_4.html</a> &rarr; {Version 3.5.4} {version 3.5.4}</li>
+<li><a href="releaselog/3_5_5.html">releaselog/3_5_5.html</a> &rarr; {Version 3.5.5} {version 3.5.5}</li>
+<li><a href="releaselog/3_5_6.html">releaselog/3_5_6.html</a> &rarr; {Version 3.5.6} {version 3.5.6}</li>
+<li><a href="releaselog/3_5_7.html">releaselog/3_5_7.html</a> &rarr; {Version 3.5.7} {version 3.5.7}</li>
+<li><a href="releaselog/3_5_8.html">releaselog/3_5_8.html</a> &rarr; {Version 3.5.8} {version 3.5.8}</li>
+<li><a href="releaselog/3_5_9.html">releaselog/3_5_9.html</a> &rarr; {Version 3.5.9} {version 3.5.9}</li>
+<li><a href="releaselog/3_6_0.html">releaselog/3_6_0.html</a> &rarr; {Version 3.6.0} {version 3.6.0}</li>
+<li><a href="releaselog/3_6_1.html">releaselog/3_6_1.html</a> &rarr; {Version 3.6.1} {version 3.6.1}</li>
+<li><a href="releaselog/3_6_10.html">releaselog/3_6_10.html</a> &rarr; {Version 3.6.10} {version 3.6.10}</li>
+<li><a href="releaselog/3_6_11.html">releaselog/3_6_11.html</a> &rarr; {Version 3.6.11} {version 3.6.11}</li>
+<li><a href="releaselog/3_6_12.html">releaselog/3_6_12.html</a> &rarr; {Version 3.6.12} {version 3.6.12}</li>
+<li><a href="releaselog/3_6_13.html">releaselog/3_6_13.html</a> &rarr; {Version 3.6.13} {version 3.6.13}</li>
+<li><a href="releaselog/3_6_14.html">releaselog/3_6_14.html</a> &rarr; {Version 3.6.14} {version 3.6.14}</li>
+<li><a href="releaselog/3_6_14_1.html">releaselog/3_6_14_1.html</a> &rarr; {Version 3.6.14.1} {version 3.6.14.1}</li>
+<li><a href="releaselog/3_6_14_2.html">releaselog/3_6_14_2.html</a> &rarr; {Version 3.6.14.2} {version 3.6.14.2}</li>
+<li><a href="releaselog/3_6_15.html">releaselog/3_6_15.html</a> &rarr; {Version 3.6.15} {version 3.6.15}</li>
+<li><a href="releaselog/3_6_16.html">releaselog/3_6_16.html</a> &rarr; {Version 3.6.16} {version 3.6.16}</li>
+<li><a href="releaselog/3_6_16_1.html">releaselog/3_6_16_1.html</a> &rarr; {Version 3.6.16.1} {version 3.6.16.1}</li>
+<li><a href="releaselog/3_6_17.html">releaselog/3_6_17.html</a> &rarr; {Version 3.6.17} {version 3.6.17}</li>
+<li><a href="releaselog/3_6_18.html">releaselog/3_6_18.html</a> &rarr; {Version 3.6.18} {version 3.6.18}</li>
+<li><a href="releaselog/3_6_19.html">releaselog/3_6_19.html</a> &rarr; {Version 3.6.19} {version 3.6.19}</li>
+<li><a href="releaselog/3_6_2.html">releaselog/3_6_2.html</a> &rarr; {Version 3.6.2} {version 3.6.2}</li>
+<li><a href="releaselog/3_6_20.html">releaselog/3_6_20.html</a> &rarr; {Version 3.6.20} {version 3.6.20}</li>
+<li><a href="releaselog/3_6_21.html">releaselog/3_6_21.html</a> &rarr; {Version 3.6.21} {version 3.6.21}</li>
+<li><a href="releaselog/3_6_22.html">releaselog/3_6_22.html</a> &rarr; {Version 3.6.22} {version 3.6.22}</li>
+<li><a href="releaselog/3_6_23.html">releaselog/3_6_23.html</a> &rarr; {Version 3.6.23} {version 3.6.23}</li>
+<li><a href="releaselog/3_6_23_1.html">releaselog/3_6_23_1.html</a> &rarr; {Version 3.6.23.1} {Version 3.6.23.1.0} {version 3.6.23.1} {version 3.6.23.1.0}</li>
+<li><a href="releaselog/3_6_3.html">releaselog/3_6_3.html</a> &rarr; {Version 3.6.3} {version 3.6.3}</li>
+<li><a href="releaselog/3_6_4.html">releaselog/3_6_4.html</a> &rarr; {Version 3.6.4} {version 3.6.4}</li>
+<li><a href="releaselog/3_6_5.html">releaselog/3_6_5.html</a> &rarr; {Version 3.6.5} {version 3.6.5}</li>
+<li><a href="releaselog/3_6_6.html">releaselog/3_6_6.html</a> &rarr; {Version 3.6.6} {version 3.6.6}</li>
+<li><a href="releaselog/3_6_6_1.html">releaselog/3_6_6_1.html</a> &rarr; {Version 3.6.6.1} {version 3.6.6.1}</li>
+<li><a href="releaselog/3_6_6_2.html">releaselog/3_6_6_2.html</a> &rarr; {Version 3.6.6.2} {version 3.6.6.2}</li>
+<li><a href="releaselog/3_6_7.html">releaselog/3_6_7.html</a> &rarr; {Version 3.6.7} {version 3.6.7}</li>
+<li><a href="releaselog/3_6_8.html">releaselog/3_6_8.html</a> &rarr; {Version 3.6.8} {version 3.6.8}</li>
+<li><a href="releaselog/3_6_9.html">releaselog/3_6_9.html</a> &rarr; {Version 3.6.9} {version 3.6.9}</li>
+<li><a href="releaselog/3_7_0.html">releaselog/3_7_0.html</a> &rarr; {Version 3.7.0} {version 3.7.0}</li>
+<li><a href="releaselog/3_7_0_1.html">releaselog/3_7_0_1.html</a> &rarr; {Version 3.7.0.1} {version 3.7.0.1}</li>
+<li><a href="releaselog/3_7_1.html">releaselog/3_7_1.html</a> &rarr; {Version 3.7.1} {version 3.7.1}</li>
+<li><a href="releaselog/3_7_10.html">releaselog/3_7_10.html</a> &rarr; {Version 3.7.10} {version 3.7.10}</li>
+<li><a href="releaselog/3_7_11.html">releaselog/3_7_11.html</a> &rarr; {Version 3.7.11} {version 3.7.11}</li>
+<li><a href="releaselog/3_7_12.html">releaselog/3_7_12.html</a> &rarr; {Version 3.7.12} {version 3.7.12}</li>
+<li><a href="releaselog/3_7_12_1.html">releaselog/3_7_12_1.html</a> &rarr; {Version 3.7.12.1} {version 3.7.12.1}</li>
+<li><a href="releaselog/3_7_13.html">releaselog/3_7_13.html</a> &rarr; {Version 3.7.13} {version 3.7.13}</li>
+<li><a href="releaselog/3_7_14.html">releaselog/3_7_14.html</a> &rarr; {Version 3.7.14} {version 3.7.14}</li>
+<li><a href="releaselog/3_7_14_1.html">releaselog/3_7_14_1.html</a> &rarr; {Version 3.7.14.1} {version 3.7.14.1}</li>
+<li><a href="releaselog/3_7_15.html">releaselog/3_7_15.html</a> &rarr; {Version 3.7.15} {version 3.7.15}</li>
+<li><a href="releaselog/3_7_15_1.html">releaselog/3_7_15_1.html</a> &rarr; {Version 3.7.15.1} {version 3.7.15.1}</li>
+<li><a href="releaselog/3_7_15_2.html">releaselog/3_7_15_2.html</a> &rarr; {Version 3.7.15.2} {version 3.7.15.2}</li>
+<li><a href="releaselog/3_7_16.html">releaselog/3_7_16.html</a> &rarr; {Version 3.7.16} {version 3.7.16}</li>
+<li><a href="releaselog/3_7_16_1.html">releaselog/3_7_16_1.html</a> &rarr; {Version 3.7.16.1} {version 3.7.16.1}</li>
+<li><a href="releaselog/3_7_16_2.html">releaselog/3_7_16_2.html</a> &rarr; {Version 3.7.16.2} {version 3.7.16.2}</li>
+<li><a href="releaselog/3_7_17.html">releaselog/3_7_17.html</a> &rarr; {Version 3.7.17} {version 3.7.17}</li>
+<li><a href="releaselog/3_7_2.html">releaselog/3_7_2.html</a> &rarr; {Version 3.7.2} {version 3.7.2}</li>
+<li><a href="releaselog/3_7_3.html">releaselog/3_7_3.html</a> &rarr; {Version 3.7.3} {version 3.7.3}</li>
+<li><a href="releaselog/3_7_4.html">releaselog/3_7_4.html</a> &rarr; {Version 3.7.4} {version 3.7.4}</li>
+<li><a href="releaselog/3_7_5.html">releaselog/3_7_5.html</a> &rarr; {Version 3.7.5} {version 3.7.5}</li>
+<li><a href="releaselog/3_7_6.html">releaselog/3_7_6.html</a> &rarr; {Version 3.7.6} {version 3.7.6}</li>
+<li><a href="releaselog/3_7_6_1.html">releaselog/3_7_6_1.html</a> &rarr; {Version 3.7.6.1} {version 3.7.6.1}</li>
+<li><a href="releaselog/3_7_6_2.html">releaselog/3_7_6_2.html</a> &rarr; {Version 3.7.6.2} {version 3.7.6.2}</li>
+<li><a href="releaselog/3_7_6_3.html">releaselog/3_7_6_3.html</a> &rarr; {Version 3.7.6.3} {version 3.7.6.3}</li>
+<li><a href="releaselog/3_7_7.html">releaselog/3_7_7.html</a> &rarr; {Version 3.7.7} {version 3.7.7}</li>
+<li><a href="releaselog/3_7_7_1.html">releaselog/3_7_7_1.html</a> &rarr; {Version 3.7.7.1} {version 3.7.7.1}</li>
+<li><a href="releaselog/3_7_8.html">releaselog/3_7_8.html</a> &rarr; {Version 3.7.8} {version 3.7.8}</li>
+<li><a href="releaselog/3_7_9.html">releaselog/3_7_9.html</a> &rarr; {Version 3.7.9} {version 3.7.9}</li>
+<li><a href="releaselog/3_8_0.html">releaselog/3_8_0.html</a> &rarr; {Version 3.8.0} {version 3.8.0}</li>
+<li><a href="releaselog/3_8_0_1.html">releaselog/3_8_0_1.html</a> &rarr; {Version 3.8.0.1} {version 3.8.0.1}</li>
+<li><a href="releaselog/3_8_0_2.html">releaselog/3_8_0_2.html</a> &rarr; {Version 3.8.0.2} {version 3.8.0.2}</li>
+<li><a href="releaselog/3_8_1.html">releaselog/3_8_1.html</a> &rarr; {Version 3.8.1} {version 3.8.1}</li>
+<li><a href="releaselog/3_8_10.html">releaselog/3_8_10.html</a> &rarr; {Version 3.8.10} {version 3.8.10}</li>
+<li><a href="releaselog/3_8_10_1.html">releaselog/3_8_10_1.html</a> &rarr; {Version 3.8.10.1} {version 3.8.10.1}</li>
+<li><a href="releaselog/3_8_10_2.html">releaselog/3_8_10_2.html</a> &rarr; {Version 3.8.10.2} {version 3.8.10.2}</li>
+<li><a href="releaselog/3_8_11.html">releaselog/3_8_11.html</a> &rarr; {Version 3.8.11} {version 3.8.11}</li>
+<li><a href="releaselog/3_8_11_1.html">releaselog/3_8_11_1.html</a> &rarr; {Version 3.8.11.1} {version 3.8.11.1}</li>
+<li><a href="releaselog/3_8_2.html">releaselog/3_8_2.html</a> &rarr; {Version 3.8.2} {version 3.8.2}</li>
+<li><a href="releaselog/3_8_3.html">releaselog/3_8_3.html</a> &rarr; {Version 3.8.3} {version 3.8.3}</li>
+<li><a href="releaselog/3_8_3_1.html">releaselog/3_8_3_1.html</a> &rarr; {Version 3.8.3.1} {Version 3.8.3.1.0} {version 3.8.3.1} {version 3.8.3.1.0}</li>
+<li><a href="releaselog/3_8_4.html">releaselog/3_8_4.html</a> &rarr; {Version 3.8.4} {version 3.8.4}</li>
+<li><a href="releaselog/3_8_4_1.html">releaselog/3_8_4_1.html</a> &rarr; {Version 3.8.4.1} {version 3.8.4.1}</li>
+<li><a href="releaselog/3_8_4_2.html">releaselog/3_8_4_2.html</a> &rarr; {Version 3.8.4.2} {version 3.8.4.2}</li>
+<li><a href="releaselog/3_8_4_3.html">releaselog/3_8_4_3.html</a> &rarr; {Version 3.8.4.3} {version 3.8.4.3}</li>
+<li><a href="releaselog/3_8_5.html">releaselog/3_8_5.html</a> &rarr; {Version 3.8.5} {version 3.8.5}</li>
+<li><a href="releaselog/3_8_6.html">releaselog/3_8_6.html</a> &rarr; {Version 3.8.6} {version 3.8.6}</li>
+<li><a href="releaselog/3_8_7.html">releaselog/3_8_7.html</a> &rarr; {Version 3.8.7} {version 3.8.7}</li>
+<li><a href="releaselog/3_8_7_1.html">releaselog/3_8_7_1.html</a> &rarr; {Version 3.8.7.1} {version 3.8.7.1}</li>
+<li><a href="releaselog/3_8_7_2.html">releaselog/3_8_7_2.html</a> &rarr; {Version 3.8.7.2} {version 3.8.7.2}</li>
+<li><a href="releaselog/3_8_7_3.html">releaselog/3_8_7_3.html</a> &rarr; {Version 3.8.7.3} {version 3.8.7.3}</li>
+<li><a href="releaselog/3_8_7_4.html">releaselog/3_8_7_4.html</a> &rarr; {Version 3.8.7.4} {version 3.8.7.4}</li>
+<li><a href="releaselog/3_8_8.html">releaselog/3_8_8.html</a> &rarr; {Version 3.8.8} {version 3.8.8}</li>
+<li><a href="releaselog/3_8_8_1.html">releaselog/3_8_8_1.html</a> &rarr; {Version 3.8.8.1} {version 3.8.8.1}</li>
+<li><a href="releaselog/3_8_8_2.html">releaselog/3_8_8_2.html</a> &rarr; {Version 3.8.8.2} {version 3.8.8.2}</li>
+<li><a href="releaselog/3_8_8_3.html">releaselog/3_8_8_3.html</a> &rarr; {Version 3.8.8.3} {version 3.8.8.3}</li>
+<li><a href="releaselog/3_8_9.html">releaselog/3_8_9.html</a> &rarr; {Version 3.8.9} {version 3.8.9}</li>
+<li><a href="releaselog/3_9_0.html">releaselog/3_9_0.html</a> &rarr; {Version 3.9.0} {version 3.9.0}</li>
+<li><a href="releaselog/3_9_1.html">releaselog/3_9_1.html</a> &rarr; {Version 3.9.1} {version 3.9.1}</li>
+<li><a href="releaselog/3_9_2.html">releaselog/3_9_2.html</a> &rarr; {Version 3.9.2} {version 3.9.2}</li>
+<li><a href="releaselog/3_9_3.html">releaselog/3_9_3.html</a> &rarr; {Version 3.9.3} {version 3.9.3}</li>
+<li><a href="requirements.html">requirements.html</a> &rarr; requirements</li>
+<li><a href="rescode.html">rescode.html</a> &rarr; {error code} {error codes} {result code} {result codes}</li>
+<li><a href="rescode.html#abort">rescode.html#abort</a> &rarr; SQLITE_ABORT</li>
+<li><a href="rescode.html#abort_rollback">rescode.html#abort_rollback</a> &rarr; SQLITE_ABORT_ROLLBACK</li>
+<li><a href="rescode.html#auth">rescode.html#auth</a> &rarr; SQLITE_AUTH</li>
+<li><a href="rescode.html#auth_user">rescode.html#auth_user</a> &rarr; SQLITE_AUTH_USER</li>
+<li><a href="rescode.html#busy">rescode.html#busy</a> &rarr; SQLITE_BUSY</li>
+<li><a href="rescode.html#busy_recovery">rescode.html#busy_recovery</a> &rarr; SQLITE_BUSY_RECOVERY</li>
+<li><a href="rescode.html#busy_snapshot">rescode.html#busy_snapshot</a> &rarr; SQLITE_BUSY_SNAPSHOT</li>
+<li><a href="rescode.html#busy_timeout">rescode.html#busy_timeout</a> &rarr; SQLITE_BUSY_TIMEOUT</li>
+<li><a href="rescode.html#cantopen">rescode.html#cantopen</a> &rarr; SQLITE_CANTOPEN</li>
+<li><a href="rescode.html#cantopen_convpath">rescode.html#cantopen_convpath</a> &rarr; SQLITE_CANTOPEN_CONVPATH</li>
+<li><a href="rescode.html#cantopen_dirtywal">rescode.html#cantopen_dirtywal</a> &rarr; SQLITE_CANTOPEN_DIRTYWAL</li>
+<li><a href="rescode.html#cantopen_fullpath">rescode.html#cantopen_fullpath</a> &rarr; SQLITE_CANTOPEN_FULLPATH</li>
+<li><a href="rescode.html#cantopen_isdir">rescode.html#cantopen_isdir</a> &rarr; SQLITE_CANTOPEN_ISDIR</li>
+<li><a href="rescode.html#cantopen_notempdir">rescode.html#cantopen_notempdir</a> &rarr; SQLITE_CANTOPEN_NOTEMPDIR</li>
+<li><a href="rescode.html#cantopen_symlink">rescode.html#cantopen_symlink</a> &rarr; SQLITE_CANTOPEN_SYMLINK</li>
+<li><a href="rescode.html#constraint">rescode.html#constraint</a> &rarr; SQLITE_CONSTRAINT</li>
+<li><a href="rescode.html#constraint_check">rescode.html#constraint_check</a> &rarr; SQLITE_CONSTRAINT_CHECK</li>
+<li><a href="rescode.html#constraint_commithook">rescode.html#constraint_commithook</a> &rarr; SQLITE_CONSTRAINT_COMMITHOOK</li>
+<li><a href="rescode.html#constraint_datatype">rescode.html#constraint_datatype</a> &rarr; SQLITE_CONSTRAINT_DATATYPE</li>
+<li><a href="rescode.html#constraint_foreignkey">rescode.html#constraint_foreignkey</a> &rarr; SQLITE_CONSTRAINT_FOREIGNKEY</li>
+<li><a href="rescode.html#constraint_function">rescode.html#constraint_function</a> &rarr; SQLITE_CONSTRAINT_FUNCTION</li>
+<li><a href="rescode.html#constraint_notnull">rescode.html#constraint_notnull</a> &rarr; SQLITE_CONSTRAINT_NOTNULL</li>
+<li><a href="rescode.html#constraint_pinned">rescode.html#constraint_pinned</a> &rarr; SQLITE_CONSTRAINT_PINNED</li>
+<li><a href="rescode.html#constraint_primarykey">rescode.html#constraint_primarykey</a> &rarr; SQLITE_CONSTRAINT_PRIMARYKEY</li>
+<li><a href="rescode.html#constraint_rowid">rescode.html#constraint_rowid</a> &rarr; SQLITE_CONSTRAINT_ROWID</li>
+<li><a href="rescode.html#constraint_trigger">rescode.html#constraint_trigger</a> &rarr; SQLITE_CONSTRAINT_TRIGGER</li>
+<li><a href="rescode.html#constraint_unique">rescode.html#constraint_unique</a> &rarr; SQLITE_CONSTRAINT_UNIQUE</li>
+<li><a href="rescode.html#constraint_vtab">rescode.html#constraint_vtab</a> &rarr; SQLITE_CONSTRAINT_VTAB</li>
+<li><a href="rescode.html#corrupt">rescode.html#corrupt</a> &rarr; SQLITE_CORRUPT</li>
+<li><a href="rescode.html#corrupt_index">rescode.html#corrupt_index</a> &rarr; SQLITE_CORRUPT_INDEX</li>
+<li><a href="rescode.html#corrupt_sequence">rescode.html#corrupt_sequence</a> &rarr; SQLITE_CORRUPT_SEQUENCE</li>
+<li><a href="rescode.html#corrupt_vtab">rescode.html#corrupt_vtab</a> &rarr; SQLITE_CORRUPT_VTAB</li>
+<li><a href="rescode.html#done">rescode.html#done</a> &rarr; SQLITE_DONE</li>
+<li><a href="rescode.html#empty">rescode.html#empty</a> &rarr; SQLITE_EMPTY</li>
+<li><a href="rescode.html#error">rescode.html#error</a> &rarr; SQLITE_ERROR</li>
+<li><a href="rescode.html#error_missing_collseq">rescode.html#error_missing_collseq</a> &rarr; SQLITE_ERROR_MISSING_COLLSEQ</li>
+<li><a href="rescode.html#error_retry">rescode.html#error_retry</a> &rarr; SQLITE_ERROR_RETRY</li>
+<li><a href="rescode.html#error_snapshot">rescode.html#error_snapshot</a> &rarr; SQLITE_ERROR_SNAPSHOT</li>
+<li><a href="rescode.html#extrc">rescode.html#extrc</a> &rarr; {extended error code} {extended error codes} {extended result code} {extended result codes}</li>
+<li><a href="rescode.html#format">rescode.html#format</a> &rarr; SQLITE_FORMAT</li>
+<li><a href="rescode.html#full">rescode.html#full</a> &rarr; SQLITE_FULL</li>
+<li><a href="rescode.html#internal">rescode.html#internal</a> &rarr; SQLITE_INTERNAL</li>
+<li><a href="rescode.html#interrupt">rescode.html#interrupt</a> &rarr; SQLITE_INTERRUPT</li>
+<li><a href="rescode.html#ioerr">rescode.html#ioerr</a> &rarr; SQLITE_IOERR</li>
+<li><a href="rescode.html#ioerr_access">rescode.html#ioerr_access</a> &rarr; SQLITE_IOERR_ACCESS</li>
+<li><a href="rescode.html#ioerr_auth">rescode.html#ioerr_auth</a> &rarr; SQLITE_IOERR_AUTH</li>
+<li><a href="rescode.html#ioerr_begin_atomic">rescode.html#ioerr_begin_atomic</a> &rarr; SQLITE_IOERR_BEGIN_ATOMIC</li>
+<li><a href="rescode.html#ioerr_blocked">rescode.html#ioerr_blocked</a> &rarr; SQLITE_IOERR_BLOCKED</li>
+<li><a href="rescode.html#ioerr_checkreservedlock">rescode.html#ioerr_checkreservedlock</a> &rarr; SQLITE_IOERR_CHECKRESERVEDLOCK</li>
+<li><a href="rescode.html#ioerr_close">rescode.html#ioerr_close</a> &rarr; SQLITE_IOERR_CLOSE</li>
+<li><a href="rescode.html#ioerr_commit_atomic">rescode.html#ioerr_commit_atomic</a> &rarr; SQLITE_IOERR_COMMIT_ATOMIC</li>
+<li><a href="rescode.html#ioerr_convpath">rescode.html#ioerr_convpath</a> &rarr; SQLITE_IOERR_CONVPATH</li>
+<li><a href="rescode.html#ioerr_corruptfs">rescode.html#ioerr_corruptfs</a> &rarr; SQLITE_IOERR_CORRUPTFS</li>
+<li><a href="rescode.html#ioerr_data">rescode.html#ioerr_data</a> &rarr; SQLITE_IOERR_DATA</li>
+<li><a href="rescode.html#ioerr_delete">rescode.html#ioerr_delete</a> &rarr; SQLITE_IOERR_DELETE</li>
+<li><a href="rescode.html#ioerr_delete_noent">rescode.html#ioerr_delete_noent</a> &rarr; SQLITE_IOERR_DELETE_NOENT</li>
+<li><a href="rescode.html#ioerr_dir_close">rescode.html#ioerr_dir_close</a> &rarr; SQLITE_IOERR_DIR_CLOSE</li>
+<li><a href="rescode.html#ioerr_dir_fsync">rescode.html#ioerr_dir_fsync</a> &rarr; SQLITE_IOERR_DIR_FSYNC</li>
+<li><a href="rescode.html#ioerr_fstat">rescode.html#ioerr_fstat</a> &rarr; SQLITE_IOERR_FSTAT</li>
+<li><a href="rescode.html#ioerr_fsync">rescode.html#ioerr_fsync</a> &rarr; SQLITE_IOERR_FSYNC</li>
+<li><a href="rescode.html#ioerr_gettemppath">rescode.html#ioerr_gettemppath</a> &rarr; SQLITE_IOERR_GETTEMPPATH</li>
+<li><a href="rescode.html#ioerr_lock">rescode.html#ioerr_lock</a> &rarr; SQLITE_IOERR_LOCK</li>
+<li><a href="rescode.html#ioerr_mmap">rescode.html#ioerr_mmap</a> &rarr; SQLITE_IOERR_MMAP</li>
+<li><a href="rescode.html#ioerr_nomem">rescode.html#ioerr_nomem</a> &rarr; SQLITE_IOERR_NOMEM</li>
+<li><a href="rescode.html#ioerr_rdlock">rescode.html#ioerr_rdlock</a> &rarr; SQLITE_IOERR_RDLOCK</li>
+<li><a href="rescode.html#ioerr_read">rescode.html#ioerr_read</a> &rarr; SQLITE_IOERR_READ</li>
+<li><a href="rescode.html#ioerr_rollback_atomic">rescode.html#ioerr_rollback_atomic</a> &rarr; SQLITE_IOERR_ROLLBACK_ATOMIC</li>
+<li><a href="rescode.html#ioerr_seek">rescode.html#ioerr_seek</a> &rarr; SQLITE_IOERR_SEEK</li>
+<li><a href="rescode.html#ioerr_shmlock">rescode.html#ioerr_shmlock</a> &rarr; SQLITE_IOERR_SHMLOCK</li>
+<li><a href="rescode.html#ioerr_shmmap">rescode.html#ioerr_shmmap</a> &rarr; SQLITE_IOERR_SHMMAP</li>
+<li><a href="rescode.html#ioerr_shmopen">rescode.html#ioerr_shmopen</a> &rarr; SQLITE_IOERR_SHMOPEN</li>
+<li><a href="rescode.html#ioerr_shmsize">rescode.html#ioerr_shmsize</a> &rarr; SQLITE_IOERR_SHMSIZE</li>
+<li><a href="rescode.html#ioerr_short_read">rescode.html#ioerr_short_read</a> &rarr; SQLITE_IOERR_SHORT_READ</li>
+<li><a href="rescode.html#ioerr_truncate">rescode.html#ioerr_truncate</a> &rarr; SQLITE_IOERR_TRUNCATE</li>
+<li><a href="rescode.html#ioerr_unlock">rescode.html#ioerr_unlock</a> &rarr; SQLITE_IOERR_UNLOCK</li>
+<li><a href="rescode.html#ioerr_vnode">rescode.html#ioerr_vnode</a> &rarr; SQLITE_IOERR_VNODE</li>
+<li><a href="rescode.html#ioerr_write">rescode.html#ioerr_write</a> &rarr; SQLITE_IOERR_WRITE</li>
+<li><a href="rescode.html#locked">rescode.html#locked</a> &rarr; SQLITE_LOCKED</li>
+<li><a href="rescode.html#locked_sharedcache">rescode.html#locked_sharedcache</a> &rarr; SQLITE_LOCKED_SHAREDCACHE</li>
+<li><a href="rescode.html#locked_vtab">rescode.html#locked_vtab</a> &rarr; SQLITE_LOCKED_VTAB</li>
+<li><a href="rescode.html#mismatch">rescode.html#mismatch</a> &rarr; SQLITE_MISMATCH</li>
+<li><a href="rescode.html#misuse">rescode.html#misuse</a> &rarr; SQLITE_MISUSE</li>
+<li><a href="rescode.html#nolfs">rescode.html#nolfs</a> &rarr; SQLITE_NOLFS</li>
+<li><a href="rescode.html#nomem">rescode.html#nomem</a> &rarr; SQLITE_NOMEM</li>
+<li><a href="rescode.html#notadb">rescode.html#notadb</a> &rarr; SQLITE_NOTADB</li>
+<li><a href="rescode.html#notfound">rescode.html#notfound</a> &rarr; SQLITE_NOTFOUND</li>
+<li><a href="rescode.html#notice">rescode.html#notice</a> &rarr; SQLITE_NOTICE</li>
+<li><a href="rescode.html#notice_recover_rollback">rescode.html#notice_recover_rollback</a> &rarr; SQLITE_NOTICE_RECOVER_ROLLBACK</li>
+<li><a href="rescode.html#notice_recover_wal">rescode.html#notice_recover_wal</a> &rarr; SQLITE_NOTICE_RECOVER_WAL</li>
+<li><a href="rescode.html#ok">rescode.html#ok</a> &rarr; SQLITE_OK</li>
+<li><a href="rescode.html#ok_load_permanently">rescode.html#ok_load_permanently</a> &rarr; SQLITE_OK_LOAD_PERMANENTLY</li>
+<li><a href="rescode.html#perm">rescode.html#perm</a> &rarr; SQLITE_PERM</li>
+<li><a href="rescode.html#protocol">rescode.html#protocol</a> &rarr; SQLITE_PROTOCOL</li>
+<li><a href="rescode.html#pve">rescode.html#pve</a> &rarr; ext-v-prim {primary versus extended result codes}</li>
+<li><a href="rescode.html#range">rescode.html#range</a> &rarr; SQLITE_RANGE</li>
+<li><a href="rescode.html#readonly">rescode.html#readonly</a> &rarr; SQLITE_READONLY</li>
+<li><a href="rescode.html#readonly_cantinit">rescode.html#readonly_cantinit</a> &rarr; SQLITE_READONLY_CANTINIT</li>
+<li><a href="rescode.html#readonly_cantlock">rescode.html#readonly_cantlock</a> &rarr; SQLITE_READONLY_CANTLOCK</li>
+<li><a href="rescode.html#readonly_dbmoved">rescode.html#readonly_dbmoved</a> &rarr; SQLITE_READONLY_DBMOVED</li>
+<li><a href="rescode.html#readonly_directory">rescode.html#readonly_directory</a> &rarr; SQLITE_READONLY_DIRECTORY</li>
+<li><a href="rescode.html#readonly_recovery">rescode.html#readonly_recovery</a> &rarr; SQLITE_READONLY_RECOVERY</li>
+<li><a href="rescode.html#readonly_rollback">rescode.html#readonly_rollback</a> &rarr; SQLITE_READONLY_ROLLBACK</li>
+<li><a href="rescode.html#row">rescode.html#row</a> &rarr; SQLITE_ROW</li>
+<li><a href="rescode.html#schema">rescode.html#schema</a> &rarr; SQLITE_SCHEMA</li>
+<li><a href="rescode.html#toobig">rescode.html#toobig</a> &rarr; SQLITE_TOOBIG</li>
+<li><a href="rescode.html#warning">rescode.html#warning</a> &rarr; SQLITE_WARNING</li>
+<li><a href="rescode.html#warning_autoindex">rescode.html#warning_autoindex</a> &rarr; SQLITE_WARNING_AUTOINDEX</li>
+<li><a href="rowidtable.html">rowidtable.html</a> &rarr; {rowid table} {rowid tables}</li>
+<li><a href="rowvalue.html">rowvalue.html</a> &rarr; {row value} {row values} rowvalue vectors</li>
+<li><a href="rowvalue.html#rvinop">rowvalue.html#rvinop</a> &rarr; {row value IN operator}</li>
+<li><a href="rtree.html">rtree.html</a> &rarr; {R-Tree extension} R-Trees RTREE rtree</li>
+<li><a href="rtree.html#auxcol">rtree.html#auxcol</a> &rarr; {auxiliary columns} {auxiliary columns in r-tree tables}</li>
+<li><a href="rtree.html#customquery">rtree.html#customquery</a> &rarr; {custom r-tree queries}</li>
+<li><a href="rtree.html#intrtree">rtree.html#intrtree</a> &rarr; {integer-valued r-trees}</li>
+<li><a href="rtree.html#readwrite">rtree.html#readwrite</a> &rarr; {reading and writing an rtree at the same time}</li>
+<li><a href="rtree.html#rtreecheck">rtree.html#rtreecheck</a> &rarr; rtreecheck</li>
+<li><a href="rtree.html#xquery">rtree.html#xquery</a> &rarr; sqlite3_rtree_query_callback {xQueryFunc RTree callback}</li>
+<li><a href="rtree.html#xshadow">rtree.html#xshadow</a> &rarr; {rtree shadow tables}</li>
+<li><a href="schematab.html">schematab.html</a> &rarr; {sqlite_master table} sqlite_schema {sqlite_schema table} sqlite_temp_schema</li>
+<li><a href="security.html">security.html</a> &rarr; {attack resistance} {defense against dark arts} {defense against the dark arts} security</li>
+<li><a href="security.html#baddb">security.html#baddb</a> &rarr; {untrusted database files}</li>
+<li><a href="selfcontained.html">selfcontained.html</a> &rarr; low-dependency self-contained</li>
+<li><a href="series.html">series.html</a> &rarr; generate_series series</li>
+<li><a href="serverless.html">serverless.html</a> &rarr; embedded serverless</li>
+<li><a href="session/c_changeset_abort.html">session/c_changeset_abort.html</a> &rarr; SQLITE_CHANGESET_ABORT SQLITE_CHANGESET_OMIT SQLITE_CHANGESET_REPLACE</li>
+<li><a href="session/c_changeset_conflict.html">session/c_changeset_conflict.html</a> &rarr; SQLITE_CHANGESET_CONFLICT SQLITE_CHANGESET_CONSTRAINT SQLITE_CHANGESET_DATA SQLITE_CHANGESET_FOREIGN_KEY SQLITE_CHANGESET_NOTFOUND</li>
+<li><a href="session/c_changesetapply_invert.html">session/c_changesetapply_invert.html</a> &rarr; SQLITE_CHANGESETAPPLY_INVERT SQLITE_CHANGESETAPPLY_NOSAVEPOINT</li>
+<li><a href="session/c_changesetstart_invert.html">session/c_changesetstart_invert.html</a> &rarr; SQLITE_CHANGESETSTART_INVERT</li>
+<li><a href="session/c_session_config_strmsize.html">session/c_session_config_strmsize.html</a> &rarr; SQLITE_SESSION_CONFIG_STRMSIZE</li>
+<li><a href="session/changegroup.html">session/changegroup.html</a> &rarr; sqlite3_changegroup</li>
+<li><a href="session/changeset_iter.html">session/changeset_iter.html</a> &rarr; sqlite3_changeset_iter</li>
+<li><a href="session/funclist.html">session/funclist.html</a> &rarr; {Session Module C-API function list} session_funclist</li>
+<li><a href="session/intro.html">session/intro.html</a> &rarr; {Session Extension C-language Interface} session-capi</li>
+<li><a href="session/rebaser.html">session/rebaser.html</a> &rarr; sqlite3_rebaser</li>
+<li><a href="session/session.html">session/session.html</a> &rarr; sqlite3_session</li>
+<li><a href="session/sqlite3changegroup_add.html">session/sqlite3changegroup_add.html</a> &rarr; sqlite3changegroup_add</li>
+<li><a href="session/sqlite3changegroup_add_strm.html">session/sqlite3changegroup_add_strm.html</a> &rarr; sqlite3changegroup_add_strm sqlite3changegroup_output_strm sqlite3changeset_apply_strm sqlite3changeset_apply_v2_strm sqlite3changeset_concat_strm sqlite3changeset_invert_strm sqlite3changeset_start_strm sqlite3changeset_start_v2_strm sqlite3rebaser_rebase_strm sqlite3session_changeset_strm sqlite3session_patchset_strm</li>
+<li><a href="session/sqlite3changegroup_delete.html">session/sqlite3changegroup_delete.html</a> &rarr; sqlite3changegroup_delete</li>
+<li><a href="session/sqlite3changegroup_new.html">session/sqlite3changegroup_new.html</a> &rarr; sqlite3changegroup_new</li>
+<li><a href="session/sqlite3changegroup_output.html">session/sqlite3changegroup_output.html</a> &rarr; sqlite3changegroup_output</li>
+<li><a href="session/sqlite3changeset_apply.html">session/sqlite3changeset_apply.html</a> &rarr; sqlite3changeset_apply sqlite3changeset_apply_v2</li>
+<li><a href="session/sqlite3changeset_concat.html">session/sqlite3changeset_concat.html</a> &rarr; sqlite3changeset_concat</li>
+<li><a href="session/sqlite3changeset_conflict.html">session/sqlite3changeset_conflict.html</a> &rarr; sqlite3changeset_conflict</li>
+<li><a href="session/sqlite3changeset_finalize.html">session/sqlite3changeset_finalize.html</a> &rarr; sqlite3changeset_finalize</li>
+<li><a href="session/sqlite3changeset_fk_conflicts.html">session/sqlite3changeset_fk_conflicts.html</a> &rarr; sqlite3changeset_fk_conflicts</li>
+<li><a href="session/sqlite3changeset_invert.html">session/sqlite3changeset_invert.html</a> &rarr; sqlite3changeset_invert</li>
+<li><a href="session/sqlite3changeset_new.html">session/sqlite3changeset_new.html</a> &rarr; sqlite3changeset_new</li>
+<li><a href="session/sqlite3changeset_next.html">session/sqlite3changeset_next.html</a> &rarr; sqlite3changeset_next</li>
+<li><a href="session/sqlite3changeset_old.html">session/sqlite3changeset_old.html</a> &rarr; sqlite3changeset_old</li>
+<li><a href="session/sqlite3changeset_op.html">session/sqlite3changeset_op.html</a> &rarr; sqlite3changeset_op</li>
+<li><a href="session/sqlite3changeset_pk.html">session/sqlite3changeset_pk.html</a> &rarr; sqlite3changeset_pk</li>
+<li><a href="session/sqlite3changeset_start.html">session/sqlite3changeset_start.html</a> &rarr; sqlite3changeset_start sqlite3changeset_start_v2</li>
+<li><a href="session/sqlite3rebaser_configure.html">session/sqlite3rebaser_configure.html</a> &rarr; sqlite3rebaser_configure</li>
+<li><a href="session/sqlite3rebaser_create.html">session/sqlite3rebaser_create.html</a> &rarr; sqlite3rebaser_create</li>
+<li><a href="session/sqlite3rebaser_delete.html">session/sqlite3rebaser_delete.html</a> &rarr; sqlite3rebaser_delete</li>
+<li><a href="session/sqlite3rebaser_rebase.html">session/sqlite3rebaser_rebase.html</a> &rarr; sqlite3rebaser_rebase</li>
+<li><a href="session/sqlite3session_attach.html">session/sqlite3session_attach.html</a> &rarr; sqlite3session_attach</li>
+<li><a href="session/sqlite3session_changeset.html">session/sqlite3session_changeset.html</a> &rarr; sqlite3session_changeset</li>
+<li><a href="session/sqlite3session_changeset_size.html">session/sqlite3session_changeset_size.html</a> &rarr; sqlite3session_changeset_size</li>
+<li><a href="session/sqlite3session_config.html">session/sqlite3session_config.html</a> &rarr; sqlite3session_config</li>
+<li><a href="session/sqlite3session_create.html">session/sqlite3session_create.html</a> &rarr; sqlite3session_create</li>
+<li><a href="session/sqlite3session_delete.html">session/sqlite3session_delete.html</a> &rarr; sqlite3session_delete</li>
+<li><a href="session/sqlite3session_diff.html">session/sqlite3session_diff.html</a> &rarr; sqlite3session_diff</li>
+<li><a href="session/sqlite3session_enable.html">session/sqlite3session_enable.html</a> &rarr; sqlite3session_enable</li>
+<li><a href="session/sqlite3session_indirect.html">session/sqlite3session_indirect.html</a> &rarr; sqlite3session_indirect</li>
+<li><a href="session/sqlite3session_isempty.html">session/sqlite3session_isempty.html</a> &rarr; sqlite3session_isempty</li>
+<li><a href="session/sqlite3session_memory_used.html">session/sqlite3session_memory_used.html</a> &rarr; sqlite3session_memory_used</li>
+<li><a href="session/sqlite3session_patchset.html">session/sqlite3session_patchset.html</a> &rarr; sqlite3session_patchset</li>
+<li><a href="session/sqlite3session_table_filter.html">session/sqlite3session_table_filter.html</a> &rarr; sqlite3session_table_filter</li>
+<li><a href="sessionintro.html">sessionintro.html</a> &rarr; session {session extension}</li>
+<li><a href="sessionintro.html#changeset">sessionintro.html#changeset</a> &rarr; changeset changesets patchset patchsets</li>
+<li><a href="sharedcache.html">sharedcache.html</a> &rarr; {SQLite Shared-Cache Mode} {shared cache} {shared cache mode}</li>
+<li><a href="sharedcache.html#dontuse">sharedcache.html#dontuse</a> &rarr; {use of shared cache mode is discouraged}</li>
+<li><a href="sharedcache.html#inmemsharedcache">sharedcache.html#inmemsharedcache</a> &rarr; {in-memory shared-cache}</li>
+<li><a href="shortnames.html">shortnames.html</a> &rarr; {short filenames}</li>
+<li><a href="shortnames.html#db83corrupt">shortnames.html#db83corrupt</a> &rarr; {database corruption caused by inconsistent use of 83 filenames}</li>
+<li><a href="sitemap.html">sitemap.html</a> &rarr; {permuted index}</li>
+<li><a href="spellfix1.html">spellfix1.html</a> &rarr; spellfix1</li>
+<li><a href="spellfix1.html#configeditdist">spellfix1.html#configeditdist</a> &rarr; {configurable edit distances}</li>
+<li><a href="spellfix1.html#editdist3">spellfix1.html#editdist3</a> &rarr; editdist3</li>
+<li><a href="sqlanalyze.html">sqlanalyze.html</a> &rarr; sqlite3_analyzer sqlite3_analyzer.exe</li>
+<li><a href="sqlar.html">sqlar.html</a> &rarr; {SQL Archive} SQLAR {SQLite Archive} {SQLite Archive files} {SQLite Archive format}</li>
+<li><a href="sqlar.html#cltools">sqlar.html#cltools</a> &rarr; {managing SQLite Archives from the command-line}</li>
+<li><a href="sqlar.html#dbasobj">sqlar.html#dbasobj</a> &rarr; {database as container object} {database as object}</li>
+<li><a href="sqldiff.html">sqldiff.html</a> &rarr; sqldiff sqldiff.exe</li>
+<li><a href="stmt.html">stmt.html</a> &rarr; {SQLITE_STMT virtual table} sqlite_stmt {the SQLITE_STMT extension}</li>
+<li><a href="stricttables.html">stricttables.html</a> &rarr; STRICT {STRICT table} {STRICT tables} {strict type checking}</li>
+<li><a href="support.html#fx">support.html#fx</a> &rarr; forum</li>
+<li><a href="support.html#mailinglists">support.html#mailinglists</a> &rarr; {mailing lists}</li>
+<li><a href="swarmvtab.html#advanced_usage">swarmvtab.html#advanced_usage</a> &rarr; advanced</li>
+<li><a href="swarmvtab.html#compiling_and_using_swarmvtab">swarmvtab.html#compiling_and_using_swarmvtab</a> &rarr; compilation</li>
+<li><a href="swarmvtab.html#component_table_context_values">swarmvtab.html#component_table_context_values</a> &rarr; {swarmvtab context}</li>
+<li><a href="swarmvtab.html#overview">swarmvtab.html#overview</a> &rarr; swarmvtab</li>
+<li><a href="swarmvtab.html#sql_parameters">swarmvtab.html#sql_parameters</a> &rarr; {sql parameters}</li>
+<li><a href="swarmvtab.html#the_maxopen_parameter">swarmvtab.html#the_maxopen_parameter</a> &rarr; {maxopen parameter}</li>
+<li><a href="swarmvtab.html#the_missing_callback">swarmvtab.html#the_missing_callback</a> &rarr; {missing callback}</li>
+<li><a href="swarmvtab.html#the_openclose_callback">swarmvtab.html#the_openclose_callback</a> &rarr; {openclose callback}</li>
+<li><a href="syntax/aggregate-function-invocation.html">syntax/aggregate-function-invocation.html</a> &rarr; aggregate-function-invocation {aggregate-function-invocation syntax diagram}</li>
+<li><a href="syntax/alter-table-stmt.html">syntax/alter-table-stmt.html</a> &rarr; alter-table-stmt {alter-table-stmt syntax diagram}</li>
+<li><a href="syntax/analyze-stmt.html">syntax/analyze-stmt.html</a> &rarr; analyze-stmt {analyze-stmt syntax diagram}</li>
+<li><a href="syntax/attach-stmt.html">syntax/attach-stmt.html</a> &rarr; attach-stmt {attach-stmt syntax diagram}</li>
+<li><a href="syntax/begin-stmt.html">syntax/begin-stmt.html</a> &rarr; begin-stmt {begin-stmt syntax diagram}</li>
+<li><a href="syntax/column-constraint.html">syntax/column-constraint.html</a> &rarr; column-constraint {column-constraint syntax diagram}</li>
+<li><a href="syntax/column-def.html">syntax/column-def.html</a> &rarr; column-def {column-def syntax diagram}</li>
+<li><a href="syntax/column-name-list.html">syntax/column-name-list.html</a> &rarr; column-name-list {column-name-list syntax diagram}</li>
+<li><a href="syntax/comment-syntax.html">syntax/comment-syntax.html</a> &rarr; comment-syntax {comment-syntax syntax diagram}</li>
+<li><a href="syntax/commit-stmt.html">syntax/commit-stmt.html</a> &rarr; commit-stmt {commit-stmt syntax diagram}</li>
+<li><a href="syntax/common-table-expression.html">syntax/common-table-expression.html</a> &rarr; common-table-expression {common-table-expression syntax diagram}</li>
+<li><a href="syntax/compound-operator.html">syntax/compound-operator.html</a> &rarr; compound-operator {compound-operator syntax diagram}</li>
+<li><a href="syntax/compound-select-stmt.html">syntax/compound-select-stmt.html</a> &rarr; compound-select-stmt {compound-select-stmt syntax diagram}</li>
+<li><a href="syntax/conflict-clause.html">syntax/conflict-clause.html</a> &rarr; conflict-clause {conflict-clause syntax diagram}</li>
+<li><a href="syntax/create-index-stmt.html">syntax/create-index-stmt.html</a> &rarr; create-index-stmt {create-index-stmt syntax diagram}</li>
+<li><a href="syntax/create-table-stmt.html">syntax/create-table-stmt.html</a> &rarr; create-table-stmt {create-table-stmt syntax diagram}</li>
+<li><a href="syntax/create-trigger-stmt.html">syntax/create-trigger-stmt.html</a> &rarr; create-trigger-stmt {create-trigger-stmt syntax diagram}</li>
+<li><a href="syntax/create-view-stmt.html">syntax/create-view-stmt.html</a> &rarr; create-view-stmt {create-view-stmt syntax diagram}</li>
+<li><a href="syntax/create-virtual-table-stmt.html">syntax/create-virtual-table-stmt.html</a> &rarr; create-virtual-table-stmt {create-virtual-table-stmt syntax diagram}</li>
+<li><a href="syntax/cte-table-name.html">syntax/cte-table-name.html</a> &rarr; cte-table-name {cte-table-name syntax diagram}</li>
+<li><a href="syntax/delete-stmt-limited.html">syntax/delete-stmt-limited.html</a> &rarr; delete-stmt-limited {delete-stmt-limited syntax diagram}</li>
+<li><a href="syntax/delete-stmt.html">syntax/delete-stmt.html</a> &rarr; delete-stmt {delete-stmt syntax diagram}</li>
+<li><a href="syntax/detach-stmt.html">syntax/detach-stmt.html</a> &rarr; detach-stmt {detach-stmt syntax diagram}</li>
+<li><a href="syntax/drop-index-stmt.html">syntax/drop-index-stmt.html</a> &rarr; drop-index-stmt {drop-index-stmt syntax diagram}</li>
+<li><a href="syntax/drop-table-stmt.html">syntax/drop-table-stmt.html</a> &rarr; drop-table-stmt {drop-table-stmt syntax diagram}</li>
+<li><a href="syntax/drop-trigger-stmt.html">syntax/drop-trigger-stmt.html</a> &rarr; drop-trigger-stmt {drop-trigger-stmt syntax diagram}</li>
+<li><a href="syntax/drop-view-stmt.html">syntax/drop-view-stmt.html</a> &rarr; drop-view-stmt {drop-view-stmt syntax diagram}</li>
+<li><a href="syntax/expr.html">syntax/expr.html</a> &rarr; expr {expr syntax diagram}</li>
+<li><a href="syntax/factored-select-stmt.html">syntax/factored-select-stmt.html</a> &rarr; factored-select-stmt {factored-select-stmt syntax diagram}</li>
+<li><a href="syntax/filter-clause.html">syntax/filter-clause.html</a> &rarr; filter-clause {filter-clause syntax diagram}</li>
+<li><a href="syntax/foreign-key-clause.html">syntax/foreign-key-clause.html</a> &rarr; foreign-key-clause {foreign-key-clause syntax diagram}</li>
+<li><a href="syntax/frame-spec.html">syntax/frame-spec.html</a> &rarr; frame-spec {frame-spec syntax diagram}</li>
+<li><a href="syntax/indexed-column.html">syntax/indexed-column.html</a> &rarr; indexed-column {indexed-column syntax diagram}</li>
+<li><a href="syntax/insert-stmt.html">syntax/insert-stmt.html</a> &rarr; insert-stmt {insert-stmt syntax diagram}</li>
+<li><a href="syntax/join-clause.html">syntax/join-clause.html</a> &rarr; join-clause {join-clause syntax diagram}</li>
+<li><a href="syntax/join-constraint.html">syntax/join-constraint.html</a> &rarr; join-constraint {join-constraint syntax diagram}</li>
+<li><a href="syntax/join-operator.html">syntax/join-operator.html</a> &rarr; join-operator {join-operator syntax diagram}</li>
+<li><a href="syntax/literal-value.html">syntax/literal-value.html</a> &rarr; literal-value {literal-value syntax diagram}</li>
+<li><a href="syntax/numeric-literal.html">syntax/numeric-literal.html</a> &rarr; numeric-literal {numeric-literal syntax diagram}</li>
+<li><a href="syntax/ordering-term.html">syntax/ordering-term.html</a> &rarr; ordering-term {ordering-term syntax diagram}</li>
+<li><a href="syntax/over-clause.html">syntax/over-clause.html</a> &rarr; over-clause {over-clause syntax diagram}</li>
+<li><a href="syntax/pragma-stmt.html">syntax/pragma-stmt.html</a> &rarr; pragma-stmt {pragma-stmt syntax diagram}</li>
+<li><a href="syntax/pragma-value.html">syntax/pragma-value.html</a> &rarr; pragma-value {pragma-value syntax diagram}</li>
+<li><a href="syntax/qualified-table-name.html">syntax/qualified-table-name.html</a> &rarr; qualified-table-name {qualified-table-name syntax diagram}</li>
+<li><a href="syntax/raise-function.html">syntax/raise-function.html</a> &rarr; raise-function {raise-function syntax diagram}</li>
+<li><a href="syntax/recursive-cte.html">syntax/recursive-cte.html</a> &rarr; recursive-cte {recursive-cte syntax diagram}</li>
+<li><a href="syntax/reindex-stmt.html">syntax/reindex-stmt.html</a> &rarr; reindex-stmt {reindex-stmt syntax diagram}</li>
+<li><a href="syntax/release-stmt.html">syntax/release-stmt.html</a> &rarr; release-stmt {release-stmt syntax diagram}</li>
+<li><a href="syntax/result-column.html">syntax/result-column.html</a> &rarr; result-column {result-column syntax diagram}</li>
+<li><a href="syntax/returning-clause.html">syntax/returning-clause.html</a> &rarr; returning-clause {returning-clause syntax diagram}</li>
+<li><a href="syntax/rollback-stmt.html">syntax/rollback-stmt.html</a> &rarr; rollback-stmt {rollback-stmt syntax diagram}</li>
+<li><a href="syntax/savepoint-stmt.html">syntax/savepoint-stmt.html</a> &rarr; savepoint-stmt {savepoint-stmt syntax diagram}</li>
+<li><a href="syntax/select-core.html">syntax/select-core.html</a> &rarr; select-core {select-core syntax diagram}</li>
+<li><a href="syntax/select-stmt.html">syntax/select-stmt.html</a> &rarr; select-stmt {select-stmt syntax diagram}</li>
+<li><a href="syntax/signed-number.html">syntax/signed-number.html</a> &rarr; signed-number {signed-number syntax diagram}</li>
+<li><a href="syntax/simple-function-invocation.html">syntax/simple-function-invocation.html</a> &rarr; simple-function-invocation {simple-function-invocation syntax diagram}</li>
+<li><a href="syntax/simple-select-stmt.html">syntax/simple-select-stmt.html</a> &rarr; simple-select-stmt {simple-select-stmt syntax diagram}</li>
+<li><a href="syntax/sql-stmt-list.html">syntax/sql-stmt-list.html</a> &rarr; sql-stmt-list {sql-stmt-list syntax diagram}</li>
+<li><a href="syntax/sql-stmt.html">syntax/sql-stmt.html</a> &rarr; sql-stmt {sql-stmt syntax diagram}</li>
+<li><a href="syntax/table-constraint.html">syntax/table-constraint.html</a> &rarr; table-constraint {table-constraint syntax diagram}</li>
+<li><a href="syntax/table-options.html">syntax/table-options.html</a> &rarr; table-options {table-options syntax diagram}</li>
+<li><a href="syntax/table-or-subquery.html">syntax/table-or-subquery.html</a> &rarr; table-or-subquery {table-or-subquery syntax diagram}</li>
+<li><a href="syntax/type-name.html">syntax/type-name.html</a> &rarr; type-name {type-name syntax diagram}</li>
+<li><a href="syntax/update-stmt-limited.html">syntax/update-stmt-limited.html</a> &rarr; update-stmt-limited {update-stmt-limited syntax diagram}</li>
+<li><a href="syntax/update-stmt.html">syntax/update-stmt.html</a> &rarr; update-stmt {update-stmt syntax diagram}</li>
+<li><a href="syntax/upsert-clause.html">syntax/upsert-clause.html</a> &rarr; upsert-clause {upsert-clause syntax diagram}</li>
+<li><a href="syntax/vacuum-stmt.html">syntax/vacuum-stmt.html</a> &rarr; vacuum-stmt {vacuum-stmt syntax diagram}</li>
+<li><a href="syntax/window-defn.html">syntax/window-defn.html</a> &rarr; window-defn {window-defn syntax diagram}</li>
+<li><a href="syntax/window-function-invocation.html">syntax/window-function-invocation.html</a> &rarr; window-function-invocation {window-function-invocation syntax diagram}</li>
+<li><a href="syntax/with-clause.html">syntax/with-clause.html</a> &rarr; with-clause {with-clause syntax diagram}</li>
+<li><a href="syntaxdiagrams.html">syntaxdiagrams.html</a> &rarr; {syntax diagrams}</li>
+<li><a href="tclsqlite.html">tclsqlite.html</a> &rarr; {TCL Interface} {Tcl extension}</li>
+<li><a href="tclsqlite.html#authorizer">tclsqlite.html#authorizer</a> &rarr; {TCL interface authorizer method} {authorizer method}</li>
+<li><a href="tclsqlite.html#backup">tclsqlite.html#backup</a> &rarr; {TCL interface backup method} {backup method}</li>
+<li><a href="tclsqlite.html#bind_fallback">tclsqlite.html#bind_fallback</a> &rarr; {TCL interface bind_fallback method} {bind_fallback method}</li>
+<li><a href="tclsqlite.html#busy">tclsqlite.html#busy</a> &rarr; {TCL interface busy method} {busy method}</li>
+<li><a href="tclsqlite.html#cache">tclsqlite.html#cache</a> &rarr; {TCL interface cache method} {cache method}</li>
+<li><a href="tclsqlite.html#changes">tclsqlite.html#changes</a> &rarr; {TCL interface changes method} {changes method}</li>
+<li><a href="tclsqlite.html#close">tclsqlite.html#close</a> &rarr; {TCL interface close method} {close method}</li>
+<li><a href="tclsqlite.html#collate">tclsqlite.html#collate</a> &rarr; {TCL interface collate method} {collate method}</li>
+<li><a href="tclsqlite.html#collation_needed">tclsqlite.html#collation_needed</a> &rarr; {TCL interface collation_needed method} {collation_needed method}</li>
+<li><a href="tclsqlite.html#commit_hook">tclsqlite.html#commit_hook</a> &rarr; {TCL interface commit_hook method} {commit_hook method}</li>
+<li><a href="tclsqlite.html#complete">tclsqlite.html#complete</a> &rarr; {TCL interface complete method} {complete method}</li>
+<li><a href="tclsqlite.html#config">tclsqlite.html#config</a> &rarr; {TCL interface config method} {config method}</li>
+<li><a href="tclsqlite.html#copy">tclsqlite.html#copy</a> &rarr; {TCL interface copy method} {copy method}</li>
+<li><a href="tclsqlite.html#deserialize">tclsqlite.html#deserialize</a> &rarr; {TCL interface deserialize method} {deserialize method}</li>
+<li><a href="tclsqlite.html#enable_load_extension">tclsqlite.html#enable_load_extension</a> &rarr; {TCL interface enable_load_extension method} {enable_load_extension method}</li>
+<li><a href="tclsqlite.html#errorcode">tclsqlite.html#errorcode</a> &rarr; {TCL interface errorcode method} {errorcode method}</li>
+<li><a href="tclsqlite.html#eval">tclsqlite.html#eval</a> &rarr; {TCL interface eval method} {eval method}</li>
+<li><a href="tclsqlite.html#exists">tclsqlite.html#exists</a> &rarr; {TCL interface exists method} {exists method}</li>
+<li><a href="tclsqlite.html#function">tclsqlite.html#function</a> &rarr; {TCL interface function method} {function method}</li>
+<li><a href="tclsqlite.html#incrblob">tclsqlite.html#incrblob</a> &rarr; {TCL interface incrblob method} {incrblob method}</li>
+<li><a href="tclsqlite.html#interrupt">tclsqlite.html#interrupt</a> &rarr; {TCL interface interrupt method} {interrupt method}</li>
+<li><a href="tclsqlite.html#last_insert_rowid">tclsqlite.html#last_insert_rowid</a> &rarr; {TCL interface last_insert_rowid method} {last_insert_rowid method}</li>
+<li><a href="tclsqlite.html#nullvalue">tclsqlite.html#nullvalue</a> &rarr; {TCL interface nullvalue method} {nullvalue method}</li>
+<li><a href="tclsqlite.html#onecolumn">tclsqlite.html#onecolumn</a> &rarr; {TCL interface onecolumn method} {onecolumn method}</li>
+<li><a href="tclsqlite.html#profile">tclsqlite.html#profile</a> &rarr; {TCL interface profile method} {profile method}</li>
+<li><a href="tclsqlite.html#progress">tclsqlite.html#progress</a> &rarr; {TCL interface progress method} {progress method}</li>
+<li><a href="tclsqlite.html#restore">tclsqlite.html#restore</a> &rarr; {TCL interface restore method} {restore method}</li>
+<li><a href="tclsqlite.html#rollback_hook">tclsqlite.html#rollback_hook</a> &rarr; {TCL interface rollback_hook method} {rollback_hook method}</li>
+<li><a href="tclsqlite.html#serialize">tclsqlite.html#serialize</a> &rarr; {TCL interface serialize method} {serialize method}</li>
+<li><a href="tclsqlite.html#status">tclsqlite.html#status</a> &rarr; {TCL interface status method} {status method}</li>
+<li><a href="tclsqlite.html#timeout">tclsqlite.html#timeout</a> &rarr; {TCL interface timeout method} {timeout method}</li>
+<li><a href="tclsqlite.html#total_changes">tclsqlite.html#total_changes</a> &rarr; {TCL interface total_changes method} {total_changes method}</li>
+<li><a href="tclsqlite.html#trace">tclsqlite.html#trace</a> &rarr; {TCL interface trace method} {trace method}</li>
+<li><a href="tclsqlite.html#trace_v2">tclsqlite.html#trace_v2</a> &rarr; {TCL interface trace_v2 method} {trace_v2 method}</li>
+<li><a href="tclsqlite.html#transaction">tclsqlite.html#transaction</a> &rarr; {TCL interface transaction method} {transaction method}</li>
+<li><a href="tclsqlite.html#unlock_notify">tclsqlite.html#unlock_notify</a> &rarr; {TCL interface unlock_notify method} {unlock_notify method}</li>
+<li><a href="tclsqlite.html#update_hook">tclsqlite.html#update_hook</a> &rarr; {TCL interface update_hook method} {update_hook method}</li>
+<li><a href="tclsqlite.html#varsubst">tclsqlite.html#varsubst</a> &rarr; {TCL variable substitution}</li>
+<li><a href="tclsqlite.html#version">tclsqlite.html#version</a> &rarr; {TCL interface version method} {version method}</li>
+<li><a href="tclsqlite.html#wal_hook">tclsqlite.html#wal_hook</a> &rarr; {TCL interface wal_hook method} {wal_hook method}</li>
+<li><a href="tempfiles.html">tempfiles.html</a> &rarr; {temporary disk files}</li>
+<li><a href="tempfiles.html#stmtjrnl">tempfiles.html#stmtjrnl</a> &rarr; {Statement journals} {statement journal} {statement journals}</li>
+<li><a href="tempfiles.html#superjrnl">tempfiles.html#superjrnl</a> &rarr; {master journal} super-journal</li>
+<li><a href="tempfiles.html#tempdir">tempfiles.html#tempdir</a> &rarr; {temporary directory search algorithm}</li>
+<li><a href="tempfiles.html#tempstore">tempfiles.html#tempstore</a> &rarr; tempstore</li>
+<li><a href="testing.html">testing.html</a> &rarr; {test suite} tested testing</li>
+<li><a href="testing.html#3pfuzz">testing.html#3pfuzz</a> &rarr; {3rd-party fuzzers}</li>
+<li><a href="testing.html#aflfuzz">testing.html#aflfuzz</a> &rarr; AFL {American Fuzzy Lop fuzzer}</li>
+<li><a href="testing.html#cklist">testing.html#cklist</a> &rarr; checklist {release testing checklists}</li>
+<li><a href="testing.html#coverage">testing.html#coverage</a> &rarr; {test coverage}</li>
+<li><a href="testing.html#dbsqlfuzz">testing.html#dbsqlfuzz</a> &rarr; dbsqlfuzz</li>
+<li><a href="testing.html#defcode">testing.html#defcode</a> &rarr; {defensive code}</li>
+<li><a href="testing.html#fuzzcheck">testing.html#fuzzcheck</a> &rarr; fuzzcheck</li>
+<li><a href="testing.html#fuzztesting">testing.html#fuzztesting</a> &rarr; {SQL fuzzing} {fuzz testing}</li>
+<li><a href="testing.html#harnesses">testing.html#harnesses</a> &rarr; {test harness} {three test harnesses}</li>
+<li><a href="testing.html#mcdc">testing.html#mcdc</a> &rarr; MC/DC {MC/DC testing}</li>
+<li><a href="testing.html#mutationtests">testing.html#mutationtests</a> &rarr; {mutation testing}</li>
+<li><a href="testing.html#ossfuzz">testing.html#ossfuzz</a> &rarr; {OSS Fuzz}</li>
+<li><a href="testing.html#slt">testing.html#slt</a> &rarr; SLT {SQL Logic Tests}</li>
+<li><a href="testing.html#tcl">testing.html#tcl</a> &rarr; {TCL test suite}</li>
+<li><a href="testing.html#tension">testing.html#tension</a> &rarr; {coverage testing vs. fuzz testing}</li>
+<li><a href="testing.html#testcase">testing.html#testcase</a> &rarr; {testcase macros}</li>
+<li><a href="th3.html">th3.html</a> &rarr; TH3</li>
+<li><a href="th3.html#muttest">th3.html#muttest</a> &rarr; {mutation test script}</li>
+<li><a href="threadsafe.html">threadsafe.html</a> &rarr; {threading mode}</li>
+<li><a href="transactional.html">transactional.html</a> &rarr; ACID power-safe {power-safe transactions} transactional</li>
+<li><a href="uintcseq.html">uintcseq.html</a> &rarr; UINT {UINT collating sequence}</li>
+<li><a href="undoredo.html">undoredo.html</a> &rarr; {automated undo/redo stack} undo/redo undoredo</li>
+<li><a href="unionvtab.html">unionvtab.html</a> &rarr; {UNION virtual table} union-vtab unionvtab</li>
+<li><a href="unlock_notify.html">unlock_notify.html</a> &rarr; {Using the SQLite Unlock Notification Feature}</li>
+<li><a href="uri.html">uri.html</a> &rarr; URI {URI filename} {URI filenames} {Uniform Resource Identifier}</li>
+<li><a href="uri.html#coreqp">uri.html#coreqp</a> &rarr; {URI query parameters} coreqp {query parameters with special meaning to SQLite} {standard query parameters}</li>
+<li><a href="uri.html#uricache">uri.html#uricache</a> &rarr; {cache query parameter}</li>
+<li><a href="uri.html#uriimmutable">uri.html#uriimmutable</a> &rarr; {immutable query parameter}</li>
+<li><a href="uri.html#urimode">uri.html#urimode</a> &rarr; {mode query parameter}</li>
+<li><a href="uri.html#urimodeof">uri.html#urimodeof</a> &rarr; modeof {modeof query parameter}</li>
+<li><a href="uri.html#urinolock">uri.html#urinolock</a> &rarr; {nolock query parameter}</li>
+<li><a href="uri.html#uripsow">uri.html#uripsow</a> &rarr; {psow query parameter}</li>
+<li><a href="uri.html#urivfs">uri.html#urivfs</a> &rarr; {vfs query parameter}</li>
+<li><a href="useovernet.html">useovernet.html</a> &rarr; {how to corrupt a database} {network filesystem use}</li>
+<li><a href="versionnumbers.html">versionnumbers.html</a> &rarr; {version numbering conventions}</li>
+<li><a href="vfs.html">vfs.html</a> &rarr; {OS backend} VFS VFSes</li>
+<li><a href="vfs.html#shim">vfs.html#shim</a> &rarr; {VFS shim} {VFS shims} shims</li>
+<li><a href="vtab.html">vtab.html</a> &rarr; {virtual table} {virtual tables}</li>
+<li><a href="vtab.html#colUsed">vtab.html#colUsed</a> &rarr; {colUsed field}</li>
+<li><a href="vtab.html#customvtab">vtab.html#customvtab</a> &rarr; {custom virtual tables}</li>
+<li><a href="vtab.html#epoonlyvtab">vtab.html#epoonlyvtab</a> &rarr; {eponymous-only virtual table} {eponymous-only virtual tables}</li>
+<li><a href="vtab.html#epovtab">vtab.html#epovtab</a> &rarr; {eponymous virtual table} {eponymous virtual tables}</li>
+<li><a href="vtab.html#hiddencol">vtab.html#hiddencol</a> &rarr; {hidden column} {hidden columns}</li>
+<li><a href="vtab.html#obc">vtab.html#obc</a> &rarr; orderByConsumed</li>
+<li><a href="vtab.html#sqlite3_module.xDestroy">vtab.html#sqlite3_module.xDestroy</a> &rarr; xDestroy</li>
+<li><a href="vtab.html#tabfunc2">vtab.html#tabfunc2</a> &rarr; {table-valued function} {table-valued functions}</li>
+<li><a href="vtab.html#worid">vtab.html#worid</a> &rarr; {WITHOUT ROWID virtual table} {WITHOUT ROWID virtual tables}</li>
+<li><a href="vtab.html#xBegin">vtab.html#xBegin</a> &rarr; sqlite3_module.xBegin xBegin</li>
+<li><a href="vtab.html#xbestindex">vtab.html#xbestindex</a> &rarr; sqlite3_module.xBestIndex xBestIndex</li>
+<li><a href="vtab.html#xclose">vtab.html#xclose</a> &rarr; sqlite3_module.xClose</li>
+<li><a href="vtab.html#xcolumn">vtab.html#xcolumn</a> &rarr; sqlite3_module.xColumn xColumn</li>
+<li><a href="vtab.html#xcommit">vtab.html#xcommit</a> &rarr; sqlite3_module.xCommit xCommit</li>
+<li><a href="vtab.html#xconnect">vtab.html#xconnect</a> &rarr; sqlite3_module.xConnect xConnect</li>
+<li><a href="vtab.html#xcreate">vtab.html#xcreate</a> &rarr; sqlite3_module.xCreate xCreate</li>
+<li><a href="vtab.html#xdisconnect">vtab.html#xdisconnect</a> &rarr; sqlite3_module.xDisconnect xDisconnect</li>
+<li><a href="vtab.html#xeof">vtab.html#xeof</a> &rarr; sqlite3_module.xEof xEof</li>
+<li><a href="vtab.html#xfilter">vtab.html#xfilter</a> &rarr; sqlite3_module.xFilter xFilter</li>
+<li><a href="vtab.html#xfindfunction">vtab.html#xfindfunction</a> &rarr; sqlite3_module.xFindFunction xFindFunction</li>
+<li><a href="vtab.html#xnext">vtab.html#xnext</a> &rarr; sqlite3_module.xNext xNext</li>
+<li><a href="vtab.html#xopen">vtab.html#xopen</a> &rarr; sqlite3_module.xOpen</li>
+<li><a href="vtab.html#xrename">vtab.html#xrename</a> &rarr; sqlite3_module.xRename xRename</li>
+<li><a href="vtab.html#xrollback">vtab.html#xrollback</a> &rarr; sqlite3_module.xRollback xRollback</li>
+<li><a href="vtab.html#xrowid">vtab.html#xrowid</a> &rarr; sqlite3_module.xRowid xRowid</li>
+<li><a href="vtab.html#xsavepoint">vtab.html#xsavepoint</a> &rarr; sqlite3_module.xSavepoint xRelease xRollbackTo xSavepoint</li>
+<li><a href="vtab.html#xshadowname">vtab.html#xshadowname</a> &rarr; {shadow table} {shadow tables} sqlite3_module.xShadowName xShadowName</li>
+<li><a href="vtab.html#xsync">vtab.html#xsync</a> &rarr; sqlite3_module.xSync</li>
+<li><a href="vtab.html#xupdate">vtab.html#xupdate</a> &rarr; sqlite3_module.xUpdate xUpdate</li>
+<li><a href="vtablist.html">vtablist.html</a> &rarr; {list of virtual tables} {virtual table list}</li>
+<li><a href="wal.html">wal.html</a> &rarr; WAL {WAL mode} {write-ahead log}</li>
+<li><a href="wal.html#advantages">wal.html#advantages</a> &rarr; {advantages of WAL-mode}</li>
+<li><a href="wal.html#bigwal">wal.html#bigwal</a> &rarr; {avoiding large WAL files} {large WAL files}</li>
+<li><a href="wal.html#bkwrds">wal.html#bkwrds</a> &rarr; {WAL backwards compatibility}</li>
+<li><a href="wal.html#busy">wal.html#busy</a> &rarr; {WAL-mode read blocking}</li>
+<li><a href="wal.html#ckpt">wal.html#ckpt</a> &rarr; checkpoint checkpointed checkpointing</li>
+<li><a href="wal.html#concurrency">wal.html#concurrency</a> &rarr; {WAL concurrency}</li>
+<li><a href="wal.html#noshm">wal.html#noshm</a> &rarr; {WAL without shared memory}</li>
+<li><a href="wal.html#readonly">wal.html#readonly</a> &rarr; {read-only WAL databases}</li>
+<li><a href="wal.html#walfile">wal.html#walfile</a> &rarr; {WAL file}</li>
+<li><a href="walformat.html">walformat.html</a> &rarr; {WAL-mode File Format}</li>
+<li><a href="walformat.html#locks">walformat.html#locks</a> &rarr; {WAL-mode locks}</li>
+<li><a href="walformat.html#mxframe">walformat.html#mxframe</a> &rarr; mxFrame</li>
+<li><a href="walformat.html#nbackfill">walformat.html#nbackfill</a> &rarr; nBackfill</li>
+<li><a href="walformat.html#recovery">walformat.html#recovery</a> &rarr; {WAL-mode crash recovery} recovery</li>
+<li><a href="walformat.html#shm">walformat.html#shm</a> &rarr; {shm file} wal-index</li>
+<li><a href="walformat.html#walidxfmt">walformat.html#walidxfmt</a> &rarr; {WAL-index File Format} {WAL-index format}</li>
+<li><a href="whentouse.html">whentouse.html</a> &rarr; {Appropriate Uses For SQLite}</li>
+<li><a href="whentouse.html#container">whentouse.html#container</a> &rarr; {data container}</li>
+<li><a href="whentouse.html#dbcklst">whentouse.html#dbcklst</a> &rarr; {decision checklist}</li>
+<li><a href="whentouse.html#serversidedb">whentouse.html#serversidedb</a> &rarr; {server-side database}</li>
+<li><a href="whentouse.html#website">whentouse.html#website</a> &rarr; {using SQLite for websites}</li>
+<li><a href="whentouse.html#wireproto">whentouse.html#wireproto</a> &rarr; {data transfer format}</li>
+<li><a href="windowfunctions.html">windowfunctions.html</a> &rarr; {Window functions} {window function} {window functions}</li>
+<li><a href="windowfunctions.html#aggwinfunc">windowfunctions.html#aggwinfunc</a> &rarr; {aggregate window functions}</li>
+<li><a href="windowfunctions.html#biwinfunc">windowfunctions.html#biwinfunc</a> &rarr; {builtin window functions}</li>
+<li><a href="windowfunctions.html#builtins">windowfunctions.html#builtins</a> &rarr; {built-in window functions} built-ins</li>
+<li><a href="windowfunctions.html#exprrange">windowfunctions.html#exprrange</a> &rarr; {RANGE n FOLLOWING} {RANGE n PRECEDING}</li>
+<li><a href="windowfunctions.html#frameboundary">windowfunctions.html#frameboundary</a> &rarr; {frame boundary}</li>
+<li><a href="windowfunctions.html#framespec">windowfunctions.html#framespec</a> &rarr; {frame specification} frames</li>
+<li><a href="windowfunctions.html#frametype">windowfunctions.html#frametype</a> &rarr; {frame type}</li>
+<li><a href="windowfunctions.html#grouptype">windowfunctions.html#grouptype</a> &rarr; {GROUPS frames}</li>
+<li><a href="windowfunctions.html#ptxn">windowfunctions.html#ptxn</a> &rarr; partition</li>
+<li><a href="windowfunctions.html#rangetype">windowfunctions.html#rangetype</a> &rarr; {RANGE frames}</li>
+<li><a href="windowfunctions.html#udfwinfunc">windowfunctions.html#udfwinfunc</a> &rarr; {application-defined window functions} {user-defined window functions}</li>
+<li><a href="windowfunctions.html#wchaining">windowfunctions.html#wchaining</a> &rarr; {window chaining}</li>
+<li><a href="windowfunctions.html#wexcls">windowfunctions.html#wexcls</a> &rarr; {EXCLUDE clause} {exclude clause}</li>
+<li><a href="withoutrowid.html">withoutrowid.html</a> &rarr; {Clustered indexes} {WITHOUT ROWID} {WITHOUT rowid}</li>
+<li><a href="withoutrowid.html#bene">withoutrowid.html#bene</a> &rarr; {benefits of using WITHOUT ROWID}</li>
+<li><a href="withoutrowid.html#wtu">withoutrowid.html#wtu</a> &rarr; {when to use WITHOUT ROWID}</li>
+<li><a href="zeroconf.html">zeroconf.html</a> &rarr; zero-configuration</li>
+<li><a href="zipfile.html">zipfile.html</a> &rarr; {Zipfile virtual table} zipfile</li>
+<li><a href="zipfile.html#adding_entries_to_a_zip_archive">zipfile.html#adding_entries_to_a_zip_archive</a> &rarr; {Adding to Zip}</li>
+</ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/wrap.tcl?m=86a88e65fd2db6eba">2022-12-07 17:49:21</a> UTC </small></i></p>
+
diff --git a/www/doclist.html b/www/doclist.html
new file mode 100644
index 0000000..d002da1
--- /dev/null
+++ b/www/doclist.html
@@ -0,0 +1,341 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Alphabetical List Of SQLite Documents</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+<h2 align=center>Alphabetical List Of Documents</h1>
+
+
+<var class="rightsidebar border2px desktoponly">
+See Also:
+<ul>
+<li><a href="docs.html">Categorical Document List</a>
+<li><a href="books.html">Books About SQLite</a>
+<li><a href="sitemap.html">Permuted Title Index</a>
+<li><a href="keyword_index.html">Website Keyword Index</a>
+</ul>
+</var>
+
+<ol>
+<li><a href="fasterthanfs.html">35% Faster Than The Filesystem</a></li>
+<li><a href="shortnames.html">8+3 Filenames</a></li>
+<li><a href="about.html">About SQLite</a></li>
+<li><a href="doclist.html">Alphabetical List Of SQLite Documents</a></li>
+<li><a href="lang_altertable.html">ALTER TABLE</a></li>
+<li><a href="asyncvfs.html">An Asynchronous I/O Module For SQLite</a></li>
+<li><a href="cintro.html">An Introduction To The SQLite C/C++ Interface</a></li>
+<li><a href="lang_analyze.html">ANALYZE</a></li>
+<li><a href="https://sqlite.org/android/">Android Bindings</a></li>
+<li><a href="appfunc.html">Application-Defined SQL Functions</a></li>
+<li><a href="whentouse.html">Appropriate Uses For SQLite</a></li>
+<li><a href="arch.html">Architecture of SQLite</a></li>
+<li><a href="atomiccommit.html">Atomic Commit In SQLite</a></li>
+<li><a href="lang_attach.html">ATTACH DATABASE</a></li>
+<li><a href="undoredo.html">Automatic Undo/Redo With SQLite</a></li>
+<li><a href="aff_short.html">Benefits of SQLite As A File Format</a></li>
+<li><a href="books.html">Books About SQLite</a></li>
+<li><a href="lang_aggfunc.html">Built-in Aggregate Functions</a></li>
+<li><a href="lang_mathfunc.html">Built-In Mathematical SQL Functions</a></li>
+<li><a href="lang_corefunc.html">Built-In Scalar SQL Functions</a></li>
+<li><a href="capi3ref.html">C/C++ Interface For SQLite Version 3</a></li>
+<li><a href="capi3.html">C/C++ Interface For SQLite Version 3 (old)</a></li>
+<li><a href="pgszchng2016.html">Change in Default Page Size in SQLite Version 3.12.0</a></li>
+<li><a href="withoutrowid.html">Clustered Indexes and the WITHOUT ROWID Optimization</a></li>
+<li><a href="cli.html">Command Line Shell For SQLite</a></li>
+<li><a href="compile.html">Compile-time Options</a></li>
+<li><a href="conflict.html">Constraint Conflict Resolution in SQLite</a></li>
+<li><a href="lang_createindex.html">CREATE INDEX</a></li>
+<li><a href="lang_createtable.html">CREATE TABLE</a></li>
+<li><a href="lang_createtrigger.html">CREATE TRIGGER</a></li>
+<li><a href="lang_createview.html">CREATE VIEW</a></li>
+<li><a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a></li>
+<li><a href="custombuild.html">Custom Builds Of SQLite</a></li>
+<li><a href="fileformat2.html">Database File Format</a></li>
+<li><a href="lang_naming.html">Database Object Name Resolution</a></li>
+<li><a href="datatype3.html">Datatypes In SQLite</a></li>
+<li><a href="datatypes.html">Datatypes In SQLite version 2</a></li>
+<li><a href="lang_datefunc.html">Date And Time Functions</a></li>
+<li><a href="security.html">Defense Against The Dark Arts</a></li>
+<li><a href="lang_delete.html">DELETE</a></li>
+<li><a href="lang_detach.html">DETACH</a></li>
+<li><a href="deterministic.html">Deterministic SQL Functions</a></li>
+<li><a href="different.html">Distinctive Features Of SQLite</a></li>
+<li><a href="lang_dropindex.html">DROP INDEX</a></li>
+<li><a href="lang_droptable.html">DROP TABLE</a></li>
+<li><a href="lang_droptrigger.html">DROP TRIGGER</a></li>
+<li><a href="lang_dropview.html">DROP VIEW</a></li>
+<li><a href="malloc.html">Dynamic Memory Allocation In SQLite</a></li>
+<li><a href="lang_explain.html">EXPLAIN</a></li>
+<li><a href="eqp.html">EXPLAIN QUERY PLAN</a></li>
+<li><a href="features.html">Features Of SQLite</a></li>
+<li><a href="formatchng.html">File Format Changes in SQLite</a></li>
+<li><a href="lockingv3.html">File Locking And Concurrency In SQLite Version 3</a></li>
+<li><a href="floatingpoint.html">Floating Point Numbers</a></li>
+<li><a href="fullsql.html">Full-Featured SQL</a></li>
+<li><a href="gencol.html">Generated Columns</a></li>
+<li><a href="hirely.html">High Reliability</a></li>
+<li><a href="debugging.html">Hints for Debugging SQLite</a></li>
+<li><a href="chronology.html">History Of SQLite Releases</a></li>
+<li><a href="testing.html">How SQLite Is Tested</a></li>
+<li><a href="howitworks.html">How SQLite Works</a></li>
+<li><a href="howtocompile.html">How To Compile SQLite</a></li>
+<li><a href="howtocorrupt.html">How To Corrupt An SQLite Database File</a></li>
+<li><a href="getthecode.html">How To Download Canonical SQLite Source Code</a></li>
+<li><a href="limits.html">Implementation Limits For SQLite</a></li>
+<li><a href="imposter.html">Imposter Tables</a></li>
+<li><a href="inmemorydb.html">In-Memory Databases</a></li>
+<li><a href="expridx.html">Indexes On Expressions</a></li>
+<li><a href="lang_insert.html">INSERT</a></li>
+<li><a href="intern-v-extern-blob.html">Internal Versus External BLOBs</a></li>
+<li><a href="invalidutf.html">Invalid UTF Policy</a></li>
+<li><a href="isolation.html">Isolation In SQLite</a></li>
+<li><a href="json1.html">JSON Functions And Operators</a></li>
+<li><a href="syntax.html">List of SQLite Syntax Diagrams</a></li>
+<li><a href="vtablist.html">List Of Virtual Tables</a></li>
+<li><a href="locrsf.html">LoC Recommended Storage Format</a></li>
+<li><a href="lts.html">Long Term Support</a></li>
+<li><a href="privatebranch.html">Maintaining Private Branches Of SQLite</a></li>
+<li><a href="np1queryprob.html">Many Small Queries Are Efficient In SQLite</a></li>
+<li><a href="cpu.html">Measuring and Reducing CPU Usage in SQLite</a></li>
+<li><a href="mmap.html">Memory-Mapped I/O</a></li>
+<li><a href="mostdeployed.html">Most Widely Deployed SQL Database Engine</a></li>
+<li><a href="nulinstr.html">NUL Characters In Strings</a></li>
+<li><a href="nulls.html">NULL Handling in SQLite</a></li>
+<li><a href="partialindex.html">Partial Indexes</a></li>
+<li><a href="bindptr.html">Pointer Passing Interfaces</a></li>
+<li><a href="psow.html">Powersafe Overwrite</a></li>
+<li><a href="pragma.html">Pragma statements supported by SQLite</a></li>
+<li><a href="qmplan.html">Quality Management</a></li>
+<li><a href="lang.html">Query Language Understood by SQLite</a></li>
+<li><a href="queryplanner.html">Query Planning</a></li>
+<li><a href="quirks.html">Quirks, Caveats, and Gotchas In SQLite</a></li>
+<li><a href="news.html">Recent SQLite News</a></li>
+<li><a href="recovery.html">Recovering Data From A Corrupt SQLite Database</a></li>
+<li><a href="lang_reindex.html">REINDEX</a></li>
+<li><a href="changes.html">Release History Of SQLite</a></li>
+<li><a href="lang_replace.html">REPLACE</a></li>
+<li><a href="rescode.html">Result and Error Codes</a></li>
+<li><a href="lang_returning.html">RETURNING</a></li>
+<li><a href="rowvalue.html">Row Values</a></li>
+<li><a href="rowidtable.html">Rowid Tables</a></li>
+<li><a href="loadext.html">Run-Time Loadable Extensions</a></li>
+<li><a href="lang_savepoint.html">Savepoints</a></li>
+<li><a href="lang_select.html">SELECT</a></li>
+<li><a href="lang_comment.html">SQL Comment Syntax</a></li>
+<li><a href="omitted.html">SQL Features That SQLite Does Not Implement</a></li>
+<li><a href="lang_expr.html">SQL Language Expressions</a></li>
+<li><a href="sqldiff.html">sqldiff.exe: Database Difference Utility</a></li>
+<li><a href="sqlar.html">SQLite Archive Files</a></li>
+<li><a href="https://sqlite.org/sqlar/">SQLite Archiver (sqlar.exe)</a></li>
+<li><a href="appfileformat.html">SQLite As An Application File Format</a></li>
+<li><a href="autoinc.html">SQLite Autoincrement</a></li>
+<li><a href="backup.html">SQLite Backup API</a></li>
+<li><a href="34to35.html">SQLite Changes From Version 3.4.2 To 3.5.0</a></li>
+<li><a href="35to36.html">SQLite Changes From Version 3.5.9 To 3.6.0</a></li>
+<li><a href="consortium.html">SQLite Consortium</a></li>
+<li><a href="copyright.html">SQLite Copyright</a></li>
+<li><a href="speed.html">SQLite Database Speed Comparison</a></li>
+<li><a href="crew.html">SQLite Developers</a></li>
+<li><a href="docs.html">SQLite Documentation</a></li>
+<li><a href="download.html">SQLite Download Page</a></li>
+<li><a href="foreignkeys.html">SQLite Foreign Key Support</a></li>
+<li><a href="faq.html">SQLite Frequently Asked Questions</a></li>
+<li><a href="fts3.html">SQLite FTS3 and FTS4 Extensions</a></li>
+<li><a href="fts5.html">SQLite FTS5 Extension</a></li>
+<li><a href="index.html">SQLite Home Page</a></li>
+<li><a href="quickstart.html">SQLite In 5 Minutes Or Less</a></li>
+<li><a href="selfcontained.html">SQLite is a Self Contained System</a></li>
+<li><a href="serverless.html">SQLite Is Serverless</a></li>
+<li><a href="transactional.html">SQLite Is Transactional</a></li>
+<li><a href="lang_keywords.html">SQLite Keywords</a></li>
+<li><a href="footprint.html">SQLite Library Footprint</a></li>
+<li><a href="oldnews.html">SQLite Older News</a></li>
+<li><a href="useovernet.html">SQLite Over a Network, Caveats and Considerations</a></li>
+<li><a href="prosupport.html">SQLite Pro Support</a></li>
+<li><a href="requirements.html">SQLite Requirements</a></li>
+<li><a href="session.html">SQLite Session Module C/C++ Interface</a></li>
+<li><a href="sharedcache.html">SQLite Shared-Cache Mode</a></li>
+<li><a href="sitemap.html">SQLite Site Map</a></li>
+<li><a href="support.html">SQLite Support Options</a></li>
+<li><a href="unlock_notify.html">SQLite Unlock-Notify API</a></li>
+<li><a href="version3.html">SQLite Version 3 Overview</a></li>
+<li><a href="printf.html">SQLite's Built-in printf()</a></li>
+<li><a href="onefile.html">SQLite: Single File Database</a></li>
+<li><a href="stricttables.html">STRICT Tables</a></li>
+<li><a href="swarmvtab.html">Swarmvtab Virtual Table</a></li>
+<li><a href="syntaxdiagrams.html">Syntax Diagrams For SQLite</a></li>
+<li><a href="https://system.data.sqlite.org/">System.Data.SQLite</a></li>
+<li><a href="tempfiles.html">Temporary Files Used By SQLite</a></li>
+<li><a href="th3.html">TH3</a></li>
+<li><a href="flextypegood.html">The Advantages Of Flexible Typing</a></li>
+<li><a href="bytecodevtab.html">The Bytecode() And Tables_Used() Table-Valued Functions</a></li>
+<li><a href="c_interface.html">The C language interface to SQLite Version 2</a></li>
+<li><a href="carray.html">The Carray() Table-Valued Function</a></li>
+<li><a href="cksumvfs.html">The Checksum VFS Shim</a></li>
+<li><a href="completion.html">The COMPLETION() Table-Valued Function</a></li>
+<li><a href="csv.html">The CSV Virtual Table</a></li>
+<li><a href="dbhash.html">The dbhash.exe Utility Program</a></li>
+<li><a href="dbstat.html">The DBSTAT Virtual Table</a></li>
+<li><a href="errlog.html">The Error And Warning Log</a></li>
+<li><a href="https://www.fossil-scm.org/">The Fossil Version Control System</a></li>
+<li><a href="series.html">The generate_series Table-Valued Function</a></li>
+<li><a href="geopoly.html">The Geopoly Interface To The SQLite R*Tree Module</a></li>
+<li><a href="lang_indexedby.html">The INDEXED BY Clause</a></li>
+<li><a href="lemon.html">The Lemon LALR(1) Parser Generator</a></li>
+<li><a href="queryplanner-ng.html">The Next-Generation Query Planner</a></li>
+<li><a href="lang_conflict.html">The ON CONFLICT Clause</a></li>
+<li><a href="rbu.html">The RBU Extension</a></li>
+<li><a href="schematab.html">The Schema Table</a></li>
+<li><a href="sessionintro.html">The Session Extension</a></li>
+<li><a href="spellfix1.html">The Spellfix1 Virtual Table</a></li>
+<li><a href="amalgamation.html">The SQLite Amalgamation</a></li>
+<li><a href="opcode.html">The SQLite Bytecode Engine</a></li>
+<li><a href="vfs.html">The SQLite OS Interface or "VFS"</a></li>
+<li><a href="optoverview.html">The SQLite Query Optimizer Overview</a></li>
+<li><a href="rtree.html">The SQLite R*Tree Module</a></li>
+<li><a href="zipfile.html">The SQLite Zipfile Module</a></li>
+<li><a href="sqlanalyze.html">The sqlite3_analyzer.exe Utility Program</a></li>
+<li><a href="dbpage.html">The SQLITE_DBPAGE Virtual Table</a></li>
+<li><a href="memstat.html">The SQLITE_MEMSTAT Virtual Table</a></li>
+<li><a href="stmt.html">The SQLITE_STMT Virtual Table</a></li>
+<li><a href="tclsqlite.html">The Tcl interface to the SQLite library</a></li>
+<li><a href="uintcseq.html">The UINT Collating Sequence</a></li>
+<li><a href="unionvtab.html">The UNION Virtual Table</a></li>
+<li><a href="assert.html">The Use Of assert() In SQLite</a></li>
+<li><a href="vdbe.html">The Virtual Database Engine of SQLite</a></li>
+<li><a href="vtab.html">The Virtual Table Mechanism Of SQLite</a></li>
+<li><a href="lang_with.html">The WITH Clause</a></li>
+<li><a href="lang_transaction.html">Transaction</a></li>
+<li><a href="uri.html">Uniform Resource Identifiers</a></li>
+<li><a href="lang_update.html">UPDATE</a></li>
+<li><a href="lang_upsert.html">UPSERT</a></li>
+<li><a href="threadsafe.html">Using SQLite In Multi-Threaded Applications</a></li>
+<li><a href="lang_vacuum.html">VACUUM</a></li>
+<li><a href="versionnumbers.html">Version Numbers in SQLite</a></li>
+<li><a href="cves.html">Vulnerabilities</a></li>
+<li><a href="walformat.html">WAL-mode File Format</a></li>
+<li><a href="keyword_index.html">Website Keyword Index</a></li>
+<li><a href="famous.html">Well-Known Users Of SQLite</a></li>
+<li><a href="affcase1.html">What If OpenDocument Used SQLite?</a></li>
+<li><a href="whyc.html">Why Is SQLite Coded In C</a></li>
+<li><a href="whynotgit.html">Why SQLite Does Not Use Git</a></li>
+<li><a href="windowfunctions.html">Window Functions</a></li>
+<li><a href="wal.html">Write-Ahead Logging</a></li>
+<li><a href="zeroconf.html">Zero-Configuration</a></li>
+
+</ol>
+
+
diff --git a/www/docs.html b/www/docs.html
new file mode 100644
index 0000000..54e50c8
--- /dev/null
+++ b/www/docs.html
@@ -0,0 +1,753 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Documentation</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<div class="rightsidebar desktoponly border2px">
+<h3 align="center">Common Links</h3>
+<ul class=nounderline>
+<li> <a href="features.html">Features</a> </li>
+<li> <a href="whentouse.html">When to use SQLite</a> </li>
+<li> <a href="quickstart.html">Getting Started</a> </li>
+<li> <a href="https://sqlite.org/fiddle">Try it live!</li>
+<li> <a href="chronology.html">Prior Releases</a>
+<li> <a href="lang.html">SQL Syntax</a>
+<ul>
+<li> <a href="pragma.html#toc">Pragmas</a>
+<li> <a href="lang_corefunc.html">SQL functions</a>
+<li> <a href="lang_datefunc.html">Date &amp; time functions</a>
+<li> <a href="lang_aggfunc.html#aggfunclist">Aggregate functions</a>
+<li> <a href="windowfunctions.html#biwinfunc">Window functions</a>
+<li> <a href="lang_mathfunc.html">Math functions</a>
+<li> <a href="json1.html">JSON functions</a>
+</ul>
+</li>
+<li> <a href="c3ref/intro.html">C/C++ Interface Spec</a>
+<ul>
+<li> <a href="cintro.html">Introduction</a>
+<li> <a href="c3ref/funclist.html">List of C-language APIs</a>
+</ul>
+</li>
+<li> <a href="tclsqlite.html">The TCL Interface Spec</a>
+<li> <a href="quirks.html">Quirks and Gotchas</a> </li>
+<li> <a href="faq.html">Frequently Asked Questions</a> </li>
+<li> <a href="http://www.sqlite.org/src/timeline?n=100&y=ci">Commit History</a> </li>
+<li> <a href="http://www.sqlite.org/src/wiki?name=Bug+Reports">Bugs</a> </li>
+<li> <a href="news.html">News</a> </li>
+</ul>
+
+</div>
+
+<h2 align="center">Documentation</h1>
+<div class="docsearch" id="docsearch">
+ <form method="GET" action="./search">
+ <select name="s" id="searchtype">
+ <option value="d">Search Documentation</option>
+ <option value="c">Search Changelog</option>
+ </select>
+ <input type="text" name="q" id="searchbox">
+ <input type="submit" value="Go">
+ </form>
+</div>
+<style>
+.showhide {
+ margin-left: 0;
+ padding-left: 0;
+ list-style-type: none;
+}
+.showhide > li {
+ padding-left: 1em;
+ text-indent: -1em;
+}
+.showhide > li li {
+ padding-left: 0;
+ text-indent: 0;
+ padding-top: 1ex;
+ padding-bottom: 1ex;
+}
+.showhide ul {
+ display: none;
+ list-style-type: disc;
+}
+.showhide > li > a {
+ text-decoration: none;
+ color: black;
+ cursor: pointer;
+}
+.sh_mark {
+ float: left;
+ width: 1em;
+}
+.sh_link {
+ font-weight: bold;
+}
+.docsearch {
+ margin: auto;
+ width: 450px;
+ padding-bottom: 1.5em;
+}
+</style>
+<script>
+function showhide(n){
+ var ul = document.getElementById("sh_sub_"+n)
+ var mk = document.getElementById("sh_mark_"+n)
+ if( ul.style.display!="block" ){
+ ul.style.display = "block";
+ mk.innerHTML = "&#x25bc;";
+ } else {
+ ul.style.display = "none";
+ mk.innerHTML = "&#x25ba;";
+ }
+}
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+ document.getElementById("docsearch").style.display = "none";
+}
+</script>
+
+<ul class="showhide">
+<li><a onclick='showhide(1)'><span class='sh_mark' id='sh_mark_1'>&#x25bc;</span> Document Lists And Indexes</a>
+<ul id='sh_sub_1' style='display:block;'>
+<li><a class='sh_link' href='doclist.html'>Alphabetical Listing Of All Documents</a>
+<li><a class='sh_link' href='keyword_index.html'>Website Keyword Index</a>
+<li><a class='sh_link' href='sitemap.html#pindex'>Permuted Title Index</a>
+</ul>
+<li><a onclick='showhide(2)'><span class='sh_mark' id='sh_mark_2'>&#x25ba;</span> Overview Documents</a>
+<ul id='sh_sub_2'>
+<li><a class='sh_link' href='about.html'>About SQLite</a>
+<span class='desktoponly'>&rarr;
+ A high-level overview of what SQLite is and why you might be
+ interested in using it.
+</span>
+<li><a class='sh_link' href='whentouse.html'>Appropriate Uses For SQLite</a>
+<span class='desktoponly'>&rarr;
+ This document describes situations where SQLite is an appropriate
+ database engine to use versus situations where a client/server
+ database engine might be a better choice.
+</span>
+<li><a class='sh_link' href='different.html'>Distinctive Features</a>
+<span class='desktoponly'>&rarr;
+ This document enumerates and describes some of the features of
+ SQLite that make it different from other SQL database engines.
+</span>
+<li><a class='sh_link' href='quirks.html'>Quirks of SQLite</a>
+<span class='desktoponly'>&rarr;
+ This document is a short list of some unusual features of SQLite
+ that tend to cause misunderstandings and confusion. The list includes
+ both deliberate innovations and "misfeatures" that are retained only
+ for backwards compatibility.
+</span>
+<li><a class='sh_link' href='testing.html'>How SQLite Is Tested</a>
+<span class='desktoponly'>&rarr;
+ The reliability and robustness of SQLite is achieved in large part
+ by thorough and careful testing. This document identifies the
+ many tests that occur before every release of SQLite.
+</span>
+<li><a class='sh_link' href='copyright.html'>Copyright</a>
+<span class='desktoponly'>&rarr;
+ SQLite is in the public domain. This document describes what that means
+ and the implications for contributors.
+</span>
+<li><a class='sh_link' href='faq.html'>Frequently Asked Questions</a>
+<span class='desktoponly'>&rarr;
+ The title of the document says all...
+</span>
+<li><a class='sh_link' href='books.html'>Books About SQLite</a>
+<span class='desktoponly'>&rarr;
+ A list of independently written books about SQLite.
+</span>
+</ul>
+<li><a onclick='showhide(3)'><span class='sh_mark' id='sh_mark_3'>&#x25ba;</span> Programming Interfaces</a>
+<ul id='sh_sub_3'>
+<li><a class='sh_link' href='quickstart.html'>SQLite In 5 Minutes Or Less</a>
+<span class='desktoponly'>&rarr;
+ A very quick introduction to programming with SQLite.
+</span>
+<li><a class='sh_link' href='cintro.html'>Introduction to the C/C++ API </a>
+<span class='desktoponly'>&rarr;
+ This document introduces the C/C++ API. Users should read this document
+ before the C/C++ API Reference Guide linked below.
+</span>
+<li><a class='sh_link' href='howtocompile.html'>How To Compile SQLite</a>
+<span class='desktoponly'>&rarr;
+ Instructions and hints for compiling SQLite C code and integrating
+ that code with your own application.
+</span>
+<li><a class='sh_link' href='c3ref/intro.html'>C/C++ API Reference</a>
+<span class='desktoponly'>&rarr;
+ This document describes each API function separately.
+</span>
+<li><a class='sh_link' href='rescode.html'>Result and Error Codes</a>
+<span class='desktoponly'>&rarr;
+ A description of the meanings of the numeric result codes
+ returned by various C/C++ interfaces.
+</span>
+<li><a class='sh_link' href='lang.html'>SQL Syntax</a>
+<span class='desktoponly'>&rarr;
+ This document describes the SQL language that is understood by
+ SQLite.
+</span>
+<li><a class='sh_link' href='pragma.html'>Pragma commands</a>
+<span class='desktoponly'>&rarr;
+ This document describes SQLite performance tuning options and other
+ special purpose database commands.
+</span>
+<li><a class='sh_link' href='lang_corefunc.html'>Core SQL Functions</a>
+<span class='desktoponly'>&rarr;
+ General-purpose built-in scalar SQL functions.
+</span>
+<li><a class='sh_link' href='lang_aggfunc.html'>Aggregate SQL Functions</a>
+<span class='desktoponly'>&rarr;
+ General-purpose built-in aggregate SQL functions.
+</span>
+<li><a class='sh_link' href='lang_datefunc.html'>Date and Time SQL Functions</a>
+<span class='desktoponly'>&rarr;
+ SQL functions for manipulating dates and times.
+</span>
+<li><a class='sh_link' href='windowfunctions.html'>Window Functions</a>
+<span class='desktoponly'>&rarr;
+ SQL Window functions.
+</span>
+<li><a class='sh_link' href='gencol.html'>Generated Columns</a>
+<span class='desktoponly'>&rarr;
+ Stored and virtual columns in table definitions.
+</span>
+<li><a class='sh_link' href='http://system.data.sqlite.org/'>System.Data.SQLite</a>
+<span class='desktoponly'>&rarr;
+ C#/.NET bindings for SQLite
+</span>
+<li><a class='sh_link' href='tclsqlite.html'>Tcl API</a>
+<span class='desktoponly'>&rarr;
+ A description of the TCL interface bindings for SQLite.
+</span>
+<li><a class='sh_link' href='datatype3.html'>DataTypes</a>
+<span class='desktoponly'>&rarr;
+ SQLite version 3 introduces the concept of manifest typing, where the
+ type of a value is associated with the value itself, not the column that
+ it is stored in.
+ This page describes data typing for SQLite version 3 in further detail.
+</span>
+</ul>
+<li><a onclick='showhide(4)'><span class='sh_mark' id='sh_mark_4'>&#x25ba;</span> Extensions</a>
+<ul id='sh_sub_4'>
+<li><a class='sh_link' href='json1.html'>Json1 - JSON Integration</a>
+<span class='desktoponly'>&rarr;
+ SQL functions for creating, parsing, and querying JSON content.
+</span>
+<li><a class='sh_link' href='fts5.html'>FTS5 - Full Text Search</a>
+<span class='desktoponly'>&rarr;
+ A description of the SQLite Full Text Search (FTS5) extension.
+</span>
+<li><a class='sh_link' href='fts3.html'>FTS3 - Full Text Search</a>
+<span class='desktoponly'>&rarr;
+ A description of the SQLite Full Text Search (FTS3) extension.
+</span>
+<li><a class='sh_link' href='rtree.html'>R-Tree Module</a>
+<span class='desktoponly'>&rarr;
+ A description of the SQLite R-Tree extension. An R-Tree is a specialized
+ data structure that supports fast multi-dimensional range queries often
+ used in geospatial systems.
+</span>
+<li><a class='sh_link' href='sessionintro.html'>Sessions</a>
+<span class='desktoponly'>&rarr;
+ The Sessions extension allows change to an SQLite database to be
+ captured in a compact file which can be reverted on the original
+ database (to implement "undo") or transferred and applied to another
+ similar database.
+</span>
+<li><a class='sh_link' href='loadext.html'>Run-Time Loadable Extensions</a>
+<span class='desktoponly'>&rarr;
+ A general overview on how run-time loadable extensions work, how they
+ are compiled, and how developers can create their own run-time loadable
+ extensions for SQLite.
+</span>
+<li><a class='sh_link' href='http://sqlite.org/android/'>SQLite Android Bindings</a>
+<span class='desktoponly'>&rarr;
+ Information on how to deploy your own private copy of SQLite on
+ Android, bypassing the built-in SQLite, but using the same Java
+ interface.
+</span>
+<li><a class='sh_link' href='dbstat.html'>Dbstat Virtual Table</a>
+<span class='desktoponly'>&rarr;
+ The DBSTAT virtual table reports on the sizes and geometries of tables
+ storing content in an SQLite database, and is the basis for the
+ [sqlite3_analyzer] utility program.
+</span>
+<li><a class='sh_link' href='csv.html'>Csv Virtual Table</a>
+<span class='desktoponly'>&rarr;
+ The CSV virtual table allows SQLite to directly read and query
+ [https://www.ietf.org/rfc/rfc4180.txt|RFC 4180] formatted files.
+</span>
+<li><a class='sh_link' href='carray.html'>Carray</a>
+<span class='desktoponly'>&rarr;
+ CARRAY is a [table-valued function] that allows C-language arrays to
+ be used in SQL queries.
+</span>
+<li><a class='sh_link' href='series.html'>generate_series</a>
+<span class='desktoponly'>&rarr;
+ A description of the generate_series() [table-valued function].
+</span>
+<li><a class='sh_link' href='spellfix1.html'>Spellfix1</a>
+<span class='desktoponly'>&rarr;
+ The spellfix1 extension is an experiment in doing spelling correction
+ for [full-text search].
+</span>
+</ul>
+<li><a onclick='showhide(5)'><span class='sh_mark' id='sh_mark_5'>&#x25ba;</span> Features</a>
+<ul id='sh_sub_5'>
+<li><a class='sh_link' href='shortnames.html'>8+3 Filenames</a>
+<span class='desktoponly'>&rarr;
+ How to make SQLite work on filesystems that only support
+ 8+3 filenames.
+</span>
+<li><a class='sh_link' href='autoinc.html'>Autoincrement</a>
+<span class='desktoponly'>&rarr;
+ A description of the AUTOINCREMENT keyword in SQLite, what it does,
+ why it is sometimes useful, and why it should be avoided if not
+ strictly necessary.
+</span>
+<li><a class='sh_link' href='backup.html'>Backup API</a>
+<span class='desktoponly'>&rarr;
+ The [sqlite3_backup_init | online-backup interface] can be used to
+ copy content from a disk file into an in-memory database or vice
+ versa and it can make a hot backup of a live database. This application
+ note gives examples of how.
+</span>
+<li><a class='sh_link' href='errlog.html'>Error and Warning Log</a>
+<span class='desktoponly'>&rarr;
+ SQLite supports an "error and warning log" design to capture information
+ about suspicious and/or error events during operation. Embedded applications
+ are encouraged to enable the error and warning log to help with debugging
+ application problems that arise in the field. This document explains how
+ to do that.
+</span>
+<li><a class='sh_link' href='foreignkeys.html'>Foreign Key Support</a>
+<span class='desktoponly'>&rarr;
+ This document describes the support for foreign key constraints introduced
+ in version 3.6.19.
+</span>
+<li><a class='sh_link' href='expridx.html'>Indexes On Expressions</a>
+<span class='desktoponly'>&rarr;
+ Notes on how to create indexes on expressions instead of just
+ individual columns.
+</span>
+<li><a class='sh_link' href='intern-v-extern-blob.html'>Internal versus External Blob Storage</a>
+<span class='desktoponly'>&rarr;
+ Should you store large BLOBs directly in the database, or store them
+ in files and just record the filename in the database? This document
+ seeks to shed light on that question.
+</span>
+<li><a class='sh_link' href='limits.html'>Limits In SQLite</a>
+<span class='desktoponly'>&rarr;
+ This document describes limitations of SQLite (the maximum length of a
+ string or blob, the maximum size of a database, the maximum number of
+ tables in a database, etc.) and how these limits can be altered at
+ compile-time and run-time.
+</span>
+<li><a class='sh_link' href='mmap.html'>Memory-Mapped I/O</a>
+<span class='desktoponly'>&rarr;
+ SQLite supports memory-mapped I/O. Learn how to enable memory-mapped
+ I/O and about the various advantages and disadvantages to using
+ memory-mapped I/O in this document.
+</span>
+<li><a class='sh_link' href='threadsafe.html'>Multi-threaded Programs and SQLite</a>
+<span class='desktoponly'>&rarr;
+ SQLite is safe to use in multi-threaded programs. This document
+ provides the details and hints on how to maximize performance.
+</span>
+<li><a class='sh_link' href='nulls.html'>Null Handling</a>
+<span class='desktoponly'>&rarr;
+ Different SQL database engines handle NULLs in different ways. The
+ SQL standards are ambiguous. This (circa 2003) document describes
+ how SQLite handles NULLs in comparison with other SQL database engines.
+</span>
+<li><a class='sh_link' href='partialindex.html'>Partial Indexes</a>
+<span class='desktoponly'>&rarr;
+ A partial index is an index that only covers a subset of the rows in
+ a table. Learn how to use partial indexes in SQLite from this document.
+</span>
+<li><a class='sh_link' href='sharedcache.html'>Shared Cache Mode</a>
+<span class='desktoponly'>&rarr;
+ Version 3.3.0 and later supports the ability for two or more
+ database connections to share the same page and schema cache.
+ This feature is useful for certain specialized applications.
+</span>
+<li><a class='sh_link' href='unlock_notify.html'>Unlock Notify</a>
+<span class='desktoponly'>&rarr;
+ The "unlock notify" feature can be used in conjunction with
+ [shared cache mode] to more efficiently manage resource conflict (database
+ table locks).
+</span>
+<li><a class='sh_link' href='uri.html'>URI Filenames</a>
+<span class='desktoponly'>&rarr;
+ The names of database files can be specified using either an ordinary
+ filename or a URI. Using URI filenames provides additional capabilities,
+ as this document describes.
+</span>
+<li><a class='sh_link' href='withoutrowid.html'>WITHOUT ROWID Tables</a>
+<span class='desktoponly'>&rarr;
+ The WITHOUT ROWID optimization is a option that can sometimes result
+ in smaller and faster databases.
+</span>
+<li><a class='sh_link' href='wal.html'>Write-Ahead Log (WAL) Mode</a>
+<span class='desktoponly'>&rarr;
+ Transaction control using a write-ahead log offers more concurrency and
+ is often faster than the default rollback transactions. This document
+ explains how to use WAL mode for improved performance.
+</span>
+</ul>
+<li><a onclick='showhide(6)'><span class='sh_mark' id='sh_mark_6'>&#x25ba;</span> Tools</a>
+<ul id='sh_sub_6'>
+<li><a class='sh_link' href='cli.html'>Command-Line Shell (sqlite3.exe)</a>
+<span class='desktoponly'>&rarr;
+ Notes on using the "sqlite3.exe" command-line interface that
+ can be used to create, modify, and query arbitrary SQLite
+ database files.
+</span>
+<li><a class='sh_link' href='sqlanalyze.html'>SQLite Database Analyzer (sqlite3_analyzer.exe)</a>
+<span class='desktoponly'>&rarr;
+ This stand-alone program reads an SQLite database and outputs a file
+ showing the space used by each table and index and other statistics.
+ Built using the [dbstat virtual table].
+</span>
+<li><a class='sh_link' href='rbu.html'>RBU</a>
+<span class='desktoponly'>&rarr;
+ The "Resumable Bulk Update" utility program allows a batch of changes
+ to be applied to a remote database running on embedded hardware in a
+ way that is resumeable and does not interrupt ongoing operation.
+</span>
+<li><a class='sh_link' href='sqldiff.html'>SQLite Database Diff (sqldiff.exe)</a>
+<span class='desktoponly'>&rarr;
+ This stand-alone program compares two SQLite database files and
+ outputs the SQL needed to convert one into the other.
+</span>
+<li><a class='sh_link' href='dbhash.html'>Database Hash (dbhash.exe)</a>
+<span class='desktoponly'>&rarr;
+ This program demonstrates how to compute a hash over the content
+ of an SQLite database.
+</span>
+<li><a class='sh_link' href='http://www.fossil-scm.org/'>Fossil</a>
+<span class='desktoponly'>&rarr;
+ The Fossil Version Control System is a distributed VCS designed specifically
+ to support SQLite development. Fossil uses SQLite as for storage.
+</span>
+<li><a class='sh_link' href='http://www.sqlite.org/sqlar/'>SQLite Archiver (sqlar.exe)</a>
+<span class='desktoponly'>&rarr;
+ A ZIP-like archive program that uses SQLite for storage.
+</span>
+</ul>
+<li><a onclick='showhide(7)'><span class='sh_mark' id='sh_mark_7'>&#x25ba;</span> Advocacy</a>
+<ul id='sh_sub_7'>
+<li><a class='sh_link' href='appfileformat.html'>SQLite As An Application File Format</a>
+<span class='desktoponly'>&rarr;
+ This article advocates using SQLite as an application file format
+ in place of XML or JSON or a "pile-of-file".
+</span>
+<li><a class='sh_link' href='famous.html'>Well Known Users</a>
+<span class='desktoponly'>&rarr;
+ This page lists a small subset of the many thousands of devices
+ and application programs that make use of SQLite.
+</span>
+<li><a class='sh_link' href='fasterthanfs.html'>35% Faster Than The Filesystem</a>
+<span class='desktoponly'>&rarr;
+ This article points out that reading blobs out of an SQLite database
+ is often faster than reading the same blobs from individual files in
+ the filesystem.
+</span>
+</ul>
+<li><a onclick='showhide(8)'><span class='sh_mark' id='sh_mark_8'>&#x25ba;</span> Technical and Design Documentation</a>
+<ul id='sh_sub_8'>
+<li><a class='sh_link' href='howtocorrupt.html'>How Database Corruption Can Occur</a>
+<span class='desktoponly'>&rarr;
+ SQLite is highly resistant to database corruption. But application,
+ OS, and hardware bugs can still result in corrupt database files.
+ This article describes many of the ways that SQLite database files
+ can go corrupt.
+</span>
+<li><a class='sh_link' href='tempfiles.html'>Temporary Files Used By SQLite</a>
+<span class='desktoponly'>&rarr;
+ SQLite can potentially use many different temporary files when
+ processing certain SQL statements. This document describes the
+ many kinds of temporary files that SQLite uses and offers suggestions
+ for avoiding them on systems where creating a temporary file is an
+ expensive operation.
+</span>
+<li><a class='sh_link' href='inmemorydb.html'>In-Memory Databases</a>
+<span class='desktoponly'>&rarr;
+ SQLite normally stores content in a disk file. However, it can also
+ be used as an in-memory database engine. This document explains how.
+</span>
+<li><a class='sh_link' href='atomiccommit.html'>How SQLite Implements Atomic Commit</a>
+<span class='desktoponly'>&rarr;
+ A description of the logic within SQLite that implements
+ transactions with atomic commit, even in the face of power
+ failures.
+</span>
+<li><a class='sh_link' href='malloc.html'>Dynamic Memory Allocation in SQLite</a>
+<span class='desktoponly'>&rarr;
+ SQLite has a sophisticated memory allocation subsystem that can be
+ configured and customized to meet memory usage requirements of the
+ application and that is robust against out-of-memory conditions and
+ leak-free. This document provides the details.
+</span>
+<li><a class='sh_link' href='custombuild.html'>Customizing And Porting SQLite</a>
+<span class='desktoponly'>&rarr;
+ This document explains how to customize the build of SQLite and
+ how to port SQLite to new platforms.
+</span>
+<li><a class='sh_link' href='lockingv3.html'>Locking And Concurrency<br>In SQLite Version 3</a>
+<span class='desktoponly'>&rarr;
+ A description of how the new locking code in version 3 increases
+ concurrency and decreases the problem of writer starvation.
+</span>
+<li><a class='sh_link' href='isolation.html'>Isolation In SQLite</a>
+<span class='desktoponly'>&rarr;
+ When we say that SQLite transactions are "serializable" what exactly
+ does that mean? How and when are changes made visible within the
+ same database connection and to other database connections?
+</span>
+<li><a class='sh_link' href='optoverview.html'>Overview Of The Optimizer</a>
+<span class='desktoponly'>&rarr;
+ A quick overview of the various query optimizations that are
+ attempted by the SQLite code generator.
+</span>
+<li><a class='sh_link' href='queryplanner-ng.html'>The Next-Generation Query Planner</a>
+<span class='desktoponly'>&rarr;
+ Additional information about the SQLite query planner, and in particular
+ the redesign of the query planner that occurred for version 3.8.0.
+</span>
+<li><a class='sh_link' href='arch.html'>Architecture</a>
+<span class='desktoponly'>&rarr;
+ An architectural overview of the SQLite library, useful for those who want
+ to hack the code.
+</span>
+<li><a class='sh_link' href='opcode.html'>VDBE Opcodes</a>
+<span class='desktoponly'>&rarr;
+ This document is an automatically generated description of the various
+ opcodes that the VDBE understands. Programmers can use this document as
+ a reference to better understand the output of EXPLAIN listings from
+ SQLite.
+</span>
+<li><a class='sh_link' href='vfs.html'>Virtual Filesystem</a>
+<span class='desktoponly'>&rarr;
+ The "VFS" object is the interface between the SQLite core and the
+ underlying operating system. Learn more about how the VFS object
+ works and how to create new VFS objects from this article.
+</span>
+<li><a class='sh_link' href='vtab.html'>Virtual Tables</a>
+<span class='desktoponly'>&rarr;
+ This article describes the virtual table mechanism and API in SQLite and how
+ it can be used to add new capabilities to the core SQLite library.
+</span>
+<li><a class='sh_link' href='fileformat2.html'>SQLite File Format</a>
+<span class='desktoponly'>&rarr;
+ A description of the format used for SQLite database and journal files, and
+ other details required to create software to read and write SQLite
+ databases without using SQLite.
+</span>
+<li><a class='sh_link' href='compile.html'>Compilation Options</a>
+<span class='desktoponly'>&rarr;
+ This document describes the compile time options that may be set to
+ modify the default behavior of the library or omit optional features
+ in order to reduce binary size.
+</span>
+<li><a class='sh_link' href='https://sqlite.org/android/'>Android Bindings for SQLite</a>
+<span class='desktoponly'>&rarr;
+ A description of how to compile your own SQLite for Android
+ (bypassing the SQLite that is built into Android) together with
+ code and makefiles.
+</span>
+<li><a class='sh_link' href='debugging.html'>Debugging Hints</a>
+<span class='desktoponly'>&rarr;
+ A list of tricks and techniques used to trace, examine, and understand
+ the operation of the core SQLite library.
+</span>
+</ul>
+<li><a onclick='showhide(9)'><span class='sh_mark' id='sh_mark_9'>&#x25ba;</span> Upgrading SQLite, Backwards Compatibility</a>
+<ul id='sh_sub_9'>
+<li><a class='sh_link' href='35to36.html'>Moving From SQLite 3.5 to 3.6</a>
+<span class='desktoponly'>&rarr;
+ A document describing the differences between SQLite version 3.5.9
+ and 3.6.0.
+</span>
+<li><a class='sh_link' href='34to35.html'>Moving From SQLite 3.4 to 3.5</a>
+<span class='desktoponly'>&rarr;
+ A document describing the differences between SQLite version 3.4.2
+ and 3.5.0.
+</span>
+<li><a class='sh_link' href='changes.html'>Release History</a>
+<span class='desktoponly'>&rarr;
+ A chronology of SQLite releases going back to version 1.0.0
+</span>
+<li><a class='sh_link' href='formatchng.html'>Backwards Compatibility</a>
+<span class='desktoponly'>&rarr;
+ This document details all of the incompatible changes to the SQLite
+ file format that have occurred since version 1.0.0.
+</span>
+<li><a class='sh_link' href='privatebranch.html'>Private Branches</a>
+<span class='desktoponly'>&rarr;
+ This document suggests procedures for maintaining a private branch
+ or fork of SQLite and keeping that branch or fork in sync with the
+ public SQLite source tree.
+</span>
+</ul>
+<li><a onclick='showhide(10)'><span class='sh_mark' id='sh_mark_10'>&#x25ba;</span> Obsolete Documents</a>
+<ul id='sh_sub_10'>
+<li><a class='sh_link' href='asyncvfs.html'>Asynchronous IO Mode</a>
+<span class='desktoponly'>&rarr;
+ This page describes the asynchronous IO extension developed alongside
+ SQLite. Using asynchronous IO can cause SQLite to appear more responsive
+ by delegating database writes to a background thread. <i>NB: This
+ extension is deprecated. [WAL mode] is recommended as a replacement.</i>
+</span>
+<li><a class='sh_link' href='c_interface.html'>Version 2 C/C++ API</a>
+<span class='desktoponly'>&rarr;
+ A description of the C/C++ interface bindings for SQLite through version
+ 2.8
+</span>
+<li><a class='sh_link' href='datatypes.html'>Version 2 DataTypes </a>
+<span class='desktoponly'>&rarr;
+ A description of how SQLite version 2 handles SQL datatypes.
+ Short summary: Everything is a string.
+</span>
+<li><a class='sh_link' href='vdbe.html'>VDBE Tutorial</a>
+<span class='desktoponly'>&rarr;
+ The VDBE is the subsystem within SQLite that does the actual work of
+ executing SQL statements. This page describes the principles of operation
+ for the VDBE in SQLite version 2.7. This is essential reading for anyone
+ who want to modify the SQLite sources.
+</span>
+<li><a class='sh_link' href='version3.html'>SQLite Version 3</a>
+<span class='desktoponly'>&rarr;
+ A summary of the changes between SQLite version 2.8 and SQLite version 3.0.
+</span>
+<li><a class='sh_link' href='capi3.html'>Version 3 C/C++ API</a>
+<span class='desktoponly'>&rarr;
+ A summary of the API related changes between SQLite version 2.8 and
+ SQLite version 3.0.
+</span>
+<li><a class='sh_link' href='speed.html'>Speed Comparison</a>
+<span class='desktoponly'>&rarr;
+ The speed of version 2.7.6 of SQLite is compared against PostgreSQL and
+ MySQL.
+</span>
+</ul>
+
+</ul>
+<br clear="both">
+
+
diff --git a/www/download.html b/www/download.html
new file mode 100644
index 0000000..e2c26e9
--- /dev/null
+++ b/www/download.html
@@ -0,0 +1,226 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Download Page</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+
+<h2>SQLite Download Page</h2>
+<table width="100%" cellpadding="5" cellspacing="0">
+
+
+</table>
+<hr>
+
+<!-- Download product data for scripts to read
+PRODUCT,VERSION,RELATIVE-URL,SIZE-IN-BYTES,SHA3-HASH
+ -->
+
+
+<a name="encoding"></a>
+
+<h3>Build Product Names and Info</h3>
+
+<p>
+Build products are named using one of the following templates:
+
+<ol>
+<li> <b>sqlite-</b>product<b>-</b>version<b>.zip</b>
+<li> <b>sqlite-</b>product<b>-</b>version<b>.tar.gz</b>
+<li> <b>sqlite-</b>product<b>-</b>os<b>-</b>cpu<b>-</b>version<b>.zip</b>
+<li> <b>sqlite-</b>product<b>-</b>date<b>.zip</b>
+</ol>
+
+<p>Templates (1) and (2) are used for source-code products. Template (1) is
+used for generic source-code products and templates (2) is used for source-code
+products that are generally only useful on unix-like platforms. Template (3)
+is used for precompiled binaries products. Template (4) is used for
+unofficial pre-release "snapshots" of source code.
+
+<p>The <i>version</i> is encoded so that filenames sort in order of
+increasing version number when viewed using "ls". For version 3.X.Y the
+filename encoding is 3XXYY00. For branch version 3.X.Y.Z, the encoding is
+3XXYYZZ.
+
+<p>The <i>date</i> in template (4) is of the form: YYYYMMDDHHMM
+
+<p>For convenient, script-driven extraction of the downloadable
+file URLs and associated information, an HTML comment is embedded
+in this page's source. Its first line (sans leading tag) reads:
+<blockquote><b>Download product data for scripts to read</b></blockquote>
+Its subsequent lines comprise a CSV table with this column header:
+<blockquote><b>PRODUCT,VERSION,RELATIVE-URL,SIZE-IN-BYTES,SHA3-HASH</b></blockquote>
+The column header and following data lines have no leading space.
+The PRODUCT column is a constant value ("PRODUCT") for convenient
+regular expression matching. Other columns are self-explanatory.
+This format will remain stable except for possible new columns
+appended to the right of older columns.
+
+<a name="cvs"></a>
+<a name="fossil"></a>
+<a name="srctree"></a>
+
+<h3>Source Code Repositories</h3>
+
+<p>
+The SQLite source code is maintained in three geographically-dispersed
+self-synchronizing
+<a href="http://www.fossil-scm.org/">Fossil</a> repositories that are
+available for anonymous read-only access. Anyone can
+view the repository contents and download historical versions
+of individual files or ZIP archives of historical check-ins.
+You can also <a href="getthecode.html#clone">clone the entire repository</a>.</p>
+
+<p>See the <a href="howtocompile.html">How To Compile SQLite</a> page for additional information
+on how to use the raw SQLite source code.
+Note that a recent version of <a href="http://www.tcl-lang.org/">Tcl</a>
+is required in order to build from the repository sources.
+The <a href="amalgamation.html">amalgamation</a> source code files
+(the "sqlite3.c" and "sqlite3.h" files) build products and are
+not contained in raw source code tree.</p>
+
+<blockquote>
+<a href="https://www.sqlite.org/cgi/src">https://www.sqlite.org/cgi/src</a> (Dallas)<br>
+<a href="https://www2.sqlite.org/cgi/src">https://www2.sqlite.org/cgi/src</a> (Newark)<br>
+<a href="https://www3.sqlite.org/cgi/src">https://www3.sqlite.org/cgi/src</a> (San Francisco)<br>
+</blockquote>
+
+<p>There is a GitHub mirror at
+
+<blockquote>
+<a href="https://github.com/sqlite/sqlite">https://github.com/sqlite/sqlite/</a>
+</blockquote>
+
+<p>The documentation is maintained in separate
+<a href="http://www.fossil-scm.org/">Fossil</a> repositories located
+at:</p>
+
+<blockquote>
+<a href="https://www.sqlite.org/cgi/docsrc">https://www.sqlite.org/cgi/docsrc</a> (Dallas)<br>
+<a href="https://www2.sqlite.org/cgi/docsrc">https://www2.sqlite.org/cgi/docsrc</a> (Newark)<br>
+<a href="https://www3.sqlite.org/cgi/docsrc">https://www3.sqlite.org/cgi/docsrc</a> (San Francisco)<br>
+</blockquote>
+<script type='text/JavaScript'>
+/* <![CDATA[ */
+setTimeout(function(){
+function d391(a,b){document.getElementById(a).href=b;};
+}, 10);
+/* ]]> */
+</script>
+
+
+
diff --git a/www/eqp.html b/www/eqp.html
new file mode 100644
index 0000000..673947b
--- /dev/null
+++ b/www/eqp.html
@@ -0,0 +1,458 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>EXPLAIN QUERY PLAN</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+EXPLAIN QUERY PLAN
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#the_explain_query_plan_command">1. The EXPLAIN QUERY PLAN Command</a></div>
+<div class="fancy-toc2"><a href="#table_and_index_scans">1.1. Table and Index Scans</a></div>
+<div class="fancy-toc2"><a href="#temporary_sorting_b_trees">1.2. Temporary Sorting B-Trees</a></div>
+<div class="fancy-toc2"><a href="#subqueries">1.3. Subqueries</a></div>
+<div class="fancy-toc2"><a href="#compound_queries">1.4. Compound Queries</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+
+<h1 id="the_explain_query_plan_command"><span>1. </span>The EXPLAIN QUERY PLAN Command</h1>
+
+<p style="margin-left:10ex;margin-right:10ex">
+<b>Warning:</b> The data returned by the EXPLAIN QUERY PLAN command is
+intended for interactive debugging only. The output format may change
+between SQLite releases. Applications should not depend on the output
+format of the EXPLAIN QUERY PLAN command.
+
+</p><p style="margin-left:10ex;margin-right:10ex">
+<b>Alert:</b> As warned above, the EXPLAIN QUERY PLAN output format did
+change substantially with the version 3.24.0 release (2018-06-04).
+Additional minor changes occurred in version 3.36.0 (2021-06-18).
+Further changes are possible in subsequent releases.
+
+
+</p><p>The <a href="lang_explain.html">EXPLAIN QUERY PLAN</a> SQL command is used to obtain a high-level
+description of the strategy or plan that SQLite uses to implement a specific
+SQL query. Most significantly, EXPLAIN QUERY PLAN reports on the way in
+which the query uses database indices. This document is a guide to
+understanding and interpreting the EXPLAIN QUERY PLAN output. Background
+information is available separately:
+
+</p><ul>
+<li> A primer on <a href="howitworks.html">How SQLite Works</a>.
+</li><li> Notes on the <a href="optoverview.html">query optimizer</a>.
+</li><li> How <a href="queryplanner.html">indexing</a> works.
+</li><li> The <a href="queryplanner-ng.html">next generation query planner</a>.
+</li></ul>
+
+<p>A query plan is represented as a tree.
+In raw form, as returned by <a href="c3ref/step.html">sqlite3_step()</a>, each node of the tree
+consists of four fields: An integer node id, an integer parent id,
+an auxiliary integer field that is not currently used, and a description
+of the node.
+The entire tree is therefore a table with four columns and zero or more
+rows.
+The <a href="cli.html">command-line shell</a> will usually intercept this table and renders
+it as an ASCII-art graph for more convenient viewing. To disable the
+shells automatic graph rendering and to display EXPLAIN QUERY PLAN
+output in its tabular format, run the command ".explain off" to set
+the "EXPLAIN formatting mode" to off. To restore automatic graph rendering,
+run ".explain auto". You can see the current "EXPLAIN formatting mode"
+setting using the ".show" command.
+
+</p><p>One can also set the <a href="cli.html">CLI</a> into automatic EXPLAIN QUERY PLAN mode
+using the ".eqp on" command:
+
+</p><div class="codeblock"><pre>sqlite&gt; .eqp on
+</pre></div>
+
+<p> In automatic EXPLAIN QUERY PLAN mode, the shell automatically runs
+a separate EXPLAIN QUERY PLAN query for each statement you enter and
+displays the result before actually running the query. Use the
+".eqp off" command to turn automatic EXPLAIN QUERY PLAN mode back off.
+
+</p><p>EXPLAIN QUERY PLAN is most useful on a SELECT statement,
+but may also appear with other statements that read data from database
+tables (e.g. UPDATE, DELETE, INSERT INTO ... SELECT).
+
+</p><h2 id="table_and_index_scans"><span>1.1. </span>Table and Index Scans</h2>
+
+<p>
+ When processing a SELECT (or other) statement, SQLite may retrieve data from
+ database tables in a variety of ways. It may scan through all the records in
+ a table (a full-table scan), scan a contiguous subset of the records in a
+ table based on the rowid index, scan a contiguous subset of the entries in a
+ database <a href="lang_createtable.html">index</a>, or use a combination of the above strategies
+ in a single scan. The various ways in which SQLite may retrieve data from a
+ table or index are described in detail <a href="queryplanner.html#searching">here</a>.
+
+</p><p>
+ For each table read by the query, the output of EXPLAIN QUERY
+ PLAN includes a record for which the value in the "detail" column begins
+ with either "SCAN" or "SEARCH". "SCAN" is used for a full-table scan,
+ including cases where SQLite iterates through all records in a table
+ in an order defined by an index. "SEARCH" indicates that only a subset of
+ the table rows are visited. Each SCAN or SEARCH record includes the
+ following information:
+
+</p><ul>
+ <li> The name of the table, view, or subquery that data is read from.
+ </li><li> Whether or not an index or <a href="optoverview.html#autoindex">automatic index</a> is used.
+ </li><li> Whether or not the <a href="queryplanner.html#covidx">covering index</a> optimization applies.
+ </li><li> Which terms of the WHERE clause are used for indexing.
+</li></ul>
+
+<p>
+ For example, the following EXPLAIN QUERY PLAN command operates on a SELECT
+ statement that is implemented by performing a full-table scan on table t1:
+</p><div class="codeblock"><pre>sqlite&gt; EXPLAIN QUERY PLAN SELECT a, b FROM t1 WHERE a=1;
+QUERY PLAN
+`--SCAN t1
+</pre></div>
+
+<p>
+ The example above shows
+ SQLite picking full-table scan will visit all rows in the table.
+ If the query were able to use an index, then the
+ SCAN/SEARCH record would include the name of the index and, for a
+ SEARCH record, an indication of how the subset of rows visited is
+ identified. For example:
+</p><div class="codeblock"><pre>sqlite&gt; CREATE INDEX i1 ON t1(a);
+sqlite&gt; EXPLAIN QUERY PLAN SELECT a, b FROM t1 WHERE a=1;
+QUERY PLAN
+`--SEARCH t1 USING INDEX i1 (a=?)
+</pre></div>
+
+<p>
+ The previous example, SQLite uses index "i1" to optimize
+ a WHERE clause term of the form (a=?) - in this case "a=1".
+ The previous example could not use a <a href="queryplanner.html#covidx">covering index</a>, but the following
+ example can, and that fact is reflected in the output:
+</p><div class="codeblock"><pre>sqlite&gt; CREATE INDEX i2 ON t1(a, b);
+sqlite&gt; EXPLAIN QUERY PLAN SELECT a, b FROM t1 WHERE a=1;
+QUERY PLAN
+`--SEARCH t1 USING COVERING INDEX i2 (a=?)
+</pre></div>
+
+<p>
+ All joins in SQLite are <a href="optoverview.html#table_order">implemented using nested scans</a>. When a
+ SELECT query that features a join is analyzed using EXPLAIN QUERY PLAN, one
+ SCAN or SEARCH record is output for each nested loop. For example:
+</p><div class="codeblock"><pre>sqlite&gt; EXPLAIN QUERY PLAN SELECT t1.*, t2.* FROM t1, t2 WHERE t1.a=1 AND t1.b>2;
+QUERY PLAN
+|--SEARCH t1 USING INDEX i2 (a=? AND b>?)
+`--SCAN t2
+</pre></div>
+
+<p>
+ The order of the entries indicates the nesting order. In
+ this case, the scan of table t1 using index i2 is the outer loop (since it
+ appears first)
+ and the full-table scan of table t2 is the inner loop (since it appears
+ last).
+ In the following example, the positions of t1 and t2 in the FROM
+ clause of the SELECT are reversed. The query strategy remains the same.
+ The output from EXPLAIN QUERY PLAN shows how the query is actually
+ evaluated, not how it is specified in the SQL statement.
+</p><div class="codeblock"><pre>sqlite&gt; EXPLAIN QUERY PLAN SELECT t1.*, t2.* FROM t2, t1 WHERE t1.a=1 AND t1.b>2;
+QUERY PLAN
+|--SEARCH t1 USING INDEX i2 (a=? AND b>?)
+`--SCAN t2
+</pre></div>
+
+<a name="or-opt"></a>
+
+<p>
+ If the WHERE clause of a query contains an OR expression, then SQLite might
+ use the <a href="queryplanner.html#or_in_where">"OR by union"</a> strategy (also known as the
+ <a href="optoverview.html#or_opt">OR optimization</a>). In this case there will be single top-level record
+ for the search, with two sub-records, one for each index:
+</p><div class="codeblock"><pre>sqlite&gt; CREATE INDEX i3 ON t1(b);
+sqlite&gt; EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=1 OR b=2;
+QUERY PLAN
+`--MULTI-INDEX OR
+ |--SEARCH t1 USING COVERING INDEX i2 (a=?)
+ `--SEARCH t1 USING INDEX i3 (b=?)
+</pre></div>
+
+<h2 id="temporary_sorting_b_trees"><span>1.2. </span>Temporary Sorting B-Trees</h2>
+
+<p>
+ If a SELECT query contains an ORDER BY, GROUP BY or DISTINCT clause,
+ SQLite may need to use a temporary b-tree structure to sort the output
+ rows. Or, it might <a href="queryplanner.html#sorting">use an index</a>. Using an index is
+ almost always much more efficient than performing a sort.
+ If a temporary b-tree is required, a record is added to the EXPLAIN
+ QUERY PLAN output with the "detail" field set to a string value of
+ the form "USE TEMP B-TREE FOR xxx", where xxx is one of "ORDER BY",
+ "GROUP BY" or "DISTINCT". For example:
+
+</p><div class="codeblock"><pre>sqlite&gt; EXPLAIN QUERY PLAN SELECT c, d FROM t2 ORDER BY c;
+QUERY PLAN
+|--SCAN t2
+`--USE TEMP B-TREE FOR ORDER BY
+</pre></div>
+
+<p>
+ In this case using the temporary b-tree can be avoided by creating an index
+ on t2(c), as follows:
+
+</p><div class="codeblock"><pre>sqlite&gt; CREATE INDEX i4 ON t2(c);
+sqlite&gt; EXPLAIN QUERY PLAN SELECT c, d FROM t2 ORDER BY c;
+QUERY PLAN
+`--SCAN t2 USING INDEX i4
+</pre></div>
+
+<h2 id="subqueries"><span>1.3. </span>Subqueries</h2>
+
+<p>
+ In all the examples above, there has only been a single SELECT statement.
+ If a query contains sub-selects, those are shown as being children of
+ the outer SELECT. For example:
+
+</p><div class="codeblock"><pre>sqlite&gt; EXPLAIN QUERY PLAN SELECT (SELECT b FROM t1 WHERE a=0), (SELECT a FROM t1 WHERE b=t2.c) FROM t2;
+|--SCAN TABLE t2 USING COVERING INDEX i4
+|--SCALAR SUBQUERY
+| `--SEARCH t1 USING COVERING INDEX i2 (a=?)
+`--CORRELATED SCALAR SUBQUERY
+ `--SEARCH t1 USING INDEX i3 (b=?)
+</pre></div>
+
+<p>
+ The example above contains two "SCALAR" subqueries. The subqueries
+ are SCALAR in the sense that they return a single value - a one-row,
+ one-column table. If the actual query returns more than that, then
+ only the first column of the first row is used.
+</p><p>
+ The first subquery above is constant with respect to the outer query.
+ The value for the first subquery can be computed once and then reused
+ for each row of the outer SELECT. The second subquery, however, is
+ "CORRELATED". The value of the second subquery changes depending
+ on values in the current row of the outer query. Hence, the second
+ subquery must be run once for each output row in the outer SELECT.
+
+</p><p>
+ Unless the <a href="optoverview.html#flattening">flattening optimization</a> is applied, if a subquery appears in
+ the FROM clause of a SELECT statement, SQLite can either run the subquery and
+ stores the results in a temporary table, or it can run the subquery as a
+ co-routine. The following query is an example of the latter. The subquery
+ is run by a co-routine. The outer query blocks whenever it needs another
+ row of input from the subquery. Control switches to the co-routine which
+ produces the desired output row, then control switches back to the main
+ routine which continues processing.
+
+</p><div class="codeblock"><pre>sqlite&gt; EXPLAIN QUERY PLAN SELECT count(*)
+ &gt; FROM (SELECT max(b) AS x FROM t1 GROUP BY a) AS qqq
+ &gt; GROUP BY x;
+QUERY PLAN
+|--CO-ROUTINE qqq
+| `--SCAN t1 USING COVERING INDEX i2
+|--SCAN qqqq
+`--USE TEMP B-TREE FOR GROUP BY
+</pre></div>
+
+<p>
+
+ If the <a href="optoverview.html#flattening">flattening optimization</a> is used on a subquery in the FROM clause
+ of a SELECT statement, that effectively merges the subquery into the outer
+ query. The output of EXPLAIN QUERY PLAN reflects this, as in the following
+ example:
+
+</p><div class="codeblock"><pre>sqlite&gt; EXPLAIN QUERY PLAN SELECT * FROM (SELECT * FROM t2 WHERE c=1) AS t3, t1;
+QUERY PLAN
+|--SEARCH t2 USING INDEX i4 (c=?)
+`--SCAN t1
+</pre></div>
+
+<p>
+
+ If the content of a subquery might need to be visited more than once, then
+ the use of a co-routine is undesirable, as the co-routine would then have to
+ compute the data more than once. And if the subquery cannot be flattened,
+ that means the subquery must be manifested into a transient table.
+
+</p><div class="codeblock"><pre>sqlite&gt; SELECT * FROM
+ &gt; (SELECT * FROM t1 WHERE a=1 ORDER BY b LIMIT 2) AS x,
+ &gt; (SELECT * FROM t2 WHERE c=1 ORDER BY d LIMIT 2) AS y;
+QUERY PLAN
+|--MATERIALIZE x
+| `--SEARCH t1 USING COVERING INDEX i2 (a=?)
+|--MATERIALIZE y
+| |--SEARCH t2 USING INDEX i4 (c=?)
+| `--USE TEMP B-TREE FOR ORDER BY
+|--SCAN x
+`--SCAN y
+</pre></div>
+
+<h2 id="compound_queries"><span>1.4. </span>Compound Queries</h2>
+
+<p>
+ Each component query of a <a href="lang_select.html#compound">compound query</a> (UNION, UNION ALL, EXCEPT or
+ INTERSECT) is assigned computed separately and is given its own line in
+ the EXPLAIN QUERY PLAN output.
+
+</p><div class="codeblock"><pre>sqlite&gt; EXPLAIN QUERY PLAN SELECT a FROM t1 UNION SELECT c FROM t2;
+QUERY PLAN
+`--COMPOUND QUERY
+ |--LEFT-MOST SUBQUERY
+ | `--SCAN t1 USING COVERING INDEX i1
+ `--UNION USING TEMP B-TREE
+ `--SCAN t2 USING COVERING INDEX i4
+</pre></div>
+
+<p>
+ The "USING TEMP B-TREE" clause in the above output indicates that a
+ temporary b-tree structure is used to implement the UNION of the results
+ of the two sub-selects. An alternative method of computing a compound
+ is to run each subquery as a co-routine, arrange for their outputs to
+ appear in sorted order, and merge the results together. When the query
+ planner chooses this latter approach, the EXPLAIN QUERY PLAN output
+ looks like this:
+
+</p><div class="codeblock"><pre>sqlite&gt; EXPLAIN QUERY PLAN SELECT a FROM t1 EXCEPT SELECT d FROM t2 ORDER BY 1;
+QUERY PLAN
+`--MERGE (EXCEPT)
+ |--LEFT
+ | `--SCAN t1 USING COVERING INDEX i1
+ `--RIGHT
+ |--SCAN t2
+ `--USE TEMP B-TREE FOR ORDER BY
+</pre></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/eqp.in?m=719c38ad7e31ec3d8">2021-03-23 20:19:29</a> UTC </small></i></p>
+
diff --git a/www/errlog.html b/www/errlog.html
new file mode 100644
index 0000000..df9598b
--- /dev/null
+++ b/www/errlog.html
@@ -0,0 +1,312 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Error And Warning Log</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Error And Warning Log
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#setting_up_the_error_logging_callback">1. Setting Up The Error Logging Callback</a></div>
+<div class="fancy-toc1"><a href="#interface_details">2. Interface Details</a></div>
+<div class="fancy-toc1"><a href="#variety_of_error_messages">3. Variety of Error Messages</a></div>
+<div class="fancy-toc1"><a href="#summary">4. Summary</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h2 style="margin-left:1.0em" notoc="1" id="overview"> Overview</h2>
+
+<p>SQLite can be configured to invoke a callback function containing
+an error code and a terse error message whenever anomalies occur.
+This mechanism is very helpful in tracking obscure problems that
+occur rarely and in the field. Application developers are encouraged
+to take advantage of the error logging facility of SQLite in their
+products, as it is very low CPU and memory cost but can be a
+huge aid for debugging.</p>
+
+<h1 id="setting_up_the_error_logging_callback"><span>1. </span>Setting Up The Error Logging Callback</h1>
+
+<p>There can only be a single error logging callback per process.
+The error logging callback is registered at start-time using C-code
+similar to the following:
+
+</p><blockquote><pre>
+<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a>, errorLogCallback, pData);
+</pre></blockquote>
+
+<p>The error logger callback function might look something like this:</p>
+
+<blockquote><pre>
+void errorLogCallback(void *pArg, int iErrCode, const char *zMsg){
+ fprintf(stderr, "(%d) %s\n", iErrCode, zMsg);
+}
+</pre></blockquote>
+
+<p>The example above illustrates the signature of the error logger callback.
+However, in an embedded application, one usually does not print
+messages on stderr. Instead, one might store the messages in a
+preallocated circular buffer where they can be accessed when diagnostic
+information is needed during debugging. Or perhaps the messages can be
+sent to <a href="http://en.wikipedia.org/wiki/Syslog">Syslog</a>. Somehow, the
+messages need to be stored where they are accessible to developers,
+not displayed to end users.</p>
+
+<p>Do not misunderstand: There is nothing technically wrong with displaying
+the error logger messages to end users. The messages do not contain
+sensitive or private information that must be protected from unauthorized
+viewing. Rather the messages are technical in nature and are not useful
+or meaningful to the typical end user. The messages coming from the
+error logger are intended for database geeks. Display them accordingly.</p>
+
+<h1 id="interface_details"><span>2. </span>Interface Details</h1>
+
+<p>The third argument to the <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a>,...)
+interface (the "pData" argument in the example above) is a pointer to arbitrary
+data. SQLite passes this pointer through to the first argument of the
+error logger callback. The pointer can be used to pass application-specific
+setup or state information, if desired. Or it can simply be a NULL
+pointer which is ignored by the callback.</p>
+
+<p>The second argument to the error logger callback is an integer
+<a href="rescode.html#extrc">extended error code</a>. The third argument to the error logger is the
+text of the error message. The error message text is stored in a fixed-length
+stack buffer in the calling function and so will only be valid for the
+duration of the error logger callback function. The error logger should
+make a copy of this message into persistent storage if retention of the
+message is needed.</p>
+
+<p>The error logger callback should be treated like a signal handler.
+The application should save off or otherwise process the error, then return
+as soon as possible. No other SQLite APIs should be invoked, directly or
+indirectly, from the error logger. SQLite is <u>not</u> reentrant through
+the error logger callback. In particular, the error logger callback
+is invoked when a memory allocation fails, so it is generally a bad idea
+to try to allocate memory inside the error logger. Do not even think
+about trying to store the error message in another SQLite database.</p>
+
+<p>Applications can use the <a href="c3ref/log.html">sqlite3_log(E,F,..)</a> API to send new messages
+to the log, if desired, but this is discouraged. The <a href="c3ref/log.html">sqlite3_log()</a>
+interface is intended for use by extensions only, not by applications.</p>
+
+<h1 id="variety_of_error_messages"><span>3. </span>Variety of Error Messages</h1>
+
+<p>The error messages that might be sent to the error logger and their
+exact format is subject to changes from one release to the next. So
+applications should not depend on any particular error message text formats or
+error codes. Things do not change capriciously, but they do sometimes
+changes.</p>
+
+<p>The following is a partial list of the kinds of messages that might
+appear in the error logger callback.</p>
+
+<ul>
+<li><p>
+Any time there is an error either compiling an SQL statement
+(using <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> or its siblings) or running an SQL
+statement (using <a href="c3ref/step.html">sqlite3_step()</a>) that error is logged.
+</p>
+
+</li><li><p>
+When a schema change occurs that requires a prepared statement to be reparsed
+and reprepared, that event is logged with the error code SQLITE_SCHEMA.
+The reparse and reprepare is normally automatic (assuming that
+<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> has been used to prepare the statements originally,
+which is recommended) and so these logging events are normally the only
+way to know that reprepares are taking place.</p>
+
+</li><li><p>
+SQLITE_NOTICE messages are logged whenever a database has to be recovered
+because the previous writer crashed without completing its transaction.
+The error code is SQLITE_NOTICE_RECOVER_ROLLBACK when recovering a
+<a href="lockingv3.html#rollback">rollback journal</a> and SQLITE_NOTICE_RECOVER_WAL when recovering a
+<a href="wal.html">write-ahead log</a>.
+</p>
+
+</li><li><p>
+SQLITE_WARNING messages are logged when database files are renamed or
+aliased in ways that can lead to database corruption.
+(See <a href="howtocorrupt.html#unlink">1</a> and <a href="howtocorrupt.html#alias">2</a> for
+additional information.)
+</p>
+
+</li><li><p>
+Out of memory (OOM) error conditions generate error logging events
+with the SQLITE_NOMEM error code and a message that says how many bytes
+of memory were requested by the failed allocation.
+</p>
+
+</li><li><p>I/O errors in the OS-interface generate error logging events.
+The message to these events gives the line number in the source code where
+the error originated and the filename associated with the event when
+there is a corresponding file. </p>
+
+</li><li><p>When database corruption is detected, an SQLITE_CORRUPT error
+logger callback is invoked. As with I/O errors, the error message text
+contains the line number in the original source code where the error
+was first detected.</p>
+
+</li><li><p>
+An error logger callback is invoked on SQLITE_MISUSE errors.
+This is useful in detecting application design issues when return codes
+are not consistently checked in the application code.
+</p></li></ul>
+
+<p>SQLite strives to keep error logger traffic low and only send messages
+to the error logger when there really is something wrong. Applications
+might further cull the error message traffic
+by deliberately ignoring certain classes of error
+messages that they do not care about. For example, an application that
+makes frequent database schema changes might want to ignore all
+SQLITE_SCHEMA errors.</p>
+
+<h1 id="summary"><span>4. </span>Summary</h1>
+
+<p>The use of the error logger callback is highly recommended.
+The debugging information that the error logger provides has proven
+very useful in tracking down obscure problems that occur with applications
+after they get into the field. The error logger callback has also
+proven useful in catching occasional errors that the application
+misses because of inconsistent checking of API return codes.
+Developers are encouraged to implement an error logger callback early
+in the development cycle in order to spot unexpected behavior quickly,
+and to leave the error logger callback turned on through deployment.
+If the error logger never finds a problem, then no harm is done.
+But failure to set up an appropriate error logger might compromise
+diagnostic capabilities later on.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/errlog.in?m=20f20663c0c242e97">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/expridx.html b/www/expridx.html
new file mode 100644
index 0000000..9221406
--- /dev/null
+++ b/www/expridx.html
@@ -0,0 +1,265 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Indexes On Expressions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Indexes On Expressions
+</div>
+</div>
+
+
+
+
+
+<p>
+Normally, an SQL index references columns of a table. But an index
+can also be formed on expressions involving table columns.
+
+</p><p>
+As an example, consider the following table that tracks
+dollar-amount changes on various "accounts":
+
+</p><div class="codeblock"><pre>CREATE TABLE account_change(
+ chng_id INTEGER PRIMARY KEY,
+ acct_no INTEGER REFERENCES account,
+ location INTEGER REFERENCES locations,
+ amt INTEGER, -- in cents
+ authority TEXT,
+ comment TEXT
+);
+CREATE INDEX acctchng_magnitude ON account_change(acct_no, abs(amt));
+</pre></div>
+
+<p>
+Each entry in the account_change table records a deposit or a withdrawal
+into an account. Deposits have a positive "amt" and withdrawals have
+a negative "amt".
+
+</p><p>
+The acctchng_magnitude index is over the account number ("acct_no") and
+on the absolute value of the amount. This index allows one to do
+efficient queries over the magnitude of a change to the account.
+For example, to list all changes to account number $xyz that are
+more than $100.00, one can say:
+
+
+</p><div class="codeblock"><pre>SELECT * FROM account_change WHERE acct_no=$xyz AND abs(amt)>=10000;
+</pre></div>
+
+<p>
+Or, to list all changes to one particular account ($xyz) in order of
+decreasing magnitude, one can write:
+
+</p><div class="codeblock"><pre>SELECT * FROM account_change WHERE acct_no=$xyz
+ ORDER BY abs(amt) DESC;
+</pre></div>
+
+<p>
+Both of the above example queries would work fine without the
+acctchng_magnitude index.
+The acctchng_magnitude index merely helps the queries to run
+faster, especially on databases where there are many entries in
+the table for each account.
+
+</p><h1 id="how_to_use_indexes_on_expressions"><span>1. </span>How To Use Indexes On Expressions</h1>
+
+<p>
+Use a <a href="lang_createindex.html">CREATE INDEX</a> statement to create a new index on one or more
+expressions just like you would to create an index on columns. The only
+difference is that expressions are listed as the elements to be indexed
+rather than column names.
+
+</p><p>
+The SQLite query planner will consider using an index on an expression
+when the expression that is indexed appears in the WHERE clause or in
+the ORDER BY clause of a query, <i>exactly</i> as it is written in the
+CREATE INDEX statement. The query planner does not do algebra. In order
+to match WHERE clause constraints and ORDER BY terms to indexes, SQLite
+requires that the expressions be the same, except for minor syntactic
+differences such as white-space changes. So if you have:
+
+</p><div class="codeblock"><pre>CREATE TABLE t2(x,y,z);
+CREATE INDEX t2xy ON t2(x+y);
+</pre></div>
+
+<p>
+And then you run the query:
+
+</p><div class="codeblock"><pre>SELECT * FROM t2 WHERE y+x=22;
+</pre></div>
+
+<p>
+Then the index will <u>not</u> be used because
+the expression on the CREATE INDEX
+statement (x+y) is not the same as the expression as it appears in the
+query (y+x). The two expressions might be mathematically equivalent, but
+the SQLite query planner insists that they be the same, not merely
+equivalent. Consider rewriting the query thusly:
+
+</p><div class="codeblock"><pre>SELECT * FROM t2 WHERE x+y=22;
+</pre></div>
+
+<p>
+This second query will likely use the index because now the expression
+in the WHERE clause (x+y) matches the expression in the index exactly.
+
+
+</p><h1 id="restrictions"><span>2. </span>Restrictions</h1>
+
+<p>
+There are certain reasonable restrictions on expressions that appear in
+CREATE INDEX statements:
+
+</p><ol>
+<li><p>
+Expressions in CREATE INDEX statements
+may only refer to columns of the table being indexed, not to
+columns in other tables.
+
+</p></li><li><p>
+Expressions in CREATE INDEX statements
+may contain function calls, but only to functions whose output
+is always determined completely by its input parameters (a.k.a.:
+<a href="deterministic.html">deterministic functions</a>). Obviously, functions like <a href="lang_corefunc.html#random">random()</a> will not
+work well in an index. But also functions like <a href="lang_corefunc.html#sqlite_version">sqlite_version()</a>, though
+they are constant across any one database connection, are not constant
+across the life of the underlying database file, and hence may not be
+used in a CREATE INDEX statement.
+
+</p><p>
+Note that <a href="appfunc.html">application-defined SQL functions</a> are by default considered
+non-deterministic and may not be used in a CREATE INDEX statement unless
+the <a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a> flag is used when the function is registered.
+
+</p></li><li><p>
+Expressions in CREATE INDEX statements may not use subqueries.
+
+</p></li><li><p>
+Expressions may only be used in CREATE INDEX statements, not within
+<a href="lang_createtable.html#uniqueconst">UNIQUE</a> or <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraints within the <a href="lang_createtable.html">CREATE TABLE</a> statement.
+</p></li></ol>
+
+
+<h1 id="compatibility"><span>3. </span>Compatibility</h1>
+
+<p>
+The ability to index expressions was added to SQLite with
+<a href="releaselog/3_9_0.html">version 3.9.0</a> (2015-10-14). A database that uses an index on
+expressions will not be usable by earlier versions of SQLite.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/expridx.in?m=a8d62e3d8bf27950e">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/famous.html b/www/famous.html
new file mode 100644
index 0000000..496da28
--- /dev/null
+++ b/www/famous.html
@@ -0,0 +1,569 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Well-Known Users Of SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h2>Well-Known Users of SQLite</h2>
+
+<p>
+SQLite is used by literally millions of applications
+with literally billions and billions of deployments.
+SQLite is the <a href="mostdeployed.html">most widely deployed</a> database engine in the
+world today.
+
+<p>
+A few of the better-known users of SQLite are shown below
+in alphabetical order.
+This is not a complete list.
+SQLite is in the
+<a href="copyright.html">public domain</a> and so most
+developers use it in their projects without ever telling us.
+</p>
+
+<div class='mobileonly'>
+<hr class='xhr'>
+<center><a href='http://www.adobe.com/' border=0>
+<img src='images/foreignlogos/adobe.gif' width=215></a></center>
+<p>
+ <a href="http://www.adobe.com/">Adobe</a> uses SQLite as the
+ <a href="whentouse.html#appfileformat">application
+ file format</a> for their
+ <a href="http://www.adobe.com/products/photoshoplightroom/">Photoshop Lightroom</a>
+ product.
+ SQLite is also a standard part of the
+ <a href="http://labs.adobe.com/technologies/air/">Adobe Integrated Runtime (AIR)</a>.
+ It is reported that
+ <a href="http://www.adobe.com/products/acrobat/readstep2.html">Acrobat Reader</a>
+ also uses SQLite.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.airbus.com/' border=0>
+<img src='images/foreignlogos/airbus2.gif' width=215></a></center>
+<p>
+ <a href="http://www.airbus.com/">Airbus</a> confirms that SQLite is being
+ used in the flight software for the
+ <a href="http://www.aircraft.airbus.com/aircraftfamilies/passengeraircraft/a350xwbfamily/">A350 XWB</a> family
+ of aircraft.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.apple.com/' border=0>
+<img src='images/foreignlogos/apple.gif' width=215></a></center>
+<p>
+ <a href="http://www.apple.com/">Apple</a> uses SQLite in many (most?) of the
+ native applications running on Mac OS-X desktops and servers and
+ on iOS devices such as iPhones and iPods. SQLite is also used in
+ <a href="http://www.apple.com/itunes/">iTunes</a>, even on non-Apple hardware.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.bentley.com/' border=0>
+<img src='images/foreignlogos/bentley.gif' width=215></a></center>
+<p>
+ <a href="http://www.bentley.com/">Bentley Systems</a> uses SQLite as the
+ <a href="aff_short.html">application file format</a> for their
+ <a href="https://www.bentley.com/en/products/product-line/modeling-and-visualization-software/microstation">Microstation</a>
+ CAD/CAM product.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://oss.bosch-cm.com/index.html' border=0>
+<img src='images/foreignlogos/bosch_logo1.gif' width=215></a></center>
+<p>
+ <a href="http://www.bosch.com/">Bosch</a> uses SQLite in the multimedia
+ systems install on GM, Nissan, and Suzuki automobiles.
+ (<a href="http://oss.bosch-cm.com/index.html">link</a>)
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.dropbox.com/' border=0>
+<img src='images/foreignlogos/dropbox.gif' width=215></a></center>
+<p>
+ The increasingly popular <a href="http://www.dropbox.com/">Dropbox</a> file
+ archiving and synchronization service is reported to use SQLite as
+ the primary data store on the client side.
+</p>
+
+<hr class='xhr'>
+<center><a href='https://www.expensify.com/' border=0>
+<img src='images/foreignlogos/expensify.png' width=215></a></center>
+<p>
+ <a href="https://www.expensify.com/">Expensify</a> uses SQLite as a server-side
+ database engine for their enterprise-scale expense reporting software.
+</p>
+
+<hr class='xhr'>
+<center><a href='https://www.facebook.com/' border=0>
+<img src='images/foreignlogos/fb.gif' width=215></a></center>
+<p>
+ <a href="https://www.facebook.com/">Facebook</a> uses SQLite as the SQL database
+ engine in their
+ <a href="https://code.facebook.com/projects/658950180885092">osquery</a> product.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.ge.com/' border=0>
+<img src='images/foreignlogos/ge.gif' width=215></a></center>
+<p>
+ We believe that <a href="http://www.ge.com/">General Electric</a>
+ uses SQLite in some product or
+ another because they have written to the SQLite developers at
+ least four separate times requesting
+ the US Export Control Number for SQLite. So presumably GE is using
+ SQLite in something that they are exporting. But nobody
+ (outside of GE) seems to know what that might be.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.google.com/' border=0>
+<img src='images/foreignlogos/google.gif' width=215></a></center>
+<p>
+ uses SQLite in their
+ <a href="http://code.google.com/android/">Android</a> cell-phone
+ operating system, and in the
+ <a href="http://www.google.com/chrome">Chrome Web Browser</a>.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.intuit.com/' border=0>
+<img src='images/foreignlogos/intuit.gif' width=215></a></center>
+<p>
+ <a href="http://www.intuit.com/">Intuit</a> apparently uses SQLite in
+ <a href="http://www.quickbooks.com/">QuickBooks</a> and in
+ <a href="http://turbotax.intuit.com/">TurboTax</a> to judge from some error
+ reports from users seen
+ <a href="http://community.intuit.com/posts/database-error-sqlite-error-code1">here</a> and
+ <a href="https://ttlc.intuit.com/post/show_full/cJf8mIhC4r4jjracfArQzM/when-i-try-to-update-turbotax-i-receive-an-unexpected-error-message">here</a>.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.loc.gov/' border=0>
+<img src='images/foreignlogos/loc.jpg' width=215></a></center>
+<p>
+ The United States Library of Congress recognizes SQLite as a
+ <a href="locrsf.html">recommended storage format</a> for preservation of digital content.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.mcafee.com/' border=0>
+<img src='images/foreignlogos/mcaffee.gif' width=215></a></center>
+<p>
+ <a href="http://www.mcafee.com/">McAfee</a> uses SQLite in its antivirus
+ programs.
+ Mentioned <a href="http://www.mail-archive.com/sqlite-users@sqlite.org/msg16931.html">here</a> and implied
+ <a href="http://forums.mcafeehelp.com/showthread.php?t=173519">here</a>.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.microsoft.com/' border=0>
+<img src='images/foreignlogos/microsoft.gif' width=215></a></center>
+<p>
+ <a href="http://www.microsoft.com/">Microsoft</a> uses SQLite as a core component
+ of Windows 10, and in other products.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.mozilla.com/' border=0>
+<img src='images/foreignlogos/firefox.gif' width=215></a></center>
+<p>
+ SQLite is the primary meta-data storage format for
+ the <a href="http://www.mozilla.com/">Firefox Web Browser</a> and the
+ <a href="http://www.mozilla.com/thunderbird/">Thunderbird Email Reader</a> from
+ Mozilla.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.nds-association.org/' border=0>
+<img src='images/foreignlogos/nds.png' width=215></a></center>
+<p>
+ <a href="http://www.nds-association.org/">The Navigation Data Standard</a> uses
+ SQLite as its <a href="aff_short.html">application file format</a>.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.php.net/' border=0>
+<img src='images/foreignlogos/php.gif' width=215></a></center>
+<p>
+ The popular <a href="http://www.php.net/">PHP</a>
+ programming language comes with both SQLite2 and SQLite3 built in.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.python.org/' border=0>
+<img src='images/foreignlogos/python.gif' width=215></a></center>
+<p>
+ All <a href="http://docs.python.org/lib/module-sqlite3.html">Python</a>
+ distributions since Python 2.5 include SQLite.
+</p>
+
+<hr class='xhr'>
+<center><a href='https://en.wikipedia.org/wiki/RPM_Package_Manager' border=0>
+<img src='images/foreignlogos/rpm_logo.png' width=215></a></center>
+<p>
+ The <a href="https://en.wikipedia.org/wiki/RPM_Package_Manager">RedHat Package Manager (RPM)</a>
+ uses SQLite to track its state.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.skype.com/' border=0>
+<img src='images/foreignlogos/skype.gif' width=215></a></center>
+<p>
+ There are
+ <a href="http://www.mail-archive.com/sqlite-users%40sqlite.org/msg27326.html">multiple</a>
+ <a href="http://www.mail-archive.com/sqlite-users%40sqlite.org/msg27332.html">sightings</a>
+ of SQLite in the Skype client for Mac OS X and Windows.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.tcl-lang.org/' border=0>
+<img src='images/foreignlogos/tcl.gif' width=215></a></center>
+<p>
+ The Tcl/Tk programming language now comes with SQLite built-in. SQLite works
+ particularly well with Tcl since SQLite was originally a Tcl extension that
+ subsequently "escaped" into the wild.
+</p>
+
+<hr class='xhr'>
+<center><a href='http://www.xojo.com/' border=0>
+<img src='images/foreignlogos/xojo.png' width=215></a></center>
+<p>
+ SQLite comes bundled with the <a href="http://www.xojo.com/">Xojo</a>
+ programming environment
+ (formerly <a href="http://www.realbasic.com/">REALbasic</a>)
+</p>
+
+</div>
+<div class='desktoponly'>
+<table border=0 cellpadding=15>
+<tr><td valign='top'>
+<a href='http://www.adobe.com/' border=0>
+<img src='images/foreignlogos/adobe.gif' width=215></a>
+</td><td valign='top'>
+
+ <a href="http://www.adobe.com/">Adobe</a> uses SQLite as the
+ <a href="whentouse.html#appfileformat">application
+ file format</a> for their
+ <a href="http://www.adobe.com/products/photoshoplightroom/">Photoshop Lightroom</a>
+ product.
+ SQLite is also a standard part of the
+ <a href="http://labs.adobe.com/technologies/air/">Adobe Integrated Runtime (AIR)</a>.
+ It is reported that
+ <a href="http://www.adobe.com/products/acrobat/readstep2.html">Acrobat Reader</a>
+ also uses SQLite.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.airbus.com/' border=0>
+<img src='images/foreignlogos/airbus2.gif' width=215></a>
+</td><td valign='top'>
+
+ <a href="http://www.airbus.com/">Airbus</a> confirms that SQLite is being
+ used in the flight software for the
+ <a href="http://www.aircraft.airbus.com/aircraftfamilies/passengeraircraft/a350xwbfamily/">A350 XWB</a> family
+ of aircraft.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.apple.com/' border=0>
+<img src='images/foreignlogos/apple.gif' width=215></a>
+</td><td valign='top'>
+
+ <a href="http://www.apple.com/">Apple</a> uses SQLite in many (most?) of the
+ native applications running on Mac OS-X desktops and servers and
+ on iOS devices such as iPhones and iPods. SQLite is also used in
+ <a href="http://www.apple.com/itunes/">iTunes</a>, even on non-Apple hardware.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.bentley.com/' border=0>
+<img src='images/foreignlogos/bentley.gif' width=215></a>
+</td><td valign='top'>
+
+ <a href="http://www.bentley.com/">Bentley Systems</a> uses SQLite as the
+ <a href="aff_short.html">application file format</a> for their
+ <a href="https://www.bentley.com/en/products/product-line/modeling-and-visualization-software/microstation">Microstation</a>
+ CAD/CAM product.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://oss.bosch-cm.com/index.html' border=0>
+<img src='images/foreignlogos/bosch_logo1.gif' width=215></a>
+</td><td valign='top'>
+
+ <a href="http://www.bosch.com/">Bosch</a> uses SQLite in the multimedia
+ systems install on GM, Nissan, and Suzuki automobiles.
+ (<a href="http://oss.bosch-cm.com/index.html">link</a>)
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.dropbox.com/' border=0>
+<img src='images/foreignlogos/dropbox.gif' width=215></a>
+</td><td valign='top'>
+
+ The increasingly popular <a href="http://www.dropbox.com/">Dropbox</a> file
+ archiving and synchronization service is reported to use SQLite as
+ the primary data store on the client side.
+</td></tr>
+<tr><td valign='top'>
+<a href='https://www.expensify.com/' border=0>
+<img src='images/foreignlogos/expensify.png' width=215></a>
+</td><td valign='top'>
+
+ <a href="https://www.expensify.com/">Expensify</a> uses SQLite as a server-side
+ database engine for their enterprise-scale expense reporting software.
+</td></tr>
+<tr><td valign='top'>
+<a href='https://www.facebook.com/' border=0>
+<img src='images/foreignlogos/fb.gif' width=215></a>
+</td><td valign='top'>
+
+ <a href="https://www.facebook.com/">Facebook</a> uses SQLite as the SQL database
+ engine in their
+ <a href="https://code.facebook.com/projects/658950180885092">osquery</a> product.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.ge.com/' border=0>
+<img src='images/foreignlogos/ge.gif' width=215></a>
+</td><td valign='top'>
+
+ We believe that <a href="http://www.ge.com/">General Electric</a>
+ uses SQLite in some product or
+ another because they have written to the SQLite developers at
+ least four separate times requesting
+ the US Export Control Number for SQLite. So presumably GE is using
+ SQLite in something that they are exporting. But nobody
+ (outside of GE) seems to know what that might be.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.google.com/' border=0>
+<img src='images/foreignlogos/google.gif' width=215></a>
+</td><td valign='top'>
+
+ uses SQLite in their
+ <a href="http://code.google.com/android/">Android</a> cell-phone
+ operating system, and in the
+ <a href="http://www.google.com/chrome">Chrome Web Browser</a>.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.intuit.com/' border=0>
+<img src='images/foreignlogos/intuit.gif' width=215></a>
+</td><td valign='top'>
+
+ <a href="http://www.intuit.com/">Intuit</a> apparently uses SQLite in
+ <a href="http://www.quickbooks.com/">QuickBooks</a> and in
+ <a href="http://turbotax.intuit.com/">TurboTax</a> to judge from some error
+ reports from users seen
+ <a href="http://community.intuit.com/posts/database-error-sqlite-error-code1">here</a> and
+ <a href="https://ttlc.intuit.com/post/show_full/cJf8mIhC4r4jjracfArQzM/when-i-try-to-update-turbotax-i-receive-an-unexpected-error-message">here</a>.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.loc.gov/' border=0>
+<img src='images/foreignlogos/loc.jpg' width=215></a>
+</td><td valign='top'>
+
+ The United States Library of Congress recognizes SQLite as a
+ <a href="locrsf.html">recommended storage format</a> for preservation of digital content.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.mcafee.com/' border=0>
+<img src='images/foreignlogos/mcaffee.gif' width=215></a>
+</td><td valign='top'>
+
+ <a href="http://www.mcafee.com/">McAfee</a> uses SQLite in its antivirus
+ programs.
+ Mentioned <a href="http://www.mail-archive.com/sqlite-users@sqlite.org/msg16931.html">here</a> and implied
+ <a href="http://forums.mcafeehelp.com/showthread.php?t=173519">here</a>.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.microsoft.com/' border=0>
+<img src='images/foreignlogos/microsoft.gif' width=215></a>
+</td><td valign='top'>
+
+ <a href="http://www.microsoft.com/">Microsoft</a> uses SQLite as a core component
+ of Windows 10, and in other products.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.mozilla.com/' border=0>
+<img src='images/foreignlogos/firefox.gif' width=215></a>
+</td><td valign='top'>
+
+ SQLite is the primary meta-data storage format for
+ the <a href="http://www.mozilla.com/">Firefox Web Browser</a> and the
+ <a href="http://www.mozilla.com/thunderbird/">Thunderbird Email Reader</a> from
+ Mozilla.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.nds-association.org/' border=0>
+<img src='images/foreignlogos/nds.png' width=215></a>
+</td><td valign='top'>
+
+ <a href="http://www.nds-association.org/">The Navigation Data Standard</a> uses
+ SQLite as its <a href="aff_short.html">application file format</a>.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.php.net/' border=0>
+<img src='images/foreignlogos/php.gif' width=215></a>
+</td><td valign='top'>
+
+ The popular <a href="http://www.php.net/">PHP</a>
+ programming language comes with both SQLite2 and SQLite3 built in.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.python.org/' border=0>
+<img src='images/foreignlogos/python.gif' width=215></a>
+</td><td valign='top'>
+
+ All <a href="http://docs.python.org/lib/module-sqlite3.html">Python</a>
+ distributions since Python 2.5 include SQLite.
+</td></tr>
+<tr><td valign='top'>
+<a href='https://en.wikipedia.org/wiki/RPM_Package_Manager' border=0>
+<img src='images/foreignlogos/rpm_logo.png' width=215></a>
+</td><td valign='top'>
+
+ The <a href="https://en.wikipedia.org/wiki/RPM_Package_Manager">RedHat Package Manager (RPM)</a>
+ uses SQLite to track its state.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.skype.com/' border=0>
+<img src='images/foreignlogos/skype.gif' width=215></a>
+</td><td valign='top'>
+
+ There are
+ <a href="http://www.mail-archive.com/sqlite-users%40sqlite.org/msg27326.html">multiple</a>
+ <a href="http://www.mail-archive.com/sqlite-users%40sqlite.org/msg27332.html">sightings</a>
+ of SQLite in the Skype client for Mac OS X and Windows.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.tcl-lang.org/' border=0>
+<img src='images/foreignlogos/tcl.gif' width=215></a>
+</td><td valign='top'>
+
+ The Tcl/Tk programming language now comes with SQLite built-in. SQLite works
+ particularly well with Tcl since SQLite was originally a Tcl extension that
+ subsequently "escaped" into the wild.
+</td></tr>
+<tr><td valign='top'>
+<a href='http://www.xojo.com/' border=0>
+<img src='images/foreignlogos/xojo.png' width=215></a>
+</td><td valign='top'>
+
+ SQLite comes bundled with the <a href="http://www.xojo.com/">Xojo</a>
+ programming environment
+ (formerly <a href="http://www.realbasic.com/">REALbasic</a>)
+</td></tr>
+</table>
+</div>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/famous.in?m=e060895d71666a5e0">2022-06-18 09:43:52</a> UTC </small></i></p>
+
diff --git a/www/faq.html b/www/faq.html
new file mode 100644
index 0000000..05936e3
--- /dev/null
+++ b/www/faq.html
@@ -0,0 +1,648 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Frequently Asked Questions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h2>Frequently Asked Questions</h2><ol class=nounderline><li value='1'><a href="#q1">How do I create an AUTOINCREMENT field?</a></li><li value='2'><a href="#q2">What datatypes does SQLite support?</a></li><li value='3'><a href="#q3">SQLite lets me insert a string into a database column of type integer!</a></li><li value='4'><a href="#q4">Why doesn't SQLite allow me to use '0' and '0.0' as the primary
+ key on two different rows of the same table?</a></li><li value='5'><a href="#q5">Can multiple applications or multiple instances of the same
+ application access a single database file at the same time?</a></li><li value='6'><a href="#q6">Is SQLite threadsafe?</a></li><li value='7'><a href="#q7">How do I list all tables/indices contained in an SQLite database</a></li><li value='8'><a href="#q8">Are there any known size limits to SQLite databases?</a></li><li value='9'><a href="#q9">What is the maximum size of a VARCHAR in SQLite?</a></li><li value='10'><a href="#q10">Does SQLite support a BLOB type?</a></li><li value='11'><a href="#q11">How do I add, delete or rename columns from an existing table in SQLite?</a></li><li value='12'><a href="#q12">I deleted a lot of data but the database file did not get any
+ smaller. Is this a bug?</a></li><li value='13'><a href="#q13">Can I use SQLite in my commercial product without paying royalties?</a></li><li value='14'><a href="#q14">How do I use a string literal that contains an embedded single-quote (')
+ character?</a></li><li value='15'><a href="#q15">What is an SQLITE_SCHEMA error, and why am I getting one?</a></li><li value='17'><a href="#q17">I get some compiler warnings when I compile SQLite.
+ Isn't this a problem? Doesn't it indicate poor code quality?</a></li><li value='18'><a href="#q18">Case-insensitive matching of Unicode characters does not work.</a></li><li value='19'><a href="#q19">INSERT is really slow - I can only do few dozen INSERTs per second</a></li><li value='20'><a href="#q20">I accidentally deleted some important information from my SQLite database.
+ How can I recover it?</a></li><li value='21'><a href="#q21">What is an SQLITE_CORRUPT error? What does it mean for the database
+ to be "malformed"? Why am I getting this error?</a></li><li value='22'><a href="#q22">Does SQLite support foreign keys?</a></li><li value='23'><a href="#q23">I get a compiler error if I use the SQLITE_OMIT_...
+ compile-time options when building SQLite.</a></li><li value='24'><a href="#q24">My WHERE clause expression <tt>column1="column1"</tt> does not work.
+ It causes every row of the table to be returned, not just the rows
+ where column1 has the value "column1".</a></li><li value='25'><a href="#q25">How are the syntax diagrams (a.k.a. "railroad" diagrams) for
+ SQLite generated?</a></li><li value='26'><a href="#q26">The SQL standard requires that a UNIQUE constraint be enforced even if
+ one or more of the columns in the constraint are NULL, but SQLite does
+ not do this. Isn't that a bug?</a></li><li value='27'><a href="#q27">What is the Export Control Classification Number (ECCN) for SQLite?</a></li><li value='28'><a href="#q28">My query does not return the column name that I expect. Is this a bug?</a></li></ol><a name="q1"></a>
+<p><b>(1) How do I create an AUTOINCREMENT field?</b></p>
+<blockquote><p>Short answer: A column declared <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> will
+ autoincrement.</p>
+
+ <p>Longer answer:
+ If you declare a column of a table to be <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, then
+ whenever you insert a NULL
+ into that column of the table, the NULL is automatically converted
+ into an integer which is one greater than the largest value of that
+ column over all other rows in the table, or 1 if the table is empty.
+ Or, if the largest existing integer key 9223372036854775807 is in use then an
+ unused key value is chosen at random.
+ For example, suppose you have a table like this:
+<blockquote><pre>
+CREATE TABLE t1(
+ a INTEGER PRIMARY KEY,
+ b INTEGER
+);
+</pre></blockquote>
+ <p>With this table, the statement</p>
+<blockquote><pre>
+INSERT INTO t1 VALUES(NULL,123);
+</pre></blockquote>
+ <p>is logically equivalent to saying:</p>
+<blockquote><pre>
+INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123);
+</pre></blockquote>
+
+ <p>There is a function named
+ <a href="c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a> which will return the integer key
+ for the most recent insert operation.</p>
+
+ <p>Note that the integer key is one greater than the largest
+ key that was in the table just prior to the insert. The new key
+ will be unique over all keys currently in the table, but it might
+ overlap with keys that have been previously deleted from the
+ table. To create keys that are unique over the lifetime of the
+ table, add the <a href="autoinc.html">AUTOINCREMENT</a> keyword to the <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>
+ declaration. Then the key chosen will be one more than the
+ largest key that has ever existed in that table. If the largest
+ possible key has previously existed in that table, then the <a href="lang_insert.html">INSERT</a>
+ will fail with an <a href="rescode.html#full">SQLITE_FULL</a> error code.</p></blockquote></li>
+<a name="q2"></a>
+<p><b>(2) What datatypes does SQLite support?</b></p>
+<blockquote>SQLite uses <a href="datatype3.html">dynamic typing</a>. Content can be stored as INTEGER,
+ REAL, TEXT, BLOB, or as NULL.</blockquote></li>
+<a name="q3"></a>
+<p><b>(3) SQLite lets me insert a string into a database column of type integer!</b></p>
+<blockquote><p>This is a feature, not a bug. SQLite uses <a href="datatype3.html">dynamic typing</a>.
+ It does not enforce data type constraints. Data of any type can
+ (usually) be inserted into any column. You can put arbitrary length
+ strings into integer columns, floating point numbers in boolean columns,
+ or dates in character columns. The <a href="datatype3.html">datatype</a> you assign to a column in the
+ CREATE TABLE command does not restrict what data can be put into
+ that column. Every column is able to hold
+ an arbitrary length string. (There is one exception: Columns of
+ type <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> may only hold a 64-bit signed integer.
+ An error will result
+ if you try to put anything other than an integer into an
+ <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column.)</p>
+
+ <p>But SQLite does use the declared type of a column as a hint
+ that you prefer values in that format. So, for example, if a
+ column is of type INTEGER and you try to insert a string into
+ that column, SQLite will attempt to convert the string into an
+ integer. If it can, it inserts the integer instead. If not,
+ it inserts the string. This feature is called <a href="datatype3.html#affinity">type affinity</a>.
+ </p></blockquote></li>
+<a name="q4"></a>
+<p><b>(4) Why doesn't SQLite allow me to use '0' and '0.0' as the primary
+ key on two different rows of the same table?</b></p>
+<blockquote><p>This problem occurs when your primary key is a numeric type. Change the
+ <a href="datatype3.html">datatype</a> of your primary key to TEXT and it should work.</p>
+
+ <p>Every row must have a unique primary key. For a column with a
+ numeric type, SQLite thinks that <b>'0'</b> and <b>'0.0'</b> are the
+ same value because they compare equal to one another numerically.
+ (See the previous question.) Hence the values are not unique.</p></blockquote></li>
+<a name="q5"></a>
+<p><b>(5) Can multiple applications or multiple instances of the same
+ application access a single database file at the same time?</b></p>
+<blockquote><p>Multiple processes can have the same database open at the same
+ time. Multiple processes can be doing a SELECT
+ at the same time. But only one process can be making changes to
+ the database at any moment in time, however.</p>
+
+ <p>SQLite uses reader/writer locks to control access to the database.
+ (Under Win95/98/ME which lacks support for reader/writer locks, a
+ probabilistic simulation is used instead.)
+ But use caution: this locking mechanism might
+ not work correctly if the database file is kept on an NFS filesystem.
+ This is because fcntl() file locking is broken on many NFS implementations.
+ You should avoid putting SQLite database files on NFS if multiple
+ processes might try to access the file at the same time. On Windows,
+ Microsoft's documentation says that locking may not work under FAT
+ filesystems if you are not running the Share.exe daemon. People who
+ have a lot of experience with Windows tell me that file locking of
+ network files is very buggy and is not dependable. If what they
+ say is true, sharing an SQLite database between two or more Windows
+ machines might cause unexpected problems.</p>
+
+ <p>We are aware of no other <i>embedded</i> SQL database engine that
+ supports as much concurrency as SQLite. SQLite allows multiple processes
+ to have the database file open at once, and for multiple processes to
+ read the database at once. When any process wants to write, it must
+ lock the entire database file for the duration of its update. But that
+ normally only takes a few milliseconds. Other processes just wait on
+ the writer to finish then continue about their business. Other embedded
+ SQL database engines typically only allow a single process to connect to
+ the database at once.</p>
+
+ <p>However, client/server database engines (such as PostgreSQL, MySQL,
+ or Oracle) usually support a higher level of concurrency and allow
+ multiple processes to be writing to the same database at the same time.
+ This is possible in a client/server database because there is always a
+ single well-controlled server process available to coordinate access.
+ If your application has a need for a lot of concurrency, then you should
+ consider using a client/server database. But experience suggests that
+ most applications need much less concurrency than their designers imagine.
+ </p>
+
+ <p>When SQLite tries to access a file that is locked by another
+ process, the default behavior is to return SQLITE_BUSY. You can
+ adjust this behavior from C code using the
+ <a href="c3ref/busy_handler.html">sqlite3_busy_handler()</a> or <a href="c3ref/busy_timeout.html">sqlite3_busy_timeout()</a>
+ API functions.</p></blockquote></li>
+<a name="q6"></a>
+<p><b>(6) Is SQLite threadsafe?</b></p>
+<blockquote><p><a href="http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf">Threads are evil</a>.
+ Avoid them.
+
+ <p>SQLite is threadsafe. We make this concession since many users choose
+ to ignore the advice given in the previous paragraph.
+ But in order to be thread-safe, SQLite must be compiled
+ with the SQLITE_THREADSAFE preprocessor macro set to 1. Both the Windows
+ and Linux precompiled binaries in the distribution are compiled this way.
+ If you are unsure if the SQLite library you are linking against is compiled
+ to be threadsafe you can call the <a href="c3ref/threadsafe.html">sqlite3_threadsafe()</a>
+ interface to find out.
+ </p>
+
+ <p>SQLite is threadsafe because it uses mutexes to serialize
+ access to common data structures. However, the work of acquiring and
+ releasing these mutexes will slow SQLite down slightly. Hence, if you
+ do not need SQLite to be threadsafe, you should disable the mutexes
+ for maximum performance. See the <a href="threadsafe.html">threading mode</a> documentation for
+ additional information.</p>
+
+ <p>Under Unix, you should not carry an open SQLite database across
+ a fork() system call into the child process.</p></blockquote></li>
+<a name="q7"></a>
+<p><b>(7) How do I list all tables/indices contained in an SQLite database</b></p>
+<blockquote><p>If you are running the <b>sqlite3</b> command-line access program
+ you can type "<b>.tables</b>" to get a list of all tables. Or you
+ can type "<b>.schema</b>" to see the complete database schema including
+ all tables and indices. Either of these commands can be followed by
+ a LIKE pattern that will restrict the tables that are displayed.</p>
+
+ <p>From within a C/C++ program (or a script using Tcl/Ruby/Perl/Python
+ bindings) you can get access to table and index names by doing a SELECT
+ on a special table named "<b>SQLITE_SCHEMA</b>". Every SQLite database
+ has an SQLITE_SCHEMA table that defines the schema for the database.
+ The SQLITE_SCHEMA table looks like this:</p>
+<blockquote><pre>
+CREATE TABLE sqlite_schema (
+ type TEXT,
+ name TEXT,
+ tbl_name TEXT,
+ rootpage INTEGER,
+ sql TEXT
+);
+</pre></blockquote>
+ <p>For tables, the <b>type</b> field will always be <b>'table'</b> and the
+ <b>name</b> field will be the name of the table. So to get a list of
+ all tables in the database, use the following SELECT command:</p>
+<blockquote><pre>
+SELECT name FROM sqlite_schema
+WHERE type='table'
+ORDER BY name;
+</pre></blockquote>
+ <p>For indices, <b>type</b> is equal to <b>'index'</b>, <b>name</b> is the
+ name of the index and <b>tbl_name</b> is the name of the table to which
+ the index belongs. For both tables and indices, the <b>sql</b> field is
+ the text of the original CREATE TABLE or CREATE INDEX statement that
+ created the table or index. For automatically created indices (used
+ to implement the PRIMARY KEY or UNIQUE constraints) the <b>sql</b> field
+ is NULL.</p>
+
+ <p>The SQLITE_SCHEMA table cannot be modified using UPDATE, INSERT,
+ or DELETE (except under
+ <a href="pragma.html#pragma_writable_schema">extraordinary conditions</a>).
+ The SQLITE_SCHEMA table is automatically updated by commands like
+ CREATE TABLE, CREATE INDEX, DROP TABLE, and DROP INDEX.</p>
+
+ <p>Temporary tables do not appear in the SQLITE_SCHEMA table. Temporary
+ tables and their indices and triggers occur in another special table
+ named SQLITE_TEMP_SCHEMA. SQLITE_TEMP_SCHEMA works just like SQLITE_SCHEMA
+ except that it is only visible to the application that created the
+ temporary tables. To get a list of all tables, both permanent and
+ temporary, one can use a command similar to the following:
+<blockquote><pre>
+SELECT name FROM
+ (SELECT * FROM sqlite_schema UNION ALL
+ SELECT * FROM sqlite_temp_schema)
+WHERE type='table'
+ORDER BY name
+</pre></blockquote></blockquote></li>
+<a name="q8"></a>
+<p><b>(8) Are there any known size limits to SQLite databases?</b></p>
+<blockquote><p>See <a href="limits.html">limits.html</a> for a full discussion of
+ the limits of SQLite.</p></blockquote></li>
+<a name="q9"></a>
+<p><b>(9) What is the maximum size of a VARCHAR in SQLite?</b></p>
+<blockquote><p>SQLite does not enforce the length of a VARCHAR. You can declare
+ a VARCHAR(10) and SQLite will be happy to store a 500-million character
+ string there. And it will keep all 500-million characters intact.
+ Your content is never truncated. SQLite understands the column type
+ of "VARCHAR(<i>N</i>)" to be the same as "TEXT", regardless of the value
+ of <i>N</i>.
+ </p></blockquote></li>
+<a name="q10"></a>
+<p><b>(10) Does SQLite support a BLOB type?</b></p>
+<blockquote><p>SQLite allows you to store BLOB data in any
+ column, even columns that are declared to hold some other type.
+ BLOBs can even be used as PRIMARY KEYs.</p></blockquote></li>
+<a name="q11"></a>
+<p><b>(11) How do I add, delete or rename columns from an existing table in SQLite?</b></p>
+<blockquote><p>SQLite has limited ALTER TABLE support that you can use to
+ add, rename or drop columns or to change the name of a table
+ as detailed at <a href="lang_altertable.html">ALTER TABLE</a>.</p>
+
+ <p>If you want to make more complex changes in the structure or
+ constraints of a table or its columns, you will have to recreate it.
+ You can save existing data to a temporary table, drop the
+ old table, create the new table, then copy the data back in from
+ the temporary table. See <a href="lang_altertable.html#otheralter">
+ Making Other Kinds Of Table Schema Changes</a> for procedure.</p></blockquote></li>
+<a name="q12"></a>
+<p><b>(12) I deleted a lot of data but the database file did not get any
+ smaller. Is this a bug?</b></p>
+<blockquote><p>No. When you delete information from an SQLite database, the
+ unused disk space is added to an internal "free-list" and is reused
+ the next time you insert data. The disk space is not lost. But
+ neither is it returned to the operating system.</p>
+
+ <p>If you delete a lot of data and want to shrink the database file,
+ run the <a href="lang_vacuum.html">VACUUM</a> command.
+ VACUUM will reconstruct
+ the database from scratch. This will leave the database with an empty
+ free-list and a file that is minimal in size. Note, however, that the
+ VACUUM can take some time to run and it can use up to twice
+ as much temporary disk space as the original file while it is running.
+ </p>
+
+ <p>An alternative to using the VACUUM command
+ is auto-vacuum mode, enabled using the
+ <a href="pragma.html#pragma_auto_vacuum">auto_vacuum pragma</a>.</p></blockquote></li>
+<a name="q13"></a>
+<p><b>(13) Can I use SQLite in my commercial product without paying royalties?</b></p>
+<blockquote><p>Yes. SQLite is in the
+ <a href="copyright.html">public domain</a>. No claim of ownership is made
+ to any part of the code. You can do anything you want with it.</p></blockquote></li>
+<a name="q14"></a>
+<p><b>(14) How do I use a string literal that contains an embedded single-quote (')
+ character?</b></p>
+<blockquote><p>The SQL standard specifies that single-quotes in strings are escaped
+ by putting two single quotes in a row. SQL works like the Pascal programming
+ language in this regard. Example:
+ </p>
+
+ <blockquote><pre>
+ INSERT INTO xyz VALUES('5 O''clock');
+ </pre></blockquote></blockquote></li>
+<a name="q15"></a>
+<p><b>(15) What is an SQLITE_SCHEMA error, and why am I getting one?</b></p>
+<blockquote><p>An <a href="rescode.html#schema">SQLITE_SCHEMA</a> error is returned when a
+ prepared SQL statement is no longer valid and cannot be executed.
+ When this occurs, the statement must be recompiled from SQL using
+ the <a href="c3ref/prepare.html">sqlite3_prepare()</a> API.
+ An SQLITE_SCHEMA error can only occur when using the <a href="c3ref/prepare.html">sqlite3_prepare()</a>,
+ and <a href="c3ref/step.html">sqlite3_step()</a> interfaces to run SQL.
+ You will never receive an <a href="rescode.html#schema">SQLITE_SCHEMA</a> error from
+ <a href="c3ref/exec.html">sqlite3_exec()</a>. Nor will you receive an error if you
+ prepare statements using <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> instead of
+ <a href="c3ref/prepare.html">sqlite3_prepare()</a>.</p>
+
+ <p>The <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> interface creates a
+ <a href="c3ref/stmt.html">prepared statement</a> that will automatically recompile itself if
+ the schema changes. The easiest way to deal with
+ <a href="rescode.html#schema">SQLITE_SCHEMA</a> errors is to always use <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
+ instead of <a href="c3ref/prepare.html">sqlite3_prepare()</a>.</blockquote></li>
+<a name="q17"></a>
+<p><b>(17) I get some compiler warnings when I compile SQLite.
+ Isn't this a problem? Doesn't it indicate poor code quality?</b></p>
+<blockquote><p>Quality assurance in SQLite is done using
+ <a href="testing.html#coverage">full-coverage testing</a>,
+ not by compiler warnings or other static code analysis tools.
+ In other words, we verify that SQLite actually gets the
+ correct answer, not that it merely satisfies stylistic constraints.
+ Most of the SQLite code base is devoted purely to testing.
+ The SQLite test suite runs tens of thousands of separate test cases and
+ many of those test cases are parameterized so that hundreds of millions
+ of tests involving billions of SQL statements are run and evaluated
+ for correctness prior to every release. The developers use code
+ coverage tools to verify that all paths through the code are tested.
+ Whenever a bug is found in SQLite, new test cases are written to
+ exhibit the bug so that the bug cannot recur undetected in the future.</p>
+
+ <p>During testing, the SQLite library is compiled with special
+ instrumentation that allows the test scripts to simulate a wide
+ variety of failures in order to verify that SQLite recovers
+ correctly. Memory allocation is carefully tracked and no memory
+ leaks occur, even following memory allocation failures. A custom
+ VFS layer is used to simulate operating system crashes and power
+ failures in order to ensure that transactions are atomic across
+ these events. A mechanism for deliberately injecting I/O errors
+ shows that SQLite is resilient to such malfunctions. (As an
+ experiment, try inducing these kinds of errors on other SQL database
+ engines and see what happens!)</p>
+
+ <p>We also run SQLite using <a href="http://valgrind.org">Valgrind</a>
+ on Linux and verify that it detects no problems.</p>
+
+ <p>Some people say that we should eliminate all warnings because
+ benign warnings mask real warnings that might arise in future changes.
+ This is true enough. But in reply, the developers observe that all
+ warnings have already been fixed in the builds
+ used for SQLite development (various versions of GCC, MSVC,
+ and clang).
+ Compiler warnings usually only arise from compilers or compile-time
+ options that the SQLite developers do not use themselves.</p></blockquote></li>
+<a name="q18"></a>
+<p><b>(18) Case-insensitive matching of Unicode characters does not work.</b></p>
+<blockquote>The default configuration of SQLite only supports case-insensitive
+ comparisons of ASCII characters. The reason for this is that doing
+ full Unicode case-insensitive comparisons and case conversions
+ requires tables and logic that would nearly double the size of
+ the SQLite library. The
+ SQLite developers reason that any application that needs full
+ Unicode case support probably already has the necessary tables and
+ functions and so SQLite should not take up space to
+ duplicate this ability.</p>
+
+ <p>Instead of providing full Unicode case support by default,
+ SQLite provides the ability to link against external
+ Unicode comparison and conversion routines.
+ The application can overload the built-in <a href="datatype3.html#collation">NOCASE</a> collating
+ sequence (using <a href="c3ref/create_collation.html">sqlite3_create_collation()</a>) and the built-in
+ <a href="lang_corefunc.html#like">like()</a>, <a href="lang_corefunc.html#upper">upper()</a>, and <a href="lang_corefunc.html#lower">lower()</a> functions
+ (using <a href="c3ref/create_function.html">sqlite3_create_function()</a>).
+ The SQLite source code includes an "ICU" extension that does
+ these overloads. Or, developers can write their own overloads
+ based on their own Unicode-aware comparison routines already
+ contained within their project.</blockquote></li>
+<a name="q19"></a>
+<p><b>(19) INSERT is really slow - I can only do few dozen INSERTs per second</b></p>
+<blockquote>Actually, SQLite will easily do 50,000 or more <a href="lang_insert.html">INSERT</a> statements per second
+ on an average desktop computer. But it will only do a few dozen transactions
+ per second. Transaction speed is limited by the rotational speed of
+ your disk drive. A transaction normally requires two complete rotations
+ of the disk platter, which on a 7200RPM disk drive limits you to about
+ 60 transactions per second.
+
+ <p>Transaction speed is limited by disk drive speed because (by default)
+ SQLite actually waits until the data really is safely stored on the disk
+ surface before the transaction is complete. That way, if you suddenly lose
+ power or if your OS crashes, your data is still safe. For details,
+ read about <a href="atomiccommit.html">atomic commit in SQLite.</a>.
+
+ <p>By default, each INSERT statement is its own transaction. But if you
+ surround multiple INSERT statements with <a href="lang_transaction.html">BEGIN</a>...<a href="lang_transaction.html">COMMIT</a> then all the
+ inserts are grouped into a single transaction. The time needed to commit
+ the transaction is amortized over all the enclosed insert statements and
+ so the time per insert statement is greatly reduced.
+
+ <p>Another option is to run <a href="pragma.html#pragma_synchronous">PRAGMA synchronous=OFF</a>. This command will
+ cause SQLite to not wait on data to reach the disk surface, which will make
+ write operations appear to be much faster. But if you lose power in the
+ middle of a transaction, your database file might go corrupt.</blockquote></li>
+<a name="q20"></a>
+<p><b>(20) I accidentally deleted some important information from my SQLite database.
+ How can I recover it?</b></p>
+<blockquote>If you have a backup copy of your database file, recover the information
+ from your backup.
+
+ <p>If you do not have a backup, recovery is very difficult. You might
+ be able to find partial string data in a binary dump of the raw database
+ file. Recovering numeric data might also be possible given special tools,
+ though to our knowledge no such tools exist. SQLite is sometimes compiled
+ with the <a href="compile.html#secure_delete">SQLITE_SECURE_DELETE</a> option which overwrites all deleted content
+ with zeros. If that is the case then recovery is clearly impossible.
+ Recovery is also impossible if you have run <a href="lang_vacuum.html">VACUUM</a> since the data was
+ deleted. If SQLITE_SECURE_DELETE is not used and VACUUM has not been run,
+ then some of the deleted content might still be in the database file, in
+ areas marked for reuse. But, again, there exist no procedures or tools
+ that we know of to help you recover that data.</blockquote></li>
+<a name="q21"></a>
+<p><b>(21) What is an SQLITE_CORRUPT error? What does it mean for the database
+ to be "malformed"? Why am I getting this error?</b></p>
+<blockquote><p>An <a href="rescode.html#corrupt">SQLITE_CORRUPT</a> error is returned when SQLite detects an error
+ in the structure, format, or other control elements of the
+ database file.</p>
+
+ <p>SQLite does not corrupt database files without external help.
+ If your application crashes in the middle of an
+ update, your data is safe. The database is safe even if your OS
+ crashes or takes a power loss. The crash-resistance of SQLite has
+ been extensively studied and tested and is attested by years of real-world
+ experience by billions of users.</p>
+
+ <p>That said, there are a number of things that external programs or bugs
+ in your hardware or OS can do to corrupt a database file. See
+ <a href="howtocorrupt.html">How To Corrupt An SQLite Database File</a> for
+ further information.
+
+ <p>You can use <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>
+ to do a thorough but time intensive test of the database integrity.</p>
+
+ <p>You can use <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> to do a faster
+ but less thorough test of the database integrity.</p>
+
+ <p>Depending how badly your database is corrupted, you may be able to
+ recover some of the data by using the CLI to dump the schema and contents
+ to a file and then recreate. Unfortunately, once humpty-dumpty falls off
+ the wall, it is generally not possible to put him back together again.</p></blockquote></li>
+<a name="q22"></a>
+<p><b>(22) Does SQLite support foreign keys?</b></p>
+<blockquote><p>
+ As of <a href="releaselog/3_6_19.html">version 3.6.19</a> (2009-10-14),
+ SQLite supports <a href="foreignkeys.html">foreign key constraints</a>. But enforcement
+ of foreign key constraints is turned off by default (for backwards compatibility).
+ To enable foreign key constraint enforcement, run
+ <a href="pragma.html#pragma_foreign_keys">PRAGMA foreign_keys=ON</a> or compile with
+ <a href="compile.html#default_foreign_keys">-DSQLITE_DEFAULT_FOREIGN_KEYS=1</a>.</blockquote></li>
+<a name="q23"></a>
+<p><b>(23) I get a compiler error if I use the SQLITE_OMIT_...
+ compile-time options when building SQLite.</b></p>
+<blockquote>The <a href="compile.html#omitfeatures">SQLITE_OMIT_...</a> compile-time options only work
+ when building from canonical source files. They do <u>not</u> work
+ when you build from the SQLite <a href="amalgamation.html">amalgamation</a> or from the pre-processed
+ source files.
+
+ <p>It is possible to build a special <a href="amalgamation.html">amalgamation</a> that will work with
+ a predetermined set of SQLITE_OMIT_... options. Instructions for doing
+ so can be found with the <a href="compile.html#omitfeatures">SQLITE_OMIT_... documentation</a>.</blockquote></li>
+<a name="q24"></a>
+<p><b>(24) My WHERE clause expression <tt>column1="column1"</tt> does not work.
+ It causes every row of the table to be returned, not just the rows
+ where column1 has the value "column1".</b></p>
+<blockquote>Use single-quotes, not double-quotes, around string literals in SQL.
+ This is what the SQL standard requires. Your WHERE clause expression
+ should read: <tt>column1='column1'</tt>
+
+ <p>SQL uses double-quotes around identifiers (column or table names) that
+ contains special characters or which are keywords. So double-quotes are
+ a way of escaping identifier names. Hence, when you say
+ <tt>column1="column1"</tt> that is equivalent to
+ <tt>column1=column1</tt> which is obviously always true.</blockquote></li>
+<a name="q25"></a>
+<p><b>(25) How are the syntax diagrams (a.k.a. "railroad" diagrams) for
+ SQLite generated?</b></p>
+<blockquote>Each diagram is hand-written using the <a href="https://pikchr.org/">Pikchr</a>
+ diagramming language. These hand-written specifications are converted into
+ SVG and inserted inline in the HTML files as part of the documentation build process.
+ <p>
+ Many historical versions of the SQLite documentation used a different process for
+ generating the syntax diagrams. The historical process was based on Tcl/Tk and is
+ described at <a href="http://wiki.tcl-lang.org/21708">http://wiki.tcl-lang.org/21708</a>. The newer Pikchr-based syntax diagrams
+ first landed on trunk on 2020-09-26.</blockquote></li>
+<a name="q26"></a>
+<p><b>(26) The SQL standard requires that a UNIQUE constraint be enforced even if
+ one or more of the columns in the constraint are NULL, but SQLite does
+ not do this. Isn't that a bug?</b></p>
+<blockquote>Perhaps you are referring to the following statement from SQL92:
+
+ <blockquote>
+ A unique constraint is satisfied if and only if no two rows in a
+ table have the same non-null values in the unique columns.
+ </blockquote>
+
+ That statement is ambiguous, having at least two possible interpretations:
+
+ <ol>
+ <li>A unique constraint is satisfied if and only if no two rows in a
+ table have the same values and have non-null values in the unique columns.
+ <li>A unique constraint is satisfied if and only if no two rows in a
+ table have the same values in the subset of unique columns that are not null.
+ </ol>
+
+ SQLite follows interpretation (1), as does PostgreSQL, MySQL, Oracle,
+ and Firebird. It is true that Informix and Microsoft SQL Server use
+ interpretation (2), however we the SQLite developers hold that
+ interpretation (1) is the most natural reading
+ of the requirement and we also want to maximize compatibility with other
+ SQL database engines, and most other database engines also go with (1),
+ so that is what SQLite does.</blockquote></li>
+<a name="q27"></a>
+<p><b>(27) What is the Export Control Classification Number (ECCN) for SQLite?</b></p>
+<blockquote>After careful review of the Commerce Control List (CCL), we are convinced
+ that the core public-domain SQLite source code is not described by any ECCN,
+ hence the ECCN should be reported as <b>EAR99</b>.
+
+ <p>The above is true for the core public-domain SQLite. If you extend
+ SQLite by adding new code, or if you statically link SQLite with your
+ application, that might change the ECCN in your particular case.</blockquote></li>
+<a name="q28"></a>
+<p><b>(28) My query does not return the column name that I expect. Is this a bug?</b></p>
+<blockquote>If the columns of your result set are named by AS clauses, then SQLite
+ is guaranteed to use the identifier to the right of the AS keyword as the
+ column name. If the result set does not use an AS clause, then SQLite
+ is free to name the column anything it wants.
+ See the <a href="c3ref/column_name.html">sqlite3_column_name()</a> documentation for further information.</blockquote></li>
+</ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/faq.in?m=bd6b58b596cda2d3d">2021-07-27 23:51:29</a> UTC </small></i></p>
+
diff --git a/www/fasterthanfs.html b/www/fasterthanfs.html
new file mode 100644
index 0000000..3a1347d
--- /dev/null
+++ b/www/fasterthanfs.html
@@ -0,0 +1,644 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>35% Faster Than The Filesystem</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+35% Faster Than The Filesystem
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#summary">1. Summary</a></div>
+<div class="fancy-toc2"><a href="#caveats">1.1. Caveats</a></div>
+<div class="fancy-toc2"><a href="#related_studies">1.2. Related Studies</a></div>
+<div class="fancy-toc1"><a href="#how_these_measurements_are_made">2. How These Measurements Are Made</a></div>
+<div class="fancy-toc2"><a href="#read_performance_measurements">2.1. Read Performance Measurements</a></div>
+<div class="fancy-toc2"><a href="#write_performance_measurements">2.2. Write Performance Measurements</a></div>
+<div class="fancy-toc2"><a href="#variations">2.3. Variations</a></div>
+<div class="fancy-toc1"><a href="#general_findings">3. General Findings</a></div>
+<div class="fancy-toc1"><a href="#additional_notes">4. Additional Notes</a></div>
+<div class="fancy-toc2"><a href="#compiling_and_testing_on_android">4.1. Compiling And Testing on Android</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="summary"><span>1. </span>Summary</h1>
+
+<p>SQLite reads and writes small blobs (for example, thumbnail images)
+<a href="#approx">35% faster&sup1;</a> than the same blobs
+can be read from or written to individual files on disk using
+fread() or fwrite().
+
+</p><p>Furthermore, a single SQLite database holding
+10-kilobyte blobs uses about 20% less disk space than
+storing the blobs in individual files.
+
+</p><p>The performance difference arises (we believe) because when
+working from an SQLite database, the open() and close() system calls
+are invoked only once, whereas
+open() and close() are invoked once for each blob
+when using blobs stored in individual files. It appears that the
+overhead of calling open() and close() is greater than the overhead
+of using the database. The size reduction arises from the fact that
+individual files are padded out to the next multiple of the filesystem
+block size, whereas the blobs are packed more tightly into an SQLite
+database.
+
+</p><p>
+The measurements in this article were made during the week of 2017-06-05
+using a version of SQLite in between 3.19.2 and 3.20.0. You may expect
+future versions of SQLite to perform even better.
+
+</p><h2 id="caveats"><span>1.1. </span>Caveats</h2>
+
+<a name="approx"></a>
+<p>
+&sup1;The 35% figure above is approximate. Actual timings vary
+depending on hardware, operating system, and the
+details of the experiment, and due to random performance fluctuations
+on real-world hardware. See the text below for more detail.
+Try the experiments yourself. Report significant deviations on
+the <a href="support.html#fx">SQLite forum</a>.
+</p>
+
+<p>
+The 35% figure is based on running tests on every machine
+that the author has easily at hand.
+Some reviewers of this article report that SQLite has higher
+latency than direct I/O on their systems. We do not yet understand
+the difference. We also see indications that SQLite does not
+perform as well as direct I/O when experiments are run using
+a cold filesystem cache.
+
+</p><p>
+So let your take-away be this: read/write latency for
+SQLite is competitive with read/write latency of individual files on
+disk. Often SQLite is faster. Sometimes SQLite is almost
+as fast. Either way, this article disproves the common
+assumption that a relational database must be slower than direct
+filesystem I/O.
+
+</p><h2 id="related_studies"><span>1.2. </span>Related Studies</h2>
+
+<p>
+<a href="https://www.microsoft.com/en-us/research/people/gray/">Jim Gray</a>
+and others studied the read performance of BLOBs
+versus file I/O for Microsoft SQL Server and found that reading BLOBs
+out of the
+database was faster for BLOB sizes less than between 250KiB and 1MiB.
+(<a href="https://www.microsoft.com/en-us/research/publication/to-blob-or-not-to-blob-large-object-storage-in-a-database-or-a-filesystem/">Paper</a>).
+In that study, the database still stores the filename of the content even
+if the content is held in a separate file. So the database is consulted
+for every BLOB, even if it is only to extract the filename. In this
+article, the key for the BLOB is the filename, so no preliminary database
+access is required. Because the database is never used at all when
+reading content from individual files in this article, the threshold
+at which direct file I/O becomes faster is smaller than it is in Gray's
+paper.
+
+</p><p>
+The <a href="intern-v-extern-blob.html">Internal Versus External BLOBs</a> article on this website is an
+earlier investigation (circa 2011) that uses the same approach as the
+Jim Gray paper &mdash; storing the blob filenames as entries in the
+database &mdash; but for SQLite instead of SQL Server.
+
+
+
+</p><h1 id="how_these_measurements_are_made"><span>2. </span>How These Measurements Are Made</h1>
+
+<p>I/O performance is measured using the
+<a href="https://www.sqlite.org/src/file/test/kvtest.c">kvtest.c</a> program
+from the SQLite source tree.
+To compile this test program, first gather the kvtest.c source file
+into a directory with the <a href="amalgamation.html">SQLite amalgamation</a> source
+files "sqlite3.c" and "sqlite3.h". Then on unix, run a command like
+the following:
+
+</p><div class="codeblock"><pre>gcc -Os -I. -DSQLITE_DIRECT_OVERFLOW_READ &#92;
+ kvtest.c sqlite3.c -o kvtest -ldl -lpthread
+</pre></div>
+
+<p>Or on Windows with MSVC:
+
+</p><div class="codeblock"><pre>cl -I. -DSQLITE_DIRECT_OVERFLOW_READ kvtest.c sqlite3.c
+</pre></div>
+
+<p>Instructions for compiling for Android
+are <a href="#compile-android">shown below</a>.
+
+</p><p>
+Use the resulting "kvtest" program to
+generate a test database with 100,000 random uncompressible
+blobs, each with a random
+size between 8,000 and 12,000 bytes
+using a command like this:
+
+</p><div class="codeblock"><pre>./kvtest init test1.db --count 100k --size 10k --variance 2k
+</pre></div>
+
+<p>
+If desired, you can verify the new database by running this command:
+
+</p><div class="codeblock"><pre>./kvtest stat test1.db
+</pre></div>
+
+<p>
+Next, make copies of all the blobs into individual files in a directory
+using a command like this:
+
+</p><div class="codeblock"><pre>./kvtest export test1.db test1.dir
+</pre></div>
+
+<p>
+At this point, you can measure the amount of disk space used by
+the test1.db database and the space used by the test1.dir directory
+and all of its content. On a standard Ubuntu Linux desktop, the
+database file will be 1,024,512,000 bytes in size and the test1.dir
+directory will use 1,228,800,000 bytes of space (according to "du -k"),
+about 20% more than the database.
+
+</p><p>
+The "test1.dir" directory created above puts all the blobs into a single
+folder. It was conjectured that some operating systems would perform
+poorly when a single directory contains 100,000 objects. To test this,
+the kvtest program can also store the blobs in a hierarchy of folders with no
+more than 100 files and/or subdirectories per folder. The alternative
+on-disk representation of the blobs can be created using the --tree
+command-line option to the "export" command, like this:
+
+</p><div class="codeblock"><pre>./kvtest export test1.db test1.tree --tree
+</pre></div>
+
+<p>
+The test1.dir directory will contain 100,000 files
+with names like "000000", "000001", "000002" and so forth but the
+test1.tree directory will contain the same files in subdirectories like
+"00/00/00", "00/00/01", and so on. The test1.dir and test1.test
+directories take up approximately the same amount of space, though
+test1.test is very slightly larger due to the extra directory entries.
+
+</p><p>
+All of the experiments that follow operate the same with either
+"test1.dir" or "test1.tree". Very little performance difference is
+measured in either case, regardless of operating system.
+
+</p><p>
+Measure the performance for reading blobs from the database and from
+individual files using these commands:
+
+</p><div class="codeblock"><pre>./kvtest run test1.db --count 100k --blob-api
+./kvtest run test1.dir --count 100k --blob-api
+./kvtest run test1.tree --count 100k --blob-api
+</pre></div>
+
+<p>
+Depending on your hardware and operating system, you should see that reads
+from the test1.db database file are about 35% faster than reads from
+individual files in the test1.dir or test1.tree folders. Results can vary
+significantly from one run to the next due to caching, so it is advisable
+to run tests multiple times and take an average or a worst case or a best
+case, depending on your requirements.
+
+</p><p>The --blob-api option on the database read test causes kvtest to use
+the <a href="c3ref/blob_read.html">sqlite3_blob_read()</a> feature of SQLite to load the content of the
+blobs, rather than running pure SQL statements. This helps SQLite to run
+a little faster on read tests. You can omit that option to compare the
+performance of SQLite running SQL statements.
+In that case, the SQLite still out-performs direct reads, though
+by not as much as when using <a href="c3ref/blob_read.html">sqlite3_blob_read()</a>.
+The --blob-api option is ignored for tests that read from individual disk
+files.
+
+</p><p>
+Measure write performance by adding the --update option. This causes
+the blobs are overwritten in place with another random blob of
+exactly the same size.
+
+</p><div class="codeblock"><pre>./kvtest run test1.db --count 100k --update
+./kvtest run test1.dir --count 100k --update
+./kvtest run test1.tree --count 100k --update
+</pre></div>
+
+<p>
+The writing test above is not completely fair, since SQLite is doing
+<a href="transactional.html">power-safe transactions</a> whereas the direct-to-disk writing is not.
+To put the tests on a more equal footing, add either the --nosync
+option to the SQLite writes to disable calling fsync() or
+FlushFileBuffers() to force content to disk, or using the --fsync option
+for the direct-to-disk tests to force them to invoke fsync() or
+FlushFileBuffers() when updating disk files.
+
+</p><p>
+By default, kvtest runs the database I/O measurements all within
+a single transaction. Use the --multitrans option to run each blob
+read or write in a separate transaction. The --multitrans option makes
+SQLite much slower, and uncompetitive with direct disk I/O. This
+option proves, yet again, that to get the most performance out of
+SQLite, you should group as much database interaction as possible within
+a single transaction.
+
+</p><p>
+There are many other testing options, which can be seen by running
+the command:
+
+</p><div class="codeblock"><pre>./kvtest help
+</pre></div>
+
+<h2 id="read_performance_measurements"><span>2.1. </span>Read Performance Measurements</h2>
+
+<p>The chart below shows data collected using
+<a href="https://www.sqlite.org/src/file/test/kvtest.c">kvtest.c</a> on five different
+systems:
+
+</p><ul>
+<li><b>Win7</b>: A circa-2009 Dell Inspiron laptop, Pentium dual-core
+ at 2.30GHz, 4GiB RAM, Windows7.
+</li><li><b>Win10</b>: A 2016 Lenovo YOGA 910, Intel i7-7500 at 2.70GHz,
+ 16GiB RAM, Windows10.
+</li><li><b>Mac</b>: A 2015 MacBook Pro, 3.1GHz intel Core i7, 16GiB RAM,
+ MacOS 10.12.5
+</li><li><b>Ubuntu</b>: Desktop built from Intel i7-4770K at 3.50GHz, 32GiB RAM,
+ Ubuntu 16.04.2 LTS
+</li><li><b>Android</b>: Galaxy S3, ARMv7, 2GiB RAM
+</li></ul>
+
+<p>All machines use SSD except Win7 which has a
+hard-drive. The test database is 100K blobs with sizes uniformly
+distributed between 8K and 12K, for a total of about 1 gigabyte
+of content. The database page size
+is 4KiB. The -DSQLITE_DIRECT_OVERFLOW_READ compile-time option was
+used for all of these tests.
+Tests were run multiple times.
+The first run was used to warm up the cache and its timings were discarded.
+
+</p><p>
+The chart below shows average time to read a blob directly from the
+filesystem versus the time needed to read the same blob from the SQLite
+database.
+The actual timings vary considerably from one system to another
+(the Ubuntu desktop is much
+faster than the Galaxy S3 phone, for example).
+This chart shows the ratio of the
+times needed to read blobs from a file divided by the time needed to
+from the database. The left-most column in the chart is the normalized
+time to read from the database, for reference.
+
+</p><p>
+In this chart, an SQL statement ("SELECT v FROM kv WHERE k=?1")
+is prepared once. Then for each blob, the blob key value is bound
+to the ?1 parameter and the statement is evaluated to extract the
+blob content.
+
+</p><p>
+The chart shows that on Windows10, content can be read from the SQLite
+database about 5 times faster than it can be read directly from disk.
+On Android, SQLite is only about 35% faster than reading from disk.
+
+</p><center>
+<div class="imgcontainer">
+<img src="images/faster-read-sql.jpg">
+</div>
+<br>
+Chart 1: SQLite read latency relative to direct filesystem reads.<br>
+100K blobs, avg 10KB each, random order using SQL
+</center>
+
+<p>
+The performance can be improved slightly by bypassing the SQL layer
+and reading the blob content directly using the
+<a href="c3ref/blob_read.html">sqlite3_blob_read()</a> interface, as shown in the next chart:
+
+</p><center>
+<div class="imgcontainer">
+<img src="images/faster-read-blobapi.jpg">
+</div>
+<br>
+Chart 2: SQLite read latency relative to direct filesystem reads.<br>
+100K blobs, avg size 10KB, random order<br>
+using sqlite3_blob_read().
+</center>
+
+<p>
+Further performance improves can be made by using the
+<a href="mmap.html">memory-mapped I/O</a> feature of SQLite. In the next chart, the
+entire 1GB database file is memory mapped and blobs are read
+(in random order) using the <a href="c3ref/blob_read.html">sqlite3_blob_read()</a> interface.
+With these optimizations, SQLite is twice as fast as Android
+or MacOS-X and over 10 times faster than Windows.
+
+</p><center>
+<div class="imgcontainer">
+<img src="images/faster-read-mmap.jpg">
+</div>
+<br>
+Chart 3: SQLite read latency relative to direct filesystem reads.<br>
+100K blobs, avg size 10KB, random order<br>
+using sqlite3_blob_read() from a memory-mapped database.
+</center>
+
+<p>
+The third chart shows that reading blob content out of SQLite can be
+twice as fast as reading from individual files on disk for Mac and
+Android, and an amazing ten times faster for Windows.
+
+</p><h2 id="write_performance_measurements"><span>2.2. </span>Write Performance Measurements</h2>
+
+<p>
+Writes are slower.
+On all systems, using both direct I/O and SQLite, write performance is
+between 5 and 15 times slower than reads.
+
+</p><p>
+Write performance measurements were made by replacing (overwriting)
+an entire blob with a different blob. All of the blobs in these
+experiment are random and incompressible. Because writes are so much
+slower than reads, only 10,000 of the 100,000 blobs in the database
+are replaced. The blobs to be replaced are selected at random and
+are in no particular order.
+
+</p><p>
+The direct-to-disk writes are accomplished using fopen()/fwrite()/fclose().
+By default, and in all the results shown below, the OS filesystem buffers are
+never flushed to persistent storage using fsync() or
+FlushFileBuffers(). In other words, there is no attempt to make the
+direct-to-disk writes transactional or power-safe.
+We found that invoking fsync() or FlushFileBuffers() on each file
+written causes direct-to-disk storage
+to be about 10 times or more slower than writes to SQLite.
+
+</p><p>
+The next chart compares SQLite database updates in <a href="wal.html">WAL mode</a>
+against raw direct-to-disk overwrites of separate files on disk.
+The <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting is NORMAL.
+All database writes are in a single transaction.
+The timer for the database writes is stopped after the transaction
+commits, but before a <a href="wal.html#ckpt">checkpoint</a> is run.
+Note that the SQLite writes, unlike the direct-to-disk writes,
+are <a href="transactional.html">transactional</a> and <a href="transactional.html">power-safe</a>, though because the synchronous
+setting is NORMAL instead of FULL, the transactions are not durable.
+
+</p><center>
+<div class="imgcontainer">
+<img src="images/faster-write-safe.jpg">
+</div>
+<br>
+Chart 4: SQLite write latency relative to direct filesystem writes.<br>
+10K blobs, avg size 10KB, random order,<br>
+WAL mode with synchronous NORMAL,<br>
+exclusive of checkpoint time
+</center>
+
+<p>
+The android performance numbers for the write experiments are omitted
+because the performance tests on the Galaxy S3 are so random. Two
+consecutive runs of the exact same experiment would give wildly different
+times. And, to be fair, the performance of SQLite on android is slightly
+slower than writing directly to disk.
+
+</p><p>
+The next chart shows the performance of SQLite versus direct-to-disk
+when transactions are disabled (<a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=OFF</a>)
+and <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> is set to OFF. These settings put SQLite on an
+equal footing with direct-to-disk writes, which is to say they make the
+data prone to corruption due to system crashes and power failures.
+
+</p><center>
+<div class="imgcontainer">
+<img src="images/faster-write-unsafe.jpg">
+</div>
+<br>
+Chart 5: SQLite write latency relative to direct filesystem writes.<br>
+10K blobs, avg size 10KB, random order,<br>
+journaling disabled, synchronous OFF.
+</center>
+
+<p>
+In all of the write tests, it is important to disable anti-virus software
+prior to running the direct-to-disk performance tests. We found that
+anti-virus software slows down direct-to-disk by an order of magnitude
+whereas it impacts SQLite writes very little. This is probably due to the
+fact that direct-to-disk changes thousands of separate files which all need
+to be checked by anti-virus, whereas SQLite writes only changes the single
+database file.
+
+</p><h2 id="variations"><span>2.3. </span>Variations</h2>
+
+<p>The <a href="compile.html#direct_overflow_read">-DSQLITE_DIRECT_OVERFLOW_READ</a> compile-time option causes SQLite
+to bypass its page cache when reading content from overflow pages. This
+helps database reads of 10K blobs run a little faster, but not all that much
+faster. SQLite still holds a speed advantage over direct filesystem reads
+without the SQLITE_DIRECT_OVERFLOW_READ compile-time option.
+
+</p><p>Other compile-time options such as using -O3 instead of -Os or
+using <a href="compile.html#threadsafe">-DSQLITE_THREADSAFE=0</a> and/or some of the other
+<a href="compile.html#rcmd">recommended compile-time options</a> might help SQLite to run even faster
+relative to direct filesystem reads.
+
+</p><p>The size of the blobs in the test data affects performance.
+The filesystem will generally be faster for larger blobs, since
+the overhead of open() and close() is amortized over more bytes of I/O,
+whereas the database will be more efficient in both speed and space
+as the average blob size decreases.
+
+
+</p><h1 id="general_findings"><span>3. </span>General Findings</h1>
+
+<ol type="A">
+<li>
+<p>SQLite is competitive with, and usually faster than, blobs stored in
+separate files on disk, for both reading and writing.
+
+</p></li><li>
+<p>SQLite is much faster than direct writes to disk on Windows
+when anti-virus protection is turned on. Since anti-virus software
+is and should be on by default in Windows, that means that SQLite
+is generally much faster than direct disk writes on Windows.
+
+</p></li><li>
+<p>Reading is about an order of magnitude faster than writing, for all
+systems and for both SQLite and direct-to-disk I/O.
+
+</p></li><li>
+<p>I/O performance varies widely depending on operating system and hardware.
+Make your own measurements before drawing conclusions.
+
+</p></li><li>
+<p>Some other SQL database engines advise developers to store blobs in separate
+files and then store the filename in the database. In that case, where
+the database must first be consulted to find the filename before opening
+and reading the file, simply storing the entire blob in the database
+gives much faster read and write performance with SQLite.
+See the <a href="intern-v-extern-blob.html">Internal Versus External BLOBs</a> article for more information.
+</p></li></ol>
+
+
+<h1 id="additional_notes"><span>4. </span>Additional Notes</h1>
+
+<a name="compile-android"></a>
+<h2 id="compiling_and_testing_on_android"><span>4.1. </span>Compiling And Testing on Android</h2>
+
+<p>
+The kvtest program is compiled and run on Android as follows.
+First install the Android SDK and NDK. Then prepare a script
+named "android-gcc" that looks approximately like this:
+
+</p><div class="codeblock"><pre>#!/bin/sh
+#
+NDK=/home/drh/Android/Sdk/ndk-bundle
+SYSROOT=$NDK/platforms/android-16/arch-arm
+ABIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin
+GCC=$ABIN/arm-linux-androideabi-gcc
+$GCC --sysroot=$SYSROOT -fPIC -pie $*
+</pre></div>
+
+<p>Make that script executable and put it on your $PATH. Then
+compile the kvtest program as follows:
+
+</p><div class="codeblock"><pre>android-gcc -Os -I. kvtest.c sqlite3.c -o kvtest-android
+</pre></div>
+
+<p>Next, move the resulting kvtest-android executable to the Android
+device:
+
+</p><div class="codeblock"><pre>adb push kvtest-android /data/local/tmp
+</pre></div>
+
+<p>Finally use "adb shell" to get a shell prompt on the Android device,
+cd into the /data/local/tmp directory, and begin running the tests
+as with any other unix host.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/fasterthanfs.in?m=8db5c86b5b4ac3c05">2021-03-01 12:55:48</a> UTC </small></i></p>
+
diff --git a/www/favicon.ico b/www/favicon.ico
new file mode 100644
index 0000000..ddca310
--- /dev/null
+++ b/www/favicon.ico
Binary files differ
diff --git a/www/features.html b/www/features.html
new file mode 100644
index 0000000..4b4f426
--- /dev/null
+++ b/www/features.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Features Of SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1 align=center>Features Of SQLite</h1>
+
+<p><ul>
+<li><a href="transactional.html">Transactions</a>
+ are atomic, consistent, isolated, and durable (ACID)
+ even after system crashes and power failures.</li>
+<li><a href="zeroconf.html">Zero-configuration</a>
+ - no setup or administration needed.</li>
+<li><a href="fullsql.html">Full-featured SQL</a> implementation
+ with advanced capabilities like <a href="partialindex.html">partial indexes</a>,
+ <a href="expridx.html">indexes on expressions</a>, <a href="json1.html">JSON</a>,
+ <a href="lang_with.html">common table expressions</a>, and <a href="windowfunctions.html">window functions</a>.
+ (<a href="omitted.html">Omitted features</a>)</li>
+<li>A complete database is stored in a
+ <a href="onefile.html">single cross-platform disk file</a>.
+ Great for use as an <a href="appfileformat.html">application file format</a>.</li>
+<li>Supports terabyte-sized databases and gigabyte-sized strings
+ and blobs. (See <a href="limits.html">limits.html</a>.)
+<li>Small code <a href="footprint.html">footprint</a>:
+ less than 750KiB fully configured or much less
+ with optional features omitted.</li>
+<li>Simple, easy to use <a href="cintro.html">API</a>.</li>
+<li>Fast: In some cases, SQLite is
+ <a href="fasterthanfs.html">faster than direct filesystem I/O</a>
+<li>Written in ANSI-C. <a href="tclsqlite.html">TCL bindings</a> included.
+ Bindings for dozens of other languages available separately.</li>
+<li>Well-commented source code with
+ <a href="testing.html#coverage">100% branch test coverage</a>.</li>
+<li>Available as a
+ <a href="amalgamation.html">single ANSI-C source-code file</a>
+ that is <a href="howtocompile.html">easy to compile</a> and hence is easy
+ to add into a larger project.
+<li><a href="selfcontained.html">Self-contained</a>:
+ no external dependencies.</li>
+<li>Cross-platform: Android, *BSD, iOS, Linux, Mac, Solaris, VxWorks,
+ and Windows (Win32, WinCE, WinRT)
+ are supported out of the box. Easy to port to other systems.
+<li>Sources are in the <a href="copyright.html">public domain</a>.
+ Use for any purpose.</li>
+<li>Comes with a standalone <a href="cli.html">command-line interface</a>
+ (CLI) client that can be used to administer SQLite databases.</li>
+</ul>
+</p>
+
+<h2>Suggested Uses For SQLite:</h2>
+
+<p><ul>
+<li><p><b>Database For The Internet Of Things.</b>
+SQLite is popular choice for the database engine in cellphones,
+PDAs, MP3 players, set-top boxes, and other electronic gadgets.
+SQLite has a small code footprint, makes efficient use of memory,
+disk space, and disk bandwidth, is highly reliable, and requires
+no maintenance from a Database Administrator.</p></li>
+
+<li><p><b>Application File Format.</b>
+Rather than using fopen() to write XML, JSON, CSV,
+or some proprietary format into
+disk files used by your application, use an SQLite database.
+You'll avoid having to write and troubleshoot a parser, your data
+will be more easily accessible and cross-platform, and your updates
+will be transactional. (<a href="appfileformat.html">more...</a>)</p></li>
+
+<li><p><b>Website Database.</b>
+Because it requires no configuration and stores information in ordinary
+disk files, SQLite is a popular choice as the database to back small
+to medium-sized websites.</p></li>
+
+<li><p><b>Stand-in For An Enterprise RDBMS.</b>
+SQLite is often used as a surrogate for an enterprise RDBMS for
+demonstration purposes or for testing. SQLite is fast and requires
+no setup, which takes a lot of the hassle out of testing and which
+makes demos perky and easy to launch.</p></li>
+
+<li><p><a href="./whentouse.html">More suggestions...</a></p></li>
+</ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/features.in?m=4569e5ca2737be66a">2022-02-21 19:15:54</a> UTC </small></i></p>
+
diff --git a/www/fileformat.html b/www/fileformat.html
new file mode 100644
index 0000000..7c6000a
--- /dev/null
+++ b/www/fileformat.html
@@ -0,0 +1,2205 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Database File Format</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Database File Format
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#the_database_file">1. The Database File</a></div>
+<div class="fancy-toc2"><a href="#hot_journals">1.1. Hot Journals</a></div>
+<div class="fancy-toc2"><a href="#pages">1.2. Pages</a></div>
+<div class="fancy-toc2"><a href="#the_database_header">1.3. The Database Header</a></div>
+<div class="fancy-toc3"><a href="#magic_header_string">1.3.1. Magic Header String</a></div>
+<div class="fancy-toc3"><a href="#page_size">1.3.2. Page Size</a></div>
+<div class="fancy-toc3"><a href="#file_format_version_numbers">1.3.3. File format version numbers</a></div>
+<div class="fancy-toc3"><a href="#reserved_bytes_per_page">1.3.4. Reserved bytes per page</a></div>
+<div class="fancy-toc3"><a href="#payload_fractions">1.3.5. Payload fractions</a></div>
+<div class="fancy-toc3"><a href="#file_change_counter">1.3.6. File change counter</a></div>
+<div class="fancy-toc3"><a href="#in_header_database_size">1.3.7. In-header database size</a></div>
+<div class="fancy-toc3"><a href="#free_page_list">1.3.8. Free page list</a></div>
+<div class="fancy-toc3"><a href="#schema_cookie">1.3.9. Schema cookie</a></div>
+<div class="fancy-toc3"><a href="#schema_format_number">1.3.10. Schema format number</a></div>
+<div class="fancy-toc3"><a href="#suggested_cache_size">1.3.11. Suggested cache size</a></div>
+<div class="fancy-toc3"><a href="#incremental_vacuum_settings">1.3.12. Incremental vacuum settings</a></div>
+<div class="fancy-toc3"><a href="#text_encoding">1.3.13. Text encoding</a></div>
+<div class="fancy-toc3"><a href="#user_version_number">1.3.14. User version number</a></div>
+<div class="fancy-toc3"><a href="#application_id">1.3.15. Application ID</a></div>
+<div class="fancy-toc3"><a href="#write_library_version_number_and_version_valid_for_number">1.3.16. Write library version number and version-valid-for number</a></div>
+<div class="fancy-toc3"><a href="#header_space_reserved_for_expansion">1.3.17. Header space reserved for expansion</a></div>
+<div class="fancy-toc2"><a href="#the_lock_byte_page">1.4. The Lock-Byte Page</a></div>
+<div class="fancy-toc2"><a href="#the_freelist">1.5. The Freelist</a></div>
+<div class="fancy-toc2"><a href="#b_tree_pages">1.6. B-tree Pages</a></div>
+<div class="fancy-toc2"><a href="#cell_payload_overflow_pages">1.7. Cell Payload Overflow Pages</a></div>
+<div class="fancy-toc2"><a href="#pointer_map_or_ptrmap_pages">1.8. Pointer Map or Ptrmap Pages</a></div>
+<div class="fancy-toc1"><a href="#schema_layer">2. Schema Layer</a></div>
+<div class="fancy-toc2"><a href="#record_format">2.1. Record Format</a></div>
+<div class="fancy-toc2"><a href="#record_sort_order">2.2. Record Sort Order</a></div>
+<div class="fancy-toc2"><a href="#representation_of_sql_tables">2.3. Representation Of SQL Tables</a></div>
+<div class="fancy-toc2"><a href="#representation_of_without_rowid_tables">2.4. Representation of WITHOUT ROWID Tables</a></div>
+<div class="fancy-toc3"><a href="#suppression_of_redundant_columns_in_the_primary_key_of_without_rowid_tables">2.4.1. Suppression of redundant columns in the PRIMARY KEY
+of WITHOUT ROWID tables</a></div>
+<div class="fancy-toc2"><a href="#representation_of_sql_indices">2.5. Representation Of SQL Indices</a></div>
+<div class="fancy-toc3"><a href="#suppression_of_redundant_columns_in_without_rowid_secondary_indexes_">2.5.1. Suppression of redundant columns in WITHOUT ROWID secondary indexes
+</a></div>
+<div class="fancy-toc2"><a href="#storage_of_the_sql_database_schema">2.6. Storage Of The SQL Database Schema</a></div>
+<div class="fancy-toc3"><a href="#alternative_names_for_the_schema_table">2.6.1. Alternative Names For The Schema Table</a></div>
+<div class="fancy-toc3"><a href="#internal_schema_objects">2.6.2. Internal Schema Objects</a></div>
+<div class="fancy-toc3"><a href="#the_sqlite_sequence_table">2.6.3. The sqlite_sequence table</a></div>
+<div class="fancy-toc3"><a href="#the_sqlite_stat1_table">2.6.4. The sqlite_stat1 table</a></div>
+<div class="fancy-toc3"><a href="#the_sqlite_stat2_table">2.6.5. The sqlite_stat2 table</a></div>
+<div class="fancy-toc3"><a href="#the_sqlite_stat3_table">2.6.6. The sqlite_stat3 table</a></div>
+<div class="fancy-toc3"><a href="#the_sqlite_stat4_table">2.6.7. The sqlite_stat4 table</a></div>
+<div class="fancy-toc1"><a href="#the_rollback_journal">3. The Rollback Journal</a></div>
+<div class="fancy-toc1"><a href="#the_write_ahead_log">4. The Write-Ahead Log</a></div>
+<div class="fancy-toc2"><a href="#wal_file_format">4.1. WAL File Format</a></div>
+<div class="fancy-toc2"><a href="#checksum_algorithm">4.2. Checksum Algorithm</a></div>
+<div class="fancy-toc2"><a href="#checkpoint_algorithm">4.3. Checkpoint Algorithm</a></div>
+<div class="fancy-toc2"><a href="#wal_reset">4.4. WAL Reset</a></div>
+<div class="fancy-toc2"><a href="#reader_algorithm">4.5. Reader Algorithm</a></div>
+<div class="fancy-toc2"><a href="#wal_index_format">4.6. WAL-Index Format</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+
+<p>This document describes and defines the on-disk database file
+format used by all releases of SQLite since
+version 3.0.0 (2004-06-18).</p>
+
+<h1 id="the_database_file"><span>1. </span>The Database File</h1>
+
+<p>The complete state of an SQLite database is usually
+contained in a single file on disk called the "main database file".</p>
+
+<p>During a transaction, SQLite stores additional information
+in a second file called the "rollback journal", or if SQLite is in
+<a href="wal.html">WAL mode</a>, a write-ahead log file.
+
+<a name="hotjrnl"></a>
+
+</p><h2 id="hot_journals"><span>1.1. </span>Hot Journals</h2>
+<p>If the application or
+host computer crashes before the transaction completes, then the rollback
+journal or write-ahead log contains information needed
+to restore the main database file to a consistent state. When a rollback
+journal or write-ahead log contains information necessary for recovering
+the state of the database, they are called a "hot journal" or "hot WAL file".
+Hot journals and WAL files are only a factor during error recovery
+scenarios and so are uncommon, but they are part of the state of an SQLite
+database and so cannot be ignored. This document defines the format
+of a rollback journal and the write-ahead log file, but the focus is
+on the main database file.</p>
+
+<h2 id="pages"><span>1.2. </span>Pages</h2>
+
+<p>The main database file consists of one or more pages. The size of a
+page is a power of two between 512 and 65536 inclusive. All pages within
+the same database are the same size. The page size for a database file
+is determined by the 2-byte integer located at an offset of
+16 bytes from the beginning of the database file.</p>
+
+<p>Pages are numbered beginning with 1. The maximum page number is
+4294967294 (2<sup><small>32</small></sup> - 2). The minimum size
+SQLite database is a single 512-byte page.
+The maximum size database would be 2147483646 pages at 65536 bytes per
+page or 281,474,976,579,584 bytes (about 281 terabytes). Usually SQLite will
+hit the maximum file size limit of the underlying filesystem or disk
+hardware long before it hits its own internal size limit.</p>
+
+<p>In common use, SQLite databases tend to range in size from a few kilobytes
+to a few gigabytes, though terabyte-size SQLite databases are known to exist
+in production.</p>
+
+<p>At any point in time, every page in the main database has a single
+use which is one of the following:
+</p><ul>
+<li>The lock-byte page
+</li><li>A freelist page
+<ul>
+<li>A freelist trunk page
+</li><li>A freelist leaf page
+</li></ul>
+</li><li>A b-tree page
+<ul>
+<li>A table b-tree interior page
+</li><li>A table b-tree leaf page
+</li><li>An index b-tree interior page
+</li><li>An index b-tree leaf page
+</li></ul>
+</li><li>A payload overflow page
+</li><li>A pointer map page
+</li></ul>
+
+
+<p>All reads from and writes to the main database file begin at a page
+boundary and all writes are an integer number of pages in size. Reads
+are also usually an integer number of pages in size, with the one exception
+that when the database is first opened, the first 100 bytes of the
+database file (the database file header) are read as a sub-page size unit.</p>
+
+<p>Before any information-bearing page of the database is modified,
+the original unmodified content of that page is written into the
+rollback journal. If a transaction is interrupted and needs to be
+rolled back, the rollback journal can then be used to restore the
+database to its original state. Freelist leaf pages bear no
+information that would need to be restored on a rollback and so they
+are not written to the journal prior to modification, in order to
+reduce disk I/O.</p>
+
+<a name="database_header"></a>
+
+<h2 id="the_database_header"><span>1.3. </span>The Database Header</h2>
+
+<p>The first 100 bytes of the database file comprise the database file
+header. The database file header is divided into fields as shown by
+the table below. All multibyte fields in the database file header are
+stored with the most significant byte first (big-endian).</p>
+
+<center>
+<i>Database Header Format</i><br>
+<table width="80%" border="1">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td valign="top" align="center">0</td><td valign="top" align="center">16</td><td align="left">
+The header string: "SQLite format 3\000"
+</td></tr><tr><td valign="top" align="center">16</td><td valign="top" align="center">2</td><td align="left">
+The database page size in bytes. Must be a power of two between 512
+and 32768 inclusive, or the value 1 representing a page size of 65536.
+</td></tr><tr><td valign="top" align="center">18</td><td valign="top" align="center">1</td><td align="left">
+File format write version. 1 for legacy; 2 for <a href="wal.html">WAL</a>.
+</td></tr><tr><td valign="top" align="center">19</td><td valign="top" align="center">1</td><td align="left">
+File format read version. 1 for legacy; 2 for <a href="wal.html">WAL</a>.
+</td></tr><tr><td valign="top" align="center">20</td><td valign="top" align="center">1</td><td align="left">
+Bytes of unused "reserved" space at the end of each page. Usually 0.
+</td></tr><tr><td valign="top" align="center">21</td><td valign="top" align="center">1</td><td align="left">
+Maximum embedded payload fraction. Must be 64.
+</td></tr><tr><td valign="top" align="center">22</td><td valign="top" align="center">1</td><td align="left">
+Minimum embedded payload fraction. Must be 32.
+</td></tr><tr><td valign="top" align="center">23</td><td valign="top" align="center">1</td><td align="left">
+Leaf payload fraction. Must be 32.
+</td></tr><tr><td valign="top" align="center">24</td><td valign="top" align="center">4</td><td align="left">
+File change counter.
+</td></tr><tr><td valign="top" align="center">28</td><td valign="top" align="center">4</td><td align="left">
+Size of the database file in pages. The "in-header database size".
+</td></tr><tr><td valign="top" align="center">32</td><td valign="top" align="center">4</td><td align="left">
+Page number of the first freelist trunk page.
+</td></tr><tr><td valign="top" align="center">36</td><td valign="top" align="center">4</td><td align="left">
+Total number of freelist pages.
+</td></tr><tr><td valign="top" align="center">40</td><td valign="top" align="center">4</td><td align="left">
+The schema cookie.
+</td></tr><tr><td valign="top" align="center">44</td><td valign="top" align="center">4</td><td align="left">
+The schema format number. Supported schema formats are 1, 2, 3, and 4.
+</td></tr><tr><td valign="top" align="center">48</td><td valign="top" align="center">4</td><td align="left">
+Default page cache size.
+</td></tr><tr><td valign="top" align="center">52</td><td valign="top" align="center">4</td><td align="left">
+The page number of the largest root b-tree page when in auto-vacuum or
+incremental-vacuum modes, or zero otherwise.
+</td></tr><tr><td valign="top" align="center">56</td><td valign="top" align="center">4</td><td align="left">
+The database text encoding. A value of 1 means UTF-8. A value of 2
+means UTF-16le. A value of 3 means UTF-16be.
+</td></tr><tr><td valign="top" align="center">60</td><td valign="top" align="center">4</td><td align="left">
+The "user version" as read and set by the <a href="pragma.html#pragma_user_version">user_version pragma</a>.
+</td></tr><tr><td valign="top" align="center">64</td><td valign="top" align="center">4</td><td align="left">
+True (non-zero) for incremental-vacuum mode. False (zero) otherwise.
+</td></tr><tr><td valign="top" align="center">68</td><td valign="top" align="center">4</td><td align="left">
+The "Application ID" set by <a href="pragma.html#pragma_application_id">PRAGMA application_id</a>.
+</td></tr><tr><td valign="top" align="center">72</td><td valign="top" align="center">20</td><td align="left">
+Reserved for expansion. Must be zero.
+</td></tr><tr><td valign="top" align="center">92</td><td valign="top" align="center">4</td><td align="left">
+The <a href="fileformat2.html#validfor">version-valid-for number</a>.
+</td></tr><tr><td valign="top" align="center">96</td><td valign="top" align="center">4</td><td align="left">
+<a href="c3ref/c_source_id.html">SQLITE_VERSION_NUMBER</a>
+</td></tr></table></center>
+
+<h3 id="magic_header_string"><span>1.3.1. </span>Magic Header String</h3>
+
+<p>Every valid SQLite database file begins with the following 16 bytes
+(in hex): 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00. This byte sequence
+corresponds to the UTF-8 string "SQLite format 3" including the nul
+terminator character at the end.</p>
+
+<h3 id="page_size"><span>1.3.2. </span>Page Size</h3>
+
+<p>The two-byte value beginning at offset 16 determines the page size of
+the database. For SQLite versions 3.7.0.1 (2010-08-04)
+and earlier, this value is
+interpreted as a big-endian integer and must be a power of two between
+512 and 32768, inclusive. Beginning with SQLite <a href="releaselog/3_7_1.html">version 3.7.1</a>
+(2010-08-23), a page
+size of 65536 bytes is supported. The value 65536 will not fit in a
+two-byte integer, so to specify a 65536-byte page size, the value
+at offset 16 is 0x00 0x01.
+This value can be interpreted as a big-endian
+1 and thought of as a magic number to represent the 65536 page size.
+Or one can view the two-byte field as a little endian number and say
+that it represents the page size divided by 256. These two
+interpretations of the page-size field are equivalent.</p>
+
+<a name="vnums"></a>
+
+<h3 id="file_format_version_numbers"><span>1.3.3. </span>File format version numbers</h3>
+
+<p>The file format write version and file format read version at offsets
+18 and 19 are intended to allow for enhancements of the file format
+in future versions of SQLite. In current versions of SQLite, both of
+these values are 1 for rollback journalling modes and 2 for <a href="wal.html">WAL</a>
+journalling mode. If a version of SQLite coded to the current
+file format specification encounters a database file where the read
+version is 1 or 2 but the write version is greater than 2, then the database
+file must be treated as read-only. If a database file with a read version
+greater than 2 is encountered, then that database cannot be read or written.</p>
+
+<a name="resbyte"></a>
+
+<h3 id="reserved_bytes_per_page"><span>1.3.4. </span>Reserved bytes per page</h3>
+
+<p>SQLite has the ability to set aside a small number of extra bytes at
+the end of every page for use by extensions. These extra bytes are
+used, for example, by the SQLite Encryption Extension to store a nonce
+and/or cryptographic checksum associated with each page. The
+"reserved space" size in the 1-byte integer at offset 20 is the number
+of bytes of space at the end of each page to reserve for extensions.
+This value is usually 0. The value can be odd.</p>
+
+<a name="usable_size"></a>
+
+<p>The "usable size" of a database page is the page size specified by the
+2-byte integer at offset 16 in the header less the "reserved" space size
+recorded in the 1-byte integer at offset 20 in the header. The usable
+size of a page might be an odd number. However, the usable size is not
+allowed to be less than 480. In other words, if the page size is 512,
+then the reserved space size cannot exceed 32.</p>
+
+<h3 id="payload_fractions"><span>1.3.5. </span>Payload fractions</h3>
+
+<p>The maximum and minimum embedded payload fractions and the leaf
+payload fraction values must be 64, 32, and 32. These values were
+originally intended to be tunable parameters that could be used to
+modify the storage format of the b-tree algorithm. However, that
+functionality is not supported and there are no current plans to add
+support in the future. Hence, these three bytes are fixed at the
+values specified.</p>
+
+<h3 id="file_change_counter"><span>1.3.6. </span>File change counter</h3>
+
+<a name="chngctr"></a>
+
+<p>The file change counter is a 4-byte big-endian integer at
+offset 24 that is incremented whenever the database file is unlocked
+after having been modified.
+When two or more processes are reading the same database file, each
+process can detect database changes from other processes by monitoring
+the change counter.
+A process will normally want to flush its database page cache when
+another process modified the database, since the cache has become stale.
+The file change counter facilitates this.</p>
+
+<p>In WAL mode, changes to the database are detected using the wal-index
+and so the change counter is not needed. Hence, the change counter might
+not be incremented on each transaction in WAL mode.</p>
+
+<h3 id="in_header_database_size"><span>1.3.7. </span>In-header database size</h3>
+
+<a name="filesize"></a>
+
+<p>The 4-byte big-endian integer at offset 28 into the header
+stores the size of the database file in pages. If this in-header
+datasize size is not valid (see the next paragraph), then the database
+size is computed by looking
+at the actual size of the database file. Older versions of SQLite
+ignored the in-header database size and used the actual file size
+exclusively. Newer versions of SQLite use the in-header database
+size if it is available but fall back to the actual file size if
+the in-header database size is not valid.</p>
+
+<p>The in-header database size is only considered to be valid if
+it is non-zero and if the 4-byte <a href="fileformat2.html#chngctr">change counter</a> at offset 24
+exactly matches the 4-byte <a href="fileformat2.html#validfor">version-valid-for number</a> at offset 92.
+The in-header database size is always valid
+when the database is only modified using recent versions of SQLite,
+versions 3.7.0 (2010-07-21) and later.
+If a legacy version of SQLite writes to the database, it will not
+know to update the in-header database size and so the in-header
+database size could be incorrect. But legacy versions of SQLite
+will also leave the version-valid-for number at offset 92 unchanged
+so it will not match the change-counter. Hence, invalid in-header
+database sizes can be detected (and ignored) by observing when
+the change-counter does not match the version-valid-for number.</p>
+
+<h3 id="free_page_list"><span>1.3.8. </span>Free page list</h3>
+
+<p>Unused pages in the database file are stored on a freelist. The
+4-byte big-endian integer at offset 32 stores the page number of
+the first page of the freelist, or zero if the freelist is empty.
+The 4-byte big-endian integer at offset 36 stores the total
+number of pages on the freelist.</p>
+
+<h3 id="schema_cookie"><span>1.3.9. </span>Schema cookie</h3>
+
+<p>The schema cookie is a 4-byte big-endian integer at offset 40
+that is incremented whenever the database schema changes. A
+prepared statement is compiled against a specific version of the
+database schema. When the database schema changes, the statement
+must be reprepared. When a prepared statement runs, it first checks
+the schema cookie to ensure the value is the same as when the statement
+was prepared and if the schema cookie has changed, the statement either
+automatically reprepares and reruns or it aborts with an <a href="rescode.html#schema">SQLITE_SCHEMA</a>
+error.</p>
+
+<a name="schemaformat"></a>
+
+<h3 id="schema_format_number"><span>1.3.10. </span>Schema format number</h3>
+
+<p>The schema format number is a 4-byte big-endian integer at offset 44.
+The schema format number is similar to the file format read and write
+version numbers at offsets 18 and 19 except that the schema format number
+refers to the high-level SQL formatting rather than the low-level b-tree
+formatting. Four schema format numbers are currently defined:</p>
+
+<ol>
+<li value="1">Format 1 is understood by all versions of SQLite back to
+<a href="releaselog/3_0_0.html">version 3.0.0</a> (2004-06-18).</li>
+<li value="2">Format 2 adds the ability of rows within the same table
+to have a varying number of columns, in order to support the
+<a href="lang_altertable.html">ALTER TABLE ... ADD COLUMN</a> functionality. Support for
+reading and writing format 2 was added in SQLite
+<a href="releaselog/3_1_3.html">version 3.1.3</a> on 2005-02-20.</li>
+<li value="3">Format 3 adds the ability of extra columns added by
+<a href="lang_altertable.html">ALTER TABLE ... ADD COLUMN</a> to have non-NULL default
+values. This capability was added in SQLite <a href="releaselog/3_1_4.html">version 3.1.4</a>
+on 2005-03-11.</li>
+<li value="4">Format 4 causes SQLite to respect the
+<a href="lang_createindex.html#descidx">DESC keyword</a> on
+index declarations. (The DESC keyword is ignored in indexes for
+formats 1, 2, and 3.)
+Format 4 also adds two new boolean record type values (<a href="fileformat2.html#serialtype">serial types</a>
+8 and 9). Support for format 4 was added in SQLite 3.3.0 on
+2006-01-10.</li>
+</ol>
+
+<p>New database files created by SQLite use format 4 by default.
+The <a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a> can be used to cause SQLite
+to create new database files using format 1.
+The format version number can be made to default to 1 instead of 4 by
+setting <a href="compile.html#default_file_format">SQLITE_DEFAULT_FILE_FORMAT</a>=1 at compile-time.
+</p>
+
+<h3 id="suggested_cache_size"><span>1.3.11. </span>Suggested cache size</h3>
+
+<p>The 4-byte big-endian signed integer at offset 48 is the suggested
+cache size in pages for the database file. The value is a suggestion
+only and SQLite is under no obligation to honor it. The absolute value
+of the integer is used as the suggested size. The suggested cache size
+can be set using the <a href="pragma.html#pragma_default_cache_size">default_cache_size pragma</a>.</p>
+
+<h3 id="incremental_vacuum_settings"><span>1.3.12. </span>Incremental vacuum settings</h3>
+
+<p>The two 4-byte big-endian integers at offsets 52 and 64 are used
+to manage the <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> and <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> modes. If
+the integer at offset 52 is zero then pointer-map (ptrmap) pages are
+omitted from the database file and neither auto_vacuum nor
+incremental_vacuum are supported. If the integer at offset 52 is
+non-zero then it is the page number of the largest root page in the
+database file, the database file will contain ptrmap pages, and the
+mode must be either auto_vacuum or incremental_vacuum. In this latter
+case, the integer at offset 64 is true for incremental_vacuum and
+false for auto_vacuum. If the integer at offset 52 is zero then
+the integer at offset 64 must also be zero.</p>
+
+<a name="enc"></a>
+
+<h3 id="text_encoding"><span>1.3.13. </span>Text encoding</h3>
+
+<p>The 4-byte big-endian integer at offset 56 determines the encoding
+used for all text strings stored in the database.
+A value of 1 means UTF-8.
+A value of 2 means UTF-16le.
+A value of 3 means UTF-16be.
+No other values are allowed.
+The sqlite3.h header file defines C-preprocessor macros SQLITE_UTF8 as 1,
+SQLITE_UTF16LE as 2, and SQLITE_UTF16BE as 3, to use in place of
+the numeric codes for the text encoding.</p>
+
+<h3 id="user_version_number"><span>1.3.14. </span>User version number</h3>
+
+<p>The 4-byte big-endian integer at offset 60 is the user version which
+is set and queried by the <a href="pragma.html#pragma_user_version">user_version pragma</a>. The user version is
+not used by SQLite.</p>
+
+<a name="appid"></a>
+
+<h3 id="application_id"><span>1.3.15. </span>Application ID</h3>
+
+<p>The 4-byte big-endian integer at offset 68 is an "Application ID" that
+can be set by the <a href="pragma.html#pragma_application_id">PRAGMA application_id</a> command in order to identify the
+database as belonging to or associated with a particular application.
+The application ID is intended for database files used as an
+<a href="appfileformat.html">application file-format</a>. The application ID can be used by utilities
+such as <a href="http://www.darwinsys.com/file/">file(1)</a> to determine the specific
+file type rather than just reporting "SQLite3 Database". A list of
+assigned application IDs can be seen by consulting the
+<a href="http://www.sqlite.org/src/artifact?ci=trunk&filename=magic.txt">magic.txt</a>
+file in the SQLite source repository.</p>
+
+<a name="validfor"></a>
+
+<h3 id="write_library_version_number_and_version_valid_for_number"><span>1.3.16. </span>Write library version number and version-valid-for number</h3>
+
+<p>The 4-byte big-endian integer at offset 96 stores the
+<a href="c3ref/c_source_id.html">SQLITE_VERSION_NUMBER</a> value for the SQLite library that most
+recently modified the database file. The 4-byte big-endian integer at
+offset 92 is the value of the <a href="fileformat2.html#chngctr">change counter</a> when the version number
+was stored. The integer at offset 92 indicates which transaction
+the version number is valid for and is sometimes called the
+"version-valid-for number".
+
+</p><h3 id="header_space_reserved_for_expansion"><span>1.3.17. </span>Header space reserved for expansion</h3>
+
+<p>All other bytes of the database file header are reserved for
+future expansion and must be set to zero.</p>
+
+<a name="lockbyte"></a>
+
+<h2 id="the_lock_byte_page"><span>1.4. </span>The Lock-Byte Page</h2>
+
+<p>The lock-byte page is the single page of the database file
+that contains the bytes at offsets between 1073741824 and 1073742335,
+inclusive. A database file that is less than or equal to 1073741824 bytes
+in size contains no lock-byte page. A database file larger than
+1073741824 contains exactly one lock-byte page.
+</p>
+
+<p>The lock-byte page is set aside for use by the operating-system specific
+<a href="vfs.html">VFS</a> implementation in implementing the database file locking primitives.
+SQLite does not use the lock-byte page. The SQLite core
+will never read or write the lock-byte page,
+though operating-system specific <a href="vfs.html">VFS</a>
+implementations may choose to read or write bytes on the lock-byte
+page according to the
+needs and proclivities of the underlying system. The unix and win32
+<a href="vfs.html">VFS</a> implementations that come built into SQLite do not write to the
+lock-byte page, but third-party VFS implementations for
+other operating systems might.</p>
+
+<p>The lock-byte page arose from the need to support Win95 which was the
+predominant operating system when this file format was designed and which
+only supported mandatory file locking. All modern operating systems that
+we know of support advisory file locking, and so the lock-byte page is
+not really needed any more, but is retained for backwards compatibility.</p>
+
+<a name="freelist"></a>
+
+<h2 id="the_freelist"><span>1.5. </span>The Freelist</h2>
+
+<p>A database file might contain one or more pages that are not in
+active use. Unused pages can come about, for example, when information
+is deleted from the database. Unused pages are stored on the freelist
+and are reused when additional pages are required.</p>
+
+<p>The freelist is organized as a linked list of freelist trunk pages
+with each trunk page containing page numbers for zero or more freelist
+leaf pages.</p>
+
+<p>A freelist trunk page consists of an array of 4-byte big-endian integers.
+The size of the array is as many integers as will fit in the usable space
+of a page. The minimum usable space is 480 bytes so the array will always
+be at least 120 entries in length. The first integer on a freelist trunk
+page is the page number of the next freelist trunk page in the list or zero
+if this is the last freelist trunk page. The second integer on a freelist
+trunk page is the number of leaf page pointers to follow.
+Call the second integer on a freelist trunk page L.
+If L is greater than zero then integers with array indexes between 2 and
+L+1 inclusive contain page numbers for freelist leaf pages.</p>
+
+<p>Freelist leaf pages contain no information. SQLite avoids reading or
+writing freelist leaf pages in order to reduce disk I/O.</p>
+
+<p>A bug in SQLite versions prior to 3.6.0 (2008-07-16)
+caused the database to be
+reported as corrupt if any of the last 6 entries in the freelist trunk page
+array contained non-zero values. Newer versions of SQLite do not have
+this problem. However, newer versions of SQLite still avoid using the
+last six entries in the freelist trunk page array in order that database
+files created by newer versions of SQLite can be read by older versions
+of SQLite.</p>
+
+<p>The number of freelist pages is stored as a 4-byte big-endian integer
+in the database header at an offset of 36 from the beginning of the file.
+The database header also stores the page number of the first freelist trunk
+page as a 4-byte big-endian integer at an offset of 32 from the beginning
+of the file.</p>
+
+<a name="btree"></a>
+
+<h2 id="b_tree_pages"><span>1.6. </span>B-tree Pages</h2>
+
+<p>The b-tree algorithm provides key/data storage with unique and
+ordered keys on page-oriented storage devices.
+For background information on b-trees, see
+Knuth, <u>The Art Of Computer Programming</u>, Volume 3 "Sorting
+and Searching", pages 471-479. Two variants of b-trees are used by
+SQLite. "Table b-trees" use a 64-bit signed integer key and store
+all data in the leaves. "Index b-trees" use arbitrary keys and store no
+data at all.
+
+</p><p>A b-tree page is either an interior page or a leaf page.
+A leaf page contains keys and in the case of a table b-tree each
+key has associated data. An interior page contains
+K keys together with K+1 pointers to child b-tree pages.
+A "pointer" in an interior b-tree page is just the 32-bit
+unsigned integer page number of the child page.</p><p>
+
+</p><p>The number of keys on an interior b-tree page, K,
+is almost always at least 2 and is usually much more than 2.
+The only exception is when page 1 is an interior b-tree page.
+Page 1 has 100 fewer bytes of storage space available,
+due to the presence of the database header at the beginning of that page,
+and so sometimes (rarely) if page 1 is an interior b-tree page, it can
+end up holding just a a single key. In all other cases, K is 2 or more.
+The upper bound on K is as many keys as will fit on the page. Large keys
+on index b-trees are split up into <a href="fileformat2.html#ovflpgs">overflow pages</a> so that no single key
+uses more than one fourth of the available storage space on the page
+and hence every internal page is able to store at least 4 keys.
+The integer keys of table b-trees are never large enough to
+require overflow, so key overflow only occurs on index b-trees.</p>
+
+<p>Define the depth
+of a leaf b-tree to be 1 and the depth of any interior b-tree to be one
+more than the maximum depth of any of its children. In a well-formed
+database, all children of an interior b-tree have the same depth.</p>
+
+<p>In an interior b-tree page, the pointers and keys logically alternate
+with a pointer on both ends. (The previous sentence is to be understood
+conceptually - the actual layout of the keys and
+pointers within the page is more complicated and will be described in
+the sequel.) All keys within the same page are unique and are logically
+organized in ascending order from left to right. (Again, this ordering
+is logical, not physical. The actual location of keys within the page
+is arbitrary.) For any key X, pointers to the left
+of a X refer to b-tree pages on which all keys are less than or equal to X.
+Pointers to the right of X refer to pages where all keys are
+greater than X.</p>
+
+<p>Within an interior b-tree page, each key and the pointer to its
+immediate left are combined into a structure called a "cell". The
+right-most pointer is held separately. A leaf b-tree page has no
+pointers, but it still uses the cell structure to hold keys for
+index b-trees or keys and content for table b-trees. Data is also
+contained in the cell.
+</p>
+
+<p>Every b-tree page has at most one parent b-tree page.
+A b-tree page without a parent is called a root page. A root b-tree page
+together with the closure of its children form a complete b-tree.
+It is possible (and in fact rather common) to have a complete b-tree
+that consists of a single page that is both a leaf and the root.
+Because there are pointers from parents to children, every page of a
+complete b-tree can be located if only the root page is known. Hence,
+b-trees are identified by their root page number.</p>
+
+<a name="btypes"></a>
+
+<p>A b-tree page is either a table b-tree page or an index b-tree page.
+All pages within each complete b-tree are of the same type: either table
+or index. There is one table b-trees in the database file
+for each rowid table in the database schema, including system tables
+such as <a href="schematab.html">sqlite_schema</a>. There is one index b-tree
+in the database file for each index in the schema, including implied indexes
+created by uniqueness constraints. There are no b-trees associated with
+<a href="vtab.html">virtual tables</a>. Specific virtual table implementations might make use
+of <a href="vtab.html#xshadowname">shadow tables</a> for storage, but those shadow tables will have separate
+entries in the database schema. <a href="withoutrowid.html">WITHOUT ROWID</a> tables use index b-trees
+rather than a table b-trees, so there is one
+index b-tree in the database file for each <a href="withoutrowid.html">WITHOUT ROWID</a> table.
+The b-tree corresponding to the sqlite_schema table is always a table
+b-tree and always has a root page of 1.
+The sqlite_schema table contains the root page number for every other
+table and index in the database file.</p>
+
+<p>Each entry in a table b-tree consists of a 64-bit signed integer key
+and up to 2147483647 bytes of arbitrary data. (The key of a table b-tree
+corresponds to the <a href="lang_createtable.html#rowid">rowid</a> of the SQL table that the b-tree implements.)
+Interior table b-trees hold only keys and pointers to children.
+All data is contained in the table b-tree leaves.</p>
+
+<p>Each entry in an index b-tree consists of an arbitrary key of up
+to 2147483647 bytes in length and no data.</p>
+
+<a name="cell_payload"></a>
+
+<p>Define the "payload" of a cell to be the arbitrary length section
+of the cell. For an index b-tree, the key is always arbitrary in length
+and hence the payload is the key. There are no arbitrary length elements
+in the cells of interior table b-tree pages and so those cells have no
+payload. Table b-tree leaf pages contain arbitrary length content and
+so for cells on those pages the payload is the content.
+</p><p>When the size of payload for a cell exceeds a certain threshold (to
+be defined later) then only the first few bytes of the payload
+are stored on the b-tree page and the balance is stored in a linked list
+of content overflow pages.</p>
+
+<p>A b-tree page is divided into regions in the following order:
+
+</p><ol>
+<li>The 100-byte database file header (found on page 1 only)
+</li><li>The 8 or 12 byte b-tree page header
+</li><li>The cell pointer array
+</li><li>Unallocated space
+</li><li>The cell content area
+</li><li>The reserved region.
+</li></ol>
+
+
+<p>The 100-byte database file header is found only on page 1, which is
+always a table b-tree page. All other b-tree pages in the database file
+omit this 100-byte header.</p>
+
+<p>The reserved region is an area of unused space at the end of every
+page (except the locking page) that extensions can use to hold per-page
+information. The size of the reserved region is determined by the one-byte
+unsigned integer found at an offset of 20 into the database file header.
+The size of the reserved region is usually zero.</p>
+
+<p>The b-tree page header is 8 bytes in size for leaf pages and 12
+bytes for interior pages. All multibyte values in the page header
+are big-endian.
+The b-tree page header is composed of the following fields:</p>
+
+<center>
+<i>B-tree Page Header Format</i><br>
+<table border="1" width="80%">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td align="center" valign="top">0</td><td align="center" valign="top">1</td><td align="left">
+The one-byte flag at offset 0 indicating the b-tree page type.<ul>
+<li>A value of 2 (0x02) means the page is an interior index b-tree page.
+</li><li>A value of 5 (0x05) means the page is an interior table b-tree page.
+</li><li>A value of 10 (0x0a) means the page is a leaf index b-tree page.
+</li><li>A value of 13 (0x0d) means the page is a leaf table b-tree page.</li></ul>
+Any other value for the b-tree page type is an error.
+</td></tr><tr><td align="center" valign="top">1</td><td align="center" valign="top">2</td><td align="left">
+The two-byte integer at offset 1 gives the start of the
+first freeblock on the page, or is zero if there are no freeblocks.
+</td></tr><tr><td align="center" valign="top">3</td><td align="center" valign="top">2</td><td align="left">
+The two-byte integer at offset 3 gives the number of cells on the page.
+</td></tr><tr><td align="center" valign="top">5</td><td align="center" valign="top">2</td><td align="left">
+The two-byte integer at offset 5 designates the start of the cell content
+area. A zero value for this integer is interpreted as 65536.
+</td></tr><tr><td align="center" valign="top">7</td><td align="center" valign="top">1</td><td align="left">
+The one-byte integer at offset 7 gives the number of fragmented free
+bytes within the cell content area.
+</td></tr><tr><td align="center" valign="top">8</td><td align="center" valign="top">4</td><td align="left">
+The four-byte page number at offset 8 is the right-most pointer. This
+value appears in the header of interior b-tree pages only and is omitted from
+all other pages.
+</td></tr></table></center>
+
+<p>The cell pointer array of a b-tree page immediately follows the b-tree
+page header. Let K be the number of cells on the btree. The cell pointer
+array consists of K 2-byte integer offsets to the cell contents. The
+cell pointers are arranged in key order with left-most cell (the cell with the
+smallest key) first and the right-most cell (the cell with the largest
+key) last.</p>
+
+<p>Cell content is stored in the cell content region of the b-tree page.
+SQLite strives to place cells as far toward the end of the b-tree page as
+it can, in order to leave space for future growth of the cell pointer array.
+The area in between the last cell pointer array entry and the beginning of
+the first cell is the unallocated region.
+</p>
+
+<p>If a page contains no cells (which is only possible for a root page
+of a table that contains no rows) then the offset to the
+cell content area will equal the page size minus the bytes of reserved space.
+If the database uses a 65536-byte page size and the reserved space is zero
+(the usual value for reserved space) then the cell content offset of an
+empty page wants to be 65536.
+However, that integer is too large to be stored in a
+2-byte unsigned integer, so a value of 0 is used in its place.
+
+</p><p>A freeblock is a structure used to identify unallocated space within
+a b-tree page. Freeblocks are organized as a chain. The first 2 bytes of
+a freeblock are a big-endian integer which is the offset in the b-tree page
+of the next freeblock in the chain, or zero if the freeblock is the last on
+the chain. The third and fourth bytes of each freeblock form
+a big-endian integer which is the size of the freeblock in bytes, including
+the 4-byte header. Freeblocks are always connected in order
+of increasing offset. The second field of the b-tree page header is the
+offset of the first freeblock, or zero if there are no freeblocks on the
+page. In a well-formed b-tree page, there will always be at least one cell
+before the first freeblock.</p>
+
+<p>A freeblock requires at least 4 bytes of space. If there is an isolated
+group of 1, 2, or 3 unused bytes within the cell content area, those bytes
+comprise a fragment. The total number of bytes in all fragments is stored
+in the fifth field of the b-tree page header. In a well-formed b-tree page,
+the total number of bytes in fragments may not exceed 60.</p>
+
+<p>The total amount of free space on a b-tree page consists of the size
+of the unallocated region plus the total size of all freeblocks plus the
+number of fragmented free bytes. SQLite may from time to time reorganize
+a b-tree page so that there are no freeblocks or fragment bytes, all
+unused bytes are contained in the unallocated space region, and all
+cells are packed tightly at the end of the page. This is called
+"defragmenting" the b-tree page.</p>
+
+<a name="varint"></a>
+
+
+<p>A variable-length integer or "varint" is a static Huffman encoding
+of 64-bit twos-complement integers that uses less space for small positive
+values.
+A varint is between 1 and 9 bytes in length. The varint consists of either
+zero or more bytes which have the high-order bit set followed by a single byte
+with the high-order bit clear, or nine bytes, whichever is shorter.
+The lower seven bits of each of the first eight bytes and all 8 bits of
+the ninth byte are used to reconstruct the 64-bit twos-complement integer.
+Varints are big-endian: bits taken from the earlier byte of the varint
+are more significant than bits taken from the later bytes. </p>
+
+<p>The format of a cell depends on which kind of b-tree page the cell
+appears on. The following table shows the elements of a cell, in
+order of appearance, for the various b-tree page types.
+
+</p><dl>
+<dt><p>Table B-Tree Leaf Cell (header 0x0d):</p></dt>
+<dd><p></p><ul>
+<li>A varint which is the total number of bytes of payload, including any
+overflow
+</li><li>A varint which is the integer key, a.k.a. "<a href="lang_createtable.html#rowid">rowid</a>"
+</li><li>The initial portion of the payload that does not spill to overflow
+pages.
+</li><li>A 4-byte big-endian integer page number for the first page of the
+overflow page list - omitted if all payload fits on the b-tree page.
+</li></ul></dd>
+
+<dt><p>Table B-Tree Interior Cell (header 0x05):</p></dt>
+<dd><p></p><ul>
+<li>A 4-byte big-endian page number which is the left child pointer.
+</li><li>A varint which is the integer key
+</li></ul></dd>
+
+<dt><p>Index B-Tree Leaf Cell (header 0x0a):</p></dt>
+<dd><p></p><ul>
+<li>A varint which is the total number of bytes of key payload, including any
+overflow
+</li><li>The initial portion of the payload that does not spill to overflow
+pages.
+</li><li>A 4-byte big-endian integer page number for the first page of the
+overflow page list - omitted if all payload fits on the b-tree page.
+</li></ul></dd>
+
+<dt><p>Index B-Tree Interior Cell (header 0x02):</p></dt>
+<dd><p></p><ul>
+<li>A 4-byte big-endian page number which is the left child pointer.
+</li><li>A varint which is the total number of bytes of key payload, including any
+overflow
+</li><li>The initial portion of the payload that does not spill to overflow
+pages.
+</li><li>A 4-byte big-endian integer page number for the first page of the
+overflow page list - omitted if all payload fits on the b-tree page.
+</li></ul></dd>
+</dl>
+
+<p>The information above can be recast into a table format as follows:</p>
+
+<a name="cellformat"></a>
+
+<center>
+<i>B-tree Cell Format</i>
+<table border="1" width="80%">
+<tr><th rowspan="2">Datatype
+ </th><th colspan="4">Appears in...
+ </th><th rowspan="2">Description
+</th></tr><tr><th>Table Leaf (0x0d)
+ </th><th>Table Interior (0x05)
+ </th><th>Index Leaf (0x0a)
+ </th><th>Index Interior (0x02)
+</th></tr><tr><td align="center" valign="top">4-byte integer
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="left">Page number of left child
+</td></tr><tr><td align="center" valign="top">varint
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="left">Number of bytes of payload
+</td></tr><tr><td align="center" valign="top">varint
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="left">Rowid
+</td></tr><tr><td align="center" valign="top">byte array
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="left">Payload
+</td></tr><tr><td align="center" valign="top">4-byte integer
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="left">Page number of first overflow page
+</td></tr></table></center>
+
+
+<p>The amount of payload that spills onto overflow pages also depends on
+the page type. For the following computations, let U be the usable size
+of a database page, the total page size less the reserved space at the
+end of each page. And let P be the payload size. In the following,
+symbol X represents the maximum amount of payload that can be stored directly
+on the b-tree page without spilling onto an overflow page and symbol M
+represents the minimum amount of payload that must be stored on the btree
+page before spilling is allowed.
+
+</p><dl>
+<dt><p>Table B-Tree Leaf Cell:</p></dt>
+<dd><p>
+Let X be U-35. If the payload size P is less than or equal to X then
+the entire payload is stored on the b-tree leaf page.
+Let M be ((U-12)*32/255)-23 and let K be M+((P-M)%(U-4)).
+If P is greater than X
+then the number of bytes stored on the table b-tree leaf page is K
+if K is less or equal to X or M otherwise.
+The number of bytes stored on the leaf page is never less than M.
+</p></dd>
+
+<dt><p>Table B-Tree Interior Cell:</p></dt>
+<dd><p>
+Interior pages of table b-trees have no payload and so there is never
+any payload to spill.
+</p></dd>
+
+<dt><p>Index B-Tree Leaf Or Interior Cell:</p></dt>
+<dd><p>
+Let X be ((U-12)*64/255)-23. If the payload size P is less than
+or equal to X then the entire payload is stored on the b-tree page.
+Let M be ((U-12)*32/255)-23 and let K be M+((P-M)%(U-4)).
+If P is greater than X then the number
+of bytes stored on the index b-tree page is K if K is less than or
+equal to X or M otherwise.
+The number of bytes stored on the index page is never less than M.
+</p></dd>
+</dl>
+
+<p>Here is an alternative description of the same computation:
+
+</p><ul>
+<li>X is U-35 for table btree leaf pages or
+ ((U-12)*64/255)-23 for index pages.
+</li><li>M is always ((U-12)*32/255)-23.
+</li><li>Let K be M+((P-M)%(U-4)).
+</li><li>If P&lt;=X then all P bytes of payload are stored directly on the
+ btree page without overflow.
+</li><li>If P&gt;X and K&lt;=X then the first K bytes of P are stored on the
+ btree page and the remaining P-K bytes are stored on overflow pages.
+</li><li>If P&gt;X and K&gt;X then the first M bytes of P are stored on the
+ btree page and the remaining P-M bytes are stored on overflow pages.
+</li></ul>
+
+<p>The overflow thresholds are designed to give a minimum fanout of
+4 for index b-trees and to make sure enough of the payload
+is on the b-tree page that the record header can usually be accessed
+without consulting an overflow page. In hindsight, the designer of
+the SQLite b-tree logic realized that these thresholds could have been
+made much simpler. However, the computations cannot be changed
+without resulting in an incompatible file format. And the current computations
+work well, even if they are a little complex.</p>
+
+<a name="ovflpgs"></a>
+
+<h2 id="cell_payload_overflow_pages"><span>1.7. </span>Cell Payload Overflow Pages</h2>
+
+<p>When the payload of a b-tree cell is too large for the b-tree page,
+the surplus is spilled onto overflow pages. Overflow pages form a linked
+list. The first four bytes of each overflow page are a big-endian
+integer which is the page number of the next page in the chain, or zero
+for the final page in the chain. The fifth byte through the last usable
+byte are used to hold overflow content.</p>
+
+<h2 id="pointer_map_or_ptrmap_pages"><span>1.8. </span>Pointer Map or Ptrmap Pages</h2>
+
+<p>Pointer map or ptrmap pages are extra pages inserted into the database
+to make the operation of <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> and <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> modes
+more efficient. Other page types in the database typically have pointers
+from parent to child. For example, an interior b-tree page contains pointers
+to its child b-tree pages and an overflow chain has a pointer
+from earlier to later links in the chain. A ptrmap page contains linkage
+information going in the opposite direction, from child to parent.</p>
+
+<p>Ptrmap pages must exist in any database file which has a non-zero
+largest root b-tree page value at offset 52 in the database header.
+If the largest root b-tree page value is zero, then the database must not
+contain ptrmap pages.</p>
+
+<p>In a database with ptrmap pages, the first ptrmap page is page 2.
+A ptrmap page consists of an array of 5-byte entries. Let J be the
+number of 5-byte entries that will fit in the usable space of a page.
+(In other words, J=U/5.) The first ptrmap page will contain back pointer
+information for pages 3 through J+2, inclusive. The second pointer map
+page will be on page J+3 and that ptrmap page will provide back pointer
+information for pages J+4 through 2*J+3 inclusive. And so forth for
+the entire database file.</p>
+
+<p>In a database that uses ptrmap pages, all pages at locations identified
+by the computation in the previous paragraph must be ptrmap page and no
+other page may be a ptrmap page. Except, if the byte-lock page happens to
+fall on the same page number as a ptrmap page, then the ptrmap is moved
+to the following page for that one case.</p>
+
+<p>Each 5-byte entry on a ptrmap page provides back-link information about
+one of the pages that immediately follow the pointer map. If page B is a
+ptrmap page then back-link information about page B+1 is provided by
+the first entry on the pointer map. Information about page B+2 is
+provided by the second entry. And so forth.</p>
+
+<p>Each 5-byte ptrmap entry consists of one byte of "page type" information
+followed by a 4-byte big-endian page number. Five page types are recognized:
+</p>
+
+<ol>
+<li>A b-tree root page. The
+page number should be zero.
+</li><li>A freelist page. The page number should be
+zero.
+</li><li>The first page of a
+cell payload overflow chain. The page number is the b-tree page that
+contains the cell whose content has overflowed.
+</li><li>A page in an overflow chain
+other than the first page. The page number is the prior page of the
+overflow chain.
+</li><li>A non-root b-tree page. The
+page number is the parent b-tree page.
+</li></ol>
+
+<p>In any database file that contains ptrmap pages, all b-tree root pages
+must come before any non-root b-tree page, cell payload overflow page, or
+freelist page. This restriction ensures that a root page will never
+be moved during an auto-vacuum or incremental-vacuum. The auto-vacuum
+logic does not know how to update the root_page field of the sqlite_schema
+table and so it is necessary to prevent root pages from being moved
+during an auto-vacuum in order to preserve the integrity of the
+sqlite_schema table. Root pages are moved to the beginning of the
+database file by the CREATE TABLE, CREATE INDEX, DROP TABLE, and
+DROP INDEX operations.</p>
+
+<h1 id="schema_layer"><span>2. </span>Schema Layer</h1>
+
+<p>The foregoing text describes low-level aspects of the SQLite file
+format. The b-tree mechanism provides a powerful and efficient means of
+accessing a large data set. This section will describe how the
+low-level b-tree layer is used to implement higher-level SQL
+capabilities.</p>
+
+<a name="record_format"></a>
+
+<h2 id="record_format"><span>2.1. </span>Record Format</h2>
+
+<p>The data for a table b-tree leaf page and the key
+of an index b-tree page was characterized above
+as an arbitrary sequence of bytes.
+The prior discussion mentioned one key being less than another, but
+did not define what "less than" meant. The current section will address
+these omissions.</p>
+
+<p>Payload, either table b-tree data or index b-tree keys,
+is always in the "record format".
+The record format defines a sequence of values corresponding
+to columns in a table or index. The record format specifies the number
+of columns, the datatype of each column, and the content of each column.</p>
+
+<p>The record format makes extensive use of the
+<a href="fileformat2.html#varint">variable-length integer</a> or <a href="fileformat2.html#varint">varint</a>
+representation of 64-bit signed integers defined above.</p>
+
+<a name="serialtype"></a>
+
+<p>A record contains a header and a body, in that order.
+The header begins with a single varint which determines the total number
+of bytes in the header. The varint value is the size of the header in
+bytes including the size varint itself. Following the size varint are
+one or more additional varints, one per column. These additional varints
+are called "serial type" numbers and
+determine the datatype of each column, according to the following chart:</p>
+
+<center>
+<i>Serial Type Codes Of The Record Format</i><br>
+<table width="80%" border="1">
+<tr><th>Serial Type</th><th>Content Size</th><th>Meaning
+</th></tr><tr><td valign="top" align="center">0</td><td valign="top" align="center">0</td><td align="left">
+Value is a NULL.
+</td></tr><tr><td valign="top" align="center">1</td><td valign="top" align="center">1</td><td align="left">
+Value is an 8-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">2</td><td valign="top" align="center">2</td><td align="left">
+Value is a big-endian 16-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">3</td><td valign="top" align="center">3</td><td align="left">
+Value is a big-endian 24-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">4</td><td valign="top" align="center">4</td><td align="left">
+Value is a big-endian 32-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">5</td><td valign="top" align="center">6</td><td align="left">
+Value is a big-endian 48-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">6</td><td valign="top" align="center">8</td><td align="left">
+Value is a big-endian 64-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">7</td><td valign="top" align="center">8</td><td align="left">
+Value is a big-endian IEEE 754-2008 64-bit floating point number.
+</td></tr><tr><td valign="top" align="center">8</td><td valign="top" align="center">0</td><td align="left">
+Value is the integer 0. (Only available for <a href="fileformat2.html#schemaformat">schema format</a> 4 and higher.)
+</td></tr><tr><td valign="top" align="center">9</td><td valign="top" align="center">0</td><td align="left">
+Value is the integer 1. (Only available for <a href="fileformat2.html#schemaformat">schema format</a> 4 and higher.)
+</td></tr><tr><td valign="top" align="center">10,11
+ </td><td valign="top" align="center"><i>variable</i></td><td align="left">
+<i>Reserved for internal use. These serial type codes will
+ never appear in a well-formed database file, but they
+ might be used in transient and temporary database files
+ that SQLite sometimes generates for its own use.
+ The meanings of these codes can shift from one release
+ of SQLite to the next.</i>
+</td></tr><tr><td valign="top" align="center">N&#x2265;12 and even
+ </td><td valign="top" align="center">(N-12)/2</td><td align="left">
+Value is a BLOB that is (N-12)/2 bytes in length.
+</td></tr><tr><td valign="top" align="center">N&#x2265;13 and odd
+ </td><td valign="top" align="center">(N-13)/2</td><td align="left">
+Value is a string in the <a href="fileformat2.html#enc">text encoding</a> and (N-13)/2 bytes in length.
+The nul terminator is not stored.
+</td></tr></table></center>
+
+<p>The header size varint
+and serial type varints will usually consist of a single byte. The
+serial type varints for large strings and BLOBs might extend to two or three
+byte varints, but that is the exception rather than the rule.
+The varint format is very efficient at coding the record header.</p>
+
+<p>The values for each column in the record immediately follow the header.
+For serial types 0, 8, 9, 12, and 13, the value is zero bytes in
+length. If all columns are of these types then the body section of the
+record is empty.</p>
+
+<p>A record might have fewer values than the number of columns in the
+corresponding table. This can happen, for example, after an
+<a href="lang_altertable.html">ALTER TABLE ... ADD COLUMN</a> SQL statement has increased
+the number of columns in the table schema without modifying preexisting rows
+in the table.
+Missing values at the end of the record are filled in using the
+<a href="lang_createtable.html#dfltval">default value</a> for the corresponding columns defined in the table schema.
+</p>
+
+
+<h2 id="record_sort_order"><span>2.2. </span>Record Sort Order</h2>
+
+<p>The order of keys in an index b-tree is determined by the sort order of
+the records that the keys represent. Record comparison progresses column
+by column. Columns of a record are examined from left to right. The
+first pair of columns that are not equal determines the relative order
+of the two records. The sort order of individual columns is as
+follows:</p>
+
+<ol>
+<li>NULL values (serial type 0) sort first.
+</li><li>Numeric values (serial types 1 through 9) sort after NULLs
+ and in numeric order.
+</li><li>Text values (odd serial types 13 and larger) sort after numeric
+ values in the order determined by the columns <a href="datatype3.html#collation">collating function</a>.
+</li><li>BLOB values (even serial types 12 and larger) sort last and in the order
+ determined by memcmp().
+</li></ol>
+
+<p>A <a href="datatype3.html#collation">collating function</a> for each column is necessary in order to compute
+the order of text fields.
+SQLite defines three built-in collating functions:
+</p>
+
+<blockquote><table border="0" cellspacing="10">
+<tr><td valign="top">BINARY
+ </td><td> The built-in BINARY collation compares strings byte by byte
+ using the memcmp() function
+ from the standard C library.
+</td></tr><tr><td valign="top">NOCASE
+ </td><td> The NOCASE collation is like BINARY except that uppercase
+ ASCII characters ('A' through 'Z')
+ are folded into their lowercase equivalents prior to running the
+ comparison. Only ASCII characters are case-folded.
+ NOCASE
+ does not implement a general purpose unicode caseless comparison.
+</td></tr><tr><td valign="top">RTRIM
+ </td><td> RTRIM is like BINARY except that extra spaces at the end of either
+ string do not change the result. In other words, strings will
+ compare equal to one another as long as they
+ differ only in the number of spaces at the end.
+</td></tr></table></blockquote>
+
+<p>Additional application-specific collating functions can be added to
+SQLite using the <a href="c3ref/create_collation.html">sqlite3_create_collation()</a> interface.</p>
+
+<p>The default collating function for all strings is BINARY.
+Alternative collating functions for table columns can be specified in the
+<a href="lang_createtable.html">CREATE TABLE</a> statement using the COLLATE clause on the <a href="lang_createtable.html#tablecoldef">column definition</a>.
+When a column is indexed, the same collating function specified in the
+<a href="lang_createtable.html">CREATE TABLE</a> statement is used for the column in the index, by default,
+though this can be overridden using a COLLATE clause in the
+<a href="lang_createindex.html">CREATE INDEX</a> statement.
+
+<a name="#sqltab"></a>
+
+</p><h2 id="representation_of_sql_tables"><span>2.3. </span>Representation Of SQL Tables</h2>
+
+<p> Each ordinary SQL table in the database schema is represented on-disk
+by a table b-tree. Each entry in the table b-tree corresponds to a row
+of the SQL table. The <a href="lang_createtable.html#rowid">rowid</a> of the SQL table is the 64-bit signed
+integer key for each entry in the table b-tree.</p>
+
+<p> The content of each SQL table row is stored in the database file by
+first combining the values in the various columns into a byte array
+in the record format, then storing that byte array as the payload in
+an entry in the table b-tree. The order of values in the record is
+the same as the order of columns in the SQL table definition.
+When an SQL table includes an
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column (which aliases the <a href="lang_createtable.html#rowid">rowid</a>) then that
+column appears in the record as a NULL value. SQLite will always use
+the table b-tree key rather than the NULL value when referencing the
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column.</p>
+
+<p> If the <a href="datatype3.html#affinity">affinity</a> of a column is REAL and that column contains a
+value that can be converted to an integer without loss of information
+(if the value contains no fractional part and is not too large to be
+represented as an integer) then the column may be stored in the record
+as an integer. SQLite will convert the value back to floating
+point when extracting it from the record.</p>
+
+<h2 id="representation_of_without_rowid_tables"><span>2.4. </span>Representation of WITHOUT ROWID Tables</h2>
+
+<p>If an SQL table is created using the "WITHOUT ROWID" clause at the
+end of its CREATE TABLE statement, then that table is a <a href="withoutrowid.html">WITHOUT ROWID</a>
+table and uses a different on-disk representation. A WITHOUT ROWID
+table uses an index b-tree rather than a table b-tree for storage.
+The key for each entry in the WITHOUT ROWID b-tree is a record composed
+of the columns of the PRIMARY KEY followed by all remaining columns of
+the table. The primary key columns appear in the order that they were
+declared in the PRIMARY KEY clause and the remaining columns appear in
+the order they occur in the CREATE TABLE statement.
+
+</p><p>Hence, the content encoding for a WITHOUT ROWID table is the same
+as the content encoding for an ordinary rowid table, except that the
+order of the columns is rearranged so that PRIMARY KEY columns come
+first, and the content is used as the key in an index b-tree rather
+than as the data in a table b-tree.
+The special encoding rules for columns with REAL affinity
+apply to WITHOUT ROWID tables the same as they do with rowid tables.
+
+</p><h3 id="suppression_of_redundant_columns_in_the_primary_key_of_without_rowid_tables"><span>2.4.1. </span>Suppression of redundant columns in the PRIMARY KEY
+ of WITHOUT ROWID tables</h3>
+
+<p>If the PRIMARY KEY of a WITHOUT ROWID tables uses the same columns
+with the same collating sequence more than once, then the second and
+subsequent occurrences of that column in the PRIMARY KEY definition are
+ignored. For example, the following CREATE TABLE statements all specify
+the same table, which will have the exact same representation on disk:
+
+</p><blockquote><pre>
+CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,c)) WITHOUT ROWID);
+CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,c,a,c)) WITHOUT ROWID);
+CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,A,a,C)) WITHOUT ROWID);
+CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,a,a,a,c)) WITHOUT ROWID);
+</pre></blockquote>
+
+<p>The first example above is the preferred definition of the table,
+of course. All of the examples create a WITHOUT ROWID table with
+two PRIMARY KEY columns, "a" and "c", in that order, followed by
+two data columns "b" and "d", also in that order.
+
+</p><h2 id="representation_of_sql_indices"><span>2.5. </span>Representation Of SQL Indices</h2>
+
+<p>Each SQL index, whether explicitly declared via a <a href="lang_createindex.html">CREATE INDEX</a> statement
+or implied by a UNIQUE or PRIMARY KEY constraint, corresponds to an
+index b-tree in the database file.
+Each entry in the index b-tree corresponds to a single row in the
+associated SQL table.
+The key to an index b-tree is
+a record composed of the columns that are being indexed followed by the
+key of the corresponding table row. For ordinary tables, the row key is
+the <a href="lang_createtable.html#rowid">rowid</a>, and for <a href="withoutrowid.html">WITHOUT ROWID</a> tables the row key is the PRIMARY KEY.
+Because every row in the table has a unique row key,
+all keys in an index are unique.</p>
+
+<p>In a normal index, there is a one-to-one mapping between rows in a
+table and entries in each index associated with that table.
+However, in a <a href="partialindex.html">partial index</a>, the index b-tree only contains entries
+corresponding to table rows for which the WHERE clause expression on the
+CREATE INDEX statement is true.
+Corresponding rows in the index and table b-trees share the same rowid
+or primary key values and contain the same value for all indexed columns.</p>
+
+<h3 id="suppression_of_redundant_columns_in_without_rowid_secondary_indexes_"><span>2.5.1. </span>Suppression of redundant columns in WITHOUT ROWID secondary indexes
+</h3>
+
+<p> In an index on a WITHOUT ROWID table, if a column of the PRIMARY KEY
+is also a column in the index and has a matching collating sequence, then the
+indexed column is not repeated in the table-key suffix on the
+end of the index record. As an example, consider the following SQL:
+
+</p><blockquote><pre>
+CREATE TABLE ex25(a,b,c,d,e,PRIMARY KEY(d,c,a)) WITHOUT rowid;
+CREATE INDEX ex25ce ON ex25(c,e);
+CREATE INDEX ex25acde ON ex25(a,c,d,e);
+CREATE INDEX ex25ae ON ex25(a COLLATE nocase,e);
+</pre></blockquote>
+
+<p>Each row in the ex25ce index is a record
+with these columns: c, e, d, a. The first two columns are
+the columns being indexed, c and e. The remaining columns are the primary
+key of the corresponding table row. Normally, the primary key would be
+columns d, c, and a, but because column c already appears earlier in the
+index, it is omitted from the key suffix.</p>
+
+<p>In the extreme case where the columns being indexed cover all columns
+of the PRIMARY KEY, the index will consist of only the columns being
+indexed. The ex25acde example above demonstrates this. Each entry in
+the ex25acde index consists of only the columns a, c, d, and e, in that
+order.</p>
+
+<p>Each row in ex25ae contains five columns: a, e, d, c, a. The "a"
+column is repeated since the first occurrence of "a" has a collating
+function of "nocase" and the second has a collating sequence of "binary".
+If the "a" column is not repeated and if the table contains two or more
+entries with the same "e" value and where "a" differs only in case, then
+all of those table entries would correspond to a single entry in the
+index, which would break the one-to-one correspondence between the table
+and the index.
+
+</p><p> The suppression of redundant columns in the key suffix of an index
+entry only occurs in WITHOUT ROWID tables. In an ordinary rowid table,
+the index entry always ends with the rowid even if the <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>
+column is one of the columns being indexed.</p>
+
+<a name="ffschema"></a>
+
+<h2 id="storage_of_the_sql_database_schema"><span>2.6. </span>Storage Of The SQL Database Schema</h2>
+
+<p>Page 1 of a database file is the root page of a table b-tree that
+holds a special table named "<a href="schematab.html">sqlite_schema</a>". This b-tree is known
+as the "schema table" since it stores the complete
+database schema. The structure of the sqlite_schema table is as
+if it had been created using the following SQL:</p>
+
+<blockquote><pre>
+CREATE TABLE sqlite_schema(
+ type text,
+ name text,
+ tbl_name text,
+ rootpage integer,
+ sql text
+);
+</pre></blockquote>
+
+<p>The sqlite_schema table contains one row for each table, index, view,
+and trigger (collectively "objects") in the database schema, except there
+is no entry for the sqlite_schema table itself. The sqlite_schema table
+contains entries for <a href="fileformat2.html#intschema">internal schema objects</a> in addition to application-
+and programmer-defined objects.
+
+
+</p><p>The sqlite_schema.type column will be one
+of the following text strings: 'table', 'index', 'view', or 'trigger'
+according to the type of object defined. The 'table' string is used
+for both ordinary and <a href="vtab.html">virtual tables</a>.</p>
+
+<p>The sqlite_schema.name column will hold the name of the object.
+<a href="lang_createtable.html#uniqueconst">UNIQUE</a> and <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraints on tables cause SQLite to create
+<a href="fileformat2.html#intschema">internal indexes</a> with names of the form "sqlite_autoindex_TABLE_N"
+where TABLE is replaced by the name of the table that contains the
+constraint and N is an integer beginning with 1 and increasing by one
+with each constraint seen in the table definition.
+In a <a href="withoutrowid.html">WITHOUT ROWID</a> table, there is no sqlite_schema entry for the
+PRIMARY KEY, but the "sqlite_autoindex_TABLE_N" name is set aside
+for the PRIMARY KEY as if the sqlite_schema entry did exist. This
+will affect the numbering of subsequent UNIQUE constraints.
+The "sqlite_autoindex_TABLE_N" name is never allocated for an
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, either in rowid tables or WITHOUT ROWID tables.
+</p>
+
+<p>The sqlite_schema.tbl_name column holds the name of a table or view
+that the object is associated with. For a table or view, the
+tbl_name column is a copy of the name column. For an index, the tbl_name
+is the name of the table that is indexed. For a trigger, the tbl_name
+column stores the name of the table or view that causes the trigger
+to fire.</p>
+
+<p>The sqlite_schema.rootpage column stores the page number of the root
+b-tree page for tables and indexes. For rows that define views, triggers,
+and virtual tables, the rootpage column is 0 or NULL.</p>
+
+<p>The sqlite_schema.sql column stores SQL text that describes the
+object. This SQL text is a <a href="lang_createtable.html">CREATE TABLE</a>, <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a>,
+<a href="lang_createindex.html">CREATE INDEX</a>,
+<a href="lang_createview.html">CREATE VIEW</a>, or <a href="lang_createtrigger.html">CREATE TRIGGER</a> statement that if evaluated against
+the database file when it is the main database of a <a href="c3ref/sqlite3.html">database connection</a>
+would recreate the object. The text is usually a copy of the original
+statement used to create the object but with normalizations applied so
+that the text conforms to the following rules:
+
+</p><ul>
+<li>The CREATE, TABLE, VIEW, TRIGGER, and INDEX keywords at the beginning
+of the statement are converted to all upper case letters.
+</li><li>The TEMP or TEMPORARY keyword is removed if it occurs after the
+initial CREATE keyword.
+</li><li>Any database name qualifier that occurs prior to the name of the
+object being created is removed.
+</li><li>Leading spaces are removed.
+</li><li>All spaces following the first two keywords are converted into a single
+space.
+</li></ul>
+
+<p>The text in the sqlite_schema.sql column is a copy of the original
+CREATE statement text that created the object, except normalized as
+described above and as modified by subsequent <a href="lang_altertable.html">ALTER TABLE</a> statements.
+The sqlite_schema.sql is NULL for the <a href="fileformat2.html#intschema">internal indexes</a> that are
+automatically created by <a href="lang_createtable.html#uniqueconst">UNIQUE</a> or <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraints.</p>
+
+<h3 id="alternative_names_for_the_schema_table"><span>2.6.1. </span>Alternative Names For The Schema Table</h3>
+
+<p>The name "sqlite_schema" does not appear anywhere in the file format.
+That name is just a convention used by the database implementation.
+Due to historical and operational considerations, the
+"sqlite_schema" table can also sometimes be called by one of the
+following aliases:
+
+</p><ol>
+<li> sqlite_master
+</li><li> sqlite_temp_schema
+</li><li> sqlite_temp_master
+</li></ol>
+
+<p>Because the name of the schema table does not appear anywhere in
+the file format, the meaning of the database file is not changed if
+the application chooses to refer to the schema table by one of
+these alternative names.
+
+<a name="intschema"></a>
+
+</p><h3 id="internal_schema_objects"><span>2.6.2. </span>Internal Schema Objects</h3>
+
+<p>In addition to the tables, indexes, views, and triggers created by
+the application and/or the developer using CREATE statements SQL, the
+sqlite_schema table may contain zero or more entries for
+<i>internal schema objects</i> that are created by SQLite for its
+own internal use. The names of internal schema objects
+always begin with "sqlite_" and any table, index, view, or trigger
+whose name begins with "sqlite_" is an internal schema object.
+SQLite prohibits applications from creating objects whose names begin
+with "sqlite_".
+
+</p><p>Internal schema objects used by SQLite may include the following:
+
+</p><ul>
+<li><p>Indices with names of the form "sqlite_autoindex_TABLE_N" that
+ are used to implement <a href="lang_createtable.html#uniqueconst">UNIQUE</a> and <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraints on
+ ordinary tables.
+
+</p></li><li><p>A table with the name "sqlite_sequence" that is used to keep track
+ of the maximum historical <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> for a table
+ using <a href="autoinc.html">AUTOINCREMENT</a>.
+
+</p></li><li><p>Tables with names of the form "sqlite_statN" where N is an integer.
+ Such tables store database statistics gathered by the <a href="lang_analyze.html">ANALYZE</a>
+ command and used by the query planner to help determine the best
+ algorithm to use for each query.
+</p></li></ul>
+
+<p>New internal schema objects names, always beginning with "sqlite_",
+may be added to the SQLite file format in future releases.
+
+<a name="seqtab"></a>
+
+</p><h3 id="the_sqlite_sequence_table"><span>2.6.3. </span>The sqlite_sequence table</h3>
+
+<p>The sqlite_sequence table is an internal table used to help implement
+<a href="autoinc.html">AUTOINCREMENT</a>. The sqlite_sequence table is created automatically
+whenever any ordinary table with an AUTOINCREMENT integer primary
+key is created. Once created, the sqlite_sequence table exists in the
+sqlite_schema table forever; it cannot be dropped.
+The schema for the sqlite_sequence table is:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_sequence(name,seq);
+</pre></blockquote>
+
+<p>There is a single row in the sqlite_sequence table for each ordinary
+table that uses AUTOINCREMENT. The name of the table (as it appears in
+sqlite_schema.name) is in the sqlite_sequence.name field and the largest
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> ever inserted into that table is
+in the sqlite_sequence.seq field.
+New automatically generated integer primary keys for AUTOINCREMENT
+tables are guaranteed to be larger than the sqlite_sequence.seq field for
+that table.
+If the sqlite_sequence.seq field of an AUTOINCREMENT table is already at
+the largest integer value (9223372036854775807) then attempts to add new
+rows to that table with an automatically generated integer primary will fail
+with an <a href="rescode.html#full">SQLITE_FULL</a> error.
+The sqlite_sequence.seq field is automatically updated if required when
+new entries are inserted to an AUTOINCREMENT table.
+The sqlite_sequence row for an AUTOINCREMENT table is automatically deleted
+when the table is dropped.
+If the sqlite_sequence row for an AUTOINCREMENT table does not exist when
+the AUTOINCREMENT table is updated, then a new sqlite_sequence row is created.
+If the sqlite_sequence.seq value for an AUTOINCREMENT table is manually
+set to something other than an integer and there is a subsequent attempt to
+insert the or update the AUTOINCREMENT table, then the behavior is undefined.
+
+</p><p>Application code is allowed to modify the sqlite_sequence table, to add
+new rows, to delete rows, or to modify existing rows. However, application
+code cannot create the sqlite_sequence table if it does not already exist.
+Application code can delete all entries from the sqlite_sequence table,
+but application code cannot drop the sqlite_sequence table.
+
+<a name="stat1tab"></a>
+
+</p><h3 id="the_sqlite_stat1_table"><span>2.6.4. </span>The sqlite_stat1 table</h3>
+
+<p>The sqlite_stat1 is an internal table created by the <a href="lang_analyze.html">ANALYZE</a> command
+and used to hold supplemental information about tables and indexes that the
+query planner can use to help it find better ways of performing queries.
+Applications can update, delete from, insert into or drop the sqlite_stat1
+table, but may not create or alter the sqlite_stat1 table.
+The schema of the sqlite_stat1 table is as follows:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_stat1(tbl,idx,stat);
+</pre></blockquote>
+
+<p> There is normally one row per index, with the index identified by the
+name in the sqlite_stat1.idx column. The sqlite_stat1.tbl column is
+the name of the table to which the index belongs. In each such row,
+the sqlite_stat.stat column will be
+a string consisting of a list of integers followed by zero or more
+arguments. The first integer in this
+list is the approximate number of rows in the index. (The number of
+rows in the index is the same as the number of rows in the table,
+except for <a href="partialindex.html">partial indexes</a>.)
+The second integer is the approximate number of rows in the index
+that have the same value in the first column of the index. The third
+integer is the number of rows in the index that have
+the same value for the first two columns. The N-th integer (for N>1)
+is the estimated average number of rows in
+the index which have the same value for the first N-1 columns. For
+a K-column index, there will be K+1 integers in the stat column. If
+the index is unique, then the last integer will be 1.
+
+</p><p>The list of integers in the stat column can optionally be followed
+by arguments, each of which is a sequence of non-space characters.
+All arguments are preceded by a single space.
+Unrecognized arguments are silently ignored.
+
+</p><p>If the "unordered" argument is present, then the query planner assumes
+that the index is unordered and will not use the index for a range query
+or for sorting.
+
+</p><p>The "sz=NNN" argument (where NNN represents a sequence of 1 or more digits)
+means that the average row size over all records of the table or
+index is NNN bytes per row. The SQLite query planner might use the
+estimated row size information provided by the "sz=NNN" token
+to help it choose smaller tables and indexes that require less disk I/O.
+
+</p><p>The presence of the "noskipscan" token on the sqlite_stat1.stat field
+of an index prevents that index from being used with the
+<a href="optoverview.html#skipscan">skip-scan optimization</a>.
+
+</p><p>New text tokens may be added to the end of the stat column in future
+enhancements to SQLite. For compatibility, unrecognized tokens at the end
+of the stat column are silently ignored.
+
+</p><p>If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat
+column contains a single integer which is the approximate number of
+rows in the table identified by sqlite_stat1.tbl.
+If the sqlite_stat1.idx column is the same as the sqlite_stat1.tbl
+column, then the table is a <a href="withoutrowid.html">WITHOUT ROWID</a> table and the sqlite_stat1.stat
+field contains information about the index btree that implements the
+WITHOUT ROWID table.
+
+<a name="stat2tab"></a>
+
+</p><h3 id="the_sqlite_stat2_table"><span>2.6.5. </span>The sqlite_stat2 table</h3>
+
+<p>The sqlite_stat2 is only created and is only used if SQLite is compiled
+with SQLITE_ENABLE_STAT2 and if the SQLite version number is between
+3.6.18 (2009-09-11) and 3.7.8 (2011-09-19).
+The sqlite_stat2 table is neither read nor written by any
+version of SQLite before 3.6.18 nor after 3.7.8.
+The sqlite_stat2 table contains additional information
+about the distribution of keys within an index.
+The schema of the sqlite_stat2 table is as follows:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_stat2(tbl,idx,sampleno,sample);
+</pre></blockquote>
+
+<p>The sqlite_stat2.idx column and the sqlite_stat2.tbl column in each
+row of the sqlite_stat2 table identify an index described by that row.
+There are usually 10 rows in the sqlite_stat2
+table for each index.
+
+</p><p>The sqlite_stat2 entries for an index that have sqlite_stat2.sampleno
+between 0 and 9 inclusive are samples of the left-most key value in the
+index taken at evenly spaced points along the index.
+Let C be the number of rows in the index.
+Then the sampled rows are given by
+
+</p><blockquote>
+ rownumber = (i*C*2 + C)/20
+</blockquote>
+
+<p>The variable i in the previous expression varies between 0 and 9.
+Conceptually, the index space is divided into
+10 uniform buckets and the samples are the middle row from each bucket.
+
+</p><p>The format for sqlite_stat2 is recorded here for legacy reference.
+Recent versions of SQLite no longer support sqlite_stat2 and the
+sqlite_stat2 table, if is exists, is simply ignored.
+
+<a name="stat3tab"></a>
+
+</p><h3 id="the_sqlite_stat3_table"><span>2.6.6. </span>The sqlite_stat3 table</h3>
+
+<p>The sqlite_stat3 is only used if SQLite is compiled
+with <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> or <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>
+and if the SQLite version number is 3.7.9 (2011-11-01) or greater.
+The sqlite_stat3 table is neither read nor written by any
+version of SQLite before 3.7.9.
+If the <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time option is used and the
+SQLite version number is 3.8.1 (2013-10-17) or greater,
+then sqlite_stat3 might be read but not written.
+The sqlite_stat3 table contains additional information
+about the distribution of keys within an index, information that the
+query planner can use to devise better and faster query algorithms.
+The schema of the sqlite_stat3 table is as follows:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_stat3(tbl,idx,nEq,nLt,nDLt,sample);
+</pre></blockquote>
+
+<p>There are usually multiple entries in the sqlite_stat3 table for each index.
+The sqlite_stat3.sample column holds the value of the left-most field of an
+index identified by sqlite_stat3.idx and sqlite_stat3.tbl.
+The sqlite_stat3.nEq column holds the approximate
+number of entries in the index whose left-most column exactly matches
+the sample.
+The sqlite_stat3.nLt holds the approximate number of entries in the
+index whose left-most column is less than the sample.
+The sqlite_stat3.nDLt column holds the approximate
+number of distinct left-most entries in the index that are less than
+the sample.
+
+</p><p>There can be an arbitrary number of sqlite_stat3 entries per index.
+The <a href="lang_analyze.html">ANALYZE</a> command will typically generate sqlite_stat3 tables
+that contain between 10 and 40 samples that are distributed across
+the key space and with large nEq values.
+
+</p><p>In a well-formed sqlite_stat3 table, the samples for any single
+index must appear in the same order that they occur in the index.
+In other words, if the entry with left-most column S1 is earlier in
+the index b-tree than the
+entry with left-most column S2, then in the sqlite_stat3 table,
+sample S1 must have a smaller rowid than sample S2.
+
+<a name="stat4tab"></a>
+
+</p><h3 id="the_sqlite_stat4_table"><span>2.6.7. </span>The sqlite_stat4 table</h3>
+
+<p>The sqlite_stat4 is only created and is only used if SQLite is compiled
+with <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> and if the SQLite version number is
+3.8.1 (2013-10-17) or greater.
+The sqlite_stat4 table is neither read nor written by any
+version of SQLite before 3.8.1.
+The sqlite_stat4 table contains additional information
+about the distribution of keys within an index or the distribution of
+keys in the primary key of a <a href="withoutrowid.html">WITHOUT ROWID</a> table.
+The query planner can sometimes use the additional information in
+the sqlite_stat4 table to devise better and faster query algorithms.
+The schema of the sqlite_stat4 table is as follows:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_stat4(tbl,idx,nEq,nLt,nDLt,sample);
+</pre></blockquote>
+
+<p>There are typically between 10 to 40 entries in the sqlite_stat4 table for
+each index for which statistics are available, however these limits are
+not hard bounds.
+The meanings of the columns in the sqlite_stat4 table are as follows:
+
+</p><center>
+<table border="0" width="100%" cellpadding="10">
+<tr><td valign="top" align="right">tbl:</td>
+ <td>The sqlite_stat4.tbl column holds name of the table that owns
+ the index that the row describes
+
+</td></tr><tr><td valign="top" align="right">idx:</td>
+ <td>The sqlite_stat4.idx column holds name of the index that the
+ row describes, or in the case of
+ an sqlite_stat4 entry for a <a href="withoutrowid.html">WITHOUT ROWID</a> table, the
+ name of the table itself.
+
+</td></tr><tr><td valign="top" align="right">sample:</td>
+ <td>The sqlite_stat4.sample column holds a BLOB
+ in the <a href="fileformat2.html#record_format">record format</a> that encodes the indexed columns followed by
+ the rowid for a rowid table or by the columns of the primary key
+ for a WITHOUT ROWID table.
+ The sqlite_stat4.sample BLOB for the WITHOUT ROWID table itself
+ contains just the columns of the primary key.
+ Let the number of columns encoded by the sqlite_stat4.sample blob be N.
+ For indexes on an ordinary rowid table, N will be one more than the number
+ of columns indexed.
+ For indexes on WITHOUT ROWID tables, N will be the number of columns
+ indexed plus the number of columns in the primary key.
+ For a WITHOUT ROWID table, N will be the number of columns in the
+ primary key.
+
+</td></tr><tr><td valign="top" align="right">nEq:</td>
+ <td>The sqlite_stat4.nEq column holds a list of N integers where
+ the K-th integer is the approximate number of entries in the index
+ whose left-most K columns exactly match the K left-most columns
+ of the sample.
+
+</td></tr><tr><td valign="top" align="right">nLt:</td>
+ <td>The sqlite_stat4.nLt column holds a list of N integers where
+ the K-th integer is the approximate number of entries in the
+ index whose K left-most columns are collectively less than the
+ K left-most columns of the sample.
+
+</td></tr><tr><td valign="top" align="right">nDLt:</td>
+ <td>The sqlite_stat4.nDLt column holds a list of N integers where
+ the K-th integer is the approximate
+ number of entries in the index that are distinct in the first K columns and
+ where the left-most K columns are collectively less than the left-most
+ K columns of the sample.
+</td></tr></table>
+</center>
+
+<p>The sqlite_stat4 is a generalization of the sqlite_stat3 table. The
+sqlite_stat3 table provides information about the left-most column of an
+index whereas the sqlite_stat4 table provides information about all columns
+of the index.
+
+</p><p>There can be an arbitrary number of sqlite_stat4 entries per index.
+The <a href="lang_analyze.html">ANALYZE</a> command will typically generate sqlite_stat4 tables
+that contain between 10 and 40 samples that are distributed across
+the key space and with large nEq values.
+
+</p><p>In a well-formed sqlite_stat4 table, the samples for any single
+index must appear in the same order that they occur in the index.
+In other words, if entry S1 is earlier in the index b-tree than
+entry S2, then in the sqlite_stat4 table, sample S1 must have a
+smaller rowid than sample S2.
+
+<a name="rollbackjournal"></a>
+
+</p><h1 id="the_rollback_journal"><span>3. </span>The Rollback Journal</h1>
+
+<p>The rollback journal is a file associated with each SQLite database
+file that holds information used to restore the database file to its initial
+state during the course of a transaction.
+The rollback journal file is always located in the same
+directory as the database
+file and has the same name as the database file but with the string
+"<tt>-journal</tt>" appended. There can only be a single rollback journal
+associated with a give database and hence there can only be one write
+transaction open against a single database at one time.</p>
+
+<p>If a transaction is aborted due to an application crash, an operating
+system crash, or a hardware power failure or crash, then the database may
+be left in an inconsistent state. The next time SQLite attempts to open
+the database file, the presence of the rollback journal file will be
+detected and the journal will be automatically played back to restore the
+database to its state at the start of the incomplete transaction.</p>
+
+<p>A rollback journal is only considered to be valid if it exists and
+contains a valid header. Hence a transaction can be committed in one
+of three ways:
+</p><ol>
+<li>The rollback journal file can be deleted,
+</li><li>The rollback journal file can be truncated to zero length, or
+</li><li>The header of the rollback journal can be overwritten with
+invalid header text (for example, all zeros).
+</li></ol>
+<p>
+These three ways of committing a transaction correspond to the DELETE,
+TRUNCATE, and PERSIST settings, respectively, of the <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>.
+</p>
+
+
+<p>A valid rollback journal begins with a header in the following format:</p>
+
+<center>
+<i>Rollback Journal Header Format</i><br>
+<table width="80%" border="1">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td valign="top" align="center">0
+ </td><td valign="top" align="center">8
+ </td><td>Header string: 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7
+</td></tr><tr><td valign="top" align="center">8
+ </td><td valign="top" align="center">4
+ </td><td>The "Page Count" - The number of pages in the next segment of the
+ journal, or -1 to
+ mean all content to the end of the file
+</td></tr><tr><td valign="top" align="center">12
+ </td><td valign="top" align="center">4
+ </td><td>A random nonce for the checksum
+</td></tr><tr><td valign="top" align="center">16
+ </td><td valign="top" align="center">4
+ </td><td>Initial size of the database in pages
+</td></tr><tr><td valign="top" align="center">20
+ </td><td valign="top" align="center">4
+ </td><td>Size of a disk sector assumed by the process that wrote this
+ journal.
+</td></tr><tr><td valign="top" align="center">24
+ </td><td valign="top" align="center">4
+ </td><td>Size of pages in this journal.
+</td></tr></table>
+</center>
+
+<p>A rollback journal header is padded with zeros out to the size of a
+single sector (as defined by the sector size integer at offset 20).
+The header is in a sector by itself so that if a power loss occurs while
+writing the sector, information that follows the header will be
+(hopefully) undamaged.</p>
+
+<p>After the header and zero padding are zero or more page records. Each
+page record stores a copy of the content of a page from the database file
+before it was changed. The same page may not appear more than once
+within a single rollback journal.
+To rollback an incomplete transaction, a process
+has merely to read the rollback journal from beginning to end and
+write pages found in the journal back into the database file at the
+appropriate location.</p>
+
+<p>Let the database page size (the value of the integer at offset 24
+in the journal header) be N.
+Then the format of a page record is as follows:</p>
+
+<center>
+<i>Rollback Journal Page Record Format</i><br>
+<table width="80%" border="1">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td valign="top" align="center">0
+ </td><td valign="top" align="center">4
+ </td><td>The page number in the database file
+</td></tr><tr><td valign="top" align="center">4
+ </td><td valign="top" align="center">N
+ </td><td>Original content of the page prior to the start of the transaction
+</td></tr><tr><td valign="top" align="center">N+4
+ </td><td valign="top" align="center">4
+ </td><td>Checksum
+</td></tr></table>
+</center>
+
+
+<p>The checksum is an unsigned 32-bit integer computed as follows:</p>
+
+<ol>
+<li>Initialize the checksum to the checksum nonce value found in the
+journal header at offset 12.
+</li><li>Initialize index X to be N-200 (where N is the size of a database page
+in bytes.
+</li><li>Interpret the byte at offset X into the page as an 8-bit unsigned integer
+ and add the value of that integer to the checksum.
+</li><li>Subtract 200 from X.
+</li><li>If X is greater than or equal to zero, go back to step 3.
+</li></ol>
+
+<p>The checksum value is used to guard against incomplete writes of
+a journal page record following a power failure. A different random nonce
+is used each time a transaction is started in order to minimize the risk
+that unwritten sectors might by chance contain data from the same page
+that was a part of prior journals. By changing the nonce for each
+transaction, stale data on disk will still generate an incorrect checksum
+and be detected with high probability. The checksum only uses a sparse sample
+of 32-bit words from the data record for performance reasons - design studies
+during the planning phases of SQLite 3.0.0 showed
+a significant performance hit in checksumming the entire page.</p>
+
+<p>Let the page count value at offset 8 in the journal header be M.
+If M is greater than zero then after M page records the journal file
+may be zero padded out to the next multiple of the sector size and another
+journal header may be inserted. All journal headers within the same
+journal must contain the same database page size and sector size.</p>
+
+<p>If M is -1 in the initial journal header, then the number of page records
+that follow is computed by computing how many page records will fit in
+the available space of the remainder of the journal file.</p>
+
+<a name="walformat"></a>
+
+<h1 id="the_write_ahead_log"><span>4. </span>The Write-Ahead Log</h1>
+
+<p>Beginning with <a href="releaselog/3_7_0.html">version 3.7.0</a> (2010-07-21),
+SQLite supports a new transaction
+control mechanism called "<a href="wal.html">write-ahead log</a>" or "<a href="wal.html">WAL</a>".
+When a database is in WAL mode, all connections to that database must
+use the WAL. A particular database will use either a rollback journal
+or a WAL, but not both at the same time.
+The WAL is always located in the same directory as the database
+file and has the same name as the database file but with the string
+"<tt>-wal</tt>" appended.</p>
+
+<h2 id="wal_file_format"><span>4.1. </span>WAL File Format</h2>
+
+<p>A <a href="wal.html#walfile">WAL file</a> consists of a header followed by zero or more "frames".
+Each frame records the revised content of a single page from the
+database file. All changes to the database are recorded by writing
+frames into the WAL. Transactions commit when a frame is written that
+contains a commit marker. A single WAL can and usually does record
+multiple transactions. Periodically, the content of the WAL is
+transferred back into the database file in an operation called a
+"checkpoint".</p>
+
+<p>A single WAL file can be reused multiple times. In other words, the
+WAL can fill up with frames and then be checkpointed and then new
+frames can overwrite the old ones. A WAL always grows from beginning
+toward the end. Checksums and counters attached to each frame are
+used to determine which frames within the WAL are valid and which
+are leftovers from prior checkpoints.</p>
+
+<p>The WAL header is 32 bytes in size and consists of the following eight
+big-endian 32-bit unsigned integer values:</p>
+
+<center>
+<i>WAL Header Format</i><br>
+<table width="80%" border="1">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td valign="top" align="center">0</td><td valign="top" align="center">4
+ </td><td>Magic number. 0x377f0682 or 0x377f0683
+</td></tr><tr><td valign="top" align="center">4</td><td valign="top" align="center">4
+ </td><td>File format version. Currently 3007000.
+</td></tr><tr><td valign="top" align="center">8</td><td valign="top" align="center">4
+ </td><td>Database page size. Example: 1024
+</td></tr><tr><td valign="top" align="center">12</td><td valign="top" align="center">4
+ </td><td>Checkpoint sequence number
+</td></tr><tr><td valign="top" align="center">16</td><td valign="top" align="center">4
+ </td><td>Salt-1: random integer incremented with each checkpoint
+</td></tr><tr><td valign="top" align="center">20</td><td valign="top" align="center">4
+ </td><td>Salt-2: a different random number for each checkpoint
+</td></tr><tr><td valign="top" align="center">24</td><td valign="top" align="center">4
+ </td><td>Checksum-1: First part of a checksum on the first 24 bytes of header
+</td></tr><tr><td valign="top" align="center">28</td><td valign="top" align="center">4
+ </td><td>Checksum-2: Second part of the checksum on the first 24 bytes of header
+</td></tr></table>
+</center>
+
+<p>Immediately following the wal-header are zero or more frames. Each
+frame consists of a 24-byte frame-header followed by a <i>page-size</i> bytes
+of page data. The frame-header is six big-endian 32-bit unsigned
+integer values, as follows:
+
+</p><center>
+<i>WAL Frame Header Format</i><br>
+<table width="80%" border="1">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td valign="top" align="center">0</td><td valign="top" align="center">4
+ </td><td>Page number
+</td></tr><tr><td valign="top" align="center">4</td><td valign="top" align="center">4
+ </td><td>For commit records, the size of the database file in pages
+ after the commit. For all other records, zero.
+</td></tr><tr><td valign="top" align="center">8</td><td valign="top" align="center">4
+ </td><td>Salt-1 copied from the WAL header
+</td></tr><tr><td valign="top" align="center">12</td><td valign="top" align="center">4
+ </td><td>Salt-2 copied from the WAL header
+</td></tr><tr><td valign="top" align="center">16</td><td valign="top" align="center">4
+ </td><td>Checksum-1: Cumulative checksum up through and including this page
+</td></tr><tr><td valign="top" align="center">20</td><td valign="top" align="center">4
+ </td><td>Checksum-2: Second half of the cumulative checksum.
+</td></tr></table>
+</center>
+
+<p>A frame is considered valid if and only if the following conditions are
+true:</p>
+
+<ol>
+<li><p>The salt-1 and salt-2 values in the frame-header match
+ salt values in the wal-header</p></li>
+
+<li><p>The checksum values in the final 8 bytes of the frame-header
+ exactly match the checksum computed consecutively on the
+ first 24 bytes of the WAL header and the first 8 bytes and
+ the content of all frames
+ up to and including the current frame.</p></li>
+</ol>
+
+<a name="walcksm"></a>
+
+<h2 id="checksum_algorithm"><span>4.2. </span>Checksum Algorithm</h2>
+
+<p>The checksum is computed by interpreting the input as
+an even number of unsigned 32-bit integers: x(0) through x(N).
+The 32-bit integers are big-endian if the
+magic number in the first 4 bytes of the WAL header is 0x377f0683 and
+the integers are little-endian if the magic number is 0x377f0682.
+The checksum values are always stored in the frame header in a
+big-endian format regardless of which byte order is used to compute
+the checksum.</p>
+
+<p>The checksum algorithm only works for content which is a multiple of
+8 bytes in length. In other words, if the inputs are x(0) through x(N)
+then N must be odd.
+The checksum algorithm is as follows:
+
+</p><blockquote><pre>
+s0 = s1 = 0
+for i from 0 to n-1 step 2:
+ s0 += x(i) + s1;
+ s1 += x(i+1) + s0;
+endfor
+# result in s0 and s1
+</pre></blockquote>
+
+<p>The outputs s0 and s1 are both weighted checksums using Fibonacci weights
+in reverse order. (The largest Fibonacci weight occurs on the first element
+of the sequence being summed.) The s1 value spans all 32-bit integer
+terms of the sequence whereas s0 omits the final term.</p>
+
+<h2 id="checkpoint_algorithm"><span>4.3. </span>Checkpoint Algorithm</h2>
+
+<p>On a <a href="wal.html#ckpt">checkpoint</a>, the WAL is first flushed to persistent storage using
+the xSync method of the <a href="c3ref/io_methods.html">VFS</a>.
+Then valid content of the WAL is transferred into the database file.
+Finally, the database is flushed to persistent storage using another
+xSync method call.
+The xSync operations serve as write barriers - all writes launched
+before the xSync must complete before any write that launches after the
+xSync begins.</p>
+
+<p>A checkpoint need not run to completion. It might be that some
+readers are still using older transactions with data that is contained
+in the database file. In that case, transferring content for newer
+transactions from the WAL file into the database would delete the content
+out from under readers still using the older transactions. To avoid that,
+checkpoints only run to completion if all reader are using the
+last transaction in the WAL.
+
+<a name="walreset"></a>
+
+</p><h2 id="wal_reset"><span>4.4. </span>WAL Reset</h2>
+
+<p>After a complete checkpoint, if no other connections are in transactions
+that use the WAL, then subsequent write transactions can
+overwrite the WAL file from the beginning. This is called "resetting the
+WAL". At the start of the first new
+write transaction, the WAL header salt-1 value is incremented
+and the salt-2 value is randomized. These changes to the salts invalidate
+old frames in the WAL that have already been checkpointed but not yet
+overwritten, and prevent them from being checkpointed again.</p>
+
+<p>The WAL file can optionally be truncated on a reset, but it need not be.
+Performance is usually a little better if the WAL is not truncated, since
+filesystems generally will overwrite an existing file faster than they
+will grow a file.
+
+<a name="walread"></a>
+
+</p><h2 id="reader_algorithm"><span>4.5. </span>Reader Algorithm</h2>
+
+<p>To read a page from the database (call it page number P), a reader
+first checks the WAL to see if it contains page P. If so, then the
+last valid instance of page P that is followed by a commit frame
+or is a commit frame itself becomes the value read. If the WAL
+contains no copies of page P that are valid and which are a commit
+frame or are followed by a commit frame, then page P is read from
+the database file.</p>
+
+<p>To start a read transaction, the reader records the number of value
+frames in the WAL as "mxFrame". (<a href="walformat.html#mxframe">More detail</a>)
+The reader uses this recorded mxFrame value
+for all subsequent read operations. New transactions can be appended
+to the WAL, but as long as the reader uses its original mxFrame value
+and ignores subsequently appended content, the reader will see a
+consistent snapshot of the database from a single point in time.
+This technique allows multiple concurrent readers to view different
+versions of the database content simultaneously.</p>
+
+<p>The reader algorithm in the previous paragraphs works correctly, but
+because frames for page P can appear anywhere within the WAL, the
+reader has to scan the entire WAL looking for page P frames. If the
+WAL is large (multiple megabytes is typical) that scan can be slow,
+and read performance suffers. To overcome this problem, a separate
+data structure called the wal-index is maintained to expedite the
+search for frames of a particular page.</p>
+
+<a name="walindexformat"></a>
+
+<h2 id="wal_index_format"><span>4.6. </span>WAL-Index Format</h2>
+
+<p>Conceptually, the wal-index is shared memory, though the current
+VFS implementations use a memory-mapped file for operating-system
+portability. The memory-mapped
+file is in the same directory as the database and has the same name
+as the database with a "<tt>-shm</tt>" suffix appended. Because
+the wal-index is shared memory, SQLite does not support
+<a href="pragma.html#pragma_journal_mode">journal_mode=WAL</a>
+on a network filesystem when clients are on different machines, as
+all clients of the database must be able to share the same memory.</p>
+
+<p>The purpose of the wal-index is to answer this question quickly:</p>
+
+<blockquote><i>
+Given a page number P and a maximum WAL frame index M,
+return the largest WAL frame index for page P that does not exceed M,
+or return NULL if there are no frames for page P that do not exceed M.
+</i></blockquote>
+
+<p>The <i>M</i> value in the previous paragraph is the "mxFrame" value
+defined in <a href="fileformat2.html#walread">section 4.4</a> that is read at the start
+of a transaction and which defines the maximum frame from the WAL that
+the reader will use.</p>
+
+<p>The wal-index is transient. After a crash, the wal-index is
+reconstructed from the original WAL file. The VFS is required
+to either truncate or zero the header of the wal-index when the last
+connection to it closes. Because the wal-index is transient, it can
+use an architecture-specific format; it does not have to be cross-platform.
+Hence, unlike the database and WAL file formats which store all values
+as big endian, the wal-index stores multi-byte values in the native
+byte order of the host computer.</p>
+
+<p>This document is concerned with the persistent state of the database
+file, and since the wal-index is a transient structure, no further
+information about the format of the wal-index will be provided here.
+Additional details on the format of the wal-index are contained in
+the separate <a href="walformat.html#walidxfmt">WAL-index File Format</a> document.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/fileformat2.in?m=ba2f97fa24209ae70">2022-08-10 18:45:48</a> UTC </small></i></p>
+
diff --git a/www/fileformat2.html b/www/fileformat2.html
new file mode 100644
index 0000000..7c6000a
--- /dev/null
+++ b/www/fileformat2.html
@@ -0,0 +1,2205 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Database File Format</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Database File Format
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#the_database_file">1. The Database File</a></div>
+<div class="fancy-toc2"><a href="#hot_journals">1.1. Hot Journals</a></div>
+<div class="fancy-toc2"><a href="#pages">1.2. Pages</a></div>
+<div class="fancy-toc2"><a href="#the_database_header">1.3. The Database Header</a></div>
+<div class="fancy-toc3"><a href="#magic_header_string">1.3.1. Magic Header String</a></div>
+<div class="fancy-toc3"><a href="#page_size">1.3.2. Page Size</a></div>
+<div class="fancy-toc3"><a href="#file_format_version_numbers">1.3.3. File format version numbers</a></div>
+<div class="fancy-toc3"><a href="#reserved_bytes_per_page">1.3.4. Reserved bytes per page</a></div>
+<div class="fancy-toc3"><a href="#payload_fractions">1.3.5. Payload fractions</a></div>
+<div class="fancy-toc3"><a href="#file_change_counter">1.3.6. File change counter</a></div>
+<div class="fancy-toc3"><a href="#in_header_database_size">1.3.7. In-header database size</a></div>
+<div class="fancy-toc3"><a href="#free_page_list">1.3.8. Free page list</a></div>
+<div class="fancy-toc3"><a href="#schema_cookie">1.3.9. Schema cookie</a></div>
+<div class="fancy-toc3"><a href="#schema_format_number">1.3.10. Schema format number</a></div>
+<div class="fancy-toc3"><a href="#suggested_cache_size">1.3.11. Suggested cache size</a></div>
+<div class="fancy-toc3"><a href="#incremental_vacuum_settings">1.3.12. Incremental vacuum settings</a></div>
+<div class="fancy-toc3"><a href="#text_encoding">1.3.13. Text encoding</a></div>
+<div class="fancy-toc3"><a href="#user_version_number">1.3.14. User version number</a></div>
+<div class="fancy-toc3"><a href="#application_id">1.3.15. Application ID</a></div>
+<div class="fancy-toc3"><a href="#write_library_version_number_and_version_valid_for_number">1.3.16. Write library version number and version-valid-for number</a></div>
+<div class="fancy-toc3"><a href="#header_space_reserved_for_expansion">1.3.17. Header space reserved for expansion</a></div>
+<div class="fancy-toc2"><a href="#the_lock_byte_page">1.4. The Lock-Byte Page</a></div>
+<div class="fancy-toc2"><a href="#the_freelist">1.5. The Freelist</a></div>
+<div class="fancy-toc2"><a href="#b_tree_pages">1.6. B-tree Pages</a></div>
+<div class="fancy-toc2"><a href="#cell_payload_overflow_pages">1.7. Cell Payload Overflow Pages</a></div>
+<div class="fancy-toc2"><a href="#pointer_map_or_ptrmap_pages">1.8. Pointer Map or Ptrmap Pages</a></div>
+<div class="fancy-toc1"><a href="#schema_layer">2. Schema Layer</a></div>
+<div class="fancy-toc2"><a href="#record_format">2.1. Record Format</a></div>
+<div class="fancy-toc2"><a href="#record_sort_order">2.2. Record Sort Order</a></div>
+<div class="fancy-toc2"><a href="#representation_of_sql_tables">2.3. Representation Of SQL Tables</a></div>
+<div class="fancy-toc2"><a href="#representation_of_without_rowid_tables">2.4. Representation of WITHOUT ROWID Tables</a></div>
+<div class="fancy-toc3"><a href="#suppression_of_redundant_columns_in_the_primary_key_of_without_rowid_tables">2.4.1. Suppression of redundant columns in the PRIMARY KEY
+of WITHOUT ROWID tables</a></div>
+<div class="fancy-toc2"><a href="#representation_of_sql_indices">2.5. Representation Of SQL Indices</a></div>
+<div class="fancy-toc3"><a href="#suppression_of_redundant_columns_in_without_rowid_secondary_indexes_">2.5.1. Suppression of redundant columns in WITHOUT ROWID secondary indexes
+</a></div>
+<div class="fancy-toc2"><a href="#storage_of_the_sql_database_schema">2.6. Storage Of The SQL Database Schema</a></div>
+<div class="fancy-toc3"><a href="#alternative_names_for_the_schema_table">2.6.1. Alternative Names For The Schema Table</a></div>
+<div class="fancy-toc3"><a href="#internal_schema_objects">2.6.2. Internal Schema Objects</a></div>
+<div class="fancy-toc3"><a href="#the_sqlite_sequence_table">2.6.3. The sqlite_sequence table</a></div>
+<div class="fancy-toc3"><a href="#the_sqlite_stat1_table">2.6.4. The sqlite_stat1 table</a></div>
+<div class="fancy-toc3"><a href="#the_sqlite_stat2_table">2.6.5. The sqlite_stat2 table</a></div>
+<div class="fancy-toc3"><a href="#the_sqlite_stat3_table">2.6.6. The sqlite_stat3 table</a></div>
+<div class="fancy-toc3"><a href="#the_sqlite_stat4_table">2.6.7. The sqlite_stat4 table</a></div>
+<div class="fancy-toc1"><a href="#the_rollback_journal">3. The Rollback Journal</a></div>
+<div class="fancy-toc1"><a href="#the_write_ahead_log">4. The Write-Ahead Log</a></div>
+<div class="fancy-toc2"><a href="#wal_file_format">4.1. WAL File Format</a></div>
+<div class="fancy-toc2"><a href="#checksum_algorithm">4.2. Checksum Algorithm</a></div>
+<div class="fancy-toc2"><a href="#checkpoint_algorithm">4.3. Checkpoint Algorithm</a></div>
+<div class="fancy-toc2"><a href="#wal_reset">4.4. WAL Reset</a></div>
+<div class="fancy-toc2"><a href="#reader_algorithm">4.5. Reader Algorithm</a></div>
+<div class="fancy-toc2"><a href="#wal_index_format">4.6. WAL-Index Format</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+
+<p>This document describes and defines the on-disk database file
+format used by all releases of SQLite since
+version 3.0.0 (2004-06-18).</p>
+
+<h1 id="the_database_file"><span>1. </span>The Database File</h1>
+
+<p>The complete state of an SQLite database is usually
+contained in a single file on disk called the "main database file".</p>
+
+<p>During a transaction, SQLite stores additional information
+in a second file called the "rollback journal", or if SQLite is in
+<a href="wal.html">WAL mode</a>, a write-ahead log file.
+
+<a name="hotjrnl"></a>
+
+</p><h2 id="hot_journals"><span>1.1. </span>Hot Journals</h2>
+<p>If the application or
+host computer crashes before the transaction completes, then the rollback
+journal or write-ahead log contains information needed
+to restore the main database file to a consistent state. When a rollback
+journal or write-ahead log contains information necessary for recovering
+the state of the database, they are called a "hot journal" or "hot WAL file".
+Hot journals and WAL files are only a factor during error recovery
+scenarios and so are uncommon, but they are part of the state of an SQLite
+database and so cannot be ignored. This document defines the format
+of a rollback journal and the write-ahead log file, but the focus is
+on the main database file.</p>
+
+<h2 id="pages"><span>1.2. </span>Pages</h2>
+
+<p>The main database file consists of one or more pages. The size of a
+page is a power of two between 512 and 65536 inclusive. All pages within
+the same database are the same size. The page size for a database file
+is determined by the 2-byte integer located at an offset of
+16 bytes from the beginning of the database file.</p>
+
+<p>Pages are numbered beginning with 1. The maximum page number is
+4294967294 (2<sup><small>32</small></sup> - 2). The minimum size
+SQLite database is a single 512-byte page.
+The maximum size database would be 2147483646 pages at 65536 bytes per
+page or 281,474,976,579,584 bytes (about 281 terabytes). Usually SQLite will
+hit the maximum file size limit of the underlying filesystem or disk
+hardware long before it hits its own internal size limit.</p>
+
+<p>In common use, SQLite databases tend to range in size from a few kilobytes
+to a few gigabytes, though terabyte-size SQLite databases are known to exist
+in production.</p>
+
+<p>At any point in time, every page in the main database has a single
+use which is one of the following:
+</p><ul>
+<li>The lock-byte page
+</li><li>A freelist page
+<ul>
+<li>A freelist trunk page
+</li><li>A freelist leaf page
+</li></ul>
+</li><li>A b-tree page
+<ul>
+<li>A table b-tree interior page
+</li><li>A table b-tree leaf page
+</li><li>An index b-tree interior page
+</li><li>An index b-tree leaf page
+</li></ul>
+</li><li>A payload overflow page
+</li><li>A pointer map page
+</li></ul>
+
+
+<p>All reads from and writes to the main database file begin at a page
+boundary and all writes are an integer number of pages in size. Reads
+are also usually an integer number of pages in size, with the one exception
+that when the database is first opened, the first 100 bytes of the
+database file (the database file header) are read as a sub-page size unit.</p>
+
+<p>Before any information-bearing page of the database is modified,
+the original unmodified content of that page is written into the
+rollback journal. If a transaction is interrupted and needs to be
+rolled back, the rollback journal can then be used to restore the
+database to its original state. Freelist leaf pages bear no
+information that would need to be restored on a rollback and so they
+are not written to the journal prior to modification, in order to
+reduce disk I/O.</p>
+
+<a name="database_header"></a>
+
+<h2 id="the_database_header"><span>1.3. </span>The Database Header</h2>
+
+<p>The first 100 bytes of the database file comprise the database file
+header. The database file header is divided into fields as shown by
+the table below. All multibyte fields in the database file header are
+stored with the most significant byte first (big-endian).</p>
+
+<center>
+<i>Database Header Format</i><br>
+<table width="80%" border="1">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td valign="top" align="center">0</td><td valign="top" align="center">16</td><td align="left">
+The header string: "SQLite format 3\000"
+</td></tr><tr><td valign="top" align="center">16</td><td valign="top" align="center">2</td><td align="left">
+The database page size in bytes. Must be a power of two between 512
+and 32768 inclusive, or the value 1 representing a page size of 65536.
+</td></tr><tr><td valign="top" align="center">18</td><td valign="top" align="center">1</td><td align="left">
+File format write version. 1 for legacy; 2 for <a href="wal.html">WAL</a>.
+</td></tr><tr><td valign="top" align="center">19</td><td valign="top" align="center">1</td><td align="left">
+File format read version. 1 for legacy; 2 for <a href="wal.html">WAL</a>.
+</td></tr><tr><td valign="top" align="center">20</td><td valign="top" align="center">1</td><td align="left">
+Bytes of unused "reserved" space at the end of each page. Usually 0.
+</td></tr><tr><td valign="top" align="center">21</td><td valign="top" align="center">1</td><td align="left">
+Maximum embedded payload fraction. Must be 64.
+</td></tr><tr><td valign="top" align="center">22</td><td valign="top" align="center">1</td><td align="left">
+Minimum embedded payload fraction. Must be 32.
+</td></tr><tr><td valign="top" align="center">23</td><td valign="top" align="center">1</td><td align="left">
+Leaf payload fraction. Must be 32.
+</td></tr><tr><td valign="top" align="center">24</td><td valign="top" align="center">4</td><td align="left">
+File change counter.
+</td></tr><tr><td valign="top" align="center">28</td><td valign="top" align="center">4</td><td align="left">
+Size of the database file in pages. The "in-header database size".
+</td></tr><tr><td valign="top" align="center">32</td><td valign="top" align="center">4</td><td align="left">
+Page number of the first freelist trunk page.
+</td></tr><tr><td valign="top" align="center">36</td><td valign="top" align="center">4</td><td align="left">
+Total number of freelist pages.
+</td></tr><tr><td valign="top" align="center">40</td><td valign="top" align="center">4</td><td align="left">
+The schema cookie.
+</td></tr><tr><td valign="top" align="center">44</td><td valign="top" align="center">4</td><td align="left">
+The schema format number. Supported schema formats are 1, 2, 3, and 4.
+</td></tr><tr><td valign="top" align="center">48</td><td valign="top" align="center">4</td><td align="left">
+Default page cache size.
+</td></tr><tr><td valign="top" align="center">52</td><td valign="top" align="center">4</td><td align="left">
+The page number of the largest root b-tree page when in auto-vacuum or
+incremental-vacuum modes, or zero otherwise.
+</td></tr><tr><td valign="top" align="center">56</td><td valign="top" align="center">4</td><td align="left">
+The database text encoding. A value of 1 means UTF-8. A value of 2
+means UTF-16le. A value of 3 means UTF-16be.
+</td></tr><tr><td valign="top" align="center">60</td><td valign="top" align="center">4</td><td align="left">
+The "user version" as read and set by the <a href="pragma.html#pragma_user_version">user_version pragma</a>.
+</td></tr><tr><td valign="top" align="center">64</td><td valign="top" align="center">4</td><td align="left">
+True (non-zero) for incremental-vacuum mode. False (zero) otherwise.
+</td></tr><tr><td valign="top" align="center">68</td><td valign="top" align="center">4</td><td align="left">
+The "Application ID" set by <a href="pragma.html#pragma_application_id">PRAGMA application_id</a>.
+</td></tr><tr><td valign="top" align="center">72</td><td valign="top" align="center">20</td><td align="left">
+Reserved for expansion. Must be zero.
+</td></tr><tr><td valign="top" align="center">92</td><td valign="top" align="center">4</td><td align="left">
+The <a href="fileformat2.html#validfor">version-valid-for number</a>.
+</td></tr><tr><td valign="top" align="center">96</td><td valign="top" align="center">4</td><td align="left">
+<a href="c3ref/c_source_id.html">SQLITE_VERSION_NUMBER</a>
+</td></tr></table></center>
+
+<h3 id="magic_header_string"><span>1.3.1. </span>Magic Header String</h3>
+
+<p>Every valid SQLite database file begins with the following 16 bytes
+(in hex): 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00. This byte sequence
+corresponds to the UTF-8 string "SQLite format 3" including the nul
+terminator character at the end.</p>
+
+<h3 id="page_size"><span>1.3.2. </span>Page Size</h3>
+
+<p>The two-byte value beginning at offset 16 determines the page size of
+the database. For SQLite versions 3.7.0.1 (2010-08-04)
+and earlier, this value is
+interpreted as a big-endian integer and must be a power of two between
+512 and 32768, inclusive. Beginning with SQLite <a href="releaselog/3_7_1.html">version 3.7.1</a>
+(2010-08-23), a page
+size of 65536 bytes is supported. The value 65536 will not fit in a
+two-byte integer, so to specify a 65536-byte page size, the value
+at offset 16 is 0x00 0x01.
+This value can be interpreted as a big-endian
+1 and thought of as a magic number to represent the 65536 page size.
+Or one can view the two-byte field as a little endian number and say
+that it represents the page size divided by 256. These two
+interpretations of the page-size field are equivalent.</p>
+
+<a name="vnums"></a>
+
+<h3 id="file_format_version_numbers"><span>1.3.3. </span>File format version numbers</h3>
+
+<p>The file format write version and file format read version at offsets
+18 and 19 are intended to allow for enhancements of the file format
+in future versions of SQLite. In current versions of SQLite, both of
+these values are 1 for rollback journalling modes and 2 for <a href="wal.html">WAL</a>
+journalling mode. If a version of SQLite coded to the current
+file format specification encounters a database file where the read
+version is 1 or 2 but the write version is greater than 2, then the database
+file must be treated as read-only. If a database file with a read version
+greater than 2 is encountered, then that database cannot be read or written.</p>
+
+<a name="resbyte"></a>
+
+<h3 id="reserved_bytes_per_page"><span>1.3.4. </span>Reserved bytes per page</h3>
+
+<p>SQLite has the ability to set aside a small number of extra bytes at
+the end of every page for use by extensions. These extra bytes are
+used, for example, by the SQLite Encryption Extension to store a nonce
+and/or cryptographic checksum associated with each page. The
+"reserved space" size in the 1-byte integer at offset 20 is the number
+of bytes of space at the end of each page to reserve for extensions.
+This value is usually 0. The value can be odd.</p>
+
+<a name="usable_size"></a>
+
+<p>The "usable size" of a database page is the page size specified by the
+2-byte integer at offset 16 in the header less the "reserved" space size
+recorded in the 1-byte integer at offset 20 in the header. The usable
+size of a page might be an odd number. However, the usable size is not
+allowed to be less than 480. In other words, if the page size is 512,
+then the reserved space size cannot exceed 32.</p>
+
+<h3 id="payload_fractions"><span>1.3.5. </span>Payload fractions</h3>
+
+<p>The maximum and minimum embedded payload fractions and the leaf
+payload fraction values must be 64, 32, and 32. These values were
+originally intended to be tunable parameters that could be used to
+modify the storage format of the b-tree algorithm. However, that
+functionality is not supported and there are no current plans to add
+support in the future. Hence, these three bytes are fixed at the
+values specified.</p>
+
+<h3 id="file_change_counter"><span>1.3.6. </span>File change counter</h3>
+
+<a name="chngctr"></a>
+
+<p>The file change counter is a 4-byte big-endian integer at
+offset 24 that is incremented whenever the database file is unlocked
+after having been modified.
+When two or more processes are reading the same database file, each
+process can detect database changes from other processes by monitoring
+the change counter.
+A process will normally want to flush its database page cache when
+another process modified the database, since the cache has become stale.
+The file change counter facilitates this.</p>
+
+<p>In WAL mode, changes to the database are detected using the wal-index
+and so the change counter is not needed. Hence, the change counter might
+not be incremented on each transaction in WAL mode.</p>
+
+<h3 id="in_header_database_size"><span>1.3.7. </span>In-header database size</h3>
+
+<a name="filesize"></a>
+
+<p>The 4-byte big-endian integer at offset 28 into the header
+stores the size of the database file in pages. If this in-header
+datasize size is not valid (see the next paragraph), then the database
+size is computed by looking
+at the actual size of the database file. Older versions of SQLite
+ignored the in-header database size and used the actual file size
+exclusively. Newer versions of SQLite use the in-header database
+size if it is available but fall back to the actual file size if
+the in-header database size is not valid.</p>
+
+<p>The in-header database size is only considered to be valid if
+it is non-zero and if the 4-byte <a href="fileformat2.html#chngctr">change counter</a> at offset 24
+exactly matches the 4-byte <a href="fileformat2.html#validfor">version-valid-for number</a> at offset 92.
+The in-header database size is always valid
+when the database is only modified using recent versions of SQLite,
+versions 3.7.0 (2010-07-21) and later.
+If a legacy version of SQLite writes to the database, it will not
+know to update the in-header database size and so the in-header
+database size could be incorrect. But legacy versions of SQLite
+will also leave the version-valid-for number at offset 92 unchanged
+so it will not match the change-counter. Hence, invalid in-header
+database sizes can be detected (and ignored) by observing when
+the change-counter does not match the version-valid-for number.</p>
+
+<h3 id="free_page_list"><span>1.3.8. </span>Free page list</h3>
+
+<p>Unused pages in the database file are stored on a freelist. The
+4-byte big-endian integer at offset 32 stores the page number of
+the first page of the freelist, or zero if the freelist is empty.
+The 4-byte big-endian integer at offset 36 stores the total
+number of pages on the freelist.</p>
+
+<h3 id="schema_cookie"><span>1.3.9. </span>Schema cookie</h3>
+
+<p>The schema cookie is a 4-byte big-endian integer at offset 40
+that is incremented whenever the database schema changes. A
+prepared statement is compiled against a specific version of the
+database schema. When the database schema changes, the statement
+must be reprepared. When a prepared statement runs, it first checks
+the schema cookie to ensure the value is the same as when the statement
+was prepared and if the schema cookie has changed, the statement either
+automatically reprepares and reruns or it aborts with an <a href="rescode.html#schema">SQLITE_SCHEMA</a>
+error.</p>
+
+<a name="schemaformat"></a>
+
+<h3 id="schema_format_number"><span>1.3.10. </span>Schema format number</h3>
+
+<p>The schema format number is a 4-byte big-endian integer at offset 44.
+The schema format number is similar to the file format read and write
+version numbers at offsets 18 and 19 except that the schema format number
+refers to the high-level SQL formatting rather than the low-level b-tree
+formatting. Four schema format numbers are currently defined:</p>
+
+<ol>
+<li value="1">Format 1 is understood by all versions of SQLite back to
+<a href="releaselog/3_0_0.html">version 3.0.0</a> (2004-06-18).</li>
+<li value="2">Format 2 adds the ability of rows within the same table
+to have a varying number of columns, in order to support the
+<a href="lang_altertable.html">ALTER TABLE ... ADD COLUMN</a> functionality. Support for
+reading and writing format 2 was added in SQLite
+<a href="releaselog/3_1_3.html">version 3.1.3</a> on 2005-02-20.</li>
+<li value="3">Format 3 adds the ability of extra columns added by
+<a href="lang_altertable.html">ALTER TABLE ... ADD COLUMN</a> to have non-NULL default
+values. This capability was added in SQLite <a href="releaselog/3_1_4.html">version 3.1.4</a>
+on 2005-03-11.</li>
+<li value="4">Format 4 causes SQLite to respect the
+<a href="lang_createindex.html#descidx">DESC keyword</a> on
+index declarations. (The DESC keyword is ignored in indexes for
+formats 1, 2, and 3.)
+Format 4 also adds two new boolean record type values (<a href="fileformat2.html#serialtype">serial types</a>
+8 and 9). Support for format 4 was added in SQLite 3.3.0 on
+2006-01-10.</li>
+</ol>
+
+<p>New database files created by SQLite use format 4 by default.
+The <a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a> can be used to cause SQLite
+to create new database files using format 1.
+The format version number can be made to default to 1 instead of 4 by
+setting <a href="compile.html#default_file_format">SQLITE_DEFAULT_FILE_FORMAT</a>=1 at compile-time.
+</p>
+
+<h3 id="suggested_cache_size"><span>1.3.11. </span>Suggested cache size</h3>
+
+<p>The 4-byte big-endian signed integer at offset 48 is the suggested
+cache size in pages for the database file. The value is a suggestion
+only and SQLite is under no obligation to honor it. The absolute value
+of the integer is used as the suggested size. The suggested cache size
+can be set using the <a href="pragma.html#pragma_default_cache_size">default_cache_size pragma</a>.</p>
+
+<h3 id="incremental_vacuum_settings"><span>1.3.12. </span>Incremental vacuum settings</h3>
+
+<p>The two 4-byte big-endian integers at offsets 52 and 64 are used
+to manage the <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> and <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> modes. If
+the integer at offset 52 is zero then pointer-map (ptrmap) pages are
+omitted from the database file and neither auto_vacuum nor
+incremental_vacuum are supported. If the integer at offset 52 is
+non-zero then it is the page number of the largest root page in the
+database file, the database file will contain ptrmap pages, and the
+mode must be either auto_vacuum or incremental_vacuum. In this latter
+case, the integer at offset 64 is true for incremental_vacuum and
+false for auto_vacuum. If the integer at offset 52 is zero then
+the integer at offset 64 must also be zero.</p>
+
+<a name="enc"></a>
+
+<h3 id="text_encoding"><span>1.3.13. </span>Text encoding</h3>
+
+<p>The 4-byte big-endian integer at offset 56 determines the encoding
+used for all text strings stored in the database.
+A value of 1 means UTF-8.
+A value of 2 means UTF-16le.
+A value of 3 means UTF-16be.
+No other values are allowed.
+The sqlite3.h header file defines C-preprocessor macros SQLITE_UTF8 as 1,
+SQLITE_UTF16LE as 2, and SQLITE_UTF16BE as 3, to use in place of
+the numeric codes for the text encoding.</p>
+
+<h3 id="user_version_number"><span>1.3.14. </span>User version number</h3>
+
+<p>The 4-byte big-endian integer at offset 60 is the user version which
+is set and queried by the <a href="pragma.html#pragma_user_version">user_version pragma</a>. The user version is
+not used by SQLite.</p>
+
+<a name="appid"></a>
+
+<h3 id="application_id"><span>1.3.15. </span>Application ID</h3>
+
+<p>The 4-byte big-endian integer at offset 68 is an "Application ID" that
+can be set by the <a href="pragma.html#pragma_application_id">PRAGMA application_id</a> command in order to identify the
+database as belonging to or associated with a particular application.
+The application ID is intended for database files used as an
+<a href="appfileformat.html">application file-format</a>. The application ID can be used by utilities
+such as <a href="http://www.darwinsys.com/file/">file(1)</a> to determine the specific
+file type rather than just reporting "SQLite3 Database". A list of
+assigned application IDs can be seen by consulting the
+<a href="http://www.sqlite.org/src/artifact?ci=trunk&filename=magic.txt">magic.txt</a>
+file in the SQLite source repository.</p>
+
+<a name="validfor"></a>
+
+<h3 id="write_library_version_number_and_version_valid_for_number"><span>1.3.16. </span>Write library version number and version-valid-for number</h3>
+
+<p>The 4-byte big-endian integer at offset 96 stores the
+<a href="c3ref/c_source_id.html">SQLITE_VERSION_NUMBER</a> value for the SQLite library that most
+recently modified the database file. The 4-byte big-endian integer at
+offset 92 is the value of the <a href="fileformat2.html#chngctr">change counter</a> when the version number
+was stored. The integer at offset 92 indicates which transaction
+the version number is valid for and is sometimes called the
+"version-valid-for number".
+
+</p><h3 id="header_space_reserved_for_expansion"><span>1.3.17. </span>Header space reserved for expansion</h3>
+
+<p>All other bytes of the database file header are reserved for
+future expansion and must be set to zero.</p>
+
+<a name="lockbyte"></a>
+
+<h2 id="the_lock_byte_page"><span>1.4. </span>The Lock-Byte Page</h2>
+
+<p>The lock-byte page is the single page of the database file
+that contains the bytes at offsets between 1073741824 and 1073742335,
+inclusive. A database file that is less than or equal to 1073741824 bytes
+in size contains no lock-byte page. A database file larger than
+1073741824 contains exactly one lock-byte page.
+</p>
+
+<p>The lock-byte page is set aside for use by the operating-system specific
+<a href="vfs.html">VFS</a> implementation in implementing the database file locking primitives.
+SQLite does not use the lock-byte page. The SQLite core
+will never read or write the lock-byte page,
+though operating-system specific <a href="vfs.html">VFS</a>
+implementations may choose to read or write bytes on the lock-byte
+page according to the
+needs and proclivities of the underlying system. The unix and win32
+<a href="vfs.html">VFS</a> implementations that come built into SQLite do not write to the
+lock-byte page, but third-party VFS implementations for
+other operating systems might.</p>
+
+<p>The lock-byte page arose from the need to support Win95 which was the
+predominant operating system when this file format was designed and which
+only supported mandatory file locking. All modern operating systems that
+we know of support advisory file locking, and so the lock-byte page is
+not really needed any more, but is retained for backwards compatibility.</p>
+
+<a name="freelist"></a>
+
+<h2 id="the_freelist"><span>1.5. </span>The Freelist</h2>
+
+<p>A database file might contain one or more pages that are not in
+active use. Unused pages can come about, for example, when information
+is deleted from the database. Unused pages are stored on the freelist
+and are reused when additional pages are required.</p>
+
+<p>The freelist is organized as a linked list of freelist trunk pages
+with each trunk page containing page numbers for zero or more freelist
+leaf pages.</p>
+
+<p>A freelist trunk page consists of an array of 4-byte big-endian integers.
+The size of the array is as many integers as will fit in the usable space
+of a page. The minimum usable space is 480 bytes so the array will always
+be at least 120 entries in length. The first integer on a freelist trunk
+page is the page number of the next freelist trunk page in the list or zero
+if this is the last freelist trunk page. The second integer on a freelist
+trunk page is the number of leaf page pointers to follow.
+Call the second integer on a freelist trunk page L.
+If L is greater than zero then integers with array indexes between 2 and
+L+1 inclusive contain page numbers for freelist leaf pages.</p>
+
+<p>Freelist leaf pages contain no information. SQLite avoids reading or
+writing freelist leaf pages in order to reduce disk I/O.</p>
+
+<p>A bug in SQLite versions prior to 3.6.0 (2008-07-16)
+caused the database to be
+reported as corrupt if any of the last 6 entries in the freelist trunk page
+array contained non-zero values. Newer versions of SQLite do not have
+this problem. However, newer versions of SQLite still avoid using the
+last six entries in the freelist trunk page array in order that database
+files created by newer versions of SQLite can be read by older versions
+of SQLite.</p>
+
+<p>The number of freelist pages is stored as a 4-byte big-endian integer
+in the database header at an offset of 36 from the beginning of the file.
+The database header also stores the page number of the first freelist trunk
+page as a 4-byte big-endian integer at an offset of 32 from the beginning
+of the file.</p>
+
+<a name="btree"></a>
+
+<h2 id="b_tree_pages"><span>1.6. </span>B-tree Pages</h2>
+
+<p>The b-tree algorithm provides key/data storage with unique and
+ordered keys on page-oriented storage devices.
+For background information on b-trees, see
+Knuth, <u>The Art Of Computer Programming</u>, Volume 3 "Sorting
+and Searching", pages 471-479. Two variants of b-trees are used by
+SQLite. "Table b-trees" use a 64-bit signed integer key and store
+all data in the leaves. "Index b-trees" use arbitrary keys and store no
+data at all.
+
+</p><p>A b-tree page is either an interior page or a leaf page.
+A leaf page contains keys and in the case of a table b-tree each
+key has associated data. An interior page contains
+K keys together with K+1 pointers to child b-tree pages.
+A "pointer" in an interior b-tree page is just the 32-bit
+unsigned integer page number of the child page.</p><p>
+
+</p><p>The number of keys on an interior b-tree page, K,
+is almost always at least 2 and is usually much more than 2.
+The only exception is when page 1 is an interior b-tree page.
+Page 1 has 100 fewer bytes of storage space available,
+due to the presence of the database header at the beginning of that page,
+and so sometimes (rarely) if page 1 is an interior b-tree page, it can
+end up holding just a a single key. In all other cases, K is 2 or more.
+The upper bound on K is as many keys as will fit on the page. Large keys
+on index b-trees are split up into <a href="fileformat2.html#ovflpgs">overflow pages</a> so that no single key
+uses more than one fourth of the available storage space on the page
+and hence every internal page is able to store at least 4 keys.
+The integer keys of table b-trees are never large enough to
+require overflow, so key overflow only occurs on index b-trees.</p>
+
+<p>Define the depth
+of a leaf b-tree to be 1 and the depth of any interior b-tree to be one
+more than the maximum depth of any of its children. In a well-formed
+database, all children of an interior b-tree have the same depth.</p>
+
+<p>In an interior b-tree page, the pointers and keys logically alternate
+with a pointer on both ends. (The previous sentence is to be understood
+conceptually - the actual layout of the keys and
+pointers within the page is more complicated and will be described in
+the sequel.) All keys within the same page are unique and are logically
+organized in ascending order from left to right. (Again, this ordering
+is logical, not physical. The actual location of keys within the page
+is arbitrary.) For any key X, pointers to the left
+of a X refer to b-tree pages on which all keys are less than or equal to X.
+Pointers to the right of X refer to pages where all keys are
+greater than X.</p>
+
+<p>Within an interior b-tree page, each key and the pointer to its
+immediate left are combined into a structure called a "cell". The
+right-most pointer is held separately. A leaf b-tree page has no
+pointers, but it still uses the cell structure to hold keys for
+index b-trees or keys and content for table b-trees. Data is also
+contained in the cell.
+</p>
+
+<p>Every b-tree page has at most one parent b-tree page.
+A b-tree page without a parent is called a root page. A root b-tree page
+together with the closure of its children form a complete b-tree.
+It is possible (and in fact rather common) to have a complete b-tree
+that consists of a single page that is both a leaf and the root.
+Because there are pointers from parents to children, every page of a
+complete b-tree can be located if only the root page is known. Hence,
+b-trees are identified by their root page number.</p>
+
+<a name="btypes"></a>
+
+<p>A b-tree page is either a table b-tree page or an index b-tree page.
+All pages within each complete b-tree are of the same type: either table
+or index. There is one table b-trees in the database file
+for each rowid table in the database schema, including system tables
+such as <a href="schematab.html">sqlite_schema</a>. There is one index b-tree
+in the database file for each index in the schema, including implied indexes
+created by uniqueness constraints. There are no b-trees associated with
+<a href="vtab.html">virtual tables</a>. Specific virtual table implementations might make use
+of <a href="vtab.html#xshadowname">shadow tables</a> for storage, but those shadow tables will have separate
+entries in the database schema. <a href="withoutrowid.html">WITHOUT ROWID</a> tables use index b-trees
+rather than a table b-trees, so there is one
+index b-tree in the database file for each <a href="withoutrowid.html">WITHOUT ROWID</a> table.
+The b-tree corresponding to the sqlite_schema table is always a table
+b-tree and always has a root page of 1.
+The sqlite_schema table contains the root page number for every other
+table and index in the database file.</p>
+
+<p>Each entry in a table b-tree consists of a 64-bit signed integer key
+and up to 2147483647 bytes of arbitrary data. (The key of a table b-tree
+corresponds to the <a href="lang_createtable.html#rowid">rowid</a> of the SQL table that the b-tree implements.)
+Interior table b-trees hold only keys and pointers to children.
+All data is contained in the table b-tree leaves.</p>
+
+<p>Each entry in an index b-tree consists of an arbitrary key of up
+to 2147483647 bytes in length and no data.</p>
+
+<a name="cell_payload"></a>
+
+<p>Define the "payload" of a cell to be the arbitrary length section
+of the cell. For an index b-tree, the key is always arbitrary in length
+and hence the payload is the key. There are no arbitrary length elements
+in the cells of interior table b-tree pages and so those cells have no
+payload. Table b-tree leaf pages contain arbitrary length content and
+so for cells on those pages the payload is the content.
+</p><p>When the size of payload for a cell exceeds a certain threshold (to
+be defined later) then only the first few bytes of the payload
+are stored on the b-tree page and the balance is stored in a linked list
+of content overflow pages.</p>
+
+<p>A b-tree page is divided into regions in the following order:
+
+</p><ol>
+<li>The 100-byte database file header (found on page 1 only)
+</li><li>The 8 or 12 byte b-tree page header
+</li><li>The cell pointer array
+</li><li>Unallocated space
+</li><li>The cell content area
+</li><li>The reserved region.
+</li></ol>
+
+
+<p>The 100-byte database file header is found only on page 1, which is
+always a table b-tree page. All other b-tree pages in the database file
+omit this 100-byte header.</p>
+
+<p>The reserved region is an area of unused space at the end of every
+page (except the locking page) that extensions can use to hold per-page
+information. The size of the reserved region is determined by the one-byte
+unsigned integer found at an offset of 20 into the database file header.
+The size of the reserved region is usually zero.</p>
+
+<p>The b-tree page header is 8 bytes in size for leaf pages and 12
+bytes for interior pages. All multibyte values in the page header
+are big-endian.
+The b-tree page header is composed of the following fields:</p>
+
+<center>
+<i>B-tree Page Header Format</i><br>
+<table border="1" width="80%">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td align="center" valign="top">0</td><td align="center" valign="top">1</td><td align="left">
+The one-byte flag at offset 0 indicating the b-tree page type.<ul>
+<li>A value of 2 (0x02) means the page is an interior index b-tree page.
+</li><li>A value of 5 (0x05) means the page is an interior table b-tree page.
+</li><li>A value of 10 (0x0a) means the page is a leaf index b-tree page.
+</li><li>A value of 13 (0x0d) means the page is a leaf table b-tree page.</li></ul>
+Any other value for the b-tree page type is an error.
+</td></tr><tr><td align="center" valign="top">1</td><td align="center" valign="top">2</td><td align="left">
+The two-byte integer at offset 1 gives the start of the
+first freeblock on the page, or is zero if there are no freeblocks.
+</td></tr><tr><td align="center" valign="top">3</td><td align="center" valign="top">2</td><td align="left">
+The two-byte integer at offset 3 gives the number of cells on the page.
+</td></tr><tr><td align="center" valign="top">5</td><td align="center" valign="top">2</td><td align="left">
+The two-byte integer at offset 5 designates the start of the cell content
+area. A zero value for this integer is interpreted as 65536.
+</td></tr><tr><td align="center" valign="top">7</td><td align="center" valign="top">1</td><td align="left">
+The one-byte integer at offset 7 gives the number of fragmented free
+bytes within the cell content area.
+</td></tr><tr><td align="center" valign="top">8</td><td align="center" valign="top">4</td><td align="left">
+The four-byte page number at offset 8 is the right-most pointer. This
+value appears in the header of interior b-tree pages only and is omitted from
+all other pages.
+</td></tr></table></center>
+
+<p>The cell pointer array of a b-tree page immediately follows the b-tree
+page header. Let K be the number of cells on the btree. The cell pointer
+array consists of K 2-byte integer offsets to the cell contents. The
+cell pointers are arranged in key order with left-most cell (the cell with the
+smallest key) first and the right-most cell (the cell with the largest
+key) last.</p>
+
+<p>Cell content is stored in the cell content region of the b-tree page.
+SQLite strives to place cells as far toward the end of the b-tree page as
+it can, in order to leave space for future growth of the cell pointer array.
+The area in between the last cell pointer array entry and the beginning of
+the first cell is the unallocated region.
+</p>
+
+<p>If a page contains no cells (which is only possible for a root page
+of a table that contains no rows) then the offset to the
+cell content area will equal the page size minus the bytes of reserved space.
+If the database uses a 65536-byte page size and the reserved space is zero
+(the usual value for reserved space) then the cell content offset of an
+empty page wants to be 65536.
+However, that integer is too large to be stored in a
+2-byte unsigned integer, so a value of 0 is used in its place.
+
+</p><p>A freeblock is a structure used to identify unallocated space within
+a b-tree page. Freeblocks are organized as a chain. The first 2 bytes of
+a freeblock are a big-endian integer which is the offset in the b-tree page
+of the next freeblock in the chain, or zero if the freeblock is the last on
+the chain. The third and fourth bytes of each freeblock form
+a big-endian integer which is the size of the freeblock in bytes, including
+the 4-byte header. Freeblocks are always connected in order
+of increasing offset. The second field of the b-tree page header is the
+offset of the first freeblock, or zero if there are no freeblocks on the
+page. In a well-formed b-tree page, there will always be at least one cell
+before the first freeblock.</p>
+
+<p>A freeblock requires at least 4 bytes of space. If there is an isolated
+group of 1, 2, or 3 unused bytes within the cell content area, those bytes
+comprise a fragment. The total number of bytes in all fragments is stored
+in the fifth field of the b-tree page header. In a well-formed b-tree page,
+the total number of bytes in fragments may not exceed 60.</p>
+
+<p>The total amount of free space on a b-tree page consists of the size
+of the unallocated region plus the total size of all freeblocks plus the
+number of fragmented free bytes. SQLite may from time to time reorganize
+a b-tree page so that there are no freeblocks or fragment bytes, all
+unused bytes are contained in the unallocated space region, and all
+cells are packed tightly at the end of the page. This is called
+"defragmenting" the b-tree page.</p>
+
+<a name="varint"></a>
+
+
+<p>A variable-length integer or "varint" is a static Huffman encoding
+of 64-bit twos-complement integers that uses less space for small positive
+values.
+A varint is between 1 and 9 bytes in length. The varint consists of either
+zero or more bytes which have the high-order bit set followed by a single byte
+with the high-order bit clear, or nine bytes, whichever is shorter.
+The lower seven bits of each of the first eight bytes and all 8 bits of
+the ninth byte are used to reconstruct the 64-bit twos-complement integer.
+Varints are big-endian: bits taken from the earlier byte of the varint
+are more significant than bits taken from the later bytes. </p>
+
+<p>The format of a cell depends on which kind of b-tree page the cell
+appears on. The following table shows the elements of a cell, in
+order of appearance, for the various b-tree page types.
+
+</p><dl>
+<dt><p>Table B-Tree Leaf Cell (header 0x0d):</p></dt>
+<dd><p></p><ul>
+<li>A varint which is the total number of bytes of payload, including any
+overflow
+</li><li>A varint which is the integer key, a.k.a. "<a href="lang_createtable.html#rowid">rowid</a>"
+</li><li>The initial portion of the payload that does not spill to overflow
+pages.
+</li><li>A 4-byte big-endian integer page number for the first page of the
+overflow page list - omitted if all payload fits on the b-tree page.
+</li></ul></dd>
+
+<dt><p>Table B-Tree Interior Cell (header 0x05):</p></dt>
+<dd><p></p><ul>
+<li>A 4-byte big-endian page number which is the left child pointer.
+</li><li>A varint which is the integer key
+</li></ul></dd>
+
+<dt><p>Index B-Tree Leaf Cell (header 0x0a):</p></dt>
+<dd><p></p><ul>
+<li>A varint which is the total number of bytes of key payload, including any
+overflow
+</li><li>The initial portion of the payload that does not spill to overflow
+pages.
+</li><li>A 4-byte big-endian integer page number for the first page of the
+overflow page list - omitted if all payload fits on the b-tree page.
+</li></ul></dd>
+
+<dt><p>Index B-Tree Interior Cell (header 0x02):</p></dt>
+<dd><p></p><ul>
+<li>A 4-byte big-endian page number which is the left child pointer.
+</li><li>A varint which is the total number of bytes of key payload, including any
+overflow
+</li><li>The initial portion of the payload that does not spill to overflow
+pages.
+</li><li>A 4-byte big-endian integer page number for the first page of the
+overflow page list - omitted if all payload fits on the b-tree page.
+</li></ul></dd>
+</dl>
+
+<p>The information above can be recast into a table format as follows:</p>
+
+<a name="cellformat"></a>
+
+<center>
+<i>B-tree Cell Format</i>
+<table border="1" width="80%">
+<tr><th rowspan="2">Datatype
+ </th><th colspan="4">Appears in...
+ </th><th rowspan="2">Description
+</th></tr><tr><th>Table Leaf (0x0d)
+ </th><th>Table Interior (0x05)
+ </th><th>Index Leaf (0x0a)
+ </th><th>Index Interior (0x02)
+</th></tr><tr><td align="center" valign="top">4-byte integer
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="left">Page number of left child
+</td></tr><tr><td align="center" valign="top">varint
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="left">Number of bytes of payload
+</td></tr><tr><td align="center" valign="top">varint
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="left">Rowid
+</td></tr><tr><td align="center" valign="top">byte array
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="left">Payload
+</td></tr><tr><td align="center" valign="top">4-byte integer
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&nbsp;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="center" valign="top">&#x2714;
+ </td><td align="left">Page number of first overflow page
+</td></tr></table></center>
+
+
+<p>The amount of payload that spills onto overflow pages also depends on
+the page type. For the following computations, let U be the usable size
+of a database page, the total page size less the reserved space at the
+end of each page. And let P be the payload size. In the following,
+symbol X represents the maximum amount of payload that can be stored directly
+on the b-tree page without spilling onto an overflow page and symbol M
+represents the minimum amount of payload that must be stored on the btree
+page before spilling is allowed.
+
+</p><dl>
+<dt><p>Table B-Tree Leaf Cell:</p></dt>
+<dd><p>
+Let X be U-35. If the payload size P is less than or equal to X then
+the entire payload is stored on the b-tree leaf page.
+Let M be ((U-12)*32/255)-23 and let K be M+((P-M)%(U-4)).
+If P is greater than X
+then the number of bytes stored on the table b-tree leaf page is K
+if K is less or equal to X or M otherwise.
+The number of bytes stored on the leaf page is never less than M.
+</p></dd>
+
+<dt><p>Table B-Tree Interior Cell:</p></dt>
+<dd><p>
+Interior pages of table b-trees have no payload and so there is never
+any payload to spill.
+</p></dd>
+
+<dt><p>Index B-Tree Leaf Or Interior Cell:</p></dt>
+<dd><p>
+Let X be ((U-12)*64/255)-23. If the payload size P is less than
+or equal to X then the entire payload is stored on the b-tree page.
+Let M be ((U-12)*32/255)-23 and let K be M+((P-M)%(U-4)).
+If P is greater than X then the number
+of bytes stored on the index b-tree page is K if K is less than or
+equal to X or M otherwise.
+The number of bytes stored on the index page is never less than M.
+</p></dd>
+</dl>
+
+<p>Here is an alternative description of the same computation:
+
+</p><ul>
+<li>X is U-35 for table btree leaf pages or
+ ((U-12)*64/255)-23 for index pages.
+</li><li>M is always ((U-12)*32/255)-23.
+</li><li>Let K be M+((P-M)%(U-4)).
+</li><li>If P&lt;=X then all P bytes of payload are stored directly on the
+ btree page without overflow.
+</li><li>If P&gt;X and K&lt;=X then the first K bytes of P are stored on the
+ btree page and the remaining P-K bytes are stored on overflow pages.
+</li><li>If P&gt;X and K&gt;X then the first M bytes of P are stored on the
+ btree page and the remaining P-M bytes are stored on overflow pages.
+</li></ul>
+
+<p>The overflow thresholds are designed to give a minimum fanout of
+4 for index b-trees and to make sure enough of the payload
+is on the b-tree page that the record header can usually be accessed
+without consulting an overflow page. In hindsight, the designer of
+the SQLite b-tree logic realized that these thresholds could have been
+made much simpler. However, the computations cannot be changed
+without resulting in an incompatible file format. And the current computations
+work well, even if they are a little complex.</p>
+
+<a name="ovflpgs"></a>
+
+<h2 id="cell_payload_overflow_pages"><span>1.7. </span>Cell Payload Overflow Pages</h2>
+
+<p>When the payload of a b-tree cell is too large for the b-tree page,
+the surplus is spilled onto overflow pages. Overflow pages form a linked
+list. The first four bytes of each overflow page are a big-endian
+integer which is the page number of the next page in the chain, or zero
+for the final page in the chain. The fifth byte through the last usable
+byte are used to hold overflow content.</p>
+
+<h2 id="pointer_map_or_ptrmap_pages"><span>1.8. </span>Pointer Map or Ptrmap Pages</h2>
+
+<p>Pointer map or ptrmap pages are extra pages inserted into the database
+to make the operation of <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> and <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> modes
+more efficient. Other page types in the database typically have pointers
+from parent to child. For example, an interior b-tree page contains pointers
+to its child b-tree pages and an overflow chain has a pointer
+from earlier to later links in the chain. A ptrmap page contains linkage
+information going in the opposite direction, from child to parent.</p>
+
+<p>Ptrmap pages must exist in any database file which has a non-zero
+largest root b-tree page value at offset 52 in the database header.
+If the largest root b-tree page value is zero, then the database must not
+contain ptrmap pages.</p>
+
+<p>In a database with ptrmap pages, the first ptrmap page is page 2.
+A ptrmap page consists of an array of 5-byte entries. Let J be the
+number of 5-byte entries that will fit in the usable space of a page.
+(In other words, J=U/5.) The first ptrmap page will contain back pointer
+information for pages 3 through J+2, inclusive. The second pointer map
+page will be on page J+3 and that ptrmap page will provide back pointer
+information for pages J+4 through 2*J+3 inclusive. And so forth for
+the entire database file.</p>
+
+<p>In a database that uses ptrmap pages, all pages at locations identified
+by the computation in the previous paragraph must be ptrmap page and no
+other page may be a ptrmap page. Except, if the byte-lock page happens to
+fall on the same page number as a ptrmap page, then the ptrmap is moved
+to the following page for that one case.</p>
+
+<p>Each 5-byte entry on a ptrmap page provides back-link information about
+one of the pages that immediately follow the pointer map. If page B is a
+ptrmap page then back-link information about page B+1 is provided by
+the first entry on the pointer map. Information about page B+2 is
+provided by the second entry. And so forth.</p>
+
+<p>Each 5-byte ptrmap entry consists of one byte of "page type" information
+followed by a 4-byte big-endian page number. Five page types are recognized:
+</p>
+
+<ol>
+<li>A b-tree root page. The
+page number should be zero.
+</li><li>A freelist page. The page number should be
+zero.
+</li><li>The first page of a
+cell payload overflow chain. The page number is the b-tree page that
+contains the cell whose content has overflowed.
+</li><li>A page in an overflow chain
+other than the first page. The page number is the prior page of the
+overflow chain.
+</li><li>A non-root b-tree page. The
+page number is the parent b-tree page.
+</li></ol>
+
+<p>In any database file that contains ptrmap pages, all b-tree root pages
+must come before any non-root b-tree page, cell payload overflow page, or
+freelist page. This restriction ensures that a root page will never
+be moved during an auto-vacuum or incremental-vacuum. The auto-vacuum
+logic does not know how to update the root_page field of the sqlite_schema
+table and so it is necessary to prevent root pages from being moved
+during an auto-vacuum in order to preserve the integrity of the
+sqlite_schema table. Root pages are moved to the beginning of the
+database file by the CREATE TABLE, CREATE INDEX, DROP TABLE, and
+DROP INDEX operations.</p>
+
+<h1 id="schema_layer"><span>2. </span>Schema Layer</h1>
+
+<p>The foregoing text describes low-level aspects of the SQLite file
+format. The b-tree mechanism provides a powerful and efficient means of
+accessing a large data set. This section will describe how the
+low-level b-tree layer is used to implement higher-level SQL
+capabilities.</p>
+
+<a name="record_format"></a>
+
+<h2 id="record_format"><span>2.1. </span>Record Format</h2>
+
+<p>The data for a table b-tree leaf page and the key
+of an index b-tree page was characterized above
+as an arbitrary sequence of bytes.
+The prior discussion mentioned one key being less than another, but
+did not define what "less than" meant. The current section will address
+these omissions.</p>
+
+<p>Payload, either table b-tree data or index b-tree keys,
+is always in the "record format".
+The record format defines a sequence of values corresponding
+to columns in a table or index. The record format specifies the number
+of columns, the datatype of each column, and the content of each column.</p>
+
+<p>The record format makes extensive use of the
+<a href="fileformat2.html#varint">variable-length integer</a> or <a href="fileformat2.html#varint">varint</a>
+representation of 64-bit signed integers defined above.</p>
+
+<a name="serialtype"></a>
+
+<p>A record contains a header and a body, in that order.
+The header begins with a single varint which determines the total number
+of bytes in the header. The varint value is the size of the header in
+bytes including the size varint itself. Following the size varint are
+one or more additional varints, one per column. These additional varints
+are called "serial type" numbers and
+determine the datatype of each column, according to the following chart:</p>
+
+<center>
+<i>Serial Type Codes Of The Record Format</i><br>
+<table width="80%" border="1">
+<tr><th>Serial Type</th><th>Content Size</th><th>Meaning
+</th></tr><tr><td valign="top" align="center">0</td><td valign="top" align="center">0</td><td align="left">
+Value is a NULL.
+</td></tr><tr><td valign="top" align="center">1</td><td valign="top" align="center">1</td><td align="left">
+Value is an 8-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">2</td><td valign="top" align="center">2</td><td align="left">
+Value is a big-endian 16-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">3</td><td valign="top" align="center">3</td><td align="left">
+Value is a big-endian 24-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">4</td><td valign="top" align="center">4</td><td align="left">
+Value is a big-endian 32-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">5</td><td valign="top" align="center">6</td><td align="left">
+Value is a big-endian 48-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">6</td><td valign="top" align="center">8</td><td align="left">
+Value is a big-endian 64-bit twos-complement integer.
+</td></tr><tr><td valign="top" align="center">7</td><td valign="top" align="center">8</td><td align="left">
+Value is a big-endian IEEE 754-2008 64-bit floating point number.
+</td></tr><tr><td valign="top" align="center">8</td><td valign="top" align="center">0</td><td align="left">
+Value is the integer 0. (Only available for <a href="fileformat2.html#schemaformat">schema format</a> 4 and higher.)
+</td></tr><tr><td valign="top" align="center">9</td><td valign="top" align="center">0</td><td align="left">
+Value is the integer 1. (Only available for <a href="fileformat2.html#schemaformat">schema format</a> 4 and higher.)
+</td></tr><tr><td valign="top" align="center">10,11
+ </td><td valign="top" align="center"><i>variable</i></td><td align="left">
+<i>Reserved for internal use. These serial type codes will
+ never appear in a well-formed database file, but they
+ might be used in transient and temporary database files
+ that SQLite sometimes generates for its own use.
+ The meanings of these codes can shift from one release
+ of SQLite to the next.</i>
+</td></tr><tr><td valign="top" align="center">N&#x2265;12 and even
+ </td><td valign="top" align="center">(N-12)/2</td><td align="left">
+Value is a BLOB that is (N-12)/2 bytes in length.
+</td></tr><tr><td valign="top" align="center">N&#x2265;13 and odd
+ </td><td valign="top" align="center">(N-13)/2</td><td align="left">
+Value is a string in the <a href="fileformat2.html#enc">text encoding</a> and (N-13)/2 bytes in length.
+The nul terminator is not stored.
+</td></tr></table></center>
+
+<p>The header size varint
+and serial type varints will usually consist of a single byte. The
+serial type varints for large strings and BLOBs might extend to two or three
+byte varints, but that is the exception rather than the rule.
+The varint format is very efficient at coding the record header.</p>
+
+<p>The values for each column in the record immediately follow the header.
+For serial types 0, 8, 9, 12, and 13, the value is zero bytes in
+length. If all columns are of these types then the body section of the
+record is empty.</p>
+
+<p>A record might have fewer values than the number of columns in the
+corresponding table. This can happen, for example, after an
+<a href="lang_altertable.html">ALTER TABLE ... ADD COLUMN</a> SQL statement has increased
+the number of columns in the table schema without modifying preexisting rows
+in the table.
+Missing values at the end of the record are filled in using the
+<a href="lang_createtable.html#dfltval">default value</a> for the corresponding columns defined in the table schema.
+</p>
+
+
+<h2 id="record_sort_order"><span>2.2. </span>Record Sort Order</h2>
+
+<p>The order of keys in an index b-tree is determined by the sort order of
+the records that the keys represent. Record comparison progresses column
+by column. Columns of a record are examined from left to right. The
+first pair of columns that are not equal determines the relative order
+of the two records. The sort order of individual columns is as
+follows:</p>
+
+<ol>
+<li>NULL values (serial type 0) sort first.
+</li><li>Numeric values (serial types 1 through 9) sort after NULLs
+ and in numeric order.
+</li><li>Text values (odd serial types 13 and larger) sort after numeric
+ values in the order determined by the columns <a href="datatype3.html#collation">collating function</a>.
+</li><li>BLOB values (even serial types 12 and larger) sort last and in the order
+ determined by memcmp().
+</li></ol>
+
+<p>A <a href="datatype3.html#collation">collating function</a> for each column is necessary in order to compute
+the order of text fields.
+SQLite defines three built-in collating functions:
+</p>
+
+<blockquote><table border="0" cellspacing="10">
+<tr><td valign="top">BINARY
+ </td><td> The built-in BINARY collation compares strings byte by byte
+ using the memcmp() function
+ from the standard C library.
+</td></tr><tr><td valign="top">NOCASE
+ </td><td> The NOCASE collation is like BINARY except that uppercase
+ ASCII characters ('A' through 'Z')
+ are folded into their lowercase equivalents prior to running the
+ comparison. Only ASCII characters are case-folded.
+ NOCASE
+ does not implement a general purpose unicode caseless comparison.
+</td></tr><tr><td valign="top">RTRIM
+ </td><td> RTRIM is like BINARY except that extra spaces at the end of either
+ string do not change the result. In other words, strings will
+ compare equal to one another as long as they
+ differ only in the number of spaces at the end.
+</td></tr></table></blockquote>
+
+<p>Additional application-specific collating functions can be added to
+SQLite using the <a href="c3ref/create_collation.html">sqlite3_create_collation()</a> interface.</p>
+
+<p>The default collating function for all strings is BINARY.
+Alternative collating functions for table columns can be specified in the
+<a href="lang_createtable.html">CREATE TABLE</a> statement using the COLLATE clause on the <a href="lang_createtable.html#tablecoldef">column definition</a>.
+When a column is indexed, the same collating function specified in the
+<a href="lang_createtable.html">CREATE TABLE</a> statement is used for the column in the index, by default,
+though this can be overridden using a COLLATE clause in the
+<a href="lang_createindex.html">CREATE INDEX</a> statement.
+
+<a name="#sqltab"></a>
+
+</p><h2 id="representation_of_sql_tables"><span>2.3. </span>Representation Of SQL Tables</h2>
+
+<p> Each ordinary SQL table in the database schema is represented on-disk
+by a table b-tree. Each entry in the table b-tree corresponds to a row
+of the SQL table. The <a href="lang_createtable.html#rowid">rowid</a> of the SQL table is the 64-bit signed
+integer key for each entry in the table b-tree.</p>
+
+<p> The content of each SQL table row is stored in the database file by
+first combining the values in the various columns into a byte array
+in the record format, then storing that byte array as the payload in
+an entry in the table b-tree. The order of values in the record is
+the same as the order of columns in the SQL table definition.
+When an SQL table includes an
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column (which aliases the <a href="lang_createtable.html#rowid">rowid</a>) then that
+column appears in the record as a NULL value. SQLite will always use
+the table b-tree key rather than the NULL value when referencing the
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column.</p>
+
+<p> If the <a href="datatype3.html#affinity">affinity</a> of a column is REAL and that column contains a
+value that can be converted to an integer without loss of information
+(if the value contains no fractional part and is not too large to be
+represented as an integer) then the column may be stored in the record
+as an integer. SQLite will convert the value back to floating
+point when extracting it from the record.</p>
+
+<h2 id="representation_of_without_rowid_tables"><span>2.4. </span>Representation of WITHOUT ROWID Tables</h2>
+
+<p>If an SQL table is created using the "WITHOUT ROWID" clause at the
+end of its CREATE TABLE statement, then that table is a <a href="withoutrowid.html">WITHOUT ROWID</a>
+table and uses a different on-disk representation. A WITHOUT ROWID
+table uses an index b-tree rather than a table b-tree for storage.
+The key for each entry in the WITHOUT ROWID b-tree is a record composed
+of the columns of the PRIMARY KEY followed by all remaining columns of
+the table. The primary key columns appear in the order that they were
+declared in the PRIMARY KEY clause and the remaining columns appear in
+the order they occur in the CREATE TABLE statement.
+
+</p><p>Hence, the content encoding for a WITHOUT ROWID table is the same
+as the content encoding for an ordinary rowid table, except that the
+order of the columns is rearranged so that PRIMARY KEY columns come
+first, and the content is used as the key in an index b-tree rather
+than as the data in a table b-tree.
+The special encoding rules for columns with REAL affinity
+apply to WITHOUT ROWID tables the same as they do with rowid tables.
+
+</p><h3 id="suppression_of_redundant_columns_in_the_primary_key_of_without_rowid_tables"><span>2.4.1. </span>Suppression of redundant columns in the PRIMARY KEY
+ of WITHOUT ROWID tables</h3>
+
+<p>If the PRIMARY KEY of a WITHOUT ROWID tables uses the same columns
+with the same collating sequence more than once, then the second and
+subsequent occurrences of that column in the PRIMARY KEY definition are
+ignored. For example, the following CREATE TABLE statements all specify
+the same table, which will have the exact same representation on disk:
+
+</p><blockquote><pre>
+CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,c)) WITHOUT ROWID);
+CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,c,a,c)) WITHOUT ROWID);
+CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,A,a,C)) WITHOUT ROWID);
+CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,a,a,a,c)) WITHOUT ROWID);
+</pre></blockquote>
+
+<p>The first example above is the preferred definition of the table,
+of course. All of the examples create a WITHOUT ROWID table with
+two PRIMARY KEY columns, "a" and "c", in that order, followed by
+two data columns "b" and "d", also in that order.
+
+</p><h2 id="representation_of_sql_indices"><span>2.5. </span>Representation Of SQL Indices</h2>
+
+<p>Each SQL index, whether explicitly declared via a <a href="lang_createindex.html">CREATE INDEX</a> statement
+or implied by a UNIQUE or PRIMARY KEY constraint, corresponds to an
+index b-tree in the database file.
+Each entry in the index b-tree corresponds to a single row in the
+associated SQL table.
+The key to an index b-tree is
+a record composed of the columns that are being indexed followed by the
+key of the corresponding table row. For ordinary tables, the row key is
+the <a href="lang_createtable.html#rowid">rowid</a>, and for <a href="withoutrowid.html">WITHOUT ROWID</a> tables the row key is the PRIMARY KEY.
+Because every row in the table has a unique row key,
+all keys in an index are unique.</p>
+
+<p>In a normal index, there is a one-to-one mapping between rows in a
+table and entries in each index associated with that table.
+However, in a <a href="partialindex.html">partial index</a>, the index b-tree only contains entries
+corresponding to table rows for which the WHERE clause expression on the
+CREATE INDEX statement is true.
+Corresponding rows in the index and table b-trees share the same rowid
+or primary key values and contain the same value for all indexed columns.</p>
+
+<h3 id="suppression_of_redundant_columns_in_without_rowid_secondary_indexes_"><span>2.5.1. </span>Suppression of redundant columns in WITHOUT ROWID secondary indexes
+</h3>
+
+<p> In an index on a WITHOUT ROWID table, if a column of the PRIMARY KEY
+is also a column in the index and has a matching collating sequence, then the
+indexed column is not repeated in the table-key suffix on the
+end of the index record. As an example, consider the following SQL:
+
+</p><blockquote><pre>
+CREATE TABLE ex25(a,b,c,d,e,PRIMARY KEY(d,c,a)) WITHOUT rowid;
+CREATE INDEX ex25ce ON ex25(c,e);
+CREATE INDEX ex25acde ON ex25(a,c,d,e);
+CREATE INDEX ex25ae ON ex25(a COLLATE nocase,e);
+</pre></blockquote>
+
+<p>Each row in the ex25ce index is a record
+with these columns: c, e, d, a. The first two columns are
+the columns being indexed, c and e. The remaining columns are the primary
+key of the corresponding table row. Normally, the primary key would be
+columns d, c, and a, but because column c already appears earlier in the
+index, it is omitted from the key suffix.</p>
+
+<p>In the extreme case where the columns being indexed cover all columns
+of the PRIMARY KEY, the index will consist of only the columns being
+indexed. The ex25acde example above demonstrates this. Each entry in
+the ex25acde index consists of only the columns a, c, d, and e, in that
+order.</p>
+
+<p>Each row in ex25ae contains five columns: a, e, d, c, a. The "a"
+column is repeated since the first occurrence of "a" has a collating
+function of "nocase" and the second has a collating sequence of "binary".
+If the "a" column is not repeated and if the table contains two or more
+entries with the same "e" value and where "a" differs only in case, then
+all of those table entries would correspond to a single entry in the
+index, which would break the one-to-one correspondence between the table
+and the index.
+
+</p><p> The suppression of redundant columns in the key suffix of an index
+entry only occurs in WITHOUT ROWID tables. In an ordinary rowid table,
+the index entry always ends with the rowid even if the <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>
+column is one of the columns being indexed.</p>
+
+<a name="ffschema"></a>
+
+<h2 id="storage_of_the_sql_database_schema"><span>2.6. </span>Storage Of The SQL Database Schema</h2>
+
+<p>Page 1 of a database file is the root page of a table b-tree that
+holds a special table named "<a href="schematab.html">sqlite_schema</a>". This b-tree is known
+as the "schema table" since it stores the complete
+database schema. The structure of the sqlite_schema table is as
+if it had been created using the following SQL:</p>
+
+<blockquote><pre>
+CREATE TABLE sqlite_schema(
+ type text,
+ name text,
+ tbl_name text,
+ rootpage integer,
+ sql text
+);
+</pre></blockquote>
+
+<p>The sqlite_schema table contains one row for each table, index, view,
+and trigger (collectively "objects") in the database schema, except there
+is no entry for the sqlite_schema table itself. The sqlite_schema table
+contains entries for <a href="fileformat2.html#intschema">internal schema objects</a> in addition to application-
+and programmer-defined objects.
+
+
+</p><p>The sqlite_schema.type column will be one
+of the following text strings: 'table', 'index', 'view', or 'trigger'
+according to the type of object defined. The 'table' string is used
+for both ordinary and <a href="vtab.html">virtual tables</a>.</p>
+
+<p>The sqlite_schema.name column will hold the name of the object.
+<a href="lang_createtable.html#uniqueconst">UNIQUE</a> and <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraints on tables cause SQLite to create
+<a href="fileformat2.html#intschema">internal indexes</a> with names of the form "sqlite_autoindex_TABLE_N"
+where TABLE is replaced by the name of the table that contains the
+constraint and N is an integer beginning with 1 and increasing by one
+with each constraint seen in the table definition.
+In a <a href="withoutrowid.html">WITHOUT ROWID</a> table, there is no sqlite_schema entry for the
+PRIMARY KEY, but the "sqlite_autoindex_TABLE_N" name is set aside
+for the PRIMARY KEY as if the sqlite_schema entry did exist. This
+will affect the numbering of subsequent UNIQUE constraints.
+The "sqlite_autoindex_TABLE_N" name is never allocated for an
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, either in rowid tables or WITHOUT ROWID tables.
+</p>
+
+<p>The sqlite_schema.tbl_name column holds the name of a table or view
+that the object is associated with. For a table or view, the
+tbl_name column is a copy of the name column. For an index, the tbl_name
+is the name of the table that is indexed. For a trigger, the tbl_name
+column stores the name of the table or view that causes the trigger
+to fire.</p>
+
+<p>The sqlite_schema.rootpage column stores the page number of the root
+b-tree page for tables and indexes. For rows that define views, triggers,
+and virtual tables, the rootpage column is 0 or NULL.</p>
+
+<p>The sqlite_schema.sql column stores SQL text that describes the
+object. This SQL text is a <a href="lang_createtable.html">CREATE TABLE</a>, <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a>,
+<a href="lang_createindex.html">CREATE INDEX</a>,
+<a href="lang_createview.html">CREATE VIEW</a>, or <a href="lang_createtrigger.html">CREATE TRIGGER</a> statement that if evaluated against
+the database file when it is the main database of a <a href="c3ref/sqlite3.html">database connection</a>
+would recreate the object. The text is usually a copy of the original
+statement used to create the object but with normalizations applied so
+that the text conforms to the following rules:
+
+</p><ul>
+<li>The CREATE, TABLE, VIEW, TRIGGER, and INDEX keywords at the beginning
+of the statement are converted to all upper case letters.
+</li><li>The TEMP or TEMPORARY keyword is removed if it occurs after the
+initial CREATE keyword.
+</li><li>Any database name qualifier that occurs prior to the name of the
+object being created is removed.
+</li><li>Leading spaces are removed.
+</li><li>All spaces following the first two keywords are converted into a single
+space.
+</li></ul>
+
+<p>The text in the sqlite_schema.sql column is a copy of the original
+CREATE statement text that created the object, except normalized as
+described above and as modified by subsequent <a href="lang_altertable.html">ALTER TABLE</a> statements.
+The sqlite_schema.sql is NULL for the <a href="fileformat2.html#intschema">internal indexes</a> that are
+automatically created by <a href="lang_createtable.html#uniqueconst">UNIQUE</a> or <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraints.</p>
+
+<h3 id="alternative_names_for_the_schema_table"><span>2.6.1. </span>Alternative Names For The Schema Table</h3>
+
+<p>The name "sqlite_schema" does not appear anywhere in the file format.
+That name is just a convention used by the database implementation.
+Due to historical and operational considerations, the
+"sqlite_schema" table can also sometimes be called by one of the
+following aliases:
+
+</p><ol>
+<li> sqlite_master
+</li><li> sqlite_temp_schema
+</li><li> sqlite_temp_master
+</li></ol>
+
+<p>Because the name of the schema table does not appear anywhere in
+the file format, the meaning of the database file is not changed if
+the application chooses to refer to the schema table by one of
+these alternative names.
+
+<a name="intschema"></a>
+
+</p><h3 id="internal_schema_objects"><span>2.6.2. </span>Internal Schema Objects</h3>
+
+<p>In addition to the tables, indexes, views, and triggers created by
+the application and/or the developer using CREATE statements SQL, the
+sqlite_schema table may contain zero or more entries for
+<i>internal schema objects</i> that are created by SQLite for its
+own internal use. The names of internal schema objects
+always begin with "sqlite_" and any table, index, view, or trigger
+whose name begins with "sqlite_" is an internal schema object.
+SQLite prohibits applications from creating objects whose names begin
+with "sqlite_".
+
+</p><p>Internal schema objects used by SQLite may include the following:
+
+</p><ul>
+<li><p>Indices with names of the form "sqlite_autoindex_TABLE_N" that
+ are used to implement <a href="lang_createtable.html#uniqueconst">UNIQUE</a> and <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraints on
+ ordinary tables.
+
+</p></li><li><p>A table with the name "sqlite_sequence" that is used to keep track
+ of the maximum historical <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> for a table
+ using <a href="autoinc.html">AUTOINCREMENT</a>.
+
+</p></li><li><p>Tables with names of the form "sqlite_statN" where N is an integer.
+ Such tables store database statistics gathered by the <a href="lang_analyze.html">ANALYZE</a>
+ command and used by the query planner to help determine the best
+ algorithm to use for each query.
+</p></li></ul>
+
+<p>New internal schema objects names, always beginning with "sqlite_",
+may be added to the SQLite file format in future releases.
+
+<a name="seqtab"></a>
+
+</p><h3 id="the_sqlite_sequence_table"><span>2.6.3. </span>The sqlite_sequence table</h3>
+
+<p>The sqlite_sequence table is an internal table used to help implement
+<a href="autoinc.html">AUTOINCREMENT</a>. The sqlite_sequence table is created automatically
+whenever any ordinary table with an AUTOINCREMENT integer primary
+key is created. Once created, the sqlite_sequence table exists in the
+sqlite_schema table forever; it cannot be dropped.
+The schema for the sqlite_sequence table is:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_sequence(name,seq);
+</pre></blockquote>
+
+<p>There is a single row in the sqlite_sequence table for each ordinary
+table that uses AUTOINCREMENT. The name of the table (as it appears in
+sqlite_schema.name) is in the sqlite_sequence.name field and the largest
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> ever inserted into that table is
+in the sqlite_sequence.seq field.
+New automatically generated integer primary keys for AUTOINCREMENT
+tables are guaranteed to be larger than the sqlite_sequence.seq field for
+that table.
+If the sqlite_sequence.seq field of an AUTOINCREMENT table is already at
+the largest integer value (9223372036854775807) then attempts to add new
+rows to that table with an automatically generated integer primary will fail
+with an <a href="rescode.html#full">SQLITE_FULL</a> error.
+The sqlite_sequence.seq field is automatically updated if required when
+new entries are inserted to an AUTOINCREMENT table.
+The sqlite_sequence row for an AUTOINCREMENT table is automatically deleted
+when the table is dropped.
+If the sqlite_sequence row for an AUTOINCREMENT table does not exist when
+the AUTOINCREMENT table is updated, then a new sqlite_sequence row is created.
+If the sqlite_sequence.seq value for an AUTOINCREMENT table is manually
+set to something other than an integer and there is a subsequent attempt to
+insert the or update the AUTOINCREMENT table, then the behavior is undefined.
+
+</p><p>Application code is allowed to modify the sqlite_sequence table, to add
+new rows, to delete rows, or to modify existing rows. However, application
+code cannot create the sqlite_sequence table if it does not already exist.
+Application code can delete all entries from the sqlite_sequence table,
+but application code cannot drop the sqlite_sequence table.
+
+<a name="stat1tab"></a>
+
+</p><h3 id="the_sqlite_stat1_table"><span>2.6.4. </span>The sqlite_stat1 table</h3>
+
+<p>The sqlite_stat1 is an internal table created by the <a href="lang_analyze.html">ANALYZE</a> command
+and used to hold supplemental information about tables and indexes that the
+query planner can use to help it find better ways of performing queries.
+Applications can update, delete from, insert into or drop the sqlite_stat1
+table, but may not create or alter the sqlite_stat1 table.
+The schema of the sqlite_stat1 table is as follows:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_stat1(tbl,idx,stat);
+</pre></blockquote>
+
+<p> There is normally one row per index, with the index identified by the
+name in the sqlite_stat1.idx column. The sqlite_stat1.tbl column is
+the name of the table to which the index belongs. In each such row,
+the sqlite_stat.stat column will be
+a string consisting of a list of integers followed by zero or more
+arguments. The first integer in this
+list is the approximate number of rows in the index. (The number of
+rows in the index is the same as the number of rows in the table,
+except for <a href="partialindex.html">partial indexes</a>.)
+The second integer is the approximate number of rows in the index
+that have the same value in the first column of the index. The third
+integer is the number of rows in the index that have
+the same value for the first two columns. The N-th integer (for N>1)
+is the estimated average number of rows in
+the index which have the same value for the first N-1 columns. For
+a K-column index, there will be K+1 integers in the stat column. If
+the index is unique, then the last integer will be 1.
+
+</p><p>The list of integers in the stat column can optionally be followed
+by arguments, each of which is a sequence of non-space characters.
+All arguments are preceded by a single space.
+Unrecognized arguments are silently ignored.
+
+</p><p>If the "unordered" argument is present, then the query planner assumes
+that the index is unordered and will not use the index for a range query
+or for sorting.
+
+</p><p>The "sz=NNN" argument (where NNN represents a sequence of 1 or more digits)
+means that the average row size over all records of the table or
+index is NNN bytes per row. The SQLite query planner might use the
+estimated row size information provided by the "sz=NNN" token
+to help it choose smaller tables and indexes that require less disk I/O.
+
+</p><p>The presence of the "noskipscan" token on the sqlite_stat1.stat field
+of an index prevents that index from being used with the
+<a href="optoverview.html#skipscan">skip-scan optimization</a>.
+
+</p><p>New text tokens may be added to the end of the stat column in future
+enhancements to SQLite. For compatibility, unrecognized tokens at the end
+of the stat column are silently ignored.
+
+</p><p>If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat
+column contains a single integer which is the approximate number of
+rows in the table identified by sqlite_stat1.tbl.
+If the sqlite_stat1.idx column is the same as the sqlite_stat1.tbl
+column, then the table is a <a href="withoutrowid.html">WITHOUT ROWID</a> table and the sqlite_stat1.stat
+field contains information about the index btree that implements the
+WITHOUT ROWID table.
+
+<a name="stat2tab"></a>
+
+</p><h3 id="the_sqlite_stat2_table"><span>2.6.5. </span>The sqlite_stat2 table</h3>
+
+<p>The sqlite_stat2 is only created and is only used if SQLite is compiled
+with SQLITE_ENABLE_STAT2 and if the SQLite version number is between
+3.6.18 (2009-09-11) and 3.7.8 (2011-09-19).
+The sqlite_stat2 table is neither read nor written by any
+version of SQLite before 3.6.18 nor after 3.7.8.
+The sqlite_stat2 table contains additional information
+about the distribution of keys within an index.
+The schema of the sqlite_stat2 table is as follows:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_stat2(tbl,idx,sampleno,sample);
+</pre></blockquote>
+
+<p>The sqlite_stat2.idx column and the sqlite_stat2.tbl column in each
+row of the sqlite_stat2 table identify an index described by that row.
+There are usually 10 rows in the sqlite_stat2
+table for each index.
+
+</p><p>The sqlite_stat2 entries for an index that have sqlite_stat2.sampleno
+between 0 and 9 inclusive are samples of the left-most key value in the
+index taken at evenly spaced points along the index.
+Let C be the number of rows in the index.
+Then the sampled rows are given by
+
+</p><blockquote>
+ rownumber = (i*C*2 + C)/20
+</blockquote>
+
+<p>The variable i in the previous expression varies between 0 and 9.
+Conceptually, the index space is divided into
+10 uniform buckets and the samples are the middle row from each bucket.
+
+</p><p>The format for sqlite_stat2 is recorded here for legacy reference.
+Recent versions of SQLite no longer support sqlite_stat2 and the
+sqlite_stat2 table, if is exists, is simply ignored.
+
+<a name="stat3tab"></a>
+
+</p><h3 id="the_sqlite_stat3_table"><span>2.6.6. </span>The sqlite_stat3 table</h3>
+
+<p>The sqlite_stat3 is only used if SQLite is compiled
+with <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> or <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>
+and if the SQLite version number is 3.7.9 (2011-11-01) or greater.
+The sqlite_stat3 table is neither read nor written by any
+version of SQLite before 3.7.9.
+If the <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time option is used and the
+SQLite version number is 3.8.1 (2013-10-17) or greater,
+then sqlite_stat3 might be read but not written.
+The sqlite_stat3 table contains additional information
+about the distribution of keys within an index, information that the
+query planner can use to devise better and faster query algorithms.
+The schema of the sqlite_stat3 table is as follows:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_stat3(tbl,idx,nEq,nLt,nDLt,sample);
+</pre></blockquote>
+
+<p>There are usually multiple entries in the sqlite_stat3 table for each index.
+The sqlite_stat3.sample column holds the value of the left-most field of an
+index identified by sqlite_stat3.idx and sqlite_stat3.tbl.
+The sqlite_stat3.nEq column holds the approximate
+number of entries in the index whose left-most column exactly matches
+the sample.
+The sqlite_stat3.nLt holds the approximate number of entries in the
+index whose left-most column is less than the sample.
+The sqlite_stat3.nDLt column holds the approximate
+number of distinct left-most entries in the index that are less than
+the sample.
+
+</p><p>There can be an arbitrary number of sqlite_stat3 entries per index.
+The <a href="lang_analyze.html">ANALYZE</a> command will typically generate sqlite_stat3 tables
+that contain between 10 and 40 samples that are distributed across
+the key space and with large nEq values.
+
+</p><p>In a well-formed sqlite_stat3 table, the samples for any single
+index must appear in the same order that they occur in the index.
+In other words, if the entry with left-most column S1 is earlier in
+the index b-tree than the
+entry with left-most column S2, then in the sqlite_stat3 table,
+sample S1 must have a smaller rowid than sample S2.
+
+<a name="stat4tab"></a>
+
+</p><h3 id="the_sqlite_stat4_table"><span>2.6.7. </span>The sqlite_stat4 table</h3>
+
+<p>The sqlite_stat4 is only created and is only used if SQLite is compiled
+with <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> and if the SQLite version number is
+3.8.1 (2013-10-17) or greater.
+The sqlite_stat4 table is neither read nor written by any
+version of SQLite before 3.8.1.
+The sqlite_stat4 table contains additional information
+about the distribution of keys within an index or the distribution of
+keys in the primary key of a <a href="withoutrowid.html">WITHOUT ROWID</a> table.
+The query planner can sometimes use the additional information in
+the sqlite_stat4 table to devise better and faster query algorithms.
+The schema of the sqlite_stat4 table is as follows:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_stat4(tbl,idx,nEq,nLt,nDLt,sample);
+</pre></blockquote>
+
+<p>There are typically between 10 to 40 entries in the sqlite_stat4 table for
+each index for which statistics are available, however these limits are
+not hard bounds.
+The meanings of the columns in the sqlite_stat4 table are as follows:
+
+</p><center>
+<table border="0" width="100%" cellpadding="10">
+<tr><td valign="top" align="right">tbl:</td>
+ <td>The sqlite_stat4.tbl column holds name of the table that owns
+ the index that the row describes
+
+</td></tr><tr><td valign="top" align="right">idx:</td>
+ <td>The sqlite_stat4.idx column holds name of the index that the
+ row describes, or in the case of
+ an sqlite_stat4 entry for a <a href="withoutrowid.html">WITHOUT ROWID</a> table, the
+ name of the table itself.
+
+</td></tr><tr><td valign="top" align="right">sample:</td>
+ <td>The sqlite_stat4.sample column holds a BLOB
+ in the <a href="fileformat2.html#record_format">record format</a> that encodes the indexed columns followed by
+ the rowid for a rowid table or by the columns of the primary key
+ for a WITHOUT ROWID table.
+ The sqlite_stat4.sample BLOB for the WITHOUT ROWID table itself
+ contains just the columns of the primary key.
+ Let the number of columns encoded by the sqlite_stat4.sample blob be N.
+ For indexes on an ordinary rowid table, N will be one more than the number
+ of columns indexed.
+ For indexes on WITHOUT ROWID tables, N will be the number of columns
+ indexed plus the number of columns in the primary key.
+ For a WITHOUT ROWID table, N will be the number of columns in the
+ primary key.
+
+</td></tr><tr><td valign="top" align="right">nEq:</td>
+ <td>The sqlite_stat4.nEq column holds a list of N integers where
+ the K-th integer is the approximate number of entries in the index
+ whose left-most K columns exactly match the K left-most columns
+ of the sample.
+
+</td></tr><tr><td valign="top" align="right">nLt:</td>
+ <td>The sqlite_stat4.nLt column holds a list of N integers where
+ the K-th integer is the approximate number of entries in the
+ index whose K left-most columns are collectively less than the
+ K left-most columns of the sample.
+
+</td></tr><tr><td valign="top" align="right">nDLt:</td>
+ <td>The sqlite_stat4.nDLt column holds a list of N integers where
+ the K-th integer is the approximate
+ number of entries in the index that are distinct in the first K columns and
+ where the left-most K columns are collectively less than the left-most
+ K columns of the sample.
+</td></tr></table>
+</center>
+
+<p>The sqlite_stat4 is a generalization of the sqlite_stat3 table. The
+sqlite_stat3 table provides information about the left-most column of an
+index whereas the sqlite_stat4 table provides information about all columns
+of the index.
+
+</p><p>There can be an arbitrary number of sqlite_stat4 entries per index.
+The <a href="lang_analyze.html">ANALYZE</a> command will typically generate sqlite_stat4 tables
+that contain between 10 and 40 samples that are distributed across
+the key space and with large nEq values.
+
+</p><p>In a well-formed sqlite_stat4 table, the samples for any single
+index must appear in the same order that they occur in the index.
+In other words, if entry S1 is earlier in the index b-tree than
+entry S2, then in the sqlite_stat4 table, sample S1 must have a
+smaller rowid than sample S2.
+
+<a name="rollbackjournal"></a>
+
+</p><h1 id="the_rollback_journal"><span>3. </span>The Rollback Journal</h1>
+
+<p>The rollback journal is a file associated with each SQLite database
+file that holds information used to restore the database file to its initial
+state during the course of a transaction.
+The rollback journal file is always located in the same
+directory as the database
+file and has the same name as the database file but with the string
+"<tt>-journal</tt>" appended. There can only be a single rollback journal
+associated with a give database and hence there can only be one write
+transaction open against a single database at one time.</p>
+
+<p>If a transaction is aborted due to an application crash, an operating
+system crash, or a hardware power failure or crash, then the database may
+be left in an inconsistent state. The next time SQLite attempts to open
+the database file, the presence of the rollback journal file will be
+detected and the journal will be automatically played back to restore the
+database to its state at the start of the incomplete transaction.</p>
+
+<p>A rollback journal is only considered to be valid if it exists and
+contains a valid header. Hence a transaction can be committed in one
+of three ways:
+</p><ol>
+<li>The rollback journal file can be deleted,
+</li><li>The rollback journal file can be truncated to zero length, or
+</li><li>The header of the rollback journal can be overwritten with
+invalid header text (for example, all zeros).
+</li></ol>
+<p>
+These three ways of committing a transaction correspond to the DELETE,
+TRUNCATE, and PERSIST settings, respectively, of the <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>.
+</p>
+
+
+<p>A valid rollback journal begins with a header in the following format:</p>
+
+<center>
+<i>Rollback Journal Header Format</i><br>
+<table width="80%" border="1">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td valign="top" align="center">0
+ </td><td valign="top" align="center">8
+ </td><td>Header string: 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7
+</td></tr><tr><td valign="top" align="center">8
+ </td><td valign="top" align="center">4
+ </td><td>The "Page Count" - The number of pages in the next segment of the
+ journal, or -1 to
+ mean all content to the end of the file
+</td></tr><tr><td valign="top" align="center">12
+ </td><td valign="top" align="center">4
+ </td><td>A random nonce for the checksum
+</td></tr><tr><td valign="top" align="center">16
+ </td><td valign="top" align="center">4
+ </td><td>Initial size of the database in pages
+</td></tr><tr><td valign="top" align="center">20
+ </td><td valign="top" align="center">4
+ </td><td>Size of a disk sector assumed by the process that wrote this
+ journal.
+</td></tr><tr><td valign="top" align="center">24
+ </td><td valign="top" align="center">4
+ </td><td>Size of pages in this journal.
+</td></tr></table>
+</center>
+
+<p>A rollback journal header is padded with zeros out to the size of a
+single sector (as defined by the sector size integer at offset 20).
+The header is in a sector by itself so that if a power loss occurs while
+writing the sector, information that follows the header will be
+(hopefully) undamaged.</p>
+
+<p>After the header and zero padding are zero or more page records. Each
+page record stores a copy of the content of a page from the database file
+before it was changed. The same page may not appear more than once
+within a single rollback journal.
+To rollback an incomplete transaction, a process
+has merely to read the rollback journal from beginning to end and
+write pages found in the journal back into the database file at the
+appropriate location.</p>
+
+<p>Let the database page size (the value of the integer at offset 24
+in the journal header) be N.
+Then the format of a page record is as follows:</p>
+
+<center>
+<i>Rollback Journal Page Record Format</i><br>
+<table width="80%" border="1">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td valign="top" align="center">0
+ </td><td valign="top" align="center">4
+ </td><td>The page number in the database file
+</td></tr><tr><td valign="top" align="center">4
+ </td><td valign="top" align="center">N
+ </td><td>Original content of the page prior to the start of the transaction
+</td></tr><tr><td valign="top" align="center">N+4
+ </td><td valign="top" align="center">4
+ </td><td>Checksum
+</td></tr></table>
+</center>
+
+
+<p>The checksum is an unsigned 32-bit integer computed as follows:</p>
+
+<ol>
+<li>Initialize the checksum to the checksum nonce value found in the
+journal header at offset 12.
+</li><li>Initialize index X to be N-200 (where N is the size of a database page
+in bytes.
+</li><li>Interpret the byte at offset X into the page as an 8-bit unsigned integer
+ and add the value of that integer to the checksum.
+</li><li>Subtract 200 from X.
+</li><li>If X is greater than or equal to zero, go back to step 3.
+</li></ol>
+
+<p>The checksum value is used to guard against incomplete writes of
+a journal page record following a power failure. A different random nonce
+is used each time a transaction is started in order to minimize the risk
+that unwritten sectors might by chance contain data from the same page
+that was a part of prior journals. By changing the nonce for each
+transaction, stale data on disk will still generate an incorrect checksum
+and be detected with high probability. The checksum only uses a sparse sample
+of 32-bit words from the data record for performance reasons - design studies
+during the planning phases of SQLite 3.0.0 showed
+a significant performance hit in checksumming the entire page.</p>
+
+<p>Let the page count value at offset 8 in the journal header be M.
+If M is greater than zero then after M page records the journal file
+may be zero padded out to the next multiple of the sector size and another
+journal header may be inserted. All journal headers within the same
+journal must contain the same database page size and sector size.</p>
+
+<p>If M is -1 in the initial journal header, then the number of page records
+that follow is computed by computing how many page records will fit in
+the available space of the remainder of the journal file.</p>
+
+<a name="walformat"></a>
+
+<h1 id="the_write_ahead_log"><span>4. </span>The Write-Ahead Log</h1>
+
+<p>Beginning with <a href="releaselog/3_7_0.html">version 3.7.0</a> (2010-07-21),
+SQLite supports a new transaction
+control mechanism called "<a href="wal.html">write-ahead log</a>" or "<a href="wal.html">WAL</a>".
+When a database is in WAL mode, all connections to that database must
+use the WAL. A particular database will use either a rollback journal
+or a WAL, but not both at the same time.
+The WAL is always located in the same directory as the database
+file and has the same name as the database file but with the string
+"<tt>-wal</tt>" appended.</p>
+
+<h2 id="wal_file_format"><span>4.1. </span>WAL File Format</h2>
+
+<p>A <a href="wal.html#walfile">WAL file</a> consists of a header followed by zero or more "frames".
+Each frame records the revised content of a single page from the
+database file. All changes to the database are recorded by writing
+frames into the WAL. Transactions commit when a frame is written that
+contains a commit marker. A single WAL can and usually does record
+multiple transactions. Periodically, the content of the WAL is
+transferred back into the database file in an operation called a
+"checkpoint".</p>
+
+<p>A single WAL file can be reused multiple times. In other words, the
+WAL can fill up with frames and then be checkpointed and then new
+frames can overwrite the old ones. A WAL always grows from beginning
+toward the end. Checksums and counters attached to each frame are
+used to determine which frames within the WAL are valid and which
+are leftovers from prior checkpoints.</p>
+
+<p>The WAL header is 32 bytes in size and consists of the following eight
+big-endian 32-bit unsigned integer values:</p>
+
+<center>
+<i>WAL Header Format</i><br>
+<table width="80%" border="1">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td valign="top" align="center">0</td><td valign="top" align="center">4
+ </td><td>Magic number. 0x377f0682 or 0x377f0683
+</td></tr><tr><td valign="top" align="center">4</td><td valign="top" align="center">4
+ </td><td>File format version. Currently 3007000.
+</td></tr><tr><td valign="top" align="center">8</td><td valign="top" align="center">4
+ </td><td>Database page size. Example: 1024
+</td></tr><tr><td valign="top" align="center">12</td><td valign="top" align="center">4
+ </td><td>Checkpoint sequence number
+</td></tr><tr><td valign="top" align="center">16</td><td valign="top" align="center">4
+ </td><td>Salt-1: random integer incremented with each checkpoint
+</td></tr><tr><td valign="top" align="center">20</td><td valign="top" align="center">4
+ </td><td>Salt-2: a different random number for each checkpoint
+</td></tr><tr><td valign="top" align="center">24</td><td valign="top" align="center">4
+ </td><td>Checksum-1: First part of a checksum on the first 24 bytes of header
+</td></tr><tr><td valign="top" align="center">28</td><td valign="top" align="center">4
+ </td><td>Checksum-2: Second part of the checksum on the first 24 bytes of header
+</td></tr></table>
+</center>
+
+<p>Immediately following the wal-header are zero or more frames. Each
+frame consists of a 24-byte frame-header followed by a <i>page-size</i> bytes
+of page data. The frame-header is six big-endian 32-bit unsigned
+integer values, as follows:
+
+</p><center>
+<i>WAL Frame Header Format</i><br>
+<table width="80%" border="1">
+<tr><th>Offset</th><th>Size</th><th>Description
+</th></tr><tr><td valign="top" align="center">0</td><td valign="top" align="center">4
+ </td><td>Page number
+</td></tr><tr><td valign="top" align="center">4</td><td valign="top" align="center">4
+ </td><td>For commit records, the size of the database file in pages
+ after the commit. For all other records, zero.
+</td></tr><tr><td valign="top" align="center">8</td><td valign="top" align="center">4
+ </td><td>Salt-1 copied from the WAL header
+</td></tr><tr><td valign="top" align="center">12</td><td valign="top" align="center">4
+ </td><td>Salt-2 copied from the WAL header
+</td></tr><tr><td valign="top" align="center">16</td><td valign="top" align="center">4
+ </td><td>Checksum-1: Cumulative checksum up through and including this page
+</td></tr><tr><td valign="top" align="center">20</td><td valign="top" align="center">4
+ </td><td>Checksum-2: Second half of the cumulative checksum.
+</td></tr></table>
+</center>
+
+<p>A frame is considered valid if and only if the following conditions are
+true:</p>
+
+<ol>
+<li><p>The salt-1 and salt-2 values in the frame-header match
+ salt values in the wal-header</p></li>
+
+<li><p>The checksum values in the final 8 bytes of the frame-header
+ exactly match the checksum computed consecutively on the
+ first 24 bytes of the WAL header and the first 8 bytes and
+ the content of all frames
+ up to and including the current frame.</p></li>
+</ol>
+
+<a name="walcksm"></a>
+
+<h2 id="checksum_algorithm"><span>4.2. </span>Checksum Algorithm</h2>
+
+<p>The checksum is computed by interpreting the input as
+an even number of unsigned 32-bit integers: x(0) through x(N).
+The 32-bit integers are big-endian if the
+magic number in the first 4 bytes of the WAL header is 0x377f0683 and
+the integers are little-endian if the magic number is 0x377f0682.
+The checksum values are always stored in the frame header in a
+big-endian format regardless of which byte order is used to compute
+the checksum.</p>
+
+<p>The checksum algorithm only works for content which is a multiple of
+8 bytes in length. In other words, if the inputs are x(0) through x(N)
+then N must be odd.
+The checksum algorithm is as follows:
+
+</p><blockquote><pre>
+s0 = s1 = 0
+for i from 0 to n-1 step 2:
+ s0 += x(i) + s1;
+ s1 += x(i+1) + s0;
+endfor
+# result in s0 and s1
+</pre></blockquote>
+
+<p>The outputs s0 and s1 are both weighted checksums using Fibonacci weights
+in reverse order. (The largest Fibonacci weight occurs on the first element
+of the sequence being summed.) The s1 value spans all 32-bit integer
+terms of the sequence whereas s0 omits the final term.</p>
+
+<h2 id="checkpoint_algorithm"><span>4.3. </span>Checkpoint Algorithm</h2>
+
+<p>On a <a href="wal.html#ckpt">checkpoint</a>, the WAL is first flushed to persistent storage using
+the xSync method of the <a href="c3ref/io_methods.html">VFS</a>.
+Then valid content of the WAL is transferred into the database file.
+Finally, the database is flushed to persistent storage using another
+xSync method call.
+The xSync operations serve as write barriers - all writes launched
+before the xSync must complete before any write that launches after the
+xSync begins.</p>
+
+<p>A checkpoint need not run to completion. It might be that some
+readers are still using older transactions with data that is contained
+in the database file. In that case, transferring content for newer
+transactions from the WAL file into the database would delete the content
+out from under readers still using the older transactions. To avoid that,
+checkpoints only run to completion if all reader are using the
+last transaction in the WAL.
+
+<a name="walreset"></a>
+
+</p><h2 id="wal_reset"><span>4.4. </span>WAL Reset</h2>
+
+<p>After a complete checkpoint, if no other connections are in transactions
+that use the WAL, then subsequent write transactions can
+overwrite the WAL file from the beginning. This is called "resetting the
+WAL". At the start of the first new
+write transaction, the WAL header salt-1 value is incremented
+and the salt-2 value is randomized. These changes to the salts invalidate
+old frames in the WAL that have already been checkpointed but not yet
+overwritten, and prevent them from being checkpointed again.</p>
+
+<p>The WAL file can optionally be truncated on a reset, but it need not be.
+Performance is usually a little better if the WAL is not truncated, since
+filesystems generally will overwrite an existing file faster than they
+will grow a file.
+
+<a name="walread"></a>
+
+</p><h2 id="reader_algorithm"><span>4.5. </span>Reader Algorithm</h2>
+
+<p>To read a page from the database (call it page number P), a reader
+first checks the WAL to see if it contains page P. If so, then the
+last valid instance of page P that is followed by a commit frame
+or is a commit frame itself becomes the value read. If the WAL
+contains no copies of page P that are valid and which are a commit
+frame or are followed by a commit frame, then page P is read from
+the database file.</p>
+
+<p>To start a read transaction, the reader records the number of value
+frames in the WAL as "mxFrame". (<a href="walformat.html#mxframe">More detail</a>)
+The reader uses this recorded mxFrame value
+for all subsequent read operations. New transactions can be appended
+to the WAL, but as long as the reader uses its original mxFrame value
+and ignores subsequently appended content, the reader will see a
+consistent snapshot of the database from a single point in time.
+This technique allows multiple concurrent readers to view different
+versions of the database content simultaneously.</p>
+
+<p>The reader algorithm in the previous paragraphs works correctly, but
+because frames for page P can appear anywhere within the WAL, the
+reader has to scan the entire WAL looking for page P frames. If the
+WAL is large (multiple megabytes is typical) that scan can be slow,
+and read performance suffers. To overcome this problem, a separate
+data structure called the wal-index is maintained to expedite the
+search for frames of a particular page.</p>
+
+<a name="walindexformat"></a>
+
+<h2 id="wal_index_format"><span>4.6. </span>WAL-Index Format</h2>
+
+<p>Conceptually, the wal-index is shared memory, though the current
+VFS implementations use a memory-mapped file for operating-system
+portability. The memory-mapped
+file is in the same directory as the database and has the same name
+as the database with a "<tt>-shm</tt>" suffix appended. Because
+the wal-index is shared memory, SQLite does not support
+<a href="pragma.html#pragma_journal_mode">journal_mode=WAL</a>
+on a network filesystem when clients are on different machines, as
+all clients of the database must be able to share the same memory.</p>
+
+<p>The purpose of the wal-index is to answer this question quickly:</p>
+
+<blockquote><i>
+Given a page number P and a maximum WAL frame index M,
+return the largest WAL frame index for page P that does not exceed M,
+or return NULL if there are no frames for page P that do not exceed M.
+</i></blockquote>
+
+<p>The <i>M</i> value in the previous paragraph is the "mxFrame" value
+defined in <a href="fileformat2.html#walread">section 4.4</a> that is read at the start
+of a transaction and which defines the maximum frame from the WAL that
+the reader will use.</p>
+
+<p>The wal-index is transient. After a crash, the wal-index is
+reconstructed from the original WAL file. The VFS is required
+to either truncate or zero the header of the wal-index when the last
+connection to it closes. Because the wal-index is transient, it can
+use an architecture-specific format; it does not have to be cross-platform.
+Hence, unlike the database and WAL file formats which store all values
+as big endian, the wal-index stores multi-byte values in the native
+byte order of the host computer.</p>
+
+<p>This document is concerned with the persistent state of the database
+file, and since the wal-index is a transient structure, no further
+information about the format of the wal-index will be provided here.
+Additional details on the format of the wal-index are contained in
+the separate <a href="walformat.html#walidxfmt">WAL-index File Format</a> document.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/fileformat2.in?m=ba2f97fa24209ae70">2022-08-10 18:45:48</a> UTC </small></i></p>
+
diff --git a/www/flextypegood.html b/www/flextypegood.html
new file mode 100644
index 0000000..0f8d368
--- /dev/null
+++ b/www/flextypegood.html
@@ -0,0 +1,495 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Advantages Of Flexible Typing</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Advantages Of Flexible Typing
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#about_flexible_typing">2. About Flexible Typing</a></div>
+<div class="fancy-toc1"><a href="#cases_where_flexible_typing_is_useful">3. Cases Where Flexible Typing Is Useful</a></div>
+<div class="fancy-toc2"><a href="#attribute_tables">3.1. Attribute tables</a></div>
+<div class="fancy-toc2"><a href="#the_value_column_output_from_the_json_tree_virtual_tables">3.2. The "value" column output from the json_tree virtual tables</a></div>
+<div class="fancy-toc2"><a href="#storage_for_dirty_data">3.3. Storage for dirty data</a></div>
+<div class="fancy-toc2"><a href="#dynamic_programming_languages">3.4. Dynamic programming languages</a></div>
+<div class="fancy-toc2"><a href="#data_typename_cross_compatibility">3.5. Data typename cross-compatibility</a></div>
+<div class="fancy-toc2"><a href="#repurposing_unused_or_disused_columns_in_legacy_databases">3.6. Repurposing unused or disused columns in legacy databases</a></div>
+<div class="fancy-toc1"><a href="#perceived_disadvantages_of_flexible_typing_with_rebuttals_">4. Perceived Disadvantages of Flexible Typing (With Rebuttals)</a></div>
+<div class="fancy-toc2"><a href="#we_ve_never_done_it_that_way_before">4.1. We've never done it that way before</a></div>
+<div class="fancy-toc2"><a href="#rigid_type_enforcement_helps_prevent_application_bugs">4.2. Rigid type enforcement helps prevent application bugs</a></div>
+<div class="fancy-toc2"><a href="#rigid_type_enforcement_prevents_data_pollution">4.3. Rigid type enforcement prevents data pollution</a></div>
+<div class="fancy-toc2"><a href="#other_sql_database_engines_don_t_work_this_way">4.4. Other SQL database engines don't work this way</a></div>
+<div class="fancy-toc1"><a href="#if_you_insist_on_rigid_type_enforcement_">5. If You Insist On Rigid Type Enforcement...</a></div>
+<div class="fancy-toc1"><a href="#embrace_freedom">6. Embrace Freedom</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>SQLite provides developers with the freedom to store content in
+any desired format, regardless of the declared datatype of the column.
+Some people find this feature troublesome. Some developers are shocked
+to discover that it is possible to insert text into a column marked INTEGER.
+
+</p><p>This article advocates in favor of the flexible type rules
+in SQLite.
+
+</p><h1 id="about_flexible_typing"><span>2. </span>About Flexible Typing</h1>
+
+<p>Details regarding the flexible type system of SQLite are found
+in the separate <a href="datatype3.html">Datatypes In SQLite</a> document. Here is a quick
+summary:
+
+</p><ul>
+<li><p> Datatype names on column definitions are optional. A column definition
+ can consist of just the column name and nothing else.
+</p></li><li><p> When datatype names are provided, they can be just about any text.
+ SQLite attempts to deduce the preferred datatype for the column based
+ on the datatype name in the column definition, but that preferred
+ datatype is advisory, not mandatory. The preferred datatype is
+ call the "column affinity".
+</p></li><li><p> An attempt is made to transform incoming data into the preferred
+ datatype of the column. (All SQL database engines do this, not
+ just SQLite.) If this transformation is successful, all is well.
+ But if unsuccessful, instead of raising an error, SQLite just stores
+ the content using its original datatype.
+</p></li><li><p> The above can lead to situations that advocates of rigid typing
+ find incommodious:
+ </p><center><table border="1" cellpadding="5">
+ <tr><th>Column Datatype</th><th>Types Allowed In That Column
+ </th></tr><tr><td>INTEGER</td><td>INTEGER, REAL, TEXT, BLOB
+ </td></tr><tr><td>REAL</td><td>REAL, TEXT, BLOB
+ </td></tr><tr><td>TEXT</td><td>TEXT, BLOB
+ </td></tr><tr><td>BLOB</td><td>INTEGER, REAL, TEXT, BLOB
+ </td></tr></table></center>
+</li><li><p> Note that an INTEGER or REAL value will never end up being stored
+ in a TEXT column, since an INTEGER or REAL value can and always will
+ be converted into its equivalent TEXT representation. Similarly,
+ and INTEGER will never be stored in a REAL column because it will
+ always be converted into a REAL. But TEXT does not always look like
+ and INTEGER or REAL value and so cannot always be converted. And a
+ BLOB cannot be converted into anything and nothing else can be
+ converted into a BLOB.
+</p></li></ul>
+
+
+<h1 id="cases_where_flexible_typing_is_useful"><span>3. </span>Cases Where Flexible Typing Is Useful</h1>
+
+<p>Some readers, upon first encountering flexible typing in SQLite, ask
+themselves "how could this ever be useful?" Here is an
+attempt to answer that question:
+
+</p><h2 id="attribute_tables"><span>3.1. </span>Attribute tables</h2>
+
+<p> Many applications, especially those that use SQLite as an
+<a href="appfileformat.html">application file format</a>, need a place to store miscellaneous attributes
+such as thumbnail images (as BLOB values), short pieces of text (such
+as the user's name), as well as numeric, date, and JSON values. It is
+convenient to create a single table to handle this storage:
+
+</p><div class="codeblock"><pre>CREATE TABLE attribute(name TEXT PRIMARY KEY, value) WITHOUT ROWID;
+</pre></div>
+
+<p>Without flexible typing, such a table would need to be more complex,
+with separate columns for each possible type of data. Flexible typing
+of the "value" column makes the table conceptually simpler, more
+space-efficient, and easier to access and update.
+
+</p><p>In the <a href="https://fossil-scm.org/">Fossil version control system</a>, each
+repository has a CONFIG table that is used to store all kinds of settings
+with every possible datatype. The user-specific configuration file
+for Fossil (the ~/.fossil file) is a separate SQLite database that contains
+a single attribute table hold the user-specific state across all
+repositories.
+
+</p><p> Some applications use an SQLite database as a pure key-value store
+The database schema contains a single table that looks something like this:
+
+</p><div class="codeblock"><pre>CREATE TABLE storage(name TEXT PRIMARY KEY, value ANYTHING);
+</pre></div>
+
+<h2 id="the_value_column_output_from_the_json_tree_virtual_tables"><span>3.2. </span>The "value" column output from the json_tree virtual tables</h2>
+
+<p>The <a href="json1.html#jtree">json_tree</a> and <a href="json1.html#jeach">json_each</a> table-valued functions that are
+built into SQLite both have a "value" column that can hold values of
+type INTEGER, REAL, or TEXT depending on the type of the corresponding
+JSON field. For example:
+
+</p><div class="codeblock"><pre>SELECT typeof(value) FROM json_each('{"a":1,"b":2.5,"c":"hello"}');
+</pre></div>
+
+<p>The query above returns three rows of one column with values
+"integer", "real", and "text", respectively.
+
+</p><h2 id="storage_for_dirty_data"><span>3.3. </span>Storage for dirty data</h2>
+
+<p> Analysts sometimes encounter CSV files where some columns contain
+a mixture of integer, real, and text data. CSV file that are obtained
+from Excel spreadsheet exports commonly have this trait, for example.
+When importing such "dirty data" into an SQL database, it is convenient
+to have flexible columns to import into.
+
+</p><p> Dirty data is not restricted to CSV files coming out of Excel, of
+course. There are many data sources in which a single field might
+contain a mix of types. For example, a data column might the number
+of seconds since 1970 sometimes, or as a text date string in other cases.
+It is desirable to clean up these inconsistent representations,
+but at the same time it is convenient to be able to store all the different
+representations in the same column of the intermediate database while the
+cleanup is underway.
+
+</p><h2 id="dynamic_programming_languages"><span>3.4. </span>Dynamic programming languages</h2>
+
+<p>SQLite began as a TCL extension that later escaped into the wild.
+TCL is a dynamic language in the sense that the programmer does not need
+to be aware of datatypes. Under the hood, TCL keeps careful track of the
+datatype of every value, but to the developer and user of a TCL program,
+everything looks like a string. Flexible typing is a natural fit for
+use with dynamic programming languages like TCL and others, since with
+a dynamic programming language, you can not always predict in advance what
+datatype a variable will hold. So when you need to store the value of that
+variable into the database, having a database that is supports flexible
+typing makes storage much easier.
+
+</p><h2 id="data_typename_cross_compatibility"><span>3.5. </span>Data typename cross-compatibility</h2>
+
+<p>Every SQL database engine seems to have its own unique set of supported
+datatype names:
+
+</p><ul>
+<li> BIGINT
+</li><li> UNSIGNED SMALL INT
+</li><li> TEXT
+</li><li> VARCHAR
+</li><li> VARYING CHARACTER
+</li><li> NATIONAL VARYING CHARACTER
+</li><li> NVARCHAR
+</li><li> JSON
+</li><li> REAL
+</li><li> FLOAT
+</li><li> DOUBLE PRECISION
+</li><li> <i> ... and so forth ...</i>
+</li></ul>
+
+<p>The fact that SQLite will accept any of these names as a valid typename,
+and let you store any kind of content into the column, increases the chances
+that a script written to run on some other SQL database engine will also
+work in SQLite.
+
+</p><h2 id="repurposing_unused_or_disused_columns_in_legacy_databases"><span>3.6. </span>Repurposing unused or disused columns in legacy databases</h2>
+
+<p> Because an SQLite database file is a single file on disk, some
+applications use SQLite as an <a href="appfileformat.html">application file format</a>. This means
+that a single instance of the application might, over the course of its
+life, talk to hundreds or thousands of separate databases, each in a separate
+file. When such applications evolve over years, some columns in the
+underlying database will have their meanings altered subtly. Or, it might
+be desirable to repurpose an existing column to serve two or more purposes.
+This is much easier to do if the column has a flexible datatype.
+
+</p><h1 id="perceived_disadvantages_of_flexible_typing_with_rebuttals_"><span>4. </span>Perceived Disadvantages of Flexible Typing (With Rebuttals)</h1>
+
+<p> The following perceived disadvantages of flexible typing were
+ gleaned and compiled from countless posts on Hacker News and
+ Reddit and similar forums where developers discuss these sorts of
+ things. If you can think of other reasons why flexible typing
+ is a bad idea, please contact the SQLite developers or leave a
+ post on the <a href="https://sqlite.org/forum/forum">SQLite Forum</a> so
+ that your idea can be added to the list.
+
+
+</p><h2 id="we_ve_never_done_it_that_way_before"><span>4.1. </span>We've never done it that way before</h2>
+
+<p> Many skeptics of flexible typing simply express
+shock and disbelief, without offering any rationale for why they think
+flexible typing is a bad idea. Without supporting arguments, one must
+assume their reason for not liking flexible typing is that it is different
+from what they are used to.
+
+</p><p> Presumably, many developers who are aghast at SQLite's flexible
+typing feel this way because they have just never encountered anything
+like it before. All prior exposure to databases and especially SQL
+databases has involved rigid typing, and the readers mental model of
+SQL includes rigid typing as a fundamental feature. Flexible typing
+upsets their world-view.
+
+</p><p> Yes, flexible typing is a new way of thinking about data in an
+SQL database. But new is not necessary bad. Sometimes, and I think
+especially in the case of flexible typing, innovation leads to improvement.
+
+</p><h2 id="rigid_type_enforcement_helps_prevent_application_bugs"><span>4.2. </span>Rigid type enforcement helps prevent application bugs</h2>
+
+<p> It has become a point of doctrine among many programmers that the
+best way to prevent application bugs is strict type enforcement. But I
+find no evidence in support of this.
+
+</p><p> To be sure, strict type enforcement does help prevent some kinds of
+bugs in lower-level languages like C and C++ that present a model that is
+close to machine hardware. But this does not seem to
+be the case for higher-abstraction languages in which all data is
+passed around in a "Value" superclass of some kind which is subclassed
+for the various lower-level data types. When everything is a Value
+object, specific datatypes cease to be important.
+
+</p><p> This technical note is being writing by the original author of SQLite.
+I having been writing TCL programs for 27 years. TCL has no type enforcement
+whatsoever. The "Value" class in TCL (called Tcl_Obj) can hold many
+different datatypes, but it presents the content to the program and to
+the application user as a string. And I've had a lot of bugs in
+those TCL programs over the years. But I do not recall a single instance
+where the bugs might have been caught by a rigid type system. I have
+also written a lot of C code over a span of 35 years, not the
+least of which is SQLite itself. I have found the type system in C
+to be very helpful at finding and preventing problems. For the
+<a href="https://fossil-scm.org/">Fossil Version Control System</a>, which is written
+in C, I have even implemented supplemental static analysis programs that
+scan the Fossil source code prior to compilation, looking for problems
+that compilers miss. This works well for compiled programs.
+
+</p><p> The SQL language model is a higher-level abstraction that C/C++.
+In SQLite, every data item is stored in memory as an "sqlite3_value" object.
+There are subclasses of this object for strings, integer, floating-point
+numbers, blobs, and other representations. Everything is passed around
+inside the SQL language implemented by SQLite as "sqlite3_value" objects
+so the underlying datatype does not really matter. I have never found
+rigid type enforcement to be helpful in languages like TCL and SQLite
+that have a single "Value" superclass used to represent any data element.
+Fossil makes extensive use of SQLite in its implementation. There have
+been many bugs in Fossil over its 14-years history, but I cannot recall
+a single bug that might have been prevented by rigid type enforcement in
+the SQLite. C-language bugs might have been caught by better type enforcement
+(which is why I wrote the supplemental source code scanners), but no
+SQL bugs.
+
+</p><p> Based on decades of experience, I reject the thesis that rigid
+type enforcement helps prevent application bugs. I will accept and
+believe a slightly modified thesis: Rigid type enforcement helps to
+prevent applications bugs <em>in languages that lack a single
+top-level "Value" superclass</em>. But SQLite does have the
+single "sqlite3_value" superclass, so that proverb does not apply.
+
+</p><h2 id="rigid_type_enforcement_prevents_data_pollution"><span>4.3. </span>Rigid type enforcement prevents data pollution</h2>
+
+<p> Some people contend that if you have rigorous constraints on the
+schema, and especially strict enforcement of column datatypes, this
+will help prevent incorrect data from being added to the database.
+This is not true. It is true that type enforcement might help prevent
+<em>egregiously</em> incorrect data from getting into the system.
+But type enforcement is no help in prevent subtly incorrect data
+from being recorded.
+
+</p><p> So, for example, rigid type enforcement can successfully prevent
+the customer name (text) from being inserted into integer
+Customer.creditScore column. On the other hand, if that mistake occurs,
+it is very easy to spot the problem and find all affected rows.
+But type enforcement is no help in preventing a bug where the customer
+family name and given name are reversed, since both are text fields.
+
+</p><p> (Aside: Decades ago, I worked on a team where there was a woman
+named "Merritt Tracy". "Merritt" was her given name and "Tracy" was
+her family name. She reported that she spend an inordinate amount of
+time and energy trying to correct databases that had "Tracy" has her
+given name and "Merritt" as her family name.)
+
+</p><p> By suppressing easy-to-detect errors and passing through only the
+hard-to-detect errors, rigid type enforcement can actually make it more
+difficult to find and fix bugs. Data errors tend to cluster. If you have
+20 different data sources, most of the data errors will usually come
+from just 2 or 3 of those sources. The presence of egregious
+errors (such as text in an integer column) is a convenient early warning
+signal that something is amiss. The source of the problem can be
+tracked quickly and extra scrutiny applied to the source of the
+egregious errors, thus hopefully also fixing the subtle errors too.
+When egregious errors are suppressed, you lose an important signal
+that helps you to detect and fix the subtle errors.
+
+</p><p> Data errors are inevitable. They will happen regardless of how
+much type checking is done. Rigid type enforcement can catch only
+a small subset of those cases - the most obvious cases. It does
+nothing to help find and fix the more subtle cases. And, by suppressing
+the signal of which data sources are problematic, it can sometimes
+make the subtle errors more difficult to locate.
+
+</p><h2 id="other_sql_database_engines_don_t_work_this_way"><span>4.4. </span>Other SQL database engines don't work this way</h2>
+
+<p> Because SQLite is less restrictive and allows you to do more things,
+SQL scripts that work on other database engines will also usually work
+on SQLite, but script written initially for SQLite might not work
+on more restrictive database engines. This can cause problems when
+developers user SQLite for prototyping and testing and then migrate their
+application to a more restrictive SQL engine for deployment. If the
+application was (unintentionally) taking advantage of the flexible
+typing available in SQLite, then it will fail when migrated.
+
+</p><p> People use this problem to argue that SQLite should be more
+restrictive about datatypes. But you could just as easily turn
+that argument around and say that other database engines should be
+more flexible with regard to datatypes. The application was working
+correctly under SQLite, prior to be migrated, after all. If rigid
+type enforcement is really all that useful, why did it break an
+application that was previously working?
+
+</p><h1 id="if_you_insist_on_rigid_type_enforcement_"><span>5. </span>If You Insist On Rigid Type Enforcement...</h1>
+
+<p>As of SQLite version 3.37.0 (2021-11-27), SQLite supports this
+development style using <a href="stricttables.html">STRICT tables</a>.
+
+</p><p>If you find a real-world case where STRICT tables prevented or
+would have prevented a bug in an application, please post a message to the
+<a href="https://sqlite.org/forum/forum">SQLite Forum</a> so that we can add your story
+to this document.
+
+</p><h1 id="embrace_freedom"><span>6. </span>Embrace Freedom</h1>
+
+<p>If flexible typing in an SQL database is a new concept to you,
+I encourage you to give it a try. It probably will not cause you
+any problems and it might make your program simpler and easier to
+write and maintain. I think that even if you are skeptical at first,
+if you will just give flexible typing a try, you will eventually
+come to realize that it is a better approach and will start
+encouraging other database vendors to support at least an ANY
+datatype if not complete SQLite-style type flexibility.
+
+</p><p>Most of the time, flexible typing does not matter because a column
+stores a single well-defined type. But occasionally you will run
+across situations where having a flexible type system makes the
+solution to your problem cleaner and easier.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/flextypegood.in?m=f9717ffe7d350c56f">2021-08-24 21:13:00</a> UTC </small></i></p>
+
diff --git a/www/floatingpoint.html b/www/floatingpoint.html
new file mode 100644
index 0000000..37acad8
--- /dev/null
+++ b/www/floatingpoint.html
@@ -0,0 +1,485 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Floating Point Numbers</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Floating Point Numbers
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#how_sqlite_stores_numbers">1. How SQLite Stores Numbers</a></div>
+<div class="fancy-toc2"><a href="#floating_point_accuracy">1.1. Floating-Point Accuracy</a></div>
+<div class="fancy-toc2"><a href="#floating_point_numbers">1.2. Floating Point Numbers</a></div>
+<div class="fancy-toc3"><a href="#unrepresentable_numbers">1.2.1. Unrepresentable numbers</a></div>
+<div class="fancy-toc3"><a href="#is_it_close_enough_">1.2.2. Is it close enough?</a></div>
+<div class="fancy-toc1"><a href="#extensions_for_dealing_with_floating_point_numbers">2. Extensions For Dealing With Floating Point Numbers</a></div>
+<div class="fancy-toc2"><a href="#the_ieee754_c_extension">2.1. The ieee754.c Extension</a></div>
+<div class="fancy-toc3"><a href="#the_ieee754_function">2.1.1. The ieee754() function</a></div>
+<div class="fancy-toc3"><a href="#the_ieee754_mantissa_and_ieee754_exponent_functions">2.1.2. The ieee754_mantissa() and ieee754_exponent() functions</a></div>
+<div class="fancy-toc3"><a href="#the_ieee754_from_blob_and_ieee754_to_blob_functions">2.1.3. The ieee754_from_blob() and ieee754_to_blob() functions</a></div>
+<div class="fancy-toc2"><a href="#the_decimal_c_extension">2.2. The decimal.c Extension</a></div>
+<div class="fancy-toc1"><a href="#techniques">3. Techniques</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="how_sqlite_stores_numbers"><span>1. </span>How SQLite Stores Numbers</h1>
+
+<p>
+SQLite stores integer values in the 64-bit
+<a href="https://en.wikipedia.org/wiki/Two%27s_complement">twos-complement</a>
+format&sup1.
+This gives a storage range of -9223372036854775808 to +9223372036854775807,
+inclusive. Integers within this range are exact.
+
+</p><p>
+So-called "REAL" or floating point values are stored in the
+<a href="https://en.wikipedia.org/wiki/IEEE_754">IEEE 754</a>
+<a href="https://en.wikipedia.org/wiki/Double-precision_floating-point_format">Binary-64</a>
+format&sup1.
+This gives a range of positive values between approximately
+1.7976931348623157e+308 and 4.9406564584124654e-324 with an equivalent
+range of negative values. A binary64 can also be 0.0 (and -0.0), positive
+and negative infinity and "NaN" or "Not-a-Number". Floating point
+values are approximate.
+
+</p><p>
+Pay close attention to the last sentence in the previous paragraph:
+</p><blockquote><b>
+Floating point values are approximate.
+</b></blockquote>
+
+<p>
+If you need an exact answer, you should not use binary64 floating-point
+values, in SQLite or in any other product. This is not an SQLite limitation.
+It is a mathematical limitation inherent in the design of floating-point numbers.
+
+</p><p>&mdash;<br>&sup1;
+Exception: The <a href="rtree.html">R-Tree extension</a> stores information as 32-bit floating
+point or integer values.
+
+</p><h2 id="floating_point_accuracy"><span>1.1. </span>Floating-Point Accuracy</h2>
+
+<p>
+SQLite promises to preserve the 15 most significant digits of a floating
+point value. However, it makes no guarantees about the accuracy of
+computations on floating point values, as no such guarantees are possible.
+Performing math on floating-point values introduces error.
+For example, consider what happens if you attempt to subtract two floating-point
+numbers of similar magnitude:
+
+</p><blockquote>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td align="right">1152693165.1106291898</td></tr>
+<tr><td align="right">-1152693165.1106280772</td></tr>
+<tr><td><hr>
+</td></tr><tr><td align="right">0.0000011126
+</td></tr></table>
+</blockquote>
+
+<p>The result shown above (0.0000011126) is the correct answer. But if you
+do this computation using binary64 floating-point, the answer you get is
+0.00000095367431640625 - an error of about 14%. If you do many similar
+computations as part of your program, the errors add up so that your final
+result might be completely meaningless.
+
+</p><p>The error arises because only about the first 15 significant digits of
+each number are stored accurately, and the first difference between the two numbers
+being subtracted is in the 16th digit.
+
+</p><h2 id="floating_point_numbers"><span>1.2. </span>Floating Point Numbers</h2>
+
+<p>
+The binary64 floating-point format uses 64 bits per number. Hence there
+are 1.845e+19 different possible floating point values. On the other hand
+there are infinitely many real numbers in the range of
+1.7977e+308 and 4.9407e-324. It follows then that binary64 cannot possibly
+represent all possible real numbers within that range. Approximations are
+required.
+
+</p><p>
+An IEEE 754 floating-point value is an integer multiplied by a power
+of two:
+
+</p><blockquote>
+<big>M &times 2<sup><small>E</small></sup></big>
+</blockquote>
+
+<p>The M value is the "mantissa" and E is the "exponent". Both
+M and E are integers.
+
+</p><p>For Binary64, M is a 53-bit integer and E is an 11-bit integer that is
+offset so that represents a range of values between -1074 and +972, inclusive.
+
+</p><p><i>(NB: The usual description of IEEE 754 is more complex, and it is important
+to understand the added complexity if you really want to appreciate the details,
+merits, and limitations of IEEE 754. However, the integer description shown
+here, while not exactly right, is easier to understand and is sufficient for
+the purposes of this article.)</i></p>
+
+<h3 id="unrepresentable_numbers"><span>1.2.1. </span>Unrepresentable numbers</h3>
+
+<p>Not every decimal number with fewer than 16 significant digits can be
+represented exactly as a binary64 number. In fact, most decimal numbers
+with digits to the right of the decimal point lack an exact binary64
+equivalent. For example, if you have a database column that is intended
+to hold an item price in dollars and cents, the only cents value that
+can be exactly represented are 0.00, 0.25, 0.50, and 0.75. Any other
+numbers to the right of the decimal point result in an approximation.
+If you provide a "price" value of 47.49, that number will be represented
+in binary64 as:
+
+</p><blockquote>
+6683623321994527 &times; 2<sup><small>-47</small></sup>
+</blockquote>
+
+<p>Which works out to be:
+
+</p><blockquote>
+47.49000000000000198951966012828052043914794921875
+</blockquote>
+
+<p>That number is very close to 47.49, but it is not exact. It is a little
+too big. If we reduce M by one to 6683623321994526 so that we have the
+next smaller possible binary64 value, we get:
+
+</p><blockquote>
+47.4899999999999948840923025272786617279052734375
+</blockquote>
+
+
+<p>
+This second number is too small.
+The first number is closer to the desired value of 47.49, so that is the
+one that gets used. But it is not exact. Most decimal values work this
+way in IEEE 754. Remember the key point we made above:
+
+</p><blockquote><b>
+Floating point values are approximate.
+</b></blockquote>
+
+<p>If you remember nothing else about floating-point values,
+please don't forget this one key idea.
+
+</p><h3 id="is_it_close_enough_"><span>1.2.2. </span>Is it close enough?</h3>
+
+<p>The precision provided by IEEE 754 Binary64 is sufficient for most computations.
+For example, if "47.49" represents a price and inflation is running
+at 2% per year, then the price is going up by about 0.0000000301 dollars per
+second. The error in the recorded value of 47.49 represents about 66 nanoseconds
+worth of inflation. So if the 47.49 price is exact
+when you enter it, then the effects of inflation will cause the true value to
+exactly equal the value actually stored
+(47.4900000000000019895196601282805204391479492187) in less than
+one ten-millionth of a second.
+Surely that level of precision is sufficient for most purposes?
+
+</p><h1 id="extensions_for_dealing_with_floating_point_numbers"><span>2. </span>Extensions For Dealing With Floating Point Numbers</h1>
+
+<a name="ieee754ext"></a>
+
+<h2 id="the_ieee754_c_extension"><span>2.1. </span>The ieee754.c Extension</h2>
+
+<p>The ieee754 extension converts a floating point number between its
+binary64 representation and the M&times;2<sup><small>E</small></sup> format.
+In other words in the expression:
+
+</p><blockquote>
+<big>F = M &times 2<sup><small>E</small></sup></big>
+</blockquote>
+
+<p>The ieee754 extension converts between F and (M,E) and back again.
+
+</p><p>The ieee754 extension is not part of the <a href="amalgamation.html">amalgamation</a>, but it is included
+by default in the <a href="cli.html">CLI</a>. If you want to include the ieee754 extension in your
+application, you will need to compile and load it separately.
+
+<a name="ieee754"></a>
+
+</p><h3 id="the_ieee754_function"><span>2.1.1. </span>The ieee754() function</h3>
+
+<p>The ieee754(F) SQL function takes a single floating-point argument
+as its input and returns a string that looks like this:
+
+</p><blockquote>
+'ieee754(M,E)'
+</blockquote>
+
+<p>Except that the M and E are replaced by the mantissa and exponent of the
+floating point number. For example:
+
+</p><div class="codeblock"><pre>sqlite> .mode box
+sqlite> SELECT ieee754(47.49) AS x;
+┌───────────────────────────────┐
+│ x │
+├───────────────────────────────┤
+│ ieee754(6683623321994527,-47) │
+└───────────────────────────────┘
+</pre></div>
+
+<p>
+Going in the other direction, the 2-argument version of ieee754() takes
+the M and E values and converts them into the corresponding F value:
+
+</p><div class="codeblock"><pre>sqlite> select ieee754(6683623321994527,-47) as x;
+┌───────┐
+│ x │
+├───────┤
+│ 47.49 │
+└───────┘
+</pre></div>
+
+<a name="ieee754m"></a>
+
+<h3 id="the_ieee754_mantissa_and_ieee754_exponent_functions"><span>2.1.2. </span>The ieee754_mantissa() and ieee754_exponent() functions</h3>
+
+<p>The text output of the one-argument form of ieee754() is great for human
+readability, but it is awkward to use as part of a larger expression. Hence
+the ieee754_mantissa() and ieee754_exponent() routines were added to return
+the M and E values corresponding to their single argument F
+value.
+For example:
+
+</p><div class="codeblock"><pre>sqlite> .mode box
+sqlite> SELECT ieee754_mantissa(47.49) AS M, ieee754_exponent(47.49) AS E;
+┌──────────────────┬─────┐
+│ M │ E │
+├──────────────────┼─────┤
+│ 6683623321994527 │ -47 │
+└──────────────────┴─────┘
+</pre></div>
+
+<a name="ieee754b"></a>
+
+<h3 id="the_ieee754_from_blob_and_ieee754_to_blob_functions"><span>2.1.3. </span>The ieee754_from_blob() and ieee754_to_blob() functions</h3>
+
+<p>The ieee754_to_blob(F) SQL function converts the floating point number F
+into an 8-byte BLOB that is the big-endian binary64 encoding of that number.
+The ieee754_from_blob(B) function goes the other way, converting an 8-byte
+blob into the floating-point value that the binary64 encoding represents.
+
+</p><p>So, for example, if you read
+<a href="https://en.wikipedia.org/wiki/Double-precision_floating-point_format">on
+Wikipedia</a> that the encoding for the minimum positive binary64 value is
+0x0000000000000001, then you can find the corresponding floating point value
+like this:
+
+</p><div class="codeblock"><pre>sqlite> .mode box
+sqlite> SELECT ieee754_from_blob(x'0000000000000001') AS F;
+┌───────────────────────┐
+│ F │
+├───────────────────────┤
+│ 4.94065645841247e-324 │
+└───────────────────────┘
+</pre></div>
+
+<p>Or go the other way:
+
+</p><div class="codeblock"><pre>sqlite> .mode box
+sqlite> SELECT quote(ieee754_to_blob(4.94065645841247e-324)) AS binary64;
+┌─────────────────────┐
+│ binary64 │
+├─────────────────────┤
+│ X'0000000000000001' │
+└─────────────────────┘
+</pre></div>
+
+<a name="decext"></a>
+
+<h2 id="the_decimal_c_extension"><span>2.2. </span>The decimal.c Extension</h2>
+
+<p>The decimal extension provides arbitrary-precision decimal arithmetic on
+numbers stored as text strings. Because the numbers are stored to arbitrary
+precision and as text, no approximations are needed. Computations can be
+done exactly.
+
+</p><p>The decimal extension is not (currently) part of the SQLite <a href="amalgamation.html">amalgamation</a>.
+However, it is included in the <a href="cli.html">CLI</a>.
+
+</p><p>There are three math functions available:
+
+</p><p>
+</p><ul>
+<li> decimal_add(A,B)
+</li><li> decimal_sub(A,B)
+</li><li> decimal_mul(A,B)
+</li></ul>
+
+
+<p>These functions respectively add, subtract, and multiply their arguments
+and return a new text string that is the decimal representation of the result.
+There is no division operator at this time.
+
+</p><p>Use the decimal_cmp(A,B) to compare two decimal values. The result will
+be negative, zero, or positive if A is less than, equal to, or greater than B,
+respectively.
+
+</p><p>The decimal_sum(X) function is an aggregate, like the built-in
+<a href="lang_aggfunc.html#sumunc">sum() aggregate function</a>, except that decimal_sum() computes its result
+to arbitrary precision and is therefore precise.
+
+</p><p>Finally, the decimal extension provides the "decimal" collating sequences
+that compares decimal text strings in numeric order.
+
+</p><h1 id="techniques"><span>3. </span>Techniques</h1>
+
+<p>
+The following SQL illustrates how to use the ieee754 and decimal
+extensions to compute the exact decimal equivalent
+for a binary64 floating-point number.
+
+</p><div class="codeblock"><pre>-- The pow2 table will hold all the necessary powers of two.
+CREATE TABLE pow2(x INTEGER PRIMARY KEY, v TEXT);
+WITH RECURSIVE c(x,v) AS (
+ VALUES(0,'1')
+ UNION ALL
+ SELECT x+1, decimal_mul(v,'2') FROM c WHERE x+1&lt;=971
+) INSERT INTO pow2(x,v) SELECT x, v FROM c;
+WITH RECURSIVE c(x,v) AS (
+ VALUES(-1,'0.5')
+ UNION ALL
+ SELECT x-1, decimal_mul(v,'0.5') FROM c WHERE x-1&gt;=-1075
+) INSERT INTO pow2(x,v) SELECT x, v FROM c;
+
+-- This query finds the decimal representation of each value in the "c" table.
+WITH c(n) AS (VALUES(47.49))
+ ----XXXXX----------- Replace with whatever you want
+SELECT decimal_mul(ieee754_mantissa(c.n),pow2.v)
+ FROM pow2, c WHERE pow2.x=ieee754_exponent(c.n);
+</pre></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/floatingpoint.in?m=d4e94d1f66e186da0">2022-11-21 14:37:06</a> UTC </small></i></p>
+
diff --git a/www/footprint.html b/www/footprint.html
new file mode 100644
index 0000000..e06a88b
--- /dev/null
+++ b/www/footprint.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Library Footprint</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+
+<h1 align="center">Size Of The SQLite Library</h1>
+
+<p>
+The code space used by the SQLite library depends on the target
+platform, the compiler, and optimization settings. These variables
+also affect performance.
+</p>
+
+<p>
+The chart below shows the relative size and performance for SQLite
+as of 2017-10-08 for various compilers and optimization settings
+as tested on Ubuntu 16.04.3 on x86_64. General observations:
+
+<ol>
+<li><p>
+The Clang/LLVM compiler is not competitive with GCC. Clang-generated
+binaries are consistently larger and slower than GCC-generated binaries.
+
+<li><p>
+Profile guided optimization (PGO) is not helpful with SQLite. PGO results
+in binaries that are about 1% larger and about 0.33% slower.
+
+<li><p>
+GCC-7 generates binaries that are smaller and faster than GCC-5, though
+the difference is not that great.
+
+<li><p>
+Compiling with GCC and -Os results in a binary that is slightly less
+than 500KB in size. (Update 2018-07-07: Due to the addition of new
+features such as <a href="lang_upsert.html">UPSERT</a> and <a href="windowfunctions.html">window functions</a>, the library footprint
+is now slightly larger than 500KB.)
+
+<li><p>
+The only significant design decision that developers need to make is
+whether to use -Os (optimize for size) or -O6 (optimize for speed).
+The -O6 setting makes binaries that run about 2% or 3% faster, but which
+are also 66% larger. The performance here is measured by counting CPU
+cycles using cachegrind. I-cache misses are not considered in the
+analysis. If I-cache misses are considered, builds with -O6 might not
+be any faster than builds with -Os.
+
+<li><p>
+Taking into consideration all of the above, the SQLite developers recommend
+compiling SQLite using GCC-7 with the -Os optimization setting.
+</ol>
+
+<hr>
+<center>
+<img src='images/cc-diff.jpg'>
+</center>
+</hr>
+
+<h1>Details</h1>
+
+<ul>
+<li><p>
+Measurements above were conducted using SQLite version
+<a href="https://sqlite.org/src/timeline?c=5594a121bf132a98">5594a121bf132a98</a> from
+2017-10-08.
+
+<li><p>
+The only SQLite compile-time option used was <a href="compile.html#enable_memsys5">-DSQLITE_ENABLE_MEMSYS5</a>.
+The optional <a href="malloc.html#memsys5">memsys5</a> memory allocator is used for performance testing
+because it gives results that are more repeatable than the library-supplied
+malloc()/free() on Ubuntu.
+
+<li><p>
+Performance can be improved and the size reduced by
+enabling <a href="compile.html#threadsafe">-DSQLITE_THREADSAFE=0</a>,
+<a href="compile.html#default_memstatus">-DSQLITE_DEFAULT_MEMSTATUS=0</a>,
+<a href="compile.html#default_wal_synchronous">-DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1</a>,
+<a href="compile.html#like_doesnt_match_blobs">-DSQLITE_LIKE_DOESNT_MATCH_BLOBS</a>,
+<a href="limits.html#max_expr_depth">-DSQLITE_MAX_EXPR_DEPTH=0</a>,
+<a href="compile.html#omit_decltype">-DSQLITE_OMIT_DECLTYPE</a>,
+<a href="compile.html#omit_deprecated">-DSQLITE_OMIT_DEPRECATED</a>,
+<a href="compile.html#omit_progress_callback">-DSQLITE_OMIT_PROGRESS_CALLBACK</a>,
+<a href="compile.html#omit_shared_cache">-DSQLITE_OMIT_SHARED_CACHE</a>, and
+<a href="compile.html#use_alloca">-DSQLITE_USE_ALLOCA</a>.
+All these options together result in about a 3.5% performance increase and
+a 3.0% size reduction.
+
+<li><p>
+Adding optional features like <a href="compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a>,
+<a href="compile.html#enable_fts5">-DSQLITE_ENABLE_FTS5</a>, or <a href="compile.html#enable_rtree">-DSQLITE_ENABLE_RTREE</a> will increase the
+size of the library, obviously.
+
+<li><p>
+Performance was measured using the
+<a href="https://sqlite.org/src/file/test/speedtest1.c">speedtest1.c</a> utility program,
+which attempts to mimic a typical workload for SQLite. Options to
+the test runs are:
+<blockquote>
+<tt>--shrink-memory --reprepare --stats --heap 10000000 64 --size 5</tt>
+</blockquote>
+Performance was measured by running speedtest1 using cachegrind and
+observing the "I refs" output.
+</ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/footprint.in?m=47a6a3e3fe406f4a1">2018-07-07 17:44:20</a> UTC </small></i></p>
+
diff --git a/www/foreignkeys.html b/www/foreignkeys.html
new file mode 100644
index 0000000..31d7c78
--- /dev/null
+++ b/www/foreignkeys.html
@@ -0,0 +1,1046 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Foreign Key Support</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite Foreign Key Support
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#fk_basics">1. Introduction to Foreign Key Constraints</a></div>
+<div class="fancy-toc1"><a href="#fk_enable">2.
+Enabling Foreign Key Support
+</a></div>
+<div class="fancy-toc1"><a href="#fk_indexes">3. Required and Suggested Database Indexes</a></div>
+<div class="fancy-toc1"><a href="#fk_advanced">4. Advanced Foreign Key Constraint Features</a></div>
+<div class="fancy-toc2"><a href="#fk_composite">4.1. Composite Foreign Key Constraints</a></div>
+<div class="fancy-toc2"><a href="#fk_deferred">4.2. Deferred Foreign Key Constraints</a></div>
+<div class="fancy-toc2"><a href="#fk_actions">4.3.
+ON DELETE and ON UPDATE Actions
+</a></div>
+<div class="fancy-toc1"><a href="#fk_schemacommands">5. CREATE, ALTER and DROP TABLE commands</a></div>
+<div class="fancy-toc1"><a href="#fk_unsupported">6. Limits and Unsupported Features</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h2 style="margin-left:1.0em" notoc="1" id="overview"> Overview</h2>
+
+<p>This document describes the support for SQL foreign key constraints
+ introduced in SQLite <a href="releaselog/3_6_19.html">version 3.6.19</a> (2009-10-14).
+
+</p><p>The first section introduces the
+ concept of an SQL foreign key by example and defines the terminology
+ used for the remainder of the document. Section 2 describes the steps
+ an application must take in order to enable foreign key constraints in
+ SQLite (it is disabled by default). The next section, section 3,
+ describes the indexes that the user must create in order to use
+ foreign key constraints, and those that should be created in order for
+ foreign key constraints to function efficiently. Section 4 describes
+ the advanced foreign key related features supported by SQLite and
+ section 5 describes the way the <a href="lang_altertable.html">ALTER</a> and <a href="lang_droptable.html">DROP TABLE</a> commands are
+ enhanced to support foreign key constraints. Finally, section 6
+ enumerates the missing features and limits of the current implementation.
+
+</p><p>This document does not contain a full description of the syntax used
+ to create foreign key constraints in SQLite. This may be found as
+ part of the documentation for the <a href="lang_createtable.html">CREATE TABLE</a> statement.
+
+</p><h1 id="fk_basics"><span>1. </span>Introduction to Foreign Key Constraints</h1>
+
+ <p>
+ SQL foreign key constraints are used to enforce "exists" relationships
+ between tables. For example, consider a database schema created using
+ the following SQL commands:
+
+</p><div class="codeblock"><pre>CREATE TABLE artist(
+ artistid INTEGER PRIMARY KEY,
+ artistname TEXT
+);
+CREATE TABLE track(
+ trackid INTEGER,
+ trackname TEXT,
+ trackartist INTEGER <b>-- Must map to an artist.artistid!</b>
+);
+</pre></div>
+
+ <p>
+ The applications using this database are entitled to assume that for
+ each row in the <i>track</i> table there exists a corresponding row in the
+ <i>artist</i> table. After all, the comment in the declaration says so.
+ Unfortunately, if a user edits the database using an external tool or
+ if there is a bug in an application, rows might be inserted into the
+ <i>track</i> table that do not correspond to any row in the <i>artist</i>
+ table. Or rows might be deleted from the <i>artist</i> table, leaving
+ orphaned rows in the <i>track</i> table that do not correspond to any of
+ the remaining rows in <i>artist</i>. This might cause the application
+ or applications to malfunction later on, or at least make coding the
+ application more difficult.
+
+ </p><p>
+ One solution is to add an SQL foreign key constraint to the database
+ schema to enforce the relationship between the <i>artist</i> and
+ <i>track</i> table. To do so, a foreign key definition may be added
+ by modifying the declaration of the <i>track</i> table to the following:
+
+</p><div class="codeblock"><pre>CREATE TABLE track(
+ trackid INTEGER,
+ trackname TEXT,
+ trackartist INTEGER,
+ <b>FOREIGN KEY(trackartist) REFERENCES artist(artistid)</b>
+);
+</pre></div>
+
+ <p>
+ This way, the constraint is enforced by SQLite. Attempting to insert
+ a row into the <i>track</i> table that does not correspond to any
+ row in the <i>artist</i> table will fail, as will attempting to
+ delete a row from the <i>artist</i> table when there exist dependent
+ rows in the <i>track</i> table There is one exception: if the foreign
+ key column in the <i>track</i> table is NULL, then no corresponding
+ entry in the <i>artist</i> table is required. Expressed in SQL, this
+ means that for every row in the <i>track</i> table, the following
+ expression evaluates to true:
+</p><div class="codeblock"><pre>trackartist IS NULL OR EXISTS(SELECT 1 FROM artist WHERE artistid=trackartist)
+</pre></div>
+
+ <p>Tip: If the application requires a stricter relationship between
+ <i>artist</i> and <i>track</i>, where NULL values are not permitted
+ in the <i>trackartist</i> column, simply add the appropriate
+ "NOT NULL" constraint to the schema.
+
+ </p><p>There are several other ways to add an equivalent foreign key declaration
+ to a <a href="lang_createtable.html">CREATE TABLE</a> statement. Refer to the
+ <a href="lang_createtable.html">CREATE TABLE documentation</a> for details.
+
+ </p><p>The following SQLite command-line session illustrates the effect of the
+ foreign key constraint added to the <i>track</i> table:
+
+</p><div class="codeblock"><pre>sqlite&gt; SELECT * FROM artist;
+artistid artistname
+-------- -----------------
+1 Dean Martin
+2 Frank Sinatra
+
+sqlite> SELECT * FROM track;
+trackid trackname trackartist
+------- ----------------- -----------
+11 That's Amore 1
+12 Christmas Blues 1
+13 My Way 2
+
+sqlite&gt; <i>-- This fails because the value inserted into the trackartist column (3)</i>
+sqlite&gt; <i>-- does not correspond to row in the artist table.</i>
+sqlite&gt; INSERT INTO track VALUES(14, 'Mr. Bojangles', 3);
+<b>SQL error: foreign key constraint failed</b>
+
+sqlite&gt; <i>-- This succeeds because a NULL is inserted into trackartist. A</i>
+sqlite&gt; <i>-- corresponding row in the artist table is not required in this case.</i>
+sqlite&gt; INSERT INTO track VALUES(14, 'Mr. Bojangles', NULL);
+
+sqlite&gt; <i>-- Trying to modify the trackartist field of the record after it has </i>
+sqlite&gt; <i>-- been inserted does not work either, since the new value of trackartist (3)</i>
+sqlite&gt; <i>-- Still does not correspond to any row in the artist table.</i>
+sqlite&gt; UPDATE track SET trackartist = 3 WHERE trackname = 'Mr. Bojangles';
+<b>SQL error: foreign key constraint failed</b>
+
+sqlite&gt; <i>-- Insert the required row into the artist table. It is then possible to</i>
+sqlite&gt; <i>-- update the inserted row to set trackartist to 3 (since a corresponding</i>
+sqlite&gt; <i>-- row in the artist table now exists).</i>
+sqlite&gt; INSERT INTO artist VALUES(3, 'Sammy Davis Jr.');
+sqlite&gt; UPDATE track SET trackartist = 3 WHERE trackname = 'Mr. Bojangles';
+
+sqlite&gt; <i>-- Now that "Sammy Davis Jr." (artistid = 3) has been added to the database,</i>
+sqlite&gt; <i>-- it is possible to INSERT new tracks using this artist without violating</i>
+sqlite&gt; <i>-- the foreign key constraint:</i>
+sqlite&gt; INSERT INTO track VALUES(15, 'Boogie Woogie', 3);
+</pre></div>
+
+ <p>
+ As you would expect, it is not possible to manipulate the database to a state
+ that violates the foreign key constraint by deleting or updating rows in the
+ <i>artist</i> table either:
+</p><div class="codeblock"><pre>sqlite&gt; <i>-- Attempting to delete the artist record for "Frank Sinatra" fails, since</i>
+sqlite&gt; <i>-- the track table contains a row that refer to it.</i>
+sqlite&gt; DELETE FROM artist WHERE artistname = 'Frank Sinatra';
+<b>SQL error: foreign key constraint failed</b>
+
+sqlite&gt; <i>-- Delete all the records from the track table that refer to the artist</i>
+sqlite&gt; <i>-- "Frank Sinatra". Only then is it possible to delete the artist.</i>
+sqlite&gt; DELETE FROM track WHERE trackname = 'My Way';
+sqlite&gt; DELETE FROM artist WHERE artistname = 'Frank Sinatra';
+
+sqlite&gt; <i>-- Try to update the artistid of a row in the artist table while there</i>
+sqlite&gt; <i>-- exists records in the track table that refer to it. </i>
+sqlite&gt; UPDATE artist SET artistid=4 WHERE artistname = 'Dean Martin';
+<b>SQL error: foreign key constraint failed</b>
+
+sqlite&gt; <i>-- Once all the records that refer to a row in the artist table have</i>
+sqlite&gt; <i>-- been deleted, it is possible to modify the artistid of the row.</i>
+sqlite&gt; DELETE FROM track WHERE trackname IN('That''s Amore', 'Christmas Blues');
+sqlite&gt; UPDATE artist SET artistid=4 WHERE artistname = 'Dean Martin';
+</pre></div>
+
+ <p>
+ SQLite uses the following terminology:
+<a name="parentchild"></a>
+
+ </p><ul>
+ <li><p>The <b>parent table</b> is the table that a foreign key constraint
+ refers to. The parent table in the example in this section is the
+ <i>artist</i> table. Some books and articles refer to this as the
+ <i>referenced table</i>, which is arguably more correct, but tends
+ to lead to confusion.
+
+ </p></li><li><p>The <b>child table</b> is the table that a foreign key constraint
+ is applied to and the table that contains the REFERENCES clause.
+ The example in this section uses the <i>track</i> table
+ as the child table. Other books and articles refer to this as the
+ <i>referencing table</i>.
+
+ </p></li><li><p>The <b>parent key</b> is the column or set of columns in the parent
+ table that the foreign key constraint refers to. This is normally, but
+ not always, the primary key of the parent table. The parent key must
+ be a named column or columns in the parent table, not the <a href="lang_createtable.html#rowid">rowid</a>.
+
+ </p></li><li><p>The <b>child key</b> is the column or set of columns in the child
+ table that are constrained by the foreign key constraint and which
+ hold the REFERENCES clause.
+ </p></li></ul>
+
+ <p>
+ The foreign key constraint is satisfied if for each row in the child table
+ either one or more of the child key columns are NULL, or there exists a
+ row in the parent table for which each parent key column contains a value
+ equal to the value in its associated child key column.
+
+ </p><p>
+ In the above paragraph, the term "equal" means equal when values are
+ compared using the rules <a href="datatype3.html#comparisons">specified
+ here</a>. The following clarifications apply:
+
+ </p><ul>
+ <li><p>When comparing text values, the <a href="datatype3.html#collation">collating sequence</a>
+ associated with the parent key column is always used.
+ </p></li><li><p>When comparing values, if the parent key column has an <a href="datatype3.html#affinity">affinity</a>,
+ then that affinity is applied to the child key value before the
+ comparison is performed.
+ </p></li></ul>
+
+<a name="fk_enable"></a>
+<h1 id="fk_enable" tags="foreign key constraints are enabled"><span>2. </span>
+ Enabling Foreign Key Support
+</h1>
+ <p>
+ In order to use foreign key constraints in SQLite, the library must
+ be compiled with neither <a href="compile.html#omit_foreign_key">SQLITE_OMIT_FOREIGN_KEY</a> nor
+ <a href="compile.html#omit_trigger">SQLITE_OMIT_TRIGGER</a> defined. If SQLITE_OMIT_TRIGGER is defined
+ but SQLITE_OMIT_FOREIGN_KEY is not, then SQLite behaves as it did prior
+ to <a href="releaselog/3_6_19.html">version 3.6.19</a> (2009-10-14)
+ - foreign key definitions are parsed and may be
+ queried using <a href="pragma.html#pragma_foreign_key_list">PRAGMA foreign_key_list</a>, but foreign key constraints
+ are not enforced. The <a href="pragma.html#pragma_foreign_keys">PRAGMA foreign_keys</a> command is a no-op in this
+ configuration. If OMIT_FOREIGN_KEY is defined, then foreign key
+ definitions cannot even be parsed (attempting to specify a foreign
+ key definition is a syntax error).
+
+ </p><p>
+ Assuming the library is compiled with foreign key constraints enabled,
+ it must still be enabled by the application at runtime, using the
+ <a href="pragma.html#pragma_foreign_keys">PRAGMA foreign_keys</a> command. For example:
+
+</p><div class="codeblock"><pre>sqlite&gt; PRAGMA foreign_keys = ON;
+</pre></div>
+
+ <p>
+ Foreign key constraints are disabled by default
+ (for backwards compatibility),
+ so must be enabled separately for each <a href="c3ref/sqlite3.html">database connection</a>.
+ (Note, however, that future releases of SQLite might change
+ so that foreign key constraints enabled by default. Careful
+ developers will not
+ make any assumptions about whether or not foreign keys are enabled by
+ default but will instead enable or disable them as necessary.)
+ The application can also use a <a href="pragma.html#pragma_foreign_keys">PRAGMA foreign_keys</a> statement to
+ determine if foreign keys are currently enabled. The following
+ command-line session demonstrates this:
+</p><div class="codeblock"><pre>sqlite> PRAGMA foreign_keys;
+0
+sqlite> PRAGMA foreign_keys = ON;
+sqlite> PRAGMA foreign_keys;
+1
+sqlite> PRAGMA foreign_keys = OFF;
+sqlite> PRAGMA foreign_keys;
+0
+</pre></div>
+
+ <p>Tip: If the command "PRAGMA foreign_keys" returns no data instead of a
+ single row containing "0" or "1", then the version of SQLite you are
+ using does not support foreign keys (either because it is older than
+ 3.6.19 or because it was compiled with <a href="compile.html#omit_foreign_key">SQLITE_OMIT_FOREIGN_KEY</a> or
+ <a href="compile.html#omit_trigger">SQLITE_OMIT_TRIGGER</a> defined).
+
+ </p><p>
+ It is not possible to enable or disable foreign key constraints
+ in the middle of a <a href="lang_transaction.html">multi-statement transaction</a> (when SQLite
+ is not in <a href="c3ref/get_autocommit.html">autocommit mode</a>). Attempting to do so does not return
+ an error; it simply has no effect.
+
+</p><h1 id="fk_indexes"><span>3. </span>Required and Suggested Database Indexes</h1>
+
+ <p>
+ Usually, the parent key of a foreign key constraint is the primary key of
+ the parent table. If they are not the primary key, then the parent key
+ columns must be collectively subject to a UNIQUE constraint or have
+ a UNIQUE index.
+ If the parent key columns have a UNIQUE index,
+ then that index must use the collation sequences that are specified
+ in the CREATE TABLE statement for the parent table.
+ For example,
+
+</p><div class="codeblock"><pre>CREATE TABLE parent(a PRIMARY KEY, b UNIQUE, c, d, e, f);
+CREATE UNIQUE INDEX i1 ON parent(c, d);
+CREATE INDEX i2 ON parent(e);
+CREATE UNIQUE INDEX i3 ON parent(f COLLATE nocase);
+
+CREATE TABLE child1(f, g REFERENCES parent(a)); <i>-- Ok</i>
+CREATE TABLE child2(h, i REFERENCES parent(b)); <i>-- Ok</i>
+CREATE TABLE child3(j, k, FOREIGN KEY(j, k) REFERENCES parent(c, d)); <i>-- Ok</i>
+CREATE TABLE child4(l, m REFERENCES parent(e)); <i>-- Error!</i>
+CREATE TABLE child5(n, o REFERENCES parent(f)); <i>-- Error!</i>
+CREATE TABLE child6(p, q, FOREIGN KEY(p, q) REFERENCES parent(b, c)); <i>-- Error!</i>
+CREATE TABLE child7(r REFERENCES parent(c)); <i>-- Error!</i>
+</pre></div>
+
+ <p>
+ The foreign key constraints created as part of tables <i>child1</i>,
+ <i>child2</i> and <i>child3</i> are all fine. The foreign key
+ declared as part of table <i>child4</i> is an error because even though
+ the parent key column is indexed, the index is not UNIQUE.
+ The foreign key for table <i>child5</i>
+ is an error because even though the parent key column has a unique
+ index, the index uses a different collating sequence.
+ Tables <i>child6</i> and <i>child7</i> are incorrect because while
+ both have UNIQUE indices on their parent keys, the keys are not an
+ exact match to the columns of a single UNIQUE index.
+
+ </p><p>
+ If the database schema contains foreign key errors that require looking
+ at more than one table definition to identify, then those errors are not
+ detected when the tables are created. Instead, such errors prevent
+ the application from preparing SQL statements that modify the content
+ of the child or parent tables in ways that use the foreign keys.
+ Errors reported when content is changed are "DML errors" and errors
+ reported when the schema is changed are "DDL errors".
+ So, in other words, misconfigured foreign key constraints that require
+ looking at both the child and parent are DML errors.
+ The English language error message for foreign key DML errors is usually
+ "foreign key mismatch" but can also be "no such table" if the parent
+ table does not exist.
+ Foreign key DML errors are reported if:
+
+ </p><ul>
+ <li> The parent table does not exist, or
+ </li><li> The parent key columns named in the foreign key constraint do
+ not exist, or
+ </li><li> The parent key columns named in the foreign key constraint are not
+ the primary key of the parent table and are not subject to a unique
+ constraint using collating sequence specified in the CREATE TABLE, or
+ </li><li> The child table references the primary key of the parent without
+ specifying the primary key columns and the number of primary key
+ columns in the parent do not match the number of child key columns.
+ </li></ul>
+
+ <p>
+ The last bullet above is illustrated by the following:
+
+</p><div class="codeblock"><pre>CREATE TABLE parent2(a, b, PRIMARY KEY(a,b));
+
+CREATE TABLE child8(x, y, FOREIGN KEY(x,y) REFERENCES parent2); <i>-- Ok</i>
+CREATE TABLE child9(x REFERENCES parent2); <i>-- Error!</i>
+CREATE TABLE child10(x,y,z, FOREIGN KEY(x,y,z) REFERENCES parent2); <i>-- Error!</i>
+</pre></div>
+
+ <p>
+ By contrast, if foreign key errors can be recognized simply by looking
+ at the definition of the child table and without having to consult the
+ parent table definition, then the
+ <a href="lang_createtable.html">CREATE TABLE</a> statement for the child table fails. Because the error
+ occurs during a schema change, this is a DDL error.
+ Foreign key DDL errors are reported regardless of
+ whether or not foreign key constraints are enabled when the
+ table is created.
+
+ </p><p>
+ Indices are not required for child key columns but they are almost
+ always beneficial. Returning to
+ the example in <a href="#fk_basics">section 1</a>, each time an application
+ deletes a row from the <i>artist</i> table (the parent table), it
+ performs the equivalent of the following SELECT statement to search
+ for referencing rows in the <i>track</i> table (the child table).
+
+</p><div class="codeblock"><pre>SELECT rowid FROM track WHERE trackartist = ?
+</pre></div>
+
+ <p>
+ where ? in the above is replaced with the value of the <i>artistid</i>
+ column of the record being deleted from the <i>artist</i> table (recall
+ that the <i>trackartist</i> column is the child key and the <i>artistid</i>
+ column is the parent key). Or, more generally:
+
+</p><div class="codeblock"><pre>SELECT rowid FROM &lt;child-table&gt; WHERE &lt;child-key&gt; = :parent_key_value
+</pre></div>
+
+ <p>
+ If this SELECT returns any rows at all, then SQLite concludes that
+ deleting the row from the parent table would violate the foreign key
+ constraint and returns an error.
+ Similar queries may be run if the content of the parent key
+ is modified or a new row is inserted into the parent table.
+ If these queries cannot use an index, they are forced to do a
+ linear scan of the entire child table. In a non-trivial database, this may
+ be prohibitively expensive.
+
+ </p><p>
+ So, in most real systems, an index should be created on the child key columns
+ of each foreign key constraint. The child key index does not have
+ to be (and usually will not be) a UNIQUE index.
+ Returning again to the example in section 1, the
+ complete database schema for efficient implementation of the foreign key
+ constraint might be:
+
+</p><div class="codeblock"><pre>CREATE TABLE artist(
+ artistid INTEGER PRIMARY KEY,
+ artistname TEXT
+);
+CREATE TABLE track(
+ trackid INTEGER,
+ trackname TEXT,
+ trackartist INTEGER REFERENCES artist
+);
+CREATE INDEX trackindex ON track(trackartist);
+</pre></div>
+
+ <p>
+ The block above uses a shorthand form to create the foreign key constraint.
+ Attaching a "REFERENCES <i>&lt;parent-table&gt;</i>" clause to a column
+ definition creates a foreign key constraint that maps the column to the
+ primary key of <i>&lt;parent-table&gt;</i>. Refer to the <a href="lang_createtable.html">CREATE TABLE</a>
+ documentation for further details.
+
+
+</p><h1 id="fk_advanced"><span>4. </span>Advanced Foreign Key Constraint Features</h1>
+
+<h2 id="fk_composite"><span>4.1. </span>Composite Foreign Key Constraints</h2>
+
+ <p>
+ A composite foreign key constraint is one where the child and parent keys
+ are both composite keys. For example, consider
+ the following database schema:
+
+</p><div class="codeblock"><pre>CREATE TABLE album(
+ albumartist TEXT,
+ albumname TEXT,
+ albumcover BINARY,
+ PRIMARY KEY(albumartist, albumname)
+);
+
+CREATE TABLE song(
+ songid INTEGER,
+ songartist TEXT,
+ songalbum TEXT,
+ songname TEXT,
+ <b>FOREIGN KEY(songartist, songalbum) REFERENCES album(albumartist, albumname)</b>
+);
+</pre></div>
+
+ <p>
+ In this system, each entry in the song table is required to map to an entry
+ in the album table with the same combination of artist and album.
+
+ </p><p>
+ Parent and child keys must have the same cardinality.
+ In SQLite, if any of the child key columns (in this case songartist
+ and songalbum) are NULL, then there is no requirement for a corresponding
+ row in the parent table.
+
+</p><h2 id="fk_deferred"><span>4.2. </span>Deferred Foreign Key Constraints</h2>
+
+ <p>
+ Each foreign key constraint in SQLite is classified as either immediate
+ or deferred. Foreign key constraints are immediate by default.
+ All the foreign key examples presented
+ so far have been of immediate foreign key constraints.
+
+ </p><p>
+ If a statement modifies the contents of the database so that an immediate
+ foreign key constraint is in violation at the conclusion the statement,
+ an exception is thrown and
+ the effects of the statement are reverted. By contrast, if
+ a statement modifies the contents of the database such that a deferred
+ foreign key constraint is violated, the violation is not reported
+ immediately. Deferred foreign key constraints are not checked
+ until the transaction tries to <a href="lang_transaction.html">COMMIT</a>.
+ For as long as the user has
+ an open transaction, the database is allowed to exist in a state that
+ violates any number of deferred foreign key constraints. However,
+ <a href="lang_transaction.html">COMMIT</a> will fail as long as foreign key constraints remain in
+ violation.
+
+ </p><p>
+ If the current statement is not inside an explicit transaction (a
+ <a href="lang_transaction.html">BEGIN</a>/<a href="lang_transaction.html">COMMIT</a>/<a href="lang_transaction.html">ROLLBACK</a> block), then an implicit
+ transaction is committed
+ as soon as the statement has finished executing. In this case deferred
+ constraints behave the same as immediate constraints.
+
+ </p><p>
+ To mark a foreign key constraint as deferred, its declaration must
+ include the following clause:
+
+</p><div class="codeblock"><pre>DEFERRABLE INITIALLY DEFERRED <i>-- A deferred foreign key constraint</i>
+</pre></div>
+
+ <p>
+ The full syntax for specifying foreign key constraints is available as part
+ of the <a href="lang_createtable.html">CREATE TABLE</a> documentation. Replacing the phrase above
+ with any of the following
+ creates an immediate foreign key constraint.
+
+</p><div class="codeblock"><pre>NOT DEFERRABLE INITIALLY DEFERRED <i>-- An immediate foreign key constraint</i>
+NOT DEFERRABLE INITIALLY IMMEDIATE <i>-- An immediate foreign key constraint</i>
+NOT DEFERRABLE <i>-- An immediate foreign key constraint</i>
+DEFERRABLE INITIALLY IMMEDIATE <i>-- An immediate foreign key constraint</i>
+DEFERRABLE <i>-- An immediate foreign key constraint</i>
+</pre></div>
+
+ <p>The <a href="pragma.html#pragma_defer_foreign_keys">defer_foreign_keys pragma</a> can be used to temporarily change all foreign
+ key constraints to deferred regardless of how they are declared.
+
+ </p><p>
+ The following example illustrates the effect of using a deferred foreign
+ key constraint.
+
+</p><div class="codeblock"><pre><i>-- Database schema. Both tables are initially empty. </i>
+CREATE TABLE artist(
+ artistid INTEGER PRIMARY KEY,
+ artistname TEXT
+);
+CREATE TABLE track(
+ trackid INTEGER,
+ trackname TEXT,
+ trackartist INTEGER REFERENCES artist(artistid) <b>DEFERRABLE INITIALLY DEFERRED</b>
+);
+
+sqlite3&gt; <i>-- If the foreign key constraint were immediate, this INSERT would</i>
+sqlite3&gt; <i>-- cause an error (since as there is no row in table artist with</i>
+sqlite3&gt; <i>-- artistid=5). But as the constraint is deferred and there is an</i>
+sqlite3&gt; <i>-- open transaction, no error occurs.</i>
+sqlite3&gt; BEGIN;
+sqlite3&gt; INSERT INTO track VALUES(1, 'White Christmas', 5);
+
+sqlite3&gt; <i>-- The following COMMIT fails, as the database is in a state that</i>
+sqlite3&gt; <i>-- does not satisfy the deferred foreign key constraint. The</i>
+sqlite3&gt; <i>-- transaction remains open.</i>
+sqlite3&gt; COMMIT;
+<b>SQL error: foreign key constraint failed</b>
+
+sqlite3&gt; <i>-- After inserting a row into the artist table with artistid=5, the</i>
+sqlite3&gt; <i>-- deferred foreign key constraint is satisfied. It is then possible</i>
+sqlite3&gt; <i>-- to commit the transaction without error.</i>
+sqlite3&gt; INSERT INTO artist VALUES(5, 'Bing Crosby');
+sqlite3&gt; COMMIT;
+</pre></div>
+ <p>
+ A <a href="lang_savepoint.html">nested savepoint</a> transaction may be RELEASEd while the
+ database is in a state that does not satisfy a deferred foreign key
+ constraint. A transaction savepoint (a non-nested savepoint that was
+ opened while there was not currently an open transaction), on the
+ other hand, is subject to the same restrictions as a COMMIT - attempting
+ to RELEASE it while the database is in such a state will fail.
+
+ </p><p>
+ If a COMMIT statement (or the RELEASE of a transaction SAVEPOINT) fails
+ because the database is currently in a state that violates a deferred
+ foreign key constraint and there are currently
+ <a href="lang_savepoint.html">nested savepoints</a>, the nested savepoints remain open.
+
+
+</p><a name="fk_actions"></a>
+<h2 id="fk_actions" tags="foreign key actions"><span>4.3. </span>
+ ON DELETE and ON UPDATE Actions
+</h2>
+
+ <p>
+ Foreign key ON DELETE and ON UPDATE clauses are used to configure actions
+ that take place when deleting rows from the parent table (ON DELETE), or
+ modifying the parent key values of existing rows (ON UPDATE). A single
+ foreign key constraint may have different actions configured for ON DELETE
+ and ON UPDATE. Foreign key actions are similar to triggers in many ways.
+
+ </p><p>
+ The ON DELETE and ON UPDATE action associated with each foreign key in an
+ SQLite database is one of "NO ACTION", "RESTRICT", "SET NULL",
+ "SET DEFAULT" or "CASCADE". If an action is not explicitly specified, it
+ defaults to "NO ACTION".
+
+ </p><ul>
+ <li><p> <b>NO ACTION</b>: Configuring "NO ACTION" means just that: when a
+ parent key is modified or deleted from the database, no special action is
+ taken.
+
+ </p></li><li><p> <b>RESTRICT</b>: The "RESTRICT" action means that the application
+ is prohibited from deleting (for ON DELETE RESTRICT) or modifying
+ (for ON UPDATE RESTRICT) a parent key when there exists one or more child
+ keys mapped to it. The difference between the effect of a RESTRICT
+ action and normal foreign key constraint enforcement is that the
+ RESTRICT action processing happens as soon as the field is updated -
+ not at the end of the current statement as it would with an immediate
+ constraint, or at the end of the current transaction as it would with
+ a deferred constraint.
+ Even if the foreign key constraint it is
+ attached to is deferred, configuring a RESTRICT action causes SQLite to
+ return an error immediately if a parent key with dependent child keys is
+ deleted or modified.
+
+ </p></li><li><p> <b>SET NULL</b>: If the configured action is "SET NULL", then when
+ a parent key is deleted (for ON DELETE SET NULL) or modified (for ON
+ UPDATE SET NULL), the child key columns of all rows in the child table
+ that mapped to the parent key are set to contain SQL NULL values.
+
+ </p></li><li><p> <b>SET DEFAULT</b>: The "SET DEFAULT" actions are similar to
+ "SET NULL",
+ except that each of the child key columns is set to contain the column's
+ default value instead of NULL. Refer to the <a href="lang_createtable.html">CREATE TABLE</a>
+ documentation for details on how default values are assigned to table
+ columns.
+
+ </p></li><li><p> <b>CASCADE</b>: A "CASCADE" action propagates the delete or update
+ operation on the parent key to each dependent child key. For an "ON
+ DELETE CASCADE" action, this means that each row in the child table that
+ was associated with the deleted parent row is also deleted. For an "ON
+ UPDATE CASCADE" action, it means that the values stored in each dependent
+ child key are modified to match the new parent key values.
+ </p></li></ul>
+
+ <p>
+ For example, adding an "ON UPDATE CASCADE" clause to the foreign key as
+ shown below enhances the example schema from section 1 to allow the user
+ to update the artistid (the parent key of the foreign key constraint)
+ column without breaking referential integrity:
+</p><div class="codeblock"><pre><i>-- Database schema</i>
+CREATE TABLE artist(
+ artistid INTEGER PRIMARY KEY,
+ artistname TEXT
+);
+CREATE TABLE track(
+ trackid INTEGER,
+ trackname TEXT,
+ trackartist INTEGER REFERENCES artist(artistid) <b>ON UPDATE CASCADE</b>
+);
+
+sqlite&gt; SELECT * FROM artist;
+artistid artistname
+-------- -----------------
+1 Dean Martin
+2 Frank Sinatra
+
+sqlite&gt; SELECT * FROM track;
+trackid trackname trackartist
+------- ----------------- -----------
+11 That's Amore 1
+12 Christmas Blues 1
+13 My Way 2
+
+sqlite&gt; <i>-- Update the artistid column of the artist record for "Dean Martin".</i>
+sqlite&gt; <i>-- Normally, this would raise a constraint, as it would orphan the two</i>
+sqlite&gt; <i>-- dependent records in the track table. However, the ON UPDATE CASCADE clause</i>
+sqlite&gt; <i>-- attached to the foreign key definition causes the update to "cascade"</i>
+sqlite&gt; <i>-- to the child table, preventing the foreign key constraint violation.</i>
+sqlite&gt; UPDATE artist SET artistid = 100 WHERE artistname = 'Dean Martin';
+
+sqlite&gt; SELECT * FROM artist;
+artistid artistname
+-------- -----------------
+2 Frank Sinatra
+100 Dean Martin
+
+sqlite&gt; SELECT * FROM track;
+trackid trackname trackartist
+------- ----------------- -----------
+11 That's Amore 100
+12 Christmas Blues 100
+13 My Way 2
+</pre></div>
+
+ <p>
+ Configuring an ON UPDATE or ON DELETE action does not mean that the foreign
+ key constraint does not need to be satisfied. For example, if an
+ "ON DELETE SET DEFAULT" action is configured,
+ but there is no row in the parent table
+ that corresponds to the default values of the child key columns, deleting
+ a parent key while dependent child keys exist still causes a foreign key
+ violation. For example:
+
+</p><div class="codeblock"><pre><i>-- Database schema</i>
+CREATE TABLE artist(
+ artistid INTEGER PRIMARY KEY,
+ artistname TEXT
+);
+CREATE TABLE track(
+ trackid INTEGER,
+ trackname TEXT,
+ trackartist INTEGER <b>DEFAULT 0</b> REFERENCES artist(artistid) <b>ON DELETE SET DEFAULT</b>
+);
+
+sqlite&gt; SELECT * FROM artist;
+artistid artistname
+-------- -----------------
+3 Sammy Davis Jr.
+
+sqlite&gt; SELECT * FROM track;
+trackid trackname trackartist
+------- ----------------- -----------
+14 Mr. Bojangles 3
+
+sqlite&gt; <i>-- Deleting the row from the parent table causes the child key</i>
+sqlite&gt; <i>-- value of the dependent row to be set to integer value 0. However, this</i>
+sqlite&gt; <i>-- value does not correspond to any row in the parent table. Therefore</i>
+sqlite&gt; <i>-- the foreign key constraint is violated and an is exception thrown.</i>
+sqlite&gt; DELETE FROM artist WHERE artistname = 'Sammy Davis Jr.';
+<b>SQL error: foreign key constraint failed</b>
+
+sqlite&gt; <i>-- This time, the value 0 does correspond to a parent table row. And</i>
+sqlite&gt; <i>-- so the DELETE statement does not violate the foreign key constraint</i>
+sqlite&gt; <i>-- and no exception is thrown.</i>
+sqlite&gt; INSERT INTO artist VALUES(0, 'Unknown Artist');
+sqlite&gt; DELETE FROM artist WHERE artistname = 'Sammy Davis Jr.';
+
+sqlite&gt; SELECT * FROM artist;
+artistid artistname
+-------- -----------------
+0 Unknown Artist
+
+sqlite&gt; SELECT * FROM track;
+trackid trackname trackartist
+------- ----------------- -----------
+14 Mr. Bojangles 0
+</pre></div>
+
+ <p>
+ Those familiar with <a href="lang_createtrigger.html">SQLite triggers</a>
+ will have noticed that the
+ "ON DELETE SET DEFAULT" action demonstrated in the example above is
+ similar in effect to the following AFTER DELETE trigger:
+</p><div class="codeblock"><pre>CREATE TRIGGER on_delete_set_default AFTER DELETE ON artist BEGIN
+ UPDATE child SET trackartist = 0 WHERE trackartist = old.artistid;
+END;
+</pre></div>
+
+ <p>
+ Whenever a row in the parent table of a foreign key constraint is deleted,
+ or when the values stored in the parent key column or columns are modified,
+ the logical sequence of events is:
+
+ </p><ol>
+ <li> Execute applicable BEFORE trigger programs,
+ </li><li> Check local (non foreign key) constraints,
+ </li><li> Update or delete the row in the parent table,
+ </li><li> Perform any required foreign key actions,
+ </li><li> Execute applicable AFTER trigger programs.
+ </li></ol>
+
+ <p>
+ There is one important difference between ON UPDATE foreign key actions and
+ SQL triggers. An ON UPDATE action is only taken if the values of the
+ parent key are modified so that the new parent key values are
+ not equal to the old. For example:
+
+</p><div class="codeblock"><pre><i>-- Database schema</i>
+CREATE TABLE parent(x PRIMARY KEY);
+CREATE TABLE child(y REFERENCES parent ON UPDATE SET NULL);
+
+sqlite&gt; SELECT * FROM parent;
+x
+----
+key
+
+sqlite&gt; SELECT * FROM child;
+y
+----
+key
+
+sqlite&gt; <i>-- Since the following UPDATE statement does not actually modify</i>
+sqlite&gt; <i>-- the parent key value, the ON UPDATE action is not performed and</i>
+sqlite&gt; <i>-- the child key value is not set to NULL.</i>
+sqlite&gt; UPDATE parent SET x = 'key';
+sqlite&gt; SELECT IFNULL(y, 'null') FROM child;
+y
+----
+key
+
+sqlite&gt; <i>-- This time, since the UPDATE statement does modify the parent key</i>
+sqlite&gt; <i>-- value, the ON UPDATE action is performed and the child key is set</i>
+sqlite&gt; <i>-- to NULL.</i>
+sqlite&gt; UPDATE parent SET x = 'key2';
+sqlite&gt; SELECT IFNULL(y, 'null') FROM child;
+y
+----
+null
+</pre></div>
+
+<h1 id="fk_schemacommands"><span>5. </span>CREATE, ALTER and DROP TABLE commands</h1>
+
+ <p>
+ This section describes the way the <a href="lang_createtable.html">CREATE TABLE</a>, <a href="lang_altertable.html">ALTER TABLE</a>,
+ and <a href="lang_droptable.html">DROP TABLE</a> commands
+ interact with SQLite's foreign keys.
+
+ </p><p>
+ A <a href="lang_createtable.html">CREATE TABLE</a> command operates the same whether or not
+ <a href="foreignkeys.html#fk_enable">foreign key constraints are enabled</a>. The parent key definitions of
+ foreign key constraints are not checked when a table is created. There is
+ nothing stopping the user from creating a foreign key definition that
+ refers to a parent table that does not exist, or to parent key columns that
+ do not exist or are not collectively bound by a PRIMARY KEY or UNIQUE
+ constraint.
+
+ </p><p>
+ The <a href="lang_altertable.html">ALTER TABLE</a> command works differently in two respects when foreign
+ key constraints are enabled:
+
+ </p><ul>
+ <li><p>
+ It is not possible to use the "ALTER TABLE ... ADD COLUMN" syntax
+ to add a column that includes a REFERENCES clause, unless the default
+ value of the new column is NULL. Attempting to do so returns an
+ error.
+
+ </p></li><li><p>
+ If an "ALTER TABLE ... RENAME TO" command is used to rename a table
+ that is the parent table of one or more foreign key constraints, the
+ definitions of the foreign key constraints are modified to refer to
+ the parent table by its new name. The text of the child CREATE
+ TABLE statement or statements stored in the <a href="schematab.html">sqlite_schema table</a> are
+ modified to reflect the new parent table name.
+ </p></li></ul>
+
+ <p>
+ If foreign key constraints are enabled when it is prepared, the
+ <a href="lang_droptable.html">DROP TABLE</a> command performs an implicit <a href="lang_delete.html">DELETE</a> to remove all
+ rows from the table before dropping it. The implicit DELETE does not cause
+ any SQL triggers to fire, but may invoke foreign key actions or constraint
+ violations. If an immediate foreign key constraint is violated, the DROP
+ TABLE statement fails and the table is not dropped. If a deferred foreign
+ key constraint is violated, then an error is reported when the user attempts
+ to commit the transaction if the foreign key constraint violations still
+ exist at that point. Any "foreign key mismatch" errors encountered as part
+ of an implicit DELETE are ignored.
+
+ </p><p>
+ The intent of these enhancements to the <a href="lang_altertable.html">ALTER TABLE</a> and <a href="lang_droptable.html">DROP TABLE</a>
+ commands is to ensure that they cannot be used to create a database that
+ contains foreign key violations, at least while foreign key constraints are
+ enabled. There is one exception to this rule though. If a parent key is
+ not subject to a PRIMARY KEY or UNIQUE constraint created as part of the
+ parent table definition, but is subject to a UNIQUE constraint by virtue
+ of an index created using the <a href="lang_createindex.html">CREATE INDEX</a> command, then the child
+ table may be populated without causing a "foreign key mismatch" error. If
+ the UNIQUE index is dropped from the database schema, then the parent table
+ itself is dropped, no error will be reported. However the database may be
+ left in a state where the child table of the foreign key constraint contains
+ rows that do not refer to any parent table row. This case can be avoided
+ if all parent keys in the database schema are constrained by PRIMARY KEY
+ or UNIQUE constraints added as part of the parent table definition, not
+ by external UNIQUE indexes.
+
+ </p><p>
+ The properties of the <a href="lang_droptable.html">DROP TABLE</a> and <a href="lang_altertable.html">ALTER TABLE</a> commands described
+ above only apply if foreign keys are enabled. If the user considers them
+ undesirable, then the workaround is to use <a href="pragma.html#pragma_foreign_keys">PRAGMA foreign_keys</a> to
+ disable foreign key constraints before executing the DROP or ALTER TABLE
+ command. Of course, while foreign key constraints are disabled, there is nothing
+ to stop the user from violating foreign key constraints and thus creating
+ an internally inconsistent database.
+
+
+
+</p><h1 id="fk_unsupported"><span>6. </span>Limits and Unsupported Features</h1>
+
+ <p>
+ This section lists a few limitations and omitted features that are not
+ mentioned elsewhere.
+
+ </p><ol>
+ <li><p>
+ <b>No support for the MATCH clause.</b> According to SQL92, a MATCH clause
+ may be attached to a composite foreign key definition to modify the way
+ NULL values that occur in child keys are handled. If "MATCH SIMPLE" is
+ specified, then a child key is not required to correspond to any row
+ of the parent table if one or more of the child key values are NULL.
+ If "MATCH FULL" is specified, then if any of the child key values is
+ NULL, no corresponding row in the parent table is required, but all
+ child key values must be NULL. Finally, if the foreign key constraint
+ is declared as "MATCH PARTIAL" and one of the child key values is NULL,
+ there must exist at least one row in the parent table for which the
+ non-NULL child key values match the parent key values.
+
+ </p><p>
+ SQLite parses MATCH clauses (i.e. does not report a syntax error
+ if you specify one), but does not enforce them. All foreign key
+ constraints in SQLite are handled as if MATCH SIMPLE were specified.
+ </p></li><li> <p>
+ <b>No support for switching constraints between deferred and immediate
+ mode.</b> Many systems allow the user to toggle individual foreign key
+ constraints between <a href="#fk_deferred">deferred</a> and immediate
+ mode at runtime (for example using the Oracle "SET CONSTRAINT" command).
+ SQLite does not support this. In SQLite, a foreign key constraint is
+ permanently marked as deferred or immediate when it is created.
+
+ </p></li><li><p>
+ <b>Recursion limit on foreign key actions.</b> The
+ <a href="limits.html#max_trigger_depth">SQLITE_MAX_TRIGGER_DEPTH</a> and <a href="c3ref/c_limit_attached.html#sqlitelimittriggerdepth">SQLITE_LIMIT_TRIGGER_DEPTH</a>
+ settings determine the maximum allowable depth of trigger
+ program recursion. For the purposes of these limits,
+ <a href="foreignkeys.html#fk_actions">foreign key actions</a> are considered trigger programs. The
+ <a href="pragma.html#pragma_recursive_triggers">PRAGMA recursive_triggers</a> setting does not affect the operation
+ of foreign key actions. It is not possible to disable recursive foreign
+ key actions.
+ </p></li></ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/foreignkeys.in?m=65cb8c8c4c85c4682">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/formatchng.html b/www/formatchng.html
new file mode 100644
index 0000000..2c9fccb
--- /dev/null
+++ b/www/formatchng.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>File Format Changes in SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h2>File Format Changes in SQLite</h2>
+
+<p>
+The <a href="fileformat2.html">underlying file format</a> for SQLite databases does not
+change in incompatible ways. There are literally trillions of
+SQLite database files in circulation and the SQLite developers are
+committing to supporting those files for decades into the future.
+</p>
+
+<p>
+Prior to SQLite version 3.0.0 (2004-06-18), the file format did
+sometimes change from one release to the next. But since that time,
+the file format has been fully backwards compatible.
+</p>
+
+<p>
+By "backwards compatible" we mean that
+newer versions of SQLite can always read and write database files created
+by older versions of SQLite.
+It is often also the case that SQLite is "forwards compatible", that
+older versions of SQLite can read and write database files created by
+newer versions of SQLite. But there are sometimes forward compatibility
+breaks. Sometimes new features are added to the file format. For
+example, <a href="wal.html">WAL mode</a> was added in version 3.7.0 (2010-07-21).
+SQLite 3.7.0 and later can read and write all database files created
+by earlier versions of SQLite. And earlier versions of SQLite can
+read and write database files created by SQLite 3.7.0 and later
+<i>as long as the database does not use WAL mode</i>. But versions of
+SQLite prior to version 3.7.0 cannot read nor write SQLite database files
+that make use of WAL mode.
+</p>
+
+<h2>Summary</h2>
+
+<ul>
+<li><p>
+Newer versions of SQLite can always read and/or write database files
+created by older versions of SQLite, back to version 3.0.0 (2004-06-18).
+
+<li><p>
+Older versions of SQLite back to version 3.0.0 can read and write
+database files created by newer versions of SQLite as long as the
+database does not make use of newer features that are unknown to that
+older version.
+</ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/formatchng.in?m=8415958e0a89646dc">2022-09-13 14:04:46</a> UTC </small></i></p>
+
diff --git a/www/fts3.html b/www/fts3.html
new file mode 100644
index 0000000..3bb180f
--- /dev/null
+++ b/www/fts3.html
@@ -0,0 +1,3286 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite FTS3 and FTS4 Extensions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite FTS3 and FTS4 Extensions
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction_to_fts3_and_fts4">1. Introduction to FTS3 and FTS4</a></div>
+<div class="fancy-toc2"><a href="#differences_between_fts3_and_fts4">1.1. Differences between FTS3 and FTS4</a></div>
+<div class="fancy-toc2"><a href="#creating_and_destroying_fts_tables">1.2. Creating and Destroying FTS Tables</a></div>
+<div class="fancy-toc2"><a href="#populating_fts_tables">1.3. Populating FTS Tables</a></div>
+<div class="fancy-toc2"><a href="#simple_fts_queries">1.4. Simple FTS Queries</a></div>
+<div class="fancy-toc2"><a href="#summary">1.5. Summary</a></div>
+<div class="fancy-toc1"><a href="#compiling_and_enabling_fts3_and_fts4">2. Compiling and Enabling FTS3 and FTS4</a></div>
+<div class="fancy-toc1"><a href="#full_text_index_queries">3. Full-text Index Queries</a></div>
+<div class="fancy-toc2"><a href="#_set_operations_using_the_enhanced_query_syntax">3.1.
+Set Operations Using The Enhanced Query Syntax</a></div>
+<div class="fancy-toc2"><a href="#set_operations_using_the_standard_query_syntax">3.2. Set Operations Using The Standard Query Syntax</a></div>
+<div class="fancy-toc1"><a href="#auxiliary_functions_snippet_offsets_and_matchinfo">4. Auxiliary Functions - Snippet, Offsets and Matchinfo</a></div>
+<div class="fancy-toc2"><a href="#the_offsets_function">4.1. The Offsets Function</a></div>
+<div class="fancy-toc2"><a href="#the_snippet_function">4.2. The Snippet Function</a></div>
+<div class="fancy-toc2"><a href="#matchinfo">4.3. The Matchinfo Function</a></div>
+<div class="fancy-toc1"><a href="#fts4aux">5. Fts4aux - Direct Access to the Full-Text Index</a></div>
+<div class="fancy-toc1"><a href="#fts4_options">6. FTS4 Options</a></div>
+<div class="fancy-toc2"><a href="#the_compress_and_uncompress_options">6.1. The compress= and uncompress= options</a></div>
+<div class="fancy-toc2"><a href="#the_content_option_">6.2. The content= option </a></div>
+<div class="fancy-toc3"><a href="#_contentless_fts4_tables_">6.2.1. Contentless FTS4 Tables </a></div>
+<div class="fancy-toc3"><a href="#_external_content_fts4_tables_">6.2.2. External Content FTS4 Tables </a></div>
+<div class="fancy-toc2"><a href="#the_languageid_option">6.3. The languageid= option</a></div>
+<div class="fancy-toc2"><a href="#the_matchinfo_option">6.4. The matchinfo= option</a></div>
+<div class="fancy-toc2"><a href="#the_notindexed_option">6.5. The notindexed= option</a></div>
+<div class="fancy-toc2"><a href="#the_prefix_option">6.6. The prefix= option</a></div>
+<div class="fancy-toc1"><a href="#commands">7. Special Commands For FTS3 and FTS4</a></div>
+<div class="fancy-toc2"><a href="#optimize">7.1. The "optimize" command</a></div>
+<div class="fancy-toc2"><a href="#rebuild">7.2. The "rebuild" command</a></div>
+<div class="fancy-toc2"><a href="#integcheck">7.3. The "integrity-check" command</a></div>
+<div class="fancy-toc2"><a href="#mergecmd">7.4. The "merge=X,Y" command</a></div>
+<div class="fancy-toc2"><a href="#automerge"">7.5. The "automerge=N" command</a></div>
+<div class="fancy-toc1"><a href="#tokenizer">8. Tokenizers</a></div>
+<div class="fancy-toc2"><a href="#custom_application_defined_tokenizers">8.1. Custom (Application Defined) Tokenizers</a></div>
+<div class="fancy-toc2"><a href="#querying_tokenizers">8.2. Querying Tokenizers</a></div>
+<div class="fancy-toc1"><a href="#data_structures">9. Data Structures</a></div>
+<div class="fancy-toc2"><a href="#shadow_tables">9.1. Shadow Tables</a></div>
+<div class="fancy-toc2"><a href="#variable_length_integer_varint_format">9.2. Variable Length Integer (varint) Format</a></div>
+<div class="fancy-toc2"><a href="#segment_b_tree_format">9.3. Segment B-Tree Format</a></div>
+<div class="fancy-toc3"><a href="#segment_b_tree_leaf_nodes">9.3.1. Segment B-Tree Leaf Nodes</a></div>
+<div class="fancy-toc3"><a href="#segment_b_tree_interior_nodes">9.3.2. Segment B-Tree Interior Nodes</a></div>
+<div class="fancy-toc2"><a href="#doclist_format">9.4. Doclist Format</a></div>
+<div class="fancy-toc1"><a href="#limitations">10. Limitations</a></div>
+<div class="fancy-toc2"><a href="#_utf_16_byte_order_mark_problem_">10.1. UTF-16 byte-order-mark problem </a></div>
+<div class="fancy-toc1"><a href="#appendix_a">
+Appendix A: Search Application Tips
+</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+
+<h2 id="overview" style="margin-left:1.0em" notoc="1"> Overview</h2>
+
+<p>
+ FTS3 and FTS4 are SQLite virtual table modules that allows users to perform
+ full-text searches on a set of documents. The most common (and effective)
+ way to describe full-text searches is "what Google, Yahoo, and Bing do
+ with documents placed on the World Wide Web". Users input a term, or series
+ of terms, perhaps connected by a binary operator or grouped together into a
+ phrase, and the full-text query system finds the set of documents that best
+ matches those terms considering the operators and groupings the user has
+ specified. This article describes the deployment and usage of FTS3 and FTS4.
+
+</p><p>
+ FTS1 and FTS2 are obsolete full-text search modules for SQLite. There are known
+ issues with these older modules and their use should be avoided.
+ Portions of the original FTS3 code were contributed to the SQLite project
+ by Scott Hess of <a href="http://www.google.com">Google</a>. It is now
+ developed and maintained as part of SQLite.
+
+</p><h1 id="introduction_to_fts3_and_fts4"><span>1. </span>Introduction to FTS3 and FTS4</h1>
+
+<p>
+ The FTS3 and FTS4 extension modules allows users to create special tables with a
+ built-in full-text index (hereafter "FTS tables"). The full-text index
+ allows the user to efficiently query the database for all rows that contain
+ one or more words (hereafter "tokens"), even if the table
+ contains many large documents.
+
+</p><p>
+ For example, if each of the 517430 documents in the
+ "<a href="http://www.cs.cmu.edu/~enron/">Enron E-Mail Dataset</a>"
+ is inserted into both an FTS table and an ordinary SQLite table
+ created using the following SQL script:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE enrondata1 USING fts3(content TEXT); /* FTS3 table */
+CREATE TABLE enrondata2(content TEXT); /* Ordinary table */
+</pre></div>
+
+<p>
+ Then either of the two queries below may be executed to find the number of
+ documents in the database that contain the word "linux" (351). Using one
+ desktop PC hardware configuration, the query on the FTS3 table returns in
+ approximately 0.03 seconds, versus 22.5 for querying the ordinary table.
+
+</p><div class="codeblock"><pre>SELECT count(*) FROM enrondata1 WHERE content MATCH 'linux'; /* 0.03 seconds */
+SELECT count(*) FROM enrondata2 WHERE content LIKE '%linux%'; /* 22.5 seconds */
+</pre></div>
+
+<p>
+ Of course, the two queries above are not entirely equivalent. For example
+ the LIKE query matches rows that contain terms such as "linuxophobe"
+ or "EnterpriseLinux" (as it happens, the Enron E-Mail Dataset does not
+ actually contain any such terms), whereas the MATCH query on the FTS3 table
+ selects only those rows that contain "linux" as a discrete token. Both
+ searches are case-insensitive. The FTS3 table consumes around 2006 MB on
+ disk compared to just 1453 MB for the ordinary table. Using the same
+ hardware configuration used to perform the SELECT queries above, the FTS3
+ table took just under 31 minutes to populate, versus 25 for the ordinary
+ table.
+
+</p><h2 id="differences_between_fts3_and_fts4"><span>1.1. </span>Differences between FTS3 and FTS4</h2>
+<a name="fts4"></a>
+
+
+<p>
+ FTS3 and FTS4 are nearly identical. They share most of their code in common,
+ and their interfaces are the same. The differences are:
+
+</p><ul>
+ <li> <p>FTS4 contains query performance optimizations that may significantly
+ improve the performance of full-text queries that contain terms that are
+ very common (present in a large percentage of table rows).
+
+ </p></li><li> <p>FTS4 supports some additional options that may used with the <a href="fts3.html#matchinfo">matchinfo()</a>
+ function.
+
+ </p></li><li> <p>Because it stores extra information on disk in two new
+ <a href="fts3.html#*shadowtab">shadow tables</a> in order to support the performance
+ optimizations and extra matchinfo() options, FTS4 tables may consume more
+ disk space than the equivalent table created using FTS3. Usually the overhead
+ is 1-2% or less, but may be as high as 10% if the documents stored in the
+ FTS table are very small. The overhead may be reduced by specifying the
+ directive <a href="fts3.html#fts4matchinfo">"matchinfo=fts3"</a> as part of the FTS4 table
+ declaration, but this comes at the expense of sacrificing some of the
+ extra supported matchinfo() options.
+
+ </p></li><li> <p>FTS4 provides hooks (the compress and uncompress
+ <a href="fts3.html#fts4_options">options</a>) allowing data to be stored in a compressed
+ form, reducing disk usage and IO.
+</p></li></ul>
+
+<p>
+ FTS4 is an enhancement to FTS3.
+ FTS3 has been available since SQLite <a href="releaselog/3_5_0.html">version 3.5.0</a> (2007-09-04)
+ The enhancements for FTS4 were added with SQLite <a href="releaselog/3_7_4.html">version 3.7.4</a>
+ (2010-12-07).
+
+</p><p>
+ Which module, FTS3 or FTS4, should you use in your application? FTS4 is
+ sometimes significantly faster than FTS3, even orders of magnitude faster
+ depending on the query, though in the common case the performance of the two
+ modules is similar. FTS4 also offers the enhanced <a href="fts3.html#matchinfo">matchinfo()</a> outputs which
+ can be useful in ranking the results of a <a href="fts3.html#full_text_index_queries">MATCH</a> operation. On the
+ other hand, in the absence of a <a href="fts3.html#fts4matchinfo">matchinfo=fts3</a> directive FTS4 requires a little
+ more disk space than FTS3, though only a percent of two in most cases.
+
+</p><p>
+ For newer applications, FTS4 is recommended; though if compatibility with older
+ versions of SQLite is important, then FTS3 will usually serve just as well.
+
+</p><h2 id="creating_and_destroying_fts_tables"><span>1.2. </span>Creating and Destroying FTS Tables</h2>
+
+<p>
+ Like other virtual table types, new FTS tables are created using a
+ <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement. The module name, which follows
+ the USING keyword, is either "fts3" or "fts4". The virtual table module arguments may
+ be left empty, in which case an FTS table with a single user-defined
+ column named "content" is created. Alternatively, the module arguments
+ may be passed a list of comma separated column names.
+
+</p><p>
+ If column names are explicitly provided for the FTS table as part of
+ the CREATE VIRTUAL TABLE statement, then a datatype name may be optionally
+ specified for each column. This is pure syntactic sugar, the
+ supplied typenames are not used by FTS or the SQLite core for any
+ purpose. The same applies to any constraints specified along with an
+ FTS column name - they are parsed but not used or recorded by the system
+ in any way.
+
+</p><div class="codeblock"><pre><i>-- Create an FTS table named "data" with one column - "content":</i>
+CREATE VIRTUAL TABLE data USING fts3();
+
+<i>-- Create an FTS table named "pages" with three columns:</i>
+CREATE VIRTUAL TABLE pages USING fts4(title, keywords, body);
+
+<i>-- Create an FTS table named "mail" with two columns. Datatypes
+-- and column constraints are specified along with each column. These
+-- are completely ignored by FTS and SQLite. </i>
+CREATE VIRTUAL TABLE mail USING fts3(
+ subject VARCHAR(256) NOT NULL,
+ body TEXT CHECK(length(body)&lt;10240)
+);
+</pre></div>
+
+<p>
+ As well as a list of columns, the module arguments passed to a CREATE
+ VIRTUAL TABLE statement used to create an FTS table may be used to specify
+ a <a href="fts3.html#tokenizer">tokenizer</a>. This is done by specifying a string of the form
+ "tokenize=&lt;tokenizer name&gt; &lt;tokenizer args&gt;" in place of a column
+ name, where &lt;tokenizer name&gt; is the name of the tokenizer to use and
+ &lt;tokenizer args&gt; is an optional list of whitespace separated qualifiers
+ to pass to the tokenizer implementation. A tokenizer specification may be
+ placed anywhere in the column list, but at most one tokenizer declaration is
+ allowed for each CREATE VIRTUAL TABLE statement. <a href="fts3.html#tokenizer">See below</a> for a
+ detailed description of using (and, if necessary, implementing) a tokenizer.
+
+</p><div class="codeblock"><pre><i>-- Create an FTS table named "papers" with two columns that uses</i>
+<i>-- the tokenizer "porter".</i>
+CREATE VIRTUAL TABLE papers USING fts3(author, document, tokenize=porter);
+
+<i>-- Create an FTS table with a single column - "content" - that uses</i>
+<i>-- the "simple" tokenizer.</i>
+CREATE VIRTUAL TABLE data USING fts4(tokenize=simple);
+
+<i>-- Create an FTS table with two columns that uses the "icu" tokenizer.</i>
+<i>-- The qualifier "en_AU" is passed to the tokenizer implementation</i>
+CREATE VIRTUAL TABLE names USING fts3(a, b, tokenize=icu en_AU);
+</pre></div>
+
+<p>
+ FTS tables may be dropped from the database using an ordinary <a href="lang_droptable.html">DROP TABLE</a>
+ statement. For example:
+
+</p><div class="codeblock"><pre><i>-- Create, then immediately drop, an FTS4 table.</i>
+CREATE VIRTUAL TABLE data USING fts4();
+DROP TABLE data;
+</pre></div>
+
+<h2 id="populating_fts_tables"><span>1.3. </span>Populating FTS Tables</h2>
+
+ <p>
+ FTS tables are populated using <a href="lang_insert.html">INSERT</a>, <a href="lang_update.html">UPDATE</a> and <a href="lang_delete.html">DELETE</a>
+ statements in the same way as ordinary SQLite tables are.
+
+ </p><p>
+ As well as the columns named by the user (or the "content" column if no
+ module arguments were specified as part of the <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a>
+ statement), each FTS table has a "rowid" column. The rowid of an FTS
+ table behaves in the same way as the rowid column of an ordinary SQLite
+ table, except that the values stored in the rowid column of an FTS table
+ remain unchanged if the database is rebuilt using the <a href="lang_vacuum.html">VACUUM</a> command.
+ For FTS tables, "docid" is allowed as an alias along with the usual "rowid",
+ "oid" and "_oid_" identifiers. Attempting to insert or update a row with a
+ docid value that already exists in the table is an error, just as it would
+ be with an ordinary SQLite table.
+
+ </p><p>
+ There is one other subtle difference between "docid" and the normal SQLite
+ aliases for the rowid column. Normally, if an INSERT or UPDATE statement
+ assigns discrete values to two or more aliases of the rowid column, SQLite
+ writes the rightmost of such values specified in the INSERT or UPDATE
+ statement to the database. However, assigning a non-NULL value to both
+ the "docid" and one or more of the SQLite rowid aliases when inserting or
+ updating an FTS table is considered an error. See below for an example.
+
+</p><div class="codeblock"><pre><i>-- Create an FTS table</i>
+CREATE VIRTUAL TABLE pages USING fts4(title, body);
+
+<i>-- Insert a row with a specific docid value.</i>
+INSERT INTO pages(docid, title, body) VALUES(53, 'Home Page', 'SQLite is a software...');
+
+<i>-- Insert a row and allow FTS to assign a docid value using the same algorithm as</i>
+<i>-- SQLite uses for ordinary tables. In this case the new docid will be 54,</i>
+<i>-- one greater than the largest docid currently present in the table.</i>
+INSERT INTO pages(title, body) VALUES('Download', 'All SQLite source code...');
+
+<i>-- Change the title of the row just inserted.</i>
+UPDATE pages SET title = 'Download SQLite' WHERE rowid = 54;
+
+<i>-- Delete the entire table contents.</i>
+DELETE FROM pages;
+
+<i>-- The following is an error. It is not possible to assign non-NULL values to both</i>
+<i>-- the rowid and docid columns of an FTS table.</i>
+INSERT INTO pages(rowid, docid, title, body) VALUES(1, 2, 'A title', 'A document body');
+</pre></div>
+
+ <p>
+ To support full-text queries, FTS maintains an inverted index that maps
+ from each unique term or word that appears in the dataset to the locations
+ in which it appears within the table contents. For the curious, a
+ complete description of the <a href="fts3.html#data_structures">data structure</a> used to store
+ this index within the database file appears below. A feature of
+ this data structure is that at any time the database may contain not
+ one index b-tree, but several different b-trees that are incrementally
+ merged as rows are inserted, updated and deleted. This technique improves
+ performance when writing to an FTS table, but causes some overhead for
+ full-text queries that use the index. Evaluating the special <a href="fts3.html#*fts4optcmd">"optimize" command</a>,
+ an SQL statement of the
+ form "INSERT INTO &lt;fts-table&gt;(&lt;fts-table&gt;) VALUES('optimize')",
+ causes FTS to merge all existing index b-trees into a single large
+ b-tree containing the entire index. This can be an expensive operation,
+ but may speed up future queries.
+
+ </p><p>
+ For example, to optimize the full-text index for an FTS table named
+ "docs":
+
+</p><div class="codeblock"><pre><i>-- Optimize the internal structure of FTS table "docs".</i>
+INSERT INTO docs(docs) VALUES('optimize');
+</pre></div>
+
+ <p>
+ The statement above may appear syntactically incorrect to some. Refer to
+ the section describing the <a href="fts3.html#simple_fts_queries">simple fts queries</a> for an explanation.
+
+ </p><p>
+ There is another, deprecated, method for invoking the optimize
+ operation using a SELECT statement. New code should use statements
+ similar to the INSERT above to optimize FTS structures.
+
+</p><a name="simple_fts_queries"></a>
+<h2 tags="simple fts queries" id="simple_fts_queries"><span>1.4. </span>Simple FTS Queries</h2>
+
+<p>
+ As for all other SQLite tables, virtual or otherwise, data is retrieved
+ from FTS tables using a <a href="lang_select.html">SELECT</a> statement.
+
+</p><p>
+ FTS tables can be queried efficiently using SELECT statements of two
+ different forms:
+
+</p><ul>
+ <li><p>
+ <b>Query by rowid</b>. If the WHERE clause of the SELECT statement
+ contains a sub-clause of the form "rowid = ?", where ? is an SQL expression,
+ FTS is able to retrieve the requested row directly using the equivalent
+ of an SQLite <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> index.
+
+ </p></li><li><p>
+ <b>Full-text query</b>. If the WHERE clause of the SELECT statement contains
+ a sub-clause of the form "&lt;column&gt; MATCH ?", FTS is able to use
+ the built-in full-text index to restrict the search to those documents
+ that match the full-text query string specified as the right-hand operand
+ of the MATCH clause.
+</p></li></ul>
+
+<p>
+ If neither of these two query strategies can be used, all
+ queries on FTS tables are implemented using a linear scan of the entire
+ table. If the table contains large amounts of data, this may be an
+ impractical approach (the first example on this page shows that a linear
+ scan of 1.5 GB of data takes around 30 seconds using a modern PC).
+
+</p><div class="codeblock"><pre><i>-- The examples in this block assume the following FTS table:</i>
+CREATE VIRTUAL TABLE mail USING fts3(subject, body);
+
+SELECT * FROM mail WHERE rowid = 15; <i>-- Fast. Rowid lookup.</i>
+SELECT * FROM mail WHERE body MATCH 'sqlite'; <i>-- Fast. Full-text query.</i>
+SELECT * FROM mail WHERE mail MATCH 'search'; <i>-- Fast. Full-text query.</i>
+SELECT * FROM mail WHERE rowid BETWEEN 15 AND 20; <i>-- Fast. Rowid lookup.</i>
+SELECT * FROM mail WHERE subject = 'database'; <i>-- Slow. Linear scan.</i>
+SELECT * FROM mail WHERE subject MATCH 'database'; <i>-- Fast. Full-text query.</i>
+</pre></div>
+
+<p>
+ In all of the full-text queries above, the right-hand operand of the MATCH
+ operator is a string consisting of a single term. In this case, the MATCH
+ expression evaluates to true for all documents that contain one or more
+ instances of the specified word ("sqlite", "search" or "database", depending
+ on which example you look at). Specifying a single term as the right-hand
+ operand of the MATCH operator results in the simplest and most common type
+ of full-text query possible. However more complicated queries are possible,
+ including phrase searches, term-prefix searches and searches for documents
+ containing combinations of terms occurring within a defined proximity of each
+ other. The various ways in which the full-text index may be queried are
+ <a href="fts3.html#full_text_index_queries">described below</a>.
+
+</p><p>
+ Normally, full-text queries are case-insensitive. However, this
+ is dependent on the specific <a href="fts3.html#tokenizer">tokenizer</a> used by the FTS table
+ being queried. Refer to the section on <a href="fts3.html#tokenizer">tokenizers</a> for details.
+
+</p><p>
+ The paragraph above notes that a MATCH operator with a simple term as the
+ right-hand operand evaluates to true for all documents that contain the
+ specified term. In this context, the "document" may refer to either the
+ data stored in a single column of a row of an FTS table, or to the contents
+ of all columns in a single row, depending on the identifier used as the
+ left-hand operand to the MATCH operator. If the identifier specified as
+ the left-hand operand of the MATCH operator is an FTS table column name,
+ then the document that the search term must be contained in is the value
+ stored in the specified column. However, if the identifier is the name
+ of the FTS <i>table</i> itself, then the MATCH operator evaluates to true
+ for each row of the FTS table for which any column contains the search
+ term. The following example demonstrates this:
+
+</p><div class="codeblock"><pre><i>-- Example schema</i>
+CREATE VIRTUAL TABLE mail USING fts3(subject, body);
+
+<i>-- Example table population</i>
+INSERT INTO mail(docid, subject, body) VALUES(1, 'software feedback', 'found it too slow');
+INSERT INTO mail(docid, subject, body) VALUES(2, 'software feedback', 'no feedback');
+INSERT INTO mail(docid, subject, body) VALUES(3, 'slow lunch order', 'was a software problem');
+
+<i>-- Example queries</i>
+SELECT * FROM mail WHERE subject MATCH 'software'; <i>-- Selects rows 1 and 2</i>
+SELECT * FROM mail WHERE body MATCH 'feedback'; <i>-- Selects row 2</i>
+SELECT * FROM mail WHERE mail MATCH 'software'; <i>-- Selects rows 1, 2 and 3</i>
+SELECT * FROM mail WHERE mail MATCH 'slow'; <i>-- Selects rows 1 and 3</i>
+</pre></div>
+
+<p>
+ At first glance, the final two full-text queries in the example above seem
+ to be syntactically incorrect, as there is a table name ("mail") used as
+ an SQL expression. The reason this is acceptable is that each FTS table
+ actually has a <a href="c3ref/declare_vtab.html">HIDDEN</a> column with the same name
+ as the table itself (in this case, "mail"). The value stored in this
+ column is not meaningful to the application, but can be used as the
+ left-hand operand to a MATCH operator. This special column may also be
+ passed as an argument to the <a href="fts3.html#snippet">FTS auxiliary functions</a>.
+
+</p><p>
+ The following example illustrates the above. The expressions "docs",
+ "docs.docs" and "main.docs.docs" all refer to column "docs". However, the
+ expression "main.docs" does not refer to any column. It could be used to
+ refer to a table, but a table name is not allowed in the context in which
+ it is used below.
+
+</p><div class="codeblock"><pre><i>-- Example schema</i>
+CREATE VIRTUAL TABLE docs USING fts4(content);
+
+<i>-- Example queries</i>
+SELECT * FROM docs WHERE docs MATCH 'sqlite'; <i>-- OK.</i>
+SELECT * FROM docs WHERE docs.docs MATCH 'sqlite'; <i>-- OK.</i>
+SELECT * FROM docs WHERE main.docs.docs MATCH 'sqlite'; <i>-- OK.</i>
+SELECT * FROM docs WHERE main.docs MATCH 'sqlite'; <i>-- Error.</i>
+</pre></div>
+
+<h2 id="summary"><span>1.5. </span>Summary</h2>
+
+<p>
+ From the users point of view, FTS tables are similar to ordinary SQLite
+ tables in many ways. Data may be added to, modified within and removed
+ from FTS tables using the INSERT, UPDATE and DELETE commands just as
+ it may be with ordinary tables. Similarly, the SELECT command may be used
+ to query data. The following list summarizes the differences between FTS
+ and ordinary tables:
+
+</p><ol>
+ <li><p>
+ As with all virtual table types, it is not possible to create indices or
+ triggers attached to FTS tables. Nor is it possible to use the ALTER TABLE
+ command to add extra columns to FTS tables (although it is possible to use
+ ALTER TABLE to rename an FTS table).
+
+ </p></li><li><p>
+ Data-types specified as part of the "CREATE VIRTUAL TABLE" statement
+ used to create an FTS table are ignored completely. Instead of the
+ normal rules for applying type <a href="datatype3.html#affinity">affinity</a> to inserted values, all
+ values inserted into FTS table columns (except the special rowid
+ column) are converted to type TEXT before being stored.
+
+ </p></li><li><p>
+ FTS tables permit the special alias "docid" to be used to refer to the
+ rowid column supported by all <a href="vtab.html">virtual tables</a>.
+
+ </p></li><li><p>
+ The <a href="fts3.html#full_text_index_queries">FTS MATCH</a> operator is supported for queries based on the built-in
+ full-text index.
+
+ </p></li><li><p>
+ The <a href="fts3.html#snippet">FTS auxiliary functions</a>, <a href="fts3.html#snippet">snippet()</a>, <a href="fts3.html#offsets">offsets()</a>, and <a href="fts3.html#matchinfo">matchinfo()</a> are
+ available to support full-text queries.
+
+ </p></li><li><p>
+ <a name="hiddencol"></a>
+
+ Every FTS table has a <a href="vtab.html#hiddencol">hidden column</a> with the
+ same name as the table itself. The value contained in each row for the
+ hidden column is a blob that is only useful as the left operand of a
+ <a href="fts3.html#full_text_index_queries">MATCH</a> operator, or as the left-most argument to one
+ of the <a href="fts3.html#snippet">FTS auxiliary functions</a>.
+
+
+</p></li></ol>
+
+
+<a name="compiling_and_enabling_fts3_and_fts4"></a>
+<h1 tags="compile fts" id="compiling_and_enabling_fts3_and_fts4"><span>2. </span>Compiling and Enabling FTS3 and FTS4</h1>
+
+<p>
+ Although FTS3 and FTS4 are included with the SQLite core source code, they are not
+ enabled by default. To build SQLite with FTS functionality enabled, define
+ the preprocessor macro <a href="compile.html#enable_fts3">SQLITE_ENABLE_FTS3</a> when compiling. New applications
+ should also define the <a href="compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> macro to enable the
+ <a href="fts3.html#_set_operations_using_the_enhanced_query_syntax">enhanced query syntax</a> (see below). Usually, this is done by adding the
+ following two switches to the compiler command line:
+
+</p><div class="codeblock"><pre>-DSQLITE_ENABLE_FTS3
+-DSQLITE_ENABLE_FTS3_PARENTHESIS
+</pre></div>
+
+<p>
+ Note that enabling FTS3 also makes FTS4 available. There is not a separate
+ SQLITE_ENABLE_FTS4 compile-time option. A build of SQLite either supports
+ both FTS3 and FTS4 or it supports neither.
+
+</p><p>
+ If using the amalgamation autoconf based build system, setting the CPPFLAGS
+ environment variable while running the 'configure' script is an easy
+ way to set these macros. For example, the following command:
+
+</p><div class="codeblock"><pre>CPPFLAGS="-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS" ./configure &lt;configure options&gt;
+</pre></div>
+
+<p>
+ where <i>&lt;configure options&gt;</i> are those options normally passed to
+ the configure script, if any.
+
+</p><p>
+ Because FTS3 and FTS4 are virtual tables, The <a href="compile.html#enable_fts3">SQLITE_ENABLE_FTS3</a> compile-time option
+ is incompatible with the <a href="compile.html#omit_virtualtable">SQLITE_OMIT_VIRTUALTABLE</a> option.
+
+</p><p>
+ If a build of SQLite does not include the FTS modules, then any attempt to prepare an
+ SQL statement to create an FTS3 or FTS4 table or to drop or access an existing
+ FTS table in any way will fail. The error message returned will be similar
+ to "no such module: ftsN" (where N is either 3 or 4).
+
+</p><p>
+ If the C version of the <a href="http://site.icu-project.org/">ICU library</a>
+ is available, then FTS may also be compiled with the SQLITE_ENABLE_ICU
+ pre-processor macro defined. Compiling with this macro enables an FTS
+ <a href="fts3.html#tokenizer">tokenizer</a> that uses the ICU library to split a document into terms
+ (words) using the conventions for a specified language and locale.
+
+</p><div class="codeblock"><pre>-DSQLITE_ENABLE_ICU
+</pre></div>
+
+
+<a name="full_text_index_queries"></a>
+<h1 tags="FTS MATCH" id="full_text_index_queries"><span>3. </span>Full-text Index Queries</h1>
+
+<p>
+ The most useful thing about FTS tables is the queries that may be
+ performed using the built-in full-text index. Full-text queries are
+ performed by specifying a clause of the form
+ "&lt;column&gt; MATCH &lt;full-text query expression&gt;" as part of the WHERE
+ clause of a SELECT statement that reads data from an FTS table.
+ <a href="fts3.html#simple_fts_queries">Simple FTS queries</a> that return all documents that
+ contain a given term are described above. In that discussion the right-hand
+ operand of the MATCH operator was assumed to be a string consisting of a
+ single term. This section describes the more complex query types supported
+ by FTS tables, and how they may be utilized by specifying a more
+ complex query expression as the right-hand operand of a MATCH operator.
+
+</p><p>
+ FTS tables support three basic query types:
+
+</p><ul>
+ <a name="termprefix"></a>
+
+ <li><p><b>Token or token prefix queries</b>.
+ An FTS table may be queried for all documents that contain a specified
+ term (the <a href="fts3.html#simple_fts_queries">simple case</a> described above), or for
+ all documents that contain a term with a specified prefix. As we have
+ seen, the query expression for a specific term is simply the term itself.
+ The query expression used to search for a term prefix is the prefix
+ itself with a '*' character appended to it. For example:
+</p></li></ul>
+
+<div class="codeblock"><pre><i>-- Virtual table declaration</i>
+CREATE VIRTUAL TABLE docs USING fts3(title, body);
+
+<i>-- Query for all documents containing the term "linux":</i>
+SELECT * FROM docs WHERE docs MATCH 'linux';
+
+<i>-- Query for all documents containing a term with the prefix "lin". This will match</i>
+<i>-- all documents that contain "linux", but also those that contain terms "linear",</i>
+<i>--"linker", "linguistic" and so on.</i>
+SELECT * FROM docs WHERE docs MATCH 'lin*';
+</pre></div>
+
+<ul>
+ <li style="list-style:none"><p>
+ Normally, a token or token prefix query is matched against the FTS table
+ column specified as the left-hand side of the MATCH operator. Or, if the
+ special column with the same name as the FTS table itself is specified,
+ against all columns. This may be overridden by specifying a column-name
+ followed by a ":" character before a basic term query. There may be space
+ between the ":" and the term to query for, but not between the column-name
+ and the ":" character. For example:
+</p></li></ul>
+
+<div class="codeblock"><pre><i>-- Query the database for documents for which the term "linux" appears in</i>
+<i>-- the document title, and the term "problems" appears in either the title</i>
+<i>-- or body of the document.</i>
+SELECT * FROM docs WHERE docs MATCH 'title:linux problems';
+
+<i>-- Query the database for documents for which the term "linux" appears in</i>
+<i>-- the document title, and the term "driver" appears in the body of the document</i>
+<i>-- ("driver" may also appear in the title, but this alone will not satisfy the</i>
+<i>-- query criteria).</i>
+SELECT * FROM docs WHERE body MATCH 'title:linux driver';
+</pre></div>
+
+<ul>
+ <li style="list-style:none"><p>
+ If the FTS table is an FTS4 table (not FTS3), a token may also be prefixed
+ with a "&#94;" character. In this case, in order to match the token must
+ appear as the very first token in any column of the matching row. Examples:
+</p></li></ul>
+
+<div class="codeblock"><pre><i>-- All documents for which "linux" is the first token of at least one</i>
+<i>-- column.</i>
+SELECT * FROM docs WHERE docs MATCH '&#94;linux';
+
+<i>-- All documents for which the first token in column "title" begins with "lin".</i>
+SELECT * FROM docs WHERE body MATCH 'title: &#94;lin*';
+</pre></div>
+
+<a name="phrase"></a>
+
+<ul>
+ <li><p><b>Phrase queries</b>.
+ A phrase query is a query that retrieves all documents that contain a
+ nominated set of terms or term prefixes in a specified order with no
+ intervening tokens. Phrase queries are specified by enclosing a space
+ separated sequence of terms or term prefixes in double quotes (").
+ For example:
+</p></li></ul>
+
+<div class="codeblock"><pre><i>-- Query for all documents that contain the phrase "linux applications".</i>
+SELECT * FROM docs WHERE docs MATCH '"linux applications"';
+
+<i>-- Query for all documents that contain a phrase that matches "lin* app*". As well as</i>
+<i>-- "linux applications", this will match common phrases such as "linoleum appliances"</i>
+<i>-- or "link apprentice".</i>
+SELECT * FROM docs WHERE docs MATCH '"lin* app*"';
+</pre></div>
+
+<a name="near"></a>
+
+<ul>
+ <li><p><b>NEAR queries</b>.
+ A NEAR query is a query that returns documents that contain a two or
+ more nominated terms or phrases within a specified proximity of each
+ other (by default with 10 or less intervening terms). A NEAR query is
+ specified by putting the keyword "NEAR" between two phrase, token or
+ token prefix queries. To specify a proximity other than the default,
+ an operator of the form "NEAR/<i>&lt;N&gt;</i>" may be used, where
+ <i>&lt;N&gt;</i> is the maximum number of intervening terms allowed.
+ For example:
+</p></li></ul>
+
+<div class="codeblock"><pre><i>-- Virtual table declaration.</i>
+CREATE VIRTUAL TABLE docs USING fts4();
+
+<i>-- Virtual table data.</i>
+INSERT INTO docs VALUES('SQLite is an ACID compliant embedded relational database management system');
+
+<i>-- Search for a document that contains the terms "sqlite" and "database" with</i>
+<i>-- not more than 10 intervening terms. This matches the only document in</i>
+<i>-- table docs (since there are only six terms between "SQLite" and "database"</i>
+<i>-- in the document)</i>.
+SELECT * FROM docs WHERE docs MATCH 'sqlite NEAR database';
+
+<i>-- Search for a document that contains the terms "sqlite" and "database" with</i>
+<i>-- not more than 6 intervening terms. This also matches the only document in</i>
+<i>-- table docs. Note that the order in which the terms appear in the document</i>
+<i>-- does not have to be the same as the order in which they appear in the query.</i>
+SELECT * FROM docs WHERE docs MATCH 'database NEAR/6 sqlite';
+
+<i>-- Search for a document that contains the terms "sqlite" and "database" with</i>
+<i>-- not more than 5 intervening terms. This query matches no documents.</i>
+SELECT * FROM docs WHERE docs MATCH 'database NEAR/5 sqlite';
+
+<i>-- Search for a document that contains the phrase "ACID compliant" and the term</i>
+<i>-- "database" with not more than 2 terms separating the two. This matches the</i>
+<i>-- document stored in table docs.</i>
+SELECT * FROM docs WHERE docs MATCH 'database NEAR/2 "ACID compliant"';
+
+<i>-- Search for a document that contains the phrase "ACID compliant" and the term</i>
+<i>-- "sqlite" with not more than 2 terms separating the two. This also matches</i>
+<i>-- the only document stored in table docs.</i>
+SELECT * FROM docs WHERE docs MATCH '"ACID compliant" NEAR/2 sqlite';
+</pre></div>
+
+<ul>
+ <li style="list-style: none"><p>
+ More than one NEAR operator may appear in a single query. In this case each
+ pair of terms or phrases separated by a NEAR operator must appear within the
+ specified proximity of each other in the document. Using the same table and
+ data as in the block of examples above:
+</p></li></ul>
+
+<div class="codeblock"><pre>
+<i>-- The following query selects documents that contains an instance of the term </i>
+<i>-- "sqlite" separated by two or fewer terms from an instance of the term "acid",</i>
+<i>-- which is in turn separated by two or fewer terms from an instance of the term</i>
+<i>-- "relational".</i>
+SELECT * FROM docs WHERE docs MATCH 'sqlite NEAR/2 acid NEAR/2 relational';
+
+<i>-- This query matches no documents. There is an instance of the term "sqlite" with</i>
+<i>-- sufficient proximity to an instance of "acid" but it is not sufficiently close</i>
+<i>-- to an instance of the term "relational".</i>
+SELECT * FROM docs WHERE docs MATCH 'acid NEAR/2 sqlite NEAR/2 relational';
+</pre></div>
+
+<p>
+ Phrase and NEAR queries may not span multiple columns within a row.
+
+</p><p>
+ The three basic query types described above may be used to query the full-text
+ index for the set of documents that match the specified criteria. Using the
+ FTS query expression language it is possible to perform various set
+ operations on the results of basic queries. There are currently three
+ supported operations:
+
+</p><ul>
+ <li> The AND operator determines the <b>intersection</b> of two sets of documents.
+
+ </li><li> The OR operator calculates the <b>union</b> of two sets of documents.
+
+ </li><li> The NOT operator (or, if using the standard syntax, a unary "-" operator)
+ may be used to compute the <b>relative complement</b> of one set of
+ documents with respect to another.
+</li></ul>
+
+<p>
+ The FTS modules may be compiled to use one of two slightly different versions
+ of the full-text query syntax, the "standard" query syntax and the "enhanced"
+ query syntax. The basic term, term-prefix, phrase and NEAR queries described
+ above are the same in both versions of the syntax. The way in which set
+ operations are specified is slightly different. The following two sub-sections
+ describe the part of the two query syntaxes that pertains to set operations.
+ Refer to the description of how to <a href="fts3.html#compiling_and_enabling_fts3_and_fts4">compile fts</a> for compilation notes.
+
+</p><a name="_set_operations_using_the_enhanced_query_syntax"></a>
+<h2 tags="enhanced query syntax" id="_set_operations_using_the_enhanced_query_syntax"><span>3.1. </span>
+ Set Operations Using The Enhanced Query Syntax</h2>
+
+<p>
+ The enhanced query syntax supports the AND, OR and NOT binary set operators.
+ Each of the two operands to an operator may be a basic FTS query, or the
+ result of another AND, OR or NOT set operation. Operators must be entered
+ using capital letters. Otherwise, they are interpreted as basic term queries
+ instead of set operators.
+
+</p><p>
+ The AND operator may be implicitly specified. If two basic queries appear
+ with no operator separating them in an FTS query string, the results are
+ the same as if the two basic queries were separated by an AND operator.
+ For example, the query expression "implicit operator" is a more succinct
+ version of "implicit AND operator".
+
+</p><div class="codeblock"><pre><i>-- Virtual table declaration</i>
+CREATE VIRTUAL TABLE docs USING fts3();
+
+<i>-- Virtual table data</i>
+INSERT INTO docs(docid, content) VALUES(1, 'a database is a software system');
+INSERT INTO docs(docid, content) VALUES(2, 'sqlite is a software system');
+INSERT INTO docs(docid, content) VALUES(3, 'sqlite is a database');
+
+<i>-- Return the set of documents that contain the term "sqlite", and the</i>
+<i>-- term "database". This query will return the document with docid 3 only.</i>
+SELECT * FROM docs WHERE docs MATCH 'sqlite AND database';
+
+<i>-- Again, return the set of documents that contain both "sqlite" and</i>
+<i>-- "database". This time, use an implicit AND operator. Again, document</i>
+<i>-- 3 is the only document matched by this query. </i>
+SELECT * FROM docs WHERE docs MATCH 'database sqlite';
+
+<i>-- Query for the set of documents that contains either "sqlite" or "database".</i>
+<i>-- All three documents in the database are matched by this query.</i>
+SELECT * FROM docs WHERE docs MATCH 'sqlite OR database';
+
+<i>-- Query for all documents that contain the term "database", but do not contain</i>
+<i>-- the term "sqlite". Document 1 is the only document that matches this criteria.</i>
+SELECT * FROM docs WHERE docs MATCH 'database NOT sqlite';
+
+<i>-- The following query matches no documents. Because "and" is in lowercase letters,</i>
+<i>-- it is interpreted as a basic term query instead of an operator. Operators must</i>
+<i>-- be specified using capital letters. In practice, this query will match any documents</i>
+<i>-- that contain each of the three terms "database", "and" and "sqlite" at least once.</i>
+<i>-- No documents in the example data above match this criteria.</i>
+SELECT * FROM docs WHERE docs MATCH 'database and sqlite';
+</pre></div>
+
+<p>
+ The examples above all use basic full-text term queries as both operands of
+ the set operations demonstrated. Phrase and NEAR queries may also be used,
+ as may the results of other set operations. When more than one set operation
+ is present in an FTS query, the precedence of operators is as follows:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Operator</th><th>Enhanced Query Syntax Precedence
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>NOT </td><td> Highest precedence (tightest grouping).
+ </td></tr><tr style="text-align:left"><td>AND </td><td>
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>OR </td><td> Lowest precedence (loosest grouping).
+</td></tr></table>
+
+<p>
+ When using the enhanced query syntax, parenthesis may be used to override
+ the default precedence of the various operators. For example:
+
+</p><div class="codeblock"><pre><i>-- Return the docid values associated with all documents that contain the</i>
+<i>-- two terms "sqlite" and "database", and/or contain the term "library".</i>
+SELECT docid FROM docs WHERE docs MATCH 'sqlite AND database OR library';
+
+<i>-- This query is equivalent to the above.</i>
+SELECT docid FROM docs WHERE docs MATCH 'sqlite AND database'
+ UNION
+SELECT docid FROM docs WHERE docs MATCH 'library';
+
+<i>-- Query for the set of documents that contains the term "linux", and at least</i>
+<i>-- one of the phrases "sqlite database" and "sqlite library".</i>
+SELECT docid FROM docs WHERE docs MATCH '("sqlite database" OR "sqlite library") AND linux';
+
+<i>-- This query is equivalent to the above.</i>
+SELECT docid FROM docs WHERE docs MATCH 'linux'
+ INTERSECT
+SELECT docid FROM (
+ SELECT docid FROM docs WHERE docs MATCH '"sqlite library"'
+ UNION
+ SELECT docid FROM docs WHERE docs MATCH '"sqlite database"'
+);
+</pre></div>
+
+
+<h2 id="set_operations_using_the_standard_query_syntax"><span>3.2. </span>Set Operations Using The Standard Query Syntax</h2>
+
+<p>
+ FTS query set operations using the standard query syntax are similar, but
+ not identical, to set operations with the enhanced query syntax. There
+ are four differences, as follows:
+
+</p><ol>
+ <li value="1"><p> Only the implicit version of the AND operator is supported.
+ Specifying the string "AND" as part of a standard query syntax query is
+ interpreted as a term query for the set of documents containing the term
+ "and".
+</p></li></ol>
+
+<ol>
+ <li value="2"><p> Parenthesis are not supported.
+</p></li></ol>
+
+<ol>
+ <li value="3"><p> The NOT operator is not supported. Instead of the NOT
+ operator, the standard query syntax supports a unary "-" operator that
+ may be applied to basic term and term-prefix queries (but not to phrase
+ or NEAR queries). A term or term-prefix that has a unary "-" operator
+ attached to it may not appear as an operand to an OR operator. An FTS
+ query may not consist entirely of terms or term-prefix queries with unary
+ "-" operators attached to them.
+</p></li></ol>
+
+<div class="codeblock"><pre><i>-- Search for the set of documents that contain the term "sqlite" but do</i>
+<i>-- not contain the term "database".</i>
+SELECT * FROM docs WHERE docs MATCH 'sqlite -database';
+</pre></div>
+
+<ol>
+ <li value="4"><p> The relative precedence of the set operations is different.
+ In particular, using the standard query syntax the "OR" operator has a
+ higher precedence than "AND". The precedence of operators when using the
+ standard query syntax is:
+</p></li></ol>
+
+<table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Operator</th><th>Standard Query Syntax Precedence
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>Unary "-" </td><td> Highest precedence (tightest grouping).
+ </td></tr><tr style="text-align:left"><td>OR </td><td>
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>AND </td><td> Lowest precedence (loosest grouping).
+</td></tr></table>
+
+<ol><li style="list-style:none">
+ The following example illustrates precedence of operators using the standard
+ query syntax:
+</li></ol>
+
+<div class="codeblock"><pre><i>-- Search for documents that contain at least one of the terms "database"</i>
+<i>-- and "sqlite", and also contain the term "library". Because of the differences</i>
+<i>-- in operator precedences, this query would have a different interpretation using</i>
+<i>-- the enhanced query syntax.</i>
+SELECT * FROM docs WHERE docs MATCH 'sqlite OR database library';
+</pre></div>
+
+<a name="snippet"></a>
+
+<h1 id="auxiliary_functions_snippet_offsets_and_matchinfo"><span>4. </span>Auxiliary Functions - Snippet, Offsets and Matchinfo</h1>
+
+<p>
+ The FTS3 and FTS4 modules provide three special SQL scalar functions that may be useful
+ to the developers of full-text query systems: "snippet", "offsets" and
+ "matchinfo". The purpose of the "snippet" and "offsets" functions is to allow
+ the user to identify the location of queried terms in the returned documents.
+ The "matchinfo" function provides the user with metrics that may be useful
+ for filtering or sorting query results according to relevance.
+
+</p><p>
+ The first argument to all three special SQL scalar functions
+ must be the <a href="fts3.html#hiddencol">FTS hidden column</a> of the FTS table that the function is
+ applied to. The <a href="fts3.html#hiddencol">FTS hidden column</a> is an automatically-generated column found on
+ all FTS tables that has the same name as the FTS table itself.
+ For example, given an FTS table named "mail":
+
+</p><div class="codeblock"><pre>SELECT offsets(mail) FROM mail WHERE mail MATCH &lt;full-text query expression&gt;;
+SELECT snippet(mail) FROM mail WHERE mail MATCH &lt;full-text query expression&gt;;
+SELECT matchinfo(mail) FROM mail WHERE mail MATCH &lt;full-text query expression&gt;;
+</pre></div>
+
+<p>
+ The three auxiliary functions are only useful within a SELECT statement that
+ uses the FTS table's full-text index. If used within a SELECT that uses
+ the "query by rowid" or "linear scan" strategies, then the snippet and
+ offsets both return an empty string, and the matchinfo function returns
+ a blob value zero bytes in size.
+
+</p><p id="matchable">
+ All three auxiliary functions extract a set of "matchable phrases" from
+ the FTS query expression to work with. The set of matchable phrases for
+ a given query consists of all phrases (including unquoted tokens and
+ token prefixes) in the expression except those that are prefixed with
+ a unary "-" operator (standard syntax) or are part of a sub-expression
+ that is used as the right-hand operand of a NOT operator.
+
+</p><p>
+ With the following provisos, each series of tokens in the FTS table that
+ matches one of the matchable phrases in the query expression is known as a
+ "phrase match":
+
+</p><ol>
+ <li> If a matchable phrase is part of a series of phrases connected by
+ NEAR operators in the FTS query expression, then each phrase match
+ must be sufficiently close to other phrase matches of the relevant
+ types to satisfy the NEAR condition.
+
+ </li><li> If the matchable phrase in the FTS query is restricted to matching
+ data in a specified FTS table column, then only phrase matches that
+ occur within that column are considered.
+</li></ol>
+
+<a name="offsets"></a>
+
+<h2 id="the_offsets_function"><span>4.1. </span>The Offsets Function</h2>
+
+<p>
+ For a SELECT query that uses the full-text index, the offsets() function
+ returns a text value containing a series of space-separated integers. For
+ each term in each <a href="#matchable">phrase match</a> of the current row,
+ there are four integers in the returned list. Each set of four integers is
+ interpreted as follows:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Integer </th><th>Interpretation
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>0
+ </td><td>The column number that the term instance occurs in (0 for the
+ leftmost column of the FTS table, 1 for the next leftmost, etc.).
+ </td></tr><tr style="text-align:left"><td>1
+ </td><td>The term number of the matching term within the full-text query
+ expression. Terms within a query expression are numbered starting
+ from 0 in the order that they occur.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>2
+ </td><td>The byte offset of the matching term within the column.
+ </td></tr><tr style="text-align:left"><td>3
+ </td><td>The size of the matching term in bytes.
+</td></tr></table>
+
+<p>
+ The following block contains examples that use the offsets function.
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE mail USING fts3(subject, body);
+INSERT INTO mail VALUES('hello world', 'This message is a hello world message.');
+INSERT INTO mail VALUES('urgent: serious', 'This mail is seen as a more serious mail');
+
+<i>-- The following query returns a single row (as it matches only the first</i>
+<i>-- entry in table "mail". The text returned by the offsets function is</i>
+<i>-- "0 0 6 5 1 0 24 5".</i>
+<i>--</i>
+<i>-- The first set of four integers in the result indicate that column 0</i>
+<i>-- contains an instance of term 0 ("world") at byte offset 6. The term instance</i>
+<i>-- is 5 bytes in size. The second set of four integers shows that column 1</i>
+<i>-- of the matched row contains an instance of term 0 ("world") at byte offset</i>
+<i>-- 24. Again, the term instance is 5 bytes in size.</i>
+SELECT offsets(mail) FROM mail WHERE mail MATCH 'world';
+
+<i>-- The following query returns also matches only the first row in table "mail".</i>
+<i>-- In this case the returned text is "1 0 5 7 1 0 30 7".</i>
+SELECT offsets(mail) FROM mail WHERE mail MATCH 'message';
+
+<i>-- The following query matches the second row in table "mail". It returns the</i>
+<i>-- text "1 0 28 7 1 1 36 4". Only those occurrences of terms "serious" and "mail"</i>
+<i>-- that are part of an instance of the phrase "serious mail" are identified; the</i>
+<i>-- other occurrences of "serious" and "mail" are ignored.</i>
+SELECT offsets(mail) FROM mail WHERE mail MATCH '"serious mail"';
+</pre></div>
+
+<a name="snippet"></a>
+
+<h2 id="the_snippet_function"><span>4.2. </span>The Snippet Function</h2>
+
+<p>
+ The snippet function is used to create formatted fragments of document text
+ for display as part of a full-text query results report. The snippet function
+ may be passed between one and six arguments, as follows:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Argument </th><th>Default Value </th><th>Description
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>0 </td><td>N/A
+ </td><td> The first argument to the snippet function must always be the <a href="fts3.html#hiddencol">FTS hidden column</a>
+ of the FTS table being queried and from which the snippet is to be taken. The
+ <a href="fts3.html#hiddencol">FTS hidden column</a> is an automatically generated column with the same name as the
+ FTS table itself.
+ </td></tr><tr style="text-align:left"><td>1 </td><td>"&lt;b&gt;"
+ </td><td> The "start match" text.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>2 </td><td>"&lt;/b&gt;"
+ </td><td> The "end match" text.
+ </td></tr><tr style="text-align:left"><td>3 </td><td>"&lt;b&gt;...&lt;/b&gt;"
+ </td><td> The "ellipses" text.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>4 </td><td>-1
+ </td><td> The FTS table column number to extract the returned fragments of
+ text from. Columns are numbered from left to right starting with
+ zero. A negative value indicates that the text may be extracted
+ from any column.
+ </td></tr><tr style="text-align:left"><td>5 </td><td>-15
+ </td><td> The absolute value of this integer argument is used as the
+ (approximate) number of tokens to include in the returned text
+ value. The maximum allowable absolute value is 64. The value of
+ this argument is referred to as <i>N</i> in the discussion below.
+</td></tr></table>
+
+<p>
+ The snippet function first attempts to find a fragment of text consisting
+ of <i>|N|</i> tokens within the current row that contains at least one phrase
+ match for each matchable phrase matched somewhere in the current row,
+ where <i>|N|</i> is the absolute value of the sixth argument passed to the
+ snippet function. If the text stored in a single column contains less than
+ <i>|N|</i> tokens, then the entire column value is considered. Text fragments
+ may not span multiple columns.
+
+</p><p>
+ If such a text fragment can be found, it is returned with the following
+ modifications:
+
+</p><ul>
+ <li> If the text fragment does not begin at the start of a column value,
+ the "ellipses" text is prepended to it.
+ </li><li> If the text fragment does not finish at the end of a column value,
+ the "ellipses" text is appended to it.
+ </li><li> For each token in the text fragment that is part of a phrase match,
+ the "start match" text is inserted into the fragment before the token,
+ and the "end match" text is inserted immediately after it.
+</li></ul>
+
+<p>
+ If more than one such fragment can be found, then fragments that contain
+ a larger number of "extra" phrase matches are favored. The start of
+ the selected text fragment may be moved a few tokens forward or backward
+ to attempt to concentrate the phrase matches toward the center of the
+ fragment.
+
+</p><p>
+ Assuming <i>N</i> is a positive value, if no fragments can be found that
+ contain a phrase match corresponding to each matchable phrase, the snippet
+ function attempts to find two fragments of approximately <i>N</i>/2 tokens
+ that between them contain at least one phrase match for each matchable phrase
+ matched by the current row. If this fails, attempts are made to find three
+ fragments of <i>N</i>/3 tokens each and finally four <i>N</i>/4 token
+ fragments. If a set of four fragments cannot be found that encompasses the
+ required phrase matches, the four fragments of <i>N</i>/4 tokens that provide
+ the best coverage are selected.
+
+</p><p>
+ If <i>N</i> is a negative value, and no single fragment can be found
+ containing the required phrase matches, the snippet function searches
+ for two fragments of <i>|N|</i> tokens each, then three, then four. In
+ other words, if the specified value of <i>N</i> is negative, the sizes
+ of the fragments is not decreased if more than one fragment is required
+ to provide the desired phrase match coverage.
+
+</p><p>
+ After the <i>M</i> fragments have been located, where <i>M</i> is between
+ two and four as described in the paragraphs above, they are joined together
+ in sorted order with the "ellipses" text separating them. The three
+ modifications enumerated earlier are performed on the text before it is
+ returned.
+
+</p><div class="codeblock"><pre><b>Note: In this block of examples, newlines and whitespace characters have
+been inserted into the document inserted into the FTS table, and the expected
+results described in SQL comments. This is done to enhance readability only,
+they would not be present in actual SQLite commands or output.</b>
+
+<i>-- Create and populate an FTS table.</i>
+CREATE VIRTUAL TABLE text USING fts4();
+INSERT INTO text VALUES('
+ During 30 Nov-1 Dec, 2-3oC drops. Cool in the upper portion, minimum temperature 14-16oC
+ and cool elsewhere, minimum temperature 17-20oC. Cold to very cold on mountaintops,
+ minimum temperature 6-12oC. Northeasterly winds 15-30 km/hr. After that, temperature
+ increases. Northeasterly winds 15-30 km/hr.
+');
+
+<i>-- The following query returns the text value:</i>
+<i>--</i>
+<i>-- "&lt;b&gt;...&lt;/b&gt;cool elsewhere, minimum temperature 17-20oC. &lt;b&gt;Cold&lt;/b&gt; to very </i>
+<i>-- &lt;b&gt;cold&lt;/b&gt; on mountaintops, minimum temperature 6&lt;b&gt;...&lt;/b&gt;".</i>
+<i>--</i>
+SELECT snippet(text) FROM text WHERE text MATCH 'cold';
+
+<i>-- The following query returns the text value:</i>
+<i>--</i>
+<i>-- "...the upper portion, &#91;minimum&#93; &#91;temperature&#93; 14-16oC and cool elsewhere,</i>
+<i>-- &#91;minimum&#93; &#91;temperature&#93; 17-20oC. Cold..."</i>
+<i>--</i>
+SELECT snippet(text, '&#91;', '&#93;', '...') FROM text WHERE text MATCH '"min* tem*"'
+</pre></div>
+
+<a name="matchinfo"></a>
+<h2 id="matchinfo" tags="matchinfo"><span>4.3. </span>The Matchinfo Function</h2>
+
+<p>
+ The matchinfo function returns a blob value. If it is used within a query
+ that does not use the full-text index (a "query by rowid" or "linear scan"),
+ then the blob is zero bytes in size. Otherwise, the blob consists of zero
+ or more 32-bit unsigned integers in machine byte-order. The exact number
+ of integers in the returned array depends on both the query and the value
+ of the second argument (if any) passed to the matchinfo function.
+
+</p><p>
+ The matchinfo function is called with either one or two arguments. As for
+ all auxiliary functions, the first argument must be the special
+ <a href="fts3.html#hiddencol">FTS hidden column</a>. The second argument, if it is specified, must be a text value
+ comprised only of the characters 'p', 'c', 'n', 'a', 'l', 's', 'x', 'y' and 'b'.
+ If no second argument is explicitly supplied, it defaults to "pcx". The
+ second argument is referred to as the "format string" below.
+
+</p><p>
+ Characters in the matchinfo format string are processed from left to right.
+ Each character in the format string causes one or more 32-bit unsigned
+ integer values to be added to the returned array. The "values" column in
+ the following table contains the number of integer values appended to the
+ output buffer for each supported format string character. In the formula
+ given, <i>cols</i> is the number of columns in the FTS table, and
+ <i>phrases</i> is the number of <a href="#matchable">matchable phrases</a> in
+ the query.
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Character</th><th>Values</th><th>Description
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>p </td><td>1 </td><td>The number of matchable phrases in the query.
+ </td></tr><tr style="text-align:left"><td>c </td><td>1 </td><td>The number of user defined columns in the FTS
+ table (i.e. not including the docid or the <a href="fts3.html#hiddencol">FTS hidden column</a>).
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>x </td><td style="white-space:nowrap">3 * <i>cols</i> * <i>phrases</i>
+ </td><td><a name="matchinfo-x"></a>
+
+ For each distinct combination of a phrase and table column, the
+ following three values:
+ <ul>
+ <li> In the current row, the number of times the phrase appears in
+ the column.
+ </li><li> The total number of times the phrase appears in the column in
+ all rows in the FTS table.
+ </li><li> The total number of rows in the FTS table for which the
+ column contains at least one instance of the phrase.
+ </li></ul>
+ The first set of three values corresponds to the left-most column
+ of the table (column 0) and the left-most matchable phrase in the
+ query (phrase 0). If the table has more than one column, the second
+ set of three values in the output array correspond to phrase 0 and
+ column 1. Followed by phrase 0, column 2 and so on for all columns of
+ the table. And so on for phrase 1, column 0, then phrase 1, column 1
+ etc. In other words, the data for occurrences of phrase <i>p</i> in
+ column <i>c</i> may be found using the following formula:
+<pre>
+ hits_this_row = array&#91;3 * (c + p*cols) + 0&#93;
+ hits_all_rows = array&#91;3 * (c + p*cols) + 1&#93;
+ docs_with_hits = array&#91;3 * (c + p*cols) + 2&#93;
+</pre>
+ </td></tr><tr style="text-align:left"><td>y</td><td style="white-space:nowrap"><i>cols</i> * <i>phrases</i>
+ </td><td><a name="matchinfo-y"></a>
+
+ For each distinct combination of a phrase and table column, the
+ number of usable phrase matches that appear in the column. This is
+ usually identical to the first value in each set of three returned by the
+ <a href="fts3.html#matchinfo-x">matchinfo 'x' flag</a>. However, the number of hits reported by the
+ 'y' flag is zero for any phrase that is part of a sub-expression
+ that does not match the current row. This makes a difference for
+ expressions that contain AND operators that are descendants of OR
+ operators. For example, consider the expression:
+<pre>
+ a OR (b AND c)
+</pre>
+ and the document:
+<pre>
+ "a c d"
+</pre>
+ The <a href="fts3.html#matchinfo-x">matchinfo 'x' flag</a> would report a single hit for the phrases "a" and "c".
+ However, the 'y' directive reports the number of hits for "c" as zero, as
+ it is part of a sub-expression that does not match the document - (b AND c).
+ For queries that do not contain AND operators descended from OR
+ operators, the result values returned by 'y' are always the same as
+ those returned by 'x'.
+
+<p style="margin-left:0;margin-right:0">
+ The first value in the array of integer values corresponds to the
+ leftmost column of the table (column 0) and the first phrase in the query
+ (phrase 0). The values corresponding to other column/phrase combinations
+ may be located using the following formula:
+
+</p><pre>
+ hits_for_phrase_p_column_c = array&#91;c + p*cols&#93;
+</pre>
+ For queries that use OR expressions, or those that use LIMIT or return
+ many rows, the 'y' matchinfo option may be faster than 'x'.
+
+</td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>b</td><td style="white-space:nowrap"><i>((cols+31)/32)</i> * <i>phrases</i>
+</td><td><a name="matchinfo-b"></a>
+
+
+ The matchinfo 'b' flag provides similar information to the
+ <a href="fts3.html#matchinfo-y">matchinfo 'y' flag</a>, but in a more
+ compact form. Instead of the precise number of hits, 'b' provides a single
+ boolean flag for each phrase/column combination. If the phrase is present in
+ the column at least once (i.e. if the corresponding integer output of 'y' would
+ be non-zero), the corresponding flag is set. Otherwise cleared.
+
+<p style="margin-left:0;margin-right:0">
+ If the table has 32 or fewer columns, a single unsigned integer is output for
+ each phrase in the query. The least significant bit of the integer is set if the
+ phrase appears at least once in column 0. The second least significant bit is
+ set if the phrase appears once or more in column 1. And so on.
+
+</p><p style="margin-left:0;margin-right:0">
+ If the table has more than 32 columns, an extra integer is added to the output
+ of each phrase for each extra 32 columns or part thereof. Integers
+ corresponding to the same phrase are clumped together. For example, if a table
+ with 45 columns is queried for two phrases, 4 integers are output. The first
+ corresponds to phrase 0 and columns 0-31 of the table. The second integer
+ contains data for phrase 0 and columns 32-44, and so on.
+
+</p><p style="margin-left:0;margin-right:0">
+ For example, if nCol is the number of columns in the table, to determine if
+ phrase p is present in column c:
+
+</p><pre>
+ p_is_in_c = array&#91;p * ((nCol+31)/32)&#93; & (1 &lt;&lt; (c % 32))
+</pre>
+
+ </td></tr><tr style="text-align:left"><td>n </td><td>1 </td><td>The number of rows in the FTS4 table. This value is
+ only available when querying FTS4 tables, not FTS3.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>a </td><td><i>cols</i> </td><td>For each column, the average number of
+ tokens in the text values stored in the column (considering all rows in
+ the FTS4 table). This value is only available when querying FTS4 tables,
+ not FTS3.
+ </td></tr><tr style="text-align:left"><td>l </td><td><i>cols</i> </td><td>
+ For each column, the length of the value stored in the current row of the
+ FTS4 table, in tokens. This value is only available when querying
+ FTS4 tables, not FTS3. And only if the "matchinfo=fts3" directive was not
+ specified as part of the "CREATE VIRTUAL TABLE" statement used to create
+ the FTS4 table.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>s </td><td><i>cols</i> </td><td>For each column, the length of the longest
+ subsequence of phrase matches that the column value has in common
+ with the query text. For example, if a table column contains the text
+ 'a b c d e' and the query is 'a c "d e"', then the length of the longest
+ common subsequence is 2 (phrase "c" followed by phrase "d e").
+
+
+</td></tr></table>
+
+<p>
+ For example:
+
+</p><div class="codeblock"><pre><i>-- Create and populate an FTS4 table with two columns:</i>
+CREATE VIRTUAL TABLE t1 USING fts4(a, b);
+INSERT INTO t1 VALUES('transaction default models default', 'Non transaction reads');
+INSERT INTO t1 VALUES('the default transaction', 'these semantics present');
+INSERT INTO t1 VALUES('single request', 'default data');
+
+<i>-- In the following query, no format string is specified and so it defaults</i>
+<i>-- to "pcx". It therefore returns a single row consisting of a single blob</i>
+<i>-- value 80 bytes in size (20 32-bit integers - 1 for "p", 1 for "c" and</i>
+<i>-- 3*2*3 for "x"). If each block of 4 bytes in</i> the blob is interpreted
+<i>-- as an unsigned integer in machine byte-order, the values will be:</i>
+<i>--</i>
+<i>-- 3 2 1 3 2 0 1 1 1 2 2 0 1 1 0 0 0 1 1 1</i>
+<i>--</i>
+<i>-- The row returned corresponds to the second entry inserted into table t1.</i>
+<i>-- The first two integers in the blob show that the query contained three</i>
+<i>-- phrases and the table being queried has two columns. The next block of</i>
+<i>-- three integers describes column 0 (in this case column "a") and phrase</i>
+<i>-- 0 (in this case "default"). The current row contains 1 hit for "default"</i>
+<i>-- in column 0, of a total of 3 hits for "default" that occur in column</i>
+<i>-- 0 of any table row. The 3 hits are spread across 2 different rows.</i>
+<i>--</i>
+<i>-- The next set of three integers (0 1 1) pertain to the hits for "default"</i>
+<i>-- in column 1 of the table (0 in this row, 1 in all rows, spread across </i>
+<i>-- 1 rows).</i>
+<i>--</i>
+SELECT matchinfo(t1) FROM t1 WHERE t1 MATCH 'default transaction "these semantics"';
+
+<i>-- The format string for this query is "ns". The output array will therefore</i>
+<i>-- contain 3 integer values - 1 for "n" and 2 for "s". The query returns</i>
+<i>-- two rows (the first two rows in the table match). The values returned are:</i>
+<i>--</i>
+<i>-- 3 1 1</i>
+<i>-- 3 2 0</i>
+<i>--</i>
+<i>-- The first value in the matchinfo array returned for both rows is 3 (the </i>
+<i>-- number of rows in the table). The following two values are the lengths </i>
+<i>-- of the longest common subsequence of phrase matches in each column.</i>
+SELECT matchinfo(t1, 'ns') FROM t1 WHERE t1 MATCH 'default transaction';
+</pre></div>
+
+<p>
+ The matchinfo function is much faster than either the snippet or offsets
+ functions. This is because the implementation of both snippet and offsets
+ is required to retrieve the documents being analyzed from disk, whereas
+ all data required by matchinfo is available as part of the same portions
+ of the full-text index that are required to implement the full-text query
+ itself. This means that of the following two queries, the first may be
+ an order of magnitude faster than the second:
+
+</p><div class="codeblock"><pre>SELECT docid, matchinfo(tbl) FROM tbl WHERE tbl MATCH &lt;query expression&gt;;
+SELECT docid, offsets(tbl) FROM tbl WHERE tbl MATCH &lt;query expression&gt;;
+</pre></div>
+
+<p>
+ The matchinfo function provides all the information required to calculate
+ probabilistic "bag-of-words" relevancy scores such as
+ <a href="http://en.wikipedia.org/wiki/Okapi_BM25">Okapi BM25/BM25F</a> that may
+ be used to order results in a full-text search application. Appendix A of this
+ document, "<a href="fts3.html#appendix_a">search application tips</a>", contains an example of using the
+ matchinfo() function efficiently.
+
+</p><a name="fts4aux"></a>
+<h1 id="fts4aux" tags="fts4aux"><span>5. </span>Fts4aux - Direct Access to the Full-Text Index</h1>
+
+<p>
+ As of <a href="releaselog/3_7_6.html">version 3.7.6</a> (2011-04-12),
+ SQLite includes a new virtual table module called
+ "fts4aux", which can be used to inspect the full-text index of an existing
+ FTS table directly. Despite its name, fts4aux works just as well with FTS3
+ tables as it does with FTS4 tables. Fts4aux tables are read-only. The only
+ way to modify the contents of an fts4aux table is by modifying the
+ contents of the associated FTS table. The fts4aux module is automatically
+ included in all <a href="fts3.html#compiling_and_enabling_fts3_and_fts4">builds that include FTS</a>.
+
+</p><p>
+ An fts4aux virtual table is constructed with one or two arguments. When
+ used with a single argument, that argument is the unqualified name of the
+ FTS table that it will be used to access. To access a table in a different
+ database (for example, to create a TEMP fts4aux table that will access an
+ FTS3 table in the MAIN database) use the two-argument form and give the
+ name of the target database (ex: "main") in the first argument and the name
+ of the FTS3/4 table as the second argument. (The two-argument form of
+ fts4aux was added for SQLite <a href="releaselog/3_7_17.html">version 3.7.17</a> (2013-05-20)
+ and will throw an error in prior releases.)
+ For example:
+
+</p><div class="codeblock"><pre><i>-- Create an FTS4 table</i>
+CREATE VIRTUAL TABLE ft USING fts4(x, y);
+
+<i>-- Create an fts4aux table to access the full-text index for table "ft"</i>
+CREATE VIRTUAL TABLE ft_terms USING fts4aux(ft);
+
+<i>-- Create a TEMP fts4aux table accessing the "ft" table in "main"</i>
+CREATE VIRTUAL TABLE temp.ft_terms_2 USING fts4aux(main,ft);
+</pre></div>
+
+<p>
+ For each term present in the FTS table, there are between 2 and N+1 rows
+ in the fts4aux table, where N is the number of user-defined columns in
+ the associated FTS table. An fts4aux table always has the same four columns,
+ as follows, from left to right:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Column Name</th><th>Column Contents
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>term</td><td>
+ Contains the text of the term for this row.
+ </td></tr><tr style="text-align:left"><td>col</td><td>
+ This column may contain either the text value '*' (i.e. a single
+ character, U+002a) or an integer between 0 and N-1, where N is
+ again the number of user-defined columns in the corresponding FTS table.
+
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>documents</td><td>
+ This column always contains an integer value greater than zero.
+ <br><br>
+ If the "col" column contains the value '*', then this column
+ contains the number of rows of the FTS table that contain at least one
+ instance of the term (in any column). If col contains an integer
+ value, then this column contains the number of rows of the FTS table that
+ contain at least one instance of the term in the column identified by
+ the col value. As usual, the columns of the FTS table are numbered
+ from left to right, starting with zero.
+
+ </td></tr><tr style="text-align:left"><td>occurrences</td><td>
+ This column also always contains an integer value greater than zero.
+ <br><br>
+ If the "col" column contains the value '*', then this column
+ contains the total number of instances of the term in all rows of the
+ FTS table (in any column). Otherwise, if col contains an integer
+ value, then this column contains the total number of instances of the
+ term that appear in the FTS table column identified by the col
+ value.
+
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>languageid <i>(hidden)</i></td><td>
+ <a name="f4alid"></a>
+
+ This column determines which <a href="fts3.html#*fts4languageid">languageid</a> is used to
+ extract vocabulary from the FTS3/4 table.
+ <br><br>
+ The default value for languageid is 0. If an alternative language
+ is specified in WHERE clause constraints, then that alternative is
+ used instead of 0. There can only be a single languageid per query.
+ In other words, the WHERE clause cannot contain a range constraint
+ or IN operator on the languageid.
+</td></tr></table>
+
+<p>
+ For example, using the tables created above:
+
+</p><div class="codeblock"><pre>INSERT INTO ft(x, y) VALUES('Apple banana', 'Cherry');
+INSERT INTO ft(x, y) VALUES('Banana Date Date', 'cherry');
+INSERT INTO ft(x, y) VALUES('Cherry Elderberry', 'Elderberry');
+
+<i>-- The following query returns this data:</i>
+<i>--</i>
+<i>-- apple | * | 1 | 1</i>
+<i>-- apple | 0 | 1 | 1</i>
+<i>-- banana | * | 2 | 2</i>
+<i>-- banana | 0 | 2 | 2</i>
+<i>-- cherry | * | 3 | 3</i>
+<i>-- cherry | 0 | 1 | 1</i>
+<i>-- cherry | 1 | 2 | 2</i>
+<i>-- date | * | 1 | 2</i>
+<i>-- date | 0 | 1 | 2</i>
+<i>-- elderberry | * | 1 | 2</i>
+<i>-- elderberry | 0 | 1 | 1</i>
+<i>-- elderberry | 1 | 1 | 1</i>
+<i>--</i>
+SELECT term, col, documents, occurrences FROM ft_terms;
+</pre></div>
+
+<p>
+ In the example, the values in the "term" column are all lower case,
+ even though they were inserted into table "ft" in mixed case. This is because
+ an fts4aux table contains the terms as extracted from the document text
+ by the <a href="fts3.html#tokenizer">tokenizer</a>. In this case, since table "ft" uses the
+ <a href="fts3.html#tokenizer">simple tokenizer</a>, this means all terms have been folded to
+ lower case. Also, there is (for example) no row with column "term"
+ set to "apple" and column "col" set to 1. Since there are no instances
+ of the term "apple" in column 1, no row is present in the fts4aux table.
+
+</p><p>
+ During a transaction, some of the data written to an FTS table may be
+ cached in memory and written to the database only when the transaction is
+ committed. However the implementation of the fts4aux module is only able
+ to read data from the database. In practice this means that if an fts4aux
+ table is queried from within a transaction in which the associated
+ FTS table has been modified, the results of the query are likely to reflect
+ only a (possibly empty) subset of the changes made.
+
+</p><a name="fts4_options"></a>
+<h1 id="fts4_options" tags="FTS4 options"><span>6. </span>FTS4 Options</h1>
+
+<p>
+ If the "CREATE VIRTUAL TABLE" statement specifies module FTS4 (not FTS3),
+ then special directives - FTS4 options - similar to the "tokenize=*" option
+ may also appear in place of column names. An FTS4 option consists of the
+ option name, followed by an "=" character, followed by the option value.
+ The option value may optionally be enclosed in single or double quotes, with
+ embedded quote characters escaped in the same way as for SQL literals. There
+ may not be whitespace on either side of the "=" character. For example,
+ to create an FTS4 table with the value of option "matchinfo" set to "fts3":
+
+</p><div class="codeblock"><pre><i>-- Create a reduced-footprint FTS4 table.</i>
+CREATE VIRTUAL TABLE papers USING fts4(author, document, matchinfo=fts3);
+</pre></div>
+
+<p>
+ FTS4 currently supports the following options:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Option</th><th>Interpretation
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>compress</td><td>
+ The compress option is used to specify the compress function. It is an error to
+ specify a compress function without also specifying an uncompress
+ function. <a href="fts3.html#the_compress_and_uncompress_options">See below</a> for details.
+
+ </td></tr><tr style="text-align:left"><td>content</td><td>
+ The content allows the text being indexed to be
+ stored in a separate table distinct from the FTS4 table,
+ or even outside of SQLite.
+
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>languageid</td><td>
+ The languageid option causes the FTS4 table to have an additional hidden
+ integer column that identifies the language of the text contained in
+ each row. The use of the languageid option allows the same FTS4 table
+ to hold text in multiple languages or scripts, each with different tokenizer
+ rules, and to query each language independently of the others.
+
+ </td></tr><tr style="text-align:left"><td>matchinfo</td><td>
+ When set to the value "fts3", the matchinfo option reduces the amount of
+ information stored by FTS4 with the consequence that the "l" option of
+ <a href="fts3.html#matchinfo">matchinfo()</a> is no longer available.
+
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>notindexed</td><td>
+ This option is used to specify the name of a column for which data is
+ not indexed. Values stored in columns that are not indexed are not
+ matched by MATCH queries. Nor are they recognized by auxiliary functions.
+ A single CREATE VIRTUAL TABLE statement may have any number of notindexed
+ options.
+
+ </td></tr><tr style="text-align:left"><td>order</td><td>
+ <a name="fts4order"></a>
+
+ The "order" option may be set to either "DESC" or "ASC" (in upper or
+ lower case). If it is set to "DESC", then FTS4 stores its data in such
+ a way as to optimize returning results in descending order by docid.
+ If it is set to "ASC" (the default), then the data structures are
+ optimized for returning results in ascending order by docid. In other
+ words, if many of the queries run against the FTS4 table use "ORDER BY
+ docid DESC", then it may improve performance to add the "order=desc"
+ option to the CREATE VIRTUAL TABLE statement.
+
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>prefix</td><td>
+ This option may be set to a comma-separated list of positive non-zero
+ integers. For each integer N in the list, a separate index is created
+ in the database file to optimize <a href="fts3.html#termprefix">prefix queries</a> where
+ the query term is N bytes in length, not including the '*' character,
+ when encoded using UTF-8. <a href="fts3.html#the_prefix_option">See below</a> for details.
+
+ </td></tr><tr style="text-align:left"><td>uncompress</td><td>
+ This option is used to specify the uncompress function. It is an error to
+ specify an uncompress function without also specifying a compress
+ function. <a href="fts3.html#the_compress_and_uncompress_options">See below</a> for details.
+</td></tr></table>
+
+<p>
+ When using FTS4, specifying a column name that contains an "=" character
+ and is not either a "tokenize=*" specification or a recognized FTS4 option
+ is an error. With FTS3, the first token in the unrecognized directive is
+ interpreted as a column name. Similarly, specifying multiple "tokenize=*"
+ directives in a single table declaration is an error when using FTS4, whereas
+ the second and subsequent "tokenize=*" directives are interpreted as column
+ names by FTS3. For example:
+
+</p><div class="codeblock"><pre><i>-- An error. FTS4 does not recognize the directive "xyz=abc".</i>
+CREATE VIRTUAL TABLE papers USING fts4(author, document, xyz=abc);
+
+<i>-- Create an FTS3 table with three columns - "author", "document"</i>
+<i>-- and "xyz".</i>
+CREATE VIRTUAL TABLE papers USING fts3(author, document, xyz=abc);
+
+<i>-- An error. FTS4 does not allow multiple tokenize=* directives</i>
+CREATE VIRTUAL TABLE papers USING fts4(tokenize=porter, tokenize=simple);
+
+<i>-- Create an FTS3 table with a single column named "tokenize". The</i>
+<i>-- table uses the "porter" tokenizer.</i>
+CREATE VIRTUAL TABLE papers USING fts3(tokenize=porter, tokenize=simple);
+
+<i>-- An error. Cannot create a table with two columns named "tokenize".</i>
+CREATE VIRTUAL TABLE papers USING fts3(tokenize=porter, tokenize=simple, tokenize=icu);
+</pre></div>
+
+<a name="*fts4compression"></a>
+
+<a name="the_compress_and_uncompress_options"></a>
+<h2 tags="fts4 compress option" id="the_compress_and_uncompress_options"><span>6.1. </span>The compress= and uncompress= options</h2>
+
+<p>
+ The compress and uncompress options allow FTS4 content to be stored in
+ the database in a compressed form. Both options should be set to the name
+ of an SQL scalar function registered using <a href="c3ref/create_function.html">sqlite3_create_function()</a>
+ that accepts a single argument.
+
+</p><p>
+ The compress function should return a compressed version of the value
+ passed to it as an argument. Each time data is written to the FTS4 table,
+ each column value is passed to the compress function and the result value
+ stored in the database. The compress function may return any type of SQLite
+ value (blob, text, real, integer or null).
+
+</p><p>
+ The uncompress function should uncompress data previously compressed by
+ the compress function. In other words, for all SQLite values X, it should
+ be true that uncompress(compress(X)) equals X. When data that has been
+ compressed by the compress function is read from the database by FTS4, it
+ is passed to the uncompress function before it is used.
+
+</p><p>
+ If the specified compress or uncompress functions do not exist, the table
+ may still be created. An error is not returned until the FTS4 table is
+ read (if the uncompress function does not exist) or written (if it is the
+ compress function that does not exist).
+
+</p><div class="codeblock"><pre><i>-- Create an FTS4 table that stores data in compressed form. This</i>
+<i>-- assumes that the scalar functions zip() and unzip() have been (or</i>
+<i>-- will be) added to the database handle.</i>
+CREATE VIRTUAL TABLE papers USING fts4(author, document, compress=zip, uncompress=unzip);
+</pre></div>
+
+<p>
+ When implementing the compress and uncompress functions it is important to
+ pay attention to data types. Specifically, when a user reads a value from
+ a compressed FTS table, the value returned by FTS is exactly the same
+ as the value returned by the uncompress function, including the data type.
+ If that data type is not the same as the data type of the original value as
+ passed to the compress function (for example if the uncompress function is
+ returning BLOB when compress was originally passed TEXT), then the users
+ query may not function as expected.
+
+<a name="*fts4content"></a>
+
+</p><a name="the_content_option_"></a>
+<h2 tags="fts4 content option" id="the_content_option_"><span>6.2. </span>The content= option </h2>
+
+<p>
+ The content option allows FTS4 to forego storing the text being indexed.
+ The content option can be used in two ways:
+
+</p><ul>
+<li><p> The indexed documents are not stored within the SQLite database
+ at all (a "contentless" FTS4 table), or
+
+</p></li><li><p> The indexed documents are stored in a database table created and
+ managed by the user (an "external content" FTS4 table).
+</p></li></ul>
+
+<p>
+ Because the indexed documents themselves are usually much larger than
+ the full-text index, the content option can be used to achieve
+ significant space savings.
+
+</p><a name="_contentless_fts4_tables_"></a>
+<h3 tags="contentless fts4 tables" id="_contentless_fts4_tables_"><span>6.2.1. </span> Contentless FTS4 Tables </h3>
+
+<p>
+ In order to create an FTS4 table that does not store a copy of the indexed
+ documents at all, the content option should be set to an empty string.
+ For example, the following SQL creates such an FTS4 table with three
+ columns - "a", "b", and "c":
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE t1 USING fts4(content="", a, b, c);
+</pre></div>
+
+<p>
+ Data can be inserted into such an FTS4 table using an INSERT statements.
+ However, unlike ordinary FTS4 tables, the user must supply an explicit
+ integer docid value. For example:
+
+</p><div class="codeblock"><pre><i>-- This statement is Ok:</i>
+INSERT INTO t1(docid, a, b, c) VALUES(1, 'a b c', 'd e f', 'g h i');
+
+<i>-- This statement causes an error, as no docid value has been provided:</i>
+INSERT INTO t1(a, b, c) VALUES('j k l', 'm n o', 'p q r');
+</pre></div>
+
+<p>
+ It is not possible to UPDATE or DELETE a row stored in a contentless FTS4
+ table. Attempting to do so is an error.
+
+</p><p>
+ Contentless FTS4 tables also support SELECT statements. However, it is
+ an error to attempt to retrieve the value of any table column other than
+ the docid column. The auxiliary function matchinfo() may be used, but
+ snippet() and offsets() may not. For example:
+
+</p><div class="codeblock"><pre><i>-- The following statements are Ok:</i>
+SELECT docid FROM t1 WHERE t1 MATCH 'xxx';
+SELECT docid FROM t1 WHERE a MATCH 'xxx';
+SELECT matchinfo(t1) FROM t1 WHERE t1 MATCH 'xxx';
+
+<i>-- The following statements all cause errors, as the value of columns</i>
+<i>-- other than docid are required to evaluate them.</i>
+SELECT * FROM t1;
+SELECT a, b FROM t1 WHERE t1 MATCH 'xxx';
+SELECT docid FROM t1 WHERE a LIKE 'xxx%';
+SELECT snippet(t1) FROM t1 WHERE t1 MATCH 'xxx';
+</pre></div>
+
+<p>
+ Errors related to attempting to retrieve column values other than docid
+ are runtime errors that occur within sqlite3_step(). In some cases, for
+ example if the MATCH expression in a SELECT query matches zero rows, there
+ may be no error at all even if a statement does refer to column values
+ other than docid.
+
+</p><a name="_external_content_fts4_tables_"></a>
+<h3 tags="external content fts4 tables" id="_external_content_fts4_tables_"><span>6.2.2. </span> External Content FTS4 Tables </h3>
+
+<p>
+ An "external content" FTS4 table is similar to a contentless table, except
+ that if evaluation of a query requires the value of a column other than
+ docid, FTS4 attempts to retrieve that value from a table (or view, or
+ virtual table) nominated by the user (hereafter referred to as the "content
+ table"). The FTS4 module never writes to the content table, and writing
+ to the content table does not affect the full-text index. It is the
+ responsibility of the user to ensure that the content table and the
+ full-text index are consistent.
+
+</p><p>
+ An external content FTS4 table is created by setting the content option
+ to the name of a table (or view, or virtual table) that may be queried by
+ FTS4 to retrieve column values when required. If the nominated table does
+ not exist, then an external content table behaves in the same way as
+ a contentless table. For example:
+
+</p><div class="codeblock"><pre>CREATE TABLE t2(id INTEGER PRIMARY KEY, a, b, c);
+CREATE VIRTUAL TABLE t3 USING fts4(content="t2", a, c);
+</pre></div>
+
+<p>
+ Assuming the nominated table does exist, then its columns must be the same
+ as or a superset of those defined for the FTS table. The external table
+ must also be in the same database file as the FTS table. In other words,
+ The external table cannot be in a different database file connected using
+ <a href="lang_attach.html">ATTACH</a> nor may one of the FTS table and the external content be in the
+ TEMP database when the other is in a persistent database file such as MAIN.
+
+</p><p>
+ When a users query on the FTS table requires a column value other than
+ docid, FTS attempts to read the requested value from the corresponding column of
+ the row in the content table with a rowid value equal to the current FTS
+ docid. Only the subset of content-table columns duplicated in the FTS/34
+ table declaration can be queried for - to retrieve values from any other
+ columns the content table must be queried directly. Or, if such a row cannot
+ be found in the content table, a NULL value is used instead. For example:
+
+</p><div class="codeblock"><pre>CREATE TABLE t2(id INTEGER PRIMARY KEY, a, b, c);
+CREATE VIRTUAL TABLE t3 USING fts4(content="t2", b, c);
+
+INSERT INTO t2 VALUES(2, 'a b', 'c d', 'e f');
+INSERT INTO t2 VALUES(3, 'g h', 'i j', 'k l');
+INSERT INTO t3(docid, b, c) SELECT id, b, c FROM t2;
+<i>-- The following query returns a single row with two columns containing
+-- the text values "i j" and "k l".
+--
+-- The query uses the full-text index to discover that the MATCH
+-- term matches the row with docid=3. It then retrieves the values
+-- of columns b and c from the row with rowid=3 in the content table
+-- to return.
+--</i>
+SELECT * FROM t3 WHERE t3 MATCH 'k';
+
+<i>-- Following the UPDATE, the query still returns a single row, this
+-- time containing the text values "xxx" and "yyy". This is because the
+-- full-text index still indicates that the row with docid=3 matches
+-- the FTS4 query 'k', even though the documents stored in the content
+-- table have been modified.
+--</i>
+UPDATE t2 SET b = 'xxx', c = 'yyy' WHERE rowid = 3;
+SELECT * FROM t3 WHERE t3 MATCH 'k';
+
+<i>-- Following the DELETE below, the query returns one row containing two
+-- NULL values. NULL values are returned because FTS is unable to find
+-- a row with rowid=3 within the content table.
+--</i>
+DELETE FROM t2;
+SELECT * FROM t3 WHERE t3 MATCH 'k';
+</pre></div>
+
+<p>
+ When a row is deleted from an external content FTS4 table, FTS4 needs to
+ retrieve the column values of the row being deleted from the content table.
+ This is so that FTS4 can update the full-text index entries for each token
+ that occurs within the deleted row to indicate that row has been
+ deleted. If the content table row cannot be found, or if it contains values
+ inconsistent with the contents of the FTS index, the results can be difficult
+ to predict. The FTS index may be left containing entries corresponding to the
+ deleted row, which can lead to seemingly nonsensical results being returned
+ by subsequent SELECT queries. The same applies when a row is updated, as
+ internally an UPDATE is the same as a DELETE followed by an INSERT.
+
+</p><p>
+ This means that in order to keep an FTS in sync with an external content
+ table, any UPDATE or DELETE operations must be applied first to the FTS
+ table, and then to the external content table. For example:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1_real(id INTEGER PRIMARY KEY, a, b, c, d);
+CREATE VIRTUAL TABLE t1_fts USING fts4(content="t1_real", b, c);
+
+<i>-- This works. When the row is removed from the FTS table, FTS retrieves
+-- the row with rowid=123 and tokenizes it in order to determine the entries
+-- that must be removed from the full-text index.
+--</i>
+DELETE FROM t1_fts WHERE rowid = 123;
+DELETE FROM t1_real WHERE rowid = 123;
+
+--<i> This <b>does not work</b>. By the time the FTS table is updated, the row
+-- has already been deleted from the underlying content table. As a result
+-- FTS is unable to determine the entries to remove from the FTS index and
+-- so the index and content table are left out of sync.
+--</i>
+DELETE FROM t1_real WHERE rowid = 123;
+DELETE FROM t1_fts WHERE rowid = 123;
+</pre></div>
+
+<p>
+ Instead of writing separately to the full-text index and the content table,
+ some users may wish to use database triggers to keep the full-text index
+ up to date with respect to the set of documents stored in the content table.
+ For example, using the tables from earlier examples:
+
+</p><div class="codeblock"><pre>CREATE TRIGGER t2_bu BEFORE UPDATE ON t2 BEGIN
+ DELETE FROM t3 WHERE docid=old.rowid;
+END;
+CREATE TRIGGER t2_bd BEFORE DELETE ON t2 BEGIN
+ DELETE FROM t3 WHERE docid=old.rowid;
+END;
+
+CREATE TRIGGER t2_au AFTER UPDATE ON t2 BEGIN
+ INSERT INTO t3(docid, b, c) VALUES(new.rowid, new.b, new.c);
+END;
+CREATE TRIGGER t2_ai AFTER INSERT ON t2 BEGIN
+ INSERT INTO t3(docid, b, c) VALUES(new.rowid, new.b, new.c);
+END;
+</pre></div>
+
+<p>
+ The DELETE trigger must be fired before the actual delete takes place
+ on the content table. This is so that FTS4 can still retrieve the original
+ values in order to update the full-text index. And the INSERT trigger must
+ be fired after the new row is inserted, so as to handle the case where the
+ rowid is assigned automatically within the system. The UPDATE trigger must
+ be split into two parts, one fired before and one after the update of the
+ content table, for the same reasons.
+
+</p><p>
+ The <a href="fts3.html#*fts4rebuidcmd">FTS4 "rebuild" command</a>
+ deletes the entire full-text index and rebuilds it based on the current
+ set of documents in the content table. Assuming again that "t3" is the
+ name of the external content FTS4 table, the rebuild command looks like this:
+
+</p><div class="codeblock"><pre>INSERT INTO t3(t3) VALUES('rebuild');
+</pre></div>
+
+<p>
+ This command may also be used with ordinary FTS4 tables, for example if
+ the implementation of the tokenizer changes. It is an
+ error to attempt to rebuild the full-text index maintained by a contentless
+ FTS4 table, since no content will be available to do the rebuilding.
+
+
+<a name="*fts4languageid"></a>
+
+</p><a name="the_languageid_option"></a>
+<h2 tags="fts4 languageid option" id="the_languageid_option"><span>6.3. </span>The languageid= option</h2>
+
+<p>
+ When the languageid option is present, it specifies the name of
+ another <a href="vtab.html#hiddencol">hidden column</a> that is added to the FTS4
+ table and which is used to specify the language stored in each row
+ of the FTS4 table. The name of the languageid hidden column must
+ be distinct from all other column names in the FTS4 table. Example:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE t1 USING fts4(x, y, languageid="lid")
+</pre></div>
+
+<p>
+ The default value of a languageid column is 0. Any value inserted
+ into a languageid column is converted to a 32-bit (not 64) signed
+ integer.
+
+</p><p>
+ By default, FTS queries (those that use the MATCH operator)
+ consider only those rows with the languageid column set to 0. To
+ query for rows with other languageid values, a constraint of the
+ form "</p><language-id> = <integer>" must be added to the queries
+ WHERE clause. For example:
+
+<div class="codeblock"><pre>SELECT * FROM t1 WHERE t1 MATCH 'abc' AND lid=5;
+</pre></div>
+
+<p>
+ It is not possible for a single FTS query to return rows with
+ different languageid values. The results of adding WHERE clauses
+ that use other operators (e.g. lid!=5, or lid&lt;=5) are undefined.
+
+</p><p>
+ If the content option is used along with the languageid option,
+ then the named languageid column must exist in the content= table
+ (subject to the usual rules - if a query never needs to read the
+ content table then this restriction does not apply).
+
+</p><p>
+ When the languageid option is used, SQLite invokes the xLanguageid()
+ on the sqlite3_tokenizer_module object immediately after the object
+ is created in order to pass in the language id that the
+ tokenizer should use. The xLanguageid() method will never be called
+ more than once for any single tokenizer object. The fact that different
+ languages might be tokenized differently is one reason why no single
+ FTS query can return rows with different languageid values.
+
+
+
+<a name="fts4matchinfo"></a>
+
+</p><a name="the_matchinfo_option"></a>
+<h2 tags="fts4 matchinfo option" id="the_matchinfo_option"><span>6.4. </span>The matchinfo= option</h2>
+
+<p>
+ The matchinfo option may only be set to the value "fts3".
+ Attempting to set matchinfo to anything other than "fts3" is an error.
+ If this option is specified, then some of the extra information stored by
+ FTS4 is omitted. This reduces the amount of disk space consumed by
+ an FTS4 table until it is almost the same as the amount that would
+ be used by the equivalent FTS3 table, but also means that the data
+ accessed by passing the 'l' flag to the <a href="fts3.html#matchinfo">matchinfo()</a> function is
+ not available.
+
+<a name="fts4notindexed"></a>
+
+</p><a name="the_notindexed_option"></a>
+<h2 tags="fts4 notindexed option" id="the_notindexed_option"><span>6.5. </span>The notindexed= option</h2>
+
+<p>
+ Normally, the FTS module maintains an inverted index of all terms in
+ all columns of the table. This option is used to specify the name of
+ a column for which entries should not be added to the index. Multiple
+ "notindexed" options may be used to specify that multiple columns should
+ be omitted from the index. For example:
+
+</p><div class="codeblock"><pre><i>-- Create an FTS4 table for which only the contents of columns c2 and c4</i>
+<i>-- are tokenized and added to the inverted index.</i>
+CREATE VIRTUAL TABLE t1 USING fts4(c1, c2, c3, c4, notindexed=c1, notindexed=c3);
+</pre></div>
+
+<p>
+ Values stored in unindexed columns are not eligible to match MATCH
+ operators. They do not influence the results of the offsets() or matchinfo()
+ auxiliary functions. Nor will the snippet() function ever return a
+ snippet based on a value stored in an unindexed column.
+
+<a name="fts4prefix"></a>
+
+</p><a name="the_prefix_option"></a>
+<h2 tags="fts4 prefix option" id="the_prefix_option"><span>6.6. </span>The prefix= option</h2>
+
+<p>
+ The FTS4 prefix option causes FTS to index term prefixes of specified lengths
+ in the same way that it always indexes complete terms. The prefix option
+ must be set to a comma separated list of positive non-zero integers.
+ For each value N in the list, prefixes of length N bytes (when encoded
+ using UTF-8) are indexed. FTS4 uses term prefix indexes to speed up
+ <a href="fts3.html#termprefix">prefix queries</a>. The cost, of course, is that indexing term prefixes as
+ well as complete terms increases the database size and slows down write
+ operations on the FTS4 table.
+
+</p><p>
+ Prefix indexes may be used to optimize <a href="fts3.html#termprefix">prefix queries</a> in two cases.
+ If the query is for a prefix of N bytes, then a prefix index created
+ with "prefix=N" provides the best optimization. Or, if no "prefix=N"
+ index is available, a "prefix=N+1" index may be used instead.
+ Using a "prefix=N+1" index is less
+ efficient than a "prefix=N" index, but is better than no prefix index at all.
+
+</p><div class="codeblock"><pre><i>-- Create an FTS4 table with indexes to optimize 2 and 4 byte prefix queries.</i>
+CREATE VIRTUAL TABLE t1 USING fts4(c1, c2, prefix="2,4");
+
+<i>-- The following two queries are both optimized using the prefix indexes.</i>
+SELECT * FROM t1 WHERE t1 MATCH 'ab*';
+SELECT * FROM t1 WHERE t1 MATCH 'abcd*';
+
+<i>-- The following two queries are both partially optimized using the prefix</i>
+<i>-- indexes. The optimization is not as pronounced as it is for the queries</i>
+<i>-- above, but still an improvement over no prefix indexes at all.</i>
+SELECT * FROM t1 WHERE t1 MATCH 'a*';
+SELECT * FROM t1 WHERE t1 MATCH 'abc*';
+</pre></div>
+
+<a name="*cmds"></a>
+
+<a name="commands"></a>
+<h1 id="commands" tags="commands"><span>7. </span>Special Commands For FTS3 and FTS4</h1>
+
+<p>
+ Special INSERT operates can be used to issue commands to FTS3 and FTS4 tables.
+ Every FTS3 and FTS4 has a hidden, read-only column which is the same name as
+ the table itself. INSERTs into this hidden column are interpreted as commands
+ to the FTS3/4 table. For a table with the name "xyz" the following commands
+ are supported:
+
+</p><ul>
+<li><p>INSERT INTO xyz(xyz) VALUES('optimize');</p>
+</li><li><p>INSERT INTO xyz(xyz) VALUES('rebuild');</p>
+</li><li><p>INSERT INTO xyz(xyz) VALUES('integrity-check');</p>
+</li><li><p>INSERT INTO xyz(xyz) VALUES('merge=X,Y');</p>
+</li><li><p>INSERT INTO xyz(xyz) VALUES('automerge=N');</p>
+</li></ul>
+
+<a name="*fts4optcmd"></a>
+
+<h2 id="optimize"><span>7.1. </span>The "optimize" command</h2>
+
+<p>
+ The "optimize" command causes FTS3/4 to merge together all of its
+ inverted index b-trees into one large and complete b-tree. Doing
+ an optimize will make subsequent queries run faster since there are
+ fewer b-trees to search, and it may reduce disk usage by coalescing
+ redundant entries. However, for a large FTS table, running optimize
+ can be as expensive as running <a href="lang_vacuum.html">VACUUM</a>. The optimize command
+ essentially has to read and write the entire FTS table, resulting
+ in a large transaction.
+
+</p><p>
+ In batch-mode operation, where an FTS table is initially built up
+ using a large number of INSERT operations, then queried repeatedly
+ without further changes, it is often a good idea
+ to run "optimize" after the last INSERT and before the first query.
+
+<a name="*fts4rebuidcmd"></a>
+
+</p><h2 id="rebuild"><span>7.2. </span>The "rebuild" command</h2>
+
+<p>
+ The "rebuild" command causes SQLite to discard the entire FTS3/4
+ table and then rebuild it again from original text. The concept
+ is similar to <a href="lang_reindex.html">REINDEX</a>, only that it applies to an
+ FTS3/4 table instead of an ordinary index.
+
+</p><p>
+ The "rebuild" command should be run whenever the implementation
+ of a custom tokenizer changes, so that all content can be retokenized.
+ The "rebuild" command is also useful when using the
+ <a href="fts3.html#*fts4content">FTS4 content option</a> after changes have been made to the original
+ content table.
+
+<a name="*fts4ickcmd"></a>
+
+</p><h2 id="integcheck"><span>7.3. </span>The "integrity-check" command</h2>
+
+<p>
+ The "integrity-check" command causes SQLite to read and verify
+ the accuracy of all inverted indices in an FTS3/4 table by comparing
+ those inverted indices against the original content. The
+ "integrity-check" command silently succeeds if the inverted
+ indices are all ok, but will fail with an SQLITE_CORRUPT error
+ if any problems are found.
+
+</p><p>
+ The "integrity-check" command is similar in concept to
+ <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>. In a working system, the "integrity-command"
+ should always be successful. Possible causes of integrity-check
+ failures include:
+ </p><ul>
+ <li> The application has made changes to the <a href="fts3.html#*shadowtab">FTS shadow tables</a>
+ directly, without using the FTS3/4 virtual table, causing
+ the shadow tables to become out of sync with each other.
+ </li><li> Using the <a href="fts3.html#*fts4content">FTS4 content option</a> and failing to manually keep
+ the content in sync with the FTS4 inverted indices.
+ </li><li> Bugs in the FTS3/4 virtual table. (The "integrity-check"
+ command was original conceived as part of the test suite
+ for FTS3/4.)
+ </li><li> Corruption to the underlying SQLite database file. (See
+ documentation on <a href="howtocorrupt.html">how to corrupt</a> and SQLite database for
+ additional information.)
+ </li></ul>
+
+<a name="*fts4mergecmd"></a>
+
+<h2 id="mergecmd"><span>7.4. </span>The "merge=X,Y" command</h2>
+
+<p>
+ The "merge=X,Y" command (where X and Y are integers) causes SQLite
+ to do a limited amount of work toward merging the various inverted
+ index b-trees of an FTS3/4 table together into one large b-tree.
+ The X value is the target number of "blocks" to be merged, and Y is
+ the minimum number of b-tree segments on a level required before
+ merging will be applied to that level. The value of Y should
+ be between 2 and 16 with a recommended value of 8. The value of X
+ can be any positive integer but values on the order of 100 to 300
+ are recommended.
+
+</p><p>
+ When an FTS table accumulates 16 b-tree segments at the same level,
+ the next INSERT into that table will cause all 16 segments to be
+ merged into a single b-tree segment at the next higher level. The
+ effect of these level merges is that most INSERTs into an FTS table
+ are very fast and take minimal memory, but an occasional INSERT is
+ slow and generates a large transaction because of the need to
+ do merging. This results in "spiky" performance of INSERTs.
+
+</p><p>
+ To avoid spiky INSERT performance, an application can run the
+ "merge=X,Y" command periodically, possibly in an idle thread or
+ idle process, to ensure that the FTS table never accumulates
+ too many b-tree segments at the same level. INSERT performance
+ spikes can generally be avoided, and performance of FTS3/4 can be
+ maximized, by running "merge=X,Y" after every few thousand
+ document inserts. Each "merge=X,Y" command will run in a separate
+ transaction (unless they are grouped together using <a href="lang_transaction.html">BEGIN</a>...<a href="lang_transaction.html">COMMIT</a>,
+ of course). The transactions can be kept small by choosing a value
+ for X in the range of 100 to 300. The idle thread that is running
+ the merge commands can know when it is done by checking the difference
+ in <a href="c3ref/total_changes.html">sqlite3_total_changes()</a> before and after each "merge=X,Y"
+ command and stopping the loop when the difference drops below two.
+
+<a name="*fts4automergecmd"></a>
+
+</p><h2 id="automerge""><span>7.5. </span>The "automerge=N" command</h2>
+
+<p>
+ The "automerge=N" command (where N is an integer between 0 and 15,
+ inclusive) is used to configure an FTS3/4 tables "automerge" parameter,
+ which controls automatic incremental inverted index merging. The default
+ automerge value for new tables is 0, meaning that automatic incremental
+ merging is completely disabled. If the value of the automerge parameter
+ is modified using the "automerge=N" command, the new parameter value is
+ stored persistently in the database and is used by all subsequently
+ established database connections.
+
+</p><p>
+ Setting the automerge parameter to a non-zero value enables automatic
+ incremental merging. This causes SQLite to do a small amount of inverted
+ index merging after every INSERT operation. The amount of merging
+ performed is designed so that the FTS3/4 table never reaches a point
+ where it has 16 segments at the same level and hence has to do a large
+ merge in order to complete an insert. In other words, automatic
+ incremental merging is designed to prevent spiky INSERT performance.
+
+</p><p>
+ The downside of automatic incremental merging is that it makes
+ every INSERT, UPDATE, and DELETE operation on an FTS3/4 table run
+ a little slower, since extra time must be used to do the incremental
+ merge. For maximum performance, it is recommended that applications
+ disable automatic incremental merge and instead use the
+ <a href="fts3.html#*fts4mergecmd">"merge" command</a> in an idle process to keep the inverted indices
+ well merged. But if the structure of an application does not easily
+ allow for idle processes, the use of automatic incremental merge is
+ a very reasonable fallback solution.
+
+</p><p>
+ The actual value of the automerge parameter determines the number of
+ index segments merged simultaneously by an automatic inverted index
+ merge. If the value is set to N, the system waits until there are at
+ least N segments on a single level before beginning to incrementally
+ merge them. Setting a lower value of N causes segments to be merged more
+ quickly, which may speed up full-text queries and, if the workload
+ contains UPDATE or DELETE operations as well as INSERTs, reduce the space
+ on disk consumed by the full-text index. However, it also increases the
+ amount of data written to disk.
+
+</p><p>
+ For general use in cases where the workload contains few UPDATE or DELETE
+ operations, a good choice for automerge is 8. If the workload contains
+ many UPDATE or DELETE commands,
+ or if query speed is a concern, it may be advantageous to reduce automerge
+ to 2.
+
+</p><p>
+ For reasons of backwards compatibility, the "automerge=1" command sets
+ the automerge parameter to 8, not 1 (a value of 1 would make no sense
+ anyway, as merging data from a single segment is a no-op).
+
+
+</p><a name="tokenizer"></a>
+<h1 id="tokenizer" tags="tokenizer"><span>8. </span>Tokenizers</h1>
+
+<p>
+ An FTS tokenizer is a set of rules for extracting terms from a document
+ or basic FTS full-text query.
+
+</p><p>
+ Unless a specific tokenizer is specified as part of the CREATE
+ VIRTUAL TABLE statement used to create the FTS table, the default
+ tokenizer, "simple", is used. The simple tokenizer extracts tokens from
+ a document or basic FTS full-text query according to the following
+ rules:
+
+</p><ul>
+ <li><p> A term is a contiguous sequence of eligible characters, where
+ eligible characters are all alphanumeric characters and all characters with
+ Unicode codepoint values greater than or equal to 128.
+ All other characters are
+ discarded when splitting a document into terms. Their only contribution is
+ to separate adjacent terms.
+
+ </p></li><li><p> All uppercase characters within the ASCII range (Unicode codepoints
+ less than 128), are transformed to their lowercase equivalents as part
+ of the tokenization process. Thus, full-text queries are
+ case-insensitive when using the simple tokenizer.
+</p></li></ul>
+
+<p>
+ For example, when a document containing the text "Right now, they're very
+ frustrated.", the terms extracted from the document and added to the
+ full-text index are, in order, "right now they re very frustrated". Such
+ a document would match a full-text query such as "MATCH 'Frustrated'",
+ as the simple tokenizer transforms the term in the query to lowercase
+ before searching the full-text index.
+
+</p><p>
+ As well as the "simple" tokenizer, the FTS source code features a tokenizer
+ that uses the <a href="http://tartarus.org/~martin/PorterStemmer/">Porter
+ Stemming algorithm</a>. This tokenizer uses the same rules to separate
+ the input document into terms including folding all terms into lower case,
+ but also uses the Porter Stemming algorithm to reduce related English language
+ words to a common root. For example, using the same input document as in the
+ paragraph above, the porter tokenizer extracts the following tokens:
+ "right now thei veri frustrat". Even though some of these terms are not even
+ English words, in some cases using them to build the full-text index is more
+ useful than the more intelligible output produced by the simple tokenizer.
+ Using the porter tokenizer, the document not only matches full-text queries
+ such as "MATCH 'Frustrated'", but also queries such as "MATCH 'Frustration'",
+ as the term "Frustration" is reduced by the Porter stemmer algorithm to
+ "frustrat" - just as "Frustrated" is. So, when using the porter tokenizer,
+ FTS is able to find not just exact matches for queried terms, but matches
+ against similar English language terms. For more information on the
+ Porter Stemmer algorithm, please refer to the page linked above.
+
+</p><p>
+ Example illustrating the difference between the "simple" and "porter"
+ tokenizers:
+
+</p><div class="codeblock"><pre><i>-- Create a table using the simple tokenizer. Insert a document into it.</i>
+CREATE VIRTUAL TABLE simple USING fts3(tokenize=simple);
+INSERT INTO simple VALUES('Right now they''re very frustrated');
+
+<i>-- The first of the following two queries matches the document stored in</i>
+<i>-- table "simple". The second does not.</i>
+SELECT * FROM simple WHERE simple MATCH 'Frustrated';
+SELECT * FROM simple WHERE simple MATCH 'Frustration';
+
+<i>-- Create a table using the porter tokenizer. Insert the same document into it</i>
+CREATE VIRTUAL TABLE porter USING fts3(tokenize=porter);
+INSERT INTO porter VALUES('Right now they''re very frustrated');
+
+<i>-- Both of the following queries match the document stored in table "porter".</i>
+SELECT * FROM porter WHERE porter MATCH 'Frustrated';
+SELECT * FROM porter WHERE porter MATCH 'Frustration';
+</pre></div>
+
+<p>
+ If this extension is compiled with the SQLITE_ENABLE_ICU pre-processor
+ symbol defined, then there exists a built-in tokenizer named "icu"
+ implemented using the ICU library. The first argument passed to the
+ xCreate() method (see fts3_tokenizer.h) of this tokenizer may be
+ an ICU locale identifier. For example "tr_TR" for Turkish as used
+ in Turkey, or "en_AU" for English as used in Australia. For example:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE thai_text USING fts3(text, tokenize=icu th_TH)
+</pre></div>
+
+<p>
+ The ICU tokenizer implementation is very simple. It splits the input
+ text according to the ICU rules for finding word boundaries and discards
+ any tokens that consist entirely of white-space. This may be suitable
+ for some applications in some locales, but not all. If more complex
+ processing is required, for example to implement stemming or
+ discard punctuation, this can be done by creating a tokenizer
+ implementation that uses the ICU tokenizer as part of its implementation.
+
+<a name="unicode61"></a>
+
+</p><p>
+ The "unicode61" tokenizer is available beginning with SQLite <a href="releaselog/3_7_13.html">version 3.7.13</a>
+ (2012-06-11).
+ Unicode61 works very much like "simple" except that it does simple unicode
+ case folding according to rules in Unicode Version 6.1 and it recognizes
+ unicode space and punctuation characters and uses those to separate tokens.
+ The simple tokenizer only does case folding of ASCII characters and only
+ recognizes ASCII space and punctuation characters as token separators.
+
+</p><p>
+ By default, "unicode61" attempts to remove diacritics from Latin script
+ characters. This behaviour can be overridden by adding the tokenizer argument
+ "remove_diacritics=0". For example:
+
+</p><div class="codeblock"><pre><i>-- Create tables that remove <b>all</b>diacritics from Latin script characters</i>
+<i>-- as part of tokenization.</i>
+CREATE VIRTUAL TABLE txt1 USING fts4(tokenize=unicode61);
+CREATE VIRTUAL TABLE txt2 USING fts4(tokenize=unicode61 "remove_diacritics=2");
+
+<i>-- Create a table that does not remove diacritics from Latin script</i>
+<i>-- characters as part of tokenization.</i>
+CREATE VIRTUAL TABLE txt3 USING fts4(tokenize=unicode61 "remove_diacritics=0");
+</pre></div>
+
+<p>The remove_diacritics option may be set to "0", "1" or "2". The default
+ value is "1". If it is set to "1" or "2", then diacritics are removed from
+ Latin script characters as described above. However, if it is set to "1",
+ then diacritics are not removed in the fairly uncommon case where a single
+ unicode codepoint is used to represent a character with more that one
+ diacritic. For example, diacritics are not removed from codepoint 0x1ED9
+ ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW"). This is technically
+ a bug, but cannot be fixed without creating backwards compatibility
+ problems. If this option is set to "2", then diacritics are correctly
+ removed from all Latin characters.
+
+</p><p>
+ It is also possible to customize the set of codepoints that unicode61 treats
+ as separator characters. The "separators=" option may be used to specify one
+ or more extra characters that should be treated as separator characters, and
+ the "tokenchars=" option may be used to specify one or more extra characters
+ that should be treated as part of tokens instead of as separator characters.
+ For example:
+
+</p><div class="codeblock"><pre><i>-- Create a table that uses the unicode61 tokenizer, but considers "."</i>
+<i>-- and "=" characters to be part of tokens, and capital "X" characters to</i>
+<i>-- function as separators.</i>
+CREATE VIRTUAL TABLE txt3 USING fts4(tokenize=unicode61 "tokenchars=.=" "separators=X");
+
+<i>-- Create a table that considers space characters (codepoint 32) to be</i>
+<i>-- a token character</i>
+CREATE VIRTUAL TABLE txt4 USING fts4(tokenize=unicode61 "tokenchars= ");
+</pre></div>
+
+<p>
+ If a character specified as part of the argument to "tokenchars=" is considered
+ to be a token character by default, it is ignored. This is true even if it has
+ been marked as a separator by an earlier "separators=" option. Similarly, if
+ a character specified as part of a "separators=" option is treated as a separator
+ character by default, it is ignored. If multiple "tokenchars=" or "separators="
+ options are specified, all are processed. For example:
+
+</p><div class="codeblock"><pre><i>-- Create a table that uses the unicode61 tokenizer, but considers "."</i>
+<i>-- and "=" characters to be part of tokens, and capital "X" characters to</i>
+<i>-- function as separators. Both of the "tokenchars=" options are processed</i>
+<i>-- The "separators=" option ignores the "." passed to it, as "." is by</i>
+<i>-- default a separator character, even though it has been marked as a token</i>
+<i>-- character by an earlier "tokenchars=" option.</i>
+CREATE VIRTUAL TABLE txt5 USING fts4(
+ tokenize=unicode61 "tokenchars=." "separators=X." "tokenchars=="
+);
+</pre></div>
+
+<p>
+ The arguments passed to the "tokenchars=" or "separators=" options are
+ case-sensitive. In the example above, specifying that "X" is a separator
+ character does not affect the way "x" is handled.
+
+<a name="f3tknzr"></a>
+
+</p><h2 id="custom_application_defined_tokenizers"><span>8.1. </span>Custom (Application Defined) Tokenizers</h2>
+
+<p>
+ In addition to providing built-in "simple", "porter" and (possibly) "icu" and
+ "unicode61" tokenizers,
+ FTS provides an interface for applications to implement and register custom
+ tokenizers written in C. The interface used to create a new tokenizer is defined
+ and described in the fts3_tokenizer.h source file.
+
+</p><p>
+ Registering a new FTS tokenizer is similar to registering a new
+ virtual table module with SQLite. The user passes a pointer to a
+ structure containing pointers to various callback functions that
+ make up the implementation of the new tokenizer type. For tokenizers,
+ the structure (defined in fts3_tokenizer.h) is called
+ "sqlite3_tokenizer_module".
+
+</p><p>
+ FTS does not expose a C-function that users call to register new
+ tokenizer types with a database handle. Instead, the pointer must
+ be encoded as an SQL blob value and passed to FTS through the SQL
+ engine by evaluating a special scalar function, "fts3_tokenizer()".
+ The fts3_tokenizer() function may be called with one or two arguments,
+ as follows:
+
+</p><div class="codeblock"><pre>SELECT fts3_tokenizer(&lt;tokenizer-name&gt;);
+SELECT fts3_tokenizer(&lt;tokenizer-name&gt;, &lt;sqlite3_tokenizer_module ptr&gt;);
+</pre></div>
+
+<p>
+ Where &lt;tokenizer-name&gt; is <a href="lang_expr.html#varparam">parameter</a> to which a string is bound using
+ <a href="c3ref/bind_blob.html">sqlite3_bind_text()</a> where the string identifies the tokenizer and
+ &lt;sqlite3_tokenizer_module ptr&gt; is a <a href="lang_expr.html#varparam">parameter</a> to which a BLOB is
+ bound using <a href="c3ref/bind_blob.html">sqlite3_bind_blob()</a> where the value of the BLOB is a
+ pointer to an sqlite3_tokenizer_module structure.
+ If the second argument is present,
+ it is registered as tokenizer &lt;tokenizer-name&gt; and a copy of it
+ returned. If only one argument is passed, a pointer to the tokenizer
+ implementation currently registered as &lt;tokenizer-name&gt; is returned,
+ encoded as a blob. Or, if no such tokenizer exists, an SQL exception
+ (error) is raised.
+
+</p><p>
+ Prior to SQLite <a href="releaselog/3_11_0.html">version 3.11.0</a> (2016-02-15), the arguments to
+ fts3_tokenizer() could be literal strings or BLOBs. They did not have to
+ be <a href="lang_expr.html#varparam">bound parameters</a>. But that could lead to security problems in the
+ event of an SQL injection. Hence, the legacy behavior is now disabled
+ by default. But the old legacy behavior can be enabled, for backwards
+ compatibility in applications that really need it,
+ by calling
+ <a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>,1,0).
+
+</p><p>
+ The following block contains an example of calling the fts3_tokenizer()
+ function from C code:
+
+</p><div class="codeblock"><pre><i>/*
+** Register a tokenizer implementation with FTS3 or FTS4.
+*/</i>
+int registerTokenizer(
+ sqlite3 *db,
+ char *zName,
+ const sqlite3_tokenizer_module *p
+){
+ int rc;
+ sqlite3_stmt *pStmt;
+ const char *zSql = "SELECT fts3_tokenizer(?1, ?2)";
+
+ rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
+ if( rc!=SQLITE_OK ){
+ return rc;
+ }
+
+ sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
+ sqlite3_bind_blob(pStmt, 2, &p, sizeof(p), SQLITE_STATIC);
+ sqlite3_step(pStmt);
+
+ return sqlite3_finalize(pStmt);
+}
+
+<i>/*
+** Query FTS for the tokenizer implementation named zName.
+*/</i>
+int queryTokenizer(
+ sqlite3 *db,
+ char *zName,
+ const sqlite3_tokenizer_module **pp
+){
+ int rc;
+ sqlite3_stmt *pStmt;
+ const char *zSql = "SELECT fts3_tokenizer(?)";
+
+ *pp = 0;
+ rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
+ if( rc!=SQLITE_OK ){
+ return rc;
+ }
+
+ sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
+ if( SQLITE_ROW==sqlite3_step(pStmt) ){
+ if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){
+ memcpy(pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp));
+ }
+ }
+
+ return sqlite3_finalize(pStmt);
+}
+</pre></div>
+
+
+<a name="fts3tok"></a>
+
+<h2 id="querying_tokenizers"><span>8.2. </span>Querying Tokenizers</h2>
+
+<p>The "fts3tokenize" virtual table can be used to directly access any
+ tokenizer. The following SQL demonstrates how to create an instance
+ of the fts3tokenize virtual table:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE tok1 USING fts3tokenize('porter');
+</pre></div>
+
+<p>The name of the desired tokenizer should be substituted in place of
+ 'porter' in the example, of course. If the tokenizer requires one or
+ more arguments, they should be separated by commas in the fts3tokenize
+ declaration (even though they are separated by spaces in declarations
+ of regular fts4 tables). The following creates fts4 and fts3tokenize
+ tables that use the same tokenizer:
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE text1 USING fts4(tokenize=icu en_AU);
+CREATE VIRTUAL TABLE tokens1 USING fts3tokenize(icu, en_AU);
+
+CREATE VIRTUAL TABLE text2 USING fts4(tokenize=unicode61 "tokenchars=@." "separators=123");
+CREATE VIRTUAL TABLE tokens2 USING fts3tokenize(unicode61, "tokenchars=@.", "separators=123");
+</pre></div>
+
+<p>
+ Once the virtual table is created, it can be queried as follows:
+
+</p><div class="codeblock"><pre>SELECT token, start, end, position
+ FROM tok1
+ WHERE input='This is a test sentence.';
+</pre></div>
+
+<p>The virtual table will return one row of output for each token in the
+ input string. The "token" column is the text of the token. The "start"
+ and "end" columns are the byte offset to the beginning and end of the
+ token in the original input string.
+ The "position" column is the sequence number
+ of the token in the original input string. There is also an "input"
+ column which is simply a copy of the input string that is specified in
+ the WHERE clause. Note that a constraint of the form "input=?" must
+ appear in the WHERE clause or else the virtual table will have no input
+ to tokenize and will return no rows. The example above generates
+ the following output:
+
+</p><div class="codeblock"><pre>thi|0|4|0
+is|5|7|1
+a|8|9|2
+test|10|14|3
+sentenc|15|23|4
+</pre></div>
+
+<p>Notice that the tokens in the result set from the fts3tokenize virtual
+ table have been transformed according to the rules of the tokenizer.
+ Since this example used the "porter" tokenizer, the "This" token was
+ converted into "thi". If the original text of the token is desired,
+ it can be retrieved using the "start" and "end" columns with the
+ <a href="lang_corefunc.html#substr">substr()</a> function. For example:
+
+</p><div class="codeblock"><pre>SELECT substr(input, start+1, end-start), token, position
+ FROM tok1
+ WHERE input='This is a test sentence.';
+</pre></div>
+
+<p>The fts3tokenize virtual table can be used on any tokenizer, regardless
+ of whether or not there exists an FTS3 or FTS4 table that actually uses
+ that tokenizer.
+
+
+</p><a name="data_structures"></a>
+<h1 tags="segment btree" id="data_structures"><span>9. </span>Data Structures</h1>
+
+<p>
+ This section describes at a high-level the way the FTS module stores its
+ index and content in the database. It is <b>not necessary to read or
+ understand the material in this section in order to use FTS</b> in an
+ application. However, it may be useful to application developers attempting
+ to analyze and understand FTS performance characteristics, or to developers
+ contemplating enhancements to the existing FTS feature set.
+</p>
+
+<a name="*shadowtab"></a>
+
+<a name="shadow_tables"></a>
+<h2 tags="shadowtabs" id="shadow_tables"><span>9.1. </span>Shadow Tables</h2>
+<p>
+ For each FTS virtual table in a database, three to five real (non-virtual) tables
+ are created to store the underlying data. These real tables are called "shadow tables".
+ The real tables are named "%_content",
+ "%_segdir", "%_segments", "%_stat", and "%_docsize", where "%" is replaced by the name
+ of the FTS virtual table.
+
+</p><p>
+ The leftmost column of the "%_content" table is an INTEGER PRIMARY KEY field
+ named "docid". Following this is one column for each column of the FTS
+ virtual table as declared by the user, named by prepending the column name
+ supplied by the user with "c<i>N</i>", where <i>N</i> is the index of the
+ column within the table, numbered from left to right starting with 0. Data
+ types supplied as part of the virtual table declaration are not used as
+ part of the %_content table declaration. For example:
+
+</p><div class="codeblock"><pre><i>-- Virtual table declaration</i>
+CREATE VIRTUAL TABLE abc USING fts4(a NUMBER, b TEXT, c);
+
+<i>-- Corresponding %_content table declaration</i>
+CREATE TABLE abc_content(docid INTEGER PRIMARY KEY, c0a, c1b, c2c);
+</pre></div>
+
+<p>
+ The %_content table contains the unadulterated data inserted by the user
+ into the FTS virtual table by the user. If the user does not explicitly
+ supply a "docid" value when inserting records, one is selected automatically
+ by the system.
+
+</p><p>
+ The %_stat and %_docsize tables are only created if the FTS table uses the
+ FTS4 module, not FTS3. Furthermore, the %_docsize table is omitted if the
+ FTS4 table is created with the <a href="fts3.html#fts4matchinfo">"matchinfo=fts3"</a> directive
+ specified as part of the CREATE VIRTUAL TABLE statement. If they are created,
+ the schema of the two tables is as follows:
+</p><div class="codeblock"><pre>CREATE TABLE %_stat(
+ id INTEGER PRIMARY KEY,
+ value BLOB
+);
+
+CREATE TABLE %_docsize(
+ docid INTEGER PRIMARY KEY,
+ size BLOB
+);
+</pre></div>
+
+<p>
+ For each row in the FTS table, the %_docsize table contains a corresponding
+ row with the same "docid" value. The "size" field contains a blob consisting
+ of <i>N</i> FTS varints, where <i>N</i> is the number of user-defined columns
+ in the table. Each varint in the "size" blob is the number of tokens in the
+ corresponding column of the associated row in the FTS table. The %_stat table
+ always contains a single row with the "id" column set to 0. The "value"
+ column contains a blob consisting of <i>N+1</i> FTS varints, where <i>N</i>
+ is again the number of user-defined columns in the FTS table. The first
+ varint in the blob is set to the total number of rows in the FTS table. The
+ second and subsequent varints contain the total number of tokens stored in
+ the corresponding column for all rows of the FTS table.
+
+</p><p>
+ The two remaining tables, %_segments and %_segdir, are used to store the
+ full-text index. Conceptually, this index is a lookup table that maps each
+ term (word) to the set of docid values corresponding to records in the
+ %_content table that contain one or more occurrences of the term. To
+ retrieve all documents that contain a specified term, the FTS module
+ queries this index to determine the set of docid values for records that
+ contain the term, then retrieves the required documents from the %_content
+ table. Regardless of the schema of the FTS virtual table, the %_segments
+ and %_segdir tables are always created as follows:
+
+</p><div class="codeblock"><pre>CREATE TABLE %_segments(
+ blockid INTEGER PRIMARY KEY, <i>-- B-tree node id</i>
+ block blob <i>-- B-tree node data</i>
+);
+
+CREATE TABLE %_segdir(
+ level INTEGER,
+ idx INTEGER,
+ start_block INTEGER, <i>-- Blockid of first node in %_segments</i>
+ leaves_end_block INTEGER, <i>-- Blockid of last leaf node in %_segments</i>
+ end_block INTEGER, <i>-- Blockid of last node in %_segments</i>
+ root BLOB, <i>-- B-tree root node</i>
+ PRIMARY KEY(level, idx)
+);
+</pre></div>
+
+<p>
+ The schema depicted above is not designed to store the full-text index
+ directly. Instead, it is used to store one or more b-tree structures. There
+ is one b-tree for each row in the %_segdir table. The %_segdir table
+ row contains the root node and various meta-data associated with the
+ b-tree structure, and the %_segments table contains all other (non-root)
+ b-tree nodes. Each b-tree is referred to as a "segment". Once it has
+ been created, a segment b-tree is never updated (although it may be
+ deleted altogether).
+
+</p><p>
+ The keys used by each segment b-tree are terms (words). As well as the
+ key, each segment b-tree entry has an associated "doclist" (document list).
+ A doclist consists of zero or more entries, where each entry consists of:
+
+</p><ul>
+ <li> A docid (document id), and
+ </li><li> A list of term offsets, one for each occurrence of the term within
+ the document. A term offset indicates the number of tokens (words)
+ that occur before the term in question, not the number of characters
+ or bytes. For example, the term offset of the term "war" in the
+ phrase "Ancestral voices prophesying war!" is 3.
+</li></ul>
+
+<p>
+ Entries within a doclist are sorted by docid. Positions within a doclist
+ entry are stored in ascending order.
+
+</p><p>
+ The contents of the logical full-text index is found by merging the
+ contents of all segment b-trees. If a term is present in more than one
+ segment b-tree, then it maps to the union of each individual doclist. If,
+ for a single term, the same docid occurs in more than one doclist, then only
+ the doclist that is part of the most recently created segment b-tree is
+ considered valid.
+
+</p><p>
+ Multiple b-tree structures are used instead of a single b-tree to reduce
+ the cost of inserting records into FTS tables. When a new record is
+ inserted into an FTS table that already contains a lot of data, it is
+ likely that many of the terms in the new record are already present in
+ a large number of existing records. If a single b-tree were used, then
+ large doclist structures would have to be loaded from the database,
+ amended to include the new docid and term-offset list, then written back
+ to the database. Using multiple b-tree tables allows this to be avoided
+ by creating a new b-tree which can be merged with the existing b-tree
+ (or b-trees) later on. Merging of b-tree structures can be performed as
+ a background task, or once a certain number of separate b-tree structures
+ have been accumulated. Of course, this scheme makes queries more expensive
+ (as the FTS code may have to look up individual terms in more than one
+ b-tree and merge the results), but it has been found that in practice this
+ overhead is often negligible.
+
+</p><h2 id="variable_length_integer_varint_format"><span>9.2. </span>Variable Length Integer (varint) Format</h2>
+
+<p>
+ Integer values stored as part of segment b-tree nodes are encoded using the
+ FTS varint format. This encoding is similar, but <b>not identical</b>, to
+ the <a href="fileformat.html#varint_format">SQLite varint format</a>.
+
+</p><p>
+ An encoded FTS varint consumes between one and ten bytes of space. The
+ number of bytes required is determined by the sign and magnitude of the
+ integer value encoded. More accurately, the number of bytes used to store
+ the encoded integer depends on the position of the most significant set bit
+ in the 64-bit twos-complement representation of the integer value. Negative
+ values always have the most significant bit set (the sign bit), and so are
+ always stored using the full ten bytes. Positive integer values may be
+ stored using less space.
+
+</p><p>
+ The final byte of an encoded FTS varint has its most significant bit
+ cleared. All preceding bytes have the most significant bit set. Data
+ is stored in the remaining seven least significant bits of each byte.
+ The first byte of the encoded representation contains the least significant
+ seven bits of the encoded integer value. The second byte of the encoded
+ representation, if it is present, contains the seven next least significant
+ bits of the integer value, and so on. The following table contains examples
+ of encoded integer values:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Decimal</th><th>Hexadecimal</th><th width="100%">Encoded Representation
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>43</td><td>0x000000000000002B</td><td>0x2B
+ </td></tr><tr style="text-align:left"><td>200815</td><td>0x000000000003106F</td><td>0xEF 0xA0 0x0C
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>-1</td><td>0xFFFFFFFFFFFFFFFF</td><td>0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x01
+</td></tr></table>
+
+
+<h2 id="segment_b_tree_format"><span>9.3. </span>Segment B-Tree Format</h2>
+
+<p>
+ Segment b-trees are prefix-compressed b+-trees. There is one segment b-tree
+ for each row in the %_segdir table (see above). The root node of the segment
+ b-tree is stored as a blob in the "root" field of the corresponding row
+ of the %_segdir table. All other nodes (if any exist) are stored in the
+ "blob" column of the %_segments table. Nodes within the %_segments table are
+ identified by the integer value in the blockid field of the corresponding
+ row. The following table describes the fields of the %_segdir table:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Column </th><th width="100%">Interpretation
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>level </td><td>
+ Between them, the contents of the "level" and "idx" fields define the
+ relative age of the segment b-tree. The smaller the value stored in the
+ "level" field, the more recently the segment b-tree was created. If two
+ segment b-trees are of the same "level", the segment with the larger
+ value stored in the "idx" column is more recent. The PRIMARY KEY constraint
+ on the %_segdir table prevents any two segments from having the same value
+ for both the "level" and "idx" fields.
+ </td></tr><tr style="text-align:left"><td>idx </td><td> See above.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>start_block </td><td>
+ The blockid that corresponds to the node with the smallest blockid that
+ belongs to this segment b-tree. Or zero if the entire segment b-tree
+ fits on the root node. If it exists, this node is always a leaf node.
+ </td></tr><tr style="text-align:left"><td>leaves_end_block </td><td>
+ The blockid that corresponds to the leaf node with the largest blockid
+ that belongs to this segment b-tree. Or zero if the entire segment b-tree
+ fits on the root node.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>end_block </td><td>
+ This field may contain either an integer or a text field consisting of
+ two integers separated by a space character (unicode codepoint 0x20).
+<p style="margin-left:0;margin-right:0">
+ The first, or only, integer is the blockid that corresponds to the interior
+ node with the largest blockid that belongs to this segment b-tree. Or zero
+ if the entire segment b-tree fits on the root node. If it exists, this node
+ is always an interior node.
+</p><p style="margin-left:0;margin-right:0;margin-bottom:0">
+ The second integer, if it is present, is the aggregate size of all data
+ stored on leaf pages in bytes. If the value is negative, then the segment
+ is the output of an unfinished incremental-merge operation, and the
+ absolute value is current size in bytes.
+
+ </p></td></tr><tr style="text-align:left"><td>root </td><td>
+ Blob containing the root node of the segment b-tree.
+</td></tr></table>
+
+<p>
+ Apart from the root node, the nodes that make up a single segment b-tree are
+ always stored using a contiguous sequence of blockids. Furthermore, the
+ nodes that make up a single level of the b-tree are themselves stored as
+ a contiguous block, in b-tree order. The contiguous sequence of blockids
+ used to store the b-tree leaves are allocated starting with the blockid
+ value stored in the "start_block" column of the corresponding %_segdir row,
+ and finishing at the blockid value stored in the "leaves_end_block"
+ field of the same row. It is therefore possible to iterate through all the
+ leaves of a segment b-tree, in key order, by traversing the %_segments
+ table in blockid order from "start_block" to "leaves_end_block".
+
+</p><h3 id="segment_b_tree_leaf_nodes"><span>9.3.1. </span>Segment B-Tree Leaf Nodes</h3>
+
+<p>
+ The following diagram depicts the format of a segment b-tree leaf node.
+
+</p><center>
+ <img src="images/fts3_leaf_node.png">
+ <p> Segment B-Tree Leaf Node Format
+</p></center>
+
+<p>
+ The first term stored on each node ("Term 1" in the figure above) is
+ stored verbatim. Each subsequent term is prefix-compressed with respect
+ to its predecessor. Terms are stored within a page in sorted (memcmp)
+ order.
+
+</p><h3 id="segment_b_tree_interior_nodes"><span>9.3.2. </span>Segment B-Tree Interior Nodes</h3>
+
+<p>
+ The following diagram depicts the format of a segment b-tree interior
+ (non-leaf) node.
+
+</p><center>
+ <img src="images/fts3_interior_node.png">
+ <p> Segment B-Tree Interior Node Format
+</p></center>
+
+
+<h2 id="doclist_format"><span>9.4. </span>Doclist Format</h2>
+
+<p>
+ A doclist consists of an array of 64-bit signed integers, serialized using
+ the FTS varint format. Each doclist entry is made up of a series of two
+ or more integers, as follows:
+
+</p><ol>
+ <li> The docid value. The first entry in a doclist contains the literal docid
+ value. The first field of each subsequent doclist entry contains the
+ difference between the new docid and the previous one (always a positive
+ number).
+ </li><li> Zero or more term-offset lists. A term-offset list is present for each
+ column of the FTS virtual table that contains the term. A term-offset
+ list consists of the following:
+ <ol>
+ <li> Constant value 1. This field is omitted for any term-offset list
+ associated with column 0.
+ </li><li> The column number (1 for the second leftmost column, etc.). This
+ field is omitted for any term-offset list associated with column 0.
+ </li><li> A list of term-offsets, sorted from smallest to largest. Instead
+ of storing the term-offset value literally, each integer stored
+ is the difference between the current term-offset and the previous
+ one (or zero if the current term-offset is the first), plus 2.
+ </li></ol>
+ </li><li> Constant value 0.
+</li></ol>
+
+<center>
+ <img src="images/fts3_doclist2.png">
+ <p> FTS3 Doclist Format
+</p></center>
+
+<center>
+ <img src="images/fts3_doclist.png">
+ <p> FTS Doclist Entry Format
+</p></center>
+
+<p>
+ For doclists for which the term appears in more than one column of the FTS
+ virtual table, term-offset lists within the doclist are stored in column
+ number order. This ensures that the term-offset list associated with
+ column 0 (if any) is always first, allowing the first two fields of the
+ term-offset list to be omitted in this case.
+
+</p><a name="limitations"></a>
+<h1 tags="bugs" id="limitations"><span>10. </span>Limitations</h1>
+
+<h2 id="_utf_16_byte_order_mark_problem_"><span>10.1. </span> UTF-16 byte-order-mark problem </h2>
+
+For UTF-16 databases, when using the "simple" tokenizer, it is possible to use
+malformed unicode strings to cause the
+<a href="#integcheck">integrity-check special command</a> to falsely report
+corruption, or for <a href="#snippet">auxiliary functions</a> to return
+incorrect results. More specifically, the bug can be triggered by any of the following:
+
+<ul>
+ <li><p>A UTF-16 byte-order-mark (BOM) is embedded at the beginning of an SQL string
+ literal value inserted into an FTS3 table. For example:
+
+</p><div class="codeblock"><pre>INSERT INTO fts_table(col) VALUES(char(0xfeff)||'text...');
+</pre></div>
+
+ </li><li><p>Malformed UTF-8 that SQLite converts to a UTF-16 byte-order-mark is
+ embedded at the beginning of an SQL string literal value inserted
+ into an FTS3 table.
+
+ </p></li><li><p>A text value created by casting a blob that begins with the two
+ bytes 0xFF and 0xFE, in either possible order, is inserted into an
+ FTS3 table. For example:
+
+</p><div class="codeblock"><pre>INSERT INTO fts_table(col) VALUES(CAST(X'FEFF' AS TEXT));
+</pre></div>
+</li></ul>
+
+Everything works correctly if any of the following are true:
+<ul>
+<li> The <a href="pragma.html#pragma_encoding">database encoding</a> is UTF-8.
+</li><li> All text strings are insert using one of the
+ <a href="c3ref/bind_blob.html">sqlite3_bind_text()</a> family of functions.
+</li><li> Literal strings contain no byte-order-marks.
+</li><li> A tokenizer is used that recognizes byte-order-marks
+ as whitespace. (The default "simple" tokenizer for
+ FTS3/4 does not think that BOMs are whitespace, but
+ the unicode tokenizer does.)
+</li></ul>
+All of the above conditions must be false in order for problems
+to occur. And even if all of the conditiona above are false,
+most things will still operator correctly. Only the
+<a href="#integcheck">integrity-check</a> command and the
+<a href="#snippet">auxiliary functions</a> might given
+unexpected results.
+
+<a name="appendix_a"></a>
+<h1 id="appendix_a" nonumber="1" tags="search application tips">
+ Appendix A: Search Application Tips
+</h1>
+
+<p>
+ FTS is primarily designed to support Boolean full-text queries - queries
+ to find the set of documents that match a specified criteria. However, many
+ (most?) search applications require that results are somehow ranked in order
+ of "relevance", where "relevance" is defined as the likelihood that the user
+ who performed the search is interested in a specific element of the returned
+ set of documents. When using a search engine to find documents on the world
+ wide web, the user expects that the most useful, or "relevant", documents
+ will be returned as the first page of results, and that each subsequent page
+ contains progressively less relevant results. Exactly how a machine can
+ determine document relevance based on a users query is a complicated problem
+ and the subject of much ongoing research.
+
+</p><p>
+ One very simple scheme might be to count the number of instances of the
+ users search terms in each result document. Those documents that contain
+ many instances of the terms are considered more relevant than those with
+ a small number of instances of each term. In an FTS application, the
+ number of term instances in each result could be determined by counting
+ the number of integers in the return value of the <a href="fts3.html#offsets">offsets</a> function.
+ The following example shows a query that could be used to obtain the
+ ten most relevant results for a query entered by the user:
+
+</p><div class="codeblock"><pre><i>-- This example (and all others in this section) assumes the following schema</i>
+CREATE VIRTUAL TABLE documents USING fts3(title, content);
+
+<i>-- Assuming the application has supplied an SQLite user function named "countintegers"</i>
+<i>-- that returns the number of space-separated integers contained in its only argument,</i>
+<i>-- the following query could be used to return the titles of the 10 documents that contain</i>
+<i>-- the greatest number of instances of the users query terms. Hopefully, these 10</i>
+<i>-- documents will be those that the users considers more or less the most "relevant".</i>
+SELECT title FROM documents
+ WHERE documents MATCH &lt;query&gt;
+ ORDER BY countintegers(offsets(documents)) DESC
+ LIMIT 10 OFFSET 0
+</pre></div>
+
+<p>
+ The query above could be made to run faster by using the FTS <a href="fts3.html#matchinfo">matchinfo</a>
+ function to determine the number of query term instances that appear in each
+ result. The matchinfo function is much more efficient than the offsets
+ function. Furthermore, the matchinfo function provides extra information
+ regarding the overall number of occurrences of each query term in the entire
+ document set (not just the current row) and the number of documents in which
+ each query term appears. This may be used (for example) to attach a higher
+ weight to less common terms which may increase the overall computed relevancy
+ of those results the user considers more interesting.
+
+</p><div class="codeblock"><pre><i>-- If the application supplies an SQLite user function called "rank" that</i>
+<i>-- interprets the blob of data returned by matchinfo and returns a numeric</i>
+<i>-- relevancy based on it, then the following SQL may be used to return the</i>
+<i>-- titles of the 10 most relevant documents in the dataset for a users query.</i>
+SELECT title FROM documents
+ WHERE documents MATCH &lt;query&gt;
+ ORDER BY rank(matchinfo(documents)) DESC
+ LIMIT 10 OFFSET 0
+</pre></div>
+
+<p>
+ The SQL query in the example above uses less CPU than the first example
+ in this section, but still has a non-obvious performance problem. SQLite
+ satisfies this query by retrieving the value of the "title" column and
+ matchinfo data from the FTS module for every row matched by the users
+ query before it sorts and limits the results. Because of the way SQLite's
+ virtual table interface works, retrieving the value of the "title" column
+ requires loading the entire row from disk (including the "content" field,
+ which may be quite large). This means that if the users query matches
+ several thousand documents, many megabytes of "title" and "content" data
+ may be loaded from disk into memory even though they will never be used
+ for any purpose.
+
+</p><p>
+ The SQL query in the following example block is one solution to this
+ problem. In SQLite, when a <a href="optoverview.html#flattening">sub-query
+ used in a join contains a LIMIT clause</a>, the results of the sub-query are
+ calculated and stored in temporary table before the main query is executed.
+ This means that SQLite will load only the docid and matchinfo data for each
+ row matching the users query into memory, determine the docid values
+ corresponding to the ten most relevant documents, then load only the title
+ and content information for those 10 documents only. Because both the matchinfo
+ and docid values are gleaned entirely from the full-text index, this results
+ in dramatically less data being loaded from the database into memory.
+
+</p><div class="codeblock"><pre>SELECT title FROM documents JOIN (
+ SELECT docid, rank(matchinfo(documents)) AS rank
+ FROM documents
+ WHERE documents MATCH &lt;query&gt;
+ ORDER BY rank DESC
+ LIMIT 10 OFFSET 0
+) AS ranktable USING(docid)
+ORDER BY ranktable.rank DESC
+</pre></div>
+
+<p>
+ The next block of SQL enhances the query with solutions to two other problems
+ that may arise in developing search applications using FTS:
+
+</p><ol>
+ <li> <p>
+ The <a href="fts3.html#snippet">snippet</a> function cannot be used with the above query. Because
+ the outer query does not include a "WHERE ... MATCH" clause, the snippet
+ function may not be used with it. One solution is to duplicate the WHERE
+ clause used by the sub-query in the outer query. The overhead associated
+ with this is usually negligible.
+ </p></li><li> <p>
+ The relevancy of a document may depend on something other than just
+ the data available in the return value of matchinfo. For example
+ each document in the database may be assigned a static weight based
+ on factors unrelated to its content (origin, author, age, number
+ of references etc.). These values can be stored by the application
+ in a separate table that can be joined against the documents table
+ in the sub-query so that the rank function may access them.
+</p></li></ol>
+
+<p>
+ This version of the query is very similar to that used by the
+ <a href="http://www.sqlite.org/search?q=fts3">sqlite.org documentation search</a>
+ application.
+
+</p><div class="codeblock"><pre><i>-- This table stores the static weight assigned to each document in FTS table</i>
+<i>-- "documents". For each row in the documents table there is a corresponding row</i>
+<i>-- with the same docid value in this table.</i>
+CREATE TABLE documents_data(docid INTEGER PRIMARY KEY, weight);
+
+<i>-- This query is similar to the one in the block above, except that:</i>
+<i>--</i>
+<i>-- 1. It returns a "snippet" of text along with the document title for display. So</i>
+<i>-- that the snippet function may be used, the "WHERE ... MATCH ..." clause from</i>
+<i>-- the sub-query is duplicated in the outer query.</i>
+<i>--</i>
+<i>-- 2. The sub-query joins the documents table with the document_data table, so that</i>
+<i>-- implementation of the rank function has access to the static weight assigned</i>
+<i>-- to each document.</i>
+SELECT title, snippet(documents) FROM documents JOIN (
+ SELECT docid, rank(matchinfo(documents), documents_data.weight) AS rank
+ FROM documents JOIN documents_data USING(docid)
+ WHERE documents MATCH &lt;query&gt;
+ ORDER BY rank DESC
+ LIMIT 10 OFFSET 0
+) AS ranktable USING(docid)
+WHERE documents MATCH &lt;query&gt;
+ORDER BY ranktable.rank DESC
+</pre></div>
+
+<p>
+ All the example queries above return the ten most relevant query results.
+ By modifying the values used with the OFFSET and LIMIT clauses, a query
+ to return (say) the next ten most relevant results is easy to construct.
+ This may be used to obtain the data required for a search applications second
+ and subsequent pages of results.
+
+</p><p>
+ The next block contains an example rank function that uses matchinfo data
+ implemented in C. Instead of a single weight, it allows a weight to be
+ externally assigned to each column of each document. It may be registered
+ with SQLite like any other user function using <a href="c3ref/create_function.html">sqlite3_create_function</a>.
+
+</p><p><b> Security Warning:</b> Because it is just an ordinary SQL function,
+ rank() may be invoked as part of any SQL query in any context. This means
+ that the first argument passed may not be a valid matchinfo blob.
+ Implementors should take care to handle this case without causing buffer
+ overruns or other potential security problems.
+
+</p><div class="codeblock"><pre><i>/*</i>
+<i>** SQLite user defined function to use with matchinfo() to calculate the</i>
+<i>** relevancy of an FTS match. The value returned is the relevancy score</i>
+<i>** (a real value greater than or equal to zero). A larger value indicates </i>
+<i>** a more relevant document.</i>
+<i>**</i>
+<i>** The overall relevancy returned is the sum of the relevancies of each </i>
+<i>** column value in the FTS table. The relevancy of a column value is the</i>
+<i>** sum of the following for each reportable phrase in the FTS query:</i>
+<i>**</i>
+<i>** (&lt;hit count&gt; / &lt;global hit count&gt;) * &lt;column weight&gt;</i>
+<i>**</i>
+<i>** where &lt;hit count&gt; is the number of instances of the phrase in the</i>
+<i>** column value of the current row and &lt;global hit count&gt; is the number</i>
+<i>** of instances of the phrase in the same column of all rows in the FTS</i>
+<i>** table. The &lt;column weight&gt; is a weighting factor assigned to each</i>
+<i>** column by the caller (see below).</i>
+<i>**</i>
+<i>** The first argument to this function must be the return value of the FTS </i>
+<i>** matchinfo() function. Following this must be one argument for each column </i>
+<i>** of the FTS table containing a numeric weight factor for the corresponding </i>
+<i>** column. Example:</i>
+<i>**</i>
+<i>** CREATE VIRTUAL TABLE documents USING fts3(title, content)</i>
+<i>**</i>
+<i>** The following query returns the docids of documents that match the full-text</i>
+<i>** query &lt;query&gt; sorted from most to least relevant. When calculating</i>
+<i>** relevance, query term instances in the 'title' column are given twice the</i>
+<i>** weighting of those in the 'content' column.</i>
+<i>**</i>
+<i>** SELECT docid FROM documents </i>
+<i>** WHERE documents MATCH &lt;query&gt; </i>
+<i>** ORDER BY rank(matchinfo(documents), 1.0, 0.5) DESC</i>
+<i>*/</i>
+static void rankfunc(sqlite3_context *pCtx, int nVal, sqlite3_value **apVal){
+ int *aMatchinfo; <i>/* Return value of matchinfo() */</i>
+ int nMatchinfo; <i>/* Number of elements in aMatchinfo&#x5B;&#x5D; */</i>
+ int nCol = 0; <i>/* Number of columns in the table */</i>
+ int nPhrase = 0; <i>/* Number of phrases in the query */</i>
+ int iPhrase; <i>/* Current phrase */</i>
+ double score = 0.0; <i>/* Value to return */</i>
+
+ assert( sizeof(int)==4 );
+
+<i> /* Check that the number of arguments passed to this function is correct.</i>
+<i> ** If not, jump to wrong_number_args. Set aMatchinfo to point to the array</i>
+<i> ** of unsigned integer values returned by FTS function matchinfo. Set</i>
+<i> ** nPhrase to contain the number of reportable phrases in the users full-text</i>
+<i> ** query, and nCol to the number of columns in the table. Then check that the</i>
+<i> ** size of the matchinfo blob is as expected. Return an error if it is not.</i>
+<i> */</i>
+ if( nVal&lt;1 ) goto wrong_number_args;
+ aMatchinfo = (unsigned int *)sqlite3_value_blob(apVal&#x5B;0&#x5D;);
+ nMatchinfo = sqlite3_value_bytes(apVal&#x5B;0&#x5D;) / sizeof(int);
+ if( nMatchinfo&gt;=2 ){
+ nPhrase = aMatchinfo&#x5B;0&#x5D;;
+ nCol = aMatchinfo&#x5B;1&#x5D;;
+ }
+ if( nMatchinfo!=(2+3*nCol*nPhrase) ){
+ sqlite3_result_error(pCtx,
+ "invalid matchinfo blob passed to function rank()", -1);
+ return;
+ }
+ if( nVal!=(1+nCol) ) goto wrong_number_args;
+
+<i> /* Iterate through each phrase in the users query. */</i>
+ for(iPhrase=0; iPhrase&lt;nPhrase; iPhrase++){
+ int iCol; <i>/* Current column */</i>
+
+<i> /* Now iterate through each column in the users query. For each column,</i>
+<i> ** increment the relevancy score by:</i>
+<i> **</i>
+<i> ** (&lt;hit count&gt; / &lt;global hit count&gt;) * &lt;column weight&gt;</i>
+<i> **</i>
+<i> ** aPhraseinfo&#x5B;&#x5D; points to the start of the data for phrase iPhrase. So</i>
+<i> ** the hit count and global hit counts for each column are found in </i>
+<i> ** aPhraseinfo&#x5B;iCol*3&#x5D; and aPhraseinfo&#x5B;iCol*3+1&#x5D;, respectively.</i>
+<i> */</i>
+ int *aPhraseinfo = &aMatchinfo&#x5B;2 + iPhrase*nCol*3&#x5D;;
+ for(iCol=0; iCol&lt;nCol; iCol++){
+ int nHitCount = aPhraseinfo&#x5B;3*iCol&#x5D;;
+ int nGlobalHitCount = aPhraseinfo&#x5B;3*iCol+1&#x5D;;
+ double weight = sqlite3_value_double(apVal&#x5B;iCol+1&#x5D;);
+ if( nHitCount>0 ){
+ score += ((double)nHitCount / (double)nGlobalHitCount) * weight;
+ }
+ }
+ }
+
+ sqlite3_result_double(pCtx, score);
+ return;
+
+<i> /* Jump here if the wrong number of arguments are passed to this function */</i>
+wrong_number_args:
+ sqlite3_result_error(pCtx, "wrong number of arguments to function rank()", -1);
+}
+</pre></div>
+</integer></language-id><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/fts3.in?m=8a8aa7fb8b4ab5e5a">2022-08-10 18:11:15</a> UTC </small></i></p>
+
diff --git a/www/fts5.html b/www/fts5.html
new file mode 100644
index 0000000..36f3379
--- /dev/null
+++ b/www/fts5.html
@@ -0,0 +1,3364 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite FTS5 Extension</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite FTS5 Extension
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview_of_fts5">1. Overview of FTS5</a></div>
+<div class="fancy-toc1"><a href="#compiling_and_using_fts5">2. Compiling and Using FTS5</a></div>
+<div class="fancy-toc2"><a href="#building_fts5_as_part_of_sqlite">2.1. Building FTS5 as part of SQLite</a></div>
+<div class="fancy-toc2"><a href="#building_a_loadable_extension">2.2. Building a Loadable Extension</a></div>
+<div class="fancy-toc1"><a href="#full_text_query_syntax">3. Full-text Query Syntax</a></div>
+<div class="fancy-toc2"><a href="#fts5_strings">3.1. FTS5 Strings</a></div>
+<div class="fancy-toc2"><a href="#fts5_phrases">3.2. FTS5 Phrases</a></div>
+<div class="fancy-toc2"><a href="#fts5_prefix_queries">3.3. FTS5 Prefix Queries</a></div>
+<div class="fancy-toc2"><a href="#fts5_initial_token_queries">3.4. FTS5 Initial Token Queries</a></div>
+<div class="fancy-toc2"><a href="#fts5_near_queries">3.5. FTS5 NEAR Queries</a></div>
+<div class="fancy-toc2"><a href="#fts5_column_filters">3.6. FTS5 Column Filters</a></div>
+<div class="fancy-toc2"><a href="#fts5_boolean_operators">3.7. FTS5 Boolean Operators</a></div>
+<div class="fancy-toc1"><a href="#fts5_table_creation_and_initialization">4. FTS5 Table Creation and Initialization</a></div>
+<div class="fancy-toc2"><a href="#the_unindexed_column_option">4.1. The UNINDEXED column option</a></div>
+<div class="fancy-toc2"><a href="#prefix_indexes">4.2. Prefix Indexes</a></div>
+<div class="fancy-toc2"><a href="#tokenizers">4.3. Tokenizers</a></div>
+<div class="fancy-toc3"><a href="#unicode61_tokenizer">4.3.1. Unicode61 Tokenizer</a></div>
+<div class="fancy-toc3"><a href="#ascii_tokenizer">4.3.2. Ascii Tokenizer</a></div>
+<div class="fancy-toc3"><a href="#porter_tokenizer">4.3.3. Porter Tokenizer</a></div>
+<div class="fancy-toc3"><a href="#the_experimental_trigram_tokenizer">4.3.4. The Experimental Trigram Tokenizer</a></div>
+<div class="fancy-toc2"><a href="#external_content_and_contentless_tables">4.4. External Content and Contentless Tables</a></div>
+<div class="fancy-toc3"><a href="#contentless_tables">4.4.1. Contentless Tables</a></div>
+<div class="fancy-toc3"><a href="#external_content_tables">4.4.2. External Content Tables</a></div>
+<div class="fancy-toc2"><a href="#the_columnsize_option">4.5. The Columnsize Option</a></div>
+<div class="fancy-toc2"><a href="#the_detail_option">4.6. The Detail Option</a></div>
+<div class="fancy-toc1"><a href="#_auxiliary_functions_">5. Auxiliary Functions </a></div>
+<div class="fancy-toc2"><a href="#built_in_auxiliary_functions">5.1. Built-in Auxiliary Functions</a></div>
+<div class="fancy-toc3"><a href="#the_bm25_function">5.1.1. The bm25() function</a></div>
+<div class="fancy-toc3"><a href="#the_highlight_function">5.1.2. The highlight() function</a></div>
+<div class="fancy-toc3"><a href="#the_snippet_function">5.1.3. The snippet() function</a></div>
+<div class="fancy-toc2"><a href="#sorting_by_auxiliary_function_results">5.2. Sorting by Auxiliary Function Results</a></div>
+<div class="fancy-toc1"><a href="#special_insert_commands">6. Special INSERT Commands</a></div>
+<div class="fancy-toc2"><a href="#the_automerge_configuration_option">6.1. The 'automerge' Configuration Option</a></div>
+<div class="fancy-toc2"><a href="#the_crisismerge_configuration_option">6.2. The 'crisismerge' Configuration Option</a></div>
+<div class="fancy-toc2"><a href="#the_delete_command">6.3. The 'delete' Command</a></div>
+<div class="fancy-toc2"><a href="#the_delete_all_command">6.4. The 'delete-all' Command</a></div>
+<div class="fancy-toc2"><a href="#the_integrity_check_command">6.5. The 'integrity-check' Command</a></div>
+<div class="fancy-toc2"><a href="#the_merge_command">6.6. The 'merge' Command</a></div>
+<div class="fancy-toc2"><a href="#the_optimize_command">6.7. The 'optimize' Command</a></div>
+<div class="fancy-toc2"><a href="#the_pgsz_configuration_option">6.8. The 'pgsz' Configuration Option</a></div>
+<div class="fancy-toc2"><a href="#the_rank_configuration_option">6.9. The 'rank' Configuration Option</a></div>
+<div class="fancy-toc2"><a href="#the_rebuild_command">6.10. The 'rebuild' Command</a></div>
+<div class="fancy-toc2"><a href="#the_usermerge_configuration_option">6.11. The 'usermerge' Configuration Option</a></div>
+<div class="fancy-toc1"><a href="#extending_fts5">7. Extending FTS5</a></div>
+<div class="fancy-toc2"><a href="#custom_tokenizers">7.1. Custom Tokenizers</a></div>
+<div class="fancy-toc3"><a href="#synonym_support">7.1.1. Synonym Support</a></div>
+<div class="fancy-toc2"><a href="#custom_auxiliary_functions">7.2. Custom Auxiliary Functions</a></div>
+<div class="fancy-toc3"><a href="#_custom_auxiliary_functions_api_reference_">7.2.1.
+Custom Auxiliary Functions API Reference
+</a></div>
+<div class="fancy-toc1"><a href="#the_fts5vocab_virtual_table_module">8. The fts5vocab Virtual Table Module</a></div>
+<div class="fancy-toc1"><a href="#fts5_data_structures">9. FTS5 Data Structures</a></div>
+<div class="fancy-toc2"><a href="#varint_format">9.1. Varint Format</a></div>
+<div class="fancy-toc2"><a href="#the_fts_index_idx_and_data_tables_">9.2. The FTS Index (%_idx and %_data tables)</a></div>
+<div class="fancy-toc3"><a href="#data_structure">9.2.1. The %_data Table Rowid Space</a></div>
+<div class="fancy-toc3"><a href="#structure_record_format">9.2.2. Structure Record Format</a></div>
+<div class="fancy-toc3"><a href="#averages_record_format">9.2.3. Averages Record Format</a></div>
+<div class="fancy-toc3"><a href="#segment_b_tree_format">9.2.4. Segment B-Tree Format</a></div>
+<div class="fancy-toc4"><a href="#the_key_doclist_format">9.2.4.1. The Key/Doclist Format</a></div>
+<div class="fancy-toc4"><a href="#data_pagination">9.2.4.2. Pagination</a></div>
+<div class="fancy-toc4"><a href="#data_term_index">9.2.4.3. Segment Index Format</a></div>
+<div class="fancy-toc4"><a href="#doclist_index_format">9.2.4.4. Doclist Index Format</a></div>
+<div class="fancy-toc2"><a href="#document_sizes_table_docsize_table_">9.3. Document Sizes Table (%_docsize table)</a></div>
+<div class="fancy-toc2"><a href="#the_table_contents_content_table_">9.4. The Table Contents (%_content table)</a></div>
+<div class="fancy-toc2"><a href="#configuration_options_config_table_">9.5. Configuration Options (%_config table)</a></div>
+<div class="fancy-toc1"><a href="#appendix_a">
+Appendix A: Comparison with FTS3/4
+</a></div>
+<div class="fancy-toc2"><a href="#_application_porting_guide_"> Application Porting Guide </a></div>
+<div class="fancy-toc3"><a href="#_changes_to_create_virtual_table_statements_"> Changes to CREATE VIRTUAL TABLE statements </a></div>
+<div class="fancy-toc3"><a href="#_changes_to_select_statements_"> Changes to SELECT statements </a></div>
+<div class="fancy-toc3"><a href="#_auxiliary_function_changes_"> Auxiliary Function Changes </a></div>
+<div class="fancy-toc3"><a href="#_other_issues"> Other Issues</a></div>
+<div class="fancy-toc2"><a href="#_summary_of_technical_differences_">
+Summary of Technical Differences
+</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+
+<h1 id="overview_of_fts5"><span>1. </span>Overview of FTS5</h1>
+
+<p>FTS5 is an SQLite <a href="c3ref/module.html">virtual table module</a> that provides
+<a href="http://en.wikipedia.org/wiki/Full_text_search">full-text search</a>
+functionality to database applications. In their most elementary form,
+full-text search engines allow the user to efficiently search a large
+collection of documents for the subset that contain one or more instances of a
+search term. The search functionality provided to world wide web users by
+<a href="https://www.google.com/">Google</a> is, among other things, a full-text search
+engine, as it allows users to search for all documents on the web that contain,
+for example, the term "fts5".
+
+</p><p>To use FTS5, the user creates an FTS5 virtual table with one or more
+columns. For example:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE email USING fts5(sender, title, body);
+</pre></div>
+
+<p>It is an error to add types, constraints or <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> declarations to
+a CREATE VIRTUAL TABLE statement used to create an FTS5 table. Once created,
+an FTS5 table may be populated using <a href="lang_insert.html">INSERT</a>, <a href="lang_update.html">UPDATE</a> or <a href="lang_delete.html">DELETE</a> statements
+like any other table. Like any other table with no PRIMARY KEY declaration, an
+FTS5 table has an implicit INTEGER PRIMARY KEY field named rowid.
+
+</p><p>Not shown in the example above is that there are also
+<a href="fts5.html#fts5_table_creation_and_initialization">various options</a> that may be provided to FTS5 as
+part of the CREATE VIRTUAL TABLE statement to configure various aspects of the
+new table. These may be used to modify the way in which the FTS5 table extracts
+terms from documents and queries, to create extra indexes on disk to speed up
+prefix queries, or to create an FTS5 table that acts as an index on content
+stored elsewhere.
+
+</p><p>Once populated, there are three ways to execute a full-text query against
+the contents of an FTS5 table:
+
+</p><ul><li> Using a MATCH operator in the WHERE clause of a SELECT statement, or
+ </li><li> Using an equals ("=") operator in the WHERE clause of a SELECT statement, or
+ </li><li> using the <a href="vtab.html#tabfunc2">table-valued function</a> syntax.
+</li></ul>
+
+<p>If using the MATCH or = operators, the expression to the left of the MATCH
+ operator is usually the name of the FTS5 table (the exception is when
+ <a href="fts5.html#fts5_column_filters">specifying a column-filter</a>). The expression on the right
+ must be a text value specifying the term to search for. For the table-valued
+ function syntax, the term to search for is specified as the first table argument.
+ For example:
+
+</p><div class="codeblock"><pre><i>-- Query for all rows that contain at least once instance of the term</i>
+<i>-- "fts5" (in any column). The following three queries are equivalent.</i>
+SELECT * FROM email WHERE email MATCH 'fts5';
+SELECT * FROM email WHERE email = 'fts5';
+SELECT * FROM email('fts5');
+</pre></div>
+
+<p> By default, FTS5 full-text searches are case-independent. Like any other
+SQL query that does not contain an ORDER BY clause, the example above returns
+results in an arbitrary order. To sort results by relevance (most to least
+relevant), an ORDER BY may be added to a full-text query as follows:
+
+</p><div class="codeblock"><pre><i>-- Query for all rows that contain at least once instance of the term</i>
+<i>-- "fts5" (in any column). Return results in order from best to worst</i>
+<i>-- match. </i>
+SELECT * FROM email WHERE email MATCH 'fts5' ORDER BY rank;
+</pre></div>
+
+<p> As well as the column values and rowid of a matching row, an application
+may use <a href="fts5.html#_auxiliary_functions_">FTS5 auxiliary functions</a> to retrieve extra information regarding
+the matched row. For example, an auxiliary function may be used to retrieve
+a copy of a column value for a matched row with all instances of the matched
+term surrounded by html &lt;b&gt;&lt;/b&gt; tags. Auxiliary functions are
+invoked in the same way as SQLite <a href="lang_corefunc.html">scalar functions</a>, except that the name
+of the FTS5 table is specified as the first argument. For example:
+
+</p><div class="codeblock"><pre><i>-- Query for rows that match "fts5". Return a copy of the "body" column</i>
+<i>-- of each row with the matches surrounded by &lt;b&gt;&lt;/b&gt; tags.</i>
+SELECT highlight(email, 2, '&lt;b&gt;', '&lt;/b&gt;') FROM email('fts5');
+</pre></div>
+
+<p>A description of the available auxiliary functions, and more details
+regarding configuration of the special "rank" column, are
+<a href="fts5.html#_auxiliary_functions_">available below</a>. <a href="fts5.html#custom_auxiliary_functions">Custom auxiliary functions</a> may also be implemented in C and registered with
+FTS5, just as custom SQL functions may be registered with the SQLite core.
+
+</p><p> As well as searching for all rows that contain a term, FTS5 allows
+the user to search for rows that contain:
+
+</p><ul>
+ <li> any terms that begin with a specified prefix,
+ </li><li> "phrases" - sequences of terms or prefix terms that must feature in a
+ document for it to match the query,
+ </li><li> sets of terms, prefix terms or phrases that appear within a specified
+ proximity of each other (these are called "NEAR queries"), or
+ </li><li> boolean combinations of any of the above.
+</li></ul>
+
+<p> Such advanced searches are requested by providing a more complicated
+FTS5 query string as the text to the right of the MATCH operator (or =
+operator, or as the first argument to a table-valued function syntax). The
+full query syntax is <a href="fts5.html#full_text_query_syntax">described here</a>.
+
+</p><a name="compiling_and_using_fts5"></a>
+<h1 tags="FTS5 building" id="compiling_and_using_fts5"><span>2. </span>Compiling and Using FTS5</h1>
+
+<h2 id="building_fts5_as_part_of_sqlite"><span>2.1. </span>Building FTS5 as part of SQLite</h2>
+
+<p>As of <a href="releaselog/3_9_0.html">version 3.9.0</a> (2015-10-14),
+FTS5 is included as part of the SQLite <a href="amalgamation.html">amalgamation</a>.
+If using one of the two autoconf build system, FTS5 is
+enabled by specifying the "--enable-fts5" option when running the configure
+script. (FTS5 is currently disabled by default for the
+source-tree configure script and enabled by default for
+the amalgamation configure script, but these defaults might
+change in the future.)
+
+</p><p>Or, if sqlite3.c is compiled using some other build system, by arranging for
+the SQLITE_ENABLE_FTS5 pre-processor symbol to be defined.
+
+</p><h2 id="building_a_loadable_extension"><span>2.2. </span>Building a Loadable Extension</h2>
+
+<p>Alternatively, FTS5 may be built as a loadable extension.
+
+</p><p>The canonical FTS5 source code consists of a series of *.c and other files
+in the "ext/fts5" directory of the SQLite source tree. A build process reduces
+this to just two files - "fts5.c" and "fts5.h" - which may be used to build an
+SQLite loadable extension.
+
+</p><ol>
+ <li> Obtain the latest SQLite code from fossil.
+ </li><li> Create a Makefile as described in <a href="howtocompile.html">How To Compile SQLite</a>.
+ </li><li> Build the "fts5.c" target. Which also creates fts5.h.
+</li></ol>
+
+<div class="codeblock"><pre>$ wget -c http://www.sqlite.org/src/tarball/SQLite-trunk.tgz?uuid=trunk -O SQLite-trunk.tgz
+.... output ...
+$ tar -xzf SQLite-trunk.tgz
+$ cd SQLite-trunk
+$ ./configure && make fts5.c
+... lots of output ...
+$ ls fts5.&#91;ch]
+fts5.c fts5.h
+</pre></div>
+
+<p>
+ The code in "fts5.c" may then be compiled into a loadable extension or
+ statically linked into an application as described in
+ <a href="loadext.html#build">Compiling Loadable Extensions</a>. There are two entry points defined, both
+ of which do the same thing:
+
+</p><ul>
+ <li> sqlite3_fts_init
+ </li><li> sqlite3_fts5_init
+</li></ul>
+
+<p>
+ The other file, "fts5.h", is not required to compile the FTS5 extension.
+ It is used by applications that implement <a href="fts5.html#extending_fts5">custom FTS5 tokenizers or auxiliary functions</a>.
+
+</p><a name="full_text_query_syntax"></a>
+<h1 tags="FTS5 query syntax" id="full_text_query_syntax"><span>3. </span>Full-text Query Syntax</h1>
+
+<p>
+The following block contains a summary of the FTS query syntax in BNF form.
+A detailed explanation follows.
+
+</p><div class="codeblock"><pre>&lt;phrase&gt; := string &#91;*]
+&lt;phrase&gt; := &lt;phrase&gt; + &lt;phrase&gt;
+&lt;neargroup&gt; := NEAR ( &lt;phrase&gt; &lt;phrase&gt; ... &#91;, N] )
+&lt;query&gt; := &#91; &#91;-] &lt;colspec&gt; :] &#91;&#94;] &lt;phrase&gt;
+&lt;query&gt; := &#91; &#91;-] &lt;colspec&gt; :] &lt;neargroup&gt;
+&lt;query&gt; := &#91; &#91;-] &lt;colspec&gt; :] ( &lt;query&gt; )
+&lt;query&gt; := &lt;query&gt; AND &lt;query&gt;
+&lt;query&gt; := &lt;query&gt; OR &lt;query&gt;
+&lt;query&gt; := &lt;query&gt; NOT &lt;query&gt;
+&lt;colspec&gt; := colname
+&lt;colspec&gt; := { colname1 colname2 ... }
+</pre></div>
+
+<a name="fts5_strings"></a>
+<h2 tags="FTS5 Strings" id="fts5_strings"><span>3.1. </span>FTS5 Strings</h2>
+<p>
+Within an FTS expression a <b>string</b> may be specified in one of two ways:
+
+</p><ul>
+ <li> <p>By enclosing it in double quotes ("). Within a string, any embedded
+ double quote characters may be escaped SQL-style - by adding a second
+ double-quote character.
+
+ </p></li><li> <p>As an FTS5 bareword that is not "AND", "OR" or "NOT" (case sensitive).
+ An FTS5 bareword is a string of one or more consecutive characters that
+ are all either:
+
+ </p><ul>
+ <li> Non-ASCII range characters (i.e. unicode codepoints greater
+ than 127), or
+ </li><li> One of the 52 upper and lower case ASCII characters, or
+ </li><li> One of the 10 decimal digit ASCII characters, or
+ </li><li> The underscore character (unicode codepoint 96).
+ </li><li> The substitute character (unicode codepoint 26).
+ </li></ul>
+
+ Strings that include any other characters must be quoted. Characters
+ that are not currently allowed in barewords, are not quote characters and
+ do not currently serve any special purpose in FTS5 query expressions may
+ at some point in the future be allowed in barewords or used to implement
+ new query functionality. This means that queries that are currently
+ syntax errors because they include such a character outside of a quoted
+ string may be interpreted differently by some future version of FTS5.
+</li></ul>
+
+<a name="fts5_phrases"></a>
+<h2 tags="FTS5 Phrases" id="fts5_phrases"><span>3.2. </span>FTS5 Phrases</h2>
+<p>
+FTS queries are made up of <b>phrases</b>. A phrase is an ordered list of
+one or more tokens. A string is transformed into a phrase by passing it to
+the FTS table tokenizer. Two phrases can be concatenated into a single
+large phrase using the "+" operator. For example, assuming the tokenizer
+module being used tokenizes the input "one.two.three" to three separate
+tokens, the following four queries all specify the same phrase:
+
+</p><div class="codeblock"><pre>... MATCH '"one two three"'
+... MATCH 'one + two + three'
+... MATCH '"one two" + three'
+... MATCH 'one.two.three'
+</pre></div>
+
+<p>
+A phrase matches a document if the document contains at least one sub-sequence
+of tokens that matches the sequence of tokens that make up the phrase.
+
+</p><a name="fts5_prefix_queries"></a>
+<h2 tags="FTS5 prefix queries" id="fts5_prefix_queries"><span>3.3. </span>FTS5 Prefix Queries</h2>
+<p>
+If a "*" character follows a string within an FTS expression, then the final
+token extracted from the string is marked as a <b>prefix token</b>. As you
+might expect, a prefix token matches any document token of which it is a
+prefix. For example, the first two queries in the following block will match
+any document that contains the token "one" immediately followed by the token
+"two" and then any token that begins with "thr".
+
+</p><div class="codeblock"><pre>... MATCH '"one two thr" * '
+... MATCH 'one + two + thr*'
+... MATCH '"one two thr*"' <b>-- May not work as expected!</b>
+</pre></div>
+
+<p>The final query in the block above may not work as expected. Because the
+"*" character is inside the double-quotes, it will be passed to the tokenizer,
+which will likely discard it (or perhaps, depending on the specific tokenizer
+in use, include it as part of the final token) instead of recognizing it as
+a special FTS character.
+
+<a name="carrotq"></a>
+
+</p><a name="fts5_initial_token_queries"></a>
+<h2 tags="FTS5 initial token queries" id="fts5_initial_token_queries"><span>3.4. </span>FTS5 Initial Token Queries</h2>
+<p>
+If a "&#94;" character appears immediately before a phrase that is not part of a
+NEAR query, then that phrase only matches a document only if it starts at the
+first token in a column. The "&#94;" syntax may be combined with a
+<a href="fts5.html#fts5_column_filters">column filter</a>, but may not be inserted into the middle of
+a phrase.
+
+</p><div class="codeblock"><pre>... MATCH '&#94;one' <i>-- first token in any column must be "one"</i>
+... MATCH '&#94; one + two' <i>-- phrase "one two" must appear at start of a column</i>
+... MATCH '&#94; "one two"' <i>-- same as previous </i>
+... MATCH 'a : &#94;two' <i>-- first token of column "a" must be "two"</i>
+... MATCH 'NEAR(&#94;one, two)' <b>-- syntax error! </b>
+... MATCH 'one + &#94;two' <b>-- syntax error! </b>
+... MATCH '"&#94;one two"' <b>-- May not work as expected!</b>
+</pre></div>
+
+<a name="fts5_near_queries"></a>
+<h2 tags="FTS5 NEAR queries" id="fts5_near_queries"><span>3.5. </span>FTS5 NEAR Queries</h2>
+
+<p>Two or more phrases may be grouped into a <b>NEAR group</b>. A NEAR group
+is specified by the token "NEAR" (case sensitive) followed by an open
+parenthesis character, followed by two or more whitespace separated phrases, optionally followed by a comma and the numeric parameter <i>N</i>, followed by
+a close parenthesis. For example:
+
+</p><div class="codeblock"><pre>... MATCH 'NEAR("one two" "three four", 10)'
+... MATCH 'NEAR("one two" thr* + four)'
+</pre></div>
+
+<p>If no <i>N</i> parameter is supplied, it defaults to 10. A NEAR group
+matches a document if the document contains at least one clump of tokens that:
+
+</p><ol>
+ <li> contains at least one instance of each phrase, and
+ </li><li> for which the number of tokens between the end of the first phrase
+ and the beginning of the last phrase in the clump is less than or equal to <i>N</i>.
+</li></ol>
+
+<p>For example:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE f USING fts5(x);
+INSERT INTO f(rowid, x) VALUES(1, 'A B C D x x x E F x');
+
+... MATCH 'NEAR(e d, 4)'; <i>-- Matches!</i>
+... MATCH 'NEAR(e d, 3)'; <i>-- Matches!</i>
+... MATCH 'NEAR(e d, 2)'; <i>-- Does not match!</i>
+
+... MATCH 'NEAR("c d" "e f", 3)'; <i>-- Matches!</i>
+... MATCH 'NEAR("c" "e f", 3)'; <i>-- Does not match!</i>
+
+... MATCH 'NEAR(a d e, 6)'; <i>-- Matches!</i>
+... MATCH 'NEAR(a d e, 5)'; <i>-- Does not match!</i>
+
+... MATCH 'NEAR("a b c d" "b c" "e f", 4)'; <i>-- Matches!</i>
+... MATCH 'NEAR("a b c d" "b c" "e f", 3)'; <i>-- Does not match!</i>
+</pre></div>
+
+<a name="fts5_column_filters"></a>
+<h2 tags="FTS5 column filters" id="fts5_column_filters"><span>3.6. </span>FTS5 Column Filters</h2>
+
+<p>
+A single phrase or NEAR group may be restricted to matching text within a
+specified column of the FTS table by prefixing it with the column name
+followed by a colon character. Or to a set of columns by prefixing it
+with a whitespace separated list of column names enclosed in parenthesis
+("curly brackets") followed by a colon character. Column names may be specified
+using either of the two forms described for strings above. Unlike strings that
+are part of phrases, column names are not passed to the tokenizer module.
+Column names are case-insensitive in the usual way for SQLite column names -
+upper/lower case equivalence is understood for ASCII-range characters only.
+
+</p><div class="codeblock"><pre>... MATCH 'colname : NEAR("one two" "three four", 10)'
+... MATCH '"colname" : one + two + three'
+
+... MATCH '{col1 col2} : NEAR("one two" "three four", 10)'
+... MATCH '{col2 col1 col3} : one + two + three'
+</pre></div>
+
+<p>
+If a column filter specification is preceded by a "-" character, then
+it is interpreted as a list of column not to match against. For example:
+
+</p><div class="codeblock"><pre><i>-- Search for matches in all columns except "colname"</i>
+... MATCH '- colname : NEAR("one two" "three four", 10)'
+
+<i>-- Search for matches in all columns except "col1", "col2" and "col3"</i>
+... MATCH '- {col2 col1 col3} : one + two + three'
+</pre></div>
+
+<p>
+Column filter specifications may also be applied to arbitrary expressions
+enclosed in parenthesis. In this case the column filter applies to all
+phrases within the expression. Nested column filter operations may only
+further restrict the subset of columns matched, they can not be used to
+re-enable filtered columns. For example:
+
+</p><div class="codeblock"><pre><i>-- The following are equivalent:</i>
+... MATCH '{a b} : ( {b c} : "hello" AND "world" )'
+... MATCH '(b : "hello") AND ({a b} : "world")'
+</pre></div>
+
+<p>
+Finally, a column filter for a single column may be specified by using
+the column name as the LHS of a MATCH operator (instead of the usual
+table name). For example:
+
+</p><div class="codeblock"><pre><i>-- Given the following table</i>
+CREATE VIRTUAL TABLE ft USING fts5(a, b, c);
+
+<i>-- The following are equivalent</i>
+SELECT * FROM ft WHERE b MATCH 'uvw AND xyz';
+SELECT * FROM ft WHERE ft MATCH 'b : (uvw AND xyz)';
+
+<i>-- This query cannot match any rows (since all columns are filtered out): </i>
+SELECT * FROM ft WHERE b MATCH 'a : xyz';
+</pre></div>
+
+<a name="fts5_boolean_operators"></a>
+<h2 tags="FTS5 boolean operators" id="fts5_boolean_operators"><span>3.7. </span>FTS5 Boolean Operators</h2>
+
+<p>
+Phrases and NEAR groups may be arranged into expressions using <b>boolean
+operators</b>. In order of precedence, from highest (tightest grouping) to
+lowest (loosest grouping), the operators are:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Operator </th><th>Function
+
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td><code>&lt;query1&gt; NOT &lt;query2&gt;</code>
+ </td><td>Matches if query1 matches and query2 does not match.
+
+ </td></tr><tr style="text-align:left"><td><code>&lt;query1&gt; AND &lt;query2&gt;</code>
+ </td><td>Matches if both query1 and query2 match.
+
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td><code>&lt;query1&gt; OR &lt;query2&gt;</code>
+ </td><td>Matches if either query1 or query2 match.
+
+</td></tr></table>
+
+<p>
+Parenthesis may be used to group expressions in order to modify operator
+precedence in the usual ways. For example:
+
+</p><div class="codeblock"><pre><i>-- Matches documents that contain at least one instance of either "one"</i>
+<i>-- or "two", but do not contain any instances of token "three".</i>
+... MATCH 'one OR two NOT three'
+
+<i>-- Match all documents that contain the token "two" but not "three", or</i>
+<i>-- contain the token "one".</i>
+... MATCH 'one OR (two NOT three)'
+</pre></div>
+
+<p>
+Phrases and NEAR groups may also be connected by <b>implicit AND operators</b>.
+For simplicity, these are not shown in the BNF grammar above. Essentially, any
+sequence of phrases or NEAR groups (including those restricted to matching
+specified columns) separated only by whitespace are handled as if there were an
+implicit AND operator between each pair of phrases or NEAR groups. Implicit
+AND operators are never inserted after or before an expression enclosed in
+parenthesis. For example:
+
+</p><div class="codeblock"><pre>... MATCH 'one two three' <i>-- 'one AND two AND three'</i>
+... MATCH 'three "one two"' <i>-- 'three AND "one two"'</i>
+... MATCH 'NEAR(one two) three' <i>-- 'NEAR(one two) AND three'</i>
+... MATCH 'one OR two three' <i>-- 'one OR two AND three'</i>
+
+... MATCH '(one OR two) three' <i>-- Syntax error!</i>
+... MATCH 'func(one two)' <i>-- Syntax error!</i>
+</pre></div>
+
+<a name="fts5_table_creation_and_initialization"></a>
+<h1 tags="FTS5 CREATE TABLE Options" id="fts5_table_creation_and_initialization"><span>4. </span>FTS5 Table Creation and Initialization</h1>
+
+<p>Each argument specified as part of a "CREATE VIRTUAL TABLE ... USING fts5
+..." statement is either a column declaration or a configuration option. A
+<b>column declaration</b> consists of one or more whitespace separated FTS5
+barewords or string literals quoted in any manner acceptable to SQLite.
+
+</p><p>The first string or bareword in a column declaration is the column name. It
+is an error to attempt to name an fts5 table column "rowid" or "rank", or to
+assign the same name to a column as is used by the table itself. This is not
+supported.
+
+</p><p>Each subsequent string or bareword in a column declaration is a column
+option that modifies the behaviour of that column. Column options are
+case-independent. Unlike the SQLite core, FTS5 considers unrecognized column
+options to be errors. Currently, the only option recognized is
+<a href="fts5.html#the_unindexed_column_option">"UNINDEXED" (see below)</a>.
+
+</p><p>A <b>configuration option</b> consists of an FTS5 bareword - the option name -
+followed by an "=" character, followed by the option value. The option value is
+specified using either a single FTS5 bareword or a string literal, again quoted
+in any manner acceptable to the SQLite core. For example:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE mail USING fts5(sender, title, body, tokenize = 'porter ascii');
+</pre></div>
+
+<p> There are currently the following configuration options:
+
+</p><ul>
+ <li> The "tokenize" option, used to configure a <a href="fts5.html#tokenizers">custom tokenizer</a>.
+ </li><li> The "prefix" option, used to add <a href="fts5.html#prefix_indexes">prefix indexes</a>
+ to an FTS5 table.
+ </li><li> The "content" option, used to make the FTS5 table an
+ <a href="fts5.html#external_content_and_contentless_tables">external content or contentless table</a>.
+ </li><li> The "content_rowid" option, used to set the rowid field of an
+ <a href="fts5.html#external_content_tables">external content table</a>.
+ </li><li> The <a href="fts5.html#the_columnsize_option">"columnsize" option</a>, used to configure
+ whether or not the size in tokens of each value in the FTS5 table is
+ stored separately within the database.
+ </li><li> The <a href="fts5.html#the_detail_option">"detail" option</a>. This option may be used
+ to reduce the size of the FTS index on disk by omitting some information
+ from it.
+</li></ul>
+
+<a name="the_unindexed_column_option"></a>
+<h2 tags="unindexed" id="the_unindexed_column_option"><span>4.1. </span>The UNINDEXED column option</h2>
+
+<p>The contents of columns qualified with the UNINDEXED column option are not
+added to the FTS index. This means that for the purposes of MATCH queries and
+<a href="fts5.html#_auxiliary_functions_">FTS5 auxiliary functions</a>, the column contains no matchable tokens.
+
+</p><p>For example, to avoid adding the contents of the "uuid" field to the FTS
+index:
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE customers USING fts5(name, addr, uuid UNINDEXED);
+</pre></div>
+
+<a name="prefix_indexes"></a>
+<h2 tags="FTS5 prefix indexes" id="prefix_indexes"><span>4.2. </span>Prefix Indexes</h2>
+
+<p> By default, FTS5 maintains a single index recording the location of each
+token instance within the document set. This means that querying for complete
+tokens is fast, as it requires a single lookup, but querying for a prefix
+token can be slow, as it requires a range scan. For example, to query for
+the prefix token "abc*" requires a range scan of all tokens greater than
+or equal to "abc" and less than "abd".
+
+</p><p> A prefix index is a separate index that records the location of all
+instances of prefix tokens of a certain length in characters used to speed
+up queries for prefix tokens. For example, optimizing a query for prefix
+token "abc*" requires a prefix index of three-character prefixes.
+
+</p><p> To add prefix indexes to an FTS5 table, the "prefix" option is set to
+either a single positive integer or a text value containing a white-space
+separated list of one or more positive integer values. A prefix index is
+created for each integer specified. If more than one "prefix" option is
+specified as part of a single CREATE VIRTUAL TABLE statement, all apply.
+
+</p><div class="codeblock"><pre><i>-- Two ways to create an FTS5 table that maintains prefix indexes for
+-- two and three character prefix tokens.</i>
+CREATE VIRTUAL TABLE ft USING fts5(a, b, prefix='2 3');
+CREATE VIRTUAL TABLE ft USING fts5(a, b, prefix=2, prefix=3);
+</pre></div>
+
+<a name="tokenizers"></a>
+<h2 tags="FTS5 tokenizers" id="tokenizers"><span>4.3. </span>Tokenizers</h2>
+
+<p> The CREATE VIRTUAL TABLE "tokenize" option is used to configure the
+specific tokenizer used by the FTS5 table. The option argument must be either
+an FTS5 bareword, or an SQL text literal. The text of the argument is itself
+treated as a white-space series of one or more FTS5 barewords or SQL text
+literals. The first of these is the name of the tokenizer to use. The second
+and subsequent list elements, if they exist, are arguments passed to the
+tokenizer implementation.
+
+</p><p> Unlike option values and column names, SQL text literals intended as
+tokenizers must be quoted using single quote characters. For example:
+
+</p><div class="codeblock"><pre><i>-- The following are all equivalent</i>
+CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'porter ascii');
+CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = "porter ascii");
+CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = "'porter' 'ascii'");
+CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = '''porter'' ''ascii''');
+
+<i>-- But this will fail:</i>
+CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = '"porter" "ascii"');
+
+<i>-- This will fail too:</i>
+CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'porter' 'ascii');
+</pre></div>
+
+
+<p>
+FTS5 features three built-in tokenizer modules, described in subsequent
+sections:
+
+</p><ul>
+ <li> The <b>unicode61</b> tokenizer, based on the Unicode 6.1 standard. This
+ is the default.
+
+ </li><li> The <b>ascii</b> tokenizer, which assumes all characters outside of
+ the ASCII codepoint range (0-127) are to be treated as token characters.
+
+ </li><li> The <b>porter</b> tokenizer, which implements the
+<a href="http://tartarus.org/martin/PorterStemmer/">porter stemming algorithm</a>.
+</li></ul>
+
+<p> It is also possible to create custom tokenizers for FTS5. The API for doing so is <a href="fts5.html#custom_tokenizers">described here</a>.
+
+</p><h3 id="unicode61_tokenizer"><span>4.3.1. </span>Unicode61 Tokenizer</h3>
+
+<p> The unicode tokenizer classifies all unicode characters as either
+"separator" or "token" characters. By default all space and punctuation
+characters, as defined by Unicode 6.1, are considered separators, and all
+other characters as token characters. More specifically, all unicode
+characters assigned to a
+<a href="https://en.wikipedia.org/wiki/Unicode_character_property#General_Category">
+general category</a> beginning with "L" or "N" (letters and numbers,
+specifically) or to category "Co" ("other, private use") are considered tokens.
+All other characters are separators.
+
+</p><p>Each contiguous run of one or more token characters is considered to be a
+token. The tokenizer is case-insensitive according to the rules defined by
+Unicode 6.1.
+
+</p><p> By default, diacritics are removed from all Latin script characters. This
+means, for example, that "A", "a", "&#192;", "&#224;", "&#194;" and "&#226;"
+are all considered to be equivalent.
+
+</p><p> Any arguments following "unicode61" in the token specification are treated
+as a list of alternating option names and values. Unicode61 supports the
+following options:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th> Option </th><th> Usage
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td> remove_diacritics
+ </td><td>This option should be set to "0", "1" or "2". The default value is "1".
+ If it is set to "1" or "2", then diacritics are removed from Latin script
+ characters as described above. However, if it is set to "1", then diacritics
+ are not removed in the fairly uncommon case where a single unicode codepoint
+ is used to represent a character with more that one diacritic. For example,
+ diacritics are not removed from codepoint 0x1ED9 ("LATIN SMALL LETTER O WITH
+ CIRCUMFLEX AND DOT BELOW"). This is technically a bug, but cannot be fixed
+ without creating backwards compatibility problems. If this option is set to
+ "2", then diacritics are correctly removed from all Latin characters.
+
+ </td></tr><tr style="text-align:left"><td> categories
+ </td><td>This option may be used to modify the set of Unicode general categories
+ that are considered to correspond to token characters. The argument must
+ consist of a space separated list of two-character general category
+ abbreviations (e.g. "Lu" or "Nd"), or of the same with the second character
+ replaced with an asterisk ("*"), interpreted as a glob pattern. The default
+ value is "L* N* Co".
+
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td> tokenchars
+ </td><td> This option is used to specify additional unicode characters that
+ should be considered token characters, even if they are white-space or
+ punctuation characters according to Unicode 6.1. All characters in the
+ string that this option is set to are considered token characters.
+
+ </td></tr><tr style="text-align:left"><td> separators
+ </td><td> This option is used to specify additional unicode characters that
+ should be considered as separator characters, even if they are token
+ characters according to Unicode 6.1. All characters in the string that
+ this option is set to are considered separators.
+</td></tr></table>
+
+<p> For example:
+
+</p><div class="codeblock"><pre><i>-- Create an FTS5 table that does not remove diacritics from Latin
+-- script characters, and that considers hyphens and underscore characters
+-- to be part of tokens. </i>
+CREATE VIRTUAL TABLE ft USING fts5(a, b,
+ tokenize = "unicode61 remove_diacritics 0 tokenchars '-_'"
+);
+</pre></div>
+
+<p> or:
+
+</p><div class="codeblock"><pre><i>-- Create an FTS5 table that, as well as the default token character classes,</i>
+<i>-- considers characters in class "Mn" to be token characters.</i>
+CREATE VIRTUAL TABLE ft USING fts5(a, b,
+ tokenize = "unicode61 categories 'L* N* Co Mn'"
+);
+</pre></div>
+
+<p> The fts5 unicode61 tokenizer is byte-for-byte compatible with the fts3/4
+unicode61 tokenizer.
+
+</p><h3 id="ascii_tokenizer"><span>4.3.2. </span>Ascii Tokenizer</h3>
+
+<p> The Ascii tokenizer is similar to the Unicode61 tokenizer, except that:
+
+</p><ul>
+ <li> All non-ASCII characters (those with codepoints greater than 127) are
+ always considered token characters. If any non-ASCII characters are specified
+ as part of the separators option, they are ignored.
+
+ </li><li> Case-folding is only performed for ASCII characters. So while "A" and
+ "a" are considered to be equivalent, "&#195;" and "&#227;" are distinct.
+
+ </li><li> The remove_diacritics option is not supported.
+</li></ul>
+
+<p> For example:
+
+</p><div class="codeblock"><pre><i>-- Create an FTS5 table that uses the ascii tokenizer, but does not
+-- consider numeric characters to be part of tokens.</i>
+CREATE VIRTUAL TABLE ft USING fts5(a, b,
+ tokenize = "ascii separators '0123456789'"
+);
+</pre></div>
+
+<h3 id="porter_tokenizer"><span>4.3.3. </span>Porter Tokenizer</h3>
+
+<p> The porter tokenizer is a wrapper tokenizer. It takes the output of some
+other tokenizer and applies the
+<a href="http://tartarus.org/martin/PorterStemmer/">porter stemming algorithm</a>
+to each token before it returns it to FTS5. This allows search terms like
+"correction" to match similar words such as "corrected" or "correcting". The
+porter stemmer algorithm is designed for use with English language terms
+only - using it with other languages may or may not improve search utility.
+
+</p><p> By default, the porter tokenizer operates as a wrapper around the default
+tokenizer (unicode61). Or, if one or more extra arguments are added to the
+"tokenize" option following "porter", they are treated as a specification for
+the underlying tokenizer that the porter stemmer uses. For example:
+
+</p><div class="codeblock"><pre><i>-- Two ways to create an FTS5 table that uses the porter tokenizer to
+-- stem the output of the default tokenizer (unicode61). </i>
+CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = porter);
+CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'porter unicode61');
+
+<i>-- A porter tokenizer used to stem the output of the unicode61 tokenizer,
+-- with diacritics removed before stemming.</i>
+CREATE VIRTUAL TABLE t1 USING fts5(x, tokenize = 'porter unicode61 remove_diacritics 1');
+</pre></div>
+
+<a name="trigramidx"></a>
+
+<h3 id="the_experimental_trigram_tokenizer"><span>4.3.4. </span>The Experimental Trigram Tokenizer</h3>
+
+<p>
+The <b>experimental</b> trigram tokenizer extends FTS5 to support substring
+matching in general, instead of the usual token matching. When using the
+trigram tokenizer, a query or phrase token may match any sequence of characters
+within a row, not just a complete token. For example:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE tri USING fts5(a, tokenize="trigram");
+INSERT INTO tri VALUES('abcdefghij KLMNOPQRST uvwxyz');
+
+<i>-- The following queries all match the single row in the table</i>
+SELECT * FROM tri('cdefg');
+SELECT * FROM tri('cdefg AND pqr');
+SELECT * FROM tri('"hij klm" NOT stuv');
+</pre></div>
+
+<p>
+The trigram tokenizer supports a single option - "case_sensitive". With the default
+value, 0, matching is case-insensitive. If this value is set to 1, then all matches
+are case-sensitive.
+
+</p><div class="codeblock"><pre><i>-- A case-sensitive trigram index</i>
+CREATE VIRTUAL TABLE tri USING fts5(a, tokenize="trigram case_sensitive 1");
+</pre></div>
+
+<p>
+FTS5 tables that use the trigram tokenizer also support indexed GLOB and LIKE
+pattern matching. For example:
+
+</p><div class="codeblock"><pre>SELECT * FROM tri WHERE a LIKE '%cdefg%';
+SELECT * FROM tri WHERE a GLOB '*ij klm*xyz';
+</pre></div>
+
+<p>
+If an FTS5 trigram tokenizer is created with the case_sensitive option set to 1,
+it may only index GLOB queries, not LIKE.
+
+</p><p>
+Notes:
+
+</p><ul>
+ <li> Substrings consisting of fewer than 3 unicode characters do not match any
+ rows when used with a full-text query. If a LIKE or GLOB pattern does not
+ contain at least one sequence of non-wildcard unicode characters, FTS5
+ falls back to a linear scan of the entire table.
+
+ </li><li> If the FTS5 table is created with the detail=none or detail=column option
+ specified, full-text queries may not contain any tokens longer than 3
+ unicode characters. LIKE and GLOB pattern matching may be slightly slower,
+ but still works. If the index is to be used only for LIKE and/or GLOB
+ pattern matching, these options are worth experimenting with to reduce
+ the index size.
+</li></ul>
+
+<a name="external_content_and_contentless_tables"></a>
+<h2 tags="FTS5 content option" id="external_content_and_contentless_tables"><span>4.4. </span>External Content and Contentless Tables</h2>
+
+<p>
+Normally, when a row is inserted into an FTS5 table, as well as the various
+full-text index entries and other data a copy of the row is stored in a private
+table managed by the FTS5 module. When column values are requested from the
+FTS5 table by the user or by an auxiliary function implementation, they are
+read from this private table. The "content" option may be used to create an
+FTS5 table that stores only FTS full-text index entries. Because the column
+values themselves are usually much larger than the associated full-text index
+entries, this can save significant database space.
+
+</p><p>
+There are two ways to use the "content" option:
+</p><ul>
+ <li> By setting it to an empty string to create a contentless FTS5 table. In
+ this case FTS5 assumes that the original column values are unavailable
+ to it when processing queries. Full-text queries and some auxiliary
+ functions can still be used, but no column values apart from the rowid
+ may be read from the table.
+
+ </li><li> By setting it to the name of a database object (table, virtual table or
+ view) that may be queried by FTS5 at any time to retrieve the column
+ values. This is known as an "external content" table. In this case all
+ FTS5 functionality may be used, but it is the responsibility of the user
+ to ensure that the contents of the full-text index are consistent with
+ the named database object. If they are not, query results may be
+ unpredictable.
+</li></ul>
+
+<a name="contentless_tables"></a>
+<h3 tags="FTS5 contentless tables" id="contentless_tables"><span>4.4.1. </span>Contentless Tables</h3>
+
+<p> A contentless FTS5 table is created by setting the "content" option to
+an empty string. For example:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE f1 USING fts5(a, b, c, content='');
+</pre></div>
+
+<p> Contentless FTS5 tables do not support UPDATE or DELETE statements, or
+INSERT statements that do not supply a non-NULL value for the rowid field.
+Contentless tables do not support REPLACE conflict handling. REPLACE
+and INSERT OR REPLACE statements are treated as regular INSERT statements.
+Rows may be deleted from a contentless table using an <a href="fts5.html#the_delete_command">FTS5 delete command</a>.
+
+</p><p> Attempting to read any column value except the rowid from a contentless
+FTS5 table returns an SQL NULL value.
+
+</p><a name="external_content_tables"></a>
+<h3 tags="FTS5 external content tables" id="external_content_tables"><span>4.4.2. </span>External Content Tables</h3>
+
+<p> An external content FTS5 table is created by setting the content
+option to the name of a table, virtual table or view (hereafter the "content
+table") within the same database. Whenever column values are required by
+FTS5, it queries the content table as follows, with the rowid of the row
+for which values are required bound to the SQL variable:
+
+</p><div class="codeblock"><pre>SELECT &lt;content_rowid&gt;, &lt;cols&gt; FROM &lt;content&gt; WHERE &lt;content_rowid&gt; = ?;
+</pre></div>
+
+<p> In the above, &lt;content&gt; is replaced by the name of the content table.
+By default, &lt;content_rowid&gt; is replaced by the literal text "rowid". Or,
+if the "content_rowid" option is set within the CREATE VIRTUAL TABLE statement,
+by the value of that option. &lt;cols&gt; is replaced by a comma-separated list
+of the FTS5 table column names. For example:
+
+</p><div class="codeblock"><pre><i>-- If the database schema is: </i>
+CREATE TABLE tbl (a, b, c, d INTEGER PRIMARY KEY);
+CREATE VIRTUAL TABLE fts USING fts5(a, c, content=tbl, content_rowid=d);
+
+<i>-- Fts5 may issue queries such as:</i>
+SELECT d, a, c FROM tbl WHERE d = ?;
+</pre></div>
+
+<p> The content table may also be queried as follows:
+
+</p><div class="codeblock"><pre>SELECT &lt;content_rowid&gt;, &lt;cols&gt; FROM &lt;content&gt; ORDER BY &lt;content_rowid&gt; ASC;
+SELECT &lt;content_rowid&gt;, &lt;cols&gt; FROM &lt;content&gt; ORDER BY &lt;content_rowid&gt; DESC;
+</pre></div>
+
+<p> It is still the responsibility of the user to ensure that the contents of
+an external content FTS5 table are kept up to date with the content table.
+One way to do this is with triggers. For example:
+
+</p><div class="codeblock"><pre><i>-- Create a table. And an external content fts5 table to index it.</i>
+CREATE TABLE tbl(a INTEGER PRIMARY KEY, b, c);
+CREATE VIRTUAL TABLE fts_idx USING fts5(b, c, content='tbl', content_rowid='a');
+
+<i>-- Triggers to keep the FTS index up to date.</i>
+CREATE TRIGGER tbl_ai AFTER INSERT ON tbl BEGIN
+ INSERT INTO fts_idx(rowid, b, c) VALUES (new.a, new.b, new.c);
+END;
+CREATE TRIGGER tbl_ad AFTER DELETE ON tbl BEGIN
+ INSERT INTO fts_idx(fts_idx, rowid, b, c) VALUES('delete', old.a, old.b, old.c);
+END;
+CREATE TRIGGER tbl_au AFTER UPDATE ON tbl BEGIN
+ INSERT INTO fts_idx(fts_idx, rowid, b, c) VALUES('delete', old.a, old.b, old.c);
+ INSERT INTO fts_idx(rowid, b, c) VALUES (new.a, new.b, new.c);
+END;
+</pre></div>
+
+<p> Like contentless tables, external content tables do not support REPLACE
+conflict handling. Any operations that specify REPLACE conflict handling are
+handled using ABORT.
+
+</p><a name="the_columnsize_option"></a>
+<h2 tags="FTS5 columnsize option" id="the_columnsize_option"><span>4.5. </span>The Columnsize Option</h2>
+
+<p>Normally, FTS5 maintains a special backing table within the database that
+stores the size of each column value in tokens inserted into the main FTS5
+table in a separate table. This backing table is used by the
+<a href="#xColumnSize">xColumnSize</a><a> API function, which is in turn used by
+the built-in <a href="fts5.html#the_bm25_function">bm25 ranking function</a> (and is likely to be useful
+to other ranking functions as well).
+
+</a></p><p>In order to save space, this backing table may be omitted by setting the
+columnsize option to zero. For example:
+
+</p><div class="codeblock"><pre><i>-- A table without the xColumnSize() values stored on disk:</i>
+CREATE VIRTUAL TABLE ft USING fts5(a, b, c, columnsize=0);
+
+<i>-- Three equivalent ways of creating a table that does store the</i>
+<i>-- xColumnSize() values on disk:</i>
+CREATE VIRTUAL TABLE ft USING fts5(a, b, c);
+CREATE VIRTUAL TABLE ft USING fts5(a, b, c, columnsize=1);
+CREATE VIRTUAL TABLE ft USING fts5(a, b, columnsize='1', c);
+</pre></div>
+
+<p> It is an error to set the columnsize option to any value other than
+0 or 1.
+
+</p><p> If an FTS5 table is configured with columnsize=0 but is not a
+<a href="fts5.html#contentless_tables">contentless table</a>, the xColumnSize API function
+still works, but runs much more slowly. In this case, instead of reading
+the value to return directly from the database, it reads the text value
+itself and count the tokens within it on demand.
+
+</p><p>Or, if the table is also a <a href="fts5.html#contentless_tables">contentless table</a>,
+then the following apply:
+
+</p><ul>
+ <li> <p>The xColumnSize API always returns -1. There is no way to determine
+ the number of tokens in a value stored within a contentless FTS5 table
+ configured with columnsize=0.
+
+ </p></li><li> <p>Each inserted row must be accompanied by an explicitly specified rowid
+ value. If a contentless table is configured with columnsize=0,
+ attempting to insert a NULL value into the rowid is an SQLITE_MISMATCH
+ error.
+
+ </p></li><li> <p>All queries on the table must be full-text queries. In other words,
+ they must use the MATCH or = operator with the table-name column as the
+ left-hand operand, or else use the table-valued function syntax. Any
+ query that is not a full-text query results in an error.
+</p></li></ul>
+
+<p> The name of the table in which the xColumnSize values are stored
+(unless columnsize=0 is specified) is "&lt;name&gt;_docsize", where
+&lt;name&gt; is the name of the FTS5 table itself. The
+<a href="https://www.sqlite.org/download.html">sqlite3_analyzer</a>
+tool may be used on an existing database in order to determine how much
+space might be saved by recreating an FTS5 table using columnsize=0.
+
+</p><a name="the_detail_option"></a>
+<h2 tags="FTS5 detail option" id="the_detail_option"><span>4.6. </span>The Detail Option</h2>
+
+<p> For each term in a document, the FTS index maintained by FTS5
+stores the rowid of the document, the column number of the column that contains
+the term and the offset of the term within the column value. The "detail"
+option may be used to omit some of this information. This reduces the space
+that the index consumes within the database file, but also reduces the
+capability and efficiency of the system.
+
+</p><p> The detail option may be set to "full" (the default value), "column" or
+"none". For example:
+
+</p><div class="codeblock"><pre><i>-- The following two lines are equivalent (because the default value</i>
+<i>-- of "detail" is "full". </i>
+CREATE VIRTUAL TABLE ft1 USING fts5(a, b, c);
+CREATE VIRTUAL TABLE ft1 USING fts5(a, b, c, detail=full);
+
+CREATE VIRTUAL TABLE ft2 USING fts5(a, b, c, detail=column);
+CREATE VIRTUAL TABLE ft3 USING fts5(a, b, c, detail=none);
+</pre></div>
+
+<p>If the detail option is set to <b>column</b>, then for each term the FTS
+index records the rowid and column number only, omitting the term offset
+information. This results in the following restrictions:
+
+</p><ul>
+ <li> NEAR queries are not available.
+ </li><li> Phrase queries are not available.
+ </li><li> Assuming the table is not also a
+ <a href="fts5.html#contentless_tables">contentless table</a>, the
+ <a href="#xInstCount">xInstCount</a>, <a href="#xInst">xInst</a>,
+ <a href="#xPhraseFirst">xPhraseFirst</a> and <a href="#xPhraseNext">xPhraseNext</a>
+ are slower than usual. This is because instead of reading the required data
+ directly from the FTS index they have to load and tokenize the document text
+ on demand.
+ </li><li> If the table is also a contentless table, the xInstCount, xInst,
+ xPhraseFirst and xPhraseNext APIs behave as if the current row contains no
+ phrase matches at all (i.e. xInstCount() returns 0).
+</li></ul>
+
+<p>If the detail option is set to <b>none</b>, then for each term the FTS
+index records just the rowid is stored. Both column and offset information
+are omitted. As well as the restrictions itemized above for detail=column
+mode, this imposes the following extra limitations:
+
+</p><ul>
+ <li> Column filter queries are not available.
+ </li><li> Assuming the table is not also a contentless table, the
+ <a href="#xPhraseFirstColumn">xPhraseFirstColumn</a> and
+ <a href="#xPhraseNextColumn">xPhraseNextColumn</a> are slower than usual.
+
+ </li><li> If the table is also a contentless table, the xPhraseFirstColumn and
+ xPhraseNextColumn APIs behave as if the current row contains no phrase
+ matches at all (i.e. xPhraseFirstColumn() sets the iterator to EOF).
+</li></ul>
+
+<p> In one test that indexed a large set of emails (1636 MiB on disk), the FTS
+index was 743 MiB on disk with detail=full, 340 MiB with detail=column and 134
+MiB with detail=none.
+
+</p><a name="_auxiliary_functions_"></a>
+<h1 tags="FTS5 auxiliary functions" id="_auxiliary_functions_"><span>5. </span> Auxiliary Functions </h1>
+
+<p> Auxiliary functions are similar to <a href="lang_corefunc.html">SQL scalar functions</a>,
+except that they may only be used within full-text queries (those that use
+the MATCH operator) on an FTS5 table. Their results are calculated based not
+only on the arguments passed to them, but also on the current match and
+matched row. For example, an auxiliary function may return a numeric value
+indicating the accuracy of the match (see the <a href="fts5.html#the_bm25_function">bm25()</a> function),
+or a fragment of text from the matched row that contains one or more
+instances of the search terms (see the <a href="fts5.html#the_snippet_function">snippet()</a> function).
+
+</p><p>To invoke an auxiliary function, the name of the FTS5 table should be
+specified as the first argument. Other arguments may follow the first,
+depending on the specific auxiliary function being invoked. For example, to
+invoke the "highlight" function:
+
+</p><div class="codeblock"><pre>SELECT highlight(email, 2, '&lt;b&gt;', '&lt;/b&gt;') FROM email WHERE email MATCH 'fts5'
+</pre></div>
+
+<p>The built-in auxiliary functions provided as part of FTS5 are described in
+the following section. Applications may also implement
+<a href="fts5.html#custom_auxiliary_functions">custom auxiliary functions in C</a>.
+
+</p><h2 id="built_in_auxiliary_functions"><span>5.1. </span>Built-in Auxiliary Functions</h2>
+
+<p> FTS5 provides three built-in auxiliary functions:
+
+</p><ul>
+ <li> The <a href="fts5.html#the_bm25_function">bm25() auxiliary function</a> returns a real value
+ reflecting the accuracy of the current match. Better matches are
+ assigned numerically lower values.
+
+ </li><li> The <a href="fts5.html#the_highlight_function">highlight() auxiliary function</a> returns a copy
+ of the text from one of the columns of the current match with each
+ instance of a queried term within the result surrounded by specified
+ markup (for example "&lt;b&gt;" and "&lt;/b&gt;").
+
+ </li><li> The <a href="fts5.html#the_snippet_function">snippet() auxiliary function</a> selects a short
+ fragment of text from one of the columns of the matched row and returns
+ it with each instance of a queried term surrounded by markup in
+ the same manner as the highlight() function. The fragment of text is
+ selected so as to maximize the number of queried terms it contains.
+</li></ul>
+
+<a name="the_bm25_function"></a>
+<h3 tags="FTS5 bm25" id="the_bm25_function"><span>5.1.1. </span>The bm25() function</h3>
+
+<p> The built-in auxiliary function bm25() returns a real value indicating
+how well the current row matches the full-text query. The better the match,
+the numerically smaller the value returned. A query such as the following may
+be used to return matches in order from best to worst match:
+
+</p><div class="codeblock"><pre>SELECT * FROM fts WHERE fts MATCH ? ORDER BY bm25(fts)
+</pre></div>
+
+<p> In order to calculate a documents score, the full-text query is separated
+ into its component phrases. The bm25 score for document <i>D</i> and
+ query <i>Q</i> is then calculated as follows:
+
+</p><p> <img src="images/fts5_formula1.png" style="width:75ex;margin-left:5ex">
+
+</p><p> In the above, <i>nPhrase</i> is the number of phrases in the query.
+ <i>|D|</i> is the number of tokens in the current document, and
+ <i>avgdl</i> is the average number of tokens in all documents within the
+ FTS5 table. <i>k<sub>1</sub></i> and <i>b</i> are both constants,
+ hard-coded at 1.2 and 0.75 respectively.
+
+</p><p> The "-1" term at the start of the formula is not found in most
+implementations of the BM25 algorithm. Without it, a better match is assigned
+a numerically higher BM25 score. Since the default sorting order is
+"ascending", this means that appending "ORDER BY bm25(fts)" to a query would
+cause results to be returned in order from worst to best. The "DESC" keyword
+would be required in order to return the best matches first. In order to
+avoid this pitfall, the FTS5 implementation of BM25 multiplies the result
+by -1 before returning it, ensuring that better matches are assigned
+numerically lower scores.
+
+</p><p> <i>IDF(q<sub>i</sub>)</i> is the inverse-document-frequency of query
+ phrase <i>i</i>. It is calculated as follows, where <i>N</i> is the total
+ number of rows in the FTS5 table and <i>n(q<sub>i</sub>)</i> is the total
+ number of rows that contain at least one instance of phrase <i>i</i>:
+
+</p><p> <img src="images/fts5_formula2.png" style="width:75ex;margin-left:5ex">
+
+</p><p> Finally, <i>f(q<sub>i</sub>,D)</i> is the phrase frequency of phrase
+<i>i</i>. By default, this is simply the number of occurrences of the phrase
+within the current row. However, by passing extra real value arguments to
+the bm25() SQL function, each column of the table may be assigned a different
+weight and the phrase frequency calculated as follows:
+
+</p><p> <img src="images/fts5_formula3.png" style="width:75ex;margin-left:5ex">
+
+</p><p> where <i>w<sub>c</sub></i> is the weight assigned to column <i>c</i> and
+<i>n(q<sub>i</sub>,c)</i> is the number of occurrences of phrase <i>i</i> in
+column <i>c</i> of the current row. The first argument passed to bm25()
+following the table name is the weight assigned to the leftmost column of
+the FTS5 table. The second is the weight assigned to the second leftmost
+column, and so on. If there are not enough arguments for all table columns,
+remaining columns are assigned a weight of 1.0. If there are too many
+trailing arguments, the extras are ignored. For example:
+
+</p><div class="codeblock"><pre><i>-- Assuming the following schema:</i>
+CREATE VIRTUAL TABLE email USING fts5(sender, title, body);
+
+<i>-- Return results in bm25 order, with each phrase hit in the "sender"</i>
+<i>-- column considered the equal of 10 hits in the "body" column, and</i>
+<i>-- each hit in the "title" column considered as valuable as 5 hits in</i>
+<i>-- the "body" column.</i>
+SELECT * FROM email WHERE email MATCH ? ORDER BY bm25(email, 10.0, 5.0);
+</pre></div>
+
+<p>Refer to wikipedia for
+<a href="http://en.wikipedia.org/wiki/Okapi_BM25">more information regarding
+BM25</a> and its variants.
+
+</p><a name="the_highlight_function"></a>
+<h3 tags="FTS5 highlight" id="the_highlight_function"><span>5.1.2. </span>The highlight() function</h3>
+
+<p> The highlight() function returns a copy of the text from a specified
+column of the current row with extra markup text inserted to mark the start
+and end of phrase matches.
+
+</p><p>The highlight() must be invoked with exactly three arguments following
+the table name. To be interpreted as follows:
+
+</p><ol>
+ <li> An integer indicating the index of the FTS table column to read the
+ text from. Columns are numbered from left to right starting at zero.
+
+ </li><li> The text to insert before each phrase match.
+
+ </li><li> The text to insert after each phrase match.
+</li></ol>
+
+<p>For example:
+
+</p><div class="codeblock"><pre><i>-- Return a copy of the text from the leftmost column of the current</i>
+<i>-- row, with phrase matches marked using html "b" tags.</i>
+SELECT highlight(fts, 0, '&lt;b&gt;', '&lt;/b&gt;') FROM fts WHERE fts MATCH ?
+</pre></div>
+
+<p>In cases where two or more phrase instances overlap (share one or more
+tokens in common), a single open and close marker is inserted for each set
+of overlapping phrases. For example:
+
+</p><div class="codeblock"><pre><i>-- Assuming this:</i>
+CREATE VIRTUAL TABLE ft USING fts5(a);
+INSERT INTO ft VALUES('a b c x c d e');
+INSERT INTO ft VALUES('a b c c d e');
+INSERT INTO ft VALUES('a b c d e');
+
+<i>-- The following SELECT statement returns these three rows:</i>
+<i>-- '&#91;a b c&#93; x &#91;c d e&#93;'</i>
+<i>-- '&#91;a b c&#93; &#91;c d e&#93;'</i>
+<i>-- '&#91;a b c d e&#93;'</i>
+SELECT highlight(ft, 0, '&#91;', '&#93;') FROM ft WHERE ft MATCH 'a+b+c AND c+d+e';
+</pre></div>
+
+<a name="the_snippet_function"></a>
+<h3 tags="FTS5 snippet" id="the_snippet_function"><span>5.1.3. </span>The snippet() function</h3>
+
+<p>The snippet() function is similar to highlight(), except that instead of
+returning entire column values, it automatically selects and extracts a
+short fragment of document text to process and return. The snippet() function
+must be passed five parameters following the table name argument:
+
+</p><ol>
+ <li> An integer indicating the index of the FTS table column to select
+ the returned text from. Columns are numbered from left to right
+ starting at zero. A negative value indicates that the column should
+ be automatically selected.
+
+ </li><li> The text to insert before each phrase match within the returned text.
+
+ </li><li> The text to insert after each phrase match within the returned text.
+
+ </li><li> The text to add to the start or end of the selected text to indicate
+ that the returned text does not occur at the start or end of its column,
+ respectively.
+
+ </li><li> The maximum number of tokens in the returned text. This must be greater
+ than zero and equal to or less than 64.
+</li></ol>
+
+<a name="sorting_by_auxiliary_function_results"></a>
+<h2 tags="auxiliary function mapping" id="sorting_by_auxiliary_function_results"><span>5.2. </span>Sorting by Auxiliary Function Results</h2>
+
+<p> All FTS5 tables feature a special hidden column named "rank". If the
+current query is not a full-text query (i.e. if it does not include a MATCH
+operator), the value of the "rank" column is always NULL. Otherwise, in a
+full-text query, column rank contains by default the same value as would be
+returned by executing the bm25() auxiliary function with no trailing
+arguments.
+
+</p><p> The difference between reading from the rank column and using the bm25()
+function directly within the query is only significant when sorting by the
+returned value. In this case, using "rank" is faster than using bm25().
+
+</p><div class="codeblock"><pre><i>-- The following queries are logically equivalent. But the second may</i>
+<i>-- be faster, particularly if the caller abandons the query before</i>
+<i>-- all rows have been returned (or if the queries were modified to </i>
+<i>-- include LIMIT clauses).</i>
+SELECT * FROM fts WHERE fts MATCH ? ORDER BY bm25(fts);
+SELECT * FROM fts WHERE fts MATCH ? ORDER BY rank;
+</pre></div>
+
+<p> Instead of using bm25() with no trailing arguments, the specific auxiliary
+function mapped to the rank column may be configured either on a per-query
+basis, or by setting a different persistent default for the FTS table.
+
+</p><p> In order to change the mapping of the rank column for a single query,
+a term similar to either of the following is added to the WHERE clause of a
+query:
+
+</p><div class="codeblock"><pre>rank MATCH 'auxiliary-function-name(arg1, arg2, ...)'
+rank = 'auxiliary-function-name(arg1, arg2, ...)'
+</pre></div>
+
+<p> The right-hand-side of the MATCH or = operator must be a constant
+expression that evaluates to a string consisting of the auxiliary function to
+invoke, followed by zero or more comma separated arguments within parenthesis.
+Arguments must be SQL literals. For example:
+
+</p><div class="codeblock"><pre><i>-- The following queries are logically equivalent. But the second may</i>
+<i>-- be faster. See above. </i>
+SELECT * FROM fts WHERE fts MATCH ? ORDER BY bm25(fts, 10.0, 5.0);
+SELECT * FROM fts WHERE fts MATCH ? AND rank MATCH 'bm25(10.0, 5.0)' ORDER BY rank;
+</pre></div>
+
+<p> The table-valued function syntax may also be used to specify an alternative
+ranking function. In this case the text describing the ranking function should
+be specified as the second table-valued function argument. The following three
+queries are equivalent:
+
+</p><div class="codeblock"><pre>SELECT * FROM fts WHERE fts MATCH ? AND rank MATCH 'bm25(10.0, 5.0)' ORDER BY rank;
+SELECT * FROM fts WHERE fts = ? AND rank = 'bm25(10.0, 5.0)' ORDER BY rank;
+SELECT * FROM fts WHERE fts(?, 'bm25(10.0, 5.0)') ORDER BY rank;
+</pre></div>
+
+<p> The default mapping of the rank column for a table may be modified
+using the <a href="fts5.html#the_rank_configuration_option">FTS5 rank configuration option</a>.
+
+</p><h1 id="special_insert_commands"><span>6. </span>Special INSERT Commands</h1>
+
+<a name="the_automerge_configuration_option"></a>
+<h2 tags="FTS5 automerge option" id="the_automerge_configuration_option"><span>6.1. </span>The 'automerge' Configuration Option</h2>
+
+<p>
+ Instead of using a single data structure on disk to store the full-text
+ index, FTS5 uses a series of b-trees. Each time a new transaction is
+ committed, a new b-tree containing the contents of the committed transaction
+ is written into the database file. When the full-text index is queried, each
+ b-tree must be queried individually and the results merged before being
+ returned to the user.
+
+</p><p>
+ In order to prevent the number of b-trees in the database from becoming too
+ large (slowing down queries), smaller b-trees are periodically merged into
+ single larger b-trees containing the same data. By default, this happens
+ automatically within INSERT, UPDATE or DELETE statements that modify the
+ full-text index. The 'automerge' parameter determines how many smaller
+ b-trees are merged together at a time. Setting it to a small value can
+ speed up queries (as they have to query and merge the results from fewer
+ b-trees), but can also slow down writing to the database (as each INSERT,
+ UPDATE or DELETE statement has to do more work as part of the automatic
+ merging process).
+
+</p><p>
+ Each of the b-trees that make up the full-text index is assigned to a "level"
+ based on its size. Level-0 b-trees are the smallest, as they contain the
+ contents of a single transaction. Higher level b-trees are the result of
+ merging two or more level-0 b-trees together and so they are larger. FTS5
+ begins to merge b-trees together once there exist <i>M</i> or more b-trees
+ with the same level, where <i>M</i> is the value of the 'automerge'
+ parameter.
+
+</p><p>
+ The maximum allowed value for the 'automerge' parameter is 16. The default
+ value is 4. Setting the 'automerge' parameter to 0 disables the automatic
+ incremental merging of b-trees altogether.
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft, rank) VALUES('automerge', 8);
+</pre></div>
+
+<h2 id="the_crisismerge_configuration_option"><span>6.2. </span>The 'crisismerge' Configuration Option</h2>
+
+<p>The 'crisismerge' option is similar to 'automerge', in that it determines
+how and how often the component b-trees that make up the full-text index are
+merged together. Once there exist <i>C</i> or more b-trees on a single level
+within the full-text index, where <i>C</i> is the value of the 'crisismerge'
+option, all b-trees on the level are immediately merged into a single b-tree.
+
+</p><p>The difference between this option and the 'automerge' option is that when
+the 'automerge' limit is reached FTS5 only begins to merge the b-trees
+together. Most of the work is performed as part of subsequent INSERT,
+UPDATE or DELETE operations. Whereas when the 'crisismerge' limit is reached,
+the offending b-trees are all merged immediately. This means that an INSERT,
+UPDATE or DELETE that triggers a crisis-merge may take a long time to
+complete.
+
+</p><p>The default 'crisismerge' value is 16. There is no maximum limit. Attempting
+to set the 'crisismerge' parameter to a value of 0 or 1 is equivalent to
+setting it to the default value (16). It is an error to attempt to set the
+'crisismerge' option to a negative value.
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft, rank) VALUES('crisismerge', 16);
+</pre></div>
+
+<a name="the_delete_command"></a>
+<h2 tags="FTS5 delete command" id="the_delete_command"><span>6.3. </span>The 'delete' Command</h2>
+
+<p> This command is only available with <a href="fts5.html#external_content_tables">external content</a> and <a href="fts5.html#contentless_tables">contentless</a> tables. It
+is used to delete the index entries associated with a single row from the
+full-text index. This command and the <a href="fts5.html#the_delete_all_command">delete-all</a>
+command are the only ways to remove entries from the full-text index of a
+contentless table.
+
+</p><p> In order to use this command to delete a row, the text value 'delete'
+must be inserted into the special column with the same name as the table.
+The rowid of the row to delete is inserted into the rowid column. The
+values inserted into the other columns must match the values currently
+stored in the table. For example:
+
+</p><div class="codeblock"><pre><i>-- Insert a row with rowid=14 into the fts5 table.</i>
+INSERT INTO ft(rowid, a, b, c) VALUES(14, $a, $b, $c);
+
+<i>-- Remove the same row from the fts5 table.</i>
+INSERT INTO ft(ft, rowid, a, b, c) VALUES('delete', 14, $a, $b, $c);
+</pre></div>
+
+<p> If the values "inserted" into the text columns as part of a 'delete'
+command are not the same as those currently stored within the table, the
+results may be unpredictable.
+
+</p><p> The reason for this is easy to understand: When a document is inserted
+into the FTS5 table, an entry is added to the full-text index to record the
+position of each token within the new document. When a document is removed,
+the original data is required in order to determine the set of entries that
+need to be removed from the full-text index. So if the data supplied to FTS5
+when a row is deleted using this command is different from that used to
+determine the set of token instances when it was inserted, some full-text
+index entries may not be correctly deleted, or FTS5 may try to remove index
+entries that do not exist. This can leave the full-text index in an
+unpredictable state, making future query results unreliable.
+
+</p><a name="the_delete_all_command"></a>
+<h2 tags="FTS5 delete-all command" id="the_delete_all_command"><span>6.4. </span>The 'delete-all' Command</h2>
+
+<p> This command is only available with <a href="fts5.html#external_content_tables">external content</a> and <a href="fts5.html#contentless_tables">contentless</a> tables. It
+deletes all entries from the full-text index.
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft) VALUES('delete-all');
+</pre></div>
+
+<h2 id="the_integrity_check_command"><span>6.5. </span>The 'integrity-check' Command</h2>
+
+<p> This command is used to verify that the full-text index is internally
+consistent, and, optionally, that it is consistent with any
+<a href="fts5.html#external_content_tables">external content</a> table.
+
+</p><p>The integrity-check command is invoked by inserting the text value
+'integrity-check' into the special column with the same name as the FTS5
+table. If a value is supplied for the "rank" column, it must be either
+0 or 1. For example:
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft) VALUES('integrity-check');
+INSERT INTO ft(ft, rank) VALUES('integrity-check', 0);
+INSERT INTO ft(ft, rank) VALUES('integrity-check', 1);
+</pre></div>
+
+<p>The three forms above are equivalent for all FTS tables that are
+not external content tables. They check that the index data structures are
+not corrupt, and, if the FTS table is not contentless, that the contents of
+the index match the contents of the table itself.
+
+</p><p>For an external content table, the contents of the index are only
+compared to the contents of the external content table if the value
+specified for the rank column is 1.
+
+</p><p>In all cases, if any discrepancies are found, the command fails
+with an <a href="rescode.html#corrupt_vtab">SQLITE_CORRUPT_VTAB</a> error.
+
+</p><a name="the_merge_command"></a>
+<h2 tags="FTS5 merge command" id="the_merge_command"><span>6.6. </span>The 'merge' Command</h2>
+
+<div class="codeblock"><pre>INSERT INTO ft(ft, rank) VALUES('merge', 500);
+</pre></div>
+
+<p> This command merges b-tree structures together until roughly N pages
+of merged data have been written to the database, where N is the absolute
+value of the parameter specified as part of the 'merge' command. The size of
+each page is as configured by the <a href="fts5.html#the_pgsz_configuration_option">FTS5 pgsz option</a>.
+
+</p><p> If the parameter is a positive value, B-tree structures are only eligible
+for merging if one of the following is true:
+
+</p><ul>
+ <li> There are U or more such b-trees on a
+ single level (see the documentation for the <a href="fts5.html#the_automerge_configuration_option">FTS5 automerge option</a>
+ for an explanation of b-tree levels), where U is the value assigned
+ to the <a href="fts5.html#the_usermerge_configuration_option">FTS5 usermerge option</a> option.
+ </li><li> A merge has already been started (perhaps by a 'merge' command that
+ specified a negative parameter).
+</li></ul>
+
+<p> It is possible to tell whether or not the 'merge' command found any
+b-trees to merge together by checking the value returned by the
+<a href="c3ref/total_changes.html">sqlite3_total_changes()</a> API before and after the command is executed. If
+the difference between the two values is 2 or greater, then work was performed.
+If the difference is less than 2, then the 'merge' command was a no-op. In this
+case there is no reason to execute the same 'merge' command again, at least
+until after the FTS table is next updated.
+
+</p><p> If the parameter is negative, and there are B-tree structures on more than
+one level within the FTS index, all B-tree structures are assigned to the same
+level before the merge operation is commenced. Additionally, if the parameter
+is negative, the value of the usermerge configuration option is not
+respected - as few as two b-trees from the same level may be merged together.
+
+</p><p> The above means that executing the 'merge' command with a negative
+parameter until the before and after difference in the return value of
+<a href="c3ref/total_changes.html">sqlite3_total_changes()</a> is less than two optimizes the FTS index in the
+same way as the <a href="fts5.html#the_optimize_command">FTS5 optimize command</a>. However, if a new b-tree is added
+to the FTS index while this process is ongoing, FTS5 will move the new
+b-tree to the same level as the existing b-trees and restart the merge. To
+avoid this, only the first call to 'merge' should specify a negative parameter.
+Each subsequent call to 'merge' should specify a positive value so that the
+merge started by the first call is run to completion even if new b-trees are
+added to the FTS index.
+
+</p><a name="the_optimize_command"></a>
+<h2 tags="FTS5 optimize command" id="the_optimize_command"><span>6.7. </span>The 'optimize' Command</h2>
+
+<p>This command merges all individual b-trees that currently make up the
+full-text index into a single large b-tree structure. This ensures that the
+full-text index consumes the minimum space within the database and is in the
+fastest form to query.
+
+</p><p>Refer to the documentation for the <a href="fts5.html#the_automerge_configuration_option">FTS5 automerge option</a> for more details
+regarding the relationship between the full-text index and its component
+b-trees.
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft) VALUES('optimize');
+</pre></div>
+
+<p>Because it reorganizes the entire FTS index, the optimize command can
+take a long time to run. The <a href="fts5.html#the_merge_command">FTS5 merge command</a> can be used to divide
+the work of optimizing the FTS index into multiple steps. To do this:
+
+</p><ul>
+ <li> Invoke the 'merge' command once with the parameter set to -N, then
+ </li><li> Invoke the 'merge' command zero or more times with the parameter set to N.
+</li></ul>
+
+<p>where N is the number of pages of data to merge within each invocation of
+the merge command. The application should stop invoking merge when the
+difference in the value returned by the sqlite3_total_changes() function before
+and after the merge command drops to below two. The merge commands may be
+issued as part of the same or separate transactions, and by the same or
+different database clients. Refer to the documentation for the
+<a href="fts5.html#the_merge_command">merge command</a> for further details.
+
+</p><a name="the_pgsz_configuration_option"></a>
+<h2 tags="FTS5 pgsz option" id="the_pgsz_configuration_option"><span>6.8. </span>The 'pgsz' Configuration Option</h2>
+
+<p> This command is used to set the persistent "pgsz" option.
+
+</p><p> The full-text index maintained by FTS5 is stored as a series of fixed-size
+blobs in a database table. It is not strictly necessary for all blobs that make
+up a full-text index to be the same size. The pgsz option determines the size
+of all blobs created by subsequent index writers. The default value is 1000.
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft, rank) VALUES('pgsz', 4072);
+</pre></div>
+
+<a name="the_rank_configuration_option"></a>
+<h2 tags="FTS5 rank configuration option" id="the_rank_configuration_option"><span>6.9. </span>The 'rank' Configuration Option</h2>
+
+<p> This command is used to set the persistent "rank" option.
+
+</p><p> The rank option is used to change the default auxiliary function mapping
+for the rank column. The option should be set to a text value in the same
+format as described for <a href="fts5.html#sorting_by_auxiliary_function_results">"rank MATCH ?"</a> terms
+above. For example:
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft, rank) VALUES('rank', 'bm25(10.0, 5.0)');
+</pre></div>
+
+<a name="the_rebuild_command"></a>
+<h2 tags="FTS5 rebuild command" id="the_rebuild_command"><span>6.10. </span>The 'rebuild' Command</h2>
+
+<p> This command first deletes the entire full-text index, then rebuilds it
+based on the contents of the table or <a href="fts5.html#external_content_tables">content
+table</a>. It is not available with <a href="fts5.html#contentless_tables">contentless
+tables</a>.
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft) VALUES('rebuild');
+</pre></div>
+
+<a name="the_usermerge_configuration_option"></a>
+<h2 tags="FTS5 usermerge option" id="the_usermerge_configuration_option"><span>6.11. </span>The 'usermerge' Configuration Option</h2>
+
+<p> This command is used to set the persistent "usermerge" option.
+
+</p><p> The usermerge option is similar to the automerge and crisismerge options.
+It is the minimum number of b-tree segments that will be merged together by
+a 'merge' command with a positive parameter. For example:
+
+</p><div class="codeblock"><pre>INSERT INTO ft(ft, rank) VALUES('usermerge', 4);
+</pre></div>
+
+<p> The default value of the usermerge option is 4. The minimum allowed value
+is 2, and the maximum 16.
+
+</p><a name="extending_fts5"></a>
+<h1 tags="Extending FTS5" id="extending_fts5"><span>7. </span>Extending FTS5</h1>
+
+<p>FTS5 features APIs allowing it to be extended by:
+
+</p><ul>
+ <li> Adding new auxiliary functions implemented in C, and
+ </li><li> Adding new tokenizers, also implemented in C.
+</li></ul>
+
+<p> The built-in tokenizers and auxiliary functions described in this
+document are all implemented using the publicly available API described
+below.
+
+</p><p> Before a new auxiliary function or tokenizer implementation may be
+registered with FTS5, an application must obtain a pointer to the "fts5_api"
+structure. There is one fts5_api structure for each database connection with
+which the FTS5 extension is registered. To obtain the pointer, the application
+invokes the SQL user-defined function fts5() with a single argument. That
+argument must be set to a pointer to a pointer to an fts5_api object
+using the <a href="c3ref/bind_blob.html">sqlite3_bind_pointer()</a> interface.
+The following example code demonstrates the technique:
+
+</p><div class="codeblock"><pre><i>/*
+** Return a pointer to the fts5_api pointer for database connection db.
+** If an error occurs, return NULL and leave an error in the database
+** handle (accessible using sqlite3_errcode()/errmsg()).
+*/</i>
+fts5_api *fts5_api_from_db(sqlite3 *db){
+ fts5_api *pRet = 0;
+ sqlite3_stmt *pStmt = 0;
+
+ if( SQLITE_OK==sqlite3_prepare(db, "SELECT fts5(?1)", -1, &pStmt, 0) ){
+ sqlite3_bin_pointer(pStmt, (void*)&pRet, "fts5_api_ptr", NULL);
+ sqlite3_step(pStmt);
+ }
+ sqlite3_finalize(pStmt);
+ return pRet;
+}
+</pre></div>
+
+<p><b>Backwards Compatibility Warning:</b>
+Prior to SQLite version 3.20.0 (2017-08-01), the fts5() worked slightly
+differently. Older applications that extend FTS5 must be revised to use
+the new technique shown above.
+
+</p><p> The fts5_api structure is defined as follows. It exposes three methods,
+one each for registering new auxiliary functions and tokenizers, and one for
+retrieving existing tokenizer. The latter is intended to facilitate the
+implementation of "tokenizer wrappers" similar to the built-in
+porter tokenizer.
+
+</p><div class="codeblock"><pre>typedef struct fts5_api fts5_api;
+struct fts5_api {
+ int iVersion; <i>/* Currently always set to 2 */</i>
+
+ <i>/* Create a new tokenizer */</i>
+ int (*xCreateTokenizer)(
+ fts5_api *pApi,
+ const char *zName,
+ void *pContext,
+ fts5_tokenizer *pTokenizer,
+ void (*xDestroy)(void*)
+ );
+
+ <i>/* Find an existing tokenizer */</i>
+ int (*xFindTokenizer)(
+ fts5_api *pApi,
+ const char *zName,
+ void **ppContext,
+ fts5_tokenizer *pTokenizer
+ );
+
+ <i>/* Create a new auxiliary function */</i>
+ int (*xCreateFunction)(
+ fts5_api *pApi,
+ const char *zName,
+ void *pContext,
+ fts5_extension_function xFunction,
+ void (*xDestroy)(void*)
+ );
+};
+</pre></div>
+
+<p> To invoke a method of the fts5_api object, the fts5_api pointer itself
+should be passed as the methods first argument followed by the other, method
+specific, arguments. For example:
+
+</p><div class="codeblock"><pre>rc = pFts5Api->xCreateTokenizer(pFts5Api, ... other args ...);
+</pre></div>
+
+<p> The fts5_api structure methods are described individually in the following
+sections.
+
+</p><a name="custom_tokenizers"></a>
+<h2 tags="custom tokenizers" id="custom_tokenizers"><span>7.1. </span>Custom Tokenizers</h2>
+
+<p> To create a custom tokenizer, an application must implement three
+functions: a tokenizer constructor (xCreate), a destructor (xDelete) and a
+function to do the actual tokenization (xTokenize). The type of each
+function is as for the member variables of the fts5_tokenizer struct:
+
+</p><div class="codeblock"><pre>typedef struct Fts5Tokenizer Fts5Tokenizer;
+typedef struct fts5_tokenizer fts5_tokenizer;
+struct fts5_tokenizer {
+ int (*xCreate)(void*, const char **azArg, int nArg, Fts5Tokenizer **ppOut);
+ void (*xDelete)(Fts5Tokenizer*);
+ int (*xTokenize)(Fts5Tokenizer*,
+ void *pCtx,
+ int flags, <i>/* Mask of FTS5_TOKENIZE_* flags */</i>
+ const char *pText, int nText,
+ int (*xToken)(
+ void *pCtx, <i>/* Copy of 2nd argument to xTokenize() */</i>
+ int tflags, <i>/* Mask of FTS5_TOKEN_* flags */</i>
+ const char *pToken, <i>/* Pointer to buffer containing token */</i>
+ int nToken, <i>/* Size of token in bytes */</i>
+ int iStart, <i>/* Byte offset of token within input text */</i>
+ int iEnd <i>/* Byte offset of end of token within input text */</i>
+ )
+ );
+};
+
+<i>/* Flags that may be passed as the third argument to xTokenize() */</i>
+#define FTS5_TOKENIZE_QUERY 0x0001
+#define FTS5_TOKENIZE_PREFIX 0x0002
+#define FTS5_TOKENIZE_DOCUMENT 0x0004
+#define FTS5_TOKENIZE_AUX 0x0008
+
+<i>/* Flags that may be passed by the tokenizer implementation back to FTS5
+** as the third argument to the supplied xToken callback. */</i>
+#define FTS5_TOKEN_COLOCATED 0x0001 <i>/* Same position as prev. token */</i>
+</pre></div>
+
+<p> The implementation is registered with the FTS5 module by calling the
+xCreateTokenizer() method of the fts5_api object. If there is already a
+tokenizer with the same name, it is replaced. If a non-NULL xDestroy parameter
+is passed to xCreateTokenizer(), it is invoked with a copy of the pContext
+pointer passed as the only argument when the database handle is closed or when
+the tokenizer is replaced.
+
+</p><p> If successful, xCreateTokenizer() returns SQLITE_OK. Otherwise, it
+returns an SQLite error code. In this case the xDestroy function is <b>not</b>
+invoked.
+
+</p><p> When an FTS5 table uses the custom tokenizer, the FTS5 core calls xCreate()
+once to create a tokenizer, then xTokenize() zero or more times to tokenize
+strings, then xDelete() to free any resources allocated by xCreate(). More
+specifically:
+
+</p><dl>
+<dt><b>xCreate:</b></dt><dd><p style="margin-top:0">
+ This function is used to allocate and initialize a tokenizer instance.
+ A tokenizer instance is required to actually tokenize text.
+</p><p>
+ The first argument passed to this function is a copy of the (void*)
+ pointer provided by the application when the fts5_tokenizer object
+ was registered with FTS5 (the third argument to xCreateTokenizer()).
+ The second and third arguments are an array of nul-terminated strings
+ containing the tokenizer arguments, if any, specified following the
+ tokenizer name as part of the CREATE VIRTUAL TABLE statement used
+ to create the FTS5 table.
+</p><p>
+ The final argument is an output variable. If successful, (*ppOut)
+ should be set to point to the new tokenizer handle and SQLITE_OK
+ returned. If an error occurs, some value other than SQLITE_OK should
+ be returned. In this case, fts5 assumes that the final value of *ppOut
+ is undefined.
+</p><p>
+</p></dd><dt><b> xDelete:</b></dt><dd><p style="margin-top:0">
+ This function is invoked to delete a tokenizer handle previously
+ allocated using xCreate(). Fts5 guarantees that this function will
+ be invoked exactly once for each successful call to xCreate().
+</p><p>
+</p></dd><dt><b> xTokenize:</b></dt><dd><p style="margin-top:0">
+ This function is expected to tokenize the nText byte string indicated
+ by argument pText. pText may or may not be nul-terminated. The first
+ argument passed to this function is a pointer to an Fts5Tokenizer object
+ returned by an earlier call to xCreate().
+</p><p>
+ The second argument indicates the reason that FTS5 is requesting
+ tokenization of the supplied text. This is always one of the following
+ four values:
+</p><p>
+ </p><ul><li> <b>FTS5_TOKENIZE_DOCUMENT</b> - A document is being inserted into
+ or removed from the FTS table. The tokenizer is being invoked to
+ determine the set of tokens to add to (or delete from) the
+ FTS index.
+<p>
+ </p></li><li> <b>FTS5_TOKENIZE_QUERY</b> - A MATCH query is being executed
+ against the FTS index. The tokenizer is being called to tokenize
+ a bareword or quoted string specified as part of the query.
+<p>
+ </p></li><li> <b>(FTS5_TOKENIZE_QUERY | FTS5_TOKENIZE_PREFIX)</b> - Same as
+ FTS5_TOKENIZE_QUERY, except that the bareword or quoted string is
+ followed by a "*" character, indicating that the last token
+ returned by the tokenizer will be treated as a token prefix.
+<p>
+ </p></li><li> <b>FTS5_TOKENIZE_AUX</b> - The tokenizer is being invoked to
+ satisfy an fts5_api.xTokenize() request made by an auxiliary
+ function. Or an fts5_api.xColumnSize() request made by the same
+ on a columnsize=0 database.
+ </li></ul>
+<p>
+ For each token in the input string, the supplied callback xToken() must
+ be invoked. The first argument to it should be a copy of the pointer
+ passed as the second argument to xTokenize(). The third and fourth
+ arguments are a pointer to a buffer containing the token text, and the
+ size of the token in bytes. The 4th and 5th arguments are the byte offsets
+ of the first byte of and first byte immediately following the text from
+ which the token is derived within the input.
+</p><p>
+ The second argument passed to the xToken() callback ("tflags") should
+ normally be set to 0. The exception is if the tokenizer supports
+ synonyms. In this case see the discussion below for details.
+</p><p>
+ FTS5 assumes the xToken() callback is invoked for each token in the
+ order that they occur within the input text.
+</p><p>
+ If an xToken() callback returns any value other than SQLITE_OK, then
+ the tokenization should be abandoned and the xTokenize() method should
+ immediately return a copy of the xToken() return value. Or, if the
+ input buffer is exhausted, xTokenize() should return SQLITE_OK. Finally,
+ if an error occurs with the xTokenize() implementation itself, it
+ may abandon the tokenization and return any error code other than
+ SQLITE_OK or SQLITE_DONE.
+</p><p>
+</p></dd></dl><h3 id="synonym_support"><span>7.1.1. </span>Synonym Support</h3>
+<p>
+ Custom tokenizers may also support synonyms. Consider a case in which a
+ user wishes to query for a phrase such as "first place". Using the
+ built-in tokenizers, the FTS5 query 'first + place' will match instances
+ of "first place" within the document set, but not alternative forms
+ such as "1st place". In some applications, it would be better to match
+ all instances of "first place" or "1st place" regardless of which form
+ the user specified in the MATCH query text.
+</p><p>
+ There are several ways to approach this in FTS5:
+</p><p>
+ </p><ol><li> By mapping all synonyms to a single token. In this case, using
+ the above example, this means that the tokenizer returns the
+ same token for inputs "first" and "1st". Say that token is in
+ fact "first", so that when the user inserts the document "I won
+ 1st place" entries are added to the index for tokens "i", "won",
+ "first" and "place". If the user then queries for '1st + place',
+ the tokenizer substitutes "first" for "1st" and the query works
+ as expected.
+<p>
+ </p></li><li> By querying the index for all synonyms of each query term
+ separately. In this case, when tokenizing query text, the
+ tokenizer may provide multiple synonyms for a single term
+ within the document. FTS5 then queries the index for each
+ synonym individually. For example, faced with the query:
+<p>
+ </p><div class="codeblock"><pre>... MATCH 'first place'
+</pre></div>
+<p>
+ the tokenizer offers both "1st" and "first" as synonyms for the
+ first token in the MATCH query and FTS5 effectively runs a query
+ similar to:
+</p><p>
+ </p><div class="codeblock"><pre>... MATCH '(first OR 1st) place'
+</pre></div>
+<p>
+ except that, for the purposes of auxiliary functions, the query
+ still appears to contain just two phrases - "(first OR 1st)"
+ being treated as a single phrase.
+</p><p>
+ </p></li><li> By adding multiple synonyms for a single term to the FTS index.
+ Using this method, when tokenizing document text, the tokenizer
+ provides multiple synonyms for each token. So that when a
+ document such as "I won first place" is tokenized, entries are
+ added to the FTS index for "i", "won", "first", "1st" and
+ "place".
+<p>
+ This way, even if the tokenizer does not provide synonyms
+ when tokenizing query text (it should not - to do so would be
+ inefficient), it doesn't matter if the user queries for
+ 'first + place' or '1st + place', as there are entries in the
+ FTS index corresponding to both forms of the first token.
+ </p></li></ol>
+<p>
+ Whether it is parsing document or query text, any call to xToken that
+ specifies a <i>tflags</i> argument with the FTS5_TOKEN_COLOCATED bit
+ is considered to supply a synonym for the previous token. For example,
+ when parsing the document "I won first place", a tokenizer that supports
+ synonyms would call xToken() 5 times, as follows:
+</p><p>
+ </p><div class="codeblock"><pre>xToken(pCtx, 0, "i", 1, 0, 1);
+xToken(pCtx, 0, "won", 3, 2, 5);
+xToken(pCtx, 0, "first", 5, 6, 11);
+xToken(pCtx, FTS5_TOKEN_COLOCATED, "1st", 3, 6, 11);
+xToken(pCtx, 0, "place", 5, 12, 17);
+</pre></div>
+<p>
+ It is an error to specify the FTS5_TOKEN_COLOCATED flag the first time
+ xToken() is called. Multiple synonyms may be specified for a single token
+ by making multiple calls to xToken(FTS5_TOKEN_COLOCATED) in sequence.
+ There is no limit to the number of synonyms that may be provided for a
+ single token.
+</p><p>
+ In many cases, method (1) above is the best approach. It does not add
+ extra data to the FTS index or require FTS5 to query for multiple terms,
+ so it is efficient in terms of disk space and query speed. However, it
+ does not support prefix queries very well. If, as suggested above, the
+ token "first" is substituted for "1st" by the tokenizer, then the query:
+</p><p>
+ </p><div class="codeblock"><pre>... MATCH '1s*'
+</pre></div>
+<p>
+ will not match documents that contain the token "1st" (as the tokenizer
+ will probably not map "1s" to any prefix of "first").
+</p><p>
+ For full prefix support, method (3) may be preferred. In this case,
+ because the index contains entries for both "first" and "1st", prefix
+ queries such as 'fi*' or '1s*' will match correctly. However, because
+ extra entries are added to the FTS index, this method uses more space
+ within the database.
+</p><p>
+ Method (2) offers a midpoint between (1) and (3). Using this method,
+ a query such as '1s*' will match documents that contain the literal
+ token "1st", but not "first" (assuming the tokenizer is not able to
+ provide synonyms for prefixes). However, a non-prefix query like '1st'
+ will match against "1st" and "first". This method does not require
+ extra disk space, as no extra entries are added to the FTS index.
+ On the other hand, it may require more CPU cycles to run MATCH queries,
+ as separate queries of the FTS index are required for each synonym.
+</p><p>
+ When using methods (2) or (3), it is important that the tokenizer only
+ provide synonyms when tokenizing document text (method (2)) or query
+ text (method (3)), not both. Doing so will not cause any errors, but is
+ inefficient.
+
+
+
+</p><a name="custom_auxiliary_functions"></a>
+<h2 tags="FTS5 custom auxiliary functions" id="custom_auxiliary_functions"><span>7.2. </span>Custom Auxiliary Functions</h2>
+
+<p> Implementing a custom auxiliary function is similar to implementing a
+<a href="appfunc.html">scalar SQL function</a>. The implementation
+should be a C function of type fts5_extension_function, defined as follows:
+
+</p><div class="codeblock"><pre>typedef struct Fts5ExtensionApi Fts5ExtensionApi;
+typedef struct Fts5Context Fts5Context;
+typedef struct Fts5PhraseIter Fts5PhraseIter;
+
+typedef void (*fts5_extension_function)(
+ const Fts5ExtensionApi *pApi, <i>/* API offered by current FTS version */</i>
+ Fts5Context *pFts, <i>/* First arg to pass to pApi functions */</i>
+ sqlite3_context *pCtx, <i>/* Context for returning result/error */</i>
+ int nVal, <i>/* Number of values in apVal[] array */</i>
+ sqlite3_value **apVal <i>/* Array of trailing arguments */</i>
+);
+</pre></div>
+
+<p> The implementation is registered with the FTS5 module by calling the
+xCreateFunction() method of the fts5_api object. If there is already an
+auxiliary function with the same name, it is replaced by the new function.
+If a non-NULL xDestroy parameter is passed to xCreateFunction(), it is invoked
+with a copy of the pContext pointer passed as the only argument when the
+database handle is closed or when the registered auxiliary function is
+replaced.
+
+</p><p> If successful, xCreateFunction() returns SQLITE_OK. Otherwise, it
+returns an SQLite error code. In this case the xDestroy function is <b>not</b>
+invoked.
+
+</p><p> The final three arguments passed to the auxiliary function callback are
+similar to the three arguments passed to the implementation of a scalar SQL
+function. All arguments except the first passed to the auxiliary function are
+available to the implementation in the apVal&#91;&#93; array. The
+implementation should return a result or error via the content handle pCtx.
+
+</p><p> The first argument passed to an auxiliary function callback is a pointer
+to a structure containing methods that may be invoked in order to obtain
+information regarding the current query or row. The second argument is an
+opaque handle that should be passed as the first argument to any such method
+invocation. For example, the following auxiliary function definition returns
+the total number of tokens in all columns of the current row:
+
+</p><div class="codeblock"><pre><i>/*
+** Implementation of an auxiliary function that returns the number
+** of tokens in the current row (including all columns).
+*/</i>
+static void column_size_imp(
+ const Fts5ExtensionApi *pApi,
+ Fts5Context *pFts,
+ sqlite3_context *pCtx,
+ int nVal,
+ sqlite3_value **apVal
+){
+ int rc;
+ int nToken;
+ rc = pApi->xColumnSize(pFts, -1, &nToken);
+ if( rc==SQLITE_OK ){
+ sqlite3_result_int(pCtx, nToken);
+ }else{
+ sqlite3_result_error_code(pCtx, rc);
+ }
+}
+</pre></div>
+
+<p>The following section describes the API offered to auxiliary function
+implementations in detail. Further examples may be found in the "fts5_aux.c"
+file of the source code.
+
+</p><a name="_custom_auxiliary_functions_api_reference_"></a>
+<h3 tags="custom auxiliary functions" id="_custom_auxiliary_functions_api_reference_"><span>7.2.1. </span>
+ Custom Auxiliary Functions API Reference
+</h3>
+
+<div class="codeblock"><pre>struct Fts5ExtensionApi {
+ int iVersion; <i>/* Currently always set to 3 */</i>
+
+ void *(*<a href="#xUserData">xUserData</a>)(Fts5Context*);
+
+ int (*<a href="#xColumnCount">xColumnCount</a>)(Fts5Context*);
+ int (*<a href="#xRowCount">xRowCount</a>)(Fts5Context*, sqlite3_int64 *pnRow);
+ int (*<a href="#xColumnTotalSize">xColumnTotalSize</a>)(Fts5Context*, int iCol, sqlite3_int64 *pnToken);
+
+ int (*<a href="#xTokenize">xTokenize</a>)(Fts5Context*,
+ const char *pText, int nText, <i>/* Text to tokenize */</i>
+ void *pCtx, <i>/* Context passed to xToken() */</i>
+ int (*xToken)(void*, int, const char*, int, int, int) <i>/* Callback */</i>
+ );
+
+ int (*<a href="#xPhraseCount">xPhraseCount</a>)(Fts5Context*);
+ int (*<a href="#xPhraseSize">xPhraseSize</a>)(Fts5Context*, int iPhrase);
+
+ int (*<a href="#xInstCount">xInstCount</a>)(Fts5Context*, int *pnInst);
+ int (*<a href="#xInst">xInst</a>)(Fts5Context*, int iIdx, int *piPhrase, int *piCol, int *piOff);
+
+ sqlite3_int64 (*<a href="#xRowid">xRowid</a>)(Fts5Context*);
+ int (*<a href="#xColumnText">xColumnText</a>)(Fts5Context*, int iCol, const char **pz, int *pn);
+ int (*<a href="#xColumnSize">xColumnSize</a>)(Fts5Context*, int iCol, int *pnToken);
+
+ int (*<a href="#xQueryPhrase">xQueryPhrase</a>)(Fts5Context*, int iPhrase, void *pUserData,
+ int(*)(const Fts5ExtensionApi*,Fts5Context*,void*)
+ );
+ int (*<a href="#xSetAuxdata">xSetAuxdata</a>)(Fts5Context*, void *pAux, void(*xDelete)(void*));
+ void *(*<a href="#xGetAuxdata">xGetAuxdata</a>)(Fts5Context*, int bClear);
+
+ int (*<a href="#xPhraseFirst">xPhraseFirst</a>)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*, int*);
+ void (*<a href="#xPhraseNext">xPhraseNext</a>)(Fts5Context*, Fts5PhraseIter*, int *piCol, int *piOff);
+
+ int (*<a href="#xPhraseFirst">xPhraseFirst</a>Column)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*);
+ void (*<a href="#xPhraseNext">xPhraseNext</a>Column)(Fts5Context*, Fts5PhraseIter*, int *piCol);
+};
+</pre></div>
+
+<dl>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xUserData">
+<b>void *(*xUserData)(Fts5Context*)</b></dt><dd>
+<p style="margin-top:0.1em">
+Return a copy of the context pointer the extension function was
+ registered with.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xColumnTotalSize">
+<b>int (*xColumnTotalSize)(Fts5Context*, int iCol, sqlite3_int64 *pnToken)</b></dt><dd>
+<p style="margin-top:0.1em">
+If parameter iCol is less than zero, set output variable *pnToken
+ to the total number of tokens in the FTS5 table. Or, if iCol is
+ non-negative but less than the number of columns in the table, return
+ the total number of tokens in column iCol, considering all rows in
+ the FTS5 table.
+</p>
+
+<p>
+ If parameter iCol is greater than or equal to the number of columns
+ in the table, SQLITE_RANGE is returned. Or, if an error occurs (e.g.
+ an OOM condition or IO error), an appropriate SQLite error code is
+ returned.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xColumnCount">
+<b>int (*xColumnCount)(Fts5Context*)</b></dt><dd>
+<p style="margin-top:0.1em">
+Return the number of columns in the table.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xColumnSize">
+<b>int (*xColumnSize)(Fts5Context*, int iCol, int *pnToken)</b></dt><dd>
+<p style="margin-top:0.1em">
+If parameter iCol is less than zero, set output variable *pnToken
+ to the total number of tokens in the current row. Or, if iCol is
+ non-negative but less than the number of columns in the table, set
+ *pnToken to the number of tokens in column iCol of the current row.
+</p>
+
+<p>
+ If parameter iCol is greater than or equal to the number of columns
+ in the table, SQLITE_RANGE is returned. Or, if an error occurs (e.g.
+ an OOM condition or IO error), an appropriate SQLite error code is
+ returned.
+</p>
+
+<p>
+ This function may be quite inefficient if used with an FTS5 table
+ created with the "columnsize=0" option.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xColumnText">
+<b>int (*xColumnText)(Fts5Context*, int iCol, const char **pz, int *pn)</b></dt><dd>
+<p style="margin-top:0.1em">
+This function attempts to retrieve the text of column iCol of the
+ current document. If successful, (*pz) is set to point to a buffer
+ containing the text in utf-8 encoding, (*pn) is set to the size in bytes
+ (not characters) of the buffer and SQLITE_OK is returned. Otherwise,
+ if an error occurs, an SQLite error code is returned and the final values
+ of (*pz) and (*pn) are undefined.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xPhraseCount">
+<b>int (*xPhraseCount)(Fts5Context*)</b></dt><dd>
+<p style="margin-top:0.1em">
+Returns the number of phrases in the current query expression.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xPhraseSize">
+<b>int (*xPhraseSize)(Fts5Context*, int iPhrase)</b></dt><dd>
+<p style="margin-top:0.1em">
+Returns the number of tokens in phrase iPhrase of the query. Phrases
+ are numbered starting from zero.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xInstCount">
+<b>int (*xInstCount)(Fts5Context*, int *pnInst)</b></dt><dd>
+<p style="margin-top:0.1em">
+Set *pnInst to the total number of occurrences of all phrases within
+ the query within the current row. Return SQLITE_OK if successful, or
+ an error code (i.e. SQLITE_NOMEM) if an error occurs.
+</p>
+
+<p>
+ This API can be quite slow if used with an FTS5 table created with the
+ "detail=none" or "detail=column" option. If the FTS5 table is created
+ with either "detail=none" or "detail=column" and "content=" option
+ (i.e. if it is a contentless table), then this API always returns 0.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xInst">
+<b>int (*xInst)(Fts5Context*, int iIdx, int *piPhrase, int *piCol, int *piOff)</b></dt><dd>
+<p style="margin-top:0.1em">
+Query for the details of phrase match iIdx within the current row.
+ Phrase matches are numbered starting from zero, so the iIdx argument
+ should be greater than or equal to zero and smaller than the value
+ output by xInstCount().
+</p>
+
+<p>
+ Usually, output parameter *piPhrase is set to the phrase number, *piCol
+ to the column in which it occurs and *piOff the token offset of the
+ first token of the phrase. Returns SQLITE_OK if successful, or an error
+ code (i.e. SQLITE_NOMEM) if an error occurs.
+</p>
+
+<p>
+ This API can be quite slow if used with an FTS5 table created with the
+ "detail=none" or "detail=column" option.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xRowid">
+<b>sqlite3_int64 (*xRowid)(Fts5Context*)</b></dt><dd>
+<p style="margin-top:0.1em">
+Returns the rowid of the current row.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xTokenize">
+<b>int (*xTokenize)(Fts5Context*,
+ const char *pText, int nText,
+ void *pCtx,
+ int (*xToken)(void*, int, const char*, int, int, int)
+)</b></dt><dd>
+<p style="margin-top:0.1em">
+Tokenize text using the tokenizer belonging to the FTS5 table.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xQueryPhrase">
+<b>int (*xQueryPhrase)(Fts5Context*, int iPhrase, void *pUserData,
+ int(*)(const Fts5ExtensionApi*,Fts5Context*,void*)
+)</b></dt><dd>
+<p style="margin-top:0.1em">
+This API function is used to query the FTS table for phrase iPhrase
+ of the current query. Specifically, a query equivalent to:
+</p>
+
+<div class="codeblock"><pre>... FROM ftstable WHERE ftstable MATCH $p ORDER BY rowid
+</pre></div>
+
+<p>
+ with $p set to a phrase equivalent to the phrase iPhrase of the
+ current query is executed. Any column filter that applies to
+ phrase iPhrase of the current query is included in $p. For each
+ row visited, the callback function passed as the fourth argument
+ is invoked. The context and API objects passed to the callback
+ function may be used to access the properties of each matched row.
+ Invoking Api.xUserData() returns a copy of the pointer passed as
+ the third argument to pUserData.
+</p>
+
+<p>
+ If the callback function returns any value other than SQLITE_OK, the
+ query is abandoned and the xQueryPhrase function returns immediately.
+ If the returned value is SQLITE_DONE, xQueryPhrase returns SQLITE_OK.
+ Otherwise, the error code is propagated upwards.
+</p>
+
+<p>
+ If the query runs to completion without incident, SQLITE_OK is returned.
+ Or, if some error occurs before the query completes or is aborted by
+ the callback, an SQLite error code is returned.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xSetAuxdata">
+<b>int (*xSetAuxdata)(Fts5Context*, void *pAux, void(*xDelete)(void*))</b></dt><dd>
+<p style="margin-top:0.1em">
+Save the pointer passed as the second argument as the extension function's
+ "auxiliary data". The pointer may then be retrieved by the current or any
+ future invocation of the same fts5 extension function made as part of
+ the same MATCH query using the xGetAuxdata() API.
+</p>
+
+<p>
+ Each extension function is allocated a single auxiliary data slot for
+ each FTS query (MATCH expression). If the extension function is invoked
+ more than once for a single FTS query, then all invocations share a
+ single auxiliary data context.
+</p>
+
+<p>
+ If there is already an auxiliary data pointer when this function is
+ invoked, then it is replaced by the new pointer. If an xDelete callback
+ was specified along with the original pointer, it is invoked at this
+ point.
+</p>
+
+<p>
+ The xDelete callback, if one is specified, is also invoked on the
+ auxiliary data pointer after the FTS5 query has finished.
+</p>
+
+<p>
+ If an error (e.g. an OOM condition) occurs within this function,
+ the auxiliary data is set to NULL and an error code returned. If the
+ xDelete parameter was not NULL, it is invoked on the auxiliary data
+ pointer before returning.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xGetAuxdata">
+<b>void *(*xGetAuxdata)(Fts5Context*, int bClear)</b></dt><dd>
+<p style="margin-top:0.1em">
+Returns the current auxiliary data pointer for the fts5 extension
+ function. See the xSetAuxdata() method for details.
+</p>
+
+<p>
+ If the bClear argument is non-zero, then the auxiliary data is cleared
+ (set to NULL) before this function returns. In this case the xDelete,
+ if any, is not invoked.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xRowCount">
+<b>int (*xRowCount)(Fts5Context*, sqlite3_int64 *pnRow)</b></dt><dd>
+<p style="margin-top:0.1em">
+This function is used to retrieve the total number of rows in the table.
+ In other words, the same value that would be returned by:
+</p>
+
+<div class="codeblock"><pre>SELECT count(*) FROM ftstable;
+</pre></div>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xPhraseFirst">
+<b>int (*xPhraseFirst)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*, int*)</b></dt><dd>
+<p style="margin-top:0.1em">
+This function is used, along with type Fts5PhraseIter and the xPhraseNext
+ method, to iterate through all instances of a single query phrase within
+ the current row. This is the same information as is accessible via the
+ xInstCount/xInst APIs. While the xInstCount/xInst APIs are more convenient
+ to use, this API may be faster under some circumstances. To iterate
+ through instances of phrase iPhrase, use the following code:
+</p>
+
+<div class="codeblock"><pre>Fts5PhraseIter iter;
+int iCol, iOff;
+for(pApi->xPhraseFirst(pFts, iPhrase, &iter, &iCol, &iOff);
+ iCol>=0;
+ pApi->xPhraseNext(pFts, &iter, &iCol, &iOff)
+){
+ // An instance of phrase iPhrase at offset iOff of column iCol
+}
+</pre></div>
+
+<p>
+ The Fts5PhraseIter structure is defined above. Applications should not
+ modify this structure directly - it should only be used as shown above
+ with the xPhraseFirst() and xPhraseNext() API methods (and by
+ xPhraseFirstColumn() and xPhraseNextColumn() as illustrated below).
+</p>
+
+<p>
+ This API can be quite slow if used with an FTS5 table created with the
+ "detail=none" or "detail=column" option. If the FTS5 table is created
+ with either "detail=none" or "detail=column" and "content=" option
+ (i.e. if it is a contentless table), then this API always iterates
+ through an empty set (all calls to xPhraseFirst() set iCol to -1).
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xPhraseNext">
+<b>void (*xPhraseNext)(Fts5Context*, Fts5PhraseIter*, int *piCol, int *piOff)</b></dt><dd>
+<p style="margin-top:0.1em">
+See xPhraseFirst above.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xPhraseFirstColumn">
+<b>int (*xPhraseFirstColumn)(Fts5Context*, int iPhrase, Fts5PhraseIter*, int*)</b></dt><dd>
+<p style="margin-top:0.1em">
+This function and xPhraseNextColumn() are similar to the xPhraseFirst()
+ and xPhraseNext() APIs described above. The difference is that instead
+ of iterating through all instances of a phrase in the current row, these
+ APIs are used to iterate through the set of columns in the current row
+ that contain one or more instances of a specified phrase. For example:
+</p>
+
+<div class="codeblock"><pre>Fts5PhraseIter iter;
+int iCol;
+for(pApi->xPhraseFirstColumn(pFts, iPhrase, &iter, &iCol);
+ iCol>=0;
+ pApi->xPhraseNextColumn(pFts, &iter, &iCol)
+){
+ // Column iCol contains at least one instance of phrase iPhrase
+}
+</pre></div>
+
+<p>
+ This API can be quite slow if used with an FTS5 table created with the
+ "detail=none" option. If the FTS5 table is created with either
+ "detail=none" "content=" option (i.e. if it is a contentless table),
+ then this API always iterates through an empty set (all calls to
+ xPhraseFirstColumn() set iCol to -1).
+</p>
+
+<p>
+ The information accessed using this API and its companion
+ xPhraseFirstColumn() may also be obtained using xPhraseFirst/xPhraseNext
+ (or xInst/xInstCount). The chief advantage of this API is that it is
+ significantly more efficient than those alternatives when used with
+ "detail=column" tables.
+</p>
+</dd>
+<dt style="white-space:pre;font-family:monospace;font-size:120%" id="xPhraseNextColumn">
+<b>void (*xPhraseNextColumn)(Fts5Context*, Fts5PhraseIter*, int *piCol)</b></dt><dd>
+<p style="margin-top:0.1em">
+See xPhraseFirstColumn above.
+</p>
+</dd>
+</dl>
+
+
+<a name="the_fts5vocab_virtual_table_module"></a>
+<h1 tags="fts5vocab" id="the_fts5vocab_virtual_table_module"><span>8. </span>The fts5vocab Virtual Table Module</h1>
+
+<p> The fts5vocab virtual table module allows users to extract information from
+an FTS5 full-text index directly. The fts5vocab module is a part of FTS5 - it
+is available whenever FTS5 is.
+
+</p><p> Each fts5vocab table is associated with a single FTS5 table. An fts5vocab
+table is usually created by specifying two arguments in place of column names
+in the CREATE VIRTUAL TABLE statement - the name of the associated FTS5 table
+and the type of fts5vocab table. Currently there are three types of fts5vocab
+table; "row", "col" and "instance". Unless the fts5vocab table is created
+within the "temp" database, it must be part of the same database as the
+associated FTS5 table.
+
+</p><div class="codeblock"><pre><i>-- Create an fts5vocab "row" table to query the full-text index belonging
+-- to FTS5 table "ft1".</i>
+CREATE VIRTUAL TABLE ft1_v USING fts5vocab('ft1', 'row');
+
+<i>-- Create an fts5vocab "col" table to query the full-text index belonging
+-- to FTS5 table "ft2".</i>
+CREATE VIRTUAL TABLE ft2_v USING fts5vocab(ft2, col);
+
+<i>-- Create an fts5vocab "instance" table to query the full-text index
+-- belonging to FTS5 table "ft3".</i>
+CREATE VIRTUAL TABLE ft3_v USING fts5vocab(ft3, instance);
+</pre></div>
+
+<p> If an fts5vocab table is created in the temp database, it may be associated
+with an FTS5 table in any attached database. In order to attach the fts5vocab
+table to an FTS5 table located in a database other than "temp", the name of the
+database is inserted before the FTS5 table name in the CREATE VIRTUAL TABLE
+arguments. For example:
+
+</p><div class="codeblock"><pre><i>-- Create an fts5vocab "row" table to query the full-text index belonging
+-- to FTS5 table "ft1" in database "main".</i>
+CREATE VIRTUAL TABLE temp.ft1_v USING fts5vocab(main, 'ft1', 'row');
+
+<i>-- Create an fts5vocab "col" table to query the full-text index belonging
+-- to FTS5 table "ft2" in attached database "aux".</i>
+CREATE VIRTUAL TABLE temp.ft2_v USING fts5vocab('aux', ft2, col);
+
+<i>-- Create an fts5vocab "instance" table to query the full-text index
+-- belonging to FTS5 table "ft3" in attached database "other".</i>
+CREATE VIRTUAL TABLE temp.ft2_v USING fts5vocab('aux', ft3, 'instance');
+</pre></div>
+
+<p> Specifying three arguments when creating an fts5vocab table in any database
+other than "temp" results in an error.
+
+</p><p> An fts5vocab table of type "row" contains one row for each distinct term
+in the associated FTS5 table. The table columns are as follows:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Column</th><th>Contents
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>term</td><td> The term, as stored in the FTS5 index.
+ </td></tr><tr style="text-align:left"><td>doc</td><td> The number of rows that contain at least one instance of the term.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>cnt</td><td> The total number of instances of the term in the entire FTS5 table.
+</td></tr></table>
+
+<p> An fts5vocab table of type "col" contains one row for each distinct term/column
+combination in the associated FTS5 table. Table columns are as follows:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Column</th><th>Contents
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>term</td><td> The term, as stored in the FTS5 index.
+ </td></tr><tr style="text-align:left"><td>col</td><td> The name of the FTS5 table column that contains the term.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>doc</td><td> The number of rows in the FTS5 table for which column $col
+ contains at least one instance of the term.
+ </td></tr><tr style="text-align:left"><td>cnt</td><td> The total number of instances of the term that appear in
+ column $col of the FTS5 table (considering all rows).
+</td></tr></table>
+
+<p> An fts5vocab table of type "instance" contains one row for each term
+instance stored in the associated FTS index. Assuming the FTS5 table is
+created with the 'detail' option set to 'full', table columns are as follows:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Column</th><th>Contents
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>term</td><td> The term, as stored in the FTS5 index.
+ </td></tr><tr style="text-align:left"><td>doc</td><td> The rowid of the document that contains the term instance.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>col</td><td> The name of the column that contains the term instance.
+ </td></tr><tr style="text-align:left"><td>offset</td><td> The index of the term instance within its column. Terms
+ are numbered in order of occurrence starting from 0.
+</td></tr></table>
+
+<p> If the FTS5 table is created with the 'detail' option set to 'col', then
+the <i>offset</i> column of an instance virtual table always contains NULL.
+In this case there is one row in the table for each unique term/doc/col
+combination. Or, if the FTS5 table is created with 'detail' set to 'none',
+then both <i>offset</i> and <i>col</i> always contain NULL values. For
+detail=none FTS5 tables, there is one row in the fts5vocab table for each
+unique term/doc combination.
+
+</p><p>Example:
+
+</p><div class="codeblock"><pre><i>-- Assuming a database created using:</i>
+CREATE VIRTUAL TABLE ft1 USING fts5(c1, c2);
+INSERT INTO ft1 VALUES('apple banana cherry', 'banana banana cherry');
+INSERT INTO ft1 VALUES('cherry cherry cherry', 'date date date');
+
+<i>-- Then querying the following fts5vocab table (type "col") returns:
+--
+-- apple | c1 | 1 | 1
+-- banana | c1 | 1 | 1
+-- banana | c2 | 1 | 2
+-- cherry | c1 | 2 | 4
+-- cherry | c2 | 1 | 1
+-- date | c3 | 1 | 3
+--</i>
+CREATE VIRTUAL TABLE ft1_v_col USING fts5vocab(ft1, col);
+
+<i>-- Querying an fts5vocab table of type "row" returns:
+--
+-- apple | 1 | 1
+-- banana | 1 | 3
+-- cherry | 2 | 5
+-- date | 1 | 3
+--</i>
+CREATE VIRTUAL TABLE ft1_v_row USING fts5vocab(ft1, row);
+
+<i>-- And, for type "instance"
+INSERT INTO ft1 VALUES('apple banana cherry', 'banana banana cherry');
+INSERT INTO ft1 VALUES('cherry cherry cherry', 'date date date');
+--
+-- apple | 1 | c1 | 0
+-- banana | 1 | c1 | 1
+-- banana | 1 | c2 | 0
+-- banana | 1 | c2 | 1
+-- cherry | 1 | c1 | 2
+-- cherry | 1 | c2 | 2
+-- cherry | 2 | c1 | 0
+-- cherry | 2 | c1 | 1
+-- cherry | 2 | c1 | 2
+-- date | 2 | c2 | 0
+-- date | 2 | c2 | 1
+-- date | 2 | c2 | 2
+--</i>
+CREATE VIRTUAL TABLE ft1_v_instance USING fts5vocab(ft1, instance);
+</pre></div>
+
+<a name="fts5shadowtables"></a>
+
+<h1 id="fts5_data_structures"><span>9. </span>FTS5 Data Structures</h1>
+
+<p>This section describes at a high-level the way the FTS module stores its
+index and content in the database. It is not necessary to read or understand
+the material in this section in order to use FTS in an application. However, it
+may be useful to application developers attempting to analyze and understand
+FTS performance characteristics, or to developers contemplating enhancements to
+the existing FTS feature set.
+
+</p><p>
+When an FTS5 virtual table is created in a database, between 3 and 5 real
+tables are created in the database. These are known as "<a href="vtab.html#xshadowname">shadow tables</a>", and
+are used by the virtual table module to store persistent data. They should not
+be accessed directly by the user. Many other virtual table modules, including
+<a href="fts3.html">FTS3</a> and <a href="rtree.html">rtree</a>, also create and use shadow tables.
+
+</p><p>FTS5 creates the following shadow tables. In each case the actual table name
+is based on the name of the FTS5 virtual table (in the following, replace
+% with the name of the virtual table to find the actual shadow table name).
+
+</p><div class="codeblock"><pre><i>-- This table contains most of the full-text index data. </i>
+CREATE TABLE %_data(id INTEGER PRIMARY KEY, block BLOB);
+
+<i>-- This table contains the remainder of the full-text index data. </i>
+<i>-- It is almost always much smaller than the %_data table. </i>
+CREATE TABLE %_idx(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
+
+<i>-- Contains the values of persistent configuration parameters.</i>
+CREATE TABLE %_config(k PRIMARY KEY, v) WITHOUT ROWID;
+
+<i>-- Contains the size of each column of each row in the virtual table</i>
+<i>-- in tokens. This shadow table is not present if the "columnsize"</i>
+<i>-- option is set to 0.</i>
+CREATE TABLE %_docsize(id INTEGER PRIMARY KEY, sz BLOB);
+
+<i>-- Contains the actual data inserted into the FTS5 table. There</i>
+<i>-- is one "cN" column for each indexed column in the FTS5 table.</i>
+<i>-- This shadow table is not present for contentless or external </i>
+<i>-- content FTS5 tables. </i>
+CREATE TABLE %_content(id INTEGER PRIMARY KEY, c0, c1...);
+</pre></div>
+
+<p>The following sections describe in more detail how these five tables are
+used to store FTS5 data.
+
+</p><h2 id="varint_format"><span>9.1. </span>Varint Format</h2>
+
+<p>The sections below refer to 64-bit signed integers stored in "varint" form.
+FTS5 uses the same varint format as used in various places by the SQLite core.
+
+</p><p>A varint is between 1 and 9 bytes in length. The varint consists of either
+zero or more bytes which have the high-order bit set followed by a single byte
+with the high-order bit clear, or nine bytes, whichever is shorter. The lower
+seven bits of each of the first eight bytes and all 8 bits of the ninth byte
+are used to reconstruct the 64-bit twos-complement integer. Varints are
+big-endian: bits taken from the earlier byte of the varint are more significant
+than bits taken from the later bytes.
+
+</p><h2 id="the_fts_index_idx_and_data_tables_"><span>9.2. </span>The FTS Index (%_idx and %_data tables)</h2>
+
+<p>The FTS index is an ordered key-value store where the keys are document
+terms or term prefixes and the associated values are "doclists". A doclist is a
+packed array of varints that encodes the position of each instance of the term
+within the FTS5 table. The position of a single term instance is defined as the
+combination of:
+
+</p><ul>
+ <li> The rowid of the FTS5 table row it appears in,
+ </li><li> The index of the column the term instance appears in (columns are
+ numbered from left to right starting from zero), and
+ </li><li> The offset of the term within the column value (i.e. the number of
+ tokens that appear within the column value before this one).
+</li></ul>
+
+<p>The FTS index contains up to (nPrefix+1) entries for each token in the
+data set, where nPrefix is the number of defined <a href="#prefix_indexes">
+prefix indexes</a>.
+
+</p><p>Keys associated with the main FTS index (the one that is not a prefix
+index) are prefixed with the character "0". Keys for the first prefix
+index are prefixed with "1". Keys for the second prefix index are
+prefixed with "2", and so on. For example, if the token "document" is
+inserted into an FTS5 table with <a href="#prefix_indexes">prefix indexes</a>
+specified by prefix="2 4", then the keys added to the FTS index would be
+"0document", "1do" and "2docu".
+
+</p><p>The FTS index entries are not stored in a single tree or hash table
+structure. Instead, they are stored in a series of immutable b-tree like
+structures referred to as "segment b-trees". Each time a write to the FTS5
+table is committed, one or more (but usually just one) new segment b-trees
+are added containing both the new entries and tombstones for any deleted
+entries. When the FTS index is queried, the reader queries each segment
+b-tree in turn and merges the results, giving priority to newer data.
+
+</p><p>Each segment b-tree is assigned a numerical level. When a new segment
+b-tree is written to the database as part of committing a transaction,
+it is assigned to level 0. Segment b-trees belonging to a single level are
+periodically merged together to create a single, larger segment b-tree
+that is assigned to the next level (i.e. level 0 segment b-trees are
+merged to become a single level 1 segment b-tree). Thus the numerically
+larger levels contain older data in (usually) larger segment b-trees.
+Refer to the
+<a href="#the_automerge_configuration_option">'automerge'</a>,
+<a href="#the_crisismerge_configuration_option">'crisismerge'</a> and
+<a href="#the_usermerge_configuration_option">'usermerge'</a> options, along
+with the
+<a href="#the_merge_command">'merge'</a> and
+<a href="#the_optimize_command">'optimize'</a> commands for details on how to
+control the merging.
+
+</p><p>In cases where the doclist associated with a term or term prefix is very
+large, there may be an associated <a href="#doclist_index_format">doclist
+index</a>. A doclist index is similar to the set of internal nodes of a b-tree.
+It allows a large doclist to be efficiently queried for rowids or ranges of
+rowids. For example, when processing a query like:
+
+</p><div class="codeblock"><pre>SELECT ... FROM fts_table('term') WHERE rowid BETWEEN ? AND ?
+</pre></div>
+
+<p>FTS5 uses the segment b-tree index to locate the doclist for term "term",
+then uses its doclist index (assuming it is present) to efficiently identify
+the subset of matches with rowids in the required range.
+
+</p><h3 id="data_structure"><span>9.2.1. </span>The %_data Table Rowid Space</h3>
+
+<div class="codeblock"><pre>CREATE TABLE %_data(
+ id INTEGER PRIMARY KEY,
+ block BLOB
+);
+</pre></div>
+
+<p>The %_data table is used to store three types of records:
+
+</p><ul>
+ <li> The special <a href="#structure_record_format">structure record</a>,
+ stored with id=1.
+ </li><li> The special <a href="#averages_record_format">averages record</a>,
+ stored with id=10.
+ </li><li> A record to store each <a href="#segment_b_tree_format">segment b-tree</a>
+ leaf and <a href="#doclist_index_format">doclist index</a> leaf and
+ internal node. See below for how id values are calculated for these
+ records.
+</li></ul>
+
+<p>Each segment b-tree in the system is assigned a unique 16-bit segment id.
+Segment ids may only be reused after the original owner segment b-tree is
+completely merged into a higher level segment b-tree. Within a segment b-tree,
+each leaf page is assigned a unique page number - 1 for the first leaf page, 2
+for the second, and so on.
+
+</p><p>Each doclist index leaf page is also assigned a page number. The first
+(leftmost) leaf page in a doclist index is assigned the same page number as
+the segment b-tree leaf page on which its term appears (because doclist indexes
+are only created for terms with very long doclists, at most one term per
+segment b-tree leaf has an associated doclist index). Call this page number P.
+If the doclist is so large that it requires a second leaf, the second leaf is
+assigned page number P+1. The third leaf P+2. Each tier of a doclist index
+b-tree (leaves, parents of leaves, grandparents etc.) is assigned page numbers
+in this fashion, starting with page number P.
+
+</p><p>The "id" value used in the %_data table to store any given segment b-tree
+leaf or doclist index leaf or node is composed as follows:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+<tr style="text-align:left"><th>Rowid&nbsp;Bits </th><th>Contents
+</th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>38..43 </td><td> (16 bit) Segment b-tree id value.
+</td></tr><tr style="text-align:left"><td>37 </td><td> (1 bit) Doclist index flag. Set for doclist index pages, clear
+ for segment b-tree leaves.
+</td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>32..36 </td><td> (5 bits) Height in tree. This is set to 0 for segment b-tree
+ and doclist index leaves, to 1 for the parents of doclist
+ index leaves, 2 for the grandparents, etc.
+</td></tr><tr style="text-align:left"><td>0..31 </td><td> (32 bits) Page number
+</td></tr></table>
+
+<h3 id="structure_record_format"><span>9.2.2. </span>Structure Record Format</h3>
+
+<p>The structure record identifies the set of segment b-trees that make up the
+current FTS index, along with details of any ongoing incremental merge
+operations. It is stored in the %_data table with id=1.
+
+A structure record begins with a single 32-bit unsigned value - the cookie
+value. This value is incremented each time the structure is modified.
+Following the cookie value are three varint values, as follows:
+
+</p><ul>
+ <li> The number of levels in the index (i.e. the maximum level associated
+ with any segment b-tree plus one).
+ </li><li> The total number of segment b-trees in the index.
+ </li><li> The total number of segment b-tree leaves written to level 0 trees
+ since the FTS5 table was created.
+</li></ul>
+
+<p>Then, for each level from 0 to nLevel:
+
+</p><ul>
+ <li> The number of input segments from the previous level being used as
+ inputs for the current incremental merge, or zero if there is no
+ ongoing incremental merge to create a new segment b-tree for this level.
+ </li><li> The total number of segment b-trees on the level.
+ </li><li> Then, for each segment b-tree, from oldest to newest:
+ <ul>
+ <li> The segment id.
+ </li><li> Page number of first leaf (often 1, always >0).
+ </li><li> Page number of last leaf (always >0).
+ </li></ul>
+</li></ul>
+
+<h3 id="averages_record_format"><span>9.2.3. </span>Averages Record Format</h3>
+
+<p>The averages record, which is always stored with id=10 in the %_data table,
+does not store the average of anything. Instead, it contains a vector of
+(nCol+1) packed varint values, where nCol is the number of columns in the FTS5
+table, including unindexed columns. The first varint contains the total
+number of rows in the FTS5 table. The second contains the total number of
+tokens in all values stored in the leftmost FTS5 table column. The third the
+number of tokens in all values for the next leftmost, and so on. The value for
+unindexed columns is always zero.
+
+</p><h3 id="segment_b_tree_format"><span>9.2.4. </span>Segment B-Tree Format</h3>
+
+<h4 id="the_key_doclist_format"><span>9.2.4.1. </span>The Key/Doclist Format</h4>
+
+<p>The key/doclist format is a format used to store a series of keys (document
+terms or term prefixes prefixed by a single character to indentify the specific
+index to which they belong) in sorted order, each with their associated
+doclist. The format consists of alternating keys and doclists packed together.
+
+</p><p>The first key is stored as:
+</p><ul>
+ <li> A varint indicating the number of bytes in the key (N), followed by
+ </li><li> The key data itself (N bytes).
+</li></ul>
+
+<p>Each subsequent key is stored as:
+</p><ul>
+ <li> A varint indicating the size of the prefix that the key has in common
+ with the previous key in bytes,
+ </li><li> A varint indicating the number of bytes in the key following the
+ common prefix (N), followed by
+ </li><li> The key suffix data itself (N bytes).
+</li></ul>
+
+<p>For example, if the first two keys in an FTS5 key/doclist record are
+"0challenger" and "0chandelier", then the first key is stored as varint 11
+followed by the 11 bytes "0challenger", and the second key is stored as varints
+4 and 7, followed by the 7 bytes "ndelier".
+
+</p><center><div style="max-width:956px;"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 956.102 126.72">
+<path d="M62,77L91,77L91,48L62,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M91,77L149,77L149,48L91,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,77L437,77L437,48L149,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="293" y="63" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">doclist 0</text>
+<path d="M437,77L466,77L466,48L437,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,77L494,77L494,48L466,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,77L538,77L538,48L494,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M538,77L826,77L826,48L538,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="682" y="63" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">doclist 1</text>
+<text x="892" y="63" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">key/doclist 2...</text>
+<path d="M826,48L883,48" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M826,77L883,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="120" y="114" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">key 0 data</text>
+<polygon points="120,77 124,89 116,89" style="fill:rgb(0,0,0)"/>
+<path d="M120,99L120,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="12" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">key 0 size (varint)</text>
+<polygon points="77,48 72,37 81,37" style="fill:rgb(0,0,0)"/>
+<path d="M77,27L77,43" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="114" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">key 1 prefix size (varint)</text>
+<polygon points="451,77 441,84 439,76" style="fill:rgb(0,0,0)"/>
+<path d="M358,99L446,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="480" y="12" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">key 1 suffix size (varint)</text>
+<polygon points="480,48 476,37 484,37" style="fill:rgb(0,0,0)"/>
+<path d="M480,27L480,43" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="114" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">key 1 prefix data</text>
+<polygon points="516,77 528,77 526,85" style="fill:rgb(0,0,0)"/>
+<path d="M585,99L521,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><i>Figure 1 - Term/Doclist Format
+</i></p></center>
+
+<p>Each doclist identifies the rows (by their rowid values) that contain at
+least one instance of the term or term prefix and an associated position list,
+or "poslist" enumerating the position of each term instance within the row. In
+this sense a "position" is defined as a column number and term offset within
+the column value.
+
+</p><p>Within a doclist, documents are always stored in order sorted by rowid. The
+first rowid in a doclist is stored as is, as a varint. It is immediately
+followed by its associated position list. Following this, the difference
+between the first rowid and the second, as a varint, followed by the doclist
+associated with the second rowid in the doclist. And so on.
+
+</p><p>There is no way to determine the size of a doclist by parsing it. This must
+be stored externally. See the <a href="#data_pagination">section below</a> for
+details of how this is accomplished in FTS5.
+
+</p><center><div style="max-width:889px;"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 889.459 79.92">
+<path d="M46,77L89,77L89,48L46,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M89,77L377,77L377,48L89,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="63" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">position list 0</text>
+<path d="M377,77L420,77L420,48L377,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M420,77L708,77L708,48L420,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="564" y="63" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">position list 1</text>
+<path d="M708,77L751,77L751,48L708,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="822" y="63" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">position list 2...</text>
+<path d="M751,48L809,48" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M751,77L809,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="67" y="12" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">rowid 0 (varint)</text>
+<polygon points="67,48 63,37 72,37" style="fill:rgb(0,0,0)"/>
+<path d="M67,27L67,43" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="398" y="12" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">rowid 1 (delta-encoded varint)</text>
+<polygon points="398,48 394,37 403,37" style="fill:rgb(0,0,0)"/>
+<path d="M398,27L398,43" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="730" y="12" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">rowid 3 (delta-encoded varint)</text>
+<polygon points="730,48 725,37 734,37" style="fill:rgb(0,0,0)"/>
+<path d="M730,27L730,43" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><i>Figure 2 - Doclist Format
+</i></p></center>
+
+<p>A position list - often shortened to "poslist" - identifies the column
+and token offset within the row of each instance of the token in question.
+The format of a poslist is:
+
+</p><ul>
+ <li> Varint set to twice the size of the poslist, not including this field,
+ plus one if the "delete" flag is set on the entry.
+ </li><li> A (possibly empty) list of offsets for column 0 (the leftmost column) of
+ the row. Each offset is stored as a varint. The first varint contains
+ the value of the first offset, plus 2. The second variant contains the
+ difference between the second and first offsets, plus 2. etc. For
+ example, if the offset list is to contain offsets 0, 10, 15 and 16, it
+ is encoded by packing the following values, encoded as varints, end to
+ end:
+ <pre>
+ 2, 12, 7, 3
+</pre>
+ </li><li> For each column other than column 0 that contains one of more instances
+ of the token:
+ <ul>
+ <li> Byte value 0x01.
+ </li><li> The column number, as a varint.
+ </li><li> An offset list, in the same format as the offset list for column 0.
+ </li></ul>
+</li></ul>
+
+<center><div style="max-width:785px;"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 785.606 133.92">
+<path d="M77,77L121,77L121,48L77,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,77L409,77L409,48L121,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="63" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">col 0 offset-list</text>
+<path d="M409,77L452,77L452,48L409,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="430" y="63" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">0x01</text>
+<path d="M452,77L495,77L495,48L452,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,77L783,77L783,48L495,48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="639" y="63" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">col i offset-list</text>
+<text x="99" y="12" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">nSize*2 + bDel (varint)</text>
+<polygon points="99,48 95,37 103,37" style="fill:rgb(0,0,0)"/>
+<path d="M99,27L99,43" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="12" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column number (i)</text>
+<polygon points="473,48 469,37 478,37" style="fill:rgb(0,0,0)"/>
+<path d="M473,27L473,43" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,92L121,106L783,106L783,92" style="fill:none;stroke-width:2.16;stroke-linejoin:round;stroke:rgb(0,0,0);" />
+<text x="452" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">nSize bytes</text>
+</svg>
+</div>
+<p><i>Figure 3 - Position List (poslist) With Offsets in Columns 0 and i
+</i></p></center>
+
+<h4 id="data_pagination"><span>9.2.4.2. </span>Pagination</h4>
+
+<p>If it is small enough (by default this means smaller than 4000 bytes), the
+entire contents of a segment b-tree may be stored in the key/doclist format
+described in the previous section as a single blob within the %_data table.
+Otherwise, the key/doclist is split into pages (by default, of approximately
+4000 bytes each) and stored in a contiguous set of entries in the %_data table
+(<a href="#data_structure">see above</a> for details).
+
+</p><p>When a key/doclist is divided into pages, the following modifications are
+made to the format:
+
+</p><ul>
+ <li> A single varint or key data field never spans two pages.
+ </li><li> The first key on each page is not prefix-compressed. It is stored in
+ the format described above for the first key of a doclist - its size as
+ a varint followed by the key data.
+ </li><li> If there are one or more rowids on a page before the first key, then
+ the first of them is not delta compressed. It is stored as is, just as
+ if it were the first rowid of its doclist (which it may or may not be).
+</li></ul>
+
+<p>Each page also has fixed-size 4-byte header and a variably-sized footer.
+The header is divided into 2 16-bit big-endian integer fields. They
+contain:
+
+</p><ul>
+ <li> The byte offset of the first rowid value on the page, if it occurs
+ before the first key, or 0 otherwise.
+ </li><li> The byte offset of the page footer.
+</li></ul>
+
+<p>The page footer consists of a series of varints containing the byte offset
+of each key that appears on the page. The page footer is zero bytes in size
+if there are no keys on the page.
+
+</p><center><div style="max-width:721px;"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 721.267 79.92">
+<path d="M10,30L54,30L54,2L10,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="32" y="16" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">hdr</text>
+<path d="M54,30L630,30L630,2L54,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="16" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">modified key/doclist data</text>
+<path d="M630,30L702,30L702,2L630,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="666" y="16" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">footer</text>
+<text x="32" y="67" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">4 bytes</text>
+<text x="666" y="67" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">variable size</text>
+<polygon points="32,30 36,42 28,42" style="fill:rgb(0,0,0)"/>
+<path d="M32,52L32,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,30 670,42 661,42" style="fill:rgb(0,0,0)"/>
+<path d="M666,52L666,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><i>Figure 4 - Page Format
+</i></p></center>
+
+<h4 id="data_term_index"><span>9.2.4.3. </span>Segment Index Format</h4>
+
+<p>The result of formatting the contents of the segment b-tree in the
+key/doclist format and then splitting it into pages is something very
+similar to the leaves of a b+tree. Instead of creating a format for
+the internal nodes of this b+tree and storing them in the %_data table
+alongside the leaves, the keys that would have been stored on such nodes are
+added to the %_idx table, defined as:
+
+</p><div class="codeblock"><pre>CREATE TABLE %_idx(
+ segid INTEGER, <i>-- segment id</i>
+ term TEXT, <i>-- prefix of first key on page</i>
+ pgno INTEGER, <i>-- (2*pgno + bDoclistIndex)</i>
+ PRIMARY KEY(segid, term)
+);
+</pre></div>
+
+<p>For each "leaf" page that contains at least one key, an entry is added
+to the %_idx table. Fields are set as follows:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><th>Column</th><th>Contents
+ </th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>segid</td><td> The integer segment id.
+ </td></tr><tr style="text-align:left"><td>term</td><td> The smallest prefix of the first key on the page that
+ is larger than all keys on the previous page. For the
+ first page in a segment, this prefix is zero bytes in
+ size.
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>pgno</td><td> This field encodes both the page number (within the
+ segment - starting from 1) and the doclist index flag.
+ The doclist index flag is set if the final key on the
+ page has an <a href="#data_doclist_index">associated
+ doclist index</a>. The value of this field is:
+ <pre>
+ (pgno*2 + bDoclistIndexFlag)
+</pre>
+</td></tr></table>
+
+<p>Then, to find the leaf for segment i that may contain term t, instead of
+searching through internal nodes, FTS5 runs the query:
+
+</p><div class="codeblock"><pre>SELECT pgno FROM %_idx WHERE segid=$i AND term>=$t ORDER BY term LIMIT 1
+</pre></div>
+
+<h4 data_doclist_index="1" id="doclist_index_format"><span>9.2.4.4. </span>Doclist Index Format</h4>
+
+<p>The segment index described in the <a href="#data_term_index">previous
+section</a> allows a segment b-tree to be efficiently queried by term or,
+assuming there is a prefix index of the required size, a term prefix. The data
+structure described in this section, doclist indexes, allows FTS5 to
+efficiently search for a rowid or range or rowids within the doclist associated
+with a single term or term prefix.
+
+</p><p>Not all keys have associated doclists indexes. By default, a doclist index
+is only added for a key if its doclist spans more than 4 segment b-tree leaf
+pages. Doclist indexes are themselves b-trees, with both leaves and internal
+nodes stored as entries in the %_data table, but in practice most doclists are
+small enough to fit on a single leaf. FTS5 uses the same rough size for doclist
+index node and leaves as it does for segment b-tree leaves (by default 4000
+bytes).
+
+</p><p>Doclist index leaves and internal nodes use the same page format. The first
+byte is a "flags" byte. This is set to 0x00 for the root page of the doclist
+index b-tree, and 0x01 for all other pages. The remainder of the page is a
+series of tightly packed varints, as follows:
+
+</p><ul>
+ <li> page number of leftmost child page, followed by
+ </li><li> the smallest rowid value on the left most child page, followed by
+ </li><li> one varint for each subsequent child page, containing the value:
+ <ul>
+ <li> 0x00 if there are no rowids on the child page (this can only happen
+ when the "child" page is actually a segment b-tree leaf), or
+ </li><li> the difference between the smallest rowid on the child page and
+ the previous rowid value stored on the doclist index page.
+ </li></ul>
+</li></ul>
+
+<p>For the leftmost doclist index leaf in a doclist index, the leftmost child
+page is the first segment b-tree leaf after the one that contains the key
+itself.
+
+</p><h2 id="document_sizes_table_docsize_table_"><span>9.3. </span>Document Sizes Table (%_docsize table)</h2>
+
+<div class="codeblock"><pre>CREATE TABLE %_docsize(
+ id INTEGER PRIMARY KEY, -- id of FTS5 row this record pertains to
+ sz BLOB -- blob containing nCol packed varints
+);
+</pre></div>
+
+<p>Many common search result ranking functions require as an input the size
+in tokens of the result document (as a search term hit in a short document is
+considered more significant than one in a long document). To provide fast
+access to this information, for each row in the FTS5 table there exists a
+corresponding record (with the same rowid) in the %_docsize shadow table
+that contains the size of each column value in the row, in tokens.
+
+</p><p>The column value sizes are stored in a blob containing one packed varint for
+each column of the FTS5 table, from left to right. The varint contains, of
+course, the total number of tokens in the corresponding column value. Unindexed
+columns are included in this vector of varints; for them the value is always
+set to zero.
+
+</p><p>This table is used by the <a href="#xColumnSize">xColumnSize</a> API. It can
+be omitted altogether by specifying the
+<a href="#the_columnsize_option">columnsize=0</a> option. In that case the
+xColumnSize API is still available to auxiliary functions, but runs much more
+slowly.
+
+</p><h2 id="the_table_contents_content_table_"><span>9.4. </span>The Table Contents (%_content table)</h2>
+
+<div class="codeblock"><pre>CREATE TABLE %_content(id INTEGER PRIMARY KEY, c0, c1...);
+</pre></div>
+
+<p>The actual table content - the values inserted into the FTS5 table, is
+stored in the %_content table. This table is created with one "c*" column for
+each column of the FTS5 table, including any unindexed columns. The values for
+the leftmost FTS5 table column are stored in column "c0" of the %_content
+table, the values from the next FTS5 table column in column "c1", and so on.
+
+</p><p>This table is omitted completely for <a href="#content_and_contentless_tables">
+external content or contentless</a> FTS5 tables.
+tables.
+
+</p><h2 id="configuration_options_config_table_"><span>9.5. </span>Configuration Options (%_config table)</h2>
+
+<div class="codeblock"><pre>CREATE TABLE %_config(k PRIMARY KEY, v) WITHOUT ROWID;
+</pre></div>
+
+<p>This table stores the values of any persistent configuration options.
+Column "k" stores the name of the option (text) and column "v" the value.
+Example contents:
+
+</p><div class="codeblock"><pre>sqlite> SELECT * FROM fts_tbl_config;
+┌─────────────┬──────┐
+│ k │ v │
+├─────────────┼──────┤
+│ crisismerge │ 8 │
+│ pgsz │ 8000 │
+│ usermerge │ 4 │
+│ version │ 4 │
+└─────────────┴──────┘
+</pre></div>
+
+<a name="appendix_a"></a>
+<h1 id="appendix_a" nonumber="1" tags="comparison with fts4">
+ Appendix A: Comparison with FTS3/4
+</h1>
+
+<p> Also available is the similar but more mature <a href="fts3.html">FTS3/4</a> module.
+FTS5 is a new version of FTS4 that includes various fixes and solutions for
+problems that could not be fixed in FTS4 without sacrificing backwards
+compatibility. Some of these problems are
+<a href="fts5.html#_summary_of_technical_differences_">described below</a>.
+
+</p><h2 nonumber="1" id="_application_porting_guide_"> Application Porting Guide </h2>
+
+<p> In order to use FTS5 instead of FTS3 or FTS4, applications usually require
+minimal modifications. Most of these fall into three categories - changes
+required to the CREATE VIRTUAL TABLE statement used to create the FTS table,
+changes required to SELECT queries used to execute queries against the table,
+and changes required to applications that use <a href="fts3.html#snippet">FTS auxiliary functions</a>.
+
+</p><h3 nonumber="1" id="_changes_to_create_virtual_table_statements_"> Changes to CREATE VIRTUAL TABLE statements </h3>
+
+<ol>
+<li> <p>The module name must be changed from "fts3" or "fts4" to "fts5".
+
+</p></li><li> <p>All type information or constraint specifications must be removed from
+ column definitions. FTS3/4 ignores everything following the column name in
+ a column definition, FTS5 attempts to parse it (and will report an error
+ if it fails to).
+
+</p></li><li> <p>The "matchinfo=fts3" option is not available. The
+ <a href="fts5.html#the_columnsize_option">"columnsize=0"</a> option is equivalent.
+
+</p></li><li> <p>The notindexed= option is not available. Adding <a href="fts5.html#the_unindexed_column_option">UNINDEXED</a>
+ to the column definition is equivalent.
+
+</p></li><li> <p>The ICU tokenizer is not available.
+
+</p></li><li> <p>The compress=, uncompress= and languageid= options are not available.
+ There is as of yet no equivalent for their functionality.
+</p></li></ol>
+
+<div class="codeblock"><pre><i> -- FTS3/4 statement </i>
+CREATE VIRTUAL TABLE t1 USING fts4(
+ linkid INTEGER,
+ header CHAR(20),
+ text VARCHAR,
+ notindexed=linkid,
+ matchinfo=fts3,
+ tokenizer=unicode61
+);
+
+<i> -- FTS5 equivalent (note - the "tokenizer=unicode61" option is not</i>
+<i> -- required as this is the default for FTS5 anyway)</i>
+CREATE VIRTUAL TABLE t1 USING fts5(
+ linkid UNINDEXED,
+ header,
+ text,
+ columnsize=0
+);
+</pre></div>
+
+<h3 nonumber="1" id="_changes_to_select_statements_"> Changes to SELECT statements </h3>
+
+<ol>
+ <li> <p>The "docid" alias does not exist. Applications must use "rowid"
+ instead.
+
+ </p></li><li> <p>The behaviour of queries when a column-filter is specified both as
+ part of the FTS query and by using a column as the LHS of a MATCH
+ operator is slightly different. For a table with columns "a" and "b"
+ and a query similar to:
+</p><div class="codeblock"><pre>... a MATCH 'b: string'
+</pre></div>
+ <p>FTS3/4 searches for matches in column "b". However, FTS5 always
+ returns zero rows, as results are first filtered for column "b", then
+ for column "a", leaving no results. In other words, in FTS3/4 the
+ inner filter overrides the outer, in FTS5 both filters are applied.
+
+ </p></li><li> <p>The FTS query syntax (right hand side of the MATCH operator) has
+ changed in some ways. The FTS5 syntax is quite close to the FTS4
+ "enhanced syntax". The main difference is that FTS5 is fussier
+ about unrecognized punctuation characters and similar within query
+ strings. Most queries that work with FTS3/4 should also work with
+ FTS5, and those that do not should return parse errors.
+</p></li></ol>
+
+<h3 nonumber="1" id="_auxiliary_function_changes_"> Auxiliary Function Changes </h3>
+
+<p> FTS5 has no matchinfo() or offsets() function, and the snippet() function
+is not as fully-featured as in FTS3/4. However, since FTS5 does provide
+an API allowing applications to create <a href="fts5.html#_custom_auxiliary_functions_api_reference_">custom auxiliary functions</a>, any
+required functionality may be implemented within the application code.
+
+</p><p> The set of built-in auxiliary functions provided by FTS5 may be
+improved upon in the future.
+
+</p><h3 nonumber="1" id="_other_issues"> Other Issues</h3>
+
+<ol>
+ <li><p> The functionality provided by the fts4aux module is now provided
+ by <a href="fts5.html#the_fts5vocab_virtual_table_module">fts5vocab</a>. The schema of these two tables is slightly different.
+
+ </p></li><li><p> The FTS3/4 "merge=X,Y" command has been replaced by the
+ <a href="fts5.html#the_merge_command">FTS5 merge command</a>.
+
+ </p></li><li><p> The FTS3/4 "automerge=X" command has been replaced by the
+ <a href="fts5.html#the_automerge_configuration_option">FTS5 automerge option</a>.
+</p></li></ol>
+
+<a name="_summary_of_technical_differences_"></a>
+<h2 nonumber="1" tags="fts5 technical differences" id="_summary_of_technical_differences_">
+ Summary of Technical Differences
+</h2>
+
+<p>FTS5 is similar to FTS3/4 in that the primary task of each is to maintain
+an index mapping from each unique token to a list of instances of that token
+within a set of documents, where each instance is identified by the document
+in which it appears and its position within that document. For example:
+
+</p><div class="codeblock"><pre><i>-- Given the following SQL:</i>
+CREATE VIRTUAL TABLE ft USING fts5(a, b);
+INSERT INTO ft(rowid, a, b) VALUES(1, 'X Y', 'Y Z');
+INSERT INTO ft(rowid, a, b) VALUES(2, 'A Z', 'Y Y');
+
+<i>-- The FTS5 module creates the following mapping on disk:</i>
+A --&gt; (2, 0, 0)
+X --&gt; (1, 0, 0)
+Y --&gt; (1, 0, 1) (1, 1, 0) (2, 1, 0) (2, 1, 1)
+Z --&gt; (1, 1, 1) (2, 0, 1)
+</pre></div>
+
+<p>In the example above, each triple identifies the location of a token
+instance by rowid, column number (columns are numbered sequentially
+starting at 0 from left to right) and position within the column value (the
+first token in a column value is 0, the second is 1, and so on). Using this
+index, FTS5 is able to provide timely answers to queries such as "the set
+of all documents that contain the token 'A'", or "the set of all documents
+that contain the sequence 'Y Z'". The list of instances associated with a
+single token is called an "instance-list".
+
+</p><p>The principle difference between FTS3/4 and FTS5 is that in FTS3/4,
+each instance-list is stored as a single large database record, whereas
+in FTS5 large instance-lists are divided between multiple database records.
+This has the following implications for dealing with large databases that
+contain large lists:
+
+</p><ul>
+ <li> <p>FTS5 is able to load instance-lists into memory incrementally in
+ order to reduce memory usage and peak allocation size. FTS3/4 very
+ often loads entire instance-lists into memory.
+
+ </p></li><li> <p>When processing queries that feature more than one token, FTS5 is
+ sometimes able to determine that the query can be answered by
+ inspecting a subset of a large instance-list. FTS3/4 almost always
+ has to traverse entire instance-lists.
+
+ </p></li><li> If an instance-list grows so large that it exceeds
+ the <a href="limits.html#max_length">SQLITE_MAX_LENGTH</a> limit, FTS3/4 is unable to handle it. FTS5
+ does not have this problem.
+</li></ul>
+
+<p>For these reasons, many complex queries may use less memory and run faster
+using FTS5.
+
+</p><p>Some other ways in which FTS5 differs from FTS3/4 are:
+
+</p><ul>
+ <li> <p>FTS5 supports "ORDER BY rank" for returning results in order of
+ decreasing relevancy.
+
+ </p></li><li> <p>FTS5 features an API allowing users to create custom auxiliary
+ functions for advanced ranking and text processing applications. The
+ special "rank" column may be mapped to a custom auxiliary function
+ so that adding "ORDER BY rank" to a query works as expected.
+
+ </p></li><li> <p>FTS5 recognizes unicode separator characters and case equivalence by
+ default. This is also possible using FTS3/4, but must be explicitly
+ enabled.
+
+ </p></li><li> <p>The query syntax has been revised where necessary to remove
+ ambiguities and to make it possible to escape special characters
+ in query terms.
+
+ </p></li><li> <p>By default, FTS3/4 occasionally merges together two or more of the
+ b-trees that make up its full-text index within an INSERT, UPDATE or
+ DELETE statement executed by the user. This means that any operation
+ on an FTS3/4 table may turn out to be surprisingly slow, as FTS3/4
+ may unpredictably choose to merge together two or more large b-trees
+ within it. FTS5 uses incremental merging by default, which limits
+ the amount of processing that may take place within any given
+ INSERT, UPDATE or DELETE operation.
+</p></li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/fts5.in?m=13ff6fb4a9d162419">2022-09-24 16:31:11</a> UTC </small></i></p>
+
diff --git a/www/fullsql.html b/www/fullsql.html
new file mode 100644
index 0000000..57eec63
--- /dev/null
+++ b/www/fullsql.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Full-Featured SQL</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Full-Featured SQL
+</div>
+</div>
+
+
+
+
+
+<p>
+Do not be misled by the "Lite" in the name. SQLite has a full-featured
+SQL implementation, including:
+
+</p><ul>
+<li><a href="lang_createtable.html">Tables</a>, <a href="lang_createindex.html">indexes</a>,
+ <a href="lang_createtrigger.html">triggers</a>, and <a href="lang_createview.html">views</a>
+ in unlimited quantity
+</li><li>Up to 32K columns in a table and unlimited rows
+</li><li>Multi-column indexes
+</li><li>Indexes can use <a href="lang_createindex.html#descidx">DESC</a> and <a href="lang_createindex.html#collidx">COLLATE</a>
+</li><li><a href="partialindex.html">Partial indexes</a>
+</li><li><a href="expridx.html">Indexes On Expressions</a>
+</li><li><a href="withoutrowid.html">Clustered indexes</a>
+</li><li><a href="queryplanner.html#covidx">Covering indexes</a>
+</li><li><a href="lang_createtable.html#ckconst">CHECK</a>, <a href="lang_createtable.html#uniqueconst">UNIQUE</a>, <a href="lang_createtable.html#notnullconst">NOT NULL</a>, and <a href="foreignkeys.html">FOREIGN KEY constraints</a>.
+</li><li>ACID transactions using <a href="lang_transaction.html">BEGIN</a>, <a href="lang_transaction.html">COMMIT</a>, and <a href="lang_transaction.html">ROLLBACK</a>
+</li><li>Nested transactions using <a href="lang_savepoint.html">SAVEPOINT</a>, <a href="lang_savepoint.html">RELEASE</a>, and
+ <a href="lang_transaction.html">ROLLBACK TO</a>
+</li><li><a href="lang_expr.html#subq">Subqueries</a>, including <a href="lang_expr.html#cosub">correlated subqueries</a>
+</li><li>Up to 64-way joins
+</li><li>LEFT, RIGHT, and FULL OUTER JOINs
+</li><li>DISTINCT, ORDER BY, GROUP BY, HAVING, LIMIT, and OFFSET
+</li><li>UNION, UNION ALL, INTERSECT, and EXCEPT
+</li><li>A rich library of <a href="lang_corefunc.html">standard SQL functions</a>
+</li><li><a href="lang_aggfunc.html">Aggregate functions</a> including DISTINCT aggregates
+</li><li><a href="windowfunctions.html">Window functions</a>
+</li><li><a href="lang_update.html">UPDATE</a>, <a href="lang_delete.html">DELETE</a>, and <a href="lang_insert.html">INSERT</a> (of course)
+</li><li><a href="lang_with.html">Common table expressions</a> including
+ <a href="lang_with.html#recursivecte">recursive common table expressions</a>
+</li><li><a href="rowvalue.html">Row values</a>
+</li><li><a href="lang_upsert.html">UPSERT</a>
+</li><li>An advanced <a href="optoverview.html">query planner</a>
+</li><li><a href="fts5.html">Full-text search</a>
+</li><li><a href="rtree.html">R-tree indexes</a>
+</li><li><a href="json1.html">JSON support</a>
+</li><li>The <a href="lang_expr.html#isisnot">IS operator</a>
+</li><li><a href="vtab.html#tabfunc2">Table-valued functions</a>
+</li><li><a href="lang_replace.html">REPLACE INTO</a>
+</li><li><a href="lang_vacuum.html">VACUUM</a>
+</li><li><a href="lang_reindex.html">REINDEX</a>
+</li><li>The <a href="lang_expr.html#glob">GLOB</a> operator
+</li><li><a href="lang_expr.html#hexint">Hexadecimal integer literals</a>
+</li><li>The <a href="lang_conflict.html">ON CONFLICT</a> clause
+</li><li>The <a href="lang_indexedby.html">INDEXED BY</a> clause
+</li><li><a href="vtab.html">Virtual tables</a>
+</li><li>Multiple databases on the same <a href="c3ref/sqlite3.html">database connection</a> using
+ <a href="lang_attach.html">ATTACH DATABASE</a>
+</li><li>The ability to add <a href="appfunc.html">application-defined SQL functions</a>, including
+ aggregate and table-valued functions.
+</li><li><a href="c3ref/create_collation.html">Application-defined collating functions</a>
+</li></ul>
+
+<p>
+There are many more features not listed above.
+SQLite may be small in size and have "Lite" in its name, but it is
+not lacking in capability.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/fullsql.in?m=629b1f592bc156d3b">2022-05-10 17:29:14</a> UTC </small></i></p>
+
diff --git a/www/gencol.html b/www/gencol.html
new file mode 100644
index 0000000..4a0b2da
--- /dev/null
+++ b/www/gencol.html
@@ -0,0 +1,308 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Generated Columns</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Generated Columns
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#syntax">2. Syntax</a></div>
+<div class="fancy-toc2"><a href="#virtual_versus_stored_columns">2.1. VIRTUAL versus STORED columns</a></div>
+<div class="fancy-toc2"><a href="#capabilities">2.2. Capabilities</a></div>
+<div class="fancy-toc2"><a href="#limitations">2.3. Limitations</a></div>
+<div class="fancy-toc1"><a href="#compatibility">3. Compatibility</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>Generated columns (also sometimes called "computed columns")
+are columns of a table whose values are a function of other columns
+in the same row.
+Generated columns can be read, but their values can not be directly
+written. The only way to change the value of a generated column is to
+modify the values of the other columns used to calculate
+the generated column.
+
+</p><h1 id="syntax"><span>2. </span>Syntax</h1>
+
+<p>Syntactically, generated columns are designated using a
+"GENERATED ALWAYS" <a href="syntax/column-constraint.html">column-constraint</a>. For example:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(
+ a INTEGER PRIMARY KEY,
+ b INT,
+ c TEXT,
+ d INT GENERATED ALWAYS AS (a*abs(b)) VIRTUAL,
+ e TEXT GENERATED ALWAYS AS (substr(c,b,b+1)) STORED
+);
+</pre></div>
+
+<p>The statement above has three ordinary columns, "a" (the PRIMARY KEY),
+"b", and "c", and two generated columns "d" and "e".
+
+</p><p>The "GENERATED ALWAYS" keywords at the beginning of the constraint
+and the "VIRTUAL" or "STORED" keyword at the end are all optional.
+Only the "AS" keyword and the parenthesized expression are required.
+If the trailing "VIRTUAL" or "STORED" keyword is omitted, then
+VIRTUAL is the default. Hence, the example statement above could
+be simplified to just:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(
+ a INTEGER PRIMARY KEY,
+ b INT,
+ c TEXT,
+ d INT AS (a*abs(b)),
+ e TEXT AS (substr(c,b,b+1)) STORED
+);
+</pre></div>
+
+<h2 id="virtual_versus_stored_columns"><span>2.1. </span>VIRTUAL versus STORED columns</h2>
+
+<p>Generated columns can be either VIRTUAL or STORED. The value of
+a VIRTUAL column is computed when read, whereas the value of a STORED
+column is computed when the row is written. STORED columns take up space
+in the database file, whereas VIRTUAL columns use more CPU cycles when
+being read.
+
+</p><p>From the point of view of SQL, STORED and VIRTUAL columns are almost
+exactly the same. Queries against either class of generated column
+produce the same results. The only functional difference is that
+one cannot add new STORED columns using the
+<a href="lang_altertable.html#altertabaddcol">ALTER TABLE ADD COLUMN</a> command. Only VIRTUAL columns can be added
+using ALTER TABLE.
+
+</p><h2 id="capabilities"><span>2.2. </span>Capabilities</h2>
+
+<ol>
+<li><p>
+Generated columns can have a datatype. SQLite attempts to transform
+the result of the generating expression into that datatype using the
+same <a href="datatype3.html#affinity">affinity</a> rules as for ordinary columns.
+
+</p></li><li><p>
+Generated columns may have NOT NULL, CHECK, and UNIQUE constraints,
+and foreign key constraints, just like ordinary columns.
+
+</p></li><li><p>
+Generated columns can participate in indexes, just like ordinary
+columns.
+
+</p></li><li><p>
+The expression of a generated column can refer to any of the
+other declared columns in the table, including other generated columns,
+as long as the expression does not directly or indirectly refer back
+to itself.
+
+</p></li><li><p>
+Generated columns can occur anywhere in the table definition. Generated
+columns can be interspersed among ordinary columns. It is not necessary
+to put generated columns at the end of the list of columns in the
+table definition, as is shown in the examples above.
+</p></li></ol>
+
+
+<h2 id="limitations"><span>2.3. </span>Limitations</h2>
+
+<ol>
+<li><p>
+Generated columns may not have a <a href="lang_createtable.html#dfltval">default value</a> (they may not use the
+"DEFAULT" clause). The value of a generated column is always the value
+specified by the expression that follows the "AS" keyword.
+
+</p></li><li><p>
+Generated columns may not be used as part of the <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a>.
+(Future versions of SQLite might relax this constraint for STORED columns.)
+
+</p></li><li><p>
+The expression of a generated column may only reference
+constant literals and columns within the same row, and may only use
+scalar <a href="deterministic.html">deterministic functions</a>. The expression may not use subqueries,
+aggregate functions, window functions, or table-valued functions.
+
+</p></li><li><p>
+The expression of a generated column may refer to other generated columns
+in the same row, but no generated column can depend upon itself, either
+directly or indirectly.
+
+</p></li><li><p>The expression of a generated column may not directly reference
+the <a href="lang_createtable.html#rowid">ROWID</a>, though it can reference the <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column,
+which is often the same thing.
+
+</p></li><li><p>
+Every table must have at least one non-generated column.
+
+</p></li><li><p>
+It is not possible to <a href="lang_altertable.html#altertabaddcol">ALTER TABLE ADD COLUMN</a> a STORED column.
+One can add a VIRTUAL column, however.
+
+</p></li><li><p>
+The datatype and <a href="datatype3.html#collation">collating sequence</a> of the generated column are determined
+only by the datatype and <a href="lang_createtable.html#collateclause">COLLATE clause</a> on the column definition.
+The datatype and collating sequence of the GENERATED ALWAYS AS expression
+have no affect on the datatype and collating sequence of the column itself.
+
+</p></li><li><p>
+Generated columns are not included in the list of columns provided by
+the <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> statement. But they are included in the output of
+the newer <a href="pragma.html#pragma_table_xinfo">PRAGMA table_xinfo</a> statement.
+</p></li></ol>
+
+<h1 id="compatibility"><span>3. </span>Compatibility</h1>
+
+<p>Generated column support was added with SQLite version 3.31.0
+(2020-01-22). If an earlier version of SQLite attempts to read
+a database file that contains a generated column in its schema, then
+that earlier version will perceive the generated column syntax as an
+error and will report that the database schema is corrupt.
+
+</p><p>To clarify: SQLite version 3.31.0 can read and write any database
+created by any prior version of SQLite going back to
+SQLite 3.0.0 (2004-06-18). And, earlier versions of SQLite,
+prior to 3.31.0, can read and write databases created by SQLite
+version 3.31.0 and later as long
+as the database schema does not contain features, such as
+generated columns, that are not understood by the earlier version.
+Problems only arise if you create a new database that contains
+generated columns, using SQLite version 3.31.0 or later, and then
+try to read or write that database file using an earlier version of
+SQLite that does not understand generated columns.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/gencol.in?m=1b689d97b3fb3c295">2022-11-09 20:09:19</a> UTC </small></i></p>
+
diff --git a/www/geopoly.html b/www/geopoly.html
new file mode 100644
index 0000000..b056239
--- /dev/null
+++ b/www/geopoly.html
@@ -0,0 +1,568 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Geopoly Interface To The SQLite R*Tree Module</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Geopoly Interface To The SQLite R*Tree Module
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc2"><a href="#geojson">1.1. GeoJSON</a></div>
+<div class="fancy-toc2"><a href="#binary_storage_format">1.2. Binary storage format</a></div>
+<div class="fancy-toc1"><a href="#using_the_geopoly_extension">2. Using The Geopoly Extension</a></div>
+<div class="fancy-toc2"><a href="#queries">2.1. Queries</a></div>
+<div class="fancy-toc1"><a href="#special_functions">3. Special Functions</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_overlap_p1_p2_function">3.1. The geopoly_overlap(P1,P2) Function</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_within_p1_p2_function">3.2. The geopoly_within(P1,P2) Function</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_area_p_function">3.3. The geopoly_area(P) Function</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_blob_p_function">3.4. The geopoly_blob(P) Function</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_json_p_function">3.5. The geopoly_json(P) Function</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_svg_p_function">3.6. The geopoly_svg(P,...) Function</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_bbox_p_and_geopoly_group_bbox_p_functions">3.7. The geopoly_bbox(P) and geopoly_group_bbox(P) Functions</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_contains_point_p_x_y_function">3.8. The geopoly_contains_point(P,X,Y) Function</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_xform_p_a_b_c_d_e_f_function">3.9. The geopoly_xform(P,A,B,C,D,E,F) Function</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_regular_x_y_r_n_function">3.10. The geopoly_regular(X,Y,R,N) Function</a></div>
+<div class="fancy-toc2"><a href="#the_geopoly_ccw_j_function">3.11. The geopoly_ccw(J) Function</a></div>
+<div class="fancy-toc1"><a href="#implementation_details">4. Implementation Details</a></div>
+<div class="fancy-toc2"><a href="#binary_encoding_of_polygons">4.1. Binary Encoding of Polygons</a></div>
+<div class="fancy-toc2"><a href="#shadow_tables">4.2. Shadow Tables</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+The Geopoly module is an alternative interface to the <a href="rtree.html">R-Tree extension</a> that uses
+the <a href="http://geojson.org">GeoJSON</a> notation
+(<a href="https://tools.ietf.org/html/rfc7946">RFC-7946</a>) to describe two-dimensional
+polygons. Geopoly includes functions for detecting when one polygon is
+contained within or overlaps with another, for computing the
+area enclosed by a polygon, for doing linear transformations of polygons,
+for rendering polygons as
+<a href="https://en.wikipedia.org/wiki/Scalable_Vector_Graphics">SVG</a>, and other
+similar operations.
+
+</p><p>
+The source code for Geopoly is included in the <a href="amalgamation.html">amalgamation</a> but is not
+included in the library unless the <a href="compile.html#enable_geopoly">-DSQLITE_ENABLE_GEOPOLY</a> compile-time option
+is used.
+
+</p><p>
+Geopoly operates on "simple" polygons - that is, polygons for which
+the boundary does not intersect itself. Geopoly thus extends the capabilities
+of the <a href="rtree.html">R-Tree extension</a> which can only deal with rectangular areas.
+On the other hand, the <a href="rtree.html">R-Tree extension</a> is
+able to handle between 1 and 5 coordinate dimensions, whereas Geopoly is restricted
+to 2-dimensional shapes only.
+
+</p><p>
+Each polygon in the Geopoly module can be associated with an arbitrary
+number of auxiliary data fields.
+
+</p><h2 id="geojson"><span>1.1. </span>GeoJSON</h2>
+
+<p>The <a href="https://tools.ietf.org/html/rfc7946">GeoJSON standard</a> is syntax for
+exchanging geospatial information using JSON. GeoJSON is a rich standard
+that can describe nearly any kind of geospatial content.
+
+</p><p>The Geopoly module only understands
+a small subset of GeoJSON, but a critical subset.
+In particular, GeoJSON understands
+the JSON array of vertexes that describes a simple polygon.
+
+</p><p>A polygon is defined by its vertexes.
+Each vertex is a JSON array of two numeric values which are the
+X and Y coordinates of the vertex.
+A polygon is a JSON array of at least four of these vertexes,
+and hence is an array of arrays.
+The first and last vertex in the array must be the same.
+The polygon follows the right-hand rule: When tracing a line from
+one vertex to the next, the area to the right of the line is outside
+of the polygon and the area to the left is inside the polygon.
+In other words, the net rotation of the vertexes is counter-clockwise.
+
+</p><p>
+For example, the following JSON describes an isosceles triangle, sitting
+on the X axis and with an area of 0.5:
+
+</p><div class="codeblock"><pre>&#91;&#91;0,0],&#91;1,0],&#91;0.5,1],&#91;0,0]]
+</pre></div>
+
+<p>
+A triangle has three vertexes, but the GeoJSON description of the triangle
+has 4 vertexes because the first and last vertex are duplicates.
+
+</p><h2 id="binary_storage_format"><span>1.2. </span>Binary storage format</h2>
+
+<p>
+Internally, Geopoly stores polygons in a binary format - an SQL BLOB.
+Details of the binary format are given below.
+All of the Geopoly interfaces are able to accept polygons in either the
+GeoJSON format or in the binary format.
+
+</p><h1 id="using_the_geopoly_extension"><span>2. </span>Using The Geopoly Extension</h1>
+
+<p>
+A geopoly table is created as follows:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE newtab USING geopoly(a,b,c);
+</pre></div>
+
+<p>
+The statement above creates a new geopoly table named "newtab".
+Every geopoly table contains a built-in integer "rowid" column
+and a "_shape" column that contains
+the polygon associated with that row of the table.
+The example above also defines three auxiliary data columns
+named "a", "b", and "c" that can store whatever additional
+information the application needs to associate
+with each polygon. If there is no need to store auxiliary
+information, the list of auxiliary columns can be omitted.
+
+</p><p>
+Store new polygons in the table using ordinary INSERT statements:
+
+</p><div class="codeblock"><pre>INSERT INTO newtab(_shape) VALUES('&#91;&#91;0,0],&#91;1,0],&#91;0.5,1],&#91;0,0]]');
+</pre></div>
+
+<p>
+UPDATE and DELETE statements work similarly.
+
+</p><h2 id="queries"><span>2.1. </span>Queries</h2>
+
+<p>
+To query the geopoly table using an indexed geospatial search,
+use one of the functions geopoly_overlap()
+or geopoly_within() as a boolean function in the WHERE clause,
+with the "_shape" column as the first argument to the function.
+For example:
+
+</p><div class="codeblock"><pre>SELECT * FROM newtab WHERE geopoly_overlap(_shape, $query_polygon);
+</pre></div>
+
+<p>
+The previous example will return every row for which the _shape
+overlaps the polygon in the $query_polygon parameter. The
+geopoly_within() function works similarly, but only returns rows for
+which the _shape is completely contained within $query_polygon.
+
+</p><p>
+Queries (and also DELETE and UPDATE statements) in which the WHERE
+clause contains a bare geopoly_overlap() or geopoly_within() function
+make use of the underlying R*Tree data structures for a fast lookup that
+only has to examine a subset of the rows in the table. The number of
+rows examines depends, of course, on the size of the $query_polygon.
+Large $query_polygons will normally need to look at more rows than small
+ones.
+
+</p><p>
+Queries against the rowid of a geopoly table are also very quick, even
+for tables with a vast number of rows.
+However, none of the auxiliary data columns are indexes, and so queries
+against the auxiliary data columns will involve a full table scan.
+
+</p><h1 id="special_functions"><span>3. </span>Special Functions</h1>
+
+<p>
+The geopoly module defines several new SQL functions that are useful for
+dealing with polygons. All polygon arguments to these functions can be
+either the GeoJSON format or the internal binary format.
+
+<a name="goverlap"></a>
+
+</p><h2 id="the_geopoly_overlap_p1_p2_function"><span>3.1. </span>The geopoly_overlap(P1,P2) Function</h2>
+
+<p>
+If P1 and P2 are both polygons, then the geopoly_overlap(P1,P2) function returns
+a non-zero integer if there is any overlap between P1 and P2, or it returns
+zero if P1 and P2 completely disjoint.
+If either P1 or P2 is not a polygon, this routine returns NULL.
+
+</p><p>
+The geopoly_overlap(P1,P2) function is special in that the geopoly virtual
+table knows how to use R*Tree indexes to optimize queries in which the
+WHERE clause uses geopoly_overlap() as a boolean function. Only the
+geopoly_overlap(P1,P2) and geopoly_within(P1,P2) functions have this
+capability.
+
+<a name="gwithin"></a>
+
+</p><h2 id="the_geopoly_within_p1_p2_function"><span>3.2. </span>The geopoly_within(P1,P2) Function</h2>
+
+<p>
+If P1 and P2 are both polygons, then the geopoly_within(P1,P2) function returns
+a non-zero integer if P1 is completely contained within P2, or it returns zero
+if any part of P1 is outside of P2. If P1 and P2 are the same polygon, this routine
+returns non-zero.
+If either P1 or P2 is not a polygon, this routine returns NULL.
+
+</p><p>
+The geopoly_within(P1,P2) function is special in that the geopoly virtual
+table knows how to use R*Tree indexes to optimize queries in which the
+WHERE clause uses geopoly_within() as a boolean function. Only the
+geopoly_within(P1,P2) and geopoly_overlap(P1,P2) functions have this
+capability.
+
+<a name="garea"></a>
+
+</p><h2 id="the_geopoly_area_p_function"><span>3.3. </span>The geopoly_area(P) Function</h2>
+
+<p>
+If P is a polygon, then geopoly_area(P) returns the area enclosed by
+that polygon. If P is not a polygon, geopoly_area(P) returns NULL.
+
+<a name="gblob"></a>
+
+</p><h2 id="the_geopoly_blob_p_function"><span>3.4. </span>The geopoly_blob(P) Function</h2>
+
+<p>
+If P is a polygon, then geopoly_blob(P) returns the binary encoding
+of that polygon as a BLOB.
+If P is not a polygon, geopoly_blob(P) returns NULL.
+
+<a name="gjson"></a>
+
+</p><h2 id="the_geopoly_json_p_function"><span>3.5. </span>The geopoly_json(P) Function</h2>
+
+<p>
+If P is a polygon, then geopoly_json(P) returns the GeoJSON representation
+of that polygon as a TEXT string.
+If P is not a polygon, geopoly_json(P) returns NULL.
+
+<a name="gsvg"></a>
+
+</p><h2 id="the_geopoly_svg_p_function"><span>3.6. </span>The geopoly_svg(P,...) Function</h2>
+
+<p>
+If P is a polygon, then geopoly_svg(P,...) returns a text string which is a
+<a href="https://en.wikipedia.org/wiki/Scalable_Vector_Graphics">Scalable Vector Graphics (SVG)</a>
+representation of that polygon. If there is more one argument, then second
+and subsequent arguments are added as attributes to each SVG glyph. For example:
+
+</p><div class="codeblock"><pre>SELECT geopoly_svg($polygon,'class="poly"','style="fill:blue;"');
+</pre></div>
+
+<p>
+If P is not a polygon, geopoly_svg(P,...) returns NULL.
+
+</p><p>
+Note that geopoly uses a traditional right-handed cartesian coordinate system
+with the origin at the lower left, whereas SVG uses a left-handed coordinate
+system with the origin at the upper left. The geopoly_svg() routine makes no
+attempt to transform the coordinate system, so the displayed images are shown
+in mirror image and rotated. If that is undesirable, the geopoly_xform() routine
+can be used to transform the output from cartesian to SVG coordinates prior to
+passing the polygons into geopoly_svg().
+
+<a name="gbbox"></a>
+
+</p><h2 id="the_geopoly_bbox_p_and_geopoly_group_bbox_p_functions"><span>3.7. </span>The geopoly_bbox(P) and geopoly_group_bbox(P) Functions</h2>
+
+<p>
+If P is a polygon, then geopoly_bbox(P) returns a new polygon that is
+the smallest (axis-aligned) rectangle completely enclosing P.
+If P is not a polygon, geopoly_bbox(P) returns NULL.
+
+</p><p>
+The geopoly_group_bbox(P) function is an aggregate version of geopoly_bbox(P).
+The geopoly_group_bbox(P) function returns the smallest rectangle that will
+enclose all P values seen during aggregation.
+
+<a name="gpoint"></a>
+
+</p><h2 id="the_geopoly_contains_point_p_x_y_function"><span>3.8. </span>The geopoly_contains_point(P,X,Y) Function</h2>
+
+<p>
+If P is a polygon, then geopoly_contains_point(P,X,Y) returns a
+non-zero integer if and only
+if the coordinate X,Y is inside or on the boundary of the polygon P.
+If P is not a polygon, geopoly_contains_point(P,X,Y) returns NULL.
+
+<a name="xform"></a>
+
+</p><h2 id="the_geopoly_xform_p_a_b_c_d_e_f_function"><span>3.9. </span>The geopoly_xform(P,A,B,C,D,E,F) Function</h2>
+
+<p>
+The geopoly_xform(P,A,B,C,D,E,F) function returns a new polygon that is an
+affine transformation of the polygon P and where the transformation
+is defined by values A,B,C,D,E,F. If P is not a valid polygon, this
+routine returns NULL.
+
+</p><p>
+The transformation converts each vertex of the polygon according to the
+following formula:
+
+</p><div class="codeblock"><pre>x1 = A*x0 + B*y0 + E
+y1 = C*x0 + D*y0 + F
+</pre></div>
+
+<p>
+So, for example, to move a polygon by some amount DX, DY without changing
+its shape, use:
+
+</p><div class="codeblock"><pre>geopoly_xform($polygon, 1, 0, 0, 1, $DX, $DY)
+</pre></div>
+
+<p>
+To rotate a polygon by R radians around the point 0, 0:
+
+</p><div class="codeblock"><pre>geopoly_xform($polygon, cos($R), sin($R), -sin($R), cos($R), 0, 0)
+</pre></div>
+
+<p>
+Note that a transformation that flips the polygon might cause the
+order of vertexes to be reversed. In other words, the transformation
+might cause the vertexes to circulate in clockwise order instead of
+counter-clockwise. This can be corrected by sending the result
+through the <a href="geopoly.html#ccw">geopoly_ccw()</a> function after transformation.
+
+
+<a name="regpoly"></a>
+
+</p><h2 id="the_geopoly_regular_x_y_r_n_function"><span>3.10. </span>The geopoly_regular(X,Y,R,N) Function</h2>
+
+<p>
+The geopoly_regular(X,Y,R,N) function returns a convex, simple, regular,
+equilateral, equiangular polygon with N sides, centered at X,Y, and with
+a circumradius of R. Or, if R is negative or if N is less than 3, the
+function returns NULL. The N value is capped at 1000 so that the routine
+will never render a polygon with more than 1000 sides even if the N value
+is larger than 1000.
+
+</p><p>
+As an example, the following graphic:
+
+</p><blockquote>
+
+</blockquote>
+
+<p>Was generated by this script:
+
+</p><div class="codeblock"><pre>SELECT '&lt;svg width="600" height="300">';
+WITH t1(x,y,n,color) AS (VALUES
+ (100,100,3,'red'),
+ (200,100,4,'orange'),
+ (300,100,5,'green'),
+ (400,100,6,'blue'),
+ (500,100,7,'purple'),
+ (100,200,8,'red'),
+ (200,200,10,'orange'),
+ (300,200,12,'green'),
+ (400,200,16,'blue'),
+ (500,200,20,'purple')
+)
+SELECT
+ geopoly_svg(geopoly_regular(x,y,40,n),
+ printf('style="fill:none;stroke:%s;stroke-width:2"',color))
+ || printf(' &lt;text x="%d" y="%d" alignment-baseline="central" text-anchor="middle">%d&lt;/text>',x,y+6,n)
+ FROM t1;
+SELECT '&lt;/svg>';
+</pre></div>
+
+<a name="ccw"></a>
+
+<h2 id="the_geopoly_ccw_j_function"><span>3.11. </span>The geopoly_ccw(J) Function</h2>
+
+<p>The geopoly_ccw(J) function returns the polygon J with counter-clockwise (CCW) rotation.
+
+</p><p>
+<a href="https://tools.ietf.org/html/rfc7946">RFC-7946</a> requires that polygons use CCW rotation.
+But the spec also observes that many legacy GeoJSON files do not following the spec and
+contain polygons with clockwise (CW) rotation. The geopoly_ccw() function is useful for
+applications that are reading legacy GeoJSON scripts. If the input to geopoly_ccw() is
+a correctly-formatted polygon, then no changes are made. However, if the circulation of
+the input polygon is backwards, then geopoly_ccw() reverses the circulation order so that
+it conforms to the spec and so that it will work correctly with the Geopoly module.
+
+
+
+</p><h1 id="implementation_details"><span>4. </span>Implementation Details</h1>
+
+<p>The geopoly module is an extension to the <a href="rtree.html">R-Tree extension</a>. Geopoly
+uses the same underlying logic and shadow tables as the <a href="rtree.html">R-Tree extension</a>.
+Geopoly merely presents a different interface, and provides some extra logic
+to compute polygon decoding, overlap, and containment.
+
+</p><h2 id="binary_encoding_of_polygons"><span>4.1. </span>Binary Encoding of Polygons</h2>
+
+<p>
+Geopoly stores all polygons internally using a binary format. A binary
+polygon consists of a 4-byte header following by an array of coordinate
+pairs in which each dimension of each coordinate is a 32-bit floating point
+number.
+
+</p><p>
+The first byte of the header is a flag byte. The least significant bit
+of the flag byte determines whether the coordinate pairs that follow the
+header are stored big-endian or little-endian. A value of 0 for the least
+significant bit means big-endian and a value of 1 means little endian.
+Other bits of the first byte in the header are reserved for future expansion.
+
+</p><p>
+The next three bytes in the header record the number of vertexes in the polygon
+as a big-endian integer. Thus there is an upper bound of about 16 million
+vertexes per polygon.
+
+</p><p>
+Following the header is the array of coordinate pairs. Each coordinate is
+a 32-bit floating point number. The use of 32-bit floating point values for
+coordinates means that any point on the earth's surface can be mapped with
+a resolution of approximately 2.5 meters. Higher resolutions are of course
+possible if the map is restricted to a single continent or country.
+Note that the resolution of coordinates in the geopoly module is similar
+in magnitude to daily movement of points on the earth's surface due to
+tidal forces.
+
+</p><p>
+The list of coordinates in the binary format contains no redundancy.
+The last coordinate is not a repeat of the first as it is with GeoJSON.
+Hence, there is always one fewer coordinate pair in the binary representation of
+a polygon compared to the GeoJSON representation.
+
+</p><h2 id="shadow_tables"><span>4.2. </span>Shadow Tables</h2>
+
+<p>
+The geopoly module is built on top of the <a href="rtree.html">R-Tree extension</a> and uses the
+same underlying shadow tables and algorithms. For indexing purposes, each
+polygon is represented in the shadow tables as a rectangular bounding box.
+The underlying R-Tree implementation uses bounding boxes to limit the search
+space. Then the geoploy_overlap() and/or geopoly_within() routines further
+refine the search to the exact answer.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/geopoly.in?m=b47321138852c597d">2020-04-18 20:02:04</a> UTC </small></i></p>
+
diff --git a/www/getthecode.html b/www/getthecode.html
new file mode 100644
index 0000000..8cd6058
--- /dev/null
+++ b/www/getthecode.html
@@ -0,0 +1,241 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>How To Download Canonical SQLite Source Code</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+How To Download Canonical SQLite Source Code
+</div>
+</div>
+
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>Most programmers compile SQLite into their applications using
+the <a href="amalgamation.html">amalgamation</a>. The <a href="amalgamation.html">amalgamation</a> is C-code but it is not
+"source code". The <a href="amalgamation.html">amalgamation</a> is generated from source code
+by scripts.
+
+</p><p>This document describes how to obtain the canonical source code
+for SQLite - the raw source files from which the amalgamation is
+built. See the <a href="howtocompile.html">How To Compile SQLite</a> page for additional information
+on what to do with the canonical source code once it is obtained.
+
+</p><h1 id="direct_downloads"><span>2. </span>Direct Downloads</h1>
+
+<p>Snapshots of official releases of SQLite source code can often
+be obtained directly from the <a href="download.html">download page</a> of the SQLite website.
+Even if the specific version desired is not listed on the download page,
+the naming conventions are fairly clear and so programmers can often
+guess the name of an historical release and download it that way.
+
+</p><h1 id="obtaining_code_directly_from_the_version_control_system"><span>3. </span>Obtaining Code Directly From the Version Control System</h1>
+
+<p>For any historical version of SQLite, the source tree can be obtained
+from the <a href="https://www.fossil-scm.org/">Fossil</a> version control system,
+either downloading a tarball or ZIP archive for a specific version, or
+by cloning the entire project history.
+
+</p><p>SQLite sources are maintained on three geographically dispersed
+servers:
+
+</p><blockquote>
+<a href="https://www.sqlite.org/src">https://www.sqlite.org/src</a> (Dallas)<br>
+<a href="https://www2.sqlite.org/src">https://www2.sqlite.org/src</a> (Newark)<br>
+<a href="https://www3.sqlite.org/src">https://www3.sqlite.org/src</a> (San Francisco)<br>
+</blockquote>
+
+<p>The documentation is maintained in separate source repositories on
+those same servers:
+
+</p><blockquote>
+<a href="https://www.sqlite.org/docsrc">https://www.sqlite.org/docsrc</a> (Dallas)<br>
+<a href="https://www2.sqlite.org/docsrc">https://www2.sqlite.org/docsrc</a> (Newark)<br>
+<a href="https://www3.sqlite.org/docsrc">https://www3.sqlite.org/docsrc</a> (San Francisco)<br>
+</blockquote>
+
+<p>To download a specific historical version, first locate the specific
+version desired by visiting the timeline page on one of these servers
+(for example: <a href="https://www.sqlite.org/src/timeline">https://www.sqlite.org/src/timeline</a>). If
+you know the approximate date of the version you want to download, you
+can add a query parameter like "c=YYYY-MM-DD" to the "timeline" URL to
+see a timeline centered on that date. For example, to see all the check-ins
+that occurred around August 26, 2013, visit
+<a href="https://www.sqlite.org/src/timeline?c=2013-08-26">https://www.sqlite.org/src/timeline?c=2013-08-26</a>.
+If you are looking for an official release, visit the
+<a href="chronology.html">chronology</a> page, click on the date to the left of the release
+you are looking for, and that will take you immediately to the
+check-in corresponding to the release.
+
+</p><p>Once you locate a specific version, click on the hyperlink for that
+version to see the "Check-in Information Page".
+Then click on either the "Tarball" link or the
+"ZIP archive" link to download the complete source tree.
+
+<a name="clone"></a>
+
+</p><h1 id="cloning_the_complete_development_history"><span>4. </span>Cloning The Complete Development History</h1>
+
+<p>To clone the entire history of SQLite, first go to the
+<a href="https://www.fossil-scm.org/download.html">https://www.fossil-scm.org/download.html</a> page and grab a precompiled binary
+for the Fossil version control program. Or get the source code on the
+same page and compile it yourself.
+
+</p><p>As of 2017-03-12, you must use Fossil version
+2.0 or later for the following instructions to work.
+The SQLite repository started using
+artifacts named using SHA3 hashes instead of SHA1 hashes on that date,
+and Fossil 2.0 or later is needed in order to understand the new SHA3
+hashes. To find out what version of Fossil you are running,
+type "fossil -v".</p>
+
+<p>Fossil is a completely stand-alone
+program, so install it simply by putting the "fossil" or "fossil.exe"
+executable someplace on your $PATH or %PATH%. After you have Fossil
+installed, do this:
+
+</p><div class="codeblock"><pre>fossil clone https://www.sqlite.org/src sqlite.fossil
+</pre></div>
+
+<p>The command above
+will make a copy of the complete development history of
+SQLite into the "sqlite.fossil" file on your computer. Making this copy
+takes about a minute and uses about 32 megabytes of transfer. After
+making the copy, "open" the repository by typing:
+
+</p><div class="codeblock"><pre>fossil open sqlite.fossil
+</pre></div>
+
+<p>This second command will "checkout" the latest check-in from the SQLite
+source tree into your current directory. Subsequently, you can easily switch
+to a different version by typing:
+
+</p><div class="codeblock"><pre>fossil update VERSION
+</pre></div>
+
+<p>Where VERSION can be a branch name (like "trunk" or "session") to get the
+latest check-in on a specific branch, or VERSION can be a SHA1 hash or a
+prefix of a SHA1 hash for a specific check-in, or VERSION can be a tag
+such as "version-3.8.8". Every time you run "fossil update" it will
+automatically reach out to the original repository at
+https://www.sqlite.org/src to obtain new check-ins that might have been
+made by others since your previous update.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/getthecode.in?m=911345504df8b630c">2022-01-16 07:37:35</a> UTC </small></i></p>
+
diff --git a/www/hirely.html b/www/hirely.html
new file mode 100644
index 0000000..33013fd
--- /dev/null
+++ b/www/hirely.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>High Reliability</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+High Reliability
+</div>
+</div>
+
+
+
+
+
+<p>
+SQLite is a high-reliability storage solution. It does not give
+problems. It just works.
+
+</p><p>
+The high-reliability of SQLite is proven in practice.
+SQLite has been used without problems in multiple billions of smart-phones,
+IoT devices, and desktop applications, around the world, and for almost two
+decades.
+
+</p><p>
+SQLite responds gracefully to system errors. Obscure out-of-memory and
+I/O errors are reported back up to the application. These error reporting
+paths are all carefully tested to ensure they will always work.
+
+</p><p>
+SQLite is resilient in the face of corrupt inputs, including maliciously
+designed database files and SQL strings. Extensive fuzz-testing ensures
+that corrupt inputs will not lead to crashes or undefined behavior, but
+will instead cause sensible errors to be reported back to the application.
+(<a href="security.html">More...</a>)
+
+</p><p>
+SQLite is built using a
+<a href="https://en.wikipedia.org/wiki/DO-178B">DO-178B</a>-inspired process.
+The <a href="testing.html">testing standards</a> for SQLite are among the highest for
+commercial software.
+
+</p><p>
+SQLite is <a href="copyright.html">open-source</a> but it is not open-contribution.
+All the code in SQLite is written by a small team of experts.
+The project does not accept "pull requests" or patches from
+anonymous passers-by on the internet.
+
+</p><p>
+The developers of SQLite intend to support the product through
+the year 2050. To this end, the source code is carefully documented
+to promote long-term maintainability. We prefer mature and stable
+over trendy and cutting-edge.
+
+</p><p>
+All of these factors combine to make SQLite a very trouble-free
+software library.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/hirely.in?m=0d1c8f0b9af281372">2020-05-07 12:52:42</a> UTC </small></i></p>
+
diff --git a/www/howitworks.html b/www/howitworks.html
new file mode 100644
index 0000000..1dcb1fc
--- /dev/null
+++ b/www/howitworks.html
@@ -0,0 +1,387 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>How SQLite Works</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+How SQLite Works
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#background">1. Background</a></div>
+<div class="fancy-toc2"><a href="#sqlite_is_different_from_most_other_sql_databases">1.1. SQLite Is Different From Most Other SQL Databases</a></div>
+<div class="fancy-toc1"><a href="#sql_is_a_programming_language">2. SQL Is A Programming Language</a></div>
+<div class="fancy-toc2"><a href="#programming_language_processing_steps">2.1. Programming Language Processing Steps</a></div>
+<div class="fancy-toc2"><a href="#compiling_sqlite_programs">2.2. Compiling SQLite Programs</a></div>
+<div class="fancy-toc1"><a href="#further_reading">3. Further Reading</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="background"><span>1. </span>Background</h1>
+
+<p>
+SQLite is a <a href="https://en.wikipedia.org/wiki/Library_(computing)">software library</a>
+that translates high-level disk I/O requests generated by an application
+into low-level I/O operations that
+can be carried out by the operating system. The application constructs
+high-level I/O requests using the
+<a href="https://en.wikipedia.org/wiki/SQL">SQL language</a>.
+SQLite translates each high-level SQL statement into a sequence of
+many low-level I/O requests (open a file, read a few bytes from a file,
+write a few bytes into a file, etc.) that do the work requested by
+the SQL.
+
+
+</p><p>
+An application program could do all its disk I/O by direct calls to
+operating system I/O routines
+or by using a key/value storage engine like
+<a href="https://en.wikipedia.org/wiki/Berkeley_DB">Berkeley DB</a> or
+<a href="https://en.wikipedia.org/wiki/RocksDB">RocksDB</a> (to name but two).
+But there are advantages to using a higher-level interface based
+on the SQL language.
+
+</p><ol>
+<li><p>
+SQL is a very high-level language.
+A few lines of SQL can replace hundreds or thousands of lines of
+procedural code. SQL thus reduces
+the amount of work needed to develop and maintain the application,
+and thereby helps to reduce the number of bugs in the application.
+
+</p></li><li><p>
+SQL and SQLite are
+<a href="https://en.wikipedia.org/wiki/Database_transaction">transactional</a>.
+The use of a transactional storage system makes it much easier to
+reason about the behavior of the application, and to write applications
+that are robust, even in the face of software bugs, hardware faults,
+or power losses.
+
+</p></li><li><p>
+SQLite is often
+<a href="fasterthanfs.html">faster than direct low-level I/O</a>.
+This is counterintuitive. One would expect that a
+high-level interface such as SQLite would impose a run-time penalty.
+And, theoretically, that is correct. But in practice, SQL-based
+systems such as SQLite do so many behind-the-scenes optimizations
+that an application developer would never have time to create and
+maintain, that the SQL-based systems end up providing
+a net performance gain.
+</p></li></ol>
+
+<h2 id="sqlite_is_different_from_most_other_sql_databases"><span>1.1. </span>SQLite Is Different From Most Other SQL Databases</h2>
+
+<p>
+There are many SQL-based database management systems available, besides
+SQLite. Common options include MySQL, PostgreSQL, and SQL-Server.
+All these systems use the SQL langauge to communicate with the
+application, just like SQLite. But these other systems different
+from SQLite in important respects.
+
+</p><ol>
+<li><p>
+SQLite is a <a href="serverless.html">serverless</a> software library, whereas the other
+systems are client-server based. With MySQL, PostgreSQL, SQL-Server,
+and others, the application sends a message containing some SQL
+over to a separate server thread or process. That separate
+thread or process performs the requested I/O, then send the results
+back to the application. But there is no separate thread or
+process with SQLite. SQLite runs in the same address space as
+the application, using the same program counter and heap storage.
+SQLite does no interprocess communication (IPC). When an application
+sends an SQL statement into SQLite (by invoking a the appropriate
+SQLite library subroutine), SQLite interprets the SQL
+in the same thread as the caller. When an SQLite API routine
+returns, it does not leave behind any background tasks that
+run separately from the application.
+
+</p></li><li><p>
+An SQLite database is a single ordinary file on disk
+(with a <a href="fileformat2.html">well-defined file format</a>). With other
+systems, a "database" is usually a large number of separate
+files hidden away in obscure directories of the filesystem, or
+even spread across multiple machines. But with SQLite, a
+complete database is just an ordinary disk file.
+</p></li></ol>
+
+<h1 id="sql_is_a_programming_language"><span>2. </span>SQL Is A Programming Language</h1>
+
+<p>
+The best way to understand how SQL database engines work is to
+think of SQL as a programming language, not as a "query language".
+Each SQL statement is a separate program. Applications construct
+SQL program source files and send them to the database engine.
+The database engine compiles the SQL source code into executable
+form, runs that executable, then sends the result back to the
+application.
+
+</p><p>
+While SQL is a programming language, it is different from other
+programming languages like C, Javascript, Python, or Go in that
+SQL is a
+<a href="https://en.wikipedia.org/wiki/Declarative_programming">declarative language</a>
+where the others are
+<a href="https://en.wikipedia.org/wiki/Imperative_programming">imperative languages</a>.
+This is an important difference that has implications for the
+design of the compiler used to translate program source text into an
+executable format. However, those details
+should not detract from the fact that
+SQL is really just another programming language.
+
+</p><h2 id="programming_language_processing_steps"><span>2.1. </span>Programming Language Processing Steps</h2>
+
+<p>
+All programming languages are processed in two steps:
+
+</p><ol>
+<li><p>
+Translate the program source text into an executable format.
+</p></li><li><p>
+Run the executable generated in the previous step in order to
+carry out the desired action.
+</p></li></ol>
+
+<p>
+All programming languages uses those two basic steps.
+The main difference is in the executable format.
+
+</p><p>
+"Compiled" languages like C++ and Rust translate
+the source text into machine code that can be directly executed
+by the underlying hardware. There exist SQL database systems
+that do the same with SQL - they translate each SQL statement
+directly into machine code. But that approach is uncommon and
+is not the approach taken by SQLite.
+
+</p><p>
+Other languages like Java, Perl, Python, and TCL
+typically translate the program source text into bytecode.
+This bytecode is then run through an interpreter that
+reads the bytecode and carries out the desired operations.
+SQLite uses this bytecode approach. If you preceed
+any SQL statement with the "<a href="lang_explain.html">EXPLAIN</a>" keyword in SQLite,
+it will show you the bytecode that is generated rather
+than run the bytecode.
+
+</p><p>
+Another approach is to translate the program source text
+into a tree of objects in memory. This tree is the "executable".
+An interpret runs the executable by walking the tree.
+This is the technique used by MySQL, PostgreSQL, and
+SQL-Server.
+
+</p><p>
+Of course, not every language fits neatly into one of the
+above categories. This applies to both SQL database engines
+and more familiar imperative programming languages. Javascript
+is famous for using a hybrid execution model, where the code
+is initially compiled into a tree of objects, but might be
+further translating (using just-in-time compilation) down into
+more efficient bytecode or machine code, as a means of boosting
+performance.
+
+</p><p>
+The executable format really ends up being just an implementation
+detail. The key point is that all languages have a compiler
+step which translates programs into an executable format and
+a run step that executes the compiled program.
+
+
+</p><h2 id="compiling_sqlite_programs"><span>2.2. </span>Compiling SQLite Programs</h2>
+
+<p>
+When an SQL program is submitted to SQLite, the first step is
+to split the source text into "tokens". A token might be:
+
+</p><ul>
+<li>A language keyword like "SELECT" or "UPDATE".
+</li><li>An identifier for a table or column or variable.
+</li><li>Punctuation characters like "," or "==" or ";".
+</li><li>Literal values: numeric or string constants.
+</li><li>Whitespace or comments.
+</li></ul>
+
+<p>
+Whitespace and comment tokens are discarded. All other tokens
+are fed into an
+<a href="https://en.wikipedia.org/wiki/LALR_parser">LALR(1) Parser</a>
+that analyzes the structure of the input program and generates an
+<a href="https://en.wikipedia.org/wiki/Abstract_syntax_tree">Abstract Syntax Tree (AST)</a>
+for the input program.
+
+</p><p>
+The parser forwards the AST on to the code generator.
+The code generator is the heart of SQLite, and is where most of
+the magic happens.
+The code generator resolves symbolic names in the AST - matching
+the names of columns and tables in the input SQL into actual
+columns and tables of the database. The code generator also does
+various transformations on the AST to "optimize" it. Finally
+the code generator chooses appropriate algorithms to implement
+the operations requested by the AST and constructs bytecode to
+carry out those operations.
+
+</p><p>
+The bytecode generated by the code generator is called a
+"<a href="c3ref/stmt.html">prepared statement</a>". Translating SQL source text into a
+prepared statement is analogous to converting a C++ program
+into machine code by invoking gcc or clang. Human-readable
+source text (SQL or C++) goes in, and a machine readable executable
+(bytecode or machine code) comes out.
+
+</p><h1 id="further_reading"><span>3. </span>Further Reading</h1>
+
+<ul>
+<li><p>
+The <a href="atomiccommit.html">Atomic Commit</a> document describes how SQLite implements
+transactions.
+
+</p></li><li><p>
+The <a href="opcode.html">bytecode engine</a> document has more information
+on the bytecode format used by SQLite, and how to view and interpret
+an SQLite prepared statement.
+
+</p></li><li><p>
+The <a href="optoverview.html">SQLite query planner</a> and
+<a href="queryplanner-ng.html">Next Generation Query Planner</a> documents have further details
+on the algorithms SQLite uses to implement SQL statements and
+how it goes above choosing an appropriate algorithm for each
+individual SQL statement.
+</p></li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/howitworks.in?m=128d70d4240d0cffa">2022-06-16 15:42:19</a> UTC </small></i></p>
+
diff --git a/www/howtocompile.html b/www/howtocompile.html
new file mode 100644
index 0000000..4082ab3
--- /dev/null
+++ b/www/howtocompile.html
@@ -0,0 +1,460 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>How To Compile SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+How To Compile SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#amalgamation_versus_individual_source_files">1. Amalgamation Versus Individual Source Files</a></div>
+<div class="fancy-toc1"><a href="#compiling_the_command_line_interface">2. Compiling The Command-Line Interface</a></div>
+<div class="fancy-toc1"><a href="#compiling_the_tcl_interface">3. Compiling The TCL Interface</a></div>
+<div class="fancy-toc1"><a href="#building_the_amalgamation">4. Building The Amalgamation</a></div>
+<div class="fancy-toc1"><a href="#building_a_windows_dll">5. Building A Windows DLL</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+<title>How To Compile SQLite</title>
+
+
+
+<h2 style="margin-left:1.0em" notoc="1" id="overview"> Overview</h2>
+
+<p>
+SQLite is ANSI-C source code.
+It must be compiled into machine code before it is useful.
+This article is a guide to the various ways of compiling SQLite.
+</p>
+
+<p>This article does not contain a step-by-step recipe for compiling
+SQLite. That would be difficult since each development situation
+is different.
+Rather, this article describes and illustrates the principals behind the
+compilation of SQLite. Typical compilation commands are provided as examples
+with the expectation that application developers can use these examples
+as guidance for developing their own custom compilation procedures.
+In other words, this article provides ideas and insights, not turnkey
+solutions.</p>
+
+<h1 id="amalgamation_versus_individual_source_files"><span>1. </span>Amalgamation Versus Individual Source Files</h1>
+
+<p>SQLite is built from over one hundred files of C code and script
+spread across multiple directories. The implementation of SQLite is pure
+ANSI-C, but many of the C-language source code files are either
+generated or transformed by auxiliary C programs and AWK, SED, and TCL
+scripts prior to being incorporated into the finished SQLite library.
+Building the necessary C programs and transforming and/or creating the
+C-language source code for SQLite is a complex process.</p>
+
+<p>To simplify matters, SQLite is also available as a pre-packaged
+<a href="amalgamation.html">amalgamation</a> source code file: <b>sqlite3.c</b>. The amalgamation is
+a single file of ANSI-C code that implements the entire SQLite library.
+The amalgamation is much easier to deal with. Everything is contained
+within a single code file, so it is easy to drop into the source tree
+of a larger C or C++ program. All the code generation and transformation
+steps have already been carried out so there are no auxiliary C programs
+to configure and compile and no scripts to run. And, because the entire
+library is contained in a single translation unit, compilers are able to
+do more advanced optimizations resulting in a 5% to 10% performance
+improvement. For these reasons, the amalgamation source file
+("<b>sqlite3.c</b>") is recommended for all applications.</p>
+
+<blockquote><i>
+The use of the <a href="amalgamation.html">amalgamation</a> is recommended for all applications.
+</i></blockquote>
+
+<p>Building SQLite directly from individual source code files is certainly
+possible, but it is not recommended. For some specialized applications, it
+might be necessary to modify the build process in ways that cannot be done
+using just the prebuilt amalgamation source file downloaded from the website.
+For those situations, it is recommended that a customized amalgamation be
+built (as described <a href="howtocompile.html#amal">below</a>)
+and used. In other words, even if a project requires building SQLite
+beginning with individual source files, it is still recommended that an
+amalgamation source file be used as an intermediate step.</p>
+
+<a name="cli"></a>
+
+<h1 id="compiling_the_command_line_interface"><span>2. </span>Compiling The Command-Line Interface</h1>
+
+<p>A build of the <a href="cli.html">command-line interface</a> requires three source
+files:</p>
+
+<ul>
+<li><b>sqlite3.c</b>: The SQLite amalgamation source file
+</li><li><b>sqlite3.h</b>: The header files that accompanies sqlite3.c and
+defines the C-language interfaces to SQLite.
+</li><li><b>shell.c</b>: The command-line interface program itself.
+This is the C source code file that contains the definition of
+the <b>main()</b> routine and the loop that prompts for user input
+and passes that input into the SQLite database engine for processing.
+</li></ul>
+
+<p>All three of the above source files are contained in the
+<a href="download.html">amalgamation tarball</a> available on the <a href="download.html">download page</a>.</p>
+
+<p>To build the CLI, simply put these three files in the same directory
+and compile them together. Using MSVC:
+
+</p><blockquote><pre>
+cl shell.c sqlite3.c -Fesqlite3.exe
+</pre></blockquote>
+
+<p>On unix systems (or on Windows using cygwin or mingw+msys)
+the command typically looks something like this:</p>
+
+<blockquote><pre>
+gcc shell.c sqlite3.c -lpthread -ldl -lm -o sqlite3
+</pre></blockquote>
+
+<p>The pthreads library is needed to make SQLite threadsafe. But
+since the CLI is single threaded, we could instruct SQLite to build
+in a non-threadsafe mode and thereby omit the pthreads library:</p>
+
+<blockquote><pre>
+gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl -lm -o sqlite3
+</pre></blockquote>
+
+<p>The -ldl library is needed to support dynamic loading, the
+<a href="c3ref/load_extension.html">sqlite3_load_extension()</a> interface and the
+<a href="lang_corefunc.html#load_extension">load_extension() SQL function</a>. If these features are not required,
+then they can be omitted using <a href="compile.html#omit_load_extension">SQLITE_OMIT_LOAD_EXTENSION</a> compile-time
+option:</p>
+
+<blockquote><pre>
+gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c -o sqlite3
+</pre></blockquote>
+
+<p>One might want to provide other <a href="compile.html">compile-time options</a> such as
+<a href="compile.html#enable_fts4">-DSQLITE_ENABLE_FTS4</a> or <a href="compile.html#enable_fts5">-DSQLITE_ENABLE_FTS5</a> for full-text search,
+<a href="compile.html#enable_rtree">-DSQLITE_ENABLE_RTREE</a> for the R*Tree search engine extension,
+<a href="compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> to include <a href="json1.html">JSON SQL functions</a>, or
+<a href="compile.html#enable_dbstat_vtab">-DSQLITE_ENABLE_DBSTAT_VTAB</a> for the <a href="dbstat.html">dbstat virtual table</a>.
+In order to see extra commentary in <a href="lang_explain.html">EXPLAIN</a> listings, add the
+<a href="compile.html#enable_explain_comments">-DSQLITE_ENABLE_EXPLAIN_COMMENTS</a> option.
+On unix systems, add -DHAVE_USLEEP=1 if the host machine supports the
+usleep() system call. Add -DHAVE_READLINE and the -lreadline
+and -lncurses libraries to get command-line editing support.
+One might also want to
+specify some compiler optimization switches. (The precompiled
+CLI available for download from the SQLite website uses "-Os".)
+There are countless possible variations here. A command to
+compile a full-featured shell might look something like this:</p>
+
+<blockquote><pre>
+gcc -Os -I. -DSQLITE_THREADSAFE=0 -DSQLITE_ENABLE_FTS4 &#92;
+ -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_JSON1 &#92;
+ -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_EXPLAIN_COMMENTS &#92;
+ -DHAVE_USLEEP -DHAVE_READLINE &#92;
+ shell.c sqlite3.c -ldl -lm -lreadline -lncurses -o sqlite3
+</pre></blockquote>
+
+<p>The key point is this: Building the CLI consists of compiling
+together two C-language files. The <b>shell.c</b> file contains the
+definition of the entry point and the user input loop and the
+SQLite amalgamation <b>sqlite3.c</b> contains the complete implementation
+of the SQLite library.</p>
+
+<a name="tcl"></a>
+
+<h1 id="compiling_the_tcl_interface"><span>3. </span>Compiling The TCL Interface</h1>
+
+<p>The TCL interface for SQLite is a small module that is added into
+the regular amalgamation. The result is a new amalgamated source
+file called "<b>tclsqlite3.c</b>". This single source file is all that
+is needed to generate a shared library that can be loaded into a
+standard
+<a href="http://wiki.tcl-lang.org/2541">tclsh</a> or
+<a href="http://wiki.tcl-lang.org/2364">wish</a> using the
+<a href="http://wiki.tcl-lang.org/9830">TCL load command</a>, or to generate a
+standalone tclsh that comes with SQLite built in.
+A copy of the tcl amalgamation
+is included on the <a href="download.html">download page</a> as a file in the <a href="download.html">TEA tarball</a>.</p>
+
+<p>To generate a TCL-loadable library for SQLite on Linux, the following
+command will suffice:</p>
+
+<blockquote><pre>
+gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl
+</pre></blockquote>
+
+<p>Building shared libraries for Mac OS X and Windows is not nearly so simple,
+unfortunately. For those platforms it is best to use the configure script
+and makefile that is included with the <a href="download.html">TEA tarball</a>.</p>
+
+<p>To generate a standalone tclsh that is statically linked with SQLite,
+use this compiler invocation:</p>
+
+<blockquote><pre>
+gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm
+</pre></blockquote>
+
+<p>The trick here is the -DTCLSH=1 option. The TCL interface module for
+SQLite includes a <b>main()</b> procedure that initializes a TCL interpreter
+and enters a command-line loop when it is compiled with -DTCLSH=1. The
+command above works on both Linux and Mac OS X, though one may need to adjust
+the library options depending on the platform and which version of TCL one
+is linking against.</p>
+
+<a name="amal"></a>
+
+<h1 id="building_the_amalgamation"><span>4. </span>Building The Amalgamation</h1>
+
+<p>The versions of the SQLite amalgamation that are supplied on the
+<a href="download.html">download page</a> are normally adequate for most users. However, some
+projects may want or need to build their own amalgamations. A common
+reason for building a custom amalgamation is in order to use certain
+<a href="compile.html">compile-time options</a> to customize the SQLite library. Recall that
+the SQLite amalgamation contains a lot of C-code that is generated by
+auxiliary programs and scripts. Many of the compile-time
+options effect this generated code and must be supplied to the code
+generators before the amalgamation is assembled. The set of
+compile-time options that must be passed into the code generators can
+vary from one release of SQLite to the next, but at the time of this
+writing (circa SQLite 3.6.20, 2009-11-04) the set of options that must
+be known by the code generators includes:</p>
+
+<ul>
+<li><a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a>
+</li><li><a href="compile.html#omit_altertable">SQLITE_OMIT_ALTERTABLE</a>
+</li><li><a href="compile.html#omit_analyze">SQLITE_OMIT_ANALYZE</a>
+</li><li><a href="compile.html#omit_attach">SQLITE_OMIT_ATTACH</a>
+</li><li><a href="compile.html#omit_autoincrement">SQLITE_OMIT_AUTOINCREMENT</a>
+</li><li><a href="compile.html#omit_cast">SQLITE_OMIT_CAST</a>
+</li><li><a href="compile.html#omit_compound_select">SQLITE_OMIT_COMPOUND_SELECT</a>
+</li><li><a href="compile.html#omit_explain">SQLITE_OMIT_EXPLAIN</a>
+</li><li><a href="compile.html#omit_foreign_key">SQLITE_OMIT_FOREIGN_KEY</a>
+</li><li><a href="compile.html#omit_pragma">SQLITE_OMIT_PRAGMA</a>
+</li><li><a href="compile.html#omit_reindex">SQLITE_OMIT_REINDEX</a>
+</li><li><a href="compile.html#omit_subquery">SQLITE_OMIT_SUBQUERY</a>
+</li><li><a href="compile.html#omit_tempdb">SQLITE_OMIT_TEMPDB</a>
+</li><li><a href="compile.html#omit_trigger">SQLITE_OMIT_TRIGGER</a>
+</li><li><a href="compile.html#omit_vacuum">SQLITE_OMIT_VACUUM</a>
+</li><li><a href="compile.html#omit_view">SQLITE_OMIT_VIEW</a>
+</li><li><a href="compile.html#omit_virtualtable">SQLITE_OMIT_VIRTUALTABLE</a>
+</li></ul>
+
+<p>To build a custom amalgamation, first download the original individual
+source files onto a unix or unix-like development platform.
+Be sure to get the original source
+files not the "preprocessed source files". One can obtain the complete
+set of original source files either from the <a href="download.html">download page</a> or directly
+from the <a href="http://www.sqlite.org/src">configuration management system</a>.</p>
+
+<p>Suppose the SQLite source tree is stored in a directory named "sqlite".
+Plan to construct the amalgamation in a parallel directory named (for
+example) "bld". First construct an appropriate Makefile by either
+running the configure script at the top of the SQLite source tree, or by
+making a copy of one of the template Makefiles at the top of the source tree.
+Then hand edit this Makefile to include the desired compile-time options.
+Finally run:</p>
+
+<blockquote><pre>
+make sqlite3.c
+</pre></blockquote>
+
+<p>Or on Windows with MSVC:
+
+</p><blockquote><pre>
+nmake /f Makefile.msc sqlite3.c
+</pre></blockquote>
+
+<p>The "sqlite3.c" make target will automatically construct the regular
+"<b>sqlite3.c</b>" amalgamation source file, its header file
+"<b>sqlite3.h</b>", and the "<b>tclsqlite3.c</b>" amalgamation source
+file that includes the TCL interface.
+Afterwards, the needed files can be copied into project directories and
+compiled according to the procedures outlined above.</p>
+
+<a name="dll"></a>
+
+<h1 id="building_a_windows_dll"><span>5. </span>Building A Windows DLL</h1>
+
+<p>To build a DLL of SQLite for use in Windows, first acquire the
+appropriate amalgamated source code files, sqlite3.c and sqlite3.h.
+These can either
+be downloaded from the <a href="http://www.sqlite.org/download.html">SQLite website</a>
+or custom generated from sources as shown above.</p>
+
+<p>With source code files in the working directory, a DLL
+can be generated using MSVC with the following command:
+
+</p><blockquote><pre>
+cl sqlite3.c -link -dll -out:sqlite3.dll
+</pre></blockquote>
+
+<p>The above command should be run from the MSVC Native Tools Command
+Prompt. If you have MSVC installed on your machine, you probably
+have multiple versions of this Command Prompt, for native builds
+for x86 and x64, and possibly also for cross-compiling to ARM.
+Use the appropriate Command Prompt depending on the desired DLL.</p>
+
+<p>If using the MinGW compiler, the command-line is this:
+
+</p><blockquote><pre>
+gcc -shared sqlite3.c -o sqlite3.dll
+</pre></blockquote>
+
+<p>Note that MinGW generates 32-bit DLLs only. There is a separate
+MinGW64 project that can be used to generate 64-bit DLLs. Presumably
+the command-line syntax is similar.
+Also note that recent versions of MSVC generate DLLs that will not work
+on WinXP and earlier versions of Windows. So for maximum compatibility
+of your generated DLL, MinGW is recommended. A good rule-of-thumb
+is to generate 32-bit DLLs using MinGW and 64-bit DLLs using MSVC.
+
+</p><p>In most cases, you will want to supplement the basic commands above with
+<a href="compile.html">compile-time options</a> appropriate for your application. Commonly used
+compile-time options include:
+
+</p><ul>
+<li><p><b>-Os</b> - Optimize for size.
+Make the DLL as small as possible.</p>
+
+</li><li><p><b>-O2</b> - Optimize for speed. This will make the DLL larger by
+unrolling loops and inlining functions.</p>
+
+</li><li><p><b>-DSQLITE_ENABLE_FTS4</b> -
+Include the <a href="fts3.html">full-text search</a> engine code in SQLite.
+
+</p></li><li><p><b>-DSQLITE_ENABLE_RTREE</b> - Include the <a href="rtree.html">R-Tree extension</a>.
+
+</p></li><li><p><b>-DSQLITE_ENABLE_COLUMN_METADATA</b> -
+This enables some extra APIs that are required by some common systems,
+including Ruby-on-Rails.
+</p></li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/howtocompile.in?m=7a488b0570e1db92a">2021-10-12 03:48:52</a> UTC </small></i></p>
+
diff --git a/www/howtocorrupt.html b/www/howtocorrupt.html
new file mode 100644
index 0000000..56d9a29
--- /dev/null
+++ b/www/howtocorrupt.html
@@ -0,0 +1,813 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>How To Corrupt An SQLite Database File</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+How To Corrupt An SQLite Database File
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#_file_overwrite_by_a_rogue_thread_or_process">1. File overwrite by a rogue thread or process</a></div>
+<div class="fancy-toc2"><a href="#_continuing_to_use_a_file_descriptor_after_it_has_been_closed">1.1. Continuing to use a file descriptor after it has been closed</a></div>
+<div class="fancy-toc2"><a href="#_backup_or_restore_while_a_transaction_is_active">1.2. Backup or restore while a transaction is active</a></div>
+<div class="fancy-toc2"><a href="#_deleting_a_hot_journal">1.3. Deleting a hot journal</a></div>
+<div class="fancy-toc2"><a href="#_mispairing_database_files_and_hot_journals_">1.4. Mispairing database files and hot journals </a></div>
+<div class="fancy-toc1"><a href="#_file_locking_problems">2. File locking problems</a></div>
+<div class="fancy-toc2"><a href="#_filesystems_with_broken_or_missing_lock_implementations">2.1. Filesystems with broken or missing lock implementations</a></div>
+<div class="fancy-toc2"><a href="#_posix_advisory_locks_canceled_by_a_separate_thread_doing_close_">2.2. Posix advisory locks canceled by a separate thread doing close()</a></div>
+<div class="fancy-toc3"><a href="#multiple_copies_of_sqlite_linked_into_the_same_application">2.2.1. Multiple copies of SQLite linked into the same application</a></div>
+<div class="fancy-toc2"><a href="#_two_processes_using_different_locking_protocols">2.3. Two processes using different locking protocols</a></div>
+<div class="fancy-toc2"><a href="#_unlinking_or_renaming_a_database_file_while_in_use">2.4. Unlinking or renaming a database file while in use</a></div>
+<div class="fancy-toc2"><a href="#_multiple_links_to_the_same_file">2.5. Multiple links to the same file</a></div>
+<div class="fancy-toc2"><a href="#_carrying_an_open_database_connection_across_a_fork_">2.6. Carrying an open database connection across a fork() </a></div>
+<div class="fancy-toc1"><a href="#_failure_to_sync">3. Failure to sync</a></div>
+<div class="fancy-toc2"><a href="#_disk_drives_that_do_not_honor_sync_requests">3.1. Disk drives that do not honor sync requests</a></div>
+<div class="fancy-toc2"><a href="#_disabling_sync_using_pragmas">3.2. Disabling sync using PRAGMAs</a></div>
+<div class="fancy-toc1"><a href="#_disk_drive_and_flash_memory_failures">4. Disk Drive and Flash Memory Failures</a></div>
+<div class="fancy-toc2"><a href="#_non_powersafe_flash_memory_controllers">4.1. Non-powersafe flash memory controllers</a></div>
+<div class="fancy-toc2"><a href="#_fake_capacity_usb_sticks">4.2. Fake capacity USB sticks</a></div>
+<div class="fancy-toc1"><a href="#_memory_corruption">5. Memory corruption</a></div>
+<div class="fancy-toc1"><a href="#_other_operating_system_problems">6. Other operating system problems</a></div>
+<div class="fancy-toc2"><a href="#_linux_threads">6.1. Linux Threads</a></div>
+<div class="fancy-toc2"><a href="#_failures_of_mmap_on_qnx">6.2. Failures of mmap() on QNX</a></div>
+<div class="fancy-toc2"><a href="#_filesystem_corruption">6.3. Filesystem Corruption</a></div>
+<div class="fancy-toc1"><a href="#sqlite_configuration_errors">7. SQLite Configuration Errors</a></div>
+<div class="fancy-toc1"><a href="#_bugs_in_sqlite">8. Bugs in SQLite</a></div>
+<div class="fancy-toc2"><a href="#_false_corruption_reports_due_to_database_shrinkage">8.1. False corruption reports due to database shrinkage</a></div>
+<div class="fancy-toc2"><a href="#_corruption_following_switches_between_rollback_and_wal_modes">8.2. Corruption following switches between rollback and WAL modes</a></div>
+<div class="fancy-toc2"><a href="#_i_o_error_while_obtaining_a_lock_leads_to_corruption">8.3. I/O error while obtaining a lock leads to corruption</a></div>
+<div class="fancy-toc2"><a href="#_database_pages_leak_from_the_free_page_list">8.4. Database pages leak from the free page list</a></div>
+<div class="fancy-toc2"><a href="#_corruption_following_alternating_writes_from_3_6_and_3_7_">8.5. Corruption following alternating writes from 3.6 and 3.7.</a></div>
+<div class="fancy-toc2"><a href="#_race_condition_in_recovery_on_windows_system_">8.6. Race condition in recovery on windows system.</a></div>
+<div class="fancy-toc2"><a href="#_boundary_value_error_in_the_secondary_journals_used_by_nested_transactions_">8.7. Boundary value error in the secondary journals used by nested transactions.</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h2 style="margin-left:1.0em" notoc="1" id="overview"> Overview</h2>
+
+<p>An SQLite database is highly resistant to corruption.
+If an application crash, or an operating-system crash, or even
+a power failure occurs in the middle of a transaction, the partially
+written transaction should be automatically rolled back the next time
+the database file is accessed. The recovery process is fully
+automatic and does not require any action on the part of the user
+or the application.
+</p>
+
+<p>Though SQLite is resistant to database corruption, it is not immune.
+This document describes the various ways that an SQLite database might
+go corrupt.</p>
+
+<h1 id="_file_overwrite_by_a_rogue_thread_or_process"><span>1. </span> File overwrite by a rogue thread or process</h1>
+
+<p>SQLite database files are ordinary disk files.
+That means that any process can open the file and
+overwrite it with garbage. There is nothing that the SQLite
+library can do to defend against this.</p>
+
+<a name="stalefd"></a>
+
+<h2 id="_continuing_to_use_a_file_descriptor_after_it_has_been_closed"><span>1.1. </span> Continuing to use a file descriptor after it has been closed</h2>
+
+<p>We have seen multiple cases where a file descriptor was open on a file,
+then that file descriptor was closed and reopened on an SQLite database.
+Later, some other thread continued to write into the
+old file descriptor, not realizing that the original file had been closed
+already. But because the file descriptor had been reopened by SQLite,
+the information that was intended to go into the original file ended up
+overwriting parts of the SQLite database, leading to corruption of the
+database.</p>
+
+<p>One example of this occurred circa 2013-08-30 on the canonical repository
+for the <a href="http://www.fossil-scm.org/">Fossil DVCS</a>. In that event,
+file descriptor 2 (standard error) was being erroneously closed (by
+<a href="http://www.stunnel.org/">stunnel</a>, we suspect) prior to
+<a href="c3ref/open.html">sqlite3_open_v2()</a> so that the file descriptor used for the
+repository database file was 2. Later, an application
+bug caused an assert() statement to emit
+an error message by invoking write(2,...). But since file descriptor 2 was
+now connected to a database file, the error message
+overwrote part of the database. To guard against this kind of problem,
+SQLite <a href="releaselog/3_8_1.html">version 3.8.1</a> (2013-10-17)
+and later refuse to use low-numbered file descriptors
+for database files.
+(See <a href="compile.html#minimum_file_descriptor">SQLITE_MINIMUM_FILE_DESCRIPTOR</a> for additional information.)</p>
+
+<p>Another example of corruption caused by using a closed file
+descriptor was
+<a href="https://code.facebook.com/posts/313033472212144/debugging-file-corruption-on-ios/">reported by facebook engineers</a> in a blog post on 2014-08-12.</p>
+
+<p>Another example of this error was reported against
+<a href="https://fossil-scm.org/">Fossil</a> on 2019-07-11. A file descriptor would
+be opened for debugging output, but then closed and reopened by SQLite.
+But the debugging logic continued to write into the original file
+descriptor. See the
+<a href="https://fossil-scm.org/forum/forumpost/c51b9a1169">forum discussion</a>
+for the bug report and a link to the fix.
+
+</p><h2 id="_backup_or_restore_while_a_transaction_is_active"><span>1.2. </span> Backup or restore while a transaction is active</h2>
+
+<p>Systems that run automatic backups in the background might try to
+make a backup copy of an SQLite database file while it is in the middle
+of a transaction. The backup copy then might contain some old and some
+new content, and thus be corrupt.</p>
+
+<p>The best approach to make reliable backup copies of an SQLite database
+is to make use of the <a href="backup.html">backup API</a> that is part of the SQLite library.
+Failing that, it is safe to make a copy of an SQLite database file as long
+as there are no transactions in progress by any process. If the previous
+transaction failed, then it is important that any rollback journal
+(the <tt>*-journal</tt> file) or write-ahead log (the <tt>*-wal</tt> file)
+be copied together with the database file itself.</p>
+
+<a name="delhotjrnl"></a>
+
+<h2 id="_deleting_a_hot_journal"><span>1.3. </span> Deleting a hot journal</h2>
+
+<p>SQLite normally stores all content in a single disk file. However,
+while performing a transaction, information necessary to recover the
+database following a crash or power failure is stored in auxiliary
+journal files. Such journal files are described as <a href="fileformat2.html#hotjrnl">"hot"</a>.
+The journal files have the same name as the
+original database file with the addition
+of <tt>-journal</tt> or <tt>-wal</tt> suffix.</p>
+
+<p>SQLite must see the journal files in order to recover from a crash
+or power failure. If the <a href="fileformat2.html#hotjrnl">hot journal files</a> are moved, deleted, or renamed
+after a crash or power failure, then automatic recovery will not work
+and the database may go corrupt.</p>
+
+<p>Another manifestation of this problem is
+<a href="shortnames.html#db83corrupt">database corruption caused by inconsistent use of 8+3 filenames</a>.</p>
+
+<a name="roguejrnl"></a>
+
+<h2 id="_mispairing_database_files_and_hot_journals_"><span>1.4. </span> Mispairing database files and hot journals </h2>
+
+<p> The previous example is a specific case of a more general problem:
+The state of an SQLite database is controlled by both the
+database file and the journal file. In a quiescent state, the journal
+file does not exist and only the database file matters.
+But if the journal file does exist, it must be
+kept together with the database to avoid corruption. The following
+actions are all likely to lead to corruption:
+</p><ul>
+<li> Swapping journal files between two different databases.
+</li><li> Overwritting a journal file with a different journal file.
+</li><li> Moving a journal file from one database to another.
+</li><li> Copying a database file without also copying its journal.
+</li><li> Overwriting a database file with another without also
+ deleting any hot journal associated with the original database.
+</li></ul>
+
+<h1 id="_file_locking_problems"><span>2. </span> File locking problems</h1>
+
+<p>SQLite uses file locks on the database file, and on the
+<a href="wal.html">write-ahead log</a> or <a href="wal.html">WAL</a> file, to coordinate access between concurrent
+processes. Without coordination, two threads or processes might try
+to make incompatible changes to a database file at the same time,
+resulting in database corruption.</p>
+
+<h2 id="_filesystems_with_broken_or_missing_lock_implementations"><span>2.1. </span> Filesystems with broken or missing lock implementations</h2>
+
+<p>SQLite depends on the underlying filesystem to do locking as the
+documentation says it will. But some filesystems contain bugs in their
+locking logic such that the locks do not always behave as advertised.
+This is especially true of network filesystems and NFS in particular.
+If SQLite is used on a filesystem where the locking primitives contain
+bugs, and if two or more threads or processes try to access the same
+database at the same time, then database corruption might result.</p>
+
+<a name="posix_close_bug"></a>
+
+<h2 id="_posix_advisory_locks_canceled_by_a_separate_thread_doing_close_"><span>2.2. </span> Posix advisory locks canceled by a separate thread doing close()</h2>
+
+<p>The default locking mechanism used by SQLite on unix platforms is
+POSIX advisory locking. Unfortunately, POSIX advisory locking has design
+quirks that make it prone to misuse and failure. In particular, any
+thread in the same process with a file descriptor that is holding a POSIX
+advisory lock can override that lock using a different file descriptor.
+One particularly pernicious problem is that the <tt>close()</tt> system
+call will cancel all POSIX advisory locks on the same file for all
+threads and all file descriptors in the process.</p>
+
+<p>So, for example, suppose a multi-thread process has
+two or more threads with separate SQLite database connections to the
+same database file. Then a third thread comes along and wants to read
+something out of that same database file on its own, without using the
+SQLite library.
+The third thread does an <tt>open()</tt>, a <tt>read()</tt> and then
+a <tt>close()</tt>.
+One would think this would be harmless.
+But the <tt>close()</tt> system call caused the
+locks held on the database by all the other threads to be dropped. Those
+other threads have no way of knowing that their locks have just been
+trashed (POSIX does not provide any mechanism to determine this) and so
+they keep on running under the assumption that their locks are still valid.
+This can lead to two or more threads or processes trying to write to the
+database at the same time, resulting in database corruption.</p>
+
+<p>Note that it is perfectly safe for two or more threads to access the
+same SQLite database file using the SQLite library. The unix drivers for
+SQLite know about the POSIX advisory locking quirks and work around them.
+This problem only arises when a thread tries to bypass the SQLite library
+and read the database file directly.</p>
+
+<h3 id="multiple_copies_of_sqlite_linked_into_the_same_application"><span>2.2.1. </span>Multiple copies of SQLite linked into the same application</h3>
+
+<p>As pointed out in the previous paragraph, SQLite takes steps to work
+around the quirks of POSIX advisory locking. Part of that work-around involves
+keeping a global list (mutex protected) of open SQLite database files.
+But, if multiple copies of SQLite are linked into the same application,
+then there will be multiple instances of this global list.
+Database connections opened using one copy of the SQLite library
+will be unaware of database connections opened using the other copy,
+and will be unable to work around the POSIX advisory locking quirks.
+A <tt>close()</tt> operation on one connection might unknowingly
+clear the locks on a different database connection, leading to database
+corruption.</p>
+
+<p>The scenario above sounds far-fetched.
+But the SQLite developers are aware of at
+least one commercial product that was released
+with exactly this bug. The vendor came to the SQLite developers seeking
+help in tracking down some infrequent database corruption issues they were
+seeing on Linux and Mac. The problem was eventually traced to the
+fact that the application was linking against two separate copies of SQLite.
+The solution was to change the application build procedures to link against
+just one copy of SQLite instead of two.</p>
+
+<h2 id="_two_processes_using_different_locking_protocols"><span>2.3. </span> Two processes using different locking protocols</h2>
+
+<p>The default locking mechanism used by SQLite on unix platforms is
+POSIX advisory locking, but there are other options. By selecting an
+alternative <a href="c3ref/vfs.html">sqlite3_vfs</a> using the <a href="c3ref/open.html">sqlite3_open_v2()</a> interface, an
+application can make use of other locking protocols that might be more
+appropriate to certain filesystems. For example, dot-file locking might
+be select for use in an application that has to run on an NFS filesystem
+that does not support POSIX advisory locking.</p>
+
+<p>It is important that all connections to the same database file use
+the same locking protocol.
+If one application is using POSIX advisory locks and another application
+is using dot-file locking, then the two applications will not see each
+other's locks and will not be able to coordinate database access, possibly
+leading to database corruption.</p>
+
+<a name="unlink"></a>
+
+<h2 id="_unlinking_or_renaming_a_database_file_while_in_use"><span>2.4. </span> Unlinking or renaming a database file while in use</h2>
+
+<p>If two processes have open connections to the same database file and
+one process closes its connection, unlinks the file, then creates a new
+database file in its place with the same name and reopens the new file,
+then the two processes will be talking to different database files with
+the same name. (Note that this is only possible on Posix and Posix-like
+systems that permit a file to be unlinked while it is still open for
+reading and writing. Windows does not allow this to occur.)
+Since rollback journals and WAL files are based on the name of the database
+file, the two different database files will share the same rollback
+journal or WAL file. A rollback or recovery for one of the databases
+might use content from the other database, resulting in corruption.
+A similar problem occurs if a database file is renamed while it is
+opened and a new file is created with the old name.</p>
+
+<p>In other words, unlinking or renaming an open database file
+results in behavior that is undefined and probably undesirable.</p>
+
+<p>Beginning with SQLite <a href="releaselog/3_7_17.html">version 3.7.17</a> (2013-05-20),
+the unix OS interface will
+send SQLITE_WARNING messages to the <a href="errlog.html">error log</a> if a database file is unlinked
+while it is still in use.</p>
+
+<a name="alias"></a>
+
+<h2 id="_multiple_links_to_the_same_file"><span>2.5. </span> Multiple links to the same file</h2>
+
+<p>If a single database file has multiple links (either hard or soft links)
+then that is just another way of saying that the file has multiple names.
+If two or more processes open the database using different names, then
+they will use different rollback journals and WAL files. That means that
+if one process crashes, the other process will be unable to recover the
+transaction in progress because it will be looking in the wrong place
+for the appropriate journal.</p>
+
+<p>In other words, opening and using a database file that has two or
+more names results in behavior that is undefined and probably undesirable.</p>
+
+<p>Beginning with SQLite <a href="releaselog/3_7_17.html">version 3.7.17</a> (2013-05-20),
+the unix OS interface will
+send SQLITE_WARNING messages to the <a href="errlog.html">error log</a> if a database file has
+multiple hard links.</p>
+
+<p>Beginning with SQLite <a href="releaselog/3_10_0.html">version 3.10.0</a> (2016-01-06),
+the unix OS interface will
+attempt to resolve symbolic links and open the database file by its
+canonical name. Prior to version 3.10.0, opening a database file
+through a symbolic link was similar to opening a database file
+that had multiple hard links and resulted in undefined behavior.</p>
+
+<a name="fork"></a>
+
+<h2 id="_carrying_an_open_database_connection_across_a_fork_"><span>2.6. </span> Carrying an open database connection across a fork() </h2>
+
+<p> Do not open an SQLite database connection, then fork(), then try
+to use that database connection in the child process. All kinds of
+locking problems will result and you can easily end up with a corrupt
+database. SQLite is not designed to support that kind of behavior.
+Any database connection that is used in a child process must be opened
+in the child process, not inherited from the parent.
+
+</p><p> Do not even call <a href="c3ref/close.html">sqlite3_close()</a> on a database connection from a
+child process if the connection was opened in the parent. It is safe
+to close the underlying file descriptor, but the <a href="c3ref/close.html">sqlite3_close()</a>
+interface might invoke cleanup activities that will delete content out
+from under the parent, leading to errors and perhaps even database
+corruption.
+
+</p><h1 id="_failure_to_sync"><span>3. </span> Failure to sync</h1>
+
+<p>In order to guarantee that database files are always consistent, SQLite
+will occasionally ask the operating system to flush all pending writes to
+persistent storage then wait for that flush to complete. This is
+accomplished using the <tt>fsync()</tt> system call under unix and
+<tt>FlushFileBuffers()</tt> under Windows. We call this flush of
+pending writes a "sync".</p>
+
+<p>Actually, if one is only concerned with atomic and consistent writes and
+is willing to forego durable writes, the sync operation does not need
+to wait until the content is completely stored on persistent media. Instead,
+the sync operation can be thought of as an I/O barrier. As long as all
+writes that occur before the sync are completed before any write that happens
+after the sync, no database corruption will occur. If sync is operating as
+an I/O barrier and not as a true sync, then a power failure or system crash
+might cause one or more previously committed transactions to roll back
+(in violation of the "durable" property of "ACID") but the database will at
+least continue to be consistent, and that is what most people care about.</p>
+
+<h2 id="_disk_drives_that_do_not_honor_sync_requests"><span>3.1. </span> Disk drives that do not honor sync requests</h2>
+
+<p>Unfortunately, most consumer-grade mass storage devices lie about
+syncing. Disk drives will report that content is safely on persistent
+media as soon as it reaches the track buffer and before actually being
+written to oxide. This makes the disk drives seem to operate faster
+(which is vitally important to the manufacturer so that they can show
+good benchmark numbers in trade magazines). And in fairness, the lie
+normally causes no harm, as long as there is no power loss or hard reset
+prior to the track buffer actually being written to oxide. But if a
+power loss or hard reset does occur, and if that results in content that
+was written after a sync reaching oxide while content written before
+the sync is still in a track buffer, then database corruption can occur.</p>
+
+<p>USB flash memory sticks seem to be especially pernicious liars
+regarding sync requests. One can easily see this by committing a large
+transaction to an SQLite database on a USB memory stick. The COMMIT
+command will return relatively quickly, indicating that the memory stick
+has told the operating system and the operating system has told SQLite that
+all content is safely in persistent storage, and yet the LED on the end
+of the memory stick will continue flashing for several more seconds.
+Pulling out the memory stick while the LED is still flashing will frequently
+result in database corruption.</p>
+
+<p>Note that SQLite must believe whatever the operating system and hardware
+tell it about the status of sync requests. There is no way for SQLite to
+detect that either is lying and that writes might be occurring out-of-order.
+However, SQLite in <a href="wal.html">WAL mode</a> is far more forgiving of
+out-of-order writes than in the default rollback journal modes. In WAL
+mode, the only time that a failed sync operation can cause database corruption
+is during a <a href="wal.html#ckpt">checkpoint</a> operation. A sync failure during a COMMIT might
+result in loss of durability but not in a corrupt database file. Hence,
+one line of defense against database corruption due to failed sync operations
+is to use SQLite in WAL mode and to checkpoint as infrequently as possible.</p>
+
+<h2 id="_disabling_sync_using_pragmas"><span>3.2. </span> Disabling sync using PRAGMAs</h2>
+
+<p>The sync operations that SQLite performs to help ensure integrity
+can be disabled at run-time using the <a href="pragma.html#pragma_synchronous">synchronous pragma</a>. By setting
+PRAGMA synchronous=OFF, all sync operations are omitted. This makes
+SQLite seem to run faster, but it also allows the operating system to freely
+reorder writes, which could result in database corruption if a power failure
+or hard reset occurs prior to all content reaching persistent storage.</p>
+
+<p>For maximum reliability and for robustness against database corruption,
+SQLite should always be run with its default synchronous setting of FULL.</p>
+
+<a name="hardwarefault"></a>
+
+<h1 id="_disk_drive_and_flash_memory_failures"><span>4. </span> Disk Drive and Flash Memory Failures</h1>
+
+<p>An SQLite database can become corrupt if the file content changes
+due to a disk drive or flash memory failure. It is very rare, but disks
+will occasionally flip a bit in the middle of a sector.</p>
+
+<h2 id="_non_powersafe_flash_memory_controllers"><span>4.1. </span> Non-powersafe flash memory controllers</h2>
+
+<p>We are told that in some flash memory controllers the wear-leveling logic
+can cause random filesystem damage if power is interrupted during a write.
+This can manifest, for example, as random changes in the middle of a file
+that was not even open at the time of the power loss. So, for example,
+a device would be writing content into an MP3 file in flash memory when a
+power loss occurs, and that could result in an SQLite database being
+corrupted even though the database was not even in use at the time of the
+power loss.</p>
+
+<a name="fakeusb"></a>
+
+<h2 id="_fake_capacity_usb_sticks"><span>4.2. </span> Fake capacity USB sticks</h2>
+
+<p>There are many fraudulent USB sticks in circulation that report to have
+a high capacity (ex: 8GB) but are really only capable of storing a much
+smaller amount (ex: 1GB). Attempts to write on these devices will
+often result in unrelated files being overwritten. Any use of a fraudulent
+flash memory device can easily lead to database corruption, therefore.
+Internet searches such as "fake capacity usb" will turn up lots of
+disturbing information about this problem.
+
+</p><h1 id="_memory_corruption"><span>5. </span> Memory corruption</h1>
+
+<p>SQLite is a C-library that runs in the same address space as the
+application that it serves. That means that stray pointers, buffer
+overruns, heap corruption, or other malfunctions in the application can
+corrupt internal SQLite data structure and ultimately result in a
+corrupt database file. Normally these kinds of problems manifest themselves
+as segfaults prior to any database corruption occurring, but there have
+been instances where application code errors have caused SQLite to
+malfunction subtly so as to corrupt the database file rather than
+panicking.</p>
+
+<p>The memory corruption problem becomes more acute when
+using <a href="mmap.html">memory-mapped I/O</a>.
+When all or part of the database file is mapped into the application's
+address space, then a stray pointer that overwrites any part of that
+mapped space will immediately corrupt the database file, without
+requiring the application to do a subsequent write() system call.</p>
+
+<h1 id="_other_operating_system_problems"><span>6. </span> Other operating system problems</h1>
+
+<p>Sometimes operating systems will exhibit non-standard behavior which
+can lead to problems. Sometimes this non-standard behavior is deliberate,
+and sometimes it is a mistake in the implementation. But in any event,
+if the operating performs differently from they way SQLite expects it to
+perform, the possibility of database corruption exists.</p>
+
+<h2 id="_linux_threads"><span>6.1. </span> Linux Threads</h2>
+
+<p>Some older versions of Linux used the LinuxThreads library for thread
+support. LinuxThreads is similar to Pthreads, but is subtly different
+with respect to handling of POSIX advisory locks. SQLite versions
+2.2.3 through 3.6.23 recognized that LinuxThreads were being used at
+runtime and took appropriate action to work around the non-standard
+behavior of LinuxThreads. But most modern Linux implementations make
+use of the newer, and correct, NPTL implementation of Pthreads. Beginning
+with SQLite <a href="releaselog/3_7_0.html">version 3.7.0</a> (2010-07-21), the use of NPTL is assumed.
+No checks are
+made. Hence, recent versions of SQLite will subtly malfunction and may
+corrupt database files if used in multi-threaded application that run
+on older linux systems that make use of LinuxThreads.</p>
+
+<h2 id="_failures_of_mmap_on_qnx"><span>6.2. </span> Failures of mmap() on QNX</h2>
+
+<p>There exists some subtle problem with mmap() on QNX such that making
+a second mmap() call against a single file descriptor can cause
+the memory obtained from the first mmap() call to be zeroed. SQLite on
+unix uses mmap() to create a shared memory region for transaction
+coordination in <a href="wal.html">WAL mode</a>, and it will call mmap() multiple times
+for large transactions. The QNX mmap() has been demonstrated to corrupt
+database file under that scenario. QNX engineers are aware of this problem
+and are working on a solution; the problem may have already been fixed by
+the time you read this.</p>
+
+<p>When running on QNX, it is recommended that <a href="mmap.html">memory-mapped I/O</a> never
+be used. Furthermore, to use <a href="wal.html">WAL mode</a>, it is recommended that applications
+employ the <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a> in order to
+use <a href="wal.html#noshm">WAL without shared memory</a>.
+
+
+<a name="fscorruption"></a>
+
+</p><h2 id="_filesystem_corruption"><span>6.3. </span> Filesystem Corruption</h2>
+
+<p>Since SQLite databases are ordinary disk files, any malfunction in the
+filesystem can corrupt the database. Filesystems in modern operating systems
+are very reliable, but errors do still occur. For example, on 2013-10-01
+the SQLite database that holds the
+<a href="http://wiki.tcl-lang.org/">Wiki for Tcl/Tk</a> went corrupt a few days
+after the host computer was moved to a dodgy build of the (linux) kernel
+that had issues in the filesystem layer. In that event, the filesystem
+eventually became so badly corrupted that the machine was unusable, but
+the earliest symptom of trouble was the corrupted SQLite database.</p>
+
+<a name="cfgerr"></a>
+
+<h1 id="sqlite_configuration_errors"><span>7. </span>SQLite Configuration Errors</h1>
+
+<p>SQLite has many built-in protections against database corruption.
+But many of these protections can be disabled by configuration options.
+If protections are disabled, database corruption may occur.
+
+</p><p>The following are examples of disabling the built-in protection
+mechanisms of SQLite:
+
+</p><ul>
+<li><p>Setting <a href="pragma.html#pragma_synchronous">PRAGMA synchronous=OFF</a> can cause the database to
+go corrupt if there is an operating-system crash or power failure,
+though this setting is safe from damage due to application crashes.
+
+</p></li><li><p>Changing the <a href="pragma.html#pragma_schema_version">PRAGMA schema_version</a> while other database
+connections are open.
+
+</p></li><li><p>Using <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=OFF</a> or <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=MEMORY</a>
+and taking an application crash in the middle of a write transaction.
+
+</p></li><li><p>Setting <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a> and then changing the
+database schema using DML statements can render the database completely
+unreadable, if not done carefully.
+</p></li></ul>
+
+<h1 id="_bugs_in_sqlite"><span>8. </span> Bugs in SQLite</h1>
+
+<p>SQLite is <a href="testing.html">very carefully tested</a> to help ensure that it is
+as bug-free as possible. Among the many tests that are carried out for
+every SQLite version are tests that simulate power failures, I/O errors,
+and out-of-memory (OOM) errors and verify that no database corruption occurs
+during any of these events. SQLite is also field-proven with approximately
+two billion active deployments with no serious problems.</p>
+
+<p>Nevertheless, no software is 100% perfect. There have been a few
+historical bugs in SQLite (now fixed) that could cause database corruption.
+And there may be yet a few more that remain undiscovered. Because of the
+extensive testing and widespread use of SQLite, bugs that result in
+database corruption tend to be very obscure. The likelihood
+of an application encountering an SQLite bug is small. To illustrate this,
+an account is given below
+of all database-corruption bugs found in SQLite during the
+four-year period from 2009-04-01 to 2013-04-15.
+This account should give the reader an intuitive sense of the
+kinds of bugs in SQLite that manage to slip through testing procedures
+and make it into a release.</p>
+
+
+<h2 id="_false_corruption_reports_due_to_database_shrinkage"><span>8.1. </span> False corruption reports due to database shrinkage</h2>
+
+<p>If a database is written by SQLite version 3.7.0 or later and then
+written again by SQLite version 3.6.23 or earlier in such a way as to
+make the size of the database file decrease, then the next time that
+SQLite version 3.7.0 access the database file, it might report that the
+database file is corrupt. The database file is not really corrupt, however.
+Version 3.7.0 was simply being overly zealous in its corruption detection.</p>
+
+<p>The problem was fixed on 2011-02-20. The fix first appears in
+SQLite <a href="releaselog/3_7_6.html">version 3.7.6</a> (2011-04-12).</p>
+
+<h2 id="_corruption_following_switches_between_rollback_and_wal_modes"><span>8.2. </span> Corruption following switches between rollback and WAL modes</h2>
+
+<p>Repeatedly switching an SQLite database in and out of <a href="wal.html">WAL mode</a>
+and running the <a href="lang_vacuum.html">VACUUM</a> command in between switches, in one process or
+thread, can cause another process or thread that has the database file
+open to miss the fact that the database has changed. That second process
+or thread might then try to modify the database using a stale cache and
+cause database corruption.</p>
+
+<p>This problem was discovered during internal testing and has never been
+observed in the wild. The problem was fixed on 2011-01-27 and in version
+3.7.5.</p>
+
+<h2 id="_i_o_error_while_obtaining_a_lock_leads_to_corruption"><span>8.3. </span> I/O error while obtaining a lock leads to corruption</h2>
+
+<p>If the operating system returns an I/O error while attempting to obtain
+a certain lock on shared memory in <a href="wal.html">WAL mode</a> then SQLite might fail
+to reset its cache,
+which could lead to database corruption if subsequent writes are attempted.</p>
+
+<p>Note that this problem only occurs if the attempt to acquire the lock
+resulted in an I/O error. If the lock is simply not granted (because some
+other thread or process is already holding a conflicting lock) then no
+corruption will ever occur. We are not aware of any operating systems that
+will fail with an I/O error while attempting to get a file lock on shared
+memory. So this is a theoretical problem rather than a real problem.
+Needless to say, this problem has never been observed in the wild. The
+problem was discovered while doing stress testing of SQLite in a test
+harness that simulates I/O errors.</p>
+
+<p>This problem was fixed on 2010-09-20 for SQLite version 3.7.3.</p>
+
+<h2 id="_database_pages_leak_from_the_free_page_list"><span>8.4. </span> Database pages leak from the free page list</h2>
+
+<p>When content is deleted from an SQLite database, pages that are no
+longer used are added to a free list and are reused to hold content
+added by subsequent inserts. A bug in SQLite that was present in
+version 3.6.16 through 3.7.2 might cause pages to go missing out of
+the free list when <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> was used. This would not cause
+data loss. But it would result in the database file being larger than
+necessary. And it would cause the <a href="pragma.html#pragma_integrity_check">integrity_check pragma</a> to report
+pages missing from the free list.</p>
+
+<p>This problem was fixed on 2010-08-23 for SQLite version 3.7.2.</p>
+
+<h2 id="_corruption_following_alternating_writes_from_3_6_and_3_7_"><span>8.5. </span> Corruption following alternating writes from 3.6 and 3.7.</h2>
+
+<p>SQLite version 3.7.0 introduced a number of new enhancements to
+the SQLite database file format (such as but not limited to <a href="wal.html">WAL</a>).
+The 3.7.0 release was a shake-out release for these new features.
+We expected to find problems and were not disappointed.</p>
+
+<p>If a database were originally created using SQLite version 3.7.0,
+then written by SQLite version 3.6.23.1 such that the size of the database
+file increased, then written again by SQLite version 3.7.0, the database
+file could go corrupt.</p>
+
+<p>This problem was fixed on 2010-08-04 for SQLite version 3.7.1.</p>
+
+<h2 id="_race_condition_in_recovery_on_windows_system_"><span>8.6. </span> Race condition in recovery on windows system.</h2>
+
+<p>SQLite version 3.7.16.2 fixes a subtle race condition in the locking
+logic on Windows systems. When a database file is in need
+of recovery because the previous process writing to it crashed in the
+middle of a transaction and two or more processes try to open the
+that database at the same time, then the race condition might cause
+one of those processes to get a false indication that the recovery
+has already completed, allowing that process to continue using the
+database file without running recovery first. If that process writes
+to the file, then the file might go corrupt. This race condition
+had apparently existed in all prior versions of SQLite for Windows going
+back to 2004. But the race was very tight. Practically speaking, you
+need a fast multi-core machine in which you launch two processes to run
+recovery at the same moment on two separate cores. This defect was
+on Windows systems only and did not affect the posix OS interface.</p>
+
+<a name="svptbug"></a>
+
+<h2 id="_boundary_value_error_in_the_secondary_journals_used_by_nested_transactions_"><span>8.7. </span> Boundary value error in the secondary journals used by nested transactions.</h2>
+
+<p>When a nested transaction is started using <a href="lang_savepoint.html">SAVEPOINT</a>, SQLite uses
+a secondary rollback journal to track the changes for the nested
+transaction, in case the inner transaction needs to be rolled back. Secondary
+journals are not involved in protecting the database from corruption due
+to program crashes or power outages. The secondary journals only come into
+play when rolling back an inner transaction of a nested transaction.
+
+</p><p>These secondary journals can be held either in memory or as temporary
+files on disk. The default behavior is to store them on disk. But that
+can be changed using the <a href="compile.html#temp_store">-DSQLITE_TEMP_STORE</a> compile-time option,
+or at run-time using the <a href="pragma.html#pragma_temp_store">PRAGMA temp_store</a> statement. The bug
+only arises when secondary journals are held in memory.
+
+</p><p>In SQLite <a href="releaselog/3_35_0.html">version 3.35.0</a> (2021-03-12), a new optimization was
+added so that when SQLite is holding secondary journals in memory,
+less memory will be used. Unfortunately, an boundary check in
+the new logic was coded incorrectly.
+What should have been a "&lt;" operator was coded as "&lt;=". This
+error might cause the secondary journal to enter an inconsistent state
+if it is ever rolled back. If additional changes are made and the
+outer transaction eventually commits, the database might be left in
+an inconsistent state.
+
+</p><p>This problem was discovered by an
+<a href="https://sqlite.org/forum/forumpost/b03d86f9516cb3a2">independent researcher</a>
+who was attempting to find bugs in SQLite using a fuzzer. The fuzzer found a
+failure in an <a href="assert.html">assert() statement</a> that is used
+to help verify the internal state of the secondary journal. The bug was a
+sufficiently obscure corner-case that it might have gone unnoticed for many
+years, had it not been for the intensive use of assert() statements in SQLite,
+the persistence and tenacity of the security researchers, and their
+customized state-of-the-art fuzzer.
+
+</p><p>This problem was <a href="https://www.sqlite.org/src/info/73c2b50211d3ae26">fixed</a>
+in <a href="releaselog/3_37_2.html">version 3.37.2</a> (2022-01-06).
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/howtocorrupt.in?m=015e9d7d1a173fcf1">2022-02-12 22:18:19</a> UTC </small></i></p>
+
diff --git a/www/hp1.html b/www/hp1.html
new file mode 100644
index 0000000..5b0f877
--- /dev/null
+++ b/www/hp1.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Javascript Required</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<b>Note:</b>
+The hyperlinks on the download page only work if you have Javascript
+enabled in your web browser.
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/hp1.in?m=d6345b673622d0e72">2013-08-29 16:19:32</a> UTC </small></i></p>
+
diff --git a/www/images/2005osaward.gif b/www/images/2005osaward.gif
new file mode 100644
index 0000000..fa6d7d7
--- /dev/null
+++ b/www/images/2005osaward.gif
Binary files differ
diff --git a/www/images/SQLite.gif b/www/images/SQLite.gif
new file mode 100644
index 0000000..5ec05b0
--- /dev/null
+++ b/www/images/SQLite.gif
Binary files differ
diff --git a/www/images/SQLite_big.gif b/www/images/SQLite_big.gif
new file mode 100644
index 0000000..dc9e6a0
--- /dev/null
+++ b/www/images/SQLite_big.gif
Binary files differ
diff --git a/www/images/ac/commit-0.gif b/www/images/ac/commit-0.gif
new file mode 100644
index 0000000..1e96325
--- /dev/null
+++ b/www/images/ac/commit-0.gif
Binary files differ
diff --git a/www/images/ac/commit-1.gif b/www/images/ac/commit-1.gif
new file mode 100644
index 0000000..b54e98a
--- /dev/null
+++ b/www/images/ac/commit-1.gif
Binary files differ
diff --git a/www/images/ac/commit-2.gif b/www/images/ac/commit-2.gif
new file mode 100644
index 0000000..340e432
--- /dev/null
+++ b/www/images/ac/commit-2.gif
Binary files differ
diff --git a/www/images/ac/commit-3.gif b/www/images/ac/commit-3.gif
new file mode 100644
index 0000000..2c5ce7e
--- /dev/null
+++ b/www/images/ac/commit-3.gif
Binary files differ
diff --git a/www/images/ac/commit-4.gif b/www/images/ac/commit-4.gif
new file mode 100644
index 0000000..99a34db
--- /dev/null
+++ b/www/images/ac/commit-4.gif
Binary files differ
diff --git a/www/images/ac/commit-5.gif b/www/images/ac/commit-5.gif
new file mode 100644
index 0000000..c9fa966
--- /dev/null
+++ b/www/images/ac/commit-5.gif
Binary files differ
diff --git a/www/images/ac/commit-6.gif b/www/images/ac/commit-6.gif
new file mode 100644
index 0000000..0e2f89a
--- /dev/null
+++ b/www/images/ac/commit-6.gif
Binary files differ
diff --git a/www/images/ac/commit-7.gif b/www/images/ac/commit-7.gif
new file mode 100644
index 0000000..68b934d
--- /dev/null
+++ b/www/images/ac/commit-7.gif
Binary files differ
diff --git a/www/images/ac/commit-8.gif b/www/images/ac/commit-8.gif
new file mode 100644
index 0000000..19a2a21
--- /dev/null
+++ b/www/images/ac/commit-8.gif
Binary files differ
diff --git a/www/images/ac/commit-9.gif b/www/images/ac/commit-9.gif
new file mode 100644
index 0000000..d7247b6
--- /dev/null
+++ b/www/images/ac/commit-9.gif
Binary files differ
diff --git a/www/images/ac/commit-A.gif b/www/images/ac/commit-A.gif
new file mode 100644
index 0000000..1b5286d
--- /dev/null
+++ b/www/images/ac/commit-A.gif
Binary files differ
diff --git a/www/images/ac/commit-B.gif b/www/images/ac/commit-B.gif
new file mode 100644
index 0000000..5a98c0d
--- /dev/null
+++ b/www/images/ac/commit-B.gif
Binary files differ
diff --git a/www/images/ac/multi-0.gif b/www/images/ac/multi-0.gif
new file mode 100644
index 0000000..9f1d225
--- /dev/null
+++ b/www/images/ac/multi-0.gif
Binary files differ
diff --git a/www/images/ac/multi-1.gif b/www/images/ac/multi-1.gif
new file mode 100644
index 0000000..e869778
--- /dev/null
+++ b/www/images/ac/multi-1.gif
Binary files differ
diff --git a/www/images/ac/multi-2.gif b/www/images/ac/multi-2.gif
new file mode 100644
index 0000000..c668d77
--- /dev/null
+++ b/www/images/ac/multi-2.gif
Binary files differ
diff --git a/www/images/ac/multi-3.gif b/www/images/ac/multi-3.gif
new file mode 100644
index 0000000..1b49103
--- /dev/null
+++ b/www/images/ac/multi-3.gif
Binary files differ
diff --git a/www/images/ac/multi-4.gif b/www/images/ac/multi-4.gif
new file mode 100644
index 0000000..9881ab8
--- /dev/null
+++ b/www/images/ac/multi-4.gif
Binary files differ
diff --git a/www/images/ac/multi-5.gif b/www/images/ac/multi-5.gif
new file mode 100644
index 0000000..51181c2
--- /dev/null
+++ b/www/images/ac/multi-5.gif
Binary files differ
diff --git a/www/images/ac/rollback-0.gif b/www/images/ac/rollback-0.gif
new file mode 100644
index 0000000..cfbdc45
--- /dev/null
+++ b/www/images/ac/rollback-0.gif
Binary files differ
diff --git a/www/images/ac/rollback-1.gif b/www/images/ac/rollback-1.gif
new file mode 100644
index 0000000..d698d58
--- /dev/null
+++ b/www/images/ac/rollback-1.gif
Binary files differ
diff --git a/www/images/ac/rollback-2.gif b/www/images/ac/rollback-2.gif
new file mode 100644
index 0000000..43d3954
--- /dev/null
+++ b/www/images/ac/rollback-2.gif
Binary files differ
diff --git a/www/images/ac/rollback-3.gif b/www/images/ac/rollback-3.gif
new file mode 100644
index 0000000..fab3142
--- /dev/null
+++ b/www/images/ac/rollback-3.gif
Binary files differ
diff --git a/www/images/ac/rollback-4.gif b/www/images/ac/rollback-4.gif
new file mode 100644
index 0000000..fed74d4
--- /dev/null
+++ b/www/images/ac/rollback-4.gif
Binary files differ
diff --git a/www/images/ac/rollback-5.gif b/www/images/ac/rollback-5.gif
new file mode 100644
index 0000000..1a5f79e
--- /dev/null
+++ b/www/images/ac/rollback-5.gif
Binary files differ
diff --git a/www/images/apple-touch-icon.png b/www/images/apple-touch-icon.png
new file mode 100644
index 0000000..3d4a389
--- /dev/null
+++ b/www/images/apple-touch-icon.png
Binary files differ
diff --git a/www/images/books/aditya.jpg b/www/images/books/aditya.jpg
new file mode 100644
index 0000000..d7b695e
--- /dev/null
+++ b/www/images/books/aditya.jpg
Binary files differ
diff --git a/www/images/books/darocha2016.jpg b/www/images/books/darocha2016.jpg
new file mode 100644
index 0000000..26319cf
--- /dev/null
+++ b/www/images/books/darocha2016.jpg
Binary files differ
diff --git a/www/images/books/das.jpg b/www/images/books/das.jpg
new file mode 100644
index 0000000..a45dae5
--- /dev/null
+++ b/www/images/books/das.jpg
Binary files differ
diff --git a/www/images/books/droessler.jpg b/www/images/books/droessler.jpg
new file mode 100644
index 0000000..ead2e3b
--- /dev/null
+++ b/www/images/books/droessler.jpg
Binary files differ
diff --git a/www/images/books/haldar.gif b/www/images/books/haldar.gif
new file mode 100644
index 0000000..e9b3fe2
--- /dev/null
+++ b/www/images/books/haldar.gif
Binary files differ
diff --git a/www/images/books/haldar2.jpg b/www/images/books/haldar2.jpg
new file mode 100644
index 0000000..ec8a931
--- /dev/null
+++ b/www/images/books/haldar2.jpg
Binary files differ
diff --git a/www/images/books/kreibich.gif b/www/images/books/kreibich.gif
new file mode 100644
index 0000000..3411942
--- /dev/null
+++ b/www/images/books/kreibich.gif
Binary files differ
diff --git a/www/images/books/newman.jpg b/www/images/books/newman.jpg
new file mode 100644
index 0000000..2d6a8e7
--- /dev/null
+++ b/www/images/books/newman.jpg
Binary files differ
diff --git a/www/images/books/nishizawa2.jpg b/www/images/books/nishizawa2.jpg
new file mode 100644
index 0000000..6f80117
--- /dev/null
+++ b/www/images/books/nishizawa2.jpg
Binary files differ
diff --git a/www/images/books/owens.jpg b/www/images/books/owens.jpg
new file mode 100644
index 0000000..e9638c3
--- /dev/null
+++ b/www/images/books/owens.jpg
Binary files differ
diff --git a/www/images/books/sanderson2018.jpg b/www/images/books/sanderson2018.jpg
new file mode 100644
index 0000000..d9a7186
--- /dev/null
+++ b/www/images/books/sanderson2018.jpg
Binary files differ
diff --git a/www/images/books/symbiansql.jpg b/www/images/books/symbiansql.jpg
new file mode 100644
index 0000000..8b5b7ff
--- /dev/null
+++ b/www/images/books/symbiansql.jpg
Binary files differ
diff --git a/www/images/books/vanderLans.jpg b/www/images/books/vanderLans.jpg
new file mode 100644
index 0000000..45a306d
--- /dev/null
+++ b/www/images/books/vanderLans.jpg
Binary files differ
diff --git a/www/images/btreemodule_balance_deeper.svg b/www/images/btreemodule_balance_deeper.svg
new file mode 100644
index 0000000..df90d0f
--- /dev/null
+++ b/www/images/btreemodule_balance_deeper.svg
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="900"
+ height="195"
+ id="svg2553"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="btreemodule_balance_deeper.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs2555">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path3355"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2561" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.41"
+ inkscape:cx="456.9143"
+ inkscape:cy="2.6849747"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:snap-global="true"
+ inkscape:window-width="1514"
+ inkscape:window-height="972"
+ inkscape:window-x="88"
+ inkscape:window-y="14">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3339"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2558">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(78.807861,-42.225464)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3337"
+ width="129.91663"
+ height="19.862286"
+ x="430.08337"
+ y="66.725464" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="609.81812"
+ y="106.38181"
+ id="text3343"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3345"
+ x="609.81812"
+ y="106.38181"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Right-child pointer</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 559.90149,86.519512 L 569.90149,126.51951"
+ id="path3347"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4127"
+ width="129.91663"
+ height="19.862286"
+ x="509.90149"
+ y="136.5195" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 529.81812,166.38181 L 519.81812,206.3818"
+ id="path4129"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 569.81812,166.3818 L 569.81812,206.3818"
+ id="path4131"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 609.81812,166.38181 L 619.81812,206.3818"
+ id="path4133"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="499.81812"
+ y="226.38177"
+ id="text4135"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4137"
+ x="499.81812"
+ y="226.38177"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Rest of Tree Content</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="401.19214"
+ y="57.225464"
+ id="text4143"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4145"
+ x="401.19214"
+ y="57.225464"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"> Root page of b-tree</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 604.81812,101.3818 L 569.81812,101.3818 L 569.81812,101.3818"
+ id="path4147"
+ sodipodi:nodetypes="ccc" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4157"
+ width="129.91663"
+ height="19.862286"
+ x="101.27551"
+ y="67.225464" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 121.19214,97.087749 L 111.19214,137.08774"
+ id="path4159"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 161.19214,97.087739 L 161.19214,137.08774"
+ id="path4161"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 201.19214,97.087749 L 211.19214,137.08774"
+ id="path4163"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="91.192139"
+ y="157.08774"
+ id="text4165"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4167"
+ x="91.192139"
+ y="157.08774"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Rest of Tree Content </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="91.192139"
+ y="57.087742"
+ id="text4169"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4171"
+ x="91.192139"
+ y="57.087742"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Root page of b-tree</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 371.69214,37.225464 L 371.69214,237.22546"
+ id="path4219" />
+ </g>
+</svg>
diff --git a/www/images/btreemodule_balance_quick.svg b/www/images/btreemodule_balance_quick.svg
new file mode 100644
index 0000000..15fe84c
--- /dev/null
+++ b/www/images/btreemodule_balance_quick.svg
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="900"
+ height="291"
+ id="svg4229"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="btreemodule_balance_quick.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs4231">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path3355"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective4237" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.3995495"
+ inkscape:cx="437.21501"
+ inkscape:cy="72.929777"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1449"
+ inkscape:window-height="939"
+ inkscape:window-x="106"
+ inkscape:window-y="57">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4239"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata4234">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-30.786133,-51.862183)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3337"
+ width="129.91663"
+ height="19.862286"
+ x="140.86951"
+ y="153.46631" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="260.78613"
+ y="313.32861"
+ id="text3343"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3345"
+ x="260.78613"
+ y="313.32861"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Leaf page</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 270.78614,173.3286 L 280.78614,213.3286"
+ id="path3347"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 160.78614,183.32861 L 150.78614,223.3286"
+ id="path4129"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 200.78614,183.3286 L 200.78614,223.3286"
+ id="path4131"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="110.78614"
+ y="243.3286"
+ id="text4135"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4137"
+ x="110.78614"
+ y="243.3286"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Other leaf pages</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 300.78614,153.3286 L 280.78614,183.3286 L 280.78614,183.3286"
+ id="path4147"
+ sodipodi:nodetypes="ccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="300.78613"
+ y="143.3286"
+ id="text4263"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4265"
+ x="300.78613"
+ y="143.3286"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Right-child pointer</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 300.78614,293.3286 L 320.78614,253.3286"
+ id="path4267" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 130.78614,103.3286 L 140.78614,143.3286"
+ id="path4269"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="120.78614"
+ y="93.328598"
+ id="text4271"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4273"
+ x="120.78614"
+ y="93.328598"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Right-child pointer</tspan></text>
+ <rect
+ style="fill:#40668b;fill-opacity:1;stroke:none;stroke-width:0.39586431;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4794"
+ width="19.758081"
+ height="20.466421"
+ x="401.02805"
+ y="202.86218" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 481.28613,52.362183 L 481.28613,342.36218"
+ id="path4816" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4818"
+ width="129.91663"
+ height="19.862286"
+ x="550.54425"
+ y="153.1376" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="600.70276"
+ y="322.99991"
+ id="text4820"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4822"
+ x="600.70276"
+ y="322.99991"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Leaf page</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 640.70276,182.99989 L 650.70276,222.99989"
+ id="path4824"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 550.70276,182.9999 L 540.70276,222.99989"
+ id="path4828"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 590.70276,182.99989 L 590.70276,222.99989"
+ id="path4830"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="500.70276"
+ y="242.99989"
+ id="text4832"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4834"
+ x="500.70276"
+ y="242.99989"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Other leaf pages</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 750.70276,152.99989 L 730.70276,182.99989 L 730.70276,182.99989"
+ id="path4836"
+ sodipodi:nodetypes="ccc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="710.46082"
+ y="142.99989"
+ id="text4838"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4840"
+ x="710.46082"
+ y="142.99989"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Right-child pointer</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 660.70276,302.99989 L 680.70276,262.99989"
+ id="path4842" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 540.46083,102.99988 L 550.46083,142.99988"
+ id="path4844"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="530.46088"
+ y="92.999886"
+ id="text4846"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4848"
+ x="530.46088"
+ y="92.999886"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Right-child pointer</tspan></text>
+ <rect
+ style="fill:#40668b;fill-opacity:1;stroke:none;stroke-width:0.39586431;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4850"
+ width="19.758081"
+ height="20.466421"
+ x="780.9447"
+ y="232.99989" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 680.70276,172.99989 L 800.70276,222.99989"
+ id="path4852"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="790.70276"
+ y="322.99991"
+ id="text4856"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4858"
+ x="790.70276"
+ y="322.99991"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">New Leaf page</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 820.70276,302.99989 L 820.70276,262.99989"
+ id="path4860"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="fill:#80a796;fill-opacity:1;stroke:none;stroke-width:20;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0"
+ id="rect2422"
+ width="120"
+ height="20"
+ x="271.57227"
+ y="223.8286" />
+ <rect
+ style="fill:#80a796;fill-opacity:1;stroke:none;stroke-width:20;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0"
+ id="rect3200"
+ width="120"
+ height="20"
+ x="631.48889"
+ y="233.49989" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4127"
+ width="129.91663"
+ height="19.862286"
+ x="270.78613"
+ y="223.46631" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4826"
+ width="129.91663"
+ height="19.862286"
+ x="630.78613"
+ y="232.99989" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4854"
+ width="129.91663"
+ height="19.862286"
+ x="780.78613"
+ y="232.99989" />
+ </g>
+</svg>
diff --git a/www/images/btreemodule_balance_shallower.svg b/www/images/btreemodule_balance_shallower.svg
new file mode 100644
index 0000000..18f5ba8
--- /dev/null
+++ b/www/images/btreemodule_balance_shallower.svg
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="900"
+ height="195"
+ id="svg2553"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="btreemodule_balance_shallower.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs2555">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path3355"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2561" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.41"
+ inkscape:cx="375.00663"
+ inkscape:cy="25.984926"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:snap-global="true"
+ inkscape:window-width="1514"
+ inkscape:window-height="972"
+ inkscape:window-x="114"
+ inkscape:window-y="18">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3339"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2558">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(78.807861,-42.225464)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3337"
+ width="129.91663"
+ height="19.862286"
+ x="31.457407"
+ y="67.56913" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="211.19215"
+ y="107.22547"
+ id="text3343"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3345"
+ x="211.19215"
+ y="107.22547"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Right-child pointer</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 161.27552,87.363187 L 171.27552,127.36319"
+ id="path3347"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4127"
+ width="129.91663"
+ height="19.862286"
+ x="111.27551"
+ y="137.36317" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 131.19215,167.22549 L 121.19215,207.22548"
+ id="path4129"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 171.19215,167.22548 L 171.19215,207.22548"
+ id="path4131"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 211.19215,167.22549 L 221.19215,207.22548"
+ id="path4133"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="101.19215"
+ y="227.22546"
+ id="text4135"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4137"
+ x="101.19215"
+ y="227.22546"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Rest of Tree Content</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="2.5661719"
+ y="58.06913"
+ id="text4143"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4145"
+ x="2.5661719"
+ y="58.06913"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"> Root page of b-tree</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 206.19215,102.22548 L 171.19215,102.22548 L 171.19215,102.22548"
+ id="path4147"
+ sodipodi:nodetypes="ccc" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4157"
+ width="129.91663"
+ height="19.862286"
+ x="451.19214"
+ y="67.363182" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 471.10877,97.225467 L 461.10877,137.22546"
+ id="path4159"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 511.10877,97.225457 L 511.10877,137.22546"
+ id="path4161"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 551.10877,97.225467 L 561.10877,137.22546"
+ id="path4163"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="441.10876"
+ y="157.22545"
+ id="text4165"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4167"
+ x="441.10876"
+ y="157.22545"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Rest of Tree Content </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="441.10876"
+ y="57.22546"
+ id="text4169"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4171"
+ x="441.10876"
+ y="57.22546"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Root page of b-tree</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 371.69214,37.225464 L 371.69214,237.22546"
+ id="path4219" />
+ </g>
+</svg>
diff --git a/www/images/btreemodule_delete1.svg b/www/images/btreemodule_delete1.svg
new file mode 100644
index 0000000..06fa608
--- /dev/null
+++ b/www/images/btreemodule_delete1.svg
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="900"
+ height="230.93105"
+ id="svg3406"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="btreemodule_delete1.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3408">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path3355"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective3414" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.41"
+ inkscape:cx="389.70903"
+ inkscape:cy="136.54327"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1533"
+ inkscape:window-height="864"
+ inkscape:window-x="70"
+ inkscape:window-y="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3416"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3411">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-119.5,-371.89945)">
+ <rect
+ style="fill:#80a796;fill-opacity:1;stroke:none;stroke-width:20;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0"
+ id="rect2422"
+ width="20.709229"
+ height="20"
+ x="378.62402"
+ y="402.96823" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3420"
+ width="129.91663"
+ height="19.862286"
+ x="299.41663"
+ y="462.96823" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 379.33326,422.96822 L 369.33326,452.96822"
+ id="path4129"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:8, 8;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 429.41663,482.83051 L 449.41663,532.83051"
+ id="path3429"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="fill:#40668b;fill-opacity:1;stroke:none;stroke-width:0.39586431;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4794"
+ width="19.758081"
+ height="20.466421"
+ x="499.41663"
+ y="542.83051" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3427"
+ width="129.91663"
+ height="19.862286"
+ x="389.5"
+ y="542.9682" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3337"
+ width="129.91663"
+ height="19.862286"
+ x="339.41663"
+ y="402.96823" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3963"
+ width="129.91663"
+ height="19.862286"
+ x="619.41663"
+ y="463.43472" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 699.33326,423.43467 L 689.33326,453.43467"
+ id="path3965"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-miterlimit:4;stroke-dasharray:8, 8;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 749.41663,483.29696 L 769.41663,533.29696"
+ id="path3967"
+ sodipodi:nodetypes="cc" />
+ <rect
+ style="fill:#40668b;fill-opacity:1;stroke:none;stroke-width:0.39586431;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3969"
+ width="19.758081"
+ height="20.466421"
+ x="699.74194"
+ y="402.83051" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3971"
+ width="129.91663"
+ height="19.862286"
+ x="709.5"
+ y="543.43463" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3973"
+ width="129.91663"
+ height="19.862286"
+ x="659.41663"
+ y="403.43472" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 570,372.39945 L 570,602.33049"
+ id="path4816" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="809.5"
+ y="432.83051"
+ id="text4856"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4858"
+ x="809.5"
+ y="432.83051"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">The blue cell has been </tspan><tspan
+ sodipodi:role="line"
+ x="809.5"
+ y="450.33051"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan4002">removed from leaf node</tspan><tspan
+ sodipodi:role="line"
+ x="809.5"
+ y="467.83051"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan4004">and used to replace the</tspan><tspan
+ sodipodi:role="line"
+ x="809.5"
+ y="485.33051"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan4006">cell deleted from the </tspan><tspan
+ sodipodi:role="line"
+ x="809.5"
+ y="502.83051"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan4008">internal node.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="129.5"
+ y="502.83051"
+ id="text4010"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="129.5"
+ y="502.83051"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan4020">The green cell is to be deleted from</tspan><tspan
+ sodipodi:role="line"
+ x="129.5"
+ y="520.33051"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan4033">an internal tree node. The blue cell</tspan><tspan
+ sodipodi:role="line"
+ x="129.5"
+ y="537.83051"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan4035">is the cell with the largest key in</tspan><tspan
+ sodipodi:role="line"
+ x="129.5"
+ y="555.33051"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan4037">the sub-tree headed by the </tspan><tspan
+ sodipodi:role="line"
+ x="129.5"
+ y="572.83051"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"
+ id="tspan4039">child-page of the green cell.</tspan></text>
+ </g>
+</svg>
diff --git a/www/images/btreemodule_overview.svg b/www/images/btreemodule_overview.svg
new file mode 100644
index 0000000..1922832
--- /dev/null
+++ b/www/images/btreemodule_overview.svg
@@ -0,0 +1,385 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="639.00098"
+ height="270.57031"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="btreemodule_overview.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4142136"
+ inkscape:cx="310.55643"
+ inkscape:cy="154.09115"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:snap-global="true"
+ inkscape:window-width="1584"
+ inkscape:window-height="1009"
+ inkscape:window-x="69"
+ inkscape:window-y="0"
+ showborder="false"
+ inkscape:showpageshadow="false"
+ borderlayer="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3161"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(157.25195,-171.72546)">
+ <rect
+ style="opacity:1;fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2387"
+ width="20.010523"
+ height="180.02304"
+ x="149.97864"
+ y="232.373" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="80"
+ y="182.36218"
+ id="text3167"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3169"
+ x="80"
+ y="182.36218"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">In-Memory Page Cache</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 150,262.36218 C 170,262.36218 170,262.36218 170,262.36218"
+ id="path3171" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 150,382.36218 C 170,382.36218 170,382.36218 170,382.36218"
+ id="path3173" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 150,352.36218 C 170,352.36218 170,352.36218 170,352.36218"
+ id="path3175" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 150,322.36218 C 170,322.36218 170,322.36218 170,322.36218"
+ id="path3177" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 150,292.36218 C 170,292.36218 170,292.36218 170,292.36218"
+ id="path3179" />
+ <rect
+ style="opacity:1;fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3181"
+ width="60.79163"
+ height="239.53868"
+ x="130.0336"
+ y="202.2571"
+ ry="15.556349" />
+ <g
+ id="g3275"
+ transform="matrix(0.625,0,0,0.6689418,54.258318,50.469681)"
+ style="stroke-width:1.54655659;stroke-miterlimit:4;stroke-dasharray:none">
+ <path
+ transform="matrix(1.5986945,0,0,1.9722665,-220.0992,-284.6418)"
+ d="M 420,287.36218 A 25,5 0 1 1 370,287.36218 A 25,5 0 1 1 420,287.36218 z"
+ sodipodi:ry="5"
+ sodipodi:rx="25"
+ sodipodi:cy="287.36218"
+ sodipodi:cx="395"
+ id="path3183"
+ style="opacity:1;fill:none;stroke:#000000;stroke-width:0.87096417;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.5982703,0,0,1.972289,-219.94212,-214.17107)"
+ d="M 420,287.36218 A 25,5 0 1 1 370,287.36218 A 25,5 0 1 1 420,287.36218 z"
+ sodipodi:ry="5"
+ sodipodi:rx="25"
+ sodipodi:cy="287.36218"
+ sodipodi:cx="395"
+ id="path3267"
+ style="opacity:1;fill:none;stroke:#000000;stroke-width:0.8710748;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="translate(81.374023,171.72546)"
+ id="path3271"
+ d="M 290,110.86475 L 290,180.86475"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.54655659;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="translate(81.374023,171.72546)"
+ id="path3273"
+ d="M 370,110.86475 L 370,180.86475"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.54655659;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ id="g3291"
+ transform="matrix(0.625,0,0,0.6689418,54.258318,167.27637)"
+ style="stroke-width:1.54655659;stroke-miterlimit:4;stroke-dasharray:none">
+ <path
+ transform="matrix(1.5986945,0,0,1.9722665,-220.0992,-284.6418)"
+ d="M 420,287.36218 A 25,5 0 1 1 370,287.36218 A 25,5 0 1 1 420,287.36218 z"
+ sodipodi:ry="5"
+ sodipodi:rx="25"
+ sodipodi:cy="287.36218"
+ sodipodi:cx="395"
+ id="path3293"
+ style="opacity:1;fill:none;stroke:#000000;stroke-width:0.87096417;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.5982703,0,0,1.972289,-219.94212,-214.17107)"
+ d="M 420,287.36218 A 25,5 0 1 1 370,287.36218 A 25,5 0 1 1 420,287.36218 z"
+ sodipodi:ry="5"
+ sodipodi:rx="25"
+ sodipodi:cy="287.36218"
+ sodipodi:cx="395"
+ id="path3295"
+ style="opacity:1;fill:none;stroke:#000000;stroke-width:0.8710748;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="translate(81.374023,171.72546)"
+ id="path3297"
+ d="M 290,110.86475 L 290,180.86475"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.54655659;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="translate(81.374023,171.72546)"
+ id="path3299"
+ d="M 370,110.86475 L 370,180.86475"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.54655659;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="351.37402"
+ y="272.59021"
+ id="text3301"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3303"
+ x="351.37402"
+ y="272.59021"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Journal File</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="351.37402"
+ y="382.59021"
+ id="text3305"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3307"
+ x="351.37402"
+ y="382.59021"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Database File </tspan></text>
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3309"
+ width="91.258865"
+ height="29.945938"
+ x="-69.884842"
+ y="232.64427"
+ ry="10.585812" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="-49.853683"
+ y="252.67543"
+ id="text3311"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3313"
+ x="-49.853683"
+ y="252.67543"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Client 1</tspan></text>
+ <g
+ id="g3321"
+ transform="translate(-76.824561,94.94894)"
+ style="stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none">
+ <rect
+ ry="10.585812"
+ y="287.61011"
+ x="8.1674261"
+ height="29.945938"
+ width="91.258865"
+ id="rect3315"
+ style="opacity:1;fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3317"
+ y="307.64127"
+ x="28.198584"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ xml:space="preserve"><tspan
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"
+ y="307.64127"
+ x="28.198584"
+ id="tspan3319"
+ sodipodi:role="line">Client 2</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="201.37402"
+ y="322.59021"
+ id="text3331"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3333"
+ x="201.37402"
+ y="322.59021"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">IO using VFS interface</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="-158.62598"
+ y="322.59021"
+ id="text3335"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3337"
+ x="-158.62598"
+ y="322.59021"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Data Exchanged Using B-Tree Interface</tspan></text>
+ <g
+ id="g3374">
+ <path
+ id="path3342"
+ d="M 37.588091,247.23327 L 56.370507,237.10827 L 56.370507,242.17077 L 75.152923,242.17077"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3344"
+ d="M 37.588091,247.23328 L 56.370507,257.35828 L 56.370507,252.29578 L 75.152922,252.29578"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3352"
+ d="M 112.71776,247.23327 L 93.935344,237.10827 L 93.935344,242.17077 L 75.152928,242.17077"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3354"
+ d="M 112.71776,247.23328 L 93.93534,257.35828 L 93.93534,252.29578 L 75.152925,252.29578"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(-1.1872931,150)"
+ id="g3380">
+ <path
+ id="path3382"
+ d="M 37.588091,247.23327 L 56.370507,237.10827 L 56.370507,242.17077 L 75.152923,242.17077"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3384"
+ d="M 37.588091,247.23328 L 56.370507,257.35828 L 56.370507,252.29578 L 75.152922,252.29578"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3386"
+ d="M 112.71776,247.23327 L 93.935344,237.10827 L 93.935344,242.17077 L 75.152928,242.17077"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3388"
+ d="M 112.71776,247.23328 L 93.93534,257.35828 L 93.93534,252.29578 L 75.152925,252.29578"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(165.15996,115.06251)"
+ id="g3390">
+ <path
+ id="path3392"
+ d="M 37.588091,247.23327 L 56.370507,237.10827 L 56.370507,242.17077 L 75.152923,242.17077"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3394"
+ d="M 37.588091,247.23328 L 56.370507,257.35828 L 56.370507,252.29578 L 75.152922,252.29578"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3396"
+ d="M 112.71776,247.23327 L 93.935344,237.10827 L 93.935344,242.17077 L 75.152928,242.17077"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3398"
+ d="M 112.71776,247.23328 L 93.93534,257.35828 L 93.93534,252.29578 L 75.152925,252.29578"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(165.15996,25.062506)"
+ id="g3400">
+ <path
+ id="path3402"
+ d="M 37.588091,247.23327 L 56.370507,237.10827 L 56.370507,242.17077 L 75.152923,242.17077"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3404"
+ d="M 37.588091,247.23328 L 56.370507,257.35828 L 56.370507,252.29578 L 75.152922,252.29578"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3406"
+ d="M 112.71776,247.23327 L 93.935344,237.10827 L 93.935344,242.17077 L 75.152928,242.17077"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path3408"
+ d="M 112.71776,247.23328 L 93.93534,257.35828 L 93.93534,252.29578 L 75.152925,252.29578"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 160,130.57031 L 230,90.570312"
+ id="path3410"
+ transform="translate(-157.25195,171.72546)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 160,160.57031 L 230,200.57031"
+ id="path3412"
+ transform="translate(-157.25195,171.72546)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 430,130.57031 L 400,110.57031"
+ id="path3416"
+ transform="translate(-157.25195,171.72546)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 430,160.57031 L 400,180.57031 L 400,180.57031"
+ id="path3418"
+ transform="translate(-157.25195,171.72546)" />
+ </g>
+</svg>
diff --git a/www/images/cc-diff.jpg b/www/images/cc-diff.jpg
new file mode 100644
index 0000000..55c7880
--- /dev/null
+++ b/www/images/cc-diff.jpg
Binary files differ
diff --git a/www/images/chart.wiki b/www/images/chart.wiki
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/www/images/chart.wiki
diff --git a/www/images/chw.jpg b/www/images/chw.jpg
new file mode 100644
index 0000000..8d436de
--- /dev/null
+++ b/www/images/chw.jpg
Binary files differ
diff --git a/www/images/cpu-usage.jpg b/www/images/cpu-usage.jpg
new file mode 100644
index 0000000..ac695e8
--- /dev/null
+++ b/www/images/cpu-usage.jpg
Binary files differ
diff --git a/www/images/dan1.jpg b/www/images/dan1.jpg
new file mode 100644
index 0000000..10eafb6
--- /dev/null
+++ b/www/images/dan1.jpg
Binary files differ
diff --git a/www/images/direct1b.gif b/www/images/direct1b.gif
new file mode 100644
index 0000000..8999a84
--- /dev/null
+++ b/www/images/direct1b.gif
Binary files differ
diff --git a/www/images/drh1.jpg b/www/images/drh1.jpg
new file mode 100644
index 0000000..d6d0b69
--- /dev/null
+++ b/www/images/drh1.jpg
Binary files differ
diff --git a/www/images/faster-read-blobapi.jpg b/www/images/faster-read-blobapi.jpg
new file mode 100644
index 0000000..afe9163
--- /dev/null
+++ b/www/images/faster-read-blobapi.jpg
Binary files differ
diff --git a/www/images/faster-read-mmap.jpg b/www/images/faster-read-mmap.jpg
new file mode 100644
index 0000000..64fade0
--- /dev/null
+++ b/www/images/faster-read-mmap.jpg
Binary files differ
diff --git a/www/images/faster-read-sql.jpg b/www/images/faster-read-sql.jpg
new file mode 100644
index 0000000..6d9647d
--- /dev/null
+++ b/www/images/faster-read-sql.jpg
Binary files differ
diff --git a/www/images/faster-write-safe.jpg b/www/images/faster-write-safe.jpg
new file mode 100644
index 0000000..0012d4b
--- /dev/null
+++ b/www/images/faster-write-safe.jpg
Binary files differ
diff --git a/www/images/faster-write-unsafe.jpg b/www/images/faster-write-unsafe.jpg
new file mode 100644
index 0000000..46a0f10
--- /dev/null
+++ b/www/images/faster-write-unsafe.jpg
Binary files differ
diff --git a/www/images/fileformat/db_connection.gif b/www/images/fileformat/db_connection.gif
new file mode 100644
index 0000000..5894496
--- /dev/null
+++ b/www/images/fileformat/db_connection.gif
Binary files differ
diff --git a/www/images/fileformat/examplepop.gif b/www/images/fileformat/examplepop.gif
new file mode 100644
index 0000000..9483749
--- /dev/null
+++ b/www/images/fileformat/examplepop.gif
Binary files differ
diff --git a/www/images/fileformat/fileio_diagrams.odg b/www/images/fileformat/fileio_diagrams.odg
new file mode 100644
index 0000000..15a9561
--- /dev/null
+++ b/www/images/fileformat/fileio_diagrams.odg
Binary files differ
diff --git a/www/images/fileformat/filesystem1.gif b/www/images/fileformat/filesystem1.gif
new file mode 100644
index 0000000..0e33666
--- /dev/null
+++ b/www/images/fileformat/filesystem1.gif
Binary files differ
diff --git a/www/images/fileformat/filesystem2.gif b/www/images/fileformat/filesystem2.gif
new file mode 100644
index 0000000..d890108
--- /dev/null
+++ b/www/images/fileformat/filesystem2.gif
Binary files differ
diff --git a/www/images/fileformat/freelistpage.gif b/www/images/fileformat/freelistpage.gif
new file mode 100644
index 0000000..07711ff
--- /dev/null
+++ b/www/images/fileformat/freelistpage.gif
Binary files differ
diff --git a/www/images/fileformat/indexlongrecord.gif b/www/images/fileformat/indexlongrecord.gif
new file mode 100644
index 0000000..84adc23
--- /dev/null
+++ b/www/images/fileformat/indexlongrecord.gif
Binary files differ
diff --git a/www/images/fileformat/indexpage.gif b/www/images/fileformat/indexpage.gif
new file mode 100644
index 0000000..eb28668
--- /dev/null
+++ b/www/images/fileformat/indexpage.gif
Binary files differ
diff --git a/www/images/fileformat/indexpage.odg b/www/images/fileformat/indexpage.odg
new file mode 100644
index 0000000..c3c492a
--- /dev/null
+++ b/www/images/fileformat/indexpage.odg
Binary files differ
diff --git a/www/images/fileformat/indexshortrecord.gif b/www/images/fileformat/indexshortrecord.gif
new file mode 100644
index 0000000..6b0853b
--- /dev/null
+++ b/www/images/fileformat/indexshortrecord.gif
Binary files differ
diff --git a/www/images/fileformat/indextree.gif b/www/images/fileformat/indextree.gif
new file mode 100644
index 0000000..414b16f
--- /dev/null
+++ b/www/images/fileformat/indextree.gif
Binary files differ
diff --git a/www/images/fileformat/journal_format.gif b/www/images/fileformat/journal_format.gif
new file mode 100644
index 0000000..36b83d1
--- /dev/null
+++ b/www/images/fileformat/journal_format.gif
Binary files differ
diff --git a/www/images/fileformat/journal_header.gif b/www/images/fileformat/journal_header.gif
new file mode 100644
index 0000000..9dd8d1e
--- /dev/null
+++ b/www/images/fileformat/journal_header.gif
Binary files differ
diff --git a/www/images/fileformat/journal_record.gif b/www/images/fileformat/journal_record.gif
new file mode 100644
index 0000000..49086f2
--- /dev/null
+++ b/www/images/fileformat/journal_record.gif
Binary files differ
diff --git a/www/images/fileformat/master_journal_ptr.gif b/www/images/fileformat/master_journal_ptr.gif
new file mode 100644
index 0000000..2223776
--- /dev/null
+++ b/www/images/fileformat/master_journal_ptr.gif
Binary files differ
diff --git a/www/images/fileformat/overflowpage.gif b/www/images/fileformat/overflowpage.gif
new file mode 100644
index 0000000..24da1a1
--- /dev/null
+++ b/www/images/fileformat/overflowpage.gif
Binary files differ
diff --git a/www/images/fileformat/pointermapentry.gif b/www/images/fileformat/pointermapentry.gif
new file mode 100644
index 0000000..a8dee15
--- /dev/null
+++ b/www/images/fileformat/pointermapentry.gif
Binary files differ
diff --git a/www/images/fileformat/recordformat.gif b/www/images/fileformat/recordformat.gif
new file mode 100644
index 0000000..42d5a9f
--- /dev/null
+++ b/www/images/fileformat/recordformat.gif
Binary files differ
diff --git a/www/images/fileformat/rtdocs.css b/www/images/fileformat/rtdocs.css
new file mode 100644
index 0000000..ce2a5c2
--- /dev/null
+++ b/www/images/fileformat/rtdocs.css
@@ -0,0 +1,81 @@
+ /* Style for requirements paragraph. */
+ .req { margin: 1.0em 10ex; }
+ .req span { color: darkblue }
+
+ .subreq { margin: 1.0em 5ex 1.0em 15ex; color: darkblue }
+ .subsubreq { margin: 1.0em 5ex 1.0em 20ex; color: darkblue }
+
+ .req:before { color: black; content: "[" attr(id) "] "}
+ .subreq:before { color: black; content: "[" attr(id) "] "}
+ .subsubreq:before { color: black; content: "[SUBSUBREQ] " }
+
+ /* The dark-green color used for headings. */
+ h1,h2,h3,h4,#toc_header,#document_title { color: #80a796 }
+
+ .req code {display: block; margin: 0.5em 5ex}
+ code {white-space: pre}
+
+ /* Style for content headings */
+ h2 { margin-left: 10px }
+ h3 { margin-left: 20px }
+ h4 { margin-left: 30px }
+ h1,h2,h3,h4 { font-weight: normal }
+
+ /* Style for document and toc headings */
+ #toc_header { font-size: 1.5em; margin: 1.0em; }
+ #document_title { font-size: 2em; text-align: center }
+
+ #toc a { color: darkblue ; text-decoration: none }
+
+ /* Document font */
+ body { font-family: sans-serif ; font-size:14px ; }
+
+ /* Margins for block boxes that occur in the document flow. */
+ p,ul,ol { margin: 1em 5ex }
+ td p, td ul, td ol { margin: 1em auto }
+
+ /* Table style */
+ table.striped, table#glossary { margin: 1em auto; width: 80% ; border-spacing: 0}
+ .striped th, #glossary th {
+ white-space:nowrap;
+ text-align:left;
+ border-bottom: solid 1px #444444;
+ padding: 0.2em 1ex;
+ }
+ .striped td, #glossary td { vertical-align: top }
+ .striped td, #glossary td { padding: 0.2em 1ex; }
+
+ .spacedlist li { margin-top: 0.5em ; margin-bottom: 0.5em }
+
+ li p { margin: 1em auto ; padding: 0 }
+
+ /* Style for "todo" notes. These are represented by markup like:
+ **
+ ** <span class=todo>Fix this bit!</span>
+ ** <p class=todo>Longer todo note.</p>
+ */
+ .todo { color: #AA3333 ; font-style : italic }
+ .todo:before { content: 'TODO:' }
+ p.todo { border: solid #AA3333 1px; padding: 1ex }
+
+ cite a, cite a:visited { color: inherit; text-decoration: none ; font-style: normal; }
+ .defnlink, .reqlink {
+ color: inherit;
+ text-decoration: none;
+ }
+ .defnlink { font-style: italic }
+ .defnlink:visited,.reqlink:visited { color: inherit }
+ h1 .defnlink, h2 .defnlink, h3 .defnlink, h4 .defnlink, .defn .defnlink{ font-style: inherit }
+ :link:hover,:visited:hover { background: wheat }
+
+ .defn { white-space: nowrap }
+
+ img {
+ display:block;
+ }
+
+ pre.api {
+ margin: 1em 15ex;
+ font-size: 16px;
+ }
+
diff --git a/www/images/fileformat/rtdocs.js b/www/images/fileformat/rtdocs.js
new file mode 100644
index 0000000..a1b66ed
--- /dev/null
+++ b/www/images/fileformat/rtdocs.js
@@ -0,0 +1,116 @@
+
+
+function populate_toc () {
+ var children = document.getElementsByTagName("h1").item(0).parentNode.childNodes
+ var toc = ""
+
+ var counters = new Array()
+ counters[1] = 0
+ counters[2] = 0
+ counters[3] = 0
+ counters[4] = 0
+
+ /* Generate the table of contents */
+ for(var ii=0; ii<children.length; ii++){
+ var node = children.item(ii)
+ var iHeader = -1
+ if( node.tagName == "H1" ){ iHeader = 1 }
+ if( node.tagName == "H2" ){ iHeader = 2 }
+ if( node.tagName == "H3" ){ iHeader = 3 }
+ if( node.tagName == "H4" ){ iHeader = 4 }
+
+ if( iHeader>0 ){
+ var anchor = "tocentry_" + ii
+
+ for(var jj=iHeader+1; jj<=4; jj++){ counters[jj] = 0 }
+ counters[iHeader]++
+
+ var number = ""
+ for(var jj=1; jj<=iHeader; jj++){ number += counters[jj] + "." }
+
+ toc += '<div style="margin-left:' + (iHeader*6) + 'ex">'
+ toc += '<a href="#' + anchor + '">' + number + " " + node.innerHTML
+ toc += "</a></div>"
+
+ var a = '<a style="color:inherit" name="' + anchor + '">' + number + '</a>'
+ node.innerHTML = a + " " + node.innerHTML
+ }
+ }
+ document.getElementById("toc").innerHTML = toc
+}
+
+function number_figs () {
+ /* Number the figures in this document */
+ var figcounter = 1
+ var spans = document.getElementsByTagName("span")
+ for(var ii=0; ii<spans.length; ii++){
+ var s = spans.item(ii)
+ if( s.className=="fig" ){
+ s.innerHTML = figcounter
+ figcounter++
+ }
+ }
+}
+
+function populate_refs () {
+ /* Fix up <cite> references */
+ var cites = document.getElementsByTagName("cite")
+ for(var ii=0; ii<cites.length; ii++){
+ var t = cites.item(ii).innerHTML
+ var h = document.getElementById(t)
+
+ if( !h ){
+ alert("Bad reference: " + t)
+ continue
+ }
+
+ var label
+ if( h.tagName=="H1" || h.tagName=="H2"
+ || h.tagName=="H3" || h.tagName=="H4"
+ ){
+ label = h.firstChild.firstChild.data
+ label = label.substring(0, label.length-1)
+ } else {
+ label = h.firstChild.data
+ }
+
+ cites.item(ii).innerHTML = '<a href="#' + t + '">' + label + '</a>'
+ }
+}
+
+function decorate_tables () {
+ /* Decorate tables */
+ var tables = document.getElementsByTagName("table")
+ for(var ii=0; ii<tables.length; ii++){
+ var t = tables.item(ii)
+ if( t.className!="striped" ) continue
+ var rows = t.rows
+ for(var jj=1; jj<rows.length; jj += 2){
+ rows.item(jj).style.backgroundColor = '#DDDDDD'
+ }
+ }
+}
+
+function check_for_duplicates () {
+ var aReq = new Array();
+ var ps = document.getElementsByTagName("p")
+
+ for(var ii=0; ii<ps.length; ii++){
+ var p = ps.item(ii)
+ if( p.className!="req" || !p.id ) continue;
+
+ if( aReq[p.id] ){
+ alert("Duplicate requirement number: " + p.id)
+ }
+ aReq[p.id] = 1;
+ }
+}
+
+onload = function () {
+ number_figs()
+ populate_toc()
+ populate_refs()
+ decorate_tables()
+ check_for_duplicates()
+}
+
diff --git a/www/images/fileformat/tablelongrecord.gif b/www/images/fileformat/tablelongrecord.gif
new file mode 100644
index 0000000..7f02016
--- /dev/null
+++ b/www/images/fileformat/tablelongrecord.gif
Binary files differ
diff --git a/www/images/fileformat/tablenodecell.gif b/www/images/fileformat/tablenodecell.gif
new file mode 100644
index 0000000..5b4493d
--- /dev/null
+++ b/www/images/fileformat/tablenodecell.gif
Binary files differ
diff --git a/www/images/fileformat/tableshortrecord.gif b/www/images/fileformat/tableshortrecord.gif
new file mode 100644
index 0000000..95a8a43
--- /dev/null
+++ b/www/images/fileformat/tableshortrecord.gif
Binary files differ
diff --git a/www/images/fileformat/tabletree.gif b/www/images/fileformat/tabletree.gif
new file mode 100644
index 0000000..92a2a21
--- /dev/null
+++ b/www/images/fileformat/tabletree.gif
Binary files differ
diff --git a/www/images/fileformat/vfs_role.gif b/www/images/fileformat/vfs_role.gif
new file mode 100644
index 0000000..69c5309
--- /dev/null
+++ b/www/images/fileformat/vfs_role.gif
Binary files differ
diff --git a/www/images/fileformat/write_transaction.gif b/www/images/fileformat/write_transaction.gif
new file mode 100644
index 0000000..6a05904
--- /dev/null
+++ b/www/images/fileformat/write_transaction.gif
Binary files differ
diff --git a/www/images/foreignlogos/adobe-logo.gif b/www/images/foreignlogos/adobe-logo.gif
new file mode 100644
index 0000000..8af7675
--- /dev/null
+++ b/www/images/foreignlogos/adobe-logo.gif
Binary files differ
diff --git a/www/images/foreignlogos/adobe.gif b/www/images/foreignlogos/adobe.gif
new file mode 100644
index 0000000..90a6e64
--- /dev/null
+++ b/www/images/foreignlogos/adobe.gif
Binary files differ
diff --git a/www/images/foreignlogos/airbus1.gif b/www/images/foreignlogos/airbus1.gif
new file mode 100644
index 0000000..2a221c5
--- /dev/null
+++ b/www/images/foreignlogos/airbus1.gif
Binary files differ
diff --git a/www/images/foreignlogos/airbus2.gif b/www/images/foreignlogos/airbus2.gif
new file mode 100644
index 0000000..aae70ce
--- /dev/null
+++ b/www/images/foreignlogos/airbus2.gif
Binary files differ
diff --git a/www/images/foreignlogos/apple.gif b/www/images/foreignlogos/apple.gif
new file mode 100644
index 0000000..e162f50
--- /dev/null
+++ b/www/images/foreignlogos/apple.gif
Binary files differ
diff --git a/www/images/foreignlogos/bentley.gif b/www/images/foreignlogos/bentley.gif
new file mode 100644
index 0000000..b4f25f0
--- /dev/null
+++ b/www/images/foreignlogos/bentley.gif
Binary files differ
diff --git a/www/images/foreignlogos/bentley.jpg b/www/images/foreignlogos/bentley.jpg
new file mode 100644
index 0000000..51da290
--- /dev/null
+++ b/www/images/foreignlogos/bentley.jpg
Binary files differ
diff --git a/www/images/foreignlogos/bloomberg.png b/www/images/foreignlogos/bloomberg.png
new file mode 100644
index 0000000..f0ac9e3
--- /dev/null
+++ b/www/images/foreignlogos/bloomberg.png
Binary files differ
diff --git a/www/images/foreignlogos/bosch_logo1.gif b/www/images/foreignlogos/bosch_logo1.gif
new file mode 100644
index 0000000..d1b133d
--- /dev/null
+++ b/www/images/foreignlogos/bosch_logo1.gif
Binary files differ
diff --git a/www/images/foreignlogos/dropbox.gif b/www/images/foreignlogos/dropbox.gif
new file mode 100644
index 0000000..306286b
--- /dev/null
+++ b/www/images/foreignlogos/dropbox.gif
Binary files differ
diff --git a/www/images/foreignlogos/expensify.png b/www/images/foreignlogos/expensify.png
new file mode 100644
index 0000000..c5b6194
--- /dev/null
+++ b/www/images/foreignlogos/expensify.png
Binary files differ
diff --git a/www/images/foreignlogos/fb.gif b/www/images/foreignlogos/fb.gif
new file mode 100644
index 0000000..4003040
--- /dev/null
+++ b/www/images/foreignlogos/fb.gif
Binary files differ
diff --git a/www/images/foreignlogos/firefox.gif b/www/images/foreignlogos/firefox.gif
new file mode 100644
index 0000000..8ac8880
--- /dev/null
+++ b/www/images/foreignlogos/firefox.gif
Binary files differ
diff --git a/www/images/foreignlogos/ge.gif b/www/images/foreignlogos/ge.gif
new file mode 100644
index 0000000..2669aa8
--- /dev/null
+++ b/www/images/foreignlogos/ge.gif
Binary files differ
diff --git a/www/images/foreignlogos/google.gif b/www/images/foreignlogos/google.gif
new file mode 100644
index 0000000..8811a42
--- /dev/null
+++ b/www/images/foreignlogos/google.gif
Binary files differ
diff --git a/www/images/foreignlogos/intuit.gif b/www/images/foreignlogos/intuit.gif
new file mode 100644
index 0000000..7b5e721
--- /dev/null
+++ b/www/images/foreignlogos/intuit.gif
Binary files differ
diff --git a/www/images/foreignlogos/loc.gif b/www/images/foreignlogos/loc.gif
new file mode 100644
index 0000000..7dcca93
--- /dev/null
+++ b/www/images/foreignlogos/loc.gif
Binary files differ
diff --git a/www/images/foreignlogos/loc.jpg b/www/images/foreignlogos/loc.jpg
new file mode 100644
index 0000000..cf83817
--- /dev/null
+++ b/www/images/foreignlogos/loc.jpg
Binary files differ
diff --git a/www/images/foreignlogos/mcaffee.gif b/www/images/foreignlogos/mcaffee.gif
new file mode 100644
index 0000000..f7fa757
--- /dev/null
+++ b/www/images/foreignlogos/mcaffee.gif
Binary files differ
diff --git a/www/images/foreignlogos/microsoft.gif b/www/images/foreignlogos/microsoft.gif
new file mode 100644
index 0000000..3820efa
--- /dev/null
+++ b/www/images/foreignlogos/microsoft.gif
Binary files differ
diff --git a/www/images/foreignlogos/monotone.gif b/www/images/foreignlogos/monotone.gif
new file mode 100644
index 0000000..f5df2b7
--- /dev/null
+++ b/www/images/foreignlogos/monotone.gif
Binary files differ
diff --git a/www/images/foreignlogos/mozilla.gif b/www/images/foreignlogos/mozilla.gif
new file mode 100644
index 0000000..9867c78
--- /dev/null
+++ b/www/images/foreignlogos/mozilla.gif
Binary files differ
diff --git a/www/images/foreignlogos/nds.png b/www/images/foreignlogos/nds.png
new file mode 100644
index 0000000..f80a9e6
--- /dev/null
+++ b/www/images/foreignlogos/nds.png
Binary files differ
diff --git a/www/images/foreignlogos/nokia.gif b/www/images/foreignlogos/nokia.gif
new file mode 100644
index 0000000..0aec716
--- /dev/null
+++ b/www/images/foreignlogos/nokia.gif
Binary files differ
diff --git a/www/images/foreignlogos/oracle.gif b/www/images/foreignlogos/oracle.gif
new file mode 100644
index 0000000..7100f4c
--- /dev/null
+++ b/www/images/foreignlogos/oracle.gif
Binary files differ
diff --git a/www/images/foreignlogos/philips.gif b/www/images/foreignlogos/philips.gif
new file mode 100644
index 0000000..92ecb42
--- /dev/null
+++ b/www/images/foreignlogos/philips.gif
Binary files differ
diff --git a/www/images/foreignlogos/php.gif b/www/images/foreignlogos/php.gif
new file mode 100644
index 0000000..029d161
--- /dev/null
+++ b/www/images/foreignlogos/php.gif
Binary files differ
diff --git a/www/images/foreignlogos/python.gif b/www/images/foreignlogos/python.gif
new file mode 100644
index 0000000..c06fadc
--- /dev/null
+++ b/www/images/foreignlogos/python.gif
Binary files differ
diff --git a/www/images/foreignlogos/rpm_logo.png b/www/images/foreignlogos/rpm_logo.png
new file mode 100644
index 0000000..6e620a7
--- /dev/null
+++ b/www/images/foreignlogos/rpm_logo.png
Binary files differ
diff --git a/www/images/foreignlogos/skype.gif b/www/images/foreignlogos/skype.gif
new file mode 100644
index 0000000..890f901
--- /dev/null
+++ b/www/images/foreignlogos/skype.gif
Binary files differ
diff --git a/www/images/foreignlogos/sony.gif b/www/images/foreignlogos/sony.gif
new file mode 100644
index 0000000..f05aff2
--- /dev/null
+++ b/www/images/foreignlogos/sony.gif
Binary files differ
diff --git a/www/images/foreignlogos/sunmicro.gif b/www/images/foreignlogos/sunmicro.gif
new file mode 100644
index 0000000..ebf43fc
--- /dev/null
+++ b/www/images/foreignlogos/sunmicro.gif
Binary files differ
diff --git a/www/images/foreignlogos/symbian.gif b/www/images/foreignlogos/symbian.gif
new file mode 100644
index 0000000..9b1ff89
--- /dev/null
+++ b/www/images/foreignlogos/symbian.gif
Binary files differ
diff --git a/www/images/foreignlogos/tcl.gif b/www/images/foreignlogos/tcl.gif
new file mode 100644
index 0000000..2f779c9
--- /dev/null
+++ b/www/images/foreignlogos/tcl.gif
Binary files differ
diff --git a/www/images/foreignlogos/xojo.png b/www/images/foreignlogos/xojo.png
new file mode 100644
index 0000000..9d3ee23
--- /dev/null
+++ b/www/images/foreignlogos/xojo.png
Binary files differ
diff --git a/www/images/fts3_doclist.png b/www/images/fts3_doclist.png
new file mode 100644
index 0000000..f53056d
--- /dev/null
+++ b/www/images/fts3_doclist.png
Binary files differ
diff --git a/www/images/fts3_doclist.svg b/www/images/fts3_doclist.svg
new file mode 100644
index 0000000..4f4b7b1
--- /dev/null
+++ b/www/images/fts3_doclist.svg
@@ -0,0 +1,427 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="700"
+ height="240"
+ id="svg2553"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="fts3_doclist.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs2555">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path3355"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2561" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.41"
+ inkscape:cx="344.48989"
+ inkscape:cy="119.79173"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:snap-global="true"
+ inkscape:window-width="1439"
+ inkscape:window-height="972"
+ inkscape:window-x="76"
+ inkscape:window-y="27">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3339"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2558">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-70.753784,24.208698)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 340.65058,45.824957 L 410.47991,145.85079"
+ id="path3388" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 730.86909,45.839715 L 570.95109,145.86194"
+ id="path3390" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 110.48814,45.693377 L 160.56514,145.86368"
+ id="path3384" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3337"
+ width="529.43384"
+ height="29.66988"
+ x="101.27304"
+ y="146.10002" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="110.75378"
+ y="165.79131"
+ id="text4143"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4145"
+ x="110.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Docid</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 320.75378,175.7913 C 320.75378,145.7913 320.75378,145.7913 320.75378,145.7913 L 320.75378,145.7913"
+ id="path3287" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="170.75378"
+ y="165.79131"
+ id="text3289"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3291"
+ x="170.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Column 0 offset-list</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 160.75378,175.7913 C 160.75378,145.7913 160.75378,145.7913 160.75378,145.7913 L 160.75378,145.7913"
+ id="path3293" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="110.75378"
+ y="195.79131"
+ id="text3305"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3307"
+ x="110.75378"
+ y="195.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="300.75378"
+ y="195.79131"
+ id="text3313"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3315"
+ x="300.75378"
+ y="195.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">variable length fields</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="360.75378"
+ y="165.79131"
+ id="text3321"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3323"
+ x="360.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">...</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 410.75378,175.7913 C 410.75378,145.7913 410.75378,145.7913 410.75378,145.7913 L 410.75378,145.7913"
+ id="path3325" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3327"
+ width="189.77951"
+ height="30.119799"
+ x="110.59238"
+ y="15.455453" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3349"
+ width="390.03171"
+ height="29.827499"
+ x="340.75378"
+ y="15.791302" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="360.75378"
+ y="35.791294"
+ id="text3351"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3353"
+ x="360.75378"
+ y="35.791294"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">0x01</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 410.75378,45.791302 C 410.75378,15.791306 410.75378,15.791306 410.75378,15.791306 L 410.75378,15.791306"
+ id="path3356" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="360.75378"
+ y="5.7913022"
+ id="text3358"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360"
+ x="360.75378"
+ y="5.7913022"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">1 byte</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="550.75378"
+ y="35.791302"
+ id="text3368"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3370"
+ x="550.75378"
+ y="35.791302"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">offset 0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="420.75378"
+ y="35.791302"
+ id="text3372"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3374"
+ x="420.75378"
+ y="35.791302"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Column number</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 540.75378,45.791302 C 540.75378,15.791302 540.75378,15.791302 540.75378,15.791302 L 540.75378,15.791302"
+ id="path3376" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="450.75378"
+ y="5.7913022"
+ id="text3378"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3380"
+ x="450.75378"
+ y="5.7913022"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 300.56264,45.774971 L 321.41397,145.92851"
+ id="path3386" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="580.75378"
+ y="165.79131"
+ id="text3418"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3420"
+ x="580.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">0x00</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 570.75378,175.7913 C 570.75378,145.7913 570.75378,145.7913 570.75378,145.7913 L 570.75378,145.7913"
+ id="path3422" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="420.75378"
+ y="165.79131"
+ id="text3444"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3446"
+ x="420.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Column N offset-list</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="580.75378"
+ y="195.79131"
+ id="text3448"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3450"
+ x="580.75378"
+ y="195.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">1 byte</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="630.75378"
+ y="35.791302"
+ id="text3452"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3454"
+ x="630.75378"
+ y="35.791302"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">...</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 610.75378,45.791302 C 610.75378,15.791302 610.75378,15.791302 610.75378,15.791302 L 610.75378,15.791302"
+ id="path3456" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="670.75378"
+ y="35.791302"
+ id="text3458"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3460"
+ x="670.75378"
+ y="35.791302"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">offset N</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 660.75378,45.791305 C 660.75378,15.791302 660.75378,15.791302 660.75378,15.791302 L 660.75378,15.791302"
+ id="path3462" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="550.75378"
+ y="5.7913022"
+ id="text3464"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3466"
+ x="550.75378"
+ y="5.7913022"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="670.75378"
+ y="5.7913022"
+ id="text3468"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3470"
+ x="670.75378"
+ y="5.7913022"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="120.75379"
+ y="35.791298"
+ id="text3496"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3498"
+ x="120.75379"
+ y="35.791298"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">offset 0</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="200.75378"
+ y="35.791298"
+ id="text3500"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3502"
+ x="200.75378"
+ y="35.791298"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">...</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 180.75379,45.791298 C 180.75379,15.791302 180.75379,15.791302 180.75379,15.791302 L 180.75379,15.791302"
+ id="path3504" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="240.75378"
+ y="35.791298"
+ id="text3506"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3508"
+ x="240.75378"
+ y="35.791298"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">offset N</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 230.75378,45.791301 C 230.75378,15.791302 230.75378,15.791302 230.75378,15.791302 L 230.75378,15.791302"
+ id="path3510" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="120.75379"
+ y="5.7913132"
+ id="text3512"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3514"
+ x="120.75379"
+ y="5.7913132"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="240.75378"
+ y="5.7913132"
+ id="text3516"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3518"
+ x="240.75378"
+ y="5.7913132"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ </g>
+</svg>
diff --git a/www/images/fts3_doclist2.png b/www/images/fts3_doclist2.png
new file mode 100644
index 0000000..048f42e
--- /dev/null
+++ b/www/images/fts3_doclist2.png
Binary files differ
diff --git a/www/images/fts3_doclist2.svg b/www/images/fts3_doclist2.svg
new file mode 100644
index 0000000..c3ec2bd
--- /dev/null
+++ b/www/images/fts3_doclist2.svg
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="700"
+ height="130"
+ id="svg2553"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="fts3_doclist2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs2555">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path3355"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2561" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.41"
+ inkscape:cx="222.52257"
+ inkscape:cy="-6.6666667"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:snap-global="true"
+ inkscape:window-width="1439"
+ inkscape:window-height="972"
+ inkscape:window-x="116"
+ inkscape:window-y="6"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3339"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2558">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-70.753784,24.208698)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3337"
+ width="239.49965"
+ height="29.993635"
+ x="271.11115"
+ y="35.938148" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="280.75378"
+ y="55.791313"
+ id="text4143"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4145"
+ x="280.75378"
+ y="55.791313"
+ style="font-size:14px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Length</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 410.75378,65.791302 C 410.75378,35.791302 410.75378,35.791302 410.75378,35.791302 L 410.75378,35.791302"
+ id="path3287" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="350.75378"
+ y="55.791313"
+ id="text3289"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3291"
+ x="350.75378"
+ y="55.791313"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Entry 0</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 340.75378,65.791302 C 340.75378,35.791302 340.75378,35.791302 340.75378,35.791302 L 340.75378,35.791302"
+ id="path3293" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="280.61081"
+ y="85.938148"
+ id="text3305"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3307"
+ x="280.61081"
+ y="85.938148"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="350.61081"
+ y="85.938148"
+ id="text3313"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3315"
+ x="350.61081"
+ y="85.938148"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">variable length fields</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="420.75378"
+ y="55.791313"
+ id="text3321"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3323"
+ x="420.75378"
+ y="55.791313"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">...</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 440.75378,65.791302 C 440.75378,35.791302 440.75378,35.791302 440.75378,35.791302 L 440.75378,35.791302"
+ id="path3325" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="450.75378"
+ y="55.791313"
+ id="text3444"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3446"
+ x="450.75378"
+ y="55.791313"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Entry N</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="M 340.61082,25.938144 L 350.61082,15.938144 L 500.61082,15.938144 L 510.61082,25.938144"
+ id="path3263" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="380.61081"
+ y="5.9381552"
+ id="text3265"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3267"
+ x="380.61081"
+ y="5.9381552"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"><tspan
+ style="font-style:italic"
+ id="tspan3269">Length</tspan> bytes</tspan></text>
+ </g>
+</svg>
diff --git a/www/images/fts3_interior_node.png b/www/images/fts3_interior_node.png
new file mode 100644
index 0000000..56c375c
--- /dev/null
+++ b/www/images/fts3_interior_node.png
Binary files differ
diff --git a/www/images/fts3_interior_node.svg b/www/images/fts3_interior_node.svg
new file mode 100644
index 0000000..a1b72e8
--- /dev/null
+++ b/www/images/fts3_interior_node.svg
@@ -0,0 +1,387 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="700"
+ height="240"
+ id="svg2553"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="fts3_interior_node.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs2555">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path3355"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2561" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.41"
+ inkscape:cx="349.10624"
+ inkscape:cy="119.79173"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:snap-global="true"
+ inkscape:window-width="1439"
+ inkscape:window-height="972"
+ inkscape:window-x="150"
+ inkscape:window-y="11">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3339"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2558">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-70.753784,24.208698)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 350.77933,45.713996 L 440.78041,145.81793"
+ id="path3388" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 730.79558,45.913223 L 511.3156,146.07842"
+ id="path3390" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 110.7087,45.913931 L 271.17498,145.99198"
+ id="path3384" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3337"
+ width="409.87488"
+ height="29.80385"
+ x="101.12634"
+ y="146.15134" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="110.5647"
+ y="166.43344"
+ id="text4143"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4145"
+ x="110.5647"
+ y="166.43344"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Height</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 170.5647,176.43345 C 170.5647,146.43345 170.5647,146.43345 170.5647,146.43345 L 170.5647,146.43345"
+ id="path3281" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="180.5647"
+ y="166.43344"
+ id="text3283"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3285"
+ x="180.5647"
+ y="166.43344"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Left-child id</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 341.13226,175.94926 C 341.13226,145.94926 341.13226,145.94926 341.13226,145.94926 L 341.13226,145.94926"
+ id="path3287" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="280.5647"
+ y="166.43344"
+ id="text3289"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3291"
+ x="280.5647"
+ y="166.43344"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Term 1</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 270.5647,176.43344 C 270.5647,146.43344 270.5647,146.43344 270.5647,146.43344 L 270.5647,146.43344"
+ id="path3293" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="451.13226"
+ y="165.94926"
+ id="text3295"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3297"
+ x="451.13226"
+ y="165.94926"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Term N</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 410.5647,176.43344 C 410.5647,146.43344 410.5647,146.43344 410.5647,146.43344 L 410.5647,146.43344"
+ id="path3303" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="111.13226"
+ y="195.94926"
+ id="text3305"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3307"
+ x="111.13226"
+ y="195.94926"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="201.13226"
+ y="195.94926"
+ id="text3309"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3311"
+ x="201.13226"
+ y="195.94926"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="311.13226"
+ y="195.94926"
+ id="text3313"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3315"
+ x="311.13226"
+ y="195.94926"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">variable length fields</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="351.13226"
+ y="165.94926"
+ id="text3317"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3319"
+ x="351.13226"
+ y="165.94926"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Term 2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="421.13226"
+ y="165.94926"
+ id="text3321"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3323"
+ x="421.13226"
+ y="165.94926"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">...</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 441.13226,175.94926 C 441.13226,145.94926 441.13226,145.94926 441.13226,145.94926 L 441.13226,145.94926"
+ id="path3325" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3327"
+ width="189.77951"
+ height="30.119799"
+ x="110.59238"
+ y="15.455453" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="120.75035"
+ y="35.613411"
+ id="text3329"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3331"
+ x="120.75035"
+ y="35.613411"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Length</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 180.75035,45.613422 C 180.75035,15.613422 180.75035,15.613422 180.75035,15.613422 L 180.75035,15.613422"
+ id="path3333" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="120.75035"
+ y="5.6134114"
+ id="text3335"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3337"
+ x="120.75035"
+ y="5.6134114"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="200.75037"
+ y="5.6134114"
+ id="text3339"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3341"
+ x="200.75037"
+ y="5.6134114"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"><tspan
+ style="font-size:14px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans Italic"
+ id="tspan3343">Length</tspan> bytes</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="190.75037"
+ y="35.613411"
+ id="text3345"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3347"
+ x="190.75037"
+ y="35.613411"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Term content</tspan></text>
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3349"
+ width="380.01483"
+ height="29.840374"
+ x="350.73553"
+ y="15.773038" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="360.75378"
+ y="35.791294"
+ id="text3351"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3353"
+ x="360.75378"
+ y="35.791294"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Prefix Length</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 460.75377,45.791307 C 460.75377,15.791311 460.75377,15.791311 460.75377,15.791311 L 460.75377,15.791311"
+ id="path3356" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="360.75378"
+ y="5.7913022"
+ id="text3358"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360"
+ x="360.75378"
+ y="5.7913022"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="580.66846"
+ y="5.7060018"
+ id="text3362"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3364"
+ x="580.66846"
+ y="5.7060018"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"><tspan
+ style="font-size:14px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans Italic"
+ id="tspan3366">Suffix Length</tspan> bytes</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="580.66846"
+ y="35.705997"
+ id="text3368"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3370"
+ x="580.66846"
+ y="35.705997"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Suffix content</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="470.75378"
+ y="35.791302"
+ id="text3372"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3374"
+ x="470.75378"
+ y="35.791302"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Suffix Length</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 570.66848,45.706001 C 570.66848,15.706001 570.66848,15.706001 570.66848,15.706001 L 570.66848,15.706001"
+ id="path3376" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="490.66849"
+ y="5.7060018"
+ id="text3378"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3380"
+ x="490.66849"
+ y="5.7060018"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 300.7036,45.915928 L 341.17298,145.98998"
+ id="path3386" />
+ </g>
+</svg>
diff --git a/www/images/fts3_leaf_node.png b/www/images/fts3_leaf_node.png
new file mode 100644
index 0000000..f060fbc
--- /dev/null
+++ b/www/images/fts3_leaf_node.png
Binary files differ
diff --git a/www/images/fts3_leaf_node.svg b/www/images/fts3_leaf_node.svg
new file mode 100644
index 0000000..d93b282
--- /dev/null
+++ b/www/images/fts3_leaf_node.svg
@@ -0,0 +1,375 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="700"
+ height="240"
+ id="svg2553"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="fts3_leaf_node.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs2555">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path3355"
+ d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2561" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.41"
+ inkscape:cx="324.66112"
+ inkscape:cy="119.79173"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:snap-global="true"
+ inkscape:window-width="1439"
+ inkscape:window-height="972"
+ inkscape:window-x="150"
+ inkscape:window-y="11">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3339"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2558">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-70.753784,24.208698)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 350.65163,45.586294 L 400.43675,145.91874"
+ id="path3388" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 730.76277,45.946031 L 480.64735,145.75563"
+ id="path3390" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 110.48814,45.693377 L 160.56514,145.86368"
+ id="path3384" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.05774558;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3337"
+ width="459.46866"
+ height="29.746105"
+ x="101.23494"
+ y="146.0619" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="110.75378"
+ y="165.79131"
+ id="text4143"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4145"
+ x="110.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">0x00</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 230.75378,175.7913 C 230.75378,145.7913 230.75378,145.7913 230.75378,145.7913 L 230.75378,145.7913"
+ id="path3287" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="170.75378"
+ y="165.79131"
+ id="text3289"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3291"
+ x="170.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Term 1</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 160.75378,175.7913 C 160.75378,145.7913 160.75378,145.7913 160.75378,145.7913 L 160.75378,145.7913"
+ id="path3293" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="410.75378"
+ y="165.79131"
+ id="text3295"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3297"
+ x="410.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Term N</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 310.75378,175.7913 C 310.75378,145.7913 310.75378,145.7913 310.75378,145.7913 L 310.75378,145.7913"
+ id="path3303" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="110.75378"
+ y="195.79131"
+ id="text3305"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3307"
+ x="110.75378"
+ y="195.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">1 byte</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="290.75378"
+ y="195.79131"
+ id="text3313"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3315"
+ x="290.75378"
+ y="195.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">variable length fields</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="350.75378"
+ y="165.79131"
+ id="text3321"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3323"
+ x="350.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">...</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 400.75378,175.7913 C 400.75378,145.7913 400.75378,145.7913 400.75378,145.7913 L 400.75378,145.7913"
+ id="path3325" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3327"
+ width="189.77951"
+ height="30.119799"
+ x="110.59238"
+ y="15.455453" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="120.75035"
+ y="35.613411"
+ id="text3329"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3331"
+ x="120.75035"
+ y="35.613411"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Length</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 180.75035,45.613422 C 180.75035,15.613422 180.75035,15.613422 180.75035,15.613422 L 180.75035,15.613422"
+ id="path3333" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="120.75035"
+ y="5.6134114"
+ id="text3335"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3337"
+ x="120.75035"
+ y="5.6134114"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="200.75037"
+ y="5.6134114"
+ id="text3339"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3341"
+ x="200.75037"
+ y="5.6134114"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"><tspan
+ style="font-size:14px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans Italic"
+ id="tspan3343">Length</tspan> bytes</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="190.75037"
+ y="35.613411"
+ id="text3345"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3347"
+ x="190.75037"
+ y="35.613411"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Term content</tspan></text>
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3349"
+ width="380.01483"
+ height="29.840374"
+ x="350.73553"
+ y="15.773038" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="360.75378"
+ y="35.791294"
+ id="text3351"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3353"
+ x="360.75378"
+ y="35.791294"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Prefix Length</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 460.75377,45.791307 C 460.75377,15.791311 460.75377,15.791311 460.75377,15.791311 L 460.75377,15.791311"
+ id="path3356" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="360.75378"
+ y="5.7913022"
+ id="text3358"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3360"
+ x="360.75378"
+ y="5.7913022"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="580.66846"
+ y="5.7060018"
+ id="text3362"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3364"
+ x="580.66846"
+ y="5.7060018"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans"><tspan
+ style="font-size:14px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans Italic"
+ id="tspan3366">Suffix Length</tspan> bytes</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="580.66846"
+ y="35.705997"
+ id="text3368"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3370"
+ x="580.66846"
+ y="35.705997"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Suffix content</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="470.75378"
+ y="35.791302"
+ id="text3372"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3374"
+ x="470.75378"
+ y="35.791302"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Suffix Length</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 570.66848,45.706001 C 570.66848,15.706001 570.66848,15.706001 570.66848,15.706001 L 570.66848,15.706001"
+ id="path3376" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="490.66849"
+ y="5.7060018"
+ id="text3378"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3380"
+ x="490.66849"
+ y="5.7060018"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">varint</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3,3;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 299.55068,46.068847 L 230.18962,145.63463"
+ id="path3386" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="240.75378"
+ y="165.79131"
+ id="text3414"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3416"
+ x="240.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Doclist 1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ x="490.75378"
+ y="165.79131"
+ id="text3418"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3420"
+ x="490.75378"
+ y="165.79131"
+ style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;font-family:Sans;-inkscape-font-specification:Sans">Doclist N</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 480.75378,175.7913 C 480.75378,145.7913 480.75378,145.7913 480.75378,145.7913 L 480.75378,145.7913"
+ id="path3422" />
+ </g>
+</svg>
diff --git a/www/images/fts5_formula.odf b/www/images/fts5_formula.odf
new file mode 100644
index 0000000..ae27fe1
--- /dev/null
+++ b/www/images/fts5_formula.odf
Binary files differ
diff --git a/www/images/fts5_formula1.png b/www/images/fts5_formula1.png
new file mode 100644
index 0000000..fd37dec
--- /dev/null
+++ b/www/images/fts5_formula1.png
Binary files differ
diff --git a/www/images/fts5_formula2.png b/www/images/fts5_formula2.png
new file mode 100644
index 0000000..61abe9b
--- /dev/null
+++ b/www/images/fts5_formula2.png
Binary files differ
diff --git a/www/images/fts5_formula3.png b/www/images/fts5_formula3.png
new file mode 100644
index 0000000..740aee4
--- /dev/null
+++ b/www/images/fts5_formula3.png
Binary files differ
diff --git a/www/images/fullscanb.gif b/www/images/fullscanb.gif
new file mode 100644
index 0000000..becb514
--- /dev/null
+++ b/www/images/fullscanb.gif
Binary files differ
diff --git a/www/images/harmony.gif b/www/images/harmony.gif
new file mode 100644
index 0000000..504589e
--- /dev/null
+++ b/www/images/harmony.gif
Binary files differ
diff --git a/www/images/index-ex1-x-b.gif b/www/images/index-ex1-x-b.gif
new file mode 100644
index 0000000..37354ce
--- /dev/null
+++ b/www/images/index-ex1-x-b.gif
Binary files differ
diff --git a/www/images/indirect1b1.gif b/www/images/indirect1b1.gif
new file mode 100644
index 0000000..25285d5
--- /dev/null
+++ b/www/images/indirect1b1.gif
Binary files differ
diff --git a/www/images/joe1.jpg b/www/images/joe1.jpg
new file mode 100644
index 0000000..7f4b286
--- /dev/null
+++ b/www/images/joe1.jpg
Binary files differ
diff --git a/www/images/loc.jpg b/www/images/loc.jpg
new file mode 100644
index 0000000..5baba69
--- /dev/null
+++ b/www/images/loc.jpg
Binary files differ
diff --git a/www/images/ne.gif b/www/images/ne.gif
new file mode 100644
index 0000000..03a5c00
--- /dev/null
+++ b/www/images/ne.gif
Binary files differ
diff --git a/www/images/ne.png b/www/images/ne.png
new file mode 100644
index 0000000..d3fd8c7
--- /dev/null
+++ b/www/images/ne.png
Binary files differ
diff --git a/www/images/nocopy.gif b/www/images/nocopy.gif
new file mode 100644
index 0000000..cc4a59c
--- /dev/null
+++ b/www/images/nocopy.gif
Binary files differ
diff --git a/www/images/nw.gif b/www/images/nw.gif
new file mode 100644
index 0000000..e6349eb
--- /dev/null
+++ b/www/images/nw.gif
Binary files differ
diff --git a/www/images/nw.png b/www/images/nw.png
new file mode 100644
index 0000000..4382fd9
--- /dev/null
+++ b/www/images/nw.png
Binary files differ
diff --git a/www/images/powered_by_sqlite.gif b/www/images/powered_by_sqlite.gif
new file mode 100644
index 0000000..5bfed02
--- /dev/null
+++ b/www/images/powered_by_sqlite.gif
Binary files differ
diff --git a/www/images/private_branch.gif b/www/images/private_branch.gif
new file mode 100644
index 0000000..b5f250b
--- /dev/null
+++ b/www/images/private_branch.gif
Binary files differ
diff --git a/www/images/qp/fqp1.gif b/www/images/qp/fqp1.gif
new file mode 100644
index 0000000..bb95973
--- /dev/null
+++ b/www/images/qp/fqp1.gif
Binary files differ
diff --git a/www/images/qp/fqp1.pikchr b/www/images/qp/fqp1.pikchr
new file mode 100644
index 0000000..71ae5ba
--- /dev/null
+++ b/www/images/qp/fqp1.pikchr
@@ -0,0 +1,36 @@
+circle "P" big big bold fit rad 110%
+circlerad = P.rad
+movewid = P.diameter*0.8
+move
+circle "T" big big bold
+spline -> from 0.5mm above P.e \
+ then to 2mm above 0.5 between P and T \
+ then to 0.5mm above T.w
+text "4.8" small above at 2nd vertex of previous
+spline -> from 0.5mm below T.w \
+ then to 2mm below 0.5 between T and P \
+ then to 0.5mm below P.e
+text "4.4" small below at 2nd vertex of previous
+circle "*" bold rad 0.5*circlerad with .s at movewid above P.n
+arrow from previous.s to P.n " 4.9" small ljust
+circle "*" bold rad 0.5*circlerad with .s at movewid above T.n
+arrow from previous.s to T.n " 5.2" small ljust
+text "without ANALYZE" big bold at movewid*1.5 below 0.5 between P and T
+
+
+P: circle "P" big big bold at movewid*5.0 right of T
+move
+T: circle "T" big big bold
+spline -> from 0.5mm above P.e \
+ then to 2mm above 0.5 between P and T \
+ then to 0.5mm above T.w
+text "4.4" small above at 2nd vertex of previous
+spline -> from 0.5mm below T.w \
+ then to 2mm below 0.5 between T and P \
+ then to 0.5mm below P.e
+text "3.8" small below at 2nd vertex of previous
+circle "*" bold rad 0.5*circlerad with .s at movewid above P.n
+arrow from previous.s to P.n " 3.9" small ljust
+circle "*" bold rad 0.5*circlerad with .s at movewid above T.n
+arrow from previous.s to T.n " 6.1" small ljust
+text "with ANALYZE" big bold at movewid*1.5 below 0.5 between P and T
diff --git a/www/images/qp/fruitobstate.gif b/www/images/qp/fruitobstate.gif
new file mode 100644
index 0000000..c9f4337
--- /dev/null
+++ b/www/images/qp/fruitobstate.gif
Binary files differ
diff --git a/www/images/qp/fruitobstate0.gif b/www/images/qp/fruitobstate0.gif
new file mode 100644
index 0000000..d7368b9
--- /dev/null
+++ b/www/images/qp/fruitobstate0.gif
Binary files differ
diff --git a/www/images/qp/fullscan.gif b/www/images/qp/fullscan.gif
new file mode 100644
index 0000000..55e17cb
--- /dev/null
+++ b/www/images/qp/fullscan.gif
Binary files differ
diff --git a/www/images/qp/idx1.gif b/www/images/qp/idx1.gif
new file mode 100644
index 0000000..4c13aae
--- /dev/null
+++ b/www/images/qp/idx1.gif
Binary files differ
diff --git a/www/images/qp/idx1lu1.gif b/www/images/qp/idx1lu1.gif
new file mode 100644
index 0000000..e5b82f3
--- /dev/null
+++ b/www/images/qp/idx1lu1.gif
Binary files differ
diff --git a/www/images/qp/idx1lu2.gif b/www/images/qp/idx1lu2.gif
new file mode 100644
index 0000000..0206537
--- /dev/null
+++ b/www/images/qp/idx1lu2.gif
Binary files differ
diff --git a/www/images/qp/idx1lu3.gif b/www/images/qp/idx1lu3.gif
new file mode 100644
index 0000000..90fc71f
--- /dev/null
+++ b/www/images/qp/idx1lu3.gif
Binary files differ
diff --git a/www/images/qp/idx2.gif b/www/images/qp/idx2.gif
new file mode 100644
index 0000000..9f59be3
--- /dev/null
+++ b/www/images/qp/idx2.gif
Binary files differ
diff --git a/www/images/qp/idx2lu1.gif b/www/images/qp/idx2lu1.gif
new file mode 100644
index 0000000..705dd2b
--- /dev/null
+++ b/www/images/qp/idx2lu1.gif
Binary files differ
diff --git a/www/images/qp/idx3.gif b/www/images/qp/idx3.gif
new file mode 100644
index 0000000..4d8fdb6
--- /dev/null
+++ b/www/images/qp/idx3.gif
Binary files differ
diff --git a/www/images/qp/idx3lu1.gif b/www/images/qp/idx3lu1.gif
new file mode 100644
index 0000000..794b2bd
--- /dev/null
+++ b/www/images/qp/idx3lu1.gif
Binary files differ
diff --git a/www/images/qp/idx3lu2.gif b/www/images/qp/idx3lu2.gif
new file mode 100644
index 0000000..b747d52
--- /dev/null
+++ b/www/images/qp/idx3lu2.gif
Binary files differ
diff --git a/www/images/qp/idx4.gif b/www/images/qp/idx4.gif
new file mode 100644
index 0000000..762ba17
--- /dev/null
+++ b/www/images/qp/idx4.gif
Binary files differ
diff --git a/www/images/qp/idx4lu1.gif b/www/images/qp/idx4lu1.gif
new file mode 100644
index 0000000..9444e1c
--- /dev/null
+++ b/www/images/qp/idx4lu1.gif
Binary files differ
diff --git a/www/images/qp/obfruitidx1.gif b/www/images/qp/obfruitidx1.gif
new file mode 100644
index 0000000..3aa589b
--- /dev/null
+++ b/www/images/qp/obfruitidx1.gif
Binary files differ
diff --git a/www/images/qp/obfruitidx4.gif b/www/images/qp/obfruitidx4.gif
new file mode 100644
index 0000000..a96e17f
--- /dev/null
+++ b/www/images/qp/obfruitidx4.gif
Binary files differ
diff --git a/www/images/qp/obfruitnoidx.gif b/www/images/qp/obfruitnoidx.gif
new file mode 100644
index 0000000..253e1f4
--- /dev/null
+++ b/www/images/qp/obfruitnoidx.gif
Binary files differ
diff --git a/www/images/qp/obrowid.gif b/www/images/qp/obrowid.gif
new file mode 100644
index 0000000..47b0000
--- /dev/null
+++ b/www/images/qp/obrowid.gif
Binary files differ
diff --git a/www/images/qp/orquery.gif b/www/images/qp/orquery.gif
new file mode 100644
index 0000000..01566d5
--- /dev/null
+++ b/www/images/qp/orquery.gif
Binary files differ
diff --git a/www/images/qp/partial-sort.gif b/www/images/qp/partial-sort.gif
new file mode 100644
index 0000000..ae8053b
--- /dev/null
+++ b/www/images/qp/partial-sort.gif
Binary files differ
diff --git a/www/images/qp/rowidlu.gif b/www/images/qp/rowidlu.gif
new file mode 100644
index 0000000..0e6e6bf
--- /dev/null
+++ b/www/images/qp/rowidlu.gif
Binary files differ
diff --git a/www/images/qp/tab.gif b/www/images/qp/tab.gif
new file mode 100644
index 0000000..990c393
--- /dev/null
+++ b/www/images/qp/tab.gif
Binary files differ
diff --git a/www/images/qp/tpchq8.gif b/www/images/qp/tpchq8.gif
new file mode 100644
index 0000000..a290743
--- /dev/null
+++ b/www/images/qp/tpchq8.gif
Binary files differ
diff --git a/www/images/qp/tpchq8.pikchr b/www/images/qp/tpchq8.pikchr
new file mode 100644
index 0000000..3ad9ebc
--- /dev/null
+++ b/www/images/qp/tpchq8.pikchr
@@ -0,0 +1,53 @@
+circle "S" big big bold fit rad 110%
+circlerad = S.rad
+movewid = S.diameter*0.8
+move
+circle "L" big big bold
+move
+circle "O" big big bold
+move
+circle "C" big big bold
+move
+circle "N1" big big bold
+move
+circle "R" big big bold
+circle "P" big big bold with .n at movewid below L.s
+circle "N2" big big bold with .e at movewid left of S.w
+
+define double_arrow {
+ spline -> from 0.5mm above $1.e \
+ then to 2mm above 0.5<$1,$2> \
+ then to 0.5mm above $2.w
+ text $3 small above at 2nd vertex of previous
+ spline <- from 0.5mm below $1.e \
+ then to 2mm below 0.5<$1,$2> \
+ then to 0.5mm below $2.w
+ text $4 small below at 2nd vertex of previous
+}
+double_arrow(N2,S,"6.00","2.08")
+double_arrow(S,L,"9.17","2.30")
+double_arrow(L,O,"2.77","4.03")
+double_arrow(O,C,"2.64","5.30")
+double_arrow(C,N1,"2.08","6.40")
+double_arrow(N1,R,"1.79","3.47")
+spline -> from 0.5mm right of L.s \
+ then to 2mm right of 0.5<L,P> \
+ then to 0.5mm right of P.n
+text "2.64" small ljust at 2nd vertex of previous
+spline <- from 0.5mm left of L.s \
+ then to 2mm left of 0.5<L,P> \
+ then to 0.5mm left of P.n
+text "6.01" small rjust at 2nd vertex of previous
+define any_down {
+ circle "*" bold rad 0.5*circlerad with .s at movewid above $1.n
+ arrow from previous.s to $1.n $2 small ljust
+}
+any_down(N2," 5.52")
+any_down(S, " 9.47")
+any_down(L, " 16.40")
+any_down(O, " 13.87")
+any_down(C, " 12.56")
+any_down(N1," 5.52")
+any_down(R, " 3.56")
+circle "*" bold rad 0.5*circlerad with .n at movewid below P.s
+arrow from previous.n to P.s " 7.71" small ljust
diff --git a/www/images/se.gif b/www/images/se.gif
new file mode 100644
index 0000000..791065d
--- /dev/null
+++ b/www/images/se.gif
Binary files differ
diff --git a/www/images/se.png b/www/images/se.png
new file mode 100644
index 0000000..493ab40
--- /dev/null
+++ b/www/images/se.png
Binary files differ
diff --git a/www/images/shane1.jpg b/www/images/shane1.jpg
new file mode 100644
index 0000000..533f2cf
--- /dev/null
+++ b/www/images/shane1.jpg
Binary files differ
diff --git a/www/images/shared.gif b/www/images/shared.gif
new file mode 100644
index 0000000..9b7be7c
--- /dev/null
+++ b/www/images/shared.gif
Binary files differ
diff --git a/www/images/sqlite370.jpg b/www/images/sqlite370.jpg
new file mode 100644
index 0000000..840afa9
--- /dev/null
+++ b/www/images/sqlite370.jpg
Binary files differ
diff --git a/www/images/sqlite370_banner.gif b/www/images/sqlite370_banner.gif
new file mode 100644
index 0000000..c63fdc4
--- /dev/null
+++ b/www/images/sqlite370_banner.gif
Binary files differ
diff --git a/www/images/sqlitepie.jpg b/www/images/sqlitepie.jpg
new file mode 100644
index 0000000..e695027
--- /dev/null
+++ b/www/images/sqlitepie.jpg
Binary files differ
diff --git a/www/images/src_logo.gif b/www/images/src_logo.gif
new file mode 100644
index 0000000..c63ff6d
--- /dev/null
+++ b/www/images/src_logo.gif
Binary files differ
diff --git a/www/images/sschart20221116.jpg b/www/images/sschart20221116.jpg
new file mode 100644
index 0000000..59e102d
--- /dev/null
+++ b/www/images/sschart20221116.jpg
Binary files differ
diff --git a/www/images/sw.gif b/www/images/sw.gif
new file mode 100644
index 0000000..3eb5515
--- /dev/null
+++ b/www/images/sw.gif
Binary files differ
diff --git a/www/images/sw.png b/www/images/sw.png
new file mode 100644
index 0000000..f8535af
--- /dev/null
+++ b/www/images/sw.png
Binary files differ
diff --git a/www/images/table-ex1b2.gif b/www/images/table-ex1b2.gif
new file mode 100644
index 0000000..5f68e0a
--- /dev/null
+++ b/www/images/table-ex1b2.gif
Binary files differ
diff --git a/www/images/vfs1.gif b/www/images/vfs1.gif
new file mode 100644
index 0000000..43bcbd7
--- /dev/null
+++ b/www/images/vfs1.gif
Binary files differ
diff --git a/www/imposter.html b/www/imposter.html
new file mode 100644
index 0000000..c191401
--- /dev/null
+++ b/www/imposter.html
@@ -0,0 +1,351 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Imposter Tables</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Imposter Tables
+</div>
+</div>
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>
+An imposter table is a table that is attached to the same <a href="fileformat2.html#btree">b-tree</a>
+as an index.
+An imposter table allows the content of an index to be queried or
+modified as if the index were an ordinary table.
+</p>
+
+<p>
+Imposter tables are intended for analysis and debugging only.
+This is not a feature that most application developers should understand
+or even know about.
+Imposter tables are for experts only.
+</p>
+
+<p>
+Improper use of imposter tables can cause index corruption, though
+any corruption created this way can be fixed by running <a href="lang_reindex.html">REINDEX</a>.
+</p>
+
+<h1 id="details"><span>2. </span>Details</h1>
+
+<p>
+Each table and each index in SQLite is stored in a separate b-tree
+in the database file. Each b-tree is identified by its root page
+number. The root page number for any index or table can be found
+by querying the "rootpage" column of the <a href="schematab.html">sqlite_schema table</a>.
+See the <a href="queryplanner.html">indexing tutorial</a> and the <a href="fileformat2.html">file format</a> documentation
+for further background on this design.
+</p>
+
+<p>
+Usually the b-trees for tables and indexes are slightly different.
+A table b-tree contains a 64-bit integer key and arbitrary data.
+The 64-bit integer key is the <a href="lang_createtable.html#rowid">ROWID</a>. Index b-trees contain
+an arbitrary binary key and no data. So table b-trees and index
+b-trees are not directly compatible.
+</p>
+
+<p>
+However, the b-tree for a <a href="withoutrowid.html">WITHOUT ROWID</a> table is in the same format
+as an index b-tree. Thus, an index b-tree can be accessed as if it
+were a WITHOUT ROWID table.
+</p>
+
+<h2 id="manually_created_imposter_tables"><span>2.1. </span>Manually Created Imposter Tables</h2>
+
+<p>
+One way to create an imposter table is to directly edit the sqlite_schema
+table to insert a new row that describes the table.
+For example, suppose the schema is like this:
+</p>
+
+<div class="codeblock"><pre>CREATE TABLE t1(a INTEGER PRIMARY KEY,b TEXT,c INT, d INT);
+CREATE INDEX t1bc ON t1(b,c);
+</pre></div>
+
+<p>
+The WITHOUT ROWID table that has the same structure as the t1bc index
+would look like this:
+</p>
+
+<div class="codeblock"><pre>CREATE TABLE t2(b TEXT,c INT,a INT, PRIMARY KEY(b,c,a)) WITHOUT ROWID;
+</pre></div>
+
+<p>
+To create a permanent imposter table "t2" against index "t1bc" one
+should first enable editing of the sqlite_schema table by running
+"<a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>".
+(Be careful to observe the warnings that accompany this PRAGMA.
+A mistake can cause severe database corruption.)
+Then insert a new entry into the sqlite_schema table like this:
+</p>
+
+<div class="codeblock"><pre>INSERT INTO sqlite_schema(type,name,tbl_name,rootpage,sql)
+ SELECT 'table','t2','t2',rootpage,
+ 'CREATE TABLE t2(b,c,a,PRIMARY KEY(b,c,a))WITHOUT ROWID'
+ FROM sqlite_schema
+ WHERE name='t1bc';
+</pre></div>
+
+<p>
+The INSERT statement above adds a new row to the sqlite_schema table that
+defines a table "t2" having the same on-disk format as index "t1bc" and
+pointing to the same b-tree.
+After adding this sqlite_schema table entry, it is necessary to close and
+reopen the database in order to get SQLite to reread the schema.
+Then the "t2" table can be queried to see the content of the "t1bc" index.
+</p>
+
+<h3 id="corrupted_database"><span>2.1.1. </span>Corrupted Database</h3>
+
+<p>
+A serious problem with the manual imposter table approach described above
+is that after adding the new "t2" entry to the "sqlite_schema" table, the
+database file will technically be corrupt. Both the "t1bc" index and the
+"t2" table will point to the same b-tree. This will not cause
+any immediate problems, though one should avoid running <a href="lang_vacuum.html">VACUUM</a>.
+</p>
+
+<p>
+It is possible to write into the "t2" table, thus changing the content
+of the index.
+But doing so will get the "t1bc" index out of synchronization with its
+parent table "t1". An out-of-sync index can result in incorrect query
+results.
+</p>
+
+<p>
+Since the "t2" imposter table is a form of database corruption, the
+manual approach to creating imposter tables is not recommended.
+Actually, any use of imposter tables is discouraged for all but
+expert developers, but manually created imposter tables are
+especially discouraged because they are permanent.
+</p>
+
+<h2 id="transient_imposter_tables"><span>2.2. </span>Transient Imposter Tables</h2>
+
+<p>
+Another (safer) approach to creating an imposter table is to add an
+entry for the imposter table to SQLite's internal symbol table without
+updating the "sqlite_schema" table on disk.
+That way, the imposter table exists in only a single database connection
+and is automatically removed whenever the schema is reloaded.
+</p>
+
+<p>
+Creation of a transient imposter table involves a special
+<a href="c3ref/test_control.html">sqlite3_test_control()</a> call. Unlike all other SQLite APIs,
+<a href="c3ref/test_control.html">sqlite3_test_control()</a> interface is subject to incompatible changes
+from one release to the next, and so the mechanism described below
+is not guaranteed to work in future releases of SQLite. The
+SQLite developers do not consider this a problem because imposter
+tables should not be used in applications. Imposter tables are for
+analysis and testing use only.
+</p>
+
+<p>
+To create a transient imposter table, first call sqlite3_test_control()
+as follows:
+</p>
+
+<div class="codeblock"><pre>sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, "main", 1, tnum);
+</pre></div>
+
+<p>
+The "db" parameter is a pointer to the <a href="c3ref/sqlite3.html">database connection</a>.
+The "main" argument is the name of the schema in which the imposter
+table is to be created. The "1" argument enables the imposter table
+mechanism. "tnum" is the root page of the index that the imposter
+table should mirror.
+</p>
+
+<p>
+After the sqlite3_test_control() call above, then run a <a href="lang_createtable.html">CREATE TABLE</a>
+statement the defines the imposter table.
+With the imposter mechanism enabled, this CREATE TABLE statement does
+not create a real table but instead merely adds an entry in SQLite's
+internal symbol table. Note that the CREATE TABLE statement must
+be in the correct format for the index. If the imposter table has the
+wrong number of columns or is not a <a href="withoutrowid.html">WITHOUT ROWID</a> table or is otherwise
+incompatible with the index b-tree, then <a href="rescode.html#corrupt">SQLITE_CORRUPT</a> errors will result
+when the imposter table is used.
+</p>
+
+<p>
+After running the CREATE TABLE statement, disable the imposter mechanism
+as follows:
+</p>
+
+<div class="codeblock"><pre>sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, "main", 0, 0);
+</pre></div>
+
+<p>
+In other words, make the same sqlite3_test_control() call except change
+the last two parameters to zero.
+</p>
+
+<p>
+After the imposter table is loaded into SQLite's internal schema as
+described above, the imposter table can be used as any other table.
+But the imposter table will only be visible to the one database
+connection that created it. No changes are made to the database file
+on disk. And the imposter table will disappear the next time the schema
+is loaded.
+</p>
+
+<a name="dotimposter"></a>
+
+<h2 id="the_imposter_shell_command"><span>2.3. </span>The .imposter Shell Command</h2>
+
+<p>
+As of SQLite 3.16.0 (2017-01-02), the <a href="cli.html">command-line shell</a> contains
+a dot-command ".imposter" that does all of the work of setting up a
+transient imposter table.
+Instead of making multiple calls to sqlite3_test_control() and figuring
+out and invoking a compatible CREATE TABLE statement, a transient
+imposter table can be constructed as follows:
+</p>
+
+<div class="codeblock"><pre>.imposter t1bc t2
+</pre></div>
+
+<p>
+Of course, substitute the desired index and imposter table names in
+place of the "t1bc" and "t2" shown in the example.
+The ".imposter" command reads the schema of the "t1bc" index, uses
+that information to construct a compatible CREATE TABLE statement for
+the imposter table, then makes all the necessary calls to create the
+transient imposter table automatically.
+</p>
+
+<h1 id="summary_and_final_warning"><span>3. </span>Summary And Final Warning</h1>
+
+<p>
+The imposter table mechanism is a power analysis and debugging tool
+for SQLite. But as with all sharp tools, it can also be dangerous and
+can result in corrupt database files if misused. Do not attempt to
+use imposter tables in an application. Imposter tables are intended
+for use in the laboratory by experts.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/imposter.in?m=219fd65ee2ac4eadd">2020-06-18 21:18:56</a> UTC </small></i></p>
+
diff --git a/www/index.html b/www/index.html
new file mode 100644
index 0000000..3530533
--- /dev/null
+++ b/www/index.html
@@ -0,0 +1,290 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Home Page</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+
+<div class="rightsidebar desktoponly border2px">
+<h3 align="center">Common Links</h3>
+<ul class=nounderline>
+<li> <a href="features.html">Features</a> </li>
+<li> <a href="whentouse.html">When to use SQLite</a> </li>
+<li> <a href="quickstart.html">Getting Started</a> </li>
+<li> <a href="https://sqlite.org/fiddle">Try it live!</li>
+<li> <a href="chronology.html">Prior Releases</a>
+<li> <a href="lang.html">SQL Syntax</a>
+<ul>
+<li> <a href="pragma.html#toc">Pragmas</a>
+<li> <a href="lang_corefunc.html">SQL functions</a>
+<li> <a href="lang_datefunc.html">Date &amp; time functions</a>
+<li> <a href="lang_aggfunc.html#aggfunclist">Aggregate functions</a>
+<li> <a href="windowfunctions.html#biwinfunc">Window functions</a>
+<li> <a href="lang_mathfunc.html">Math functions</a>
+<li> <a href="json1.html">JSON functions</a>
+</ul>
+</li>
+<li> <a href="c3ref/intro.html">C/C++ Interface Spec</a>
+<ul>
+<li> <a href="cintro.html">Introduction</a>
+<li> <a href="c3ref/funclist.html">List of C-language APIs</a>
+</ul>
+</li>
+<li> <a href="tclsqlite.html">The TCL Interface Spec</a>
+<li> <a href="quirks.html">Quirks and Gotchas</a> </li>
+<li> <a href="faq.html">Frequently Asked Questions</a> </li>
+<li> <a href="http://www.sqlite.org/src/timeline?n=100&y=ci">Commit History</a> </li>
+<li> <a href="http://www.sqlite.org/src/wiki?name=Bug+Reports">Bugs</a> </li>
+<li> <a href="news.html">News</a> </li>
+</ul>
+
+</div>
+
+<h3>What Is SQLite?</h3>
+
+<p>SQLite is a C-language library that implements a
+<a href="footprint.html">small</a>,
+<a href="fasterthanfs.html">fast</a>,
+<a href="selfcontained.html">self-contained</a>,
+<a href="hirely.html">high-reliability</a>,
+<a href="fullsql.html">full-featured</a>,
+SQL database engine.
+SQLite is the <a href="mostdeployed.html">most used</a> database engine in the world.
+SQLite is built into all mobile phones and most computers and
+comes bundled inside countless other applications that people
+use every day.
+<a href="about.html">More Information...</a>
+
+<p>
+The SQLite <a href="fileformat2.html">file format</a> is stable, cross-platform, and
+backwards compatible and the developers pledge to keep it
+that way <a href="lts.html">through the year 2050</a>. SQLite database
+files are commonly used as containers to transfer rich
+content between systems
+<a href="aff_short.html">&#91;1&#93;</a>
+<a href="sqlar.html">&#91;2&#93;</a>
+<a href="appfileformat.html">&#91;3&#93;</a>
+and as a long-term archival format
+for data
+<a href="locrsf.html">&#91;4&#93;</a>.
+There are over 1 trillion (1e12)
+SQLite databases in active use
+<a href="mostdeployed.html">&#91;5&#93;</a>.
+
+<p>
+SQLite <a href="https://sqlite.org/src">source code</a>
+is in the <a href="copyright.html">public-domain</a> and is free to
+everyone to use for any purpose.
+
+<h3>Latest Release</h3>
+<a href="releaselog/3_40_1.html">Version 3.40.1</a> (2022-12-28).
+<a class="button" href="download.html">Download</a>
+<a class="button" href="chronology.html">Prior Releases</a>
+
+<div class="mobileonly">
+<h3>Common Links</h3>
+<ul class=nounderline>
+<li> <a href="features.html">Features</a> </li>
+<li> <a href="whentouse.html">When to use SQLite</a> </li>
+<li> <a href="quickstart.html">Getting Started</a> </li>
+<li> <a href="https://sqlite.org/fiddle">Try it live!</li>
+<li> <a href="chronology.html">Prior Releases</a>
+<li> <a href="lang.html">SQL Syntax</a>
+<ul>
+<li> <a href="pragma.html#toc">Pragmas</a>
+<li> <a href="lang_corefunc.html">SQL functions</a>
+<li> <a href="lang_datefunc.html">Date &amp; time functions</a>
+<li> <a href="lang_aggfunc.html#aggfunclist">Aggregate functions</a>
+<li> <a href="windowfunctions.html#biwinfunc">Window functions</a>
+<li> <a href="lang_mathfunc.html">Math functions</a>
+<li> <a href="json1.html">JSON functions</a>
+</ul>
+</li>
+<li> <a href="c3ref/intro.html">C/C++ Interface Spec</a>
+<ul>
+<li> <a href="cintro.html">Introduction</a>
+<li> <a href="c3ref/funclist.html">List of C-language APIs</a>
+</ul>
+</li>
+<li> <a href="tclsqlite.html">The TCL Interface Spec</a>
+<li> <a href="quirks.html">Quirks and Gotchas</a> </li>
+<li> <a href="faq.html">Frequently Asked Questions</a> </li>
+<li> <a href="http://www.sqlite.org/src/timeline?n=100&y=ci">Commit History</a> </li>
+<li> <a href="http://www.sqlite.org/src/wiki?name=Bug+Reports">Bugs</a> </li>
+<li> <a href="news.html">News</a> </li>
+</ul>
+
+</div>
+
+<br clear="both">
+<hr class="xhr">
+<p>Ongoing development and support of SQLite is made possible in part
+by <a href="consortium.html">SQLite Consortium</a> members, including:</p>
+<a name="consortium_members"></a>
+<style>
+#sponsors {
+ margin:auto;
+ width:80%;
+}
+.onesponsor a img {
+ width:200px;
+ max-width:200px;
+ padding:1ex;
+}
+</style>
+<div id="sponsors"></div>
+<script>
+ var sponsors = [{
+ "name":"Bloomberg",
+ "href":"https://www.techatbloomberg.com/",
+ "src":"bloomberg.png",
+ "wx":0
+ },{
+ "name":"Bentley",
+ "href":"https://www.bentley.com/",
+ "src":"bentley.gif",
+ "wx":0
+ },{
+ "name":"NDS",
+ "href":"http://www.nds-association.org/",
+ "src":"nds.png",
+ "wx":0
+ },{
+ "name":"Expensify",
+ "href":"https://www.expensify.com/",
+ "src":"expensify.png",
+ "wx":225,
+ "hx":32
+ }];
+
+ for(var i=0; i<sponsors.length; i++){sponsors[i].idx = Math.random();}
+ sponsors.sort(function(a,b){return a.idx-b.idx});
+ var h = "";
+ for(var i=0; i<sponsors.length; i++){
+ h += "<span class='onesponsor'><a href='";
+ h += sponsors[i].href;
+ h += "'><img src='images/foreignlogos/";
+ h += sponsors[i].src;
+ h += "'></a></span>\n";
+ }
+ document.getElementById("sponsors").innerHTML = h;
+
+</script>
+<br clear="both">
+<hr class="xhr">
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/index.in?m=e00bc27018a99438d">2022-12-27 16:51:24</a> UTC </small></i></p>
+
diff --git a/www/inmemorydb.html b/www/inmemorydb.html
new file mode 100644
index 0000000..642d5c0
--- /dev/null
+++ b/www/inmemorydb.html
@@ -0,0 +1,252 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>In-Memory Databases</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">In-Memory Databases</h1>
+
+<p>An SQLite database is normally stored in a single ordinary disk
+file. However, in certain circumstances, the database might be stored in
+memory.</p>
+
+<p>The most common way to force an SQLite database to exist purely
+in memory is to open the database using the special filename
+"<b>:memory:</b>". In other words, instead of passing the name of
+a real disk file into one of the <a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/open.html">sqlite3_open16()</a>, or
+<a href="c3ref/open.html">sqlite3_open_v2()</a> functions, pass in the string ":memory:". For
+example:</p>
+
+<blockquote><pre>
+rc = sqlite3_open(":memory:", &amp;db);
+</pre></blockquote>
+
+<p>When this is done, no disk file is opened.
+Instead, a new database is created
+purely in memory. The database ceases to exist as soon as the database
+connection is closed. Every :memory: database is distinct from every
+other. So, opening two database connections each with the filename
+":memory:" will create two independent in-memory databases.</p>
+
+<p>The special filename ":memory:" can be used anywhere that a database
+filename is permitted. For example, it can be used as the
+<i>filename</i> in an <a href="lang_attach.html">ATTACH</a> command:</p>
+
+<blockquote><pre>
+ATTACH DATABASE ':memory:' AS aux1;
+</pre></blockquote>
+
+<p>Note that in order for the special ":memory:" name to apply and to
+create a pure in-memory database, there must be no additional text in the
+filename. Thus, a disk-based database can be created in a file by prepending
+a pathname, like this: "./:memory:".</p>
+
+<p>The special ":memory:" filename also works when using <a href="uri.html">URI filenames</a>.
+For example:
+
+<blockquote><pre>
+rc = sqlite3_open("file::memory:", &amp;db);
+</pre></blockquote>
+
+Or,
+
+<blockquote><pre>
+ATTACH DATABASE 'file::memory:' AS aux1;
+</pre></blockquote>
+
+<a name="sharedmemdb"></a>
+
+<h2>In-memory Databases And Shared Cache</h2>
+
+<p>In-memory databases are allowed to use <a href="sharedcache.html">shared cache</a> if they are
+opened using a <a href="uri.html">URI filename</a>. If the unadorned ":memory:" name is used
+to specify the in-memory database, then that database always has a private
+cache and is only visible to the database connection that originally
+opened it. However, the same in-memory database can be opened by two or
+more database connections as follows:
+
+<blockquote><pre>
+rc = sqlite3_open("file::memory:?cache=shared", &amp;db);
+</pre></blockquote>
+
+Or,
+
+<blockquote><pre>
+ATTACH DATABASE 'file::memory:?cache=shared' AS aux1;
+</pre></blockquote>
+
+<p>This allows separate database connections to share the same
+in-memory database. Of course, all database connections sharing the
+in-memory database need to be in the same process. The database is
+automatically deleted and memory is reclaimed when the last connection
+to the database closes.
+
+<p>If two or more distinct but shareable in-memory databases are needed
+in a single process, then the <a href="uri.html#coreqp">mode=memory</a> query parameter can
+be used with a <a href="uri.html">URI filename</a> to create a named in-memory database:
+
+<blockquote><pre>
+rc = sqlite3_open("file:memdb1?mode=memory&amp;cache=shared", &amp;db);
+</pre></blockquote>
+
+Or,
+
+<blockquote><pre>
+ATTACH DATABASE 'file:memdb1?mode=memory&amp;cache=shared' AS aux1;
+</pre></blockquote>
+
+<p>When an in-memory database is named in this way, it will only share its
+cache with another connection that uses exactly the same name.
+
+
+
+<a name="temp_db"></a>
+
+<h2>Temporary Databases</h2>
+
+<p>When the name of the database file handed to <a href="c3ref/open.html">sqlite3_open()</a> or to
+<a href="lang_attach.html">ATTACH</a> is an empty string, then a new temporary file is created to hold
+the database.</p>
+
+<blockquote><pre>
+rc = sqlite3_open("", &amp;db);
+</pre></blockquote>
+
+<blockquote><pre>
+ATTACH DATABASE '' AS aux2;
+</pre></blockquote>
+
+<p>A different temporary file is created each time so that, just as
+with the special ":memory:" string, two database connections to temporary
+databases each have their own private database. Temporary databases are
+automatically deleted when the connection that created them closes.</p>
+
+<p>Even though a disk file is allocated for each temporary database, in
+practice the temporary database usually resides in the in-memory pager cache
+and hence there is very little difference between a pure in-memory database
+created by ":memory:" and a temporary database created by an empty filename.
+The sole difference is that a ":memory:" database must remain in memory
+at all times whereas parts of a temporary database might be flushed to disk
+if the database becomes large or if SQLite comes under memory pressure.</p>
+
+<p>The previous paragraphs describe the behavior of temporary databases
+under the default SQLite configuration. An application can use the
+<a href="pragma.html#pragma_temp_store">temp_store pragma</a> and the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter to
+force temporary databases to behave as pure in-memory databases, if desired.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/inmemorydb.in?m=2e26d2c7a83949f5c">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/intern-v-extern-blob.html b/www/intern-v-extern-blob.html
new file mode 100644
index 0000000..a369e8c
--- /dev/null
+++ b/www/intern-v-extern-blob.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Internal Versus External BLOBs</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<body>
+<h1 align="center">
+Internal Versus External BLOBs in SQLite
+</h1>
+
+<p>
+If you have a database of large BLOBs, do you get better read performance
+when you store the complete
+BLOB content directly in the database or is it faster to store each BLOB
+in a separate file and store just the corresponding filename in the database?
+</p>
+
+<p>
+To try to answer this, we ran 49 test cases with various BLOB sizes and
+SQLite page sizes on a Linux workstation (Ubuntu circa 2011 with the
+Ext4 filesystem on a fast SATA disk).
+For each test case, a database was created containing 100MB of BLOB
+content. The sizes of the BLOBs ranged from 10KB to 1MB. The number
+of BLOBs varied in order to keep the total BLOB content at about 100MB.
+(Hence, 100 BLOBs for the 1MB size and 10000 BLOBs for the 10K size and
+so forth.) SQLite <a href="releaselog/3_7_8.html">version 3.7.8</a> (2011-09-19) was used.
+</p>
+
+<blockquote><i>
+Update: New measurements for SQLite version 3.19.0
+(2017-05-22) show that SQLite is about
+<a href="fasterthanfs.html">35% faster</a> than direct disk I/O for
+both reads and writes of 10KB blobs.
+</i></blockquote>
+
+<p>
+The matrix below shows the time needed to read BLOBs stored in separate files
+divided by the time needed to read BLOBs stored entirely in the database.
+Hence, for numbers larger than 1.0, it is faster to store the BLOBs directly
+in the database. For numbers smaller than 1.0, it is faster to store the BLOBs
+in separate files.
+</p>
+
+<p>
+In every case, the pager cache size was adjusted to keep the amount of
+cache memory at about 2MB.
+For example, a 2000 page cache was used for 1024 byte pages
+and a 31 page cache was used for 65536 byte pages.
+The BLOB values were read in a random order.
+</p>
+
+<table border="1" cellpadding="5" cellspacing="0" align="center">
+<tr>
+<th rowspan="2">Database Page Size<th colspan="7">BLOB size
+<tr>
+<th>10k<th>20k<th>50k<th>100k<th>200k<th>500k<th>1m
+
+<tr>
+<td>1024<td bgcolor="#b1d3a8">1.535<td bgcolor="#b1d3a8">1.020<td bgcolor="#ffc0d0">0.608<td bgcolor="#ffc0d0">0.456<td bgcolor="#ffc0d0">0.330<td bgcolor="#ffc0d0">0.247<td bgcolor="#ffc0d0">0.233
+
+<tr>
+<td>2048<td bgcolor="#b1d3a8">2.004<td bgcolor="#b1d3a8">1.437<td bgcolor="#ffc0d0">0.870<td bgcolor="#ffc0d0">0.636<td bgcolor="#ffc0d0">0.483<td bgcolor="#ffc0d0">0.372<td bgcolor="#ffc0d0">0.340
+
+<tr>
+<td>4096<td bgcolor="#b1d3a8">2.261<td bgcolor="#b1d3a8">1.886<td bgcolor="#b1d3a8">1.173<td bgcolor="#ffc0d0">0.890<td bgcolor="#ffc0d0">0.701<td bgcolor="#ffc0d0">0.526<td bgcolor="#ffc0d0">0.487
+
+<tr>
+<td>8192<td bgcolor="#b1d3a8">2.240<td bgcolor="#b1d3a8">1.866<td bgcolor="#b1d3a8">1.334<td bgcolor="#b1d3a8">1.035<td bgcolor="#ffc0d0">0.830<td bgcolor="#ffc0d0">0.625<td bgcolor="#ffc0d0">0.720
+
+<tr>
+<td>16384<td bgcolor="#b1d3a8">2.439<td bgcolor="#b1d3a8">1.757<td bgcolor="#b1d3a8">1.292<td bgcolor="#b1d3a8">1.023<td bgcolor="#ffc0d0">0.829<td bgcolor="#ffc0d0">0.820<td bgcolor="#ffc0d0">0.598
+
+<tr>
+<td>32768<td bgcolor="#b1d3a8">1.878<td bgcolor="#b1d3a8">1.843<td bgcolor="#b1d3a8">1.296<td bgcolor="#ffc0d0">0.981<td bgcolor="#ffc0d0">0.976<td bgcolor="#ffc0d0">0.675<td bgcolor="#ffc0d0">0.613
+
+<tr>
+<td>65536<td bgcolor="#b1d3a8">1.256<td bgcolor="#b1d3a8">1.255<td bgcolor="#b1d3a8">1.339<td bgcolor="#ffc0d0">0.983<td bgcolor="#ffc0d0">0.769<td bgcolor="#ffc0d0">0.687<td bgcolor="#ffc0d0">0.609
+
+</table>
+
+
+<p>We deduce the following rules of thumb from the matrix above:</p>
+
+<ul>
+<li><p>
+A database page size of 8192 or 16384 gives the best performance
+for large BLOB I/O.
+
+<li><p>For BLOBs smaller than 100KB, reads are faster when
+the BLOBs are stored directly in the database file. For BLOBs larger than
+100KB, reads from a separate file are faster.
+</ul>
+
+<p>Of course, your mileage may vary depending on hardware, filesystem,
+and operating system. Double-check these figures on target hardware
+before committing to a particular design.
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/intern-v-extern-blob.in?m=1022bf722817526ca">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/invalidutf.html b/www/invalidutf.html
new file mode 100644
index 0000000..2fce42d
--- /dev/null
+++ b/www/invalidutf.html
@@ -0,0 +1,230 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Invalid UTF Policy</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Invalid UTF Policy
+</div>
+</div>
+
+
+
+
+
+<h1 id="garbage_in_garbage_out"><span>1. </span>Garbage In, Garbage Out</h1>
+
+<p>
+With regard to invalid UTF, SQLite follows a policy of
+Garbage-In, Garbage-Out (GIGO). If you insert invalid UTF
+into an SQLite database, then try to query that data, what you get back out
+might not be exactly what you put in. If you put garbage in, then you
+may not complain if you get different garbage back out.
+
+</p><p>
+For the purposes of this discussion, "invalid UTF" can mean any of
+the following circumstances:
+
+</p><ul>
+<li><p>
+Invalid surrogate pairs in UTF-16.
+
+</p></li><li><p>
+Invalid multi-byte sequences in UTF-8.
+
+</p></li><li><p>
+Using more bytes of UTF-8 than necessary to represent a single
+code point. (Example: encoding 'A' as the two-byte sequence
+0xc1, 0x01 instead of just a single 0x41 byte.)
+
+</p></li><li><p>
+NUL characters (U+0000) embedded in strings.
+
+</p></li><li><p>
+Invalid sequences of combining characters.
+
+</p></li><li><p>
+UTF-8 or UTF-16 bytes sequences that encode numbers that are not
+defined Unicode characters.
+
+</p></li></ul>
+
+<h2 id="invalid_utf_will_never_cause_memory_errors"><span>1.1. </span>Invalid UTF will never cause memory errors</h2>
+
+<p>
+If you insert invalid UTF into an SQLite database, then SQLite makes
+no guarantees about what text you might get back out. But it does
+promise that invalid UTF will never cause memory errors
+(array overruns, reads or writes of uninitialized memory, etc), at
+least for the built-in processing of SQLite.
+In other words, invalid UTF will not cause SQLite to crash.
+
+</p><p>
+This promise only applies to the core SQLite components, not
+application-provided extensions, of course.
+If an application adds new application-defined SQL functions or
+virtual tables or collating sequences or other extensions, and a
+database contains invalid UTF, then invalid UTF might get passed
+into those extensions. If the invalid UTF causes one of those
+extensions to crash, then that is a problem with the extension,
+not with SQLite.
+
+</p><h1 id="no_enforcement_of_text_formatting_rules"><span>2. </span>No enforcement of text formatting rules</h1>
+
+<p>
+SQLite does not try to enforce UTF formatting rules. You can
+insert invalid UTF into a TEXT field and SQLite will not complain
+about this. It stores the invalid TEXT as best it can. SQLite
+sees its role in the world as a storage engine, not a text format
+validation engine.
+
+</p><h1 id="best_effort_to_preserve_text"><span>3. </span>Best effort to preserve text</h1>
+
+<p>
+SQLite does not promise to always preserve invalid UTF, but it does
+make an effort. Generally speaking, if you insert invalid UTF into
+SQLite, you will get the exact same byte sequence back out, as long
+as you do not ask SQLite to transform the text in any way.
+
+</p><p>
+For example, if you insert some UTF-16LE with invalid surrogates into
+a TEXT column of a table of a database that has <a href="pragma.html#pragma_encoding">PRAGMA encoding=UTF16LE</a>,
+then later query that column using <a href="c3ref/column_blob.html">sqlite3_column_text16()</a>, you will
+probably get back the same exact invalid UTF-16. But if you insert the
+same invalid UTF-16LE content in a <a href="pragma.html#pragma_encoding">PRAGMA encoding=UTF8</a> database,
+the content must be converted into UTF8 when it is stored, which could
+cause irreversible changes to the content. Or if you insert that
+same invalid UTF-16LE content into a <a href="pragma.html#pragma_encoding">PRAGMA encoding=UTF16LE</a> database
+but then read it out using <a href="c3ref/column_blob.html">sqlite3_column_text()</a>, then a UTF16 to
+UTF8 conversion must occur during the read-out and that conversion might
+introduce irreversible changes.
+
+</p><p>
+Or, suppose you are doing everything using UTF-8 (the most common case).
+Invalid UTF-8 will normally pass through the database without any change
+in its byte sequence. However, if you try to transform the invalid
+UTF-8 with SQL function like <a href="lang_corefunc.html#substr">substr()</a> or <a href="lang_corefunc.html#replace">replace()</a>
+or if you try to do string matching with the <a href="lang_expr.html#like">LIKE</a> operator, then
+you might get unexpected results.
+
+</p><p>
+So, in other words, SQLite does not actively try to subvert your
+invalid text. But when you ask SQLite to make transformations of invalid
+UTF, there are no guarantees that those transformations will be reversible
+or even sensible.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/invalidutf.in?m=36c2d62680437c3b4">2021-12-13 15:03:51</a> UTC </small></i></p>
+
diff --git a/www/isolation.html b/www/isolation.html
new file mode 100644
index 0000000..6bfd439
--- /dev/null
+++ b/www/isolation.html
@@ -0,0 +1,370 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Isolation In SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">
+Isolation In SQLite
+</h1>
+
+<p>
+The "isolation" property of a database determines when changes made to
+the database by one operation become visible to other concurrent operations.
+</p>
+
+<h2>Isolation Between Database Connections</h2>
+
+<p>
+If the same database is being read and written using two different
+<a href="c3ref/sqlite3.html">database connections</a> (two different <a href="c3ref/sqlite3.html">sqlite3</a> objects returned by
+separate calls to <a href="c3ref/open.html">sqlite3_open()</a>) and the two database connections
+do not have a <a href="sharedcache.html">shared cache</a>, then the reader is only able to
+see complete committed transactions from the writer. Partial changes
+by the writer that have not been committed are invisible to the reader.
+This is true regardless of whether the two database connections are in
+the same thread, in different threads of the same process, or in
+different processes. This
+is the usual and expected behavior for SQL database systems.
+</p>
+
+<p>
+The previous paragraph is also true (separate database connections are
+isolated from one another) in <a href="sharedcache.html">shared cache mode</a> as long as the
+<a href="pragma.html#pragma_read_uncommitted">read_uncommitted pragma</a> remains turned off. The <a href="pragma.html#pragma_read_uncommitted">read_uncommitted pragma</a>
+is off by default and so if the application does nothing to turn it on,
+it will remain off. Hence, unless the <a href="pragma.html#pragma_read_uncommitted">read_uncommitted pragma</a> is used
+to change the default behavior, changes made by one database connection
+are invisible to readers on a different database connection sharing the
+same cache until the writer commits its transaction.
+</p>
+
+<p>
+If two database connections share the same cache and the reader has
+enabled the <a href="pragma.html#pragma_read_uncommitted">read_uncommitted pragma</a>, then the reader will be able to
+see changes made by the writer before the writer transaction commits.
+The combined use of <a href="sharedcache.html">shared cache mode</a> and the <a href="pragma.html#pragma_read_uncommitted">read_uncommitted pragma</a>
+is the only way that one database connection can see uncommitted changes
+on a different database connection. In all other circumstances, separate
+database connections are completely isolated from one another.
+</p>
+
+<p>Except in the case of <a href="sharedcache.html">shared cache</a> database connections with
+<a href="pragma.html#pragma_read_uncommitted">PRAGMA read_uncommitted</a> turned on, all transactions in SQLite show
+"serializable" isolation. SQLite implements serializable transactions
+by actually serializing the writes. There can only be a single writer
+at a time to an SQLite database. There can be multiple database connections
+open at the same time, and all of those database connections can write
+to the database file, but they have to take turns. SQLite uses locks
+to serialize the writes automatically; this is not something that
+the applications using SQLite need to worry about.</p>
+
+
+<h2>Isolation And Concurrency</h2>
+
+<p>
+SQLite implements isolation and concurrency control (and atomicity) using
+transient journal files that appear in the same directory as the database file.
+There are two major "journal modes".
+The older "rollback mode" corresponds to using the "DELETE", "PERSIST",
+or "TRUNCATE" options to the <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>. In rollback mode,
+changes are written directly into the database file, while simultaneously
+a separate rollback journal file is constructed that is able to restore
+the database to its original state if the transaction rolls back.
+Rollback mode (specifically DELETE mode, meaning that the rollback journal
+is deleted from disk at the conclusion of each transaction) is the current
+default behavior.
+</p>
+
+<p>Since <a href="releaselog/3_7_0.html">version 3.7.0</a> (2010-07-21),
+SQLite also supports "<a href="wal.html">WAL mode</a>". In WAL mode,
+changes are not written to the original database file. Instead, changes
+go into a separate "write-ahead log" or "WAL" file.
+Later, after the transaction
+commits, those changes will be moved from the WAL file back into the
+original database in an operation called "checkpoint". WAL mode is
+enabled by running "<a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=WAL</a>".
+</p>
+
+<p>
+In rollback mode, SQLite implements isolation by locking the database
+file and preventing any reads by other database connections
+while each write transaction is underway.
+Readers can be active at the beginning of a write, before any content
+is flushed to disk and while all changes are still held in the writer's
+private memory space. But before any changes are made to the database file
+on disk, all readers must be (temporarily) expelled in order to give the writer
+exclusive access to the database file.
+Hence, readers are prohibited from seeing incomplete
+transactions by virtue of being locked out of the database while the
+transaction is being written to disk. Only after the transaction is
+completely written and synced to disk and committed are the readers allowed
+back into the database. Hence readers never get a chance to see partially
+written changes.
+</p>
+
+<p>
+WAL mode permits simultaneous readers and writers. It can do this because
+changes do not overwrite the original database file, but rather go
+into the separate write-ahead log file. That means that readers can continue
+to read the old, original, unaltered content from the original database file
+at the same time that the writer is appending to the write-ahead log.
+In <a href="wal.html">WAL mode</a>, SQLite exhibits "snapshot isolation". When a read transaction
+starts, that reader continues to see an unchanging "snapshot" of the database
+file as it existed at the moment in time when the read transaction started.
+Any write transactions that commit while the read transaction is
+active are still invisible to the read transaction, because the reader is
+seeing a snapshot of database file from a prior moment in time.
+</p>
+
+<p>
+An example: Suppose there are two database connections X and Y. X starts
+a read transaction using <a href="lang_transaction.html">BEGIN</a> followed by one or more <a href="lang_select.html">SELECT</a> statements.
+Then Y comes along and runs an <a href="lang_update.html">UPDATE</a> statement to modify the database.
+X can subsequently do a <a href="lang_select.html">SELECT</a> against the records that Y modified but
+X will see the older unmodified entries because Y's changes are all
+invisible to X while X is holding a read transaction. If X wants to see
+the changes that Y made, then X must end its read transaction and
+start a new one (by running <a href="lang_transaction.html">COMMIT</a> followed by another <a href="lang_transaction.html">BEGIN</a>.)
+</p>
+
+<p>
+Another example: X starts a read transaction using <a href="lang_transaction.html">BEGIN</a> and <a href="lang_select.html">SELECT</a>, then
+Y makes a changes to the database using <a href="lang_update.html">UPDATE</a>. Then X tries to make a
+change to the database using <a href="lang_update.html">UPDATE</a>. The attempt by X to escalate its
+transaction from a read transaction to a write transaction fails with an
+<a href="rescode.html#busy_snapshot">SQLITE_BUSY_SNAPSHOT</a> error because the snapshot of the database being
+viewed by X is no longer the latest version of the database. If X were
+allowed to write, it would fork the history of the database file, which is
+something SQLite does not support. In order for X to write to the database,
+it must first release its snapshot (using <a href="lang_transaction.html">ROLLBACK</a> for example) then
+start a new transaction with a subsequent <a href="lang_transaction.html">BEGIN</a>.
+</p>
+
+<p>
+If X starts a transaction that will initially only read but X knows it
+will eventually want to write and does not want to be troubled with
+possible SQLITE_BUSY_SNAPSHOT errors that arise because another connection
+jumped ahead of it in line, then X can issue <a href="lang_transaction.html#immediate">BEGIN IMMEDIATE</a> to start
+its transaction instead of just an ordinary BEGIN. The <a href="lang_transaction.html#immediate">BEGIN IMMEDIATE</a>
+command goes ahead and starts a write transaction, and thus blocks all
+other writers. If the <a href="lang_transaction.html#immediate">BEGIN IMMEDIATE</a> operation succeeds, then no
+subsequent operations in that transaction will ever fail with an
+<a href="rescode.html#busy">SQLITE_BUSY</a> error.
+</p>
+
+<h2>No Isolation Between Operations On The Same Database Connection</h2>
+
+<p>SQLite provides isolation between operations in separate database
+connections. However, there is no isolation between operations that
+occur within the same database connection.</p>
+
+<p>In other words, if X begins a write transaction using <a href="lang_transaction.html#immediate">BEGIN IMMEDIATE</a>
+then issues one or more <a href="lang_update.html">UPDATE</a>, <a href="lang_delete.html">DELETE</a>, and/or <a href="lang_insert.html">INSERT</a>
+statements, then those changes are visible to subsequent <a href="lang_select.html">SELECT</a> statements
+that are evaluated in database connection X. <a href="lang_select.html">SELECT</a> statements on
+a different database connection Y will show no changes until the X
+transaction commits. But <a href="lang_select.html">SELECT</a> statements in X will show the changes
+prior to the commit.</p>
+
+<p>Within a single database connection X, a SELECT statement always sees all
+changes to the database that are completed prior to the start of the SELECT
+statement, whether committed or uncommitted. And the SELECT statement
+obviously does not see any changes that occur after the SELECT statement
+completes. But what about changes that occur while the SELECT statement
+is running? What if a SELECT statement is started and the <a href="c3ref/step.html">sqlite3_step()</a>
+interface steps through roughly half of its output, then some <a href="lang_update.html">UPDATE</a>
+statements are run by the application that modify the table that the
+SELECT statement is reading, then more calls to <a href="c3ref/step.html">sqlite3_step()</a> are made
+to finish out the SELECT statement? Will the later steps of the SELECT
+statement see the changes made by the UPDATE or not? The answer is that
+this behavior is undefined. In particular, whether or not the SELECT statement
+sees the concurrent changes depends on which release of SQLite is
+running, the schema of the database file, whether or not <a href="lang_analyze.html">ANALYZE</a> has
+been run, and the details of the query. In some cases, it might depend
+on the content of the database file, too. There is no good way to know whether
+or not a SELECT statement will see changes that were made to the database
+by the same database connection after the SELECT statement was started.
+And hence, developers should diligently avoid writing applications
+that make assumptions about what will occur in that circumstance.</p>
+
+<p>
+If an application issues a SELECT statement on a single table like
+"<i>SELECT rowid, * FROM table WHERE ...</i>" and starts stepping through
+the output of that statement using <a href="c3ref/step.html">sqlite3_step()</a> and examining each
+row, then it is safe for the application to delete the current row or
+any prior row using "DELETE FROM table WHERE rowid=?". It is also safe
+(in the sense that it will not harm the database) for the application to
+delete a row that expected to appear later in the query but has not
+appeared yet. If a future row is deleted, however, it might happen that
+the row turns up after a subsequent sqlite3_step(), even after it has
+allegedly been deleted. Or it might not. That behavior is undefined.
+The application can
+also INSERT new rows into the table while the SELECT statement is
+running, but whether or not the new rows appear
+in subsequent sqlite3_step()s of the query is undefined. And the application
+can UPDATE the current row or any prior row, though doing so might cause
+that row to reappear in a subsequent sqlite3_step(). As long as the
+application is prepared to deal with these ambiguities, the operations
+themselves are safe and will not harm the database file.</p>
+
+<p>
+For the purposes of the previous two paragraphs, two database connections
+that have the same <a href="sharedcache.html">shared cache</a> and which have enabled
+<a href="pragma.html#pragma_read_uncommitted">PRAGMA read_uncommitted</a> are considered to be the same database connection.
+</p>
+
+<h2>Summary</h2>
+
+<ol>
+<li><p>
+Transactions in SQLite are SERIALIZABLE.
+</p>
+
+<li><p>
+Changes made in one database connection are invisible to all other database
+connections prior to commit.
+</p>
+
+<li><p>
+A query sees all changes that are completed on the same database connection
+prior to the start of the query, regardless of whether or not those changes
+have been committed.
+</p>
+
+<li><p>
+If changes occur on the same database connection after a query
+starts running but before the query completes, then it is undefined whether
+or not the query will see those changes.
+</p>
+
+<li><p>
+If changes occur on the same database connection after a query
+starts running but before the query completes, then the query might return
+a changed row more than once, or it might return a row that was previously
+deleted.
+</p>
+
+<li><p>
+For the purposes of the previous four items, two database connections that
+use the same <a href="sharedcache.html">shared cache</a> and which enable <a href="pragma.html#pragma_read_uncommitted">PRAGMA read_uncommitted</a> are
+considered to be the same database connection, not separate database
+connections.
+</p>
+</ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/isolation.in?m=aa8b8e3ef6e0a7fed">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/json1.html b/www/json1.html
new file mode 100644
index 0000000..4235162
--- /dev/null
+++ b/www/json1.html
@@ -0,0 +1,1169 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>JSON Functions And Operators</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+JSON Functions And Operators
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#compiling_in_json_support">2. Compiling in JSON Support</a></div>
+<div class="fancy-toc1"><a href="#interface_overview">3. Interface Overview</a></div>
+<div class="fancy-toc2"><a href="#json_arguments">3.1. JSON arguments</a></div>
+<div class="fancy-toc2"><a href="#path_arguments">3.2. PATH arguments</a></div>
+<div class="fancy-toc2"><a href="#value_arguments">3.3. VALUE arguments</a></div>
+<div class="fancy-toc2"><a href="#compatibility">3.4. Compatibility</a></div>
+<div class="fancy-toc1"><a href="#function_details">4. Function Details</a></div>
+<div class="fancy-toc2"><a href="#the_json_function">4.1. The json() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_array_function">4.2. The json_array() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_array_length_function">4.3. The json_array_length() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_extract_function">4.4. The json_extract() function</a></div>
+<div class="fancy-toc2"><a href="#the_and_operators">4.5. The -> and ->> operators</a></div>
+<div class="fancy-toc2"><a href="#the_json_insert_json_replace_and_json_set_functions">4.6. The json_insert(), json_replace, and json_set() functions</a></div>
+<div class="fancy-toc2"><a href="#the_json_object_function">4.7. The json_object() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_patch_function">4.8. The json_patch() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_remove_function">4.9. The json_remove() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_type_function">4.10. The json_type() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_valid_function">4.11. The json_valid() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_quote_function">4.12. The json_quote() function</a></div>
+<div class="fancy-toc2"><a href="#the_json_group_array_and_json_group_object_aggregate_sql_functions">4.13. The json_group_array() and json_group_object()
+aggregate SQL functions</a></div>
+<div class="fancy-toc2"><a href="#the_json_each_and_json_tree_table_valued_functions">4.14. The json_each() and json_tree() table-valued functions</a></div>
+<div class="fancy-toc3"><a href="#examples_using_json_each_and_json_tree_">4.14.1. Examples using json_each() and json_tree()</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+<p>
+By default, SQLite supports fifteen functions and two operators for
+dealing with JSON values. There are also two <a href="vtab.html#tabfunc2">table-valued functions</a>
+that can be used to decompose a JSON string.
+
+</p><p>
+There are 15 scalar functions and operators:
+
+</p><ol>
+<li value='1'>
+<a href='#jmini'>json</a>(<i>json</i>)
+</li>
+
+<li value='2'>
+<a href='#jarray'>json_array</a>(<i>value1</i>,<i>value2</i>,...)
+</li>
+
+<li value='3'>
+<a href='#jarraylen'>json_array_length</a>(<i>json</i>)<br><a href='#jarraylen'>json_array_length</a>(<i>json</i>,<i>path</i>)
+</li>
+
+<li value='4'>
+<a href='#jex'>json_extract</a>(<i>json</i>,<i>path</i>,...)
+</li>
+
+<li value='5'>
+<i>json</i> <a href='#jptr'>-></a> <i>path</i>
+</li>
+
+<li value='6'>
+<i>json</i> <a href='#jptr'>->></a> <i>path</i>
+</li>
+
+<li value='7'>
+<a href='#jins'>json_insert</a>(<i>json</i>,<i>path</i>,<i>value</i>,...)
+</li>
+
+<li value='8'>
+<a href='#jobj'>json_object</a>(<i>label1</i>,<i>value1</i>,...)
+</li>
+
+<li value='9'>
+<a href='#jpatch'>json_patch</a>(<i>json</i>1,json2)
+</li>
+
+<li value='10'>
+<a href='#jrm'>json_remove</a>(<i>json</i>,<i>path</i>,...)
+</li>
+
+<li value='11'>
+<a href='#jrepl'>json_replace</a>(<i>json</i>,<i>path</i>,<i>value</i>,...)
+</li>
+
+<li value='12'>
+<a href='#jset'>json_set</a>(<i>json</i>,<i>path</i>,<i>value</i>,...)
+</li>
+
+<li value='13'>
+<a href='#jtype'>json_type</a>(<i>json</i>)<br><a href='#jtype'>json_type</a>(<i>json</i>,<i>path</i>)
+</li>
+
+<li value='14'>
+<a href='#jvalid'>json_valid</a>(<i>json</i>)
+</li>
+
+<li value='15'>
+<a href='#jquote'>json_quote</a>(<i>value</i>)
+</li>
+
+
+</ol>
+
+<p>There are two aggregate SQL functions:
+
+</p><ol>
+<li value='16'>
+<a href='#jgrouparray'>json_group_array</a>(<i>value</i>)
+</li>
+
+<li value='17'>
+<a href='#jgroupobject'>json_group_object</a>(name,<i>value</i>)
+</li>
+
+
+</ol>
+
+<p>The two <a href="vtab.html#tabfunc2">table-valued functions</a> are:
+
+</p><ol>
+<li value='18'>
+<a href='#jeach'>json_each</a>(<i>json</i>)<br><a href='#jeach'>json_each</a>(<i>json</i>,<i>path</i>)
+</li>
+
+<li value='19'>
+<a href='#jtree'>json_tree</a>(<i>json</i>)<br><a href='#jtree'>json_tree</a>(<i>json</i>,<i>path</i>)
+</li>
+
+
+</ol>
+
+
+
+<style>
+.jans {color: #050;}
+.jex {color: #025;}
+</style>
+
+
+<a name="howtocompile"></a>
+
+<h1 id="compiling_in_json_support"><span>2. </span>Compiling in JSON Support</h1>
+
+<p>
+The JSON functions and operators are built into SQLite by default,
+as of SQLite version 3.38.0 (2022-02-22). They can be omitted
+by adding the -DSQLITE_OMIT_JSON compile-time option. Prior to
+version 3.38.0, the JSON functions were an extension that would only
+be included in builds if the -DSQLITE_ENABLE_JSON1 compile-time option
+was included. In other words, the JSON functions went from being
+opt-in with SQLite version 3.37.2 and earlier to opt-out with
+SQLite version 3.38.0 and later.
+
+</p><h1 id="interface_overview"><span>3. </span>Interface Overview</h1>
+
+<p>
+SQLite stores JSON as ordinary text.
+Backwards compatibility constraints mean that SQLite is only able to
+store values that are NULL, integers, floating-point numbers, text,
+and BLOBs. It is not possible to add a sixth "JSON" type.
+
+</p><p>
+SQLite does not (currently) support a binary encoding
+of JSON. Experiments have been unable to find a binary encoding
+that is significantly smaller or faster than a plain text encoding.
+(The present implementation parses JSON text at over 1 GB/s.)
+All JSON functions currently throw an error if any of their
+arguments are BLOBs because BLOBs are reserved
+for a future enhancement in which BLOBs will store the binary encoding
+for JSON.
+
+</p><h2 id="json_arguments"><span>3.1. </span>JSON arguments</h2>
+
+<p>
+For functions that accept JSON as their first argument, that argument
+can be a JSON object, array, number, string, or null. SQLite numeric
+values and NULL values are interpreted as JSON numbers and nulls, respectively.
+SQLite text values can be understood as JSON objects, arrays, or strings.
+If an SQLite text value that is not a well-formed JSON object, array, or
+string is passed into JSON function, that function will usually throw
+an error. (Exceptions to this rule are <a href="json1.html#jvalid">json_valid()</a> and
+<a href="json1.html#jquote">json_quote()</a>.)
+
+</p><p>
+For the purposes of determining validity, leading and trailing whitespace
+on JSON inputs is ignored. Interior whitespace is also ignored, in accordance
+with the JSON spec. These routines accept exactly the
+<a href="http://www.rfc-editor.org/rfc/rfc7159.txt">rfc-7159 JSON syntax</a>
+&mdash; no more and no less.
+
+<a name="jsonpath"></a>
+
+</p><h2 id="path_arguments"><span>3.2. </span>PATH arguments</h2>
+
+<p>
+For functions that accept PATH arguments, that PATH must be well-formed or
+else the function will throw an error.
+A well-formed PATH is a text value that begins with exactly one
+'$' character followed by zero or more instances
+of ".<i>objectlabel</i>" or "&#91;<i>arrayindex</i>&#93;".
+
+</p><p>
+The <i>arrayindex</i> is usually a non-negative integer <i>N</i>. In
+that case, the array element selected is the <i>N</i>-th element
+of the array, starting with zero on the left.
+The <i>arrayindex</i> can also be of the form "<b>#-</b><i>N</i>"
+in which case the element selected is the <i>N</i>-th from the
+right. The last element of the array is "<b>#-1</b>". Think of
+the "#" characters as the "number of elements in the array". Then
+the expression "#-1" evaluates to the integer that corresponds to
+the last entry in the array. It is sometimes useful for the array
+index to be just the <b>#</b> character, for example when appending
+a value to an existing JSON array:
+
+<ul>
+<li><span class='jex'>json_set('[0,1,2]','$[#]','new')</span>
+<span class='jans'>&rarr; '[0,1,2,"new"]'</span></li>
+
+</ul>
+
+
+<a name="varg"></a>
+
+</p><h2 id="value_arguments"><span>3.3. </span>VALUE arguments</h2>
+
+<p>
+For functions that accept "<i>value</i>" arguments (also shown as
+"<i>value1</i>" and "<i>value2</i>"),
+those arguments are usually understood
+to be literal strings that are quoted and become JSON string values
+in the result. Even if the input <i>value</i> strings look like
+well-formed JSON, they are still interpreted as literal strings in the
+result.
+
+</p><p>
+However, if a <i>value</i> argument comes directly from the result of another
+JSON function or from <a href="json1.html#jptr">the -> operator</a> (but not <a href="json1.html#jptr">the ->> operator</a>),
+then the argument is understood to be actual JSON and
+the complete JSON is inserted rather than a quoted string.
+
+</p><p>
+For example, in the following call to json_object(), the <i>value</i>
+argument looks like a well-formed JSON array. However, because it is just
+ordinary SQL text, it is interpreted as a literal string and added to the
+result as a quoted string:
+
+<ul>
+<li><span class='jex'>json_object('ex','[52,3.14159]')</span>
+<span class='jans'>&rarr; '{"ex":"[52,3.14159]"}'</span></li>
+
+<li><span class='jex'>json_object('ex',('52,3.14159]'->>'$'))</span>
+<span class='jans'>&rarr; '{"ex":"[52,3.14159]"}'</span></li>
+
+</ul>
+
+
+</p><p>
+But if the <i>value</i> argument in the outer json_object() call is the
+result of another JSON function like <a href="json1.html#jmini">json()</a> or <a href="json1.html#jarray">json_array()</a>, then
+the value is understood to be actual JSON and is inserted as such:
+
+<ul>
+<li><span class='jex'>json_object('ex',json('[52,3.14159]'))</span>
+<span class='jans'>&rarr; '{"ex":[52,3.14159]}'</span></li>
+
+<li><span class='jex'>json_object('ex',json_array(52,3.14159))</span>
+<span class='jans'>&rarr; '{"ex":[52,3.14159]}'</span></li>
+
+<li><span class='jex'>json_object('ex','[52,3.14159]'->'$')</span>
+<span class='jans'>&rarr; '{"ex":[52,3.14159]}'</span></li>
+
+</ul>
+
+
+</p><p>
+To be clear: "<i>json</i>" arguments are always interpreted as JSON
+regardless of where the value for that argument comes from. But
+"<i>value</i>" arguments are only interpreted as JSON if those arguments
+come directly from another JSON function or <a href="json1.html#jptr">the -> operator</a>.
+
+</p><h2 id="compatibility"><span>3.4. </span>Compatibility</h2>
+
+<p>
+The current implementation of this JSON library uses a recursive descent
+parser. In order to avoid using excess stack space, any JSON input that has
+more than 2000 levels of nesting is considered invalid. Limits on nesting
+depth are allowed for compatible implementations of JSON by
+<a href="https://tools.ietf.org/html/rfc7159#section-9">RFC-7159 section 9</a>.
+
+
+</p><h1 id="function_details"><span>4. </span>Function Details</h1>
+
+<p>The following sections provide additional detail on the operation of
+the various JSON functions and operators:
+
+<a name="jmini"></a>
+
+</p><h2 id="the_json_function"><span>4.1. </span>The json() function</h2>
+
+<p>The json(X) function verifies that its argument X is a valid
+JSON string and returns a minified version of that JSON string
+(with all unnecessary whitespace removed). If X is not a well-formed
+JSON string, then this routine throws an error.
+
+</p><p>In other words, this function converts raw text that looks like
+JSON into actual JSON so that it may be passed into the <a href="json1.html#varg">value argument</a>
+of some other json function and will be interpreted as JSON rather than
+a string. This function is not appropriate for testing whether or not
+a particular string is well-formed JSON - use the <a href="json1.html#jvalid">json_valid()</a> routine
+below for that task.
+
+</p><p>If the argument X to json(X) contains JSON objects with duplicate
+labels, then it is undefined whether or not the duplicates are
+preserved. The current implementation preserves duplicates.
+However, future enhancements
+to this routine may choose to silently remove duplicates.
+
+</p><p>
+Example:
+
+<ul>
+<li><span class='jex'>json(' { "this" : "is", "a": [ "test" ] } ')</span>
+<span class='jans'>&rarr; '{"this":"is","a":["test"]}'</span></li>
+
+</ul>
+
+
+<a name="jarray"></a>
+
+</p><h2 id="the_json_array_function"><span>4.2. </span>The json_array() function</h2>
+
+<p>The json_array() SQL function accepts zero or more arguments and
+returns a well-formed JSON array that is composed from those arguments.
+If any argument to json_array() is a BLOB then an error is thrown.
+
+</p><p>An argument with SQL type TEXT is normally converted into a quoted
+JSON string. However, if the argument is the output from another json1
+function, then it is stored as JSON. This allows calls to json_array()
+and <a href="json1.html#jobj">json_object()</a> to be nested. The <a href="json1.html#jmini">json()</a> function can also
+be used to force strings to be recognized as JSON.
+
+</p><p>Examples:
+
+<ul>
+<li><span class='jex'>json_array(1,2,'3',4)</span>
+<span class='jans'>&rarr; '[1,2,"3",4]'</span></li>
+
+<li><span class='jex'>json_array('[1,2]')</span>
+<span class='jans'>&rarr; '["[1,2]"]'</span></li>
+
+<li><span class='jex'>json_array(json_array(1,2))</span>
+<span class='jans'>&rarr; '[[1,2]]'</span></li>
+
+<li><span class='jex'>json_array(1,null,'3','[4,5]','{"six":7.7}')</span>
+<span class='jans'>&rarr; '[1,null,"3","[4,5]","{\"six\":7.7}"]'</span></li>
+
+<li><span class='jex'>json_array(1,null,'3',json('[4,5]'),json('{"six":7.7}'))</span>
+<span class='jans'>&rarr; '[1,null,"3",[4,5],{"six":7.7}]'</span></li>
+
+</ul>
+
+
+
+<a name="jarraylen"></a>
+
+</p><h2 id="the_json_array_length_function"><span>4.3. </span>The json_array_length() function</h2>
+
+<p>The json_array_length(X) function returns the number of elements
+in the JSON array X, or 0 if X is some kind of JSON value other
+than an array. The json_array_length(X,P) locates the array at path P
+within X and returns the length of that array, or 0 if path P locates
+an element or X other than a JSON array, and NULL if path P does not
+locate any element of X. Errors are thrown if either X is not
+well-formed JSON or if P is not a well-formed path.
+
+</p><p>Examples:
+
+<ul>
+<li><span class='jex'>json_array_length('[1,2,3,4]')</span>
+<span class='jans'>&rarr; 4</span></li>
+
+<li><span class='jex'>json_array_length('[1,2,3,4]', '$')</span>
+<span class='jans'>&rarr; 4</span></li>
+
+<li><span class='jex'>json_array_length('[1,2,3,4]', '$[2]')</span>
+<span class='jans'>&rarr; 0</span></li>
+
+<li><span class='jex'>json_array_length('{"one":[1,2,3]}')</span>
+<span class='jans'>&rarr; 0</span></li>
+
+<li><span class='jex'>json_array_length('{"one":[1,2,3]}', '$.one')</span>
+<span class='jans'>&rarr; 3</span></li>
+
+<li><span class='jex'>json_array_length('{"one":[1,2,3]}', '$.two')</span>
+<span class='jans'>&rarr; NULL</span></li>
+
+</ul>
+
+
+
+<a name="jex"></a>
+
+</p><h2 id="the_json_extract_function"><span>4.4. </span>The json_extract() function</h2>
+
+<p>The json_extract(X,P1,P2,...) extracts and returns one or more
+values from the
+well-formed JSON at X. If only a single path P1 is provided, then the
+SQL datatype of the result is NULL for a JSON null, INTEGER or REAL
+for a JSON numeric value, an INTEGER zero for a JSON false value,
+an INTEGER one for a JSON true value, the dequoted text for a
+JSON string value, and a text representation for JSON object and array values.
+If there are multiple path arguments (P1, P2, and so forth) then this
+routine returns SQLite text which is a well-formed JSON array holding
+the various values.
+
+</p><p>Examples:
+
+<ul>
+<li><span class='jex'>json_extract('{"a":2,"c":[4,5,{"f":7}]}', '$')</span>
+<span class='jans'>&rarr; '{"a":2,"c":[4,5,{"f":7}]}'</span></li>
+
+<li><span class='jex'>json_extract('{"a":2,"c":[4,5,{"f":7}]}', '$.c')</span>
+<span class='jans'>&rarr; '[4,5,{"f":7}]'</span></li>
+
+<li><span class='jex'>json_extract('{"a":2,"c":[4,5,{"f":7}]}', '$.c[2]')</span>
+<span class='jans'>&rarr; '{"f":7}'</span></li>
+
+<li><span class='jex'>json_extract('{"a":2,"c":[4,5,{"f":7}]}', '$.c[2].f')</span>
+<span class='jans'>&rarr; 7</span></li>
+
+<li><span class='jex'>json_extract('{"a":2,"c":[4,5],"f":7}','$.c','$.a')</span>
+<span class='jans'>&rarr; '[[4,5],2]'</span></li>
+
+<li><span class='jex'>json_extract('{"a":2,"c":[4,5],"f":7}','$.c[#-1]')</span>
+<span class='jans'>&rarr; 5</span></li>
+
+<li><span class='jex'>json_extract('{"a":2,"c":[4,5,{"f":7}]}', '$.x')</span>
+<span class='jans'>&rarr; NULL</span></li>
+
+<li><span class='jex'>json_extract('{"a":2,"c":[4,5,{"f":7}]}', '$.x', '$.a')</span>
+<span class='jans'>&rarr; '[null,2]'</span></li>
+
+<li><span class='jex'>json_extract('{"a":"xyz"}', '$.a')</span>
+<span class='jans'>&rarr; 'xyz'</span></li>
+
+<li><span class='jex'>json_extract('{"a":null}', '$.a')</span>
+<span class='jans'>&rarr; NULL</span></li>
+
+</ul>
+
+
+</p><p>There is a subtle incompatibility between the json_extract() function
+in SQLite and the json_extract() function in MySQL. The MySQL version
+of json_extract() always returns JSON. The SQLite version of
+json_extract() only returns JSON if there are two or more PATH arguments
+(because the result is then a JSON array) or if the single PATH argument
+references an array or object. In SQLite, if json_extract() has only
+a single PATH argument and that PATH references a JSON null or a string
+or a numeric value, then json_extract() returns the corresponding SQL
+NULL, TEXT, INTEGER, or REAL value.
+
+</p><p>The difference between MySQL json_extract() and SQLite json_extract()
+really only stands out when accessing individual values within the JSON
+that are strings or NULLs. The following table demonstrates the difference:
+
+</p><center>
+<table border="1" cellpadding="3" cellspacing="0">
+<tr><th>Operation</th><th>SQLite Result</th><th>MySQL Result
+</th></tr><tr><td>json_extract('{"a":null,"b":"xyz"}','$.a')</td><td>NULL</td><td>'null'
+</td></tr><tr><td>json_extract('{"a":null,"b":"xyz"}','$.b')</td><td>'xyz'</td><td>'"xyz"'
+</td></tr></table></center>
+
+<a name="jptr"></a>
+
+<h2 id="the_and_operators"><span>4.5. </span>The -> and ->> operators</h2>
+
+<p>Beginning with SQLite version 3.38.0 (2022-02-22), the ->
+and ->> operators are available for extracting subcomponents of JSON.
+The SQLite implementation of the -> and ->> operators strive to be
+compatible with both MySQL and PostgreSQL.
+The -> and ->> operators take a JSON string
+as their left operand and a PATH expression or object field
+label or array index as their right operand. The -> operator
+returns a JSON representation of the selected subcomponent or NULL if that
+subcomponent does not exist. The ->> operator returns an SQL TEXT,
+INTEGER, REAL, or NULL value that represents the selected subcomponent,
+or NULL if the subcomponent does not exist.
+
+</p><p>Both the -> and ->> operators select the same subcomponent
+of the JSON to their left. The difference is that -> always returns a
+JSON representation of that subcomponent and the ->> operator always
+returns an SQL representation of that subcomponent. Thus, these operators
+are subtly different from a two-argument <a href="json1.html#jex">json_extract()</a> function call.
+A call to json_extract() with two arguments will return a JSON representation
+of the subcomponent if and only if the subcomponent is a JSON array or
+object, and will return an SQL representation of the subcomponent if the
+subcomponent is a JSON null, string, or numeric value.
+
+</p><p>The right-hand operand to the -> and ->> operators can
+be a well-formed JSON path expression. This is the form used by MySQL.
+For compatibility with PostgreSQL,
+the -> and ->> operators also accept a text label or
+integer as their right-hand operand. If the right operand is a text
+label X, then it is interpreted as the JSON path '$.X'. If the right
+operand is an integer value N, then it is interpreted as the JSON path '$[N]'.
+
+</p><p>Examples:
+
+<ul>
+<li><span class='jex'>'{"a":2,"c":[4,5,{"f":7}]}' -> '$'</span>
+<span class='jans'>&rarr; '{"a":2,"c":[4,5,{"f":7}]}'</span></li>
+
+<li><span class='jex'>'{"a":2,"c":[4,5,{"f":7}]}' -> '$.c'</span>
+<span class='jans'>&rarr; '[4,5,{"f":7}]'</span></li>
+
+<li><span class='jex'>'{"a":2,"c":[4,5,{"f":7}]}' -> 'c'</span>
+<span class='jans'>&rarr; '[4,5,{"f":7}]'</span></li>
+
+<li><span class='jex'>'{"a":2,"c":[4,5,{"f":7}]}' -> '$.c[2]'</span>
+<span class='jans'>&rarr; '{"f":7}'</span></li>
+
+<li><span class='jex'>'{"a":2,"c":[4,5,{"f":7}]}' -> '$.c[2].f'</span>
+<span class='jans'>&rarr; '7'</span></li>
+
+<li><span class='jex'>'{"a":2,"c":[4,5],"f":7}' -> '$.c[#-1]'</span>
+<span class='jans'>&rarr; '5'</span></li>
+
+<li><span class='jex'>'{"a":2,"c":[4,5,{"f":7}]}' -> '$.x'</span>
+<span class='jans'>&rarr; NULL</span></li>
+
+<li><span class='jex'>'[11,22,33,44]' -> 3</span>
+<span class='jans'>&rarr; '44'</span></li>
+
+<li><span class='jex'>'[11,22,33,44]' ->> 3</span>
+<span class='jans'>&rarr; 44</span></li>
+
+<li><span class='jex'>'{"a":"xyz"}' -> '$.a'</span>
+<span class='jans'>&rarr; '"xyz"'</span></li>
+
+<li><span class='jex'>'{"a":"xyz"}' ->> '$.a'</span>
+<span class='jans'>&rarr; 'xyz'</span></li>
+
+<li><span class='jex'>'{"a":null}' -> '$.a'</span>
+<span class='jans'>&rarr; 'null'</span></li>
+
+<li><span class='jex'>'{"a":null}' ->> '$.a'</span>
+<span class='jans'>&rarr; NULL</span></li>
+
+</ul>
+
+
+<a name="jins"></a>
+
+<a name="jrepl"></a>
+
+<a name="jset"></a>
+
+</p><h2 id="the_json_insert_json_replace_and_json_set_functions"><span>4.6. </span>The json_insert(), json_replace, and json_set() functions</h2>
+
+<p>The json_insert(), json_replace, and json_set() functions all take
+a single JSON value as their first argument followed by zero or more
+pairs of path and value arguments, and return a new JSON string formed
+by updating the input JSON by the path/value pairs. The functions
+differ only in how they deal with creating new values and overwriting
+preexisting values.
+
+</p><center>
+<table border="1" cellpadding="3" cellspacing="0">
+<tr>
+<th>Function</th><th>Overwrite if already exists?</th><th>Create if does not exist?
+</th></tr><tr>
+<td>json_insert()</td><td align="center">No</td><td align="center">Yes
+</td></tr><tr>
+<td>json_replace()</td><td align="center">Yes</td><td align="center">No
+</td></tr><tr>
+<td>json_set()</td><td align="center">Yes</td><td align="center">Yes
+</td></tr></table></center>
+
+<p>The json_insert(), json_replace(), and json_set() functions always
+take an odd number of arguments. The first argument is always the original
+JSON to be edited. Subsequent arguments occur in pairs with the first
+element of each pair being a path and the second element being the value
+to insert or replace or set on that path.
+
+</p><p>Edits occur sequentially from left to right. Changes caused by
+prior edits can affect the path search for subsequent edits.
+
+</p><p>If the value of a path/value pair is an SQLite TEXT value, then it
+is normally inserted as a quoted JSON string, even if the string looks
+like valid JSON. However, if the value is the result of another
+json1 function (such as <a href="json1.html#jmini">json()</a> or <a href="json1.html#jarray">json_array()</a> or <a href="json1.html#jobj">json_object()</a>)
+or if it is the result of <a href="json1.html#jptr">the -> operator</a>,
+then it is interpreted as JSON and is inserted as JSON retaining all
+of its substructure. Values that are the result of <a href="json1.html#jptr">the ->> operator</a>
+are always interpreted as TEXT and are inserted as a JSON string even
+if they look like valid JSON.
+
+</p><p>These routines throw an error if the first JSON argument is not
+well-formed or if any PATH argument is not well-formed or if any
+argument is a BLOB.
+
+</p><p>To append an element onto the end of an array, using json_insert()
+with an array index of "#". Examples:
+
+<ul>
+<li><span class='jex'>json_insert('[1,2,3,4]','$[#]',99)</span>
+<span class='jans'>&rarr; '[1,2,3,4,99]'</span></li>
+
+<li><span class='jex'>json_insert('[1,[2,3],4]','$[1][#]',99)</span>
+<span class='jans'>&rarr; '[1,[2,3,99],4]'</span></li>
+
+</ul>
+
+
+</p><p>Other examples:
+
+<ul>
+<li><span class='jex'>json_insert('{"a":2,"c":4}', '$.a', 99)</span>
+<span class='jans'>&rarr; '{"a":2,"c":4}'</span></li>
+
+<li><span class='jex'>json_insert('{"a":2,"c":4}', '$.e', 99)</span>
+<span class='jans'>&rarr; '{"a":2,"c":4,"e":99}'</span></li>
+
+<li><span class='jex'>json_replace('{"a":2,"c":4}', '$.a', 99)</span>
+<span class='jans'>&rarr; '{"a":99,"c":4}'</span></li>
+
+<li><span class='jex'>json_replace('{"a":2,"c":4}', '$.e', 99)</span>
+<span class='jans'>&rarr; '{"a":2,"c":4}'</span></li>
+
+<li><span class='jex'>json_set('{"a":2,"c":4}', '$.a', 99)</span>
+<span class='jans'>&rarr; '{"a":99,"c":4}'</span></li>
+
+<li><span class='jex'>json_set('{"a":2,"c":4}', '$.e', 99)</span>
+<span class='jans'>&rarr; '{"a":2,"c":4,"e":99}'</span></li>
+
+<li><span class='jex'>json_set('{"a":2,"c":4}', '$.c', '[97,96]')</span>
+<span class='jans'>&rarr; '{"a":2,"c":"[97,96]"}'</span></li>
+
+<li><span class='jex'>json_set('{"a":2,"c":4}', '$.c', json('[97,96]'))</span>
+<span class='jans'>&rarr; '{"a":2,"c":[97,96]}'</span></li>
+
+<li><span class='jex'>json_set('{"a":2,"c":4}', '$.c', json_array(97,96))</span>
+<span class='jans'>&rarr; '{"a":2,"c":[97,96]}'</span></li>
+
+</ul>
+
+
+<a name="jobj"></a>
+
+</p><h2 id="the_json_object_function"><span>4.7. </span>The json_object() function</h2>
+
+<p>The json_object() SQL function accepts zero or more pairs of arguments
+and returns a well-formed JSON object that is composed from those arguments.
+The first argument of each pair is the label and the second argument of
+each pair is the value.
+If any argument to json_object() is a BLOB then an error is thrown.
+
+</p><p>The json_object() function currently allows duplicate labels without
+complaint, though this might change in a future enhancement.
+
+</p><p>An argument with SQL type TEXT it is normally converted into a quoted
+JSON string even if the input text is well-formed JSON.
+However, if the argument is the direct result from another JSON
+function or <a href="json1.html#jptr">the -> operator</a> (but not <a href="json1.html#jptr">the ->> operator</a>),
+then it is treated as JSON and all of its JSON type information
+and substructure is preserved. This allows calls to json_object()
+and <a href="json1.html#jarray">json_array()</a> to be nested. The <a href="json1.html#jmini">json()</a> function can also
+be used to force strings to be recognized as JSON.
+
+</p><p>Examples:
+
+<ul>
+<li><span class='jex'>json_object('a',2,'c',4)</span>
+<span class='jans'>&rarr; '{"a":2,"c":4}'</span></li>
+
+<li><span class='jex'>json_object('a',2,'c','{e:5}')</span>
+<span class='jans'>&rarr; '{"a":2,"c":"{e:5}"}'</span></li>
+
+<li><span class='jex'>json_object('a',2,'c',json_object('e',5))</span>
+<span class='jans'>&rarr; '{"a":2,"c":{"e":5}}'</span></li>
+
+</ul>
+
+
+<a name="jpatch"></a>
+
+</p><h2 id="the_json_patch_function"><span>4.8. </span>The json_patch() function</h2>
+
+<p>The json_patch(T,P) SQL function runs the
+<a href="https://tools.ietf.org/html/rfc7396">RFC-7396</a> MergePatch algorithm
+to apply patch P against input T. The patched copy of T is returned.
+
+</p><p>MergePatch can add, modify, or delete elements of a JSON Object,
+and so for JSON Objects, the json_patch() routine is a generalized
+replacement for <a href="json1.html#jset">json_set()</a> and <a href="json1.html#jrm">json_remove()</a>. However, MergePatch
+treats JSON Array objects as atomic. MergePatch cannot append to an
+Array nor modify individual elements of an Array. It can only insert,
+replace, or delete the whole Array as a single unit. Hence, json_patch()
+is not as useful when dealing with JSON that includes Arrays,
+especially Arrays with lots of substructure.
+
+</p><p>Examples:
+
+<ul>
+<li><span class='jex'>json_patch('{"a":1,"b":2}','{"c":3,"d":4}')</span>
+<span class='jans'>&rarr; '{"a":1,"b":2,"c":3,"d":4}'</span></li>
+
+<li><span class='jex'>json_patch('{"a":[1,2],"b":2}','{"a":9}')</span>
+<span class='jans'>&rarr; '{"a":9,"b":2}'</span></li>
+
+<li><span class='jex'>json_patch('{"a":[1,2],"b":2}','{"a":null}')</span>
+<span class='jans'>&rarr; '{"b":2}'</span></li>
+
+<li><span class='jex'>json_patch('{"a":1,"b":2}','{"a":9,"b":null,"c":8}')</span>
+<span class='jans'>&rarr; '{"a":9,"c":8}'</span></li>
+
+<li><span class='jex'>json_patch('{"a":{"x":1,"y":2},"b":3}','{"a":{"y":9},"c":8}')</span>
+<span class='jans'>&rarr; '{"a":{"x":1,"y":9},"b":3,"c":8}'</span></li>
+
+</ul>
+
+
+<a name="jrm"></a>
+
+</p><h2 id="the_json_remove_function"><span>4.9. </span>The json_remove() function</h2>
+
+<p>The json_remove(X,P,...) function takes a single JSON value as its
+first argument followed by zero or more path arguments.
+The json_remove(X,P,...) function returns
+a copy of the X parameter with all the elements
+identified by path arguments removed. Paths that select elements
+not found in X are silently ignored.
+
+</p><p>Removals occurs sequentially from left to right. Changes caused by
+prior removals can affect the path search for subsequent arguments.
+
+</p><p>If the json_remove(X) function is called with no path arguments,
+then it returns the input X reformatted, with excess whitespace
+removed.
+
+</p><p>The json_remove() function throws an error if the first argument
+is not well-formed JSON or if any later argument is not a well-formed
+path, or if any argument is a BLOB.
+
+</p><p>Examples:
+
+<ul>
+<li><span class='jex'>json_remove('[0,1,2,3,4]','$[2]')</span>
+<span class='jans'>&rarr; '[0,1,3,4]'</span></li>
+
+<li><span class='jex'>json_remove('[0,1,2,3,4]','$[2]','$[0]')</span>
+<span class='jans'>&rarr; '[1,3,4]'</span></li>
+
+<li><span class='jex'>json_remove('[0,1,2,3,4]','$[0]','$[2]')</span>
+<span class='jans'>&rarr; '[1,2,4]'</span></li>
+
+<li><span class='jex'>json_remove('[0,1,2,3,4]','$[#-1]','$[0]')</span>
+<span class='jans'>&rarr; '[1,2,3]'</span></li>
+
+<li><span class='jex'>json_remove('{"x":25,"y":42}')</span>
+<span class='jans'>&rarr; '{"x":25,"y":42}'</span></li>
+
+<li><span class='jex'>json_remove('{"x":25,"y":42}','$.z')</span>
+<span class='jans'>&rarr; '{"x":25,"y":42}'</span></li>
+
+<li><span class='jex'>json_remove('{"x":25,"y":42}','$.y')</span>
+<span class='jans'>&rarr; '{"x":25}'</span></li>
+
+<li><span class='jex'>json_remove('{"x":25,"y":42}','$')</span>
+<span class='jans'>&rarr; NULL</span></li>
+
+</ul>
+
+
+<a name="jtype"></a>
+
+</p><h2 id="the_json_type_function"><span>4.10. </span>The json_type() function</h2>
+
+<p>The json_type(X) function returns the "type" of the outermost element
+of X. The json_type(X,P) function returns the "type" of the element
+in X that is selected by path P. The "type" returned by json_type() is
+one of the following SQL text values:
+'null', 'true', 'false', 'integer', 'real', 'text', 'array', or 'object'.
+If the path P in json_type(X,P) selects an element that does not exist
+in X, then this function returns NULL.
+
+</p><p>The json_type() function throws an error if any of its arguments is
+not well-formed or is a BLOB.
+
+</p><p>Examples:
+
+<ul>
+<li><span class='jex'>json_type('{"a":[2,3.5,true,false,null,"x"]}')</span>
+<span class='jans'>&rarr; 'object'</span></li>
+
+<li><span class='jex'>json_type('{"a":[2,3.5,true,false,null,"x"]}','$')</span>
+<span class='jans'>&rarr; 'object'</span></li>
+
+<li><span class='jex'>json_type('{"a":[2,3.5,true,false,null,"x"]}','$.a')</span>
+<span class='jans'>&rarr; 'array'</span></li>
+
+<li><span class='jex'>json_type('{"a":[2,3.5,true,false,null,"x"]}','$.a[0]')</span>
+<span class='jans'>&rarr; 'integer'</span></li>
+
+<li><span class='jex'>json_type('{"a":[2,3.5,true,false,null,"x"]}','$.a[1]')</span>
+<span class='jans'>&rarr; 'real'</span></li>
+
+<li><span class='jex'>json_type('{"a":[2,3.5,true,false,null,"x"]}','$.a[2]')</span>
+<span class='jans'>&rarr; 'true'</span></li>
+
+<li><span class='jex'>json_type('{"a":[2,3.5,true,false,null,"x"]}','$.a[3]')</span>
+<span class='jans'>&rarr; 'false'</span></li>
+
+<li><span class='jex'>json_type('{"a":[2,3.5,true,false,null,"x"]}','$.a[4]')</span>
+<span class='jans'>&rarr; 'null'</span></li>
+
+<li><span class='jex'>json_type('{"a":[2,3.5,true,false,null,"x"]}','$.a[5]')</span>
+<span class='jans'>&rarr; 'text'</span></li>
+
+<li><span class='jex'>json_type('{"a":[2,3.5,true,false,null,"x"]}','$.a[6]')</span>
+<span class='jans'>&rarr; NULL</span></li>
+
+</ul>
+
+
+<a name="jvalid"></a>
+
+</p><h2 id="the_json_valid_function"><span>4.11. </span>The json_valid() function</h2>
+
+<p>The json_valid(X) function return 1 if the argument X is well-formed
+JSON and return 0 if the argument X is not well-formed JSON.
+
+</p><p>Examples:
+
+<ul>
+<li><span class='jex'>json_valid('{"x":35}')</span>
+<span class='jans'>&rarr; 1</span></li>
+
+<li><span class='jex'>json_valid('{"x":35')</span>
+<span class='jans'>&rarr; 0</span></li>
+
+</ul>
+
+
+<a name="jquote"></a>
+
+</p><h2 id="the_json_quote_function"><span>4.12. </span>The json_quote() function</h2>
+
+<p>The json_quote(X) function converts the SQL value X (a number or a
+string) into its corresponding JSON representation. If X is a JSON value
+returned by another JSON function, then this function is a no-op.
+
+</p><p>Examples:
+
+<ul>
+<li><span class='jex'>json_quote(3.14159)</span>
+<span class='jans'>&rarr; 3.14159</span></li>
+
+<li><span class='jex'>json_quote('verdant')</span>
+<span class='jans'>&rarr; '"verdant"'</span></li>
+
+<li><span class='jex'>json_quote('[1]')</span>
+<span class='jans'>&rarr; '"[1]"'</span></li>
+
+<li><span class='jex'>json_quote(json('[1]'))</span>
+<span class='jans'>&rarr; '[1]'</span></li>
+
+<li><span class='jex'>json_quote('[1,')</span>
+<span class='jans'>&rarr; '"[1"'</span></li>
+
+</ul>
+
+
+<a name="jgrouparray"></a>
+<a name="jgroupobject"></a>
+
+</p><h2 id="the_json_group_array_and_json_group_object_aggregate_sql_functions"><span>4.13. </span>The json_group_array() and json_group_object()
+aggregate SQL functions</h2>
+
+<p>The json_group_array(X) function is an
+<a href="lang_aggfunc.html">aggregate SQL function</a> that returns a JSON array
+comprised of all X values in the aggregation.
+Similarly, the json_group_object(NAME,VALUE) function returns a JSON object
+comprised of all NAME/VALUE pairs in the aggregation.
+
+
+<a name="jeach"></a>
+
+<a name="jtree"></a>
+
+</p><h2 id="the_json_each_and_json_tree_table_valued_functions"><span>4.14. </span>The json_each() and json_tree() table-valued functions</h2>
+
+<p>The json_each(X) and json_tree(X) <a href="vtab.html#tabfunc2">table-valued functions</a> walk the
+JSON value provided as their first argument and return one row for each
+element. The json_each(X) function only walks the immediate children
+of the top-level array or object,
+or just the top-level element itself if the top-level
+element is a primitive value.
+The json_tree(X) function recursively walks through the
+JSON substructure starting with the top-level element.
+
+</p><p>The json_each(X,P) and json_tree(X,P) functions work just like
+their one-argument counterparts except that they treat the element
+identified by path P as the top-level element.
+
+</p><p>The schema for the table returned by json_each() and json_tree() is
+as follows:
+
+</p><blockquote><pre>
+CREATE TABLE json_tree(
+ key ANY, -- key for current element relative to its parent
+ value ANY, -- value for the current element
+ type TEXT, -- 'object','array','string','integer', etc.
+ atom ANY, -- value for primitive types, null for array & object
+ id INTEGER, -- integer ID for this element
+ parent INTEGER, -- integer ID for the parent of this element
+ fullkey TEXT, -- full path describing the current element
+ path TEXT, -- path to the container of the current row
+ json JSON HIDDEN, -- 1st input parameter: the raw JSON
+ root TEXT HIDDEN -- 2nd input parameter: the PATH at which to start
+);
+</pre></blockquote>
+
+<p>
+The "key" column is the integer array index for elements of a JSON array
+and the text label for elements of a JSON object. The key column is
+NULL in all other cases.
+
+</p><p>
+The "atom" column is the SQL value corresponding to primitive elements -
+elements other than JSON arrays and objects. The "atom" column is NULL
+for a JSON array or object. The "value" column is the same as the
+"atom" column for primitive JSON elements but takes on the text JSON value
+for arrays and objects.
+
+</p><p>
+The "type" column is an SQL text value taken from ('null', 'true', 'false',
+'integer', 'real', 'text', 'array', 'object') according to the type of
+the current JSON element.
+
+</p><p>
+The "id" column is an integer that identifies a specific JSON element
+within the complete JSON string. The "id" integer is an internal housekeeping
+number, the computation of which might change in future releases. The
+only guarantee is that the "id" column will be different for every row.
+
+</p><p>
+The "parent" column is always NULL for json_each().
+For json_tree(),
+the "parent" column is the "id" integer for the parent of the current
+element, or NULL for the top-level JSON element or the element identified
+by the root path in the second argument.
+
+</p><p>
+The "fullkey" column is a text path that uniquely identifies the current
+row element within the original JSON string. The complete key to the
+true top-level element is returned even if an alternative starting point
+is provided by the "root" argument.
+
+</p><p>
+The "path" column is the path to the array or object container that holds
+the current row, or the path to the current row in the case where the
+iteration starts on a primitive type and thus only provides a single
+row of output.
+
+</p><h3 id="examples_using_json_each_and_json_tree_"><span>4.14.1. </span>Examples using json_each() and json_tree()</h3>
+
+<p>Suppose the table "CREATE TABLE user(name,phone)" stores zero or
+more phone numbers as a JSON array object in the user.phone field.
+To find all users who have any phone number with a 704 area code:
+
+</p><blockquote><pre>
+SELECT DISTINCT user.name
+ FROM user, json_each(user.phone)
+ WHERE json_each.value LIKE '704-%';
+</pre></blockquote>
+
+<p>Now suppose the user.phone field contains plain text if the user
+has only a single phone number and a JSON array if the user has multiple
+phone numbers. The same question is posed: "Which users have a phone number
+in the 704 area code?" But now the json_each() function can only be called
+for those users that have two or more phone numbers since json_each()
+requires well-formed JSON as its first argument:
+
+</p><blockquote><pre>
+SELECT name FROM user WHERE phone LIKE '704-%'
+UNION
+SELECT user.name
+ FROM user, json_each(user.phone)
+ WHERE json_valid(user.phone)
+ AND json_each.value LIKE '704-%';
+</pre></blockquote>
+
+<p>Consider a different database with "CREATE TABLE big(json JSON)".
+To see a complete line-by-line decomposition of the data:
+
+</p><blockquote><pre>
+SELECT big.rowid, fullkey, value
+ FROM big, json_tree(big.json)
+ WHERE json_tree.type NOT IN ('object','array');
+</pre></blockquote>
+
+<p>In the previous, the "type NOT IN ('object','array')" term of the
+WHERE clause suppresses containers and only lets through leaf elements.
+The same effect could be achieved this way:
+
+</p><blockquote><pre>
+SELECT big.rowid, fullkey, atom
+ FROM big, json_tree(big.json)
+ WHERE atom IS NOT NULL;
+</pre></blockquote>
+
+<p>Suppose each entry in the BIG table is a JSON object
+with a '$.id' field that is a unique identifier
+and a '$.partlist' field that can be a deeply nested object.
+You want to find the id of every entry that contains one
+or more references to uuid '6fa5181e-5721-11e5-a04e-57f3d7b32808' anywhere
+in its '$.partlist'.
+
+</p><blockquote><pre>
+SELECT DISTINCT json_extract(big.json,'$.id')
+ FROM big, json_tree(big.json, '$.partlist')
+ WHERE json_tree.key='uuid'
+ AND json_tree.value='6fa5181e-5721-11e5-a04e-57f3d7b32808';
+</pre></blockquote>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/json1.in?m=a3a94372544eb4e69">2022-06-24 16:56:23</a> UTC </small></i></p>
+
diff --git a/www/keyword_index.html b/www/keyword_index.html
new file mode 100644
index 0000000..81ef934
--- /dev/null
+++ b/www/keyword_index.html
@@ -0,0 +1,3103 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Website Keyword Index</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+<h2 align=center>Keyword Index</h1>
+
+<var class="rightsidebar border2px desktoponly">
+Other Documentation Indexes:
+<ul>
+<li><a href="docs.html">Categorical Document List</a>
+<li><a href="books.html">Books About SQLite</a>
+<li><a href="doclist.html">Alphabetical List Of Documents</a>
+<li><a href="sitemap.html">Permuted Document Title Index</a>
+</ul>
+</var>
+
+<ul class='lessindent'>
+<li> <a href="printf.html#percentq">%q</a> </li>
+<li> <a href="printf.html#percentw">%w</a> </li>
+<li> <a href="printf.html#percentz">%z</a> </li>
+<li> <a href="fasterthanfs.html">35% Faster Than The Filesystem</a> </li>
+<li> <a href="testing.html#3pfuzz">3rd-party fuzzers</a> </li>
+<li> <a href="np1queryprob.html">about 200 SQL statements per webpage</a> </li>
+<li> <a href="lang_corefunc.html#abs">abs() SQL function</a> </li>
+<li> <a href="transactional.html">ACID</a> </li>
+<li> <a href="lang_mathfunc.html#acos">acos() SQL function</a> </li>
+<li> <a href="lang_mathfunc.html#acosh">acosh() SQL function</a> </li>
+<li> <a href="lang_altertable.html#altertabaddcol">add column</a> </li>
+<li> <a href="zipfile.html#adding_entries_to_a_zip_archive">Adding to Zip</a> </li>
+<li> <a href="swarmvtab.html#advanced_usage">advanced</a> </li>
+<li> <a href="wal.html#advantages">advantages of WAL-mode</a> </li>
+<li> <a href="datatype3.html#affinity">affinity</a> </li>
+<li> <a href="datatype3.html#affcompoundview">affinity in compound VIEWs</a> </li>
+<li> <a href="datatype3.html#expraff">Affinity Of Expressions</a> </li>
+<li> <a href="testing.html#aflfuzz">AFL</a> </li>
+<li> <a href="lang_aggfunc.html">Aggregate Functions</a> </li>
+<li> <a href="windowfunctions.html#aggwinfunc">aggregate window functions</a> </li>
+<li> <a href="syntax/aggregate-function-invocation.html">aggregate-function-invocation</a> </li>
+<li> <a href="syntax/aggregate-function-invocation.html">aggregate-function-invocation syntax diagram</a> </li>
+<li> <a href="doclist.html">alphabetical listing of documents</a> </li>
+<li> <a href="lang_altertable.html">ALTER</a> </li>
+<li> <a href="lang_altertable.html">ALTER TABLE</a> </li>
+<li> <a href="lang_altertable.html#altertabaddcol">ALTER TABLE ADD COLUMN</a> </li>
+<li> <a href="lang_altertable.html#altertabdropcol">ALTER TABLE DROP COLUMN</a> </li>
+<li> <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> </li>
+<li> <a href="lang_altertable.html#altertabmvcol">ALTER TABLE RENAME COLUMN</a> </li>
+<li> <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME documentation</a> </li>
+<li> <a href="syntax/alter-table-stmt.html">alter-table-stmt</a> </li>
+<li> <a href="syntax/alter-table-stmt.html">alter-table-stmt syntax diagram</a> </li>
+<li> <a href="amalgamation.html">amalgamation</a> </li>
+<li> <a href="download.html">amalgamation tarball</a> </li>
+<li> <a href="testing.html#aflfuzz">American Fuzzy Lop fuzzer</a> </li>
+<li> <a href="pragma.html#pragma_analysis_limit">analysis_limit pragma</a> </li>
+<li> <a href="syntax/analyze-stmt.html">analyze-stmt</a> </li>
+<li> <a href="syntax/analyze-stmt.html">analyze-stmt syntax diagram</a> </li>
+<li> <a href="appfileformat.html">Application File Format</a> </li>
+<li> <a href="appfileformat.html">application file-format</a> </li>
+<li> <a href="fileformat2.html#appid">Application ID</a> </li>
+<li> <a href="appfunc.html#sec">application-defined function attacks</a> </li>
+<li> <a href="appfunc.html">application-defined SQL function</a> </li>
+<li> <a href="windowfunctions.html#udfwinfunc">application-defined window functions</a> </li>
+<li> <a href="pragma.html#pragma_application_id">application_id pragma</a> </li>
+<li> <a href="flextypegood.html">appreciate the freedom</a> </li>
+<li> <a href="whentouse.html">Appropriate Uses For SQLite</a> </li>
+<li> <a href="lang_analyze.html#approx">approximate ANALYZE</a> </li>
+<li> <a href="cli.html#sqlar">.archive command</a> </li>
+<li> <a href="lang_mathfunc.html#asin">asin() SQL function</a> </li>
+<li> <a href="lang_mathfunc.html#asinh">asinh() SQL function</a> </li>
+<li> <a href="asyncvfs.html">asynchronous I/O backend</a> </li>
+<li> <a href="asyncvfs.html">asynchronous VFS</a> </li>
+<li> <a href="lang_mathfunc.html#atan">atan() SQL function</a> </li>
+<li> <a href="lang_mathfunc.html#atan2">atan2() SQL function</a> </li>
+<li> <a href="lang_mathfunc.html#atanh">atanh() SQL function</a> </li>
+<li> <a href="atomiccommit.html">atomic commit</a> </li>
+<li> <a href="lang_attach.html">attach</a> </li>
+<li> <a href="lang_attach.html">ATTACH DATABASE</a> </li>
+<li> <a href="syntax/attach-stmt.html">attach-stmt</a> </li>
+<li> <a href="syntax/attach-stmt.html">attach-stmt syntax diagram</a> </li>
+<li> <a href="lang_attach.html">attached</a> </li>
+<li> <a href="security.html">attack resistance</a> </li>
+<li> <a href="c3ref/set_authorizer.html">authorizer callback</a> </li>
+<li> <a href="tclsqlite.html#authorizer">authorizer method</a> </li>
+<li> <a href="lang_datefunc.html#automod">auto modifier</a> </li>
+<li> <a href="pragma.html#pragma_auto_vacuum">auto_vacuum pragma</a> </li>
+<li> <a href="c3ref/get_autocommit.html">autocommit mode</a> </li>
+<li> <a href="autoinc.html">AUTOINCREMENT</a> </li>
+<li> <a href="undoredo.html">automated undo/redo stack</a> </li>
+<li> <a href="optoverview.html#autoindex">automatic indexes</a> </li>
+<li> <a href="optoverview.html#autoindex">automatic indexing</a> </li>
+<li> <a href="pragma.html#pragma_automatic_index">automatic_index pragma</a> </li>
+<li> <a href="lang_analyze.html#autoanalyze">automatically running ANALYZE</a> </li>
+<li> <a href="fts3.html#*fts4automergecmd">"automerge" command</a> </li>
+<li> <a href="rtree.html#auxcol">auxiliary columns</a> </li>
+<li> <a href="rtree.html#auxcol">auxiliary columns in r-tree tables</a> </li>
+<li> <a href="fts5.html#sorting_by_auxiliary_function_results">auxiliary function mapping</a> </li>
+<li> <a href="lang_aggfunc.html#avg">avg() aggregate function</a> </li>
+<li> <a href="wal.html#bigwal">avoiding large WAL files</a> </li>
+<li> <a href="fileformat2.html#btree">B*-Trees</a> </li>
+<li> <a href="fileformat2.html#btree">B-tree</a> </li>
+<li> <a href="backup.html">backup API</a> </li>
+<li> <a href="tclsqlite.html#backup">backup method</a> </li>
+<li> <a href="lang_select.html#bareagg">bare aggregate terms</a> </li>
+<li> <a href="bytecodevtab.html">bcvtab</a> </li>
+<li> <a href="lang_transaction.html">BEGIN</a> </li>
+<li> <a href="lang_transaction.html#immediate">BEGIN EXCLUSIVE</a> </li>
+<li> <a href="lang_transaction.html#immediate">BEGIN IMMEDIATE</a> </li>
+<li> <a href="syntax/begin-stmt.html">begin-stmt</a> </li>
+<li> <a href="syntax/begin-stmt.html">begin-stmt syntax diagram</a> </li>
+<li> <a href="withoutrowid.html#bene">benefits of using WITHOUT ROWID</a> </li>
+<li> <a href="lang_expr.html#between">BETWEEN</a> </li>
+<li> <a href="datatype3.html#collation">BINARY collating function</a> </li>
+<li> <a href="lang_expr.html#binaryops">binary operators</a> </li>
+<li> <a href="tclsqlite.html#bind_fallback">bind_fallback method</a> </li>
+<li> <a href="c3ref/blob.html">BLOB handle</a> </li>
+<li> <a href="intern-v-extern-blob.html">BLOB I/O performance</a> </li>
+<li> <a href="queryplanner.html#partialsort">block sorting</a> </li>
+<li> <a href="books.html">books about SQLite</a> </li>
+<li> <a href="datatype3.html#boolean">boolean datatype</a> </li>
+<li> <a href="lang_expr.html#booleanexpr">boolean expression</a> </li>
+<li> <a href="lang_expr.html#varparam">bound parameter</a> </li>
+<li> <a href="fts3.html#limitations">bugs</a> </li>
+<li> <a href="download.html#encoding">build product names</a> </li>
+<li> <a href="howtocompile.html#dll">building a DLL</a> </li>
+<li> <a href="howtocompile.html#amal">building the amalgamation</a> </li>
+<li> <a href="malloc.html#altalloc">built-in memory allocators</a> </li>
+<li> <a href="printf.html">built-in printf()</a> </li>
+<li> <a href="lang_mathfunc.html">built-in SQL math functions</a> </li>
+<li> <a href="windowfunctions.html#builtins">built-in window functions</a> </li>
+<li> <a href="windowfunctions.html#builtins">built-ins</a> </li>
+<li> <a href="windowfunctions.html#biwinfunc">builtin window functions</a> </li>
+<li> <a href="c3ref/busy_handler.html">busy handler</a> </li>
+<li> <a href="tclsqlite.html#busy">busy method</a> </li>
+<li> <a href="c3ref/busy_handler.html">busy-handler callback</a> </li>
+<li> <a href="pragma.html#pragma_busy_timeout">busy_timeout pragma</a> </li>
+<li> <a href="c3ref/bind_blob.html#byteorderdeterminationrules">byte-order determination rules</a> </li>
+<li> <a href="opcode.html">bytecode</a> </li>
+<li> <a href="bytecodevtab.html">bytecode and tables_used virtual tables</a> </li>
+<li> <a href="opcode.html">bytecode engine</a> </li>
+<li> <a href="bytecodevtab.html">bytecode virtual table</a> </li>
+<li> <a href="c3ref/funclist.html">C-API function list</a> </li>
+<li> <a href="c3ref/intro.html">C-language Interface</a> </li>
+<li> <a href="tclsqlite.html#cache">cache method</a> </li>
+<li> <a href="uri.html#uricache">"cache" query parameter</a> </li>
+<li> <a href="pragma.html#pragma_cache_size">cache_size pragma</a> </li>
+<li> <a href="pragma.html#pragma_cache_spill">cache_spill pragma</a> </li>
+<li> <a href="getthecode.html">canonical source code</a> </li>
+<li> <a href="carray.html">carray</a> </li>
+<li> <a href="carray.html">carray() table-valued function</a> </li>
+<li> <a href="lang_expr.html#case">CASE expression</a> </li>
+<li> <a href="pragma.html#pragma_case_sensitive_like">case_sensitive_like pragma</a> </li>
+<li> <a href="lang_expr.html#castexpr">CAST</a> </li>
+<li> <a href="lang_expr.html#castexpr">CAST expression</a> </li>
+<li> <a href="lang_expr.html#castexpr">CAST operator</a> </li>
+<li> <a href="docs.html">categorical listing of SQLite documents</a> </li>
+<li> <a href="lang_mathfunc.html#ceil">ceil</a> </li>
+<li> <a href="lang_mathfunc.html#ceil">ceiling</a> </li>
+<li> <a href="fileformat2.html#cellformat">cell format summary</a> </li>
+<li> <a href="fileformat2.html#cell_payload">cell payload</a> </li>
+<li> <a href="pragma.html#pragma_cell_size_check">cell_size_check pragma</a> </li>
+<li> <a href="howtocorrupt.html#cfgerr">cfgerrors*</a> </li>
+<li> <a href="fileformat2.html#chngctr">change counter</a> </li>
+<li> <a href="tclsqlite.html#changes">changes method</a> </li>
+<li> <a href="lang_corefunc.html#changes">changes() SQL function</a> </li>
+<li> <a href="sessionintro.html#changeset">changeset</a> </li>
+<li> <a href="lang_corefunc.html#char">char() SQL function</a> </li>
+<li> <a href="lang_createtable.html#ckconst">CHECK</a> </li>
+<li> <a href="lang_createtable.html#ckconst">CHECK constraint</a> </li>
+<li> <a href="testing.html#cklist">checklist</a> </li>
+<li> <a href="wal.html#ckpt">checkpoint</a> </li>
+<li> <a href="c3ref/c_checkpoint_full.html">checkpoint mode</a> </li>
+<li> <a href="pragma.html#pragma_checkpoint_fullfsync">checkpoint_fullfsync pragma</a> </li>
+<li> <a href="wal.html#ckpt">checkpointed</a> </li>
+<li> <a href="wal.html#ckpt">checkpointing</a> </li>
+<li> <a href="cksumvfs.html">checksum VFS</a> </li>
+<li> <a href="cksumvfs.html">checksum VFS shim</a> </li>
+<li> <a href="foreignkeys.html#parentchild">child key</a> </li>
+<li> <a href="foreignkeys.html#parentchild">child table</a> </li>
+<li> <a href="chronology.html">chronology</a> </li>
+<li> <a href="cksumvfs.html">cksumvfs</a> </li>
+<li> <a href="cli.html">CLI</a> </li>
+<li> <a href="getthecode.html#clone">clone the entire repository</a> </li>
+<li> <a href="tclsqlite.html#close">close method</a> </li>
+<li> <a href="withoutrowid.html">Clustered indexes</a> </li>
+<li> <a href="optoverview.html#coroutines">co-routines</a> </li>
+<li> <a href="lang_corefunc.html#coalesce">coalesce() SQL function</a> </li>
+<li> <a href="codeofconduct.html">Code of Conduct</a> </li>
+<li> <a href="codeofethics.html">Code of Ethics</a> </li>
+<li> <a href="codeofethics.html">Code of Ethics of the Project Founder</a> </li>
+<li> <a href="download.html#srctree">code repositories</a> </li>
+<li> <a href="lang_createindex.html#collidx">COLLATE</a> </li>
+<li> <a href="lang_createtable.html#collateclause">COLLATE clause</a> </li>
+<li> <a href="lang_createtable.html#collateclause">COLLATE constraint</a> </li>
+<li> <a href="tclsqlite.html#collate">collate method</a> </li>
+<li> <a href="lang_expr.html#collateop">COLLATE operator</a> </li>
+<li> <a href="datatype3.html#collation">collating function</a> </li>
+<li> <a href="pragma.html#pragma_collation_list">collation_list pragma</a> </li>
+<li> <a href="tclsqlite.html#collation_needed">collation_needed method</a> </li>
+<li> <a href="c3ref/column_blob.html">column access functions</a> </li>
+<li> <a href="datatype3.html#affinity">column affinity</a> </li>
+<li> <a href="lang_createtable.html#tablecoldef">column definition</a> </li>
+<li> <a href="syntax/column-constraint.html">column-constraint</a> </li>
+<li> <a href="syntax/column-constraint.html">column-constraint syntax diagram</a> </li>
+<li> <a href="syntax/column-def.html">column-def</a> </li>
+<li> <a href="syntax/column-def.html">column-def syntax diagram</a> </li>
+<li> <a href="syntax/column-name-list.html">column-name-list</a> </li>
+<li> <a href="syntax/column-name-list.html">column-name-list syntax diagram</a> </li>
+<li> <a href="cli.html#clmnr">columnar output modes</a> </li>
+<li> <a href="vtab.html#colUsed">colUsed field</a> </li>
+<li> <a href="cli.html">Command Line Interface</a> </li>
+<li> <a href="cli.html">command-line interface</a> </li>
+<li> <a href="cli.html#clopts">command-line options</a> </li>
+<li> <a href="cli.html">command-line shell</a> </li>
+<li> <a href="fts3.html#commands">commands</a> </li>
+<li> <a href="lang_comment.html">comment</a> </li>
+<li> <a href="syntax/comment-syntax.html">comment-syntax</a> </li>
+<li> <a href="syntax/comment-syntax.html">comment-syntax syntax diagram</a> </li>
+<li> <a href="lang_transaction.html">COMMIT</a> </li>
+<li> <a href="syntax/commit-stmt.html">commit-stmt</a> </li>
+<li> <a href="syntax/commit-stmt.html">commit-stmt syntax diagram</a> </li>
+<li> <a href="tclsqlite.html#commit_hook">commit_hook method</a> </li>
+<li> <a href="lang_with.html">common table expressions</a> </li>
+<li> <a href="syntax/common-table-expression.html">common-table-expression</a> </li>
+<li> <a href="syntax/common-table-expression.html">common-table-expression syntax diagram</a> </li>
+<li> <a href="datatype3.html#compaff">comparison affinity rules</a> </li>
+<li> <a href="datatype3.html#comparisons">comparison expressions</a> </li>
+<li> <a href="fts5.html#appendix_a">comparison with fts4</a> </li>
+<li> <a href="swarmvtab.html#compiling_and_using_swarmvtab">compilation</a> </li>
+<li> <a href="fts3.html#compiling_and_enabling_fts3_and_fts4">compile fts</a> </li>
+<li> <a href="loadext.html#build">compile loadable extensions</a> </li>
+<li> <a href="compile.html">compile-time options</a> </li>
+<li> <a href="pragma.html#pragma_compile_options">compile_options pragma</a> </li>
+<li> <a href="loadext.html#build">Compiling Loadable Extensions</a> </li>
+<li> <a href="howtocompile.html#cli">compiling the CLI</a> </li>
+<li> <a href="howtocompile.html#tcl">compiling the TCL interface</a> </li>
+<li> <a href="changes.html">complete list of SQLite releases</a> </li>
+<li> <a href="tclsqlite.html#complete">complete method</a> </li>
+<li> <a href="completion.html">COMPLETION</a> </li>
+<li> <a href="completion.html">COMPLETION extension</a> </li>
+<li> <a href="completion.html">COMPLETION table-valued function</a> </li>
+<li> <a href="lang_select.html#compound">compound query</a> </li>
+<li> <a href="lang_select.html#compound">compound select</a> </li>
+<li> <a href="syntax/compound-operator.html">compound-operator</a> </li>
+<li> <a href="syntax/compound-operator.html">compound-operator syntax diagram</a> </li>
+<li> <a href="syntax/compound-select-stmt.html">compound-select-stmt</a> </li>
+<li> <a href="syntax/compound-select-stmt.html">compound-select-stmt syntax diagram</a> </li>
+<li> <a href="fts3.html#*fts4compression">compressed FTS4 content</a> </li>
+<li> <a href="lang_with.html#mandelbrot">compute the Mandelbrot set</a> </li>
+<li> <a href="gencol.html">computed columns</a> </li>
+<li> <a href="tclsqlite.html#config">config method</a> </li>
+<li> <a href="spellfix1.html#configeditdist">configurable edit distances</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html">configuration option</a> </li>
+<li> <a href="lang_conflict.html">conflict clause</a> </li>
+<li> <a href="lang_conflict.html">conflict resolution algorithm</a> </li>
+<li> <a href="c3ref/c_fail.html">conflict resolution mode</a> </li>
+<li> <a href="syntax/conflict-clause.html">conflict-clause</a> </li>
+<li> <a href="syntax/conflict-clause.html">conflict-clause syntax diagram</a> </li>
+<li> <a href="cli.html#dotconn">.connection</a> </li>
+<li> <a href="optoverview.html#constprop">constant-propagation optimization</a> </li>
+<li> <a href="fts3.html#_contentless_fts4_tables_">contentless fts4 tables</a> </li>
+<li> <a href="tclsqlite.html#copy">copy method</a> </li>
+<li> <a href="copyright.html">copyright</a> </li>
+<li> <a href="lang_corefunc.html">Core Functions</a> </li>
+<li> <a href="c3ref/open.html#coreuriqueryparameters">core URI query parameters</a> </li>
+<li> <a href="lang_expr.html#cosub">correlated subqueries</a> </li>
+<li> <a href="lang_mathfunc.html#cos">cos() SQL function</a> </li>
+<li> <a href="lang_mathfunc.html#cosh">cosh() SQL function</a> </li>
+<li> <a href="lang_aggfunc.html#count">count() aggregate function</a> </li>
+<li> <a href="pragma.html#pragma_count_changes">count_changes pragma</a> </li>
+<li> <a href="testing.html#tension">coverage testing vs. fuzz testing</a> </li>
+<li> <a href="queryplanner.html#covidx">covering index</a> </li>
+<li> <a href="queryplanner.html#covidx">covering indexes</a> </li>
+<li> <a href="queryplanner.html#covidx">covering indices</a> </li>
+<li> <a href="cpu.html">CPU cycles used</a> </li>
+<li> <a href="cpu.html">CPU performance measurement</a> </li>
+<li> <a href="lang_createindex.html">CREATE INDEX</a> </li>
+<li> <a href="lang_createtable.html">CREATE TABLE</a> </li>
+<li> <a href="lang_createtable.html#createtabas">CREATE TABLE AS</a> </li>
+<li> <a href="lang_createtrigger.html">CREATE TRIGGER</a> </li>
+<li> <a href="lang_createview.html">CREATE VIEW</a> </li>
+<li> <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> </li>
+<li> <a href="syntax/create-index-stmt.html">create-index-stmt</a> </li>
+<li> <a href="syntax/create-index-stmt.html">create-index-stmt syntax diagram</a> </li>
+<li> <a href="syntax/create-table-stmt.html">create-table-stmt</a> </li>
+<li> <a href="syntax/create-table-stmt.html">create-table-stmt syntax diagram</a> </li>
+<li> <a href="syntax/create-trigger-stmt.html">create-trigger-stmt</a> </li>
+<li> <a href="syntax/create-trigger-stmt.html">create-trigger-stmt syntax diagram</a> </li>
+<li> <a href="syntax/create-view-stmt.html">create-view-stmt</a> </li>
+<li> <a href="syntax/create-view-stmt.html">create-view-stmt syntax diagram</a> </li>
+<li> <a href="syntax/create-virtual-table-stmt.html">create-virtual-table-stmt</a> </li>
+<li> <a href="syntax/create-virtual-table-stmt.html">create-virtual-table-stmt syntax diagram</a> </li>
+<li> <a href="crew.html">crew</a> </li>
+<li> <a href="optoverview.html#crossjoin">CROSS JOIN</a> </li>
+<li> <a href="csv.html">csv</a> </li>
+<li> <a href="cli.html#csvout">CSV export</a> </li>
+<li> <a href="cli.html#csv">CSV import</a> </li>
+<li> <a href="csv.html">CSV virtual table</a> </li>
+<li> <a href="syntax/cte-table-name.html">cte-table-name</a> </li>
+<li> <a href="syntax/cte-table-name.html">cte-table-name syntax diagram</a> </li>
+<li> <a href="fts5.html#_custom_auxiliary_functions_api_reference_">custom auxiliary functions</a> </li>
+<li> <a href="custombuild.html">custom builds</a> </li>
+<li> <a href="rtree.html#customquery">custom r-tree queries</a> </li>
+<li> <a href="appfunc.html">custom SQL function</a> </li>
+<li> <a href="fts5.html#custom_tokenizers">custom tokenizers</a> </li>
+<li> <a href="vtab.html#customvtab">custom virtual tables</a> </li>
+<li> <a href="cves.html">CVEs</a> </li>
+<li> <a href="crew.html#dan">Dan Kennedy</a> </li>
+<li> <a href="whentouse.html#container">data container</a> </li>
+<li> <a href="whentouse.html#wireproto">data transfer format</a> </li>
+<li> <a href="pragma.html#pragma_data_store_directory">data_store_directory pragma</a> </li>
+<li> <a href="pragma.html#pragma_data_version">data_version pragma</a> </li>
+<li> <a href="sqlar.html#dbasobj">database as container object</a> </li>
+<li> <a href="sqlar.html#dbasobj">database as object</a> </li>
+<li> <a href="c3ref/sqlite3.html">database connection</a> </li>
+<li> <a href="shortnames.html#db83corrupt">database corruption caused by inconsistent use of 8+3 filenames</a> </li>
+<li> <a href="howtocorrupt.html#alias">database filename aliasing</a> </li>
+<li> <a href="fileformat2.html#database_header">database header</a> </li>
+<li> <a href="pragma.html#pragma_database_list">database_list pragma</a> </li>
+<li> <a href="cli.html#dotdatabases">.databases</a> </li>
+<li> <a href="cli.html#dotdatabases">.databases command</a> </li>
+<li> <a href="datatype3.html">datatype</a> </li>
+<li> <a href="datatype3.html#datetime">date and time datatype</a> </li>
+<li> <a href="lang_datefunc.html">date and time functions</a> </li>
+<li> <a href="lang_datefunc.html">date() SQL function</a> </li>
+<li> <a href="lang_datefunc.html#dtmods">date/time modifiers</a> </li>
+<li> <a href="deterministic.html#dtexception">date/time special case</a> </li>
+<li> <a href="lang_datefunc.html">datetime() SQL function</a> </li>
+<li> <a href="debugging.html">dbghints</a> </li>
+<li> <a href="dbhash.html">dbhash</a> </li>
+<li> <a href="dbhash.html">dbhash.exe</a> </li>
+<li> <a href="testing.html#dbsqlfuzz">dbsqlfuzz</a> </li>
+<li> <a href="dbstat.html">dbstat</a> </li>
+<li> <a href="dbstat.html#dbstatagg">DBSTAT aggregated mode</a> </li>
+<li> <a href="dbstat.html">dbstat virtual table</a> </li>
+<li> <a href="debugging.html">debugging hints</a> </li>
+<li> <a href="malloc.html#memdebug">debugging memory allocator</a> </li>
+<li> <a href="floatingpoint.html#decext">decimal extension</a> </li>
+<li> <a href="whentouse.html#dbcklst">decision checklist</a> </li>
+<li> <a href="lang_createtable.html#dfltval">DEFAULT clauses</a> </li>
+<li> <a href="lang_createtable.html#dfltval">default column value</a> </li>
+<li> <a href="malloc.html#defaultalloc">default memory allocator</a> </li>
+<li> <a href="lang_createtable.html#dfltval">default value</a> </li>
+<li> <a href="pragma.html#pragma_default_cache_size">default_cache_size pragma</a> </li>
+<li> <a href="security.html">defense against dark arts</a> </li>
+<li> <a href="security.html">defense against the dark arts</a> </li>
+<li> <a href="testing.html#defcode">defensive code</a> </li>
+<li> <a href="pragma.html#pragma_defer_foreign_keys">defer_foreign_keys pragma</a> </li>
+<li> <a href="lang_mathfunc.html#degrees">degrees() SQL function</a> </li>
+<li> <a href="syntax/delete-stmt.html">delete-stmt</a> </li>
+<li> <a href="syntax/delete-stmt.html">delete-stmt syntax diagram</a> </li>
+<li> <a href="syntax/delete-stmt-limited.html">delete-stmt-limited</a> </li>
+<li> <a href="syntax/delete-stmt-limited.html">delete-stmt-limited syntax diagram</a> </li>
+<li> <a href="howtocorrupt.html#delhotjrnl">deleting a hot journal</a> </li>
+<li> <a href="c3ref/experimental.html">deprecated</a> </li>
+<li> <a href="lang_createindex.html#descidx">DESC</a> </li>
+<li> <a href="lang_createindex.html#descidx">descending index</a> </li>
+<li> <a href="lang_createindex.html#descidx">descending indexes</a> </li>
+<li> <a href="lang_createindex.html#descidx">descending indices</a> </li>
+<li> <a href="tclsqlite.html#deserialize">deserialize method</a> </li>
+<li> <a href="lang_detach.html">DETACH DATABASE</a> </li>
+<li> <a href="syntax/detach-stmt.html">detach-stmt</a> </li>
+<li> <a href="syntax/detach-stmt.html">detach-stmt syntax diagram</a> </li>
+<li> <a href="deterministic.html">deterministic function</a> </li>
+<li> <a href="deterministic.html">deterministic SQL functions</a> </li>
+<li> <a href="compile.html#fdatasync">-DHAVE_FDATASYNC</a> </li>
+<li> <a href="compile.html#gmtime_r">-DHAVE_GMTIME_R</a> </li>
+<li> <a href="compile.html#isnan">-DHAVE_ISNAN</a> </li>
+<li> <a href="compile.html#localtime_r">-DHAVE_LOCALTIME_R</a> </li>
+<li> <a href="compile.html#localtime_s">-DHAVE_LOCALTIME_S</a> </li>
+<li> <a href="compile.html#malloc_usable_size">-DHAVE_MALLOC_USABLE_SIZE</a> </li>
+<li> <a href="compile.html#sqlite_config_h">-DHAVE_SQLITE_CONFIG_H</a> </li>
+<li> <a href="compile.html#strchrnul">-DHAVE_STRCHRNUL</a> </li>
+<li> <a href="compile.html#usleep">-DHAVE_USLEEP</a> </li>
+<li> <a href="compile.html#utime">-DHAVE_UTIME</a> </li>
+<li> <a href="lang_select.html#distinct">DISTINCT</a> </li>
+<li> <a href="docs.html">documents by category</a> </li>
+<li> <a href="cli.html#dotcmd">dot-commands</a> </li>
+<li> <a href="quirks.html#dblquote">double-quoted string literal</a> </li>
+<li> <a href="download.html">download page</a> </li>
+<li> <a href="lang_altertable.html#altertabdropcol">drop column</a> </li>
+<li> <a href="lang_dropindex.html">DROP INDEX</a> </li>
+<li> <a href="lang_droptable.html">DROP TABLE</a> </li>
+<li> <a href="lang_droptrigger.html">DROP TRIGGER</a> </li>
+<li> <a href="lang_dropview.html">DROP VIEW</a> </li>
+<li> <a href="syntax/drop-index-stmt.html">drop-index-stmt</a> </li>
+<li> <a href="syntax/drop-index-stmt.html">drop-index-stmt syntax diagram</a> </li>
+<li> <a href="syntax/drop-table-stmt.html">drop-table-stmt</a> </li>
+<li> <a href="syntax/drop-table-stmt.html">drop-table-stmt syntax diagram</a> </li>
+<li> <a href="syntax/drop-trigger-stmt.html">drop-trigger-stmt</a> </li>
+<li> <a href="syntax/drop-trigger-stmt.html">drop-trigger-stmt syntax diagram</a> </li>
+<li> <a href="syntax/drop-view-stmt.html">drop-view-stmt</a> </li>
+<li> <a href="syntax/drop-view-stmt.html">drop-view-stmt syntax diagram</a> </li>
+<li> <a href="compile.html#4_byte_aligned_malloc">-DSQLITE_4_BYTE_ALIGNED_MALLOC</a> </li>
+<li> <a href="compile.html#allow_covering_index_scan">-DSQLITE_ALLOW_COVERING_INDEX_SCAN</a> </li>
+<li> <a href="compile.html#allow_uri_authority">-DSQLITE_ALLOW_URI_AUTHORITY</a> </li>
+<li> <a href="compile.html#api">-DSQLITE_API</a> </li>
+<li> <a href="compile.html#apicall">-DSQLITE_APICALL</a> </li>
+<li> <a href="compile.html#byteorder">-DSQLITE_BYTEORDER</a> </li>
+<li> <a href="compile.html#callback">-DSQLITE_CALLBACK</a> </li>
+<li> <a href="compile.html#case_sensitive_like">-DSQLITE_CASE_SENSITIVE_LIKE</a> </li>
+<li> <a href="compile.html#cdecl">-DSQLITE_CDECL</a> </li>
+<li> <a href="compile.html#debug">-DSQLITE_DEBUG</a> </li>
+<li> <a href="compile.html#default_automatic_index">-DSQLITE_DEFAULT_AUTOMATIC_INDEX</a> </li>
+<li> <a href="compile.html#default_autovacuum">-DSQLITE_DEFAULT_AUTOVACUUM</a> </li>
+<li> <a href="compile.html#default_cache_size">-DSQLITE_DEFAULT_CACHE_SIZE</a> </li>
+<li> <a href="compile.html#default_file_format">-DSQLITE_DEFAULT_FILE_FORMAT</a> </li>
+<li> <a href="compile.html#default_file_permissions">-DSQLITE_DEFAULT_FILE_PERMISSIONS</a> </li>
+<li> <a href="compile.html#default_foreign_keys">-DSQLITE_DEFAULT_FOREIGN_KEYS</a> </li>
+<li> <a href="compile.html#default_journal_size_limit">-DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT</a> </li>
+<li> <a href="compile.html#default_locking_mode">-DSQLITE_DEFAULT_LOCKING_MODE</a> </li>
+<li> <a href="compile.html#default_lookaside">-DSQLITE_DEFAULT_LOOKASIDE</a> </li>
+<li> <a href="compile.html#default_memstatus">-DSQLITE_DEFAULT_MEMSTATUS</a> </li>
+<li> <a href="compile.html#default_mmap_size">-DSQLITE_DEFAULT_MMAP_SIZE</a> </li>
+<li> <a href="compile.html#default_page_size">-DSQLITE_DEFAULT_PAGE_SIZE</a> </li>
+<li> <a href="compile.html#default_pcache_initsz">-DSQLITE_DEFAULT_PCACHE_INITSZ</a> </li>
+<li> <a href="compile.html#default_synchronous">-DSQLITE_DEFAULT_SYNCHRONOUS</a> </li>
+<li> <a href="compile.html#default_wal_autocheckpoint">-DSQLITE_DEFAULT_WAL_AUTOCHECKPOINT</a> </li>
+<li> <a href="compile.html#default_wal_synchronous">-DSQLITE_DEFAULT_WAL_SYNCHRONOUS</a> </li>
+<li> <a href="compile.html#default_worker_threads">-DSQLITE_DEFAULT_WORKER_THREADS</a> </li>
+<li> <a href="compile.html#direct_overflow_read">-DSQLITE_DIRECT_OVERFLOW_READ</a> </li>
+<li> <a href="compile.html#disable_dirsync">-DSQLITE_DISABLE_DIRSYNC</a> </li>
+<li> <a href="compile.html#disable_fts3_unicode">-DSQLITE_DISABLE_FTS3_UNICODE</a> </li>
+<li> <a href="compile.html#disable_fts4_deferred">-DSQLITE_DISABLE_FTS4_DEFERRED</a> </li>
+<li> <a href="compile.html#disable_intrinsic">-DSQLITE_DISABLE_INTRINSIC</a> </li>
+<li> <a href="compile.html#disable_lfs">-DSQLITE_DISABLE_LFS</a> </li>
+<li> <a href="compile.html#dqs">-DSQLITE_DQS</a> </li>
+<li> <a href="compile.html#enable_8_3_names">-DSQLITE_ENABLE_8_3_NAMES</a> </li>
+<li> <a href="compile.html#enable_api_armor">-DSQLITE_ENABLE_API_ARMOR</a> </li>
+<li> <a href="compile.html#enable_atomic_write">-DSQLITE_ENABLE_ATOMIC_WRITE</a> </li>
+<li> <a href="compile.html#enable_batch_atomic_write">-DSQLITE_ENABLE_BATCH_ATOMIC_WRITE</a> </li>
+<li> <a href="compile.html#enable_bytecode_vtab">-DSQLITE_ENABLE_BYTECODE_VTAB</a> </li>
+<li> <a href="compile.html#enable_column_metadata">-DSQLITE_ENABLE_COLUMN_METADATA</a> </li>
+<li> <a href="compile.html#enable_dbpage_vtab">-DSQLITE_ENABLE_DBPAGE_VTAB</a> </li>
+<li> <a href="compile.html#enable_dbstat_vtab">-DSQLITE_ENABLE_DBSTAT_VTAB</a> </li>
+<li> <a href="compile.html#enable_deserialize">-DSQLITE_ENABLE_DESERIALIZE</a> </li>
+<li> <a href="compile.html#enable_explain_comments">-DSQLITE_ENABLE_EXPLAIN_COMMENTS</a> </li>
+<li> <a href="compile.html#enable_fts3">-DSQLITE_ENABLE_FTS3</a> </li>
+<li> <a href="compile.html#enable_fts3_parenthesis">-DSQLITE_ENABLE_FTS3_PARENTHESIS</a> </li>
+<li> <a href="compile.html#enable_fts3_tokenizer">-DSQLITE_ENABLE_FTS3_TOKENIZER</a> </li>
+<li> <a href="compile.html#enable_fts4">-DSQLITE_ENABLE_FTS4</a> </li>
+<li> <a href="compile.html#enable_fts5">-DSQLITE_ENABLE_FTS5</a> </li>
+<li> <a href="compile.html#enable_geopoly">-DSQLITE_ENABLE_GEOPOLY</a> </li>
+<li> <a href="compile.html#enable_icu">-DSQLITE_ENABLE_ICU</a> </li>
+<li> <a href="compile.html#enable_iotrace">-DSQLITE_ENABLE_IOTRACE</a> </li>
+<li> <a href="compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> </li>
+<li> <a href="compile.html#enable_locking_style">-DSQLITE_ENABLE_LOCKING_STYLE</a> </li>
+<li> <a href="compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> </li>
+<li> <a href="compile.html#enable_memory_management">-DSQLITE_ENABLE_MEMORY_MANAGEMENT</a> </li>
+<li> <a href="compile.html#enable_memsys3">-DSQLITE_ENABLE_MEMSYS3</a> </li>
+<li> <a href="compile.html#enable_memsys5">-DSQLITE_ENABLE_MEMSYS5</a> </li>
+<li> <a href="compile.html#enable_normalize">-DSQLITE_ENABLE_NORMALIZE</a> </li>
+<li> <a href="compile.html#enable_null_trim">-DSQLITE_ENABLE_NULL_TRIM</a> </li>
+<li> <a href="compile.html#enable_offset_sql_func">-DSQLITE_ENABLE_OFFSET_SQL_FUNC</a> </li>
+<li> <a href="compile.html#enable_preupdate_hook">-DSQLITE_ENABLE_PREUPDATE_HOOK</a> </li>
+<li> <a href="compile.html#enable_qpsg">-DSQLITE_ENABLE_QPSG</a> </li>
+<li> <a href="compile.html#enable_rbu">-DSQLITE_ENABLE_RBU</a> </li>
+<li> <a href="compile.html#enable_rtree">-DSQLITE_ENABLE_RTREE</a> </li>
+<li> <a href="compile.html#enable_session">-DSQLITE_ENABLE_SESSION</a> </li>
+<li> <a href="compile.html#enable_snapshot">-DSQLITE_ENABLE_SNAPSHOT</a> </li>
+<li> <a href="compile.html#enable_sorter_references">-DSQLITE_ENABLE_SORTER_REFERENCES</a> </li>
+<li> <a href="compile.html#enable_sqllog">-DSQLITE_ENABLE_SQLLOG</a> </li>
+<li> <a href="compile.html#enable_stat2">-DSQLITE_ENABLE_STAT2</a> </li>
+<li> <a href="compile.html#enable_stat3">-DSQLITE_ENABLE_STAT3</a> </li>
+<li> <a href="compile.html#enable_stat4">-DSQLITE_ENABLE_STAT4</a> </li>
+<li> <a href="compile.html#enable_stmt_scanstatus">-DSQLITE_ENABLE_STMT_SCANSTATUS</a> </li>
+<li> <a href="compile.html#enable_stmtvtab">-DSQLITE_ENABLE_STMTVTAB</a> </li>
+<li> <a href="compile.html#enable_tree_explain">-DSQLITE_ENABLE_TREE_EXPLAIN</a> </li>
+<li> <a href="compile.html#enable_unknown_sql_function">-DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</a> </li>
+<li> <a href="compile.html#enable_unlock_notify">-DSQLITE_ENABLE_UNLOCK_NOTIFY</a> </li>
+<li> <a href="compile.html#enable_update_delete_limit">-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT</a> </li>
+<li> <a href="compile.html#extern">-DSQLITE_EXTERN</a> </li>
+<li> <a href="compile.html#extra_durable">-DSQLITE_EXTRA_DURABLE</a> </li>
+<li> <a href="compile.html#fts3_max_expr_depth">-DSQLITE_FTS3_MAX_EXPR_DEPTH</a> </li>
+<li> <a href="compile.html#have_isnan">-DSQLITE_HAVE_ISNAN</a> </li>
+<li> <a href="compile.html#have_zlib">-DSQLITE_HAVE_ZLIB</a> </li>
+<li> <a href="compile.html#introspection_pragmas">-DSQLITE_INTROSPECTION_PRAGMAS</a> </li>
+<li> <a href="compile.html#like_doesnt_match_blobs">-DSQLITE_LIKE_DOESNT_MATCH_BLOBS</a> </li>
+<li> <a href="compile.html#max_allocation_size">-DSQLITE_MAX_ALLOCATION_SIZE</a> </li>
+<li> <a href="compile.html#max_memory">-DSQLITE_MAX_MEMORY</a> </li>
+<li> <a href="compile.html#max_mmap_size">-DSQLITE_MAX_MMAP_SIZE</a> </li>
+<li> <a href="compile.html#max_schema_retry">-DSQLITE_MAX_SCHEMA_RETRY</a> </li>
+<li> <a href="compile.html#max_worker_threads">-DSQLITE_MAX_WORKER_THREADS</a> </li>
+<li> <a href="compile.html#memdb_default_maxsize">-DSQLITE_MEMDB_DEFAULT_MAXSIZE</a> </li>
+<li> <a href="compile.html#memdebug">-DSQLITE_MEMDEBUG</a> </li>
+<li> <a href="compile.html#minimum_file_descriptor">-DSQLITE_MINIMUM_FILE_DESCRIPTOR</a> </li>
+<li> <a href="compile.html#omit_altertable">-DSQLITE_OMIT_ALTERTABLE</a> </li>
+<li> <a href="compile.html#omit_analyze">-DSQLITE_OMIT_ANALYZE</a> </li>
+<li> <a href="compile.html#omit_attach">-DSQLITE_OMIT_ATTACH</a> </li>
+<li> <a href="compile.html#omit_authorization">-DSQLITE_OMIT_AUTHORIZATION</a> </li>
+<li> <a href="compile.html#omit_autoincrement">-DSQLITE_OMIT_AUTOINCREMENT</a> </li>
+<li> <a href="compile.html#omit_autoinit">-DSQLITE_OMIT_AUTOINIT</a> </li>
+<li> <a href="compile.html#omit_automatic_index">-DSQLITE_OMIT_AUTOMATIC_INDEX</a> </li>
+<li> <a href="compile.html#omit_autoreset">-DSQLITE_OMIT_AUTORESET</a> </li>
+<li> <a href="compile.html#omit_autovacuum">-DSQLITE_OMIT_AUTOVACUUM</a> </li>
+<li> <a href="compile.html#omit_between_optimization">-DSQLITE_OMIT_BETWEEN_OPTIMIZATION</a> </li>
+<li> <a href="compile.html#omit_blob_literal">-DSQLITE_OMIT_BLOB_LITERAL</a> </li>
+<li> <a href="compile.html#omit_btreecount">-DSQLITE_OMIT_BTREECOUNT</a> </li>
+<li> <a href="compile.html#omit_builtin_test">-DSQLITE_OMIT_BUILTIN_TEST</a> </li>
+<li> <a href="compile.html#omit_case_sensitive_like_pragma">-DSQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA</a> </li>
+<li> <a href="compile.html#omit_cast">-DSQLITE_OMIT_CAST</a> </li>
+<li> <a href="compile.html#omit_check">-DSQLITE_OMIT_CHECK</a> </li>
+<li> <a href="compile.html#omit_compileoption_diags">-DSQLITE_OMIT_COMPILEOPTION_DIAGS</a> </li>
+<li> <a href="compile.html#omit_complete">-DSQLITE_OMIT_COMPLETE</a> </li>
+<li> <a href="compile.html#omit_compound_select">-DSQLITE_OMIT_COMPOUND_SELECT</a> </li>
+<li> <a href="compile.html#omit_cte">-DSQLITE_OMIT_CTE</a> </li>
+<li> <a href="compile.html#omit_datetime_funcs">-DSQLITE_OMIT_DATETIME_FUNCS</a> </li>
+<li> <a href="compile.html#omit_decltype">-DSQLITE_OMIT_DECLTYPE</a> </li>
+<li> <a href="compile.html#omit_deprecated">-DSQLITE_OMIT_DEPRECATED</a> </li>
+<li> <a href="compile.html#omit_deserialize">-DSQLITE_OMIT_DESERIALIZE</a> </li>
+<li> <a href="compile.html#omit_diskio">-DSQLITE_OMIT_DISKIO</a> </li>
+<li> <a href="compile.html#omit_explain">-DSQLITE_OMIT_EXPLAIN</a> </li>
+<li> <a href="compile.html#omit_flag_pragmas">-DSQLITE_OMIT_FLAG_PRAGMAS</a> </li>
+<li> <a href="compile.html#omit_floating_point">-DSQLITE_OMIT_FLOATING_POINT</a> </li>
+<li> <a href="compile.html#omit_foreign_key">-DSQLITE_OMIT_FOREIGN_KEY</a> </li>
+<li> <a href="compile.html#omit_generated_columns">-DSQLITE_OMIT_GENERATED_COLUMNS</a> </li>
+<li> <a href="compile.html#omit_get_table">-DSQLITE_OMIT_GET_TABLE</a> </li>
+<li> <a href="compile.html#omit_hex_integer">-DSQLITE_OMIT_HEX_INTEGER</a> </li>
+<li> <a href="compile.html#omit_incrblob">-DSQLITE_OMIT_INCRBLOB</a> </li>
+<li> <a href="compile.html#omit_integrity_check">-DSQLITE_OMIT_INTEGRITY_CHECK</a> </li>
+<li> <a href="compile.html#omit_introspection_pragmas">-DSQLITE_OMIT_INTROSPECTION_PRAGMAS</a> </li>
+<li> <a href="compile.html#omit_json">-DSQLITE_OMIT_JSON</a> </li>
+<li> <a href="compile.html#omit_like_optimization">-DSQLITE_OMIT_LIKE_OPTIMIZATION</a> </li>
+<li> <a href="compile.html#omit_load_extension">-DSQLITE_OMIT_LOAD_EXTENSION</a> </li>
+<li> <a href="compile.html#omit_localtime">-DSQLITE_OMIT_LOCALTIME</a> </li>
+<li> <a href="compile.html#omit_lookaside">-DSQLITE_OMIT_LOOKASIDE</a> </li>
+<li> <a href="compile.html#omit_memorydb">-DSQLITE_OMIT_MEMORYDB</a> </li>
+<li> <a href="compile.html#omit_or_optimization">-DSQLITE_OMIT_OR_OPTIMIZATION</a> </li>
+<li> <a href="compile.html#omit_pager_pragmas">-DSQLITE_OMIT_PAGER_PRAGMAS</a> </li>
+<li> <a href="compile.html#omit_pragma">-DSQLITE_OMIT_PRAGMA</a> </li>
+<li> <a href="compile.html#omit_progress_callback">-DSQLITE_OMIT_PROGRESS_CALLBACK</a> </li>
+<li> <a href="compile.html#omit_quickbalance">-DSQLITE_OMIT_QUICKBALANCE</a> </li>
+<li> <a href="compile.html#omit_reindex">-DSQLITE_OMIT_REINDEX</a> </li>
+<li> <a href="compile.html#omit_schema_pragmas">-DSQLITE_OMIT_SCHEMA_PRAGMAS</a> </li>
+<li> <a href="compile.html#omit_schema_version_pragmas">-DSQLITE_OMIT_SCHEMA_VERSION_PRAGMAS</a> </li>
+<li> <a href="compile.html#omit_shared_cache">-DSQLITE_OMIT_SHARED_CACHE</a> </li>
+<li> <a href="compile.html#omit_subquery">-DSQLITE_OMIT_SUBQUERY</a> </li>
+<li> <a href="compile.html#omit_tcl_variable">-DSQLITE_OMIT_TCL_VARIABLE</a> </li>
+<li> <a href="compile.html#omit_tempdb">-DSQLITE_OMIT_TEMPDB</a> </li>
+<li> <a href="compile.html#omit_trace">-DSQLITE_OMIT_TRACE</a> </li>
+<li> <a href="compile.html#omit_trigger">-DSQLITE_OMIT_TRIGGER</a> </li>
+<li> <a href="compile.html#omit_truncate_optimization">-DSQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> </li>
+<li> <a href="compile.html#omit_utf16">-DSQLITE_OMIT_UTF16</a> </li>
+<li> <a href="compile.html#omit_vacuum">-DSQLITE_OMIT_VACUUM</a> </li>
+<li> <a href="compile.html#omit_view">-DSQLITE_OMIT_VIEW</a> </li>
+<li> <a href="compile.html#omit_virtualtable">-DSQLITE_OMIT_VIRTUALTABLE</a> </li>
+<li> <a href="compile.html#omit_wal">-DSQLITE_OMIT_WAL</a> </li>
+<li> <a href="compile.html#omit_windowfunc">-DSQLITE_OMIT_WINDOWFUNC</a> </li>
+<li> <a href="compile.html#omit_wsd">-DSQLITE_OMIT_WSD</a> </li>
+<li> <a href="compile.html#omit_xfer_opt">-DSQLITE_OMIT_XFER_OPT</a> </li>
+<li> <a href="compile.html#os_other">-DSQLITE_OS_OTHER</a> </li>
+<li> <a href="compile.html#powersafe_overwrite">-DSQLITE_POWERSAFE_OVERWRITE</a> </li>
+<li> <a href="compile.html#printf_precision_limit">-DSQLITE_PRINTF_PRECISION_LIMIT</a> </li>
+<li> <a href="compile.html#query_planner_limit">-DSQLITE_QUERY_PLANNER_LIMIT</a> </li>
+<li> <a href="compile.html#query_planner_limit_incr">-DSQLITE_QUERY_PLANNER_LIMIT_INCR</a> </li>
+<li> <a href="compile.html#reverse_unordered_selects">-DSQLITE_REVERSE_UNORDERED_SELECTS</a> </li>
+<li> <a href="compile.html#rtree_int_only">-DSQLITE_RTREE_INT_ONLY</a> </li>
+<li> <a href="compile.html#secure_delete">-DSQLITE_SECURE_DELETE</a> </li>
+<li> <a href="compile.html#sorter_pmasz">-DSQLITE_SORTER_PMASZ</a> </li>
+<li> <a href="compile.html#soundex">-DSQLITE_SOUNDEX</a> </li>
+<li> <a href="compile.html#stdcall">-DSQLITE_STDCALL</a> </li>
+<li> <a href="compile.html#stmtjrnl_spill">-DSQLITE_STMTJRNL_SPILL</a> </li>
+<li> <a href="compile.html#sysapi">-DSQLITE_SYSAPI</a> </li>
+<li> <a href="compile.html#tclapi">-DSQLITE_TCLAPI</a> </li>
+<li> <a href="compile.html#temp_store">-DSQLITE_TEMP_STORE</a> </li>
+<li> <a href="compile.html#threadsafe">-DSQLITE_THREADSAFE</a> </li>
+<li> <a href="compile.html#trace_size_limit">-DSQLITE_TRACE_SIZE_LIMIT</a> </li>
+<li> <a href="compile.html#trusted_schema">-DSQLITE_TRUSTED_SCHEMA</a> </li>
+<li> <a href="compile.html#untestable">-DSQLITE_UNTESTABLE</a> </li>
+<li> <a href="compile.html#use_alloca">-DSQLITE_USE_ALLOCA</a> </li>
+<li> <a href="compile.html#use_fcntl_trace">-DSQLITE_USE_FCNTL_TRACE</a> </li>
+<li> <a href="compile.html#use_uri">-DSQLITE_USE_URI</a> </li>
+<li> <a href="compile.html#win32_heap_create">-DSQLITE_WIN32_HEAP_CREATE</a> </li>
+<li> <a href="compile.html#win32_malloc">-DSQLITE_WIN32_MALLOC</a> </li>
+<li> <a href="compile.html#win32_malloc_validate">-DSQLITE_WIN32_MALLOC_VALIDATE</a> </li>
+<li> <a href="compile.html#zero_malloc">-DSQLITE_ZERO_MALLOC</a> </li>
+<li> <a href="cli.html#dump">.dump</a> </li>
+<li> <a href="c3ref/str.html">dynamic string</a> </li>
+<li> <a href="datatype3.html">dynamic typing</a> </li>
+<li> <a href="cli.html#editfunc">edit() SQL function</a> </li>
+<li> <a href="spellfix1.html#editdist3">editdist3</a> </li>
+<li> <a href="serverless.html">embedded</a> </li>
+<li> <a href="pragma.html#pragma_empty_result_callbacks">empty_result_callbacks pragma</a> </li>
+<li> <a href="tclsqlite.html#enable_load_extension">enable_load_extension method</a> </li>
+<li> <a href="pragma.html#pragma_encoding">encoding pragma</a> </li>
+<li> <a href="fts3.html#_set_operations_using_the_enhanced_query_syntax">enhanced query syntax</a> </li>
+<li> <a href="vtab.html#epovtab">eponymous virtual table</a> </li>
+<li> <a href="vtab.html#epoonlyvtab">eponymous-only virtual table</a> </li>
+<li> <a href="errlog.html">errlog</a> </li>
+<li> <a href="rescode.html">error code</a> </li>
+<li> <a href="errlog.html">error log</a> </li>
+<li> <a href="tclsqlite.html#errorcode">errorcode method</a> </li>
+<li> <a href="lang_expr.html#like">ESCAPE</a> </li>
+<li> <a href="tclsqlite.html#eval">eval method</a> </li>
+<li> <a href="cli.html#dotexcel">.excel</a> </li>
+<li> <a href="windowfunctions.html#wexcls">exclude clause</a> </li>
+<li> <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a> </li>
+<li> <a href="tclsqlite.html#exists">exists method</a> </li>
+<li> <a href="lang_expr.html#exists_op">EXISTS operator</a> </li>
+<li> <a href="lang_mathfunc.html#exp">exp() SQL function</a> </li>
+<li> <a href="c3ref/experimental.html">experimental</a> </li>
+<li> <a href="malloc.html#memsysx">experimental memory allocators</a> </li>
+<li> <a href="cli.html#expert">.expert command</a> </li>
+<li> <a href="eqp.html">explain query plan</a> </li>
+<li> <a href="cli.html#exexcel*">export to excel</a> </li>
+<li> <a href="cli.html#extsv*">export to TSV</a> </li>
+<li> <a href="syntax/expr.html">expr</a> </li>
+<li> <a href="syntax/expr.html">expr syntax diagram</a> </li>
+<li> <a href="datatype3.html#expraff">expression affinity</a> </li>
+<li> <a href="expridx.html">expression index</a> </li>
+<li> <a href="expridx.html">expression indexes</a> </li>
+<li> <a href="lang_expr.html">expression syntax</a> </li>
+<li> <a href="rescode.html#extrc">extended error code</a> </li>
+<li> <a href="rescode.html#extrc">extended result code</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">extended result code definitions</a> </li>
+<li> <a href="fts5.html#extending_fts5">Extending FTS5</a> </li>
+<li> <a href="loadext.html">extension loading</a> </li>
+<li> <a href="fts3.html#_external_content_fts4_tables_">external content fts4 tables</a> </li>
+<li> <a href="lang_expr.html#extract">extract</a> </li>
+<li> <a href="syntax/factored-select-stmt.html">factored-select-stmt</a> </li>
+<li> <a href="syntax/factored-select-stmt.html">factored-select-stmt syntax diagram</a> </li>
+<li> <a href="fasterthanfs.html">faster than the filesystem</a> </li>
+<li> <a href="c3ref/file_control.html">file control</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html">file control opcode</a> </li>
+<li> <a href="fileformat2.html">file format</a> </li>
+<li> <a href="fileformat2.html#vnums">file format version numbers</a> </li>
+<li> <a href="cli.html#fileio">file I/O functions</a> </li>
+<li> <a href="lockingv3.html">file locking and concurrency control</a> </li>
+<li> <a href="lockingv3.html#locking">file locking states</a> </li>
+<li> <a href="aff_short.html">file-format benefits</a> </li>
+<li> <a href="howtocorrupt.html#fscorruption">filesystem corruption</a> </li>
+<li> <a href="lang_aggfunc.html#aggfilter">FILTER clause on aggregate functions</a> </li>
+<li> <a href="syntax/filter-clause.html">filter-clause</a> </li>
+<li> <a href="syntax/filter-clause.html">filter-clause syntax diagram</a> </li>
+<li> <a href="optoverview.html#flattening">flattened</a> </li>
+<li> <a href="optoverview.html#flattening">flattening optimization</a> </li>
+<li> <a href="datatype3.html">flexible type system</a> </li>
+<li> <a href="flextypegood.html">Flexible typing is a feature</a> </li>
+<li> <a href="lang_mathfunc.html#floor">floor() SQL function</a> </li>
+<li> <a href="footprint.html">footprint</a> </li>
+<li> <a href="foreignkeys.html#fk_actions">foreign key actions</a> </li>
+<li> <a href="foreignkeys.html">foreign key constraint</a> </li>
+<li> <a href="foreignkeys.html#fk_enable">foreign key constraints are enabled</a> </li>
+<li> <a href="syntax/foreign-key-clause.html">foreign-key-clause</a> </li>
+<li> <a href="syntax/foreign-key-clause.html">foreign-key-clause syntax diagram</a> </li>
+<li> <a href="pragma.html#pragma_foreign_key_check">foreign_key_check pragma</a> </li>
+<li> <a href="pragma.html#pragma_foreign_key_list">foreign_key_list pragma</a> </li>
+<li> <a href="pragma.html#pragma_foreign_keys">foreign_keys pragma</a> </li>
+<li> <a href="lang_corefunc.html#format">format() SQL function</a> </li>
+<li> <a href="support.html#fx">forum</a> </li>
+<li> <a href="windowfunctions.html#frameboundary">frame boundary</a> </li>
+<li> <a href="windowfunctions.html#framespec">frame specification</a> </li>
+<li> <a href="windowfunctions.html#frametype">frame type</a> </li>
+<li> <a href="syntax/frame-spec.html">frame-spec</a> </li>
+<li> <a href="syntax/frame-spec.html">frame-spec syntax diagram</a> </li>
+<li> <a href="windowfunctions.html#framespec">frames</a> </li>
+<li> <a href="fileformat2.html#freelist">free-page list</a> </li>
+<li> <a href="fileformat2.html#freelist">freelist</a> </li>
+<li> <a href="pragma.html#pragma_freelist_count">freelist_count pragma</a> </li>
+<li> <a href="lang_select.html#fromclause">FROM clause</a> </li>
+<li> <a href="fts3.html#snippet">FTS auxiliary functions</a> </li>
+<li> <a href="fts3.html#hiddencol">FTS hidden column</a> </li>
+<li> <a href="fts3.html#full_text_index_queries">FTS MATCH</a> </li>
+<li> <a href="fts3.html#*shadowtab">FTS shadow tables</a> </li>
+<li> <a href="fts3.html#f3tknzr">fts3_tokenizer</a> </li>
+<li> <a href="fts3.html#fts3tok">fts3tokenize</a> </li>
+<li> <a href="fts3.html#fts3tok">fts3tokenize virtual table</a> </li>
+<li> <a href="fts3.html#fts4">FTS4</a> </li>
+<li> <a href="fts3.html#*fts4automergecmd">FTS4 "automerge" command</a> </li>
+<li> <a href="fts3.html#*fts4ickcmd">FTS4 "integrity-check" command</a> </li>
+<li> <a href="fts3.html#*fts4mergecmd">FTS4 "merge" command</a> </li>
+<li> <a href="fts3.html#*fts4optcmd">FTS4 "optimize" command</a> </li>
+<li> <a href="fts3.html#*fts4rebuidcmd">FTS4 "rebuild" command</a> </li>
+<li> <a href="fts3.html#*cmds">FTS4 commands</a> </li>
+<li> <a href="fts3.html#the_compress_and_uncompress_options">fts4 compress option</a> </li>
+<li> <a href="fts3.html#*fts4content">FTS4 content option</a> </li>
+<li> <a href="fts3.html#*fts4languageid">FTS4 languageid option</a> </li>
+<li> <a href="fts3.html#fts4matchinfo">FTS4 matchinfo option</a> </li>
+<li> <a href="fts3.html#fts4notindexed">FTS4 notindexed option</a> </li>
+<li> <a href="fts3.html#fts4_options">FTS4 options</a> </li>
+<li> <a href="fts3.html#fts4order">FTS4 order option</a> </li>
+<li> <a href="fts3.html#fts4prefix">FTS4 prefix option</a> </li>
+<li> <a href="fts3.html#fts4aux">fts4aux</a> </li>
+<li> <a href="fts3.html#f4alid">fts4aux languageid column</a> </li>
+<li> <a href="fts5.html#the_automerge_configuration_option">FTS5 automerge option</a> </li>
+<li> <a href="fts5.html#_auxiliary_functions_">FTS5 auxiliary functions</a> </li>
+<li> <a href="fts5.html#the_bm25_function">FTS5 bm25</a> </li>
+<li> <a href="fts5.html#fts5_boolean_operators">FTS5 boolean operators</a> </li>
+<li> <a href="fts5.html#compiling_and_using_fts5">FTS5 building</a> </li>
+<li> <a href="fts5.html#fts5_column_filters">FTS5 column filters</a> </li>
+<li> <a href="fts5.html#the_columnsize_option">FTS5 columnsize option</a> </li>
+<li> <a href="fts5.html#external_content_and_contentless_tables">FTS5 content option</a> </li>
+<li> <a href="fts5.html#contentless_tables">FTS5 contentless tables</a> </li>
+<li> <a href="fts5.html#fts5_table_creation_and_initialization">FTS5 CREATE TABLE Options</a> </li>
+<li> <a href="fts5.html#custom_auxiliary_functions">FTS5 custom auxiliary functions</a> </li>
+<li> <a href="fts5.html#the_delete_command">FTS5 delete command</a> </li>
+<li> <a href="fts5.html#the_delete_all_command">FTS5 delete-all command</a> </li>
+<li> <a href="fts5.html#the_detail_option">FTS5 detail option</a> </li>
+<li> <a href="fts5.html#external_content_tables">FTS5 external content tables</a> </li>
+<li> <a href="fts5.html#the_highlight_function">FTS5 highlight</a> </li>
+<li> <a href="fts5.html#carrotq">FTS5 initial token</a> </li>
+<li> <a href="fts5.html#fts5_initial_token_queries">FTS5 initial token queries</a> </li>
+<li> <a href="fts5.html#the_merge_command">FTS5 merge command</a> </li>
+<li> <a href="fts5.html#fts5_near_queries">FTS5 NEAR queries</a> </li>
+<li> <a href="fts5.html#the_optimize_command">FTS5 optimize command</a> </li>
+<li> <a href="fts5.html#the_pgsz_configuration_option">FTS5 pgsz option</a> </li>
+<li> <a href="fts5.html#fts5_phrases">FTS5 Phrases</a> </li>
+<li> <a href="fts5.html#prefix_indexes">FTS5 prefix indexes</a> </li>
+<li> <a href="fts5.html#fts5_prefix_queries">FTS5 prefix queries</a> </li>
+<li> <a href="fts5.html#full_text_query_syntax">FTS5 query syntax</a> </li>
+<li> <a href="fts5.html#the_rank_configuration_option">FTS5 rank configuration option</a> </li>
+<li> <a href="fts5.html#the_rebuild_command">FTS5 rebuild command</a> </li>
+<li> <a href="fts5.html#fts5shadowtables">fts5 shadow tables</a> </li>
+<li> <a href="fts5.html#the_snippet_function">FTS5 snippet</a> </li>
+<li> <a href="fts5.html#fts5_strings">FTS5 Strings</a> </li>
+<li> <a href="fts5.html#_summary_of_technical_differences_">fts5 technical differences</a> </li>
+<li> <a href="fts5.html#tokenizers">FTS5 tokenizers</a> </li>
+<li> <a href="fts5.html#the_usermerge_configuration_option">FTS5 usermerge option</a> </li>
+<li> <a href="fts5.html#the_fts5vocab_virtual_table_module">fts5vocab</a> </li>
+<li> <a href="lang_select.html#fulljoin">FULL JOIN</a> </li>
+<li> <a href="lang_select.html#fulljoin">FULL OUTER JOIN</a> </li>
+<li> <a href="fullsql.html">Full-featured SQL</a> </li>
+<li> <a href="fts3.html">full-text search</a> </li>
+<li> <a href="pragma.html#pragma_full_column_names">full_column_names pragma</a> </li>
+<li> <a href="pragma.html#pragma_fullfsync">fullfsync pragma</a> </li>
+<li> <a href="cli.html#fullschema">.fullschema</a> </li>
+<li> <a href="c3ref/create_function.html">function creation routines</a> </li>
+<li> <a href="tclsqlite.html#function">function method</a> </li>
+<li> <a href="pragma.html#pragma_function_list">function_list pragma</a> </li>
+<li> <a href="testing.html#fuzztesting">fuzz testing</a> </li>
+<li> <a href="testing.html#fuzzcheck">fuzzcheck</a> </li>
+<li> <a href="lang_altertable.html#otheralter">generalized ALTER TABLE procedure</a> </li>
+<li> <a href="series.html">generate_series</a> </li>
+<li> <a href="gencol.html">generated column</a> </li>
+<li> <a href="geopoly.html">geopoly</a> </li>
+<li> <a href="geopoly.html">Geopoly extension</a> </li>
+<li> <a href="geopoly.html">Geopoly module</a> </li>
+<li> <a href="geopoly.html#garea">geopoly_area</a> </li>
+<li> <a href="geopoly.html#gbbox">geopoly_bbox</a> </li>
+<li> <a href="geopoly.html#gblob">geopoly_blob</a> </li>
+<li> <a href="geopoly.html#ccw">geopoly_ccw</a> </li>
+<li> <a href="geopoly.html#gpoint">geopoly_contains_point</a> </li>
+<li> <a href="geopoly.html#gbbox">geopoly_group_bbox</a> </li>
+<li> <a href="geopoly.html#gjson">geopoly_json</a> </li>
+<li> <a href="geopoly.html#goverlap">geopoly_overlap</a> </li>
+<li> <a href="geopoly.html#regpoly">geopoly_regular</a> </li>
+<li> <a href="geopoly.html#gsvg">geopoly_svg</a> </li>
+<li> <a href="geopoly.html#gwithin">geopoly_within</a> </li>
+<li> <a href="geopoly.html#xform">geopoly_xform</a> </li>
+<li> <a href="getthecode.html">get the canonical source code</a> </li>
+<li> <a href="lang_corefunc.html#glob">glob() SQL function</a> </li>
+<li> <a href="lang_select.html#resultset">GROUP BY</a> </li>
+<li> <a href="lang_select.html#resultset">GROUP BY clause</a> </li>
+<li> <a href="lang_aggfunc.html#group_concat">group_concat() aggregate function</a> </li>
+<li> <a href="windowfunctions.html#grouptype">GROUPS frames</a> </li>
+<li> <a href="pragma.html#pragma_hard_heap_limit">hard_heap_limit pragma</a> </li>
+<li> <a href="optoverview.html#hashjoin">hash join</a> </li>
+<li> <a href="compile.html#fdatasync">HAVE_FDATASYNC</a> </li>
+<li> <a href="compile.html#gmtime_r">HAVE_GMTIME_R</a> </li>
+<li> <a href="compile.html#isnan">HAVE_ISNAN</a> </li>
+<li> <a href="compile.html#localtime_r">HAVE_LOCALTIME_R</a> </li>
+<li> <a href="compile.html#localtime_s">HAVE_LOCALTIME_S</a> </li>
+<li> <a href="compile.html#malloc_usable_size">HAVE_MALLOC_USABLE_SIZE</a> </li>
+<li> <a href="compile.html#sqlite_config_h">HAVE_SQLITE_CONFIG_H</a> </li>
+<li> <a href="compile.html#strchrnul">HAVE_STRCHRNUL</a> </li>
+<li> <a href="compile.html#usleep">HAVE_USLEEP</a> </li>
+<li> <a href="compile.html#utime">HAVE_UTIME</a> </li>
+<li> <a href="lang_select.html#resultset">HAVING</a> </li>
+<li> <a href="lang_select.html#resultset">HAVING clause</a> </li>
+<li> <a href="queryplanner-ng.html#hazards">hazards of upgrading to the NGQP</a> </li>
+<li> <a href="lang_corefunc.html#hex">hex() SQL function</a> </li>
+<li> <a href="lang_expr.html#hexint">hexadecimal integer literals</a> </li>
+<li> <a href="lang_expr.html#hexint">hexadecimal integers</a> </li>
+<li> <a href="vtab.html#hiddencol">hidden column</a> </li>
+<li> <a href="hirely.html">high-reliability</a> </li>
+<li> <a href="crew.html">Hipp</a> </li>
+<li> <a href="c3ref/bind_blob.html">host parameter</a> </li>
+<li> <a href="c3ref/bind_blob.html">host parameter name</a> </li>
+<li> <a href="fileformat2.html#hotjrnl">hot journal</a> </li>
+<li> <a href="fileformat2.html#hotjrnl">hot journal files</a> </li>
+<li> <a href="datatype3.html#colrules">how collation is determined</a> </li>
+<li> <a href="howitworks.html">How SQL Works</a> </li>
+<li> <a href="howitworks.html">How SQLite Works</a> </li>
+<li> <a href="howtocompile.html">how to compile</a> </li>
+<li> <a href="howtocompile.html">How To Compile SQLite</a> </li>
+<li> <a href="howtocorrupt.html">how to corrupt</a> </li>
+<li> <a href="useovernet.html">how to corrupt a database</a> </li>
+<li> <a href="lockingv3.html#how_to_corrupt">How To Corrupt Your Database Files</a> </li>
+<li> <a href="lang_vacuum.html#howvacuumworks">how vacuum works</a> </li>
+<li> <a href="floatingpoint.html#ieee754ext">ieee754 extension</a> </li>
+<li> <a href="floatingpoint.html#ieee754">ieee754() function</a> </li>
+<li> <a href="floatingpoint.html#ieee754m">ieee754_exponent() function</a> </li>
+<li> <a href="floatingpoint.html#ieee754b">ieee754_from_blob() function</a> </li>
+<li> <a href="floatingpoint.html#ieee754m">ieee754_mantissa() function</a> </li>
+<li> <a href="floatingpoint.html#ieee754b">ieee754_to_blob() function</a> </li>
+<li> <a href="lang_corefunc.html#ifnull">ifnull() SQL function</a> </li>
+<li> <a href="pragma.html#pragma_ignore_check_constraints">ignore_check_constraints pragma</a> </li>
+<li> <a href="lang_corefunc.html#iif">iif() SQL function</a> </li>
+<li> <a href="uri.html#uriimmutable">"immutable" query parameter</a> </li>
+<li> <a href="cli.html#csv">.import</a> </li>
+<li> <a href="cli.html#csv">.import command</a> </li>
+<li> <a href="imposter.html#dotimposter">.imposter dot-command</a> </li>
+<li> <a href="imposter.html">imposter tables</a> </li>
+<li> <a href="lang_expr.html#in_op">IN operator</a> </li>
+<li> <a href="fileformat2.html#filesize">in-header database size</a> </li>
+<li> <a href="inmemorydb.html">in-memory database</a> </li>
+<li> <a href="inmemorydb.html#sharedmemdb">in-memory shared cache database</a> </li>
+<li> <a href="sharedcache.html#inmemsharedcache">in-memory shared-cache</a> </li>
+<li> <a href="tclsqlite.html#incrblob">incrblob method</a> </li>
+<li> <a href="pgszchng2016.html">increase in the default page size</a> </li>
+<li> <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum pragma</a> </li>
+<li> <a href="fileformat2.html#btypes">index b-tree</a> </li>
+<li> <a href="pragma.html#pragma_index_info">index_info pragma</a> </li>
+<li> <a href="pragma.html#pragma_index_list">index_list pragma</a> </li>
+<li> <a href="pragma.html#pragma_index_xinfo">index_xinfo pragma</a> </li>
+<li> <a href="lang_indexedby.html">INDEXED BY</a> </li>
+<li> <a href="syntax/indexed-column.html">indexed-column</a> </li>
+<li> <a href="syntax/indexed-column.html">indexed-column syntax diagram</a> </li>
+<li> <a href="lang_createindex.html">Indexes</a> </li>
+<li> <a href="expridx.html">indexes on expressions</a> </li>
+<li> <a href="queryplanner.html">indexing</a> </li>
+<li> <a href="queryplanner.html">indexing tutorial</a> </li>
+<li> <a href="cli.html#arinsup">--insert option</a> </li>
+<li> <a href="syntax/insert-stmt.html">insert-stmt</a> </li>
+<li> <a href="syntax/insert-stmt.html">insert-stmt syntax diagram</a> </li>
+<li> <a href="lang_createtrigger.html#instead_of_trigger">INSTEAD OF</a> </li>
+<li> <a href="lang_createtrigger.html#instead_of_trigger">INSTEAD OF trigger</a> </li>
+<li> <a href="lang_corefunc.html#instr">instr() SQL function</a> </li>
+<li> <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> </li>
+<li> <a href="rtree.html#intrtree">integer-valued r-trees</a> </li>
+<li> <a href="pragma.html#pragma_integrity_check">integrity_check pragma</a> </li>
+<li> <a href="fileformat2.html#intschema">internal index</a> </li>
+<li> <a href="fileformat2.html#intschema">internal indexes</a> </li>
+<li> <a href="fileformat2.html#intschema">internal schema object</a> </li>
+<li> <a href="fileformat2.html#intschema">internal table</a> </li>
+<li> <a href="intern-v-extern-blob.html">Internal Versus External BLOBs</a> </li>
+<li> <a href="tclsqlite.html#interrupt">interrupt method</a> </li>
+<li> <a href="invalidutf.html">invalid UTF</a> </li>
+<li> <a href="lang_expr.html#isdf">IS DISTINCT FROM</a> </li>
+<li> <a href="lang_expr.html#isdf">IS NOT DISTINCT FROM</a> </li>
+<li> <a href="lang_expr.html#isisnot">IS NOT operator</a> </li>
+<li> <a href="lang_expr.html#isisnot">IS operator</a> </li>
+<li> <a href="isolation.html">isolation</a> </li>
+<li> <a href="optoverview.html#table_order">join order</a> </li>
+<li> <a href="syntax/join-clause.html">join-clause</a> </li>
+<li> <a href="syntax/join-clause.html">join-clause syntax diagram</a> </li>
+<li> <a href="syntax/join-constraint.html">join-constraint</a> </li>
+<li> <a href="syntax/join-constraint.html">join-constraint syntax diagram</a> </li>
+<li> <a href="syntax/join-operator.html">join-operator</a> </li>
+<li> <a href="syntax/join-operator.html">join-operator syntax diagram</a> </li>
+<li> <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a> </li>
+<li> <a href="pragma.html#pragma_journal_size_limit">journal_size_limit pragma</a> </li>
+<li> <a href="json1.html#jmini">json</a> </li>
+<li> <a href="json1.html#jsonpath">JSON function path arguments</a> </li>
+<li> <a href="json1.html#jsonpath">JSON paths</a> </li>
+<li> <a href="json1.html#jmini">json SQL function</a> </li>
+<li> <a href="json1.html">json1</a> </li>
+<li> <a href="json1.html#jarray">json_array</a> </li>
+<li> <a href="json1.html#jarray">json_array SQL function</a> </li>
+<li> <a href="json1.html#jarraylen">json_array_length</a> </li>
+<li> <a href="json1.html#jarraylen">json_array_length SQL function</a> </li>
+<li> <a href="json1.html#jeach">json_each</a> </li>
+<li> <a href="json1.html#jeach">json_each table-valued function</a> </li>
+<li> <a href="json1.html#jex">json_extract</a> </li>
+<li> <a href="json1.html#jex">json_extract SQL function</a> </li>
+<li> <a href="json1.html#jgrouparray">json_group_array</a> </li>
+<li> <a href="json1.html#jgrouparray">json_group_array SQL function</a> </li>
+<li> <a href="json1.html#jgroupobject">json_group_object</a> </li>
+<li> <a href="json1.html#jgroupobject">json_group_object SQL function</a> </li>
+<li> <a href="json1.html#jins">json_insert</a> </li>
+<li> <a href="json1.html#jins">json_insert SQL function</a> </li>
+<li> <a href="json1.html#jobj">json_object</a> </li>
+<li> <a href="json1.html#jobj">json_object SQL function</a> </li>
+<li> <a href="json1.html#jpatch">json_patch</a> </li>
+<li> <a href="json1.html#jpatch">json_patch SQL function</a> </li>
+<li> <a href="json1.html#jquote">json_quote</a> </li>
+<li> <a href="json1.html#jquote">json_quote SQL function</a> </li>
+<li> <a href="json1.html#jrm">json_remove</a> </li>
+<li> <a href="json1.html#jrm">json_remove SQL function</a> </li>
+<li> <a href="json1.html#jrepl">json_replace</a> </li>
+<li> <a href="json1.html#jrepl">json_replace SQL function</a> </li>
+<li> <a href="json1.html#jset">json_set</a> </li>
+<li> <a href="json1.html#jset">json_set SQL function</a> </li>
+<li> <a href="json1.html#jtree">json_tree</a> </li>
+<li> <a href="json1.html#jtree">json_tree table-valued function</a> </li>
+<li> <a href="json1.html#jtype">json_type</a> </li>
+<li> <a href="json1.html#jtype">json_type SQL function</a> </li>
+<li> <a href="json1.html#jvalid">json_valid</a> </li>
+<li> <a href="json1.html#jvalid">json_valid SQL function</a> </li>
+<li> <a href="lang_datefunc.html#jdmod">julianday modifier</a> </li>
+<li> <a href="lang_datefunc.html">julianday() SQL function</a> </li>
+<li> <a href="crew.html">Kennedy</a> </li>
+<li> <a href="keyword_index.html">keyword index</a> </li>
+<li> <a href="lang_keywords.html">keywords</a> </li>
+<li> <a href="fts3.html#*fts4languageid">languageid</a> </li>
+<li> <a href="wal.html#bigwal">large WAL files</a> </li>
+<li> <a href="tclsqlite.html#last_insert_rowid">last_insert_rowid method</a> </li>
+<li> <a href="lang_corefunc.html#last_insert_rowid">last_insert_rowid() SQL function</a> </li>
+<li> <a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> </li>
+<li> <a href="pragma.html#pragma_legacy_alter_table">legacy_alter_table pragma</a> </li>
+<li> <a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a> </li>
+<li> <a href="lemon.html">Lemon</a> </li>
+<li> <a href="lemon.html">Lemon LALR parser generator</a> </li>
+<li> <a href="lemon.html">Lemon parser generator</a> </li>
+<li> <a href="lang_corefunc.html#length">length() SQL function</a> </li>
+<li> <a href="footprint.html">library size</a> </li>
+<li> <a href="copyright.html">license</a> </li>
+<li> <a href="optoverview.html#like_opt">LIKE optimization</a> </li>
+<li> <a href="lang_corefunc.html#like">like() SQL function</a> </li>
+<li> <a href="lang_corefunc.html#likelihood">likelihood() SQL function</a> </li>
+<li> <a href="lang_corefunc.html#likely">likely() SQL function</a> </li>
+<li> <a href="lang_select.html#limitoffset">LIMIT</a> </li>
+<li> <a href="c3ref/c_limit_attached.html">limit category</a> </li>
+<li> <a href="opcode.html#codes">list of current bytecodes</a> </li>
+<li> <a href="vtablist.html">list of virtual tables</a> </li>
+<li> <a href="lang_expr.html#litvalue">literal value</a> </li>
+<li> <a href="syntax/literal-value.html">literal-value</a> </li>
+<li> <a href="syntax/literal-value.html">literal-value syntax diagram</a> </li>
+<li> <a href="lang_mathfunc.html#ln">ln() SQL function</a> </li>
+<li> <a href="cli.html#dotload">.load command</a> </li>
+<li> <a href="lang_corefunc.html#load_extension">load_extension() SQL function</a> </li>
+<li> <a href="loadext.html">loadable extension</a> </li>
+<li> <a href="loadext.html">loadext</a> </li>
+<li> <a href="lang_datefunc.html#localtime">localtime modifier</a> </li>
+<li> <a href="fileformat2.html#lockbyte">lock-byte page</a> </li>
+<li> <a href="pragma.html#pragma_locking_mode">locking_mode pragma</a> </li>
+<li> <a href="lang_mathfunc.html#log">log</a> </li>
+<li> <a href="lang_mathfunc.html#log">log10</a> </li>
+<li> <a href="lang_mathfunc.html#log2">log2() SQL function</a> </li>
+<li> <a href="lts.html">long term support</a> </li>
+<li> <a href="malloc.html#lookaside">lookaside</a> </li>
+<li> <a href="malloc.html#lookaside">lookaside buffer</a> </li>
+<li> <a href="malloc.html#lookaside">lookaside memory</a> </li>
+<li> <a href="malloc.html#lookaside">lookaside memory allocator</a> </li>
+<li> <a href="selfcontained.html">low-dependency</a> </li>
+<li> <a href="lang_corefunc.html#lower">lower() SQL function</a> </li>
+<li> <a href="lang_corefunc.html#ltrim">ltrim() SQL function</a> </li>
+<li> <a href="support.html#mailinglists">mailing lists</a> </li>
+<li> <a href="sqlar.html#cltools">managing SQLite Archives from the command-line</a> </li>
+<li> <a href="optoverview.html#crossjoin">Manual Control Of Query Plans Using CROSS JOIN</a> </li>
+<li> <a href="optoverview.html#manctrl">Manual Control Of Query Plans Using SQLITE_STAT Tables</a> </li>
+<li> <a href="tempfiles.html#superjrnl">master journal</a> </li>
+<li> <a href="lang_expr.html#match">MATCH</a> </li>
+<li> <a href="fts3.html#matchinfo">matchinfo</a> </li>
+<li> <a href="fts3.html#matchinfo-b">matchinfo b flag</a> </li>
+<li> <a href="fts3.html#matchinfo-x">matchinfo x flag</a> </li>
+<li> <a href="fts3.html#matchinfo-y">matchinfo y flag</a> </li>
+<li> <a href="lang_with.html#mathint">materialization hints</a> </li>
+<li> <a href="lang_with.html#mathint">MATERIALIZED</a> </li>
+<li> <a href="lang_mathfunc.html">Math Functions</a> </li>
+<li> <a href="lang_aggfunc.html#max_agg">max() aggregate function</a> </li>
+<li> <a href="lang_corefunc.html#max_scalar">max() SQL function</a> </li>
+<li> <a href="pragma.html#pragma_max_page_count">max_page_count pragma</a> </li>
+<li> <a href="swarmvtab.html#the_maxopen_parameter">maxopen parameter</a> </li>
+<li> <a href="testing.html#mcdc">MC/DC testing</a> </li>
+<li> <a href="inmemorydb.html">memory</a> </li>
+<li> <a href="malloc.html">memory allocation</a> </li>
+<li> <a href="malloc.html#memstatus">memory statistics</a> </li>
+<li> <a href="mmap.html">memory-mapped I/O</a> </li>
+<li> <a href="fts3.html#*fts4mergecmd">"merge" command</a> </li>
+<li> <a href="cpu.html#microopt">microoptimizations</a> </li>
+<li> <a href="lang_aggfunc.html#min_agg">min() aggregate function</a> </li>
+<li> <a href="lang_corefunc.html#min_scalar">min() SQL function</a> </li>
+<li> <a href="optoverview.html#minmax">min/max optimization</a> </li>
+<li> <a href="swarmvtab.html#the_missing_callback">missing callback</a> </li>
+<li> <a href="mmap.html">mmap</a> </li>
+<li> <a href="pragma.html#pragma_mmap_size">mmap_size pragma</a> </li>
+<li> <a href="lang_mathfunc.html#mod">mod() SQL function</a> </li>
+<li> <a href="cli.html#dotmode">.mode</a> </li>
+<li> <a href="cli.html#dotmodequote">.mode quote</a> </li>
+<li> <a href="uri.html#urimode">"mode" query parameter</a> </li>
+<li> <a href="uri.html#urimodeof">modeof</a> </li>
+<li> <a href="uri.html#urimodeof">"modeof" query parameter</a> </li>
+<li> <a href="lang_datefunc.html#dtmods">modifiers</a> </li>
+<li> <a href="pragma.html#pragma_module_list">module_list pragma</a> </li>
+<li> <a href="mostdeployed.html">most used</a> </li>
+<li> <a href="mostdeployed.html">most widely deployed</a> </li>
+<li> <a href="mostdeployed.html">most widely used</a> </li>
+<li> <a href="th3.html#muttest">mutation test script</a> </li>
+<li> <a href="testing.html#mutationtests">mutation testing</a> </li>
+<li> <a href="walformat.html#mxframe">mxFrame</a> </li>
+<li> <a href="walformat.html#nbackfill">nBackfill</a> </li>
+<li> <a href="fts3.html#near">NEAR queries</a> </li>
+<li> <a href="useovernet.html">network filesystem use</a> </li>
+<li> <a href="queryplanner-ng.html">next generation query planner</a> </li>
+<li> <a href="queryplanner-ng.html">NGQP</a> </li>
+<li> <a href="datatype3.html#collation">NOCASE collating function</a> </li>
+<li> <a href="uri.html#urinolock">"nolock" query parameter</a> </li>
+<li> <a href="deterministic.html">non-deterministic functions</a> </li>
+<li> <a href="lang_select.html#nonstd">non-standard SELECT syntax</a> </li>
+<li> <a href="lang_expr.html#exists_op">NOT EXISTS operator</a> </li>
+<li> <a href="lang_expr.html#in_op">NOT IN operator</a> </li>
+<li> <a href="lang_indexedby.html">NOT INDEXED</a> </li>
+<li> <a href="lang_with.html#mathint">NOT MATERIALIZED</a> </li>
+<li> <a href="lang_createtable.html#notnullconst">NOT NULL</a> </li>
+<li> <a href="lang_createtable.html#notnullconst">NOT NULL constraint</a> </li>
+<li> <a href="copyright.html#notopencontrib">not open-contributin</a> </li>
+<li> <a href="nulinstr.html">NUL characters in strings</a> </li>
+<li> <a href="lang_corefunc.html#nullif">nullif() SQL function</a> </li>
+<li> <a href="lang_select.html#nullslast">NULLS FIRST</a> </li>
+<li> <a href="lang_select.html#nullslast">NULLS LAST</a> </li>
+<li> <a href="tclsqlite.html#nullvalue">nullvalue method</a> </li>
+<li> <a href="syntax/numeric-literal.html">numeric-literal</a> </li>
+<li> <a href="syntax/numeric-literal.html">numeric-literal syntax diagram</a> </li>
+<li> <a href="lang_naming.html">object resolution</a> </li>
+<li> <a href="lang_select.html#limitoffset">OFFSET</a> </li>
+<li> <a href="optoverview.html#omitnoopjoin">omit-left-join optimization</a> </li>
+<li> <a href="compile.html#omitfeatures">omitfeatures</a> </li>
+<li> <a href="lang_conflict.html">ON CONFLICT</a> </li>
+<li> <a href="lang_conflict.html">ON CONFLICT clause</a> </li>
+<li> <a href="fileformat2.html">on-disk format</a> </li>
+<li> <a href="cli.html#dotoutput">.once</a> </li>
+<li> <a href="tclsqlite.html#onecolumn">onecolumn method</a> </li>
+<li> <a href="opcode.html#codes">opcode definitions</a> </li>
+<li> <a href="opcode.html">opcodes</a> </li>
+<li> <a href="cli.html#dotopen">.open</a> </li>
+<li> <a href="cli.html#dotopen">.open command</a> </li>
+<li> <a href="c3ref/open.html#openexrescode">OPEN_EXRESCODE</a> </li>
+<li> <a href="c3ref/open.html#opennofollow">OPEN_NOFOLLOW</a> </li>
+<li> <a href="swarmvtab.html#the_openclose_callback">openclose callback</a> </li>
+<li> <a href="affcase1.html">OpenOffice case study</a> </li>
+<li> <a href="pragma.html#pragma_optimize">optimize pragma</a> </li>
+<li> <a href="fts3.html#*fts4optcmd">"optimize" command</a> </li>
+<li> <a href="optoverview.html">optimizer</a> </li>
+<li> <a href="optoverview.html#or_opt">or optimization</a> </li>
+<li> <a href="queryplanner.html#or_in_where">or-connected-terms</a> </li>
+<li> <a href="lang_select.html#orderby">order by</a> </li>
+<li> <a href="vtab.html#obc">orderByConsumed</a> </li>
+<li> <a href="syntax/ordering-term.html">ordering-term</a> </li>
+<li> <a href="syntax/ordering-term.html">ordering-term syntax diagram</a> </li>
+<li> <a href="lang_with.html#ordinarycte">ordinary common table expressions</a> </li>
+<li> <a href="vfs.html">OS backend</a> </li>
+<li> <a href="testing.html#ossfuzz">OSS Fuzz</a> </li>
+<li> <a href="cli.html#dotoutput">.output</a> </li>
+<li> <a href="cli.html#dotmode">output mode</a> </li>
+<li> <a href="syntax/over-clause.html">over-clause</a> </li>
+<li> <a href="syntax/over-clause.html">over-clause syntax diagram</a> </li>
+<li> <a href="fileformat2.html#ovflpgs">overflow page</a> </li>
+<li> <a href="c3ref/pcache_methods2.html">page cache</a> </li>
+<li> <a href="pragma.html#pragma_page_count">page_count pragma</a> </li>
+<li> <a href="pragma.html#pragma_page_size">page_size pragma</a> </li>
+<li> <a href="malloc.html#pagecache">pagecache memory allocator</a> </li>
+<li> <a href="lang_expr.html#varparam">parameter</a> </li>
+<li> <a href="c3ref/bind_blob.html">parameter binding</a> </li>
+<li> <a href="cli.html#param">.parameter command</a> </li>
+<li> <a href="foreignkeys.html#parentchild">parent key</a> </li>
+<li> <a href="foreignkeys.html#parentchild">parent table</a> </li>
+<li> <a href="pragma.html#pragma_parser_trace">parser_trace pragma</a> </li>
+<li> <a href="partialindex.html">partial index</a> </li>
+<li> <a href="partialindex.html">partial indexes</a> </li>
+<li> <a href="partialindex.html">partial indices</a> </li>
+<li> <a href="queryplanner.html#partialsort">partial sorting by index</a> </li>
+<li> <a href="windowfunctions.html#ptxn">partition</a> </li>
+<li> <a href="sessionintro.html#changeset">patchset</a> </li>
+<li> <a href="sitemap.html">permuted index</a> </li>
+<li> <a href="pragma.html#pragma_journal_mode">persistent journal mode</a> </li>
+<li> <a href="loadext.html#persist">persistent loadable extensions</a> </li>
+<li> <a href="fts3.html#phrase">phrase queries</a> </li>
+<li> <a href="lang_mathfunc.html#pi">pi() SQL function</a> </li>
+<li> <a href="bindptr.html#ptrleak">pointer leak</a> </li>
+<li> <a href="bindptr.html">pointer passing interface</a> </li>
+<li> <a href="bindptr.html#ptrtyp">pointer types</a> </li>
+<li> <a href="bindptr.html">pointer value</a> </li>
+<li> <a href="custombuild.html">porting SQLite</a> </li>
+<li> <a href="lang_mathfunc.html#pow">pow() SQL function</a> </li>
+<li> <a href="transactional.html">power-safe</a> </li>
+<li> <a href="transactional.html">power-safe transactions</a> </li>
+<li> <a href="psow.html">powersafe overwrite</a> </li>
+<li> <a href="pragma.html#syntax">PRAGMA</a> </li>
+<li> <a href="pragma.html#pragma_analysis_limit">PRAGMA analysis_limit</a> </li>
+<li> <a href="pragma.html#pragma_application_id">PRAGMA application_id</a> </li>
+<li> <a href="pragma.html#pragma_auto_vacuum">PRAGMA auto_vacuum</a> </li>
+<li> <a href="pragma.html#pragma_automatic_index">PRAGMA automatic_index</a> </li>
+<li> <a href="pragma.html#pragma_busy_timeout">PRAGMA busy_timeout</a> </li>
+<li> <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> </li>
+<li> <a href="pragma.html#pragma_cache_spill">PRAGMA cache_spill</a> </li>
+<li> <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> </li>
+<li> <a href="pragma.html#pragma_cell_size_check">PRAGMA cell_size_check</a> </li>
+<li> <a href="pragma.html#pragma_checkpoint_fullfsync">PRAGMA checkpoint_fullfsync</a> </li>
+<li> <a href="pragma.html#pragma_collation_list">PRAGMA collation_list</a> </li>
+<li> <a href="pragma.html#pragma_compile_options">PRAGMA compile_options</a> </li>
+<li> <a href="pragma.html#pragma_count_changes">PRAGMA count_changes</a> </li>
+<li> <a href="pragma.html#pragma_data_store_directory">PRAGMA data_store_directory</a> </li>
+<li> <a href="pragma.html#pragma_data_version">PRAGMA data_version</a> </li>
+<li> <a href="pragma.html#pragma_database_list">PRAGMA database_list</a> </li>
+<li> <a href="pragma.html#pragma_default_cache_size">PRAGMA default_cache_size</a> </li>
+<li> <a href="pragma.html#pragma_defer_foreign_keys">PRAGMA defer_foreign_keys</a> </li>
+<li> <a href="pragma.html#pragma_empty_result_callbacks">PRAGMA empty_result_callbacks</a> </li>
+<li> <a href="pragma.html#pragma_encoding">PRAGMA encoding</a> </li>
+<li> <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> </li>
+<li> <a href="pragma.html#pragma_foreign_key_list">PRAGMA foreign_key_list</a> </li>
+<li> <a href="pragma.html#pragma_foreign_keys">PRAGMA foreign_keys</a> </li>
+<li> <a href="pragma.html#pragma_freelist_count">PRAGMA freelist_count</a> </li>
+<li> <a href="pragma.html#pragma_full_column_names">PRAGMA full_column_names</a> </li>
+<li> <a href="pragma.html#pragma_fullfsync">PRAGMA fullfsync</a> </li>
+<li> <a href="pragma.html#pragfunc">PRAGMA function</a> </li>
+<li> <a href="pragma.html#pragma_function_list">PRAGMA function_list</a> </li>
+<li> <a href="pragma.html#pragma_hard_heap_limit">PRAGMA hard_heap_limit</a> </li>
+<li> <a href="pragma.html#pragma_ignore_check_constraints">PRAGMA ignore_check_constraints</a> </li>
+<li> <a href="pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a> </li>
+<li> <a href="pragma.html#pragma_index_info">PRAGMA index_info</a> </li>
+<li> <a href="pragma.html#pragma_index_list">PRAGMA index_list</a> </li>
+<li> <a href="pragma.html#pragma_index_xinfo">PRAGMA index_xinfo</a> </li>
+<li> <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> </li>
+<li> <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode</a> </li>
+<li> <a href="pragma.html#pragma_journal_size_limit">PRAGMA journal_size_limit</a> </li>
+<li> <a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table</a> </li>
+<li> <a href="pragma.html#pragma_legacy_file_format">PRAGMA legacy_file_format</a> </li>
+<li> <a href="pragma.html#toc">pragma list</a> </li>
+<li> <a href="pragma.html#pragma_locking_mode">PRAGMA locking_mode</a> </li>
+<li> <a href="pragma.html#pragma_max_page_count">PRAGMA max_page_count</a> </li>
+<li> <a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a> </li>
+<li> <a href="pragma.html#pragma_module_list">PRAGMA module_list</a> </li>
+<li> <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> </li>
+<li> <a href="pragma.html#pragma_page_count">PRAGMA page_count</a> </li>
+<li> <a href="pragma.html#pragma_page_size">PRAGMA page_size</a> </li>
+<li> <a href="pragma.html#pragma_parser_trace">PRAGMA parser_trace</a> </li>
+<li> <a href="pragma.html#pragma_pragma_list">PRAGMA pragma_list</a> </li>
+<li> <a href="pragma.html#pragma_query_only">PRAGMA query_only</a> </li>
+<li> <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> </li>
+<li> <a href="pragma.html#pragma_read_uncommitted">PRAGMA read_uncommitted</a> </li>
+<li> <a href="pragma.html#pragma_recursive_triggers">PRAGMA recursive_triggers</a> </li>
+<li> <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> </li>
+<li> <a href="pragma.html#pragma_schema_version">PRAGMA schema_version</a> </li>
+<li> <a href="pragma.html#pragma_secure_delete">PRAGMA secure_delete</a> </li>
+<li> <a href="pragma.html#pragma_short_column_names">PRAGMA short_column_names</a> </li>
+<li> <a href="pragma.html#pragma_shrink_memory">PRAGMA shrink_memory</a> </li>
+<li> <a href="pragma.html#pragma_soft_heap_limit">PRAGMA soft_heap_limit</a> </li>
+<li> <a href="pragma.html#pragma_stats">PRAGMA stats</a> </li>
+<li> <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> </li>
+<li> <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> </li>
+<li> <a href="pragma.html#pragma_table_list">PRAGMA table_list</a> </li>
+<li> <a href="pragma.html#pragma_table_xinfo">PRAGMA table_xinfo</a> </li>
+<li> <a href="pragma.html#pragma_temp_store">PRAGMA temp_store</a> </li>
+<li> <a href="pragma.html#pragma_temp_store_directory">PRAGMA temp_store_directory</a> </li>
+<li> <a href="pragma.html#pragma_threads">PRAGMA threads</a> </li>
+<li> <a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema</a> </li>
+<li> <a href="pragma.html#pragma_user_version">PRAGMA user_version</a> </li>
+<li> <a href="pragma.html#pragma_vdbe_addoptrace">PRAGMA vdbe_addoptrace</a> </li>
+<li> <a href="pragma.html#pragma_vdbe_debug">PRAGMA vdbe_debug</a> </li>
+<li> <a href="pragma.html#pragma_vdbe_listing">PRAGMA vdbe_listing</a> </li>
+<li> <a href="pragma.html#pragma_vdbe_trace">PRAGMA vdbe_trace</a> </li>
+<li> <a href="pragma.html#pragma_wal_autocheckpoint">PRAGMA wal_autocheckpoint</a> </li>
+<li> <a href="pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a> </li>
+<li> <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema</a> </li>
+<li> <a href="syntax/pragma-stmt.html">pragma-stmt</a> </li>
+<li> <a href="syntax/pragma-stmt.html">pragma-stmt syntax diagram</a> </li>
+<li> <a href="syntax/pragma-value.html">pragma-value</a> </li>
+<li> <a href="syntax/pragma-value.html">pragma-value syntax diagram</a> </li>
+<li> <a href="pragma.html#pragma_pragma_list">pragma_list pragma</a> </li>
+<li> <a href="fts3.html#termprefix">prefix queries</a> </li>
+<li> <a href="fts3.html#termprefix">prefix query</a> </li>
+<li> <a href="c3ref/stmt.html">prepared statement</a> </li>
+<li> <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> </li>
+<li> <a href="lang_createtable.html#primkeyconst">PRIMARY KEY constraint</a> </li>
+<li> <a href="rescode.html#pve">primary versus extended result codes</a> </li>
+<li> <a href="lang_corefunc.html#printf">printf() SQL function</a> </li>
+<li> <a href="chronology.html">prior releases</a> </li>
+<li> <a href="privatebranch.html">private branches</a> </li>
+<li> <a href="prosupport.html">professional support</a> </li>
+<li> <a href="tclsqlite.html#profile">profile method</a> </li>
+<li> <a href="loadext.html#write">Programming Loadable Extensions</a> </li>
+<li> <a href="tclsqlite.html#progress">progress method</a> </li>
+<li> <a href="c3ref/value.html">protected sqlite3_value</a> </li>
+<li> <a href="psow.html">PSOW</a> </li>
+<li> <a href="uri.html#uripsow">"psow" query parameter</a> </li>
+<li> <a href="copyright.html">public-domain</a> </li>
+<li> <a href="optoverview.html#pushdown">push-down optimization</a> </li>
+<li> <a href="cli.html#qbox">qbox</a> </li>
+<li> <a href="cli.html#qbox">qbox output mode</a> </li>
+<li> <a href="queryplanner-ng.html#qpstab">QPSG</a> </li>
+<li> <a href="syntax/qualified-table-name.html">qualified-table-name</a> </li>
+<li> <a href="syntax/qualified-table-name.html">qualified-table-name syntax diagram</a> </li>
+<li> <a href="lang_with.html#rcex3">queries against graphs</a> </li>
+<li> <a href="optoverview.html#flattening">query flattener</a> </li>
+<li> <a href="uri.html#coreqp">query parameters with special meaning to SQLite</a> </li>
+<li> <a href="optoverview.html">query planner</a> </li>
+<li> <a href="queryplanner-ng.html#howtofix">query planner checklist</a> </li>
+<li> <a href="queryplanner-ng.html#qpstab">query planner stability guarantee</a> </li>
+<li> <a href="pragma.html#pragma_query_only">query_only pragma</a> </li>
+<li> <a href="quickstart.html">Quick Start Guide</a> </li>
+<li> <a href="pragma.html#pragma_quick_check">quick_check pragma</a> </li>
+<li> <a href="quirks.html">Quirks</a> </li>
+<li> <a href="lang_corefunc.html#quote">quote() SQL function</a> </li>
+<li> <a href="rtree.html">R-Tree extension</a> </li>
+<li> <a href="rtree.html">R-Trees</a> </li>
+<li> <a href="lang_mathfunc.html#radians">radians() SQL function</a> </li>
+<li> <a href="lang_createtrigger.html#raise">RAISE function</a> </li>
+<li> <a href="syntax/raise-function.html">raise-function</a> </li>
+<li> <a href="syntax/raise-function.html">raise-function syntax diagram</a> </li>
+<li> <a href="lang_corefunc.html#random">random() SQL function</a> </li>
+<li> <a href="lang_corefunc.html#randomblob">randomblob() SQL function</a> </li>
+<li> <a href="windowfunctions.html#rangetype">RANGE frames</a> </li>
+<li> <a href="windowfunctions.html#exprrange">RANGE n FOLLOWING</a> </li>
+<li> <a href="windowfunctions.html#exprrange">RANGE n PRECEDING</a> </li>
+<li> <a href="optoverview.html#rangequery">range query optimization</a> </li>
+<li> <a href="rbu.html">RBU</a> </li>
+<li> <a href="rbu.html#database_contents">RBU Database Contents</a> </li>
+<li> <a href="rbu.html#database_tables">RBU Database Tables</a> </li>
+<li> <a href="rbu.html">RBU extension</a> </li>
+<li> <a href="rbu.html#fts4_tables">RBU FTS3/4 Tables</a> </li>
+<li> <a href="rbu.html#rbu_updates">RBU Update</a> </li>
+<li> <a href="rbu.html#rbu_vacuum">RBU Vacuum</a> </li>
+<li> <a href="cli.html#dotread">.read</a> </li>
+<li> <a href="wal.html#readonly">read-only WAL databases</a> </li>
+<li> <a href="pragma.html#pragma_read_uncommitted">read_uncommitted pragma</a> </li>
+<li> <a href="rtree.html#readwrite">reading and writing an rtree at the same time</a> </li>
+<li> <a href="fts3.html#*fts4rebuidcmd">"rebuild" command</a> </li>
+<li> <a href="cves.html#cvetab">recent CVEs</a> </li>
+<li> <a href="lang_analyze.html#req">recommended ANALYZE usage pattern</a> </li>
+<li> <a href="locrsf.html">recommended by the US Library of Congress</a> </li>
+<li> <a href="compile.html#rcmd">recommended compile-time option</a> </li>
+<li> <a href="locrsf.html">recommended storage format</a> </li>
+<li> <a href="fileformat2.html#record_format">record format</a> </li>
+<li> <a href="cli.html#recover">.recover dot-command</a> </li>
+<li> <a href="walformat.html#recovery">recovery</a> </li>
+<li> <a href="recovery.html">recovery extension</a> </li>
+<li> <a href="lang_with.html#recursivecte">recursive common table expression</a> </li>
+<li> <a href="lang_with.html#recursivecte">recursive query</a> </li>
+<li> <a href="syntax/recursive-cte.html">recursive-cte</a> </li>
+<li> <a href="syntax/recursive-cte.html">recursive-cte syntax diagram</a> </li>
+<li> <a href="pragma.html#pragma_recursive_triggers">recursive_triggers pragma</a> </li>
+<li> <a href="lang_expr.html#regexp">REGEXP</a> </li>
+<li> <a href="syntax/reindex-stmt.html">reindex-stmt</a> </li>
+<li> <a href="syntax/reindex-stmt.html">reindex-stmt syntax diagram</a> </li>
+<li> <a href="lang_savepoint.html">RELEASE</a> </li>
+<li> <a href="changes.html">release history</a> </li>
+<li> <a href="testing.html#cklist">release testing checklists</a> </li>
+<li> <a href="syntax/release-stmt.html">release-stmt</a> </li>
+<li> <a href="syntax/release-stmt.html">release-stmt syntax diagram</a> </li>
+<li> <a href="footprint.html">relfootprint</a> </li>
+<li> <a href="lang_altertable.html#altertabmvcol">rename column</a> </li>
+<li> <a href="lang_altertable.html#altertabrename">rename table</a> </li>
+<li> <a href="lang_corefunc.html#replace">replace() SQL function</a> </li>
+<li> <a href="cves.html">reported vulnerabilities</a> </li>
+<li> <a href="fileformat2.html#resbyte">reserve bytes</a> </li>
+<li> <a href="fileformat2.html#walreset">reset the WAL</a> </li>
+<li> <a href="tclsqlite.html#restore">restore method</a> </li>
+<li> <a href="rescode.html">result code</a> </li>
+<li> <a href="c3ref/c_abort.html">result code definitions</a> </li>
+<li> <a href="syntax/result-column.html">result-column</a> </li>
+<li> <a href="syntax/result-column.html">result-column syntax diagram</a> </li>
+<li> <a href="lang_select.html#resultset">result-set expressions</a> </li>
+<li> <a href="lang_returning.html">RETURNING clause</a> </li>
+<li> <a href="syntax/returning-clause.html">returning-clause</a> </li>
+<li> <a href="syntax/returning-clause.html">returning-clause syntax diagram</a> </li>
+<li> <a href="pragma.html#pragma_reverse_unordered_selects">reverse_unordered_selects pragma</a> </li>
+<li> <a href="lang_select.html#rjoin">RIGHT and FULL OUTER JOIN</a> </li>
+<li> <a href="lang_select.html#rjoin">RIGHT JOIN</a> </li>
+<li> <a href="malloc.html#nofrag">Robson proof</a> </li>
+<li> <a href="lang_transaction.html">ROLLBACK</a> </li>
+<li> <a href="lockingv3.html#rollback">rollback journal</a> </li>
+<li> <a href="fileformat2.html#rollbackjournal">rollback journal format</a> </li>
+<li> <a href="syntax/rollback-stmt.html">rollback-stmt</a> </li>
+<li> <a href="syntax/rollback-stmt.html">rollback-stmt syntax diagram</a> </li>
+<li> <a href="tclsqlite.html#rollback_hook">rollback_hook method</a> </li>
+<li> <a href="lang_corefunc.html#round">round() SQL function</a> </li>
+<li> <a href="rowvalue.html">row value</a> </li>
+<li> <a href="rowvalue.html#rvinop">row value IN operator</a> </li>
+<li> <a href="lang_createtable.html#rowid">ROWID</a> </li>
+<li> <a href="rowidtable.html">rowid table</a> </li>
+<li> <a href="rowvalue.html">rowvalue</a> </li>
+<li> <a href="rtree.html#xshadow">rtree shadow tables</a> </li>
+<li> <a href="rtree.html#rtreecheck">rtreecheck()</a> </li>
+<li> <a href="datatype3.html#collation">RTRIM collating function</a> </li>
+<li> <a href="lang_corefunc.html#rtrim">rtrim() SQL function</a> </li>
+<li> <a href="datatype3.html#affname">rules for determining column affinity</a> </li>
+<li> <a href="datatype3.html#affview">rules for determining column affinity in VIEWs</a> </li>
+<li> <a href="loadext.html">Run-Time Loadable Extensions</a> </li>
+<li> <a href="cli.html#safemode">safe command-line option</a> </li>
+<li> <a href="cli.html#safemode">--safe command-line option</a> </li>
+<li> <a href="howtocorrupt.html#svptbug">SAVEPOINT bug</a> </li>
+<li> <a href="syntax/savepoint-stmt.html">savepoint-stmt</a> </li>
+<li> <a href="syntax/savepoint-stmt.html">savepoint-stmt syntax diagram</a> </li>
+<li> <a href="c3ref/c_scanstat_est.html">scanstatus options</a> </li>
+<li> <a href="cli.html#dschema">.schema</a> </li>
+<li> <a href="fileformat2.html#schemaformat">schema format</a> </li>
+<li> <a href="fileformat2.html#schemaformat">schema format number</a> </li>
+<li> <a href="fileformat2.html#ffschema">schema storage</a> </li>
+<li> <a href="pragma.html#pragma_schema_version">schema_version pragma</a> </li>
+<li> <a href="fts3.html#appendix_a">search application tips</a> </li>
+<li> <a href="fileformat2.html">second edition file format document</a> </li>
+<li> <a href="pragma.html#pragma_secure_delete">secure_delete pragma</a> </li>
+<li> <a href="security.html">security</a> </li>
+<li> <a href="fts3.html#data_structures">segment btree</a> </li>
+<li> <a href="lang_select.html">select</a> </li>
+<li> <a href="lang_select.html">SELECT query</a> </li>
+<li> <a href="lang_select.html">SELECT statement</a> </li>
+<li> <a href="syntax/select-core.html">select-core</a> </li>
+<li> <a href="syntax/select-core.html">select-core syntax diagram</a> </li>
+<li> <a href="syntax/select-stmt.html">select-stmt</a> </li>
+<li> <a href="syntax/select-stmt.html">select-stmt syntax diagram</a> </li>
+<li> <a href="selfcontained.html">self-contained</a> </li>
+<li> <a href="cli.html#selftest">.selftest dot-command</a> </li>
+<li> <a href="howtocorrupt.html#roguejrnl">separating a database from its journal</a> </li>
+<li> <a href="fileformat2.html#serialtype">serial type</a> </li>
+<li> <a href="tclsqlite.html#serialize">serialize method</a> </li>
+<li> <a href="series.html">series</a> </li>
+<li> <a href="whentouse.html#serversidedb">server-side database</a> </li>
+<li> <a href="serverless.html">serverless</a> </li>
+<li> <a href="sessionintro.html">session</a> </li>
+<li> <a href="sessionintro.html">session extension</a> </li>
+<li> <a href="session/intro.html">Session Extension C-language Interface</a> </li>
+<li> <a href="session/funclist.html">Session Module C-API function list</a> </li>
+<li> <a href="cli.html#sha3sum">.sha3sum dot-command</a> </li>
+<li> <a href="vtab.html#xshadowname">shadow table</a> </li>
+<li> <a href="fts3.html#shadow_tables">shadowtabs</a> </li>
+<li> <a href="sharedcache.html">shared cache</a> </li>
+<li> <a href="sharedcache.html">shared cache mode</a> </li>
+<li> <a href="vfs.html#shim">shims</a> </li>
+<li> <a href="walformat.html#shm">"shm" file</a> </li>
+<li> <a href="shortnames.html">short filenames</a> </li>
+<li> <a href="pragma.html#pragma_short_column_names">short_column_names pragma</a> </li>
+<li> <a href="pragma.html#pragma_shrink_memory">shrink_memory pragma</a> </li>
+<li> <a href="lang_corefunc.html#sign">sign() SQL function</a> </li>
+<li> <a href="syntax/signed-number.html">signed-number</a> </li>
+<li> <a href="syntax/signed-number.html">signed-number syntax diagram</a> </li>
+<li> <a href="fts3.html#simple_fts_queries">simple fts queries</a> </li>
+<li> <a href="lang_select.html#simpleselect">simple SELECT</a> </li>
+<li> <a href="syntax/simple-function-invocation.html">simple-function-invocation</a> </li>
+<li> <a href="syntax/simple-function-invocation.html">simple-function-invocation syntax diagram</a> </li>
+<li> <a href="syntax/simple-select-stmt.html">simple-select-stmt</a> </li>
+<li> <a href="syntax/simple-select-stmt.html">simple-select-stmt syntax diagram</a> </li>
+<li> <a href="lang_mathfunc.html#sin">sin() SQL function</a> </li>
+<li> <a href="carray.html#onearg">single-argument carray</a> </li>
+<li> <a href="lang_mathfunc.html#sinh">sinh() SQL function</a> </li>
+<li> <a href="optoverview.html#skipscan">skip-scan</a> </li>
+<li> <a href="optoverview.html#skipscan">skip-scan optimization</a> </li>
+<li> <a href="testing.html#slt">SLT</a> </li>
+<li> <a href="c3ref/snapshot.html">snapshot</a> </li>
+<li> <a href="fts3.html#snippet">snippet</a> </li>
+<li> <a href="pragma.html#pragma_soft_heap_limit">soft_heap_limit pragma</a> </li>
+<li> <a href="lang_with.html#sudoku">solve Sudoku puzzles</a> </li>
+<li> <a href="datatype3.html#sortorder">sort order</a> </li>
+<li> <a href="queryplanner.html#sorting">sorting</a> </li>
+<li> <a href="optoverview.html#partsort">sorting subsets of the result</a> </li>
+<li> <a href="lang_corefunc.html#soundex">soundex() SQL function</a> </li>
+<li> <a href="spellfix1.html">spellfix1</a> </li>
+<li> <a href="amalgamation.html#amal32k">split amalgamation</a> </li>
+<li> <a href="sqlar.html">SQL Archive</a> </li>
+<li> <a href="testing.html#fuzztesting">SQL fuzzing</a> </li>
+<li> <a href="testing.html#slt">SQL Logic Tests</a> </li>
+<li> <a href="c3ref/bind_blob.html">SQL parameter</a> </li>
+<li> <a href="c3ref/prepare.html">SQL statement compiler</a> </li>
+<li> <a href="syntax/sql-stmt.html">sql-stmt</a> </li>
+<li> <a href="syntax/sql-stmt.html">sql-stmt syntax diagram</a> </li>
+<li> <a href="syntax/sql-stmt-list.html">sql-stmt-list</a> </li>
+<li> <a href="syntax/sql-stmt-list.html">sql-stmt-list syntax diagram</a> </li>
+<li> <a href="sqlar.html">SQLAR</a> </li>
+<li> <a href="sqldiff.html">sqldiff</a> </li>
+<li> <a href="rbu.html#sqldiff">sqldiff --rbu</a> </li>
+<li> <a href="sqldiff.html">sqldiff.exe</a> </li>
+<li> <a href="amalgamation.html">SQLite amalgamation source file</a> </li>
+<li> <a href="sqlar.html">SQLite Archive</a> </li>
+<li> <a href="sqlar.html">SQLite Archive files</a> </li>
+<li> <a href="sqlar.html">SQLite Archive format</a> </li>
+<li> <a href="affcase1.html#smaller">SQLite Archive smaller than ZIP</a> </li>
+<li> <a href="consortium.html">SQLite Consortium</a> </li>
+<li> <a href="fileformat2.html">SQLite database file format</a> </li>
+<li> <a href="loadext.html">SQLite extension</a> </li>
+<li> <a href="lang_keywords.html">SQLite Keywords</a> </li>
+<li> <a href="optoverview.html">SQLite query planner</a> </li>
+<li> <a href="sharedcache.html">SQLite Shared-Cache Mode</a> </li>
+<li> <a href="download.html#srctree">SQLite source code repositories</a> </li>
+<li> <a href="c3ref/sqlite3.html">sqlite3</a> </li>
+<li> <a href="cli.html">sqlite3.exe</a> </li>
+<li> <a href="cli.html">sqlite3.exe command-line shell</a> </li>
+<li> <a href="c3ref/aggregate_context.html">sqlite3_aggregate_context</a> </li>
+<li> <a href="c3ref/aggregate_count.html">sqlite3_aggregate_count</a> </li>
+<li> <a href="sqlanalyze.html">sqlite3_analyzer</a> </li>
+<li> <a href="sqlanalyze.html">sqlite3_analyzer.exe</a> </li>
+<li> <a href="c3ref/api_routines.html">sqlite3_api_routines</a> </li>
+<li> <a href="c3ref/auto_extension.html">sqlite3_auto_extension</a> </li>
+<li> <a href="c3ref/autovacuum_pages.html">sqlite3_autovacuum_pages</a> </li>
+<li> <a href="c3ref/backup.html">sqlite3_backup</a> </li>
+<li> <a href="c3ref/backup_finish.html#sqlite3backupfinish">sqlite3_backup_finish()</a> </li>
+<li> <a href="c3ref/backup_finish.html#sqlite3backupinit">sqlite3_backup_init()</a> </li>
+<li> <a href="c3ref/backup_finish.html#sqlite3backuppagecount">sqlite3_backup_pagecount()</a> </li>
+<li> <a href="c3ref/backup_finish.html#sqlite3backupremaining">sqlite3_backup_remaining()</a> </li>
+<li> <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step()</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_blob</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_blob64</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_double</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_int</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_int64</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_null</a> </li>
+<li> <a href="c3ref/bind_parameter_count.html">sqlite3_bind_parameter_count</a> </li>
+<li> <a href="c3ref/bind_parameter_index.html">sqlite3_bind_parameter_index</a> </li>
+<li> <a href="c3ref/bind_parameter_name.html">sqlite3_bind_parameter_name</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_pointer</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_text</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_text16</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_text64</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_value</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_zeroblob</a> </li>
+<li> <a href="c3ref/bind_blob.html">sqlite3_bind_zeroblob64</a> </li>
+<li> <a href="c3ref/blob.html">sqlite3_blob</a> </li>
+<li> <a href="c3ref/blob_bytes.html">sqlite3_blob_bytes</a> </li>
+<li> <a href="c3ref/blob_close.html">sqlite3_blob_close</a> </li>
+<li> <a href="c3ref/blob_open.html">sqlite3_blob_open</a> </li>
+<li> <a href="c3ref/blob_read.html">sqlite3_blob_read</a> </li>
+<li> <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen</a> </li>
+<li> <a href="c3ref/blob_write.html">sqlite3_blob_write</a> </li>
+<li> <a href="c3ref/busy_handler.html">sqlite3_busy_handler</a> </li>
+<li> <a href="c3ref/busy_timeout.html">sqlite3_busy_timeout</a> </li>
+<li> <a href="c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension</a> </li>
+<li> <a href="carray.html#onearg">sqlite3_carray_bind</a> </li>
+<li> <a href="session/changegroup.html">sqlite3_changegroup</a> </li>
+<li> <a href="c3ref/changes.html">sqlite3_changes</a> </li>
+<li> <a href="c3ref/changes.html">sqlite3_changes64</a> </li>
+<li> <a href="session/changeset_iter.html">sqlite3_changeset_iter</a> </li>
+<li> <a href="c3ref/clear_bindings.html">sqlite3_clear_bindings</a> </li>
+<li> <a href="c3ref/close.html">sqlite3_close</a> </li>
+<li> <a href="c3ref/close.html">sqlite3_close_v2</a> </li>
+<li> <a href="c3ref/collation_needed.html">sqlite3_collation_needed</a> </li>
+<li> <a href="c3ref/collation_needed.html">sqlite3_collation_needed16</a> </li>
+<li> <a href="c3ref/column_blob.html">sqlite3_column_blob</a> </li>
+<li> <a href="c3ref/column_blob.html">sqlite3_column_bytes</a> </li>
+<li> <a href="c3ref/column_blob.html">sqlite3_column_bytes16</a> </li>
+<li> <a href="c3ref/column_count.html">sqlite3_column_count</a> </li>
+<li> <a href="c3ref/column_database_name.html">sqlite3_column_database_name</a> </li>
+<li> <a href="c3ref/column_database_name.html">sqlite3_column_database_name16</a> </li>
+<li> <a href="c3ref/column_decltype.html">sqlite3_column_decltype</a> </li>
+<li> <a href="c3ref/column_decltype.html">sqlite3_column_decltype16</a> </li>
+<li> <a href="c3ref/column_blob.html">sqlite3_column_double</a> </li>
+<li> <a href="c3ref/column_blob.html">sqlite3_column_int</a> </li>
+<li> <a href="c3ref/column_blob.html">sqlite3_column_int64</a> </li>
+<li> <a href="c3ref/column_name.html">sqlite3_column_name</a> </li>
+<li> <a href="c3ref/column_name.html">sqlite3_column_name16</a> </li>
+<li> <a href="c3ref/column_database_name.html">sqlite3_column_origin_name</a> </li>
+<li> <a href="c3ref/column_database_name.html">sqlite3_column_origin_name16</a> </li>
+<li> <a href="c3ref/column_database_name.html">sqlite3_column_table_name</a> </li>
+<li> <a href="c3ref/column_database_name.html">sqlite3_column_table_name16</a> </li>
+<li> <a href="c3ref/column_blob.html">sqlite3_column_text</a> </li>
+<li> <a href="c3ref/column_blob.html">sqlite3_column_text16</a> </li>
+<li> <a href="c3ref/column_blob.html">sqlite3_column_type</a> </li>
+<li> <a href="c3ref/column_blob.html">sqlite3_column_value</a> </li>
+<li> <a href="c3ref/commit_hook.html">sqlite3_commit_hook</a> </li>
+<li> <a href="c3ref/compileoption_get.html">sqlite3_compileoption_get</a> </li>
+<li> <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used</a> </li>
+<li> <a href="c3ref/complete.html">sqlite3_complete</a> </li>
+<li> <a href="c3ref/complete.html">sqlite3_complete16</a> </li>
+<li> <a href="c3ref/config.html">sqlite3_config</a> </li>
+<li> <a href="c3ref/context.html">sqlite3_context</a> </li>
+<li> <a href="c3ref/context_db_handle.html">sqlite3_context_db_handle</a> </li>
+<li> <a href="c3ref/create_collation.html">sqlite3_create_collation</a> </li>
+<li> <a href="c3ref/create_collation.html">sqlite3_create_collation16</a> </li>
+<li> <a href="c3ref/create_collation.html">sqlite3_create_collation_v2</a> </li>
+<li> <a href="c3ref/create_filename.html">sqlite3_create_filename</a> </li>
+<li> <a href="c3ref/create_function.html">sqlite3_create_function</a> </li>
+<li> <a href="c3ref/create_function.html">sqlite3_create_function16</a> </li>
+<li> <a href="c3ref/create_function.html">sqlite3_create_function_v2</a> </li>
+<li> <a href="c3ref/create_module.html">sqlite3_create_module</a> </li>
+<li> <a href="c3ref/create_module.html">sqlite3_create_module_v2</a> </li>
+<li> <a href="c3ref/create_function.html">sqlite3_create_window_function</a> </li>
+<li> <a href="c3ref/data_count.html">sqlite3_data_count</a> </li>
+<li> <a href="c3ref/data_directory.html">sqlite3_data_directory</a> </li>
+<li> <a href="c3ref/database_file_object.html">sqlite3_database_file_object</a> </li>
+<li> <a href="c3ref/db_cacheflush.html">sqlite3_db_cacheflush</a> </li>
+<li> <a href="c3ref/db_config.html">sqlite3_db_config</a> </li>
+<li> <a href="c3ref/db_filename.html">sqlite3_db_filename</a> </li>
+<li> <a href="c3ref/db_handle.html">sqlite3_db_handle</a> </li>
+<li> <a href="c3ref/db_mutex.html">sqlite3_db_mutex</a> </li>
+<li> <a href="c3ref/db_name.html">sqlite3_db_name</a> </li>
+<li> <a href="c3ref/db_readonly.html">sqlite3_db_readonly</a> </li>
+<li> <a href="c3ref/db_release_memory.html">sqlite3_db_release_memory</a> </li>
+<li> <a href="c3ref/db_status.html">sqlite3_db_status</a> </li>
+<li> <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab</a> </li>
+<li> <a href="c3ref/deserialize.html">sqlite3_deserialize</a> </li>
+<li> <a href="c3ref/drop_modules.html">sqlite3_drop_modules</a> </li>
+<li> <a href="c3ref/enable_load_extension.html">sqlite3_enable_load_extension</a> </li>
+<li> <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache</a> </li>
+<li> <a href="c3ref/errcode.html">sqlite3_errcode</a> </li>
+<li> <a href="c3ref/errcode.html">sqlite3_errmsg</a> </li>
+<li> <a href="c3ref/errcode.html">sqlite3_errmsg16</a> </li>
+<li> <a href="c3ref/errcode.html">sqlite3_error_offset</a> </li>
+<li> <a href="c3ref/errcode.html">sqlite3_errstr</a> </li>
+<li> <a href="c3ref/exec.html">sqlite3_exec</a> </li>
+<li> <a href="c3ref/expanded_sql.html">sqlite3_expanded_sql</a> </li>
+<li> <a href="c3ref/aggregate_count.html">sqlite3_expired</a> </li>
+<li> <a href="c3ref/errcode.html">sqlite3_extended_errcode</a> </li>
+<li> <a href="c3ref/extended_result_codes.html">sqlite3_extended_result_codes</a> </li>
+<li> <a href="c3ref/file.html">sqlite3_file</a> </li>
+<li> <a href="c3ref/file_control.html">sqlite3_file_control</a> </li>
+<li> <a href="c3ref/filename.html">sqlite3_filename</a> </li>
+<li> <a href="c3ref/filename_database.html">sqlite3_filename_database</a> </li>
+<li> <a href="c3ref/filename_database.html">sqlite3_filename_journal</a> </li>
+<li> <a href="c3ref/filename_database.html">sqlite3_filename_wal</a> </li>
+<li> <a href="c3ref/finalize.html">sqlite3_finalize</a> </li>
+<li> <a href="c3ref/free.html">sqlite3_free</a> </li>
+<li> <a href="c3ref/create_filename.html">sqlite3_free_filename</a> </li>
+<li> <a href="c3ref/free_table.html">sqlite3_free_table</a> </li>
+<li> <a href="c3ref/get_autocommit.html">sqlite3_get_autocommit</a> </li>
+<li> <a href="c3ref/get_auxdata.html">sqlite3_get_auxdata</a> </li>
+<li> <a href="c3ref/free_table.html">sqlite3_get_table</a> </li>
+<li> <a href="c3ref/aggregate_count.html">sqlite3_global_recover</a> </li>
+<li> <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64</a> </li>
+<li> <a href="c3ref/index_info.html">sqlite3_index_info</a> </li>
+<li> <a href="c3ref/initialize.html">sqlite3_initialize</a> </li>
+<li> <a href="c3ref/int64.html">sqlite3_int64</a> </li>
+<li> <a href="c3ref/interrupt.html">sqlite3_interrupt</a> </li>
+<li> <a href="c3ref/io_methods.html">sqlite3_io_methods</a> </li>
+<li> <a href="c3ref/keyword_check.html">sqlite3_keyword_check</a> </li>
+<li> <a href="c3ref/keyword_check.html">sqlite3_keyword_count</a> </li>
+<li> <a href="c3ref/keyword_check.html">sqlite3_keyword_name</a> </li>
+<li> <a href="c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid</a> </li>
+<li> <a href="c3ref/libversion.html">sqlite3_libversion</a> </li>
+<li> <a href="c3ref/libversion.html">sqlite3_libversion_number</a> </li>
+<li> <a href="c3ref/limit.html">sqlite3_limit</a> </li>
+<li> <a href="c3ref/load_extension.html">sqlite3_load_extension</a> </li>
+<li> <a href="c3ref/log.html">sqlite3_log</a> </li>
+<li> <a href="c3ref/free.html">sqlite3_malloc</a> </li>
+<li> <a href="c3ref/free.html">sqlite3_malloc64</a> </li>
+<li> <a href="c3ref/mem_methods.html">sqlite3_mem_methods</a> </li>
+<li> <a href="c3ref/aggregate_count.html">sqlite3_memory_alarm</a> </li>
+<li> <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater</a> </li>
+<li> <a href="c3ref/memory_highwater.html">sqlite3_memory_used</a> </li>
+<li> <a href="c3ref/module.html">sqlite3_module</a> </li>
+<li> <a href="vtab.html#xBegin">sqlite3_module.xBegin</a> </li>
+<li> <a href="vtab.html#xbestindex">sqlite3_module.xBestIndex</a> </li>
+<li> <a href="vtab.html#xclose">sqlite3_module.xClose</a> </li>
+<li> <a href="vtab.html#xcolumn">sqlite3_module.xColumn</a> </li>
+<li> <a href="vtab.html#xcommit">sqlite3_module.xCommit</a> </li>
+<li> <a href="vtab.html#xconnect">sqlite3_module.xConnect</a> </li>
+<li> <a href="vtab.html#xcreate">sqlite3_module.xCreate</a> </li>
+<li> <a href="vtab.html#xdisconnect">sqlite3_module.xDisconnect</a> </li>
+<li> <a href="vtab.html#xeof">sqlite3_module.xEof</a> </li>
+<li> <a href="vtab.html#xfilter">sqlite3_module.xFilter</a> </li>
+<li> <a href="vtab.html#xfindfunction">sqlite3_module.xFindFunction</a> </li>
+<li> <a href="vtab.html#xnext">sqlite3_module.xNext</a> </li>
+<li> <a href="vtab.html#xopen">sqlite3_module.xOpen</a> </li>
+<li> <a href="vtab.html#xrename">sqlite3_module.xRename</a> </li>
+<li> <a href="vtab.html#xrollback">sqlite3_module.xRollback</a> </li>
+<li> <a href="vtab.html#xrowid">sqlite3_module.xRowid</a> </li>
+<li> <a href="vtab.html#xsavepoint">sqlite3_module.xSavepoint</a> </li>
+<li> <a href="vtab.html#xshadowname">sqlite3_module.xShadowName</a> </li>
+<li> <a href="vtab.html#xsync">sqlite3_module.xSync</a> </li>
+<li> <a href="vtab.html#xupdate">sqlite3_module.xUpdate</a> </li>
+<li> <a href="c3ref/mprintf.html">sqlite3_mprintf</a> </li>
+<li> <a href="c3ref/free.html">sqlite3_msize</a> </li>
+<li> <a href="c3ref/mutex.html">sqlite3_mutex</a> </li>
+<li> <a href="c3ref/mutex_alloc.html">sqlite3_mutex_alloc</a> </li>
+<li> <a href="c3ref/mutex_alloc.html">sqlite3_mutex_enter</a> </li>
+<li> <a href="c3ref/mutex_alloc.html">sqlite3_mutex_free</a> </li>
+<li> <a href="c3ref/mutex_held.html">sqlite3_mutex_held</a> </li>
+<li> <a href="c3ref/mutex_alloc.html">sqlite3_mutex_leave</a> </li>
+<li> <a href="c3ref/mutex_methods.html">sqlite3_mutex_methods</a> </li>
+<li> <a href="c3ref/mutex_held.html">sqlite3_mutex_notheld</a> </li>
+<li> <a href="c3ref/mutex_alloc.html">sqlite3_mutex_try</a> </li>
+<li> <a href="c3ref/next_stmt.html">sqlite3_next_stmt</a> </li>
+<li> <a href="c3ref/expanded_sql.html">sqlite3_normalized_sql</a> </li>
+<li> <a href="c3ref/open.html">sqlite3_open</a> </li>
+<li> <a href="c3ref/open.html">sqlite3_open16</a> </li>
+<li> <a href="c3ref/open.html">sqlite3_open_v2</a> </li>
+<li> <a href="c3ref/initialize.html">sqlite3_os_end</a> </li>
+<li> <a href="c3ref/initialize.html">sqlite3_os_init</a> </li>
+<li> <a href="c3ref/overload_function.html">sqlite3_overload_function</a> </li>
+<li> <a href="c3ref/pcache.html">sqlite3_pcache</a> </li>
+<li> <a href="c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> </li>
+<li> <a href="c3ref/pcache_page.html">sqlite3_pcache_page</a> </li>
+<li> <a href="c3ref/prepare.html">sqlite3_prepare</a> </li>
+<li> <a href="c3ref/prepare.html">sqlite3_prepare16</a> </li>
+<li> <a href="c3ref/prepare.html">sqlite3_prepare16_v2</a> </li>
+<li> <a href="c3ref/prepare.html">sqlite3_prepare16_v3</a> </li>
+<li> <a href="c3ref/prepare.html">sqlite3_prepare_v2</a> </li>
+<li> <a href="c3ref/prepare.html">sqlite3_prepare_v3</a> </li>
+<li> <a href="c3ref/preupdate_blobwrite.html">sqlite3_preupdate_blobwrite</a> </li>
+<li> <a href="c3ref/preupdate_blobwrite.html">sqlite3_preupdate_count</a> </li>
+<li> <a href="c3ref/preupdate_blobwrite.html">sqlite3_preupdate_depth</a> </li>
+<li> <a href="c3ref/preupdate_blobwrite.html">sqlite3_preupdate_hook</a> </li>
+<li> <a href="c3ref/preupdate_blobwrite.html">sqlite3_preupdate_new</a> </li>
+<li> <a href="c3ref/preupdate_blobwrite.html">sqlite3_preupdate_old</a> </li>
+<li> <a href="c3ref/profile.html">sqlite3_profile</a> </li>
+<li> <a href="c3ref/progress_handler.html">sqlite3_progress_handler</a> </li>
+<li> <a href="c3ref/randomness.html">sqlite3_randomness</a> </li>
+<li> <a href="c3ref/free.html">sqlite3_realloc</a> </li>
+<li> <a href="c3ref/free.html">sqlite3_realloc64</a> </li>
+<li> <a href="session/rebaser.html">sqlite3_rebaser</a> </li>
+<li> <a href="c3ref/release_memory.html">sqlite3_release_memory</a> </li>
+<li> <a href="c3ref/reset.html">sqlite3_reset</a> </li>
+<li> <a href="c3ref/reset_auto_extension.html">sqlite3_reset_auto_extension</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_blob</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_blob64</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_double</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_error</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_error16</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_error_code</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_error_nomem</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_error_toobig</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_int</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_int64</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_null</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_pointer</a> </li>
+<li> <a href="c3ref/result_subtype.html">sqlite3_result_subtype</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_text</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_text16</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_text16be</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_text16le</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_text64</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_value</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_zeroblob</a> </li>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_zeroblob64</a> </li>
+<li> <a href="c3ref/commit_hook.html">sqlite3_rollback_hook</a> </li>
+<li> <a href="rtree.html#xquery">sqlite3_rtree_query_callback</a> </li>
+<li> <a href="c3ref/serialize.html">sqlite3_serialize</a> </li>
+<li> <a href="session/session.html">sqlite3_session</a> </li>
+<li> <a href="c3ref/set_authorizer.html">sqlite3_set_authorizer</a> </li>
+<li> <a href="c3ref/get_auxdata.html">sqlite3_set_auxdata</a> </li>
+<li> <a href="c3ref/set_last_insert_rowid.html">sqlite3_set_last_insert_rowid</a> </li>
+<li> <a href="c3ref/initialize.html">sqlite3_shutdown</a> </li>
+<li> <a href="c3ref/sleep.html">sqlite3_sleep</a> </li>
+<li> <a href="c3ref/snapshot.html">sqlite3_snapshot</a> </li>
+<li> <a href="c3ref/snapshot_cmp.html">sqlite3_snapshot_cmp</a> </li>
+<li> <a href="c3ref/snapshot_free.html">sqlite3_snapshot_free</a> </li>
+<li> <a href="c3ref/snapshot_get.html">sqlite3_snapshot_get</a> </li>
+<li> <a href="c3ref/snapshot_open.html">sqlite3_snapshot_open</a> </li>
+<li> <a href="c3ref/snapshot_recover.html">sqlite3_snapshot_recover</a> </li>
+<li> <a href="c3ref/mprintf.html">sqlite3_snprintf</a> </li>
+<li> <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a> </li>
+<li> <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64</a> </li>
+<li> <a href="c3ref/libversion.html">sqlite3_sourceid</a> </li>
+<li> <a href="c3ref/expanded_sql.html">sqlite3_sql</a> </li>
+<li> <a href="c3ref/status.html">sqlite3_status</a> </li>
+<li> <a href="c3ref/status.html">sqlite3_status64</a> </li>
+<li> <a href="c3ref/step.html">sqlite3_step</a> </li>
+<li> <a href="c3ref/stmt.html">sqlite3_stmt</a> </li>
+<li> <a href="c3ref/stmt_busy.html">sqlite3_stmt_busy</a> </li>
+<li> <a href="c3ref/stmt_isexplain.html">sqlite3_stmt_isexplain</a> </li>
+<li> <a href="c3ref/stmt_readonly.html">sqlite3_stmt_readonly</a> </li>
+<li> <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus</a> </li>
+<li> <a href="c3ref/stmt_scanstatus_reset.html">sqlite3_stmt_scanstatus_reset</a> </li>
+<li> <a href="c3ref/stmt_status.html">sqlite3_stmt_status</a> </li>
+<li> <a href="c3ref/str.html">sqlite3_str</a> </li>
+<li> <a href="c3ref/str_append.html">sqlite3_str_append</a> </li>
+<li> <a href="c3ref/str_append.html">sqlite3_str_appendall</a> </li>
+<li> <a href="c3ref/str_append.html">sqlite3_str_appendchar</a> </li>
+<li> <a href="c3ref/str_append.html">sqlite3_str_appendf</a> </li>
+<li> <a href="c3ref/str_errcode.html">sqlite3_str_errcode</a> </li>
+<li> <a href="c3ref/str_finish.html">sqlite3_str_finish</a> </li>
+<li> <a href="c3ref/str_errcode.html">sqlite3_str_length</a> </li>
+<li> <a href="c3ref/str_new.html">sqlite3_str_new</a> </li>
+<li> <a href="c3ref/str_append.html">sqlite3_str_reset</a> </li>
+<li> <a href="c3ref/str_errcode.html">sqlite3_str_value</a> </li>
+<li> <a href="c3ref/str_append.html">sqlite3_str_vappendf</a> </li>
+<li> <a href="c3ref/strglob.html">sqlite3_strglob</a> </li>
+<li> <a href="c3ref/stricmp.html">sqlite3_stricmp</a> </li>
+<li> <a href="c3ref/strlike.html">sqlite3_strlike</a> </li>
+<li> <a href="c3ref/stricmp.html">sqlite3_strnicmp</a> </li>
+<li> <a href="c3ref/system_errno.html">sqlite3_system_errno</a> </li>
+<li> <a href="c3ref/table_column_metadata.html">sqlite3_table_column_metadata</a> </li>
+<li> <a href="c3ref/temp_directory.html">sqlite3_temp_directory</a> </li>
+<li> <a href="c3ref/test_control.html">sqlite3_test_control</a> </li>
+<li> <a href="c3ref/aggregate_count.html">sqlite3_thread_cleanup</a> </li>
+<li> <a href="c3ref/threadsafe.html">sqlite3_threadsafe</a> </li>
+<li> <a href="c3ref/total_changes.html">sqlite3_total_changes</a> </li>
+<li> <a href="c3ref/total_changes.html">sqlite3_total_changes64</a> </li>
+<li> <a href="c3ref/profile.html">sqlite3_trace</a> </li>
+<li> <a href="c3ref/trace_v2.html">sqlite3_trace_v2</a> </li>
+<li> <a href="c3ref/aggregate_count.html">sqlite3_transfer_bindings</a> </li>
+<li> <a href="c3ref/txn_state.html">sqlite3_txn_state</a> </li>
+<li> <a href="c3ref/int64.html">sqlite3_uint64</a> </li>
+<li> <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify</a> </li>
+<li> <a href="c3ref/update_hook.html">sqlite3_update_hook</a> </li>
+<li> <a href="c3ref/uri_boolean.html">sqlite3_uri_boolean</a> </li>
+<li> <a href="c3ref/uri_boolean.html">sqlite3_uri_int64</a> </li>
+<li> <a href="c3ref/uri_boolean.html">sqlite3_uri_key</a> </li>
+<li> <a href="c3ref/uri_boolean.html">sqlite3_uri_parameter</a> </li>
+<li> <a href="c3ref/user_data.html">sqlite3_user_data</a> </li>
+<li> <a href="c3ref/value.html">sqlite3_value</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_blob</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_bytes</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_bytes16</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_double</a> </li>
+<li> <a href="c3ref/value_dup.html">sqlite3_value_dup</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_encoding</a> </li>
+<li> <a href="c3ref/value_dup.html">sqlite3_value_free</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_frombind</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_int</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_int64</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_nochange</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_numeric_type</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_pointer</a> </li>
+<li> <a href="c3ref/value_subtype.html">sqlite3_value_subtype</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_text</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_text16</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_text16be</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_text16le</a> </li>
+<li> <a href="c3ref/value_blob.html">sqlite3_value_type</a> </li>
+<li> <a href="c3ref/libversion.html">sqlite3_version</a> </li>
+<li> <a href="c3ref/vfs.html">sqlite3_vfs</a> </li>
+<li> <a href="c3ref/vfs.html#sqlite3vfsxaccess">sqlite3_vfs.xAccess</a> </li>
+<li> <a href="c3ref/vfs.html#sqlite3vfsxopen">sqlite3_vfs.xOpen</a> </li>
+<li> <a href="c3ref/vfs_find.html">sqlite3_vfs_find</a> </li>
+<li> <a href="c3ref/vfs_find.html">sqlite3_vfs_register</a> </li>
+<li> <a href="c3ref/vfs_find.html">sqlite3_vfs_unregister</a> </li>
+<li> <a href="c3ref/mprintf.html">sqlite3_vmprintf</a> </li>
+<li> <a href="c3ref/mprintf.html">sqlite3_vsnprintf</a> </li>
+<li> <a href="c3ref/vtab.html">sqlite3_vtab</a> </li>
+<li> <a href="c3ref/vtab_collation.html">sqlite3_vtab_collation</a> </li>
+<li> <a href="c3ref/vtab_config.html">sqlite3_vtab_config</a> </li>
+<li> <a href="c3ref/vtab_cursor.html">sqlite3_vtab_cursor</a> </li>
+<li> <a href="c3ref/vtab_distinct.html">sqlite3_vtab_distinct</a> </li>
+<li> <a href="c3ref/vtab_in.html">sqlite3_vtab_in</a> </li>
+<li> <a href="c3ref/vtab_in_first.html">sqlite3_vtab_in_first</a> </li>
+<li> <a href="c3ref/vtab_in_first.html">sqlite3_vtab_in_next</a> </li>
+<li> <a href="c3ref/vtab_nochange.html">sqlite3_vtab_nochange</a> </li>
+<li> <a href="c3ref/vtab_on_conflict.html">sqlite3_vtab_on_conflict</a> </li>
+<li> <a href="c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value</a> </li>
+<li> <a href="c3ref/wal_autocheckpoint.html">sqlite3_wal_autocheckpoint</a> </li>
+<li> <a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint</a> </li>
+<li> <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2</a> </li>
+<li> <a href="c3ref/wal_hook.html">sqlite3_wal_hook</a> </li>
+<li> <a href="c3ref/win32_set_directory.html">sqlite3_win32_set_directory</a> </li>
+<li> <a href="c3ref/win32_set_directory.html">sqlite3_win32_set_directory16</a> </li>
+<li> <a href="c3ref/win32_set_directory.html">sqlite3_win32_set_directory8</a> </li>
+<li> <a href="session/sqlite3changegroup_add.html">sqlite3changegroup_add</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3changegroup_add_strm</a> </li>
+<li> <a href="session/sqlite3changegroup_delete.html">sqlite3changegroup_delete</a> </li>
+<li> <a href="session/sqlite3changegroup_new.html">sqlite3changegroup_new</a> </li>
+<li> <a href="session/sqlite3changegroup_output.html">sqlite3changegroup_output</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3changegroup_output_strm</a> </li>
+<li> <a href="session/sqlite3changeset_apply.html">sqlite3changeset_apply</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3changeset_apply_strm</a> </li>
+<li> <a href="session/sqlite3changeset_apply.html">sqlite3changeset_apply_v2</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3changeset_apply_v2_strm</a> </li>
+<li> <a href="session/sqlite3changeset_concat.html">sqlite3changeset_concat</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3changeset_concat_strm</a> </li>
+<li> <a href="session/sqlite3changeset_conflict.html">sqlite3changeset_conflict</a> </li>
+<li> <a href="session/sqlite3changeset_finalize.html">sqlite3changeset_finalize</a> </li>
+<li> <a href="session/sqlite3changeset_fk_conflicts.html">sqlite3changeset_fk_conflicts</a> </li>
+<li> <a href="session/sqlite3changeset_invert.html">sqlite3changeset_invert</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3changeset_invert_strm</a> </li>
+<li> <a href="session/sqlite3changeset_new.html">sqlite3changeset_new</a> </li>
+<li> <a href="session/sqlite3changeset_next.html">sqlite3changeset_next</a> </li>
+<li> <a href="session/sqlite3changeset_old.html">sqlite3changeset_old</a> </li>
+<li> <a href="session/sqlite3changeset_op.html">sqlite3changeset_op</a> </li>
+<li> <a href="session/sqlite3changeset_pk.html">sqlite3changeset_pk</a> </li>
+<li> <a href="session/sqlite3changeset_start.html">sqlite3changeset_start</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3changeset_start_strm</a> </li>
+<li> <a href="session/sqlite3changeset_start.html">sqlite3changeset_start_v2</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3changeset_start_v2_strm</a> </li>
+<li> <a href="session/sqlite3rebaser_configure.html">sqlite3rebaser_configure</a> </li>
+<li> <a href="session/sqlite3rebaser_create.html">sqlite3rebaser_create</a> </li>
+<li> <a href="session/sqlite3rebaser_delete.html">sqlite3rebaser_delete</a> </li>
+<li> <a href="session/sqlite3rebaser_rebase.html">sqlite3rebaser_rebase</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3rebaser_rebase_strm</a> </li>
+<li> <a href="session/sqlite3session_attach.html">sqlite3session_attach</a> </li>
+<li> <a href="session/sqlite3session_changeset.html">sqlite3session_changeset</a> </li>
+<li> <a href="session/sqlite3session_changeset_size.html">sqlite3session_changeset_size</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3session_changeset_strm</a> </li>
+<li> <a href="session/sqlite3session_config.html">sqlite3session_config</a> </li>
+<li> <a href="session/sqlite3session_create.html">sqlite3session_create</a> </li>
+<li> <a href="session/sqlite3session_delete.html">sqlite3session_delete</a> </li>
+<li> <a href="session/sqlite3session_diff.html">sqlite3session_diff</a> </li>
+<li> <a href="session/sqlite3session_enable.html">sqlite3session_enable</a> </li>
+<li> <a href="session/sqlite3session_indirect.html">sqlite3session_indirect</a> </li>
+<li> <a href="session/sqlite3session_isempty.html">sqlite3session_isempty</a> </li>
+<li> <a href="session/sqlite3session_memory_used.html">sqlite3session_memory_used</a> </li>
+<li> <a href="session/sqlite3session_patchset.html">sqlite3session_patchset</a> </li>
+<li> <a href="session/sqlite3changegroup_add_strm.html">sqlite3session_patchset_strm</a> </li>
+<li> <a href="session/sqlite3session_table_filter.html">sqlite3session_table_filter</a> </li>
+<li> <a href="compile.html#4_byte_aligned_malloc">SQLITE_4_BYTE_ALIGNED_MALLOC</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_ABORT</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_ABORT_ROLLBACK</a> </li>
+<li> <a href="c3ref/c_access_exists.html">SQLITE_ACCESS_EXISTS</a> </li>
+<li> <a href="c3ref/c_access_exists.html">SQLITE_ACCESS_READ</a> </li>
+<li> <a href="c3ref/c_access_exists.html">SQLITE_ACCESS_READWRITE</a> </li>
+<li> <a href="compile.html#allow_covering_index_scan">SQLITE_ALLOW_COVERING_INDEX_SCAN</a> </li>
+<li> <a href="compile.html#allow_uri_authority">SQLITE_ALLOW_URI_AUTHORITY</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_ALTER_TABLE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_ANALYZE</a> </li>
+<li> <a href="c3ref/c_any.html">SQLITE_ANY</a> </li>
+<li> <a href="compile.html#api">SQLITE_API</a> </li>
+<li> <a href="compile.html#apicall">SQLITE_APICALL</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_ATTACH</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_AUTH</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_AUTH_USER</a> </li>
+<li> <a href="c3ref/c_blob.html">SQLITE_BLOB</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_BUSY</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_BUSY_RECOVERY</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_BUSY_SNAPSHOT</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_BUSY_TIMEOUT</a> </li>
+<li> <a href="compile.html#byteorder">SQLITE_BYTEORDER</a> </li>
+<li> <a href="compile.html#callback">SQLITE_CALLBACK</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_CANTOPEN</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CANTOPEN_CONVPATH</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CANTOPEN_DIRTYWAL</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CANTOPEN_FULLPATH</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CANTOPEN_ISDIR</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CANTOPEN_NOTEMPDIR</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CANTOPEN_SYMLINK</a> </li>
+<li> <a href="compile.html#case_sensitive_like">SQLITE_CASE_SENSITIVE_LIKE</a> </li>
+<li> <a href="compile.html#cdecl">SQLITE_CDECL</a> </li>
+<li> <a href="session/c_changeset_abort.html">SQLITE_CHANGESET_ABORT</a> </li>
+<li> <a href="session/c_changeset_conflict.html">SQLITE_CHANGESET_CONFLICT</a> </li>
+<li> <a href="session/c_changeset_conflict.html">SQLITE_CHANGESET_CONSTRAINT</a> </li>
+<li> <a href="session/c_changeset_conflict.html">SQLITE_CHANGESET_DATA</a> </li>
+<li> <a href="session/c_changeset_conflict.html">SQLITE_CHANGESET_FOREIGN_KEY</a> </li>
+<li> <a href="session/c_changeset_conflict.html">SQLITE_CHANGESET_NOTFOUND</a> </li>
+<li> <a href="session/c_changeset_abort.html">SQLITE_CHANGESET_OMIT</a> </li>
+<li> <a href="session/c_changeset_abort.html">SQLITE_CHANGESET_REPLACE</a> </li>
+<li> <a href="session/c_changesetapply_invert.html">SQLITE_CHANGESETAPPLY_INVERT</a> </li>
+<li> <a href="session/c_changesetapply_invert.html">SQLITE_CHANGESETAPPLY_NOSAVEPOINT</a> </li>
+<li> <a href="session/c_changesetstart_invert.html">SQLITE_CHANGESETSTART_INVERT</a> </li>
+<li> <a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_FULL</a> </li>
+<li> <a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_PASSIVE</a> </li>
+<li> <a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_RESTART</a> </li>
+<li> <a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> </li>
+<li> <a href="lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get() SQL function</a> </li>
+<li> <a href="lang_corefunc.html#sqlite_compileoption_used">sqlite_compileoption_used() SQL function</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigcoveringindexscan">SQLITE_CONFIG_COVERING_INDEX_SCAN</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmalloc">SQLITE_CONFIG_GETMALLOC</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmutex">SQLITE_CONFIG_GETMUTEX</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache">SQLITE_CONFIG_GETPCACHE</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2">SQLITE_CONFIG_GETPCACHE2</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">SQLITE_CONFIG_MEMDB_MAXSIZE</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">SQLITE_CONFIG_MULTITHREAD</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache">SQLITE_CONFIG_PCACHE</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigscratch">SQLITE_CONFIG_SCRATCH</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">SQLITE_CONFIG_SERIALIZED</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">SQLITE_CONFIG_SINGLETHREAD</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsmallmalloc">SQLITE_CONFIG_SMALL_MALLOC</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsorterrefsize">SQLITE_CONFIG_SORTERREF_SIZE</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsqllog">SQLITE_CONFIG_SQLLOG</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">SQLITE_CONFIG_STMTJRNL_SPILL</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">SQLITE_CONFIG_URI</a> </li>
+<li> <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigwin32heapsize">SQLITE_CONFIG_WIN32_HEAPSIZE</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_CONSTRAINT</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_CHECK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_COMMITHOOK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_DATATYPE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_FOREIGNKEY</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_FUNCTION</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_NOTNULL</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_PINNED</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_PRIMARYKEY</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_ROWID</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_TRIGGER</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_UNIQUE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CONSTRAINT_VTAB</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_COPY</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_CORRUPT</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CORRUPT_INDEX</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CORRUPT_SEQUENCE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_CORRUPT_VTAB</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_CREATE_INDEX</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_CREATE_TABLE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_CREATE_TEMP_INDEX</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_CREATE_TEMP_TABLE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_CREATE_TEMP_TRIGGER</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_CREATE_TEMP_VIEW</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_CREATE_TRIGGER</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_CREATE_VIEW</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_CREATE_VTABLE</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">SQLITE_DBCONFIG_DQS_DDL</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">SQLITE_DBCONFIG_DQS_DML</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefkey">SQLITE_DBCONFIG_ENABLE_FKEY</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">SQLITE_DBCONFIG_ENABLE_QPSG</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable">SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">SQLITE_DBCONFIG_LOOKASIDE</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname">SQLITE_DBCONFIG_MAINDBNAME</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html">SQLITE_DBCONFIG_MAX</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose">SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase">SQLITE_DBCONFIG_RESET_DATABASE</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtriggereqp">SQLITE_DBCONFIG_TRIGGER_EQP</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a> </li>
+<li> <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema">SQLITE_DBCONFIG_WRITABLE_SCHEMA</a> </li>
+<li> <a href="dbpage.html">sqlite_dbpage</a> </li>
+<li> <a href="dbpage.html">SQLITE_DBPAGE virtual table</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html">SQLITE_DBSTATUS options</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit">SQLITE_DBSTATUS_CACHE_HIT</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss">SQLITE_DBSTATUS_CACHE_MISS</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill">SQLITE_DBSTATUS_CACHE_SPILL</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused">SQLITE_DBSTATUS_CACHE_USED</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared">SQLITE_DBSTATUS_CACHE_USED_SHARED</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite">SQLITE_DBSTATUS_CACHE_WRITE</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">SQLITE_DBSTATUS_DEFERRED_FKS</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit">SQLITE_DBSTATUS_LOOKASIDE_HIT</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull">SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize">SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasideused">SQLITE_DBSTATUS_LOOKASIDE_USED</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html">SQLITE_DBSTATUS_MAX</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused">SQLITE_DBSTATUS_SCHEMA_USED</a> </li>
+<li> <a href="c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused">SQLITE_DBSTATUS_STMT_USED</a> </li>
+<li> <a href="compile.html#debug">SQLITE_DEBUG</a> </li>
+<li> <a href="compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a> </li>
+<li> <a href="compile.html#default_autovacuum">SQLITE_DEFAULT_AUTOVACUUM</a> </li>
+<li> <a href="compile.html#default_cache_size">SQLITE_DEFAULT_CACHE_SIZE</a> </li>
+<li> <a href="compile.html#default_file_format">SQLITE_DEFAULT_FILE_FORMAT</a> </li>
+<li> <a href="compile.html#default_file_permissions">SQLITE_DEFAULT_FILE_PERMISSIONS</a> </li>
+<li> <a href="compile.html#default_foreign_keys">SQLITE_DEFAULT_FOREIGN_KEYS</a> </li>
+<li> <a href="compile.html#default_journal_size_limit">SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT</a> </li>
+<li> <a href="compile.html#default_locking_mode">SQLITE_DEFAULT_LOCKING_MODE</a> </li>
+<li> <a href="compile.html#default_lookaside">SQLITE_DEFAULT_LOOKASIDE</a> </li>
+<li> <a href="compile.html#default_memstatus">SQLITE_DEFAULT_MEMSTATUS</a> </li>
+<li> <a href="compile.html#default_mmap_size">SQLITE_DEFAULT_MMAP_SIZE</a> </li>
+<li> <a href="compile.html#default_page_size">SQLITE_DEFAULT_PAGE_SIZE</a> </li>
+<li> <a href="compile.html#default_pcache_initsz">SQLITE_DEFAULT_PCACHE_INITSZ</a> </li>
+<li> <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> </li>
+<li> <a href="compile.html#default_wal_autocheckpoint">SQLITE_DEFAULT_WAL_AUTOCHECKPOINT</a> </li>
+<li> <a href="compile.html#default_wal_synchronous">SQLITE_DEFAULT_WAL_SYNCHRONOUS</a> </li>
+<li> <a href="compile.html#default_worker_threads">SQLITE_DEFAULT_WORKER_THREADS</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DELETE</a> </li>
+<li> <a href="c3ref/c_deny.html">SQLITE_DENY</a> </li>
+<li> <a href="c3ref/c_deserialize_freeonclose.html">SQLITE_DESERIALIZE_FREEONCLOSE</a> </li>
+<li> <a href="c3ref/c_deserialize_freeonclose.html">SQLITE_DESERIALIZE_READONLY</a> </li>
+<li> <a href="c3ref/c_deserialize_freeonclose.html">SQLITE_DESERIALIZE_RESIZEABLE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DETACH</a> </li>
+<li> <a href="c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a> </li>
+<li> <a href="compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> </li>
+<li> <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a> </li>
+<li> <a href="compile.html#disable_dirsync">SQLITE_DISABLE_DIRSYNC</a> </li>
+<li> <a href="compile.html#disable_fts3_unicode">SQLITE_DISABLE_FTS3_UNICODE</a> </li>
+<li> <a href="compile.html#disable_fts4_deferred">SQLITE_DISABLE_FTS4_DEFERRED</a> </li>
+<li> <a href="compile.html#disable_intrinsic">SQLITE_DISABLE_INTRINSIC</a> </li>
+<li> <a href="compile.html#disable_lfs">SQLITE_DISABLE_LFS</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_DONE</a> </li>
+<li> <a href="compile.html#dqs">SQLITE_DQS</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DROP_INDEX</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DROP_TABLE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DROP_TEMP_INDEX</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DROP_TEMP_TABLE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DROP_TEMP_TRIGGER</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DROP_TEMP_VIEW</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DROP_TRIGGER</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DROP_VIEW</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_DROP_VTABLE</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_EMPTY</a> </li>
+<li> <a href="compile.html#enable_8_3_names">SQLITE_ENABLE_8_3_NAMES</a> </li>
+<li> <a href="compile.html#enable_api_armor">SQLITE_ENABLE_API_ARMOR</a> </li>
+<li> <a href="compile.html#enable_atomic_write">SQLITE_ENABLE_ATOMIC_WRITE</a> </li>
+<li> <a href="compile.html#enable_batch_atomic_write">SQLITE_ENABLE_BATCH_ATOMIC_WRITE</a> </li>
+<li> <a href="compile.html#enable_bytecode_vtab">SQLITE_ENABLE_BYTECODE_VTAB</a> </li>
+<li> <a href="compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> </li>
+<li> <a href="compile.html#enable_dbpage_vtab">SQLITE_ENABLE_DBPAGE_VTAB</a> </li>
+<li> <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> </li>
+<li> <a href="compile.html#enable_deserialize">SQLITE_ENABLE_DESERIALIZE</a> </li>
+<li> <a href="compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> </li>
+<li> <a href="compile.html#enable_fts3">SQLITE_ENABLE_FTS3</a> </li>
+<li> <a href="compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> </li>
+<li> <a href="compile.html#enable_fts3_tokenizer">SQLITE_ENABLE_FTS3_TOKENIZER</a> </li>
+<li> <a href="compile.html#enable_fts4">SQLITE_ENABLE_FTS4</a> </li>
+<li> <a href="compile.html#enable_fts5">SQLITE_ENABLE_FTS5</a> </li>
+<li> <a href="compile.html#enable_geopoly">SQLITE_ENABLE_GEOPOLY</a> </li>
+<li> <a href="compile.html#enable_icu">SQLITE_ENABLE_ICU</a> </li>
+<li> <a href="compile.html#enable_iotrace">SQLITE_ENABLE_IOTRACE</a> </li>
+<li> <a href="compile.html#enable_json1">SQLITE_ENABLE_JSON1</a> </li>
+<li> <a href="compile.html#enable_locking_style">SQLITE_ENABLE_LOCKING_STYLE</a> </li>
+<li> <a href="compile.html#enable_math_functions">SQLITE_ENABLE_MATH_FUNCTIONS</a> </li>
+<li> <a href="compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a> </li>
+<li> <a href="compile.html#enable_memsys3">SQLITE_ENABLE_MEMSYS3</a> </li>
+<li> <a href="compile.html#enable_memsys5">SQLITE_ENABLE_MEMSYS5</a> </li>
+<li> <a href="compile.html#enable_normalize">SQLITE_ENABLE_NORMALIZE</a> </li>
+<li> <a href="compile.html#enable_null_trim">SQLITE_ENABLE_NULL_TRIM</a> </li>
+<li> <a href="compile.html#enable_offset_sql_func">SQLITE_ENABLE_OFFSET_SQL_FUNC</a> </li>
+<li> <a href="compile.html#enable_preupdate_hook">SQLITE_ENABLE_PREUPDATE_HOOK</a> </li>
+<li> <a href="compile.html#enable_qpsg">SQLITE_ENABLE_QPSG</a> </li>
+<li> <a href="compile.html#enable_rbu">SQLITE_ENABLE_RBU</a> </li>
+<li> <a href="compile.html#enable_rtree">SQLITE_ENABLE_RTREE</a> </li>
+<li> <a href="compile.html#enable_session">SQLITE_ENABLE_SESSION</a> </li>
+<li> <a href="compile.html#enable_snapshot">SQLITE_ENABLE_SNAPSHOT</a> </li>
+<li> <a href="compile.html#enable_sorter_references">SQLITE_ENABLE_SORTER_REFERENCES</a> </li>
+<li> <a href="compile.html#enable_sqllog">SQLITE_ENABLE_SQLLOG</a> </li>
+<li> <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> </li>
+<li> <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> </li>
+<li> <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> </li>
+<li> <a href="compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a> </li>
+<li> <a href="compile.html#enable_stmtvtab">SQLITE_ENABLE_STMTVTAB</a> </li>
+<li> <a href="compile.html#enable_tree_explain">SQLITE_ENABLE_TREE_EXPLAIN</a> </li>
+<li> <a href="compile.html#enable_unknown_sql_function">SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</a> </li>
+<li> <a href="compile.html#enable_unlock_notify">SQLITE_ENABLE_UNLOCK_NOTIFY</a> </li>
+<li> <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_ERROR</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_ERROR_MISSING_COLLSEQ</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_ERROR_RETRY</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_ERROR_SNAPSHOT</a> </li>
+<li> <a href="compile.html#extern">SQLITE_EXTERN</a> </li>
+<li> <a href="compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> </li>
+<li> <a href="c3ref/c_fail.html">SQLITE_FAIL</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler">SQLITE_FCNTL_BUSYHANDLER</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">SQLITE_FCNTL_CHUNK_SIZE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptdone">SQLITE_FCNTL_CKPT_DONE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlckptstart">SQLITE_FCNTL_CKPT_START</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcksmfile">SQLITE_FCNTL_CKSM_FILE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitphasetwo">SQLITE_FCNTL_COMMIT_PHASETWO</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlexternalreader">SQLITE_FCNTL_EXTERNAL_READER</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html">SQLITE_FCNTL_GET_LOCKPROXYFILE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlhasmoved">SQLITE_FCNTL_HAS_MOVED</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html">SQLITE_FCNTL_LAST_ERRNO</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllocktimeout">SQLITE_FCNTL_LOCK_TIMEOUT</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntllockstate">SQLITE_FCNTL_LOCKSTATE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize">SQLITE_FCNTL_MMAP_SIZE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite">SQLITE_FCNTL_OVERWRITE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html">SQLITE_FCNTL_PDB</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">SQLITE_FCNTL_PERSIST_WAL</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite">SQLITE_FCNTL_POWERSAFE_OVERWRITE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrbu">SQLITE_FCNTL_RBU</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html">SQLITE_FCNTL_RESERVE_BYTES</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlresetcache">SQLITE_FCNTL_RESET_CACHE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite">SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html">SQLITE_FCNTL_SET_LOCKPROXYFILE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsync">SQLITE_FCNTL_SYNC</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted">SQLITE_FCNTL_SYNC_OMITTED</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltempfilename">SQLITE_FCNTL_TEMPFILENAME</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace">SQLITE_FCNTL_TRACE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfspointer">SQLITE_FCNTL_VFS_POINTER</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlvfsname">SQLITE_FCNTL_VFSNAME</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwalblock">SQLITE_FCNTL_WAL_BLOCK</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32avretry">SQLITE_FCNTL_WIN32_AV_RETRY</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32sethandle">SQLITE_FCNTL_WIN32_SET_HANDLE</a> </li>
+<li> <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlzipvfs">SQLITE_FCNTL_ZIPVFS</a> </li>
+<li> <a href="c3ref/c_blob.html">SQLITE_FLOAT</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_FORMAT</a> </li>
+<li> <a href="compile.html#fts3_max_expr_depth">SQLITE_FTS3_MAX_EXPR_DEPTH</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_FULL</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_FUNCTION</a> </li>
+<li> <a href="compile.html#have_isnan">SQLITE_HAVE_ISNAN</a> </li>
+<li> <a href="compile.html#have_zlib">SQLITE_HAVE_ZLIB</a> </li>
+<li> <a href="c3ref/c_deny.html">SQLITE_IGNORE</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_EQ</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_FUNCTION</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_GE</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_GLOB</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_GT</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_IS</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_ISNOT</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_ISNOTNULL</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_ISNULL</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LE</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIKE</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LT</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_MATCH</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_NE</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a> </li>
+<li> <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_REGEXP</a> </li>
+<li> <a href="c3ref/c_index_scan_unique.html">SQLITE_INDEX_SCAN_UNIQUE</a> </li>
+<li> <a href="c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_INSERT</a> </li>
+<li> <a href="c3ref/int64.html">sqlite_int64</a> </li>
+<li> <a href="c3ref/c_blob.html">SQLITE_INTEGER</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_INTERNAL</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_INTERRUPT</a> </li>
+<li> <a href="compile.html#introspection_pragmas">SQLITE_INTROSPECTION_PRAGMAS</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC16K</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC1K</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC2K</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC32K</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC4K</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC512</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC64K</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC8K</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_BATCH_ATOMIC</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_IMMUTABLE</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_SAFE_APPEND</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_SEQUENTIAL</a> </li>
+<li> <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_IOERR</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_ACCESS</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_AUTH</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_BEGIN_ATOMIC</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_BLOCKED</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_CHECKRESERVEDLOCK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_CLOSE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_COMMIT_ATOMIC</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_CONVPATH</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_CORRUPTFS</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_DATA</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_DELETE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_DELETE_NOENT</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_DIR_CLOSE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_DIR_FSYNC</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_FSTAT</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_FSYNC</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_GETTEMPPATH</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_LOCK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_MMAP</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_NOMEM</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_RDLOCK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_READ</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_ROLLBACK_ATOMIC</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_SEEK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_SHMLOCK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_SHMMAP</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_SHMOPEN</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_SHMSIZE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_SHORT_READ</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_TRUNCATE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_UNLOCK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_VNODE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_IOERR_WRITE</a> </li>
+<li> <a href="compile.html#like_doesnt_match_blobs">SQLITE_LIKE_DOESNT_MATCH_BLOBS</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitattached">SQLITE_LIMIT_ATTACHED</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitcolumn">SQLITE_LIMIT_COLUMN</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitexprdepth">SQLITE_LIMIT_EXPR_DEPTH</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitfunctionarg">SQLITE_LIMIT_FUNCTION_ARG</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitlikepatternlength">SQLITE_LIMIT_LIKE_PATTERN_LENGTH</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitsqllength">SQLITE_LIMIT_SQL_LENGTH</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimittriggerdepth">SQLITE_LIMIT_TRIGGER_DEPTH</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitvariablenumber">SQLITE_LIMIT_VARIABLE_NUMBER</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitvdbeop">SQLITE_LIMIT_VDBE_OP</a> </li>
+<li> <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a> </li>
+<li> <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_EXCLUSIVE</a> </li>
+<li> <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_NONE</a> </li>
+<li> <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_PENDING</a> </li>
+<li> <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_RESERVED</a> </li>
+<li> <a href="c3ref/c_lock_exclusive.html">SQLITE_LOCK_SHARED</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_LOCKED</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_LOCKED_SHAREDCACHE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_LOCKED_VTAB</a> </li>
+<li> <a href="schematab.html">sqlite_master table</a> </li>
+<li> <a href="compile.html#max_allocation_size">SQLITE_MAX_ALLOCATION_SIZE</a> </li>
+<li> <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> </li>
+<li> <a href="limits.html#max_column">SQLITE_MAX_COLUMN</a> </li>
+<li> <a href="limits.html#max_compound_select">SQLITE_MAX_COMPOUND_SELECT</a> </li>
+<li> <a href="limits.html#max_expr_depth">SQLITE_MAX_EXPR_DEPTH</a> </li>
+<li> <a href="limits.html#max_function_arg">SQLITE_MAX_FUNCTION_ARG</a> </li>
+<li> <a href="limits.html#max_length">SQLITE_MAX_LENGTH</a> </li>
+<li> <a href="limits.html#max_like_pattern_length">SQLITE_MAX_LIKE_PATTERN_LENGTH</a> </li>
+<li> <a href="compile.html#max_memory">SQLITE_MAX_MEMORY</a> </li>
+<li> <a href="compile.html#max_mmap_size">SQLITE_MAX_MMAP_SIZE</a> </li>
+<li> <a href="limits.html#max_page_count">SQLITE_MAX_PAGE_COUNT</a> </li>
+<li> <a href="compile.html#max_schema_retry">SQLITE_MAX_SCHEMA_RETRY</a> </li>
+<li> <a href="limits.html#max_sql_length">SQLITE_MAX_SQL_LENGTH</a> </li>
+<li> <a href="limits.html#max_trigger_depth">SQLITE_MAX_TRIGGER_DEPTH</a> </li>
+<li> <a href="limits.html#max_variable_number">SQLITE_MAX_VARIABLE_NUMBER</a> </li>
+<li> <a href="compile.html#max_worker_threads">SQLITE_MAX_WORKER_THREADS</a> </li>
+<li> <a href="compile.html#memdb_default_maxsize">SQLITE_MEMDB_DEFAULT_MAXSIZE</a> </li>
+<li> <a href="compile.html#memdebug">SQLITE_MEMDEBUG</a> </li>
+<li> <a href="memstat.html">sqlite_memstat</a> </li>
+<li> <a href="memstat.html">SQLITE_MEMSTAT virtual table</a> </li>
+<li> <a href="compile.html#minimum_file_descriptor">SQLITE_MINIMUM_FILE_DESCRIPTOR</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_MISMATCH</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_MISUSE</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_FAST</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_RECURSIVE</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_APP1</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_APP2</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_APP3</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_LRU</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_LRU2</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_MAIN</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_MEM</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_MEM2</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_OPEN</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_PMEM</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_PRNG</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_VFS1</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_VFS2</a> </li>
+<li> <a href="c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_VFS3</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_NOLFS</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_NOMEM</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_NOTADB</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_NOTFOUND</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_NOTICE</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_NOTICE_RECOVER_ROLLBACK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_NOTICE_RECOVER_WAL</a> </li>
+<li> <a href="c3ref/c_blob.html">SQLITE_NULL</a> </li>
+<li> <a href="lang_corefunc.html#sqlite_offset">sqlite_offset() SQL function</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_OK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_OK_LOAD_PERMANENTLY</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_OK_SYMLINK</a> </li>
+<li> <a href="compile.html#omit_altertable">SQLITE_OMIT_ALTERTABLE</a> </li>
+<li> <a href="compile.html#omit_analyze">SQLITE_OMIT_ANALYZE</a> </li>
+<li> <a href="compile.html#omit_attach">SQLITE_OMIT_ATTACH</a> </li>
+<li> <a href="compile.html#omit_authorization">SQLITE_OMIT_AUTHORIZATION</a> </li>
+<li> <a href="compile.html#omit_autoincrement">SQLITE_OMIT_AUTOINCREMENT</a> </li>
+<li> <a href="compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a> </li>
+<li> <a href="compile.html#omit_automatic_index">SQLITE_OMIT_AUTOMATIC_INDEX</a> </li>
+<li> <a href="compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a> </li>
+<li> <a href="compile.html#omit_autovacuum">SQLITE_OMIT_AUTOVACUUM</a> </li>
+<li> <a href="compile.html#omit_between_optimization">SQLITE_OMIT_BETWEEN_OPTIMIZATION</a> </li>
+<li> <a href="compile.html#omit_blob_literal">SQLITE_OMIT_BLOB_LITERAL</a> </li>
+<li> <a href="compile.html#omit_btreecount">SQLITE_OMIT_BTREECOUNT</a> </li>
+<li> <a href="compile.html#omit_builtin_test">SQLITE_OMIT_BUILTIN_TEST</a> </li>
+<li> <a href="compile.html#omit_case_sensitive_like_pragma">SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA</a> </li>
+<li> <a href="compile.html#omit_cast">SQLITE_OMIT_CAST</a> </li>
+<li> <a href="compile.html#omit_check">SQLITE_OMIT_CHECK</a> </li>
+<li> <a href="compile.html#omit_compileoption_diags">SQLITE_OMIT_COMPILEOPTION_DIAGS</a> </li>
+<li> <a href="compile.html#omit_complete">SQLITE_OMIT_COMPLETE</a> </li>
+<li> <a href="compile.html#omit_compound_select">SQLITE_OMIT_COMPOUND_SELECT</a> </li>
+<li> <a href="compile.html#omit_cte">SQLITE_OMIT_CTE</a> </li>
+<li> <a href="compile.html#omit_datetime_funcs">SQLITE_OMIT_DATETIME_FUNCS</a> </li>
+<li> <a href="compile.html#omit_decltype">SQLITE_OMIT_DECLTYPE</a> </li>
+<li> <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a> </li>
+<li> <a href="compile.html#omit_deserialize">SQLITE_OMIT_DESERIALIZE</a> </li>
+<li> <a href="compile.html#omit_diskio">SQLITE_OMIT_DISKIO</a> </li>
+<li> <a href="compile.html#omit_explain">SQLITE_OMIT_EXPLAIN</a> </li>
+<li> <a href="compile.html#omit_flag_pragmas">SQLITE_OMIT_FLAG_PRAGMAS</a> </li>
+<li> <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a> </li>
+<li> <a href="compile.html#omit_foreign_key">SQLITE_OMIT_FOREIGN_KEY</a> </li>
+<li> <a href="compile.html#omit_generated_columns">SQLITE_OMIT_GENERATED_COLUMNS</a> </li>
+<li> <a href="compile.html#omit_get_table">SQLITE_OMIT_GET_TABLE</a> </li>
+<li> <a href="compile.html#omit_hex_integer">SQLITE_OMIT_HEX_INTEGER</a> </li>
+<li> <a href="compile.html#omit_incrblob">SQLITE_OMIT_INCRBLOB</a> </li>
+<li> <a href="compile.html#omit_integrity_check">SQLITE_OMIT_INTEGRITY_CHECK</a> </li>
+<li> <a href="compile.html#omit_introspection_pragmas">SQLITE_OMIT_INTROSPECTION_PRAGMAS</a> </li>
+<li> <a href="compile.html#omit_json">SQLITE_OMIT_JSON</a> </li>
+<li> <a href="compile.html#omit_like_optimization">SQLITE_OMIT_LIKE_OPTIMIZATION</a> </li>
+<li> <a href="compile.html#omit_load_extension">SQLITE_OMIT_LOAD_EXTENSION</a> </li>
+<li> <a href="compile.html#omit_localtime">SQLITE_OMIT_LOCALTIME</a> </li>
+<li> <a href="compile.html#omit_lookaside">SQLITE_OMIT_LOOKASIDE</a> </li>
+<li> <a href="compile.html#omit_memorydb">SQLITE_OMIT_MEMORYDB</a> </li>
+<li> <a href="compile.html#omit_or_optimization">SQLITE_OMIT_OR_OPTIMIZATION</a> </li>
+<li> <a href="compile.html#omit_pager_pragmas">SQLITE_OMIT_PAGER_PRAGMAS</a> </li>
+<li> <a href="compile.html#omit_pragma">SQLITE_OMIT_PRAGMA</a> </li>
+<li> <a href="compile.html#omit_progress_callback">SQLITE_OMIT_PROGRESS_CALLBACK</a> </li>
+<li> <a href="compile.html#omit_quickbalance">SQLITE_OMIT_QUICKBALANCE</a> </li>
+<li> <a href="compile.html#omit_reindex">SQLITE_OMIT_REINDEX</a> </li>
+<li> <a href="compile.html#omit_schema_pragmas">SQLITE_OMIT_SCHEMA_PRAGMAS</a> </li>
+<li> <a href="compile.html#omit_schema_version_pragmas">SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS</a> </li>
+<li> <a href="compile.html#omit_shared_cache">SQLITE_OMIT_SHARED_CACHE</a> </li>
+<li> <a href="compile.html#omit_subquery">SQLITE_OMIT_SUBQUERY</a> </li>
+<li> <a href="compile.html#omit_tcl_variable">SQLITE_OMIT_TCL_VARIABLE</a> </li>
+<li> <a href="compile.html#omit_tempdb">SQLITE_OMIT_TEMPDB</a> </li>
+<li> <a href="compile.html#omit_trace">SQLITE_OMIT_TRACE</a> </li>
+<li> <a href="compile.html#omit_trigger">SQLITE_OMIT_TRIGGER</a> </li>
+<li> <a href="compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> </li>
+<li> <a href="compile.html#omit_utf16">SQLITE_OMIT_UTF16</a> </li>
+<li> <a href="compile.html#omit_vacuum">SQLITE_OMIT_VACUUM</a> </li>
+<li> <a href="compile.html#omit_view">SQLITE_OMIT_VIEW</a> </li>
+<li> <a href="compile.html#omit_virtualtable">SQLITE_OMIT_VIRTUALTABLE</a> </li>
+<li> <a href="compile.html#omit_wal">SQLITE_OMIT_WAL</a> </li>
+<li> <a href="compile.html#omit_windowfunc">SQLITE_OMIT_WINDOWFUNC</a> </li>
+<li> <a href="compile.html#omit_wsd">SQLITE_OMIT_WSD</a> </li>
+<li> <a href="compile.html#omit_xfer_opt">SQLITE_OMIT_XFER_OPT</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_AUTOPROXY</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_CREATE</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_DELETEONCLOSE</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXCLUSIVE</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXRESCODE</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_FULLMUTEX</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_MAIN_DB</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_MAIN_JOURNAL</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_MEMORY</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_PRIVATECACHE</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_READONLY</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_READWRITE</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_SUBJOURNAL</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_SUPER_JOURNAL</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_TEMP_DB</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_TEMP_JOURNAL</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_TRANSIENT_DB</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_URI</a> </li>
+<li> <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_WAL</a> </li>
+<li> <a href="compile.html#os_other">SQLITE_OS_OTHER</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_PERM</a> </li>
+<li> <a href="compile.html#powersafe_overwrite">SQLITE_POWERSAFE_OVERWRITE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_PRAGMA</a> </li>
+<li> <a href="c3ref/c_prepare_normalize.html#sqlitepreparenovtab">SQLITE_PREPARE_NO_VTAB</a> </li>
+<li> <a href="c3ref/c_prepare_normalize.html#sqlitepreparenormalize">SQLITE_PREPARE_NORMALIZE</a> </li>
+<li> <a href="c3ref/c_prepare_normalize.html#sqlitepreparepersistent">SQLITE_PREPARE_PERSISTENT</a> </li>
+<li> <a href="compile.html#printf_precision_limit">SQLITE_PRINTF_PRECISION_LIMIT</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_PROTOCOL</a> </li>
+<li> <a href="compile.html#query_planner_limit">SQLITE_QUERY_PLANNER_LIMIT</a> </li>
+<li> <a href="compile.html#query_planner_limit_incr">SQLITE_QUERY_PLANNER_LIMIT_INCR</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_RANGE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_READ</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_READONLY</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_READONLY_CANTINIT</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_READONLY_CANTLOCK</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_READONLY_DBMOVED</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_READONLY_DIRECTORY</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_READONLY_RECOVERY</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_READONLY_ROLLBACK</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_RECURSIVE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_REINDEX</a> </li>
+<li> <a href="c3ref/c_fail.html">SQLITE_REPLACE</a> </li>
+<li> <a href="compile.html#reverse_unordered_selects">SQLITE_REVERSE_UNORDERED_SELECTS</a> </li>
+<li> <a href="c3ref/c_fail.html">SQLITE_ROLLBACK</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_ROW</a> </li>
+<li> <a href="compile.html#rtree_int_only">SQLITE_RTREE_INT_ONLY</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_SAVEPOINT</a> </li>
+<li> <a href="c3ref/c_scanstat_est.html#sqlitescanstatest">SQLITE_SCANSTAT_EST</a> </li>
+<li> <a href="c3ref/c_scanstat_est.html#sqlitescanstatexplain">SQLITE_SCANSTAT_EXPLAIN</a> </li>
+<li> <a href="c3ref/c_scanstat_est.html#sqlitescanstatname">SQLITE_SCANSTAT_NAME</a> </li>
+<li> <a href="c3ref/c_scanstat_est.html#sqlitescanstatnloop">SQLITE_SCANSTAT_NLOOP</a> </li>
+<li> <a href="c3ref/c_scanstat_est.html#sqlitescanstatnvisit">SQLITE_SCANSTAT_NVISIT</a> </li>
+<li> <a href="c3ref/c_scanstat_est.html#sqlitescanstatselectid">SQLITE_SCANSTAT_SELECTID</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_SCHEMA</a> </li>
+<li> <a href="schematab.html">sqlite_schema table</a> </li>
+<li> <a href="compile.html#secure_delete">SQLITE_SECURE_DELETE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_SELECT</a> </li>
+<li> <a href="fileformat2.html#seqtab">sqlite_sequence</a> </li>
+<li> <a href="c3ref/c_serialize_nocopy.html">SQLITE_SERIALIZE_NOCOPY</a> </li>
+<li> <a href="session/c_session_config_strmsize.html">SQLITE_SESSION_CONFIG_STRMSIZE</a> </li>
+<li> <a href="c3ref/c_shm_exclusive.html">SQLITE_SHM_EXCLUSIVE</a> </li>
+<li> <a href="c3ref/c_shm_exclusive.html">SQLITE_SHM_LOCK</a> </li>
+<li> <a href="c3ref/c_shm_nlock.html">SQLITE_SHM_NLOCK</a> </li>
+<li> <a href="c3ref/c_shm_exclusive.html">SQLITE_SHM_SHARED</a> </li>
+<li> <a href="c3ref/c_shm_exclusive.html">SQLITE_SHM_UNLOCK</a> </li>
+<li> <a href="compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> </li>
+<li> <a href="compile.html#soundex">SQLITE_SOUNDEX</a> </li>
+<li> <a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a> </li>
+<li> <a href="lang_corefunc.html#sqlite_source_id">sqlite_source_id() SQL function</a> </li>
+<li> <a href="fileformat2.html#stat1tab">sqlite_stat1</a> </li>
+<li> <a href="fileformat2.html#stat2tab">sqlite_stat2</a> </li>
+<li> <a href="fileformat2.html#stat3tab">sqlite_stat3</a> </li>
+<li> <a href="fileformat2.html#stat4tab">sqlite_stat4</a> </li>
+<li> <a href="c3ref/c_static.html">SQLITE_STATIC</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html#sqlitestatusmalloccount">SQLITE_STATUS_MALLOC_COUNT</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html#sqlitestatusmallocsize">SQLITE_STATUS_MALLOC_SIZE</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">SQLITE_STATUS_MEMORY_USED</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheoverflow">SQLITE_STATUS_PAGECACHE_OVERFLOW</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">SQLITE_STATUS_PAGECACHE_SIZE</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html#sqlitestatuspagecacheused">SQLITE_STATUS_PAGECACHE_USED</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html#sqlitestatusparserstack">SQLITE_STATUS_PARSER_STACK</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchoverflow">SQLITE_STATUS_SCRATCH_OVERFLOW</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchsize">SQLITE_STATUS_SCRATCH_SIZE</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html#sqlitestatusscratchused">SQLITE_STATUS_SCRATCH_USED</a> </li>
+<li> <a href="compile.html#stdcall">SQLITE_STDCALL</a> </li>
+<li> <a href="stmt.html">sqlite_stmt</a> </li>
+<li> <a href="stmt.html">SQLITE_STMT virtual table</a> </li>
+<li> <a href="compile.html#stmtjrnl_spill">SQLITE_STMTJRNL_SPILL</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html">SQLITE_STMTSTATUS counter</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusautoindex">SQLITE_STMTSTATUS_AUTOINDEX</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfilterhit">SQLITE_STMTSTATUS_FILTER HIT</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html">SQLITE_STMTSTATUS_FILTER_HIT</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfiltermiss">SQLITE_STMTSTATUS_FILTER_MISS</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfullscanstep">SQLITE_STMTSTATUS_FULLSCAN_STEP</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused">SQLITE_STMTSTATUS_MEMUSED</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">SQLITE_STMTSTATUS_REPREPARE</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">SQLITE_STMTSTATUS_RUN</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatussort">SQLITE_STMTSTATUS_SORT</a> </li>
+<li> <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">SQLITE_STMTSTATUS_VM_STEP</a> </li>
+<li> <a href="c3ref/c_deterministic.html#sqlitesubtype">SQLITE_SUBTYPE</a> </li>
+<li> <a href="c3ref/c_sync_dataonly.html">SQLITE_SYNC_DATAONLY</a> </li>
+<li> <a href="c3ref/c_sync_dataonly.html">SQLITE_SYNC_FULL</a> </li>
+<li> <a href="c3ref/c_sync_dataonly.html">SQLITE_SYNC_NORMAL</a> </li>
+<li> <a href="compile.html#sysapi">SQLITE_SYSAPI</a> </li>
+<li> <a href="compile.html#tclapi">SQLITE_TCLAPI</a> </li>
+<li> <a href="schematab.html">sqlite_temp_schema</a> </li>
+<li> <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_ALWAYS</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_ASSERT</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_BITVEC_TEST</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_BYTEORDER</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_EXPLAIN_STMT</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_FAULT_INSTALL</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_FIRST</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_IMPOSTER</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_INTERNAL_FUNCTIONS</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_ISINIT</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_ISKEYWORD</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_LAST</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_LOCALTIME_FAULT</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_LOGEST</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_NEVER_CORRUPT</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_OPTIMIZATIONS</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_PARSER_COVERAGE</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_PENDING_BYTE</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_PRNG_RESET</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_PRNG_RESTORE</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_PRNG_SAVE</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_PRNG_SEED</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_RESERVE</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_RESULT_INTREAL</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_SCRATCHMALLOC</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_SEEK_COUNT</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_SORTER_MMAP</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_TRACEFLAGS</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_TUNE</a> </li>
+<li> <a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_VDBE_COVERAGE</a> </li>
+<li> <a href="c3ref/c_blob.html">SQLITE_TEXT</a> </li>
+<li> <a href="compile.html#threadsafe">SQLITE_THREADSAFE</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_TOOBIG</a> </li>
+<li> <a href="c3ref/c_trace.html">SQLITE_TRACE</a> </li>
+<li> <a href="c3ref/c_trace.html#sqlitetraceclose">SQLITE_TRACE_CLOSE</a> </li>
+<li> <a href="c3ref/c_trace.html#sqlitetraceprofile">SQLITE_TRACE_PROFILE</a> </li>
+<li> <a href="c3ref/c_trace.html#sqlitetracerow">SQLITE_TRACE_ROW</a> </li>
+<li> <a href="compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> </li>
+<li> <a href="c3ref/c_trace.html#sqlitetracestmt">SQLITE_TRACE_STMT</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_TRANSACTION</a> </li>
+<li> <a href="c3ref/c_static.html">SQLITE_TRANSIENT</a> </li>
+<li> <a href="compile.html#trusted_schema">SQLITE_TRUSTED_SCHEMA</a> </li>
+<li> <a href="c3ref/c_txn_none.html#sqlitetxnnone">SQLITE_TXN_NONE</a> </li>
+<li> <a href="c3ref/c_txn_none.html#sqlitetxnread">SQLITE_TXN_READ</a> </li>
+<li> <a href="c3ref/c_txn_none.html#sqlitetxnwrite">SQLITE_TXN_WRITE</a> </li>
+<li> <a href="c3ref/int64.html">sqlite_uint64</a> </li>
+<li> <a href="compile.html#untestable">SQLITE_UNTESTABLE</a> </li>
+<li> <a href="c3ref/c_alter_table.html">SQLITE_UPDATE</a> </li>
+<li> <a href="compile.html#use_alloca">SQLITE_USE_ALLOCA</a> </li>
+<li> <a href="compile.html#use_fcntl_trace">SQLITE_USE_FCNTL_TRACE</a> </li>
+<li> <a href="compile.html#use_uri">SQLITE_USE_URI</a> </li>
+<li> <a href="c3ref/c_any.html">SQLITE_UTF16</a> </li>
+<li> <a href="c3ref/c_any.html">SQLITE_UTF16_ALIGNED</a> </li>
+<li> <a href="c3ref/c_any.html">SQLITE_UTF16BE</a> </li>
+<li> <a href="c3ref/c_any.html">SQLITE_UTF16LE</a> </li>
+<li> <a href="c3ref/c_any.html">SQLITE_UTF8</a> </li>
+<li> <a href="c3ref/c_source_id.html">SQLITE_VERSION</a> </li>
+<li> <a href="lang_corefunc.html#sqlite_version">sqlite_version() SQL function</a> </li>
+<li> <a href="c3ref/c_source_id.html">SQLITE_VERSION_NUMBER</a> </li>
+<li> <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabconstraintsupport">SQLITE_VTAB_CONSTRAINT_SUPPORT</a> </li>
+<li> <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">SQLITE_VTAB_DIRECTONLY</a> </li>
+<li> <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> </li>
+<li> <a href="c3ref/c_abort.html">SQLITE_WARNING</a> </li>
+<li> <a href="c3ref/c_abort_rollback.html">SQLITE_WARNING_AUTOINDEX</a> </li>
+<li> <a href="c3ref/c_win32_data_directory_type.html">SQLITE_WIN32_DATA_DIRECTORY_TYPE</a> </li>
+<li> <a href="compile.html#win32_heap_create">SQLITE_WIN32_HEAP_CREATE</a> </li>
+<li> <a href="compile.html#win32_malloc">SQLITE_WIN32_MALLOC</a> </li>
+<li> <a href="compile.html#win32_malloc_validate">SQLITE_WIN32_MALLOC_VALIDATE</a> </li>
+<li> <a href="c3ref/c_win32_data_directory_type.html">SQLITE_WIN32_TEMP_DIRECTORY_TYPE</a> </li>
+<li> <a href="compile.html#zero_malloc">SQLITE_ZERO_MALLOC</a> </li>
+<li> <a href="lang_mathfunc.html#sqrt">sqrt() SQL function</a> </li>
+<li> <a href="howtocorrupt.html#stalefd">stale file descriptor</a> </li>
+<li> <a href="uri.html#coreqp">standard query parameters</a> </li>
+<li> <a href="tempfiles.html#stmtjrnl">statement journal</a> </li>
+<li> <a href="pragma.html#pragma_stats">stats pragma</a> </li>
+<li> <a href="tclsqlite.html#status">status method</a> </li>
+<li> <a href="c3ref/c_status_malloc_count.html">status parameters</a> </li>
+<li> <a href="datatype3.html#storageclasses">storage class</a> </li>
+<li> <a href="queryplanner.html#searching">strategies</a> </li>
+<li> <a href="lang_datefunc.html">strftime() SQL function</a> </li>
+<li> <a href="stricttables.html">STRICT</a> </li>
+<li> <a href="stricttables.html">STRICT table</a> </li>
+<li> <a href="stricttables.html">strict type checking</a> </li>
+<li> <a href="opcode.html#subprog">subprograms</a> </li>
+<li> <a href="lang_expr.html#subq">Subqueries</a> </li>
+<li> <a href="optoverview.html#coroutines">subquery co-routines</a> </li>
+<li> <a href="lang_corefunc.html#substr">substr() SQL function</a> </li>
+<li> <a href="lang_aggfunc.html#sumunc">sum() aggregate function</a> </li>
+<li> <a href="tempfiles.html#superjrnl">super-journal</a> </li>
+<li> <a href="swarmvtab.html#overview">swarmvtab</a> </li>
+<li> <a href="swarmvtab.html#component_table_context_values">swarmvtab context</a> </li>
+<li> <a href="pragma.html#pragma_synchronous">synchronous pragma</a> </li>
+<li> <a href="syntaxdiagrams.html">syntax diagrams</a> </li>
+<li> <a href="fileformat2.html#btypes">table b-tree</a> </li>
+<li> <a href="fileformat2.html##sqltab">table data format</a> </li>
+<li> <a href="syntax/table-constraint.html">table-constraint</a> </li>
+<li> <a href="syntax/table-constraint.html">table-constraint syntax diagram</a> </li>
+<li> <a href="syntax/table-options.html">table-options</a> </li>
+<li> <a href="syntax/table-options.html">table-options syntax diagram</a> </li>
+<li> <a href="syntax/table-or-subquery.html">table-or-subquery</a> </li>
+<li> <a href="syntax/table-or-subquery.html">table-or-subquery syntax diagram</a> </li>
+<li> <a href="vtab.html#tabfunc2">table-valued function</a> </li>
+<li> <a href="lang_select.html#tabfunc1">table-valued functions in the FROM clause</a> </li>
+<li> <a href="pragma.html#pragma_table_info">table_info pragma</a> </li>
+<li> <a href="pragma.html#pragma_table_list">table_list pragma</a> </li>
+<li> <a href="pragma.html#pragma_table_xinfo">table_xinfo pragma</a> </li>
+<li> <a href="cli.html#dtables">.tables</a> </li>
+<li> <a href="bytecodevtab.html">tables_used virtual table</a> </li>
+<li> <a href="lang_mathfunc.html#tan">tan() SQL function</a> </li>
+<li> <a href="lang_mathfunc.html#tanh">tanh() SQL function</a> </li>
+<li> <a href="tclsqlite.html">Tcl extension</a> </li>
+<li> <a href="tclsqlite.html">TCL Interface</a> </li>
+<li> <a href="tclsqlite.html#authorizer">TCL interface authorizer method</a> </li>
+<li> <a href="tclsqlite.html#backup">TCL interface backup method</a> </li>
+<li> <a href="tclsqlite.html#bind_fallback">TCL interface bind_fallback method</a> </li>
+<li> <a href="tclsqlite.html#busy">TCL interface busy method</a> </li>
+<li> <a href="tclsqlite.html#cache">TCL interface cache method</a> </li>
+<li> <a href="tclsqlite.html#changes">TCL interface changes method</a> </li>
+<li> <a href="tclsqlite.html#close">TCL interface close method</a> </li>
+<li> <a href="tclsqlite.html#collate">TCL interface collate method</a> </li>
+<li> <a href="tclsqlite.html#collation_needed">TCL interface collation_needed method</a> </li>
+<li> <a href="tclsqlite.html#commit_hook">TCL interface commit_hook method</a> </li>
+<li> <a href="tclsqlite.html#complete">TCL interface complete method</a> </li>
+<li> <a href="tclsqlite.html#config">TCL interface config method</a> </li>
+<li> <a href="tclsqlite.html#copy">TCL interface copy method</a> </li>
+<li> <a href="tclsqlite.html#deserialize">TCL interface deserialize method</a> </li>
+<li> <a href="tclsqlite.html#enable_load_extension">TCL interface enable_load_extension method</a> </li>
+<li> <a href="tclsqlite.html#errorcode">TCL interface errorcode method</a> </li>
+<li> <a href="tclsqlite.html#eval">TCL interface eval method</a> </li>
+<li> <a href="tclsqlite.html#exists">TCL interface exists method</a> </li>
+<li> <a href="tclsqlite.html#function">TCL interface function method</a> </li>
+<li> <a href="tclsqlite.html#incrblob">TCL interface incrblob method</a> </li>
+<li> <a href="tclsqlite.html#interrupt">TCL interface interrupt method</a> </li>
+<li> <a href="tclsqlite.html#last_insert_rowid">TCL interface last_insert_rowid method</a> </li>
+<li> <a href="tclsqlite.html#nullvalue">TCL interface nullvalue method</a> </li>
+<li> <a href="tclsqlite.html#onecolumn">TCL interface onecolumn method</a> </li>
+<li> <a href="tclsqlite.html#profile">TCL interface profile method</a> </li>
+<li> <a href="tclsqlite.html#progress">TCL interface progress method</a> </li>
+<li> <a href="tclsqlite.html#restore">TCL interface restore method</a> </li>
+<li> <a href="tclsqlite.html#rollback_hook">TCL interface rollback_hook method</a> </li>
+<li> <a href="tclsqlite.html#serialize">TCL interface serialize method</a> </li>
+<li> <a href="tclsqlite.html#status">TCL interface status method</a> </li>
+<li> <a href="tclsqlite.html#timeout">TCL interface timeout method</a> </li>
+<li> <a href="tclsqlite.html#total_changes">TCL interface total_changes method</a> </li>
+<li> <a href="tclsqlite.html#trace">TCL interface trace method</a> </li>
+<li> <a href="tclsqlite.html#trace_v2">TCL interface trace_v2 method</a> </li>
+<li> <a href="tclsqlite.html#transaction">TCL interface transaction method</a> </li>
+<li> <a href="tclsqlite.html#unlock_notify">TCL interface unlock_notify method</a> </li>
+<li> <a href="tclsqlite.html#update_hook">TCL interface update_hook method</a> </li>
+<li> <a href="tclsqlite.html#version">TCL interface version method</a> </li>
+<li> <a href="tclsqlite.html#wal_hook">TCL interface wal_hook method</a> </li>
+<li> <a href="testing.html#tcl">TCL test suite</a> </li>
+<li> <a href="tclsqlite.html#varsubst">TCL variable substitution</a> </li>
+<li> <a href="download.html">TEA tarball</a> </li>
+<li> <a href="lang_createtrigger.html#temptrig">TEMP triggers on non-TEMP tables</a> </li>
+<li> <a href="pragma.html#pragma_temp_store">temp_store pragma</a> </li>
+<li> <a href="pragma.html#pragma_temp_store_directory">temp_store_directory pragma</a> </li>
+<li> <a href="inmemorydb.html#temp_db">temporary databases</a> </li>
+<li> <a href="tempfiles.html#tempdir">temporary directory search algorithm</a> </li>
+<li> <a href="tempfiles.html">temporary disk files</a> </li>
+<li> <a href="inmemorydb.html#temp_db">temporary tables</a> </li>
+<li> <a href="testing.html#coverage">test coverage</a> </li>
+<li> <a href="testing.html#harnesses">test harness</a> </li>
+<li> <a href="testing.html">test suite</a> </li>
+<li> <a href="testing.html#testcase">testcase macros</a> </li>
+<li> <a href="testing.html">testing</a> </li>
+<li> <a href="fileformat2.html#enc">text encoding</a> </li>
+<li> <a href="th3.html">TH3</a> </li>
+<li> <a href="json1.html#jptr">the -> and ->> operators</a> </li>
+<li> <a href="json1.html#jptr">the -> operator</a> </li>
+<li> <a href="cli.html#fullschema">the .fullschema dot-command</a> </li>
+<li> <a href="amalgamation.html">the amalgamation</a> </li>
+<li> <a href="lockingv3.html#ext3-barrier-problem">the ext3 barrier problem</a> </li>
+<li> <a href="queryplanner-ng.html#fossilcasestudy">The Fossil NGQP Upgrade Case Study</a> </li>
+<li> <a href="json1.html">the json1 extension</a> </li>
+<li> <a href="dbpage.html">the SQLITE_DBPAGE extension</a> </li>
+<li> <a href="memstat.html">the SQLITE_MEMSTAT extension</a> </li>
+<li> <a href="stmt.html">the SQLITE_STMT extension</a> </li>
+<li> <a href="assert.html">The Use Of assert() In SQLite</a> </li>
+<li> <a href="c3ref/pcache_methods2.html#thexcachesizepagecachemethod">the xCachesize() page cache method</a> </li>
+<li> <a href="c3ref/pcache_methods2.html#thexcreatepagecachemethods">the xCreate() page cache methods</a> </li>
+<li> <a href="c3ref/pcache_methods2.html#thexdestroypagecachemethod">the xDestroy() page cache method</a> </li>
+<li> <a href="c3ref/pcache_methods2.html#thexfetchpagecachemethods">the xFetch() page cache methods</a> </li>
+<li> <a href="c3ref/pcache_methods2.html#thexinitpagecachemethod">the xInit() page cache method</a> </li>
+<li> <a href="c3ref/pcache_methods2.html#thexpagecountpagecachemethods">the xPagecount() page cache methods</a> </li>
+<li> <a href="c3ref/pcache_methods2.html#thexrekeypagecachemethods">the xRekey() page cache methods</a> </li>
+<li> <a href="c3ref/pcache_methods2.html#thexshrinkpagecachemethod">the xShrink() page cache method</a> </li>
+<li> <a href="c3ref/pcache_methods2.html#thexshutdownpagecachemethod">the xShutdown() page cache method</a> </li>
+<li> <a href="c3ref/pcache_methods2.html#thexunpinpagecachemethod">the xUnpin() page cache method</a> </li>
+<li> <a href="atomiccommit.html#sect_9_0">Things That Can Go Wrong</a> </li>
+<li> <a href="threadsafe.html">threading mode</a> </li>
+<li> <a href="pragma.html#pragma_threads">threads pragma</a> </li>
+<li> <a href="testing.html#harnesses">three test harnesses</a> </li>
+<li> <a href="lang_datefunc.html">time() SQL function</a> </li>
+<li> <a href="tclsqlite.html#timeout">timeout method</a> </li>
+<li> <a href="fts3.html#tokenizer">tokenizer</a> </li>
+<li> <a href="psow.html#tornpage">torn page</a> </li>
+<li> <a href="lang_aggfunc.html#sumunc">total() aggregate function</a> </li>
+<li> <a href="tclsqlite.html#total_changes">total_changes method</a> </li>
+<li> <a href="lang_corefunc.html#total_changes">total_changes() SQL function</a> </li>
+<li> <a href="tclsqlite.html#trace">trace method</a> </li>
+<li> <a href="tclsqlite.html#trace_v2">trace_v2 method</a> </li>
+<li> <a href="lang_transaction.html">transaction</a> </li>
+<li> <a href="tclsqlite.html#transaction">transaction method</a> </li>
+<li> <a href="c3ref/c_txn_none.html">transaction state</a> </li>
+<li> <a href="transactional.html">transactional</a> </li>
+<li> <a href="lang_select.html#crossjoin">treats the CROSS JOIN operator specially</a> </li>
+<li> <a href="lang_createtrigger.html">trigger</a> </li>
+<li> <a href="fts5.html#trigramidx">trigram indexes</a> </li>
+<li> <a href="fts5.html#trigramidx">trigram tokenizer</a> </li>
+<li> <a href="lang_corefunc.html#trim">trim() SQL function</a> </li>
+<li> <a href="lang_mathfunc.html#trunc">trunc() SQL function</a> </li>
+<li> <a href="lang_delete.html#truncateopt">truncate optimization</a> </li>
+<li> <a href="pragma.html#pragma_trusted_schema">trusted_schema pragma</a> </li>
+<li> <a href="datatype3.html#affinity">type affinity</a> </li>
+<li> <a href="syntax/type-name.html">type-name</a> </li>
+<li> <a href="syntax/type-name.html">type-name syntax diagram</a> </li>
+<li> <a href="lang_corefunc.html#typeof">typeof() SQL function</a> </li>
+<li> <a href="uintcseq.html">UINT</a> </li>
+<li> <a href="uintcseq.html">UINT collating sequence</a> </li>
+<li> <a href="lang_createtrigger.html#undef_before">undefined BEFORE trigger behavior</a> </li>
+<li> <a href="undoredo.html">undo/redo</a> </li>
+<li> <a href="lang_corefunc.html#unicode">unicode() SQL function</a> </li>
+<li> <a href="fts3.html#unicode61">unicode61</a> </li>
+<li> <a href="uri.html">Uniform Resource Identifier</a> </li>
+<li> <a href="fts5.html#the_unindexed_column_option">unindexed</a> </li>
+<li> <a href="unionvtab.html">UNION virtual table</a> </li>
+<li> <a href="unionvtab.html">union-vtab</a> </li>
+<li> <a href="unionvtab.html">unionvtab</a> </li>
+<li> <a href="lang_createtable.html#uniqueconst">UNIQUE</a> </li>
+<li> <a href="lang_createtable.html#uniqueconst">unique constraint</a> </li>
+<li> <a href="lang_createindex.html#uniqueidx">unique index</a> </li>
+<li> <a href="lang_datefunc.html#uepch">unixepoch() function</a> </li>
+<li> <a href="lang_corefunc.html#unlikely">unlikely() SQL function</a> </li>
+<li> <a href="howtocorrupt.html#unlink">unlink corruption</a> </li>
+<li> <a href="howtocorrupt.html#unlink">unlinked database files</a> </li>
+<li> <a href="tclsqlite.html#unlock_notify">unlock_notify method</a> </li>
+<li> <a href="c3ref/value.html">unprotected sqlite3_value</a> </li>
+<li> <a href="security.html#baddb">untrusted database files</a> </li>
+<li> <a href="lang_update.html">UPDATE</a> </li>
+<li> <a href="lang_update.html#upfrom">UPDATE FROM</a> </li>
+<li> <a href="cli.html#arinsup">--update option</a> </li>
+<li> <a href="lang_createtrigger.html">UPDATE trigger</a> </li>
+<li> <a href="syntax/update-stmt.html">update-stmt</a> </li>
+<li> <a href="syntax/update-stmt.html">update-stmt syntax diagram</a> </li>
+<li> <a href="syntax/update-stmt-limited.html">update-stmt-limited</a> </li>
+<li> <a href="syntax/update-stmt-limited.html">update-stmt-limited syntax diagram</a> </li>
+<li> <a href="tclsqlite.html#update_hook">update_hook method</a> </li>
+<li> <a href="lang_corefunc.html#upper">upper() SQL function</a> </li>
+<li> <a href="lang_upsert.html">upsert clause</a> </li>
+<li> <a href="lang_upsert.html#parseambig">UPSERT parsing ambiguity</a> </li>
+<li> <a href="syntax/upsert-clause.html">upsert-clause</a> </li>
+<li> <a href="syntax/upsert-clause.html">upsert-clause syntax diagram</a> </li>
+<li> <a href="uri.html">URI</a> </li>
+<li> <a href="uri.html">URI filename</a> </li>
+<li> <a href="c3ref/open.html#urifilenameexamples">URI filename examples</a> </li>
+<li> <a href="c3ref/open.html#urifilenamesinsqlite3open">URI filenames in sqlite3_open()</a> </li>
+<li> <a href="uri.html#coreqp">URI query parameters</a> </li>
+<li> <a href="fileformat2.html#usable_size">usable size</a> </li>
+<li> <a href="sharedcache.html#dontuse">use of shared cache mode is discouraged</a> </li>
+<li> <a href="windowfunctions.html#udfwinfunc">user-defined window functions</a> </li>
+<li> <a href="pragma.html#pragma_user_version">user_version pragma</a> </li>
+<li> <a href="whentouse.html#website">using SQLite for websites</a> </li>
+<li> <a href="backup.html">Using the SQLite Online Backup API</a> </li>
+<li> <a href="unlock_notify.html">Using the SQLite Unlock Notification Feature</a> </li>
+<li> <a href="lang_datefunc.html#localtime">'utc' modifier</a> </li>
+<li> <a href="lang_vacuum.html">vacuum</a> </li>
+<li> <a href="lang_vacuum.html#vacuuminto">VACUUM INTO</a> </li>
+<li> <a href="syntax/vacuum-stmt.html">vacuum-stmt</a> </li>
+<li> <a href="syntax/vacuum-stmt.html">vacuum-stmt syntax diagram</a> </li>
+<li> <a href="json1.html#varg">value argument</a> </li>
+<li> <a href="lang_select.html#values">VALUES</a> </li>
+<li> <a href="lang_select.html#values">VALUES clause</a> </li>
+<li> <a href="fileformat2.html#varint">variable-length integer</a> </li>
+<li> <a href="fileformat2.html#varint">varint</a> </li>
+<li> <a href="opcode.html">VDBE</a> </li>
+<li> <a href="pragma.html#pragma_vdbe_addoptrace">vdbe_addoptrace pragma</a> </li>
+<li> <a href="pragma.html#pragma_vdbe_debug">vdbe_debug pragma</a> </li>
+<li> <a href="pragma.html#pragma_vdbe_listing">vdbe_listing pragma</a> </li>
+<li> <a href="pragma.html#pragma_vdbe_trace">vdbe_trace pragma</a> </li>
+<li> <a href="rowvalue.html">vectors</a> </li>
+<li> <a href="releaselog/3_0_0.html">Version 3.0.0</a> </li>
+<li> <a href="releaselog/3_0_1.html">Version 3.0.1</a> </li>
+<li> <a href="releaselog/3_0_2.html">Version 3.0.2</a> </li>
+<li> <a href="releaselog/3_0_3.html">Version 3.0.3</a> </li>
+<li> <a href="releaselog/3_0_4.html">Version 3.0.4</a> </li>
+<li> <a href="releaselog/3_0_5.html">Version 3.0.5</a> </li>
+<li> <a href="releaselog/3_0_6.html">Version 3.0.6</a> </li>
+<li> <a href="releaselog/3_0_7.html">Version 3.0.7</a> </li>
+<li> <a href="releaselog/3_0_8.html">Version 3.0.8</a> </li>
+<li> <a href="releaselog/3_1_0.html">Version 3.1.0</a> </li>
+<li> <a href="releaselog/3_1_1.html">Version 3.1.1</a> </li>
+<li> <a href="releaselog/3_1_2.html">Version 3.1.2</a> </li>
+<li> <a href="releaselog/3_1_3.html">Version 3.1.3</a> </li>
+<li> <a href="releaselog/3_1_4.html">Version 3.1.4</a> </li>
+<li> <a href="releaselog/3_1_5.html">Version 3.1.5</a> </li>
+<li> <a href="releaselog/3_1_6.html">Version 3.1.6</a> </li>
+<li> <a href="releaselog/3_10_0.html">Version 3.10.0</a> </li>
+<li> <a href="releaselog/3_10_1.html">Version 3.10.1</a> </li>
+<li> <a href="releaselog/3_10_2.html">Version 3.10.2</a> </li>
+<li> <a href="releaselog/3_11_0.html">Version 3.11.0</a> </li>
+<li> <a href="releaselog/3_11_1.html">Version 3.11.1</a> </li>
+<li> <a href="releaselog/3_12_0.html">Version 3.12.0</a> </li>
+<li> <a href="pgszchng2016.html">version 3.12.0 page size change</a> </li>
+<li> <a href="releaselog/3_12_1.html">Version 3.12.1</a> </li>
+<li> <a href="releaselog/3_12_2.html">Version 3.12.2</a> </li>
+<li> <a href="releaselog/3_13_0.html">Version 3.13.0</a> </li>
+<li> <a href="releaselog/3_13_0.html">Version 3.13.0.0</a> </li>
+<li> <a href="releaselog/3_14.html">Version 3.14</a> </li>
+<li> <a href="releaselog/3_14.html">Version 3.14.0</a> </li>
+<li> <a href="releaselog/3_14_1.html">Version 3.14.1</a> </li>
+<li> <a href="releaselog/3_14_2.html">Version 3.14.2</a> </li>
+<li> <a href="releaselog/3_15_0.html">Version 3.15.0</a> </li>
+<li> <a href="releaselog/3_15_1.html">Version 3.15.1</a> </li>
+<li> <a href="releaselog/3_15_2.html">Version 3.15.2</a> </li>
+<li> <a href="releaselog/3_16_0.html">Version 3.16.0</a> </li>
+<li> <a href="releaselog/3_16_1.html">Version 3.16.1</a> </li>
+<li> <a href="releaselog/3_16_2.html">Version 3.16.2</a> </li>
+<li> <a href="releaselog/3_17_0.html">Version 3.17.0</a> </li>
+<li> <a href="releaselog/3_18_0.html">Version 3.18.0</a> </li>
+<li> <a href="releaselog/3_18_1.html">Version 3.18.1</a> </li>
+<li> <a href="releaselog/3_18_2.html">Version 3.18.2</a> </li>
+<li> <a href="releaselog/3_19_0.html">Version 3.19.0</a> </li>
+<li> <a href="releaselog/3_19_1.html">Version 3.19.1</a> </li>
+<li> <a href="releaselog/3_19_2.html">Version 3.19.2</a> </li>
+<li> <a href="releaselog/3_19_3.html">Version 3.19.3</a> </li>
+<li> <a href="releaselog/3_2_0.html">Version 3.2.0</a> </li>
+<li> <a href="releaselog/3_2_1.html">Version 3.2.1</a> </li>
+<li> <a href="releaselog/3_2_2.html">Version 3.2.2</a> </li>
+<li> <a href="releaselog/3_2_3.html">Version 3.2.3</a> </li>
+<li> <a href="releaselog/3_2_4.html">Version 3.2.4</a> </li>
+<li> <a href="releaselog/3_2_5.html">Version 3.2.5</a> </li>
+<li> <a href="releaselog/3_2_6.html">Version 3.2.6</a> </li>
+<li> <a href="releaselog/3_2_7.html">Version 3.2.7</a> </li>
+<li> <a href="releaselog/3_2_8.html">Version 3.2.8</a> </li>
+<li> <a href="releaselog/3_20_0.html">Version 3.20.0</a> </li>
+<li> <a href="releaselog/3_20_1.html">Version 3.20.1</a> </li>
+<li> <a href="releaselog/3_21_0.html">Version 3.21.0</a> </li>
+<li> <a href="releaselog/3_22_0.html">Version 3.22.0</a> </li>
+<li> <a href="releaselog/3_23_0.html">Version 3.23.0</a> </li>
+<li> <a href="releaselog/3_23_0.html">Version 3.23.0.0</a> </li>
+<li> <a href="releaselog/3_23_1.html">Version 3.23.1</a> </li>
+<li> <a href="releaselog/3_23_1.html">Version 3.23.1.0</a> </li>
+<li> <a href="releaselog/3_24_0.html">Version 3.24.0</a> </li>
+<li> <a href="releaselog/3_25_0.html">Version 3.25.0</a> </li>
+<li> <a href="releaselog/3_25_1.html">Version 3.25.1</a> </li>
+<li> <a href="releaselog/3_25_2.html">Version 3.25.2</a> </li>
+<li> <a href="releaselog/3_25_3.html">Version 3.25.3</a> </li>
+<li> <a href="releaselog/3_26_0.html">Version 3.26.0</a> </li>
+<li> <a href="releaselog/3_27_0.html">Version 3.27.0</a> </li>
+<li> <a href="releaselog/3_27_1.html">Version 3.27.1</a> </li>
+<li> <a href="releaselog/3_27_2.html">Version 3.27.2</a> </li>
+<li> <a href="releaselog/3_28_0.html">Version 3.28.0</a> </li>
+<li> <a href="releaselog/3_29_0.html">Version 3.29.0</a> </li>
+<li> <a href="releaselog/3_3_0.html">Version 3.3.0</a> </li>
+<li> <a href="releaselog/3_3_0.html">Version 3.3.0.0</a> </li>
+<li> <a href="releaselog/3_3_1.html">Version 3.3.1</a> </li>
+<li> <a href="releaselog/3_3_1.html">Version 3.3.1.0</a> </li>
+<li> <a href="releaselog/3_3_10.html">Version 3.3.10</a> </li>
+<li> <a href="releaselog/3_3_10.html">Version 3.3.10.0</a> </li>
+<li> <a href="releaselog/3_3_11.html">Version 3.3.11</a> </li>
+<li> <a href="releaselog/3_3_11.html">Version 3.3.11.0</a> </li>
+<li> <a href="releaselog/3_3_12.html">Version 3.3.12</a> </li>
+<li> <a href="releaselog/3_3_12.html">Version 3.3.12.0</a> </li>
+<li> <a href="releaselog/3_3_13.html">Version 3.3.13</a> </li>
+<li> <a href="releaselog/3_3_13.html">Version 3.3.13.0</a> </li>
+<li> <a href="releaselog/3_3_14.html">Version 3.3.14</a> </li>
+<li> <a href="releaselog/3_3_14.html">Version 3.3.14.0</a> </li>
+<li> <a href="releaselog/3_3_15.html">Version 3.3.15</a> </li>
+<li> <a href="releaselog/3_3_15.html">Version 3.3.15.0</a> </li>
+<li> <a href="releaselog/3_3_16.html">Version 3.3.16</a> </li>
+<li> <a href="releaselog/3_3_16.html">Version 3.3.16.0</a> </li>
+<li> <a href="releaselog/3_3_17.html">Version 3.3.17</a> </li>
+<li> <a href="releaselog/3_3_17.html">Version 3.3.17.0</a> </li>
+<li> <a href="releaselog/3_3_2.html">Version 3.3.2</a> </li>
+<li> <a href="releaselog/3_3_2.html">Version 3.3.2.0</a> </li>
+<li> <a href="releaselog/3_3_3.html">Version 3.3.3</a> </li>
+<li> <a href="releaselog/3_3_3.html">Version 3.3.3.0</a> </li>
+<li> <a href="releaselog/3_3_4.html">Version 3.3.4</a> </li>
+<li> <a href="releaselog/3_3_4.html">Version 3.3.4.0</a> </li>
+<li> <a href="releaselog/3_3_5.html">Version 3.3.5</a> </li>
+<li> <a href="releaselog/3_3_5.html">Version 3.3.5.0</a> </li>
+<li> <a href="releaselog/3_3_6.html">Version 3.3.6</a> </li>
+<li> <a href="releaselog/3_3_6.html">Version 3.3.6.0</a> </li>
+<li> <a href="releaselog/3_3_7.html">Version 3.3.7</a> </li>
+<li> <a href="releaselog/3_3_7.html">Version 3.3.7.0</a> </li>
+<li> <a href="releaselog/3_3_8.html">Version 3.3.8</a> </li>
+<li> <a href="releaselog/3_3_8.html">Version 3.3.8.0</a> </li>
+<li> <a href="releaselog/3_3_9.html">Version 3.3.9</a> </li>
+<li> <a href="releaselog/3_3_9.html">Version 3.3.9.0</a> </li>
+<li> <a href="releaselog/3_30_0.html">Version 3.30.0</a> </li>
+<li> <a href="releaselog/3_30_1.html">Version 3.30.1</a> </li>
+<li> <a href="releaselog/3_31_0.html">Version 3.31.0</a> </li>
+<li> <a href="releaselog/3_31_1.html">Version 3.31.1</a> </li>
+<li> <a href="releaselog/3_32_0.html">Version 3.32.0</a> </li>
+<li> <a href="releaselog/3_32_1.html">Version 3.32.1</a> </li>
+<li> <a href="releaselog/3_32_2.html">Version 3.32.2</a> </li>
+<li> <a href="releaselog/3_32_3.html">Version 3.32.3</a> </li>
+<li> <a href="releaselog/3_33_0.html">Version 3.33.0</a> </li>
+<li> <a href="releaselog/3_33_0.html">Version 3.33.0.0</a> </li>
+<li> <a href="releaselog/3_34_0.html">Version 3.34.0</a> </li>
+<li> <a href="releaselog/3_34_1.html">Version 3.34.1</a> </li>
+<li> <a href="releaselog/3_35_0.html">Version 3.35.0</a> </li>
+<li> <a href="releaselog/3_35_1.html">Version 3.35.1</a> </li>
+<li> <a href="releaselog/3_35_2.html">Version 3.35.2</a> </li>
+<li> <a href="releaselog/3_35_3.html">Version 3.35.3</a> </li>
+<li> <a href="releaselog/3_35_4.html">Version 3.35.4</a> </li>
+<li> <a href="releaselog/3_35_5.html">Version 3.35.5</a> </li>
+<li> <a href="releaselog/3_36_0.html">Version 3.36.0</a> </li>
+<li> <a href="releaselog/3_37_0.html">Version 3.37.0</a> </li>
+<li> <a href="releaselog/3_37_1.html">Version 3.37.1</a> </li>
+<li> <a href="releaselog/3_37_2.html">Version 3.37.2</a> </li>
+<li> <a href="releaselog/3_38_0.html">Version 3.38.0</a> </li>
+<li> <a href="releaselog/3_38_1.html">Version 3.38.1</a> </li>
+<li> <a href="releaselog/3_38_2.html">Version 3.38.2</a> </li>
+<li> <a href="releaselog/3_38_3.html">Version 3.38.3</a> </li>
+<li> <a href="releaselog/3_38_4.html">Version 3.38.4</a> </li>
+<li> <a href="releaselog/3_38_5.html">Version 3.38.5</a> </li>
+<li> <a href="releaselog/3_39_0.html">Version 3.39.0</a> </li>
+<li> <a href="releaselog/3_39_1.html">Version 3.39.1</a> </li>
+<li> <a href="releaselog/3_39_2.html">Version 3.39.2</a> </li>
+<li> <a href="releaselog/3_39_3.html">Version 3.39.3</a> </li>
+<li> <a href="releaselog/3_39_4.html">Version 3.39.4</a> </li>
+<li> <a href="releaselog/3_4_0.html">Version 3.4.0</a> </li>
+<li> <a href="releaselog/3_4_1.html">Version 3.4.1</a> </li>
+<li> <a href="releaselog/3_4_2.html">Version 3.4.2</a> </li>
+<li> <a href="releaselog/3_40_0.html">Version 3.40.0</a> </li>
+<li> <a href="releaselog/3_40_1.html">Version 3.40.1</a> </li>
+<li> <a href="releaselog/3_5_0.html">Version 3.5.0</a> </li>
+<li> <a href="releaselog/3_5_1.html">Version 3.5.1</a> </li>
+<li> <a href="releaselog/3_5_2.html">Version 3.5.2</a> </li>
+<li> <a href="releaselog/3_5_3.html">Version 3.5.3</a> </li>
+<li> <a href="releaselog/3_5_4.html">Version 3.5.4</a> </li>
+<li> <a href="releaselog/3_5_5.html">Version 3.5.5</a> </li>
+<li> <a href="releaselog/3_5_6.html">Version 3.5.6</a> </li>
+<li> <a href="releaselog/3_5_7.html">Version 3.5.7</a> </li>
+<li> <a href="releaselog/3_5_8.html">Version 3.5.8</a> </li>
+<li> <a href="releaselog/3_5_9.html">Version 3.5.9</a> </li>
+<li> <a href="releaselog/3_6_0.html">Version 3.6.0</a> </li>
+<li> <a href="releaselog/3_6_1.html">Version 3.6.1</a> </li>
+<li> <a href="releaselog/3_6_10.html">Version 3.6.10</a> </li>
+<li> <a href="releaselog/3_6_11.html">Version 3.6.11</a> </li>
+<li> <a href="releaselog/3_6_12.html">Version 3.6.12</a> </li>
+<li> <a href="releaselog/3_6_13.html">Version 3.6.13</a> </li>
+<li> <a href="releaselog/3_6_14.html">Version 3.6.14</a> </li>
+<li> <a href="releaselog/3_6_14_1.html">Version 3.6.14.1</a> </li>
+<li> <a href="releaselog/3_6_14_2.html">Version 3.6.14.2</a> </li>
+<li> <a href="releaselog/3_6_15.html">Version 3.6.15</a> </li>
+<li> <a href="releaselog/3_6_16.html">Version 3.6.16</a> </li>
+<li> <a href="releaselog/3_6_16_1.html">Version 3.6.16.1</a> </li>
+<li> <a href="releaselog/3_6_17.html">Version 3.6.17</a> </li>
+<li> <a href="releaselog/3_6_18.html">Version 3.6.18</a> </li>
+<li> <a href="releaselog/3_6_19.html">Version 3.6.19</a> </li>
+<li> <a href="releaselog/3_6_2.html">Version 3.6.2</a> </li>
+<li> <a href="releaselog/3_6_20.html">Version 3.6.20</a> </li>
+<li> <a href="releaselog/3_6_21.html">Version 3.6.21</a> </li>
+<li> <a href="releaselog/3_6_22.html">Version 3.6.22</a> </li>
+<li> <a href="releaselog/3_6_23.html">Version 3.6.23</a> </li>
+<li> <a href="releaselog/3_6_23_1.html">Version 3.6.23.1</a> </li>
+<li> <a href="releaselog/3_6_23_1.html">Version 3.6.23.1.0</a> </li>
+<li> <a href="releaselog/3_6_3.html">Version 3.6.3</a> </li>
+<li> <a href="releaselog/3_6_4.html">Version 3.6.4</a> </li>
+<li> <a href="releaselog/3_6_5.html">Version 3.6.5</a> </li>
+<li> <a href="releaselog/3_6_6.html">Version 3.6.6</a> </li>
+<li> <a href="releaselog/3_6_6_1.html">Version 3.6.6.1</a> </li>
+<li> <a href="releaselog/3_6_6_2.html">Version 3.6.6.2</a> </li>
+<li> <a href="releaselog/3_6_7.html">Version 3.6.7</a> </li>
+<li> <a href="releaselog/3_6_8.html">Version 3.6.8</a> </li>
+<li> <a href="releaselog/3_6_9.html">Version 3.6.9</a> </li>
+<li> <a href="releaselog/3_7_0.html">Version 3.7.0</a> </li>
+<li> <a href="releaselog/3_7_0_1.html">Version 3.7.0.1</a> </li>
+<li> <a href="releaselog/3_7_1.html">Version 3.7.1</a> </li>
+<li> <a href="releaselog/3_7_10.html">Version 3.7.10</a> </li>
+<li> <a href="releaselog/3_7_11.html">Version 3.7.11</a> </li>
+<li> <a href="releaselog/3_7_12.html">Version 3.7.12</a> </li>
+<li> <a href="releaselog/3_7_12_1.html">Version 3.7.12.1</a> </li>
+<li> <a href="releaselog/3_7_13.html">Version 3.7.13</a> </li>
+<li> <a href="releaselog/3_7_14.html">Version 3.7.14</a> </li>
+<li> <a href="releaselog/3_7_14_1.html">Version 3.7.14.1</a> </li>
+<li> <a href="releaselog/3_7_15.html">Version 3.7.15</a> </li>
+<li> <a href="releaselog/3_7_15_1.html">Version 3.7.15.1</a> </li>
+<li> <a href="releaselog/3_7_15_2.html">Version 3.7.15.2</a> </li>
+<li> <a href="releaselog/3_7_16.html">Version 3.7.16</a> </li>
+<li> <a href="releaselog/3_7_16_1.html">Version 3.7.16.1</a> </li>
+<li> <a href="releaselog/3_7_16_2.html">Version 3.7.16.2</a> </li>
+<li> <a href="releaselog/3_7_17.html">Version 3.7.17</a> </li>
+<li> <a href="releaselog/3_7_2.html">Version 3.7.2</a> </li>
+<li> <a href="releaselog/3_7_3.html">Version 3.7.3</a> </li>
+<li> <a href="releaselog/3_7_4.html">Version 3.7.4</a> </li>
+<li> <a href="releaselog/3_7_5.html">Version 3.7.5</a> </li>
+<li> <a href="releaselog/3_7_6.html">Version 3.7.6</a> </li>
+<li> <a href="releaselog/3_7_6_1.html">Version 3.7.6.1</a> </li>
+<li> <a href="releaselog/3_7_6_2.html">Version 3.7.6.2</a> </li>
+<li> <a href="releaselog/3_7_6_3.html">Version 3.7.6.3</a> </li>
+<li> <a href="releaselog/3_7_7.html">Version 3.7.7</a> </li>
+<li> <a href="releaselog/3_7_7_1.html">Version 3.7.7.1</a> </li>
+<li> <a href="releaselog/3_7_8.html">Version 3.7.8</a> </li>
+<li> <a href="releaselog/3_7_9.html">Version 3.7.9</a> </li>
+<li> <a href="releaselog/3_8_0.html">Version 3.8.0</a> </li>
+<li> <a href="releaselog/3_8_0_1.html">Version 3.8.0.1</a> </li>
+<li> <a href="releaselog/3_8_0_2.html">Version 3.8.0.2</a> </li>
+<li> <a href="releaselog/3_8_1.html">Version 3.8.1</a> </li>
+<li> <a href="releaselog/3_8_10.html">Version 3.8.10</a> </li>
+<li> <a href="releaselog/3_8_10_1.html">Version 3.8.10.1</a> </li>
+<li> <a href="releaselog/3_8_10_2.html">Version 3.8.10.2</a> </li>
+<li> <a href="releaselog/3_8_11.html">Version 3.8.11</a> </li>
+<li> <a href="releaselog/3_8_11_1.html">Version 3.8.11.1</a> </li>
+<li> <a href="releaselog/3_8_2.html">Version 3.8.2</a> </li>
+<li> <a href="releaselog/3_8_3.html">Version 3.8.3</a> </li>
+<li> <a href="releaselog/3_8_3_1.html">Version 3.8.3.1</a> </li>
+<li> <a href="releaselog/3_8_3_1.html">Version 3.8.3.1.0</a> </li>
+<li> <a href="releaselog/3_8_4.html">Version 3.8.4</a> </li>
+<li> <a href="releaselog/3_8_4_1.html">Version 3.8.4.1</a> </li>
+<li> <a href="releaselog/3_8_4_2.html">Version 3.8.4.2</a> </li>
+<li> <a href="releaselog/3_8_4_3.html">Version 3.8.4.3</a> </li>
+<li> <a href="releaselog/3_8_5.html">Version 3.8.5</a> </li>
+<li> <a href="releaselog/3_8_6.html">Version 3.8.6</a> </li>
+<li> <a href="releaselog/3_8_7.html">Version 3.8.7</a> </li>
+<li> <a href="releaselog/3_8_7_1.html">Version 3.8.7.1</a> </li>
+<li> <a href="releaselog/3_8_7_2.html">Version 3.8.7.2</a> </li>
+<li> <a href="releaselog/3_8_7_3.html">Version 3.8.7.3</a> </li>
+<li> <a href="releaselog/3_8_7_4.html">Version 3.8.7.4</a> </li>
+<li> <a href="releaselog/3_8_8.html">Version 3.8.8</a> </li>
+<li> <a href="releaselog/3_8_8_1.html">Version 3.8.8.1</a> </li>
+<li> <a href="releaselog/3_8_8_2.html">Version 3.8.8.2</a> </li>
+<li> <a href="releaselog/3_8_8_3.html">Version 3.8.8.3</a> </li>
+<li> <a href="releaselog/3_8_9.html">Version 3.8.9</a> </li>
+<li> <a href="releaselog/3_9_0.html">Version 3.9.0</a> </li>
+<li> <a href="releaselog/3_9_1.html">Version 3.9.1</a> </li>
+<li> <a href="releaselog/3_9_2.html">Version 3.9.2</a> </li>
+<li> <a href="releaselog/3_9_3.html">Version 3.9.3</a> </li>
+<li> <a href="tclsqlite.html#version">version method</a> </li>
+<li> <a href="versionnumbers.html">version numbering conventions</a> </li>
+<li> <a href="fileformat2.html#validfor">version-valid-for number</a> </li>
+<li> <a href="vfs.html">VFS</a> </li>
+<li> <a href="vfs.html#shim">VFS shim</a> </li>
+<li> <a href="uri.html#urivfs">"vfs" query parameter</a> </li>
+<li> <a href="vfs.html">VFSes</a> </li>
+<li> <a href="lang_createview.html">view</a> </li>
+<li> <a href="opcode.html">virtual machine</a> </li>
+<li> <a href="opcode.html">virtual machine instructions</a> </li>
+<li> <a href="vtab.html">virtual table</a> </li>
+<li> <a href="c3ref/c_vtab_constraint_support.html">virtual table configuration option</a> </li>
+<li> <a href="c3ref/vtab_cursor.html">virtual table cursor</a> </li>
+<li> <a href="vtablist.html">virtual table list</a> </li>
+<li> <a href="c3ref/module.html">virtual table module</a> </li>
+<li> <a href="cves.html">vulnerabilities</a> </li>
+<li> <a href="wal.html">WAL</a> </li>
+<li> <a href="wal.html#bkwrds">WAL backwards compatibility</a> </li>
+<li> <a href="fileformat2.html#walcksm">WAL checksum algorithm</a> </li>
+<li> <a href="wal.html#concurrency">WAL concurrency</a> </li>
+<li> <a href="wal.html#walfile">WAL file</a> </li>
+<li> <a href="fileformat2.html#walformat">WAL file format</a> </li>
+<li> <a href="fileformat2.html#walformat">WAL format</a> </li>
+<li> <a href="wal.html">WAL mode</a> </li>
+<li> <a href="fileformat2.html#walread">WAL read algorithm</a> </li>
+<li> <a href="fileformat2.html#walreset">WAL reset</a> </li>
+<li> <a href="wal.html#noshm">WAL without shared memory</a> </li>
+<li> <a href="walformat.html#shm">wal-index</a> </li>
+<li> <a href="walformat.html#walidxfmt">WAL-index File Format</a> </li>
+<li> <a href="walformat.html#walidxfmt">WAL-index format</a> </li>
+<li> <a href="walformat.html#recovery">WAL-mode crash recovery</a> </li>
+<li> <a href="walformat.html">WAL-mode File Format</a> </li>
+<li> <a href="walformat.html#locks">WAL-mode locks</a> </li>
+<li> <a href="wal.html#busy">WAL-mode read blocking</a> </li>
+<li> <a href="pragma.html#pragma_wal_autocheckpoint">wal_autocheckpoint pragma</a> </li>
+<li> <a href="pragma.html#pragma_wal_checkpoint">wal_checkpoint pragma</a> </li>
+<li> <a href="tclsqlite.html#wal_hook">wal_hook method</a> </li>
+<li> <a href="copyright.html#warrantyoftitle">Warranty of Title</a> </li>
+<li> <a href="affcase1.html">What If OpenOffice Used SQLite</a> </li>
+<li> <a href="withoutrowid.html#wtu">when to use WITHOUT ROWID</a> </li>
+<li> <a href="lang_select.html#whereclause">WHERE clause</a> </li>
+<li> <a href="lang_altertable.html#altertableishard">why ALTER TABLE is so difficult</a> </li>
+<li> <a href="malloc.html#win32heap">Win32 native memory allocator</a> </li>
+<li> <a href="windowfunctions.html#wchaining">window chaining</a> </li>
+<li> <a href="windowfunctions.html">window function</a> </li>
+<li> <a href="syntax/window-defn.html">window-defn</a> </li>
+<li> <a href="syntax/window-defn.html">window-defn syntax diagram</a> </li>
+<li> <a href="syntax/window-function-invocation.html">window-function-invocation</a> </li>
+<li> <a href="syntax/window-function-invocation.html">window-function-invocation syntax diagram</a> </li>
+<li> <a href="lang_with.html">WITH clause</a> </li>
+<li> <a href="syntax/with-clause.html">with-clause</a> </li>
+<li> <a href="syntax/with-clause.html">with-clause syntax diagram</a> </li>
+<li> <a href="withoutrowid.html">WITHOUT rowid</a> </li>
+<li> <a href="vtab.html#worid">WITHOUT ROWID virtual table</a> </li>
+<li> <a href="cli.html#wrap1">wrapping text</a> </li>
+<li> <a href="pragma.html#pragma_writable_schema">writable_schema pragma</a> </li>
+<li> <a href="wal.html">write-ahead log</a> </li>
+<li> <a href="lockingv3.html#writer_starvation">writer starvation</a> </li>
+<li> <a href="vtab.html#xBegin">xBegin</a> </li>
+<li> <a href="vtab.html#xbestindex">xBestIndex</a> </li>
+<li> <a href="vtab.html#xcolumn">xColumn</a> </li>
+<li> <a href="vtab.html#xcommit">xCommit</a> </li>
+<li> <a href="vtab.html#xconnect">xConnect</a> </li>
+<li> <a href="vtab.html#xcreate">xCreate</a> </li>
+<li> <a href="vtab.html#sqlite3_module.xDestroy">xDestroy</a> </li>
+<li> <a href="vtab.html#xdisconnect">xDisconnect</a> </li>
+<li> <a href="vtab.html#xeof">xEof</a> </li>
+<li> <a href="vtab.html#xfilter">xFilter</a> </li>
+<li> <a href="vtab.html#xfindfunction">xFindFunction</a> </li>
+<li> <a href="vtab.html#xnext">xNext</a> </li>
+<li> <a href="rtree.html#xquery">xQueryFunc R*Tree callback</a> </li>
+<li> <a href="vtab.html#xsavepoint">xRelease</a> </li>
+<li> <a href="vtab.html#xrename">xRename</a> </li>
+<li> <a href="vtab.html#xrollback">xRollback</a> </li>
+<li> <a href="vtab.html#xsavepoint">xRollbackTo</a> </li>
+<li> <a href="vtab.html#xrowid">xRowid</a> </li>
+<li> <a href="vtab.html#xsavepoint">xSavepoint</a> </li>
+<li> <a href="vtab.html#xshadowname">xShadowName</a> </li>
+<li> <a href="vtab.html#xupdate">xUpdate</a> </li>
+<li> <a href="compile.html#yystackdepth">YYSTACKDEPTH</a> </li>
+<li> <a href="compile.html#yytrackmaxstackdepth">YYTRACKMAXSTACKDEPTH</a> </li>
+<li> <a href="zeroconf.html">zero-configuration</a> </li>
+<li> <a href="malloc.html#memsys5">zero-malloc memory allocator</a> </li>
+<li> <a href="lang_corefunc.html#zeroblob">zeroblob() SQL function</a> </li>
+<li> <a href="cli.html#zipdb">ZIP file as database</a> </li>
+<li> <a href="zipfile.html">zipfile</a> </li>
+<li> <a href="zipfile.html">Zipfile virtual table</a> </li>
+
+</ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/keyword_index.in?m=79bbdcd5500cf9c04">2016-12-03 20:43:57</a> UTC </small></i></p>
+
diff --git a/www/lang.html b/www/lang.html
new file mode 100644
index 0000000..ae4357c
--- /dev/null
+++ b/www/lang.html
@@ -0,0 +1,433 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Query Language Understood by SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1 align=center>SQL As Understood By SQLite</h1>
+
+<p>SQLite understands most of the standard SQL
+language. But it does <a href="omitted.html">omit some features</a>
+while at the same time
+adding a few features of its own. This document attempts to
+describe precisely what parts of the SQL language SQLite does
+and does not support. A list of <a href="lang_keywords.html">SQL keywords</a> is
+also provided. The SQL language syntax is described by
+<a href="syntaxdiagrams.html">syntax diagrams</a>.
+
+<p>The following syntax documentation topics are available:</p>
+
+<table width="100%" cellpadding="5" border="0">
+<tr><td valign="top"><ul>
+
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='lang_aggfunc.html'>aggregate functions</a></li>
+<li><a href='lang_altertable.html'>ALTER TABLE</a></li>
+<li><a href='lang_analyze.html'>ANALYZE</a></li>
+<li><a href='lang_attach.html'>ATTACH DATABASE</a></li>
+<li><a href='lang_transaction.html'>BEGIN TRANSACTION</a></li>
+<li><a href='lang_comment.html'>comment</a></li>
+<li><a href='lang_transaction.html'>COMMIT TRANSACTION</a></li>
+<li><a href='lang_corefunc.html'>core functions</a></li>
+<li><a href='lang_createindex.html'>CREATE INDEX</a></li>
+<li><a href='lang_createtable.html'>CREATE TABLE</a></li>
+<li><a href='lang_createtrigger.html'>CREATE TRIGGER</a></li>
+<li><a href='lang_createview.html'>CREATE VIEW</a></li>
+<li><a href='lang_createvtab.html'>CREATE VIRTUAL TABLE</a></li>
+<li><a href='lang_datefunc.html'>date and time functions</a></li>
+<li><a href='lang_delete.html'>DELETE</a></li>
+<li><a href='lang_detach.html'>DETACH DATABASE</a></li>
+<li><a href='lang_dropindex.html'>DROP INDEX</a></li>
+<li><a href='lang_droptable.html'>DROP TABLE</a></li>
+<li><a href='lang_droptrigger.html'>DROP TRIGGER</a></li>
+<li><a href='lang_dropview.html'>DROP VIEW</a></li>
+<li><a href='lang_transaction.html'>END TRANSACTION</a></li>
+<li><a href='lang_explain.html'>EXPLAIN</a></li>
+<li><a href='lang_expr.html'>expression</a></li>
+<li><a href='lang_indexedby.html'>INDEXED BY</a></li>
+<li><a href='lang_insert.html'>INSERT</a></li>
+<li><a href='lang_keywords.html'>keywords</a></li>
+<li><a href='lang_conflict.html'>ON CONFLICT clause</a></li>
+<li><a href='pragma.html#syntax'>PRAGMA</a></li>
+<li><a href='lang_reindex.html'>REINDEX</a></li>
+<li><a href='lang_savepoint.html'>RELEASE SAVEPOINT</a></li>
+<li><a href='lang_replace.html'>REPLACE</a></li>
+<li><a href='lang_returning.html'>RETURNING clause</a></li>
+<li><a href='lang_transaction.html'>ROLLBACK TRANSACTION</a></li>
+<li><a href='lang_savepoint.html'>SAVEPOINT</a></li>
+<li><a href='lang_select.html'>SELECT</a></li>
+<li><a href='lang_update.html'>UPDATE</a></li>
+<li><a href='lang_upsert.html'>UPSERT</a></li>
+<li><a href='lang_vacuum.html'>VACUUM</a></li>
+<li><a href='lang_with.html'>WITH clause</a></li>
+</ul>
+</div>
+
+</ul></td></tr></table>
+
+<p>The routines <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>, <a href="c3ref/prepare.html">sqlite3_prepare()</a>,
+<a href="c3ref/prepare.html">sqlite3_prepare16()</a>, <a href="c3ref/prepare.html">sqlite3_prepare16_v2()</a>,
+<a href="c3ref/exec.html">sqlite3_exec()</a>, and <a href="c3ref/free_table.html">sqlite3_get_table()</a> accept
+an SQL statement list (sql-stmt-list) which is a semicolon-separated
+list of statements.</p>
+
+<p><b><a href="syntax/sql-stmt-list.html">sql-stmt-list:</a></b></p><div class='imgcontainer'>
+ <div style="max-width:242px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 242.093 88.776">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M9,55L45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="81,55 69,59 69,50" style="fill:rgb(0,0,0)"/>
+<path d="M45,55L75,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M81,70L160,70L160,39L81,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="121" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">sql-stmt</text>
+<path d="M160,55L196,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="232,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M196,55L226,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="236" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,82 109,86 109,77" style="fill:rgb(0,0,0)"/>
+<path d="M45,55 L 52,55 Q 60,55 60,68 Q 60,82 75,82 L 100,82 L 115,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,82 L 155,82 Q 170,82 170,68 Q 170,55 177,55 L 185,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,32A15 15 0 0 0 136 17L136,17A15 15 0 0 0 121 2A15 15 0 0 0 105 17L105,17A15 15 0 0 0 121 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="121" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">;</text>
+<polygon points="136,17 147,12 147,21" style="fill:rgb(0,0,0)"/>
+<path d="M196,55 L 204,55 Q 211,55 211,40 L 211,32 Q 211,17 196,17 L 156,17 L 141,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,17 L 33,17 Q 18,17 18,32 L 18,40 Q 18,55 26,55 L 33,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+ </div>
+
+
+<p>Each SQL statement in the statement list is an instance of the
+following:</p>
+
+<p><b><a href="syntax/sql-stmt.html">sql-stmt:</a></b></p><div class='imgcontainer'>
+ <div style="max-width:716px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 716.88 1017.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L125,70A15 15 0 0 0 140 55L140,55A15 15 0 0 0 125 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXPLAIN</text>
+<polygon points="176,55 165,59 165,50" style="fill:rgb(0,0,0)"/>
+<path d="M140,55L170,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,70L235,70A15 15 0 0 0 250 55L250,55A15 15 0 0 0 235 39L191,39A15 15 0 0 0 176 55L176,55A15 15 0 0 0 191 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">QUERY</text>
+<polygon points="267,55 255,59 255,50" style="fill:rgb(0,0,0)"/>
+<path d="M250,55L261,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M282,70L311,70A15 15 0 0 0 327 55L327,55A15 15 0 0 0 311 39L282,39A15 15 0 0 0 267 55L267,55A15 15 0 0 0 282 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PLAN</text>
+<polygon points="368,17 357,21 357,12" style="fill:rgb(0,0,0)"/>
+<path d="M327,55 L 334,55 Q 342,55 342,40 L 342,32 Q 342,17 352,17 L 362,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="182,17 170,21 170,12" style="fill:rgb(0,0,0)"/>
+<path d="M140,55 L 148,55 Q 155,55 155,40 L 155,32 Q 155,17 166,17 L 176,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,17L357,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M9,17L170,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="410,17 398,21 398,12" style="fill:rgb(0,0,0)"/>
+<path d="M368,17L404,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,32L552,32L552,2L410,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alter-table-stmt</text>
+<polygon points="666,17 654,21 654,12" style="fill:rgb(0,0,0)"/>
+<path d="M552,17L660,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="707,17 696,21 696,12" style="fill:rgb(0,0,0)"/>
+<path d="M666,17L701,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="711" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,70L528,70L528,39L410,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">analyze-stmt</text>
+<polygon points="410,55 398,59 398,50" style="fill:rgb(0,0,0)"/>
+<path d="M383,39 L 383,47 Q 383,55 393,55 L 404,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,55 654,59 654,50" style="fill:rgb(0,0,0)"/>
+<path d="M528,55L660,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,55 L 673,55 Q 681,55 681,47 L 681,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,108L517,108L517,77L410,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">attach-stmt</text>
+<polygon points="410,92 398,97 398,88" style="fill:rgb(0,0,0)"/>
+<path d="M383,77 L 383,85 Q 383,92 393,92 L 404,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,92 654,97 654,88" style="fill:rgb(0,0,0)"/>
+<path d="M517,92L660,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,92 L 673,92 Q 681,92 681,85 L 681,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,145L511,145L511,115L410,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="460" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">begin-stmt</text>
+<polygon points="410,130 398,135 398,126" style="fill:rgb(0,0,0)"/>
+<path d="M383,115 L 383,123 Q 383,130 393,130 L 404,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,130 654,135 654,126" style="fill:rgb(0,0,0)"/>
+<path d="M511,130L660,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,130 L 673,130 Q 681,130 681,123 L 681,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,183L527,183L527,153L410,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">commit-stmt</text>
+<polygon points="410,168 398,172 398,164" style="fill:rgb(0,0,0)"/>
+<path d="M383,153 L 383,160 Q 383,168 393,168 L 404,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,168 654,172 654,164" style="fill:rgb(0,0,0)"/>
+<path d="M527,168L660,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,168 L 673,168 Q 681,168 681,160 L 681,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,221L569,221L569,191L410,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-index-stmt</text>
+<polygon points="410,206 398,210 398,201" style="fill:rgb(0,0,0)"/>
+<path d="M383,191 L 383,198 Q 383,206 393,206 L 404,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,206 654,210 654,201" style="fill:rgb(0,0,0)"/>
+<path d="M569,206L660,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,206 L 673,206 Q 681,206 681,198 L 681,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,259L566,259L566,228L410,228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-table-stmt</text>
+<polygon points="410,244 398,248 398,239" style="fill:rgb(0,0,0)"/>
+<path d="M383,228 L 383,236 Q 383,244 393,244 L 404,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,244 654,248 654,239" style="fill:rgb(0,0,0)"/>
+<path d="M566,244L660,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,244 L 673,244 Q 681,244 681,236 L 681,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,297L582,297L582,266L410,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="496" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-trigger-stmt</text>
+<polygon points="410,281 398,286 398,277" style="fill:rgb(0,0,0)"/>
+<path d="M383,266 L 383,274 Q 383,281 393,281 L 404,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,281 654,286 654,277" style="fill:rgb(0,0,0)"/>
+<path d="M582,281L660,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,281 L 673,281 Q 681,281 681,274 L 681,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,334L561,334L561,304L410,304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-view-stmt</text>
+<polygon points="410,319 398,324 398,315" style="fill:rgb(0,0,0)"/>
+<path d="M383,304 L 383,312 Q 383,319 393,319 L 404,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,319 654,324 654,315" style="fill:rgb(0,0,0)"/>
+<path d="M561,319L660,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,319 L 673,319 Q 681,319 681,312 L 681,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,372L626,372L626,342L410,342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-virtual-table-stmt</text>
+<polygon points="410,357 398,361 398,353" style="fill:rgb(0,0,0)"/>
+<path d="M383,342 L 383,349 Q 383,357 393,357 L 404,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,357 654,361 654,353" style="fill:rgb(0,0,0)"/>
+<path d="M626,357L660,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,357 L 673,357 Q 681,357 681,349 L 681,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,410L516,410L516,380L410,380Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt</text>
+<polygon points="410,395 398,399 398,390" style="fill:rgb(0,0,0)"/>
+<path d="M383,380 L 383,387 Q 383,395 393,395 L 404,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,395 654,399 654,390" style="fill:rgb(0,0,0)"/>
+<path d="M516,395L660,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,395 L 673,395 Q 681,395 681,387 L 681,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,448L581,448L581,417L410,417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt-limited</text>
+<polygon points="410,433 398,437 398,428" style="fill:rgb(0,0,0)"/>
+<path d="M383,417 L 383,425 Q 383,433 393,433 L 404,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,433 654,437 654,428" style="fill:rgb(0,0,0)"/>
+<path d="M581,433L660,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,433 L 673,433 Q 681,433 681,425 L 681,418" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,486L521,486L521,455L410,455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="465" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">detach-stmt</text>
+<polygon points="410,470 398,475 398,466" style="fill:rgb(0,0,0)"/>
+<path d="M383,455 L 383,463 Q 383,470 393,470 L 404,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,470 654,475 654,466" style="fill:rgb(0,0,0)"/>
+<path d="M521,470L660,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,470 L 673,470 Q 681,470 681,463 L 681,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,523L555,523L555,493L410,493Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="508" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-index-stmt</text>
+<polygon points="410,508 398,513 398,504" style="fill:rgb(0,0,0)"/>
+<path d="M383,493 L 383,501 Q 383,508 393,508 L 404,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,508 654,513 654,504" style="fill:rgb(0,0,0)"/>
+<path d="M555,508L660,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,508 L 673,508 Q 681,508 681,501 L 681,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,561L551,561L551,531L410,531Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="480" y="546" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-table-stmt</text>
+<polygon points="410,546 398,550 398,542" style="fill:rgb(0,0,0)"/>
+<path d="M383,531 L 383,538 Q 383,546 393,546 L 404,546" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,546 654,550 654,542" style="fill:rgb(0,0,0)"/>
+<path d="M551,546L660,546" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,546 L 673,546 Q 681,546 681,538 L 681,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,599L568,599L568,569L410,569Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="584" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-trigger-stmt</text>
+<polygon points="410,584 398,588 398,579" style="fill:rgb(0,0,0)"/>
+<path d="M383,569 L 383,576 Q 383,584 393,584 L 404,584" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,584 654,588 654,579" style="fill:rgb(0,0,0)"/>
+<path d="M568,584L660,584" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,584 L 673,584 Q 681,584 681,576 L 681,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,637L547,637L547,606L410,606Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="622" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-view-stmt</text>
+<polygon points="410,622 398,626 398,617" style="fill:rgb(0,0,0)"/>
+<path d="M383,606 L 383,614 Q 383,622 393,622 L 404,622" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,622 654,626 654,617" style="fill:rgb(0,0,0)"/>
+<path d="M547,622L660,622" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,622 L 673,622 Q 681,622 681,614 L 681,607" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,675L513,675L513,644L410,644Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="659" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">insert-stmt</text>
+<polygon points="410,659 398,664 398,655" style="fill:rgb(0,0,0)"/>
+<path d="M383,644 L 383,652 Q 383,659 393,659 L 404,659" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,659 654,664 654,655" style="fill:rgb(0,0,0)"/>
+<path d="M513,659L660,659" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,659 L 673,659 Q 681,659 681,652 L 681,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,712L529,712L529,682L410,682Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="697" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-stmt</text>
+<polygon points="410,697 398,702 398,693" style="fill:rgb(0,0,0)"/>
+<path d="M383,682 L 383,690 Q 383,697 393,697 L 404,697" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,697 654,702 654,693" style="fill:rgb(0,0,0)"/>
+<path d="M529,697L660,697" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,697 L 673,697 Q 681,697 681,690 L 681,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,750L528,750L528,720L410,720Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="735" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">reindex-stmt</text>
+<polygon points="410,735 398,739 398,731" style="fill:rgb(0,0,0)"/>
+<path d="M383,720 L 383,727 Q 383,735 393,735 L 404,735" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,735 654,739 654,731" style="fill:rgb(0,0,0)"/>
+<path d="M528,735L660,735" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,735 L 673,735 Q 681,735 681,727 L 681,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,788L526,788L526,758L410,758Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="773" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">release-stmt</text>
+<polygon points="410,773 398,777 398,768" style="fill:rgb(0,0,0)"/>
+<path d="M383,758 L 383,765 Q 383,773 393,773 L 404,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,773 654,777 654,768" style="fill:rgb(0,0,0)"/>
+<path d="M526,773L660,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,773 L 673,773 Q 681,773 681,765 L 681,758" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,826L533,826L533,795L410,795Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="811" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">rollback-stmt</text>
+<polygon points="410,811 398,815 398,806" style="fill:rgb(0,0,0)"/>
+<path d="M383,795 L 383,803 Q 383,811 393,811 L 404,811" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,811 654,815 654,806" style="fill:rgb(0,0,0)"/>
+<path d="M533,811L660,811" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,811 L 673,811 Q 681,811 681,803 L 681,796" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,864L545,864L545,833L410,833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="848" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-stmt</text>
+<polygon points="410,848 398,853 398,844" style="fill:rgb(0,0,0)"/>
+<path d="M383,833 L 383,841 Q 383,848 393,848 L 404,848" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,848 654,853 654,844" style="fill:rgb(0,0,0)"/>
+<path d="M545,848L660,848" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,848 L 673,848 Q 681,848 681,841 L 681,833" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,901L514,901L514,871L410,871Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="462" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="410,886 398,891 398,882" style="fill:rgb(0,0,0)"/>
+<path d="M383,871 L 383,879 Q 383,886 393,886 L 404,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,886 654,891 654,882" style="fill:rgb(0,0,0)"/>
+<path d="M514,886L660,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,886 L 673,886 Q 681,886 681,879 L 681,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,939L522,939L522,909L410,909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="466" y="924" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt</text>
+<polygon points="410,924 398,928 398,920" style="fill:rgb(0,0,0)"/>
+<path d="M383,909 L 383,916 Q 383,924 393,924 L 404,924" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,924 654,928 654,920" style="fill:rgb(0,0,0)"/>
+<path d="M522,924L660,924" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,924 L 673,924 Q 681,924 681,916 L 681,909" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,977L587,977L587,947L410,947Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="498" y="962" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt-limited</text>
+<polygon points="410,962 398,966 398,957" style="fill:rgb(0,0,0)"/>
+<path d="M383,947 L 383,954 Q 383,962 393,962 L 404,962" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,962 654,966 654,957" style="fill:rgb(0,0,0)"/>
+<path d="M587,962L660,962" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,962 L 673,962 Q 681,962 681,954 L 681,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,1015L529,1015L529,984L410,984Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="1000" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">vacuum-stmt</text>
+<polygon points="410,1000 398,1004 398,995" style="fill:rgb(0,0,0)"/>
+<path d="M368,17 L 376,17 Q 383,17 383,32 L 383,985 Q 383,1000 393,1000 L 404,1000" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,1000 654,1004 654,995" style="fill:rgb(0,0,0)"/>
+<path d="M529,1000L660,1000" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,1000 L 673,1000 Q 681,1000 681,985 L 681,32 Q 681,17 688,17 L 696,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+ </div>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang.in?m=f2996fb15fc6e7d4e">2021-02-02 12:11:09</a> UTC </small></i></p>
+
diff --git a/www/lang_aggfunc.html b/www/lang_aggfunc.html
new file mode 100644
index 0000000..86d331e
--- /dev/null
+++ b/www/lang_aggfunc.html
@@ -0,0 +1,2518 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Built-in Aggregate Functions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Built-in Aggregate Functions
+</div>
+</div>
+
+
+
+
+
+<h1 id="syntax"><span>1. </span>Syntax</h1>
+<p><b><a href="syntax/aggregate-function-invocation.html">aggregate-function-invocation:</a></b>
+<button id='x1239' onclick='hideorshow("x1239","x1240")'>hide</button></p>
+ <div id='x1240' class='imgcontainer'>
+ <div style="max-width:819px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 819.533 117.504">
+<circle cx="5" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,56 20,60 20,52" style="fill:rgb(0,0,0)"/>
+<path d="M9,56L26,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,71L156,71A15 15 0 0 0 171 56A15 15 0 0 0 156 41L47,41A15 15 0 0 0 32 56A15 15 0 0 0 47 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="102" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">aggregate-func</text>
+<polygon points="189,56 178,60 178,52" style="fill:rgb(0,0,0)"/>
+<path d="M171,56L183,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M204,71A15 15 0 0 0 219 56A15 15 0 0 0 204 41A15 15 0 0 0 189 56A15 15 0 0 0 204 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="242,56 231,60 231,52" style="fill:rgb(0,0,0)"/>
+<path d="M219,56L237,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="277,26 265,30 265,22" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,41 L 254,41 Q 254,26 263,26 L 271,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M292,41L360,41A15 15 0 0 0 376 26L376,26A15 15 0 0 0 360 11L292,11A15 15 0 0 0 277 26L277,26A15 15 0 0 0 292 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="394,26 382,30 382,22" style="fill:rgb(0,0,0)"/>
+<path d="M376,26L388,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="428,56 417,60 417,52" style="fill:rgb(0,0,0)"/>
+<path d="M394,26 L 399,26 Q 405,26 405,41 L 405,41 Q 405,56 414,56 L 422,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,56 453,60 453,52" style="fill:rgb(0,0,0)"/>
+<path d="M428,56L458,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M464,71L513,71L513,41L464,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="567,56 556,60 556,52" style="fill:rgb(0,0,0)"/>
+<path d="M513,56L562,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,71A15 15 0 0 0 598 56A15 15 0 0 0 582 41A15 15 0 0 0 567 56A15 15 0 0 0 582 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="644,86 632,91 632,82" style="fill:rgb(0,0,0)"/>
+<path d="M598,56 L 609,56 Q 621,56 621,71 L 621,71 Q 621,86 629,86 L 638,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,101L756,101L756,71L644,71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="700" y="86" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="810,56 798,60 798,52" style="fill:rgb(0,0,0)"/>
+<path d="M756,86 L 765,86 Q 774,86 774,71 L 774,71 Q 774,56 789,56 L 789,56 L 804,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="813" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="700,56 688,60 688,52" style="fill:rgb(0,0,0)"/>
+<path d="M598,56L694,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="810,56 798,60 798,52" style="fill:rgb(0,0,0)"/>
+<path d="M700,56L804,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="326,56 315,60 315,52" style="fill:rgb(0,0,0)"/>
+<path d="M242,56L321,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="428,56 417,60 417,52" style="fill:rgb(0,0,0)"/>
+<path d="M326,56L422,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,32A15 15 0 0 0 504 17A15 15 0 0 0 489 2A15 15 0 0 0 474 17A15 15 0 0 0 489 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="504,17 515,12 515,21" style="fill:rgb(0,0,0)"/>
+<path d="M513,56 L 525,56 Q 536,56 536,41 L 536,32 Q 536,17 523,17 L 510,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,56 453,60 453,52" style="fill:rgb(0,0,0)"/>
+<path d="M474,17 L 456,17 Q 441,17 441,32 L 441,41 Q 441,56 450,56 L 458,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,101A15 15 0 0 0 408 86L408,86A15 15 0 0 0 393 71A15 15 0 0 0 378 86L378,86A15 15 0 0 0 393 101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="393" y="86" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="378,86 367,91 367,82" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,71 L 254,71 Q 254,86 269,86 L 357,86 L 372,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,86 477,91 477,82" style="fill:rgb(0,0,0)"/>
+<path d="M408,86L483,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,86 L 525,86 Q 540,86 540,71 L 540,71 Q 540,56 546,56 L 552,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="393,111 382,115 382,106" style="fill:rgb(0,0,0)"/>
+<path d="M326,86 L 332,86 Q 338,86 338,98 Q 338,111 353,111 L 373,111 L 388,111" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,111 L 414,111 Q 429,111 429,98 Q 429,86 435,86 L 441,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1241' onclick='hideorshow("x1241","x1242")'>show</button></p>
+ <div id='x1242' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1243' onclick='hideorshow("x1243","x1244")'>show</button></p>
+ <div id='x1244' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1245' onclick='hideorshow("x1245","x1246")'>show</button></p>
+ <div id='x1246' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1247' onclick='hideorshow("x1247","x1248")'>show</button></p>
+ <div id='x1248' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1249' onclick='hideorshow("x1249","x1250")'>show</button></p>
+ <div id='x1250' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1251' onclick='hideorshow("x1251","x1252")'>show</button></p>
+ <div id='x1252' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1253' onclick='hideorshow("x1253","x1254")'>show</button></p>
+ <div id='x1254' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1255' onclick='hideorshow("x1255","x1256")'>show</button></p>
+ <div id='x1256' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1257' onclick='hideorshow("x1257","x1258")'>show</button></p>
+ <div id='x1258' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1259' onclick='hideorshow("x1259","x1260")'>show</button></p>
+ <div id='x1260' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1261' onclick='hideorshow("x1261","x1262")'>show</button></p>
+ <div id='x1262' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1263' onclick='hideorshow("x1263","x1264")'>show</button></p>
+ <div id='x1264' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1265' onclick='hideorshow("x1265","x1266")'>show</button></p>
+ <div id='x1266' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1267' onclick='hideorshow("x1267","x1268")'>show</button></p>
+ <div id='x1268' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1269' onclick='hideorshow("x1269","x1270")'>show</button></p>
+ <div id='x1270' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1271' onclick='hideorshow("x1271","x1272")'>show</button></p>
+ <div id='x1272' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1273' onclick='hideorshow("x1273","x1274")'>show</button></p>
+ <div id='x1274' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1275' onclick='hideorshow("x1275","x1276")'>show</button></p>
+ <div id='x1276' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1277' onclick='hideorshow("x1277","x1278")'>show</button></p>
+ <div id='x1278' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1279' onclick='hideorshow("x1279","x1280")'>show</button></p>
+ <div id='x1280' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+
+
+<p>
+The aggregate functions shown below are available by default. Additional
+aggregate functions written in C may be added using the
+<a href="c3ref/create_function.html">sqlite3_create_function()</a>
+API.</p>
+
+<p>
+In any aggregate function that takes a single argument, that argument
+can be preceded by the keyword DISTINCT. In such cases, duplicate
+elements are filtered before being passed into the aggregate function.
+For example, the function "count(distinct X)" will return the number
+of distinct values of column X instead of the total number of non-null
+values in column X.
+</p>
+
+<a name="aggfilter"></a>
+
+<p>
+If a FILTER clause is provided, then only rows for which the <i>expr</i> is
+true are included in the aggregate.
+</p>
+
+<a name="aggfunclist"></a>
+
+<h1 id="list_of_built_in_aggregate_functions"><span>2. </span>List of built-in aggregate functions</h1>
+
+<div class='columns' style='columns: 11em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='lang_aggfunc.html#avg'>avg(X)</a></li>
+<li><a href='lang_aggfunc.html#count'>count(*)</a></li>
+<li><a href='lang_aggfunc.html#count'>count(X)</a></li>
+<li><a href='lang_aggfunc.html#group_concat'>group_concat(X)</a></li>
+<li><a href='lang_aggfunc.html#group_concat'>group_concat(X,Y)</a></li>
+<li><a href='lang_aggfunc.html#max_agg'>max(X)</a></li>
+<li><a href='lang_aggfunc.html#min_agg'>min(X)</a></li>
+<li><a href='lang_aggfunc.html#sumunc'>sum(X)</a></li>
+<li><a href='lang_aggfunc.html#sumunc'>total(X)</a></li>
+</ul>
+</div>
+
+
+<h1 id="descriptions_of_built_in_aggregate_functions"><span>3. </span>Descriptions of built-in aggregate functions</h1>
+<dl>
+
+<a name="avg"></a>
+<dt><p><b>avg(<i>X</i>)</b></dt><dd><p>
+ The avg() function
+ returns the average value of all non-NULL <i>X</i> within a
+ group. String and BLOB values that do not look like numbers are
+ interpreted as 0.
+ The result of avg() is always a floating point value whenever
+ there is at least one non-NULL input even if all
+ inputs are integers. The result of avg() is NULL if and only if
+ there are no non-NULL inputs.
+</dd>
+<a name="count"></a>
+<dt><p><b>count(<i>X</i>)<br />count(*)</b></dt><dd><p>
+ The count(X) function returns
+ a count of the number of times
+ that <i>X</i> is not NULL in a group. The count(*) function
+ (with no arguments) returns the total number of rows in the group.
+</dd>
+<a name="group_concat"></a>
+<dt><p><b>group_concat(<i>X</i>)<br />group_concat(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The group_concat() function returns
+ a string which is the concatenation of
+ all non-NULL values of <i>X</i>. If parameter <i>Y</i> is present then
+ it is used as the separator
+ between instances of <i>X</i>. A comma (",") is used as the separator
+ if <i>Y</i> is omitted. The order of the concatenated elements is
+ arbitrary.
+</dd>
+<a name="max_agg"></a>
+<dt><p><b>max(<i>X</i>)</b></dt><dd><p>
+ The max() aggregate function
+ returns the maximum value of all values in the group.
+ The maximum value is the value that would be returned last in an
+ ORDER BY on the same column. Aggregate max() returns NULL
+ if and only if there are no non-NULL values in the group.
+</dd>
+<a name="min_agg"></a>
+<dt><p><b>min(<i>X</i>)</b></dt><dd><p>
+ The min() aggregate function
+ returns the minimum non-NULL value of all values in the group.
+ The minimum value is the first non-NULL value that would appear
+ in an ORDER BY of the column.
+ Aggregate min() returns NULL if and only if there are no non-NULL
+ values in the group.
+</dd>
+<a name="sumunc"></a>
+<dt><p><b>sum(<i>X</i>)<br />total(<i>X</i>)</b></dt><dd><p>
+ The sum() and total() aggregate functions
+ return the sum of all non-NULL values in the group.
+ If there are no non-NULL input rows then sum() returns
+ NULL but total() returns 0.0.
+ NULL is not normally a helpful result for the sum of no rows
+ but the SQL standard requires it and most other
+ SQL database engines implement sum() that way so SQLite does it in the
+ same way in order to be compatible. The non-standard total() function
+ is provided as a convenient way to work around this design problem
+ in the SQL language.</p>
+
+ <p>The result of total() is always a floating point value.
+ The result of sum() is an integer value if all non-NULL inputs are integers.
+ If any input to sum() is neither an integer nor a NULL,
+ then sum() returns a floating point value
+ which is an approximation of the mathematical sum.</p>
+
+ <p>Sum() will throw an "integer overflow" exception if all inputs
+ are integers or NULL
+ and an integer overflow occurs at any point during the computation.
+ Total() never throws an integer overflow.
+</dd>
+
+</dl>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_aggfunc.in?m=fc47888e5026f0547">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/lang_altertable.html b/www/lang_altertable.html
new file mode 100644
index 0000000..6a0fc5e
--- /dev/null
+++ b/www/lang_altertable.html
@@ -0,0 +1,3330 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>ALTER TABLE</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+ALTER TABLE
+</div>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p><b><a href="syntax/alter-table-stmt.html">alter-table-stmt:</a></b>
+<button id='x1281' onclick='hideorshow("x1281","x1282")'>hide</button></p>
+ <div id='x1282' class='imgcontainer'>
+ <div style="max-width:754px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 754.521 320.904">
+<circle cx="5" cy="32" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="37,32 26,37 26,28" style="fill:rgb(0,0,0)"/>
+<path d="M9,32L31,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M37,32L59,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47L113,47A15 15 0 0 0 129 32A15 15 0 0 0 113 17L74,17A15 15 0 0 0 59 32A15 15 0 0 0 74 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="94" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALTER</text>
+<polygon points="165,32 153,37 153,28" style="fill:rgb(0,0,0)"/>
+<path d="M129,32L159,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,47L219,47A15 15 0 0 0 234 32A15 15 0 0 0 219 17L180,17A15 15 0 0 0 165 32A15 15 0 0 0 180 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="251,32 240,37 240,28" style="fill:rgb(0,0,0)"/>
+<path d="M234,32L245,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="287,32 276,37 276,28" style="fill:rgb(0,0,0)"/>
+<path d="M251,32L281,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,47L399,47A15 15 0 0 0 414 32A15 15 0 0 0 399 17L302,17A15 15 0 0 0 287 32A15 15 0 0 0 302 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="436,32 425,37 425,28" style="fill:rgb(0,0,0)"/>
+<path d="M414,32L431,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M452,47A15 15 0 0 0 467 32A15 15 0 0 0 452 17A15 15 0 0 0 436 32A15 15 0 0 0 452 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="452" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="503,32 491,37 491,28" style="fill:rgb(0,0,0)"/>
+<path d="M467,32L497,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M518,47L593,47A15 15 0 0 0 608 32A15 15 0 0 0 593 17L518,17A15 15 0 0 0 503 32A15 15 0 0 0 518 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="555" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="376,6 364,10 364,2" style="fill:rgb(0,0,0)"/>
+<path d="M251,32 L 260,32 Q 268,32 268,19 Q 268,6 283,6 L 355,6 L 370,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,6 L 461,6 Q 476,6 476,19 Q 476,32 489,32 L 503,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="626,56 622,45 630,45" style="fill:rgb(0,0,0)"/>
+<path d="M608,32 L 617,32 Q 626,32 626,41 L 626,51" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,81 362,76 362,85" style="fill:rgb(0,0,0)"/>
+<path d="M626,56 L 626,68 Q 626,81 611,81 L 371,81 L 356,81" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,81 L 20,81 Q 5,81 5,88 L 5,96" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="41,126 30,130 30,122" style="fill:rgb(0,0,0)"/>
+<path d="M5,96 L 5,111 Q 5,126 20,126 L 20,126 L 36,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,141L117,141A15 15 0 0 0 132 126A15 15 0 0 0 117 111L56,111A15 15 0 0 0 41 126A15 15 0 0 0 56 141Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="126" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RENAME</text>
+<polygon points="150,126 139,130 139,122" style="fill:rgb(0,0,0)"/>
+<path d="M132,126L144,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,141L171,141A15 15 0 0 0 186 126A15 15 0 0 0 171 111L165,111A15 15 0 0 0 150 126A15 15 0 0 0 165 141Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="126" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TO</text>
+<polygon points="204,126 193,130 193,122" style="fill:rgb(0,0,0)"/>
+<path d="M186,126L198,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,141L334,141A15 15 0 0 0 349 126A15 15 0 0 0 334 111L219,111A15 15 0 0 0 204 126A15 15 0 0 0 219 141Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="277" y="126" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">new-table-name</text>
+<polygon points="41,171 30,176 30,167" style="fill:rgb(0,0,0)"/>
+<path d="M5,96 L 5,156 Q 5,171 20,171 L 21,171 L 36,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,186L117,186A15 15 0 0 0 132 171A15 15 0 0 0 117 156L56,156A15 15 0 0 0 41 171A15 15 0 0 0 56 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RENAME</text>
+<polygon points="149,171 138,176 138,167" style="fill:rgb(0,0,0)"/>
+<path d="M132,171L143,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="185,171 174,176 174,167" style="fill:rgb(0,0,0)"/>
+<path d="M149,171L179,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,186L263,186A15 15 0 0 0 278 171A15 15 0 0 0 263 156L200,156A15 15 0 0 0 185 171A15 15 0 0 0 200 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="232" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLUMN</text>
+<polygon points="314,171 303,176 303,167" style="fill:rgb(0,0,0)"/>
+<path d="M278,171L308,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M329,186L423,186A15 15 0 0 0 439 171A15 15 0 0 0 423 156L329,156A15 15 0 0 0 314 171A15 15 0 0 0 329 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="376" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="457,171 445,176 445,167" style="fill:rgb(0,0,0)"/>
+<path d="M439,171L451,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,186L477,186A15 15 0 0 0 492 171A15 15 0 0 0 477 156L472,156A15 15 0 0 0 457 171A15 15 0 0 0 472 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="475" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TO</text>
+<polygon points="510,171 499,176 499,167" style="fill:rgb(0,0,0)"/>
+<path d="M492,171L505,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M526,186L660,186A15 15 0 0 0 675 171A15 15 0 0 0 660 156L526,156A15 15 0 0 0 510 171A15 15 0 0 0 526 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">new-column-name</text>
+<polygon points="692,171 680,176 680,167" style="fill:rgb(0,0,0)"/>
+<path d="M675,171L686,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="745,126 733,130 733,122" style="fill:rgb(0,0,0)"/>
+<path d="M692,171 L 700,171 Q 709,171 709,156 L 709,141 Q 709,126 724,126 L 724,126 L 739,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="748" cy="126" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="745,126 733,130 733,122" style="fill:rgb(0,0,0)"/>
+<path d="M349,126L739,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="232,198 220,202 220,193" style="fill:rgb(0,0,0)"/>
+<path d="M149,171 L 158,171 Q 166,171 166,184 Q 166,198 181,198 L 211,198 L 226,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="314,171 303,176 303,167" style="fill:rgb(0,0,0)"/>
+<path d="M232,198 L 272,198 Q 287,198 287,184 Q 287,171 298,171 L 308,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="41,232 30,236 30,227" style="fill:rgb(0,0,0)"/>
+<path d="M5,96 L 5,217 Q 5,232 20,232 L 21,232 L 36,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,247L76,247A15 15 0 0 0 91 232A15 15 0 0 0 76 217L56,217A15 15 0 0 0 41 232A15 15 0 0 0 56 247Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="232" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ADD</text>
+<polygon points="108,232 97,236 97,227" style="fill:rgb(0,0,0)"/>
+<path d="M91,232L102,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="144,232 133,236 133,227" style="fill:rgb(0,0,0)"/>
+<path d="M108,232L138,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M159,247L222,247A15 15 0 0 0 237 232A15 15 0 0 0 222 217L159,217A15 15 0 0 0 144 232A15 15 0 0 0 159 247Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="232" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLUMN</text>
+<polygon points="273,232 262,236 262,227" style="fill:rgb(0,0,0)"/>
+<path d="M237,232L267,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,247L378,247L378,217L273,217Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="232" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-def</text>
+<polygon points="692,232 680,236 680,227" style="fill:rgb(0,0,0)"/>
+<path d="M378,232L686,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="191,258 179,262 179,254" style="fill:rgb(0,0,0)"/>
+<path d="M108,232 L 117,232 Q 125,232 125,245 Q 125,258 140,258 L 170,258 L 185,258" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,232 262,236 262,227" style="fill:rgb(0,0,0)"/>
+<path d="M191,258 L 231,258 Q 246,258 246,245 Q 246,232 257,232 L 267,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="745,126 733,130 733,122" style="fill:rgb(0,0,0)"/>
+<path d="M692,232 L 700,232 Q 709,232 709,217 L 709,141 Q 709,126 724,126 L 724,126 L 739,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="41,288 30,292 30,283" style="fill:rgb(0,0,0)"/>
+<path d="M5,217 L 5,273 Q 5,288 20,288 L 21,288 L 36,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,303L87,303A15 15 0 0 0 103 288A15 15 0 0 0 87 273L56,273A15 15 0 0 0 41 288A15 15 0 0 0 56 303Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="72" y="288" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="120,288 108,292 108,283" style="fill:rgb(0,0,0)"/>
+<path d="M103,288L114,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,288 144,292 144,283" style="fill:rgb(0,0,0)"/>
+<path d="M120,288L150,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M171,303L234,303A15 15 0 0 0 249 288A15 15 0 0 0 234 273L171,273A15 15 0 0 0 156 288A15 15 0 0 0 171 303Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="202" y="288" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLUMN</text>
+<polygon points="285,288 273,292 273,283" style="fill:rgb(0,0,0)"/>
+<path d="M249,288L279,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,303L394,303A15 15 0 0 0 409 288A15 15 0 0 0 394 273L300,273A15 15 0 0 0 285 288A15 15 0 0 0 300 303Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="288" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="692,288 680,292 680,283" style="fill:rgb(0,0,0)"/>
+<path d="M409,288L686,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M692,288 L 700,288 Q 709,288 709,273 L 709,232 L 709,217" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="202,314 191,318 191,310" style="fill:rgb(0,0,0)"/>
+<path d="M120,288 L 127,288 Q 135,288 135,301 Q 135,314 150,314 L 181,314 L 196,314" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M202,314 L 245,314 Q 260,314 260,301 Q 260,288 268,288 L 275,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/column-def.html">column-def:</a></b>
+<button id='x1283' onclick='hideorshow("x1283","x1284")'>show</button></p>
+ <div id='x1284' style='display:none;' class='imgcontainer'>
+ <div style="max-width:614px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 614.333 64.8">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L141,32A15 15 0 0 0 156 17A15 15 0 0 0 141 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="94" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="179,17 168,21 168,12" style="fill:rgb(0,0,0)"/>
+<path d="M156,17L173,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="215,17 204,21 204,12" style="fill:rgb(0,0,0)"/>
+<path d="M179,17L209,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,32L314,32L314,2L215,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M314,17L354,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M386,62L550,62L550,32L386,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-constraint</text>
+<polygon points="550,17 539,21 539,12" style="fill:rgb(0,0,0)"/>
+<path d="M359,17L545,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="604,17 593,21 593,12" style="fill:rgb(0,0,0)"/>
+<path d="M550,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="608" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="265,42 253,47 253,38" style="fill:rgb(0,0,0)"/>
+<path d="M179,17 L 187,17 Q 194,17 194,30 Q 194,42 209,42 L 244,42 L 259,42" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,42 L 314,42 Q 329,42 329,30 Q 329,17 337,17 L 344,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="550,47 562,43 562,51" style="fill:rgb(0,0,0)"/>
+<path d="M550,17 L 562,17 Q 574,17 574,32 L 574,32 Q 574,47 565,47 L 556,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="399,17 388,21 388,12" style="fill:rgb(0,0,0)"/>
+<path d="M386,47 L 375,47 Q 363,47 363,32 L 363,32 Q 363,17 378,17 L 379,17 L 394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/column-constraint.html">column-constraint:</a></b>
+<button id='x1285' onclick='hideorshow("x1285","x1286")'>show</button></p>
+ <div id='x1286' style='display:none;' class='imgcontainer'>
+ <div style="max-width:844px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 844.306 578.88">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,40 43,28 51,28" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,25 L 47,34" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L183,32A15 15 0 0 0 198 17A15 15 0 0 0 183 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="133" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONSTRAINT</text>
+<polygon points="221,17 210,21 210,12" style="fill:rgb(0,0,0)"/>
+<path d="M198,17L215,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,32L263,32A15 15 0 0 0 279 17A15 15 0 0 0 263 2L236,2A15 15 0 0 0 221 17A15 15 0 0 0 236 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="250" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="173,47 185,43 185,51" style="fill:rgb(0,0,0)"/>
+<path d="M279,17 L 300,17 Q 315,17 315,32 L 315,32 Q 315,47 300,47 L 194,47 L 179,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M173,47 L 62,47 Q 47,47 47,55 L 47,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,77 58,82 58,73" style="fill:rgb(0,0,0)"/>
+<path d="M47,40 L 47,62 Q 47,77 56,77 L 64,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,92L148,92A15 15 0 0 0 163 77A15 15 0 0 0 148 62L85,62A15 15 0 0 0 70 77A15 15 0 0 0 85 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRIMARY</text>
+<polygon points="186,77 174,82 174,73" style="fill:rgb(0,0,0)"/>
+<path d="M163,77L180,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,92L217,92A15 15 0 0 0 233 77A15 15 0 0 0 217 62L201,62A15 15 0 0 0 186 77A15 15 0 0 0 201 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">KEY</text>
+<polygon points="271,138 259,142 259,133" style="fill:rgb(0,0,0)"/>
+<path d="M233,77 L 240,77 Q 248,77 248,92 L 248,123 Q 248,138 256,138 L 265,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M286,153L316,153A15 15 0 0 0 331 138A15 15 0 0 0 316 123L286,123A15 15 0 0 0 271 138A15 15 0 0 0 286 153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="301" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="354,138 343,142 343,133" style="fill:rgb(0,0,0)"/>
+<path d="M331,138L348,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,77 381,82 381,73" style="fill:rgb(0,0,0)"/>
+<path d="M354,138 L 362,138 Q 369,138 369,123 L 369,92 Q 369,77 378,77 L 386,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,92L525,92L525,62L392,62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="459" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="549,77 537,82 537,73" style="fill:rgb(0,0,0)"/>
+<path d="M525,77L543,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="587,108 575,112 575,103" style="fill:rgb(0,0,0)"/>
+<path d="M549,77 L 556,77 Q 564,77 564,92 L 564,93 Q 564,108 572,108 L 581,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M602,123L745,123A15 15 0 0 0 760 108A15 15 0 0 0 745 92L602,92A15 15 0 0 0 587 108A15 15 0 0 0 602 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="673" y="108" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AUTOINCREMENT</text>
+<polygon points="783,108 772,112 772,103" style="fill:rgb(0,0,0)"/>
+<path d="M760,108L778,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="834,77 823,82 823,73" style="fill:rgb(0,0,0)"/>
+<path d="M783,108 L 791,108 Q 798,108 798,93 L 798,92 Q 798,77 813,77 L 814,77 L 829,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="838" cy="77" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="673,77 662,82 662,73" style="fill:rgb(0,0,0)"/>
+<path d="M549,77L668,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M673,77L827,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="301,77 289,82 289,73" style="fill:rgb(0,0,0)"/>
+<path d="M233,77L295,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,77L381,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="271,100 259,104 259,96" style="fill:rgb(0,0,0)"/>
+<path d="M233,77 L 240,77 Q 248,77 248,89 Q 248,100 256,100 L 265,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M286,115L302,115A15 15 0 0 0 318 100A15 15 0 0 0 302 85L286,85A15 15 0 0 0 271 100A15 15 0 0 0 286 115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="294" y="100" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="354,100 343,104 343,96" style="fill:rgb(0,0,0)"/>
+<path d="M318,100L348,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,100 L 362,100 Q 369,100 369,92 L 369,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,183 58,187 58,179" style="fill:rgb(0,0,0)"/>
+<path d="M47,62 L 47,168 Q 47,183 56,183 L 64,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,198L105,198A15 15 0 0 0 120 183A15 15 0 0 0 105 168L85,168A15 15 0 0 0 70 183A15 15 0 0 0 85 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="143,183 132,187 132,179" style="fill:rgb(0,0,0)"/>
+<path d="M120,183L138,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,198L190,198A15 15 0 0 0 205 183A15 15 0 0 0 190 168L158,168A15 15 0 0 0 143 183A15 15 0 0 0 158 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="174" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="228,183 216,187 216,179" style="fill:rgb(0,0,0)"/>
+<path d="M205,183L222,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,198L361,198L361,168L228,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="294" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="783,183 772,187 772,179" style="fill:rgb(0,0,0)"/>
+<path d="M361,183L778,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,183 L 791,183 Q 798,183 798,168 L 798,107 L 798,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,221 58,225 58,217" style="fill:rgb(0,0,0)"/>
+<path d="M47,168 L 47,206 Q 47,221 56,221 L 64,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,236L140,236A15 15 0 0 0 155 221A15 15 0 0 0 140 206L85,206A15 15 0 0 0 70 221A15 15 0 0 0 85 236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="221" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<polygon points="178,221 167,225 167,217" style="fill:rgb(0,0,0)"/>
+<path d="M155,221L172,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M178,236L311,236L311,206L178,206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="245" y="221" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="783,221 772,225 772,217" style="fill:rgb(0,0,0)"/>
+<path d="M311,221L778,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,221 L 791,221 Q 798,221 798,206 L 798,183 L 798,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,259 58,263 58,254" style="fill:rgb(0,0,0)"/>
+<path d="M47,206 L 47,244 Q 47,259 56,259 L 64,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,274L131,274A15 15 0 0 0 146 259A15 15 0 0 0 131 244L85,244A15 15 0 0 0 70 259A15 15 0 0 0 85 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="259" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CHECK</text>
+<polygon points="169,259 157,263 157,254" style="fill:rgb(0,0,0)"/>
+<path d="M146,259L163,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M184,274A15 15 0 0 0 199 259A15 15 0 0 0 184 244A15 15 0 0 0 169 259A15 15 0 0 0 184 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="259" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="222,259 210,263 210,254" style="fill:rgb(0,0,0)"/>
+<path d="M199,259L216,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,274L271,274L271,244L222,244Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="259" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="294,259 283,263 283,254" style="fill:rgb(0,0,0)"/>
+<path d="M271,259L288,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,274A15 15 0 0 0 324 259A15 15 0 0 0 309 244A15 15 0 0 0 294 259A15 15 0 0 0 309 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="259" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,259 772,263 772,254" style="fill:rgb(0,0,0)"/>
+<path d="M324,259L778,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,259 L 791,259 Q 798,259 798,244 L 798,221 L 798,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,297 58,301 58,292" style="fill:rgb(0,0,0)"/>
+<path d="M47,244 L 47,282 Q 47,297 56,297 L 64,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,312L150,312A15 15 0 0 0 166 297A15 15 0 0 0 150 281L85,281A15 15 0 0 0 70 297A15 15 0 0 0 85 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="118" y="297" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="189,297 177,301 177,292" style="fill:rgb(0,0,0)"/>
+<path d="M166,297L183,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="225,297 213,301 213,292" style="fill:rgb(0,0,0)"/>
+<path d="M189,297L219,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,312A15 15 0 0 0 255 297A15 15 0 0 0 240 281A15 15 0 0 0 225 297A15 15 0 0 0 240 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="240" y="297" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="278,297 266,301 266,292" style="fill:rgb(0,0,0)"/>
+<path d="M255,297L272,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,312L327,312L327,281L278,281Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="297" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="350,297 339,301 339,292" style="fill:rgb(0,0,0)"/>
+<path d="M327,297L344,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,312A15 15 0 0 0 380 297A15 15 0 0 0 365 281A15 15 0 0 0 350 297A15 15 0 0 0 365 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="297" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,297 772,301 772,292" style="fill:rgb(0,0,0)"/>
+<path d="M380,297L778,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297 L 791,297 Q 798,297 798,282 L 798,259 L 798,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="227,334 215,339 215,330" style="fill:rgb(0,0,0)"/>
+<path d="M189,297 L 196,297 Q 204,297 204,312 L 204,319 Q 204,334 212,334 L 221,334" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,349L340,349L340,319L227,319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="334" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="363,334 351,339 351,330" style="fill:rgb(0,0,0)"/>
+<path d="M340,334L357,334" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,334 L 395,334 Q 410,334 410,319 L 410,312 Q 410,297 425,297 L 431,297 L 446,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="227,372 215,376 215,368" style="fill:rgb(0,0,0)"/>
+<path d="M189,297 L 196,297 Q 204,297 204,312 L 204,357 Q 204,372 212,372 L 221,372" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,387L364,387L364,357L227,357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="372" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="387,372 376,376 376,368" style="fill:rgb(0,0,0)"/>
+<path d="M364,372L382,372" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,372 L 399,372 Q 410,372 410,357 L 410,312 Q 410,297 425,297 L 431,297 L 446,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,410 58,414 58,406" style="fill:rgb(0,0,0)"/>
+<path d="M47,281 L 47,395 Q 47,410 56,410 L 64,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,425L149,425A15 15 0 0 0 164 410A15 15 0 0 0 149 395L85,395A15 15 0 0 0 70 410A15 15 0 0 0 85 425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="117" y="410" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="187,410 176,414 176,406" style="fill:rgb(0,0,0)"/>
+<path d="M164,410L182,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M202,425L308,425A15 15 0 0 0 323 410A15 15 0 0 0 308 395L202,395A15 15 0 0 0 187 410A15 15 0 0 0 202 425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="255" y="410" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="783,410 772,414 772,406" style="fill:rgb(0,0,0)"/>
+<path d="M323,410L778,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,410 L 791,410 Q 798,410 798,395 L 798,296 L 798,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,448 58,452 58,443" style="fill:rgb(0,0,0)"/>
+<path d="M47,395 L 47,433 Q 47,448 56,448 L 64,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,463L236,463L236,433L70,433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="448" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-key-clause</text>
+<polygon points="783,448 772,452 772,443" style="fill:rgb(0,0,0)"/>
+<path d="M236,448L778,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,448 L 791,448 Q 798,448 798,433 L 798,410 L 798,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,486 58,490 58,481" style="fill:rgb(0,0,0)"/>
+<path d="M47,433 L 47,471 Q 47,486 56,486 L 64,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,501L178,501A15 15 0 0 0 193 486A15 15 0 0 0 178 470L85,470A15 15 0 0 0 70 486A15 15 0 0 0 85 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="131" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GENERATED</text>
+<polygon points="216,486 204,490 204,481" style="fill:rgb(0,0,0)"/>
+<path d="M193,486L210,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M231,501L286,501A15 15 0 0 0 301 486A15 15 0 0 0 286 470L231,470A15 15 0 0 0 216 486A15 15 0 0 0 231 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALWAYS</text>
+<polygon points="337,486 325,490 325,481" style="fill:rgb(0,0,0)"/>
+<path d="M301,486L331,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M352,501L356,501A15 15 0 0 0 371 486A15 15 0 0 0 356 470L352,470A15 15 0 0 0 337 486A15 15 0 0 0 352 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="394,486 382,490 382,481" style="fill:rgb(0,0,0)"/>
+<path d="M371,486L388,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,501A15 15 0 0 0 424 486A15 15 0 0 0 409 470A15 15 0 0 0 394 486A15 15 0 0 0 409 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="486" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="447,486 436,490 436,481" style="fill:rgb(0,0,0)"/>
+<path d="M424,486L441,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,501L496,501L496,470L447,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="472" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="519,486 508,490 508,481" style="fill:rgb(0,0,0)"/>
+<path d="M496,486L514,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,501A15 15 0 0 0 550 486A15 15 0 0 0 535 470A15 15 0 0 0 519 486A15 15 0 0 0 535 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="535" y="486" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,486 772,490 772,481" style="fill:rgb(0,0,0)"/>
+<path d="M550,486L778,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,486 L 791,486 Q 798,486 798,471 L 798,448 L 798,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="185,516 174,520 174,511" style="fill:rgb(0,0,0)"/>
+<path d="M47,470 L 47,501 Q 47,516 62,516 L 165,516 L 180,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M185,516 L 297,516 Q 312,516 312,501 L 312,501 Q 312,486 320,486 L 327,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="596,561 584,565 584,557" style="fill:rgb(0,0,0)"/>
+<path d="M550,486 L 561,486 Q 573,486 573,501 L 573,546 Q 573,561 581,561 L 590,561" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M611,576L670,576A15 15 0 0 0 686 561A15 15 0 0 0 670 546L611,546A15 15 0 0 0 596 561A15 15 0 0 0 611 576Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="641" y="561" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIRTUAL</text>
+<polygon points="783,561 772,565 772,557" style="fill:rgb(0,0,0)"/>
+<path d="M686,561L778,561" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,561 L 791,561 Q 798,561 798,546 L 798,485 L 798,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="596,523 584,528 584,519" style="fill:rgb(0,0,0)"/>
+<path d="M550,486 L 561,486 Q 573,486 573,501 L 573,508 Q 573,523 581,523 L 590,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M611,538L665,538A15 15 0 0 0 680 523A15 15 0 0 0 665 508L611,508A15 15 0 0 0 596 523A15 15 0 0 0 611 538Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="638" y="523" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">STORED</text>
+<polygon points="783,523 772,528 772,519" style="fill:rgb(0,0,0)"/>
+<path d="M680,523L778,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,523 L 791,523 Q 798,523 798,516 L 798,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/conflict-clause.html">conflict-clause:</a></b>
+<button id='x1287' onclick='hideorshow("x1287","x1288")'>show</button></p>
+ <div id='x1288' style='display:none;' class='imgcontainer'>
+ <div style="max-width:451px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 451.517 205.2">
+<circle cx="5" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,6 20,10 20,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L26,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,36 58,41 58,32" style="fill:rgb(0,0,0)"/>
+<path d="M32,6 L 39,6 Q 47,6 47,21 L 47,21 Q 47,36 56,36 L 64,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,51L94,51A15 15 0 0 0 109 36L109,36A15 15 0 0 0 94 21L85,21A15 15 0 0 0 70 36L70,36A15 15 0 0 0 85 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="132,36 121,41 121,32" style="fill:rgb(0,0,0)"/>
+<path d="M109,36L126,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M147,51L222,51A15 15 0 0 0 237 36L237,36A15 15 0 0 0 222 21L147,21A15 15 0 0 0 132 36L132,36A15 15 0 0 0 147 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="273,36 261,41 261,32" style="fill:rgb(0,0,0)"/>
+<path d="M237,36L267,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,51L365,51A15 15 0 0 0 381 36L381,36A15 15 0 0 0 365 21L288,21A15 15 0 0 0 273 36L273,36A15 15 0 0 0 288 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="327" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<path d="M288,89L330,89A15 15 0 0 0 345 74L345,74A15 15 0 0 0 330 59L288,59A15 15 0 0 0 273 74L273,74A15 15 0 0 0 288 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<path d="M288,127L310,127A15 15 0 0 0 325 112A15 15 0 0 0 310 97L288,97A15 15 0 0 0 273 112A15 15 0 0 0 288 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<path d="M288,165L340,165A15 15 0 0 0 355 150A15 15 0 0 0 340 135L288,135A15 15 0 0 0 273 150A15 15 0 0 0 288 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="314" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<path d="M288,203L352,203A15 15 0 0 0 367 187A15 15 0 0 0 352 172L288,172A15 15 0 0 0 273 187A15 15 0 0 0 288 203Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="320" y="187" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="404,36 392,41 392,32" style="fill:rgb(0,0,0)"/>
+<path d="M381,36L398,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,6 430,10 430,2" style="fill:rgb(0,0,0)"/>
+<path d="M404,36 L 411,36 Q 419,36 419,21 L 419,21 Q 419,6 427,6 L 436,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="445" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="225,6 214,10 214,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L219,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,6L434,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,187 261,192 261,183" style="fill:rgb(0,0,0)"/>
+<path d="M237,36 L 244,36 Q 252,36 252,51 L 252,172 Q 252,187 259,187 L 267,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,187 392,192 392,183" style="fill:rgb(0,0,0)"/>
+<path d="M367,187L398,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,187 L 411,187 Q 419,187 419,172 L 419,36 L 419,21" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,74 261,78 261,70" style="fill:rgb(0,0,0)"/>
+<path d="M252,59 L 252,66 Q 252,74 259,74 L 267,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,74 392,78 392,70" style="fill:rgb(0,0,0)"/>
+<path d="M345,74L398,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,74 L 411,74 Q 419,74 419,67 L 419,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,112 261,116 261,108" style="fill:rgb(0,0,0)"/>
+<path d="M252,97 L 252,104 Q 252,112 259,112 L 267,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,112 392,116 392,108" style="fill:rgb(0,0,0)"/>
+<path d="M325,112L398,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,112 L 411,112 Q 419,112 419,104 L 419,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,150 261,154 261,145" style="fill:rgb(0,0,0)"/>
+<path d="M252,135 L 252,142 Q 252,150 259,150 L 267,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,150 392,154 392,145" style="fill:rgb(0,0,0)"/>
+<path d="M355,150L398,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,150 L 411,150 Q 419,150 419,142 L 419,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1289' onclick='hideorshow("x1289","x1290")'>show</button></p>
+ <div id='x1290' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1291' onclick='hideorshow("x1291","x1292")'>show</button></p>
+ <div id='x1292' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1293' onclick='hideorshow("x1293","x1294")'>show</button></p>
+ <div id='x1294' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1295' onclick='hideorshow("x1295","x1296")'>show</button></p>
+ <div id='x1296' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1297' onclick='hideorshow("x1297","x1298")'>show</button></p>
+ <div id='x1298' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1299' onclick='hideorshow("x1299","x1300")'>show</button></p>
+ <div id='x1300' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1301' onclick='hideorshow("x1301","x1302")'>show</button></p>
+ <div id='x1302' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1303' onclick='hideorshow("x1303","x1304")'>show</button></p>
+ <div id='x1304' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1305' onclick='hideorshow("x1305","x1306")'>show</button></p>
+ <div id='x1306' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1307' onclick='hideorshow("x1307","x1308")'>show</button></p>
+ <div id='x1308' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1309' onclick='hideorshow("x1309","x1310")'>show</button></p>
+ <div id='x1310' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1311' onclick='hideorshow("x1311","x1312")'>show</button></p>
+ <div id='x1312' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1313' onclick='hideorshow("x1313","x1314")'>show</button></p>
+ <div id='x1314' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1315' onclick='hideorshow("x1315","x1316")'>show</button></p>
+ <div id='x1316' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1317' onclick='hideorshow("x1317","x1318")'>show</button></p>
+ <div id='x1318' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1319' onclick='hideorshow("x1319","x1320")'>show</button></p>
+ <div id='x1320' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1321' onclick='hideorshow("x1321","x1322")'>show</button></p>
+ <div id='x1322' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/foreign-key-clause.html">foreign-key-clause:</a></b>
+<button id='x1323' onclick='hideorshow("x1323","x1324")'>show</button></p>
+ <div id='x1324' style='display:none;' class='imgcontainer'>
+ <div style="max-width:648px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 648.158 492.48">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L164,70A15 15 0 0 0 179 55A15 15 0 0 0 164 39L60,39A15 15 0 0 0 45 55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REFERENCES</text>
+<polygon points="202,55 190,59 190,50" style="fill:rgb(0,0,0)"/>
+<path d="M179,55L196,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,70L306,70A15 15 0 0 0 322 55A15 15 0 0 0 306 39L217,39A15 15 0 0 0 202 55A15 15 0 0 0 217 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-table</text>
+<polygon points="358,55 346,59 346,50" style="fill:rgb(0,0,0)"/>
+<path d="M322,55L352,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,70A15 15 0 0 0 388 55A15 15 0 0 0 373 39A15 15 0 0 0 358 55A15 15 0 0 0 373 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="373" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="424,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M388,55L418,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M439,70L533,70A15 15 0 0 0 548 55A15 15 0 0 0 533 39L439,39A15 15 0 0 0 424 55A15 15 0 0 0 439 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="584,55 573,59 573,50" style="fill:rgb(0,0,0)"/>
+<path d="M548,55L578,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M599,70A15 15 0 0 0 614 55A15 15 0 0 0 599 39A15 15 0 0 0 584 55A15 15 0 0 0 599 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="599" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M486,32A15 15 0 0 0 501 17L501,17A15 15 0 0 0 486 2A15 15 0 0 0 471 17L471,17A15 15 0 0 0 486 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="501,17 513,12 513,21" style="fill:rgb(0,0,0)"/>
+<path d="M548,55 L 556,55 Q 563,55 563,40 L 563,32 Q 563,17 548,17 L 522,17 L 507,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,17 L 416,17 Q 401,17 401,32 L 401,40 Q 401,55 412,55 L 424,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,176L69,176A15 15 0 0 0 84 160A15 15 0 0 0 69 145L60,145A15 15 0 0 0 45 160A15 15 0 0 0 60 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="64" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="120,160 109,165 109,156" style="fill:rgb(0,0,0)"/>
+<path d="M84,160L114,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,176L188,176A15 15 0 0 0 203 160A15 15 0 0 0 188 145L135,145A15 15 0 0 0 120 160A15 15 0 0 0 135 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="162" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="275,160 264,165 264,156" style="fill:rgb(0,0,0)"/>
+<path d="M203,160L269,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,176L306,176A15 15 0 0 0 321 160A15 15 0 0 0 306 145L290,145A15 15 0 0 0 275 160A15 15 0 0 0 290 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="344,160 332,165 332,156" style="fill:rgb(0,0,0)"/>
+<path d="M321,160L338,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M359,176L390,176A15 15 0 0 0 405 160A15 15 0 0 0 390 145L359,145A15 15 0 0 0 344 160A15 15 0 0 0 359 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<path d="M135,213L189,213A15 15 0 0 0 204 198A15 15 0 0 0 189 183L135,183A15 15 0 0 0 120 198A15 15 0 0 0 135 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="162" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="120,198 109,203 109,194" style="fill:rgb(0,0,0)"/>
+<path d="M84,160 L 92,160 Q 99,160 99,175 L 99,183 Q 99,198 107,198 L 114,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M204,198 L 212,198 Q 219,198 219,183 L 219,175 Q 219,160 227,160 L 234,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,213L306,213A15 15 0 0 0 321 198A15 15 0 0 0 306 183L290,183A15 15 0 0 0 275 198A15 15 0 0 0 290 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="344,198 332,203 332,194" style="fill:rgb(0,0,0)"/>
+<path d="M321,198L338,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M359,213L424,213A15 15 0 0 0 440 198A15 15 0 0 0 424 183L359,183A15 15 0 0 0 344 198A15 15 0 0 0 359 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="392" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="463,198 451,203 451,194" style="fill:rgb(0,0,0)"/>
+<path d="M440,198L457,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,198 L 470,198 Q 478,198 478,191 L 478,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,251L357,251A15 15 0 0 0 372 236A15 15 0 0 0 357 221L290,221A15 15 0 0 0 275 236A15 15 0 0 0 290 251Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="324" y="236" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASCADE</text>
+<polygon points="463,236 451,240 451,232" style="fill:rgb(0,0,0)"/>
+<path d="M372,236L457,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,236 L 470,236 Q 478,236 478,229 L 478,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,289L361,289A15 15 0 0 0 376 274A15 15 0 0 0 361 259L290,259A15 15 0 0 0 275 274A15 15 0 0 0 290 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RESTRICT</text>
+<polygon points="463,274 451,278 451,270" style="fill:rgb(0,0,0)"/>
+<path d="M376,274L457,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,274 L 470,274 Q 478,274 478,266 L 478,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,327L299,327A15 15 0 0 0 314 312A15 15 0 0 0 299 297L290,297A15 15 0 0 0 275 312A15 15 0 0 0 290 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="295" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="337,312 326,316 326,307" style="fill:rgb(0,0,0)"/>
+<path d="M314,312L332,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M353,327L404,327A15 15 0 0 0 419 312A15 15 0 0 0 404 297L353,297A15 15 0 0 0 337 312A15 15 0 0 0 353 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="378" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ACTION</text>
+<polygon points="463,312 451,316 451,307" style="fill:rgb(0,0,0)"/>
+<path d="M419,312L457,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,312 L 470,312 Q 478,312 478,304 L 478,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357L108,357A15 15 0 0 0 123 342L123,342A15 15 0 0 0 108 327L60,327A15 15 0 0 0 45 342L45,342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="84" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<polygon points="146,342 135,346 135,338" style="fill:rgb(0,0,0)"/>
+<path d="M123,342L140,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M161,357L188,357A15 15 0 0 0 203 342L203,342A15 15 0 0 0 188 327L161,327A15 15 0 0 0 146 342L146,342A15 15 0 0 0 161 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="175" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="463,342 451,346 451,338" style="fill:rgb(0,0,0)"/>
+<path d="M203,342L457,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,115 453,111 453,119" style="fill:rgb(0,0,0)"/>
+<path d="M463,342 L 470,342 Q 478,342 478,327 L 478,130 Q 478,115 463,115 L 462,115 L 447,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="463,160 451,165 451,156" style="fill:rgb(0,0,0)"/>
+<path d="M405,160L457,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,160 L 470,160 Q 478,160 478,153 L 478,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,312 264,316 264,307" style="fill:rgb(0,0,0)"/>
+<path d="M237,160 L 245,160 Q 252,160 252,175 L 252,297 Q 252,312 261,312 L 269,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,274 264,278 264,270" style="fill:rgb(0,0,0)"/>
+<path d="M252,259 L 252,266 Q 252,274 261,274 L 269,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,236 264,240 264,232" style="fill:rgb(0,0,0)"/>
+<path d="M252,221 L 252,228 Q 252,236 261,236 L 269,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,198 264,203 264,194" style="fill:rgb(0,0,0)"/>
+<path d="M252,183 L 252,191 Q 252,198 261,198 L 269,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,160 33,165 33,156" style="fill:rgb(0,0,0)"/>
+<path d="M614,55 L 623,55 Q 632,55 632,70 L 632,100 Q 632,115 617,115 L 20,115 Q 5,115 5,130 L 5,145 Q 5,160 20,160 L 24,160 L 39,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M5,145 L 5,327 Q 5,342 20,342 L 24,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="337,91 332,79 341,79" style="fill:rgb(0,0,0)"/>
+<path d="M322,55 L 329,55 Q 337,55 337,70 L 337,70 L 337,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M337,91 L 337,103 Q 337,115 329,115 L 322,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,433L80,433A15 15 0 0 0 95 417A15 15 0 0 0 80 402L60,402A15 15 0 0 0 45 417A15 15 0 0 0 60 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="133,387 122,392 122,383" style="fill:rgb(0,0,0)"/>
+<path d="M95,417 L 103,417 Q 110,417 110,402 L 110,402 Q 110,387 119,387 L 127,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M148,402L250,402A15 15 0 0 0 265 387A15 15 0 0 0 250 372L148,372A15 15 0 0 0 133 387A15 15 0 0 0 148 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="387" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRABLE</text>
+<polygon points="303,417 292,422 292,413" style="fill:rgb(0,0,0)"/>
+<path d="M265,387 L 273,387 Q 280,387 280,402 L 280,402 Q 280,417 289,417 L 297,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M318,433L389,433A15 15 0 0 0 405 417A15 15 0 0 0 389 402L318,402A15 15 0 0 0 303 417A15 15 0 0 0 318 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INITIALLY</text>
+<polygon points="428,417 416,422 416,413" style="fill:rgb(0,0,0)"/>
+<path d="M405,417L422,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M443,433L523,433A15 15 0 0 0 538 417A15 15 0 0 0 523 402L443,402A15 15 0 0 0 428 417A15 15 0 0 0 443 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRED</text>
+<path d="M318,470L389,470A15 15 0 0 0 405 455A15 15 0 0 0 389 440L318,440A15 15 0 0 0 303 455A15 15 0 0 0 318 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INITIALLY</text>
+<polygon points="428,455 416,460 416,451" style="fill:rgb(0,0,0)"/>
+<path d="M405,455L422,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M443,470L531,470A15 15 0 0 0 546 455A15 15 0 0 0 531 440L443,440A15 15 0 0 0 428 455A15 15 0 0 0 443 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="487" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IMMEDIATE</text>
+<polygon points="569,455 558,460 558,451" style="fill:rgb(0,0,0)"/>
+<path d="M546,455L564,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="569,417 558,422 558,413" style="fill:rgb(0,0,0)"/>
+<path d="M538,417L564,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="569,387 558,392 558,383" style="fill:rgb(0,0,0)"/>
+<path d="M265,387L564,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="303,455 292,460 292,451" style="fill:rgb(0,0,0)"/>
+<path d="M265,387 L 273,387 Q 280,387 280,402 L 280,440 Q 280,455 289,455 L 297,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="638,486 627,490 627,481" style="fill:rgb(0,0,0)"/>
+<path d="M569,387 L 577,387 Q 584,387 584,402 L 584,471 Q 584,486 599,486 L 618,486 L 633,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="642" cy="486" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,455 L 577,455 Q 584,455 584,463 L 584,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,417 L 577,417 Q 584,417 584,425 L 584,432" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M5,327 L 5,471 Q 5,486 20,486 L 612,486 L 627,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M5,372 L 5,380 Q 5,387 20,387 L 118,387 L 133,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M5,402 L 5,410 Q 5,417 20,417 L 24,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1325' onclick='hideorshow("x1325","x1326")'>show</button></p>
+ <div id='x1326' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1327' onclick='hideorshow("x1327","x1328")'>show</button></p>
+ <div id='x1328' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1329' onclick='hideorshow("x1329","x1330")'>show</button></p>
+ <div id='x1330' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1331' onclick='hideorshow("x1331","x1332")'>show</button></p>
+ <div id='x1332' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+<p>SQLite supports a limited subset of ALTER TABLE.
+The ALTER TABLE command in SQLite allows
+these alterations of an existing table:
+it can be renamed;
+a column can be renamed;
+a column can be added to it;
+or
+a column can be dropped from it.
+
+<a name="altertabrename"></a>
+
+</p><h1 id="alter_table_rename"><span>2. </span>ALTER TABLE RENAME</h1>
+
+<p> The RENAME TO syntax changes the name of <span class='yyterm'>table-name</span>
+to <span class='yyterm'>new-table-name</span>.
+This command
+cannot be used to move a table between attached databases, only to rename
+a table within the same database.
+If the table being renamed has triggers or indices, then these remain
+attached to the table after it has been renamed.
+
+</p><blockquote style="background-color: #ffd0d0;">
+<b>Compatibility Note:</b>
+The behavior of ALTER TABLE when renaming a table was enhanced
+in versions 3.25.0 (2018-09-15) and 3.26.0 (2018-12-01)
+in order to carry the rename operation forward into triggers and
+views that reference the renamed table. This is considered an
+improvement. Applications that depend on the older (and
+arguably buggy) behavior can use the
+<a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table=ON</a> statement or the
+<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable">SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</a> configuration parameter
+on <a href="c3ref/db_config.html">sqlite3_db_config()</a> interface to make ALTER TABLE RENAME
+behave as it did prior to version 3.25.0.
+</blockquote>
+
+<p>
+Beginning with release 3.25.0 (2018-09-15), references to the table
+within trigger bodies and view definitions are also renamed.
+</p>
+
+<p> Prior to version 3.26.0 (2018-12-01), FOREIGN KEY references
+to a table that is renamed were only edited if the
+<a href="pragma.html#pragma_foreign_keys">PRAGMA foreign_keys=ON</a>, or in other words if
+<a href="foreignkeys.html">foreign key constraints</a> were being enforced. With
+<a href="pragma.html#pragma_foreign_keys">PRAGMA foreign_keys=OFF</a>, FOREIGN KEY constraints would not be changed
+when the table that the foreign key referred to (the "<a href="foreignkeys.html#parentchild">parent table</a>")
+was renamed. Beginning with version 3.26.0, FOREIGN KEY constraints
+are always converted when a table is renamed, unless the
+<a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table=ON</a> setting is engaged. The following
+table summarizes the difference:</p>
+
+<blockquote>
+<table border="1" cellpadding="2" cellspacing="0">
+<tr>
+<th>PRAGMA foreign_keys
+</th><th>PRAGMA legacy_alter_table
+</th><th><a href="foreignkeys.html#parentchild">Parent Table</a>
+references are updated
+</th><th>SQLite version
+</th></tr><tr><td align="center">Off</td><td align="center">Off</td><td align="center">No</td><td align="center">&lt; 3.26.0
+</td></tr><tr><td align="center">Off</td><td align="center">Off</td><td align="center">Yes</td><td align="center">&gt;= 3.26.0
+</td></tr><tr><td align="center">On</td><td align="center">Off</td><td align="center">Yes</td><td align="center">all
+</td></tr><tr><td align="center">Off</td><td align="center">On</td><td align="center">No</td><td align="center">all
+</td></tr><tr><td align="center">On</td><td align="center">On</td><td align="center">Yes</td><td align="center">all
+</td></tr></table>
+</blockquote>
+
+<a name="altertabmvcol"></a>
+
+<h1 id="alter_table_rename_column"><span>3. </span>ALTER TABLE RENAME COLUMN</h1>
+
+<p> The RENAME COLUMN TO syntax changes the
+<span class='yyterm'>column-name</span> of table <span class='yyterm'>table-name</span>
+into <span class='yyterm'>new-column-name</span>. The column name is changed both
+within the table definition itself and also within all indexes, triggers,
+and views that reference the column. If the column name change would
+result in a semantic ambiguity in a trigger or view, then the RENAME
+COLUMN fails with an error and no changes are applied.
+
+<a name="altertabaddcol"></a>
+
+</p><h1 id="alter_table_add_column"><span>4. </span>ALTER TABLE ADD COLUMN</h1>
+
+<p> The ADD COLUMN syntax
+is used to add a new column to an existing table.
+The new column is always appended to the end of the list of existing columns.
+The <a href="syntax/column-def.html">column-def</a> rule defines the characteristics of the new column.
+The new column may take any of the forms permissible in a <a href="lang_createtable.html">CREATE TABLE</a>
+statement, with the following restrictions:
+</p><ul>
+<li>The column may not have a PRIMARY KEY or UNIQUE constraint.</li>
+<li>The column may not have a default value of CURRENT_TIME, CURRENT_DATE,
+ CURRENT_TIMESTAMP, or an expression in parentheses.</li>
+<li>If a NOT NULL constraint is specified, then the column must have a
+ default value other than NULL.
+</li><li>If <a href="foreignkeys.html">foreign key constraints</a> are <a href="pragma.html#pragma_foreign_keys">enabled</a> and
+ a column with a <a href="syntax/foreign-key-clause.html">REFERENCES clause</a>
+ is added, the column must have a default value of NULL.
+</li><li>The column may not be <a href="gencol.html">GENERATED ALWAYS ... STORED</a>,
+though VIRTUAL columns are allowed.
+</li></ul>
+
+<p>When adding a column with a <a href="lang_createtable.html#ckconst">CHECK constraint</a>, or a NOT NULL constraint
+on a <a href="gencol.html">generated column</a>, the added constraints are tested against all
+preexisting rows in the table and the ADD COLUMN fails
+if any constraint fails. The testing of added constraints
+against preexisting rows is a new enhancement as of SQLite version
+3.37.0 (2021-11-27).</p>
+
+<p>The ALTER TABLE command works by modifying the SQL text of the schema
+stored in the <a href="schematab.html">sqlite_schema table</a>.
+No changes are made to table content for renames or column addition without
+constraints.
+Because of this,
+the execution time of such ALTER TABLE commands is independent of
+the amount of data in the table and such commands will
+run as quickly on a table with 10 million rows as on a table with 1 row.
+When adding new columns that have CHECK constraints, or adding generated
+columns with NOT NULL constraints, or when deleting columns, then all
+existing data in the table must be either read (to test new constraints
+against existing rows) or written (to remove deleted columns). In those
+cases, the ALTER TABLE command takes time that is proportional to the
+amount of content in the table being altered.
+</p>
+
+<p>After ADD COLUMN has been run on a database, that database will not
+be readable by SQLite version 3.1.3 (2005-02-20) and earlier.</p>
+
+<a name="altertabdropcol"></a>
+
+<h1 id="alter_table_drop_column"><span>5. </span>ALTER TABLE DROP COLUMN</h1>
+
+<p> The DROP COLUMN syntax
+is used to remove an existing column from a table.
+The DROP COLUMN command removes the named column from the table,
+and rewrites its content to purge the data associated
+with that column.
+The DROP COLUMN command only works if the column is not referenced
+by any other parts of the schema and is not a PRIMARY KEY and
+does not have a UNIQUE constraint.
+Possible reasons why the DROP COLUMN command can fail include:
+</p><ul>
+<li>The column is a PRIMARY KEY or part of one.
+</li><li>The column has a UNIQUE constraint.
+</li><li>The column is indexed.
+</li><li>The column is named in the WHERE clause of a <a href="partialindex.html">partial index</a>.
+</li><li>The column is named in a table or column <a href="lang_createtable.html#ckconst">CHECK constraint</a>
+not associated with the column being dropped.
+</li><li>The column is used in a <a href="foreignkeys.html">foreign key constraint</a>.
+</li><li>The column is used in the expression of a <a href="gencol.html">generated column</a>.
+</li><li>The column appears in a trigger or view.
+</li></ul>
+
+<h2 id="how_it_works"><span>5.1. </span>How It Works</h2>
+
+<p>SQLite stores the schema as plain text in the <a href="schematab.html">sqlite_schema table</a>.
+The DROP COLUMN command (and all of the other variations of ALTER TABLE
+as well) modify that text and then attempt to reparse the entire schema.
+The command is only successful if the schema is still valid after the
+text has been modified. In the case of the DROP COLUMN command, the
+only text modified is that the column definition is removed from the
+CREATE TABLE statement. The DROP COLUMN command will fail if there
+are any traces of the column in other parts of the schema that will
+prevent the schema from parsing after the CREATE TABLE statement has
+been modified.
+
+</p><h1 id="disable_error_checking_using_pragma_writable_schema_on"><span>6. </span>Disable Error Checking Using PRAGMA writable_schema=ON</h1>
+
+<p>ALTER TABLE will normally fail and make no changes if it encounters
+any entries in the <a href="schematab.html">sqlite_schema table</a> that do not parse. For
+example, if there is a malformed VIEW or TRIGGER associated with
+table named "tbl1", then an attempt to rename "tbl1" to "tbl1neo" will
+fail because the associated views and triggers could not be parsed.
+
+</p><p>Beginning with SQLite 3.38.0 (2022-02-22), this error checking
+can be disabled by setting "<a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON;</a>". When
+the schema is writable, ALTER TABLE silently ignores any rows of the
+sqlite_schema table that do not parse.
+
+<a name="otheralter"></a>
+
+</p><h1 id="making_other_kinds_of_table_schema_changes"><span>7. </span>Making Other Kinds Of Table Schema Changes</h1>
+
+<p> The only schema altering commands directly supported by SQLite are the
+"<a href="lang_altertable.html#altertabrename">rename table</a>", "<a href="lang_altertable.html#altertabmvcol">rename column</a>", "<a href="lang_altertable.html#altertabaddcol">add column</a>", "<a href="lang_altertable.html#altertabdropcol">drop column</a>"
+commands shown above. However, applications
+can make other arbitrary changes to the format of a table using a simple
+sequence of operations.
+The steps to make arbitrary changes to the schema design of some table X
+are as follows:
+
+</p><ol>
+<li><p>
+If foreign key constraints are enabled, disable them using <a href="pragma.html#pragma_foreign_keys">PRAGMA foreign_keys=OFF</a>.
+
+</p></li><li><p>
+Start a transaction.
+
+</p></li><li><p>
+Remember the format of all indexes, triggers, and views associated with table X.
+This information will be needed in step 8 below. One way to do this is
+to run a query like the following:
+SELECT type, sql FROM sqlite_schema WHERE tbl_name='X'.
+
+</p></li><li><p>
+Use <a href="lang_createtable.html">CREATE TABLE</a> to construct a new table "new_X" that is in the desired
+revised format of table X. Make sure that the name "new_X" does not collide
+with any existing table name, of course.
+
+</p></li><li><p>
+Transfer content from X into new_X using a statement
+like: INSERT INTO new_X SELECT ... FROM X.
+
+</p></li><li><p>
+Drop the old table X: <a href="lang_droptable.html">DROP TABLE X</a>.
+
+</p></li><li><p>
+Change the name of new_X to X using: ALTER TABLE new_X RENAME TO X.
+
+</p></li><li><p>
+Use <a href="lang_createindex.html">CREATE INDEX</a>, <a href="lang_createtrigger.html">CREATE TRIGGER</a>, and <a href="lang_createview.html">CREATE VIEW</a>
+to reconstruct indexes, triggers, and views
+associated with table X. Perhaps use the old format of the triggers,
+indexes, and views saved from step 3 above as a guide, making changes
+as appropriate for the alteration.
+
+</p></li><li><p>If any views refer to table X in a way that is affected by the
+schema change, then drop those views using <a href="lang_dropview.html">DROP VIEW</a> and recreate them
+with whatever changes are necessary to accommodate the schema change
+using <a href="lang_createview.html">CREATE VIEW</a>.
+
+</p></li><li><p>
+If foreign key constraints were originally enabled
+then run <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> to verify that the schema
+change did not break any foreign key constraints.
+
+
+</p></li><li><p>
+Commit the transaction started in step 2.
+
+</p></li><li><p>
+If foreign keys constraints were originally enabled, reenable them now.
+</p></li></ol>
+
+<a name="caution"></a>
+
+<p>
+<b>Caution:</b>
+Take care to follow the procedure above precisely. The boxes below
+summarize two procedures for modifying a table definition. At first
+glance, they both appear to accomplish the same thing. However, the
+procedure on the right does not always work, especially with the
+enhanced <a href="lang_altertable.html#altertabrename">rename table</a> capabilities added by versions 3.25.0 and
+3.26.0. In the procedure on the right, the initial rename of the
+table to a temporary name might corrupt references to that table in
+triggers, views, and foreign key constraints. The safe procedure on
+the left constructs the revised table definition using a new temporary
+name, then renames the table into its final name, which does not break
+links.
+
+</p><center>
+<table border="1" cellpadding="10" cellspacing="0">
+<tr>
+<td valign="top">
+<ol>
+<li>Create new table
+</li><li>Copy data
+</li><li>Drop old table
+</li><li>Rename new into old
+</li></ol>
+</td><td valign="top">
+<ol>
+<li>Rename old table
+</li><li>Create new table
+</li><li>Copy data
+</li><li>Drop old table
+</li></ol>
+</td></tr><tr>
+<th>&uarr;<br>Correct
+</th><th>&uarr;<br>Incorrect
+</th></tr></table>
+</center>
+
+<p>The 12-step <a href="lang_altertable.html#otheralter">generalized ALTER TABLE procedure</a>
+above will work even if the
+schema change causes the information stored in the table to change.
+So the full 12-step procedure above is appropriate for dropping a column,
+changing the order of columns, adding or removing a UNIQUE constraint
+or PRIMARY KEY, adding CHECK or FOREIGN KEY or NOT NULL constraints,
+or changing the datatype for a column, for example. However, a simpler
+and faster procedure can optionally be used for
+some changes that do no affect the on-disk content in any way.
+The following simpler procedure is appropriate for removing
+CHECK or FOREIGN KEY or NOT NULL constraints,
+or adding, removing, or changing default values on
+a column.
+
+</p><ol>
+<li><p> Start a transaction.
+
+</p></li><li><p> Run <a href="pragma.html#pragma_schema_version">PRAGMA schema_version</a> to determine the current schema
+version number. This number will be needed for step 6 below.
+
+</p></li><li><p> Activate schema editing using
+<a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
+
+</p></li><li><p> Run an <a href="lang_update.html">UPDATE</a> statement to change the definition of table X
+in the <a href="schematab.html">sqlite_schema table</a>:
+UPDATE sqlite_schema SET sql=... WHERE type='table' AND name='X';
+</p><p><em>Caution:</em> Making a change to the sqlite_schema table like this will
+render the database corrupt and unreadable if the change contains
+a syntax error. It is suggested that careful testing of the UPDATE
+statement be done on a separate blank database prior to using it on
+a database containing important data.
+
+</p></li><li><p> If the change to table X also affects other tables or indexes or
+triggers are views within schema, then run <a href="lang_update.html">UPDATE</a> statements to modify
+those other tables indexes and views too. For example, if the name of
+a column changes, all FOREIGN KEY constraints, triggers, indexes, and
+views that refer to that column must be modified.
+</p><p><em>Caution:</em> Once again, making changes to the sqlite_schema
+table like this will render the database corrupt and unreadable if the
+change contains an error. Carefully test this entire procedure
+on a separate test database prior to using it on
+a database containing important data and/or make backup copies of
+important databases prior to running this procedure.
+
+</p></li><li><p> Increment the schema version number using
+<a href="pragma.html#pragma_schema_version">PRAGMA schema_version=X</a> where X is one
+more than the old schema version number found in step 2 above.
+
+</p></li><li><p> Disable schema editing using
+<a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=OFF</a>.
+
+</p></li><li><p> (Optional) Run <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to verify that the
+schema changes did not damage the database.
+
+</p></li><li><p> Commit the transaction started on step 1 above.
+</p></li></ol>
+
+<p>If some future version of SQLite adds new ALTER TABLE capabilities,
+those capabilities will very likely use one of the two procedures
+outlined above.
+
+<a name="altertableishard"></a>
+
+</p><h1 id="why_alter_table_is_such_a_problem_for_sqlite"><span>8. </span>Why ALTER TABLE is such a problem for SQLite</h1>
+
+<p>Most SQL database engines store the schema already parsed into
+various system tables. On those database engines, ALTER TABLE merely
+has to make modifications to the corresponding system tables.
+
+</p><p>SQLite is different in that it stores the schema
+in the <a href="schematab.html">sqlite_schema</a> table as the original text of the CREATE
+statements that define the schema. Hence ALTER TABLE needs
+to revise the text of the CREATE statement. Doing
+so can be tricky for certain "creative" schema designs.
+
+</p><p>The SQLite approach of storing the schema as text has advantages
+for an embedded relational database. For one, it means that the
+schema takes up less space in the database file. This is important
+since a common SQLite usage pattern is to have many small,
+separate database files instead of putting everything in one
+big global database file, which is the usual approach for client/server
+database engines.
+Since the schema is duplicated in each separate database file, it is
+important to keep the schema representation compact.
+
+</p><p>Storing the schema as text rather than as parsed tables also
+give flexibility to the implementation. Since the internal parse
+of the schema is regenerated each time the database is opened, the
+internal representation of the schema can change from one release
+to the next. This is important, as sometimes new features require
+enhancements to the internal schema representation. Changing the
+internal schema representation would be much more difficult if the
+schema representation was exposed in the database file. So, in other
+words, storing the schema as text helps maintain backwards
+compatibility, and helps ensure that older database files can be
+read and written by newer versions of SQLite.
+
+</p><p>Storing the schema as text also makes the
+<a href="fileformat2.html">SQLite database file format</a> easier to define, document, and
+understand. This helps make SQLite database files a
+<a href="locrsf.html">recommended storage format</a> for long-term archiving of data.
+
+</p><p>The downside of storing schema a text is that it can make
+the schema tricky to modify. And for that reason, the ALTER TABLE
+support in SQLite has traditionally lagged behind other SQL
+database engines that store their schemas as parsed system tables
+that are easier to modify.
+
+
+
+
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_altertable.in?m=7d2205713ab27ab4c">2022-08-10 18:45:48</a> UTC </small></i></p>
+
diff --git a/www/lang_analyze.html b/www/lang_analyze.html
new file mode 100644
index 0000000..7b90e97
--- /dev/null
+++ b/www/lang_analyze.html
@@ -0,0 +1,350 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>ANALYZE</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+ANALYZE
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p><b><a href="syntax/analyze-stmt.html">analyze-stmt:</a></b>
+<button id='x1333' onclick='hideorshow("x1333","x1334")'>hide</button></p>
+ <div id='x1334' class='imgcontainer'>
+ <div style="max-width:654px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 654.557 140.4">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L111,32A15 15 0 0 0 127 17A15 15 0 0 0 111 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="79" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ANALYZE</text>
+<polygon points="150,17 138,21 138,12" style="fill:rgb(0,0,0)"/>
+<path d="M127,17L144,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="188,123 176,127 176,118" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 157,17 Q 165,17 165,32 L 165,108 Q 165,123 173,123 L 182,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M203,138L299,138A15 15 0 0 0 314 123A15 15 0 0 0 299 108L203,108A15 15 0 0 0 188 123A15 15 0 0 0 203 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="337,123 326,127 326,118" style="fill:rgb(0,0,0)"/>
+<path d="M314,123L332,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M352,138A15 15 0 0 0 368 123A15 15 0 0 0 352 108A15 15 0 0 0 337 123A15 15 0 0 0 352 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="352" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="391,123 379,127 379,118" style="fill:rgb(0,0,0)"/>
+<path d="M368,123L385,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M406,138L556,138A15 15 0 0 0 571 123A15 15 0 0 0 556 108L406,108A15 15 0 0 0 391 123A15 15 0 0 0 406 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-index-name</text>
+<polygon points="594,123 582,127 582,118" style="fill:rgb(0,0,0)"/>
+<path d="M571,123L588,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="645,17 633,21 633,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,123 L 601,123 Q 609,123 609,108 L 609,32 Q 609,17 624,17 L 624,17 L 639,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="648" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,17 386,21 386,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L391,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,17L633,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="188,47 176,51 176,43" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 157,17 Q 165,17 165,32 L 165,32 Q 165,47 173,47 L 182,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M203,62L299,62A15 15 0 0 0 314 47L314,47A15 15 0 0 0 299 32L203,32A15 15 0 0 0 188 47L188,47A15 15 0 0 0 203 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="594,47 582,51 582,43" style="fill:rgb(0,0,0)"/>
+<path d="M314,47L588,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M594,47 L 601,47 Q 609,47 609,40 L 609,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="188,85 176,89 176,81" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 157,17 Q 165,17 165,32 L 165,70 Q 165,85 173,85 L 182,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M203,100L353,100A15 15 0 0 0 368 85A15 15 0 0 0 353 70L203,70A15 15 0 0 0 188 85A15 15 0 0 0 203 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-or-table-name</text>
+<polygon points="594,85 582,89 582,81" style="fill:rgb(0,0,0)"/>
+<path d="M368,85L588,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M594,85 L 601,85 Q 609,85 609,77 L 609,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p> The ANALYZE command gathers statistics about tables and
+indices and stores the collected information
+in <a href="fileformat2.html#intschema">internal tables</a> of the database where the query optimizer can
+access the information and use it to help make better query planning choices.
+If no arguments are given, all attached databases are
+analyzed. If a schema name is given as the argument, then all tables
+and indices in that one database are analyzed.
+If the argument is a table name, then only that table and the
+indices associated with that table are analyzed. If the argument
+is an index name, then only that one index is analyzed.</p>
+
+<a name="req"></a>
+
+<h2 id="recommended_usage_pattern"><span>1.1. </span>Recommended usage pattern</h2>
+
+<p>Applications with long-lived databases that use complex
+queries should consider running the following commands just prior
+to closing each database connection:
+
+</p><div class="codeblock"><pre>PRAGMA analysis_limit=400;
+PRAGMA optimize;
+</pre></div>
+
+<p>The <a href="pragma.html#pragma_optimize">optimize pragma</a> is usually a no-op but it will occasionally
+run ANALYZE if it seems like doing so will be useful to the query planner.
+The <a href="pragma.html#pragma_analysis_limit">analysis_limit pragma</a> limits the scope of any ANALYZE command that
+the <a href="pragma.html#pragma_optimize">optimize pragma</a> runs so that it does not consume too many CPU cycles.
+The constant "400" can be adjusted as needed. Values between 100 and
+1000 work well for most applications.
+
+</p><h1 id="details"><span>2. </span>Details</h1>
+
+<p> The default implementation stores all statistics in a single
+table named "<a href="fileformat2.html#stat1tab">sqlite_stat1</a>".
+ If SQLite is compiled with the
+<a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> option, then additional histogram data is
+collected and stored in <a href="fileformat2.html#stat4tab">sqlite_stat4</a>.
+Older versions of SQLite would make use of the <a href="fileformat2.html#stat2tab">sqlite_stat2</a> table
+or <a href="fileformat2.html#stat3tab">sqlite_stat3</a> table
+when compiled with <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> or <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a>,
+but all recent versions of
+SQLite ignore the sqlite_stat2 and sqlite_stat3 tables.
+Future enhancements may create
+additional <a href="fileformat2.html#intschema">internal tables</a> with the same name pattern except with
+final digit larger than "4".
+All of these tables are collectively referred to as "statistics tables".
+</p>
+
+<p> The content of the statistics tables can be queried using <a href="lang_select.html">SELECT</a>
+and can be changed using the <a href="lang_delete.html">DELETE</a>, <a href="lang_insert.html">INSERT</a>, and <a href="lang_update.html">UPDATE</a> commands.
+The <a href="lang_droptable.html">DROP TABLE</a> command works on statistics tables
+as of SQLite version 3.7.9. (2011-11-01)
+The <a href="lang_altertable.html">ALTER TABLE</a> command does not work on statistics tables.
+Appropriate care should be used when changing the content of the statistics
+tables as invalid content can cause SQLite to select inefficient
+query plans. Generally speaking, one should not modify the content of
+the statistics tables by any mechanism other than invoking the
+ANALYZE command.
+See "<a href="optoverview.html#manctrl">Manual Control Of Query Plans Using SQLITE_STAT Tables</a>" for
+further information.</p>
+
+<p> Statistics gathered by ANALYZE are not automatically updated as
+the content of the database changes. If the content of the database
+changes significantly, or if the database schema changes, then one should
+consider rerunning the ANALYZE command in order to update the statistics.</p>
+
+<p> The query planner loads the content of the statistics tables
+into memory when the schema is read. Hence, when an application
+changes the statistics tables directly, SQLite will not immediately
+notice the changes. An application
+can force the query planner to reread the statistics tables by running
+<b>ANALYZE sqlite_schema</b>. </p>
+
+<a name="autoanalyze"></a>
+
+<h1 id="automatically_running_analyze"><span>3. </span>Automatically Running ANALYZE</h1>
+
+<p>The <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> command will automatically run ANALYZE on individual
+tables on an as-needed basis. The recommended practice is for applications
+to invoke the <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> statement just before closing each database
+connection.</p>
+
+<p>Each SQLite <a href="c3ref/sqlite3.html">database connection</a> records cases when the query planner would
+benefit from having accurate results of ANALYZE at hand. These records
+are held in memory and accumulate over the life of a database connection.
+The <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> command looks at those records and runs ANALYZE on only
+those tables for which new or updated ANALYZE data seems likely to be useful.
+In most cases <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> will not run ANALYZE, but it will occasionally
+do so either for tables that have never before been analyzed, or for tables
+that have grown significantly since they were last analyzed.</p>
+
+<p>Since the actions of <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> are determined to some extent by
+prior queries that have been evaluated on the same database connection, it
+is recommended that <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> be deferred until the database connection
+is closing and has thus had an opportunity to accumulate as much usage information
+as possible. It is also reasonable to set a timer to run <a href="pragma.html#pragma_optimize">PRAGMA optimize</a>
+every few hours, or every few days, for database connections that stay open
+for a long time.</p>
+
+<p>Applications that desire more control can run <a href="pragma.html#pragma_optimize">PRAGMA optimize(0x03)</a> to
+obtain a list of ANALYZE commands that SQLite thinks are appropriate to run,
+but without actually running those commands. If the returned set is
+non-empty, the application can then make a decision about whether or not
+to run the suggested ANALYZE commands, perhaps after prompting the user
+for guidance.</p>
+
+<p>The <a href="pragma.html#pragma_optimize">PRAGMA optimize</a> command was first introduced with
+SQLite 3.18.0 (2017-03-28) and is a no-op for all prior releases
+of SQLite.</p>
+
+<a name="approx"></a>
+
+<h1 id="approximate_analyze_for_large_databases"><span>4. </span>Approximate ANALYZE For Large Databases</h1>
+
+<p>By default, ANALYZE does a full scan of every index. This can be slow for
+large databases. So beginning with SQLite version 3.32.0 (2020-05-22), the
+<a href="pragma.html#pragma_analysis_limit">PRAGMA analysis_limit</a> command can be used to limit the amount of
+scanning performed by ANALYZE, and thus help ANALYZE to run faster,
+even on very large database files. We call this running an
+"approximate ANALYZE".
+
+</p><p>The recommended usage pattern for the <a href="pragma.html#pragma_analysis_limit">analysis_limit</a> pragma is
+like this:
+
+</p><div class="codeblock"><pre>PRAGMA analysis_limit=1000;
+</pre></div>
+
+<p>This pragma tells the ANALYZE command to start a full scan
+of the index as it normally would. But when the number of rows visited
+reaches 1000 (or whatever other limit is specified by the pragma), the
+ANALYZE command will begin taking actions to stop the scan. If
+the left-most column of the index has changed at least once during the
+previous 1000 steps, then the analysis stops immediately. But if the
+left-most column has always been the same, then ANALYZE skips ahead to
+the first entry with a different left-most column and reads an additional
+1000 rows before terminating.
+
+</p><p>The details of the effects of the analysis limit described in the previous
+paragraph are subject to change in future versions of SQLite. But the
+core idea will remain the same. An analysis limit of N will strive to
+limit the number of rows visited in each index to approximately N.
+
+</p><p>Values of N between 100 and 1000 are recommended.
+Or, to disable the analysis limit, causing ANALYZE to do a
+complete scan of each index, set the analysis limit to 0. The default
+value for the analysis limit is 0 for backwards compatibility.
+
+</p><p>The values placed in the sqlite_stat1 table by an approximate ANALYZE
+are not exactly the same as what would be computed by an unrestricted
+analysis. But they are usually close enough. The index statistics in
+the sqlite_stat1 table are approximations in any case, so the fact that
+the results of an approximate ANALYZE are slightly different from
+a traditional full scan ANALYZE has little practical impact. It is
+possible to construct a pathological case where an approximate ANALYZE
+is noticeably inferior to a full-scan ANALYZE, but such cases rare in
+real-world problems.
+
+</p><p>A good rule of thumb seems to be to always set "PRAGMA analysis_limit=N"
+for N between 100 and 1000 prior to running either "ANALYZE" or
+"<a href="pragma.html#pragma_optimize">PRAGMA optimize</a>". The results are not quite as precise, but they
+are precise enough, and the fact that the results are computed so much
+faster means that developers are more likely to compute them. An
+approximate ANALYZE is better than not running ANALYZE at all.
+
+</p><h2 id="limitations_of_approximate_analyze"><span>4.1. </span>Limitations of approximate ANALYZE</h2>
+
+<p>The content in the sqlite_stat4 table cannot be computed with
+anything less than a full scan. Hence, if a non-zero analysis limit
+is specified, the sqlite_stat4 table is not computed.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_analyze.in?m=85eb0dec08045a663">2020-06-18 21:18:56</a> UTC </small></i></p>
+
diff --git a/www/lang_attach.html b/www/lang_attach.html
new file mode 100644
index 0000000..b36988e
--- /dev/null
+++ b/www/lang_attach.html
@@ -0,0 +1,2421 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>ATTACH DATABASE</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+ATTACH DATABASE
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+<p><b><a href="syntax/attach-stmt.html">attach-stmt:</a></b>
+<button id='x1335' onclick='hideorshow("x1335","x1336")'>hide</button></p>
+ <div id='x1336' class='imgcontainer'>
+ <div style="max-width:606px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 606.701 47.952">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L101,32A15 15 0 0 0 116 17A15 15 0 0 0 101 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ATTACH</text>
+<polygon points="139,17 128,21 128,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L134,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="175,17 164,21 164,12" style="fill:rgb(0,0,0)"/>
+<path d="M139,17L170,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,32L267,32A15 15 0 0 0 282 17A15 15 0 0 0 267 2L191,2A15 15 0 0 0 175 17A15 15 0 0 0 191 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="229" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DATABASE</text>
+<polygon points="318,17 306,21 306,12" style="fill:rgb(0,0,0)"/>
+<path d="M282,17L312,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M318,32L367,32L367,2L318,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="390,17 378,21 378,12" style="fill:rgb(0,0,0)"/>
+<path d="M367,17L384,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M405,32L409,32A15 15 0 0 0 424 17A15 15 0 0 0 409 2L405,2A15 15 0 0 0 390 17A15 15 0 0 0 405 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="407" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="447,17 436,21 436,12" style="fill:rgb(0,0,0)"/>
+<path d="M424,17L441,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,32L559,32A15 15 0 0 0 574 17A15 15 0 0 0 559 2L462,2A15 15 0 0 0 447 17A15 15 0 0 0 462 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="510" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="597,17 585,21 585,12" style="fill:rgb(0,0,0)"/>
+<path d="M574,17L591,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="600" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="229,41 217,45 217,37" style="fill:rgb(0,0,0)"/>
+<path d="M139,17 L 147,17 Q 154,17 154,29 Q 154,41 169,41 L 208,41 L 223,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M229,41 L 276,41 Q 291,41 291,29 Q 291,17 298,17 L 306,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1337' onclick='hideorshow("x1337","x1338")'>show</button></p>
+ <div id='x1338' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1339' onclick='hideorshow("x1339","x1340")'>show</button></p>
+ <div id='x1340' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1341' onclick='hideorshow("x1341","x1342")'>show</button></p>
+ <div id='x1342' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1343' onclick='hideorshow("x1343","x1344")'>show</button></p>
+ <div id='x1344' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1345' onclick='hideorshow("x1345","x1346")'>show</button></p>
+ <div id='x1346' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1347' onclick='hideorshow("x1347","x1348")'>show</button></p>
+ <div id='x1348' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1349' onclick='hideorshow("x1349","x1350")'>show</button></p>
+ <div id='x1350' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1351' onclick='hideorshow("x1351","x1352")'>show</button></p>
+ <div id='x1352' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1353' onclick='hideorshow("x1353","x1354")'>show</button></p>
+ <div id='x1354' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1355' onclick='hideorshow("x1355","x1356")'>show</button></p>
+ <div id='x1356' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1357' onclick='hideorshow("x1357","x1358")'>show</button></p>
+ <div id='x1358' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1359' onclick='hideorshow("x1359","x1360")'>show</button></p>
+ <div id='x1360' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1361' onclick='hideorshow("x1361","x1362")'>show</button></p>
+ <div id='x1362' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1363' onclick='hideorshow("x1363","x1364")'>show</button></p>
+ <div id='x1364' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1365' onclick='hideorshow("x1365","x1366")'>show</button></p>
+ <div id='x1366' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1367' onclick='hideorshow("x1367","x1368")'>show</button></p>
+ <div id='x1368' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1369' onclick='hideorshow("x1369","x1370")'>show</button></p>
+ <div id='x1370' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1371' onclick='hideorshow("x1371","x1372")'>show</button></p>
+ <div id='x1372' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1373' onclick='hideorshow("x1373","x1374")'>show</button></p>
+ <div id='x1374' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1375' onclick='hideorshow("x1375","x1376")'>show</button></p>
+ <div id='x1376' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+<p> The ATTACH DATABASE statement adds another database
+file to the current <a href="c3ref/sqlite3.html">database connection</a>.
+Database files that were previously attached can be removed using
+the <a href="lang_detach.html">DETACH DATABASE</a> command.
+
+</p><h1 id="details"><span>2. </span>Details</h1>
+
+<p>The filename for the database to be attached is the value of
+the expression that occurs before the AS keyword.
+The filename of the database follows the same semantics as the
+filename argument to <a href="c3ref/open.html">sqlite3_open()</a> and <a href="c3ref/open.html">sqlite3_open_v2()</a>; the
+special name "<a href="inmemorydb.html">:memory:</a>" results in an <a href="inmemorydb.html">in-memory database</a> and an
+empty string results in a new temporary database.
+The filename argument can be a <a href="uri.html">URI filename</a> if URI filename processing
+is enable on the database connection. The default behavior is for
+URI filenames to be disabled, however that might change in a future release
+of SQLite, so application developers are advised to plan accordingly.
+
+</p><p>The name that occurs after the AS keyword is the name of the database
+used internally by SQLite.
+The schema-names 'main' and
+'temp' refer to the main database and the database used for
+temporary tables. The main and temp databases cannot be attached or
+detached.</p>
+
+<p> Tables in an attached database can be referred to using the syntax
+<i>schema-name.table-name</i>. If the name of the table is unique
+across all attached databases and the main and temp databases, then the
+<i>schema-name</i> prefix is not required. If two or more tables in
+different databases have the same name and the
+<i>schema-name</i> prefix is not used on a table reference, then the
+table chosen is the one in the database that was least recently attached.</p>
+
+<p>
+Transactions involving multiple attached databases are atomic,
+assuming that the main database is not "<a href="inmemorydb.html">:memory:</a>" and the
+<a href="pragma.html#pragma_journal_mode">journal_mode</a> is not <a href="wal.html">WAL</a>. If the main
+database is ":memory:" or if the journal_mode is WAL, then
+transactions continue to be atomic within each individual
+database file. But if the host computer crashes in the middle
+of a <a href="lang_transaction.html">COMMIT</a> where two or more database files are updated,
+some of those files might get the changes where others
+might not.
+</p>
+
+<p> There is a limit, set using <a href="c3ref/limit.html">sqlite3_limit()</a> and
+<a href="c3ref/c_limit_attached.html#sqlitelimitattached">SQLITE_LIMIT_ATTACHED</a>, to the number of databases that can be
+simultaneously attached to a single database connection.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_attach.in?m=a2c1dfa076735b3f5">2020-02-10 17:23:44</a> UTC </small></i></p>
+
diff --git a/www/lang_comment.html b/www/lang_comment.html
new file mode 100644
index 0000000..8ffd703
--- /dev/null
+++ b/www/lang_comment.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQL Comment Syntax</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQL Comment Syntax
+</div>
+</div>
+
+
+
+
+
+<p><b><a href="syntax/comment-syntax.html">comment-syntax:</a></b>
+<button id='x1377' onclick='hideorshow("x1377","x1378")'>hide</button></p>
+ <div id='x1378' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.704 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32A15 15 0 0 0 98 17A15 15 0 0 0 83 2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">--</text>
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M98,17L115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M172,70L359,70A15 15 0 0 0 374 55L374,55A15 15 0 0 0 359 39L172,39A15 15 0 0 0 157 55L157,55A15 15 0 0 0 172 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="266" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">anything-except-newline</text>
+<polygon points="347,17 336,21 336,12" style="fill:rgb(0,0,0)"/>
+<path d="M121,17L342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="374,55 386,50 386,59" style="fill:rgb(0,0,0)"/>
+<path d="M347,17 L 382,17 Q 397,17 397,32 L 397,40 Q 397,55 389,55 L 380,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="194,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M157,55 L 146,55 Q 134,55 134,40 L 134,32 Q 134,17 149,17 L 173,17 L 188,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,17 453,21 453,12" style="fill:rgb(0,0,0)"/>
+<path d="M374,17L459,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,32L527,32A15 15 0 0 0 542 17A15 15 0 0 0 527 2L480,2A15 15 0 0 0 464 17A15 15 0 0 0 480 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="503" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">newline</text>
+<path d="M480,70L563,70A15 15 0 0 0 578 55L578,55A15 15 0 0 0 563 39L480,39A15 15 0 0 0 464 55L464,55A15 15 0 0 0 480 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="521" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">end-of-input</text>
+<polygon points="601,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M578,55L595,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M601,55 L 608,55 Q 616,55 616,40 L 616,32 Q 616,17 631,17 L 631,17 L 646,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,17L632,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,55 453,59 453,50" style="fill:rgb(0,0,0)"/>
+<path d="M374,17 L 412,17 Q 427,17 427,32 L 427,40 Q 427,55 442,55 L 444,55 L 459,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,108A15 15 0 0 0 98 92A15 15 0 0 0 83 77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">/*</text>
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,92 110,97 110,88" style="fill:rgb(0,0,0)"/>
+<path d="M98,92L115,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,92L193,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M172,145L308,145A15 15 0 0 0 323 130A15 15 0 0 0 308 115L172,115A15 15 0 0 0 157 130A15 15 0 0 0 172 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="240" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">anything-except-*/</text>
+<path d="M480,108A15 15 0 0 0 495 92A15 15 0 0 0 480 77A15 15 0 0 0 464 92A15 15 0 0 0 480 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="480" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*/</text>
+<polygon points="323,130 334,126 334,135" style="fill:rgb(0,0,0)"/>
+<path d="M323,92 L 334,92 Q 346,92 346,107 L 346,115 Q 346,130 337,130 L 328,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,92 453,97 453,88" style="fill:rgb(0,0,0)"/>
+<path d="M157,130 L 146,130 Q 134,130 134,115 L 134,107 Q 134,92 149,92 L 444,92 L 459,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="601,92 589,97 589,88" style="fill:rgb(0,0,0)"/>
+<path d="M495,92L595,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M601,92 L 608,92 Q 616,92 616,77 L 616,54 L 616,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,92 L 419,92 Q 427,92 427,77 L 427,70 Q 427,55 440,55 L 453,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p>Comments are not SQL commands, but can occur within the text of
+SQL queries passed to <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> and related interfaces.
+Comments are treated as whitespace by the parser.
+Comments can begin anywhere whitespace
+can be found, including inside expressions that span multiple lines.
+</p>
+
+<p>SQL comments begin with two consecutive "-" characters (ASCII 0x2d)
+and extend up to and including the next newline character (ASCII 0x0a)
+or until the end of input, whichever comes first.</p>
+
+<p>C-style comments begin
+with "/*" and extend up to and including the next "*/" character pair
+or until the end of input, whichever comes first. C-style comments
+can span multiple lines. </p>
+
+<p>Comments can appear anywhere whitespace can occur,
+including inside expressions and in the middle of other SQL statements.
+Comments do not nest.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_comment.in?m=3ef91cf3ff07f2157">2020-02-10 17:23:44</a> UTC </small></i></p>
+
diff --git a/www/lang_conflict.html b/www/lang_conflict.html
new file mode 100644
index 0000000..0ad19de
--- /dev/null
+++ b/www/lang_conflict.html
@@ -0,0 +1,294 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The ON CONFLICT Clause</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The ON CONFLICT Clause
+</div>
+</div>
+
+
+
+
+<p><b><a href="syntax/conflict-clause.html">conflict-clause:</a></b>
+<button id='x1379' onclick='hideorshow("x1379","x1380")'>hide</button></p>
+ <div id='x1380' class='imgcontainer'>
+ <div style="max-width:451px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 451.517 205.2">
+<circle cx="5" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,6 20,10 20,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L26,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,36 58,41 58,32" style="fill:rgb(0,0,0)"/>
+<path d="M32,6 L 39,6 Q 47,6 47,21 L 47,21 Q 47,36 56,36 L 64,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,51L94,51A15 15 0 0 0 109 36L109,36A15 15 0 0 0 94 21L85,21A15 15 0 0 0 70 36L70,36A15 15 0 0 0 85 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="132,36 121,41 121,32" style="fill:rgb(0,0,0)"/>
+<path d="M109,36L126,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M147,51L222,51A15 15 0 0 0 237 36L237,36A15 15 0 0 0 222 21L147,21A15 15 0 0 0 132 36L132,36A15 15 0 0 0 147 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="273,36 261,41 261,32" style="fill:rgb(0,0,0)"/>
+<path d="M237,36L267,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,51L365,51A15 15 0 0 0 381 36L381,36A15 15 0 0 0 365 21L288,21A15 15 0 0 0 273 36L273,36A15 15 0 0 0 288 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="327" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<path d="M288,89L330,89A15 15 0 0 0 345 74L345,74A15 15 0 0 0 330 59L288,59A15 15 0 0 0 273 74L273,74A15 15 0 0 0 288 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<path d="M288,127L310,127A15 15 0 0 0 325 112A15 15 0 0 0 310 97L288,97A15 15 0 0 0 273 112A15 15 0 0 0 288 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<path d="M288,165L340,165A15 15 0 0 0 355 150A15 15 0 0 0 340 135L288,135A15 15 0 0 0 273 150A15 15 0 0 0 288 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="314" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<path d="M288,203L352,203A15 15 0 0 0 367 187A15 15 0 0 0 352 172L288,172A15 15 0 0 0 273 187A15 15 0 0 0 288 203Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="320" y="187" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="404,36 392,41 392,32" style="fill:rgb(0,0,0)"/>
+<path d="M381,36L398,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,6 430,10 430,2" style="fill:rgb(0,0,0)"/>
+<path d="M404,36 L 411,36 Q 419,36 419,21 L 419,21 Q 419,6 427,6 L 436,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="445" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="225,6 214,10 214,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L219,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,6L434,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,187 261,192 261,183" style="fill:rgb(0,0,0)"/>
+<path d="M237,36 L 244,36 Q 252,36 252,51 L 252,172 Q 252,187 259,187 L 267,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,187 392,192 392,183" style="fill:rgb(0,0,0)"/>
+<path d="M367,187L398,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,187 L 411,187 Q 419,187 419,172 L 419,36 L 419,21" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,74 261,78 261,70" style="fill:rgb(0,0,0)"/>
+<path d="M252,59 L 252,66 Q 252,74 259,74 L 267,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,74 392,78 392,70" style="fill:rgb(0,0,0)"/>
+<path d="M345,74L398,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,74 L 411,74 Q 419,74 419,67 L 419,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,112 261,116 261,108" style="fill:rgb(0,0,0)"/>
+<path d="M252,97 L 252,104 Q 252,112 259,112 L 267,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,112 392,116 392,108" style="fill:rgb(0,0,0)"/>
+<path d="M325,112L398,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,112 L 411,112 Q 419,112 419,104 L 419,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,150 261,154 261,145" style="fill:rgb(0,0,0)"/>
+<path d="M252,135 L 252,142 Q 252,150 259,150 L 267,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,150 392,154 392,145" style="fill:rgb(0,0,0)"/>
+<path d="M355,150L398,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,150 L 411,150 Q 419,150 419,142 L 419,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p>The ON CONFLICT clause is a
+non-standard extension specific to SQLite
+that can appear in many other SQL commands.
+It is given its own section in this document because it is not
+part of standard SQL and therefore might not be familiar.</p>
+
+<p>The ON CONFLICT clause described here has been a part of
+SQLite since before version 3.0.0 (2004-06-18). The phrase
+"ON&nbsp;CONFLICT" is also part of <a href="lang_upsert.html">UPSERT</a>, which is an extension
+to <a href="lang_insert.html">INSERT</a> added in version 3.24.0 (2018-06-04). Do not
+confuse these two separate uses of the "ON&nbsp;CONFLICT" phrase.
+
+</p><p>The syntax for the ON CONFLICT clause is as shown above for
+the CREATE TABLE command. For the INSERT and
+UPDATE commands, the keywords "ON CONFLICT" are replaced by "OR" so that
+the syntax reads more naturally. For example, instead of
+"INSERT ON CONFLICT IGNORE" we have "INSERT OR IGNORE".
+The keywords change but the meaning of the clause is the same
+either way.</p>
+
+<p>The ON CONFLICT clause applies to <a href="lang_createtable.html#uniqueconst">UNIQUE</a>, <a href="lang_createtable.html#notnullconst">NOT NULL</a>,
+<a href="lang_createtable.html#ckconst">CHECK</a>, and <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraints.
+The ON CONFLICT algorithm does not
+apply to <a href="foreignkeys.html">FOREIGN KEY constraints</a>.
+There are five conflict resolution algorithm choices:
+ROLLBACK, ABORT, FAIL, IGNORE, and REPLACE.
+The default conflict resolution algorithm is ABORT. This
+is what they mean:</p>
+
+<dl>
+<dt><b>ROLLBACK</b></dt>
+<dd><p> When an applicable constraint violation occurs, the ROLLBACK
+resolution algorithm aborts the current SQL statement with
+an SQLITE_CONSTRAINT error and rolls back the current transaction.
+If no transaction is
+active (other than the implied transaction that is created on every
+command) then the ROLLBACK resolution algorithm works the same as the
+ABORT algorithm.</p></dd>
+
+<dt><b>ABORT</b></dt>
+<dd><p> When an applicable constraint violation occurs, the ABORT
+resolution algorithm aborts the current SQL statement
+with an SQLITE_CONSTRAINT error and backs out any changes
+made by the current SQL statement; but changes caused
+by prior SQL statements within the same transaction are preserved and the
+transaction remains active.
+This is the default behavior and the behavior specified by the SQL
+standard.</p></dd>
+
+<dt><b>FAIL</b></dt>
+<dd><p> When an applicable constraint violation occurs, the FAIL
+resolution algorithm aborts the current SQL statement with an
+SQLITE_CONSTRAINT error. But the FAIL resolution does not
+back out prior changes of the SQL statement that failed nor does
+it end the transaction.
+For example, if an UPDATE
+statement encountered a constraint violation on the 100th row that
+it attempts to update, then the first 99 row changes are preserved
+but changes to rows 100 and beyond never occur.</p>
+
+<p>The FAIL behavior only works for uniqueness, NOT NULL, and CHECK
+constraints. A <a href="foreignkeys.html">foreign key constraint</a> violation causes an ABORT.
+</p></dd>
+
+<dt><b>IGNORE</b></dt>
+<dd><p> When an applicable constraint violation occurs,
+the IGNORE resolution algorithm skips the one row that contains
+the constraint violation and continues processing subsequent rows
+of the SQL statement as if nothing went wrong.
+Other rows before and after the row that
+contained the constraint violation are inserted or updated
+normally. No error is returned for uniqueness, NOT NULL, and
+UNIQUE constraint errors when the IGNORE conflict resolution
+algorithm is used. However, the IGNORE conflict resolution
+algorithm works like ABORT for <a href="foreignkeys.html">foreign key constraint</a> errors.
+</p>
+</dd>
+
+<dt><b>REPLACE</b></dt>
+<dd><p> When a <a href="lang_createtable.html#uniqueconst">UNIQUE</a> or <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraint violation occurs,
+the REPLACE algorithm
+deletes pre-existing rows that are causing the constraint violation
+prior to inserting or updating the current row and the command continues
+executing normally.
+If a <a href="lang_createtable.html#notnullconst">NOT NULL</a> constraint violation occurs, the REPLACE conflict
+resolution replaces the NULL value with
+the default value for that column, or if the column has no default
+value, then the ABORT algorithm is used.
+If a <a href="lang_createtable.html#ckconst">CHECK constraint</a> or <a href="foreignkeys.html">foreign key constraint</a> violation occurs,
+the REPLACE conflict resolution algorithm works like ABORT.</p>
+
+<p>When the REPLACE conflict resolution strategy deletes rows in order to
+satisfy a constraint, <a href="lang_createtrigger.html">delete triggers</a> fire if and only if
+<a href="pragma.html#pragma_recursive_triggers">recursive triggers</a> are enabled.</p>
+
+<p>The <a href="c3ref/update_hook.html">update hook</a> is not invoked for rows that
+are deleted by the REPLACE conflict resolution strategy. Nor does
+REPLACE increment the <a href="c3ref/changes.html">change counter</a>.
+The exceptional behaviors defined in this paragraph might change
+in a future release.</p>
+</dd></dl>
+
+<p>The algorithm specified in the OR clause of an INSERT or UPDATE
+overrides any algorithm specified in a CREATE TABLE.
+If no algorithm is specified anywhere, the ABORT algorithm is used.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_conflict.in?m=99e70e264342d2774">2021-11-01 21:09:36</a> UTC </small></i></p>
+
diff --git a/www/lang_corefunc.html b/www/lang_corefunc.html
new file mode 100644
index 0000000..ad8754a
--- /dev/null
+++ b/www/lang_corefunc.html
@@ -0,0 +1,632 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Built-In Scalar SQL Functions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Built-In Scalar SQL Functions
+</div>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>The core functions shown below are available by default.
+<a href="lang_datefunc.html">Date &amp; Time functions</a>,
+<a href="lang_aggfunc.html">aggregate functions</a>,
+<a href="windowfunctions.html#biwinfunc">window functions</a>,
+<a href="lang_mathfunc.html">math functions</a>, and
+<a href="json1.html">JSON functions</a> are documented separately. An
+application may define additional
+functions written in C and added to the database engine using
+the <a href="c3ref/create_function.html">sqlite3_create_function()</a> API.</p>
+
+<p>
+<div class='columns' style='columns: 15em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='lang_corefunc.html#abs'>abs(X)</a></li>
+<li><a href='lang_corefunc.html#changes'>changes()</a></li>
+<li><a href='lang_corefunc.html#char'>char(X1,X2,...,XN)</a></li>
+<li><a href='lang_corefunc.html#coalesce'>coalesce(X,Y,...)</a></li>
+<li><a href='lang_corefunc.html#format'>format(FORMAT,...)</a></li>
+<li><a href='lang_corefunc.html#glob'>glob(X,Y)</a></li>
+<li><a href='lang_corefunc.html#hex'>hex(X)</a></li>
+<li><a href='lang_corefunc.html#ifnull'>ifnull(X,Y)</a></li>
+<li><a href='lang_corefunc.html#iif'>iif(X,Y,Z)</a></li>
+<li><a href='lang_corefunc.html#instr'>instr(X,Y)</a></li>
+<li><a href='lang_corefunc.html#last_insert_rowid'>last_insert_rowid()</a></li>
+<li><a href='lang_corefunc.html#length'>length(X)</a></li>
+<li><a href='lang_corefunc.html#like'>like(X,Y)</a></li>
+<li><a href='lang_corefunc.html#like'>like(X,Y,Z)</a></li>
+<li><a href='lang_corefunc.html#likelihood'>likelihood(X,Y)</a></li>
+<li><a href='lang_corefunc.html#likely'>likely(X)</a></li>
+<li><a href='lang_corefunc.html#load_extension'>load_extension(X)</a></li>
+<li><a href='lang_corefunc.html#load_extension'>load_extension(X,Y)</a></li>
+<li><a href='lang_corefunc.html#lower'>lower(X)</a></li>
+<li><a href='lang_corefunc.html#ltrim'>ltrim(X)</a></li>
+<li><a href='lang_corefunc.html#ltrim'>ltrim(X,Y)</a></li>
+<li><a href='lang_corefunc.html#max_scalar'>max(X,Y,...)</a></li>
+<li><a href='lang_corefunc.html#min_scalar'>min(X,Y,...)</a></li>
+<li><a href='lang_corefunc.html#nullif'>nullif(X,Y)</a></li>
+<li><a href='lang_corefunc.html#printf'>printf(FORMAT,...)</a></li>
+<li><a href='lang_corefunc.html#quote'>quote(X)</a></li>
+<li><a href='lang_corefunc.html#random'>random()</a></li>
+<li><a href='lang_corefunc.html#randomblob'>randomblob(N)</a></li>
+<li><a href='lang_corefunc.html#replace'>replace(X,Y,Z)</a></li>
+<li><a href='lang_corefunc.html#round'>round(X)</a></li>
+<li><a href='lang_corefunc.html#round'>round(X,Y)</a></li>
+<li><a href='lang_corefunc.html#rtrim'>rtrim(X)</a></li>
+<li><a href='lang_corefunc.html#rtrim'>rtrim(X,Y)</a></li>
+<li><a href='lang_corefunc.html#sign'>sign(X)</a></li>
+<li><a href='lang_corefunc.html#soundex'>soundex(X)</a></li>
+<li><a href='lang_corefunc.html#sqlite_compileoption_get'>sqlite_compileoption_get(N)</a></li>
+<li><a href='lang_corefunc.html#sqlite_compileoption_used'>sqlite_compileoption_used(X)</a></li>
+<li><a href='lang_corefunc.html#sqlite_offset'>sqlite_offset(X)</a></li>
+<li><a href='lang_corefunc.html#sqlite_source_id'>sqlite_source_id()</a></li>
+<li><a href='lang_corefunc.html#sqlite_version'>sqlite_version()</a></li>
+<li><a href='lang_corefunc.html#substr'>substr(X,Y)</a></li>
+<li><a href='lang_corefunc.html#substr'>substr(X,Y,Z)</a></li>
+<li><a href='lang_corefunc.html#substr'>substring(X,Y)</a></li>
+<li><a href='lang_corefunc.html#substr'>substring(X,Y,Z)</a></li>
+<li><a href='lang_corefunc.html#total_changes'>total_changes()</a></li>
+<li><a href='lang_corefunc.html#trim'>trim(X)</a></li>
+<li><a href='lang_corefunc.html#trim'>trim(X,Y)</a></li>
+<li><a href='lang_corefunc.html#typeof'>typeof(X)</a></li>
+<li><a href='lang_corefunc.html#unicode'>unicode(X)</a></li>
+<li><a href='lang_corefunc.html#unlikely'>unlikely(X)</a></li>
+<li><a href='lang_corefunc.html#upper'>upper(X)</a></li>
+<li><a href='lang_corefunc.html#zeroblob'>zeroblob(N)</a></li>
+</ul>
+</div>
+
+
+<h1 id="descriptions_of_built_in_scalar_sql_functions"><span>2. </span>Descriptions of built-in scalar SQL functions</h1>
+<dl>
+
+<a name="abs"></a>
+<dt><p><b>abs(<i>X</i>)</b></dt><dd><p>
+ The abs(X) function returns the absolute value of the numeric
+ argument X. Abs(X) returns NULL if X is NULL.
+ Abs(X) returns 0.0 if X is a string or blob
+ that cannot be converted to a numeric value. If X is the
+ integer -9223372036854775808 then abs(X) throws an integer overflow
+ error since there is no equivalent positive 64-bit two complement value.
+</dd>
+<a name="changes"></a>
+<dt><p><b>changes()</b></dt><dd><p>
+ The changes() function returns the number of database rows that were changed
+ or inserted or deleted by the most recently completed INSERT, DELETE,
+ or UPDATE statement, exclusive of statements in lower-level triggers.
+ The changes() SQL function is a wrapper around the <a href="c3ref/changes.html">sqlite3_changes64()</a>
+ C/C++ function and hence follows the same rules for counting changes.
+</dd>
+<a name="char"></a>
+<dt><p><b>char(<i>X1</i>,<i>X2</i>,...,<i>XN</i>)</b></dt><dd><p>
+ The char(X1,X2,...,XN) function returns a string composed of characters having the
+ unicode code point values of integers X1 through XN, respectively.
+</dd>
+<a name="coalesce"></a>
+<dt><p><b>coalesce(<i>X</i>,<i>Y</i>,...)</b></dt><dd><p>
+ The coalesce() function returns a copy of its first non-NULL argument, or
+ NULL if all arguments are NULL. Coalesce() must have at least
+ 2 arguments.
+</dd>
+<a name="format"></a>
+<dt><p><b>format(<i>FORMAT</i>,...)</b></dt><dd><p>
+ The format(FORMAT,...) SQL function works like the <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> C-language
+ function and the printf() function from the standard C library.
+ The first argument is a format string that specifies how to construct the output
+ string using values taken from subsequent arguments. If the FORMAT argument is
+ missing or NULL then the result is NULL. The %n format is silently ignored and
+ does not consume an argument. The %p format is an alias for %X. The %z format
+ is interchangeable with %s. If there are too few arguments in the argument list,
+ missing arguments are assumed to have a NULL value, which is translated into
+ 0 or 0.0 for numeric formats or an empty string for %s. See the
+ <a href="printf.html">built-in printf()</a> documentation for additional information.
+</dd>
+<a name="glob"></a>
+<dt><p><b>glob(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The glob(X,Y) function is equivalent to the
+ expression "<b>Y GLOB X</b>".
+ Note that the X and Y arguments are reversed in the glob() function
+ relative to the infix <a href="lang_expr.html#glob">GLOB</a> operator. Y is the string and X is the
+ pattern. So, for example, the following expressions are equivalent:
+ <blockquote><pre>
+ name GLOB '*helium*'
+ glob('*helium*',name)
+ </pre></blockquote>
+ <p>If the <a href="c3ref/create_function.html">sqlite3_create_function()</a> interface is used to
+ override the glob(X,Y) function with an alternative implementation then
+ the <a href="lang_expr.html#glob">GLOB</a> operator will invoke the alternative implementation.
+</dd>
+<a name="hex"></a>
+<dt><p><b>hex(<i>X</i>)</b></dt><dd><p>
+ The hex() function interprets its argument as a BLOB and returns
+ a string which is the upper-case hexadecimal rendering of the content of
+ that blob.
+ <p>
+ If the argument <i>X</i> in "hex(<i>X</i>)" is an
+ integer or floating point number, then "interprets its argument as a BLOB" means
+ that the binary number is first converted into a UTF8 text representation, then
+ that text is interpreted as a BLOB. Hence, "hex(12345678)" renders
+ as "3132333435363738" not the binary representation of the integer value
+ "0000000000BC614E".
+</dd>
+<a name="ifnull"></a>
+<dt><p><b>ifnull(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The ifnull() function returns a copy of its first non-NULL argument, or
+ NULL if both arguments are NULL. Ifnull() must have exactly 2 arguments.
+ The ifnull() function is equivalent to <a href="lang_corefunc.html#coalesce">coalesce()</a> with two arguments.
+</dd>
+<a name="iif"></a>
+<dt><p><b>iif(<i>X</i>,<i>Y</i>,<i>Z</i>)</b></dt><dd><p>
+ The iif(X,Y,Z) function returns the value Y if X is true, and Z otherwise.
+ The iif(X,Y,Z) function is logically equivalent to and generates the same
+ <a href="opcode.html">bytecode</a> as the <a href="lang_expr.html#case">CASE expression</a> "CASE WHEN X THEN Y ELSE Z END".
+</dd>
+<a name="instr"></a>
+<dt><p><b>instr(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The instr(X,Y) function finds the first occurrence of string Y within
+ string X and returns the number of prior characters plus 1, or 0 if
+ Y is nowhere found within X.
+ Or, if X and Y are both BLOBs, then instr(X,Y) returns one
+ more than the number bytes prior to the first occurrence of Y, or 0 if
+ Y does not occur anywhere within X.
+ If both arguments X and Y to instr(X,Y) are non-NULL and are not BLOBs
+ then both are interpreted as strings.
+ If either X or Y are NULL in instr(X,Y) then the result is NULL.
+</dd>
+<a name="last_insert_rowid"></a>
+<dt><p><b>last_insert_rowid()</b></dt><dd><p>
+ The last_insert_rowid() function returns the <a href="lang_createtable.html#rowid">ROWID</a>
+ of the last row insert from the database connection which invoked the
+ function.
+ The last_insert_rowid() SQL function is a wrapper around the
+ <a href="c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a> C/C++ interface function.
+</dd>
+<a name="length"></a>
+<dt><p><b>length(<i>X</i>)</b></dt><dd><p>
+ For a string value X, the length(X) function returns the number of
+ characters (not bytes) in X prior to the first NUL character.
+ Since SQLite strings do not normally contain NUL characters, the length(X)
+ function will usually return the total number of characters in the string X.
+ For a blob value X, length(X) returns the number of bytes in the blob.
+ If X is NULL then length(X) is NULL.
+ If X is numeric then length(X) returns the length of a string
+ representation of X.
+ <p>
+ Note that for strings, the length(X) function returns the <i>character</i>
+ length of the string, not the byte length. The character length is the number
+ of characters in the string. The character length is always different from
+ the byte length for UTF-16 strings, and can be different from the byte length
+ for UTF-8 strings if the string contains multi-byte characters.
+ <p>
+ For BLOB values, length(X) always returns the byte-length of the BLOB.
+ <p>
+ For string values, length(X) must read the entire string into memory in order
+ to compute the character length. But for BLOB values, that is not necessary as
+ SQLite knows how many bytes are in the BLOB. Hence, for multi-megabyte values,
+ the length(X) function is usually much faster for BLOBs than for strings, since
+ it does not need to load the value into memory.
+</dd>
+<a name="like"></a>
+<dt><p><b>like(<i>X</i>,<i>Y</i>)<br />like(<i>X</i>,<i>Y</i>,<i>Z</i>)</b></dt><dd><p>
+ The like() function is used to implement the
+ "<b>Y LIKE X &#91;ESCAPE Z&#93;</b>" expression.
+ If the optional ESCAPE clause is present, then the
+ like() function is invoked with three arguments. Otherwise, it is
+ invoked with two arguments only. Note that the X and Y parameters are
+ reversed in the like() function relative to the infix <a href="lang_expr.html#like">LIKE</a> operator.
+ X is the pattern and Y is the string to match against that pattern.
+ Hence, the following expressions are equivalent:
+ <blockquote><pre>
+ name LIKE '%neon%'
+ like('%neon%',name)
+ </pre></blockquote>
+ <p>The <a href="c3ref/create_function.html">sqlite3_create_function()</a> interface can be used to override the
+ like() function and thereby change the operation of the
+ <a href="lang_expr.html#like">LIKE</a> operator. When overriding the like() function, it may be important
+ to override both the two and three argument versions of the like()
+ function. Otherwise, different code may be called to implement the
+ <a href="lang_expr.html#like">LIKE</a> operator depending on whether or not an ESCAPE clause was
+ specified.
+</dd>
+<a name="likelihood"></a>
+<dt><p><b>likelihood(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The likelihood(X,Y) function returns argument X unchanged.
+ The value Y in likelihood(X,Y) must be a floating point constant
+ between 0.0 and 1.0, inclusive.
+ The likelihood(X) function is a no-op that the code generator
+ optimizes away so that it consumes no CPU cycles during run-time
+ (that is, during calls to <a href="c3ref/step.html">sqlite3_step()</a>).
+ The purpose of the likelihood(X,Y) function is to provide a hint
+ to the query planner that the argument X is a boolean that is
+ true with a probability of approximately Y.
+ The <a href="lang_corefunc.html#unlikely">unlikely(X)</a> function is short-hand for likelihood(X,0.0625).
+ The <a href="lang_corefunc.html#likely">likely(X)</a> function is short-hand for likelihood(X,0.9375).
+</dd>
+<a name="likely"></a>
+<dt><p><b>likely(<i>X</i>)</b></dt><dd><p>
+ The likely(X) function returns the argument X unchanged.
+ The likely(X) function is a no-op that the code generator
+ optimizes away so that it consumes no CPU cycles at
+ run-time (that is, during calls to <a href="c3ref/step.html">sqlite3_step()</a>).
+ The purpose of the likely(X) function is to provide a hint
+ to the query planner that the argument X is a boolean value
+ that is usually true. The likely(X) function is equivalent
+ to <a href="lang_corefunc.html#likelihood">likelihood</a>(X,0.9375). See also: <a href="lang_corefunc.html#unlikely">unlikely(X)</a>.
+</dd>
+<a name="load_extension"></a>
+<dt><p><b>load_extension(<i>X</i>)<br />load_extension(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The load_extension(X,Y) function loads <a href="loadext.html">SQLite extensions</a> out of the shared
+ library file named X using the entry point Y. The result of load_extension()
+ is always a NULL. If Y is omitted then the default entry point name is used.
+ The load_extension() function raises an exception if the extension fails to
+ load or initialize correctly.
+
+ <p>The load_extension() function will fail if the extension attempts to
+ modify or delete an SQL function or collating sequence. The
+ extension can add new functions or collating sequences, but cannot
+ modify or delete existing functions or collating sequences because
+ those functions and/or collating sequences might be used elsewhere
+ in the currently running SQL statement. To load an extension that
+ changes or deletes functions or collating sequences, use the
+ <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> C-language API.</p>
+
+ <p>For security reasons, extension loading is disabled by default and must
+ be enabled by a prior call to <a href="c3ref/enable_load_extension.html">sqlite3_enable_load_extension()</a>.</p>
+</dd>
+<a name="lower"></a>
+<dt><p><b>lower(<i>X</i>)</b></dt><dd><p>
+ The lower(X) function returns a copy of string X with all ASCII characters
+ converted to lower case. The default built-in lower() function works
+ for ASCII characters only. To do case conversions on non-ASCII
+ characters, load the ICU extension.
+</dd>
+<a name="ltrim"></a>
+<dt><p><b>ltrim(<i>X</i>)<br />ltrim(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The ltrim(X,Y) function returns a string formed by removing any and all
+ characters that appear in Y from the left side of X.
+ If the Y argument is omitted, ltrim(X) removes spaces from the left side
+ of X.
+</dd>
+<a name="max_scalar"></a>
+<dt><p><b>max(<i>X</i>,<i>Y</i>,...)</b></dt><dd><p>
+ The multi-argument max() function returns the argument with the
+ maximum value, or return NULL if any argument is NULL.
+ The multi-argument max() function searches its arguments from left to right
+ for an argument that defines a collating function and uses that collating
+ function for all string comparisons. If none of the arguments to max()
+ define a collating function, then the BINARY collating function is used.
+ Note that <b>max()</b> is a simple function when
+ it has 2 or more arguments but operates as an
+ <a href="lang_aggfunc.html#max_agg">aggregate function</a> if given only a single argument.
+</dd>
+<a name="min_scalar"></a>
+<dt><p><b>min(<i>X</i>,<i>Y</i>,...)</b></dt><dd><p>
+ The multi-argument min() function returns the argument with the
+ minimum value.
+ The multi-argument min() function searches its arguments from left to right
+ for an argument that defines a collating function and uses that collating
+ function for all string comparisons. If none of the arguments to min()
+ define a collating function, then the BINARY collating function is used.
+ Note that <b>min()</b> is a simple function when
+ it has 2 or more arguments but operates as an
+ <a href="lang_aggfunc.html#min_agg">aggregate function</a> if given
+ only a single argument.
+</dd>
+<a name="nullif"></a>
+<dt><p><b>nullif(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The nullif(X,Y) function returns its first argument if the arguments are
+ different and NULL if the arguments are the same. The nullif(X,Y) function
+ searches its arguments from left to right for an argument that defines a
+ collating function and uses that collating function for all string
+ comparisons. If neither argument to nullif() defines a collating function
+ then the BINARY collating function is used.
+</dd>
+<a name="printf"></a>
+<dt><p><b>printf(<i>FORMAT</i>,...)</b></dt><dd><p>
+ The printf() SQL function is an alias for the <a href="lang_corefunc.html#format">format() SQL function</a>.
+ The format() SQL function was original named printf(). But the name was later
+ changed to format() for compatibility with other database engines. The original
+ printf() name is retained as an alias so as not to break any legacy code.
+</dd>
+<a name="quote"></a>
+<dt><p><b>quote(<i>X</i>)</b></dt><dd><p>
+ The quote(X) function returns the text of an SQL literal which
+ is the value of its argument suitable for inclusion into an SQL statement.
+ Strings are surrounded by single-quotes with escapes on interior quotes
+ as needed. BLOBs are encoded as hexadecimal literals.
+ Strings with embedded NUL characters cannot be represented as string
+ literals in SQL and hence the returned string literal is truncated prior
+ to the first NUL.
+</dd>
+<a name="random"></a>
+<dt><p><b>random()</b></dt><dd><p>
+ The random() function returns a pseudo-random integer
+ between -9223372036854775808 and +9223372036854775807.
+</dd>
+<a name="randomblob"></a>
+<dt><p><b>randomblob(<i>N</i>)</b></dt><dd><p>
+ The randomblob(N) function return an N-byte blob containing pseudo-random
+ bytes. If N is less than 1 then a 1-byte random blob is returned.
+
+ <p>Hint: applications can generate globally unique identifiers
+ using this function together with <a href="lang_corefunc.html#hex">hex()</a> and/or
+ <a href="lang_corefunc.html#lower">lower()</a> like this:</p>
+
+ <blockquote>
+ hex(randomblob(16))<br></br>
+ lower(hex(randomblob(16)))
+ </blockquote>
+</dd>
+<a name="replace"></a>
+<dt><p><b>replace(<i>X</i>,<i>Y</i>,<i>Z</i>)</b></dt><dd><p>
+ The replace(X,Y,Z) function returns a string formed by substituting
+ string Z for every occurrence of string Y in string X. The <a href="datatype3.html#collation">BINARY</a>
+ collating sequence is used for comparisons. If Y is an empty
+ string then return X unchanged. If Z is not initially
+ a string, it is cast to a UTF-8 string prior to processing.
+</dd>
+<a name="round"></a>
+<dt><p><b>round(<i>X</i>)<br />round(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The round(X,Y) function returns a floating-point
+ value X rounded to Y digits to the right of the decimal point.
+ If the Y argument is omitted or negative, it is taken to be 0.
+</dd>
+<a name="rtrim"></a>
+<dt><p><b>rtrim(<i>X</i>)<br />rtrim(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The rtrim(X,Y) function returns a string formed by removing any and all
+ characters that appear in Y from the right side of X.
+ If the Y argument is omitted, rtrim(X) removes spaces from the right
+ side of X.
+</dd>
+<a name="sign"></a>
+<dt><p><b>sign(<i>X</i>)</b></dt><dd><p>
+ The sign(X) function returns -1, 0, or +1 if the argument X is a numeric
+ value that is negative, zero, or positive, respectively. If the argument
+ to sign(X) is NULL or is a string or blob that cannot be losslessly converted
+ into a number, then sign(X) returns NULL.
+</dd>
+<a name="soundex"></a>
+<dt><p><b>soundex(<i>X</i>)</b></dt><dd><p>
+ The soundex(X) function returns a string that is the soundex encoding
+ of the string X.
+ The string "?000" is returned if the argument is NULL or contains
+ no ASCII alphabetic characters.
+ This function is omitted from SQLite by default.
+ It is only available if the <a href="compile.html#soundex">SQLITE_SOUNDEX</a> compile-time option
+ is used when SQLite is built.
+</dd>
+<a name="sqlite_compileoption_get"></a>
+<dt><p><b>sqlite_compileoption_get(<i>N</i>)</b></dt><dd><p>
+ The sqlite_compileoption_get() SQL function is a wrapper around the
+ <a href="c3ref/compileoption_get.html">sqlite3_compileoption_get()</a> C/C++ function.
+ This routine returns the N-th compile-time option used to build SQLite
+ or NULL if N is out of range. See also the <a href="pragma.html#pragma_compile_options">compile_options pragma</a>.
+</dd>
+<a name="sqlite_compileoption_used"></a>
+<dt><p><b>sqlite_compileoption_used(<i>X</i>)</b></dt><dd><p>
+ 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 SHA3-256 hash for that check-in. This function is
+ an SQL wrapper around the <a href="c3ref/libversion.html">sqlite3_sourceid()</a> C interface.
+</dd>
+<a name="sqlite_version"></a>
+<dt><p><b>sqlite_version()</b></dt><dd><p>
+ The sqlite_version() function returns the version string for the SQLite
+ library that is running. This function is an SQL
+ wrapper around the <a href="c3ref/libversion.html">sqlite3_libversion()</a> C-interface.
+</dd>
+<a name="substr"></a>
+<dt><p><b>substr(<i>X</i>,<i>Y</i>,<i>Z</i>)<br />substr(<i>X</i>,<i>Y</i>)<br />substring(<i>X</i>,<i>Y</i>,<i>Z</i>)<br />substring(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The substr(X,Y,Z) function returns a substring of input string X that begins
+ with the Y-th character and which is Z characters long.
+ If Z is omitted then substr(X,Y) returns all characters through the end
+ of the string X beginning with the Y-th.
+ The left-most character of X is number 1. If Y is negative
+ then the first character of the substring is found by counting from the
+ right rather than the left. If Z is negative then
+ the abs(Z) characters preceding the Y-th character are returned.
+ If X is a string then characters indices refer to actual UTF-8
+ characters. If X is a BLOB then the indices refer to bytes.
+ <p>
+ "substring()" is an alias for "substr()" beginning with SQLite version 3.34.
+</dd>
+<a name="total_changes"></a>
+<dt><p><b>total_changes()</b></dt><dd><p>
+ The total_changes() function returns the number of row changes
+ caused by INSERT, UPDATE or DELETE
+ statements since the current database connection was opened.
+ This function is a wrapper around the <a href="c3ref/total_changes.html">sqlite3_total_changes64()</a>
+ C/C++ interface.
+</dd>
+<a name="trim"></a>
+<dt><p><b>trim(<i>X</i>)<br />trim(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ The trim(X,Y) function returns a string formed by removing any and all
+ characters that appear in Y from both ends of X.
+ If the Y argument is omitted, trim(X) removes spaces from both ends of X.
+</dd>
+<a name="typeof"></a>
+<dt><p><b>typeof(<i>X</i>)</b></dt><dd><p>
+ The typeof(X) function returns a string that indicates the <a href="datatype3.html">datatype</a> of
+ the expression X: "null", "integer", "real", "text", or "blob".
+</dd>
+<a name="unicode"></a>
+<dt><p><b>unicode(<i>X</i>)</b></dt><dd><p>
+ The unicode(X) function returns the numeric unicode code point corresponding to
+ the first character of the string X. If the argument to unicode(X) is not a string
+ then the result is undefined.
+</dd>
+<a name="unlikely"></a>
+<dt><p><b>unlikely(<i>X</i>)</b></dt><dd><p>
+ The unlikely(X) function returns the argument X unchanged.
+ The unlikely(X) function is a no-op that the code generator
+ optimizes away so that it consumes no CPU cycles at
+ run-time (that is, during calls to <a href="c3ref/step.html">sqlite3_step()</a>).
+ The purpose of the unlikely(X) function is to provide a hint
+ to the query planner that the argument X is a boolean value
+ that is usually not true. The unlikely(X) function is equivalent
+ to <a href="lang_corefunc.html#likelihood">likelihood</a>(X, 0.0625).
+</dd>
+<a name="upper"></a>
+<dt><p><b>upper(<i>X</i>)</b></dt><dd><p>
+ The upper(X) function returns a copy of input string X in which all
+ lower-case ASCII characters are converted to their upper-case equivalent.
+</dd>
+<a name="zeroblob"></a>
+<dt><p><b>zeroblob(<i>N</i>)</b></dt><dd><p>
+ The zeroblob(N) function returns a BLOB consisting of N bytes of 0x00.
+ SQLite manages these zeroblobs very efficiently. Zeroblobs can be used to
+ reserve space for a BLOB that is later written using
+ <a href="c3ref/blob_open.html">incremental BLOB I/O</a>.
+ This SQL function is implemented using the <a href="c3ref/result_blob.html">sqlite3_result_zeroblob()</a>
+ routine from the C/C++ interface.
+</dd>
+
+</dl>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_corefunc.in?m=bc476ffe9a17c53dd">2022-07-16 18:39:09</a> UTC </small></i></p>
+
diff --git a/www/lang_createindex.html b/www/lang_createindex.html
new file mode 100644
index 0000000..36d007b
--- /dev/null
+++ b/www/lang_createindex.html
@@ -0,0 +1,2567 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>CREATE INDEX</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+CREATE INDEX
+</div>
+</div>
+
+
+
+
+<h1 id="syntax"><span>1. </span>Syntax</h1>
+<p><b><a href="syntax/create-index-stmt.html">create-index-stmt:</a></b>
+<button id='x1381' onclick='hideorshow("x1381","x1382")'>hide</button></p>
+ <div id='x1382' class='imgcontainer'>
+ <div style="max-width:907px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 907.43 232.632">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L222,56A15 15 0 0 0 237 41A15 15 0 0 0 222 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<path d="M288,32L327,32A15 15 0 0 0 342 17A15 15 0 0 0 327 2L288,2A15 15 0 0 0 273 17A15 15 0 0 0 288 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEX</text>
+<polygon points="194,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L188,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,17 261,21 261,12" style="fill:rgb(0,0,0)"/>
+<path d="M194,17L267,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,41 L 244,41 Q 252,41 252,29 Q 252,17 256,17 L 261,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,17 367,21 367,12" style="fill:rgb(0,0,0)"/>
+<path d="M342,17L372,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,32A15 15 0 0 0 408 17A15 15 0 0 0 393 2A15 15 0 0 0 378 17A15 15 0 0 0 393 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="393" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="431,17 420,21 420,12" style="fill:rgb(0,0,0)"/>
+<path d="M408,17L426,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L447,2A15 15 0 0 0 431 17A15 15 0 0 0 447 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="505,17 493,21 493,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L499,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M520,32L565,32A15 15 0 0 0 580 17A15 15 0 0 0 565 2L520,2A15 15 0 0 0 505 17A15 15 0 0 0 520 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="194,71 206,67 206,76" style="fill:rgb(0,0,0)"/>
+<path d="M342,17 L 350,17 Q 357,17 357,32 L 357,56 Q 357,71 342,71 L 215,71 L 200,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,71 516,67 516,76" style="fill:rgb(0,0,0)"/>
+<path d="M580,17 L 601,17 Q 616,17 616,32 L 616,56 Q 616,71 601,71 L 526,71 L 511,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,71L273,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,109 17,113 17,105" style="fill:rgb(0,0,0)"/>
+<path d="M273,71 L 20,71 Q 5,71 5,86 L 5,94 Q 5,109 14,109 L 23,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,124L140,124A15 15 0 0 0 155 109A15 15 0 0 0 140 94L43,94A15 15 0 0 0 28 109A15 15 0 0 0 43 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,109 166,113 166,105" style="fill:rgb(0,0,0)"/>
+<path d="M155,109L172,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,124A15 15 0 0 0 208 109A15 15 0 0 0 193 94A15 15 0 0 0 178 109A15 15 0 0 0 193 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,109 233,113 233,105" style="fill:rgb(0,0,0)"/>
+<path d="M208,109L238,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,124L338,124A15 15 0 0 0 353 109A15 15 0 0 0 338 94L259,94A15 15 0 0 0 244 109A15 15 0 0 0 259 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<polygon points="376,109 364,113 364,105" style="fill:rgb(0,0,0)"/>
+<path d="M353,109L370,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,124L400,124A15 15 0 0 0 415 109A15 15 0 0 0 400 94L391,94A15 15 0 0 0 376 109A15 15 0 0 0 391 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="438,109 427,113 427,105" style="fill:rgb(0,0,0)"/>
+<path d="M415,109L432,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,124L528,124A15 15 0 0 0 543 109A15 15 0 0 0 528 94L453,94A15 15 0 0 0 438 109A15 15 0 0 0 453 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="491" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="567,109 555,113 555,105" style="fill:rgb(0,0,0)"/>
+<path d="M543,109L561,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,124A15 15 0 0 0 597 109A15 15 0 0 0 582 94A15 15 0 0 0 567 109A15 15 0 0 0 582 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="633,109 621,113 621,105" style="fill:rgb(0,0,0)"/>
+<path d="M597,109L627,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M633,124L777,124L777,94L633,94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="813,109 802,113 802,105" style="fill:rgb(0,0,0)"/>
+<path d="M777,109L808,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M828,124A15 15 0 0 0 844 109A15 15 0 0 0 828 94A15 15 0 0 0 813 109A15 15 0 0 0 828 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="828" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M705,162A15 15 0 0 0 720 147A15 15 0 0 0 705 132A15 15 0 0 0 690 147A15 15 0 0 0 705 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="720,147 732,142 732,151" style="fill:rgb(0,0,0)"/>
+<path d="M777,109 L 785,109 Q 792,109 792,124 L 792,132 Q 792,147 777,147 L 741,147 L 726,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M690,147 L 625,147 Q 610,147 610,132 L 610,124 Q 610,109 617,109 L 625,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="92,139 80,144 80,135" style="fill:rgb(0,0,0)"/>
+<path d="M5,94 L 5,124 Q 5,139 20,139 L 71,139 L 86,139" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,139 L 205,139 Q 220,139 220,124 L 220,124 Q 220,109 227,109 L 235,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M684,230L733,230A15 15 0 0 0 748 215A15 15 0 0 0 733 200L684,200A15 15 0 0 0 669 215A15 15 0 0 0 684 230Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="709" y="215" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="772,215 760,219 760,211" style="fill:rgb(0,0,0)"/>
+<path d="M748,215L766,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M772,230L821,230L821,200L772,200Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="796" y="215" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="898,215 886,219 886,211" style="fill:rgb(0,0,0)"/>
+<path d="M821,215L892,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="901" cy="215" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="859,147 854,135 863,135" style="fill:rgb(0,0,0)"/>
+<path d="M844,109 L 851,109 Q 859,109 859,124 L 859,126 L 859,141" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M859,147 L 859,200 Q 859,215 872,215 L 886,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="705,177 717,173 717,181" style="fill:rgb(0,0,0)"/>
+<path d="M859,147 L 859,162 Q 859,177 844,177 L 726,177 L 711,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="669,215 657,219 657,211" style="fill:rgb(0,0,0)"/>
+<path d="M705,177 L 661,177 Q 646,177 646,192 L 646,200 Q 646,215 654,215 L 663,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1383' onclick='hideorshow("x1383","x1384")'>show</button></p>
+ <div id='x1384' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1385' onclick='hideorshow("x1385","x1386")'>show</button></p>
+ <div id='x1386' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1387' onclick='hideorshow("x1387","x1388")'>show</button></p>
+ <div id='x1388' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1389' onclick='hideorshow("x1389","x1390")'>show</button></p>
+ <div id='x1390' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1391' onclick='hideorshow("x1391","x1392")'>show</button></p>
+ <div id='x1392' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1393' onclick='hideorshow("x1393","x1394")'>show</button></p>
+ <div id='x1394' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1395' onclick='hideorshow("x1395","x1396")'>show</button></p>
+ <div id='x1396' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1397' onclick='hideorshow("x1397","x1398")'>show</button></p>
+ <div id='x1398' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1399' onclick='hideorshow("x1399","x1400")'>show</button></p>
+ <div id='x1400' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1401' onclick='hideorshow("x1401","x1402")'>show</button></p>
+ <div id='x1402' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1403' onclick='hideorshow("x1403","x1404")'>show</button></p>
+ <div id='x1404' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1405' onclick='hideorshow("x1405","x1406")'>show</button></p>
+ <div id='x1406' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1407' onclick='hideorshow("x1407","x1408")'>show</button></p>
+ <div id='x1408' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1409' onclick='hideorshow("x1409","x1410")'>show</button></p>
+ <div id='x1410' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1411' onclick='hideorshow("x1411","x1412")'>show</button></p>
+ <div id='x1412' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1413' onclick='hideorshow("x1413","x1414")'>show</button></p>
+ <div id='x1414' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1415' onclick='hideorshow("x1415","x1416")'>show</button></p>
+ <div id='x1416' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1417' onclick='hideorshow("x1417","x1418")'>show</button></p>
+ <div id='x1418' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1419' onclick='hideorshow("x1419","x1420")'>show</button></p>
+ <div id='x1420' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1421' onclick='hideorshow("x1421","x1422")'>show</button></p>
+ <div id='x1422' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/indexed-column.html">indexed-column:</a></b>
+<button id='x1423' onclick='hideorshow("x1423","x1424")'>show</button></p>
+ <div id='x1424' style='display:none;' class='imgcontainer'>
+ <div style="max-width:696px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 696.36 102.6">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="246,47 235,51 235,43" style="fill:rgb(0,0,0)"/>
+<path d="M175,17 L 205,17 Q 220,17 220,32 L 220,32 Q 220,47 230,47 L 240,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,62L325,62A15 15 0 0 0 341 47L341,47A15 15 0 0 0 325 32L261,32A15 15 0 0 0 246 47L246,47A15 15 0 0 0 261 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="293" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="358,47 346,51 346,43" style="fill:rgb(0,0,0)"/>
+<path d="M341,47L352,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,62L478,62A15 15 0 0 0 493 47L493,47A15 15 0 0 0 478 32L373,32A15 15 0 0 0 358 47L358,47A15 15 0 0 0 373 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="511,47 499,51 499,43" style="fill:rgb(0,0,0)"/>
+<path d="M493,47L505,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,85 556,89 556,81" style="fill:rgb(0,0,0)"/>
+<path d="M511,47 L 518,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 Q 541,17 541,32 L 541,70 Q 541,85 551,85 L 561,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,100L613,100A15 15 0 0 0 628 85L628,85A15 15 0 0 0 613 70L582,70A15 15 0 0 0 567 85L567,85A15 15 0 0 0 582 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="645,85 633,89 633,81" style="fill:rgb(0,0,0)"/>
+<path d="M628,85L639,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="687,17 675,21 675,12" style="fill:rgb(0,0,0)"/>
+<path d="M645,85 L 652,85 Q 660,85 660,70 L 660,32 Q 660,17 670,17 L 681,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="690" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,70L100,70L100,39L50,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="175,55 163,59 163,50" style="fill:rgb(0,0,0)"/>
+<path d="M100,55L169,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M175,55 L 182,55 Q 190,55 190,40 L 190,32 Q 190,17 197,17 L 205,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,17 586,21 586,12" style="fill:rgb(0,0,0)"/>
+<path d="M358,17L592,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,17L675,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,62L599,62A15 15 0 0 0 614 47A15 15 0 0 0 599 32L582,32A15 15 0 0 0 567 47A15 15 0 0 0 582 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="645,47 633,51 633,43" style="fill:rgb(0,0,0)"/>
+<path d="M614,47L639,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M645,47 L 652,47 Q 660,47 660,40 L 660,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,47 556,51 556,43" style="fill:rgb(0,0,0)"/>
+<path d="M541,32 L 541,39 Q 541,47 551,47 L 561,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+
+
+<p>The CREATE INDEX command consists of the keywords "CREATE INDEX" followed
+by the name of the new index, the keyword "ON", the name of a previously
+created table that is to be indexed, and a parenthesized list of table column
+names and/or expressions that are used for the index key.
+If the optional WHERE clause is included, then the index is a "<a href="partialindex.html">partial index</a>".
+</p>
+
+<p>If the optional IF NOT EXISTS clause is present and another index
+with the same name already exists, then this command becomes a no-op.</p>
+
+<p>There are no arbitrary limits on the number of indices that can be
+attached to a single table. The number of columns in an index is
+limited to the value set by
+<a href="c3ref/limit.html">sqlite3_limit</a>(<a href="c3ref/c_limit_attached.html#sqlitelimitcolumn">SQLITE_LIMIT_COLUMN</a>,...).</p>
+
+<p>Indexes are removed with the <a href="lang_dropindex.html">DROP INDEX</a> command.</p>
+
+<a name="uniqueidx"></a>
+
+<h2 id="unique_indexes"><span>1.1. </span>Unique Indexes</h2>
+
+<p>If the UNIQUE keyword appears between CREATE and INDEX then duplicate
+index entries are not allowed. Any attempt to insert a duplicate entry
+will result in an error.</p>
+
+<p>For the purposes of unique indices, all NULL values
+are considered different from all other NULL values and are thus unique.
+This is one of the two possible interpretations of the SQL-92 standard
+(the language in the standard is ambiguous). The interpretation used
+by SQLite is the same and is the interpretation
+followed by PostgreSQL, MySQL, Firebird, and Oracle. Informix and
+Microsoft SQL Server follow the other interpretation of the standard, which
+is that all NULL values are equal to one another.</p>
+
+<a name="indexexpr"></a>
+
+<h2 id="indexes_on_expressions"><span>1.2. </span>Indexes on Expressions</h2>
+
+<p>Expressions in an index may not reference other tables
+and may not use subqueries nor functions whose result might
+change (ex: <a href="lang_corefunc.html#random">random()</a> or <a href="lang_corefunc.html#sqlite_version">sqlite_version()</a>).
+Expressions in an index may only refer to columns in the table
+that is being indexed.
+Indexes on expression will not work with versions of SQLite prior
+to <a href="releaselog/3_9_0.html">version 3.9.0</a> (2015-10-14).
+See the <a href="expridx.html">Indexes On Expressions</a> document for additional information
+about using general expressions in CREATE INDEX statements.
+
+<a name="descidx"></a>
+
+</p><h2 id="descending_indexes"><span>1.3. </span>Descending Indexes</h2>
+
+<p>Each column name or expression can be followed by one
+of the "ASC" or "DESC" keywords to indicate sort order.
+The sort order may or may not be ignored depending
+on the database file format, and in particular the <a href="fileformat2.html#schemaformat">schema format number</a>.
+The "legacy" schema format (1) ignores index
+sort order. The descending index schema format (4) takes index sort order
+into account. Only versions of SQLite 3.3.0 (2006-01-11)
+and later are able to understand
+the descending index format. For compatibility, version of SQLite between 3.3.0
+and 3.7.9 use the legacy schema format by default. The newer schema format is
+used by default in version 3.7.10 (2012-01-16) and later.
+The <a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a> can be used to change set the specific
+behavior for any version of SQLite.</p>
+
+<h2 id="nulls_first_and_nulls_last"><span>1.4. </span>NULLS FIRST and NULLS LAST</h2>
+
+<p>The NULLS FIRST and NULLS LAST predicates are not supported
+for indexes. For <a href="datatype3.html#sortorder">sorting purposes</a>, SQLite considers NULL values
+to be smaller than all other values. Hence NULL values always appear at
+the beginning of an ASC index and at the end of a DESC index.</p>
+
+<a name="collidx"></a>
+
+<h2 id="collations"><span>1.5. </span>Collations</h2>
+
+<p>The COLLATE clause optionally following each column name
+or expression defines a
+collating sequence used for text entries in that column.
+The default collating
+sequence is the collating sequence defined for that column in the
+<a href="lang_createtable.html">CREATE TABLE</a> statement. Or if no collating sequence is otherwise defined,
+the built-in BINARY collating sequence is used.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_createindex.in?m=2c45540ea09cab806">2021-11-01 21:09:36</a> UTC </small></i></p>
+
diff --git a/www/lang_createtable.html b/www/lang_createtable.html
new file mode 100644
index 0000000..2c7c037
--- /dev/null
+++ b/www/lang_createtable.html
@@ -0,0 +1,5895 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>CREATE TABLE</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+CREATE TABLE
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#syntax">1. Syntax</a></div>
+<div class="fancy-toc1"><a href="#the_create_table_command">2. The CREATE TABLE command</a></div>
+<div class="fancy-toc2"><a href="#create_table_as_select_statements">2.1. CREATE TABLE ... AS SELECT Statements</a></div>
+<div class="fancy-toc1"><a href="#column_definitions">3. Column Definitions</a></div>
+<div class="fancy-toc2"><a href="#column_data_types">3.1. Column Data Types</a></div>
+<div class="fancy-toc2"><a href="#the_default_clause">3.2. The DEFAULT clause</a></div>
+<div class="fancy-toc2"><a href="#the_collate_clause">3.3. The COLLATE clause</a></div>
+<div class="fancy-toc2"><a href="#the_generated_always_as_clause">3.4. The GENERATED ALWAYS AS clause</a></div>
+<div class="fancy-toc2"><a href="#the_primary_key">3.5. The PRIMARY KEY</a></div>
+<div class="fancy-toc2"><a href="#unique_constraints">3.6. UNIQUE constraints</a></div>
+<div class="fancy-toc2"><a href="#check_constraints">3.7. CHECK constraints</a></div>
+<div class="fancy-toc2"><a href="#not_null_constraints">3.8. NOT NULL constraints</a></div>
+<div class="fancy-toc1"><a href="#constraint_enforcement">4. Constraint enforcement</a></div>
+<div class="fancy-toc2"><a href="#response_to_constraint_violations">4.1. Response to constraint violations</a></div>
+<div class="fancy-toc1"><a href="#rowids_and_the_integer_primary_key">5. ROWIDs and the INTEGER PRIMARY KEY</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="syntax"><span>1. </span>Syntax</h1>
+
+<p><b><a href="syntax/create-table-stmt.html">create-table-stmt:</a></b>
+<button id='x1425' onclick='hideorshow("x1425","x1426")'>hide</button></p>
+ <div id='x1426' class='imgcontainer'>
+ <div style="max-width:718px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 718.33 315.792">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L199,56A15 15 0 0 0 214 41A15 15 0 0 0 199 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMP</text>
+<path d="M167,94L259,94A15 15 0 0 0 274 79A15 15 0 0 0 259 64L167,64A15 15 0 0 0 152 79A15 15 0 0 0 167 94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="79" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMPORARY</text>
+<path d="M325,32L365,32A15 15 0 0 0 380 17A15 15 0 0 0 365 2L325,2A15 15 0 0 0 310 17A15 15 0 0 0 325 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="213,17 201,21 201,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L207,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,17 299,21 299,12" style="fill:rgb(0,0,0)"/>
+<path d="M213,17L305,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,79 140,83 140,74" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,32 L 131,64 Q 131,79 138,79 L 146,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M274,79 L 282,79 Q 289,79 289,64 L 289,32 Q 289,17 294,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M214,41 L 274,41 Q 289,41 289,33 L 289,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="416,17 404,21 404,12" style="fill:rgb(0,0,0)"/>
+<path d="M380,17L410,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,32A15 15 0 0 0 446 17A15 15 0 0 0 431 2A15 15 0 0 0 416 17A15 15 0 0 0 431 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="431" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="469,17 458,21 458,12" style="fill:rgb(0,0,0)"/>
+<path d="M446,17L463,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M484,32L504,32A15 15 0 0 0 520 17A15 15 0 0 0 504 2L484,2A15 15 0 0 0 469 17A15 15 0 0 0 484 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="494" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="543,17 531,21 531,12" style="fill:rgb(0,0,0)"/>
+<path d="M520,17L537,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,32L602,32A15 15 0 0 0 617 17A15 15 0 0 0 602 2L558,2A15 15 0 0 0 543 17A15 15 0 0 0 558 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="580" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="213,109 224,105 224,113" style="fill:rgb(0,0,0)"/>
+<path d="M380,17 L 387,17 Q 395,17 395,32 L 395,94 Q 395,109 380,109 L 234,109 L 219,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="543,109 554,105 554,113" style="fill:rgb(0,0,0)"/>
+<path d="M617,17 L 625,17 Q 632,17 632,32 L 632,94 Q 632,109 617,109 L 563,109 L 548,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M543,109L310,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,147 17,151 17,142" style="fill:rgb(0,0,0)"/>
+<path d="M310,109 L 20,109 Q 5,109 5,124 L 5,132 Q 5,147 14,147 L 23,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,162L140,162A15 15 0 0 0 155 147A15 15 0 0 0 140 132L43,132A15 15 0 0 0 28 147A15 15 0 0 0 43 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,147 166,151 166,142" style="fill:rgb(0,0,0)"/>
+<path d="M155,147L172,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,162A15 15 0 0 0 208 147A15 15 0 0 0 193 132A15 15 0 0 0 178 147A15 15 0 0 0 193 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,147 233,151 233,142" style="fill:rgb(0,0,0)"/>
+<path d="M208,147L238,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,162L334,162A15 15 0 0 0 350 147A15 15 0 0 0 334 132L259,132A15 15 0 0 0 244 147A15 15 0 0 0 259 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="92,177 80,181 80,173" style="fill:rgb(0,0,0)"/>
+<path d="M5,132 L 5,162 Q 5,177 20,177 L 71,177 L 86,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,177 L 205,177 Q 220,177 220,162 L 220,162 Q 220,147 227,147 L 235,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="193,222 205,218 205,227" style="fill:rgb(0,0,0)"/>
+<path d="M350,147 L 357,147 Q 365,147 365,162 L 365,207 Q 365,222 350,222 L 214,222 L 199,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,260 17,265 17,256" style="fill:rgb(0,0,0)"/>
+<path d="M193,222 L 20,222 Q 5,222 5,237 L 5,245 Q 5,260 14,260 L 23,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,275A15 15 0 0 0 59 260A15 15 0 0 0 43 245A15 15 0 0 0 28 260A15 15 0 0 0 43 275Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="43" y="260" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="95,260 83,265 83,256" style="fill:rgb(0,0,0)"/>
+<path d="M59,260L89,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,275L199,275L199,245L95,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="147" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-def</text>
+<path d="M253,313L399,313L399,283L253,283Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="298" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-constraint</text>
+<polygon points="399,298 410,294 410,302" style="fill:rgb(0,0,0)"/>
+<path d="M404,298L416,298" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,313A15 15 0 0 0 446 298A15 15 0 0 0 431 283A15 15 0 0 0 416 298A15 15 0 0 0 431 313Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="431" y="298" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M503,275A15 15 0 0 0 518 260A15 15 0 0 0 503 245A15 15 0 0 0 488 260A15 15 0 0 0 503 275Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="503" y="260" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="553,260 541,265 541,256" style="fill:rgb(0,0,0)"/>
+<path d="M518,260L547,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M553,275L674,275L674,245L553,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="613" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-options</text>
+<path d="M147,313A15 15 0 0 0 162 298A15 15 0 0 0 147 283A15 15 0 0 0 132 298A15 15 0 0 0 147 313Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="147" y="298" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="162,298 174,294 174,302" style="fill:rgb(0,0,0)"/>
+<path d="M199,260 L 207,260 Q 214,260 214,275 L 214,283 Q 214,298 199,298 L 183,298 L 168,298" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,298 L 87,298 Q 72,298 72,283 L 72,275 Q 72,260 77,260 L 83,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="235,260 224,265 224,256" style="fill:rgb(0,0,0)"/>
+<path d="M199,260L230,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="488,260 476,265 476,256" style="fill:rgb(0,0,0)"/>
+<path d="M235,260L482,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,298 458,294 458,302" style="fill:rgb(0,0,0)"/>
+<path d="M446,260 L 458,260 Q 469,260 469,275 L 469,283 Q 469,298 460,298 L 452,298" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,298 L 246,298 Q 238,298 238,283 L 238,275 Q 238,260 250,260 L 261,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,215 602,219 602,211" style="fill:rgb(0,0,0)"/>
+<path d="M518,260 L 526,260 Q 533,260 533,245 L 533,230 Q 533,215 548,215 L 592,215 L 607,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="708,215 697,219 697,211" style="fill:rgb(0,0,0)"/>
+<path d="M613,215 L 659,215 Q 674,215 688,215 L 703,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="712" cy="215" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="708,215 697,219 697,211" style="fill:rgb(0,0,0)"/>
+<path d="M674,260 L 681,260 Q 689,260 689,245 L 689,230 Q 689,215 696,215 L 703,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,147 428,151 428,142" style="fill:rgb(0,0,0)"/>
+<path d="M350,147L434,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,162L459,162A15 15 0 0 0 474 147A15 15 0 0 0 459 132L455,132A15 15 0 0 0 440 147A15 15 0 0 0 455 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="497,147 485,151 485,142" style="fill:rgb(0,0,0)"/>
+<path d="M474,147L491,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M497,162L601,162L601,132L497,132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="549" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="637,147 626,151 626,142" style="fill:rgb(0,0,0)"/>
+<path d="M601,147L631,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M637,147 L 674,147 Q 689,147 689,162 L 689,200 Q 689,215 696,215 L 704,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/column-def.html">column-def:</a></b>
+<button id='x1427' onclick='hideorshow("x1427","x1428")'>show</button></p>
+ <div id='x1428' style='display:none;' class='imgcontainer'>
+ <div style="max-width:614px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 614.333 64.8">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L141,32A15 15 0 0 0 156 17A15 15 0 0 0 141 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="94" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="179,17 168,21 168,12" style="fill:rgb(0,0,0)"/>
+<path d="M156,17L173,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="215,17 204,21 204,12" style="fill:rgb(0,0,0)"/>
+<path d="M179,17L209,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,32L314,32L314,2L215,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M314,17L354,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M386,62L550,62L550,32L386,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-constraint</text>
+<polygon points="550,17 539,21 539,12" style="fill:rgb(0,0,0)"/>
+<path d="M359,17L545,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="604,17 593,21 593,12" style="fill:rgb(0,0,0)"/>
+<path d="M550,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="608" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="265,42 253,47 253,38" style="fill:rgb(0,0,0)"/>
+<path d="M179,17 L 187,17 Q 194,17 194,30 Q 194,42 209,42 L 244,42 L 259,42" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,42 L 314,42 Q 329,42 329,30 Q 329,17 337,17 L 344,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="550,47 562,43 562,51" style="fill:rgb(0,0,0)"/>
+<path d="M550,17 L 562,17 Q 574,17 574,32 L 574,32 Q 574,47 565,47 L 556,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="399,17 388,21 388,12" style="fill:rgb(0,0,0)"/>
+<path d="M386,47 L 375,47 Q 363,47 363,32 L 363,32 Q 363,17 378,17 L 379,17 L 394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/column-constraint.html">column-constraint:</a></b>
+<button id='x1429' onclick='hideorshow("x1429","x1430")'>show</button></p>
+ <div id='x1430' style='display:none;' class='imgcontainer'>
+ <div style="max-width:844px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 844.306 578.88">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,40 43,28 51,28" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,25 L 47,34" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L183,32A15 15 0 0 0 198 17A15 15 0 0 0 183 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="133" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONSTRAINT</text>
+<polygon points="221,17 210,21 210,12" style="fill:rgb(0,0,0)"/>
+<path d="M198,17L215,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,32L263,32A15 15 0 0 0 279 17A15 15 0 0 0 263 2L236,2A15 15 0 0 0 221 17A15 15 0 0 0 236 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="250" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="173,47 185,43 185,51" style="fill:rgb(0,0,0)"/>
+<path d="M279,17 L 300,17 Q 315,17 315,32 L 315,32 Q 315,47 300,47 L 194,47 L 179,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M173,47 L 62,47 Q 47,47 47,55 L 47,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,77 58,82 58,73" style="fill:rgb(0,0,0)"/>
+<path d="M47,40 L 47,62 Q 47,77 56,77 L 64,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,92L148,92A15 15 0 0 0 163 77A15 15 0 0 0 148 62L85,62A15 15 0 0 0 70 77A15 15 0 0 0 85 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRIMARY</text>
+<polygon points="186,77 174,82 174,73" style="fill:rgb(0,0,0)"/>
+<path d="M163,77L180,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,92L217,92A15 15 0 0 0 233 77A15 15 0 0 0 217 62L201,62A15 15 0 0 0 186 77A15 15 0 0 0 201 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">KEY</text>
+<polygon points="271,138 259,142 259,133" style="fill:rgb(0,0,0)"/>
+<path d="M233,77 L 240,77 Q 248,77 248,92 L 248,123 Q 248,138 256,138 L 265,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M286,153L316,153A15 15 0 0 0 331 138A15 15 0 0 0 316 123L286,123A15 15 0 0 0 271 138A15 15 0 0 0 286 153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="301" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="354,138 343,142 343,133" style="fill:rgb(0,0,0)"/>
+<path d="M331,138L348,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,77 381,82 381,73" style="fill:rgb(0,0,0)"/>
+<path d="M354,138 L 362,138 Q 369,138 369,123 L 369,92 Q 369,77 378,77 L 386,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,92L525,92L525,62L392,62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="459" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="549,77 537,82 537,73" style="fill:rgb(0,0,0)"/>
+<path d="M525,77L543,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="587,108 575,112 575,103" style="fill:rgb(0,0,0)"/>
+<path d="M549,77 L 556,77 Q 564,77 564,92 L 564,93 Q 564,108 572,108 L 581,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M602,123L745,123A15 15 0 0 0 760 108A15 15 0 0 0 745 92L602,92A15 15 0 0 0 587 108A15 15 0 0 0 602 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="673" y="108" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AUTOINCREMENT</text>
+<polygon points="783,108 772,112 772,103" style="fill:rgb(0,0,0)"/>
+<path d="M760,108L778,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="834,77 823,82 823,73" style="fill:rgb(0,0,0)"/>
+<path d="M783,108 L 791,108 Q 798,108 798,93 L 798,92 Q 798,77 813,77 L 814,77 L 829,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="838" cy="77" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="673,77 662,82 662,73" style="fill:rgb(0,0,0)"/>
+<path d="M549,77L668,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M673,77L827,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="301,77 289,82 289,73" style="fill:rgb(0,0,0)"/>
+<path d="M233,77L295,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,77L381,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="271,100 259,104 259,96" style="fill:rgb(0,0,0)"/>
+<path d="M233,77 L 240,77 Q 248,77 248,89 Q 248,100 256,100 L 265,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M286,115L302,115A15 15 0 0 0 318 100A15 15 0 0 0 302 85L286,85A15 15 0 0 0 271 100A15 15 0 0 0 286 115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="294" y="100" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="354,100 343,104 343,96" style="fill:rgb(0,0,0)"/>
+<path d="M318,100L348,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,100 L 362,100 Q 369,100 369,92 L 369,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,183 58,187 58,179" style="fill:rgb(0,0,0)"/>
+<path d="M47,62 L 47,168 Q 47,183 56,183 L 64,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,198L105,198A15 15 0 0 0 120 183A15 15 0 0 0 105 168L85,168A15 15 0 0 0 70 183A15 15 0 0 0 85 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="143,183 132,187 132,179" style="fill:rgb(0,0,0)"/>
+<path d="M120,183L138,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,198L190,198A15 15 0 0 0 205 183A15 15 0 0 0 190 168L158,168A15 15 0 0 0 143 183A15 15 0 0 0 158 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="174" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="228,183 216,187 216,179" style="fill:rgb(0,0,0)"/>
+<path d="M205,183L222,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,198L361,198L361,168L228,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="294" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="783,183 772,187 772,179" style="fill:rgb(0,0,0)"/>
+<path d="M361,183L778,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,183 L 791,183 Q 798,183 798,168 L 798,107 L 798,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,221 58,225 58,217" style="fill:rgb(0,0,0)"/>
+<path d="M47,168 L 47,206 Q 47,221 56,221 L 64,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,236L140,236A15 15 0 0 0 155 221A15 15 0 0 0 140 206L85,206A15 15 0 0 0 70 221A15 15 0 0 0 85 236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="221" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<polygon points="178,221 167,225 167,217" style="fill:rgb(0,0,0)"/>
+<path d="M155,221L172,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M178,236L311,236L311,206L178,206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="245" y="221" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="783,221 772,225 772,217" style="fill:rgb(0,0,0)"/>
+<path d="M311,221L778,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,221 L 791,221 Q 798,221 798,206 L 798,183 L 798,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,259 58,263 58,254" style="fill:rgb(0,0,0)"/>
+<path d="M47,206 L 47,244 Q 47,259 56,259 L 64,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,274L131,274A15 15 0 0 0 146 259A15 15 0 0 0 131 244L85,244A15 15 0 0 0 70 259A15 15 0 0 0 85 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="259" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CHECK</text>
+<polygon points="169,259 157,263 157,254" style="fill:rgb(0,0,0)"/>
+<path d="M146,259L163,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M184,274A15 15 0 0 0 199 259A15 15 0 0 0 184 244A15 15 0 0 0 169 259A15 15 0 0 0 184 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="259" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="222,259 210,263 210,254" style="fill:rgb(0,0,0)"/>
+<path d="M199,259L216,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,274L271,274L271,244L222,244Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="259" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="294,259 283,263 283,254" style="fill:rgb(0,0,0)"/>
+<path d="M271,259L288,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,274A15 15 0 0 0 324 259A15 15 0 0 0 309 244A15 15 0 0 0 294 259A15 15 0 0 0 309 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="259" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,259 772,263 772,254" style="fill:rgb(0,0,0)"/>
+<path d="M324,259L778,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,259 L 791,259 Q 798,259 798,244 L 798,221 L 798,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,297 58,301 58,292" style="fill:rgb(0,0,0)"/>
+<path d="M47,244 L 47,282 Q 47,297 56,297 L 64,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,312L150,312A15 15 0 0 0 166 297A15 15 0 0 0 150 281L85,281A15 15 0 0 0 70 297A15 15 0 0 0 85 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="118" y="297" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="189,297 177,301 177,292" style="fill:rgb(0,0,0)"/>
+<path d="M166,297L183,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="225,297 213,301 213,292" style="fill:rgb(0,0,0)"/>
+<path d="M189,297L219,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,312A15 15 0 0 0 255 297A15 15 0 0 0 240 281A15 15 0 0 0 225 297A15 15 0 0 0 240 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="240" y="297" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="278,297 266,301 266,292" style="fill:rgb(0,0,0)"/>
+<path d="M255,297L272,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,312L327,312L327,281L278,281Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="297" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="350,297 339,301 339,292" style="fill:rgb(0,0,0)"/>
+<path d="M327,297L344,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,312A15 15 0 0 0 380 297A15 15 0 0 0 365 281A15 15 0 0 0 350 297A15 15 0 0 0 365 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="297" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,297 772,301 772,292" style="fill:rgb(0,0,0)"/>
+<path d="M380,297L778,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297 L 791,297 Q 798,297 798,282 L 798,259 L 798,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="227,334 215,339 215,330" style="fill:rgb(0,0,0)"/>
+<path d="M189,297 L 196,297 Q 204,297 204,312 L 204,319 Q 204,334 212,334 L 221,334" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,349L340,349L340,319L227,319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="334" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="363,334 351,339 351,330" style="fill:rgb(0,0,0)"/>
+<path d="M340,334L357,334" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,334 L 395,334 Q 410,334 410,319 L 410,312 Q 410,297 425,297 L 431,297 L 446,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="227,372 215,376 215,368" style="fill:rgb(0,0,0)"/>
+<path d="M189,297 L 196,297 Q 204,297 204,312 L 204,357 Q 204,372 212,372 L 221,372" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,387L364,387L364,357L227,357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="372" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="387,372 376,376 376,368" style="fill:rgb(0,0,0)"/>
+<path d="M364,372L382,372" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,372 L 399,372 Q 410,372 410,357 L 410,312 Q 410,297 425,297 L 431,297 L 446,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,410 58,414 58,406" style="fill:rgb(0,0,0)"/>
+<path d="M47,281 L 47,395 Q 47,410 56,410 L 64,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,425L149,425A15 15 0 0 0 164 410A15 15 0 0 0 149 395L85,395A15 15 0 0 0 70 410A15 15 0 0 0 85 425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="117" y="410" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="187,410 176,414 176,406" style="fill:rgb(0,0,0)"/>
+<path d="M164,410L182,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M202,425L308,425A15 15 0 0 0 323 410A15 15 0 0 0 308 395L202,395A15 15 0 0 0 187 410A15 15 0 0 0 202 425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="255" y="410" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="783,410 772,414 772,406" style="fill:rgb(0,0,0)"/>
+<path d="M323,410L778,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,410 L 791,410 Q 798,410 798,395 L 798,296 L 798,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,448 58,452 58,443" style="fill:rgb(0,0,0)"/>
+<path d="M47,395 L 47,433 Q 47,448 56,448 L 64,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,463L236,463L236,433L70,433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="448" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-key-clause</text>
+<polygon points="783,448 772,452 772,443" style="fill:rgb(0,0,0)"/>
+<path d="M236,448L778,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,448 L 791,448 Q 798,448 798,433 L 798,410 L 798,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,486 58,490 58,481" style="fill:rgb(0,0,0)"/>
+<path d="M47,433 L 47,471 Q 47,486 56,486 L 64,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,501L178,501A15 15 0 0 0 193 486A15 15 0 0 0 178 470L85,470A15 15 0 0 0 70 486A15 15 0 0 0 85 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="131" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GENERATED</text>
+<polygon points="216,486 204,490 204,481" style="fill:rgb(0,0,0)"/>
+<path d="M193,486L210,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M231,501L286,501A15 15 0 0 0 301 486A15 15 0 0 0 286 470L231,470A15 15 0 0 0 216 486A15 15 0 0 0 231 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALWAYS</text>
+<polygon points="337,486 325,490 325,481" style="fill:rgb(0,0,0)"/>
+<path d="M301,486L331,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M352,501L356,501A15 15 0 0 0 371 486A15 15 0 0 0 356 470L352,470A15 15 0 0 0 337 486A15 15 0 0 0 352 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="394,486 382,490 382,481" style="fill:rgb(0,0,0)"/>
+<path d="M371,486L388,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,501A15 15 0 0 0 424 486A15 15 0 0 0 409 470A15 15 0 0 0 394 486A15 15 0 0 0 409 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="486" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="447,486 436,490 436,481" style="fill:rgb(0,0,0)"/>
+<path d="M424,486L441,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,501L496,501L496,470L447,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="472" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="519,486 508,490 508,481" style="fill:rgb(0,0,0)"/>
+<path d="M496,486L514,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,501A15 15 0 0 0 550 486A15 15 0 0 0 535 470A15 15 0 0 0 519 486A15 15 0 0 0 535 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="535" y="486" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,486 772,490 772,481" style="fill:rgb(0,0,0)"/>
+<path d="M550,486L778,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,486 L 791,486 Q 798,486 798,471 L 798,448 L 798,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="185,516 174,520 174,511" style="fill:rgb(0,0,0)"/>
+<path d="M47,470 L 47,501 Q 47,516 62,516 L 165,516 L 180,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M185,516 L 297,516 Q 312,516 312,501 L 312,501 Q 312,486 320,486 L 327,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="596,561 584,565 584,557" style="fill:rgb(0,0,0)"/>
+<path d="M550,486 L 561,486 Q 573,486 573,501 L 573,546 Q 573,561 581,561 L 590,561" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M611,576L670,576A15 15 0 0 0 686 561A15 15 0 0 0 670 546L611,546A15 15 0 0 0 596 561A15 15 0 0 0 611 576Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="641" y="561" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIRTUAL</text>
+<polygon points="783,561 772,565 772,557" style="fill:rgb(0,0,0)"/>
+<path d="M686,561L778,561" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,561 L 791,561 Q 798,561 798,546 L 798,485 L 798,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="596,523 584,528 584,519" style="fill:rgb(0,0,0)"/>
+<path d="M550,486 L 561,486 Q 573,486 573,501 L 573,508 Q 573,523 581,523 L 590,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M611,538L665,538A15 15 0 0 0 680 523A15 15 0 0 0 665 508L611,508A15 15 0 0 0 596 523A15 15 0 0 0 611 538Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="638" y="523" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">STORED</text>
+<polygon points="783,523 772,528 772,519" style="fill:rgb(0,0,0)"/>
+<path d="M680,523L778,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,523 L 791,523 Q 798,523 798,516 L 798,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/conflict-clause.html">conflict-clause:</a></b>
+<button id='x1431' onclick='hideorshow("x1431","x1432")'>show</button></p>
+ <div id='x1432' style='display:none;' class='imgcontainer'>
+ <div style="max-width:451px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 451.517 205.2">
+<circle cx="5" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,6 20,10 20,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L26,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,36 58,41 58,32" style="fill:rgb(0,0,0)"/>
+<path d="M32,6 L 39,6 Q 47,6 47,21 L 47,21 Q 47,36 56,36 L 64,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,51L94,51A15 15 0 0 0 109 36L109,36A15 15 0 0 0 94 21L85,21A15 15 0 0 0 70 36L70,36A15 15 0 0 0 85 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="132,36 121,41 121,32" style="fill:rgb(0,0,0)"/>
+<path d="M109,36L126,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M147,51L222,51A15 15 0 0 0 237 36L237,36A15 15 0 0 0 222 21L147,21A15 15 0 0 0 132 36L132,36A15 15 0 0 0 147 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="273,36 261,41 261,32" style="fill:rgb(0,0,0)"/>
+<path d="M237,36L267,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,51L365,51A15 15 0 0 0 381 36L381,36A15 15 0 0 0 365 21L288,21A15 15 0 0 0 273 36L273,36A15 15 0 0 0 288 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="327" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<path d="M288,89L330,89A15 15 0 0 0 345 74L345,74A15 15 0 0 0 330 59L288,59A15 15 0 0 0 273 74L273,74A15 15 0 0 0 288 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<path d="M288,127L310,127A15 15 0 0 0 325 112A15 15 0 0 0 310 97L288,97A15 15 0 0 0 273 112A15 15 0 0 0 288 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<path d="M288,165L340,165A15 15 0 0 0 355 150A15 15 0 0 0 340 135L288,135A15 15 0 0 0 273 150A15 15 0 0 0 288 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="314" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<path d="M288,203L352,203A15 15 0 0 0 367 187A15 15 0 0 0 352 172L288,172A15 15 0 0 0 273 187A15 15 0 0 0 288 203Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="320" y="187" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="404,36 392,41 392,32" style="fill:rgb(0,0,0)"/>
+<path d="M381,36L398,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,6 430,10 430,2" style="fill:rgb(0,0,0)"/>
+<path d="M404,36 L 411,36 Q 419,36 419,21 L 419,21 Q 419,6 427,6 L 436,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="445" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="225,6 214,10 214,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L219,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,6L434,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,187 261,192 261,183" style="fill:rgb(0,0,0)"/>
+<path d="M237,36 L 244,36 Q 252,36 252,51 L 252,172 Q 252,187 259,187 L 267,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,187 392,192 392,183" style="fill:rgb(0,0,0)"/>
+<path d="M367,187L398,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,187 L 411,187 Q 419,187 419,172 L 419,36 L 419,21" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,74 261,78 261,70" style="fill:rgb(0,0,0)"/>
+<path d="M252,59 L 252,66 Q 252,74 259,74 L 267,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,74 392,78 392,70" style="fill:rgb(0,0,0)"/>
+<path d="M345,74L398,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,74 L 411,74 Q 419,74 419,67 L 419,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,112 261,116 261,108" style="fill:rgb(0,0,0)"/>
+<path d="M252,97 L 252,104 Q 252,112 259,112 L 267,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,112 392,116 392,108" style="fill:rgb(0,0,0)"/>
+<path d="M325,112L398,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,112 L 411,112 Q 419,112 419,104 L 419,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,150 261,154 261,145" style="fill:rgb(0,0,0)"/>
+<path d="M252,135 L 252,142 Q 252,150 259,150 L 267,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,150 392,154 392,145" style="fill:rgb(0,0,0)"/>
+<path d="M355,150L398,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,150 L 411,150 Q 419,150 419,142 L 419,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1433' onclick='hideorshow("x1433","x1434")'>show</button></p>
+ <div id='x1434' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1435' onclick='hideorshow("x1435","x1436")'>show</button></p>
+ <div id='x1436' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1437' onclick='hideorshow("x1437","x1438")'>show</button></p>
+ <div id='x1438' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1439' onclick='hideorshow("x1439","x1440")'>show</button></p>
+ <div id='x1440' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1441' onclick='hideorshow("x1441","x1442")'>show</button></p>
+ <div id='x1442' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1443' onclick='hideorshow("x1443","x1444")'>show</button></p>
+ <div id='x1444' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/foreign-key-clause.html">foreign-key-clause:</a></b>
+<button id='x1445' onclick='hideorshow("x1445","x1446")'>show</button></p>
+ <div id='x1446' style='display:none;' class='imgcontainer'>
+ <div style="max-width:648px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 648.158 492.48">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L164,70A15 15 0 0 0 179 55A15 15 0 0 0 164 39L60,39A15 15 0 0 0 45 55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REFERENCES</text>
+<polygon points="202,55 190,59 190,50" style="fill:rgb(0,0,0)"/>
+<path d="M179,55L196,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,70L306,70A15 15 0 0 0 322 55A15 15 0 0 0 306 39L217,39A15 15 0 0 0 202 55A15 15 0 0 0 217 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-table</text>
+<polygon points="358,55 346,59 346,50" style="fill:rgb(0,0,0)"/>
+<path d="M322,55L352,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,70A15 15 0 0 0 388 55A15 15 0 0 0 373 39A15 15 0 0 0 358 55A15 15 0 0 0 373 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="373" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="424,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M388,55L418,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M439,70L533,70A15 15 0 0 0 548 55A15 15 0 0 0 533 39L439,39A15 15 0 0 0 424 55A15 15 0 0 0 439 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="584,55 573,59 573,50" style="fill:rgb(0,0,0)"/>
+<path d="M548,55L578,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M599,70A15 15 0 0 0 614 55A15 15 0 0 0 599 39A15 15 0 0 0 584 55A15 15 0 0 0 599 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="599" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M486,32A15 15 0 0 0 501 17L501,17A15 15 0 0 0 486 2A15 15 0 0 0 471 17L471,17A15 15 0 0 0 486 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="501,17 513,12 513,21" style="fill:rgb(0,0,0)"/>
+<path d="M548,55 L 556,55 Q 563,55 563,40 L 563,32 Q 563,17 548,17 L 522,17 L 507,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,17 L 416,17 Q 401,17 401,32 L 401,40 Q 401,55 412,55 L 424,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,176L69,176A15 15 0 0 0 84 160A15 15 0 0 0 69 145L60,145A15 15 0 0 0 45 160A15 15 0 0 0 60 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="64" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="120,160 109,165 109,156" style="fill:rgb(0,0,0)"/>
+<path d="M84,160L114,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,176L188,176A15 15 0 0 0 203 160A15 15 0 0 0 188 145L135,145A15 15 0 0 0 120 160A15 15 0 0 0 135 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="162" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="275,160 264,165 264,156" style="fill:rgb(0,0,0)"/>
+<path d="M203,160L269,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,176L306,176A15 15 0 0 0 321 160A15 15 0 0 0 306 145L290,145A15 15 0 0 0 275 160A15 15 0 0 0 290 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="344,160 332,165 332,156" style="fill:rgb(0,0,0)"/>
+<path d="M321,160L338,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M359,176L390,176A15 15 0 0 0 405 160A15 15 0 0 0 390 145L359,145A15 15 0 0 0 344 160A15 15 0 0 0 359 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<path d="M135,213L189,213A15 15 0 0 0 204 198A15 15 0 0 0 189 183L135,183A15 15 0 0 0 120 198A15 15 0 0 0 135 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="162" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="120,198 109,203 109,194" style="fill:rgb(0,0,0)"/>
+<path d="M84,160 L 92,160 Q 99,160 99,175 L 99,183 Q 99,198 107,198 L 114,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M204,198 L 212,198 Q 219,198 219,183 L 219,175 Q 219,160 227,160 L 234,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,213L306,213A15 15 0 0 0 321 198A15 15 0 0 0 306 183L290,183A15 15 0 0 0 275 198A15 15 0 0 0 290 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="344,198 332,203 332,194" style="fill:rgb(0,0,0)"/>
+<path d="M321,198L338,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M359,213L424,213A15 15 0 0 0 440 198A15 15 0 0 0 424 183L359,183A15 15 0 0 0 344 198A15 15 0 0 0 359 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="392" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="463,198 451,203 451,194" style="fill:rgb(0,0,0)"/>
+<path d="M440,198L457,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,198 L 470,198 Q 478,198 478,191 L 478,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,251L357,251A15 15 0 0 0 372 236A15 15 0 0 0 357 221L290,221A15 15 0 0 0 275 236A15 15 0 0 0 290 251Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="324" y="236" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASCADE</text>
+<polygon points="463,236 451,240 451,232" style="fill:rgb(0,0,0)"/>
+<path d="M372,236L457,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,236 L 470,236 Q 478,236 478,229 L 478,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,289L361,289A15 15 0 0 0 376 274A15 15 0 0 0 361 259L290,259A15 15 0 0 0 275 274A15 15 0 0 0 290 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RESTRICT</text>
+<polygon points="463,274 451,278 451,270" style="fill:rgb(0,0,0)"/>
+<path d="M376,274L457,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,274 L 470,274 Q 478,274 478,266 L 478,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,327L299,327A15 15 0 0 0 314 312A15 15 0 0 0 299 297L290,297A15 15 0 0 0 275 312A15 15 0 0 0 290 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="295" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="337,312 326,316 326,307" style="fill:rgb(0,0,0)"/>
+<path d="M314,312L332,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M353,327L404,327A15 15 0 0 0 419 312A15 15 0 0 0 404 297L353,297A15 15 0 0 0 337 312A15 15 0 0 0 353 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="378" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ACTION</text>
+<polygon points="463,312 451,316 451,307" style="fill:rgb(0,0,0)"/>
+<path d="M419,312L457,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,312 L 470,312 Q 478,312 478,304 L 478,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357L108,357A15 15 0 0 0 123 342L123,342A15 15 0 0 0 108 327L60,327A15 15 0 0 0 45 342L45,342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="84" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<polygon points="146,342 135,346 135,338" style="fill:rgb(0,0,0)"/>
+<path d="M123,342L140,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M161,357L188,357A15 15 0 0 0 203 342L203,342A15 15 0 0 0 188 327L161,327A15 15 0 0 0 146 342L146,342A15 15 0 0 0 161 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="175" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="463,342 451,346 451,338" style="fill:rgb(0,0,0)"/>
+<path d="M203,342L457,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,115 453,111 453,119" style="fill:rgb(0,0,0)"/>
+<path d="M463,342 L 470,342 Q 478,342 478,327 L 478,130 Q 478,115 463,115 L 462,115 L 447,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="463,160 451,165 451,156" style="fill:rgb(0,0,0)"/>
+<path d="M405,160L457,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,160 L 470,160 Q 478,160 478,153 L 478,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,312 264,316 264,307" style="fill:rgb(0,0,0)"/>
+<path d="M237,160 L 245,160 Q 252,160 252,175 L 252,297 Q 252,312 261,312 L 269,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,274 264,278 264,270" style="fill:rgb(0,0,0)"/>
+<path d="M252,259 L 252,266 Q 252,274 261,274 L 269,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,236 264,240 264,232" style="fill:rgb(0,0,0)"/>
+<path d="M252,221 L 252,228 Q 252,236 261,236 L 269,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,198 264,203 264,194" style="fill:rgb(0,0,0)"/>
+<path d="M252,183 L 252,191 Q 252,198 261,198 L 269,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,160 33,165 33,156" style="fill:rgb(0,0,0)"/>
+<path d="M614,55 L 623,55 Q 632,55 632,70 L 632,100 Q 632,115 617,115 L 20,115 Q 5,115 5,130 L 5,145 Q 5,160 20,160 L 24,160 L 39,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M5,145 L 5,327 Q 5,342 20,342 L 24,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="337,91 332,79 341,79" style="fill:rgb(0,0,0)"/>
+<path d="M322,55 L 329,55 Q 337,55 337,70 L 337,70 L 337,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M337,91 L 337,103 Q 337,115 329,115 L 322,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,433L80,433A15 15 0 0 0 95 417A15 15 0 0 0 80 402L60,402A15 15 0 0 0 45 417A15 15 0 0 0 60 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="133,387 122,392 122,383" style="fill:rgb(0,0,0)"/>
+<path d="M95,417 L 103,417 Q 110,417 110,402 L 110,402 Q 110,387 119,387 L 127,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M148,402L250,402A15 15 0 0 0 265 387A15 15 0 0 0 250 372L148,372A15 15 0 0 0 133 387A15 15 0 0 0 148 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="387" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRABLE</text>
+<polygon points="303,417 292,422 292,413" style="fill:rgb(0,0,0)"/>
+<path d="M265,387 L 273,387 Q 280,387 280,402 L 280,402 Q 280,417 289,417 L 297,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M318,433L389,433A15 15 0 0 0 405 417A15 15 0 0 0 389 402L318,402A15 15 0 0 0 303 417A15 15 0 0 0 318 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INITIALLY</text>
+<polygon points="428,417 416,422 416,413" style="fill:rgb(0,0,0)"/>
+<path d="M405,417L422,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M443,433L523,433A15 15 0 0 0 538 417A15 15 0 0 0 523 402L443,402A15 15 0 0 0 428 417A15 15 0 0 0 443 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRED</text>
+<path d="M318,470L389,470A15 15 0 0 0 405 455A15 15 0 0 0 389 440L318,440A15 15 0 0 0 303 455A15 15 0 0 0 318 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INITIALLY</text>
+<polygon points="428,455 416,460 416,451" style="fill:rgb(0,0,0)"/>
+<path d="M405,455L422,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M443,470L531,470A15 15 0 0 0 546 455A15 15 0 0 0 531 440L443,440A15 15 0 0 0 428 455A15 15 0 0 0 443 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="487" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IMMEDIATE</text>
+<polygon points="569,455 558,460 558,451" style="fill:rgb(0,0,0)"/>
+<path d="M546,455L564,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="569,417 558,422 558,413" style="fill:rgb(0,0,0)"/>
+<path d="M538,417L564,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="569,387 558,392 558,383" style="fill:rgb(0,0,0)"/>
+<path d="M265,387L564,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="303,455 292,460 292,451" style="fill:rgb(0,0,0)"/>
+<path d="M265,387 L 273,387 Q 280,387 280,402 L 280,440 Q 280,455 289,455 L 297,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="638,486 627,490 627,481" style="fill:rgb(0,0,0)"/>
+<path d="M569,387 L 577,387 Q 584,387 584,402 L 584,471 Q 584,486 599,486 L 618,486 L 633,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="642" cy="486" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,455 L 577,455 Q 584,455 584,463 L 584,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,417 L 577,417 Q 584,417 584,425 L 584,432" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M5,327 L 5,471 Q 5,486 20,486 L 612,486 L 627,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M5,372 L 5,380 Q 5,387 20,387 L 118,387 L 133,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M5,402 L 5,410 Q 5,417 20,417 L 24,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1447' onclick='hideorshow("x1447","x1448")'>show</button></p>
+ <div id='x1448' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1449' onclick='hideorshow("x1449","x1450")'>show</button></p>
+ <div id='x1450' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1451' onclick='hideorshow("x1451","x1452")'>show</button></p>
+ <div id='x1452' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1453' onclick='hideorshow("x1453","x1454")'>show</button></p>
+ <div id='x1454' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1455' onclick='hideorshow("x1455","x1456")'>show</button></p>
+ <div id='x1456' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1457' onclick='hideorshow("x1457","x1458")'>show</button></p>
+ <div id='x1458' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1459' onclick='hideorshow("x1459","x1460")'>show</button></p>
+ <div id='x1460' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1461' onclick='hideorshow("x1461","x1462")'>show</button></p>
+ <div id='x1462' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1463' onclick='hideorshow("x1463","x1464")'>show</button></p>
+ <div id='x1464' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1465' onclick='hideorshow("x1465","x1466")'>show</button></p>
+ <div id='x1466' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1467' onclick='hideorshow("x1467","x1468")'>show</button></p>
+ <div id='x1468' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1469' onclick='hideorshow("x1469","x1470")'>show</button></p>
+ <div id='x1470' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1471' onclick='hideorshow("x1471","x1472")'>show</button></p>
+ <div id='x1472' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1473' onclick='hideorshow("x1473","x1474")'>show</button></p>
+ <div id='x1474' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1475' onclick='hideorshow("x1475","x1476")'>show</button></p>
+ <div id='x1476' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1477' onclick='hideorshow("x1477","x1478")'>show</button></p>
+ <div id='x1478' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1479' onclick='hideorshow("x1479","x1480")'>show</button></p>
+ <div id='x1480' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1481' onclick='hideorshow("x1481","x1482")'>show</button></p>
+ <div id='x1482' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1483' onclick='hideorshow("x1483","x1484")'>show</button></p>
+ <div id='x1484' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1485' onclick='hideorshow("x1485","x1486")'>show</button></p>
+ <div id='x1486' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1487' onclick='hideorshow("x1487","x1488")'>show</button></p>
+ <div id='x1488' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1489' onclick='hideorshow("x1489","x1490")'>show</button></p>
+ <div id='x1490' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1491' onclick='hideorshow("x1491","x1492")'>show</button></p>
+ <div id='x1492' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/table-constraint.html">table-constraint:</a></b>
+<button id='x1493' onclick='hideorshow("x1493","x1494")'>show</button></p>
+ <div id='x1494' style='display:none;' class='imgcontainer'>
+ <div style="max-width:751px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 751.325 261.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="110" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONSTRAINT</text>
+<polygon points="198,17 187,21 187,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L192,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M213,32L240,32A15 15 0 0 0 256 17A15 15 0 0 0 240 2L213,2A15 15 0 0 0 198 17A15 15 0 0 0 213 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="227" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<path d="M60,108L123,108A15 15 0 0 0 138 92A15 15 0 0 0 123 77L60,77A15 15 0 0 0 45 92A15 15 0 0 0 60 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="91" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRIMARY</text>
+<polygon points="161,92 149,97 149,88" style="fill:rgb(0,0,0)"/>
+<path d="M138,92L155,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M176,108L192,108A15 15 0 0 0 208 92A15 15 0 0 0 192 77L176,77A15 15 0 0 0 161 92A15 15 0 0 0 176 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">KEY</text>
+<polygon points="244,92 232,97 232,88" style="fill:rgb(0,0,0)"/>
+<path d="M208,92L238,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,108A15 15 0 0 0 274 92A15 15 0 0 0 259 77A15 15 0 0 0 244 92A15 15 0 0 0 259 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="310,92 298,97 298,88" style="fill:rgb(0,0,0)"/>
+<path d="M274,92L304,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,108L454,108L454,77L310,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="490,92 479,97 479,88" style="fill:rgb(0,0,0)"/>
+<path d="M454,92L485,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,108A15 15 0 0 0 521 92A15 15 0 0 0 505 77A15 15 0 0 0 490 92A15 15 0 0 0 505 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="505" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="544,92 532,97 532,88" style="fill:rgb(0,0,0)"/>
+<path d="M521,92L538,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M544,108L677,108L677,77L544,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="610" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="700,92 688,97 688,88" style="fill:rgb(0,0,0)"/>
+<path d="M677,92L694,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="741,92 730,97 730,88" style="fill:rgb(0,0,0)"/>
+<path d="M700,92L736,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="745" cy="92" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,92 33,97 33,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 31,92 L 39,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="110,55 122,50 122,59" style="fill:rgb(0,0,0)"/>
+<path d="M256,17 L 263,17 Q 271,17 271,32 L 271,40 Q 271,55 256,55 L 131,55 L 116,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M110,55 L 39,55 Q 24,55 24,62 L 24,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,145A15 15 0 0 0 397 130A15 15 0 0 0 382 115A15 15 0 0 0 367 130A15 15 0 0 0 382 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="130" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="397,130 409,126 409,135" style="fill:rgb(0,0,0)"/>
+<path d="M454,92 L 462,92 Q 469,92 469,107 L 469,115 Q 469,130 454,130 L 418,130 L 403,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,130 L 298,130 Q 283,130 283,115 L 283,107 Q 283,92 291,92 L 298,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,145L115,145A15 15 0 0 0 130 130A15 15 0 0 0 115 115L60,115A15 15 0 0 0 45 130A15 15 0 0 0 60 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<path d="M130,130 L 208,130 Q 223,130 223,115 L 223,107 Q 223,92 230,92 L 238,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,130 33,135 33,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,115 Q 24,130 31,130 L 39,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,183L105,183A15 15 0 0 0 121 168A15 15 0 0 0 105 153L60,153A15 15 0 0 0 45 168A15 15 0 0 0 60 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CHECK</text>
+<polygon points="144,168 132,172 132,164" style="fill:rgb(0,0,0)"/>
+<path d="M121,168L138,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M159,183A15 15 0 0 0 174 168A15 15 0 0 0 159 153A15 15 0 0 0 144 168A15 15 0 0 0 159 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="168" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="197,168 185,172 185,164" style="fill:rgb(0,0,0)"/>
+<path d="M174,168L191,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,183L246,183L246,153L197,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="269,168 258,172 258,164" style="fill:rgb(0,0,0)"/>
+<path d="M246,168L263,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,183L284,183A15 15 0 0 0 299 168A15 15 0 0 0 284 153L284,153A15 15 0 0 0 269 168A15 15 0 0 0 284 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="284" y="168" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="700,168 688,172 688,164" style="fill:rgb(0,0,0)"/>
+<path d="M299,168L694,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M700,168 L 707,168 Q 715,168 715,153 L 715,107 Q 715,92 722,92 L 730,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,168 33,172 33,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,153 Q 24,168 31,168 L 39,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,221L123,221A15 15 0 0 0 139 206A15 15 0 0 0 123 191L60,191A15 15 0 0 0 45 206A15 15 0 0 0 60 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOREIGN</text>
+<polygon points="162,206 150,210 150,201" style="fill:rgb(0,0,0)"/>
+<path d="M139,206L156,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,221L193,221A15 15 0 0 0 208 206A15 15 0 0 0 193 191L177,191A15 15 0 0 0 162 206A15 15 0 0 0 177 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">KEY</text>
+<polygon points="231,206 220,210 220,201" style="fill:rgb(0,0,0)"/>
+<path d="M208,206L225,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,221A15 15 0 0 0 261 206A15 15 0 0 0 246 191A15 15 0 0 0 231 206A15 15 0 0 0 246 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="206" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="297,206 286,210 286,201" style="fill:rgb(0,0,0)"/>
+<path d="M261,206L292,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,221L407,221A15 15 0 0 0 422 206A15 15 0 0 0 407 191L313,191A15 15 0 0 0 297 206A15 15 0 0 0 313 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="458,206 446,210 446,201" style="fill:rgb(0,0,0)"/>
+<path d="M422,206L452,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M473,221A15 15 0 0 0 488 206A15 15 0 0 0 473 191A15 15 0 0 0 458 206A15 15 0 0 0 473 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="206" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,206 500,210 500,201" style="fill:rgb(0,0,0)"/>
+<path d="M488,206L505,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M511,221L677,221L677,191L511,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="594" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-key-clause</text>
+<polygon points="700,206 688,210 688,201" style="fill:rgb(0,0,0)"/>
+<path d="M677,206L694,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M700,206 L 707,206 Q 715,206 715,191 L 715,168 L 715,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,206 33,210 33,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,191 Q 24,206 31,206 L 39,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,259A15 15 0 0 0 375 244A15 15 0 0 0 360 228A15 15 0 0 0 345 244A15 15 0 0 0 360 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="244" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="375,244 386,239 386,248" style="fill:rgb(0,0,0)"/>
+<path d="M422,206 L 429,206 Q 437,206 437,221 L 437,229 Q 437,244 422,244 L 396,244 L 381,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,244 L 286,244 Q 271,244 271,229 L 271,221 Q 271,206 278,206 L 286,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/conflict-clause.html">conflict-clause:</a></b>
+<button id='x1495' onclick='hideorshow("x1495","x1496")'>show</button></p>
+ <div id='x1496' style='display:none;' class='imgcontainer'>
+ <div style="max-width:451px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 451.517 205.2">
+<circle cx="5" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,6 20,10 20,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L26,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,36 58,41 58,32" style="fill:rgb(0,0,0)"/>
+<path d="M32,6 L 39,6 Q 47,6 47,21 L 47,21 Q 47,36 56,36 L 64,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,51L94,51A15 15 0 0 0 109 36L109,36A15 15 0 0 0 94 21L85,21A15 15 0 0 0 70 36L70,36A15 15 0 0 0 85 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="132,36 121,41 121,32" style="fill:rgb(0,0,0)"/>
+<path d="M109,36L126,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M147,51L222,51A15 15 0 0 0 237 36L237,36A15 15 0 0 0 222 21L147,21A15 15 0 0 0 132 36L132,36A15 15 0 0 0 147 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="273,36 261,41 261,32" style="fill:rgb(0,0,0)"/>
+<path d="M237,36L267,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,51L365,51A15 15 0 0 0 381 36L381,36A15 15 0 0 0 365 21L288,21A15 15 0 0 0 273 36L273,36A15 15 0 0 0 288 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="327" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<path d="M288,89L330,89A15 15 0 0 0 345 74L345,74A15 15 0 0 0 330 59L288,59A15 15 0 0 0 273 74L273,74A15 15 0 0 0 288 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<path d="M288,127L310,127A15 15 0 0 0 325 112A15 15 0 0 0 310 97L288,97A15 15 0 0 0 273 112A15 15 0 0 0 288 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<path d="M288,165L340,165A15 15 0 0 0 355 150A15 15 0 0 0 340 135L288,135A15 15 0 0 0 273 150A15 15 0 0 0 288 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="314" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<path d="M288,203L352,203A15 15 0 0 0 367 187A15 15 0 0 0 352 172L288,172A15 15 0 0 0 273 187A15 15 0 0 0 288 203Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="320" y="187" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="404,36 392,41 392,32" style="fill:rgb(0,0,0)"/>
+<path d="M381,36L398,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,6 430,10 430,2" style="fill:rgb(0,0,0)"/>
+<path d="M404,36 L 411,36 Q 419,36 419,21 L 419,21 Q 419,6 427,6 L 436,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="445" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="225,6 214,10 214,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L219,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,6L434,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,187 261,192 261,183" style="fill:rgb(0,0,0)"/>
+<path d="M237,36 L 244,36 Q 252,36 252,51 L 252,172 Q 252,187 259,187 L 267,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,187 392,192 392,183" style="fill:rgb(0,0,0)"/>
+<path d="M367,187L398,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,187 L 411,187 Q 419,187 419,172 L 419,36 L 419,21" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,74 261,78 261,70" style="fill:rgb(0,0,0)"/>
+<path d="M252,59 L 252,66 Q 252,74 259,74 L 267,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,74 392,78 392,70" style="fill:rgb(0,0,0)"/>
+<path d="M345,74L398,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,74 L 411,74 Q 419,74 419,67 L 419,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,112 261,116 261,108" style="fill:rgb(0,0,0)"/>
+<path d="M252,97 L 252,104 Q 252,112 259,112 L 267,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,112 392,116 392,108" style="fill:rgb(0,0,0)"/>
+<path d="M325,112L398,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,112 L 411,112 Q 419,112 419,104 L 419,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,150 261,154 261,145" style="fill:rgb(0,0,0)"/>
+<path d="M252,135 L 252,142 Q 252,150 259,150 L 267,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,150 392,154 392,145" style="fill:rgb(0,0,0)"/>
+<path d="M355,150L398,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,150 L 411,150 Q 419,150 419,142 L 419,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1497' onclick='hideorshow("x1497","x1498")'>show</button></p>
+ <div id='x1498' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1499' onclick='hideorshow("x1499","x1500")'>show</button></p>
+ <div id='x1500' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1501' onclick='hideorshow("x1501","x1502")'>show</button></p>
+ <div id='x1502' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1503' onclick='hideorshow("x1503","x1504")'>show</button></p>
+ <div id='x1504' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1505' onclick='hideorshow("x1505","x1506")'>show</button></p>
+ <div id='x1506' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1507' onclick='hideorshow("x1507","x1508")'>show</button></p>
+ <div id='x1508' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1509' onclick='hideorshow("x1509","x1510")'>show</button></p>
+ <div id='x1510' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1511' onclick='hideorshow("x1511","x1512")'>show</button></p>
+ <div id='x1512' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1513' onclick='hideorshow("x1513","x1514")'>show</button></p>
+ <div id='x1514' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/foreign-key-clause.html">foreign-key-clause:</a></b>
+<button id='x1515' onclick='hideorshow("x1515","x1516")'>show</button></p>
+ <div id='x1516' style='display:none;' class='imgcontainer'>
+ <div style="max-width:648px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 648.158 492.48">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L164,70A15 15 0 0 0 179 55A15 15 0 0 0 164 39L60,39A15 15 0 0 0 45 55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REFERENCES</text>
+<polygon points="202,55 190,59 190,50" style="fill:rgb(0,0,0)"/>
+<path d="M179,55L196,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,70L306,70A15 15 0 0 0 322 55A15 15 0 0 0 306 39L217,39A15 15 0 0 0 202 55A15 15 0 0 0 217 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-table</text>
+<polygon points="358,55 346,59 346,50" style="fill:rgb(0,0,0)"/>
+<path d="M322,55L352,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,70A15 15 0 0 0 388 55A15 15 0 0 0 373 39A15 15 0 0 0 358 55A15 15 0 0 0 373 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="373" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="424,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M388,55L418,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M439,70L533,70A15 15 0 0 0 548 55A15 15 0 0 0 533 39L439,39A15 15 0 0 0 424 55A15 15 0 0 0 439 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="584,55 573,59 573,50" style="fill:rgb(0,0,0)"/>
+<path d="M548,55L578,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M599,70A15 15 0 0 0 614 55A15 15 0 0 0 599 39A15 15 0 0 0 584 55A15 15 0 0 0 599 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="599" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M486,32A15 15 0 0 0 501 17L501,17A15 15 0 0 0 486 2A15 15 0 0 0 471 17L471,17A15 15 0 0 0 486 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="501,17 513,12 513,21" style="fill:rgb(0,0,0)"/>
+<path d="M548,55 L 556,55 Q 563,55 563,40 L 563,32 Q 563,17 548,17 L 522,17 L 507,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,17 L 416,17 Q 401,17 401,32 L 401,40 Q 401,55 412,55 L 424,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,176L69,176A15 15 0 0 0 84 160A15 15 0 0 0 69 145L60,145A15 15 0 0 0 45 160A15 15 0 0 0 60 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="64" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="120,160 109,165 109,156" style="fill:rgb(0,0,0)"/>
+<path d="M84,160L114,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,176L188,176A15 15 0 0 0 203 160A15 15 0 0 0 188 145L135,145A15 15 0 0 0 120 160A15 15 0 0 0 135 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="162" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="275,160 264,165 264,156" style="fill:rgb(0,0,0)"/>
+<path d="M203,160L269,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,176L306,176A15 15 0 0 0 321 160A15 15 0 0 0 306 145L290,145A15 15 0 0 0 275 160A15 15 0 0 0 290 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="344,160 332,165 332,156" style="fill:rgb(0,0,0)"/>
+<path d="M321,160L338,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M359,176L390,176A15 15 0 0 0 405 160A15 15 0 0 0 390 145L359,145A15 15 0 0 0 344 160A15 15 0 0 0 359 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<path d="M135,213L189,213A15 15 0 0 0 204 198A15 15 0 0 0 189 183L135,183A15 15 0 0 0 120 198A15 15 0 0 0 135 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="162" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="120,198 109,203 109,194" style="fill:rgb(0,0,0)"/>
+<path d="M84,160 L 92,160 Q 99,160 99,175 L 99,183 Q 99,198 107,198 L 114,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M204,198 L 212,198 Q 219,198 219,183 L 219,175 Q 219,160 227,160 L 234,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,213L306,213A15 15 0 0 0 321 198A15 15 0 0 0 306 183L290,183A15 15 0 0 0 275 198A15 15 0 0 0 290 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="344,198 332,203 332,194" style="fill:rgb(0,0,0)"/>
+<path d="M321,198L338,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M359,213L424,213A15 15 0 0 0 440 198A15 15 0 0 0 424 183L359,183A15 15 0 0 0 344 198A15 15 0 0 0 359 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="392" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="463,198 451,203 451,194" style="fill:rgb(0,0,0)"/>
+<path d="M440,198L457,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,198 L 470,198 Q 478,198 478,191 L 478,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,251L357,251A15 15 0 0 0 372 236A15 15 0 0 0 357 221L290,221A15 15 0 0 0 275 236A15 15 0 0 0 290 251Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="324" y="236" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASCADE</text>
+<polygon points="463,236 451,240 451,232" style="fill:rgb(0,0,0)"/>
+<path d="M372,236L457,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,236 L 470,236 Q 478,236 478,229 L 478,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,289L361,289A15 15 0 0 0 376 274A15 15 0 0 0 361 259L290,259A15 15 0 0 0 275 274A15 15 0 0 0 290 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RESTRICT</text>
+<polygon points="463,274 451,278 451,270" style="fill:rgb(0,0,0)"/>
+<path d="M376,274L457,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,274 L 470,274 Q 478,274 478,266 L 478,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,327L299,327A15 15 0 0 0 314 312A15 15 0 0 0 299 297L290,297A15 15 0 0 0 275 312A15 15 0 0 0 290 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="295" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="337,312 326,316 326,307" style="fill:rgb(0,0,0)"/>
+<path d="M314,312L332,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M353,327L404,327A15 15 0 0 0 419 312A15 15 0 0 0 404 297L353,297A15 15 0 0 0 337 312A15 15 0 0 0 353 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="378" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ACTION</text>
+<polygon points="463,312 451,316 451,307" style="fill:rgb(0,0,0)"/>
+<path d="M419,312L457,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,312 L 470,312 Q 478,312 478,304 L 478,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357L108,357A15 15 0 0 0 123 342L123,342A15 15 0 0 0 108 327L60,327A15 15 0 0 0 45 342L45,342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="84" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<polygon points="146,342 135,346 135,338" style="fill:rgb(0,0,0)"/>
+<path d="M123,342L140,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M161,357L188,357A15 15 0 0 0 203 342L203,342A15 15 0 0 0 188 327L161,327A15 15 0 0 0 146 342L146,342A15 15 0 0 0 161 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="175" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="463,342 451,346 451,338" style="fill:rgb(0,0,0)"/>
+<path d="M203,342L457,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,115 453,111 453,119" style="fill:rgb(0,0,0)"/>
+<path d="M463,342 L 470,342 Q 478,342 478,327 L 478,130 Q 478,115 463,115 L 462,115 L 447,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="463,160 451,165 451,156" style="fill:rgb(0,0,0)"/>
+<path d="M405,160L457,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,160 L 470,160 Q 478,160 478,153 L 478,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,312 264,316 264,307" style="fill:rgb(0,0,0)"/>
+<path d="M237,160 L 245,160 Q 252,160 252,175 L 252,297 Q 252,312 261,312 L 269,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,274 264,278 264,270" style="fill:rgb(0,0,0)"/>
+<path d="M252,259 L 252,266 Q 252,274 261,274 L 269,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,236 264,240 264,232" style="fill:rgb(0,0,0)"/>
+<path d="M252,221 L 252,228 Q 252,236 261,236 L 269,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,198 264,203 264,194" style="fill:rgb(0,0,0)"/>
+<path d="M252,183 L 252,191 Q 252,198 261,198 L 269,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,160 33,165 33,156" style="fill:rgb(0,0,0)"/>
+<path d="M614,55 L 623,55 Q 632,55 632,70 L 632,100 Q 632,115 617,115 L 20,115 Q 5,115 5,130 L 5,145 Q 5,160 20,160 L 24,160 L 39,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M5,145 L 5,327 Q 5,342 20,342 L 24,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="337,91 332,79 341,79" style="fill:rgb(0,0,0)"/>
+<path d="M322,55 L 329,55 Q 337,55 337,70 L 337,70 L 337,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M337,91 L 337,103 Q 337,115 329,115 L 322,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,433L80,433A15 15 0 0 0 95 417A15 15 0 0 0 80 402L60,402A15 15 0 0 0 45 417A15 15 0 0 0 60 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="133,387 122,392 122,383" style="fill:rgb(0,0,0)"/>
+<path d="M95,417 L 103,417 Q 110,417 110,402 L 110,402 Q 110,387 119,387 L 127,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M148,402L250,402A15 15 0 0 0 265 387A15 15 0 0 0 250 372L148,372A15 15 0 0 0 133 387A15 15 0 0 0 148 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="387" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRABLE</text>
+<polygon points="303,417 292,422 292,413" style="fill:rgb(0,0,0)"/>
+<path d="M265,387 L 273,387 Q 280,387 280,402 L 280,402 Q 280,417 289,417 L 297,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M318,433L389,433A15 15 0 0 0 405 417A15 15 0 0 0 389 402L318,402A15 15 0 0 0 303 417A15 15 0 0 0 318 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INITIALLY</text>
+<polygon points="428,417 416,422 416,413" style="fill:rgb(0,0,0)"/>
+<path d="M405,417L422,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M443,433L523,433A15 15 0 0 0 538 417A15 15 0 0 0 523 402L443,402A15 15 0 0 0 428 417A15 15 0 0 0 443 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRED</text>
+<path d="M318,470L389,470A15 15 0 0 0 405 455A15 15 0 0 0 389 440L318,440A15 15 0 0 0 303 455A15 15 0 0 0 318 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INITIALLY</text>
+<polygon points="428,455 416,460 416,451" style="fill:rgb(0,0,0)"/>
+<path d="M405,455L422,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M443,470L531,470A15 15 0 0 0 546 455A15 15 0 0 0 531 440L443,440A15 15 0 0 0 428 455A15 15 0 0 0 443 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="487" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IMMEDIATE</text>
+<polygon points="569,455 558,460 558,451" style="fill:rgb(0,0,0)"/>
+<path d="M546,455L564,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="569,417 558,422 558,413" style="fill:rgb(0,0,0)"/>
+<path d="M538,417L564,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="569,387 558,392 558,383" style="fill:rgb(0,0,0)"/>
+<path d="M265,387L564,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="303,455 292,460 292,451" style="fill:rgb(0,0,0)"/>
+<path d="M265,387 L 273,387 Q 280,387 280,402 L 280,440 Q 280,455 289,455 L 297,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="638,486 627,490 627,481" style="fill:rgb(0,0,0)"/>
+<path d="M569,387 L 577,387 Q 584,387 584,402 L 584,471 Q 584,486 599,486 L 618,486 L 633,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="642" cy="486" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,455 L 577,455 Q 584,455 584,463 L 584,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,417 L 577,417 Q 584,417 584,425 L 584,432" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M5,327 L 5,471 Q 5,486 20,486 L 612,486 L 627,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M5,372 L 5,380 Q 5,387 20,387 L 118,387 L 133,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M5,402 L 5,410 Q 5,417 20,417 L 24,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/indexed-column.html">indexed-column:</a></b>
+<button id='x1517' onclick='hideorshow("x1517","x1518")'>show</button></p>
+ <div id='x1518' style='display:none;' class='imgcontainer'>
+ <div style="max-width:696px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 696.36 102.6">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="246,47 235,51 235,43" style="fill:rgb(0,0,0)"/>
+<path d="M175,17 L 205,17 Q 220,17 220,32 L 220,32 Q 220,47 230,47 L 240,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,62L325,62A15 15 0 0 0 341 47L341,47A15 15 0 0 0 325 32L261,32A15 15 0 0 0 246 47L246,47A15 15 0 0 0 261 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="293" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="358,47 346,51 346,43" style="fill:rgb(0,0,0)"/>
+<path d="M341,47L352,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,62L478,62A15 15 0 0 0 493 47L493,47A15 15 0 0 0 478 32L373,32A15 15 0 0 0 358 47L358,47A15 15 0 0 0 373 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="511,47 499,51 499,43" style="fill:rgb(0,0,0)"/>
+<path d="M493,47L505,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,85 556,89 556,81" style="fill:rgb(0,0,0)"/>
+<path d="M511,47 L 518,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 Q 541,17 541,32 L 541,70 Q 541,85 551,85 L 561,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,100L613,100A15 15 0 0 0 628 85L628,85A15 15 0 0 0 613 70L582,70A15 15 0 0 0 567 85L567,85A15 15 0 0 0 582 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="645,85 633,89 633,81" style="fill:rgb(0,0,0)"/>
+<path d="M628,85L639,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="687,17 675,21 675,12" style="fill:rgb(0,0,0)"/>
+<path d="M645,85 L 652,85 Q 660,85 660,70 L 660,32 Q 660,17 670,17 L 681,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="690" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,70L100,70L100,39L50,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="175,55 163,59 163,50" style="fill:rgb(0,0,0)"/>
+<path d="M100,55L169,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M175,55 L 182,55 Q 190,55 190,40 L 190,32 Q 190,17 197,17 L 205,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,17 586,21 586,12" style="fill:rgb(0,0,0)"/>
+<path d="M358,17L592,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,17L675,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,62L599,62A15 15 0 0 0 614 47A15 15 0 0 0 599 32L582,32A15 15 0 0 0 567 47A15 15 0 0 0 582 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="645,47 633,51 633,43" style="fill:rgb(0,0,0)"/>
+<path d="M614,47L639,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M645,47 L 652,47 Q 660,47 660,40 L 660,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,47 556,51 556,43" style="fill:rgb(0,0,0)"/>
+<path d="M541,32 L 541,39 Q 541,47 551,47 L 561,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/table-options.html">table-options:</a></b>
+<button id='x1519' onclick='hideorshow("x1519","x1520")'>show</button></p>
+ <div id='x1520' style='display:none;' class='imgcontainer'>
+ <div style="max-width:324px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 324.036 98.31">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="77,17 66,21 66,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 40,36 Q 55,36 55,26 Q 55,17 63,17 L 72,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,32L161,32A15 15 0 0 0 177 17A15 15 0 0 0 161 2L93,2A15 15 0 0 0 77 17A15 15 0 0 0 93 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITHOUT</text>
+<polygon points="194,17 182,21 182,12" style="fill:rgb(0,0,0)"/>
+<path d="M177,17L188,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,32L253,32A15 15 0 0 0 268 17A15 15 0 0 0 253 2L209,2A15 15 0 0 0 194 17A15 15 0 0 0 209 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWID</text>
+<path d="M268,17 L 274,17 Q 280,17 280,26 Q 280,36 295,36 L 299,36 L 314,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="318" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="77,54 66,59 66,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 40,36 Q 55,36 55,45 Q 55,54 63,54 L 72,54" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,69L139,69A15 15 0 0 0 154 54A15 15 0 0 0 139 39L93,39A15 15 0 0 0 77 54A15 15 0 0 0 93 69Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="54" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">STRICT</text>
+<polygon points="314,36 303,40 303,31" style="fill:rgb(0,0,0)"/>
+<path d="M154,54 L 253,54 Q 268,54 274,54 Q 280,54 280,45 Q 280,36 294,36 L 308,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="194,81 205,76 205,85" style="fill:rgb(0,0,0)"/>
+<path d="M285,36 L 293,36 Q 300,36 300,51 L 300,66 Q 300,81 285,81 L 215,81 L 200,81" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,96A15 15 0 0 0 194 81A15 15 0 0 0 179 65A15 15 0 0 0 164 81A15 15 0 0 0 179 96Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="81" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="77,81 89,76 89,85" style="fill:rgb(0,0,0)"/>
+<path d="M164,81L83,81" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M77,81 L 31,81 Q 16,81 16,66 L 16,51 Q 16,36 28,36 L 39,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+
+
+<h1 id="the_create_table_command"><span>2. </span>The CREATE TABLE command</h1>
+
+<p>The "CREATE TABLE" command is used to create a new table in an SQLite
+database. A CREATE TABLE command specifies the following attributes of the
+new table:
+
+</p><ul>
+ <li><p>The name of the new table.
+
+ </p></li><li><p> The database in which the new table is created. Tables may be
+ created in the main database, the temp database, or in any attached
+ database.
+
+ </p></li><li><p> The name of each column in the table.
+
+ </p></li><li><p> The declared type of each column in the table.
+
+ </p></li><li><p> A default value or expression for each column in the table.
+
+ </p></li><li><p> A default collation sequence to use with each column.
+
+ </p></li><li><p> Optionally, a PRIMARY KEY for the table. Both single column and
+ composite (multiple column) primary keys are supported.
+
+ </p></li><li><p> A set of SQL constraints for each table. SQLite supports UNIQUE, NOT
+ NULL, CHECK and FOREIGN KEY constraints.
+
+ </p></li><li><p> Optionally, a <a href="gencol.html">generated column</a> constraint.
+
+ </p></li><li><p> Whether the table is a <a href="withoutrowid.html">WITHOUT ROWID</a> table.
+
+ </p></li><li><p> Whether the table is subject to <a href="stricttables.html">strict type checking</a>.
+</p></li></ul>
+
+<p>Every CREATE TABLE statement must specify a name for the new table.
+ Table names that begin with "sqlite_" are reserved for internal use. It
+ is an error to attempt to create a table with a name that starts with
+ "sqlite_".
+
+</p><p> If a <span class='yyterm'>schema-name</span> is specified, it must be either "main",
+ "temp", or the name of an <a href="lang_attach.html">attached database</a>. In this case
+ the new table is created in the named database. If the "TEMP" or "TEMPORARY"
+ keyword occurs between the "CREATE" and "TABLE" then the new table is
+ created in the temp database. It is an error to specify both a
+ <span class='yyterm'>schema-name</span> and the TEMP or TEMPORARY keyword, unless the
+ <span class='yyterm'>schema-name</span> is "temp".
+ If no schema name is specified and the
+ TEMP keyword is not present then the table is created in the main
+ database.
+
+</p><p>
+ It is usually an error to attempt to create a new table in a database that
+ already contains a table, index or view of the same name. However, if the
+ "IF NOT EXISTS" clause is specified as part of the CREATE TABLE statement and
+ a table or view of the same name already exists, the CREATE TABLE command
+ simply has no effect (and no error message is returned). An error is still
+ returned if the table cannot be created because of an existing index, even
+ if the "IF NOT EXISTS" clause is specified.
+
+</p><p>It is not an error to create a table that has the same name as an
+ existing <a href="lang_createtrigger.html">trigger</a>.
+
+</p><p>Tables are removed using the <a href="lang_droptable.html">DROP TABLE</a> statement. </p>
+
+<a name="createtabas"></a>
+
+<h2 id="create_table_as_select_statements"><span>2.1. </span>CREATE TABLE ... AS SELECT Statements</h2>
+
+<p>A "CREATE TABLE ... AS SELECT" statement creates and populates a database
+table based on the results of a SELECT statement. The table has the same
+number of columns as the rows returned by the SELECT statement. The name of
+each column is the same as the name of the corresponding column in the result
+set of the SELECT statement. The declared type of each column is determined
+by the <a href="datatype3.html#expraff">expression affinity</a> of the corresponding expression in the result set
+of the SELECT statement, as follows:
+</p>
+
+<center><table border="1">
+ <tr><th>Expression Affinity </th><th>Column Declared Type
+ </th></tr><tr><td>TEXT </td><td>"TEXT"
+ </td></tr><tr><td>NUMERIC </td><td>"NUM"
+ </td></tr><tr><td>INTEGER </td><td>"INT"
+ </td></tr><tr><td>REAL </td><td>"REAL"
+ </td></tr><tr><td>BLOB (a.k.a "NONE") </td><td>"" (empty string)
+</td></tr></table></center>
+
+<p>A table created using CREATE TABLE AS has no PRIMARY KEY and no
+constraints of any kind. The default value of each column is NULL. The default
+collation sequence for each column of the new table is BINARY.
+
+</p><p>Tables created using CREATE TABLE AS are initially populated with the
+rows of data returned by the SELECT statement. Rows are assigned contiguously
+ascending <a href="lang_createtable.html#rowid">rowid</a> values, starting with 1, in the <a href="lang_select.html#orderby">order</a> that they
+are returned by the SELECT statement.
+
+<a name="tablecoldef"></a>
+
+</p><h1 id="column_definitions"><span>3. </span>Column Definitions</h1>
+
+<p>Unless it is a CREATE TABLE ... AS SELECT statement, a CREATE TABLE includes
+one or more <a href="syntax/column-def.html">column definitions</a>, optionally followed by a list of
+<a href="syntax/table-constraint.html">table constraints</a>. Each column definition consists of the
+name of the column, optionally followed by the declared type of the column,
+then one or more optional <a href="syntax/column-constraint.html">column constraints</a>. Included in
+the definition of "column constraints" for the purposes of the previous
+statement are the COLLATE and DEFAULT clauses, even though these are not really
+constraints in the sense that they do not restrict the data that the table may
+contain. The other constraints - NOT NULL, CHECK, UNIQUE, PRIMARY KEY and
+FOREIGN KEY constraints - impose restrictions on the table data.
+
+</p><p>The number of columns in a table is limited by the <a href="limits.html#max_column">SQLITE_MAX_COLUMN</a>
+compile-time parameter. A single row of a table cannot store more than
+<a href="limits.html#max_length">SQLITE_MAX_LENGTH</a> bytes of data. Both of these limits can be lowered at
+runtime using the <a href="c3ref/limit.html">sqlite3_limit()</a> C/C++ interface.</p>
+
+<h2 id="column_data_types"><span>3.1. </span>Column Data Types</h2>
+
+<p>Unlike most SQL databases, SQLite does not restrict the type of data that
+may be inserted into a column based on the columns declared type. Instead,
+SQLite uses <a href="datatype3.html">dynamic typing</a>. The declared type of a column is used to
+determine the <a href="datatype3.html#affinity">affinity</a> of the column only.
+
+<a name="dfltval"></a>
+
+</p><h2 id="the_default_clause"><span>3.2. </span>The DEFAULT clause</h2>
+<p>The DEFAULT clause specifies a default value to use for the column if no
+value is explicitly provided by the user when doing an <a href="lang_insert.html">INSERT</a>. If there
+is no explicit DEFAULT clause attached to a column definition, then the
+default value of the column is NULL. An explicit DEFAULT clause may specify
+that the default value is NULL, a string constant, a blob constant, a
+signed-number, or any constant expression enclosed in parentheses. A
+default value may also be one of the special case-independent keywords
+CURRENT_TIME, CURRENT_DATE or CURRENT_TIMESTAMP. For the purposes of the
+DEFAULT clause, an expression is considered constant if it
+contains no sub-queries, column or table references, <a href="lang_expr.html#varparam">bound parameters</a>,
+or string literals enclosed in double-quotes instead of single-quotes.
+
+</p><p>Each time a row is inserted into the table by an INSERT statement that
+does not provide explicit values for all table columns the values stored in
+the new row are determined by their default values, as follows:
+
+</p><ul>
+ <li><p>If the default value of the column is a constant NULL, text, blob or
+ signed-number value, then that value is used directly in the new row.
+
+ </p></li><li><p>If the default value of a column is an expression in parentheses, then
+ the expression is evaluated once for each row inserted and the results
+ used in the new row.
+
+ </p></li><li><p>If the default value of a column is CURRENT_TIME, CURRENT_DATE or
+ CURRENT_TIMESTAMP, then the value used in the new row is a text
+ representation of the current UTC date and/or time. For CURRENT_TIME, the
+ format of the value is "HH:MM:SS". For CURRENT_DATE, "YYYY-MM-DD". The
+ format for CURRENT_TIMESTAMP is "YYYY-MM-DD HH:MM:SS".
+</p></li></ul>
+
+<a name="collateclause"></a>
+
+<h2 id="the_collate_clause"><span>3.3. </span>The COLLATE clause</h2>
+<p>The COLLATE clause specifies the name of a <a href="datatype3.html#collation">collating sequence</a> to use as
+the default collation sequence for the column. If no COLLATE clause is
+specified, the default collation sequence is <a href="datatype3.html#collation">BINARY</a>.
+
+</p><h2 id="the_generated_always_as_clause"><span>3.4. </span>The GENERATED ALWAYS AS clause</h2>
+<p>A column that includes a GENERATED ALWAY AS clause is a <a href="gencol.html">generated column</a>.
+Generated columns are supported beginning with SQLite version 3.31.0 (2020-01-22).
+See the <a href="gencol.html">separate documentation</a> for details on the capabilities and
+limitations of generated columns.
+
+<a name="primkeyconst"></a>
+
+</p><h2 id="the_primary_key"><span>3.5. </span>The PRIMARY KEY</h2>
+<p>Each table in SQLite may have at most one PRIMARY KEY. If the
+ keywords PRIMARY KEY are added to a column definition, then the primary key
+ for the table consists of that single column. Or, if a PRIMARY KEY clause
+ is specified as a <a href="syntax/table-constraint.html">table-constraint</a>, then the primary key of the table
+ consists of the list of columns specified as part of the PRIMARY KEY clause.
+ The PRIMARY KEY clause must contain only column names &mdash; the use of
+ expressions in an <a href="syntax/indexed-column.html">indexed-column</a> of a PRIMARY KEY is not supported.
+ An error is raised if more than one PRIMARY KEY clause appears in a
+ CREATE TABLE statement. The PRIMARY KEY is optional for ordinary tables
+ but is required for <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+
+</p><p>If a table has a single column primary key and the declared type of that
+ column is "INTEGER" and the table is not a <a href="withoutrowid.html">WITHOUT ROWID</a> table,
+ then the column is known as an <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>.
+ See <a href="lang_createtable.html#rowid">below</a> for a description of the special properties and behaviors
+ associated with an <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>.
+
+</p><p>Each row in a table with a primary key must have a unique combination
+ of values in its primary key columns. For the purposes of determining
+ the uniqueness of primary key values, NULL values are considered distinct from
+ all other values, including other NULLs. If an <a href="lang_insert.html">INSERT</a> or <a href="lang_update.html">UPDATE</a>
+ statement attempts to modify the table content so that two or more rows
+ have identical primary key values, that is a constraint violation.
+
+</p><p> According to the SQL standard, PRIMARY KEY should always imply NOT NULL.
+ Unfortunately, due to a bug in some early versions, this is not the
+ case in SQLite. Unless the column is an <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> or
+ the table is a <a href="withoutrowid.html">WITHOUT ROWID</a> table or a <a href="stricttables.html">STRICT</a> table
+ or the column is declared NOT NULL,
+ SQLite allows NULL values in a PRIMARY KEY column. SQLite could be fixed to
+ conform to the standard, but doing so might break legacy applications.
+ Hence, it has been decided to merely document the fact that SQLite
+ allows NULLs in most PRIMARY KEY columns.
+
+<a name="uniqueconst"></a>
+
+</p><h2 id="unique_constraints"><span>3.6. </span>UNIQUE constraints</h2>
+<p>A UNIQUE constraint is similar to a PRIMARY KEY constraint, except
+ that a single table may have any number of UNIQUE constraints. For each
+ UNIQUE constraint on the table, each row must contain a unique combination
+ of values in the columns identified by the UNIQUE constraint.
+ For the purposes of UNIQUE constraints, NULL values
+ are considered distinct from all other values, including other NULLs.
+ As with PRIMARY KEYs, a UNIQUE <a href="syntax/table-constraint.html">table-constraint</a> clause must contain
+ only column names &mdash; the use of
+ expressions in an <a href="syntax/indexed-column.html">indexed-column</a> of a UNIQUE <a href="syntax/table-constraint.html">table-constraint</a>
+ is not supported.
+
+
+</p><p>In most cases, UNIQUE and PRIMARY KEY
+ constraints are implemented by creating a unique index in the database.
+ (The exceptions are <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> and PRIMARY KEYs on
+ <a href="withoutrowid.html">WITHOUT ROWID</a> tables.)
+ Hence, the following schemas are logically equivalent:
+
+ </p><ol>
+ <li><p>CREATE TABLE t1(a, b UNIQUE);
+ </p></li><li><p>CREATE TABLE t1(a, b PRIMARY KEY);
+ </p></li><li><p>CREATE TABLE t1(a, b);<br>
+ CREATE UNIQUE INDEX t1b ON t1(b);
+ </p></li></ol>
+
+<a name="ckconst"></a>
+
+<h2 id="check_constraints"><span>3.7. </span>CHECK constraints</h2>
+<p>A CHECK constraint may be attached to a column definition or
+ specified as a table constraint. In practice it makes no difference. Each
+ time a new row is inserted into the table or an existing row is updated,
+ the expression associated with each CHECK constraint is evaluated and
+ cast to a NUMERIC value in the same way as a <a href="lang_expr.html#castexpr">CAST expression</a>. If the
+ result is zero (integer value 0 or real value 0.0), then a constraint
+ violation has occurred. If the CHECK expression evaluates to NULL, or
+ any other non-zero value, it is not a constraint violation.
+ The expression of a CHECK constraint may not contain a subquery.
+
+</p><p>CHECK constraints are only verified when the table is written, not when
+ it is read. Furthermore, verification of CHECK constraints can be
+ temporarily disabled using the "<a href="pragma.html#pragma_ignore_check_constraints">PRAGMA ignore_check_constraints=ON;</a>"
+ statement. Hence, it is possible that a query might produce results that
+ violate the CHECK constraints.
+
+<a name="notnullconst"></a>
+
+</p><h2 id="not_null_constraints"><span>3.8. </span>NOT NULL constraints</h2>
+<p>A NOT NULL constraint may only be attached to a column definition,
+ not specified as a table constraint. Not surprisingly, a NOT NULL
+ constraint dictates that the associated column may not contain a NULL value.
+ Attempting to set the column value to NULL when inserting a new row or
+ updating an existing one causes a constraint violation. NOT NULL
+ constraints are not verified during queries, so a query of a column might
+ produce a NULL value even though the column is marked as NOT NULL, if the
+ database file is corrupt.
+
+
+</p><h1 id="constraint_enforcement"><span>4. </span>Constraint enforcement</h1>
+
+<p>Constraints are checked during <a href="lang_insert.html">INSERT</a> and <a href="lang_update.html">UPDATE</a> and by
+<a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> and sometimes
+by <a href="lang_altertable.html">ALTER TABLE</a>. Queries and <a href="lang_delete.html">DELETE</a>
+statements do not normally verify constraints.
+Hence, if a database file has been corrupted (perhaps by an external
+program making direct changes to the database file without going through
+the SQLite library) a query might return data that violates a constraint.
+For example:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(x INT CHECK( x>3 ));
+/* Insert a row with X less than 3 by directly writing into the
+** database file using an external program */
+PRAGMA integrity_check; -- Reports row with x less than 3 as corrupt
+INSERT INTO t1(x) VALUES(2); -- Fails with SQLITE_CORRUPT
+SELECT x FROM t1; -- Returns an integer less than 3 in spite of the CHECK constraint
+</pre></div>
+
+<p>Enforcement of CHECK constraints can be temporarily disabled using
+the <a href="pragma.html#pragma_ignore_check_constraints">PRAGMA ignore_check_constraints=ON;</a> statement.
+
+</p><h2 id="response_to_constraint_violations"><span>4.1. </span>Response to constraint violations</h2>
+
+<p>The response to a constraint violation is determined by the
+ <a href="lang_conflict.html">constraint conflict resolution algorithm</a>. Each
+ PRIMARY KEY, UNIQUE, NOT NULL and CHECK constraint has a default conflict
+ resolution algorithm. PRIMARY KEY, UNIQUE and NOT NULL constraints may be
+ explicitly assigned a default conflict resolution algorithm by including
+ a <a href="syntax/conflict-clause.html">conflict-clause</a> in their definitions. Or, if a constraint definition
+ does not include a <a href="syntax/conflict-clause.html">conflict-clause</a> or it is a CHECK constraint, the default
+ conflict resolution algorithm is ABORT. Different constraints within the
+ same table may have different default conflict resolution algorithms. See
+ the section titled <a href="lang_conflict.html">ON CONFLICT</a> for additional information.
+
+<a name="rowid"></a>
+
+</p><h1 id="rowids_and_the_integer_primary_key"><span>5. </span>ROWIDs and the INTEGER PRIMARY KEY</h1>
+
+<p>Except for <a href="withoutrowid.html">WITHOUT ROWID</a> tables, all rows within SQLite tables
+have a 64-bit signed integer key that uniquely identifies the row within its table.
+This integer is usually
+called the "rowid". The rowid value can be accessed using one of the special
+case-independent names "rowid", "oid", or "_rowid_" in place of a column name.
+If a table contains a user defined column named "rowid", "oid" or "_rowid_",
+then that name always refers the explicitly declared column and cannot be used
+to retrieve the integer rowid value.
+
+</p><p>The rowid (and "oid" and "_rowid_") is omitted in <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+WITHOUT ROWID tables are only available in SQLite <a href="releaselog/3_8_2.html">version 3.8.2</a>
+(2013-12-06) and later.
+A table that lacks the WITHOUT ROWID clause is called a "rowid table".
+
+</p><p>The data for rowid tables is stored as a B-Tree structure containing
+one entry for each table row, using the rowid value as the key. This means that
+retrieving or sorting records by rowid is fast. Searching for a record with a
+specific rowid, or for all records with rowids within a specified range is
+around twice as fast as a similar search made by specifying any other PRIMARY
+KEY or indexed value.
+
+</p><p> With one exception noted below, if a rowid table has a primary key that consists
+of a single column and the declared type of that column is "INTEGER" in any mixture of
+upper and lower case, then the column becomes an alias for the rowid. Such a
+column is usually referred to as an "integer primary key". A PRIMARY KEY column
+only becomes an integer primary key if the declared type name is exactly
+"INTEGER". Other integer type names like "INT" or "BIGINT" or "SHORT INTEGER"
+or "UNSIGNED INTEGER" causes the primary key column to behave as an ordinary
+table column with integer <a href="datatype3.html#affinity">affinity</a> and a unique index, not as an alias for
+the rowid.
+
+</p><p> The exception mentioned above is that if the declaration of a column with
+declared type "INTEGER" includes an "PRIMARY KEY DESC" clause, it does not
+become an alias for the rowid and is not classified as an integer primary key.
+This quirk is not by design. It is due to a bug in early versions of SQLite.
+But fixing the bug could result in backwards incompatibilities.
+Hence, the original behavior has been retained (and documented) because odd
+behavior in a corner case is far better than a compatibility break. This means
+that the following three table declarations all cause the column "x" to be an
+alias for the rowid (an integer primary key):
+
+</p><ul>
+<li><tt>CREATE TABLE t(x INTEGER PRIMARY KEY ASC, y, z);</tt>
+</li><li><tt>CREATE TABLE t(x INTEGER, y, z, PRIMARY KEY(x ASC));</tt>
+</li><li><tt>CREATE TABLE t(x INTEGER, y, z, PRIMARY KEY(x DESC));</tt>
+</li></ul>
+
+<p>But the following declaration does not result in "x" being an alias for
+the rowid:
+</p><ul>
+<li><tt>CREATE TABLE t(x INTEGER PRIMARY KEY DESC, y, z);</tt>
+</li></ul>
+
+<p>Rowid values may be modified using an UPDATE statement in the same
+way as any other column value can, either using one of the built-in aliases
+("rowid", "oid" or "_rowid_") or by using an alias created by an integer
+primary key. Similarly, an INSERT statement may provide a value to use as the
+rowid for each row inserted. Unlike normal SQLite columns, an integer primary
+key or rowid column must contain integer values. Integer primary key or rowid
+columns are not able to hold floating point values, strings, BLOBs, or NULLs.
+
+</p><p>If an UPDATE statement attempts to set an integer primary key or rowid column
+to a NULL or blob value, or to a string or real value that cannot be losslessly
+converted to an integer, a "datatype mismatch" error occurs and the statement
+is aborted. If an INSERT statement attempts to insert a blob value, or a string
+or real value that cannot be losslessly converted to an integer into an
+integer primary key or rowid column, a "datatype mismatch" error occurs and the
+statement is aborted.
+
+</p><p>If an INSERT statement attempts to insert a NULL value into a rowid or
+integer primary key column, the system chooses an integer value to use as the
+rowid automatically. A detailed description of how this is done is provided
+<a href="autoinc.html">separately</a>.</p>
+
+<p>The <a href="foreignkeys.html#parentchild">parent key</a> of a <a href="foreignkeys.html">foreign key constraint</a> is not allowed to
+use the rowid. The parent key must used named columns only.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_createtable.in?m=6b48097a40243196e">2022-12-14 11:53:20</a> UTC </small></i></p>
+
diff --git a/www/lang_createtrigger.html b/www/lang_createtrigger.html
new file mode 100644
index 0000000..eb2974a
--- /dev/null
+++ b/www/lang_createtrigger.html
@@ -0,0 +1,4354 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>CREATE TRIGGER</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+CREATE TRIGGER
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#syntax">1. Syntax</a></div>
+<div class="fancy-toc1"><a href="#description">2. Description</a></div>
+<div class="fancy-toc2"><a href="#syntax_restrictions_on_update_delete_and_insert_statements_within_triggers">2.1. Syntax Restrictions On UPDATE, DELETE, and INSERT Statements Within
+Triggers</a></div>
+<div class="fancy-toc1"><a href="#instead_of_triggers">3. INSTEAD OF triggers</a></div>
+<div class="fancy-toc1"><a href="#some_example_triggers">4. Some Example Triggers</a></div>
+<div class="fancy-toc1"><a href="#cautions_on_the_use_of_before_triggers">5. Cautions On The Use Of BEFORE triggers</a></div>
+<div class="fancy-toc1"><a href="#the_raise_function">6. The RAISE() function</a></div>
+<div class="fancy-toc1"><a href="#temp_triggers_on_non_temp_tables">7. TEMP Triggers on Non-TEMP Tables</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="syntax"><span>1. </span>Syntax</h1>
+
+<p><b><a href="syntax/create-trigger-stmt.html">create-trigger-stmt:</a></b>
+<button id='x1521' onclick='hideorshow("x1521","x1522")'>hide</button></p>
+ <div id='x1522' class='imgcontainer'>
+ <div style="max-width:678px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 678.058 746.712">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L199,56A15 15 0 0 0 214 41A15 15 0 0 0 199 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMP</text>
+<path d="M167,94L259,94A15 15 0 0 0 274 79A15 15 0 0 0 259 64L167,64A15 15 0 0 0 152 79A15 15 0 0 0 167 94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="79" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMPORARY</text>
+<path d="M325,32L386,32A15 15 0 0 0 401 17A15 15 0 0 0 386 2L325,2A15 15 0 0 0 310 17A15 15 0 0 0 325 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRIGGER</text>
+<polygon points="213,17 201,21 201,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L207,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,17 299,21 299,12" style="fill:rgb(0,0,0)"/>
+<path d="M213,17L305,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,79 140,83 140,74" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,32 L 131,64 Q 131,79 138,79 L 146,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M274,79 L 282,79 Q 289,79 289,64 L 289,32 Q 289,17 294,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M214,41 L 274,41 Q 289,41 289,33 L 289,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="437,17 425,21 425,12" style="fill:rgb(0,0,0)"/>
+<path d="M401,17L431,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M452,32A15 15 0 0 0 467 17A15 15 0 0 0 452 2A15 15 0 0 0 437 17A15 15 0 0 0 452 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="452" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="490,17 478,21 478,12" style="fill:rgb(0,0,0)"/>
+<path d="M467,17L484,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,32L525,32A15 15 0 0 0 540 17A15 15 0 0 0 525 2L505,2A15 15 0 0 0 490 17A15 15 0 0 0 505 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="515" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="563,17 552,21 552,12" style="fill:rgb(0,0,0)"/>
+<path d="M540,17L558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,32L623,32A15 15 0 0 0 638 17A15 15 0 0 0 623 2L578,2A15 15 0 0 0 563 17A15 15 0 0 0 578 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="601" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="213,109 224,105 224,113" style="fill:rgb(0,0,0)"/>
+<path d="M401,17 L 408,17 Q 416,17 416,32 L 416,94 Q 416,109 401,109 L 234,109 L 219,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="563,109 575,105 575,113" style="fill:rgb(0,0,0)"/>
+<path d="M638,17 L 646,17 Q 653,17 653,32 L 653,94 Q 653,109 638,109 L 584,109 L 569,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M563,109L310,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,147 17,151 17,142" style="fill:rgb(0,0,0)"/>
+<path d="M310,109 L 20,109 Q 5,109 5,124 L 5,132 Q 5,147 14,147 L 23,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,162L140,162A15 15 0 0 0 155 147A15 15 0 0 0 140 132L43,132A15 15 0 0 0 28 147A15 15 0 0 0 43 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,147 166,151 166,142" style="fill:rgb(0,0,0)"/>
+<path d="M155,147L172,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,162A15 15 0 0 0 208 147A15 15 0 0 0 193 132A15 15 0 0 0 178 147A15 15 0 0 0 193 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,147 233,151 233,142" style="fill:rgb(0,0,0)"/>
+<path d="M208,147L238,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,162L351,162A15 15 0 0 0 366 147A15 15 0 0 0 351 132L259,132A15 15 0 0 0 244 147A15 15 0 0 0 259 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="305" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">trigger-name</text>
+<polygon points="402,147 391,151 391,142" style="fill:rgb(0,0,0)"/>
+<path d="M366,147L396,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,162L472,162A15 15 0 0 0 487 147A15 15 0 0 0 472 132L417,132A15 15 0 0 0 402 147A15 15 0 0 0 417 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BEFORE</text>
+<path d="M417,200L457,200A15 15 0 0 0 472 185A15 15 0 0 0 457 169L417,169A15 15 0 0 0 402 185A15 15 0 0 0 417 200Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="437" y="185" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AFTER</text>
+<path d="M417,238L479,238A15 15 0 0 0 494 222A15 15 0 0 0 479 207L417,207A15 15 0 0 0 402 222A15 15 0 0 0 417 238Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="222" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INSTEAD</text>
+<polygon points="517,222 505,227 505,218" style="fill:rgb(0,0,0)"/>
+<path d="M494,222L511,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,238L538,238A15 15 0 0 0 553 222A15 15 0 0 0 538 207L532,207A15 15 0 0 0 517 222A15 15 0 0 0 532 238Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="535" y="222" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OF</text>
+<polygon points="402,185 391,189 391,180" style="fill:rgb(0,0,0)"/>
+<path d="M366,147 L 374,147 Q 381,147 381,162 L 381,170 Q 381,185 389,185 L 396,185" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="402,222 391,227 391,218" style="fill:rgb(0,0,0)"/>
+<path d="M366,147 L 374,147 Q 381,147 381,162 L 381,207 Q 381,222 389,222 L 396,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="92,177 80,181 80,173" style="fill:rgb(0,0,0)"/>
+<path d="M5,132 L 5,162 Q 5,177 20,177 L 71,177 L 86,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,177 L 205,177 Q 220,177 220,162 L 220,162 Q 220,147 227,147 L 235,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="193,260 205,256 205,265" style="fill:rgb(0,0,0)"/>
+<path d="M381,207 L 381,245 Q 381,260 366,260 L 214,260 L 199,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="576,222 564,227 564,218" style="fill:rgb(0,0,0)"/>
+<path d="M553,222L570,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="448,260 459,256 459,265" style="fill:rgb(0,0,0)"/>
+<path d="M576,222 L 584,222 Q 591,222 591,237 L 591,245 Q 591,260 576,260 L 469,260 L 454,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,260L366,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="576,147 564,151 564,142" style="fill:rgb(0,0,0)"/>
+<path d="M487,147L570,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M576,147 L 584,147 Q 591,147 591,162 L 591,223 L 591,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="576,185 564,189 564,180" style="fill:rgb(0,0,0)"/>
+<path d="M472,185L570,185" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M576,185 L 584,185 Q 591,185 591,192 L 591,200" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,306L96,306A15 15 0 0 0 111 290L111,290A15 15 0 0 0 96 275L43,275A15 15 0 0 0 28 290L28,290A15 15 0 0 0 43 306Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="290" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<path d="M43,343L92,343A15 15 0 0 0 107 328A15 15 0 0 0 92 313L43,313A15 15 0 0 0 28 328A15 15 0 0 0 43 343Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="68" y="328" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INSERT</text>
+<path d="M43,381L98,381A15 15 0 0 0 113 366A15 15 0 0 0 98 351L43,351A15 15 0 0 0 28 366A15 15 0 0 0 43 381Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="366" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="28,366 17,370 17,362" style="fill:rgb(0,0,0)"/>
+<path d="M193,260 L 20,260 Q 5,260 5,275 L 5,351 Q 5,366 14,366 L 23,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,290 17,295 17,286" style="fill:rgb(0,0,0)"/>
+<path d="M5,275 L 5,283 Q 5,290 14,290 L 23,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,328 17,333 17,324" style="fill:rgb(0,0,0)"/>
+<path d="M5,313 L 5,321 Q 5,328 14,328 L 23,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M164,411L170,411A15 15 0 0 0 185 396A15 15 0 0 0 170 381L164,381A15 15 0 0 0 149 396A15 15 0 0 0 164 411Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="396" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OF</text>
+<polygon points="221,396 209,401 209,392" style="fill:rgb(0,0,0)"/>
+<path d="M185,396L215,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,411L330,411A15 15 0 0 0 345 396A15 15 0 0 0 330 381L236,381A15 15 0 0 0 221 396A15 15 0 0 0 236 411Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="396" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M283,449L283,449A15 15 0 0 0 298 434A15 15 0 0 0 283 419L283,419A15 15 0 0 0 268 434A15 15 0 0 0 283 449Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="434" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="381,396 369,401 369,392" style="fill:rgb(0,0,0)"/>
+<path d="M345,396L375,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="419,290 408,295 408,286" style="fill:rgb(0,0,0)"/>
+<path d="M381,396 L 388,396 Q 396,396 396,381 L 396,305 Q 396,290 405,290 L 413,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M434,306L443,306A15 15 0 0 0 458 290L458,290A15 15 0 0 0 443 275L434,275A15 15 0 0 0 419 290L419,290A15 15 0 0 0 434 306Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="290" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="481,290 470,295 470,286" style="fill:rgb(0,0,0)"/>
+<path d="M458,290L475,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M496,306L572,306A15 15 0 0 0 587 290L587,290A15 15 0 0 0 572 275L496,275A15 15 0 0 0 481 290L481,290A15 15 0 0 0 496 306Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="290" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<path d="M111,290L408,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,328 369,333 369,324" style="fill:rgb(0,0,0)"/>
+<path d="M107,328L375,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M381,328 L 388,328 Q 396,328 396,321 L 396,313" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,366 369,370 369,362" style="fill:rgb(0,0,0)"/>
+<path d="M113,366L375,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M381,366 L 388,366 Q 396,366 396,359 L 396,351" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="149,396 137,401 137,392" style="fill:rgb(0,0,0)"/>
+<path d="M113,366 L 120,366 Q 128,366 128,381 L 128,381 Q 128,396 135,396 L 143,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,434 309,430 309,438" style="fill:rgb(0,0,0)"/>
+<path d="M345,396 L 352,396 Q 360,396 360,411 L 360,419 Q 360,434 345,434 L 319,434 L 304,434" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M268,434 L 213,434 Q 198,434 198,419 L 198,411 Q 198,396 205,396 L 213,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,525L62,525A15 15 0 0 0 77 510A15 15 0 0 0 62 495L43,495A15 15 0 0 0 28 510A15 15 0 0 0 43 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="52" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOR</text>
+<polygon points="100,510 88,514 88,505" style="fill:rgb(0,0,0)"/>
+<path d="M77,510L94,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M115,525L147,525A15 15 0 0 0 162 510A15 15 0 0 0 147 495L115,495A15 15 0 0 0 100 510A15 15 0 0 0 115 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="131" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EACH</text>
+<polygon points="185,510 174,514 174,505" style="fill:rgb(0,0,0)"/>
+<path d="M162,510L179,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,525L224,525A15 15 0 0 0 240 510A15 15 0 0 0 224 495L200,495A15 15 0 0 0 185 510A15 15 0 0 0 200 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="212" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="312,510 300,514 300,505" style="fill:rgb(0,0,0)"/>
+<path d="M240,510L306,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M327,525L366,525A15 15 0 0 0 381 510A15 15 0 0 0 366 495L327,495A15 15 0 0 0 312 510A15 15 0 0 0 327 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="404,510 393,514 393,505" style="fill:rgb(0,0,0)"/>
+<path d="M381,510L399,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,525L454,525L454,495L404,495Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M43,631L82,631A15 15 0 0 0 97 616A15 15 0 0 0 82 600L43,600A15 15 0 0 0 28 616A15 15 0 0 0 43 631Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="616" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BEGIN</text>
+<polygon points="169,616 158,620 158,611" style="fill:rgb(0,0,0)"/>
+<path d="M97,616L163,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M169,631L282,631L282,600L169,600Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="226" y="616" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt</text>
+<polygon points="336,616 324,620 324,611" style="fill:rgb(0,0,0)"/>
+<path d="M282,616L330,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,631A15 15 0 0 0 366 616A15 15 0 0 0 351 600A15 15 0 0 0 336 616A15 15 0 0 0 351 631Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="616" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">;</text>
+<polygon points="402,616 391,620 391,611" style="fill:rgb(0,0,0)"/>
+<path d="M366,616L396,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,631L438,631A15 15 0 0 0 453 616A15 15 0 0 0 438 600L417,600A15 15 0 0 0 402 616A15 15 0 0 0 417 631Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="428" y="616" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="668,616 657,620 657,611" style="fill:rgb(0,0,0)"/>
+<path d="M453,616L662,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="672" cy="616" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M169,668L273,668L273,638L169,638Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="653" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">insert-stmt</text>
+<path d="M169,706L276,706L276,676L169,676Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="223" y="691" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt</text>
+<path d="M169,744L273,744L273,714L169,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="169,729 158,733 158,725" style="fill:rgb(0,0,0)"/>
+<path d="M131,616 L 139,616 Q 146,616 146,631 L 146,714 Q 146,729 155,729 L 163,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,653 158,658 158,649" style="fill:rgb(0,0,0)"/>
+<path d="M146,638 L 146,646 Q 146,653 155,653 L 163,653" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,691 158,695 158,687" style="fill:rgb(0,0,0)"/>
+<path d="M146,676 L 146,684 Q 146,691 155,691 L 163,691" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,729 286,733 286,725" style="fill:rgb(0,0,0)"/>
+<path d="M273,729L292,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,729 L 305,729 Q 313,729 313,714 L 313,631 Q 313,616 319,616 L 324,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,653 286,658 286,649" style="fill:rgb(0,0,0)"/>
+<path d="M273,653L292,653" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,653 L 305,653 Q 313,653 313,646 L 313,638" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,691 286,695 286,687" style="fill:rgb(0,0,0)"/>
+<path d="M276,691L292,691" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,691 L 305,691 Q 313,691 313,684 L 313,676" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="226,585 237,581 237,590" style="fill:rgb(0,0,0)"/>
+<path d="M366,616 L 374,616 Q 381,616 381,601 L 381,600 Q 381,585 366,585 L 246,585 L 231,585" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="132,616 120,620 120,611" style="fill:rgb(0,0,0)"/>
+<path d="M226,585 L 124,585 Q 109,585 109,600 L 109,601 Q 109,616 117,616 L 126,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="602,434 597,423 606,423" style="fill:rgb(0,0,0)"/>
+<path d="M587,290 L 594,290 Q 602,290 602,305 L 602,414 L 602,429" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="226,472 237,468 237,476" style="fill:rgb(0,0,0)"/>
+<path d="M602,434 L 602,457 Q 602,472 587,472 L 246,472 L 231,472" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,616 17,620 17,611" style="fill:rgb(0,0,0)"/>
+<path d="M226,472 L 20,472 Q 5,472 5,487 L 5,601 Q 5,616 14,616 L 23,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,510 17,514 17,505" style="fill:rgb(0,0,0)"/>
+<path d="M5,495 L 5,502 Q 5,510 14,510 L 23,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="226,547 237,543 237,552" style="fill:rgb(0,0,0)"/>
+<path d="M454,510 L 461,510 Q 469,510 469,525 L 469,532 Q 469,547 454,547 L 246,547 L 231,547" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M226,547 L 20,547 Q 5,547 5,555 L 5,562" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,510 L 247,510 Q 255,510 255,525 L 255,532 Q 255,547 247,547 L 240,547" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,510 L 297,510 Q 282,510 282,495 L 282,487 Q 282,472 297,472 L 312,472" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/delete-stmt.html">delete-stmt:</a></b>
+<button id='x1523' onclick='hideorshow("x1523","x1524")'>show</button></p>
+ <div id='x1524' style='display:none;' class='imgcontainer'>
+ <div style="max-width:648px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 648.706 220.32">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L114,32A15 15 0 0 0 129 17A15 15 0 0 0 114 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="98" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M189,62L275,62A15 15 0 0 0 290 47A15 15 0 0 0 275 32L189,32A15 15 0 0 0 174 47A15 15 0 0 0 189 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="232" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="232,17 220,21 220,12" style="fill:rgb(0,0,0)"/>
+<path d="M129,17L226,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,17 368,21 368,12" style="fill:rgb(0,0,0)"/>
+<path d="M232,17L374,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,32L606,32L606,2L380,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="174,47 162,51 162,43" style="fill:rgb(0,0,0)"/>
+<path d="M129,17 L 136,17 Q 144,17 144,32 L 144,32 Q 144,47 156,47 L 168,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,47 301,51 301,43" style="fill:rgb(0,0,0)"/>
+<path d="M290,47L307,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,47 L 321,47 Q 328,47 328,32 L 328,32 Q 328,17 343,17 L 353,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,70A15 15 0 0 0 508 55L508,55A15 15 0 0 0 493 39A15 15 0 0 0 478 55L478,55A15 15 0 0 0 493 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="508,55 520,50 520,59" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,40 Q 621,55 606,55 L 529,55 L 514,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,55 L 372,55 Q 357,55 357,40 L 357,32 Q 357,17 363,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,138L136,138A15 15 0 0 0 151 123A15 15 0 0 0 136 108L83,108A15 15 0 0 0 68 123A15 15 0 0 0 83 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="174,123 163,127 163,118" style="fill:rgb(0,0,0)"/>
+<path d="M151,123L168,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,138L224,138A15 15 0 0 0 239 123A15 15 0 0 0 224 108L189,108A15 15 0 0 0 174 123A15 15 0 0 0 189 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="207" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="262,123 251,127 251,118" style="fill:rgb(0,0,0)"/>
+<path d="M239,123L256,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M262,138L447,138L447,108L262,108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<circle cx="642" cy="213" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M639,213 L 618,213 Q 603,213 603,198 L 603,198 Q 603,183 595,183 L 588,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M437,198L588,198L588,168L437,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="512" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="437,183 425,187 425,179" style="fill:rgb(0,0,0)"/>
+<path d="M431,183 L 421,183 Q 410,183 410,198 L 410,198 Q 410,213 403,213 L 395,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,213 384,218 384,209" style="fill:rgb(0,0,0)"/>
+<path d="M390,213 L 379,213 Q 369,213 369,198 L 369,198 Q 369,183 361,183 L 354,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M305,198L354,198L354,168L305,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="329" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="305,183 293,187 293,179" style="fill:rgb(0,0,0)"/>
+<path d="M299,183L282,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,198L267,198A15 15 0 0 0 282 183A15 15 0 0 0 267 168L217,168A15 15 0 0 0 202 183A15 15 0 0 0 217 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="242" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="355,153 366,149 366,157" style="fill:rgb(0,0,0)"/>
+<path d="M447,123 L 455,123 Q 462,123 462,138 L 462,138 Q 462,153 447,153 L 375,153 L 360,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="202,183 190,187 190,179" style="fill:rgb(0,0,0)"/>
+<path d="M355,153 L 195,153 Q 180,153 180,168 L 180,168 Q 180,183 188,183 L 196,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="639,213 627,218 627,209" style="fill:rgb(0,0,0)"/>
+<path d="M180,172 L 180,198 Q 180,213 195,213 L 618,213 L 633,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="355,85 366,81 366,89" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,70 Q 621,85 606,85 L 375,85 L 360,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,123 56,127 56,118" style="fill:rgb(0,0,0)"/>
+<path d="M355,85 L 62,85 Q 47,85 47,100 L 47,108 Q 47,123 55,123 L 62,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,47 43,36 51,36" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,29 L 47,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,47L47,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1525' onclick='hideorshow("x1525","x1526")'>show</button></p>
+ <div id='x1526' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/qualified-table-name.html">qualified-table-name:</a></b>
+<button id='x1527' onclick='hideorshow("x1527","x1528")'>show</button></p>
+ <div id='x1528' style='display:none;' class='imgcontainer'>
+ <div style="max-width:599px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 599.746 182.736">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L156,32A15 15 0 0 0 171 17A15 15 0 0 0 156 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M171,17L189,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,32A15 15 0 0 0 225 17A15 15 0 0 0 210 2A15 15 0 0 0 195 17A15 15 0 0 0 210 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,17 249,21 249,12" style="fill:rgb(0,0,0)"/>
+<path d="M225,17L255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32L351,32A15 15 0 0 0 366 17A15 15 0 0 0 351 2L276,2A15 15 0 0 0 261 17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="408,44 396,48 396,40" style="fill:rgb(0,0,0)"/>
+<path d="M366,17 L 374,17 Q 381,17 381,30 Q 381,44 392,44 L 402,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,59L427,59A15 15 0 0 0 442 44L442,44A15 15 0 0 0 427 29L423,29A15 15 0 0 0 408 44L408,44A15 15 0 0 0 423 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="465,44 453,48 453,40" style="fill:rgb(0,0,0)"/>
+<path d="M442,44L459,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,59L501,59A15 15 0 0 0 516 44L516,44A15 15 0 0 0 501 29L480,29A15 15 0 0 0 465 44L465,44A15 15 0 0 0 480 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="539,44 527,48 527,40" style="fill:rgb(0,0,0)"/>
+<path d="M516,44L533,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,44 L 546,44 Q 554,44 554,51 L 554,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,17 442,21 442,12" style="fill:rgb(0,0,0)"/>
+<path d="M366,17L448,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,44 97,48 97,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 39,44 L 87,44 L 102,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M108,44 L 225,44 Q 240,44 240,30 Q 240,17 247,17 L 255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,142L301,142A15 15 0 0 0 316 127A15 15 0 0 0 301 112L236,112A15 15 0 0 0 221 127A15 15 0 0 0 236 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="339,127 327,131 327,123" style="fill:rgb(0,0,0)"/>
+<path d="M316,127L333,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,142L358,142A15 15 0 0 0 373 127A15 15 0 0 0 358 112L354,112A15 15 0 0 0 339 127A15 15 0 0 0 354 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="396,127 385,131 385,123" style="fill:rgb(0,0,0)"/>
+<path d="M373,127L390,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M411,142L490,142A15 15 0 0 0 505 127A15 15 0 0 0 490 112L411,112A15 15 0 0 0 396 127A15 15 0 0 0 411 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="451" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M236,180L256,180A15 15 0 0 0 271 165A15 15 0 0 0 256 150L236,150A15 15 0 0 0 221 165A15 15 0 0 0 236 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="294,165 283,169 283,161" style="fill:rgb(0,0,0)"/>
+<path d="M271,165L289,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,180L374,180A15 15 0 0 0 389 165A15 15 0 0 0 374 150L310,150A15 15 0 0 0 294 165A15 15 0 0 0 310 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="554,74 550,62 558,62" style="fill:rgb(0,0,0)"/>
+<path d="M453,17 L 539,17 Q 554,17 554,32 L 554,53 L 554,68" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 325,85 325,94" style="fill:rgb(0,0,0)"/>
+<path d="M554,74 L 554,82 Q 554,89 539,89 L 334,89 L 319,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,127 210,131 210,123" style="fill:rgb(0,0,0)"/>
+<path d="M313,89 L 210,89 Q 195,89 195,104 L 195,112 Q 195,127 205,127 L 215,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,165 210,169 210,161" style="fill:rgb(0,0,0)"/>
+<path d="M195,112 L 195,150 Q 195,165 205,165 L 215,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="554,114 550,102 558,102" style="fill:rgb(0,0,0)"/>
+<path d="M554,74L554,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="590,165 578,169 578,161" style="fill:rgb(0,0,0)"/>
+<path d="M554,114 L 554,150 Q 554,165 569,165 L 569,165 L 584,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="593" cy="165" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,127 527,131 527,123" style="fill:rgb(0,0,0)"/>
+<path d="M505,127L533,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,127 L 546,127 Q 554,127 554,135 L 554,142" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M389,165L578,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/returning-clause.html">returning-clause:</a></b>
+<button id='x1529' onclick='hideorshow("x1529","x1530")'>show</button></p>
+ <div id='x1530' style='display:none;' class='imgcontainer'>
+ <div style="max-width:628px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 628.709 140.4">
+<circle cx="5" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="27,47 15,51 15,43" style="fill:rgb(0,0,0)"/>
+<path d="M9,47L21,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M42,62L132,62A15 15 0 0 0 147 47A15 15 0 0 0 132 32L42,32A15 15 0 0 0 27 47A15 15 0 0 0 42 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RETURNING</text>
+<polygon points="237,47 226,51 226,43" style="fill:rgb(0,0,0)"/>
+<path d="M147,47L232,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,62L287,62L287,32L237,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="328,77 317,82 317,73" style="fill:rgb(0,0,0)"/>
+<path d="M287,47 L 294,47 Q 302,47 302,62 L 302,62 Q 302,77 312,77 L 322,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M343,92L347,92A15 15 0 0 0 362 77L362,77A15 15 0 0 0 347 62L343,62A15 15 0 0 0 328 77L328,77A15 15 0 0 0 343 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="398,77 387,82 387,73" style="fill:rgb(0,0,0)"/>
+<path d="M362,77L393,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M414,92L501,92A15 15 0 0 0 516 77L516,77A15 15 0 0 0 501 62L414,62A15 15 0 0 0 398 77L398,77A15 15 0 0 0 414 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="539,77 528,82 528,73" style="fill:rgb(0,0,0)"/>
+<path d="M516,77L534,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="581,47 569,51 569,43" style="fill:rgb(0,0,0)"/>
+<path d="M539,77 L 547,77 Q 554,77 554,62 L 554,62 Q 554,47 565,47 L 575,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,47 607,51 607,43" style="fill:rgb(0,0,0)"/>
+<path d="M581,47L613,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="622" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="345,101 334,106 334,97" style="fill:rgb(0,0,0)"/>
+<path d="M302,62 L 302,86 Q 302,101 317,101 L 325,101 L 340,101" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,101 L 362,101 Q 377,101 377,89 Q 377,77 385,77 L 392,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,47 441,51 441,43" style="fill:rgb(0,0,0)"/>
+<path d="M287,47L447,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,47L607,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,138A15 15 0 0 0 406 123A15 15 0 0 0 391 108A15 15 0 0 0 376 123A15 15 0 0 0 391 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="376,123 365,127 365,118" style="fill:rgb(0,0,0)"/>
+<path d="M147,47 L 196,47 Q 211,47 211,62 L 211,108 Q 211,123 226,123 L 355,123 L 370,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,123 528,127 528,118" style="fill:rgb(0,0,0)"/>
+<path d="M406,123L534,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,123 L 547,123 Q 554,123 554,108 L 554,77 L 554,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,32A15 15 0 0 0 406 17A15 15 0 0 0 391 2A15 15 0 0 0 376 17A15 15 0 0 0 391 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="406,17 418,12 418,21" style="fill:rgb(0,0,0)"/>
+<path d="M581,47 L 588,47 Q 596,47 596,32 L 596,32 Q 596,17 581,17 L 427,17 L 412,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M376,17 L 174,17 Q 159,17 159,32 L 159,32 Q 159,47 169,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1531' onclick='hideorshow("x1531","x1532")'>show</button></p>
+ <div id='x1532' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1533' onclick='hideorshow("x1533","x1534")'>show</button></p>
+ <div id='x1534' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1535' onclick='hideorshow("x1535","x1536")'>show</button></p>
+ <div id='x1536' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1537' onclick='hideorshow("x1537","x1538")'>show</button></p>
+ <div id='x1538' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1539' onclick='hideorshow("x1539","x1540")'>show</button></p>
+ <div id='x1540' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1541' onclick='hideorshow("x1541","x1542")'>show</button></p>
+ <div id='x1542' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1543' onclick='hideorshow("x1543","x1544")'>show</button></p>
+ <div id='x1544' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1545' onclick='hideorshow("x1545","x1546")'>show</button></p>
+ <div id='x1546' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1547' onclick='hideorshow("x1547","x1548")'>show</button></p>
+ <div id='x1548' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/insert-stmt.html">insert-stmt:</a></b>
+<button id='x1549' onclick='hideorshow("x1549","x1550")'>show</button></p>
+ <div id='x1550' style='display:none;' class='imgcontainer'>
+ <div style="max-width:601px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 601.066 922.104">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,145L124,145A15 15 0 0 0 139 130A15 15 0 0 0 124 115L60,115A15 15 0 0 0 45 130A15 15 0 0 0 60 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<path d="M60,183L109,183A15 15 0 0 0 124 168A15 15 0 0 0 109 153L60,153A15 15 0 0 0 45 168A15 15 0 0 0 60 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="84" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INSERT</text>
+<polygon points="166,198 154,203 154,194" style="fill:rgb(0,0,0)"/>
+<path d="M124,168 L 132,168 Q 139,168 139,183 L 139,183 Q 139,198 149,198 L 160,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M181,213L187,213A15 15 0 0 0 203 198A15 15 0 0 0 187 183L181,183A15 15 0 0 0 166 198A15 15 0 0 0 181 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="244,349 233,354 233,345" style="fill:rgb(0,0,0)"/>
+<path d="M203,198 L 210,198 Q 218,198 218,213 L 218,334 Q 218,349 228,349 L 238,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,365L337,365A15 15 0 0 0 352 349A15 15 0 0 0 337 334L259,334A15 15 0 0 0 244 349A15 15 0 0 0 259 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="369,349 358,354 358,345" style="fill:rgb(0,0,0)"/>
+<path d="M352,349L363,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,130 399,135 399,126" style="fill:rgb(0,0,0)"/>
+<path d="M369,349 L 377,349 Q 384,349 384,334 L 384,145 Q 384,130 395,130 L 405,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M426,145L453,145A15 15 0 0 0 468 130A15 15 0 0 0 453 115L426,115A15 15 0 0 0 411 130A15 15 0 0 0 426 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTO</text>
+<polygon points="45,168 33,172 33,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,153 Q 24,168 31,168 L 39,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,130 33,135 33,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 31,130 L 39,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M139,130L399,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,168 358,172 358,164" style="fill:rgb(0,0,0)"/>
+<path d="M124,168L363,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,168 L 377,168 Q 384,168 384,160 L 384,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,213L301,213A15 15 0 0 0 316 198A15 15 0 0 0 301 183L259,183A15 15 0 0 0 244 198A15 15 0 0 0 259 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="244,198 233,203 233,194" style="fill:rgb(0,0,0)"/>
+<path d="M203,198L238,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,198 358,203 358,194" style="fill:rgb(0,0,0)"/>
+<path d="M316,198L363,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,198 L 377,198 Q 384,198 384,191 L 384,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,251L281,251A15 15 0 0 0 296 236A15 15 0 0 0 281 221L259,221A15 15 0 0 0 244 236A15 15 0 0 0 259 251Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="270" y="236" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="244,236 233,240 233,232" style="fill:rgb(0,0,0)"/>
+<path d="M218,221 L 218,228 Q 218,236 228,236 L 238,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,236 358,240 358,232" style="fill:rgb(0,0,0)"/>
+<path d="M296,236L363,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,236 L 377,236 Q 384,236 384,229 L 384,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,289L311,289A15 15 0 0 0 327 274A15 15 0 0 0 311 259L259,259A15 15 0 0 0 244 274A15 15 0 0 0 259 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="285" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="244,274 233,278 233,270" style="fill:rgb(0,0,0)"/>
+<path d="M218,259 L 218,266 Q 218,274 228,274 L 238,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,274 358,278 358,270" style="fill:rgb(0,0,0)"/>
+<path d="M327,274L363,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,274 L 377,274 Q 384,274 384,266 L 384,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,327L323,327A15 15 0 0 0 338 312A15 15 0 0 0 323 297L259,297A15 15 0 0 0 244 312A15 15 0 0 0 259 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="291" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="244,312 233,316 233,307" style="fill:rgb(0,0,0)"/>
+<path d="M218,297 L 218,304 Q 218,312 228,312 L 238,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,312 358,316 358,307" style="fill:rgb(0,0,0)"/>
+<path d="M338,312L363,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,312 L 377,312 Q 384,312 384,304 L 384,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,455L156,455A15 15 0 0 0 171 440A15 15 0 0 0 156 425L60,425A15 15 0 0 0 45 440A15 15 0 0 0 60 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,440 183,444 183,436" style="fill:rgb(0,0,0)"/>
+<path d="M171,440L189,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,455A15 15 0 0 0 225 440A15 15 0 0 0 210 425A15 15 0 0 0 195 440A15 15 0 0 0 210 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="440" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,440 249,444 249,436" style="fill:rgb(0,0,0)"/>
+<path d="M225,440L255,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,455L351,455A15 15 0 0 0 366 440A15 15 0 0 0 351 425L276,425A15 15 0 0 0 261 440A15 15 0 0 0 276 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="402,440 391,444 391,436" style="fill:rgb(0,0,0)"/>
+<path d="M366,440L396,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,455L421,455A15 15 0 0 0 436 440A15 15 0 0 0 421 425L417,425A15 15 0 0 0 402 440A15 15 0 0 0 417 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="419" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="459,440 448,444 448,436" style="fill:rgb(0,0,0)"/>
+<path d="M436,440L454,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,455L495,455A15 15 0 0 0 510 440A15 15 0 0 0 495 425L475,425A15 15 0 0 0 459 440A15 15 0 0 0 475 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="485" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="483,238 478,227 487,227" style="fill:rgb(0,0,0)"/>
+<path d="M468,130 L 475,130 Q 483,130 483,145 L 483,217 L 483,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,395 183,390 183,399" style="fill:rgb(0,0,0)"/>
+<path d="M483,238 L 483,380 Q 483,395 468,395 L 192,395 L 177,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,440 33,444 33,436" style="fill:rgb(0,0,0)"/>
+<path d="M171,395 L 35,395 Q 20,395 20,410 L 20,425 Q 20,440 30,440 L 39,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,423 230,412 239,412" style="fill:rgb(0,0,0)"/>
+<path d="M261,395 L 247,395 Q 234,395 234,406 L 234,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,423 L 234,432 Q 234,440 242,440 L 249,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,546A15 15 0 0 0 75 531A15 15 0 0 0 60 516A15 15 0 0 0 45 531A15 15 0 0 0 60 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="531" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,531 100,535 100,527" style="fill:rgb(0,0,0)"/>
+<path d="M75,531L105,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,546L220,546A15 15 0 0 0 235 531A15 15 0 0 0 220 516L126,516A15 15 0 0 0 111 531A15 15 0 0 0 126 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="271,531 260,535 260,527" style="fill:rgb(0,0,0)"/>
+<path d="M235,531L266,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,546A15 15 0 0 0 302 531A15 15 0 0 0 287 516A15 15 0 0 0 271 531A15 15 0 0 0 287 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="287" y="531" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M173,580A15 15 0 0 0 188 565A15 15 0 0 0 173 550A15 15 0 0 0 158 565A15 15 0 0 0 173 580Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="565" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="188,565 200,561 200,569" style="fill:rgb(0,0,0)"/>
+<path d="M235,531 L 243,531 Q 250,531 250,546 L 250,550 Q 250,565 235,565 L 209,565 L 194,565" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,565 L 100,565 Q 85,565 85,550 L 85,546 Q 85,531 92,531 L 100,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="173,595 185,591 185,599" style="fill:rgb(0,0,0)"/>
+<path d="M302,531 L 309,531 Q 317,531 317,546 L 317,580 Q 317,595 302,595 L 194,595 L 179,595" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M173,595 L 39,595 Q 24,595 24,603 L 24,610" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="436,486 448,481 448,490" style="fill:rgb(0,0,0)"/>
+<path d="M510,440 L 518,440 Q 525,440 525,455 L 525,471 Q 525,486 510,486 L 457,486 L 442,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,531 33,535 33,527" style="fill:rgb(0,0,0)"/>
+<path d="M436,486 L 39,486 Q 24,486 24,501 L 24,516 Q 24,531 31,531 L 39,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,469 377,457 385,457" style="fill:rgb(0,0,0)"/>
+<path d="M366,440 L 374,440 Q 381,440 381,451 L 381,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M381,469 L 381,477 Q 381,486 374,486 L 366,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,671L112,671A15 15 0 0 0 127 656A15 15 0 0 0 112 640L60,640A15 15 0 0 0 45 656A15 15 0 0 0 60 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="656" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="163,656 152,660 152,651" style="fill:rgb(0,0,0)"/>
+<path d="M127,656L158,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,671A15 15 0 0 0 194 656A15 15 0 0 0 179 640A15 15 0 0 0 163 656A15 15 0 0 0 179 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="656" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="230,656 218,660 218,651" style="fill:rgb(0,0,0)"/>
+<path d="M194,656L224,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M230,671L279,671L279,640L230,640Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="656" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="315,656 303,660 303,651" style="fill:rgb(0,0,0)"/>
+<path d="M279,656L309,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,671A15 15 0 0 0 345 656A15 15 0 0 0 330 640A15 15 0 0 0 315 656A15 15 0 0 0 330 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="330" y="656" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="45,656 33,660 33,651" style="fill:rgb(0,0,0)"/>
+<path d="M24,516 L 24,641 Q 24,656 31,656 L 39,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,705A15 15 0 0 0 269 690A15 15 0 0 0 254 675A15 15 0 0 0 239 690A15 15 0 0 0 254 705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="690" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="269,690 281,685 281,694" style="fill:rgb(0,0,0)"/>
+<path d="M279,656 L 286,656 Q 294,656 294,671 L 294,675 Q 294,690 285,690 L 275,690" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,690 L 218,690 Q 203,690 203,675 L 203,671 Q 203,656 211,656 L 218,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,743A15 15 0 0 0 269 727A15 15 0 0 0 254 712A15 15 0 0 0 239 727A15 15 0 0 0 254 743Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="727" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="269,727 281,723 281,732" style="fill:rgb(0,0,0)"/>
+<path d="M345,656 L 353,656 Q 360,656 360,671 L 360,712 Q 360,727 345,727 L 290,727 L 275,727" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,727 L 152,727 Q 137,727 137,712 L 137,671 Q 137,656 144,656 L 152,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="387,693 375,698 375,689" style="fill:rgb(0,0,0)"/>
+<path d="M345,656 L 353,656 Q 360,656 360,671 L 360,678 Q 360,693 371,693 L 381,693" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,709L512,709L512,678L387,678Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="449" y="693" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">upsert-clause</text>
+<polygon points="535,693 523,698 523,689" style="fill:rgb(0,0,0)"/>
+<path d="M512,693L529,693" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,693 L 542,693 Q 550,693 550,701 L 550,708" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="535,656 523,660 523,651" style="fill:rgb(0,0,0)"/>
+<path d="M345,656L529,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,788L149,788L149,758L45,758Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="97" y="773" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="535,773 523,777 523,768" style="fill:rgb(0,0,0)"/>
+<path d="M149,773L529,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,773 L 542,773 Q 550,773 550,780 L 550,788" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,773 33,777 33,768" style="fill:rgb(0,0,0)"/>
+<path d="M24,640 L 24,758 Q 24,773 31,773 L 39,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,818L512,818L512,788L387,788Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="449" y="803" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">upsert-clause</text>
+<polygon points="535,803 523,807 523,799" style="fill:rgb(0,0,0)"/>
+<path d="M512,803L529,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,803 L 542,803 Q 550,803 550,811 L 550,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="387,803 375,807 375,799" style="fill:rgb(0,0,0)"/>
+<path d="M345,773 L 353,773 Q 360,773 360,788 L 360,788 Q 360,803 371,803 L 381,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,856L125,856A15 15 0 0 0 140 841A15 15 0 0 0 125 826L60,826A15 15 0 0 0 45 841A15 15 0 0 0 60 856Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="841" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="164,841 152,845 152,837" style="fill:rgb(0,0,0)"/>
+<path d="M140,841L158,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,856L231,856A15 15 0 0 0 246 841A15 15 0 0 0 231 826L179,826A15 15 0 0 0 164 841A15 15 0 0 0 179 856Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="205" y="841" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="535,841 523,845 523,837" style="fill:rgb(0,0,0)"/>
+<path d="M246,841L529,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,841 33,845 33,837" style="fill:rgb(0,0,0)"/>
+<path d="M24,758 L 24,826 Q 24,841 31,841 L 39,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M361,919L512,919L512,889L361,889Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="436" y="904" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="591,904 580,909 580,900" style="fill:rgb(0,0,0)"/>
+<path d="M512,904L585,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="595" cy="904" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,656 L 542,656 Q 550,656 550,671 L 550,889 Q 550,904 557,904 L 565,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="436,871 448,867 448,875" style="fill:rgb(0,0,0)"/>
+<path d="M535,841 L 542,841 Q 550,841 550,856 L 550,856 Q 550,871 535,871 L 457,871 L 442,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="361,904 349,909 349,900" style="fill:rgb(0,0,0)"/>
+<path d="M436,871 L 349,871 Q 334,871 334,886 L 334,889 Q 334,904 345,904 L 355,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1551' onclick='hideorshow("x1551","x1552")'>show</button></p>
+ <div id='x1552' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/returning-clause.html">returning-clause:</a></b>
+<button id='x1553' onclick='hideorshow("x1553","x1554")'>show</button></p>
+ <div id='x1554' style='display:none;' class='imgcontainer'>
+ <div style="max-width:628px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 628.709 140.4">
+<circle cx="5" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="27,47 15,51 15,43" style="fill:rgb(0,0,0)"/>
+<path d="M9,47L21,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M42,62L132,62A15 15 0 0 0 147 47A15 15 0 0 0 132 32L42,32A15 15 0 0 0 27 47A15 15 0 0 0 42 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RETURNING</text>
+<polygon points="237,47 226,51 226,43" style="fill:rgb(0,0,0)"/>
+<path d="M147,47L232,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,62L287,62L287,32L237,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="328,77 317,82 317,73" style="fill:rgb(0,0,0)"/>
+<path d="M287,47 L 294,47 Q 302,47 302,62 L 302,62 Q 302,77 312,77 L 322,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M343,92L347,92A15 15 0 0 0 362 77L362,77A15 15 0 0 0 347 62L343,62A15 15 0 0 0 328 77L328,77A15 15 0 0 0 343 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="398,77 387,82 387,73" style="fill:rgb(0,0,0)"/>
+<path d="M362,77L393,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M414,92L501,92A15 15 0 0 0 516 77L516,77A15 15 0 0 0 501 62L414,62A15 15 0 0 0 398 77L398,77A15 15 0 0 0 414 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="539,77 528,82 528,73" style="fill:rgb(0,0,0)"/>
+<path d="M516,77L534,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="581,47 569,51 569,43" style="fill:rgb(0,0,0)"/>
+<path d="M539,77 L 547,77 Q 554,77 554,62 L 554,62 Q 554,47 565,47 L 575,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,47 607,51 607,43" style="fill:rgb(0,0,0)"/>
+<path d="M581,47L613,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="622" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="345,101 334,106 334,97" style="fill:rgb(0,0,0)"/>
+<path d="M302,62 L 302,86 Q 302,101 317,101 L 325,101 L 340,101" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,101 L 362,101 Q 377,101 377,89 Q 377,77 385,77 L 392,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,47 441,51 441,43" style="fill:rgb(0,0,0)"/>
+<path d="M287,47L447,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,47L607,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,138A15 15 0 0 0 406 123A15 15 0 0 0 391 108A15 15 0 0 0 376 123A15 15 0 0 0 391 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="376,123 365,127 365,118" style="fill:rgb(0,0,0)"/>
+<path d="M147,47 L 196,47 Q 211,47 211,62 L 211,108 Q 211,123 226,123 L 355,123 L 370,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,123 528,127 528,118" style="fill:rgb(0,0,0)"/>
+<path d="M406,123L534,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,123 L 547,123 Q 554,123 554,108 L 554,77 L 554,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,32A15 15 0 0 0 406 17A15 15 0 0 0 391 2A15 15 0 0 0 376 17A15 15 0 0 0 391 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="406,17 418,12 418,21" style="fill:rgb(0,0,0)"/>
+<path d="M581,47 L 588,47 Q 596,47 596,32 L 596,32 Q 596,17 581,17 L 427,17 L 412,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M376,17 L 174,17 Q 159,17 159,32 L 159,32 Q 159,47 169,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/upsert-clause.html">upsert-clause:</a></b>
+<button id='x1555' onclick='hideorshow("x1555","x1556")'>show</button></p>
+ <div id='x1556' style='display:none;' class='imgcontainer'>
+ <div style="max-width:901px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 901.142 363.96">
+<path d="M223,165L759,165L759,51L223,51Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="5" cy="66" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,66 35,71 35,62" style="fill:rgb(0,0,0)"/>
+<path d="M9,66L41,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,82L71,82A15 15 0 0 0 86 66A15 15 0 0 0 71 51L62,51A15 15 0 0 0 47 66A15 15 0 0 0 62 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="103,66 92,71 92,62" style="fill:rgb(0,0,0)"/>
+<path d="M86,66L98,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M118,82L193,82A15 15 0 0 0 208 66A15 15 0 0 0 193 51L118,51A15 15 0 0 0 103 66A15 15 0 0 0 118 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="264,97 253,101 253,92" style="fill:rgb(0,0,0)"/>
+<path d="M208,66 L 223,66 Q 238,66 238,81 L 238,82 Q 238,97 248,97 L 259,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M280,112A15 15 0 0 0 295 97L295,97A15 15 0 0 0 280 82A15 15 0 0 0 264 97L264,97A15 15 0 0 0 280 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="97" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="331,97 319,101 319,92" style="fill:rgb(0,0,0)"/>
+<path d="M295,97L325,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M331,112L475,112L475,82L331,82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="97" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="511,97 500,101 500,92" style="fill:rgb(0,0,0)"/>
+<path d="M475,97L506,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M526,112A15 15 0 0 0 542 97L542,97A15 15 0 0 0 526 82A15 15 0 0 0 511 97L511,97A15 15 0 0 0 526 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="526" y="97" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="583,135 572,139 572,130" style="fill:rgb(0,0,0)"/>
+<path d="M542,97 L 549,97 Q 557,97 557,112 L 557,119 Q 557,135 567,135 L 577,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M598,150L648,150A15 15 0 0 0 663 135A15 15 0 0 0 648 119L598,119A15 15 0 0 0 583 135A15 15 0 0 0 598 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="623" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="680,135 669,139 669,130" style="fill:rgb(0,0,0)"/>
+<path d="M663,135L674,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M680,150L729,150L729,119L680,119Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="744,108 749,119 740,119" style="fill:rgb(0,0,0)"/>
+<path d="M729,135 L 737,135 Q 744,135 744,124 L 744,114" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="786,66 774,71 774,62" style="fill:rgb(0,0,0)"/>
+<path d="M744,108 L 744,81 Q 744,66 759,66 L 765,66 L 780,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M801,82L809,82A15 15 0 0 0 824 66A15 15 0 0 0 809 51L801,51A15 15 0 0 0 786 66A15 15 0 0 0 801 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="805" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DO</text>
+<polygon points="729,97 718,101 718,92" style="fill:rgb(0,0,0)"/>
+<path d="M542,97L723,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,97 L 737,97 Q 744,97 744,89 L 744,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M208,66L774,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,150A15 15 0 0 0 418 135A15 15 0 0 0 403 119A15 15 0 0 0 388 135A15 15 0 0 0 403 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="135" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,135 430,130 430,139" style="fill:rgb(0,0,0)"/>
+<path d="M475,97 L 483,97 Q 490,97 490,112 L 490,119 Q 490,135 475,135 L 439,135 L 424,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,135 L 319,135 Q 304,135 304,119 L 304,112 Q 304,97 312,97 L 319,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="288" y="36" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" dominant-baseline="central">conflict target</text>
+<polygon points="436,195 447,191 447,199" style="fill:rgb(0,0,0)"/>
+<path d="M824,66 L 831,66 Q 839,66 839,81 L 839,180 Q 839,195 824,195 L 456,195 L 441,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,271 35,275 35,266" style="fill:rgb(0,0,0)"/>
+<path d="M436,195 L 35,195 Q 20,195 20,210 L 20,256 Q 20,271 31,271 L 41,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,286L116,286A15 15 0 0 0 131 271A15 15 0 0 0 116 255L62,255A15 15 0 0 0 47 271A15 15 0 0 0 62 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="89" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="148,271 137,275 137,266" style="fill:rgb(0,0,0)"/>
+<path d="M131,271L143,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M164,286L179,286A15 15 0 0 0 194 271A15 15 0 0 0 179 255L164,255A15 15 0 0 0 148 271A15 15 0 0 0 164 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="171" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="257,308 245,313 245,304" style="fill:rgb(0,0,0)"/>
+<path d="M194,271 L 215,271 Q 230,271 230,286 L 230,293 Q 230,308 241,308 L 251,308" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,324L413,324L413,293L257,293Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="335" y="308" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="475,271 464,275 464,266" style="fill:rgb(0,0,0)"/>
+<path d="M413,308 L 434,308 Q 449,308 449,293 L 449,286 Q 449,271 459,271 L 469,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,286A15 15 0 0 0 505 271A15 15 0 0 0 490 255A15 15 0 0 0 475 271A15 15 0 0 0 490 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="523,271 511,275 511,266" style="fill:rgb(0,0,0)"/>
+<path d="M505,271L517,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M523,286L572,286L572,255L523,255Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="547" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="619,271 608,275 608,266" style="fill:rgb(0,0,0)"/>
+<path d="M572,271L613,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M634,286L684,286A15 15 0 0 0 699 271A15 15 0 0 0 684 255L634,255A15 15 0 0 0 619 271A15 15 0 0 0 634 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="659" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="716,271 705,275 705,266" style="fill:rgb(0,0,0)"/>
+<path d="M699,271L710,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M716,286L765,286L765,255L716,255Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="741" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="891,233 880,237 880,228" style="fill:rgb(0,0,0)"/>
+<path d="M765,271 L 773,271 Q 780,271 780,256 L 780,248 Q 780,233 795,233 L 871,233 L 886,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="895" cy="233" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,248L130,248A15 15 0 0 0 145 233A15 15 0 0 0 130 218L62,218A15 15 0 0 0 47 233A15 15 0 0 0 62 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="96" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTHING</text>
+<polygon points="47,233 35,237 35,228" style="fill:rgb(0,0,0)"/>
+<path d="M20,218 L 20,225 Q 20,233 31,233 L 41,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,233L880,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="638,233 626,237 626,228" style="fill:rgb(0,0,0)"/>
+<path d="M587,271 L 594,271 Q 602,271 602,256 L 602,248 Q 602,233 617,233 L 617,233 L 632,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M383,361A15 15 0 0 0 398 346A15 15 0 0 0 383 331A15 15 0 0 0 368 346A15 15 0 0 0 383 361Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="383" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="398,346 410,342 410,351" style="fill:rgb(0,0,0)"/>
+<path d="M572,271 L 579,271 Q 587,271 587,286 L 587,331 Q 587,346 572,346 L 419,346 L 404,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,308 210,320 201,320" style="fill:rgb(0,0,0)"/>
+<path d="M368,346 L 221,346 Q 206,346 206,331 L 206,329 L 206,314" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,308 L 206,286 Q 206,271 221,271 L 227,271 L 242,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="257,271 245,275 245,266" style="fill:rgb(0,0,0)"/>
+<path d="M194,271L251,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,286L366,286A15 15 0 0 0 381 271A15 15 0 0 0 366 255L272,255A15 15 0 0 0 257 271A15 15 0 0 0 272 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M381,271L464,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="865,97 869,108 860,108" style="fill:rgb(0,0,0)"/>
+<path d="M850,233 L 857,233 Q 865,233 865,218 L 865,117 L 865,102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="403,6 415,2 415,10" style="fill:rgb(0,0,0)"/>
+<path d="M865,97 L 865,21 Q 865,6 850,6 L 424,6 L 409,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,6 L 40,6 Q 25,6 25,21 L 25,51 Q 25,66 32,66 L 40,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/column-name-list.html">column-name-list:</a></b>
+<button id='x1557' onclick='hideorshow("x1557","x1558")'>show</button></p>
+ <div id='x1558' style='display:none;' class='imgcontainer'>
+ <div style="max-width:353px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 353.621 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="85,17 74,21 74,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L79,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M85,17L115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,32L230,32A15 15 0 0 0 245 17A15 15 0 0 0 230 2L136,2A15 15 0 0 0 121 17A15 15 0 0 0 136 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="290,17 279,21 279,12" style="fill:rgb(0,0,0)"/>
+<path d="M245,17L285,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2A15 15 0 0 0 290 17A15 15 0 0 0 306 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="306" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="344,17 332,21 332,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L338,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="347" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M183,70A15 15 0 0 0 198 55L198,55A15 15 0 0 0 183 39A15 15 0 0 0 168 55L168,55A15 15 0 0 0 183 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="198,55 210,50 210,59" style="fill:rgb(0,0,0)"/>
+<path d="M245,17 L 257,17 Q 269,17 269,32 L 269,40 Q 269,55 254,55 L 219,55 L 204,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M168,55 L 102,55 Q 87,55 87,40 L 87,32 Q 87,17 101,17 L 115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/indexed-column.html">indexed-column:</a></b>
+<button id='x1559' onclick='hideorshow("x1559","x1560")'>show</button></p>
+ <div id='x1560' style='display:none;' class='imgcontainer'>
+ <div style="max-width:696px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 696.36 102.6">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="246,47 235,51 235,43" style="fill:rgb(0,0,0)"/>
+<path d="M175,17 L 205,17 Q 220,17 220,32 L 220,32 Q 220,47 230,47 L 240,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,62L325,62A15 15 0 0 0 341 47L341,47A15 15 0 0 0 325 32L261,32A15 15 0 0 0 246 47L246,47A15 15 0 0 0 261 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="293" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="358,47 346,51 346,43" style="fill:rgb(0,0,0)"/>
+<path d="M341,47L352,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,62L478,62A15 15 0 0 0 493 47L493,47A15 15 0 0 0 478 32L373,32A15 15 0 0 0 358 47L358,47A15 15 0 0 0 373 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="511,47 499,51 499,43" style="fill:rgb(0,0,0)"/>
+<path d="M493,47L505,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,85 556,89 556,81" style="fill:rgb(0,0,0)"/>
+<path d="M511,47 L 518,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 Q 541,17 541,32 L 541,70 Q 541,85 551,85 L 561,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,100L613,100A15 15 0 0 0 628 85L628,85A15 15 0 0 0 613 70L582,70A15 15 0 0 0 567 85L567,85A15 15 0 0 0 582 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="645,85 633,89 633,81" style="fill:rgb(0,0,0)"/>
+<path d="M628,85L639,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="687,17 675,21 675,12" style="fill:rgb(0,0,0)"/>
+<path d="M645,85 L 652,85 Q 660,85 660,70 L 660,32 Q 660,17 670,17 L 681,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="690" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,70L100,70L100,39L50,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="175,55 163,59 163,50" style="fill:rgb(0,0,0)"/>
+<path d="M100,55L169,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M175,55 L 182,55 Q 190,55 190,40 L 190,32 Q 190,17 197,17 L 205,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,17 586,21 586,12" style="fill:rgb(0,0,0)"/>
+<path d="M358,17L592,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,17L675,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,62L599,62A15 15 0 0 0 614 47A15 15 0 0 0 599 32L582,32A15 15 0 0 0 567 47A15 15 0 0 0 582 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="645,47 633,51 633,43" style="fill:rgb(0,0,0)"/>
+<path d="M614,47L639,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M645,47 L 652,47 Q 660,47 660,40 L 660,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,47 556,51 556,43" style="fill:rgb(0,0,0)"/>
+<path d="M541,32 L 541,39 Q 541,47 551,47 L 561,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1561' onclick='hideorshow("x1561","x1562")'>show</button></p>
+ <div id='x1562' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1563' onclick='hideorshow("x1563","x1564")'>show</button></p>
+ <div id='x1564' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1565' onclick='hideorshow("x1565","x1566")'>show</button></p>
+ <div id='x1566' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1567' onclick='hideorshow("x1567","x1568")'>show</button></p>
+ <div id='x1568' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1569' onclick='hideorshow("x1569","x1570")'>show</button></p>
+ <div id='x1570' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1571' onclick='hideorshow("x1571","x1572")'>show</button></p>
+ <div id='x1572' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1573' onclick='hideorshow("x1573","x1574")'>show</button></p>
+ <div id='x1574' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1575' onclick='hideorshow("x1575","x1576")'>show</button></p>
+ <div id='x1576' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1577' onclick='hideorshow("x1577","x1578")'>show</button></p>
+ <div id='x1578' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1579' onclick='hideorshow("x1579","x1580")'>show</button></p>
+ <div id='x1580' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1581' onclick='hideorshow("x1581","x1582")'>show</button></p>
+ <div id='x1582' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/update-stmt.html">update-stmt:</a></b>
+<button id='x1583' onclick='hideorshow("x1583","x1584")'>show</button></p>
+ <div id='x1584' style='display:none;' class='imgcontainer'>
+ <div style="max-width:623px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 623.266 721.926">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,136L114,136A15 15 0 0 0 129 121A15 15 0 0 0 114 106L60,106A15 15 0 0 0 45 121A15 15 0 0 0 60 136Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="45,121 33,125 33,116" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,106 Q 24,121 31,121 L 39,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,299 159,303 159,295" style="fill:rgb(0,0,0)"/>
+<path d="M129,121 L 137,121 Q 144,121 144,136 L 144,284 Q 144,299 155,299 L 165,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,314L193,314A15 15 0 0 0 208 299A15 15 0 0 0 193 284L186,284A15 15 0 0 0 171 299A15 15 0 0 0 186 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,299 214,303 214,295" style="fill:rgb(0,0,0)"/>
+<path d="M208,299L219,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,314L318,314A15 15 0 0 0 333 299A15 15 0 0 0 318 284L240,284A15 15 0 0 0 225 299A15 15 0 0 0 240 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="279" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="350,299 339,303 339,295" style="fill:rgb(0,0,0)"/>
+<path d="M333,299L344,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,121 380,125 380,116" style="fill:rgb(0,0,0)"/>
+<path d="M350,299 L 358,299 Q 365,299 365,284 L 365,136 Q 365,121 376,121 L 386,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,136L576,136L576,106L392,106Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<path d="M186,276L193,276A15 15 0 0 0 208 261A15 15 0 0 0 193 246L186,246A15 15 0 0 0 171 261A15 15 0 0 0 186 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,261 214,266 214,257" style="fill:rgb(0,0,0)"/>
+<path d="M208,261L219,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,276L304,276A15 15 0 0 0 319 261A15 15 0 0 0 304 246L240,246A15 15 0 0 0 225 261A15 15 0 0 0 240 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="350,261 339,266 339,257" style="fill:rgb(0,0,0)"/>
+<path d="M319,261L344,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,261 L 358,261 Q 365,261 365,254 L 365,246" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,261 159,266 159,257" style="fill:rgb(0,0,0)"/>
+<path d="M144,246 L 144,254 Q 144,261 155,261 L 165,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,239L193,239A15 15 0 0 0 208 224A15 15 0 0 0 193 208L186,208A15 15 0 0 0 171 224A15 15 0 0 0 186 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,224 214,228 214,219" style="fill:rgb(0,0,0)"/>
+<path d="M208,224L219,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,239L292,239A15 15 0 0 0 307 224A15 15 0 0 0 292 208L240,208A15 15 0 0 0 225 224A15 15 0 0 0 240 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="266" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="350,224 339,228 339,219" style="fill:rgb(0,0,0)"/>
+<path d="M307,224L344,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,224 L 358,224 Q 365,224 365,216 L 365,209" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,224 159,228 159,219" style="fill:rgb(0,0,0)"/>
+<path d="M144,208 L 144,216 Q 144,224 155,224 L 165,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,201L193,201A15 15 0 0 0 208 186A15 15 0 0 0 193 171L186,171A15 15 0 0 0 171 186A15 15 0 0 0 186 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,186 214,190 214,181" style="fill:rgb(0,0,0)"/>
+<path d="M208,186L219,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,201L262,201A15 15 0 0 0 277 186A15 15 0 0 0 262 171L240,171A15 15 0 0 0 225 186A15 15 0 0 0 240 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="350,186 339,190 339,181" style="fill:rgb(0,0,0)"/>
+<path d="M277,186L344,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,186 L 358,186 Q 365,186 365,178 L 365,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,186 159,190 159,181" style="fill:rgb(0,0,0)"/>
+<path d="M144,171 L 144,178 Q 144,186 155,186 L 165,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,163L193,163A15 15 0 0 0 208 148A15 15 0 0 0 193 133L186,133A15 15 0 0 0 171 148A15 15 0 0 0 186 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,148 214,152 214,144" style="fill:rgb(0,0,0)"/>
+<path d="M208,148L219,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,163L282,163A15 15 0 0 0 297 148A15 15 0 0 0 282 133L240,133A15 15 0 0 0 225 148A15 15 0 0 0 240 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="350,148 339,152 339,144" style="fill:rgb(0,0,0)"/>
+<path d="M297,148L344,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,148 L 358,148 Q 365,148 365,140 L 365,133" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,148 159,152 159,144" style="fill:rgb(0,0,0)"/>
+<path d="M144,133 L 144,140 Q 144,148 155,148 L 165,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="350,121 339,125 339,116" style="fill:rgb(0,0,0)"/>
+<path d="M129,121L344,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,121L380,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,375 39,379 39,370" style="fill:rgb(0,0,0)"/>
+<path d="M576,121 L 584,121 Q 591,121 591,136 L 591,322 Q 591,337 576,337 L 39,337 Q 24,337 24,352 L 24,360 Q 24,375 34,375 L 45,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,390L81,390A15 15 0 0 0 96 375A15 15 0 0 0 81 360L65,360A15 15 0 0 0 50 375A15 15 0 0 0 65 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="73" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="153,413 141,417 141,408" style="fill:rgb(0,0,0)"/>
+<path d="M96,375 L 111,375 Q 126,375 126,390 L 126,398 Q 126,413 136,413 L 147,413" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,428L309,428L309,397L153,397Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="413" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="350,375 339,379 339,370" style="fill:rgb(0,0,0)"/>
+<path d="M309,413 L 316,413 Q 324,413 324,398 L 324,390 Q 324,375 334,375 L 344,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,390A15 15 0 0 0 380 375A15 15 0 0 0 365 360A15 15 0 0 0 350 375A15 15 0 0 0 365 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="375" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="404,375 392,379 392,370" style="fill:rgb(0,0,0)"/>
+<path d="M380,375L398,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,390L453,390L453,360L404,360Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="428" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="153,375 141,379 141,370" style="fill:rgb(0,0,0)"/>
+<path d="M96,375L147,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,390L262,390A15 15 0 0 0 277 375A15 15 0 0 0 262 360L168,360A15 15 0 0 0 153 375A15 15 0 0 0 168 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M277,375L339,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,465A15 15 0 0 0 266 450A15 15 0 0 0 251 435A15 15 0 0 0 236 450A15 15 0 0 0 251 465Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="450" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="266,450 277,446 277,455" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,435 Q 468,450 453,450 L 287,450 L 272,450" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,450 L 117,450 Q 102,450 102,435 L 102,390 Q 102,375 117,375 L 117,375 L 132,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="251,488 262,484 262,492" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,473 Q 468,488 453,488 L 271,488 L 256,488" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,488 L 39,488 Q 24,488 24,503 L 24,511 Q 24,526 37,526 L 50,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,541L100,541A15 15 0 0 0 115 526A15 15 0 0 0 100 511L65,511A15 15 0 0 0 50 526A15 15 0 0 0 65 541Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="187,526 176,530 176,522" style="fill:rgb(0,0,0)"/>
+<path d="M115,526L182,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,541L348,541L348,511L187,511Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M268,579A15 15 0 0 0 283 564A15 15 0 0 0 268 549A15 15 0 0 0 253 564A15 15 0 0 0 268 579Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="564" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="283,564 295,559 295,568" style="fill:rgb(0,0,0)"/>
+<path d="M348,526 L 356,526 Q 363,526 363,541 L 363,549 Q 363,564 348,564 L 304,564 L 289,564" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,564 L 176,564 Q 161,564 161,549 L 161,541 Q 161,526 168,526 L 176,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,602 176,606 176,597" style="fill:rgb(0,0,0)"/>
+<path d="M115,526 L 123,526 Q 130,526 130,541 L 130,587 Q 130,602 145,602 L 167,602 L 182,602" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,617L290,617L290,586L187,586Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="239" y="602" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<polygon points="405,526 393,530 393,522" style="fill:rgb(0,0,0)"/>
+<path d="M290,602 L 363,602 Q 378,602 378,587 L 378,541 Q 378,526 389,526 L 399,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="244,639 255,635 255,644" style="fill:rgb(0,0,0)"/>
+<path d="M405,526 L 412,526 Q 420,526 420,541 L 420,624 Q 420,639 405,639 L 265,639 L 250,639" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,526L393,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,677 39,681 39,673" style="fill:rgb(0,0,0)"/>
+<path d="M244,639 L 39,639 Q 24,639 24,654 L 24,662 Q 24,677 34,677 L 45,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,692L115,692A15 15 0 0 0 130 677A15 15 0 0 0 115 662L66,662A15 15 0 0 0 50 677A15 15 0 0 0 66 692Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="153,677 142,681 142,673" style="fill:rgb(0,0,0)"/>
+<path d="M130,677L147,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,692L202,692L202,662L153,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="178" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="24,586 20,575 28,575" style="fill:rgb(0,0,0)"/>
+<path d="M24,511L24,581" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,586L24,662" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,715 602,719 602,711" style="fill:rgb(0,0,0)"/>
+<path d="M24,662 L 24,700 Q 24,715 39,715 L 593,715 L 608,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="715" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="253,715 242,719 242,711" style="fill:rgb(0,0,0)"/>
+<path d="M202,677 L 210,677 Q 217,677 217,692 L 217,700 Q 217,715 232,715 L 233,715 L 248,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,677 283,681 283,673" style="fill:rgb(0,0,0)"/>
+<path d="M253,715 L 261,715 Q 268,715 268,700 L 268,692 Q 268,677 279,677 L 289,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,692L446,692L446,662L295,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="370" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="497,715 485,719 485,711" style="fill:rgb(0,0,0)"/>
+<path d="M446,677 L 453,677 Q 461,677 461,692 L 461,700 Q 461,715 476,715 L 476,715 L 491,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/column-name-list.html">column-name-list:</a></b>
+<button id='x1585' onclick='hideorshow("x1585","x1586")'>show</button></p>
+ <div id='x1586' style='display:none;' class='imgcontainer'>
+ <div style="max-width:353px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 353.621 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="85,17 74,21 74,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L79,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M85,17L115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,32L230,32A15 15 0 0 0 245 17A15 15 0 0 0 230 2L136,2A15 15 0 0 0 121 17A15 15 0 0 0 136 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="290,17 279,21 279,12" style="fill:rgb(0,0,0)"/>
+<path d="M245,17L285,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2A15 15 0 0 0 290 17A15 15 0 0 0 306 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="306" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="344,17 332,21 332,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L338,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="347" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M183,70A15 15 0 0 0 198 55L198,55A15 15 0 0 0 183 39A15 15 0 0 0 168 55L168,55A15 15 0 0 0 183 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="198,55 210,50 210,59" style="fill:rgb(0,0,0)"/>
+<path d="M245,17 L 257,17 Q 269,17 269,32 L 269,40 Q 269,55 254,55 L 219,55 L 204,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M168,55 L 102,55 Q 87,55 87,40 L 87,32 Q 87,17 101,17 L 115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1587' onclick='hideorshow("x1587","x1588")'>show</button></p>
+ <div id='x1588' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1589' onclick='hideorshow("x1589","x1590")'>show</button></p>
+ <div id='x1590' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1591' onclick='hideorshow("x1591","x1592")'>show</button></p>
+ <div id='x1592' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1593' onclick='hideorshow("x1593","x1594")'>show</button></p>
+ <div id='x1594' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/qualified-table-name.html">qualified-table-name:</a></b>
+<button id='x1595' onclick='hideorshow("x1595","x1596")'>show</button></p>
+ <div id='x1596' style='display:none;' class='imgcontainer'>
+ <div style="max-width:599px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 599.746 182.736">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L156,32A15 15 0 0 0 171 17A15 15 0 0 0 156 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M171,17L189,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,32A15 15 0 0 0 225 17A15 15 0 0 0 210 2A15 15 0 0 0 195 17A15 15 0 0 0 210 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,17 249,21 249,12" style="fill:rgb(0,0,0)"/>
+<path d="M225,17L255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32L351,32A15 15 0 0 0 366 17A15 15 0 0 0 351 2L276,2A15 15 0 0 0 261 17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="408,44 396,48 396,40" style="fill:rgb(0,0,0)"/>
+<path d="M366,17 L 374,17 Q 381,17 381,30 Q 381,44 392,44 L 402,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,59L427,59A15 15 0 0 0 442 44L442,44A15 15 0 0 0 427 29L423,29A15 15 0 0 0 408 44L408,44A15 15 0 0 0 423 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="465,44 453,48 453,40" style="fill:rgb(0,0,0)"/>
+<path d="M442,44L459,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,59L501,59A15 15 0 0 0 516 44L516,44A15 15 0 0 0 501 29L480,29A15 15 0 0 0 465 44L465,44A15 15 0 0 0 480 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="539,44 527,48 527,40" style="fill:rgb(0,0,0)"/>
+<path d="M516,44L533,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,44 L 546,44 Q 554,44 554,51 L 554,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,17 442,21 442,12" style="fill:rgb(0,0,0)"/>
+<path d="M366,17L448,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,44 97,48 97,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 39,44 L 87,44 L 102,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M108,44 L 225,44 Q 240,44 240,30 Q 240,17 247,17 L 255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,142L301,142A15 15 0 0 0 316 127A15 15 0 0 0 301 112L236,112A15 15 0 0 0 221 127A15 15 0 0 0 236 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="339,127 327,131 327,123" style="fill:rgb(0,0,0)"/>
+<path d="M316,127L333,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,142L358,142A15 15 0 0 0 373 127A15 15 0 0 0 358 112L354,112A15 15 0 0 0 339 127A15 15 0 0 0 354 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="396,127 385,131 385,123" style="fill:rgb(0,0,0)"/>
+<path d="M373,127L390,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M411,142L490,142A15 15 0 0 0 505 127A15 15 0 0 0 490 112L411,112A15 15 0 0 0 396 127A15 15 0 0 0 411 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="451" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M236,180L256,180A15 15 0 0 0 271 165A15 15 0 0 0 256 150L236,150A15 15 0 0 0 221 165A15 15 0 0 0 236 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="294,165 283,169 283,161" style="fill:rgb(0,0,0)"/>
+<path d="M271,165L289,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,180L374,180A15 15 0 0 0 389 165A15 15 0 0 0 374 150L310,150A15 15 0 0 0 294 165A15 15 0 0 0 310 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="554,74 550,62 558,62" style="fill:rgb(0,0,0)"/>
+<path d="M453,17 L 539,17 Q 554,17 554,32 L 554,53 L 554,68" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 325,85 325,94" style="fill:rgb(0,0,0)"/>
+<path d="M554,74 L 554,82 Q 554,89 539,89 L 334,89 L 319,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,127 210,131 210,123" style="fill:rgb(0,0,0)"/>
+<path d="M313,89 L 210,89 Q 195,89 195,104 L 195,112 Q 195,127 205,127 L 215,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,165 210,169 210,161" style="fill:rgb(0,0,0)"/>
+<path d="M195,112 L 195,150 Q 195,165 205,165 L 215,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="554,114 550,102 558,102" style="fill:rgb(0,0,0)"/>
+<path d="M554,74L554,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="590,165 578,169 578,161" style="fill:rgb(0,0,0)"/>
+<path d="M554,114 L 554,150 Q 554,165 569,165 L 569,165 L 584,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="593" cy="165" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,127 527,131 527,123" style="fill:rgb(0,0,0)"/>
+<path d="M505,127L533,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,127 L 546,127 Q 554,127 554,135 L 554,142" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M389,165L578,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/returning-clause.html">returning-clause:</a></b>
+<button id='x1597' onclick='hideorshow("x1597","x1598")'>show</button></p>
+ <div id='x1598' style='display:none;' class='imgcontainer'>
+ <div style="max-width:628px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 628.709 140.4">
+<circle cx="5" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="27,47 15,51 15,43" style="fill:rgb(0,0,0)"/>
+<path d="M9,47L21,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M42,62L132,62A15 15 0 0 0 147 47A15 15 0 0 0 132 32L42,32A15 15 0 0 0 27 47A15 15 0 0 0 42 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RETURNING</text>
+<polygon points="237,47 226,51 226,43" style="fill:rgb(0,0,0)"/>
+<path d="M147,47L232,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,62L287,62L287,32L237,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="328,77 317,82 317,73" style="fill:rgb(0,0,0)"/>
+<path d="M287,47 L 294,47 Q 302,47 302,62 L 302,62 Q 302,77 312,77 L 322,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M343,92L347,92A15 15 0 0 0 362 77L362,77A15 15 0 0 0 347 62L343,62A15 15 0 0 0 328 77L328,77A15 15 0 0 0 343 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="398,77 387,82 387,73" style="fill:rgb(0,0,0)"/>
+<path d="M362,77L393,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M414,92L501,92A15 15 0 0 0 516 77L516,77A15 15 0 0 0 501 62L414,62A15 15 0 0 0 398 77L398,77A15 15 0 0 0 414 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="539,77 528,82 528,73" style="fill:rgb(0,0,0)"/>
+<path d="M516,77L534,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="581,47 569,51 569,43" style="fill:rgb(0,0,0)"/>
+<path d="M539,77 L 547,77 Q 554,77 554,62 L 554,62 Q 554,47 565,47 L 575,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,47 607,51 607,43" style="fill:rgb(0,0,0)"/>
+<path d="M581,47L613,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="622" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="345,101 334,106 334,97" style="fill:rgb(0,0,0)"/>
+<path d="M302,62 L 302,86 Q 302,101 317,101 L 325,101 L 340,101" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,101 L 362,101 Q 377,101 377,89 Q 377,77 385,77 L 392,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,47 441,51 441,43" style="fill:rgb(0,0,0)"/>
+<path d="M287,47L447,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,47L607,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,138A15 15 0 0 0 406 123A15 15 0 0 0 391 108A15 15 0 0 0 376 123A15 15 0 0 0 391 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="376,123 365,127 365,118" style="fill:rgb(0,0,0)"/>
+<path d="M147,47 L 196,47 Q 211,47 211,62 L 211,108 Q 211,123 226,123 L 355,123 L 370,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,123 528,127 528,118" style="fill:rgb(0,0,0)"/>
+<path d="M406,123L534,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,123 L 547,123 Q 554,123 554,108 L 554,77 L 554,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,32A15 15 0 0 0 406 17A15 15 0 0 0 391 2A15 15 0 0 0 376 17A15 15 0 0 0 391 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="406,17 418,12 418,21" style="fill:rgb(0,0,0)"/>
+<path d="M581,47 L 588,47 Q 596,47 596,32 L 596,32 Q 596,17 581,17 L 427,17 L 412,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M376,17 L 174,17 Q 159,17 159,32 L 159,32 Q 159,47 169,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1599' onclick='hideorshow("x1599","x1600")'>show</button></p>
+ <div id='x1600' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+
+
+<h1 id="description"><span>2. </span>Description</h1>
+<p>The CREATE TRIGGER statement is used to add triggers to the
+database schema. Triggers are database operations
+that are automatically performed when a specified database event
+occurs. </p>
+
+<p>Each trigger must specify that it will fire for one of
+the following operations: <a href="lang_delete.html">DELETE</a>, <a href="lang_insert.html">INSERT</a>, <a href="lang_update.html">UPDATE</a>.
+The trigger fires once for each row that is deleted, inserted,
+or updated. If the "UPDATE OF <span class='yyterm'>column-name</span>"
+syntax is used, then the trigger will only fire if
+<span class='yyterm'>column-name</span> appears on the left-hand side of
+one of the terms in the SET clause of the <a href="lang_update.html">UPDATE</a> statement.</p>
+
+<p>Due to an historical oversight, columns named in the "UPDATE OF"
+clause do not actually have to exist in the table being updated.
+Unrecognized column names are silently ignored.
+It would be more helpful if SQLite would fail the CREATE TRIGGER
+statement if any of the names in the "UPDATE OF" clause are not
+columns in the table. However, as this problem was discovered
+many years after SQLite was widely deployed, we have resisted
+fixing the problem for fear of breaking legacy applications.</p>
+
+<p>At this time SQLite supports only FOR EACH ROW triggers, not FOR EACH
+STATEMENT triggers. Hence explicitly specifying FOR EACH ROW is optional.
+FOR EACH ROW implies that the SQL statements specified in the trigger
+may be executed (depending on the WHEN clause) for each database row being
+inserted, updated or deleted by the statement causing the trigger to fire.</p>
+
+<p>Both the WHEN clause and the trigger actions may access elements of
+the row being inserted, deleted or updated using references of the form
+"NEW.<i>column-name</i>" and "OLD.<i>column-name</i>", where
+<i>column-name</i> is the name of a column from the table that the trigger
+is associated with. OLD and NEW references may only be used in triggers on
+events for which they are relevant, as follows:</p>
+
+<table border="0" cellpadding="10">
+<tr>
+<td valign="top" align="right" width="120"><i>INSERT</i></td>
+<td valign="top">NEW references are valid</td>
+</tr>
+<tr>
+<td valign="top" align="right" width="120"><i>UPDATE</i></td>
+<td valign="top">NEW and OLD references are valid</td>
+</tr>
+<tr>
+<td valign="top" align="right" width="120"><i>DELETE</i></td>
+<td valign="top">OLD references are valid</td>
+</tr>
+</table>
+
+
+<p>If a WHEN clause is supplied, the SQL statements specified
+are only executed if the WHEN clause is true.
+If no WHEN clause is supplied, the SQL statements
+are executed every time the trigger fires.</p>
+
+<p>The BEFORE or AFTER keyword determines when the trigger actions
+will be executed relative to the insertion, modification or removal of the
+associated row. BEFORE is the default when neither keyword is present.</p>
+
+<p>An <a href="lang_conflict.html">ON CONFLICT</a> clause may be specified as part of an <a href="lang_update.html">UPDATE</a> or <a href="lang_insert.html">INSERT</a>
+action within the body of the trigger.
+However if an <a href="lang_conflict.html">ON CONFLICT</a> clause is specified as part of
+the statement causing the trigger to fire, then conflict handling
+policy of the outer statement is used instead.</p>
+
+<p>Triggers are automatically <a href="lang_droptrigger.html">dropped</a>
+when the table that they are
+associated with (the <i>table-name</i> table) is
+<a href="lang_droptable.html">dropped</a>. However if the trigger actions reference
+other tables, the trigger is not dropped or modified if those other
+tables are <a href="lang_droptable.html">dropped</a> or <a href="lang_altertable.html">modified</a>.</p>
+
+<p>Triggers are removed using the <a href="lang_droptrigger.html">DROP TRIGGER</a> statement.</p>
+
+<h2 id="syntax_restrictions_on_update_delete_and_insert_statements_within_triggers"><span>2.1. </span>Syntax Restrictions On UPDATE, DELETE, and INSERT Statements Within
+ Triggers</h2>
+
+<p>The <a href="lang_update.html">UPDATE</a>, <a href="lang_delete.html">DELETE</a>, and <a href="lang_insert.html">INSERT</a>
+statements within triggers do not support
+the full syntax for <a href="lang_update.html">UPDATE</a>, <a href="lang_delete.html">DELETE</a>, and <a href="lang_insert.html">INSERT</a> statements. The following
+restrictions apply:</p>
+
+<ul>
+<li><p>
+ The name of the table to be modified in an <a href="lang_update.html">UPDATE</a>, <a href="lang_delete.html">DELETE</a>, or <a href="lang_insert.html">INSERT</a>
+ statement must be an unqualified table name. In other words, one must
+ use just "<i>tablename</i>" not "<i>database</i><b>.</b><i>tablename</i>"
+ when specifying the table. </p></li>
+
+<li><p>
+ For non-TEMP triggers,
+ the table to be modified or queried must exist in the
+ same database as the table or view to which the trigger is attached.
+ TEMP triggers are not subject to the same-database rule. A TEMP
+ trigger is allowed to query or modify any table in any <a href="lang_attach.html">ATTACH</a>-ed database.
+ </p></li>
+
+<li><p>
+ The "INSERT INTO <i>table</i> DEFAULT VALUES" form of the <a href="lang_insert.html">INSERT</a> statement
+ is not supported.
+ </p></li>
+
+<li><p>
+ The INDEXED BY and NOT INDEXED clauses are not supported for <a href="lang_update.html">UPDATE</a> and
+ <a href="lang_delete.html">DELETE</a> statements.
+ </p></li>
+
+<li><p>
+ The ORDER BY and LIMIT clauses on <a href="lang_update.html">UPDATE</a> and <a href="lang_delete.html">DELETE</a> statements are not
+ supported. ORDER BY and LIMIT are not normally supported for <a href="lang_update.html">UPDATE</a> or
+ <a href="lang_delete.html">DELETE</a> in any context but can be enabled for top-level statements
+ using the <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a> compile-time option. However,
+ that compile-time option only applies to top-level <a href="lang_update.html">UPDATE</a> and <a href="lang_delete.html">DELETE</a>
+ statements, not <a href="lang_update.html">UPDATE</a> and <a href="lang_delete.html">DELETE</a> statements within triggers.
+ </p></li>
+
+<li><p>
+ <a href="syntax/common-table-expression.html">Common table expression</a> are not supported for
+ statements inside of triggers.
+ </p></li>
+</ul>
+
+<a name="instead_of_trigger"></a>
+
+<h1 id="instead_of_triggers"><span>3. </span>INSTEAD OF triggers</h1>
+
+<p>BEFORE and AFTER triggers work only on ordinary tables.
+INSTEAD OF triggers work only on views.
+
+</p><p>If an INSTEAD OF INSERT trigger exists on a view, then it is
+possible to execute an INSERT statement against that view. No actual
+insert occurs. Instead, the statements contained within the trigger
+are run. INSTEAD OF DELETE and
+INSTEAD OF UPDATE triggers work the same way for DELETE and UPDATE statements
+against views.</p>
+
+<p>Note that the <a href="c3ref/changes.html">sqlite3_changes()</a> and <a href="c3ref/total_changes.html">sqlite3_total_changes()</a> interfaces
+do not count INSTEAD OF trigger firings, but the
+<a href="pragma.html#pragma_count_changes">count_changes pragma</a> does count INSTEAD OF trigger firing.</p>
+
+<h1 id="some_example_triggers"><span>4. </span>Some Example Triggers</h1>
+
+<p>Assuming that customer records are stored in the "customers" table, and
+that order records are stored in the "orders" table, the following
+UPDATE trigger
+ensures that all associated orders are redirected when a customer changes
+his or her address:</p>
+
+<blockquote><pre>
+CREATE TRIGGER update_customer_address UPDATE OF address ON customers
+ BEGIN
+ UPDATE orders SET address = new.address WHERE customer_name = old.name;
+ END;
+</pre></blockquote>
+
+<p>With this trigger installed, executing the statement:</p>
+
+<blockquote><pre>
+UPDATE customers SET address = '1 Main St.' WHERE name = 'Jack Jones';
+</pre></blockquote>
+
+<p>causes the following to be automatically executed:</p>
+
+<blockquote><pre>
+UPDATE orders SET address = '1 Main St.' WHERE customer_name = 'Jack Jones';
+</pre></blockquote>
+
+<p>For an example of an INSTEAD OF trigger, consider the following schema:
+
+<blockquote><pre>
+CREATE TABLE customer(
+ cust_id INTEGER PRIMARY KEY,
+ cust_name TEXT,
+ cust_addr TEXT
+);
+CREATE VIEW customer_address AS
+ SELECT cust_id, cust_addr FROM customer;
+CREATE TRIGGER cust_addr_chng
+INSTEAD OF UPDATE OF cust_addr ON customer_address
+BEGIN
+ UPDATE customer SET cust_addr=NEW.cust_addr
+ WHERE cust_id=NEW.cust_id;
+END;
+</pre></blockquote>
+
+</p><p>With the schema above, a statement of the form:</p>
+
+<blockquote><pre>
+UPDATE customer_address SET cust_addr=$new_address WHERE cust_id=$cust_id;
+</pre></blockquote>
+
+<p>Causes the customer.cust_addr field to be updated for a specific
+customer entry that has customer.cust_id equal to the $cust_id parameter.
+Note how the values assigned to the view are made available as field
+in the special "NEW" table within the trigger body.</p>
+
+<a name="undef_before"></a>
+
+<h1 id="cautions_on_the_use_of_before_triggers"><span>5. </span>Cautions On The Use Of BEFORE triggers</h1>
+
+<p>If a BEFORE UPDATE or BEFORE DELETE trigger modifies or deletes a row
+that was to have been updated or deleted, then the result of the subsequent
+update or delete operation is undefined. Furthermore, if a BEFORE trigger
+modifies or deletes a row, then it is undefined whether or not AFTER triggers
+that would have otherwise run on those rows will in fact run.
+</p>
+
+<p>The value of NEW.rowid is undefined in a BEFORE INSERT trigger in which
+the rowid is not explicitly set to an integer.</p>
+
+<p>Because of the behaviors described above, programmers are encouraged to
+prefer AFTER triggers over BEFORE triggers.</p>
+
+<a name="raise"></a>
+
+<h1 id="the_raise_function"><span>6. </span>The RAISE() function</h1>
+
+<p>A special SQL function RAISE() may be used within a trigger-program,
+with the following syntax</p>
+
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b></p><div class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+ </div>
+
+
+<p>When one of RAISE(ROLLBACK,...), RAISE(ABORT,...) or RAISE(FAIL,...)
+is called during trigger-program
+execution, the specified <a href="lang_conflict.html">ON CONFLICT</a> processing is performed and
+the current query terminates.
+An error code of <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> is returned to the application,
+along with the specified error message.</p>
+
+<p>When RAISE(IGNORE) is called, the remainder of the current trigger program,
+the statement that caused the trigger program to execute and any subsequent
+trigger programs that would have been executed are abandoned. No database
+changes are rolled back. If the statement that caused the trigger program
+to execute is itself part of a trigger program, then that trigger program
+resumes execution at the beginning of the next step.
+</p>
+
+<a name="temptrig"></a>
+
+<h1 id="temp_triggers_on_non_temp_tables"><span>7. </span>TEMP Triggers on Non-TEMP Tables</h1>
+
+<p>A trigger normally exists in the same database as the table named
+after the "ON" keyword in the CREATE TRIGGER statement. Except, it is
+possible to create a TEMP TRIGGER on a table in another database.
+Such a trigger will only fire when changes
+are made to the target table by the application that defined the trigger.
+Other applications that modify the database will not be able to see the
+TEMP trigger and hence cannot run the trigger.</p>
+
+<p>When defining a TEMP trigger on a non-TEMP table, it is important to
+specify the database holding the non-TEMP table. For example,
+in the following statement, it is important to say "main.tab1" instead
+of just "tab1":</p>
+
+<blockquote><pre>
+CREATE TEMP TRIGGER ex1 AFTER INSERT ON <b>main.</b>tab1 BEGIN ...
+</pre></blockquote>
+
+<p>Failure to specify the schema name on the target table could result
+in the TEMP trigger being reattached to a table with the same name in
+another database whenever any schema change occurs.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_createtrigger.in?m=62382caed8a6d9933">2022-09-27 13:16:55</a> UTC </small></i></p>
+
diff --git a/www/lang_createview.html b/www/lang_createview.html
new file mode 100644
index 0000000..1c60d91
--- /dev/null
+++ b/www/lang_createview.html
@@ -0,0 +1,2413 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>CREATE VIEW</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+CREATE VIEW
+</div>
+</div>
+
+
+
+
+<h1 id="syntax"><span>1. </span>Syntax</h1>
+
+<p><b><a href="syntax/create-view-stmt.html">create-view-stmt:</a></b>
+<button id='x1601' onclick='hideorshow("x1601","x1602")'>hide</button></p>
+ <div id='x1602' class='imgcontainer'>
+ <div style="max-width:885px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 885.677 232.632">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L199,56A15 15 0 0 0 214 41A15 15 0 0 0 199 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMP</text>
+<path d="M167,94L259,94A15 15 0 0 0 274 79A15 15 0 0 0 259 64L167,64A15 15 0 0 0 152 79A15 15 0 0 0 167 94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="79" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMPORARY</text>
+<path d="M325,32L355,32A15 15 0 0 0 370 17A15 15 0 0 0 355 2L325,2A15 15 0 0 0 310 17A15 15 0 0 0 325 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="340" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIEW</text>
+<polygon points="213,17 201,21 201,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L207,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,17 299,21 299,12" style="fill:rgb(0,0,0)"/>
+<path d="M213,17L305,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,79 140,83 140,74" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,32 L 131,64 Q 131,79 138,79 L 146,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M274,79 L 282,79 Q 289,79 289,64 L 289,32 Q 289,17 294,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M214,41 L 274,41 Q 289,41 289,33 L 289,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M370,17L400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M421,32A15 15 0 0 0 436 17A15 15 0 0 0 421 2A15 15 0 0 0 406 17A15 15 0 0 0 421 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="421" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="459,17 447,21 447,12" style="fill:rgb(0,0,0)"/>
+<path d="M436,17L453,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M474,32L494,32A15 15 0 0 0 509 17A15 15 0 0 0 494 2L474,2A15 15 0 0 0 459 17A15 15 0 0 0 474 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="532,17 521,21 521,12" style="fill:rgb(0,0,0)"/>
+<path d="M509,17L527,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,32L592,32A15 15 0 0 0 607 17A15 15 0 0 0 592 2L547,2A15 15 0 0 0 532 17A15 15 0 0 0 547 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="570" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="213,109 224,105 224,113" style="fill:rgb(0,0,0)"/>
+<path d="M370,17 L 377,17 Q 385,17 385,32 L 385,94 Q 385,109 370,109 L 234,109 L 219,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="532,109 544,105 544,113" style="fill:rgb(0,0,0)"/>
+<path d="M607,17 L 615,17 Q 622,17 622,32 L 622,94 Q 622,109 607,109 L 553,109 L 538,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,109L310,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,147 17,151 17,142" style="fill:rgb(0,0,0)"/>
+<path d="M310,109 L 20,109 Q 5,109 5,124 L 5,132 Q 5,147 14,147 L 23,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,162L140,162A15 15 0 0 0 155 147A15 15 0 0 0 140 132L43,132A15 15 0 0 0 28 147A15 15 0 0 0 43 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,147 166,151 166,142" style="fill:rgb(0,0,0)"/>
+<path d="M155,147L172,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,162A15 15 0 0 0 208 147A15 15 0 0 0 193 132A15 15 0 0 0 178 147A15 15 0 0 0 193 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,147 233,151 233,142" style="fill:rgb(0,0,0)"/>
+<path d="M208,147L238,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,162L330,162A15 15 0 0 0 345 147A15 15 0 0 0 330 132L259,132A15 15 0 0 0 244 147A15 15 0 0 0 259 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="295" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">view-name</text>
+<polygon points="383,177 372,181 372,173" style="fill:rgb(0,0,0)"/>
+<path d="M345,147 L 353,147 Q 360,147 360,162 L 360,162 Q 360,177 369,177 L 378,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M399,192A15 15 0 0 0 414 177A15 15 0 0 0 399 162A15 15 0 0 0 383 177A15 15 0 0 0 399 192Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="399" y="177" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="450,177 438,181 438,173" style="fill:rgb(0,0,0)"/>
+<path d="M414,177L444,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M465,192L559,192A15 15 0 0 0 574 177A15 15 0 0 0 559 162L465,162A15 15 0 0 0 450 177A15 15 0 0 0 465 192Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="512" y="177" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="610,177 599,181 599,173" style="fill:rgb(0,0,0)"/>
+<path d="M574,177L604,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M625,192A15 15 0 0 0 640 177A15 15 0 0 0 625 162A15 15 0 0 0 610 177A15 15 0 0 0 625 192Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="625" y="177" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="678,147 667,151 667,142" style="fill:rgb(0,0,0)"/>
+<path d="M640,177 L 648,177 Q 655,177 655,162 L 655,162 Q 655,147 664,147 L 673,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M693,162L697,162A15 15 0 0 0 713 147A15 15 0 0 0 697 132L693,132A15 15 0 0 0 678 147A15 15 0 0 0 693 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="695" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="736,147 724,151 724,142" style="fill:rgb(0,0,0)"/>
+<path d="M713,147L730,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M736,162L840,162L840,132L736,132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="788" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="876,147 864,151 864,142" style="fill:rgb(0,0,0)"/>
+<path d="M840,147L870,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="879" cy="147" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="92,177 80,181 80,173" style="fill:rgb(0,0,0)"/>
+<path d="M5,132 L 5,162 Q 5,177 20,177 L 71,177 L 86,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,177 L 206,177 Q 221,177 221,162 L 221,162 Q 221,147 227,147 L 233,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="512,147 500,151 500,142" style="fill:rgb(0,0,0)"/>
+<path d="M345,147L506,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M512,147L667,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M512,230A15 15 0 0 0 527 215A15 15 0 0 0 512 200A15 15 0 0 0 497 215A15 15 0 0 0 512 230Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="512" y="215" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="527,215 539,211 539,219" style="fill:rgb(0,0,0)"/>
+<path d="M574,177 L 582,177 Q 589,177 589,192 L 589,200 Q 589,215 574,215 L 548,215 L 533,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M497,215 L 442,215 Q 427,215 427,200 L 427,192 Q 427,177 434,177 L 442,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1603' onclick='hideorshow("x1603","x1604")'>show</button></p>
+ <div id='x1604' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1605' onclick='hideorshow("x1605","x1606")'>show</button></p>
+ <div id='x1606' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1607' onclick='hideorshow("x1607","x1608")'>show</button></p>
+ <div id='x1608' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1609' onclick='hideorshow("x1609","x1610")'>show</button></p>
+ <div id='x1610' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1611' onclick='hideorshow("x1611","x1612")'>show</button></p>
+ <div id='x1612' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1613' onclick='hideorshow("x1613","x1614")'>show</button></p>
+ <div id='x1614' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1615' onclick='hideorshow("x1615","x1616")'>show</button></p>
+ <div id='x1616' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1617' onclick='hideorshow("x1617","x1618")'>show</button></p>
+ <div id='x1618' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1619' onclick='hideorshow("x1619","x1620")'>show</button></p>
+ <div id='x1620' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1621' onclick='hideorshow("x1621","x1622")'>show</button></p>
+ <div id='x1622' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1623' onclick='hideorshow("x1623","x1624")'>show</button></p>
+ <div id='x1624' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1625' onclick='hideorshow("x1625","x1626")'>show</button></p>
+ <div id='x1626' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1627' onclick='hideorshow("x1627","x1628")'>show</button></p>
+ <div id='x1628' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1629' onclick='hideorshow("x1629","x1630")'>show</button></p>
+ <div id='x1630' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1631' onclick='hideorshow("x1631","x1632")'>show</button></p>
+ <div id='x1632' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1633' onclick='hideorshow("x1633","x1634")'>show</button></p>
+ <div id='x1634' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1635' onclick='hideorshow("x1635","x1636")'>show</button></p>
+ <div id='x1636' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1637' onclick='hideorshow("x1637","x1638")'>show</button></p>
+ <div id='x1638' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1639' onclick='hideorshow("x1639","x1640")'>show</button></p>
+ <div id='x1640' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+<h1 id="description"><span>2. </span>Description</h1>
+
+<p>The CREATE VIEW command assigns a name to a pre-packaged
+<a href="lang_select.html">SELECT</a> statement.
+Once the view is created, it can be used in the FROM clause
+of another <a href="lang_select.html">SELECT</a> in place of a table name.
+</p>
+
+<p>If the "TEMP" or "TEMPORARY" keyword occurs in between "CREATE"
+and "VIEW" then the view that is created is only visible to the
+<a href="c3ref/sqlite3.html">database connection</a> that created it and is automatically deleted when
+the database connection is closed.</p>
+
+<p> If a <span class='yyterm'>schema-name</span> is specified, then the view
+is created in the specified database.
+It is an error to specify both a <span class='yyterm'>schema-name</span>
+and the TEMP keyword on a VIEW, unless the <span class='yyterm'>schema-name</span>
+is "temp".
+If no schema name is specified, and the TEMP keyword is not present,
+the VIEW is created in the main database.</p>
+
+<p>You cannot <a href="lang_delete.html">DELETE</a>, <a href="lang_insert.html">INSERT</a>, or <a href="lang_update.html">UPDATE</a> a view. Views are read-only
+in SQLite. However, in many cases you can use an
+<a href="lang_createtrigger.html#instead_of_trigger">INSTEAD OF trigger</a> on the view to accomplish
+the same thing. Views are removed
+with the <a href="lang_dropview.html">DROP VIEW</a> command.</p>
+
+<p>If a <span class='yyterm'>column-name</span> list follows
+the <span class='yyterm'>view-name</span>, then that list determines
+the names of the columns for the view. If the <span class='yyterm'>column-name</span>
+list is omitted, then the names of the columns in the view are derived
+from the names of the result-set columns in the <a href="syntax/select-stmt.html">select-stmt</a>.
+The use of <span class='yyterm'>column-name</span> list is recommended. Or, if
+<span class='yyterm'>column-name</span> list is omitted, then the result
+columns in the <a href="lang_select.html">SELECT</a> statement that defines the view should have
+well-defined names using the
+"<a href="syntax/result-column.html">AS column-alias</a>" syntax.
+SQLite allows you to create views that depend on automatically
+generated column names, but you should avoid using them since the
+rules used to generate column names are not a defined part of the
+interface and might change in future releases of SQLite.
+
+</p><p>The <span class='yyterm'>column-name</span> list syntax was added in
+SQLite versions 3.9.0 (2015-10-14).
+
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_createview.in?m=8fb825fdb88dab2d4">2020-02-10 20:33:26</a> UTC </small></i></p>
+
diff --git a/www/lang_createvtab.html b/www/lang_createvtab.html
new file mode 100644
index 0000000..6247425
--- /dev/null
+++ b/www/lang_createvtab.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>CREATE VIRTUAL TABLE</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+CREATE VIRTUAL TABLE
+</div>
+</div>
+
+
+
+
+
+<p><b><a href="syntax/create-virtual-table-stmt.html">create-virtual-table-stmt:</a></b>
+<button id='x1641' onclick='hideorshow("x1641","x1642")'>hide</button></p>
+ <div id='x1642' class='imgcontainer'>
+ <div style="max-width:624px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 624.096 259.848">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<polygon points="139,17 127,21 127,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L133,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M154,32L213,32A15 15 0 0 0 228 17A15 15 0 0 0 213 2L154,2A15 15 0 0 0 139 17A15 15 0 0 0 154 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIRTUAL</text>
+<polygon points="251,17 240,21 240,12" style="fill:rgb(0,0,0)"/>
+<path d="M228,17L246,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,32L306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2L266,2A15 15 0 0 0 251 17A15 15 0 0 0 266 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="286" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M372,32A15 15 0 0 0 387 17A15 15 0 0 0 372 2A15 15 0 0 0 357 17A15 15 0 0 0 372 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="372" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="410,17 399,21 399,12" style="fill:rgb(0,0,0)"/>
+<path d="M387,17L404,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M425,32L445,32A15 15 0 0 0 461 17A15 15 0 0 0 445 2L425,2A15 15 0 0 0 410 17A15 15 0 0 0 425 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="435" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="484,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M461,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,32L543,32A15 15 0 0 0 558 17A15 15 0 0 0 543 2L499,2A15 15 0 0 0 484 17A15 15 0 0 0 499 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="521" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<path d="M47,108L143,108A15 15 0 0 0 159 92A15 15 0 0 0 143 77L47,77A15 15 0 0 0 32 92A15 15 0 0 0 47 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="182,92 170,97 170,88" style="fill:rgb(0,0,0)"/>
+<path d="M159,92L176,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,108A15 15 0 0 0 212 92A15 15 0 0 0 197 77A15 15 0 0 0 182 92A15 15 0 0 0 197 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="197" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="248,92 236,97 236,88" style="fill:rgb(0,0,0)"/>
+<path d="M212,92L242,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M263,108L338,108A15 15 0 0 0 353 92A15 15 0 0 0 338 77L263,77A15 15 0 0 0 248 92A15 15 0 0 0 263 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<path d="M47,219L86,219A15 15 0 0 0 101 204A15 15 0 0 0 86 189L47,189A15 15 0 0 0 32 204A15 15 0 0 0 47 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="67" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="124,204 113,209 113,200" style="fill:rgb(0,0,0)"/>
+<path d="M101,204L118,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M139,219L234,219A15 15 0 0 0 249 204A15 15 0 0 0 234 189L139,189A15 15 0 0 0 124 204A15 15 0 0 0 139 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">module-name</text>
+<polygon points="285,204 274,209 274,200" style="fill:rgb(0,0,0)"/>
+<path d="M249,204L279,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,219A15 15 0 0 0 315 204A15 15 0 0 0 300 189A15 15 0 0 0 285 204A15 15 0 0 0 300 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="204" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,204 340,209 340,200" style="fill:rgb(0,0,0)"/>
+<path d="M315,204L346,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,219L497,219A15 15 0 0 0 512 204A15 15 0 0 0 497 189L366,189A15 15 0 0 0 351 204A15 15 0 0 0 366 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">module-argument</text>
+<polygon points="548,204 536,209 536,200" style="fill:rgb(0,0,0)"/>
+<path d="M512,204L542,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M563,219A15 15 0 0 0 578 204A15 15 0 0 0 563 189A15 15 0 0 0 548 204A15 15 0 0 0 563 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="563" y="204" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="614,204 603,209 603,200" style="fill:rgb(0,0,0)"/>
+<path d="M578,204L608,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="618" cy="204" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,257A15 15 0 0 0 447 242A15 15 0 0 0 432 227A15 15 0 0 0 417 242A15 15 0 0 0 432 257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="242" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="447,242 458,238 458,246" style="fill:rgb(0,0,0)"/>
+<path d="M512,204 L 519,204 Q 527,204 527,219 L 527,227 Q 527,242 512,242 L 468,242 L 453,242" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,242 L 343,242 Q 328,242 328,227 L 328,219 Q 328,204 336,204 L 343,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="432,180 420,184 420,176" style="fill:rgb(0,0,0)"/>
+<path d="M249,204 L 257,204 Q 264,204 264,192 Q 264,180 279,180 L 411,180 L 426,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,180 L 576,180 Q 591,180 591,192 Q 591,204 599,204 L 606,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,153 198,149 198,157" style="fill:rgb(0,0,0)"/>
+<path d="M353,92 L 361,92 Q 368,92 368,107 L 368,138 Q 368,153 353,153 L 207,153 L 192,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,204 20,209 20,200" style="fill:rgb(0,0,0)"/>
+<path d="M187,153 L 20,153 Q 5,153 5,168 L 5,189 Q 5,204 16,204 L 26,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="429,62 441,58 441,66" style="fill:rgb(0,0,0)"/>
+<path d="M558,17 L 566,17 Q 573,17 573,32 L 573,47 Q 573,62 558,62 L 450,62 L 435,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,92 20,97 20,88" style="fill:rgb(0,0,0)"/>
+<path d="M429,62 L 20,62 Q 5,62 5,77 L 5,77 Q 5,92 16,92 L 26,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,47 332,35 340,35" style="fill:rgb(0,0,0)"/>
+<path d="M321,17 L 328,17 Q 336,17 336,29 L 336,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,47 L 336,54 Q 336,62 328,62 L 321,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="95,123 84,127 84,118" style="fill:rgb(0,0,0)"/>
+<path d="M5,77 L 5,108 Q 5,123 20,123 L 74,123 L 89,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,123 L 210,123 Q 225,123 225,108 L 225,107 Q 225,92 231,92 L 236,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p>A <a href="vtab.html">virtual table</a> is an interface to an external storage or computation
+engine that appears to be a table but does not actually store information
+in the database file.</p>
+
+<p>In general, you can do anything with a <a href="vtab.html">virtual table</a> that can be done
+with an ordinary table, except that you cannot create indices or triggers on a
+virtual table. Some virtual table implementations might impose additional
+restrictions. For example, many virtual tables are read-only.</p>
+
+<p>The <span class='yyterm'>module-name</span> is the name of an object that implements
+the virtual table. The <span class='yyterm'>module-name</span> must be registered with
+the SQLite database connection using
+<a href="c3ref/create_module.html">sqlite3_create_module()</a> or <a href="c3ref/create_module.html">sqlite3_create_module_v2()</a>
+prior to issuing the CREATE VIRTUAL TABLE statement.
+The module takes zero or more comma-separated arguments.
+The arguments can be just about any text as long as it has balanced
+parentheses. The argument syntax is sufficiently general that the
+arguments can be made to appear as <a href="lang_createtable.html#tablecoldef">column definitions</a> in a traditional
+<a href="lang_createtable.html">CREATE TABLE</a> statement.
+SQLite passes the module arguments directly
+to the <a href="vtab.html#xcreate">xCreate</a> and <a href="vtab.html#xconnect">xConnect</a> methods of the module implementation
+without any interpretation. It is the responsibility
+of the module implementation to parse and interpret its own arguments.</p>
+
+<p>A virtual table is destroyed using the ordinary
+<a href="lang_droptable.html">DROP TABLE</a> statement. There is no
+DROP VIRTUAL TABLE statement.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_createvtab.in?m=73c535b61b90923f9">2020-02-10 20:33:26</a> UTC </small></i></p>
+
diff --git a/www/lang_datefunc.html b/www/lang_datefunc.html
new file mode 100644
index 0000000..c2ab1a5
--- /dev/null
+++ b/www/lang_datefunc.html
@@ -0,0 +1,541 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Date And Time Functions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Date And Time Functions
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#time_values">2. Time Values</a></div>
+<div class="fancy-toc1"><a href="#modifiers">3. Modifiers</a></div>
+<div class="fancy-toc1"><a href="#examples">4. Examples</a></div>
+<div class="fancy-toc1"><a href="#caveats_and_bugs">5. Caveats And Bugs</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+SQLite supports six date and time functions as follows:
+</p>
+
+<p>
+</p><ol>
+<li> <b>date(</b><i>time-value, modifier, modifier, ...</i><b>)</b> </li>
+<li> <b>time(</b><i>time-value, modifier, modifier, ...</i><b>)</b> </li>
+<li> <b>datetime(</b><i>time-value, modifier, modifier, ...</i><b>)</b> </li>
+<li> <b>julianday(</b><i>time-value, modifier, modifier, ...</i><b>)</b> </li>
+<li> <b>unixepoch(</b><i>time-value, modifier, modifier, ...</i><b>)</b> </li>
+<li> <b>strftime(</b><i>format, time-value, modifier, modifier, ...</i><b>)</b> </li>
+</ol>
+
+<p>
+All six date and time functions take an optional time value as an argument, followed
+by zero or more modifiers.
+The strftime() function also takes a format string as its first argument.
+</p>
+
+<p>
+Date and time values can be stored as
+</p><ul>
+<li> text in a subset of the <a href="http://en.wikipedia.org/wiki/ISO_8601">ISO-8601</a> format,
+</li><li> numbers representing the <a href="http://en.wikipedia.org/wiki/Julian_day">Julian day</a>, or
+</li><li> numbers representing the number of seconds since (or before) 1970-01-01 00:00:00 UTC
+ (the unix timestamp).
+</li></ul>
+
+<p>
+All of the date time functions access time-values in any of the above time formats.
+
+</p><p>
+The date() function returns the date as text in this format: YYYY-MM-DD.
+
+</p><p>
+The time() function returns the time as text in this format: HH:MM:SS.
+
+</p><p>
+The datetime() function returns the date and time as text in their same formats: YYYY-MM-DD HH:MM:SS.
+
+</p><p>
+The julianday() function returns the
+<a href="http://en.wikipedia.org/wiki/Julian_day">Julian day</a> - the
+fractional number of days since noon in Greenwich on November 24, 4714 B.C.
+(<a href="http://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar">Proleptic Gregorian calendar</a>).
+
+<a name="uepch"></a>
+
+</p><p>
+The unixepoch() function returns a unix timestamp - the number of seconds
+since 1970-01-01 00:00:00 UTC. The unixepoch() always returns an integer,
+even if the input time-value has millisecond precision.
+
+</p><p>
+The strftime() routine returns the date formatted according to
+the format string specified as the first argument.
+The format string supports the most common substitutions found in the
+<a href="http://opengroup.org/onlinepubs/007908799/xsh/strftime.html">strftime() function</a>
+from the standard C library plus two new substitutions, %f and %J.
+The following is a complete list of valid strftime() substitutions:
+</p>
+
+<blockquote>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td><td width="10"></td><td></td></tr>
+
+<tr><td> %d </td><td></td><td> day of month: 00
+</td></tr><tr><td> %f </td><td></td><td> fractional seconds: SS.SSS
+</td></tr><tr><td> %H </td><td></td><td> hour: 00-24
+</td></tr><tr><td> %j </td><td></td><td> day of year: 001-366
+</td></tr><tr><td> %J </td><td></td><td> Julian day number (fractional)
+</td></tr><tr><td> %m </td><td></td><td> month: 01-12
+</td></tr><tr><td> %M </td><td></td><td> minute: 00-59
+</td></tr><tr><td> %s </td><td></td><td> seconds since 1970-01-01
+</td></tr><tr><td> %S </td><td></td><td> seconds: 00-59
+</td></tr><tr><td> %w </td><td></td><td> day of week 0-6 with Sunday==0
+</td></tr><tr><td> %W </td><td></td><td> week of year: 00-53
+</td></tr><tr><td> %Y </td><td></td><td> year: 0000-9999
+</td></tr><tr><td> %% </td><td></td><td> %
+</td></tr></table>
+</blockquote>
+
+<p>
+All other date and time functions can be expressed
+in terms of strftime():
+</p>
+
+<blockquote>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td><b>Function</b></td><td width="30"></td><td><b>Equivalent (or nearly) strftime()</b>
+</td></tr><tr><td> date(...) </td><td></td><td> strftime('%Y-%m-%d', ...)
+</td></tr><tr><td> time(...) </td><td></td><td> strftime('%H:%M:%S', ...)
+</td></tr><tr><td> datetime(...) </td><td></td><td> strftime('%Y-%m-%d %H:%M:%S', ...)
+</td></tr><tr><td> julianday(...) </td><td></td><td> <nobr>strftime('%J', ...) -- note-1</nobr>
+</td></tr><tr><td> unixepoch(...) </td><td></td><td> <nobr>strftime('%s', ...) -- note-1</nobr>
+</td></tr></table>
+</blockquote>
+
+<p>
+The date(), time(), and datetime() functions all return text, and so their
+strftime() equivalents are exact. However (<b>note-1</b>) the julianday()
+and unixepoch() functions return numeric values. Their strftime() equivalents
+return strings that is the text representation of the corresponding number.
+</p>
+
+<p>
+The main reasons for providing functions other than strftime() are
+for convenience and for efficiency. The julianday() and unixepoch()
+functions return real and integer values respectively, and do not
+incur the format conversion costs or inexactitude resulting from use
+of the '%J' or '%s' format specifiers with the strftime() function.
+</p>
+
+<h1 id="time_values"><span>2. </span>Time Values</h1>
+
+<p>A time value can be in any of the following formats shown below.
+The value is usually a string, though it can be an integer or floating
+point number in the case of format 12.
+
+</p><ol>
+<li> <i>YYYY-MM-DD</i>
+</li><li> <i>YYYY-MM-DD HH:MM</i>
+</li><li> <i>YYYY-MM-DD HH:MM:SS</i>
+</li><li> <i>YYYY-MM-DD HH:MM:SS.SSS</i>
+</li><li> <i>YYYY-MM-DD</i><b>T</b><i>HH:MM</i>
+</li><li> <i>YYYY-MM-DD</i><b>T</b><i>HH:MM:SS</i>
+</li><li> <i>YYYY-MM-DD</i><b>T</b><i>HH:MM:SS.SSS</i>
+</li><li> <i>HH:MM</i>
+</li><li> <i>HH:MM:SS</i>
+</li><li> <i>HH:MM:SS.SSS</i>
+</li><li> <b>now</b>
+</li><li> <i>DDDDDDDDDD</i>
+</li></ol>
+
+<p>
+In formats 5 through 7, the "T" is a literal character separating
+the date and the time, as required by
+<a href="http://www.w3c.org/TR/NOTE-datetime">ISO-8601</a>.
+Formats 8 through 10 that specify only a time assume a date of
+2000-01-01. Format 11, the string 'now', is converted into the
+current date and time as obtained from the xCurrentTime method
+of the <a href="c3ref/vfs.html">sqlite3_vfs</a> object in use.
+The 'now' argument to date and time functions always returns exactly the
+same value for multiple invocations within the same <a href="c3ref/step.html">sqlite3_step()</a> call.
+<a href="http://en.wikipedia.org/wiki/Coordinated_Universal_Time">Universal Coordinated Time (UTC)</a> is used.
+Format 12 is the
+<a href="http://en.wikipedia.org/wiki/Julian_day">Julian day number</a>
+expressed as an integer or floating point value.
+Format 12 might also be interpreted as a unix timestamp if it is immediately followed
+either the 'auto' or 'unixepoch' modifier.
+</p>
+
+<p>
+Formats 2 through 10 may be optionally followed by a timezone indicator of the form
+"<i>&#91;+-&#93;HH:MM</i>" or just "<i>Z</i>". The date and time functions use UTC or "zulu"
+time internally, and so the "Z" suffix is a no-op. Any non-zero "HH:MM" suffix is
+subtracted from the indicated date and time in order to compute zulu time.
+For example, all of the following time values are equivalent:
+</p>
+
+<blockquote>
+2013-10-07 08:23:19.120<br>
+2013-10-07T08:23:19.120Z<br>
+2013-10-07 04:23:19.120-04:00<br>
+2456572.84952685
+</blockquote>
+
+<p>
+In formats 4, 7, and 10, the fractional seconds value SS.SSS can have
+one or more digits following the decimal point. Exactly three digits are
+shown in the examples because only the first three digits are significant
+to the result, but the input string can have fewer or more than three digits
+and the date/time functions will still operate correctly.
+Similarly, format 12 is shown with 10 significant digits, but the date/time
+functions will really accept as many or as few digits as are necessary to
+represent the Julian day number.
+</p>
+
+<p>
+The time-value (and all modifiers) may be omitted, in which case a time
+value of 'now' is assumed.
+
+<a name="dtmods"></a>
+
+</p><h1 id="modifiers"><span>3. </span>Modifiers</h1>
+
+<p>The time value can be followed by zero or more modifiers that
+alter date and/or time. Each modifier
+is a transformation that is applied to the time value to its left.
+Modifiers are applied from left to right; order is important.
+The available modifiers are as follows.</p>
+
+<ol>
+<li> NNN days
+</li><li> NNN hours
+</li><li> NNN minutes
+</li><li> NNN.NNNN seconds
+</li><li> NNN months
+</li><li> NNN years
+</li><li> start of month
+</li><li> start of year
+</li><li> start of day
+</li><li> weekday N
+</li><li> unixepoch
+</li><li> julianday
+</li><li> auto
+</li><li> localtime
+</li><li> utc
+</li></ol>
+
+<p>The first six modifiers (1 through 6)
+simply add the specified amount of time to the date and time
+specified by the arguments to the left.
+The 's' character at the end of the modifier names is optional.
+Note that "&plusmn;NNN months" works by rendering the original date into
+the YYYY-MM-DD format, adding the &plusmn;NNN to the MM month value, then
+normalizing the result. Thus, for example, the date 2001-03-31 modified
+by '+1 month' initially yields 2001-04-31, but April only has 30 days
+so the date is normalized to 2001-05-01. A similar effect occurs when
+the original date is February 29 of a leapyear and the modifier is
+&plusmn;N years where N is not a multiple of four.</p>
+
+<p>The "start of" modifiers (7 through 9) shift the date backwards
+to the beginning of the subject month, year or day.</p>
+
+<p>The "weekday" modifier advances the date forward, if necessary,
+to the next date where the weekday number is N. Sunday is 0, Monday is 1,
+and so forth.
+If the date is already on the desired weekday, the "weekday" modifier
+leaves the date unchanged. </p>
+
+<p>The "unixepoch" modifier (11) only works if it immediately follows
+a time value in the DDDDDDDDDD format.
+This modifier causes the DDDDDDDDDD to be interpreted not
+as a Julian day number as it normally would be, but as
+<a href="http://en.wikipedia.org/wiki/Unix_time">Unix Time</a> - the
+number of seconds since 1970. If the "unixepoch" modifier does not
+follow a time value of the form DDDDDDDDDD which expresses the number
+of seconds since 1970 or if other modifiers
+separate the "unixepoch" modifier from prior DDDDDDDDDD then the
+behavior is undefined.
+For SQLite versions before 3.16.0 (2017-01-02),
+the "unixepoch" modifier only works for
+dates between 0000-01-01 00:00:00 and 5352-11-01 10:52:47 (unix times
+of -62167219200 through 106751991167).</p>
+
+<a name="jdmod"></a>
+
+<p>The "julianday" modifier must immediately follow the initial
+time-value which must be of the form DDDDDDDDD. Any other use of
+the 'julianday' modifier is an error and causes the function to return NULL.
+The 'julianday' modifier forces the time-value number to be interpreted
+as a julian-day number. As this is the default behavior, the 'julianday'
+modifier is scarcely more than a no-op. The only difference is that
+adding 'julianday' forces the DDDDDDDDD time-value format, and causes
+a NULL to be returned if any other time-value format is used.
+
+<a name="automod"></a>
+
+</p><p>The "auto" modifier must immediately follow the initial time-value.
+If the time-value is numeric (the DDDDDDDDDD format) then the 'auto'
+modifier causes the time-value to interpreted as either a julian day
+number or a unix timestamp, depending on its magnitude. If the value
+is between 0.0 and 5373484.499999, then it is interpreted as a julian
+day number (corresponding to dates between
+-4713-11-24 12:00:00 and 9999-12-31 23:59:59, inclusive). For numeric
+values outside of the range of valid julian day numbers, but within
+the range of -210866760000 to 253402300799, the 'auto' modifier causes
+the value to be interpreted as a unix timestamp. Other numeric values
+are out of range and cause a NULL return. The 'auto' modifier is a no-op
+for text time-values.
+
+</p><p>The 'auto' modifier can be used to work with date/time values even in
+cases where it is not known if the julian day number or unix timestamp
+formats are in use. The 'auto' modifier will automatically select the
+appropriate format. However, there is a region of ambiguity. Unix
+timestamps for the first 63 days of 1970 will be interpreted as julian
+day numbers. The 'auto' modifier is very useful when the dataset is
+guaranteed to not contain any dates within that region, but should be
+avoided for applications that might make use of dates in the opening
+months of 1970.
+
+<a name="localtime"></a>
+
+</p><p>The "localtime" modifier (14) assumes the time value to its left is in
+Universal Coordinated Time (UTC) and adjusts that time
+value so that it is in localtime. If "localtime"
+follows a time that is not UTC, then the behavior is undefined.
+The "utc" modifier is the opposite of "localtime".
+"utc" assumes that the time value
+to its left is in the local timezone and adjusts that time value to be in UTC.
+If the time to the left is not in localtime, then the result of "utc" is
+undefined.</p>
+
+<h1 id="examples"><span>4. </span>Examples</h1>
+
+<p>Compute the current date.</p><p>
+
+</p><blockquote>SELECT date();</blockquote>
+
+<p>Compute the last day of the current month.</p>
+
+<blockquote>SELECT date('now','start of month','+1 month','-1 day');
+</blockquote>
+
+<p>Compute the date and time given a unix timestamp 1092941466.</p>
+
+<blockquote>
+ SELECT datetime(1092941466, 'unixepoch');<br>
+ SELECT datetime(1092941466, 'auto'); -- Does not work for early 1970!
+</blockquote>
+
+<p>Compute the date and time given a unix timestamp 1092941466, and
+compensate for your local timezone.</p>
+
+<blockquote>
+ SELECT datetime(1092941466, 'unixepoch', 'localtime');
+</blockquote>
+
+<p>Compute the current unix timestamp.</p>
+
+<blockquote>
+ SELECT unixepoch();<br>
+ SELECT strftime('%s');
+</blockquote>
+
+<p>Compute the number of days since the signing of the US Declaration
+of Independence.</p>
+
+<blockquote>
+ SELECT julianday('now') - julianday('1776-07-04');
+</blockquote>
+
+<p>Compute the number of seconds since a particular moment in 2004:</p>
+
+<blockquote>
+ SELECT unixepoch() - unixepoch('2004-01-01 02:34:56');
+</blockquote>
+
+<p>
+Compute the date of the first Tuesday in October
+for the current year.
+</p>
+
+<blockquote>
+ SELECT date('now','start of year','+9 months','weekday 2');
+</blockquote>
+
+<p>Compute the time since the unix epoch in seconds with
+millisecond precision:</p>
+
+<blockquote>
+ SELECT (julianday('now') - 2440587.5)*86400.0;
+</blockquote>
+
+<h1 id="caveats_and_bugs"><span>5. </span>Caveats And Bugs</h1>
+
+<p>The computation of local time depends heavily on the whim
+of politicians and is thus difficult to get correct for
+all locales. In this implementation, the standard C library
+function localtime_r() is used to assist in the calculation of
+local time. The
+localtime_r() C function normally only works for years
+between 1970 and 2037. For dates outside this range, SQLite
+attempts to map the year into an equivalent year within
+this range, do the calculation, then map the year back.</p>
+
+<p>These functions only work for dates between 0000-01-01 00:00:00
+and 9999-12-31 23:59:59 (julian day numbers 1721059.5 through 5373484.5).
+For dates outside that range, the results of these
+functions are undefined.</p>
+
+<p>Non-Vista Windows platforms only support one set of DST rules.
+Vista only supports two. Therefore, on these platforms,
+historical DST calculations will be incorrect.
+For example, in the US, in 2007 the DST rules changed.
+Non-Vista Windows platforms apply the new 2007 DST rules
+to all previous years as well. Vista does somewhat better
+getting results correct back to 1986, when the rules were also changed.</p>
+
+<p>All internal computations assume the
+<a href="http://en.wikipedia.org/wiki/Gregorian_calendar">Gregorian calendar</a>
+system. They also assume that every
+day is exactly 86400 seconds in duration; no leap seconds are incorporated.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_datefunc.in?m=5e55e49a95b10d0d9">2022-01-27 15:08:03</a> UTC </small></i></p>
+
diff --git a/www/lang_delete.html b/www/lang_delete.html
new file mode 100644
index 0000000..42ae00a
--- /dev/null
+++ b/www/lang_delete.html
@@ -0,0 +1,3797 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>DELETE</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+DELETE
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#restrictions_on_delete_statements_within_create_trigger">2. Restrictions on DELETE Statements Within CREATE TRIGGER</a></div>
+<div class="fancy-toc1"><a href="#optional_limit_and_order_by_clauses">3. Optional LIMIT and ORDER BY clauses</a></div>
+<div class="fancy-toc1"><a href="#the_truncate_optimization">4. The Truncate Optimization</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p><b><a href="syntax/delete-stmt.html">delete-stmt:</a></b>
+<button id='x1643' onclick='hideorshow("x1643","x1644")'>hide</button></p>
+ <div id='x1644' class='imgcontainer'>
+ <div style="max-width:648px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 648.706 220.32">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L114,32A15 15 0 0 0 129 17A15 15 0 0 0 114 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="98" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M189,62L275,62A15 15 0 0 0 290 47A15 15 0 0 0 275 32L189,32A15 15 0 0 0 174 47A15 15 0 0 0 189 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="232" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="232,17 220,21 220,12" style="fill:rgb(0,0,0)"/>
+<path d="M129,17L226,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,17 368,21 368,12" style="fill:rgb(0,0,0)"/>
+<path d="M232,17L374,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,32L606,32L606,2L380,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="174,47 162,51 162,43" style="fill:rgb(0,0,0)"/>
+<path d="M129,17 L 136,17 Q 144,17 144,32 L 144,32 Q 144,47 156,47 L 168,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,47 301,51 301,43" style="fill:rgb(0,0,0)"/>
+<path d="M290,47L307,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,47 L 321,47 Q 328,47 328,32 L 328,32 Q 328,17 343,17 L 353,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,70A15 15 0 0 0 508 55L508,55A15 15 0 0 0 493 39A15 15 0 0 0 478 55L478,55A15 15 0 0 0 493 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="508,55 520,50 520,59" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,40 Q 621,55 606,55 L 529,55 L 514,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,55 L 372,55 Q 357,55 357,40 L 357,32 Q 357,17 363,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,138L136,138A15 15 0 0 0 151 123A15 15 0 0 0 136 108L83,108A15 15 0 0 0 68 123A15 15 0 0 0 83 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="174,123 163,127 163,118" style="fill:rgb(0,0,0)"/>
+<path d="M151,123L168,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,138L224,138A15 15 0 0 0 239 123A15 15 0 0 0 224 108L189,108A15 15 0 0 0 174 123A15 15 0 0 0 189 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="207" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="262,123 251,127 251,118" style="fill:rgb(0,0,0)"/>
+<path d="M239,123L256,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M262,138L447,138L447,108L262,108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<circle cx="642" cy="213" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M639,213 L 618,213 Q 603,213 603,198 L 603,198 Q 603,183 595,183 L 588,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M437,198L588,198L588,168L437,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="512" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="437,183 425,187 425,179" style="fill:rgb(0,0,0)"/>
+<path d="M431,183 L 421,183 Q 410,183 410,198 L 410,198 Q 410,213 403,213 L 395,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,213 384,218 384,209" style="fill:rgb(0,0,0)"/>
+<path d="M390,213 L 379,213 Q 369,213 369,198 L 369,198 Q 369,183 361,183 L 354,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M305,198L354,198L354,168L305,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="329" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="305,183 293,187 293,179" style="fill:rgb(0,0,0)"/>
+<path d="M299,183L282,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,198L267,198A15 15 0 0 0 282 183A15 15 0 0 0 267 168L217,168A15 15 0 0 0 202 183A15 15 0 0 0 217 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="242" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="355,153 366,149 366,157" style="fill:rgb(0,0,0)"/>
+<path d="M447,123 L 455,123 Q 462,123 462,138 L 462,138 Q 462,153 447,153 L 375,153 L 360,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="202,183 190,187 190,179" style="fill:rgb(0,0,0)"/>
+<path d="M355,153 L 195,153 Q 180,153 180,168 L 180,168 Q 180,183 188,183 L 196,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="639,213 627,218 627,209" style="fill:rgb(0,0,0)"/>
+<path d="M180,172 L 180,198 Q 180,213 195,213 L 618,213 L 633,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="355,85 366,81 366,89" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,70 Q 621,85 606,85 L 375,85 L 360,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,123 56,127 56,118" style="fill:rgb(0,0,0)"/>
+<path d="M355,85 L 62,85 Q 47,85 47,100 L 47,108 Q 47,123 55,123 L 62,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,47 43,36 51,36" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,29 L 47,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,47L47,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1645' onclick='hideorshow("x1645","x1646")'>show</button></p>
+ <div id='x1646' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1647' onclick='hideorshow("x1647","x1648")'>show</button></p>
+ <div id='x1648' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1649' onclick='hideorshow("x1649","x1650")'>show</button></p>
+ <div id='x1650' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1651' onclick='hideorshow("x1651","x1652")'>show</button></p>
+ <div id='x1652' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1653' onclick='hideorshow("x1653","x1654")'>show</button></p>
+ <div id='x1654' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1655' onclick='hideorshow("x1655","x1656")'>show</button></p>
+ <div id='x1656' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1657' onclick='hideorshow("x1657","x1658")'>show</button></p>
+ <div id='x1658' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1659' onclick='hideorshow("x1659","x1660")'>show</button></p>
+ <div id='x1660' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1661' onclick='hideorshow("x1661","x1662")'>show</button></p>
+ <div id='x1662' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1663' onclick='hideorshow("x1663","x1664")'>show</button></p>
+ <div id='x1664' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1665' onclick='hideorshow("x1665","x1666")'>show</button></p>
+ <div id='x1666' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1667' onclick='hideorshow("x1667","x1668")'>show</button></p>
+ <div id='x1668' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1669' onclick='hideorshow("x1669","x1670")'>show</button></p>
+ <div id='x1670' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1671' onclick='hideorshow("x1671","x1672")'>show</button></p>
+ <div id='x1672' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1673' onclick='hideorshow("x1673","x1674")'>show</button></p>
+ <div id='x1674' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1675' onclick='hideorshow("x1675","x1676")'>show</button></p>
+ <div id='x1676' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1677' onclick='hideorshow("x1677","x1678")'>show</button></p>
+ <div id='x1678' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1679' onclick='hideorshow("x1679","x1680")'>show</button></p>
+ <div id='x1680' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1681' onclick='hideorshow("x1681","x1682")'>show</button></p>
+ <div id='x1682' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1683' onclick='hideorshow("x1683","x1684")'>show</button></p>
+ <div id='x1684' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1685' onclick='hideorshow("x1685","x1686")'>show</button></p>
+ <div id='x1686' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1687' onclick='hideorshow("x1687","x1688")'>show</button></p>
+ <div id='x1688' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1689' onclick='hideorshow("x1689","x1690")'>show</button></p>
+ <div id='x1690' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1691' onclick='hideorshow("x1691","x1692")'>show</button></p>
+ <div id='x1692' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1693' onclick='hideorshow("x1693","x1694")'>show</button></p>
+ <div id='x1694' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1695' onclick='hideorshow("x1695","x1696")'>show</button></p>
+ <div id='x1696' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1697' onclick='hideorshow("x1697","x1698")'>show</button></p>
+ <div id='x1698' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1699' onclick='hideorshow("x1699","x1700")'>show</button></p>
+ <div id='x1700' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1701' onclick='hideorshow("x1701","x1702")'>show</button></p>
+ <div id='x1702' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1703' onclick='hideorshow("x1703","x1704")'>show</button></p>
+ <div id='x1704' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/qualified-table-name.html">qualified-table-name:</a></b>
+<button id='x1705' onclick='hideorshow("x1705","x1706")'>show</button></p>
+ <div id='x1706' style='display:none;' class='imgcontainer'>
+ <div style="max-width:599px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 599.746 182.736">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L156,32A15 15 0 0 0 171 17A15 15 0 0 0 156 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M171,17L189,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,32A15 15 0 0 0 225 17A15 15 0 0 0 210 2A15 15 0 0 0 195 17A15 15 0 0 0 210 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,17 249,21 249,12" style="fill:rgb(0,0,0)"/>
+<path d="M225,17L255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32L351,32A15 15 0 0 0 366 17A15 15 0 0 0 351 2L276,2A15 15 0 0 0 261 17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="408,44 396,48 396,40" style="fill:rgb(0,0,0)"/>
+<path d="M366,17 L 374,17 Q 381,17 381,30 Q 381,44 392,44 L 402,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,59L427,59A15 15 0 0 0 442 44L442,44A15 15 0 0 0 427 29L423,29A15 15 0 0 0 408 44L408,44A15 15 0 0 0 423 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="465,44 453,48 453,40" style="fill:rgb(0,0,0)"/>
+<path d="M442,44L459,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,59L501,59A15 15 0 0 0 516 44L516,44A15 15 0 0 0 501 29L480,29A15 15 0 0 0 465 44L465,44A15 15 0 0 0 480 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="539,44 527,48 527,40" style="fill:rgb(0,0,0)"/>
+<path d="M516,44L533,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,44 L 546,44 Q 554,44 554,51 L 554,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,17 442,21 442,12" style="fill:rgb(0,0,0)"/>
+<path d="M366,17L448,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,44 97,48 97,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 39,44 L 87,44 L 102,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M108,44 L 225,44 Q 240,44 240,30 Q 240,17 247,17 L 255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,142L301,142A15 15 0 0 0 316 127A15 15 0 0 0 301 112L236,112A15 15 0 0 0 221 127A15 15 0 0 0 236 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="339,127 327,131 327,123" style="fill:rgb(0,0,0)"/>
+<path d="M316,127L333,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,142L358,142A15 15 0 0 0 373 127A15 15 0 0 0 358 112L354,112A15 15 0 0 0 339 127A15 15 0 0 0 354 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="396,127 385,131 385,123" style="fill:rgb(0,0,0)"/>
+<path d="M373,127L390,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M411,142L490,142A15 15 0 0 0 505 127A15 15 0 0 0 490 112L411,112A15 15 0 0 0 396 127A15 15 0 0 0 411 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="451" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M236,180L256,180A15 15 0 0 0 271 165A15 15 0 0 0 256 150L236,150A15 15 0 0 0 221 165A15 15 0 0 0 236 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="294,165 283,169 283,161" style="fill:rgb(0,0,0)"/>
+<path d="M271,165L289,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,180L374,180A15 15 0 0 0 389 165A15 15 0 0 0 374 150L310,150A15 15 0 0 0 294 165A15 15 0 0 0 310 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="554,74 550,62 558,62" style="fill:rgb(0,0,0)"/>
+<path d="M453,17 L 539,17 Q 554,17 554,32 L 554,53 L 554,68" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 325,85 325,94" style="fill:rgb(0,0,0)"/>
+<path d="M554,74 L 554,82 Q 554,89 539,89 L 334,89 L 319,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,127 210,131 210,123" style="fill:rgb(0,0,0)"/>
+<path d="M313,89 L 210,89 Q 195,89 195,104 L 195,112 Q 195,127 205,127 L 215,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,165 210,169 210,161" style="fill:rgb(0,0,0)"/>
+<path d="M195,112 L 195,150 Q 195,165 205,165 L 215,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="554,114 550,102 558,102" style="fill:rgb(0,0,0)"/>
+<path d="M554,74L554,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="590,165 578,169 578,161" style="fill:rgb(0,0,0)"/>
+<path d="M554,114 L 554,150 Q 554,165 569,165 L 569,165 L 584,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="593" cy="165" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,127 527,131 527,123" style="fill:rgb(0,0,0)"/>
+<path d="M505,127L533,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,127 L 546,127 Q 554,127 554,135 L 554,142" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M389,165L578,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/returning-clause.html">returning-clause:</a></b>
+<button id='x1707' onclick='hideorshow("x1707","x1708")'>show</button></p>
+ <div id='x1708' style='display:none;' class='imgcontainer'>
+ <div style="max-width:628px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 628.709 140.4">
+<circle cx="5" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="27,47 15,51 15,43" style="fill:rgb(0,0,0)"/>
+<path d="M9,47L21,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M42,62L132,62A15 15 0 0 0 147 47A15 15 0 0 0 132 32L42,32A15 15 0 0 0 27 47A15 15 0 0 0 42 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RETURNING</text>
+<polygon points="237,47 226,51 226,43" style="fill:rgb(0,0,0)"/>
+<path d="M147,47L232,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,62L287,62L287,32L237,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="328,77 317,82 317,73" style="fill:rgb(0,0,0)"/>
+<path d="M287,47 L 294,47 Q 302,47 302,62 L 302,62 Q 302,77 312,77 L 322,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M343,92L347,92A15 15 0 0 0 362 77L362,77A15 15 0 0 0 347 62L343,62A15 15 0 0 0 328 77L328,77A15 15 0 0 0 343 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="398,77 387,82 387,73" style="fill:rgb(0,0,0)"/>
+<path d="M362,77L393,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M414,92L501,92A15 15 0 0 0 516 77L516,77A15 15 0 0 0 501 62L414,62A15 15 0 0 0 398 77L398,77A15 15 0 0 0 414 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="539,77 528,82 528,73" style="fill:rgb(0,0,0)"/>
+<path d="M516,77L534,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="581,47 569,51 569,43" style="fill:rgb(0,0,0)"/>
+<path d="M539,77 L 547,77 Q 554,77 554,62 L 554,62 Q 554,47 565,47 L 575,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,47 607,51 607,43" style="fill:rgb(0,0,0)"/>
+<path d="M581,47L613,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="622" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="345,101 334,106 334,97" style="fill:rgb(0,0,0)"/>
+<path d="M302,62 L 302,86 Q 302,101 317,101 L 325,101 L 340,101" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,101 L 362,101 Q 377,101 377,89 Q 377,77 385,77 L 392,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,47 441,51 441,43" style="fill:rgb(0,0,0)"/>
+<path d="M287,47L447,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,47L607,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,138A15 15 0 0 0 406 123A15 15 0 0 0 391 108A15 15 0 0 0 376 123A15 15 0 0 0 391 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="376,123 365,127 365,118" style="fill:rgb(0,0,0)"/>
+<path d="M147,47 L 196,47 Q 211,47 211,62 L 211,108 Q 211,123 226,123 L 355,123 L 370,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,123 528,127 528,118" style="fill:rgb(0,0,0)"/>
+<path d="M406,123L534,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,123 L 547,123 Q 554,123 554,108 L 554,77 L 554,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,32A15 15 0 0 0 406 17A15 15 0 0 0 391 2A15 15 0 0 0 376 17A15 15 0 0 0 391 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="406,17 418,12 418,21" style="fill:rgb(0,0,0)"/>
+<path d="M581,47 L 588,47 Q 596,47 596,32 L 596,32 Q 596,17 581,17 L 427,17 L 412,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M376,17 L 174,17 Q 159,17 159,32 L 159,32 Q 159,47 169,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+
+
+<p>The DELETE command removes records from the table identified by the
+ <a href="syntax/qualified-table-name.html">qualified-table-name</a>.
+
+</p><p>If the WHERE clause is not present, all records in the table are deleted.
+ If a WHERE clause is supplied, then only those rows for which the
+ WHERE clause <a href="lang_expr.html#booleanexpr">boolean expression</a> is true are deleted.
+ Rows for which the expression is false or NULL are retained.
+
+</p><p>
+
+</p><h1 id="restrictions_on_delete_statements_within_create_trigger"><span>2. </span>Restrictions on DELETE Statements Within CREATE TRIGGER</h1>
+
+<p>The following restrictions apply to DELETE statements that occur within the
+ body of a <a href="lang_createtrigger.html">CREATE TRIGGER</a> statement:
+
+</p><ul>
+ <li><p>The <span class='yyterm'>table-name</span> specified as part of a
+ DELETE statement within
+ a trigger body must be unqualified. In other words, the
+ <i>schema-name</i><b>.</b> prefix on the table name is not allowed
+ within triggers. If the table to which the trigger is attached is
+ not in the temp database, then DELETE statements within the trigger
+ body must operate on tables within the same database as it. If the table
+ to which the trigger is attached is in the TEMP database, then the
+ unqualified name of the table being deleted is resolved in the same way as
+ it is for a top-level statement (by searching first the TEMP database, then
+ the main database, then any other databases in the order they were
+ attached).
+
+ </p></li><li><p>The INDEXED BY and NOT INDEXED clauses are not allowed on DELETE
+ statements within triggers.</p>
+
+ </li><li><p>The LIMIT and ORDER BY clauses (described below) are unsupported for
+ DELETE statements within triggers.</p>
+
+ </li><li><p>The RETURNING clause is not supported for triggers.
+</p></li></ul>
+
+<h1 id="optional_limit_and_order_by_clauses"><span>3. </span>Optional LIMIT and ORDER BY clauses</h1>
+
+<p>If SQLite is compiled with the <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a>
+compile-time option, then the syntax of the DELETE statement is
+extended by the addition of optional ORDER BY and LIMIT clauses:</p>
+
+<p><b><a href="syntax/delete-stmt-limited.html">delete-stmt-limited:</a></b></p><div class='imgcontainer'>
+ <div style="max-width:623px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 623.266 541.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,138L113,138A15 15 0 0 0 128 123A15 15 0 0 0 113 108L60,108A15 15 0 0 0 45 123A15 15 0 0 0 60 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="151,123 140,127 140,118" style="fill:rgb(0,0,0)"/>
+<path d="M128,123L145,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M166,138L201,138A15 15 0 0 0 216 123A15 15 0 0 0 201 108L166,108A15 15 0 0 0 151 123A15 15 0 0 0 166 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="239,123 228,127 228,118" style="fill:rgb(0,0,0)"/>
+<path d="M216,123L233,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,138L424,138L424,108L239,108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<polygon points="45,123 33,127 33,118" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,108 Q 24,123 31,123 L 39,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,85 343,81 343,89" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,70 Q 598,85 583,85 L 352,85 L 337,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M332,85 L 39,85 Q 24,85 24,92 L 24,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,213L109,213A15 15 0 0 0 125 198A15 15 0 0 0 109 183L60,183A15 15 0 0 0 45 198A15 15 0 0 0 60 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="148,198 136,203 136,194" style="fill:rgb(0,0,0)"/>
+<path d="M125,198L142,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M148,213L197,213L197,183L148,183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="172" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M45,289L196,289L196,259L45,259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="120" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<path d="M60,365L105,365A15 15 0 0 0 120 349A15 15 0 0 0 105 334L60,334A15 15 0 0 0 45 349A15 15 0 0 0 60 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="82" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="143,349 131,354 131,345" style="fill:rgb(0,0,0)"/>
+<path d="M120,349L137,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,365L162,365A15 15 0 0 0 177 349A15 15 0 0 0 162 334L158,334A15 15 0 0 0 143 349A15 15 0 0 0 158 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="160" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="213,349 201,354 201,345" style="fill:rgb(0,0,0)"/>
+<path d="M177,349L207,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M213,365L343,365L343,334L213,334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M278,402A15 15 0 0 0 293 387A15 15 0 0 0 278 372A15 15 0 0 0 263 387A15 15 0 0 0 278 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="387" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M60,470L93,470A15 15 0 0 0 109 455A15 15 0 0 0 93 440L60,440A15 15 0 0 0 45 455A15 15 0 0 0 60 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,455 120,460 120,451" style="fill:rgb(0,0,0)"/>
+<path d="M109,455L126,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,470L181,470L181,440L132,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,486 207,490 207,481" style="fill:rgb(0,0,0)"/>
+<path d="M181,455 L 188,455 Q 196,455 196,470 L 196,471 Q 196,486 204,486 L 213,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,501L285,501A15 15 0 0 0 300 486A15 15 0 0 0 285 470L234,470A15 15 0 0 0 219 486A15 15 0 0 0 234 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="323,486 312,490 312,481" style="fill:rgb(0,0,0)"/>
+<path d="M300,486L318,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,501L373,501L373,470L323,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M234,538A15 15 0 0 0 249 523A15 15 0 0 0 234 508A15 15 0 0 0 219 523A15 15 0 0 0 234 538Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="523" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="272,523 261,528 261,519" style="fill:rgb(0,0,0)"/>
+<path d="M249,523L266,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,538L321,538L321,508L272,508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="523" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,523 207,528 207,519" style="fill:rgb(0,0,0)"/>
+<path d="M181,455 L 188,455 Q 196,455 196,470 L 196,508 Q 196,523 204,523 L 213,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,455 602,460 602,451" style="fill:rgb(0,0,0)"/>
+<path d="M181,455L608,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="455" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="575,123 564,127 564,118" style="fill:rgb(0,0,0)"/>
+<path d="M424,123L570,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M575,123 L 583,123 Q 590,123 590,138 L 590,440 Q 590,455 598,455 L 605,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="239,160 251,156 251,165" style="fill:rgb(0,0,0)"/>
+<path d="M424,123 L 431,123 Q 439,123 439,138 L 439,145 Q 439,160 424,160 L 260,160 L 245,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,198 33,203 33,194" style="fill:rgb(0,0,0)"/>
+<path d="M239,160 L 39,160 Q 24,160 24,175 L 24,183 Q 24,198 31,198 L 39,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="575,198 564,203 564,194" style="fill:rgb(0,0,0)"/>
+<path d="M197,198L570,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M575,198 L 583,198 Q 590,198 590,206 L 590,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,274 33,278 33,270" style="fill:rgb(0,0,0)"/>
+<path d="M24,259 L 24,266 Q 24,274 31,274 L 39,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="120,312 132,307 132,316" style="fill:rgb(0,0,0)"/>
+<path d="M196,274 L 203,274 Q 211,274 211,289 L 211,297 Q 211,312 196,312 L 141,312 L 126,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M120,312 L 39,312 Q 24,312 24,319 L 24,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="575,274 564,278 564,270" style="fill:rgb(0,0,0)"/>
+<path d="M196,274L570,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M575,274 L 583,274 Q 590,274 590,281 L 590,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,349 33,354 33,345" style="fill:rgb(0,0,0)"/>
+<path d="M24,183 L 24,334 Q 24,349 31,349 L 39,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="120,236 131,232 131,240" style="fill:rgb(0,0,0)"/>
+<path d="M197,198 L 204,198 Q 212,198 212,213 L 212,221 Q 212,236 197,236 L 140,236 L 125,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M120,236 L 39,236 Q 24,236 24,244 L 24,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="293,387 305,383 305,392" style="fill:rgb(0,0,0)"/>
+<path d="M343,349 L 350,349 Q 358,349 358,364 L 358,372 Q 358,387 343,387 L 314,387 L 299,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M263,387 L 205,387 Q 190,387 190,372 L 190,364 Q 190,349 197,349 L 205,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,334 L 24,440 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="160,417 171,413 171,422" style="fill:rgb(0,0,0)"/>
+<path d="M343,349 L 350,349 Q 358,349 358,364 L 358,402 Q 358,417 343,417 L 181,417 L 166,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M160,417 L 39,417 Q 24,417 24,425 L 24,432" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,455 435,460 435,451" style="fill:rgb(0,0,0)"/>
+<path d="M321,523 L 396,523 Q 411,523 411,508 L 411,470 Q 411,455 426,455 L 426,455 L 441,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,486 384,490 384,481" style="fill:rgb(0,0,0)"/>
+<path d="M373,486L390,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,486 L 403,486 Q 411,486 411,478 L 411,471" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+ </div>
+
+
+<p>If a DELETE statement has a LIMIT clause, the maximum number of rows that
+will be deleted is found by evaluating the accompanying expression and casting
+it to an integer value. If the result of the evaluating the LIMIT clause
+cannot be losslessly converted to an integer value, it is an error. A
+negative LIMIT value is interpreted as "no limit". If the DELETE statement
+also has an OFFSET clause, then it is similarly evaluated and cast to an
+integer value. Again, it is an error if the value cannot be losslessly
+converted to an integer. If there is no OFFSET clause, or the calculated
+integer value is negative, the effective OFFSET value is zero.
+
+</p><p>If the DELETE statement has an ORDER BY clause, then all rows that would
+be deleted in the absence of the LIMIT clause are sorted according to the
+ORDER BY. The first <i>M</i> rows, where <i>M</i> is the value found by
+evaluating the OFFSET clause expression, are skipped, and the following
+<i>N</i>, where <i>N</i> is the value of the LIMIT expression, are deleted.
+If there are less than <i>N</i> rows remaining after taking the OFFSET clause
+into account, or if the LIMIT clause evaluated to a negative value, then all
+remaining rows are deleted.
+
+</p><p>If the DELETE statement has no ORDER BY clause, then all rows that
+would be deleted in the absence of the LIMIT clause are assembled in an
+arbitrary order before applying the LIMIT and OFFSET clauses to determine
+the subset that are actually deleted.
+
+</p><p>The ORDER BY clause on a DELETE statement is used only to determine which
+rows fall within the LIMIT. The order in which rows are deleted is arbitrary
+and is not influenced by the ORDER BY clause.
+This means that if there is a <a href="lang_returning.html">RETURNING clause</a>, the rows returned by
+the statement probably will not be in the order specified by the
+ORDER BY clause.
+
+<a name="truncateopt"></a>
+
+</p><h1 id="the_truncate_optimization"><span>4. </span>The Truncate Optimization</h1>
+
+<p>When the WHERE clause and RETURNING clause are both omitted
+from a DELETE statement and the table being deleted has no triggers,
+SQLite uses an optimization to erase the entire table content
+without having to visit each row of the table individually.
+This "truncate" optimization makes the delete run much faster.
+Prior to SQLite <a href="releaselog/3_6_5.html">version 3.6.5</a> (2008-11-12), the truncate optimization
+also meant that the <a href="c3ref/changes.html">sqlite3_changes()</a> and
+<a href="c3ref/total_changes.html">sqlite3_total_changes()</a> interfaces
+and the <a href="pragma.html#pragma_count_changes">count_changes pragma</a>
+will not actually return the number of deleted rows.
+That problem has been fixed as of <a href="releaselog/3_6_5.html">version 3.6.5</a> (2008-11-12).
+
+</p><p>The truncate optimization can be permanently disabled for all queries
+by recompiling
+SQLite with the <a href="compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time switch.</p>
+
+<p>The truncate optimization can also be disabled at runtime using
+the <a href="c3ref/set_authorizer.html">sqlite3_set_authorizer()</a> interface. If an authorizer callback
+returns <a href="c3ref/c_deny.html">SQLITE_IGNORE</a> for an <a href="c3ref/c_alter_table.html">SQLITE_DELETE</a> action code, then
+the DELETE operation will proceed but the truncate optimization will
+be bypassed and rows will be deleted one by one.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_delete.in?m=9710a614b3f096162">2021-02-02 12:11:09</a> UTC </small></i></p>
+
diff --git a/www/lang_detach.html b/www/lang_detach.html
new file mode 100644
index 0000000..2e1378a
--- /dev/null
+++ b/www/lang_detach.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>DETACH</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+DETACH
+</div>
+</div>
+
+
+
+
+<p><b><a href="syntax/detach-stmt.html">detach-stmt:</a></b>
+<button id='x1709' onclick='hideorshow("x1709","x1710")'>hide</button></p>
+ <div id='x1710' class='imgcontainer'>
+ <div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.595 47.952">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L104,32A15 15 0 0 0 119 17A15 15 0 0 0 104 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DETACH</text>
+<polygon points="155,17 143,21 143,12" style="fill:rgb(0,0,0)"/>
+<path d="M119,17L149,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M170,32L246,32A15 15 0 0 0 261 17A15 15 0 0 0 246 2L170,2A15 15 0 0 0 155 17A15 15 0 0 0 170 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="208" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DATABASE</text>
+<polygon points="297,17 286,21 286,12" style="fill:rgb(0,0,0)"/>
+<path d="M261,17L291,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,32L409,32A15 15 0 0 0 424 17A15 15 0 0 0 409 2L312,2A15 15 0 0 0 297 17A15 15 0 0 0 312 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="447,17 435,21 435,12" style="fill:rgb(0,0,0)"/>
+<path d="M424,17L441,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="208,41 196,45 196,37" style="fill:rgb(0,0,0)"/>
+<path d="M119,17 L 126,17 Q 134,17 134,29 Q 134,41 149,41 L 187,41 L 202,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M208,41 L 255,41 Q 270,41 270,29 Q 270,17 278,17 L 285,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p>This statement detaches an additional database connection previously
+attached using the <a href="lang_attach.html">ATTACH</a> statement.
+When not in <a href="sharedcache.html">shared cache mode</a>,
+it is possible to have the same database file attached multiple times using
+different names, and detaching one connection to a file will leave the
+others intact.</p>
+
+<p>
+In <a href="sharedcache.html">shared cache mode</a>, attempting to attach the same database file more
+than once results in an error.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_detach.in?m=0a2131785f9bbd5b4">2020-02-10 20:33:26</a> UTC </small></i></p>
+
diff --git a/www/lang_dropindex.html b/www/lang_dropindex.html
new file mode 100644
index 0000000..0bef9ef
--- /dev/null
+++ b/www/lang_dropindex.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>DROP INDEX</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+DROP INDEX
+</div>
+</div>
+
+
+
+
+<p><b><a href="syntax/drop-index-stmt.html">drop-index-stmt:</a></b>
+<button id='x1711' onclick='hideorshow("x1711","x1712")'>hide</button></p>
+ <div id='x1712' class='imgcontainer'>
+ <div style="max-width:761px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 761.27 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L171,32A15 15 0 0 0 186 17A15 15 0 0 0 171 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="151" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEX</text>
+<polygon points="222,17 210,21 210,12" style="fill:rgb(0,0,0)"/>
+<path d="M186,17L216,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,32A15 15 0 0 0 252 17A15 15 0 0 0 237 2A15 15 0 0 0 222 17A15 15 0 0 0 237 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="237" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="275,17 263,21 263,12" style="fill:rgb(0,0,0)"/>
+<path d="M252,17L269,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,32L335,32A15 15 0 0 0 350 17A15 15 0 0 0 335 2L290,2A15 15 0 0 0 275 17A15 15 0 0 0 290 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="404,17 392,21 392,12" style="fill:rgb(0,0,0)"/>
+<path d="M350,17L398,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,32L515,32A15 15 0 0 0 530 17A15 15 0 0 0 515 2L419,2A15 15 0 0 0 404 17A15 15 0 0 0 419 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="467" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="553,17 542,21 542,12" style="fill:rgb(0,0,0)"/>
+<path d="M530,17L548,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,32A15 15 0 0 0 584 17A15 15 0 0 0 569 2A15 15 0 0 0 553 17A15 15 0 0 0 569 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="569" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="620,17 608,21 608,12" style="fill:rgb(0,0,0)"/>
+<path d="M584,17L614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M635,32L713,32A15 15 0 0 0 728 17A15 15 0 0 0 713 2L635,2A15 15 0 0 0 620 17A15 15 0 0 0 635 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<polygon points="751,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M728,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="755" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,47 263,51 263,43" style="fill:rgb(0,0,0)"/>
+<path d="M186,17 L 193,17 Q 201,17 201,32 L 201,32 Q 201,47 216,47 L 254,47 L 269,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,47 L 350,47 Q 365,47 365,32 L 365,32 Q 365,17 372,17 L 380,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="467,47 456,51 456,43" style="fill:rgb(0,0,0)"/>
+<path d="M372,17 L 379,17 Q 387,17 387,32 L 387,32 Q 387,47 402,47 L 446,47 L 461,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,47 L 584,47 Q 599,47 599,32 L 599,32 Q 599,17 606,17 L 614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p>The DROP INDEX statement removes an index added
+with the <a href="lang_createindex.html">CREATE INDEX</a> statement. The index is completely removed from
+the disk. The only way to recover the index is to reenter the
+appropriate <a href="lang_createindex.html">CREATE INDEX</a> command.</p>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_dropindex.in?m=fbaca78c239fb5b8d">2020-02-10 20:33:26</a> UTC </small></i></p>
+
diff --git a/www/lang_droptable.html b/www/lang_droptable.html
new file mode 100644
index 0000000..06cfecf
--- /dev/null
+++ b/www/lang_droptable.html
@@ -0,0 +1,200 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>DROP TABLE</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+DROP TABLE
+</div>
+</div>
+
+
+
+
+<p><b><a href="syntax/drop-table-stmt.html">drop-table-stmt:</a></b>
+<button id='x1713' onclick='hideorshow("x1713","x1714")'>hide</button></p>
+ <div id='x1714' class='imgcontainer'>
+ <div style="max-width:758px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 758.16 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L171,32A15 15 0 0 0 186 17A15 15 0 0 0 171 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="151" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="222,17 210,21 210,12" style="fill:rgb(0,0,0)"/>
+<path d="M186,17L216,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,32A15 15 0 0 0 252 17A15 15 0 0 0 237 2A15 15 0 0 0 222 17A15 15 0 0 0 237 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="237" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="275,17 264,21 264,12" style="fill:rgb(0,0,0)"/>
+<path d="M252,17L269,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,32L335,32A15 15 0 0 0 350 17A15 15 0 0 0 335 2L290,2A15 15 0 0 0 275 17A15 15 0 0 0 290 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="404,17 392,21 392,12" style="fill:rgb(0,0,0)"/>
+<path d="M350,17L398,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,32L515,32A15 15 0 0 0 531 17A15 15 0 0 0 515 2L419,2A15 15 0 0 0 404 17A15 15 0 0 0 419 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="467" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="554,17 542,21 542,12" style="fill:rgb(0,0,0)"/>
+<path d="M531,17L548,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,32A15 15 0 0 0 584 17A15 15 0 0 0 569 2A15 15 0 0 0 554 17A15 15 0 0 0 569 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="569" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="620,17 608,21 608,12" style="fill:rgb(0,0,0)"/>
+<path d="M584,17L614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M635,32L710,32A15 15 0 0 0 725 17A15 15 0 0 0 710 2L635,2A15 15 0 0 0 620 17A15 15 0 0 0 635 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="673" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="748,17 737,21 737,12" style="fill:rgb(0,0,0)"/>
+<path d="M725,17L743,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="752" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,47 264,51 264,43" style="fill:rgb(0,0,0)"/>
+<path d="M186,17 L 193,17 Q 201,17 201,32 L 201,32 Q 201,47 216,47 L 254,47 L 269,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,47 L 350,47 Q 365,47 365,32 L 365,32 Q 365,17 372,17 L 380,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="467,47 456,51 456,43" style="fill:rgb(0,0,0)"/>
+<path d="M372,17 L 379,17 Q 387,17 387,32 L 387,32 Q 387,47 402,47 L 447,47 L 462,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,47 L 584,47 Q 599,47 599,32 L 599,32 Q 599,17 606,17 L 614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p>The DROP TABLE statement removes a table added with the
+<a href="lang_createtable.html">CREATE TABLE</a> statement. The name specified is the
+table name. The dropped table is completely removed from the database
+schema and the disk file. The table can not be recovered.
+All indices and triggers
+associated with the table are also deleted.</p>
+
+<p>The optional IF EXISTS clause suppresses the error that would normally
+result if the table does not exist.</p>
+
+<p>If <a href="foreignkeys.html">foreign key constraints</a> are enabled, a DROP TABLE command performs an
+implicit <a href="lang_delete.html">DELETE FROM</a> command before removing the
+table from the database schema. Any triggers attached to the table are
+dropped from the database schema before the implicit DELETE FROM
+is executed, so this cannot cause any triggers to fire. By contrast, an
+implicit DELETE FROM does cause any configured
+<a href="foreignkeys.html#fk_actions">foreign key actions</a> to take place.
+If the implicit DELETE FROM executed
+as part of a DROP TABLE command violates any immediate foreign key constraints,
+an error is returned and the table is not dropped. If
+the implicit DELETE FROM causes any
+deferred foreign key constraints to be violated, and the violations still
+exist when the transaction is committed, an error is returned at the time
+of commit.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_droptable.in?m=0350dfc779ee8c5ee">2020-02-10 20:33:26</a> UTC </small></i></p>
+
diff --git a/www/lang_droptrigger.html b/www/lang_droptrigger.html
new file mode 100644
index 0000000..083f900
--- /dev/null
+++ b/www/lang_droptrigger.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>DROP TRIGGER</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<p><b><a href="syntax/drop-trigger-stmt.html">drop-trigger-stmt:</a></b>
+<button id='x1715' onclick='hideorshow("x1715","x1716")'>hide</button></p>
+ <div id='x1716' class='imgcontainer'>
+ <div style="max-width:795px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 795.37 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L191,32A15 15 0 0 0 207 17A15 15 0 0 0 191 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="161" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRIGGER</text>
+<polygon points="243,17 231,21 231,12" style="fill:rgb(0,0,0)"/>
+<path d="M207,17L237,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,32A15 15 0 0 0 273 17A15 15 0 0 0 258 2A15 15 0 0 0 243 17A15 15 0 0 0 258 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="296,17 284,21 284,12" style="fill:rgb(0,0,0)"/>
+<path d="M273,17L290,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,32L356,32A15 15 0 0 0 371 17A15 15 0 0 0 356 2L311,2A15 15 0 0 0 296 17A15 15 0 0 0 311 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="425,17 413,21 413,12" style="fill:rgb(0,0,0)"/>
+<path d="M371,17L419,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,32L536,32A15 15 0 0 0 551 17A15 15 0 0 0 536 2L440,2A15 15 0 0 0 425 17A15 15 0 0 0 440 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="574,17 563,21 563,12" style="fill:rgb(0,0,0)"/>
+<path d="M551,17L569,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M589,32A15 15 0 0 0 605 17A15 15 0 0 0 589 2A15 15 0 0 0 574 17A15 15 0 0 0 589 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="589" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="641,17 629,21 629,12" style="fill:rgb(0,0,0)"/>
+<path d="M605,17L635,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M656,32L747,32A15 15 0 0 0 762 17A15 15 0 0 0 747 2L656,2A15 15 0 0 0 641 17A15 15 0 0 0 656 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="702" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">trigger-name</text>
+<polygon points="786,17 774,21 774,12" style="fill:rgb(0,0,0)"/>
+<path d="M762,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="789" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="296,47 284,51 284,43" style="fill:rgb(0,0,0)"/>
+<path d="M207,17 L 214,17 Q 222,17 222,32 L 222,32 Q 222,47 237,47 L 275,47 L 290,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M296,47 L 371,47 Q 386,47 386,32 L 386,32 Q 386,17 393,17 L 401,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="488,47 476,51 476,43" style="fill:rgb(0,0,0)"/>
+<path d="M392,17 L 400,17 Q 407,17 407,32 L 407,32 Q 407,47 422,47 L 467,47 L 482,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,47 L 605,47 Q 620,47 620,32 L 620,32 Q 620,17 627,17 L 635,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p>The DROP TRIGGER statement removes a trigger created by the
+<a href="lang_createtrigger.html">CREATE TRIGGER</a> statement. Once removed, the trigger definition is no
+longer present in the <a href="schematab.html">sqlite_schema</a> (or sqlite_temp_schema) table and is
+not fired by any subsequent INSERT, UPDATE or DELETE statements.
+
+<p>Note that triggers are automatically dropped when the associated table is
+dropped.
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_droptrigger.in?m=975cc0579703ac0d7">2020-06-19 13:05:24</a> UTC </small></i></p>
+
diff --git a/www/lang_dropview.html b/www/lang_dropview.html
new file mode 100644
index 0000000..11cad56
--- /dev/null
+++ b/www/lang_dropview.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>DROP VIEW</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+DROP VIEW
+</div>
+</div>
+
+
+
+
+<p><b><a href="syntax/drop-view-stmt.html">drop-view-stmt:</a></b>
+<button id='x1717' onclick='hideorshow("x1717","x1718")'>hide</button></p>
+ <div id='x1718' class='imgcontainer'>
+ <div style="max-width:743px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 743.76 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L160,32A15 15 0 0 0 176 17A15 15 0 0 0 160 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIEW</text>
+<polygon points="212,17 200,21 200,12" style="fill:rgb(0,0,0)"/>
+<path d="M176,17L206,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,32A15 15 0 0 0 242 17A15 15 0 0 0 227 2A15 15 0 0 0 212 17A15 15 0 0 0 227 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="227" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="265,17 253,21 253,12" style="fill:rgb(0,0,0)"/>
+<path d="M242,17L259,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M280,32L325,32A15 15 0 0 0 340 17A15 15 0 0 0 325 2L280,2A15 15 0 0 0 265 17A15 15 0 0 0 280 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="394,17 382,21 382,12" style="fill:rgb(0,0,0)"/>
+<path d="M340,17L388,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,32L505,32A15 15 0 0 0 520 17A15 15 0 0 0 505 2L409,2A15 15 0 0 0 394 17A15 15 0 0 0 409 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="543,17 532,21 532,12" style="fill:rgb(0,0,0)"/>
+<path d="M520,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,32A15 15 0 0 0 574 17A15 15 0 0 0 558 2A15 15 0 0 0 543 17A15 15 0 0 0 558 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="558" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="610,17 598,21 598,12" style="fill:rgb(0,0,0)"/>
+<path d="M574,17L604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M625,32L696,32A15 15 0 0 0 711 17A15 15 0 0 0 696 2L625,2A15 15 0 0 0 610 17A15 15 0 0 0 625 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="660" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">view-name</text>
+<polygon points="734,17 722,21 722,12" style="fill:rgb(0,0,0)"/>
+<path d="M711,17L728,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="738" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="265,47 253,51 253,43" style="fill:rgb(0,0,0)"/>
+<path d="M176,17 L 183,17 Q 191,17 191,32 L 191,32 Q 191,47 206,47 L 244,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,47 L 340,47 Q 355,47 355,32 L 355,32 Q 355,17 362,17 L 370,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="457,47 445,51 445,43" style="fill:rgb(0,0,0)"/>
+<path d="M361,17 L 369,17 Q 376,17 376,32 L 376,32 Q 376,47 391,47 L 436,47 L 451,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M457,47 L 574,47 Q 589,47 589,32 L 589,32 Q 589,17 596,17 L 604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p>The DROP VIEW statement removes a view created by the <a href="lang_createview.html">CREATE VIEW</a>
+ statement. The view definition is removed from the database schema, but
+ no actual data in the underlying base tables is modified.
+
+</p><p>The view to drop is identified by the view-name and optional
+ schema-name specified as part of the DROP VIEW statement. This
+ reference is resolved using the standard procedure for <a href="lang_naming.html">object resolution</a>.
+
+</p><p>
+ If the specified view cannot be found and the IF EXISTS clause is not
+ present, it is an error. If the specified view cannot be found and an IF
+ EXISTS clause is present in the DROP VIEW statement, then the statement
+ is a no-op.
+
+
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_dropview.in?m=2b6e06f992ddb87aa">2020-02-10 20:33:26</a> UTC </small></i></p>
+
diff --git a/www/lang_explain.html b/www/lang_explain.html
new file mode 100644
index 0000000..be2e055
--- /dev/null
+++ b/www/lang_explain.html
@@ -0,0 +1,398 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>EXPLAIN</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+EXPLAIN
+</div>
+</div>
+
+
+
+
+<h1 id="syntax"><span>1. </span>Syntax</h1>
+<p><b><a href="syntax/sql-stmt.html">sql-stmt:</a></b></p><div class='imgcontainer'>
+ <div style="max-width:716px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 716.88 1017.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L125,70A15 15 0 0 0 140 55L140,55A15 15 0 0 0 125 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXPLAIN</text>
+<polygon points="176,55 165,59 165,50" style="fill:rgb(0,0,0)"/>
+<path d="M140,55L170,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,70L235,70A15 15 0 0 0 250 55L250,55A15 15 0 0 0 235 39L191,39A15 15 0 0 0 176 55L176,55A15 15 0 0 0 191 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">QUERY</text>
+<polygon points="267,55 255,59 255,50" style="fill:rgb(0,0,0)"/>
+<path d="M250,55L261,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M282,70L311,70A15 15 0 0 0 327 55L327,55A15 15 0 0 0 311 39L282,39A15 15 0 0 0 267 55L267,55A15 15 0 0 0 282 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PLAN</text>
+<polygon points="368,17 357,21 357,12" style="fill:rgb(0,0,0)"/>
+<path d="M327,55 L 334,55 Q 342,55 342,40 L 342,32 Q 342,17 352,17 L 362,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="182,17 170,21 170,12" style="fill:rgb(0,0,0)"/>
+<path d="M140,55 L 148,55 Q 155,55 155,40 L 155,32 Q 155,17 166,17 L 176,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,17L357,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M9,17L170,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="410,17 398,21 398,12" style="fill:rgb(0,0,0)"/>
+<path d="M368,17L404,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,32L552,32L552,2L410,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alter-table-stmt</text>
+<polygon points="666,17 654,21 654,12" style="fill:rgb(0,0,0)"/>
+<path d="M552,17L660,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="707,17 696,21 696,12" style="fill:rgb(0,0,0)"/>
+<path d="M666,17L701,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="711" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,70L528,70L528,39L410,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">analyze-stmt</text>
+<polygon points="410,55 398,59 398,50" style="fill:rgb(0,0,0)"/>
+<path d="M383,39 L 383,47 Q 383,55 393,55 L 404,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,55 654,59 654,50" style="fill:rgb(0,0,0)"/>
+<path d="M528,55L660,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,55 L 673,55 Q 681,55 681,47 L 681,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,108L517,108L517,77L410,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">attach-stmt</text>
+<polygon points="410,92 398,97 398,88" style="fill:rgb(0,0,0)"/>
+<path d="M383,77 L 383,85 Q 383,92 393,92 L 404,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,92 654,97 654,88" style="fill:rgb(0,0,0)"/>
+<path d="M517,92L660,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,92 L 673,92 Q 681,92 681,85 L 681,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,145L511,145L511,115L410,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="460" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">begin-stmt</text>
+<polygon points="410,130 398,135 398,126" style="fill:rgb(0,0,0)"/>
+<path d="M383,115 L 383,123 Q 383,130 393,130 L 404,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,130 654,135 654,126" style="fill:rgb(0,0,0)"/>
+<path d="M511,130L660,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,130 L 673,130 Q 681,130 681,123 L 681,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,183L527,183L527,153L410,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">commit-stmt</text>
+<polygon points="410,168 398,172 398,164" style="fill:rgb(0,0,0)"/>
+<path d="M383,153 L 383,160 Q 383,168 393,168 L 404,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,168 654,172 654,164" style="fill:rgb(0,0,0)"/>
+<path d="M527,168L660,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,168 L 673,168 Q 681,168 681,160 L 681,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,221L569,221L569,191L410,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-index-stmt</text>
+<polygon points="410,206 398,210 398,201" style="fill:rgb(0,0,0)"/>
+<path d="M383,191 L 383,198 Q 383,206 393,206 L 404,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,206 654,210 654,201" style="fill:rgb(0,0,0)"/>
+<path d="M569,206L660,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,206 L 673,206 Q 681,206 681,198 L 681,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,259L566,259L566,228L410,228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-table-stmt</text>
+<polygon points="410,244 398,248 398,239" style="fill:rgb(0,0,0)"/>
+<path d="M383,228 L 383,236 Q 383,244 393,244 L 404,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,244 654,248 654,239" style="fill:rgb(0,0,0)"/>
+<path d="M566,244L660,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,244 L 673,244 Q 681,244 681,236 L 681,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,297L582,297L582,266L410,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="496" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-trigger-stmt</text>
+<polygon points="410,281 398,286 398,277" style="fill:rgb(0,0,0)"/>
+<path d="M383,266 L 383,274 Q 383,281 393,281 L 404,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,281 654,286 654,277" style="fill:rgb(0,0,0)"/>
+<path d="M582,281L660,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,281 L 673,281 Q 681,281 681,274 L 681,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,334L561,334L561,304L410,304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-view-stmt</text>
+<polygon points="410,319 398,324 398,315" style="fill:rgb(0,0,0)"/>
+<path d="M383,304 L 383,312 Q 383,319 393,319 L 404,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,319 654,324 654,315" style="fill:rgb(0,0,0)"/>
+<path d="M561,319L660,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,319 L 673,319 Q 681,319 681,312 L 681,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,372L626,372L626,342L410,342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-virtual-table-stmt</text>
+<polygon points="410,357 398,361 398,353" style="fill:rgb(0,0,0)"/>
+<path d="M383,342 L 383,349 Q 383,357 393,357 L 404,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,357 654,361 654,353" style="fill:rgb(0,0,0)"/>
+<path d="M626,357L660,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,357 L 673,357 Q 681,357 681,349 L 681,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,410L516,410L516,380L410,380Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt</text>
+<polygon points="410,395 398,399 398,390" style="fill:rgb(0,0,0)"/>
+<path d="M383,380 L 383,387 Q 383,395 393,395 L 404,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,395 654,399 654,390" style="fill:rgb(0,0,0)"/>
+<path d="M516,395L660,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,395 L 673,395 Q 681,395 681,387 L 681,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,448L581,448L581,417L410,417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt-limited</text>
+<polygon points="410,433 398,437 398,428" style="fill:rgb(0,0,0)"/>
+<path d="M383,417 L 383,425 Q 383,433 393,433 L 404,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,433 654,437 654,428" style="fill:rgb(0,0,0)"/>
+<path d="M581,433L660,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,433 L 673,433 Q 681,433 681,425 L 681,418" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,486L521,486L521,455L410,455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="465" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">detach-stmt</text>
+<polygon points="410,470 398,475 398,466" style="fill:rgb(0,0,0)"/>
+<path d="M383,455 L 383,463 Q 383,470 393,470 L 404,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,470 654,475 654,466" style="fill:rgb(0,0,0)"/>
+<path d="M521,470L660,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,470 L 673,470 Q 681,470 681,463 L 681,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,523L555,523L555,493L410,493Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="508" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-index-stmt</text>
+<polygon points="410,508 398,513 398,504" style="fill:rgb(0,0,0)"/>
+<path d="M383,493 L 383,501 Q 383,508 393,508 L 404,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,508 654,513 654,504" style="fill:rgb(0,0,0)"/>
+<path d="M555,508L660,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,508 L 673,508 Q 681,508 681,501 L 681,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,561L551,561L551,531L410,531Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="480" y="546" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-table-stmt</text>
+<polygon points="410,546 398,550 398,542" style="fill:rgb(0,0,0)"/>
+<path d="M383,531 L 383,538 Q 383,546 393,546 L 404,546" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,546 654,550 654,542" style="fill:rgb(0,0,0)"/>
+<path d="M551,546L660,546" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,546 L 673,546 Q 681,546 681,538 L 681,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,599L568,599L568,569L410,569Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="584" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-trigger-stmt</text>
+<polygon points="410,584 398,588 398,579" style="fill:rgb(0,0,0)"/>
+<path d="M383,569 L 383,576 Q 383,584 393,584 L 404,584" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,584 654,588 654,579" style="fill:rgb(0,0,0)"/>
+<path d="M568,584L660,584" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,584 L 673,584 Q 681,584 681,576 L 681,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,637L547,637L547,606L410,606Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="622" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-view-stmt</text>
+<polygon points="410,622 398,626 398,617" style="fill:rgb(0,0,0)"/>
+<path d="M383,606 L 383,614 Q 383,622 393,622 L 404,622" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,622 654,626 654,617" style="fill:rgb(0,0,0)"/>
+<path d="M547,622L660,622" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,622 L 673,622 Q 681,622 681,614 L 681,607" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,675L513,675L513,644L410,644Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="659" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">insert-stmt</text>
+<polygon points="410,659 398,664 398,655" style="fill:rgb(0,0,0)"/>
+<path d="M383,644 L 383,652 Q 383,659 393,659 L 404,659" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,659 654,664 654,655" style="fill:rgb(0,0,0)"/>
+<path d="M513,659L660,659" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,659 L 673,659 Q 681,659 681,652 L 681,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,712L529,712L529,682L410,682Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="697" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-stmt</text>
+<polygon points="410,697 398,702 398,693" style="fill:rgb(0,0,0)"/>
+<path d="M383,682 L 383,690 Q 383,697 393,697 L 404,697" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,697 654,702 654,693" style="fill:rgb(0,0,0)"/>
+<path d="M529,697L660,697" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,697 L 673,697 Q 681,697 681,690 L 681,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,750L528,750L528,720L410,720Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="735" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">reindex-stmt</text>
+<polygon points="410,735 398,739 398,731" style="fill:rgb(0,0,0)"/>
+<path d="M383,720 L 383,727 Q 383,735 393,735 L 404,735" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,735 654,739 654,731" style="fill:rgb(0,0,0)"/>
+<path d="M528,735L660,735" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,735 L 673,735 Q 681,735 681,727 L 681,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,788L526,788L526,758L410,758Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="773" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">release-stmt</text>
+<polygon points="410,773 398,777 398,768" style="fill:rgb(0,0,0)"/>
+<path d="M383,758 L 383,765 Q 383,773 393,773 L 404,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,773 654,777 654,768" style="fill:rgb(0,0,0)"/>
+<path d="M526,773L660,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,773 L 673,773 Q 681,773 681,765 L 681,758" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,826L533,826L533,795L410,795Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="811" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">rollback-stmt</text>
+<polygon points="410,811 398,815 398,806" style="fill:rgb(0,0,0)"/>
+<path d="M383,795 L 383,803 Q 383,811 393,811 L 404,811" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,811 654,815 654,806" style="fill:rgb(0,0,0)"/>
+<path d="M533,811L660,811" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,811 L 673,811 Q 681,811 681,803 L 681,796" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,864L545,864L545,833L410,833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="848" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-stmt</text>
+<polygon points="410,848 398,853 398,844" style="fill:rgb(0,0,0)"/>
+<path d="M383,833 L 383,841 Q 383,848 393,848 L 404,848" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,848 654,853 654,844" style="fill:rgb(0,0,0)"/>
+<path d="M545,848L660,848" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,848 L 673,848 Q 681,848 681,841 L 681,833" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,901L514,901L514,871L410,871Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="462" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="410,886 398,891 398,882" style="fill:rgb(0,0,0)"/>
+<path d="M383,871 L 383,879 Q 383,886 393,886 L 404,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,886 654,891 654,882" style="fill:rgb(0,0,0)"/>
+<path d="M514,886L660,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,886 L 673,886 Q 681,886 681,879 L 681,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,939L522,939L522,909L410,909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="466" y="924" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt</text>
+<polygon points="410,924 398,928 398,920" style="fill:rgb(0,0,0)"/>
+<path d="M383,909 L 383,916 Q 383,924 393,924 L 404,924" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,924 654,928 654,920" style="fill:rgb(0,0,0)"/>
+<path d="M522,924L660,924" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,924 L 673,924 Q 681,924 681,916 L 681,909" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,977L587,977L587,947L410,947Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="498" y="962" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt-limited</text>
+<polygon points="410,962 398,966 398,957" style="fill:rgb(0,0,0)"/>
+<path d="M383,947 L 383,954 Q 383,962 393,962 L 404,962" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,962 654,966 654,957" style="fill:rgb(0,0,0)"/>
+<path d="M587,962L660,962" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,962 L 673,962 Q 681,962 681,954 L 681,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,1015L529,1015L529,984L410,984Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="1000" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">vacuum-stmt</text>
+<polygon points="410,1000 398,1004 398,995" style="fill:rgb(0,0,0)"/>
+<path d="M368,17 L 376,17 Q 383,17 383,32 L 383,985 Q 383,1000 393,1000 L 404,1000" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,1000 654,1004 654,995" style="fill:rgb(0,0,0)"/>
+<path d="M529,1000L660,1000" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,1000 L 673,1000 Q 681,1000 681,985 L 681,32 Q 681,17 688,17 L 696,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+ </div>
+
+
+<h1 id="description"><span>2. </span>Description</h1>
+
+<p>An SQL statement can be preceded by the keyword "EXPLAIN" or
+by the phrase "EXPLAIN QUERY PLAN". Either modification causes the
+SQL statement to behave as a query and to return information about
+how the SQL statement would have operated if the EXPLAIN keyword or
+phrase had been omitted.</p>
+
+<p>The output from EXPLAIN and EXPLAIN QUERY PLAN is intended for
+interactive analysis and troubleshooting only. The details of the
+output format are subject to change from one release of SQLite to the next.
+Applications should not use EXPLAIN or EXPLAIN QUERY PLAN since
+their exact behavior is variable and only partially documented.</p>
+
+<p>When the EXPLAIN keyword appears by itself it causes the statement
+to behave as a query that returns the sequence of
+<a href="opcode.html">virtual machine instructions</a> it would have used to execute the command had
+the EXPLAIN keyword not been present. When the EXPLAIN QUERY PLAN phrase
+appears, the statement returns high-level information regarding the query
+plan that would have been used.
+
+</p><p>The EXPLAIN QUERY PLAN command is described in
+<a href="eqp.html">more detail here</a>.
+
+</p><h2 id="explain_operates_at_run_time_not_at_prepare_time"><span>2.1. </span>EXPLAIN operates at run-time, not at prepare-time</h2>
+
+<p>The EXPLAIN and EXPLAIN QUERY PLAN prefixes affect the behavior of
+running a <a href="c3ref/stmt.html">prepared statement</a> using <a href="c3ref/step.html">sqlite3_step()</a>. The process of
+generating a new prepared statement using <a href="c3ref/prepare.html">sqlite3_prepare()</a> or similar
+is (mostly) unaffected by EXPLAIN. (The exception to the previous sentence
+is that some special opcodes used by EXPLAIN QUERY PLAN are omitted when
+building an EXPLAIN QUERY PLAN prepared statement, as a performance
+optimization.)
+
+</p><p>This means that actions that occur during sqlite3_prepare() are
+unaffected by EXPLAIN.
+
+</p><ul>
+<li><p>
+Some <a href="pragma.html#syntax">PRAGMA</a> statements do their work during sqlite3_prepare() rather
+than during sqlite3_step(). Those PRAGMA statements are unaffected
+by EXPLAIN. They operate the same with or without the EXPLAIN prefix.
+The set of PRAGMA statements that are unaffected by EXPLAIN can vary
+from one release to the next. Some PRAGMA statements operate during
+sqlite3_prepare() depending on their arguments. For consistent
+results, avoid using EXPLAIN on PRAGMA statements.
+
+</p></li><li><p>
+The <a href="c3ref/set_authorizer.html">authorizer callback</a> is invoked regardless of the presence of
+EXPLAIN or EXPLAIN QUERY PLAN.
+</p></li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_explain.in?m=7122ecf5f68ffd8ff">2020-02-10 20:33:26</a> UTC </small></i></p>
+
diff --git a/www/lang_expr.html b/www/lang_expr.html
new file mode 100644
index 0000000..299192f
--- /dev/null
+++ b/www/lang_expr.html
@@ -0,0 +1,3374 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQL Language Expressions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQL Language Expressions
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#syntax">1. Syntax</a></div>
+<div class="fancy-toc1"><a href="#operators_and_parse_affecting_attributes">2. Operators, and Parse-Affecting Attributes</a></div>
+<div class="fancy-toc1"><a href="#literal_values_constants_">3. Literal Values (Constants)</a></div>
+<div class="fancy-toc1"><a href="#parameters">4. Parameters</a></div>
+<div class="fancy-toc1"><a href="#the_like_glob_regexp_match_and_extract_operators">5. The LIKE, GLOB, REGEXP, MATCH, and extract operators</a></div>
+<div class="fancy-toc1"><a href="#the_between_operator">6. The BETWEEN operator</a></div>
+<div class="fancy-toc1"><a href="#the_case_expression">7. The CASE expression</a></div>
+<div class="fancy-toc1"><a href="#the_in_and_not_in_operators">8. The IN and NOT IN operators</a></div>
+<div class="fancy-toc1"><a href="#table_column_names">9. Table Column Names</a></div>
+<div class="fancy-toc1"><a href="#the_exists_operator">10. The EXISTS operator</a></div>
+<div class="fancy-toc1"><a href="#subquery_expressions">11. Subquery Expressions</a></div>
+<div class="fancy-toc1"><a href="#correlated_subqueries">12. Correlated Subqueries</a></div>
+<div class="fancy-toc1"><a href="#cast_expressions">13. CAST expressions</a></div>
+<div class="fancy-toc1"><a href="#boolean_expressions">14. Boolean Expressions</a></div>
+<div class="fancy-toc1"><a href="#functions">15. Functions</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="syntax"><span>1. </span>Syntax</h1>
+
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1719' onclick='hideorshow("x1719","x1720")'>hide</button></p>
+ <div id='x1720' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1721' onclick='hideorshow("x1721","x1722")'>show</button></p>
+ <div id='x1722' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1723' onclick='hideorshow("x1723","x1724")'>show</button></p>
+ <div id='x1724' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1725' onclick='hideorshow("x1725","x1726")'>show</button></p>
+ <div id='x1726' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1727' onclick='hideorshow("x1727","x1728")'>show</button></p>
+ <div id='x1728' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1729' onclick='hideorshow("x1729","x1730")'>show</button></p>
+ <div id='x1730' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1731' onclick='hideorshow("x1731","x1732")'>show</button></p>
+ <div id='x1732' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1733' onclick='hideorshow("x1733","x1734")'>show</button></p>
+ <div id='x1734' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1735' onclick='hideorshow("x1735","x1736")'>show</button></p>
+ <div id='x1736' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1737' onclick='hideorshow("x1737","x1738")'>show</button></p>
+ <div id='x1738' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1739' onclick='hideorshow("x1739","x1740")'>show</button></p>
+ <div id='x1740' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1741' onclick='hideorshow("x1741","x1742")'>show</button></p>
+ <div id='x1742' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1743' onclick='hideorshow("x1743","x1744")'>show</button></p>
+ <div id='x1744' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1745' onclick='hideorshow("x1745","x1746")'>show</button></p>
+ <div id='x1746' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1747' onclick='hideorshow("x1747","x1748")'>show</button></p>
+ <div id='x1748' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1749' onclick='hideorshow("x1749","x1750")'>show</button></p>
+ <div id='x1750' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1751' onclick='hideorshow("x1751","x1752")'>show</button></p>
+ <div id='x1752' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1753' onclick='hideorshow("x1753","x1754")'>show</button></p>
+ <div id='x1754' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1755' onclick='hideorshow("x1755","x1756")'>show</button></p>
+ <div id='x1756' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1757' onclick='hideorshow("x1757","x1758")'>show</button></p>
+ <div id='x1758' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+
+
+<a name="binaryops"></a>
+
+<h1 id="operators_and_parse_affecting_attributes"><span>2. </span>Operators, and Parse-Affecting Attributes</h1>
+<p>SQLite understands these operators, listed in precedence<sup>1</sup> order<br>
+(top to bottom / highest to lowest):
+</p><p></p>
+
+ <style>
+ td.optab { color: #2c2cf0; border: 2px solid black; padding: 4px; }
+ th.optab { text-align: center; border: 2px solid black; padding: 4px; }
+ table.optab { border-collapse: collapse; margin-left: 50px }
+ small.optab { color: #101010; }
+ </style>
+
+
+<table class="optab" width="50%" border="1" border-collapse="collapse" line-height="1.2">
+ <tr align="center">
+ <th class="optab" text-align="center"><b>Operators&nbsp;<sup>2</sup></b></th>
+ </tr>
+ <tr align="center">
+ <td class="optab">~&nbsp;<small class="optab">&lsqb;expr&rsqb;</small>&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;<small class="optab">&lsqb;expr&rsqb;</small>&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;<small class="optab">&lsqb;expr&rsqb;</small></td>
+ </tr>
+ <tr align="center">
+ <td class="optab"><small class="optab">&lsqb;expr&rsqb;</small>&nbsp;COLLATE&nbsp;&lpar;collation-name&rpar;&nbsp;<sup>3</sup></td>
+ </tr>
+ <tr align="center">
+ <td class="optab">||&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&nbsp;&nbsp;-&gt;&gt;</td>
+ </tr>
+ <tr align="center">
+ <td class="optab">*&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;%</td>
+ </tr>
+ <tr align="center">
+ <td class="optab">+&nbsp;&nbsp;&nbsp;-</td>
+ </tr>
+ <tr align="center">
+ <td class="optab">&amp;&ensp;&nbsp;|&nbsp;&nbsp;&nbsp;&lt;&lt;&ensp;&nbsp;&gt;&gt;</td>
+ </tr>
+ <tr align="center">
+ <td class="optab"><small class="optab">&lsqb;expr&rsqb;</small>&nbsp;ESCAPE&nbsp;&lsqb;escape-character-expr&rsqb;&nbsp;<sup>4</sup></td>
+ </tr>
+ <tr align="center">
+ <td class="optab">&lt;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&lt;=&nbsp;&nbsp;&gt;=</td>
+ </tr>
+ <tr align="center">
+ <td class="optab">=&nbsp;&nbsp;==&nbsp;&nbsp;&lt;&gt;&nbsp;&nbsp;!=&nbsp;&nbsp;IS&nbsp;&nbsp;&nbsp;IS&nbsp;NOT<br>
+ IS&nbsp;DISTINCT&nbsp;FROM&nbsp;&nbsp;&nbsp;IS&nbsp;NOT&nbsp;DISTINCT&nbsp;FROM<br>
+ <small class="optab">&lsqb;expr&rsqb;</small>&nbsp;BETWEEN<sup>5</sup>&nbsp;<small class="optab">&lsqb;expr&rsqb;</small>&nbsp;AND&nbsp;<small class="optab">&lsqb;expr&rsqb;</small><sup>&ensp;</sup><br>
+ IN<sup>5</sup>&nbsp;&nbsp;MATCH<sup>5</sup>&nbsp;&nbsp;LIKE<sup>5</sup>&nbsp;&nbsp;REGEXP<sup>5</sup>&nbsp;&nbsp;GLOB<sup>5</sup><br>
+ <small class="optab">&lsqb;expr&rsqb;</small>&nbsp;ISNULL&nbsp;&nbsp;<small class="optab">&lsqb;expr&rsqb;</small>&nbsp;NOTNULL&nbsp;&nbsp;&nbsp;<small class="optab">&lsqb;expr&rsqb;</small>&nbsp;NOT&nbsp;NULL
+ </td>
+ </tr>
+ <tr align="center">
+ <td class="optab">NOT&nbsp;<small class="optab">&lsqb;expr&rsqb;</small></td>
+ </tr>
+ <tr align="center">
+ <td class="optab">AND</td>
+ </tr>
+ <tr align="center">
+ <td class="optab">OR</td>
+ </tr>
+</table>
+<p>
+</p><ol>
+<li> Operators shown within the same table cell share precedence.<br>
+</li><li> "<small>&lsqb;expr&rsqb;</small>" denotes operand locations for non-binary operators.<br>
+ &nbsp;&nbsp;Operators with no "&lsqb;expr&rsqb;" adjunct are binary and left-associative. <br>
+</li><li> The COLLATE clause (with its collation-name) acts as a single postfix operator.<br>
+</li><li> The ESCAPE clause (with its escape character) acts as a single postfix operator.<br>
+ &nbsp;&nbsp;It can only bind to a preceding &lsqb;expr&rsqb; LIKE &lsqb;expr&rsqb; expression.<br>
+</li><li> Each keyword in (BETWEEN IN GLOB LIKE MATCH REGEXP) may be prefixed<br>
+ &nbsp;&nbsp;by NOT, retaining the bare operator's precedence and associativity.
+</li></ol>
+
+
+<a name="collateop"></a>
+
+<p>The COLLATE operator is a unary postfix
+operator that assigns a <a href="datatype3.html#collation">collating sequence</a> to an expression.
+The collating sequence set by the COLLATE operator overrides the
+collating sequence determined by the COLLATE clause in a table
+<a href="lang_createtable.html#tablecoldef">column definition</a>.
+See the <a href="datatype3.html#collation">detailed discussion on collating sequences</a>
+in the <a href="datatype3.html">Datatype In SQLite3</a> document for additional information.
+</p>
+
+
+<p>The unary operator <font color="#2c2cf0"><big>+</big></font> is a no-op. It can be applied
+to strings, numbers, blobs or NULL and it always returns a result
+with the same value as the operand.</p>
+
+<p>Note that there are two variations of the equals and not equals
+operators. Equals can be either
+
+<font color="#2c2cf0"><big>=</big></font> or <font color="#2c2cf0"><big>==</big></font>.
+The non-equals operator can be either
+<font color="#2c2cf0"><big>!=</big></font> or <font color="#2c2cf0"><big>&lt;&gt;</big></font>.
+The <font color="#2c2cf0"><big>||</big></font> operator is "concatenate" - it joins together
+the two strings of its operands.
+The <font color="#2c2cf0"><big>-&gt;</big></font> and <font color="#2c2cf0"><big>-&gt;&gt;</big></font> operators are "extract";
+they extract the RHS component from the LHS.
+For an example, see
+ <a href="json1.html#jptr">JSON subcomponent extraction</a>.</p>
+
+<p>
+The <font color="#2c2cf0"><big>%</big></font> operator <a href="lang_expr.html#castexpr">casts</a> both of its operands to type
+INTEGER and then computes the remainder after dividing the left integer
+by the right integer. The other arithmetic operators perform integer
+arithmetic if both operands are integers and no overflow would result,
+or floating point arithmetic, per IEEE Standard 754, if either operand
+is a real value or integer arithmetic would produce an overflow.
+Integer divide yields an integer result, truncated toward zero.
+</p>
+
+<p>The result of any binary operator is either a numeric value or
+NULL, except for the <font color="#2c2cf0"><big>||</big></font> concatenation operator,
+and the <font color="#2c2cf0"><big>-&gt;</big></font> and <font color="#2c2cf0"><big>-&gt;&gt;</big></font> extract operators
+which evaluate to either NULL or a text value.</p>
+
+<p>All operators generally evaluate to NULL when any operand is NULL,
+with specific exceptions as stated below. This is in accordance with
+the SQL92 standard.</p>
+
+<p> When paired with NULL:<br>
+&nbsp;&nbsp;<font color="#2c2cf0"><big>AND</big></font> evaluates to 0 (false) when
+the other operand is false; and<br>
+&nbsp;&nbsp;<font color="#2c2cf0"><big>OR</big></font> evaluates to 1 (true)
+when the other operand is true.
+</p>
+
+
+<a name="isisnot"></a>
+
+
+<p>The <font color="#2c2cf0"><big>IS</big></font> and <font color="#2c2cf0"><big>IS NOT</big></font> operators work
+like <font color="#2c2cf0"><big>=</big></font> and <font color="#2c2cf0"><big>!=</big></font> except when one or both of the
+operands are NULL. In this case, if both operands are NULL, then the
+IS operator evaluates to 1 (true) and the IS NOT operator evaluates
+to 0 (false). If one operand is NULL and the other is not, then the
+IS operator evaluates to 0 (false) and the IS NOT operator is 1 (true).
+It is not possible for an IS or IS NOT expression to evaluate to NULL.
+
+<a name="isdf"></a>
+
+
+<p>
+The <font color="#2c2cf0"><big>IS NOT DISTINCT FROM</big></font> operator is an alternative spelling
+for the <font color="#2c2cf0"><big>IS</big></font> operator.
+Likewise, the <font color="#2c2cf0"><big>IS DISTINCT FROM</big></font> operator means the same thing
+as <font color="#2c2cf0"><big>IS NOT</big></font>. Standard SQL does not support the compact IS and IS NOT
+notation. Those compact forms are an SQLite extension. You have to use
+the prolix and much less readable IS NOT DISTINCT FROM and
+IS DISTINCT FROM operators on other SQL database engines.
+
+<a name="litvalue"></a>
+
+</p><h1 id="literal_values_constants_"><span>3. </span>Literal Values (Constants)</h1>
+<p>
+A literal value represents a constant.
+Literal values may be integers, floating point numbers, strings,
+BLOBs, or NULLs.
+</p><p>
+The syntax for integer and floating point literals (collectively
+"numeric literals") is shown by the following diagram:</p>
+
+<p><b><a href="syntax/numeric-literal.html">numeric-literal:</a></b></p><div class='imgcontainer'>
+ <div style="max-width:765px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 765.562 214.056">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,36 51,41 51,32" style="fill:rgb(0,0,0)"/>
+<path d="M9,36L57,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,51L98,51A15 15 0 0 0 113 36A15 15 0 0 0 98 21L78,21A15 15 0 0 0 63 36A15 15 0 0 0 78 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="88" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="88,6 99,2 99,10" style="fill:rgb(0,0,0)"/>
+<path d="M113,36 L 121,36 Q 128,36 128,21 L 128,21 Q 128,6 113,6 L 109,6 L 94,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M88,6 L 51,6 Q 36,6 36,21 L 36,21 Q 36,36 44,36 L 51,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="176,66 164,71 164,62" style="fill:rgb(0,0,0)"/>
+<path d="M113,36 L 134,36 Q 149,36 149,51 L 149,51 Q 149,66 159,66 L 170,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,82A15 15 0 0 0 206 66L206,66A15 15 0 0 0 191 51A15 15 0 0 0 176 66L176,66A15 15 0 0 0 191 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="267,66 255,71 255,62" style="fill:rgb(0,0,0)"/>
+<path d="M206,66L261,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,66 328,71 328,62" style="fill:rgb(0,0,0)"/>
+<path d="M267,66L334,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,36 370,41 370,32" style="fill:rgb(0,0,0)"/>
+<path d="M340,66 L 347,66 Q 355,66 355,51 L 355,51 Q 355,36 365,36 L 375,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,74 411,78 411,70" style="fill:rgb(0,0,0)"/>
+<path d="M381,36 L 389,36 Q 396,36 396,51 L 396,59 Q 396,74 406,74 L 417,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,89A15 15 0 0 0 453 74L453,74A15 15 0 0 0 438 59A15 15 0 0 0 423 74L423,74A15 15 0 0 0 438 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">E</text>
+<polygon points="494,74 483,78 483,70" style="fill:rgb(0,0,0)"/>
+<path d="M453,74L489,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,112 411,116 411,108" style="fill:rgb(0,0,0)"/>
+<path d="M381,36 L 389,36 Q 396,36 396,51 L 396,97 Q 396,112 406,112 L 417,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,127A15 15 0 0 0 453 112A15 15 0 0 0 438 97A15 15 0 0 0 423 112A15 15 0 0 0 438 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="112" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">e</text>
+<path d="M453,112 L 460,112 Q 468,112 468,97 L 468,89 Q 468,74 475,74 L 483,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,112L277,112A15 15 0 0 0 292 97L292,97A15 15 0 0 0 277 82L257,82A15 15 0 0 0 242 97L242,97A15 15 0 0 0 257 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="97" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="292,97 304,92 304,101" style="fill:rgb(0,0,0)"/>
+<path d="M267,66 L 304,66 Q 319,66 319,81 L 319,82 Q 319,97 308,97 L 298,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M242,97 L 234,97 Q 227,97 227,82 L 227,81 Q 227,66 234,66 L 242,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M113,36L261,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,36L370,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,135 39,139 39,130" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,120 Q 24,135 34,135 L 45,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150A15 15 0 0 0 81 135A15 15 0 0 0 66 119A15 15 0 0 0 50 135A15 15 0 0 0 66 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="135" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="117,135 105,139 105,130" style="fill:rgb(0,0,0)"/>
+<path d="M81,135L111,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,150L152,150A15 15 0 0 0 167 135A15 15 0 0 0 152 119L132,119A15 15 0 0 0 117 135A15 15 0 0 0 132 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="142" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="340,135 328,139 328,130" style="fill:rgb(0,0,0)"/>
+<path d="M167,135L334,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,135 L 347,135 Q 355,135 355,120 L 355,66 L 355,51" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="142,104 153,100 153,109" style="fill:rgb(0,0,0)"/>
+<path d="M167,135 L 174,135 Q 182,135 182,120 L 182,119 Q 182,104 167,104 L 162,104 L 147,104" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,104 L 105,104 Q 90,104 90,119 L 90,120 Q 90,135 98,135 L 105,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="536,142 524,146 524,138" style="fill:rgb(0,0,0)"/>
+<path d="M494,74 L 502,74 Q 509,74 509,89 L 509,127 Q 509,142 520,142 L 530,142" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,157A15 15 0 0 0 566 142A15 15 0 0 0 551 127A15 15 0 0 0 536 142A15 15 0 0 0 551 157Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="551" y="142" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<polygon points="628,74 616,78 616,70" style="fill:rgb(0,0,0)"/>
+<path d="M566,142 L 574,142 Q 581,142 581,127 L 581,89 Q 581,74 596,74 L 607,74 L 622,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M643,89L663,89A15 15 0 0 0 678 74L678,74A15 15 0 0 0 663 59L643,59A15 15 0 0 0 628 74L628,74A15 15 0 0 0 643 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="653" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="714,74 703,78 703,70" style="fill:rgb(0,0,0)"/>
+<path d="M678,74L708,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="756,36 744,41 744,32" style="fill:rgb(0,0,0)"/>
+<path d="M714,74 L 722,74 Q 729,74 729,59 L 729,51 Q 729,36 740,36 L 750,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="759" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="536,104 524,109 524,100" style="fill:rgb(0,0,0)"/>
+<path d="M494,74 L 502,74 Q 509,74 509,89 L 509,89 Q 509,104 520,104 L 530,104" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,119A15 15 0 0 0 566 104A15 15 0 0 0 551 89A15 15 0 0 0 536 104A15 15 0 0 0 551 119Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="551" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<path d="M566,104 L 574,104 Q 581,104 581,97 L 581,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="551,36 540,41 540,32" style="fill:rgb(0,0,0)"/>
+<path d="M381,36L545,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,36L744,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="551,74 540,78 540,70" style="fill:rgb(0,0,0)"/>
+<path d="M494,74L545,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,74L616,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="653,50 665,46 665,54" style="fill:rgb(0,0,0)"/>
+<path d="M678,74 L 686,74 Q 693,74 693,62 Q 693,50 678,50 L 674,50 L 659,50" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M653,50 L 616,50 Q 601,50 601,62 Q 601,74 609,74 L 616,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,180 39,184 39,176" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,165 Q 24,180 34,180 L 45,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,195L69,195A15 15 0 0 0 84 180A15 15 0 0 0 69 165L66,165A15 15 0 0 0 50 180A15 15 0 0 0 66 195Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="67" y="180" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">0x</text>
+<polygon points="120,180 108,184 108,176" style="fill:rgb(0,0,0)"/>
+<path d="M84,180L114,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,195L185,195A15 15 0 0 0 200 180A15 15 0 0 0 185 165L135,165A15 15 0 0 0 120 180A15 15 0 0 0 135 195Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="160" y="180" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">hexdigit</text>
+<polygon points="714,180 703,184 703,176" style="fill:rgb(0,0,0)"/>
+<path d="M200,180L708,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M714,180 L 722,180 Q 729,180 729,165 L 729,74 L 729,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="160,207 171,203 171,211" style="fill:rgb(0,0,0)"/>
+<path d="M200,180 L 207,180 Q 215,180 215,193 Q 215,207 200,207 L 180,207 L 165,207" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M160,207 L 108,207 Q 93,207 93,193 Q 93,180 101,180 L 108,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+ </div>
+
+
+<p>
+If a numeric literal has a decimal point or an exponentiation
+clause or if it is less than -9223372036854775808 or
+greater than 9223372036854775807, then it is a floating point literal.
+Otherwise is it is an integer literal.
+The "E" character that begins the exponentiation
+clause of a floating point literal can be either upper or lower case.
+The "." character is always used
+as the decimal point even if the locale setting specifies "," for
+this role - the use of "," for the decimal point would result in
+syntactic ambiguity.
+
+<a name="hexint"></a>
+
+</p><p>Hexadecimal integer literals follow the C-language notation of
+"0x" or "0X" followed by hexadecimal digits.
+For example, 0x1234 means the same as 4660
+and 0x8000000000000000 means the same as -9223372036854775808.
+ Hexadecimal integer literals are interpreted as 64-bit
+two's-complement integers and are thus limited
+to sixteen significant digits of precision.
+Support for hexadecimal integers was added to SQLite
+version 3.8.6 (2014-08-15).
+For backwards compatibility, the "0x" hexadecimal integer
+notation is only understood by the SQL language parser, not by the
+type conversions routines.
+String variables that
+contain text formatted like hexadecimal integers are not
+interpreted as hexadecimal integers when coercing the string value
+into an integer due to a <a href="lang_expr.html#castexpr">CAST expression</a> or for a <a href="datatype3.html#affinity">column affinity</a>
+transformation or prior to performing a numeric operation or for
+any other run-time conversions. When coercing a
+string value in the format of a hexadecimal integer into an integer
+value, the conversion process stops when the 'x' character is seen
+so the resulting integer value is always zero.
+SQLite only understands the hexadecimal integer notation when it
+appears in the SQL statement text, not when it appears as
+part of the content of the database.
+
+</p><p> A string constant is formed by enclosing the
+string in single quotes ('). A single quote within the string can
+be encoded by putting two single quotes in a row - as in Pascal.
+C-style escapes using the backslash character are not supported because
+they are not standard SQL.
+
+</p><p> BLOB literals are string literals containing hexadecimal data and
+preceded by a single "x" or "X" character. Example: X'53514C697465'
+
+</p><p>
+A literal value can also be the token "NULL".
+</p>
+
+<a name="varparam"></a>
+
+<h1 id="parameters"><span>4. </span>Parameters</h1>
+<p>
+A "variable" or "parameter" token
+specifies a placeholder in the expression for a
+value that is filled in at runtime using the
+<a href="c3ref/bind_blob.html">sqlite3_bind()</a> family of C/C++ interfaces.
+Parameters can take several forms:
+</p>
+
+<blockquote>
+<table>
+<tr>
+<td align="right" valign="top"><b>?</b><i>NNN</i></td><td width="20"></td>
+<td>A question mark followed by a number <i>NNN</i> holds a spot for the
+NNN-th parameter. NNN must be between 1 and <a href="limits.html#max_variable_number">SQLITE_MAX_VARIABLE_NUMBER</a>.
+</td>
+</tr>
+<tr>
+<td align="right" valign="top"><b>?</b></td><td width="20"></td>
+<td>A question mark that is not followed by a number creates a parameter
+with a number one greater than the largest parameter number already assigned.
+If this means the parameter number is greater than
+<a href="limits.html#max_variable_number">SQLITE_MAX_VARIABLE_NUMBER</a>, it is an error.
+This parameter format is provided for compatibility with other database
+engines. But because it is easy to miscount the question marks, the
+use of this parameter format is discouraged. Programmers are encouraged
+to use one of the symbolic formats below or the ?NNN format above instead.
+</td>
+</tr>
+<tr>
+<td align="right" valign="top"><b>:</b><i>AAAA</i></td><td width="20"></td>
+<td>A colon followed by an identifier name holds a spot for a
+<a href="c3ref/bind_parameter_name.html">named parameter</a> with the name :AAAA.
+Named parameters are also numbered. The number assigned is one greater than
+the largest parameter number already assigned. If this means the parameter
+would be assigned a number greater than <a href="limits.html#max_variable_number">SQLITE_MAX_VARIABLE_NUMBER</a>, it is
+an error. To avoid confusion, it is best to avoid mixing named and numbered
+parameters.</td>
+</tr>
+<tr>
+<td align="right" valign="top"><b>@</b><i>AAAA</i></td><td width="20"></td>
+<td>An "at" sign works exactly like a colon, except that the name of
+the parameter created is @AAAA.</td>
+</tr>
+<tr>
+<td align="right" valign="top"><b>$</b><i>AAAA</i></td><td width="20"></td>
+<td>A dollar-sign followed by an identifier name also holds a spot for a named
+parameter with the name $AAAA. The identifier name in this case can include
+one or more occurrences of "::" and a suffix enclosed in "(...)" containing
+any text at all. This syntax is the form of a variable name in the
+<a href="http://www.tcl-lang.org/">Tcl programming language</a>. The presence
+of this syntax results from the fact that SQLite is really a
+<a href="tclsqlite.html">Tcl extension</a> that has escaped into the wild.</td>
+</tr>
+</table>
+</blockquote>
+
+<p>Parameters that are not assigned values using
+<a href="c3ref/bind_blob.html">sqlite3_bind()</a> are treated
+as NULL. The <a href="c3ref/bind_parameter_index.html">sqlite3_bind_parameter_index()</a> interface can be used
+to translate a symbolic parameter name into its equivalent numeric index.</p>
+
+<p>The maximum parameter number is set at compile-time by
+the <a href="limits.html#max_variable_number">SQLITE_MAX_VARIABLE_NUMBER</a> macro. An individual <a href="c3ref/sqlite3.html">database connection</a>
+D can reduce its maximum parameter number below the compile-time maximum
+using the <a href="c3ref/limit.html">sqlite3_limit</a>(D, <a href="c3ref/c_limit_attached.html#sqlitelimitvariablenumber">SQLITE_LIMIT_VARIABLE_NUMBER</a>,...) interface.
+</p>
+
+<a name="like"></a>
+
+<h1 id="the_like_glob_regexp_match_and_extract_operators"><span>5. </span>The LIKE, GLOB, REGEXP, MATCH, and extract operators</h1>
+<p>The LIKE operator does a pattern matching comparison. The operand
+to the right of the LIKE operator contains the pattern and the left hand
+operand contains the string to match against the pattern.
+
+A percent symbol ("%") in the LIKE pattern matches any
+sequence of zero or more characters in the string. An underscore
+("_") in the LIKE pattern matches any single character in the
+string. Any other character matches itself or its lower/upper case
+equivalent (i.e. case-insensitive matching).
+
+<u>Important Note:</u> SQLite only
+understands upper/lower case for ASCII characters by default. The
+LIKE operator is case sensitive by default for unicode characters that are
+beyond the ASCII range. For example,
+the expression <b>'a'&nbsp;LIKE&nbsp;'A'</b>
+is TRUE but <b>'&aelig;'&nbsp;LIKE&nbsp;'&AElig;'</b> is FALSE.
+The ICU extension to SQLite includes an enhanced version of the
+LIKE operator that does case folding across all unicode characters.</p>
+
+<p>If the optional ESCAPE clause is present, then the expression
+following the ESCAPE keyword must evaluate to a string consisting of
+a single character. This character may be used in the LIKE pattern
+to include literal percent or underscore characters. The escape
+character followed by a percent symbol (%), underscore (_), or a second
+instance of the escape character itself matches a
+literal percent symbol, underscore, or a single escape character,
+respectively.
+
+</p><p>The infix LIKE operator is implemented by calling the
+application-defined SQL functions <a href="lang_corefunc.html#like">like(<i>Y</i>,<i>X</i>)</a> or
+<a href="lang_corefunc.html#like">like(<i>Y</i>,<i>X</i>,<i>Z</i>)</a>.</p>
+
+<p>The LIKE operator can be made case sensitive using the
+<a href="pragma.html#pragma_case_sensitive_like">case_sensitive_like pragma</a>.</p>
+
+<a name="glob"></a>
+
+<p>The GLOB operator is similar to LIKE but uses the Unix
+file globbing syntax for its wildcards. Also, GLOB is case
+sensitive, unlike LIKE. Both GLOB and LIKE may be preceded by
+the NOT keyword to invert the sense of the test. The infix GLOB
+operator is implemented by calling the function
+<a href="lang_corefunc.html#glob">glob(<i>Y</i>,<i>X</i>)</a> and can be modified by overriding
+that function.</p>
+
+<a name="regexp"></a>
+
+<p>The REGEXP operator is a special syntax for the regexp()
+user function. No regexp() user function is defined by default
+and so use of the REGEXP operator will normally result in an
+error message. If an <a href="appfunc.html">application-defined SQL function</a> named "regexp"
+is added at run-time, then the "<i>X</i> REGEXP <i>Y</i>" operator will
+be implemented as a call to "regexp(<i>Y</i>,<i>X</i>)".</p>
+
+<a name="match"></a>
+
+<p>The MATCH operator is a special syntax for the match()
+application-defined function. The default match() function implementation
+raises an exception and is not really useful for anything.
+But extensions can override the match() function with more
+helpful logic.</p>
+
+<a name="extract"></a>
+
+<p>The extract operators act as a special syntax for functions
+"-&gt;"() and "-&gt;&gt;"(). Default implementations for these functions
+perform <a href="\"json1.html#jptr\"">JSON subcomponent extraction</a>,
+but extensions can override them for other purposes.</p>
+
+<a name="between"></a>
+
+<h1 id="the_between_operator"><span>6. </span>The BETWEEN operator</h1>
+<p>The BETWEEN operator is logically equivalent to a pair of comparisons.
+"<i>x</i> <b>BETWEEN</b> <i>y</i> <b>AND</b> <i>z</i>" is
+equivalent to
+"<i>x</i><b>&gt;=</b><i>y</i> <b>AND</b> <i>x</i><b>&lt;=</b><i>z</i>" except
+that with BETWEEN, the <i>x</i> expression is only evaluated once.
+
+<a name="case"></a>
+
+</p><h1 id="the_case_expression"><span>7. </span>The CASE expression</h1>
+<p>A CASE expression serves a role similar to IF-THEN-ELSE in other
+programming languages.
+
+</p><p>The optional expression that occurs in between the CASE keyword and the
+first WHEN keyword is called the "base" expression. There are two
+fundamental forms
+of the CASE expression: those with a base expression and those without.
+
+</p><p>In a CASE without a base expression, each WHEN expression is evaluated
+and the result treated as a boolean, starting with the leftmost and continuing
+to the right. The result of the CASE expression is the evaluation of the THEN
+expression that corresponds to the first WHEN expression that evaluates to
+true. Or, if none of the WHEN expressions evaluate to true, the result of
+evaluating the ELSE expression, if any. If there is no ELSE expression and
+none of the WHEN expressions are true, then the overall result is NULL.
+
+</p><p>A NULL result is considered untrue when evaluating WHEN terms.
+
+</p><p>In a CASE with a base expression, the base expression is evaluated just
+once and the result is compared against the evaluation of each WHEN
+expression from left to right. The result of the CASE expression is the
+evaluation of the THEN expression that corresponds to the first WHEN
+expression for which the comparison is true. Or, if none of the WHEN
+expressions evaluate to a value equal to the base expression, the result
+of evaluating the ELSE expression, if any. If there is no ELSE expression and
+none of the WHEN expressions produce a result equal to the base expression,
+the overall result is NULL.
+
+</p><p>When comparing a base expression against a WHEN expression, the same
+collating sequence, affinity, and NULL-handling rules apply as if the
+base expression and WHEN expression are respectively the left- and
+right-hand operands of an <big><b>=</b></big> operator.</p>
+
+<p>If the base
+expression is NULL then the result of the CASE is always the result
+of evaluating the ELSE expression if it exists, or NULL if it does not.
+
+</p><p>Both forms of the CASE expression use lazy, or short-circuit,
+evaluation.
+
+</p><p>The only difference between the following two CASE expressions is that
+the <i>x</i> expression is evaluated exactly once in the first example but
+might be evaluated multiple times in the second:
+
+</p><ul><pre>
+<li>CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END
+</li><li>CASE WHEN x=w1 THEN r1 WHEN x=w2 THEN r2 ELSE r3 END
+</li></pre></ul>
+
+<p>The built-in <a href="lang_corefunc.html#iif">iif(x,y,z) SQL function</a> is logically
+equivalent to "CASE WHEN x THEN y ELSE z END". The iif() function
+is found in SQL Server and is included in SQLite for compatibility.
+Some developers prefer the iif() function because it is more
+concise.
+
+
+<a name="in_op"></a>
+
+</p><h1 id="the_in_and_not_in_operators"><span>8. </span>The IN and NOT IN operators</h1>
+<p>The IN and NOT IN operators take an expression on the
+left and a list of values or a subquery on the right.
+When the right operand of an IN or NOT IN operator is a subquery, the
+subquery must have the same number of columns as there are columns in
+the <a href="rowvalue.html">row value</a> of the left operand. The subquery on the
+right of an IN or NOT IN operator must be a scalar subquery if the left
+expression is not a <a href="rowvalue.html">row value</a> expression.
+If the right operand of an IN or NOT IN operator is a list of values,
+each of those values must be scalars and the left expression must also
+be a scalar.
+The right-hand side of an IN or NOT IN operator can be a
+table <i>name</i> or <a href="vtab.html#tabfunc2">table-valued function</a> <i>name</i> in which
+case the right-hand side is understood to be subquery of
+the form "(SELECT * FROM <i>name</i>)".
+When the right operand is an empty set, the result of IN is false and the
+result of NOT IN is true, regardless of the left operand and even if the
+left operand is NULL.
+</p><p>The result of an IN or NOT IN operator is determined by the following
+matrix:
+
+</p><blockquote>
+<table border="1">
+<tr>
+<th>Left operand <br>is NULL
+</th><th>Right operand <br>contains NULL
+</th><th>Right operand <br>is an empty set
+</th><th>Left operand found <br>within right operand
+</th><th>Result of <br>IN operator
+</th><th>Result of <br>NOT IN operator
+</th></tr><tr>
+<td align="center">no
+</td><td align="center">no
+</td><td align="center">no
+</td><td align="center">no
+</td><td align="center">false
+</td><td align="center">true
+</td></tr><tr>
+<td align="center">does not matter
+</td><td align="center">no
+</td><td align="center">yes
+</td><td align="center">no
+</td><td align="center">false
+</td><td align="center">true
+</td></tr><tr>
+<td align="center">no
+</td><td align="center">does not matter
+</td><td align="center">no
+</td><td align="center">yes
+</td><td align="center">true
+</td><td align="center">false
+</td></tr><tr>
+<td align="center">no
+</td><td align="center">yes
+</td><td align="center">no
+</td><td align="center">no
+</td><td align="center">NULL
+</td><td align="center">NULL
+</td></tr><tr>
+<td align="center">yes
+</td><td align="center">does not matter
+</td><td align="center">no
+</td><td align="center">does not matter
+</td><td align="center">NULL
+</td><td align="center">NULL
+</td></tr></table>
+</blockquote>
+
+<p>Note that SQLite allows the parenthesized list of scalar values on
+the right-hand side of an IN or NOT IN operator to be an empty list but
+most other SQL database engines and the SQL92 standard require
+the list to contain at least one element.</p>
+
+<h1 id="table_column_names"><span>9. </span>Table Column Names</h1>
+
+<p>A column name can be any of the names defined in the <a href="lang_createtable.html">CREATE TABLE</a>
+statement or one of the following special identifiers: "<b>ROWID</b>",
+"<b>OID</b>", or "<b>_ROWID_</b>".
+The three special identifiers describe the
+unique integer key (the <a href="lang_createtable.html#rowid">rowid</a>) associated with every
+row of every table and so are not available on <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+The special identifiers only refer to the row key if the <a href="lang_createtable.html">CREATE TABLE</a>
+statement does not define a real column with the same name.
+The rowid can be used anywhere a regular
+column can be used.</p>
+
+<a name="exists_op"></a>
+
+<h1 id="the_exists_operator"><span>10. </span>The EXISTS operator</h1>
+
+<p>The EXISTS operator always evaluates to one of the integer values 0
+and 1. If executing the SELECT statement specified as the right-hand
+operand of the EXISTS operator would return one or more rows, then the
+EXISTS operator evaluates to 1. If executing the SELECT would return
+no rows at all, then the EXISTS operator evaluates to 0.
+
+</p><p>The number of columns in each row returned by the SELECT statement
+(if any) and the specific values returned have no effect on the results
+of the EXISTS operator. In particular, rows containing NULL values are
+not handled any differently from rows without NULL values.
+
+<a name="subq"></a>
+
+</p><h1 id="subquery_expressions"><span>11. </span>Subquery Expressions</h1>
+
+<p>A <a href="lang_select.html">SELECT</a> statement enclosed in parentheses is a subquery.
+All types of SELECT statement, including
+aggregate and compound SELECT queries (queries with keywords like
+UNION or EXCEPT) are allowed as scalar subqueries.
+The value of a subquery expression is the first row of the result
+from the enclosed <a href="lang_select.html">SELECT</a> statement.
+The value of a subquery expression is NULL if the enclosed
+<a href="lang_select.html">SELECT</a> statement returns no rows.
+
+</p><p>A subquery that returns a single column is a scalar subquery and can
+be used most anywhere.
+A subquery that returns two or more columns is a <a href="rowvalue.html">row value</a>
+subquery and can only be used as the operand of a comparison operator.
+
+<a name="cosub"></a>
+
+</p><h1 id="correlated_subqueries"><span>12. </span>Correlated Subqueries</h1>
+
+<p>A <a href="lang_select.html">SELECT</a> statement used as either a scalar subquery or as the
+right-hand operand of an IN, NOT IN or EXISTS expression may contain
+references to columns in the outer query. Such a subquery is known as
+a correlated subquery. A correlated subquery is reevaluated each time
+its result is required. An uncorrelated subquery is evaluated only once
+and the result reused as necessary.
+
+<a name="castexpr"></a>
+
+</p><h1 id="cast_expressions"><span>13. </span>CAST expressions</h1>
+
+<p>A CAST expression of the form "CAST(<i>expr</i> AS <i>type-name</i>)"
+is used to convert the value of <i>expr</i> to
+a different <a href="datatype3.html#storageclasses">storage class</a> specified by <span class='yyterm'>type-name</span>.
+A CAST conversion is similar to the conversion that takes
+place when a <a href="datatype3.html#affinity">column affinity</a> is applied to a value except that with
+the CAST operator the conversion always takes place even if the conversion
+lossy and irreversible, whereas column affinity only changes the data type
+of a value if the change is lossless and reversible.
+
+</p><p>If the value of <i>expr</i> is NULL, then the result of the CAST
+expression is also NULL. Otherwise, the storage class of the result
+is determined by applying the <a href="datatype3.html#affname">rules for determining column affinity</a> to
+the <span class='yyterm'>type-name</span>.
+
+</p><blockquote>
+<table border="1">
+<tr>
+ <th> Affinity of <span class='yyterm'><nobr>type-name</nobr></span>
+ </th><th> Conversion Processing
+</th></tr><tr>
+ <td> NONE
+ </td><td> Casting a value to a <span class='yyterm'>type-name</span> with no affinity
+ causes the value to
+ be converted into a BLOB. Casting to a BLOB consists of first casting
+ the value to TEXT in the <a href="pragma.html#pragma_encoding">encoding</a> of the database connection, then
+ interpreting the resulting byte sequence as a BLOB instead of as TEXT.
+
+</td></tr><tr>
+ <td> TEXT
+ </td><td> To cast a BLOB value to TEXT, the sequence of bytes that make up the
+ BLOB is interpreted as text encoded using the database encoding.
+ <p>
+ Casting an INTEGER or REAL value into TEXT renders the value as if via
+ <a href="c3ref/mprintf.html">sqlite3_snprintf()</a> except that the resulting TEXT uses the <a href="pragma.html#pragma_encoding">encoding</a> of
+ the database connection.
+
+</p></td></tr><tr>
+ <td> REAL
+ </td><td> When casting a BLOB value to a REAL, the value is first converted to
+ TEXT.
+ <p>When casting a TEXT value to REAL, the longest possible prefix of
+ the value that can be interpreted as a real number is extracted from
+ the TEXT value and the remainder ignored. Any leading spaces in the
+ TEXT value are ignored when converging from TEXT to REAL. If there is
+ no prefix that can be interpreted as a real number, the result of the
+ conversion is 0.0.
+
+</p></td></tr><tr>
+ <td> INTEGER
+ </td><td> When casting a BLOB value to INTEGER, the value is first converted to
+ TEXT.
+ <p>When casting a TEXT value to INTEGER, the longest possible prefix of
+ the value that can be interpreted as an integer number is extracted from
+ the TEXT value and the remainder ignored. Any leading spaces in the
+ TEXT value when converting from TEXT to INTEGER are ignored. If there
+ is no prefix that can be interpreted as an integer number, the result
+ of the conversion is 0. If the prefix integer is greater than
+ +9223372036854775807 then the result of the cast is exactly
+ +9223372036854775807. Similarly, if the prefix integer is
+ less than -9223372036854775808 then the result of the cast is
+ exactly -9223372036854775808.
+
+ </p><p>When casting to INTEGER, if the text looks like a floating point
+ value with an exponent, the exponent will be ignored because it is
+ no part of the integer prefix. For example,
+ "(CAST '123e+5' AS INTEGER)" results in 123, not in 12300000.
+
+ </p><p> The CAST operator understands decimal
+ integers only &mdash; conversion of <a href="lang_expr.html#hexint">hexadecimal integers</a> stops
+ at the "x" in the "0x" prefix of the hexadecimal integer string
+ and thus result of the CAST is always zero.
+
+ </p><p>A cast of a REAL value into an INTEGER results in the integer
+ between the REAL value and zero that is closest to the REAL value.
+ If a REAL is greater than the greatest possible signed
+ integer (+9223372036854775807) then the result is the greatest possible
+ signed integer and if the REAL is less than the least possible signed
+ integer (-9223372036854775808) then the result is the least possible
+ signed integer.
+
+ </p><p>Prior to SQLite version 3.8.2 (2013-12-06),
+ casting a REAL value greater than
+ +9223372036854775807.0 into an integer resulted in the most negative
+ integer, -9223372036854775808. This behavior was meant to emulate the
+ behavior of x86/x64 hardware when doing the equivalent cast.
+
+</p></td></tr><tr>
+ <td> NUMERIC
+ </td><td> Casting a TEXT or BLOB value into NUMERIC yields either an INTEGER or
+ a REAL result.
+ If the input text looks like an integer (there is no decimal point nor
+ exponent) and the value is small enough to fit in a 64-bit signed integer,
+ then the result will be INTEGER.
+ Input text that looks like floating point (there is a decimal point and/or
+ an exponent) and the text describes a value that
+ can be losslessly converted back and forth between IEEE 754 64-bit float and a
+ 51-bit signed integer, then the result is INTEGER.
+ (In the previous sentence, a 51-bit integer is specified since that is one
+ bit less than the length of the mantissa of an IEEE 754 64-bit float and
+ thus provides a 1-bit of margin for the text-to-float conversion operation.)
+ Any text input that describes a value outside the range of a 64-bit
+ signed integer yields a REAL result.
+ <p> Casting a REAL or INTEGER value to NUMERIC is a no-op, even if a real
+ value could be losslessly converted to an integer.
+</p></td></tr>
+</table>
+</blockquote>
+
+<p>Note that the result from casting any non-BLOB value into a
+BLOB and the result from casting any BLOB value into a non-BLOB value
+may be different depending on whether the database <a href="pragma.html#pragma_encoding">encoding</a> is UTF-8,
+UTF-16be, or UTF-16le.
+
+
+<a name="booleanexpr"></a>
+
+</p><h1 id="boolean_expressions"><span>14. </span>Boolean Expressions</h1>
+
+<p>The SQL language features several contexts where an expression is
+evaluated and the result converted to a boolean (true or false) value. These
+contexts are:
+
+ </p><ul>
+ <li> the WHERE clause of a SELECT, UPDATE or DELETE statement,
+ </li><li> the ON or USING clause of a join in a SELECT statement,
+ </li><li> the HAVING clause of a SELECT statement,
+ </li><li> the WHEN clause of an SQL trigger, and
+ </li><li> the WHEN clause or clauses of some CASE expressions.
+ </li></ul>
+
+<p>To convert the results of an SQL expression to a boolean value, SQLite
+first casts the result to a NUMERIC value in the same way as a
+<a href="lang_expr.html#castexpr">CAST expression</a>. A numeric zero value (integer value 0 or real
+value 0.0) is considered to be false. A NULL value is still NULL.
+All other values are considered true.
+
+</p><p>For example, the values NULL, 0.0, 0, 'english' and '0' are all considered
+to be false. Values 1, 1.0, 0.1, -0.1 and '1english' are considered to
+be true.
+
+</p><p>Beginning with SQLite 3.23.0 (2018-04-02), SQLite recognizes the
+identifiers "TRUE" and "FALSE" as boolean literals, if and only if those
+identifiers are not already used for some other meaning. If there already
+exists columns or tables or other objects named TRUE or FALSE, then for
+the sake of backwards compatibility, the TRUE and FALSE identifiers refer
+to those other objects, not to the boolean values.
+
+</p><p>The boolean identifiers TRUE and FALSE are usually just aliases for
+the integer values 1 and 0, respectively. However, if TRUE or FALSE
+occur on the right-hand side of an IS operator, then the IS operator
+evaluates the left-hand operand as a boolean value and returns an appropriate
+answer.
+
+</p><h1 id="functions"><span>15. </span>Functions</h1>
+<p>SQLite supports many <a href="lang_corefunc.html">simple</a>, <a href="lang_aggfunc.html">aggregate</a>,
+and <a href="windowfunctions.html">window</a>
+SQL functions. For presentation purposes, simple functions are further
+subdivided into <a href="lang_corefunc.html">core functions</a>, <a href="lang_datefunc.html">date-time functions</a>,
+and <a href="json1.html">JSON functions</a>.
+Applications can add new functions, written in C/C++, using the
+<a href="c3ref/create_function.html">sqlite3_create_function()</a> interface.
+</p>
+
+<p>
+The main expression bubble diagram above shows a single syntax for
+all function invocations. But this is merely to simplify the expression
+bubble diagram. In reality, each type of function has a slightly different
+syntax, shown below. The function invocation syntax shown in the main
+expression bubble diagram is the union of the three syntaxes shown here:
+
+<p><b><a href="syntax/simple-function-invocation.html">simple-function-invocation:</a></b></p><div class='imgcontainer'>
+ <div style="max-width:414px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 414.49 126.792">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,55 20,59 20,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L26,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,70L126,70A15 15 0 0 0 141 55A15 15 0 0 0 126 39L47,39A15 15 0 0 0 32 55A15 15 0 0 0 47 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">simple-func</text>
+<polygon points="164,55 152,59 152,50" style="fill:rgb(0,0,0)"/>
+<path d="M141,55L158,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,70A15 15 0 0 0 194 55A15 15 0 0 0 179 39A15 15 0 0 0 164 55A15 15 0 0 0 179 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="248,55 237,59 237,50" style="fill:rgb(0,0,0)"/>
+<path d="M194,55L242,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,70L297,70L297,39L248,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="273" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="351,55 340,59 340,50" style="fill:rgb(0,0,0)"/>
+<path d="M297,55L346,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,70A15 15 0 0 0 382 55A15 15 0 0 0 366 39A15 15 0 0 0 351 55A15 15 0 0 0 366 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="366" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="405,55 393,59 393,50" style="fill:rgb(0,0,0)"/>
+<path d="M382,55L399,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="408" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,32A15 15 0 0 0 288 17L288,17A15 15 0 0 0 273 2A15 15 0 0 0 258 17L258,17A15 15 0 0 0 273 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="273" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="288,17 299,12 299,21" style="fill:rgb(0,0,0)"/>
+<path d="M297,55 L 305,55 Q 312,55 312,40 L 312,32 Q 312,17 303,17 L 294,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,17 L 237,17 Q 222,17 222,32 L 222,40 Q 222,55 229,55 L 237,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,82 261,86 261,77" style="fill:rgb(0,0,0)"/>
+<path d="M194,55 L 202,55 Q 209,55 209,68 Q 209,82 224,82 L 252,82 L 267,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,82 L 310,82 Q 325,82 325,68 Q 325,55 332,55 L 340,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,124A15 15 0 0 0 288 109A15 15 0 0 0 273 94A15 15 0 0 0 258 109A15 15 0 0 0 273 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="273" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="258,109 246,113 246,105" style="fill:rgb(0,0,0)"/>
+<path d="M194,55 L 202,55 Q 209,55 209,70 L 209,94 Q 209,109 224,109 L 237,109 L 252,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,109 L 310,109 Q 325,109 325,94 L 325,85 L 325,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+ </div>
+<p><b><a href="syntax/aggregate-function-invocation.html">aggregate-function-invocation:</a></b></p><div class='imgcontainer'>
+ <div style="max-width:819px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 819.533 117.504">
+<circle cx="5" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,56 20,60 20,52" style="fill:rgb(0,0,0)"/>
+<path d="M9,56L26,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,71L156,71A15 15 0 0 0 171 56A15 15 0 0 0 156 41L47,41A15 15 0 0 0 32 56A15 15 0 0 0 47 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="102" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">aggregate-func</text>
+<polygon points="189,56 178,60 178,52" style="fill:rgb(0,0,0)"/>
+<path d="M171,56L183,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M204,71A15 15 0 0 0 219 56A15 15 0 0 0 204 41A15 15 0 0 0 189 56A15 15 0 0 0 204 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="242,56 231,60 231,52" style="fill:rgb(0,0,0)"/>
+<path d="M219,56L237,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="277,26 265,30 265,22" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,41 L 254,41 Q 254,26 263,26 L 271,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M292,41L360,41A15 15 0 0 0 376 26L376,26A15 15 0 0 0 360 11L292,11A15 15 0 0 0 277 26L277,26A15 15 0 0 0 292 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="394,26 382,30 382,22" style="fill:rgb(0,0,0)"/>
+<path d="M376,26L388,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="428,56 417,60 417,52" style="fill:rgb(0,0,0)"/>
+<path d="M394,26 L 399,26 Q 405,26 405,41 L 405,41 Q 405,56 414,56 L 422,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,56 453,60 453,52" style="fill:rgb(0,0,0)"/>
+<path d="M428,56L458,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M464,71L513,71L513,41L464,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="567,56 556,60 556,52" style="fill:rgb(0,0,0)"/>
+<path d="M513,56L562,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,71A15 15 0 0 0 598 56A15 15 0 0 0 582 41A15 15 0 0 0 567 56A15 15 0 0 0 582 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="644,86 632,91 632,82" style="fill:rgb(0,0,0)"/>
+<path d="M598,56 L 609,56 Q 621,56 621,71 L 621,71 Q 621,86 629,86 L 638,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,101L756,101L756,71L644,71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="700" y="86" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="810,56 798,60 798,52" style="fill:rgb(0,0,0)"/>
+<path d="M756,86 L 765,86 Q 774,86 774,71 L 774,71 Q 774,56 789,56 L 789,56 L 804,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="813" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="700,56 688,60 688,52" style="fill:rgb(0,0,0)"/>
+<path d="M598,56L694,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="810,56 798,60 798,52" style="fill:rgb(0,0,0)"/>
+<path d="M700,56L804,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="326,56 315,60 315,52" style="fill:rgb(0,0,0)"/>
+<path d="M242,56L321,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="428,56 417,60 417,52" style="fill:rgb(0,0,0)"/>
+<path d="M326,56L422,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,32A15 15 0 0 0 504 17A15 15 0 0 0 489 2A15 15 0 0 0 474 17A15 15 0 0 0 489 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="504,17 515,12 515,21" style="fill:rgb(0,0,0)"/>
+<path d="M513,56 L 525,56 Q 536,56 536,41 L 536,32 Q 536,17 523,17 L 510,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,56 453,60 453,52" style="fill:rgb(0,0,0)"/>
+<path d="M474,17 L 456,17 Q 441,17 441,32 L 441,41 Q 441,56 450,56 L 458,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,101A15 15 0 0 0 408 86L408,86A15 15 0 0 0 393 71A15 15 0 0 0 378 86L378,86A15 15 0 0 0 393 101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="393" y="86" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="378,86 367,91 367,82" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,71 L 254,71 Q 254,86 269,86 L 357,86 L 372,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,86 477,91 477,82" style="fill:rgb(0,0,0)"/>
+<path d="M408,86L483,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,86 L 525,86 Q 540,86 540,71 L 540,71 Q 540,56 546,56 L 552,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="393,111 382,115 382,106" style="fill:rgb(0,0,0)"/>
+<path d="M326,86 L 332,86 Q 338,86 338,98 Q 338,111 353,111 L 373,111 L 388,111" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,111 L 414,111 Q 429,111 429,98 Q 429,86 435,86 L 441,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+ </div>
+<p><b><a href="syntax/window-function-invocation.html">window-function-invocation:</a></b></p><div class='imgcontainer'>
+ <div style="max-width:870px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 870.446 132.84">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,55 20,59 20,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L26,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,70L135,70A15 15 0 0 0 150 55A15 15 0 0 0 135 39L47,39A15 15 0 0 0 32 55A15 15 0 0 0 47 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="91" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-func</text>
+<polygon points="167,55 156,59 156,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,55L161,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,70A15 15 0 0 0 197 55A15 15 0 0 0 182 39A15 15 0 0 0 167 55A15 15 0 0 0 182 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="182" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="251,55 240,59 240,50" style="fill:rgb(0,0,0)"/>
+<path d="M197,55L246,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,70L300,70L300,39L251,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="354,55 343,59 343,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L349,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M370,70A15 15 0 0 0 385 55A15 15 0 0 0 370 39A15 15 0 0 0 354 55A15 15 0 0 0 370 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="370" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="426,85 415,89 415,81" style="fill:rgb(0,0,0)"/>
+<path d="M385,55 L 392,55 Q 400,55 400,70 L 400,70 Q 400,85 410,85 L 420,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M426,100L538,100L538,70L426,70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="580,55 568,59 568,50" style="fill:rgb(0,0,0)"/>
+<path d="M538,85 L 546,85 Q 553,85 553,70 L 553,70 Q 553,55 564,55 L 574,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,70L626,70A15 15 0 0 0 641 55A15 15 0 0 0 626 39L595,39A15 15 0 0 0 580 55A15 15 0 0 0 595 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="610" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="682,92 671,97 671,88" style="fill:rgb(0,0,0)"/>
+<path d="M641,55 L 648,55 Q 656,55 656,70 L 656,77 Q 656,92 666,92 L 677,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M697,108L794,108A15 15 0 0 0 810 92L810,92A15 15 0 0 0 794 77L697,77A15 15 0 0 0 682 92L682,92A15 15 0 0 0 697 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="746" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="861,55 849,59 849,50" style="fill:rgb(0,0,0)"/>
+<path d="M810,92 L 817,92 Q 825,92 825,77 L 825,70 Q 825,55 840,55 L 840,55 L 855,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="864" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M385,55L568,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="682,55 671,59 671,50" style="fill:rgb(0,0,0)"/>
+<path d="M641,55L677,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M682,70L801,70L801,39L682,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="742" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M801,55L849,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32A15 15 0 0 0 291 17L291,17A15 15 0 0 0 276 2A15 15 0 0 0 261 17L261,17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="291,17 303,12 303,21" style="fill:rgb(0,0,0)"/>
+<path d="M300,55 L 308,55 Q 315,55 315,40 L 315,32 Q 315,17 306,17 L 297,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,17 L 240,17 Q 225,17 225,32 L 225,40 Q 225,55 232,55 L 240,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="276,85 264,89 264,81" style="fill:rgb(0,0,0)"/>
+<path d="M197,55 L 205,55 Q 212,55 212,70 L 212,70 Q 212,85 227,85 L 255,85 L 270,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,85 L 313,85 Q 328,85 328,70 L 328,70 Q 328,55 335,55 L 343,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130A15 15 0 0 0 291 115L291,115A15 15 0 0 0 276 100A15 15 0 0 0 261 115L261,115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M197,55 L 205,55 Q 212,55 212,70 L 212,100 Q 212,115 227,115 L 240,115 L 255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,115 L 313,115 Q 328,115 328,100 L 328,70 Q 328,55 335,55 L 343,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+ </div>
+
+
+</p><p>
+The OVER clause is required for <a href="windowfunctions.html">window functions</a> and is prohibited
+otherwise. The DISTINCT keyword is only allowed in <a href="lang_aggfunc.html">aggregate functions</a>.
+The FILTER clause may not appear on a <a href="lang_corefunc.html">simple function</a>.
+
+</p><p>It is possible to have an aggregate function with the same name as a
+simple function, as long as the number of arguments for the two forms of the
+function are different. For example, the <a href="lang_aggfunc.html#max_agg">max()</a> function with a
+single argument is an aggregate and the <a href="lang_corefunc.html#max_scalar">max()</a> function with two or more
+arguments is a simple function. Aggregate functions can usually also
+be used as window functions.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_expr.in?m=899fcd819e5f392c9">2022-08-10 18:45:48</a> UTC </small></i></p>
+
diff --git a/www/lang_indexedby.html b/www/lang_indexedby.html
new file mode 100644
index 0000000..4d74a6f
--- /dev/null
+++ b/www/lang_indexedby.html
@@ -0,0 +1,260 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The INDEXED BY Clause</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The INDEXED BY Clause
+</div>
+</div>
+
+
+
+
+<h1 id="how_indexed_by_works"><span>1. </span>How INDEXED BY Works</h1>
+
+<p>The INDEXED BY phrase forces the <a href="optoverview.html">SQLite query planner</a> to use a
+particular named index on a <a href="lang_delete.html">DELETE</a>, <a href="lang_select.html">SELECT</a>, or <a href="lang_update.html">UPDATE</a> statement.
+The INDEXED BY phrase is an SQLite extension and
+is not portable to other SQL database engines.</p>
+
+<p><b><a href="syntax/qualified-table-name.html">qualified-table-name:</a></b>
+<button id='x1759' onclick='hideorshow("x1759","x1760")'>hide</button></p>
+ <div id='x1760' class='imgcontainer'>
+ <div style="max-width:599px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 599.746 182.736">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L156,32A15 15 0 0 0 171 17A15 15 0 0 0 156 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M171,17L189,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,32A15 15 0 0 0 225 17A15 15 0 0 0 210 2A15 15 0 0 0 195 17A15 15 0 0 0 210 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,17 249,21 249,12" style="fill:rgb(0,0,0)"/>
+<path d="M225,17L255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32L351,32A15 15 0 0 0 366 17A15 15 0 0 0 351 2L276,2A15 15 0 0 0 261 17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="408,44 396,48 396,40" style="fill:rgb(0,0,0)"/>
+<path d="M366,17 L 374,17 Q 381,17 381,30 Q 381,44 392,44 L 402,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,59L427,59A15 15 0 0 0 442 44L442,44A15 15 0 0 0 427 29L423,29A15 15 0 0 0 408 44L408,44A15 15 0 0 0 423 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="465,44 453,48 453,40" style="fill:rgb(0,0,0)"/>
+<path d="M442,44L459,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,59L501,59A15 15 0 0 0 516 44L516,44A15 15 0 0 0 501 29L480,29A15 15 0 0 0 465 44L465,44A15 15 0 0 0 480 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="539,44 527,48 527,40" style="fill:rgb(0,0,0)"/>
+<path d="M516,44L533,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,44 L 546,44 Q 554,44 554,51 L 554,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,17 442,21 442,12" style="fill:rgb(0,0,0)"/>
+<path d="M366,17L448,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,44 97,48 97,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 39,44 L 87,44 L 102,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M108,44 L 225,44 Q 240,44 240,30 Q 240,17 247,17 L 255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,142L301,142A15 15 0 0 0 316 127A15 15 0 0 0 301 112L236,112A15 15 0 0 0 221 127A15 15 0 0 0 236 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="339,127 327,131 327,123" style="fill:rgb(0,0,0)"/>
+<path d="M316,127L333,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,142L358,142A15 15 0 0 0 373 127A15 15 0 0 0 358 112L354,112A15 15 0 0 0 339 127A15 15 0 0 0 354 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="396,127 385,131 385,123" style="fill:rgb(0,0,0)"/>
+<path d="M373,127L390,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M411,142L490,142A15 15 0 0 0 505 127A15 15 0 0 0 490 112L411,112A15 15 0 0 0 396 127A15 15 0 0 0 411 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="451" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M236,180L256,180A15 15 0 0 0 271 165A15 15 0 0 0 256 150L236,150A15 15 0 0 0 221 165A15 15 0 0 0 236 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="294,165 283,169 283,161" style="fill:rgb(0,0,0)"/>
+<path d="M271,165L289,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,180L374,180A15 15 0 0 0 389 165A15 15 0 0 0 374 150L310,150A15 15 0 0 0 294 165A15 15 0 0 0 310 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="554,74 550,62 558,62" style="fill:rgb(0,0,0)"/>
+<path d="M453,17 L 539,17 Q 554,17 554,32 L 554,53 L 554,68" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 325,85 325,94" style="fill:rgb(0,0,0)"/>
+<path d="M554,74 L 554,82 Q 554,89 539,89 L 334,89 L 319,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,127 210,131 210,123" style="fill:rgb(0,0,0)"/>
+<path d="M313,89 L 210,89 Q 195,89 195,104 L 195,112 Q 195,127 205,127 L 215,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,165 210,169 210,161" style="fill:rgb(0,0,0)"/>
+<path d="M195,112 L 195,150 Q 195,165 205,165 L 215,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="554,114 550,102 558,102" style="fill:rgb(0,0,0)"/>
+<path d="M554,74L554,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="590,165 578,169 578,161" style="fill:rgb(0,0,0)"/>
+<path d="M554,114 L 554,150 Q 554,165 569,165 L 569,165 L 584,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="593" cy="165" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,127 527,131 527,123" style="fill:rgb(0,0,0)"/>
+<path d="M505,127L533,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,127 L 546,127 Q 554,127 554,135 L 554,142" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M389,165L578,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p>The "INDEXED BY <span class='yyterm'>index-name</span>" phrase specifies
+that the named index
+must be used in order to look up values on the preceding table.
+If <span class='yyterm'>index-name</span> does not exist or cannot be used
+for the query, then the preparation of the SQL statement fails.
+The "NOT INDEXED" clause specifies that no index shall be used when
+accessing the preceding table, including implied indices create by
+UNIQUE and PRIMARY KEY constraints. However, the <a href="lang_createtable.html#rowid">rowid</a>
+can still be used to look up entries even when "NOT INDEXED" is specified.</p>
+
+<p>Some SQL database engines provide non-standard "hint" mechanisms which
+can be used to give the query optimizer clues about what indices it should
+use for a particular statement. The INDEXED BY clause of SQLite is
+<em>not</em> a hinting mechanism and it should not be used as such.
+The INDEXED BY clause does not give the optimizer hints about which index
+to use; it gives the optimizer a requirement of which index to use.
+If the query optimizer is unable to use the index specified by the
+INDEXED BY clause, then the query will fail with an error.</p>
+
+<p>The INDEXED BY clause is <em>not</em> intended for use in tuning
+the performance of a query. The intent of the INDEXED BY clause is
+to raise a run-time error if a schema change, such as dropping or
+creating an index, causes the query plan for a time-sensitive query
+to change. The INDEXED BY clause is designed to help detect
+undesirable query plan changes during regression testing.
+Application
+developers are admonished to omit all use of INDEXED BY during
+application design, implementation, testing, and tuning. If
+INDEXED BY is to be used at all, it should be inserted at the very
+end of the development process when "locking down" a design.</p>
+
+<h1 id="see_also"><span>2. </span>See Also</h1>
+
+<ol>
+<li><p>The <a href="queryplanner-ng.html#howtofix">query planner checklist</a> describes steps that application
+developers should following to help resolve query planner problems.
+Notice the that the use of INDEXED BY is a last resort, to be used only
+when all other measures fail.</p>
+
+</li><li><p><a href="optoverview.html#uplus">The unary "+" operator</a>
+can be used to disqualify terms in the WHERE clause from use by indices.
+Careful use of unary + can sometimes help prevent the query planner from
+choosing a poor index without restricting it to using one specific index.
+Careful placement of unary + operators is a better method for controlling
+which indices are used by a query.</p>
+
+</li><li><p>The <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a> C/C++ interface together with the
+<a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfullscanstep">SQLITE_STMTSTATUS_FULLSCAN_STEP</a> and <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatussort">SQLITE_STMTSTATUS_SORT</a> verbs
+can be used to detect at run-time when an SQL statement is not
+making effective use of indices. Many applications may prefer to
+use the <a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface to detect index misuse
+rather than the INDEXED BY phrase described here.</p>
+</li></ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_indexedby.in?m=f9785fa831d1b7b96">2021-02-06 15:33:07</a> UTC </small></i></p>
+
diff --git a/www/lang_insert.html b/www/lang_insert.html
new file mode 100644
index 0000000..882ac9d
--- /dev/null
+++ b/www/lang_insert.html
@@ -0,0 +1,2864 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>INSERT</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+INSERT
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p><b><a href="syntax/insert-stmt.html">insert-stmt:</a></b>
+<button id='x1761' onclick='hideorshow("x1761","x1762")'>hide</button></p>
+ <div id='x1762' class='imgcontainer'>
+ <div style="max-width:601px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 601.066 922.104">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,145L124,145A15 15 0 0 0 139 130A15 15 0 0 0 124 115L60,115A15 15 0 0 0 45 130A15 15 0 0 0 60 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<path d="M60,183L109,183A15 15 0 0 0 124 168A15 15 0 0 0 109 153L60,153A15 15 0 0 0 45 168A15 15 0 0 0 60 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="84" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INSERT</text>
+<polygon points="166,198 154,203 154,194" style="fill:rgb(0,0,0)"/>
+<path d="M124,168 L 132,168 Q 139,168 139,183 L 139,183 Q 139,198 149,198 L 160,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M181,213L187,213A15 15 0 0 0 203 198A15 15 0 0 0 187 183L181,183A15 15 0 0 0 166 198A15 15 0 0 0 181 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="244,349 233,354 233,345" style="fill:rgb(0,0,0)"/>
+<path d="M203,198 L 210,198 Q 218,198 218,213 L 218,334 Q 218,349 228,349 L 238,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,365L337,365A15 15 0 0 0 352 349A15 15 0 0 0 337 334L259,334A15 15 0 0 0 244 349A15 15 0 0 0 259 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="369,349 358,354 358,345" style="fill:rgb(0,0,0)"/>
+<path d="M352,349L363,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,130 399,135 399,126" style="fill:rgb(0,0,0)"/>
+<path d="M369,349 L 377,349 Q 384,349 384,334 L 384,145 Q 384,130 395,130 L 405,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M426,145L453,145A15 15 0 0 0 468 130A15 15 0 0 0 453 115L426,115A15 15 0 0 0 411 130A15 15 0 0 0 426 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTO</text>
+<polygon points="45,168 33,172 33,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,153 Q 24,168 31,168 L 39,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,130 33,135 33,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 31,130 L 39,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M139,130L399,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,168 358,172 358,164" style="fill:rgb(0,0,0)"/>
+<path d="M124,168L363,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,168 L 377,168 Q 384,168 384,160 L 384,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,213L301,213A15 15 0 0 0 316 198A15 15 0 0 0 301 183L259,183A15 15 0 0 0 244 198A15 15 0 0 0 259 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="244,198 233,203 233,194" style="fill:rgb(0,0,0)"/>
+<path d="M203,198L238,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,198 358,203 358,194" style="fill:rgb(0,0,0)"/>
+<path d="M316,198L363,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,198 L 377,198 Q 384,198 384,191 L 384,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,251L281,251A15 15 0 0 0 296 236A15 15 0 0 0 281 221L259,221A15 15 0 0 0 244 236A15 15 0 0 0 259 251Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="270" y="236" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="244,236 233,240 233,232" style="fill:rgb(0,0,0)"/>
+<path d="M218,221 L 218,228 Q 218,236 228,236 L 238,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,236 358,240 358,232" style="fill:rgb(0,0,0)"/>
+<path d="M296,236L363,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,236 L 377,236 Q 384,236 384,229 L 384,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,289L311,289A15 15 0 0 0 327 274A15 15 0 0 0 311 259L259,259A15 15 0 0 0 244 274A15 15 0 0 0 259 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="285" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="244,274 233,278 233,270" style="fill:rgb(0,0,0)"/>
+<path d="M218,259 L 218,266 Q 218,274 228,274 L 238,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,274 358,278 358,270" style="fill:rgb(0,0,0)"/>
+<path d="M327,274L363,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,274 L 377,274 Q 384,274 384,266 L 384,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,327L323,327A15 15 0 0 0 338 312A15 15 0 0 0 323 297L259,297A15 15 0 0 0 244 312A15 15 0 0 0 259 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="291" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="244,312 233,316 233,307" style="fill:rgb(0,0,0)"/>
+<path d="M218,297 L 218,304 Q 218,312 228,312 L 238,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,312 358,316 358,307" style="fill:rgb(0,0,0)"/>
+<path d="M338,312L363,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,312 L 377,312 Q 384,312 384,304 L 384,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,455L156,455A15 15 0 0 0 171 440A15 15 0 0 0 156 425L60,425A15 15 0 0 0 45 440A15 15 0 0 0 60 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,440 183,444 183,436" style="fill:rgb(0,0,0)"/>
+<path d="M171,440L189,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,455A15 15 0 0 0 225 440A15 15 0 0 0 210 425A15 15 0 0 0 195 440A15 15 0 0 0 210 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="440" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,440 249,444 249,436" style="fill:rgb(0,0,0)"/>
+<path d="M225,440L255,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,455L351,455A15 15 0 0 0 366 440A15 15 0 0 0 351 425L276,425A15 15 0 0 0 261 440A15 15 0 0 0 276 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="402,440 391,444 391,436" style="fill:rgb(0,0,0)"/>
+<path d="M366,440L396,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,455L421,455A15 15 0 0 0 436 440A15 15 0 0 0 421 425L417,425A15 15 0 0 0 402 440A15 15 0 0 0 417 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="419" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="459,440 448,444 448,436" style="fill:rgb(0,0,0)"/>
+<path d="M436,440L454,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,455L495,455A15 15 0 0 0 510 440A15 15 0 0 0 495 425L475,425A15 15 0 0 0 459 440A15 15 0 0 0 475 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="485" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="483,238 478,227 487,227" style="fill:rgb(0,0,0)"/>
+<path d="M468,130 L 475,130 Q 483,130 483,145 L 483,217 L 483,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,395 183,390 183,399" style="fill:rgb(0,0,0)"/>
+<path d="M483,238 L 483,380 Q 483,395 468,395 L 192,395 L 177,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,440 33,444 33,436" style="fill:rgb(0,0,0)"/>
+<path d="M171,395 L 35,395 Q 20,395 20,410 L 20,425 Q 20,440 30,440 L 39,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,423 230,412 239,412" style="fill:rgb(0,0,0)"/>
+<path d="M261,395 L 247,395 Q 234,395 234,406 L 234,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,423 L 234,432 Q 234,440 242,440 L 249,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,546A15 15 0 0 0 75 531A15 15 0 0 0 60 516A15 15 0 0 0 45 531A15 15 0 0 0 60 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="531" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,531 100,535 100,527" style="fill:rgb(0,0,0)"/>
+<path d="M75,531L105,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,546L220,546A15 15 0 0 0 235 531A15 15 0 0 0 220 516L126,516A15 15 0 0 0 111 531A15 15 0 0 0 126 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="271,531 260,535 260,527" style="fill:rgb(0,0,0)"/>
+<path d="M235,531L266,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,546A15 15 0 0 0 302 531A15 15 0 0 0 287 516A15 15 0 0 0 271 531A15 15 0 0 0 287 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="287" y="531" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M173,580A15 15 0 0 0 188 565A15 15 0 0 0 173 550A15 15 0 0 0 158 565A15 15 0 0 0 173 580Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="565" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="188,565 200,561 200,569" style="fill:rgb(0,0,0)"/>
+<path d="M235,531 L 243,531 Q 250,531 250,546 L 250,550 Q 250,565 235,565 L 209,565 L 194,565" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,565 L 100,565 Q 85,565 85,550 L 85,546 Q 85,531 92,531 L 100,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="173,595 185,591 185,599" style="fill:rgb(0,0,0)"/>
+<path d="M302,531 L 309,531 Q 317,531 317,546 L 317,580 Q 317,595 302,595 L 194,595 L 179,595" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M173,595 L 39,595 Q 24,595 24,603 L 24,610" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="436,486 448,481 448,490" style="fill:rgb(0,0,0)"/>
+<path d="M510,440 L 518,440 Q 525,440 525,455 L 525,471 Q 525,486 510,486 L 457,486 L 442,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,531 33,535 33,527" style="fill:rgb(0,0,0)"/>
+<path d="M436,486 L 39,486 Q 24,486 24,501 L 24,516 Q 24,531 31,531 L 39,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,469 377,457 385,457" style="fill:rgb(0,0,0)"/>
+<path d="M366,440 L 374,440 Q 381,440 381,451 L 381,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M381,469 L 381,477 Q 381,486 374,486 L 366,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,671L112,671A15 15 0 0 0 127 656A15 15 0 0 0 112 640L60,640A15 15 0 0 0 45 656A15 15 0 0 0 60 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="656" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="163,656 152,660 152,651" style="fill:rgb(0,0,0)"/>
+<path d="M127,656L158,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,671A15 15 0 0 0 194 656A15 15 0 0 0 179 640A15 15 0 0 0 163 656A15 15 0 0 0 179 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="656" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="230,656 218,660 218,651" style="fill:rgb(0,0,0)"/>
+<path d="M194,656L224,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M230,671L279,671L279,640L230,640Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="656" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="315,656 303,660 303,651" style="fill:rgb(0,0,0)"/>
+<path d="M279,656L309,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,671A15 15 0 0 0 345 656A15 15 0 0 0 330 640A15 15 0 0 0 315 656A15 15 0 0 0 330 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="330" y="656" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="45,656 33,660 33,651" style="fill:rgb(0,0,0)"/>
+<path d="M24,516 L 24,641 Q 24,656 31,656 L 39,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,705A15 15 0 0 0 269 690A15 15 0 0 0 254 675A15 15 0 0 0 239 690A15 15 0 0 0 254 705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="690" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="269,690 281,685 281,694" style="fill:rgb(0,0,0)"/>
+<path d="M279,656 L 286,656 Q 294,656 294,671 L 294,675 Q 294,690 285,690 L 275,690" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,690 L 218,690 Q 203,690 203,675 L 203,671 Q 203,656 211,656 L 218,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,743A15 15 0 0 0 269 727A15 15 0 0 0 254 712A15 15 0 0 0 239 727A15 15 0 0 0 254 743Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="727" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="269,727 281,723 281,732" style="fill:rgb(0,0,0)"/>
+<path d="M345,656 L 353,656 Q 360,656 360,671 L 360,712 Q 360,727 345,727 L 290,727 L 275,727" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,727 L 152,727 Q 137,727 137,712 L 137,671 Q 137,656 144,656 L 152,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="387,693 375,698 375,689" style="fill:rgb(0,0,0)"/>
+<path d="M345,656 L 353,656 Q 360,656 360,671 L 360,678 Q 360,693 371,693 L 381,693" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,709L512,709L512,678L387,678Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="449" y="693" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">upsert-clause</text>
+<polygon points="535,693 523,698 523,689" style="fill:rgb(0,0,0)"/>
+<path d="M512,693L529,693" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,693 L 542,693 Q 550,693 550,701 L 550,708" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="535,656 523,660 523,651" style="fill:rgb(0,0,0)"/>
+<path d="M345,656L529,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,788L149,788L149,758L45,758Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="97" y="773" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="535,773 523,777 523,768" style="fill:rgb(0,0,0)"/>
+<path d="M149,773L529,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,773 L 542,773 Q 550,773 550,780 L 550,788" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,773 33,777 33,768" style="fill:rgb(0,0,0)"/>
+<path d="M24,640 L 24,758 Q 24,773 31,773 L 39,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,818L512,818L512,788L387,788Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="449" y="803" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">upsert-clause</text>
+<polygon points="535,803 523,807 523,799" style="fill:rgb(0,0,0)"/>
+<path d="M512,803L529,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,803 L 542,803 Q 550,803 550,811 L 550,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="387,803 375,807 375,799" style="fill:rgb(0,0,0)"/>
+<path d="M345,773 L 353,773 Q 360,773 360,788 L 360,788 Q 360,803 371,803 L 381,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,856L125,856A15 15 0 0 0 140 841A15 15 0 0 0 125 826L60,826A15 15 0 0 0 45 841A15 15 0 0 0 60 856Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="841" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="164,841 152,845 152,837" style="fill:rgb(0,0,0)"/>
+<path d="M140,841L158,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,856L231,856A15 15 0 0 0 246 841A15 15 0 0 0 231 826L179,826A15 15 0 0 0 164 841A15 15 0 0 0 179 856Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="205" y="841" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="535,841 523,845 523,837" style="fill:rgb(0,0,0)"/>
+<path d="M246,841L529,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,841 33,845 33,837" style="fill:rgb(0,0,0)"/>
+<path d="M24,758 L 24,826 Q 24,841 31,841 L 39,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M361,919L512,919L512,889L361,889Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="436" y="904" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="591,904 580,909 580,900" style="fill:rgb(0,0,0)"/>
+<path d="M512,904L585,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="595" cy="904" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,656 L 542,656 Q 550,656 550,671 L 550,889 Q 550,904 557,904 L 565,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="436,871 448,867 448,875" style="fill:rgb(0,0,0)"/>
+<path d="M535,841 L 542,841 Q 550,841 550,856 L 550,856 Q 550,871 535,871 L 457,871 L 442,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="361,904 349,909 349,900" style="fill:rgb(0,0,0)"/>
+<path d="M436,871 L 349,871 Q 334,871 334,886 L 334,889 Q 334,904 345,904 L 355,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1763' onclick='hideorshow("x1763","x1764")'>show</button></p>
+ <div id='x1764' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1765' onclick='hideorshow("x1765","x1766")'>show</button></p>
+ <div id='x1766' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1767' onclick='hideorshow("x1767","x1768")'>show</button></p>
+ <div id='x1768' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1769' onclick='hideorshow("x1769","x1770")'>show</button></p>
+ <div id='x1770' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1771' onclick='hideorshow("x1771","x1772")'>show</button></p>
+ <div id='x1772' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1773' onclick='hideorshow("x1773","x1774")'>show</button></p>
+ <div id='x1774' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1775' onclick='hideorshow("x1775","x1776")'>show</button></p>
+ <div id='x1776' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1777' onclick='hideorshow("x1777","x1778")'>show</button></p>
+ <div id='x1778' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1779' onclick='hideorshow("x1779","x1780")'>show</button></p>
+ <div id='x1780' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1781' onclick='hideorshow("x1781","x1782")'>show</button></p>
+ <div id='x1782' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/returning-clause.html">returning-clause:</a></b>
+<button id='x1783' onclick='hideorshow("x1783","x1784")'>show</button></p>
+ <div id='x1784' style='display:none;' class='imgcontainer'>
+ <div style="max-width:628px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 628.709 140.4">
+<circle cx="5" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="27,47 15,51 15,43" style="fill:rgb(0,0,0)"/>
+<path d="M9,47L21,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M42,62L132,62A15 15 0 0 0 147 47A15 15 0 0 0 132 32L42,32A15 15 0 0 0 27 47A15 15 0 0 0 42 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RETURNING</text>
+<polygon points="237,47 226,51 226,43" style="fill:rgb(0,0,0)"/>
+<path d="M147,47L232,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,62L287,62L287,32L237,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="328,77 317,82 317,73" style="fill:rgb(0,0,0)"/>
+<path d="M287,47 L 294,47 Q 302,47 302,62 L 302,62 Q 302,77 312,77 L 322,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M343,92L347,92A15 15 0 0 0 362 77L362,77A15 15 0 0 0 347 62L343,62A15 15 0 0 0 328 77L328,77A15 15 0 0 0 343 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="398,77 387,82 387,73" style="fill:rgb(0,0,0)"/>
+<path d="M362,77L393,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M414,92L501,92A15 15 0 0 0 516 77L516,77A15 15 0 0 0 501 62L414,62A15 15 0 0 0 398 77L398,77A15 15 0 0 0 414 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="539,77 528,82 528,73" style="fill:rgb(0,0,0)"/>
+<path d="M516,77L534,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="581,47 569,51 569,43" style="fill:rgb(0,0,0)"/>
+<path d="M539,77 L 547,77 Q 554,77 554,62 L 554,62 Q 554,47 565,47 L 575,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,47 607,51 607,43" style="fill:rgb(0,0,0)"/>
+<path d="M581,47L613,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="622" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="345,101 334,106 334,97" style="fill:rgb(0,0,0)"/>
+<path d="M302,62 L 302,86 Q 302,101 317,101 L 325,101 L 340,101" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,101 L 362,101 Q 377,101 377,89 Q 377,77 385,77 L 392,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,47 441,51 441,43" style="fill:rgb(0,0,0)"/>
+<path d="M287,47L447,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,47L607,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,138A15 15 0 0 0 406 123A15 15 0 0 0 391 108A15 15 0 0 0 376 123A15 15 0 0 0 391 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="376,123 365,127 365,118" style="fill:rgb(0,0,0)"/>
+<path d="M147,47 L 196,47 Q 211,47 211,62 L 211,108 Q 211,123 226,123 L 355,123 L 370,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,123 528,127 528,118" style="fill:rgb(0,0,0)"/>
+<path d="M406,123L534,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,123 L 547,123 Q 554,123 554,108 L 554,77 L 554,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,32A15 15 0 0 0 406 17A15 15 0 0 0 391 2A15 15 0 0 0 376 17A15 15 0 0 0 391 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="406,17 418,12 418,21" style="fill:rgb(0,0,0)"/>
+<path d="M581,47 L 588,47 Q 596,47 596,32 L 596,32 Q 596,17 581,17 L 427,17 L 412,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M376,17 L 174,17 Q 159,17 159,32 L 159,32 Q 159,47 169,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1785' onclick='hideorshow("x1785","x1786")'>show</button></p>
+ <div id='x1786' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1787' onclick='hideorshow("x1787","x1788")'>show</button></p>
+ <div id='x1788' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1789' onclick='hideorshow("x1789","x1790")'>show</button></p>
+ <div id='x1790' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1791' onclick='hideorshow("x1791","x1792")'>show</button></p>
+ <div id='x1792' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1793' onclick='hideorshow("x1793","x1794")'>show</button></p>
+ <div id='x1794' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1795' onclick='hideorshow("x1795","x1796")'>show</button></p>
+ <div id='x1796' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1797' onclick='hideorshow("x1797","x1798")'>show</button></p>
+ <div id='x1798' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1799' onclick='hideorshow("x1799","x1800")'>show</button></p>
+ <div id='x1800' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1801' onclick='hideorshow("x1801","x1802")'>show</button></p>
+ <div id='x1802' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1803' onclick='hideorshow("x1803","x1804")'>show</button></p>
+ <div id='x1804' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/upsert-clause.html">upsert-clause:</a></b>
+<button id='x1805' onclick='hideorshow("x1805","x1806")'>show</button></p>
+ <div id='x1806' style='display:none;' class='imgcontainer'>
+ <div style="max-width:901px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 901.142 363.96">
+<path d="M223,165L759,165L759,51L223,51Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="5" cy="66" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,66 35,71 35,62" style="fill:rgb(0,0,0)"/>
+<path d="M9,66L41,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,82L71,82A15 15 0 0 0 86 66A15 15 0 0 0 71 51L62,51A15 15 0 0 0 47 66A15 15 0 0 0 62 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="103,66 92,71 92,62" style="fill:rgb(0,0,0)"/>
+<path d="M86,66L98,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M118,82L193,82A15 15 0 0 0 208 66A15 15 0 0 0 193 51L118,51A15 15 0 0 0 103 66A15 15 0 0 0 118 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="264,97 253,101 253,92" style="fill:rgb(0,0,0)"/>
+<path d="M208,66 L 223,66 Q 238,66 238,81 L 238,82 Q 238,97 248,97 L 259,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M280,112A15 15 0 0 0 295 97L295,97A15 15 0 0 0 280 82A15 15 0 0 0 264 97L264,97A15 15 0 0 0 280 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="97" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="331,97 319,101 319,92" style="fill:rgb(0,0,0)"/>
+<path d="M295,97L325,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M331,112L475,112L475,82L331,82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="97" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="511,97 500,101 500,92" style="fill:rgb(0,0,0)"/>
+<path d="M475,97L506,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M526,112A15 15 0 0 0 542 97L542,97A15 15 0 0 0 526 82A15 15 0 0 0 511 97L511,97A15 15 0 0 0 526 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="526" y="97" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="583,135 572,139 572,130" style="fill:rgb(0,0,0)"/>
+<path d="M542,97 L 549,97 Q 557,97 557,112 L 557,119 Q 557,135 567,135 L 577,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M598,150L648,150A15 15 0 0 0 663 135A15 15 0 0 0 648 119L598,119A15 15 0 0 0 583 135A15 15 0 0 0 598 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="623" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="680,135 669,139 669,130" style="fill:rgb(0,0,0)"/>
+<path d="M663,135L674,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M680,150L729,150L729,119L680,119Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="744,108 749,119 740,119" style="fill:rgb(0,0,0)"/>
+<path d="M729,135 L 737,135 Q 744,135 744,124 L 744,114" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="786,66 774,71 774,62" style="fill:rgb(0,0,0)"/>
+<path d="M744,108 L 744,81 Q 744,66 759,66 L 765,66 L 780,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M801,82L809,82A15 15 0 0 0 824 66A15 15 0 0 0 809 51L801,51A15 15 0 0 0 786 66A15 15 0 0 0 801 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="805" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DO</text>
+<polygon points="729,97 718,101 718,92" style="fill:rgb(0,0,0)"/>
+<path d="M542,97L723,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,97 L 737,97 Q 744,97 744,89 L 744,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M208,66L774,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,150A15 15 0 0 0 418 135A15 15 0 0 0 403 119A15 15 0 0 0 388 135A15 15 0 0 0 403 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="135" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,135 430,130 430,139" style="fill:rgb(0,0,0)"/>
+<path d="M475,97 L 483,97 Q 490,97 490,112 L 490,119 Q 490,135 475,135 L 439,135 L 424,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,135 L 319,135 Q 304,135 304,119 L 304,112 Q 304,97 312,97 L 319,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="288" y="36" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" dominant-baseline="central">conflict target</text>
+<polygon points="436,195 447,191 447,199" style="fill:rgb(0,0,0)"/>
+<path d="M824,66 L 831,66 Q 839,66 839,81 L 839,180 Q 839,195 824,195 L 456,195 L 441,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,271 35,275 35,266" style="fill:rgb(0,0,0)"/>
+<path d="M436,195 L 35,195 Q 20,195 20,210 L 20,256 Q 20,271 31,271 L 41,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,286L116,286A15 15 0 0 0 131 271A15 15 0 0 0 116 255L62,255A15 15 0 0 0 47 271A15 15 0 0 0 62 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="89" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="148,271 137,275 137,266" style="fill:rgb(0,0,0)"/>
+<path d="M131,271L143,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M164,286L179,286A15 15 0 0 0 194 271A15 15 0 0 0 179 255L164,255A15 15 0 0 0 148 271A15 15 0 0 0 164 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="171" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="257,308 245,313 245,304" style="fill:rgb(0,0,0)"/>
+<path d="M194,271 L 215,271 Q 230,271 230,286 L 230,293 Q 230,308 241,308 L 251,308" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,324L413,324L413,293L257,293Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="335" y="308" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="475,271 464,275 464,266" style="fill:rgb(0,0,0)"/>
+<path d="M413,308 L 434,308 Q 449,308 449,293 L 449,286 Q 449,271 459,271 L 469,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,286A15 15 0 0 0 505 271A15 15 0 0 0 490 255A15 15 0 0 0 475 271A15 15 0 0 0 490 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="523,271 511,275 511,266" style="fill:rgb(0,0,0)"/>
+<path d="M505,271L517,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M523,286L572,286L572,255L523,255Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="547" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="619,271 608,275 608,266" style="fill:rgb(0,0,0)"/>
+<path d="M572,271L613,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M634,286L684,286A15 15 0 0 0 699 271A15 15 0 0 0 684 255L634,255A15 15 0 0 0 619 271A15 15 0 0 0 634 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="659" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="716,271 705,275 705,266" style="fill:rgb(0,0,0)"/>
+<path d="M699,271L710,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M716,286L765,286L765,255L716,255Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="741" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="891,233 880,237 880,228" style="fill:rgb(0,0,0)"/>
+<path d="M765,271 L 773,271 Q 780,271 780,256 L 780,248 Q 780,233 795,233 L 871,233 L 886,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="895" cy="233" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,248L130,248A15 15 0 0 0 145 233A15 15 0 0 0 130 218L62,218A15 15 0 0 0 47 233A15 15 0 0 0 62 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="96" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTHING</text>
+<polygon points="47,233 35,237 35,228" style="fill:rgb(0,0,0)"/>
+<path d="M20,218 L 20,225 Q 20,233 31,233 L 41,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,233L880,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="638,233 626,237 626,228" style="fill:rgb(0,0,0)"/>
+<path d="M587,271 L 594,271 Q 602,271 602,256 L 602,248 Q 602,233 617,233 L 617,233 L 632,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M383,361A15 15 0 0 0 398 346A15 15 0 0 0 383 331A15 15 0 0 0 368 346A15 15 0 0 0 383 361Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="383" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="398,346 410,342 410,351" style="fill:rgb(0,0,0)"/>
+<path d="M572,271 L 579,271 Q 587,271 587,286 L 587,331 Q 587,346 572,346 L 419,346 L 404,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,308 210,320 201,320" style="fill:rgb(0,0,0)"/>
+<path d="M368,346 L 221,346 Q 206,346 206,331 L 206,329 L 206,314" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,308 L 206,286 Q 206,271 221,271 L 227,271 L 242,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="257,271 245,275 245,266" style="fill:rgb(0,0,0)"/>
+<path d="M194,271L251,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,286L366,286A15 15 0 0 0 381 271A15 15 0 0 0 366 255L272,255A15 15 0 0 0 257 271A15 15 0 0 0 272 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M381,271L464,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="865,97 869,108 860,108" style="fill:rgb(0,0,0)"/>
+<path d="M850,233 L 857,233 Q 865,233 865,218 L 865,117 L 865,102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="403,6 415,2 415,10" style="fill:rgb(0,0,0)"/>
+<path d="M865,97 L 865,21 Q 865,6 850,6 L 424,6 L 409,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,6 L 40,6 Q 25,6 25,21 L 25,51 Q 25,66 32,66 L 40,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/column-name-list.html">column-name-list:</a></b>
+<button id='x1807' onclick='hideorshow("x1807","x1808")'>show</button></p>
+ <div id='x1808' style='display:none;' class='imgcontainer'>
+ <div style="max-width:353px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 353.621 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="85,17 74,21 74,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L79,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M85,17L115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,32L230,32A15 15 0 0 0 245 17A15 15 0 0 0 230 2L136,2A15 15 0 0 0 121 17A15 15 0 0 0 136 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="290,17 279,21 279,12" style="fill:rgb(0,0,0)"/>
+<path d="M245,17L285,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2A15 15 0 0 0 290 17A15 15 0 0 0 306 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="306" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="344,17 332,21 332,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L338,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="347" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M183,70A15 15 0 0 0 198 55L198,55A15 15 0 0 0 183 39A15 15 0 0 0 168 55L168,55A15 15 0 0 0 183 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="198,55 210,50 210,59" style="fill:rgb(0,0,0)"/>
+<path d="M245,17 L 257,17 Q 269,17 269,32 L 269,40 Q 269,55 254,55 L 219,55 L 204,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M168,55 L 102,55 Q 87,55 87,40 L 87,32 Q 87,17 101,17 L 115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/indexed-column.html">indexed-column:</a></b>
+<button id='x1809' onclick='hideorshow("x1809","x1810")'>show</button></p>
+ <div id='x1810' style='display:none;' class='imgcontainer'>
+ <div style="max-width:696px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 696.36 102.6">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="246,47 235,51 235,43" style="fill:rgb(0,0,0)"/>
+<path d="M175,17 L 205,17 Q 220,17 220,32 L 220,32 Q 220,47 230,47 L 240,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,62L325,62A15 15 0 0 0 341 47L341,47A15 15 0 0 0 325 32L261,32A15 15 0 0 0 246 47L246,47A15 15 0 0 0 261 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="293" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="358,47 346,51 346,43" style="fill:rgb(0,0,0)"/>
+<path d="M341,47L352,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,62L478,62A15 15 0 0 0 493 47L493,47A15 15 0 0 0 478 32L373,32A15 15 0 0 0 358 47L358,47A15 15 0 0 0 373 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="511,47 499,51 499,43" style="fill:rgb(0,0,0)"/>
+<path d="M493,47L505,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,85 556,89 556,81" style="fill:rgb(0,0,0)"/>
+<path d="M511,47 L 518,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 Q 541,17 541,32 L 541,70 Q 541,85 551,85 L 561,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,100L613,100A15 15 0 0 0 628 85L628,85A15 15 0 0 0 613 70L582,70A15 15 0 0 0 567 85L567,85A15 15 0 0 0 582 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="645,85 633,89 633,81" style="fill:rgb(0,0,0)"/>
+<path d="M628,85L639,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="687,17 675,21 675,12" style="fill:rgb(0,0,0)"/>
+<path d="M645,85 L 652,85 Q 660,85 660,70 L 660,32 Q 660,17 670,17 L 681,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="690" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,70L100,70L100,39L50,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="175,55 163,59 163,50" style="fill:rgb(0,0,0)"/>
+<path d="M100,55L169,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M175,55 L 182,55 Q 190,55 190,40 L 190,32 Q 190,17 197,17 L 205,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,17 586,21 586,12" style="fill:rgb(0,0,0)"/>
+<path d="M358,17L592,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,17L675,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,62L599,62A15 15 0 0 0 614 47A15 15 0 0 0 599 32L582,32A15 15 0 0 0 567 47A15 15 0 0 0 582 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="645,47 633,51 633,43" style="fill:rgb(0,0,0)"/>
+<path d="M614,47L639,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M645,47 L 652,47 Q 660,47 660,40 L 660,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,47 556,51 556,43" style="fill:rgb(0,0,0)"/>
+<path d="M541,32 L 541,39 Q 541,47 551,47 L 561,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+
+
+<p>The INSERT statement comes in three basic forms.
+</p><ol>
+<li><p><b>INSERT INTO </b><i>table</i><b> VALUES(...);</b>
+</p><p>The first form (with the "VALUES" keyword) creates one or more
+new rows in
+an existing table. If the <span class='yyterm'>column-name</span> list after
+<span class='yyterm'>table-name</span> is omitted then the number
+of values inserted into each row
+must be the same as the number of columns in the table. In this case
+the result of evaluating the left-most expression from each term of
+the VALUES list is inserted into the left-most column of each new row,
+and so forth for each subsequent expression. If a <span class='yyterm'>column-name</span>
+list is specified, then the number of values in each term of the
+VALUE list must match the number of
+specified columns. Each of the named columns of the new row is populated
+with the results of evaluating the corresponding VALUES expression. Table
+columns that do not appear in the column list are populated with the
+<a href="lang_createtable.html#dfltval">default column value</a> (specified as part of the <a href="lang_createtable.html">CREATE TABLE</a> statement), or
+with NULL if no <a href="lang_createtable.html#dfltval">default value</a> is specified.
+
+</p></li><li><p><b>INSERT INTO </b><i>table</i><b> SELECT ...;</b>
+</p><p>The second form of the INSERT statement contains a <a href="lang_select.html">SELECT</a> statement
+instead of a VALUES clause. A new entry is inserted into the table for each
+row of data returned by executing the SELECT statement. If a column-list is
+specified, the number of columns in the result of the SELECT must be the same
+as the number of items in the column-list. Otherwise, if no column-list is
+specified, the number of columns in the result of the SELECT must be the same
+as the number of columns in the table. Any SELECT statement, including
+<a href="lang_select.html#compound">compound SELECTs</a> and SELECT statements with <a href="lang_select.html#orderby">ORDER BY</a> and/or <a href="lang_select.html#limitoffset">LIMIT</a> clauses,
+may be used in an INSERT statement of this form.
+
+</p><p>To avoid a parsing ambiguity, the SELECT statement should always
+contain a WHERE clause, even if that clause is simply "WHERE true",
+if the <a href="syntax/upsert-clause.html">upsert-clause</a> is present. Without the WHERE clause, the
+parser does not know if the token "ON" is part of a join constraint
+on the SELECT, or the beginning of the <a href="syntax/upsert-clause.html">upsert-clause</a>.
+
+</p></li><li><p><b>INSERT INTO </b><i>table</i><b> DEFAULT VALUES;</b>
+</p><p>The third form of an INSERT statement is with DEFAULT VALUES.
+The INSERT ... DEFAULT VALUES statement inserts a single new row into the
+named table. Each column of the new row is populated with its
+<a href="lang_createtable.html#dfltval">default value</a>, or with a NULL if no default value is specified
+as part of the column definition in the <a href="lang_createtable.html">CREATE TABLE</a> statement.
+The <a href="syntax/upsert-clause.html">upsert-clause</a> is not supported after DEFAULT VALUES.
+
+</p></li></ol>
+
+<p>
+The initial "INSERT" keyword can be replaced by
+"REPLACE" or "INSERT OR <i>action</i>" to specify an alternative
+constraint <a href="lang_conflict.html">conflict resolution algorithm</a> to use during
+that one INSERT command.
+For compatibility with MySQL, the parser allows the use of the
+single keyword <a href="lang_replace.html">REPLACE</a> as an
+alias for "INSERT OR REPLACE".
+
+</p><p>The optional "<i>schema-name</i><b>.</b>" prefix on the
+<span class='yyterm'>table-name</span>
+is supported for top-level INSERT statements only. The table name must be
+unqualified for INSERT statements that occur within <a href="lang_createtrigger.html">CREATE TRIGGER</a> statements.
+Similarly, the "DEFAULT VALUES" form of the INSERT statement is supported for
+top-level INSERT statements only and not for INSERT statements within
+triggers.
+</p><p>
+
+</p><p>The optional "AS <span class='yyterm'>alias</span>" phrase provides an alternative
+name for the table into which content is being inserted. The alias name
+can be used within WHERE and SET clauses of the <a href="lang_upsert.html">UPSERT</a>. If there is no
+<a href="syntax/upsert-clause.html">upsert-clause</a>, then the <span class='yyterm'>alias</span> is pointless, but also
+harmless.
+
+</p><p>See the separate <a href="lang_upsert.html">UPSERT</a> documentation for the additional trailing
+syntax that can cause an INSERT to behave as an UPDATE if the INSERT would
+otherwise violate a uniqueness constraint. The <a href="lang_upsert.html">upsert clause</a> is not
+allowed on an "INSERT ... DEFAULT VALUES".
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_insert.in?m=7f221e4bf55cc6cfa">2020-09-25 17:27:11</a> UTC </small></i></p>
+
diff --git a/www/lang_keywords.html b/www/lang_keywords.html
new file mode 100644
index 0000000..67c4aa6
--- /dev/null
+++ b/www/lang_keywords.html
@@ -0,0 +1,361 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Keywords</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite Keywords
+</div>
+</div>
+
+
+
+
+
+<p>The SQL standard specifies a large number of keywords which may not
+be used as the names of tables, indices, columns, databases, user-defined
+functions, collations, virtual table modules, or any other named object.
+The list of keywords is so long that few people can remember them all.
+For most SQL code, your safest bet is to never use any English language
+word as the name of a user-defined object.</p>
+
+<p>If you want to use a keyword as a name, you need to quote it. There
+are four ways of quoting keywords in SQLite:</p>
+
+<p>
+</p><blockquote>
+<table>
+<tr> <td valign="top"><b>'keyword'</b></td><td width="20"></td>
+ <td>A keyword in single quotes is a string literal.</td></tr>
+
+<tr> <td valign="top"><b>"keyword"</b></td><td></td>
+ <td>A keyword in double-quotes is an identifier.</td></tr>
+
+<tr> <td valign="top"><b>&#91;keyword&#93;</b></td><td></td>
+ <td>A keyword enclosed in square brackets is
+ an identifier. This is not standard SQL. This quoting mechanism
+ is used by MS Access and SQL Server and is included in SQLite for
+ compatibility.</td></tr>
+
+<tr> <td valign="top"><b>&#96;keyword&#96;</b></td><td></td>
+ <td>A keyword enclosed in grave accents (ASCII code 96) is
+ an identifier. This is not standard SQL. This quoting mechanism
+ is used by MySQL and is included in SQLite for
+ compatibility.</td></tr>
+</table>
+</blockquote>
+
+
+<p>For resilience when confronted with historical SQL statements, SQLite
+will sometimes bend the quoting rules above:</p>
+
+<ul>
+<li><p>If a keyword in single
+quotes (ex: <b>'key'</b> or <b>'glob'</b>) is used in a context where
+an identifier is allowed but where a string literal is not allowed, then
+the token is understood to be an identifier instead of a string literal.
+</p></li>
+
+<li><p>If a keyword in double
+quotes (ex: <b>"key"</b> or <b>"glob"</b>) is used in a context where
+it cannot be resolved to an identifier but where a string literal
+is allowed, then the token is understood to be a string literal instead
+of an identifier.</p></li>
+</ul>
+
+<p>Programmers are cautioned not to use the two exceptions described in
+the previous bullets. We emphasize that they exist only so that old
+and ill-formed SQL statements will run correctly. Future versions of
+SQLite might raise errors instead of accepting the malformed
+statements covered by the exceptions above.</p>
+
+<p>
+SQLite adds new keywords from time to time when it takes on new features.
+So to prevent your code from being broken by future enhancements, you should
+normally quote any identifier that is an English language word, even if
+you do not have to.
+</p>
+
+<p>
+The list below shows all possible keywords used by any build of
+SQLite regardless of <a href="compile.html">compile-time options</a>.
+Most reasonable configurations use most or all of these keywords,
+but some keywords may be omitted when SQL language features are
+disabled.
+Applications can use the
+<a href="c3ref/keyword_check.html">sqlite3_keyword_count()</a>, <a href="c3ref/keyword_check.html">sqlite3_keyword_name()</a>, and
+<a href="c3ref/keyword_check.html">sqlite3_keyword_check()</a> interfaces to determine the keywords
+recognized by SQLite at run-time.
+Regardless of the compile-time configuration, any identifier that is not on
+the following 147-element
+
+list is not a keyword to the SQL parser in SQLite:
+</p>
+
+<div class="columns" style="columns:11em auto;">
+<ul style="padding-top:0;">
+<li>ABORT</li>
+<li>ACTION</li>
+<li>ADD</li>
+<li>AFTER</li>
+<li>ALL</li>
+<li>ALTER</li>
+<li>ALWAYS</li>
+<li>ANALYZE</li>
+<li>AND</li>
+<li>AS</li>
+<li>ASC</li>
+<li>ATTACH</li>
+<li>AUTOINCREMENT</li>
+<li>BEFORE</li>
+<li>BEGIN</li>
+<li>BETWEEN</li>
+<li>BY</li>
+<li>CASCADE</li>
+<li>CASE</li>
+<li>CAST</li>
+<li>CHECK</li>
+<li>COLLATE</li>
+<li>COLUMN</li>
+<li>COMMIT</li>
+<li>CONFLICT</li>
+<li>CONSTRAINT</li>
+<li>CREATE</li>
+<li>CROSS</li>
+<li>CURRENT</li>
+<li>CURRENT_DATE</li>
+<li>CURRENT_TIME</li>
+<li>CURRENT_TIMESTAMP</li>
+<li>DATABASE</li>
+<li>DEFAULT</li>
+<li>DEFERRABLE</li>
+<li>DEFERRED</li>
+<li>DELETE</li>
+<li>DESC</li>
+<li>DETACH</li>
+<li>DISTINCT</li>
+<li>DO</li>
+<li>DROP</li>
+<li>EACH</li>
+<li>ELSE</li>
+<li>END</li>
+<li>ESCAPE</li>
+<li>EXCEPT</li>
+<li>EXCLUDE</li>
+<li>EXCLUSIVE</li>
+<li>EXISTS</li>
+<li>EXPLAIN</li>
+<li>FAIL</li>
+<li>FILTER</li>
+<li>FIRST</li>
+<li>FOLLOWING</li>
+<li>FOR</li>
+<li>FOREIGN</li>
+<li>FROM</li>
+<li>FULL</li>
+<li>GENERATED</li>
+<li>GLOB</li>
+<li>GROUP</li>
+<li>GROUPS</li>
+<li>HAVING</li>
+<li>IF</li>
+<li>IGNORE</li>
+<li>IMMEDIATE</li>
+<li>IN</li>
+<li>INDEX</li>
+<li>INDEXED</li>
+<li>INITIALLY</li>
+<li>INNER</li>
+<li>INSERT</li>
+<li>INSTEAD</li>
+<li>INTERSECT</li>
+<li>INTO</li>
+<li>IS</li>
+<li>ISNULL</li>
+<li>JOIN</li>
+<li>KEY</li>
+<li>LAST</li>
+<li>LEFT</li>
+<li>LIKE</li>
+<li>LIMIT</li>
+<li>MATCH</li>
+<li>MATERIALIZED</li>
+<li>NATURAL</li>
+<li>NO</li>
+<li>NOT</li>
+<li>NOTHING</li>
+<li>NOTNULL</li>
+<li>NULL</li>
+<li>NULLS</li>
+<li>OF</li>
+<li>OFFSET</li>
+<li>ON</li>
+<li>OR</li>
+<li>ORDER</li>
+<li>OTHERS</li>
+<li>OUTER</li>
+<li>OVER</li>
+<li>PARTITION</li>
+<li>PLAN</li>
+<li>PRAGMA</li>
+<li>PRECEDING</li>
+<li>PRIMARY</li>
+<li>QUERY</li>
+<li>RAISE</li>
+<li>RANGE</li>
+<li>RECURSIVE</li>
+<li>REFERENCES</li>
+<li>REGEXP</li>
+<li>REINDEX</li>
+<li>RELEASE</li>
+<li>RENAME</li>
+<li>REPLACE</li>
+<li>RESTRICT</li>
+<li>RETURNING</li>
+<li>RIGHT</li>
+<li>ROLLBACK</li>
+<li>ROW</li>
+<li>ROWS</li>
+<li>SAVEPOINT</li>
+<li>SELECT</li>
+<li>SET</li>
+<li>TABLE</li>
+<li>TEMP</li>
+<li>TEMPORARY</li>
+<li>THEN</li>
+<li>TIES</li>
+<li>TO</li>
+<li>TRANSACTION</li>
+<li>TRIGGER</li>
+<li>UNBOUNDED</li>
+<li>UNION</li>
+<li>UNIQUE</li>
+<li>UPDATE</li>
+<li>USING</li>
+<li>VACUUM</li>
+<li>VALUES</li>
+<li>VIEW</li>
+<li>VIRTUAL</li>
+<li>WHEN</li>
+<li>WHERE</li>
+<li>WINDOW</li>
+<li>WITH</li>
+<li>WITHOUT</li>
+</ul></div>
+
+</ul></div><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_keywords.in?m=0e6afea91e72a5138">2022-11-26 14:56:19</a> UTC </small></i></p>
+
diff --git a/www/lang_mathfunc.html b/www/lang_mathfunc.html
new file mode 100644
index 0000000..6235257
--- /dev/null
+++ b/www/lang_mathfunc.html
@@ -0,0 +1,318 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Built-In Mathematical SQL Functions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Built-In Mathematical SQL Functions
+</div>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>The math functions shown below are part of the
+<a href="amalgamation.html">SQLite amalgamation source file</a> but are only active
+if the amalgamation is compiled using the
+<a href="compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> compile-time option.
+
+</p><p>The arguments to math functions can be integers, floating-point numbers,
+or strings or blobs that look like integers or real numbers. If any argument
+is NULL or is a string or blob that is not readily converted into a number,
+then the function will return NULL.
+These functions also return NULL for domain errors, such as trying to
+take the square root of a negative number, or compute the arccosine of a
+value greater than 1.0 or less than -1.0.
+
+</p><p>The values returned by these functions are often approximations.
+For example, the <a href="lang_mathfunc.html#pi">pi()</a> function returns
+3.141592653589793115997963468544185161590576171875 which
+is about 1.22465e-16 too small, but it is the closest approximation available
+for IEEE754 doubles.
+
+<p>
+<div class='columns' style='columns: 15em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='lang_mathfunc.html#acos'>acos(X)</a></li>
+<li><a href='lang_mathfunc.html#acosh'>acosh(X)</a></li>
+<li><a href='lang_mathfunc.html#asin'>asin(X)</a></li>
+<li><a href='lang_mathfunc.html#asinh'>asinh(X)</a></li>
+<li><a href='lang_mathfunc.html#atan'>atan(X)</a></li>
+<li><a href='lang_mathfunc.html#atan2'>atan2(Y,X)</a></li>
+<li><a href='lang_mathfunc.html#atanh'>atanh(X)</a></li>
+<li><a href='lang_mathfunc.html#ceil'>ceil(X)</a></li>
+<li><a href='lang_mathfunc.html#ceil'>ceiling(X)</a></li>
+<li><a href='lang_mathfunc.html#cos'>cos(X)</a></li>
+<li><a href='lang_mathfunc.html#cosh'>cosh(X)</a></li>
+<li><a href='lang_mathfunc.html#degrees'>degrees(X)</a></li>
+<li><a href='lang_mathfunc.html#exp'>exp(X)</a></li>
+<li><a href='lang_mathfunc.html#floor'>floor(X)</a></li>
+<li><a href='lang_mathfunc.html#ln'>ln(X)</a></li>
+<li><a href='lang_mathfunc.html#log'>log(B,X)</a></li>
+<li><a href='lang_mathfunc.html#log'>log(X)</a></li>
+<li><a href='lang_mathfunc.html#log'>log10(X)</a></li>
+<li><a href='lang_mathfunc.html#log2'>log2(X)</a></li>
+<li><a href='lang_mathfunc.html#mod'>mod(X,Y)</a></li>
+<li><a href='lang_mathfunc.html#pi'>pi()</a></li>
+<li><a href='lang_mathfunc.html#pow'>pow(X,Y)</a></li>
+<li><a href='lang_mathfunc.html#pow'>power(X,Y)</a></li>
+<li><a href='lang_mathfunc.html#radians'>radians(X)</a></li>
+<li><a href='lang_mathfunc.html#sin'>sin(X)</a></li>
+<li><a href='lang_mathfunc.html#sinh'>sinh(X)</a></li>
+<li><a href='lang_mathfunc.html#sqrt'>sqrt(X)</a></li>
+<li><a href='lang_mathfunc.html#tan'>tan(X)</a></li>
+<li><a href='lang_mathfunc.html#tanh'>tanh(X)</a></li>
+<li><a href='lang_mathfunc.html#trunc'>trunc(X)</a></li>
+</ul>
+</div>
+
+
+</p><h1 id="descriptions_of_built_in_scalar_sql_math_functions"><span>2. </span>Descriptions of built-in scalar SQL math functions</h1>
+<dl>
+
+<a name="acos"></a>
+<dt><p><b>acos(<i>X</i>)</b></dt><dd><p>
+ Return the arccosine of X. The result is in radians.
+</dd>
+<a name="acosh"></a>
+<dt><p><b>acosh(<i>X</i>)</b></dt><dd><p>
+ Return the hyperbolic arccosine of X.
+</dd>
+<a name="asin"></a>
+<dt><p><b>asin(<i>X</i>)</b></dt><dd><p>
+ Return the arcsine of X. The result is in radians.
+</dd>
+<a name="asinh"></a>
+<dt><p><b>asinh(<i>X</i>)</b></dt><dd><p>
+ Return the hyperbolic arcsine of X.
+</dd>
+<a name="atan"></a>
+<dt><p><b>atan(<i>X</i>)</b></dt><dd><p>
+ Return the arctangent of X. The result is in radians.
+</dd>
+<a name="atan2"></a>
+<dt><p><b>atan2(<i>Y</i>,<i>X</i>)</b></dt><dd><p>
+ Return the arctangent of Y/X. The result is in radians. The
+ result is placed into correct quadrant depending on the signs
+ of X and Y.
+</dd>
+<a name="atanh"></a>
+<dt><p><b>atanh(<i>X</i>)</b></dt><dd><p>
+ Return the hyperbolic arctangent of X.
+</dd>
+<a name="ceil"></a>
+<dt><p><b>ceil(<i>X</i>)<br />ceiling(<i>X</i>)</b></dt><dd><p>
+ Return the first representable integer value greater than or equal to X.
+ For positive values of X, this routine rounds away from zero.
+ For negative values of X, this routine rounds toward zero.
+</dd>
+<a name="cos"></a>
+<dt><p><b>cos(<i>X</i>)</b></dt><dd><p>
+ Return the cosine of X. X is in radians.
+</dd>
+<a name="cosh"></a>
+<dt><p><b>cosh(<i>X</i>)</b></dt><dd><p>
+ Return the hyperbolic cosine of X.
+</dd>
+<a name="degrees"></a>
+<dt><p><b>degrees(<i>X</i>)</b></dt><dd><p>
+ Convert value X from radians into degrees.
+</dd>
+<a name="exp"></a>
+<dt><p><b>exp(<i>X</i>)</b></dt><dd><p>
+ Compute <i>e</i> (Euler's number, approximately 2.71828182845905) raised
+ to the power X.
+</dd>
+<a name="floor"></a>
+<dt><p><b>floor(<i>X</i>)</b></dt><dd><p>
+ Return the first representable integer value less than or equal to X.
+ For positive numbers, this function rounds toward zero.
+ For negative numbers, this function rounds away from zero.
+</dd>
+<a name="ln"></a>
+<dt><p><b>ln(<i>X</i>)</b></dt><dd><p>
+ Return the natural logarithm of X.
+</dd>
+<a name="log"></a>
+<dt><p><b>log(<i>X</i>)<br />log10(<i>X</i>)<br />log(<i>B</i>,<i>X</i>)</b></dt><dd><p>
+ Return the base-10 logarithm for X. Or, for the two-argument version,
+ return the base-B logarithm of X.
+ <p>
+ Compatibility note: SQLite works like PostgreSQL in that the log() function
+ computes a base-10 logarithm. Most other SQL database engines compute a
+ natural logarithm for log(). In the two-argument version of log(B,X), the
+ first argument is the base and the second argument is the operand. This is
+ the same as in PostgreSQL and MySQL, but is reversed from SQL Server which
+ uses the second argument as the base and the first argument as the operand.
+</dd>
+<a name="log2"></a>
+<dt><p><b>log2(<i>X</i>)</b></dt><dd><p>
+ Return the logarithm base-2 for the number X.
+</dd>
+<a name="mod"></a>
+<dt><p><b>mod(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ Return the remainder after dividing X by Y. This is similar to the '%'
+ operator, except that it works for non-integer arguments.
+</dd>
+<a name="pi"></a>
+<dt><p><b>pi()</b></dt><dd><p>
+ Return an approximation for &pi;.
+</dd>
+<a name="pow"></a>
+<dt><p><b>pow(<i>X</i>,<i>Y</i>)<br />power(<i>X</i>,<i>Y</i>)</b></dt><dd><p>
+ Compute X raised to the power Y.
+</dd>
+<a name="radians"></a>
+<dt><p><b>radians(<i>X</i>)</b></dt><dd><p>
+ Convert X from degrees into radians.
+</dd>
+<a name="sin"></a>
+<dt><p><b>sin(<i>X</i>)</b></dt><dd><p>
+ Return the sine of X. X is in radians.
+</dd>
+<a name="sinh"></a>
+<dt><p><b>sinh(<i>X</i>)</b></dt><dd><p>
+ Return the hyperbolic sine of X.
+</dd>
+<a name="sqrt"></a>
+<dt><p><b>sqrt(<i>X</i>)</b></dt><dd><p>
+ Return the square root of X. NULL is returned if X is negative.
+</dd>
+<a name="tan"></a>
+<dt><p><b>tan(<i>X</i>)</b></dt><dd><p>
+ Return the tangent of X. X is in radians.
+</dd>
+<a name="tanh"></a>
+<dt><p><b>tanh(<i>X</i>)</b></dt><dd><p>
+ Return the hyperbolic tangent of X.
+</dd>
+<a name="trunc"></a>
+<dt><p><b>trunc(<i>X</i>)</b></dt><dd><p>
+ Return the representable integer in between X and 0 (inclusive)
+ that is furthest away from zero. Or, in other words, return the
+ integer part of X, rounding toward zero.
+ The trunc() function is similar to <a href="lang_mathfunc.html#ceil">ceiling(X)</a> and <a href="lang_mathfunc.html#floor">floor(X)</a> except
+ that it always rounds toward zero whereas ceiling(X) and floor(X) round
+ up and down, respectively.
+</dd>
+
+</dl>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_mathfunc.in?m=6d187edbb6f761003">2021-12-20 21:50:59</a> UTC </small></i></p>
+
diff --git a/www/lang_naming.html b/www/lang_naming.html
new file mode 100644
index 0000000..86d4a09
--- /dev/null
+++ b/www/lang_naming.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Database Object Name Resolution</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<p>
+ In SQLite, a database object (a table, index, trigger or view) is identified
+ by the name of the object and the name of the database that it resides in.
+ Database objects may reside in the main database, the temp database, or in
+ an <a href="lang_attach.html">attached database</a>.
+
+<p>
+ The syntax of the <a href="lang_droptable.html">DROP TABLE</a>, <a href="lang_dropindex.html">DROP INDEX</a>, <a href="lang_dropview.html">DROP VIEW</a>, <a href="lang_droptrigger.html">DROP TRIGGER</a>,
+ <a href="lang_reindex.html">REINDEX</a>, <a href="lang_altertable.html">ALTER TABLE</a> and many other commands all permit the user to
+ specify a database object either by its name alone, or by a combination of
+ its name and the name of its database. If no database is specified as part
+ of the object reference, then SQLite searches the main, temp and all attached
+ databases for an object with a matching name. The temp database is searched
+ first, followed by the main database, followed all attached databases in the
+ order that they were attached. The reference resolves to the first match
+ found. For example:
+
+<pre>
+ /* Add a table named 't1' to the temp, main and an attached database */
+ ATTACH 'file.db' AS aux;
+ CREATE TABLE t1(x, y);
+ CREATE TEMP TABLE t1(x, y);
+ CREATE TABLE aux.t1(x, y);
+
+ DROP TABLE t1; /* Drop table in temp database */
+ DROP TABLE t1; /* Drop table in main database */
+ DROP TABLE t1; /* Drop table in aux database */
+</pre>
+
+<p>
+ If a schema name is specified as part of an object reference, it must be
+ either "main", or "temp" or the schema-name of an attached database.
+ Like other SQL identifiers, schema names are case-insensitive.
+ If a schema name is specified, then only that one schema is searched for
+ the named object.
+
+<p>
+ Most object references may only resolve to a specific type of object (for
+ example a reference that is part of a DROP TABLE statement may only resolve
+ to a table object, not an index, trigger or view). However in some contexts
+ (e.g. <a href="lang_reindex.html">REINDEX</a>) an object reference may be resolve to more than one type
+ of object. When searching database schemas for a named object, objects of
+ types that cannot be used in the context of the reference are always
+ ignored.
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_naming.in?m=eec821ac8696f20d2">2020-02-10 20:33:26</a> UTC </small></i></p>
+
diff --git a/www/lang_reindex.html b/www/lang_reindex.html
new file mode 100644
index 0000000..9cc4713
--- /dev/null
+++ b/www/lang_reindex.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>REINDEX</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+REINDEX
+</div>
+</div>
+
+
+
+
+<p><b><a href="syntax/reindex-stmt.html">reindex-stmt:</a></b>
+<button id='x1811' onclick='hideorshow("x1811","x1812")'>hide</button></p>
+ <div id='x1812' class='imgcontainer'>
+ <div style="max-width:619px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 619.286 137.376">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L111,32A15 15 0 0 0 126 17A15 15 0 0 0 111 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="79" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REINDEX</text>
+<polygon points="167,82 156,86 156,77" style="fill:rgb(0,0,0)"/>
+<path d="M126,17 L 133,17 Q 141,17 141,32 L 141,67 Q 141,82 151,82 L 162,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,97L279,97A15 15 0 0 0 294 82A15 15 0 0 0 279 67L182,67A15 15 0 0 0 167 82A15 15 0 0 0 182 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="317,82 305,86 305,77" style="fill:rgb(0,0,0)"/>
+<path d="M294,82L311,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M332,97A15 15 0 0 0 347 82A15 15 0 0 0 332 67A15 15 0 0 0 317 82A15 15 0 0 0 332 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="383,82 372,86 372,77" style="fill:rgb(0,0,0)"/>
+<path d="M347,82L377,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="425,120 413,124 413,115" style="fill:rgb(0,0,0)"/>
+<path d="M383,82 L 391,82 Q 398,82 398,97 L 398,105 Q 398,120 409,120 L 419,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,135L518,135A15 15 0 0 0 533 120A15 15 0 0 0 518 104L440,104A15 15 0 0 0 425 120A15 15 0 0 0 440 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="479" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<polygon points="568,120 556,124 556,115" style="fill:rgb(0,0,0)"/>
+<path d="M533,120L562,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,17 598,21 598,12" style="fill:rgb(0,0,0)"/>
+<path d="M568,120 L 575,120 Q 583,120 583,105 L 583,32 Q 583,17 593,17 L 604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="613" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="425,82 413,86 413,77" style="fill:rgb(0,0,0)"/>
+<path d="M383,82L419,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,97L515,97A15 15 0 0 0 530 82A15 15 0 0 0 515 67L440,67A15 15 0 0 0 425 82A15 15 0 0 0 440 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="568,82 556,86 556,77" style="fill:rgb(0,0,0)"/>
+<path d="M530,82L562,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M568,82 L 575,82 Q 583,82 583,74 L 583,67" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="383,17 372,21 372,12" style="fill:rgb(0,0,0)"/>
+<path d="M126,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M383,17L598,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="167,44 156,48 156,40" style="fill:rgb(0,0,0)"/>
+<path d="M126,17 L 133,17 Q 141,17 141,30 Q 141,44 151,44 L 162,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,59L288,59A15 15 0 0 0 303 44L303,44A15 15 0 0 0 288 29L182,29A15 15 0 0 0 167 44L167,44A15 15 0 0 0 182 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="235" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="568,44 556,48 556,40" style="fill:rgb(0,0,0)"/>
+<path d="M303,44L562,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M568,44 L 575,44 Q 583,44 583,36 L 583,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,120 219,124 219,115" style="fill:rgb(0,0,0)"/>
+<path d="M141,67 L 141,105 Q 141,120 156,120 L 210,120 L 225,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M231,120 L 347,120 Q 362,120 362,105 L 362,97 Q 362,82 370,82 L 377,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<p>The REINDEX command is used to delete and recreate indices from scratch.
+This is useful when the definition of a collation sequence has changed, or
+when there are <a href="expridx.html">indexes on expressions</a> involving a function whose definition
+has changed.
+</p>
+
+<p>If the REINDEX keyword is not followed by a collation-sequence or database
+object identifier, then all indices in all attached databases are rebuilt.
+
+</p><p>If the REINDEX keyword is followed by a collation-sequence name, then
+all indices in all attached databases that use the named collation sequences
+are recreated.
+
+</p><p>Or, if the argument attached to the REINDEX identifies a specific
+database table, then all indices attached to the database table are rebuilt.
+If it identifies a specific database index, then just that index is recreated.
+
+</p><p>For a command of the form "REINDEX <i>name</i>", a match
+against <span class='yyterm'>collation-name</span> takes precedence over a match
+against <span class='yyterm'>index-name</span> or <span class='yyterm'>table-name</span>.
+This ambiguity in the syntax may be avoided by always specifying a
+<span class='yyterm'>schema-name</span> when reindexing a specific table or index.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_reindex.in?m=a26831b152af3ea06">2020-04-29 04:02:25</a> UTC </small></i></p>
+
diff --git a/www/lang_replace.html b/www/lang_replace.html
new file mode 100644
index 0000000..28517dd
--- /dev/null
+++ b/www/lang_replace.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>REPLACE</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+REPLACE
+</div>
+</div>
+
+
+
+
+<p>The REPLACE command is an alias for the "<a href="lang_conflict.html">INSERT OR REPLACE</a>"
+variant of the <a href="lang_insert.html">INSERT</a> command.
+This alias is provided for compatibility other SQL database engines. See the
+<a href="lang_insert.html">INSERT</a> command documentation for additional information.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_replace.in?m=e432c86fb7239d5e6">2020-02-10 20:33:26</a> UTC </small></i></p>
+
diff --git a/www/lang_returning.html b/www/lang_returning.html
new file mode 100644
index 0000000..91ff78e
--- /dev/null
+++ b/www/lang_returning.html
@@ -0,0 +1,2586 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>RETURNING</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+RETURNING
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc2"><a href="#typical_use">1.1. Typical Use</a></div>
+<div class="fancy-toc1"><a href="#details">2. Details</a></div>
+<div class="fancy-toc2"><a href="#processing_order">2.1. Processing Order</a></div>
+<div class="fancy-toc1"><a href="#limitations_and_caveats">3. Limitations And Caveats</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p><b><a href="syntax/returning-clause.html">returning-clause:</a></b>
+<button id='x1813' onclick='hideorshow("x1813","x1814")'>hide</button></p>
+ <div id='x1814' class='imgcontainer'>
+ <div style="max-width:628px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 628.709 140.4">
+<circle cx="5" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="27,47 15,51 15,43" style="fill:rgb(0,0,0)"/>
+<path d="M9,47L21,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M42,62L132,62A15 15 0 0 0 147 47A15 15 0 0 0 132 32L42,32A15 15 0 0 0 27 47A15 15 0 0 0 42 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RETURNING</text>
+<polygon points="237,47 226,51 226,43" style="fill:rgb(0,0,0)"/>
+<path d="M147,47L232,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,62L287,62L287,32L237,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="328,77 317,82 317,73" style="fill:rgb(0,0,0)"/>
+<path d="M287,47 L 294,47 Q 302,47 302,62 L 302,62 Q 302,77 312,77 L 322,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M343,92L347,92A15 15 0 0 0 362 77L362,77A15 15 0 0 0 347 62L343,62A15 15 0 0 0 328 77L328,77A15 15 0 0 0 343 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="398,77 387,82 387,73" style="fill:rgb(0,0,0)"/>
+<path d="M362,77L393,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M414,92L501,92A15 15 0 0 0 516 77L516,77A15 15 0 0 0 501 62L414,62A15 15 0 0 0 398 77L398,77A15 15 0 0 0 414 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="539,77 528,82 528,73" style="fill:rgb(0,0,0)"/>
+<path d="M516,77L534,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="581,47 569,51 569,43" style="fill:rgb(0,0,0)"/>
+<path d="M539,77 L 547,77 Q 554,77 554,62 L 554,62 Q 554,47 565,47 L 575,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,47 607,51 607,43" style="fill:rgb(0,0,0)"/>
+<path d="M581,47L613,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="622" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="345,101 334,106 334,97" style="fill:rgb(0,0,0)"/>
+<path d="M302,62 L 302,86 Q 302,101 317,101 L 325,101 L 340,101" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,101 L 362,101 Q 377,101 377,89 Q 377,77 385,77 L 392,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,47 441,51 441,43" style="fill:rgb(0,0,0)"/>
+<path d="M287,47L447,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,47L607,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,138A15 15 0 0 0 406 123A15 15 0 0 0 391 108A15 15 0 0 0 376 123A15 15 0 0 0 391 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="376,123 365,127 365,118" style="fill:rgb(0,0,0)"/>
+<path d="M147,47 L 196,47 Q 211,47 211,62 L 211,108 Q 211,123 226,123 L 355,123 L 370,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,123 528,127 528,118" style="fill:rgb(0,0,0)"/>
+<path d="M406,123L534,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,123 L 547,123 Q 554,123 554,108 L 554,77 L 554,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,32A15 15 0 0 0 406 17A15 15 0 0 0 391 2A15 15 0 0 0 376 17A15 15 0 0 0 391 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="406,17 418,12 418,21" style="fill:rgb(0,0,0)"/>
+<path d="M581,47 L 588,47 Q 596,47 596,32 L 596,32 Q 596,17 581,17 L 427,17 L 412,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M376,17 L 174,17 Q 159,17 159,32 L 159,32 Q 159,47 169,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1815' onclick='hideorshow("x1815","x1816")'>show</button></p>
+ <div id='x1816' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1817' onclick='hideorshow("x1817","x1818")'>show</button></p>
+ <div id='x1818' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1819' onclick='hideorshow("x1819","x1820")'>show</button></p>
+ <div id='x1820' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1821' onclick='hideorshow("x1821","x1822")'>show</button></p>
+ <div id='x1822' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1823' onclick='hideorshow("x1823","x1824")'>show</button></p>
+ <div id='x1824' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1825' onclick='hideorshow("x1825","x1826")'>show</button></p>
+ <div id='x1826' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1827' onclick='hideorshow("x1827","x1828")'>show</button></p>
+ <div id='x1828' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1829' onclick='hideorshow("x1829","x1830")'>show</button></p>
+ <div id='x1830' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1831' onclick='hideorshow("x1831","x1832")'>show</button></p>
+ <div id='x1832' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1833' onclick='hideorshow("x1833","x1834")'>show</button></p>
+ <div id='x1834' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1835' onclick='hideorshow("x1835","x1836")'>show</button></p>
+ <div id='x1836' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1837' onclick='hideorshow("x1837","x1838")'>show</button></p>
+ <div id='x1838' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1839' onclick='hideorshow("x1839","x1840")'>show</button></p>
+ <div id='x1840' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1841' onclick='hideorshow("x1841","x1842")'>show</button></p>
+ <div id='x1842' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1843' onclick='hideorshow("x1843","x1844")'>show</button></p>
+ <div id='x1844' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1845' onclick='hideorshow("x1845","x1846")'>show</button></p>
+ <div id='x1846' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1847' onclick='hideorshow("x1847","x1848")'>show</button></p>
+ <div id='x1848' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1849' onclick='hideorshow("x1849","x1850")'>show</button></p>
+ <div id='x1850' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1851' onclick='hideorshow("x1851","x1852")'>show</button></p>
+ <div id='x1852' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1853' onclick='hideorshow("x1853","x1854")'>show</button></p>
+ <div id='x1854' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+<p>
+The RETURNING clause is not a statement itself, but a clause that can
+optionally appear near the end of top-level
+<a href="lang_delete.html">DELETE</a>, <a href="lang_insert.html">INSERT</a>, and <a href="lang_update.html">UPDATE</a> statements.
+The effect of the RETURNING clause is to cause the statement to return
+one result row for each database row that is deleted, inserted, or updated.
+ RETURNING is not standard SQL. It is an extension.
+SQLite's syntax for RETURNING is modelled after
+<a href="https://www.postgresql.org">PostgreSQL</a>.
+
+</p><p>
+The RETURNING syntax has been supported by SQLite since version 3.35.0
+(2021-03-12).
+
+</p><h2 id="typical_use"><span>1.1. </span>Typical Use</h2>
+
+<p>
+The RETURNING clause is designed to provide the application with the
+values of columns that are filled in automatically by SQLite. For
+example:
+
+</p><div class="codeblock"><pre>CREATE TABLE t0(
+ a INTEGER PRIMARY KEY,
+ b DATE DEFAULT CURRENT_TIMESTAMP,
+ c INTEGER
+);
+INSERT INTO t0(c) VALUES(random()) RETURNING *;
+</pre></div>
+
+<p>
+In the INSERT statement above, SQLite computes the values for all
+three columns. The RETURNING clause causes SQLite to report the chosen
+values back to the application. This saves the application from having
+to issue a separate query to figure out exactly what values were inserted.
+
+</p><h1 id="details"><span>2. </span>Details</h1>
+
+<p>
+The RETURNING clause is followed by a comma-separated list of
+expressions. These expressions are similar to the expressions following
+the SELECT keyword in a <a href="lang_select.html">SELECT statement</a> in that they
+define the values of the columns in the result set. Each expression
+defines the value for a single column. Each expression may be
+optionally followed by an AS clause that determines the name of
+the result column. The special "*" expression expands into a list
+of all <a href="vtab.html#hiddencol">non-hidden</a> columns of the table being deleted,
+inserted, or updated.
+
+</p><p>
+For INSERT and UPDATE statements, references to columns in the table
+being modified refer to the value of that column <i>after</i> the change
+has been applied. For DELETE statements, references to columns mean
+the value <i>before</i> the delete occurs.
+
+</p><p>
+The RETURNING clause only returns rows that are directly modified
+by the DELETE, INSERT, or UPDATE statement. The RETURNING clause
+does not report any additional database changes
+caused by <a href="foreignkeys.html">foreign key constraints</a> or <a href="lang_createtrigger.html">triggers</a>.
+
+</p><p>
+A RETURNING clause for an <a href="lang_upsert.html">UPSERT</a> reports both inserted and
+updated rows.
+
+</p><h2 id="processing_order"><span>2.1. </span>Processing Order</h2>
+
+<p>
+When a DELETE, INSERT, or UPDATE statement with a RETURNING clause
+is run, all of the database changes occur during the first invocation
+of <a href="c3ref/step.html">sqlite3_step()</a>. The RETURNING clause output is accumulated in
+memory. The first sqlite3_step() call returns one row of RETURNING
+output and subsequent rows of RETURNING output are returned by subsequent
+calls to sqlite3_step().
+To put this another way, all RETURNING clause output is embargoed
+until after all database modification actions are completed.
+
+</p><p>
+This means that if a statement has a RETURNING clause that generates
+a large amount of output, either many rows or large
+string or BLOB values, then the statement might use a lot of
+temporary memory to hold those values while it is running.
+
+</p><p>
+The first prototype of the RETURNING clause returned
+values as they were generated. That approach used less memory, but
+it had other problems:
+
+</p><ol>
+<li><p>
+If the calls sqlite3_step() for two or more DML statements
+where interleaved and if one of the
+statements hit a constraint failure and aborted, reverting its
+changes, then that could disrupt the operation of the other
+DML statement. This could not corrupt the database file, but
+it could yield surprising and difficult-to-explain results in
+the database.
+
+</p></li><li><p>
+If an application failed to call sqlite3_step() repeatedly until
+it received SQLITE_DONE, then some of the database changes might
+never occur.
+
+</p></li><li><p>
+The order of operations was different from client/server database
+engines like PostgreSQL, which might cause portability issues
+for some applications.
+</p></li></ol>
+
+<p>
+For these reasons, the current implementation was modified so that
+all database changes happen before any RETURNING output is emitted.
+
+</p><p>
+While SQLite does guarantee that all database changes will occur
+before any RETURNING output is emitted, it does <i>not</i> guarantee
+that the order of individual RETURNING rows will match the order in
+which those rows were changed in the database. The output order
+for the RETURNING rows is arbitrary and is not necessarily related
+to the order in which the rows were processed internally.
+
+</p><h1 id="limitations_and_caveats"><span>3. </span>Limitations And Caveats</h1>
+
+<ol>
+<li><p>
+The RETURNING clause is not available on DELETE and UPDATE statements
+against <a href="vtab.html">virtual tables</a>.
+This limitation might be removed in future versions of SQLite.
+
+</p></li><li><p>
+The RETURNING clause is only available in top-level DELETE, INSERT,
+and UPDATE statements. The RETURNING clause cannot be used by
+statements within triggers.
+
+</p></li><li><p>
+Even though a DML statement with a RETURNING clause returns table content,
+it cannot be used as a subquery. The RETURNING clause can only return
+data to the application. It is not currently possible to divert the
+RETURNING output into another table or query. PostgreSQL has the ability
+to use a DML statement with a RETURNING clause like a view in a
+<a href="lang_with.html">common table expressions</a>. SQLite does not currently have that
+ability, though that is something that might be added in a future release.
+
+</p></li><li><p>
+The rows emitted by the RETURNING clause appear in an arbitrary order.
+That order might change depending on the database schema, upon the specific
+release of SQLite used, or even from one execution of the same statement
+to the next.
+There is no way to cause the output rows to appear in a particular order.
+Even if SQLite is compiled with the <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a>
+option such that ORDER BY clauses are allowed on DELETE and UPDATE
+statements, those ORDER BY clauses do not constrain the output order
+of RETURNING.
+
+</p></li><li><p>
+The values emitted by the RETURNING clause are the values as seen
+by the top-level DELETE, INSERT, or UPDATE statement
+and do not reflect any subsequent value changes made by <a href="lang_createtrigger.html">triggers</a>.
+Thus, if the database includes AFTER triggers that modifies some
+of the values of each row inserted or updated, the RETURNING clause
+emits the original values that are computed before those triggers run.
+
+</p></li><li><p>
+The RETURNING clause may not contain top-level <a href="lang_aggfunc.html">aggregate functions</a> or
+<a href="windowfunctions.html">window functions</a>. If there are subqueries in the RETURNING clause,
+those subqueries may contain aggregates and window functions, but
+aggregates cannot occur at the top level.
+
+</p></li><li><p>
+The RETURNING clause may only reference the table being modified.
+In an <a href="lang_update.html#upfrom">UPDATE FROM</a> statement, the auxiliary tables named in the FROM
+clause may not participate in the RETURNING clause.
+
+</p></li></ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_returning.in?m=ddc323d345f010708">2021-04-02 15:31:42</a> UTC </small></i></p>
+
diff --git a/www/lang_savepoint.html b/www/lang_savepoint.html
new file mode 100644
index 0000000..4f5294d
--- /dev/null
+++ b/www/lang_savepoint.html
@@ -0,0 +1,325 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Savepoints</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Savepoints
+</div>
+</div>
+
+
+
+
+<h1 id="syntax"><span>1. </span>Syntax</h1>
+
+<p><b><a href="syntax/savepoint-stmt.html">savepoint-stmt:</a></b>
+<button id='x1855' onclick='hideorshow("x1855","x1856")'>hide</button></p>
+ <div id='x1856' class='imgcontainer'>
+ <div style="max-width:346px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 346.003 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L131,32A15 15 0 0 0 146 17A15 15 0 0 0 131 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="89" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SAVEPOINT</text>
+<polygon points="169,17 158,21 158,12" style="fill:rgb(0,0,0)"/>
+<path d="M146,17L164,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M185,32L298,32A15 15 0 0 0 313 17A15 15 0 0 0 298 2L185,2A15 15 0 0 0 169 17A15 15 0 0 0 185 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="241" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-name</text>
+<polygon points="336,17 325,21 325,12" style="fill:rgb(0,0,0)"/>
+<path d="M313,17L330,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="340" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/release-stmt.html">release-stmt:</a></b>
+<button id='x1857' onclick='hideorshow("x1857","x1858")'>hide</button></p>
+ <div id='x1858' class='imgcontainer'>
+ <div style="max-width:488px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 488.736 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L111,32A15 15 0 0 0 126 17A15 15 0 0 0 111 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="79" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RELEASE</text>
+<polygon points="162,17 150,21 150,12" style="fill:rgb(0,0,0)"/>
+<path d="M126,17L156,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,32L261,32A15 15 0 0 0 276 17A15 15 0 0 0 261 2L177,2A15 15 0 0 0 162 17A15 15 0 0 0 177 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SAVEPOINT</text>
+<polygon points="312,17 301,21 301,12" style="fill:rgb(0,0,0)"/>
+<path d="M276,17L306,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M327,32L441,32A15 15 0 0 0 456 17A15 15 0 0 0 441 2L327,2A15 15 0 0 0 312 17A15 15 0 0 0 327 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-name</text>
+<polygon points="479,17 467,21 467,12" style="fill:rgb(0,0,0)"/>
+<path d="M456,17L473,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="482" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="219,47 207,51 207,43" style="fill:rgb(0,0,0)"/>
+<path d="M126,17 L 133,17 Q 141,17 141,32 L 141,32 Q 141,47 156,47 L 198,47 L 213,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,47 L 276,47 Q 291,47 291,32 L 291,32 Q 291,17 299,17 L 306,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/rollback-stmt.html">rollback-stmt:</a></b>
+<button id='x1859' onclick='hideorshow("x1859","x1860")'>hide</button></p>
+ <div id='x1860' class='imgcontainer'>
+ <div style="max-width:801px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 801.734 67.392">
+<circle cx="5" cy="33" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,33 20,38 20,29" style="fill:rgb(0,0,0)"/>
+<path d="M9,33L26,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,48L125,48A15 15 0 0 0 140 33A15 15 0 0 0 125 18L47,18A15 15 0 0 0 32 33A15 15 0 0 0 47 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="176,33 164,38 164,29" style="fill:rgb(0,0,0)"/>
+<path d="M140,33L170,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,48L303,48A15 15 0 0 0 318 33A15 15 0 0 0 303 18L191,18A15 15 0 0 0 176 33A15 15 0 0 0 191 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRANSACTION</text>
+<polygon points="390,33 378,38 378,29" style="fill:rgb(0,0,0)"/>
+<path d="M318,33L384,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M405,48L411,48A15 15 0 0 0 426 33A15 15 0 0 0 411 18L405,18A15 15 0 0 0 390 33A15 15 0 0 0 405 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="408" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TO</text>
+<polygon points="462,33 450,38 450,29" style="fill:rgb(0,0,0)"/>
+<path d="M426,33L456,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,48L561,48A15 15 0 0 0 576 33A15 15 0 0 0 561 18L477,18A15 15 0 0 0 462 33A15 15 0 0 0 477 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SAVEPOINT</text>
+<polygon points="612,33 601,38 601,29" style="fill:rgb(0,0,0)"/>
+<path d="M576,33L606,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M627,48L741,48A15 15 0 0 0 756 33A15 15 0 0 0 741 18L627,18A15 15 0 0 0 612 33A15 15 0 0 0 627 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="684" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-name</text>
+<polygon points="792,33 780,38 780,29" style="fill:rgb(0,0,0)"/>
+<path d="M756,33L786,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="795" cy="33" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,6 507,10 507,2" style="fill:rgb(0,0,0)"/>
+<path d="M426,33 L 433,33 Q 441,33 441,20 Q 441,6 456,6 L 498,6 L 513,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,6 L 576,6 Q 591,6 591,20 Q 591,33 599,33 L 606,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,60 507,65 507,56" style="fill:rgb(0,0,0)"/>
+<path d="M352,33 L 359,33 Q 367,33 367,47 Q 367,60 382,60 L 498,60 L 513,60" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,60 L 756,60 Q 771,60 771,47 Q 771,33 778,33 L 786,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="247,60 235,65 235,56" style="fill:rgb(0,0,0)"/>
+<path d="M140,33 L 147,33 Q 155,33 155,47 Q 155,60 170,60 L 226,60 L 241,60" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,60 L 318,60 Q 333,60 333,47 Q 333,33 340,33 L 348,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<h1 id="savepoints"><span>2. </span>Savepoints</h1>
+
+<p> SAVEPOINTs are a method of creating transactions, similar to
+<a href="lang_transaction.html">BEGIN</a> and <a href="lang_transaction.html">COMMIT</a>, except that the SAVEPOINT and RELEASE commands
+are named and may be nested.</p>
+
+<p> The SAVEPOINT command starts a new transaction with a name.
+The transaction names need not be unique.
+A SAVEPOINT can be started either within or outside of
+a <a href="lang_transaction.html">BEGIN</a>...<a href="lang_transaction.html">COMMIT</a>. When a SAVEPOINT is the outer-most savepoint
+and it is not within a <a href="lang_transaction.html">BEGIN</a>...<a href="lang_transaction.html">COMMIT</a> then the behavior is the
+same as BEGIN DEFERRED TRANSACTION.</p>
+
+<p>The ROLLBACK TO command reverts the state of the database back to what
+it was just after the corresponding SAVEPOINT. Note that unlike that
+plain <a href="lang_transaction.html">ROLLBACK</a> command (without the TO keyword) the ROLLBACK TO command
+does not cancel the transaction. Instead of cancelling the transaction,
+the ROLLBACK TO command restarts the transaction again at the beginning.
+All intervening SAVEPOINTs are canceled, however.</p>
+
+<p>The RELEASE command is like a <a href="lang_transaction.html">COMMIT</a> for a SAVEPOINT.
+The RELEASE command causes all savepoints back to and including the
+most recent savepoint with a matching name to be removed from the
+transaction stack. The RELEASE of an inner transaction
+does not cause any changes to be written to the database file; it merely
+removes savepoints from the transaction stack such that it is
+no longer possible to ROLLBACK TO those savepoints.
+If a RELEASE command releases the outermost savepoint, so
+that the transaction stack becomes empty, then RELEASE is the same
+as <a href="lang_transaction.html">COMMIT</a>.
+The <a href="lang_transaction.html">COMMIT</a> command may be used to release all savepoints and
+commit the transaction even if the transaction was originally started
+by a SAVEPOINT command instead of a <a href="lang_transaction.html">BEGIN</a> command.</p>
+
+<p>If the savepoint-name in a RELEASE command does not match any
+savepoint currently in the transaction stack, then no savepoints are
+released, the database is unchanged, and the RELEASE command returns
+an error.</p>
+
+<p>Note that an inner transaction might commit (using the RELEASE command)
+but then later have its work undone by a ROLLBACK in an outer transaction.
+A power failure or program crash or OS crash will cause the outer-most
+transaction to rollback, undoing all changes that have occurred within
+that outer transaction, even changes that have supposedly been "committed"
+by the RELEASE command. Content is not actually committed on the disk
+until the outermost transaction commits.</p>
+
+<p>There are several ways of thinking about the RELEASE command:</p>
+
+<ul>
+<li><p>
+Some people view RELEASE as the equivalent of COMMIT for a SAVEPOINT.
+This is an acceptable point of view as long as one remembers that the
+changes committed by an inner transaction might later be undone by a
+rollback in an outer transaction.</p></li>
+
+<li><p>
+Another view of RELEASE is that it merges a named transaction into its
+parent transaction, so that the named transaction and its parent become
+the same transaction. After RELEASE, the named transaction and its parent
+will commit or rollback together, whatever their fate may be.
+</p></li>
+
+<li><p>
+One can also think of savepoints as
+"marks" in the transaction timeline. In this view, the SAVEPOINT command
+creates a new mark, the ROLLBACK TO command rewinds the timeline back
+to a point just after the named mark, and the RELEASE command
+erases marks from the timeline without actually making any
+changes to the database.
+</p></li>
+</ul>
+
+
+
+<h1 id="transaction_nesting_rules"><span>3. </span>Transaction Nesting Rules</h1>
+
+<p>The last transaction started will be the first
+transaction committed or rolled back.</p>
+
+<p>The <a href="lang_transaction.html">BEGIN</a> command only works if the transaction stack is empty, or
+in other words if there are no pending transactions. If the transaction
+stack is not empty when the <a href="lang_transaction.html">BEGIN</a> command is invoked, then the command
+fails with an error.</p>
+
+<p>The <a href="lang_transaction.html">COMMIT</a> command commits all outstanding transactions and leaves
+the transaction stack empty.</p>
+
+<p>The RELEASE command starts with the most recent addition to the
+transaction stack and releases savepoints backwards
+in time until it releases a savepoint with a matching savepoint-name.
+Prior savepoints, even savepoints with matching savepoint-names, are
+unchanged.
+If the RELEASE command causes the
+transaction stack to become empty (if the RELEASE command releases the
+outermost transaction from the stack) then the transaction commits.</p>
+
+<p>The <a href="lang_transaction.html">ROLLBACK</a> command without a TO clause rolls backs all transactions
+and leaves the transaction stack empty.</p>
+
+<p>The ROLLBACK command with a TO clause rolls back transactions going
+backwards in time back to the most recent SAVEPOINT with a matching name.
+The SAVEPOINT with the matching name remains on the transaction stack,
+but all database changes that occurred after that SAVEPOINT was created
+are rolled back. If the savepoint-name in a ROLLBACK TO command does not
+match any SAVEPOINT on the stack, then the ROLLBACK command fails with an
+error and leaves the state of the database unchanged.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_savepoint.in?m=60d80524de533cc91">2020-02-10 17:23:44</a> UTC </small></i></p>
+
diff --git a/www/lang_select.html b/www/lang_select.html
new file mode 100644
index 0000000..3857180
--- /dev/null
+++ b/www/lang_select.html
@@ -0,0 +1,16070 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SELECT</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SELECT
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#simple_select_processing">2. Simple Select Processing</a></div>
+<div class="fancy-toc2"><a href="#determination_of_input_data_from_clause_processing_">2.1. Determination of input data (FROM clause processing)</a></div>
+<div class="fancy-toc2"><a href="#special_handling_of_cross_join_">2.2. Special handling of CROSS JOIN.</a></div>
+<div class="fancy-toc2"><a href="#where_clause_filtering_">2.3. WHERE clause filtering.</a></div>
+<div class="fancy-toc2"><a href="#generation_of_the_set_of_result_rows">2.4. Generation of the set of result rows</a></div>
+<div class="fancy-toc2"><a href="#bare_columns_in_an_aggregate_query">2.5. Bare columns in an aggregate query</a></div>
+<div class="fancy-toc2"><a href="#removal_of_duplicate_rows_distinct_processing_">2.6. Removal of duplicate rows (DISTINCT processing)</a></div>
+<div class="fancy-toc1"><a href="#compound_select_statements">3. Compound Select Statements</a></div>
+<div class="fancy-toc1"><a href="#the_order_by_clause">4. The ORDER BY clause</a></div>
+<div class="fancy-toc1"><a href="#the_limit_clause">5. The LIMIT clause</a></div>
+<div class="fancy-toc1"><a href="#the_values_clause">6. The VALUES clause</a></div>
+<div class="fancy-toc1"><a href="#the_with_clause">7. The WITH Clause</a></div>
+<div class="fancy-toc1"><a href="#table_valued_functions_in_the_from_clause">8. Table-valued Functions In The FROM Clause</a></div>
+<div class="fancy-toc1"><a href="#deviations_from_standard_sql">9. Deviations From Standard SQL</a></div>
+<div class="fancy-toc2"><a href="#strange_join_names">9.1. Strange JOIN names</a></div>
+<div class="fancy-toc2"><a href="#precedence_of_comma_joins_and_cross_join">9.2. Precedence of comma-joins and CROSS JOIN</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1861' onclick='hideorshow("x1861","x1862")'>hide</button></p>
+ <div id='x1862' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1863' onclick='hideorshow("x1863","x1864")'>show</button></p>
+ <div id='x1864' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1865' onclick='hideorshow("x1865","x1866")'>show</button></p>
+ <div id='x1866' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1867' onclick='hideorshow("x1867","x1868")'>show</button></p>
+ <div id='x1868' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1869' onclick='hideorshow("x1869","x1870")'>show</button></p>
+ <div id='x1870' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1871' onclick='hideorshow("x1871","x1872")'>show</button></p>
+ <div id='x1872' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1873' onclick='hideorshow("x1873","x1874")'>show</button></p>
+ <div id='x1874' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1875' onclick='hideorshow("x1875","x1876")'>show</button></p>
+ <div id='x1876' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1877' onclick='hideorshow("x1877","x1878")'>show</button></p>
+ <div id='x1878' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1879' onclick='hideorshow("x1879","x1880")'>show</button></p>
+ <div id='x1880' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1881' onclick='hideorshow("x1881","x1882")'>show</button></p>
+ <div id='x1882' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1883' onclick='hideorshow("x1883","x1884")'>show</button></p>
+ <div id='x1884' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1885' onclick='hideorshow("x1885","x1886")'>show</button></p>
+ <div id='x1886' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1887' onclick='hideorshow("x1887","x1888")'>show</button></p>
+ <div id='x1888' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1889' onclick='hideorshow("x1889","x1890")'>show</button></p>
+ <div id='x1890' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1891' onclick='hideorshow("x1891","x1892")'>show</button></p>
+ <div id='x1892' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1893' onclick='hideorshow("x1893","x1894")'>show</button></p>
+ <div id='x1894' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1895' onclick='hideorshow("x1895","x1896")'>show</button></p>
+ <div id='x1896' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1897' onclick='hideorshow("x1897","x1898")'>show</button></p>
+ <div id='x1898' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+
+
+
+<p>The SELECT statement is used to query the database. The
+result of a SELECT is zero or more rows of data where each row
+has a fixed number of columns. A SELECT statement does not make
+any changes to the database.
+
+</p><p>The "<a href="syntax/select-stmt.html">select-stmt</a>" syntax diagram above attempts to show as much of the
+SELECT statement syntax as possible in a single diagram, because some readers
+find that helpful. The following "<a href="syntax/factored-select-stmt.html">factored-select-stmt</a>" is an alternative
+syntax diagrams that expresses the same syntax but tries to break the syntax
+down into smaller chunks.
+
+<p><b><a href="syntax/factored-select-stmt.html">factored-select-stmt:</a></b>
+<button id='x1899' onclick='hideorshow("x1899","x1900")'>show</button></p>
+ <div id='x1900' style='display:none;' class='imgcontainer'>
+ <div style="max-width:629px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 629.266 500.04">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M117,153L220,153L220,123L117,123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M60,304L105,304A15 15 0 0 0 120 289A15 15 0 0 0 105 274L60,274A15 15 0 0 0 45 289A15 15 0 0 0 60 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="82" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="143,289 131,293 131,285" style="fill:rgb(0,0,0)"/>
+<path d="M120,289L137,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,304L162,304A15 15 0 0 0 177 289A15 15 0 0 0 162 274L158,274A15 15 0 0 0 143 289A15 15 0 0 0 158 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="160" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M60,410L93,410A15 15 0 0 0 109 395A15 15 0 0 0 93 380L60,380A15 15 0 0 0 45 395A15 15 0 0 0 60 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,395 120,399 120,390" style="fill:rgb(0,0,0)"/>
+<path d="M109,395L126,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,410L181,410L181,380L132,380Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,138 105,142 105,133" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,123 Q 24,138 39,138 L 96,138 L 111,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="312,92 323,88 323,97" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 604,17 Q 619,17 619,32 L 619,77 Q 619,92 604,92 L 333,92 L 318,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,92 L 39,92 Q 24,92 24,100 L 24,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M80,198L257,198L257,168L80,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="257,183 269,179 269,187" style="fill:rgb(0,0,0)"/>
+<path d="M272,138 L 280,138 Q 287,138 287,153 L 287,168 Q 287,183 275,183 L 263,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M80,183 L 65,183 Q 50,183 50,168 L 50,153 Q 50,138 58,138 L 65,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="296,236 308,232 308,240" style="fill:rgb(0,0,0)"/>
+<path d="M220,138 L 342,138 Q 357,138 357,153 L 357,221 Q 357,236 342,236 L 317,236 L 302,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,289 33,293 33,285" style="fill:rgb(0,0,0)"/>
+<path d="M296,236 L 39,236 Q 24,236 24,251 L 24,274 Q 24,289 31,289 L 39,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="222,289 210,293 210,285" style="fill:rgb(0,0,0)"/>
+<path d="M177,289L216,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,304L352,304L352,274L222,274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="287" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M287,342A15 15 0 0 0 302 327A15 15 0 0 0 287 312A15 15 0 0 0 272 327A15 15 0 0 0 287 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="287" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="302,327 314,322 314,331" style="fill:rgb(0,0,0)"/>
+<path d="M352,289 L 359,289 Q 367,289 367,304 L 367,312 Q 367,327 352,327 L 323,327 L 308,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,327 L 214,327 Q 199,327 199,312 L 199,304 Q 199,289 205,289 L 210,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,319 384,308 392,308" style="fill:rgb(0,0,0)"/>
+<path d="M352,289 L 373,289 Q 388,289 388,301 L 388,313" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="198,361 210,356 210,365" style="fill:rgb(0,0,0)"/>
+<path d="M388,319 L 388,346 Q 388,361 373,361 L 219,361 L 204,361" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,395 33,399 33,390" style="fill:rgb(0,0,0)"/>
+<path d="M198,361 L 39,361 Q 24,361 24,376 L 24,380 Q 24,395 31,395 L 39,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,327 20,315 28,315" style="fill:rgb(0,0,0)"/>
+<path d="M24,274L24,321" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,327L24,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M255,440L306,440A15 15 0 0 0 321 425A15 15 0 0 0 306 410L255,410A15 15 0 0 0 240 425A15 15 0 0 0 255 440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="425" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="344,425 333,429 333,421" style="fill:rgb(0,0,0)"/>
+<path d="M321,425L339,425" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M344,440L394,440L394,410L344,410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="369" y="425" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="417,425 405,429 405,421" style="fill:rgb(0,0,0)"/>
+<path d="M394,425L411,425" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M255,478A15 15 0 0 0 270 463A15 15 0 0 0 255 448A15 15 0 0 0 240 463A15 15 0 0 0 255 478Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="255" y="463" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,463 282,467 282,458" style="fill:rgb(0,0,0)"/>
+<path d="M270,463L287,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M293,478L342,478L342,448L293,448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="318" y="463" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="204,395 192,399 192,390" style="fill:rgb(0,0,0)"/>
+<path d="M181,395L198,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="240,463 228,467 228,458" style="fill:rgb(0,0,0)"/>
+<path d="M204,395 L 211,395 Q 219,395 219,410 L 219,448 Q 219,463 226,463 L 234,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="240,425 228,429 228,421" style="fill:rgb(0,0,0)"/>
+<path d="M204,395 L 211,395 Q 219,395 219,410 L 219,410 Q 219,425 226,425 L 234,425" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="417,395 405,399 405,390" style="fill:rgb(0,0,0)"/>
+<path d="M204,395L411,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,493 608,497 608,489" style="fill:rgb(0,0,0)"/>
+<path d="M417,395 L 438,395 Q 453,395 453,410 L 453,478 Q 453,493 468,493 L 599,493 L 614,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="623" cy="493" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,425 L 438,425 Q 453,425 453,433 L 453,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="417,463 405,467 405,458" style="fill:rgb(0,0,0)"/>
+<path d="M342,463L411,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,463 L 438,463 Q 453,463 453,470 L 453,478" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="417,493 405,497 405,489" style="fill:rgb(0,0,0)"/>
+<path d="M24,380 L 24,478 Q 24,493 39,493 L 396,493 L 411,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,493L489,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1901' onclick='hideorshow("x1901","x1902")'>show</button></p>
+ <div id='x1902' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1903' onclick='hideorshow("x1903","x1904")'>show</button></p>
+ <div id='x1904' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1905' onclick='hideorshow("x1905","x1906")'>show</button></p>
+ <div id='x1906' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1907' onclick='hideorshow("x1907","x1908")'>show</button></p>
+ <div id='x1908' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1909' onclick='hideorshow("x1909","x1910")'>show</button></p>
+ <div id='x1910' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1911' onclick='hideorshow("x1911","x1912")'>show</button></p>
+ <div id='x1912' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1913' onclick='hideorshow("x1913","x1914")'>show</button></p>
+ <div id='x1914' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1915' onclick='hideorshow("x1915","x1916")'>show</button></p>
+ <div id='x1916' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1917' onclick='hideorshow("x1917","x1918")'>show</button></p>
+ <div id='x1918' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1919' onclick='hideorshow("x1919","x1920")'>show</button></p>
+ <div id='x1920' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1921' onclick='hideorshow("x1921","x1922")'>show</button></p>
+ <div id='x1922' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1923' onclick='hideorshow("x1923","x1924")'>show</button></p>
+ <div id='x1924' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1925' onclick='hideorshow("x1925","x1926")'>show</button></p>
+ <div id='x1926' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x1927' onclick='hideorshow("x1927","x1928")'>show</button></p>
+ <div id='x1928' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1929' onclick='hideorshow("x1929","x1930")'>show</button></p>
+ <div id='x1930' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x1931' onclick='hideorshow("x1931","x1932")'>show</button></p>
+ <div id='x1932' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1933' onclick='hideorshow("x1933","x1934")'>show</button></p>
+ <div id='x1934' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1935' onclick='hideorshow("x1935","x1936")'>show</button></p>
+ <div id='x1936' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1937' onclick='hideorshow("x1937","x1938")'>show</button></p>
+ <div id='x1938' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1939' onclick='hideorshow("x1939","x1940")'>show</button></p>
+ <div id='x1940' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1941' onclick='hideorshow("x1941","x1942")'>show</button></p>
+ <div id='x1942' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1943' onclick='hideorshow("x1943","x1944")'>show</button></p>
+ <div id='x1944' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1945' onclick='hideorshow("x1945","x1946")'>show</button></p>
+ <div id='x1946' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1947' onclick='hideorshow("x1947","x1948")'>show</button></p>
+ <div id='x1948' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x1949' onclick='hideorshow("x1949","x1950")'>show</button></p>
+ <div id='x1950' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x1951' onclick='hideorshow("x1951","x1952")'>show</button></p>
+ <div id='x1952' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x1953' onclick='hideorshow("x1953","x1954")'>show</button></p>
+ <div id='x1954' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-core.html">select-core:</a></b>
+<button id='x1955' onclick='hideorshow("x1955","x1956")'>show</button></p>
+ <div id='x1956' style='display:none;' class='imgcontainer'>
+ <div style="max-width:655px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 655.157 728.568">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,17 51,21 51,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L57,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,32L129,32A15 15 0 0 0 144 17A15 15 0 0 0 129 2L78,2A15 15 0 0 0 63 17A15 15 0 0 0 78 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="104" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M144,17 L 152,17 Q 159,17 159,32 L 159,32 Q 159,47 170,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,62L269,62A15 15 0 0 0 284 47L284,47A15 15 0 0 0 269 32L201,32A15 15 0 0 0 186 47L186,47A15 15 0 0 0 201 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="235" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="353,17 342,21 342,12" style="fill:rgb(0,0,0)"/>
+<path d="M284,47 L 292,47 Q 299,47 299,32 L 299,32 Q 299,17 314,17 L 333,17 L 348,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M353,32L481,32L481,2L353,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M417,70A15 15 0 0 0 432 55L432,55A15 15 0 0 0 417 39A15 15 0 0 0 402 55L402,55A15 15 0 0 0 417 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="432,55 444,50 444,59" style="fill:rgb(0,0,0)"/>
+<path d="M481,17 L 488,17 Q 496,17 496,32 L 496,40 Q 496,55 481,55 L 453,55 L 438,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M402,55 L 342,55 Q 327,55 327,40 L 327,32 Q 327,17 334,17 L 342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="235,17 224,21 224,12" style="fill:rgb(0,0,0)"/>
+<path d="M144,17L229,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M235,17L342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,100L216,100A15 15 0 0 0 231 85A15 15 0 0 0 216 70L201,70A15 15 0 0 0 186 85A15 15 0 0 0 201 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="208" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="284,85 273,89 273,81" style="fill:rgb(0,0,0)"/>
+<path d="M231,85L279,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,85 L 292,85 Q 299,85 299,70 L 299,47 L 299,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,85 174,89 174,81" style="fill:rgb(0,0,0)"/>
+<path d="M144,17 L 152,17 Q 159,17 159,32 L 159,70 Q 159,85 170,85 L 180,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,176L139,176A15 15 0 0 0 154 160A15 15 0 0 0 139 145L105,145A15 15 0 0 0 89 160A15 15 0 0 0 105 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="122" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="226,160 215,165 215,156" style="fill:rgb(0,0,0)"/>
+<path d="M154,160L221,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M226,176L387,176L387,145L226,145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M256,250L358,250L358,219L256,219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="235" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M307,212A15 15 0 0 0 322 197A15 15 0 0 0 307 182A15 15 0 0 0 292 197A15 15 0 0 0 307 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="197" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="322,197 334,192 334,201" style="fill:rgb(0,0,0)"/>
+<path d="M387,160 L 395,160 Q 402,160 402,175 L 402,182 Q 402,197 387,197 L 343,197 L 328,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M292,197 L 215,197 Q 200,197 200,182 L 200,175 Q 200,160 207,160 L 215,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="256,235 244,239 244,230" style="fill:rgb(0,0,0)"/>
+<path d="M154,160 L 162,160 Q 169,160 169,175 L 169,220 Q 169,235 184,235 L 235,235 L 250,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="420,201 425,213 416,213" style="fill:rgb(0,0,0)"/>
+<path d="M358,235 L 373,235 Q 387,235 402,235 L 405,235 Q 420,235 420,221 L 420,207" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="441,160 430,165 430,156" style="fill:rgb(0,0,0)"/>
+<path d="M420,201 L 420,175 Q 420,160 428,160 L 436,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,160 L 432,160 Q 423,160 423,160 Q 423,160 431,160 L 438,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,85 492,73 500,73" style="fill:rgb(0,0,0)"/>
+<path d="M481,17 L 488,17 Q 496,17 496,32 L 496,64 L 496,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,123 296,118 296,127" style="fill:rgb(0,0,0)"/>
+<path d="M496,85 L 496,108 Q 496,123 481,123 L 305,123 L 290,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,160 78,165 78,156" style="fill:rgb(0,0,0)"/>
+<path d="M284,123 L 78,123 Q 63,123 63,138 L 63,145 Q 63,160 73,160 L 84,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,325L154,325A15 15 0 0 0 169 310A15 15 0 0 0 154 295L105,295A15 15 0 0 0 89 310A15 15 0 0 0 105 325Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="310" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="192,310 181,314 181,306" style="fill:rgb(0,0,0)"/>
+<path d="M169,310L186,310" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M192,325L241,325L241,295L192,295Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="217" y="310" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="453,212 449,200 458,200" style="fill:rgb(0,0,0)"/>
+<path d="M387,160 L 438,160 Q 453,160 453,175 L 453,191 L 453,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,272 318,268 318,277" style="fill:rgb(0,0,0)"/>
+<path d="M453,212 L 453,257 Q 453,272 438,272 L 328,272 L 313,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,310 78,314 78,306" style="fill:rgb(0,0,0)"/>
+<path d="M307,272 L 78,272 Q 63,272 63,287 L 63,295 Q 63,310 73,310 L 84,310" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,212 59,200 67,200" style="fill:rgb(0,0,0)"/>
+<path d="M63,145L63,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,212L63,295" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,424L148,424A15 15 0 0 0 163 408A15 15 0 0 0 148 393L105,393A15 15 0 0 0 89 408A15 15 0 0 0 105 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="126" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="186,408 175,413 175,404" style="fill:rgb(0,0,0)"/>
+<path d="M163,408L180,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,424L205,424A15 15 0 0 0 220 408A15 15 0 0 0 205 393L201,393A15 15 0 0 0 186 408A15 15 0 0 0 201 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="203" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="256,408 245,413 245,404" style="fill:rgb(0,0,0)"/>
+<path d="M220,408L251,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,424L306,424L306,393L256,393Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="388,408 377,413 377,404" style="fill:rgb(0,0,0)"/>
+<path d="M306,408L383,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,424L456,424A15 15 0 0 0 471 408A15 15 0 0 0 456 393L404,393A15 15 0 0 0 388 408A15 15 0 0 0 404 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="430" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="494,408 483,413 483,404" style="fill:rgb(0,0,0)"/>
+<path d="M471,408L488,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,424L543,424L543,393L494,393Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M281,461A15 15 0 0 0 296 446A15 15 0 0 0 281 431A15 15 0 0 0 266 446A15 15 0 0 0 281 461Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="446" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="296,446 308,442 308,451" style="fill:rgb(0,0,0)"/>
+<path d="M306,408 L 313,408 Q 321,408 321,423 L 321,431 Q 321,446 311,446 L 302,446" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,446 L 245,446 Q 230,446 230,431 L 230,423 Q 230,408 237,408 L 245,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="450,439 439,443 439,434" style="fill:rgb(0,0,0)"/>
+<path d="M347,408 L 354,408 Q 362,408 362,423 L 362,424 Q 362,439 377,439 L 430,439 L 445,439" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M450,439 L 543,439 Q 558,439 558,424 L 558,423 Q 558,408 566,408 L 573,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="203,378 192,382 192,374" style="fill:rgb(0,0,0)"/>
+<path d="M63,348 L 63,363 Q 63,378 78,378 L 183,378 L 198,378" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="347,408 336,413 336,404" style="fill:rgb(0,0,0)"/>
+<path d="M203,378 L 306,378 Q 321,378 321,393 L 321,393 Q 321,408 331,408 L 341,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,348 181,344 181,352" style="fill:rgb(0,0,0)"/>
+<path d="M241,310 L 249,310 Q 256,310 256,325 L 256,333 Q 256,348 241,348 L 190,348 L 175,348" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,408 78,413 78,404" style="fill:rgb(0,0,0)"/>
+<path d="M169,348 L 78,348 Q 63,348 63,363 L 63,393 Q 63,408 73,408 L 84,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,335 59,323 67,323" style="fill:rgb(0,0,0)"/>
+<path d="M63,295L63,329" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,335L63,393" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,537L168,537A15 15 0 0 0 183 522A15 15 0 0 0 168 507L105,507A15 15 0 0 0 89 522A15 15 0 0 0 105 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="219,522 208,526 208,517" style="fill:rgb(0,0,0)"/>
+<path d="M183,522L213,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,537L331,537A15 15 0 0 0 346 522A15 15 0 0 0 331 507L234,507A15 15 0 0 0 219 522A15 15 0 0 0 234 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="369,522 358,526 358,517" style="fill:rgb(0,0,0)"/>
+<path d="M346,522L364,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,537L388,537A15 15 0 0 0 404 522A15 15 0 0 0 388 507L384,507A15 15 0 0 0 369 522A15 15 0 0 0 384 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="386" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="427,522 415,526 415,517" style="fill:rgb(0,0,0)"/>
+<path d="M404,522L421,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M427,537L545,537L545,507L427,507Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M382,575A15 15 0 0 0 397 560A15 15 0 0 0 382 544A15 15 0 0 0 367 560A15 15 0 0 0 382 575Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="560" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="397,560 409,555 409,564" style="fill:rgb(0,0,0)"/>
+<path d="M545,522 L 553,522 Q 560,522 560,537 L 560,545 Q 560,560 545,560 L 418,560 L 403,560" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,560 L 208,560 Q 193,560 193,545 L 193,537 Q 193,522 200,522 L 208,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="588,446 584,435 593,435" style="fill:rgb(0,0,0)"/>
+<path d="M543,408 L 573,408 Q 588,408 588,423 L 588,425 L 588,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,484 318,480 318,488" style="fill:rgb(0,0,0)"/>
+<path d="M588,446 L 588,469 Q 588,484 573,484 L 328,484 L 313,484" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,522 78,526 78,517" style="fill:rgb(0,0,0)"/>
+<path d="M307,484 L 78,484 Q 63,484 63,499 L 63,507 Q 63,522 73,522 L 84,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,446 59,435 67,435" style="fill:rgb(0,0,0)"/>
+<path d="M63,393L63,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,597 295,602 295,593" style="fill:rgb(0,0,0)"/>
+<path d="M63,446 L 63,582 Q 63,597 78,597 L 286,597 L 301,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="645,597 634,602 634,593" style="fill:rgb(0,0,0)"/>
+<path d="M307,597L640,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="649" cy="597" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,586 556,574 564,574" style="fill:rgb(0,0,0)"/>
+<path d="M560,544L560,580" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M560,586 L 560,592 Q 560,597 568,597 L 575,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,688L130,688A15 15 0 0 0 145 673A15 15 0 0 0 130 658L78,658A15 15 0 0 0 63 673A15 15 0 0 0 78 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="104" y="673" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="181,673 170,677 170,669" style="fill:rgb(0,0,0)"/>
+<path d="M145,673L176,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,688A15 15 0 0 0 212 673A15 15 0 0 0 197 658A15 15 0 0 0 181 673A15 15 0 0 0 197 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="197" y="673" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="248,673 236,677 236,669" style="fill:rgb(0,0,0)"/>
+<path d="M212,673L242,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,688L297,688L297,658L248,658Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="673" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="333,673 321,677 321,669" style="fill:rgb(0,0,0)"/>
+<path d="M297,673L327,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,688A15 15 0 0 0 363 673A15 15 0 0 0 348 658A15 15 0 0 0 333 673A15 15 0 0 0 348 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="673" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="573,673 562,677 562,669" style="fill:rgb(0,0,0)"/>
+<path d="M363,673L568,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="588,612 593,624 584,624" style="fill:rgb(0,0,0)"/>
+<path d="M573,673 L 581,673 Q 588,673 588,658 L 588,633 L 588,618" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M588,612 L 588,605 Q 588,597 603,597 L 609,597 L 624,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,650A15 15 0 0 0 287 635A15 15 0 0 0 272 620A15 15 0 0 0 257 635A15 15 0 0 0 272 650Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="635" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M272,726A15 15 0 0 0 287 711A15 15 0 0 0 272 696A15 15 0 0 0 257 711A15 15 0 0 0 272 726Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="711" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="287,635 299,631 299,640" style="fill:rgb(0,0,0)"/>
+<path d="M297,673 L 304,673 Q 312,673 312,658 L 312,650 Q 312,635 303,635 L 293,635" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,635 L 236,635 Q 221,635 221,650 L 221,658 Q 221,673 229,673 L 236,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="287,711 299,706 299,715" style="fill:rgb(0,0,0)"/>
+<path d="M363,673 L 371,673 Q 378,673 378,688 L 378,696 Q 378,711 363,711 L 308,711 L 293,711" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,711 L 170,711 Q 155,711 155,696 L 155,688 Q 155,673 162,673 L 170,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,673 51,677 51,669" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,658 Q 24,673 39,673 L 42,673 L 57,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1957' onclick='hideorshow("x1957","x1958")'>show</button></p>
+ <div id='x1958' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1959' onclick='hideorshow("x1959","x1960")'>show</button></p>
+ <div id='x1960' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1961' onclick='hideorshow("x1961","x1962")'>show</button></p>
+ <div id='x1962' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1963' onclick='hideorshow("x1963","x1964")'>show</button></p>
+ <div id='x1964' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1965' onclick='hideorshow("x1965","x1966")'>show</button></p>
+ <div id='x1966' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1967' onclick='hideorshow("x1967","x1968")'>show</button></p>
+ <div id='x1968' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1969' onclick='hideorshow("x1969","x1970")'>show</button></p>
+ <div id='x1970' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1971' onclick='hideorshow("x1971","x1972")'>show</button></p>
+ <div id='x1972' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+</p><p>Note that there are paths through the syntax diagrams that
+are not allowed in practice. Some examples:
+</p><ul>
+<li>A <a href="lang_select.html#values">VALUES</a> clause can be the first element in a <a href="lang_select.html#compound">compound SELECT</a>
+ that uses a <a href="lang_with.html">WITH</a> clause, but a <a href="lang_select.html#simpleselect">simple SELECT</a> that consists of
+ just a <a href="lang_select.html#values">VALUES</a> clause cannot be preceded by a <a href="lang_with.html">WITH</a> clause.
+</li><li>The <a href="lang_with.html">WITH</a> clause must occur on the first SELECT of a <a href="lang_select.html#compound">compound SELECT</a>.
+ It cannot follow a <a href="syntax/compound-operator.html">compound-operator</a>.
+</li></ul>
+
+<p>These and other similar syntax restrictions are described in the text.
+
+</p><p>The SELECT statement is the most complicated command in the SQL language.
+To make the description easier to follow, some of the passages below describe
+the way the data returned by a SELECT statement is determined as a series of
+steps. It is important to keep in mind that this is purely illustrative -
+in practice neither SQLite nor any other SQL engine is required to follow
+this or any other specific process.
+
+<a name="simpleselect"></a>
+
+</p><h1 id="simple_select_processing"><span>2. </span>Simple Select Processing</h1>
+
+<p>The core of a SELECT statement is a "simple SELECT" shown by the
+<a href="syntax/select-core.html">select-core</a> and <a href="syntax/simple-select-stmt.html">simple-select-stmt</a> syntax diagrams below.
+In practice, most SELECT statements are simple SELECT statements.
+
+<p><b><a href="syntax/simple-select-stmt.html">simple-select-stmt:</a></b>
+<button id='x1973' onclick='hideorshow("x1973","x1974")'>hide</button></p>
+ <div id='x1974' class='imgcontainer'>
+ <div style="max-width:629px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 629.266 348.84">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,153L148,153L148,123L45,123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="97" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M205,153L250,153A15 15 0 0 0 265 138A15 15 0 0 0 250 123L205,123A15 15 0 0 0 190 138A15 15 0 0 0 205 153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="227" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="288,138 276,142 276,133" style="fill:rgb(0,0,0)"/>
+<path d="M265,138L282,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M303,153L307,153A15 15 0 0 0 322 138A15 15 0 0 0 307 123L303,123A15 15 0 0 0 288 138A15 15 0 0 0 303 153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="305" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M205,259L239,259A15 15 0 0 0 254 244A15 15 0 0 0 239 228L205,228A15 15 0 0 0 190 244A15 15 0 0 0 205 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="222" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="277,244 265,248 265,239" style="fill:rgb(0,0,0)"/>
+<path d="M254,244L271,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M277,259L326,259L326,228L277,228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="301" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="45,138 33,142 33,133" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,123 Q 24,138 31,138 L 39,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="312,92 323,88 323,97" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 604,17 Q 619,17 619,32 L 619,77 Q 619,92 604,92 L 333,92 L 318,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,92 L 39,92 Q 24,92 24,100 L 24,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="367,138 356,142 356,133" style="fill:rgb(0,0,0)"/>
+<path d="M322,138L361,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,153L497,153L497,123L367,123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M432,191A15 15 0 0 0 447 176A15 15 0 0 0 432 160A15 15 0 0 0 417 176A15 15 0 0 0 432 191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="176" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="447,176 459,171 459,180" style="fill:rgb(0,0,0)"/>
+<path d="M497,138 L 504,138 Q 512,138 512,153 L 512,161 Q 512,176 497,176 L 468,176 L 453,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,176 L 359,176 Q 344,176 344,161 L 344,153 Q 344,138 350,138 L 356,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="533,168 529,156 537,156" style="fill:rgb(0,0,0)"/>
+<path d="M497,138 L 518,138 Q 533,138 533,150 L 533,162" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="343,210 355,205 355,214" style="fill:rgb(0,0,0)"/>
+<path d="M533,168 L 533,195 Q 533,210 518,210 L 364,210 L 349,210" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,244 178,248 178,239" style="fill:rgb(0,0,0)"/>
+<path d="M343,210 L 178,210 Q 163,210 163,225 L 163,229 Q 163,244 174,244 L 184,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,138 178,142 178,133" style="fill:rgb(0,0,0)"/>
+<path d="M148,138L184,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="163,191 159,179 168,179" style="fill:rgb(0,0,0)"/>
+<path d="M148,138 L 156,138 Q 163,138 163,153 L 163,170 L 163,185" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M163,191L163,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M400,289L451,289A15 15 0 0 0 466 274A15 15 0 0 0 451 259L400,259A15 15 0 0 0 385 274A15 15 0 0 0 400 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="490,274 478,278 478,270" style="fill:rgb(0,0,0)"/>
+<path d="M466,274L484,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,289L539,289L539,259L490,259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="514" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="562,274 550,278 550,270" style="fill:rgb(0,0,0)"/>
+<path d="M539,274L556,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M400,327A15 15 0 0 0 415 312A15 15 0 0 0 400 297A15 15 0 0 0 385 312A15 15 0 0 0 400 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="400" y="312" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="438,312 427,316 427,307" style="fill:rgb(0,0,0)"/>
+<path d="M415,312L432,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,327L487,327L487,297L438,297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="349,244 337,248 337,239" style="fill:rgb(0,0,0)"/>
+<path d="M326,244L343,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="385,312 373,316 373,307" style="fill:rgb(0,0,0)"/>
+<path d="M349,244 L 356,244 Q 364,244 364,259 L 364,297 Q 364,312 372,312 L 379,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="385,274 373,278 373,270" style="fill:rgb(0,0,0)"/>
+<path d="M349,244 L 356,244 Q 364,244 364,259 L 364,259 Q 364,274 372,274 L 379,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="562,244 550,248 550,239" style="fill:rgb(0,0,0)"/>
+<path d="M349,244L556,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,342 608,346 608,338" style="fill:rgb(0,0,0)"/>
+<path d="M562,244 L 583,244 Q 598,244 598,259 L 598,327 Q 598,342 606,342 L 614,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="623" cy="342" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M562,274 L 583,274 Q 598,274 598,281 L 598,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="562,312 550,316 550,307" style="fill:rgb(0,0,0)"/>
+<path d="M487,312L556,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M562,312 L 583,312 Q 598,312 598,319 L 598,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="562,342 550,346 550,338" style="fill:rgb(0,0,0)"/>
+<path d="M163,228 L 163,327 Q 163,342 178,342 L 541,342 L 556,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M562,342L608,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x1975' onclick='hideorshow("x1975","x1976")'>show</button></p>
+ <div id='x1976' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x1977' onclick='hideorshow("x1977","x1978")'>show</button></p>
+ <div id='x1978' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x1979' onclick='hideorshow("x1979","x1980")'>show</button></p>
+ <div id='x1980' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x1981' onclick='hideorshow("x1981","x1982")'>show</button></p>
+ <div id='x1982' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x1983' onclick='hideorshow("x1983","x1984")'>show</button></p>
+ <div id='x1984' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x1985' onclick='hideorshow("x1985","x1986")'>show</button></p>
+ <div id='x1986' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x1987' onclick='hideorshow("x1987","x1988")'>show</button></p>
+ <div id='x1988' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x1989' onclick='hideorshow("x1989","x1990")'>show</button></p>
+ <div id='x1990' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x1991' onclick='hideorshow("x1991","x1992")'>show</button></p>
+ <div id='x1992' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x1993' onclick='hideorshow("x1993","x1994")'>show</button></p>
+ <div id='x1994' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x1995' onclick='hideorshow("x1995","x1996")'>show</button></p>
+ <div id='x1996' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x1997' onclick='hideorshow("x1997","x1998")'>show</button></p>
+ <div id='x1998' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x1999' onclick='hideorshow("x1999","x2000")'>show</button></p>
+ <div id='x2000' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x2001' onclick='hideorshow("x2001","x2002")'>show</button></p>
+ <div id='x2002' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2003' onclick='hideorshow("x2003","x2004")'>show</button></p>
+ <div id='x2004' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x2005' onclick='hideorshow("x2005","x2006")'>show</button></p>
+ <div id='x2006' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2007' onclick='hideorshow("x2007","x2008")'>show</button></p>
+ <div id='x2008' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2009' onclick='hideorshow("x2009","x2010")'>show</button></p>
+ <div id='x2010' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2011' onclick='hideorshow("x2011","x2012")'>show</button></p>
+ <div id='x2012' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2013' onclick='hideorshow("x2013","x2014")'>show</button></p>
+ <div id='x2014' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2015' onclick='hideorshow("x2015","x2016")'>show</button></p>
+ <div id='x2016' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2017' onclick='hideorshow("x2017","x2018")'>show</button></p>
+ <div id='x2018' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2019' onclick='hideorshow("x2019","x2020")'>show</button></p>
+ <div id='x2020' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2021' onclick='hideorshow("x2021","x2022")'>show</button></p>
+ <div id='x2022' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2023' onclick='hideorshow("x2023","x2024")'>show</button></p>
+ <div id='x2024' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x2025' onclick='hideorshow("x2025","x2026")'>show</button></p>
+ <div id='x2026' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x2027' onclick='hideorshow("x2027","x2028")'>show</button></p>
+ <div id='x2028' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2029' onclick='hideorshow("x2029","x2030")'>show</button></p>
+ <div id='x2030' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-core.html">select-core:</a></b>
+<button id='x2031' onclick='hideorshow("x2031","x2032")'>hide</button></p>
+ <div id='x2032' class='imgcontainer'>
+ <div style="max-width:655px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 655.157 728.568">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,17 51,21 51,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L57,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,32L129,32A15 15 0 0 0 144 17A15 15 0 0 0 129 2L78,2A15 15 0 0 0 63 17A15 15 0 0 0 78 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="104" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M144,17 L 152,17 Q 159,17 159,32 L 159,32 Q 159,47 170,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,62L269,62A15 15 0 0 0 284 47L284,47A15 15 0 0 0 269 32L201,32A15 15 0 0 0 186 47L186,47A15 15 0 0 0 201 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="235" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="353,17 342,21 342,12" style="fill:rgb(0,0,0)"/>
+<path d="M284,47 L 292,47 Q 299,47 299,32 L 299,32 Q 299,17 314,17 L 333,17 L 348,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M353,32L481,32L481,2L353,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M417,70A15 15 0 0 0 432 55L432,55A15 15 0 0 0 417 39A15 15 0 0 0 402 55L402,55A15 15 0 0 0 417 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="432,55 444,50 444,59" style="fill:rgb(0,0,0)"/>
+<path d="M481,17 L 488,17 Q 496,17 496,32 L 496,40 Q 496,55 481,55 L 453,55 L 438,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M402,55 L 342,55 Q 327,55 327,40 L 327,32 Q 327,17 334,17 L 342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="235,17 224,21 224,12" style="fill:rgb(0,0,0)"/>
+<path d="M144,17L229,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M235,17L342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,100L216,100A15 15 0 0 0 231 85A15 15 0 0 0 216 70L201,70A15 15 0 0 0 186 85A15 15 0 0 0 201 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="208" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="284,85 273,89 273,81" style="fill:rgb(0,0,0)"/>
+<path d="M231,85L279,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,85 L 292,85 Q 299,85 299,70 L 299,47 L 299,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,85 174,89 174,81" style="fill:rgb(0,0,0)"/>
+<path d="M144,17 L 152,17 Q 159,17 159,32 L 159,70 Q 159,85 170,85 L 180,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,176L139,176A15 15 0 0 0 154 160A15 15 0 0 0 139 145L105,145A15 15 0 0 0 89 160A15 15 0 0 0 105 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="122" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="226,160 215,165 215,156" style="fill:rgb(0,0,0)"/>
+<path d="M154,160L221,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M226,176L387,176L387,145L226,145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M256,250L358,250L358,219L256,219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="235" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M307,212A15 15 0 0 0 322 197A15 15 0 0 0 307 182A15 15 0 0 0 292 197A15 15 0 0 0 307 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="197" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="322,197 334,192 334,201" style="fill:rgb(0,0,0)"/>
+<path d="M387,160 L 395,160 Q 402,160 402,175 L 402,182 Q 402,197 387,197 L 343,197 L 328,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M292,197 L 215,197 Q 200,197 200,182 L 200,175 Q 200,160 207,160 L 215,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="256,235 244,239 244,230" style="fill:rgb(0,0,0)"/>
+<path d="M154,160 L 162,160 Q 169,160 169,175 L 169,220 Q 169,235 184,235 L 235,235 L 250,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="420,201 425,213 416,213" style="fill:rgb(0,0,0)"/>
+<path d="M358,235 L 373,235 Q 387,235 402,235 L 405,235 Q 420,235 420,221 L 420,207" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="441,160 430,165 430,156" style="fill:rgb(0,0,0)"/>
+<path d="M420,201 L 420,175 Q 420,160 428,160 L 436,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,160 L 432,160 Q 423,160 423,160 Q 423,160 431,160 L 438,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,85 492,73 500,73" style="fill:rgb(0,0,0)"/>
+<path d="M481,17 L 488,17 Q 496,17 496,32 L 496,64 L 496,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,123 296,118 296,127" style="fill:rgb(0,0,0)"/>
+<path d="M496,85 L 496,108 Q 496,123 481,123 L 305,123 L 290,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,160 78,165 78,156" style="fill:rgb(0,0,0)"/>
+<path d="M284,123 L 78,123 Q 63,123 63,138 L 63,145 Q 63,160 73,160 L 84,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,325L154,325A15 15 0 0 0 169 310A15 15 0 0 0 154 295L105,295A15 15 0 0 0 89 310A15 15 0 0 0 105 325Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="310" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="192,310 181,314 181,306" style="fill:rgb(0,0,0)"/>
+<path d="M169,310L186,310" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M192,325L241,325L241,295L192,295Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="217" y="310" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="453,212 449,200 458,200" style="fill:rgb(0,0,0)"/>
+<path d="M387,160 L 438,160 Q 453,160 453,175 L 453,191 L 453,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,272 318,268 318,277" style="fill:rgb(0,0,0)"/>
+<path d="M453,212 L 453,257 Q 453,272 438,272 L 328,272 L 313,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,310 78,314 78,306" style="fill:rgb(0,0,0)"/>
+<path d="M307,272 L 78,272 Q 63,272 63,287 L 63,295 Q 63,310 73,310 L 84,310" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,212 59,200 67,200" style="fill:rgb(0,0,0)"/>
+<path d="M63,145L63,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,212L63,295" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,424L148,424A15 15 0 0 0 163 408A15 15 0 0 0 148 393L105,393A15 15 0 0 0 89 408A15 15 0 0 0 105 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="126" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="186,408 175,413 175,404" style="fill:rgb(0,0,0)"/>
+<path d="M163,408L180,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,424L205,424A15 15 0 0 0 220 408A15 15 0 0 0 205 393L201,393A15 15 0 0 0 186 408A15 15 0 0 0 201 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="203" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="256,408 245,413 245,404" style="fill:rgb(0,0,0)"/>
+<path d="M220,408L251,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,424L306,424L306,393L256,393Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="388,408 377,413 377,404" style="fill:rgb(0,0,0)"/>
+<path d="M306,408L383,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,424L456,424A15 15 0 0 0 471 408A15 15 0 0 0 456 393L404,393A15 15 0 0 0 388 408A15 15 0 0 0 404 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="430" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="494,408 483,413 483,404" style="fill:rgb(0,0,0)"/>
+<path d="M471,408L488,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,424L543,424L543,393L494,393Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M281,461A15 15 0 0 0 296 446A15 15 0 0 0 281 431A15 15 0 0 0 266 446A15 15 0 0 0 281 461Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="446" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="296,446 308,442 308,451" style="fill:rgb(0,0,0)"/>
+<path d="M306,408 L 313,408 Q 321,408 321,423 L 321,431 Q 321,446 311,446 L 302,446" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,446 L 245,446 Q 230,446 230,431 L 230,423 Q 230,408 237,408 L 245,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="450,439 439,443 439,434" style="fill:rgb(0,0,0)"/>
+<path d="M347,408 L 354,408 Q 362,408 362,423 L 362,424 Q 362,439 377,439 L 430,439 L 445,439" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M450,439 L 543,439 Q 558,439 558,424 L 558,423 Q 558,408 566,408 L 573,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="203,378 192,382 192,374" style="fill:rgb(0,0,0)"/>
+<path d="M63,348 L 63,363 Q 63,378 78,378 L 183,378 L 198,378" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="347,408 336,413 336,404" style="fill:rgb(0,0,0)"/>
+<path d="M203,378 L 306,378 Q 321,378 321,393 L 321,393 Q 321,408 331,408 L 341,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,348 181,344 181,352" style="fill:rgb(0,0,0)"/>
+<path d="M241,310 L 249,310 Q 256,310 256,325 L 256,333 Q 256,348 241,348 L 190,348 L 175,348" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,408 78,413 78,404" style="fill:rgb(0,0,0)"/>
+<path d="M169,348 L 78,348 Q 63,348 63,363 L 63,393 Q 63,408 73,408 L 84,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,335 59,323 67,323" style="fill:rgb(0,0,0)"/>
+<path d="M63,295L63,329" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,335L63,393" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,537L168,537A15 15 0 0 0 183 522A15 15 0 0 0 168 507L105,507A15 15 0 0 0 89 522A15 15 0 0 0 105 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="219,522 208,526 208,517" style="fill:rgb(0,0,0)"/>
+<path d="M183,522L213,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,537L331,537A15 15 0 0 0 346 522A15 15 0 0 0 331 507L234,507A15 15 0 0 0 219 522A15 15 0 0 0 234 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="369,522 358,526 358,517" style="fill:rgb(0,0,0)"/>
+<path d="M346,522L364,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,537L388,537A15 15 0 0 0 404 522A15 15 0 0 0 388 507L384,507A15 15 0 0 0 369 522A15 15 0 0 0 384 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="386" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="427,522 415,526 415,517" style="fill:rgb(0,0,0)"/>
+<path d="M404,522L421,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M427,537L545,537L545,507L427,507Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M382,575A15 15 0 0 0 397 560A15 15 0 0 0 382 544A15 15 0 0 0 367 560A15 15 0 0 0 382 575Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="560" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="397,560 409,555 409,564" style="fill:rgb(0,0,0)"/>
+<path d="M545,522 L 553,522 Q 560,522 560,537 L 560,545 Q 560,560 545,560 L 418,560 L 403,560" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,560 L 208,560 Q 193,560 193,545 L 193,537 Q 193,522 200,522 L 208,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="588,446 584,435 593,435" style="fill:rgb(0,0,0)"/>
+<path d="M543,408 L 573,408 Q 588,408 588,423 L 588,425 L 588,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,484 318,480 318,488" style="fill:rgb(0,0,0)"/>
+<path d="M588,446 L 588,469 Q 588,484 573,484 L 328,484 L 313,484" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,522 78,526 78,517" style="fill:rgb(0,0,0)"/>
+<path d="M307,484 L 78,484 Q 63,484 63,499 L 63,507 Q 63,522 73,522 L 84,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,446 59,435 67,435" style="fill:rgb(0,0,0)"/>
+<path d="M63,393L63,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,597 295,602 295,593" style="fill:rgb(0,0,0)"/>
+<path d="M63,446 L 63,582 Q 63,597 78,597 L 286,597 L 301,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="645,597 634,602 634,593" style="fill:rgb(0,0,0)"/>
+<path d="M307,597L640,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="649" cy="597" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,586 556,574 564,574" style="fill:rgb(0,0,0)"/>
+<path d="M560,544L560,580" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M560,586 L 560,592 Q 560,597 568,597 L 575,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,688L130,688A15 15 0 0 0 145 673A15 15 0 0 0 130 658L78,658A15 15 0 0 0 63 673A15 15 0 0 0 78 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="104" y="673" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="181,673 170,677 170,669" style="fill:rgb(0,0,0)"/>
+<path d="M145,673L176,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,688A15 15 0 0 0 212 673A15 15 0 0 0 197 658A15 15 0 0 0 181 673A15 15 0 0 0 197 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="197" y="673" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="248,673 236,677 236,669" style="fill:rgb(0,0,0)"/>
+<path d="M212,673L242,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,688L297,688L297,658L248,658Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="673" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="333,673 321,677 321,669" style="fill:rgb(0,0,0)"/>
+<path d="M297,673L327,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,688A15 15 0 0 0 363 673A15 15 0 0 0 348 658A15 15 0 0 0 333 673A15 15 0 0 0 348 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="673" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="573,673 562,677 562,669" style="fill:rgb(0,0,0)"/>
+<path d="M363,673L568,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="588,612 593,624 584,624" style="fill:rgb(0,0,0)"/>
+<path d="M573,673 L 581,673 Q 588,673 588,658 L 588,633 L 588,618" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M588,612 L 588,605 Q 588,597 603,597 L 609,597 L 624,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,650A15 15 0 0 0 287 635A15 15 0 0 0 272 620A15 15 0 0 0 257 635A15 15 0 0 0 272 650Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="635" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M272,726A15 15 0 0 0 287 711A15 15 0 0 0 272 696A15 15 0 0 0 257 711A15 15 0 0 0 272 726Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="711" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="287,635 299,631 299,640" style="fill:rgb(0,0,0)"/>
+<path d="M297,673 L 304,673 Q 312,673 312,658 L 312,650 Q 312,635 303,635 L 293,635" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,635 L 236,635 Q 221,635 221,650 L 221,658 Q 221,673 229,673 L 236,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="287,711 299,706 299,715" style="fill:rgb(0,0,0)"/>
+<path d="M363,673 L 371,673 Q 378,673 378,688 L 378,696 Q 378,711 363,711 L 308,711 L 293,711" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,711 L 170,711 Q 155,711 155,696 L 155,688 Q 155,673 162,673 L 170,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,673 51,677 51,669" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,658 Q 24,673 39,673 L 42,673 L 57,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2033' onclick='hideorshow("x2033","x2034")'>show</button></p>
+ <div id='x2034' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2035' onclick='hideorshow("x2035","x2036")'>show</button></p>
+ <div id='x2036' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2037' onclick='hideorshow("x2037","x2038")'>show</button></p>
+ <div id='x2038' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2039' onclick='hideorshow("x2039","x2040")'>show</button></p>
+ <div id='x2040' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2041' onclick='hideorshow("x2041","x2042")'>show</button></p>
+ <div id='x2042' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2043' onclick='hideorshow("x2043","x2044")'>show</button></p>
+ <div id='x2044' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2045' onclick='hideorshow("x2045","x2046")'>show</button></p>
+ <div id='x2046' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2047' onclick='hideorshow("x2047","x2048")'>show</button></p>
+ <div id='x2048' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2049' onclick='hideorshow("x2049","x2050")'>show</button></p>
+ <div id='x2050' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+</p><p>Generating the results of a simple SELECT
+statement is presented as a four step process in the description below:
+
+</p><ol>
+ <li> <p><a href="lang_select.html#fromclause">FROM clause</a> processing: The input data for the simple SELECT is
+ determined. The input data is either implicitly a single row with 0
+ columns (if there is no FROM clause) or is determined by the FROM
+ clause.
+ </p></li><li> <p><a href="lang_select.html#whereclause">WHERE clause</a> processing: The input data is filtered using the WHERE
+ clause expression.
+ </p></li><li> <p><a href="lang_select.html#resultset">GROUP BY, HAVING and result-column expression</a> processing:
+ The set of result rows is computed by aggregating the data according to
+ any GROUP BY clause and calculating the result-set expressions for the
+ rows of the filtered input dataset.
+ </p></li><li> <p><a href="lang_select.html#distinct">DISTINCT/ALL keyword</a> processing: If the query is a "SELECT
+ DISTINCT" query, duplicate rows are removed from the set of result rows.
+</p></li></ol>
+
+<p>There are two types of simple SELECT statement - aggregate and
+non-aggregate queries. A simple SELECT statement is an aggregate query if
+it contains either a GROUP BY clause or one or more aggregate functions
+in the result-set. Otherwise, if a simple SELECT contains no aggregate
+functions or a GROUP BY clause, it is a non-aggregate query.
+
+<a name="fromclause"></a>
+
+
+</p><h2 id="determination_of_input_data_from_clause_processing_"><span>2.1. </span>Determination of input data (FROM clause processing)</h2>
+
+<p>The input data used by a simple SELECT query is a set of <i>N</i> rows
+each <i>M</i> columns wide.
+
+</p><p>If the FROM clause is omitted from a simple SELECT statement, then the
+input data is implicitly a single row zero columns wide (i.e. <i>N</i>=1 and
+<i>M</i>=0).
+
+</p><p>If a FROM clause is specified, the data on which a simple SELECT query
+operates comes from the one or more tables or subqueries (SELECT statements
+in parentheses) specified following the FROM keyword. A subquery specified
+in the <span class='yyterm'>table-or-subquery</span> following the FROM clause in a
+simple SELECT statement is
+handled as if it was a table containing the data returned by executing the
+subquery statement. Each column of the subquery has the
+<a href="datatype3.html#collation">collation sequence</a> and <a href="datatype3.html#affinity">affinity</a> of the corresponding expression
+in the subquery statement.
+
+</p><p>If there is only a single table or subquery in the FROM
+clause, then the input data used by the SELECT statement is the contents of the
+named table. If there is more than one table or subquery in FROM clause
+then the contents of all tables and/or subqueries
+are joined into a single dataset for the simple SELECT statement to operate on.
+Exactly how the data is combined depends on the specific <a href="syntax/join-operator.html">join-operator</a> and
+<a href="syntax/join-constraint.html">join-constraint</a> used to connect the tables or subqueries together.
+
+</p><p>All joins in SQLite are based on the cartesian product of the left and
+right-hand datasets. The columns of the cartesian product dataset are, in
+order, all the columns of the left-hand dataset followed by all the columns
+of the right-hand dataset. There is a row in the cartesian product dataset
+formed by combining each unique combination of a row from the left-hand
+and right-hand datasets. In other words, if the left-hand dataset consists of
+<i>N<sub><small>left</small></sub></i> rows of
+<i>M<sub><small>left</small></sub></i> columns, and the right-hand dataset of
+<i>N<sub><small>right</small></sub></i> rows of
+<i>M<sub><small>right</small></sub></i> columns, then the cartesian product is a
+dataset of
+<i>N<sub><small>left</small></sub>&times;N<sub><small>right</small></sub></i>
+rows, each containing
+<i>M<sub><small>left</small></sub>+M<sub><small>right</small></sub></i> columns.
+
+</p><p>If the join-operator is "CROSS JOIN", "INNER JOIN", "JOIN" or a comma
+(",") and there is no ON or USING clause, then the result of the join is
+simply the cartesian product of the left and right-hand datasets.
+If join-operator does have ON or USING clauses, those are handled according to
+the following bullet points:
+
+</p><ul>
+ <li> <p>If there is an ON clause then the ON expression is
+ evaluated for each row of the cartesian product as a
+ <a href="lang_expr.html#booleanexpr">boolean expression</a>. Only rows for which the expression evaluates to
+ true are included from the dataset.
+
+ </p></li><li> <p>If there is a USING clause
+ then each of the column names specified must exist in the datasets to
+ both the left and right of the join-operator. For each pair of named
+ columns, the expression "lhs.X = rhs.X" is evaluated for each row of
+ the cartesian product as a <a href="lang_expr.html#booleanexpr">boolean expression</a>. Only rows for which
+ all such expressions evaluates to true are included from the
+ result set. When comparing values as a result of a USING clause, the
+ normal rules for handling affinities, collation sequences and NULL
+ values in comparisons apply. The column from the dataset on the
+ left-hand side of the join-operator is considered to be on the left-hand
+ side of the comparison operator (=) for the purposes of collation
+ sequence and affinity precedence.
+
+ </p><p>For each pair of columns identified by a USING clause, the column
+ from the right-hand dataset is omitted from the joined dataset. This
+ is the only difference between a USING clause and its equivalent ON
+ constraint.
+
+ </p></li><li> <p>If the NATURAL keyword is in the join-operator then an
+ implicit USING clause is added to the join-constraints. The implicit
+ USING clause contains each of the column names that appear in both
+ the left and right-hand input datasets. If the left and right-hand
+ input datasets feature no common column names, then the NATURAL keyword
+ has no effect on the results of the join. A USING or ON clause may
+ not be added to a join that specifies the NATURAL keyword.
+
+ </p></li><li> <p>If the join-operator is a "LEFT JOIN" or "LEFT OUTER JOIN", then
+ after
+ the ON or USING filtering clauses have been applied, an extra row is
+ added to the output for each row in the original left-hand input
+ dataset that does not match any row in the right-hand dataset.
+ The added rows contain NULL values in the columns
+ that would normally contain values copied from the right-hand input
+ dataset.
+
+ </p></li><li> <p>
+ <a name="rjoin"></a>
+
+ If the join-operator is a "RIGHT JOIN" or "RIGHT OUTER JOIN", then
+ after the ON or USING filtering clauses have been applied, an extra row is
+ added to the output for each row in the original right-hand input
+ dataset that does not match any row in the left-hand dataset.
+ The added rows contain NULL values in the columns
+ that would normally contain values copied from the left-hand input
+ dataset.
+
+ </p></li><li> <p>
+ <a name="fulljoin"></a>
+
+ A "FULL JOIN" or "FULL OUTER JOIN" is a combination of a
+ "LEFT JOIN" and a "RIGHT JOIN". Extra rows of output are
+ added for each row in left dataset that matches no rows in the right,
+ and for each row in the right dataset that matches no rows in the
+ left. Unmatched columns are filled in with NULL.
+</p></li></ul>
+
+<p>When more than two tables are joined together as part of a FROM clause,
+the join operations are processed in order from left to right. In other
+words, the FROM clause (A join-op-1 B join-op-2 C) is computed as
+((A join-op-1 B) join-op-2 C).
+
+<a name="crossjoin"></a>
+
+</p><h2 id="special_handling_of_cross_join_"><span>2.2. </span>Special handling of CROSS JOIN.</h2>
+
+<p>There is no difference between the "INNER JOIN", "JOIN" and "," join
+operators. They are completely interchangeable in SQLite.
+The "CROSS JOIN" join operator produces the same result as the
+"INNER JOIN", "JOIN" and "," operators, but is
+<a href="optoverview.html#crossjoin">handled differently by the query optimizer</a>
+in that it prevents the query optimizer from reordering
+the tables in the join. An application programmer can use the CROSS JOIN
+operator to directly influence the algorithm that is chosen to implement
+the SELECT statement. Avoid using CROSS JOIN except in specific situations
+where manual control of the query optimizer is desired. Avoid using
+CROSS JOIN early in the development of an application as doing so is
+a <a href="http://c2.com/cgi/wiki?PrematureOptimization">premature
+optimization</a>. The special handling of CROSS JOIN is an SQLite-specific
+feature and is not a part of standard SQL.
+
+<a name="whereclause"></a>
+
+
+</p><h2 id="where_clause_filtering_"><span>2.3. </span>WHERE clause filtering.</h2>
+
+<p>If a WHERE clause is specified, the WHERE expression is evaluated for
+each row in the input data as a <a href="lang_expr.html#booleanexpr">boolean expression</a>. Only rows for which the
+WHERE clause expression evaluates to true are included from the dataset before
+continuing. Rows are excluded from the result if the WHERE clause
+evaluates to either false or NULL.
+
+</p><p>For a JOIN or INNER JOIN or CROSS JOIN, there is no difference between
+a constraint expression in the WHERE clause and one in the ON clause. However,
+for a LEFT JOIN or LEFT OUTER JOIN, the difference is very important.
+In a LEFT JOIN,
+the extra NULL row for the right-hand table is added after ON clause processing
+but before WHERE clause processing. A constraint of the form "left.x=right.y"
+in an ON clause will therefore allow through the added all-NULL rows of the
+right table. But if that same constraint is in the WHERE clause a NULL in
+"right.y" will prevent the expression "left.x=right.y" from being true, and
+thus exclude that row from the output.
+
+<a name="resultset"></a>
+
+
+</p><h2 id="generation_of_the_set_of_result_rows"><span>2.4. </span>Generation of the set of result rows</h2>
+
+<p>Once the input data from the FROM clause has been filtered by the
+WHERE clause expression (if any), the set of result rows for the simple
+SELECT are calculated. Exactly how this is done depends on whether the simple
+SELECT is an aggregate or non-aggregate query, and whether or not a GROUP
+BY clause was specified.
+
+</p><p> The list of expressions between the SELECT and FROM keywords is known as
+the result expression list. If a result expression is the special expression
+"*" then all columns in the input data are substituted for that one expression.
+If the expression is the alias of a table or subquery in the FROM clause
+followed by ".*" then all columns from the named table or subquery are
+substituted for the single expression. It is an error to use a "*" or
+"alias.*" expression in any context other than a result expression list.
+It is also an error to use a "*" or "alias.*" expression in a simple SELECT
+query that does not have a FROM clause.
+
+</p><p> The number of columns in the rows returned by a simple SELECT statement
+is equal to the number of expressions in the result expression list after
+substitution of * and alias.* expressions. Each result row is calculated by
+evaluating the expressions in the result expression list with respect to a
+single row of input data or, for aggregate queries, with respect to a group
+of rows.
+
+</p><ul>
+ <li><p>If the SELECT statement is <b>a non-aggregate query</b>, then
+ each expression in the result expression list is evaluated for each row in
+ the dataset filtered by the WHERE clause.
+
+ </p></li><li><p>If the SELECT statement is <b>an aggregate query without a GROUP
+ BY</b> clause, then each aggregate expression in the result-set is
+ evaluated once across the entire dataset. Each non-aggregate expression
+ in the result-set is evaluated once for an arbitrarily selected row of
+ the dataset. The same arbitrarily selected row is used for each
+ non-aggregate expression. Or, if the dataset contains zero rows, then
+ each non-aggregate expression is evaluated against a row consisting
+ entirely of NULL values.
+
+ </p><p>The single row of result-set data created by evaluating the aggregate
+ and non-aggregate expressions in the result-set forms the result of an
+ aggregate query without a GROUP BY clause. An aggregate query without a
+ GROUP BY clause always returns exactly one row of data, even if there are
+ zero rows of input data.
+
+
+ </p></li><li><p>If the SELECT statement is <b>an aggregate query with a GROUP
+ BY</b> clause, then each of the expressions specified as part of the
+ GROUP BY clause is evaluated for each row of the dataset according to
+ the processing rules stated below for ORDER BY expressions. Each row
+ is then assigned to a "group" based on the results; rows for which
+ the results of evaluating the GROUP BY expressions are the same get
+ assigned to the same group. For the purposes of grouping rows, NULL
+ values are considered equal. The usual rules for <a href="datatype3.html#collation">selecting a
+ collation sequence</a> with which to compare text values apply when evaluating
+ expressions in a GROUP BY clause. The expressions in the GROUP BY clause
+ do <em>not</em> have to be expressions that appear in the result. The
+ expressions in a GROUP BY clause may not be aggregate expressions.
+
+
+ </p><p>If a HAVING clause is specified, it is evaluated once for each group
+ of rows as a <a href="lang_expr.html#booleanexpr">boolean expression</a>. If the result of evaluating the
+ HAVING clause is false, the group is discarded. If the HAVING clause is
+ an aggregate expression, it is evaluated across all rows in the group. If
+ a HAVING clause is a non-aggregate expression, it is evaluated with respect
+ to an arbitrarily selected row from the group. The HAVING expression may
+ refer to values, even aggregate functions, that are not in the result.</p>
+
+ <p>Each expression in the result-set is then evaluated once for each
+ group of rows. If the expression is an aggregate expression, it is
+ evaluated across all rows in the group. Otherwise, it is evaluated against
+ a single arbitrarily chosen row from within the group. If there is more
+ than one non-aggregate expression in the result-set, then all such
+ expressions are evaluated for the same row.
+
+ </p><p>Each group of input dataset rows contributes a single row to the
+ set of result rows. Subject to filtering associated with the DISTINCT
+ keyword, the number of rows returned by an aggregate query with a GROUP
+ BY clause is the same as the number of groups of rows produced by applying
+ the GROUP BY and HAVING clauses to the filtered input dataset.
+</p></li></ul>
+
+<a name="bareagg"></a>
+
+<h2 id="bare_columns_in_an_aggregate_query"><span>2.5. </span>Bare columns in an aggregate query</h2>
+
+<p>The usual case is that all column names in an aggregate query are either
+arguments to <a href="lang_aggfunc.html">aggregate functions</a> or else appear in the GROUP BY clause.
+A result column which contains a column name that is not within an
+aggregate function and that does not appear in the GROUP BY clause (if
+one exists) is called a "bare" column.
+Example:
+</p><blockquote><pre>
+SELECT a, b, sum(c) FROM tab1 GROUP BY a;
+</pre></blockquote>
+<p>In the query above, the "a" column is part of the GROUP BY clause
+and so each row of the output contains one of the distinct values for
+"a". The "c" column is contained within the <a href="lang_aggfunc.html#sumunc">sum()</a> aggregate function
+and so that output column is the sum of all "c" values in rows that
+have the same value for "a". But what is the result of the bare
+column "b"? The answer is that the "b" result will be the
+value for "b" in one of the input rows that form the aggregate.
+The problem is that you usually do not know which input row is used
+to compute "b", and so in many cases the value for "b" is undefined.
+</p>
+<p>
+Special processing occurs when the aggregate function is
+either <a href="lang_aggfunc.html#min_agg">min()</a> or <a href="lang_aggfunc.html#max_agg">max()</a>. Example:
+</p><blockquote><pre>
+SELECT a, b, max(c) FROM tab1 GROUP BY a;
+</pre></blockquote>
+
+<p>If there is exactly one <a href="lang_aggfunc.html#max_agg">min()</a> or <a href="lang_aggfunc.html#min_agg">max()</a> aggregate
+in the query, then all bare columns in the result set take values from an
+input row which also contains the minimum or maximum. So in the query
+above, the value of the "b" column in the output will be the value of
+the "b" column in the input row that has the largest "c" value.
+There are limitations on this special behavior of
+<a href="lang_aggfunc.html#max_agg">min()</a> and <a href="lang_aggfunc.html#min_agg">max()</a>:
+
+</p><ol>
+<li>
+<p>If the same minimum or maximum value occurs on two or more rows,
+then bare values might be selected from any of those rows. The choice
+is arbitrary. There is no way to predict from which row the bare values
+will be choosen. The choice might be different for different bare columns
+within the same query.
+
+</p></li><li>
+<p>If there are two or more <a href="lang_aggfunc.html#min_agg">min()</a> or <a href="lang_aggfunc.html#max_agg">max()</a> aggregates
+in the query, then bare column values will be taken from one of the rows
+on which one of the aggregates has their minimum or maximum value. The choice
+of which <a href="lang_aggfunc.html#min_agg">min()</a> or <a href="lang_aggfunc.html#max_agg">max()</a> aggregate determines the
+selection of bare column values is arbitrary. The choice might be different
+for different bare columns within the same query.
+
+</p></li><li>
+<p>This special processing for <a href="lang_aggfunc.html#min_agg">min()</a> or <a href="lang_aggfunc.html#max_agg">max()</a> aggregates
+only works for the built-in implementation of those aggregates. If an
+application overrides the built-in <a href="lang_aggfunc.html#min_agg">min()</a> or <a href="lang_aggfunc.html#max_agg">max()</a> aggregates
+with application-defined alternatives, then the values selected for bare
+columns will be taken from an arbitrary row.
+</p></li></ol>
+
+<p>Most other SQL database engines disallow bare columns. If you include
+a bare column in a query, other database engines will usually raise an error.
+The ability to include bare columns in a query is an SQLite-specific extension.</p>
+
+<a name="distinct"></a>
+
+
+<h2 id="removal_of_duplicate_rows_distinct_processing_"><span>2.6. </span>Removal of duplicate rows (DISTINCT processing)</h2>
+
+<p>One of the ALL or DISTINCT keywords may follow the SELECT keyword in a
+simple SELECT statement. If the simple SELECT is a SELECT ALL, then the
+entire set of result rows are returned by the SELECT. If neither ALL or
+DISTINCT are present, then the behavior is as if ALL were specified.
+If the simple SELECT is a SELECT DISTINCT, then duplicate rows are removed
+from the set of result rows before it is returned. For the purposes of
+detecting duplicate rows, two NULL values are considered to be equal. The
+<a href="datatype3.html#colrules">usual rules</a> apply for selecting a collation
+sequence to compare text values.
+
+<a name="compound"></a>
+
+</p><h1 id="compound_select_statements"><span>3. </span>Compound Select Statements</h1>
+
+<p>Two or more <a href="lang_select.html#simpleselect">simple SELECT</a> statements may be connected together to form
+a compound SELECT using the UNION, UNION ALL, INTERSECT or EXCEPT operator,
+as shown by the following diagram:
+
+<p><b><a href="syntax/compound-select-stmt.html">compound-select-stmt:</a></b>
+<button id='x2051' onclick='hideorshow("x2051","x2052")'>hide</button></p>
+ <div id='x2052' class='imgcontainer'>
+ <div style="max-width:652px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 652.306 560.52">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L114,32A15 15 0 0 0 129 17A15 15 0 0 0 114 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="98" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M189,62L275,62A15 15 0 0 0 290 47L290,47A15 15 0 0 0 275 32L189,32A15 15 0 0 0 174 47L174,47A15 15 0 0 0 189 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="232" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="232,17 220,21 220,12" style="fill:rgb(0,0,0)"/>
+<path d="M129,17L226,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,17 368,21 368,12" style="fill:rgb(0,0,0)"/>
+<path d="M232,17L374,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,32L606,32L606,2L380,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="174,47 162,51 162,43" style="fill:rgb(0,0,0)"/>
+<path d="M129,17 L 136,17 Q 144,17 144,32 L 144,32 Q 144,47 156,47 L 168,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,47 301,51 301,43" style="fill:rgb(0,0,0)"/>
+<path d="M290,47L307,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,47 L 321,47 Q 328,47 328,32 L 328,32 Q 328,17 343,17 L 353,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,70A15 15 0 0 0 508 55L508,55A15 15 0 0 0 493 39A15 15 0 0 0 478 55L478,55A15 15 0 0 0 493 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="508,55 520,50 520,59" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,40 Q 621,55 606,55 L 529,55 L 514,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,55 L 372,55 Q 357,55 357,40 L 357,32 Q 357,17 363,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M68,183L171,183L171,153L68,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="120" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M83,365L128,365A15 15 0 0 0 143 349A15 15 0 0 0 128 334L83,334A15 15 0 0 0 68 349A15 15 0 0 0 83 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="166,349 154,354 154,345" style="fill:rgb(0,0,0)"/>
+<path d="M143,349L160,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M181,365L185,365A15 15 0 0 0 200 349A15 15 0 0 0 185 334L181,334A15 15 0 0 0 166 349A15 15 0 0 0 181 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M83,470L116,470A15 15 0 0 0 132 455A15 15 0 0 0 116 440L83,440A15 15 0 0 0 68 455A15 15 0 0 0 83 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="100" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="155,455 143,460 143,451" style="fill:rgb(0,0,0)"/>
+<path d="M132,455L149,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M155,470L204,470L204,440L155,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="68,168 56,172 56,164" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,153 Q 47,168 55,168 L 62,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="335,92 346,88 346,97" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 627,17 Q 642,17 642,32 L 642,77 Q 642,92 627,92 L 356,92 L 341,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M335,92 L 62,92 Q 47,92 47,100 L 47,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,168 232,172 232,164" style="fill:rgb(0,0,0)"/>
+<path d="M171,168L238,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,183L302,183A15 15 0 0 0 317 168A15 15 0 0 0 302 153L259,153A15 15 0 0 0 243 168A15 15 0 0 0 259 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M259,221L302,221A15 15 0 0 0 317 206A15 15 0 0 0 302 191L259,191A15 15 0 0 0 243 206A15 15 0 0 0 259 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<polygon points="340,206 329,210 329,201" style="fill:rgb(0,0,0)"/>
+<path d="M317,206L335,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M355,221L370,221A15 15 0 0 0 386 206A15 15 0 0 0 370 191L355,191A15 15 0 0 0 340 206A15 15 0 0 0 355 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="409,206 397,210 397,201" style="fill:rgb(0,0,0)"/>
+<path d="M386,206L403,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,168 435,172 435,164" style="fill:rgb(0,0,0)"/>
+<path d="M409,206 L 416,206 Q 424,206 424,191 L 424,183 Q 424,168 432,168 L 441,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,183L550,183L550,153L447,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="498" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M259,259L343,259A15 15 0 0 0 359 244A15 15 0 0 0 343 228L259,228A15 15 0 0 0 243 244A15 15 0 0 0 259 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="301" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M259,297L310,297A15 15 0 0 0 325 281A15 15 0 0 0 310 266L259,266A15 15 0 0 0 243 281A15 15 0 0 0 259 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="284" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="243,281 232,286 232,277" style="fill:rgb(0,0,0)"/>
+<path d="M205,168 L 213,168 Q 220,168 220,183 L 220,266 Q 220,281 229,281 L 238,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,244 232,248 232,239" style="fill:rgb(0,0,0)"/>
+<path d="M220,228 L 220,236 Q 220,244 229,244 L 238,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,206 232,210 232,201" style="fill:rgb(0,0,0)"/>
+<path d="M220,191 L 220,198 Q 220,206 229,206 L 238,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="409,244 397,248 397,239" style="fill:rgb(0,0,0)"/>
+<path d="M359,244L403,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,244 L 416,244 Q 424,244 424,229 L 424,206 L 424,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="409,281 397,286 397,277" style="fill:rgb(0,0,0)"/>
+<path d="M325,281L403,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,281 L 416,281 Q 424,281 424,266 L 424,243 L 424,228" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,168L435,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,138 389,133 389,142" style="fill:rgb(0,0,0)"/>
+<path d="M550,168 L 558,168 Q 565,168 565,153 L 565,153 Q 565,138 550,138 L 399,138 L 384,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M378,138 L 205,138 Q 190,138 190,153 L 190,153 Q 190,168 198,168 L 205,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="319,315 331,311 331,320" style="fill:rgb(0,0,0)"/>
+<path d="M550,168 L 571,168 Q 586,168 586,183 L 586,300 Q 586,315 571,315 L 340,315 L 325,315" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,349 56,354 56,345" style="fill:rgb(0,0,0)"/>
+<path d="M319,315 L 62,315 Q 47,315 47,330 L 47,334 Q 47,349 55,349 L 62,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,349 234,354 234,345" style="fill:rgb(0,0,0)"/>
+<path d="M200,349L239,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,365L375,365L375,334L245,334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,402A15 15 0 0 0 325 387A15 15 0 0 0 310 372A15 15 0 0 0 295 387A15 15 0 0 0 310 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="387" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,387 337,383 337,392" style="fill:rgb(0,0,0)"/>
+<path d="M375,349 L 382,349 Q 390,349 390,364 L 390,372 Q 390,387 375,387 L 346,387 L 331,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,387 L 237,387 Q 222,387 222,372 L 222,364 Q 222,349 228,349 L 234,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,380 407,368 415,368" style="fill:rgb(0,0,0)"/>
+<path d="M375,349 L 396,349 Q 411,349 411,362 L 411,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,421 233,417 233,426" style="fill:rgb(0,0,0)"/>
+<path d="M411,380 L 411,406 Q 411,421 396,421 L 242,421 L 227,421" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,455 56,460 56,451" style="fill:rgb(0,0,0)"/>
+<path d="M221,421 L 62,421 Q 47,421 47,436 L 47,440 Q 47,455 55,455 L 62,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,387 43,376 51,376" style="fill:rgb(0,0,0)"/>
+<path d="M47,334L47,382" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,387L47,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,501L329,501A15 15 0 0 0 344 486A15 15 0 0 0 329 470L278,470A15 15 0 0 0 263 486A15 15 0 0 0 278 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="304" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="367,486 356,490 356,481" style="fill:rgb(0,0,0)"/>
+<path d="M344,486L362,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,501L417,501L417,470L367,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="392" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="440,486 428,490 428,481" style="fill:rgb(0,0,0)"/>
+<path d="M417,486L434,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,538A15 15 0 0 0 293 523A15 15 0 0 0 278 508A15 15 0 0 0 263 523A15 15 0 0 0 278 538Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="523" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="316,523 305,528 305,519" style="fill:rgb(0,0,0)"/>
+<path d="M293,523L310,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,538L365,538L365,508L316,508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="341" y="523" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="227,455 215,460 215,451" style="fill:rgb(0,0,0)"/>
+<path d="M204,455L221,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="263,523 251,528 251,519" style="fill:rgb(0,0,0)"/>
+<path d="M227,455 L 234,455 Q 242,455 242,470 L 242,508 Q 242,523 249,523 L 257,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="263,486 251,490 251,481" style="fill:rgb(0,0,0)"/>
+<path d="M227,455 L 234,455 Q 242,455 242,470 L 242,471 Q 242,486 249,486 L 257,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,455 428,460 428,451" style="fill:rgb(0,0,0)"/>
+<path d="M227,455L434,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="642,554 631,558 631,549" style="fill:rgb(0,0,0)"/>
+<path d="M440,455 L 461,455 Q 476,455 476,470 L 476,539 Q 476,554 491,554 L 622,554 L 637,554" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="646" cy="554" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,486 L 461,486 Q 476,486 476,493 L 476,501" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,523 428,528 428,519" style="fill:rgb(0,0,0)"/>
+<path d="M365,523L434,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,523 L 461,523 Q 476,523 476,531 L 476,538" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,554 428,558 428,549" style="fill:rgb(0,0,0)"/>
+<path d="M47,440 L 47,539 Q 47,554 62,554 L 419,554 L 434,554" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,554L512,554" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x2053' onclick='hideorshow("x2053","x2054")'>show</button></p>
+ <div id='x2054' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2055' onclick='hideorshow("x2055","x2056")'>show</button></p>
+ <div id='x2056' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2057' onclick='hideorshow("x2057","x2058")'>show</button></p>
+ <div id='x2058' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2059' onclick='hideorshow("x2059","x2060")'>show</button></p>
+ <div id='x2060' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2061' onclick='hideorshow("x2061","x2062")'>show</button></p>
+ <div id='x2062' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2063' onclick='hideorshow("x2063","x2064")'>show</button></p>
+ <div id='x2064' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2065' onclick='hideorshow("x2065","x2066")'>show</button></p>
+ <div id='x2066' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2067' onclick='hideorshow("x2067","x2068")'>show</button></p>
+ <div id='x2068' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2069' onclick='hideorshow("x2069","x2070")'>show</button></p>
+ <div id='x2070' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2071' onclick='hideorshow("x2071","x2072")'>show</button></p>
+ <div id='x2072' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x2073' onclick='hideorshow("x2073","x2074")'>show</button></p>
+ <div id='x2074' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x2075' onclick='hideorshow("x2075","x2076")'>show</button></p>
+ <div id='x2076' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x2077' onclick='hideorshow("x2077","x2078")'>show</button></p>
+ <div id='x2078' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x2079' onclick='hideorshow("x2079","x2080")'>show</button></p>
+ <div id='x2080' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2081' onclick='hideorshow("x2081","x2082")'>show</button></p>
+ <div id='x2082' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x2083' onclick='hideorshow("x2083","x2084")'>show</button></p>
+ <div id='x2084' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2085' onclick='hideorshow("x2085","x2086")'>show</button></p>
+ <div id='x2086' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2087' onclick='hideorshow("x2087","x2088")'>show</button></p>
+ <div id='x2088' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2089' onclick='hideorshow("x2089","x2090")'>show</button></p>
+ <div id='x2090' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2091' onclick='hideorshow("x2091","x2092")'>show</button></p>
+ <div id='x2092' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2093' onclick='hideorshow("x2093","x2094")'>show</button></p>
+ <div id='x2094' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2095' onclick='hideorshow("x2095","x2096")'>show</button></p>
+ <div id='x2096' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2097' onclick='hideorshow("x2097","x2098")'>show</button></p>
+ <div id='x2098' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2099' onclick='hideorshow("x2099","x2100")'>show</button></p>
+ <div id='x2100' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2101' onclick='hideorshow("x2101","x2102")'>show</button></p>
+ <div id='x2102' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x2103' onclick='hideorshow("x2103","x2104")'>show</button></p>
+ <div id='x2104' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x2105' onclick='hideorshow("x2105","x2106")'>show</button></p>
+ <div id='x2106' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2107' onclick='hideorshow("x2107","x2108")'>show</button></p>
+ <div id='x2108' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-core.html">select-core:</a></b>
+<button id='x2109' onclick='hideorshow("x2109","x2110")'>show</button></p>
+ <div id='x2110' style='display:none;' class='imgcontainer'>
+ <div style="max-width:655px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 655.157 728.568">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,17 51,21 51,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L57,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,32L129,32A15 15 0 0 0 144 17A15 15 0 0 0 129 2L78,2A15 15 0 0 0 63 17A15 15 0 0 0 78 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="104" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M144,17 L 152,17 Q 159,17 159,32 L 159,32 Q 159,47 170,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,62L269,62A15 15 0 0 0 284 47L284,47A15 15 0 0 0 269 32L201,32A15 15 0 0 0 186 47L186,47A15 15 0 0 0 201 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="235" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="353,17 342,21 342,12" style="fill:rgb(0,0,0)"/>
+<path d="M284,47 L 292,47 Q 299,47 299,32 L 299,32 Q 299,17 314,17 L 333,17 L 348,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M353,32L481,32L481,2L353,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M417,70A15 15 0 0 0 432 55L432,55A15 15 0 0 0 417 39A15 15 0 0 0 402 55L402,55A15 15 0 0 0 417 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="432,55 444,50 444,59" style="fill:rgb(0,0,0)"/>
+<path d="M481,17 L 488,17 Q 496,17 496,32 L 496,40 Q 496,55 481,55 L 453,55 L 438,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M402,55 L 342,55 Q 327,55 327,40 L 327,32 Q 327,17 334,17 L 342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="235,17 224,21 224,12" style="fill:rgb(0,0,0)"/>
+<path d="M144,17L229,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M235,17L342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,100L216,100A15 15 0 0 0 231 85A15 15 0 0 0 216 70L201,70A15 15 0 0 0 186 85A15 15 0 0 0 201 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="208" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="284,85 273,89 273,81" style="fill:rgb(0,0,0)"/>
+<path d="M231,85L279,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,85 L 292,85 Q 299,85 299,70 L 299,47 L 299,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,85 174,89 174,81" style="fill:rgb(0,0,0)"/>
+<path d="M144,17 L 152,17 Q 159,17 159,32 L 159,70 Q 159,85 170,85 L 180,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,176L139,176A15 15 0 0 0 154 160A15 15 0 0 0 139 145L105,145A15 15 0 0 0 89 160A15 15 0 0 0 105 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="122" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="226,160 215,165 215,156" style="fill:rgb(0,0,0)"/>
+<path d="M154,160L221,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M226,176L387,176L387,145L226,145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M256,250L358,250L358,219L256,219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="235" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M307,212A15 15 0 0 0 322 197A15 15 0 0 0 307 182A15 15 0 0 0 292 197A15 15 0 0 0 307 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="197" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="322,197 334,192 334,201" style="fill:rgb(0,0,0)"/>
+<path d="M387,160 L 395,160 Q 402,160 402,175 L 402,182 Q 402,197 387,197 L 343,197 L 328,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M292,197 L 215,197 Q 200,197 200,182 L 200,175 Q 200,160 207,160 L 215,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="256,235 244,239 244,230" style="fill:rgb(0,0,0)"/>
+<path d="M154,160 L 162,160 Q 169,160 169,175 L 169,220 Q 169,235 184,235 L 235,235 L 250,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="420,201 425,213 416,213" style="fill:rgb(0,0,0)"/>
+<path d="M358,235 L 373,235 Q 387,235 402,235 L 405,235 Q 420,235 420,221 L 420,207" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="441,160 430,165 430,156" style="fill:rgb(0,0,0)"/>
+<path d="M420,201 L 420,175 Q 420,160 428,160 L 436,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,160 L 432,160 Q 423,160 423,160 Q 423,160 431,160 L 438,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,85 492,73 500,73" style="fill:rgb(0,0,0)"/>
+<path d="M481,17 L 488,17 Q 496,17 496,32 L 496,64 L 496,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,123 296,118 296,127" style="fill:rgb(0,0,0)"/>
+<path d="M496,85 L 496,108 Q 496,123 481,123 L 305,123 L 290,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,160 78,165 78,156" style="fill:rgb(0,0,0)"/>
+<path d="M284,123 L 78,123 Q 63,123 63,138 L 63,145 Q 63,160 73,160 L 84,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,325L154,325A15 15 0 0 0 169 310A15 15 0 0 0 154 295L105,295A15 15 0 0 0 89 310A15 15 0 0 0 105 325Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="310" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="192,310 181,314 181,306" style="fill:rgb(0,0,0)"/>
+<path d="M169,310L186,310" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M192,325L241,325L241,295L192,295Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="217" y="310" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="453,212 449,200 458,200" style="fill:rgb(0,0,0)"/>
+<path d="M387,160 L 438,160 Q 453,160 453,175 L 453,191 L 453,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,272 318,268 318,277" style="fill:rgb(0,0,0)"/>
+<path d="M453,212 L 453,257 Q 453,272 438,272 L 328,272 L 313,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,310 78,314 78,306" style="fill:rgb(0,0,0)"/>
+<path d="M307,272 L 78,272 Q 63,272 63,287 L 63,295 Q 63,310 73,310 L 84,310" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,212 59,200 67,200" style="fill:rgb(0,0,0)"/>
+<path d="M63,145L63,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,212L63,295" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,424L148,424A15 15 0 0 0 163 408A15 15 0 0 0 148 393L105,393A15 15 0 0 0 89 408A15 15 0 0 0 105 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="126" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="186,408 175,413 175,404" style="fill:rgb(0,0,0)"/>
+<path d="M163,408L180,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,424L205,424A15 15 0 0 0 220 408A15 15 0 0 0 205 393L201,393A15 15 0 0 0 186 408A15 15 0 0 0 201 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="203" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="256,408 245,413 245,404" style="fill:rgb(0,0,0)"/>
+<path d="M220,408L251,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,424L306,424L306,393L256,393Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="388,408 377,413 377,404" style="fill:rgb(0,0,0)"/>
+<path d="M306,408L383,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,424L456,424A15 15 0 0 0 471 408A15 15 0 0 0 456 393L404,393A15 15 0 0 0 388 408A15 15 0 0 0 404 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="430" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="494,408 483,413 483,404" style="fill:rgb(0,0,0)"/>
+<path d="M471,408L488,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,424L543,424L543,393L494,393Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M281,461A15 15 0 0 0 296 446A15 15 0 0 0 281 431A15 15 0 0 0 266 446A15 15 0 0 0 281 461Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="446" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="296,446 308,442 308,451" style="fill:rgb(0,0,0)"/>
+<path d="M306,408 L 313,408 Q 321,408 321,423 L 321,431 Q 321,446 311,446 L 302,446" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,446 L 245,446 Q 230,446 230,431 L 230,423 Q 230,408 237,408 L 245,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="450,439 439,443 439,434" style="fill:rgb(0,0,0)"/>
+<path d="M347,408 L 354,408 Q 362,408 362,423 L 362,424 Q 362,439 377,439 L 430,439 L 445,439" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M450,439 L 543,439 Q 558,439 558,424 L 558,423 Q 558,408 566,408 L 573,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="203,378 192,382 192,374" style="fill:rgb(0,0,0)"/>
+<path d="M63,348 L 63,363 Q 63,378 78,378 L 183,378 L 198,378" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="347,408 336,413 336,404" style="fill:rgb(0,0,0)"/>
+<path d="M203,378 L 306,378 Q 321,378 321,393 L 321,393 Q 321,408 331,408 L 341,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,348 181,344 181,352" style="fill:rgb(0,0,0)"/>
+<path d="M241,310 L 249,310 Q 256,310 256,325 L 256,333 Q 256,348 241,348 L 190,348 L 175,348" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,408 78,413 78,404" style="fill:rgb(0,0,0)"/>
+<path d="M169,348 L 78,348 Q 63,348 63,363 L 63,393 Q 63,408 73,408 L 84,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,335 59,323 67,323" style="fill:rgb(0,0,0)"/>
+<path d="M63,295L63,329" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,335L63,393" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,537L168,537A15 15 0 0 0 183 522A15 15 0 0 0 168 507L105,507A15 15 0 0 0 89 522A15 15 0 0 0 105 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="219,522 208,526 208,517" style="fill:rgb(0,0,0)"/>
+<path d="M183,522L213,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,537L331,537A15 15 0 0 0 346 522A15 15 0 0 0 331 507L234,507A15 15 0 0 0 219 522A15 15 0 0 0 234 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="369,522 358,526 358,517" style="fill:rgb(0,0,0)"/>
+<path d="M346,522L364,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,537L388,537A15 15 0 0 0 404 522A15 15 0 0 0 388 507L384,507A15 15 0 0 0 369 522A15 15 0 0 0 384 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="386" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="427,522 415,526 415,517" style="fill:rgb(0,0,0)"/>
+<path d="M404,522L421,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M427,537L545,537L545,507L427,507Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M382,575A15 15 0 0 0 397 560A15 15 0 0 0 382 544A15 15 0 0 0 367 560A15 15 0 0 0 382 575Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="560" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="397,560 409,555 409,564" style="fill:rgb(0,0,0)"/>
+<path d="M545,522 L 553,522 Q 560,522 560,537 L 560,545 Q 560,560 545,560 L 418,560 L 403,560" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,560 L 208,560 Q 193,560 193,545 L 193,537 Q 193,522 200,522 L 208,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="588,446 584,435 593,435" style="fill:rgb(0,0,0)"/>
+<path d="M543,408 L 573,408 Q 588,408 588,423 L 588,425 L 588,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,484 318,480 318,488" style="fill:rgb(0,0,0)"/>
+<path d="M588,446 L 588,469 Q 588,484 573,484 L 328,484 L 313,484" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,522 78,526 78,517" style="fill:rgb(0,0,0)"/>
+<path d="M307,484 L 78,484 Q 63,484 63,499 L 63,507 Q 63,522 73,522 L 84,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,446 59,435 67,435" style="fill:rgb(0,0,0)"/>
+<path d="M63,393L63,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,597 295,602 295,593" style="fill:rgb(0,0,0)"/>
+<path d="M63,446 L 63,582 Q 63,597 78,597 L 286,597 L 301,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="645,597 634,602 634,593" style="fill:rgb(0,0,0)"/>
+<path d="M307,597L640,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="649" cy="597" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,586 556,574 564,574" style="fill:rgb(0,0,0)"/>
+<path d="M560,544L560,580" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M560,586 L 560,592 Q 560,597 568,597 L 575,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,688L130,688A15 15 0 0 0 145 673A15 15 0 0 0 130 658L78,658A15 15 0 0 0 63 673A15 15 0 0 0 78 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="104" y="673" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="181,673 170,677 170,669" style="fill:rgb(0,0,0)"/>
+<path d="M145,673L176,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,688A15 15 0 0 0 212 673A15 15 0 0 0 197 658A15 15 0 0 0 181 673A15 15 0 0 0 197 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="197" y="673" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="248,673 236,677 236,669" style="fill:rgb(0,0,0)"/>
+<path d="M212,673L242,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,688L297,688L297,658L248,658Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="673" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="333,673 321,677 321,669" style="fill:rgb(0,0,0)"/>
+<path d="M297,673L327,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,688A15 15 0 0 0 363 673A15 15 0 0 0 348 658A15 15 0 0 0 333 673A15 15 0 0 0 348 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="673" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="573,673 562,677 562,669" style="fill:rgb(0,0,0)"/>
+<path d="M363,673L568,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="588,612 593,624 584,624" style="fill:rgb(0,0,0)"/>
+<path d="M573,673 L 581,673 Q 588,673 588,658 L 588,633 L 588,618" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M588,612 L 588,605 Q 588,597 603,597 L 609,597 L 624,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,650A15 15 0 0 0 287 635A15 15 0 0 0 272 620A15 15 0 0 0 257 635A15 15 0 0 0 272 650Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="635" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M272,726A15 15 0 0 0 287 711A15 15 0 0 0 272 696A15 15 0 0 0 257 711A15 15 0 0 0 272 726Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="711" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="287,635 299,631 299,640" style="fill:rgb(0,0,0)"/>
+<path d="M297,673 L 304,673 Q 312,673 312,658 L 312,650 Q 312,635 303,635 L 293,635" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,635 L 236,635 Q 221,635 221,650 L 221,658 Q 221,673 229,673 L 236,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="287,711 299,706 299,715" style="fill:rgb(0,0,0)"/>
+<path d="M363,673 L 371,673 Q 378,673 378,688 L 378,696 Q 378,711 363,711 L 308,711 L 293,711" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,711 L 170,711 Q 155,711 155,696 L 155,688 Q 155,673 162,673 L 170,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,673 51,677 51,669" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,658 Q 24,673 39,673 L 42,673 L 57,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2111' onclick='hideorshow("x2111","x2112")'>show</button></p>
+ <div id='x2112' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2113' onclick='hideorshow("x2113","x2114")'>show</button></p>
+ <div id='x2114' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2115' onclick='hideorshow("x2115","x2116")'>show</button></p>
+ <div id='x2116' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2117' onclick='hideorshow("x2117","x2118")'>show</button></p>
+ <div id='x2118' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2119' onclick='hideorshow("x2119","x2120")'>show</button></p>
+ <div id='x2120' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2121' onclick='hideorshow("x2121","x2122")'>show</button></p>
+ <div id='x2122' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2123' onclick='hideorshow("x2123","x2124")'>show</button></p>
+ <div id='x2124' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2125' onclick='hideorshow("x2125","x2126")'>show</button></p>
+ <div id='x2126' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2127' onclick='hideorshow("x2127","x2128")'>show</button></p>
+ <div id='x2128' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+</p><p>In a compound SELECT, all the constituent SELECTs must return the same
+number of result columns. As the components of a compound SELECT must
+be simple SELECT statements, they may not contain <a href="lang_select.html#orderby">ORDER BY</a> or <a href="lang_select.html#limitoffset">LIMIT</a> clauses.
+<a href="lang_select.html#orderby">ORDER BY</a> and <a href="lang_select.html#limitoffset">LIMIT</a> clauses may only occur at the end of the entire compound
+SELECT, and then only if the final element of the compound is not a <a href="lang_select.html#values">VALUES</a> clause.
+
+</p><p>A compound SELECT created using UNION ALL operator returns all the rows
+from the SELECT to the left of the UNION ALL operator, and all the rows
+from the SELECT to the right of it. The UNION operator works the same way as
+UNION ALL, except that duplicate rows are removed from the final result set.
+The INTERSECT operator returns the intersection of the results of the left and
+right SELECTs. The EXCEPT operator returns the subset of rows returned by the
+left SELECT that are not also returned by the right-hand SELECT. Duplicate
+rows are removed from the results of INTERSECT and EXCEPT operators before the
+result set is returned.
+
+</p><p>For the purposes of determining duplicate rows for the results of compound
+SELECT operators, NULL values are considered equal to other NULL values and
+distinct from all non-NULL values. The collation sequence used to compare
+two text values is determined as if the columns of the left and right-hand
+SELECT statements were the left and right-hand operands of the equals (=)
+operator, except that greater precedence is not assigned to a collation
+sequence specified with the postfix COLLATE operator. No affinity
+transformations are applied to any values when comparing rows as part of a
+compound SELECT.
+
+</p><p>When three or more simple SELECTs are connected into a compound SELECT,
+they group from left to right. In other words, if "A", "B" and "C" are all
+simple SELECT statements, (A op B op C) is processed as ((A op B) op C).
+
+</p>
+
+<a name="orderby"></a>
+
+<h1 id="the_order_by_clause"><span>4. </span>The ORDER BY clause</h1>
+
+<p>If a SELECT statement that returns more than one row does not have an
+ORDER BY clause, the order in which the rows are returned is undefined.
+Or, if a SELECT statement does have an ORDER BY clause, then the list of
+expressions attached to the ORDER BY determine the order in which rows
+are returned to the user.
+
+</p><p>
+In a <a href="lang_select.html#compound">compound SELECT</a> statement, only the last or right-most <a href="lang_select.html#simpleselect">simple SELECT</a>
+may have an ORDER BY clause. That ORDER BY clause will apply across all elements of
+the compound. If the right-most element of a <a href="lang_select.html#compound">compound SELECT</a> is a <a href="lang_select.html#values">VALUES</a> clause,
+then no ORDER BY clause is allowed on that statement.
+
+
+</p><p>Rows are first sorted based on the results of
+evaluating the left-most expression in the ORDER BY list, then ties are broken
+by evaluating the second left-most expression and so on. The order in which
+two rows for which all ORDER BY expressions evaluate to equal values are
+returned is undefined. Each ORDER BY expression may be optionally followed
+by one of the keywords ASC (smaller values are returned first) or DESC (larger
+values are returned first). If neither ASC or DESC are specified, rows
+are sorted in ascending (smaller values first) order by default.
+
+<a name="nullslast"></a>
+
+</p><p>SQLite considers NULL values to be smaller than any other values
+for sorting purposes. Hence, NULLs naturally appear at the beginning
+of an ASC order-by and at the end of a DESC order-by. This can be changed
+using the "ASC NULLS LAST" or "DESC NULLS FIRST" syntax.
+
+</p><p>Each ORDER BY expression is processed as follows:</p>
+
+<ol>
+<li><p>If the ORDER BY expression is a constant integer K then the
+expression is considered an alias for the K-th column of the result set
+(columns are numbered from left to right starting with 1).
+
+</p></li><li><p>If the ORDER BY expression is an identifier that corresponds to
+the alias of one of the output columns, then the expression is considered
+an alias for that column.
+
+</p></li><li><p>Otherwise, if the ORDER BY expression is any other expression, it
+is evaluated and the returned value used to order the output rows. If
+the SELECT statement is a simple SELECT, then an ORDER BY may contain any
+arbitrary expressions. However, if the SELECT is a compound SELECT, then
+ORDER BY expressions that are not aliases to output columns must be exactly
+the same as an expression used as an output column.
+</p></li></ol>
+
+<p>For the purposes of sorting rows, values are compared in the same way
+as for <a href="datatype3.html#comparisons">comparison expressions</a>. The collation sequence used to compare
+two text values is determined as follows:
+
+</p><ol>
+ <li><p>If the ORDER BY expression is assigned a collation sequence using
+ the postfix <a href="lang_expr.html#collateop">COLLATE operator</a>, then the specified collation sequence is
+ used.
+ </p></li><li><p>Otherwise, if the ORDER BY expression is an alias to an expression
+ that has been assigned a collation sequence using the postfix
+ <a href="lang_expr.html#collateop">COLLATE operator</a>, then the collation sequence assigned to the aliased
+ expression is used.
+ </p></li><li><p>Otherwise, if the ORDER BY expression is a column or an alias of
+ an expression that is a column, then the default collation sequence for
+ the column is used.
+ </p></li><li><p>Otherwise, the <a href="datatype3.html#collation">BINARY</a> collation sequence is used.
+</p></li></ol>
+
+<p>In a <a href="lang_select.html#compound">compound SELECT</a> statement, all ORDER BY expressions are handled
+as aliases for one of the result columns of the compound.
+If an ORDER BY expression is not an integer alias, then SQLite searches
+the left-most SELECT in the compound for a result column that matches either
+the second or third rules above. If a match is found, the search stops and
+the expression is handled as an alias for the result column that it has been
+matched against. Otherwise, the next SELECT to the right is tried, and so on.
+If no matching expression can be found in the result columns of any
+constituent SELECT, it is an error. Each term of the ORDER BY clause is
+processed separately and may be matched against result columns from different
+SELECT statements in the compound.</p>
+
+<a name="limitoffset"></a>
+
+<h1 id="the_limit_clause"><span>5. </span>The LIMIT clause</h1>
+
+<p>The LIMIT clause is used to place an upper bound on the number of rows
+returned by the entire SELECT statement.
+
+</p><p>In a <a href="lang_select.html#compound">compound SELECT</a>, only the
+last or right-most <a href="lang_select.html#simpleselect">simple SELECT</a> may contain a LIMIT clause.
+In a <a href="lang_select.html#compound">compound SELECT</a>,
+the LIMIT clause applies to the entire compound, not just the final SELECT.
+If the right-most <a href="lang_select.html#simpleselect">simple SELECT</a> is a <a href="lang_select.html#values">VALUES clause</a> then no LIMIT clause
+is allowed.
+
+</p><p>Any scalar expression may be used in the
+LIMIT clause, so long as it evaluates to an integer or a value that can be
+losslessly converted to an integer. If the expression evaluates to a NULL
+value or any other value that cannot be losslessly converted to an integer, an
+error is returned. If the LIMIT expression evaluates to a negative value,
+then there is no upper bound on the number of rows returned. Otherwise, the
+SELECT returns the first N rows of its result set only, where N is the value
+that the LIMIT expression evaluates to. Or, if the SELECT statement would
+return less than N rows without a LIMIT clause, then the entire result set is
+returned.
+
+</p><p>The expression attached to the optional OFFSET clause that may follow a
+LIMIT clause must also evaluate to an integer, or a value that can be
+losslessly converted to an integer. If an expression has an OFFSET clause,
+then the first M rows are omitted from the result set returned by the SELECT
+statement and the next N rows are returned, where M and N are the values that
+the OFFSET and LIMIT clauses evaluate to, respectively. Or, if the SELECT
+would return less than M+N rows if it did not have a LIMIT clause, then the
+first M rows are skipped and the remaining rows (if any) are returned. If the
+OFFSET clause evaluates to a negative value, the results are the same as if it
+had evaluated to zero.
+
+</p><p>Instead of a separate OFFSET clause, the LIMIT clause may specify two
+scalar expressions separated by a comma. In this case, the first expression
+is used as the OFFSET expression and the second as the LIMIT expression.
+This is counter-intuitive, as when using the OFFSET clause the second of
+the two expressions is the OFFSET and the first the LIMIT.
+This reversal of the offset and limit is intentional
+- it maximizes compatibility with other SQL database systems.
+However, to avoid confusion, programmers are strongly encouraged to use
+the form of the LIMIT clause that uses the "OFFSET" keyword and avoid
+using a LIMIT clause with a comma-separated offset.
+
+<a name="values"></a>
+
+</p><h1 id="the_values_clause"><span>6. </span>The VALUES clause</h1>
+
+<p>The phrase "VALUES(<i>expr-list</i>)" means the same thing
+as "SELECT <i>expr-list</i>". The phrase
+"VALUES(<i>expr-list-1</i>),...,(<i>expr-list-N</i>)" means the same
+thing as "SELECT <i>expr-list-1</i> UNION ALL ... UNION ALL
+SELECT <i>expr-list-N</i>". Both forms are the same, except that
+the number of SELECT statements in a compound is limited by
+<a href="c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a> whereas the number of rows in a
+VALUES clause has no arbitrary limit.
+
+</p><p>There are some restrictions on the use of a VALUES clause that are
+not shown on the syntax diagrams:
+
+</p><ul>
+<li><p>
+A VALUES clause cannot be followed by <a href="lang_select.html#orderby">ORDER BY</a>.
+
+</p></li><li><p>
+A VALUES clause cannot be followed by <a href="lang_select.html#limitoffset">LIMIT</a>.
+</p></li></ul>
+
+
+<h1 id="the_with_clause"><span>7. </span>The WITH Clause</h1>
+
+<p>SELECT statements may be optionally preceded by a single
+<a href="lang_with.html">WITH clause</a> that defines one or more <a href="lang_with.html">common table expressions</a>
+for use within the SELECT statement.
+
+<a name="tabfunc1"></a>
+
+</p><h1 id="table_valued_functions_in_the_from_clause"><span>8. </span>Table-valued Functions In The FROM Clause</h1>
+
+<p>A <a href="vtab.html">virtual table</a> that contains <a href="vtab.html#hiddencol">hidden columns</a> can be used like
+a <a href="vtab.html#tabfunc2">table-valued function</a> in the FROM clause. The arguments to the
+table-valued function become constraints on the HIDDEN columns of
+the virtual table. Additional information can be found in the
+<a href="vtab.html#tabfunc2">virtual table documentation</a>.
+
+<a name="nonstd"></a>
+
+
+</p><h1 id="deviations_from_standard_sql"><span>9. </span>Deviations From Standard SQL</h1>
+
+<p>The SELECT syntax of SQLite differs slightly from standard SQL.
+These differences are due to several reasons:
+
+</p><ul>
+<li><p> In the mid-2000s, there was a lot of emphasis on keeping the library
+ footprint as small as possible, so as not to use too much space
+ on memory-limited flip-phones and similar.
+
+</p></li><li><p> During the early years of SQLite, the lead developer sought to follow
+ <a href="https://en.wikipedia.org/wiki/Robustness_principle">Postel's Law</a> and to
+ be forgiving and flexible in what input was accepted.
+
+</p></li><li><p> There were bugs in early SQLite parsers that accepts some strange inputs.
+
+</p></li><li><p> The lead developer's knowledge of SQL was imperfect.
+</p></li></ul>
+
+<p>Whatever the origin of the input quirks, we generally avoid trying to "fix" them,
+as any new restrictions on the input syntax would likely cause at least some of
+the millions of applications that use SQLite to break. We do not want that.
+The goal of the SQLite development team is to preserve backwards compability to
+the fullest extent possible. Hence, if a syntax quirk is harmless,
+we leave it alone and document it here, rather than try to fix it.
+
+</p><h2 id="strange_join_names"><span>9.1. </span>Strange JOIN names</h2>
+
+<p>SQLite accepts all of the usual syntax for JOIN operators:
+
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2129' onclick='hideorshow("x2129","x2130")'>hide</button></p>
+ <div id='x2130' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+</p><p>But it does not stop there. SQLite is actually very flexible in how you
+specify a join operator. The general syntax is:
+
+</p><blockquote>
+<i>blah blah blah</i> <b>JOIN</b>
+</blockquote>
+
+<p>Where there are between 1 and 3 instances of "<i>blah</i>", each of which can be
+any of "CROSS", "FULL", "INNER", "LEFT", "NATURAL", "OUTER", or "RIGHT". The SQLite
+parser treats each of these keywords as an attribute of the join, which can be combined
+in any order. This creates the possibility of many new and creative join types beyond
+what is specified by the syntax diagram. Some of these non-standard join types are
+specifically disallowed. For example, you cannot say "INNER OUTER JOIN", because
+that would be contradictory. But you can say things like "OUTER LEFT NATURAL JOIN"
+which means the same as "NATURAL LEFT OUTER JOIN". Or you can say "LEFT RIGHT JOIN"
+which is the same as "FULL JOIN".
+
+</p><p>Remember: you <i>can</i> use these non-standard join types but you <i>ought not</i>.
+Stick to using standard JOIN syntax for portability with other SQL database engines.
+
+</p><h2 id="precedence_of_comma_joins_and_cross_join"><span>9.2. </span>Precedence of comma-joins and CROSS JOIN</h2>
+
+<p>In standard SQL, joins that use the JOIN keyword take higher precedence
+than comma-joins. That is to say, JOIN operators happen before comma operators.
+This is not the case in SQLite, where all joins have the same precedence.
+
+</p><p>Consider this example:
+
+</p><blockquote><pre>
+... FROM t1, t2 NATURAL FULL JOIN t3 ...
+</pre></blockquote>
+
+<p>In standard SQL, the FULL JOIN between t2 and t3 would occur first, and
+then the result of the left join would be cross-joined against t1. But SQLite
+always handles all joins from left to right. Thus, SQLite will do a cross
+join on t1 and t2 first, then the result of that cross join will feed into the FULL JOIN
+with t3. Inner joins are inherently associative, so the difference is only
+evident if your FROM clause contains one or more outer joins.
+
+</p><p>You can work around this, and make your SQL statements portable across all
+systems, by observing the following stylistic rules:
+
+</p><ul>
+<li><p> Do not mix comma-joins with the JOIN keyword. It is fine to use comma-joins,
+but if you do, the you should use only comma-joins for the entire FROM clause.
+
+</p></li><li><p> Prefer LEFT JOIN over other outer join operators.
+
+</p></li><li><p> When in doubt, use parentheses to specify the exact join order that you intend.
+</p></li></ul>
+
+<p>Any one of these suggestions is sufficient to avoid problems, and most
+programmers instinctively follow all of these suggestions without having to
+be told, and so the lack of precedence difference between comma-joins and
+the JOIN keyword in SQLite rarely comes up in practice. But you should be aware
+of the problem, in case it ever does appear.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_select.in?m=b6b0b5302da4177eb">2022-10-26 20:02:18</a> UTC </small></i></p>
+
diff --git a/www/lang_transaction.html b/www/lang_transaction.html
new file mode 100644
index 0000000..956de6c
--- /dev/null
+++ b/www/lang_transaction.html
@@ -0,0 +1,445 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Transaction</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Transaction
+</div>
+</div>
+
+
+
+
+<h1 id="transaction_control_syntax"><span>1. </span>Transaction Control Syntax</h1>
+
+<p><b><a href="syntax/begin-stmt.html">begin-stmt:</a></b>
+<button id='x2131' onclick='hideorshow("x2131","x2132")'>hide</button></p>
+ <div id='x2132' class='imgcontainer'>
+ <div style="max-width:560px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 560.669 140.4">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L86,32A15 15 0 0 0 101 17A15 15 0 0 0 86 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BEGIN</text>
+<polygon points="124,17 112,21 112,12" style="fill:rgb(0,0,0)"/>
+<path d="M101,17L118,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="162,123 150,127 150,118" style="fill:rgb(0,0,0)"/>
+<path d="M124,17 L 131,17 Q 139,17 139,32 L 139,108 Q 139,123 147,123 L 156,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,138L261,138A15 15 0 0 0 276 123A15 15 0 0 0 261 108L177,108A15 15 0 0 0 162 123A15 15 0 0 0 177 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUSIVE</text>
+<polygon points="299,123 287,127 287,118" style="fill:rgb(0,0,0)"/>
+<path d="M276,123L293,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="337,17 325,21 325,12" style="fill:rgb(0,0,0)"/>
+<path d="M299,123 L 306,123 Q 314,123 314,108 L 314,32 Q 314,17 322,17 L 331,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="373,17 361,21 361,12" style="fill:rgb(0,0,0)"/>
+<path d="M337,17L367,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,32L500,32A15 15 0 0 0 515 17A15 15 0 0 0 500 2L388,2A15 15 0 0 0 373 17A15 15 0 0 0 388 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRANSACTION</text>
+<polygon points="551,17 539,21 539,12" style="fill:rgb(0,0,0)"/>
+<path d="M515,17L545,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="554" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="444,47 432,51 432,43" style="fill:rgb(0,0,0)"/>
+<path d="M337,17 L 344,17 Q 352,17 352,32 L 352,32 Q 352,47 367,47 L 423,47 L 438,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,47 L 511,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 L 541,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M124,17L325,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="162,47 150,51 150,43" style="fill:rgb(0,0,0)"/>
+<path d="M139,32 L 139,39 Q 139,47 147,47 L 156,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,62L257,62A15 15 0 0 0 272 47L272,47A15 15 0 0 0 257 32L177,32A15 15 0 0 0 162 47L162,47A15 15 0 0 0 177 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="217" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRED</text>
+<polygon points="295,47 284,51 284,43" style="fill:rgb(0,0,0)"/>
+<path d="M272,47L289,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,47 L 304,47 Q 314,47 314,40 L 314,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="162,85 150,89 150,81" style="fill:rgb(0,0,0)"/>
+<path d="M139,32 L 139,70 Q 139,85 147,85 L 156,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,100L265,100A15 15 0 0 0 281 85A15 15 0 0 0 265 70L177,70A15 15 0 0 0 162 85A15 15 0 0 0 177 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IMMEDIATE</text>
+<polygon points="304,85 292,89 292,81" style="fill:rgb(0,0,0)"/>
+<path d="M281,85L298,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M304,85 L 309,85 Q 314,85 314,77 L 314,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/commit-stmt.html">commit-stmt:</a></b>
+<button id='x2133' onclick='hideorshow("x2133","x2134")'>hide</button></p>
+ <div id='x2134' class='imgcontainer'>
+ <div style="max-width:434px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 434.506 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L141,32A15 15 0 0 0 157 17A15 15 0 0 0 141 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COMMIT</text>
+<polygon points="202,17 190,21 190,12" style="fill:rgb(0,0,0)"/>
+<path d="M157,17L196,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M202,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,32L365,32A15 15 0 0 0 380 17A15 15 0 0 0 365 2L253,2A15 15 0 0 0 238 17A15 15 0 0 0 253 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRANSACTION</text>
+<polygon points="425,17 413,21 413,12" style="fill:rgb(0,0,0)"/>
+<path d="M380,17L419,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="428" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,70L104,70A15 15 0 0 0 119 55L119,55A15 15 0 0 0 104 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="94" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="157,55 145,59 145,50" style="fill:rgb(0,0,0)"/>
+<path d="M119,55L151,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M157,55 L 164,55 Q 172,55 172,40 L 172,32 Q 172,17 179,17 L 187,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="309,47 297,51 297,43" style="fill:rgb(0,0,0)"/>
+<path d="M202,17 L 209,17 Q 217,17 217,32 L 217,32 Q 217,47 232,47 L 288,47 L 303,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,47 L 380,47 Q 395,47 395,32 L 395,32 Q 395,17 402,17 L 410,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/rollback-stmt.html">rollback-stmt:</a></b>
+<button id='x2135' onclick='hideorshow("x2135","x2136")'>hide</button></p>
+ <div id='x2136' class='imgcontainer'>
+ <div style="max-width:801px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 801.734 67.392">
+<circle cx="5" cy="33" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,33 20,38 20,29" style="fill:rgb(0,0,0)"/>
+<path d="M9,33L26,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,48L125,48A15 15 0 0 0 140 33A15 15 0 0 0 125 18L47,18A15 15 0 0 0 32 33A15 15 0 0 0 47 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="176,33 164,38 164,29" style="fill:rgb(0,0,0)"/>
+<path d="M140,33L170,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,48L303,48A15 15 0 0 0 318 33A15 15 0 0 0 303 18L191,18A15 15 0 0 0 176 33A15 15 0 0 0 191 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRANSACTION</text>
+<polygon points="390,33 378,38 378,29" style="fill:rgb(0,0,0)"/>
+<path d="M318,33L384,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M405,48L411,48A15 15 0 0 0 426 33A15 15 0 0 0 411 18L405,18A15 15 0 0 0 390 33A15 15 0 0 0 405 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="408" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TO</text>
+<polygon points="462,33 450,38 450,29" style="fill:rgb(0,0,0)"/>
+<path d="M426,33L456,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,48L561,48A15 15 0 0 0 576 33A15 15 0 0 0 561 18L477,18A15 15 0 0 0 462 33A15 15 0 0 0 477 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SAVEPOINT</text>
+<polygon points="612,33 601,38 601,29" style="fill:rgb(0,0,0)"/>
+<path d="M576,33L606,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M627,48L741,48A15 15 0 0 0 756 33A15 15 0 0 0 741 18L627,18A15 15 0 0 0 612 33A15 15 0 0 0 627 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="684" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-name</text>
+<polygon points="792,33 780,38 780,29" style="fill:rgb(0,0,0)"/>
+<path d="M756,33L786,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="795" cy="33" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,6 507,10 507,2" style="fill:rgb(0,0,0)"/>
+<path d="M426,33 L 433,33 Q 441,33 441,20 Q 441,6 456,6 L 498,6 L 513,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,6 L 576,6 Q 591,6 591,20 Q 591,33 599,33 L 606,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,60 507,65 507,56" style="fill:rgb(0,0,0)"/>
+<path d="M352,33 L 359,33 Q 367,33 367,47 Q 367,60 382,60 L 498,60 L 513,60" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,60 L 756,60 Q 771,60 771,47 Q 771,33 778,33 L 786,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="247,60 235,65 235,56" style="fill:rgb(0,0,0)"/>
+<path d="M140,33 L 147,33 Q 155,33 155,47 Q 155,60 170,60 L 226,60 L 241,60" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,60 L 318,60 Q 333,60 333,47 Q 333,33 340,33 L 348,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<h1 id="transactions"><span>2. </span>Transactions</h1>
+
+<p>
+No reads or writes occur except within a transaction.
+Any command that accesses the database (basically, any SQL command,
+except a few <a href="pragma.html#syntax">PRAGMA</a> statements)
+will automatically start a transaction if
+one is not already in effect. Automatically started transactions
+are committed when the last SQL statement finishes.
+</p>
+
+<p>
+Transactions can be started manually using the BEGIN
+command. Such transactions usually persist until the next
+COMMIT or ROLLBACK command. But a transaction will also
+ROLLBACK if the database is closed or if an error occurs
+and the ROLLBACK conflict resolution algorithm is specified.
+See the documentation on the <a href="lang_conflict.html">ON CONFLICT</a>
+clause for additional information about the ROLLBACK
+conflict resolution algorithm.
+</p>
+
+<p>
+END TRANSACTION is an alias for COMMIT.
+</p>
+
+<p> Transactions created using BEGIN...COMMIT do not nest.
+For nested transactions, use the <a href="lang_savepoint.html">SAVEPOINT</a> and <a href="lang_savepoint.html">RELEASE</a> commands.
+The "TO SAVEPOINT <span class='yyterm'>name</span>" clause of the ROLLBACK command shown
+in the syntax diagram above is only applicable to <a href="lang_savepoint.html">SAVEPOINT</a>
+transactions. An attempt to invoke the BEGIN command within
+a transaction will fail with an error, regardless of whether
+the transaction was started by <a href="lang_savepoint.html">SAVEPOINT</a> or a prior BEGIN.
+The COMMIT command and the ROLLBACK command without the TO clause
+work the same on <a href="lang_savepoint.html">SAVEPOINT</a> transactions as they do with transactions
+started by BEGIN.</p>
+
+<h2 id="read_transactions_versus_write_transactions"><span>2.1. </span>Read transactions versus write transactions</h2>
+
+<p>SQLite supports multiple simultaneous read transactions
+coming from separate database connections, possibly in separate
+threads or processes, but only one simultaneous write transaction.
+</p><p>
+
+</p><p>A read transaction is used for reading only. A write transaction
+allows both reading and writing. A read transaction is started
+by a SELECT statement, and a write transaction is started by
+statements like CREATE, DELETE, DROP, INSERT, or UPDATE (collectively
+"write statements"). If a write statement occurs while
+a read transaction is active, then the read transaction is upgraded
+to a write transaction if possible. If some other database connection
+has already modified the database or is already in the process of
+modifying the database, then upgrading to a write transaction is
+not possible and the write statement will fail with <a href="rescode.html#busy">SQLITE_BUSY</a>.
+</p>
+
+<p>
+While a read transaction is active, any changes to the database that
+are implemented by separate database connections will not be seen
+by the database connection that started the read transaction. If database
+connection X is holding a read transaction, it is possible that some
+other database connection Y might change the content of the database
+while X's transaction is still open, however X will not be able to see
+those changes until after the transaction ends. While its read
+transaction is active, X will continue to see an historic snapshot of
+the database prior to the changes implemented by Y.
+</p>
+
+
+<a name="immediate"></a>
+
+<h2 id="deferred_immediate_and_exclusive_transactions"><span>2.2. </span>DEFERRED, IMMEDIATE, and EXCLUSIVE transactions</h2>
+
+<p>
+Transactions can be DEFERRED, IMMEDIATE, or EXCLUSIVE.
+The default transaction behavior is DEFERRED.
+</p>
+
+<p>
+DEFERRED means that the transaction does not actually
+start until the database is first accessed. Internally,
+the BEGIN DEFERRED statement merely sets a flag on the database
+connection that turns off the automatic commit that would normally
+occur when the last statement finishes. This causes the transaction
+that is automatically started to persist until an explicit
+COMMIT or ROLLBACK or until a rollback is provoked by an error
+or an ON CONFLICT ROLLBACK clause. If the first statement after
+BEGIN DEFERRED is a SELECT, then a read transaction is started.
+Subsequent write statements will upgrade the transaction to a
+write transaction if possible, or return SQLITE_BUSY. If the
+first statement after BEGIN DEFERRED is a write statement, then
+a write transaction is started.
+</p>
+
+<p>
+IMMEDIATE cause the database connection to start a new write
+immediately, without waiting for a write statement. The
+BEGIN IMMEDIATE might fail with <a href="rescode.html#busy">SQLITE_BUSY</a> if another write
+transaction is already active on another database connection.
+</p>
+
+<p>
+EXCLUSIVE is similar to IMMEDIATE in that a write transaction
+is started immediately. EXCLUSIVE and IMMEDIATE are the same
+in <a href="wal.html">WAL mode</a>, but in other journaling modes, EXCLUSIVE prevents
+other database connections from reading the database while the
+transaction is underway.
+</p>
+
+<h2 id="implicit_versus_explicit_transactions"><span>2.3. </span>Implicit versus explicit transactions</h2>
+
+<p>
+An implicit transaction (a transaction that is started automatically,
+not a transaction started by BEGIN) is committed automatically when
+the last active statement finishes. A statement finishes when its
+last cursor closes, which is guaranteed to happen when the
+prepared statement is <a href="c3ref/reset.html">reset</a> or
+<a href="c3ref/finalize.html">finalized</a>. Some statements might "finish"
+for the purpose of transaction control prior to being reset or finalized,
+but there is no guarantee of this. The only way to ensure that a
+statement has "finished" is to invoke <a href="c3ref/reset.html">sqlite3_reset()</a> or
+<a href="c3ref/finalize.html">sqlite3_finalize()</a> on that statement. An open <a href="c3ref/blob.html">sqlite3_blob</a> used for
+incremental BLOB I/O also counts as an unfinished statement.
+The <a href="c3ref/blob.html">sqlite3_blob</a> finishes when it is <a href="c3ref/blob_close.html">closed</a>.
+</p>
+
+<p>
+The explicit COMMIT command runs immediately, even if there are
+pending <a href="lang_select.html">SELECT</a> statements. However, if there are pending
+write operations, the COMMIT command
+will fail with an error code <a href="rescode.html#busy">SQLITE_BUSY</a>.
+</p>
+
+<p>
+An attempt to execute COMMIT might also result in an <a href="rescode.html#busy">SQLITE_BUSY</a> return code
+if an another thread or process has an open read connection.
+When COMMIT fails in this
+way, the transaction remains active and the COMMIT can be retried later
+after the reader has had a chance to clear.
+</p>
+
+<p>
+In very old versions of SQLite (before version 3.7.11 - 2012-03-20)
+the ROLLBACK will fail with an error code
+<a href="rescode.html#busy">SQLITE_BUSY</a> if there are any pending queries. In more recent
+versions of SQLite, the ROLLBACK will proceed and pending statements
+will often be aborted, causing them to return an <a href="rescode.html#abort">SQLITE_ABORT</a> or
+<a href="rescode.html#abort_rollback">SQLITE_ABORT_ROLLBACK</a> error.
+In SQLite version 3.8.8 (2015-01-16) and later,
+a pending read will continue functioning
+after the ROLLBACK as long as the ROLLBACK does not modify the database
+schema.
+</p>
+
+<p>
+If <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode</a> is set to OFF (thus disabling the rollback journal
+file) then the behavior of the ROLLBACK command is undefined.
+</p>
+
+<h1 id="response_to_errors_within_a_transaction"><span>3. </span>Response To Errors Within A Transaction</h1>
+
+<p> If certain kinds of errors occur within a transaction, the
+transaction may or may not be rolled back automatically. The
+errors that can cause an automatic rollback include:</p>
+
+<ul>
+<li> <a href="rescode.html#full">SQLITE_FULL</a>: database or disk full
+</li><li> <a href="rescode.html#ioerr">SQLITE_IOERR</a>: disk I/O error
+</li><li> <a href="rescode.html#busy">SQLITE_BUSY</a>: database in use by another process
+</li><li> <a href="rescode.html#nomem">SQLITE_NOMEM</a>: out of memory
+</li></ul>
+
+<p>
+For all of these errors, SQLite attempts to undo just the one statement
+it was working on and leave changes from prior statements within the
+same transaction intact and continue with the transaction. However,
+depending on the statement being evaluated and the point at which the
+error occurs, it might be necessary for SQLite to rollback and
+cancel the entire transaction. An application can tell which
+course of action SQLite took by using the
+<a href="c3ref/get_autocommit.html">sqlite3_get_autocommit()</a> C-language interface.</p>
+
+<p>It is recommended that applications respond to the errors
+listed above by explicitly issuing a ROLLBACK command. If the
+transaction has already been rolled back automatically
+by the error response, then the ROLLBACK command will fail with an
+error, but no harm is caused by this.</p>
+
+<p>Future versions of SQLite may extend the list of errors which
+might cause automatic transaction rollback. Future versions of
+SQLite might change the error response. In particular, we may
+choose to simplify the interface in future versions of SQLite by
+causing the errors above to force an unconditional rollback.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_transaction.in?m=44e02f89eb1112b5a">2020-07-09 15:12:58</a> UTC </small></i></p>
+
diff --git a/www/lang_update.html b/www/lang_update.html
new file mode 100644
index 0000000..595273d
--- /dev/null
+++ b/www/lang_update.html
@@ -0,0 +1,4541 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>UPDATE</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+UPDATE
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#details">2. Details</a></div>
+<div class="fancy-toc2"><a href="#restrictions_on_update_statements_within_create_trigger">2.1. Restrictions on UPDATE Statements Within CREATE TRIGGER</a></div>
+<div class="fancy-toc2"><a href="#update_from">2.2. UPDATE FROM</a></div>
+<div class="fancy-toc3"><a href="#update_from_in_other_sql_database_engines">2.2.1. UPDATE FROM in other SQL database engines</a></div>
+<div class="fancy-toc2"><a href="#optional_limit_and_order_by_clauses">2.3. Optional LIMIT and ORDER BY Clauses</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p><b><a href="syntax/update-stmt.html">update-stmt:</a></b>
+<button id='x2137' onclick='hideorshow("x2137","x2138")'>hide</button></p>
+ <div id='x2138' class='imgcontainer'>
+ <div style="max-width:623px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 623.266 721.926">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,136L114,136A15 15 0 0 0 129 121A15 15 0 0 0 114 106L60,106A15 15 0 0 0 45 121A15 15 0 0 0 60 136Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="45,121 33,125 33,116" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,106 Q 24,121 31,121 L 39,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,299 159,303 159,295" style="fill:rgb(0,0,0)"/>
+<path d="M129,121 L 137,121 Q 144,121 144,136 L 144,284 Q 144,299 155,299 L 165,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,314L193,314A15 15 0 0 0 208 299A15 15 0 0 0 193 284L186,284A15 15 0 0 0 171 299A15 15 0 0 0 186 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,299 214,303 214,295" style="fill:rgb(0,0,0)"/>
+<path d="M208,299L219,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,314L318,314A15 15 0 0 0 333 299A15 15 0 0 0 318 284L240,284A15 15 0 0 0 225 299A15 15 0 0 0 240 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="279" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="350,299 339,303 339,295" style="fill:rgb(0,0,0)"/>
+<path d="M333,299L344,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,121 380,125 380,116" style="fill:rgb(0,0,0)"/>
+<path d="M350,299 L 358,299 Q 365,299 365,284 L 365,136 Q 365,121 376,121 L 386,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,136L576,136L576,106L392,106Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<path d="M186,276L193,276A15 15 0 0 0 208 261A15 15 0 0 0 193 246L186,246A15 15 0 0 0 171 261A15 15 0 0 0 186 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,261 214,266 214,257" style="fill:rgb(0,0,0)"/>
+<path d="M208,261L219,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,276L304,276A15 15 0 0 0 319 261A15 15 0 0 0 304 246L240,246A15 15 0 0 0 225 261A15 15 0 0 0 240 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="350,261 339,266 339,257" style="fill:rgb(0,0,0)"/>
+<path d="M319,261L344,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,261 L 358,261 Q 365,261 365,254 L 365,246" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,261 159,266 159,257" style="fill:rgb(0,0,0)"/>
+<path d="M144,246 L 144,254 Q 144,261 155,261 L 165,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,239L193,239A15 15 0 0 0 208 224A15 15 0 0 0 193 208L186,208A15 15 0 0 0 171 224A15 15 0 0 0 186 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,224 214,228 214,219" style="fill:rgb(0,0,0)"/>
+<path d="M208,224L219,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,239L292,239A15 15 0 0 0 307 224A15 15 0 0 0 292 208L240,208A15 15 0 0 0 225 224A15 15 0 0 0 240 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="266" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="350,224 339,228 339,219" style="fill:rgb(0,0,0)"/>
+<path d="M307,224L344,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,224 L 358,224 Q 365,224 365,216 L 365,209" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,224 159,228 159,219" style="fill:rgb(0,0,0)"/>
+<path d="M144,208 L 144,216 Q 144,224 155,224 L 165,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,201L193,201A15 15 0 0 0 208 186A15 15 0 0 0 193 171L186,171A15 15 0 0 0 171 186A15 15 0 0 0 186 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,186 214,190 214,181" style="fill:rgb(0,0,0)"/>
+<path d="M208,186L219,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,201L262,201A15 15 0 0 0 277 186A15 15 0 0 0 262 171L240,171A15 15 0 0 0 225 186A15 15 0 0 0 240 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="350,186 339,190 339,181" style="fill:rgb(0,0,0)"/>
+<path d="M277,186L344,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,186 L 358,186 Q 365,186 365,178 L 365,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,186 159,190 159,181" style="fill:rgb(0,0,0)"/>
+<path d="M144,171 L 144,178 Q 144,186 155,186 L 165,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,163L193,163A15 15 0 0 0 208 148A15 15 0 0 0 193 133L186,133A15 15 0 0 0 171 148A15 15 0 0 0 186 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,148 214,152 214,144" style="fill:rgb(0,0,0)"/>
+<path d="M208,148L219,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,163L282,163A15 15 0 0 0 297 148A15 15 0 0 0 282 133L240,133A15 15 0 0 0 225 148A15 15 0 0 0 240 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="350,148 339,152 339,144" style="fill:rgb(0,0,0)"/>
+<path d="M297,148L344,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,148 L 358,148 Q 365,148 365,140 L 365,133" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,148 159,152 159,144" style="fill:rgb(0,0,0)"/>
+<path d="M144,133 L 144,140 Q 144,148 155,148 L 165,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="350,121 339,125 339,116" style="fill:rgb(0,0,0)"/>
+<path d="M129,121L344,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,121L380,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,375 39,379 39,370" style="fill:rgb(0,0,0)"/>
+<path d="M576,121 L 584,121 Q 591,121 591,136 L 591,322 Q 591,337 576,337 L 39,337 Q 24,337 24,352 L 24,360 Q 24,375 34,375 L 45,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,390L81,390A15 15 0 0 0 96 375A15 15 0 0 0 81 360L65,360A15 15 0 0 0 50 375A15 15 0 0 0 65 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="73" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="153,413 141,417 141,408" style="fill:rgb(0,0,0)"/>
+<path d="M96,375 L 111,375 Q 126,375 126,390 L 126,398 Q 126,413 136,413 L 147,413" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,428L309,428L309,397L153,397Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="413" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="350,375 339,379 339,370" style="fill:rgb(0,0,0)"/>
+<path d="M309,413 L 316,413 Q 324,413 324,398 L 324,390 Q 324,375 334,375 L 344,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,390A15 15 0 0 0 380 375A15 15 0 0 0 365 360A15 15 0 0 0 350 375A15 15 0 0 0 365 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="375" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="404,375 392,379 392,370" style="fill:rgb(0,0,0)"/>
+<path d="M380,375L398,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,390L453,390L453,360L404,360Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="428" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="153,375 141,379 141,370" style="fill:rgb(0,0,0)"/>
+<path d="M96,375L147,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,390L262,390A15 15 0 0 0 277 375A15 15 0 0 0 262 360L168,360A15 15 0 0 0 153 375A15 15 0 0 0 168 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M277,375L339,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,465A15 15 0 0 0 266 450A15 15 0 0 0 251 435A15 15 0 0 0 236 450A15 15 0 0 0 251 465Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="450" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="266,450 277,446 277,455" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,435 Q 468,450 453,450 L 287,450 L 272,450" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,450 L 117,450 Q 102,450 102,435 L 102,390 Q 102,375 117,375 L 117,375 L 132,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="251,488 262,484 262,492" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,473 Q 468,488 453,488 L 271,488 L 256,488" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,488 L 39,488 Q 24,488 24,503 L 24,511 Q 24,526 37,526 L 50,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,541L100,541A15 15 0 0 0 115 526A15 15 0 0 0 100 511L65,511A15 15 0 0 0 50 526A15 15 0 0 0 65 541Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="187,526 176,530 176,522" style="fill:rgb(0,0,0)"/>
+<path d="M115,526L182,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,541L348,541L348,511L187,511Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M268,579A15 15 0 0 0 283 564A15 15 0 0 0 268 549A15 15 0 0 0 253 564A15 15 0 0 0 268 579Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="564" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="283,564 295,559 295,568" style="fill:rgb(0,0,0)"/>
+<path d="M348,526 L 356,526 Q 363,526 363,541 L 363,549 Q 363,564 348,564 L 304,564 L 289,564" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,564 L 176,564 Q 161,564 161,549 L 161,541 Q 161,526 168,526 L 176,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,602 176,606 176,597" style="fill:rgb(0,0,0)"/>
+<path d="M115,526 L 123,526 Q 130,526 130,541 L 130,587 Q 130,602 145,602 L 167,602 L 182,602" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,617L290,617L290,586L187,586Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="239" y="602" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<polygon points="405,526 393,530 393,522" style="fill:rgb(0,0,0)"/>
+<path d="M290,602 L 363,602 Q 378,602 378,587 L 378,541 Q 378,526 389,526 L 399,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="244,639 255,635 255,644" style="fill:rgb(0,0,0)"/>
+<path d="M405,526 L 412,526 Q 420,526 420,541 L 420,624 Q 420,639 405,639 L 265,639 L 250,639" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,526L393,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,677 39,681 39,673" style="fill:rgb(0,0,0)"/>
+<path d="M244,639 L 39,639 Q 24,639 24,654 L 24,662 Q 24,677 34,677 L 45,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,692L115,692A15 15 0 0 0 130 677A15 15 0 0 0 115 662L66,662A15 15 0 0 0 50 677A15 15 0 0 0 66 692Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="153,677 142,681 142,673" style="fill:rgb(0,0,0)"/>
+<path d="M130,677L147,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,692L202,692L202,662L153,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="178" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="24,586 20,575 28,575" style="fill:rgb(0,0,0)"/>
+<path d="M24,511L24,581" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,586L24,662" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,715 602,719 602,711" style="fill:rgb(0,0,0)"/>
+<path d="M24,662 L 24,700 Q 24,715 39,715 L 593,715 L 608,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="715" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="253,715 242,719 242,711" style="fill:rgb(0,0,0)"/>
+<path d="M202,677 L 210,677 Q 217,677 217,692 L 217,700 Q 217,715 232,715 L 233,715 L 248,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,677 283,681 283,673" style="fill:rgb(0,0,0)"/>
+<path d="M253,715 L 261,715 Q 268,715 268,700 L 268,692 Q 268,677 279,677 L 289,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,692L446,692L446,662L295,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="370" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="497,715 485,719 485,711" style="fill:rgb(0,0,0)"/>
+<path d="M446,677 L 453,677 Q 461,677 461,692 L 461,700 Q 461,715 476,715 L 476,715 L 491,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/column-name-list.html">column-name-list:</a></b>
+<button id='x2139' onclick='hideorshow("x2139","x2140")'>show</button></p>
+ <div id='x2140' style='display:none;' class='imgcontainer'>
+ <div style="max-width:353px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 353.621 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="85,17 74,21 74,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L79,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M85,17L115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,32L230,32A15 15 0 0 0 245 17A15 15 0 0 0 230 2L136,2A15 15 0 0 0 121 17A15 15 0 0 0 136 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="290,17 279,21 279,12" style="fill:rgb(0,0,0)"/>
+<path d="M245,17L285,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2A15 15 0 0 0 290 17A15 15 0 0 0 306 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="306" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="344,17 332,21 332,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L338,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="347" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M183,70A15 15 0 0 0 198 55L198,55A15 15 0 0 0 183 39A15 15 0 0 0 168 55L168,55A15 15 0 0 0 183 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="198,55 210,50 210,59" style="fill:rgb(0,0,0)"/>
+<path d="M245,17 L 257,17 Q 269,17 269,32 L 269,40 Q 269,55 254,55 L 219,55 L 204,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M168,55 L 102,55 Q 87,55 87,40 L 87,32 Q 87,17 101,17 L 115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x2141' onclick='hideorshow("x2141","x2142")'>show</button></p>
+ <div id='x2142' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2143' onclick='hideorshow("x2143","x2144")'>show</button></p>
+ <div id='x2144' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2145' onclick='hideorshow("x2145","x2146")'>show</button></p>
+ <div id='x2146' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2147' onclick='hideorshow("x2147","x2148")'>show</button></p>
+ <div id='x2148' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2149' onclick='hideorshow("x2149","x2150")'>show</button></p>
+ <div id='x2150' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2151' onclick='hideorshow("x2151","x2152")'>show</button></p>
+ <div id='x2152' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2153' onclick='hideorshow("x2153","x2154")'>show</button></p>
+ <div id='x2154' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x2155' onclick='hideorshow("x2155","x2156")'>show</button></p>
+ <div id='x2156' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x2157' onclick='hideorshow("x2157","x2158")'>show</button></p>
+ <div id='x2158' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x2159' onclick='hideorshow("x2159","x2160")'>show</button></p>
+ <div id='x2160' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x2161' onclick='hideorshow("x2161","x2162")'>show</button></p>
+ <div id='x2162' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2163' onclick='hideorshow("x2163","x2164")'>show</button></p>
+ <div id='x2164' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2165' onclick='hideorshow("x2165","x2166")'>show</button></p>
+ <div id='x2166' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x2167' onclick='hideorshow("x2167","x2168")'>show</button></p>
+ <div id='x2168' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2169' onclick='hideorshow("x2169","x2170")'>show</button></p>
+ <div id='x2170' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2171' onclick='hideorshow("x2171","x2172")'>show</button></p>
+ <div id='x2172' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2173' onclick='hideorshow("x2173","x2174")'>show</button></p>
+ <div id='x2174' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2175' onclick='hideorshow("x2175","x2176")'>show</button></p>
+ <div id='x2176' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2177' onclick='hideorshow("x2177","x2178")'>show</button></p>
+ <div id='x2178' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2179' onclick='hideorshow("x2179","x2180")'>show</button></p>
+ <div id='x2180' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x2181' onclick='hideorshow("x2181","x2182")'>show</button></p>
+ <div id='x2182' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x2183' onclick='hideorshow("x2183","x2184")'>show</button></p>
+ <div id='x2184' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2185' onclick='hideorshow("x2185","x2186")'>show</button></p>
+ <div id='x2186' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2187' onclick='hideorshow("x2187","x2188")'>show</button></p>
+ <div id='x2188' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2189' onclick='hideorshow("x2189","x2190")'>show</button></p>
+ <div id='x2190' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/qualified-table-name.html">qualified-table-name:</a></b>
+<button id='x2191' onclick='hideorshow("x2191","x2192")'>show</button></p>
+ <div id='x2192' style='display:none;' class='imgcontainer'>
+ <div style="max-width:599px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 599.746 182.736">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L156,32A15 15 0 0 0 171 17A15 15 0 0 0 156 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M171,17L189,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,32A15 15 0 0 0 225 17A15 15 0 0 0 210 2A15 15 0 0 0 195 17A15 15 0 0 0 210 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,17 249,21 249,12" style="fill:rgb(0,0,0)"/>
+<path d="M225,17L255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32L351,32A15 15 0 0 0 366 17A15 15 0 0 0 351 2L276,2A15 15 0 0 0 261 17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="408,44 396,48 396,40" style="fill:rgb(0,0,0)"/>
+<path d="M366,17 L 374,17 Q 381,17 381,30 Q 381,44 392,44 L 402,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,59L427,59A15 15 0 0 0 442 44L442,44A15 15 0 0 0 427 29L423,29A15 15 0 0 0 408 44L408,44A15 15 0 0 0 423 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="465,44 453,48 453,40" style="fill:rgb(0,0,0)"/>
+<path d="M442,44L459,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,59L501,59A15 15 0 0 0 516 44L516,44A15 15 0 0 0 501 29L480,29A15 15 0 0 0 465 44L465,44A15 15 0 0 0 480 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="539,44 527,48 527,40" style="fill:rgb(0,0,0)"/>
+<path d="M516,44L533,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,44 L 546,44 Q 554,44 554,51 L 554,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,17 442,21 442,12" style="fill:rgb(0,0,0)"/>
+<path d="M366,17L448,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,44 97,48 97,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 39,44 L 87,44 L 102,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M108,44 L 225,44 Q 240,44 240,30 Q 240,17 247,17 L 255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,142L301,142A15 15 0 0 0 316 127A15 15 0 0 0 301 112L236,112A15 15 0 0 0 221 127A15 15 0 0 0 236 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="339,127 327,131 327,123" style="fill:rgb(0,0,0)"/>
+<path d="M316,127L333,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,142L358,142A15 15 0 0 0 373 127A15 15 0 0 0 358 112L354,112A15 15 0 0 0 339 127A15 15 0 0 0 354 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="396,127 385,131 385,123" style="fill:rgb(0,0,0)"/>
+<path d="M373,127L390,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M411,142L490,142A15 15 0 0 0 505 127A15 15 0 0 0 490 112L411,112A15 15 0 0 0 396 127A15 15 0 0 0 411 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="451" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M236,180L256,180A15 15 0 0 0 271 165A15 15 0 0 0 256 150L236,150A15 15 0 0 0 221 165A15 15 0 0 0 236 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="294,165 283,169 283,161" style="fill:rgb(0,0,0)"/>
+<path d="M271,165L289,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,180L374,180A15 15 0 0 0 389 165A15 15 0 0 0 374 150L310,150A15 15 0 0 0 294 165A15 15 0 0 0 310 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="554,74 550,62 558,62" style="fill:rgb(0,0,0)"/>
+<path d="M453,17 L 539,17 Q 554,17 554,32 L 554,53 L 554,68" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 325,85 325,94" style="fill:rgb(0,0,0)"/>
+<path d="M554,74 L 554,82 Q 554,89 539,89 L 334,89 L 319,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,127 210,131 210,123" style="fill:rgb(0,0,0)"/>
+<path d="M313,89 L 210,89 Q 195,89 195,104 L 195,112 Q 195,127 205,127 L 215,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,165 210,169 210,161" style="fill:rgb(0,0,0)"/>
+<path d="M195,112 L 195,150 Q 195,165 205,165 L 215,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="554,114 550,102 558,102" style="fill:rgb(0,0,0)"/>
+<path d="M554,74L554,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="590,165 578,169 578,161" style="fill:rgb(0,0,0)"/>
+<path d="M554,114 L 554,150 Q 554,165 569,165 L 569,165 L 584,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="593" cy="165" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,127 527,131 527,123" style="fill:rgb(0,0,0)"/>
+<path d="M505,127L533,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,127 L 546,127 Q 554,127 554,135 L 554,142" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M389,165L578,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/returning-clause.html">returning-clause:</a></b>
+<button id='x2193' onclick='hideorshow("x2193","x2194")'>show</button></p>
+ <div id='x2194' style='display:none;' class='imgcontainer'>
+ <div style="max-width:628px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 628.709 140.4">
+<circle cx="5" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="27,47 15,51 15,43" style="fill:rgb(0,0,0)"/>
+<path d="M9,47L21,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M42,62L132,62A15 15 0 0 0 147 47A15 15 0 0 0 132 32L42,32A15 15 0 0 0 27 47A15 15 0 0 0 42 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RETURNING</text>
+<polygon points="237,47 226,51 226,43" style="fill:rgb(0,0,0)"/>
+<path d="M147,47L232,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,62L287,62L287,32L237,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="328,77 317,82 317,73" style="fill:rgb(0,0,0)"/>
+<path d="M287,47 L 294,47 Q 302,47 302,62 L 302,62 Q 302,77 312,77 L 322,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M343,92L347,92A15 15 0 0 0 362 77L362,77A15 15 0 0 0 347 62L343,62A15 15 0 0 0 328 77L328,77A15 15 0 0 0 343 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="398,77 387,82 387,73" style="fill:rgb(0,0,0)"/>
+<path d="M362,77L393,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M414,92L501,92A15 15 0 0 0 516 77L516,77A15 15 0 0 0 501 62L414,62A15 15 0 0 0 398 77L398,77A15 15 0 0 0 414 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="539,77 528,82 528,73" style="fill:rgb(0,0,0)"/>
+<path d="M516,77L534,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="581,47 569,51 569,43" style="fill:rgb(0,0,0)"/>
+<path d="M539,77 L 547,77 Q 554,77 554,62 L 554,62 Q 554,47 565,47 L 575,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,47 607,51 607,43" style="fill:rgb(0,0,0)"/>
+<path d="M581,47L613,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="622" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="345,101 334,106 334,97" style="fill:rgb(0,0,0)"/>
+<path d="M302,62 L 302,86 Q 302,101 317,101 L 325,101 L 340,101" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,101 L 362,101 Q 377,101 377,89 Q 377,77 385,77 L 392,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,47 441,51 441,43" style="fill:rgb(0,0,0)"/>
+<path d="M287,47L447,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,47L607,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,138A15 15 0 0 0 406 123A15 15 0 0 0 391 108A15 15 0 0 0 376 123A15 15 0 0 0 391 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="376,123 365,127 365,118" style="fill:rgb(0,0,0)"/>
+<path d="M147,47 L 196,47 Q 211,47 211,62 L 211,108 Q 211,123 226,123 L 355,123 L 370,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,123 528,127 528,118" style="fill:rgb(0,0,0)"/>
+<path d="M406,123L534,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,123 L 547,123 Q 554,123 554,108 L 554,77 L 554,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,32A15 15 0 0 0 406 17A15 15 0 0 0 391 2A15 15 0 0 0 376 17A15 15 0 0 0 391 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="406,17 418,12 418,21" style="fill:rgb(0,0,0)"/>
+<path d="M581,47 L 588,47 Q 596,47 596,32 L 596,32 Q 596,17 581,17 L 427,17 L 412,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M376,17 L 174,17 Q 159,17 159,32 L 159,32 Q 159,47 169,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2195' onclick='hideorshow("x2195","x2196")'>show</button></p>
+ <div id='x2196' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2197' onclick='hideorshow("x2197","x2198")'>show</button></p>
+ <div id='x2198' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2199' onclick='hideorshow("x2199","x2200")'>show</button></p>
+ <div id='x2200' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2201' onclick='hideorshow("x2201","x2202")'>show</button></p>
+ <div id='x2202' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2203' onclick='hideorshow("x2203","x2204")'>show</button></p>
+ <div id='x2204' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2205' onclick='hideorshow("x2205","x2206")'>show</button></p>
+ <div id='x2206' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2207' onclick='hideorshow("x2207","x2208")'>show</button></p>
+ <div id='x2208' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+<p>An UPDATE statement is used to modify a subset of the values stored in
+zero or more rows of the database table identified by the
+<a href="syntax/qualified-table-name.html">qualified-table-name</a> specified as part of the UPDATE statement.
+
+</p><h1 id="details"><span>2. </span>Details</h1>
+
+<p>If the UPDATE statement does not have a WHERE clause, all rows in the
+table are modified by the UPDATE. Otherwise, the UPDATE affects only those
+rows for which the WHERE clause
+<a href="lang_expr.html#booleanexpr">boolean expression is true</a>. It is not an error if the
+WHERE clause does not evaluate to true for any row in the table - this just
+means that the UPDATE statement affects zero rows.
+
+</p><p>The modifications made to each row affected by an UPDATE statement are
+determined by the list of assignments following the SET keyword. Each
+assignment specifies a <span class='yyterm'>column-name</span> to the left of the
+equals sign and a scalar expression to the right.
+For each affected row, the named columns
+are set to the values found by evaluating the corresponding scalar
+expressions. If a single column-name appears more than once in the list of
+assignment expressions, all but the rightmost occurrence is ignored. Columns
+that do not appear in the list of assignments are left unmodified. The scalar
+expressions may refer to columns of the row being updated. In this case all
+scalar expressions are evaluated before any assignments are made.
+
+</p><p>Beginning in SQLite <a href="releaselog/3_15_0.html">version 3.15.0</a> (2016-10-14), an assignment in
+the SET clause can be a
+<a href="syntax/column-name-list.html">parenthesized list of column names</a> on the left and a
+<a href="rowvalue.html">row value</a> of the same size on the right.
+
+
+</p><p>The optional "OR <i>action</i>" conflict clause that follows the
+UPDATE keyword allows the user to nominate a specific
+constraint conflict resolution algorithm to use during this one UPDATE command.
+Refer to the section entitled <a href="lang_conflict.html">ON CONFLICT</a> for additional information.
+
+</p><h2 id="restrictions_on_update_statements_within_create_trigger"><span>2.1. </span>Restrictions on UPDATE Statements Within CREATE TRIGGER</h2>
+
+<p>The following additional syntax restrictions apply to UPDATE statements that
+occur within the body of a <a href="lang_createtrigger.html">CREATE TRIGGER</a> statement.
+
+</p><ul>
+ <li><p>The <span class='yyterm'>table-name</span> specified as part of an UPDATE
+ statement within
+ a trigger body must be unqualified. In other words, the
+ <i>schema-name</i><b>.</b> prefix on the table name of the UPDATE is
+ not allowed within triggers. Unless the table to which the trigger
+ is attached is in the TEMP database, the table being updated by the
+ trigger program must reside in the same database as it. If the table
+ to which the trigger is attached is in the TEMP database, then the
+ unqualified name of the table being updated is resolved in the same way
+ as it is for a top-level statement (by searching first the TEMP database,
+ then the main database, then any other databases in the order they were
+ attached).
+
+ </p></li><li><p>The INDEXED BY and NOT INDEXED clauses are not allowed on UPDATE
+ statements within triggers.</p>
+
+ </li><li><p>The LIMIT and ORDER BY clauses for UPDATE are unsupported within
+ triggers, regardless of the compilation options used to build SQLite.
+</p></li></ul>
+
+<a name="upfrom"></a>
+
+<h2 id="update_from"><span>2.2. </span>UPDATE FROM</h2>
+
+<p>The UPDATE-FROM idea is an extension to SQL that allows an UPDATE
+statement to be driven by other tables in the database.
+The "target" table is the specific table that is being
+updated. With UPDATE-FROM you can join the target table
+against other tables in the database in order to help compute which
+rows need updating and what the new values should be on those rows.
+UPDATE-FROM is supported beginning in SQLite version 3.33.0
+(2020-08-14).
+
+</p><p>Other relation database engines also implement UPDATE-FROM, but
+because the construct is not part of the SQL standards, each product
+implements UPDATE-FROM differently. The SQLite implementation strives
+to be compatible with PostgreSQL. The SQL Server and MySQL implementations
+of the same idea work a little differently.
+
+</p><p>As an example of how UPDATE-FROM can be useful,
+suppose you have a point-of-sale application that accumulates
+purchases in the SALES table. At the end of the day, you want to adjust
+the INVENTORY table according to the daily sales. To do this, you can
+run an UPDATE against the INVENTORY table that adjusts the quantity by
+the aggregated sales for the day. The statement would look like this:
+
+</p><div class="codeblock"><pre>UPDATE inventory
+ SET quantity = quantity - daily.amt
+ FROM (SELECT sum(quantity) AS amt, itemId FROM sales GROUP BY 2) AS daily
+ WHERE inventory.itemId = daily.itemId;
+</pre></div>
+
+<p>
+The subquery in the FROM clause computes the amount by which the
+inventory should be reduced for each itemId. That subquery is joined
+against the inventory table and the quantity of each affected inventory
+row is reduced by the appropriate amount.
+
+</p><p>
+The target table is not included in the FROM clause, unless the intent
+is to do a self-join against the target table. In the event of a self-join,
+the table in the FROM clause must be aliased to a different name
+than the target table.
+
+</p><p>
+If the join between the target table and the FROM clause results in
+multiple output rows for the same target table row, then only one of
+those output rows is used for updating the target table. The output
+row selected is arbitrary and might change from one release of SQLite
+to the next, or from one run to the next.
+
+</p><h3 id="update_from_in_other_sql_database_engines"><span>2.2.1. </span>UPDATE FROM in other SQL database engines</h3>
+
+<p>SQL Server also supports UPDATE FROM, but in SQL Server the target
+table must be included in the FROM clause. In other words, the
+target table is named twice in the statement. With SQL Server,
+the inventory adjustment statement demonstrated above would be written
+like this:
+
+</p><div class="codeblock"><pre>UPDATE inventory
+ SET quantity = quantity - daily.amt
+ FROM inventory,
+ (SELECT sum(quantity) AS amt, itemId FROM sales GROUP BY 2) AS daily
+ WHERE inventory.itemId = daily.itemId;
+</pre></div>
+
+<p>MySQL supports the UPDATE FROM idea, but it does so without using
+a FROM clause. Instead, the complete join specification is given in between
+the UPDATE and SET keywords. The equivalent MySQL statement would be
+like this:
+
+</p><div class="codeblock"><pre>UPDATE inventory JOIN
+ (SELECT sum(quantity) AS amt, itemId FROM sales GROUP BY 2) AS daily
+ USING( itemId )
+ SET inventory.quantity = inventory.quantity - daily.amt;
+</pre></div>
+
+<p>The MySQL UPDATE statement does not have just one target table like
+other systems. Any of the tables that participate in the join can
+be modified in the SET clause. The MySQL UPDATE syntax allows you to
+update multiple tables at once!
+
+</p><h2 id="optional_limit_and_order_by_clauses"><span>2.3. </span>Optional LIMIT and ORDER BY Clauses</h2>
+
+<p>If SQLite is built with the <a href="compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a>
+compile-time option then the syntax of the UPDATE statement is extended
+with optional ORDER BY and LIMIT clauses as follows:</p>
+
+<p><b><a href="syntax/update-stmt-limited.html">update-stmt-limited:</a></b></p><div class='imgcontainer'>
+ <div style="max-width:623px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 623.266 971.406">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,136L114,136A15 15 0 0 0 129 121A15 15 0 0 0 114 106L60,106A15 15 0 0 0 45 121A15 15 0 0 0 60 136Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="45,121 33,125 33,116" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,106 Q 24,121 31,121 L 39,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,299 159,303 159,295" style="fill:rgb(0,0,0)"/>
+<path d="M129,121 L 137,121 Q 144,121 144,136 L 144,284 Q 144,299 155,299 L 165,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,314L193,314A15 15 0 0 0 208 299A15 15 0 0 0 193 284L186,284A15 15 0 0 0 171 299A15 15 0 0 0 186 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,299 214,303 214,295" style="fill:rgb(0,0,0)"/>
+<path d="M208,299L219,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,314L318,314A15 15 0 0 0 333 299A15 15 0 0 0 318 284L240,284A15 15 0 0 0 225 299A15 15 0 0 0 240 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="279" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="350,299 339,303 339,295" style="fill:rgb(0,0,0)"/>
+<path d="M333,299L344,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,121 380,125 380,116" style="fill:rgb(0,0,0)"/>
+<path d="M350,299 L 358,299 Q 365,299 365,284 L 365,136 Q 365,121 376,121 L 386,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,136L576,136L576,106L392,106Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<path d="M186,276L193,276A15 15 0 0 0 208 261A15 15 0 0 0 193 246L186,246A15 15 0 0 0 171 261A15 15 0 0 0 186 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,261 214,266 214,257" style="fill:rgb(0,0,0)"/>
+<path d="M208,261L219,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,276L304,276A15 15 0 0 0 319 261A15 15 0 0 0 304 246L240,246A15 15 0 0 0 225 261A15 15 0 0 0 240 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="350,261 339,266 339,257" style="fill:rgb(0,0,0)"/>
+<path d="M319,261L344,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,261 L 358,261 Q 365,261 365,254 L 365,246" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,261 159,266 159,257" style="fill:rgb(0,0,0)"/>
+<path d="M144,246 L 144,254 Q 144,261 155,261 L 165,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,239L193,239A15 15 0 0 0 208 224A15 15 0 0 0 193 208L186,208A15 15 0 0 0 171 224A15 15 0 0 0 186 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,224 214,228 214,219" style="fill:rgb(0,0,0)"/>
+<path d="M208,224L219,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,239L292,239A15 15 0 0 0 307 224A15 15 0 0 0 292 208L240,208A15 15 0 0 0 225 224A15 15 0 0 0 240 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="266" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="350,224 339,228 339,219" style="fill:rgb(0,0,0)"/>
+<path d="M307,224L344,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,224 L 358,224 Q 365,224 365,216 L 365,209" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,224 159,228 159,219" style="fill:rgb(0,0,0)"/>
+<path d="M144,208 L 144,216 Q 144,224 155,224 L 165,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,201L193,201A15 15 0 0 0 208 186A15 15 0 0 0 193 171L186,171A15 15 0 0 0 171 186A15 15 0 0 0 186 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,186 214,190 214,181" style="fill:rgb(0,0,0)"/>
+<path d="M208,186L219,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,201L262,201A15 15 0 0 0 277 186A15 15 0 0 0 262 171L240,171A15 15 0 0 0 225 186A15 15 0 0 0 240 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="350,186 339,190 339,181" style="fill:rgb(0,0,0)"/>
+<path d="M277,186L344,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,186 L 358,186 Q 365,186 365,178 L 365,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,186 159,190 159,181" style="fill:rgb(0,0,0)"/>
+<path d="M144,171 L 144,178 Q 144,186 155,186 L 165,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,163L193,163A15 15 0 0 0 208 148A15 15 0 0 0 193 133L186,133A15 15 0 0 0 171 148A15 15 0 0 0 186 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,148 214,152 214,144" style="fill:rgb(0,0,0)"/>
+<path d="M208,148L219,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,163L282,163A15 15 0 0 0 297 148A15 15 0 0 0 282 133L240,133A15 15 0 0 0 225 148A15 15 0 0 0 240 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="350,148 339,152 339,144" style="fill:rgb(0,0,0)"/>
+<path d="M297,148L344,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,148 L 358,148 Q 365,148 365,140 L 365,133" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,148 159,152 159,144" style="fill:rgb(0,0,0)"/>
+<path d="M144,133 L 144,140 Q 144,148 155,148 L 165,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="350,121 339,125 339,116" style="fill:rgb(0,0,0)"/>
+<path d="M129,121L344,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,121L380,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,375 39,379 39,370" style="fill:rgb(0,0,0)"/>
+<path d="M576,121 L 584,121 Q 591,121 591,136 L 591,322 Q 591,337 576,337 L 39,337 Q 24,337 24,352 L 24,360 Q 24,375 34,375 L 45,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,390L81,390A15 15 0 0 0 96 375A15 15 0 0 0 81 360L65,360A15 15 0 0 0 50 375A15 15 0 0 0 65 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="73" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="153,413 141,417 141,408" style="fill:rgb(0,0,0)"/>
+<path d="M96,375 L 111,375 Q 126,375 126,390 L 126,398 Q 126,413 136,413 L 147,413" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,428L309,428L309,397L153,397Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="413" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="350,375 339,379 339,370" style="fill:rgb(0,0,0)"/>
+<path d="M309,413 L 316,413 Q 324,413 324,398 L 324,390 Q 324,375 334,375 L 344,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,390A15 15 0 0 0 380 375A15 15 0 0 0 365 360A15 15 0 0 0 350 375A15 15 0 0 0 365 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="375" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="404,375 392,379 392,370" style="fill:rgb(0,0,0)"/>
+<path d="M380,375L398,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,390L453,390L453,360L404,360Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="428" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="153,375 141,379 141,370" style="fill:rgb(0,0,0)"/>
+<path d="M96,375L147,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,390L262,390A15 15 0 0 0 277 375A15 15 0 0 0 262 360L168,360A15 15 0 0 0 153 375A15 15 0 0 0 168 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M277,375L339,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,465A15 15 0 0 0 266 450A15 15 0 0 0 251 435A15 15 0 0 0 236 450A15 15 0 0 0 251 465Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="450" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="266,450 277,446 277,455" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,435 Q 468,450 453,450 L 287,450 L 272,450" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,450 L 117,450 Q 102,450 102,435 L 102,390 Q 102,375 117,375 L 117,375 L 132,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="251,488 262,484 262,492" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,473 Q 468,488 453,488 L 271,488 L 256,488" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,488 L 39,488 Q 24,488 24,503 L 24,511 Q 24,526 37,526 L 50,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,541L100,541A15 15 0 0 0 115 526A15 15 0 0 0 100 511L65,511A15 15 0 0 0 50 526A15 15 0 0 0 65 541Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="187,526 176,530 176,522" style="fill:rgb(0,0,0)"/>
+<path d="M115,526L182,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,541L348,541L348,511L187,511Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M268,579A15 15 0 0 0 283 564A15 15 0 0 0 268 549A15 15 0 0 0 253 564A15 15 0 0 0 268 579Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="564" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="283,564 295,559 295,568" style="fill:rgb(0,0,0)"/>
+<path d="M348,526 L 356,526 Q 363,526 363,541 L 363,549 Q 363,564 348,564 L 304,564 L 289,564" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,564 L 176,564 Q 161,564 161,549 L 161,541 Q 161,526 168,526 L 176,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,602 176,606 176,597" style="fill:rgb(0,0,0)"/>
+<path d="M115,526 L 123,526 Q 130,526 130,541 L 130,587 Q 130,602 145,602 L 167,602 L 182,602" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,617L290,617L290,586L187,586Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="239" y="602" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<polygon points="405,526 393,530 393,522" style="fill:rgb(0,0,0)"/>
+<path d="M290,602 L 363,602 Q 378,602 378,587 L 378,541 Q 378,526 389,526 L 399,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="244,639 255,635 255,644" style="fill:rgb(0,0,0)"/>
+<path d="M405,526 L 412,526 Q 420,526 420,541 L 420,624 Q 420,639 405,639 L 265,639 L 250,639" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,526L393,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,677 39,681 39,673" style="fill:rgb(0,0,0)"/>
+<path d="M244,639 L 39,639 Q 24,639 24,654 L 24,662 Q 24,677 34,677 L 45,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,692L115,692A15 15 0 0 0 130 677A15 15 0 0 0 115 662L66,662A15 15 0 0 0 50 677A15 15 0 0 0 66 692Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="153,677 142,681 142,673" style="fill:rgb(0,0,0)"/>
+<path d="M130,677L147,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,692L202,692L202,662L153,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="178" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="256,677 245,681 245,673" style="fill:rgb(0,0,0)"/>
+<path d="M202,677L251,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,692L407,692L407,662L256,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="24,586 20,575 28,575" style="fill:rgb(0,0,0)"/>
+<path d="M24,511L24,581" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,586L24,662" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="126,715 138,711 138,719" style="fill:rgb(0,0,0)"/>
+<path d="M202,677 L 212,677 Q 221,677 221,692 L 221,700 Q 221,715 206,715 L 147,715 L 132,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,715 L 39,715 Q 24,715 24,730 L 24,745" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,715 343,711 343,719" style="fill:rgb(0,0,0)"/>
+<path d="M407,677 L 417,677 Q 426,677 426,692 L 426,700 Q 426,715 411,715 L 353,715 L 338,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M332,715L178,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,704 20,692 28,692" style="fill:rgb(0,0,0)"/>
+<path d="M24,662L24,698" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,704 L 24,738 Q 24,753 37,753 L 50,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,768L110,768A15 15 0 0 0 125 753A15 15 0 0 0 110 738L66,738A15 15 0 0 0 50 753A15 15 0 0 0 66 768Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="88" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="148,753 137,757 137,748" style="fill:rgb(0,0,0)"/>
+<path d="M125,753L142,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M163,768L167,768A15 15 0 0 0 183 753A15 15 0 0 0 167 738L163,738A15 15 0 0 0 148 753A15 15 0 0 0 163 768Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="165" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="219,753 207,757 207,748" style="fill:rgb(0,0,0)"/>
+<path d="M183,753L213,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,768L348,768L348,738L219,738Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M283,806A15 15 0 0 0 299 791A15 15 0 0 0 283 775A15 15 0 0 0 268 791A15 15 0 0 0 283 806Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="791" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M60,874L93,874A15 15 0 0 0 109 859A15 15 0 0 0 93 843L60,843A15 15 0 0 0 45 859A15 15 0 0 0 60 874Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="859" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,859 120,863 120,854" style="fill:rgb(0,0,0)"/>
+<path d="M109,859L126,859" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,874L181,874L181,843L132,843Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="859" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,889 207,893 207,885" style="fill:rgb(0,0,0)"/>
+<path d="M181,859 L 188,859 Q 196,859 196,874 L 196,874 Q 196,889 204,889 L 213,889" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,904L285,904A15 15 0 0 0 300 889A15 15 0 0 0 285 874L234,874A15 15 0 0 0 219 889A15 15 0 0 0 234 904Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="889" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="323,889 312,893 312,885" style="fill:rgb(0,0,0)"/>
+<path d="M300,889L318,889" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,904L373,904L373,874L323,874Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="889" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M234,942A15 15 0 0 0 249 927A15 15 0 0 0 234 912A15 15 0 0 0 219 927A15 15 0 0 0 234 942Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="927" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="272,927 261,931 261,922" style="fill:rgb(0,0,0)"/>
+<path d="M249,927L266,927" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,942L321,942L321,912L272,912Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="927" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,927 207,931 207,922" style="fill:rgb(0,0,0)"/>
+<path d="M181,859 L 188,859 Q 196,859 196,874 L 196,912 Q 196,927 204,927 L 213,927" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,791 310,786 310,795" style="fill:rgb(0,0,0)"/>
+<path d="M348,753 L 356,753 Q 363,753 363,768 L 363,776 Q 363,791 348,791 L 319,791 L 304,791" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M268,791 L 210,791 Q 195,791 195,776 L 195,768 Q 195,753 203,753 L 210,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,859 33,863 33,854" style="fill:rgb(0,0,0)"/>
+<path d="M24,738 L 24,844 Q 24,859 31,859 L 39,859" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,821 177,816 177,825" style="fill:rgb(0,0,0)"/>
+<path d="M348,753 L 356,753 Q 363,753 363,768 L 363,806 Q 363,821 348,821 L 186,821 L 171,821" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,821 L 39,821 Q 24,821 24,828 L 24,836" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="178,964 166,969 166,960" style="fill:rgb(0,0,0)"/>
+<path d="M24,843 L 24,949 Q 24,964 39,964 L 157,964 L 172,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,964 602,969 602,960" style="fill:rgb(0,0,0)"/>
+<path d="M178,964L608,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="964" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,889 384,893 384,885" style="fill:rgb(0,0,0)"/>
+<path d="M373,889L390,889" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,964 435,969 435,960" style="fill:rgb(0,0,0)"/>
+<path d="M396,889 L 403,889 Q 411,889 411,904 L 411,949 Q 411,964 426,964 L 426,964 L 441,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,927 384,931 384,922" style="fill:rgb(0,0,0)"/>
+<path d="M321,927L390,927" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,927 L 403,927 Q 411,927 411,934 L 411,942" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,859 384,863 384,854" style="fill:rgb(0,0,0)"/>
+<path d="M181,859L390,859" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,859 L 403,859 Q 411,859 411,874 L 411,889 L 411,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+ </div>
+
+
+<p>If an UPDATE statement has a LIMIT clause, the maximum number of rows that
+will be updated is found by evaluating the accompanying expression and casting
+it to an integer value. A negative value is interpreted as "no limit".
+
+</p><p>If the LIMIT expression evaluates to non-negative value <i>N</i> and the
+UPDATE statement has an ORDER BY clause, then all rows that would be updated in
+the absence of the LIMIT clause are sorted according to the ORDER BY and the
+first <i>N</i> updated. If the UPDATE statement also has an OFFSET clause,
+then it is similarly evaluated and cast to an integer value. If the OFFSET
+expression evaluates to a non-negative value <i>M</i>, then the first <i>M</i>
+rows are skipped and the following <i>N</i> rows updated instead.
+
+</p><p>If the UPDATE statement has no ORDER BY clause, then all rows that
+would be updated in the absence of the LIMIT clause are assembled in an
+arbitrary order before applying the LIMIT and OFFSET clauses to determine
+which are actually updated.
+
+</p><p>The ORDER BY clause on an UPDATE statement is used only to determine which
+rows fall within the LIMIT. The order in which rows are modified is arbitrary
+and is not influenced by the ORDER BY clause.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_update.in?m=9cde642bd865f67ca">2020-07-18 16:35:00</a> UTC </small></i></p>
+
diff --git a/www/lang_upsert.html b/www/lang_upsert.html
new file mode 100644
index 0000000..58ed18d
--- /dev/null
+++ b/www/lang_upsert.html
@@ -0,0 +1,2680 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>UPSERT</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+UPSERT
+</div>
+</div>
+
+
+
+
+<h1 id="syntax"><span>1. </span>Syntax</h1>
+<p><b><a href="syntax/upsert-clause.html">upsert-clause:</a></b>
+<button id='x2209' onclick='hideorshow("x2209","x2210")'>hide</button></p>
+ <div id='x2210' class='imgcontainer'>
+ <div style="max-width:901px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 901.142 363.96">
+<path d="M223,165L759,165L759,51L223,51Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="5" cy="66" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,66 35,71 35,62" style="fill:rgb(0,0,0)"/>
+<path d="M9,66L41,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,82L71,82A15 15 0 0 0 86 66A15 15 0 0 0 71 51L62,51A15 15 0 0 0 47 66A15 15 0 0 0 62 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="103,66 92,71 92,62" style="fill:rgb(0,0,0)"/>
+<path d="M86,66L98,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M118,82L193,82A15 15 0 0 0 208 66A15 15 0 0 0 193 51L118,51A15 15 0 0 0 103 66A15 15 0 0 0 118 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="264,97 253,101 253,92" style="fill:rgb(0,0,0)"/>
+<path d="M208,66 L 223,66 Q 238,66 238,81 L 238,82 Q 238,97 248,97 L 259,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M280,112A15 15 0 0 0 295 97L295,97A15 15 0 0 0 280 82A15 15 0 0 0 264 97L264,97A15 15 0 0 0 280 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="97" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="331,97 319,101 319,92" style="fill:rgb(0,0,0)"/>
+<path d="M295,97L325,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M331,112L475,112L475,82L331,82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="97" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="511,97 500,101 500,92" style="fill:rgb(0,0,0)"/>
+<path d="M475,97L506,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M526,112A15 15 0 0 0 542 97L542,97A15 15 0 0 0 526 82A15 15 0 0 0 511 97L511,97A15 15 0 0 0 526 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="526" y="97" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="583,135 572,139 572,130" style="fill:rgb(0,0,0)"/>
+<path d="M542,97 L 549,97 Q 557,97 557,112 L 557,119 Q 557,135 567,135 L 577,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M598,150L648,150A15 15 0 0 0 663 135A15 15 0 0 0 648 119L598,119A15 15 0 0 0 583 135A15 15 0 0 0 598 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="623" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="680,135 669,139 669,130" style="fill:rgb(0,0,0)"/>
+<path d="M663,135L674,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M680,150L729,150L729,119L680,119Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="744,108 749,119 740,119" style="fill:rgb(0,0,0)"/>
+<path d="M729,135 L 737,135 Q 744,135 744,124 L 744,114" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="786,66 774,71 774,62" style="fill:rgb(0,0,0)"/>
+<path d="M744,108 L 744,81 Q 744,66 759,66 L 765,66 L 780,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M801,82L809,82A15 15 0 0 0 824 66A15 15 0 0 0 809 51L801,51A15 15 0 0 0 786 66A15 15 0 0 0 801 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="805" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DO</text>
+<polygon points="729,97 718,101 718,92" style="fill:rgb(0,0,0)"/>
+<path d="M542,97L723,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,97 L 737,97 Q 744,97 744,89 L 744,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M208,66L774,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,150A15 15 0 0 0 418 135A15 15 0 0 0 403 119A15 15 0 0 0 388 135A15 15 0 0 0 403 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="135" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,135 430,130 430,139" style="fill:rgb(0,0,0)"/>
+<path d="M475,97 L 483,97 Q 490,97 490,112 L 490,119 Q 490,135 475,135 L 439,135 L 424,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,135 L 319,135 Q 304,135 304,119 L 304,112 Q 304,97 312,97 L 319,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="288" y="36" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" dominant-baseline="central">conflict target</text>
+<polygon points="436,195 447,191 447,199" style="fill:rgb(0,0,0)"/>
+<path d="M824,66 L 831,66 Q 839,66 839,81 L 839,180 Q 839,195 824,195 L 456,195 L 441,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,271 35,275 35,266" style="fill:rgb(0,0,0)"/>
+<path d="M436,195 L 35,195 Q 20,195 20,210 L 20,256 Q 20,271 31,271 L 41,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,286L116,286A15 15 0 0 0 131 271A15 15 0 0 0 116 255L62,255A15 15 0 0 0 47 271A15 15 0 0 0 62 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="89" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="148,271 137,275 137,266" style="fill:rgb(0,0,0)"/>
+<path d="M131,271L143,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M164,286L179,286A15 15 0 0 0 194 271A15 15 0 0 0 179 255L164,255A15 15 0 0 0 148 271A15 15 0 0 0 164 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="171" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="257,308 245,313 245,304" style="fill:rgb(0,0,0)"/>
+<path d="M194,271 L 215,271 Q 230,271 230,286 L 230,293 Q 230,308 241,308 L 251,308" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,324L413,324L413,293L257,293Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="335" y="308" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="475,271 464,275 464,266" style="fill:rgb(0,0,0)"/>
+<path d="M413,308 L 434,308 Q 449,308 449,293 L 449,286 Q 449,271 459,271 L 469,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,286A15 15 0 0 0 505 271A15 15 0 0 0 490 255A15 15 0 0 0 475 271A15 15 0 0 0 490 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="523,271 511,275 511,266" style="fill:rgb(0,0,0)"/>
+<path d="M505,271L517,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M523,286L572,286L572,255L523,255Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="547" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="619,271 608,275 608,266" style="fill:rgb(0,0,0)"/>
+<path d="M572,271L613,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M634,286L684,286A15 15 0 0 0 699 271A15 15 0 0 0 684 255L634,255A15 15 0 0 0 619 271A15 15 0 0 0 634 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="659" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="716,271 705,275 705,266" style="fill:rgb(0,0,0)"/>
+<path d="M699,271L710,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M716,286L765,286L765,255L716,255Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="741" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="891,233 880,237 880,228" style="fill:rgb(0,0,0)"/>
+<path d="M765,271 L 773,271 Q 780,271 780,256 L 780,248 Q 780,233 795,233 L 871,233 L 886,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="895" cy="233" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,248L130,248A15 15 0 0 0 145 233A15 15 0 0 0 130 218L62,218A15 15 0 0 0 47 233A15 15 0 0 0 62 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="96" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTHING</text>
+<polygon points="47,233 35,237 35,228" style="fill:rgb(0,0,0)"/>
+<path d="M20,218 L 20,225 Q 20,233 31,233 L 41,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,233L880,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="638,233 626,237 626,228" style="fill:rgb(0,0,0)"/>
+<path d="M587,271 L 594,271 Q 602,271 602,256 L 602,248 Q 602,233 617,233 L 617,233 L 632,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M383,361A15 15 0 0 0 398 346A15 15 0 0 0 383 331A15 15 0 0 0 368 346A15 15 0 0 0 383 361Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="383" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="398,346 410,342 410,351" style="fill:rgb(0,0,0)"/>
+<path d="M572,271 L 579,271 Q 587,271 587,286 L 587,331 Q 587,346 572,346 L 419,346 L 404,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,308 210,320 201,320" style="fill:rgb(0,0,0)"/>
+<path d="M368,346 L 221,346 Q 206,346 206,331 L 206,329 L 206,314" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,308 L 206,286 Q 206,271 221,271 L 227,271 L 242,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="257,271 245,275 245,266" style="fill:rgb(0,0,0)"/>
+<path d="M194,271L251,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,286L366,286A15 15 0 0 0 381 271A15 15 0 0 0 366 255L272,255A15 15 0 0 0 257 271A15 15 0 0 0 272 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M381,271L464,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="865,97 869,108 860,108" style="fill:rgb(0,0,0)"/>
+<path d="M850,233 L 857,233 Q 865,233 865,218 L 865,117 L 865,102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="403,6 415,2 415,10" style="fill:rgb(0,0,0)"/>
+<path d="M865,97 L 865,21 Q 865,6 850,6 L 424,6 L 409,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,6 L 40,6 Q 25,6 25,21 L 25,51 Q 25,66 32,66 L 40,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/column-name-list.html">column-name-list:</a></b>
+<button id='x2211' onclick='hideorshow("x2211","x2212")'>show</button></p>
+ <div id='x2212' style='display:none;' class='imgcontainer'>
+ <div style="max-width:353px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 353.621 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="85,17 74,21 74,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L79,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M85,17L115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,32L230,32A15 15 0 0 0 245 17A15 15 0 0 0 230 2L136,2A15 15 0 0 0 121 17A15 15 0 0 0 136 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="290,17 279,21 279,12" style="fill:rgb(0,0,0)"/>
+<path d="M245,17L285,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2A15 15 0 0 0 290 17A15 15 0 0 0 306 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="306" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="344,17 332,21 332,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L338,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="347" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M183,70A15 15 0 0 0 198 55L198,55A15 15 0 0 0 183 39A15 15 0 0 0 168 55L168,55A15 15 0 0 0 183 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="198,55 210,50 210,59" style="fill:rgb(0,0,0)"/>
+<path d="M245,17 L 257,17 Q 269,17 269,32 L 269,40 Q 269,55 254,55 L 219,55 L 204,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M168,55 L 102,55 Q 87,55 87,40 L 87,32 Q 87,17 101,17 L 115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x2213' onclick='hideorshow("x2213","x2214")'>show</button></p>
+ <div id='x2214' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x2215' onclick='hideorshow("x2215","x2216")'>show</button></p>
+ <div id='x2216' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x2217' onclick='hideorshow("x2217","x2218")'>show</button></p>
+ <div id='x2218' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x2219' onclick='hideorshow("x2219","x2220")'>show</button></p>
+ <div id='x2220' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2221' onclick='hideorshow("x2221","x2222")'>show</button></p>
+ <div id='x2222' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2223' onclick='hideorshow("x2223","x2224")'>show</button></p>
+ <div id='x2224' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x2225' onclick='hideorshow("x2225","x2226")'>show</button></p>
+ <div id='x2226' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2227' onclick='hideorshow("x2227","x2228")'>show</button></p>
+ <div id='x2228' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x2229' onclick='hideorshow("x2229","x2230")'>show</button></p>
+ <div id='x2230' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2231' onclick='hideorshow("x2231","x2232")'>show</button></p>
+ <div id='x2232' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2233' onclick='hideorshow("x2233","x2234")'>show</button></p>
+ <div id='x2234' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2235' onclick='hideorshow("x2235","x2236")'>show</button></p>
+ <div id='x2236' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2237' onclick='hideorshow("x2237","x2238")'>show</button></p>
+ <div id='x2238' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2239' onclick='hideorshow("x2239","x2240")'>show</button></p>
+ <div id='x2240' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2241' onclick='hideorshow("x2241","x2242")'>show</button></p>
+ <div id='x2242' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2243' onclick='hideorshow("x2243","x2244")'>show</button></p>
+ <div id='x2244' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2245' onclick='hideorshow("x2245","x2246")'>show</button></p>
+ <div id='x2246' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2247' onclick='hideorshow("x2247","x2248")'>show</button></p>
+ <div id='x2248' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x2249' onclick='hideorshow("x2249","x2250")'>show</button></p>
+ <div id='x2250' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x2251' onclick='hideorshow("x2251","x2252")'>show</button></p>
+ <div id='x2252' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/indexed-column.html">indexed-column:</a></b>
+<button id='x2253' onclick='hideorshow("x2253","x2254")'>show</button></p>
+ <div id='x2254' style='display:none;' class='imgcontainer'>
+ <div style="max-width:696px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 696.36 102.6">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="246,47 235,51 235,43" style="fill:rgb(0,0,0)"/>
+<path d="M175,17 L 205,17 Q 220,17 220,32 L 220,32 Q 220,47 230,47 L 240,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,62L325,62A15 15 0 0 0 341 47L341,47A15 15 0 0 0 325 32L261,32A15 15 0 0 0 246 47L246,47A15 15 0 0 0 261 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="293" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="358,47 346,51 346,43" style="fill:rgb(0,0,0)"/>
+<path d="M341,47L352,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,62L478,62A15 15 0 0 0 493 47L493,47A15 15 0 0 0 478 32L373,32A15 15 0 0 0 358 47L358,47A15 15 0 0 0 373 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="511,47 499,51 499,43" style="fill:rgb(0,0,0)"/>
+<path d="M493,47L505,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,85 556,89 556,81" style="fill:rgb(0,0,0)"/>
+<path d="M511,47 L 518,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 Q 541,17 541,32 L 541,70 Q 541,85 551,85 L 561,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,100L613,100A15 15 0 0 0 628 85L628,85A15 15 0 0 0 613 70L582,70A15 15 0 0 0 567 85L567,85A15 15 0 0 0 582 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="645,85 633,89 633,81" style="fill:rgb(0,0,0)"/>
+<path d="M628,85L639,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="687,17 675,21 675,12" style="fill:rgb(0,0,0)"/>
+<path d="M645,85 L 652,85 Q 660,85 660,70 L 660,32 Q 660,17 670,17 L 681,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="690" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,70L100,70L100,39L50,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="175,55 163,59 163,50" style="fill:rgb(0,0,0)"/>
+<path d="M100,55L169,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M175,55 L 182,55 Q 190,55 190,40 L 190,32 Q 190,17 197,17 L 205,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,17 586,21 586,12" style="fill:rgb(0,0,0)"/>
+<path d="M358,17L592,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,17L675,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,62L599,62A15 15 0 0 0 614 47A15 15 0 0 0 599 32L582,32A15 15 0 0 0 567 47A15 15 0 0 0 582 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="645,47 633,51 633,43" style="fill:rgb(0,0,0)"/>
+<path d="M614,47L639,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M645,47 L 652,47 Q 660,47 660,40 L 660,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,47 556,51 556,43" style="fill:rgb(0,0,0)"/>
+<path d="M541,32 L 541,39 Q 541,47 551,47 L 561,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+
+
+<h1 id="description"><span>2. </span>Description</h1>
+
+<p>UPSERT is a clause added to <a href="lang_insert.html">INSERT</a> that causes the
+INSERT to behave as an <a href="lang_update.html">UPDATE</a> or a no-op if the INSERT would violate
+a uniqueness constraint.
+UPSERT is not standard SQL. UPSERT in SQLite follows the
+syntax established by PostgreSQL, with generalizations.
+
+</p><p>An UPSERT is an ordinary <a href="lang_insert.html">INSERT</a> statement that is followed by
+one or more ON CONFLICT clauses, as shown in the syntax diagram above.
+
+</p><p>The syntax in between the "ON CONFLICT" and "DO" keywords
+is called the "conflict target". The conflict target specifies a
+uniqueness constraint that will trigger the upsert. The conflict target
+may be omitted on the last ON CONFLICT clause in the INSERT statement, but
+is required for all other ON CONFLICT clauses.
+
+</p><p>If the insert operation would cause the conflict target uniqueness
+constraint to fail, then the insert is omitted and
+the corresponding DO NOTHING or DO UPDATE operation is performed instead.
+The ON CONFLICT clauses are checked in the order specified. If the last
+ON CONFLICT clause omits the conflict target, then it will fire if any
+uniqueness constraint fails which is not captured by prior ON CONFLICT clauses.
+
+</p><p>Only a single ON CONFLICT clause, specifically the first ON CONFLICT
+clause with a matching conflict target, may run for each row of the INSERT.
+When an ON CONFLICT clause fires, all subsequent ON CONFLICT clauses are
+bypassed for that one row.
+
+</p><p>
+In the case of a multi-row insert, the upsert decision is made separately
+for each row of the insert.
+
+</p><p>The UPSERT processing happens only for uniqueness constraints.
+A "uniqueness constraint"
+is an explicit UNIQUE or PRIMARY KEY constraint within
+the CREATE TABLE statement, or a <a href="lang_createindex.html#uniqueidx">unique index</a>.
+UPSERT does not intervene for failed NOT NULL, CHECK,
+or foreign key constraints
+or for constraints that are implemented using triggers.
+
+</p><p>Column names in the expressions of a DO UPDATE refer to the original
+unchanged value of the column, before the attempted INSERT. To use the
+value that would have been inserted had the constraint not failed,
+add the special "excluded." table qualifier to the column name.
+
+</p><h2 id="examples"><span>2.1. </span>Examples</h2>
+
+<p>Some examples will help illustrate how UPSERT works:
+
+</p><blockquote><pre>
+CREATE TABLE vocabulary(word TEXT PRIMARY KEY, count INT DEFAULT 1);
+INSERT INTO vocabulary(word) VALUES('jovial')
+ ON CONFLICT(word) DO UPDATE SET count=count+1;
+</pre></blockquote>
+
+<p>The upsert above inserts the new vocabulary word "jovial" if that
+word is not already in the dictionary, or if it is already in the
+dictionary, it increments the counter. The "count+1" expression
+could also be written as "vocabulary.count". PostgreSQL requires the
+second form, but SQLite accepts either.
+
+</p><blockquote><pre>
+CREATE TABLE phonebook(name TEXT PRIMARY KEY, phonenumber TEXT);
+INSERT INTO phonebook(name,phonenumber) VALUES('Alice','704-555-1212')
+ ON CONFLICT(name) DO UPDATE SET phonenumber=excluded.phonenumber;
+</pre></blockquote>
+
+<p>In the second example, the expression in the DO UPDATE clause is
+of the form "excluded.phonenumber". The "excluded." prefix causes the
+"phonenumber" to refer to the value for phonenumber that would have been
+inserted had there been no conflict. Hence, the effect of the upsert
+is to insert a phonenumber of Alice if none exists, or to overwrite
+any prior phonenumber for Alice with the new one.
+
+</p><p>Note that the DO UPDATE clause acts only on the single row
+that experienced the constraint error during INSERT. It is not
+necessary to include a WHERE clause that restricts the action
+to that one row. The only use for the WHERE clause at
+the end of the DO UPDATE is to optionally change the DO UPDATE
+into a no-op depending on the original and/or new values.
+For example:
+
+</p><blockquote><pre>
+CREATE TABLE phonebook2(
+ name TEXT PRIMARY KEY,
+ phonenumber TEXT,
+ validDate DATE
+);
+INSERT INTO phonebook2(name,phonenumber,validDate)
+ VALUES('Alice','704-555-1212','2018-05-08')
+ ON CONFLICT(name) DO UPDATE SET
+ phonenumber=excluded.phonenumber,
+ validDate=excluded.validDate
+ WHERE excluded.validDate>phonebook2.validDate;
+</pre></blockquote>
+
+<p>In this last example, the phonebook2 entry is only
+updated if the validDate for the newly inserted value is
+newer than the entry already in the table. If the table already
+contains an entry with the same name and a current validDate,
+then the WHERE clause causes the DO UPDATE to become a no-op.
+
+<a name="parseambig"></a>
+
+
+</p><h2 id="parsing_ambiguity"><span>2.2. </span>Parsing Ambiguity</h2>
+
+<p>When the <a href="lang_insert.html">INSERT</a> statement to which the UPSERT is attached
+takes its values from a <a href="lang_select.html">SELECT</a> statement, there is a potential
+parsing ambiguity. The parser might not be able to tell if the
+"ON" keyword is introducing the UPSERT or if it is the ON clause
+of a join. To work around this, the SELECT statement should always
+include a WHERE clause, even if that WHERE clause is just
+"WHERE true".
+
+</p><p>Ambiguous use of ON:
+
+</p><blockquote><pre>
+INSERT INTO t1 SELECT * FROM t2
+ON CONFLICT(x) DO UPDATE SET y=excluded.y;
+</pre></blockquote>
+
+<p>Ambiguity resolved using a WHERE clause:
+
+</p><blockquote><pre>
+INSERT INTO t1 SELECT * FROM t2 <font color="blue">WHERE true</font>
+ON CONFLICT(x) DO UPDATE SET y=excluded.y;
+</pre></blockquote>
+
+<h1 id="limitations"><span>3. </span>Limitations</h1>
+
+<p>UPSERT does not currently work for <a href="vtab.html">virtual tables</a>.
+
+</p><p>The <a href="lang_conflict.html">conflict resolution algorithm</a> for the update operation
+of the DO UPDATE clause is always ABORT. In other words, the behavior
+is as if the DO UPDATE clause were actually written as
+"DO UPDATE OR ABORT". If the DO UPDATE clause encounters any
+constraint violation, the entire INSERT statement rolls back and
+halts. This is true even if the DO UPDATE clause is
+contained within an INSERT statement or a trigger that specifies some
+other conflict resolution algorithm.
+
+</p><h1 id="history"><span>4. </span>History</h1>
+
+<p>UPSERT syntax was added to SQLite with version 3.24.0 (2018-06-04).
+The original implementation closely followed the PostgreSQL syntax in that
+it only permitted a single ON CONFLICT clause and it required a
+conflict target for on DO UPDATE.
+The syntax was generalized to permit multiple ON CONFLICT clauses and
+to allow DO UPDATE resolution without a conflict target in
+SQLite version 3.35.0 (2021-03-12).
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_upsert.in?m=e0df5cdd6501250fa">2021-02-21 12:53:49</a> UTC </small></i></p>
+
diff --git a/www/lang_vacuum.html b/www/lang_vacuum.html
new file mode 100644
index 0000000..7901ec8
--- /dev/null
+++ b/www/lang_vacuum.html
@@ -0,0 +1,297 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>VACUUM</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+VACUUM
+</div>
+</div>
+
+
+
+
+<h1 id="syntax"><span>1. </span>Syntax</h1>
+<p><b><a href="syntax/vacuum-stmt.html">vacuum-stmt:</a></b>
+<button id='x2255' onclick='hideorshow("x2255","x2256")'>hide</button></p>
+ <div id='x2256' class='imgcontainer'>
+ <div style="max-width:599px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 599.669 64.8">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L108,32A15 15 0 0 0 123 17A15 15 0 0 0 108 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="78" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VACUUM</text>
+<polygon points="165,47 153,51 153,43" style="fill:rgb(0,0,0)"/>
+<path d="M123,17 L 131,17 Q 138,17 138,32 L 138,32 Q 138,47 149,47 L 159,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,62L276,62A15 15 0 0 0 292 47L292,47A15 15 0 0 0 276 32L180,32A15 15 0 0 0 165 47L165,47A15 15 0 0 0 180 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="333,17 322,21 322,12" style="fill:rgb(0,0,0)"/>
+<path d="M292,47 L 299,47 Q 307,47 307,32 L 307,32 Q 307,17 317,17 L 327,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="375,47 363,51 363,43" style="fill:rgb(0,0,0)"/>
+<path d="M333,17 L 341,17 Q 348,17 348,32 L 348,32 Q 348,47 359,47 L 369,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M390,62L417,62A15 15 0 0 0 432 47L432,47A15 15 0 0 0 417 32L390,32A15 15 0 0 0 375 47L375,47A15 15 0 0 0 390 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTO</text>
+<polygon points="455,47 443,51 443,43" style="fill:rgb(0,0,0)"/>
+<path d="M432,47L449,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,62L524,62A15 15 0 0 0 539 47L539,47A15 15 0 0 0 524 32L470,32A15 15 0 0 0 455 47L455,47A15 15 0 0 0 470 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="497" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filename</text>
+<polygon points="590,17 578,21 578,12" style="fill:rgb(0,0,0)"/>
+<path d="M539,47 L 546,47 Q 554,47 554,32 L 554,32 Q 554,17 569,17 L 569,17 L 584,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="593" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M123,17L578,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+<h1 id="description"><span>2. </span>Description</h1>
+<p>
+ The VACUUM command rebuilds the database file, repacking it into a minimal
+ amount of disk space. There are several
+ reasons an application might do this:
+
+</p><ul>
+ <li> <p> Unless SQLite is running in "auto_vacuum=FULL" mode, when a large
+ amount of data is deleted from the database file it leaves behind empty
+ space, or "free" database pages. This means the database file might
+ be larger than strictly necessary. Running VACUUM to rebuild the
+ database reclaims this space and reduces the size of the database file.
+
+ </p></li><li> <p> Frequent inserts, updates, and deletes can cause the database file
+ to become fragmented - where data for a single table or index is scattered
+ around the database file. Running VACUUM ensures that each table and
+ index is largely stored contiguously within the database file. In some
+ cases, VACUUM may also reduce the number of partially filled pages in
+ the database, reducing the size of the database file further.
+
+ </p></li><li> <p> When content is deleted from an SQLite database, the content is not
+ usually erased but rather the space used to hold the content is marked as
+ being available for reuse. This can allow deleted content to be recovered
+ by a hacker or by forensic analysis. Running VACUUM will clean the database
+ of all traces of deleted content, thus preventing an adversary from recovering
+ deleted content. Using VACUUM in this way is an alternative to setting
+ <a href="pragma.html#pragma_secure_delete">PRAGMA secure_delete=ON</a>.
+
+ </p></li><li> <p> Normally, the database <a href="pragma.html#pragma_page_size">page_size</a> and whether or not the database
+ supports <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> must be configured before the database file is
+ actually created. However, when not in <a href="wal.html">write-ahead log</a> mode, the
+ <a href="pragma.html#pragma_page_size">page_size</a> and/or <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> properties of an existing database may be
+ changed by using the <a href="pragma.html#pragma_page_size">page_size</a> and/or
+ <a href="pragma.html#pragma_auto_vacuum">pragma auto_vacuum</a> pragmas and then immediately VACUUMing
+ the database. When in <a href="wal.html">write-ahead log</a> mode, only the <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a>
+ support property can be changed using VACUUM.
+</p></li></ul>
+
+<p>By default, VACUUM operates on the main database.
+<a href="lang_attach.html">Attached databases</a> can be vacuumed by appending the appropriate
+<span class='yyterm'>schema-name</span> to the VACUUM statement.
+
+</p><p><b>Compatibility Warning:</b> The ability to vacuum attached databases was
+added in <a href="releaselog/3_15_0.html">version 3.15.0</a> (2016-10-14). Prior to that, a
+<span class='yyterm'>schema-name</span> added to the
+VACUUM statement would be silently ignored and the "main" schema would be
+vacuumed.</p>
+
+<a name="vacuuminto"></a>
+
+<h2 id="vacuum_with_an_into_clause"><span>2.1. </span>VACUUM with an INTO clause</h2>
+
+<p>If the INTO clause is included, then the original database file is
+unchanged and a new database is created in a file named by the
+argument to the INTO clause. The new database will contain the same
+logical content as the original database, fully vacuumed.
+
+</p><p>
+The VACUUM command with an INTO clause is an alternative to the
+<a href="backup.html">backup API</a> for generating backup copies of a live database.
+The advantage of using VACUUM INTO is that the resulting backup
+database is minimal in size and hence the amount of filesystem
+I/O may be reduced. Also, all deleted content is purged from the
+backup, leaving behind no forensic traces. On the other hand,
+the <a href="backup.html">backup API</a> uses fewer CPU cycles and can be executed
+incrementally.
+
+</p><p>
+The filename in the INTO clause can be an arbitrary SQL expression
+that evaluates to a string.
+The file named by the INTO clause must not previously exist, or
+else it must be an empty file, or the VACUUM INTO command will
+fail with an error.
+
+</p><p>
+The argument to INTO can be a <a href="uri.html">URI filename</a> if URI filenames
+are enabled.
+URL filenames are enabled if any of the following are true:
+</p><ul>
+<li> The SQLite library was compiled with <a href="compile.html#use_uri">-DSQLITE_USE_URI=1</a>.
+</li><li> The <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">SQLITE_CONFIG_URI</a>,1) interfaces was
+ invoked at start-time.
+</li><li> The <a href="c3ref/sqlite3.html">database connection</a> that is running the VACUUM INTO
+ statement was originally opened using the
+ <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_URI</a> flag.
+</li></ul>
+
+<p>
+The VACUUM INTO command is transactional in the sense that
+the generated output database is a consistent snapshot of the
+original database. However, if the VACUUM INTO command is
+interrupted by an unplanned shutdown or power lose, then
+the generated output database might be incomplete and corrupt.
+Also, SQLite does not invoke fsync() or FlushFileBuffers()
+on the generated database to ensure that it has reached
+non-volatile storage before completing.
+
+
+<a name="howvacuumworks"></a>
+
+</p><h1 id="how_vacuum_works"><span>3. </span>How VACUUM works</h1>
+
+<p>The VACUUM command works by copying the contents of the database into
+a temporary database file and then overwriting the original with the
+contents of the temporary file. When overwriting the original, a rollback
+journal or <a href="wal.html">write-ahead log</a> WAL file is used just as it would be for any
+other database transaction. This means that when VACUUMing a database,
+as much as twice the size of the original database file is required in free
+disk space.
+
+</p><p>The VACUUM INTO command works the same way except that it uses the file
+named on the INTO clause in place of the temporary database and omits the
+step of copying the vacuumed database back over top of the original database.
+
+</p><p>The VACUUM command may change the <a href="lang_createtable.html#rowid">ROWIDs</a> of entries in any
+tables that do not have an explicit <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>.
+</p>
+
+<p>A VACUUM will fail if there is an open transaction on the database
+connection that is attempting to run the VACUUM. Unfinalized SQL
+statements typically hold a read transaction open, so the VACUUM
+might fail if there are unfinalized SQL statements on the same connection.
+VACUUM (but not VACUUM INTO) is a write operation and so if another
+database connection is holding a lock that prevents writes, then
+the VACUUM will fail.
+
+</p><p>An alternative to using the VACUUM command to
+reclaim space after data has been deleted is auto-vacuum mode, enabled using
+the <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> pragma. When <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> is enabled for a database
+free pages may be reclaimed after deleting data, causing the file to shrink,
+without rebuilding the entire database using VACUUM. However, using
+<a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> can lead to extra database file fragmentation. And <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a>
+does not compact partially filled pages of the database as VACUUM does.
+
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_vacuum.in?m=6efbaecf3fe739850">2022-06-15 00:04:17</a> UTC </small></i></p>
+
diff --git a/www/lang_with.html b/www/lang_with.html
new file mode 100644
index 0000000..aafca54
--- /dev/null
+++ b/www/lang_with.html
@@ -0,0 +1,3195 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The WITH Clause</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The WITH Clause
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#ordinary_common_table_expressions">2. Ordinary Common Table Expressions</a></div>
+<div class="fancy-toc1"><a href="#recursive_common_table_expressions">3. Recursive Common Table Expressions</a></div>
+<div class="fancy-toc2"><a href="#recursive_query_examples">3.1. Recursive Query Examples</a></div>
+<div class="fancy-toc2"><a href="#hierarchical_query_examples">3.2. Hierarchical Query Examples</a></div>
+<div class="fancy-toc2"><a href="#queries_against_a_graph">3.3. Queries Against A Graph</a></div>
+<div class="fancy-toc2"><a href="#controlling_depth_first_versus_breadth_first_search_of_a_tree_using_order_by">3.4. Controlling Depth-First Versus Breadth-First Search Of a Tree
+Using ORDER BY</a></div>
+<div class="fancy-toc2"><a href="#outlandish_recursive_query_examples">3.5. Outlandish Recursive Query Examples</a></div>
+<div class="fancy-toc1"><a href="#materialization_hints">4. Materialization Hints</a></div>
+<div class="fancy-toc1"><a href="#limitations_and_caveats">5. Limitations And Caveats</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+<p><b><a href="syntax/with-clause.html">with-clause:</a></b>
+<button id='x2257' onclick='hideorshow("x2257","x2258")'>hide</button></p>
+ <div id='x2258' class='imgcontainer'>
+ <div style="max-width:1056px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1056.72 140.4">
+<circle cx="5" cy="85" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,85 20,89 20,81" style="fill:rgb(0,0,0)"/>
+<path d="M9,85L26,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,100L78,100A15 15 0 0 0 93 85A15 15 0 0 0 78 70L47,70A15 15 0 0 0 32 85A15 15 0 0 0 47 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,85 L 100,85 Q 108,85 108,70 L 108,70 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M150,70L235,70A15 15 0 0 0 250 55L250,55A15 15 0 0 0 235 39L150,39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 150 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<path d="M250,55 L 258,55 Q 265,55 265,70 L 265,70 Q 265,85 273,85 L 280,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,85 295,89 295,81" style="fill:rgb(0,0,0)"/>
+<path d="M280,85L301,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,100L444,100L444,70L307,70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">cte-table-name</text>
+<polygon points="467,85 455,89 455,81" style="fill:rgb(0,0,0)"/>
+<path d="M444,85L461,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M482,100L486,100A15 15 0 0 0 501 85A15 15 0 0 0 486 70L482,70A15 15 0 0 0 467 85A15 15 0 0 0 482 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="542,17 531,21 531,12" style="fill:rgb(0,0,0)"/>
+<path d="M501,85 L 508,85 Q 516,85 516,70 L 516,32 Q 516,17 526,17 L 537,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,32L578,32A15 15 0 0 0 593 17L593,17A15 15 0 0 0 578 2L558,2A15 15 0 0 0 542 17L542,17A15 15 0 0 0 558 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="568" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M593,17L604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M625,32L743,32A15 15 0 0 0 759 17L759,17A15 15 0 0 0 743 2L625,2A15 15 0 0 0 610 17L610,17A15 15 0 0 0 625 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="684" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<polygon points="800,85 789,89 789,81" style="fill:rgb(0,0,0)"/>
+<path d="M759,17 L 766,17 Q 774,17 774,32 L 774,70 Q 774,85 784,85 L 794,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M815,100A15 15 0 0 0 830 85A15 15 0 0 0 815 70A15 15 0 0 0 800 85A15 15 0 0 0 815 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="815" y="85" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="853,85 842,89 842,81" style="fill:rgb(0,0,0)"/>
+<path d="M830,85L848,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M853,100L958,100L958,70L853,70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="905" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="981,85 969,89 969,81" style="fill:rgb(0,0,0)"/>
+<path d="M958,85L975,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M996,100A15 15 0 0 0 1011 85A15 15 0 0 0 996 70A15 15 0 0 0 981 85A15 15 0 0 0 996 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="996" y="85" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="1047,85 1035,89 1035,81" style="fill:rgb(0,0,0)"/>
+<path d="M1011,85L1041,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="1050" cy="85" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="542,56 531,60 531,52" style="fill:rgb(0,0,0)"/>
+<path d="M501,85 L 508,85 Q 516,85 516,70 Q 516,56 526,56 L 537,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,71L676,71A15 15 0 0 0 691 56A15 15 0 0 0 676 41L558,41A15 15 0 0 0 542 56A15 15 0 0 0 558 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<polygon points="759,56 747,60 747,52" style="fill:rgb(0,0,0)"/>
+<path d="M691,56L753,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,56 L 766,56 Q 774,56 774,64 L 774,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="617,85 605,89 605,81" style="fill:rgb(0,0,0)"/>
+<path d="M501,85L611,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M617,85L800,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M659,138A15 15 0 0 0 674 123L674,123A15 15 0 0 0 659 108A15 15 0 0 0 644 123L644,123A15 15 0 0 0 659 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="659" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="674,123 686,118 686,127" style="fill:rgb(0,0,0)"/>
+<path d="M1011,85 L 1018,85 Q 1026,85 1026,100 L 1026,108 Q 1026,123 1011,123 L 695,123 L 680,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,123 L 295,123 Q 280,123 280,108 L 280,100 Q 280,85 288,85 L 295,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,85L295,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/cte-table-name.html">cte-table-name:</a></b>
+<button id='x2259' onclick='hideorshow("x2259","x2260")'>show</button></p>
+ <div id='x2260' style='display:none;' class='imgcontainer'>
+ <div style="max-width:475px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 475.949 91.8">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,36 20,41 20,32" style="fill:rgb(0,0,0)"/>
+<path d="M9,36L26,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,51L122,51A15 15 0 0 0 137 36A15 15 0 0 0 122 21L47,21A15 15 0 0 0 32 36A15 15 0 0 0 47 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="173,36 162,41 162,32" style="fill:rgb(0,0,0)"/>
+<path d="M137,36L168,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M188,51A15 15 0 0 0 204 36A15 15 0 0 0 188 21A15 15 0 0 0 173 36A15 15 0 0 0 188 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="188" y="36" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="240,36 228,41 228,32" style="fill:rgb(0,0,0)"/>
+<path d="M204,36L234,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M255,51L349,51A15 15 0 0 0 364 36A15 15 0 0 0 349 21L255,21A15 15 0 0 0 240 36A15 15 0 0 0 255 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="400,36 388,41 388,32" style="fill:rgb(0,0,0)"/>
+<path d="M364,36L394,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,51A15 15 0 0 0 430 36A15 15 0 0 0 415 21A15 15 0 0 0 400 36A15 15 0 0 0 415 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="36" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="466,36 455,41 455,32" style="fill:rgb(0,0,0)"/>
+<path d="M430,36L460,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="470" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,89A15 15 0 0 0 317 74L317,74A15 15 0 0 0 302 59A15 15 0 0 0 287 74L287,74A15 15 0 0 0 302 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="317,74 328,70 328,78" style="fill:rgb(0,0,0)"/>
+<path d="M364,36 L 371,36 Q 379,36 379,51 L 379,59 Q 379,74 364,74 L 338,74 L 323,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,74 L 232,74 Q 217,74 217,59 L 217,51 Q 217,36 224,36 L 232,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="302,6 290,10 290,2" style="fill:rgb(0,0,0)"/>
+<path d="M137,36 L 145,36 Q 152,36 152,21 L 152,21 Q 152,6 167,6 L 281,6 L 296,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,6 L 422,6 Q 437,6 437,21 L 437,21 Q 437,36 445,36 L 452,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2261' onclick='hideorshow("x2261","x2262")'>show</button></p>
+ <div id='x2262' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x2263' onclick='hideorshow("x2263","x2264")'>show</button></p>
+ <div id='x2264' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2265' onclick='hideorshow("x2265","x2266")'>show</button></p>
+ <div id='x2266' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x2267' onclick='hideorshow("x2267","x2268")'>show</button></p>
+ <div id='x2268' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x2269' onclick='hideorshow("x2269","x2270")'>show</button></p>
+ <div id='x2270' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x2271' onclick='hideorshow("x2271","x2272")'>show</button></p>
+ <div id='x2272' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x2273' onclick='hideorshow("x2273","x2274")'>show</button></p>
+ <div id='x2274' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2275' onclick='hideorshow("x2275","x2276")'>show</button></p>
+ <div id='x2276' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x2277' onclick='hideorshow("x2277","x2278")'>show</button></p>
+ <div id='x2278' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x2279' onclick='hideorshow("x2279","x2280")'>show</button></p>
+ <div id='x2280' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x2281' onclick='hideorshow("x2281","x2282")'>show</button></p>
+ <div id='x2282' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2283' onclick='hideorshow("x2283","x2284")'>show</button></p>
+ <div id='x2284' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2285' onclick='hideorshow("x2285","x2286")'>show</button></p>
+ <div id='x2286' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2287' onclick='hideorshow("x2287","x2288")'>show</button></p>
+ <div id='x2288' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2289' onclick='hideorshow("x2289","x2290")'>show</button></p>
+ <div id='x2290' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2291' onclick='hideorshow("x2291","x2292")'>show</button></p>
+ <div id='x2292' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2293' onclick='hideorshow("x2293","x2294")'>show</button></p>
+ <div id='x2294' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2295' onclick='hideorshow("x2295","x2296")'>show</button></p>
+ <div id='x2296' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2297' onclick='hideorshow("x2297","x2298")'>show</button></p>
+ <div id='x2298' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+<p>Common Table Expressions or CTEs act like temporary <a href="lang_createview.html">views</a> that exist
+only for the duration of a single SQL statement. There are two kinds of
+common table expressions: "ordinary" and "recursive". Ordinary
+common table expressions are helpful for making
+queries easier to understand by factoring
+subqueries out of the main SQL statement.
+Recursive common table expressions
+provide the ability to do hierarchical or
+recursive queries of trees and graphs, a capability
+that is not otherwise available in the SQL language.
+
+</p><p>All common table expressions (ordinary and recursive) are
+created by prepending a WITH clause in front of a <a href="lang_select.html">SELECT</a>, <a href="lang_insert.html">INSERT</a>, <a href="lang_delete.html">DELETE</a>,
+or <a href="lang_update.html">UPDATE</a> statement. A single WITH clause can specify one or more
+common table expressions, some of which are ordinary and some of which
+are recursive.
+
+<a name="ordinarycte"></a>
+
+</p><h1 id="ordinary_common_table_expressions"><span>2. </span>Ordinary Common Table Expressions</h1>
+
+<p>An ordinary common table expression works as if it were a <a href="lang_createview.html">view</a> that
+exists for the duration of a single statement. Ordinary common table
+expressions are useful for factoring out subqueries and making the overall
+SQL statement easier to read and understand.
+
+</p><p>A WITH clause can contain ordinary common table expressions even if
+it includes the RECURSIVE keyword. The use of RECURSIVE does not force
+common table expressions to be recursive.
+
+<a name="recursivecte"></a>
+
+</p><h1 id="recursive_common_table_expressions"><span>3. </span>Recursive Common Table Expressions</h1>
+
+<p>A recursive common table expression can be used to write a query that
+walks a tree or graph. A recursive common table expression has the same
+basic syntax as an ordinary common table expression, but with the following
+additional attributes:
+
+</p><ol>
+<li> The "<a href="syntax/select-stmt.html">select-stmt</a>" must be a <a href="lang_select.html#compound">compound select</a>. That is to say,
+ the CTE body must be two or more individual SELECT statements
+ separated by compound operators like UNION, UNION ALL, INTERSECT,
+ or EXCEPT.
+</li><li> One or more of the individual SELECT statements that make up
+ the compound must be
+ "recursive". A SELECT statement is a recursive if
+ its FROM clause contains exactly one reference to the
+ the CTE table (the table named on the left-hand side of the
+ AS clause).
+</li><li> One or more of the SELECT statements in the compound must be
+ non-recursive.
+</li><li> All non-recursive SELECT statements must occur before any
+ recursive SELECT statements.
+</li><li> The recursive SELECT statements must be separated from the
+ non-recursive SELECT statements
+ and from each other by the UNION or UNION ALL operators.
+ If there are two or more recursive SELECT statements, they all must
+ be separated from each other using the same operator that separates
+ the first recursive SELECT from the last non-recursive SELECT statement.
+</li><li> Recursive SELECT statements may not use
+ <a href="lang_aggfunc.html">aggregate functions</a> or <a href="windowfunctions.html">window functions</a>.
+</li></ol>
+
+<p>To put it another way, a recursive common table expression must
+look something like the following:
+
+<p><b><a href="syntax/recursive-cte.html">recursive-cte:</a></b>
+<button id='x2299' onclick='hideorshow("x2299","x2300")'>hide</button></p>
+ <div id='x2300' class='imgcontainer'>
+ <div style="max-width:874px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 874.291 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L169,32L169,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="100" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">cte-table-name</text>
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M169,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L211,32A15 15 0 0 0 226 17A15 15 0 0 0 211 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="249,17 237,21 237,12" style="fill:rgb(0,0,0)"/>
+<path d="M226,17L243,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M264,32A15 15 0 0 0 279 17A15 15 0 0 0 264 2A15 15 0 0 0 249 17A15 15 0 0 0 264 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="302,17 291,21 291,12" style="fill:rgb(0,0,0)"/>
+<path d="M279,17L296,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,32L403,32A15 15 0 0 0 418 17A15 15 0 0 0 403 2L317,2A15 15 0 0 0 302 17A15 15 0 0 0 317 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">initial-select</text>
+<polygon points="459,55 448,59 448,50" style="fill:rgb(0,0,0)"/>
+<path d="M418,17 L 425,17 Q 433,17 433,32 L 433,40 Q 433,55 443,55 L 454,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M474,70L518,70A15 15 0 0 0 533 55L533,55A15 15 0 0 0 518 39L474,39A15 15 0 0 0 459 55L459,55A15 15 0 0 0 474 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="496" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<polygon points="556,55 545,59 545,50" style="fill:rgb(0,0,0)"/>
+<path d="M533,55L550,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M571,70L586,70A15 15 0 0 0 601 55L601,55A15 15 0 0 0 586 39L571,39A15 15 0 0 0 556 55L556,55A15 15 0 0 0 571 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="643,17 631,21 631,12" style="fill:rgb(0,0,0)"/>
+<path d="M601,55 L 609,55 Q 616,55 616,40 L 616,32 Q 616,17 627,17 L 637,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M658,32L773,32A15 15 0 0 0 788 17A15 15 0 0 0 773 2L658,2A15 15 0 0 0 643 17A15 15 0 0 0 658 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="715" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">recursive-select</text>
+<polygon points="811,17 800,21 800,12" style="fill:rgb(0,0,0)"/>
+<path d="M788,17L805,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M826,32A15 15 0 0 0 841 17A15 15 0 0 0 826 2A15 15 0 0 0 811 17A15 15 0 0 0 826 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="826" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="864,17 853,21 853,12" style="fill:rgb(0,0,0)"/>
+<path d="M841,17L859,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="868" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="459,17 448,21 448,12" style="fill:rgb(0,0,0)"/>
+<path d="M418,17L454,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M474,32L518,32A15 15 0 0 0 533 17A15 15 0 0 0 518 2L474,2A15 15 0 0 0 459 17A15 15 0 0 0 474 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="496" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M533,17L631,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/cte-table-name.html">cte-table-name:</a></b>
+<button id='x2301' onclick='hideorshow("x2301","x2302")'>show</button></p>
+ <div id='x2302' style='display:none;' class='imgcontainer'>
+ <div style="max-width:475px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 475.949 91.8">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,36 20,41 20,32" style="fill:rgb(0,0,0)"/>
+<path d="M9,36L26,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,51L122,51A15 15 0 0 0 137 36A15 15 0 0 0 122 21L47,21A15 15 0 0 0 32 36A15 15 0 0 0 47 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="173,36 162,41 162,32" style="fill:rgb(0,0,0)"/>
+<path d="M137,36L168,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M188,51A15 15 0 0 0 204 36A15 15 0 0 0 188 21A15 15 0 0 0 173 36A15 15 0 0 0 188 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="188" y="36" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="240,36 228,41 228,32" style="fill:rgb(0,0,0)"/>
+<path d="M204,36L234,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M255,51L349,51A15 15 0 0 0 364 36A15 15 0 0 0 349 21L255,21A15 15 0 0 0 240 36A15 15 0 0 0 255 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="400,36 388,41 388,32" style="fill:rgb(0,0,0)"/>
+<path d="M364,36L394,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,51A15 15 0 0 0 430 36A15 15 0 0 0 415 21A15 15 0 0 0 400 36A15 15 0 0 0 415 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="36" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="466,36 455,41 455,32" style="fill:rgb(0,0,0)"/>
+<path d="M430,36L460,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="470" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,89A15 15 0 0 0 317 74L317,74A15 15 0 0 0 302 59A15 15 0 0 0 287 74L287,74A15 15 0 0 0 302 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="317,74 328,70 328,78" style="fill:rgb(0,0,0)"/>
+<path d="M364,36 L 371,36 Q 379,36 379,51 L 379,59 Q 379,74 364,74 L 338,74 L 323,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,74 L 232,74 Q 217,74 217,59 L 217,51 Q 217,36 224,36 L 232,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="302,6 290,10 290,2" style="fill:rgb(0,0,0)"/>
+<path d="M137,36 L 145,36 Q 152,36 152,21 L 152,21 Q 152,6 167,6 L 281,6 L 296,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,6 L 422,6 Q 437,6 437,21 L 437,21 Q 437,36 445,36 L 452,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+
+
+</p><p>In the diagram above, <span class='yyterm'>initial-select</span> means one or more
+non-recursive SELECT statements and <span class='yyterm'>recursive-select</span> means
+one or more recursive SELECT statements. The most common case is for there
+to be exactly one <span class='yyterm'>initial-select</span> and exactly one
+<span class='yyterm'>recursive-select</span> but more than one of each is allowed.</p>
+
+<p>Call the table named by the <a href="syntax/cte-table-name.html">cte-table-name</a> in a recursive
+common table expression the "recursive table".
+In the <a href="syntax/recursive-cte.html">recursive-cte</a> bubble diagram above, the recursive
+table must appear exactly once in the FROM clause of each
+top-level SELECT statement in the <span class='yyterm'>recursive-select</span>
+and must not appear anywhere else in either the
+<span class='yyterm'>initial-select</span> or the
+<span class='yyterm'>recursive-select</span>, including subqueries.
+The <span class='yyterm'>initial-select</span> may be
+a <a href="lang_select.html#compound">compound select</a>, but it may not include an ORDER BY, LIMIT, or OFFSET.
+The <span class='yyterm'>recursive-select</span> may also be a <a href="lang_select.html#compound">compound select</a> with
+the restriction that all elements of that compound must be separated by
+the same UNION or UNION ALL operator that separates
+<span class='yyterm'>initial-select</span> from <span class='yyterm'>recursive-select</span>.
+The <span class='yyterm'>recursive-select</span> is allowed to include an
+ORDER BY, LIMIT, and/or OFFSET but may not use
+<a href="lang_aggfunc.html">aggregate functions</a> or <a href="windowfunctions.html">window functions</a>.
+
+</p><p>The ability for the <span class='yyterm'>recursive-select</span> to be a compound
+was added in <a href="releaselog/3_34_0.html">version 3.34.0</a> (2020-12-01). In earlier versions of
+SQLite, the <span class='yyterm'>recursive-select</span> could only be a single
+simple SELECT statement.</p>
+
+<p>The basic algorithm for computing the content of the recursive table
+is as follows:
+
+</p><ol>
+<li> Run the <span class='yyterm'>initial-select</span> and add the results to a queue.
+</li><li> While the queue is not empty:
+<ol type="a">
+<li> Extract a single row from the queue.
+</li><li> Insert that single row into the recursive table
+</li><li> Pretend that the single row just extracted is the only
+ row in the recursive table and run the recursive-select,
+ adding all results to the queue.
+</li></ol>
+</li></ol>
+
+<p>The basic procedure above may modified by the following additional rules:
+
+</p><ul>
+<li><p>
+ If a UNION operator connects the <span class='yyterm'>initial-select</span> with the
+ <span class='yyterm'>recursive-select</span>, then only add rows to the queue if
+ no identical row has
+ been previously added to the queue. Repeated rows are discarded before being
+ added to the queue even if the repeated rows have already been extracted
+ from the queue by the recursion step. If the operator is UNION ALL,
+ then all rows generated by both the <span class='yyterm'>initial-select</span> and the
+ <span class='yyterm'>recursive-select</span> are always added to the queue even if
+ they are repeats.
+ When determining if a row is repeated, NULL values compare
+ equal to one another and not equal to any other value.
+</p></li><li><p>
+ The LIMIT clause, if present, determines the maximum number of rows that
+ will ever be added to the recursive table in step 2b.
+ Once the limit is reached, the recursion stops.
+ A limit of zero means that no rows are ever added to the
+ recursive table, and a negative limit means an unlimited number of rows
+ may be added to the recursive table.
+</p></li><li><p>
+ The OFFSET clause, if it is present and has a positive value N, prevents the
+ first N rows from being added to the recursive table.
+ The first N rows are still processed
+ by the <span class='yyterm'>recursive-select</span> &mdash; they
+ just are not added to the recursive table. Rows are not counted toward
+ fulfilling the LIMIT until all OFFSET rows have been skipped.
+</p></li><li><p>
+ If an ORDER BY clause is present, it determines the order in which rows
+ are extracted from the queue in step 2a. If there is no ORDER BY clause,
+ then the order in which rows are extracted is undefined. (In the current
+ implementation, the queue becomes a FIFO if the ORDER BY clause is omitted,
+ but applications should not depend on that fact since it might change.)
+</p></li></ul>
+
+<a name="rcex1"></a>
+
+<h2 id="recursive_query_examples"><span>3.1. </span>Recursive Query Examples</h2>
+
+<p>The following query returns all integers between 1 and 1000000:
+
+</p><blockquote><pre>
+WITH RECURSIVE
+ cnt(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM cnt WHERE x&lt;1000000)
+SELECT x FROM cnt;
+</pre></blockquote>
+
+<p>Consider how this query works. The initial-select
+runs first and returns a single row
+with a single column "1". This one row is added to the queue. In
+step 2a, that one row is extracted from the queue and added to "cnt".
+Then the recursive-select is run in accordance with step 2c generating
+a single new row with value "2" to add to the queue. The queue still
+has one row, so step 2 repeats. The "2" row is extracted and added to the
+recursive table by steps 2a and 2b. Then the row containing 2 is used
+as if it were the complete content of the recursive table and the
+recursive-select is run again, resulting in a row with value "3" being added
+to the queue. This repeats 999999 times until finally at step 2a the
+only value on the queue is a row containing 1000000. That row is
+extracted and added to the recursive table. But this time, the
+WHERE clause causes the recursive-select to return no rows, so the
+queue remains empty and the recursion stops.
+
+</p><p><b>Optimization note:</b>
+In the discussion above, statements like "insert the row into
+the recursive table" should be understood conceptually, not literally.
+It sounds as if SQLite is accumulating a huge table
+containing one million rows, then going back and scanning that table
+from top to bottom to generate the result. What really happens
+is that the query optimizer sees that values in the
+"cnt" recursive table are only used once. So as each row is added to
+the recursive table, that row is immediately returned as a result of the main
+SELECT statement and then discarded. SQLite does <em>not</em> accumulate
+a temporary table containing a million rows. Very little memory is
+needed to run the above example. However, if the example had used
+UNION instead of UNION ALL, then SQLite would have had to keep around
+all previously generated content in order to check for duplicates.
+For this reason, programmers should strive to use UNION ALL instead
+of UNION when feasible.
+
+</p><p>Here is a variation on the previous example:
+
+</p><blockquote><pre>
+WITH RECURSIVE
+ cnt(x) AS (
+ SELECT 1
+ UNION ALL
+ SELECT x+1 FROM cnt
+ LIMIT 1000000
+ )
+SELECT x FROM cnt;
+</pre></blockquote>
+
+<p>There are two differences in this variation. The initial-select is
+"SELECT 1" instead of "VALUES(1)". But those are just different
+syntaxes for saying exactly the same thing. The other change is that the
+recursion is stopped by a LIMIT rather than a WHERE clause. The use of
+LIMIT means that when the one-millionth row is added to the "cnt" table
+(and returned by the main SELECT, thanks to the query optimizer)
+then the recursion stops immediately regardless of how many rows might be
+left in the queue. On more complex queries, it can sometimes be
+difficult to ensure that the WHERE clause will eventually cause the
+queue to drain and the recursion to terminate. But the LIMIT clause will
+always stop the recursion. So it is good practice to always include a
+LIMIT clause as a safety if an upper bound on the size of the recursion
+is known.
+
+<a name="rcex2"></a>
+
+</p><h2 id="hierarchical_query_examples"><span>3.2. </span>Hierarchical Query Examples</h2>
+
+<p>Consider a table that describes the members of an organization as
+well as the chain-of-command within that organization:
+
+</p><blockquote><pre>
+CREATE TABLE org(
+ name TEXT PRIMARY KEY,
+ boss TEXT REFERENCES org,
+ height INT,
+ -- other content omitted
+);
+</pre></blockquote>
+
+<p>Every member in the organization has a name, and most members have
+a single boss. (The head of the whole organization has a NULL
+"boss" field.) The rows of the "org" table form a tree.
+
+</p><p>Here is a query that computes the average height over everyone
+in Alice's organization, including Alice:
+
+</p><blockquote><pre>
+WITH RECURSIVE
+ works_for_alice(n) AS (
+ VALUES('Alice')
+ UNION
+ SELECT name FROM org, works_for_alice
+ WHERE org.boss=works_for_alice.n
+ )
+SELECT avg(height) FROM org
+ WHERE org.name IN works_for_alice;
+</pre></blockquote>
+
+<p>The next example uses two
+common table expressions in a single WITH clause.
+The following table records a family tree:
+
+</p><blockquote><pre>
+CREATE TABLE family(
+ name TEXT PRIMARY KEY,
+ mom TEXT REFERENCES family,
+ dad TEXT REFERENCES family,
+ born DATETIME,
+ died DATETIME, -- NULL if still alive
+ -- other content
+);
+</pre></blockquote>
+
+<p>The "family" table is similar to the earlier "org" table except that
+now there are two parents to each member.
+We want to know all living ancestors of Alice, from oldest to youngest.
+An ordinary common table expression, "parent_of", is defined first. That
+ordinary CTE is a view that can be used to find all parents of any
+individual. That ordinary CTE is then used in the "ancestor_of_alice"
+recursive CTE. The recursive CTE is then used in the final query:
+
+</p><blockquote><pre>
+WITH RECURSIVE
+ parent_of(name, parent) AS
+ (SELECT name, mom FROM family UNION SELECT name, dad FROM family),
+ ancestor_of_alice(name) AS
+ (SELECT parent FROM parent_of WHERE name='Alice'
+ UNION ALL
+ SELECT parent FROM parent_of JOIN ancestor_of_alice USING(name))
+SELECT family.name FROM ancestor_of_alice, family
+ WHERE ancestor_of_alice.name=family.name
+ AND died IS NULL
+ ORDER BY born;
+</pre></blockquote>
+
+<a name="rcex3"></a>
+
+<h2 id="queries_against_a_graph"><span>3.3. </span>Queries Against A Graph</h2>
+
+<p>Suppose you have an undirected graph where each node is
+identified by an integer and edges are defined by a table like
+this:
+
+</p><blockquote><pre>
+CREATE TABLE edge(aa INT, bb INT);
+CREATE INDEX edge_aa ON edge(aa);
+CREATE INDEX edge_bb ON edge(bb);
+</pre></blockquote>
+
+<p>The indexes are not required, but they do help performance
+for large graphs.
+To find all nodes of the graph that are connected to
+node 59, use a query similar to the following:
+
+</p><blockquote><pre>
+WITH RECURSIVE nodes(x) AS (
+ SELECT 59
+ UNION
+ SELECT aa FROM edge JOIN nodes ON bb=x
+ UNION
+ SELECT bb FROM edge JOIN nodes ON aa=x
+)
+SELECT x FROM nodes;
+</pre></blockquote>
+
+<p>
+The <span class='yyterm'>initial-select</span> in this case is the simple query
+"SELECT 59". This establishes the base case. The
+<span class='yyterm'>recursive-select</span> consists of the other two
+SELECT statements. The first recursive SELECT follows edges
+in the bb-to-aa direction and the second recursive SELECT follows
+edges in the aa-to-bb direction. UNION is used instead of
+UNION ALL to prevent the recursion from entering an infinite
+loop if the graph contains cycles.
+</p>
+
+<p>Here is a real-world example of using a graph query against a
+directed graph:
+A version control system (VCS) will typically store the evolving
+versions of a project as a directed acyclic graph (DAG). Call each
+version of the project a "checkin". A single
+checkin can have zero or more parents. Most checkins (except the
+first) have a single parent, but in the case of a merge, a checkin
+might have two or three or more parents. A schema to keep track of
+checkins and the order in which they occur might look something like
+this:
+
+</p><blockquote><pre>
+CREATE TABLE checkin(
+ id INTEGER PRIMARY KEY,
+ mtime INTEGER -- timestamp when this checkin occurred
+);
+CREATE TABLE derivedfrom(
+ xfrom INTEGER NOT NULL REFERENCES checkin, -- parent checkin
+ xto INTEGER NOT NULL REFERENCES checkin, -- derived checkin
+ PRIMARY KEY(xfrom,xto)
+);
+CREATE INDEX derivedfrom_back ON derivedfrom(xto,xfrom);
+</pre></blockquote>
+
+<p>This graph is acyclic. And we assume that the mtime of every
+child checkin is no less than the mtime of all its parents. But
+unlike the earlier examples, this graph might have multiple paths of
+differing lengths between any two checkins.
+
+</p><p>We want to know the twenty most recent ancestors in time (out of
+the thousands and thousands of ancestors in the whole DAG) for
+checkin "@BASELINE". (A query similar to this is used
+by the <a href="http://www.fossil-scm.org/">Fossil</a> VCS to
+show the N most recent ancestors of a checkin. For example:
+<a href="http://www.sqlite.org/src/timeline?p=trunk&n=30">http://www.sqlite.org/src/timeline?p=trunk&n=30</a>.)
+
+</p><blockquote><pre>
+WITH RECURSIVE
+ ancestor(id,mtime) AS (
+ SELECT id, mtime FROM checkin WHERE id=@BASELINE
+ UNION
+ SELECT derivedfrom.xfrom, checkin.mtime
+ FROM ancestor, derivedfrom, checkin
+ WHERE ancestor.id=derivedfrom.xto
+ AND checkin.id=derivedfrom.xfrom
+ ORDER BY checkin.mtime DESC
+ LIMIT 20
+ )
+SELECT * FROM checkin JOIN ancestor USING(id);
+</pre></blockquote>
+
+<p>
+The "ORDER BY checkin.mtime DESC" term in the recursive-select makes
+the query run much faster by preventing it from following
+branches that merge checkins
+from long ago. The ORDER BY forces the recursive-select to focus
+on the most recent checkins, the ones we want. Without the ORDER BY
+on the recursive-select, one would be forced to compute the complete set of
+thousands of ancestors, sort them all by mtime, then take the top twenty.
+The ORDER BY essentially sets up a priority queue that
+forces the recursive query to look at the most recent ancestors first,
+allowing the use of a LIMIT clause to restrict the scope of the
+query to just the checkins of interest.
+
+<a name="withorderby"></a>
+
+</p><h2 id="controlling_depth_first_versus_breadth_first_search_of_a_tree_using_order_by"><span>3.4. </span>Controlling Depth-First Versus Breadth-First Search Of a Tree
+Using ORDER BY</h2>
+
+<p>An ORDER BY clause on the recursive-select can be used to control
+whether the search of a tree is depth-first or breadth-first. To
+illustrate, we will use a variation on the "org" table from an example
+above, without the "height" column, and with some real data inserted:
+
+</p><blockquote><pre>
+CREATE TABLE org(
+ name TEXT PRIMARY KEY,
+ boss TEXT REFERENCES org
+) WITHOUT ROWID;
+INSERT INTO org VALUES('Alice',NULL);
+INSERT INTO org VALUES('Bob','Alice');
+INSERT INTO org VALUES('Cindy','Alice');
+INSERT INTO org VALUES('Dave','Bob');
+INSERT INTO org VALUES('Emma','Bob');
+INSERT INTO org VALUES('Fred','Cindy');
+INSERT INTO org VALUES('Gail','Cindy');
+</pre></blockquote>
+
+<p>Here is a query to show the tree structure in a breadth-first pattern:
+
+</p><blockquote><pre>
+WITH RECURSIVE
+ under_alice(name,level) AS (
+ VALUES('Alice',0)
+ UNION ALL
+ SELECT org.name, under_alice.level+1
+ FROM org JOIN under_alice ON org.boss=under_alice.name
+ ORDER BY 2
+ )
+SELECT substr('..........',1,level*3) || name FROM under_alice;
+</pre></blockquote>
+
+<p>The "ORDER BY 2" (which means the same as "ORDER BY under_alice.level+1")
+causes higher levels in the organization chart (with smaller "level" values)
+to be processed first, resulting in a breadth-first search. The output is:
+
+</p><blockquote><pre>
+Alice
+...Bob
+...Cindy
+......Dave
+......Emma
+......Fred
+......Gail
+</pre></blockquote>
+
+<p>But if we change the ORDER BY clause to add the "DESC" modifier, that will
+cause lower levels in the organization (with larger "level" values) to be
+processed first by the recursive-select, resulting in a depth-first search:
+
+</p><blockquote><pre>
+WITH RECURSIVE
+ under_alice(name,level) AS (
+ VALUES('Alice',0)
+ UNION ALL
+ SELECT org.name, under_alice.level+1
+ FROM org JOIN under_alice ON org.boss=under_alice.name
+ ORDER BY 2 <b>DESC</b>
+ )
+SELECT substr('..........',1,level*3) || name FROM under_alice;
+</pre></blockquote>
+
+<p>The output of this revised query is:
+
+</p><blockquote><pre>
+Alice
+...Bob
+......Dave
+......Emma
+...Cindy
+......Fred
+......Gail
+</pre></blockquote>
+
+<p>When the ORDER BY clause is omitted from the recursive-select, the
+queue behaves as a FIFO, which results in a breadth-first search.
+
+
+<a name="mandelbrot"></a>
+
+</p><h2 id="outlandish_recursive_query_examples"><span>3.5. </span>Outlandish Recursive Query Examples</h2>
+
+<p>The following query computes an approximation of the Mandelbrot Set
+and outputs the result as ASCII-art:
+
+</p><blockquote><pre>
+WITH RECURSIVE
+ xaxis(x) AS (VALUES(-2.0) UNION ALL SELECT x+0.05 FROM xaxis WHERE x&lt;1.2),
+ yaxis(y) AS (VALUES(-1.0) UNION ALL SELECT y+0.1 FROM yaxis WHERE y&lt;1.0),
+ m(iter, cx, cy, x, y) AS (
+ SELECT 0, x, y, 0.0, 0.0 FROM xaxis, yaxis
+ UNION ALL
+ SELECT iter+1, cx, cy, x*x-y*y + cx, 2.0*x*y + cy FROM m
+ WHERE (x*x + y*y) &lt; 4.0 AND iter&lt;28
+ ),
+ m2(iter, cx, cy) AS (
+ SELECT max(iter), cx, cy FROM m GROUP BY cx, cy
+ ),
+ a(t) AS (
+ SELECT group_concat( substr(' .+*#', 1+min(iter/7,4), 1), '')
+ FROM m2 GROUP BY cy
+ )
+SELECT group_concat(rtrim(t),x'0a') FROM a;
+</pre></blockquote>
+
+<p>In this query, the "xaxis" and "yaxis" CTEs define the grid of points for
+which the Mandelbrot Set will be approximated. Each row in the
+"m(iter,cx,cy,x,y)" CTE means that after "iter" iterations, the Mandelbrot
+iteration starting at cx,cy has reached point x,y. The number of iterations
+in this example is limited to 28 (which severely limits the resolution of
+the computation, but is sufficient for low-resolution ASCII-art output).
+The "m2(iter,cx,cy)" CTE holds the maximum number of iterations reached when
+starting at point cx,cy.
+Finally, each row in the "a(t)" CTE holds a string
+which is a single line of the output ASCII-art.
+The SELECT statement at the end just queries the "a" CTE to
+retrieve all lines of ASCII-art, one by one.
+
+</p><p>Running the query above in an SQLite <a href="cli.html">command-line shell</a> results
+in the following output:
+
+</p><blockquote><pre>
+ ....#
+ ..#*..
+ ..+####+.
+ .......+####.... +
+ ..##+*##########+.++++
+ .+.##################+.
+ .............+###################+.+
+ ..++..#.....*#####################+.
+ ...+#######++#######################.
+ ....+*################################.
+ #############################################...
+ ....+*################################.
+ ...+#######++#######################.
+ ..++..#.....*#####################+.
+ .............+###################+.+
+ .+.##################+.
+ ..##+*##########+.++++
+ .......+####.... +
+ ..+####+.
+ ..#*..
+ ....#
+ +.
+</pre></blockquote>
+
+<a name="sudoku"></a>
+
+<p>This next query solves a Sudoku puzzle. The state of the puzzle is
+defined by an 81-character string formed by reading entries from the
+puzzle box row by row from left to right and then from top to bottom.
+Blank squares in the puzzle are denoted by a "." character.
+Thus the input string:
+
+</p><blockquote>
+53..7....6..195....98....6.8...6...34..8.3..17...2...6.6....28....419..5....8..79
+</blockquote>
+
+<p>Corresponds to a puzzle like this:
+
+</p><blockquote>
+<table border="1" cellpadding="5">
+<tr><td>5</td><td>3</td><td> </td><td> </td><td>7</td><td> </td><td> </td><td> </td><td>
+</td></tr><tr><td>6</td><td> </td><td> </td><td>1</td><td>9</td><td>5</td><td> </td><td> </td><td>
+</td></tr><tr><td> </td><td>9</td><td>8</td><td> </td><td> </td><td> </td><td> </td><td>6</td><td>
+</td></tr><tr><td>8</td><td> </td><td> </td><td> </td><td>6</td><td> </td><td> </td><td> </td><td>3
+</td></tr><tr><td>4</td><td> </td><td> </td><td>8</td><td> </td><td>3</td><td> </td><td> </td><td>1
+</td></tr><tr><td>7</td><td> </td><td> </td><td> </td><td>2</td><td> </td><td> </td><td> </td><td>6
+</td></tr><tr><td> </td><td>6</td><td> </td><td> </td><td> </td><td> </td><td>2</td><td>8</td><td>
+</td></tr><tr><td> </td><td> </td><td> </td><td>4</td><td>1</td><td>9</td><td> </td><td> </td><td>5
+</td></tr><tr><td> </td><td> </td><td> </td><td> </td><td>8</td><td> </td><td> </td><td>7</td><td>9
+</td></tr></table>
+</blockquote>
+
+<p>This is the query that solves the puzzle:
+
+</p><blockquote><pre>
+WITH RECURSIVE
+ input(sud) AS (
+ VALUES('53..7....6..195....98....6.8...6...34..8.3..17...2...6.6....28....419..5....8..79')
+ ),
+ digits(z, lp) AS (
+ VALUES('1', 1)
+ UNION ALL SELECT
+ CAST(lp+1 AS TEXT), lp+1 FROM digits WHERE lp&lt;9
+ ),
+ x(s, ind) AS (
+ SELECT sud, instr(sud, '.') FROM input
+ UNION ALL
+ SELECT
+ substr(s, 1, ind-1) || z || substr(s, ind+1),
+ instr( substr(s, 1, ind-1) || z || substr(s, ind+1), '.' )
+ FROM x, digits AS z
+ WHERE ind>0
+ AND NOT EXISTS (
+ SELECT 1
+ FROM digits AS lp
+ WHERE z.z = substr(s, ((ind-1)/9)*9 + lp, 1)
+ OR z.z = substr(s, ((ind-1)%9) + (lp-1)*9 + 1, 1)
+ OR z.z = substr(s, (((ind-1)/3) % 3) * 3
+ + ((ind-1)/27) * 27 + lp
+ + ((lp-1) / 3) * 6, 1)
+ )
+ )
+SELECT s FROM x WHERE ind=0;
+</pre></blockquote>
+
+<p>The "input" CTE defines the input puzzle.
+The "digits" CTE defines a table that holds all digits between 1 and 9.
+The work of solving the puzzle is undertaken by the "x" CTE.
+An entry in x(s,ind) means that the 81-character string "s" is a valid
+sudoku puzzle (it has no conflicts) and that the first unknown character
+is at position "ind", or ind==0 if all character positions are filled in.
+The goal, then, is to compute entries for "x" with an "ind" of 0.
+
+</p><p>The solver works by adding new entries to the "x" recursive table.
+Given prior entries, the recursive-select tries to fill in a single new
+position with all values between 1 and 9 that actually work in that
+position. The complicated "NOT EXISTS" subquery is the magic that
+figures out whether or not each candidate "s" string is a valid
+sudoku puzzle or not.
+
+</p><p>The final answer is found by looking for a string with ind==0.
+If the original sudoku problem did not have a unique solution, then
+the query will return all possible solutions. If the original problem
+was unsolvable, then no rows will be returned. In this case, the unique
+answer is:
+
+</p><blockquote>
+534678912672195348198342567859761423426853791713924856961537284287419635345286179
+</blockquote>
+
+<p>The solution was computed in less than 300 milliseconds on a modern
+workstation.
+
+<a name="mathint"></a>
+
+</p><h1 id="materialization_hints"><span>4. </span>Materialization Hints</h1>
+
+<p>
+The "AS MATERIALIZED" and "AS NOT MATERIALIZED" forms of a common table expression
+are non-standard SQL syntax copied from PostgreSQL. Using MATERIALIZED or
+NOT MATERIALIZED after the AS keyword provides non-binding hints to the query
+planner about how the CTE should be implemented.
+
+</p><p>
+If the MATERIALIZED phrase is used, then <span class='yynonterm'>select-stmt</span> is
+likely evaluated to generate an ephemeral table that is held in memory or a
+temporary disk file, to be used in place of the
+CTE table name whenever that table name appears in the subsequent SQL.
+Because the <span class='yynonterm'>select-stmt</span> is evaluated immediately,
+the opportunity to apply optimizations such as
+<a href="optoverview.html#flattening">query flattening</a> or the <a href="optoverview.html#pushdown">push-down optimization</a>, is lost.
+(The CTE then acts as an "optimization fence".)
+
+</p><p>
+If the NOT MATERIALIZED phrase is used, then <span class='yynonterm'>select-stmt</span>
+is substituted as a subquery in place of every occurrence of the CTE
+table name. Optimizations such as <a href="optoverview.html#flattening">flattening</a> and
+<a href="optoverview.html#pushdown">push-down</a> are then applied to the subquery as if
+the subquery had by used in directly. In spite of its name, the NOT MATERIALIZED
+phrase does not prohibit the use of materialization. The query planner
+is still free to implement the subquery using materialization if
+it feels that is the best solution. The true meaning of NOT MATERIALIZED
+is closer to "TREAT LIKE ANY ORDINARY VIEW OR SUBQUERY".
+
+</p><p>
+If neither hint is present, then SQLite 3.35.0 (2021-03-12) and
+later process the CTE as if the MATERIALIZED phrase were present if the
+CTE is used more than once, or as if the NOT MATERIALIZED phrase were
+present if the CTE is used only once. Prior to SQLite 3.35.0, all
+CTEs where treated as if the NOT MATERIALIZED phrase was present.
+The decision of whether to treat a specific CTE as MATERIALIZED or
+as NOT MATERIALIZED based on the number of uses is a heuristic that
+is subject to change in future releases, if we come up with a better
+query planning strategy. The difference is purely a matter of
+performance. Equivalent answers should be computed either way.
+
+</p><p>
+Applications should not depend upon the semantic effects of this hint
+with respect to when or how often user-defined functions are called.
+Future versions of the query planner may disregard this hint.
+
+</p><p>
+The MATERIALIZED and NOT MATERIALIZED hints are only available in
+SQLite version 3.35.0 (2021-03-12) and later.
+
+</p><h1 id="limitations_and_caveats"><span>5. </span>Limitations And Caveats</h1>
+
+<ul>
+<li><p>
+The WITH clause cannot be used within a <a href="lang_createtrigger.html">CREATE TRIGGER</a>.
+</p></li><li><p>
+The WITH clause must appear at the beginning of a top-level <a href="lang_select.html">SELECT</a> statement
+or at the beginning of a subquery. The WITH clause cannot be prepended to
+the second or subsequent SELECT statement of a <a href="lang_select.html#compound">compound select</a>.
+</p></li><li><p>
+The SQL:1999 spec requires that the RECURSIVE keyword follow WITH in any
+WITH clause that includes a recursive common table expression. However, for
+compatibility with SqlServer and Oracle, SQLite does not enforce this rule.
+</p></li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lang_with.in?m=b11c4b9e6087ba2a2">2022-01-17 12:21:35</a> UTC </small></i></p>
+
diff --git a/www/lemon.html b/www/lemon.html
new file mode 100644
index 0000000..30bdb8d
--- /dev/null
+++ b/www/lemon.html
@@ -0,0 +1,295 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Lemon LALR(1) Parser Generator</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Lemon LALR(1) Parser Generator
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc2"><a href="#lemon_source_files_and_documentation">1.1. Lemon Source Files And Documentation</a></div>
+<div class="fancy-toc1"><a href="#advantages_of_lemon">2. Advantages of Lemon</a></div>
+<div class="fancy-toc2"><a href="#use_of_lemon_within_sqlite">2.1. Use of Lemon Within SQLite</a></div>
+<div class="fancy-toc2"><a href="#lemon_customizations_especially_for_sqlite">2.2. Lemon Customizations Especially For SQLite</a></div>
+<div class="fancy-toc1"><a href="#history_of_lemon">3. History Of Lemon</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>The SQL language parser for SQLite is generated using a code-generator
+program called "Lemon". The Lemon program reads a grammar of the input
+language and emits C-code to implement a parser for that language.
+
+
+</p><h2 id="lemon_source_files_and_documentation"><span>1.1. </span>Lemon Source Files And Documentation</h2>
+
+<p>Lemon does not have its own source repository. Rather, Lemon consists
+of a few files in the SQLite source tree:
+
+</p><ul>
+<li><p>
+ <a href="https://sqlite.org/src/doc/trunk/doc/lemon.html">lemon.html</a> &rarr;
+ The original detailed usage documentation and programmers reference
+ for Lemon.
+</p></li><li><p>
+ <a href="https://sqlite.org/src/file/tool/lemon.c">lemon.c</a> &rarr; The source code
+ for the utility program that reads a grammar file and generates
+ corresponding parser C-code.
+</p></li><li><p>
+ <a href="https://sqlite.org/src/file/tool/lempar.c">lempar.c</a> &rarr; A template
+ for the generated parser C-code. The "lemon" utility program reads this
+ template and inserts additional code in order to generate a parser.
+</p></li></ul>
+
+<h1 id="advantages_of_lemon"><span>2. </span>Advantages of Lemon</h1>
+
+<p>Lemon generates an LALR(1) parser. Its operation is similar to the
+more familiar tools <a href="https://en.wikipedia.org/wiki/Yacc">Yacc</a> and
+<a href="https://en.wikipedia.org/wiki/GNU_bison">Bison</a>, but Lemon adds important
+improvements, including:
+
+</p><ul>
+<li><p>
+ The grammar syntax is less error prone - using symbolic names for
+ semantic values rather that the "$1"-style positional notation
+ of Yacc.
+</p></li><li><p>
+ In Lemon, the tokenizer calls the parser. Yacc operates the other
+ way around, with the parser calling the tokenizer. The Lemon
+ approach is reentrant and threadsafe, whereas Yacc uses global
+ variables and is therefore neither. Reentrancy is especially
+ important for SQLite since some SQL statements make recursive calls
+ to the parser. For example, when parsing a CREATE TABLE statement,
+ SQLite invokes the parser recursively to generate an INSERT statement
+ to make a new entry in the <a href="schematab.html">sqlite_schema</a> table.
+</p></li><li><p>
+ Lemon has the concept of a non-terminal destructor that can be
+ used to reclaim memory or other resources following a syntax error
+ or other aborted parse.
+</p></li></ul>
+
+<h2 id="use_of_lemon_within_sqlite"><span>2.1. </span>Use of Lemon Within SQLite</h2>
+
+<p>Lemon is used in two places in SQLite.
+
+</p><p>The primary use of Lemon is to create the SQL language parser.
+A grammar file (<a href="https://sqlite.org/src/file/src/parse.y">parse.y</a>) is
+compiled by Lemon into parse.c and parse.h. The parse.c file is
+incorporated into the <a href="amalgamation.html">amalgamation</a> without further modification.
+
+</p><p>Lemon is also used to generate the parser for the query pattern
+expressions in the <a href="fts5.html">FTS5</a> extension. In this case, the input grammar
+file is <a href="https://sqlite.org/src/file/ext/fts5/fts5parse.y">fts5parse.y</a>.
+
+</p><h2 id="lemon_customizations_especially_for_sqlite"><span>2.2. </span>Lemon Customizations Especially For SQLite</h2>
+
+<p>One of the advantages of hosting code generator tools as part of
+the project is that the tools can be optimized to serve specific needs of
+the overall project. Lemon has benefited from this effect. Over the years,
+the Lemon parser generator has been extended and enhanced to provide
+new capabilities and improved performance to SQLite. A few of the
+specific enhancements to Lemon that are specifically designed for use
+by SQLite include:
+
+</p><ul>
+<li><p>
+Lemon has the concept of a "fallback" token.
+The SQL language contains a large number of keywords and these keywords
+have the potential to collide with identifier names.
+Lemon has the ability to designate some keywords as being able to
+"fallback" to an identifier. If the keyword appears in the input token
+stream in a context that would otherwise be a syntax error, the token
+is automatically transformed into its fallback before the syntax error
+is raised. This feature allows the parser to be very forgiving of
+reserved words used as identifiers, which is a problem that comes up
+frequently in the SQL language.
+
+</p></li><li><p>
+In support of the <a href="testing.html#mcdc">100% MC/DC testing</a> goal for SQLite,
+the parser code generated by Lemon has no unreachable branches,
+and contains extra (compile-time selected) instrumentation useful
+for measuring test coverage.
+
+</p></li><li><p>
+Lemon supports conditional compilation of grammar file rules, so that
+a different parser can be generated depending on compile-time options.
+
+</p></li><li><p>
+As a performance optimization, reduce actions in the Lemon input grammar
+are allowed to contain comments of the form "/*A-overwrites-Z*/" to indicate
+that the semantic value "A" on the right-hand side of the rule is allowed
+to directly overwrite the semantic value "Z" on the left-hand side.
+This simple optimization reduces the number of stack operations in the
+push-down automaton used to parse the input grammar, and thus improve
+performance of the parser. It also makes the generated code a little smaller.
+</p></li></ul>
+
+<p>The parsing of SQL statements is a significant consumer of CPU cycles
+in any SQL database engine. On-going efforts to optimize SQLite have caused
+the developers to spend a lot of time tweaking Lemon to generate faster
+parsers. These efforts have benefited all users of the Lemon parser generator,
+not just SQLite. But if Lemon had been a separately maintained tool, it
+would have been more difficult to make coordinated changes to both SQLite
+and Lemon, and as a result not as much optimization would have been
+accomplished. Hence, the fact that the parser generator tool is included
+in the source tree for SQLite has turned out to be a net benefit for both
+the tool itself and for SQLite.
+
+</p><h1 id="history_of_lemon"><span>3. </span>History Of Lemon</h1>
+
+<p>Lemon was originally written by D. Richard Hipp (also the creator of SQLite)
+while he was in graduate school at Duke University between 1987 and 1992.
+The original creation date of Lemon has been lost, but was probably sometime
+around 1990. Lemon generates an LALR(1) parser. There was a companion
+LL(1) parser generator tool named "Lime", but the source code for Lime
+has been lost.
+
+</p><p>The Lemon source code was originally written as separate source files,
+and only later merged into a single "lemon.c" source file.
+
+</p><p>The author of Lemon and SQLite (Hipp) reports that his C programming
+skills were greatly enhanced by studying John Ousterhout's original
+source code to Tcl. Hipp discovered and studied Tcl in 1993. Lemon
+was written before then, and SQLite afterwards. There is a clear
+difference in the coding styles of these two products, with SQLite seeming
+to be cleaner, more readable, and easier to maintain.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lemon.in?m=b11f8f15fdaf8c816">2021-08-21 20:50:48</a> UTC </small></i></p>
+
diff --git a/www/limits.html b/www/limits.html
new file mode 100644
index 0000000..32d3c5c
--- /dev/null
+++ b/www/limits.html
@@ -0,0 +1,535 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Implementation Limits For SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h2>Limits In SQLite</h2>
+
+<p>
+"Limits" in the context of this article means sizes or
+quantities that can not be exceeded. We are concerned
+with things like the maximum number of bytes in a
+BLOB or the maximum number of columns in a table.
+</p>
+
+<p>
+SQLite was originally designed with a policy of avoiding
+arbitrary limits.
+Of course, every program that runs on a machine with finite
+memory and disk space has limits of some kind. But in SQLite,
+those limits
+were not well defined. The policy was that if it would fit
+in memory and you could count it with a 32-bit integer, then
+it should work.
+</p>
+
+<p>
+Unfortunately, the no-limits policy has been shown to create
+problems. Because the upper bounds were not well
+defined, they were not tested, and bugs were often found
+when pushing SQLite to extremes. For this reason, versions
+of SQLite since about release 3.5.8 (2008-04-16)
+have well-defined limits, and those limits are tested as part of
+the <a href="testing.html">test suite</a>.
+</p>
+
+<p>
+This article defines what the limits of SQLite are and how they
+can be customized for specific applications. The default settings
+for limits are normally quite large and adequate for almost every
+application. Some applications may want to increase a limit here
+or there, but we expect such needs to be rare. More commonly,
+an application might want to recompile SQLite with much lower
+limits to avoid excess resource utilization in the event of
+bug in higher-level SQL statement generators or to help thwart
+attackers who inject malicious SQL statements.
+</p>
+
+<p>
+Some limits can be changed at run-time on a per-connection basis
+using the <a href="c3ref/limit.html">sqlite3_limit()</a> interface with one of the
+<a href="c3ref/c_limit_attached.html#sqlitelimitlength">limit categories</a> defined for that interface.
+Run-time limits are designed for applications that have multiple
+databases, some of which are for internal use only and others which
+can be influenced or controlled by potentially hostile external agents.
+For example, a web browser application might use an internal database
+to track historical page views but have one or more separate databases
+that are created and controlled by javascript applications that are
+downloaded from the internet.
+The <a href="c3ref/limit.html">sqlite3_limit()</a> interface allows internal databases managed by
+trusted code to be unconstrained while simultaneously placing tight
+limitations on databases created or controlled by untrusted external
+code in order to help prevent a denial of service attack.
+</p>
+
+
+<ol>
+<a name="max_length"></a>
+<li><p><b>Maximum length of a string or BLOB</b></p>
+
+<p>
+The maximum number of bytes in a string or BLOB in SQLite is defined
+by the preprocessor macro SQLITE_MAX_LENGTH. The default value
+of this macro is 1 billion (1 thousand million or 1,000,000,000).
+You can raise or lower this value at compile-time using a command-line
+option like this:
+</p>
+
+<blockquote>-DSQLITE_MAX_LENGTH=123456789</blockquote>
+
+<p>
+The current implementation will only support a string or BLOB
+length up to 2<small><sup>31</sup></small>-1 or 2147483647. And
+some built-in functions such as hex() might fail well before that
+point. In security-sensitive applications it is best not to
+try to increase the maximum string and blob length. In fact,
+you might do well to lower the maximum string and blob length
+to something more in the range of a few million if that is
+possible.
+</p>
+
+<p>
+During part of SQLite's INSERT and SELECT processing, the complete
+content of each row in the database is encoded as a single BLOB.
+So the SQLITE_MAX_LENGTH parameter also determines the maximum
+number of bytes in a row.
+</p>
+
+<p>
+The maximum string or BLOB length can be lowered at run-time using
+the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a>,size) interface.
+</p>
+</li><a name="max_column"></a>
+<li><p><b>Maximum Number Of Columns</b></p>
+
+<p>
+The SQLITE_MAX_COLUMN compile-time parameter is used to set an upper
+bound on:
+</p>
+
+<ul>
+<li>The number of columns in a table</li>
+<li>The number of columns in an index</li>
+<li>The number of columns in a view</li>
+<li>The number of terms in the SET clause of an UPDATE statement</li>
+<li>The number of columns in the result set of a SELECT statement</li>
+<li>The number of terms in a GROUP BY or ORDER BY clause</li>
+<li>The number of values in an INSERT statement</li>
+</ul>
+
+<p>
+The default setting for SQLITE_MAX_COLUMN is 2000. You can change it
+at compile time to values as large as 32767. On the other hand, many
+experienced database designers will argue that a well-normalized database
+will never need more than 100 columns in a table.
+</p>
+
+<p>
+In most applications, the number of columns is small - a few dozen.
+There are places in the SQLite code generator that use algorithms
+that are O(N&sup2;) where N is the number of columns.
+So if you redefine SQLITE_MAX_COLUMN to be a
+really huge number and you generate SQL that uses a large number of
+columns, you may find that <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
+runs slowly.</p>
+
+
+<p>
+The maximum number of columns can be lowered at run-time using
+the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitcolumn">SQLITE_LIMIT_COLUMN</a>,size) interface.
+</p>
+
+</li><a name="max_sql_length"></a>
+<li><p><b>Maximum Length Of An SQL Statement</b></p>
+
+<p>
+The maximum number of bytes in the text of an SQL statement is
+limited to SQLITE_MAX_SQL_LENGTH which defaults to 1,000,000,000.
+</p>
+
+<p>
+If an SQL statement is limited to be a million bytes in length, then
+obviously you will not be able to insert multi-million byte strings
+by embedding them as literals inside of INSERT statements. But
+you should not do that anyway. Use host <a href="lang_expr.html#varparam">parameters</a>
+for your data. Prepare short SQL statements like this:
+</p>
+
+<blockquote>
+INSERT INTO tab1 VALUES(?,?,?);
+</blockquote>
+
+<p>
+Then use the <a href="c3ref/bind_blob.html">sqlite3_bind_XXXX()</a> functions
+to bind your large string values to the SQL statement. The use of binding
+obviates the need to escape quote characters in the string, reducing the
+risk of SQL injection attacks. It also runs faster since the large
+string does not need to be parsed or copied as much.
+</p>
+
+<p>
+The maximum length of an SQL statement can be lowered at run-time using
+the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitsqllength">SQLITE_LIMIT_SQL_LENGTH</a>,size) interface.
+</p>
+</li><li><p><b>Maximum Number Of Tables In A Join</b></p>
+
+<p>
+SQLite does not support joins containing more than 64 tables.
+This limit arises from the fact that the SQLite code generator
+uses bitmaps with one bit per join-table in the query optimizer.
+</p>
+
+<p>
+SQLite uses an efficient <a href="queryplanner-ng.html">query planner algorithm</a>
+and so even a large join can be <a href="c3ref/prepare.html">prepared</a> quickly.
+Hence, there is no mechanism to raise or lower the limit on the
+number of tables in a join.
+</p>
+</li><a name="max_expr_depth"></a>
+<li><p><b>Maximum Depth Of An Expression Tree</b></p>
+
+<p>
+SQLite parses expressions into a tree for processing. During
+code generation, SQLite walks this tree recursively. The depth
+of expression trees is therefore limited in order to avoid
+using too much stack space.
+</p>
+
+<p>
+The SQLITE_MAX_EXPR_DEPTH parameter determines the maximum expression
+tree depth. If the value is 0, then no limit is enforced. The
+current implementation has a default value of 1000.
+</p>
+
+<p>
+The maximum depth of an expression tree can be lowered at run-time using
+the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitexprdepth">SQLITE_LIMIT_EXPR_DEPTH</a>,size) interface if the
+SQLITE_MAX_EXPR_DEPTH is initially positive. In other words, the maximum
+expression depth can be lowered at run-time if there is already a
+compile-time limit on the expression depth. If SQLITE_MAX_EXPR_DEPTH is
+set to 0 at compile time (if the depth of expressions is unlimited) then
+the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitexprdepth">SQLITE_LIMIT_EXPR_DEPTH</a>,size) is a no-op.
+</p>
+
+
+</li><a name="max_function_arg"></a>
+<li><p><b>Maximum Number Of Arguments On A Function</b></p>
+
+<p>
+The SQLITE_MAX_FUNCTION_ARG parameter determines the maximum number
+of parameters that can be passed to an SQL function. The default value
+of this limit is 100. SQLite should work with functions that have
+thousands of parameters. However, we suspect that anybody who tries
+to invoke a function with more than a few parameters is really
+trying to find security exploits in systems that use SQLite,
+not do useful work,
+and so for that reason we have set this parameter relatively low.</p>
+
+<p>The number of arguments to a function is sometimes stored in a signed
+character. So there is a hard upper bound on SQLITE_MAX_FUNCTION_ARG
+of 127.</p>
+
+<p>
+The maximum number of arguments in a function can be lowered at run-time using
+the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitfunctionarg">SQLITE_LIMIT_FUNCTION_ARG</a>,size) interface.
+</p>
+</li><a name="max_compound_select"></a>
+<li><p><b>Maximum Number Of Terms In A Compound SELECT Statement</b></p>
+
+<p>
+A compound <a href="lang_select.html">SELECT</a> statement is two or more SELECT statements connected
+by operators UNION, UNION ALL, EXCEPT, or INTERSECT. We call each
+individual SELECT statement within a compound SELECT a "term".
+</p>
+
+<p>
+The code generator in SQLite processes compound SELECT statements using
+a recursive algorithm. In order to limit the size of the stack, we
+therefore limit the number of terms in a compound SELECT. The maximum
+number of terms is SQLITE_MAX_COMPOUND_SELECT which defaults to 500.
+We think this is a generous allotment since in practice we almost
+never see the number of terms in a compound select exceed single digits.
+</p>
+
+<p>
+The maximum number of compound SELECT terms can be lowered at run-time using
+the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a>,size) interface.
+</p>
+
+
+</li><a name="max_like_pattern_length"></a>
+<li><p><b>Maximum Length Of A LIKE Or GLOB Pattern</b></p>
+
+<p>
+The pattern matching algorithm used in the default <a href="lang_expr.html#like">LIKE</a> and <a href="lang_expr.html#glob">GLOB</a>
+implementation of SQLite can exhibit O(N&sup2;) performance (where
+N is the number of characters in the pattern) for certain pathological
+cases. To avoid denial-of-service attacks from miscreants who are able
+to specify their own LIKE or GLOB patterns, the length of the LIKE
+or GLOB pattern is limited to SQLITE_MAX_LIKE_PATTERN_LENGTH bytes.
+The default value of this limit is 50000. A modern workstation can
+evaluate even a pathological LIKE or GLOB pattern of 50000 bytes
+relatively quickly. The denial of service problem only comes into
+play when the pattern length gets into millions of bytes. Nevertheless,
+since most useful LIKE or GLOB patterns are at most a few dozen bytes
+in length, paranoid application developers may want to reduce this
+parameter to something in the range of a few hundred if they know that
+external users are able to generate arbitrary patterns.
+</p>
+
+<p>
+The maximum length of a LIKE or GLOB pattern can be lowered at run-time using
+the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitlikepatternlength">SQLITE_LIMIT_LIKE_PATTERN_LENGTH</a>,size) interface.
+</p>
+</li><a name="max_variable_number"></a>
+<li><p><b>Maximum Number Of Host Parameters In A Single SQL Statement</b></p>
+
+<p>
+A host <a href="lang_expr.html#varparam">parameter</a> is a place-holder in an SQL statement that is filled
+in using one of the
+<a href="c3ref/bind_blob.html">sqlite3_bind_XXXX()</a> interfaces.
+Many SQL programmers are familiar with using a question mark ("?") as a
+host parameter. SQLite also supports named host parameters prefaced
+by ":", "$", or "@" and numbered host parameters of the form "?123".
+</p>
+
+<p>
+Each host parameter in an SQLite statement is assigned a number. The
+numbers normally begin with 1 and increase by one with each new
+parameter. However, when the "?123" form is used, the host parameter
+number is the number that follows the question mark.
+</p>
+
+<p>
+SQLite allocates space to hold all host parameters between 1 and the
+largest host parameter number used. Hence, an SQL statement that contains
+a host parameter like ?1000000000 would require gigabytes of storage.
+This could easily overwhelm the resources of the host machine.
+To prevent excessive memory allocations,
+the maximum value of a host parameter number is SQLITE_MAX_VARIABLE_NUMBER,
+which defaults to 999 for SQLite versions prior to 3.32.0 (2020-05-22)
+or 32766 for SQLite versions after 3.32.0.
+</p>
+
+<p>
+The maximum host parameter number can be lowered at run-time using
+the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitvariablenumber">SQLITE_LIMIT_VARIABLE_NUMBER</a>,size) interface.
+</p>
+</li><a name="max_trigger_depth"></a>
+<li><p><b>Maximum Depth Of Trigger Recursion</b></p>
+
+<p>
+SQLite limits the depth of recursion of triggers in order to prevent
+a statement involving recursive triggers from using an unbounded amount
+of memory.
+</p>
+
+<p>Prior to SQLite <a href="releaselog/3_6_18.html">version 3.6.18</a> (2009-09-11),
+triggers were not recursive and so
+this limit was meaningless. Beginning with version 3.6.18, recursive triggers
+were supported but had to be explicitly enabled using the
+<a href="pragma.html#pragma_recursive_triggers">PRAGMA recursive_triggers</a> statement.
+Beginning with <a href="releaselog/3_7_0.html">version 3.7.0</a> (2009-09-11),
+recursive triggers are enabled by default but can be manually disabled
+using <a href="pragma.html#pragma_recursive_triggers">PRAGMA recursive_triggers</a>. The SQLITE_MAX_TRIGGER_DEPTH is
+only meaningful if recursive triggers are enabled.</p>
+
+<p>The default maximum trigger recursion depth is 1000.</p>
+</li><a name="max_attached"></a>
+<li><p><b>Maximum Number Of Attached Databases</b></p>
+
+<p>
+The <a href="lang_attach.html">ATTACH</a> statement is an SQLite extension
+that allows two or more databases to be associated to the same database
+connection and to operate as if they were a single database. The number
+of simultaneously attached databases is limited to SQLITE_MAX_ATTACHED
+which is set to 10 by default.
+The maximum number of attached databases cannot be increased above 125.</p>
+
+<p>
+The maximum number of attached databases can be lowered at run-time using
+the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitattached">SQLITE_LIMIT_ATTACHED</a>,size) interface.
+</p>
+</li><a name="max_page_count"></a>
+<li><p><b>Maximum Number Of Pages In A Database File</b></p>
+
+<p>
+SQLite is able to limit the size of a database file to prevent
+the database file from growing too large and consuming too much
+disk space.
+The SQLITE_MAX_PAGE_COUNT parameter, which is normally set to
+1073741823, is the maximum number of pages allowed in a single
+database file. An attempt to insert new data that would cause
+the database file to grow larger than this will return
+SQLITE_FULL.
+</p>
+
+<p>
+The largest possible setting for SQLITE_MAX_PAGE_COUNT is 4294967294.
+When used with the maximum page size of 65536, this gives a maximum
+SQLite database size of about 281 terabytes.</p>
+
+<p>
+The <a href="pragma.html#pragma_max_page_count">
+max_page_count PRAGMA</a> can be used to raise or lower this
+limit at run-time.
+</p>
+</li><li><p><b>Maximum Number Of Rows In A Table</b></p>
+
+<p>
+The theoretical maximum number of rows in a table is
+2<sup><small>64</small></sup> (18446744073709551616 or about 1.8e+19).
+This limit is unreachable since the maximum database size of 281 terabytes
+will be reached first. A 281 terabytes database can hold no more than
+approximately 2e+13 rows, and then only if there are no indices and if
+each row contains very little data.
+</li><li><p><b>Maximum Database Size</b></p>
+
+<p>
+Every database consists of one or more "pages". Within a single database,
+every page is the same size, but different databases can have page sizes
+that are powers of two between 512 and 65536, inclusive. The maximum
+size of a database file is 4294967294 pages. At the maximum page size
+of 65536 bytes, this translates into a maximum database size of
+approximately 1.4e+14 bytes (281 terabytes, or 256 tebibytes, or
+281474 gigabytes or 256,000 gibibytes).
+<p>
+This particular upper bound is untested since the developers do not
+have access to hardware capable of reaching this limit. However, tests
+do verify that SQLite behaves correctly and sanely when a database
+reaches the maximum file size of the underlying filesystem (which is
+usually much less than the maximum theoretical database size) and when
+a database is unable to grow due to disk space exhaustion.
+</li><li><p><b>Maximum Number Of Tables In A Schema</b></p>
+
+<p>
+Each table and index requires at least one page in the database file.
+An "index" in the previous sentence means an index created explicitly
+using a <a href="lang_createindex.html">CREATE INDEX</a> statement or implicit indices created by UNIQUE
+and PRIMARY KEY constraints. Since the maximum number of pages in a
+database file is 2147483646 (a little over 2 billion) this is also then
+an upper bound on the number of tables and indices in a schema.
+<p>
+Whenever a database is opened, the entire schema is scanned and parsed
+and a parse tree for the schema is held in memory. That means that
+database connection startup time and initial memory usage
+is proportional to the size of the schema.
+</li>
+</ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/limits.in?m=896d3c205a3ca0d90">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/loadext.html b/www/loadext.html
new file mode 100644
index 0000000..faff795
--- /dev/null
+++ b/www/loadext.html
@@ -0,0 +1,493 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Run-Time Loadable Extensions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Run-Time Loadable Extensions
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#loading_an_extension">2. Loading An Extension</a></div>
+<div class="fancy-toc1"><a href="#compiling_a_loadable_extension">3. Compiling A Loadable Extension</a></div>
+<div class="fancy-toc1"><a href="#programming_loadable_extensions">4. Programming Loadable Extensions</a></div>
+<div class="fancy-toc2"><a href="#example_extensions">4.1. Example Extensions</a></div>
+<div class="fancy-toc1"><a href="#persistent_loadable_extensions">5. Persistent Loadable Extensions</a></div>
+<div class="fancy-toc1"><a href="#statically_linking_a_run_time_loadable_extension">6. Statically Linking A Run-Time Loadable Extension</a></div>
+<div class="fancy-toc1"><a href="#implementation_details">7. Implementation Details</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>SQLite has the ability to load extensions (including new
+<a href="appfunc.html">application-defined SQL functions</a>,
+<a href="datatype3.html#collation">collating sequences</a>, <a href="vtab.html">virtual tables</a>, and <a href="vfs.html">VFSes</a>) at run-time.
+This feature allows the code for extensions to be developed and
+tested separately from the application and then loaded
+on an as-needed basis.</p>
+
+<p>Extensions can also be statically linked with the application.
+The code template shown below will work just as well as a statically
+linked extension as it does as a run-time loadable extension except that
+you should give the entry point function ("sqlite3_extension_init")
+a different name to avoid name collisions if your application contains
+two or more extensions.</p>
+
+<h1 id="loading_an_extension"><span>2. </span>Loading An Extension</h1>
+
+<p>An SQLite extension is a shared library or DLL. To load it, you
+need to supply SQLite with the name of the file containing the
+shared library or DLL and an entry point to initialize the extension.
+In C code, this information is supplied using the
+<a href="c3ref/load_extension.html">sqlite3_load_extension()</a> API. See the documentation on that
+routine for additional information.</p>
+
+<p>Note that different operating systems use different filename
+suffixes for their shared libraries. Windows uses ".dll", Mac uses
+".dylib", and most unixes other than mac use ".so". If you want to
+make your code portable, you can omit the suffix from the shared
+library filename and the appropriate suffix will be added automatically
+by the <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> interface.</p>
+
+<p>There is also an SQL function that can be used to load extensions:
+<a href="lang_corefunc.html#load_extension">load_extension(X,Y)</a>. It works just like the <a href="c3ref/load_extension.html">sqlite3_load_extension()</a>
+C interface.</p>
+
+<p>Both methods for loading an extension allow you to specify
+the name of an entry point for the extension.
+You can leave this argument blank - passing in
+a NULL pointer for the <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> C-language interface
+or omitting the second argument for the <a href="lang_corefunc.html#load_extension">load_extension()</a> SQL interface -
+and the extension loader logic will attempt to figure out the entry point
+on its own. It will first try the generic extension name
+"sqlite3_extension_init". If that does not work, it constructs a
+entry point using the template "sqlite3_X_init" where the X is replaced
+by the lowercase equivalent of every ASCII character in the filename
+after the last "/" and before the first following "." omitting the
+first three characters if they happen to be "lib". So, for example,
+if the filename is "/usr/lib/libmathfunc-4.8.so" the entry point name
+would be "sqlite3_mathfunc_init". Or if the filename is
+"./SpellFixExt.dll" then the entry point would be called
+"sqlite3_spellfixext_init".
+
+</p><p>For security reasons, extension loading is turned off by default.
+In order to use either the C-language or SQL extension loading functions,
+one must first enable extension loading using the
+<a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a>,1,NULL)
+C-language API in your application.</p>
+
+<p>From the <a href="cli.html">command-line shell</a>, extensions can be loaded using the
+".load" dot-command. For example:
+
+</p><blockquote><pre>
+.load ./YourCode
+</pre></blockquote>
+
+<p>Note that the command-line shell program has already enabled
+extension loading for you (by calling the <a href="c3ref/enable_load_extension.html">sqlite3_enable_load_extension()</a>
+interface as part of its setup) so the command above works without
+any special switches, setup, or other complications.</p>
+
+<p>The ".load" command with one argument invokes sqlite3_load_extension()
+with the zProc parameter set to NULL, causing SQLite to first look for
+an entry point named "sqlite3_extension_init" and then "sqlite3_X_init"
+where "X" is derived from the filename. If your extension has an entry
+point with a different name, simply supply that name as the second
+argument. For example:</p>
+
+<blockquote><pre>
+.load ./YourCode nonstandard_entry_point
+</pre></blockquote>
+
+<a name="build"></a>
+
+<h1 id="compiling_a_loadable_extension"><span>3. </span>Compiling A Loadable Extension</h1>
+
+<p>Loadable extensions are C-code. To compile them on
+most unix-like operating
+systems, the usual command is something like this:</p>
+
+<blockquote><pre>
+gcc -g -fPIC -shared YourCode.c -o YourCode.so
+</pre></blockquote>
+
+<p>Macs are unix-like, but they do not follow the usual shared library
+conventions. To compile a shared library on a Mac, use a command like
+this:</p>
+
+<blockquote><pre>
+gcc -g -fPIC -dynamiclib YourCode.c -o YourCode.dylib
+</pre></blockquote>
+
+<p>If when you try to load your library you get back an error message
+that says "mach-o, but wrong architecture" then you might need to add
+command-line options "-arch i386" or "arch x86_64" to gcc, depending
+on how your application is built.</p>
+
+<p>To compile on Windows using MSVC, a command similar to the following
+will usually work:</p>
+
+<blockquote><pre>
+cl YourCode.c -link -dll -out:YourCode.dll
+</pre></blockquote>
+
+<p>To compile for Windows using MinGW, the command line is just like it
+is for unix except that the output file suffix is changed to ".dll" and
+the -fPIC argument is omitted:</p>
+
+<blockquote><pre>
+gcc -g -shared YourCode.c -o YourCode.dll
+</pre></blockquote>
+
+<a name="write"></a>
+
+<h1 id="programming_loadable_extensions"><span>4. </span>Programming Loadable Extensions</h1>
+
+<p>A template loadable extension contains the following three elements:</p>
+
+<ol>
+<li><p>
+Use "<tt>#include &lt;sqlite3ext.h&gt;</tt>" at the top of your source
+code files instead of "<tt>#include &lt;sqlite3.h&gt;</tt>".
+</p>
+
+</li><li><p>
+Put the macro "<tt>SQLITE_EXTENSION_INIT1</tt>" on a line by itself
+right after the "<tt>#include &lt;sqlite3ext.h&gt;</tt>" line.
+</p>
+
+</li><li><p>
+Add an extension loading entry point routine that looks like
+something the following:
+
+</p><div class="codeblock"><pre>#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int sqlite3_extension_init( /* &lt;== Change this name, maybe */
+ sqlite3 *db,
+ char **pzErrMsg,
+ const sqlite3_api_routines *pApi
+){
+ int rc = SQLITE_OK;
+ SQLITE_EXTENSION_INIT2(pApi);
+ /* insert code to initialize your extension here */
+ return rc;
+}
+</pre></div>
+
+<p>You will do well to customize the name of your entry point to
+correspond to the name of the shared library you will be generating,
+rather than using the generic "sqlite3_extension_init" name. Giving
+your extension a custom entry point name will enable you to statically
+link two or more extensions into the same program without a linker
+conflict, if you later decide to use static linking rather than run-time
+linking.
+If your shared library ends up being named "YourCode.so" or
+"YourCode.dll" or "YourCode.dylib" as shown in the compiler examples
+above, then the correct entry point name would be
+"sqlite3_yourcode_init".
+</p></li></ol>
+
+<p>Here is a complete template extension that you can copy/paste
+to get started:</p>
+
+<div class="codeblock"><pre>/* Add your header comment here */
+#include &lt;sqlite3ext.h&gt; /* Do not use &lt;sqlite3.h&gt;! */
+SQLITE_EXTENSION_INIT1
+
+/* Insert your extension code here */
+
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+/* TODO: Change the entry point name so that "extension" is replaced by
+** text derived from the shared library filename as follows: Copy every
+** ASCII alphabetic character from the filename after the last "/" through
+** the next following ".", converting each character to lowercase, and
+** discarding the first three characters if they are "lib".
+*/
+int sqlite3_extension_init(
+ sqlite3 *db,
+ char **pzErrMsg,
+ const sqlite3_api_routines *pApi
+){
+ int rc = SQLITE_OK;
+ SQLITE_EXTENSION_INIT2(pApi);
+ /* Insert here calls to
+ ** sqlite3_create_function_v2(),
+ ** sqlite3_create_collation_v2(),
+ ** sqlite3_create_module_v2(), and/or
+ ** sqlite3_vfs_register()
+ ** to register the new features that your extension adds.
+ */
+ return rc;
+}
+</pre></div>
+
+<h2 id="example_extensions"><span>4.1. </span>Example Extensions</h2>
+
+<p>Many examples of complete and working loadable extensions can be
+seen in the SQLite source tree in the
+<a href="https://www.sqlite.org/src/file/ext/misc">ext/misc</a> subdirectory.
+Each file in that directory is a separate extension. Documentation
+is provided by a header comment on the file.
+Here are brief notes on a few of the extensions in
+the <a href="https://www.sqlite.org/src/file/ext/misc">ext/misc</a> subdirectory:
+
+</p><ul>
+<li><p>
+<a href="https://www.sqlite.org/src/file/ext/misc/carray.c">carray.c</a> &mdash;
+Implementation of the <a href="carray.html">carray table-valued function</a>.
+</p></li><li><p>
+<a href="https://www.sqlite.org/src/file/ext/misc/compress.c">compress.c</a> &mdash;
+Implementation of <a href="appfunc.html">application-defined SQL functions</a> compress() and
+uncompress() that do zLib compression of text or blob content.
+</p></li><li><p>
+<a href="https://www.sqlite.org/src/file/ext/misc/json1.c">json1.c</a> &mdash;
+Implementation of <a href="json1.html">JSON SQL functions</a> and <a href="vtab.html#tabfunc2">table-valued functions</a>.
+This is a larger and more complex extension.
+</p></li><li><p>
+<a href="https://www.sqlite.org/src/file/ext/misc/memvfs.c">memvfs.c</a> &mdash;
+Implementation of a new <a href="vfs.html">VFS</a> that stores all content in-memory.
+</p></li><li><p>
+<a href="https://www.sqlite.org/src/file/ext/misc/rot13.c">rot13.c</a> &mdash;
+Implementation of a <a href="https://en.wikipedia.org/wiki/ROT13">rot13()</a>
+SQL function. This is a very simple example of an extension function
+and is useful as a template for creating new extensions.
+</p></li><li><p>
+<a href="https://www.sqlite.org/src/file/ext/misc/series.c">series.c</a> &mdash;
+Implementation of the generate_series <a href="vtab.html">virtual table</a> and
+<a href="vtab.html#tabfunc2">table-valued function</a>. This is a relatively simple example of a
+virtual table implementation which can serve as a template for writing
+new virtual tables.
+</p></li></ul>
+
+<p>Other and more complex extensions can be found in subfolders
+under <a href="https://www.sqlite.org/src/file/ext">ext/</a> other than ext/misc/.
+
+<a name="persist"></a>
+
+</p><h1 id="persistent_loadable_extensions"><span>5. </span>Persistent Loadable Extensions</h1>
+
+<p>The default behavior for a loadable extension is that it is unloaded
+from process memory when the database connection that originally invoked
+<a href="c3ref/load_extension.html">sqlite3_load_extension()</a> closes. (In other words, the xDlClose method
+of the <a href="c3ref/vfs.html">sqlite3_vfs</a> object is called for all extensions when a database
+connection closes.) However, if the initialization procedure returns
+<a href="rescode.html#ok_load_permanently">SQLITE_OK_LOAD_PERMANENTLY</a> instead of SQLITE_OK, then the extension will
+not be unloaded (xDlClose will not be invoked) and the extension will remain
+in process memory indefinitely. The SQLITE_OK_LOAD_PERMANENTLY return
+value is useful for extensions that want to register new <a href="vfs.html">VFSes</a>.
+
+</p><p>To clarify: an extension for which the initialization function returns
+SQLITE_OK_LOAD_PERMANENTLY continues to exist in memory after the database
+connection closes. However, the extension is <em>not</em> automatically
+registered with subsequent database connections. This makes it possible
+to load extensions that implement new <a href="vfs.html">VFSes</a>.
+To persistently load and register an extension that implements new SQL
+functions, collating sequences, and/or virtual tables, such that those
+added capabilities are available to all subsequent database connections,
+then the initialization routine should also invoke <a href="c3ref/auto_extension.html">sqlite3_auto_extension()</a>
+on a subfunction that will register those services.
+
+</p><p>The <a href="https://sqlite.org/src/file/ext/misc/vfsstat.c">vfsstat.c</a> extension
+show an example of a loadable extension that persistently registers both
+a new VFS and a new virtual table. The
+<a href="https://sqlite.org/src/info/77b5b4235c9f7f11?ln=801-819">sqlite3_vfsstat_init()</a>
+initialization routine in that extension is called only once, when the
+extension is first loaded. It registers the new "vfslog" VFS just that
+one time, and it returns SQLITE_OK_LOAD_PERMANENTLY so that the code used
+to implement the "vfslog" VFS will remain in memory. The initialization routine
+also invokes <a href="c3ref/auto_extension.html">sqlite3_auto_extension()</a> on a pointer to the "vstatRegister()"
+function so that all subsequent database connections will invoke the
+"vstatRegister()" function as they start up, and hence register the
+"vfsstat" virtual table.
+
+</p><h1 id="statically_linking_a_run_time_loadable_extension"><span>6. </span>Statically Linking A Run-Time Loadable Extension</h1>
+
+<p>The exact same source code can be used for both a run-time loadable
+shared library or DLL and as a module that is statically linked with your
+application. This provides flexibility and allows you to reuse the same
+code in different ways.</p>
+
+<p>To statically link your extension, simply add the -DSQLITE_CORE
+compile-time option. The SQLITE_CORE macro causes the SQLITE_EXTENSION_INIT1
+and SQLITE_EXTENSION_INIT2 macros to become no-ops. Then modify your
+application to invoke the entry point directly, passing in a NULL pointer
+as the third "pApi" parameter.</p>
+
+<p>It is particularly important to use an entry point name that is
+based on the extension filename, rather than the generic
+"sqlite3_extension_init" entry point name, if you will be statically
+linking two or more extensions. If you use the generic name, there
+will be multiple definitions of the same symbol and the link will fail.</p>
+
+<p>If you will be opening multiple database connections in your application,
+rather than invoking the extension entry points for each database
+connection separately, you might want to consider using the
+<a href="c3ref/auto_extension.html">sqlite3_auto_extension()</a> interface to register your extensions and
+to cause them to be automatically started as each database connection
+is opened. You only have to register each extension once, and you can
+do so near the beginning of your main() routine. Using the
+<a href="c3ref/auto_extension.html">sqlite3_auto_extension()</a> interface to register your extensions makes
+your extensions work as if they were built into the core SQLite - they
+automatically exist whenever you open a new database connection
+without needing to be initialized. Just be sure to complete any
+configuration you need to accomplish using <a href="c3ref/config.html">sqlite3_config()</a> before
+registering your extensions, since the <a href="c3ref/auto_extension.html">sqlite3_auto_extension()</a>
+interface implicitly calls <a href="c3ref/initialize.html">sqlite3_initialize()</a>.</p>
+
+<h1 id="implementation_details"><span>7. </span>Implementation Details</h1>
+
+<p>SQLite implements run-time extension loading using the
+xDlOpen(), xDlError(), xDlSym(), and xDlClose() methods of the
+<a href="c3ref/vfs.html">sqlite3_vfs</a> object. These methods are implemented using
+the dlopen() library on unix (which explains why SQLite commonly
+needs to be linked against the "-ldl" library on unix systems)
+and using LoadLibrary() API on Windows. In a custom <a href="vfs.html">VFS</a> for
+unusual systems, these methods can all be omitted, in which case
+the run-time extension loading mechanism will not work (though
+you will still be able to statically link the extension code, assuming
+the entry pointers are uniquely named).
+SQLite can be compiled with
+<a href="compile.html#omit_load_extension">SQLITE_OMIT_LOAD_EXTENSION</a> to omit the extension loading code
+from the build.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/loadext.in?m=b7044b2344d956155">2022-03-08 04:52:03</a> UTC </small></i></p>
+
diff --git a/www/lockingv3.html b/www/lockingv3.html
new file mode 100644
index 0000000..48398e2
--- /dev/null
+++ b/www/lockingv3.html
@@ -0,0 +1,697 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>File Locking And Concurrency In SQLite Version 3</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<font color="#7f001f"><p>
+<p>This document was originally created in early 2004 when SQLite version 2
+was still in widespread use and was written to introduce
+the new concepts of SQLite version 3 to readers who were already familiar
+with SQLite version 2. But these days, most readers of this document have
+probably never seen SQLite version 2 and are only familiar with SQLite
+version 3. Nevertheless, this document continues to serve as an
+authoritative reference to how database file locking works in SQLite
+version 3.</p>
+
+<p>The document only describes locking for the older rollback-mode
+transaction mechanism. Locking for the newer <a href="wal.html">write-ahead log</a> or <a href="wal.html">WAL mode</a>
+is described separately.</p>
+</font>
+
+<h2>1.0 File Locking And Concurrency In SQLite Version 3</h2>
+
+<p>SQLite <a href="releaselog/3_0_0.html">Version 3.0.0</a> introduced a new locking and journaling
+mechanism designed to improve concurrency over SQLite version 2
+and to reduce the writer starvation
+problem. The new mechanism also allows atomic commits of transactions
+involving multiple database files.
+This document describes the new locking mechanism.
+The intended audience is programmers who want to understand and/or modify
+the pager code and reviewers working to verify the design
+of SQLite version 3.
+</p>
+
+<a name="overview"></a>
+<h2>2.0 Overview</h2>
+
+<p>
+Locking and concurrency control are handled by the
+<a href="http://www.sqlite.org/src/finfo?name=src/pager.c">
+pager module</a>.
+The pager module is responsible for making SQLite "ACID" (Atomic,
+Consistent, Isolated, and Durable). The pager module makes sure changes
+happen all at once, that either all changes occur or none of them do,
+that two or more processes do not try to access the database
+in incompatible ways at the same time, and that once changes have been
+written they persist until explicitly deleted. The pager also provides
+a memory cache of some of the contents of the disk file.</p>
+
+<p>The pager is unconcerned
+with the details of B-Trees, text encodings, indices, and so forth.
+From the point of view of the pager the database consists of
+a single file of uniform-sized blocks. Each block is called a
+"page" and is usually 1024 bytes in size. The pages are numbered
+beginning with 1. So the first 1024 bytes of the database are called
+"page 1" and the second 1024 bytes are call "page 2" and so forth. All
+other encoding details are handled by higher layers of the library.
+The pager communicates with the operating system using one of several
+modules
+(Examples:
+<a href="http://www.sqlite.org/src/finfo?name=src/os_unix.c">
+os_unix.c</a>,
+<a href="http://www.sqlite.org/src/finfo?name=src/os_win.c">
+os_win.c</a>)
+that provides a uniform abstraction for operating system services.
+</p>
+
+<p>The pager module effectively controls access for separate threads, or
+separate processes, or both. Throughout this document whenever the
+word "process" is written you may substitute the word "thread" without
+changing the truth of the statement.</p>
+
+<a name="locking"></a>
+<h2>3.0 Locking</h2>
+
+<p>
+From the point of view of a single process, a database file
+can be in one of five locking states:
+</p>
+
+<p>
+<table cellpadding="20">
+<tr><td valign="top">UNLOCKED</td>
+<td valign="top">
+No locks are held on the database. The database may be neither read nor
+written. Any internally cached data is considered suspect and subject to
+verification against the database file before being used. Other
+processes can read or write the database as their own locking states
+permit. This is the default state.
+</td></tr>
+
+<tr><td valign="top">SHARED</td>
+<td valign="top">
+<a name="shared_lock"></a>
+
+The database may be read but not written. Any number of
+processes can hold SHARED locks at the same time, hence there can be
+many simultaneous readers. But no other thread or process is allowed
+to write to the database file while one or more SHARED locks are active.
+</td></tr>
+
+<tr><td valign="top">RESERVED</td>
+<td valign="top">
+<a name="reserved_lock"></a>
+
+A RESERVED lock means that the process is planning on writing to the
+database file at some point in the future but that it is currently just
+reading from the file. Only a single RESERVED lock may be active at one
+time, though multiple SHARED locks can coexist with a single RESERVED lock.
+RESERVED differs from PENDING in that new SHARED locks can be acquired
+while there is a RESERVED lock.
+</td></tr>
+
+<tr><td valign="top">PENDING</td>
+<td valign="top">
+<a name="pending_lock"></a>
+
+A PENDING lock means that the process holding the lock wants to write
+to the database as soon as possible and is just waiting on all current
+SHARED locks to clear so that it can get an EXCLUSIVE lock. No new
+SHARED locks are permitted against the database if
+a PENDING lock is active, though existing SHARED locks are allowed to
+continue.
+</td></tr>
+
+<tr><td valign="top">EXCLUSIVE</td>
+<td valign="top">
+<a name="excl_lock"></a>
+
+An EXCLUSIVE lock is needed in order to write to the database file.
+Only one EXCLUSIVE lock is allowed on the file and no other locks of
+any kind are allowed to coexist with an EXCLUSIVE lock. In order to
+maximize concurrency, SQLite works to minimize the amount of time that
+EXCLUSIVE locks are held.
+</td></tr>
+</table>
+</p>
+
+<p>
+The operating system interface layer understands and tracks all five
+locking states described above.
+The pager module only tracks four of the five locking states.
+A PENDING lock is always just a temporary
+stepping stone on the path to an EXCLUSIVE lock and so the pager module
+does not track PENDING locks.
+</p>
+
+<a name="rollback"></a>
+<h2>4.0 The Rollback Journal</h2>
+
+<p>When a process wants to change a database file (and it is not
+in <a href="wal.html">WAL</a> mode), it
+first records the original unchanged database content
+in a <em>rollback journal</em>. The rollback journal is an ordinary
+disk file that is always located
+in the same directory or folder as the database file and has the
+same name as the database file with the addition of a <tt>-journal</tt>
+suffix. The rollback journal also records the initial
+size of the database so that if the database file grows it can be truncated
+back to its original size on a rollback.</p>
+
+<p>If SQLite is working with multiple databases at the same time
+(using the <a href="lang_attach.html">ATTACH</a> command) then each database has its own rollback journal.
+But there is also a separate aggregate journal
+called the <em>super-journal</em>.
+The super-journal does not contain page data used for rolling back
+changes. Instead the super-journal contains the names of the
+individual database rollback journals for each of the ATTACHed databases.
+Each of the individual database rollback journals also contain the name
+of the super-journal.
+If there are no ATTACHed databases (or if none of the ATTACHed database
+is participating in the current transaction) no super-journal is
+created and the normal rollback journal contains an empty string
+in the place normally reserved for recording the name of the
+super-journal.</p>
+
+<p>A rollback journal is said to be <a href="fileformat2.html#hotjrnl">hot</a>
+if it needs to be rolled back
+in order to restore the integrity of its database.
+A hot journal is created when a process is in the middle of a database
+update and a program or operating system crash or power failure prevents
+the update from completing.
+Hot journals are an exception condition.
+Hot journals exist to recover from crashes and power failures.
+If everything is working correctly
+(that is, if there are no crashes or power failures)
+you will never get a hot journal.
+</p>
+
+<p>
+If no super-journal is involved, then
+a journal is hot if it exists and has a non-zero header
+and its corresponding database file
+does not have a RESERVED lock.
+If a super-journal is named in the file journal, then the file journal
+is hot if its super-journal exists and there is no RESERVED
+lock on the corresponding database file.
+It is important to understand when a journal is hot so the
+preceding rules will be repeated in bullets:
+</p>
+
+<ul>
+<li>A journal is hot if...
+ <ul>
+ <li>It exists, and</li>
+ <li>Its size is greater than 512 bytes, and</li>
+ <li>The journal header is non-zero and well-formed, and</li>
+ <li>Its super-journal exists or the super-journal name is an
+ empty string, and</li>
+ <li>There is no RESERVED lock on the corresponding database file.</li>
+ </ul>
+</li>
+</ul>
+
+<a name="hot_journals"></a>
+<h3>4.1 Dealing with hot journals</h3>
+
+<p>
+Before reading from a database file, SQLite always checks to see if that
+database file has a hot journal. If the file does have a hot journal, then
+the journal is rolled back before the file is read. In this way, we ensure
+that the database file is in a consistent state before it is read.
+</p>
+
+<p>When a process wants to read from a database file, it followed
+the following sequence of steps:
+</p>
+
+<ol>
+<li>Open the database file and obtain a SHARED lock. If the SHARED lock
+ cannot be obtained, fail immediately and return SQLITE_BUSY.</li>
+<li>Check to see if the database file has a hot journal. If the file
+ does not have a hot journal, we are done. Return immediately.
+ If there is a hot journal, that journal must be rolled back by
+ the subsequent steps of this algorithm.</li>
+<li>Acquire a PENDING lock then an EXCLUSIVE lock on the database file.
+ (Note: Do not acquire a RESERVED lock because that would make
+ other processes think the journal was no longer hot.) If we
+ fail to acquire these locks it means another process
+ is already trying to do the rollback. In that case,
+ drop all locks, close the database, and return SQLITE_BUSY. </li>
+<li>Read the journal file and roll back the changes.</li>
+<li>Wait for the rolled back changes to be written onto
+ persistent storage. This protects the integrity of the database
+ in case another power failure or crash occurs.</li>
+<li>Delete the journal file (or truncate the journal to zero bytes in
+ length if <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=TRUNCATE</a> is
+ set, or zero the journal header if
+ <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=PERSIST</a> is set).</li>
+<li>Delete the super-journal file if it is safe to do so.
+ This step is optional. It is here only to prevent stale
+ super-journals from cluttering up the disk drive.
+ See the discussion below for details.</li>
+<li>Drop the EXCLUSIVE and PENDING locks but retain the SHARED lock.</li>
+</ol>
+
+<p>After the algorithm above completes successfully, it is safe to
+read from the database file. Once all reading has completed, the
+SHARED lock is dropped.</p>
+
+<a name="stale_super_journals"></a>
+<h3>4.2 Deleting stale super-journals</h3>
+
+<p>A stale super-journal is a super-journal that is no longer being
+used for anything. There is no requirement that stale super-journals
+be deleted. The only reason for doing so is to free up disk space.</p>
+
+<p>A super-journal is stale if no individual file journals are pointing
+to it. To figure out if a super-journal is stale, we first read the
+super-journal to obtain the names of all of its file journals. Then
+we check each of those file journals. If any of the file journals named
+in the super-journal exists and points back to the super-journal, then
+the super-journal is not stale. If all file journals are either missing
+or refer to other super-journals or no super-journal at all, then the
+super-journal we are testing is stale and can be safely deleted.</p>
+
+<a name="writing"></a>
+<h2>5.0 Writing to a database file</h2>
+
+<p>To write to a database, a process must first acquire a SHARED lock
+as described above (possibly rolling back incomplete changes if there
+is a hot journal).
+After a SHARED lock is obtained, a RESERVED lock must be acquired.
+The RESERVED lock signals that the process intends to write to the
+database at some point in the future. Only one process at a time
+can hold a RESERVED lock. But other processes can continue to read
+the database while the RESERVED lock is held.
+</p>
+
+<p>If the process that wants to write is unable to obtain a RESERVED
+lock, it must mean that another process already has a RESERVED lock.
+In that case, the write attempt fails and returns SQLITE_BUSY.</p>
+
+<p>After obtaining a RESERVED lock, the process that wants to write
+creates a rollback journal. The header of the journal is initialized
+with the original size of the database file. Space in the journal header
+is also reserved for a super-journal name, though the super-journal
+name is initially empty.</p>
+
+<p>Before making changes to any page of the database, the process writes
+the original content of that page into the rollback journal. Changes
+to pages are held in memory at first and are not written to the disk.
+The original database file remains unaltered, which means that other
+processes can continue to read the database.</p>
+
+<p>Eventually, the writing process will want to update the database
+file, either because its memory cache has filled up or because it is
+ready to commit its changes. Before this happens, the writer must
+make sure no other process is reading the database and that the rollback
+journal data is safely on the disk surface so that it can be used to
+rollback incomplete changes in the event of a power failure.
+The steps are as follows:</p>
+
+<ol>
+<li>Make sure all rollback journal data has actually been written to
+ the surface of the disk (and is not just being held in the operating
+ system's or disk controllers cache) so that if a power failure occurs
+ the data will still be there after power is restored.</li>
+<li>Obtain a PENDING lock and then an EXCLUSIVE lock on the database file.
+ If other processes still have SHARED locks, the writer might have
+ to wait until those SHARED locks clear before it is able to obtain
+ an EXCLUSIVE lock.</li>
+<li>Write all page modifications currently held in memory out to the
+ original database disk file.</li>
+</ol>
+
+<p>
+If the reason for writing to the database file is because the memory
+cache was full, then the writer will not commit right away. Instead,
+the writer might continue to make changes to other pages. Before
+subsequent changes are written to the database file, the rollback
+journal must be flushed to disk again. Note also that the EXCLUSIVE
+lock that the writer obtained in order to write to the database initially
+must be held until all changes are committed. That means that no other
+processes are able to access the database from the
+time the memory cache first spills to disk until the transaction
+commits.
+</p>
+
+<p>
+When a writer is ready to commit its changes, it executes the following
+steps:
+</p>
+
+<ol>
+<li value="4">
+ Obtain an EXCLUSIVE lock on the database file and
+ make sure all memory changes have been written to the database file
+ using the algorithm of steps 1-3 above.</li>
+<li>Flush all database file changes to the disk. Wait for those changes
+ to actually be written onto the disk surface.</li>
+<li>Delete the journal file. (Or if the <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode</a> is TRUNCATE or
+ PERSIST, truncate the journal file or zero the header of the journal file,
+ respectively.) This is the instant when the changes are
+ committed. Prior to deleting the journal file, if a power failure
+ or crash occurs, the next process to open the database will see that
+ it has a hot journal and will roll the changes back.
+ After the journal is deleted, there will no longer be a hot journal
+ and the changes will persist.
+ </li>
+<li>Drop the EXCLUSIVE and PENDING locks from the database file.
+ </li>
+</ol>
+
+<p>As soon as the PENDING lock is released from the database file, other
+processes can begin reading the database again. In the current implementation,
+the RESERVED lock is also released, but that is not essential for
+correct operation.</p>
+
+<p>If a transaction involves multiple databases, then a more complex
+commit sequence is used, as follows:</p>
+
+<ol>
+<li value="4">
+ Make sure all individual database files have an EXCLUSIVE lock and a
+ valid journal.
+<li>Create a super-journal. The name of the super-journal is arbitrary.
+ (The current implementation appends random suffixes to the name of the
+ main database file until it finds a name that does not previously exist.)
+ Fill the super-journal with the names of all the individual journals
+ and flush its contents to disk.
+<li>Write the name of the super-journal into
+ all individual journals (in space set aside for that purpose in the
+ headers of the individual journals) and flush the contents of the
+ individual journals to disk and wait for those changes to reach the
+ disk surface.
+<li>Flush all database file changes to the disk. Wait for those changes
+ to actually be written onto the disk surface.</li>
+<li>Delete the super-journal file. This is the instant when the changes are
+ committed. Prior to deleting the super-journal file, if a power failure
+ or crash occurs, the individual file journals will be considered hot
+ and will be rolled back by the next process that
+ attempts to read them. After the super-journal has been deleted,
+ the file journals will no longer be considered hot and the changes
+ will persist.
+ </li>
+<li>Delete all individual journal files.
+<li>Drop the EXCLUSIVE and PENDING locks from all database files.
+ </li>
+</ol>
+
+<a name="writer_starvation"></a>
+<h3>5.1 Writer starvation</h3>
+
+<p>In SQLite version 2, if many processes are reading from the database,
+it might be the case that there is never a time when there are
+no active readers. And if there is always at least one read lock on the
+database, no process would ever be able to make changes to the database
+because it would be impossible to acquire a write lock. This situation
+is called <em>writer starvation</em>.</p>
+
+<p>SQLite version 3 seeks to avoid writer starvation through the use of
+the PENDING lock. The PENDING lock allows existing readers to continue
+but prevents new readers from connecting to the database. So when a
+process wants to write a busy database, it can set a PENDING lock which
+will prevent new readers from coming in. Assuming existing readers do
+eventually complete, all SHARED locks will eventually clear and the
+writer will be given a chance to make its changes.</p>
+
+<a name="how_to_corrupt"></a>
+<h2>6.0 How To Corrupt Your Database Files</h2>
+
+<p>The pager module is very robust but it can be subverted.
+This section attempts to identify and explain the risks.
+(See also the <a href="atomiccommit.html#sect_9_0">Things That Can Go Wrong</a> section of the article
+on <a href="atomiccommit.html">Atomic Commit</a>.</p>
+
+<p>
+Clearly, a hardware or operating system fault that introduces incorrect data
+into the middle of the database file or journal will cause problems.
+Likewise,
+if a rogue process opens a database file or journal and writes malformed
+data into the middle of it, then the database will become corrupt.
+There is not much that can be done about these kinds of problems
+so they are given no further attention.
+</p>
+
+<p>
+SQLite uses POSIX advisory locks to implement locking on Unix. On
+Windows it uses the LockFile(), LockFileEx(), and UnlockFile() system
+calls. SQLite assumes that these system calls all work as advertised. If
+that is not the case, then database corruption can result. One should
+note that POSIX advisory locking is known to be buggy or even unimplemented
+on many NFS implementations (including recent versions of Mac OS X)
+and that there are reports of locking problems
+for network filesystems under Windows. Your best defense is to not
+use SQLite for files on a network filesystem.
+</p>
+
+<p>
+SQLite uses the fsync() system call to flush data to the disk under Unix and
+it uses the FlushFileBuffers() to do the same under Windows. Once again,
+SQLite assumes that these operating system services function as advertised.
+But it has been reported that fsync() and FlushFileBuffers() do not always
+work correctly, especially with some network filesystems or inexpensive IDE disks.
+Apparently some manufactures of IDE disks have controller chips that report
+that data has reached the disk surface when in fact the data is still
+in volatile cache memory in the disk drive electronics. There are also
+reports that Windows sometimes chooses to ignore FlushFileBuffers() for
+unspecified reasons. The author cannot verify any of these reports.
+But if they are true, it means that database corruption is a possibility
+following an unexpected power loss. These are hardware and/or operating
+system bugs that SQLite is unable to defend against.
+</p>
+
+<a name="ext3-barrier-problem"></a>
+
+<p>If a Linux <a href="http://en.wikipedia.org/wiki/Ext3">ext3</a>
+filesystem is mounted without the "barrier=1" option
+in the <a href="http://en.wikipedia.org/wiki/fstab">/etc/fstab</a>
+and the disk drive write cache is enabled
+then filesystem corruption can occur following a power loss or OS crash.
+Whether or not corruption can occur depends on the details of the disk control
+hardware; corruption is more likely with inexpensive consumer-grade disks
+and less of a problem for enterprise-class storage devices with advanced
+features such as non-volatile write caches.
+Various ext3 experts
+<a href="http://www.redhat.com/archives/ext3-users/2010-July/msg00001.html">
+confirm this behavior</a>.
+We are told that most Linux distributions do not use barrier=1 and do
+not disable the write cache so most
+Linux distributions are vulnerable to this problem. Note that this is an
+operating system and hardware issue and that there is nothing that SQLite
+can do to work around it.
+<a href="http://ozlabs.org/~rusty/index.cgi/tech/2009-10-20.html">
+Other database engines</a> have also run into this same problem.</p>
+
+<p>
+If a crash or power failure occurs and results in a hot journal but that
+journal is deleted, the next process to open the database will not
+know that it contains changes that need to be rolled back. The rollback
+will not occur and the database will be left in an inconsistent state.
+Rollback journals might be deleted for any number of reasons:
+</p>
+
+<ul>
+<li>An administrator might be cleaning up after an OS crash or power failure,
+ see the journal file, think it is junk, and delete it.</li>
+<li>Someone (or some process) might rename the database file but fail to
+ also rename its associated journal.</li>
+<li>If the database file has aliases (hard or soft links) and the file
+ is opened by a different alias than the one used to create the journal,
+ then the journal will not be found. To avoid this problem, you should
+ not create links to SQLite database files.</li>
+<li>Filesystem corruption following a power failure might cause the
+ journal to be renamed or deleted.</li>
+</ul>
+
+<p>
+The last (fourth) bullet above merits additional comment. When SQLite creates
+a journal file on Unix, it opens the directory that contains that file and
+calls fsync() on the directory, in an effort to push the directory information
+to disk. But suppose some other process is adding or removing unrelated
+files to the directory that contains the database and journal at the
+moment of a power failure. The supposedly unrelated actions of this other
+process might result in the journal file being dropped from the directory and
+moved into "lost+found". This is an unlikely scenario, but it could happen.
+The best defenses are to use a journaling filesystem or to keep the
+database and journal in a directory by themselves.
+</p>
+
+<p>
+For a commit involving multiple databases and a super-journal, if the
+various databases were on different disk volumes and a power failure occurs
+during the commit, then when the machine comes back up the disks might
+be remounted with different names. Or some disks might not be mounted
+at all. When this happens the individual file journals and the
+super-journal might not be able to find each other. The worst outcome from
+this scenario is that the commit ceases to be atomic.
+Some databases might be rolled back and others might not.
+All databases will continue to be self-consistent.
+To defend against this problem, keep all databases
+on the same disk volume and/or remount disks using exactly the same names
+after a power failure.
+</p>
+
+<a name="transaction_control"></a>
+<h2>7.0 Transaction Control At The SQL Level</h2>
+
+<p>
+The changes to locking and concurrency control in SQLite version 3 also
+introduce some subtle changes in the way transactions work at the SQL
+language level.
+By default, SQLite version 3 operates in <em>autocommit</em> mode.
+In autocommit mode,
+all changes to the database are committed as soon as all operations associated
+with the current database connection complete.</p>
+
+<p>The SQL command "BEGIN TRANSACTION" (the TRANSACTION keyword
+is optional) is used to take SQLite out of autocommit mode.
+Note that the BEGIN command does not acquire any locks on the database.
+After a BEGIN command, a SHARED lock will be acquired when the first
+SELECT statement is executed. A RESERVED lock will be acquired when
+the first INSERT, UPDATE, or DELETE statement is executed. No EXCLUSIVE
+lock is acquired until either the memory cache fills up and must
+be spilled to disk or until the transaction commits. In this way,
+the system delays blocking read access to the file until the
+last possible moment.
+</p>
+
+<p>The SQL command "COMMIT" does not actually commit the changes to
+disk. It just turns autocommit back on. Then, at the conclusion of
+the command, the regular autocommit logic takes over and causes the
+actual commit to disk to occur.
+The SQL command "ROLLBACK" also operates by turning autocommit back on,
+but it also sets a flag that tells the autocommit logic to rollback rather
+than commit.</p>
+
+<p>If the SQL COMMIT command turns autocommit on and the autocommit logic
+then tries to commit change but fails because some other process is holding
+a SHARED lock, then autocommit is turned back off automatically. This
+allows the user to retry the COMMIT at a later time after the SHARED lock
+has had an opportunity to clear.</p>
+
+<p>If multiple commands are being executed against the same SQLite database
+connection at the same time, the autocommit is deferred until the very
+last command completes. For example, if a SELECT statement is being
+executed, the execution of the command will pause as each row of the
+result is returned. During this pause other INSERT, UPDATE, or DELETE
+commands can be executed against other tables in the database. But none
+of these changes will commit until the original SELECT statement finishes.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lockingv3.in?m=d448a10486958226a">2022-08-10 18:45:48</a> UTC </small></i></p>
+
diff --git a/www/locrsf.html b/www/locrsf.html
new file mode 100644
index 0000000..755011c
--- /dev/null
+++ b/www/locrsf.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>LoC Recommended Storage Format</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+LoC Recommended Storage Format
+</div>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<table align="right" border="0">
+<tr><td>
+<a href="https://www.loc.gov">
+<img src="images/loc.jpg" width="200" height="182"></a>
+</td></tr></table>
+
+<p>
+SQLite is a
+<a href="https://www.loc.gov/preservation/resources/rfs/">Recommended Storage Format</a>
+for datasets according to the
+<a href="https://www.loc.gov/">US Library of Congress</a>.
+Further information:
+
+</p><p>
+</p><ul>
+<li>
+<a href="https://www.loc.gov/preservation/digital/formats/fdd/fdd000461.shtml#local">https://www.loc.gov/preservation/digital/formats/fdd/fdd000461.shtml#local</a>
+</li><li>
+<a href="https://www.loc.gov/preservation/resources/rfs/data.html">https://www.loc.gov/preservation/resources/rfs/data.html</a>
+</li></ul>
+
+<p>
+As of this writing (2018-05-29) the only other recommended storage formats
+for datasets are XML, JSON, and CSV.
+
+</p><h2 id="what_is_a_recommended_storage_format_"><span>1.1. </span>What Is A Recommended Storage Format?</h2>
+
+<p>
+Recommended storage formats are formats which, in the opinion of the
+preservationists at the Library of Congress, maximizes the chance of
+survival and continued accessibility of digital content.
+When selecting recommended storage formats, the following criteria are
+considered (quoting from the LOC website):
+
+</p><ol>
+<li><p><b>Disclosure.</b>
+Degree to which complete specifications and tools for validating
+technical integrity exist and are accessible to those creating and
+sustaining digital content.
+A spectrum of disclosure levels can be observed for digital formats.
+What is most significant is not approval by a recognized standards body,
+but the existence of complete documentation.
+</p></li><li><p><b>Adoption.</b>
+Degree to which the format is already used by the primary creators,
+disseminators, or users of information resources.
+This includes use as a master format, for delivery to end users,
+and as a means of interchange between systems.
+</p></li><li><p><b>Transparency.</b>
+Degree to which the digital representation is open to direct analysis
+with basic tools, such as human readability using a text-only editor.
+</p></li><li><p><b>Self-documentation.</b>
+Self-documenting digital objects contain basic descriptive,
+technical, and other administrative metadata.
+</p></li><li><p><b>External Dependencies.</b>
+Degree to which a particular format depends on particular hardware,
+operating system, or software for rendering or use and the predicted
+complexity of dealing with those dependencies in future technical
+environments.
+</p></li><li><p><b>Impact of Patents.</b>
+Degree to which the ability of archival institutions to sustain content
+in a format will be inhibited by patents.
+</p></li><li><p><b>Technical Protection Mechanisms.</b>
+Implementation of mechanisms such as encryption that prevent the
+preservation of content by a trusted repository.
+</p></li></ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/locrsf.in?m=19d9ca287fde46849">2018-12-10 12:34:08</a> UTC </small></i></p>
+
diff --git a/www/lts.html b/www/lts.html
new file mode 100644
index 0000000..460af24
--- /dev/null
+++ b/www/lts.html
@@ -0,0 +1,241 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Long Term Support</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Long Term Support
+</div>
+</div>
+
+
+
+
+
+<p>
+The intent of the developers is to support SQLite through
+the year 2050.
+
+</p><p>
+At this writing, 2050 is still 34 years in the future.
+Nobody knows what will happen in that time, and we cannot
+absolutely promise that SQLite will be viable or useful that
+far out.
+But we can promise this: we plan as if we will be
+supporting SQLite until 2050.
+That long-term outlook affects our
+decisions in important ways.
+
+</p><ul>
+<li><p>
+<b>Cross-platform Code</b> &rarr;
+SQLite runs on any platform with an 8-bit byte,
+two's complement 32-bit and 64-bit integers,
+and a C compiler. It is actively
+tested on all currently popular CPUs and operating
+systems.
+The extreme portability of the SQLite code and file
+format will help it remain viable on future platforms.
+
+</p></li><li><p>
+<b>Stable, Cross-platform Database Files</b> &rarr;
+SQLite <a href="fileformat2.html">database files</a> are bit-for-bit identical on
+32-bit, 64-bit, big-endian, and little-endian platforms. You
+can copy an SQLite database file from one system to another
+without having to translate or convert the database.
+Furthermore, the file format is well documented and stable.
+Database files created today will be readable and writable by
+future versions of SQLite decades in the future.
+
+</p></li><li><p>
+<b><a href="testing.html">Aviation-grade testing</a></b> &rarr;
+Every machine-code branch instruction is tested in both
+directions. Multiple times. On multiple platforms and with
+multiple compilers. This helps make the code robust for
+future migrations. The intense testing also means that new
+developers can make experimental enhancements to SQLite and,
+assuming legacy tests all pass, be reasonably sure that the
+enhancement does not break legacy.
+
+</p></li><li><p>
+<b>Extensive, detailed documentation</b> &rarr;
+SQLite has candid, developer-friendly,
+and open-source documentation. Docs are written by and
+for programmers.
+(A few examples:
+<a href="./arch.html">[1]</a>
+<a href="./fileformat.html">[2]</a>
+<a href="./queryplanner.html">[3]</a>
+<a href="./opcode.html">[4]</a>
+<a href="./compile.html">[5]</a>
+<a href="./malloc.html">[6]</a>
+<a href="./debugging.html">[7]</a>
+<a href="./howtocorrupt.html">[8]</a>)
+The extensive documentation helps new developers
+come up to speed on SQLite very quickly.
+
+</p></li><li><p>
+<b>Heavily commented source code</b> &rarr;
+The SQLite source code is over 35% comment. Not boiler-plate
+comments, but useful comments that explain the meaning of variables
+and objects and the intent of methods and procedures.
+The code is designed
+to be accessible to new programmers and maintainable over a span
+of decades.
+
+</p></li><li><p>
+<b>Disaster planning</b> &rarr;
+Every byte of source-code history for SQLite is cryptographically
+protected and is automatically replicated to multiple
+geographically separated servers, in datacenters
+owned by different companies.
+Thousands of additional clones exist on private servers around the
+world.
+The primary developers of SQLite live in different regions of the world.
+SQLite can survive a continental catastrophe.
+
+</p></li><li><p>
+<b>Old school</b> &rarr;
+Nobody is completely immune to trends and fads, but the SQLite
+developers work hard to avoid being sucked into the latest programming
+fashion. Our aim is to produce timeless code that will be
+readable, understandable, and maintainable by programmers
+who have not yet been born.
+</p></li></ul>
+
+<p>
+In addition to "supporting" SQLite through the year 2050, the developers
+also promise to keep the SQLite
+<a href="cintro.html">C-language API</a> and <a href="fileformat2.html">on-disk format</a>
+fully backwards compatible.
+This means that application written to use SQLite today should be able to
+link against and use future versions of SQLite released decades in the
+future.
+
+</p><p>
+Our goal is to make the content you store in SQLite today as
+easily accessible to your grandchildren as it is to you.
+
+</p><p>
+<b>Update on 2018-05-31:</b>
+Our goal of supporting SQLite long-term have apparently come to the
+notice of the preservationist at the
+<a href="https://www.loc.gov">US Library Of Congress</a> who have identified
+SQLite as a <a href="locrsf.html">recommended storage format</a> for the preservation of
+digital content.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/lts.in?m=c7fb3381bbf0ac7c9">2020-12-01 19:58:42</a> UTC </small></i></p>
+
diff --git a/www/malloc.html b/www/malloc.html
new file mode 100644
index 0000000..653f8d9
--- /dev/null
+++ b/www/malloc.html
@@ -0,0 +1,1142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Dynamic Memory Allocation In SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Dynamic Memory Allocation In SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#_features">1. Features</a></div>
+<div class="fancy-toc1"><a href="#_testing">2. Testing</a></div>
+<div class="fancy-toc2"><a href="#_use_of_reallocarray_">2.1. Use of reallocarray()</a></div>
+<div class="fancy-toc1"><a href="#_configuration">3. Configuration</a></div>
+<div class="fancy-toc2"><a href="#_alternative_low_level_memory_allocators">3.1. Alternative low-level memory allocators</a></div>
+<div class="fancy-toc3"><a href="#the_default_memory_allocator">3.1.1. The default memory allocator</a></div>
+<div class="fancy-toc3"><a href="#the_debugging_memory_allocator">3.1.2. The debugging memory allocator</a></div>
+<div class="fancy-toc3"><a href="#the_win32_native_memory_allocator">3.1.3. The Win32 native memory allocator</a></div>
+<div class="fancy-toc3"><a href="#zero_malloc_memory_allocator">3.1.4. Zero-malloc memory allocator</a></div>
+<div class="fancy-toc3"><a href="#experimental_memory_allocators">3.1.5. Experimental memory allocators</a></div>
+<div class="fancy-toc3"><a href="#application_defined_memory_allocators">3.1.6. Application-defined memory allocators</a></div>
+<div class="fancy-toc3"><a href="#memory_allocator_overlays">3.1.7. Memory allocator overlays</a></div>
+<div class="fancy-toc3"><a href="#no_op_memory_allocator_stub">3.1.8. No-op memory allocator stub</a></div>
+<div class="fancy-toc2"><a href="#_page_cache_memory">3.2. Page cache memory</a></div>
+<div class="fancy-toc2"><a href="#_lookaside_memory_allocator">3.3. Lookaside memory allocator</a></div>
+<div class="fancy-toc3"><a href="#two_size_lookaside">3.3.1. Two-Size Lookaside</a></div>
+<div class="fancy-toc2"><a href="#_memory_status">3.4. Memory status</a></div>
+<div class="fancy-toc2"><a href="#_setting_memory_usage_limits">3.5. Setting memory usage limits</a></div>
+<div class="fancy-toc1"><a href="#_mathematical_guarantees_against_memory_allocation_failures">4. Mathematical Guarantees Against Memory Allocation Failures</a></div>
+<div class="fancy-toc2"><a href="#_computing_and_controlling_parameters_m_and_n">4.1. Computing and controlling parameters M and n</a></div>
+<div class="fancy-toc2"><a href="#_ductile_failure">4.2. Ductile failure</a></div>
+<div class="fancy-toc1"><a href="#_stability_of_memory_interfaces">5. Stability Of Memory Interfaces</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 style="margin-left:1.0em" notoc="1" id="overview"> Overview</h1>
+
+<p>SQLite uses dynamic memory allocation to obtain
+memory for storing various objects
+(ex: <a href="c3ref/sqlite3.html">database connections</a> and <a href="c3ref/stmt.html">prepared statements</a>) and to build
+a memory cache of the database file and to hold the results of queries.
+Much effort has gone into making the dynamic memory allocation subsystem
+of SQLite reliable, predictable, robust, secure, and efficient.</p>
+
+<p>This document provides an overview of dynamic memory allocation within
+SQLite. The target audience is software engineers who are tuning their
+use of SQLite for peak performance in demanding environments.
+Nothing in this document is required knowledge for using SQLite. The
+default settings and configuration for SQLite will work well in most
+applications. However, the information contained in this document may
+be useful to engineers who are tuning SQLite to comply with special
+requirements or to run under unusual circumstances.</p>
+
+<a name="features"></a>
+<h1 id="_features"><span>1. </span> Features</h1>
+
+<p>The SQLite core and its memory allocation subsystem provides the
+following capabilities:</p>
+
+<ul>
+<li><p>
+<b>Robust against allocation failures.</b>
+If a memory allocation ever fails (that is to say,
+if malloc() or realloc() ever return NULL)
+then SQLite will recover gracefully. SQLite will first attempt
+to free memory from unpinned cache pages then retry the allocation
+request.
+Failing that, SQLite will either stop what
+it is doing and return the
+<a href="rescode.html#nomem">SQLITE_NOMEM</a> error code back up to the application or it will
+make do without the requested memory.
+</p></li>
+
+<li><p>
+<b>No memory leaks.</b>
+The application is responsible for destroying any objects it allocates.
+(For example, the application must use <a href="c3ref/finalize.html">sqlite3_finalize()</a> on
+every <a href="c3ref/stmt.html">prepared statement</a> and <a href="c3ref/close.html">sqlite3_close()</a> on every
+<a href="c3ref/sqlite3.html">database connection</a>.) But as long as
+the application cooperates, SQLite will never leak memory. This is
+true even in the face of memory allocation failures or other system
+errors.
+</p></li>
+
+<li><p>
+<b>Memory usage limits.</b>
+The <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> mechanism allows the application to
+set a memory usage limit that SQLite strives to stay below. SQLite
+will attempt to reuse memory from its caches rather than allocating new
+memory as it approaches the soft limit.
+</p></li>
+
+<li><p>
+<b>Zero-malloc option.</b>
+The application can optionally provide SQLite with several buffers of bulk memory
+at startup and SQLite will then use those provided buffers for all of
+its memory allocation needs and never call system malloc() or free().
+</p></li>
+
+<li><p>
+<b>Application-supplied memory allocators.</b>
+The application can provide SQLite with pointers to alternative
+memory allocators at start-time. The alternative memory allocator
+will be used in place of system malloc() and free().
+</p></li>
+
+<li><p>
+<b>Proof against breakdown and fragmentation.</b>
+SQLite can be configured so that, subject to certain usage constraints
+detailed below, it is guaranteed to never fail a memory allocation
+or fragment the heap.
+This property is important to long-running, high-reliability
+embedded systems where a memory allocation error could contribute
+to an overall system failure.
+</p></li>
+
+<li><p>
+<b>Memory usage statistics.</b>
+Applications can see how much memory they are using and detect when
+memory usage is approaching or exceeding design boundaries.
+</p></li>
+
+<a name="pwwo"></a>
+<li><p>
+<b>Plays well with memory debuggers.</b>
+Memory allocation in SQLite is structured so that standard
+third-party memory debuggers (such as <a href="http://dmalloc.com">dmalloc</a> or
+<a href="http://valgrind.org">valgrind</a>) can be used to verify correct
+memory allocation behavior.</p>
+
+</li><li><p>
+<b>Minimal calls to the allocator.</b>
+The system malloc() and free() implementations are inefficient
+on many systems. SQLite strives to reduce overall processing time
+by minimizing its use of malloc() and free().
+</p></li>
+
+<li><p>
+<b>Open access.</b>
+Pluggable SQLite extensions or even the application itself can
+access to the same underlying memory allocation
+routines used by SQLite through the
+<a href="c3ref/free.html">sqlite3_malloc()</a>, <a href="c3ref/free.html">sqlite3_realloc()</a>, and <a href="c3ref/free.html">sqlite3_free()</a> interfaces.
+</p></li>
+
+</ul>
+
+<a name="testing"></a>
+<h1 id="_testing"><span>2. </span> Testing</h1>
+
+<p>Most of the code in the SQLite source tree is devoted purely to
+<a href="testing.html">testing and verification</a>. Reliability is important to SQLite.
+Among the tasks of the test infrastructure is to ensure that
+SQLite does not misuse dynamically allocated memory, that SQLite
+does not leak memory, and that SQLite responds
+correctly to a dynamic memory allocation failure.</p>
+
+<p>The test infrastructure verifies that SQLite does not misuse
+dynamically allocated memory by using a specially instrumented
+memory allocator. The instrumented memory allocator is enabled
+at compile-time using the <a href="compile.html#memdebug">SQLITE_MEMDEBUG</a> option. The instrumented
+memory allocator is much slower than the default memory allocator and
+so its use is not recommended in production. But when
+enabled during testing,
+the instrumented memory allocator performs the following checks:</p>
+
+<ul>
+<li><p><b>Bounds checking.</b>
+The instrumented memory allocator places sentinel values at both ends
+of each memory allocation to verify that nothing within SQLite writes
+outside the bounds of the allocation.</p></li>
+
+<li><p><b>Use of memory after freeing.</b>
+When each block of memory is freed, every byte is overwritten with a
+nonsense bit pattern. This helps to ensure that no memory is ever
+used after having been freed.</p></li>
+
+<li><p><b>Freeing memory not obtained from malloc.</b>
+Each memory allocation from the instrumented memory allocator contains
+sentinels used to verify that every allocation freed came
+from prior malloc.</p></li>
+
+<li><p><b>Uninitialized memory.</b>
+The instrumented memory allocator initializes each memory allocation
+to a nonsense bit pattern to help ensure that the user makes no
+assumptions about the content of allocation memory.</p></li>
+</ul>
+
+<p>Regardless of whether or not the instrumented memory allocator is
+used, SQLite keeps track of how much memory is currently checked out.
+There are hundreds of test scripts used for testing SQLite. At the
+end of each script, all objects are destroyed and a test is made to
+ensure that all memory has been freed. This is how memory
+leaks are detected. Notice that memory leak detection is in force at
+all times, during test builds and during production builds. Whenever
+one of the developers runs any individual test script, memory leak
+detection is active. Hence memory leaks that do arise during development
+are quickly detected and fixed.</p>
+
+<a name="oomtesting"></a>
+<p>The response of SQLite to out-of-memory (OOM) errors is tested using
+a specialized memory allocator overlay that can simulate memory failures.
+The overlay is a layer that is inserted in between the memory allocator
+and the rest of SQLite. The overlay passes most memory allocation
+requests straight through to the underlying allocator and passes the
+results back up to the requester. But the overlay can be set to
+cause the Nth memory allocation to fail. To run an OOM test, the overlay
+is first set to fail on the first allocation attempt. Then some test
+script is run and verification that the allocation was correctly caught
+and handled is made. Then the overlay is set to fail on the second
+allocation and the test repeats. The failure point continues to advance
+one allocation at a time until the entire test procedure runs to
+completion without hitting a memory allocation error. This whole
+test sequence run twice. On the first pass, the
+overlay is set to fail only the Nth allocation. On the second pass,
+the overlay is set to fail the Nth and all subsequent allocations.</p>
+
+<p>Note that the memory leak detection logic continues to work even
+when the OOM overlay is being used. This verifies that SQLite
+does not leak memory even when it encounters memory allocation errors.
+Note also that the OOM overlay can work with any underlying memory
+allocator, including the instrumented memory allocator that checks
+for memory allocation misuse. In this way it is verified that
+OOM errors do not induce other kinds of memory usage errors.</p>
+
+<p>Finally, we observe that the instrumented memory allocator and the
+memory leak detector both work over the entire SQLite test suite and
+the <a href="testing.html#tcl">TCL test suite</a> provides over 99% statement test coverage and that
+the <a href="th3.html">TH3</a> test harness provides <a href="testing.html#coverage">100% branch test coverage</a>
+with no leak leaks. This is
+strong evidence that dynamic memory allocation is used correctly
+everywhere within SQLite.</p>
+
+<a name="allocarray"></a>
+<h2 id="_use_of_reallocarray_"><span>2.1. </span> Use of reallocarray()</h2>
+
+<p>The reallocarray() interface is a recent innovation (circa 2014)
+from the OpenBSD community that grow out of efforts to prevent the
+next <a href="http://heartbleed.com">"heartbleed" bug</a> by avoiding 32-bit integer
+arithmetic overflow on memory allocation size computations. The
+reallocarray() function has both unit-size and count parameters.
+To allocate memory sufficient to hold an array of N elements each X-bytes
+in size, one calls "reallocarray(0,X,N)". This is preferred over
+the traditional technique of invoking "malloc(X*N)" as reallocarray()
+eliminates the risk that the X*N multiplication will overflow and
+cause malloc() to return a buffer that is a different size from what
+the application expected.</p>
+
+<p>SQLite does not use reallocarray(). The reason is that reallocarray()
+is not useful to SQLite. It turns out that SQLite never does memory
+allocations that are the simple product of two integers. Instead, SQLite
+does allocations of the form "X+C" or "N*X+C" or "M*N*X+C" or
+"N*X+M*Y+C", and so forth. The reallocarray() interface is not helpful
+in avoiding integer overflow in those cases.</p>
+
+<p>Nevertheless, integer overflow in the computation of memory allocation
+sizes is a concern that SQLite would like to deal with. To prevent
+problems, all SQLite internal memory allocations occur using thin wrapper
+functions that take a signed 64-bit integer size parameter. The SQLite
+source code is audited to ensure that all size computations are carried
+out using 64-bit signed integers as well. SQLite will
+refuse to allocate more than about 2GB of memory at one go. (In common
+use, SQLite seldom ever allocates more than about 8KB of memory at a time
+so a 2GB allocation limit is not a burden.) So the 64-bit size parameter
+provides lots of headroom for detecting overflows. The same audit that
+verifies that all size computations are done as 64-bit signed integers
+also verifies that it is impossible to overflow a 64-bit integer
+during the computation.</p>
+
+<p>The code audits used to ensure that memory allocation size computations
+do not overflow in SQLite are repeated prior to every SQLite release.</p>
+
+<a name="config"></a>
+<h1 id="_configuration"><span>3. </span> Configuration</h1>
+
+<p>The default memory allocation settings in SQLite are appropriate
+for most applications. However, applications with unusual or particularly
+strict requirements may want to adjust the configuration to more closely
+align SQLite to their needs.
+Both compile-time and start-time configuration options are available.</p>
+
+<a name="altalloc"></a>
+
+<h2 id="_alternative_low_level_memory_allocators"><span>3.1. </span> Alternative low-level memory allocators</h2>
+
+<p>The SQLite source code includes several different memory allocation
+modules that can be selected at compile-time, or to a limited extent
+at start-time.</p>
+
+<a name="defaultalloc"></a>
+
+<h3 id="the_default_memory_allocator"><span>3.1.1. </span>The default memory allocator</h3>
+
+<p>By default, SQLite uses the malloc(), realloc(), and free() routines
+from the standard C library for its memory allocation needs. These routines
+are surrounded by a thin wrapper that also provides a "memsize()" function
+that will return the size of an existing allocation. The memsize() function
+is needed to keep an accurate count of the number of bytes of outstanding
+memory; memsize() determines how many bytes to remove from the outstanding
+count when an allocation is freed. The default allocator implements
+memsize() by always allocating 8 extra bytes on each malloc() request and
+storing the size of the allocation in that 8-byte header.</p>
+
+<p>The default memory allocator is recommended for most applications.
+If you do not have a compelling need to use an alternative memory
+allocator, then use the default.</p>
+
+<a name="memdebug"></a>
+
+<h3 id="the_debugging_memory_allocator"><span>3.1.2. </span>The debugging memory allocator</h3>
+
+<p>If SQLite is compiled with the <a href="compile.html#memdebug">SQLITE_MEMDEBUG</a> compile-time option,
+then a different, heavy wrapper is used around system malloc(), realloc(),
+and free().
+The heavy wrapper allocates around 100 bytes of extra space
+with each allocation. The extra space is used to place sentinel values
+at both ends of the allocation returned to the SQLite core. When an
+allocation is freed,
+these sentinels are checked to make sure the SQLite core did not overrun
+the buffer in either direction. When the system library is GLIBC, the
+heavy wrapper also makes use of the GNU backtrace() function to examine
+the stack and record the ancestor functions of the malloc() call. When
+running the SQLite test suite, the heavy wrapper also records the name of
+the current test case. These latter two features are useful for
+tracking down the source of memory leaks detected by the test suite.</p>
+
+<p>The heavy wrapper that is used when <a href="compile.html#memdebug">SQLITE_MEMDEBUG</a> is set also
+makes sure each new allocation is filled with nonsense data prior to
+returning the allocation to the caller. And as soon as an allocation
+is free, it is again filled with nonsense data. These two actions help
+to ensure that the SQLite core does not make assumptions about the state
+of newly allocated memory and that memory allocations are not used after
+they have been freed.</p>
+
+<p>The heavy wrapper employed by <a href="compile.html#memdebug">SQLITE_MEMDEBUG</a> is intended for use
+only during testing, analysis, and debugging of SQLite. The heavy wrapper
+has a significant performance and memory overhead and probably should not
+be used in production.</p>
+
+<a name="win32heap"></a>
+
+<h3 id="the_win32_native_memory_allocator"><span>3.1.3. </span>The Win32 native memory allocator</h3>
+
+<p>If SQLite is compiled for Windows with the <a href="compile.html#win32_malloc">SQLITE_WIN32_MALLOC</a>
+compile-time option, then a different, thin wrapper is used around
+HeapAlloc(), HeapReAlloc(), and HeapFree(). The thin wrapper uses the
+configured SQLite heap, which will be different from the default process
+heap if the <a href="compile.html#win32_heap_create">SQLITE_WIN32_HEAP_CREATE</a> compile-time option is used. In
+addition, when an allocation is made or freed, HeapValidate() will be
+called if SQLite is compiled with assert() enabled and the
+<a href="compile.html#win32_malloc_validate">SQLITE_WIN32_MALLOC_VALIDATE</a> compile-time option.</p>
+
+<a name="memsys5"></a>
+
+<h3 id="zero_malloc_memory_allocator"><span>3.1.4. </span>Zero-malloc memory allocator</h3>
+
+<p>When SQLite is compiled with the <a href="compile.html#enable_memsys5">SQLITE_ENABLE_MEMSYS5</a> option, an
+alternative memory allocator that does not use malloc() is included in the
+build. The SQLite developers refer to this alternative memory allocator
+as "memsys5". Even when it is included in the build, memsys5 is
+disabled by default.
+To enable memsys5, the application must invoke the following SQLite
+interface at start-time:</p>
+
+<blockquote><pre>
+<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a>, pBuf, szBuf, mnReq);
+</pre></blockquote>
+
+<p>In the call above, pBuf is a pointer to a large, contiguous chunk
+of memory space that SQLite will use to satisfy all of its memory
+allocation needs. pBuf might point to a static array or it might
+be memory obtained from some other application-specific mechanism.
+szBuf is an integer that is the number of bytes of memory space
+pointed to by pBuf. mnReq is another integer that is the
+minimum size of an allocation. Any call to <a href="c3ref/free.html">sqlite3_malloc(N)</a> where
+N is less than mnReq will be rounded up to mnReq. mnReq must be
+a power of two. We shall see later that the mnReq parameter is
+important in reducing the value of <b>n</b> and hence the minimum memory
+size requirement in the <a href="malloc.html#nofrag">Robson proof</a>.</p>
+
+<p>The memsys5 allocator is designed for use on embedded systems,
+though there is nothing to prevent its use on workstations.
+The szBuf is typically between a few hundred kilobytes up to a few
+dozen megabytes, depending on system requirements and memory budget.</p>
+
+<p>The algorithm used by memsys5 can be called "power-of-two,
+first-fit". The sizes of all memory allocation
+requests are rounded up to a power of two and the request is satisfied
+by the first free slot in pBuf that is large enough. Adjacent freed
+allocations are coalesced using a buddy system. When used appropriately,
+this algorithm provides mathematical guarantees against fragmentation and
+breakdown, as described further <a href="#nofrag">below</a>.</p>
+
+<a name="memsysx"></a>
+
+<h3 id="experimental_memory_allocators"><span>3.1.5. </span>Experimental memory allocators</h3>
+
+<p>The name "memsys5" used for the zero-malloc memory allocator implies
+that there are several additional memory allocators available, and indeed
+there are. The default memory allocator is "memsys1". The debugging
+memory allocator is "memsys2". Those have already been covered.</p>
+
+<p>If SQLite is compiled with <a href="compile.html#enable_memsys3">SQLITE_ENABLE_MEMSYS3</a> then another
+zero-malloc memory allocator, similar to memsys5, is included in the
+source tree. The memsys3 allocator, like memsys5, must be activated
+by a call to <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a>,...). Memsys3
+uses the memory buffer supplied as its source for all memory allocations.
+The difference between memsys3 and memsys5 is that memsys3 uses a
+different memory allocation algorithm that seems to work well in
+practice, but which does not provide mathematical
+guarantees against memory fragmentation and breakdown. Memsys3 was
+a predecessor to memsys5. The SQLite developers now believe that
+memsys5 is superior to
+memsys3 and that all applications that need a zero-malloc memory
+allocator should use memsys5 in preference to memsys3. Memsys3 is
+considered both experimental and deprecated and will likely be removed
+from the source tree in a future release of SQLite.</p>
+
+<p>Memsys4 and memsys6 were experimental memory allocators
+introduced in around 2007 and subsequently removed from the
+source tree in around 2008, after it became clear that they
+added no new value.</p>
+
+<p>Other experimental memory allocators might be added in future releases
+of SQLite. One may anticipate that these will be called memsys7, memsys8,
+and so forth.</p>
+
+<a name="appalloc"></a>
+<h3 id="application_defined_memory_allocators"><span>3.1.6. </span>Application-defined memory allocators</h3>
+
+<p>New memory allocators do not have to be part of the SQLite source tree
+nor included in the sqlite3.c <a href="amalgamation.html">amalgamation</a>. Individual applications can
+supply their own memory allocators to SQLite at start-time.</p>
+
+<p>To cause SQLite to use a new memory allocator, the application
+simply calls:</p>
+
+<blockquote><pre>
+<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a>, pMem);
+</pre></blockquote>
+
+<p>In the call above, pMem is a pointer to an <a href="c3ref/mem_methods.html">sqlite3_mem_methods</a> object
+that defines the interface to the application-specific memory allocator.
+The <a href="c3ref/mem_methods.html">sqlite3_mem_methods</a> object is really just a structure containing
+pointers to functions to implement the various memory allocation primitives.
+</p>
+
+<p>In a multi-threaded application, access to the <a href="c3ref/mem_methods.html">sqlite3_mem_methods</a>
+is serialized if and only if <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> is enabled.
+If <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> is disabled then the methods in
+<a href="c3ref/mem_methods.html">sqlite3_mem_methods</a> must take care of their own serialization needs.</p>
+
+<a name="overlayalloc"></a>
+<h3 id="memory_allocator_overlays"><span>3.1.7. </span>Memory allocator overlays</h3>
+
+<p>An application can insert layers or "overlays" in between the
+SQLite core and the underlying memory allocator.
+For example, the <a href="#oomtesting">out-of-memory test logic</a>
+for SQLite uses an overlay that can simulate memory allocation
+failures.</p>
+
+<p>An overlay can be created by using the</p>
+
+<blockquote><pre>
+<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiggetmalloc">SQLITE_CONFIG_GETMALLOC</a>, pOldMem);
+</pre></blockquote>
+
+<p>interface to obtain pointers to the existing memory allocator.
+The existing allocator is saved by the overlay and is used as
+a fallback to do real memory allocation. Then the overlay is
+inserted in place of the existing memory allocator using
+the <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a>,...) as described
+<a href="#appalloc">above</a>.
+
+<a name="stuballoc"></a>
+</p><h3 id="no_op_memory_allocator_stub"><span>3.1.8. </span>No-op memory allocator stub</h3>
+
+<p>If SQLite is compiled with the <a href="compile.html#zero_malloc">SQLITE_ZERO_MALLOC</a> option, then
+the <a href="malloc.html#defaultalloc">default memory allocator</a> is omitted and replaced by a stub
+memory allocator that never allocates any memory. Any calls to the
+stub memory allocator will report back that no memory is available.</p>
+
+<p>The no-op memory allocator is not useful by itself. It exists only
+as a placeholder so that SQLite has a memory allocator to link against
+on systems that may not have malloc(), free(), or realloc() in their
+standard library.
+An application that is compiled with <a href="compile.html#zero_malloc">SQLITE_ZERO_MALLOC</a> will need to
+use <a href="c3ref/config.html">sqlite3_config()</a> together with <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a> or
+<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a> to specify a new alternative memory allocator
+before beginning to use SQLite.</p>
+
+<a name="pagecache"></a>
+
+<h2 id="_page_cache_memory"><span>3.2. </span> Page cache memory</h2>
+
+<p>In most applications, the database page cache subsystem within
+SQLite uses more dynamically allocated memory than all other parts
+of SQLite combined. It is not unusual to see the database page cache
+consume over 10 times more memory than the rest of SQLite combined.</p>
+
+<p>SQLite can be configured to make page cache memory allocations from
+a separate and distinct memory pool of fixed-size
+slots. This can have two advantages:</p>
+
+<ul>
+<li><p>
+Because allocations are all the same size, the memory allocator can
+operate much faster. The allocator need not bother with coalescing
+adjacent free slots or searching for a slot
+of an appropriate size. All unallocated memory slots can be stored on
+a linked list. Allocating consists of removing the first entry from the
+list. Deallocating is simply adding an entry to the beginning of the list.
+</p></li>
+
+<li><p>
+With a single allocation size, the <b>n</b> parameter in the
+<a href="malloc.html#nofrag">Robson proof</a> is 1, and the total memory space required by the allocator
+(<b>N</b>) is exactly equal to maximum memory used (<b>M</b>).
+No additional memory is required to cover fragmentation overhead, thus
+reducing memory requirements. This is particularly important for the
+page cache memory since the page cache constitutes the largest component
+of the memory needs of SQLite.
+</p></li>
+</ul>
+
+<p>The page-cache memory allocator is disabled by default.
+An application can enable it at start-time as follows:</p>
+
+<blockquote><pre>
+<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>, pBuf, sz, N);
+</pre></blockquote>
+
+<p>The pBuf parameter is a pointer to a contiguous range of bytes that
+SQLite will use for page-cache memory allocations. The buffer must be
+at least sz*N bytes in size. The "sz" parameter
+is the size of each page-cache allocation. N is the maximum
+number of available allocations.</p>
+
+<p>If SQLite needs a page-cache entry that is larger than "sz" bytes or
+if it needs more than N entries, it falls back to using the
+general-purpose memory allocator.</p>
+
+<a name="lookaside"></a>
+
+<h2 id="_lookaside_memory_allocator"><span>3.3. </span> Lookaside memory allocator</h2>
+
+<p>SQLite <a href="c3ref/sqlite3.html">database connections</a> make many
+small and short-lived memory allocations.
+This occurs most commonly when compiling SQL statements using
+<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> but also to a lesser extent when running
+<a href="c3ref/stmt.html">prepared statements</a> using <a href="c3ref/step.html">sqlite3_step()</a>. These small memory
+allocations are used to hold things such as the names of tables
+and columns, parse tree nodes, individual query results values,
+and B-Tree cursor objects. There are consequently
+many calls to malloc() and free() - so many calls that malloc() and
+free() end up using a significant fraction of the CPU time assigned
+to SQLite.</p>
+
+<p>SQLite <a href="releaselog/3_6_1.html">version 3.6.1</a> (2008-08-06)
+introduced the lookaside memory allocator to
+help reduce the memory allocation load. In the lookaside allocator,
+each <a href="c3ref/sqlite3.html">database connection</a> preallocates a single large chunk of memory
+(typically in the range of 60 to 120 kilobytes) and divides that chunk
+up into small fixed-size "slots" of around 100 to 1000 byte each. This
+becomes the lookaside memory pool. Thereafter, memory allocations
+associated with the <a href="c3ref/sqlite3.html">database connection</a> and that are not too large
+are satisfied using one of the lookaside pool slots rather than by calling
+the general-purpose memory allocator. Larger allocations continue to
+use the general-purpose memory allocator, as do allocations that occur
+when the lookaside pool slots are all checked out.
+But in many cases, the memory
+allocations are small enough and there are few enough outstanding that
+the new memory requests can be satisfied from the lookaside
+pool.</p>
+
+<p>Because lookaside allocations are always the same size, the allocation
+and deallocation algorithms are very quick. There is no
+need to coalesce adjacent free slots or search for a slot
+of a particular size. Each <a href="c3ref/sqlite3.html">database connection</a> maintains a singly-linked
+list of unused slots. Allocation requests simply pull the first
+element of this list. Deallocations simply push the element back onto
+the front of the list.
+Furthermore, each <a href="c3ref/sqlite3.html">database connection</a> is assumed to already be
+running in a single thread (there are mutexes already in
+place to enforce this) so no additional mutexing is required to
+serialize access to the lookaside slot freelist.
+Consequently, lookaside memory
+allocations and deallocations are very fast. In speed tests on
+Linux and Mac OS X workstations, SQLite has shown overall performance
+improvements as high as 10% and 15%, depending on the workload how
+and lookaside is configured.</p>
+
+<p>The size of the lookaside memory pool has a global default value
+but can also be configured on a connection-by-connection basis.
+To change the default size of the lookaside memory pool at
+compile-time, use the
+<a href="compile.html#default_lookaside">-DSQLITE_DEFAULT_LOOKASIDE=<i>SZ,N</i></a>
+option.
+To change the default size of the lookaside memory pool at
+start-time, use the <a href="c3ref/config.html">sqlite3_config()</a> interface:</p>
+
+<blockquote><pre>
+<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a>, sz, cnt);
+</pre></blockquote>
+
+<p>The "sz" parameter is the size in bytes of each lookaside slot.
+The "cnt" parameter is
+the total number of lookaside memory slots per database connection.
+The total amount
+of lookaside memory allocated to each <a href="c3ref/sqlite3.html">database connection</a> is
+sz*cnt bytes.
+</p>
+
+<p>The lookaside pool can be changed for an individual
+<a href="c3ref/sqlite3.html">database connection</a> "db" using this call:</p>
+
+<blockquote><pre>
+<a href="c3ref/db_config.html">sqlite3_db_config</a>(db, <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">SQLITE_DBCONFIG_LOOKASIDE</a>, pBuf, sz, cnt);
+</pre></blockquote>
+
+<p>The "pBuf" parameter is a pointer to memory space that will be
+used for the lookaside memory pool. If pBuf is NULL, then SQLite
+will obtain its own space for the memory pool using <a href="c3ref/free.html">sqlite3_malloc()</a>.
+The "sz" and "cnt" parameters are the size of each lookaside slot
+and the number of slots, respectively. If pBuf is not NULL, then it
+must point to at least sz*cnt bytes of memory.</p>
+
+<p>The lookaside configuration can only be changed while there are
+no outstanding lookaside allocations for the database connection.
+Hence, the configuration should be set immediately after creating the
+database connection using <a href="c3ref/open.html">sqlite3_open()</a> (or equivalent) and before
+evaluating any SQL statements on the connection.</p>
+
+<h3 id="two_size_lookaside"><span>3.3.1. </span>Two-Size Lookaside</h3>
+
+<p>
+Beginning with SQLite version 3.31.0 (2020-01-22),
+lookaside supports two memory pools, each with a different size
+slot. The small-slot pool uses 128-byte slots and the large-slot
+pool uses whatever size is specified by <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">SQLITE_DBCONFIG_LOOKASIDE</a>
+(defaulting to 1200 bytes). Splitting the pool in two like this
+allows memory allocations to be covered by lookaside more often
+while at the same time reducing per-database-connection heap usage
+from 120KB down to 48KB.
+
+</p><p>
+Configuration continues to use the SQLITE_DBCONFIG_LOOKASIDE or
+SQLITE_CONFIG_LOOKASIDE configuration options, as described above,
+with parameters "sz" and "cnt". The total heap space used for
+lookaside continues to be sz*cnt bytes. But the space is allocated
+between the small-slot lookaside and big-slot lookaside, with
+preference given to small-slot lookaside. The total number of
+slots will usually exceed "cnt", since "sz" is typically much
+larger than the small-slot size of 128 bytes.
+
+</p><p>
+The default lookaside configuration has changed from 100 slots
+of 1200 bytes each (120KB) to be 40 slots of 1200 bytes each
+(48KB). This space ends up being allocated as 93 slots of
+128 bytes each and 30 slots of 1200 bytes each. So more lookaside
+slots are available but much less heap space is used.
+
+</p><p>
+The default lookaside configuration, the size of the small-slots,
+and the details of how heap space is allocated between small-slots
+and big-slots, are all subject to change from one release to the
+next.
+
+
+<a name="memstatus"></a>
+
+</p><h2 id="_memory_status"><span>3.4. </span> Memory status</h2>
+
+<p>By default, SQLite keeps statistics on its memory usage. These
+statistics are useful in helping to determine how much memory an
+application really needs. The statistics can also be used in
+high-reliability system to determine
+if the memory usage is coming close to or exceeding the limits
+of the <a href="malloc.html#nofrag">Robson proof</a> and hence that the memory allocation subsystem is
+liable to breakdown.</p>
+
+<p>Most memory statistics are global, and therefore the tracking of
+statistics must be serialized with a mutex. Statistics are turned
+on by default, but an option exists to disable them. By disabling
+memory statistics,
+SQLite avoids entering and leaving a mutex on each memory allocation
+and deallocation. That savings can be noticeable on systems where
+mutex operations are expensive. To disable memory statistics, the
+following interface is used at start-time:</p>
+
+<blockquote><pre>
+<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a>, onoff);
+</pre></blockquote>
+
+<p>The "onoff" parameter is true to enable the tracking of memory
+statistics and false to disable statistics tracking.</p>
+
+<p>Assuming statistics are enabled, the following routine can be used
+to access them:</p>
+
+<blockquote><pre>
+<a href="c3ref/status.html">sqlite3_status</a>(<a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">verb</a>, &amp;current, &amp;highwater, resetflag);
+</pre></blockquote>
+
+<p>The "verb" argument determines what statistic is accessed.
+There are <a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">various verbs</a> defined. The
+list is expected to grow as the <a href="c3ref/status.html">sqlite3_status()</a> interface matures.
+The current value the selected parameter is written into integer
+"current" and the highest historical value
+is written into integer "highwater". If resetflag is true, then
+the high-water mark is reset down to the current value after the call
+returns.</p>
+
+<p>A different interface is used to find statistics associated with a
+single <a href="c3ref/sqlite3.html">database connection</a>:</p>
+
+<blockquote><pre>
+<a href="c3ref/db_status.html">sqlite3_db_status</a>(db, <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasideused">verb</a>, &amp;current, &amp;highwater, resetflag);
+</pre></blockquote>
+
+<p>This interface is similar except that it takes a pointer to
+a <a href="c3ref/sqlite3.html">database connection</a> as its first argument and returns statistics about
+that one object rather than about the entire SQLite library.
+The <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface currently only recognizes a
+single verb <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasideused">SQLITE_DBSTATUS_LOOKASIDE_USED</a>, though additional verbs
+may be added in the future.</p>
+
+<p>The per-connection statistics do not use global variables and hence
+do not require mutexes to update or access. Consequently the
+per-connection statistics continue to function even if
+<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a> is turned off.</p>
+
+<a name="heaplimit"></a>
+<h2 id="_setting_memory_usage_limits"><span>3.5. </span> Setting memory usage limits</h2>
+
+<p>The <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interface can be used to set an
+upper bound on the total amount of outstanding memory that the
+general-purpose memory allocator for SQLite will allow to be outstanding
+at one time. If attempts are made to allocate more memory than specified
+by the soft heap limit, then SQLite will first attempt to free cache
+memory before continuing with the allocation request. The soft heap
+limit mechanism only works if <a href="malloc.html#memstatus">memory statistics</a> are enabled and
+it works best
+if the SQLite library is compiled with the <a href="compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a>
+compile-time option.</p>
+
+<p>The soft heap limit is "soft" in this sense: If SQLite is not able
+to free up enough auxiliary memory to stay below the limit, it goes
+ahead and allocates the extra memory and exceeds its limit. This occurs
+under the theory that it is better to use additional memory than to fail
+outright.</p>
+
+<p>As of SQLite <a href="releaselog/3_6_1.html">version 3.6.1</a> (2008-08-06),
+the soft heap limit only applies to the
+general-purpose memory allocator. The soft heap limit does not know
+about or interact with
+the <a href="malloc.html#pagecache">pagecache memory allocator</a> or the <a href="malloc.html#lookaside">lookaside memory allocator</a>.
+This deficiency will likely be addressed in a future release.</p>
+
+<a name="nofrag"></a>
+
+<h1 id="_mathematical_guarantees_against_memory_allocation_failures"><span>4. </span> Mathematical Guarantees Against Memory Allocation Failures</h1>
+
+<p>The problem of dynamic memory allocation, and specifically the
+problem of a memory allocator breakdown, has been studied by
+J. M. Robson and the results published as:</p>
+
+<blockquote>
+J. M. Robson. "Bounds for Some Functions Concerning Dynamic
+Storage Allocation". <i>Journal of the Association for
+Computing Machinery</i>, Volume 21, Number 8, July 1974,
+pages 491-499.
+</blockquote>
+
+<p>Let us use the following notation (similar but not identical to
+Robson's notation):</p>
+
+<blockquote>
+<table cellpadding="10" border="0">
+<tr><td valign="top"><b>N</b></td>
+<td valign="top">
+The amount of raw memory needed by the memory allocation system
+in order to guarantee that no memory allocation will ever fail.
+</td></tr>
+<tr><td valign="top"><b>M</b></td>
+<td valign="top">
+The maximum amount of memory that the application ever has checked out
+at any point in time.
+</td></tr>
+<tr><td valign="top"><b>n</b></td>
+<td valign="top">
+The ratio of the largest memory allocation to the smallest. We assume
+that every memory allocation size is an integer multiple of the smallest memory
+allocation size.
+</td></tr>
+</table>
+</blockquote>
+
+<p>Robson proves the following result:</p>
+
+<blockquote>
+<b>N</b> = <b>M</b>*(1 + (log<sub>2</sub> <b>n</b>)/2) - <b>n</b> + 1
+</blockquote>
+
+<p>Colloquially, the Robson proof shows that in order to guarantee
+breakdown-free operation, any memory allocator must use a memory pool
+of size <b>N</b> which exceeds the maximum amount of memory ever
+used <b>M</b> by a multiplier that depends on <b>n</b>,
+the ratio of the largest to the smallest allocation size. In other
+words, unless all memory allocations are of exactly the same size
+(<b>n</b>=1) then the system needs access to more memory than it will
+ever use at one time. Furthermore, we see that the amount of surplus
+memory required grows rapidly as the ratio of largest to smallest
+allocations increases, and so there is strong incentive to keep all
+allocations as near to the same size as possible.</p>
+
+<p>Robson's proof is constructive.
+He provides an algorithm for computing a sequence of allocation
+and deallocation operations that will lead to an allocation failure due to
+memory fragmentation if available memory is as much as one byte
+less than <b>N</b>.
+And, Robson shows that a power-of-two first-fit memory allocator
+(such as implemented by <a href="malloc.html#memsys5">memsys5</a>) will never fail a memory allocation
+provided that available memory is <b>N</b> or more bytes.</p>
+
+<p>The values <b>M</b> and <b>n</b> are properties of the application.
+If an application is constructed in such a way that both <b>M</b> and
+<b>n</b> are known, or at least have known upper bounds, and if the
+application uses
+the <a href="malloc.html#memsys5">memsys5</a> memory allocator and is provided with <b>N</b> bytes of
+available memory space using <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a>
+then Robson proves that no memory allocation request will ever fail
+within the application.
+To put this another way, the application developer can select a value
+for <b>N</b> that will guarantee that no call to any SQLite interface
+will ever return <a href="rescode.html#nomem">SQLITE_NOMEM</a>. The memory pool will never become
+so fragmented that a new memory allocation request cannot be satisfied.
+This is an important property for
+applications where a software fault could cause injury, physical harm, or
+loss of irreplaceable data.</p>
+
+<h2 id="_computing_and_controlling_parameters_m_and_n"><span>4.1. </span> Computing and controlling parameters <b>M</b> and <b>n</b></h2>
+
+<p>The Robson proof applies separately to each of the memory allocators
+used by SQLite:</p>
+
+<ul>
+<li>The general-purpose memory allocator (<a href="malloc.html#memsys5">memsys5</a>).</li>
+<li>The <a href="malloc.html#pagecache">pagecache memory allocator</a>.</li>
+<li>The <a href="malloc.html#lookaside">lookaside memory allocator</a>.</li>
+</ul>
+
+<p>For allocators other than <a href="malloc.html#memsys5">memsys5</a>,
+all memory allocations are of the same size. Hence, <b>n</b>=1
+and therefore <b>N</b>=<b>M</b>. In other words, the memory pool need
+be no larger than the largest amount of memory in use at any given moment.</p>
+
+<p>The usage of pagecache memory is somewhat harder to control in
+SQLite version 3.6.1, though mechanisms are planned for subsequent
+releases that will make controlling pagecache memory much easier.
+Prior to the introduction of these new mechanisms, the only way
+to control pagecache memory is using the <a href="pragma.html#pragma_cache_size">cache_size pragma</a>.</p>
+
+<p>Safety-critical applications will usually want to modify the
+default lookaside memory configuration so that when the initial
+lookaside memory buffer is allocated during <a href="c3ref/open.html">sqlite3_open()</a> the
+resulting memory allocation is not so large as to force the <b>n</b>
+parameter to be too large. In order to keep <b>n</b> under control,
+it is best to try to keep the largest memory allocation below 2 or 4
+kilobytes. Hence, a reasonable default setup for the lookaside
+memory allocator might any one of the following:</p>
+
+<blockquote><pre>
+sqlite3_config(SQLITE_CONFIG_LOOKASIDE, 32, 32); /* 1K */
+sqlite3_config(SQLITE_CONFIG_LOOKASIDE, 64, 32); /* 2K */
+sqlite3_config(SQLITE_CONFIG_LOOKASIDE, 32, 64); /* 2K */
+sqlite3_config(SQLITE_CONFIG_LOOKASIDE, 64, 64); /* 4K */
+</pre></blockquote>
+
+<p>Another approach is to initially disable the lookaside memory
+allocator:</p>
+
+<blockquote><pre>
+sqlite3_config(SQLITE_CONFIG_LOOKASIDE, 0, 0);
+</pre></blockquote>
+
+<p>Then let the application maintain a separate pool of larger
+lookaside memory buffers that it can distribute to <a href="c3ref/sqlite3.html">database connections</a>
+as they are created. In the common case, the application will only
+have a single <a href="c3ref/sqlite3.html">database connection</a> and so the lookaside memory pool
+can consist of a single large buffer.</p>
+
+<blockquote><pre>
+sqlite3_db_config(db, SQLITE_DBCONFIG_LOOKASIDE, aStatic, 256, 500);
+</pre></blockquote>
+
+<p>The lookaside memory allocator is really intended as performance
+optimization, not as a method for assuring breakdown-free memory allocation,
+so it is not unreasonable to completely disable the lookaside memory
+allocator for safety-critical operations.</p>
+
+<p>The general purpose memory allocator is the most difficult memory pool
+to manage because it supports allocations of varying sizes. Since
+<b>n</b> is a multiplier on <b>M</b> we want to keep <b>n</b> as small
+as possible. This argues for keeping the minimum allocation size for
+<a href="malloc.html#memsys5">memsys5</a> as large as possible. In most applications, the
+<a href="malloc.html#lookaside">lookaside memory allocator</a> is able to handle small allocations. So
+it is reasonable to set the minimum allocation size for <a href="malloc.html#memsys5">memsys5</a> to
+2, 4 or even 8 times the maximum size of a lookaside allocation.
+A minimum allocation size of 512 is a reasonable setting.</p>
+
+<p>Further to keeping <b>n</b> small, one desires to keep the size of
+the largest memory allocations under control.
+Large requests to the general-purpose memory allocator
+might come from several sources:</p>
+
+<ol>
+<li>SQL table rows that contain large strings or BLOBs.</li>
+<li>Complex SQL queries that compile down to large <a href="c3ref/stmt.html">prepared statements</a>.</li>
+<li>SQL parser objects used internally by <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>.</li>
+<li>Storage space for <a href="c3ref/sqlite3.html">database connection</a> objects.</li>
+<li>Page cache memory allocations that overflow into the general-purpose
+ memory allocator.</li>
+<li>Lookaside buffer allocations for new <a href="c3ref/sqlite3.html">database connections</a>.</li>
+</ol>
+
+<p>The last two allocations can be controlled and/or eliminated by
+configuring the <a href="malloc.html#pagecache">pagecache memory allocator</a>,
+and <a href="malloc.html#lookaside">lookaside memory allocator</a> appropriately, as described above.
+The storage space required for <a href="c3ref/sqlite3.html">database connection</a> objects depends
+to some extent on the length of the filename of the database file, but
+rarely exceeds 2KB on 32-bit systems. (More space is required on
+64-bit systems due to the increased size of pointers.)
+Each parser object uses about 1.6KB of memory. Thus, elements 3 through 6
+above can easily be controlled to keep the maximum memory allocation
+size below 2KB.</p>
+
+<p>If the application is designed to manage data in small pieces,
+then the database should never contain any large strings or BLOBs
+and hence element 1 above should not be a factor. If the database
+does contain large strings or BLOBs, they should be read using
+<a href="c3ref/blob.html">incremental BLOB I/O</a> and rows that contain the
+large strings or BLOBs should never be update by any means other
+than <a href="c3ref/blob.html">incremental BLOB I/O</a>. Otherwise, the
+<a href="c3ref/step.html">sqlite3_step()</a> routine will need to read the entire row into
+contiguous memory at some point, and that will involve at least
+one large memory allocation.</p>
+
+<p>The final source of large memory allocations is the space to hold
+the <a href="c3ref/stmt.html">prepared statements</a> that result from compiling complex SQL
+operations. Ongoing work by the SQLite developers is reducing the
+amount of space required here. But large and complex queries might
+still require <a href="c3ref/stmt.html">prepared statements</a> that are several kilobytes in
+size. The only workaround at the moment is for the application to
+break complex SQL operations up into two or more smaller and simpler
+operations contained in separate <a href="c3ref/stmt.html">prepared statements</a>.</p>
+
+<p>All things considered, applications should normally be able to
+hold their maximum memory allocation size below 2K or 4K. This
+gives a value for log<sub>2</sub>(<b>n</b>) of 2 or 3. This will
+limit <b>N</b> to between 2 and 2.5 times <b>M</b>.</p>
+
+<p>The maximum amount of general-purpose memory needed by the application
+is determined by such factors as how many simultaneous open
+<a href="c3ref/sqlite3.html">database connection</a> and <a href="c3ref/stmt.html">prepared statement</a> objects the application
+uses, and on the complexity of the <a href="c3ref/stmt.html">prepared statements</a>. For any
+given application, these factors are normally fixed and can be
+determined experimentally using <a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">SQLITE_STATUS_MEMORY_USED</a>.
+A typical application might only use about 40KB of general-purpose
+memory. This gives a value of <b>N</b> of around 100KB.</p>
+
+<h2 id="_ductile_failure"><span>4.2. </span> Ductile failure</h2>
+
+<p>If the memory allocation subsystems within SQLite are configured
+for breakdown-free operation but the actual memory usage exceeds
+design limits set by the <a href="malloc.html#nofrag">Robson proof</a>, SQLite will usually continue
+to operate normally.
+The <a href="malloc.html#pagecache">pagecache memory allocator</a>
+and the <a href="malloc.html#lookaside">lookaside memory allocator</a> automatically failover
+to the <a href="malloc.html#memsys5">memsys5</a> general-purpose memory allocator. And it is usually the
+case that the <a href="malloc.html#memsys5">memsys5</a> memory allocator will continue to function
+without fragmentation even if <b>M</b> and/or <b>n</b> exceeds the limits
+imposed by the <a href="malloc.html#nofrag">Robson proof</a>. The <a href="malloc.html#nofrag">Robson proof</a> shows that it is
+possible for a memory allocation to break down and fail in this
+circumstance, but such a failure requires an especially
+despicable sequence of allocations and deallocations - a sequence that
+SQLite has never been observed to follow. So in practice it is usually
+the case that the limits imposed by Robson can be exceeded by a
+considerable margin with no ill effect.</p>
+
+<p>Nevertheless, application developers are admonished to monitor
+the state of the memory allocation subsystems and raise alarms when
+memory usage approaches or exceeds Robson limits. In this way,
+the application will provide operators with abundant warning well
+in advance of failure.
+The <a href="malloc.html#memstatus">memory statistics</a> interfaces of SQLite provide the application with
+all the mechanism necessary to complete the monitoring portion of
+this task.</p>
+
+<a name="stability"></a>
+<h1 id="_stability_of_memory_interfaces"><span>5. </span> Stability Of Memory Interfaces</h1>
+
+<p><b>Update:</b> As of SQLite version 3.7.0 (2010-07-21),
+all of SQLite memory allocation interfaces
+are considered stable and will be supported in future releases.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/malloc.in?m=fc088f2b1c81a009c">2022-01-28 19:28:24</a> UTC </small></i></p>
+
diff --git a/www/memstat.html b/www/memstat.html
new file mode 100644
index 0000000..53333c2
--- /dev/null
+++ b/www/memstat.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The SQLITE_MEMSTAT Virtual Table</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The SQLITE_MEMSTAT Virtual Table
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+The SQLITE_MEMSTAT extension implements an <a href="vtab.html#epoonlyvtab">eponymous-only virtual table</a> that
+provides SQL access to the <a href="c3ref/status.html">sqlite3_status64()</a> and
+<a href="c3ref/db_status.html">sqlite3_db_status()</a> interfaces.
+</p>
+
+<p>
+The SQLITE_STMT extension can also be loaded at run-time
+by compiling the extension into a shared library or DLL using the source
+code at <a href="https://sqlite.org/src/file/ext/misc/memstat.c">https://sqlite.org/src/file/ext/misc/memstat.c</a> and following the
+instructions for how to <a href="loadext.html#build">compile loadable extensions</a>.
+</p>
+
+<h1 id="usage"><span>2. </span>Usage</h1>
+
+<p>
+The SQLITE_MEMSTAT virtual table is a read-only table that can be
+queried to determine performance characteristics (primarily the
+amount of memory being used) of the current instance of SQLite.
+The SQLITE_MEMSTATE table is essentially a wrapper around the
+C-language APIs <a href="c3ref/status.html">sqlite3_status64()</a> and <a href="c3ref/db_status.html">sqlite3_db_status()</a>.
+If the
+<a href="https://sqlite.org/src/file/ext/misc/memstat.c">memstat.c</a> source
+file is compiled with the -DSQLITE_ENABLE_ZIPVFS option, then SQLITE_MEMSTAT
+will also do some <a href="c3ref/file_control.html">file-control</a> calls to extract
+memory usage information about the
+<a href="https://www.hwaci.com/sw/sqlite/zipvfs.html">ZIPVFS</a> subsystem,
+if that subsystem as been licensed, installed, and is in use.
+
+</p><p>
+The SQLITE_MEMSTAT table appears to have the following schema:
+
+</p><div class="codeblock"><pre>CREATE TABLE sqlite_memstat(
+ name TEXT,
+ schema TEXT,
+ value INT,
+ hiwtr INT
+);
+</pre></div>
+
+<p>
+Each row of the SQLITE_MEMSTAT table corresponds to a single call to
+one of the <a href="c3ref/status.html">sqlite3_status64()</a> or <a href="c3ref/db_status.html">sqlite3_db_status()</a> interfaces.
+The NAME column of the row identifies which "verb" was passed to those
+interfaces. For example, if <a href="c3ref/status.html">sqlite3_status64()</a> is invoked with
+<a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">SQLITE_STATUS_MEMORY_USED</a>, then the NAME column is 'MEMORY_USED'.
+Or if <a href="c3ref/db_status.html">sqlite3_db_status()</a> is invoked with <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused">SQLITE_DBSTATUS_CACHE_USED</a>,
+then the NAME column is "DB_CACHE_USED".
+
+</p><p>
+The SCHEMA column is NULL, except for cases when the <a href="c3ref/file_control.html">sqlite3_file_control()</a>
+interface is used to interrogate the ZIPVFS backend. As this only happens
+when the memstat.c module is compiled with -DSQLITE_ENABLE_ZIPVFS and when
+<a href="https://www.hwaci.com/sw/sqlite/zipvfs.html">ZIPVFS</a> is in use,
+SCHEMA is usually NULL.
+
+</p><p>
+The VALUE and HIWTR columns report the current value of the measure and
+its "high-water mark". The high-water mark is the highest value ever seen
+for the measurement, at least since the last reset. The SQLITE_MEMSTAT
+virtual table does not provide a mechanism for resetting the high-water mark.
+
+</p><p>
+Depending on which parameter is being interrogated, one of the VALUE
+or HIWTR mark measurements might be undefined. For example, only the
+high-water mark is meaningful for <a href="c3ref/c_status_malloc_count.html#sqlitestatusmallocsize">SQLITE_STATUS_MALLOC_SIZE</a>, and
+only the current value is meaningful for <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused">SQLITE_DBSTATUS_CACHE_USED</a>.
+For rows where one or the other of VALUE or HIWTR is not meaningful,
+that value is returned as NULL.
+the
+
+interfaces, with the initial
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/memstat.in?m=4d88e885eb1f60190">2018-09-28 23:43:25</a> UTC </small></i></p>
+
diff --git a/www/mingw.html b/www/mingw.html
new file mode 100644
index 0000000..e4a2557
--- /dev/null
+++ b/www/mingw.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>No Title</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<!-- title>Notes On How To Build MinGW As A Cross-Compiler</title -->
+
+<h1 align=center>
+Notes On How To Build MinGW As A Cross-Compiler
+</h1>
+
+<p><a href="http://www.mingw.org/">MinGW</a>, also known as
+<a href="http://www.mingw.org/">Minimalist GNU For Windows</a>,
+is a version of the popular GCC compiler that builds Win95/Win98/WinNT
+binaries. See the website for details.</p>
+
+<p>This page describes how you can build MinGW
+from sources as a cross-compiler
+running under Linux. Doing so will allow you to construct
+WinNT binaries from the comfort and convenience of your
+Unix desktop.</p>
+
+
+
+<p>Here are the steps:</p>
+
+<ol>
+<li>
+<p>Get a copy of source code. You will need the binutils, the
+compiler, and the MinGW runtime. Each are available separately.
+As of this writing, Mumit Khan has collected everything you need
+together in one FTP site:
+
+<a href="ftp://ftp.nanotech.wisc.edu/pub/khan/gnu-win32/mingw32/snapshots/gcc-2.95.2-1">ftp://ftp.nanotech.wisc.edu/pub/khan/gnu-win32/mingw32/snapshots/gcc-2.95.2-1</a>
+
+The three files you will need are:</p>
+<ul>
+<li>
+ <a href="ftp://ftp.nanotech.wisc.edu/pub/khan/gnu-win32/mingw32/snapshots/gcc-2.95.2-1/binutils-19990818-1-src.tar.gz">binutils-19990818-1-src.tar.gz</a></li><li><a href="ftp://ftp.nanotech.wisc.edu/pub/khan/gnu-win32/mingw32/snapshots/gcc-2.95.2-1/gcc-2.95.2-1-src.tar.gz">gcc-2.95.2-1-src.tar.gz</a></li><li><a href="ftp://ftp.nanotech.wisc.edu/pub/khan/gnu-win32/mingw32/snapshots/gcc-2.95.2-1/mingw-20000203.zip">mingw-20000203.zip</a>
+</li>
+</ul>
+
+<p>Put all the downloads in a directory out of the way. The sequel
+will assume all downloads are in a directory named
+<b>~/mingw/download</b>.</p>
+</li>
+
+<li>
+<p>
+Create a directory in which to install the new compiler suite and make
+the new directory writable.
+Depending on what directory you choose, you might need to become
+root. The example shell commands that follow
+will assume the installation directory is
+<b>/opt/mingw</b> and that your user ID is <b>drh</b>.</p>
+<blockquote><pre>
+su
+mkdir /opt/mingw
+chown drh /opt/mingw
+exit
+</pre></blockquote>
+</li>
+
+<li>
+<p>Unpack the source tarballs into a separate directory.</p>
+<blockquote><pre>
+mkdir ~/mingw/src
+cd ~/mingw/src
+tar xzf ../download/binutils-*.tar.gz
+tar xzf ../download/gcc-*.tar.gz
+unzip ../download/mingw-*.zip
+</pre></blockquote>
+</li>
+
+<li>
+<p>Create a directory in which to put all the build products.</p>
+<blockquote><pre>
+mkdir ~/mingw/bld
+</pre></blockquote>
+</li>
+
+<li>
+<p>Configure and build binutils and add the results to your PATH.</p>
+<blockquote><pre>
+mkdir ~/mingw/bld/binutils
+cd ~/mingw/bld/binutils
+../../src/binutils/configure --prefix=/opt/mingw --target=i386-mingw32 -v
+make 2&gt;&amp;1 | tee make.out
+make install 2&gt;&amp;1 | tee make-install.out
+export PATH=$PATH:/opt/mingw/bin
+</pre></blockquote>
+</li>
+
+<li>
+<p>Manually copy the runtime include files into the installation directory
+before trying to build the compiler.</p>
+<blockquote><pre>
+mkdir /opt/mingw/i386-mingw32/include
+cd ~/mingw/src/mingw-runtime*/mingw/include
+cp -r * /opt/mingw/i386-mingw32/include
+</pre></blockquote>
+</li>
+
+<li>
+<p>Configure and build the compiler</p>
+<blockquote><pre>
+mkdir ~/mingw/bld/gcc
+cd ~/mingw/bld/gcc
+../../src/gcc-*/configure --prefix=/opt/mingw --target=i386-mingw32 -v
+cd gcc
+make installdirs
+cd ..
+make 2&gt;&amp;1 | tee make.out
+make install
+</pre></blockquote>
+</li>
+
+<li>
+<p>Configure and build the MinGW runtime</p>
+<blockquote><pre>
+mkdir ~/mingw/bld/runtime
+cd ~/mingw/bld/runtime
+../../src/mingw-runtime*/configure --prefix=/opt/mingw --target=i386-mingw32 -v
+make install-target-w32api
+make install
+</pre></blockquote>
+</li>
+</ol>
+
+<p>And you are done...</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/mingw.in?m=a96ea79f7a8d660dc">2009-10-30 23:46:08</a> UTC </small></i></p>
+
diff --git a/www/mmap.html b/www/mmap.html
new file mode 100644
index 0000000..b8e3d3d
--- /dev/null
+++ b/www/mmap.html
@@ -0,0 +1,277 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Memory-Mapped I/O</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">Memory-Mapped I/O</h1>
+
+<p>The default mechanism by which SQLite accesses and updates database disk
+files is the xRead() and xWrite() methods of the
+<a href="c3ref/io_methods.html">sqlite3_io_methods</a> VFS object. These methods are typically implemented as
+"read()" and "write()" system calls which cause the operating system
+to copy disk content between the kernel buffer cache and user space.</p>
+
+<p>Beginning with <a href="releaselog/3_7_17.html">version 3.7.17</a> (2013-05-20), SQLite has the option of
+accessing disk content directly using memory-mapped I/O and the new
+xFetch() and xUnfetch() methods on <a href="c3ref/io_methods.html">sqlite3_io_methods</a>.</p>
+
+<p>There are advantages and disadvantages to using memory-mapped I/O.
+Advantages include:</p>
+
+<ol>
+<li><p>Many operations, especially I/O intensive operations, can be
+ faster since content need not be copied between kernel space
+ and user space.</p>
+
+<li><p>The SQLite library may need less RAM since it shares pages with
+ the operating-system page cache and does not always need its own copy of
+ working pages.</p>
+</ol>
+
+<p>But there are also disadvantages:</p>
+
+<ol>
+<li><p>An I/O error on a memory-mapped file cannot be caught and dealt with by
+ SQLite. Instead, the I/O error causes a signal which, if not caught
+ by the application, results in a program crash.</p>
+
+<li><p>The operating system must have a unified buffer cache in order for
+ the memory-mapped I/O extension to work correctly, especially in
+ situations where two processes are accessing the same database
+ file and one process is using memory-mapped I/O while the other
+ is not. Not all operating systems have a unified buffer cache.
+ In some operating systems that claim to have a unified buffer cache,
+ the implementation is buggy and can lead to corrupt databases.</p>
+
+<li><p>Performance does not always increase with memory-mapped I/O. In fact,
+ it is possible to construct test cases where performance is reduced
+ by the use of memory-mapped I/O.</p>
+
+<li><p>Windows is unable to truncate a memory-mapped file. Hence, on Windows,
+ if an operation such as <a href="lang_vacuum.html">VACUUM</a> or <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> tries to reduce the
+ size of a memory-mapped database file, the size reduction attempt will
+ silently fail, leaving unused space at the end of the database file.
+ No data is lost due to this problem, and the unused space will be
+ reused again the next time the database grows. However if a version
+ of SQLite prior to 3.7.0 runs <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> on such a
+ database, it will (incorrectly) report database corruption due to
+ the unused space at the end. Or if a version of SQLite prior to 3.7.0
+ writes to the database while it still has unused space at the end, it
+ may make that unused space inaccessible and unavailable for reuse until
+ after the next <a href="lang_vacuum.html">VACUUM</a>.
+</ol>
+
+<p>Because of the potential disadvantages, memory-mapped I/O is disabled
+by default. To activate memory-mapped I/O, use the <a href="pragma.html#pragma_mmap_size">mmap_size pragma</a>
+and set the mmap_size to some large number, usually 256MB or larger, depending
+on how much address space your application can spare. The rest is
+automatic. The <a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a> statement will be a silent no-op on
+systems that do not support memory-mapped I/O.</p>
+
+<h2>How Memory-Mapped I/O Works</h2>
+
+<p>To read a page of database content using the legacy xRead() method,
+SQLite first allocates a page-size chunk of heap memory then invokes
+the xRead() method which causes the database page content to be copied
+into the newly allocated heap memory. This involves (at a minimum)
+a copy of the entire page.</p>
+
+<p>But if SQLite wants to access a page of the database file and
+memory mapped I/O is enabled, it first calls the xFetch() method.
+The xFetch() method asks the operating system to return a pointer to
+the requested page, if possible. If the requested page has been or
+can be mapped into the application address space, then xFetch returns
+a pointer to that page for SQLite to use without having to copy anything.
+Skipping the copy step is what makes memory mapped I/O faster.</p>
+
+<p>SQLite does not assume that the xFetch() method will work. If
+a call to xFetch() returns a NULL pointer (indicating that the requested
+page is not currently mapped into the applications address space) then
+SQLite silently falls back to using xRead(). An error is only reported
+if xRead() also fails.</p>
+
+<p>When updating the database file, SQLite always makes a copy of the
+page content into heap memory before modifying the page. This is necessary
+for two reasons. First, changes to the database
+are not supposed to be visible to other processes until
+after the transaction commits and so the changes must occur in private memory.
+Second, SQLite uses a read-only memory map to prevent stray pointers in the
+application from overwriting and corrupting the database file.
+
+<p>
+After all needed changes are completed, xWrite() is used to move the content
+back into the database file.
+Hence the use of memory mapped I/O does not significantly change the
+performance of database changes.
+Memory mapped I/O is mostly a benefit for queries.</p>
+
+<h2>Configuring Memory-Mapped I/O</h2>
+
+<p>The "mmap_size" is the maximum number of bytes of the database file that
+SQLite will try to map into the process address space at one time. The
+mmap_size applies separately to each database file, so the total amount
+of process address space that could potentially be used is the mmap_size
+times the number of open database files.</p>
+
+<p>To activate memory-mapped I/O, an application can set the mmap_size to some
+large value. For example:</p>
+
+<blockquote><pre>
+PRAGMA mmap_size=268435456;
+</pre></blockquote>
+
+<p>To disable memory-mapped I/O, simply set the mmap_size to zero:</p>
+
+<blockquote><pre>
+PRAGMA mmap_size=0;
+</pre></blockquote>
+
+<p>If mmap_size is set to N then all current implementations map the first
+N bytes of the database file and use legacy xRead() calls for any content
+beyond N bytes. If the database file is smaller than N bytes, then the entire
+file is mapped. In the future, new OS interfaces could, in theory, map
+regions of the file other than the first N bytes, but no such
+implementation currently exists.</p>
+
+<p>The mmap_size is set separately for each database file using the
+"<a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a>" statement. The usual default mmap_size is zero,
+meaning that memory mapped I/O is disabled by default. However, the
+default mmap_size can be increased either at compile-time using
+the <a href="compile.html#default_mmap_size">SQLITE_DEFAULT_MMAP_SIZE</a> macro or at start-time using the
+<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a>,...) interface.</p>
+
+<p>SQLite also maintains a hard upper bound on the mmap_size. Attempts
+to increase the mmap_size above this hard upper bound (using
+<a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a>) will automatically cap the mmap_size at the hard
+upper bound. If the hard upper bound is zero, then memory mapped I/O
+is impossible. The hard upper bound can be set at compile-time using
+the <a href="compile.html#max_mmap_size">SQLITE_MAX_MMAP_SIZE</a> macro. If <a href="compile.html#max_mmap_size">SQLITE_MAX_MMAP_SIZE</a> is set to
+zero, then the code used to implement memory mapped I/O is omitted from
+the build. The hard upper bound is automatically set to zero on certain
+platforms (ex: OpenBSD) where memory mapped I/O does not work due to the
+lack of a unified buffer cache.</p>
+
+<p>If the hard upper bound on mmap_size is non-zero at compilation time,
+it may still be reduced or zeroed at start-time using the
+<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a>,X,Y) interface. The X and
+Y parameters must both be 64-bit signed integers. The X parameter
+is the default mmap_size of the process and the Y is the new hard upper bound.
+The hard upper bound cannot be increased above its compile-time setting
+using <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a> but it can be reduced or zeroed.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/mmap.in?m=d9fc0c22435f3138c">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/mostdeployed.html b/www/mostdeployed.html
new file mode 100644
index 0000000..af263e1
--- /dev/null
+++ b/www/mostdeployed.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Most Widely Deployed SQL Database Engine</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h2>Most Widely Deployed and Used Database Engine</h2>
+
+<p>SQLite is likely used more than all other database engines
+combined. Billions and billions of copies
+of SQLite exist in the wild. SQLite is found in:
+
+<ul>
+<li>Every Android device
+<li>Every iPhone and iOS device
+<li>Every Mac
+<li>Every Windows10 machine
+<li>Every Firefox, Chrome, and Safari web browser
+<li>Every instance of Skype
+<li>Every instance of iTunes
+<li>Every Dropbox client
+<li>Every TurboTax and QuickBooks
+<li>PHP and Python
+<li>Most television sets and set-top cable boxes
+<li>Most automotive multimedia systems
+<li>Countless millions of other applications
+</ul>
+
+<p>Since SQLite is used extensively in every smartphone, and there are
+more than 4.0 billion (4.0e9) smartphones in active use, each holding
+hundreds of
+SQLite database files, it is seems likely that there are over one trillion
+(1e12) SQLite databases in active use.
+
+<h2>Most Widely Deployed Software Module of Any Type?</h2>
+
+<p>SQLite is probably one of the top five most deployed
+software modules of any description.
+Other libraries with similar reach include:
+
+<ul>
+<li>
+The original <a href="http://zlib.net">zlib</a> implementation by
+Jean-loup Gailly and Mark Adler.
+<li>
+The original reference implementation for
+<a href="http://www.libpng.org">libpng</a>
+<li>
+Libjpeg from the <a href="http://ijg.org">Independent JPEG Group</a>
+</ul>
+
+<p>
+Libc is omitted from the above list even though
+it is more common than SQLite because
+libc is not a single software component but rather several
+competing implementations (ex: BSD vs. GNU) with similar interfaces.
+There are also independent implementations of libjpeg and libpng,
+though in those cases the canonical implementations are very popular.
+</p>
+
+<p>
+Precise numbers are difficult to obtain and so exact rankings
+are impossible. But our best guess is that SQLite is the second
+mostly widely deployed software library, after libz.
+Some commentators observe that SQLite tends
+to be statically linked and thus have multiple instances on
+each machine, whereas libz tends to have just
+a single instance per machine in the form of a shared library or DLL.
+So even though the number of devices containing libz
+may be greater than the number of
+devices that contain SQLite, the total number of instances per device
+<em>might</em> be higher for SQLite and so SQLite <em>might</em>
+be the single most widely deployed and used software component.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/mostdeployed.in?m=e39f595cab7018aae">2021-06-03 20:37:13</a> UTC </small></i></p>
+
diff --git a/www/news.html b/www/news.html
new file mode 100644
index 0000000..97b4071
--- /dev/null
+++ b/www/news.html
@@ -0,0 +1,748 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Recent SQLite News</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h2>Recent News</h2>
+
+<a name="2022_12_28"></a><h3>2022-12-28 - <a href="releaselog/3_40_1.html">Version 3.40.1</a></h3><blockquote>
+Version 3.40.1 is a patch release that fixes some obscure problems
+in version 3.40.0. The problems fixed have no impact on most applications.
+Upgrading is only necessary if you encounter problems.
+<p>
+The two most important fixes are these:
+<ul>
+<li><p>
+Fix the <a href="cli.html#safemode">--safe command-line option</a> on the <a href="cli.html">CLI</a> so that it
+correctly disallows functions with side-effects. This is a bug
+in the CLI &mdash; <i>not</i> a bug in the
+SQLite library &mdash; and it only affects the --safe command-line
+option, making that option less than fully "safe". As the number
+of systems that use the --safe command-line option in the CLI is
+approximately zero, this is not considered an important bug. However,
+a third-party wrote a CVE against it which caused considerable angst
+among maintainers, so it seems good to get the fix into circulation
+sooner rather than wait on the next major release.
+<li><p>
+The optional <a href="malloc.html#memsys5">memsys5</a> memory allocator picked up a bug that might
+put it into an infinite loop for very large (500MiB) allocations.
+Almost all systems use their native memory allocator, not memsys5.
+Memsys5 is only used if SQLite is compiled using SQLITE_ENABLE_MEMSYS5
+and then initialized using <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a>).
+Very, very few systems do this, and so the problem is not considered
+to be serious.
+</ul>
+<p>
+See the <a href="https://sqlite.org/src/timeline?r=branch-3.40">branch-3.40 timeline</a>
+for a complete listing of changes that have gone into this patch release.
+</blockquote><hr width="50%"><a name="2022_11_16"></a><h3>2022-11-16 - <a href="releaselog/3_40_0.html">Version 3.40.0</a></h3><blockquote>
+Version 3.40.0 is a new feature release of SQLite. See the
+<a href="releaselog/3_40_0.html">change log</a> for details.
+Key enhancements in this release include:
+<ol>
+<li><p>
+Official support for compiling
+<a href="https://sqlite.org/wasm/doc/trunk/index.md">SQLite to WASM</a>
+and running it in a web browser.
+<li><p>
+New and improved <a href="recovery.html">recovery extension</a> for extracting
+data from corrupted database files.
+</ol>
+<p>
+This release also includes performance enhancements and
+improvements to the query planner.
+<p>
+A psychological milestone: The performance benchmark that
+the SQLite developers have used for many years has for
+the first time dropped below 1 billion CPU cycles
+(measured using cachegrind) when run in <a href="wal.html">WAL mode</a>.
+This is less than half the number of CPU cycles used as
+recently as 8 years ago. (The graph below shows SQLite using
+a <a href="lockingv3.html#rollback">rollback journal</a> which uses fewer CPU cycles at the expense
+of extra I/O. The benchmark passed through the 1 billion cycle
+barrier for rollback journals for the previous release.)
+<p align="center">
+<img src="images/sschart20221116.jpg" align="center" style="margin:1px solid grey;"></img>
+</p>
+</blockquote><hr width="50%"><a name="2022_09_29"></a><h3>2022-09-29 - <a href="releaselog/3_39_4.html">Version 3.39.4</a></h3><blockquote>
+Version 3.39.4 is a security release that addresses a single
+long-standing problem in the <a href="fts3.html">FTS3 extension</a>. An attacker
+who is able to execute arbitrary SQL statements and who can create
+a corrupt database that is 2GB or larger in size might be able to trick
+FTS3 into overflowing an integer used to size a memory allocation,
+causing the allocation to be too small and ultimately resulting in
+a buffer overrun. The release also includes fixes for other
+obscure weaknesses, as described in the release notes.
+</blockquote><hr width="50%"><a name="2022_09_05"></a><h3>2022-09-05 - <a href="releaselog/3_39_3.html">Version 3.39.3</a></h3><blockquote>
+Version 3.39.3 is a patch release that fixes a few obscure problems
+in the 3.39.0 release. See the release notes for details.
+</blockquote><hr width="50%"><a name="2022_07_21"></a><h3>2022-07-21 - <a href="releaselog/3_39_2.html">Version 3.39.2</a></h3><blockquote>
+Version 3.39.2 is a security release that addresses multiple long-standing
+issues in SQLite. The most severe problem is identified by CVE-2022-35737.
+That issue is associated with the auxiliary C-language APIs
+of SQLite and cannot be reached using SQL or database inputs, and hence is
+unlikely to affect your application. Nevertheless, upgrading is recommended.
+The other issues are comparatively minor.
+This release also fixes a performance regression that appeared in version
+3.39.0 that might affect some multi-way joins that use LEFT JOIN.
+</blockquote><hr width="50%"><a name="2022_07_13"></a><h3>2022-07-13 - <a href="releaselog/3_39_1.html">Version 3.39.1</a></h3><blockquote>
+Version 3.39.1 is a patch release that fixes a few minor problem in version
+3.39.0. Upgrading is optional.
+</blockquote><hr width="50%"><a name="2022_06_25"></a><h3>2022-06-25 - <a href="releaselog/3_39_0.html">Version 3.39.0</a></h3><blockquote>
+Version 3.39.0 is regular maintenance release of SQLite. The key enhancement
+in this release is added support for RIGHT and FULL JOIN. There are other
+language and performance enhancements as well &mdash; see the
+<a href="releaselog/3_39_0.html">release notes</a> for details.
+</blockquote><hr width="50%"><a name="2022_05_06"></a><h3>2022-05-06 - <a href="releaselog/3_38_5.html">Version 3.38.5</a></h3><blockquote>
+The 3.38.4 patch release included a minor change to the <a href="cli.html">CLI</a> source code
+that did not work. The release manager only ran a subset of the normal
+release tests, and hence did not catch the problem. As a result, the CLI
+will segfault when using columnar output modes in version 3.38.4. This
+blunder did not affect the core SQLite library. It only affected the CLI.
+<p>
+Take-away lesson: <b>Always</b> run <b>all</b> of your tests prior to
+a release - even a trival patch release. <b>Always</b>.
+<p>
+The 3.38.5 patch release fixes the 3.38.4 blunder.
+</blockquote><hr width="50%"><a name="2022_05_04"></a><h3>2022-05-04 - <a href="releaselog/3_38_4.html">Version 3.38.4</a></h3><blockquote>
+Another user-discovered problem in the new Bloom filter optimization
+is fixed in this patch release. Without the fix, it is possible for
+a multi-way join that uses a Bloom filters for two or more tables in
+the join to enter an infinite loop if the key constraint on one of those
+tables contains a NULL value.
+</blockquote><hr width="50%"><a name="2022_04_27"></a><h3>2022-04-27 - <a href="releaselog/3_38_3.html">Version 3.38.3</a></h3><blockquote>
+Version 3.38.3 fixes a bug in the automatic-index and Bloom filter
+construction logic that might cause SQLite to be overly aggressive
+in the use of ON clause constraints, resulting in a incorret
+automatic-index or Bloom filter that excludes some valid rows from
+output. The bug was introduced in version 3.38.0. Other minor
+changes were tossed in to complete the patch.
+</blockquote><hr width="50%"><a name="2022_03_26"></a><h3>2022-03-26 - <a href="releaselog/3_38_2.html">Version 3.38.2</a></h3><blockquote>
+Version 3.38.2 fixes another bug in the new Bloom filter
+optimization that might cause incorrect answers for a
+LEFT JOIN that has an IS NULL constraint on the right-hand
+table.
+</blockquote><hr width="50%"><a name="2022_03_12"></a><h3>2022-03-12 - <a href="releaselog/3_38_1.html">Version 3.38.1</a></h3><blockquote>
+Version 3.38.1 fixes a pair of bugs in the Bloom filter
+optimization that was introduced in version 3.38.0. These
+bugs might cause incorrect answers for some obscure queries.
+Various other minor problems and documentation typos were
+fixed at the same time.
+</blockquote><hr width="50%"><a name="2022_02_22"></a><h3>2022-02-22 - <a href="releaselog/3_38_0.html">Version 3.38.0</a></h3><blockquote>
+Version 3.38.0 is a routine maintenance release of
+SQLite. There are various minor enhancements and
+about a 0.5% reduction in the number of CPU cycles
+used. See the
+<a href="releaselog/3_38_0.html">release notes</a> for
+more detail.
+</blockquote><hr width="50%"><a name="2022_01_06"></a><h3>2022-01-06 - <a href="releaselog/3_37_2.html">Version 3.37.2</a></h3><blockquote>
+Version 3.37.2 fixes a
+<a href="howtocorrupt.html#svptbug">database corruption bug</a>. You are
+encouraged to upgrade, especially if you are using <a href="lang_savepoint.html">SAVEPOINT</a>.</p>
+
+<p>The problem first appeared in version 3.35.0 (2021-03-12) and
+affects all subsequent releases through 3.37.1.
+If temporary files are store in memory (which is not the default
+behavior, but is sometimes selected by applications using either
+<a href="compile.html#temp_store">-DSQLITE_TEMP_STORE</a> or <a href="pragma.html#pragma_temp_store">PRAGMA temp_store</a>) and
+if a <a href="lang_savepoint.html">SAVEPOINT</a> is rolled back and then subsequent changes
+within the same transaction are committed, the database file might
+(with low but non-zero probability) go corrupt.
+</blockquote><hr width="50%"><a name="2021_12_30"></a><h3>2021-12-30 - <a href="releaselog/3_37_1.html">Version 3.37.1</a></h3><blockquote>
+Version 3.37.1 fixes a bug in the <a href="lang_upsert.html">UPSERT</a> logic, introduced by
+the UPSERT enhancements of <a href="releaselog/3_35_0.html">version 3.35.0</a>, that can cause
+incorrect byte-code to be generated in some cases, resulting
+in an infinite loop in the byte code, or a NULL-pointer dereference.
+This patch release also fixes some other minor problems with
+assert() statements and in the <a href="cli.html">CLI</a>.
+</blockquote><hr width="50%"><a name="2021_11_27"></a><h3>2021-11-27 - <a href="releaselog/3_37_0.html">Version 3.37.0</a></h3><blockquote>
+Version 3.37.0 is a routine maintenance release of SQLite.
+The biggest new feature in this release is support for
+<a href="stricttables.html">STRICT tables</a>. Other enhancements are described in
+the <a href="releaselog/3_37_0.html">release notes</a>.
+</blockquote><hr width="50%"><a name="2021_06_18"></a><h3>2021-06-18 - <a href="releaselog/3_36_0.html">Version 3.36.0</a></h3><blockquote>
+Version 3.36.0 is a routine maintenance release of SQLite.
+There are no new major features, only incremental improvements
+to existing features and small performance improvements.
+</blockquote><hr width="50%"><a name="2021_04_19"></a><h3>2021-04-19 - Patch release 3.35.5</h3><blockquote>
+The new ALTER TABLE DROP COLUMN capability that was added
+in the 3.35.0 release contained a bug that might cause the
+table content to go corrupt when the table was rewritten
+to remove the dropped column. Fixed by this patch.
+</blockquote><hr width="50%"><a name="2021_04_02"></a><h3>2021-04-02 - Patch release 3.35.4</h3><blockquote>
+Version 3.35.4 is yet another patch release to fix
+obscure problems in features associated with the 3.35.0.
+</blockquote><hr width="50%"><a name="2021_03_26"></a><h3>2021-03-26 - Patch release 3.35.3</h3><blockquote>
+Version 3.35.3 contains patches for a handful of minor
+problems discovered in prior releases.
+</blockquote><hr width="50%"><a name="2021_03_17"></a><h3>2021-03-17 - Patch release 3.35.2</h3><blockquote>
+Version 3.35.2 is a small patch release to fix some minor problems
+that were discovered shortly after the 3.35.1 release.
+</blockquote><hr width="50%"><a name="2021_03_15"></a><h3>2021-03-15 - Patch release 3.35.1</h3><blockquote>
+A user discovered an issue with the new DROP COLUMN capability
+in version 3.35.0, and so version 3.35.1 was created to fix it.
+No need to upgrade if you are not using DROP COLUMN.
+</blockquote><hr width="50%"><a name="2021_03_12"></a><h3>2021-03-12 - Release 3.35.0</h3><blockquote>
+SQLite version 3.35.0 is a routine maintenance release. This
+release adds a number of new language features, including
+support for ALTER TABLE DROP COLUMN, built-in math functions,
+generalized UPSERT, and the MATERIALIZED hint on common table
+expressions. There are also query planner optimizations and
+incremental CLI improvements.
+</blockquote><hr width="50%"><a name="2020_01_20"></a><h3>2020-01-20 - Release 3.34.1</h3><blockquote>
+SQLite version 3.34.1 is a patch releases that fixes a possible
+use-after-free bug that can be provoked by malicious SQL. Other
+minor issues in extensions and documentation are also fixed.
+</blockquote><hr width="50%"><a name="2020_12_01"></a><h3>2020-12-01 - Release 3.34.0</h3><blockquote>
+SQLite version 3.34.0 is a routine maintenance release. This
+release adds incremental improvements to performance and features,
+including enhancements to the query planner, multiple recursive
+SELECTS in recursive common table expressions, and better error messages
+from CHECK constraint failures. See the change log for details.
+</blockquote><hr width="50%"><a name="2020_08_14"></a><h3>2020-08-14 - Release 3.33.0</h3><blockquote>
+SQLite version 3.33.0 is a routine maintenance release. This
+release features added support for "UPDATE FROM" following the
+PostgreSQL syntax, and a doubling of the maximum database size
+to 281 TB, as well as many other improvements. See the change
+log for details.
+</blockquote><hr width="50%"><a name="2020_06_18"></a><h3>2020-06-18 - Release 3.32.3</h3><blockquote>
+The 3.32.3 release is a patch release that contains fixes for
+various issues discovered by fuzzers. None of the issues fixed
+are likely to be encountered by applications that use SQLite in
+ordinary ways, though upgrading never hurts.
+<p>
+Map of all changes since the 3.32.0 release:
+<a href="https://www.sqlite.org/src/timeline?p=version-3.32.3&bt=version-3.32.0">https://www.sqlite.org/src/timeline?p=version-3.32.3&bt=version-3.32.0</a>
+</blockquote><hr width="50%"><a name="2020_06_04"></a><h3>2020-06-04 - Release 3.32.2</h3><blockquote>
+The 3.32.2 release is a one-line change relative to 3.32.1
+that fixes a long-standing bug in the COMMIT command. Since
+<a href="releaselog/3_17_0.html">version 3.17.0</a>, if you were to retry a COMMIT command over
+and over after it returns <a href="rescode.html#busy">SQLITE_BUSY</a>, it might eventually
+report success, even though it was still blocked. This patch
+fixes the problem.
+</blockquote><hr width="50%"><a name="2020_05_25"></a><h3>2020-05-25 - Release 3.32.1</h3><blockquote>
+<a href="https://en.wikipedia.org/wiki/Grey_hat">Grey-hats</a> published
+information about two SQLite bugs approximately 24 hours after
+the release of version 3.32.0. These bugs enable maliciously
+crafted SQL to crash the process that is running SQLite. Both
+bugs are long-standing problems that affect releases prior to
+3.32.0. The 3.32.1 release fixes both problems.
+</blockquote><hr width="50%"><a name="2020_05_22"></a><h3>2020-05-22 - Release 3.32.0</h3><blockquote>
+Version 3.32.0 is an ordinary maintenance release of SQLite.
+This release features the ability to run an
+<a href="lang_analyze.html#approx">approximate ANALYZE</a> to gather database statistics for
+use by the query planner, without having to scan every row
+of every index.
+See the <a href="releaselog/3_32_0.html">change log</a> for additional enhancements
+and improvements.
+</blockquote><hr width="50%"><a name="2020_01_27"></a><h3>2020-01-27 - Release 3.31.1</h3><blockquote>
+Applications that use SQLite should only interface with SQLite
+through the officially published APIs. Applications should not
+depend upon or use the internal data structures of SQLite as those
+structures might change from one release to another. However, there
+is a popular application that does depend on the details of the
+internal layout of data in an internal SQLite data structure, and
+those details changed in version 3.31.0, breaking the application.
+This is, technically, a bug in the application, not in SQLite.
+But it is within the power of SQLite to fix it, by reverting the
+internal data structure change, and so that is what we have done
+for the 3.31.1 release.
+</blockquote><hr width="50%"><a name="2020_01_22"></a><h3>2020-01-22 - Release 3.31.0</h3><blockquote>
+Version 3.31.0 is an ordinary maintenance release of SQLite.
+This release features the ability to define
+<a href="gencol.html">generated columns</a> for tables as well as many other enhancements.
+See the <a href="releaselog/3_31_0.html">change log</a> for additional information.
+</blockquote><hr width="50%"><a name="2019_10_11"></a><h3>2019-10-11 - Release 3.30.1</h3><blockquote>
+Version 3.30.1 is a bug-fix release that addresses a problem
+that can occur when an aggregate function in a nested query
+makes use of the new FILTER clause capability. Some addition
+patches for various obscure issues are also included, for
+completeness.
+</blockquote><hr width="50%"><a name="2019_10_04"></a><h3>2019-10-04 - Release 3.30.0</h3><blockquote>
+Version 3.30.0 is a regularly scheduled maintenance release
+of SQLite containing miscellaneous performance and feature
+enhancements. This release adds support fo the NULLS FIRST
+and NULLS LAST clauses on ORDER BY statements and the
+addition of FILTER clauses on all aggregate functions.
+See the <a href="releaselog/3_30_0.html">change log</a> for details.
+</blockquote><hr width="50%"><a name="2019_07_10"></a><h3>2019-07-10 - Release 3.29.0</h3><blockquote>
+Version 3.29.0 is a regularly scheduled maintenance release
+of SQLite containing miscellaneous performance and feature
+enhancements. See the <a href="releaselog/3_29_0.html">change log</a> for
+details.
+<p>
+Beginning with this release, the
+<a href="quirks.html#dblquote">double-quoted string literal</a> misfeature is deprecated.
+The misfeature is still enabled by default, for legacy
+compatibility, however developers are encouraged to
+disable it at compile-time using the
+<a href="compile.html#dqs">-DSQLITE_DQS=0</a> option, or at run-time using
+the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">SQLITE_DBCONFIG_DQS_DML</a> and <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">SQLITE_DBCONFIG_DQS_DDL</a>
+actions to the <a href="c3ref/db_config.html">sqlite3_db_config()</a> interface. This is
+especially true for double-quoted string literals in
+CREATE TABLE and CREATE INDEX statements, as those elements
+can cause unexpected problems following an ALTER TABLE.
+See ticket <a href="https://www.sqlite.org/src/info/9b78184be266fd70">9b78184be266fd70</a>
+for an example.
+</blockquote><hr width="50%"><a name="2019_04_16"></a><h3>2019-04-16 - Release 3.28.0</h3><blockquote>
+Version 3.28.0 is a regularly scheduled maintenance release
+of SQLite containing miscellaneous performance and feature
+enhancements. See the <a href="releaselog/3_28_0.html">change log</a> for
+details.
+<p>
+This release fixes an obscure security issue. Applications
+using older versions of SQLite may be vulnerable if
+<ol>
+<li> SQLite is compiled with certain optional extensions
+ enabled, and
+<li> the attacker is able to inject arbitrary SQL.
+</ol>
+We are not aware of any applications that are vulnerable to
+this problem. On the other hand, we do not know about
+every application that uses SQLite.
+If your application allows unauthenticated users on the internet
+(and hence potential attackers) to run arbitrary SQL and if
+you build SQLite with any of the optional extensions enabled,
+then you should take this upgrade at your earliest opportunity.
+<p>
+For further information about improving SQLite's robustness
+in internet-facing applications, see the our
+<a href="security.html">security recommendations</a>.
+</blockquote><hr width="50%"><a name="2019_02_25"></a><h3>2019-02-25 - Release 3.27.2</h3><blockquote>
+Version 3.27.2 is a patch release that
+fixes a two bugs and various documentation
+errors found in the version 3.27.1. The
+changes from version 3.27.1 and 3.27.0 are
+minimal.
+</blockquote><hr width="50%"><a name="2019_02_08"></a><h3>2019-02-08 - Release 3.27.1</h3><blockquote>
+After release 3.27.0 was tagged, but before the build could
+be completed and uploaded, a
+<a href="https://www.sqlite.org/src/info/4e8e4857d32d401f">long-standing bug</a>
+in the query optimizer was reported via System.Data.SQLite.
+Since people will be upgrading anyhow, we decided
+publish the fix for this newly discovered problems right
+away. Hence, 3.27.1 was released less than 24 hours after
+3.27.0.
+<p>
+It would have been better if the query optimizer bug had come to
+our attention one day earlier, so that we could have incorporated
+a fix into 3.27.0, but sometimes that's the way things go.
+</blockquote><hr width="50%"><a name="2019_02_07"></a><h3>2019-02-07 - Release 3.27.0</h3><blockquote>
+SQLite <a href="releaselog/3_27_0.html">version 3.27.0</a> is a routine maintenance release with various
+performance and feature enhancements. See the
+<a href="releaselog/3_27_0.html">release notes</a> for details.
+</blockquote><hr width="50%"><a name="2018_12_01"></a><h3>2018-12-01 - Release 3.26.0</h3><blockquote>
+SQLite <a href="releaselog/3_26_0.html">version 3.26.0</a> is a routine maintenance release with various
+performance and feature enhancements. See the
+<a href="releaselog/3_26_0.html">release notes</a> for details.
+</blockquote><hr width="50%"><a name="2018_11_05"></a><h3>2018-11-05 - Release 3.25.3</h3><blockquote>
+SQLite <a href="releaselog/3_25_3.html">version 3.25.3</a> is a third patch against 3.25.0 that fixes various
+problems that have come to light and which seem serious enough to
+justify a patch.
+</blockquote><hr width="50%"><a name="2018_09_25"></a><h3>2018-09-25 - Release 3.25.2</h3><blockquote>
+SQLite <a href="releaselog/3_25_2.html">version 3.25.2</a> is another patch against 3.25.0 that fixes still
+more problems associated with the new <a href="windowfunctions.html">window function</a> feature and the
+<a href="lang_altertable.html">ALTER TABLE</a> enhancements. Of particular note is the new
+<a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table=ON</a> command, which causes the ALTER TABLE RENAME
+command to behave in the same goofy way that it did before the enhancements
+found in version 3.25.0 &rarr; references to renamed tables that are inside
+the bodies of triggers and views are not updated. The legacy behavior is
+arguably a bug, but some programs depend on the older buggy behavior. The
+3.25.2 release also contains a fix to <a href="windowfunctions.html">window function</a> processing for
+VIEWs. There also a slew of other minor fixes that affect obscure
+compile-time options. See the
+<a href="https://sqlite.org/src/timeline?r=branch-3.25">Fossil Timeline</a> for
+details.
+</blockquote><hr width="50%"><a name="2018_09_18"></a><h3>2018-09-18 - Release 3.25.1</h3><blockquote>
+SQLite <a href="releaselog/3_25_1.html">version 3.25.1</a> is a patch against version 3.25.0 that contains
+two one-line fixes for bug that were introduced in version 3.25.0.
+See the change log for details. Upgrading from 3.25.0 is recommended.
+</blockquote><hr width="50%"><a name="2018_09_15"></a><h3>2018-09-15 - Release 3.25.0</h3><blockquote>
+SQLite <a href="releaselog/3_25_0.html">version 3.25.0</a> is a regularly scheduled maintenance release.
+Two big enhancements in this release:
+<ol>
+<li><p>
+Support for <a href="windowfunctions.html">window functions</a> was added, using the PostgreSQL documentation
+as the baseline.
+<li><p>
+The <a href="lang_altertable.html">ALTER TABLE</a> command was enhanced to support renaming of columns, and
+so that column and table renames are propagated into trigger bodies and views.
+</ol>
+<p>In addition, there are various performance enhancements and minor fixes.
+<p>One bug of note is
+<a href="https://www.sqlite.org/src/info/9936b2fa443fec03ff25">ticket 9936b2fa443fec</a>
+which describes a hard-to-reach condition where the ORDER BY LIMIT
+optimization might cause an infinite loop during query evaluation.
+This ticket raised a lot of
+concern on
+<a href="https://news.ycombinator.com/item?id=17964243">HackerNews</a> and
+<a href="https://www.reddit.com/r/programming/comments/9ezy8c/serious_bug_causing_infinite_loop_in_some_queries/">Reddit</a>,
+probably due to my choice of the ticket
+title. "Infinite Loop" sounds scary. But I argue that the bug isn't really
+all that bad in that it is very difficult to reach, will show up during
+testing (rather than magically appearing after a product is
+deployed), does not cause any data loss, and does not return an
+incorrect result. It was an important error, but not nearly as dire
+as many people interpreted it to be. And, in any event, it is fixed now.
+</blockquote><hr width="50%"><a name="2018_06_04"></a><h3>2018-06-04 - Release 3.24.0</h3><blockquote>
+SQLite <a href="releaselog/3_24_0.html">version 3.24.0</a> is a regularly scheduled maintenance release.
+Highlights of this release include support for PostgreSQL-style
+UPSERT and improved performance, especially for ORDER BY LIMIT queries.
+</blockquote><hr width="50%"><a name="2018_04_10"></a><h3>2018-04-10 - Release 3.23.1</h3><blockquote>
+The <a href="releaselog/3_23_1.html">version 3.23.1</a> release fixes a bug in the new
+<a href="optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> added to version 3.23.0.
+A few other minor and obscure fixes were also inserted, as well as
+a small performance optimization. Code changes relative to
+version 3.23.0 are minimal.
+</blockquote><hr width="50%"><a name="2018_04_02"></a><h3>2018-04-02 - Release 3.23.0</h3><blockquote>
+The <a href="releaselog/3_23_0.html">version 3.23.0</a> release is a regularly scheduled maintenance release.
+See the <a href="releaselog/3_23_0.html">change log</a> for a list of enhancements and bug
+fixes.
+</blockquote><hr width="50%"><a name="2018_01_22"></a><h3>2018-01-22 - Release 3.22.0</h3><blockquote>
+The <a href="releaselog/3_22_0.html">version 3.22.0</a> release is a regularly scheduled maintenance release.
+There are many minor, though interesting, enhancements in this release.
+See the <a href="releaselog/3_22_0.html">change log</a> for details.
+</blockquote><hr width="50%"><a name="2017_10_24"></a><h3>2017-10-24 - Release 3.21.0</h3><blockquote>
+The <a href="releaselog/3_21_0.html">version 3.21.0</a> release is a regularly scheduled maintenance release.
+There are lots of enhancements in this release.
+See the <a href="releaselog/3_21_0.html">change log</a> for details.
+</blockquote><hr width="50%"><a name="2017_08_24"></a><h3>2017-08-24 - Release 3.20.1</h3><blockquote>
+The <a href="releaselog/3_20_1.html">version 3.20.1</a> patch release changes two lines of code in
+the <a href="c3ref/result_blob.html">sqlite3_result_pointer()</a> interface in order to fix a rare
+memory leak. There are no other changes relative to <a href="releaselog/3_20_0.html">version 3.20.0</a>.
+</blockquote><hr width="50%"><a name="2017_08_01"></a><h3>2017-08-01 - Release 3.20.0</h3><blockquote>
+SQLite <a href="releaselog/3_20_0.html">version 3.20.0</a> is a regularly scheduled maintenance release
+of SQLite.
+<p>
+This release contains many minor enhancements, including:
+<ul>
+<li> Several new extensions
+<li> Enhancements to the "sqlite3.exe" command-line shell
+<li> Query planner enhancements
+<li> Miscellaneous code optimizations for improved performance
+<li> Fixes for some obscure bugs
+</ul>
+<p>
+See the <a href="releaselog/3_20_0.html">release notes</a> for more information.
+</blockquote><hr width="50%"><a name="2017_06_17"></a><h3>2017-06-17 - Release 3.18.2</h3><blockquote>
+SQLite <a href="releaselog/3_18_2.html">version 3.18.2</a> is another backport of a bug fix found
+in SQLite <a href="releaselog/3_19_0.html">version 3.19.0</a>, specifically the fix for
+ticket <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>. Changes
+against <a href="releaselog/3_18_0.html">version 3.18.0</a> are minimal.
+</blockquote><hr width="50%"><a name="2017_06_16"></a><h3>2017-06-16 - Release 3.18.1</h3><blockquote>
+SQLite <a href="releaselog/3_18_1.html">version 3.18.1</a> is a bug-fix release against <a href="releaselog/3_18_0.html">version 3.18.0</a>
+that fixes the <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> corruption bug described in ticket
+<a href="https://sqlite.org/src/info/fda22108">fda22108</a>. This release was
+created for users who need that bug fix but do not yet want to upgrade
+to <a href="releaselog/3_19_3.html">version 3.19.3</a>.
+</blockquote><hr width="50%"><a name="2017_06_08"></a><h3>2017-06-08 - Release 3.19.3</h3><blockquote>
+<a href="releaselog/3_19_3.html">Version 3.19.3</a> is an emergency patch release to fix a
+<a href="https://sqlite.org/src/info/fda22108">bug</a> in
+<a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> logic that can lead to database corruption.
+The bug was introduced in <a href="releaselog/3_16_0.html">version 3.16.0</a>
+(2017-01-02). Though the bug is obscure and rarely
+encountered, upgrading is recommended for all users, and
+especially for users who turn on <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a>.
+</blockquote><hr width="50%"><a name="2017_05_25"></a><h3>2017-05-25 - Release 3.19.2</h3><blockquote>
+Still more problems have been found in the LEFT JOIN
+<a href="https://sqlite.org/optoverview.html#flattening">flattening</a> optimization
+that was added in the 3.19.0 release. This patch release fixes all known
+issues with that optimization and adds new test cases. Hopefully this
+will be the last patch.
+</blockquote><hr width="50%"><a name="2017_05_24"></a><h3>2017-05-24 - Release 3.19.1</h3><blockquote>
+One of the new query planner optimizations in the 3.19.0 release contained
+bugs. The 3.19.1 patch release fixes them.
+<p>
+Beginning with 3.19.0, subqueries and views on the right-hand side of
+a LEFT JOIN operator could sometimes be
+<a href="https://sqlite.org/optoverview.html#flattening">flattened</a> into the
+main query. The new optimization worked well for all of the test cases
+that the developers devised, and for millions of legacy test cases, but
+once 3.19.0 was released, users found some other cases where the optimization
+failed. Ticket
+<a href="https://sqlite.org/src/info/cad1ab4cb7b0fc344">cad1ab4cb7b0fc344</a> contains
+examples.
+<p>
+These problems exist only in 3.19.0. Users of SQLite 3.19.0 should
+upgrade, but users of all prior versions of SQLite are safe.
+</blockquote><hr width="50%"><a name="2017_05_22"></a><h3>2017-05-22 - Release 3.19.0</h3><blockquote>
+SQLite <a href="releaselog/3_19_0.html">version 3.19.0</a> is a regularly scheduled maintenance release.
+<p>
+The emphasis on this release is improvements to the query planner.
+There are also some obscure bug fixes. There is no reason to upgrade
+unless you are having problems with a prior release.
+</blockquote><hr width="50%"><a name="2017_03_30"></a><h3>2017-03-30 - Release 3.18.0</h3><blockquote>
+SQLite <a href="releaselog/3_18_0.html">version 3.18.0</a> is a regularly scheduled maintenance release.
+<p>
+This release features an initial implementation the
+"<a href="pragma.html#pragma_optimize">PRAGMA optimize</a>" command. This command can now be used to cause
+<a href="lang_analyze.html">ANALYZE</a> to be run on an as-needed basis. Applications should invoke
+"PRAGMA optimize" just before closing the <a href="c3ref/sqlite3.html">database connection</a>.
+The "PRAGMA optimize" statement will likely be enhanced to do other
+kinds of automated database maintenance in future releases.
+<p>
+The <a href="https://www.fossil-scm.org/">Fossil</a> version control system that is
+used to manage the SQLite project has been upgraded to use SHA3-256 hashes
+instead of SHA1. Therefore, the version identifications for SQLite now
+show a 64-hex-digit SHA3-256 hash rather than the 40-hex-digit SHA1 hash.
+<p>
+See the <a href="releaselog/3_18_0.html">change log</a> for other enhancements and optimizations
+in this release.
+</blockquote><hr width="50%"><a name="2017_02_13"></a><h3>2017-02-13 - Release 3.17.0</h3><blockquote>
+SQLite <a href="releaselog/3_17_0.html">version 3.17.0</a> is a regularly scheduled maintenance release.
+<p>
+Most of the changes in this release are performance optimizations.
+Optimizations to the <a href="rtree.html">R-Tree extension</a> are especially noticeable.
+<p>
+In this release, the default size of the
+<a href="malloc.html#lookaside">lookaside buffer</a> allocated for each database connection
+is increased from 64,000 to 120,000 bytes. This provides improved
+performance on many common workloads in exchange for a small increase
+in memory usage.
+Applications that value a small memory footprint over raw speed
+can change the lookaside buffer size back to its old value (or to zero)
+using the <a href="compile.html#default_lookaside">SQLITE_DEFAULT_LOOKASIDE</a> compile-time option, or the
+<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">sqlite3_config(SQLITE_CONFIG_LOOKASIDE)</a>
+start-time setting, or the
+<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">sqlite3_db_config(SQLITE_DBCONFIG_LOOKASIDE)</a>
+run-time setting.
+</blockquote><hr width="50%"><a name="2017_01_06"></a><h3>2017-01-06 - Release 3.16.2</h3><blockquote>
+One of the performance optimizations added in 3.16.0 caused triggers
+and foreign keys to malfunction for the <a href="lang_replace.html">REPLACE</a> statement on
+<a href="withoutrowid.html">WITHOUT ROWID</a> tables that lack secondary indexes. This patch
+release fixes the problem. See ticket
+<a href="https://www.sqlite.org/src/info/30027b613b4">30027b613b4</a> for details.
+</blockquote><hr width="50%"><a name="2017_01_03"></a><h3>2017-01-03 - Release 3.16.1</h3><blockquote>
+SQLite <a href="releaselog/3_16_1.html">version 3.16.1</a> fixes a bug in the row-value logic for UPDATE
+statements inside of triggers. The bug has been there since row-values
+were added by release 3.15.0, but was not discovered until just a few
+minutes after the 3.16.0 release was published, and so it was not fixed
+by 3.16.0. This patch release is version 3.16.0 with the row-value bug fix.
+</blockquote><hr width="50%"><a name="2017_01_02"></a><h3>2017-01-02 - Release 3.16.0</h3><blockquote>
+SQLite <a href="releaselog/3_16_0.html">version 3.16.0</a> is a regularly schedule maintenance release.</p>
+
+<p><p>
+This release includes many <a href="cpu.html#microopt">microoptimizations</a> that collectively reduce
+the CPU cycle count by about 9%,
+add there have been important enhancements to the <a href="cli.html">command-line shell</a>.</p>
+
+<p><p>Support for <a href="pragma.html#pragfunc">PRAGMA functions</a> is added,
+so that many pragma statements can be used as part of a larger SQL query.
+This is considered an experimental feature.
+We do not anticipate any changes to the <a href="pragma.html#pragfunc">PRAGMA function</a> interface, but
+will keep continue to call this interface "experimental" for a few release
+cycles in case unforeseen issues arise.</p>
+
+<p><p>See the <a href="releaselog/3_16_0.html">change log</a> for other enhancements.
+</blockquote><hr width="50%"><a name="2016_11_28"></a><h3>2016-11-28 - Release 3.15.2</h3><blockquote>
+SQLite <a href="releaselog/3_15_2.html">version 3.15.2</a> is a bug-fix patch release that fixes several minor
+issues in the 3.15.0 and 3.15.1 releases.
+</blockquote><hr width="50%"><a name="2016_11_04"></a><h3>2016-11-04 - Release 3.15.1</h3><blockquote>
+SQLite <a href="releaselog/3_15_1.html">version 3.15.1</a> is a bug-fix patch release that fixes some minor
+issues in the 3.15.0 release.
+</blockquote><hr width="50%"><a name="2016_10_14"></a><h3>2016-10-14 - Release 3.15.0</h3><blockquote>
+SQLite <a href="releaselog/3_15_0.html">version 3.15.0</a> is a regularly scheduled maintenance release.
+The key feature in this release is the added support for
+<a href="rowvalue.html">row values</a>. There are also other enhancements and
+fixes for a number of obscure bugs.
+<p>
+The 3.15.0 release uses about 7% fewer CPU cycles than 3.14.2.
+Most of the improvement in this release
+is in the SQL parser, query planner, and
+byte-code generator (the front-end) corresponding
+to the <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> interface. Overall,
+version 3.15.0 uses about half as much CPU time as
+version 3.8.1 (2013-10-17). These
+performance measurements are made using the "speedtest1.c"
+workload on x64 compiled with gcc and -Os. Performance
+improvements may vary with different platforms and
+workloads.
+</blockquote><hr width="50%"><a name="2016_09_12"></a><h3>2016-09-12 - Release 3.14.2</h3><blockquote>
+SQLite <a href="releaselog/3_14_2.html">version 3.14.2</a> fixes several obscure bugs and adds
+improved support for building SQLite using the STDCALL calling
+convention on 32-bit windows systems. Upgrading from versions
+3.14 and 3.14.1 is optional.
+</blockquote><hr width="50%"><a name="2016_08_11"></a><h3>2016-08-11 - Release 3.14.1</h3><blockquote>
+SQLite <a href="releaselog/3_14_1.html">version 3.14.1</a> adds a small patch to improve the performance
+of the pcache1TruncateUnsafe() routine for cases when the only a few
+pages on the end of the cache are being removed. This causes COMMITs
+to run faster when there is a very large page cache. Upgrading from
+version 3.14 is optional.
+</blockquote><hr width="50%"><a name="2016_08_08"></a><h3>2016-08-08 - Release 3.14</h3><blockquote>
+SQLite <a href="releaselog/3_14.html">version 3.14</a> (the "&#960;" release)
+is a regularly scheduled maintenance
+release containing performance enhancements, new features, and fixes for
+obscure bugs.
+</blockquote><hr width="50%"><a name="2016_05_18"></a><h3>2016-05-18 - Release 3.13.0</h3><blockquote>
+SQLite <a href="releaselog/3_13_0.html">version 3.13.0</a> is a regularly schedule maintenance release containing
+performance enhancements and fixes for obscure bugs.
+</blockquote><hr width="50%"><a name="2016_04_18"></a><h3>2016-04-18 - Release 3.12.2</h3><blockquote>
+<p>Yikes! The 3.12.0 and 3.12.1 releases contain a backwards compatibility bug!
+ Tables that declare a column with type <tt>"INTEGER" PRIMARY KEY</tt>
+ (where the datatype name INTEGER is quoted) generate an incompatible
+ database file. The mistake came about because the developers have never
+ thought to put a typename in quotes before, and so there was no documentation
+ of that capability nor any tests. (There are tests now, though, of course.)
+ Instances of quoting the datatype name are probably infrequent in the wild,
+ so we do not expect the impact of this bug to be too severe.
+ Upgrading is still strongly recommended.
+<p>Fixes for three other minor issues were included in this patch release.
+ The other issues would have normally been deferred until the next scheduled
+ release, but since a patch release is being issued anyhow, they might as
+ well be included.
+</blockquote><hr width="50%"><a name="2016_04_08"></a><h3>2016-04-08 - Release 3.12.1</h3><blockquote>
+<p>SQLite <a href="releaselog/3_12_1.html">version 3.12.1</a> is an emergency patch release to address a
+ <a href="https://www.sqlite.org/src/info/7f7f8026eda38">crash bug</a> that snuck
+ into <a href="releaselog/3_12_0.html">version 3.12.0</a>. Upgrading from version 3.12.0 is highly
+ recommended.
+<p>Another minor problem involving datatypes on <a href="lang_createview.html">view</a> columns, and
+ a query planner deficiency are fixed at the same time. These two
+ issues did not justify a new release on their own, but since a release
+ is being issued to deal with the crash bug, we included these other
+ fixes for good measure.
+</blockquote><hr width="50%"><a name="2016_03_29"></a><h3>2016-03-29 - Release 3.12.0</h3><blockquote>
+<p>SQLite <a href="releaselog/3_12_0.html">version 3.12.0</a> is a regularly scheduled maintenance release.
+ A notable change in this release is an
+ <a href="pgszchng2016.html">increase in the default page size</a> for newly created database files.
+ There are also various performance improvements.
+ See the <a href="releaselog/3_12_0.html">change log</a> for details.
+</blockquote><hr width="50%"><a name="2016_03_03"></a><h3>2016-03-03 - Release 3.11.1</h3><blockquote>
+<p>SQLite <a href="releaselog/3_11_1.html">version 3.11.1</a> is a patch release that fixes problems in the
+ new <a href="fts5.html">FTS5</a> extension and increases a default setting in the <a href="spellfix1.html">spellfix1</a>
+ extension, and implements enhancements to some of the Windows makefiles.
+ The SQLite core is unchanged from 3.11.0. Upgrading is optional.
+</blockquote><hr width="50%"><a name="2016_02_15"></a><h3>2016-02-15 - Release 3.11.0</h3><blockquote>
+<p>SQLite <a href="releaselog/3_11_0.html">version 3.11.0</a> is a regularly scheduled maintenance release.
+</blockquote><hr width="50%"><a name="2016_01_20"></a><h3>2016-01-20 - Release 3.10.2</h3><blockquote>
+<p>Yikes! An optimization attempt gone bad resulted in a
+<a href="https://www.sqlite.org/src/info/80369eddd5c94">bug in the LIKE operator</a>
+which is fixed by this patch release.
+Three other minor but low-risk fixes are also included in the patch.
+</blockquote><hr width="50%"><a name="2016_01_14"></a><h3>2016-01-14 - Release 3.10.1</h3><blockquote>
+<p>SQLite <a href="releaselog/3_10_1.html">version 3.10.1</a> is a bug-fix release primarily targeting the
+fix for the query planner bug
+<a href="https://www.sqlite.org/src/info/cb3aa0641d9a4">cb3aa0641d9a4</a> discovered by
+Mapscape. Also included is a minor API enhancement requested by
+the Firefox developers at Mozilla. The differences from version
+3.10.0 are minimal.
+</blockquote><hr width="50%"><a name="2016_01_06"></a><h3>2016-01-06 - Release 3.10.0</h3><blockquote>
+<p>SQLite <a href="releaselog/3_10_0.html">version 3.10.0</a> is a regularly scheduled maintenance release.
+</blockquote><hr width="50%">
+
+<a href="oldnews.html">Old news...</a>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/news.in?m=28ed87cc897e1a850">2022-12-27 17:04:09</a> UTC </small></i></p>
+
diff --git a/www/np1queryprob.html b/www/np1queryprob.html
new file mode 100644
index 0000000..cf12203
--- /dev/null
+++ b/www/np1queryprob.html
@@ -0,0 +1,516 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Many Small Queries Are Efficient In SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Many Small Queries Are Efficient In SQLite
+</div>
+</div>
+
+
+
+
+
+<h1 id="executive_summary"><span>1. </span>Executive Summary</h1>
+
+<ul>
+<li><p>
+200 SQL statements per webpage is excessive for client/server database
+engines like MySQL, PostgreSQL, or SQL Server.
+
+</p></li><li><p>
+But with SQLite, 200 or more SQL statement per webpage is not a problem.
+
+</p></li><li><p>
+SQLite can also do large and complex queries efficiently, just like
+client/server databases. But SQLite can do many smaller queries
+efficiently too. Application developers can use whichever technique
+works best for the task at hand.
+
+</p></li></ul>
+
+<h1 id="the_perceived_problem"><span>2. </span>The Perceived Problem</h1>
+
+<p>
+The <a href="whentouse.html#website">Appropriate Uses For SQLite</a> page says that
+dynamic pages on the SQLite website typically do about 200 SQL
+statements each.
+This has provoked criticism from readers. Examples:
+
+</p><ul>
+<li><p>
+<i>"200 SQL statements is a ridiculously high number for a single page"</i>
+</p></li><li><p>
+<i>"For most sites, 200 queries is way, way, way too much."</i>
+</p></li><li><p>
+<i>"&#91;This is&#93; bad design"</i>
+</p></li></ul>
+
+<p>
+Such criticism would be well-founded for a traditional client/server
+database engine, such as MySQL, PostgreSQL, or SQL Server. In
+a client/server database, each SQL statement requires a message
+round-trip from the application to the database server and back to
+the application. Doing over 200 round-trip messages, sequentially,
+can be a serious performance drag. This is sometimes called the
+"N+1 Query Problem" or the "N+1 Select Problem" and it is an anti-pattern.
+
+</p><h1 id="n_1_queries_are_not_a_problem_with_sqlite"><span>3. </span>N+1 Queries Are Not A Problem With SQLite</h1>
+
+<p>
+SQLite is <u>not</u> client/server, however. The SQLite database runs
+in the same process address space as the application. Queries do not
+involve message round-trips, only a function call. The latency
+of a single SQL query is far less in SQLite. Hence, using a large number
+of queries with SQLite is not the problem.
+
+</p><h1 id="the_need_for_over_200_sql_statements_per_webpage"><span>4. </span>The Need For Over 200 SQL Statements Per Webpage</h1>
+
+<p>
+The dynamic webpages on the SQLite website are mostly generated by
+the <a href="https://www.fossil-scm.org/">Fossil version control system</a>.
+A typical dynamic
+page would be a timeline such as <a href="https://www.sqlite.org/src/timeline">https://www.sqlite.org/src/timeline</a>.
+A log of all SQL used by the timeline is shown below.
+
+</p><p>
+The first group of queries in the log are extracting display options
+from the "config" and "global_config" tables of the Fossil database.
+Then there is a single complex query that extracts a list of all elements
+to be displayed on the timeline.
+This "timeline" query demonstrates that SQLite can easily process complex
+relational database queries involving multiple tables, subqueries, and
+complex WHERE clause constraints, and it can make effective use of indexes
+to solve the queries with minimal disk I/O.
+
+</p><p>
+Following the single big "timeline" query,
+there are additional queries for each timeline element.
+Fossil is using the "N+1 Query" pattern rather than trying
+to grab all the information in as few queries as possible.
+But that is ok because there is no unnecessary IPC overhead.
+At the bottom of
+each timeline page, Fossil shows approximately how long it took to generate
+the page. For a 50-entry timeline, the latency is usually less than
+25 milliseconds. Profiling shows that few of those milliseconds
+were spent inside the database engine.
+
+</p><p>
+Using the N+1 Query pattern in Fossil does not harm the application.
+But the N+1 Query pattern does have benefits. For one, the
+section of the code that creates the timeline query can be
+completely separate from the section that prepares each timeline
+entry for display.
+This provides a separation of responsibility that helps keep the code
+simple and easy to maintain. Secondly, the information
+needed for display, and the queries needed to extract that information,
+vary according to what type of objects to be shown. Check-ins need one
+set of queries. Tickets need another set of queries. Wiki pages need a
+different query. And so forth. By implementing these queries on-demand
+and in the part of the code dealing with the various entities, there is
+further separation of responsibility and simplification of the overall
+code base.
+
+</p><p>
+So, SQLite is able to do one or two large and complex queries, or it can
+do many smaller and simpler queries. Both are efficient. An application
+can use either or both techniques, depending on what works best for the
+situation at hand.
+
+</p><p>
+The following is a log of all SQL used to generate one particular
+timeline (captured on 2016-09-16):
+
+</p><div class="codeblock"><pre>-- sqlite3_open: /home/drh/sqlite/sqlite/.fslckout
+PRAGMA foreign_keys=OFF;
+SELECT sql FROM localdb.sqlite_schema WHERE name=='vfile';
+-- sqlite3_open: /home/drh/.fossil
+PRAGMA foreign_keys=OFF;
+SELECT value FROM vvar WHERE name='repository';
+ATTACH DATABASE '/home/drh/www/repos/sqlite.fossil' AS 'repository' KEY '';
+SELECT value FROM config WHERE name='allow-symlinks';
+SELECT value FROM global_config WHERE name='allow-symlinks';
+SELECT value FROM config WHERE name='aux-schema';
+SELECT 1 FROM config WHERE name='baseurl:http://';
+SELECT value FROM config WHERE name='ip-prefix-terms';
+SELECT value FROM global_config WHERE name='ip-prefix-terms';
+SELECT value FROM config WHERE name='localauth';
+SELECT value FROM vvar WHERE name='default-user';
+SELECT uid FROM user WHERE cap LIKE '%s%';
+SELECT login FROM user WHERE uid=1;
+SELECT cap FROM user WHERE login = 'nobody';
+SELECT cap FROM user WHERE login = 'anonymous';
+SELECT value FROM config WHERE name='public-pages';
+SELECT value FROM global_config WHERE name='public-pages';
+SELECT value FROM config WHERE name='header';
+SELECT value FROM config WHERE name='project-name';
+SELECT value FROM config WHERE name='th1-setup';
+SELECT value FROM global_config WHERE name='th1-setup';
+SELECT value FROM config WHERE name='redirect-to-https';
+SELECT value FROM global_config WHERE name='redirect-to-https';
+SELECT value FROM config WHERE name='index-page';
+SELECT mtime FROM config WHERE name='css';
+SELECT mtime FROM config WHERE name='logo-image';
+SELECT mtime FROM config WHERE name='background-image';
+CREATE TEMP TABLE IF NOT EXISTS timeline(
+ rid INTEGER PRIMARY KEY,
+ uuid TEXT,
+ timestamp TEXT,
+ comment TEXT,
+ user TEXT,
+ isleaf BOOLEAN,
+ bgcolor TEXT,
+ etype TEXT,
+ taglist TEXT,
+ tagid INTEGER,
+ short TEXT,
+ sortby REAL
+)
+;
+INSERT OR IGNORE INTO timeline SELECT
+ blob.rid AS blobRid,
+ uuid AS uuid,
+ datetime(event.mtime,toLocal()) AS timestamp,
+ coalesce(ecomment, comment) AS comment,
+ coalesce(euser, user) AS user,
+ blob.rid IN leaf AS leaf,
+ bgcolor AS bgColor,
+ event.type AS eventType,
+ (SELECT group_concat(substr(tagname,5), ', ') FROM tag, tagxref
+ WHERE tagname GLOB 'sym-*' AND tag.tagid=tagxref.tagid
+ AND tagxref.rid=blob.rid AND tagxref.tagtype&gt;0) AS tags,
+ tagid AS tagid,
+ brief AS brief,
+ event.mtime AS mtime
+ FROM event CROSS JOIN blob
+WHERE blob.rid=event.objid
+ AND NOT EXISTS(SELECT 1 FROM tagxref WHERE tagid=5 AND tagtype&gt;0 AND rid=blob.rid)
+ ORDER BY event.mtime DESC LIMIT 50;
+-- SELECT value FROM config WHERE name='timeline-utc';
+SELECT count(*) FROM timeline WHERE etype!='div';
+SELECT min(timestamp) FROM timeline;
+SELECT julianday('2016-09-15 14:54:51',fromLocal());
+SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob WHERE blob.rid=event.objid AND mtime&lt;=2457647.121412037);
+SELECT max(timestamp) FROM timeline;
+SELECT julianday('2016-09-24 17:42:43',fromLocal());
+SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob WHERE blob.rid=event.objid AND mtime&gt;=2457656.238009259);
+SELECT value FROM config WHERE name='search-ci';
+SELECT value FROM vvar WHERE name='checkout';
+SELECT value FROM config WHERE name='timeline-max-comment';
+SELECT value FROM global_config WHERE name='timeline-max-comment';
+SELECT value FROM config WHERE name='timeline-date-format';
+SELECT value FROM config WHERE name='timeline-truncate-at-blank';
+SELECT value FROM global_config WHERE name='timeline-truncate-at-blank';
+SELECT * FROM timeline ORDER BY sortby DESC;
+SELECT value FROM config WHERE name='hash-digits';
+SELECT value FROM global_config WHERE name='hash-digits';
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=68028;
+SELECT pid FROM plink WHERE cid=68028 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM tagxref WHERE rid=68028 AND tagid=9 AND tagtype&gt;0;
+SELECT value FROM config WHERE name='timeline-block-markup';
+SELECT value FROM config WHERE name='timeline-plaintext';
+SELECT value FROM config WHERE name='wiki-use-html';
+SELECT value FROM global_config WHERE name='wiki-use-html';
+SELECT 1 FROM private WHERE rid=68028;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=68026;
+SELECT pid FROM plink WHERE cid=68026 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=68026;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=68024;
+SELECT pid FROM plink WHERE cid=68024 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=68024;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=68018;
+SELECT pid FROM plink WHERE cid=68018 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=68018;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=68012;
+SELECT pid FROM plink WHERE cid=68012 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=68012;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=68011;
+SELECT value FROM config WHERE name='details';
+SELECT pid FROM plink WHERE cid=68011 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM tagxref WHERE rid=68011 AND tagid=9 AND tagtype&gt;0;
+SELECT 1 FROM private WHERE rid=68011;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=68008;
+SELECT pid FROM plink WHERE cid=68008 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=68008;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=68006;
+SELECT pid FROM plink WHERE cid=68006 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=68006;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=68000;
+SELECT pid FROM plink WHERE cid=68000 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=68000;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67997;
+SELECT pid FROM plink WHERE cid=67997 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67997;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67992;
+SELECT pid FROM plink WHERE cid=67992 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67992;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67990;
+SELECT pid FROM plink WHERE cid=67990 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67990;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67989;
+SELECT pid FROM plink WHERE cid=67989 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67989;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67984;
+SELECT pid FROM plink WHERE cid=67984 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67984;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67983;
+SELECT pid FROM plink WHERE cid=67983 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67983;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67979;
+SELECT pid FROM plink WHERE cid=67979 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67979;
+SELECT value FROM config WHERE name='ticket-closed-expr';
+SELECT status='Closed' OR status='Fixed' FROM ticket WHERE tkt_uuid&gt;='1ec41379c9c1e400' AND tkt_uuid&lt;'1ec41379c9c1e401';
+SELECT 1 FROM private WHERE rid=67980;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67977;
+SELECT pid FROM plink WHERE cid=67977 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT status='Closed' OR status='Fixed' FROM ticket WHERE tkt_uuid&gt;='1ec41379c9c1e400' AND tkt_uuid&lt;'1ec41379c9c1e401';
+SELECT 1 FROM private WHERE rid=67977;
+SELECT status='Closed' OR status='Fixed' FROM ticket WHERE tkt_uuid&gt;='1ec41379c9c1e400' AND tkt_uuid&lt;'1ec41379c9c1e401';
+SELECT 1 FROM private WHERE rid=67974;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67971;
+SELECT pid FROM plink WHERE cid=67971 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67971;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67972;
+SELECT pid FROM plink WHERE cid=67972 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67972;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67969;
+SELECT pid FROM plink WHERE cid=67969 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67969;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67966;
+SELECT pid FROM plink WHERE cid=67966 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67966;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67962;
+SELECT pid FROM plink WHERE cid=67962 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67962;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67960;
+SELECT pid FROM plink WHERE cid=67960 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67960;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67957;
+SELECT pid FROM plink WHERE cid=67957 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67957;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67955;
+SELECT pid FROM plink WHERE cid=67955 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67955;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67953;
+SELECT pid FROM plink WHERE cid=67953 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT status='Closed' OR status='Fixed' FROM ticket WHERE tkt_uuid&gt;='5990a1bdb4a073' AND tkt_uuid&lt;'5990a1bdb4a074';
+SELECT 1 FROM blob WHERE uuid&gt;='5990a1bdb4a073' AND uuid&lt;'5990a1bdb4a074';
+SELECT 1 FROM private WHERE rid=67953;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67941;
+SELECT pid FROM plink WHERE cid=67941 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67941;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67940;
+SELECT pid FROM plink WHERE cid=67940 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67940;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67938;
+SELECT pid FROM plink WHERE cid=67938 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67938;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67935;
+SELECT pid FROM plink WHERE cid=67935 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67935;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67934;
+SELECT pid FROM plink WHERE cid=67934 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67934;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67932;
+SELECT pid FROM plink WHERE cid=67932 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67932;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67930;
+SELECT pid FROM plink WHERE cid=67930 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67930;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67928;
+SELECT pid FROM plink WHERE cid=67928 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM tagxref WHERE rid=67928 AND tagid=9 AND tagtype&gt;0;
+SELECT 1 FROM private WHERE rid=67928;
+SELECT status='Closed' OR status='Fixed' FROM ticket WHERE tkt_uuid&gt;='0eab1ac7591f511d' AND tkt_uuid&lt;'0eab1ac7591f511e';
+SELECT 1 FROM private WHERE rid=67919;
+SELECT status='Closed' OR status='Fixed' FROM ticket WHERE tkt_uuid&gt;='01874d252ac44861' AND tkt_uuid&lt;'01874d252ac44862';
+SELECT 1 FROM blob WHERE uuid&gt;='01874d252ac44861' AND uuid&lt;'01874d252ac44862';
+SELECT 1 FROM private WHERE rid=67918;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67916;
+SELECT pid FROM plink WHERE cid=67916 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT status='Closed' OR status='Fixed' FROM ticket WHERE tkt_uuid&gt;='0eab1ac759' AND tkt_uuid&lt;'0eab1ac75:';
+SELECT 1 FROM private WHERE rid=67916;
+SELECT status='Closed' OR status='Fixed' FROM ticket WHERE tkt_uuid&gt;='a49bc0a8244feb08' AND tkt_uuid&lt;'a49bc0a8244feb09';
+SELECT 1 FROM blob WHERE uuid&gt;='a49bc0a8244feb08' AND uuid&lt;'a49bc0a8244feb09';
+SELECT 1 FROM private WHERE rid=67914;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67913;
+SELECT pid FROM plink WHERE cid=67913 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT status='Closed' OR status='Fixed' FROM ticket WHERE tkt_uuid&gt;='0eab1ac7591f' AND tkt_uuid&lt;'0eab1ac7591g';
+SELECT 1 FROM private WHERE rid=67913;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67911;
+SELECT pid FROM plink WHERE cid=67911 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67911;
+SELECT status='Closed' OR status='Fixed' FROM ticket WHERE tkt_uuid&gt;='0eab1ac7591f511d' AND tkt_uuid&lt;'0eab1ac7591f511e';
+SELECT 1 FROM private WHERE rid=67909;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67907;
+SELECT pid FROM plink WHERE cid=67907 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67907;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67899;
+SELECT pid FROM plink WHERE cid=67899 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67899;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67897;
+SELECT pid FROM plink WHERE cid=67897 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67897;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67895;
+SELECT pid FROM plink WHERE cid=67895 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67895;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67893;
+SELECT pid FROM plink WHERE cid=67893 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67893;
+SELECT value FROM tagxref WHERE tagid=8 AND tagtype&gt;0 AND rid=67891;
+SELECT pid FROM plink WHERE cid=67891 AND pid NOT IN phantom ORDER BY isprim DESC;
+SELECT 1 FROM private WHERE rid=67891;
+SELECT count(*) FROM plink
+ WHERE pid=67928 AND isprim
+ AND coalesce((SELECT value FROM tagxref
+ WHERE tagid=8 AND rid=plink.pid), 'trunk')
+ =coalesce((SELECT value FROM tagxref
+ WHERE tagid=8 AND rid=plink.cid), 'trunk')
+;
+SELECT count(*) FROM plink
+ WHERE pid=68011 AND isprim
+ AND coalesce((SELECT value FROM tagxref
+ WHERE tagid=8 AND rid=plink.pid), 'trunk')
+ =coalesce((SELECT value FROM tagxref
+ WHERE tagid=8 AND rid=plink.cid), 'trunk')
+;
+SELECT count(*) FROM plink
+ WHERE pid=68028 AND isprim
+ AND coalesce((SELECT value FROM tagxref
+ WHERE tagid=8 AND rid=plink.pid), 'trunk')
+ =coalesce((SELECT value FROM tagxref
+ WHERE tagid=8 AND rid=plink.cid), 'trunk')
+;
+SELECT value FROM config WHERE name='show-version-diffs';
+SELECT value FROM config WHERE name='adunit-omit-if-admin';
+SELECT value FROM global_config WHERE name='adunit-omit-if-admin';
+SELECT value FROM config WHERE name='adunit-omit-if-user';
+SELECT value FROM global_config WHERE name='adunit-omit-if-user';
+SELECT value FROM config WHERE name='adunit';
+SELECT value FROM global_config WHERE name='adunit';
+SELECT value FROM config WHERE name='auto-hyperlink-delay';
+SELECT value FROM global_config WHERE name='auto-hyperlink-delay';
+SELECT value FROM config WHERE name='footer';
+PRAGMA database_list;
+PRAGMA database_list;
+PRAGMA localdb.freelist_count;
+PRAGMA localdb.page_count;
+</pre></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/np1queryprob.in?m=930ff1b89814b2162">2020-06-18 21:18:56</a> UTC </small></i></p>
+
diff --git a/www/nulinstr.html b/www/nulinstr.html
new file mode 100644
index 0000000..cb118a0
--- /dev/null
+++ b/www/nulinstr.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>NUL Characters In Strings</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+NUL Characters In Strings
+</div>
+</div>
+
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>
+SQLite allows NUL characters (ASCII 0x00, Unicode \u0000) in the middle
+of string values stored in the database. However, the use of NUL within
+strings can lead to surprising behaviors:
+
+</p><ol>
+<li><p>
+The <a href="lang_corefunc.html#length">length() SQL function</a> only counts characters up to and excluding
+the first NUL.
+
+
+</p></li><li><p>
+The <a href="lang_corefunc.html#quote">quote() SQL function</a> only shows characters up to and excluding
+the first NUL.
+
+</p></li><li><p>
+The <a href="cli.html#dump">.dump</a> command in the <a href="cli.html">CLI</a> omits the first NUL character and all
+subsequent text in the SQL output that it generates. In fact, the
+<a href="cli.html">CLI</a> omits everything past the first NUL character in all contexts.
+</p></li></ol>
+
+<p>
+The use of NUL characters in SQL text strings is not recommended.
+
+</p><h1 id="unexpected_behavior"><span>2. </span>Unexpected Behavior</h1>
+
+<p>
+Consider the following SQL:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(
+ a INTEGER PRIMARY KEY,
+ b TEXT
+);
+INSERT INTO t1(a,b) VALUES(1, 'abc'||char(0)||'xyz');
+
+SELECT a, b, length(b) FROM t1;
+</pre></div>
+
+<p>
+The SELECT statement above shows output of:
+
+</p><div class="codeblock"><pre>1,'abc',3
+</pre></div>
+
+<p>
+(Through this document, we assume that the <a href="cli.html">CLI</a> has "<a href="cli.html#dotmodequote">.mode quote</a>" set.)
+But if you run:
+
+</p><div class="codeblock"><pre>SELECT * FROM t1 WHERE b='abc';
+</pre></div>
+
+<p>
+Then no rows are returned. SQLite knows that the t1.b column actually
+holds a 7-character string, and the 7-character string 'abc'||char(0)||'xyz'
+is not equal to the 3-character string 'abc', and so no rows are returned.
+But a user might be easily confused by this because the <a href="cli.html">CLI</a> output
+seems to show that the string has only 3 characters. This seems like
+a bug. But it is how SQLite works.
+
+</p><h1 id="how_to_tell_if_you_have_nul_characters_in_your_strings"><span>3. </span>How To Tell If You Have NUL Characters In Your Strings</h1>
+
+<p>
+If you <a href="lang_expr.html#castexpr">CAST</a> a string into a BLOB, then the entire length of the
+string is shown. For example:
+
+</p><div class="codeblock"><pre>SELECT a, CAST(b AS BLOB) FROM t1;
+</pre></div>
+
+<p>
+Gives this result:
+
+</p><div class="codeblock"><pre>1,X'6162630078797a'
+</pre></div>
+
+<p>
+In the BLOB output, you can clearly see the NUL character as the 4th
+character in the 7-character string.
+
+</p><p>
+Another, more automated, way
+to tell if a string value X contains embedded NUL characters is to
+use an expression like this:
+
+</p><div class="codeblock"><pre>instr(X,char(0))
+</pre></div>
+
+<p>
+If this expression returns a non-zero value N, then there exists an
+embedded NUL at the N-th character position. Thus to count the number
+of rows that contain embedded NUL characters:
+
+</p><div class="codeblock"><pre>SELECT count(*) FROM t1 WHERE instr(b,char(0))>0;
+</pre></div>
+
+<h1 id="removing_nul_characters_from_a_text_field"><span>4. </span>Removing NUL Characters From A Text Field</h1>
+
+<p>
+The following example shows how to remove NUL character, and all text
+that follows, from a column of a table. So if you have a database file
+that contains embedded NULs and you would like to remove them, running
+UPDATE statements similar to the following might help:
+
+</p><div class="codeblock"><pre>UPDATE t1 SET b=substr(b,1,instr(b,char(0)))
+ WHERE instr(b,char(0));
+</pre></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/nulinstr.in?m=b99fab59ede12dcc2">2022-05-23 22:21:54</a> UTC </small></i></p>
+
diff --git a/www/nulls.html b/www/nulls.html
new file mode 100644
index 0000000..1a2b4c5
--- /dev/null
+++ b/www/nulls.html
@@ -0,0 +1,440 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>NULL Handling in SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h2>NULL Handling in SQLite Versus Other Database Engines</h2>
+
+<p>
+The goal is
+to make SQLite handle NULLs in a standards-compliant way.
+But the descriptions in the SQL standards on how to handle
+NULLs seem ambiguous.
+It is not clear from the standards documents exactly how NULLs should
+be handled in all circumstances.
+</p>
+
+<p>
+So instead of going by the standards documents, various popular
+SQL engines were tested to see how they handle NULLs. The idea
+was to make SQLite work like all the other engines.
+An SQL test script was developed and run by volunteers on various
+SQL RDBMSes and the results of those tests were used to deduce
+how each engine processed NULL values.
+The original tests were run in May of 2002.
+A copy of the test script is found at the end of this document.
+</p>
+
+<p>
+SQLite was originally coded in such a way that the answer to
+all questions in the chart below would be "Yes". But the
+experiments run on other SQL engines showed that none of them
+worked this way. So SQLite was modified to work the same as
+Oracle, PostgreSQL, and DB2. This involved making NULLs
+indistinct for the purposes of the SELECT DISTINCT statement and
+for the UNION operator in a SELECT. NULLs are still distinct
+in a UNIQUE column. This seems somewhat arbitrary, but the desire
+to be compatible with other engines outweighed that objection.
+</p>
+
+<p>
+It is possible to make SQLite treat NULLs as distinct for the
+purposes of the SELECT DISTINCT and UNION. To do so, one should
+change the value of the NULL_ALWAYS_DISTINCT #define in the
+<tt>sqliteInt.h</tt> source file and recompile.
+</p>
+
+<blockquote>
+<p>
+<i>Update 2003-07-13:</i>
+Since this document was originally written some of the database engines
+tested have been updated and users have been kind enough to send in
+corrections to the chart below. The original data showed a wide variety
+of behaviors, but over time the range of behaviors has converged toward
+the PostgreSQL/Oracle model. The only significant difference
+is that Informix and MS-SQL both treat NULLs as
+indistinct in a UNIQUE column.
+</p>
+
+<p>
+The fact that NULLs are distinct for UNIQUE columns but are indistinct for
+SELECT DISTINCT and UNION continues to be puzzling. It seems that NULLs
+should be either distinct everywhere or nowhere. And the SQL standards
+documents suggest that NULLs should be distinct everywhere. Yet as of
+this writing, no SQL engine tested treats NULLs as distinct in a SELECT
+DISTINCT statement or in a UNION.
+</p>
+</blockquote>
+
+
+<p>
+The following table shows the results of the NULL handling experiments.
+</p>
+
+<table border=1 cellpadding=3 width="100%">
+<tr><th>&nbsp;&nbsp;</th>
+<th>SQLite</th>
+<th>PostgreSQL</th>
+<th>Oracle</th>
+<th>Informix</th>
+<th>DB2</th>
+<th>MS-SQL</th>
+<th>OCELOT</th>
+</tr>
+
+<tr><td>Adding anything to null gives null</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+</tr>
+<tr><td>Multiplying null by zero gives null</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+</tr>
+<tr><td>nulls are distinct in a UNIQUE column</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#aaaad2">(Note 4)</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+</tr>
+<tr><td>nulls are distinct in SELECT DISTINCT</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+</tr>
+<tr><td>nulls are distinct in a UNION</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+</tr>
+<tr><td>"CASE WHEN null THEN 1 ELSE 0 END" is 0?</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+</tr>
+<tr><td>"null OR true" is true</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+</tr>
+<tr><td>"not (null AND false)" is true</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+</tr>
+</table>
+
+<table border=1 cellpadding=3 width="100%">
+<tr><th>&nbsp;&nbsp;</th>
+<th>MySQL<br>3.23.41</th>
+<th>MySQL<br>4.0.16</th>
+<th>Firebird</th>
+<th>SQL<br>Anywhere</th>
+<th>Borland<br>Interbase</th>
+</tr>
+
+<tr><td>Adding anything to null gives null</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+</tr>
+<tr><td>Multiplying null by zero gives null</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+</tr>
+<tr><td>nulls are distinct in a UNIQUE column</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#aaaad2">(Note 4)</td>
+<td valign="center" align="center" bgcolor="#aaaad2">(Note 4)</td>
+</tr>
+<tr><td>nulls are distinct in SELECT DISTINCT</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No (Note 1)</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+</tr>
+<tr><td>nulls are distinct in a UNION</td>
+<td valign="center" align="center" bgcolor="#aaaad2">(Note 3)</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No (Note 1)</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+</tr>
+<tr><td>"CASE WHEN null THEN 1 ELSE 0 END" is 0?</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#aaaad2">(Note 5)</td>
+</tr>
+<tr><td>"null OR true" is true</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+</tr>
+<tr><td>"not (null AND false)" is true</td>
+<td valign="center" align="center" bgcolor="#c7a9a9">No</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+<td valign="center" align="center" bgcolor="#a9c7a9">Yes</td>
+</tr>
+</table>
+
+<table border=0 align="right" cellpadding=0 cellspacing=0>
+<tr>
+<td valign="top" rowspan=5>Notes:&nbsp;&nbsp;</td>
+<td>1.&nbsp;</td>
+<td>Older versions of firebird omit all NULLs from SELECT DISTINCT
+and from UNION.</td>
+</tr>
+<tr><td>2.&nbsp;</td>
+<td>Test data unavailable.</td>
+</tr>
+<tr><td>3.&nbsp;</td>
+<td>MySQL version 3.23.41 does not support UNION.</td>
+</tr>
+<tr><td>4.&nbsp;</td>
+<td>DB2, SQL Anywhere, and Borland Interbase
+do not allow NULLs in a UNIQUE column.</td>
+</tr>
+<tr><td>5.&nbsp;</td>
+<td>Borland Interbase does not support CASE expressions.</td>
+</tr>
+</table>
+<br clear="both">
+
+<p>&nbsp;</p>
+<p>
+The following script was used to gather information for the table
+above.
+</p>
+
+<pre>
+-- I have about decided that SQL's treatment of NULLs is capricious and cannot be
+-- deduced by logic. It must be discovered by experiment. To that end, I have
+-- prepared the following script to test how various SQL databases deal with NULL.
+-- My aim is to use the information gathered from this script to make SQLite as
+-- much like other databases as possible.
+--
+-- If you could please run this script in your database engine and mail the results
+-- to me at drh@hwaci.com, that will be a big help. Please be sure to identify the
+-- database engine you use for this test. Thanks.
+--
+-- If you have to change anything to get this script to run with your database
+-- engine, please send your revised script together with your results.
+--
+
+-- Create a test table with data
+create table t1(a int, b int, c int);
+insert into t1 values(1,0,0);
+insert into t1 values(2,0,1);
+insert into t1 values(3,1,0);
+insert into t1 values(4,1,1);
+insert into t1 values(5,null,0);
+insert into t1 values(6,null,1);
+insert into t1 values(7,null,null);
+
+-- Check to see what CASE does with NULLs in its test expressions
+select a, case when b<>0 then 1 else 0 end from t1;
+select a+10, case when not b<>0 then 1 else 0 end from t1;
+select a+20, case when b<>0 and c<>0 then 1 else 0 end from t1;
+select a+30, case when not (b<>0 and c<>0) then 1 else 0 end from t1;
+select a+40, case when b<>0 or c<>0 then 1 else 0 end from t1;
+select a+50, case when not (b<>0 or c<>0) then 1 else 0 end from t1;
+select a+60, case b when c then 1 else 0 end from t1;
+select a+70, case c when b then 1 else 0 end from t1;
+
+-- What happens when you multiply a NULL by zero?
+select a+80, b*0 from t1;
+select a+90, b*c from t1;
+
+-- What happens to NULL for other operators?
+select a+100, b+c from t1;
+
+-- Test the treatment of aggregate operators
+select count(*), count(b), sum(b), avg(b), min(b), max(b) from t1;
+
+-- Check the behavior of NULLs in WHERE clauses
+select a+110 from t1 where b<10;
+select a+120 from t1 where not b>10;
+select a+130 from t1 where b<10 OR c=1;
+select a+140 from t1 where b<10 AND c=1;
+select a+150 from t1 where not (b<10 AND c=1);
+select a+160 from t1 where not (c=1 AND b<10);
+
+-- Check the behavior of NULLs in a DISTINCT query
+select distinct b from t1;
+
+-- Check the behavior of NULLs in a UNION query
+select b from t1 union select b from t1;
+
+-- Create a new table with a unique column. Check to see if NULLs are considered
+-- to be distinct.
+create table t2(a int, b int unique);
+insert into t2 values(1,1);
+insert into t2 values(2,null);
+insert into t2 values(3,null);
+select * from t2;
+
+drop table t1;
+drop table t2;
+</pre>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/nulls.in?m=fb46653cda64eb8a1">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/oldnews.html b/www/oldnews.html
new file mode 100644
index 0000000..30a2415
--- /dev/null
+++ b/www/oldnews.html
@@ -0,0 +1,1855 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Older News</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<?xml version="1.0" encoding="Windows-1252"?>
+
+
+<a name="2015_11_02"></a><h3>2015-11-02 - Release 3.9.2</h3><blockquote>
+<p>SQLite <a href="releaselog/3_9_2.html">version 3.9.2</a> is a patch release fixing two obscure bugs.
+(Details: <a href="https://www.sqlite.org/src/tktview?name=8a2adec166">(1)</a>,
+<a href="https://www.sqlite.org/src/tktview?name=ac661962a2">(2)</a>).
+Upgrade only if you are having problems.
+</blockquote><hr width="50%"><a name="2015_10_16"></a><h3>2015-10-16 - Release 3.9.1</h3><blockquote>
+<p>SQLite <a href="releaselog/3_9_1.html">version 3.9.1</a> is a
+<a href="https://www.sqlite.org/src/vpatch?from=version-3.9.0&to=version-3.9.1">small patch</a>
+to <a href="releaselog/3_9_0.html">version 3.9.0</a> that includes
+a few simple build script and #ifdef tweaks to make the code easier to
+compile on a wider variety of platform. There are no functional changes,
+except for a single
+<a href="https://www.sqlite.org/src/info/57eec374ae1d0a1d4a">minor bug-fix</a> in
+<a href="json1.html">the json1 extension</a> to stop it from recognizing form-feed
+(ASCII 0x0c) as a whitespace character, in conformance with
+<a href="http://www.rfc-editor.org/rfc/rfc7159.txt">RFC7159</a>.
+</blockquote><hr width="50%"><a name="2015_10_14"></a><h3>2015-10-14 - Release 3.9.0</h3><blockquote>
+<p>SQLite version 3.9.0 is a regularly schedule maintenance release.
+Key changes include:
+<ul>
+<li>Begin using <a href="http://semver.org/">semantic versioning</a>.
+<li><a href="json1.html">JSON SQL functions</a>
+<li>The <a href="fts5.html">FTS5</a> full-text search engine
+<li>Support for <a href="expridx.html">indexes on expressions</a>
+<li>Support for <a href="vtab.html#tabfunc2">table-valued functions</a>
+</ul>
+See the <a href="releaselog/3_9_0.html">change log</a> for a long and more complete list
+of changes.
+</blockquote><hr width="50%"><a name="2015_07_29"></a><h3>2015-07-29 - Release 3.8.11.1</h3><blockquote>
+<p>SQLite version 3.8.11.1 is a patch release that fixes two arcane
+ issues that were reported shortly after 3.8.11 was released. Upgrade
+ from 3.8.11 only in the unlikely event that one of these obscure
+ issues affect your code.
+</blockquote><hr width="50%"><a name="2015_07_27"></a><h3>2015-07-27 - Release 3.8.11</h3><blockquote>
+<p>SQLite version 3.8.11 is a regularly scheduled maintenance release.
+ See the <a href="releaselog/3_8_11.html">change log</a> for details.
+</blockquote><hr width="50%"><a name="2015_05_20"></a><h3>2015-05-20 - Release 3.8.10.2</h3><blockquote>
+<p>Yikes! Index corruption after a sequence of valid SQL statements!
+<p>It has been many years since anything like
+ <a href="https://www.sqlite.org/src/info/34cd55d6">this bug</a> has snuck into
+ an official SQLite release. But for the pasts seven months
+ (<a href="releaselog/3_8_7.html">version 3.8.7</a> through <a href="releaselog/3_8_10_1.html">version 3.8.10.1</a>)
+ if you do an INSERT into a carefully
+ crafted schema in which there are two nested triggers that convert
+ an index key value from TEXT to INTEGER and then back
+ to TEXT again, the INTEGER value might get inserted as the index
+ key instead of the correct TEXT, resulting in index corruption.
+ This patch release adds a single line of code to fix the problem.
+<p>If you do actually encounter this problem, running <a href="lang_reindex.html">REINDEX</a> on the
+ damaged indexes will clear it.
+</blockquote><hr width="50%"><a name="2015_05_09"></a><h3>2015-05-09 - Release 3.8.10.1</h3><blockquote>
+<p>The 3.8.10 release did not add the new <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a>
+ compile-time option to the <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> interface.
+ This patch release fixes that omission. And while we are at it,
+ the associated <a href="dbstat.html">dbstat virtual table</a> was enhanced slightly and a
+ harmless compiler warning was fixed.</p>
+
+<p> <p>There is no reason to upgrade from version 3.8.10 unless you are
+ using the new <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> compile-time option.
+</blockquote><hr width="50%"><a name="2015_05_07"></a><h3>2015-05-07 - Release 3.8.10</h3><blockquote>
+<p>SQLite version 3.8.10 is a regularly scheduled maintenance release.
+ This release features performance improvements, fixes to several
+ arcane bugs found by the AFL fuzzer, the new "sqldiff.exe" command-line
+ utility, improvements to the documentation, and other enhancements.
+ See the <a href='releaselog/3_8_10.html'>release notes</a> for
+ additional information.
+</blockquote><hr width="50%"><a name="2015_04_08"></a><h3>2015-04-08 - Release 3.8.9</h3><blockquote>
+<p>SQLite version 3.8.9 is a regularly scheduled maintenance release.
+ New features in this release include the
+ <a href="pragma.html#pragma_index_xinfo">PRAGMA index_xinfo</a> command, the <a href="c3ref/status.html">sqlite3_status64()</a> interface,
+ and the ".dbinfo" command of the <a href="cli.html">command-line shell</a>.
+ See the <a href='releaselog/3_8_9.html'>release notes</a> for
+ additional information.
+</blockquote><hr width="50%"><a name="2015_02_25"></a><h3>2015-02-25 - Release 3.8.8.3</h3><blockquote>
+<p>The 3.8.8.3 patch release fixes an obscure problem in the SQLite code
+ generator that can cause incorrect results when the qualifying expression
+ of a <a href="partialindex.html">partial index</a> is used inside the ON clause of a LEFT JOIN.
+ This problem has been in the code since support for partial indexes
+ was first added in version 3.8.0. However, it is difficult to imagine
+ a valid reason to every put the qualifying constraint inside the ON
+ clause of a LEFT JOIN, and so this issue has never come up before.</p>
+
+<p><p>Any applications that is vulnerable to this bug would have encountered
+ problems already. Hence, upgrading from the previous release is optional.
+</blockquote><hr width="50%"><a name="2015_01_30"></a><h3>2015-01-30 - Release 3.8.8.2</h3><blockquote>
+<p>The 3.8.8.2 patch release fixes a single minor problem: It ensures
+ that the <a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint(TRUNCATE)</a> operation will always truncate
+ the <a href="wal.html">write-ahead log</a> even if log had already been reset and contained
+ no new content. It is unclear if this is a bug fix or a new feature.</p>
+
+<p><p>Something like this would normally go into the next regularly scheduled
+ release, but a prominent SQLite user needed the change in a hurry so
+ we were happy to rush it out via this patch.</p>
+
+<p><p>There is no reason to upgrade unless you actually need the enhanced
+ behavior of <a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint(TRUNCATE)</a>.
+</blockquote><hr width="50%"><a name="2015_01_20"></a><h3>2015-01-20 - Release 3.8.8.1</h3><blockquote>
+<p>Within hours of releasing version 3.8.8, a bug was reported against
+ the 10-month-old 3.8.4 release. As that bug exists in all subsequent
+ releases, the decision was made to issue a small patch to the
+ 3.8.8 before it came into widespread use.</p>
+
+<p><p>See ticket
+ <a href="https://www.sqlite.org/src/info/f97c4637102a3ae72b7911">f97c4637102a3ae72b7911</a>
+ for a description of the bug.</p>
+
+<p><p>The changes between versions 3.8.8 and 3.8.8.1 are minimal.
+</blockquote><hr width="50%"><a name="2015_01_16"></a><h3>2015-01-16 - Release 3.8.8</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_8.html">version 3.8.8</a> is a regularly schedule maintenance release of
+ SQLite.</p>
+
+<p><p>There are no dramatic new features or performance enhancements in this
+ release, merely incremental improvements. Most of the performance gain
+ in this release comes from refactoring the B-Tree rebalancing logic to
+ avoid unnecessary memcpy() operations. New features include the
+ <a href="pragma.html#pragma_data_version">PRAGMA data_version</a> statement and the ability to accept a
+ <a href="lang_select.html#values">VALUES clause</a> with no arbitrary limit on the number of rows.
+ Several obscure bugs have been fixed, including some multithreading
+ races and a work-around for a compiler bug on some Macs.</p>
+
+<p><p>See the <a href="releaselog/3_8_8.html">change log</a> for a longer list of
+ enhancements and bug fixes.
+</blockquote><hr width="50%"><a name="2014_12_09"></a><h3>2014-12-09 - Release 3.8.7.4</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_7_4.html">version 3.8.7.4</a> an unscheduled bug-fix release. Changes from
+ the previous release and from <a href="releaselog/3_8_7.html">version 3.8.7</a> are minimal.</p>
+
+<p><p>This release fixes adds in a mutex that is required by the changes of
+ the 3.8.7.3 patch but was accidentally omitted. The mutex was not required
+ by any of the internal SQLite tests, but Firefox crashes without it.
+ Test cases have been added to ensure that mutex is never again missed.
+</blockquote><hr width="50%"><a name="2014_12_06"></a><h3>2014-12-06 - Release 3.8.7.3</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_7_3.html">version 3.8.7.3</a> an unscheduled bug-fix release. Changes from
+ the previous release and from <a href="releaselog/3_8_7.html">version 3.8.7</a> are minimal.</p>
+
+<p><p>This release fixes two obscure bugs that can result in incorrect
+ query results and/or application crashes, but not (as far as we can
+ tell) security vulnerabilities. Both bugs have been latent in the
+ code across multiple prior releases and have never before been encountered,
+ so they are unlikely to cause problems. Nevertheless
+ it seems prudent to publish fixes for them both. See the
+ change log for details.
+</blockquote><hr width="50%"><a name="2014_11_19"></a><h3>2014-11-19 - Release 3.8.7.2</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_7_2.html">version 3.8.7.2</a> is a patch and bug-fix release. Changes from
+ the previous release are minimal.</p>
+
+<p><p>The primary reason for this release is to enhance the <a href="lang_transaction.html">ROLLBACK</a> command
+ so that it allows running queries on the same database connection to
+ continue running as long as the ROLLBACK does not change the schema.
+ In all previous versions of SQLite, a ROLLBACK would cause pending
+ queries to stop immediately and return <a href="rescode.html#abort">SQLITE_ABORT</a> or
+ <a href="rescode.html#abort_rollback">SQLITE_ABORT_ROLLBACK</a>. Pending queries still abort if the ROLLBACK
+ changes the database schema, but as of this patch release, the queries
+ are allowed to continue running if the schema is unmodified.</p>
+
+<p><p>In addition to the ROLLBACK enhancement, this patch release also
+ includes fixes for three obscure bugs. See the
+ <a href="releaselog/3_8_7_2.html">change log</a> for details.
+</blockquote><hr width="50%"><a name="2014_10_30"></a><h3>2014-10-30 - Release 3.8.7.1</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_7_1.html">version 3.8.7.1</a> is a bug-fix release.</p>
+
+<p><p>The primary reason for this bug-fix release is to address a problem with
+ updating the value of fields at the end of a table that were added
+ using <a href="lang_altertable.html">ALTER TABLE ADD COLUMN</a>. This problem
+ <a href="https://www.sqlite.org/src/info/43107840f1c02">1</a> first appeared in the
+ 3.8.7 release.</p>
+
+<p><p>Another minor annoyance in the 3.8.7 release was the fact that the
+ Android build tried to use the strchrnul() function from the standard
+ C library but that function is not available on Android. Android builds
+ had to add -DHAVE_STRCHRNUL=0 to work around the problem. This patch
+ fixes that so that Android builds should now work without any changes.</p>
+
+<p><p>The operation of <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=TRUNCATE</a> has been enhanced so that
+ it invokes fsync() after truncating the journal file when
+ <a href="pragma.html#pragma_synchronous">PRAGMA synchronous=FULL</a>. This helps to preserve transaction durability
+ in the case of a power loss occurring shortly after commit.</p>
+
+<p><p>Finally, a couple of long-standing and obscure problems associated with run
+ UPDATE and DELETE on VIEWs were fixed.</p>
+
+<p><p>The <a href="https://www.sqlite.org/src/vdiff?from=e4ab094f8afce0817f4074e823fabe59fc29ebb4&to=83afe23e553e802c0947c80d0ffdd120423e7c52&sbs=1">changes from 3.8.7</a> are minimal.
+</blockquote><hr width="50%"><a name="2014_10_17"></a><h3>2014-10-17 - Release 3.8.7</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_7.html">version 3.8.7</a> is a regularly scheduled maintenance release.
+ Upgrading from all prior versions is recommended.</p>
+
+<p><p>Most of the changes from the previous release have been micro-optimizations
+ designed to help SQLite run a little faster. Each individual optimization
+ has an unmeasurably small performance impact. But the improvements add up.
+ Measured on a well-defined workload (which the SQLite developers use
+ as a proxy for a typical application workload) using cachegrind on Linux
+ and compiled with gcc 4.8.1 and -Os on x64 linux, the current release
+ does over 20% more work for the same number of CPU cycles compared to the
+ previous release. Cachegrind is not a real CPU, and the workload
+ used for measurement is only a proxy. So your performance may vary.
+ We expect to see about half the measured and reported improvement in
+ real-world applications. 10% is less than 20% but it is still pretty
+ good, we think.</p>
+
+<p><p>This release includes a new set of C-language interfaces that have
+ unsigned 64-bit instead of signed 32-bit length parameters. The new
+ APIs do not provide any new capabilities. But they do make it easier
+ to write applications that are more resistant to integer overflow
+ vulnerabilities.</p>
+
+<p><p>This release also includes a new sorter that is able to use multiple
+ threads to help with large sort operations. (Sort operations are
+ sometimes required to implement ORDER BY and/or GROUP BY clauses and
+ are almost always required for CREATE INDEX.) The multi-threads sorter
+ is turned off by default and must be enabled using the
+ <a href="pragma.html#pragma_threads">PRAGMA threads</a> SQL command. Note that the multi-threaded sorter
+ provides faster real-time performance for large sorts, but it also
+ uses more CPU cycles and more energy.
+</blockquote><hr width="50%"><a name="2014_08_15"></a><h3>2014-08-15 - Release 3.8.6</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_6.html">version 3.8.6</a> is a regularly scheduled maintenance release.
+ Upgrading from all previous versions is recommended.</p>
+
+<p><p>This release contains the usual assortment of obscure bug fixes.
+ One bug, however, deserves special attention.
+ A problem appeared in the <a href="lang_createindex.html">CREATE INDEX</a> command beginning with
+ <a href="releaselog/3_8_2.html">version 3.8.2</a> (2013-12-06) that allowed, under some circumstances,
+ a UNIQUE index to be created on a column that was not unique. Once
+ the index was created, no new non-unique entries could be inserted, but
+ preexisting non-unique entries would remain. See ticket
+ <a href="http://www.sqlite.org/src/info/9a6daf340df99ba93c">9a6daf340df99ba93c</a>
+ for further information. In addition to fixing this bug, the
+ <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command has been enhanced to detect
+ non-uniqueness in UNIQUE indices, so that if this bug did introduce
+ any problems in databases, those problems can be easily detected.</p>
+
+<p><p>Other noteworthy changes include the addition of support for
+ <a href="lang_expr.html#hexint">hexadecimal integers</a> (ex: 0x1234), and performance enhancements
+ to the <a href="lang_expr.html#in_op">IN operator</a> which, according to
+ <a href="http://www.mail-archive.com/sqlite-users%40sqlite.org/msg85350.html">mailing list reports</a>,
+ help some queries run up to five times faster.</p>
+
+<p><p>Version 3.8.6 uses 25% fewer CPU cycles than version 3.8.0 from
+ approximately one year ago, according to <a href="http://valgrind.org/">valgrind</a>
+ and the
+ <a href="http://www.sqlite.org/src/artifact/d29c8048beb7e">test/speedtest1.c</a>
+ test program.
+ On the other hand,
+ the compiled binary for version 3.8.6 is about 5% larger than 3.8.0.
+ The size increase is
+ due in part to the addition of new features such as <a href="withoutrowid.html">WITHOUT ROWID</a>
+ tables and <a href="lang_with.html">common table expressions</a>.
+</blockquote><hr width="50%"><a name="2014_06_04"></a><h3>2014-06-04 - Release 3.8.5</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_5.html">version 3.8.5</a> is a regularly scheduled maintenance release.
+ Upgrading from the previous version is recommended.</p>
+
+<p><p>Version 3.8.5 fixes more than a dozen obscure bugs. None of these
+ bugs should be a problem for existing applications. Nor do any of
+ the bugs represent a security vulnerability. Nevertheless, upgrading
+ is recommended to prevent future problems.</p>
+
+<p><p>In addition to bug fixes, the 3.8.5 release adds improvements to the
+ query planner, especially regarding sorting using indices and handling
+ OR terms
+ in the WHERE clause for WITHOUT ROWID tables. The ".system" and
+ ".once" dot-commands were added to the command-line interface. And
+ there were enhancements to the FTS4 and RTREE virtual tables. See
+ the change log for details.
+</blockquote><hr width="50%"><a name="2014_04_03"></a><h3>2014-04-03 - Release 3.8.4.3</h3><blockquote>
+<p>The optimizations added in <a href="releaselog/3_8_4.html">version 3.8.4</a> caused some queries that involve
+ subqueries in the FROM clause, DISTINCT, and ORDER BY clauses, to give an incorrect
+ result. See
+ <a href="http://www.sqlite.org/src/info/98825a79ce145686392d8074032ae54863aa21a3">ticket 98825a79ce145</a>
+ for details.
+ This release adds a
+ <a href="http://www.sqlite.org/src/fdiff?sbs=1&v1=7d539cedb1c&v2=ebad891b7494d&smhdr">one-character change</a>
+ to a single line of code to fix the problem.
+</blockquote><hr width="50%"><a name="2014_03_26"></a><h3>2014-03-26 - Release 3.8.4.2</h3><blockquote>
+<p>The code changes that resulted in the performance improvements
+ in <a href="releaselog/3_8_4.html">version 3.8.4</a> missed a single buffer overflow test, which could
+ result in a read past the end of a buffer while searching a database
+ that is corrupted in a particular way. <a href="releaselog/3_8_4_2.html">Version 3.8.4.2</a> fixes that
+ problem using a
+ <a href="http://www.sqlite.org/src/fdiff?v1=e45e3f9daf38c5be&v2=714df4e1c82f629d&sbs=1">one-line patch</a>.</p>
+
+<p><p>We are not aware of any problems in <a href="releaselog/3_8_4.html">version 3.8.4</a>
+ when working with well-formed database files. The problem fixed by this
+ release only comes up when reading corrupt database files.
+</blockquote><hr width="50%"><a name="2014_03_11"></a><h3>2014-03-11 - Release 3.8.4.1</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_4_1.html">version 3.8.4.1</a> is a patch against <a href="releaselog/3_8_4.html">version 3.8.4</a> that fixes
+ two minor issues:
+<ol>
+<li> Work around a C-preprocessor macro conflict that causes compilation
+ problems for some configurations of Visual Studio.
+<li> Adjust the cost computation for the <a href="optoverview.html#skipscan">skip-scan optimization</a> for
+ improved performance.
+</ol>
+Both of these issues came to light within minutes of tagging the previous
+release. Neither issue is serious but they can be annoying. Hence, the
+decision was made to do a quick patch release to address both issues.
+</blockquote><hr width="50%"><a name="2014_03_10"></a><h3>2014-03-10 - Release 3.8.4</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_4.html">version 3.8.4</a> is a maintenance release featuring performance
+ enhancements and fixes for a number of obscure bugs.
+ There are no significant new features in SQLite version 3.8.4.
+ However, the number of CPU cycles (measured by valgrind) needed to
+ do many common operations has be reduced by about 12% relative to the
+ previous release, and by about 25% relative to <a href="releaselog/3_7_16.html">version 3.7.16</a>
+ from approximately one year ago.</p>
+
+<p><p>Version 3.8.4 of SQLite fixes several corner-case bugs that were
+ found since the previous release. These bugs were unlikely to appear
+ in practice, and none represent a security vulnerability.
+ Nevertheless, developers are encouraged to upgrade from all prior releases.
+</blockquote><hr width="50%"><a name="2014_02_11"></a><h3>2014-02-11 - Release 3.8.3.1</h3><blockquote>
+<p>SQLite <a href="releaselog/3_8_3_1.html">version 3.8.3.1</a> fixes a bug present in versions 3.8.1,
+ 3.8.2 and 3.8.3 that can cause queries to omit valid output rows.
+ Upgrading from those versions is recommended.</p>
+
+<p><p>The problem only comes up if SQLite is compiled with either the
+ <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> or <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time options.
+ In that case, if a query has a WHERE clause that contains expressions
+ like this:
+ <blockquote>
+WHERE (expr1 OR expr2 OR ... OR exprN) AND column IS NOT NULL
+ </blockquote>
+ Where all of expr1 through exprN are suitable for use by indexes,
+ then during query planning SQLite might mistakenly converted
+ the "column IS NOT NULL" term into "column>NULL". But the latter
+ term is never true, and so the query would return no rows.</p>
+
+<p><p>The trouble ticket for this bug is
+ &#91;<a href="http://www.sqlite.org/src/info/4c86b126f2">4c86b126f2</a>&#93;.
+ It is recommended that all users upgrade to avoid this problem.
+</blockquote><hr width="50%"><a name="2014_02_03"></a><h3>2014-02-03 - Release 3.8.3</h3><blockquote>
+ <p>SQLite <a href="releaselog/3_8_3.html">version 3.8.3</a> is a regularly scheduled maintenance release.
+ Upgrading from the previous release is optional.</p>
+
+<p> <p>The most visible change in version 3.8.3 is the addition of
+ support for <a href="lang_with.html">common table expressions</a>. It is now possible to write a
+ single <a href="lang_select.html">SELECT</a> statement that will query a tree or graph, using either
+ a depth-first or a breadth-first search. A single SQLite query will
+ even <a href="lang_with.html#sudoku">solve Sudoku puzzles</a> or <a href="lang_with.html#mandelbrot">compute the Mandelbrot set</a>. As part
+ of this change, SQLite now accepts a <a href="lang_select.html#values">VALUES clause</a> anyplace that
+ a <a href="lang_select.html">SELECT</a> statement is valid.</p>
+
+<p> <p>This release also includes many small performance enhancements which
+ should give a small speed boost to legacy applications. And there are
+ other minor enhancements such as the addition of the <a href="lang_corefunc.html#printf">printf()</a> SQL
+ function. See the <a href="releaselog/3_8_3.html">change log</a> for details.
+</blockquote><hr width="50%"><a name="2013_12_06"></a><h3>2013-12-06 - Release 3.8.2</h3><blockquote>
+ <p>SQLite <a href="releaselog/3_8_2.html">version 3.8.2</a> is a regularly scheduled maintenance release.
+ Upgrading from the previous release is optional.</p>
+
+<p> <p>Version 3.8.2 adds support for <a href="withoutrowid.html">WITHOUT ROWID</a> tables. This is a
+ significant extension to SQLite. Database files that contain WITHOUT ROWID
+ tables are not readable or writable by prior versions of SQLite, however
+ databases that do not use WITHOUT ROWID tables are fully backwards
+ and forwards compatible.</p>
+
+<p> <p>The 3.8.2 release contains a potentially incompatible change. In
+ all prior versions of SQLite, a <a href="lang_expr.html#castexpr">cast</a> from a very large positive
+ floating point number into an integer resulted in the most negative integer.
+ In other words, CAST(+99.9e99 to INT) would yield -9223372036854775808.
+ This behavior came about because it is what x86/x64 hardware does
+ for the equivalent cast in the C language. But the behavior is
+ bizarre. And so it has been changed effective with this release so that
+ a cast from a floating point number into an integer returns the integer
+ between the floating point value and zero that is closest to the floating
+ point value. Hence, CAST(+99.9e99 to INT) now returns +9223372036854775807.
+ Since routines like <a href="c3ref/column_blob.html">sqlite3_column_int64()</a> do an implicit cast if the
+ value being accessed is really a floating point number, they are also
+ affected by this change.</p>
+
+<p> <p>Besides the two changes mentioned above, the 3.8.2 release also
+ includes a number of performance enhancements. The
+ <a href="optoverview.html#skipscan">skip-scan optimization</a> is now available for databases that have been
+ processed by <a href="lang_analyze.html">ANALYZE</a>. Constant SQL functions are now factored out of
+ inner loops, which can result in a significant speedup for queries that
+ contain WHERE clause terms like "date>datetime('now','-2 days')". And
+ various high-runner internal routines have been refactored for reduced
+ CPU load.
+</blockquote><hr width="50%"><a name="2013_10_17"></a><h3>2013-10-17 - Release 3.8.1</h3><blockquote>
+ <p>SQLite <a href="releaselog/3_8_1.html">version 3.8.1</a> is a regularly scheduled maintenance release.
+ Upgrading from the previous release is optional, though you should upgrade
+ if you are using <a href="partialindex.html">partial indices</a> as there was a
+ <a href="http://www.sqlite.org/src/info/a5c8ed66ca">bug</a> related to partial
+ indices in the previous release that could result in an incorrect answer
+ for count(*) queries.</p>
+
+<p> <p>The <a href="queryplanner-ng.html">next generation query planner</a> that was premiered in the previous
+ release continues to work well.
+ The new query planner has been tweaked slightly
+ in the current release to help it make better decisions in some
+ cases, but is largely unchanged. Two new SQL functions, <a href="lang_corefunc.html#likelihood">likelihood()</a> and
+ <a href="lang_corefunc.html#unlikely">unlikely()</a>, have been added to allow developers to give hints to the
+ query planner without forcing the query planner into a particular decision.</p>
+
+<p> <p>Version 3.8.1 is the first SQLite release to take into account the
+ estimated size of table and index rows when choosing a query plan.
+ Row size estimates are based on the declared datatypes of columns.
+ For example, a column of type VARCHAR(1000) is assumed
+ to use much more space than a column of type INT. The datatype-based
+ row size estimate can be
+ overridden by appending a term of the form "sz=NNN" (where NNN is the
+ average row size in bytes) to the end of the <a href="fileformat2.html#stat1tab">sqlite_stat1.stat</a>
+ record for a table or index. Currently, row sizes are only used to help the
+ query planner choose between a table or one of its indices when doing a
+ table scan or a count(*) operation, though future releases are likely
+ to use the estimated row size in other contexts as well. The new
+ <a href="pragma.html#pragma_stats">PRAGMA stats</a> statement can be used to view row size estimates.</p>
+
+<p> <p>Version 3.8.1 adds the <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time option.
+ STAT4 is very similar to STAT3 in that it uses samples from indices to
+ try to guess how many rows of the index will be satisfy by WHERE clause
+ constraints. The difference is that STAT4 samples all columns of the
+ index whereas the older STAT3 only sampled the left-most column. Users
+ of STAT3 are encouraged to upgrade to STAT4. Application developers should
+ use STAT3 and STAT4 with caution since both options, by design, violate
+ the <a href="queryplanner-ng.html#qpstab">query planner stability guarantee</a>, making it more difficult to ensure
+ uniform performance is widely-deployed and mass-produced embedded
+ applications.
+</blockquote><hr width="50%"><a name="2013_09_03"></a><h3>2013-09-03 - Release 3.8.0.2</h3><blockquote>
+ <p>SQLite <a href="releaselog/3_8_0_2.html">version 3.8.0.2</a> contains a one-line fix to a bug in the
+ new optimization that tries to omit unused LEFT JOINs from a query.
+</blockquote><hr width="50%"><a name="2013_08_29"></a><h3>2013-08-29 - Release 3.8.0.1</h3><blockquote>
+ <p>SQLite <a href="releaselog/3_8_0_1.html">version 3.8.0.1</a> fixes some obscure bugs that were uncovered by
+ users in the 3.8.0 release. Changes from 3.8.0 are minimal.
+</blockquote><hr width="50%"><a name="2013_08_26"></a><h3>2013-08-26 - Release 3.8.0</h3><blockquote>
+ <b>Do not fear the zero!</b></p>
+
+<p> <p>SQLite <a href="releaselog/3_8_0.html">version 3.8.0</a> might easily have been called "3.7.18" instead.
+ However, this release features the cutover of the
+ <a href="queryplanner-ng.html">next generation query planner</a> or <a href="queryplanner-ng.html">NGQP</a>, and there is a small chance of
+ <a href="queryplanner-ng.html#hazards">breaking legacy programs</a> that
+ rely on undefined behavior in previous SQLite releases, and so the
+ minor version number was incremented for that reason.
+ But the risks are low and there is a <a href="queryplanner-ng.html#howtofix">query planner checklist</a> is
+ available to application developers to aid in avoiding problems.</p>
+
+<p> <p>SQLite <a href="releaselog/3_8_0.html">version 3.8.0</a> is actually one of the most heavily tested
+ SQLite releases ever. Thousands and thousands of beta copies have
+ be downloaded, and presumably tested, and there have been no problem
+ reports.</p>
+
+<p> <p>In addition to the <a href="queryplanner-ng.html">next generation query planner</a>, the 3.8.0 release
+ adds support for <a href="partialindex.html">partial indices</a>, as well as several other new features.
+ See the <a href="releaselog/3_8_0.html">change log</a> for further detail.
+</blockquote><hr width="50%"><a name="2013_05_20"></a><h3>2013-05-20 - Release 3.7.17</h3><blockquote>
+ SQLite <a href="releaselog/3_7_17.html">version 3.7.17</a> is a regularly schedule maintenance release.
+ Visit the <a href="releaselog/3_7_17.html">change log</a> for a full explanation of the
+ changes in this release.</p>
+
+<p> There are many bug fixes in version 3.7.17. But this does not indicate
+ that 3.7.16 was a problematic release. All of the bugs in 3.7.17 are
+ obscure and are unlikely to impact any particular application. And most
+ of the bugs that are fixed in 3.7.17 predate 3.7.16 and have been in
+ the code for years without ever before being noticed.
+ Nevertheless, due to the large number of fixes,
+ all users are encouraged to upgrade when possible.
+</blockquote><hr width="50%"><a name="2013_04_12"></a><h3>2013-04-12 - Release 3.7.16.2</h3><blockquote>
+ SQLite <a href="releaselog/3_7_16_2.html">version 3.7.16.2</a> fixes a long-standing flaw in the Windows
+ OS interface that
+ can result in database corruption under a rare race condition.
+ See <a href="http://www.sqlite.org/src/info/7ff3120e4f">http://www.sqlite.org/src/info/7ff3120e4f</a> for a full description
+ of the problem.</p>
+
+<p> As far as we know, this bug has never been seen in the wild. The
+ problem was discovered by the SQLite developers while writing stress tests
+ for a separate component of SQLite. Those stress tests have not yet
+ found any problems with the component they were intended to verify, but
+ they did find the bug which is the subject of this patch release.</p>
+
+<p> Other than updates to version numbers, the only difference between this
+ release and 3.7.16.1 is a two-character change in a single identifier,
+ which is contained in the windows-specific OS interface logic. There
+ are no changes in this release (other than version numbers) for platforms
+ other than Windows.
+</blockquote><hr width="50%"><a name="2013_03_29"></a><h3>2013-03-29 - Release 3.7.16.1</h3><blockquote>
+ SQLite <a href="releaselog/3_7_16_1.html">version 3.7.16.1</a> is a bug fix release that fixes a few problems
+ that were present in the previous releases.</p>
+
+<p> The primary motivation for version 3.7.16.1 is to fix a bug in the
+ query optimizer that was introduced as part of <a href="releaselog/3_7_15.html">version 3.7.15</a>. The
+ query optimizer was being a little overzealous in optimizing out some
+ ORDER BY clauses, which resulted in sorting being omitted on occasions
+ where sorting is required to get the correct answer. See
+ ticket <a href="http://www.sqlite.org/src/info/a179fe7465">a179fe7465</a> for
+ details.</p>
+
+<p> In addition to the ORDER BY fix, several other patches to fix obscure
+ (and mostly harmless) bugs and to fix spelling errors in source code
+ comments are also included in this release.
+</blockquote><hr width="50%"><a name="2013_03_18"></a><h3>2013-03-18 - Release 3.7.16</h3><blockquote>
+ SQLite <a href="releaselog/3_7_16.html">version 3.7.16</a> is a regularly scheduled release of SQLite.
+ This release contains several language enhancements and improvements
+ to the query optimizer. A list of the major enhancements and optimizations
+ can be see on the <a href="releaselog/3_7_16.html">change log</a>.</p>
+
+<p> There was one important bug fix
+ (see <a href="http://www.sqlite.org/src/info/fc7bd6358f">Ticket fc7bd6358f</a>)
+ that addresses an incorrect query result that could have occurred in
+ a three-way join where the join constraints compared INTEGER columns
+ to TEXT columns. This issue had been in the code for time out of mind
+ and had never before been reported, so we surmise that it is very obscure.
+ Nevertheless, all users are advised to upgrade to avoid any future problems
+ associated with this issue.
+</blockquote><hr width="50%"><a name="2013_01_09"></a><h3>2013-01-09 - Release 3.7.15.2</h3><blockquote>
+ SQLite <a href="releaselog/3_7_15_2.html">version 3.7.15.2</a> is a patch release that fixes a single bug
+ that was introduced in version <a href="releaselog/3_7_15.html">version 3.7.15</a>. The fix is a 4-character
+ edit to a single line of code. Other than this 4-character change and
+ the update of the version number, nothing has changed from
+ <a href="releaselog/3_7_15_1.html">version 3.7.15.1</a>.
+</blockquote><hr width="50%"><a name="2012_12_19"></a><h3>2012-12-19 - Release 3.7.15.1</h3><blockquote>
+ SQLite <a href="releaselog/3_7_15_1.html">version 3.7.15.1</a> is a patch release that fixes a single bug
+ that was introduced in version <a href="releaselog/3_7_15.html">version 3.7.15</a>. The fix involved changing
+ two lines of code and adding a single assert(). This release also includes
+ some new test cases to prevent a regression of the bug, and the version
+ number is increased, of course. But otherwise, nothing has changed from
+ <a href="releaselog/3_7_15.html">version 3.7.15</a>.
+</blockquote><hr width="50%"><a name="2012_12_12"></a><h3>2012-12-12 - Release 3.7.15</h3><blockquote>
+ SQLite <a href="releaselog/3_7_15.html">version 3.7.15</a> is a regularly schedule release of SQLite. This
+ release contains several improvements to the query planner and optimizer
+ and one important bug fix. This is the first release to officially
+ support Windows 8 Phone.</p>
+
+<p> The important bug fix is a problem that can lead to segfaults when using
+ <a href="sharedcache.html">shared cache mode</a> on a schema that contains a <a href="lang_expr.html#collateop">COLLATE operator</a> within
+ a <a href="lang_createtable.html#ckconst">CHECK constraint</a> or within a <a href="lang_createview.html">view</a>. Collating functions are associated
+ with individual database connections. But a pointer to the collating function
+ was also being cached within expressions. If an expression was part of the
+ schema and contained a cached collating function, it would point to the
+ collating function in the database connection that originally parsed the
+ schema. If that database connection closed while other database
+ connections using the same shared cache continued to operate, they other
+ database connections would try to use the deallocated collating function
+ in the database connection that closed. The fix in version 3.7.15 was to
+ not cache collating function pointers in the expression structure but
+ instead look them up each time a new statement is prepared.</p>
+
+<p> This release also contains some important enhancements to the query planner
+ which should (we hope) make some queries run faster. The enhancements
+ include:</p>
+
+<p> <ol><li><p>When doing a full-table scan, try to use an index instead of
+ the original table, under the theory that indices contain less information
+ and are thus smaller and hence require less disk I/O to scan.</p></p>
+
+<p> <li><p>Enhance the <a href="lang_expr.html#in_op">IN operator</a> to allow it to make use of
+ indices that have <a href="datatype3.html#affinity">numeric affinity</a>.</p></p>
+
+<p> <li><p>Do a better job of recognizing when an ORDER BY clause can be
+ implemented using indices - especially in cases where the ORDER BY clause
+ contains terms from two or more tables in a join.</p>
+ </ol>
+</blockquote><hr width="50%"><a name="2012_10_04"></a><h3>2012-10-04 - Release 3.7.14.1</h3><blockquote>
+ SQLite <a href="releaselog/3_7_14_1.html">version 3.7.14.1</a> is a patch release. Changes from the baseline
+ version 3.7.14 are minimal and are restricted to fixing three bugs.</p>
+
+<p> One of the fixed bugs is a long-standing issue with the TCL interface.
+ Another is an external compiler bug that SQLite merely works around and
+ that only comes up if you are using the VisualStudio-2012 compiler to
+ generate WinRT applications on ARM with optimizations enabled. The
+ third problem is an SQLite core bug, introduced in version 3.7.14, that
+ can cause a segfault if a query contains a LEFT JOIN that contains an OR
+ in the ON clause.
+</blockquote><hr width="50%"><a name="2012_09_03"></a><h3>2012-09-03 - Release 3.7.14</h3><blockquote>
+ SQLite <a href="releaselog/3_7_14.html">version 3.7.14</a> is a regularly scheduled maintenance release
+ of SQLite. The previous release continues to work well. Upgrading
+ is optional.</p>
+
+<p> Version 3.7.14 drops native support for OS/2. We are not aware of any
+ active projects that were using SQLite on OS/2 and since the SQLite
+ developers had no way of testing on OS/2 it seemed like it was time
+ to simply remove the OS/2 code from the SQLite tree. If there are
+ OS/2 projects out there that still need SQLite support, they can
+ continue to maintain their own private <a href="vfs.html">VFS</a> which can be linked to
+ SQLite at start-time using the <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> interface.</p>
+
+<p> The <a href="c3ref/close.html">sqlite3_close_v2()</a> interface has been added. The sqlite3_close_v2()
+ interface differs from sqlite3_close() in that it is designed to work
+ better for host language that use a garbage collector. With the older
+ sqlite3_close() interface, the associated <a href="c3ref/stmt.html">prepared statements</a> and
+ <a href="c3ref/backup.html">sqlite3_backup</a> objects must be destroyed before the database connection.
+ With the newer sqlite3_close_v2() interface, the objects can be destroyed
+ in any order.</p>
+
+<p> This release also includes performance improvements to the sort algorithm
+ that is used to implement ORDER BY and CREATE INDEX. And the query planner
+ has been enhanced to better use covering indices on queries that use OR
+ terms in the WHERE clause.
+</blockquote><hr width="50%"><a name="2012_06_11"></a><h3>2012-06-11 - Release 3.7.13</h3><blockquote>
+ SQLite <a href="releaselog/3_7_13.html">version 3.7.13</a> adds support for WinRT and metro style
+ applications for Microsoft Windows 8. The 3.7.13 release is
+ coming sooner than is usual after the previous release in order to get
+ this new capability into the hands of developers. To use SQLite in
+ a metro style application, compile with the -DSQLITE_OS_WINRT flag.
+ Because of the increased application security and safety requirements
+ of WinRT, all database
+ filenames should be full pathnames. Note that SQLite is not capable
+ of accessing databases outside the installation directory and application
+ data directory. This restriction is another security and safety feature
+ of WinRT. Apart from these restrictions, SQLite should work exactly
+ the same on WinRT as it does on every other system.</p>
+
+<p> Also in this release: when a database is opened using <a href="uri.html">URI filenames</a>
+ and the <a href="uri.html#coreqp">mode=memory</a> query parameter
+ then the database is an in-memory database, just as if it had
+ been named ":memory:". But, if shared cache mode is enabled, then
+ all other database connections that specify the same URI filename
+ will connect to the same in-memory database. This allows two or more
+ database connections (in the same process) to share the same in-memory
+ database.</p>
+
+<p> This release also includes some corner-case performance optimizations
+ that are obscure yet significant to an important subset of SQLite users.
+ Getting these performance optimizations into circulation quickly is
+ yet another reason for making this release so soon following the previous.</p>
+
+<p> The next release of SQLite is scheduled to occur after the usual
+ 2 or 3 month interval.
+</blockquote><hr width="50%"><a name="2012_05_22"></a><h3>2012-05-22 - Patch Release 3.7.12.1</h3><blockquote>
+ SQLite <a href="releaselog/3_7_12_1.html">version 3.7.12.1</a> is a patch release for <a href="releaselog/3_7_12.html">version 3.7.12</a> that
+ fixes a <a href="http://www.sqlite.org/src/info/c2ad16f997ee9c">bug</a> that was
+ introduced in version 3.7.12 and that can
+ cause a segfault for certain obscure nested aggregate queries.
+ There are very few changes in 3.7.12.1, and upgrading is only needed for
+ applications that do nested aggregate queries.
+</blockquote><hr width="50%"><a name="2012_05_14"></a><h3>2012-05-14 - Version 3.7.12</h3><blockquote>
+ SQLite <a href="releaselog/3_7_12.html">version 3.7.12</a> is a regularly scheduled maintenance release.
+ This release contains several new optimizations and bug fixes and upgrading
+ is recommended. See the <a href="releaselog/3_7_12.html">change summary</a> for details.
+</blockquote><hr width="50%"><a name="2012_03_20"></a><h3>2012-03-20 - Version 3.7.11</h3><blockquote>
+ SQLite <a href="releaselog/3_7_11.html">version 3.7.11</a> is a regularly scheduled maintenance release
+ which was rushed out early due to a
+ <a href="http://www.sqlite.org/src/info/b7c8682cc1">bug in the query optimizer</a>
+ introduced in the previous release. The bug is obscure - it changes
+ a LEFT JOIN into an INNER JOIN in some cases when there is a 3-way join
+ and OR terms in the WHERE clause. But it was considered serious enough to
+ rush out a fix. Apart from this one problem, SQLite <a href="releaselog/3_7_10.html">version 3.7.10</a> has
+ not given any trouble. Upgrading to <a href="releaselog/3_7_11.html">version 3.7.11</a> from versions
+ 3.7.6.3, 3.7.7, 3.7.7.1, 3.7.8, or 3.7.9 is
+ optional. Upgrading from other releases, including the previous release
+ 3.7.10, is recommended.</p>
+
+<p> Other enhancements found in this release are enumerated in the
+ <a href="releaselog/3_7_11.html">change log</a>.
+</blockquote><hr width="50%"><a name="2012_01_16"></a><h3>2012-01-16 - Version 3.7.10</h3><blockquote>
+ SQLite <a href="releaselog/3_7_10.html">version 3.7.10</a> is a regularly scheduled maintenance release.
+ Upgrading from version 3.7.6.3, 3.7.7, 3.7.7.1, 3.7.8, or 3.7.9 is
+ optional. Upgrading from other releases is recommended.</p>
+
+<p> The <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache">SQLITE_CONFIG_PCACHE</a> mechanism has been replaced with
+ <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a>. If you do not know what this mechanism
+ is (it is an extreme corner-case and is seldom used) then this
+ change will not effect you in the least.</p>
+
+<p> The default <a href="fileformat2.html#schemaformat">schema format number</a> for new database files has changed
+ from 1 to 4. SQLite has been able to generate and read database files
+ using schema format 4 for six years. But up unto now, the default
+ schema format has been 1 so that older versions of SQLite could read
+ and write databases generated by newer versions of SQLite. But those
+ older versions of SQLite have become so scarce now that it seems
+ reasonable to make the new format the default.</p>
+
+<p> SQLite is changing some of the assumptions it makes above the behavior
+ of disk drives and flash memory devices during a sudden power loss.
+ This change is completely transparent to applications.
+ Read about the <a href="psow.html">powersafe overwrite</a> property for additional information.</p>
+
+<p> Lots of new interfaces have been added in this release:
+ <ul>
+ <li> <a href="c3ref/db_release_memory.html">sqlite3_db_release_memory()</a>
+ <li> <a href="pragma.html#pragma_shrink_memory">PRAGMA shrink_memory</a>
+ <li> <a href="c3ref/db_filename.html">sqlite3_db_filename()</a>
+ <li> <a href="c3ref/stmt_busy.html">sqlite3_stmt_busy()</a>
+ <li> <a href="c3ref/uri_boolean.html">sqlite3_uri_boolean()</a>
+ <li> <a href="c3ref/uri_boolean.html">sqlite3_uri_int64()</a>
+ </ul></p>
+
+<p> The <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> statement has been enhanced. Formerly, you would
+ use this statement to tell SQLite how many pages of the database files it
+ should hold in its cache at once. The total memory requirement would
+ depend on the database page size. Now, if you give <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a>
+ a negative value -N, it will allocate roughly N
+ <a href="http://en.wikipedia.org/wiki/Kibibyte">kibibytes</a> of memory to cache,
+ divided up according to page size. This enhancement allows programs to
+ more easily control their memory usage.</p>
+
+<p> There have been several obscure bug fixes. One noteworthy bug,
+ ticket <a href="http://www.sqlite.org/src/info/ff5be73dee">ff5be73dee</a>,
+ could in theory result in a corrupt database file if a power loss
+ occurred at just the wrong moment on an unusually cantankerous disk
+ drive. But that is mostly a theoretical concern and is very unlikely
+ to happen in practice. The bug was found during laboratory testing
+ and has never been observed to occur in the wild.
+</blockquote><hr width="50%"><a name="2011_11_01"></a><h3>2011-11-01 - Version 3.7.9</h3><blockquote>
+ SQLite <a href="releaselog/3_7_9.html">version 3.7.9</a> is a regularly scheduled maintenance release.
+ Upgrading from version 3.7.6.3, 3.7.7, 3.7.7.1, and 3.7.8 is optional.
+ Upgrading from other versions is recommended.</p>
+
+<p> The <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> compile-time option is now a no-op. The enhanced
+ query-planner functionality formerly available using SQLITE_ENABLE_STAT2
+ is now available through <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a>. The enhanced query planning
+ is still disabled by default. However, future releases of SQLite might
+ convert STAT3 from an enable-option to a disable-option so that it is
+ available by default and is only omitted upon request.</p>
+
+<p> The <a href="fts3.html#fts4">FTS4</a> full-text search engine has been enhanced such that tokens in
+ the search string that begin with "&#94;" must be the first token in their
+ respective columns in order to match. Formerly, "&#94;" characters in the
+ search string were simply ignored. Hence, if a legacy application was
+ including "&#94;" characters in FTS4 search strings, thinking that they would
+ always be ignored, then those legacy applications might break with this
+ update. The fix is simply remove the "&#94;" characters from the search
+ string.</p>
+
+<p> See the <a href="releaselog/3_7_9.html">change summary</a> for additional changes associated
+ with this release.
+</blockquote><hr width="50%"><a name="2011__eptember_19"></a><h3>2011-September-19 - Version 3.7.8</h3><blockquote>
+ SQLite <a href="releaselog/3_7_8.html">version 3.7.8</a> is a quarterly maintenance release. Upgrading from
+ versions 3.7.6.3, 3.7.7, or 3.7.7.1 is optional. Upgrading from other
+ versions is recommended.</p>
+
+<p> This release features a new "external merge sort" algorithm used to
+ implement ORDER BY and GROUP BY and also to presort the content of an
+ index for CREATE INDEX. The new algorithm does approximately the same
+ number of comparisons and I/Os as before, but the I/Os are much more
+ sequential and so runtimes are greatly reduced when the size of the
+ set being sorted is larger than the filesystem cache. The performance
+ improvement can be dramatic - orders of magnitude faster
+ for large CREATE INDEX commands. On the other hand,
+ the code is slightly slower (1% or 2%)
+ for a small CREATE INDEX. Since CREATE INDEX is not an
+ operation that commonly occurs on a speed-critical path, we feel that
+ this tradeoff is a good one. The slight slowdown for small CREATE INDEX
+ statements might be recovered in a future release. ORDER BY and GROUP BY
+ operations should now be faster for all cases, large and small.</p>
+
+<p> The query planner has been enhanced to do a better job of handling
+ the DISTINCT keyword on SELECT statements.</p>
+
+<p> There has been a lot of work on the default <a href="vfs.html">VFSes</a>. The unix VFS has
+ been enhanced to include more overrideable system calls - a feature requested
+ by Chromium to make it easier to build SQLite into a sandbox. The
+ windows VFS has been enhanced to be more resistant to interference from
+ anti-virus software.</p>
+
+<p> Every version of SQLite is better tested than the previous, and 3.7.8
+ is no exception to this rule. Version 3.7.8 has been used internally by
+ the SQLite team for mission critical functions and has performed flawlessly.
+ And, of course, it passes our rigorous <a href="testing.html">testing</a> procedures with no
+ problems detected. Version 3.7.8 is recommended for all new development.
+</blockquote><hr width="50%"><a name="2011_06_28"></a><h3>2011-06-28 - Version 3.7.7.1</h3><blockquote>
+ SQLite <a href="releaselog/3_7_7_1.html">version 3.7.7.1</a> adds a one-line bug fix to 3.7.7 to fix
+ <a href="http://www.sqlite.org/src/info/25ee812710">a problem</a>
+ causing <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statements compiled using the legacy
+ <a href="c3ref/prepare.html">sqlite3_prepare()</a> interface to fail with an <a href="rescode.html#schema">SQLITE_SCHEMA</a> error. Because
+ <a href="c3ref/exec.html">sqlite3_exec()</a> uses sqlite3_prepare() internally, the problem also affects
+ sqlite3_exec().</p>
+
+<p> Upgrading from 3.7.7 is only required for applications that use "PRAGMA
+ case_sensitive_like" and the sqlite3_prepare() (or sqlite3_exec()) interface.
+</blockquote><hr width="50%"><a name="2011_06_24"></a><h3>2011-06-24 - Version 3.7.7</h3><blockquote>
+ SQLite <a href="releaselog/3_7_7.html">version 3.7.7</a> is a regularly scheduled bi-monthly maintenance
+ release. Upgrading from version 3.7.6.3 is optional. Upgrading from all
+ prior releases is recommended.</p>
+
+<p> This release adds support for naming database files using <a href="uri.html">URI filenames</a>.
+ URI filenames are disabled by default (for backwards compatibility) but
+ applications are encouraged to enable them since incompatibilities are
+ likely to be exceedingly rare and the feature is useful. See the
+ <a href="uri.html">URI filename documentation</a> for details.</p>
+
+<p> Most of the other enhancements in this release involve
+ <a href="vtab.html">virtual tables</a>. The virtual table interface has been enhanced to
+ support <a href="lang_savepoint.html">SAVEPOINT</a> and <a href="lang_conflict.html">ON CONFLICT</a> clause processing, and the built-in
+ <a href="rtree.html">RTREE</a> and <a href="fts3.html">FTS3/FTS4</a> have been augmented to take advantage of
+ the new capability. This means, for example, that it is now possible
+ to use the <a href="lang_replace.html">REPLACE</a> command on <a href="fts3.html">FTS3/FTS4</a> and <a href="rtree.html">RTREE</a> tables.</p>
+
+<p> The <a href="fts3.html#fts4">FTS4</a> full-text index extension has been enhanced to support
+ the <a href="fts3.html#fts4prefix">FTS4 prefix option</a> and the <a href="fts3.html#fts4order">FTS4 order option</a>. These two enhancements
+ are provided in support of search-as-you-type interfaces where search
+ results begin to appear after the first keystroke in the "search" box
+ and are refined with each subsequent keystroke. The way this is done is
+ to do a separate full-text search after each key stroke, and add the
+ "*" wildcard at the end of the word currently being typed. So, for
+ example, if the text typed so far is "fast da" and the next character
+ typed is "t", then the application does a full-text search of the
+ pattern "fast dat*" and displays the results. Such capability has
+ always existed. What is new is that the <a href="fts3.html#fts4prefix">FTS4 prefix option</a> allows
+ the search to be very fast (a matter of milliseconds) even for difficult
+ cases such as "t*" or "th*".</p>
+
+<p> There has been a fair amount of work done on the FTS4 module for this
+ release. But the core SQLite code has changed little and the previous
+ release has not given any problems, so we expect this to be a very
+ stable release.
+</blockquote><hr width="50%"><a name="2011_05_19"></a><h3>2011-05-19 - Version 3.7.6.3</h3><blockquote>
+ SQLite <a href="releaselog/3_7_6_3.html">version 3.7.6.3</a> is a patch release that fixes a
+ <a href="http://www.sqlite.org/src/info/2d1a5c67df">single bug</a>
+ associated with <a href="wal.html">WAL mode</a>. The bug has been in SQLite ever since WAL
+ was added, but the problem is very obscure and so nobody has noticed
+ before now. Nevertheless, all users are encouraged to upgrade to
+ version 3.7.6.3 or later.</p>
+
+<p> The bug is this:
+ If the <a href="pragma.html#pragma_cache_size">cache_size</a> is set very small (less than 10) and SQLite comes
+ under memory pressure and if a multi-statement transaction is started
+ in which the last statement prior to COMMIT is a SELECT statement and if
+ a <a href="wal.html#ckpt">checkpoint</a> occurs right after the transaction commit, then
+ it might happen that the transaction will be silently rolled back instead
+ of being committed.</p>
+
+<p> The default setting for <a href="pragma.html#pragma_cache_size">cache_size</a> is 2000. So in most situations, this
+ bug will never appear. But sometimes programmers set <a href="pragma.html#pragma_cache_size">cache_size</a> to
+ very small values on gadgets and other low-memory devices in order to
+ save memory space. Such applications are vulnerable.
+ Note that this bug does <u>not</u> cause database corruption. It is
+ as if <a href="lang_transaction.html">ROLLBACK</a> were being run instead of <a href="lang_transaction.html">COMMIT</a> in some cases.</p>
+
+<p> <b>Bug Details</b></p>
+
+<p> Transactions commit in WAL mode by adding a record onto the end of
+ the WAL (the write-ahead log) that contains a "commit" flag. So to
+ commit a transaction, SQLite takes all the pages that have changed
+ during that transaction, appends them to the WAL, and sets the commit
+ flag on the last page. Now, if SQLite comes under memory pressure, it
+ might try to free up memory space by writing changed pages to the WAL
+ prior to the commit. We call this "spilling" the cache to WAL. There
+ is nothing wrong with spilling cache to WAL. But if the
+ memory pressure is severe, it might be that by the time <a href="lang_transaction.html">COMMIT</a> is run,
+ all changed pages for the transaction have already been spilled to WAL
+ and there are no pages left to be written to WAL.
+ And with no unwritten pages, there was nothing to put the commit flag
+ on. And without a commit flag, the transaction would end up being
+ rolled back.</p>
+
+<p> The fix to this problem was that if all changed pages has already
+ been written to the WAL when the commit was started, then page 1 of
+ the database will be written to the WAL again, so that there will always
+ be a page available on which to set the commit flag.
+</blockquote><hr width="50%"><a name="2011_04_17"></a><h3>2011-04-17 - Version 3.7.6.2</h3><blockquote>
+ SQLite <a href="releaselog/3_7_6_2.html">version 3.7.6.2</a> adds a one-line bug fix to 3.7.6.1 that enables
+ pthreads to work correctly on NetBSD. The problem was a faulty function
+ signature for the open system call. The problem does not appear to have
+ any adverse impact on any system other than NetBSD.</p>
+
+<p> Upgrading from version 3.7.6.1 is only needed on NetBSD.
+</blockquote><hr width="50%"><a name="2011_04_13"></a><h3>2011-04-13 - Version 3.7.6.1</h3><blockquote>
+ SQLite <a href="releaselog/3_7_6_1.html">version 3.7.6.1</a> fixes a single bug in 3.7.6 that can cause a
+ segfault if <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a> is used on a unix build that has
+ SQLITE_ENABLE_LOCKING_MODE set to 0 and is compiled with
+ HAVE_POSIX_FALLOCATE.</p>
+
+<p> Upgrading from 3.7.6 is only needed for users effected by the
+ configuration-specific bug described above. There are no other changes
+ to the code.
+</blockquote><hr width="50%"><a name="2011_04_12"></a><h3>2011-04-12 - Version 3.7.6</h3><blockquote>
+ SQLite <a href="releaselog/3_7_6.html">version 3.7.6</a> is a regularly scheduled bi-monthly maintenance
+ release of SQLite. Upgrading from version 3.7.5 is optional. Upgrading
+ releases prior to 3.7.5 is recommended.
+</blockquote><hr width="50%"><a name="2011_02_01"></a><h3>2011-02-01 - Version 3.7.5</h3><blockquote>
+ SQLite <a href="releaselog/3_7_5.html">version 3.7.5</a> is a regularly scheduled bi-monthly maintenance
+ release of SQLite. Due to the discovery and fix of
+ <a href="http://www.sqlite.org/src/tktview?name=5d863f876e">an obscure bug</a>
+ that could cause database corruption, upgrading from all prior
+ releases of SQLite is recommended. This bug was found during code
+ review and has not been observed in the wild.</p>
+
+<p> This release adds new <a href="c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit">opcodes</a> for the
+ <a href="c3ref/db_status.html">sqlite3_db_status()</a> interface that allow more precise measurement of
+ how the <a href="malloc.html#lookaside">lookaside memory allocator</a> is performing, which can be useful
+ for tuning in applications with very tight memory constraints.</p>
+
+<p> The <a href="c3ref/mprintf.html">sqlite3_vsnprintf()</a> interface was added. This routine is simply
+ a varargs version of the long-standing <a href="c3ref/mprintf.html">sqlite3_snprintf()</a> interface.</p>
+
+<p> The output from <a href="c3ref/profile.html">sqlite3_trace()</a> interface has been enhanced to work
+ better (and faster) in systems that use recursive extensions such as
+ <a href="fts3.html">FTS3</a> or <a href="rtree.html">RTREE</a>.</p>
+
+<p> Testing with Valgrind shows that this release of SQLite is about 1%
+ or 2% faster than the previous release for most operations.</p>
+
+<p> A fork of the popular ADO.NET adaptor for SQLite known as System.Data.SQLite
+ is now available on <a href="http://System.Data.SQLite.org/">http://System.Data.SQLite.org/</a>. The originator
+ of System.Data.SQLite, Robert Simpson, is aware of this fork, has
+ expressed his approval, and has commit privileges on the new Fossil
+ repository. The SQLite development team intends to maintain
+ System.Data.SQLite moving forward.
+</blockquote><hr width="50%"><a name="2010_12_08"></a><h3>2010-12-08 - Version 3.7.4</h3><blockquote>
+ SQLite <a href="releaselog/3_7_4.html">version 3.7.4</a> is a regularly scheduled bi-monthly maintenance
+ release of SQLite. Upgrading from <a href="releaselog/3_7_2.html">version 3.7.2</a> and <a href="releaselog/3_7_3.html">version 3.7.3</a>
+ is optional. Upgrading from all other SQLite releases is recommended.</p>
+
+<p> This release features <a href="fts3.html">full-text search</a> enhancements. The older
+ <a href="fts3.html">FTS3</a> virtual table is still fully supported, and should also run
+ faster. In addition, the new <a href="fts3.html#fts4">FTS4</a> virtual table is added. FTS4
+ follows the same syntax as FTS3 but holds additional metadata which
+ facilitates some performance improvements and more advanced
+ <a href="fts3.html#matchinfo">matchinfo()</a> output. Look for further full-text search enhancements
+ in subsequent releases.</p>
+
+<p> Also in this release, the <a href="eqp.html">EXPLAIN QUERY PLAN</a> output has been enhanced
+ and new documentation is provided so that application developers can
+ more easily understand how SQLite is performing their queries.</p>
+
+<p> Thanks to an account from the folks at <a href="http://www.devio.us/">http://www.devio.us/</a>, OpenBSD
+ has been added to the list of platforms upon which we
+ <a href="testing.html">test SQLite</a> prior to every release. That list of platforms
+ now includes:</p>
+
+<p> <ul>
+ <li> Linux x86 &amp; x86_64
+ <li> MacOS 10.5 &amp; 10.6
+ <li> MacOS 10.2 PowerPC
+ <li> WinXP and Win7
+ <li> Android 2.2
+ <li> OpenBSD 4.7
+ </ul></p>
+
+<p> The previous release of SQLite (<a href="releaselog/3_7_3.html">version 3.7.3</a>) has proven to be very
+ robust. The only serious issue discovered was
+ <a href="http://www.sqlite.org/src/info/80ba201079">ticket 80ba201079</a> that
+ describes an incorrect query result that can occur under very
+ unusual circumstances. The ticket description contains details of the
+ problem. Suffice it to say here that the problem is very obscure and
+ is unlikely to effect most applications and so upgrading is optional.
+ The problem is fixed, of course, in this release.
+</blockquote><hr width="50%"><a name="2010__ctober_08"></a><h3>2010-October-08 - Version 3.7.3</h3><blockquote>
+ SQLite <a href="releaselog/3_7_3.html">version 3.7.3</a> is a regularly scheduled bi-monthly maintenance
+ release of SQLite. Upgrading from <a href="releaselog/3_7_2.html">version 3.7.2</a> is optional.
+ Upgrading from all other releases is recommended.</p>
+
+<p> This release adds two new interfaces (really just variations on existing
+ interfaces). The <a href="c3ref/create_function.html">sqlite3_create_function_v2()</a> interface adds a
+ destructor for the application-data pointer. The new
+ <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interface allows the soft heap limit to
+ be set to a value greater than 2<sup>31</sup>. </p>
+
+<p> The <a href="rtree.html">RTREE</a> extension has been enhanced with the ability to have an
+ <a href="rtree.html#customquery">application-defined query region</a>. This might
+ be used, for example, to locate all objects within
+ the field of view of a camera.</p>
+
+<p> The 3.7.3 release also includes some performance enhancements, including
+ query planner improvements, documentation updates,
+ and fixes to some very obscure bugs.
+</blockquote><hr width="50%"><a name="2010__ugust_24"></a><h3>2010-August-24 - Version 3.7.2</h3><blockquote>
+ SQLite <a href="releaselog/3_7_2.html">version 3.7.2</a> fixes a long-standing bug that can cause the
+ database <a href="fileformat2.html#freelist">free-page list</a> to go corrupt if <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> is used
+ multiple times to
+ partially reduce the size of a database file that contains many hundreds
+ of unused database pages. The original bug reports together with links
+ to the patch that fixes it can be seen
+ <a href="http://www.sqlite.org/src/info/5e10420e8d">here</a>.</p>
+
+<p> This bug has been in the code for at least a year and possibly longer.
+ The bug has nothing to do with the versions 3.7.1 or 3.7.0 or any other
+ recent release. The fact that the bug was discovered (and fixed)
+ within hours of the 3.7.1 release is purely a coincidence.</p>
+
+<p> The bug is impossible to hit without using <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> and is
+ very difficult to hit even with incremental_vacuum. And the kind of
+ corruption that the bug causes can usually be fixed
+ simply by running <a href="lang_vacuum.html">VACUUM</a>. Nevertheless, because the bug can result
+ in database corruption, it is recommended that all SQLite users upgrade
+ to version 3.7.2 or later.
+</blockquote><hr width="50%"><a name="2010__ugust_23"></a><h3>2010-August-23 - Version 3.7.1</h3><blockquote>
+ SQLite <a href="releaselog/3_7_1.html">version 3.7.1</a> is a stabilization release for the 3.7.x series.
+ Other than the filesize-in-header bug that was fixed in <a href="releaselog/3_7_0_1.html">version 3.7.0.1</a>,
+ no major problems have been seen in 3.7.0. Some minor corner-case
+ performance regressions have been fixed. A typo in the OS/2 interface
+ has been repaired.</p>
+
+<p> A biggest part of the 3.7.1 release is a cleanup and refactoring of
+ the pager module within SQLite. This refactoring should have no
+ application-visible effects. The purpose was to reorganize the code
+ in ways that make it easier to prove correctness.</p>
+
+<p> The 3.7.1 release adds new experimental methods for obtained more
+ detailed memory usage information and for controlling database file
+ fragmentation. And the query planner now does a better job of
+ optimizing the <a href="lang_expr.html#like">LIKE</a> and <a href="lang_expr.html#glob">GLOB</a> operators.</p>
+
+<p> This release increases the maximum size of database pages from 32KiB to
+ 64KiB. A database with 64KiB pages will not be readable or writable by
+ older versions of SQLite. Note that further increases in page size
+ are not feasible since the <a href="fileformat2.html">file format</a> uses 16-bit offsets to structures
+ within each page.
+</blockquote><hr width="50%"><a name="2010__ugust_04"></a><h3>2010-August-04 - Version 3.7.0.1</h3><blockquote>
+ SQLite <a href="releaselog/3_7_0_1.html">version 3.7.0.1</a> is a patch release to fix a bug in the new
+ filesize-in-header feature of the <a href="fileformat2.html">SQLite file format</a>
+ that could cause database corruption if the same database file is
+ written alternately with version 3.7.0 and version 3.6.23.1 or earlier.
+ A performance regression was also fixed in this release.
+</blockquote><hr width="50%"><a name="2010_07_22"></a><h3>2010-07-22 - Version 3.7.0</h3><blockquote>
+ SQLite <a href="releaselog/3_7_0.html">version 3.7.0</a> is a major release of SQLite that features
+ a new transaction control mechanism using a <a href="wal.html">write-ahead log</a> or <a href="wal.html">WAL</a>.
+ The traditional rollback-journal is still used as the default so there
+ should be no visible change for legacy programs. But newer programs
+ can take advantage of improved performance and concurrency by enabling
+ the WAL journaling mode.</p>
+
+<p> SQLite version 3.7.0 also contains some query planner enhancements and
+ a few obscure bug fixes, but the only really big change is the addition
+ of WAL mode.
+</blockquote><hr width="50%"><a name="2010_03_30"></a><h3>2010-03-30 - Version 3.6.23.1</h3><blockquote>
+ SQLite <a href="releaselog/3_6_23_1.html">version 3.6.23.1</a> is a patch release to fix a bug in the
+ offsets() function of <a href="fts3.html">FTS3</a> at the request of the Mozilla.
+</blockquote><hr width="50%"><a name="2010_03_09"></a><h3>2010-03-09 - Version 3.6.23</h3><blockquote>
+ SQLite <a href="releaselog/3_6_23.html">version 3.6.23</a> is a regular bimonthly release of SQLite.
+ Upgrading from the prior release is purely optional.</p>
+
+<p> This release contains new pragmas: the <a href="pragma.html#pragma_secure_delete">secure_delete pragma</a>, and
+ the <a href="pragma.html#pragma_compile_options">compile_options pragma</a>.
+ There are a new SQL functions: <a href="lang_corefunc.html#sqlite_compileoption_used">sqlite_compileoption_used()</a>
+ and <a href="lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a>.
+ New C/C++ interfaces: <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a>,
+ <a href="c3ref/compileoption_get.html">sqlite3_compileoption_get()</a>, <a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a>, and
+ <a href="c3ref/log.html">sqlite3_log()</a>.</p>
+
+<p> This release also includes several minor bug fixes and performance
+ improvements. Support for <a href="compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a> is enhanced.
+ There are on-going improvements to <a href="fts3.html">FTS3</a>.</p>
+
+<p> The ".genfkey" command in the <a href="cli.html">Command Line Interface</a> has been
+ removed. SQLite has supported standard SQL <a href="foreignkeys.html">foreign key constraints</a>
+ since <a href="releaselog/3_6_19.html">version 3.6.19</a> and so the ".genfkey" command was seen as
+ an anachronism.
+</blockquote><hr width="50%"><a name="2010_01_06"></a><h3>2010-01-06 - Version 3.6.22</h3><blockquote>
+ SQLite <a href="releaselog/3_6_22.html">version 3.6.22</a> is a bug-fix release. Two bugs have been fixed
+ that might cause incorrect query results.
+ <ul>
+ <li>Ticket <a href="http://www.sqlite.org/src/info/31338dca7e">31338dca7e</a>
+ describes a
+ problem with queries that have a WHERE clause of the form (x AND y) OR z
+ where x and z come from one table of a join and y comes from a different
+ table.
+ <li> Ticket <a href="http://www.sqlite.org/src/info/eb5548a849">eb5548a849</a>
+ describes
+ a problem where the use of the CAST operator in the WHERE clause can lead
+ to incorrect results if the column being cast to a new datatype is also
+ used in the same WHERE clause without being cast.
+ </ul>
+ Both bugs are obscure,
+ but because they could arise in an application after deployment, it is
+ recommended that all applications upgrade SQLite to version 3.6.22.</p>
+
+<p> This release also includes other minor bug fixes and performance
+ enhancements, especially in the <a href="fts3.html">FTS3</a> extension.
+</blockquote><hr width="50%"><a name="2009_12_07"></a><h3>2009-12-07 - Version 3.6.21</h3><blockquote>
+ SQLite <a href="releaselog/3_6_21.html">version 3.6.21</a> focuses on performance optimization. For
+ a certain set of traces, this version uses 12% fewer CPU instructions
+ than the previous release (as measured by Valgrind). In addition, the
+ <a href="fts3.html">FTS3</a> extension has been through an extensive cleanup and rework and
+ the <a href="c3ref/profile.html">sqlite3_trace()</a> interface has been modified to insert
+ <a href="lang_expr.html#varparam">bound parameter</a> values into its output.
+</blockquote><hr width="50%"><a name="2009_11_04"></a><h3>2009-11-04 - Version 3.6.20</h3><blockquote>
+ SQLite <a href="releaselog/3_6_20.html">version 3.6.20</a> is a general maintenance release. The
+ query planner has been enhanced to work better with bound parameters
+ in LIKE and GLOB operators and in range constraints and various minor
+ bugs have been fixed. Upgrading from 3.6.19 is optional.
+</blockquote><hr width="50%"><a name="2009_10_14"></a><h3>2009-10-14 - Version 3.6.19</h3><blockquote>
+ SQLite <a href="releaselog/3_6_19.html">version 3.6.19</a> adds native support for
+ <a href="foreignkeys.html">foreign key constraints</a>, including deferred constraints and
+ cascading deletes. Enforcement of foreign keys is disabled by
+ default for backwards compatibility and must be turned on using
+ the <a href="pragma.html#pragma_foreign_keys">foreign_keys pragma</a>.</p>
+
+<p> Version 3.6.19 also adds support for the
+ <a href="lang_expr.html#isisnot">IS and IS NOT operators</a>. Formerly, SQLite (as most
+ other SQL database engines) supported IS NULL and IS NOT NULL. The
+ IS and IS NOT operators are generalizations that allow the right-hand
+ side to be an arbitrary expression. IS and IS NOT work the same as
+ == (equals) and != (not equals) except that with IS and IS NOT the
+ NULL values compare equal to one another.
+</blockquote><hr width="50%"><a name="2009_09_11"></a><h3>2009-09-11 - Version 3.6.18</h3><blockquote>
+ Beginning with this release, the SQLite source code is tracked and
+ managed using the <a href="http://www.fossil-scm.org/">Fossil</a>
+ distributed configuration management system. SQLite was previously
+ versioned using CVS. The entire CVS history has been imported into
+ Fossil. The older CVS repository remains on the website but is
+ read-only.</p>
+
+<p> There are two major enhancements in SQLite version 3.6.18. The first
+ is a series or refinements to the query planner that help SQLite to
+ choose better plans for joins where in the past it was selecting suboptimal
+ query plans. The <a href="compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> compile-time option has been
+ added to cause SQLite to collect histogram data on indices when the
+ <a href="lang_analyze.html">ANALYZE</a> command is run. The use of histograms improve the query
+ planning performance even more.</p>
+
+<p> The second major enhancement is that SQLite now support recursive
+ triggers. The older non-recursive behavior of triggers is still the
+ default behavior. Recursive triggers are activated using the
+ <a href="pragma.html#pragma_recursive_triggers">recursive_triggers pragma</a>. In addition to allowing triggers to
+ call themselves (either directly or indirectly) the new capability
+ also fires DELETE triggers on rows that are removed from a table
+ as a result of <a href="lang_conflict.html">REPLACE</a> conflict resolution processing.</p>
+
+<p> Non-recursive triggers are still the default behavior since this
+ is least likely to cause problems for existing applications. However,
+ we anticipate that triggers will become
+ recursive by default beginning with release 3.7.0. At that point,
+ applications that want to continue using the older non-recursive
+ trigger behavior will need to use the <a href="pragma.html#pragma_recursive_triggers">recursive_triggers pragma</a>
+ to disable recursive triggers.</p>
+
+<p> This version of SQLite also contains bug fixes, though none of the
+ bugs are serious and all are obscure, so upgrading is optional.</p>
+
+<p> The SQLite core continues to have <a href="testing.html#coverage">100% branch test coverage</a>
+ and so despite the many changes in this release, the developers
+ believe that this version of SQLite is stable and ready for production
+ use.
+</blockquote><hr width="50%"><a name="2009_08_10"></a><h3>2009-08-10 - Version 3.6.17</h3><blockquote>
+ This is a monthly maintenance release with a focus of bug fixes,
+ performance improvements, and increased test coverage. This is the
+ first release of SQLite since <a href="testing.html#coverage">100% branch test coverage</a>
+ was achieved on the SQLite core. </p>
+
+<p> In addition, a new interface <a href="c3ref/stricmp.html">sqlite3_strnicmp()</a> is provided for the
+ convenience of extension writers.</p>
+
+<p> None of the bugs fixed in this release are serious. All bugs are
+ obscure. Upgrading is optional.
+</blockquote><hr width="50%"><a name="2009_07_25"></a><h3>2009-07-25 - 100% Branch Test Coverage</h3><blockquote>
+ A subset of the <a href="th3.html">TH3</a> test suite was measured by gcov to provide
+ <a href="testing.html#coverage">100% branch test coverage</a> over the SQLite core
+ (exclusive of the VFS backend and of extensions such as FTS3 and RTREE)
+ when compiled for SuSE 10.1 Linux on x86. The SQLite developers pledge
+ to maintain branch test coverage at 100% in all future releases.
+ Ongoing work will strive for 100% branch test coverage on the
+ operating-system backends and extensions as well.
+</blockquote><hr width="50%"><a name="2009_06_27"></a><h3>2009-06-27 - Version 3.6.16</h3><blockquote>
+ SQLite <a href="releaselog/3_6_16.html">version 3.6.16</a> is another general maintenance release containing
+ performance and robustness enhancements. A single notable bug was fixed
+ (ticket #3929). This bug can cause INSERT or UPDATE statements to fail
+ on indexed tables that have AFTER triggers that modify the same table and
+ index.
+</blockquote><hr width="50%"><a name="2009_06_15"></a><h3>2009-06-15 - Version 3.6.15</h3><blockquote>
+ SQLite <a href="releaselog/3_6_15.html">version 3.6.15</a> is a general maintenance release containing
+ performance and robustness enhancements and fixes for various obscure
+ bugs.
+</blockquote><hr width="50%"><a name="2009_05_25"></a><h3>2009-05-25 - Version 3.6.14.2</h3><blockquote>
+ SQLite <a href="releaselog/3_6_14_2.html">version 3.6.14.2</a> fixes an obscure bug in the code generator
+ (ticket #3879)
+ section of SQLite which can potentially cause incorrect query results.
+ The changes from the prior release consist of only this one bug fix,
+ check-in [6676]
+ and a change to the version number text.</p>
+
+<p> The bug was introduced in version 3.6.14. It is recommended that
+ users of version 3.6.14 and 3.6.14.1 upgrade to this release. Applications
+ are unlikely to hit this bug, but since it is difficult to predict which
+ applications might hit it and which might not, we recommend that all
+ users of 3.6.14 and 3.5.14.1 upgrade to this release.
+</blockquote><hr width="50%"><a name="2009_05_19"></a><h3>2009-05-19 - Version 3.6.14.1</h3><blockquote>
+ SQLite <a href="releaselog/3_6_14_1.html">version 3.6.14.1</a> is a patch release to <a href="releaselog/3_6_14.html">version 3.6.14</a> with
+ minimal changes that fixes three bugs. Upgrading is only necessary
+ for users who are impacted by one or more of those bugs.
+</blockquote><hr width="50%"><a name="2009_05_07"></a><h3>2009-05-07 - Version 3.6.14</h3><blockquote>
+ SQLite <a href="releaselog/3_6_14.html">version 3.6.14</a> provides new performance enhancements in
+ the btree and pager layers and in the query optimizer. Certain
+ workloads can be as much as twice as fast as the previous release,
+ though 10% faster is a more typical result.</p>
+
+<p> Queries against <a href="vtab.html">virtual tables</a> that contain OR and IN operators
+ in the WHERE clause are now able to use indexing.</p>
+
+<p> A new optional <a href="asyncvfs.html">asynchronous I/O backend</a> is available for
+ unix and windows. The asynchronous backend gives the illusion of faster
+ response time by pushing slow write operations into a background thread.
+ The tradeoff for faster response time is that more memory is required
+ (to hold the content of the pending writes) and if a power failure or
+ program crash occurs, some transactions that appeared to have committed
+ might end up being rolled back upon restart.</p>
+
+<p> This release also contains many minor bug fixes, documentation enhancements,
+ new test cases, and cleanups and simplifications to the source code.</p>
+
+<p> There is no compelling reason to upgrade from versions 3.6.12 or
+ 3.6.13 if those prior versions are working. Though many users may
+ benefit from the improved performance.
+</blockquote><hr width="50%"><a name="2008_12_16"></a><h3>2008-12-16 - Version 3.6.7</h3><blockquote>
+ SQLite <a href="releaselog/3_6_7.html">version 3.6.7</a> contains a major cleanup of the Unix driver,
+ and support for the new Proxy Locking mechanism on Mac OS X. Though
+ the Unix driver is reorganized, its functionality is the same and so
+ applications should not notice a difference.
+</blockquote><hr width="50%"><a name="2008_11_26"></a><h3>2008-11-26 - Version 3.6.6.2</h3><blockquote>
+ This release fixes a bug that was introduced into SQLite <a href="releaselog/3_6_6.html">version 3.6.6</a>
+ and which seems like it might be able to cause database corruption. This
+ bug was detected during stress testing. It has not been seen in the wild.
+ An analysis of the problem suggests that the bug might be able to cause
+ database corruption, however focused efforts to find a real-world test
+ cases that actually causes database corruption have so far been unsuccessful.
+ Hence, the likelihood of this bug causing problems is low. Nevertheless,
+ we have decided to do an emergency branch release out of an abundance of
+ caution.</p>
+
+<p> The <a href="releaselog/3_6_6_2.html">version 3.6.6.2</a> release also fixes an obscure memory leak that
+ can occur following a disk I/O error.
+</blockquote><hr width="50%"><a name="2008_11_22"></a><h3>2008-11-22 - Version 3.6.6.1</h3><blockquote>
+ This release fixes a bug that was introduced into SQLite <a href="releaselog/3_6_4.html">version 3.6.4</a>
+ and that can cause database corruption in obscure cases. This bug has
+ never been seen in the wild; it was first detected by internal stress
+ tests and required substantial analysis before it could be shown to
+ potentially lead to corruption. So we feel that SQLite versions 3.6.4,
+ 3.6.5, and 3.6.6 are safe to use for development work. But upgrading
+ to this patch release or later is recommended prior to deploying
+ products that incorporate SQLite.</p>
+
+<p> We have taken the unusual step of issuing a patch release in order to
+ get the fix for this bug into circulation quickly. SQLite version 3.6.7
+ will continue on its normal path of development with an anticipated
+ release in mid December.
+</blockquote><hr width="50%"><a name="2008_11_19"></a><h3>2008-11-19 - Version 3.6.6</h3><blockquote>
+ SQLite <a href="releaselog/3_6_5.html">version 3.6.5</a> is released. This is a quick turn-around release
+ that fixes a bug in virtual tables and FTS3 that snuck into
+ <a href="releaselog/3_6_5.html">version 3.6.5</a>. This release also adds the new
+ application-defined page cache mechanism.
+</blockquote><hr width="50%"><a name="2008_11_12"></a><h3>2008-11-12 - Version 3.6.5</h3><blockquote>
+ SQLite <a href="releaselog/3_6_5.html">version 3.6.5</a> is released. There are various minor feature
+ enhancements and numerous obscure bug fixes.
+ The <a href="releaselog/3_6_5.html">change log</a> contains the details. Upgrading is
+ optional.
+</blockquote><hr width="50%"><a name="2008_11_01"></a><h3>2008-11-01 - Bloomberg Joins SQLite Consortium</h3><blockquote>
+ The SQLite developers are honored to announce that
+ <a href="http://www.bloomberg.com/">Bloomberg</a> has joined the
+ <a href="consortium.html">SQLite Consortium</a>.
+</blockquote><hr width="50%"><a name="2008_10_15"></a><h3>2008-10-15 - Version 3.6.4</h3><blockquote>
+ SQLite version 3.6.4 adds new features designed to help applications
+ detect when indices are not being used on query. There are also some
+ important performance improvements. Upgrading is optional.
+</blockquote><hr width="50%"><a name="2008_09_22"></a><h3>2008-09-22 - Version 3.6.3</h3><blockquote>
+ SQLite version 3.6.3 fixes a bug in SELECT DISTINCT that was introduced
+ by the previous version. No new features are added. Upgrading is
+ recommended for all applications that make use of DISTINCT.
+</blockquote><hr width="50%"><a name="2008_08_30"></a><h3>2008-08-30 - Version 3.6.2</h3><blockquote>
+ SQLite version 3.6.2 contains rewrites of the page-cache subsystem and
+ the procedures for matching identifiers to table columns in SQL statements.
+ These changes are designed to better modularize the code and make it more
+ maintainable and reliable moving forward. Nearly 5000 non-comment lines
+ of core code (about 11.3%) have changed
+ from the previous release. Nevertheless, there should be no
+ application-visible changes, other than bug fixes.
+</blockquote><hr width="50%"><a name="2008_08_06"></a><h3>2008-08-06 - Version 3.6.1</h3><blockquote>
+ SQLite version 3.6.1 is a stabilization and performance enhancement
+ release.
+</blockquote><hr width="50%"><a name="2008_07_16"></a><h3>2008-07-16 - Version 3.6.0 beta</h3><blockquote>
+ Version 3.6.0 makes changes to the <a href="c3ref/vfs.html">VFS</a> object in order
+ to make SQLite more easily portable to a wider variety of platforms.
+ There are potential incompatibilities with some legacy applications.
+ See the <a href="35to36.html">35to36.html</a> document for details.</p>
+
+<p> Many new interfaces are introduced in version 3.6.0. The code is
+ very well tested and is appropriate for use in stable systems. We
+ have attached the "beta" designation only so that we can make tweaks to
+ the new interfaces in the next release without having to declare an
+ incompatibility.
+</blockquote><hr width="50%"><a name="2008_05_12"></a><h3>2008-05-12 - Version 3.5.9</h3><blockquote>
+ Version 3.5.9 adds a new experimental <a href="pragma.html#syntax">PRAGMA</a>: <a href="pragma.html#pragma_journal_mode">journal_mode</a>.
+ Setting the journal mode to PERSIST can provide performance improvement
+ on systems where deleting a file is expensive. The PERSIST journal
+ mode is still considered experimental and should be used with caution
+ pending further testing.</p>
+
+<p> Version 3.5.9 is intended to be the last stable release prior to
+ version 3.6.0. Version 3.6.0 will make incompatible changes to the
+ <a href="c3ref/vfs.html">sqlite3_vfs</a> VFS layer in order to address deficiencies in the original
+ design. These incompatibilities will only effect programmers who
+ write their own custom VFS layers (typically embedded device builders).
+ The planned VFS changes will be much smaller
+ than the changes that occurred on the
+ <a href="34to35.html">3.4.2 to 3.5.0 transaction</a> that occurred last
+ September.</p>
+
+<p> This release of SQLite is considered stable and ready for production use.
+</blockquote><hr width="50%"><a name="2008_04_16"></a><h3>2008-04-16 - Version 3.5.8</h3><blockquote>
+ Version 3.5.8 includes some important new performance optimizations
+ in the virtual machine code generator, including constant subexpression
+ factoring and common subexpression elimination. This release also
+ creates new public interfaces:
+ <a href="c3ref/randomness.html">sqlite3_randomness()</a> provides access to SQLite's internal
+ pseudo-random number generator, <a href="c3ref/limit.html">sqlite3_limit()</a> allows size
+ limits to be set at run-time on a per-connection basis, and
+ <a href="c3ref/context_db_handle.html">sqlite3_context_db_handle()</a> is a convenience routine that allows
+ an application-defined SQL function implementation to retrieve
+ its <a href="c3ref/sqlite3.html">database connection</a> handle.</p>
+
+<p> This release of SQLite is considered stable and ready for production use.
+</blockquote><hr width="50%"><a name="2008_03_17"></a><h3>2008-03-17 - Version 3.5.7</h3><blockquote>
+ Version 3.5.7 fixes several minor and obscure bugs, especially
+ in the autoconf-generated makefile. Upgrading is optional.
+ This release of SQLite is considered stable and ready for production use.
+</blockquote><hr width="50%"><a name="2008_02_06"></a><h3>2008-02-06 - Version 3.5.6</h3><blockquote>
+ Version 3.5.6 fixes a minor regression in 3.5.5 - a regression that
+ had nothing to do with the massive change of the virtual machine
+ to a register-based design.
+ No problems have been reported with the new virtual machine. This
+ release of SQLite is considered stable and ready for production use.
+</blockquote><hr width="50%"><a name="2008_01_31"></a><h3>2008-01-31 - Version 3.5.5</h3><blockquote>
+ Version 3.5.5 changes over 8% of the core source code of SQLite in order
+ to convert the internal virtual machine from a stack-based design into
+ a register-based design. This change will allow future optimizations
+ and will avoid an entire class of stack overflow bugs that have caused
+ problems in the past. Even though this change is large, extensive testing
+ has found zero errors in the new virtual machine and so we believe this
+ to be a very stable release.
+</blockquote><hr width="50%"><a name="2007_12_14"></a><h3>2007-12-14 - Version 3.5.4</h3><blockquote>
+ Version 3.5.4 fixes a long-standing but obscure bug in UPDATE and
+ DELETE which might cause database corruption. (See ticket #2832.)
+ Upgrading is recommended for all users.</p>
+
+<p> This release also brings the processing of ORDER BY statements into
+ compliance with standard SQL. This could, in theory, cause problems
+ for existing applications that depend on the older, buggy behavior.
+ See ticket #2822 for additional information.
+</blockquote><hr width="50%"><a name="2007_12_12"></a><h3>2007-12-12 - SQLite Consortium Announced</h3><blockquote>
+ The <a href="consortium.html">SQLite Consortium</a> was launched
+ today with <a href="http://www.mozilla.org/">Mozilla</a> and
+ <a href="http://www.symbian.com/">Symbian</a> as charter members.
+ As noted in the <a href="pressrelease-20071212.html">press release</a>,
+ the Consortium's goal is to promote the continuing vitality and
+ independence of SQLite.
+</blockquote><hr width="50%"><a name="2007_11_27"></a><h3>2007-11-27 - Version 3.5.3</h3><blockquote>
+ This is an incremental release that fixes several minor problems.
+ Upgrading is optional. If Version 3.5.2 or 3.5.1 is working fine
+ for you, then there is no pressing need to change to 3.5.3.</p>
+
+<p> The prebuilt binaries and the amalgamation found on the
+ <a href="download.html">download</a> page include the FTS3 fulltext
+ search extension module. We are doing this on an experimental
+ basis and are not promising to provide prebuilt binaries with
+ FTS3 in the future.
+</blockquote><hr width="50%"><a name="2007_11_05"></a><h3>2007-11-05 - Version 3.5.2</h3><blockquote>
+ This is an incremental release that fixes several minor problems,
+ adds some obscure features, and provides some performance tweaks.
+ Upgrading is optional.</p>
+
+<p> The experimental compile-time option
+ <a href="compile.html#omitfeatures">SQLITE_OMIT_MEMORY_ALLOCATION</a> is no longer supported. On the other
+ hand, it is now possible to compile SQLite so that it uses a static
+ array for all its dynamic memory allocation needs and never calls
+ malloc. Expect to see additional radical changes to the memory
+ allocation subsystem in future releases.
+</blockquote><hr width="50%"><a name="2007_10_04"></a><h3>2007-10-04 - Version 3.5.1</h3><blockquote>
+ Fix a long-standing bug that might cause database corruption if a
+ disk-full error occurs in the middle of a transaction and that
+ transaction is not rolled back.
+ Ticket #2686.</p>
+
+<p> The new VFS layer is stable. However, we still reserve the right to
+ make tweaks to the interface definition of the VFS if necessary.
+</blockquote><hr width="50%"><a name="2007_09_04"></a><h3>2007-09-04 - Version 3.5.0 alpha</h3><blockquote>
+ The OS interface layer and the memory allocation subsystems in
+ SQLite have been reimplemented. The published API is largely unchanged
+ but the (unpublished) OS interface has been modified extensively.
+ Applications that implement their own OS interface will require
+ modification. See
+ <a href="34to35.html">34to35.html</a> for details.<p></p>
+
+<p> This is a large change. Approximately 10% of the source code was
+ modified. We are calling this first release "alpha" in order to give
+ the user community time to test and evaluate the changes before we
+ freeze the new design.
+</blockquote><hr width="50%"><a name="2007_08_13"></a><h3>2007-08-13 - Version 3.4.2</h3><blockquote>
+ While stress-testing the
+ <a href="c3ref/soft_heap_limit.html">soft_heap_limit</a>
+ feature, a bug that could lead to
+ database corruption was discovered and fixed.
+ Though the consequences of this bug are severe, the chances of hitting
+ it in a typical application are remote. Upgrading is recommended
+ only if you use the
+ <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a>
+ interface.
+</blockquote><hr width="50%"><a name="2007_07_20"></a><h3>2007-07-20 - Version 3.4.1</h3><blockquote>
+ This release fixes a bug in <a href="lang_vacuum.html">VACUUM</a> that
+ can lead to database corruption. The bug was introduced in version
+ <a href="changes.html#version_3_3_14">3.3.14</a>.
+ Upgrading is recommended for all users. Also included are a slew of
+ other more routine
+ <a href="changes.html#version_3_4_1">enhancements and bug fixes</a>.
+</blockquote><hr width="50%"><a name="2007_06_18"></a><h3>2007-06-18 - Version 3.4.0</h3><blockquote>
+ This release fixes two separate bugs either of which
+ can lead to database corruption. Upgrading
+ is strongly recommended. If you must continue using an older version
+ of SQLite, please at least read about how to avoid these bugs
+ at CorruptionFollowingBusyError and ticket #2418
+ <p>
+ This release also adds explicit <a href="limits.html">limits</a> on the
+ sizes and quantities of things SQLite will handle. The new limits might
+ causes compatibility problems for existing applications that
+ use excessively large strings, BLOBs, tables, or SQL statements.
+ The new limits can be increased at compile-time to work around any problems
+ that arise. Nevertheless, the version number of this release is
+ 3.4.0 instead of 3.3.18 in order to call attention to the possible
+ incompatibility.
+ </p>
+ There are also new features, including
+ <a href="c3ref/blob_open.html">incremental BLOB I/O</a> and
+ <a href="pragma.html#pragma_incremental_vacuum">incremental vacuum</a>.
+ See the <a href="changes.html#version_3_4_0">change log</a>
+ for additional information.
+</blockquote><hr width="50%"><a name="2007_04_25"></a><h3>2007-04-25 - Version 3.3.17</h3><blockquote>
+ This version fixes a bug in the forwards-compatibility logic of SQLite
+ that was causing a database to become unreadable when it should have
+ been read-only. Upgrade from 3.3.16 only if you plan to deploy into
+ a product that might need to be upgraded in the future. For day to day
+ use, it probably does not matter.
+</blockquote><hr width="50%"><a name="2007_04_18"></a><h3>2007-04-18 - Version 3.3.16</h3><blockquote>
+ Performance improvements added in 3.3.14 but mistakenly turned off
+ in 3.3.15 have been reinstated. A bug has been fixed that prevented
+ VACUUM from running if a NULL value was in a UNIQUE column.
+</blockquote><hr width="50%"><a name="2007_04_09"></a><h3>2007-04-09 - Version 3.3.15</h3><blockquote>
+ An annoying bug introduced in 3.3.14 has been fixed. There are
+ also many enhancements to the test suite.
+</blockquote><hr width="50%"><a name="2007_04_02"></a><h3>2007-04-02 - Version 3.3.14</h3><blockquote>
+ This version focuses on performance improvements. If you recompile
+ the amalgamation using GCC option -O3 (the precompiled binaries
+ use -O2) you may see performance
+ improvements of 35% or more over version 3.3.13 depending on your
+ workload. This version also
+ adds support for <a href="pragma.html#pragma_locking_mode">
+ exclusive access mode</a>.
+</blockquote><hr width="50%"><a name="2007_02_13"></a><h3>2007-02-13 - Version 3.3.13</h3><blockquote>
+ This version fixes a subtle bug in the ORDER BY optimizer that can
+ occur when using joins. There are also a few minor enhancements.
+ Upgrading is recommended.
+</blockquote><hr width="50%"><a name="2007_01_27"></a><h3>2007-01-27 - Version 3.3.12</h3><blockquote>
+ The first published build of the previous version used the wrong
+ set of source files. Consequently, many people downloaded a build
+ that was labeled as "3.3.11" but was really 3.3.10. Version 3.3.12
+ is released to clear up the ambiguity. A couple more bugs have
+ also been fixed and <a href="pragma.html#pragma_integrity_check">
+ PRAGMA integrity_check</a> has been enhanced.
+</blockquote><hr width="50%"><a name="2007_01_22"></a><h3>2007-01-22 - Version 3.3.11</h3><blockquote>
+ Version 3.3.11 fixes for a few more problems in version 3.3.9 that
+ version 3.3.10 failed to catch. Upgrading is recommended.
+</blockquote><hr width="50%"><a name="2007_01_09"></a><h3>2007-01-09 - Version 3.3.10</h3><blockquote>
+ Version 3.3.10 fixes several bugs that were introduced by the previous
+ release. Upgrading is recommended.
+</blockquote><hr width="50%"><a name="2007_01_04"></a><h3>2007-01-04 - Version 3.3.9</h3><blockquote>
+ Version 3.3.9 fixes bugs that can lead to database corruption under
+ obscure and difficult to reproduce circumstances. See
+ DatabaseCorruption in the
+ wiki for details.
+ This release also adds the new
+ <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
+ API and includes important bug fixes in the command-line
+ shell and enhancements to the query optimizer. Upgrading is
+ recommended.
+</blockquote><hr width="50%"><a name="2006_10_09"></a><h3>2006-10-09 - Version 3.3.8</h3><blockquote>
+ Version 3.3.8 adds support for full-text search using the
+ FTS1 module. There are also minor bug fixes. Upgrade only if
+ you want to try out the new full-text search capabilities or if
+ you are having problems with 3.3.7.
+</blockquote><hr width="50%"><a name="2006_08_12"></a><h3>2006-08-12 - Version 3.3.7</h3><blockquote>
+ Version 3.3.7 includes support for loadable extensions and virtual
+ tables. But both features are still considered "beta" and their
+ APIs are subject to change in a future release. This release is
+ mostly to make available the minor bug fixes that have accumulated
+ since 3.3.6. Upgrading is not necessary. Do so only if you encounter
+ one of the obscure bugs that have been fixed or if you want to try
+ out the new features.
+</blockquote><hr width="50%"><a name="2006_06_19"></a><h3>2006-06-19 - New Book About SQLite</h3><blockquote>
+ <i><a href="http://www.apress.com/book/bookDisplay.html?bID=10130">The Definitive Guide to SQLite</a></i>,
+ a new book by
+ <a href="http://www.mikesclutter.com">Mike Owens</a>
+ is now available from <a href="http://www.apress.com">Apress</a>.
+ The books covers the latest SQLite internals as well as
+ the native C interface and bindings for PHP, Python,
+ Perl, Ruby, Tcl, and Java. Recommended.
+</blockquote><hr width="50%"><a name="2006_06_6"></a><h3>2006-06-6 - Version 3.3.6</h3><blockquote>
+ Changes include improved tolerance for Windows virus scanners
+ and faster :memory: databases. There are also fixes for several
+ obscure bugs. Upgrade if you are having problems.
+</blockquote><hr width="50%"><a name="2006_04_5"></a><h3>2006-04-5 - Version 3.3.5</h3><blockquote>
+ This release fixes many minor bugs and documentation typos and
+ provides some minor new features and performance enhancements.
+ Upgrade only if you are having problems or need one of the new features.
+</blockquote><hr width="50%"><a name="2006_02_11"></a><h3>2006-02-11 - Version 3.3.4</h3><blockquote>
+ This release fixes several bugs, including a
+ blunder that might cause a deadlock on multithreaded systems.
+ Anyone using SQLite in a multithreaded environment should probably upgrade.
+</blockquote><hr width="50%"><a name="2006_01_31"></a><h3>2006-01-31 - Version 3.3.3 stable</h3><blockquote>
+ There have been no major problems discovered in version 3.3.2, so
+ we hereby declare the new APIs and language features to be stable
+ and supported.
+</blockquote><hr width="50%"><a name="2006_01_24"></a><h3>2006-01-24 - Version 3.3.2 beta</h3><blockquote>
+ More bug fixes and performance improvements as we move closer to
+ a production-ready version 3.3.x.
+</blockquote><hr width="50%"><a name="2006_01_16"></a><h3>2006-01-16 - Version 3.3.1 alpha</h3><blockquote>
+ Many bugs found in last week's alpha release have now been fixed and
+ the library is running much faster again.</p>
+
+<p> Database connections can now be moved between threads as long as the
+ connection holds no locks at the time it is moved. Thus the common
+ paradigm of maintaining a pool of database connections and handing
+ them off to transient worker threads is now supported.
+ Please help test this new feature.
+ See the MultiThreading wiki page for additional
+ information.
+</blockquote><hr width="50%"><a name="2006_01_10"></a><h3>2006-01-10 - Version 3.3.0 alpha</h3><blockquote>
+ Version 3.3.0 adds support for CHECK constraints, DESC indices,
+ separate REAL and INTEGER column affinities, a new OS interface layer
+ design, and many other changes. The code passed a regression
+ test but should still be considered alpha. Please report any
+ problems.</p>
+
+<p> The file format for version 3.3.0 has changed slightly to support
+ descending indices and
+ a more efficient encoding of boolean values. SQLite 3.3.0 will read and
+ write legacy databases created with any prior version of SQLite 3. But
+ databases created by version 3.3.0 will not be readable or writable
+ by earlier versions of the SQLite. The older file format can be
+ specified at compile-time for those rare cases where it is needed.
+</blockquote><hr width="50%"><a name="2005_12_19"></a><h3>2005-12-19 - Versions 3.2.8 and 2.8.17</h3><blockquote>
+ These versions contain one-line changes to 3.2.7 and 2.8.16 to fix a bug
+ that has been present since March of 2002 and version 2.4.0.
+ That bug might possibly cause database corruption if a large INSERT or
+ UPDATE statement within a multi-statement transaction fails due to a
+ uniqueness constraint but the containing transaction commits.
+</blockquote><hr width="50%"><a name="2005_09_24"></a><h3>2005-09-24 - Version 3.2.7</h3><blockquote>
+ This version fixes several minor and obscure bugs.
+ Upgrade only if you are having problems.
+</blockquote><hr width="50%"><a name="2005_09_16"></a><h3>2005-09-16 - Version 3.2.6 - Critical Bug Fix</h3><blockquote>
+ This version fixes a bug that can result in database
+ corruption if a VACUUM of a 1 gigabyte or larger database fails
+ (perhaps do to running out of disk space or an unexpected power loss)
+ and is later rolled back.
+ <p>
+ Also in this release:
+ The ORDER BY and GROUP BY processing was rewritten to use less memory.
+ Support for COUNT(DISTINCT) was added. The LIKE operator can now be
+ used by the optimizer on columns with COLLATE NOCASE.
+</blockquote><hr width="50%"><a name="2005_08_27"></a><h3>2005-08-27 - Version 3.2.5</h3><blockquote>
+ This release fixes a few more lingering bugs in the new code.
+ We expect that this release will be stable and ready for production use.
+</blockquote><hr width="50%"><a name="2005_08_24"></a><h3>2005-08-24 - Version 3.2.4</h3><blockquote>
+ This release fixes a bug in the new optimizer that can lead to segfaults
+ when parsing very complex WHERE clauses.
+</blockquote><hr width="50%"><a name="2005_08_21"></a><h3>2005-08-21 - Version 3.2.3</h3><blockquote>
+ This release adds the <a href="lang_analyze.html">ANALYZE</a> command,
+ the <a href="lang_expr.html">CAST</a> operator, and many
+ very substantial improvements to the query optimizer. See the
+ <a href="changes.html#version_3_2_3">change log</a> for additional
+ information.
+</blockquote><hr width="50%"><a name="2005_08_02"></a><h3>2005-08-02 - 2005 Open Source Award for SQLite</h3><blockquote>
+ SQLite and its primary author D. Richard Hipp have been honored with
+ a <a href="http://osdir.com/Article6677.phtml">2005 Open Source Award</a>
+ from Google and O'Reilly.<br clear="right">
+</blockquote><hr width="50%"><a name="2005_06_13"></a><h3>2005-06-13 - Version 3.2.2</h3><blockquote>
+ This release includes numerous minor bug fixes, speed improvements,
+ and code size reductions. There is no reason to upgrade unless you
+ are having problems or unless you just want to.
+</blockquote><hr width="50%"><a name="2005_03_29"></a><h3>2005-03-29 - Version 3.2.1</h3><blockquote>
+ This release fixes a memory allocation problem in the new
+ <a href="lang_altertable.html">ALTER TABLE ADD COLUMN</a>
+ command.
+</blockquote><hr width="50%"><a name="2005_03_21"></a><h3>2005-03-21 - Version 3.2.0</h3><blockquote>
+ The primary purpose for version 3.2.0 is to add support for
+ <a href="lang_altertable.html">ALTER TABLE ADD COLUMN</a>.
+ The new ADD COLUMN capability is made
+ possible by AOL developers supporting and embracing great
+ open-source software. Thanks, AOL!</p>
+
+<p> Version 3.2.0 also fixes an obscure but serious bug that was discovered
+ just prior to release. If you have a multi-statement transaction and
+ within that transaction an UPDATE or INSERT statement fails due to a
+ constraint, then you try to rollback the whole transaction, the rollback
+ might not work correctly. See
+ Ticket #1171 for details. Upgrading is recommended for all users.
+</blockquote><hr width="50%"><a name="2005_03_16"></a><h3>2005-03-16 - Version 3.1.6</h3><blockquote>
+ Version 3.1.6 fixes a critical bug that can cause database corruption
+ when inserting rows into tables with around 125 columns. This bug was
+ introduced in version 3.0.0. See
+ Ticket #1163 for additional information.
+</blockquote><hr width="50%"><a name="2005_03_11"></a><h3>2005-03-11 - Versions 3.1.4 and 3.1.5 Released</h3><blockquote>
+ Version 3.1.4 fixes a critical bug that could cause database corruption
+ if the autovacuum mode of version 3.1.0 is turned on (it is off by
+ default) and a CREATE UNIQUE INDEX is executed within a transaction but
+ fails because the indexed columns are not unique. Anyone using the
+ autovacuum feature and unique indices should upgrade.</p>
+
+<p> Version 3.1.5 adds the ability to disable
+ the F_FULLFSYNC ioctl() in OS-X by setting "PRAGMA synchronous=on" instead
+ of the default "PRAGMA synchronous=full". There was an attempt to add
+ this capability in 3.1.4 but it did not work due to a spelling error.
+</blockquote><hr width="50%"><a name="2005_02_19"></a><h3>2005-02-19 - Version 3.1.3 Released</h3><blockquote>
+ Version 3.1.3 cleans up some minor issues discovered in version 3.1.2.
+</blockquote><hr width="50%"><a name="2005_02_15"></a><h3>2005-02-15 - Versions 2.8.16 and 3.1.2 Released</h3><blockquote>
+ A critical bug in the VACUUM command that can lead to database
+ corruption has been fixed in both the 2.x branch and the main
+ 3.x line. This bug has existed in all prior versions of SQLite.
+ Even though it is unlikely you will ever encounter this bug,
+ it is suggested that all users upgrade. See
+ ticket #1116 for additional information.</p>
+
+<p> Version 3.1.2 is also the first stable release of the 3.1
+ series. SQLite 3.1 features added support for correlated
+ subqueries, autovacuum, autoincrement, ALTER TABLE, and
+ other enhancements. See the
+ <a href="http://www.sqlite.org/releasenotes310.html">release notes
+ for version 3.1.0</a> for a detailed description of the
+ changes available in the 3.1 series.
+</blockquote><hr width="50%"><a name="2005_02_01"></a><h3>2005-02-01 - Version 3.1.1 (beta) Released</h3><blockquote>
+ Version 3.1.1 (beta) is now available on the
+ website. Version 3.1.1 is fully backwards compatible with the 3.0 series
+ and features many new features including Autovacuum and correlated
+ subqueries. The
+ <a href="http://www.sqlite.org/releasenotes310.html">release notes</a>
+ From version 3.1.0 apply equally to this release beta. A stable release
+ is expected within a couple of weeks.
+</blockquote><hr width="50%"><a name="2005_01_21"></a><h3>2005-01-21 - Version 3.1.0 (alpha) Released</h3><blockquote>
+ Version 3.1.0 (alpha) is now available on the
+ website. Version 3.1.0 is fully backwards compatible with the 3.0 series
+ and features many new features including Autovacuum and correlated
+ subqueries. See the
+ <a href="http://www.sqlite.org/releasenotes310.html">release notes</a>
+ for details.</p>
+
+<p> This is an alpha release. A beta release is expected in about a week
+ with the first stable release to follow after two more weeks.
+</blockquote><hr width="50%"><a name="2004_11_09"></a><h3>2004-11-09 - SQLite at the 2004 International PHP Conference</h3><blockquote>
+ There was a talk on the architecture of SQLite and how to optimize
+ SQLite queries at the 2004 International PHP Conference in Frankfurt,
+ Germany.
+ <a href="http://www.sqlite.org/php2004/page-001.html">
+ Slides</a> from that talk are available.
+</blockquote><hr width="50%"><a name="2004_10_11"></a><h3>2004-10-11 - Version 3.0.8</h3><blockquote>
+ Version 3.0.8 of SQLite contains several code optimizations and minor
+ bug fixes and adds support for DEFERRED, IMMEDIATE, and EXCLUSIVE
+ transactions. This is an incremental release. There is no reason
+ to upgrade from version 3.0.7 if that version is working for you.
+</blockquote><hr width="50%"><a name="2004_10_10"></a><h3>2004-10-10 - SQLite at the 11<sup><small>th</small></sup>
+Annual Tcl/Tk Conference</h3><blockquote>
+ There will be a talk on the use of SQLite in Tcl/Tk at the
+ 11<sup><small>th</small></sup> Tcl/Tk Conference this week in
+ New Orleans. Visit <a href="http://www.tcl-lang.org/community/tcl2004/">http://www.tcl-lang.org/community/tcl2004/</a>
+ for details.
+ <a href="http://www.sqlite.org/tclconf2004/page-001.html">
+ Slides</a> from the talk are available.
+</blockquote><hr width="50%"><a name="2004_09_18"></a><h3>2004-09-18 - Version 3.0.7</h3><blockquote>
+ Version 3.0 has now been in use by multiple projects for several
+ months with no major difficulties. We consider it stable and
+ ready for production use.
+</blockquote><hr width="50%"><a name="2004_09_02"></a><h3>2004-09-02 - Version 3.0.6 (beta)</h3><blockquote>
+ Because of some important changes to sqlite3_step(),
+ we have decided to
+ do an additional beta release prior to the first "stable" release.
+ If no serious problems are discovered in this version, we will
+ release version 3.0 "stable" in about a week.
+</blockquote><hr width="50%"><a name="2004_08_29"></a><h3>2004-08-29 - Version 3.0.5 (beta)</h3><blockquote>
+ The fourth beta release of SQLite version 3.0 is now available.
+ The next release is expected to be called "stable".
+</blockquote><hr width="50%"><a name="2004_08_08"></a><h3>2004-08-08 - Version 3.0.4 (beta)</h3><blockquote>
+ The third beta release of SQLite version 3.0 is now available.
+ This new beta fixes several bugs including a database corruption
+ problem that can occur when doing a DELETE while a SELECT is pending.
+ Expect at least one more beta before version 3.0 goes final.
+</blockquote><hr width="50%"><a name="2004_07_22"></a><h3>2004-07-22 - Version 3.0.3 (beta)</h3><blockquote>
+ The second beta release of SQLite version 3.0 is now available.
+ This new beta fixes many bugs and adds support for databases with
+ varying page sizes. The next 3.0 release will probably be called
+ a final or stable release.</p>
+
+<p> Version 3.0 adds support for internationalization and a new
+ more compact file format.
+ <a href="version3.html">Details.</a>
+ The API and file format have been fixed since 3.0.2. All
+ regression tests pass (over 100000 tests) and the test suite
+ exercises over 95% of the code.</p>
+
+<p> SQLite version 3.0 is made possible in part by AOL
+ developers supporting and embracing great Open-Source Software.
+</blockquote><hr width="50%"><a name="2004_07_22"></a><h3>2004-07-22 - Version 2.8.15</h3><blockquote>
+ SQLite version 2.8.15 is a maintenance release for the version 2.8
+ series. Version 2.8 continues to be maintained with bug fixes, but
+ no new features will be added to version 2.8. All the changes in
+ this release are minor. If you are not having problems, there is
+ there is no reason to upgrade.
+</blockquote><hr width="50%"><a name="2004_06_30"></a><h3>2004-06-30 - Version 3.0.2 (beta) Released</h3><blockquote>
+ The first beta release of SQLite version 3.0 is now available.
+ Version 3.0 adds support for internationalization and a new
+ more compact file format.
+ <a href="version3.html">Details.</a>
+ As of this release, the API and file format are frozen. All
+ regression tests pass (over 100000 tests) and the test suite
+ exercises over 95% of the code.</p>
+
+<p> SQLite version 3.0 is made possible in part by AOL
+ developers supporting and embracing great Open-Source Software.
+</blockquote><hr width="50%"><a name="2004_06_25"></a><h3>2004-06-25 - Website hacked</h3><blockquote>
+ The www.sqlite.org website was hacked sometime around 2004-06-22
+ because the lead SQLite developer failed to properly patch CVS.
+ Evidence suggests that the attacker was unable to elevate privileges
+ above user "cvs". Nevertheless, as a precaution the entire website
+ has been reconstructed from scratch on a fresh machine. All services
+ should be back to normal as of 2004-06-28.
+</blockquote><hr width="50%"><a name="2004_06_18"></a><h3>2004-06-18 - Version 3.0.0 (alpha) Released</h3><blockquote>
+ The first alpha release of SQLite version 3.0 is available for
+ public review and comment. Version 3.0 enhances internationalization support
+ through the use of UTF-16 and user-defined text collating sequences.
+ BLOBs can now be stored directly, without encoding.
+ A new file format results in databases that are 25% smaller (depending
+ on content). The code is also a little faster. In spite of the many
+ new features, the library footprint is still less than 240KB
+ (x86, gcc -O1).
+ <a href="version3.html">Additional information</a>.</p>
+
+<p> Our intent is to freeze the file format and API on 2004-07-01.
+ Users are encouraged to review and evaluate this alpha release carefully
+ and submit any feedback prior to that date.</p>
+
+<p> The 2.8 series of SQLite will continue to be supported with bug
+ fixes for the foreseeable future.
+</blockquote><hr width="50%"><a name="2004_06_09"></a><h3>2004-06-09 - Version 2.8.14 Released</h3><blockquote>
+ SQLite version 2.8.14 is a patch release to the stable 2.8 series.
+ There is no reason to upgrade if 2.8.13 is working ok for you.
+ This is only a bug-fix release. Most development effort is
+ going into version 3.0.0 which is due out soon.
+</blockquote><hr width="50%"><a name="2004_05_31"></a><h3>2004-05-31 - CVS Access Temporarily Disabled</h3><blockquote>
+ Anonymous access to the CVS repository will be suspended
+ for 2 weeks beginning on 2004-06-04. Everyone will still
+ be able to download
+ prepackaged source bundles, create or modify trouble tickets, or view
+ change logs during the CVS service interruption. Full open access to the
+ CVS repository will be restored on 2004-06-18.
+</blockquote><hr width="50%"><a name="2004_04_23"></a><h3>2004-04-23 - Work Begins On SQLite Version 3</h3><blockquote>
+ Work has begun on version 3 of SQLite. Version 3 is a major
+ changes to both the C-language API and the underlying file format
+ that will enable SQLite to better support internationalization.
+ The first beta is schedule for release on 2004-07-01.</p>
+
+<p> Plans are to continue to support SQLite version 2.8 with
+ bug fixes. But all new development will occur in version 3.0.
+</blockquote><hr width="50%">
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/oldnews.in?m=b255cc82f4af93bcb">2022-08-10 18:45:48</a> UTC </small></i></p>
+
diff --git a/www/omitted.html b/www/omitted.html
new file mode 100644
index 0000000..6b6291a
--- /dev/null
+++ b/www/omitted.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQL Features That SQLite Does Not Implement</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h2>SQL Features That SQLite Does Not Implement</h2>
+
+<p>
+SQLite implements most of the common features of SQL.
+Rather than try to list all the features of SQL that SQLite does
+support, it is much easier to list those that it does not.
+Unsupported features of SQL are shown below.</p>
+
+<p>
+See also the
+<a href="quirks.html">Quirks, Caveats, and Gotchas</a> of SQLite.
+
+<table cellpadding="10">
+
+<tr><td valign="top"><b><nobr>Complete ALTER TABLE support</nobr></b></td><td width="10">&nbsp;</th><td valign="top">
+ Only the RENAME TABLE, ADD COLUMN, RENAME COLUMN, and DROP COLUMN
+ variants of the ALTER TABLE command are supported. Other kinds of
+ ALTER TABLE operations such as
+ ALTER COLUMN, ADD CONSTRAINT, and so forth are omitted.
+</td></tr><tr><td valign="top"><b><nobr>Complete trigger support</nobr></b></td><td width="10">&nbsp;</th><td valign="top">
+ FOR EACH ROW triggers are supported but not FOR EACH STATEMENT
+ triggers.
+</td></tr><tr><td valign="top"><b><nobr>Writing to VIEWs</nobr></b></td><td width="10">&nbsp;</th><td valign="top">
+ VIEWs in SQLite are read-only. You may not execute a DELETE, INSERT, or
+ UPDATE statement on a view. But you can create a trigger
+ that fires on an attempt to DELETE, INSERT, or UPDATE a view and do
+ what you need in the body of the trigger.
+</td></tr><tr><td valign="top"><b><nobr>GRANT and REVOKE</nobr></b></td><td width="10">&nbsp;</th><td valign="top">
+ Since SQLite reads and writes an ordinary disk file, the
+ only access permissions that can be applied are the normal
+ file access permissions of the underlying operating system.
+ The GRANT and REVOKE commands commonly found on client/server
+ RDBMSes are not implemented because they would be meaningless
+ for an embedded database engine.
+</td></tr>
+</table>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/omitted.in?m=f9ca306d71e730fbf">2022-04-13 13:11:44</a> UTC </small></i></p>
+
diff --git a/www/onefile.html b/www/onefile.html
new file mode 100644
index 0000000..7c63738
--- /dev/null
+++ b/www/onefile.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite: Single File Database</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h2>Single-file Cross-platform Database</h2>
+
+<p>
+A database in SQLite is a single disk file&sup1;.
+Furthermore, the <a href="fileformat2.html">file format</a> is cross-platform.
+A database that is created on one machine can be
+copied and used on a different machine with
+a different architecture. SQLite databases
+are portable across 32-bit and 64-bit machines
+and between
+<a href="http://en.wikipedia.org/wiki/Endianness">big-endian</a> and
+<a href="http://en.wikipedia.org/wiki/Endianness">little-endian</a>
+architectures.
+</p>
+
+<p>
+The SQLite database file format is also stable.
+All releases of SQLite version 3 can read and write database
+files created by the very first SQLite 3 release (version 3.0.0)
+going back to 2004-06-18. This is "backwards compatibility".
+The developers promise to maintain backwards compatibility of
+the database file format for all future releases of SQLite 3.
+"Forwards compatibility" means that older releases
+of SQLite can also read and write databases created by newer
+releases. SQLite is usually, but not completely forwards
+compatible.
+</p>
+
+<p>
+The stability of the SQLite database file format and the fact
+that the file format is cross-platform combine to make SQLite
+database files an excellent choice as an
+<a href="appfileformat.html">Application File Format</a>.
+The US Library Of Congress acknowledges this by listing SQLite
+as a <a href="locrsf.html">recommended storage format</a> for long-term preservation of
+digital content.
+</p>
+</p>
+
+<hr>
+<div style='font-size: 75%;'>
+<p>Notes:
+<ol>
+<li>Temporary journal files are created as part of transaction control,
+but those extra files are not part of the steady-state database.
+</ol>
+</div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/onefile.in?m=ff3408d859b7942ff">2020-04-06 18:59:20</a> UTC </small></i></p>
+
diff --git a/www/opcode.html b/www/opcode.html
new file mode 100644
index 0000000..1e9fa7d
--- /dev/null
+++ b/www/opcode.html
@@ -0,0 +1,2623 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The SQLite Bytecode Engine</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The SQLite Bytecode Engine
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#executive_summary">1. Executive Summary</a></div>
+<div class="fancy-toc1"><a href="#introduction">2. Introduction</a></div>
+<div class="fancy-toc2"><a href="#vdbe_source_code">2.1. VDBE Source Code</a></div>
+<div class="fancy-toc2"><a href="#instruction_format">2.2. Instruction Format</a></div>
+<div class="fancy-toc2"><a href="#registers">2.3. Registers</a></div>
+<div class="fancy-toc2"><a href="#b_tree_cursors">2.4. B-Tree Cursors</a></div>
+<div class="fancy-toc2"><a href="#subroutines_coroutines_and_subprograms">2.5. Subroutines, Coroutines, and Subprograms</a></div>
+<div class="fancy-toc2"><a href="#self_altering_code">2.6. Self-Altering Code</a></div>
+<div class="fancy-toc1"><a href="#viewing_the_bytecode">3. Viewing The Bytecode</a></div>
+<div class="fancy-toc1"><a href="#the_opcodes">4. The Opcodes</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="executive_summary"><span>1. </span>Executive Summary</h1>
+
+<p>SQLite works by translating SQL statements into bytecode and
+then running that bytecode in a virtual machine. This document
+describes how the bytecode engine works.
+
+</p><p>This document describes SQLite internals. The information provided
+here is not needed for routine application development using SQLite.
+This document is intended for people who want to delve more deeply into
+the internal operation of SQLite.
+
+</p><p>The bytecode engine is <u>not</u> an API of SQLite. Details
+about the bytecode engine change from one release of SQLite to the next.
+Applications that use SQLite should not depend on any of the details
+found in this document.
+
+
+
+</p><h1 id="introduction"><span>2. </span>Introduction</h1>
+
+<p>SQLite works by translating each SQL statement into bytecode and
+then running that bytecode.
+A <a href="c3ref/stmt.html">prepared statement</a> in SQLite is mostly just the bytecode needed to
+implement the corresponding SQL. The <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> interface
+is a compiler that translates SQL into bytecode.
+The <a href="c3ref/step.html">sqlite3_step()</a> interface is the virtual machine that runs the
+bytecode contained within the <a href="c3ref/stmt.html">prepared statement</a>.
+
+</p><p>The bytecode virtual machine is the heart of SQLite.
+Programmers who want to understand how SQLite operates internally
+must be familiar with the bytecode engine.
+
+</p><p>Historically, the bytecode engine in SQLite is called the
+"Virtual DataBase Engine" or "VDBE". This website uses the terms
+"bytecode engine", "VDBE", "virtual machine", and "bytecode virtual
+machine" interchangeably, as they all mean the same thing.
+
+</p><p>
+This article also uses the terms "bytecode program" and
+"prepared statement" interchangeably, as they are mostly the same thing.
+
+</p><h2 id="vdbe_source_code"><span>2.1. </span>VDBE Source Code</h2>
+
+<p>The source code to the bytecode engine is in the
+<a href="http://www.sqlite.org/src/file/src/vdbe.c">vdbe.c</a> source
+file. The <a href="opcode.html#codes">opcode definitions</a> in this document are derived
+from comments in that source file. The
+source code comments are the canonical source of information
+about the bytecode engine. When in doubt, refer to the source code.</p>
+
+<p>In addition to the primary vdbe.c source code file, there are
+other helper code files in the source tree, all of whose names
+begin with "vdbe" - short for "Virtual DataBase Engine".
+
+</p><p>Remember that the names and meanings of opcodes often change from
+one release of SQLite to the next. So if you are studying the <a href="lang_explain.html">EXPLAIN</a>
+output from SQLite, you should reference the version of this document
+(or the vdbe.c source code)
+that corresponds to the version of SQLite that ran the <a href="lang_explain.html">EXPLAIN</a>.
+Otherwise, the description of the opcodes may not be accurate.
+This document is derived from SQLite
+ version 3.40.1 check-in
+<a href='https://www.sqlite.org/src/timeline?c=df5c253c0b3dd'>df5c253c0b3dd</a> dated 2022-12-28.
+
+
+
+
+</p><h2 id="instruction_format"><span>2.2. </span>Instruction Format</h2>
+
+
+<p>A bytecoded program in SQLite consists of one or more instructions.
+Each instruction has an opcode and
+five operands named P1, P2 P3, P4, and P5. The P1, P2, and P3
+operands are 32-bit signed integers. These operands often refer to
+registers. For instructions that operate on b-tree cursors,
+the P1 operand is usually the cursor number.
+For jump instructions, P2 is usually the jump destination.
+P4 may be a 32-bit signed integer, a 64-bit signed integer, a
+64-bit floating point value, a string literal, a Blob literal,
+a pointer to a collating sequence comparison function, or a
+pointer to the implementation of an application-defined SQL
+function, or various other things. P5 is an 16-bit unsigned integer
+normally used to hold flags. Bits of the P5 flag can sometimes affect
+the opcode in subtle ways. For example, if the
+SQLITE_NULLEQ (0x0080) bit of the P5 operand
+is set on the <a href="opcode.html#Eq">Eq</a> opcode, then the NULL values compare
+equal to one another. Otherwise NULL values compare different
+from one another.
+
+
+<p>Some opcodes use all five operands. Some opcodes use
+one or two. Some opcodes use none of the operands.</p><p>
+
+
+<p>The bytecode engine begins execution on instruction number 0.
+Execution continues until a <a href="opcode.html#Halt">Halt</a> instruction is seen, or until
+the program counter becomes greater than the address of
+last instruction, or until there is an error.
+When the bytecode engine halts, all memory
+that it allocated is released and all database cursors it may
+have had open are closed. If the execution stopped due to an
+error, any pending transactions are terminated and changes made
+to the database are rolled back.</p>
+
+
+
+<p>The <a href="opcode.html#ResultRow">ResultRow</a> opcode causes the
+bytecode engine to pause and the corresponding <a href="c3ref/step.html">sqlite3_step()</a>
+call to return <a href="rescode.html#row">SQLITE_ROW</a>. Before invoking
+<a href="opcode.html#ResultRow">ResultRow</a>, the bytecoded program will
+have loaded the results for a single row of a query into a series
+of registers. C-language APIs such as <a href="c3ref/column_blob.html">sqlite3_column_int()</a>
+or <a href="c3ref/column_blob.html">sqlite3_column_text()</a> extract the query results from those
+registers. The bytecode engine resumes with the next instruction
+after the <a href="opcode.html#ResultRow">ResultRow</a> on the next call
+to <a href="c3ref/step.html">sqlite3_step()</a>.
+
+
+</p><h2 id="registers"><span>2.3. </span>Registers</h2>
+
+
+<p>Every bytecode program has a fixed (but potentially large) number of
+registers. A single register can hold a variety of objects:
+<ul>
+<li> A NULL value
+<li> A signed 64-bit integer
+<li> An IEEE double-precision (64-bit) floating point number
+<li> An arbitrary length strings
+<li> An arbitrary length BLOB
+<li> A RowSet object (See the <a href="opcode.html#RowSetAdd">RowSetAdd</a>, <a href="opcode.html#RowSetRead">RowSetRead</a>, and
+ <a href="opcode.html#RowSetTest">RowSetTest</a> opcodes)
+<li> A Frame object (Used by <a href="opcode.html#subprog">subprograms</a> - see <a href="opcode.html#Program">Program</a>)
+</ul>
+
+
+<p>A register can also be "Undefined" meaning that it holds no value
+at all. Undefined is different from NULL. Depending on compile-time
+options, an attempt to read an undefined register will usually cause
+a run-time error. If the code generator (<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>)
+ever generates a <a href="c3ref/stmt.html">prepared statement</a> that reads an Undefined register,
+that is a bug in the code generator.
+
+</p><p>
+Registers are numbered beginning with 0.
+Most opcodes refer to at least one register.
+
+</p><p>The number of registers in a single prepared statement is fixed
+at compile-time. The content of all registers is cleared when
+a prepared statement is <a href="c3ref/reset.html">reset</a> or
+<a href="c3ref/finalize.html">finalized</a>.
+
+</p><p>The internal Mem object stores the value for a single register.
+The abstract <a href="c3ref/value.html">sqlite3_value</a> object that is exposed in the API is really
+just a Mem object or register.
+
+</p><h2 id="b_tree_cursors"><span>2.4. </span>B-Tree Cursors</h2>
+
+
+<p>A prepared statement can have
+zero or more open cursors. Each cursor is identified by a
+small integer, which is usually the P1 parameter to the opcode
+that uses the cursor.
+There can be multiple cursors open on the same index or table.
+All cursors operate independently, even cursors pointing to the same
+indices or tables.
+The only way for the virtual machine to interact with a database
+file is through a cursor.
+Instructions in the virtual machine can create a new cursor
+(ex: <a href="opcode.html#OpenRead">OpenRead</a> or <a href="opcode.html#OpenWrite">OpenWrite</a>),
+read data from a cursor (<a href="opcode.html#Column">Column</a>),
+advance the cursor to the next entry in the table
+(ex: <a href="opcode.html#Next">Next</a> or <a href="opcode.html#Prev">Prev</a>), and so forth.
+All cursors are automatically
+closed when the prepared statement is <a href="c3ref/reset.html">reset</a> or
+<a href="c3ref/finalize.html">finalized</a>.
+
+
+<a name="subprog"></a>
+
+<h2 id="subroutines_coroutines_and_subprograms"><span>2.5. </span>Subroutines, Coroutines, and Subprograms</h2>
+
+<p>The bytecode engine has no stack on which to store the return address
+of a subroutine. Return addresses must be stored in registers.
+Hence, bytecode subroutines are not reentrant.
+
+
+<p>The <a href="opcode.html#Gosub">Gosub</a> opcode stores the current program counter into
+register P1 then jumps to address P2. The <a href="opcode.html#Return">Return</a> opcode jumps
+to address P1+1. Hence, every subroutine is associated with two integers:
+the address of the entry point in the subroutine and the register number
+that is used to hold the return address.
+
+<p>The <a href="opcode.html#Yield">Yield</a> opcode swaps the value of the program counter with
+the integer value in register P1. This opcode is used to implement
+coroutines. Coroutines are often used to implement subqueries from
+which content is pulled on an as-needed basis.
+
+
+</p><p><a href="lang_createtrigger.html">Triggers</a> need to be reentrant.
+
+
+Since bytecode
+subroutines are not reentrant a different mechanism must be used to
+implement triggers. Each trigger is implemented using a separate bytecode
+program with its own opcodes, program counter, and register set. The
+<a href="opcode.html#Program">Program</a> opcode invokes the trigger subprogram. The <a href="opcode.html#Program">Program</a> instruction
+allocates and initializes a fresh register set for each invocation of the
+subprogram, so subprograms can be reentrant and recursive. The
+<a href="opcode.html#Param">Param</a> opcode is used by subprograms to access content in registers
+of the calling bytecode program.
+
+
+</p><h2 id="self_altering_code"><span>2.6. </span>Self-Altering Code</h2>
+
+
+<p>Some opcodes are self-altering.
+For example, the <a href="opcode.html#Init">Init</a> opcode (which is always the first opcode
+in every bytecode program) increments its P1 operand. Subsequent
+<a href="opcode.html#Once">Once</a> opcodes compare their P1 operands to the P1 value for
+the <a href="opcode.html#Init">Init</a> opcode in order to determine if the one-time initialization
+code that follows should be skipped.
+Another example is the <a href="opcode.html#String8">String8</a> opcode which converts its P4
+operand from UTF-8 into the correct database string encoding, then
+converts itself into a <a href="opcode.html#String">String</a> opcode.
+
+
+
+<h1 id="viewing_the_bytecode"><span>3. </span>Viewing The Bytecode</h1>
+
+<p>Every SQL statement that SQLite interprets results in a program
+for the virtual machine. But if the SQL statement begins with
+the keyword <a href="lang_explain.html">EXPLAIN</a> the virtual machine will not execute the
+program. Instead, the instructions of the program will be returned,
+one instruction per row,
+like a query result. This feature is useful for debugging and
+for learning how the virtual machine operates. For example:
+</p>
+
+<blockquote><pre>$&nbsp;<b>sqlite3&nbsp;ex1.db</b>
+sqlite&gt;&nbsp;<b>explain&nbsp;delete&nbsp;from&nbsp;tbl1&nbsp;where&nbsp;two&lt;20;</b>
+addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;p4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p5&nbsp;&nbsp;comment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+----&nbsp;&nbsp;-------------&nbsp;&nbsp;----&nbsp;&nbsp;----&nbsp;&nbsp;----&nbsp;&nbsp;-------------&nbsp;&nbsp;--&nbsp;&nbsp;-------------
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;Start&nbsp;at&nbsp;12&nbsp;&nbsp;
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Null&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;r[1]=NULL&nbsp;&nbsp;&nbsp;&nbsp;
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;root=2&nbsp;iDb=0;&nbsp;tbl1
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;r[2]=tbl1.two
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(BINARY)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;51&nbsp;&nbsp;if&nbsp;r[2]&gt;=r[3]&nbsp;goto&nbsp;9
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rowid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;r[4]=rowid&nbsp;&nbsp;&nbsp;
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Once&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbl1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+10&nbsp;&nbsp;&nbsp;&nbsp;Noop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+11&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+12&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;01&nbsp;&nbsp;usesStmtJournal=0
+13&nbsp;&nbsp;&nbsp;&nbsp;TableLock&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tbl1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;iDb=0&nbsp;root=2&nbsp;write=1
+14&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00&nbsp;&nbsp;r[3]=20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+15&nbsp;&nbsp;&nbsp;&nbsp;Goto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00</pre></blockquote>
+
+<p>Any application can run an <a href="lang_explain.html">EXPLAIN</a> query to get output similar to
+the above.
+However, indentation to show the loop structure is not generated
+by the SQLite core. The <a href="cli.html">command-line shell</a> contains extra logic
+for indenting loops.
+Also, the "comment" column in the <a href="lang_explain.html">EXPLAIN</a> output
+is only provided if SQLite is compiled with the
+<a href="compile.html#enable_explain_comments">-DSQLITE_ENABLE_EXPLAIN_COMMENTS</a> options.
+
+</p><p>When SQLite is compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time option,
+extra <a href="pragma.html#syntax">PRAGMA</a> commands are available that are useful for debugging and
+for exploring the operation of the VDBE. For example the <a href="pragma.html#pragma_vdbe_trace">vdbe_trace</a>
+pragma can be enabled to cause a disassembly of each VDBE opcode to be
+printed on standard output as the opcode is executed. These debugging
+pragmas include:
+</p><ul>
+<li> <a href="pragma.html#pragma_parser_trace">PRAGMA parser_trace</a>
+</li><li> <a href="pragma.html#pragma_vdbe_addoptrace">PRAGMA vdbe_addoptrace</a>
+</li><li> <a href="pragma.html#pragma_vdbe_debug">PRAGMA vdbe_debug</a>
+</li><li> <a href="pragma.html#pragma_vdbe_listing">PRAGMA vdbe_listing</a>
+</li><li> <a href="pragma.html#pragma_vdbe_trace">PRAGMA vdbe_trace</a>
+</li></ul>
+
+
+<h1 id="the_opcodes"><span>4. </span>The Opcodes</h1>
+
+<p>There are currently 186
+opcodes defined by the virtual machine.
+All currently defined opcodes are described in the table below.
+This table was generated automatically by scanning the source code
+from the file
+<a href="http://www.sqlite.org/src/artifact/0c7cb1b934ad8611e14e7efaf2c3a95df7dd3f7964d63ea07fef42a23df86131">vdbe.c</a>.
+
+
+</p><p>Remember: The VDBE opcodes are <u>not</u> part of the interface
+definition for SQLite. The number of opcodes and their names and meanings
+change from one release of SQLite to the next.
+The opcodes shown in the table below are valid for SQLite
+ version 3.40.1 check-in
+<a href='https://www.sqlite.org/src/timeline?c=df5c253c0b3dd'>df5c253c0b3dd</a> dated 2022-12-28.
+
+<a name="codes"></a>
+
+ </div>
+ <style>.optab td {vertical-align:top; padding: 1ex 1ex;}</style>
+ <div class="optab">
+ <blockquote><table cellspacing=0 border=1 cellpaddin>
+ <tr><th>Opcode Name</th><th>Description</th></tr>
+<tr><td valign="top" align="center">
+<a name="Abortable"></a>Abortable
+<td>Verify that an Abort can happen. Assert if an Abort at this point
+might cause database corruption. This opcode only appears in debugging
+builds.</p>
+
+<p>An Abort is safe if either there have been no writes, or if there is
+an active statement journal.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Add"></a>Add
+<td>Add the value in register P1 to the value in register P2
+and store the result in register P3.
+If either input is NULL, the result is NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="AddImm"></a>AddImm
+<td>Add the constant P2 to the value in register P1.
+The result is always an integer.</p>
+
+<p>To force any register to be an integer, just add 0.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Affinity"></a>Affinity
+<td>Apply affinities to a range of P2 registers starting with P1.</p>
+
+<p>P4 is a string that is P2 characters long. The N-th character of the
+string indicates the column affinity that should be used for the N-th
+memory cell in the range.</td></tr>
+<tr><td valign="top" align="center">
+<a name="AggFinal"></a>AggFinal
+<td>P1 is the memory location that is the accumulator for an aggregate
+or window function. Execute the finalizer function
+for an aggregate and store the result in P1.</p>
+
+<p>P2 is the number of arguments that the step function takes and
+P4 is a pointer to the FuncDef for this function. The P2
+argument is not used by this opcode. It is only there to disambiguate
+functions that can take varying numbers of arguments. The
+P4 argument is only needed for the case where
+the step function was not previously called.</td></tr>
+<tr><td valign="top" align="center">
+<a name="AggInverse"></a>AggInverse
+<td>Execute the xInverse function for an aggregate.
+The function has P5 arguments. P4 is a pointer to the
+FuncDef structure that specifies the function. Register P3 is the
+accumulator.</p>
+
+<p>The P5 arguments are taken from register P2 and its
+successors.</td></tr>
+<tr><td valign="top" align="center">
+<a name="AggStep"></a>AggStep
+<td>Execute the xStep function for an aggregate.
+The function has P5 arguments. P4 is a pointer to the
+FuncDef structure that specifies the function. Register P3 is the
+accumulator.</p>
+
+<p>The P5 arguments are taken from register P2 and its
+successors.</td></tr>
+<tr><td valign="top" align="center">
+<a name="AggStep1"></a>AggStep1
+<td>Execute the xStep (if P1==0) or xInverse (if P1!=0) function for an
+aggregate. The function has P5 arguments. P4 is a pointer to the
+FuncDef structure that specifies the function. Register P3 is the
+accumulator.</p>
+
+<p>The P5 arguments are taken from register P2 and its
+successors.</p>
+
+<p>This opcode is initially coded as OP_AggStep0. On first evaluation,
+the FuncDef stored in P4 is converted into an sqlite3_context and
+the opcode is changed. In this way, the initialization of the
+sqlite3_context only happens once, instead of on each call to the
+step function.</td></tr>
+<tr><td valign="top" align="center">
+<a name="AggValue"></a>AggValue
+<td>Invoke the xValue() function and store the result in register P3.</p>
+
+<p>P2 is the number of arguments that the step function takes and
+P4 is a pointer to the FuncDef for this function. The P2
+argument is not used by this opcode. It is only there to disambiguate
+functions that can take varying numbers of arguments. The
+P4 argument is only needed for the case where
+the step function was not previously called.</td></tr>
+<tr><td valign="top" align="center">
+<a name="And"></a>And
+<td>Take the logical AND of the values in registers P1 and P2 and
+write the result into register P3.</p>
+
+<p>If either P1 or P2 is 0 (false) then the result is 0 even if
+the other input is NULL. A NULL and true or two NULLs give
+a NULL output.</td></tr>
+<tr><td valign="top" align="center">
+<a name="AutoCommit"></a>AutoCommit
+<td>Set the database auto-commit flag to P1 (1 or 0). If P2 is true, roll
+back any currently active btree transactions. If there are any active
+VMs (apart from this one), then a ROLLBACK fails. A COMMIT fails if
+there are active writing VMs or active VMs that use shared cache.</p>
+
+<p>This instruction causes the VM to halt.</td></tr>
+<tr><td valign="top" align="center">
+<a name="BeginSubrtn"></a>BeginSubrtn
+<td>Mark the beginning of a subroutine that can be entered in-line
+or that can be called using <a href="opcode.html#Gosub">Gosub</a>. The subroutine should
+be terminated by an <a href="opcode.html#Return">Return</a> instruction that has a P1 operand that
+is the same as the P2 operand to this opcode and that has P3 set to 1.
+If the subroutine is entered in-line, then the <a href="opcode.html#Return">Return</a> will simply
+fall through. But if the subroutine is entered using <a href="opcode.html#Gosub">Gosub</a>, then
+the <a href="opcode.html#Return">Return</a> will jump back to the first instruction after the <a href="opcode.html#Gosub">Gosub</a>.</p>
+
+<p>This routine works by loading a NULL into the P2 register. When the
+return address register contains a NULL, the <a href="opcode.html#Return">Return</a> instruction is
+a no-op that simply falls through to the next instruction (assuming that
+the <a href="opcode.html#Return">Return</a> opcode has a P3 value of 1). Thus if the subroutine is
+entered in-line, then the <a href="opcode.html#Return">Return</a> will cause in-line execution to
+continue. But if the subroutine is entered via <a href="opcode.html#Gosub">Gosub</a>, then the
+<a href="opcode.html#Return">Return</a> will cause a return to the address following the <a href="opcode.html#Gosub">Gosub</a>.</p>
+
+<p>This opcode is identical to <a href="opcode.html#Null">Null</a>. It has a different name
+only to make the byte code easier to read and verify.</td></tr>
+<tr><td valign="top" align="center">
+<a name="BitAnd"></a>BitAnd
+<td>Take the bit-wise AND of the values in register P1 and P2 and
+store the result in register P3.
+If either input is NULL, the result is NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="BitNot"></a>BitNot
+<td>Interpret the content of register P1 as an integer. Store the
+ones-complement of the P1 value into register P2. If P1 holds
+a NULL then store a NULL in P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="BitOr"></a>BitOr
+<td>Take the bit-wise OR of the values in register P1 and P2 and
+store the result in register P3.
+If either input is NULL, the result is NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Blob"></a>Blob
+<td>P4 points to a blob of data P1 bytes long. Store this
+blob in register P2. If P4 is a NULL pointer, then construct
+a zero-filled blob that is P1 bytes long in P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Cast"></a>Cast
+<td>Force the value in register P1 to be the type defined by P2.</p>
+
+<p><ul>
+<li> P2=='A' &rarr; BLOB
+<li> P2=='B' &rarr; TEXT
+<li> P2=='C' &rarr; NUMERIC
+<li> P2=='D' &rarr; INTEGER
+<li> P2=='E' &rarr; REAL
+</ul></p>
+
+<p>A NULL value is not changed by this routine. It remains NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Checkpoint"></a>Checkpoint
+<td>Checkpoint database P1. This is a no-op if P1 is not currently in
+WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL,
+RESTART, or TRUNCATE. Write 1 or 0 into mem&#91;P3&#93; if the checkpoint returns
+SQLITE_BUSY or not, respectively. Write the number of pages in the
+WAL after the checkpoint into mem&#91;P3+1&#93; and the number of pages
+in the WAL that have been checkpointed after the checkpoint
+completes into mem&#91;P3+2&#93;. However on an error, mem&#91;P3+1&#93; and
+mem&#91;P3+2&#93; are initialized to -1.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Clear"></a>Clear
+<td>Delete all contents of the database table or index whose root page
+in the database file is given by P1. But, unlike <a href="opcode.html#Destroy">Destroy</a>, do not
+remove the table or index from the database file.</p>
+
+<p>The table being clear is in the main database file if P2==0. If
+P2==1 then the table to be clear is in the auxiliary database file
+that is used to store tables create using CREATE TEMPORARY TABLE.</p>
+
+<p>If the P3 value is non-zero, then the row change count is incremented
+by the number of rows in the table being cleared. If P3 is greater
+than zero, then the value stored in register P3 is also incremented
+by the number of rows in the table being cleared.</p>
+
+<p>See also: <a href="opcode.html#Destroy">Destroy</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="Close"></a>Close
+<td>Close a cursor previously opened as P1. If P1 is not
+currently open, this instruction is a no-op.</td></tr>
+<tr><td valign="top" align="center">
+<a name="ClrSubtype"></a>ClrSubtype
+<td>Clear the subtype from register P1.</td></tr>
+<tr><td valign="top" align="center">
+<a name="CollSeq"></a>CollSeq
+<td>P4 is a pointer to a CollSeq object. If the next call to a user function
+or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will
+be returned. This is used by the built-in min(), max() and nullif()
+functions.</p>
+
+<p>If P1 is not zero, then it is a register that a subsequent min() or
+max() aggregate will set to 1 if the current row is not the minimum or
+maximum. The P1 register is initialized to 0 by this instruction.</p>
+
+<p>The interface used by the implementation of the aforementioned functions
+to retrieve the collation sequence set by this opcode is not available
+publicly. Only built-in functions have access to this feature.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Column"></a>Column
+<td>Interpret the data that cursor P1 points to as a structure built using
+the <a href="opcode.html#MakeRecord">MakeRecord</a> instruction. (See the <a href="opcode.html#MakeRecord">MakeRecord</a> opcode for additional
+information about the format of the data.) Extract the P2-th column
+from this record. If there are less than (P2+1)
+values in the record, extract a NULL.</p>
+
+<p>The value extracted is stored in register P3.</p>
+
+<p>If the record contains fewer than P2 fields, then extract a NULL. Or,
+if the P4 argument is a P4_MEM use the value of the P4 argument as
+the result.</p>
+
+<p>If the OPFLAG_LENGTHARG bit is set in P5 then the result is guaranteed
+to only be used by the length() function or the equivalent. The content
+of large blobs is not loaded, thus saving CPU cycles. If the
+OPFLAG_TYPEOFARG bit is set then the result will only be used by the
+typeof() function or the IS NULL or IS NOT NULL operators or the
+equivalent. In this case, all content loading can be omitted.</td></tr>
+<tr><td valign="top" align="center">
+<a name="ColumnsUsed"></a>ColumnsUsed
+<td>This opcode (which only exists if SQLite was compiled with
+SQLITE_ENABLE_COLUMN_USED_MASK) identifies which columns of the
+table or index for cursor P1 are used. P4 is a 64-bit integer
+(P4_INT64) in which the first 63 bits are one for each of the
+first 63 columns of the table or index that are actually used
+by the cursor. The high-order bit is set if any column after
+the 64th is used.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Compare"></a>Compare
+<td>Compare two vectors of registers in reg(P1)..reg(P1+P3-1) (call this
+vector "A") and in reg(P2)..reg(P2+P3-1) ("B"). Save the result of
+the comparison for use by the next <a href="opcode.html#Jump">Jump</a> instruct.</p>
+
+<p>If P5 has the OPFLAG_PERMUTE bit set, then the order of comparison is
+determined by the most recent <a href="opcode.html#Permutation">Permutation</a> operator. If the
+OPFLAG_PERMUTE bit is clear, then register are compared in sequential
+order.</p>
+
+<p>P4 is a KeyInfo structure that defines collating sequences and sort
+orders for the comparison. The permutation applies to registers
+only. The KeyInfo elements are used sequentially.</p>
+
+<p>The comparison is a sort comparison, so NULLs compare equal,
+NULLs are less than numbers, numbers are less than strings,
+and strings are less than blobs.</p>
+
+<p>This opcode must be immediately followed by an <a href="opcode.html#Jump">Jump</a> opcode.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Concat"></a>Concat
+<td>Add the text in register P1 onto the end of the text in
+register P2 and store the result in register P3.
+If either the P1 or P2 text are NULL then store NULL in P3.</p>
+
+<p>P3 = P2 || P1</p>
+
+<p>It is illegal for P1 and P3 to be the same register. Sometimes,
+if P3 is the same register as P2, the implementation is able
+to avoid a memcpy().</td></tr>
+<tr><td valign="top" align="center">
+<a name="Copy"></a>Copy
+<td>Make a copy of registers P1..P1+P3 into registers P2..P2+P3.</p>
+
+<p>If the 0x0002 bit of P5 is set then also clear the MEM_Subtype flag in the
+destination. The 0x0001 bit of P5 indicates that this <a href="opcode.html#Copy">Copy</a> opcode cannot
+be merged. The 0x0001 bit is used by the query planner and does not
+come into play during query execution.</p>
+
+<p>This instruction makes a deep copy of the value. A duplicate
+is made of any string or blob constant. See also <a href="opcode.html#SCopy">SCopy</a>.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Count"></a>Count
+<td>Store the number of entries (an integer value) in the table or index
+opened by cursor P1 in register P2.</p>
+
+<p>If P3==0, then an exact count is obtained, which involves visiting
+every btree page of the table. But if P3 is non-zero, an estimate
+is returned based on the current cursor position.</td></tr>
+<tr><td valign="top" align="center">
+<a name="CreateBtree"></a>CreateBtree
+<td>Allocate a new b-tree in the main database file if P1==0 or in the
+TEMP database file if P1==1 or in an attached database if
+P1&gt;1. The P3 argument must be 1 (BTREE_INTKEY) for a rowid table
+it must be 2 (BTREE_BLOBKEY) for an index or WITHOUT ROWID table.
+The root page number of the new b-tree is stored in register P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="CursorHint"></a>CursorHint
+<td>Provide a hint to cursor P1 that it only needs to return rows that
+satisfy the Expr in P4. TK_REGISTER terms in the P4 expression refer
+to values currently held in registers. TK_COLUMN terms in the P4
+expression refer to columns in the b-tree to which cursor P1 is pointing.</td></tr>
+<tr><td valign="top" align="center">
+<a name="CursorLock"></a>CursorLock
+<td>Lock the btree to which cursor P1 is pointing so that the btree cannot be
+written by an other cursor.</td></tr>
+<tr><td valign="top" align="center">
+<a name="CursorUnlock"></a>CursorUnlock
+<td>Unlock the btree to which cursor P1 is pointing so that it can be
+written by other cursors.</td></tr>
+<tr><td valign="top" align="center">
+<a name="DecrJumpZero"></a>DecrJumpZero
+<td>Register P1 must hold an integer. Decrement the value in P1
+and jump to P2 if the new value is exactly zero.</td></tr>
+<tr><td valign="top" align="center">
+<a name="DeferredSeek"></a>DeferredSeek
+<td>P1 is an open index cursor and P3 is a cursor on the corresponding
+table. This opcode does a deferred seek of the P3 table cursor
+to the row that corresponds to the current row of P1.</p>
+
+<p>This is a deferred seek. Nothing actually happens until
+the cursor is used to read a record. That way, if no reads
+occur, no unnecessary I/O happens.</p>
+
+<p>P4 may be an array of integers (type P4_INTARRAY) containing
+one entry for each column in the P3 table. If array entry a(i)
+is non-zero, then reading column a(i)-1 from cursor P3 is
+equivalent to performing the deferred seek and then reading column i
+from P1. This information is stored in P3 and used to redirect
+reads against P3 over to P1, thus possibly avoiding the need to
+seek and read cursor P3.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Delete"></a>Delete
+<td>Delete the record at which the P1 cursor is currently pointing.</p>
+
+<p>If the OPFLAG_SAVEPOSITION bit of the P5 parameter is set, then
+the cursor will be left pointing at either the next or the previous
+record in the table. If it is left pointing at the next record, then
+the next <a href="opcode.html#Next">Next</a> instruction will be a no-op. As a result, in this case
+it is ok to delete a record from within a <a href="opcode.html#Next">Next</a> loop. If
+OPFLAG_SAVEPOSITION bit of P5 is clear, then the cursor will be
+left in an undefined state.</p>
+
+<p>If the OPFLAG_AUXDELETE bit is set on P5, that indicates that this
+delete one of several associated with deleting a table row and all its
+associated index entries. Exactly one of those deletes is the "primary"
+delete. The others are all on OPFLAG_FORDELETE cursors or else are
+marked with the AUXDELETE flag.</p>
+
+<p>If the OPFLAG_NCHANGE flag of P2 (NB: P2 not P5) is set, then the row
+change count is incremented (otherwise not).</p>
+
+<p>P1 must not be pseudo-table. It has to be a real table with
+multiple rows.</p>
+
+<p>If P4 is not NULL then it points to a Table object. In this case either
+the update or pre-update hook, or both, may be invoked. The P1 cursor must
+have been positioned using <a href="opcode.html#NotFound">NotFound</a> prior to invoking this opcode in
+this case. Specifically, if one is configured, the pre-update hook is
+invoked if P4 is not NULL. The update-hook is invoked if one is configured,
+P4 is not NULL, and the OPFLAG_NCHANGE flag is set in P2.</p>
+
+<p>If the OPFLAG_ISUPDATE flag is set in P2, then P3 contains the address
+of the memory cell that contains the value that the rowid of the row will
+be set to by the update.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Destroy"></a>Destroy
+<td>Delete an entire database table or index whose root page in the database
+file is given by P1.</p>
+
+<p>The table being destroyed is in the main database file if P3==0. If
+P3==1 then the table to be clear is in the auxiliary database file
+that is used to store tables create using CREATE TEMPORARY TABLE.</p>
+
+<p>If AUTOVACUUM is enabled then it is possible that another root page
+might be moved into the newly deleted root page in order to keep all
+root pages contiguous at the beginning of the database. The former
+value of the root page that moved - its value before the move occurred -
+is stored in register P2. If no page movement was required (because the
+table being dropped was already the last one in the database) then a
+zero is stored in register P2. If AUTOVACUUM is disabled then a zero
+is stored in register P2.</p>
+
+<p>This opcode throws an error if there are any active reader VMs when
+it is invoked. This is done to avoid the difficulty associated with
+updating existing cursors when a root page is moved in an AUTOVACUUM
+database. This error is thrown even if the database is not an AUTOVACUUM
+db in order to avoid introducing an incompatibility between autovacuum
+and non-autovacuum modes.</p>
+
+<p>See also: <a href="opcode.html#Clear">Clear</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="Divide"></a>Divide
+<td>Divide the value in register P1 by the value in register P2
+and store the result in register P3 (P3=P2/P1). If the value in
+register P1 is zero, then the result is NULL. If either input is
+NULL, the result is NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="DropIndex"></a>DropIndex
+<td>Remove the internal (in-memory) data structures that describe
+the index named P4 in database P1. This is called after an index
+is dropped from disk (using the <a href="opcode.html#Destroy">Destroy</a> opcode)
+in order to keep the internal representation of the
+schema consistent with what is on disk.</td></tr>
+<tr><td valign="top" align="center">
+<a name="DropTable"></a>DropTable
+<td>Remove the internal (in-memory) data structures that describe
+the table named P4 in database P1. This is called after a table
+is dropped from disk (using the <a href="opcode.html#Destroy">Destroy</a> opcode) in order to keep
+the internal representation of the
+schema consistent with what is on disk.</td></tr>
+<tr><td valign="top" align="center">
+<a name="DropTrigger"></a>DropTrigger
+<td>Remove the internal (in-memory) data structures that describe
+the trigger named P4 in database P1. This is called after a trigger
+is dropped from disk (using the <a href="opcode.html#Destroy">Destroy</a> opcode) in order to keep
+the internal representation of the
+schema consistent with what is on disk.</td></tr>
+<tr><td valign="top" align="center">
+<a name="ElseEq"></a>ElseEq
+<td>This opcode must follow an <a href="opcode.html#Lt">Lt</a> or <a href="opcode.html#Gt">Gt</a> comparison operator. There
+can be zero or more OP_ReleaseReg opcodes intervening, but no other
+opcodes are allowed to occur between this instruction and the previous
+<a href="opcode.html#Lt">Lt</a> or <a href="opcode.html#Gt">Gt</a>.</p>
+
+<p>If result of an <a href="opcode.html#Eq">Eq</a> comparison on the same two operands as the
+prior <a href="opcode.html#Lt">Lt</a> or <a href="opcode.html#Gt">Gt</a> would have been true, then jump to P2.
+If the result of an <a href="opcode.html#Eq">Eq</a> comparison on the two previous
+operands would have been false or NULL, then fall through.</td></tr>
+<tr><td valign="top" align="center">
+<a name="EndCoroutine"></a>EndCoroutine
+<td>The instruction at the address in register P1 is a <a href="opcode.html#Yield">Yield</a>.
+<a href="opcode.html#Jump">Jump</a> to the P2 parameter of that <a href="opcode.html#Yield">Yield</a>.
+After the jump, register P1 becomes undefined.</p>
+
+<p>See also: <a href="opcode.html#InitCoroutine">InitCoroutine</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="Eq"></a>Eq
+<td>Compare the values in register P1 and P3. If reg(P3)==reg(P1) then
+jump to address P2.</p>
+
+<p>The SQLITE_AFF_MASK portion of P5 must be an affinity character -
+SQLITE_AFF_TEXT, SQLITE_AFF_INTEGER, and so forth. An attempt is made
+to coerce both inputs according to this affinity before the
+comparison is made. If the SQLITE_AFF_MASK is 0x00, then numeric
+affinity is used. Note that the affinity conversions are stored
+back into the input registers P1 and P3. So this opcode can cause
+persistent changes to registers P1 and P3.</p>
+
+<p>Once any conversions have taken place, and neither value is NULL,
+the values are compared. If both values are blobs then memcmp() is
+used to determine the results of the comparison. If both values
+are text, then the appropriate collating function specified in
+P4 is used to do the comparison. If P4 is not specified then
+memcmp() is used to compare text string. If both values are
+numeric, then a numeric comparison is used. If the two values
+are of different types, then numbers are considered less than
+strings and strings are considered less than blobs.</p>
+
+<p>If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
+true or false and is never NULL. If both operands are NULL then the result
+of comparison is true. If either operand is NULL then the result is false.
+If neither operand is NULL the result is the same as it would be if
+the SQLITE_NULLEQ flag were omitted from P5.</p>
+
+<p>This opcode saves the result of comparison for use by the new
+<a href="opcode.html#Jump">Jump</a> opcode.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Expire"></a>Expire
+<td>Cause precompiled statements to expire. When an expired statement
+is executed using sqlite3_step() it will either automatically
+reprepare itself (if it was originally created using sqlite3_prepare_v2())
+or it will fail with SQLITE_SCHEMA.</p>
+
+<p>If P1 is 0, then all SQL statements become expired. If P1 is non-zero,
+then only the currently executing statement is expired.</p>
+
+<p>If P2 is 0, then SQL statements are expired immediately. If P2 is 1,
+then running SQL statements are allowed to continue to run to completion.
+The P2==1 case occurs when a CREATE INDEX or similar schema change happens
+that might help the statement run faster but which does not affect the
+correctness of operation.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Filter"></a>Filter
+<td>Compute a hash on the key contained in the P4 registers starting
+with r&#91;P3&#93;. Check to see if that hash is found in the
+bloom filter hosted by register P1. If it is not present then
+maybe jump to P2. Otherwise fall through.</p>
+
+<p>False negatives are harmless. It is always safe to fall through,
+even if the value is in the bloom filter. A false negative causes
+more CPU cycles to be used, but it should still yield the correct
+answer. However, an incorrect answer may well arise from a
+false positive - if the jump is taken when it should fall through.</td></tr>
+<tr><td valign="top" align="center">
+<a name="FilterAdd"></a>FilterAdd
+<td>Compute a hash on the P4 registers starting with r&#91;P3&#93; and
+add that hash to the bloom filter contained in r&#91;P1&#93;.</td></tr>
+<tr><td valign="top" align="center">
+<a name="FinishSeek"></a>FinishSeek
+<td>If cursor P1 was previously moved via <a href="opcode.html#DeferredSeek">DeferredSeek</a>, complete that
+seek operation now, without further delay. If the cursor seek has
+already occurred, this instruction is a no-op.</td></tr>
+<tr><td valign="top" align="center">
+<a name="FkCheck"></a>FkCheck
+<td>Halt with an SQLITE_CONSTRAINT error if there are any unresolved
+foreign key constraint violations. If there are no foreign key
+constraint violations, this is a no-op.</p>
+
+<p>FK constraint violations are also checked when the prepared statement
+exits. This opcode is used to raise foreign key constraint errors prior
+to returning results such as a row change count or the result of a
+RETURNING clause.</td></tr>
+<tr><td valign="top" align="center">
+<a name="FkCounter"></a>FkCounter
+<td>Increment a "constraint counter" by P2 (P2 may be negative or positive).
+If P1 is non-zero, the database constraint counter is incremented
+(deferred foreign key constraints). Otherwise, if P1 is zero, the
+statement counter is incremented (immediate foreign key constraints).</td></tr>
+<tr><td valign="top" align="center">
+<a name="FkIfZero"></a>FkIfZero
+<td>This opcode tests if a foreign key constraint-counter is currently zero.
+If so, jump to instruction P2. Otherwise, fall through to the next
+instruction.</p>
+
+<p>If P1 is non-zero, then the jump is taken if the database constraint-counter
+is zero (the one that counts deferred constraint violations). If P1 is
+zero, the jump is taken if the statement constraint-counter is zero
+(immediate foreign key constraint violations).</td></tr>
+<tr><td valign="top" align="center">
+<a name="Found"></a>Found
+<td>If P4==0 then register P3 holds a blob constructed by <a href="opcode.html#MakeRecord">MakeRecord</a>. If
+P4&gt;0 then register P3 is the first of P4 registers that form an unpacked
+record.</p>
+
+<p>Cursor P1 is on an index btree. If the record identified by P3 and P4
+is a prefix of any entry in P1 then a jump is made to P2 and
+P1 is left pointing at the matching entry.</p>
+
+<p>This operation leaves the cursor in a state where it can be
+advanced in the forward direction. The <a href="opcode.html#Next">Next</a> instruction will work,
+but not the <a href="opcode.html#Prev">Prev</a> instruction.</p>
+
+<p>See also: <a href="opcode.html#NotFound">NotFound</a>, <a href="opcode.html#NoConflict">NoConflict</a>, <a href="opcode.html#NotExists">NotExists</a>. SeekGe</td></tr>
+<tr><td valign="top" align="center">
+<a name="Function"></a>Function
+<td>Invoke a user function (P4 is a pointer to an sqlite3_context object that
+contains a pointer to the function to be run) with arguments taken
+from register P2 and successors. The number of arguments is in
+the sqlite3_context object that P4 points to.
+The result of the function is stored
+in register P3. Register P3 must not be one of the function inputs.</p>
+
+<p>P1 is a 32-bit bitmask indicating whether or not each argument to the
+function was determined to be constant at compile time. If the first
+argument was constant then bit 0 of P1 is set. This is used to determine
+whether meta data associated with a user function argument using the
+sqlite3_set_auxdata() API may be safely retained until the next
+invocation of this opcode.</p>
+
+<p>See also: <a href="opcode.html#AggStep">AggStep</a>, <a href="opcode.html#AggFinal">AggFinal</a>, <a href="opcode.html#PureFunc">PureFunc</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="Ge"></a>Ge
+<td>This works just like the Lt opcode except that the jump is taken if
+the content of register P3 is greater than or equal to the content of
+register P1. See the Lt opcode for additional information.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Gosub"></a>Gosub
+<td>Write the current address onto register P1
+and then jump to address P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Goto"></a>Goto
+<td>An unconditional jump to address P2.
+The next instruction executed will be
+the one at index P2 from the beginning of
+the program.</p>
+
+<p>The P1 parameter is not actually used by this opcode. However, it
+is sometimes set to 1 instead of 0 as a hint to the command-line shell
+that this <a href="opcode.html#Goto">Goto</a> is the bottom of a loop and that the lines from P2 down
+to the current line should be indented for EXPLAIN output.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Gt"></a>Gt
+<td>This works just like the Lt opcode except that the jump is taken if
+the content of register P3 is greater than the content of
+register P1. See the Lt opcode for additional information.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Halt"></a>Halt
+<td>Exit immediately. All open cursors, etc are closed
+automatically.</p>
+
+<p>P1 is the result code returned by sqlite3_exec(), sqlite3_reset(),
+or sqlite3_finalize(). For a normal halt, this should be SQLITE_OK (0).
+For errors, it can be some other value. If P1!=0 then P2 will determine
+whether or not to rollback the current transaction. Do not rollback
+if P2==OE_Fail. Do the rollback if P2==OE_Rollback. If P2==OE_Abort,
+then back out all changes that have occurred during this execution of the
+VDBE, but do not rollback the transaction.</p>
+
+<p>If P4 is not null then it is an error message string.</p>
+
+<p>P5 is a value between 0 and 4, inclusive, that modifies the P4 string.</p>
+
+<p>0: (no change)
+1: NOT NULL contraint failed: P4
+2: UNIQUE constraint failed: P4
+3: CHECK constraint failed: P4
+4: FOREIGN KEY constraint failed: P4</p>
+
+<p>If P5 is not zero and P4 is NULL, then everything after the ":" is
+omitted.</p>
+
+<p>There is an implied "<a href="opcode.html#Halt">Halt</a> 0 0 0" instruction inserted at the very end of
+every program. So a jump past the last instruction of the program
+is the same as executing <a href="opcode.html#Halt">Halt</a>.</td></tr>
+<tr><td valign="top" align="center">
+<a name="HaltIfNull"></a>HaltIfNull
+<td>Check the value in register P3. If it is NULL then <a href="opcode.html#Halt">Halt</a> using
+parameter P1, P2, and P4 as if this were a <a href="opcode.html#Halt">Halt</a> instruction. If the
+value in register P3 is not NULL, then this routine is a no-op.
+The P5 parameter should be 1.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IdxDelete"></a>IdxDelete
+<td>The content of P3 registers starting at register P2 form
+an unpacked index key. This opcode removes that entry from the
+index opened by cursor P1.</p>
+
+<p>If P5 is not zero, then raise an SQLITE_CORRUPT_INDEX error
+if no matching index entry is found. This happens when running
+an UPDATE or DELETE statement and the index entry to be updated
+or deleted is not found. For some uses of <a href="opcode.html#IdxDelete">IdxDelete</a>
+(example: the EXCEPT operator) it does not matter that no matching
+entry is found. For those cases, P5 is zero. Also, do not raise
+this (self-correcting and non-critical) error if in writable_schema mode.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IdxGE"></a>IdxGE
+<td>The P4 register values beginning with P3 form an unpacked index
+key that omits the PRIMARY KEY. <a href="opcode.html#Compare">Compare</a> this key value against the index
+that P1 is currently pointing to, ignoring the PRIMARY KEY or ROWID
+fields at the end.</p>
+
+<p>If the P1 index entry is greater than or equal to the key value
+then jump to P2. Otherwise fall through to the next instruction.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IdxGT"></a>IdxGT
+<td>The P4 register values beginning with P3 form an unpacked index
+key that omits the PRIMARY KEY. <a href="opcode.html#Compare">Compare</a> this key value against the index
+that P1 is currently pointing to, ignoring the PRIMARY KEY or ROWID
+fields at the end.</p>
+
+<p>If the P1 index entry is greater than the key value
+then jump to P2. Otherwise fall through to the next instruction.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IdxInsert"></a>IdxInsert
+<td>Register P2 holds an SQL index key made using the
+<a href="opcode.html#MakeRecord">MakeRecord</a> instructions. This opcode writes that key
+into the index P1. Data for the entry is nil.</p>
+
+<p>If P4 is not zero, then it is the number of values in the unpacked
+key of reg(P2). In that case, P3 is the index of the first register
+for the unpacked key. The availability of the unpacked key can sometimes
+be an optimization.</p>
+
+<p>If P5 has the OPFLAG_APPEND bit set, that is a hint to the b-tree layer
+that this insert is likely to be an append.</p>
+
+<p>If P5 has the OPFLAG_NCHANGE bit set, then the change counter is
+incremented by this instruction. If the OPFLAG_NCHANGE bit is clear,
+then the change counter is unchanged.</p>
+
+<p>If the OPFLAG_USESEEKRESULT flag of P5 is set, the implementation might
+run faster by avoiding an unnecessary seek on cursor P1. However,
+the OPFLAG_USESEEKRESULT flag must only be set if there have been no prior
+seeks on the cursor or if the most recent seek used a key equivalent
+to P2.</p>
+
+<p>This instruction only works for indices. The equivalent instruction
+for tables is <a href="opcode.html#Insert">Insert</a>.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IdxLE"></a>IdxLE
+<td>The P4 register values beginning with P3 form an unpacked index
+key that omits the PRIMARY KEY or ROWID. <a href="opcode.html#Compare">Compare</a> this key value against
+the index that P1 is currently pointing to, ignoring the PRIMARY KEY or
+ROWID on the P1 index.</p>
+
+<p>If the P1 index entry is less than or equal to the key value then jump
+to P2. Otherwise fall through to the next instruction.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IdxLT"></a>IdxLT
+<td>The P4 register values beginning with P3 form an unpacked index
+key that omits the PRIMARY KEY or ROWID. <a href="opcode.html#Compare">Compare</a> this key value against
+the index that P1 is currently pointing to, ignoring the PRIMARY KEY or
+ROWID on the P1 index.</p>
+
+<p>If the P1 index entry is less than the key value then jump to P2.
+Otherwise fall through to the next instruction.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IdxRowid"></a>IdxRowid
+<td>Write into register P2 an integer which is the last entry in the record at
+the end of the index key pointed to by cursor P1. This integer should be
+the rowid of the table entry to which this index entry points.</p>
+
+<p>See also: <a href="opcode.html#Rowid">Rowid</a>, <a href="opcode.html#MakeRecord">MakeRecord</a>.</td></tr>
+<tr><td valign="top" align="center">
+<a name="If"></a>If
+<td>Jump to P2 if the value in register P1 is true. The value
+is considered true if it is numeric and non-zero. If the value
+in P1 is NULL then take the jump if and only if P3 is non-zero.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IfNoHope"></a>IfNoHope
+<td>Register P3 is the first of P4 registers that form an unpacked
+record. Cursor P1 is an index btree. P2 is a jump destination.
+In other words, the operands to this opcode are the same as the
+operands to <a href="opcode.html#NotFound">NotFound</a> and <a href="opcode.html#IdxGT">IdxGT</a>.</p>
+
+<p>This opcode is an optimization attempt only. If this opcode always
+falls through, the correct answer is still obtained, but extra works
+is performed.</p>
+
+<p>A value of N in the seekHit flag of cursor P1 means that there exists
+a key P3:N that will match some record in the index. We want to know
+if it is possible for a record P3:P4 to match some record in the
+index. If it is not possible, we can skips some work. So if seekHit
+is less than P4, attempt to find out if a match is possible by running
+<a href="opcode.html#NotFound">NotFound</a>.</p>
+
+<p>This opcode is used in IN clause processing for a multi-column key.
+If an IN clause is attached to an element of the key other than the
+left-most element, and if there are no matches on the most recent
+seek over the whole key, then it might be that one of the key element
+to the left is prohibiting a match, and hence there is "no hope" of
+any match regardless of how many IN clause elements are checked.
+In such a case, we abandon the IN clause search early, using this
+opcode. The opcode name comes from the fact that the
+jump is taken if there is "no hope" of achieving a match.</p>
+
+<p>See also: <a href="opcode.html#NotFound">NotFound</a>, <a href="opcode.html#SeekHit">SeekHit</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="IfNot"></a>IfNot
+<td>Jump to P2 if the value in register P1 is False. The value
+is considered false if it has a numeric value of zero. If the value
+in P1 is NULL then take the jump if and only if P3 is non-zero.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IfNotOpen"></a>IfNotOpen
+<td>If cursor P1 is not open or if P1 is set to a NULL row using the
+<a href="opcode.html#NullRow">NullRow</a> opcode, then jump to instruction P2. Otherwise, fall through.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IfNotZero"></a>IfNotZero
+<td>Register P1 must contain an integer. If the content of register P1 is
+initially greater than zero, then decrement the value in register P1.
+If it is non-zero (negative or positive) and then also jump to P2.
+If register P1 is initially zero, leave it unchanged and fall through.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IfNullRow"></a>IfNullRow
+<td>Check the cursor P1 to see if it is currently pointing at a NULL row.
+If it is, then set register P3 to NULL and jump immediately to P2.
+If P1 is not on a NULL row, then fall through without making any
+changes.</p>
+
+<p>If P1 is not an open cursor, then this opcode is a no-op.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IfPos"></a>IfPos
+<td>Register P1 must contain an integer.
+If the value of register P1 is 1 or greater, subtract P3 from the
+value in P1 and jump to P2.</p>
+
+<p>If the initial value of register P1 is less than 1, then the
+value is unchanged and control passes through to the next instruction.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IfSmaller"></a>IfSmaller
+<td>Estimate the number of rows in the table P1. <a href="opcode.html#Jump">Jump</a> to P2 if that
+estimate is less than approximately 2**(0.1*P3).</td></tr>
+<tr><td valign="top" align="center">
+<a name="IncrVacuum"></a>IncrVacuum
+<td>Perform a single step of the incremental vacuum procedure on
+the P1 database. If the vacuum has finished, jump to instruction
+P2. Otherwise, fall through to the next instruction.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Init"></a>Init
+<td>Programs contain a single instance of this opcode as the very first
+opcode.</p>
+
+<p>If tracing is enabled (by the sqlite3_trace()) interface, then
+the UTF-8 string contained in P4 is emitted on the trace callback.
+Or if P4 is blank, use the string returned by sqlite3_sql().</p>
+
+<p>If P2 is not zero, jump to instruction P2.</p>
+
+<p>Increment the value of P1 so that <a href="opcode.html#Once">Once</a> opcodes will jump the
+first time they are evaluated for this run.</p>
+
+<p>If P3 is not zero, then it is an address to jump to if an SQLITE_CORRUPT
+error is encountered.</td></tr>
+<tr><td valign="top" align="center">
+<a name="InitCoroutine"></a>InitCoroutine
+<td>Set up register P1 so that it will <a href="opcode.html#Yield">Yield</a> to the coroutine
+located at address P3.</p>
+
+<p>If P2!=0 then the coroutine implementation immediately follows
+this opcode. So jump over the coroutine implementation to
+address P2.</p>
+
+<p>See also: <a href="opcode.html#EndCoroutine">EndCoroutine</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="Insert"></a>Insert
+<td>Write an entry into the table of cursor P1. A new entry is
+created if it doesn't already exist or the data for an existing
+entry is overwritten. The data is the value MEM_Blob stored in register
+number P2. The key is stored in register P3. The key must
+be a MEM_Int.</p>
+
+<p>If the OPFLAG_NCHANGE flag of P5 is set, then the row change count is
+incremented (otherwise not). If the OPFLAG_LASTROWID flag of P5 is set,
+then rowid is stored for subsequent return by the
+sqlite3_last_insert_rowid() function (otherwise it is unmodified).</p>
+
+<p>If the OPFLAG_USESEEKRESULT flag of P5 is set, the implementation might
+run faster by avoiding an unnecessary seek on cursor P1. However,
+the OPFLAG_USESEEKRESULT flag must only be set if there have been no prior
+seeks on the cursor or if the most recent seek used a key equal to P3.</p>
+
+<p>If the OPFLAG_ISUPDATE flag is set, then this opcode is part of an
+UPDATE operation. Otherwise (if the flag is clear) then this opcode
+is part of an INSERT operation. The difference is only important to
+the update hook.</p>
+
+<p>Parameter P4 may point to a Table structure, or may be NULL. If it is
+not NULL, then the update-hook (sqlite3.xUpdateCallback) is invoked
+following a successful insert.</p>
+
+<p>(WARNING/TODO: If P1 is a pseudo-cursor and P2 is dynamically
+allocated, then ownership of P2 is transferred to the pseudo-cursor
+and register P2 becomes ephemeral. If the cursor is changed, the
+value of register P2 will then change. Make sure this does not
+cause any problems.)</p>
+
+<p>This instruction only works on tables. The equivalent instruction
+for indices is <a href="opcode.html#IdxInsert">IdxInsert</a>.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Int64"></a>Int64
+<td>P4 is a pointer to a 64-bit integer value.
+Write that value into register P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IntCopy"></a>IntCopy
+<td>Transfer the integer value held in register P1 into register P2.</p>
+
+<p>This is an optimized version of <a href="opcode.html#SCopy">SCopy</a> that works only for integer
+values.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Integer"></a>Integer
+<td>The 32-bit integer value P1 is written into register P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IntegrityCk"></a>IntegrityCk
+<td>Do an analysis of the currently open database. Store in
+register P1 the text of an error message describing any problems.
+If no problems are found, store a NULL in register P1.</p>
+
+<p>The register P3 contains one less than the maximum number of allowed errors.
+At most reg(P3) errors will be reported.
+In other words, the analysis stops as soon as reg(P1) errors are
+seen. Reg(P1) is updated with the number of errors remaining.</p>
+
+<p>The root page numbers of all tables in the database are integers
+stored in P4_INTARRAY argument.</p>
+
+<p>If P5 is not zero, the check is done on the auxiliary database
+file, not the main database file.</p>
+
+<p>This opcode is used to implement the integrity_check pragma.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IsNull"></a>IsNull
+<td>Jump to P2 if the value in register P1 is NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="IsTrue"></a>IsTrue
+<td>This opcode implements the IS TRUE, IS FALSE, IS NOT TRUE, and
+IS NOT FALSE operators.</p>
+
+<p>Interpret the value in register P1 as a boolean value. Store that
+boolean (a 0 or 1) in register P2. Or if the value in register P1 is
+NULL, then the P3 is stored in register P2. Invert the answer if P4
+is 1.</p>
+
+<p>The logic is summarized like this:</p>
+
+<p><ul>
+<li> If P3==0 and P4==0 then r&#91;P2&#93; := r&#91;P1&#93; IS TRUE
+<li> If P3==1 and P4==1 then r&#91;P2&#93; := r&#91;P1&#93; IS FALSE
+<li> If P3==0 and P4==1 then r&#91;P2&#93; := r&#91;P1&#93; IS NOT TRUE
+<li> If P3==1 and P4==0 then r&#91;P2&#93; := r&#91;P1&#93; IS NOT FALSE
+</ul></td></tr>
+<tr><td valign="top" align="center">
+<a name="IsType"></a>IsType
+<td>Jump to P2 if the type of a column in a btree is one of the types specified
+by the P5 bitmask.</p>
+
+<p>P1 is normally a cursor on a btree for which the row decode cache is
+valid through at least column P3. In other words, there should have been
+a prior <a href="opcode.html#Column">Column</a> for column P3 or greater. If the cursor is not valid,
+then this opcode might give spurious results.
+The the btree row has fewer than P3 columns, then use P4 as the
+datatype.</p>
+
+<p>If P1 is -1, then P3 is a register number and the datatype is taken
+from the value in that register.</p>
+
+<p>P5 is a bitmask of data types. SQLITE_INTEGER is the least significant
+(0x01) bit. SQLITE_FLOAT is the 0x02 bit. SQLITE_TEXT is 0x04.
+SQLITE_BLOB is 0x08. SQLITE_NULL is 0x10.</p>
+
+<p>Take the jump to address P2 if and only if the datatype of the
+value determined by P1 and P3 corresponds to one of the bits in the
+P5 bitmask.</p></td></tr>
+<tr><td valign="top" align="center">
+<a name="JournalMode"></a>JournalMode
+<td>Change the journal mode of database P1 to P3. P3 must be one of the
+PAGER_JOURNALMODE_XXX values. If changing between the various rollback
+modes (delete, truncate, persist, off and memory), this is a simple
+operation. No IO is required.</p>
+
+<p>If changing into or out of WAL mode the procedure is more complicated.</p>
+
+<p>Write a string containing the final journal-mode to register P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Jump"></a>Jump
+<td>Jump to the instruction at address P1, P2, or P3 depending on whether
+in the most recent <a href="opcode.html#Compare">Compare</a> instruction the P1 vector was less than
+equal to, or greater than the P2 vector, respectively.</p>
+
+<p>This opcode must immediately follow an <a href="opcode.html#Compare">Compare</a> opcode.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Last"></a>Last
+<td>The next use of the <a href="opcode.html#Rowid">Rowid</a> or <a href="opcode.html#Column">Column</a> or <a href="opcode.html#Prev">Prev</a> instruction for P1
+will refer to the last entry in the database table or index.
+If the table or index is empty and P2&gt;0, then jump immediately to P2.
+If P2 is 0 or if the table or index is not empty, fall through
+to the following instruction.</p>
+
+<p>This opcode leaves the cursor configured to move in reverse order,
+from the end toward the beginning. In other words, the cursor is
+configured to use <a href="opcode.html#Prev">Prev</a>, not <a href="opcode.html#Next">Next</a>.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Le"></a>Le
+<td>This works just like the Lt opcode except that the jump is taken if
+the content of register P3 is less than or equal to the content of
+register P1. See the Lt opcode for additional information.</td></tr>
+<tr><td valign="top" align="center">
+<a name="LoadAnalysis"></a>LoadAnalysis
+<td>Read the sqlite_stat1 table for database P1 and load the content
+of that table into the internal index hash table. This will cause
+the analysis to be used when preparing all subsequent queries.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Lt"></a>Lt
+<td>Compare the values in register P1 and P3. If reg(P3)&lt;reg(P1) then
+jump to address P2.</p>
+
+<p>If the SQLITE_JUMPIFNULL bit of P5 is set and either reg(P1) or
+reg(P3) is NULL then the take the jump. If the SQLITE_JUMPIFNULL
+bit is clear then fall through if either operand is NULL.</p>
+
+<p>The SQLITE_AFF_MASK portion of P5 must be an affinity character -
+SQLITE_AFF_TEXT, SQLITE_AFF_INTEGER, and so forth. An attempt is made
+to coerce both inputs according to this affinity before the
+comparison is made. If the SQLITE_AFF_MASK is 0x00, then numeric
+affinity is used. Note that the affinity conversions are stored
+back into the input registers P1 and P3. So this opcode can cause
+persistent changes to registers P1 and P3.</p>
+
+<p>Once any conversions have taken place, and neither value is NULL,
+the values are compared. If both values are blobs then memcmp() is
+used to determine the results of the comparison. If both values
+are text, then the appropriate collating function specified in
+P4 is used to do the comparison. If P4 is not specified then
+memcmp() is used to compare text string. If both values are
+numeric, then a numeric comparison is used. If the two values
+are of different types, then numbers are considered less than
+strings and strings are considered less than blobs.</p>
+
+<p>This opcode saves the result of comparison for use by the new
+<a href="opcode.html#Jump">Jump</a> opcode.</td></tr>
+<tr><td valign="top" align="center">
+<a name="MakeRecord"></a>MakeRecord
+<td>Convert P2 registers beginning with P1 into the <a href="fileformat2.html#record_format">record format</a>
+use as a data record in a database table or as a key
+in an index. The <a href="opcode.html#Column">Column</a> opcode can decode the record later.</p>
+
+<p>P4 may be a string that is P2 characters long. The N-th character of the
+string indicates the column affinity that should be used for the N-th
+field of the index key.</p>
+
+<p>The mapping from character to affinity is given by the SQLITE_AFF_
+macros defined in sqliteInt.h.</p>
+
+<p>If P4 is NULL then all index fields have the affinity BLOB.</p>
+
+<p>The meaning of P5 depends on whether or not the SQLITE_ENABLE_NULL_TRIM
+compile-time option is enabled:</p>
+
+<p>* If SQLITE_ENABLE_NULL_TRIM is enabled, then the P5 is the index
+of the right-most table that can be null-trimmed.</p>
+
+<p>* If SQLITE_ENABLE_NULL_TRIM is omitted, then P5 has the value
+OPFLAG_NOCHNG_MAGIC if the <a href="opcode.html#MakeRecord">MakeRecord</a> opcode is allowed to
+accept no-change records with serial_type 10. This value is
+only used inside an assert() and does not affect the end result.</td></tr>
+<tr><td valign="top" align="center">
+<a name="MaxPgcnt"></a>MaxPgcnt
+<td>Try to set the maximum page count for database P1 to the value in P3.
+Do not let the maximum page count fall below the current page count and
+do not change the maximum page count value if P3==0.</p>
+
+<p>Store the maximum page count after the change in register P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="MemMax"></a>MemMax
+<td>P1 is a register in the root frame of this VM (the root frame is
+different from the current frame if this instruction is being executed
+within a sub-program). Set the value of register P1 to the maximum of
+its current value and the value in register P2.</p>
+
+<p>This instruction throws an error if the memory cell is not initially
+an integer.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Move"></a>Move
+<td>Move the P3 values in register P1..P1+P3-1 over into
+registers P2..P2+P3-1. Registers P1..P1+P3-1 are
+left holding a NULL. It is an error for register ranges
+P1..P1+P3-1 and P2..P2+P3-1 to overlap. It is an error
+for P3 to be less than 1.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Multiply"></a>Multiply
+<td>Multiply the value in register P1 by the value in register P2
+and store the result in register P3.
+If either input is NULL, the result is NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="MustBeInt"></a>MustBeInt
+<td>Force the value in register P1 to be an integer. If the value
+in P1 is not an integer and cannot be converted into an integer
+without data loss, then jump immediately to P2, or if P2==0
+raise an SQLITE_MISMATCH exception.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Ne"></a>Ne
+<td>This works just like the Eq opcode except that the jump is taken if
+the operands in registers P1 and P3 are not equal. See the Eq opcode for
+additional information.</td></tr>
+<tr><td valign="top" align="center">
+<a name="NewRowid"></a>NewRowid
+<td>Get a new integer record number (a.k.a "rowid") used as the key to a table.
+The record number is not previously used as a key in the database
+table that cursor P1 points to. The new record number is written
+written to register P2.</p>
+
+<p>If P3&gt;0 then P3 is a register in the root frame of this VDBE that holds
+the largest previously generated record number. No new record numbers are
+allowed to be less than this value. When this value reaches its maximum,
+an SQLITE_FULL error is generated. The P3 register is updated with the '
+generated record number. This P3 mechanism is used to help implement the
+AUTOINCREMENT feature.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Next"></a>Next
+<td>Advance cursor P1 so that it points to the next key/data pair in its
+table or index. If there are no more key/value pairs then fall through
+to the following instruction. But if the cursor advance was successful,
+jump immediately to P2.</p>
+
+<p>The <a href="opcode.html#Next">Next</a> opcode is only valid following an <a href="opcode.html#SeekGT">SeekGT</a>, <a href="opcode.html#SeekGE">SeekGE</a>, or
+<a href="opcode.html#Rewind">Rewind</a> opcode used to position the cursor. <a href="opcode.html#Next">Next</a> is not allowed
+to follow <a href="opcode.html#SeekLT">SeekLT</a>, <a href="opcode.html#SeekLE">SeekLE</a>, or <a href="opcode.html#Last">Last</a>.</p>
+
+<p>The P1 cursor must be for a real table, not a pseudo-table. P1 must have
+been opened prior to this opcode or the program will segfault.</p>
+
+<p>The P3 value is a hint to the btree implementation. If P3==1, that
+means P1 is an SQL index and that this instruction could have been
+omitted if that index had been unique. P3 is usually 0. P3 is
+always either 0 or 1.</p>
+
+<p>If P5 is positive and the jump is taken, then event counter
+number P5-1 in the prepared statement is incremented.</p>
+
+<p>See also: <a href="opcode.html#Prev">Prev</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="NoConflict"></a>NoConflict
+<td>If P4==0 then register P3 holds a blob constructed by <a href="opcode.html#MakeRecord">MakeRecord</a>. If
+P4&gt;0 then register P3 is the first of P4 registers that form an unpacked
+record.</p>
+
+<p>Cursor P1 is on an index btree. If the record identified by P3 and P4
+contains any NULL value, jump immediately to P2. If all terms of the
+record are not-NULL then a check is done to determine if any row in the
+P1 index btree has a matching key prefix. If there are no matches, jump
+immediately to P2. If there is a match, fall through and leave the P1
+cursor pointing to the matching row.</p>
+
+<p>This opcode is similar to <a href="opcode.html#NotFound">NotFound</a> with the exceptions that the
+branch is always taken if any part of the search key input is NULL.</p>
+
+<p>This operation leaves the cursor in a state where it cannot be
+advanced in either direction. In other words, the <a href="opcode.html#Next">Next</a> and <a href="opcode.html#Prev">Prev</a>
+opcodes do not work after this operation.</p>
+
+<p>See also: <a href="opcode.html#NotFound">NotFound</a>, <a href="opcode.html#Found">Found</a>, <a href="opcode.html#NotExists">NotExists</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="Noop"></a>Noop
+<td>Do nothing. This instruction is often useful as a jump
+destination.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Not"></a>Not
+<td>Interpret the value in register P1 as a boolean value. Store the
+boolean complement in register P2. If the value in register P1 is
+NULL, then a NULL is stored in P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="NotExists"></a>NotExists
+<td>P1 is the index of a cursor open on an SQL table btree (with integer
+keys). P3 is an integer rowid. If P1 does not contain a record with
+rowid P3 then jump immediately to P2. Or, if P2 is 0, raise an
+SQLITE_CORRUPT error. If P1 does contain a record with rowid P3 then
+leave the cursor pointing at that record and fall through to the next
+instruction.</p>
+
+<p>The <a href="opcode.html#SeekRowid">SeekRowid</a> opcode performs the same operation but also allows the
+P3 register to contain a non-integer value, in which case the jump is
+always taken. This opcode requires that P3 always contain an integer.</p>
+
+<p>The <a href="opcode.html#NotFound">NotFound</a> opcode performs the same operation on index btrees
+(with arbitrary multi-value keys).</p>
+
+<p>This opcode leaves the cursor in a state where it cannot be advanced
+in either direction. In other words, the <a href="opcode.html#Next">Next</a> and <a href="opcode.html#Prev">Prev</a> opcodes will
+not work following this opcode.</p>
+
+<p>See also: <a href="opcode.html#Found">Found</a>, <a href="opcode.html#NotFound">NotFound</a>, <a href="opcode.html#NoConflict">NoConflict</a>, <a href="opcode.html#SeekRowid">SeekRowid</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="NotFound"></a>NotFound
+<td>If P4==0 then register P3 holds a blob constructed by <a href="opcode.html#MakeRecord">MakeRecord</a>. If
+P4&gt;0 then register P3 is the first of P4 registers that form an unpacked
+record.</p>
+
+<p>Cursor P1 is on an index btree. If the record identified by P3 and P4
+is not the prefix of any entry in P1 then a jump is made to P2. If P1
+does contain an entry whose prefix matches the P3/P4 record then control
+falls through to the next instruction and P1 is left pointing at the
+matching entry.</p>
+
+<p>This operation leaves the cursor in a state where it cannot be
+advanced in either direction. In other words, the <a href="opcode.html#Next">Next</a> and <a href="opcode.html#Prev">Prev</a>
+opcodes do not work after this operation.</p>
+
+<p>See also: <a href="opcode.html#Found">Found</a>, <a href="opcode.html#NotExists">NotExists</a>, <a href="opcode.html#NoConflict">NoConflict</a>, <a href="opcode.html#IfNoHope">IfNoHope</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="NotNull"></a>NotNull
+<td>Jump to P2 if the value in register P1 is not NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Null"></a>Null
+<td>Write a NULL into registers P2. If P3 greater than P2, then also write
+NULL into register P3 and every register in between P2 and P3. If P3
+is less than P2 (typically P3 is zero) then only register P2 is
+set to NULL.</p>
+
+<p>If the P1 value is non-zero, then also set the MEM_Cleared flag so that
+NULL values will not compare equal even if SQLITE_NULLEQ is set on
+<a href="opcode.html#Ne">Ne</a> or <a href="opcode.html#Eq">Eq</a>.</td></tr>
+<tr><td valign="top" align="center">
+<a name="NullRow"></a>NullRow
+<td>Move the cursor P1 to a null row. Any <a href="opcode.html#Column">Column</a> operations
+that occur while the cursor is on the null row will always
+write a NULL.</p>
+
+<p>If cursor P1 is not previously opened, open it now to a special
+pseudo-cursor that always returns NULL for every column.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Offset"></a>Offset
+<td>Store in register r&#91;P3&#93; the byte offset into the database file that is the
+start of the payload for the record at which that cursor P1 is currently
+pointing.</p>
+
+<p>P2 is the column number for the argument to the sqlite_offset() function.
+This opcode does not use P2 itself, but the P2 value is used by the
+code generator. The P1, P2, and P3 operands to this opcode are the
+same as for <a href="opcode.html#Column">Column</a>.</p>
+
+<p>This opcode is only available if SQLite is compiled with the
+-DSQLITE_ENABLE_OFFSET_SQL_FUNC option.</td></tr>
+<tr><td valign="top" align="center">
+<a name="OffsetLimit"></a>OffsetLimit
+<td>This opcode performs a commonly used computation associated with
+LIMIT and OFFSET processing. r&#91;P1&#93; holds the limit counter. r&#91;P3&#93;
+holds the offset counter. The opcode computes the combined value
+of the LIMIT and OFFSET and stores that value in r&#91;P2&#93;. The r&#91;P2&#93;
+value computed is the total number of rows that will need to be
+visited in order to complete the query.</p>
+
+<p>If r&#91;P3&#93; is zero or negative, that means there is no OFFSET
+and r&#91;P2&#93; is set to be the value of the LIMIT, r&#91;P1&#93;.</p>
+
+<p>if r&#91;P1&#93; is zero or negative, that means there is no LIMIT
+and r&#91;P2&#93; is set to -1.</p>
+
+<p>Otherwise, r&#91;P2&#93; is set to the sum of r&#91;P1&#93; and r&#91;P3&#93;.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Once"></a>Once
+<td>Fall through to the next instruction the first time this opcode is
+encountered on each invocation of the byte-code program. <a href="opcode.html#Jump">Jump</a> to P2
+on the second and all subsequent encounters during the same invocation.</p>
+
+<p>Top-level programs determine first invocation by comparing the P1
+operand against the P1 operand on the <a href="opcode.html#Init">Init</a> opcode at the beginning
+of the program. If the P1 values differ, then fall through and make
+the P1 of this opcode equal to the P1 of <a href="opcode.html#Init">Init</a>. If P1 values are
+the same then take the jump.</p>
+
+<p>For subprograms, there is a bitmask in the VdbeFrame that determines
+whether or not the jump should be taken. The bitmask is necessary
+because the self-altering code trick does not work for recursive
+triggers.</td></tr>
+<tr><td valign="top" align="center">
+<a name="OpenAutoindex"></a>OpenAutoindex
+<td>This opcode works the same as <a href="opcode.html#OpenEphemeral">OpenEphemeral</a>. It has a
+different name to distinguish its use. Tables created using
+by this opcode will be used for automatically created transient
+indices in joins.</td></tr>
+<tr><td valign="top" align="center">
+<a name="OpenDup"></a>OpenDup
+<td>Open a new cursor P1 that points to the same ephemeral table as
+cursor P2. The P2 cursor must have been opened by a prior <a href="opcode.html#OpenEphemeral">OpenEphemeral</a>
+opcode. Only ephemeral cursors may be duplicated.</p>
+
+<p>Duplicate ephemeral cursors are used for self-joins of materialized views.</td></tr>
+<tr><td valign="top" align="center">
+<a name="OpenEphemeral"></a>OpenEphemeral
+<td>Open a new cursor P1 to a transient table.
+The cursor is always opened read/write even if
+the main database is read-only. The ephemeral
+table is deleted automatically when the cursor is closed.</p>
+
+<p>If the cursor P1 is already opened on an ephemeral table, the table
+is cleared (all content is erased).</p>
+
+<p>P2 is the number of columns in the ephemeral table.
+The cursor points to a BTree table if P4==0 and to a BTree index
+if P4 is not 0. If P4 is not NULL, it points to a KeyInfo structure
+that defines the format of keys in the index.</p>
+
+<p>The P5 parameter can be a mask of the BTREE_* flags defined
+in btree.h. These flags control aspects of the operation of
+the btree. The BTREE_OMIT_JOURNAL and BTREE_SINGLE flags are
+added automatically.</p>
+
+<p>If P3 is positive, then reg&#91;P3&#93; is modified slightly so that it
+can be used as zero-length data for <a href="opcode.html#Insert">Insert</a>. This is an optimization
+that avoids an extra <a href="opcode.html#Blob">Blob</a> opcode to initialize that register.</td></tr>
+<tr><td valign="top" align="center">
+<a name="OpenPseudo"></a>OpenPseudo
+<td>Open a new cursor that points to a fake table that contains a single
+row of data. The content of that one row is the content of memory
+register P2. In other words, cursor P1 becomes an alias for the
+MEM_Blob content contained in register P2.</p>
+
+<p>A pseudo-table created by this opcode is used to hold a single
+row output from the sorter so that the row can be decomposed into
+individual columns using the <a href="opcode.html#Column">Column</a> opcode. The <a href="opcode.html#Column">Column</a> opcode
+is the only cursor opcode that works with a pseudo-table.</p>
+
+<p>P3 is the number of fields in the records that will be stored by
+the pseudo-table.</td></tr>
+<tr><td valign="top" align="center">
+<a name="OpenRead"></a>OpenRead
+<td>Open a read-only cursor for the database table whose root page is
+P2 in a database file. The database file is determined by P3.
+P3==0 means the main database, P3==1 means the database used for
+temporary tables, and P3&gt;1 means used the corresponding attached
+database. Give the new cursor an identifier of P1. The P1
+values need not be contiguous but all P1 values should be small integers.
+It is an error for P1 to be negative.</p>
+
+<p>Allowed P5 bits:
+<ul>
+<li> <b>0x02 OPFLAG_SEEKEQ</b>: This cursor will only be used for
+equality lookups (implemented as a pair of opcodes <a href="opcode.html#SeekGE">SeekGE</a>/<a href="opcode.html#IdxGT">IdxGT</a>
+of <a href="opcode.html#SeekLE">SeekLE</a>/<a href="opcode.html#IdxLT">IdxLT</a>)
+</ul></p>
+
+<p>The P4 value may be either an integer (P4_INT32) or a pointer to
+a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo
+object, then table being opened must be an <a href="fileformat2.html#btypes">index b-tree</a> where the
+KeyInfo object defines the content and collating
+sequence of that index b-tree. Otherwise, if P4 is an integer
+value, then the table being opened must be a <a href="fileformat2.html#btypes">table b-tree</a> with a
+number of columns no less than the value of P4.</p>
+
+<p>See also: <a href="opcode.html#OpenWrite">OpenWrite</a>, <a href="opcode.html#ReopenIdx">ReopenIdx</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="OpenWrite"></a>OpenWrite
+<td>Open a read/write cursor named P1 on the table or index whose root
+page is P2 (or whose root page is held in register P2 if the
+OPFLAG_P2ISREG bit is set in P5 - see below).</p>
+
+<p>The P4 value may be either an integer (P4_INT32) or a pointer to
+a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo
+object, then table being opened must be an <a href="fileformat2.html#btypes">index b-tree</a> where the
+KeyInfo object defines the content and collating
+sequence of that index b-tree. Otherwise, if P4 is an integer
+value, then the table being opened must be a <a href="fileformat2.html#btypes">table b-tree</a> with a
+number of columns no less than the value of P4.</p>
+
+<p>Allowed P5 bits:
+<ul>
+<li> <b>0x02 OPFLAG_SEEKEQ</b>: This cursor will only be used for
+equality lookups (implemented as a pair of opcodes <a href="opcode.html#SeekGE">SeekGE</a>/<a href="opcode.html#IdxGT">IdxGT</a>
+of <a href="opcode.html#SeekLE">SeekLE</a>/<a href="opcode.html#IdxLT">IdxLT</a>)
+<li> <b>0x08 OPFLAG_FORDELETE</b>: This cursor is used only to seek
+and subsequently delete entries in an index btree. This is a
+hint to the storage engine that the storage engine is allowed to
+ignore. The hint is not used by the official SQLite b*tree storage
+engine, but is used by COMDB2.
+<li> <b>0x10 OPFLAG_P2ISREG</b>: Use the content of register P2
+as the root page, not the value of P2 itself.
+</ul></p>
+
+<p>This instruction works like <a href="opcode.html#OpenRead">OpenRead</a> except that it opens the cursor
+in read/write mode.</p>
+
+<p>See also: <a href="opcode.html#OpenRead">OpenRead</a>, <a href="opcode.html#ReopenIdx">ReopenIdx</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="Or"></a>Or
+<td>Take the logical OR of the values in register P1 and P2 and
+store the answer in register P3.</p>
+
+<p>If either P1 or P2 is nonzero (true) then the result is 1 (true)
+even if the other input is NULL. A NULL and false or two NULLs
+give a NULL output.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Pagecount"></a>Pagecount
+<td>Write the current number of pages in database P1 to memory cell P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Param"></a>Param
+<td>This opcode is only ever present in sub-programs called via the
+<a href="opcode.html#Program">Program</a> instruction. <a href="opcode.html#Copy">Copy</a> a value currently stored in a memory
+cell of the calling (parent) frame to cell P2 in the current frames
+address space. This is used by trigger programs to access the new.*
+and old.* values.</p>
+
+<p>The address of the cell in the parent frame is determined by adding
+the value of the P1 argument to the value of the P1 argument to the
+calling <a href="opcode.html#Program">Program</a> instruction.</td></tr>
+<tr><td valign="top" align="center">
+<a name="ParseSchema"></a>ParseSchema
+<td>Read and parse all entries from the schema table of database P1
+that match the WHERE clause P4. If P4 is a NULL pointer, then the
+entire schema for P1 is reparsed.</p>
+
+<p>This opcode invokes the parser to create a new virtual machine,
+then runs the new virtual machine. It is thus a re-entrant opcode.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Permutation"></a>Permutation
+<td>Set the permutation used by the <a href="opcode.html#Compare">Compare</a> operator in the next
+instruction. The permutation is stored in the P4 operand.</p>
+
+<p>The permutation is only valid for the next opcode which must be
+an <a href="opcode.html#Compare">Compare</a> that has the OPFLAG_PERMUTE bit set in P5.</p>
+
+<p>The first integer in the P4 integer array is the length of the array
+and does not become part of the permutation.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Prev"></a>Prev
+<td>Back up cursor P1 so that it points to the previous key/data pair in its
+table or index. If there is no previous key/value pairs then fall through
+to the following instruction. But if the cursor backup was successful,
+jump immediately to P2.</p>
+
+<p>The <a href="opcode.html#Prev">Prev</a> opcode is only valid following an <a href="opcode.html#SeekLT">SeekLT</a>, <a href="opcode.html#SeekLE">SeekLE</a>, or
+<a href="opcode.html#Last">Last</a> opcode used to position the cursor. <a href="opcode.html#Prev">Prev</a> is not allowed
+to follow <a href="opcode.html#SeekGT">SeekGT</a>, <a href="opcode.html#SeekGE">SeekGE</a>, or <a href="opcode.html#Rewind">Rewind</a>.</p>
+
+<p>The P1 cursor must be for a real table, not a pseudo-table. If P1 is
+not open then the behavior is undefined.</p>
+
+<p>The P3 value is a hint to the btree implementation. If P3==1, that
+means P1 is an SQL index and that this instruction could have been
+omitted if that index had been unique. P3 is usually 0. P3 is
+always either 0 or 1.</p>
+
+<p>If P5 is positive and the jump is taken, then event counter
+number P5-1 in the prepared statement is incremented.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Program"></a>Program
+<td>Execute the trigger program passed as P4 (type P4_SUBPROGRAM).</p>
+
+<p>P1 contains the address of the memory cell that contains the first memory
+cell in an array of values used as arguments to the sub-program. P2
+contains the address to jump to if the sub-program throws an IGNORE
+exception using the RAISE() function. Register P3 contains the address
+of a memory cell in this (the parent) VM that is used to allocate the
+memory required by the sub-vdbe at runtime.</p>
+
+<p>P4 is a pointer to the VM containing the trigger program.</p>
+
+<p>If P5 is non-zero, then recursive program invocation is enabled.</td></tr>
+<tr><td valign="top" align="center">
+<a name="PureFunc"></a>PureFunc
+<td>Invoke a user function (P4 is a pointer to an sqlite3_context object that
+contains a pointer to the function to be run) with arguments taken
+from register P2 and successors. The number of arguments is in
+the sqlite3_context object that P4 points to.
+The result of the function is stored
+in register P3. Register P3 must not be one of the function inputs.</p>
+
+<p>P1 is a 32-bit bitmask indicating whether or not each argument to the
+function was determined to be constant at compile time. If the first
+argument was constant then bit 0 of P1 is set. This is used to determine
+whether meta data associated with a user function argument using the
+sqlite3_set_auxdata() API may be safely retained until the next
+invocation of this opcode.</p>
+
+<p>This opcode works exactly like <a href="opcode.html#Function">Function</a>. The only difference is in
+its name. This opcode is used in places where the function must be
+purely non-deterministic. Some built-in date/time functions can be
+either determinitic of non-deterministic, depending on their arguments.
+When those function are used in a non-deterministic way, they will check
+to see if they were called using <a href="opcode.html#PureFunc">PureFunc</a> instead of <a href="opcode.html#Function">Function</a>, and
+if they were, they throw an error.</p>
+
+<p>See also: <a href="opcode.html#AggStep">AggStep</a>, <a href="opcode.html#AggFinal">AggFinal</a>, <a href="opcode.html#Function">Function</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="ReadCookie"></a>ReadCookie
+<td>Read cookie number P3 from database P1 and write it into register P2.
+P3==1 is the schema version. P3==2 is the database format.
+P3==3 is the recommended pager cache size, and so forth. P1==0 is
+the main database file and P1==1 is the database file used to store
+temporary tables.</p>
+
+<p>There must be a read-lock on the database (either a transaction
+must be started or there must be an open cursor) before
+executing this instruction.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Real"></a>Real
+<td>P4 is a pointer to a 64-bit floating point value.
+Write that value into register P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="RealAffinity"></a>RealAffinity
+<td>If register P1 holds an integer convert it to a real value.</p>
+
+<p>This opcode is used when extracting information from a column that
+has REAL affinity. Such column values may still be stored as
+integers, for space efficiency, but after extraction we want them
+to have only a real value.</td></tr>
+<tr><td valign="top" align="center">
+<a name="ReleaseReg"></a>ReleaseReg
+<td>Release registers from service. Any content that was in the
+the registers is unreliable after this opcode completes.</p>
+
+<p>The registers released will be the P2 registers starting at P1,
+except if bit ii of P3 set, then do not release register P1+ii.
+In other words, P3 is a mask of registers to preserve.</p>
+
+<p>Releasing a register clears the Mem.pScopyFrom pointer. That means
+that if the content of the released register was set using <a href="opcode.html#SCopy">SCopy</a>,
+a change to the value of the source register for the <a href="opcode.html#SCopy">SCopy</a> will no longer
+generate an assertion fault in sqlite3VdbeMemAboutToChange().</p>
+
+<p>If P5 is set, then all released registers have their type set
+to MEM_Undefined so that any subsequent attempt to read the released
+register (before it is reinitialized) will generate an assertion fault.</p>
+
+<p>P5 ought to be set on every call to this opcode.
+However, there are places in the code generator will release registers
+before their are used, under the (valid) assumption that the registers
+will not be reallocated for some other purpose before they are used and
+hence are safe to release.</p>
+
+<p>This opcode is only available in testing and debugging builds. It is
+not generated for release builds. The purpose of this opcode is to help
+validate the generated bytecode. This opcode does not actually contribute
+to computing an answer.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Remainder"></a>Remainder
+<td>Compute the remainder after integer register P2 is divided by
+register P1 and store the result in register P3.
+If the value in register P1 is zero the result is NULL.
+If either operand is NULL, the result is NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="ReopenIdx"></a>ReopenIdx
+<td>The <a href="opcode.html#ReopenIdx">ReopenIdx</a> opcode works like <a href="opcode.html#OpenRead">OpenRead</a> except that it first
+checks to see if the cursor on P1 is already open on the same
+b-tree and if it is this opcode becomes a no-op. In other words,
+if the cursor is already open, do not reopen it.</p>
+
+<p>The <a href="opcode.html#ReopenIdx">ReopenIdx</a> opcode may only be used with P5==0 or P5==OPFLAG_SEEKEQ
+and with P4 being a P4_KEYINFO object. Furthermore, the P3 value must
+be the same as every other <a href="opcode.html#ReopenIdx">ReopenIdx</a> or <a href="opcode.html#OpenRead">OpenRead</a> for the same cursor
+number.</p>
+
+<p>Allowed P5 bits:
+<ul>
+<li> <b>0x02 OPFLAG_SEEKEQ</b>: This cursor will only be used for
+equality lookups (implemented as a pair of opcodes <a href="opcode.html#SeekGE">SeekGE</a>/<a href="opcode.html#IdxGT">IdxGT</a>
+of <a href="opcode.html#SeekLE">SeekLE</a>/<a href="opcode.html#IdxLT">IdxLT</a>)
+</ul></p>
+
+<p>See also: <a href="opcode.html#OpenRead">OpenRead</a>, <a href="opcode.html#OpenWrite">OpenWrite</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="ResetCount"></a>ResetCount
+<td>The value of the change counter is copied to the database handle
+change counter (returned by subsequent calls to sqlite3_changes()).
+Then the VMs internal change counter resets to 0.
+This is used by trigger programs.</td></tr>
+<tr><td valign="top" align="center">
+<a name="ResetSorter"></a>ResetSorter
+<td>Delete all contents from the ephemeral table or sorter
+that is open on cursor P1.</p>
+
+<p>This opcode only works for cursors used for sorting and
+opened with <a href="opcode.html#OpenEphemeral">OpenEphemeral</a> or <a href="opcode.html#SorterOpen">SorterOpen</a>.</td></tr>
+<tr><td valign="top" align="center">
+<a name="ResultRow"></a>ResultRow
+<td>The registers P1 through P1+P2-1 contain a single row of
+results. This opcode causes the sqlite3_step() call to terminate
+with an SQLITE_ROW return code and it sets up the sqlite3_stmt
+structure to provide access to the r(P1)..r(P1+P2-1) values as
+the result row.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Return"></a>Return
+<td>Jump to the address stored in register P1. If P1 is a return address
+register, then this accomplishes a return from a subroutine.</p>
+
+<p>If P3 is 1, then the jump is only taken if register P1 holds an integer
+values, otherwise execution falls through to the next opcode, and the
+<a href="opcode.html#Return">Return</a> becomes a no-op. If P3 is 0, then register P1 must hold an
+integer or else an assert() is raised. P3 should be set to 1 when
+this opcode is used in combination with <a href="opcode.html#BeginSubrtn">BeginSubrtn</a>, and set to 0
+otherwise.</p>
+
+<p>The value in register P1 is unchanged by this opcode.</p>
+
+<p>P2 is not used by the byte-code engine. However, if P2 is positive
+and also less than the current address, then the "EXPLAIN" output
+formatter in the CLI will indent all opcodes from the P2 opcode up
+to be not including the current <a href="opcode.html#Return">Return</a>. P2 should be the first opcode
+in the subroutine from which this opcode is returning. Thus the P2
+value is a byte-code indentation hint. See tag-20220407a in
+wherecode.c and shell.c.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Rewind"></a>Rewind
+<td>The next use of the <a href="opcode.html#Rowid">Rowid</a> or <a href="opcode.html#Column">Column</a> or <a href="opcode.html#Next">Next</a> instruction for P1
+will refer to the first entry in the database table or index.
+If the table or index is empty, jump immediately to P2.
+If the table or index is not empty, fall through to the following
+instruction.</p>
+
+<p>This opcode leaves the cursor configured to move in forward order,
+from the beginning toward the end. In other words, the cursor is
+configured to use <a href="opcode.html#Next">Next</a>, not <a href="opcode.html#Prev">Prev</a>.</td></tr>
+<tr><td valign="top" align="center">
+<a name="RowCell"></a>RowCell
+<td>P1 and P2 are both open cursors. Both must be opened on the same type
+of table - intkey or index. This opcode is used as part of copying
+the current row from P2 into P1. If the cursors are opened on intkey
+tables, register P3 contains the rowid to use with the new record in
+P1. If they are opened on index tables, P3 is not used.</p>
+
+<p>This opcode must be followed by either an <a href="opcode.html#Insert">Insert</a> or InsertIdx opcode
+with the OPFLAG_PREFORMAT flag set to complete the insert operation.</td></tr>
+<tr><td valign="top" align="center">
+<a name="RowData"></a>RowData
+<td>Write into register P2 the complete row content for the row at
+which cursor P1 is currently pointing.
+There is no interpretation of the data.
+It is just copied onto the P2 register exactly as
+it is found in the database file.</p>
+
+<p>If cursor P1 is an index, then the content is the key of the row.
+If cursor P2 is a table, then the content extracted is the data.</p>
+
+<p>If the P1 cursor must be pointing to a valid row (not a NULL row)
+of a real table, not a pseudo-table.</p>
+
+<p>If P3!=0 then this opcode is allowed to make an ephemeral pointer
+into the database page. That means that the content of the output
+register will be invalidated as soon as the cursor moves - including
+moves caused by other cursors that "save" the current cursors
+position in order that they can write to the same table. If P3==0
+then a copy of the data is made into memory. P3!=0 is faster, but
+P3==0 is safer.</p>
+
+<p>If P3!=0 then the content of the P2 register is unsuitable for use
+in OP_Result and any OP_Result will invalidate the P2 register content.
+The P2 register content is invalidated by opcodes like <a href="opcode.html#Function">Function</a> or
+by any use of another cursor pointing to the same table.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Rowid"></a>Rowid
+<td>Store in register P2 an integer which is the key of the table entry that
+P1 is currently point to.</p>
+
+<p>P1 can be either an ordinary table or a virtual table. There used to
+be a separate OP_VRowid opcode for use with virtual tables, but this
+one opcode now works for both table types.</td></tr>
+<tr><td valign="top" align="center">
+<a name="RowSetAdd"></a>RowSetAdd
+<td>Insert the integer value held by register P2 into a RowSet object
+held in register P1.</p>
+
+<p>An assertion fails if P2 is not an integer.</td></tr>
+<tr><td valign="top" align="center">
+<a name="RowSetRead"></a>RowSetRead
+<td>Extract the smallest value from the RowSet object in P1
+and put that value into register P3.
+Or, if RowSet object P1 is initially empty, leave P3
+unchanged and jump to instruction P2.</td></tr>
+<tr><td valign="top" align="center">
+<a name="RowSetTest"></a>RowSetTest
+<td>Register P3 is assumed to hold a 64-bit integer value. If register P1
+contains a RowSet object and that RowSet object contains
+the value held in P3, jump to register P2. Otherwise, insert the
+integer in P3 into the RowSet and continue on to the
+next opcode.</p>
+
+<p>The RowSet object is optimized for the case where sets of integers
+are inserted in distinct phases, which each set contains no duplicates.
+Each set is identified by a unique P4 value. The first set
+must have P4==0, the final set must have P4==-1, and for all other sets
+must have P4&gt;0.</p>
+
+<p>This allows optimizations: (a) when P4==0 there is no need to test
+the RowSet object for P3, as it is guaranteed not to contain it,
+(b) when P4==-1 there is no need to insert the value, as it will
+never be tested for, and (c) when a value that is part of set X is
+inserted, there is no need to search to see if the same value was
+previously inserted as part of set X (only if it was previously
+inserted as part of some other set).</td></tr>
+<tr><td valign="top" align="center">
+<a name="Savepoint"></a>Savepoint
+<td>Open, release or rollback the savepoint named by parameter P4, depending
+on the value of P1. To open a new savepoint set P1==0 (SAVEPOINT_BEGIN).
+To release (commit) an existing savepoint set P1==1 (SAVEPOINT_RELEASE).
+To rollback an existing savepoint set P1==2 (SAVEPOINT_ROLLBACK).</td></tr>
+<tr><td valign="top" align="center">
+<a name="SCopy"></a>SCopy
+<td>Make a shallow copy of register P1 into register P2.</p>
+
+<p>This instruction makes a shallow copy of the value. If the value
+is a string or blob, then the copy is only a pointer to the
+original and hence if the original changes so will the copy.
+Worse, if the original is deallocated, the copy becomes invalid.
+Thus the program must guarantee that the original will not change
+during the lifetime of the copy. Use <a href="opcode.html#Copy">Copy</a> to make a complete
+copy.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SeekEnd"></a>SeekEnd
+<td>Position cursor P1 at the end of the btree for the purpose of
+appending a new entry onto the btree.</p>
+
+<p>It is assumed that the cursor is used only for appending and so
+if the cursor is valid, then the cursor must already be pointing
+at the end of the btree and so no changes are made to
+the cursor.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SeekGE"></a>SeekGE
+<td>If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
+use the value in register P3 as the key. If cursor P1 refers
+to an SQL index, then P3 is the first in an array of P4 registers
+that are used as an unpacked index key.</p>
+
+<p>Reposition cursor P1 so that it points to the smallest entry that
+is greater than or equal to the key value. If there are no records
+greater than or equal to the key and P2 is not zero, then jump to P2.</p>
+
+<p>If the cursor P1 was opened using the OPFLAG_SEEKEQ flag, then this
+opcode will either land on a record that exactly matches the key, or
+else it will cause a jump to P2. When the cursor is OPFLAG_SEEKEQ,
+this opcode must be followed by an <a href="opcode.html#IdxLE">IdxLE</a> opcode with the same arguments.
+The <a href="opcode.html#IdxGT">IdxGT</a> opcode will be skipped if this opcode succeeds, but the
+<a href="opcode.html#IdxGT">IdxGT</a> opcode will be used on subsequent loop iterations. The
+OPFLAG_SEEKEQ flags is a hint to the btree layer to say that this
+is an equality search.</p>
+
+<p>This opcode leaves the cursor configured to move in forward order,
+from the beginning toward the end. In other words, the cursor is
+configured to use <a href="opcode.html#Next">Next</a>, not <a href="opcode.html#Prev">Prev</a>.</p>
+
+<p>See also: <a href="opcode.html#Found">Found</a>, <a href="opcode.html#NotFound">NotFound</a>, SeekLt, SeekGt, SeekLe</td></tr>
+<tr><td valign="top" align="center">
+<a name="SeekGT"></a>SeekGT
+<td>If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
+use the value in register P3 as a key. If cursor P1 refers
+to an SQL index, then P3 is the first in an array of P4 registers
+that are used as an unpacked index key.</p>
+
+<p>Reposition cursor P1 so that it points to the smallest entry that
+is greater than the key value. If there are no records greater than
+the key and P2 is not zero, then jump to P2.</p>
+
+<p>This opcode leaves the cursor configured to move in forward order,
+from the beginning toward the end. In other words, the cursor is
+configured to use <a href="opcode.html#Next">Next</a>, not <a href="opcode.html#Prev">Prev</a>.</p>
+
+<p>See also: <a href="opcode.html#Found">Found</a>, <a href="opcode.html#NotFound">NotFound</a>, SeekLt, SeekGe, SeekLe</td></tr>
+<tr><td valign="top" align="center">
+<a name="SeekHit"></a>SeekHit
+<td>Increase or decrease the seekHit value for cursor P1, if necessary,
+so that it is no less than P2 and no greater than P3.</p>
+
+<p>The seekHit integer represents the maximum of terms in an index for which
+there is known to be at least one match. If the seekHit value is smaller
+than the total number of equality terms in an index lookup, then the
+<a href="opcode.html#IfNoHope">IfNoHope</a> opcode might run to see if the IN loop can be abandoned
+early, thus saving work. This is part of the IN-early-out optimization.</p>
+
+<p>P1 must be a valid b-tree cursor.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SeekLE"></a>SeekLE
+<td>If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
+use the value in register P3 as a key. If cursor P1 refers
+to an SQL index, then P3 is the first in an array of P4 registers
+that are used as an unpacked index key.</p>
+
+<p>Reposition cursor P1 so that it points to the largest entry that
+is less than or equal to the key value. If there are no records
+less than or equal to the key and P2 is not zero, then jump to P2.</p>
+
+<p>This opcode leaves the cursor configured to move in reverse order,
+from the end toward the beginning. In other words, the cursor is
+configured to use <a href="opcode.html#Prev">Prev</a>, not <a href="opcode.html#Next">Next</a>.</p>
+
+<p>If the cursor P1 was opened using the OPFLAG_SEEKEQ flag, then this
+opcode will either land on a record that exactly matches the key, or
+else it will cause a jump to P2. When the cursor is OPFLAG_SEEKEQ,
+this opcode must be followed by an <a href="opcode.html#IdxLE">IdxLE</a> opcode with the same arguments.
+The <a href="opcode.html#IdxGE">IdxGE</a> opcode will be skipped if this opcode succeeds, but the
+<a href="opcode.html#IdxGE">IdxGE</a> opcode will be used on subsequent loop iterations. The
+OPFLAG_SEEKEQ flags is a hint to the btree layer to say that this
+is an equality search.</p>
+
+<p>See also: <a href="opcode.html#Found">Found</a>, <a href="opcode.html#NotFound">NotFound</a>, SeekGt, SeekGe, SeekLt</td></tr>
+<tr><td valign="top" align="center">
+<a name="SeekLT"></a>SeekLT
+<td>If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
+use the value in register P3 as a key. If cursor P1 refers
+to an SQL index, then P3 is the first in an array of P4 registers
+that are used as an unpacked index key.</p>
+
+<p>Reposition cursor P1 so that it points to the largest entry that
+is less than the key value. If there are no records less than
+the key and P2 is not zero, then jump to P2.</p>
+
+<p>This opcode leaves the cursor configured to move in reverse order,
+from the end toward the beginning. In other words, the cursor is
+configured to use <a href="opcode.html#Prev">Prev</a>, not <a href="opcode.html#Next">Next</a>.</p>
+
+<p>See also: <a href="opcode.html#Found">Found</a>, <a href="opcode.html#NotFound">NotFound</a>, SeekGt, SeekGe, SeekLe</td></tr>
+<tr><td valign="top" align="center">
+<a name="SeekRowid"></a>SeekRowid
+<td>P1 is the index of a cursor open on an SQL table btree (with integer
+keys). If register P3 does not contain an integer or if P1 does not
+contain a record with rowid P3 then jump immediately to P2.
+Or, if P2 is 0, raise an SQLITE_CORRUPT error. If P1 does contain
+a record with rowid P3 then
+leave the cursor pointing at that record and fall through to the next
+instruction.</p>
+
+<p>The <a href="opcode.html#NotExists">NotExists</a> opcode performs the same operation, but with <a href="opcode.html#NotExists">NotExists</a>
+the P3 register must be guaranteed to contain an integer value. With this
+opcode, register P3 might not contain an integer.</p>
+
+<p>The <a href="opcode.html#NotFound">NotFound</a> opcode performs the same operation on index btrees
+(with arbitrary multi-value keys).</p>
+
+<p>This opcode leaves the cursor in a state where it cannot be advanced
+in either direction. In other words, the <a href="opcode.html#Next">Next</a> and <a href="opcode.html#Prev">Prev</a> opcodes will
+not work following this opcode.</p>
+
+<p>See also: <a href="opcode.html#Found">Found</a>, <a href="opcode.html#NotFound">NotFound</a>, <a href="opcode.html#NoConflict">NoConflict</a>, <a href="opcode.html#SeekRowid">SeekRowid</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="SeekScan"></a>SeekScan
+<td>This opcode is a prefix opcode to <a href="opcode.html#SeekGE">SeekGE</a>. In other words, this
+opcode must be immediately followed by <a href="opcode.html#SeekGE">SeekGE</a>. This constraint is
+checked by assert() statements.</p>
+
+<p>This opcode uses the P1 through P4 operands of the subsequent
+<a href="opcode.html#SeekGE">SeekGE</a>. In the text that follows, the operands of the subsequent
+<a href="opcode.html#SeekGE">SeekGE</a> opcode are denoted as SeekOP.P1 through SeekOP.P4. Only
+the P1, P2 and P5 operands of this opcode are also used, and are called
+This.P1, This.P2 and This.P5.</p>
+
+<p>This opcode helps to optimize IN operators on a multi-column index
+where the IN operator is on the later terms of the index by avoiding
+unnecessary seeks on the btree, substituting steps to the next row
+of the b-tree instead. A correct answer is obtained if this opcode
+is omitted or is a no-op.</p>
+
+<p>The <a href="opcode.html#SeekGE">SeekGE</a>.P3 and <a href="opcode.html#SeekGE">SeekGE</a>.P4 operands identify an unpacked key which
+is the desired entry that we want the cursor <a href="opcode.html#SeekGE">SeekGE</a>.P1 to be pointing
+to. Call this <a href="opcode.html#SeekGE">SeekGE</a>.P3/P4 row the "target".</p>
+
+<p>If the <a href="opcode.html#SeekGE">SeekGE</a>.P1 cursor is not currently pointing to a valid row,
+then this opcode is a no-op and control passes through into the <a href="opcode.html#SeekGE">SeekGE</a>.</p>
+
+<p>If the <a href="opcode.html#SeekGE">SeekGE</a>.P1 cursor is pointing to a valid row, then that row
+might be the target row, or it might be near and slightly before the
+target row, or it might be after the target row. If the cursor is
+currently before the target row, then this opcode attempts to position
+the cursor on or after the target row by invoking sqlite3BtreeStep()
+on the cursor between 1 and This.P1 times.</p>
+
+<p>The This.P5 parameter is a flag that indicates what to do if the
+cursor ends up pointing at a valid row that is past the target
+row. If This.P5 is false (0) then a jump is made to <a href="opcode.html#SeekGE">SeekGE</a>.P2. If
+This.P5 is true (non-zero) then a jump is made to This.P2. The P5==0
+case occurs when there are no inequality constraints to the right of
+the IN constraing. The jump to <a href="opcode.html#SeekGE">SeekGE</a>.P2 ends the loop. The P5!=0 case
+occurs when there are inequality constraints to the right of the IN
+operator. In that case, the This.P2 will point either directly to or
+to setup code prior to the <a href="opcode.html#IdxGT">IdxGT</a> or <a href="opcode.html#IdxGE">IdxGE</a> opcode that checks for
+loop terminate.</p>
+
+<p>Possible outcomes from this opcode:<ol></p>
+
+<p><li> If the cursor is initally not pointed to any valid row, then
+fall through into the subsequent <a href="opcode.html#SeekGE">SeekGE</a> opcode.</p>
+
+<p><li> If the cursor is left pointing to a row that is before the target
+row, even after making as many as This.P1 calls to
+sqlite3BtreeNext(), then also fall through into <a href="opcode.html#SeekGE">SeekGE</a>.</p>
+
+<p><li> If the cursor is left pointing at the target row, either because it
+was at the target row to begin with or because one or more
+sqlite3BtreeNext() calls moved the cursor to the target row,
+then jump to This.P2..,</p>
+
+<p><li> If the cursor started out before the target row and a call to
+to sqlite3BtreeNext() moved the cursor off the end of the index
+(indicating that the target row definitely does not exist in the
+btree) then jump to <a href="opcode.html#SeekGE">SeekGE</a>.P2, ending the loop.</p>
+
+<p><li> If the cursor ends up on a valid row that is past the target row
+(indicating that the target row does not exist in the btree) then
+jump to SeekOP.P2 if This.P5==0 or to This.P2 if This.P5&gt;0.
+</ol></td></tr>
+<tr><td valign="top" align="center">
+<a name="Sequence"></a>Sequence
+<td>Find the next available sequence number for cursor P1.
+Write the sequence number into register P2.
+The sequence number on the cursor is incremented after this
+instruction.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SequenceTest"></a>SequenceTest
+<td>P1 is a sorter cursor. If the sequence counter is currently zero, jump
+to P2. Regardless of whether or not the jump is taken, increment the
+the sequence value.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SetCookie"></a>SetCookie
+<td>Write the integer value P3 into cookie number P2 of database P1.
+P2==1 is the schema version. P2==2 is the database format.
+P2==3 is the recommended pager cache
+size, and so forth. P1==0 is the main database file and P1==1 is the
+database file used to store temporary tables.</p>
+
+<p>A transaction must be started before executing this opcode.</p>
+
+<p>If P2 is the SCHEMA_VERSION cookie (cookie number 1) then the internal
+schema version is set to P3-P5. The "PRAGMA schema_version=N" statement
+has P5 set to 1, so that the internal schema version will be different
+from the database schema version, resulting in a schema reset.</td></tr>
+<tr><td valign="top" align="center">
+<a name="ShiftLeft"></a>ShiftLeft
+<td>Shift the integer value in register P2 to the left by the
+number of bits specified by the integer in register P1.
+Store the result in register P3.
+If either input is NULL, the result is NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="ShiftRight"></a>ShiftRight
+<td>Shift the integer value in register P2 to the right by the
+number of bits specified by the integer in register P1.
+Store the result in register P3.
+If either input is NULL, the result is NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SoftNull"></a>SoftNull
+<td>Set register P1 to have the value NULL as seen by the <a href="opcode.html#MakeRecord">MakeRecord</a>
+instruction, but do not free any string or blob memory associated with
+the register, so that if the value was a string or blob that was
+previously copied using <a href="opcode.html#SCopy">SCopy</a>, the copies will continue to be valid.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Sort"></a>Sort
+<td>This opcode does exactly the same thing as <a href="opcode.html#Rewind">Rewind</a> except that
+it increments an undocumented global variable used for testing.</p>
+
+<p>Sorting is accomplished by writing records into a sorting index,
+then rewinding that index and playing it back from beginning to
+end. We use the <a href="opcode.html#Sort">Sort</a> opcode instead of <a href="opcode.html#Rewind">Rewind</a> to do the
+rewinding so that the global variable will be incremented and
+regression tests can determine whether or not the optimizer is
+correctly optimizing out sorts.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SorterCompare"></a>SorterCompare
+<td>P1 is a sorter cursor. This instruction compares a prefix of the
+record blob in register P3 against a prefix of the entry that
+the sorter cursor currently points to. Only the first P4 fields
+of r&#91;P3&#93; and the sorter record are compared.</p>
+
+<p>If either P3 or the sorter contains a NULL in one of their significant
+fields (not counting the P4 fields at the end which are ignored) then
+the comparison is assumed to be equal.</p>
+
+<p>Fall through to next instruction if the two records compare equal to
+each other. <a href="opcode.html#Jump">Jump</a> to P2 if they are different.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SorterData"></a>SorterData
+<td>Write into register P2 the current sorter data for sorter cursor P1.
+Then clear the column header cache on cursor P3.</p>
+
+<p>This opcode is normally use to move a record out of the sorter and into
+a register that is the source for a pseudo-table cursor created using
+<a href="opcode.html#OpenPseudo">OpenPseudo</a>. That pseudo-table cursor is the one that is identified by
+parameter P3. Clearing the P3 column cache as part of this opcode saves
+us from having to issue a separate <a href="opcode.html#NullRow">NullRow</a> instruction to clear that cache.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SorterInsert"></a>SorterInsert
+<td>Register P2 holds an SQL index key made using the
+<a href="opcode.html#MakeRecord">MakeRecord</a> instructions. This opcode writes that key
+into the sorter P1. Data for the entry is nil.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SorterNext"></a>SorterNext
+<td>This opcode works just like <a href="opcode.html#Next">Next</a> except that P1 must be a
+sorter object for which the <a href="opcode.html#SorterSort">SorterSort</a> opcode has been
+invoked. This opcode advances the cursor to the next sorted
+record, or jumps to P2 if there are no more sorted records.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SorterOpen"></a>SorterOpen
+<td>This opcode works like <a href="opcode.html#OpenEphemeral">OpenEphemeral</a> except that it opens
+a transient index that is specifically designed to sort large
+tables using an external merge-sort algorithm.</p>
+
+<p>If argument P3 is non-zero, then it indicates that the sorter may
+assume that a stable sort considering the first P3 fields of each
+key is sufficient to produce the required results.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SorterSort"></a>SorterSort
+<td>After all records have been inserted into the Sorter object
+identified by P1, invoke this opcode to actually do the sorting.
+<a href="opcode.html#Jump">Jump</a> to P2 if there are no records to be sorted.</p>
+
+<p>This opcode is an alias for <a href="opcode.html#Sort">Sort</a> and <a href="opcode.html#Rewind">Rewind</a> that is used
+for Sorter objects.</td></tr>
+<tr><td valign="top" align="center">
+<a name="SqlExec"></a>SqlExec
+<td>Run the SQL statement or statements specified in the P4 string.</td></tr>
+<tr><td valign="top" align="center">
+<a name="String"></a>String
+<td>The string value P4 of length P1 (bytes) is stored in register P2.</p>
+
+<p>If P3 is not zero and the content of register P3 is equal to P5, then
+the datatype of the register P2 is converted to BLOB. The content is
+the same sequence of bytes, it is merely interpreted as a BLOB instead
+of a string, as if it had been CAST. In other words:</p>
+
+<p>if( P3!=0 and reg&#91;P3&#93;==P5 ) reg&#91;P2&#93; := CAST(reg&#91;P2&#93; as BLOB)</td></tr>
+<tr><td valign="top" align="center">
+<a name="String8"></a>String8
+<td>P4 points to a nul terminated UTF-8 string. This opcode is transformed
+into a <a href="opcode.html#String">String</a> opcode before it is executed for the first time. During
+this transformation, the length of string P4 is computed and stored
+as the P1 parameter.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Subtract"></a>Subtract
+<td>Subtract the value in register P1 from the value in register P2
+and store the result in register P3.
+If either input is NULL, the result is NULL.</td></tr>
+<tr><td valign="top" align="center">
+<a name="TableLock"></a>TableLock
+<td>Obtain a lock on a particular table. This instruction is only used when
+the shared-cache feature is enabled.</p>
+
+<p>P1 is the index of the database in sqlite3.aDb[] of the database
+on which the lock is acquired. A readlock is obtained if P3==0 or
+a write lock if P3==1.</p>
+
+<p>P2 contains the root-page of the table to lock.</p>
+
+<p>P4 contains a pointer to the name of the table being locked. This is only
+used to generate an error message if the lock cannot be obtained.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Trace"></a>Trace
+<td>Write P4 on the statement trace output if statement tracing is
+enabled.</p>
+
+<p>Operand P1 must be 0x7fffffff and P2 must positive.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Transaction"></a>Transaction
+<td>Begin a transaction on database P1 if a transaction is not already
+active.
+If P2 is non-zero, then a write-transaction is started, or if a
+read-transaction is already active, it is upgraded to a write-transaction.
+If P2 is zero, then a read-transaction is started. If P2 is 2 or more
+then an exclusive transaction is started.</p>
+
+<p>P1 is the index of the database file on which the transaction is
+started. Index 0 is the main database file and index 1 is the
+file used for temporary tables. Indices of 2 or more are used for
+attached databases.</p>
+
+<p>If a write-transaction is started and the Vdbe.usesStmtJournal flag is
+true (this flag is set if the Vdbe may modify more than one row and may
+throw an ABORT exception), a statement transaction may also be opened.
+More specifically, a statement transaction is opened iff the database
+connection is currently not in autocommit mode, or if there are other
+active statements. A statement transaction allows the changes made by this
+VDBE to be rolled back after an error without having to roll back the
+entire transaction. If no error is encountered, the statement transaction
+will automatically commit when the VDBE halts.</p>
+
+<p>If P5!=0 then this opcode also checks the schema cookie against P3
+and the schema generation counter against P4.
+The cookie changes its value whenever the database schema changes.
+This operation is used to detect when that the cookie has changed
+and that the current process needs to reread the schema. If the schema
+cookie in P3 differs from the schema cookie in the database header or
+if the schema generation counter in P4 differs from the current
+generation counter, then an SQLITE_SCHEMA error is raised and execution
+halts. The sqlite3_step() wrapper function might then reprepare the
+statement and rerun it from the beginning.</td></tr>
+<tr><td valign="top" align="center">
+<a name="TypeCheck"></a>TypeCheck
+<td>Apply affinities to the range of P2 registers beginning with P1.
+Take the affinities from the Table object in P4. If any value
+cannot be coerced into the correct type, then raise an error.</p>
+
+<p>This opcode is similar to <a href="opcode.html#Affinity">Affinity</a> except that this opcode
+forces the register type to the Table column type. This is used
+to implement "strict affinity".</p>
+
+<p>GENERATED ALWAYS AS ... STATIC columns are only checked if P3
+is zero. When P3 is non-zero, no type checking occurs for
+static generated columns. Virtual columns are computed at query time
+and so they are never checked.</p>
+
+<p>Preconditions:</p>
+
+<p><ul>
+<li> P2 should be the number of non-virtual columns in the
+table of P4.
+<li> Table P4 should be a STRICT table.
+</ul></p>
+
+<p>If any precondition is false, an assertion fault occurs.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Vacuum"></a>Vacuum
+<td>Vacuum the entire database P1. P1 is 0 for "main", and 2 or more
+for an attached database. The "temp" database may not be vacuumed.</p>
+
+<p>If P2 is not zero, then it is a register holding a string which is
+the file into which the result of vacuum should be written. When
+P2 is zero, the vacuum overwrites the original database.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Variable"></a>Variable
+<td>Transfer the values of bound parameter P1 into register P2</p>
+
+<p>If the parameter is named, then its name appears in P4.
+The P4 value is used by sqlite3_bind_parameter_name().</td></tr>
+<tr><td valign="top" align="center">
+<a name="VBegin"></a>VBegin
+<td>P4 may be a pointer to an sqlite3_vtab structure. If so, call the
+xBegin method for that table.</p>
+
+<p>Also, whether or not P4 is set, check that this is not being called from
+within a callback to a virtual table xSync() method. If it is, the error
+code will be set to SQLITE_LOCKED.</td></tr>
+<tr><td valign="top" align="center">
+<a name="VColumn"></a>VColumn
+<td>Store in register P3 the value of the P2-th column of
+the current row of the virtual-table of cursor P1.</p>
+
+<p>If the <a href="opcode.html#VColumn">VColumn</a> opcode is being used to fetch the value of
+an unchanging column during an UPDATE operation, then the P5
+value is OPFLAG_NOCHNG. This will cause the sqlite3_vtab_nochange()
+function to return true inside the xColumn method of the virtual
+table implementation. The P5 column might also contain other
+bits (OPFLAG_LENGTHARG or OPFLAG_TYPEOFARG) but those bits are
+unused by <a href="opcode.html#VColumn">VColumn</a>.</td></tr>
+<tr><td valign="top" align="center">
+<a name="VCreate"></a>VCreate
+<td>P2 is a register that holds the name of a virtual table in database
+P1. Call the xCreate method for that table.</td></tr>
+<tr><td valign="top" align="center">
+<a name="VDestroy"></a>VDestroy
+<td>P4 is the name of a virtual table in database P1. Call the xDestroy method
+of that table.</td></tr>
+<tr><td valign="top" align="center">
+<a name="VFilter"></a>VFilter
+<td>P1 is a cursor opened using <a href="opcode.html#VOpen">VOpen</a>. P2 is an address to jump to if
+the filtered result set is empty.</p>
+
+<p>P4 is either NULL or a string that was generated by the xBestIndex
+method of the module. The interpretation of the P4 string is left
+to the module implementation.</p>
+
+<p>This opcode invokes the xFilter method on the virtual table specified
+by P1. The integer query plan parameter to xFilter is stored in register
+P3. Register P3+1 stores the argc parameter to be passed to the
+xFilter method. Registers P3+2..P3+1+argc are the argc
+additional parameters which are passed to
+xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter.</p>
+
+<p>A jump is made to P2 if the result set after filtering would be empty.</td></tr>
+<tr><td valign="top" align="center">
+<a name="VInitIn"></a>VInitIn
+<td>Set register P2 to be a pointer to a ValueList object for cursor P1
+with cache register P3 and output register P3+1. This ValueList object
+can be used as the first argument to sqlite3_vtab_in_first() and
+sqlite3_vtab_in_next() to extract all of the values stored in the P1
+cursor. Register P3 is used to hold the values returned by
+sqlite3_vtab_in_first() and sqlite3_vtab_in_next().</td></tr>
+<tr><td valign="top" align="center">
+<a name="VNext"></a>VNext
+<td>Advance virtual table P1 to the next row in its result set and
+jump to instruction P2. Or, if the virtual table has reached
+the end of its result set, then fall through to the next instruction.</td></tr>
+<tr><td valign="top" align="center">
+<a name="VOpen"></a>VOpen
+<td>P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
+P1 is a cursor number. This opcode opens a cursor to the virtual
+table and stores that cursor in P1.</td></tr>
+<tr><td valign="top" align="center">
+<a name="VRename"></a>VRename
+<td>P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
+This opcode invokes the corresponding xRename method. The value
+in register P1 is passed as the zName argument to the xRename method.</td></tr>
+<tr><td valign="top" align="center">
+<a name="VUpdate"></a>VUpdate
+<td>P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
+This opcode invokes the corresponding xUpdate method. P2 values
+are contiguous memory cells starting at P3 to pass to the xUpdate
+invocation. The value in register (P3+P2-1) corresponds to the
+p2th element of the argv array passed to xUpdate.</p>
+
+<p>The xUpdate method will do a DELETE or an INSERT or both.
+The argv[0] element (which corresponds to memory cell P3)
+is the rowid of a row to delete. If argv[0] is NULL then no
+deletion occurs. The argv[1] element is the rowid of the new
+row. This can be NULL to have the virtual table select the new
+rowid for itself. The subsequent elements in the array are
+the values of columns in the new row.</p>
+
+<p>If P2==1 then no insert is performed. argv[0] is the rowid of
+a row to delete.</p>
+
+<p>P1 is a boolean flag. If it is set to true and the xUpdate call
+is successful, then the value returned by sqlite3_last_insert_rowid()
+is set to the value of the rowid for the row just inserted.</p>
+
+<p>P5 is the error actions (OE_Replace, OE_Fail, OE_Ignore, etc) to
+apply in the case of a constraint failure on an insert or update.</td></tr>
+<tr><td valign="top" align="center">
+<a name="Yield"></a>Yield
+<td>Swap the program counter with the value in register P1. This
+has the effect of yielding to a coroutine.</p>
+
+<p>If the coroutine that is launched by this instruction ends with
+<a href="opcode.html#Yield">Yield</a> or <a href="opcode.html#Return">Return</a> then continue to the next instruction. But if
+the coroutine launched by this instruction ends with
+<a href="opcode.html#EndCoroutine">EndCoroutine</a>, then jump to P2 rather than continuing with the
+next instruction.</p>
+
+<p>See also: <a href="opcode.html#InitCoroutine">InitCoroutine</a></td></tr>
+<tr><td valign="top" align="center">
+<a name="ZeroOrNull"></a>ZeroOrNull
+<td>If all both registers P1 and P3 are NOT NULL, then store a zero in
+register P2. If either registers P1 or P3 are NULL then put
+a NULL in register P2.</td></tr>
+
+ </table></blockquote>
+ </div>
+
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/opcode.in?m=c96f076c3fd941bcc">2022-08-10 18:45:48</a> UTC </small></i></p>
+
diff --git a/www/optoverview.html b/www/optoverview.html
new file mode 100644
index 0000000..5fa1146
--- /dev/null
+++ b/www/optoverview.html
@@ -0,0 +1,1623 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The SQLite Query Optimizer Overview</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The SQLite Query Optimizer Overview
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#where_clause_analysis">2. WHERE Clause Analysis</a></div>
+<div class="fancy-toc2"><a href="#index_term_usage_examples">2.1. Index Term Usage Examples</a></div>
+<div class="fancy-toc1"><a href="#the_between_optimization">3. The BETWEEN Optimization</a></div>
+<div class="fancy-toc1"><a href="#or_optimizations">4. OR Optimizations</a></div>
+<div class="fancy-toc1"><a href="#the_like_optimization">5. The LIKE Optimization</a></div>
+<div class="fancy-toc1"><a href="#the_skip_scan_optimization">6. The Skip-Scan Optimization</a></div>
+<div class="fancy-toc1"><a href="#joins">7. Joins</a></div>
+<div class="fancy-toc2"><a href="#order_of_tables_in_a_join">7.1. Order of Tables in a Join</a></div>
+<div class="fancy-toc2"><a href="#manual_control_of_query_plans_using_sqlite_stat_tables">7.2. Manual Control Of Query Plans Using SQLITE_STAT Tables</a></div>
+<div class="fancy-toc2"><a href="#manual_control_of_query_plans_using_cross_join">7.3. Manual Control of Query Plans using CROSS JOIN</a></div>
+<div class="fancy-toc1"><a href="#choosing_between_multiple_indexes">8. Choosing Between Multiple Indexes</a></div>
+<div class="fancy-toc2"><a href="#disqualifying_where_clause_terms_using_unary_">8.1. Disqualifying WHERE Clause Terms using Unary-"+"</a></div>
+<div class="fancy-toc2"><a href="#range_queries">8.2. Range Queries</a></div>
+<div class="fancy-toc1"><a href="#covering_indexes">9. Covering Indexes</a></div>
+<div class="fancy-toc1"><a href="#order_by_optimizations">10. ORDER BY Optimizations</a></div>
+<div class="fancy-toc2"><a href="#partial_order_by_via_index">10.1. Partial ORDER BY via Index</a></div>
+<div class="fancy-toc1"><a href="#subquery_flattening">11. Subquery Flattening</a></div>
+<div class="fancy-toc1"><a href="#subquery_co_routines">12. Subquery Co-routines</a></div>
+<div class="fancy-toc2"><a href="#using_co_routines_to_defer_work_until_after_the_sorting">12.1. Using Co-routines to Defer Work until after the Sorting</a></div>
+<div class="fancy-toc1"><a href="#the_min_max_optimization">13. The MIN/MAX Optimization</a></div>
+<div class="fancy-toc1"><a href="#automatic_indexes">14. Automatic Indexes</a></div>
+<div class="fancy-toc2"><a href="#hash_joins">14.1. Hash Joins</a></div>
+<div class="fancy-toc1"><a href="#the_push_down_optimization">15. The Push-Down Optimization</a></div>
+<div class="fancy-toc1"><a href="#the_left_join_strength_reduction_optimization">16. The LEFT JOIN Strength Reduction Optimization</a></div>
+<div class="fancy-toc1"><a href="#the_omit_left_join_optimization">17. The Omit LEFT JOIN Optimization</a></div>
+<div class="fancy-toc1"><a href="#the_constant_propagation_optimization">18. The Constant Propagation Optimization</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+<p>
+ This document provides an overview of how the query planner and optimizer
+ for SQLite works.
+
+
+</p><p>
+ Given a single SQL statement, there might be dozens, hundreds, or even
+ thousands of ways to implement that statement, depending on the complexity
+ of the statement itself and of the underlying database schema. The
+ task of the query planner is to select the algorithm that minimizes
+ disk I/O and CPU overhead.
+
+
+</p><p>
+ Additional background information is available in the
+ <a href="queryplanner.html">indexing tutorial</a> document.
+
+
+</p><p>
+ With release 3.8.0 (2013-08-26),
+ the SQLite query planner was reimplemented as the
+ <a href="queryplanner-ng.html">Next Generation Query Planner</a> or "NGQP". All of the features, techniques,
+ and algorithms described in this document are applicable to both the
+ pre-3.8.0 legacy query planner and to the NGQP. For further information on
+ how the NGQP differs from the legacy query planner, see the
+ <a href="queryplanner-ng.html">detailed description of the NGQP</a>.
+
+
+
+
+<a name="where_clause"></a>
+
+</p><h1 id="where_clause_analysis"><span>2. </span>WHERE Clause Analysis</h1>
+
+<p>
+ The WHERE clause on a query is broken up into "terms" where each term
+ is separated from the others by an AND operator.
+ If the WHERE clause is composed of constraints separated by the OR
+ operator then the entire clause is considered to be a single "term"
+ to which the <a href="#or_opt">OR-clause optimization</a> is applied.
+
+</p><p>
+ All terms of the WHERE clause are analyzed to see if they can be
+ satisfied using indexes.
+ To be usable by an index a term must usually be of one of the following
+ forms:
+
+<blockquote><pre><b>
+ </b><i>column</i><b> = </b><i>expression</i><b>
+ </b><i>column</i><b> IS </b><i>expression</i><b>
+ </b><i>column</i><b> &gt; </b><i>expression</i><b>
+ </b><i>column</i><b> &gt;= </b><i>expression</i><b>
+ </b><i>column</i><b> &lt; </b><i>expression</i><b>
+ </b><i>column</i><b> &lt;= </b><i>expression</i><b>
+ </b><i>expression</i><b> = </b><i>column</i><b>
+ </b><i>expression</i><b> &gt; </b><i>column</i><b>
+ </b><i>expression</i><b> &gt;= </b><i>column</i><b>
+ </b><i>expression</i><b> &lt; </b><i>column</i><b>
+ </b><i>expression</i><b> &lt;= </b><i>column</i><b>
+ </b><i>column</i><b> IN (</b><i>expression-list</i><b>)
+ </b><i>column</i><b> IN (</b><i>subquery</i><b>)
+ </b><i>column</i><b> IS NULL
+ </b><i>column</i><b> LIKE </b><i>pattern</i><b>
+ </b><i>column</i><b> GLOB </b><i>pattern</i><b>
+</b></pre></blockquote>
+
+</p><p>
+ If an index is created using a statement like this:
+
+</p><div class="codeblock"><pre>CREATE INDEX idx_ex1 ON ex1(a,b,c,d,e,...,y,z);
+</pre></div>
+
+<p>
+ Then the index might be used if the initial columns of the index
+ (columns a, b, and so forth) appear in WHERE clause terms.
+ The initial columns of the index must be used with
+ the <b>=</b> or <b>IN</b> or <b>IS</b> operators.
+ The right-most column that is used can employ inequalities.
+ For the right-most
+ column of an index that is used, there can be up to two inequalities
+ that must sandwich the allowed values of the column between two extremes.
+
+</p><p>
+ It is not necessary for every column of an index to appear in a
+ WHERE clause term in order for that index to be used.
+ However, there cannot be gaps in the columns of the index that are used.
+ Thus for the example index above, if there is no WHERE clause term
+ that constrains column c, then terms that constrain columns a and b can
+ be used with the index but not terms that constrain columns d through z.
+ Similarly, index columns will not normally be used (for indexing purposes)
+ if they are to the right of a
+ column that is constrained only by inequalities.
+ (See the <a href="optoverview.html#skipscan">skip-scan optimization</a> below for the exception.)
+
+</p><p>
+ In the case of <a href="expridx.html">indexes on expressions</a>, whenever the word "column" is
+ used in the foregoing text, one can substitute "indexed expression"
+ (meaning a copy of the expression that appears in the <a href="lang_createindex.html">CREATE INDEX</a>
+ statement) and everything will work the same.
+
+
+<a name="idxexamp"></a>
+
+</p><h2 id="index_term_usage_examples"><span>2.1. </span>Index Term Usage Examples</h2>
+<p>
+ For the index above and WHERE clause like this:
+
+</p><div class="codeblock"><pre>... WHERE a=5 AND b IN (1,2,3) AND c IS NULL AND d='hello'
+</pre></div>
+<p>
+ The first four columns a, b, c, and d of the index would be usable since
+ those four columns form a prefix of the index and are all bound by
+ equality constraints.
+
+</p><p>
+ For the index above and WHERE clause like this:
+
+</p><div class="codeblock"><pre>... WHERE a=5 AND b IN (1,2,3) AND c>12 AND d='hello'
+</pre></div>
+<p>
+ Only columns a, b, and c of the index would be usable. The d column
+ would not be usable because it occurs to the right of c and c is
+ constrained only by inequalities.
+
+</p><p>
+ For the index above and WHERE clause like this:
+
+</p><div class="codeblock"><pre>... WHERE a=5 AND b IN (1,2,3) AND d='hello'
+</pre></div>
+<p>
+ Only columns a and b of the index would be usable. The d column
+ would not be usable because column c is not constrained and there can
+ be no gaps in the set of columns that usable by the index.
+
+</p><p>
+ For the index above and WHERE clause like this:
+
+</p><div class="codeblock"><pre>... WHERE b IN (1,2,3) AND c NOT NULL AND d='hello'
+</pre></div>
+<p>
+ The index is not usable at all because the left-most column of the
+ index (column "a") is not constrained. Assuming there are no other
+ indexes, the query above would result in a full table scan.
+
+</p><p>
+ For the index above and WHERE clause like this:
+
+</p><div class="codeblock"><pre>... WHERE a=5 OR b IN (1,2,3) OR c NOT NULL OR d='hello'
+</pre></div>
+<p>
+ The index is not usable because the WHERE clause terms are connected
+ by OR instead of AND. This query would result in a full table scan.
+ However, if three additional indexes where added that contained columns
+ b, c, and d as their left-most columns, then the
+ <a href="#or_opt">OR-clause optimization</a> might apply.
+
+
+<a name="between_opt"></a>
+
+</p><h1 id="the_between_optimization"><span>3. </span>The BETWEEN Optimization</h1>
+
+<p>
+ If a term of the WHERE clause is of the following form:
+
+<blockquote><pre><b>
+ </b><i>expr1</i><b> BETWEEN </b><i>expr2</i><b> AND </b><i>expr3</i><b>
+</b></pre></blockquote>
+</p><p>
+ Then two "virtual" terms are added as follows:
+
+<blockquote><pre><b>
+ </b><i>expr1</i><b> &gt;= </b><i>expr2</i><b> AND </b><i>expr1</i><b> &lt;= </b><i>expr3</i><b>
+</b></pre></blockquote>
+</p><p>
+ Virtual terms are used for analysis only and do not cause any byte-code
+ to be generated.
+ If both virtual terms end up being used as constraints on an index,
+ then the original BETWEEN term is omitted and the corresponding test
+ is not performed on input rows.
+ Thus if the BETWEEN term ends up being used as an index constraint
+ no tests are ever performed on that term.
+ On the other hand, the
+ virtual terms themselves never causes tests to be performed on
+ input rows.
+ Thus if the BETWEEN term is not used as an index constraint and
+ instead must be used to test input rows, the <i>expr1</i> expression is
+ only evaluated once.
+
+<a name="or_opt"></a>
+
+</p><h1 id="or_optimizations"><span>4. </span>OR Optimizations</h1>
+
+<p>
+ WHERE clause constraints that are connected by OR instead of AND can
+ be handled in two different ways.
+ If a term consists of multiple subterms containing a common column
+ name and separated by OR, like this:
+
+<blockquote><pre><b>
+ </b><i>column</i><b> = </b><i>expr1</i><b> OR </b><i>column</i><b> = </b><i>expr2</i><b> OR </b><i>column</i><b> = </b><i>expr3</i><b> OR ...
+</b></pre></blockquote>
+</p><p>
+ Then that term is rewritten as follows:
+
+<blockquote><pre><b>
+ </b><i>column</i><b> IN (</b><i>expr1</i><b>,</b><i>expr2</i><b>,</b><i>expr3</i><b>,...)
+</b></pre></blockquote>
+</p><p>
+ The rewritten term then might go on to constrain an index using the
+ normal rules for <b>IN</b> operators. Note that <i>column</i> must be
+ the same column in every OR-connected subterm,
+ although the column can occur on either the left or the right side of
+ the <b>=</b> operator.
+
+</p><p>
+ If and only if the previously described conversion of OR to an IN operator
+ does not work, the second OR-clause optimization is attempted.
+ Suppose the OR clause consists of multiple subterms as follows:
+
+<blockquote><pre><b>
+ </b><i>expr1</i><b> OR </b><i>expr2</i><b> OR </b><i>expr3</i><b>
+</b></pre></blockquote>
+</p><p>
+ Individual subterms might be a single comparison expression like
+ <b>a=5</b> or <b>x&gt;y</b> or they can be
+ LIKE or BETWEEN expressions, or a subterm
+ can be a parenthesized list of AND-connected sub-subterms.
+ Each subterm is analyzed as if it were itself the entire WHERE clause
+ in order to see if the subterm is indexable by itself.
+ If <u>every</u> subterm of an OR clause is separately indexable
+ then the OR clause might be coded such that a separate index is used
+ to evaluate each term of the OR clause. One way to think about how
+ SQLite uses separate indexes for each OR clause term is to imagine
+ that the WHERE clause where rewritten as follows:
+
+<blockquote><pre><b>
+ rowid IN (SELECT rowid FROM </b><i>table</i><b> WHERE </b><i>expr1</i><b>
+ UNION SELECT rowid FROM </b><i>table</i><b> WHERE </b><i>expr2</i><b>
+ UNION SELECT rowid FROM </b><i>table</i><b> WHERE </b><i>expr3</i><b>)
+</b></pre></blockquote>
+</p><p>
+ The rewritten expression above is conceptual; WHERE clauses containing
+ OR are not really rewritten this way.
+ The actual implementation of the OR clause uses a mechanism that is
+ more efficient and that works even for <a href="withoutrowid.html">WITHOUT ROWID</a> tables or
+ tables in which the "rowid" is inaccessible. Nevertheless,
+ the essence of the implementation is captured by the statement
+ above: Separate indexes are used to find candidate result rows
+ from each OR clause term and the final result is the union of
+ those rows.
+
+</p><p>
+ Note that in most cases, SQLite will only use a single index for each
+ table in the FROM clause of a query. The second OR-clause optimization
+ described here is the exception to that rule. With an OR-clause,
+ a different index might be used for each subterm in the OR-clause.
+
+</p><p>
+ For any given query, the fact that the OR-clause optimization described
+ here can be used does not guarantee that it will be used.
+ SQLite uses a cost-based query planner that estimates the CPU and
+ disk I/O costs of various competing query plans and chooses the plan
+ that it thinks will be the fastest. If there are many OR terms in
+ the WHERE clause or if some of the indexes on individual OR-clause
+ subterms are not very selective, then SQLite might decide that it is
+ faster to use a different query algorithm, or even a full-table scan.
+ Application developers can use the
+ <a href="lang_explain.html">EXPLAIN QUERY PLAN</a> prefix on a statement to get a
+ high-level overview of the chosen query strategy.
+
+<a name="like_opt"></a>
+
+</p><h1 id="the_like_optimization"><span>5. </span>The LIKE Optimization</h1>
+
+<p>
+ A WHERE-clause term that uses the <a href="lang_expr.html#like">LIKE</a> or <a href="lang_expr.html#glob">GLOB</a> operator
+ can sometimes be used with an index to do a range search,
+ almost as if the LIKE or GLOB were an alternative to a <a href="lang_expr.html#between">BETWEEN</a>
+ operator.
+ There are many conditions on this optimization:
+
+</p><p>
+ </p><ol>
+ <li>The right-hand side of the LIKE or GLOB must be either a string literal
+ or a <a href="lang_expr.html#varparam">parameter</a> bound to a string literal
+ that does not begin with a wildcard character.</li>
+ <li>It must not be possible to make the LIKE or GLOB operator true by
+ having a numeric value (instead of a string or blob) on the
+ left-hand side. This means that either:
+ <ol type="A">
+ <li> the left-hand side of the LIKE or GLOB operator is the name
+ of an indexed column with <a href="datatype3.html#affinity">TEXT affinity</a>, or</li>
+ <li> the right-hand side pattern argument does not begin with a
+ minus sign ("-") or a digit.</li>
+ </ol>
+ This constraint arises from the fact that numbers do not sort in
+ lexicographical order. For example: 9&lt;10 but '9'&gt;'10'.</li>
+ <li>The built-in functions used to implement LIKE and GLOB must not
+ have been overloaded using the <a href="c3ref/create_function.html">sqlite3_create_function()</a> API.</li>
+ <li>For the GLOB operator, the column must be indexed using the
+ built-in BINARY collating sequence.</li>
+ <li>For the LIKE operator, if <a href="pragma.html#pragma_case_sensitive_like">case_sensitive_like</a> mode is enabled then
+ the column must indexed using BINARY collating sequence, or if
+ <a href="pragma.html#pragma_case_sensitive_like">case_sensitive_like</a> mode is disabled then the column must indexed
+ using built-in NOCASE collating sequence.</li>
+ <li>If the ESCAPE option is used, the ESCAPE character must be ASCII,
+ or a single-byte character in UTF-8.
+ </li></ol>
+
+<p>
+ The LIKE operator has two modes that can be set by a
+ <a href="pragma.html#pragma_case_sensitive_like">pragma</a>. The
+ default mode is for LIKE comparisons to be insensitive to differences
+ of case for latin1 characters. Thus, by default, the following
+ expression is true:
+
+</p><div class="codeblock"><pre>'a' LIKE 'A'
+</pre></div>
+<p>
+ If the case_sensitive_like pragma is enabled as follows:
+
+</p><div class="codeblock"><pre>PRAGMA case_sensitive_like=ON;
+</pre></div>
+<p>
+ Then the LIKE operator pays attention to case and the example above would
+ evaluate to false. Note that case insensitivity only applies to
+ latin1 characters - basically the upper and lower case letters of English
+ in the lower 127 byte codes of ASCII. International character sets
+ are case sensitive in SQLite unless an application-defined
+ <a href="datatype3.html#collation">collating sequence</a> and <a href="lang_corefunc.html#like">like() SQL function</a> are provided that
+ take non-ASCII characters into account.
+ If an application-defined collating sequence and/or like() SQL
+ function are provided, the LIKE optimization described here will never
+ be taken.
+
+</p><p>
+ The LIKE operator is case insensitive by default because this is what
+ the SQL standard requires. You can change the default behavior at
+ compile time by using the <a href="compile.html#case_sensitive_like">SQLITE_CASE_SENSITIVE_LIKE</a> command-line option
+ to the compiler.
+
+</p><p>
+ The LIKE optimization might occur if the column named on the left of the
+ operator is indexed using the built-in BINARY collating sequence and
+ case_sensitive_like is turned on. Or the optimization might occur if
+ the column is indexed using the built-in NOCASE collating sequence and the
+ case_sensitive_like mode is off. These are the only two combinations
+ under which LIKE operators will be optimized.
+
+</p><p>
+ The GLOB operator is always case sensitive. The column on the left side
+ of the GLOB operator must always use the built-in BINARY collating sequence
+ or no attempt will be made to optimize that operator with indexes.
+
+</p><p>
+ The LIKE optimization will only be attempted if
+ the right-hand side of the GLOB or LIKE operator is either
+ literal string or a <a href="lang_expr.html#varparam">parameter</a> that has been <a href="c3ref/bind_blob.html">bound</a>
+ to a string literal. The string literal must not
+ begin with a wildcard; if the right-hand side begins with a wildcard
+ character then this optimization is not attempted. If the right-hand side
+ is a <a href="lang_expr.html#varparam">parameter</a> that is bound to a string, then this optimization is
+ only attempted if the <a href="c3ref/stmt.html">prepared statement</a> containing the expression
+ was compiled with <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> or <a href="c3ref/prepare.html">sqlite3_prepare16_v2()</a>.
+ The LIKE optimization is not attempted if the
+ right-hand side is a <a href="lang_expr.html#varparam">parameter</a> and the statement was prepared using
+ <a href="c3ref/prepare.html">sqlite3_prepare()</a> or <a href="c3ref/prepare.html">sqlite3_prepare16()</a>.
+
+</p><p>
+ Suppose the initial sequence of non-wildcard characters on the right-hand
+ side of the LIKE or GLOB operator is <i>x</i>. We are using a single
+ character to denote this non-wildcard prefix but the reader should
+ understand that the prefix can consist of more than 1 character.
+ Let <i>y</i> be the smallest string that is the same length as /x/ but which
+ compares greater than <i>x</i>. For example, if <i>x</i> is
+ <tt>'hello'</tt> then
+ <i>y</i> would be <tt>'hellp'</tt>.
+ The LIKE and GLOB optimizations consist of adding two virtual terms
+ like this:
+
+<blockquote><pre><b>
+ </b><i>column</i><b> &gt;= </b><i>x</i><b> AND </b><i>column</i><b> &lt; </b><i>y</i><b>
+</b></pre></blockquote>
+</p><p>
+ Under most circumstances, the original LIKE or GLOB operator is still
+ tested against each input row even if the virtual terms are used to
+ constrain an index. This is because we do not know what additional
+ constraints may be imposed by characters to the right
+ of the <i>x</i> prefix. However, if there is only a single
+ global wildcard to the right of <i>x</i>, then the original LIKE or
+ GLOB test is disabled.
+ In other words, if the pattern is like this:
+
+<blockquote><pre><b>
+ </b><i>column</i><b> LIKE </b><i>x</i><b>%
+ </b><i>column</i><b> GLOB </b><i>x</i><b>*
+</b></pre></blockquote>
+</p><p>
+ then the original LIKE or GLOB tests are disabled when the virtual
+ terms constrain an index because in that case we know that all of the
+ rows selected by the index will pass the LIKE or GLOB test.
+
+</p><p>
+ Note that when the right-hand side of a LIKE or GLOB operator is
+ a <a href="lang_expr.html#varparam">parameter</a> and the statement is prepared using <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
+ or <a href="c3ref/prepare.html">sqlite3_prepare16_v2()</a> then the statement is automatically reparsed
+ and recompiled on the first <a href="c3ref/step.html">sqlite3_step()</a> call of each run if the binding
+ to the right-hand side parameter has changed since the previous run.
+ This reparse and recompile is essentially the same action that occurs
+ following a schema change. The recompile is necessary so that the query
+ planner can examine the new value bound to the right-hand side of the
+ LIKE or GLOB operator and determine whether or not to employ the
+ optimization described above.
+
+<a name="skipscan"></a>
+
+</p><h1 id="the_skip_scan_optimization"><span>6. </span>The Skip-Scan Optimization</h1>
+
+<p>
+ The general rule is that indexes are only useful if there are
+ WHERE-clause constraints on the left-most columns of the index.
+ However, in some cases,
+ SQLite is able to use an index even if the first few columns of
+ the index are omitted from the WHERE clause but later columns
+ are included.
+
+
+</p><p>
+ Consider a table such as the following:
+
+</p><div class="codeblock"><pre>CREATE TABLE people(
+ name TEXT PRIMARY KEY,
+ role TEXT NOT NULL,
+ height INT NOT NULL, -- in cm
+ CHECK( role IN ('student','teacher') )
+);
+CREATE INDEX people_idx1 ON people(role, height);
+</pre></div>
+
+<p>
+ The people table has one entry for each person in a large
+ organization. Each person is either a "student" or a "teacher",
+ as determined by the "role" field. The table also records the height in
+ centimeters of each person. The role and height are indexed.
+ Notice that the left-most column of the index is not very
+ selective - it only contains two possible values.
+
+
+</p><p>
+ Now consider a query to find the names of everyone in the
+ organization that is 180cm tall or taller:
+
+
+</p><div class="codeblock"><pre>SELECT name FROM people WHERE height>=180;
+</pre></div>
+
+<p>
+ Because the left-most column of the index does not appear in the
+ WHERE clause of the query, one is tempted to conclude that the
+ index is not usable here. However, SQLite is able to use the index.
+ Conceptually, SQLite uses the index as if the query were more
+ like the following:
+
+
+</p><div class="codeblock"><pre>SELECT name FROM people
+ WHERE role IN (SELECT DISTINCT role FROM people)
+ AND height>=180;
+</pre></div>
+
+<p>
+ Or this:
+
+</p><div class="codeblock"><pre>SELECT name FROM people WHERE role='teacher' AND height>=180
+UNION ALL
+SELECT name FROM people WHERE role='student' AND height>=180;
+</pre></div>
+
+<p>
+ The alternative query formulations shown above are conceptual only.
+ SQLite does not really transform the query.
+ The actual query plan is like this:
+ SQLite locates the first possible value for "role", which it
+ can do by rewinding the "people_idx1" index to the beginning and reading
+ the first record. SQLite stores this first "role" value in an
+ internal variable that we will here call "$role". Then SQLite
+ runs a query like: "SELECT name FROM people WHERE role=$role AND height>=180".
+ This query has an equality constraint on the left-most column of the
+ index and so the index can be used to resolve that query. Once
+ that query is finished, SQLite then uses the "people_idx1" index to
+ locate the next value of the "role" column, using code that is logically
+ similar to "SELECT role FROM people WHERE role>$role LIMIT 1".
+ This new "role" value overwrites the $role variable, and the process
+ repeats until all possible values for "role" have been examined.
+
+</p><p>
+ We call this kind of index usage a "skip-scan" because the database
+ engine is basically doing a full scan of the index but it optimizes the
+ scan (making it less than "full") by occasionally skipping ahead to the
+ next candidate value.
+
+</p><p>
+ SQLite might use a skip-scan on an index if it knows that the first
+ one or more columns contain many duplication values.
+ If there are too few duplicates
+ in the left-most columns of the index, then it would
+ be faster to simply step ahead to the next value, and thus do
+ a full table scan, than to do a binary search on an index to locate
+ the next left-column value.
+
+</p><p>
+ The only way that SQLite can know that there are many duplicates
+ in the left-most columns of an index
+ is if the <a href="lang_analyze.html">ANALYZE</a> command has been run
+ on the database.
+ Without the results of ANALYZE, SQLite has to guess at the "shape" of
+ the data in the table, and the default guess is that there are an average
+ of 10 duplicates for every value in the left-most column of the index.
+ Skip-scan only becomes profitable (it only gets to be faster than
+ a full table scan) when the number of duplicates is about 18 or more.
+ Hence, a skip-scan is never used on a database that has not been analyzed.
+
+<a name="joins"></a>
+
+</p><h1 id="joins"><span>7. </span>Joins</h1>
+
+<p>
+ The ON and USING clauses of an inner join are converted into additional
+ terms of the WHERE clause prior to WHERE clause analysis described
+ <a href="#where_clause">above in paragraph 2.0</a>.
+ Thus with SQLite, there is no computational
+ advantage to use the newer SQL92 join syntax
+ over the older SQL89 comma-join syntax. They both end up accomplishing
+ exactly the same thing on inner joins.
+
+</p><p>
+ For an OUTER JOIN the situation is more complex. The following
+ two queries are not equivalent:
+
+</p><div class="codeblock"><pre>SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.x=tab2.y;
+SELECT * FROM tab1 LEFT JOIN tab2 WHERE tab1.x=tab2.y;
+</pre></div>
+<p>
+ For an inner join, the two queries above would be identical. However,
+ special processing applies to the ON and USING clauses of an OUTER join:
+ specifically, the constraints in an ON or USING clause do not apply if
+ the right table of the join is on a null row, but the constraints do apply
+ in the WHERE clause. The net effect is that putting the ON or USING
+ clause expressions for a LEFT JOIN in the WHERE clause effectively converts
+ the query to an
+ ordinary INNER JOIN - albeit an inner join that runs more slowly.
+
+<a name="table_order"></a>
+
+</p><h2 id="order_of_tables_in_a_join"><span>7.1. </span>Order of Tables in a Join</h2>
+
+<p>
+ The current implementation of
+ SQLite uses only loop joins. That is to say, joins are implemented as
+ nested loops.
+
+</p><p>
+ The default order of the nested loops in a join is for the left-most
+ table in the FROM clause to form the outer loop and the right-most
+ table to form the inner loop.
+ However, SQLite will nest the loops in a different order if doing so
+ will help it to select better indexes.
+
+</p><p>
+ Inner joins can be freely reordered. However a left outer join is
+ neither commutative nor associative and hence will not be reordered.
+ Inner joins to the left and right of the outer join might be reordered
+ if the optimizer thinks that is advantageous but the outer joins are
+ always evaluated in the order in which they occur.
+
+</p><p>
+ SQLite <a href="lang_select.html#crossjoin">treats the CROSS JOIN operator specially</a>.
+ The CROSS JOIN operator is commutative, in theory. However, SQLite chooses to
+ never reorder tables in a CROSS JOIN. This provides a mechanism
+ by which the programmer can force SQLite to choose a particular loop nesting
+ order.
+
+</p><p>
+ When selecting the order of tables in a join, SQLite uses an efficient
+ polynomial-time algorithm. Because of this,
+ SQLite is able to plan queries with 50- or 60-way joins in a matter of
+ microseconds
+
+</p><p>
+ Join reordering is automatic and usually works well enough that
+ programmers do not have to think about it, especially if <a href="lang_analyze.html">ANALYZE</a>
+ has been used to gather statistics about the available indexes,
+ though occasionally some hints from the programmer are needed.
+ Consider, for example, the following schema:
+
+</p><div class="codeblock"><pre>CREATE TABLE node(
+ id INTEGER PRIMARY KEY,
+ name TEXT
+);
+CREATE INDEX node_idx ON node(name);
+CREATE TABLE edge(
+ orig INTEGER REFERENCES node,
+ dest INTEGER REFERENCES node,
+ PRIMARY KEY(orig, dest)
+);
+CREATE INDEX edge_idx ON edge(dest,orig);
+</pre></div>
+<p>
+ The schema above defines a directed graph with the ability to store a
+ name at each node. Now consider a query against this schema:
+
+</p><div class="codeblock"><pre>SELECT *
+ FROM edge AS e,
+ node AS n1,
+ node AS n2
+ WHERE n1.name = 'alice'
+ AND n2.name = 'bob'
+ AND e.orig = n1.id
+ AND e.dest = n2.id;
+</pre></div>
+<p>
+ This query asks for is all information about edges that go from
+ nodes labeled "alice" to nodes labeled "bob".
+ The query optimizer in SQLite has basically two choices on how to
+ implement this query. (There are actually six different choices, but
+ we will only consider two of them here.)
+ Pseudocode below demonstrating these two choices.
+
+<a name="option1"></a>
+
+</p><p>Option 1:
+</p><div class="codeblock"><pre>foreach n1 where n1.name='alice' do:
+ foreach n2 where n2.name='bob' do:
+ foreach e where e.orig=n1.id and e.dest=n2.id
+ return n1.*, n2.*, e.*
+ end
+ end
+end
+</pre></div>
+<a name="option2"></a>
+
+<p>Option 2:
+</p><div class="codeblock"><pre>foreach n1 where n1.name='alice' do:
+ foreach e where e.orig=n1.id do:
+ foreach n2 where n2.id=e.dest and n2.name='bob' do:
+ return n1.*, n2.*, e.*
+ end
+ end
+end
+</pre></div>
+<p>
+ The same indexes are used to speed up every loop in both implementation
+ options.
+ The only difference in these two query plans is the order in which
+ the loops are nested.
+
+</p><p>
+ So which query plan is better? It turns out that the answer depends on
+ what kind of data is found in the node and edge tables.
+
+</p><p>
+ Let the number of alice nodes be M and the number of bob nodes be N.
+ Consider two scenarios. In the first scenario, M and N are both 2 but
+ there are thousands of edges on each node. In this case, option 1 is
+ preferred. With option 1, the inner loop checks for the existence of
+ an edge between a pair of nodes and outputs the result if found.
+ Because there are only 2 alice and bob nodes each, the inner loop
+ only has to run four times and the query is very quick. Option 2 would
+ take much longer here. The outer loop of option 2 only executes twice,
+ but because there are a large number of edges leaving each alice node,
+ the middle loop has to iterate many thousands of times. It will be
+ much slower. So in the first scenario, we prefer to use option 1.
+
+</p><p>
+ Now consider the case where M and N are both 3500. Alice nodes are
+ abundant. This time suppose each of these nodes is connected by only one
+ or two edges. Now option 2 is preferred. With option 2,
+ the outer loop still has to run 3500 times, but the middle loop only
+ runs once or twice for each outer loop and the inner loop will only
+ run once for each middle loop, if at all. So the total number of
+ iterations of the inner loop is around 7000. Option 1, on the other
+ hand, has to run both its outer loop and its middle loop 3500 times
+ each, resulting in 12 million iterations of the middle loop.
+ Thus in the second scenario, option 2 is nearly 2000 times faster
+ than option 1.
+
+</p><p>
+ So you can see that depending on how the data is structured in the table,
+ either query plan 1 or query plan 2 might be better. Which plan does
+ SQLite choose by default? As of version 3.6.18, without running <a href="lang_analyze.html">ANALYZE</a>,
+ SQLite will choose option 2.
+ If the <a href="lang_analyze.html">ANALYZE</a> command is run in order to gather statistics,
+ a different choice might be made if the statistics indicate that the
+ alternative is likely to run faster.
+
+<a name="manctrl"></a>
+
+</p><h2 id="manual_control_of_query_plans_using_sqlite_stat_tables"><span>7.2. </span>Manual Control Of Query Plans Using SQLITE_STAT Tables</h2>
+
+<p>
+ SQLite provides the ability for advanced programmers to exercise control
+ over the query plan chosen by the optimizer. One method for doing this
+ is to fudge the <a href="lang_analyze.html">ANALYZE</a> results in the <a href="fileformat2.html#stat1tab">sqlite_stat1</a>,
+ <a href="fileformat2.html#stat3tab">sqlite_stat3</a>, and/or <a href="fileformat2.html#stat4tab">sqlite_stat4</a> tables. This is not
+ recommended for most situations.
+
+<a name="crossjoin"></a>
+
+</p><h2 id="manual_control_of_query_plans_using_cross_join"><span>7.3. </span>Manual Control of Query Plans using CROSS JOIN</h2>
+
+<p>
+ Programmers can force SQLite to use a particular loop nesting order
+ for a join by using the CROSS JOIN operator instead of just JOIN,
+ INNER JOIN, NATURAL JOIN, or a "," join. Though CROSS JOINs are
+ commutative in theory, SQLite chooses to never reorder the tables in
+ a CROSS JOIN. Hence, the left table of a CROSS JOIN will always be
+ in an outer loop relative to the right table.
+
+</p><p>
+ In the following query, the optimizer is free to reorder the
+ tables of FROM clause any way it sees fit:
+
+</p><div class="codeblock"><pre>SELECT *
+ FROM node AS n1,
+ edge AS e,
+ node AS n2
+ WHERE n1.name = 'alice'
+ AND n2.name = 'bob'
+ AND e.orig = n1.id
+ AND e.dest = n2.id;
+</pre></div>
+<p>
+ In the following logically equivalent formulation of the same query,
+ the substitution of "CROSS JOIN" for the "," means that the order
+ of tables must be N1, E, N2.
+
+</p><div class="codeblock"><pre>SELECT *
+ FROM node AS n1 CROSS JOIN
+ edge AS e CROSS JOIN
+ node AS n2
+ WHERE n1.name = 'alice'
+ AND n2.name = 'bob'
+ AND e.orig = n1.id
+ AND e.dest = n2.id;
+</pre></div>
+<p>
+ In the latter query, the query plan must be
+ <a href="#option2">option 2</a>. Note that
+ you must use the keyword "CROSS" in order to disable the table reordering
+ optimization; INNER JOIN, NATURAL JOIN, JOIN, and other similar
+ combinations work just like a comma join in that the optimizer is
+ free to reorder tables as it sees fit. (Table reordering is also
+ disabled on an outer join, but that is because outer joins are not
+ associative or commutative. Reordering tables in OUTER JOIN changes
+ the result.)
+
+</p><p>
+ See "<a href="queryplanner-ng.html#fossilcasestudy">The Fossil NGQP Upgrade Case Study</a>" for another real-world example
+ of using CROSS JOIN to manually control the nesting order of a join.
+ The <a href="queryplanner-ng.html#howtofix">query planner checklist</a> found later in the same document provides
+ further guidance on manual control of the query planner.
+
+<a name="multi_index"></a>
+
+</p><h1 id="choosing_between_multiple_indexes"><span>8. </span>Choosing Between Multiple Indexes</h1>
+
+<p>
+ Each table in the FROM clause of a query can use at most one index
+ (except when the <a href="#or_opt">OR-clause optimization</a> comes into
+ play)
+ and SQLite strives to use at least one index on each table. Sometimes,
+ two or more indexes might be candidates for use on a single table.
+ For example:
+
+</p><div class="codeblock"><pre>CREATE TABLE ex2(x,y,z);
+CREATE INDEX ex2i1 ON ex2(x);
+CREATE INDEX ex2i2 ON ex2(y);
+SELECT z FROM ex2 WHERE x=5 AND y=6;
+</pre></div>
+<p>
+ For the SELECT statement above, the optimizer can use the ex2i1 index
+ to lookup rows of ex2 that contain x=5 and then test each row against
+ the y=6 term. Or it can use the ex2i2 index to lookup rows
+ of ex2 that contain y=6 then test each of those rows against the
+ x=5 term.
+
+</p><p>
+ When faced with a choice of two or more indexes, SQLite tries to estimate
+ the total amount of work needed to perform the query using each option.
+ It then selects the option that gives the least estimated work.
+
+</p><p>
+ To help the optimizer get a more accurate estimate of the work involved
+ in using various indexes, the user may optionally run the <a href="lang_analyze.html">ANALYZE</a> command.
+ The <a href="lang_analyze.html">ANALYZE</a> command scans all indexes of database where there might
+ be a choice between two or more indexes and gathers statistics on the
+ selectiveness of those indexes. The statistics gathered by
+ this scan are stored in special database tables names shows names all
+ begin with "<b>sqlite_stat</b>".
+ The content of these tables is not updated as the database
+ changes so after making significant changes it might be prudent to
+ rerun <a href="lang_analyze.html">ANALYZE</a>.
+ The results of an ANALYZE command are only available to database connections
+ that are opened after the ANALYZE command completes.
+
+</p><p>
+ The various <b>sqlite_stat</b><i>N</i> tables contain information on how
+ selective the various indexes are. For example, the <a href="fileformat2.html#stat1tab">sqlite_stat1</a>
+ table might indicate that an equality constraint on column x reduces the
+ search space to 10 rows on average, whereas an equality constraint on
+ column y reduces the search space to 3 rows on average. In that case,
+ SQLite would prefer to use index ex2i2 since that index is more selective.
+
+<a name="uplus"></a>
+
+</p><h2 id="disqualifying_where_clause_terms_using_unary_"><span>8.1. </span>Disqualifying WHERE Clause Terms using Unary-"+"</h2>
+
+<p>
+ Terms of the WHERE clause can be manually disqualified for use with
+ indexes by prepending a unary <b>+</b> operator to the column name. The
+ unary <b>+</b> is a no-op and will not generate any byte code in the prepared
+ statement.
+ However, the unary <b>+</b> operator will prevent the term from
+ constraining an index.
+ So, in the example above, if the query were rewritten as:
+
+</p><div class="codeblock"><pre>SELECT z FROM ex2 WHERE +x=5 AND y=6;
+</pre></div>
+<p>
+ The <b>+</b> operator on the <b>x</b> column will prevent that term from
+ constraining an index. This would force the use of the ex2i2 index.
+
+</p><p>
+ Note that the unary <b>+</b> operator also removes
+ <a href="datatype3.html#affinity">type affinity</a> from
+ an expression, and in some cases this can cause subtle changes in
+ the meaning of an expression.
+ In the example above,
+ if column <b>x</b> has <a href="datatype3.html#affinity">TEXT affinity</a>
+ then the comparison "x=5" will be done as text. The <b>+</b> operator
+ removes the affinity. So the comparison "<b>+x=5</b>" will compare the text
+ in column <b>x</b> with the numeric value 5 and will always be false.
+
+<a name="rangequery"></a>
+
+</p><h2 id="range_queries"><span>8.2. </span>Range Queries</h2>
+
+<p>
+ Consider a slightly different scenario:
+
+</p><div class="codeblock"><pre>CREATE TABLE ex2(x,y,z);
+CREATE INDEX ex2i1 ON ex2(x);
+CREATE INDEX ex2i2 ON ex2(y);
+SELECT z FROM ex2 WHERE x BETWEEN 1 AND 100 AND y BETWEEN 1 AND 100;
+</pre></div>
+<p>
+ Further suppose that column x contains values spread out
+ between 0 and 1,000,000 and column y contains values
+ that span between 0 and 1,000. In that scenario,
+ the range constraint on column x should reduce the search space by
+ a factor of 10,000 whereas the range constraint on column y should
+ reduce the search space by a factor of only 10. So the ex2i1 index
+ should be preferred.
+
+</p><p>
+ SQLite will make this determination, but only if it has been compiled
+ with <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> or <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>.
+ The <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> and <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> options causes
+ the <a href="lang_analyze.html">ANALYZE</a> command to collect a histogram of column content in the
+ <a href="fileformat2.html#stat3tab">sqlite_stat3</a> or <a href="fileformat2.html#stat4tab">sqlite_stat4</a> tables and to use this histogram to
+ make a better guess at the best query to use for range constraints
+ such as the above. The main difference between STAT3 and STAT4 is
+ that STAT3 records histogram data for only the left-most column of
+ an index whereas STAT4 records histogram data for all columns of an
+ index. For single-column indexes, STAT3 and STAT4 work the same.
+
+</p><p>
+ The histogram data is only useful if the right-hand side of the constraint
+ is a simple compile-time constant or <a href="lang_expr.html#varparam">parameter</a> and not an expression.
+
+</p><p>
+ Another limitation of the histogram data is that it only applies to the
+ left-most column on an index. Consider this scenario:
+
+</p><div class="codeblock"><pre>CREATE TABLE ex3(w,x,y,z);
+CREATE INDEX ex3i1 ON ex2(w, x);
+CREATE INDEX ex3i2 ON ex2(w, y);
+SELECT z FROM ex3 WHERE w=5 AND x BETWEEN 1 AND 100 AND y BETWEEN 1 AND 100;
+</pre></div>
+<p>
+ Here the inequalities are on columns x and y which are not the
+ left-most index columns. Hence, the histogram data which is collected no
+ left-most column of indexes is useless in helping to choose between the
+ range constraints on columns x and y.
+
+<a name="covidx"></a>
+
+</p><h1 id="covering_indexes"><span>9. </span>Covering Indexes</h1>
+
+<p>
+ When doing an indexed lookup of a row, the usual procedure is to
+ do a binary search on the index to find the index entry, then extract
+ the <a href="lang_createtable.html#rowid">rowid</a> from the index and use that <a href="lang_createtable.html#rowid">rowid</a> to do a binary search on
+ the original table. Thus a typical indexed lookup involves two
+ binary searches.
+ If, however, all columns that were to be fetched from the table are
+ already available in the index itself, SQLite will use the values
+ contained in the index and will never look up the original table
+ row. This saves one binary search for each row and can make many
+ queries run twice as fast.
+
+</p><p>
+ When an index contains all of the data needed for a query and when the
+ original table never needs to be consulted, we call that index a
+ "covering index".
+
+<a name="order_by"></a>
+
+</p><h1 id="order_by_optimizations"><span>10. </span>ORDER BY Optimizations</h1>
+
+<p>
+ SQLite attempts to use an index to satisfy the ORDER BY clause of a
+ query when possible.
+ When faced with the choice of using an index to satisfy WHERE clause
+ constraints or satisfying an ORDER BY clause, SQLite does the same
+ cost analysis described above
+ and chooses the index that it believes will result in the fastest answer.
+
+</p><p>
+ SQLite will also attempt to use indexes to help satisfy GROUP BY clauses
+ and the DISTINCT keyword. If the nested loops of the join can be arranged
+ such that rows that are equivalent for the GROUP BY or for the DISTINCT are
+ consecutive, then the GROUP BY or DISTINCT logic can determine if the
+ current row is part of the same group or if the current row is distinct
+ simply by comparing the current row to the previous row.
+ This can be much faster than the alternative of comparing each row to
+ all prior rows.
+
+<a name="partsort"></a>
+
+</p><h2 id="partial_order_by_via_index"><span>10.1. </span>Partial ORDER BY via Index</h2>
+
+<p>
+ If a query contains an ORDER BY clause with multiple terms, it might
+ be that SQLite can use indexes to cause rows to come out in the order
+ of some prefix of the terms in the ORDER BY but that later terms in
+ the ORDER BY are not satisfied. In that case, SQLite does block sorting.
+ Suppose the ORDER BY clause has four terms and the natural order of the
+ query results in rows appearing in order of the first two terms. As
+ each row is output by the query engine and enters the sorter, the
+ outputs in the current row corresponding to the first two terms of
+ the ORDER BY are compared against the previous row. If they have
+ changed, the current sort is finished and output and a new sort is
+ started. This results in a slightly faster sort. Event bigger
+ advantages are that many fewer rows need to be held in memory,
+ reducing memory requirements, and outputs can begin to appear before
+ the core query has run to completion.
+
+<a name="flattening"></a>
+
+</p><h1 id="subquery_flattening"><span>11. </span>Subquery Flattening</h1>
+
+<p>
+ When a subquery occurs in the FROM clause of a SELECT, the simplest
+ behavior is to evaluate the subquery into a transient table, then run
+ the outer SELECT against the transient table. Such a plan
+ can be suboptimal since the transient table will not have any indexes
+ and the outer query (which is likely a join) will be forced to do a
+ full table scan on the transient table.
+
+</p><p>
+ To overcome this problem, SQLite attempts to flatten subqueries in
+ the FROM clause of a SELECT.
+ This involves inserting the FROM clause of the subquery into the
+ FROM clause of the outer query and rewriting expressions in
+ the outer query that refer to the result set of the subquery.
+ For example:
+
+</p><div class="codeblock"><pre>SELECT t1.a, t2.b FROM t2, (SELECT x+y AS a FROM t1 WHERE z&lt;100) WHERE a&gt;5
+</pre></div>
+<p>
+ Would be rewritten using query flattening as:
+
+</p><div class="codeblock"><pre>SELECT t1.x+t1.y AS a, t2.b FROM t2, t1 WHERE z&lt;100 AND a&gt;5
+</pre></div>
+<p>
+ There is a long list of conditions that must all be met in order for
+ query flattening to occur. Some of the constraints are marked as
+ obsolete by italic text. These extra constraints are retained in the
+ documentation to preserve the numbering of the other constraints.
+
+</p><p>
+ Casual readers are not expected to understand all of these rules.
+ A key take-away from this section is that the rules for determining
+ if query flatting is safe or unsafe are subtle and
+ complex. There have been multiple bugs over the years caused by
+ over-aggressive query flattening. On the other hand, performance
+ of complex queries and/or queries involving views tends to suffer
+ if query flattening is more conservative.
+
+</p><p>
+ </p><ol>
+ <li value="1"> <i>(Obsolete. Query flattening is no longer
+ attempted for aggregate subqueries.)</i>
+
+ </li><li value="2"> <i>(Obsolete. Query flattening is no longer
+ attempted for aggregate subqueries.)</i>
+
+ </li><li value="3">
+ If the subquery is the right operand of a LEFT JOIN then
+ <ol type="a"><li> the subquery may not be a join, and
+ </li><li> the FROM clause of the subquery may
+ not contain a virtual table, and
+ </li><li> the outer query may not be an aggregate.</li></ol></li>
+
+ <li value="4"> The subquery is not DISTINCT.
+
+ </li><li value="5"> <i>(Subsumed into constraint 4)</i>
+
+ </li><li value="6"> <i>(Obsolete. Query flattening is no longer
+ attempted for aggregate subqueries.)</i>
+
+ </li><li value="7">
+ The subquery has a FROM clause.
+
+ </li><li value="8">
+ The subquery does not use LIMIT or the outer query is not a join.
+
+ </li><li value="9">
+ The subquery does not use LIMIT or the outer query does not use
+ aggregates.
+
+ </li><li value="10"> <i>(Restriction relaxed in 2005)</i>
+
+ </li><li value="11">
+ The subquery and the outer query do not both have ORDER BY clauses.
+
+ </li><li value="12"> <i>(Subsumed into constraint 3)</i>
+
+ </li><li value="13"> The subquery and outer query do not both use LIMIT.
+
+ </li><li value="14"> The subquery does not use OFFSET.
+
+ </li><li value="15">
+ If the outer query is part of a compound select, then the
+ subquery may not have a LIMIT clause.
+
+ </li><li value="16">
+ If the outer query is an aggregate, then the subquery may
+ not contain ORDER BY.
+
+ </li><li value="17">
+ If the sub-query is a compound SELECT, then
+ <ol type="a">
+ <li> all compound operators must be UNION ALL, and
+ </li><li> no terms with the subquery compound may be aggregate
+ or DISTINCT, and
+ </li><li> every term within the subquery must have a FROM clause, and
+ </li><li> the outer query may not be an aggregate, DISTINCT query, or join.
+ </li></ol>
+
+ The parent and sub-query may contain WHERE clauses. Subject to
+ rules (11), (12) and (13), they may also contain ORDER BY,
+ LIMIT and OFFSET clauses.
+
+ </li><li value="18">
+ If the sub-query is a compound select, then all terms of the
+ ORDER by clause of the parent must be simple references to
+ columns of the sub-query.
+
+ </li><li value="19">
+ If the subquery uses LIMIT then the outer query may not
+ have a WHERE clause.
+
+ </li><li value="20">
+ If the sub-query is a compound select, then it must not use
+ an ORDER BY clause.
+
+ </li><li value="21">
+ If the subquery uses LIMIT, then the outer query may not be
+ DISTINCT.
+
+ </li><li value="22"> The subquery may not be a recursive CTE.
+
+ </li><li value="23"> <i>(Subsumed into constraint 17d.)</i>
+
+ </li><li value="24"> <i>(Obsolete. Query flattening is no longer
+ attempted for aggregate subqueries.)</i>
+ </li></ol>
+
+
+<p>
+ Query flattening is an important optimization when views are used as
+ each use of a view is translated into a subquery.
+
+<a name="coroutines"></a>
+
+</p><h1 id="subquery_co_routines"><span>12. </span>Subquery Co-routines</h1>
+
+<p>
+ Prior to SQLite 3.7.15 (2012-12-12),
+ a subquery in the FROM clause would be
+ either flattened into the outer query, or else the subquery would be run
+ to completion
+ before the outer query started, the result set from the subquery
+ would be stored in a transient table,
+ and then the transient table would be used in the outer query. Newer
+ versions of SQLite have a third option, which is to implement the subquery
+ using a co-routine.
+
+</p><p>
+ A co-routine is like a subroutine in that it runs in the same thread
+ as the caller and eventually returns control back to the caller. The
+ difference is that a co-routine also has the ability to return
+ before it has finished, and then resume where it left off the next
+ time it is called.
+
+</p><p>
+ When a subquery is implemented as a co-routine, byte-code is generated
+ to implement the subquery as if it were a standalone query, except
+ instead of returning rows of results back to the application, the
+ co-routine yields control back to the caller after each row is computed.
+ The caller can then use that one computed row as part of its computation,
+ then invoke the co-routine again when it is ready for the next row.
+
+</p><p>
+ Co-routines are better than storing the complete result set of the subquery
+ in a transient table because co-routines use less memory. With a co-routine,
+ only a single row of the result needs to be remembered, whereas all rows of
+ the result must be stored for a transient table. Also, because the
+ co-routine does not need to run to completion before the outer query
+ begins its work, the first rows of output can appear much sooner, and if
+ the overall query is aborted, less work is done overall.
+
+</p><p>
+ On the other hand, if the result of the subquery must be scanned multiple
+ times (because, for example, it is just one table in a join) then it
+ is better to use a transient table to remember the entire result of the
+ subquery, in order to avoid computing the subquery more than once.
+
+<a name="deferred_work"></a>
+
+</p><h2 id="using_co_routines_to_defer_work_until_after_the_sorting"><span>12.1. </span>Using Co-routines to Defer Work until after the Sorting</h2>
+
+<p>
+ As of SQLite version 3.21.0 (2017-10-24), the query planner will
+ always prefer to use a co-routine to implement FROM-clause subqueries
+ that contains an ORDER BY clause and that are not part of a join when
+ the result set of the outer query is "complex". This feature allows
+ applications to shift expensive computations from before the
+ sorter until after the sorter, which can result in faster operation.
+ For example, consider this query:
+
+</p><div class="codeblock"><pre>SELECT expensive_function(a) FROM tab ORDER BY date DESC LIMIT 5;
+</pre></div>
+<p>
+ The goal of this query is to compute some value for the five most
+ recent entries in the table. In the query above, the
+ "expensive_function()" is invoked prior to the sort and thus is
+ invoked on every row of the table, even
+ rows that are ultimately omitted due to the LIMIT clause.
+ A co-routine can be used to work around this:
+
+</p><div class="codeblock"><pre>SELECT expensive_function(a) FROM (
+ SELECT a FROM tab ORDER BY date DESC LIMIT 5
+);
+</pre></div>
+<p>
+ In the revised query, the subquery implemented by a co-routine computes
+ the five most recent values for "a". Those five values are passed from the
+ co-routine up into the outer query where the "expensive_function()" is
+ invoked on only the specific rows that the application cares about.
+
+</p><p>
+ The query planner in future versions of SQLite might grow smart enough
+ to make transformations such as the above automatically, in both directions.
+ That is to say, future versions of SQLite might transform queries of the
+ first form into the second, or queries written the second way into the
+ first. As of SQLite version 3.22.0 (2018-01-22), the query planner
+ will flatten the subquery if the outer query does not make use of any
+ user-defined functions or subqueries in its result set. For the examples
+ shown above, however, SQLite implements each of the queries as
+ written.
+
+<a name="minmax"></a>
+
+</p><h1 id="the_min_max_optimization"><span>13. </span>The MIN/MAX Optimization</h1>
+
+<p>
+ Queries that contain a single MIN() or MAX() aggregate function whose
+ argument is the left-most column of an index might be satisfied
+ by doing a single index lookup rather than by scanning the entire table.
+ Examples:
+
+</p><div class="codeblock"><pre>SELECT MIN(x) FROM table;
+SELECT MAX(x)+1 FROM table;
+</pre></div>
+
+<a name="autoindex"></a>
+
+<h1 id="automatic_indexes"><span>14. </span>Automatic Indexes</h1>
+
+<p>
+ When no indexes are available to aid the evaluation of a query, SQLite
+ might create an automatic index that lasts only for the duration
+ of a single SQL statement.
+ Since the cost of constructing the automatic index is
+ O(NlogN) (where N is the number of entries in the table) and the cost of
+ doing a full table scan is only O(N), an automatic index will
+ only be created if SQLite expects that the lookup will be run more than
+ logN times during the course of the SQL statement. Consider an example:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(a,b);
+CREATE TABLE t2(c,d);
+-- Insert many rows into both t1 and t2
+SELECT * FROM t1, t2 WHERE a=c;
+</pre></div>
+<p>
+ In the query above, if both t1 and t2 have approximately N rows, then
+ without any indexes the query will require O(N*N) time. On the other
+ hand, creating an index on table t2 requires O(NlogN) time and using
+ that index to evaluate the query requires an additional O(NlogN) time.
+ In the absence of <a href="lang_analyze.html">ANALYZE</a> information, SQLite guesses that N is one
+ million and hence it believes that constructing the automatic index will
+ be the cheaper approach.
+
+</p><p>
+ An automatic index might also be used for a subquery:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(a,b);
+CREATE TABLE t2(c,d);
+-- Insert many rows into both t1 and t2
+SELECT a, (SELECT d FROM t2 WHERE c=b) FROM t1;
+</pre></div>
+<p>
+ In this example, the t2 table is used in a subquery to translate values
+ of the t1.b column. If each table contains N rows, SQLite expects that
+ the subquery will run N times, and hence it will believe it is faster
+ to construct an automatic, transient index on t2 first and then use
+ that index to satisfy the N instances of the subquery.
+
+</p><p>
+ The automatic indexing capability can be disabled at run-time using
+ the <a href="pragma.html#pragma_automatic_index">automatic_index pragma</a>. Automatic indexing is turned on by
+ default, but this can be changed so that automatic indexing is off
+ by default using the <a href="compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a> compile-time option.
+ The ability to create automatic indexes can be completely disabled by
+ compiling with the <a href="compile.html#omit_automatic_index">SQLITE_OMIT_AUTOMATIC_INDEX</a> compile-time option.
+
+</p><p>
+ In SQLite <a href="releaselog/3_8_0.html">version 3.8.0</a> (2013-08-26) and later,
+ an <a href="rescode.html#warning_autoindex">SQLITE_WARNING_AUTOINDEX</a> message is sent
+ to the <a href="errlog.html">error log</a> every time a statement is prepared that uses an
+ automatic index. Application developers can and should use these warnings
+ to identify the need for new persistent indexes in the schema.
+
+</p><p>
+ Do not confuse automatic indexes with the <a href="fileformat2.html#intschema">internal indexes</a> (having names
+ like "sqlite_autoindex_<i>table</i>_<i>N</i>") that are sometimes
+ created to implement a <a href="lang_createtable.html#primkeyconst">PRIMARY KEY constraint</a> or <a href="lang_createtable.html#uniqueconst">UNIQUE constraint</a>.
+ The automatic indexes described here exist only for the duration of a
+ single query, are never persisted to disk, and are only visible to a
+ single database connection. Internal indexes are part of the implementation
+ of PRIMARY KEY and UNIQUE constraints, are long-lasting and persisted
+ to disk, and are visible to all database connections. The term "autoindex"
+ appears in the names of <a href="fileformat2.html#intschema">internal indexes</a> for legacy reasons and does
+ not indicate that internal indexes and automatic indexes are related.
+
+<a name="hashjoin"></a>
+
+</p><h2 id="hash_joins"><span>14.1. </span>Hash Joins</h2>
+
+<p>
+ An automatic index is about the same thing as a
+ <a href="https://en.wikipedia.org/wiki/Hash_join">hash join</a>. The only difference
+ is that a B-Tree is used instead of a hash table. If you are willing to
+ say that the transient B-Tree constructed for an automatic index is
+ really just a fancy hash table, then a query that uses an automatic
+ index is just a hash join.
+
+</p><p>
+ SQLite constructs an transient index instead of a hash table in this
+ instance because it already has a robust and high performance B-Tree
+ implementation at hand, whereas a hash-table would need to be added.
+ Adding a separate hash table implementation to handle this one case
+ would increase the size of the library (which is designed for use on
+ low-memory embedded devices) for minimal performance gain. SQLite might
+ be enhanced with a hash-table implementation someday, but for now it seems
+ better to continue using automatic indexes in cases where client/server
+ database engines might use a hash join.
+
+<a name="pushdown"></a>
+
+</p><h1 id="the_push_down_optimization"><span>15. </span>The Push-Down Optimization</h1>
+
+<p>
+ If a subquery cannot be <a href="optoverview.html#flattening">flattened</a> into the outer query, it might
+ still be possible to enhance performance by "pushing down" WHERE clause
+ terms from the outer query into the subquery. Consider an example:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(a INT, b INT);
+CREATE TABLE t2(x INT, y INT);
+CREATE VIEW v1(a,b) AS SELECT DISTINCT a, b FROM t1;
+
+SELECT x, y, b
+ FROM t2 JOIN v1 ON (x=a)
+ WHERE b BETWEEN 10 AND 20;
+</pre></div>
+
+<p>
+ The view v1 cannot be <a href="optoverview.html#flattening">flattened</a> because it is DISTINCT. It must
+ instead be run as a subquery with the results being stored in a
+ transient table, then the join is performed between t2 and the
+ transient table. The push-down optimization pushes down the
+ "b BETWEEN 10 AND 20" term into the view. This makes the transient
+ table smaller, and helps the subquery to run faster if there
+ is an index on t1.b. The resulting evaluation is like this:
+
+</p><div class="codeblock"><pre>SELECT x, y, b
+ FROM t2
+ JOIN (SELECT DISTINCT a, b FROM t1 WHERE b BETWEEN 10 AND 20)
+ WHERE b BETWEEN 10 AND 20;
+</pre></div>
+
+<p>
+ The push-down optimization cannot always be used. For example,
+ if the subquery contains a LIMIT, then pushing down any part of
+ the WHERE clause from the outer query could change the result of
+ the inner query. There are other restrictions, explained in a
+ comment in the source code on the pushDownWhereTerms() routine
+ that implements this optimization.
+
+<a name="leftjoinreduction"></a>
+
+</p><h1 id="the_left_join_strength_reduction_optimization"><span>16. </span>The LEFT JOIN Strength Reduction Optimization</h1>
+
+<p>
+ A LEFT JOIN can sometimes be converted into an ordinary JOIN
+ if there are terms in the WHERE clause that guarantee that the
+ two joins will give identical results. In particular, if any
+ column in the right-hand table of the LEFT JOIN must be non-NULL
+ in order for the WHERE clause to be true, then the LEFT JOIN is
+ demoted to an ordinary JOIN.
+
+</p><p>
+ The prover that determines whether any column of the right-hand
+ table of a LEFT JOIN must be non-NULL in the WHERE clause is
+ imperfect. It sometimes returns a false negative. In other words,
+ it sometimes fails to reduce the strength of a LEFT JOIN when doing
+ so was in fact possible. For example, the prover does not know
+ the <a href="lang_datefunc.html">datetime() SQL function</a> will always return NULL if its first
+ argument is NULL, and so it will not recognize that the LEFT JOIN
+ in the following query could be strength-reduced:
+
+</p><div class="codeblock"><pre>SELECT urls.url
+ FROM urls
+ LEFT JOIN
+ (SELECT *
+ FROM (SELECT url_id AS uid, max(retrieval_time) AS rtime
+ FROM lookups GROUP BY 1 ORDER BY 1)
+ WHERE uid IN (358341,358341,358341)
+ ) recent
+ ON u.source_seed_id = recent.xyz OR u.url_id = recent.xyz
+ WHERE
+ DATETIME(recent.rtime) > DATETIME('now', '-5 days');
+</pre></div>
+
+<p>
+ It is possible that future enhancements to the prover might enable it
+ to recognize that NULL inputs to certain built-in functions
+ always result in a NULL answer. However, not all built-in
+ functions have that property (for example <a href="lang_corefunc.html#coalesce">coalesce()</a>) and, of
+ course, the prover will never be able to reason about
+ <a href="appfunc.html">application-defined SQL functions</a>.
+
+
+<a name="omitnoopjoin"></a>
+
+</p><h1 id="the_omit_left_join_optimization"><span>17. </span>The Omit LEFT JOIN Optimization</h1>
+
+<p>
+ Sometimes a LEFT JOIN can be completely omitted from a query without
+ changing the result. This can happen if all of the following are
+ true:
+
+</p><p>
+ </p><ol>
+ <li> The query is not an aggregate
+ </li><li> Either the query is DISTINCT or else the ON or USING clause
+ on the LEFT JOIN constrains the join such that it matches
+ only a single row
+ </li><li> The right-hand table of the LEFT JOIN is not be used anywhere
+ in the query outside of its own USING or ON clause.
+ </li></ol>
+
+<p>
+ LEFT JOIN elimination often comes up when LEFT JOINs are used
+ inside of views, and then the view is used in such as way that
+ none of the columns of the right-hand table of the LEFT JOIN are
+ referenced.
+
+</p><p>
+ Here is a simple example of omitting a LEFT JOIN:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(ipk INTEGER PRIMARY KEY, v1);
+CREATE TABLE t2(ipk INTEGER PRIMARY KEY, v2);
+CREATE TABLE t3(ipk INTEGER PRIMARY KEY, v3);
+
+SELECT v1, v3 FROM t1
+ LEFT JOIN t2 ON (t1.ipk=t2.ipk)
+ LEFT JOIN t3 ON (t1.ipk=t3.ipk)
+</pre></div>
+
+<p>
+ The t2 table is completely unused in the query above, and so the
+ query planner is able to implement the query as if it were written:
+
+</p><div class="codeblock"><pre>SELECT v1, v3 FROM t1
+ LEFT JOIN t3 ON (t1.ipk=t3.ipk)
+</pre></div>
+
+
+<a name="constprop"></a>
+
+<h1 id="the_constant_propagation_optimization"><span>18. </span>The Constant Propagation Optimization</h1>
+
+<p>
+ When a WHERE clause contains two or more equality constraints connected
+ by the AND operator such that all of the <a href="datatype3.html#affinity">affinities</a> of the various
+ constraints are the same, then SQLite might use the transitive property
+ of equality to construct new "virtual" constraints that can be used to
+ simplify expressions and/or improve performance. This is called the
+ "constant-propagation optimization".
+
+</p><p>
+ For example, consider the following schema and query:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(a INTEGER PRIMARY KEY, b INT, c INT);
+SELECT * FROM t1 WHERE a=b AND b=5;
+</pre></div>
+
+<p>
+ SQLite looks at the "a=b" and "b=5" constraints and deduces that
+ if those two constraints are true, then it must also be the case
+ that "a=5" is true. This means that the desired row can be looked up
+ quickly using a value of 5 for the INTEGER PRIMARY KEY.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/optoverview.in?m=f697eab2d82b4d002">2022-09-19 12:27:16</a> UTC </small></i></p>
+
diff --git a/www/partialindex.html b/www/partialindex.html
new file mode 100644
index 0000000..c223939
--- /dev/null
+++ b/www/partialindex.html
@@ -0,0 +1,2694 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Partial Indexes</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Partial Indexes
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#creating_partial_indexes">2. Creating Partial Indexes</a></div>
+<div class="fancy-toc2"><a href="#unique_partial_indexes">2.1. Unique Partial Indexes</a></div>
+<div class="fancy-toc1"><a href="#queries_using_partial_indexes">3. Queries Using Partial Indexes</a></div>
+<div class="fancy-toc1"><a href="#supported_versions">4. Supported Versions</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>
+A partial index is an index over a subset of the rows of a table.
+</p>
+
+<p>
+In ordinary indexes, there is exactly one entry in the index for every
+row in the table. In partial indexes, only some subset of the rows in the
+table have corresponding index entries. For example, a partial index might
+omit entries for which the column being indexed is NULL. When used
+judiciously, partial indexes can result in smaller database files and
+improvements in both query and write performance.
+</p>
+
+<h1 id="creating_partial_indexes"><span>2. </span>Creating Partial Indexes</h1>
+
+<p>
+Create a partial index by adding a WHERE clause to the end of an
+ordinary <a href="lang_createindex.html">CREATE INDEX</a> statement.
+</p>
+
+<p><b><a href="syntax/create-index-stmt.html">create-index-stmt:</a></b>
+<button id='x2303' onclick='hideorshow("x2303","x2304")'>hide</button></p>
+ <div id='x2304' class='imgcontainer'>
+ <div style="max-width:907px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 907.43 232.632">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L222,56A15 15 0 0 0 237 41A15 15 0 0 0 222 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<path d="M288,32L327,32A15 15 0 0 0 342 17A15 15 0 0 0 327 2L288,2A15 15 0 0 0 273 17A15 15 0 0 0 288 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEX</text>
+<polygon points="194,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L188,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,17 261,21 261,12" style="fill:rgb(0,0,0)"/>
+<path d="M194,17L267,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,41 L 244,41 Q 252,41 252,29 Q 252,17 256,17 L 261,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,17 367,21 367,12" style="fill:rgb(0,0,0)"/>
+<path d="M342,17L372,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,32A15 15 0 0 0 408 17A15 15 0 0 0 393 2A15 15 0 0 0 378 17A15 15 0 0 0 393 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="393" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="431,17 420,21 420,12" style="fill:rgb(0,0,0)"/>
+<path d="M408,17L426,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L447,2A15 15 0 0 0 431 17A15 15 0 0 0 447 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="505,17 493,21 493,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L499,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M520,32L565,32A15 15 0 0 0 580 17A15 15 0 0 0 565 2L520,2A15 15 0 0 0 505 17A15 15 0 0 0 520 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="194,71 206,67 206,76" style="fill:rgb(0,0,0)"/>
+<path d="M342,17 L 350,17 Q 357,17 357,32 L 357,56 Q 357,71 342,71 L 215,71 L 200,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,71 516,67 516,76" style="fill:rgb(0,0,0)"/>
+<path d="M580,17 L 601,17 Q 616,17 616,32 L 616,56 Q 616,71 601,71 L 526,71 L 511,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,71L273,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,109 17,113 17,105" style="fill:rgb(0,0,0)"/>
+<path d="M273,71 L 20,71 Q 5,71 5,86 L 5,94 Q 5,109 14,109 L 23,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,124L140,124A15 15 0 0 0 155 109A15 15 0 0 0 140 94L43,94A15 15 0 0 0 28 109A15 15 0 0 0 43 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,109 166,113 166,105" style="fill:rgb(0,0,0)"/>
+<path d="M155,109L172,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,124A15 15 0 0 0 208 109A15 15 0 0 0 193 94A15 15 0 0 0 178 109A15 15 0 0 0 193 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,109 233,113 233,105" style="fill:rgb(0,0,0)"/>
+<path d="M208,109L238,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,124L338,124A15 15 0 0 0 353 109A15 15 0 0 0 338 94L259,94A15 15 0 0 0 244 109A15 15 0 0 0 259 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<polygon points="376,109 364,113 364,105" style="fill:rgb(0,0,0)"/>
+<path d="M353,109L370,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,124L400,124A15 15 0 0 0 415 109A15 15 0 0 0 400 94L391,94A15 15 0 0 0 376 109A15 15 0 0 0 391 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="438,109 427,113 427,105" style="fill:rgb(0,0,0)"/>
+<path d="M415,109L432,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,124L528,124A15 15 0 0 0 543 109A15 15 0 0 0 528 94L453,94A15 15 0 0 0 438 109A15 15 0 0 0 453 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="491" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="567,109 555,113 555,105" style="fill:rgb(0,0,0)"/>
+<path d="M543,109L561,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,124A15 15 0 0 0 597 109A15 15 0 0 0 582 94A15 15 0 0 0 567 109A15 15 0 0 0 582 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="633,109 621,113 621,105" style="fill:rgb(0,0,0)"/>
+<path d="M597,109L627,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M633,124L777,124L777,94L633,94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="813,109 802,113 802,105" style="fill:rgb(0,0,0)"/>
+<path d="M777,109L808,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M828,124A15 15 0 0 0 844 109A15 15 0 0 0 828 94A15 15 0 0 0 813 109A15 15 0 0 0 828 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="828" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M705,162A15 15 0 0 0 720 147A15 15 0 0 0 705 132A15 15 0 0 0 690 147A15 15 0 0 0 705 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="720,147 732,142 732,151" style="fill:rgb(0,0,0)"/>
+<path d="M777,109 L 785,109 Q 792,109 792,124 L 792,132 Q 792,147 777,147 L 741,147 L 726,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M690,147 L 625,147 Q 610,147 610,132 L 610,124 Q 610,109 617,109 L 625,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="92,139 80,144 80,135" style="fill:rgb(0,0,0)"/>
+<path d="M5,94 L 5,124 Q 5,139 20,139 L 71,139 L 86,139" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,139 L 205,139 Q 220,139 220,124 L 220,124 Q 220,109 227,109 L 235,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M684,230L733,230A15 15 0 0 0 748 215A15 15 0 0 0 733 200L684,200A15 15 0 0 0 669 215A15 15 0 0 0 684 230Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="709" y="215" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="772,215 760,219 760,211" style="fill:rgb(0,0,0)"/>
+<path d="M748,215L766,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M772,230L821,230L821,200L772,200Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="796" y="215" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="898,215 886,219 886,211" style="fill:rgb(0,0,0)"/>
+<path d="M821,215L892,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="901" cy="215" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="859,147 854,135 863,135" style="fill:rgb(0,0,0)"/>
+<path d="M844,109 L 851,109 Q 859,109 859,124 L 859,126 L 859,141" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M859,147 L 859,200 Q 859,215 872,215 L 886,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="705,177 717,173 717,181" style="fill:rgb(0,0,0)"/>
+<path d="M859,147 L 859,162 Q 859,177 844,177 L 726,177 L 711,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="669,215 657,219 657,211" style="fill:rgb(0,0,0)"/>
+<path d="M705,177 L 661,177 Q 646,177 646,192 L 646,200 Q 646,215 654,215 L 663,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x2305' onclick='hideorshow("x2305","x2306")'>show</button></p>
+ <div id='x2306' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x2307' onclick='hideorshow("x2307","x2308")'>show</button></p>
+ <div id='x2308' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x2309' onclick='hideorshow("x2309","x2310")'>show</button></p>
+ <div id='x2310' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x2311' onclick='hideorshow("x2311","x2312")'>show</button></p>
+ <div id='x2312' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2313' onclick='hideorshow("x2313","x2314")'>show</button></p>
+ <div id='x2314' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2315' onclick='hideorshow("x2315","x2316")'>show</button></p>
+ <div id='x2316' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x2317' onclick='hideorshow("x2317","x2318")'>show</button></p>
+ <div id='x2318' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2319' onclick='hideorshow("x2319","x2320")'>show</button></p>
+ <div id='x2320' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x2321' onclick='hideorshow("x2321","x2322")'>show</button></p>
+ <div id='x2322' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2323' onclick='hideorshow("x2323","x2324")'>show</button></p>
+ <div id='x2324' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2325' onclick='hideorshow("x2325","x2326")'>show</button></p>
+ <div id='x2326' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2327' onclick='hideorshow("x2327","x2328")'>show</button></p>
+ <div id='x2328' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2329' onclick='hideorshow("x2329","x2330")'>show</button></p>
+ <div id='x2330' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2331' onclick='hideorshow("x2331","x2332")'>show</button></p>
+ <div id='x2332' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2333' onclick='hideorshow("x2333","x2334")'>show</button></p>
+ <div id='x2334' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2335' onclick='hideorshow("x2335","x2336")'>show</button></p>
+ <div id='x2336' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2337' onclick='hideorshow("x2337","x2338")'>show</button></p>
+ <div id='x2338' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2339' onclick='hideorshow("x2339","x2340")'>show</button></p>
+ <div id='x2340' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x2341' onclick='hideorshow("x2341","x2342")'>show</button></p>
+ <div id='x2342' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x2343' onclick='hideorshow("x2343","x2344")'>show</button></p>
+ <div id='x2344' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/indexed-column.html">indexed-column:</a></b>
+<button id='x2345' onclick='hideorshow("x2345","x2346")'>show</button></p>
+ <div id='x2346' style='display:none;' class='imgcontainer'>
+ <div style="max-width:696px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 696.36 102.6">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="246,47 235,51 235,43" style="fill:rgb(0,0,0)"/>
+<path d="M175,17 L 205,17 Q 220,17 220,32 L 220,32 Q 220,47 230,47 L 240,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,62L325,62A15 15 0 0 0 341 47L341,47A15 15 0 0 0 325 32L261,32A15 15 0 0 0 246 47L246,47A15 15 0 0 0 261 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="293" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="358,47 346,51 346,43" style="fill:rgb(0,0,0)"/>
+<path d="M341,47L352,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,62L478,62A15 15 0 0 0 493 47L493,47A15 15 0 0 0 478 32L373,32A15 15 0 0 0 358 47L358,47A15 15 0 0 0 373 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="511,47 499,51 499,43" style="fill:rgb(0,0,0)"/>
+<path d="M493,47L505,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,85 556,89 556,81" style="fill:rgb(0,0,0)"/>
+<path d="M511,47 L 518,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 Q 541,17 541,32 L 541,70 Q 541,85 551,85 L 561,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,100L613,100A15 15 0 0 0 628 85L628,85A15 15 0 0 0 613 70L582,70A15 15 0 0 0 567 85L567,85A15 15 0 0 0 582 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="645,85 633,89 633,81" style="fill:rgb(0,0,0)"/>
+<path d="M628,85L639,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="687,17 675,21 675,12" style="fill:rgb(0,0,0)"/>
+<path d="M645,85 L 652,85 Q 660,85 660,70 L 660,32 Q 660,17 670,17 L 681,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="690" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,70L100,70L100,39L50,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="175,55 163,59 163,50" style="fill:rgb(0,0,0)"/>
+<path d="M100,55L169,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M175,55 L 182,55 Q 190,55 190,40 L 190,32 Q 190,17 197,17 L 205,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,17 586,21 586,12" style="fill:rgb(0,0,0)"/>
+<path d="M358,17L592,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,17L675,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,62L599,62A15 15 0 0 0 614 47A15 15 0 0 0 599 32L582,32A15 15 0 0 0 567 47A15 15 0 0 0 582 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="645,47 633,51 633,43" style="fill:rgb(0,0,0)"/>
+<path d="M614,47L639,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M645,47 L 652,47 Q 660,47 660,40 L 660,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,47 556,51 556,43" style="fill:rgb(0,0,0)"/>
+<path d="M541,32 L 541,39 Q 541,47 551,47 L 561,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+
+
+<p>
+Any index that includes the WHERE clause at the end is considered to be
+a partial index. Indexes that omit the WHERE clause (or indexes that
+are created by UNIQUE or PRIMARY KEY constraints inside of CREATE TABLE
+statements) are ordinary full indexes.
+</p>
+
+<p>
+The expression following the WHERE clause may contain operators,
+literal values, and names of columns in the table being indexed.
+The WHERE clause may <em>not</em> contain subqueries, references to other
+tables, <a href="deterministic.html">non-deterministic functions</a>, or <a href="lang_expr.html#varparam">bound parameters</a>.</p>
+
+<p>
+Only rows of the table for which the WHERE clause evaluates to true
+are included in the index. If the WHERE clause expression evaluates
+to NULL or to false for some rows of the table, then those rows are omitted
+from the index.
+</p>
+
+<p>
+The columns referenced in the WHERE clause of a partial index can be
+any of the columns in the table, not just columns that happen to be
+indexed. However, it is very common for the WHERE clause
+expression of a partial index to be a simple expression on the column
+being indexed. The following is a typical example:</p>
+
+<div class="codeblock"><pre>CREATE INDEX po_parent ON purchaseorder(parent_po) WHERE parent_po IS NOT NULL;
+</pre></div>
+
+<p>In the example above, if most purchase orders do not have a "parent"
+purchase order, then most parent_po values will be NULL. That means only
+a small subset of the rows in the purchaseorder table will be indexed.
+Hence the index will take up much less space. And changes to the original
+purchaseorder table will run faster since the po_parent index only needs
+to be updated for those exceptional rows where parent_po is not NULL.
+But the index is still useful for querying. In particular, if one wants
+to know all "children" of a particular purchase order "?1", the query
+would be:
+
+</p><div class="codeblock"><pre>SELECT po_num FROM purchaseorder WHERE parent_po=?1;
+</pre></div>
+
+<p>The query above will use the po_parent index to help find the answer,
+since the po_parent index contains entries for all rows of interest.
+Note that since po_parent is smaller than a full index, the query will
+likely run faster too.</p>
+
+<h2 id="unique_partial_indexes"><span>2.1. </span>Unique Partial Indexes</h2>
+
+<p>A partial index definition may include the UNIQUE keyword. If it
+does, then SQLite requires every entry <em>in the index</em> to be unique.
+This provides a mechanism for enforcing uniqueness across some subset of
+the rows in a table.</p>
+
+<p>For example, suppose you have a database of the members of a large
+organization where each person is assigned to a particular "team".
+Each team has a "leader" who is also a member of that team. The
+table might look something like this:</p>
+
+<div class="codeblock"><pre>CREATE TABLE person(
+ person_id INTEGER PRIMARY KEY,
+ team_id INTEGER REFERENCES team,
+ is_team_leader BOOLEAN,
+ -- other fields elided
+);
+</pre></div>
+
+<p>The team_id field cannot be unique because there are usually multiple people
+on the same team. One cannot make the combination of team_id and is_team_leader
+unique since there are usually multiple non-leaders on each team. The
+solution to enforcing one leader per team is to create a unique index
+on team_id but restricted to those entries for which is_team_leader is
+true:</p>
+
+<div class="codeblock"><pre>CREATE UNIQUE INDEX team_leader ON person(team_id) WHERE is_team_leader;
+</pre></div>
+
+<p>Coincidentally, that same index is useful for locating the team leader
+of a particular team:</p>
+
+<div class="codeblock"><pre>SELECT person_id FROM person WHERE is_team_leader AND team_id=?1;
+</pre></div>
+
+<h1 id="queries_using_partial_indexes"><span>3. </span>Queries Using Partial Indexes</h1>
+
+<p>Let X be the expression in the WHERE clause of a partial
+index, and let W be the WHERE clause of a query that uses the
+table that is indexed. Then, the query is permitted to use
+the partial index if W&#x21d2;X, where the &#x21d2; operator
+(usually pronounced "implies") is the logic operator
+equivalent to "X or not W".
+Hence, determining whether or not a partial index
+is usable in a particular query reduces to proving a theorem in
+first-order logic.</p>
+
+<p>SQLite does <u>not</u> have a sophisticated theorem
+prover with which to determine W&#x21d2;X. Instead, SQLite uses
+two simple rules to find the common cases where W&#x21d2;X is true, and
+it assumes all the other cases are false. The rules used by SQLite
+are these:
+
+</p><ol>
+<li><p>If W is AND-connected terms and X is
+OR-connected terms and if any term of W
+appears as a term of X, then the partial index is usable.</p>
+
+<p>For example, let the index be
+</p><div class="codeblock"><pre>CREATE INDEX ex1 ON tab1(a,b) WHERE a=5 OR b=6;
+</pre></div>
+<p>And let the query be:
+</p><div class="codeblock"><pre>SELECT * FROM tab1 WHERE b=6 AND a=7; <i>-- uses partial index</i>
+</pre></div>
+<p>Then the index is usable by the query because the "b=6" term appears
+in both the index definition and in the query. Remember: terms in the
+index should be OR-connected and terms in the query should be AND-connected.</p>
+
+<p>The terms in W and X must match exactly. SQLite does not
+do algebra to try to get them to look the same.
+The term "b=6" does not match "b=3+3" or "b-6=0" or "b BETWEEN 6 AND 6".
+"b=6" will match to "6=b" as long as "b=6" is on the index and "6=b" is
+in the query. If a term of the form "6=b" appears in the index, it will
+never match anything.</p>
+
+</li><li><p>If a term in X is of the form "z IS NOT NULL" and if a term in
+ W is a comparison operator on "z" other than "IS", then those
+ terms match.</p>
+
+<p>Example: Let the index be
+</p><div class="codeblock"><pre>CREATE INDEX ex2 ON tab2(b,c) WHERE c IS NOT NULL;
+</pre></div>
+<p>Then any query that uses operators =, &lt;, &gt;, &lt;=, &gt;=, &lt;&gt;,
+IN, LIKE, or GLOB on column "c"
+would be usable with the partial index because those
+comparison operators are only true if "c" is not NULL. So the following
+query could use the partial index:
+</p><div class="codeblock"><pre>SELECT * FROM tab2 WHERE b=456 AND c&lt;&gt;0; <i>-- uses partial index</i>
+</pre></div>
+<p>But the next query can not use the partial index:
+</p><div class="codeblock"><pre>SELECT * FROM tab2 WHERE b=456; <i>-- cannot use partial index</i>
+</pre></div>
+<p>The latter query can not use the partial index because there might be
+rows in the table with b=456 and where c is NULL. But those rows would
+not be in the partial index.
+</p></li></ol>
+
+<p>These two rules describe how the query planner for SQLite works as of
+this writing (2013-08-01). And the rules above will always be honored.
+However, future versions of SQLite might incorporate a better theorem prover
+that can find other cases where W&#x21d2;X is true and thus may
+find more instances where partial indexes are useful.</p>
+
+<h1 id="supported_versions"><span>4. </span>Supported Versions</h1>
+
+<p>
+Partial indexes have been supported in SQLite since <a href="releaselog/3_8_0.html">version 3.8.0</a>
+(2013-08-26).
+</p>
+
+<p>Database files that contain partial indices are not readable or writable
+by versions of SQLite prior to 3.8.0. However, a database file created
+by SQLite 3.8.0 is still readable and writable by prior versions as long
+as its schema contains no partial indexes. A database that is unreadable
+by legacy versions of SQLite can be made readable simply by running
+<a href="lang_dropindex.html">DROP INDEX</a> on the partial indexes.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/partialindex.in?m=ffe857a745620026d">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/pgszchng2016.html b/www/pgszchng2016.html
new file mode 100644
index 0000000..e682191
--- /dev/null
+++ b/www/pgszchng2016.html
@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Change in Default Page Size in SQLite Version 3.12.0</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">The Default Page Size Change of SQLite 3.12.0</h1>
+
+<h2>1.0 Introduction</h2>
+
+<p>
+An SQLite database file consists of one or more "pages".
+For a single database file, all pages are the same size, though
+for different database files, the page size can any power of
+two between 512 and 65536, inclusive.
+</p>
+
+<p>
+Since the SQLite database file format was designed (in 2003) the
+default <a href="pragma.html#pragma_page_size">page size</a> for new databases has been 1024 bytes.
+This was a reasonable choice in 2003. But on modern hardware,
+a 4096 byte page is a faster and better choice.
+So, beginning with SQLite <a href="releaselog/3_12_0.html">version 3.12.0</a> (2016-03-29)) the default
+page size for new database files has been increased to 4096 bytes.
+</p>
+
+<p>
+The upper bound on the database <a href="pragma.html#pragma_cache_size">cache size</a> has
+traditionally defaulted to 2000 pages. SQLite <a href="releaselog/3_12_0.html">version 3.12.0</a> also
+changes this default setting to be "-2000" which means 2000*1024
+bytes, regardless of page size. So, the upper bound on the amount
+of memory used for the page cache is unchanged.
+</p>
+
+<h2>2.0 <u>Not</u> a Compatibility Break</h2>
+
+<p>
+These changes in the default behavior of SQLite are not
+a compatibility break. All legacy database files continue to be
+readable and writable by newer versions of SQLite, and all newly
+created database files continue to be readable and writable by
+legacy versions of the SQLite library. The only thing that is changing
+is some default settings. This should result in a performance
+increase for many applications.
+</p>
+
+<p>
+Though most application should not notice any change (except that
+they run a little faster), if problems arise then the
+legacy behavior can be restored at compile-time by using the
+following options to the C-compiler:
+
+<blockquote><pre>
+-DSQLITE_DEFAULT_PAGE_SIZE=1024
+-DSQLITE_DEFAULT_CACHE_SIZE=2000
+</pre></blockquote>
+
+<p>
+The page size and cache size can also be set or changed at run-time using the
+<a href="pragma.html#pragma_page_size">page_size pragma</a> and <a href="pragma.html#pragma_cache_size">cache_size pragma</a>, respectively.
+
+<h2>3.0 Possible Negative Consequences Of This Change</h2>
+
+<p>
+The minimum size of an SQLite database is one page for each table and
+each index. With a larger page size, the size of an empty database
+for a given schema will grow by a factor of four, therefore. However,
+once the database begins to fill with content the size of the older
+1024-byte page databases and the newer 4096-byte page databases will
+quickly converge. Due to relaxed bin-packing constraints, the
+4096-byte page size might actually result in a smaller file, once
+substantial content is added.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/pgszchng2016.in?m=174c2a23e21a72342">2016-09-14 18:40:10</a> UTC </small></i></p>
+
diff --git a/www/pragma.html b/www/pragma.html
new file mode 100644
index 0000000..f500baf
--- /dev/null
+++ b/www/pragma.html
@@ -0,0 +1,2254 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Pragma statements supported by SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+<h1 align="center">PRAGMA Statements</h1>
+
+
+
+<p>The PRAGMA statement is an SQL extension specific to SQLite and used to
+modify the operation of the SQLite library or to query the SQLite library for
+internal (non-table) data. The PRAGMA statement is issued using the same
+interface as other SQLite commands (e.g. <a href="lang_select.html">SELECT</a>, <a href="lang_insert.html">INSERT</a>) but is
+different in the following important respects:
+</p>
+<ul>
+<li>The pragma command is specific to SQLite and is
+ not compatible with any other SQL database engine.
+<li>Specific pragma statements may be removed and others added in future
+ releases of SQLite. There is no guarantee of backwards compatibility.
+<li>No error messages are generated if an unknown pragma is issued.
+ Unknown pragmas are simply ignored. This means if there is a typo in
+ a pragma statement the library does not inform the user of the fact.
+<li>Some pragmas take effect during the SQL compilation stage, not the
+ execution stage. This means if using the C-language <a href="c3ref/prepare.html">sqlite3_prepare()</a>,
+ <a href="c3ref/step.html">sqlite3_step()</a>, <a href="c3ref/finalize.html">sqlite3_finalize()</a> API (or similar in a wrapper
+ interface), the pragma may run during the <a href="c3ref/prepare.html">sqlite3_prepare()</a> call,
+ not during the <a href="c3ref/step.html">sqlite3_step()</a> call as normal SQL statements do.
+ Or the pragma might run during sqlite3_step() just like normal
+ SQL statements. Whether or not the pragma runs during sqlite3_prepare()
+ or sqlite3_step() depends on the pragma and on the specific release
+ of SQLite.
+<li>The <a href="lang_explain.html">EXPLAIN</a> and <a href="eqp.html">EXPLAIN QUERY PLAN</a> prefixes to SQL statements
+ only affect the behavior of the statement during <a href="c3ref/step.html">sqlite3_step()</a>.
+ That means that PRAGMA statements that take effect during
+ <a href="c3ref/prepare.html">sqlite3_prepare()</a> will behave the same way regardless of whether or
+ not they are prefaced by "EXPLAIN".
+</ul>
+
+<p>The C-language API for SQLite provides the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a>
+<a href="c3ref/file_control.html">file control</a> which gives <a href="vfs.html">VFS</a> implementations the
+opportunity to add new PRAGMA statements or to override the meaning of
+built-in PRAGMA statements.</p>
+
+
+<hr /><a name="syntax"></a>
+<h2>PRAGMA command syntax</h2>
+<p><b><a href="syntax/pragma-stmt.html">pragma-stmt:</a></b>
+<button id='x2347' onclick='hideorshow("x2347","x2348")'>hide</button></p>
+ <div id='x2348' class='imgcontainer'>
+ <div style="max-width:824px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 824.352 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L104,32A15 15 0 0 0 119 17A15 15 0 0 0 104 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRAGMA</text>
+<polygon points="155,17 143,21 143,12" style="fill:rgb(0,0,0)"/>
+<path d="M119,17L149,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M170,32L266,32A15 15 0 0 0 282 17A15 15 0 0 0 266 2L170,2A15 15 0 0 0 155 17A15 15 0 0 0 170 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="305,17 293,21 293,12" style="fill:rgb(0,0,0)"/>
+<path d="M282,17L299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,32A15 15 0 0 0 335 17A15 15 0 0 0 320 2A15 15 0 0 0 305 17A15 15 0 0 0 320 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="320" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="371,17 359,21 359,12" style="fill:rgb(0,0,0)"/>
+<path d="M335,17L365,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M386,32L483,32A15 15 0 0 0 498 17A15 15 0 0 0 483 2L386,2A15 15 0 0 0 371 17A15 15 0 0 0 386 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="435" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-name</text>
+<polygon points="540,82 528,86 528,77" style="fill:rgb(0,0,0)"/>
+<path d="M498,17 L 506,17 Q 513,17 513,32 L 513,67 Q 513,82 524,82 L 534,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M555,97A15 15 0 0 0 570 82A15 15 0 0 0 555 67A15 15 0 0 0 540 82A15 15 0 0 0 555 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="555" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="593,82 582,86 582,77" style="fill:rgb(0,0,0)"/>
+<path d="M570,82L587,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M593,97L720,97L720,67L593,67Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="656" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-value</text>
+<polygon points="743,82 731,86 731,77" style="fill:rgb(0,0,0)"/>
+<path d="M720,82L737,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M758,97A15 15 0 0 0 773 82A15 15 0 0 0 758 67A15 15 0 0 0 743 82A15 15 0 0 0 758 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="758" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="814,17 803,21 803,12" style="fill:rgb(0,0,0)"/>
+<path d="M773,82 L 780,82 Q 788,82 788,67 L 788,32 Q 788,17 798,17 L 809,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="818" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="540,44 528,48 528,40" style="fill:rgb(0,0,0)"/>
+<path d="M498,17 L 506,17 Q 513,17 513,30 Q 513,44 524,44 L 534,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M555,59A15 15 0 0 0 570 44L570,44A15 15 0 0 0 555 29A15 15 0 0 0 540 44L540,44A15 15 0 0 0 555 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="555" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="593,44 582,48 582,40" style="fill:rgb(0,0,0)"/>
+<path d="M570,44L587,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M593,59L720,59L720,29L593,29Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="656" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-value</text>
+<polygon points="773,44 761,48 761,40" style="fill:rgb(0,0,0)"/>
+<path d="M720,44L767,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M773,44 L 780,44 Q 788,44 788,36 L 788,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="656,17 645,21 645,12" style="fill:rgb(0,0,0)"/>
+<path d="M498,17L651,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M656,17L803,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,44 207,48 207,40" style="fill:rgb(0,0,0)"/>
+<path d="M119,17 L 126,17 Q 134,17 134,30 Q 134,44 149,44 L 198,44 L 213,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M218,44 L 335,44 Q 350,44 350,30 Q 350,17 357,17 L 365,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/pragma-value.html">pragma-value:</a></b>
+<button id='x2349' onclick='hideorshow("x2349","x2350")'>hide</button></p>
+ <div id='x2350' class='imgcontainer'>
+ <div style="max-width:264px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 264.499 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,17 51,21 51,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L57,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,32L201,32L201,2L63,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="255,17 243,21 243,12" style="fill:rgb(0,0,0)"/>
+<path d="M201,17L249,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="258" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,70L105,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 105 39L78,39A15 15 0 0 0 63 55L63,55A15 15 0 0 0 78 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<path d="M78,108L171,108A15 15 0 0 0 186 92A15 15 0 0 0 171 77L78,77A15 15 0 0 0 63 92A15 15 0 0 0 78 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-literal</text>
+<polygon points="63,92 51,97 51,88" style="fill:rgb(0,0,0)"/>
+<path d="M21,17 L 29,17 Q 36,17 36,32 L 36,77 Q 36,92 47,92 L 57,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="201,92 189,97 189,88" style="fill:rgb(0,0,0)"/>
+<path d="M186,92L195,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,92 L 208,92 Q 216,92 216,77 L 216,32 Q 216,17 223,17 L 231,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="201,55 189,59 189,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L195,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,55 L 208,55 Q 216,55 216,47 L 216,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,55 51,59 51,50" style="fill:rgb(0,0,0)"/>
+<path d="M36,39 L 36,47 Q 36,55 47,55 L 57,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x2351' onclick='hideorshow("x2351","x2352")'>show</button></p>
+ <div id='x2352' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+
+
+<p>
+A pragma can take either zero or one argument. The argument is may be either
+in parentheses or it may be separated from the pragma name by an equal sign.
+The two syntaxes yield identical results.
+In many pragmas, the argument is a boolean. The boolean can be one of:
+</p>
+
+<center>
+<b>1 yes true on<br>0 no false off</b>
+</center>
+
+<p>Keyword arguments can optionally appear in quotes.
+(Example: <tt>'yes' &#91;FALSE&#93;</tt>.) Some pragmas
+takes a string literal as their argument. When pragma takes a keyword
+argument, it will usually also take a numeric equivalent as well.
+For example, "0" and "no" mean the same thing, as does "1" and "yes".
+When querying the value of a setting, many pragmas return the number
+rather than the keyword.</p>
+
+<p>A pragma may have an optional <span class='yyterm'>schema-name</span>
+before the pragma name.
+The <span class='yyterm'>schema-name</span> is the name of an <a href="lang_attach.html">ATTACH</a>-ed database
+or "main" or "temp" for the main and the TEMP databases. If the optional
+schema name is omitted, "main" is assumed. In some pragmas, the schema
+name is meaningless and is simply ignored. In the documentation below,
+pragmas for which the schema name is meaningful are shown with a
+"<i>schema.</i>" prefix.</p>
+
+
+<hr /><a name="pragfunc"></a>
+<h2>PRAGMA functions</h2>
+
+
+<p>
+PRAGMAs that return results and that have no side-effects can be
+accessed from ordinary <a href="lang_select.html">SELECT</a> statements as <a href="vtab.html#tabfunc2">table-valued functions</a>.
+For each participating PRAGMA, the corresponding table-valued function
+has the same name as the PRAGMA with a 7-character "pragma_" prefix.
+The PRAGMA argument and schema, if any, are passed as arguments to the
+table-valued function, with the schema as an optional, last argument.
+
+<p>For example, information about the columns in an index can be
+read using the <a href="pragma.html#pragma_index_info">index_info pragma</a> as follows:
+
+<blockquote><pre>
+PRAGMA index_info('idx52');
+</pre></blockquote>
+
+<p>Or, the same content can be read using:
+
+<blockquote><pre>
+SELECT * FROM pragma_index_info('idx52');
+</pre></blockquote>
+
+<p>The advantage of the table-valued function format is that the query
+can return just a subset of the PRAGMA columns, can include a WHERE clause,
+can use aggregate functions, and the table-valued function can be just
+one of several data sources in a join.
+For example, to get a list of all indexed columns in a schema, one
+could query:
+
+<blockquote><pre>
+SELECT DISTINCT m.name || '.' || ii.name AS 'indexed-columns'
+ FROM sqlite_schema AS m,
+ pragma_index_list(m.name) AS il,
+ pragma_index_info(il.name) AS ii
+ WHERE m.type='table'
+ ORDER BY 1;
+</pre></blockquote>
+
+<p>
+Additional notes:
+<ul>
+<li><p>
+Table-valued functions exist only for built-in PRAGMAs, not for PRAGMAs
+defined using the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control.
+<li><p>
+Table-valued functions exist only for PRAGMAs that return results and
+that have no side-effects.
+<li><p>
+This feature could be used to implement
+<a href="https://en.wikipedia.org/wiki/Information_schema">information schema</a>
+by first creating a separate schema using
+<blockquote><pre>
+<a href="lang_attach.html">ATTACH</a> ':memory:' AS 'information_schema';
+</pre></blockquote>
+Then creating
+<a href="lang_createview.html">VIEWs</a> in that schema that implement the official information schema
+tables using table-valued PRAGMA functions.
+<li><p>
+This feature is experimental and is subject to change. Further documentation
+will become available if and when the table-valued functions for PRAGMAs
+feature becomes officially supported.
+<li><p>
+The table-valued functions for PRAGMA feature was added
+in SQLite version 3.16.0 (2017-01-02). Prior versions of SQLite
+cannot use this feature.
+</ul>
+
+<hr /><a name="toc"></a>
+<h2>List Of PRAGMAs</h2>
+<div class='columns' style='columns: 12em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='pragma.html#pragma_analysis_limit'>analysis_limit</a></li>
+<li><a href='pragma.html#pragma_application_id'>application_id</a></li>
+<li><a href='pragma.html#pragma_auto_vacuum'>auto_vacuum</a></li>
+<li><a href='pragma.html#pragma_automatic_index'>automatic_index</a></li>
+<li><a href='pragma.html#pragma_busy_timeout'>busy_timeout</a></li>
+<li><a href='pragma.html#pragma_cache_size'>cache_size</a></li>
+<li><a href='pragma.html#pragma_cache_spill'>cache_spill</a></li>
+<li><a href='pragma.html#pragma_case_sensitive_like'>case_sensitive_like</a></li>
+<li><a href='pragma.html#pragma_cell_size_check'>cell_size_check</a></li>
+<li><a href='pragma.html#pragma_checkpoint_fullfsync'>checkpoint_fullfsync</a></li>
+<li><a href='pragma.html#pragma_collation_list'>collation_list</a></li>
+<li><a href='pragma.html#pragma_compile_options'>compile_options</a></li>
+<li><a href='pragma.html#pragma_count_changes'><s>count_changes&sup1;</s></a></li>
+<li><a href='pragma.html#pragma_data_store_directory'><s>data_store_directory&sup1;</s></a></li>
+<li><a href='pragma.html#pragma_data_version'>data_version</a></li>
+<li><a href='pragma.html#pragma_database_list'>database_list</a></li>
+<li><a href='pragma.html#pragma_default_cache_size'><s>default_cache_size&sup1;</s></a></li>
+<li><a href='pragma.html#pragma_defer_foreign_keys'>defer_foreign_keys</a></li>
+<li><a href='pragma.html#pragma_empty_result_callbacks'><s>empty_result_callbacks&sup1;</s></a></li>
+<li><a href='pragma.html#pragma_encoding'>encoding</a></li>
+<li><a href='pragma.html#pragma_foreign_key_check'>foreign_key_check</a></li>
+<li><a href='pragma.html#pragma_foreign_key_list'>foreign_key_list</a></li>
+<li><a href='pragma.html#pragma_foreign_keys'>foreign_keys</a></li>
+<li><a href='pragma.html#pragma_freelist_count'>freelist_count</a></li>
+<li><a href='pragma.html#pragma_full_column_names'><s>full_column_names&sup1;</s></a></li>
+<li><a href='pragma.html#pragma_fullfsync'>fullfsync</a></li>
+<li><a href='pragma.html#pragma_function_list'>function_list</a></li>
+<li><a href='pragma.html#pragma_hard_heap_limit'>hard_heap_limit</a></li>
+<li><a href='pragma.html#pragma_ignore_check_constraints'>ignore_check_constraints</a></li>
+<li><a href='pragma.html#pragma_incremental_vacuum'>incremental_vacuum</a></li>
+<li><a href='pragma.html#pragma_index_info'>index_info</a></li>
+<li><a href='pragma.html#pragma_index_list'>index_list</a></li>
+<li><a href='pragma.html#pragma_index_xinfo'>index_xinfo</a></li>
+<li><a href='pragma.html#pragma_integrity_check'>integrity_check</a></li>
+<li><a href='pragma.html#pragma_journal_mode'>journal_mode</a></li>
+<li><a href='pragma.html#pragma_journal_size_limit'>journal_size_limit</a></li>
+<li><a href='pragma.html#pragma_legacy_alter_table'>legacy_alter_table</a></li>
+<li><a href='pragma.html#pragma_legacy_file_format'>legacy_file_format</a></li>
+<li><a href='pragma.html#pragma_locking_mode'>locking_mode</a></li>
+<li><a href='pragma.html#pragma_max_page_count'>max_page_count</a></li>
+<li><a href='pragma.html#pragma_mmap_size'>mmap_size</a></li>
+<li><a href='pragma.html#pragma_module_list'>module_list</a></li>
+<li><a href='pragma.html#pragma_optimize'>optimize</a></li>
+<li><a href='pragma.html#pragma_page_count'>page_count</a></li>
+<li><a href='pragma.html#pragma_page_size'>page_size</a></li>
+<li><a href='pragma.html#pragma_parser_trace'>parser_trace&sup2;</a></li>
+<li><a href='pragma.html#pragma_pragma_list'>pragma_list</a></li>
+<li><a href='pragma.html#pragma_query_only'>query_only</a></li>
+<li><a href='pragma.html#pragma_quick_check'>quick_check</a></li>
+<li><a href='pragma.html#pragma_read_uncommitted'>read_uncommitted</a></li>
+<li><a href='pragma.html#pragma_recursive_triggers'>recursive_triggers</a></li>
+<li><a href='pragma.html#pragma_reverse_unordered_selects'>reverse_unordered_selects</a></li>
+<li><a href='pragma.html#pragma_schema_version'>schema_version&sup3;</a></li>
+<li><a href='pragma.html#pragma_secure_delete'>secure_delete</a></li>
+<li><a href='pragma.html#pragma_short_column_names'><s>short_column_names&sup1;</s></a></li>
+<li><a href='pragma.html#pragma_shrink_memory'>shrink_memory</a></li>
+<li><a href='pragma.html#pragma_soft_heap_limit'>soft_heap_limit</a></li>
+<li><a href='pragma.html#pragma_stats'>stats&sup3;</a></li>
+<li><a href='pragma.html#pragma_synchronous'>synchronous</a></li>
+<li><a href='pragma.html#pragma_table_info'>table_info</a></li>
+<li><a href='pragma.html#pragma_table_list'>table_list</a></li>
+<li><a href='pragma.html#pragma_table_xinfo'>table_xinfo</a></li>
+<li><a href='pragma.html#pragma_temp_store'>temp_store</a></li>
+<li><a href='pragma.html#pragma_temp_store_directory'><s>temp_store_directory&sup1;</s></a></li>
+<li><a href='pragma.html#pragma_threads'>threads</a></li>
+<li><a href='pragma.html#pragma_trusted_schema'>trusted_schema</a></li>
+<li><a href='pragma.html#pragma_user_version'>user_version</a></li>
+<li><a href='pragma.html#pragma_vdbe_addoptrace'>vdbe_addoptrace&sup2;</a></li>
+<li><a href='pragma.html#pragma_vdbe_debug'>vdbe_debug&sup2;</a></li>
+<li><a href='pragma.html#pragma_vdbe_listing'>vdbe_listing&sup2;</a></li>
+<li><a href='pragma.html#pragma_vdbe_trace'>vdbe_trace&sup2;</a></li>
+<li><a href='pragma.html#pragma_wal_autocheckpoint'>wal_autocheckpoint</a></li>
+<li><a href='pragma.html#pragma_wal_checkpoint'>wal_checkpoint</a></li>
+<li><a href='pragma.html#pragma_writable_schema'>writable_schema&sup3;</a></li>
+</ul>
+</div>
+
+<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_analysis_limit"></a>
+<h _id=pragma_analysis_limit style="display:none"> PRAGMA analysis_limit</h><hr>
+ <p><b>PRAGMA analysis_limit;
+ <br>PRAGMA analysis_limit = </b><i>N</i><b>;</b></p>
+ <p>Query or change a limit on the <a href="lang_analyze.html#approx">approximate ANALYZE</a> setting.
+ This is the approximate number of
+ rows examined in each index by the <a href="lang_analyze.html">ANALYZE</a> command.
+ If the argument <i>N</i> is omitted, then the analysis limit
+ is unchanged.
+ If the limit is zero, then the analysis limit is disabled and
+ the ANALYZE command will examine all rows of each index.
+ If N is greater than zero, then the analysis limit is set to N
+ and subsequent ANALYZE commands will stop analyzing
+ each index after it has examined approximately N rows.
+ If N is a negative number or something other than an integer value,
+ then the pragma behaves as if the N argument was omitted.
+ In all cases, the value returned is the new analysis limit used
+ for subsequent ANALYZE commands.
+ <p>This pragma can be used to help the ANALYZE command run faster
+ on large databases. The results of analysis are not as good
+ when only part of each index is examined, but the results are
+ usually good enough. Setting N to 100 or 1000 allows the
+ ANALYZE command to run very quickly, even on multi-gigabyte
+ database files. This pragma is particularly useful in combination
+ with <a href="pragma.html#pragma_optimize">PRAGMA optimize</a>.
+ <p>This pragma was added in SQLite version 3.32.0 (2020-05-22).
+ The current implementation only uses the lower 31 bits of the
+ N value - higher order bits are silently ignored. Future versions
+ of SQLite might begin using higher order bits.
+<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>
+
+ <p>The application_id PRAGMA is used to query or set the 32-bit
+ signed big-endian "Application ID" integer located at offset
+ 68 into the <a href="fileformat2.html#database_header">database header</a>. Applications that use SQLite as their
+ <a href="appfileformat.html">application file-format</a> should set the Application ID integer to
+ a unique integer so that utilities such as
+ <a href="http://www.darwinsys.com/file/">file(1)</a> can determine the specific
+ file type rather than just reporting "SQLite3 Database". A list of
+ assigned application IDs can be seen by consulting the
+ <a href="http://www.sqlite.org/src/artifact?ci=trunk&filename=magic.txt">magic.txt</a> file in the SQLite source repository.
+
+<p> See also the <a href="pragma.html#pragma_user_version">user_version pragma</a>.
+<a name="pragma_auto_vacuum"></a>
+<h _id=pragma_auto_vacuum style="display:none"> PRAGMA auto_vacuum</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>auto_vacuum;<br>
+ PRAGMA </b><i>schema.</i><b>auto_vacuum = </b>
+ <i>0 | NONE | 1 | FULL | 2 | INCREMENTAL</i><b>;</b></p>
+
+ <p>Query or set the auto-vacuum status in the database.</p>
+
+ <p>The default setting for auto-vacuum is 0 or "none",
+ unless the <a href="compile.html#default_autovacuum">SQLITE_DEFAULT_AUTOVACUUM</a> compile-time option is used.
+ The "none" setting means that auto-vacuum is disabled.
+ When auto-vacuum is disabled and data is deleted data from a database,
+ the database file remains the same size. Unused database file
+ pages are added to a "<a href="fileformat2.html#freelist">freelist</a>" and reused for subsequent inserts. So
+ no database file space is lost. However, the database file does not
+ shrink. In this mode the <a href="lang_vacuum.html">VACUUM</a>
+ command can be used to rebuild the entire database file and
+ thus reclaim unused disk space.</p>
+
+ <p>When the auto-vacuum mode is 1 or "full", the freelist pages are
+ moved to the end of the database file and the database file is truncated
+ to remove the freelist pages at every transaction commit.
+ Note, however, that auto-vacuum only truncates the freelist pages
+ from the file. Auto-vacuum does not defragment the database nor
+ repack individual database pages the way that the
+ <a href="lang_vacuum.html">VACUUM</a> command does. In fact, because
+ it moves pages around within the file, auto-vacuum can actually
+ make fragmentation worse.</p>
+
+ <p>Auto-vacuuming is only possible if the database stores some
+ additional information that allows each database page to be
+ traced backwards to its referrer. Therefore, auto-vacuuming must
+ be turned on before any tables are created. It is not possible
+ to enable or disable auto-vacuum after a table has been created.</p>
+
+ <p>When the value of auto-vacuum is 2 or "incremental" then the additional
+ information needed to do auto-vacuuming is stored in the database file
+ but auto-vacuuming does not occur automatically at each commit as it
+ does with auto_vacuum=full. In incremental mode, the separate
+ <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> pragma must
+ be invoked to cause the auto-vacuum to occur.</p>
+
+ <p>The database connection can be changed between full and incremental
+ autovacuum mode at any time. However, changing from
+ "none" to "full" or "incremental" can only occur when the database
+ is new (no tables
+ have yet been created) or by running the <a href="lang_vacuum.html">VACUUM</a> command. To
+ change auto-vacuum modes, first use the auto_vacuum pragma to set
+ the new desired mode, then invoke the <a href="lang_vacuum.html">VACUUM</a> command to
+ reorganize the entire database file. To change from "full" or
+ "incremental" back to "none" always requires running <a href="lang_vacuum.html">VACUUM</a> even
+ on an empty database.
+ </p>
+
+ <p>When the auto_vacuum pragma is invoked with no arguments, it
+ returns the current auto_vacuum mode.</p>
+<a name="pragma_automatic_index"></a>
+<h _id=pragma_automatic_index style="display:none"> PRAGMA automatic_index</h><hr>
+ <p><b>PRAGMA automatic_index;
+ <br>PRAGMA automatic_index = </b><i>boolean</i><b>;</b></p>
+
+ <p>Query, set, or clear the <a href="optoverview.html#autoindex">automatic indexing</a> capability.
+ <p><a href="optoverview.html#autoindex">Automatic indexing</a> is enabled by default as of
+ <a href="releaselog/3_7_17.html">version 3.7.17</a> (2013-05-20),
+ but this might change in future releases of SQLite.
+<a name="pragma_busy_timeout"></a>
+<h _id=pragma_busy_timeout style="display:none"> PRAGMA busy_timeout</h><hr>
+ <p><b>PRAGMA busy_timeout;
+ <br>PRAGMA busy_timeout = </b><i>milliseconds</i><b>;</b></p>
+ <p>Query or change the setting of the
+ <a href="c3ref/busy_timeout.html">busy timeout</a>.
+ This pragma is an alternative to the <a href="c3ref/busy_timeout.html">sqlite3_busy_timeout()</a> C-language
+ interface which is made available as a pragma for use with language
+ bindings that do not provide direct access to <a href="c3ref/busy_timeout.html">sqlite3_busy_timeout()</a>.
+
+ <p>Each database connection can only have a single
+ <a href="c3ref/busy_handler.html">busy handler</a>. This PRAGMA sets the busy handler
+ for the process, possibly overwriting any previously set busy handler.
+<a name="pragma_cache_size"></a>
+<h _id=pragma_cache_size style="display:none"> PRAGMA cache_size</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>cache_size;
+ <br>PRAGMA </b><i>schema.</i><b>cache_size = </b><i>pages</i><b>;
+ <br>PRAGMA </b><i>schema.</i><b>cache_size = -</b><i>kibibytes</i><b>;</b></p>
+ <p>Query or change the suggested maximum number of database disk pages
+ that SQLite will hold in memory at once per open database file. Whether
+ or not this suggestion is honored is at the discretion of the
+ <a href="c3ref/pcache_methods2.html">Application Defined Page Cache</a>.
+ The default page cache that is built into SQLite honors the request,
+ however alternative application-defined page cache implementations
+ may choose to interpret the suggested cache size in different ways
+ or to ignore it all together.
+ The default suggested cache size is -2000, which means the cache size
+ is limited to 2048000 bytes of memory.
+ The default suggested cache size can be altered using the
+ <a href="compile.html#default_cache_size">SQLITE_DEFAULT_CACHE_SIZE</a> compile-time options.
+ The TEMP database has a default suggested cache size of 0 pages.</p>
+
+ <p>If the argument N is positive then the suggested cache size is set
+ to N. If the argument N is negative, then the
+ number of cache pages is adjusted to be a number of pages that would
+ use approximately abs(N*1024) bytes of memory based on the current
+ page size. SQLite remembers the number of pages in the page cache,
+ not the amount of memory used. So if you set the cache size using
+ a negative number and subsequently change the page size (using the
+ <a href="pragma.html#pragma_page_size">PRAGMA page_size</a> command) then the maximum amount of cache
+ memory will go up or down in proportion to the change in page size.
+
+ <p><i>Backwards compatibility note:</i>
+ The behavior of cache_size with a negative N
+ was different prior to <a href="releaselog/3_7_10.html">version 3.7.10</a> (2012-01-16). In
+ earlier versions, the number of pages in the cache was set
+ to the absolute value of N.</p>
+
+ <p>When you change the cache size using the cache_size pragma, the
+ change only endures for the current session. The cache size reverts
+ to the default value when the database is closed and reopened.</p>
+
+ <p>The default page cache implemention does not allocate
+ the full amount of cache memory all at once. Cache memory
+ is allocated in smaller chunks on an as-needed basis. The page_cache
+ setting is a (suggested) upper bound on the amount of memory that the
+ cache can use, not the amount of memory it will use all of the time.
+ This is the behavior of the default page cache implementation, but an
+ <a href="c3ref/pcache_methods2.html">application defined page cache</a> is free
+ to behave differently if it wants.
+<a name="pragma_cache_spill"></a>
+<h _id=pragma_cache_spill style="display:none"> PRAGMA cache_spill</h><hr>
+ <p><b>PRAGMA cache_spill;
+ <br>PRAGMA cache_spill=</b><i>boolean</i><b>;
+ <br>PRAGMA </b><i>schema.</i><b>cache_spill=<i>N</i>;</b></p>
+
+ <p>The cache_spill pragma enables or disables the ability of the pager
+ to spill dirty cache pages to the database file in the middle of a
+ transaction. Cache_spill is enabled by default and most applications
+ should leave it that way as cache spilling is usually advantageous.
+ However, a cache spill has the side-effect of acquiring an
+ <a href="lockingv3.html#excl_lock">EXCLUSIVE lock</a> on the database file. Hence, some applications that
+ have large long-running transactions may want to disable cache spilling
+ in order to prevent the application from acquiring an exclusive lock
+ on the database until the moment that the transaction <a href="lang_transaction.html">COMMIT</a>s.
+ <p>The "PRAGMA cache_spill=<i>N</i>" form of this pragma sets a minimum
+ cache size threshold required for spilling to occur. The number of pages
+ in cache must exceed both the cache_spill threshold and the maximum cache
+ size set by the <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> statement in order for spilling to
+ occur.
+ <p>The "PRAGMA cache_spill=<i>boolean</i>" form of this pragma applies
+ across all databases attached to the database connection. But the
+ "PRAGMA cache_spill=<i>N</i>" form of this statement only applies to
+ the "main" schema or whatever other schema is specified as part of the
+ statement.
+<a name="pragma_case_sensitive_like"></a>
+<h _id=pragma_case_sensitive_like style="display:none"> PRAGMA case_sensitive_like</h><hr>
+ <p><b>PRAGMA case_sensitive_like = </b><i>boolean</i><b>;</b></p>
+ <p>The default behavior of the <a href="lang_expr.html#like">LIKE</a> operator is to ignore case
+ for ASCII characters. Hence, by default <b>'a' LIKE 'A'</b> is
+ true. The case_sensitive_like pragma installs a new application-defined
+ LIKE function that is either case sensitive or insensitive depending
+ on the value of the case_sensitive_like pragma.
+ When case_sensitive_like is disabled, the default LIKE behavior is
+ expressed. When case_sensitive_like is enabled, case becomes
+ significant. So, for example,
+ <b>'a' LIKE 'A'</b> is false but <b>'a' LIKE 'a'</b> is still true.</p>
+
+ <p>This pragma uses <a href="c3ref/create_function.html">sqlite3_create_function()</a> to overload the
+ LIKE and GLOB functions, which may override previous implementations
+ of LIKE and GLOB registered by the application. This pragma
+ only changes the behavior of the SQL <a href="lang_expr.html#like">LIKE</a> operator. It does not
+ change the behavior of the <a href="c3ref/strlike.html">sqlite3_strlike()</a> C-language interface,
+ which is always case insensitive.</p>
+<a name="pragma_cell_size_check"></a>
+<h _id=pragma_cell_size_check style="display:none"> PRAGMA cell_size_check</h><hr>
+ <p><b>PRAGMA cell_size_check
+ <br>PRAGMA cell_size_check = </b><i>boolean</i><b>;</b></p>
+ <p>The cell_size_check pragma enables or disables additional sanity
+ checking on database b-tree pages as they are initially read from disk.
+ With cell size checking enabled, database corruption is detected earlier
+ and is less likely to "spread". However, there is a small performance
+ hit for doing the extra checks and so cell size checking is turned off
+ by default.
+<a name="pragma_checkpoint_fullfsync"></a>
+<h _id=pragma_checkpoint_fullfsync style="display:none"> PRAGMA checkpoint_fullfsync</h><hr>
+ <p><b>PRAGMA checkpoint_fullfsync
+ <br>PRAGMA checkpoint_fullfsync = </b><i>boolean</i><b>;</b></p>
+ <p>Query or change the fullfsync flag for <a href="wal.html#ckpt">checkpoint</a> operations.
+ If this flag is set, then the F_FULLFSYNC syncing method is used
+ during checkpoint operations on systems that support F_FULLFSYNC.
+ The default value of the checkpoint_fullfsync flag
+ is off. Only Mac OS-X supports F_FULLFSYNC.</p>
+
+ <p>If the <a href="pragma.html#pragma_fullfsync">fullfsync</a> flag is set, then the F_FULLFSYNC syncing
+ method is used for all sync operations and the checkpoint_fullfsync
+ setting is irrelevant.</p>
+<a name="pragma_collation_list"></a>
+<h _id=pragma_collation_list style="display:none"> PRAGMA collation_list</h><hr>
+ <p><b>PRAGMA collation_list;</b></p>
+ <p>Return a list of the collating sequences defined for the current
+ database connection.</p>
+<a name="pragma_compile_options"></a>
+<h _id=pragma_compile_options style="display:none"> PRAGMA compile_options</h><hr>
+ <p><b>PRAGMA compile_options;</b></p>
+ <p>This pragma returns the names of <a href="compile.html">compile-time options</a> used when
+ building SQLite, one option per row. The "SQLITE_" prefix is omitted
+ from the returned option names. See also the
+ <a href="c3ref/compileoption_get.html">sqlite3_compileoption_get()</a> C/C++ interface and the
+ <a href="lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a> SQL functions.</p>
+<a name="pragma_count_changes"></a>
+<h _id=pragma_count_changes style="display:none"> PRAGMA count_changes</h><hr>
+ <p><b>PRAGMA count_changes;
+ <br>PRAGMA count_changes = </b>boolean</i><b>;</b></p>
+
+ <p>Query or change the count-changes flag. Normally, when the
+ count-changes flag is not set, <a href="lang_insert.html">INSERT</a>, <a href="lang_update.html">UPDATE</a> and <a href="lang_delete.html">DELETE</a> statements
+ return no data. When count-changes is set, each of these commands
+ returns a single row of data consisting of one integer value - the
+ number of rows inserted, modified or deleted by the command. The
+ returned change count does not include any insertions, modifications
+ or deletions performed by triggers, any changes made automatically
+ by <a href="foreignkeys.html#fk_actions">foreign key actions</a>, or updates caused by an <a href="lang_upsert.html">upsert</a>.</p>
+
+ <p>Another way to get the row change counts is to use the
+ <a href="c3ref/changes.html">sqlite3_changes()</a> or <a href="c3ref/total_changes.html">sqlite3_total_changes()</a> interfaces.
+ There is a subtle different, though. When an INSERT, UPDATE, or
+ DELETE is run against a view using an <a href="lang_createtrigger.html#instead_of_trigger">INSTEAD OF trigger</a>,
+ the count_changes pragma reports the number of rows in the view
+ that fired the trigger, whereas <a href="c3ref/changes.html">sqlite3_changes()</a> and
+ <a href="c3ref/total_changes.html">sqlite3_total_changes()</a> do not.
+
+
+ <p style='background-color: #ffd0d0;'>
+ <b>This pragma is deprecated</b> and exists
+ for backwards compatibility only. New applications
+ should avoid using this pragma. Older applications should discontinue
+ use of this pragma at the earliest opportunity. This pragma may be omitted
+ from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
+ </p>
+
+<a name="pragma_data_store_directory"></a>
+<h _id=pragma_data_store_directory style="display:none"> PRAGMA data_store_directory</h><hr>
+ <p><b>PRAGMA data_store_directory;
+ <br>PRAGMA data_store_directory = '</b><i>directory-name</i><b>';</b></p>
+ <p>Query or change the value of the <a href="c3ref/data_directory.html">sqlite3_data_directory</a> global
+ variable, which windows operating-system interface backends use to
+ determine where to store database files specified using a relative
+ pathname.</p>
+
+ <p>Changing the data_store_directory setting is <u>not</u> threadsafe.
+ Never change the data_store_directory setting if another thread
+ within the application is running any SQLite interface at the same time.
+ Doing so results in undefined behavior. Changing the data_store_directory
+ setting writes to the <a href="c3ref/data_directory.html">sqlite3_data_directory</a> global
+ variable and that global variable is not protected by a mutex.</p>
+
+ <p>This facility is provided for WinRT which does not have an OS
+ mechanism for reading or changing the current working directory.
+ The use of this pragma in any other context is discouraged and may
+ be disallowed in future releases.</p>
+
+
+ <p style='background-color: #ffd0d0;'>
+ <b>This pragma is deprecated</b> and exists
+ for backwards compatibility only. New applications
+ should avoid using this pragma. Older applications should discontinue
+ use of this pragma at the earliest opportunity. This pragma may be omitted
+ from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
+ </p>
+
+<a name="pragma_data_version"></a>
+<h _id=pragma_data_version style="display:none"> PRAGMA data_version</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>data_version;</b></p>
+ <p>The "PRAGMA data_version" command provides an indication that the
+ database file has been modified.
+ Interactive programs that hold database content in memory or that
+ display database content on-screen can use the PRAGMA data_version
+ command to determine if they need to flush and reload their memory
+ or update the screen display.</p>
+
+ <p>The integer values returned by two
+ invocations of "PRAGMA data_version" from the same connection
+ will be different if changes were committed to the database
+ by any other connection in the interim.
+ The "PRAGMA data_version" value is unchanged for commits made
+ on the same database connection.
+ The behavior of "PRAGMA data_version" is the same for all database
+ connections, including database connections in separate processes
+ and <a href="sharedcache.html">shared cache</a> database connections.
+
+ <p>The "PRAGMA data_version" value is a local property of each
+ database connection and so values returned by two concurrent invocations
+ of "PRAGMA data_version" on separate database connections are
+ often different even though the underlying database is identical.
+ It is only meaningful to compare the "PRAGMA data_version" values
+ returned by the same database connection at two different points in
+ time.
+<a name="pragma_database_list"></a>
+<h _id=pragma_database_list style="display:none"> PRAGMA database_list</h><hr>
+ <p><b>PRAGMA database_list;</b></p>
+ <p>This pragma works like a query to return one row for each database
+ attached to the current database connection.
+ The second column is "main" for the main database file, "temp"
+ for the database file used to store TEMP objects, or the name of the
+ ATTACHed database for other database files.
+ The third column is the name of the database file itself, or an empty
+ string if the database is not associated with a file.</p>
+<a name="pragma_default_cache_size"></a>
+<h _id=pragma_default_cache_size style="display:none"> PRAGMA default_cache_size</h><hr>
+ <b>PRAGMA </b><i>schema.</i><b>default_cache_size;
+ <br>PRAGMA </b><i>schema.</i><b>default_cache_size
+ = </b><i>Number-of-pages</i><b>;</b></p>
+
+ <p>This pragma queries or sets the suggested maximum number of pages
+ of disk cache that will be allocated per open database file.
+ The difference between this pragma and <a href="pragma.html#pragma_cache_size">cache_size</a> is that the
+ value set here persists across database connections.
+ The value of the default cache size is stored in the 4-byte
+ big-endian integer located at offset 48 in the header of the
+ database file.
+ </p>
+
+
+ <p style='background-color: #ffd0d0;'>
+ <b>This pragma is deprecated</b> and exists
+ for backwards compatibility only. New applications
+ should avoid using this pragma. Older applications should discontinue
+ use of this pragma at the earliest opportunity. This pragma may be omitted
+ from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
+ </p>
+
+<a name="pragma_defer_foreign_keys"></a>
+<h _id=pragma_defer_foreign_keys style="display:none"> PRAGMA defer_foreign_keys</h><hr>
+ <p><b>PRAGMA defer_foreign_keys
+ <br>PRAGMA defer_foreign_keys = </b><i>boolean</i><b>;</b></p>
+ <p>When the defer_foreign_keys <a href="pragma.html#syntax">PRAGMA</a> is on,
+ enforcement of all <a href="foreignkeys.html">foreign key constraints</a> is delayed until the
+ outermost transaction is committed. The defer_foreign_keys pragma
+ defaults to OFF so that foreign key constraints are only deferred if
+ they are created as "DEFERRABLE INITIALLY DEFERRED". The
+ defer_foreign_keys pragma is automatically switched off at each
+ COMMIT or ROLLBACK. Hence, the defer_foreign_keys pragma must be
+ separately enabled for each transaction. This pragma is
+ only meaningful if foreign key constraints are enabled, of course.</p>
+
+ <p>The <a href="c3ref/db_status.html">sqlite3_db_status</a>(db,<a href="c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">SQLITE_DBSTATUS_DEFERRED_FKS</a>,...)
+ C-language interface can be used during a transaction to determine
+ if there are deferred and unresolved foreign key constraints.</p>
+<a name="pragma_empty_result_callbacks"></a>
+<h _id=pragma_empty_result_callbacks style="display:none"> PRAGMA empty_result_callbacks</h><hr>
+ <p><b>PRAGMA empty_result_callbacks;
+ <br>PRAGMA empty_result_callbacks = </b><i>boolean</i><b>;</b></p>
+
+ <p>Query or change the empty-result-callbacks flag.</p>
+
+ <p>The empty-result-callbacks flag affects the <a href="c3ref/exec.html">sqlite3_exec()</a> API only.
+ Normally, when the empty-result-callbacks flag is cleared, the
+ callback function supplied to the <a href="c3ref/exec.html">sqlite3_exec()</a> is not invoked
+ for commands that return zero rows of data. When empty-result-callbacks
+ is set in this situation, the callback function is invoked exactly once,
+ with the third parameter set to 0 (NULL). This is to enable programs
+ that use the <a href="c3ref/exec.html">sqlite3_exec()</a> API to retrieve column-names even when
+ a query returns no data.</p>
+
+
+ <p style='background-color: #ffd0d0;'>
+ <b>This pragma is deprecated</b> and exists
+ for backwards compatibility only. New applications
+ should avoid using this pragma. Older applications should discontinue
+ use of this pragma at the earliest opportunity. This pragma may be omitted
+ from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
+ </p>
+
+<a name="pragma_encoding"></a>
+<h _id=pragma_encoding style="display:none"> PRAGMA encoding</h><hr>
+ <p><b>PRAGMA encoding;
+ <br>PRAGMA encoding = 'UTF-8';
+ <br>PRAGMA encoding = 'UTF-16';
+ <br>PRAGMA encoding = 'UTF-16le';
+ <br>PRAGMA encoding = 'UTF-16be';</b></p>
+ <p>In first form, if the main database has already been
+ created, then this pragma returns the text encoding used by the
+ main database, one of 'UTF-8', 'UTF-16le' (little-endian UTF-16
+ encoding) or 'UTF-16be' (big-endian UTF-16 encoding). If the main
+ database has not already been created, then the value returned is the
+ text encoding that will be used to create the main database, if
+ it is created by this session.</p>
+
+ <p>The second through fifth forms of this pragma
+ set the encoding that the main database will be created with if
+ it is created by this session. The string 'UTF-16' is interpreted
+ as "UTF-16 encoding using native machine byte-ordering". It is not
+ possible to change the text encoding of a database after it has been
+ created and any attempt to do so will be silently ignored.</p>
+
+ <p>If no encoding is first set with this pragma,
+ then the encoding with which the main database will be created
+ defaults to one determined by the
+ <a href="c3ref/open.html">API used to open the connection</a>.</p>
+
+ <p>Once an encoding has been set for a database, it cannot be changed.</p>
+
+ <p>Databases created by the <a href="lang_attach.html">ATTACH</a> command always use the same encoding
+ as the main database. An attempt to <a href="lang_attach.html">ATTACH</a> a database with a different
+ text encoding from the "main" database will fail.</p>
+<a name="pragma_foreign_key_check"></a>
+<h _id=pragma_foreign_key_check style="display:none"> PRAGMA foreign_key_check</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>foreign_key_check;
+ <br>PRAGMA </b><i>schema.</i><b>foreign_key_check(</b><i>table-name</i><b>);</b></b></p>
+
+ <p>The foreign_key_check pragma checks the database, or the table
+ called "<i>table-name</i>", for
+ <a href="foreignkeys.html">foreign key constraints</a> that are violated. The foreign_key_check
+ pragma returns one row output for each foreign key violation.
+ There are four columns in each result row.
+ The first column is the name of the table that contains the REFERENCES
+ clause. The second column is the <a href="lang_createtable.html#rowid">rowid</a> of the row that
+ contains the invalid REFERENCES clause, or NULL if the child table is a
+ <a href="withoutrowid.html">WITHOUT ROWID</a> table. The third column is the name
+ of the table that is referred to. The fourth column is the index of
+ the specific foreign key constraint that failed. The fourth column
+ in the output of the foreign_key_check pragma is the same integer as
+ the first column in the output of the <a href="pragma.html#pragma_foreign_key_list">foreign_key_list pragma</a>.
+ When a "<i>table-name</i>" is specified, the only foreign key constraints
+ checked are those created by REFERENCES clauses in the
+ CREATE TABLE statement for <i>table-name</i>.</p>
+<a name="pragma_foreign_key_list"></a>
+<h _id=pragma_foreign_key_list style="display:none"> PRAGMA foreign_key_list</h><hr>
+ <p><b>PRAGMA foreign_key_list(</b><i>table-name</i><b>);</b></p>
+
+ <p>This pragma returns one row for each <a href="foreignkeys.html">foreign key constraint</a>
+ created by a REFERENCES clause in the CREATE TABLE statement of
+ table "<i>table-name</i>".
+<a name="pragma_foreign_keys"></a>
+<h _id=pragma_foreign_keys style="display:none"> PRAGMA foreign_keys</h><hr>
+ <p><b>PRAGMA foreign_keys;
+ <br>PRAGMA foreign_keys = </b><i>boolean</i><b>;</b></p>
+ <p>Query, set, or clear the enforcement of <a href="foreignkeys.html">foreign key constraints</a>.
+
+ <p>This pragma is a no-op within a transaction; foreign key constraint
+ enforcement may only be enabled or disabled when there is no pending
+ <a href="lang_transaction.html">BEGIN</a> or <a href="lang_savepoint.html">SAVEPOINT</a>.
+
+ <p>Changing the foreign_keys setting affects the execution of
+ all statements prepared
+ using the database connection, including those prepared before the
+ setting was changed. Any existing statements prepared using the legacy
+ <a href="c3ref/prepare.html">sqlite3_prepare()</a> interface may fail with an <a href="rescode.html#schema">SQLITE_SCHEMA</a> error
+ after the foreign_keys setting is changed.
+
+ <p>As of SQLite <a href="releaselog/3_6_19.html">version 3.6.19</a>, the default setting for foreign
+ key enforcement is OFF. However, that might change in a future
+ release of SQLite. The default setting for foreign key enforcement
+ can be specified at compile-time using the <a href="compile.html#default_foreign_keys">SQLITE_DEFAULT_FOREIGN_KEYS</a>
+ preprocessor macro. To minimize future problems, applications should
+ set the foreign key enforcement flag as required by the application
+ and not depend on the default setting.
+<a name="pragma_freelist_count"></a>
+<h _id=pragma_freelist_count style="display:none"> PRAGMA freelist_count</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>freelist_count;</b></p>
+ <p>Return the number of unused pages in the database file.</p>
+<a name="pragma_full_column_names"></a>
+<h _id=pragma_full_column_names style="display:none"> PRAGMA full_column_names</h><hr>
+ <p><b>PRAGMA full_column_names;
+ <br>PRAGMA full_column_names = </b><i>boolean</i><b>;</b></p>
+
+ <p>Query or change the full_column_names flag. This flag together
+ with the <a href="pragma.html#pragma_short_column_names">short_column_names</a> flag determine
+ the way SQLite assigns names to result columns of <a href="lang_select.html">SELECT</a> statements.
+ Result columns are named by applying the following rules in order:
+ <ol>
+ <li><p>If there is an AS clause on the result, then the name of
+ the column is the right-hand side of the AS clause.</p></li>
+ <li><p>If the result is a general expression, not a just the name of
+ a source table column,
+ then the name of the result is a copy of the expression text.</p></li>
+ <li><p>If the <a href="pragma.html#pragma_short_column_names">short_column_names</a> pragma is ON, then the name of the
+ result is the name of the source table column without the
+ source table name prefix: COLUMN.</p></li>
+ <li><p>If both pragmas <a href="pragma.html#pragma_short_column_names">short_column_names</a> and <a href="pragma.html#pragma_full_column_names">full_column_names</a>
+ are OFF then case (2) applies.
+ </p></li>
+ <li><p>The name of the result column is a combination of the source table
+ and source column name: TABLE.COLUMN</p></li>
+ </ol>
+
+
+ <p style='background-color: #ffd0d0;'>
+ <b>This pragma is deprecated</b> and exists
+ for backwards compatibility only. New applications
+ should avoid using this pragma. Older applications should discontinue
+ use of this pragma at the earliest opportunity. This pragma may be omitted
+ from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
+ </p>
+
+<a name="pragma_fullfsync"></a>
+<h _id=pragma_fullfsync style="display:none"> PRAGMA fullfsync</h><hr>
+ <p><b>PRAGMA fullfsync
+ <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. Each row of the result
+ describes a single calling signature for a single SQL function.
+ Some SQL functions will have multiple rows in the result set
+ if they can (for example) be invoked with a varying number of
+ arguments or can accept text in various encodings.
+<a name="pragma_hard_heap_limit"></a>
+<h _id=pragma_hard_heap_limit style="display:none"> PRAGMA hard_heap_limit</h><hr>
+ <p><b>PRAGMA hard_heap_limit<br>
+ PRAGMA hard_heap_limit=</b><i>N</i></p>
+
+ <p>This pragma invokes the <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a> interface with
+ the argument N, if N is specified and N is a positive integer that
+ is less than the current hard heap limit.
+ The hard_heap_limit pragma always returns the same integer
+ that would be returned by the <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64</a>(-1) C-language
+ function. That is to say, it always returns the value of the hard
+ heap limit that is set after any changes imposed by this PRAGMA.
+ </p>
+
+ <p>This pragma can only lower the heap limit, never raise it.
+ The C-language interface <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a> must be used
+ to raise the heap limit.</p>
+
+ <p>See also the <a href="pragma.html#pragma_soft_heap_limit">soft_heap_limit pragma</a>.
+<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>
+<a name="pragma_incremental_vacuum"></a>
+<h _id=pragma_incremental_vacuum style="display:none"> PRAGMA incremental_vacuum</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>incremental_vacuum</b><i>(N)</i><b>;<br>
+ PRAGMA </b><i>schema.</i><b>incremental_vacuum;</b></p>
+ <p>The incremental_vacuum pragma causes up to <i>N</i> pages to
+ be removed from the <a href="fileformat2.html#freelist">freelist</a>. The database file is truncated by
+ the same amount. The incremental_vacuum pragma has no effect if
+ the database is not in
+ <a href="#pragma_auto_vacuum">auto_vacuum=incremental</a> mode
+ or if there are no pages on the freelist. If there are fewer than
+ <i>N</i> pages on the freelist, or if <i>N</i> is less than 1, or
+ if the "(<i>N</i>)" argument is omitted, then the entire
+ freelist is cleared.</p>
+<a name="pragma_index_info"></a>
+<h _id=pragma_index_info style="display:none"> PRAGMA index_info</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>index_info(</b><i>index-name</i><b>);</b></p>
+ <p>This pragma returns one row for each key column in the named index.
+ A key column is a column that is actually named in the <a href="lang_createindex.html">CREATE INDEX</a>
+ index statement or <a href="lang_createtable.html#uniqueconst">UNIQUE constraint</a> or <a href="lang_createtable.html#primkeyconst">PRIMARY KEY constraint</a> that
+ created the index. Index entries also usually contain auxiliary
+ columns that point back to the table row being indexed. The auxiliary
+ index-columns are not shown by the index_info pragma, but they are
+ listed by the <a href="pragma.html#pragma_index_xinfo">index_xinfo pragma</a>.</p>
+
+ <p>Output columns from the index_info pragma are as follows:
+ <ol>
+ <li>The rank of the column within the index. (0 means left-most.)
+ <li>The rank of the column within the table being indexed.
+ A value of -1 means <a href="lang_createtable.html#rowid">rowid</a> and a value of -2 means that an
+ <a href="expridx.html">expression</a> is being used.
+ <li>The name of the column being indexed. This columns is NULL
+ if the column is the <a href="lang_createtable.html#rowid">rowid</a> or an <a href="expridx.html">expression</a>.
+ </ol>
+
+ <p>If there is no index named <i>index-name</i> but there is a
+ <a href="withoutrowid.html">WITHOUT ROWID</a> table with that name, then (as of
+ SQLite <a href="releaselog/3_30_0.html">version 3.30.0</a> on 2019-10-04) this pragma returns the
+ PRIMARY KEY columns of the WITHOUT ROWID table as they are used
+ in the records of the underlying b-tree, which is to say with
+ duplicate columns removed.
+<a name="pragma_index_list"></a>
+<h _id=pragma_index_list style="display:none"> PRAGMA index_list</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>index_list(</b><i>table-name</i><b>);</b></p>
+ <p>This pragma returns one row for each index associated with the
+ given table.
+ <p>Output columns from the index_list pragma are as follows:
+ <ol>
+ <li>A sequence number assigned to each index for internal tracking
+ purposes.
+ <li>The name of the index.
+ <li>"1" if the index is UNIQUE and "0" if not.
+ <li>"c" if the index was created by a <a href="lang_createindex.html">CREATE INDEX</a> statement,
+ "u" if the index was created by a <a href="lang_createtable.html#uniqueconst">UNIQUE constraint</a>, or
+ "pk" if the index was created by a <a href="lang_createtable.html#primkeyconst">PRIMARY KEY constraint</a>.
+ <li>"1" if the index is a <a href="partialindex.html">partial index</a> and "0" if not.
+ </ol>
+ </p>
+<a name="pragma_index_xinfo"></a>
+<h _id=pragma_index_xinfo style="display:none"> PRAGMA index_xinfo</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>index_xinfo(</b><i>index-name</i><b>);</b></p>
+ <p>This pragma returns information about every column in an index.
+ Unlike this <a href="pragma.html#pragma_index_info">index_info pragma</a>, this pragma returns information about
+ every column in the index, not just the key columns.
+ (A key column is a column that is actually named in the <a href="lang_createindex.html">CREATE INDEX</a>
+ index statement or <a href="lang_createtable.html#uniqueconst">UNIQUE constraint</a> or <a href="lang_createtable.html#primkeyconst">PRIMARY KEY constraint</a> that
+ created the index. Auxiliary columns are additional columns needed to
+ locate the table entry that corresponds to each index entry.)
+
+ <p>Output columns from the index_xinfo pragma are as follows:
+ <ol>
+ <li>The rank of the column within the index. (0 means left-most.
+ Key columns come before auxiliary columns.)
+ <li>The rank of the column within the table being indexed, or -1 if
+ the index-column is the <a href="lang_createtable.html#rowid">rowid</a> of the table being indexed and -2
+ if the <a href="expridx.html">index is on an expression</a>.
+ <li>The name of the column being indexed, or NULL if the index-column
+ is the <a href="lang_createtable.html#rowid">rowid</a> of the table being indexed or an
+ <a href="expridx.html">expression</a>.
+ <li>1 if the index-column is sorted in reverse (DESC) order by the
+ index and 0 otherwise.
+ <li>The name for the <a href="datatype3.html#collation">collating sequence</a>
+ used to compare values in the index-column.
+ <li>1 if the index-column is a key column and 0 if the index-column
+ is an auxiliary column.
+ </ol>
+
+ <p>If there is no index named <i>index-name</i> but there is a
+ <a href="withoutrowid.html">WITHOUT ROWID</a> table with that name, then (as of
+ SQLite <a href="releaselog/3_30_0.html">version 3.30.0</a> on 2019-10-04) this pragma returns the
+ columns of the WITHOUT ROWID table as they are used
+ in the records of the underlying b-tree, which is to say with
+ de-duplicated PRIMARY KEY columns first followed by data columns.
+<a name="pragma_integrity_check"></a>
+<h _id=pragma_integrity_check style="display:none"> PRAGMA integrity_check</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>integrity_check;
+ <br>PRAGMA </b><i>schema.</i><b>integrity_check(</b><i>N</i><b>)
+ <br>PRAGMA </b><i>schema.</i><b>integrity_check(</b><i>TABLENAME</i><b>)</b></p>
+ <p>This pragma does a low-level formatting and consistency check
+ of the database. The integrity_check pragma look for:
+ <ul>
+ <li> Table or index entries that are out of sequence
+ <li> Misformatted records
+ <li> Missing pages
+ <li> Missing or surplus index entries
+ <li> UNIQUE, CHECK, and NOT NULL constraint errors
+ <li> Integrity of the freelist
+ <li> Sections of the database that are used more than once, or not at all
+ </ul>
+ <p>If the integrity_check pragma finds problems, strings are returned
+ (as multiple rows with a single column per row) which describe
+ the problems. Pragma integrity_check will return at most <i>N</i>
+ errors before the analysis quits, with N defaulting
+ to 100. If pragma integrity_check finds no errors, a
+ single row with the value 'ok' is returned.</p>
+
+ <p>The usual case is that the entire database file is checked. However,
+ if the argument is <i>TABLENAME</i>, then checking is only performed for the
+ the table named and its associated indexes.
+ This is called a "partial integrity check". Because only a subset of the
+ database is checked, errors such as unused sections of the file or duplication
+ use of the same section of the file by two or more tables cannot be detected.
+ The freelist is only verified on a
+ partial integrity check if <i>TABLENAME</i> is <a href="schematab.html">sqlite_schema</a> or one of its
+ aliases. Support for partial integrity checks was added with
+ version 3.33.0 (2020-08-14).
+
+ <p>PRAGMA integrity_check does not find
+ <a href="foreignkeys.html">FOREIGN KEY</a> errors.
+ Use the <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command to find errors in
+ FOREIGN KEY constraints.</p>
+
+ <p>See also the <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> command which does most of the
+ checking of PRAGMA integrity_check but runs much faster.</p>
+<a name="pragma_journal_mode"></a>
+<h _id=pragma_journal_mode style="display:none"> PRAGMA journal_mode</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>journal_mode;
+ <br>PRAGMA </b><i>schema.</i><b>journal_mode
+ = <i>DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF</i></b></p>
+
+ <p>This pragma queries or sets the journal mode for databases
+ associated with the current <a href="c3ref/sqlite3.html">database connection</a>.</p>
+
+ <p>The first form of this pragma queries the current journaling
+ mode for <i>database</i>. When <i>database</i> is omitted, the
+ "main" database is queried.</p>
+
+ <p>The second form changes the journaling mode for "<i>database</i>"
+ or for all attached databases if "<i>database</i>" is omitted.
+ The new journal mode is returned. If the journal mode
+ could not be changed, the original journal mode is returned.</p>
+
+ <p>The DELETE journaling mode is the normal behavior. In the DELETE
+ mode, the rollback journal is deleted at the conclusion of each
+ transaction. Indeed, the delete operation is the action that causes
+ the transaction to commit.
+ (See the document titled <a href="atomiccommit.html">
+ Atomic Commit In SQLite</a> for additional detail.)</p>
+
+ <p>The TRUNCATE journaling mode commits transactions by truncating
+ the rollback journal to zero-length instead of deleting it. On many
+ systems, truncating a file is much faster than deleting the file since
+ the containing directory does not need to be changed.</p>
+
+ <p>The PERSIST journaling mode prevents the rollback journal from
+ being deleted at the end of each transaction. Instead, the header
+ of the journal is overwritten with zeros. This will prevent other
+ database connections from rolling the journal back. The PERSIST
+ journaling mode is useful as an optimization on platforms where
+ deleting or truncating a file is much more expensive than overwriting
+ the first block of a file with zeros. See also:
+ <a href="pragma.html#pragma_journal_size_limit">PRAGMA journal_size_limit</a> and <a href="compile.html#default_journal_size_limit">SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT</a>.</p>
+
+ <p>The MEMORY journaling mode stores the rollback journal in
+ volatile RAM. This saves disk I/O but at the expense of database
+ safety and integrity. If the application using SQLite crashes in
+ the middle of a transaction when the MEMORY journaling mode is set,
+ then the database file will very likely
+ <a href="howtocorrupt.html#cfgerr">go corrupt</a>.</p>
+
+ <p>The WAL journaling mode uses a <a href="wal.html">write-ahead log</a> instead of a
+ rollback journal to implement transactions. The WAL journaling mode
+ is persistent; after being set it stays in effect
+ across multiple database connections and after closing and
+ reopening the database. A database in WAL journaling mode
+ can only be accessed by SQLite <a href="releaselog/3_7_0.html">version 3.7.0</a> (2010-07-21)
+ or later.</p>
+
+ <p>The OFF journaling mode disables the rollback journal completely.
+ No rollback journal is ever created and hence there is never a rollback
+ journal to delete. The OFF journaling mode disables the atomic
+ commit and rollback capabilities of SQLite. The <a href="lang_transaction.html">ROLLBACK</a> command
+ no longer works; it behaves in an undefined way. Applications must
+ avoid using the <a href="lang_transaction.html">ROLLBACK</a> command when the journal mode is OFF.
+ If the application crashes
+ in the middle of a transaction when the OFF journaling mode is
+ set, then the database file will very likely
+ <a href="howtocorrupt.html#cfgerr">go corrupt</a>. Without a journal, there is no way for
+ a statement to unwind partially completed operations following
+ a constraint error. This might also leave the database in a corrupted
+ state. For example, if a duplicate entry causes a
+ <a href="lang_createindex.html">CREATE UNIQUE INDEX</a> statement to fail half-way through,
+ it will leave behind a partially created, and hence corrupt, index.
+ Because OFF journaling
+ mode allows the database file to be corrupted using ordinary SQL,
+ it is disabled when <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> is enabled.</p>
+
+ <p>Note that the journal_mode for an <a href="inmemorydb.html">in-memory database</a>
+ is either MEMORY or OFF and can not be changed to a different value.
+ An attempt to change the journal_mode of an <a href="inmemorydb.html">in-memory database</a> to
+ any setting other than MEMORY or OFF is ignored. Note also that
+ the journal_mode cannot be changed while a transaction is active.</p>
+<a name="pragma_journal_size_limit"></a>
+<h _id=pragma_journal_size_limit style="display:none"> PRAGMA journal_size_limit</h><hr>
+ <p><b>
+ PRAGMA </b><i>schema.</i><b>journal_size_limit<br>
+ PRAGMA </b><i>schema.</i><b>journal_size_limit = </b><i>N</i> <b>;</b>
+
+ <p>If a database connection is operating in
+ <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a> or in
+ <a href="pragma.html#pragma_journal_mode">persistent journal mode</a>
+ (PRAGMA journal_mode=persist) then
+ after committing a transaction the <a href="lockingv3.html#rollback">rollback journal</a> file may remain in
+ the file-system. This increases performance for subsequent transactions
+ since overwriting an existing file is faster than append to a file,
+ but it also consumes
+ file-system space. After a large transaction (e.g. a <a href="lang_vacuum.html">VACUUM</a>),
+ the rollback journal file may consume a very large amount of space.
+
+ <p>Similarly, in <a href="wal.html">WAL mode</a>, the write-ahead log file is not truncated
+ following a <a href="wal.html#ckpt">checkpoint</a>. Instead, SQLite reuses the existing file
+ for subsequent WAL entries since overwriting is faster than appending.
+
+ <p>The journal_size_limit pragma may be used to limit the size of
+ rollback-journal and WAL files left
+ in the file-system after transactions or checkpoints.
+ Each time a transaction is committed or a WAL file resets, SQLite
+ compares the size of the rollback journal file or WAL file left in
+ the file-system to the size limit
+ set by this pragma and if the journal or WAL file is larger
+ it is truncated to the limit.
+
+ <p>The second form of the pragma listed above is used to set a new limit
+ in bytes for the specified database. A negative number implies no limit.
+ To always truncate rollback journals and WAL files to their minimum size,
+ set the journal_size_limit to zero.
+ Both the first and second forms of the pragma listed above return a single
+ result row containing a single integer column - the value of the journal
+ size limit in bytes. The default journal size limit is -1 (no limit). The
+ <a href="compile.html#default_journal_size_limit">SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT</a> preprocessor macro can be used to change
+ the default journal size limit at compile-time.</p>
+
+ <p>This pragma only operates on the single database specified prior
+ to the pragma name (or on the "main" database if no database is specified.)
+ There is no way to change the journal size limit on all attached databases
+ using a single PRAGMA statement. The size limit must be set separately for
+ each attached database.
+<a name="pragma_legacy_alter_table"></a>
+<h _id=pragma_legacy_alter_table style="display:none"> PRAGMA legacy_alter_table</h><hr>
+ <p><b>PRAGMA legacy_alter_table;
+ <br>PRAGMA legacy_alter_table = <i>boolean</i></b></p>
+ <p>This pragma sets or queries the value of the legacy_alter_table
+ flag. When this flag is on, the <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a>
+ command (for changing the name of a table) works as it did
+ in SQLite 3.24.0 (2018-06-04) and earlier. More specifically,
+ when this flag is on
+ the <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> command only rewrites the initial occurrence
+ of the table name in its <a href="lang_createtable.html">CREATE TABLE</a> statement and in any associated
+ <a href="lang_createindex.html">CREATE INDEX</a> and <a href="lang_createtrigger.html">CREATE TRIGGER</a> statements. Other references to the
+ table are unmodified, including:
+ <ul>
+ <li> References to the table within the bodies of triggers and views.
+ <li> References to the table within CHECK constraints in the original
+ CREATE TABLE statement.
+ <li> References to the table within the WHERE clauses of <a href="partialindex.html">partial indexes</a>.
+ </ul>
+ The default setting for this pragma is OFF, which means that all
+ references to the table anywhere in the schema are converted to the new name.
+ <p>This pragma is provided as a work-around for older programs that
+ contain code that expect the incomplete behavior
+ of <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> found in older versions of SQLite.
+ New applications should leave this flag turned off.
+ <p>For compatibility with older <a href="vtab.html">virtual table</a> implementations,
+ this flag is turned on temporarily while the <a href="vtab.html#xrename">sqlite3_module.xRename</a>
+ method is being run. The value of this flag is restored after the
+ <a href="vtab.html#xrename">sqlite3_module.xRename</a> method finishes.
+ <p>The legacy alter table behavior can also be toggled on and off
+ using the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable">SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</a> option to the
+ <a href="c3ref/db_config.html">sqlite3_db_config()</a> interface.
+ <p>The legacy alter table behavior is a per-connection setting. Turning
+ this features on or off affects all attached database files within the
+ <a href="c3ref/sqlite3.html">database connection</a>.
+ The setting does not persist. Changing this setting in one connection
+ does not affect any other connections.
+<a name="pragma_legacy_file_format"></a>
+<h _id=pragma_legacy_file_format style="display:none"> PRAGMA legacy_file_format</h><hr>
+ <p><b>PRAGMA legacy_file_format;</b>
+ <p>This pragma no longer functions. It has become a no-op.
+ The capabilities formerly provided by PRAGMA legacy_file_format
+ are now available using the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</a>
+ option to the <a href="c3ref/db_config.html">sqlite3_db_config()</a> C-language interface.
+ <p>
+<a name="pragma_locking_mode"></a>
+<h _id=pragma_locking_mode style="display:none"> PRAGMA locking_mode</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>locking_mode;
+ <br>PRAGMA </b><i>schema.</i><b>locking_mode
+ = <i>NORMAL | EXCLUSIVE</i></b></p>
+ <p>This pragma sets or queries the database connection locking-mode.
+ The locking-mode is either NORMAL or EXCLUSIVE.
+
+ <p>In NORMAL locking-mode (the default unless overridden at compile-time
+ using <a href="compile.html#default_locking_mode">SQLITE_DEFAULT_LOCKING_MODE</a>), a database connection
+ unlocks the database file at the conclusion of each read or
+ write transaction. When the locking-mode is set to EXCLUSIVE, the
+ database connection never releases file-locks. The first time the
+ database is read in EXCLUSIVE mode, a shared lock is obtained and
+ held. The first time the database is written, an exclusive lock is
+ obtained and held.</p>
+
+ <p>Database locks obtained by a connection in EXCLUSIVE mode may be
+ released either by closing the database connection, or by setting the
+ locking-mode back to NORMAL using this pragma and then accessing the
+ database file (for read or write). Simply setting the locking-mode to
+ NORMAL is not enough - locks are not released until the next time
+ the database file is accessed.</p>
+
+ <p>There are three reasons to set the locking-mode to EXCLUSIVE.
+ <ol>
+ <li>The application wants to prevent other processes from
+ accessing the database file.
+ <li>The number of system calls for filesystem operations is reduced,
+ possibly resulting in a small performance increase.
+ <li><a href="wal.html">WAL</a> databases can be accessed in EXCLUSIVE mode without the
+ use of shared memory.
+ (<a href="wal.html#noshm">Additional information</a>)
+ </ol>
+ </p>
+
+ <p>When the locking_mode pragma specifies a particular database,
+ for example:</p>
+
+ <blockquote>
+PRAGMA <b>main.</b>locking_mode=EXCLUSIVE;
+ </blockquote>
+
+ <p>then the locking mode applies only to the named database. If no
+ database name qualifier precedes the "locking_mode" keyword then
+ the locking mode is applied to all databases, including any new
+ databases added by subsequent <a href="lang_attach.html">ATTACH</a> commands.</p>
+
+ <p>The "temp" database (in which TEMP tables and indices are stored)
+ and <a href="inmemorydb.html">in-memory databases</a>
+ always uses exclusive locking mode. The locking mode of temp and
+ <a href="inmemorydb.html">in-memory databases</a> cannot
+ be changed. All other databases use the normal locking mode by default
+ and are affected by this pragma.</p>
+
+ <p>If the locking mode is EXCLUSIVE when first entering
+ <a href="wal.html">WAL journal mode</a>, then the locking mode cannot be changed to
+ NORMAL until after exiting WAL journal mode.
+ If the locking mode is NORMAL when first entering WAL
+ journal mode, then the locking mode can be changed between NORMAL and
+ EXCLUSIVE and back again at any time and without needing to exit
+ WAL journal mode.</p>
+<a name="pragma_max_page_count"></a>
+<h _id=pragma_max_page_count style="display:none"> PRAGMA max_page_count</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>max_page_count;
+ <br>PRAGMA </b><i>schema.</i><b>max_page_count = </b><i>N</i><b>;</b></p>
+ <p>Query or set the maximum number of pages in the database file.
+ Both forms of the pragma return the maximum page count. The second
+ form attempts to modify the maximum page count. The maximum page
+ count cannot be reduced below the current database size.
+ </p>
+<a name="pragma_mmap_size"></a>
+<h _id=pragma_mmap_size style="display:none"> PRAGMA mmap_size</h><hr>
+ <p><br><b>PRAGMA </b><i>schema.</i><b>mmap_size;
+ <br>PRAGMA </b><i>schema.</i><b>mmap_size=</b><i>N</i></p>
+
+ <p>Query or change the maximum number of bytes that are set
+ aside for memory-mapped I/O on a single database. The first form
+ (without an argument) queries the current limit. The second
+ form (with a numeric argument) sets the limit for the specified
+ database, or for all databases if the optional database name is
+ omitted. In the second form, if the database name is omitted, the
+ limit that is set becomes the default limit for all databases that
+ are added to the <a href="c3ref/sqlite3.html">database connection</a> by subsequent <a href="lang_attach.html">ATTACH</a>
+ statements.</p>
+
+ <p>The argument N is the maximum number of bytes of the database file
+ that will be accessed using memory-mapped I/O. If N is zero then
+ memory mapped I/O is disabled. If N is negative, then the limit
+ reverts to the default value determined by the most recent
+ <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a>), or to the compile
+ time default determined by <a href="compile.html#default_mmap_size">SQLITE_DEFAULT_MMAP_SIZE</a> if not
+ start-time limit has been set.</p>
+
+ <p>The <a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a> statement will never increase the amount
+ of address space used for memory-mapped I/O above the
+ hard limit set by the <a href="compile.html#max_mmap_size">SQLITE_MAX_MMAP_SIZE</a> compile-time option,
+ nor the hard limit set at startup-time by the second argument to
+ sqlite3_config(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a>)</p>
+
+ <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.
+<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
+ first two forms, and only the specified schema is optimized in the latter
+ two.</p>
+ <p>To achieve the best long-term query performance without the need to
+ do a detailed engineering analysis of the application schema and SQL,
+ it is recommended that applications run "PRAGMA optimize" (with no arguments)
+ just before closing each <a href="c3ref/sqlite3.html">database connection</a>. Long-running applications
+ might also benefit from setting a timer to run "PRAGMA optimize" every
+ few hours.
+ </p>
+ <p>This pragma is usually a no-op or nearly so and is very fast.
+ However if SQLite feels
+ that performing database optimizations (such as running <a href="lang_analyze.html">ANALYZE</a>
+ or creating new indexes) will improve the performance of future queries, then
+ some database I/O may be done. Applications that want to limit the amount
+ of work performed can set a timer that will invoke
+ <a href="c3ref/interrupt.html">sqlite3_interrupt()</a> if the pragma goes on for too long.
+ Or, since SQLite 3.32.0, the application can use
+ <a href="pragma.html#pragma_analysis_limit">PRAGMA analysis_limit=<i>N</i></a> for some small
+ value of <i>N</i> (a few hundred or a few thousand) to limit the depth
+ of analyze.
+ </p>
+ <p>The details of optimizations performed by this pragma are expected
+ to change and improve over time. Applications should anticipate that
+ this pragma will perform new optimizations in future releases.</p>
+
+ <p>The optional MASK argument is a bitmask of optimizations to perform:
+ <ol>
+ <li value='1'><p>
+ Debugging mode. Do not actually perform any optimizations
+ but instead return one line of text for each optimization
+ that would have been done. Off by default.
+ <li value='2'><p>
+ Run <a href="lang_analyze.html">ANALYZE</a> on tables that might benefit. On by default.
+ See below for additional information.
+ <li value='4'><p>
+ <em>(Not yet implemented)</em>
+ Record usage and performance
+ information from the current session in the
+ database file so that it will be available to "optimize"
+ pragmas run by future database connections.
+ <li value='8'><p>
+ <em>(Not yet implemented)</em>
+ Create indexes that might have been helpful to recent queries.
+ </ol>
+ <p>The default MASK is and always shall be 0xfffe. The 0xfffe mask means
+ perform all of the optimizations listed above except Debug Mode. If new
+ optimizations are added in the future that should be off by default, those
+ new optimizations will be given a mask of 0x10000 or larger.</p>
+
+ <p>To see all optimizations that would have been done without actually
+ doing them, run "PRAGMA optimize(-1)". To use only the ANALYZE
+ optimization, run "PRAGMA optimize(0x02)".</p>
+
+ <p><b>Determination Of When To Run Analyze</b></p>
+ <p> In the current implementation, a table is analyzed if and only if
+ all of the following are true:
+ <ul>
+ <li><p>
+ MASK bit 0x02 is set.
+ <li><p>
+ The query planner used <a href="fileformat2.html#stat1tab">sqlite_stat1</a>-style statistics for one or
+ more indexes of the table at some point during the lifetime of
+ the current connection.
+ <li><p>
+ One or more indexes of the table are currently unanalyzed <em>or</em>
+ the number of rows in the table has increased by 25 times or more
+ since the last time ANALYZE was run.
+ </ul>
+ <p> The rules for when tables are analyzed are likely to change in
+ future releases.
+<a name="pragma_page_count"></a>
+<h _id=pragma_page_count style="display:none"> PRAGMA page_count</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>page_count;</b></p>
+ <p>Return the total number of pages in the database file.</p>
+<a name="pragma_page_size"></a>
+<h _id=pragma_page_size style="display:none"> PRAGMA page_size</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>page_size;
+ <br>PRAGMA </b><i>schema.</i><b>page_size = </b><i>bytes</i><b>;</b></p>
+ <p>Query or set the page size of the database. The page
+ size must be a power of two between 512 and 65536 inclusive.
+ </p>
+
+ <p>When a new database is created, SQLite assigns a page size to
+ the database based on platform and filesystem. For many years,
+ the default page size was almost always 1024 bytes, but beginning
+ with SQLite <a href="releaselog/3_12_0.html">version 3.12.0</a> (2016-03-29),
+ the default page size increased to 4096.
+ The default page size is recommended for most applications.
+
+ <p>Specifying a new page size does not change the page size
+ immediately. Instead, the new page size is remembered and is used
+ to set the page size when the database is first created, if it does
+ not already exist when the page_size pragma is issued, or at the
+ next <a href="lang_vacuum.html">VACUUM</a> command that is run on the same database connection
+ while not in <a href="wal.html">WAL mode</a>.</p>
+
+ <p>The <a href="compile.html#default_page_size">SQLITE_DEFAULT_PAGE_SIZE</a> compile-time option can be used
+ to change the default page size assigned to new databases.
+<a name="pragma_parser_trace"></a>
+<h _id=pragma_parser_trace style="display:none"> PRAGMA parser_trace</h><hr>
+ <p><b>PRAGMA parser_trace = </b><i>boolean</i><b>; </b></p>
+
+ <p>If SQLite has been compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time
+ option, then the parser_trace pragma can be used to turn on tracing
+ for the SQL parser used internally by SQLite.
+ This feature is used for debugging SQLite itself.</p>
+
+
+ <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.
+<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 data changes on database files when
+ enabled. When this pragma is enabled, any attempt to CREATE, DELETE,
+ DROP, INSERT, or UPDATE will result in an <a href="rescode.html#readonly">SQLITE_READONLY</a> error.
+ However, the database is not truly read-only. You can still run
+ a <a href="wal.html#ckpt">checkpoint</a> or a <a href="lang_transaction.html">COMMIT</a> and the return value of the
+ <a href="c3ref/db_readonly.html">sqlite3_db_readonly()</a> routine is not affected.
+ </p>
+<a name="pragma_quick_check"></a>
+<h _id=pragma_quick_check style="display:none"> PRAGMA quick_check</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>quick_check;
+ <br>PRAGMA </b><i>schema.</i><b>quick_check(</b><i>N</i><b>)</b>
+ <br>PRAGMA </b><i>schema.</i><b>quick_check(</b><i>TABLENAME</i><b>)</b></p>
+ <p>The pragma is like <a href="pragma.html#pragma_integrity_check">integrity_check</a> except that it does not verify
+ UNIQUE constraints and does not verify
+ that index content matches table content. By skipping UNIQUE
+ and index consistency checks, quick_check is able to run faster.
+ PRAGMA quick_check runs in O(N) time whereas <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>
+ requires O(NlogN) time where N is the total number of rows in the
+ database. Otherwise the two pragmas are the same.
+ </p>
+<a name="pragma_read_uncommitted"></a>
+<h _id=pragma_read_uncommitted style="display:none"> PRAGMA read_uncommitted</h><hr>
+ <p><b>PRAGMA read_uncommitted;
+ <br>PRAGMA read_uncommitted = </b><i>boolean</i><b>;</b></p>
+ <p>Query, set, or clear READ UNCOMMITTED isolation. The default isolation
+ level for SQLite is SERIALIZABLE. Any process or thread can select
+ READ UNCOMMITTED isolation, but SERIALIZABLE will still be used except
+ between connections that share a common page and schema cache.
+ Cache sharing is enabled using the <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> API.
+ Cache sharing is disabled by default.
+ </p>
+
+ <p>See <a href="sharedcache.html">SQLite Shared-Cache Mode</a> for additional information.</p>
+<a name="pragma_recursive_triggers"></a>
+<h _id=pragma_recursive_triggers style="display:none"> PRAGMA recursive_triggers</h><hr>
+ <p><b>PRAGMA recursive_triggers;
+ <br>PRAGMA recursive_triggers = </b><i>boolean</i><b>;</b></p>
+ <p>Query, set, or clear the recursive trigger capability.
+
+ <p>Changing the recursive_triggers setting affects the execution of
+ all statements prepared
+ using the database connection, including those prepared before the
+ setting was changed. Any existing statements prepared using the legacy
+ <a href="c3ref/prepare.html">sqlite3_prepare()</a> interface may fail with an <a href="rescode.html#schema">SQLITE_SCHEMA</a> error
+ after the recursive_triggers setting is changed.
+
+ <p>Prior to SQLite <a href="releaselog/3_6_18.html">version 3.6.18</a> (2009-09-11),
+ recursive triggers were not supported.
+ The behavior of SQLite was always as if this pragma was
+ set to OFF. Support for recursive triggers was added in version 3.6.18
+ but was initially turned OFF by default, for compatibility. Recursive
+ triggers may be turned on by default in future versions of SQLite.
+ </p>
+
+ <p>The depth of recursion for triggers has a hard upper limit set by
+ the <a href="limits.html#max_trigger_depth">SQLITE_MAX_TRIGGER_DEPTH</a> compile-time option and a run-time
+ limit set by <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimittriggerdepth">SQLITE_LIMIT_TRIGGER_DEPTH</a>,...).</p>
+<a name="pragma_reverse_unordered_selects"></a>
+<h _id=pragma_reverse_unordered_selects style="display:none"> PRAGMA reverse_unordered_selects</h><hr>
+ <p><b>PRAGMA reverse_unordered_selects;
+ <br>PRAGMA reverse_unordered_selects = </b><i>boolean</i><b>;</b></p>
+ <p>When enabled, this PRAGMA causes many <a href="lang_select.html">SELECT</a> statements without
+ an ORDER BY clause to emit their results in the reverse order from what
+ they normally would. This can help debug applications that are
+ making invalid assumptions about the result order.
+ The reverse_unordered_selects pragma works for most SELECT statements,
+ however the query planner may sometimes choose an algorithm that is
+ not easily reversed, in which case the output will appear in the same
+ order regardless of the reverse_unordered_selects setting.
+ <p>SQLite makes no
+ guarantees about the order of results if a SELECT omits the ORDER BY
+ clause. Even so, the order of results does not change from one
+ run to the next, and so many applications mistakenly come to depend
+ on the arbitrary output order whatever that order happens to be. However,
+ sometimes new versions of SQLite will contain optimizer enhancements
+ that will cause the output order of queries without ORDER BY clauses
+ to shift. When that happens, applications that depend on a certain
+ output order might malfunction. By running the application multiple
+ times with this pragma both disabled and enabled, cases where the
+ application makes faulty assumptions about output order can be
+ identified and fixed early, reducing problems
+ that might be caused by linking against a different version of SQLite.
+ </p>
+<a name="pragma_schema_version"></a>
+<h _id=pragma_schema_version style="display:none"> PRAGMA schema_version</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>schema_version;
+ <br>PRAGMA </b><i>schema.</i><b>schema_version = </b><i>integer </i>;
+
+<p> The schema_version pragma will get or set
+ the value of the schema-version integer at offset 40 in the
+ <a href="fileformat2.html#database_header">database header</a>.
+
+<p> SQLite automatically increments the schema-version whenever the
+ schema changes. As each SQL statement runs, the schema version is
+ checked to ensure that the schema has not changed since the SQL
+ statement was <a href="c3ref/prepare.html">prepared</a>.
+ Subverting this mechanism by using "PRAGMA schema_version=N"
+ to change the value of the schema_version
+ may cause SQL statement to run using an obsolete schema,
+ which can lead to incorrect answers and/or
+ <a href="howtocorrupt.html#cfgerr">database corruption</a>.
+ It is always safe to read the schema_version, but changing the
+ schema_version can cause problems. For this reason, attempts
+ to change the value of schema_version are a silent no-op when
+ <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">defensive mode</a> is enabled for a
+ database connection.
+
+
+ <p><span style='background-color: #ffff60;'>
+ <b>Warning:</b>
+ Misuse of this pragma can result in <a href="howtocorrupt.html#cfgerr">database corruption</a>.
+ </span></p>
+
+
+<p> For the purposes of this pragma, the <a href="lang_vacuum.html">VACUUM</a> command is considered
+ a schema change, since <a href="lang_vacuum.html">VACUUM</a> will usually alter the "rootpage"
+ values for entries in the <a href="schematab.html">sqlite_schema table</a>.
+
+
+<p> See also the <a href="pragma.html#pragma_application_id">application_id pragma</a> and <a href="pragma.html#pragma_user_version">user_version pragma</a>.
+<a name="pragma_secure_delete"></a>
+<h _id=pragma_secure_delete style="display:none"> PRAGMA secure_delete</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>secure_delete;
+ <br>PRAGMA </b><i>schema.</i><b>secure_delete = </b><i>boolean</i>|<b>FAST</b></p>
+ <p>Query or change the secure-delete setting. When secure_delete is
+ on, SQLite overwrites deleted content with zeros. The default
+ setting for secure_delete is determined by the <a href="compile.html#secure_delete">SQLITE_SECURE_DELETE</a>
+ compile-time option and is normally off. The off setting for
+ secure_delete improves performance by reducing the number of CPU cycles
+ and the amount of disk I/O. Applications that wish to avoid leaving
+ forensic traces after content is deleted or updated should enable the
+ secure_delete pragma prior to performing the delete or update, or else
+ run <a href="lang_vacuum.html">VACUUM</a> after the delete or update.
+
+ <p>The "fast" setting for secure_delete (added circa 2017-08-01)
+ is an intermediate setting in between "on" and "off".
+ When secure_delete is set to "fast",
+ SQLite will overwrite deleted content with zeros only if doing so
+ does not increase the amount of I/O. In other words, the "fast"
+ setting uses more CPU cycles but does not use more I/O.
+ This has the effect of purging all old content from <a href="fileformat2.html#btree">b-tree pages</a>,
+ but leaving forensic traces on <a href="fileformat2.html#freelist">freelist pages</a>.
+
+ <p>
+ When there are <a href="lang_attach.html">attached databases</a> and no database
+ is specified in the pragma, all databases have their secure-delete
+ setting altered.
+ The secure-delete setting for newly attached databases is the setting
+ of the main database at the time the ATTACH command is evaluated.
+
+ <p>
+ When multiple database connections share the same cache, changing
+ the secure-delete flag on one database connection changes it for them
+ all.
+ </p>
+<a name="pragma_short_column_names"></a>
+<h _id=pragma_short_column_names style="display:none"> PRAGMA short_column_names</h><hr>
+ <p><b>PRAGMA short_column_names;
+ <br>PRAGMA short_column_names = </b><i>boolean</i><b>;</b></p>
+
+ <p>Query or change the short-column-names flag. This flag affects
+ the way SQLite names columns of data returned by <a href="lang_select.html">SELECT</a> statements.
+ See the <a href="pragma.html#pragma_full_column_names">full_column_names</a> pragma for full details.
+ </p>
+
+
+ <p style='background-color: #ffd0d0;'>
+ <b>This pragma is deprecated</b> and exists
+ for backwards compatibility only. New applications
+ should avoid using this pragma. Older applications should discontinue
+ use of this pragma at the earliest opportunity. This pragma may be omitted
+ from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
+ </p>
+
+<a name="pragma_shrink_memory"></a>
+<h _id=pragma_shrink_memory style="display:none"> PRAGMA shrink_memory</h><hr>
+ <p><b>PRAGMA shrink_memory</b></p>
+
+ <p>This pragma causes the database connection on which it is invoked
+ to free up as much memory as it can, by calling
+ <a href="c3ref/db_release_memory.html">sqlite3_db_release_memory()</a>.
+ </p>
+<a name="pragma_soft_heap_limit"></a>
+<h _id=pragma_soft_heap_limit style="display:none"> PRAGMA soft_heap_limit</h><hr>
+ <p><b>PRAGMA soft_heap_limit<br>
+ PRAGMA soft_heap_limit=</b><i>N</i></p>
+
+ <p>This pragma invokes the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interface with
+ the argument N, if N is specified and is a non-negative integer.
+ The soft_heap_limit pragma always returns the same integer
+ that would be returned by the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64</a>(-1) C-language
+ function.
+ </p>
+ <p>See also the <a href="pragma.html#pragma_hard_heap_limit">hard_heap_limit pragma</a>.
+<a name="pragma_stats"></a>
+<h _id=pragma_stats style="display:none"> PRAGMA stats</h><hr>
+ <p><b>PRAGMA stats;</b> </p>
+ <p>This pragma returns auxiliary information about tables and
+ indices. The returned information is used during testing to help
+ verify that the query planner is operating correctly. The format
+ and meaning of this pragma will likely change from one release
+ to the next. Because of its volatility, the behavior and output
+ format of this pragma are deliberately undocumented.</p>
+
+
+ <p style='background-color: #f0e0ff;'>
+ The intended use of this pragma is only for testing and validation of
+ SQLite. This pragma is subject to change without notice and is not
+ recommended for use by application programs.</p>
+
+<a name="pragma_synchronous"></a>
+<h _id=pragma_synchronous style="display:none"> PRAGMA synchronous</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>synchronous;
+ <br>PRAGMA </b><i>schema.</i><b>synchronous = </b>
+ <i>0 | OFF | 1 | NORMAL | 2 | FULL | 3 | EXTRA</i><b>;</b></p>
+
+ <p>Query or change the setting of the "synchronous" flag.
+ The first (query) form will return the synchronous setting as an
+ integer. The second form changes the synchronous setting.
+ The meanings of the various synchronous settings are as follows:</p>
+ <dl>
+ <dt><b>EXTRA</b> (3)</dt>
+ <dd>
+ EXTRA synchronous is like FULL with the addition that the directory
+ containing a <a href="lockingv3.html#rollback">rollback journal</a> is synced after that journal is unlinked
+ to commit a transaction in DELETE mode. EXTRA provides additional
+ durability if the commit is followed closely by a power loss.</dd>
+ <dt><b>FULL</b> (2)</dt>
+ <dd>
+ When synchronous is FULL (2), the SQLite database engine will
+ use the xSync method of the <a href="vfs.html">VFS</a> to ensure that all content is safely
+ written to the disk surface prior to continuing.
+ This ensures that an operating system crash or power failure will
+ not corrupt the database.
+ FULL synchronous is very safe, but it is also slower. FULL is the
+ most commonly used synchronous setting when not in <a href="wal.html">WAL mode</a>.</dd>
+ <dt><b>NORMAL</b> (1)</dt>
+ <dd>
+ When synchronous is NORMAL (1), the SQLite database
+ engine will still sync at the most critical moments, but less often
+ than in FULL mode. There is a very small (though non-zero) chance that
+ a power failure at just the wrong time could corrupt the database in
+ <a href="pragma.html#pragma_journal_mode">journal_mode</a>=DELETE on an older filesystem.
+ <a href="wal.html">WAL mode</a> is safe from corruption with synchronous=NORMAL, and probably
+ DELETE mode is safe too on modern filesystems. WAL mode is always consistent
+ with synchronous=NORMAL, but WAL mode does lose durability. A transaction
+ committed in WAL mode with synchronous=NORMAL might roll back following
+ a power loss or system crash. Transactions are durable across application
+ crashes regardless of the synchronous setting or journal mode.
+ The synchronous=NORMAL setting is a good choice for most applications
+ running in <a href="wal.html">WAL mode</a>.</dd>
+ <dt><b>OFF</b> (0)</dt>
+ <dd>
+ With synchronous OFF (0), SQLite continues without syncing
+ as soon as it has handed data off to the operating system.
+ If the application running SQLite crashes, the data will be safe, but
+ the database <a href="howtocorrupt.html#cfgerr">might become corrupted</a> if the operating system
+ crashes or the computer loses power before that data has been written
+ to the disk surface. On the other hand, commits can be orders of
+ magnitude faster with synchronous OFF.
+ </dd></dl>
+ </p>
+
+ <p>In <a href="wal.html">WAL</a> mode when synchronous is NORMAL (1), the WAL file is
+ synchronized before each <a href="wal.html#ckpt">checkpoint</a> and the database file is
+ synchronized after each completed <a href="wal.html#ckpt">checkpoint</a> and the WAL file
+ header is synchronized when a WAL file begins to be reused after
+ a checkpoint, but no sync operations occur during most transactions.
+ With synchronous=FULL in WAL mode, an additional
+ sync operation of the WAL file happens after each transaction commit.
+ The extra WAL sync following each transaction helps ensure that
+ transactions are durable across a power loss. Transactions are
+ consistent with or without the extra syncs provided by
+ synchronous=FULL.
+ If durability is not a concern, then synchronous=NORMAL is normally
+ all one needs in WAL mode.</p>
+
+ <p>The TEMP schema always has synchronous=OFF since the content of
+ of TEMP is ephemeral and is not expected to survive a power outage.
+ Attempts to change the synchronous setting for TEMP are
+ silently ignored.
+
+ <p>See also the <a href="pragma.html#pragma_fullfsync">fullfsync</a> and <a href="pragma.html#pragma_checkpoint_fullfsync">checkpoint_fullfsync</a> pragmas.</p>
+<a name="pragma_table_info"></a>
+<h _id=pragma_table_info style="display:none"> PRAGMA table_info</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>table_info(</b><i>table-name</i><b>);</b></p>
+ <p>This pragma returns one row for each normal column
+ in the named table.
+ Columns in the result set include: "name" (its name); "type"
+ (data type if given, else ''); "notnull" (whether or not the column
+ can be NULL); "dflt_value" (the default value for the column);
+ and "pk" (either zero for columns that are not part of the primary key,
+ or the 1-based index of the column within the primary key).</p>
+ <p>The "cid" column should not be taken to mean more than
+ "rank within the current result set".</p>
+ <p>The table named in the table_info pragma can also be a view.</p>
+ <p>This pragma does not show information about <a href="gencol.html">generated columns</a> or
+ <a href="vtab.html#hiddencol">hidden columns</a>. Use <a href="pragma.html#pragma_table_xinfo">PRAGMA table_xinfo</a> to get a more complete list
+ of columns that includes generated and hidden columns.
+<a name="pragma_table_list"></a>
+<h _id=pragma_table_list style="display:none"> PRAGMA table_list</h><hr>
+ <p> <b>PRAGMA table_list;
+ <br>PRAGMA </b><i>schema.</i><b>table_list;
+ <br>PRAGMA table_list(</b><i>table-name</i><b>);</b></p>
+ <p>This pragma returns information about the tables and views in the schema,
+ one table per row of output. The table_list pragma first appeared
+ in SQLite version 3.37.0 (2021-11-27). As of its initial release
+ the columns returned by the table_list pragma include those listed below.
+ Future versions of SQLite will probably add additional columns of
+ output.
+ <p>
+ <ol>
+ <li> <b>schema</b>: the schema in which the table or view appears
+ (for example "main" or "temp").
+ <li> <b>name</b>: the name of the table or view.
+ <li> <b>type</b>: the type of object - one of "table", "view",
+ "shadow" (for <a href="vtab.html#xshadowname">shadow tables</a>), or "virtual" for
+ <a href="vtab.html">virtual tables</a>.
+ <li> <b>ncol</b>: the number of columns in the table, including
+ <a href="gencol.html">generated columns</a> and <a href="vtab.html#hiddencol">hidden columns</a>.
+ <li> <b>wr</b>: 1 if the table is a <a href="withoutrowid.html">WITHOUT ROWID</a> table or 0 if is not.
+ <li> <b>strict</b>: 1 if the table is a <a href="stricttables.html">STRICT table</a> or 0 if it is not.
+ <li> <i>Additional columns will likely be added in future releases.</i>
+ </ol>
+ <p>
+ The default behavior is to show all tables in all schemas. If the
+ <i>schema.</i> name appears before the pragma, then only tables in that
+ one schema are shown. If a <i>table-name</i> argument is supplied, then
+ only information about that one table is returned.
+<a name="pragma_table_xinfo"></a>
+<h _id=pragma_table_xinfo style="display:none"> PRAGMA table_xinfo</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>table_xinfo(</b><i>table-name</i><b>);</b></p>
+ <p>This pragma returns one row for each column in the named table,
+ including <a href="gencol.html">generated columns</a> and <a href="vtab.html#hiddencol">hidden columns</a>.
+ The output has the same columns as for <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> plus
+ a column, "hidden", whose value signifies a normal column (0),
+ a dynamic or stored generated column (2 or 3),
+ or a hidden column in a virtual table (1). The rows for which
+ this field is non-zero are those omitted for <a href="pragma.html#pragma_table_info">PRAGMA table_info</a>.
+<a name="pragma_temp_store"></a>
+<h _id=pragma_temp_store style="display:none"> PRAGMA temp_store</h><hr>
+ <p><b>PRAGMA temp_store;
+ <br>PRAGMA temp_store = </b>
+ <i>0 | DEFAULT | 1 | FILE | 2 | MEMORY</i><b>;</b></p>
+
+ <p>Query or change the setting of the "<b>temp_store</b>" parameter.
+ When temp_store is DEFAULT (0), the compile-time C preprocessor macro
+ <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> is used to determine where temporary tables and indices
+ are stored. When
+ temp_store is MEMORY (2) <a href="inmemorydb.html#temp_db">temporary tables</a> and indices are kept
+ as if they were in pure <a href="inmemorydb.html">in-memory databases</a>.
+ When temp_store is FILE (1) <a href="inmemorydb.html#temp_db">temporary tables</a> and indices are stored
+ in a file. The <a href="pragma.html#pragma_temp_store_directory">temp_store_directory</a> pragma can be used to specify
+ the directory containing temporary files when
+ <b>FILE</b> is specified. When the temp_store setting is changed,
+ all existing temporary tables, indices, triggers, and views are
+ immediately deleted.</p>
+
+ <p>It is possible for the library compile-time C preprocessor symbol
+ <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> to override this pragma setting.
+ The following table summarizes
+ the interaction of the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> preprocessor macro and the
+ temp_store pragma:</p>
+
+ <blockquote>
+ <table cellpadding="2" border="1">
+ <tr><th valign="bottom"><a href="compile.html#temp_store">SQLITE_TEMP_STORE</a></th>
+ <th valign="bottom">PRAGMA<br>temp_store</th>
+ <th>Storage used for<br>TEMP tables and indices</th></tr>
+ <tr><td align="center">0</td>
+ <td align="center"><em>any</em></td>
+ <td align="center">file</td></tr>
+ <tr><td align="center">1</td>
+ <td align="center">0</td>
+ <td align="center">file</td></tr>
+ <tr><td align="center">1</td>
+ <td align="center">1</td>
+ <td align="center">file</td></tr>
+ <tr><td align="center">1</td>
+ <td align="center">2</td>
+ <td align="center">memory</td></tr>
+ <tr><td align="center">2</td>
+ <td align="center">0</td>
+ <td align="center">memory</td></tr>
+ <tr><td align="center">2</td>
+ <td align="center">1</td>
+ <td align="center">file</td></tr>
+ <tr><td align="center">2</td>
+ <td align="center">2</td>
+ <td align="center">memory</td></tr>
+ <tr><td align="center">3</td>
+ <td align="center"><em>any</em></td>
+ <td align="center">memory</td></tr>
+ </table>
+ </blockquote>
+<a name="pragma_temp_store_directory"></a>
+<h _id=pragma_temp_store_directory style="display:none"> PRAGMA temp_store_directory</h><hr>
+ <p><b>PRAGMA temp_store_directory;
+ <br>PRAGMA temp_store_directory = '</b><i>directory-name</i><b>';</b></p>
+ <p>Query or change the value of the <a href="c3ref/temp_directory.html">sqlite3_temp_directory</a> global
+ variable, which many operating-system interface backends use to
+ determine where to store <a href="inmemorydb.html#temp_db">temporary tables</a> and indices.</p>
+
+ <p>When the temp_store_directory setting is changed, all existing temporary
+ tables, indices, triggers, and viewers in the database connection that
+ issued the pragma are immediately deleted. In
+ practice, temp_store_directory should be set immediately after the first
+ database connection for a process is opened. If the temp_store_directory
+ is changed for one database connection while other database connections
+ are open in the same process, then the behavior is undefined and
+ probably undesirable.</p>
+
+ <p>Changing the temp_store_directory setting is <u>not</u> threadsafe.
+ Never change the temp_store_directory setting if another thread
+ within the application is running any SQLite interface at the same time.
+ Doing so results in undefined behavior. Changing the temp_store_directory
+ setting writes to the <a href="c3ref/temp_directory.html">sqlite3_temp_directory</a> global
+ variable and that global variable is not protected by a mutex.</p>
+
+ <p>The value <i>directory-name</i> should be enclosed in single quotes.
+ To revert the directory to the default, set the <i>directory-name</i> to
+ an empty string, e.g., <i>PRAGMA temp_store_directory = ''</i>. An
+ error is raised if <i>directory-name</i> is not found or is not
+ writable. </p>
+
+ <p>The default directory for temporary files depends on the OS. Some
+ OS interfaces may choose to ignore this variable and place temporary
+ files in some other directory different from the directory specified
+ here. In that sense, this pragma is only advisory.</p>
+
+
+ <p style='background-color: #ffd0d0;'>
+ <b>This pragma is deprecated</b> and exists
+ for backwards compatibility only. New applications
+ should avoid using this pragma. Older applications should discontinue
+ use of this pragma at the earliest opportunity. This pragma may be omitted
+ from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
+ </p>
+
+<a name="pragma_threads"></a>
+<h _id=pragma_threads style="display:none"> PRAGMA threads</h><hr>
+ <p><b>PRAGMA threads;
+ <br>PRAGMA threads = </b><i>N</i><b>;</b></p>
+ <p>Query or change the value of the
+ <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a>,...) limit for
+ the current database connection. This limit sets an upper bound
+ on the number of auxiliary threads that a <a href="c3ref/stmt.html">prepared statement</a> is
+ allowed to launch to assist with a query. The default limit is 0
+ unless it is changed using the <a href="compile.html#default_worker_threads">SQLITE_DEFAULT_WORKER_THREADS</a>
+ compile-time option. When the limit is zero, that means no
+ auxiliary threads will be launched.</p>
+
+ <p>This pragma is a thin wrapper around the
+ <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a>,...) interface.
+ </p>
+<a name="pragma_trusted_schema"></a>
+<h _id=pragma_trusted_schema style="display:none"> PRAGMA trusted_schema</h><hr>
+ <p><b>PRAGMA trusted_schema;
+ <br>PRAGMA trusted_schema = </b><i>boolean</i><b>;</b></p>
+ <p>The trusted_schema setting is a per-connection boolean that
+ determines whether or not SQL functions and virtual tables that
+ have not been security audited are allowed to be run by views,
+ triggers, or in expressions of the schema such as <a href="lang_createtable.html#ckconst">CHECK constraints</a>,
+ <a href="lang_createtable.html#dfltval">DEFAULT clauses</a>, <a href="gencol.html">generated columns</a>, <a href="expridx.html">expression indexes</a>, and/or
+ <a href="partialindex.html">partial indexes</a>. This setting can also be controlled using
+ the <a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a>,...)
+ C-language interface.
+ <p>In order to maintain backwards compatibility, this setting is
+ ON by default. There are advantages to turning it off, and most
+ applications will be unaffected if it is turned off. For that reason,
+ all applications are encouraged to switch this setting off on every
+ database connection as soon as that connection is opened.
+ <p>The <a href="compile.html#trusted_schema">-DSQLITE_TRUSTED_SCHEMA=0</a> compile-time option will cause
+ this setting to default to OFF.
+<a name="pragma_user_version"></a>
+<h _id=pragma_user_version style="display:none"> PRAGMA user_version</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>user_version;
+ <br>PRAGMA </b><i>schema.</i><b>user_version = </b><i>integer </i><b>;</b>
+
+
+<p> The user_version pragma will get or set
+ the value of the user-version integer at offset 60 in the
+ <a href="fileformat2.html#database_header">database header</a>. The user-version is an integer that is
+ available to applications to use however they want. SQLite
+ makes no use of the user-version itself.
+
+<p> See also the <a href="pragma.html#pragma_application_id">application_id pragma</a> and <a href="pragma.html#pragma_schema_version">schema_version pragma</a>.
+<a name="pragma_vdbe_addoptrace"></a>
+<h _id=pragma_vdbe_addoptrace style="display:none"> PRAGMA vdbe_addoptrace</h><hr>
+ <p><b>PRAGMA vdbe_addoptrace = </b><i>boolean</i><b>;</b></p>
+
+ <p>If SQLite has been compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time
+ option, then the vdbe_addoptrace pragma can be used to cause a complete
+ VDBE opcodes to be displayed as they are created during code generation.
+ This feature is used for debugging SQLite itself. See the
+ <a href="vdbe.html#trace">VDBE documentation</a> for more
+ information.</p>
+
+
+ <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_vdbe_debug"></a>
+<h _id=pragma_vdbe_debug style="display:none"> PRAGMA vdbe_debug</h><hr>
+ <p><b>PRAGMA vdbe_debug = </b><i>boolean</i><b>;</b></p>
+
+ <p>If SQLite has been compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time
+ option, then the vdbe_debug pragma is a shorthand for three other
+ debug-only pragmas: vdbe_addoptrace, vdbe_listing, and vdbe_trace.
+ This feature is used for debugging SQLite itself. See the
+ <a href="vdbe.html#trace">VDBE documentation</a> for more
+ information.</p>
+
+
+ <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_vdbe_listing"></a>
+<h _id=pragma_vdbe_listing style="display:none"> PRAGMA vdbe_listing</h><hr>
+ <p><b>PRAGMA vdbe_listing = </b><i>boolean</i><b>;</b></p>
+
+ <p>If SQLite has been compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time
+ option, then the vdbe_listing pragma can be used to cause a complete
+ listing of the virtual machine opcodes to appear on standard output
+ as each statement is evaluated.
+ With listing is on, the entire content of a program is printed
+ just prior to beginning execution. The statement
+ executes normally after the listing is printed.
+ This feature is used for debugging SQLite itself. See the
+ <a href="vdbe.html#trace">VDBE documentation</a> for more
+ information.</p>
+
+
+ <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_vdbe_trace"></a>
+<h _id=pragma_vdbe_trace style="display:none"> PRAGMA vdbe_trace</h><hr>
+ <p><b>PRAGMA vdbe_trace = </b><i>boolean</i><b>;</b></p>
+
+ <p>If SQLite has been compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time
+ option, then the vdbe_trace pragma can be used to cause virtual machine
+ opcodes to be printed on standard output as they are evaluated.
+ This feature is used for debugging SQLite. See the
+ <a href="vdbe.html#trace">VDBE documentation</a> for more
+ information.</p>
+
+
+ <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_wal_autocheckpoint"></a>
+<h _id=pragma_wal_autocheckpoint style="display:none"> PRAGMA wal_autocheckpoint</h><hr>
+ <p><b>PRAGMA wal_autocheckpoint;<br>
+ PRAGMA wal_autocheckpoint=</b><i>N</i><b>;</b></p>
+
+ <p>This pragma queries or sets the <a href="wal.html">write-ahead log</a>
+ <a href="wal.html#ckpt">auto-checkpoint</a> interval.
+ When the <a href="wal.html">write-ahead log</a> is enabled (via the
+ <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>) a checkpoint will be run automatically whenever
+ the write-ahead log equals or exceeds <i>N</i> pages in length.
+ Setting the auto-checkpoint size to zero or a negative value
+ turns auto-checkpointing off.</p>
+
+ <p>This pragma is a wrapper around the
+ <a href="c3ref/wal_autocheckpoint.html">sqlite3_wal_autocheckpoint()</a> C interface.
+ All automatic checkpoints are <a href="c3ref/wal_checkpoint_v2.html">PASSIVE</a>.</p>
+
+ <p>Autocheckpointing is enabled by default with an interval
+ of 1000 or <a href="compile.html#default_wal_autocheckpoint">SQLITE_DEFAULT_WAL_AUTOCHECKPOINT</a>.</p>
+
+<a name="pragma_wal_checkpoint"></a>
+<h _id=pragma_wal_checkpoint style="display:none"> PRAGMA wal_checkpoint</h><hr>
+ <p><b>PRAGMA </b><i>schema.</i><b>wal_checkpoint;</b><br>
+ <b>PRAGMA </b><i>schema.</i><b>wal_checkpoint(PASSIVE);</b><br>
+ <b>PRAGMA </b><i>schema.</i><b>wal_checkpoint(FULL);</b><br>
+ <b>PRAGMA </b><i>schema.</i><b>wal_checkpoint(RESTART);</b><br>
+ <b>PRAGMA </b><i>schema.</i><b>wal_checkpoint(TRUNCATE);</b>
+ </p>
+
+ <p>If the <a href="wal.html">write-ahead log</a> is enabled (via the <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>),
+ this pragma causes a <a href="wal.html#ckpt">checkpoint</a> operation to run on database
+ <i>database</i>, or on all attached databases if <i>database</i>
+ is omitted. If <a href="wal.html">write-ahead log</a> mode is disabled, this pragma is a
+ harmless no-op.</p>
+
+ <p>Invoking this
+ pragma without an argument is equivalent to calling the
+ <a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint()</a> C interface.</p>
+ Invoking this pragma with an argument is equivalent to calling the
+ <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> C interface with a
+ <a href="c3ref/c_checkpoint_full.html">3rd parameter</a>
+ corresponding to the argument:
+
+ <dl>
+ <dt>PASSIVE<dd>
+ Checkpoint as many frames as possible without waiting for any database
+ readers or writers to finish. Sync the db file if all frames in the log
+ are checkpointed. This mode is the same as calling the
+ <a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint()</a> C interface. The
+ <a href="c3ref/busy_handler.html">busy-handler callback</a> is never invoked in
+ this mode.
+
+ <dt>FULL<dd>
+ This mode blocks
+ (invokes the <a href="c3ref/busy_handler.html">busy-handler callback</a>)
+ until there is no
+ database writer and all readers are reading from the most recent database
+ snapshot. It then checkpoints all frames in the log file and syncs the
+ database file. FULL blocks concurrent writers while it is
+ running, but readers can proceed.
+
+ <dt>RESTART<dd>
+ This mode works the same way as FULL with the addition that after
+ checkpointing the log file it blocks (calls the
+ <a href="c3ref/busy_handler.html">busy-handler callback</a>)
+ until all readers are finished with the log file. This ensures
+ that the next client to write to the database file restarts the log file
+ from the beginning. RESTART blocks concurrent writers while it is
+ running, but allowed readers to proceed.
+
+ <dt>TRUNCATE<dd>
+ This mode works the same way as RESTART with the
+ addition that the WAL file is truncated to zero bytes upon successful
+ completion.
+ </dl>
+
+
+ <p>The wal_checkpoint pragma returns a single row with three
+ integer columns. The first column is usually 0 but will be
+ 1 if a RESTART or FULL or TRUNCATE checkpoint was blocked from completing,
+ for example because another thread or process was actively
+ using the database. In other words, the first column is 0 if the
+ equivalent call to <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> would have returned
+ <a href="rescode.html#ok">SQLITE_OK</a> or 1 if the equivalent call would have returned <a href="rescode.html#busy">SQLITE_BUSY</a>.
+ The second column is the number of modified pages that have been
+ written to the write-ahead log file.
+ The third column is the number of pages in the write-ahead log file
+ that have been successfully moved back into the database file at
+ the conclusion of the checkpoint.
+ The second and third column are -1 if there is no
+ write-ahead log, for example if this pragma is invoked on a database
+ connection that is not in <a href="wal.html">WAL mode</a>.</p>
+<a name="pragma_writable_schema"></a>
+<h _id=pragma_writable_schema style="display:none"> PRAGMA writable_schema</h><hr>
+ <p><b>PRAGMA writable_schema = </b><i>boolean</i><b>;</b><br>
+ <b>PRAGMA writable_schema = RESET</b></p>
+
+ <p>When this pragma is on, and the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> flag
+ is off, then the <a href="schematab.html">sqlite_schema</a> table
+ can be changed using ordinary <a href="lang_update.html">UPDATE</a>, <a href="lang_insert.html">INSERT</a>, and <a href="lang_delete.html">DELETE</a>
+ statements. If the argument is "RESET" then schema writing is
+ disabled (as with "PRAGMA writable_schema=OFF") and, in addition, the
+ schema is reloaded. <span style='background-color: #ffff60;'><b>Warning:</b>
+ misuse of this pragma can easily result in
+ a <a href="howtocorrupt.html#cfgerr">corrupt database file</a>.</span>
+
+<hr>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/pragma.in?m=eb1e52298c36d5a07">2022-11-21 19:17:39</a> UTC </small></i></p>
+
diff --git a/www/pressrelease-20071212.html b/www/pressrelease-20071212.html
new file mode 100644
index 0000000..47898f1
--- /dev/null
+++ b/www/pressrelease-20071212.html
@@ -0,0 +1,123 @@
+<html>
+<body bgcolor="white">
+<p>FOR IMMEDIATE RELEASE:</p>
+
+<h2 align="center">SQLite Consortium Launches With Mozilla And Symbian As Charter Members</h2>
+
+
+<h3 align="center">Ensures independent technical direction for world's
+most deployed SQL database engine</h3>
+
+<p><b>Charlotte, North Carolina - December 12, 2007</b> - The SQLite Consortium,
+a new membership association dedicated to maintaining SQLite as a fully open
+and independent product, was formally announced today. Mozilla and Symbian Ltd.
+have joined the SQLite Consortium as charter members.<p>
+
+<p>SQLite is a compact, high efficiency, high reliability, embeddable SQL database
+engine. The source code to SQLite is in the public domain and is available with
+no associated fees. SQLite is the most deployed SQL database engine in the world
+and is currently used in a wide range of commercial software products and electronic
+devices from leading manufacturers. SQLite is found today in many mobile phones,
+MP3 players, set-top boxes, and PCs.</p>
+
+<p>The mission of the SQLite Consortium is to continue developing and enhancing
+SQLite as a product that anyone may use without paying royalties or licensing fees.
+Members of the SQLite Consortium provide funding to enable this mission and in
+return receive enterprise-level technical support. Technical control and direction
+of SQLite remains entirely with the SQLite developers.</p>
+
+<p>Mozilla, developer of the popular open-source Firefox web browser, and Symbian,
+the market-leading open operating system for advanced data-enabled smartphones,
+both deploy the SQLite database engine in their products. As charter members of
+the Consortium, Mozilla and Symbian are ensuring the development and support of
+SQLite as a freely accessible and public domain software asset.</p>
+
+<p>"SQLite has become a popular embedded database because it is lightweight, fast,
+and open source," said Michael Schroepfer, Vice President of Engineering, Mozilla.
+"As a charter member of the SQLite Consortium, Mozilla is excited to help ensure
+SQLite remains a vibrant and open technology, in line with our mission to promote
+choice and innovation on the Internet."</p>
+
+<p>"The SQLite Consortium will help set the standards for database management
+which are essential in smartphone functionality and will also help create a pool
+of developers, highly-skilled in SQLite for future mobile phone development, "
+said Bruce Carney, Director, Developer Programmes & Services, Symbian.
+"Our involvement with the SQL Consortium not only demonstrates Symbian's commitment
+to open standards in the industry, but as mobile phones become increasingly powerful
+and smartphones become increasingly popular, we are focused on ensuring that
+desktop developers, who move to the mobile space, have the easiest and most
+productive experience possible."</p>
+
+<p>SQLite is a winner of the 2005 Google/O'Reilly Open Source Award. Additional
+information regarding the SQLite Consortium is available at the SQLite website,
+http://www.sqlite.org/.</p>
+
+<center>
+# # #
+</center>
+
+<p><b>About SQLite</b></p>
+
+<p>SQLite is a software library that implements a self-contained, embeddable,
+serverless, zero-configuration, transactional SQL database engine. The code for
+SQLite is in the public domain and is free for any use, commercial or private.
+SQLite is currently found in countless software titles and electronic devices.</p>
+
+<p>SQLite was originally developed and released 2000 by Dr. D. Richard Hipp.
+The code continues to be maintained and enhanced by an international team
+of developers under Hipp's direction.</p>
+
+
+<p>
+CONTACT INFORMATION:<br>
+SQLite Consortium<br>
+Dr. D. Richard Hipp<br>
+6200 Maple Cove Lane<br>
+Charlotte, NC 28269<br>
+Email: drh@sqlite.org<br>
+http://www.sqlite.org/<br>
+Tel: +1.704.948.4565
+</p>
+
+
+<p><b>About Mozilla</b></p>
+
+<p>Mozilla is a global community dedicated to building free, open source products
+and technologies that improve the online experience for people everywhere.
+Mozilla works in the open with a highly disciplined, transparent and cooperative
+development process, under the umbrella of the non-profit Mozilla Foundation.
+As a wholly owned subsidiary, the Mozilla Corporation organizes the development
+and marketing of Mozilla products. This unique structure has enabled Mozilla to
+financially support and cultivate competitive, viable community innovation.
+For more information, visit www.mozilla.com.</p>
+
+<p>CONTACT INFORMATION:<br>
+Mozilla Corporation<br>
+Jessica Waight<br>
+Tel: +1.415.345.4754<br>
+Email: jwaight@outcastpr.com
+</p>
+
+<p><b>About Symbian Limited</b></p>
+
+<p>Symbian is a software licensing company that develops and licenses Symbian OS,
+the market-leading open operating system for advanced, data-enabled mobile phones
+known as smartphones.</p>
+
+<p>Symbian licenses Symbian OS to the world's leading handset manufacturers
+and has built close co-operative business relationships with leading companies
+across the mobile industry. During Q3 2007, 20.4 million Symbian smartphones
+were sold worldwide to over 250 major network operators, bringing the total
+number of Symbian smartphones shipped up to 30 September 2007 to 165 million.</p>
+
+<p>Symbian has its headquarters in London, United Kingdom, with offices in the
+United States, United Kingdom, Asia (India, P.R. China, and Korea) and Japan.
+For more information, please visit www.symbian.com.</p>
+
+<p>CONTACT INFORMATION:<br>
+Symbian Global Press Office<br>
+Karen Hamblen<br>
++44 207 154 1707<br>
+press@symbian.com
+</p>
+</body></html>
diff --git a/www/printf.html b/www/printf.html
new file mode 100644
index 0000000..e7bf5d9
--- /dev/null
+++ b/www/printf.html
@@ -0,0 +1,549 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite's Built-in printf()</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite's Built-in printf()
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc2"><a href="#advantages">1.1. Advantages</a></div>
+<div class="fancy-toc2"><a href="#disadvantages">1.2. Disadvantages</a></div>
+<div class="fancy-toc1"><a href="#formatting_details">2. Formatting Details</a></div>
+<div class="fancy-toc2"><a href="#substitution_types">2.1. Substitution Types</a></div>
+<div class="fancy-toc2"><a href="#the_optional_length_field">2.2. The Optional Length Field</a></div>
+<div class="fancy-toc2"><a href="#the_optional_width_field">2.3. The Optional Width Field</a></div>
+<div class="fancy-toc2"><a href="#the_optional_precision_field">2.4. The Optional Precision Field</a></div>
+<div class="fancy-toc2"><a href="#the_options_flags_field">2.5. The Options Flags Field</a></div>
+<div class="fancy-toc1"><a href="#implementation_and_history">3. Implementation And History</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>SQLite contains its own implementation of the string formatting routine "printf()",
+accessible via the following interfaces:
+
+</p><ul>
+<li> <a href="lang_corefunc.html#format">format()</a> &rarr; an SQL function returning the formatted string
+</li><li> <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> &rarr; Store the formatted string in memory obtained
+ <a href="c3ref/free.html">sqlite3_malloc64()</a>.
+</li><li> <a href="c3ref/mprintf.html">sqlite3_snprintf()</a> &rarr; Store the formatted string in a static buffer
+</li><li> <a href="c3ref/str_append.html">sqlite3_str_appendf()</a> &rarr; Append formatted text to a dynamic string
+</li><li> <a href="c3ref/mprintf.html">sqlite3_vmprintf()</a> &rarr; Varargs version of sqlite3_mprintf()
+</li><li> <a href="c3ref/mprintf.html">sqlite3_vsnprintf()</a> &rarr; Varargs version of sqlite3_snprintf()
+</li><li> <a href="c3ref/str_append.html">sqlite3_str_vappendf()</a> &rarr; Varargs version of sqlite3_str_appendf()
+</li></ul>
+
+<p>The same core string formatter is also used internally by SQLite.
+
+</p><h2 id="advantages"><span>1.1. </span>Advantages</h2>
+
+<p>Why does SQLite have its own private built-in printf() implementation?
+Why not use the printf() implementation from the standard C library?
+Several reasons:
+
+</p><p>
+</p><ol>
+<li><p>
+By using its own built-in implementation, SQLite guarantees that the
+output will be the same on all platforms and in all LOCALEs.
+This is important for consistency and for testing. It would be problematic
+if one machine gave an answer of "5.25e+08" and another gave an answer
+of "5.250e+008". Both answers are correct, but it is better when SQLite
+always gives the same answer.
+
+</p></li><li><p>
+We know of no way to use the standard library printf() C interface to
+implement the <a href="lang_corefunc.html#format">format() SQL function</a> feature of SQLite. The built-in
+printf() implementation can be easily adapted to that task, however.
+
+</p></li><li><p>
+The printf() in SQLite supports new non-standard substitution
+types (<a href="printf.html#percentq">%q</a>, <a href="printf.html#percentq">%Q</a>, <a href="printf.html#percentw">%w</a>, and <a href="printf.html#percentz">%z</a>), and enhanced substitution
+behavior (%s and <a href="printf.html#percentz">%z</a>) that are useful both internally to SQLite
+and to applications using SQLite.
+Standard library printf()s cannot normally be extended in this way.
+
+</p></li><li><p>
+Via the <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> and <a href="c3ref/mprintf.html">sqlite3_vmprintf()</a> interfaces,
+the built-in printf() implementation supports the ability to render an
+arbitrary-length string into a memory buffer obtained from <a href="c3ref/free.html">sqlite3_malloc64()</a>.
+This is safer and less error prone than trying to precompute an upper size
+limit on the result string, allocate an appropriately sized buffer, and
+then calling snprintf().
+
+</p></li><li><p>
+The SQLite-specific printf() supports a new flag (!) called the
+"alternate-form-2" flag. The alternate-form-2 flag changes the processing
+of floating-point conversions in subtle ways so that the output is always
+an SQL-compatible text representation of a floating-point number - something
+that is not possible to achieve with standard-library printf(). For
+string substitutions, the alternate-form-2 flag causes the width and
+precision to be measured in characters instead of bytes, which simplifies
+processing of strings containing multi-byte UTF8 characters.
+
+</p></li><li><p>
+The built-in SQLite has compile-time options such as
+SQLITE_PRINTF_PRECISION_LIMIT that provide defense against
+denial-of-service attacks for application that expose the
+printf() functionality to untrusted users.
+
+</p></li><li><p>
+Using a built-in printf() implementation means that SQLite has one
+fewer dependency on the host environment, making it more portable.
+</p></li></ol>
+
+<h2 id="disadvantages"><span>1.2. </span>Disadvantages</h2>
+
+<p>
+In fairness, having a built-in implementation of printf() also comes with
+some disadvantages. To wit:
+
+</p><ol>
+<li><p>
+The built-in printf() implementation uses extra code space
+(about 7800 bytes on GCC 5.4 with -Os).
+
+</p></li><li><p>
+The floating-point to text conversion subfunction for the built-in printf()
+is limited in precision to 16 significant digits or 26 significant digits
+if the "!" alternate-form-2 flag is used.
+Every IEEE-754 double can be represented exactly as a decimal floating-point
+value, but some doubles require more than 16 or 26 significant digits.
+
+</p></li><li><p>
+The order of the buffer pointer and buffer size parameters in the built-in
+snprintf() implementation is reversed from the order used in standard-library
+implementations.
+
+</p></li><li><p>
+The built-in printf() implementation does not handle posix positional referencing
+modifiers that allow the order of arguments to printf() to be different from the
+order of the %-substitutions. In the built-in printf(), the order of the arguments
+must exactly match the order of the %-substitutions.
+</p></li></ol>
+
+<p>
+In spite of the disadvantages, the developers believe that having a built-in
+printf() implementation inside of SQLite is a net positive.
+
+</p><h1 id="formatting_details"><span>2. </span>Formatting Details</h1>
+
+<p>The format string for printf() is a template for the generated
+string. Substitutions are made whenever a "%" character appears in
+the format string. The "%" is followed by one or more additional
+characters that describe the substitution. Each substitution has
+the following format:
+
+</p><blockquote>
+<b>%</b><i>&#91;flags&#93;&#91;width&#93;&#91;</i><b>.</b><i>precision&#93;&#91;length&#93;type</i>
+</blockquote>
+
+<p>All substitutions begin with a single "%" and end with a single type character.
+The other elements of the substitution are optional.
+
+</p><p>To include a single "%" character in the output, put two consecutive
+"%" characters in the template.
+
+</p><h2 id="substitution_types"><span>2.1. </span>Substitution Types</h2>
+
+<p>The following chart shows the substitution types supported by SQLite:
+
+</p><center>
+<table border="1" cellpadding="10" width="80%">
+<tr>
+<th>Substitution Type</th><th>Meaning
+</th></tr><tr>
+<td>%
+</td><td>Two "%" characters in a row are translated into a single "%" in the output,
+ without substituting any values.
+</td></tr><tr>
+<td>d, i
+</td><td>The argument is a signed integer which is displayed in decimal.
+</td></tr><tr>
+<td>u
+</td><td>The argument is an unsigned integer which is displayed in decimal.
+</td></tr><tr>
+<td>f
+</td><td>The argument is a double which is displayed in decimal.
+</td></tr><tr>
+<td>e, E
+</td><td>The argument is a double which is displayed in exponential notation.
+ The exponent character is 'e' or 'E' depending on the type.
+</td></tr><tr>
+<td>g, G
+</td><td>The argument is a double which is displayed in either normal decimal
+ notation or if the exponent is not close to zero, in exponential
+ notation.
+</td></tr><tr>
+<td>x, X
+</td><td>The argument is an integer which is displayed in hexadecimal.
+ Lower-case hexadecimal is used for %x and upper-case is used
+ for %X
+</td></tr><tr>
+<td>o
+</td><td>The argument is an integer which is displayed in octal.
+</td></tr><tr>
+<td>s, z
+</td><td>
+<a name="percentz"></a>
+
+ The argument is either a zero-terminated string that is displayed,
+ or a null pointer which is treated as an empty string. For
+ the %z type in C-language interfaces, <a href="c3ref/free.html">sqlite3_free()</a> is invoked
+ on the string after it has been copied into the output. The %s and %z
+ substitutions are identical for the SQL printf() function, with
+ a NULL argument treated as an empty string.<br><br>
+ The %s substitution is universal among printf functions, but
+ the %z substitution and safe treatment of null pointers
+ are SQLite enhancements, not found in other
+ printf() implementations.
+</td></tr><tr>
+<td>c
+</td><td>For the C-language interfaces, the argument is an integer which
+ is interpreted as a character. For the <a href="lang_corefunc.html#format">format() SQL function</a> the
+ argument is a string from which the first character is extracted and
+ displayed.
+</td></tr><tr>
+<td>p
+</td><td>The argument is a pointer which is displayed as a hexadecimal address.
+ Since the SQL language has no concept of a pointer, the %p substitution
+ for the <a href="lang_corefunc.html#format">format() SQL function</a> works like %x.
+</td></tr><tr>
+<td>n
+</td><td>The argument is a pointer to an integer. Nothing is displayed for
+ this substitution type. Instead, the integer to which the argument
+ points is overwritten with the number of characters in the generated
+ string that result from all format symbols to the left of the %n.
+</td></tr><tr>
+<td>q, Q
+</td><td><a name="percentq"></a>
+
+ The argument is a zero-terminated string. The string is printed with
+ all single quote (') characters doubled so that the string can safely
+ appear inside an SQL string literal. The %Q substitution type also
+ puts single-quotes on both ends of the substituted string.
+ <br><br>If the argument
+ to %Q is a null pointer then the output is an unquoted "NULL". In other
+ words, a null pointer generates an SQL NULL, and a non-null pointer generates
+ a valid SQL string literal. If the argument to %q is a null pointer
+ then no output is generated. Thus a null-pointer to %q is the same as
+ an empty string.
+ <br><br>For these substitutions, the precision is the number of bytes or
+ characters taken from the argument, not the number of bytes or characters that
+ are written into the output.
+ <br><br>
+ The %q and %Q substitutions are SQLite enhancements, not found in
+ most other printf() implementations.
+</td></tr><tr>
+<td>w
+</td><td><a name="percentw"></a>
+
+ This substitution works like %q except that it doubles all double-quote
+ characters (") instead of single-quotes, making the result suitable for
+ using with a double-quoted identifier name in an SQL statement.
+ <br><br>
+ The %w substitution is an SQLite enhancements, not found in
+ most other printf() implementations.
+</td></tr></table>
+</center>
+
+<h2 id="the_optional_length_field"><span>2.2. </span>The Optional Length Field</h2>
+
+<p>The length of the argument value can be specified by one or more letters
+that occur just prior to the substitution type letter. In SQLite, the
+length only matter for integer types. The length is ignored for the
+<a href="lang_corefunc.html#format">format() SQL function</a> which always uses 64-bit values. The following
+table shows the length specifiers allowed by SQLite:
+
+</p><center>
+<table border="1" cellpadding="10" width="80%">
+<tr>
+<th>Length Specifier
+</th><th>Meaning
+</th></tr><tr>
+<td><i>(default)</i>
+</td><td>An "int" or "unsigned int". 32-bits on all modern systems.
+</td></tr><tr>
+<td>l
+</td><td>A "long int" or "long unsigned int". Also 32-bits on all modern systems.
+</td></tr><tr>
+<td>ll
+</td><td>A "long long int" or "long long unsigned" or an "sqlite3_int64" or
+ "sqlite3_uint64" value. These are 64-bit integers on all modern systems.
+</td></tr></table>
+</center>
+
+<p>Only the "ll" length modifier ever makes a difference for SQLite. And
+it only makes a difference when using the C-language interfaces.
+
+</p><h2 id="the_optional_width_field"><span>2.3. </span>The Optional Width Field</h2>
+
+<p>The width field specifies the minimum width of the substituted value in
+the output. If the string or number that is written into the output is shorter
+than the width, then the value is padded. Padding is on the left (the
+value is right-justified) by default. If the "-" flag is used, then the
+padding is on the right and the value is left-justified.
+
+</p><p>The width is measured in bytes by default. However, if the "!" flag is
+present then the width is in characters. This only makes a difference for
+multi-byte utf-8 characters, and those only occur on string substitutions.
+
+</p><p>If the width is a single "*" character instead of a number, then the
+actual width value is read as an integer from the argument list. If the
+value read is negative, then the absolute value is used for the width and
+the value is left-justified as if the "-" flag were present.
+
+</p><p>If the value being substituted is larger than the width, then full value
+is added to the output. In other words, the width is the minimum width of
+the value as it is rendered in the output.
+
+</p><h2 id="the_optional_precision_field"><span>2.4. </span>The Optional Precision Field</h2>
+
+<p>The precision field, if it is present, must follow the width separated
+by a single "." character. If there is no width, then the "." that introduces
+the precision immediately follows either the flags (if there are any) or
+the initial "%".
+
+</p><p>For string substitutions (%s, %z, %q, %Q, or %w) the precision is the number
+of byte or character used from the argument. The number is bytes by default but
+is characters if the "!" flag is present. If there is no precision, then the
+entire string is substituted. Examples: "%.3s" substitutes the first 3 bytes
+of the argument string. "%!.3s" substitutes the first three characters of the
+argument string.
+
+</p><p>For integer substitutions (%d, %i, %x, %X, %o, and %p) the precision specifies
+minimum number of digits to display. Leading zeros are added if necessary, to
+expand the output to the minimum number of digits.
+
+</p><p>For floating-point substitutions (%e, %E, %f, %g, %G) the precision specifies
+the number of digits to display to the right of the decimal point.
+
+</p><p>For the character substitution (%c) a precision N greater than 1 causes the
+character to be repeated N times. This is a non-standard extension found only
+in SQLite.
+
+</p><p>If the precision is a single "*" character instead of a number, then the
+actual precision value is read as an integer from the argument list.
+
+</p><h2 id="the_options_flags_field"><span>2.5. </span>The Options Flags Field</h2>
+
+<p>Flags consist of zero or more characters that immediately follow the
+"%" that introduces the substitution. The various flags and their meanings
+are as follows:
+
+</p><center>
+<table border="1" cellpadding="10" width="80%">
+<tr>
+<th>Flag
+</th><th>Meaning
+</th></tr><tr>
+<td><b>-</b>
+</td><td>Left-justify the value in the output. The default is to right-justify.
+If the width is zero or is otherwise less than the length of the value being
+substituted, then there is no padding and the "-" flag is a no-op.
+</td></tr><tr>
+<td><b>+</b>
+</td><td>For signed numeric substitutions, include a "+" sign before positive numbers.
+A "-" sign always appears before negative numbers regardless of flag settings.
+</td></tr><tr>
+<td><i>(space)</i>
+</td><td>For signed numeric substitutions, prepend a single space before positive
+numbers.
+</td></tr><tr>
+<td><b>0</b>
+</td><td>Prepend as many "0" characters to numeric substitutions as necessary to
+expand the value out to the specified width. If the width field is omitted,
+then this flag is a no-op.
+</td></tr><tr>
+<td><b>#</b>
+</td><td>This is the "alternate-form-1" flag.
+For %g and %G substitutions, this causes trailing zeros to be removed.
+This flag forces a decimal point to appear for all floating-point substitutions.
+For %o, %x, and %X substitutions, the alternate-form-1 flag cause the value
+to be prepended with "0", "0x", or "0X", respectively.
+</td></tr><tr>
+<td><b>,</b>
+</td><td>This flag causes comma-separators to be added to the output of %d and %i
+substitutions, between every 3 digits from the left. This can help humans
+to more easily discern the magnitude of large integer values. For example,
+the value 2147483647 would be rendered as "2147483647" using "%d" but would
+appear as "2,147,483,647" with "%,d". This flag is a non-standard extension.
+</td></tr><tr>
+<td><b>!</b>
+</td><td>This is the "alternate-form-2 flag.
+For string substitutions, this flag causes the width and precision to be understand
+in terms of characters rather than bytes.
+For floating point substitutions, the alternate-form-2 flag increases the
+maximum number of significant digits displayed from 16 to 26,
+forces the display of the decimal point and causes at least one digit
+to appear after the decimal point.<br><br>
+The alternate-form-2 flag is a non-standard extension that appears in no
+other printf() implementations, as far as we know.
+</td></tr></table>
+</center>
+
+<h1 id="implementation_and_history"><span>3. </span>Implementation And History</h1>
+
+<p>
+The core string formatting routine is the sqlite3VXPrintf() function found in the
+<a href="https://sqlite.org/src/file/src/printf.c">printf.c</a> source file. All the
+various interfaces invoke (sometimes indirectly) this one core function.
+The sqlite3VXPrintf() function began as code written by the first author
+of SQLite (<a href="crew.html">Hipp</a>) when he was a graduate student at Duke University in the
+late 1980s. Hipp kept this printf() implementation in his personal toolbox until
+he started working on SQLite in 2000. The code was incorporated into the
+SQLite source tree on <a href="https://sqlite.org/src/timeline?c=f9372072a6">2000-10-08</a>
+for SQLite version 1.0.9.
+
+</p><p>
+The <a href="https://www.fossil-scm.org/">Fossil Version Control System</a> uses its own
+printf() implementation that is derived from an early version of the SQLite
+printf() implementation, but those two implementations have since diverged.
+
+</p><p>
+The <a href="c3ref/mprintf.html">sqlite3_snprintf()</a> function has its buffer pointer and buffer size
+arguments reversed from what is found in the standard C library snprintf()
+routine. This is because there was no snprintf() routine in the
+standard C library
+when Hipp was first implementing his version, and he chose a different order
+than the designers of the standard C library.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/printf.in?m=dbe7254b32776057d">2022-02-15 13:32:30</a> UTC </small></i></p>
+
diff --git a/www/privatebranch.html b/www/privatebranch.html
new file mode 100644
index 0000000..acf18a2
--- /dev/null
+++ b/www/privatebranch.html
@@ -0,0 +1,532 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Maintaining Private Branches Of SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Maintaining Private Branches Of SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#_introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#_the_basic_idea">2. The Basic Idea</a></div>
+<div class="fancy-toc1"><a href="#_the_procedure">3. The Procedure</a></div>
+<div class="fancy-toc2"><a href="#_obtain_the_software">3.1. Obtain The Software</a></div>
+<div class="fancy-toc2"><a href="#_create_a_project_repository">3.2. Create A Project Repository</a></div>
+<div class="fancy-toc2"><a href="#_installing_the_sqlite_baseline_in_fossil">3.3. Installing The SQLite Baseline In Fossil</a></div>
+<div class="fancy-toc2"><a href="#_creating_the_private_branch">3.4. Creating The Private Branch</a></div>
+<div class="fancy-toc2"><a href="#_adding_customizations_to_the_code_in_the_private_branch">3.5. Adding Customizations To The Code In The Private Branch</a></div>
+<div class="fancy-toc2"><a href="#_incorporating_new_public_sqlite_releases">3.6. Incorporating New Public SQLite Releases</a></div>
+<div class="fancy-toc2"><a href="#_merging_public_sqlite_updates_into_the_private_branch">3.7. Merging Public SQLite Updates Into The Private Branch</a></div>
+<div class="fancy-toc2"><a href="#_further_updates">3.8. Further Updates</a></div>
+<div class="fancy-toc1"><a href="#_variations">4. Variations</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="_introduction"><span>1. </span> Introduction</h1>
+
+<p>SQLite is designed to meet most developer's needs without any
+changes or customization. When changes are needed, they can normally
+be accomplished using start-time <a href="c3ref/config.html">(1)</a>
+or runtime
+<a href="c3ref/db_config.html">(2)</a>
+<a href="c3ref/limit.html">(3)</a>
+<a href="c3ref/vfs_find.html">(4)</a> configuration methods
+or via <a href="compile.html">compile-time options</a>. It is very rare that an application
+developer will need to edit the SQLite source code in order to
+incorporate SQLite into a product.</p><p>
+
+</p><p>We call custom modifications to the SQLite source code that are held
+for the use of a single application a "private branch". When a private
+branch becomes necessary, the application developer must take on the
+task of keeping the private branch in synchronization with the public
+SQLite sources. This is tedious. It can also be tricky, since while
+the SQLite file format and published interfaces are very stable, the
+internal implementation of SQLite changes quite rapidly. Hundreds or
+thousands of lines of code might change for any given SQLite point release.
+</p>
+
+<p>This article outlines one possible method for keeping a private branch
+of SQLite in sync with the public SQLite source code.
+There are many ways of maintaining a private branch, of course.
+Nobody is compelled to use the method describe here.
+This article is not trying to impose a particular procedure on
+maintainers of private branches. The point of this article is to offer
+an example of one process for maintaining a private branch which can
+be used as a template for designing processes best suited for the
+circumstances of each individual project.</p>
+
+<img src="images/private_branch.gif" align="right">
+<h1 id="_the_basic_idea"><span>2. </span> The Basic Idea</h1>
+
+
+<p>We propose to use the
+<a href="http://www.fossil-scm.org">fossil software configuration management</a>
+system to set up two branches. One branch (the "public branch" or "trunk")
+contains the published SQLite sources and the other branch is the
+private branch which contains the code that is customized for the project.
+Whenever a new public release of SQLite is made, that release is added to
+the public branch and then the changes are merged into the private branch.</p>
+
+<p>This document proposes to use
+<a href="http://www.fossil-scm.org/">fossil</a>,
+but any other distributed software configuration management system such as
+<a href="http://www.monotone.ca/">monotone</a> or
+<a href="http://www.selenic.com/mercurial/wiki/">mercurial</a> (a.k.a. "hg"), or
+<a href="http://www.git-scm.org/">git</a> could serve just as well.
+The concept will be the same,
+though the specifics of the procedure will vary.</p>
+
+<p>The diagram at the right illustrates the concept.
+One begins with a standard SQLite release. For the
+sake of example, suppose that one intends to create a
+private branch off of SQLite version 3.6.15. In the
+diagram this is version (1). The
+maintainer makes an exact copy of the baseline
+SQLite into the branch space, shown as version (2).
+Note that (1) and (2) are exactly the same. Then
+the maintainer applies the private changes to
+version (2) resulting in version (3). In other words,
+version (3) is SQLite version 3.6.15 plus edits.</p>
+
+<p>Later, SQLite version 3.6.16 is released, as shown
+by circle (4) in the diagram. At the point, the private
+branch maintainer does a merge which takes all of the
+changes going from (1) to (4) and applies those changes to
+(3). The result is version (5), which is SQLite 3.6.16
+plus edits.</p>
+
+<p>There might be merge conflicts. In other words, it might
+be that the changes from (2) to (3) are incompatible with the
+changes from (1) to (4). In that case, the maintainer will
+have to manually resolve the conflicts. Hopefully conflicts
+will not come up that often. Conflicts are less likely to
+occur when the private edits are kept to a minimum.</p>
+
+<p>The cycle above can be repeated many times. The
+diagram shows a third SQLite release, 3.6.17 in
+circle (6). The private branch maintainer can do
+another merge in order to incorporate the changes
+moving from (4) to (6) into the private branch, resulting
+in version (7).</p>
+
+<h1 id="_the_procedure"><span>3. </span> The Procedure</h1>
+
+<p>The remainder of this document will guide the reader through
+the steps needed to maintain a private branch. The general idea
+is the same as outlined above. This section merely provides more
+detail.</p>
+
+<p>We emphasize again that these steps are not intended to be the only
+acceptable method for maintaining private branch. This approach
+is one of many. Use this document as a baseline for preparing
+project-specific procedures. Do not be afraid to experiment.</p>
+
+<h2 id="_obtain_the_software"><span>3.1. </span> Obtain The Software</h2>
+
+<p><a href="http://www.fossil-scm.org/">Fossil</a> is a computer program
+that must be installed on your machine before you use it.
+Fortunately, installing fossil is very easy. Fossil is a single
+"*.exe" file that you simply download and run. To uninstall fossil,
+simply delete the exe file.
+<a href="http://www.fossil-scm.org/index.html/doc/tip/www/quickstart.wiki">Detailed instructions</a> for installing and getting started with
+fossil are available on the
+<a href="http://www.fossil-scm.org">fossil website</a>.</p>
+
+<h2 id="_create_a_project_repository"><span>3.2. </span> Create A Project Repository</h2>
+
+<p>Create a fossil repository to host the private branch using the
+following command:</p>
+
+<blockquote><pre>
+fossil new private-project.fossil
+</pre></blockquote>
+
+<p>You can call your project anything you like. The "<tt>.fossil</tt>"
+suffix is optional. For this document, we will continue to call the
+project "<tt>private-project.fossil</tt>". Note that
+<tt>private-project.fossil</tt> is an ordinary disk file (actually an
+SQLite database) that will contain your complete project history.
+You can make a backup of the project simply by making a copy of that
+one file.</p>
+
+<p>If you want to configure the new project, type:</p>
+
+<blockquote><pre>
+fossil ui private-project.fossil
+</pre></blockquote>
+
+<p>The "ui" command will cause fossil to run a miniature built-in webserver
+and to launch your web-browser pointing
+at that webserver. You can use your web-browser to configure your project
+in various ways. See the instructions on the fossil website for additional
+information.</p>
+
+<p>Once the project repository is created, create an open checkout of the
+project by moving to the directory where you want to keep all of the
+project source code and typing:</p>
+
+<blockquote><pre>
+fossil open private-project.fossil
+</pre></blockquote>
+
+<p>You can have multiple checkouts of the same project if you want.
+And you can "clone" the repository to different machines so that multiple
+developers can use it. See the fossil website for further information.</p>
+
+<h2 id="_installing_the_sqlite_baseline_in_fossil"><span>3.3. </span> Installing The SQLite Baseline In Fossil</h2>
+
+<p>The repository created in the previous step is initially empty. The
+next step is to load the baseline SQLite release - circle (1) in the diagram
+above.</p>
+
+<p>Begin by obtaining a copy of SQLite in whatever form you use it.
+The public SQLite you obtain should be as close to your private edited
+copy as possible. If your project uses the SQLite amalgamation, then
+get a copy of the amalgamation. If you use the preprocessed separate
+source files, get those instead. Put all the source files in the
+checkout directory created in the previous step.</p>
+
+<p>The source code in public SQLite releases uses unix line endings
+(ASCII code 10: "newline" only, NL) and spaces instead of tabs. If you will
+be changing the line ending to windows-style line endings
+(ASCII codes 13, 10: "carriage-return" and "newline"; CR-NL) or if you will be
+changing space indents into tab indents, <b>make that change now</b>
+before you check in the baseline. The merging process will only work
+well if the differences between the public and the private branches are
+minimal. If every single line of the source file is changed in the
+private branch because you changed from NL to CR-NL line endings, then
+the merge steps will not work correctly.</p>
+
+<p>Let us assume that you are using the amalgamation source code.
+Add the baseline to your project as follows:</p>
+
+<blockquote><pre>
+fossil add sqlite3.c sqlite3.h
+</pre></blockquote>
+
+<p>If you are using separate source files, name all of the source files instead
+of just the two amalgamation source files. Once this is done, commit your
+changes as follows:</p>
+
+<blockquote><pre>
+fossil commit
+</pre></blockquote>
+
+<p>You will be prompted for a check-in comment. Say whatever you like.
+After the commit completes, your baseline will be part of the repository.
+The following command, if you like, to see this on the "timeline":
+</p>
+
+<blockquote><pre>
+fossil ui
+</pre></blockquote>
+
+<p>That last command is the same "ui" command that we ran before. It
+starts a mini-webserver running and points your web browser at it. But
+this time we didn't have to specify the repository file because we are
+located inside a checkout and so fossil can figure out the repository for
+itself. If you want to type in the repository filename as the second
+argument, you can. But it is optional.</p>
+
+<p>If you do not want to use your web browser to view the new check-in,
+you can get some information from the command-line using commands like
+these:
+
+</p><blockquote><pre>
+fossil timeline
+fossil info
+fossil status
+</pre></blockquote>
+
+<h2 id="_creating_the_private_branch"><span>3.4. </span> Creating The Private Branch</h2>
+
+<p>The previous step created circle (1) in the diagram above.
+This step will create circle (2). Run the following command:</p>
+
+<blockquote><pre>
+fossil branch new private trunk -bgcolor "#add8e8"
+</pre></blockquote>
+
+<p>This command will create a new branch named "private" (you can use
+a different name if you like) and assign it a background color
+of light blue ("#add8e8"). You can omit the background color if you want,
+though having a distinct background does make it easier to tell the
+branch from the "trunk" (the public branch) on timeline displays. You
+can change the background color of the private branch or of the public
+branch (the "trunk") using the web interface if you like.</p>
+
+<p>The command above created the new branch. But your checkout is
+still on the trunk - a fact you can see by running the command:</p>
+
+<blockquote><pre>
+fossil info
+</pre></blockquote>
+
+<p>To change your check-out to the private branch, type:</p>
+
+<blockquote><pre>
+fossil update private
+</pre></blockquote>
+
+<p>You can run the "info" command again to verify that you are on the
+private branch. To go back to the public branch, type:</p>
+
+<blockquote><pre>
+fossil update trunk
+</pre></blockquote>
+
+<p>Normally, fossil will modify all the files in your checkout when switching
+between the private and the public branches. But at this point, the files
+are identical in both branches so no modifications need to be made.</p>
+
+<h2 id="_adding_customizations_to_the_code_in_the_private_branch"><span>3.5. </span> Adding Customizations To The Code In The Private Branch</h2>
+
+<p>Now it is time to make the private, custom modifications to SQLite
+which are the whole point of this exercise. Switch to the private branch
+(if you are not already there) using the "<tt>fossil update private</tt>"
+command, then bring up the source files in your text editor and make
+whatever changes you want to make. Once you have finished making
+changes, commit those changes using this command:</p>
+
+<blockquote><pre>
+fossil commit
+</pre></blockquote>
+
+<p>You will be prompted once again to enter a commit describing your
+changes. Then the commit will occur. The commit creates a new checkin
+in the repository that corresponds to circle (3) in the diagram above.</p>
+
+<p>Now that the public and private branches are different, you can run
+the "<tt>fossil update trunk</tt>" and "<tt>fossil update private</tt>"
+commands and see that fossil really does change the files in the checkout
+as you switch back and forth between branches.</p>
+
+<p>Note that in the diagram above, we showed the private edits as a single
+commit. This was for clarity of presentation only. There is nothing to stop
+you from doing dozens or hundreds of separate tiny changes and committing
+each separately. In fact, making many small changes is the preferred way
+to work. The only reason for doing all the changes in a single commit
+is that it makes the diagram easier to draw.</p>
+
+<h2 id="_incorporating_new_public_sqlite_releases"><span>3.6. </span> Incorporating New Public SQLite Releases</h2>
+
+<p>Suppose that after a while (about a month, usually) a new version of
+SQLite is released: 3.6.16. You will want to incorporate this new
+public version of SQLite into your repository in the public branch (the
+trunk). To do this, first change your repository over to the trunk:</p>
+
+<blockquote><pre>
+fossil update trunk
+</pre></blockquote>
+
+<p>Then download the new version of the SQLite sources and overwrite the
+files that are in the checkout.</p><p>
+
+</p><p>If you made NL to CR-NL line ending changes or space to tab
+indentation changes in the original baseline, make the same changes
+to the new source file.</p>
+
+<p>Once everything is ready, run the "<tt>fossil commit</tt>" command to
+check in the changes. This creates circle (4) in the diagram above.</p>
+
+<h2 id="_merging_public_sqlite_updates_into_the_private_branch"><span>3.7. </span> Merging Public SQLite Updates Into The Private Branch</h2>
+
+<p>The next step is to move the changes in the public branch over into
+the private branch. In other words, we want to create circle (5) in the
+diagram above. Begin by changing to the private branch using
+"<tt>fossil update private</tt>". Then type this command:</p>
+
+<blockquote><pre>
+fossil merge trunk
+</pre></blockquote>
+
+<p>The "merge" command attempts to apply all the changes between
+circles (1) and (4) to the files in the local checkout. Note that
+circle (5) has not been created yet. You will need to run the
+"commit" to create circle (5).</p>
+
+<p>It might be that there are conflicts in the merge. Conflicts
+occur when the same line of code was changed in different ways between
+circles (1) and (4) versus circles (2) and (3). The merge command will
+announce any conflicts and will include both versions of the conflicting
+lines in the output. You will need to bring up the files that contain
+conflicts and manually resolve the conflicts.</p>
+
+<p>After resolving conflicts, many users like to compile and test the
+new version before committing it to the repository. Or you can commit
+first and test later. Either way, run the "<tt>fossil commit</tt>"
+command to check-in the circle (5) version.
+
+</p><h2 id="_further_updates"><span>3.8. </span> Further Updates</h2>
+
+<p>As new versions of SQLite are released, repeat steps 3.6 and 3.7 to
+add changes in the new release to the private branch.
+Additional private changes can be
+made on the private branch in between releases if desired.</p>
+
+<h1 id="_variations"><span>4. </span> Variations</h1>
+
+<p>Since this document was first written, the canonical SQLite source code
+has been moved from the venerable CVS system into a Fossil repository at
+<a href="http://www.sqlite.org/src">http://www.sqlite.org/src</a>. This means that if you are working with
+canonical SQLite source code (as opposed to the <a href="amalgamation.html">amalgamation</a> source code
+files, sqlite3.c and sqlite3.h) then you can create a private repository
+simply by cloning the official repository:</p>
+
+<blockquote><pre>
+fossil clone http://www.sqlite.org/src private-project.fossil
+</pre></blockquote>
+
+<p>This command both creates the new repository and populates it with
+all the latest SQLite code. You can then create a private branch as
+described in section 3.4.</p>
+
+<p>When the private repository is created by cloning, incorporating new
+public SQLite releases becomes much easier too. To pull in all of the
+latest changes from the public SQLite repository, simply move into
+the open check-out and do:</p>
+
+<blockquote><pre>
+fossil update
+</pre></blockquote>
+
+<p>Then continue to merge the changes in "trunk" with your "private"
+changes as described in section 3.7.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/privatebranch.in?m=4a84b75757d9857d3">2021-04-07 11:02:17</a> UTC </small></i></p>
+
diff --git a/www/prosupport.html b/www/prosupport.html
new file mode 100644
index 0000000..a2c4565
--- /dev/null
+++ b/www/prosupport.html
@@ -0,0 +1,444 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Pro Support</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">
+Professional Support &amp; Extension Products
+</h1>
+
+
+
+<h2>Support
+<font size=2>(<a href="#detail">details below</a>)</font></h2>
+
+<div class='desktoponly'>
+<table border=0 cellspacing=20 width='100%'>
+<tr><td valign=top><b>1.</b></td><td valign=top><b>Public Forum.</b>
+ Help and advice from a world-wide community of experts.
+</td>
+<td valign=top width=165>Free</td>
+<td valign=top align=left width=145><a class='button' href='https://sqlite.org/forum/about'>More Info</a><br>
+<a class='button' href='https://sqlite.org/forum/forummain'>Recent Posts</a></td>
+</tr>
+<tr><td valign=top><b>2.</b></td><td valign=top><b>Annual Maintenance Subscription.</b>
+ Private, expert email advice from the developers of SQLite.
+</td>
+<td valign=top width=165>$1500/year</td>
+<td valign=top align=left width=145><a class='button' href='https://sqlite.org/com/ams.html'>More Info</a><br>
+<a class='button' href='https://sqlite.org/purchase/ams'>Purchase</a></td>
+</tr>
+<tr><td valign=top><b>3.</b></td><td valign=top><b>Technical Support.</b>
+ High-priority email and phone support directly from the SQLite developers.
+ Guaranteed response time available as an option.
+</td>
+<td valign=top width=165>$8K-85K/year</td>
+<td valign=top align=left width=145><a class='button' href='https://sqlite.org/com/tech.html'>More Info</a><br>
+<a class='button' href='https://sqlite.org/com/contact.html'>Request A Quote</a></td>
+</tr>
+<tr><td valign=top><b>4.</b></td><td valign=top><b>SQLite Consortium Membership.</b>
+ Premium enterprise support including on-site visits and
+ access to all proprietary extensions and test suites.
+</td>
+<td valign=top width=165>$120K/year</td>
+<td valign=top align=left width=145><a class='button' href='https://sqlite.org/com/member.html'>More Info</a><br>
+<a class='button' href='https://sqlite.org/com/contact.html'>Request A Quote</a></td>
+</tr>
+</table></div>
+<div class='mobileonly'>
+<ol>
+<li value=1><p>
+<b>Public Forum.</b>
+ Help and advice from a world-wide community of experts.
+
+<p>Cost: Free
+<p><a class='button' href='https://sqlite.org/forum/about'>More Info</a>
+<a class='button' href='https://sqlite.org/forum/forummain'>Recent Posts</a>
+</li>
+<li value=2><p>
+<b>Annual Maintenance Subscription.</b>
+ Private, expert email advice from the developers of SQLite.
+
+<p>Cost: $1500/year
+<p><a class='button' href='https://sqlite.org/com/ams.html'>More Info</a>
+<a class='button' href='https://sqlite.org/purchase/ams'>Purchase</a>
+</li>
+<li value=3><p>
+<b>Technical Support.</b>
+ High-priority email and phone support directly from the SQLite developers.
+ Guaranteed response time available as an option.
+
+<p>Cost: $8K-85K/year
+<p><a class='button' href='https://sqlite.org/com/tech.html'>More Info</a>
+<a class='button' href='https://sqlite.org/com/contact.html'>Request A Quote</a>
+</li>
+<li value=4><p>
+<b>SQLite Consortium Membership.</b>
+ Premium enterprise support including on-site visits and
+ access to all proprietary extensions and test suites.
+
+<p>Cost: $120K/year
+<p><a class='button' href='https://sqlite.org/com/member.html'>More Info</a>
+<a class='button' href='https://sqlite.org/com/contact.html'>Request A Quote</a>
+</li>
+</ol></div>
+
+
+<h2>Licenses
+<font size=2>(<a href="#ext">details below</a>)</font></h2>
+
+<div class='desktoponly'>
+<table border=0 cellspacing=20 width='100%'>
+<tr><td valign=top><b>5.</b></td><td valign=top><b>SQLite License.</b>
+ Warranty of title and perpetual right-to-use for the SQLite source code.
+</td>
+<td valign=top width=165>$6000 one time fee</td>
+<td valign=top align=left width=145><a class='button' href='https://sqlite.org/copyright.html'>More Info</a><br>
+<a class='button' href='https://sqlite.org/purchase/license'>Purchase</a></td>
+</tr>
+<tr><td valign=top><b>6.</b></td><td valign=top><b>SQLite Encryption Extension (SEE).</b>
+ A drop-in replacement for public-domain SQLite source code that has
+ the added ability to read/write AES-encrypted databases.
+</td>
+<td valign=top width=165>$2000 one time fee</td>
+<td valign=top align=left width=145><a class='button' href='https://sqlite.org/see/doc/release/www/readme.wiki'>More Info</a><br>
+<a class='button' href='https://sqlite.org/purchase/see'>Purchase</a></td>
+</tr>
+<tr><td valign=top><b>7.</b></td><td valign=top><b>Compressed And Encrypted Read-Only Database (CEROD).</b>
+ A drop-in replacement for public-domain SQLite source code
+ that has the added ability to read database that has been both
+ compressed and encrypted.
+</td>
+<td valign=top width=165>$2000 one time fee</td>
+<td valign=top align=left width=145><a class='button' href='https://sqlite.org/cerod/doc/release/www/readme.wiki'>More Info</a><br>
+<a class='button' href='https://sqlite.org/purchase/cerod'>Buy Now!</a></td>
+</tr>
+<tr><td valign=top><b>8.</b></td><td valign=top><b>The ZIPVFS Read/Write Compressed Database Extension.</b>
+ The ZIPVFS extension automatically compresses and encrypts
+ your data as it is written to disk, and decompressed and decrypts
+ it while reading.
+</td>
+<td valign=top width=165>$4000 one time fee</td>
+<td valign=top align=left width=145><a class='button' href='https://sqlite.org/zipvfs/doc/release/www/readme.wiki'>More Info</a><br>
+<a class='button' href='https://sqlite.org/purchase/zipvfs'>Buy Now!</a></td>
+</tr>
+</table></div>
+<div class='mobileonly'>
+<ol>
+<li value=5><p>
+<b>SQLite License.</b>
+ Warranty of title and perpetual right-to-use for the SQLite source code.
+
+<p>Cost: $6000 one time fee
+<p><a class='button' href='https://sqlite.org/copyright.html'>More Info</a>
+<a class='button' href='https://sqlite.org/purchase/license'>Purchase</a>
+</li>
+<li value=6><p>
+<b>SQLite Encryption Extension (SEE).</b>
+ A drop-in replacement for public-domain SQLite source code that has
+ the added ability to read/write AES-encrypted databases.
+
+<p>Cost: $2000 one time fee
+<p><a class='button' href='https://sqlite.org/see/doc/release/www/readme.wiki'>More Info</a>
+<a class='button' href='https://sqlite.org/purchase/see'>Purchase</a>
+</li>
+<li value=7><p>
+<b>Compressed And Encrypted Read-Only Database (CEROD).</b>
+ A drop-in replacement for public-domain SQLite source code
+ that has the added ability to read database that has been both
+ compressed and encrypted.
+
+<p>Cost: $2000 one time fee
+<p><a class='button' href='https://sqlite.org/cerod/doc/release/www/readme.wiki'>More Info</a>
+<a class='button' href='https://sqlite.org/purchase/cerod'>Buy Now!</a>
+</li>
+<li value=8><p>
+<b>The ZIPVFS Read/Write Compressed Database Extension.</b>
+ The ZIPVFS extension automatically compresses and encrypts
+ your data as it is written to disk, and decompressed and decrypts
+ it while reading.
+
+<p>Cost: $4000 one time fee
+<p><a class='button' href='https://sqlite.org/zipvfs/doc/release/www/readme.wiki'>More Info</a>
+<a class='button' href='https://sqlite.org/purchase/zipvfs'>Buy Now!</a>
+</li>
+</ol></div>
+
+
+<h2>Special Services
+<font size=2>(<a href="#th3">details below</a>)</font></h2>
+
+<div class='desktoponly'>
+<table border=0 cellspacing=20 width='100%'>
+<tr><td valign=top><b>9.</b></td><td valign=top><b>TH3 Testing Support.</b>
+ The <a href="https://sqlite.org/th3.html">TH3 test harness</a>
+ is an aviation-grade test suite for SQLite. SQLite developers
+ can run TH3 on specialized hardware and/or using specialized
+ compile-time options, according to customer specification,
+ either remotely or on customer premises. Pricing for this
+ services is on a case-by-case basis depending on requirements.
+</td>
+<td valign=top width=165>call</td>
+<td valign=top align=left width=145><a class='button' href='https://sqlite.org/th3.html'>More Info</a><br>
+<a class='button' href='https://sqlite.org/com/contact.html'>Request A Quote</a></td>
+</tr>
+</table></div>
+<div class='mobileonly'>
+<ol>
+<li value=9><p>
+<b>TH3 Testing Support.</b>
+ The <a href="https://sqlite.org/th3.html">TH3 test harness</a>
+ is an aviation-grade test suite for SQLite. SQLite developers
+ can run TH3 on specialized hardware and/or using specialized
+ compile-time options, according to customer specification,
+ either remotely or on customer premises. Pricing for this
+ services is on a case-by-case basis depending on requirements.
+
+<p>Cost: call
+<p><a class='button' href='https://sqlite.org/th3.html'>More Info</a>
+<a class='button' href='https://sqlite.org/com/contact.html'>Request A Quote</a>
+</li>
+</ol></div>
+
+
+<a name="detail"></a>
+<h2>Further Information</h2>
+
+<p>SQLite is free and works great.
+Most people use SQLite without
+any kind of license or support.</p>
+
+<p>Free support for SQLite is available on the public
+<a href="https://sqlite.org/forum/forummain">SQLite Forum</a>.
+The forum is monitored by a large
+community of experts, including the core SQLite development team,
+who are able to resolve just about
+any problems with SQLite that you are likely to have.</p>
+
+<p>If you do not want to discuss your issues on a public and open forum, an
+<a href="https://sqlite.org/com/ams.html">Annual Maintenance
+Subscription</a> or "AMS" might
+serve your needs better.
+An AMS entitles you to private email support directly from the developers of
+SQLite. The level of support with an AMS is similar to the support one
+gets from the public forum except that an AMS includes a unilateral
+promise of non-disclosure, so with an AMS you can discuss your issues
+with the SQLite developers in private, without the whole world watching.
+An AMS costs $1500 per year.</p>
+
+<p>Users with more advanced support needs can opt for a
+<a href="https://sqlite.org/com/tech.html">Technical Support
+Agreement</a>.
+Technical support agreements are customized to the needs of each
+individual client, but generally include direct telephone support
+and priority handling of issues and bugs. Guaranteed response time
+is available as an option. The cost of
+technical support varies but is generally
+in the range of $8000 to $35000 per year.</p>
+
+<p>If SQLite is "mission critical" to your company, then you may
+want to become an
+<a href="https://sqlite.org/com/member.html">SQLite Consortium
+Member</a>. The SQLite
+Consortium is a collaboration of companies who sponsor ongoing development
+of SQLite in exchange for enterprise-level technical support, on-site
+visits from the SQLite developers, unlimited access to all licensed
+products, and strong guarantees that SQLite will remain in the public
+domain, free and independent, and will not come under the control of
+a competitor.</p>
+
+<a name="ext"></a>
+<h2>Software Licenses</h2>
+
+<p>The SQLite source code is in the
+<a href="https://sqlite.org/copyright.html">public domain</a>,
+and is free for use
+by anyone and for any purpose. No license is required. However, some
+users desire a license so that they can have warranty of title, or just
+because their company lawyers say they need one. A
+<a href="https://sqlite.org/purchase/license">perpetual license
+and warranty of title</a>
+for the core SQLite source code is available for this purpose.</p>
+
+<p>The
+<a href="https://sqlite.org/purchase/see">SQLite Encryption
+Extension (SEE)</a>,
+the <a href="https://sqlite.org/purchase/zipvfs">ZIPVFS Extension</a>,
+and the <a href="https://sqlite.org/purchase/cerod">Compressed and
+Encrypted ReadOnly Database (CEROD)</a> extension are enhanced versions
+of SQLite that handle encrypted
+and/or compressed databases. SEE can read and write encrypted databases.
+SEE encrypts all database content, including metadata, so that the database
+file appears as white noise. ZIPVFS
+compresses the database on-the-fly using application-supplied
+compression and decompression functions.
+CEROD reads a compressed database that is
+also optionally encrypted. All of SEE, ZIPVFS, and CEROD are
+supplied in source code form only; the licensee is responsible for
+compiling the products for their chosen platform. It is not difficult
+to compile any of these extension. All products come in the form of an
+<a href="https://sqlite.org/amalgamation.html">amalgamated source file</a>
+named "sqlite3.c". So compiling SEE, ZIPVFS, or CEROD into an application
+is simply a matter of substituting the SEE-, ZIPVFS-, or CEROD-enabled sqlite3.c
+source file in place of the public-domain sqlite3.c source file and recompiling.
+Licenses for SEE, ZIPVFS, and CEROD are perpetual.
+All three extension can read and write ordinary,
+uncompressed and unencrypted database files.</p>
+
+<a name="th3"></a>
+<h2>Testing Services</h2>
+
+<p>The <a href="https://sqlite.org/th3.html">Test Harness #3 (TH3)</a> is
+a suite of test cases for SQLite that provide 100% branch test coverage
+(and 100% modified condition/decision coverage) for the core SQLite in
+an as-deployed configuration using only published and documented interfaces.
+TH3 is designed for use with embedded devices, and is compatible with
+DO-178B. Every release of the public-domain SQLite is tested using TH3,
+and so all users benefit from the TH3 tests. But the TH3 tests are not
+themselves public. Hardware or system manufactures who want to have
+TH3 test run on their systems can negotiate a service agreement to have
+the SQLite Developers run those tests.</p>
+
+<h2>About The SQLite Team</h2>
+
+<p>Paid support options and products are provided by
+Hipp, Wyrick &amp; Company, Inc., (Hwaci), a
+<a href="http://en.wikipedia.org/wiki/Georgia_(U.S._state)">Georgia</a>
+corporation
+with headquarters in
+<a href="http://en.wikipedia.org/wiki/Charlotte,_North_Carolina">
+Charlotte, North Carolina</a> and has been in business since
+1992.
+Hwaci has an international team of
+employees and associates representing the best available talent.
+We are a 100% engineering company. There is
+no sales staff.
+Our goal is to provide outstanding service and honest advice
+without spin or sales-talk.</p>
+
+<p>Hwaci is a small company but it is
+also closely held and debt-free and has low
+fixed costs, which means that it is largely immune to buy-outs,
+take-overs, and market down-turns. Hwaci intends to
+continue operating in its current form, and at roughly its current
+size until at least the year 2050.
+We expect to be here when you need us,
+even if that need is many years in the future.</p>
+</body></html>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/prosupport.in?m=9490d686297a13d0d">2022-03-14 21:40:46</a> UTC </small></i></p>
+
diff --git a/www/psow.html b/www/psow.html
new file mode 100644
index 0000000..75c7942
--- /dev/null
+++ b/www/psow.html
@@ -0,0 +1,286 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Powersafe Overwrite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">Powersafe Overwrite</h1>
+
+<p>"Powersafe overwrite" is a term used by the SQLite team to describe
+a behavior of some filesystems and disk-controllers related to
+data preservation during a power loss. Powersafe overwrite
+is a boolean property: either the storage system has it or it does not.
+
+<p>We say that a system has the powersafe overwrite property if the following
+statement is true:
+
+<blockquote>
+ <b>When an application writes a range of bytes in a file, no
+ bytes outside of that range will change, even if the write occurs
+ just before a crash or power failure.</b>
+</blockquote>
+
+<p>The powersafe overwrite property says nothing about the state of the
+bytes that were written. Those bytes might contain their old values,
+their new values, random values, or some combination of these. The powersafe
+overwrite property merely states that writes cannot change bytes outside
+of the range of bytes written.
+
+<p>In other words, powersafe overwrite means that there is no "collateral
+damage" when a power loss occurs while writing. Only those bytes actually
+being written might be damaged.
+
+<p>In practical terms, what the powersafe write property means is that when
+the disk controller detects an impending power loss, it finishes writing
+whatever sector it is working on prior to parking the heads. It means that
+individual sector writes will complete once started, even if
+there is a power loss.
+
+<p>Consider what would happen if disk sector writes are interrupted
+by a power loss. If an application writes two or three bytes in the middle
+of some file, the operating system will implement this by first reading
+the entire sector containing those bytes, making the change to the
+sector in memory, then writing the entire sector back to the disk. If a power
+loss occurs during the writeback and the sector was not completely written,
+then on the next read after reboot, error correcting codes
+in the sector will probably detect irreparable damage and the disk
+controller will read out the sector as all zeros or all ones. Thus
+values will have changed outside of the range of the two or three bytes
+that were written at the application level - a violation of the powersafe
+overwrite property.
+
+<h2>SQLite Assumptions About Powersafe Overwrite</h2>
+
+<p>All versions of SQLite up to and including <a href="releaselog/3_7_9.html">version 3.7.9</a>
+(2011-11-01) assume that
+the filesystem does <u>not</u> provide powersafe overwrite. SQLite
+has traditionally assumed that when any one byte of a file changes, all
+other bytes within the same sector of that byte have the potential of
+being corrupted on a power loss. When writing, SQLite has made sure
+to journal all bytes in the same sector of any modifications
+and it pads journal files out to the next sector boundary so that
+subsequent appends to that journal cannot damage prior records.
+SQLite understands the sector size to be the value returned by the
+xSectorSize method in the <a href="vfs.html">VFS</a>. The SQLite team has often referred
+to the value returned by xSectorSize as the "blast radius" of a write,
+since it expresses the range of bytes that might be damaged if a power
+loss occurs during the write.
+The default <a href="vfs.html">VFSes</a> for unix and windows have always returned 512 as
+the sector size (or blast radius) for all versions of SQLite up to
+and including version 3.7.9.
+
+<p>Newer disk drives have begun using 4096 byte sectors however. Beginning
+with SQLite <a href="releaselog/3_7_10.html">version 3.7.10</a> (2012-01-16),
+the SQLite development team experimented with
+changes xSectorSize to report 4096 bytes as the blast radius.
+This had the effect of increasing write overhead on
+many databases. For a database with a <a href="pragma.html#pragma_page_size">PRAGMA page_size</a> of 1024
+(a very common choice) making a change to a single page in the database
+now requires SQLite to backup three other adjacent pages to the rollback
+journal, whereas formerly it only had to backup the one page that was
+changing. In <a href="wal.html">WAL mode</a>, each transaction had to be padded out to the
+next 4096-byte boundary in the WAL file, rather than the next 512-byte
+boundary, resulting in thousands of extra bytes being written
+per transaction.
+
+<p>The extra write overhead prompted a reexamination of assumptions about
+powersafe overwrite. With modern disk drives, the capacity has become
+so large and the data density so great that a single sector is very
+small and writing a single sector takes very little time. We know that
+disk drives can detect an impending power loss and continue
+to operate for some small amount of time on residual energy because those
+drives are able to park their heads before spinning down. And
+so if an impending power loss is detectable by the disk controller, it
+seems reasonable that the controller will finish writing
+whatever sector it is current working on when the imminent power loss
+is first detected, prior to parking the heads, as long as doing so
+does not take too long, which it should not with
+small and dense sectors. Hence it seems reasonable
+to assume powersafe overwrite for modern disks. Indeed, BerkeleyDB has
+made this assumption for decades, we are told. Caution is advised
+though. As Roger Binns noted on the SQLite developers mailing list:
+"'poorly written' should be the main assumption about drive firmware."
+
+<a name="tornpage"></a>
+
+<h2>Torn Pages</h2>
+
+<p>A torn page occurs when a database page is larger than a disk sector,
+the database page is written to disk, but a power loss occurs prior to
+all sectors of the database page being written. Then, upon recovery, part of
+the database page will have the old content while some other parts of the
+page will have the new content. Some database engines assume that
+page writes are atomic and hence a torn page is an unrecoverable error.
+</p>
+
+<p>SQLite never assumes that database page writes are atomic,
+regardless of the PSOW setting.<sup>(1)</sup>
+And hence SQLite is always able to automatically recover from torn pages
+induced by a crash. Enabling PSOW does not decrease SQLite's ability
+to recover from a torn page.</p>
+
+<h2>Changes In SQLite Version 3.7.10</h2>
+
+<p>The <a href="vfs.html">VFS</a> for SQLite <a href="releaselog/3_7_10.html">version 3.7.10</a> (2012-01-16)
+adds a new device characteristic
+named <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a>. Database files that report this
+characteristic are assumed to reside on storage systems that have the
+powersafe overwrite property.
+The default unix and windows <a href="vfs.html">VFSes</a> now report
+<a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a> if SQLite is compiled with
+<a href="compile.html#powersafe_overwrite">-DSQLITE_POWERSAFE_OVERWRITE=1</a> or they
+make the legacy assumption that storage does not have the powersafe
+overwrite property if compiled with
+<a href="compile.html#powersafe_overwrite">-DSQLITE_POWERSAFE_OVERWRITE=0</a>.
+For now, the default is for powersafe overwrite to be turned on, though
+we may revisit this in the future and default it off.
+
+<p>The powersafe overwrite property for individual databases can be
+specified as the database is opened using the "psow" query parameter
+with a <a href="uri.html">URI filename</a>. For example, to always assume powersafe
+overwrite for a file (perhaps to ensure maximum write performance),
+open it as
+
+<blockquote>
+ file:somefile.db?psow=1
+</blockquote>
+
+<p>Or to be extra safe with a database and to force SQLite to assume the
+database lacks powersafe overwrite, open it using
+
+<blockquote>
+ file:somefile.db?psow=0
+</blockquote>
+
+<p>There is also a new <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpowersafeoverwrite">SQLITE_FCNTL_POWERSAFE_OVERWRITE</a> opcode for
+the <a href="c3ref/file_control.html">sqlite3_file_control()</a> that allows
+an application to query the powersafe overwrite property for a database
+file.
+
+<hr>
+<h2>Notes:</h2>
+<ol><li value=1><p>
+SQLite never assumes atomic page writes <em>in its default configurations</em>.
+But a custom <a href="vfs.html">VFS</a> can set one of the
+<a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC</a> bits in the result of the xDeviceCharacteristic()
+method and then SQLite will assume that page writes are atomic. The
+application must supply a custom VFS to accomplish this, however, since
+none of the standard VFSes will ever set any of the atomic bits in the
+xDeviceCharacteristics() vector.
+</ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/psow.in?m=7c9c05107bc9ad9da">2016-09-14 18:40:10</a> UTC </small></i></p>
+
diff --git a/www/qmplan.html b/www/qmplan.html
new file mode 100644
index 0000000..cc65cf0
--- /dev/null
+++ b/www/qmplan.html
@@ -0,0 +1,564 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Quality Management</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Quality Management
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc2"><a href="#about_this_document">1.1. About This Document</a></div>
+<div class="fancy-toc1"><a href="#software_development_plan">2. Software Development Plan</a></div>
+<div class="fancy-toc2"><a href="#software_life_cycle">2.1. Software Life Cycle</a></div>
+<div class="fancy-toc3"><a href="#maintenance_releases">2.1.1. Maintenance Releases</a></div>
+<div class="fancy-toc3"><a href="#patch_releases">2.1.2. Patch Releases</a></div>
+<div class="fancy-toc2"><a href="#release_history">2.2. Release History</a></div>
+<div class="fancy-toc2"><a href="#schedule">2.3. Schedule</a></div>
+<div class="fancy-toc1"><a href="#software_development_environment">3. Software Development Environment</a></div>
+<div class="fancy-toc1"><a href="#software_verification_plan">4. Software Verification Plan</a></div>
+<div class="fancy-toc1"><a href="#software_configuration_management">5. Software Configuration Management</a></div>
+<div class="fancy-toc2"><a href="#version_control">5.1. Version Control</a></div>
+<div class="fancy-toc2"><a href="#survivability">5.2. Survivability</a></div>
+<div class="fancy-toc2"><a href="#repositories">5.3. Repositories</a></div>
+<div class="fancy-toc3"><a href="#sqlite_source_code">5.3.1. SQLite Source Code</a></div>
+<div class="fancy-toc3"><a href="#sqlite_documentation_sources">5.3.2. SQLite Documentation Sources</a></div>
+<div class="fancy-toc3"><a href="#sql_logic_test">5.3.3. SQL Logic Test</a></div>
+<div class="fancy-toc3"><a href="#test_harness_3">5.3.4. Test Harness #3</a></div>
+<div class="fancy-toc3"><a href="#dbsqlfuzz">5.3.5. Dbsqlfuzz</a></div>
+<div class="fancy-toc2"><a href="#software_verification_results">5.4. Software Verification Results</a></div>
+<div class="fancy-toc1"><a href="#software_requirements_standards_and_data">6. Software Requirements Standards And Data</a></div>
+<div class="fancy-toc1"><a href="#software_design_and_coding_standards">7. Software Design And Coding Standards</a></div>
+<div class="fancy-toc1"><a href="#problem_reports">8. Problem Reports</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+This is the Quality Management Plan for SQLite.
+
+</p><p>
+Quality management documents tend to expand into
+binders full of incomprehensible jargon that nobody
+reads. This document strives to break that pattern by
+being concise and useful.
+
+</p><p>
+The inspiration for this document is
+<a href="https://en.wikipedia.org/wiki/DO-178B">DO-178B</a>.
+Among quality standards, DO-178B seems to have the highest usefulness
+to paperwork ratio. Even so, the amount of documentation needed
+for a full-up DO-178B implementation is vast. SQLite strives to be
+nimble and low-ceremony, and to that end, much of the required
+DO-178B documentation is omitted. We retain only those parts that
+genuinely improve quality for an open-source software project such
+as SQLite.
+
+</p><p>
+The purpose of this document is to brief the reader on how the
+SQLite development team functions on a daily basis, as they continuously
+enhance the SQLite software and work to improve its already high reliability.
+The document achieves its purpose if a competent developer can be
+assimilated into the development team quickly after perusing this
+document.
+
+</p><h2 id="about_this_document"><span>1.1. </span>About This Document</h2>
+
+<p>
+The quality management plan was originally composed by going through
+the description of outputs in section 11 of DO-178B (pages 48 through 56)
+and writing down those elements that seemed relevant to SQLite.
+The text will be subsequent revised to track enhancements to the
+SQLite quality process.
+
+</p><h1 id="software_development_plan"><span>2. </span>Software Development Plan</h1>
+
+<p>
+This section is a combination of the Plan For Software Aspects Of
+Certification and the Software Development Plan sections of DO-178B.
+
+
+</p><p>
+See <a href="about.html">About SQLite</a> for an overview of the
+SQLite software and what it does and how it is different.
+
+</p><h2 id="software_life_cycle"><span>2.1. </span>Software Life Cycle</h2>
+
+<p>
+SQLite uses a continuous integration process. The software
+is under constant enhancement and refinement. The latest trunk
+check-ins are frequently used internally for mission-critical
+operations.
+
+</p><p>
+There is no pre-defined release cycle. Releases occur
+when there is a critical mass of feature enhancements and/or
+bug fixes. Historically, releases have occurred about 5 or 6
+times per year.
+Users of SQLite pick up new releases from the website on an
+as-needed basis.
+
+</p><h3 id="maintenance_releases"><span>2.1.1. </span>Maintenance Releases</h3>
+
+<p>
+Routine maintenance releases of SQLite contain feature enhancements,
+performance enhancements, and/or fixes for non-critical issues.
+The version number for major releases are of the form "3.N.0"
+for some integer N. See the <a href="versionnumbers.html">version numbering conventions</a> document
+for details.
+
+</p><p>
+Upcoming maintenance releases announced on the sqlite-users and
+sqlite-dev <a href="support.html#mailinglists">mailing lists</a> about two weeks prior to the anticipated
+release. Approximately one week prior to release, the lead developer
+declares "pencils down" after which only bug-fix check-ins are
+allowed on trunk. A new
+<a href="https://sqlite.org/src/ext/checklist/top/index">release checklist</a>
+is created and updated as needed. As items of the checklist are
+verified, they are checked off and turn green. The release occurs
+when all elements of the checklist are green. That process normally
+takes about a week.
+
+</p><h3 id="patch_releases"><span>2.1.2. </span>Patch Releases</h3>
+
+<p>
+Occasionally, a serious problem is found and a small "patch" release
+must be made against a regular maintenance release. Patches are distinct
+from maintenance releases in that the number of lines of code changed
+from the previous release is small. Every effort is made to avoid
+patch releases by making sure that maintenance releases are bug free.
+
+</p><p>
+Patch releases may or may not have a release checklist, depending on the
+issue. This is a judgement call by the project leader.
+
+</p><h2 id="release_history"><span>2.2. </span>Release History</h2>
+
+<p>The documentation system automatically maintains a
+<a href="chronology.html">chronology</a> of past releases, as well as a
+<a href="changes.html">complete list of SQLite releases</a> with change summaries.
+
+</p><h2 id="schedule"><span>2.3. </span>Schedule</h2>
+
+<p>SQLite has a long-range vision.
+Planning is done with the assumption that SQLite
+will be used and supported through at least the year 2050.
+All code is written with the idea that it will one day be read and
+maintained by people not yet born. The code is carefully commented
+with an eye toward helping those future developers more easily
+understand the logic and the rationale behind the code.
+
+</p><h1 id="software_development_environment"><span>3. </span>Software Development Environment</h1>
+
+<p>
+SQLite is written in portable C code.
+Development work occurs on a mix of Linux, Mac, and Windows workstations.
+The developers use command-line tools and eschew integrated development
+environments (IDEs) whenever possible. All developers are expected to be
+fluent with the unix command-line.
+
+</p><p>
+A minimum setup for compiling and testing SQLite from canonical
+sources is as follows:
+
+</p><ul>
+<li> A host computer with a 32-bit or 64-bit address space.
+ The OS can be Linux, Mac, Windows, *BSD, Solaris, or some other.
+</li><li> A C99 compiler such as GCC (including MinGW variants for Windows),
+ Clang, or MSVC
+</li><li> A text editor of the user's choice supporting UTF-8 text.
+</li><li> <a href="https://core.tcl.tk/">Tcl</a> version 8.6 or later.
+</li><li> The "make" utility, or optionally "nmake" on Windows.
+</li></ul>
+
+<p>
+The Tcl script language is used to help translate canonical source code
+into the <a href="amalgamation.html">amalgamation</a> and to manage testing. Tcl is not used directly
+by SQLite itself (unless requested by a compile-time option). End users
+of the SQLite amalgamation sources do not need Tcl.
+
+</p><p>
+When building the <a href="cli.html">CLI</a>, it is helpful, but not required, to have
+the following third-party libraries on hand:
+
+</p><ul>
+<li> <a href="https://zlib.net/">zLib</a>
+</li><li> <a href="http://git.savannah.gnu.org/cgit/readline.git?h=devel">readline</a>
+ or <a href="http://thrysoee.dk/editline/">editline</a>
+ or <a href="https://github.com/antirez/linenoise">linenoise</a> for
+ command-line editing.
+</li></ul>
+
+<p>
+A complete release-test of SQLite requires additional software,
+
+</p><ul>
+<li> <a href="http://www.valgrind.org/">valgrind</a>
+</li><li> <a href="https://gcc.gnu.org/onlinedocs/gcc/Gcov.html">gcov</a>
+</li></ul>
+
+<p>
+SQLite is expected to operate the same, and use exactly the same
+<a href="fileformat2.html">on-disk format</a>,
+on all modern operating systems, on all modern computer architectures,
+and using all modern C compilers. The developers are constantly testing
+SQLite on as many diverse platforms as they can get their hands on.
+
+</p><h1 id="software_verification_plan"><span>4. </span>Software Verification Plan</h1>
+
+<p>The testing process for SQLite is described in the <a href="testing.html">testing</a> document.
+Testing objectives include:
+
+</p><ul>
+<li> 100% MC/DC in an as-delivered configuration
+</li><li> Testing of both source code and object code
+</li><li> Testing on multiple platforms and with multiple compilers
+</li><li> Fuzz testing
+</li><li> Code change inspection
+</li><li> Dynamic and static analysis of the code
+</li></ul>
+
+<p>The testing process is controlled by the
+<a href="testing.html#cklist">release testing checklists</a>. The checklists succinctly summarize
+all steps necessary to fully validate SQLite, and they record when
+and by whom each validation step was performed.
+
+</p><p>The set of checklist items for release checklist is potentially
+updated for each release. The content and complete
+history of each release checklist are retained for the historical
+record.
+
+</p><h1 id="software_configuration_management"><span>5. </span>Software Configuration Management</h1>
+
+<h2 id="version_control"><span>5.1. </span>Version Control</h2>
+
+<p>
+SQLite source code is managed using the <a href="https://fossil-scm.org">Fossil</a>
+version control system. Fossil was written specifically to support
+SQLite development. Fossil provides both distributed version control
+and issue tracking.
+
+</p><h2 id="survivability"><span>5.2. </span>Survivability</h2>
+
+<p>
+All code is archived on three separate machines:
+<a href="https://www.sqlite.org">https://www.sqlite.org</a>, <a href="https://www2.sqlite.org">https://www2.sqlite.org</a>, <a href="https://www3.sqlite.org">https://www3.sqlite.org</a>.
+These machines are located in different cities (Dallas, Newark, and
+San Francisco, respectively) and managed by two different hosting
+companies (<a href="https://linode.com">Linode</a> for the first two and
+<a href="https://digitalocean.com">Digital Ocean</a> for the third).
+This diversity is intended to avoid a single point of failure.
+
+</p><p>
+The main machine in Dallas <a href="https://www.sqlite.org/">https://www.sqlite.org/</a> is the primary
+server and the one that most people use. The other two are considered
+backups.
+
+</p><p>
+In addition to the official repositories, the developers typically
+keep complete clones of all software on their personal machines.
+And there are other clones scattered about the internet.
+
+</p><h2 id="repositories"><span>5.3. </span>Repositories</h2>
+
+<p>The SQLite source is broken up into multiple repositories, each described
+in a separate section below.
+
+</p><h3 id="sqlite_source_code"><span>5.3.1. </span>SQLite Source Code</h3>
+
+<p>The SQLite source code and the <a href="testing.html#tcl">TCL test suite</a> are stored together
+in a single repository. This one repository is all that is required to
+build the SQLite. The source repository is public and is
+readable by anonymous passersby on the internet.
+
+</p><ul>
+<li> Primary location: <a href="https://www.sqlite.org/src">https://www.sqlite.org/src</a>
+</li><li> Backup A: <a href="https://www2.sqlite.org/src">https://www2.sqlite.org/src</a>
+</li><li> Backup B: <a href="https://www3.sqlite.org/cgi/src">https://www3.sqlite.org/cgi/src</a>
+</li><li> GitHub mirror: <a href="https://github.com/sqlite/sqlite/">https://github.com/sqlite/sqlite/</a>
+</li></ul>
+
+<h3 id="sqlite_documentation_sources"><span>5.3.2. </span>SQLite Documentation Sources</h3>
+
+<p>The documentation sources include documentation text and images with the
+scripts and makefile needed to construct the SQLite website documentation.
+This document is contained within the documentation sources. The
+document sources are kept in a separate repository distinct from the
+source code. The documentation sources repository is publicly readable.
+
+</p><p>The makefiles and scripts used to generate the documentation gather
+text from baseline documents in the documentation source repository.
+Additional text is extracted from comments in the SQLite source code.
+Requirements coverage information is extracted from special comments in the
+<a href="testing.html#tcl">TCL test suite</a> which is part of the source repository, and from
+comments in the <a href="th3.html">TH3</a> test suite which is in a separate private repository.
+
+</p><ul>
+<li> Primary location: <a href="https://www.sqlite.org/docsrc">https://www.sqlite.org/docsrc</a>
+</li><li> Backup A: <a href="https://www2.sqlite.org/docsrc">https://www2.sqlite.org/docsrc</a>
+</li><li> Backup B: <a href="https://www3.sqlite.org/cgi/docsrc">https://www3.sqlite.org/cgi/docsrc</a>
+</li></ul>
+
+<h3 id="sql_logic_test"><span>5.3.3. </span>SQL Logic Test</h3>
+
+<p>
+The <a href="testing.html#slt">SQL Logic Tests</a> are a set of test cases designed to show that
+SQLite behaves the same as other SQL database engines. These tests
+are hosted in a separate code public repository.
+
+</p><ul>
+<li> Primary location: <a href="https://www.sqlite.org/sqllogictest">https://www.sqlite.org/sqllogictest</a>
+</li><li> Backups on private servers
+</li></ul>
+
+<h3 id="test_harness_3"><span>5.3.4. </span>Test Harness #3</h3>
+
+<p>
+The <a href="th3.html">Test Harness #3</a> or <a href="th3.html">TH3</a> test suite is a private set of
+test cases used to test SQLite to 100% MC/DC in an as-delivered
+configuration. TH3 sources are served on the same servers as the
+other SQLite repositories, but differ from the others in being
+proprietary. The TH3 code is only accessible to SQLite developers.
+
+
+</p><ul>
+<li> Primary location: <a href="https://www.sqlite.org/th3">https://www.sqlite.org/th3</a>
+</li><li> Backup A: <a href="https://www3.sqlite.org/cgi/th3">https://www3.sqlite.org/cgi/th3</a>
+</li><li> Additional backups on private servers
+</li></ul>
+
+<h3 id="dbsqlfuzz"><span>5.3.5. </span>Dbsqlfuzz</h3>
+
+<p>
+The dbsqlfuzz module is a
+<a href="https://www.llvm.org/docs/LibFuzzer.html">libFuzzer</a>-based fuzzer
+for SQLite. Dbsqlfuzz fuzzes both the SQL and the database file at
+the same time. Dbsqlfuzz uses a customized mutator.
+
+</p><p>
+Dbsqlfuzz seems to work better at finding problems than any other
+fuzzer available. For that reason, it is kept private. We do not
+want hacker gaining access to this technology.
+
+</p><ul>
+<li> Primary location: <a href="https://www.sqlite.org/dbsqlfuzz">https://www.sqlite.org/dbsqlfuzz</a>
+</li><li> Backup A: <a href="https://www3.sqlite.org/cgi/dbsqlfuzz">https://www3.sqlite.org/cgi/dbsqlfuzz</a>
+</li><li> Additional backups on private servers
+</li></ul>
+
+<h2 id="software_verification_results"><span>5.4. </span>Software Verification Results</h2>
+
+<p>
+Release testing proceeds by <a href="testing.html#cklist">checklist</a>. The current status and
+complete change history for each checklist is stored in a separate
+SQLite database file. These files are not version controlled, but
+separate copies are maintained on private backup servers.
+
+</p><p>The source code to the software that runs the checklists is stored
+in its own Fossil repository at <a href="https://www.sqlite.org/checklistapp">https://www.sqlite.org/checklistapp</a>.
+
+</p><h1 id="software_requirements_standards_and_data"><span>6. </span>Software Requirements Standards And Data</h1>
+
+<p>In the SQLite project, the "requirements" are the project documentation.
+Special markup in the documentation text indentifies individual requirements.
+The requirement numbers are based on a cryptographic hash of normalized
+requirement text, so that it is impossible to change the requirement text
+without also changing the requirement number.
+
+</p><p>Documentation text (and hence requirement text) is taken from the
+SQLite Documentation source repository, described above, and also from
+comments in the implementation. The makefiles to build the documentation
+are in the documentation source repository.
+
+</p><p>When the documentation is build, requirements are identified and labeled.
+The documentation build process also scans for test cases that verify
+each requirement and constructs a matrix showing which requirements have
+been testing and identifying the specific test cases that test those
+requirements.
+
+</p><h1 id="software_design_and_coding_standards"><span>7. </span>Software Design And Coding Standards</h1>
+
+<p>Objective coding standards for SQLite are minimal:
+
+</p><ul>
+<li> 2-space indentation
+</li><li> No lines over 80 characters in length
+</li><li> No tabs
+</li></ul>
+
+<p>All other design and coding rules are subjective. The
+goal here is to make the software so that it is readable
+and maintainable through the year 2050. To that end, we look
+for succinct yet useful comments (no boilerplate), carefully
+chosen variable names, and careful explanation of the meaning
+of each data structure and the role of each code block.
+
+</p><h1 id="problem_reports"><span>8. </span>Problem Reports</h1>
+
+<p>All problems are fixed expeditiously. There are no lingering problems
+in the sQLite software.
+
+</p><p>The <a href="https://fossil-scm.org/">Fossil version control system</a> utilized by
+SQLite contains built-in support for tracking trouble-tickets. This built-in
+ticket system is used to track and document many historical problems.
+
+</p><p>The <a href="https://fossil-scm.org/forum">SQLite Community Forum</a> is a place
+where anybody on the internet can go to ask questions about or report bugs
+against SQLite. Bugs found by third-parties are often reported initially
+on the Forum. Forum-reported bugs will sometimes be transferred to tickets,
+though recent practice as been to just deal with the bugs on the Forum.
+The Forum has an excellent full-text search feature, is mirrored to
+multiple machines, and is just as searchable and survivable as the ticket
+system, so it seems unnecessary to duplicate Forum-originated bug reports
+into the ticket system. The public locations of the Forum are:
+
+</p><ul>
+<li> Primary location: <a href="https://www.sqlite.org/forum">https://www.sqlite.org/forum</a>
+</li><li> Backup A: <a href="https://www2.sqlite.org/forum">https://www2.sqlite.org/forum</a>
+</li><li> Backup B: <a href="https://www3.sqlite.org/cgi/forum">https://www3.sqlite.org/cgi/forum</a>
+</li></ul>
+
+<p>
+As with the source repositories, the Forum is also synced to various
+private machines.
+Note that because of the way Fossil works, the "backups" are more than just
+read-only backups. They can also function as data inputs. All content
+entered is synced to all repositories, regardless of which repository is
+used for insertion.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/qmplan.in?m=601675a9899ab8a94">2021-11-26 21:13:11</a> UTC </small></i></p>
+
diff --git a/www/queryplanner-ng.html b/www/queryplanner-ng.html
new file mode 100644
index 0000000..79efbc9
--- /dev/null
+++ b/www/queryplanner-ng.html
@@ -0,0 +1,1052 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Next-Generation Query Planner</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Next-Generation Query Planner
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#_introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#_background">2. Background</a></div>
+<div class="fancy-toc2"><a href="#_query_planning_in_sqlite">2.1. Query Planning In SQLite</a></div>
+<div class="fancy-toc2"><a href="#_the_sqlite_query_planner_stability_guarantee">2.2. The SQLite Query Planner Stability Guarantee</a></div>
+<div class="fancy-toc1"><a href="#_a_difficult_case">3. A Difficult Case</a></div>
+<div class="fancy-toc2"><a href="#_query_details">3.1. Query Details</a></div>
+<div class="fancy-toc2"><a href="#_complications">3.2. Complications</a></div>
+<div class="fancy-toc2"><a href="#_finding_the_best_query_plan">3.3. Finding The Best Query Plan</a></div>
+<div class="fancy-toc2"><a href="#_the_n_nearest_neighbors_or_n3_heuristic">3.4. The N Nearest Neighbors or "N3" Heuristic</a></div>
+<div class="fancy-toc1"><a href="#_hazards_of_upgrading_to_ngqp">4. Hazards Of Upgrading To NGQP</a></div>
+<div class="fancy-toc2"><a href="#_case_study_upgrading_fossil_to_the_ngqp">4.1. Case Study: Upgrading Fossil to the NGQP</a></div>
+<div class="fancy-toc2"><a href="#_fixing_the_problem">4.2. Fixing The Problem</a></div>
+<div class="fancy-toc2"><a href="#update_2017_a_better_fix">4.3. Update 2017: A Better Fix</a></div>
+<div class="fancy-toc1"><a href="#_checklist_for_avoiding_or_fixing_query_planner_problems">5. Checklist For Avoiding Or Fixing Query Planner Problems</a></div>
+<div class="fancy-toc1"><a href="#_summary">6. Summary</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="_introduction"><span>1. </span> Introduction</h1>
+
+<p>
+The task of the "query planner" is to figure
+out the best algorithm or "query plan" to accomplish an SQL statement.
+Beginning with SQLite <a href="releaselog/3_8_0.html">version 3.8.0</a> (2013-08-26),
+the query planner component has been
+rewritten so that it runs faster and generates better plans. The
+rewrite is called the "next generation query planner" or "NGQP".
+</p>
+
+<p>This article overviews the importance of query planning, describes some
+of the problems inherent to query planning, and outlines how the NGQP
+solves those problems.</p>
+
+<p>The NGQP is almost always better than the legacy query planner.
+However, there may exist legacy applications that unknowingly depend on
+undefined and/or suboptimal behavior in the legacy query planner, and
+upgrading to the NGQP on those legacy applications could cause performance
+regressions. This risk is considered and a checklist is provided
+for reducing the risk and for fixing any issues that do arise.</p>
+
+<p>This document focuses on the NGQP. For a more general overview of the
+SQLite query planner that encompasses the entire history of SQLite, see the
+"<a href="optoverview.html">The SQLite Query Optimizer Overview</a>" and
+"<a href="queryplanner.html">How Indexes Work</a>" documents.</p>
+
+<h1 id="_background"><span>2. </span> Background</h1>
+
+<p>For simple queries against a single table with few indexes, there is usually
+an obvious choice for the best algorithm.
+But for larger and more complex queries, such as
+multi-way joins with many indexes
+and subqueries, there can be hundreds, thousands, or millions
+of reasonable algorithms for computing the result.
+The job of the query planner is to choose the single "best" query plan from
+this multitude of possibilities.</p>
+
+<p>Query planners are what make SQL database engines so amazingly useful and powerful.
+(This is true of all SQL database engines, not just SQLite.)
+The query planner frees the programmer from the chore of selecting
+a particular query plan, and thereby allows the programmer to
+focus more mental energy on higher-level application issues and on
+providing more value to the end user. For simple queries where the choice
+of query plan is obvious, this is convenient but not hugely important.
+But as applications and schemas and queries grow more complex, a
+clever query planner can greatly speed and simplify the work of application
+development.
+There is amazing power in being about to tell
+the database engine what content is desired, and then let the database
+engine figure out the best way to retrieve that content.</p>
+
+<p>Writing a good query planner is more art than science.
+The query planner must work with incomplete information.
+It cannot determine how long any particular plan will take
+without actually running that plan. So when comparing two
+or more plans to figure out which is "best", the query planner has to make
+some guesses and assumptions and those guesses and assumptions will
+sometimes be wrong. A good query planner is one that will
+find the correct solution often enough that application
+programmers rarely need to get involved.</p>
+
+<h2 id="_query_planning_in_sqlite"><span>2.1. </span> Query Planning In SQLite</h2>
+
+<p>SQLite computes joins using nested loops,
+one loop for each table
+in the join. (Additional loops might be inserted for IN
+and OR operators in the WHERE clause. SQLite considers those too,
+but for simplicity we will ignore them in this essay.)
+One or more indexes might be used on each loop to speed the search,
+or a loop might be a "full table scan" that reads every row in the
+table. Thus query planning decomposes into two subtasks:</p>
+<ol>
+<li> Picking the nested order of the various loops
+</li><li> Choosing good indexes for each loop
+</li></ol>
+<p>Picking the nesting order is generally the more challenging problem.
+Once the nesting order of the join is established, the choice of indexes
+for each loop is normally obvious.</p>
+
+<a name="qpstab"></a>
+
+<h2 id="_the_sqlite_query_planner_stability_guarantee"><span>2.2. </span> The SQLite Query Planner Stability Guarantee</h2>
+
+<p>When the Query Planner Stability Guarantee (QPSG) is enabled
+SQLite will always pick the same query plan for any
+given SQL statement as long as:
+
+</p><ol type="a">
+<li>the database schema does not change in significant ways such as
+ adding or dropping indexes,</li>
+<li>the ANALYZE command is not rerun, </li>
+<li>the same version of SQLite is used.</li>
+</ol>
+
+<p>The QPSG is disabled by default. It can be enabled at compile-time
+using the <a href="compile.html#enable_qpsg">SQLITE_ENABLE_QPSG</a> compile-time option, or at run-time by
+invoking <a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">SQLITE_DBCONFIG_ENABLE_QPSG</a>,1,0).
+
+</p><p>The QPSG means that if all of your queries run efficiently
+during testing, and if your application does not change the schema,
+then SQLite will not suddenly decide to start using a different
+query plan, possibly causing a performance problem after your application
+is released to users. If your application works in the lab, it
+will continue working the same way after deployment.</p>
+
+<p>Enterprise-class client/server SQL database engines do not normally
+make this guarantee.
+In client/server SQL database engines, the server keeps track of
+statistics on the sizes of tables and on the quality of indexes
+and the query planner uses those statistics to help select the best plans.
+As content is added, deleted, or changed in the database, the statistics
+will evolve and may cause the query planner to begin using a different
+query plan for some particular query. Usually the new plan will be better
+for the evolving structure of the data. But sometimes the new query plan will
+cause a performance reduction. With a client/server database engine, there
+is typically a Database Administrator (DBA) on hand to deal with these
+rare problems as they come up. But DBAs are not available to fix problems
+in an embedded database like SQLite, and hence SQLite is careful to
+ensure that plans do not change unexpectedly after deployment.</p>
+
+<p>It is important to note that changing versions of SQLite might cause
+changes in query plans.
+The same version of SQLite will
+always pick the same query plan, but if you relink your application to use
+a different version of SQLite, then query plans might change. In rare
+cases, an SQLite version change might lead to a performance regression.
+This is one reason
+you should consider statically linking your applications against SQLite
+rather than use a system-wide SQLite shared library which might
+change without your knowledge or control.</p>
+
+<h1 id="_a_difficult_case"><span>3. </span> A Difficult Case</h1>
+
+<p>
+"TPC-H Q8" is a test query from the
+<a href="http://www.tpc.org/tpch/">Transaction Processing Performance
+Council</a>. The query planners in SQLite versions 3.7.17 and earlier
+do not choose good plans for TPC-H Q8. And it has been determined that
+no amount
+of tweaking of the legacy query planner will fix that. In order to find
+a good solution to the TPC-H Q8 query, and to continue improving the
+quality of SQLite's query planner, it became necessary to redesign the
+query planner. This section tries to explain why this redesign was
+necessary and how the NGQP is different and addresses the TPC-H Q8 problem.
+</p>
+
+<h2 id="_query_details"><span>3.1. </span> Query Details</h2>
+
+<p>
+TPC-H Q8 is an eight-way join.
+As observed above, the main task of the query planner is
+to figure out the best nesting order of the eight loops in order to minimize
+the work needed to complete the join.
+A simplified model of this problem for the case of TPC-H Q8 is shown
+by the following diagram:
+</p>
+
+<center>
+<div style="max-width:677px;"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 677.503 310.031">
+<circle cx="132" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">S</text>
+<circle cx="234" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">L</text>
+<circle cx="336" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">O</text>
+<circle cx="438" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">C</text>
+<circle cx="539" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="539" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">N1</text>
+<circle cx="641" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="641" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">R</text>
+<circle cx="234" cy="205" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="205" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">P</text>
+<circle cx="30" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="30" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">N2</text>
+<polygon points="104,101 91,101 94,93" style="fill:rgb(0,0,0)"/>
+<path d="M58,101 L 70,96 Q 81,92 90,95 L 98,99" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="84" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">6.00</text>
+<polygon points="58,106 71,106 68,114" style="fill:rgb(0,0,0)"/>
+<path d="M104,106 L 92,111 Q 81,115 72,112 L 64,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="123" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">2.08</text>
+<polygon points="205,101 193,101 196,93" style="fill:rgb(0,0,0)"/>
+<path d="M160,101 L 171,96 Q 183,92 191,95 L 200,99" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="84" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">9.17</text>
+<polygon points="160,106 172,106 169,114" style="fill:rgb(0,0,0)"/>
+<path d="M205,106 L 194,111 Q 183,115 174,112 L 166,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="123" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">2.30</text>
+<polygon points="307,101 295,101 298,93" style="fill:rgb(0,0,0)"/>
+<path d="M262,101 L 273,96 Q 285,92 293,95 L 302,99" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="285" y="84" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">2.77</text>
+<polygon points="262,106 274,106 271,114" style="fill:rgb(0,0,0)"/>
+<path d="M307,106 L 296,111 Q 285,115 276,112 L 267,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="285" y="123" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">4.03</text>
+<polygon points="409,101 397,101 400,93" style="fill:rgb(0,0,0)"/>
+<path d="M364,101 L 375,96 Q 387,92 395,95 L 404,99" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="387" y="84" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">2.64</text>
+<polygon points="364,106 376,106 373,114" style="fill:rgb(0,0,0)"/>
+<path d="M409,106 L 398,111 Q 387,115 378,112 L 369,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="387" y="123" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">5.30</text>
+<polygon points="511,101 499,101 502,93" style="fill:rgb(0,0,0)"/>
+<path d="M466,101 L 477,96 Q 489,92 497,95 L 506,99" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="84" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">2.08</text>
+<polygon points="466,106 478,106 475,114" style="fill:rgb(0,0,0)"/>
+<path d="M511,106 L 500,111 Q 489,115 480,112 L 471,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="123" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">6.40</text>
+<polygon points="613,101 601,101 604,93" style="fill:rgb(0,0,0)"/>
+<path d="M568,101 L 579,96 Q 590,92 599,95 L 608,99" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="590" y="84" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">1.79</text>
+<polygon points="568,106 580,106 577,114" style="fill:rgb(0,0,0)"/>
+<path d="M613,106 L 602,111 Q 590,115 582,112 L 573,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="590" y="123" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">3.47</text>
+<polygon points="237,177 237,165 245,168" style="fill:rgb(0,0,0)"/>
+<path d="M237,132 L 241,143 Q 245,155 242,163 L 239,172" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="245" y="155" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">2.64</text>
+<polygon points="231,132 231,144 223,141" style="fill:rgb(0,0,0)"/>
+<path d="M231,177 L 227,166 Q 222,155 226,146 L 229,137" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="222" y="155" text-anchor="end" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">6.01</text>
+<circle cx="30" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="30" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="30,75 26,64 34,64" style="fill:rgb(0,0,0)"/>
+<path d="M30,30L30,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="30" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 5.52</text>
+<circle cx="132" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="132,75 128,64 136,64" style="fill:rgb(0,0,0)"/>
+<path d="M132,30L132,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 9.47</text>
+<circle cx="234" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="234,75 229,64 238,64" style="fill:rgb(0,0,0)"/>
+<path d="M234,30L234,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 16.40</text>
+<circle cx="336" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="336,75 331,64 340,64" style="fill:rgb(0,0,0)"/>
+<path d="M336,30L336,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 13.87</text>
+<circle cx="438" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="438,75 433,64 442,64" style="fill:rgb(0,0,0)"/>
+<path d="M438,30L438,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 12.56</text>
+<circle cx="539" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="539" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="539,75 535,64 544,64" style="fill:rgb(0,0,0)"/>
+<path d="M539,30L539,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="539" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 5.52</text>
+<circle cx="641" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="641" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="641,75 637,64 646,64" style="fill:rgb(0,0,0)"/>
+<path d="M641,30L641,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="641" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 3.56</text>
+<circle cx="234" cy="293" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="293" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="234,234 238,245 229,245" style="fill:rgb(0,0,0)"/>
+<path d="M234,279L234,240" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="256" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 7.71</text>
+</svg>
+</div>
+</center>
+
+<p>
+In the diagram, each of the 8 tables in the FROM clause of the query is
+identified by a large circle with the label of the FROM-clause term:
+N2, S, L, P, O, C, N1 and R.
+The arcs in the graph represent the estimated cost of computing each term
+assuming that the origin of the arc is in an outer loop. For example, the
+cost of running the S loop as an inner loop to L is 2.30 whereas the
+cost of running the S loop as an outer loop to L is 9.17.</p>
+
+<p>The "cost" here is logarithmic. With nested loops, the work
+is multiplied, not added. But it is customary to think of graphs
+with additive weights and so the graph shows the logarithm of the
+various costs. The graph shows a cost advantage of S being inside of
+L of about 6.87, but this translates into the query running about
+963 times faster when S loop is inside of the L loop rather than
+being outside of it.</p>
+
+<p>The arrows from the small circles labeled with "*" indicate the cost
+of running each loop with no dependencies. The outermost loop must use this
+*-cost. Inner loops have the option of using the *-cost or a cost assuming
+one of the other terms is in an outer loop, whichever gives the best
+result. One can think of the *-costs as a short-hand notation indicating
+multiple arcs, one from each of the other nodes in the
+graph. The graph is therefore "complete", meaning that there are arcs
+(some explicit and some implied) in both directions between every pair of
+nodes in the graph.</p>
+
+<p>The problem of finding the best query plan is equivalent to finding
+a minimum-cost path through the graph that visits each node
+exactly once.</p>
+
+<p>(Side note: The cost estimates in the TPC-H Q8 graph above were computed
+by the query planner in SQLite 3.7.16 and converted using a natural logarithm.)
+</p>
+
+<h2 id="_complications"><span>3.2. </span> Complications</h2>
+
+<p>The presentation of the query planner problem above is a simplification.
+The costs are estimates. We cannot
+know what the true cost of running a loop is until we actually run the loop.
+SQLite makes guesses for the cost of running a loop based on
+the availability of indexes and constraints found in the WHERE
+clause. These guesses are usually pretty good, but they can sometimes be
+off. Using the <a href="lang_analyze.html">ANALYZE</a> command to collect additional statistical
+information about the database can sometimes enable SQLite to make better
+guesses about the cost.</p>
+
+<p>The costs are comprised of multiple numbers, not a single number as
+shown in the graph.
+SQLite computes several different estimated costs for each loop that apply at
+different times. For example, there is a "setup" cost that is incurred
+just once when the query starts. The setup cost is the cost of computing
+an <a href="optoverview.html#autoindex">automatic index</a> for a table that does not already
+have an index. Then there
+is the cost of running each step of the loop. Finally, there is an estimate
+of the number rows generated by the loop, which is information needed in
+estimating the costs of inner loops. Sorting costs may come into play
+if the query has an ORDER BY clause.</p>
+
+<p>In a general query, dependencies need not be on a single loop, and hence
+the matrix of dependencies might not be representable as a graph.
+For example, one of the WHERE clause constraints might be
+S.a=L.b+P.c, implying that the S loop must be an inner loop of both
+L and P. Such dependencies cannot be drawn as a graph
+since there is no way for an arc to originate at two or more nodes at
+once.</p>
+
+<p>If the query contains an ORDER BY clause or a GROUP BY clause or if
+the query uses the DISTINCT keyword then it is advantageous to select a
+path through the graph that causes rows to naturally appear in sorted order,
+so that no separate sorting step is required. Automatic elimination of
+ORDER BY clauses
+can make a large performance difference, so this is another factor
+that needs to be considered in a complete implementation.</p>
+
+<p>In the TPC-H Q8 query, the setup costs are all negligible,
+all dependencies are between individual nodes, and there is no ORDER BY,
+GROUP BY, or DISTINCT clause. So for TPC-H Q8,
+the graph above is a reasonable representation of what needs to be computed.
+The general case involves a lot of extra complication, which for clarity
+is neglected in the remainder of this article.</p>
+
+<h2 id="_finding_the_best_query_plan"><span>3.3. </span> Finding The Best Query Plan</h2>
+
+<p>Prior to <a href="releaselog/3_8_0.html">version 3.8.0</a> (2013-08-26), SQLite always used
+the "Nearest Neighbor" or "NN" heuristic when searching for the best query plan.
+The NN heuristic makes a single traversal of the graph, always choosing
+the lowest-cost arc as the next step.
+The NN heuristic works surprisingly well in most cases.
+And NN is fast, so that SQLite is able to quickly find good plans
+for even large 64-way joins. In contrast, other SQL database engines that
+do more extensive searching tend to bog down when the
+number of tables in a join goes above 10 or 15.</p>
+
+<p>Unfortunately, the query plan computed by NN for TPC-H Q8 is not optimal.
+The plan computed using NN is R-N1-N2-S-C-O-L-P with a cost of 36.92.
+The notation
+in the previous sentence means that the R table is run in the outer loop,
+N1 is in the next inner loop, N2 is in the third loop, and so forth down
+to P which is in the inner-most loop. The shortest path through the
+graph (as found via exhaustive search) is P-L-O-C-N1-R-S-N2
+with a cost of 27.38. The difference might not seem like much, but
+remember that
+the costs are logarithmic, so the shortest path is nearly 750 times
+faster than that path found using the NN heuristic.</p>
+
+<p>One solution to this problem is to change SQLite to do an exhaustive
+search for the best path. But an exhaustive search requires time
+proportional to
+K! (where K is the number of tables in the join) and so when you get
+beyond a 10-way join, the time
+to run <a href="c3ref/prepare.html">sqlite3_prepare()</a> becomes very large.</p>
+
+<h2 id="_the_n_nearest_neighbors_or_n3_heuristic"><span>3.4. </span> The N Nearest Neighbors or "N3" Heuristic</h2>
+
+<p>The NGQP uses a new heuristic for seeking the best path through the
+graph: "N Nearest Neighbors" (hereafter "N3"). With N3, instead of
+choosing just one nearest neighbor for each step, the algorithm keeps
+track of the N bests paths at each step for some small integer N.</p>
+
+<p>Suppose N=4. Then for the TPC-H Q8 graph, the first step finds
+the four shortest paths to visit any single node in the graph:
+
+</p><blockquote>
+ R (cost: 3.56) <br>
+ N1 (cost: 5.52) <br>
+ N2 (cost: 5.52) <br>
+ P (cost: 7.71) <br>
+</blockquote>
+
+<p>The second step finds the four shortest paths to visit two nodes
+beginning with one of the four paths from the previous step. In the
+case where two or more paths are equivalent (they have the same set of
+visited nodes, though possibly in a different order) only the
+first and lowest-cost path is retained. We have:</p>
+
+<blockquote>
+ R-N1 (cost: 7.03) <br>
+ R-N2 (cost: 9.08) <br>
+ N2-N1 (cost: 11.04) <br>
+ R-P {cost: 11.27} <br>
+</blockquote>
+
+<p>The third step starts with the four shortest two-node paths and finds
+the four shortest three-node paths:</p>
+
+<blockquote>
+ R-N1-N2 (cost: 12.55) <br>
+ R-N1-C (cost: 13.43) <br>
+ R-N1-P (cost: 14.74) <br>
+ R-N2-S (cost: 15.08) <br>
+</blockquote>
+
+<p>And so forth. There are 8 nodes in the TPC-H Q8 query,
+so this process repeats a total of 8
+times. In the general case of a K-way join, the storage requirement
+is O(N) and the computation time is O(K*N), which is significantly faster
+than the O(2<small><sup>K</sup></small>) exact solution.</p>
+
+<p>But what value to choose for N? One might try N=K. This makes the
+algorithm O(K<small><sup>2</sup></small>)
+which is actually still quite efficient, since the
+maximum value of K is 64 and K rarely exceeds 10.
+But that is not enough for the TPC-H Q8
+problem. With N=8 on TPC-H Q8 the N3 algorithm finds
+the solution R-N1-C-O-L-S-N2-P with a cost of 29.78.
+That is a big improvement over NN, but it is still
+not optimal. N3 finds the optimal solution for TPC-H Q8
+when N is 10 or greater.</p>
+
+<p>The initial implementation of NGQP chooses N=1 for simple queries, N=5
+for two-way joins and N=10 for all joins with three or more tables. This
+formula for selecting N might change in subsequent releases.</p>
+
+<a name="hazards"></a>
+
+<h1 id="_hazards_of_upgrading_to_ngqp"><span>4. </span> Hazards Of Upgrading To NGQP</h1>
+
+<p><i>Update on 2018-11-24: This section was important
+when the NGQP was new. But five years have elapsed, the NGQP has been
+deployed successfully to billions of devices, and everyone has upgraded.
+The upgrade hazard has vanished.
+This section is retained for historical reference only.
+Modern reads can skip ahead to the <a href="queryplanner-ng.html#howtofix">query planner checklist</a>.</i>
+
+</p><p>For most applications, upgrading from the legacy query planner to the NGQP
+requires little thought or effort.
+Simply replace the older SQLite version with the newer version of SQLite
+and recompile and the application will run faster.
+There are no API changes nor modifications
+to compilation procedures.</p>
+
+<p>But as with any query planner change, upgrading to the NGQP does carry
+a small risk of introducing performance regressions. The problem here is
+not that the NGQP is incorrect or buggy or inferior to the legacy query
+planner. Given reliable information about the selectivity of indexes,
+the NGQP should always pick a plan that is as good or better than before.
+The problem is that some applications may be using low-quality and
+low-selectivity indexes without having run <a href="lang_analyze.html">ANALYZE</a>. The older query
+planners look at many fewer possible implementations for each query and
+so they may have stumbled over a good plan by stupid luck. The NGQP, on
+the other hand, looks at many more query plan possibilities, and it may
+choose a different query plan that
+works better in theory, assuming good indexes, but which gives a performance
+regression in practice, because of the shape of the data.</p>
+
+<p>Key points:</p>
+
+<ul>
+<li><p>The NGQP will always find an equal or better query plan, compared to
+ prior query planners, as long as it
+ has access to accurate <a href="lang_analyze.html">ANALYZE</a> data in the <a href="fileformat2.html#stat1tab">SQLITE_STAT1</a> file.</p>
+</li><li><p>The NGQP will always find a good query plan
+ as long as the schema does not contain indexes that have more than
+ about 10 or 20 rows with the same value in the left-most column of the
+ index.</p>
+</li></ul>
+
+<p>Not all applications meet these conditions. Fortunately,
+the NGQP will still usually find good query plans, even without these conditions.
+However, cases do arise (rarely) where performance regressions can occur.</p>
+
+<a name="fossilcasestudy"></a>
+
+<h2 id="_case_study_upgrading_fossil_to_the_ngqp"><span>4.1. </span> Case Study: Upgrading Fossil to the NGQP</h2>
+
+<p>The <a href="http://www.fossil-scm.org/">Fossil DVCS</a> is the version
+control system used to track all of the SQLite source code.
+A Fossil repository is an SQLite database file.
+(Readers are invited to ponder this recursion as an independent exercise.)
+Fossil is both the version-control system for SQLite and a test
+platform for SQLite. Whenever enhancements are made to SQLite,
+Fossil is one of the first applications to test and evaluate those
+enhancements. So Fossil was an early adopter of the NGQP.</p>
+
+<p>Unfortunately, the NGQP caused a
+performance regression in Fossil.</p>
+
+<p>One of the many reports that Fossil makes available is a timeline of
+changes to a single branch showing all merges in and out of that branch. See
+<a href="http://www.sqlite.org/src/timeline?nd&n=200&r=trunk">http://www.sqlite.org/src/timeline?nd&n=200&r=trunk</a>
+for a typical
+example of such a report. Generating such a report normally takes just
+a few milliseconds. But after upgrading to the NGQP we noticed that
+this one report was taking closer to 10 seconds for the trunk of the
+repository.</p>
+
+<p>The core query used to generate the branch timeline is shown below.
+(Readers are not expected to understand the details of this query.
+Commentary will follow.)</p>
+
+<blockquote><pre>
+SELECT
+ blob.rid AS blobRid,
+ uuid AS uuid,
+ datetime(event.mtime,'localtime') AS timestamp,
+ coalesce(ecomment, comment) AS comment,
+ coalesce(euser, user) AS user,
+ blob.rid IN leaf AS leaf,
+ bgcolor AS bgColor,
+ event.type AS eventType,
+ (SELECT group_concat(substr(tagname,5), ', ')
+ FROM tag, tagxref
+ WHERE tagname GLOB 'sym-*'
+ AND tag.tagid=tagxref.tagid
+ AND tagxref.rid=blob.rid
+ AND tagxref.tagtype>0) AS tags,
+ tagid AS tagid,
+ brief AS brief,
+ event.mtime AS mtime
+ FROM event CROSS JOIN blob
+ WHERE blob.rid=event.objid
+ AND (EXISTS(SELECT 1 FROM tagxref
+ WHERE tagid=11 AND tagtype>0 AND rid=blob.rid)
+ OR EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=cid
+ WHERE tagid=11 AND tagtype>0 AND pid=blob.rid)
+ OR EXISTS(SELECT 1 FROM plink JOIN tagxref ON rid=pid
+ WHERE tagid=11 AND tagtype>0 AND cid=blob.rid))
+ ORDER BY event.mtime DESC
+ LIMIT 200;
+</pre></blockquote>
+
+<p>This query is not
+especially complicated, but even so it replaces hundreds or
+perhaps thousands of lines of procedural code.
+The gist of the query is this: Scan down the EVENT table looking
+for the most recent 200 check-ins that satisfy any one of three conditions:
+
+</p><p></p><ol>
+<li> The check-in has a "trunk" tag.
+</li><li> The check-in has a child that has a "trunk" tag.
+</li><li> The check-in has a parent that has a "trunk" tag.
+</li></ol>
+
+<p>
+The first condition causes all of the trunk check-ins to be displayed and
+the second and third cause check-ins that merge into or fork from
+the trunk to also be included.
+The three conditions are implemented by the three OR-connected
+EXISTS statements in the WHERE clause of the query.
+The slowdown that occurred with the NGQP was caused by the second and
+third conditions. The problem is the same in each, so we will examine
+just the second one.
+The subquery of the second condition can be rewritten (with minor
+and immaterial simplifications) as follows:</p>
+
+<blockquote><pre>
+SELECT 1
+ FROM plink JOIN tagxref ON tagxref.rid=plink.cid
+ WHERE tagxref.tagid=$trunk
+ AND plink.pid=$ckid;
+</pre></blockquote>
+
+<p>The PLINK table holds parent-child relationships between
+check-ins. The TAGXREF table maps tags into check-ins.
+For reference, the relevant portions of the schemas
+for these two tables is shown here:</p>
+
+<blockquote><pre>
+CREATE TABLE plink(
+ pid INTEGER REFERENCES blob,
+ cid INTEGER REFERENCES blob
+);
+CREATE UNIQUE INDEX plink_i1 ON plink(pid,cid);
+
+CREATE TABLE tagxref(
+ tagid INTEGER REFERENCES tag,
+ mtime TIMESTAMP,
+ rid INTEGER REFERENCE blob,
+ UNIQUE(rid, tagid)
+);
+CREATE INDEX tagxref_i1 ON tagxref(tagid, mtime);
+</pre></blockquote>
+
+<p>There are only two reasonable ways to implement this query.
+(There are many other possible algorithms, but none of the
+others are contenders for being the "best" algorithm.)</p>
+
+<ol type="1">
+<li value="1"><p>
+Find all children of check-in $ckid and test each one to see if
+it has the $trunk tag.
+</p></li><li value="2"><p>
+Find all check-ins with the $trunk tag and test each one to see if
+it is a child of $ckid.
+</p></li></ol>
+
+<p>
+Intuitively, we humans understand that algorithm-1 is best.
+Each check-in is likely to have few children (one child is
+the most common case) and each child can be tested for the
+$trunk tag in logarithmic time. Indeed, algorithm-1 is the
+faster choice in practice. But the NGQP has no intuition. The
+NGQP must use hard math, and algorithm-2 is slightly
+better mathematically. This is because, in the absence of other information,
+the NGQP must assume that the indexes PLINK_I1 and TAGXREF_I1 are of
+equal quality and are equally selective. Algorithm-2 uses one field
+of the TAGXREF_I1 index and both fields of the PLINK_I1 index whereas
+algorithm-1 only uses the first field of each index. Since
+algorithm-2 uses more index material, the NGQP is correct
+to judge it to be the better algorithm. The scores are close and
+algorithm-2 just barely squeaks ahead of algorithm-1. But
+algorithm-2 really is the correct choice here.
+</p>
+
+<p>
+Unfortunately, algorithm-2 is slower than algorithm-1 in
+this application.
+</p>
+
+<p>
+The problem is that the indexes are not of equal quality.
+A check-in is likely to only have one child. So the first
+field of PLINK_I1 will usually narrow down the search to just a single
+row. But there are thousands and thousands check-ins tagged with "trunk",
+so the first field of TAGXREF_I1 will be
+of little help in narrowing down the search.
+</p>
+
+<p>
+The NGQP has no way of knowing that TAGXREF_I1 is almost useless in this
+query, unless <a href="lang_analyze.html">ANALYZE</a> has been run on the database. The <a href="lang_analyze.html">ANALYZE</a> command
+gathers statistics on the quality of the various indexes and stores those
+statistics in <a href="fileformat2.html#stat1tab">SQLITE_STAT1</a> table.
+Having access to this statistical information,
+the NGQP easily chooses algorithm-1 as the best algorithm, by a wide
+margin.</p>
+
+<p>Why didn't the legacy query planner choose algorithm-2?
+Easy: because the NN algorithm
+never even considered algorithm-2. Graphs of the planning
+problem look like this:</p>
+
+<center>
+<div style="max-width:523px;"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 523.232 186.76">
+<circle cx="55" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="55" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">P</text>
+<circle cx="157" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="157" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">T</text>
+<polygon points="129,101 117,101 120,93" style="fill:rgb(0,0,0)"/>
+<path d="M84,101 L 95,96 Q 106,92 115,95 L 124,99" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="106" y="84" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">4.8</text>
+<polygon points="84,106 96,106 93,114" style="fill:rgb(0,0,0)"/>
+<path d="M129,106 L 118,111 Q 106,115 98,112 L 89,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="106" y="123" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">4.4</text>
+<circle cx="55" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="55" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="55,75 51,64 60,64" style="fill:rgb(0,0,0)"/>
+<path d="M55,30L55,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="55" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 4.9</text>
+<circle cx="157" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="157" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="157,75 153,64 162,64" style="fill:rgb(0,0,0)"/>
+<path d="M157,30L157,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="157" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 5.2</text>
+<text x="106" y="171" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="125%" dominant-baseline="central">without ANALYZE</text>
+<circle cx="384" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">P</text>
+<circle cx="486" cy="104" r="28.3066" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="156.25%" dominant-baseline="central">T</text>
+<polygon points="457,101 445,101 448,93" style="fill:rgb(0,0,0)"/>
+<path d="M412,101 L 423,96 Q 435,92 443,95 L 452,99" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="435" y="84" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">4.4</text>
+<polygon points="412,106 424,106 421,114" style="fill:rgb(0,0,0)"/>
+<path d="M457,106 L 446,111 Q 435,115 426,112 L 417,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="435" y="123" text-anchor="middle" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central">3.8</text>
+<circle cx="384" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="384,75 379,64 388,64" style="fill:rgb(0,0,0)"/>
+<path d="M384,30L384,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 3.9</text>
+<circle cx="486" cy="16" r="14.1533" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="16" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="486,75 481,64 490,64" style="fill:rgb(0,0,0)"/>
+<path d="M486,30L486,69" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="53" text-anchor="start" fill="rgb(0,0,0)" font-size="80%" dominant-baseline="central"> 6.1</text>
+<text x="435" y="171" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" font-size="125%" dominant-baseline="central">with ANALYZE</text>
+</svg>
+</div>
+</center>
+
+<p>
+In the "without ANALYZE" case on the left, the NN algorithm chooses
+loop P (PLINK) as the outer loop because 4.9 is less than 5.2, resulting
+in path P-T which is algorithm-1. NN only looks at the single best choice
+at each step so it completely misses the fact that
+5.2+4.4 makes a slightly cheaper plan than 4.9+4.8. But the N3 algorithm
+keeps track of the 5 best paths for a 2-way join, so it ends up
+selecting path T-P because of its slightly lower overall cost.
+Path T-P is algorithm-2.
+</p>
+
+<p>
+Note that with ANALYZE the cost estimates are
+better aligned with reality and algorithm-1 is
+selected by both NN and N3.
+</p>
+
+<p>(Side note: The costs estimates in the two most recent graphs
+were computed by the NGQP using a base-2 logarithm and slightly different
+cost assumptions compared to the legacy query planner.
+Hence, the cost estimates in
+these latter two graphs are not directly comparable to the cost estimates
+in the TPC-H Q8 graph.)</p>
+
+<h2 id="_fixing_the_problem"><span>4.2. </span> Fixing The Problem</h2>
+
+<p>Running <a href="lang_analyze.html">ANALYZE</a> on the repository database immediately fixed the
+performance problem. However, we want Fossil to be robust and to always
+work quickly regardless of whether or not its repository has been analyzed.
+For this reason, the query was modified to use the CROSS JOIN operator
+instead of the plain JOIN operator.
+SQLite will not reorder the tables of a CROSS JOIN.
+This is a long-standing feature of SQLite that is specifically designed
+to allow knowledgeable programmers
+to enforce a particular loop nesting order. Once the join
+was changed to CROSS JOIN (the addition of a single keyword) the NGQP was
+forced to choose the faster algorithm-1 regardless of whether or not
+statistical information had been gathered using ANALYZE.</p>
+
+<p>We say that algorithm-1 is "faster", but this
+is not strictly true. Algorithm-1 is faster in common repositories, but
+it is possible to construct a repository in which
+every check-in is on a different uniquely-named branch and
+all check-ins are children of the root check-in.
+In that case, TAGXREF_I1 would become more selective
+than PLINK_I1 and algorithm-2 really would be the faster choice.
+However such repositories are very unlikely to appear in
+practice and so hard-coding the loop nested order using the
+CROSS JOIN syntax is a reasonable solution
+to the problem in this case.</p>
+
+<h2 id="update_2017_a_better_fix"><span>4.3. </span>Update 2017: A Better Fix</h2>
+
+<p>The prior text was written in early 2013, before the first release of
+SQLite version 3.8.0. This paragraph was added in mid 2021.
+While all of the previous discussion remains true, a lot of improvements
+have been made to the query planner, making this whole section largely moot.
+
+</p><p>In 2017, Fossil was enhanced to make use of the new
+<a href="pragma.html#pragma_optimize">PRAGMA optimize</a> statement. Whenever Fossil is about to close the
+database connection to its repository, it first runs
+"PRAGMA optimize", which will in turn cause ANALYZE to be run if it
+is needed. Usually an ANALYZE is not needed, and so there is no
+measurable performance penalty for doing this. But every now and
+then ANALYZE might be run on a few of the tables in the repository
+database. Because if this, query planning issues such as the one
+described here no longer come up in Fossil. The fact that ANALYZE
+is run periodically to keep the <a href="fileformat2.html#stat1tab">sqlite_stat1</a> table up-to-date means
+that hand-tuning of queries is no longer required. We have not had
+to tweak a query in Fossil in ages.
+
+</p><p>Therefore, the current recommendation for avoiding problems such
+as this one is to simply run "PRAGMA optimize" (possibly preceded by
+"<a href="pragma.html#pragma_analysis_limit">PRAGMA analysis_limit=200</a>") just prior to closing each database
+connection. The CROSS JOIN hack is still available, but if you keep
+the query planner statistics in the <a href="fileformat2.html#stat1tab">sqlite_stat1</a> table up-to-date,
+it usually won't be necessary.
+
+<a name="howtofix"></a>
+
+</p><h1 id="_checklist_for_avoiding_or_fixing_query_planner_problems"><span>5. </span> Checklist For Avoiding Or Fixing Query Planner Problems</h1>
+
+<ol>
+<li><p><b>Don't panic!</b>
+Cases where the query planner picks an inferior plan are actually quite
+rare. You are unlikely to run across any problems in your application.
+If you are not having performance issues, you do not need to worry
+about any of this.</p>
+
+</li><li><p><b>Create appropriate indexes.</b>
+Most SQL performance problems arise not because of query planner issues
+but rather due to lack of appropriate indexes. Make sure indexes are
+available to assist all large queries. Most performance issues can be
+resolved by one or two CREATE INDEX commands and with no changes to
+application code.</p>
+
+</li><li><p><b>Avoid creating low-quality indexes.</b>.
+A low-quality index (for the purpose of this checklist) is one where
+there are more than 10 or 20 rows in the table that have the same value
+for the left-most column of the index. In particular, avoid using
+boolean or "enum" columns as the left-most columns of your indexes.</p>
+
+<p>The Fossil performance problem described in the previous section of
+this document arose because there were over
+ten-thousand entries in the TAGXREF table with the same value for the
+left-most column (the TAGID column) of the TAGXREF_I1 index.</p>
+
+</li><li><p><b>If you must use a low-quality index, be sure to run <a href="lang_analyze.html">ANALYZE</a>.</b>
+Low-quality indexes will not confuse the query planner as long as the
+query planner knows that the indexes are of low quality. And the way
+the query planner knows this is by the content of the <a href="fileformat2.html#stat1tab">SQLITE_STAT1</a> table,
+which is computed by the ANALYZE command.</p>
+
+<p>Of course, ANALYZE only works effectively if you have a significant
+amount of content in your database in the first place. When creating a
+new database that you expect to accumulate a lot of data, you can run
+the command "ANALYZE sqlite_schema" to create the SQLITE_STAT1 table,
+then prepopulate the <a href="fileformat2.html#stat1tab">sqlite_stat1</a> table (using ordinary INSERT statements)
+with content that describes a typical
+database for your application - perhaps content that you extracted after
+running ANALYZE on a well-populated template database in the lab.
+Or, you could just run "<a href="pragma.html#pragma_optimize">PRAGMA optimize</a>" before shutting down
+database connections so that ANALYZE will be run automatically as
+needed to keep the <a href="fileformat2.html#stat1tab">sqlite_stat1</a> table current.</p></li>
+
+<li><p><b>Instrument your code.</b>
+Add logic that lets you know quickly and easily which queries are taking
+too much time. Then work on just those specific queries.</p>
+
+</li><li><p><b>Use <a href="lang_corefunc.html#unlikely">unlikely()</a> and <a href="lang_corefunc.html#likelihood">likelihood()</a> SQL functions.</b>
+SQLite normally assumes that terms in the WHERE clause that cannot be used
+by indexes have a strong probability of being true. If this assumption
+is incorrect, it could lead to a suboptimal query plan. The
+<a href="lang_corefunc.html#unlikely">unlikely()</a> and <a href="lang_corefunc.html#likelihood">likelihood()</a> SQL functions can be used to provide
+hints to the query planner about WHERE clause terms that are probably
+not true, and thus aid the query planner in selecting the best possible
+plan.
+
+</p></li><li><p><b>Use the <a href="optoverview.html#crossjoin">CROSS JOIN</a> syntax to enforce a particular
+loop nesting order on queries that might use low-quality indexes in an
+unanalyzed database.</b>
+SQLite <a href="lang_select.html#crossjoin">treats the CROSS JOIN operator specially</a>, forcing the table to
+the left to be an outer loop relative to the table on the right.</p>
+
+<p>Avoid this step if possible, as it defeats one of the huge advantages
+of the whole SQL language concept, specifically that the application
+programmer does not need to get involved with query planning. If you
+do use CROSS JOIN, wait until late in your development cycle to do so,
+and comment the use of CROSS JOIN carefully so that you can take it out
+later if possible. Avoid using CROSS JOIN early in the development
+cycle as doing so is a premature optimization, which is well known to
+be <a href="http://c2.com/cgi/wiki?PrematureOptimization">the root of
+all evil</a>.</p>
+
+</li><li><p><b>Use unary "+" operators to disqualify WHERE clause terms.</b>
+If the query planner insists on selecting a poor-quality index for a particular
+query when a much higher-quality index is available, then
+<a href="optoverview.html#uplus">careful use of unary "+" operators</a> in the WHERE clause
+can force the query planner away from the poor-quality index.
+Avoid using this trick if at all possible, and especially avoid it
+early in the application development cycle. Beware that
+adding a unary "+" operator to an equality expression might change
+the result of that expression if
+<a href="datatype3.html#affinity">type affinity</a> is involved.</p>
+
+</li><li><p><b>Use the <a href="lang_indexedby.html">INDEXED BY</a> syntax to enforce the selection of
+particular indexes on problem queries.</b>
+As with the previous two bullets, avoid this step if possible, and
+especially avoid doing this early in development as it is clearly a
+premature optimization.</p>
+</li></ol>
+
+<h1 id="_summary"><span>6. </span> Summary</h1>
+
+<p>The query planner in SQLite normally does a terrific job of selecting
+fast algorithms for running your SQL statements. This is true of the
+legacy query planner and even more true of the new NGQP. There may be
+an occasional situation where, due to incomplete information, the query
+planner selects a suboptimal plan. This will happen less often with the
+NGQP than with the legacy query planner, but it might still happen. Only
+in those rare cases do application developers need to get involved and
+help the query planner to do the right thing. In the common case, the
+NGQP is just a new enhancement to SQLite that makes the application run
+a little faster and which requires no new developer thought or action.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/queryplanner-ng.in?m=0789a542ae0d36ce1">2022-09-19 12:27:16</a> UTC </small></i></p>
+
diff --git a/www/queryplanner.html b/www/queryplanner.html
new file mode 100644
index 0000000..3aa80da
--- /dev/null
+++ b/www/queryplanner.html
@@ -0,0 +1,1037 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Query Planning</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Query Planning
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#_searching">1. Searching</a></div>
+<div class="fancy-toc2"><a href="#_tables_without_indices">1.1. Tables Without Indices</a></div>
+<div class="fancy-toc2"><a href="#_lookup_by_rowid">1.2. Lookup By Rowid</a></div>
+<div class="fancy-toc2"><a href="#_lookup_by_index">1.3. Lookup By Index</a></div>
+<div class="fancy-toc2"><a href="#_multiple_result_rows">1.4. Multiple Result Rows</a></div>
+<div class="fancy-toc2"><a href="#_multiple_and_connected_where_clause_terms">1.5. Multiple AND-Connected WHERE-Clause Terms</a></div>
+<div class="fancy-toc2"><a href="#_multi_column_indices">1.6. Multi-Column Indices</a></div>
+<div class="fancy-toc2"><a href="#_covering_indexes">1.7. Covering Indexes</a></div>
+<div class="fancy-toc2"><a href="#_or_connected_terms_in_the_where_clause">1.8. OR-Connected Terms In The WHERE Clause</a></div>
+<div class="fancy-toc1"><a href="#_sorting">2. Sorting</a></div>
+<div class="fancy-toc2"><a href="#_sorting_by_rowid">2.1. Sorting By Rowid</a></div>
+<div class="fancy-toc2"><a href="#_sorting_by_index">2.2. Sorting By Index</a></div>
+<div class="fancy-toc2"><a href="#_sorting_by_covering_index">2.3. Sorting By Covering Index</a></div>
+<div class="fancy-toc1"><a href="#_searching_and_sorting_at_the_same_time">3. Searching And Sorting At The Same Time</a></div>
+<div class="fancy-toc2"><a href="#_searching_and_sorting_with_a_multi_column_index">3.1. Searching And Sorting With A Multi-Column Index</a></div>
+<div class="fancy-toc2"><a href="#_searching_and_sorting_with_a_covering_index">3.2. Searching And Sorting With A Covering Index</a></div>
+<div class="fancy-toc2"><a href="#_partial_sorting_using_an_index_a_k_a_block_sorting_">3.3. Partial Sorting Using An Index (a.k.a. Block Sorting)</a></div>
+<div class="fancy-toc1"><a href="#_without_rowid_tables">4. WITHOUT ROWID tables</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+
+<h2 style="margin-left:1.0em" notoc="1" id="overview"> Overview</h2>
+
+<p>
+The best feature of SQL (in <u>all</u> its implementations, not just SQLite)
+is that it is a <i>declarative</i> language, not a <i>procedural</i>
+language. When programming in SQL you tell the system <i>what</i> you
+want to compute, not <i>how</i> to compute it. The task of figuring out
+the <i>how</i> is delegated to the <i>query planner</i> subsystem within
+the SQL database engine.</p>
+
+<p>For any given SQL statement, there might be hundreds or thousands or
+even millions of different algorithms of performing the operation. All
+of these algorithms will get the correct answer, though some will run
+faster than others.
+The query planner is an
+<a href="https://en.wikipedia.org/wiki/Artificial_intelligence">AI</a> that
+tries to pick the fastest and most efficient algorithm for each SQL
+statement.
+</p>
+
+<p>
+Most of the time, the query planner in SQLite does a good job.
+However, the query planner needs indices to
+work with.
+These indices must normally be added by programmers.
+Rarely, the query planner AI will make a suboptimal algorithm
+choice.
+In those cases, programmers may want to provide additional
+hints to help the query planner do a better job.
+</p>
+
+<p>
+This document provides background information about how the
+SQLite query planner and query engine work.
+Programmers can use this information to help create better
+indexes, and provide hints to help the query planner when
+needed.
+</p>
+
+<p>
+Additional information is provided in the
+<a href="optoverview.html">SQLite query planner</a> and
+<a href="queryplanner-ng.html">next generation query planner</a> documents.
+</p>
+
+<a name="searching"></a>
+
+<h1 id="_searching"><span>1. </span> Searching</h1>
+
+<h2 id="_tables_without_indices"><span>1.1. </span> Tables Without Indices</h2>
+
+<p>
+Most tables in SQLite consist of zero or more rows with a unique integer
+key (the <a href="lang_createtable.html#rowid">rowid</a> or <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>) followed by content.
+(The exception is <a href="withoutrowid.html">WITHOUT ROWID</a> tables.)
+The rows
+are logically stored in order of increasing rowid. As an example, this
+article uses a table named "FruitsForSale" which relates various fruits
+to the state
+where they are grown and their unit price at market. The schema is this:
+</p>
+
+<center><table><tr><td><pre>
+CREATE TABLE FruitsForSale(
+ Fruit TEXT,
+ State TEXT,
+ Price REAL
+);
+</pre></table></center>
+
+
+<p>
+With some (arbitrary) data, such a table might be logically stored on disk
+as shown in figure 1:
+</p>
+
+<a name='fig1'></a>
+<p><center>
+<img src="images/qp/tab.gif" alt="figure 1"><br>
+Figure 1: Logical Layout Of Table "FruitsForSale"
+</center></p>
+
+
+<p>
+In this example, the rowids are not
+consecutive but they are ordered. SQLite usually creates rowids beginning
+with one and increasing by one with each added row. But if rows are
+deleted, gaps can appear in the sequence. And the application can control
+the rowid assigned if desired, so that rows are not necessarily inserted
+at the bottom. But regardless of what happens, the rowids are always
+unique and in strictly ascending order.
+</p>
+
+<p>
+Suppose you want to look up the price of peaches. The query would
+be as follows:
+</p>
+
+<center><table><tr><td><pre>
+SELECT price FROM fruitsforsale WHERE fruit='Peach';
+</pre></table></center>
+
+
+<p>
+To satisfy this query, SQLite reads every row out of the
+table, checks to see if the "fruit" column has the value of "Peach" and if
+so, outputs the "price" column from that row. The process is illustrated
+by <a href="#fig2">figure 2</a> below.
+This is algorithm is called a <i>full table scan</i>
+since the entire content of the
+table must be read and examined in order to find the one row of interest.
+With a table of only 7 rows, a full table scan is acceptable,
+but if the table contained 7 million rows, a full table scan might read
+megabytes of content in order to find a single 8-byte number.
+For that reason, one normally tries to avoid full table scans.
+</p>
+
+<a name='fig2'></a>
+<p><center>
+<img src="images/qp/fullscan.gif" alt="figure 2"><br>
+Figure 2: Full Table Scan
+</center></p>
+
+
+<h2 id="_lookup_by_rowid"><span>1.2. </span> Lookup By Rowid</h2>
+
+<p>
+One technique for avoiding a full table scan is to do lookups by
+rowid (or by the equivalent <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>). To lookup the
+price of peaches, one would query for the entry with a rowid of 4:
+</p>
+
+<center><table><tr><td><pre>
+SELECT price FROM fruitsforsale WHERE rowid=4;
+</pre></table></center>
+
+
+<p>
+Since the information is stored in the table in rowid order, SQLite
+can find the correct row using a binary search.
+If the table contains N elements, the time required to look up the
+desired row is proportional to logN rather than being proportional
+to N as in a full table scan. If the table contains 10 million elements,
+that means the query will be on the order of N/logN or about 1 million
+times faster.
+</p>
+
+<a name='fig3'></a>
+<p><center>
+<img src="images/qp/rowidlu.gif" alt="figure 3"><br>
+Figure 3: Lookup By Rowid
+</center></p>
+
+
+<h2 id="_lookup_by_index"><span>1.3. </span> Lookup By Index</h2>
+<p>
+The problem with looking up information by rowid is that you probably
+do not care what the price of "item 4" is - you want to know the price
+of peaches. And so a rowid lookup is not helpful.
+</p>
+
+<p>
+To make the original query more efficient, we can add an index on the
+"fruit" column of the "fruitsforsale" table like this:
+</p>
+
+<center><table><tr><td><pre>
+CREATE INDEX Idx1 ON fruitsforsale(fruit);
+</pre></table></center>
+
+
+<p>
+An index is another table similar to the original "fruitsforsale" table
+but with the content (the fruit column in this case) stored in front of the
+rowid and with all rows in content order.
+<a href="#fig4">Figure 4</a> gives a logical view of the Idx1 index.
+The "fruit" column is the primary key used to order the elements of the
+table and the "rowid" is the secondary key used to break the tie when
+two or more rows have the same "fruit". In the example, the rowid
+has to be used as a tie-breaker for the "Orange" rows.
+Notice that since the rowid
+is always unique over all elements of the original table, the composite key
+of "fruit" followed by "rowid" will be unique over all elements of the index.
+</p>
+
+<a name='fig4'></a>
+<p><center>
+<img src="images/qp/idx1.gif" alt="figure 4"><br>
+Figure 4: An Index On The Fruit Column
+</center></p>
+
+
+<p>
+This new index can be used to implement a faster algorithm for the
+original "Price of Peaches" query.
+</p>
+
+<center><table><tr><td><pre>
+SELECT price FROM fruitsforsale WHERE fruit='Peach';
+</pre></table></center>
+
+
+<p>
+The query starts by doing a binary search on the Idx1 index for entries
+that have fruit='Peach'. SQLite can do this binary search on the Idx1 index
+but not on the original FruitsForSale table because the rows in Idx1 are sorted
+by the "fruit" column. Having found a row in the Idx1 index that has
+fruit='Peach', the database engine can extract the rowid for that row.
+Then the database engines does a second binary search
+on the original FruitsForSale table to find the
+original row that contains fruit='Peach'.
+From the row in the FruitsForSale table,
+SQLite can then extract the value of the price column.
+This procedure is illustrated by <a href="#fig5">figure 5</a>.
+</p>
+
+<a name='fig5'></a>
+<p><center>
+<img src="images/qp/idx1lu1.gif" alt="figure 5"><br>
+Figure 5: Indexed Lookup For The Price Of Peaches
+</center></p>
+
+
+<p>
+SQLite has to do two binary searches to find the price of peaches using
+the method show above. But for a table with a large number of rows, this
+is still much faster than doing a full table scan.
+</p>
+
+<h2 id="_multiple_result_rows"><span>1.4. </span> Multiple Result Rows</h2>
+
+<p>
+In the previous query the fruit='Peach' constraint narrowed the result
+down to a single row. But the same technique works even if multiple
+rows are obtained. Suppose we looked up the price of Oranges instead of
+Peaches:
+</p>
+
+<center><table><tr><td><pre>
+SELECT price FROM fruitsforsale WHERE fruit='Orange'
+</pre></table></center>
+<a name='fig6'></a>
+<p><center>
+<img src="images/qp/idx1lu2.gif" alt="figure 6"><br>
+Figure 6: Indexed Lookup For The Price Of Oranges
+</center></p>
+
+
+<p>
+In this case, SQLite still does a single binary search to find the first
+entry of the index where fruit='Orange'. Then it extracts the rowid from
+the index and uses that rowid to lookup the original table entry via
+binary search and output the price from the original table. But instead
+of quitting, the database engine then advances to the next row of index
+to repeat the process for next fruit='Orange' entry. Advancing to the
+next row of an index (or table) is much less costly than doing a binary
+search since the next row is often located on the same database page as
+the current row. In fact, the cost of advancing to the next row is so
+cheap in comparison to a binary search that we usually ignore it. So
+our estimate for the total cost of this query is 3 binary searches.
+If the number of rows of output is K and the number of rows in the table
+is N, then in general the cost of doing the query is proportional
+to (K+1)*logN.
+</p>
+
+<h2 id="_multiple_and_connected_where_clause_terms"><span>1.5. </span> Multiple AND-Connected WHERE-Clause Terms</h2>
+
+<p>
+Next, suppose that you want to look up the price of not just any orange,
+but specifically California-grown oranges. The appropriate query would
+be as follows:
+</p>
+
+<center><table><tr><td><pre>
+SELECT price FROM fruitsforsale WHERE fruit='Orange' AND state='CA'
+</pre></table></center>
+<a name='fig7'></a>
+<p><center>
+<img src="images/qp/idx1lu3.gif" alt="figure 7"><br>
+Figure 7: Indexed Lookup Of California Oranges
+</center></p>
+
+
+<p>
+One approach to this query is to use the fruit='Orange' term of the WHERE
+clause to find all rows dealing with oranges, then filter those rows
+by rejecting any that are from states other than California. This
+process is shown by <a href="#fig7">figure 7</a> above. This is a perfectly
+reasonable approach in most cases. Yes, the database engine did have
+to do an extra binary search for the Florida orange row that was
+later rejected, so it was not as efficient as we might hope, though
+for many applications it is efficient enough.
+</p>
+
+<p>
+Suppose that in addition to the index on "fruit" there was also
+an index on "state".
+</p>
+
+<center><table><tr><td><pre>
+CREATE INDEX Idx2 ON fruitsforsale(state);
+</pre></table></center>
+<a name='fig8'></a>
+<p><center>
+<img src="images/qp/idx2.gif" alt="figure 8"><br>
+Figure 8: Index On The State Column
+</center></p>
+
+
+<p>
+The "state" index works just like the "fruit" index in that it is a
+new table with an extra column in front of the rowid and sorted by
+that extra column as the primary key. The only difference is that
+in Idx2, the first column is "state" instead of "fruit" as it is with
+Idx1. In our example data set, there is more redundancy in the "state"
+column and so they are more duplicate entries. The ties are still
+resolved using the rowid.
+</p>
+
+<p>
+Using the new Idx2 index on "state", SQLite has another option for
+lookup up the price of California oranges: it can look up every row
+that contains fruit from California and filter out those rows that
+are not oranges.
+</p>
+
+<a name='fig9'></a>
+<p><center>
+<img src="images/qp/idx2lu1.gif" alt="figure 9"><br>
+Figure 9: Indexed Lookup Of California Oranges
+</center></p>
+
+
+<p>
+Using Idx2 instead of Idx1 causes SQLite to examine a different set of
+rows, but it gets the same answer in the end (which is very important -
+remember that indices should never change the answer, only help SQLite to
+get to the answer more quickly) and it does the same amount of work.
+So the Idx2 index did not help performance in this case.
+</p>
+
+<p>
+The last two queries take the same amount of time, in our example.
+So which index, Idx1 or Idx2, will SQLite choose? If the
+<a href="lang_analyze.html">ANALYZE</a> command has been run on the database, so that SQLite has
+had an opportunity to gather statistics about the available indices,
+then SQLite will know that the Idx1 index usually narrows the search
+down to a single item (our example of fruit='Orange' is the exception
+to this rule) whereas the Idx2 index will normally only narrow the
+search down to two rows. So, if all else is equal, SQLite will
+choose Idx1 with the hope of narrowing the search to as small
+a number of rows as possible. This choice is only possible because
+of the statistics provided by <a href="lang_analyze.html">ANALYZE</a>. If <a href="lang_analyze.html">ANALYZE</a> has not been
+run then the choice of which index to use is arbitrary.
+</p>
+
+<h2 id="_multi_column_indices"><span>1.6. </span> Multi-Column Indices</h2>
+
+<p>
+To get the maximum performance out of a query with multiple AND-connected
+terms in the WHERE clause, you really want a multi-column index with
+columns for each of the AND terms. In this case we create a new index
+on the "fruit" and "state" columns of FruitsForSale:
+</p>
+
+<center><table><tr><td><pre>
+CREATE INDEX Idx3 ON FruitsForSale(fruit, state);
+</pre></table></center>
+<a name='fig10'></a>
+<p><center>
+<img src="images/qp/idx3.gif" alt="figure 1"><br>
+Figure 1: A Two-Column Index
+</center></p>
+
+
+<p>
+A multi-column index follows the same pattern as a single-column index;
+the indexed columns are added in front of the rowid. The only difference
+is that now multiple columns are added. The left-most column is the
+primary key used for ordering the rows in the index. The second column is
+used to break ties in the left-most column. If there were a third column,
+it would be used to break ties for the first two columns. And so forth for
+all columns in the index. Because rowid is guaranteed
+to be unique, every row of the index will be unique even if all of the
+content columns for two rows are the same. That case does not happen
+in our sample data, but there is one case (fruit='Orange') where there
+is a tie on the first column which must be broken by the second column.
+</p>
+
+<p>
+Given the new multi-column Idx3 index, it is now possible for SQLite
+to find the price of California oranges using only 2 binary searches:
+</p>
+
+<center><table><tr><td><pre>
+SELECT price FROM fruitsforsale WHERE fruit='Orange' AND state='CA'
+</pre></table></center>
+<a name='fig11'></a>
+<p><center>
+<img src="images/qp/idx3lu1.gif" alt="figure 11"><br>
+Figure 11: Lookup Using A Two-Column Index
+</center></p>
+
+
+<p>
+With the Idx3 index on both columns that are constrained by the WHERE clause,
+SQLite can do a single binary search against Idx3 to find the one rowid
+for California oranges, then do a single binary search to find the price
+for that item in the original table. There are no dead-ends and no
+wasted binary searches. This is a more efficient query.
+</p>
+
+<p>
+Note that Idx3 contains all the same information as the original
+<a href="#fig3">Idx1</a>. And so if we have Idx3, we do not really need Idx1
+any more. The "price of peaches" query can be satisfied using Idx3
+by simply ignoring the "state" column of Idx3:
+</p>
+
+<center><table><tr><td><pre>
+SELECT price FROM fruitsforsale WHERE fruit='Peach'
+</pre></table></center>
+<a name='fig12'></a>
+<p><center>
+<img src="images/qp/idx3lu2.gif" alt="figure 12"><br>
+Figure 12: Single-Column Lookup On A Multi-Column Index
+</center></p>
+
+
+<p>
+Hence, a good rule of thumb is that your database schema should never
+contain two indices where one index is a prefix of the other. Drop the
+index with fewer columns. SQLite will still be able to do efficient
+lookups with the longer index.
+</p>
+
+<a name="covidx"></a>
+
+<h2 id="_covering_indexes"><span>1.7. </span> Covering Indexes</h2>
+
+<p>
+The "price of California oranges" query was made more efficient through
+the use of a two-column index. But SQLite can do even better with a
+three-column index that also includes the "price" column:
+</p>
+
+<center><table><tr><td><pre>
+CREATE INDEX Idx4 ON FruitsForSale(fruit, state, price);
+</pre></table></center>
+<a name='fig13'></a>
+<p><center>
+<img src="images/qp/idx4.gif" alt="figure 13"><br>
+Figure 13: A Covering Index
+</center></p>
+
+
+<p>
+This new index contains all the columns of the original FruitsForSale table that
+are used by the query - both the search terms and the output. We call
+this a "covering index". Because all of the information needed is in
+the covering index, SQLite never needs to consult the original table
+in order to find the price.
+</p>
+
+<center><table><tr><td><pre>
+SELECT price FROM fruitsforsale WHERE fruit='Orange' AND state='CA';
+</pre></table></center>
+<a name='fig14'></a>
+<p><center>
+<img src="images/qp/idx4lu1.gif" alt="figure 14"><br>
+Figure 14: Query Using A Covering Index
+</center></p>
+
+
+<p>
+Hence, by adding extra "output" columns onto the end of an index, one
+can avoid having to reference the original table and thereby
+cut the number of binary searches for a query in half. This is a
+constant-factor improvement in performance (roughly a doubling of
+the speed). But on the other hand, it is also just a refinement;
+A two-fold performance increase is not nearly as dramatic as the
+one-million-fold increase seen when the table was first indexed.
+And for most queries, the difference between 1 microsecond and
+2 microseconds is unlikely to be noticed.
+</p>
+
+<a name="or_in_where"></a>
+
+<h2 id="_or_connected_terms_in_the_where_clause"><span>1.8. </span> OR-Connected Terms In The WHERE Clause</h2>
+
+<p>
+Multi-column indices only work if the constraint terms in the WHERE
+clause of the query are connected by AND.
+So Idx3 and Idx4 are helpful when the search is for items that
+are both Oranges and grown in California, but neither index would
+be that useful if we wanted all items that were either oranges
+<i>or</i> are grown in California.
+</p>
+
+<center><table><tr><td><pre>
+SELECT price FROM FruitsForSale WHERE fruit='Orange' OR state='CA';
+</pre></table></center>
+
+
+<p>
+When confronted with OR-connected terms in a WHERE clause, SQLite
+examines each OR term separately and tries to use an index to
+find the rowids associated with each term.
+It then takes the union of the resulting rowid sets to find
+the end result. The following figure illustrates this process:
+</p>
+
+<a name='fig15'></a>
+<p><center>
+<img src="images/qp/orquery.gif" alt="figure 15"><br>
+Figure 15: Query With OR Constraints
+</center></p>
+
+
+<p>
+The diagram above implies that SQLite computes all of the rowids first
+and then combines them with a union operation before starting to do
+rowid lookups on the original table. In reality, the rowid lookups
+are interspersed with rowid computations. SQLite uses one index at
+a time to find rowids while remembering which rowids it has seen
+before so as to avoid duplicates. That is just an implementation
+detail, though. The diagram, while not 100% accurate, provides a good
+overview of what is happening.
+</p>
+
+<p>
+In order for the OR-by-UNION technique shown above to be useful, there
+must be an index available that helps resolve every OR-connected term
+in the WHERE clause. If even a single OR-connected term is not indexed,
+then a full table scan would have to be done in order to find the rowids
+generated by the one term, and if SQLite has to do a full table scan, it
+might as well do it on the original table and get all of the results in
+a single pass without having to mess with union operations and follow-on
+binary searches.
+</p>
+
+<p>
+One can see how the OR-by-UNION technique could also be leveraged to
+use multiple indices on queries where the WHERE clause has terms connected
+by AND, by using an intersect operator in place of union. Many SQL
+database engines will do just that. But the performance gain over using
+just a single index is slight and so SQLite does not implement that technique
+at this time. However, a future version SQLite might be enhanced to support
+AND-by-INTERSECT.
+</p>
+
+<a name="sorting"></a>
+
+<h1 id="_sorting"><span>2. </span> Sorting</h1>
+
+<p>
+SQLite (like all other SQL database engines) can also use indices to
+satisfy the ORDER BY clauses in a query, in addition to expediting
+lookup. In other words, indices can be used to speed up sorting as
+well as searching.
+</p>
+
+<p>
+When no appropriate indices are available, a query with an ORDER BY
+clause must be sorted as a separate step. Consider this query:
+</p>
+
+<center><table><tr><td><pre>
+SELECT * FROM fruitsforsale ORDER BY fruit;
+</pre></table></center>
+
+
+<p>
+SQLite processes this by gathering all the output of query and then
+running that output through a sorter.
+</p>
+
+<a name='fig16'></a>
+<p><center>
+<img src="images/qp/obfruitnoidx.gif" alt="figure 16"><br>
+Figure 16: Sorting Without An Index
+</center></p>
+
+
+<p>
+If the number of output rows is K, then the time needed to sort is
+proportional to KlogK. If K is small, the sorting time is usually
+not a factor, but in a query such as the above where K==N, the time
+needed to sort can be much greater than the time needed to do a
+full table scan. Furthermore, the entire output is accumulated in
+temporary storage (which might be either in main memory or on disk,
+depending on various compile-time and run-time settings)
+which can mean that a lot of temporary storage is required to complete
+the query.
+</p>
+
+<h2 id="_sorting_by_rowid"><span>2.1. </span> Sorting By Rowid</h2>
+
+<p>
+Because sorting can be expensive, SQLite works hard to convert ORDER BY
+clauses into no-ops. If SQLite determines that output will
+naturally appear in the order specified, then no sorting is done.
+So, for example, if you request the output in rowid order, no sorting
+will be done:
+</p>
+
+<center><table><tr><td><pre>
+SELECT * FROM fruitsforsale ORDER BY rowid;
+</pre></table></center>
+<a name='fig17'></a>
+<p><center>
+<img src="images/qp/obrowid.gif" alt="figure 17"><br>
+Figure 17: Sorting By Rowid
+</center></p>
+
+
+<p>
+You can also request a reverse-order sort like this:
+</p>
+
+<center><table><tr><td><pre>
+SELECT * FROM fruitsforsale ORDER BY rowid DESC;
+</pre></table></center>
+
+
+<p>
+SQLite will still omit the sorting step. But in order for output to
+appear in the correct order, SQLite will do the table scan starting at
+the end and working toward the beginning, rather than starting at the
+beginning and working toward the end as shown in
+<a href="#fig17">figure 17</a>.
+</p>
+
+<h2 id="_sorting_by_index"><span>2.2. </span> Sorting By Index</h2>
+
+<p>
+Of course, ordering the output of a query by rowid is seldom useful.
+Usually one wants to order the output by some other column.
+</p>
+
+<p>
+If an index is available on the ORDER BY column, that index can be used
+for sorting. Consider the request for all items sorted by "fruit":
+</p>
+
+<center><table><tr><td><pre>
+SELECT * FROM fruitsforsale ORDER BY fruit;
+</pre></table></center>
+
+
+<a name='fig18'></a>
+<p><center>
+<img src="images/qp/obfruitidx1.gif" alt="figure 18"><br>
+Figure 18: Sorting With An Index
+</center></p>
+
+
+<p>
+The Idx1 index is scanned from top to bottom (or from bottom to top if
+"ORDER BY fruit DESC" is used) in order to find the rowids for each item
+in order by fruit. Then for each rowid, a binary search is done to lookup
+and output that row. In this way, the output appears in the requested order
+without the need to gather the entire output and sort it using a separate step.
+</p>
+
+<p>
+But does this really save time? The number of steps in the
+<a href="#fig16">original indexless sort</a> is proportional to NlogN since
+that is how much time it takes to sort N rows. But when we use Idx1 as
+shown here, we have to do N rowid lookups which take logN time each, so
+the total time of NlogN is the same!
+</p>
+
+<p>
+SQLite uses a cost-based query planner. When there are two or more ways
+of solving the same query, SQLite tries to estimate the total amount of
+time needed to run the query using each plan, and then uses the plan with
+the lowest estimated cost. A cost is computed mostly from the estimated
+time, and so this case could go either way depending on the table size and
+what WHERE clause constraints were available, and so forth. But generally
+speaking, the indexed sort would probably be chosen, if for no other
+reason, because it does not need to accumulate the entire result set in
+temporary storage before sorting and thus uses much less temporary storage.
+</p>
+
+<h2 id="_sorting_by_covering_index"><span>2.3. </span> Sorting By Covering Index</h2>
+
+<p>
+If a covering index can be used for a query, then the multiple rowid lookups
+can be avoided and the cost of the query drops dramatically.
+</p>
+
+<a name='fig19'></a>
+<p><center>
+<img src="images/qp/obfruitidx4.gif" alt="figure 19"><br>
+Figure 19: Sorting With A Covering Index
+</center></p>
+
+
+<p>
+With a covering index, SQLite can simply walk the index from one end to the
+other and deliver the output in time proportional to N and without having
+allocate a large buffer to hold the result set.
+</p>
+
+<h1 id="_searching_and_sorting_at_the_same_time"><span>3. </span> Searching And Sorting At The Same Time</h1>
+
+<p>
+The previous discussion has treated searching and sorting as separate
+topics. But in practice, it is often the case that one wants to search
+and sort at the same time. Fortunately, it is possible to do this
+using a single index.
+</p>
+
+<h2 id="_searching_and_sorting_with_a_multi_column_index"><span>3.1. </span> Searching And Sorting With A Multi-Column Index</h2>
+
+<p>
+Suppose we want to find the prices of all kinds of oranges sorted in
+order of the state where they are grown. The query is this:
+</p>
+
+<center><table><tr><td><pre>
+SELECT price FROM fruitforsale WHERE fruit='Orange' ORDER BY state
+</pre></table></center>
+
+
+<p>
+The query contains both a search restriction in the WHERE clause
+and a sort order in the ORDER BY clause. Both the search and the sort
+can be accomplished at the same time using the two-column index Idx3.
+</p>
+
+<a name='fig20'></a>
+<p><center>
+<img src="images/qp/fruitobstate0.gif" alt="figure 20"><br>
+Figure 20: Search And Sort By Multi-Column Index
+</center></p>
+
+
+<p>
+The query does a binary search on the index to find the subset of rows
+that have fruit='Orange'. (Because the fruit column is the left-most column
+of the index and the rows of the index are in sorted order, all such
+rows will be adjacent.) Then it scans the matching index rows from top to
+bottom to get the rowids for the original table, and for each rowid does
+a binary search on the original table to find the price.
+</p>
+
+<p>
+You will notice that there is no "sort" box anywhere in the above diagram.
+The ORDER BY clause of the query has become a no-op. No sorting has to be
+done here because the output order is by the state column and the state
+column also happens to be the first column after the fruit column in the
+index. So, if we scan entries of the index that have the same value for
+the fruit column from top to bottom, those index entries are guaranteed to
+be ordered by the state column.
+</p>
+
+<a name="srchsortcovidx"></a>
+
+<h2 id="_searching_and_sorting_with_a_covering_index"><span>3.2. </span> Searching And Sorting With A Covering Index</h2>
+
+<p>
+A <a href="queryplanner.html#covidx">covering index</a> can also be used to search and sort at the same time.
+Consider the following:
+</p>
+
+<center><table><tr><td><pre>
+SELECT * FROM fruitforsale WHERE fruit='Orange' ORDER BY state
+</pre></table></center>
+<a name='fig21'></a>
+<p><center>
+<img src="images/qp/fruitobstate.gif" alt="figure 21"><br>
+Figure 21: Search And Sort By Covering Index
+</center></p>
+
+
+<p>
+As before, SQLite does single binary search
+for the range of rows in the covering
+index that satisfy the WHERE clause, the scans that range from top to
+bottom to get the desired results.
+The rows that satisfy the WHERE clause are guaranteed to be adjacent
+since the WHERE clause is an equality constraint on the left-most
+column of the index. And by scanning the matching index rows from
+top to bottom, the output is guaranteed to be ordered by state since the
+state column is the very next column to the right of the fruit column.
+And so the resulting query is very efficient.
+</p>
+
+<p>
+SQLite can pull a similar trick for a descending ORDER BY:
+</p>
+
+<center><table><tr><td><pre>
+SELECT * FROM fruitforsale WHERE fruit='Orange' ORDER BY state DESC
+</pre></table></center>
+
+
+<p>
+The same basic algorithm is followed, except this time the matching rows
+of the index are scanned from bottom to top instead of from top to bottom,
+so that the states will appear in descending order.
+</p>
+
+<a name="partialsort"></a>
+
+<h2 id="_partial_sorting_using_an_index_a_k_a_block_sorting_"><span>3.3. </span> Partial Sorting Using An Index (a.k.a. Block Sorting)</h2>
+
+<p>
+Sometimes only part of an ORDER BY clause can be satisfied using indexes.
+Consider, for example, the following query:
+</p>
+
+<center><table><tr><td><pre>
+SELECT * FROM fruitforsale ORDER BY fruit, price
+</pre></table></center>
+
+
+<p>
+If the covering index is used for the scan, the "fruit" column will appear
+naturally in the correct order, but when there are two or more rows with
+the same fruit, the price might be out of order. When this occurs, SQLite
+does many small sorts, one sort for each distinct value of fruit, rather
+than one large sort. Figure 22 below illustrates the concept.
+</p>
+
+<a name='fig22'></a>
+<p><center>
+<img src="images/qp/partial-sort.gif" alt="figure 22"><br>
+Figure 22: Partial Sort By Index
+</center></p>
+
+
+<p>
+In the example, instead of a single sort of 7 elements, there
+are 5 sorts of one-element each and 1 sort of 2 elements for the
+case of fruit=='Orange'.
+
+</p><p>
+The advantages of doing many smaller sorts instead of a single large sort
+are:
+</p><ol>
+<li>Multiple small sorts collectively use fewer CPU cycles than a single
+ large sort.
+</li><li>Each small sort is run independently, meaning that much less information
+ needs to be kept in temporary storage at any one time.
+</li><li>Those columns of the ORDER BY that are already in the correct order
+ due to indexes can be omitted from the sort key, further reducing
+ storage requirements and CPU time.
+</li><li>Output rows can be returned to the application as each small sort
+ completes, and well before the table scan is complete.
+</li><li>If a LIMIT clause is present, it might be possible to avoid scanning
+ the entire table.
+</li></ol>
+
+<p>Because of these advantages, SQLite always tries to do a partial sort using an
+index even if a complete sort by index is not possible.</p>
+
+<h1 id="_without_rowid_tables"><span>4. </span> WITHOUT ROWID tables</h1>
+
+<p>
+The basic principals described above apply to both ordinary rowid tables
+and <a href="withoutrowid.html">WITHOUT ROWID</a> tables.
+The only difference is that the rowid column that serves as the key for
+tables and that appears as the right-most term in indexes is replaced by
+the PRIMARY KEY.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/queryplanner.in?m=baee8e6b0dbeb0173">2022-10-26 13:30:36</a> UTC </small></i></p>
+
diff --git a/www/quickstart.html b/www/quickstart.html
new file mode 100644
index 0000000..6f2198d
--- /dev/null
+++ b/www/quickstart.html
@@ -0,0 +1,230 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite In 5 Minutes Or Less</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<p>Here is what you do to start experimenting with SQLite without having
+to do a lot of tedious reading and configuration:</p>
+
+<h2>Download The Code</h2>
+
+<ul>
+<li><p>Get a copy of the prebuilt binaries for your machine, or get a copy
+of the sources and compile them yourself. Visit
+the <a href="download.html">download</a> page for more information.</p></li>
+</ul>
+
+<h2>Create A New Database</h2>
+
+<ul>
+<li><p>At a shell or DOS prompt, enter: "<b>sqlite3 test.db</b>". This will
+create a new database named "test.db". (You can use a different name if
+you like.)</p></li>
+<li><p>Enter SQL commands at the prompt to create and populate the
+new database.</p></li>
+<li><p>Additional documentation is available <a href="cli.html">here</a>.</li>
+</ul>
+
+<h2>Write Programs That Use SQLite</h2>
+
+<ul>
+<li><p>Below is a simple
+<a href="http://www.tcl-lang.org">TCL program</a> that demonstrates how to use
+the TCL interface to SQLite. The program executes the SQL statements
+given as the second argument on the database defined by the first
+argument. The commands to watch for are the <b>sqlite3</b> command
+on line 7 which opens an SQLite database and creates
+a new object named "<b>db</b>" to access that database, the
+use of the <a href="tclsqlite.html#eval">eval method</a> on the <b>db</b> object on line 8 to run
+SQL commands against the database, and the closing of the database connection
+on the last line of the script.</p>
+
+<blockquote><pre>
+01 #!/usr/bin/tclsh
+02 if {$argc!=2} {
+03 puts stderr "Usage: %s DATABASE SQL-STATEMENT"
+04 exit 1
+05 }
+06 package require sqlite3
+07 <b>sqlite3</b> db &#91;lindex $argv 0]
+08 <b>db</b> eval &#91;lindex $argv 1] x {
+09 foreach v $x(*) {
+10 puts "$v = $x($v)"
+11 }
+12 puts ""
+13 }
+14 <b>db</b> close
+</pre></blockquote>
+</li>
+
+<li><p>Below is a simple C program that demonstrates how to use
+the <a href="c3ref/intro.html">C/C++ interface</a> to SQLite. The name of a database is given by
+the first argument and the second argument is one or more SQL statements
+to execute against the database. The function calls to pay attention
+to here are the call to <a href="c3ref/open.html">sqlite3_open()</a> on line 22 which opens
+the database, <a href="c3ref/exec.html">sqlite3_exec()</a> on line 28 that executes SQL
+commands against the database, and <a href="c3ref/close.html">sqlite3_close()</a> on line 33
+that closes the database connection.</p>
+
+<p>See also the <a href="cintro.html">Introduction To The SQLite C/C++ Interface</a> for
+an introductory overview and roadmap to the dozens of SQLite interface
+functions.</p>
+
+<blockquote><pre>
+01 #include &lt;stdio.h&gt;
+02 #include &lt;sqlite3.h&gt;
+03
+04 static int callback(void *NotUsed, int argc, char **argv, char **azColName){
+05 int i;
+06 for(i=0; i&lt;argc; i++){
+07 printf("%s = %s\n", azColName&#91;i], argv&#91;i] ? argv&#91;i] : "NULL");
+08 }
+09 printf("\n");
+10 return 0;
+11 }
+12
+13 int main(int argc, char **argv){
+14 <b>sqlite3</b> *db;
+15 char *zErrMsg = 0;
+16 int rc;
+17
+18 if( argc!=3 ){
+19 fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv&#91;0]);
+20 return(1);
+21 }
+22 rc = <b>sqlite3_open</b>(argv&#91;1], &db);
+23 if( rc ){
+24 fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
+25 <b>sqlite3_close</b>(db);
+26 return(1);
+27 }
+28 rc = <b>sqlite3_exec</b>(db, argv&#91;2], callback, 0, &zErrMsg);
+29 if( rc!=SQLITE_OK ){
+30 fprintf(stderr, "SQL error: %s\n", zErrMsg);
+31 <b>sqlite3_free</b>(zErrMsg);
+32 }
+33 <b>sqlite3_close</b>(db);
+34 return 0;
+35 }
+</pre></blockquote>
+<p>See the <a href="howtocompile.html">How To Compile SQLite</a> document for instructions and hints on
+how to compile the program shown above.
+</li>
+</ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/quickstart.in?m=314fee0021e3027a4">2016-04-04 12:21:30</a> UTC </small></i></p>
+
diff --git a/www/quirks.html b/www/quirks.html
new file mode 100644
index 0000000..d46e7ca
--- /dev/null
+++ b/www/quirks.html
@@ -0,0 +1,534 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Quirks, Caveats, and Gotchas In SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Quirks, Caveats, and Gotchas In SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#sqlite_is_embedded_not_client_server">2. SQLite Is Embedded, Not Client-Server</a></div>
+<div class="fancy-toc1"><a href="#flexible_typing">3. Flexible Typing</a></div>
+<div class="fancy-toc2"><a href="#no_separate_boolean_datatype">3.1. No Separate BOOLEAN Datatype</a></div>
+<div class="fancy-toc2"><a href="#no_separate_datetime_datatype">3.2. No Separate DATETIME Datatype</a></div>
+<div class="fancy-toc2"><a href="#the_datatype_is_optional">3.3. The datatype is optional</a></div>
+<div class="fancy-toc1"><a href="#foreign_key_enforcement_is_off_by_default">4. Foreign Key Enforcement Is Off By Default</a></div>
+<div class="fancy-toc1"><a href="#primary_keys_can_sometimes_contain_nulls">5. PRIMARY KEYs Can Sometimes Contain NULLs</a></div>
+<div class="fancy-toc1"><a href="#aggregate_queries_can_contain_non_aggregate_result_columns_that_are_not_in_the_group_by_clause">6. Aggregate Queries Can Contain Non-Aggregate Result Columns
+That Are Not In The GROUP BY Clause</a></div>
+<div class="fancy-toc1"><a href="#does_not_do_full_unicode_case_folding_by_default">7. Does Not Do Full Unicode Case Folding By Default</a></div>
+<div class="fancy-toc1"><a href="#double_quoted_string_literals_are_accepted">8. Double-quoted String Literals Are Accepted</a></div>
+<div class="fancy-toc1"><a href="#keywords_can_often_be_used_as_identifiers">9. Keywords Can Often Be Used As Identifiers</a></div>
+<div class="fancy-toc1"><a href="#dubious_sql_is_allowed_without_any_error_or_warning">10. Dubious SQL Is Allowed Without Any Error Or Warning</a></div>
+<div class="fancy-toc1"><a href="#autoincrement_does_not_work_the_same_as_mysql">11. AUTOINCREMENT Does Not Work The Same As MySQL</a></div>
+<div class="fancy-toc1"><a href="#nul_characters_are_allowed_in_text_strings">12. NUL Characters Are Allowed In Text Strings</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+The SQL language is a "standard".
+Even so, no two SQL database engines work exactly alike.
+Every SQL implementation has it own peculiarities and oddities,
+and SQLite is no exception to this rule.
+
+</p><p>
+This document strives to highlight the principal differences
+between SQLite and other SQL implementations, as an aid to developers
+that are porting to or from SQLite or who are trying to build a
+system that works across multiple database engines.
+
+</p><p>
+If you are an SQLite user whose has stumbled over some quirk of
+SQLite that is not mentioned here, please let the developers know
+by posting a brief message on the
+<a href="https://sqlite.org/forum/forum">SQLite Forum</a>.
+
+</p><h1 id="sqlite_is_embedded_not_client_server"><span>2. </span>SQLite Is Embedded, Not Client-Server</h1>
+
+<p>
+Whenever comparing SQLite to other SQL database engines like
+SQL Server, PostgreSQL, MySQL, or Oracle, it is important first of all
+to realize that SQLite is not intended as a replacement or competitor to
+any of those systems. SQLite is <a href="serverless.html">serverless</a>. There is no separate
+server process that manages the database. An application interacts
+with the database engine using function calls, not by sending messages
+to a separate process or thread.
+
+</p><p>
+The fact that SQLite is embedded and <a href="serverless.html">serverless</a> instead of being
+client/server is a feature, not a bug.
+
+</p><p>
+Client/server databases like MySQL, PostgreSQL, SQL Server, Oracle, and
+others are an important component of modern systems.
+These systems solve an important problem.
+But SQLite solves a different problem.
+Both SQLite and client/server databases have their role.
+Developers who are comparing SQLite against other SQL database engines need
+to clearly understand this distinction.
+
+</p><p>
+See the <a href="whentouse.html">Appropriate Uses For SQLite</a> document for additional information.
+
+</p><h1 id="flexible_typing"><span>3. </span>Flexible Typing</h1>
+
+<p>
+SQLite is flexible with regard to datatypes. Datatypes are advisory
+rather than mandatory.
+
+</p><p>
+Some commentators say that SQLite is "weakly typed" and that other
+SQL databases are "strongly typed". We consider these terms to be
+inaccurate and even pejorative. We prefer to say that SQLite is
+"flexibly typed" and that other SQL database engines are
+"rigidly typed".
+
+</p><p>
+See the <a href="datatype3.html">Datatypes in SQLite</a> document for a detailed
+discussion of the type system in SQLite.
+
+</p><p>
+The key point is that SQLite is very forgiving of the type of data that
+you put into the database. For example, if a column has a datatype of
+"INTEGER" and the application inserts a text string into that column,
+SQLite will first try to convert the text string into an integer, just like
+every other SQL database engine. Thus, if one inserts <b>'1234'</b> into
+an INTEGER column, that value is converted into an integer 1234 and stored.
+But, if you insert a non-numeric string like <b>'wxyz'</b> into an INTEGER
+column, unlike other SQL databases, SQLite does not throw an error. Instead,
+SQLite stores the actual string value in the column.
+
+</p><p>
+Similarly, SQLite allows you to store a 2000-character string into a
+column of type VARCHAR(50). Other SQL implementations would either throw
+an error or truncate the string. SQLite stores the entire 2000-character
+string with no loss of information and without complaint.
+
+</p><p>
+Where this ends up causing problems is when developers do some initial
+coding work using SQLite and get their application working, but then try
+to convert to another database like PostgreSQL or SQL Server for deployment.
+If the application is initially taking advantage of SQLite's flexible typing,
+then it will fail when moved to another database that uses a more rigid
+and unforgiving type enforcement policy.
+
+</p><p>
+<a href="flextypegood.html">Flexible typing is a feature</a> of SQLite, not a bug. Flexible typing
+is about freedom.
+Nevertheless, we recognize that this feature does sometimes cause
+confusion for developers who are accustomed to working with
+other databases that are more strict with regard to data type rules.
+In retrospect, perhaps it would have been less confusing if SQLite had merely
+implemented an ANY datatype so that developers could explicitly state
+when they wanted to use flexible typing, rather than making flexible
+typing the default.
+As an accommodation for those who expect rigid typing, SQLite version 3.37.0
+(2021-11-27) introduced the option of <a href="stricttables.html">STRICT tables</a>.
+These either impose
+the mandatory datatype constraints found in other SQL database engines,
+or allow the explicit ANY datatype to retain SQLite's flexible typing.
+
+</p><h2 id="no_separate_boolean_datatype"><span>3.1. </span>No Separate BOOLEAN Datatype</h2>
+
+<p>
+Unlike most other SQL implementations,
+SQLite does not have a separate BOOLEAN data type.
+Instead, TRUE and FALSE are (normally) represented as integers 1 and 0,
+respectively.
+This does not seem to cause many problems, as we seldom get complaints
+about it. But it is important to recognize.
+
+</p><p>
+Beginning with SQLite <a href="releaselog/3_23_0.html">version 3.23.0</a> (2018-04-02), SQLite also
+recognizes TRUE and FALSE keywords as aliases for integer values 1 and 0,
+respectively.
+This provides better compatibility with other SQL implementations.
+But for backwards compatibility, if there are columns named TRUE or
+FALSE, then the keywords are treated as identifiers referencing those
+columns, rather than BOOLEAN literals.
+
+</p><h2 id="no_separate_datetime_datatype"><span>3.2. </span>No Separate DATETIME Datatype</h2>
+
+<p>
+SQLite has no DATETIME datatype.
+Instead, dates and times can be stored in any of these ways:
+
+</p><ul>
+<li> As a TEXT string in the ISO-8601 format. Example: '2018-04-02 12:13:46'.
+</li><li> As an INTEGER number of seconds since 1970 (also known as "unix time").
+</li><li> As a REAL value that is the fractional
+ <a href="https://en.wikipedia.org/wiki/Julian_day">Julian day number</a>.
+</li></ul>
+
+<p>
+The built-in <a href="lang_datefunc.html">date and time functions</a> of SQLite understand date/times in
+all of the formats above, and can freely change between them.
+Which format you use, is entirely up to your application.
+
+</p><h2 id="the_datatype_is_optional"><span>3.3. </span>The datatype is optional</h2>
+
+<p>
+Because SQLite is flexible and forgiving with regard to datatypes,
+table columns can be created that have no specified datatype at all.
+For example:
+</p><div class="codeblock"><pre>CREATE TABLE t1(a,b,c,d);
+</pre></div>
+<p>The table "t1" has four columns "a", "b", "c", and "d" that have
+no particular datatype assigned. You can store anything you want in
+any of those columns.</p>
+
+<h1 id="foreign_key_enforcement_is_off_by_default"><span>4. </span>Foreign Key Enforcement Is Off By Default</h1>
+
+<p>SQLite has parsed foreign key constraints for time out of mind,
+but added the ability to actually enforce those constraints much later,
+with <a href="releaselog/3_6_19.html">version 3.6.19</a> (2009-10-14). By the time foreign key constraint
+enforcement was added, there were already countless millions of databases
+in circulation that contained foreign key constraints, some of which
+were not correct. To avoid breaking those legacy databases, foreign key
+constraint enforcement is turned off by default in SQLite.
+
+</p><p>Applications can activate foreign key enforcement at run-time using
+the <a href="pragma.html#pragma_foreign_keys">PRAGMA foreign_keys</a> statement. Or, foreign key enforcement can
+be activated at compile-time using the
+<a href="compile.html#default_foreign_keys">-DSQLITE_DEFAULT_FOREIGN_KEYS=1</a> compile-time option.
+
+</p><h1 id="primary_keys_can_sometimes_contain_nulls"><span>5. </span>PRIMARY KEYs Can Sometimes Contain NULLs</h1>
+
+<p>
+Usually (the exceptions are <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> tables and
+<a href="withoutrowid.html">WITHOUT ROWID</a> tables) a PRIMARY KEY in an SQLite table is really
+the same as a UNIQUE constraint. Due to an historical oversight,
+the column values of such a PRIMARY KEY are allowed to be NULL.
+This is a bug, but by the time the problem was discovered there
+where so many databases in circulation that depended on the bug that
+the decision was made to support the buggy behavior moving forward.
+</p><p>
+The value of an <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column must always be a
+non-NULL integer. The PRIMARY KEY columns of a <a href="withoutrowid.html">WITHOUT ROWID</a>
+table are also required to be non-NULL.
+
+</p><h1 id="aggregate_queries_can_contain_non_aggregate_result_columns_that_are_not_in_the_group_by_clause"><span>6. </span>Aggregate Queries Can Contain Non-Aggregate Result Columns
+That Are Not In The GROUP BY Clause</h1>
+
+<p>
+In most SQL implementations, output columns of an aggregate query
+may only reference aggregate functions or columns named in the
+GROUP BY clause. It does not make good sense to reference an ordinary
+column in an aggregate query because each output row might be composed
+from two or more rows in the input table(s).
+
+</p><p>
+SQLite does not enforce this restriction.
+The output columns from an aggregate query can be arbitrary expressions
+that include columns not found in GROUP BY clause.
+This feature has two uses:
+
+</p><ol>
+<li><p>
+With SQLite (but not any other SQL implementation that we know of) if
+an aggregate query contains a single min() or max() function, then the
+values of columns used in the output are taken from the row where
+the min() or max() value was achieved. If two or more rows have the
+same min() or max() value, then the columns values will be chosen arbitrarily
+from one of those rows.
+</p><p>
+For example to find the highest paid employee:
+</p><div class="codeblock"><pre>SELECT max(salary), first_name, last_name FROM employee;
+</pre></div>
+<p>
+In the query above, the values for the first_name and last_name columns
+will correspond to the row that satisfied the max(salary) condition.
+
+</p></li><li><p>
+If a query contains no aggregate functions at all, then a GROUP BY
+clause can be added as a substitute for the DISTINCT ON clause. In other words,
+output rows are filtered so that only one row is shown for each distinct
+set of values in the GROUP BY clause. If two or more output rows would
+have otherwise had the same set of values for the GROUP BY columns, then
+one of the rows is chosen arbitrarily. (SQLite supports DISTINCT but not
+DISTINCT ON, whose functionality is provided instead by GROUP BY.)
+</p></li></ol>
+
+<h1 id="does_not_do_full_unicode_case_folding_by_default"><span>7. </span>Does Not Do Full Unicode Case Folding By Default</h1>
+
+<p>
+SQLite does not know about the upper-case/lower-case distinction
+for all unicode characters. SQL functions like
+upper() and lower() only work on ASCII characters. There are two
+reasons for this:
+</p><ol>
+<li> Though stable now, when SQLite was first designed, the rules for
+ unicode case folding were still in flux. That means that the
+ behavior might have changed with each new unicode release, disrupting
+ applications and corrupting indexes in the process.
+</li><li> The tables necessary to do full and proper unicode case folding are
+ larger than the whole SQLite library.
+</li></ol>
+<p>
+Full unicode case folding is supported in SQLite if it is compiled
+with the <a href="compile.html#enable_icu">-DSQLITE_ENABLE_ICU</a> option and linked against the
+<a href="http://site.icu-project.org/">International Components for Unicode</a>
+library.
+
+<a name="dblquote"></a>
+
+</p><h1 id="double_quoted_string_literals_are_accepted"><span>8. </span>Double-quoted String Literals Are Accepted</h1>
+
+<p>
+The SQL standard requires double-quotes around identifiers
+and single-quotes around string literals. For example:
+</p><ul>
+<li> <tt>"this is a legal SQL column name"</tt>
+</li><li> <tt>'this is an SQL string literal'</tt>
+</li></ul>
+<p>
+SQLite accepts both of the above. But, in an effort to be compatible
+with MySQL 3.x (which was one of the most widely used RDBMSes
+when SQLite was first being designed) SQLite will also interpret
+a double-quotes string as
+string literal if it does not match any valid identifier.
+</p><p>
+This misfeature means that a misspelled double-quoted
+identifier will be interpreted as a string literal, rather than generating
+an error.
+It also lures developers who are new to the SQL language into the
+bad habit of using double-quoted string literals when they
+really need to learn to use the correct single-quoted string literal form.
+</p><p>
+In hindsight, we should not have tried to make SQLite accept MySQL 3.x
+syntax, and should have never allowed double-quoted string literals.
+However, there are countless applications that make use of
+double-quoted string literals and so we continue to support
+that capability to avoid breaking legacy.
+</p><p>
+As of SQLite 3.27.0 (2019-02-07) the use of a double-quoted
+string literal causes a warning message to be sent to the <a href="errlog.html">error log</a>.
+</p><p>
+As of SQLite 3.29.0 (2019-07-10) the use of double-quoted
+string literals can be disabled at run-time using the
+<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">SQLITE_DBCONFIG_DQS_DDL</a> and <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">SQLITE_DBCONFIG_DQS_DML</a> actions
+to <a href="c3ref/db_config.html">sqlite3_db_config()</a>. The default settings can be altered
+at compile-time using the <a href="compile.html#dqs">-DSQLITE_DQS=<i>N</i></a> compile-time
+option. Application developers are encouraged to compile using
+-DSQLITE_DQS=0 in order to disable the double-quoted string literal
+misfeature by default. If that is not possible, then disable
+double-quoted string literals for individual database connections
+using C-code like this:
+</p><blockquote><pre>
+sqlite3_db_config(db, SQLITE_DBCONFIG_DQS_DDL, 0, (void*)0);
+sqlite3_db_config(db, SQLITE_DBCONFIG_DQS_DML, 0, (void*)0);
+</pre></blockquote>
+<p>Or, if double-quoted string literals are disabled by default, but need
+to be selectively enabled for some historical database connections,
+that can be done using the same C-code as shown above except with the
+third parameter changed from 0 to 1.
+
+</p><h1 id="keywords_can_often_be_used_as_identifiers"><span>9. </span>Keywords Can Often Be Used As Identifiers</h1>
+
+<p>
+The SQL language is rich in keywords.
+Most SQL implementations do not allow keywords to be used as identifiers
+(names of tables or columns) unless they are enclosed in double-quotes.
+But SQLite is more flexible. Many keywords can be used as identifiers without
+needing to be quoted, as long as those keywords are used in a context where
+it is clear that they are intended to be an identifier.
+</p><p>
+For example, the following statement is valid in SQLite:
+</p><div class="codeblock"><pre>CREATE TABLE union(true INT, with BOOLEAN);
+</pre></div>
+<p>
+The same SQL statement will fail on every other SQL implementation that
+we know of due to the use of keywords "union", "true", and "with" as
+identifiers.
+</p><p>
+The ability to use keywords as identifiers promotes backwards compatibility.
+As new keywords are added, legacy schemas that just happen to use those
+keywords as table or column names continue to work. However, the ability
+to use a keyword as an identifier sometimes leads to surprising outcomes.
+For example:
+</p><div class="codeblock"><pre>CREATE TRIGGER AFTER INSERT ON tableX BEGIN
+ INSERT INTO tableY(b) VALUES(new.a);
+END;
+</pre></div>
+<p>The trigger created by the previous statement is named "AFTER"
+and it is a "BEFORE" trigger. The "AFTER" token is used as an identifier
+instead of as a keyword, as that is the only way to parse the statement.
+Another example:
+</p><div class="codeblock"><pre>CREATE TABLE tableZ(INTEGER PRIMARY KEY);
+</pre></div>
+<p>The tableZ table has a single column named "INTEGER". That column
+has no datatype specified, but it is the PRIMARY KEY.
+The column is <em>not</em> the <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> for the table because
+it has no datatype. The "INTEGER" token is used as an identifier for the
+column name, not as a datatype keyword.</p>
+
+<h1 id="dubious_sql_is_allowed_without_any_error_or_warning"><span>10. </span>Dubious SQL Is Allowed Without Any Error Or Warning</h1>
+
+<p>
+The original implementation of SQLite sought to follow
+<a href="https://en.wikipedia.org/wiki/Robustness_principle">Postel's Law</a> which
+states in part "Be liberal in what you accept".
+This used to be considered good design - that a system would accept
+dodgy inputs and try to do the best it could without complaining too much.
+But lately, people have come to realize that it is sometimes better to
+be strict in what you accept, so as to more easily find errors in the
+input.
+</p><p>
+
+</p><h1 id="autoincrement_does_not_work_the_same_as_mysql"><span>11. </span>AUTOINCREMENT Does Not Work The Same As MySQL</h1>
+
+<p>The <a href="autoinc.html">AUTOINCREMENT</a> feature in SQLite works differently than
+it does in MySQL. This often causes confusion for people who
+initially learned SQL on MySQL and then start using SQLite, and
+expect the two systems to work identically.
+
+</p><p>See the <a href="autoinc.html">SQLite AUTOINCREMENT documentation</a> for
+detailed instructions on what AUTOINCREMENT does and does not do
+in SQLite.
+
+</p><h1 id="nul_characters_are_allowed_in_text_strings"><span>12. </span>NUL Characters Are Allowed In Text Strings</h1>
+
+<p>NUL characters (ASCII code 0x00 and Unicode \u0000) may appear in
+the middle of strings in SQLite. This can lead to unexpected behavior.
+See the "<a href="nulinstr.html">NUL characters in strings</a>" document for further information.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/quirks.in?m=d8c33568dd5491a25">2022-11-16 22:21:04</a> UTC </small></i></p>
+
diff --git a/www/rbu.html b/www/rbu.html
new file mode 100644
index 0000000..c422466
--- /dev/null
+++ b/www/rbu.html
@@ -0,0 +1,765 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The RBU Extension</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The RBU Extension
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#the_rbu_extension">1. The RBU Extension</a></div>
+<div class="fancy-toc1"><a href="#rbu_updates">2. RBU Updates</a></div>
+<div class="fancy-toc2"><a href="#rbu_update_limitations">2.1. RBU Update Limitations</a></div>
+<div class="fancy-toc2"><a href="#preparing_an_rbu_update_file">2.2. Preparing an RBU Update File</a></div>
+<div class="fancy-toc3"><a href="#the_rbu_database_schema">2.2.1. The RBU Database Schema</a></div>
+<div class="fancy-toc3"><a href="#rbu_database_contents">2.2.2. RBU Database Contents</a></div>
+<div class="fancy-toc3"><a href="#using_rbu_with_fts3_4_tables">2.2.3. Using RBU with FTS3/4 Tables</a></div>
+<div class="fancy-toc3"><a href="#automatically_generating_rbu_updates_with_sqldiff">2.2.4. Automatically Generating RBU Updates with sqldiff</a></div>
+<div class="fancy-toc2"><a href="#rbu_update_c_c_programming">2.3. RBU Update C/C++ Programming</a></div>
+<div class="fancy-toc1"><a href="#rbu_vacuum">3. RBU Vacuum</a></div>
+<div class="fancy-toc2"><a href="#rbu_vacuum_limitations">3.1. RBU Vacuum Limitations</a></div>
+<div class="fancy-toc2"><a href="#rbu_vacuum_c_c_programming">3.2. RBU Vacuum C/C++ Programming</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+<h1 align="center" id="the_rbu_extension"><span>1. </span>The RBU Extension</h1>
+
+<p>The RBU extension is an add-on for SQLite designed for use with large
+SQLite database files on low-power devices at the edge of a network. RBU
+may be used for two separate tasks:
+
+</p><ul>
+ <li> <b>RBU Update operations</b>. An <a href="rbu.html#rbu_updates">RBU Update</a> is a bulk update of a
+ database file that may include many insert, update and delete
+ operations on one or more tables.
+ </li><li> <b>RBU Vacuum operations</b>. An <a href="rbu.html#rbu_vacuum">RBU Vacuum</a> optimizes and rebuilds an
+ entire database file, with results similar to SQLite's native VACUUM
+ command.
+</li></ul>
+
+<p>The acronym RBU stands for "Resumable Bulk Update".
+
+</p><p>Both of the RBU functions may be accomplished using SQLite's built-in
+SQL commands - RBU update via a series of <a href="lang_insert.html">INSERT</a>, <a href="lang_delete.html">DELETE</a> and
+<a href="lang_update.html">UPDATE</a> commands within a single transaction, and RBU vacuum by a single
+<a href="lang_vacuum.html">VACUUM</a> command. The RBU module provides the following advantages over
+these simpler approaches:
+
+
+</p><ol>
+<li><b>RBU may be more efficient</b>
+
+<p>The most efficient way to apply changes to a B-Tree (the data structure
+that SQLite uses to store each table and index on disk) is to make the
+changes in key order. But if an SQL table has one or more indexes, the key
+order for each index may be different from the main table and the other
+auxiliary indexes. As a result, when executing a series of <a href="lang_insert.html">INSERT</a>,
+<a href="lang_update.html">UPDATE</a> and <a href="lang_delete.html">DELETE</a> statements it is not generally possible to order the
+operations so that all b-trees are updated in key order. The RBU update
+process works around this by applying all changes to the main table in one
+pass, then applying changes to each index in separate passes, ensuring each
+B-Tree is updated optimally. For a large database file (one that does not
+fit in the OS disk cache) this procedure can result in two orders of
+magnitude faster updates.
+
+</p><p>An RBU Vacuum operation requires less temporary disk space and writes
+less data to disk than an SQLite VACUUM. An SQLite VACUUM requires roughly
+twice the size of the final database file in temporary disk space to run.
+The total amount of data written is around three times the size of the
+final database file. By contrast, an RBU Vacuum requires roughly the size
+of the final database file in temporary disk space and writes a total of
+twice that to disk.
+
+</p><p>On the other hand, an RBU Vacuum uses more CPU than a regular SQLite
+VACUUM - in one test as much as five times as much. For this reason, an RBU
+Vacuum is often significantly slower than an SQLite VACUUM under the same
+conditions.
+
+</p></li><li><b>RBU runs in the background</b>
+
+<p>An ongoing RBU operation (either an update or a vacuum) does not
+interfere with read access to the database file.
+
+</p></li><li><b>RBU runs incrementally</b>
+
+<p>RBU operations may be suspended and then later resumed, perhaps with
+intervening power outages and/or system resets. For an RBU update, the
+original database content remains visible to all database readers until
+the entire update has been applied - even if the update is suspended and
+then later resumed.
+
+</p></li></ol>
+
+<p>The RBU extension is not enabled by default. To enable it, compile the
+<a href="amalgamation.html">amalgamation</a> with the <a href="compile.html#enable_rbu">SQLITE_ENABLE_RBU</a> compile-time option.
+
+<a name="rbu_updates"></a>
+
+</p><h1 id="rbu_updates"><span>2. </span>RBU Updates</h1>
+<h2 id="rbu_update_limitations"><span>2.1. </span>RBU Update Limitations</h2>
+
+<p>The following limitations apply to RBU updates:
+
+</p><ul>
+<li><p>The changes must consist of <a href="lang_insert.html">INSERT</a>, <a href="lang_update.html">UPDATE</a>, and <a href="lang_delete.html">DELETE</a>
+ operations only. CREATE and DROP operations are not
+ supported.</p></li>
+<li><p><a href="lang_insert.html">INSERT</a> statements may not use default values.</p></li>
+<li><p><a href="lang_update.html">UPDATE</a> and <a href="lang_delete.html">DELETE</a> statements must identify the target rows
+ by rowid or by non-NULL PRIMARY KEY values.</p></li>
+<li><p><a href="lang_update.html">UPDATE</a> statements may not modify PRIMARY KEY or rowid values.
+ </p></li>
+<li><p>RBU updates cannot be applied to any tables that contain a column
+ named "rbu_control".</p></li>
+<li><p>The RBU update will not fire any triggers.</p></li>
+<li><p>The RBU update will not detect or prevent foreign key or
+ CHECK constraint violations.</p></li>
+<li><p>All RBU updates use the "OR ROLLBACK" constraint handling mechanism.
+ </p></li>
+<li><p>The target database may not be in <a href="wal.html">WAL mode</a>.</p></li>
+<li><p></p><s>The target database may not contain <a href="expridx.html">indexes on expressions</a>.</s>
+ Indexes on expressions are supported beginning with SQLite 3.30.0
+ (2019-10-04).
+</li><li><p>No other writes may occur on the target database while the
+ RBU update is being applied. A read-lock is held on the target
+ database to prevent this.</p></li>
+</ul>
+
+
+<h2 id="preparing_an_rbu_update_file"><span>2.2. </span>Preparing an RBU Update File</h2>
+
+<p>All changes to be applied by RBU are stored in a separate SQLite database
+called the "RBU database". The database that is to be modified is called
+the "target database".
+
+</p><p>For each table in the target database that will be modified by the update,
+a corresponding table is created within the RBU database. The RBU database
+table schema is not the same as that of the target database, but is derived
+from it as <a href="rbu.html#database_tables">described below</a>.
+
+</p><p>The RBU database table contains a single row for each target database
+row inserted, updated or deleted by the update. Populating the RBU database
+tables is described in <a href="rbu.html#database_contents">the following section</a>.
+</p>
+
+<a name="database_tables"></a>
+
+<h3 id="the_rbu_database_schema"><span>2.2.1. </span>The RBU Database Schema</h3>
+
+<p>
+For each table in the target database, the RBU database should contain a table
+named "data&lt;<i>integer</i>&gt;_&lt;<i>target-table-name</i>&gt;" where
+&lt;<i>target-table-name</i>&gt; is the name of the table in the target
+database and &lt;<i>integer</i>&gt; is any sequence of zero or more numeric
+characters (0-9). Tables within the RBU database are processed in order by
+name (from smallest to largest according to the BINARY collation sequence),
+so the order in which target tables are updated is influenced by the selection
+of the &lt;<i>integer</i>&gt; portion of the data_% table name. While this can
+be useful when using RBU to update
+<a href="rbu.html#fts4_tables">certain types of virtual tables</a>, there is normally no
+reason to use anything other than an empty string in place of
+&lt;<i>integer</i>&gt;.
+
+</p><p>The data_% table must have all the same columns as the target table, plus
+one additional column named "rbu_control". The data_% table should have no
+PRIMARY KEY or UNIQUE constraints, but each column should have the same type as
+the corresponding column in the target database. The rbu_control column should
+have no type at all. For example, if the target database contains:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c UNIQUE);
+</pre></div>
+
+<p>Then the RBU database should contain:
+
+</p><div class="codeblock"><pre>CREATE TABLE data_t1(a INTEGER, b TEXT, c, rbu_control);
+</pre></div>
+
+<p>The order of the columns in the data_% table does not matter.
+
+</p><p>If the target database table is a virtual table or a table that has no
+PRIMARY KEY declaration, the data_% table must also contain a column
+named "rbu_rowid". The rbu_rowid column is mapped to the tables <a href="lang_createtable.html#rowid">ROWID</a>.
+For example, if the target database contains either of the following:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE x1 USING fts3(a, b);
+CREATE TABLE x1(a, b);
+</pre></div>
+
+<p>then the RBU database should contain:
+
+</p><div class="codeblock"><pre>CREATE TABLE data_x1(a, b, rbu_rowid, rbu_control);
+</pre></div>
+
+<p>Virtual tables for which the "rowid" column does
+not function like a primary key value cannot be updated using RBU.
+
+</p><p>
+All non-hidden columns (i.e. all columns matched by "SELECT *") of the
+target table must be present in the input table. For virtual tables,
+hidden columns are optional - they are updated by RBU if present in
+the input table, or not otherwise. For example, to write to an fts4
+table with a hidden languageid column such as:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE ft1 USING fts4(a, b, languageid='langid');
+</pre></div>
+
+<p>Either of the following input table schemas may be used:
+
+</p><div class="codeblock"><pre>CREATE TABLE data_ft1(a, b, langid, rbu_rowid, rbu_control);
+CREATE TABLE data_ft1(a, b, rbu_rowid, rbu_control);
+</pre></div>
+
+<a name="database_contents"></a>
+
+<h3 id="rbu_database_contents"><span>2.2.2. </span>RBU Database Contents</h3>
+
+<p>For each row to INSERT into the target database as part of the RBU
+update, the corresponding data_% table should contain a single record
+with the "rbu_control" column set to contain integer value 0. The
+other columns should be set to the values that make up the new record
+to insert.
+
+</p><p>The "rbu_control" column may also be set to integer value 2 for
+an INSERT. In this case, the new row silently replaces any existing row that
+has the same primary key values. This is equivalent to a DELETE followed by an
+INSERT with the same primary key values. It is not the same as an SQL REPLACE
+command, as in that case the new row may replace any conflicting rows (i.e.
+those that conflict due to UNIQUE constraints or indexes), not just those with
+conflicting primary keys.
+
+</p><p>If the target database table has an INTEGER PRIMARY KEY, it is not
+possible to insert a NULL value into the IPK column. Attempting to
+do so results in an SQLITE_MISMATCH error.
+
+</p><p>For each row to DELETE from the target database as part of the RBU
+update, the corresponding data_% table should contain a single record
+with the "rbu_control" column set to contain integer value 1. The
+real primary key values of the row to delete should be stored in the
+corresponding columns of the data_% table. The values stored in the
+other columns are not used.
+
+</p><p>For each row to UPDATE from the target database as part of the RBU
+update, the corresponding data_% table should contain a single record
+with the "rbu_control" column set to contain a value of type text.
+The real primary key values identifying the row to update should be
+stored in the corresponding columns of the data_% table row, as should
+the new values of all columns being update. The text value in the
+"rbu_control" column must contain the same number of characters as
+there are columns in the target database table, and must consist entirely
+of 'x' and '.' characters (or in some special cases 'd' - see below). For
+each column that is being updated, the corresponding character is set to
+'x'. For those that remain as they are, the corresponding character of the
+rbu_control value should be set to '.'. For example, given the tables
+above, the update statement:
+
+</p><div class="codeblock"><pre>UPDATE t1 SET c = 'usa' WHERE a = 4;
+</pre></div>
+
+<p>is represented by the data_t1 row created by:
+
+</p><div class="codeblock"><pre>INSERT INTO data_t1(a, b, c, rbu_control) VALUES(4, NULL, 'usa', '..x');
+</pre></div>
+
+<p>If RBU is used to update a large BLOB value within a target database, it
+may be more efficient to store a patch or delta that can be used to modify
+the existing BLOB instead of an entirely new value within the RBU database.
+RBU allows deltas to be specified in two ways:
+
+</p><ul>
+ <li> In the "fossil delta" format - the format used for blob deltas by the
+ <a href="http://fossil-scm.org">Fossil source-code management system</a>, or
+
+ </li><li> In a custom format defined by the RBU application.
+</li></ul>
+
+<p> The fossil delta format may only be used to update BLOB values. Instead
+of storing the new BLOB within the data_% table, the fossil delta is stored
+instead. And instead of specifying an 'x' as part of the rbu_control string
+for the column to be updated, an 'f' character is stored. When processing
+an 'f' update, RBU loads the original BLOB data from disk, applies the fossil
+delta to it and stores the results back into the database file. The RBU
+databases generated by <a href="rbu.html#sqldiff">sqldiff --rbu</a> make use of fossil deltas wherever
+doing so would save space in the RBU database.
+
+</p><p> To use a custom delta format, the RBU application must register a
+user-defined SQL function named "rbu_delta" before beginning to process the
+update. rbu_delta() will be invoked with two arguments - the original value
+stored in the target table column and the delta value provided as part of
+the RBU update. It should return the result of applying the delta to the
+original value. To use the custom delta function, the character of the
+rbu_control value corresponding to the target column to update must be
+set to 'd' instead of 'x'. Then, instead of updating the target table with the
+value stored in the corresponding data_% column, RBU invokes the user-defined
+SQL function "rbu_delta()" and the store in the target table column.
+
+</p><p>For example, this row:
+
+</p><div class="codeblock"><pre>INSERT INTO data_t1(a, b, c, rbu_control) VALUES(4, NULL, 'usa', '..d');
+</pre></div>
+
+<p>causes RBU to update the target database table in a way similar to:
+
+</p><div class="codeblock"><pre>UPDATE t1 SET c = rbu_delta(c, 'usa') WHERE a = 4;
+</pre></div>
+
+<p>If the target database table is a virtual table or a table with no PRIMARY
+KEY, the rbu_control value should not include a character corresponding
+to the rbu_rowid value. For example, this:
+
+</p><div class="codeblock"><pre>INSERT INTO data_ft1(a, b, rbu_rowid, rbu_control)
+ VALUES(NULL, 'usa', 12, '.x');
+</pre></div>
+
+
+<p>causes a result similar to:
+
+</p><div class="codeblock"><pre>UPDATE ft1 SET b = 'usa' WHERE rowid = 12;
+</pre></div>
+
+<p>The data_% tables themselves should have no PRIMARY KEY declarations.
+However, RBU is more efficient if reading the rows in from each data_%
+table in "rowid" order is roughly the same as reading them sorted by
+the PRIMARY KEY of the corresponding target database table. In other
+words, rows should be sorted using the destination table PRIMARY KEY
+fields before they are inserted into the data_% tables.
+
+<a name="fts4_tables"></a>
+
+</p><h3 id="using_rbu_with_fts3_4_tables"><span>2.2.3. </span>Using RBU with FTS3/4 Tables</h3>
+
+<p>Usually, an <a href="fts3.html">FTS3 or FTS4</a> table is an example of a virtual table
+with a rowid that works like a PRIMARY KEY. So, for the following FTS4 tables:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE ft1 USING fts4(addr, text);
+CREATE VIRTUAL TABLE ft2 USING fts4; -- implicit "content" column
+</pre></div>
+
+<p>The data_% tables may be created as follows:
+
+</p><div class="codeblock"><pre>CREATE TABLE data_ft1 USING fts4(addr, text, rbu_rowid, rbu_control);
+CREATE TABLE data_ft2 USING fts4(content, rbu_rowid, rbu_control);
+</pre></div>
+
+<p>And populated as if the target table were an ordinary SQLite table with no
+explicit PRIMARY KEY columns.
+
+</p><p><a href="fts3.html#_contentless_fts4_tables_">Contentless FTS4 tables</a> are handled similarly,
+except that any attempt to update or delete rows will cause an error when
+applying the update.
+
+</p><p><a href="fts3.html#_external_content_fts4_tables_">External content FTS4 tables</a> may also be
+updated using RBU. In this case the user is required to configure the RBU
+database so that the same set of UPDATE, DELETE and INSERT operations are
+applied to the FTS4 index as to the underlying content table. As for all
+updates of external content FTS4 tables, the user is also required to ensure
+that any UPDATE or DELETE operations are applied to the FTS4 index before
+they are applied to the underlying content table (refer to FTS4 documentation
+for a detailed explanation). In RBU, this is done by ensuring that the name
+of the data_% table used to write to the FTS4 table sorts before the name
+of the data_% table used to update the underlying content table using the
+<a href="datatype3.html#collation">BINARY</a> collation sequence. In order to avoid duplicating data within the
+RBU database, an SQL view may be used in place of one of the data_% tables.
+For example, for the target database schema:
+
+</p><div class="codeblock"><pre>CREATE TABLE ccc(addr, text);
+CREATE VIRTUAL TABLE ccc_fts USING fts4(addr, text, content=ccc);
+</pre></div>
+
+<p>
+ The following RBU database schema may be used:
+
+</p><div class="codeblock"><pre>CREATE TABLE data_ccc(addr, text, rbu_rowid, rbu_control);
+CREATE VIEW data0_ccc_fts AS SELECT * FROM data_ccc;
+</pre></div>
+
+<p>
+ The data_ccc table may then be populated as normal with the updates intended
+ for target database table ccc. The same updates will be read by RBU from
+ the data0_ccc_fts view and applied to FTS table ccc_fts. Because
+ "data0_ccc_fts" is smaller than "data_ccc", the FTS table will be updated
+ first, as required.
+
+</p><p>
+ Cases in which the underlying content table has an explicit INTEGER PRIMARY
+ KEY column are slightly more difficult, as the text values stored in the
+ rbu_control column are slightly different for the FTS index and its
+ underlying content table. For the underlying content table, a character
+ must be included in any rbu_control text values for the explicit IPK, but
+ for the FTS table itself, which has an implicit rowid, it should not. This
+ is inconvenient, but can be solved using a more complicated view, as follows:
+
+</p><div class="codeblock"><pre>-- Target database schema
+CREATE TABLE ddd(i INTEGER PRIMARY KEY, k TEXT);
+CREATE VIRTUAL TABLE ddd_fts USING fts4(k, content=ddd);
+
+-- RBU database schema
+CREATE TABLE data_ccc(i, k, rbu_control);
+CREATE VIEW data0_ccc_fts AS SELECT i AS rbu_rowid, k, CASE
+ WHEN rbu_control IN (0,1) THEN rbu_control ELSE substr(rbu_control, 2) END
+FROM data_ccc;
+</pre></div>
+
+<p>
+ The substr() function in the SQL view above returns the text of the
+ rbu_control argument with the first character (the one corresponding to
+ column "i", which is not required by the FTS table) removed.
+
+<a name="sqldiff"></a>
+
+</p><h3 id="automatically_generating_rbu_updates_with_sqldiff"><span>2.2.4. </span>Automatically Generating RBU Updates with sqldiff</h3>
+
+<p>
+ As of SQLite <a href="releaselog/3_9_0.html">version 3.9.0</a> (2015-10-14),
+ the <a href="sqldiff.html">sqldiff</a> utility is able to generate
+ RBU databases representing the difference between two databases with
+ identical schemas. For example, the following command:
+
+</p><div class="codeblock"><pre>sqldiff --rbu t1.db t2.db
+</pre></div>
+
+<p>
+ Outputs an SQL script to create an RBU database which, if used to update
+ database t1.db, patches it so that its contents are identical to that of
+ database t2.db.
+
+</p><p>
+ By default, sqldiff attempts to process all non-virtual tables within
+ the two databases provided to it. If any table appears in one database
+ but not the other, or if any table has a slightly different schema in
+ one database it is an error. The "--table" option may be useful if this
+ causes a problem
+
+</p><p>
+ Virtual tables are ignored by default by sqldiff. However, it is possible
+ to explicitly create an RBU data_% table for a virtual table that features
+ a rowid that functions like a primary key using a command such as:
+
+</p><div class="codeblock"><pre>sqldiff --rbu --table &lt;<i>virtual-table-name</i>&gt; t1.db t2.db
+</pre></div>
+
+<p>
+ Unfortunately, even though virtual tables are ignored by default, any
+ <a href="fts3.html#*shadowtab">underlying database tables</a> that they create in order to
+ store data within the database are not, and <a href="sqldiff.html">sqldiff</a> will include add these
+ to any RBU database. For this reason, users attempting to use sqldiff to
+ create RBU updates to apply to target databases with one or more virtual
+ tables will likely have to run sqldiff using the --table option separately
+ for each table to update in the target database.
+
+</p><h2 id="rbu_update_c_c_programming"><span>2.3. </span>RBU Update C/C++ Programming</h2>
+
+<p>The RBU extension interface allows an application to apply an RBU update
+stored in an RBU database to an existing target database.
+The procedure is as follows:
+
+</p><ol>
+<li><p>
+Open an RBU handle using the sqlite3rbu_open(T,A,S) function.
+
+</p><p>The T argument is the name of the target database file.
+The A argument is the name of the RBU database file.
+The S argument is the name of a "state database" used to store
+state information needed to resume the update after an interruption.
+The S argument can be NULL in which case the state information
+is stored in the RBU database in various tables whose names all
+begin with "rbu_".
+
+</p><p>The sqlite3rbu_open(T,A,S) function returns a pointer to
+an "sqlite3rbu" object, which is then passed into the subsequent
+interfaces.
+
+
+</p></li><li><p>
+Register any required virtual table modules with the database
+handle returned by sqlite3rbu_db(X) (where argument X is the sqlite3rbu
+pointer returned from sqlite3rbu_open()). Also, if required, register
+the rbu_delta() SQL function using
+<a href="c3ref/create_function.html">sqlite3_create_function_v2()</a>.
+
+</p></li><li><p>
+Invoke the sqlite3rbu_step(X) function one or more times on
+the sqlite3rbu object pointer X. Each call to sqlite3rbu_step()
+performs a single b-tree operation, so thousands of calls may be
+required to apply a complete update. The sqlite3rbu_step()
+interface will return SQLITE_DONE when the update has been
+completely applied.
+
+</p></li><li><p>
+Call sqlite3rbu_close(X) to destroy the sqlite3rbu object pointer.
+If sqlite3rbu_step(X) has been called enough times to completely
+apply the update to the target database, then the RBU database
+is marked as fully applied. Otherwise, the state of the RBU
+update application is saved in the state database (or in the RBU
+database if the name of the state database file in sqlite3rbu_open()
+is NULL) for later resumption of the update.
+</p></li></ol>
+
+<p>If an update is only partially applied to the target database by the
+time sqlite3rbu_close() is called, state information is saved
+within the state database if it exists, or otherwise in the RBU database.
+This allows subsequent processes to automatically
+resume the RBU update from where it left off.
+If state information is stored in the RBU database, it can be removed
+by dropping all tables whose names begin with "rbu_".
+
+</p><p>For more details, refer to the comments in
+<a href="http://sqlite.org/src/doc/trunk/ext/rbu/sqlite3rbu.h">header file
+sqlite3rbu.h</a>.
+
+<a name="rbu_vacuum"></a>
+
+</p><h1 id="rbu_vacuum"><span>3. </span>RBU Vacuum</h1>
+
+<h2 id="rbu_vacuum_limitations"><span>3.1. </span>RBU Vacuum Limitations</h2>
+
+<p>When compared with SQLite's built-in VACUUM command, RBU Vacuum has the
+following limitations:
+
+</p><ul>
+ <li><p>It may not be used on a database that contains <a href="expridx.html">indexes on expressions</a>.
+ </p></li><li><p>The database being vacuumed may not be in <a href="wal.html">WAL mode</a>.
+</p></li></ul>
+
+<h2 id="rbu_vacuum_c_c_programming"><span>3.2. </span>RBU Vacuum C/C++ Programming</h2>
+
+<p> This section provides an overview of and example code demonstrating the
+ integration of RBU Vacuum into an application program. For full details,
+ refer to the comments in
+ <a href="http://sqlite.org/src/doc/trunk/ext/rbu/sqlite3rbu.h">header file
+ sqlite3rbu.h</a>.
+
+</p><p> RBU Vacuum applications all implement some variation of the following
+procedure:
+
+</p><ol>
+ <li><p> An RBU handle is created by calling sqlite3rbu_vacuum(T, S).
+
+ </p><p> Argument T is the name of the database file to vacuum. Argument S is
+ the name of a database in which the RBU module will save its state if the
+ vacuum operation is suspended.
+
+ </p><p> If state database S does not exist when sqlite3rbu_vacuum() is
+ invoked, it is automatically created and populated with the single table
+ used to store the state of an RBU vacuum - "rbu_state". If an ongoing RBU
+ vacuum is suspended, this table is populated with state data. The next
+ time sqlite3rbu_vacuum() is called with the same S parameter, it detects
+ this data and attempts to resume the suspended vacuum operation. When
+ an RBU vacuum operation is completed or encounters an error, RBU
+ automatically deletes the contents of the rbu_state table. In this case,
+ the next call to sqlite3rbu_vacuum() starts an entirely new vacuum
+ operation from scratch.
+
+ </p><p> It is a good idea to establish a convention for determining the RBU
+ vacuum state database name based on the target database name. The
+ example code below uses "&lt;target&gt;-vacuum", where &lt;target&gt; is
+ the name of the database being vacuumed.
+
+ </p></li><li><p> Any custom collation sequences used by indexes within the database
+ being vacuumed are registered with both of the database handles returned
+ by the sqlite3rbu_db() function.
+
+ </p></li><li><p> Function sqlite3rbu_step() is called on the RBU handle until either
+ the RBU vacuum is finished, an error occurs or the application wishes to
+ suspend the RBU vacuum.
+
+ </p><p> Each call to sqlite3rbu_step() does a small amount of work towards
+ completing the vacuum operation. Depending on the size of the database, a
+ single vacuum may require thousands of calls to sqlite3rbu_step().
+ sqlite3rbu_step() returns SQLITE_DONE if the vacuum operation has
+ finished, SQLITE_OK if the vacuum operation has not finished but no error
+ has occurred, and an SQLite error code if an error is encountered. If
+ an error does occur, all subsequent calls to sqlite3rbu_step() immediately
+ return the same error code.
+
+ </p></li><li><p> Finally, sqlite3rbu_close() is called to close the RBU handle. If the
+ application stopped calling sqlite3rbu_step() before either the vacuum
+ finished or an error occurred, the state of the vacuum is saved in the
+ state database so that it may be resumed later on.
+
+ </p><p> Like sqlite3rbu_step(), if the vacuum operation has finished,
+ sqlite3rbu_close() returns SQLITE_DONE. If the vacuum has not finished
+ but no error has occurred, SQLITE_OK is returned. Or, if an error has
+ occurred, an SQLite error code is returned. If an error occurred as part
+ of a prior call to sqlite3rbu_step(), sqlite3rbu_close() returns the
+ same error code.
+</p></li></ol>
+
+<p>The following example code illustrates the techniques described above.
+
+</p><div class="codeblock"><pre><i>/*</i>
+<i>** Either start a new RBU vacuum or resume a suspended RBU vacuum on </i>
+<i>** database zTarget. Return when either an error occurs, the RBU </i>
+<i>** vacuum is finished or when the application signals an interrupt</i>
+<i>** (code not shown).</i>
+<i>**</i>
+<i>** If the RBU vacuum is completed successfully, return SQLITE_DONE.</i>
+<i>** If an error occurs, return SQLite error code. Or, if the application</i>
+<i>** signals an interrupt, suspend the RBU vacuum operation so that it</i>
+<i>** may be resumed by a subsequent call to this function and return</i>
+<i>** SQLITE_OK.</i>
+<i>**</i>
+<i>** This function uses the database named "&lt;zTarget&gt;-vacuum" for</i>
+<i>** the state database, where &lt;zTarget&gt; is the name of the database </i>
+<i>** being vacuumed.</i>
+<i>*/</i>
+int do_rbu_vacuum(const char *zTarget){
+ int rc;
+ char *zState; <i>/* Name of state database */</i>
+ sqlite3rbu *pRbu; <i>/* RBU vacuum handle */</i>
+
+ zState = sqlite3_mprintf("%s-vacuum", zTarget);
+ if( zState==0 ) return SQLITE_NOMEM;
+ pRbu = sqlite3rbu_vacuum(zTarget, zState);
+ sqlite3_free(zState);
+
+ if( pRbu ){
+ sqlite3 *dbTarget = sqlite3rbu_db(pRbu, 0);
+ sqlite3 *dbState = sqlite3rbu_db(pRbu, 1);
+
+ <i>/* Any custom collation sequences used by the target database must</i>
+ <i>** be registered with both database handles here. */</i>
+
+ while( sqlite3rbu_step(pRbu)==SQLITE_OK ){
+ if( <i>&lt;application has signaled interrupt&gt;</i> ) break;
+ }
+ }
+ rc = sqlite3rbu_close(pRbu);
+ return rc;
+}
+</pre></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/rbu.in?m=0f520f8581888500a">2019-09-26 19:34:22</a> UTC </small></i></p>
+
diff --git a/www/recovery.html b/www/recovery.html
new file mode 100644
index 0000000..b821d86
--- /dev/null
+++ b/www/recovery.html
@@ -0,0 +1,384 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Recovering Data From A Corrupt SQLite Database</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Recovering Data From A Corrupt SQLite Database
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#recovering_some_data_from_a_corrupt_sqlite_database">1. Recovering (Some) Data From A Corrupt SQLite Database</a></div>
+<div class="fancy-toc2"><a href="#limitations">1.1. Limitations</a></div>
+<div class="fancy-toc1"><a href="#recovery_using_the_recover_command_in_the_cli">2. Recovery Using The ".recover" Command In The CLI</a></div>
+<div class="fancy-toc1"><a href="#building_the_recovery_api_into_an_application">3. Building The Recovery API Into An Application</a></div>
+<div class="fancy-toc2"><a href="#source_code_files">3.1. Source Code Files</a></div>
+<div class="fancy-toc2"><a href="#how_to_implement_recovery">3.2. How To Implement Recovery</a></div>
+<div class="fancy-toc2"><a href="#example_implementations">3.3. Example Implementations</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="recovering_some_data_from_a_corrupt_sqlite_database"><span>1. </span>Recovering (Some) Data From A Corrupt SQLite Database</h1>
+
+<p>
+SQLite databases are remarkably rebust. Application faults and
+power failures typically leave the content of the database intact.
+However, it is possible to <a href="howtocorrupt.html">corrupt an SQLite database</a>.
+For example, hardware malfunctions can damage the database file, or a
+rogue process can open the database and overwrite parts of it.
+
+</p><p>
+Given a corrupt database file, it is sometimes desirable to try to
+salvage as much data from the file as possible. The recovery API
+is designed to facilitate this.
+
+</p><h2 id="limitations"><span>1.1. </span>Limitations</h2>
+
+<p>
+It is sometimes possible to perfectly restore a database that has
+gone corrupt, but that is the exception. Usually
+the recovered database will be defective in a number of ways:
+
+</p><ul>
+<li><p>
+Some content might be permanently deleted and unrecoverable.
+This can happen, for example, if a rogue process overwrites part
+of the database file.
+
+</p></li><li><p>
+Previously deleted content might reappear. Normally when SQLite
+does a DELETE operation, it does not actually overwrite the old content
+but instead remembers that space is available for reuse during the next
+INSERT. If such deleted content is still in the file when a recovery
+is attempted, it might be extracted and "resurrected".
+
+</p></li><li><p>
+Recovered content might be altered.
+For example, the value stored in a particular row
+might change from 48 to 49. Or it might change from an integer into
+a string or blob. A value that was NULL might become an integer.
+A string value might become a BLOB. And so forth.
+
+</p></li><li><p>
+Constraints may not be valid after recovery. CHECK constraints,
+FOREIGN KEY constraints, UNIQUE constraints, type constraints on
+<a href="stricttables.html">STRICT tables</a> - any of these might be violated in the recovered
+database.
+
+</p></li><li><p>
+Content might be moved from one table into another.
+</p></li></ul>
+
+<p>
+The recovery API does as good of a job as it can at restoring a database,
+but the results will always be suspect. Sometimes (for example if the
+corruption is restricted to indexes) the recovery will perfectly restore
+the database content. However in other cases, the recovery will be imperfect.
+The impact of this imperfection depends on the application. A database that
+holds a list of bookmarks is still a list of bookmarks after recovery.
+A few bookmarks might be missing or added or altered after recovery, but
+the list is "fuzzy" and imperfect to begin with so adding a bit more
+uncertainty will not be fatal to the application. But if an accounting
+database goes corrupt and is subsequently recovered, the books might be
+out of balance.
+
+</p><p>
+It is best to think of the recovery API as a salvage undertaking.
+Recovery will extract as much usable data as it can from the wreck
+of the old database, but some parts may be damaged beyond repair and
+some rework and testing should be performed prior to returning the
+recovered database to service.
+
+</p><h1 id="recovery_using_the_recover_command_in_the_cli"><span>2. </span>Recovery Using The ".recover" Command In The CLI</h1>
+
+<p>
+The easiest way to manually recover a corrupt database is using
+the <a href="cli.html">Command Line Interface</a> or "CLI" for SQLite. The CLI is a program
+named "sqlite3". Use it to recover a corrupt database file using
+a command similar to the following:
+
+</p><div class="codeblock"><pre>sqlite3 corrupt.db .recover &gt;data.sql
+</pre></div>
+
+<p>
+This will generate SQL text in the file named "data.sql" that can be used
+to reconstruct the original database:
+
+</p><div class="codeblock"><pre>sqlite3 recovered.db &lt;data.sql
+</pre></div>
+
+<p>
+The ".recover" option is actually a command that is issued to the
+CLI. That command can accept arguments. For example, by running:
+
+</p><div class="codeblock"><pre>sqlite3 corruptdb ".recover --ignore-freelist" &gt;data.sql
+</pre></div>
+
+<p>
+Notice that the ".recover" command and its arguments must be contained
+in quotes. The following options are supported:
+
+</p><p>
+</p><blockquote>
+<dt>--ignore-freelist</dt>
+<dd><p>
+Ignore pages of the database that appear to be part of the
+freelist. Normally the freelist is scanned, and if it contains
+pages that look like they have content, that content is output.
+But if the page really is on the freelist, that can mean that
+previously deleted information is reintroduced into the database.
+</p></dd>
+
+<dt>--lost-and-found <i>TABLE</i></dt>
+<dd><p>
+If content is found during recovery that cannot be associated
+with a particular table, it is put into the "lost_and_found"
+table. Use this option to change the name of the
+"lost_and_found" table to "TABLE".
+</p></dd>
+
+<dt>--no-rowids</dt>
+<dd><p>
+If this option is provided, then rowid values that are not also
+INTEGER PRIMARY KEY values are not extracted from the
+corrupt database.
+</p></dd>
+
+</blockquote>
+
+<h1 id="building_the_recovery_api_into_an_application"><span>3. </span>Building The Recovery API Into An Application</h1>
+
+<h2 id="source_code_files"><span>3.1. </span>Source Code Files</h2>
+
+<p>If you want to build the recovery API into your application, you will
+need to add some source files to your build, above and beyond the usual
+"sqlite3.c" and "sqlite3.h" source files. You will need:
+
+</p><p>
+</p><blockquote>
+<table border="0" cellpadding="20">
+<tr>
+<td>
+<a href="https://sqlite.org/src/file/ext/recover/sqlite3recover.c">sqlite3recover.c</a>
+</td><td>
+This is the main source file that implements the recovery API.
+</td>
+</tr>
+
+<tr>
+<td>
+<a href="https://sqlite.org/src/file/ext/recover/sqlite3recover.h">sqlite3recover.h</a>
+</td><td>
+This is the header file that goes with sqlite3recover.h.
+</td>
+</tr>
+
+<tr>
+<td>
+<a href="https://sqlite.org/src/file/ext/recover/dbdata.c">dbdata.c</a>
+</td><td>
+This file implements two virtual tables name "sqlite_dbdata" and
+"sqlite_dbptr" that required by sqlite3recover.c.
+</td>
+</tr>
+</table>
+</blockquote>
+
+<p>
+The two C source file above need to be linked into your application in the
+same way as "sqlite3.c" is linked in. And the header file needs to be
+accessible to the compiler when the C files are being compiled.
+
+</p><h2 id="how_to_implement_recovery"><span>3.2. </span>How To Implement Recovery</h2>
+
+<p>These are the basic steps needed to recover content from a corrupt
+Database:
+
+</p><ol>
+<li><p>
+Creates an sqlite3_recover handle by calling either
+sqlite3_recover_init() or sqlite3_recover_init_sql().
+Use sqlite3_recover_init() to store the recovered content
+in a separate database and use sqlite3_recover_init_sql()
+to generate SQL text that will reconstruct the database.
+
+</p></li><li><p>
+Make zero or more calls to sqlite3_recover_config() to set
+options on the new sqlite3_recovery handle.
+
+</p></li><li><p>
+Invoke sqlite3_recover_step() repeatedly
+until it returns something other than SQLITE_OK. If it
+returns SQLITE_DONE, then the recovery operation completed without
+error. If it returns some other non-SQLITE_OK value, then an error
+has occurred. The sqlite3_recover_run() interface is also
+available as a convenience wrapper that simply invokes
+sqlite3_recover_step() repeatedly until it returns something other
+than SQLITE_DONE.
+
+</p></li><li><p>
+Retrieves any error code and English language error message using the
+sqlite3_recover_errcode() and sqlite3_recover_errmsg() interfaces,
+respectively.
+
+</p></li><li><p>
+Invoke sqlite3_recover_finish() to destroy the sqlite3_recover object.
+</p></li></ol>
+
+<p>
+Details of the interface are described in comments in the
+<a href="https://sqlite.org/src/file/ext/recover/sqlite3recover.h">sqlite3_recover.h header file</a>.
+
+</p><h2 id="example_implementations"><span>3.3. </span>Example Implementations</h2>
+
+
+<p>
+Examples of how the recovery extension is used by SQLite itself
+can be seen at the following links:
+
+</p><ul>
+<li><p><a href="https://sqlite.org/src/info/30475c820dc5ab8a8?ln=999,1026">https://sqlite.org/src/info/30475c820dc5ab8a8?ln=999,1026</a>
+</p><p>
+An example of the recovery extension found in the
+"fuzzcheck" testing utility in the SQLite tree.
+
+</p></li><li><p><a href="https://sqlite.org/src/info/84bb08d8762920285f08f1c0?ln=7299,7361">https://sqlite.org/src/info/84bb08d8762920285f08f1c0?ln=7299,7361</a>
+</p><p>
+The code that implements the ".recover" command in the <a href="cli.html">CLI</a>.
+</p></li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/recovery.in?m=e396bdde80595020a">2022-11-04 15:23:18</a> UTC </small></i></p>
+
diff --git a/www/releaselog/3_0_0.html b/www/releaselog/3_0_0.html
new file mode 100644
index 0000000..5ed19b2
--- /dev/null
+++ b/www/releaselog/3_0_0.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.0.0 On 2004-06-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.0.0 On 2004-06-18</h2><p><ol class='lessindent'>
+<li><font color="red"><b>
+ *** Alpha Release - Research And Testing Use Only ***</b></font>
+<li>Support for internationalization including UTF-8, UTF-16, and
+ user defined collating sequences.</li>
+<li>New file format that is 25% to 35% smaller for typical use.</li>
+<li>Improved concurrency.</li>
+<li>Atomic commits for ATTACHed databases.</li>
+<li>Remove cruft from the APIs.</li>
+<li>BLOB support.</li>
+<li>64-bit rowids.</li>
+<li><a href="../version3.html">More information</a>.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_0_1.html b/www/releaselog/3_0_1.html
new file mode 100644
index 0000000..1695f14
--- /dev/null
+++ b/www/releaselog/3_0_1.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.0.1 On 2004-06-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.0.1 On 2004-06-22</h2><p><ol class='lessindent'>
+<li><font color="red"><b>
+ *** Alpha Release - Research And Testing Use Only ***</b></font>
+<li>Lots of bug fixes.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_0_2.html b/www/releaselog/3_0_2.html
new file mode 100644
index 0000000..782bd9c
--- /dev/null
+++ b/www/releaselog/3_0_2.html
@@ -0,0 +1,130 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.0.2 On 2004-06-30</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.0.2 On 2004-06-30</h2><p><ol class='lessindent'>
+<li>The first beta release for SQLite 3.0.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_0_3.html b/www/releaselog/3_0_3.html
new file mode 100644
index 0000000..1db28eb
--- /dev/null
+++ b/www/releaselog/3_0_3.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.0.3 On 2004-07-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.0.3 On 2004-07-22</h2><p><ol class='lessindent'>
+<li>The second beta release for SQLite 3.0.</li>
+<li>Add support for "PRAGMA page_size" to adjust the page size of
+the database.</li>
+<li>Various bug fixes and documentation updates.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_0_4.html b/www/releaselog/3_0_4.html
new file mode 100644
index 0000000..b1d92f0
--- /dev/null
+++ b/www/releaselog/3_0_4.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.0.4 On 2004-08-09</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.0.4 On 2004-08-09</h2><p><ol class='lessindent'>
+<li>CREATE TABLE and DROP TABLE now work correctly as prepared statements.</li>
+<li>Fix a bug in VACUUM and UNIQUE indices.</li>
+<li>Add the ".import" command to the command-line shell.</li>
+<li>Fix a bug that could cause index corruption when an attempt to
+ delete rows of a table is blocked by a pending query.</li>
+<li>Library size optimizations.</li>
+<li>Other minor bug fixes.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_0_5.html b/www/releaselog/3_0_5.html
new file mode 100644
index 0000000..0e50e65
--- /dev/null
+++ b/www/releaselog/3_0_5.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.0.5 On 2004-08-29</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.0.5 On 2004-08-29</h2><p><ol class='lessindent'>
+<li>Support for ":AAA" style bind parameter names.</li>
+<li>Added the new sqlite3_bind_parameter_name() interface.</li>
+<li>Support for TCL variable names embedded in SQL statements in the
+ TCL bindings.</li>
+<li>The TCL bindings transfer data without necessarily doing a conversion
+ to a string.</li>
+<li>The database for TEMP tables is not created until it is needed.</li>
+<li>Add the ability to specify an alternative temporary file directory
+ using the "sqlite_temp_directory" global variable.</li>
+<li>A compile-time option (SQLITE_BUSY_RESERVED_LOCK) causes the busy
+ handler to be called when there is contention for a RESERVED lock.</li>
+<li>Various bug fixes and optimizations</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_0_6.html b/www/releaselog/3_0_6.html
new file mode 100644
index 0000000..f77487f
--- /dev/null
+++ b/www/releaselog/3_0_6.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.0.6 On 2004-09-02</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.0.6 On 2004-09-02</h2><p><ol class='lessindent'>
+<li>Better detection and handling of corrupt database files.</li>
+<li>The sqlite3_step() interface returns SQLITE_BUSY if it is unable
+ to commit a change because of a lock</li>
+<li>Combine the implementations of LIKE and GLOB into a single
+ pattern-matching subroutine.</li>
+<li>Miscellaneous code size optimizations and bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_0_7.html b/www/releaselog/3_0_7.html
new file mode 100644
index 0000000..678e455
--- /dev/null
+++ b/www/releaselog/3_0_7.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.0.7 On 2004-09-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.0.7 On 2004-09-18</h2><p><ol class='lessindent'>
+<li>The BTree module allocates large buffers using malloc() instead of
+ off of the stack, in order to play better on machines with limited
+ stack space.</li>
+<li>Fixed naming conflicts so that versions 2.8 and 3.0 can be
+ linked and used together in the same ANSI-C source file.</li>
+<li>New interface: sqlite3_bind_parameter_index()</li>
+<li>Add support for wildcard parameters of the form: "?nnn"</li>
+<li>Fix problems found on 64-bit systems.</li>
+<li>Removed encode.c file (containing unused routines) from the
+ version 3.0 source tree.</li>
+<li>The sqlite3_trace() callbacks occur before each statement
+ is executed, not when the statement is compiled.</li>
+<li>Makefile updates and miscellaneous bug fixes.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_0_8.html b/www/releaselog/3_0_8.html
new file mode 100644
index 0000000..aed52a8
--- /dev/null
+++ b/www/releaselog/3_0_8.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.0.8 On 2004-10-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.0.8 On 2004-10-12</h2><p><ol class='lessindent'>
+<li>Add support for DEFERRED, IMMEDIATE, and EXCLUSIVE transactions.</li>
+<li>Allow new user-defined functions to be created when there are
+already one or more precompiled SQL statements.<li>
+<li>Fix portability problems for MinGW/MSYS.</li>
+<li>Fix a byte alignment problem on 64-bit Sparc machines.</li>
+<li>Fix the ".import" command of the shell so that it ignores \r
+characters at the end of lines.</li>
+<li>The "csv" mode option in the shell puts strings inside double-quotes.</li>
+<li>Fix typos in documentation.</li>
+<li>Convert array constants in the code to have type "const".</li>
+<li>Numerous code optimizations, specially optimizations designed to
+make the code footprint smaller.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_10_0.html b/www/releaselog/3_10_0.html
new file mode 100644
index 0000000..ff6e815
--- /dev/null
+++ b/www/releaselog/3_10_0.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.10.0 On 2016-01-06</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.10.0 On 2016-01-06</h2><p><ol class='lessindent'>
+<p><b>General improvements:</b>
+<li>Added support for <a href="../lang_expr.html#like">LIKE</a>, <a href="../lang_expr.html#glob">GLOB</a>, and <a href="../lang_expr.html#regexp">REGEXP</a> operators on <a href="../vtab.html">virtual tables</a>.
+<li>Added the <a href="../vtab.html#colUsed">colUsed field</a> to <a href="../c3ref/index_info.html">sqlite3_index_info</a> for use by
+ the <a href="../vtab.html#xbestindex">sqlite3_module.xBestIndex</a> method.
+<li>Enhance the <a href="../pragma.html#pragma_cache_spill">PRAGMA cache_spill</a> statement to accept a 32-bit integer
+ parameter which is the threshold below which cache spilling is prohibited.
+<li>On unix, if a symlink to a database file is opened, then the corresponding
+ journal files are based on the actual filename, not the symlink name.
+<li>Added the "--transaction" option to <a href="../sqldiff.html">sqldiff</a>.
+<li>Added the <a href="../c3ref/db_cacheflush.html">sqlite3_db_cacheflush()</a> interface.
+<li>Added the <a href="../c3ref/strlike.html">sqlite3_strlike()</a> interface.
+<li>When using <a href="../mmap.html">memory-mapped I/O</a> map the database file read-only so that stray pointers
+ and/or array overruns in the application cannot accidentally modify the database file.
+<li>Added the <em>experimental</em> <a href="../c3ref/snapshot_get.html">sqlite3_snapshot_get()</a>, <a href="../c3ref/snapshot_open.html">sqlite3_snapshot_open()</a>,
+ and <a href="../c3ref/snapshot_free.html">sqlite3_snapshot_free()</a> interfaces. These are subject to change or removal in
+ a subsequent release.
+<li>Enhance the <a href="../lang_datefunc.html#localtime">'utc' modifier</a> in the <a href="../lang_datefunc.html">date and time functions</a> so that it is a no-op if
+ the date/time is known to already be in UTC. (This is not a compatibility break since
+ the behavior has long been documented as "undefined" in that case.)
+<li>Added the <a href="../json1.html#jgrouparray">json_group_array()</a> and <a href="../json1.html#jgroupobject">json_group_object()</a> SQL functions in the
+ <a href="../json1.html#jmini">json</a> extension.
+<li>Added the <a href="../compile.html#like_doesnt_match_blobs">SQLITE_LIKE_DOESNT_MATCH_BLOBS</a> compile-time option.
+<li>Many small performance optimizations.
+<p><b>Portability enhancements:</b>
+<li>Work around a sign-extension bug in the optimizer of the HP C compiler on HP/UX.
+ <a href="https://www.sqlite.org/src/fdiff?sbs=1&v1=869c95b0fc73026d&v2=232c242a0ccb3d67">(details)</a>
+<p><b>Enhancements to the <a href="../cli.html">command-line shell</a>:</b>
+<li>Added the ".changes ON|OFF" and ".vfsinfo" <a href="../cli.html#dotcmd">dot-commands</a>.
+<li>Translate between MBCS and UTF8 when
+ running in <a href="https://en.wikipedia.org/wiki/Cmd.exe">cmd.exe</a> on Windows.
+<p><b>Enhancements to makefiles:</b>
+<li>Added the --enable-editline and --enable-static-shell options
+ to the various autoconf-generated configure scripts.
+<li>Omit all use of "awk" in the makefiles, to make building easier for MSVC users.
+<p><b>Important fixes:</b>
+<li>Fix inconsistent integer to floating-point comparison operations that
+ could result in a corrupt index if the index is created on a table
+ column that contains both large integers and floating point values
+ of similar magnitude. Ticket
+ <a href="https://www.sqlite.org/src/tktview?name=38a97a87a6">38a97a87a6</a>.
+<li>Fix an infinite-loop in the query planner that could occur on
+ malformed <a href="../lang_with.html">common table expressions</a>.
+<li>Various bug fixes in the <a href="../sqldiff.html">sqldiff</a> tool.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-01-06 11:01:07 fd0a50f0797d154fefff724624f00548b5320566"
+<li>SHA1 for sqlite3.c: b92ca988ebb6df02ac0c8f866dbf3256740408ac
+
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_10_1.html b/www/releaselog/3_10_1.html
new file mode 100644
index 0000000..5a753ec
--- /dev/null
+++ b/www/releaselog/3_10_1.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.10.1 On 2016-01-14</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.10.1 On 2016-01-14</h2><p><b>Changes in version 3.10.0 (2016-01-06):</b></p>
+<p><ol class='lessindent'>
+<p><b>General improvements:</b>
+<li value='1'>Added support for <a href="../lang_expr.html#like">LIKE</a>, <a href="../lang_expr.html#glob">GLOB</a>, and <a href="../lang_expr.html#regexp">REGEXP</a> operators on <a href="../vtab.html">virtual tables</a>.
+<li>Added the <a href="../vtab.html#colUsed">colUsed field</a> to <a href="../c3ref/index_info.html">sqlite3_index_info</a> for use by
+ the <a href="../vtab.html#xbestindex">sqlite3_module.xBestIndex</a> method.
+<li>Enhance the <a href="../pragma.html#pragma_cache_spill">PRAGMA cache_spill</a> statement to accept a 32-bit integer
+ parameter which is the threshold below which cache spilling is prohibited.
+<li>On unix, if a symlink to a database file is opened, then the corresponding
+ journal files are based on the actual filename, not the symlink name.
+<li>Added the "--transaction" option to <a href="../sqldiff.html">sqldiff</a>.
+<li>Added the <a href="../c3ref/db_cacheflush.html">sqlite3_db_cacheflush()</a> interface.
+<li>Added the <a href="../c3ref/strlike.html">sqlite3_strlike()</a> interface.
+<li>When using <a href="../mmap.html">memory-mapped I/O</a> map the database file read-only so that stray pointers
+ and/or array overruns in the application cannot accidentally modify the database file.
+<li>Added the <em>experimental</em> <a href="../c3ref/snapshot_get.html">sqlite3_snapshot_get()</a>, <a href="../c3ref/snapshot_open.html">sqlite3_snapshot_open()</a>,
+ and <a href="../c3ref/snapshot_free.html">sqlite3_snapshot_free()</a> interfaces. These are subject to change or removal in
+ a subsequent release.
+<li>Enhance the <a href="../lang_datefunc.html#localtime">'utc' modifier</a> in the <a href="../lang_datefunc.html">date and time functions</a> so that it is a no-op if
+ the date/time is known to already be in UTC. (This is not a compatibility break since
+ the behavior has long been documented as "undefined" in that case.)
+<li>Added the <a href="../json1.html#jgrouparray">json_group_array()</a> and <a href="../json1.html#jgroupobject">json_group_object()</a> SQL functions in the
+ <a href="../json1.html#jmini">json</a> extension.
+<li>Added the <a href="../compile.html#like_doesnt_match_blobs">SQLITE_LIKE_DOESNT_MATCH_BLOBS</a> compile-time option.
+<li>Many small performance optimizations.
+<p><b>Portability enhancements:</b>
+<li>Work around a sign-extension bug in the optimizer of the HP C compiler on HP/UX.
+ <a href="https://www.sqlite.org/src/fdiff?sbs=1&v1=869c95b0fc73026d&v2=232c242a0ccb3d67">(details)</a>
+<p><b>Enhancements to the <a href="../cli.html">command-line shell</a>:</b>
+<li>Added the ".changes ON|OFF" and ".vfsinfo" <a href="../cli.html#dotcmd">dot-commands</a>.
+<li>Translate between MBCS and UTF8 when
+ running in <a href="https://en.wikipedia.org/wiki/Cmd.exe">cmd.exe</a> on Windows.
+<p><b>Enhancements to makefiles:</b>
+<li>Added the --enable-editline and --enable-static-shell options
+ to the various autoconf-generated configure scripts.
+<li>Omit all use of "awk" in the makefiles, to make building easier for MSVC users.
+<p><b>Important fixes:</b>
+<li>Fix inconsistent integer to floating-point comparison operations that
+ could result in a corrupt index if the index is created on a table
+ column that contains both large integers and floating point values
+ of similar magnitude. Ticket
+ <a href="https://www.sqlite.org/src/tktview?name=38a97a87a6">38a97a87a6</a>.
+<li>Fix an infinite-loop in the query planner that could occur on
+ malformed <a href="../lang_with.html">common table expressions</a>.
+<li>Various bug fixes in the <a href="../sqldiff.html">sqldiff</a> tool.
+</ol>
+<p><b>Additional changes in version 3.10.1 (2016-01-14):</b></p>
+<p><ol class='lessindent'>
+<p><b>New feature:</b>
+<li value='22'>Add the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> file control.
+<p><b>Bug fix:</b>
+<li>Fix a 16-month-old bug in the query planner that could generate incorrect results
+ when a scalar subquery attempts to use the <a href="../queryplanner.html#partialsort">block sorting</a> optimization. Ticket
+ <a href="https://www.sqlite.org/src/info/cb3aa0641d9a4">cb3aa0641d9a4</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-01-13 21:41:56 254419c36766225ca542ae873ed38255e3fb8588"
+<li>SHA1 for sqlite3.c: 1398ba8e4043550a533cdd0834bfdad1c9eab0f4
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_10_2.html b/www/releaselog/3_10_2.html
new file mode 100644
index 0000000..bf7f9a1
--- /dev/null
+++ b/www/releaselog/3_10_2.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.10.2 On 2016-01-20</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.10.2 On 2016-01-20</h2><p><b>Changes in version 3.10.0 (2016-01-06):</b></p>
+<p><ol class='lessindent'>
+<p><b>General improvements:</b>
+<li value='1'>Added support for <a href="../lang_expr.html#like">LIKE</a>, <a href="../lang_expr.html#glob">GLOB</a>, and <a href="../lang_expr.html#regexp">REGEXP</a> operators on <a href="../vtab.html">virtual tables</a>.
+<li>Added the <a href="../vtab.html#colUsed">colUsed field</a> to <a href="../c3ref/index_info.html">sqlite3_index_info</a> for use by
+ the <a href="../vtab.html#xbestindex">sqlite3_module.xBestIndex</a> method.
+<li>Enhance the <a href="../pragma.html#pragma_cache_spill">PRAGMA cache_spill</a> statement to accept a 32-bit integer
+ parameter which is the threshold below which cache spilling is prohibited.
+<li>On unix, if a symlink to a database file is opened, then the corresponding
+ journal files are based on the actual filename, not the symlink name.
+<li>Added the "--transaction" option to <a href="../sqldiff.html">sqldiff</a>.
+<li>Added the <a href="../c3ref/db_cacheflush.html">sqlite3_db_cacheflush()</a> interface.
+<li>Added the <a href="../c3ref/strlike.html">sqlite3_strlike()</a> interface.
+<li>When using <a href="../mmap.html">memory-mapped I/O</a> map the database file read-only so that stray pointers
+ and/or array overruns in the application cannot accidentally modify the database file.
+<li>Added the <em>experimental</em> <a href="../c3ref/snapshot_get.html">sqlite3_snapshot_get()</a>, <a href="../c3ref/snapshot_open.html">sqlite3_snapshot_open()</a>,
+ and <a href="../c3ref/snapshot_free.html">sqlite3_snapshot_free()</a> interfaces. These are subject to change or removal in
+ a subsequent release.
+<li>Enhance the <a href="../lang_datefunc.html#localtime">'utc' modifier</a> in the <a href="../lang_datefunc.html">date and time functions</a> so that it is a no-op if
+ the date/time is known to already be in UTC. (This is not a compatibility break since
+ the behavior has long been documented as "undefined" in that case.)
+<li>Added the <a href="../json1.html#jgrouparray">json_group_array()</a> and <a href="../json1.html#jgroupobject">json_group_object()</a> SQL functions in the
+ <a href="../json1.html#jmini">json</a> extension.
+<li>Added the <a href="../compile.html#like_doesnt_match_blobs">SQLITE_LIKE_DOESNT_MATCH_BLOBS</a> compile-time option.
+<li>Many small performance optimizations.
+<p><b>Portability enhancements:</b>
+<li>Work around a sign-extension bug in the optimizer of the HP C compiler on HP/UX.
+ <a href="https://www.sqlite.org/src/fdiff?sbs=1&v1=869c95b0fc73026d&v2=232c242a0ccb3d67">(details)</a>
+<p><b>Enhancements to the <a href="../cli.html">command-line shell</a>:</b>
+<li>Added the ".changes ON|OFF" and ".vfsinfo" <a href="../cli.html#dotcmd">dot-commands</a>.
+<li>Translate between MBCS and UTF8 when
+ running in <a href="https://en.wikipedia.org/wiki/Cmd.exe">cmd.exe</a> on Windows.
+<p><b>Enhancements to makefiles:</b>
+<li>Added the --enable-editline and --enable-static-shell options
+ to the various autoconf-generated configure scripts.
+<li>Omit all use of "awk" in the makefiles, to make building easier for MSVC users.
+<p><b>Important fixes:</b>
+<li>Fix inconsistent integer to floating-point comparison operations that
+ could result in a corrupt index if the index is created on a table
+ column that contains both large integers and floating point values
+ of similar magnitude. Ticket
+ <a href="https://www.sqlite.org/src/tktview?name=38a97a87a6">38a97a87a6</a>.
+<li>Fix an infinite-loop in the query planner that could occur on
+ malformed <a href="../lang_with.html">common table expressions</a>.
+<li>Various bug fixes in the <a href="../sqldiff.html">sqldiff</a> tool.
+</ol>
+<p><b>Additional changes in version 3.10.1 (2016-01-14):</b></p>
+<p><ol class='lessindent'>
+<p><b>New feature:</b>
+<li value='22'>Add the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntljournalpointer">SQLITE_FCNTL_JOURNAL_POINTER</a> file control.
+<p><b>Bug fix:</b>
+<li>Fix a 16-month-old bug in the query planner that could generate incorrect results
+ when a scalar subquery attempts to use the <a href="../queryplanner.html#partialsort">block sorting</a> optimization. Ticket
+ <a href="https://www.sqlite.org/src/info/cb3aa0641d9a4">cb3aa0641d9a4</a>.
+</ol>
+<p><b>Additional changes in version 3.10.2 (2016-01-20):</b></p>
+<p><ol class='lessindent'>
+<p><b>Critical bug fix:</b>
+<li value='24'>Version 3.10.0 introduced a case-folding bug in the <a href="../lang_expr.html#like">LIKE</a> operator which is fixed
+ by this patch release. Ticket
+ <a href="https://www.sqlite.org/src/info/80369eddd5c94">80369eddd5c94</a>.
+<p><b>Other miscellaneous bug fixes:</b>
+<li>Fix a use-after-free that can occur when SQLite is compiled with -DSQLITE_HAS_CODEC.
+<li>Fix the build so that it works with -DSQLITE_OMIT_WAL.
+<li>Fix the configure script for the amalgamation so that the --readline option works again
+ on Raspberry PIs.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-01-20 15:27:19 17efb4209f97fb4971656086b138599a91a75ff9"
+<li>SHA1 for sqlite3.c: f7088b19d97cd7a1c805ee95c696abd54f01de4f
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_11_0.html b/www/releaselog/3_11_0.html
new file mode 100644
index 0000000..ca46f56
--- /dev/null
+++ b/www/releaselog/3_11_0.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.11.0 On 2016-02-15</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.11.0 On 2016-02-15</h2><p><ol class='lessindent'>
+<p><b>General improvements:</b>
+<li>Enhanced <a href="../wal.html">WAL mode</a> so that it works efficiently with transactions that are
+ larger than the <a href="../pragma.html#pragma_cache_size">cache_size</a>.
+<li>Added the <a href="../fts5.html#the_detail_option">FTS5 detail option</a>.
+<li>Added the "EXTRA" option to <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a> that does a sync of the
+ containing directory when a rollback journal is unlinked in DELETE mode,
+ for better durability. The <a href="../compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> compile-time option enables
+ <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous=EXTRA</a> by default.
+<li>Enhanced the <a href="../optoverview.html">query planner</a> so that it is able to use
+ a <a href="../queryplanner.html#covidx">covering index</a> as part of the <a href="../optoverview.html#or_opt">OR optimization</a>.
+<li>Avoid recomputing <a href="../lang_createtable.html#notnullconst">NOT NULL</a> and <a href="../lang_createtable.html#ckconst">CHECK constraints</a> on unchanged
+ columns in <a href="../lang_update.html">UPDATE</a> statement.
+<li>Many micro-optimizations, resulting in a library that is
+ faster than the previous release.
+<p><b>Enhancements to the <a href="../cli.html">command-line shell</a>:</b>
+<li>By default, the shell is now in "auto-explain" mode. The output of
+ <a href="../lang_explain.html">EXPLAIN</a> commands is automatically formatted.
+<li>Added the ".vfslist" <a href="../cli.html#dotcmd">dot-command</a>.
+<li>The <a href="../compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is now turned
+ on by default in the standard builds.
+<p><b>Enhancements to the <a href="../tclsqlite.html">TCL Interface</a>:</b>
+<li>If a database connection is opened with the "-uri 1" option, then
+ <a href="../uri.html">URI filenames</a> are honored by the "backup" and "restore" commands.
+<li>Added the "-sourceid" option to the "sqlite3" command.
+<p><b>Makefile improvements:</b>
+<li>Improved pthreads detection in configure scripts.
+<li>Add the ability to do MSVC Windows builds from the <a href="../download.html">amalgamation tarball</a>.
+<p><b>Bug fixes</b>
+<li>Fix an issue with incorrect sharing of VDBE temporary registers between
+ co-routines that could cause incorrect query results in obscure cases. Ticket
+ <a href="https://www.sqlite.org/src/info/d06a25c84454a">d06a25c84454a</a>.
+<li>Fix a problem in the <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a> interface that could
+ cause problems for the <a href="../json1.html">json1</a> extension under obscure circumstances.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f45ac567eaa9f9">f45ac567eaa9f9</a>.
+<li>Escape control characters in JSON strings. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/ad2559db380abf8">ad2559db380abf8</a>.
+<li>Reenable the xCurrentTime and xGetLastError methods in the built-in
+ unix <a href="../vfs.html">VFSes</a> as long as <a href="../compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a> is not defined.
+<p><b>Backwards Compatibility:</b>
+<li>Because of continuing security concerns, the two-argument version
+ of the seldom-used and little-known <a href="../fts3.html#f3tknzr">fts3_tokenizer()</a> function is
+ disabled unless SQLite is compiled with the <a href="../compile.html#enable_fts3_tokenizer">SQLITE_ENABLE_FTS3_TOKENIZER</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-02-15 17:29:24 3d862f207e3adc00f78066799ac5a8c282430a5f"
+<li>SHA1 for sqlite3.c: df01436c5fcfe72d1a95bc172158219796e1a90b
+
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_11_1.html b/www/releaselog/3_11_1.html
new file mode 100644
index 0000000..32698f3
--- /dev/null
+++ b/www/releaselog/3_11_1.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.11.1 On 2016-03-03</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.11.1 On 2016-03-03</h2><p><b>Changes in version 3.11.0 (2016-02-15):</b></p>
+<p><ol class='lessindent'>
+<p><b>General improvements:</b>
+<li value='1'>Enhanced <a href="../wal.html">WAL mode</a> so that it works efficiently with transactions that are
+ larger than the <a href="../pragma.html#pragma_cache_size">cache_size</a>.
+<li>Added the <a href="../fts5.html#the_detail_option">FTS5 detail option</a>.
+<li>Added the "EXTRA" option to <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a> that does a sync of the
+ containing directory when a rollback journal is unlinked in DELETE mode,
+ for better durability. The <a href="../compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> compile-time option enables
+ <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous=EXTRA</a> by default.
+<li>Enhanced the <a href="../optoverview.html">query planner</a> so that it is able to use
+ a <a href="../queryplanner.html#covidx">covering index</a> as part of the <a href="../optoverview.html#or_opt">OR optimization</a>.
+<li>Avoid recomputing <a href="../lang_createtable.html#notnullconst">NOT NULL</a> and <a href="../lang_createtable.html#ckconst">CHECK constraints</a> on unchanged
+ columns in <a href="../lang_update.html">UPDATE</a> statement.
+<li>Many micro-optimizations, resulting in a library that is
+ faster than the previous release.
+<p><b>Enhancements to the <a href="../cli.html">command-line shell</a>:</b>
+<li>By default, the shell is now in "auto-explain" mode. The output of
+ <a href="../lang_explain.html">EXPLAIN</a> commands is automatically formatted.
+<li>Added the ".vfslist" <a href="../cli.html#dotcmd">dot-command</a>.
+<li>The <a href="../compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is now turned
+ on by default in the standard builds.
+<p><b>Enhancements to the <a href="../tclsqlite.html">TCL Interface</a>:</b>
+<li>If a database connection is opened with the "-uri 1" option, then
+ <a href="../uri.html">URI filenames</a> are honored by the "backup" and "restore" commands.
+<li>Added the "-sourceid" option to the "sqlite3" command.
+<p><b>Makefile improvements:</b>
+<li>Improved pthreads detection in configure scripts.
+<li>Add the ability to do MSVC Windows builds from the <a href="../download.html">amalgamation tarball</a>.
+<p><b>Bug fixes</b>
+<li>Fix an issue with incorrect sharing of VDBE temporary registers between
+ co-routines that could cause incorrect query results in obscure cases. Ticket
+ <a href="https://www.sqlite.org/src/info/d06a25c84454a">d06a25c84454a</a>.
+<li>Fix a problem in the <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a> interface that could
+ cause problems for the <a href="../json1.html">json1</a> extension under obscure circumstances.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f45ac567eaa9f9">f45ac567eaa9f9</a>.
+<li>Escape control characters in JSON strings. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/ad2559db380abf8">ad2559db380abf8</a>.
+<li>Reenable the xCurrentTime and xGetLastError methods in the built-in
+ unix <a href="../vfs.html">VFSes</a> as long as <a href="../compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a> is not defined.
+<p><b>Backwards Compatibility:</b>
+<li>Because of continuing security concerns, the two-argument version
+ of the seldom-used and little-known <a href="../fts3.html#f3tknzr">fts3_tokenizer()</a> function is
+ disabled unless SQLite is compiled with the <a href="../compile.html#enable_fts3_tokenizer">SQLITE_ENABLE_FTS3_TOKENIZER</a>.
+</ol>
+<p><b>Additional changes in version 3.11.1 (2016-03-03):</b></p>
+<p><ol class='lessindent'>
+<li value='19'>Improvements to the Makefiles and build scripts used by VisualStudio.
+<li>Fix an <a href="../fts5.html">FTS5</a> issue in which the 'optimize' command could cause index corruption.
+<li>Fix a buffer overread that might occur if <a href="../fts5.html">FTS5</a> is used to query a corrupt
+ database file.
+<li>Increase the maximum "scope" value for the <a href="../spellfix1.html">spellfix1</a> extension from 6 to 30.
+<li>SQLITE_SOURCE_ID: "2016-03-03 16:17:53 f047920ce16971e573bc6ec9a48b118c9de2b3a7"
+<li>SHA1 for sqlite3.c: 3da832fd2af36eaedb05d61a8f4c2bb9f3d54265
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_12_0.html b/www/releaselog/3_12_0.html
new file mode 100644
index 0000000..e6cfd19
--- /dev/null
+++ b/www/releaselog/3_12_0.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.12.0 On 2016-03-29</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.12.0 On 2016-03-29</h2><p><ol class='lessindent'>
+<p><b>Potentially Disruptive Change:</b>
+<li>The <a href="../compile.html#default_page_size">SQLITE_DEFAULT_PAGE_SIZE</a> is increased from 1024 to 4096.
+ The <a href="../compile.html#default_cache_size">SQLITE_DEFAULT_CACHE_SIZE</a> is changed from 2000 to -2000 so
+ the same amount of cache memory is used by default.
+ See the application note on the
+ <a href="../pgszchng2016.html">version 3.12.0 page size change</a> for further information.
+<p><b>Performance enhancements:</b>
+<li>Enhancements to the <a href="../lemon.html">Lemon parser generator</a>
+ so that it creates a smaller and faster SQL parser.
+<li>Only create <a href="../tempfiles.html#superjrnl">master journal</a> files if two or more attached databases are all
+ modified, do not have <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF, and
+ do not have the <a href="../pragma.html#pragma_journal_mode">journal_mode</a> set to OFF, MEMORY, or WAL.
+<li>Only create <a href="../tempfiles.html#stmtjrnl">statement journal</a> files when their size exceeds a threshold.
+ Otherwise the journal is held in memory and no I/O occurs. The threshold
+ can be configured at compile-time using <a href="../compile.html#stmtjrnl_spill">SQLITE_STMTJRNL_SPILL</a> or at
+ start-time using <a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">SQLITE_CONFIG_STMTJRNL_SPILL</a>).
+<li>The query planner is able to optimize IN operators on <a href="../vtab.html">virtual tables</a>
+ even if the <a href="../vtab.html#xbestindex">xBestIndex</a> method does not set the
+ sqlite3_index_constraint_usage.omit flag of the
+ virtual table column to the left of the IN operator.
+<li>The query planner now does a better job of optimizing <a href="../vtab.html">virtual table</a>
+ accesses in a 3-way or higher join where constraints on the virtual
+ table are split across two or more other tables of the join.
+<li>More efficient handling of <a href="../appfunc.html">application-defined SQL functions</a>, especially
+ in cases where the application defines hundreds or thousands of
+ custom functions.
+<li>The query planner considers the LIMIT clause when estimating the cost
+ of ORDER BY.
+<li>The configure script (on unix) automatically detects
+ pread() and pwrite() and sets compile-time options to use those OS
+ interfaces if they are available.
+<li>Reduce the amount of memory needed to hold the schema.
+<li>Other miscellaneous micro-optimizations for improved performance and reduced
+ memory usage.
+<p><b>New Features:</b>
+<li>Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a> option to <a href="../c3ref/db_config.html">sqlite3_db_config()</a>
+ which allows the two-argument version of the <a href="../fts3.html#f3tknzr">fts3_tokenizer()</a> SQL function to
+ be enabled or disabled at run-time.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/d7cc99350?ln=403-443">sqlite3rbu_bp_progress()</a>
+ interface to the <a href="../rbu.html">RBU</a> extension.
+<li>The <a href="../pragma.html#pragma_defer_foreign_keys">PRAGMA defer_foreign_keys=ON</a> statement now also disables
+ <a href="../foreignkeys.html#fk_actions">RESTRICT actions</a> on foreign key.
+<li>Added the <a href="../c3ref/system_errno.html">sqlite3_system_errno()</a> interface.
+<li>Added the <a href="../compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> and <a href="../compile.html#default_wal_synchronous">SQLITE_DEFAULT_WAL_SYNCHRONOUS</a>
+ compile-time options. The <a href="../compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> compile-time option
+ replaces the <a href="../compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> option, which is no longer supported.
+<li>Enhanced the ".stats" command in the <a href="../cli.html">command-line shell</a> to show more
+ information about I/O performance obtained from /proc, when available.
+<p><b>Bug fixes:</b>
+<li>Make sure the <a href="../c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> values from multiple triggers
+ within a single statement do not interfere with one another.
+ Ticket <a href="https://www.sqlite.org/src/info/dc9b1c91">dc9b1c91</a>.
+<li>Fix the code generator for expressions of the form "x IN (SELECT...)" where
+ the SELECT statement on the RHS is a correlated subquery.
+ Ticket <a href="https://www.sqlite.org/src/info/5e3c886796e5512e">5e3c886796e5512e</a>.
+<li>Fix a harmless TSAN warning associated with the <a href="../c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-03-29 10:14:15 e9bb4cf40f4971974a74468ef922bdee481c988b"
+<li>SHA1 for sqlite3.c: cba2be96d27cb51978cd4a200397a4ad178986eb
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_12_1.html b/www/releaselog/3_12_1.html
new file mode 100644
index 0000000..6f5fee7
--- /dev/null
+++ b/www/releaselog/3_12_1.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.12.1 On 2016-04-08</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.12.1 On 2016-04-08</h2><p><b>Changes in version 3.12.0 (2016-03-29):</b></p>
+<p><ol class='lessindent'>
+<p><b>Potentially Disruptive Change:</b>
+<li value='1'>The <a href="../compile.html#default_page_size">SQLITE_DEFAULT_PAGE_SIZE</a> is increased from 1024 to 4096.
+ The <a href="../compile.html#default_cache_size">SQLITE_DEFAULT_CACHE_SIZE</a> is changed from 2000 to -2000 so
+ the same amount of cache memory is used by default.
+ See the application note on the
+ <a href="../pgszchng2016.html">version 3.12.0 page size change</a> for further information.
+<p><b>Performance enhancements:</b>
+<li>Enhancements to the <a href="../lemon.html">Lemon parser generator</a>
+ so that it creates a smaller and faster SQL parser.
+<li>Only create <a href="../tempfiles.html#superjrnl">master journal</a> files if two or more attached databases are all
+ modified, do not have <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF, and
+ do not have the <a href="../pragma.html#pragma_journal_mode">journal_mode</a> set to OFF, MEMORY, or WAL.
+<li>Only create <a href="../tempfiles.html#stmtjrnl">statement journal</a> files when their size exceeds a threshold.
+ Otherwise the journal is held in memory and no I/O occurs. The threshold
+ can be configured at compile-time using <a href="../compile.html#stmtjrnl_spill">SQLITE_STMTJRNL_SPILL</a> or at
+ start-time using <a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">SQLITE_CONFIG_STMTJRNL_SPILL</a>).
+<li>The query planner is able to optimize IN operators on <a href="../vtab.html">virtual tables</a>
+ even if the <a href="../vtab.html#xbestindex">xBestIndex</a> method does not set the
+ sqlite3_index_constraint_usage.omit flag of the
+ virtual table column to the left of the IN operator.
+<li>The query planner now does a better job of optimizing <a href="../vtab.html">virtual table</a>
+ accesses in a 3-way or higher join where constraints on the virtual
+ table are split across two or more other tables of the join.
+<li>More efficient handling of <a href="../appfunc.html">application-defined SQL functions</a>, especially
+ in cases where the application defines hundreds or thousands of
+ custom functions.
+<li>The query planner considers the LIMIT clause when estimating the cost
+ of ORDER BY.
+<li>The configure script (on unix) automatically detects
+ pread() and pwrite() and sets compile-time options to use those OS
+ interfaces if they are available.
+<li>Reduce the amount of memory needed to hold the schema.
+<li>Other miscellaneous micro-optimizations for improved performance and reduced
+ memory usage.
+<p><b>New Features:</b>
+<li>Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a> option to <a href="../c3ref/db_config.html">sqlite3_db_config()</a>
+ which allows the two-argument version of the <a href="../fts3.html#f3tknzr">fts3_tokenizer()</a> SQL function to
+ be enabled or disabled at run-time.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/d7cc99350?ln=403-443">sqlite3rbu_bp_progress()</a>
+ interface to the <a href="../rbu.html">RBU</a> extension.
+<li>The <a href="../pragma.html#pragma_defer_foreign_keys">PRAGMA defer_foreign_keys=ON</a> statement now also disables
+ <a href="../foreignkeys.html#fk_actions">RESTRICT actions</a> on foreign key.
+<li>Added the <a href="../c3ref/system_errno.html">sqlite3_system_errno()</a> interface.
+<li>Added the <a href="../compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> and <a href="../compile.html#default_wal_synchronous">SQLITE_DEFAULT_WAL_SYNCHRONOUS</a>
+ compile-time options. The <a href="../compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> compile-time option
+ replaces the <a href="../compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> option, which is no longer supported.
+<li>Enhanced the ".stats" command in the <a href="../cli.html">command-line shell</a> to show more
+ information about I/O performance obtained from /proc, when available.
+<p><b>Bug fixes:</b>
+<li>Make sure the <a href="../c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> values from multiple triggers
+ within a single statement do not interfere with one another.
+ Ticket <a href="https://www.sqlite.org/src/info/dc9b1c91">dc9b1c91</a>.
+<li>Fix the code generator for expressions of the form "x IN (SELECT...)" where
+ the SELECT statement on the RHS is a correlated subquery.
+ Ticket <a href="https://www.sqlite.org/src/info/5e3c886796e5512e">5e3c886796e5512e</a>.
+<li>Fix a harmless TSAN warning associated with the <a href="../c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
+</ol>
+<p><b>Additional changes in version 3.12.1 (2016-04-08):</b></p>
+<p><ol class='lessindent'>
+<li value='21'>Fix a boundary condition error introduced by version 3.12.0
+ that can result in a crash during heavy <a href="../lang_savepoint.html">SAVEPOINT</a> usage.
+ Ticket <a href="https://www.sqlite.org/src/info/7f7f8026eda38">7f7f8026eda38</a>.
+<li>Fix <a href="../lang_createview.html">views</a> so that they inherit column datatypes from the
+ table that they are defined against, when possible.
+<li>Fix the query planner so that IS and IS NULL operators are able
+ to drive an index on a LEFT OUTER JOIN.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-04-08 15:09:49 fe7d3b75fe1bde41511b323925af8ae1b910bc4d"
+<li>SHA1 for sqlite3.c: ebb18593350779850e3e1a930eb84a70fca8c1d1
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_12_2.html b/www/releaselog/3_12_2.html
new file mode 100644
index 0000000..7bf0984
--- /dev/null
+++ b/www/releaselog/3_12_2.html
@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.12.2 On 2016-04-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.12.2 On 2016-04-18</h2><p><b>Changes in version 3.12.0 (2016-03-29):</b></p>
+<p><ol class='lessindent'>
+<p><b>Potentially Disruptive Change:</b>
+<li value='1'>The <a href="../compile.html#default_page_size">SQLITE_DEFAULT_PAGE_SIZE</a> is increased from 1024 to 4096.
+ The <a href="../compile.html#default_cache_size">SQLITE_DEFAULT_CACHE_SIZE</a> is changed from 2000 to -2000 so
+ the same amount of cache memory is used by default.
+ See the application note on the
+ <a href="../pgszchng2016.html">version 3.12.0 page size change</a> for further information.
+<p><b>Performance enhancements:</b>
+<li>Enhancements to the <a href="../lemon.html">Lemon parser generator</a>
+ so that it creates a smaller and faster SQL parser.
+<li>Only create <a href="../tempfiles.html#superjrnl">master journal</a> files if two or more attached databases are all
+ modified, do not have <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF, and
+ do not have the <a href="../pragma.html#pragma_journal_mode">journal_mode</a> set to OFF, MEMORY, or WAL.
+<li>Only create <a href="../tempfiles.html#stmtjrnl">statement journal</a> files when their size exceeds a threshold.
+ Otherwise the journal is held in memory and no I/O occurs. The threshold
+ can be configured at compile-time using <a href="../compile.html#stmtjrnl_spill">SQLITE_STMTJRNL_SPILL</a> or at
+ start-time using <a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">SQLITE_CONFIG_STMTJRNL_SPILL</a>).
+<li>The query planner is able to optimize IN operators on <a href="../vtab.html">virtual tables</a>
+ even if the <a href="../vtab.html#xbestindex">xBestIndex</a> method does not set the
+ sqlite3_index_constraint_usage.omit flag of the
+ virtual table column to the left of the IN operator.
+<li>The query planner now does a better job of optimizing <a href="../vtab.html">virtual table</a>
+ accesses in a 3-way or higher join where constraints on the virtual
+ table are split across two or more other tables of the join.
+<li>More efficient handling of <a href="../appfunc.html">application-defined SQL functions</a>, especially
+ in cases where the application defines hundreds or thousands of
+ custom functions.
+<li>The query planner considers the LIMIT clause when estimating the cost
+ of ORDER BY.
+<li>The configure script (on unix) automatically detects
+ pread() and pwrite() and sets compile-time options to use those OS
+ interfaces if they are available.
+<li>Reduce the amount of memory needed to hold the schema.
+<li>Other miscellaneous micro-optimizations for improved performance and reduced
+ memory usage.
+<p><b>New Features:</b>
+<li>Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a> option to <a href="../c3ref/db_config.html">sqlite3_db_config()</a>
+ which allows the two-argument version of the <a href="../fts3.html#f3tknzr">fts3_tokenizer()</a> SQL function to
+ be enabled or disabled at run-time.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/d7cc99350?ln=403-443">sqlite3rbu_bp_progress()</a>
+ interface to the <a href="../rbu.html">RBU</a> extension.
+<li>The <a href="../pragma.html#pragma_defer_foreign_keys">PRAGMA defer_foreign_keys=ON</a> statement now also disables
+ <a href="../foreignkeys.html#fk_actions">RESTRICT actions</a> on foreign key.
+<li>Added the <a href="../c3ref/system_errno.html">sqlite3_system_errno()</a> interface.
+<li>Added the <a href="../compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> and <a href="../compile.html#default_wal_synchronous">SQLITE_DEFAULT_WAL_SYNCHRONOUS</a>
+ compile-time options. The <a href="../compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> compile-time option
+ replaces the <a href="../compile.html#extra_durable">SQLITE_EXTRA_DURABLE</a> option, which is no longer supported.
+<li>Enhanced the ".stats" command in the <a href="../cli.html">command-line shell</a> to show more
+ information about I/O performance obtained from /proc, when available.
+<p><b>Bug fixes:</b>
+<li>Make sure the <a href="../c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> values from multiple triggers
+ within a single statement do not interfere with one another.
+ Ticket <a href="https://www.sqlite.org/src/info/dc9b1c91">dc9b1c91</a>.
+<li>Fix the code generator for expressions of the form "x IN (SELECT...)" where
+ the SELECT statement on the RHS is a correlated subquery.
+ Ticket <a href="https://www.sqlite.org/src/info/5e3c886796e5512e">5e3c886796e5512e</a>.
+<li>Fix a harmless TSAN warning associated with the <a href="../c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
+</ol>
+<p><b>Additional changes in version 3.12.1 (2016-04-08):</b></p>
+<p><ol class='lessindent'>
+<li value='21'>Fix a boundary condition error introduced by version 3.12.0
+ that can result in a crash during heavy <a href="../lang_savepoint.html">SAVEPOINT</a> usage.
+ Ticket <a href="https://www.sqlite.org/src/info/7f7f8026eda38">7f7f8026eda38</a>.
+<li>Fix <a href="../lang_createview.html">views</a> so that they inherit column datatypes from the
+ table that they are defined against, when possible.
+<li>Fix the query planner so that IS and IS NULL operators are able
+ to drive an index on a LEFT OUTER JOIN.
+</ol>
+<p><b>Additional changes in version 3.12.2 (2016-04-18):</b></p>
+<p><ol class='lessindent'>
+<li value='24'>Fix a backwards compatibility problem in version 3.12.0 and 3.12.1:
+ Columns declared as <tt>"INTEGER" PRIMARY KEY</tt> (with quotes around
+ the datatype keyword) were not being recognized as an
+ <a href="../lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, which resulted in an incompatible database file.
+ Ticket <a href="https://www.sqlite.org/src/info/7d7525cb01b68">7d7525cb01b68</a>
+<li>Fix a bug (present since <a href="../releaselog/3_9_0.html">version 3.9.0</a>) that can cause the <a href="../lang_delete.html">DELETE</a>
+ operation to miss rows if <a href="../pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> is turned on.
+ Ticket <a href="https://www.sqlite.org/src/info/a306e56ff68b8fa5">a306e56ff68b8fa5</a>
+<li>Fix a bug in the code generator that can cause incorrect results if
+ two or more <a href="../vtab.html">virtual tables</a> are joined and the virtual table used in
+ outer loop of the join has an <a href="../lang_expr.html#in_op">IN operator</a> constraint.
+<li>Correctly interpret negative "PRAGMA cache_size" values when determining
+ the cache size used for sorting large amounts of data.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-04-18 17:30:31 92dc59fd5ad66f646666042eb04195e3a61a9e8e"
+<li>SHA1 for sqlite3.c: de5a5898ebd3a3477d4652db143746d008b24c83
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_13_0.html b/www/releaselog/3_13_0.html
new file mode 100644
index 0000000..62b09fb
--- /dev/null
+++ b/www/releaselog/3_13_0.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.13.0 On 2016-05-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.13.0 On 2016-05-18</h2><p><ol class='lessindent'>
+<li>Postpone I/O associated with TEMP files for as long as possible, with the hope
+ that the I/O can ultimately be avoided completely.
+<li>Merged the <a href="../sessionintro.html">session</a> extension into trunk.
+<li>Added the ".auth ON|OFF" command to the <a href="../cli.html">command-line shell</a>.
+<li>Added the "--indent" option to the ".schema" and ".fullschema" commands of
+ the <a href="../cli.html">command-line shell</a>, to turn on pretty-printing.
+<li>Added the ".eqp full" option to the <a href="../cli.html">command-line shell</a>, that does both <a href="../lang_explain.html">EXPLAIN</a>
+ and <a href="../eqp.html">EXPLAIN QUERY PLAN</a> on each statement that is evaluated.
+<li>Improved unicode filename handling in the <a href="../cli.html">command-line shell</a> on Windows.
+<li>Improved resistance against goofy query planner decisions caused by
+ incomplete or incorrect modifications to the <a href="../fileformat2.html#stat1tab">sqlite_stat1</a>
+ table by the application.
+<li>Added the <a href="../c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableloadextension">SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION</a>) interface
+ which allows the <a href="../c3ref/load_extension.html">sqlite3_load_extension()</a> C-API to be enabled while keeping the
+ <a href="../lang_corefunc.html#load_extension">load_extension()</a> SQL function disabled for security.
+<li>Change the <a href="../tempfiles.html#tempdir">temporary directory search algorithm</a> on Unix to allow directories with
+ write and execute permission, but without read permission, to serve as temporary
+ directories. Apply this same standard to the "." fallback directory.
+<p><b>Bug Fixes:</b>
+<li>Fix a problem with the multi-row one-pass DELETE optimization that was
+ causing it to compute incorrect answers with a self-referential subquery in
+ the WHERE clause. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/dc6ebeda9396087">dc6ebeda9396087</a>
+<li>Fix a possible segfault with DELETE when table is a <a href="../rowidtable.html">rowid table</a> with an
+ <a href="../lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> and the WHERE clause contains a OR and
+ the table has one or more indexes that are able to trigger the OR optimization,
+ but none of the indexes reference any table columns other than the INTEGER PRIMARY KEY.
+ Ticket <a href="https://www.sqlite.org/src/info/16c9801ceba49">16c9801ceba49</a>.
+<li>When checking for the WHERE-clause push-down optimization, verify that all terms
+ of the compound inner SELECT are non-aggregate, not just the last term. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f7f8c97e97597">f7f8c97e97597</a>.
+<li>Fix a locking race condition in Windows that can occur when two or more processes
+ attempt to recover the same <a href="../fileformat2.html#hotjrnl">hot journal</a> at the same time.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-05-18 10:57:30 fc49f556e48970561d7ab6a2f24fdd7d9eb81ff2"
+<li>SHA1 for sqlite3.c: 9b9171b1e6ce7a980e6b714e9c0d9112657ad552
+
+<p><b>Bug fixes backported into patch release 3.12.2 (2016-04-18):</b></p>
+
+<li>Fix a backwards compatibility problem in version 3.12.0 and 3.12.1:
+ Columns declared as <tt>"INTEGER" PRIMARY KEY</tt> (with quotes around
+ the datatype keyword) were not being recognized as an
+ <a href="../lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, which resulted in an incompatible database file.
+ Ticket <a href="https://www.sqlite.org/src/info/7d7525cb01b68">7d7525cb01b68</a>
+<li>Fix a bug (present since <a href="../releaselog/3_9_0.html">version 3.9.0</a>) that can cause the <a href="../lang_delete.html">DELETE</a>
+ operation to miss rows if <a href="../pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> is turned on.
+ Ticket <a href="https://www.sqlite.org/src/info/a306e56ff68b8fa5">a306e56ff68b8fa5</a>
+<li>Fix a bug in the code generator that can cause incorrect results if
+ two or more <a href="../vtab.html">virtual tables</a> are joined and the virtual table used in
+ outer loop of the join has an <a href="../lang_expr.html#in_op">IN operator</a> constraint.
+<li>Correctly interpret negative "PRAGMA cache_size" values when determining
+ the cache size used for sorting large amounts of data.
+
+<p><b>Bug fixes backported into patch release 3.12.1 (2016-04-08):</b></p>
+
+<li>Fix a boundary condition error introduced by version 3.12.0
+ that can result in a crash during heavy <a href="../lang_savepoint.html">SAVEPOINT</a> usage.
+ Ticket <a href="https://www.sqlite.org/src/info/7f7f8026eda38">7f7f8026eda38</a>.
+<li>Fix <a href="../lang_createview.html">views</a> so that they inherit column datatypes from the
+ table that they are defined against, when possible.
+<li>Fix the query planner so that IS and IS NULL operators are able
+ to drive an index on a LEFT OUTER JOIN.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_14.html b/www/releaselog/3_14.html
new file mode 100644
index 0000000..285753f
--- /dev/null
+++ b/www/releaselog/3_14.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.14 On 2016-08-08</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.14 On 2016-08-08</h2><p><ol class='lessindent'>
+<div style="width:280px;float:right;padding:10px;margin:0px 10px;">
+<img src='../images/sqlitepie.jpg' width=280 height=250></img><br>
+<center>Celebrating the SQLite "<big>&pi;</big> release"
+with a home-baked pie.</center>
+</div>
+<li>Added support for <a href="../vtab.html#worid">WITHOUT ROWID virtual tables</a>.
+<li>Improved the query planner so that the <a href="../optoverview.html#or_opt">OR optimization</a> can
+ be used on <a href="../vtab.html">virtual tables</a> even if one or more of the disjuncts
+ use the <a href="../lang_expr.html#like">LIKE</a>, <a href="../lang_expr.html#glob">GLOB</a>, <a href="../lang_expr.html#regexp">REGEXP</a>, <a href="../lang_expr.html#match">MATCH</a> operators.
+<li>Added the <a href="../csv.html">CSV virtual table</a> for reading
+ <a href="https://www.ietf.org/rfc/rfc4180.txt">RFC 4180</a> formatted comma-separated
+ value files.
+<li>Added the <a href="../carray.html">carray() table-valued function</a> extension.
+<li>Enabled <a href="../loadext.html#persist">persistent loadable extensions</a> using the new
+ <a href="../rescode.html#ok_load_permanently">SQLITE_OK_LOAD_PERMANENTLY</a> return code from the extension
+ entry point.
+<li>Added the <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared">SQLITE_DBSTATUS_CACHE_USED_SHARED</a> option to <a href="../c3ref/db_status.html">sqlite3_db_status()</a>.
+<li>Add the
+ <a href="https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/vfsstat.c">vfsstat.c</a>
+ loadable extension - a VFS shim that measures I/O
+ together with an <a href="../vtab.html#epovtab">eponymous virtual table</a> that provides access to the measurements.
+<li>Improved algorithm for running queries with both an ORDER BY and a LIMIT where
+ only the inner-most loop naturally generates rows in the correct order.
+<li>Enhancements to <a href="../lemon.html">Lemon parser generator</a>, so that it generates a
+ faster parser.
+<li>The <a href="../pragma.html#pragma_compile_options">PRAGMA compile_options</a> command now attempts to show the version number
+ of the compiler that generated the library.
+<li>Enhance <a href="../pragma.html#pragma_table_info">PRAGMA table_info</a> so that it provides information about
+ <a href="../vtab.html#epovtab">eponymous virtual tables</a>.
+<li>Added the "win32-none" VFS, analogous to the "unix-none" VFS, that works like
+ the default "win32" VFS except that it ignores all file locks.
+<li>The query planner uses a full scan of a <a href="../partialindex.html">partial index</a> instead of a
+ full scan of the main table, in cases where that makes sense.
+<li>Allow <a href="../vtab.html#tabfunc2">table-valued functions</a> to appear on the right-hand side of an <a href="../lang_expr.html#in_op">IN operator</a>.
+<li>Created the <a href="../dbhash.html">dbhash.exe</a> command-line utility.
+<li>Added two new C-language interfaces: <a href="../c3ref/expanded_sql.html">sqlite3_expanded_sql()</a> and
+ <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a>. These new interfaces subsume the functions of
+ <a href="../c3ref/profile.html">sqlite3_trace()</a> and <a href="../c3ref/profile.html">sqlite3_profile()</a> which are now deprecated.
+<li>Added the <a href="../json1.html#jquote">json_quote()</a> SQL function to <a href="../json1.html">the json1 extension</a>.
+<li>Disable the <a href="../c3ref/set_authorizer.html">authorizer callback</a> while reparsing the schema.
+<li>Added the <a href="../compile.html#enable_unknown_sql_function">SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</a> compile-time option and turned that
+ option on by default when building the <a href="../cli.html">command-line shell</a>.
+<p><b>Bug Fixes:</b>
+<li>Fix the <a href="../lang_altertable.html">ALTER TABLE</a> command so that it does not corrupt <a href="../lang_createindex.html#descidx">descending indexes</a>
+ when adding a column to a <a href="../pragma.html#pragma_legacy_file_format">legacy file format</a> database. Ticket
+ <a href="https://www.sqlite.org/src/info/f68bf68513a1c15f">f68bf68513a1c15f</a>
+<li>Fix a NULL-pointer dereference/crash that could occurs when a transitive WHERE
+ clause references a non-existent collating sequence. Ticket
+ <a href="https://www.sqlite.org/src/info/e8d439c77685eca6">e8d439c77685eca6</a>.
+<li>Improved the cost estimation for an index scan which includes a WHERE clause
+ that can be partially or fully evaluated using columns in the index and without
+ having to do a table lookup. This fixes a performance regression that occurred
+ for some obscure queries following the ORDER BY LIMIT optimization introduced
+ in <a href="../releaselog/3_12_0.html">version 3.12.0</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-08-08 13:40:27 d5e98057028abcf7217d0d2b2e29bbbcdf09d6de"
+<li>SHA1 for sqlite3.c: 234a3275d03a287434ace3ccdf1afb208e6b0e92
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_14_1.html b/www/releaselog/3_14_1.html
new file mode 100644
index 0000000..ffdd750
--- /dev/null
+++ b/www/releaselog/3_14_1.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.14.1 On 2016-08-11</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.14.1 On 2016-08-11</h2><p><b>Changes in version 3.14 (2016-08-08):</b></p>
+<p><ol class='lessindent'>
+<div style="width:280px;float:right;padding:10px;margin:0px 10px;">
+<img src='../images/sqlitepie.jpg' width=280 height=250></img><br>
+<center>Celebrating the SQLite "<big>&pi;</big> release"
+with a home-baked pie.</center>
+</div>
+<li value='1'>Added support for <a href="../vtab.html#worid">WITHOUT ROWID virtual tables</a>.
+<li>Improved the query planner so that the <a href="../optoverview.html#or_opt">OR optimization</a> can
+ be used on <a href="../vtab.html">virtual tables</a> even if one or more of the disjuncts
+ use the <a href="../lang_expr.html#like">LIKE</a>, <a href="../lang_expr.html#glob">GLOB</a>, <a href="../lang_expr.html#regexp">REGEXP</a>, <a href="../lang_expr.html#match">MATCH</a> operators.
+<li>Added the <a href="../csv.html">CSV virtual table</a> for reading
+ <a href="https://www.ietf.org/rfc/rfc4180.txt">RFC 4180</a> formatted comma-separated
+ value files.
+<li>Added the <a href="../carray.html">carray() table-valued function</a> extension.
+<li>Enabled <a href="../loadext.html#persist">persistent loadable extensions</a> using the new
+ <a href="../rescode.html#ok_load_permanently">SQLITE_OK_LOAD_PERMANENTLY</a> return code from the extension
+ entry point.
+<li>Added the <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared">SQLITE_DBSTATUS_CACHE_USED_SHARED</a> option to <a href="../c3ref/db_status.html">sqlite3_db_status()</a>.
+<li>Add the
+ <a href="https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/vfsstat.c">vfsstat.c</a>
+ loadable extension - a VFS shim that measures I/O
+ together with an <a href="../vtab.html#epovtab">eponymous virtual table</a> that provides access to the measurements.
+<li>Improved algorithm for running queries with both an ORDER BY and a LIMIT where
+ only the inner-most loop naturally generates rows in the correct order.
+<li>Enhancements to <a href="../lemon.html">Lemon parser generator</a>, so that it generates a
+ faster parser.
+<li>The <a href="../pragma.html#pragma_compile_options">PRAGMA compile_options</a> command now attempts to show the version number
+ of the compiler that generated the library.
+<li>Enhance <a href="../pragma.html#pragma_table_info">PRAGMA table_info</a> so that it provides information about
+ <a href="../vtab.html#epovtab">eponymous virtual tables</a>.
+<li>Added the "win32-none" VFS, analogous to the "unix-none" VFS, that works like
+ the default "win32" VFS except that it ignores all file locks.
+<li>The query planner uses a full scan of a <a href="../partialindex.html">partial index</a> instead of a
+ full scan of the main table, in cases where that makes sense.
+<li>Allow <a href="../vtab.html#tabfunc2">table-valued functions</a> to appear on the right-hand side of an <a href="../lang_expr.html#in_op">IN operator</a>.
+<li>Created the <a href="../dbhash.html">dbhash.exe</a> command-line utility.
+<li>Added two new C-language interfaces: <a href="../c3ref/expanded_sql.html">sqlite3_expanded_sql()</a> and
+ <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a>. These new interfaces subsume the functions of
+ <a href="../c3ref/profile.html">sqlite3_trace()</a> and <a href="../c3ref/profile.html">sqlite3_profile()</a> which are now deprecated.
+<li>Added the <a href="../json1.html#jquote">json_quote()</a> SQL function to <a href="../json1.html">the json1 extension</a>.
+<li>Disable the <a href="../c3ref/set_authorizer.html">authorizer callback</a> while reparsing the schema.
+<li>Added the <a href="../compile.html#enable_unknown_sql_function">SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</a> compile-time option and turned that
+ option on by default when building the <a href="../cli.html">command-line shell</a>.
+<p><b>Bug Fixes:</b>
+<li>Fix the <a href="../lang_altertable.html">ALTER TABLE</a> command so that it does not corrupt <a href="../lang_createindex.html#descidx">descending indexes</a>
+ when adding a column to a <a href="../pragma.html#pragma_legacy_file_format">legacy file format</a> database. Ticket
+ <a href="https://www.sqlite.org/src/info/f68bf68513a1c15f">f68bf68513a1c15f</a>
+<li>Fix a NULL-pointer dereference/crash that could occurs when a transitive WHERE
+ clause references a non-existent collating sequence. Ticket
+ <a href="https://www.sqlite.org/src/info/e8d439c77685eca6">e8d439c77685eca6</a>.
+<li>Improved the cost estimation for an index scan which includes a WHERE clause
+ that can be partially or fully evaluated using columns in the index and without
+ having to do a table lookup. This fixes a performance regression that occurred
+ for some obscure queries following the ORDER BY LIMIT optimization introduced
+ in <a href="../releaselog/3_12_0.html">version 3.12.0</a>.
+</ol>
+<p><b>Additional changes in version 3.14.1 (2016-08-11):</b></p>
+<p><ol class='lessindent'>
+<li value='23'>A performance enhancement to the page-cache "truncate" operation
+ reduces <a href="../lang_transaction.html">COMMIT</a> time by dozens of milliseconds on systems with a
+ large <a href="../pragma.html#pragma_cache_size">page cache</a>.
+<li>Fix to the --rbu option of <a href="../sqldiff.html">sqldiff</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-08-11 18:53:32 a12d8059770df4bca59e321c266410344242bf7b"
+<li>SHA1 for sqlite3.c: d545b24892278272ce4e40e0567d69c8babf12ea
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_14_2.html b/www/releaselog/3_14_2.html
new file mode 100644
index 0000000..80015ed
--- /dev/null
+++ b/www/releaselog/3_14_2.html
@@ -0,0 +1,211 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.14.2 On 2016-09-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.14.2 On 2016-09-12</h2><p><b>Changes in version 3.14 (2016-08-08):</b></p>
+<p><ol class='lessindent'>
+<div style="width:280px;float:right;padding:10px;margin:0px 10px;">
+<img src='../images/sqlitepie.jpg' width=280 height=250></img><br>
+<center>Celebrating the SQLite "<big>&pi;</big> release"
+with a home-baked pie.</center>
+</div>
+<li value='1'>Added support for <a href="../vtab.html#worid">WITHOUT ROWID virtual tables</a>.
+<li>Improved the query planner so that the <a href="../optoverview.html#or_opt">OR optimization</a> can
+ be used on <a href="../vtab.html">virtual tables</a> even if one or more of the disjuncts
+ use the <a href="../lang_expr.html#like">LIKE</a>, <a href="../lang_expr.html#glob">GLOB</a>, <a href="../lang_expr.html#regexp">REGEXP</a>, <a href="../lang_expr.html#match">MATCH</a> operators.
+<li>Added the <a href="../csv.html">CSV virtual table</a> for reading
+ <a href="https://www.ietf.org/rfc/rfc4180.txt">RFC 4180</a> formatted comma-separated
+ value files.
+<li>Added the <a href="../carray.html">carray() table-valued function</a> extension.
+<li>Enabled <a href="../loadext.html#persist">persistent loadable extensions</a> using the new
+ <a href="../rescode.html#ok_load_permanently">SQLITE_OK_LOAD_PERMANENTLY</a> return code from the extension
+ entry point.
+<li>Added the <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuscacheusedshared">SQLITE_DBSTATUS_CACHE_USED_SHARED</a> option to <a href="../c3ref/db_status.html">sqlite3_db_status()</a>.
+<li>Add the
+ <a href="https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/vfsstat.c">vfsstat.c</a>
+ loadable extension - a VFS shim that measures I/O
+ together with an <a href="../vtab.html#epovtab">eponymous virtual table</a> that provides access to the measurements.
+<li>Improved algorithm for running queries with both an ORDER BY and a LIMIT where
+ only the inner-most loop naturally generates rows in the correct order.
+<li>Enhancements to <a href="../lemon.html">Lemon parser generator</a>, so that it generates a
+ faster parser.
+<li>The <a href="../pragma.html#pragma_compile_options">PRAGMA compile_options</a> command now attempts to show the version number
+ of the compiler that generated the library.
+<li>Enhance <a href="../pragma.html#pragma_table_info">PRAGMA table_info</a> so that it provides information about
+ <a href="../vtab.html#epovtab">eponymous virtual tables</a>.
+<li>Added the "win32-none" VFS, analogous to the "unix-none" VFS, that works like
+ the default "win32" VFS except that it ignores all file locks.
+<li>The query planner uses a full scan of a <a href="../partialindex.html">partial index</a> instead of a
+ full scan of the main table, in cases where that makes sense.
+<li>Allow <a href="../vtab.html#tabfunc2">table-valued functions</a> to appear on the right-hand side of an <a href="../lang_expr.html#in_op">IN operator</a>.
+<li>Created the <a href="../dbhash.html">dbhash.exe</a> command-line utility.
+<li>Added two new C-language interfaces: <a href="../c3ref/expanded_sql.html">sqlite3_expanded_sql()</a> and
+ <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a>. These new interfaces subsume the functions of
+ <a href="../c3ref/profile.html">sqlite3_trace()</a> and <a href="../c3ref/profile.html">sqlite3_profile()</a> which are now deprecated.
+<li>Added the <a href="../json1.html#jquote">json_quote()</a> SQL function to <a href="../json1.html">the json1 extension</a>.
+<li>Disable the <a href="../c3ref/set_authorizer.html">authorizer callback</a> while reparsing the schema.
+<li>Added the <a href="../compile.html#enable_unknown_sql_function">SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</a> compile-time option and turned that
+ option on by default when building the <a href="../cli.html">command-line shell</a>.
+<p><b>Bug Fixes:</b>
+<li>Fix the <a href="../lang_altertable.html">ALTER TABLE</a> command so that it does not corrupt <a href="../lang_createindex.html#descidx">descending indexes</a>
+ when adding a column to a <a href="../pragma.html#pragma_legacy_file_format">legacy file format</a> database. Ticket
+ <a href="https://www.sqlite.org/src/info/f68bf68513a1c15f">f68bf68513a1c15f</a>
+<li>Fix a NULL-pointer dereference/crash that could occurs when a transitive WHERE
+ clause references a non-existent collating sequence. Ticket
+ <a href="https://www.sqlite.org/src/info/e8d439c77685eca6">e8d439c77685eca6</a>.
+<li>Improved the cost estimation for an index scan which includes a WHERE clause
+ that can be partially or fully evaluated using columns in the index and without
+ having to do a table lookup. This fixes a performance regression that occurred
+ for some obscure queries following the ORDER BY LIMIT optimization introduced
+ in <a href="../releaselog/3_12_0.html">version 3.12.0</a>.
+</ol>
+<p><b>Additional changes in version 3.14.1 (2016-08-11):</b></p>
+<p><ol class='lessindent'>
+<li value='23'>A performance enhancement to the page-cache "truncate" operation
+ reduces <a href="../lang_transaction.html">COMMIT</a> time by dozens of milliseconds on systems with a
+ large <a href="../pragma.html#pragma_cache_size">page cache</a>.
+<li>Fix to the --rbu option of <a href="../sqldiff.html">sqldiff</a>.
+</ol>
+<p><b>Additional changes in version 3.14.2 (2016-09-12):</b></p>
+<p><ol class='lessindent'>
+<li value='25'> Improved support for using the STDCALL calling convention in winsqlite3.dll.
+<li> Fix the <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a> interface so that it is disabled if either the
+callback or the mask arguments are zero, in accordance with the documentation.
+<li> Fix commenting errors and improve the comments generated on <a href="../lang_explain.html">EXPLAIN</a> listings
+when the <a href="../compile.html#enable_explain_comments">-DSQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is used.
+<li> Fix the ".read" command in the <a href="../cli.html">command-line shell</a> so that it understands
+that its input is not interactive.
+<li> Correct affinity computations for a SELECT on the RHS of an IN operator.
+Fix for ticket <a href="https://sqlite.org/src/info/199df4168c">199df4168c</a>.
+<li> The ORDER BY LIMIT optimization is not valid unless the inner-most IN operator
+loop is actually used by the query plan. Fix for
+ticket <a href="https://sqlite.org/src/info/0c4df46116e90f92">0c4df46116e90f92</a>.
+<li> Fix an internal code generator problem that was causing some <a href="../lang_delete.html">DELETE</a> operations
+to no-op. Ticket <a href="https://sqlite.org/src/info/ef360601">ef360601</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-09-12 18:50:49 29dbef4b8585f753861a36d6dd102ca634197bd6"
+<li>SHA1 for sqlite3.c: bcc4a1989db45e7f223191f2d0f66c1c28946383
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_15_0.html b/www/releaselog/3_15_0.html
new file mode 100644
index 0000000..49df0c2
--- /dev/null
+++ b/www/releaselog/3_15_0.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.15.0 On 2016-10-14</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.15.0 On 2016-10-14</h2><p><ol class='lessindent'>
+<li> Added support for <a href="../rowvalue.html">row values</a>.
+<li> Allow <a href="../deterministic.html">deterministic SQL functions</a> in the WHERE clause of a <a href="../partialindex.html">partial index</a>.
+<li> Added the "<a href="../uri.html#urimodeof">modeof=<i>filename</i></a>" URI parameter on the unix VFS
+<li> Added support for <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname">SQLITE_DBCONFIG_MAINDBNAME</a>.
+<li> Added the ability to <a href="../lang_vacuum.html">VACUUM</a> an <a href="../lang_attach.html">ATTACH-ed</a> database.
+<li> Enhancements to the <a href="../cli.html">command-line shell</a>:
+ <ol type='a'>
+ <li> Add the ".testcase" and ".check" <a href="../cli.html#dotcmd">dot-commands</a>.
+ <li> Added the --new option to the ".open" dot-command, causing
+ any prior content in the database to be purged prior to
+ opening.
+ </ol>
+<li> Enhance the <a href="../fts5.html#the_fts5vocab_virtual_table_module">fts5vocab</a> virtual table to handle "ORDER BY term" efficiently.
+<li> Miscellaneous micro-optimizations reduce CPU usage by more than 7%
+ on common workloads. Most optimization in this release has been on the
+ front-end (<a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>).
+<p><b>Bug Fixes:</b>
+<li> The multiply operator now correctly detects 64-bit integer overflow
+ and promotes to floating point in all corner-cases. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/1ec41379c9c1e400">1ec41379c9c1e400</a>.
+<li> Correct handling of columns with redundant unique indexes when those
+ columns are used on the LHS of an <a href="../lang_expr.html#in_op">IN operator</a>. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/0eab1ac759">0eab1ac759</a>.
+<li> Skip NULL entries on range queries in <a href="../expridx.html">indexes on expressions</a>.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/tktview/4baa46491212947">4baa46491212947</a>.
+<li> Ensure that the <a href="../autoinc.html">AUTOINCREMENT</a> counters in the sqlite_sequence
+ table are initialized doing "Xfer Optimization" on "INSERT ... SELECT"
+ statements. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7b3328086a5c116c">7b3328086a5c116c</a>.
+<li> Make sure the ORDER BY LIMIT optimization
+ (from check-in <a href="https://www.sqlite.org/src/info/559733b09e9630fa">559733b09e</a>)
+ works with IN operators on INTEGER PRIMARY KEYs. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/96c1454cbfd9509">96c1454c</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-10-14 10:20:30 707875582fcba352b4906a595ad89198d84711d8"
+<li>SHA1 for sqlite3.c: fba106f8f6493c66eeed08a2dfff0907de54ae76
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_15_1.html b/www/releaselog/3_15_1.html
new file mode 100644
index 0000000..9410d8c
--- /dev/null
+++ b/www/releaselog/3_15_1.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.15.1 On 2016-11-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.15.1 On 2016-11-04</h2><p><b>Changes in version 3.15.0 (2016-10-14):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added support for <a href="../rowvalue.html">row values</a>.
+<li> Allow <a href="../deterministic.html">deterministic SQL functions</a> in the WHERE clause of a <a href="../partialindex.html">partial index</a>.
+<li> Added the "<a href="../uri.html#urimodeof">modeof=<i>filename</i></a>" URI parameter on the unix VFS
+<li> Added support for <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname">SQLITE_DBCONFIG_MAINDBNAME</a>.
+<li> Added the ability to <a href="../lang_vacuum.html">VACUUM</a> an <a href="../lang_attach.html">ATTACH-ed</a> database.
+<li> Enhancements to the <a href="../cli.html">command-line shell</a>:
+ <ol type='a'>
+ <li> Add the ".testcase" and ".check" <a href="../cli.html#dotcmd">dot-commands</a>.
+ <li> Added the --new option to the ".open" dot-command, causing
+ any prior content in the database to be purged prior to
+ opening.
+ </ol>
+<li> Enhance the <a href="../fts5.html#the_fts5vocab_virtual_table_module">fts5vocab</a> virtual table to handle "ORDER BY term" efficiently.
+<li> Miscellaneous micro-optimizations reduce CPU usage by more than 7%
+ on common workloads. Most optimization in this release has been on the
+ front-end (<a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>).
+<p><b>Bug Fixes:</b>
+<li> The multiply operator now correctly detects 64-bit integer overflow
+ and promotes to floating point in all corner-cases. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/1ec41379c9c1e400">1ec41379c9c1e400</a>.
+<li> Correct handling of columns with redundant unique indexes when those
+ columns are used on the LHS of an <a href="../lang_expr.html#in_op">IN operator</a>. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/0eab1ac759">0eab1ac759</a>.
+<li> Skip NULL entries on range queries in <a href="../expridx.html">indexes on expressions</a>.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/tktview/4baa46491212947">4baa46491212947</a>.
+<li> Ensure that the <a href="../autoinc.html">AUTOINCREMENT</a> counters in the sqlite_sequence
+ table are initialized doing "Xfer Optimization" on "INSERT ... SELECT"
+ statements. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7b3328086a5c116c">7b3328086a5c116c</a>.
+<li> Make sure the ORDER BY LIMIT optimization
+ (from check-in <a href="https://www.sqlite.org/src/info/559733b09e9630fa">559733b09e</a>)
+ works with IN operators on INTEGER PRIMARY KEYs. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/96c1454cbfd9509">96c1454c</a>
+</ol>
+<p><b>Additional changes in version 3.15.1 (2016-11-04):</b></p>
+<p><ol class='lessindent'>
+<li value='14'> Added <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
+<li> Fix the <a href="../lang_vacuum.html">VACUUM</a> command so that it spills excess content to disk rather
+ than holding everything in memory, and possible causing an out-of-memory
+ error for larger database files. This fixes an issue introduced by
+ version 3.15.0.
+<li> Fix a case (present since 3.8.0 - 2013-08-26)
+ where OR-connected terms in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ <a href="https://www.sqlite.org/src/info/34a579141b2c5ac">34a579141b2c5ac</a>.
+<li> Fix a case where the use of <a href="../rowvalue.html">row values</a> in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ <a href="https://www.sqlite.org/src/info/fef4bb4bd9185ec8f">fef4bb4bd9185ec8f</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-11-04 12:08:49 1136863c76576110e710dd5d69ab6bf347c65e36"
+<li>SHA1 for sqlite3.c: e7c26a7be3e431dd06898f8d262c4ef240c07366
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_15_2.html b/www/releaselog/3_15_2.html
new file mode 100644
index 0000000..ee961f2
--- /dev/null
+++ b/www/releaselog/3_15_2.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.15.2 On 2016-11-28</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.15.2 On 2016-11-28</h2><p><b>Changes in version 3.15.0 (2016-10-14):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added support for <a href="../rowvalue.html">row values</a>.
+<li> Allow <a href="../deterministic.html">deterministic SQL functions</a> in the WHERE clause of a <a href="../partialindex.html">partial index</a>.
+<li> Added the "<a href="../uri.html#urimodeof">modeof=<i>filename</i></a>" URI parameter on the unix VFS
+<li> Added support for <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigmaindbname">SQLITE_DBCONFIG_MAINDBNAME</a>.
+<li> Added the ability to <a href="../lang_vacuum.html">VACUUM</a> an <a href="../lang_attach.html">ATTACH-ed</a> database.
+<li> Enhancements to the <a href="../cli.html">command-line shell</a>:
+ <ol type='a'>
+ <li> Add the ".testcase" and ".check" <a href="../cli.html#dotcmd">dot-commands</a>.
+ <li> Added the --new option to the ".open" dot-command, causing
+ any prior content in the database to be purged prior to
+ opening.
+ </ol>
+<li> Enhance the <a href="../fts5.html#the_fts5vocab_virtual_table_module">fts5vocab</a> virtual table to handle "ORDER BY term" efficiently.
+<li> Miscellaneous micro-optimizations reduce CPU usage by more than 7%
+ on common workloads. Most optimization in this release has been on the
+ front-end (<a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>).
+<p><b>Bug Fixes:</b>
+<li> The multiply operator now correctly detects 64-bit integer overflow
+ and promotes to floating point in all corner-cases. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/1ec41379c9c1e400">1ec41379c9c1e400</a>.
+<li> Correct handling of columns with redundant unique indexes when those
+ columns are used on the LHS of an <a href="../lang_expr.html#in_op">IN operator</a>. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/0eab1ac759">0eab1ac759</a>.
+<li> Skip NULL entries on range queries in <a href="../expridx.html">indexes on expressions</a>.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/tktview/4baa46491212947">4baa46491212947</a>.
+<li> Ensure that the <a href="../autoinc.html">AUTOINCREMENT</a> counters in the sqlite_sequence
+ table are initialized doing "Xfer Optimization" on "INSERT ... SELECT"
+ statements. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7b3328086a5c116c">7b3328086a5c116c</a>.
+<li> Make sure the ORDER BY LIMIT optimization
+ (from check-in <a href="https://www.sqlite.org/src/info/559733b09e9630fa">559733b09e</a>)
+ works with IN operators on INTEGER PRIMARY KEYs. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/96c1454cbfd9509">96c1454c</a>
+</ol>
+<p><b>Additional changes in version 3.15.1 (2016-11-04):</b></p>
+<p><ol class='lessindent'>
+<li value='14'> Added <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
+<li> Fix the <a href="../lang_vacuum.html">VACUUM</a> command so that it spills excess content to disk rather
+ than holding everything in memory, and possible causing an out-of-memory
+ error for larger database files. This fixes an issue introduced by
+ version 3.15.0.
+<li> Fix a case (present since 3.8.0 - 2013-08-26)
+ where OR-connected terms in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ <a href="https://www.sqlite.org/src/info/34a579141b2c5ac">34a579141b2c5ac</a>.
+<li> Fix a case where the use of <a href="../rowvalue.html">row values</a> in the ON clause of a LEFT JOIN
+ might cause incorrect results. Ticket
+ <a href="https://www.sqlite.org/src/info/fef4bb4bd9185ec8f">fef4bb4bd9185ec8f</a>.
+</ol>
+<p><b>Additional changes in version 3.15.2 (2016-11-28):</b></p>
+<p><ol class='lessindent'>
+<li value='18'> Multiple bug fixes to the <a href="../rowvalue.html">row value</a> logic that was introduced in version 3.15.0.
+<li> Fix a NULL pointer dereference in ATTACH/DETACH following a maliciously constructed
+ syntax error. Ticket
+ <a href="https://www.sqlite.org/src/info/2f1b168ab4d4844">2f1b168ab4d4844</a>.
+<li> Fix a crash that can occur following an out-of-memory condition
+ in the built-in <a href="../lang_corefunc.html#instr">instr()</a> function.
+<li> In the <a href="../json1.html">JSON extension</a>, fix the JSON validator so that it correctly rejects
+ invalid backslash escapes within strings.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8"
+<li>SHA1 for sqlite3.c: 06d77b42a3e70609f8d4bbb97caf53652f1082cb
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_16_0.html b/www/releaselog/3_16_0.html
new file mode 100644
index 0000000..9b8bafe
--- /dev/null
+++ b/www/releaselog/3_16_0.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.16.0 On 2017-01-02</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.16.0 On 2017-01-02</h2><p><ol class='lessindent'>
+<li>Uses 9% fewer CPU cycles. (See the <a href="../cpu.html">CPU performance measurement</a> report for
+ details on how this performance increase was computed.)
+<li>Added experimental support for <a href="../pragma.html#pragfunc">PRAGMA functions</a>.
+<li>Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose">SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</a> option to <a href="../c3ref/db_config.html">sqlite3_db_config()</a>.
+<li>Enhance the <a href="../lang_datefunc.html">date and time functions</a> so that the 'unixepoch' modifier works
+ for the full span of supported dates.
+<li>Changed the default configuration of the <a href="../malloc.html#lookaside">lookaside memory allocator</a> from
+ 500 slots of 128 bytes each into 125 slots of 512 bytes each.
+<li>Enhanced "WHERE x NOT NULL" <a href="../partialindex.html">partial indexes</a> so that they are usable if
+ the "x" column appears in a LIKE or GLOB operator.
+<li>Enhanced <a href="../c3ref/interrupt.html">sqlite3_interrupt()</a> so that it interrupts <a href="../wal.html#ckpt">checkpoint</a> operations that
+ are in process.
+<li>Enhanced the <a href="../lang_expr.html#like">LIKE</a> and <a href="../lang_expr.html#glob">GLOB</a> matching algorithm to be faster
+ for cases when the pattern contains multiple wildcards.
+<li>Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
+<li>Added ".mode quote" to the <a href="../cli.html">command-line shell</a>.
+<li>Added ".lint fkey-indexes" to the <a href="../cli.html">command-line shell</a>.
+<li>Added the <a href="../imposter.html#dotimposter">.imposter dot-command</a> to the <a href="../cli.html">command-line shell</a>.
+<li>Added the <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
+ SQL function as a <a href="../loadext.html">loadable extension</a>.
+<li>Rename the <a href="../compile.html#omit_builtin_test">SQLITE_OMIT_BUILTIN_TEST</a> compile-time option to
+ <a href="../compile.html#untestable">SQLITE_UNTESTABLE</a> to better reflect the implications of using it.
+<p><b>Bug Fixes:</b>
+<li>Fix a long-standing bug in the query planner that caused incorrect results
+ on a LEFT JOIN where the left-hand table is a subquery and the join constraint
+ is a bare column name coming from the left-hand subquery. Ticket
+ <a href="https://www.sqlite.org/src/info/2df0107b">2df0107b</a>.
+<li>Correctly handle the integer literal -0x8000000000000000 in the query planner.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-01-02 11:57:58 04ac0b75b1716541b2b97704f4809cb7ef19cccf"
+<li>SHA1 for sqlite3.c: e2920fb885569d14197c9b7958e6f1db573ee669
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_16_1.html b/www/releaselog/3_16_1.html
new file mode 100644
index 0000000..affc46c
--- /dev/null
+++ b/www/releaselog/3_16_1.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.16.1 On 2017-01-03</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.16.1 On 2017-01-03</h2><p><b>Changes in version 3.16.0 (2017-01-02):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Uses 9% fewer CPU cycles. (See the <a href="../cpu.html">CPU performance measurement</a> report for
+ details on how this performance increase was computed.)
+<li>Added experimental support for <a href="../pragma.html#pragfunc">PRAGMA functions</a>.
+<li>Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose">SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</a> option to <a href="../c3ref/db_config.html">sqlite3_db_config()</a>.
+<li>Enhance the <a href="../lang_datefunc.html">date and time functions</a> so that the 'unixepoch' modifier works
+ for the full span of supported dates.
+<li>Changed the default configuration of the <a href="../malloc.html#lookaside">lookaside memory allocator</a> from
+ 500 slots of 128 bytes each into 125 slots of 512 bytes each.
+<li>Enhanced "WHERE x NOT NULL" <a href="../partialindex.html">partial indexes</a> so that they are usable if
+ the "x" column appears in a LIKE or GLOB operator.
+<li>Enhanced <a href="../c3ref/interrupt.html">sqlite3_interrupt()</a> so that it interrupts <a href="../wal.html#ckpt">checkpoint</a> operations that
+ are in process.
+<li>Enhanced the <a href="../lang_expr.html#like">LIKE</a> and <a href="../lang_expr.html#glob">GLOB</a> matching algorithm to be faster
+ for cases when the pattern contains multiple wildcards.
+<li>Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
+<li>Added ".mode quote" to the <a href="../cli.html">command-line shell</a>.
+<li>Added ".lint fkey-indexes" to the <a href="../cli.html">command-line shell</a>.
+<li>Added the <a href="../imposter.html#dotimposter">.imposter dot-command</a> to the <a href="../cli.html">command-line shell</a>.
+<li>Added the <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
+ SQL function as a <a href="../loadext.html">loadable extension</a>.
+<li>Rename the <a href="../compile.html#omit_builtin_test">SQLITE_OMIT_BUILTIN_TEST</a> compile-time option to
+ <a href="../compile.html#untestable">SQLITE_UNTESTABLE</a> to better reflect the implications of using it.
+<p><b>Bug Fixes:</b>
+<li>Fix a long-standing bug in the query planner that caused incorrect results
+ on a LEFT JOIN where the left-hand table is a subquery and the join constraint
+ is a bare column name coming from the left-hand subquery. Ticket
+ <a href="https://www.sqlite.org/src/info/2df0107b">2df0107b</a>.
+<li>Correctly handle the integer literal -0x8000000000000000 in the query planner.
+</ol>
+<p><b>Additional changes in version 3.16.1 (2017-01-03):</b></p>
+<p><ol class='lessindent'>
+<li value='17'>Fix a bug concerning the use of <a href="../rowvalue.html">row values</a> within <a href="../lang_createtrigger.html">triggers</a>
+ (see ticket <a href="https://www.sqlite.org/src/info/8c9458e7">8c9458e7</a>)
+ that was in version 3.15.0 but was not reported until moments after the 3.16.0
+ release was published.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd"
+<li>SHA1 for sqlite3.c: 354f6223490b30fd5320b4066b1535e4ce33988d
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_16_2.html b/www/releaselog/3_16_2.html
new file mode 100644
index 0000000..0de0bb0
--- /dev/null
+++ b/www/releaselog/3_16_2.html
@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.16.2 On 2017-01-06</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.16.2 On 2017-01-06</h2><p><b>Changes in version 3.16.0 (2017-01-02):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Uses 9% fewer CPU cycles. (See the <a href="../cpu.html">CPU performance measurement</a> report for
+ details on how this performance increase was computed.)
+<li>Added experimental support for <a href="../pragma.html#pragfunc">PRAGMA functions</a>.
+<li>Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfignockptonclose">SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE</a> option to <a href="../c3ref/db_config.html">sqlite3_db_config()</a>.
+<li>Enhance the <a href="../lang_datefunc.html">date and time functions</a> so that the 'unixepoch' modifier works
+ for the full span of supported dates.
+<li>Changed the default configuration of the <a href="../malloc.html#lookaside">lookaside memory allocator</a> from
+ 500 slots of 128 bytes each into 125 slots of 512 bytes each.
+<li>Enhanced "WHERE x NOT NULL" <a href="../partialindex.html">partial indexes</a> so that they are usable if
+ the "x" column appears in a LIKE or GLOB operator.
+<li>Enhanced <a href="../c3ref/interrupt.html">sqlite3_interrupt()</a> so that it interrupts <a href="../wal.html#ckpt">checkpoint</a> operations that
+ are in process.
+<li>Enhanced the <a href="../lang_expr.html#like">LIKE</a> and <a href="../lang_expr.html#glob">GLOB</a> matching algorithm to be faster
+ for cases when the pattern contains multiple wildcards.
+<li>Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlwin32gethandle">SQLITE_FCNTL_WIN32_GET_HANDLE</a> file control opcode.
+<li>Added ".mode quote" to the <a href="../cli.html">command-line shell</a>.
+<li>Added ".lint fkey-indexes" to the <a href="../cli.html">command-line shell</a>.
+<li>Added the <a href="../imposter.html#dotimposter">.imposter dot-command</a> to the <a href="../cli.html">command-line shell</a>.
+<li>Added the <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
+ SQL function as a <a href="../loadext.html">loadable extension</a>.
+<li>Rename the <a href="../compile.html#omit_builtin_test">SQLITE_OMIT_BUILTIN_TEST</a> compile-time option to
+ <a href="../compile.html#untestable">SQLITE_UNTESTABLE</a> to better reflect the implications of using it.
+<p><b>Bug Fixes:</b>
+<li>Fix a long-standing bug in the query planner that caused incorrect results
+ on a LEFT JOIN where the left-hand table is a subquery and the join constraint
+ is a bare column name coming from the left-hand subquery. Ticket
+ <a href="https://www.sqlite.org/src/info/2df0107b">2df0107b</a>.
+<li>Correctly handle the integer literal -0x8000000000000000 in the query planner.
+</ol>
+<p><b>Additional changes in version 3.16.1 (2017-01-03):</b></p>
+<p><ol class='lessindent'>
+<li value='17'>Fix a bug concerning the use of <a href="../rowvalue.html">row values</a> within <a href="../lang_createtrigger.html">triggers</a>
+ (see ticket <a href="https://www.sqlite.org/src/info/8c9458e7">8c9458e7</a>)
+ that was in version 3.15.0 but was not reported until moments after the 3.16.0
+ release was published.
+</ol>
+<p><b>Additional changes in version 3.16.2 (2017-01-06):</b></p>
+<p><ol class='lessindent'>
+<li value='18'>Fix the <a href="../lang_replace.html">REPLACE</a> statement for
+ <a href="../withoutrowid.html">WITHOUT ROWID</a> tables that lack secondary indexes so that
+ it works correctly with triggers and foreign keys. This was a new bug
+ caused by performance optimizations added in version 3.16.0.
+ Ticket <a href="https://www.sqlite.org/src/info/30027b613b4">30027b613b4</a>
+<li>Fix the <a href="../c3ref/value_blob.html">sqlite3_value_text()</a> interface so that it correctly
+ translates content generated by <a href="../lang_corefunc.html#zeroblob">zeroblob()</a> into a string of all
+ 0x00 characters. This is a long-standing issue discovered after the
+ 3.16.1 release by <a href="https://github.com/google/oss-fuzz">OSS-Fuzz</a>
+<li>Fix the bytecode generator to deal with a subquery in the FROM clause
+ that is itself a UNION ALL where one side of the UNION ALL is a view
+ that contains an ORDER BY. This is a long-standing issue that was
+ discovered after the release of 3.16.1. See ticket
+ <a href="https://www.sqlite.org/src/info/190c2507">190c2507</a>.
+<li>Adjust the <a href="../c3ref/column_count.html">sqlite3_column_count()</a> API so it more often returns the same
+ values for <a href="../pragma.html#syntax">PRAGMA</a> statements as it did in prior releases, to
+ minimize disruption to applications that might be using that
+ interface in unexpected ways.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-01-06 16:32:41 a65a62893ca8319e89e48b8a38cf8a59c69a8209"
+<li>SHA1 for sqlite3.c: 2bebdc3f24911c0d12b6d6c0123c3f84d6946b08
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_17_0.html b/www/releaselog/3_17_0.html
new file mode 100644
index 0000000..8721d95
--- /dev/null
+++ b/www/releaselog/3_17_0.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.17.0 On 2017-02-13</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.17.0 On 2017-02-13</h2><p><ol class='lessindent'>
+<li>Approximately 25% better performance from the <a href="../rtree.html">R-Tree extension</a>.
+ <ol type='a'>
+ <li> Uses compiler built-ins (ex: __builtin_bswap32() or _byteswap_ulong())
+ for byteswapping when available.
+ <li> Uses the <a href="../c3ref/blob.html">sqlite3_blob</a> key/value access object instead of SQL
+ for pulling content out of R-Tree nodes
+ <li> Other miscellaneous enhancements such as loop unrolling.
+ </ol>
+<li>Add the <a href="../compile.html#default_lookaside">SQLITE_DEFAULT_LOOKASIDE</a> compile-time option.
+<li>Increase the default <a href="../malloc.html#lookaside">lookaside</a>
+ size from 512,125 to 1200,100
+ as this provides better performance while only adding 56KB
+ of extra memory per connection. Memory-sensitive
+ applications can restore the old
+ default at compile-time, start-time, or run-time.
+<li>Use compiler built-ins __builtin_sub_overflow(), __builtin_add_overflow(),
+ and __builtin_mul_overflow() when available. (All compiler
+ built-ins can be omitted with the <a href="../compile.html#disable_intrinsic">SQLITE_DISABLE_INTRINSIC</a> compile-time
+ option.)
+<li>Added the <a href="../compile.html#enable_null_trim">SQLITE_ENABLE_NULL_TRIM</a> compile-time option, which
+ can result in significantly smaller database files for some
+ applications, at the risk of being incompatible with older
+ versions of SQLite.
+<li>Change <a href="../compile.html#default_pcache_initsz">SQLITE_DEFAULT_PCACHE_INITSZ</a> from 100 to 20, for
+ improved performance.
+<li>Added the SQLITE_UINT64_TYPE compile-time option as an
+ analog to SQLITE_INT64_TYPE.
+<li>Perform some <a href="../lang_update.html">UPDATE</a> operations in a single pass instead of
+ in two passes.
+<li>Enhance the <a href="../sessionintro.html">session extension</a> to support <a href="../withoutrowid.html">WITHOUT ROWID</a>
+ tables.
+<li>Fixed performance problems and potential stack overflows
+ when creating <a href="../lang_createview.html">views</a> from multi-row VALUES clauses with
+ hundreds of thousands of rows.
+<li>Added the <a href="https://www.sqlite.org/src/file/ext/misc/sha1.c">sha1.c</a>
+ extension.
+<li>In the <a href="../cli.html">command-line shell</a>, enhance the ".mode" command so that it
+ restores the default column and row separators for modes "line",
+ "list", "column", and "tcl".
+<li>Enhance the <a href="../compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> option so that it works
+ in <a href="../wal.html">WAL mode</a> as long as the pages being read are not in the WAL file.
+<li>Enhance the
+ <a href="../lemon.html">Lemon parser generator</a>
+ so that it can store the parser object as a stack variable rather than
+ allocating space from the heap and make use of that enhancement in
+ the <a href="../amalgamation.html">amalgamation</a>.
+<li>Other performance improvements. Uses about <a href="../cpu.html">6.5% fewer CPU cycles</a>.
+<p><b>Bug Fixes:</b>
+<li>Throw an error if the ON clause of a LEFT JOIN references tables
+ to the right of the ON clause. This is the same behavior as
+ PostgreSQL. Formerly, SQLite silently converted the LEFT JOIN
+ into an INNER JOIN. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/25e335f802dd">25e335f802dd</a>.
+<li>Use the correct affinity for columns of automatic indexes. Ticket
+ <a href="https://www.sqlite.org/src/info/7ffd1ca1d2ad4ec">7ffd1ca1d2ad4ec</a>.
+<li>Ensure that the <a href="../c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface can correctly
+ handle short rows. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/e6e962d6b0f06f46e">e6e962d6b0f06f46e</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-02-13 16:02:40 ada05cfa86ad7f5645450ac7a2a21c9aa6e57d2c"
+<li>SHA1 for sqlite3.c: cc7d708bb073c44102a59ed63ce6142da1f174d1
+
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_18_0.html b/www/releaselog/3_18_0.html
new file mode 100644
index 0000000..8c9375a
--- /dev/null
+++ b/www/releaselog/3_18_0.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.18.0 On 2017-03-30</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.18.0 On 2017-03-30</h2><p><ol class='lessindent'>
+<li>Added the <a href="../pragma.html#pragma_optimize">PRAGMA optimize</a> command
+<li>The SQLite version identifier returned by the <a href="../lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a> SQL function
+ and the <a href="../c3ref/libversion.html">sqlite3_sourceid()</a> C API and found in the <a href="../c3ref/c_source_id.html">SQLITE_SOURCE_ID</a> macro is
+ now a 64-digit SHA3-256 hash instead of a 40-digit SHA1 hash.
+<li>Added the <a href="../json1.html#jpatch">json_patch()</a> SQL function to the <a href="../json1.html">JSON1 extension</a>.
+<li>Enhance the <a href="../optoverview.html#like_opt">LIKE optimization</a> so that it works for arbitrary expressions on
+ the left-hand side as long as the LIKE pattern on the right-hand side does not
+ begin with a digit or minus sign.
+<li>Added the <a href="../c3ref/set_last_insert_rowid.html">sqlite3_set_last_insert_rowid()</a> interface and use the new interface in
+ the <a href="../fts3.html">FTS3</a>, <a href="../fts3.html#fts4">FTS4</a>, and <a href="../fts5.html">FTS5</a> extensions to ensure that the <a href="../c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a>
+ interface always returns reasonable values.
+<li>Enhance <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a> so that they verify
+ <a href="../lang_createtable.html#ckconst">CHECK constraints</a>.
+<li>Enhance the query plans for joins to detect empty tables early and
+ halt without doing unnecessary work.
+<li>Enhance the <a href="../c3ref/mprintf.html">sqlite3_mprintf()</a> family of interfaces and the <a href="../lang_corefunc.html#printf">printf SQL function</a>
+ to put comma separators at the thousands marks for integers, if the "," format modifier
+ is used in between the "%" and the "d" (example: "%,d").
+<li>Added the -D<a href="../compile.html#max_memory">SQLITE_MAX_MEMORY</a>=<i>N</i> compile-time option.
+<li>Added the <a href="../cli.html#sha3sum">.sha3sum dot-command</a> and the <a href="../cli.html#selftest">.selftest dot-command</a>
+ to the <a href="../cli.html">command-line shell</a>
+<li>Begin enforcing <a href="../c3ref/c_limit_attached.html#sqlitelimitvdbeop">SQLITE_LIMIT_VDBE_OP</a>. This can be used, for example, to prevent
+ excessively large prepared statements in systems that accept SQL queries from
+ untrusted users.
+<li>Various performance improvements.
+<p><b>Bug Fixes:</b>
+<li>Ensure that indexed expressions with collating sequences are handled correctly.
+ Fix for ticket <a href="https://www.sqlite.org/src/info/eb703ba7b50c1a5">eb703ba7b50c1a5</a>.
+<li>Fix a bug in the 'start of ...' modifiers for the <a href="../lang_datefunc.html">date and time functions</a>.
+ Ticket <a href="https://www.sqlite.org/src/info/6097cb92745327a1">6097cb92745327a1</a>
+<li>Fix a potential segfault in complex recursive triggers, resulting from a
+ bug in the OP_Once opcode introduced as part of a performance optimization in
+ version 3.15.0.
+ Ticket <a href="https://www.sqlite.org/src/info/06796225f59c057c">06796225f59c057c</a>
+<li>In the <a href="../rbu.html">RBU extension</a>, add extra sync operations to avoid the possibility of
+ corruption following a power failure.
+<li>The <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a> output for nested SQL statements should always begin
+ with a "--" comment marker.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-03-28 18:48:43 424a0d380332858ee55bdebc4af3789f74e70a2b3ba1cf29d84b9b4bcf3e2e37"
+<li>SHA3-256 for sqlite3.c: cbf322df1f76be57fb3be84f3da1fc71d1d3dfdb7e7c2757fb0ff630b3bc2e5d
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_18_1.html b/www/releaselog/3_18_1.html
new file mode 100644
index 0000000..0257082
--- /dev/null
+++ b/www/releaselog/3_18_1.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.18.1 On 2017-06-16</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.18.1 On 2017-06-16</h2><p><b>Changes in version 3.18.0 (2017-03-30):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Added the <a href="../pragma.html#pragma_optimize">PRAGMA optimize</a> command
+<li>The SQLite version identifier returned by the <a href="../lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a> SQL function
+ and the <a href="../c3ref/libversion.html">sqlite3_sourceid()</a> C API and found in the <a href="../c3ref/c_source_id.html">SQLITE_SOURCE_ID</a> macro is
+ now a 64-digit SHA3-256 hash instead of a 40-digit SHA1 hash.
+<li>Added the <a href="../json1.html#jpatch">json_patch()</a> SQL function to the <a href="../json1.html">JSON1 extension</a>.
+<li>Enhance the <a href="../optoverview.html#like_opt">LIKE optimization</a> so that it works for arbitrary expressions on
+ the left-hand side as long as the LIKE pattern on the right-hand side does not
+ begin with a digit or minus sign.
+<li>Added the <a href="../c3ref/set_last_insert_rowid.html">sqlite3_set_last_insert_rowid()</a> interface and use the new interface in
+ the <a href="../fts3.html">FTS3</a>, <a href="../fts3.html#fts4">FTS4</a>, and <a href="../fts5.html">FTS5</a> extensions to ensure that the <a href="../c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a>
+ interface always returns reasonable values.
+<li>Enhance <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a> so that they verify
+ <a href="../lang_createtable.html#ckconst">CHECK constraints</a>.
+<li>Enhance the query plans for joins to detect empty tables early and
+ halt without doing unnecessary work.
+<li>Enhance the <a href="../c3ref/mprintf.html">sqlite3_mprintf()</a> family of interfaces and the <a href="../lang_corefunc.html#printf">printf SQL function</a>
+ to put comma separators at the thousands marks for integers, if the "," format modifier
+ is used in between the "%" and the "d" (example: "%,d").
+<li>Added the -D<a href="../compile.html#max_memory">SQLITE_MAX_MEMORY</a>=<i>N</i> compile-time option.
+<li>Added the <a href="../cli.html#sha3sum">.sha3sum dot-command</a> and the <a href="../cli.html#selftest">.selftest dot-command</a>
+ to the <a href="../cli.html">command-line shell</a>
+<li>Begin enforcing <a href="../c3ref/c_limit_attached.html#sqlitelimitvdbeop">SQLITE_LIMIT_VDBE_OP</a>. This can be used, for example, to prevent
+ excessively large prepared statements in systems that accept SQL queries from
+ untrusted users.
+<li>Various performance improvements.
+<p><b>Bug Fixes:</b>
+<li>Ensure that indexed expressions with collating sequences are handled correctly.
+ Fix for ticket <a href="https://www.sqlite.org/src/info/eb703ba7b50c1a5">eb703ba7b50c1a5</a>.
+<li>Fix a bug in the 'start of ...' modifiers for the <a href="../lang_datefunc.html">date and time functions</a>.
+ Ticket <a href="https://www.sqlite.org/src/info/6097cb92745327a1">6097cb92745327a1</a>
+<li>Fix a potential segfault in complex recursive triggers, resulting from a
+ bug in the OP_Once opcode introduced as part of a performance optimization in
+ version 3.15.0.
+ Ticket <a href="https://www.sqlite.org/src/info/06796225f59c057c">06796225f59c057c</a>
+<li>In the <a href="../rbu.html">RBU extension</a>, add extra sync operations to avoid the possibility of
+ corruption following a power failure.
+<li>The <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a> output for nested SQL statements should always begin
+ with a "--" comment marker.
+</ol>
+<p><b>Additional changes in version 3.18.1 (2017-06-16):</b></p>
+<p><ol class='lessindent'>
+<li value='18'>Fix a bug associated with <a href="../pragma.html#pragma_auto_vacuum">auto_vacuum</a> that can lead to database
+ corruption. The bug was introduced in <a href="../releaselog/3_16_0.html">version 3.16.0</a> (2017-01-02).
+ Ticket <a href="https://sqlite.org/src/info/fda22108">fda22108</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-06-16 13:41:15 77bb46233db03a3338bacf7e56f439be3dfd1926ea0c44d252eeafa7a7b31c06"
+<li>SHA3-256 for sqlite3.c: 334eaf776db9d09a4e69d6012c266bc837107edc2c981739ef82081cb11c5723
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_18_2.html b/www/releaselog/3_18_2.html
new file mode 100644
index 0000000..3cff5a3
--- /dev/null
+++ b/www/releaselog/3_18_2.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.18.2 On 2017-06-17</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.18.2 On 2017-06-17</h2><p><b>Changes in version 3.18.0 (2017-03-30):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Added the <a href="../pragma.html#pragma_optimize">PRAGMA optimize</a> command
+<li>The SQLite version identifier returned by the <a href="../lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a> SQL function
+ and the <a href="../c3ref/libversion.html">sqlite3_sourceid()</a> C API and found in the <a href="../c3ref/c_source_id.html">SQLITE_SOURCE_ID</a> macro is
+ now a 64-digit SHA3-256 hash instead of a 40-digit SHA1 hash.
+<li>Added the <a href="../json1.html#jpatch">json_patch()</a> SQL function to the <a href="../json1.html">JSON1 extension</a>.
+<li>Enhance the <a href="../optoverview.html#like_opt">LIKE optimization</a> so that it works for arbitrary expressions on
+ the left-hand side as long as the LIKE pattern on the right-hand side does not
+ begin with a digit or minus sign.
+<li>Added the <a href="../c3ref/set_last_insert_rowid.html">sqlite3_set_last_insert_rowid()</a> interface and use the new interface in
+ the <a href="../fts3.html">FTS3</a>, <a href="../fts3.html#fts4">FTS4</a>, and <a href="../fts5.html">FTS5</a> extensions to ensure that the <a href="../c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a>
+ interface always returns reasonable values.
+<li>Enhance <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a> so that they verify
+ <a href="../lang_createtable.html#ckconst">CHECK constraints</a>.
+<li>Enhance the query plans for joins to detect empty tables early and
+ halt without doing unnecessary work.
+<li>Enhance the <a href="../c3ref/mprintf.html">sqlite3_mprintf()</a> family of interfaces and the <a href="../lang_corefunc.html#printf">printf SQL function</a>
+ to put comma separators at the thousands marks for integers, if the "," format modifier
+ is used in between the "%" and the "d" (example: "%,d").
+<li>Added the -D<a href="../compile.html#max_memory">SQLITE_MAX_MEMORY</a>=<i>N</i> compile-time option.
+<li>Added the <a href="../cli.html#sha3sum">.sha3sum dot-command</a> and the <a href="../cli.html#selftest">.selftest dot-command</a>
+ to the <a href="../cli.html">command-line shell</a>
+<li>Begin enforcing <a href="../c3ref/c_limit_attached.html#sqlitelimitvdbeop">SQLITE_LIMIT_VDBE_OP</a>. This can be used, for example, to prevent
+ excessively large prepared statements in systems that accept SQL queries from
+ untrusted users.
+<li>Various performance improvements.
+<p><b>Bug Fixes:</b>
+<li>Ensure that indexed expressions with collating sequences are handled correctly.
+ Fix for ticket <a href="https://www.sqlite.org/src/info/eb703ba7b50c1a5">eb703ba7b50c1a5</a>.
+<li>Fix a bug in the 'start of ...' modifiers for the <a href="../lang_datefunc.html">date and time functions</a>.
+ Ticket <a href="https://www.sqlite.org/src/info/6097cb92745327a1">6097cb92745327a1</a>
+<li>Fix a potential segfault in complex recursive triggers, resulting from a
+ bug in the OP_Once opcode introduced as part of a performance optimization in
+ version 3.15.0.
+ Ticket <a href="https://www.sqlite.org/src/info/06796225f59c057c">06796225f59c057c</a>
+<li>In the <a href="../rbu.html">RBU extension</a>, add extra sync operations to avoid the possibility of
+ corruption following a power failure.
+<li>The <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a> output for nested SQL statements should always begin
+ with a "--" comment marker.
+</ol>
+<p><b>Additional changes in version 3.18.1 (2017-06-16):</b></p>
+<p><ol class='lessindent'>
+<li value='18'>Fix a bug associated with <a href="../pragma.html#pragma_auto_vacuum">auto_vacuum</a> that can lead to database
+ corruption. The bug was introduced in <a href="../releaselog/3_16_0.html">version 3.16.0</a> (2017-01-02).
+ Ticket <a href="https://sqlite.org/src/info/fda22108">fda22108</a>.
+</ol>
+<p><b>Additional changes in version 3.18.2 (2017-06-17):</b></p>
+<p><ol class='lessindent'>
+<li value='19'>Fix a bug that might cause duplicate output rows when an IN operator is
+ used in the WHERE clause.
+ Ticket <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-06-17 09:59:36 036ebf729e4b21035d7f4f8e35a6f705e6bf99887889e2dc14ebf2242e7930dd"
+<li>SHA3-256 for sqlite3.c: b0bd014f2776b9f9508a3fc6432f70e2436bf54475369f88f0aeef75b0eec93e
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_19_0.html b/www/releaselog/3_19_0.html
new file mode 100644
index 0000000..34cf44c
--- /dev/null
+++ b/www/releaselog/3_19_0.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.19.0 On 2017-05-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.19.0 On 2017-05-22</h2><p><ol class='lessindent'>
+<li> The <a href="../c3ref/c_alter_table.html">SQLITE_READ</a> <a href="../c3ref/set_authorizer.html">authorizer callback</a> is invoked once
+ with a column name that is an empty string
+ for every table referenced in a query from which no columns are extracted.
+<li> When using an index on an expression, try to use expression values already
+ available in the index, rather than loading the original columns and recomputing
+ the expression.
+<li> Enhance the <a href="../optoverview.html#flattening">flattening optimization</a> so that it is able to flatten views
+ on the right-hand side of a LEFT JOIN.
+<li> Use <a href="../lang_corefunc.html#replace">replace()</a> instead of <a href="../lang_corefunc.html#char">char()</a> for escaping newline and carriage-return
+ characters embedded in strings in the .dump output from the <a href="../cli.html">command-line shell</a>.
+<li> Avoid unnecessary foreign key processing in UPDATE statements that do not
+ touch the columns that are constrained by the foreign keys.
+<li> On a DISTINCT query that uses an index, try to skip ahead to the next distinct
+ entry using the index rather than stepping through rows, when an appropriate
+ index is available.
+<li> Avoid unnecessary invalidation of <a href="../c3ref/blob.html">sqlite3_blob</a> handles when making
+ changes to unrelated tables.
+<li> Transfer any terms of the HAVING clause that use only columns mentioned in
+ the GROUP BY clause over to the WHERE clause for faster processing.
+<li> Reuse the same materialization of a VIEW if that VIEW appears more than
+ once in the same query.
+<li> Enhance <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> so that it identifies tables that have two
+ or more rows with the same <a href="../lang_createtable.html#rowid">rowid</a>.
+<li> Enhance the <a href="../fts5.html">FTS5</a> query syntax so that <a href="../fts5.html#fts5_column_filters">column filters</a>
+ may be applied to arbitrary expressions.
+<li> Enhance the <a href="../json1.html#jex">json_extract()</a> function to cache and reuse parses of JSON
+ input text.
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/anycollseq.c">anycollseq.c</a>
+ <a href="../loadext.html">loadable extension</a> that allows a generic SQLite database connection to
+ read a schema that contains unknown and/or
+ application-specific <a href="../datatype3.html#collation">collating sequences</a>.
+<p><b>Bug Fixes:</b>
+<li> Fix a problem in <a href="../lang_replace.html">REPLACE</a> that can result in a corrupt database containing
+ two or more rows with the same <a href="../lang_createtable.html#rowid">rowid</a>. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f68dc596c4e6018d">f68dc596c4e6018d</a>.
+<li> Fix a problem in <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> that was causing a subsequent
+ <a href="../lang_vacuum.html">VACUUM</a> to behave suboptimally.
+<li> Fix the <a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command so that it works correctly with
+ foreign keys on <a href="../withoutrowid.html">WITHOUT ROWID</a> tables.
+<li> Fix a bug in the b-tree logic that can result in incorrect duplicate answers
+ for IN operator queries. Ticket
+ <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>
+<li> Disallow leading zeros in numeric constants in JSON. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/b93be8729a895a528e2">b93be8729a895a528e2</a>.
+<li> Disallow control characters inside of strings in JSON. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6c9b5514077fed34551">6c9b5514077fed34551</a>.
+<li> Limit the depth of recursion for JSON objects and arrays in order to avoid
+ excess stack usage in the recursive descent parser. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/981329adeef51011052">981329adeef51011052</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-05-22 13:58:13 28a94eb282822cad1d1420f2dad6bf65e4b8b9062eda4a0b9ee8270b2c608e40"
+<li>SHA3-256 for sqlite3.c: c30326aa1a9cc342061b755725eac9270109acf878bc59200dd4b1cea6bc2908
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_19_1.html b/www/releaselog/3_19_1.html
new file mode 100644
index 0000000..20e14b6
--- /dev/null
+++ b/www/releaselog/3_19_1.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.19.1 On 2017-05-24</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.19.1 On 2017-05-24</h2><p><b>Changes in version 3.19.0 (2017-05-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> The <a href="../c3ref/c_alter_table.html">SQLITE_READ</a> <a href="../c3ref/set_authorizer.html">authorizer callback</a> is invoked once
+ with a column name that is an empty string
+ for every table referenced in a query from which no columns are extracted.
+<li> When using an index on an expression, try to use expression values already
+ available in the index, rather than loading the original columns and recomputing
+ the expression.
+<li> Enhance the <a href="../optoverview.html#flattening">flattening optimization</a> so that it is able to flatten views
+ on the right-hand side of a LEFT JOIN.
+<li> Use <a href="../lang_corefunc.html#replace">replace()</a> instead of <a href="../lang_corefunc.html#char">char()</a> for escaping newline and carriage-return
+ characters embedded in strings in the .dump output from the <a href="../cli.html">command-line shell</a>.
+<li> Avoid unnecessary foreign key processing in UPDATE statements that do not
+ touch the columns that are constrained by the foreign keys.
+<li> On a DISTINCT query that uses an index, try to skip ahead to the next distinct
+ entry using the index rather than stepping through rows, when an appropriate
+ index is available.
+<li> Avoid unnecessary invalidation of <a href="../c3ref/blob.html">sqlite3_blob</a> handles when making
+ changes to unrelated tables.
+<li> Transfer any terms of the HAVING clause that use only columns mentioned in
+ the GROUP BY clause over to the WHERE clause for faster processing.
+<li> Reuse the same materialization of a VIEW if that VIEW appears more than
+ once in the same query.
+<li> Enhance <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> so that it identifies tables that have two
+ or more rows with the same <a href="../lang_createtable.html#rowid">rowid</a>.
+<li> Enhance the <a href="../fts5.html">FTS5</a> query syntax so that <a href="../fts5.html#fts5_column_filters">column filters</a>
+ may be applied to arbitrary expressions.
+<li> Enhance the <a href="../json1.html#jex">json_extract()</a> function to cache and reuse parses of JSON
+ input text.
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/anycollseq.c">anycollseq.c</a>
+ <a href="../loadext.html">loadable extension</a> that allows a generic SQLite database connection to
+ read a schema that contains unknown and/or
+ application-specific <a href="../datatype3.html#collation">collating sequences</a>.
+<p><b>Bug Fixes:</b>
+<li> Fix a problem in <a href="../lang_replace.html">REPLACE</a> that can result in a corrupt database containing
+ two or more rows with the same <a href="../lang_createtable.html#rowid">rowid</a>. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f68dc596c4e6018d">f68dc596c4e6018d</a>.
+<li> Fix a problem in <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> that was causing a subsequent
+ <a href="../lang_vacuum.html">VACUUM</a> to behave suboptimally.
+<li> Fix the <a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command so that it works correctly with
+ foreign keys on <a href="../withoutrowid.html">WITHOUT ROWID</a> tables.
+<li> Fix a bug in the b-tree logic that can result in incorrect duplicate answers
+ for IN operator queries. Ticket
+ <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>
+<li> Disallow leading zeros in numeric constants in JSON. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/b93be8729a895a528e2">b93be8729a895a528e2</a>.
+<li> Disallow control characters inside of strings in JSON. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6c9b5514077fed34551">6c9b5514077fed34551</a>.
+<li> Limit the depth of recursion for JSON objects and arrays in order to avoid
+ excess stack usage in the recursive descent parser. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/981329adeef51011052">981329adeef51011052</a>.
+</ol>
+<p><b>Additional changes in version 3.19.1 (2017-05-24):</b></p>
+<p><ol class='lessindent'>
+<li value='21'>Fix a bug in the LEFT JOIN <a href="../optoverview.html#flattening">flattening optimization</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/cad1ab4cb7b0fc">cad1ab4cb7b0fc</a>.
+<li>Remove a surplus semicolon that was causing problems for older versions of MSVC.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-05-24 13:08:33 f6d7b988f40217821a382bc298180e9e6794f3ed79a83c6ef5cae048989b3f86"
+<li>SHA3-256 for sqlite3.c: 996b2aff37b6e0c6663d0312cd921bbdf6826c989cbbb07dadde5e9672889bca
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_19_2.html b/www/releaselog/3_19_2.html
new file mode 100644
index 0000000..4b51ae6
--- /dev/null
+++ b/www/releaselog/3_19_2.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.19.2 On 2017-05-25</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.19.2 On 2017-05-25</h2><p><b>Changes in version 3.19.0 (2017-05-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> The <a href="../c3ref/c_alter_table.html">SQLITE_READ</a> <a href="../c3ref/set_authorizer.html">authorizer callback</a> is invoked once
+ with a column name that is an empty string
+ for every table referenced in a query from which no columns are extracted.
+<li> When using an index on an expression, try to use expression values already
+ available in the index, rather than loading the original columns and recomputing
+ the expression.
+<li> Enhance the <a href="../optoverview.html#flattening">flattening optimization</a> so that it is able to flatten views
+ on the right-hand side of a LEFT JOIN.
+<li> Use <a href="../lang_corefunc.html#replace">replace()</a> instead of <a href="../lang_corefunc.html#char">char()</a> for escaping newline and carriage-return
+ characters embedded in strings in the .dump output from the <a href="../cli.html">command-line shell</a>.
+<li> Avoid unnecessary foreign key processing in UPDATE statements that do not
+ touch the columns that are constrained by the foreign keys.
+<li> On a DISTINCT query that uses an index, try to skip ahead to the next distinct
+ entry using the index rather than stepping through rows, when an appropriate
+ index is available.
+<li> Avoid unnecessary invalidation of <a href="../c3ref/blob.html">sqlite3_blob</a> handles when making
+ changes to unrelated tables.
+<li> Transfer any terms of the HAVING clause that use only columns mentioned in
+ the GROUP BY clause over to the WHERE clause for faster processing.
+<li> Reuse the same materialization of a VIEW if that VIEW appears more than
+ once in the same query.
+<li> Enhance <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> so that it identifies tables that have two
+ or more rows with the same <a href="../lang_createtable.html#rowid">rowid</a>.
+<li> Enhance the <a href="../fts5.html">FTS5</a> query syntax so that <a href="../fts5.html#fts5_column_filters">column filters</a>
+ may be applied to arbitrary expressions.
+<li> Enhance the <a href="../json1.html#jex">json_extract()</a> function to cache and reuse parses of JSON
+ input text.
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/anycollseq.c">anycollseq.c</a>
+ <a href="../loadext.html">loadable extension</a> that allows a generic SQLite database connection to
+ read a schema that contains unknown and/or
+ application-specific <a href="../datatype3.html#collation">collating sequences</a>.
+<p><b>Bug Fixes:</b>
+<li> Fix a problem in <a href="../lang_replace.html">REPLACE</a> that can result in a corrupt database containing
+ two or more rows with the same <a href="../lang_createtable.html#rowid">rowid</a>. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f68dc596c4e6018d">f68dc596c4e6018d</a>.
+<li> Fix a problem in <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> that was causing a subsequent
+ <a href="../lang_vacuum.html">VACUUM</a> to behave suboptimally.
+<li> Fix the <a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command so that it works correctly with
+ foreign keys on <a href="../withoutrowid.html">WITHOUT ROWID</a> tables.
+<li> Fix a bug in the b-tree logic that can result in incorrect duplicate answers
+ for IN operator queries. Ticket
+ <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>
+<li> Disallow leading zeros in numeric constants in JSON. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/b93be8729a895a528e2">b93be8729a895a528e2</a>.
+<li> Disallow control characters inside of strings in JSON. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6c9b5514077fed34551">6c9b5514077fed34551</a>.
+<li> Limit the depth of recursion for JSON objects and arrays in order to avoid
+ excess stack usage in the recursive descent parser. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/981329adeef51011052">981329adeef51011052</a>.
+</ol>
+<p><b>Additional changes in version 3.19.1 (2017-05-24):</b></p>
+<p><ol class='lessindent'>
+<li value='21'>Fix a bug in the LEFT JOIN <a href="../optoverview.html#flattening">flattening optimization</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/cad1ab4cb7b0fc">cad1ab4cb7b0fc</a>.
+<li>Remove a surplus semicolon that was causing problems for older versions of MSVC.
+</ol>
+<p><b>Additional changes in version 3.19.2 (2017-05-25):</b></p>
+<p><ol class='lessindent'>
+<li value='23'>Fix more bugs in the LEFT JOIN <a href="../optoverview.html#flattening">flattening optimization</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/7fde638e94287d2c">7fde638e94287d2c</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-05-25 16:50:27 edb4e819b0c058c7d74d27ebd14cc5ceb2bad6a6144a486a970182b7afe3f8b9"
+<li>SHA3-256 for sqlite3.c: 1be0c457869c1f7eba58c3b5097b9ec307a15be338308bee8e5be8570bcf5d1e
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_19_3.html b/www/releaselog/3_19_3.html
new file mode 100644
index 0000000..93f9d35
--- /dev/null
+++ b/www/releaselog/3_19_3.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.19.3 On 2017-06-08</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.19.3 On 2017-06-08</h2><p><b>Changes in version 3.19.0 (2017-05-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> The <a href="../c3ref/c_alter_table.html">SQLITE_READ</a> <a href="../c3ref/set_authorizer.html">authorizer callback</a> is invoked once
+ with a column name that is an empty string
+ for every table referenced in a query from which no columns are extracted.
+<li> When using an index on an expression, try to use expression values already
+ available in the index, rather than loading the original columns and recomputing
+ the expression.
+<li> Enhance the <a href="../optoverview.html#flattening">flattening optimization</a> so that it is able to flatten views
+ on the right-hand side of a LEFT JOIN.
+<li> Use <a href="../lang_corefunc.html#replace">replace()</a> instead of <a href="../lang_corefunc.html#char">char()</a> for escaping newline and carriage-return
+ characters embedded in strings in the .dump output from the <a href="../cli.html">command-line shell</a>.
+<li> Avoid unnecessary foreign key processing in UPDATE statements that do not
+ touch the columns that are constrained by the foreign keys.
+<li> On a DISTINCT query that uses an index, try to skip ahead to the next distinct
+ entry using the index rather than stepping through rows, when an appropriate
+ index is available.
+<li> Avoid unnecessary invalidation of <a href="../c3ref/blob.html">sqlite3_blob</a> handles when making
+ changes to unrelated tables.
+<li> Transfer any terms of the HAVING clause that use only columns mentioned in
+ the GROUP BY clause over to the WHERE clause for faster processing.
+<li> Reuse the same materialization of a VIEW if that VIEW appears more than
+ once in the same query.
+<li> Enhance <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> so that it identifies tables that have two
+ or more rows with the same <a href="../lang_createtable.html#rowid">rowid</a>.
+<li> Enhance the <a href="../fts5.html">FTS5</a> query syntax so that <a href="../fts5.html#fts5_column_filters">column filters</a>
+ may be applied to arbitrary expressions.
+<li> Enhance the <a href="../json1.html#jex">json_extract()</a> function to cache and reuse parses of JSON
+ input text.
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/anycollseq.c">anycollseq.c</a>
+ <a href="../loadext.html">loadable extension</a> that allows a generic SQLite database connection to
+ read a schema that contains unknown and/or
+ application-specific <a href="../datatype3.html#collation">collating sequences</a>.
+<p><b>Bug Fixes:</b>
+<li> Fix a problem in <a href="../lang_replace.html">REPLACE</a> that can result in a corrupt database containing
+ two or more rows with the same <a href="../lang_createtable.html#rowid">rowid</a>. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/f68dc596c4e6018d">f68dc596c4e6018d</a>.
+<li> Fix a problem in <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> that was causing a subsequent
+ <a href="../lang_vacuum.html">VACUUM</a> to behave suboptimally.
+<li> Fix the <a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command so that it works correctly with
+ foreign keys on <a href="../withoutrowid.html">WITHOUT ROWID</a> tables.
+<li> Fix a bug in the b-tree logic that can result in incorrect duplicate answers
+ for IN operator queries. Ticket
+ <a href="https://sqlite.org/src/info/61fe9745">61fe9745</a>
+<li> Disallow leading zeros in numeric constants in JSON. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/b93be8729a895a528e2">b93be8729a895a528e2</a>.
+<li> Disallow control characters inside of strings in JSON. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6c9b5514077fed34551">6c9b5514077fed34551</a>.
+<li> Limit the depth of recursion for JSON objects and arrays in order to avoid
+ excess stack usage in the recursive descent parser. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/981329adeef51011052">981329adeef51011052</a>.
+</ol>
+<p><b>Additional changes in version 3.19.1 (2017-05-24):</b></p>
+<p><ol class='lessindent'>
+<li value='21'>Fix a bug in the LEFT JOIN <a href="../optoverview.html#flattening">flattening optimization</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/cad1ab4cb7b0fc">cad1ab4cb7b0fc</a>.
+<li>Remove a surplus semicolon that was causing problems for older versions of MSVC.
+</ol>
+<p><b>Additional changes in version 3.19.2 (2017-05-25):</b></p>
+<p><ol class='lessindent'>
+<li value='23'>Fix more bugs in the LEFT JOIN <a href="../optoverview.html#flattening">flattening optimization</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/7fde638e94287d2c">7fde638e94287d2c</a>.
+</ol>
+<p><b>Additional changes in version 3.19.3 (2017-06-08):</b></p>
+<p><ol class='lessindent'>
+<li value='24'>Fix a bug associated with <a href="../pragma.html#pragma_auto_vacuum">auto_vacuum</a> that can lead to database
+ corruption. The bug was introduced in <a href="../releaselog/3_16_0.html">version 3.16.0</a> (2017-01-02).
+ Ticket <a href="https://sqlite.org/src/info/fda22108">fda22108</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-06-08 14:26:16 0ee482a1e0eae22e08edc8978c9733a96603d4509645f348ebf55b579e89636b"
+<li>SHA3-256 for sqlite3.c: 368f1d31272b1739f804bcfa5485e5de62678015c4adbe575003ded85c164bb8
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_1_0.html b/www/releaselog/3_1_0.html
new file mode 100644
index 0000000..d783538
--- /dev/null
+++ b/www/releaselog/3_1_0.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.1.0 On 2005-01-21</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.1.0 On 2005-01-21</h2><p><ol class='lessindent'>
+<li>Autovacuum support added</li>
+<li>CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP added</li>
+<li>Support for the EXISTS clause added.</li>
+<li>Support for correlated subqueries added.</li>
+<li>Added the ESCAPE clause on the LIKE operator.</li>
+<li>Support for ALTER TABLE ... RENAME TABLE ... added</li>
+<li>AUTOINCREMENT keyword supported on INTEGER PRIMARY KEY</li>
+<li>Many SQLITE_OMIT_ macros inserts to omit features at compile-time
+ and reduce the library footprint.</li>
+<li>The REINDEX command was added.</li>
+<li>The engine no longer consults the main table if it can get
+ all the information it needs from an index.</li>
+<li>Many nuisance bugs fixed.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_1_1.html b/www/releaselog/3_1_1.html
new file mode 100644
index 0000000..87ca808
--- /dev/null
+++ b/www/releaselog/3_1_1.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.1.1 On 2005-02-01</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.1.1 On 2005-02-01</h2><p><ol class='lessindent'>
+<li>Automatic caching of prepared statements in the TCL interface</li>
+<li>ATTACH and DETACH as well as some other operations cause existing
+ prepared statements to expire.</li>
+<li>Numerous minor bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_1_2.html b/www/releaselog/3_1_2.html
new file mode 100644
index 0000000..e819953
--- /dev/null
+++ b/www/releaselog/3_1_2.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.1.2 On 2005-02-15</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.1.2 On 2005-02-15</h2><p><ol class='lessindent'>
+<li>Fix a bug that can lead to database corruption if there are two
+open connections to the same database and one connection does a VACUUM
+and the second makes some change to the database.</li>
+<li>Allow "?" parameters in the LIMIT clause.</li>
+<li>Fix VACUUM so that it works with AUTOINCREMENT.</li>
+<li>Fix a race condition in AUTOVACUUM that can lead to corrupt databases</li>
+<li>Add a numeric version number to the sqlite3.h include file.</li>
+<li>Other minor bug fixes and performance enhancements.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_1_3.html b/www/releaselog/3_1_3.html
new file mode 100644
index 0000000..d44acc7
--- /dev/null
+++ b/www/releaselog/3_1_3.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.1.3 On 2005-02-19</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.1.3 On 2005-02-19</h2><p><ol class='lessindent'>
+<li>Fix a problem with VACUUM on databases from which tables containing
+AUTOINCREMENT have been dropped.</li>
+<li>Add forward compatibility to the future version 3.2 database file
+format.</li>
+<li>Documentation updates</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_1_4.html b/www/releaselog/3_1_4.html
new file mode 100644
index 0000000..ef63d2b
--- /dev/null
+++ b/www/releaselog/3_1_4.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.1.4 On 2005-03-11</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.1.4 On 2005-03-11</h2><p><ol class='lessindent'>
+<li>Fix a bug in autovacuum that could cause database corruption if
+a CREATE UNIQUE INDEX fails because of a constraint violation.
+This problem only occurs if the new autovacuum feature introduced in
+version 3.1 is turned on.</li>
+<li>The F_FULLSYNC ioctl (currently only supported on Mac OS X) is disabled
+if the synchronous pragma is set to something other than "full".</li>
+<li>Add additional forward compatibility to the future version 3.2 database
+file format.</li>
+<li>Fix a bug in WHERE clauses of the form (rowid<'2')</li>
+<li>New <a href="../compile.html#omitfeatures">SQLITE_OMIT_...</a> compile-time options added</li>
+<li>Updates to the man page</li>
+<li>Remove the use of strcasecmp() from the shell</li>
+<li>Windows DLL exports symbols Tclsqlite_Init and Sqlite_Init</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_1_5.html b/www/releaselog/3_1_5.html
new file mode 100644
index 0000000..77021ac
--- /dev/null
+++ b/www/releaselog/3_1_5.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.1.5 On 2005-03-11</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.1.5 On 2005-03-11</h2><p><ol class='lessindent'>
+<li>The ioctl on Mac OS X to control syncing to disk is F_FULLFSYNC,
+ not F_FULLSYNC. The previous release had it wrong.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_1_6.html b/www/releaselog/3_1_6.html
new file mode 100644
index 0000000..4d342e5
--- /dev/null
+++ b/www/releaselog/3_1_6.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.1.6 On 2005-03-17</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.1.6 On 2005-03-17</h2><p><ol class='lessindent'>
+<li>Fix a bug that could cause database corruption when inserting
+ record into tables with around 125 columns.</li>
+<li>sqlite3_step() is now much more likely to invoke the busy handler
+ and less likely to return SQLITE_BUSY.</li>
+<li>Fix memory leaks that used to occur after a malloc() failure.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_20_0.html b/www/releaselog/3_20_0.html
new file mode 100644
index 0000000..d24f96d
--- /dev/null
+++ b/www/releaselog/3_20_0.html
@@ -0,0 +1,225 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.20.0 On 2017-08-01</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.20.0 On 2017-08-01</h2><p><ol class='lessindent'>
+<li> Update the text of error messages returned by <a href="../c3ref/errcode.html">sqlite3_errmsg()</a> for some
+ error codes.
+<li> Add new <a href="../bindptr.html">pointer passing interfaces</a>.
+<li> Backwards-incompatible changes to some extensions in order to take
+ advantage of the improved security offered by the new
+ <a href="../bindptr.html">pointer passing interfaces</a>:
+ <ol type='a'>
+ <li> <a href="../fts5.html#extending_fts5">Extending FTS5</a> &rarr; requires <a href="../c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to find
+ the fts5_api pointer.
+ <li> <a href="../carray.html">carray(PTR,N)</a> &rarr; requires <a href="../c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter.
+ <li> <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
+ &rarr; requires <a href="../c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter.
+ </ol>
+<li> Added the <a href="../stmt.html">SQLITE_STMT virtual table</a> extension.
+<li> Added the <a href="../completion.html">COMPLETION extension</a> - designed to suggest
+ tab-completions for interactive user interfaces. This is a work in progress.
+ Expect further enhancements in future releases.
+<li> Added the <a href="../unionvtab.html">UNION virtual table</a> extension.
+<li> The built-in <a href="../lang_datefunc.html">date and time functions</a> have been enhanced so that they can be
+ used in <a href="../lang_createtable.html#ckconst">CHECK constraints</a>, in <a href="../expridx.html">indexes on expressions</a>, and in the WHERE clauses
+ of <a href="../partialindex.html">partial indexes</a>, provided that they do not use the 'now', 'localtime', or
+ 'utc' keywords. <a href="../deterministic.html#dtexception">More information</a>.
+<li> Added the <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> and <a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a> interfaces
+ with the extra "prepFlags" parameters.
+<li> Provide the <a href="../c3ref/c_prepare_normalize.html#sqlitepreparepersistent">SQLITE_PREPARE_PERSISTENT</a> flag for <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> and
+ use it to limit <a href="../malloc.html#lookaside">lookaside memory</a> misuse by <a href="../fts3.html">FTS3</a>, <a href="../fts5.html">FTS5</a>, and the
+ <a href="../rtree.html">R-Tree extension</a>.
+<li> Added the <a href="../pragma.html#pragma_secure_delete">PRAGMA secure_delete=FAST</a> command. When secure_delete is
+ set to FAST, old content is overwritten with zeros as long as that does
+ not increase the amount of I/O. Deleted content might still persist on
+ the <a href="../fileformat2.html#freelist">free-page list</a> but will be purged from all b-tree pages.
+<li> Enhancements to the <a href="../cli.html">command-line shell</a>:
+<ol type='a'>
+ <li> Add support for tab-completion using the <a href="../completion.html">COMPLETION extension</a>, for
+ both readline and linenoise.
+ <li> Add the ".cd" command.
+ <li> Enhance the "<a href="../cli.html#dschema">.schema</a>" command to show the schema of all attached
+ databases.
+ <li> Enhance "<a href="../cli.html#dtables">.tables</a>" so that it shows the schema names for all attached
+ if the name is anything other than "main".
+ <li> The "<a href="../cli.html#csv">.import</a>" command ignores an initial UTF-8 BOM.
+ <li> Added the "--newlines" option to the "<a href="../cli.html#dump">.dump</a>" command to cause U+000a and
+ U+000d characters to be output literally rather than escaped using the
+ <a href="../lang_corefunc.html#replace">replace()</a> function.
+</ol>
+<li> Query planner enhancements:
+<ol type='a'>
+ <li> When generating individual loops for each ORed term of an OR scan,
+ move any constant WHERE expressions outside of the loop, as is
+ done for top-level loops.
+ <li> The query planner examines the values of bound parameters to help
+ determine if a partial index is usable.
+ <li> When deciding between two plans with the same estimated cost, bias
+ the selection toward the one that does not use the sorter.
+ <li> Evaluate WHERE clause constraints involving correlated subqueries
+ last, in the hope that they never have be evaluated at all.
+ <li> Do not use the <a href="../optoverview.html#flattening">flattening optimization</a> for a sub-query on the RHS
+ of a LEFT JOIN if that subquery reads data from a <a href="../vtab.html">virtual table</a> as
+ doing so prevents the query planner from creating <a href="../optoverview.html#autoindex">automatic indexes</a>
+ on the results of the sub-query, which can slow down the query.
+</ol>
+<li> Add <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">SQLITE_STMTSTATUS_REPREPARE</a>, <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">SQLITE_STMTSTATUS_RUN</a>,
+ and <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused">SQLITE_STMTSTATUS_MEMUSED</a> options for the
+ <a href="../c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface.
+<li> Provide <a href="../pragma.html#pragfunc">PRAGMA functions</a> for
+ <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a>, and
+ <a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a>.
+<li> Add the -withoutnulls option to the <a href="../tclsqlite.html#eval">TCL interface eval method</a>.
+<li> Enhance the <a href="../sqlanalyze.html">sqlite3_analyzer.exe</a> utility program so that it shows
+ the number of bytes of metadata on btree pages.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">SQLITE_DBCONFIG_ENABLE_QPSG</a> run-time option and the
+ <a href="../compile.html#enable_qpsg">SQLITE_ENABLE_QPSG</a> compile-time option enable the
+ <a href="../queryplanner-ng.html#qpstab">query planner stability guarantee</a>. See also ticket
+ <a href="https://www.sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>
+<li> Miscellaneous optimizations result in a 2% reduction in <a href="../cpu.html">CPU cycles used</a>.
+<p><b>Bug Fixes:</b>
+<li> Fix the behavior of <a href="../c3ref/column_name.html">sqlite3_column_name()</a> for queries that use the
+ <a href="../optoverview.html#flattening">flattening optimization</a> so that the result is consistent with other
+ queries that do not use that optimization, and with PostgreSQL, MySQL,
+ and SQLServer. Ticket <a href="https://sqlite.org/src/info/de3403bf5ae">de3403bf5ae</a>.
+<li> Fix the query planner so that it knows not to use <a href="../optoverview.html#autoindex">automatic indexes</a>
+ on the right table of LEFT JOIN if the WHERE clause uses the <a href="../lang_expr.html#isisnot">IS operator</a>.
+ Fix for <a href="https://sqlite.org/src/info/ce68383bf6aba">ce68383bf6aba</a>.
+<li> Ensure that the query planner knows that any column of a
+ <a href="../optoverview.html#flattening">flattened</a> LEFT JOIN can be NULL even
+ if that column is labeled with "NOT NULL". Fix for ticket
+ <a href="https://sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>.
+<li> Fix rare false-positives in <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> when run on a database connection
+ with <a href="../lang_attach.html">attached databases</a>. Ticket
+ <a href="https://sqlite.org/src/info/a4e06e75a9ab61a12">a4e06e75a9ab61a12</a>
+<li> Fix a bug (discovered by OSSFuzz) that causes an assertion fault if certain
+ dodgy CREATE TABLE declarations are used. Ticket
+ <a href="https://sqlite.org/src/info/bc115541132dad136">bc115541132dad136</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-08-01 13:24:15 9501e22dfeebdcefa783575e47c60b514d7c2e0cad73b2a496c0bc4b680900a8"
+<li>SHA3-256 for sqlite3.c: 79b7f3b977360456350219cba0ba0e5eb55910565eab68ea83edda2f968ebe95
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_20_1.html b/www/releaselog/3_20_1.html
new file mode 100644
index 0000000..be23948
--- /dev/null
+++ b/www/releaselog/3_20_1.html
@@ -0,0 +1,231 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.20.1 On 2017-08-24</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.20.1 On 2017-08-24</h2><p><b>Changes in version 3.20.0 (2017-08-01):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Update the text of error messages returned by <a href="../c3ref/errcode.html">sqlite3_errmsg()</a> for some
+ error codes.
+<li> Add new <a href="../bindptr.html">pointer passing interfaces</a>.
+<li> Backwards-incompatible changes to some extensions in order to take
+ advantage of the improved security offered by the new
+ <a href="../bindptr.html">pointer passing interfaces</a>:
+ <ol type='a'>
+ <li> <a href="../fts5.html#extending_fts5">Extending FTS5</a> &rarr; requires <a href="../c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to find
+ the fts5_api pointer.
+ <li> <a href="../carray.html">carray(PTR,N)</a> &rarr; requires <a href="../c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter.
+ <li> <a href="https://www.sqlite.org/src/file/ext/misc/remember.c">remember(V,PTR)</a>
+ &rarr; requires <a href="../c3ref/bind_blob.html">sqlite3_bind_pointer()</a> to set the PTR parameter.
+ </ol>
+<li> Added the <a href="../stmt.html">SQLITE_STMT virtual table</a> extension.
+<li> Added the <a href="../completion.html">COMPLETION extension</a> - designed to suggest
+ tab-completions for interactive user interfaces. This is a work in progress.
+ Expect further enhancements in future releases.
+<li> Added the <a href="../unionvtab.html">UNION virtual table</a> extension.
+<li> The built-in <a href="../lang_datefunc.html">date and time functions</a> have been enhanced so that they can be
+ used in <a href="../lang_createtable.html#ckconst">CHECK constraints</a>, in <a href="../expridx.html">indexes on expressions</a>, and in the WHERE clauses
+ of <a href="../partialindex.html">partial indexes</a>, provided that they do not use the 'now', 'localtime', or
+ 'utc' keywords. <a href="../deterministic.html#dtexception">More information</a>.
+<li> Added the <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> and <a href="../c3ref/prepare.html">sqlite3_prepare16_v3()</a> interfaces
+ with the extra "prepFlags" parameters.
+<li> Provide the <a href="../c3ref/c_prepare_normalize.html#sqlitepreparepersistent">SQLITE_PREPARE_PERSISTENT</a> flag for <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> and
+ use it to limit <a href="../malloc.html#lookaside">lookaside memory</a> misuse by <a href="../fts3.html">FTS3</a>, <a href="../fts5.html">FTS5</a>, and the
+ <a href="../rtree.html">R-Tree extension</a>.
+<li> Added the <a href="../pragma.html#pragma_secure_delete">PRAGMA secure_delete=FAST</a> command. When secure_delete is
+ set to FAST, old content is overwritten with zeros as long as that does
+ not increase the amount of I/O. Deleted content might still persist on
+ the <a href="../fileformat2.html#freelist">free-page list</a> but will be purged from all b-tree pages.
+<li> Enhancements to the <a href="../cli.html">command-line shell</a>:
+<ol type='a'>
+ <li> Add support for tab-completion using the <a href="../completion.html">COMPLETION extension</a>, for
+ both readline and linenoise.
+ <li> Add the ".cd" command.
+ <li> Enhance the "<a href="../cli.html#dschema">.schema</a>" command to show the schema of all attached
+ databases.
+ <li> Enhance "<a href="../cli.html#dtables">.tables</a>" so that it shows the schema names for all attached
+ if the name is anything other than "main".
+ <li> The "<a href="../cli.html#csv">.import</a>" command ignores an initial UTF-8 BOM.
+ <li> Added the "--newlines" option to the "<a href="../cli.html#dump">.dump</a>" command to cause U+000a and
+ U+000d characters to be output literally rather than escaped using the
+ <a href="../lang_corefunc.html#replace">replace()</a> function.
+</ol>
+<li> Query planner enhancements:
+<ol type='a'>
+ <li> When generating individual loops for each ORed term of an OR scan,
+ move any constant WHERE expressions outside of the loop, as is
+ done for top-level loops.
+ <li> The query planner examines the values of bound parameters to help
+ determine if a partial index is usable.
+ <li> When deciding between two plans with the same estimated cost, bias
+ the selection toward the one that does not use the sorter.
+ <li> Evaluate WHERE clause constraints involving correlated subqueries
+ last, in the hope that they never have be evaluated at all.
+ <li> Do not use the <a href="../optoverview.html#flattening">flattening optimization</a> for a sub-query on the RHS
+ of a LEFT JOIN if that subquery reads data from a <a href="../vtab.html">virtual table</a> as
+ doing so prevents the query planner from creating <a href="../optoverview.html#autoindex">automatic indexes</a>
+ on the results of the sub-query, which can slow down the query.
+</ol>
+<li> Add <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">SQLITE_STMTSTATUS_REPREPARE</a>, <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">SQLITE_STMTSTATUS_RUN</a>,
+ and <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused">SQLITE_STMTSTATUS_MEMUSED</a> options for the
+ <a href="../c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface.
+<li> Provide <a href="../pragma.html#pragfunc">PRAGMA functions</a> for
+ <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a>, and
+ <a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a>.
+<li> Add the -withoutnulls option to the <a href="../tclsqlite.html#eval">TCL interface eval method</a>.
+<li> Enhance the <a href="../sqlanalyze.html">sqlite3_analyzer.exe</a> utility program so that it shows
+ the number of bytes of metadata on btree pages.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">SQLITE_DBCONFIG_ENABLE_QPSG</a> run-time option and the
+ <a href="../compile.html#enable_qpsg">SQLITE_ENABLE_QPSG</a> compile-time option enable the
+ <a href="../queryplanner-ng.html#qpstab">query planner stability guarantee</a>. See also ticket
+ <a href="https://www.sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>
+<li> Miscellaneous optimizations result in a 2% reduction in <a href="../cpu.html">CPU cycles used</a>.
+<p><b>Bug Fixes:</b>
+<li> Fix the behavior of <a href="../c3ref/column_name.html">sqlite3_column_name()</a> for queries that use the
+ <a href="../optoverview.html#flattening">flattening optimization</a> so that the result is consistent with other
+ queries that do not use that optimization, and with PostgreSQL, MySQL,
+ and SQLServer. Ticket <a href="https://sqlite.org/src/info/de3403bf5ae">de3403bf5ae</a>.
+<li> Fix the query planner so that it knows not to use <a href="../optoverview.html#autoindex">automatic indexes</a>
+ on the right table of LEFT JOIN if the WHERE clause uses the <a href="../lang_expr.html#isisnot">IS operator</a>.
+ Fix for <a href="https://sqlite.org/src/info/ce68383bf6aba">ce68383bf6aba</a>.
+<li> Ensure that the query planner knows that any column of a
+ <a href="../optoverview.html#flattening">flattened</a> LEFT JOIN can be NULL even
+ if that column is labeled with "NOT NULL". Fix for ticket
+ <a href="https://sqlite.org/src/info/892fc34f173e99d8">892fc34f173e99d8</a>.
+<li> Fix rare false-positives in <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> when run on a database connection
+ with <a href="../lang_attach.html">attached databases</a>. Ticket
+ <a href="https://sqlite.org/src/info/a4e06e75a9ab61a12">a4e06e75a9ab61a12</a>
+<li> Fix a bug (discovered by OSSFuzz) that causes an assertion fault if certain
+ dodgy CREATE TABLE declarations are used. Ticket
+ <a href="https://sqlite.org/src/info/bc115541132dad136">bc115541132dad136</a>
+</ol>
+<p><b>Additional changes in version 3.20.1 (2017-08-24):</b></p>
+<p><ol class='lessindent'>
+<li value='24'> Fix a potential memory leak in the new <a href="../c3ref/result_blob.html">sqlite3_result_pointer()</a> interface.
+ Ticket <a href="https://sqlite.org/src/info/7486aa54b968e9b5">7486aa54b968e9b5</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34"
+<li>SHA3-256 for sqlite3.c: 93b1a6d69b48dc39697d1d3a1e4c30b55da0bdd2cad0c054462f91081832954a
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_21_0.html b/www/releaselog/3_21_0.html
new file mode 100644
index 0000000..bde1b70
--- /dev/null
+++ b/www/releaselog/3_21_0.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.21.0 On 2017-10-24</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.21.0 On 2017-10-24</h2><p><ol class='lessindent'>
+<li> Take advantage of the atomic-write capabilities in the
+ <a href="https://en.wikipedia.org/wiki/F2FS">F2FS filesystem</a> when available, for
+ greatly reduced transaction overhead. This currently requires the
+ <a href="../compile.html#enable_batch_atomic_write">SQLITE_ENABLE_BATCH_ATOMIC_WRITE</a> compile-time option.
+<li> Allow <a href="../lang_attach.html">ATTACH</a> and <a href="../lang_detach.html">DETACH</a> commands to work inside of a transaction.
+<li> Allow <a href="../vtab.html#worid">WITHOUT ROWID virtual tables</a> to be writable if the PRIMARY KEY
+ contains exactly one column.
+<li> The "fsync()" that occurs after the header is written in a WAL reset
+ now uses the sync settings for checkpoints. This means it will use a
+ "fullfsync" on macs if <a href="../pragma.html#pragma_checkpoint_fullfsync">PRAGMA checkpoint_fullfsync</a> set on.
+<li> The <a href="../c3ref/libversion.html">sqlite3_sourceid()</a> function tries to detect if the source code has
+ been modified from what is checked into version control and if there are
+ modifications, the last four characters of the version hash are shown as
+ "alt1" or "alt2". The objective is to detect accidental and/or careless
+ edits. A forger can subvert this feature.
+<li> Improved de-quoting of column names for <a href="../lang_createtable.html#createtabas">CREATE TABLE AS</a> statements with
+ an aggregate query on the right-hand side.
+<li> Fewer "stat()" system calls issued by the unix VFS.
+<li> Enhanced the <a href="../optoverview.html#like_opt">LIKE optimization</a> so that it works with an <a href="../lang_expr.html#like">ESCAPE</a> clause.
+<li> Enhanced <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a> to detect obscure
+ row corruption that they were formerly missing. Also update both pragmas
+ so that they return error text rather than SQLITE_CORRUPT when encountering
+ corruption in <a href="../fileformat2.html#record_format">records</a>.
+<li> The query planner now prefers to implement FROM-clause subqueries using
+ <a href="../optoverview.html#coroutines">co-routines</a> rather using the <a href="../optoverview.html#flattening">query flattener</a> optimization. Support for
+ the use of co-routines for subqueries may no longer be disabled.
+<li> Pass information about !=, IS, IS NOT, NOT NULL, and IS NULL constraints
+ into the <a href="../vtab.html#xbestindex">xBestIndex</a> method of virtual tables.
+<li> Enhanced the <a href="../csv.html">CSV virtual table</a> so that it accepts the last row of
+ input if the final new-line character is missing.
+<li> Remove the rarely-used "scratch" memory allocator. Replace it with the
+ <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigsmallmalloc">SQLITE_CONFIG_SMALL_MALLOC</a> configuration setting that gives SQLite
+ a hint that large memory allocations should be avoided when possible.
+<li> Added the
+ <a href="https://sqlite.org/src/file/ext/misc/unionvtab.c">swarm virtual table</a>
+ to the existing union virtual table extension.
+<li> Added the
+ <a href="https://sqlite.org/src/file/src/dbpage.c">sqlite_dbpage virtual table</a>
+ for providing direct access to pages
+ of the database file. The source code is built into the <a href="../amalgamation.html">amalgamation</a> and
+ is activated using the <a href="../compile.html#enable_dbpage_vtab">-DSQLITE_ENABLE_DBPAGE_VTAB</a> compile-time option.
+<li> Add a new type of fts5vocab virtual table - "instance" - that provides
+ direct access to an FTS5 full-text index at the lowest possible level.
+<li> Remove a call to rand_s() in the Windows VFS since it was causing problems
+ in Firefox on some older laptops.
+<li> The <a href="https://sqlite.org/src/finfo?name=src/shell.c">src/shell.c</a> source code
+ to the <a href="../cli.html">command-line shell</a> is no longer under version control. That file
+ is now generated as part of the build process.
+<li> Miscellaneous <a href="../cpu.html#microopt">microoptimizations</a> reduce CPU usage by about 2.1%.
+<li> Bug fixes:
+<ol type="a">
+ <li> Fix a faulty assert() statement discovered by OSSFuzz.
+ Ticket <a href="https://sqlite.org/src/info/cb91bf4290c211d">cb91bf4290c211d</a>
+ <li> Fix an obscure memory leak in <a href="../c3ref/result_blob.html">sqlite3_result_pointer()</a>.
+ Ticket <a href="https://sqlite.org/src/info/7486aa54b968e9b">7486aa54b968e9b</a>
+ <li> Avoid a possible use-after-free error by deferring schema resets until
+ after the query planner has finished running.
+ Ticket <a href="https://sqlite.org/src/info/be436a7f4587ce5">be436a7f4587ce5</a>
+ <li> Only use indexes-on-expressions to optimize ORDER BY or GROUP BY if
+ the COLLATE is correct.
+ Ticket <a href="https://sqlite.org/src/info/e20dd54ab0e4383">e20dd54ab0e4383</a>
+ <li> Fix an assertion fault that was coming up when the expression in an
+ index-on-expressions is really a constant.
+ Ticket <a href="https://sqlite.org/src/info/aa98619ad08ddca">aa98619ad08ddca</a>
+ <li> Fix an assertion fault that could occur following
+ <a href="../pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a>.
+ Ticket <a href="https://sqlite.org/src/info/cb91bf4290c211d">cb91bf4290c211d</a>
+ <li> Fix a segfault that can occur for queries that use table-valued functions
+ in an IN or EXISTS subquery.
+ Ticket <a href="https://sqlite.org/src/info/b899b6042f97f5">b899b6042f97f5</a>
+ <li> Fix a potential integer overflow problem when compiling a particular
+ horrendous common table expression. This was another problem discovered
+ by OSSFuzz. Check-in <a href="https://sqlite.org/src/info/6ee8cb6ae5">6ee8cb6ae5</a>.
+ <li> Fix a potential out-of-bound read when querying a corrupt database file,
+ a problem detected by Natalie Silvanovich of Google Project Zero.
+ Check-in <a href="https://sqlite.org/src/info/04925dee41a21f">04925dee41a21f</a>.
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827"
+<li>SHA3-256 for sqlite3.c: 84c181c0283d0320f488357fc8aab51898370c157601459ebee49d779036fe03
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_22_0.html b/www/releaselog/3_22_0.html
new file mode 100644
index 0000000..3e29092
--- /dev/null
+++ b/www/releaselog/3_22_0.html
@@ -0,0 +1,227 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.22.0 On 2018-01-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.22.0 On 2018-01-22</h2><p><ol class='lessindent'>
+<li> The output of <a href="../c3ref/trace_v2.html">sqlite3_trace_v2()</a> now shows each individual SQL statement
+ run within a trigger.
+<li> Add the ability to read from <a href="../wal.html">WAL mode</a> databases even if the application
+ lacks write permission on the database and its containing directory, as long as
+ the -shm and -wal files exist in that directory.
+<li> Added the <a href="../rtree.html#rtreecheck">rtreecheck()</a> scalar SQL function to the <a href="../rtree.html">R-Tree extension</a>.
+<li> Added the <a href="../c3ref/vtab_nochange.html">sqlite3_vtab_nochange()</a> and <a href="../c3ref/value_blob.html">sqlite3_value_nochange()</a> interfaces
+ to help virtual table implementations optimize UPDATE operations.
+<li> Added the <a href="../c3ref/vtab_collation.html">sqlite3_vtab_collation()</a> interface.
+<li> Added support for the <a href="../fts5.html#carrotq">"&#94;" initial token syntax</a> in FTS5.
+<li> New extensions:
+<ol type='a'>
+ <li> The <a href="../zipfile.html">Zipfile virtual table</a> can read and write a
+ <a href="https://en.wikipedia.org/wiki/Zip_(file_format)">ZIP Archive</a>.
+ <li> Added the fsdir(PATH) <a href="../vtab.html#tabfunc2">table-valued function</a> to the
+ <a href="https://sqlite.org/src/file/ext/misc/fileio.c">fileio.c</a> extension,
+ for listing the files in a directory.
+ <li> The <a href="https://sqlite.org/src/file/ext/misc/btreeinfo.c">sqlite_btreeinfo</a>
+ eponymous virtual table for introspecting and estimating the sizes of
+ the btrees in a database.
+ <li> The <a href="https://sqlite.org/src/file/ext/misc/appendvfs.c">Append VFS</a> is a
+ <a href="../vfs.html#shim">VFS shim</a> that allows an SQLite database to be appended to some other
+ file. This allows (for example) a database to be appended to an
+ executable that then opens and reads the database.
+</ol>
+<li> Query planner enhancements:
+<ol type='a'>
+ <li> The optimization that uses an index to quickly compute an
+ aggregate min() or max() is extended to work with
+ <a href="../expridx.html">indexes on expressions</a>.
+ <li> The decision of whether to implement a FROM-clause subquery
+ as a co-routine or using <a href="../optoverview.html#flattening">query flattening</a>
+ now considers whether
+ the result set of the outer query is "complex" (if it
+ contains functions or expression subqueries). A complex result
+ set biases the decision toward the use of co-routines.
+ <li> The planner avoids query plans that use indexes with unknown
+ collating functions.
+ <li> The planner omits unused LEFT JOINs even if they are not the
+ right-most joins of a query.
+</ol>
+<li> Other performance optimizations:
+<ol type='a'>
+ <li> A smaller and faster implementation of text to floating-point
+ conversion subroutine: sqlite3AtoF().
+ <li> The <a href="../lemon.html">Lemon parser generator</a> creates a faster parser.
+ <li> Use the strcspn() C-library routine to speed up the LIKE and
+ GLOB operators.
+</ol>
+<li> Improvements to the <a href="../cli.html">command-line shell</a>:
+<ol type='a'>
+ <li> The ".schema" command shows the structure of virtual tables.
+ <li> Added support for reading and writing
+ <a href="../sqlar.html">SQLite Archive</a> files using
+ the <a href="../cli.html#sqlar">.archive command</a>.
+ <li> Added the experimental <a href="../cli.html#expert">.expert command</a>
+ <li> Added the ".eqp trigger" variant of the ".eqp" command
+ <li> Enhance the ".lint fkey-indexes" command so that it works with
+ <a href="../withoutrowid.html">WITHOUT ROWID</a> tables.
+ <li> If the filename argument to the shell is a ZIP archive rather than
+ an SQLite database, then the shell automatically opens that ZIP
+ archive using the <a href="../zipfile.html">Zipfile virtual table</a>.
+ <li> Added the <a href="../cli.html#editfunc">edit() SQL function</a>.
+ <li> Added the <a href="../cli.html#exexcel*">.excel command</a> to simplify exporting
+ database content to a spreadsheet.
+ <li> Databases are opened using
+ <a href="https://sqlite.org/src/file/ext/misc/appendvfs.c">Append VFS</a> when
+ the --append flag is used on the command line or with the
+ .open command.
+</ol>
+<li> Enhance the <a href="../compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a> compile-time option so
+ that it works for <a href="../withoutrowid.html">WITHOUT ROWID</a> tables.
+<li> Provide the <a href="../lang_corefunc.html#sqlite_offset">sqlite_offset(X)</a> SQL function that returns
+ the byte offset into the database file to the beginning of the record
+ holding value X, when compiling with <a href="../compile.html#enable_offset_sql_func">-DSQLITE_ENABLE_OFFSET_SQL_FUNC</a>.
+<li> Bug fixes:
+<ol type='a'>
+ <li> Infinite loop on an UPDATE that uses an OR operator in the WHERE clause.
+ Problem introduced with 3.17.0 and reported on the mailing list about
+ one year later. Ticket
+ <a href="https://www.sqlite.org/src/info/47b2581aa9bfecec">47b2581aa9bfecec</a>.
+ <li> Incorrect query results when the skip-ahead-distinct optimization is
+ used.
+ Ticket <a href="https://sqlite.org/src/info/ef9318757b152e3a">ef9318757b152e3a</a>.
+ <li> Incorrect query results on a join with a ORDER BY DESC. Ticket
+ <a href="https://sqlite.org/src/info/123c9ba32130a6c9">123c9ba32130a6c9</a>.
+ <li> Inconsistent result set column names between CREATE TABLE AS
+ and a simple SELECT. Ticket
+ <a href="https://sqlite.org/src/info/3b4450072511e621">3b4450072511e621</a>
+ <li> Assertion fault when doing REPLACE on an index on an expression.
+ Ticket <a href="https://sqlite.org/src/info/dc3f932f5a147771">dc3f932f5a147771</a>
+ <li> Assertion fault when doing an IN operator on a constant index.
+ Ticket <a href="https://sqlite.org/src/info/aa98619ad08ddcab">aa98619ad08ddcab</a>
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d"
+<li>SHA3-256 for sqlite3.c: 206df47ebc49cd1710ac0dd716ce5de5854826536993f4feab7a49d136b85069
+
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_23_0.html b/www/releaselog/3_23_0.html
new file mode 100644
index 0000000..41c16af
--- /dev/null
+++ b/www/releaselog/3_23_0.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.23.0 On 2018-04-02</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.23.0 On 2018-04-02</h2><p><ol class='lessindent'>
+<li> Add the <a href="../c3ref/serialize.html">sqlite3_serialize()</a> and <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> interfaces when
+ the <a href="../compile.html#enable_deserialize">SQLITE_ENABLE_DESERIALIZE</a> compile-time option is used.
+<li> Recognize TRUE and FALSE as constants. (For compatibility, if there
+ exist columns named "true" or "false", then the identifiers refer to the
+ columns rather than Boolean constants.)
+<li> Support operators IS TRUE, IS FALSE, IS NOT TRUE, and IS NOT FALSE.
+<li> Added the <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill">SQLITE_DBSTATUS_CACHE_SPILL</a> option to <a href="../c3ref/db_status.html">sqlite3_db_status()</a> for
+ reporting the number of cache spills that have occurred.
+<li> The "alternate-form-2" flag ("!") on the <a href="../printf.html">built-in printf</a> implementation
+ now causes string substitutions to measure the width and precision in
+ characters instead of bytes.
+<li> If the <a href="../vtab.html#xcolumn">xColumn</a> method in a <a href="../vtab.html">virtual table</a> implementation returns
+ an error message using <a href="../c3ref/result_blob.html">sqlite3_result_error()</a> then give that error
+ message preference over internally-generated messages.
+<li> Added the -A command-line option to the <a href="../cli.html">CLI</a> to make it easier to manage
+ <a href="../sqlar.html">SQLite Archive files</a>.
+<li> Add support for INSERT OR REPLACE, INSERT OR IGNORE, and UPDATE OR REPLACE
+ in the <a href="../zipfile.html">Zipfile virtual table</a>.
+<li> Enhance the <a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a> interface so that it is hardened
+ against attacks from deliberately corrupted <a href="../sessionintro.html#changeset">changeset</a> objects.
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/normalize.c">sqlite3_normalize()</a>
+ extension function.
+<li> Query optimizer enhancements:
+<ol type='a'>
+ <li> Improve the <a href="../optoverview.html#omitnoopjoin">omit-left-join optimization</a> so that it works in cases where
+ the right-hand table is UNIQUE but not necessarily NOT NULL.
+ <li> Improve the <a href="../optoverview.html#pushdown">push-down optimization</a> so that it works for many LEFT JOINs.
+ <li> Add the <a href="../optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> that converts a LEFT
+ JOIN into an ordinary JOIN if there exist terms in the WHERE clause
+ that would prevent the extra all-NULL row of the LEFT JOIN from
+ appearing in the output set.
+ <li> Avoid unnecessary writes to the sqlite_sequence table when an
+ <a href="../autoinc.html">AUTOINCREMENT</a> table is updated with an rowid that is less than the
+ maximum.
+</ol>
+<li> Bug fixes:
+<ol type='a'>
+ <li> Fix the parser to accept valid <a href="../rowvalue.html">row value</a> syntax.
+ Ticket <a href="https://www.sqlite.org/src/info/7310e2fb3d046a5">7310e2fb3d046a5</a>
+ <li> Fix the query planner so that it takes into account dependencies in
+ the arguments to table-valued functions in subexpressions in
+ the WHERE clause.
+ Ticket <a href="https://www.sqlite.org/src/info/80177f0c226ff54">80177f0c226ff54</a>
+ <li> Fix incorrect result with complex OR-connected WHERE and STAT4.
+ Ticket <a href="https://www.sqlite.org/src/info/ec32177c99ccac2">ec32177c99ccac2</a>
+ <li> Fix potential corruption in <a href="../expridx.html">indexes on expressions</a> due to automatic
+ datatype conversions.
+ Ticket <a href="https://www.sqlite.org/src/info/343634942dd54ab">343634942dd54ab</a>
+ <li> Assertion fault in FTS4.
+ Ticket <a href="https://www.sqlite.org/src/info/d6ec09eccf68cfc">d6ec09eccf68cfc</a>
+ <li> Incorrect result on the less-than operator in <a href="../rowvalue.html">row values</a>.
+ Ticket <a href="https://www.sqlite.org/src/info/f484b65f3d62305">f484b65f3d62305</a>
+ <li> Always interpret non-zero floating-point values as TRUE, even if
+ the integer part is zero.
+ Ticket <a href="https://www.sqlite.org/src/info/36fae083b450e3a">36fae083b450e3a</a>
+ <li> Fix an issue in the fsdir(PATH) <a href="../vtab.html#tabfunc2">table-valued function</a> to the
+ <a href="https://sqlite.org/src/file/ext/misc/fileio.c">fileio.c</a> extension,
+ that caused a segfault if the fsdir() table was used as the inner table
+ of a join. Problem reported on the mailing list and fixed by check-in
+ <a href="https://www.sqlite.org/src/info/7ce4e71c1b7251be">7ce4e71c1b7251be</a>
+ <li> Issue an error rather instead of an assertion-fault or null-pointer
+ dereference when the sqlite_master table is corrupted so that the
+ sqlite_sequence table root page is really a btree-index page. Check-in
+ <a href="https://www.sqlite.org/src/info/525deb7a67fbd647">525deb7a67fbd647</a>
+ <li> Fix the <a href="../lang_analyze.html">ANALYZE</a> command so that it computes statistics on tables
+ whose names begin with "sqlite". Check-in
+ <a href="https://sqlite.org/src/info/0249d9aecf69948d">0249d9aecf69948d</a>
+</ol>
+<li> Additional fixes for issues detected by
+ <a href="https://github.com/google/oss-fuzz">OSSFuzz</a>:
+<ol type='a'>
+ <li> Fix a possible infinite loop on VACUUM for corrupt database files.
+ Check-in <a href="https://www.sqlite.org/src/info/27754b74ddf64">27754b74ddf64</a>
+ <li> Disallow <a href="../lang_expr.html#varparam">parameters</a> in the <a href="../lang_with.html">WITH clause</a> of triggers and views.
+ Check-in <a href="https://www.sqlite.org/src/info/b918d4b4e546d">b918d4b4e546d</a>
+ <li> Fix a potential memory leak in <a href="../rowvalue.html">row value</a> processing.
+ Check-in <a href="https://www.sqlite.org/src/info/2df6bbf1b8ca8">2df6bbf1b8ca8</a>
+ <li> Improve the performance of the <a href="../lang_corefunc.html#replace">replace() SQL function</a> for cases where
+ there are many substitutions on megabyte-sized strings, in an attempt
+ to avoid OSSFuzz timeouts during testing.
+ Check-in <a href="https://www.sqlite.org/src/info/fab2c2b07b5d3">fab2c2b07b5d3</a>
+ <li> Provide an appropriate error message when the sqlite_master table
+ contains a CREATE TABLE AS statement. Formerly this caused either an
+ assertion fault or null pointer dereference. Problem found by OSSFuzz
+ on the GDAL project. Check-in
+ <a href="https://www.sqlite.org/src/info/d75e67654aa96">d75e67654aa96</a>
+ <li> Incorrect assert() statement removed. Check-in
+ <a href="https://www.sqlite.org/src/info/823779d31eb09cda">823779d31eb09cda</a>.
+ <li> Fix a problem with using the <a href="../optoverview.html#like_opt">LIKE optimization</a> on an
+ <a href="../lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>. Check-in
+ <a href="https://www.sqlite.org/src/info/b850dd159918af56">b850dd159918af56</a>.
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-04-02 11:04:16 736b53f57f70b23172c30880186dce7ad9baa3b74e3838cae5847cffb98f5cd2"
+<li>SHA3-256 for sqlite3.c: 4bed3dc2dc905ff55e2c21fd2725551fc0ca50912a9c96c6af712a4289cb24fa
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_23_1.html b/www/releaselog/3_23_1.html
new file mode 100644
index 0000000..26e8ac6
--- /dev/null
+++ b/www/releaselog/3_23_1.html
@@ -0,0 +1,241 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.23.1 On 2018-04-10</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.23.1 On 2018-04-10</h2><p><b>Changes in version 3.23.0 (2018-04-02):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add the <a href="../c3ref/serialize.html">sqlite3_serialize()</a> and <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> interfaces when
+ the <a href="../compile.html#enable_deserialize">SQLITE_ENABLE_DESERIALIZE</a> compile-time option is used.
+<li> Recognize TRUE and FALSE as constants. (For compatibility, if there
+ exist columns named "true" or "false", then the identifiers refer to the
+ columns rather than Boolean constants.)
+<li> Support operators IS TRUE, IS FALSE, IS NOT TRUE, and IS NOT FALSE.
+<li> Added the <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuscachespill">SQLITE_DBSTATUS_CACHE_SPILL</a> option to <a href="../c3ref/db_status.html">sqlite3_db_status()</a> for
+ reporting the number of cache spills that have occurred.
+<li> The "alternate-form-2" flag ("!") on the <a href="../printf.html">built-in printf</a> implementation
+ now causes string substitutions to measure the width and precision in
+ characters instead of bytes.
+<li> If the <a href="../vtab.html#xcolumn">xColumn</a> method in a <a href="../vtab.html">virtual table</a> implementation returns
+ an error message using <a href="../c3ref/result_blob.html">sqlite3_result_error()</a> then give that error
+ message preference over internally-generated messages.
+<li> Added the -A command-line option to the <a href="../cli.html">CLI</a> to make it easier to manage
+ <a href="../sqlar.html">SQLite Archive files</a>.
+<li> Add support for INSERT OR REPLACE, INSERT OR IGNORE, and UPDATE OR REPLACE
+ in the <a href="../zipfile.html">Zipfile virtual table</a>.
+<li> Enhance the <a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a> interface so that it is hardened
+ against attacks from deliberately corrupted <a href="../sessionintro.html#changeset">changeset</a> objects.
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/normalize.c">sqlite3_normalize()</a>
+ extension function.
+<li> Query optimizer enhancements:
+<ol type='a'>
+ <li> Improve the <a href="../optoverview.html#omitnoopjoin">omit-left-join optimization</a> so that it works in cases where
+ the right-hand table is UNIQUE but not necessarily NOT NULL.
+ <li> Improve the <a href="../optoverview.html#pushdown">push-down optimization</a> so that it works for many LEFT JOINs.
+ <li> Add the <a href="../optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> that converts a LEFT
+ JOIN into an ordinary JOIN if there exist terms in the WHERE clause
+ that would prevent the extra all-NULL row of the LEFT JOIN from
+ appearing in the output set.
+ <li> Avoid unnecessary writes to the sqlite_sequence table when an
+ <a href="../autoinc.html">AUTOINCREMENT</a> table is updated with an rowid that is less than the
+ maximum.
+</ol>
+<li> Bug fixes:
+<ol type='a'>
+ <li> Fix the parser to accept valid <a href="../rowvalue.html">row value</a> syntax.
+ Ticket <a href="https://www.sqlite.org/src/info/7310e2fb3d046a5">7310e2fb3d046a5</a>
+ <li> Fix the query planner so that it takes into account dependencies in
+ the arguments to table-valued functions in subexpressions in
+ the WHERE clause.
+ Ticket <a href="https://www.sqlite.org/src/info/80177f0c226ff54">80177f0c226ff54</a>
+ <li> Fix incorrect result with complex OR-connected WHERE and STAT4.
+ Ticket <a href="https://www.sqlite.org/src/info/ec32177c99ccac2">ec32177c99ccac2</a>
+ <li> Fix potential corruption in <a href="../expridx.html">indexes on expressions</a> due to automatic
+ datatype conversions.
+ Ticket <a href="https://www.sqlite.org/src/info/343634942dd54ab">343634942dd54ab</a>
+ <li> Assertion fault in FTS4.
+ Ticket <a href="https://www.sqlite.org/src/info/d6ec09eccf68cfc">d6ec09eccf68cfc</a>
+ <li> Incorrect result on the less-than operator in <a href="../rowvalue.html">row values</a>.
+ Ticket <a href="https://www.sqlite.org/src/info/f484b65f3d62305">f484b65f3d62305</a>
+ <li> Always interpret non-zero floating-point values as TRUE, even if
+ the integer part is zero.
+ Ticket <a href="https://www.sqlite.org/src/info/36fae083b450e3a">36fae083b450e3a</a>
+ <li> Fix an issue in the fsdir(PATH) <a href="../vtab.html#tabfunc2">table-valued function</a> to the
+ <a href="https://sqlite.org/src/file/ext/misc/fileio.c">fileio.c</a> extension,
+ that caused a segfault if the fsdir() table was used as the inner table
+ of a join. Problem reported on the mailing list and fixed by check-in
+ <a href="https://www.sqlite.org/src/info/7ce4e71c1b7251be">7ce4e71c1b7251be</a>
+ <li> Issue an error rather instead of an assertion-fault or null-pointer
+ dereference when the sqlite_master table is corrupted so that the
+ sqlite_sequence table root page is really a btree-index page. Check-in
+ <a href="https://www.sqlite.org/src/info/525deb7a67fbd647">525deb7a67fbd647</a>
+ <li> Fix the <a href="../lang_analyze.html">ANALYZE</a> command so that it computes statistics on tables
+ whose names begin with "sqlite". Check-in
+ <a href="https://sqlite.org/src/info/0249d9aecf69948d">0249d9aecf69948d</a>
+</ol>
+<li> Additional fixes for issues detected by
+ <a href="https://github.com/google/oss-fuzz">OSSFuzz</a>:
+<ol type='a'>
+ <li> Fix a possible infinite loop on VACUUM for corrupt database files.
+ Check-in <a href="https://www.sqlite.org/src/info/27754b74ddf64">27754b74ddf64</a>
+ <li> Disallow <a href="../lang_expr.html#varparam">parameters</a> in the <a href="../lang_with.html">WITH clause</a> of triggers and views.
+ Check-in <a href="https://www.sqlite.org/src/info/b918d4b4e546d">b918d4b4e546d</a>
+ <li> Fix a potential memory leak in <a href="../rowvalue.html">row value</a> processing.
+ Check-in <a href="https://www.sqlite.org/src/info/2df6bbf1b8ca8">2df6bbf1b8ca8</a>
+ <li> Improve the performance of the <a href="../lang_corefunc.html#replace">replace() SQL function</a> for cases where
+ there are many substitutions on megabyte-sized strings, in an attempt
+ to avoid OSSFuzz timeouts during testing.
+ Check-in <a href="https://www.sqlite.org/src/info/fab2c2b07b5d3">fab2c2b07b5d3</a>
+ <li> Provide an appropriate error message when the sqlite_master table
+ contains a CREATE TABLE AS statement. Formerly this caused either an
+ assertion fault or null pointer dereference. Problem found by OSSFuzz
+ on the GDAL project. Check-in
+ <a href="https://www.sqlite.org/src/info/d75e67654aa96">d75e67654aa96</a>
+ <li> Incorrect assert() statement removed. Check-in
+ <a href="https://www.sqlite.org/src/info/823779d31eb09cda">823779d31eb09cda</a>.
+ <li> Fix a problem with using the <a href="../optoverview.html#like_opt">LIKE optimization</a> on an
+ <a href="../lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>. Check-in
+ <a href="https://www.sqlite.org/src/info/b850dd159918af56">b850dd159918af56</a>.
+</ol>
+</ol>
+<p><b>Additional changes in version 3.23.1 (2018-04-10):</b></p>
+<p><ol class='lessindent'>
+<li value='14'> Fix two problems in the new <a href="../optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a>.
+ Tickets <a href="https://sqlite.org/src/info/1e39b966ae9ee739">1e39b966ae9ee739</a>
+ and <a href="https://sqlite.org/src/info/fac496b61722daf2">fac496b61722daf2</a>.
+<li> Fix misbehavior of the FTS5 xBestIndex method. Ticket
+ <a href="https://sqlite.org/src/info/2b8aed9f7c9e61e8">2b8aed9f7c9e61e8</a>.
+<li> Fix a harmless reference to an uninitialized virtual machine register.
+ Ticket <a href="https://sqlite.org/src/info/093420fc0eb7cba7">093420fc0eb7cba7</a>.
+<li> Fix the <a href="../cli.html">CLI</a> so that it builds with -DSQLITE_UNTESTABLE
+<li> Fix the <a href="https://sqlite.org/src/file/ext/misc/eval.c">eval.c</a> extension
+ so that it works with <a href="../pragma.html#pragma_empty_result_callbacks">PRAGMA empty_result_callbacks=ON</a>.
+<li> Fix the <a href="../series.html">generate_series</a> virtual table so that it correctly returns
+ no rows if any of its constraints are NULL.
+<li> Performance enhancements in the parser.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b"
+<li>SHA3-256 for sqlite3.c: 65750d1e506f416a0b0b9dd22d171379679c733e3460549754dc68c92705b5dc
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_24_0.html b/www/releaselog/3_24_0.html
new file mode 100644
index 0000000..6d0df76
--- /dev/null
+++ b/www/releaselog/3_24_0.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.24.0 On 2018-06-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.24.0 On 2018-06-04</h2><p><ol class='lessindent'>
+<li> Add support for PostgreSQL-style <a href="../lang_upsert.html">UPSERT</a>.
+<li> Add support for <a href="../rtree.html#auxcol">auxiliary columns in r-tree tables</a>.
+<li> Add C-language APIs for discovering SQL keywords used by
+ SQLite: <a href="../c3ref/keyword_check.html">sqlite3_keyword_count()</a>, <a href="../c3ref/keyword_check.html">sqlite3_keyword_name()</a>, and
+ <a href="../c3ref/keyword_check.html">sqlite3_keyword_check()</a>.
+<li> Add C-language APIs for dynamic strings based on the
+ <a href="../c3ref/str.html">sqlite3_str</a> object.
+<li> Enhance <a href="../lang_altertable.html">ALTER TABLE</a> so that it recognizes "true" and "false" as
+ valid arguments to DEFAULT.
+<li> Add the sorter-reference optimization as a compile-time option.
+ Only available if compiled with SQLITE_ENABLE_SORTER_REFERENCES.
+<li> Improve the format of the <a href="../eqp.html">EXPLAIN QUERY PLAN</a> raw output, so that
+ it gives better information about the query plan and about the
+ relationships between the various components of the plan.
+<li> Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigresetdatabase">SQLITE_DBCONFIG_RESET_DATABASE</a> option to the
+ <a href="../c3ref/db_config.html">sqlite3_db_config()</a> API.
+<p><b><a href="../cli.html">CLI</a> Enhancements:</b>
+<li> Automatically intercepts the raw <a href="../eqp.html">EXPLAIN QUERY PLAN</a>
+ output and reformats it into an ASCII-art graph.
+<li> Lines that begin with "#" and that are not in the middle of an
+ SQL statement are interpreted as comments.
+<li> Added the --append option to the ".backup" command.
+<li> Added the ".dbconfig" command.
+<p><b>Performance:</b>
+<li> <a href="../lang_update.html">UPDATE</a> avoids unnecessary low-level disk writes when the contents
+ of the database file do not actually change.
+ For example, "UPDATE t1 SET x=25 WHERE y=?" generates no extra
+ disk I/O if the value in column x is already 25. Similarly,
+ when doing <a href="../lang_update.html">UPDATE</a> on records that span multiple pages, only
+ the subset of pages that actually change are written to disk.
+ This is a low-level performance optimization only and does not
+ affect the behavior of TRIGGERs or other higher level SQL
+ structures.
+<li> Queries that use ORDER BY and LIMIT now try to avoid computing
+ rows that cannot possibly come in under the LIMIT. This can greatly
+ improve performance of ORDER BY LIMIT queries, especially when the
+ LIMIT is small relative to the number of unrestricted output rows.
+<li> The <a href="../optoverview.html#or_opt">OR optimization</a> is allowed to proceed
+ even if the OR expression has also been converted into an IN
+ expression. Uses of the OR optimization are now also
+ <a href="../eqp.html#or-opt">more clearly shown</a> in the <a href="../eqp.html">EXPLAIN QUERY PLAN</a> output.
+<li> The query planner is more aggressive about using
+ <a href="../optoverview.html#autoindex">automatic indexes</a> for views and subqueries for which it is
+ not possible to create a persistent index.
+<li> Make use of the one-pass UPDATE and DELETE query plans in the
+ <a href="../rtree.html">R-Tree extension</a> where appropriate.
+<li> Performance improvements in the LEMON-generated parser.
+<p><b>Bug fixes:</b>
+<li> For the right-hand table of a LEFT JOIN, compute the values
+ of expressions directly rather than loading precomputed values
+ out of an <a href="../expridx.html">expression index</a> as the expression index might
+ not contain the correct value. Ticket
+ <a href="https://sqlite.org/src/info/7fa8049685b50b5aeb0c2">7fa8049685b50b5aeb0c2</a>
+<li> Do not attempt to use terms from the WHERE clause to enable
+ indexed lookup of the right-hand table of a LEFT JOIN. Ticket
+ <a href="https://sqlite.org/src/info/4ba5abf65c5b0f9a96a7a">4ba5abf65c5b0f9a96a7a</a>
+<li> Fix a memory leak that can occur following a failure to open error
+ in the <a href="../csv.html">CSV virtual table</a>
+<li> Fix a long-standing problem wherein a corrupt schema on the
+ <a href="../fileformat2.html#seqtab">sqlite_sequence</a> table used by <a href="../autoinc.html">AUTOINCREMENT</a> can lead to
+ a crash. Ticket
+ <a href="https://www.sqlite.org/src/info/d8dc2b3a58cd5dc29">d8dc2b3a58cd5dc2918a1</a>
+<li> Fix the <a href="../json1.html#jeach">json_each()</a> function so that it returns
+ valid results on its "fullkey" column when the input is a simple value
+ rather than an array or object.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-06-04 19:24:41 c7ee0833225bfd8c5ec2f9bf62b97c4e04d03bd9566366d5221ac8fb199a87ca"
+<li>SHA3-256 for sqlite3.c: 0d384704e1c66026228336d1e91771d295bf688c9c44c7a44f25a4c16c26ab3c
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_25_0.html b/www/releaselog/3_25_0.html
new file mode 100644
index 0000000..b6a05e4
--- /dev/null
+++ b/www/releaselog/3_25_0.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.25.0 On 2018-09-15</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.25.0 On 2018-09-15</h2><p><ol class='lessindent'>
+<li> Add support for <a href="../windowfunctions.html">window functions</a>
+<li> Enhancements the <a href="../lang_altertable.html">ALTER TABLE</a> command:
+<ol type="a">
+ <li> Add support for renaming columns within a table using
+ ALTER TABLE <i>table</i> RENAME COLUMN <i>oldname</i> TO <i>newname</i>.
+ <li> Fix table rename feature so that it also updates references
+ to the renamed table in <a href="../lang_createtrigger.html">triggers</a> and <a href="../lang_createview.html">views</a>.
+</ol>
+<li> Query optimizer improvements:
+<ol type="a">
+ <li> Avoid unnecessary loads of columns in an aggregate query that
+ are not within an aggregate function and that are not part
+ of the GROUP BY clause.
+ <li> The IN-early-out optimization: When doing a look-up on a
+ multi-column index and an IN operator is used on a column
+ other than the left-most column, then if no rows match against
+ the first IN value, check to make sure there exist rows that
+ match the columns to the right before continuing with the
+ next IN value.
+ <li> Use the transitive property to try to propagate constant
+ values within the WHERE clause. For example, convert
+ "a=99 AND b=a" into "a=99 AND b=99".
+</ol>
+<li> Use a separate mutex on every inode in the unix <a href="../vfs.html">VFS</a>, rather than
+ a single mutex shared among them all, for slightly better concurrency
+ in multi-threaded environments.
+<li> Enhance the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command for improved detection
+ of problems on the page freelist.
+<li> Output infinity as 1e999 in the ".dump" command of the
+ <a href="../cli.html">command-line shell</a>.
+<li> Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> file-control.
+<li> Added the <a href="../geopoly.html">Geopoly module</a>
+<p><b>Bug fixes:</b>
+<li> The ORDER BY LIMIT optimization might have caused an infinite loop
+ in the byte code of the prepared statement under very obscure
+ circumstances,
+ due to a confluence of minor defects in the query optimizer.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/9936b2fa443fec03ff25">9936b2fa443fec03ff25</a>
+<li> On an UPSERT when the order of constraint checks is rearranged,
+ ensure that the affinity transformations on the inserted content
+ occur before any of the constraint checks. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/79cad5e4b2e219dd197242e9e">79cad5e4b2e219dd197242e9e</a>.
+<li> Avoid using a prepared statement for ".stats on" command of the
+ <a href="../cli.html">CLI</a> after it has been closed by the ".eqp full" logicc. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7be932dfa60a8a6b3b26bcf76">7be932dfa60a8a6b3b26bcf76</a>.
+<li> The LIKE optimization was generating incorrect byte-code and hence
+ getting the wrong answer
+ if the left-hand operand has numeric affinity and the right-hand-side
+ pattern is '/%' or if the pattern begins with the ESCAPE character.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c94369cae9b561b1f996d0054b">c94369cae9b561b1f996d0054b</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-09-15 04:01:47 b63af6c3bd33152742648d5d2e8dc5d5fcbcdd27df409272b6aea00a6f761760"
+<li>SHA3-256 for sqlite3.c: 989e3ff37f2b5eea8e42205f808ccf0ba86c6ea6aa928ad2c011f33a108ac45d
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_25_1.html b/www/releaselog/3_25_1.html
new file mode 100644
index 0000000..8b3a123
--- /dev/null
+++ b/www/releaselog/3_25_1.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.25.1 On 2018-09-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.25.1 On 2018-09-18</h2><p><b>Changes in version 3.25.0 (2018-09-15):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add support for <a href="../windowfunctions.html">window functions</a>
+<li> Enhancements the <a href="../lang_altertable.html">ALTER TABLE</a> command:
+<ol type="a">
+ <li> Add support for renaming columns within a table using
+ ALTER TABLE <i>table</i> RENAME COLUMN <i>oldname</i> TO <i>newname</i>.
+ <li> Fix table rename feature so that it also updates references
+ to the renamed table in <a href="../lang_createtrigger.html">triggers</a> and <a href="../lang_createview.html">views</a>.
+</ol>
+<li> Query optimizer improvements:
+<ol type="a">
+ <li> Avoid unnecessary loads of columns in an aggregate query that
+ are not within an aggregate function and that are not part
+ of the GROUP BY clause.
+ <li> The IN-early-out optimization: When doing a look-up on a
+ multi-column index and an IN operator is used on a column
+ other than the left-most column, then if no rows match against
+ the first IN value, check to make sure there exist rows that
+ match the columns to the right before continuing with the
+ next IN value.
+ <li> Use the transitive property to try to propagate constant
+ values within the WHERE clause. For example, convert
+ "a=99 AND b=a" into "a=99 AND b=99".
+</ol>
+<li> Use a separate mutex on every inode in the unix <a href="../vfs.html">VFS</a>, rather than
+ a single mutex shared among them all, for slightly better concurrency
+ in multi-threaded environments.
+<li> Enhance the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command for improved detection
+ of problems on the page freelist.
+<li> Output infinity as 1e999 in the ".dump" command of the
+ <a href="../cli.html">command-line shell</a>.
+<li> Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> file-control.
+<li> Added the <a href="../geopoly.html">Geopoly module</a>
+<p><b>Bug fixes:</b>
+<li> The ORDER BY LIMIT optimization might have caused an infinite loop
+ in the byte code of the prepared statement under very obscure
+ circumstances,
+ due to a confluence of minor defects in the query optimizer.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/9936b2fa443fec03ff25">9936b2fa443fec03ff25</a>
+<li> On an UPSERT when the order of constraint checks is rearranged,
+ ensure that the affinity transformations on the inserted content
+ occur before any of the constraint checks. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/79cad5e4b2e219dd197242e9e">79cad5e4b2e219dd197242e9e</a>.
+<li> Avoid using a prepared statement for ".stats on" command of the
+ <a href="../cli.html">CLI</a> after it has been closed by the ".eqp full" logicc. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7be932dfa60a8a6b3b26bcf76">7be932dfa60a8a6b3b26bcf76</a>.
+<li> The LIKE optimization was generating incorrect byte-code and hence
+ getting the wrong answer
+ if the left-hand operand has numeric affinity and the right-hand-side
+ pattern is '/%' or if the pattern begins with the ESCAPE character.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c94369cae9b561b1f996d0054b">c94369cae9b561b1f996d0054b</a>
+</ol>
+<p><b>Additional changes in version 3.25.1 (2018-09-18):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Extra sanity checking added to ALTER TABLE in the 3.25.0 release
+ sometimes raises a false-positive
+ when the table being modified has a trigger that
+ updates a virtual table. The false-positive caused the ALTER
+ TABLE to rollback, thus leaving the schema unchanged.
+ Ticket <a href="https://sqlite.org/src/info/b41031ea2b537237">b41031ea2b537237</a>.
+<li> The fix in the 3.25.0 release for the endless-loop in the byte-code
+ associated with the ORDER BY LIMIT optimization did not work for
+ some queries involving window functions. An additional correction
+ is required. Ticket
+ <a href="https://sqlite.org/src/info/510cde277783b5fb">510cde277783b5fb</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-09-18 20:20:44 2ac9003de44da7dafa3fbb1915ac5725a9275c86bf2f3b7aa19321bf1460b386"
+<li>SHA3-256 for sqlite3.c: 1b2302e7a54cc99c84ff699a299f61f069a28e1ed090b89e4430ca80ae2aab06
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_25_2.html b/www/releaselog/3_25_2.html
new file mode 100644
index 0000000..7290aaa
--- /dev/null
+++ b/www/releaselog/3_25_2.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.25.2 On 2018-09-25</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.25.2 On 2018-09-25</h2><p><b>Changes in version 3.25.0 (2018-09-15):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add support for <a href="../windowfunctions.html">window functions</a>
+<li> Enhancements the <a href="../lang_altertable.html">ALTER TABLE</a> command:
+<ol type="a">
+ <li> Add support for renaming columns within a table using
+ ALTER TABLE <i>table</i> RENAME COLUMN <i>oldname</i> TO <i>newname</i>.
+ <li> Fix table rename feature so that it also updates references
+ to the renamed table in <a href="../lang_createtrigger.html">triggers</a> and <a href="../lang_createview.html">views</a>.
+</ol>
+<li> Query optimizer improvements:
+<ol type="a">
+ <li> Avoid unnecessary loads of columns in an aggregate query that
+ are not within an aggregate function and that are not part
+ of the GROUP BY clause.
+ <li> The IN-early-out optimization: When doing a look-up on a
+ multi-column index and an IN operator is used on a column
+ other than the left-most column, then if no rows match against
+ the first IN value, check to make sure there exist rows that
+ match the columns to the right before continuing with the
+ next IN value.
+ <li> Use the transitive property to try to propagate constant
+ values within the WHERE clause. For example, convert
+ "a=99 AND b=a" into "a=99 AND b=99".
+</ol>
+<li> Use a separate mutex on every inode in the unix <a href="../vfs.html">VFS</a>, rather than
+ a single mutex shared among them all, for slightly better concurrency
+ in multi-threaded environments.
+<li> Enhance the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command for improved detection
+ of problems on the page freelist.
+<li> Output infinity as 1e999 in the ".dump" command of the
+ <a href="../cli.html">command-line shell</a>.
+<li> Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> file-control.
+<li> Added the <a href="../geopoly.html">Geopoly module</a>
+<p><b>Bug fixes:</b>
+<li> The ORDER BY LIMIT optimization might have caused an infinite loop
+ in the byte code of the prepared statement under very obscure
+ circumstances,
+ due to a confluence of minor defects in the query optimizer.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/9936b2fa443fec03ff25">9936b2fa443fec03ff25</a>
+<li> On an UPSERT when the order of constraint checks is rearranged,
+ ensure that the affinity transformations on the inserted content
+ occur before any of the constraint checks. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/79cad5e4b2e219dd197242e9e">79cad5e4b2e219dd197242e9e</a>.
+<li> Avoid using a prepared statement for ".stats on" command of the
+ <a href="../cli.html">CLI</a> after it has been closed by the ".eqp full" logicc. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7be932dfa60a8a6b3b26bcf76">7be932dfa60a8a6b3b26bcf76</a>.
+<li> The LIKE optimization was generating incorrect byte-code and hence
+ getting the wrong answer
+ if the left-hand operand has numeric affinity and the right-hand-side
+ pattern is '/%' or if the pattern begins with the ESCAPE character.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c94369cae9b561b1f996d0054b">c94369cae9b561b1f996d0054b</a>
+</ol>
+<p><b>Additional changes in version 3.25.1 (2018-09-18):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Extra sanity checking added to ALTER TABLE in the 3.25.0 release
+ sometimes raises a false-positive
+ when the table being modified has a trigger that
+ updates a virtual table. The false-positive caused the ALTER
+ TABLE to rollback, thus leaving the schema unchanged.
+ Ticket <a href="https://sqlite.org/src/info/b41031ea2b537237">b41031ea2b537237</a>.
+<li> The fix in the 3.25.0 release for the endless-loop in the byte-code
+ associated with the ORDER BY LIMIT optimization did not work for
+ some queries involving window functions. An additional correction
+ is required. Ticket
+ <a href="https://sqlite.org/src/info/510cde277783b5fb">510cde277783b5fb</a>
+</ol>
+<p><b>Additional changes in version 3.25.2 (2018-09-25):</b></p>
+<p><ol class='lessindent'>
+<li value='15'> Add the <a href="../pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table=ON</a> command that causes the
+ "ALTER TABLE RENAME" command to behave as it did in SQLite versions 3.24.0
+ and earlier: references to the renamed table inside the bodies of triggers
+ and views are not updated. This new pragma provides a compatibility
+ work around for older programs that expected the older, wonky behavior
+ of ALTER TABLE RENAME.
+<li> Fix a problem with the new <a href="../windowfunctions.html">window functions</a> implementation that caused
+ a malfunction when complicated expressions involving window functions were used
+ inside of a view.
+<li> Fixes for various other compiler warnings and minor problems associated
+ with obscure configurations.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-09-25 19:08:10 fb90e7189ae6d62e77ba3a308ca5d683f90bbe633cf681865365b8e92792d1c7"
+<li>SHA3-256 for sqlite3.c: 34c23ff91631ae10354f8c9d62fd7d65732b3d7f3acfd0bbae31ff4a62fe28af
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_25_3.html b/www/releaselog/3_25_3.html
new file mode 100644
index 0000000..946d9d4
--- /dev/null
+++ b/www/releaselog/3_25_3.html
@@ -0,0 +1,227 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.25.3 On 2018-11-05</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.25.3 On 2018-11-05</h2><p><b>Changes in version 3.25.0 (2018-09-15):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add support for <a href="../windowfunctions.html">window functions</a>
+<li> Enhancements the <a href="../lang_altertable.html">ALTER TABLE</a> command:
+<ol type="a">
+ <li> Add support for renaming columns within a table using
+ ALTER TABLE <i>table</i> RENAME COLUMN <i>oldname</i> TO <i>newname</i>.
+ <li> Fix table rename feature so that it also updates references
+ to the renamed table in <a href="../lang_createtrigger.html">triggers</a> and <a href="../lang_createview.html">views</a>.
+</ol>
+<li> Query optimizer improvements:
+<ol type="a">
+ <li> Avoid unnecessary loads of columns in an aggregate query that
+ are not within an aggregate function and that are not part
+ of the GROUP BY clause.
+ <li> The IN-early-out optimization: When doing a look-up on a
+ multi-column index and an IN operator is used on a column
+ other than the left-most column, then if no rows match against
+ the first IN value, check to make sure there exist rows that
+ match the columns to the right before continuing with the
+ next IN value.
+ <li> Use the transitive property to try to propagate constant
+ values within the WHERE clause. For example, convert
+ "a=99 AND b=a" into "a=99 AND b=99".
+</ol>
+<li> Use a separate mutex on every inode in the unix <a href="../vfs.html">VFS</a>, rather than
+ a single mutex shared among them all, for slightly better concurrency
+ in multi-threaded environments.
+<li> Enhance the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command for improved detection
+ of problems on the page freelist.
+<li> Output infinity as 1e999 in the ".dump" command of the
+ <a href="../cli.html">command-line shell</a>.
+<li> Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntldataversion">SQLITE_FCNTL_DATA_VERSION</a> file-control.
+<li> Added the <a href="../geopoly.html">Geopoly module</a>
+<p><b>Bug fixes:</b>
+<li> The ORDER BY LIMIT optimization might have caused an infinite loop
+ in the byte code of the prepared statement under very obscure
+ circumstances,
+ due to a confluence of minor defects in the query optimizer.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/9936b2fa443fec03ff25">9936b2fa443fec03ff25</a>
+<li> On an UPSERT when the order of constraint checks is rearranged,
+ ensure that the affinity transformations on the inserted content
+ occur before any of the constraint checks. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/79cad5e4b2e219dd197242e9e">79cad5e4b2e219dd197242e9e</a>.
+<li> Avoid using a prepared statement for ".stats on" command of the
+ <a href="../cli.html">CLI</a> after it has been closed by the ".eqp full" logicc. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/7be932dfa60a8a6b3b26bcf76">7be932dfa60a8a6b3b26bcf76</a>.
+<li> The LIKE optimization was generating incorrect byte-code and hence
+ getting the wrong answer
+ if the left-hand operand has numeric affinity and the right-hand-side
+ pattern is '/%' or if the pattern begins with the ESCAPE character.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c94369cae9b561b1f996d0054b">c94369cae9b561b1f996d0054b</a>
+</ol>
+<p><b>Additional changes in version 3.25.1 (2018-09-18):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Extra sanity checking added to ALTER TABLE in the 3.25.0 release
+ sometimes raises a false-positive
+ when the table being modified has a trigger that
+ updates a virtual table. The false-positive caused the ALTER
+ TABLE to rollback, thus leaving the schema unchanged.
+ Ticket <a href="https://sqlite.org/src/info/b41031ea2b537237">b41031ea2b537237</a>.
+<li> The fix in the 3.25.0 release for the endless-loop in the byte-code
+ associated with the ORDER BY LIMIT optimization did not work for
+ some queries involving window functions. An additional correction
+ is required. Ticket
+ <a href="https://sqlite.org/src/info/510cde277783b5fb">510cde277783b5fb</a>
+</ol>
+<p><b>Additional changes in version 3.25.2 (2018-09-25):</b></p>
+<p><ol class='lessindent'>
+<li value='15'> Add the <a href="../pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table=ON</a> command that causes the
+ "ALTER TABLE RENAME" command to behave as it did in SQLite versions 3.24.0
+ and earlier: references to the renamed table inside the bodies of triggers
+ and views are not updated. This new pragma provides a compatibility
+ work around for older programs that expected the older, wonky behavior
+ of ALTER TABLE RENAME.
+<li> Fix a problem with the new <a href="../windowfunctions.html">window functions</a> implementation that caused
+ a malfunction when complicated expressions involving window functions were used
+ inside of a view.
+<li> Fixes for various other compiler warnings and minor problems associated
+ with obscure configurations.
+</ol>
+<p><b>Additional changes in version 3.25.3 (2018-11-05):</b></p>
+<p><ol class='lessindent'>
+<li value='18'> Disallow the use of <a href="../windowfunctions.html">window functions</a> in the recursive part of
+ a CTE. Ticket <a href="https://sqlite.org/src/info/e8275b415a2f03bee">e8275b415a2f03bee</a>
+<li> Fix the behavior of typeof() and length() on virtual tables. Ticket
+ <a href="https://sqlite.org/src/info/69d642332d25aa3b7315a6d385">69d642332d25aa3b7315a6d385</a>
+<li> Strengthen defenses against deliberately corrupted database files.
+<li> Fix a problem in the query planner that results when a row-value expression
+ is used with a PRIMARY KEY with redundant columns. Ticket
+ <a href="https://sqlite.org/src/info/1a84668dcfdebaf12415d">1a84668dcfdebaf12415d</a>
+<li> Fix the query planner so that it works correctly for IS NOT NULL operators
+ in the ON clause of a LEFT JOIN with the SQLITE_ENABLE_STAT4 compile-time option.
+ <a href="https://sqlite.org/src/info/65eb38f6e46de8c75e188a17ec">65eb38f6e46de8c75e188a17ec</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-11-05 20:37:38 89e099fbe5e13c33e683bef07361231ca525b88f7907be7092058007b75036f2"
+<li>SHA3-256 for sqlite3.c: 45586e4df74de3a43f3a1f8c7a78c3c3f02edce01af7d10cafe68bb94476a5c5
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_26_0.html b/www/releaselog/3_26_0.html
new file mode 100644
index 0000000..85dbb75
--- /dev/null
+++ b/www/releaselog/3_26_0.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.26.0 On 2018-12-01</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.26.0 On 2018-12-01</h2><p><ol class='lessindent'>
+<li>Optimization: When doing an <a href="../lang_update.html">UPDATE</a> on a table with <a href="../expridx.html">indexes on expressions</a>,
+ do not update the expression indexes if they do not refer to any of the columns
+ of the table being updated.
+<li>Allow the <a href="../vtab.html#xbestindex">xBestIndex()</a> method of <a href="../vtab.html">virtual table</a> implementations to return
+ <a href="../rescode.html#constraint">SQLITE_CONSTRAINT</a> to indicate that the proposed query plan is unusable and
+ should not be given further consideration.
+<li>Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> option which disables the ability to
+ create corrupt database files using ordinary SQL.
+<li>Added support for read-only <a href="../vtab.html#xshadowname">shadow tables</a> when the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a>
+ option is enabled.
+<li>Added the <a href="../pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table</a> command, which if enabled causes the
+ <a href="../lang_altertable.html">ALTER TABLE</a> command to behave like older version of SQLite (prior to
+ version 3.25.0) for compatibility.
+<li>Added <a href="../pragma.html#pragma_table_xinfo">PRAGMA table_xinfo</a> that works just like <a href="../pragma.html#pragma_table_info">PRAGMA table_info</a>
+ except that it also shows <a href="../vtab.html#hiddencol">hidden columns</a> in virtual tables.
+<li>Added the <a href="https://sqlite.org/src/file/ext/misc/explain.c">explain virtual table</a>
+ as a run-time loadable extension.
+<li>Add a limit counter to the query planner to prevent excessive
+ <a href="../c3ref/prepare.html">sqlite3_prepare()</a> times for certain pathological SQL inputs.
+<li>Added support for the <a href="../c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface, when compiling
+ with SQLITE_ENABLE_NORMALIZE.
+<li>Enhanced triggers so that they can use <a href="../vtab.html#tabfunc2">table-valued functions</a> that
+ exist in schemas other than the schema where the trigger is defined.
+<li>Enhancements to the <a href="../cli.html">CLI</a>:
+<ol type="a">
+ <li>Improvements to the ".help" command.
+ <li>The SQLITE_HISTORY environment variable, if it exists,
+ specifies the name of the command-line editing history file
+ <li>The --deserialize option associated with opening a new database cause the
+ database file to be read into memory and accessed using the
+ <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> API. This simplifies running tests on a database
+ without modifying the file on disk.
+</ol>
+<li>Enhancements to the <a href="../geopoly.html">geopoly</a> extension:
+<ol type="a">
+ <li>Always stores polygons
+ using the binary format, which is faster and uses less space.
+ <li>Added the <a href="../geopoly.html#regpoly">geopoly_regular()</a> function.
+ <li>Added the <a href="../geopoly.html#ccw">geopoly_ccw()</a> function.
+</ol>
+<li>Enhancements to the <a href="../sessionintro.html">session</a> extension:
+<ol type="a">
+ <li>Added the <a href="../session/c_changesetapply_invert.html">SQLITE_CHANGESETAPPLY_INVERT</a> flag
+ <li>Added the <a href="../session/sqlite3changeset_start.html">sqlite3changeset_start_v2()</a> interface and the
+ <a href="../session/c_changesetstart_invert.html">SQLITE_CHANGESETSTART_INVERT</a> flag.
+ <li>Added the
+ <a href="https://sqlite.org/src/file/ext/session/changesetfuzz.c">changesetfuzz.c</a>
+ test-case generator utility.
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2018-12-01 12:34:55 bf8c1b2b7a5960c282e543b9c293686dccff272512d08865f4600fb58238b4f9"
+<li>SHA3-256 for sqlite3.c: 72c08830da9b5d1cb397c612c0e870d7f5eb41a323b41aa3d8aa5ae9ccedb2c4
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_27_0.html b/www/releaselog/3_27_0.html
new file mode 100644
index 0000000..a3c6168
--- /dev/null
+++ b/www/releaselog/3_27_0.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.27.0 On 2019-02-07</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.27.0 On 2019-02-07</h2><p><ol class='lessindent'>
+<li>Added the <a href="../lang_vacuum.html#vacuuminto">VACUUM INTO</a> command
+<li>Issue an SQLITE_WARNING message on the <a href="../errlog.html">error log</a> if a
+<a href="../quirks.html#dblquote">double-quoted string literal</a> is used.
+<li>The <a href="../c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface works on any prepared statement
+created using <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> or <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>. It is no
+longer necessary to use <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> with <a href="../c3ref/c_prepare_normalize.html#sqlitepreparenormalize">SQLITE_PREPARE_NORMALIZE</a>
+in order to use <a href="../c3ref/expanded_sql.html">sqlite3_normalized_sql()</a>.
+<li>Added the remove_diacritics=2 option to <a href="../fts3.html">FTS3</a> and <a href="../fts5.html">FTS5</a>.
+<li>Added the <a href="../c3ref/c_prepare_normalize.html#sqlitepreparenovtab">SQLITE_PREPARE_NO_VTAB</a> option to <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>.
+Use that option to prevent circular references to <a href="../vtab.html#xshadowname">shadow tables</a> from
+causing resource leaks.
+<li>Enhancements to the <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> interface:
+<ol type="a">
+ <li> Add the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> <a href="../c3ref/file_control.html">file-control</a> for
+ setting an upper bound on the size of the in-memory database created
+ by sqlite3_deserialize. The default upper bound is 1GiB, or whatever
+ alternative value is specified by
+ <a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">SQLITE_CONFIG_MEMDB_MAXSIZE</a>)
+ and/or <a href="../compile.html#memdb_default_maxsize">SQLITE_MEMDB_DEFAULT_MAXSIZE</a>.
+ <li> Honor the <a href="../c3ref/c_deserialize_freeonclose.html">SQLITE_DESERIALIZE_READONLY</a> flag, which was previously described
+ in the documentation, but was previously a no-op.
+ <li> Enhance the "deserialize" command of the <a href="../tclsqlite.html">TCL Interface</a> to give it
+ new "--maxsize N" and "--readonly BOOLEAN" options.
+</ol>
+<li>Enhancements to the <a href="../cli.html">CLI</a>, mostly to support testing and debugging
+of the SQLite library itself:
+<ol type="a">
+ <li> Add support for ".open --hexdb". The
+ "<a href="https://sqlite.org/src/doc/trunk/tool/dbtotxt.md">dbtotxt</a>" utility
+ program used to generate the text for the "hexdb" is added to the
+ source tree.
+ <li> Add support for the "--maxsize N" option on ".open --deserialize".
+ <li> Add the "--memtrace" command-line option, to show all memory allocations
+ and deallocations.
+ <li> Add the ".eqp trace" option on builds with SQLITE_DEBUG, to enable
+ bytecode program listing with indentation and
+ <a href="../pragma.html#pragma_vdbe_trace">PRAGMA vdbe_trace</a> all in one step.
+ <li> Add the ".progress" command for accessing
+ the <a href="../c3ref/progress_handler.html">sqlite3_progress_handler()</a> interface.
+ <li> Add the "--async" option to the ".backup" command.
+ <li> Add options "--expanded", "--normalized", "--plain", "--profile", "--row",
+ "--stmt", and "--close" to the ".trace" command.
+</ol>
+<li> Increased robustness against malicious SQL that is run against a
+ maliciously corrupted database.
+ <p><b>Bug fixes:</b>
+<li>Do not use a partial index to do a table scan on an IN operator.
+Ticket <a href="https://www.sqlite.org/src/info/1d958d90596593a774">1d958d90596593a774</a>.
+<li>Fix the <a href="../optoverview.html#flattening">query flattener</a> so that it works on queries that contain
+subqueries that use <a href="../windowfunctions.html">window functions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/f09fcd17810f65f717">709fcd17810f65f717</a>
+<li>Ensure that ALTER TABLE modifies table and column names embedded in WITH
+clauses that are part of views and triggers.
+<li>Fix a parser bug that prevented the use of parentheses around table-valued
+functions.
+<li>Fix a problem with the <a href="../optoverview.html#or_opt">OR optimization</a> on <a href="../expridx.html">indexes on expressions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/d96eba87698a428c1d">d96eba87698a428c1d</a>.
+<li>Fix a problem with the
+<a href="../optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> in which the optimization
+was being applied inappropriately due to an IS NOT NULL operator.
+Ticket <a href="https://www.sqlite.org/src/info/5948e09b8c415bc45d">5948e09b8c415bc45d</a>.
+<li>Fix the <a href="../lang_replace.html">REPLACE</a> command so that it is no longer able to sneak a
+NULL value into a NOT NULL column even if the NOT NULL column has a default
+value of NULL.
+Ticket <a href="https://www.sqlite.org/src/info/e6f1f2e34dceeb1ed6">e6f1f2e34dceeb1ed6</a>
+<li>Fix a problem with the use of <a href="../windowfunctions.html">window functions</a> used within
+<a href="../lang_expr.html#cosub">correlated subqueries</a>.
+Ticket <a href="https://www.sqlite.org/src/info/d0866b26f83e9c55e3">d0866b26f83e9c55e3</a>
+<li>Fix the <a href="../lang_altertable.html#altertabmvcol">ALTER TABLE RENAME COLUMN</a> command so that it works for tables
+that have redundant UNIQUE constraints.
+Ticket <a href="https://www.sqlite.org/src/info/bc8d94f0fbd633fd9a">bc8d94f0fbd633fd9a</a>
+<li>Fix a bug that caused <a href="../lang_corefunc.html#zeroblob">zeroblob</a> values to be truncated when inserted into
+a table that uses an <a href="../expridx.html">expression index</a>.
+Ticket <a href="https://www.sqlite.org/src/info/bb4bdb9f7f654b0bb9">bb4bdb9f7f654b0bb9</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2019-02-07 17:02:52 97744701c3bd414e6c9d7182639d8c2ce7cf124c4fce625071ae65658ac61713
+"
+<li>SHA3-256 for sqlite3.c: ca011a10ee8515b33e5643444b98ee3d74dc45d3ac766c3700320def52bc6aba
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_27_1.html b/www/releaselog/3_27_1.html
new file mode 100644
index 0000000..fef60d5
--- /dev/null
+++ b/www/releaselog/3_27_1.html
@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.27.1 On 2019-02-08</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.27.1 On 2019-02-08</h2><p><b>Changes in version 3.27.0 (2019-02-07):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Added the <a href="../lang_vacuum.html#vacuuminto">VACUUM INTO</a> command
+<li>Issue an SQLITE_WARNING message on the <a href="../errlog.html">error log</a> if a
+<a href="../quirks.html#dblquote">double-quoted string literal</a> is used.
+<li>The <a href="../c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface works on any prepared statement
+created using <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> or <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>. It is no
+longer necessary to use <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> with <a href="../c3ref/c_prepare_normalize.html#sqlitepreparenormalize">SQLITE_PREPARE_NORMALIZE</a>
+in order to use <a href="../c3ref/expanded_sql.html">sqlite3_normalized_sql()</a>.
+<li>Added the remove_diacritics=2 option to <a href="../fts3.html">FTS3</a> and <a href="../fts5.html">FTS5</a>.
+<li>Added the <a href="../c3ref/c_prepare_normalize.html#sqlitepreparenovtab">SQLITE_PREPARE_NO_VTAB</a> option to <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>.
+Use that option to prevent circular references to <a href="../vtab.html#xshadowname">shadow tables</a> from
+causing resource leaks.
+<li>Enhancements to the <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> interface:
+<ol type="a">
+ <li> Add the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> <a href="../c3ref/file_control.html">file-control</a> for
+ setting an upper bound on the size of the in-memory database created
+ by sqlite3_deserialize. The default upper bound is 1GiB, or whatever
+ alternative value is specified by
+ <a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">SQLITE_CONFIG_MEMDB_MAXSIZE</a>)
+ and/or <a href="../compile.html#memdb_default_maxsize">SQLITE_MEMDB_DEFAULT_MAXSIZE</a>.
+ <li> Honor the <a href="../c3ref/c_deserialize_freeonclose.html">SQLITE_DESERIALIZE_READONLY</a> flag, which was previously described
+ in the documentation, but was previously a no-op.
+ <li> Enhance the "deserialize" command of the <a href="../tclsqlite.html">TCL Interface</a> to give it
+ new "--maxsize N" and "--readonly BOOLEAN" options.
+</ol>
+<li>Enhancements to the <a href="../cli.html">CLI</a>, mostly to support testing and debugging
+of the SQLite library itself:
+<ol type="a">
+ <li> Add support for ".open --hexdb". The
+ "<a href="https://sqlite.org/src/doc/trunk/tool/dbtotxt.md">dbtotxt</a>" utility
+ program used to generate the text for the "hexdb" is added to the
+ source tree.
+ <li> Add support for the "--maxsize N" option on ".open --deserialize".
+ <li> Add the "--memtrace" command-line option, to show all memory allocations
+ and deallocations.
+ <li> Add the ".eqp trace" option on builds with SQLITE_DEBUG, to enable
+ bytecode program listing with indentation and
+ <a href="../pragma.html#pragma_vdbe_trace">PRAGMA vdbe_trace</a> all in one step.
+ <li> Add the ".progress" command for accessing
+ the <a href="../c3ref/progress_handler.html">sqlite3_progress_handler()</a> interface.
+ <li> Add the "--async" option to the ".backup" command.
+ <li> Add options "--expanded", "--normalized", "--plain", "--profile", "--row",
+ "--stmt", and "--close" to the ".trace" command.
+</ol>
+<li> Increased robustness against malicious SQL that is run against a
+ maliciously corrupted database.
+ <p><b>Bug fixes:</b>
+<li>Do not use a partial index to do a table scan on an IN operator.
+Ticket <a href="https://www.sqlite.org/src/info/1d958d90596593a774">1d958d90596593a774</a>.
+<li>Fix the <a href="../optoverview.html#flattening">query flattener</a> so that it works on queries that contain
+subqueries that use <a href="../windowfunctions.html">window functions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/f09fcd17810f65f717">709fcd17810f65f717</a>
+<li>Ensure that ALTER TABLE modifies table and column names embedded in WITH
+clauses that are part of views and triggers.
+<li>Fix a parser bug that prevented the use of parentheses around table-valued
+functions.
+<li>Fix a problem with the <a href="../optoverview.html#or_opt">OR optimization</a> on <a href="../expridx.html">indexes on expressions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/d96eba87698a428c1d">d96eba87698a428c1d</a>.
+<li>Fix a problem with the
+<a href="../optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> in which the optimization
+was being applied inappropriately due to an IS NOT NULL operator.
+Ticket <a href="https://www.sqlite.org/src/info/5948e09b8c415bc45d">5948e09b8c415bc45d</a>.
+<li>Fix the <a href="../lang_replace.html">REPLACE</a> command so that it is no longer able to sneak a
+NULL value into a NOT NULL column even if the NOT NULL column has a default
+value of NULL.
+Ticket <a href="https://www.sqlite.org/src/info/e6f1f2e34dceeb1ed6">e6f1f2e34dceeb1ed6</a>
+<li>Fix a problem with the use of <a href="../windowfunctions.html">window functions</a> used within
+<a href="../lang_expr.html#cosub">correlated subqueries</a>.
+Ticket <a href="https://www.sqlite.org/src/info/d0866b26f83e9c55e3">d0866b26f83e9c55e3</a>
+<li>Fix the <a href="../lang_altertable.html#altertabmvcol">ALTER TABLE RENAME COLUMN</a> command so that it works for tables
+that have redundant UNIQUE constraints.
+Ticket <a href="https://www.sqlite.org/src/info/bc8d94f0fbd633fd9a">bc8d94f0fbd633fd9a</a>
+<li>Fix a bug that caused <a href="../lang_corefunc.html#zeroblob">zeroblob</a> values to be truncated when inserted into
+a table that uses an <a href="../expridx.html">expression index</a>.
+Ticket <a href="https://www.sqlite.org/src/info/bb4bdb9f7f654b0bb9">bb4bdb9f7f654b0bb9</a>
+</ol>
+<p><b>Additional changes in version 3.27.1 (2019-02-08):</b></p>
+<p><ol class='lessindent'>
+<li value='19'> Fix a bug in the query optimizer: an adverse interaction between
+the <a href="../optoverview.html#or_opt">OR optimization</a> and the optimization that tries to use values
+read directly from an <a href="../expridx.html">expression index</a> instead of recomputing the
+expression.
+Ticket <a href="https://www.sqlite.org/src/info/4e8e4857d32d401f">4e8e4857d32d401f</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-02-08 13:17:39 0eca3dd3d38b31c92b49ca2d311128b74584714d9e7de895b1a6286ef959a1dd
+<li>SHA3-256 for sqlite3.c: 11c14992660d5ac713ea8bea48dc5e6123f26bc8d3075fe5585d1a217d090233
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_27_2.html b/www/releaselog/3_27_2.html
new file mode 100644
index 0000000..43bcfa2
--- /dev/null
+++ b/www/releaselog/3_27_2.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.27.2 On 2019-02-25</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.27.2 On 2019-02-25</h2><p><b>Changes in version 3.27.0 (2019-02-07):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Added the <a href="../lang_vacuum.html#vacuuminto">VACUUM INTO</a> command
+<li>Issue an SQLITE_WARNING message on the <a href="../errlog.html">error log</a> if a
+<a href="../quirks.html#dblquote">double-quoted string literal</a> is used.
+<li>The <a href="../c3ref/expanded_sql.html">sqlite3_normalized_sql()</a> interface works on any prepared statement
+created using <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> or <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>. It is no
+longer necessary to use <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a> with <a href="../c3ref/c_prepare_normalize.html#sqlitepreparenormalize">SQLITE_PREPARE_NORMALIZE</a>
+in order to use <a href="../c3ref/expanded_sql.html">sqlite3_normalized_sql()</a>.
+<li>Added the remove_diacritics=2 option to <a href="../fts3.html">FTS3</a> and <a href="../fts5.html">FTS5</a>.
+<li>Added the <a href="../c3ref/c_prepare_normalize.html#sqlitepreparenovtab">SQLITE_PREPARE_NO_VTAB</a> option to <a href="../c3ref/prepare.html">sqlite3_prepare_v3()</a>.
+Use that option to prevent circular references to <a href="../vtab.html#xshadowname">shadow tables</a> from
+causing resource leaks.
+<li>Enhancements to the <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> interface:
+<ol type="a">
+ <li> Add the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> <a href="../c3ref/file_control.html">file-control</a> for
+ setting an upper bound on the size of the in-memory database created
+ by sqlite3_deserialize. The default upper bound is 1GiB, or whatever
+ alternative value is specified by
+ <a href="../c3ref/config.html">sqlite3_config</a>(<a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">SQLITE_CONFIG_MEMDB_MAXSIZE</a>)
+ and/or <a href="../compile.html#memdb_default_maxsize">SQLITE_MEMDB_DEFAULT_MAXSIZE</a>.
+ <li> Honor the <a href="../c3ref/c_deserialize_freeonclose.html">SQLITE_DESERIALIZE_READONLY</a> flag, which was previously described
+ in the documentation, but was previously a no-op.
+ <li> Enhance the "deserialize" command of the <a href="../tclsqlite.html">TCL Interface</a> to give it
+ new "--maxsize N" and "--readonly BOOLEAN" options.
+</ol>
+<li>Enhancements to the <a href="../cli.html">CLI</a>, mostly to support testing and debugging
+of the SQLite library itself:
+<ol type="a">
+ <li> Add support for ".open --hexdb". The
+ "<a href="https://sqlite.org/src/doc/trunk/tool/dbtotxt.md">dbtotxt</a>" utility
+ program used to generate the text for the "hexdb" is added to the
+ source tree.
+ <li> Add support for the "--maxsize N" option on ".open --deserialize".
+ <li> Add the "--memtrace" command-line option, to show all memory allocations
+ and deallocations.
+ <li> Add the ".eqp trace" option on builds with SQLITE_DEBUG, to enable
+ bytecode program listing with indentation and
+ <a href="../pragma.html#pragma_vdbe_trace">PRAGMA vdbe_trace</a> all in one step.
+ <li> Add the ".progress" command for accessing
+ the <a href="../c3ref/progress_handler.html">sqlite3_progress_handler()</a> interface.
+ <li> Add the "--async" option to the ".backup" command.
+ <li> Add options "--expanded", "--normalized", "--plain", "--profile", "--row",
+ "--stmt", and "--close" to the ".trace" command.
+</ol>
+<li> Increased robustness against malicious SQL that is run against a
+ maliciously corrupted database.
+ <p><b>Bug fixes:</b>
+<li>Do not use a partial index to do a table scan on an IN operator.
+Ticket <a href="https://www.sqlite.org/src/info/1d958d90596593a774">1d958d90596593a774</a>.
+<li>Fix the <a href="../optoverview.html#flattening">query flattener</a> so that it works on queries that contain
+subqueries that use <a href="../windowfunctions.html">window functions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/f09fcd17810f65f717">709fcd17810f65f717</a>
+<li>Ensure that ALTER TABLE modifies table and column names embedded in WITH
+clauses that are part of views and triggers.
+<li>Fix a parser bug that prevented the use of parentheses around table-valued
+functions.
+<li>Fix a problem with the <a href="../optoverview.html#or_opt">OR optimization</a> on <a href="../expridx.html">indexes on expressions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/d96eba87698a428c1d">d96eba87698a428c1d</a>.
+<li>Fix a problem with the
+<a href="../optoverview.html#leftjoinreduction">LEFT JOIN strength reduction optimization</a> in which the optimization
+was being applied inappropriately due to an IS NOT NULL operator.
+Ticket <a href="https://www.sqlite.org/src/info/5948e09b8c415bc45d">5948e09b8c415bc45d</a>.
+<li>Fix the <a href="../lang_replace.html">REPLACE</a> command so that it is no longer able to sneak a
+NULL value into a NOT NULL column even if the NOT NULL column has a default
+value of NULL.
+Ticket <a href="https://www.sqlite.org/src/info/e6f1f2e34dceeb1ed6">e6f1f2e34dceeb1ed6</a>
+<li>Fix a problem with the use of <a href="../windowfunctions.html">window functions</a> used within
+<a href="../lang_expr.html#cosub">correlated subqueries</a>.
+Ticket <a href="https://www.sqlite.org/src/info/d0866b26f83e9c55e3">d0866b26f83e9c55e3</a>
+<li>Fix the <a href="../lang_altertable.html#altertabmvcol">ALTER TABLE RENAME COLUMN</a> command so that it works for tables
+that have redundant UNIQUE constraints.
+Ticket <a href="https://www.sqlite.org/src/info/bc8d94f0fbd633fd9a">bc8d94f0fbd633fd9a</a>
+<li>Fix a bug that caused <a href="../lang_corefunc.html#zeroblob">zeroblob</a> values to be truncated when inserted into
+a table that uses an <a href="../expridx.html">expression index</a>.
+Ticket <a href="https://www.sqlite.org/src/info/bb4bdb9f7f654b0bb9">bb4bdb9f7f654b0bb9</a>
+</ol>
+<p><b>Additional changes in version 3.27.1 (2019-02-08):</b></p>
+<p><ol class='lessindent'>
+<li value='19'> Fix a bug in the query optimizer: an adverse interaction between
+the <a href="../optoverview.html#or_opt">OR optimization</a> and the optimization that tries to use values
+read directly from an <a href="../expridx.html">expression index</a> instead of recomputing the
+expression.
+Ticket <a href="https://www.sqlite.org/src/info/4e8e4857d32d401f">4e8e4857d32d401f</a>
+</ol>
+<p><b>Additional changes in version 3.27.2 (2019-02-25):</b></p>
+<p><ol class='lessindent'>
+<li value='20'> Fix a bug in the IN operator that was introduced by an
+ attempted optimization in version 3.27.0. Ticket
+ <a href="https://www.sqlite.org/src/info/df46dfb631f75694">df46dfb631f75694</a>
+<li> Fix a bug causing a crash when a <a href="../windowfunctions.html">window function</a> is misused. Ticket
+ <a href="https://www.sqlite.org/src/info/4feb3159c6bc3f7e33959">4feb3159c6bc3f7e33959</a>.
+<li> Fix various documentation typos
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0f6d7
+<li>SHA3-256 for sqlite3.c: 1dbae33bff261f979d0042338f72c9e734b11a80720fb32498bae9150cc576e7
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_28_0.html b/www/releaselog/3_28_0.html
new file mode 100644
index 0000000..6a379a6
--- /dev/null
+++ b/www/releaselog/3_28_0.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.28.0 On 2019-04-16</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.28.0 On 2019-04-16</h2><p><ol class='lessindent'>
+<li> Enhanced <a href="../windowfunctions.html">window functions</a>:
+<ol type="a">
+ <li> Add support the <a href="../windowfunctions.html#wexcls">EXCLUDE clause</a>.
+ <li> Add support for <a href="../windowfunctions.html#wchaining">window chaining</a>.
+ <li> Add support for <a href="../windowfunctions.html#grouptype">GROUPS frames</a>.
+ <li> Add support for "<a href="../windowfunctions.html#exprrange">&lt;expr&gt; PRECEDING</a>" and
+ "<a href="../windowfunctions.html#exprrange">&lt;expr&gt; FOLLOWING</a>" boundaries
+ in RANGE <a href="../windowfunctions.html#framespec">frames</a>.
+</ol>
+<li> Added the new <a href="../c3ref/stmt_isexplain.html">sqlite3_stmt_isexplain(S)</a> interface for determining
+ whether or not a <a href="../c3ref/stmt.html">prepared statement</a> is an <a href="../lang_explain.html">EXPLAIN</a>.
+<li> Enhanced <a href="../lang_vacuum.html#vacuuminto">VACUUM INTO</a> so that it works for read-only databases.
+<li> New query optimizations:
+<ol type="a">
+ <li> Enable the <a href="../optoverview.html#like_opt">LIKE optimization</a> for cases when the ESCAPE keyword
+ is present and <a href="../pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> is on.
+ <li> In queries that are driven by a <a href="../partialindex.html">partial index</a>, avoid unnecessary
+ tests of the constraint named in the WHERE clause of the partial
+ index, since we know that constraint must always be true.
+</ol>
+<li> Enhancements to the <a href="../tclsqlite.html">TCL Interface</a>:
+<ol type="a">
+ <li> Added the -returntype option to the <a href="../tclsqlite.html#function">function method</a>.
+ <li> Added the new <a href="../tclsqlite.html#bind_fallback">bind_fallback method</a>.
+</ol>
+<li> Enhancements to the <a href="../cli.html">CLI</a>:
+<ol type="a">
+ <li> Added support for <a href="../lang_expr.html#varparam">bound parameters</a> and the <a href="../cli.html#param">.parameter command</a>.
+ <li> Fix the <a href="../cli.html#fileio">readfile()</a> function so that it returns
+ an empty BLOB rather than throwing an out-of-memory error when
+ reading an empty file.
+ <li> Fix the <a href="../cli.html#fileio">writefile()</a> function so that when it
+ creates new directories along the path of a new file, it gives them
+ umask permissions rather than the same permissions as the file.
+ <li> Change <a href="../cli.html#arinsup">--update option</a> in the <a href="../cli.html#sqlar">.archive command</a> so that it skips
+ files that are already in the archive and are unchanged. Add the
+ new --insert option that works like --update used to work.
+</ol>
+<li> Added the <a href="https://sqlite.org/src/file/ext/misc/fossildelta.c">fossildelta.c</a>
+ extension that can create, apply, and deconstruct the
+ <a href="https://fossil-scm.org/fossil/doc/trunk/www/delta_format.wiki">Fossil DVCS file delta format</a>
+ that is used by the <a href="../rbu.html">RBU extension</a>.
+<li> Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigwritableschema">SQLITE_DBCONFIG_WRITABLE_SCHEMA</a> verb for the <a href="../c3ref/db_config.html">sqlite3_db_config()</a>
+ interface, that does the same work as <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema</a> without using the
+ SQL parser.
+<li> Added the <a href="../c3ref/value_blob.html">sqlite3_value_frombind()</a> API for determining if the argument
+ to an SQL function is from a <a href="../lang_expr.html#varparam">bound parameter</a>.
+<li> Security and compatibilities enhancements to <a href="../fts3.html#f3tknzr">fts3_tokenizer()</a>:
+<ol type="a">
+ <li> The <a href="../fts3.html#f3tknzr">fts3_tokenizer()</a> function always returns NULL
+ unless either the legacy application-defined FTS3 tokenizers interface
+ are enabled using
+ the <a href="../c3ref/db_config.html">sqlite3_db_config</a>(<a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>)
+ setting, or unless the first argument to fts3_tokenizer() is a <a href="../lang_expr.html#varparam">bound parameter</a>.
+ <li> The two-argument version of <a href="../fts3.html#f3tknzr">fts3_tokenizer()</a> accepts a pointer to the
+ tokenizer method object even without
+ the <a href="../c3ref/db_config.html">sqlite3_db_config</a>(<a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>) setting
+ if the second argument is a <a href="../lang_expr.html#varparam">bound parameter</a>
+</ol>
+<li> Improved robustness against corrupt database files.
+<li> Miscellaneous performance enhancements
+<li> Established a Git mirror of the offical SQLite source tree.
+ The canonical sources for SQLite are maintained using the
+ <a href="https://fossil-scm.org/">Fossil DVCS</a> at <a href="https://sqlite.org/src">https://sqlite.org/src</a>.
+ The Git mirror can be seen at <a href="https://github.com/sqlite/sqlite">https://github.com/sqlite/sqlite</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-04-16 19:49:53 884b4b7e502b4e991677b53971277adfaf0a04a284f8e483e2553d0f83156b50
+<li>SHA3-256 for sqlite3.c: 411efca996b65448d9798eb203d6ebe9627b7161a646f5d00911e2902a57b2e9
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_29_0.html b/www/releaselog/3_29_0.html
new file mode 100644
index 0000000..819747f
--- /dev/null
+++ b/www/releaselog/3_29_0.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.29.0 On 2019-07-10</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.29.0 On 2019-07-10</h2><p><ol class='lessindent'>
+<li> Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">SQLITE_DBCONFIG_DQS_DML</a> and <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">SQLITE_DBCONFIG_DQS_DDL</a>
+ actions to <a href="../c3ref/db_config.html">sqlite3_db_config()</a> for activating and deactivating
+ the <a href="../quirks.html#dblquote">double-quoted string literal</a> misfeature. Both default to "on"
+ for legacy compatibility, but developers are encouraged to turn them
+ "off", perhaps using the <a href="../compile.html#dqs">-DSQLITE_DQS=0</a> compile-time option.
+<li> <a href="../compile.html#dqs">-DSQLITE_DQS=0</a> is now a <a href="../compile.html#rcmd">recommended compile-time option</a>.
+<li> Improvements to the <a href="../optoverview.html">query planner</a>:
+<ol type="a">
+ <li> Improved optimization of AND and OR operators when one or the other
+ operand is a constant.
+ <li> Enhancements to the <a href="../optoverview.html#like_opt">LIKE optimization</a> for cases when the left-hand
+ side column has numeric affinity.
+ </ol>
+ <li> Added the "<a href="https://sqlite.org/src/file/ext/misc/dbdata.c">sqlite_dbdata</a>"
+ virtual table for extracting raw low-level content from an SQLite database,
+ even a database that is corrupt.
+ <li> Improvements to rounding behavior, so that the results of rounding
+ binary numbers using the <a href="../lang_corefunc.html#round">round()</a> function are closer to what people
+ who are used to thinking in decimal actually expect.
+ <li> Enhancements to the <a href="../cli.html">CLI</a>:
+<ol type="a">
+ <li> Add the ".recover" command which tries to recover as much content
+ as possible from a corrupt database file.
+ <li> Add the ".filectrl" command useful for testing.
+ <li> Add the long-standing ".testctrl" command to the ".help" menu.
+ <li> Added the ".dbconfig" command
+</ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6
+<li>SHA3-256 for sqlite3.c: d9a5daf7697a827f4b2638276ce639fa04e8e8bb5fd3a6b683cfad10f1c81b12
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_2_0.html b/www/releaselog/3_2_0.html
new file mode 100644
index 0000000..5f2efa0
--- /dev/null
+++ b/www/releaselog/3_2_0.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.2.0 On 2005-03-21</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.2.0 On 2005-03-21</h2><p><ol class='lessindent'>
+<li>Added support for ALTER TABLE ADD COLUMN.</li>
+<li>Added support for the "T" separator in ISO-8601 date/time strings.</li>
+<li>Improved support for Cygwin.</li>
+<li>Numerous bug fixes and documentation updates.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_2_1.html b/www/releaselog/3_2_1.html
new file mode 100644
index 0000000..1895db5
--- /dev/null
+++ b/www/releaselog/3_2_1.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.2.1 On 2005-03-29</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.2.1 On 2005-03-29</h2><p><ol class='lessindent'>
+<li>Fix a memory allocation error in the new ADD COLUMN comment.</li>
+<li>Documentation updates</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_2_2.html b/www/releaselog/3_2_2.html
new file mode 100644
index 0000000..3fd1619
--- /dev/null
+++ b/www/releaselog/3_2_2.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.2.2 On 2005-06-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.2.2 On 2005-06-12</h2><p><ol class='lessindent'>
+<li>Added the sqlite3_db_handle() API</li>
+<li>Added the sqlite3_get_autocommit() API</li>
+<li>Added a REGEXP operator to the parser. There is no function to back
+up this operator in the standard build but users can add their own using
+sqlite3_create_function()</li>
+<li>Speed improvements and library footprint reductions.</li>
+<li>Fix byte alignment problems on 64-bit architectures.</li>
+<li>Many, many minor bug fixes and documentation updates.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_2_3.html b/www/releaselog/3_2_3.html
new file mode 100644
index 0000000..63341d9
--- /dev/null
+++ b/www/releaselog/3_2_3.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.2.3 On 2005-08-21</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.2.3 On 2005-08-21</h2><p><ol class='lessindent'>
+<li>Added support for the CAST operator</li>
+<li>Tcl interface allows BLOB values to be transferred to user-defined
+functions</li>
+<li>Added the "transaction" method to the Tcl interface</li>
+<li>Allow the DEFAULT value of a column to call functions that have constant
+operands</li>
+<li>Added the ANALYZE command for gathering statistics on indices and
+using those statistics when picking an index in the optimizer</li>
+<li>Remove the limit (formerly 100) on the number of terms in the
+WHERE clause</li>
+<li>The right-hand side of the IN operator can now be a list of expressions
+instead of just a list of constants</li>
+<li>Rework the optimizer so that it is able to make better use of indices</li>
+<li>The order of tables in a join is adjusted automatically to make
+better use of indices</li>
+<li>The IN operator is now a candidate for optimization even if the left-hand
+side is not the left-most term of the index. Multiple IN operators can be
+used with the same index.</li>
+<li>WHERE clause expressions using BETWEEN and OR are now candidates
+for optimization</li>
+<li>Added the "case_sensitive_like" pragma and the SQLITE_CASE_SENSITIVE_LIKE
+compile-time option to set its default value to "on".</li>
+<li>Use indices to help with GLOB expressions and LIKE expressions too
+when the case_sensitive_like pragma is enabled</li>
+<li>Added support for grave-accent quoting for compatibility with MySQL</li>
+<li>Improved test coverage</li>
+<li>Dozens of minor bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_2_4.html b/www/releaselog/3_2_4.html
new file mode 100644
index 0000000..da9682f
--- /dev/null
+++ b/www/releaselog/3_2_4.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.2.4 On 2005-08-24</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.2.4 On 2005-08-24</h2><p><ol class='lessindent'>
+<li>Fix a bug introduced in the previous release
+that can cause a segfault while generating code
+for complex WHERE clauses.</li>
+<li>Allow floating point literals to begin or end with a decimal point.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_2_5.html b/www/releaselog/3_2_5.html
new file mode 100644
index 0000000..fe0060c
--- /dev/null
+++ b/www/releaselog/3_2_5.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.2.5 On 2005-08-27</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.2.5 On 2005-08-27</h2><p><ol class='lessindent'>
+<li>Fix a bug effecting DELETE and UPDATE statements that changed
+more than 40960 rows.</li>
+<li>Change the makefile so that it no longer requires GNUmake extensions</li>
+<li>Fix the --enable-threadsafe option on the configure script</li>
+<li>Fix a code generator bug that occurs when the left-hand side of an IN
+operator is constant and the right-hand side is a SELECT statement</li>
+<li>The PRAGMA synchronous=off statement now disables syncing of the
+master journal file in addition to the normal rollback journals</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_2_6.html b/www/releaselog/3_2_6.html
new file mode 100644
index 0000000..f1cf755
--- /dev/null
+++ b/www/releaselog/3_2_6.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.2.6 On 2005-09-17</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.2.6 On 2005-09-17</h2><p><ol class='lessindent'>
+<li>Fix a bug that can cause database corruption if a VACUUM (or
+ autovacuum) fails and is rolled back on a database that is
+ larger than 1GiB</li>
+<li>LIKE optimization now works for columns with COLLATE NOCASE</li>
+<li>ORDER BY and GROUP BY now use bounded memory</li>
+<li>Added support for COUNT(DISTINCT expr)</li>
+<li>Change the way SUM() handles NULL values in order to comply with
+ the SQL standard</li>
+<li>Use fdatasync() instead of fsync() where possible in order to speed
+ up commits slightly</li>
+<li>Use of the CROSS keyword in a join turns off the table reordering
+ optimization</li>
+<li>Added the experimental and undocumented EXPLAIN QUERY PLAN capability</li>
+<li>Use the unicode API in Windows</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_2_7.html b/www/releaselog/3_2_7.html
new file mode 100644
index 0000000..baaf4bd
--- /dev/null
+++ b/www/releaselog/3_2_7.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.2.7 On 2005-09-24</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.2.7 On 2005-09-24</h2><p><ol class='lessindent'>
+<li>GROUP BY now considers NULLs to be equal again, as it should
+</li>
+<li>Now compiles on Solaris and OpenBSD and other Unix variants
+that lack the fdatasync() function</li>
+<li>Now compiles on MSVC++6 again</li>
+<li>Fix uninitialized variables causing malfunctions for various obscure
+queries</li>
+<li>Correctly compute a LEFT OUTER JOINs that is constrained on the
+left table only</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_2_8.html b/www/releaselog/3_2_8.html
new file mode 100644
index 0000000..b43f2bc
--- /dev/null
+++ b/www/releaselog/3_2_8.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.2.8 On 2005-12-19</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.2.8 On 2005-12-19</h2><p><ol class='lessindent'>
+<li>Fix an obscure bug that can cause database corruption under the
+following unusual circumstances: A large INSERT or UPDATE statement which
+is part of an even larger transaction fails due to a uniqueness constraint
+but the containing transaction commits.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_30_0.html b/www/releaselog/3_30_0.html
new file mode 100644
index 0000000..fb1e73f
--- /dev/null
+++ b/www/releaselog/3_30_0.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.30.0 On 2019-10-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.30.0 On 2019-10-04</h2><p><ol class='lessindent'>
+<li> Add support for the <a href="../lang_aggfunc.html#aggfilter">FILTER clause on aggregate functions</a>.
+<li> Add support for the <a href="../lang_select.html#nullslast">NULLS FIRST</a> and <a href="../lang_select.html#nullslast">NULLS LAST</a> syntax in <a href="../lang_select.html#orderby">ORDER BY</a> clauses.
+<li> The <a href="../pragma.html#pragma_index_info">index_info</a> and <a href="../pragma.html#pragma_index_xinfo">index_xinfo</a> pragmas are enhanced to provide
+ information about the on-disk representation of <a href="../withoutrowid.html">WITHOUT ROWID</a>
+ tables.
+<li> Add the <a href="../c3ref/drop_modules.html">sqlite3_drop_modules()</a> interface, allowing applications
+ to disable automatically loaded virtual tables that they do not
+ need.
+<li> Improvements to the <a href="../cli.html#recover">.recover dot-command</a> in the <a href="../cli.html">CLI</a> so that
+ it recovers more content from corrupt database files.
+<li> Enhance the <a href="../rbu.html">RBU</a> extension to support <a href="../expridx.html">indexes on expressions</a>.
+<li> Change the schema parser so that it will error out if any of
+ the type, name, and tbl_name columns of the <a href="../schematab.html">sqlite_master table</a>
+ have been corrupted and the database connection is not in
+ <a href="../pragma.html#pragma_writable_schema">writable_schema</a> mode.
+<li> The <a href="../pragma.html#pragma_function_list">PRAGMA function_list</a>, <a href="../pragma.html#pragma_module_list">PRAGMA module_list</a>, and
+ <a href="../pragma.html#pragma_pragma_list">PRAGMA pragma_list</a> commands are now
+ enabled in all builds by default. Disable them using
+ <a href="../compile.html#omit_introspection_pragmas">-DSQLITE_OMIT_INTROSPECTION_PRAGMAS</a>.
+<li> Add the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> option for <a href="../c3ref/db_config.html">sqlite3_db_config()</a>.
+<li> Added the <a href="../tclsqlite.html">TCL Interface</a> <a href="../tclsqlite.html#config">config method</a> in order to be able to
+ disable <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> as well as control other
+ <a href="../c3ref/db_config.html">sqlite3_db_config()</a> options from TCL.
+<li> Added the <a href="../c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a> flag for
+ <a href="../appfunc.html">application-defined SQL functions</a> to prevent those functions from
+ being used inside triggers and views.
+<li> The legacy <a href="../compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> compile-time option is now a no-op.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-10-04 15:03:17 c20a35336432025445f9f7e289d0cc3e4003fb17f45a4ce74c6269c407c6e09f
+<li>SHA3-256 for sqlite3.c: f04393dd47205a4ee2b98ff737dc51a3fdbcc14c055b88d58f5b27d0672158f5
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_30_1.html b/www/releaselog/3_30_1.html
new file mode 100644
index 0000000..17d9b0b
--- /dev/null
+++ b/www/releaselog/3_30_1.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.30.1 On 2019-10-10</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.30.1 On 2019-10-10</h2><p><b>Changes in version 3.30.0 (2019-10-04):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add support for the <a href="../lang_aggfunc.html#aggfilter">FILTER clause on aggregate functions</a>.
+<li> Add support for the <a href="../lang_select.html#nullslast">NULLS FIRST</a> and <a href="../lang_select.html#nullslast">NULLS LAST</a> syntax in <a href="../lang_select.html#orderby">ORDER BY</a> clauses.
+<li> The <a href="../pragma.html#pragma_index_info">index_info</a> and <a href="../pragma.html#pragma_index_xinfo">index_xinfo</a> pragmas are enhanced to provide
+ information about the on-disk representation of <a href="../withoutrowid.html">WITHOUT ROWID</a>
+ tables.
+<li> Add the <a href="../c3ref/drop_modules.html">sqlite3_drop_modules()</a> interface, allowing applications
+ to disable automatically loaded virtual tables that they do not
+ need.
+<li> Improvements to the <a href="../cli.html#recover">.recover dot-command</a> in the <a href="../cli.html">CLI</a> so that
+ it recovers more content from corrupt database files.
+<li> Enhance the <a href="../rbu.html">RBU</a> extension to support <a href="../expridx.html">indexes on expressions</a>.
+<li> Change the schema parser so that it will error out if any of
+ the type, name, and tbl_name columns of the <a href="../schematab.html">sqlite_master table</a>
+ have been corrupted and the database connection is not in
+ <a href="../pragma.html#pragma_writable_schema">writable_schema</a> mode.
+<li> The <a href="../pragma.html#pragma_function_list">PRAGMA function_list</a>, <a href="../pragma.html#pragma_module_list">PRAGMA module_list</a>, and
+ <a href="../pragma.html#pragma_pragma_list">PRAGMA pragma_list</a> commands are now
+ enabled in all builds by default. Disable them using
+ <a href="../compile.html#omit_introspection_pragmas">-DSQLITE_OMIT_INTROSPECTION_PRAGMAS</a>.
+<li> Add the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> option for <a href="../c3ref/db_config.html">sqlite3_db_config()</a>.
+<li> Added the <a href="../tclsqlite.html">TCL Interface</a> <a href="../tclsqlite.html#config">config method</a> in order to be able to
+ disable <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a> as well as control other
+ <a href="../c3ref/db_config.html">sqlite3_db_config()</a> options from TCL.
+<li> Added the <a href="../c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a> flag for
+ <a href="../appfunc.html">application-defined SQL functions</a> to prevent those functions from
+ being used inside triggers and views.
+<li> The legacy <a href="../compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> compile-time option is now a no-op.
+</ol>
+<p><b>Additional changes in version 3.30.1 (2019-10-10):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a bug in the <a href="../optoverview.html#flattening">query flattener</a> that might cause a segfault
+for nested queries that use the new
+<a href="../lang_aggfunc.html#aggfilter">FILTER clause on aggregate functions</a>.
+Ticket <a href="https://www.sqlite.org/src/info/1079ad19993d13fa">1079ad19993d13fa</a>
+<li> Cherrypick fixes for other obscure problems found since the 3.30.0
+ release
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2019-10-10 20:19:45 18db032d058f1436ce3dea84081f4ee5a0f2259ad97301d43c426bc7f3df1b0b
+<li>SHA3-256 for sqlite3.c: f96fafe4c110ed7d77fc70a7d690e5edd1e64fefb84b3b5969a722d885de1f2d
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_31_0.html b/www/releaselog/3_31_0.html
new file mode 100644
index 0000000..b4af1e1
--- /dev/null
+++ b/www/releaselog/3_31_0.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.31.0 On 2020-01-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.31.0 On 2020-01-22</h2><p><ol class='lessindent'>
+<li>Add support for <a href="../gencol.html">generated columns</a>.
+<li>Add the <a href="../c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a> interface and the corresponding
+ <a href="../pragma.html#pragma_hard_heap_limit">PRAGMA hard_heap_limit</a> command.
+<li>Enhance the <a href="../pragma.html#pragma_function_list">function_list pragma</a> to show the number of arguments on each
+ function, the type of function (scalar, aggregate, window), and the function
+ property flags <a href="../c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a>, <a href="../c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>,
+ <a href="../c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a>, and/or <a href="../c3ref/c_deterministic.html#sqlitesubtype">SQLITE_SUBTYPE</a>.
+<li>Add the <a href="../dbstat.html#dbstatagg">aggregated mode</a> feature to the
+ <a href="../dbstat.html">DBSTAT virtual table</a>.
+<li>Add the <a href="../c3ref/open.html#opennofollow">SQLITE_OPEN_NOFOLLOW</a> option to <a href="../c3ref/open.html">sqlite3_open_v2()</a> that
+ prevents SQLite from opening symbolic links.
+<li>Added the "#-N" array notation for <a href="../json1.html#jsonpath">JSON function path arguments</a>.
+<li>Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a> connection setting which is
+ also controllable via the new <a href="../pragma.html#pragma_trusted_schema">trusted_schema pragma</a> and at compile-time
+ using the <a href="../compile.html#trusted_schema">-DSQLITE_TRUSTED_SCHEMA</a> compile-time option.
+<li>Added APIs <a href="../c3ref/filename_database.html">sqlite3_filename_database()</a>, <a href="../c3ref/filename_database.html">sqlite3_filename_journal()</a>, and
+ <a href="../c3ref/filename_database.html">sqlite3_filename_wal()</a> which are useful for specialized extensions.
+<li>Add the <a href="../c3ref/uri_boolean.html">sqlite3_uri_key()</a> interface.
+<li>Upgraded the <a href="../c3ref/uri_boolean.html">sqlite3_uri_parameter()</a> function so that it works with the
+ rollback journal or WAL filename in addition to the database filename.
+<li>Provide the ability to tag <a href="../appfunc.html">application-defined SQL functions</a> with
+ new properties <a href="../c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a> or <a href="../c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>.
+<li>Add new verbs to <a href="../c3ref/vtab_config.html">sqlite3_vtab_config()</a> so that the <a href="../vtab.html#xconnect">xConnect</a> method
+ of virtual tables can declare the virtual table as
+ <a href="../c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> or <a href="../c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">SQLITE_VTAB_DIRECTONLY</a>.
+<li>Faster response to <a href="../c3ref/interrupt.html">sqlite3_interrupt()</a>.
+<li>Added the <a href="https://sqlite.org/src/file/ext/misc/uuid.c">uuid.c</a> extension module
+ implementing functions for processing RFC-4122 UUIDs.
+<li>The <a href="../malloc.html#lookaside">lookaside memory allocator</a> is enhanced to support two separate memory
+ pools with different sized allocations in each pool. This allows more memory
+ allocations to be covered by lookaside while at the same time reducing the
+ heap memory usage to 48KB per connection, down from 120KB.
+<li>The <a href="../pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a> is deactivated. It is now a no-op. In its place,
+ the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</a> option to <a href="../c3ref/db_config.html">sqlite3_db_config()</a> is
+ provided. The legacy_file_format pragma is deactivated because (1) it is
+ rarely useful and (2) it is incompatible with <a href="../lang_vacuum.html">VACUUM</a> in schemas that have
+ tables with both generated columns and descending indexes.
+ Ticket <a href="https://www.sqlite.org/src/info/6484e6ce678fffab">6484e6ce678fffab</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-01-22 18:38:59 f6affdd41608946fcfcea914ece149038a8b25a62bbe719ed2561c649b86d824
+<li>SHA3-256 for sqlite3.c: a5fca0b9f8cbf80ac89b97193378c719d4af4b7d647729d8df9c0c0fca7b1388
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_31_1.html b/www/releaselog/3_31_1.html
new file mode 100644
index 0000000..7d4b339
--- /dev/null
+++ b/www/releaselog/3_31_1.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.31.1 On 2020-01-27</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.31.1 On 2020-01-27</h2><p><b>Changes in version 3.31.0 (2020-01-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Add support for <a href="../gencol.html">generated columns</a>.
+<li>Add the <a href="../c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a> interface and the corresponding
+ <a href="../pragma.html#pragma_hard_heap_limit">PRAGMA hard_heap_limit</a> command.
+<li>Enhance the <a href="../pragma.html#pragma_function_list">function_list pragma</a> to show the number of arguments on each
+ function, the type of function (scalar, aggregate, window), and the function
+ property flags <a href="../c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a>, <a href="../c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>,
+ <a href="../c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a>, and/or <a href="../c3ref/c_deterministic.html#sqlitesubtype">SQLITE_SUBTYPE</a>.
+<li>Add the <a href="../dbstat.html#dbstatagg">aggregated mode</a> feature to the
+ <a href="../dbstat.html">DBSTAT virtual table</a>.
+<li>Add the <a href="../c3ref/open.html#opennofollow">SQLITE_OPEN_NOFOLLOW</a> option to <a href="../c3ref/open.html">sqlite3_open_v2()</a> that
+ prevents SQLite from opening symbolic links.
+<li>Added the "#-N" array notation for <a href="../json1.html#jsonpath">JSON function path arguments</a>.
+<li>Added the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a> connection setting which is
+ also controllable via the new <a href="../pragma.html#pragma_trusted_schema">trusted_schema pragma</a> and at compile-time
+ using the <a href="../compile.html#trusted_schema">-DSQLITE_TRUSTED_SCHEMA</a> compile-time option.
+<li>Added APIs <a href="../c3ref/filename_database.html">sqlite3_filename_database()</a>, <a href="../c3ref/filename_database.html">sqlite3_filename_journal()</a>, and
+ <a href="../c3ref/filename_database.html">sqlite3_filename_wal()</a> which are useful for specialized extensions.
+<li>Add the <a href="../c3ref/uri_boolean.html">sqlite3_uri_key()</a> interface.
+<li>Upgraded the <a href="../c3ref/uri_boolean.html">sqlite3_uri_parameter()</a> function so that it works with the
+ rollback journal or WAL filename in addition to the database filename.
+<li>Provide the ability to tag <a href="../appfunc.html">application-defined SQL functions</a> with
+ new properties <a href="../c3ref/c_deterministic.html#sqliteinnocuous">SQLITE_INNOCUOUS</a> or <a href="../c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a>.
+<li>Add new verbs to <a href="../c3ref/vtab_config.html">sqlite3_vtab_config()</a> so that the <a href="../vtab.html#xconnect">xConnect</a> method
+ of virtual tables can declare the virtual table as
+ <a href="../c3ref/c_vtab_constraint_support.html#sqlitevtabinnocuous">SQLITE_VTAB_INNOCUOUS</a> or <a href="../c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">SQLITE_VTAB_DIRECTONLY</a>.
+<li>Faster response to <a href="../c3ref/interrupt.html">sqlite3_interrupt()</a>.
+<li>Added the <a href="https://sqlite.org/src/file/ext/misc/uuid.c">uuid.c</a> extension module
+ implementing functions for processing RFC-4122 UUIDs.
+<li>The <a href="../malloc.html#lookaside">lookaside memory allocator</a> is enhanced to support two separate memory
+ pools with different sized allocations in each pool. This allows more memory
+ allocations to be covered by lookaside while at the same time reducing the
+ heap memory usage to 48KB per connection, down from 120KB.
+<li>The <a href="../pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a> is deactivated. It is now a no-op. In its place,
+ the <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</a> option to <a href="../c3ref/db_config.html">sqlite3_db_config()</a> is
+ provided. The legacy_file_format pragma is deactivated because (1) it is
+ rarely useful and (2) it is incompatible with <a href="../lang_vacuum.html">VACUUM</a> in schemas that have
+ tables with both generated columns and descending indexes.
+ Ticket <a href="https://www.sqlite.org/src/info/6484e6ce678fffab">6484e6ce678fffab</a>
+</ol>
+<p><b>Additional changes in version 3.31.1 (2020-01-27):</b></p>
+<p><ol class='lessindent'>
+<li value='17'> Revert the data layout for an internal-use-only SQLite data structure.
+ Applications that use SQLite should never reference internal SQLite
+ data structures, but some do anyhow, and a change to one such
+ data structure in 3.30.0 broke a popular and widely-deployed
+ application. Reverting that change in SQLite, at least temporarily,
+ gives developers of misbehaving applications time to fix their code.
+<li> Fix a typos in the sqlite3ext.h header file that prevented the
+ <a href="../c3ref/stmt_isexplain.html">sqlite3_stmt_isexplain()</a> and <a href="../c3ref/value_blob.html">sqlite3_value_frombind()</a> interfaces
+ from being called from <a href="../loadext.html">run-time loadable extensions</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6
+<li>SHA3-256 for sqlite3.c: de465c64f09529429a38cbdf637acce4dfda6897f93e3db3594009e0fed56d27
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_32_0.html b/www/releaselog/3_32_0.html
new file mode 100644
index 0000000..45fa0f4
--- /dev/null
+++ b/www/releaselog/3_32_0.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.32.0 On 2020-05-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.32.0 On 2020-05-22</h2><p><ol class='lessindent'>
+<li> Added support for <a href="../lang_analyze.html#approx">approximate ANALYZE</a> using the
+ <a href="../pragma.html#pragma_analysis_limit">PRAGMA analysis_limit</a> command.
+<li> Added the <a href="../bytecodevtab.html">bytecode virtual table</a>.
+<li> Add the <a href="../cksumvfs.html">checksum VFS shim</a> to the set of run-time loadable
+ extensions included in the source tree.
+<li> Added the <a href="../lang_corefunc.html#iif">iif() SQL function</a>.
+<li> INSERT and UPDATE statements now always apply <a href="../datatype3.html#affinity">column affinity</a>
+ before computing <a href="../lang_createtable.html#ckconst">CHECK constraints</a>. This bug fix could, in
+ theory, cause problems for legacy databases with unorthodox
+ CHECK constraints the require the input type for an INSERT
+ is different from the declared column type. See ticket
+ <a href="https://sqlite.org/src/info/86ba67afafded936">86ba67afafded936</a>
+ for more information.
+<li> Added the <a href="../c3ref/create_filename.html">sqlite3_create_filename()</a>, <a href="../c3ref/create_filename.html">sqlite3_free_filename()</a>,
+ and <a href="../c3ref/database_file_object.html">sqlite3_database_file_object()</a>
+ interfaces to better support of <a href="../vfs.html#shim">VFS shim</a> implementations.
+<li> Increase the <a href="../limits.html#max_variable_number">default upper bound</a>
+ on the number of <a href="../lang_expr.html#varparam">parameters</a> from 999 to 32766.
+<li> Added code for the <a href="../uintcseq.html">UINT collating sequence</a> as an optional
+ <a href="../loadext.html">loadable extension</a>.
+<li> Enhancements to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add options to the <a href="../cli.html#csv">.import</a> command: --csv, --ascii, --skip
+ <li> The <a href="../cli.html#dump">.dump</a> command now accepts multiple LIKE-pattern arguments
+ and outputs the union of all matching tables.
+ <li> Add the .oom command in debugging builds
+ <li> Add the --bom option to the <a href="../cli.html#dotexcel">.excel</a>, <a href="../cli.html#dotoutput">.output</a>, and <a href="../cli.html#dotoutput">.once</a>
+ commands.
+ <li> Enhance the .filectrl command to support the --schema option.
+ <li> The <a href="../uintcseq.html">UINT collating sequence</a> extension is automatically loaded
+ </ol>
+<li> The <a href="../lang_expr.html#like">ESCAPE</a> clause of a <a href="../lang_expr.html#like">LIKE</a> operator now overrides wildcard
+ characters, so that the behavior matches what PostgreSQL does.
+<li>SQLITE_SOURCE_ID: 2020-05-22 17:46:16 5998789c9c744bce92e4cff7636bba800a75574243d6977e1fc8281e360f8d5a
+<li>SHA3-256 for sqlite3.c: 33ed868b21b62ce1d0352ed88bdbd9880a42f29046497a222df6459fc32a356f
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_32_1.html b/www/releaselog/3_32_1.html
new file mode 100644
index 0000000..cdacf0a
--- /dev/null
+++ b/www/releaselog/3_32_1.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.32.1 On 2020-05-25</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.32.1 On 2020-05-25</h2><p><b>Changes in version 3.32.0 (2020-05-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added support for <a href="../lang_analyze.html#approx">approximate ANALYZE</a> using the
+ <a href="../pragma.html#pragma_analysis_limit">PRAGMA analysis_limit</a> command.
+<li> Added the <a href="../bytecodevtab.html">bytecode virtual table</a>.
+<li> Add the <a href="../cksumvfs.html">checksum VFS shim</a> to the set of run-time loadable
+ extensions included in the source tree.
+<li> Added the <a href="../lang_corefunc.html#iif">iif() SQL function</a>.
+<li> INSERT and UPDATE statements now always apply <a href="../datatype3.html#affinity">column affinity</a>
+ before computing <a href="../lang_createtable.html#ckconst">CHECK constraints</a>. This bug fix could, in
+ theory, cause problems for legacy databases with unorthodox
+ CHECK constraints the require the input type for an INSERT
+ is different from the declared column type. See ticket
+ <a href="https://sqlite.org/src/info/86ba67afafded936">86ba67afafded936</a>
+ for more information.
+<li> Added the <a href="../c3ref/create_filename.html">sqlite3_create_filename()</a>, <a href="../c3ref/create_filename.html">sqlite3_free_filename()</a>,
+ and <a href="../c3ref/database_file_object.html">sqlite3_database_file_object()</a>
+ interfaces to better support of <a href="../vfs.html#shim">VFS shim</a> implementations.
+<li> Increase the <a href="../limits.html#max_variable_number">default upper bound</a>
+ on the number of <a href="../lang_expr.html#varparam">parameters</a> from 999 to 32766.
+<li> Added code for the <a href="../uintcseq.html">UINT collating sequence</a> as an optional
+ <a href="../loadext.html">loadable extension</a>.
+<li> Enhancements to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add options to the <a href="../cli.html#csv">.import</a> command: --csv, --ascii, --skip
+ <li> The <a href="../cli.html#dump">.dump</a> command now accepts multiple LIKE-pattern arguments
+ and outputs the union of all matching tables.
+ <li> Add the .oom command in debugging builds
+ <li> Add the --bom option to the <a href="../cli.html#dotexcel">.excel</a>, <a href="../cli.html#dotoutput">.output</a>, and <a href="../cli.html#dotoutput">.once</a>
+ commands.
+ <li> Enhance the .filectrl command to support the --schema option.
+ <li> The <a href="../uintcseq.html">UINT collating sequence</a> extension is automatically loaded
+ </ol>
+<li> The <a href="../lang_expr.html#like">ESCAPE</a> clause of a <a href="../lang_expr.html#like">LIKE</a> operator now overrides wildcard
+ characters, so that the behavior matches what PostgreSQL does.
+</ol>
+<p><b>Additional changes in version 3.32.1 (2020-05-25):</b></p>
+<p><ol class='lessindent'>
+<li value='11'> Fix two long-standing bugs that allow malicious SQL statements
+ to crash the process that is running SQLite. These bugs were announced
+ by a third-party approximately 24 hours after the 3.32.0 release but are
+ not specific to the 3.32.0 release.
+<li> Other minor compiler-warning fixes and whatnot.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-05-25 16:19:56 0c1fcf4711a2e66c813aed38cf41cd3e2123ee8eb6db98118086764c4ba83350
+<li>SHA3-256 for sqlite3.c: f695ae21abf045e4ee77980a67ab2c6e03275009e593ee860a2eabf840482372
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_32_2.html b/www/releaselog/3_32_2.html
new file mode 100644
index 0000000..5ea420c
--- /dev/null
+++ b/www/releaselog/3_32_2.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.32.2 On 2020-06-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.32.2 On 2020-06-04</h2><p><b>Changes in version 3.32.0 (2020-05-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added support for <a href="../lang_analyze.html#approx">approximate ANALYZE</a> using the
+ <a href="../pragma.html#pragma_analysis_limit">PRAGMA analysis_limit</a> command.
+<li> Added the <a href="../bytecodevtab.html">bytecode virtual table</a>.
+<li> Add the <a href="../cksumvfs.html">checksum VFS shim</a> to the set of run-time loadable
+ extensions included in the source tree.
+<li> Added the <a href="../lang_corefunc.html#iif">iif() SQL function</a>.
+<li> INSERT and UPDATE statements now always apply <a href="../datatype3.html#affinity">column affinity</a>
+ before computing <a href="../lang_createtable.html#ckconst">CHECK constraints</a>. This bug fix could, in
+ theory, cause problems for legacy databases with unorthodox
+ CHECK constraints the require the input type for an INSERT
+ is different from the declared column type. See ticket
+ <a href="https://sqlite.org/src/info/86ba67afafded936">86ba67afafded936</a>
+ for more information.
+<li> Added the <a href="../c3ref/create_filename.html">sqlite3_create_filename()</a>, <a href="../c3ref/create_filename.html">sqlite3_free_filename()</a>,
+ and <a href="../c3ref/database_file_object.html">sqlite3_database_file_object()</a>
+ interfaces to better support of <a href="../vfs.html#shim">VFS shim</a> implementations.
+<li> Increase the <a href="../limits.html#max_variable_number">default upper bound</a>
+ on the number of <a href="../lang_expr.html#varparam">parameters</a> from 999 to 32766.
+<li> Added code for the <a href="../uintcseq.html">UINT collating sequence</a> as an optional
+ <a href="../loadext.html">loadable extension</a>.
+<li> Enhancements to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add options to the <a href="../cli.html#csv">.import</a> command: --csv, --ascii, --skip
+ <li> The <a href="../cli.html#dump">.dump</a> command now accepts multiple LIKE-pattern arguments
+ and outputs the union of all matching tables.
+ <li> Add the .oom command in debugging builds
+ <li> Add the --bom option to the <a href="../cli.html#dotexcel">.excel</a>, <a href="../cli.html#dotoutput">.output</a>, and <a href="../cli.html#dotoutput">.once</a>
+ commands.
+ <li> Enhance the .filectrl command to support the --schema option.
+ <li> The <a href="../uintcseq.html">UINT collating sequence</a> extension is automatically loaded
+ </ol>
+<li> The <a href="../lang_expr.html#like">ESCAPE</a> clause of a <a href="../lang_expr.html#like">LIKE</a> operator now overrides wildcard
+ characters, so that the behavior matches what PostgreSQL does.
+</ol>
+<p><b>Additional changes in version 3.32.1 (2020-05-25):</b></p>
+<p><ol class='lessindent'>
+<li value='11'> Fix two long-standing bugs that allow malicious SQL statements
+ to crash the process that is running SQLite. These bugs were announced
+ by a third-party approximately 24 hours after the 3.32.0 release but are
+ not specific to the 3.32.0 release.
+<li> Other minor compiler-warning fixes and whatnot.
+</ol>
+<p><b>Additional changes in version 3.32.2 (2020-06-04):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a long-standing bug in the byte-code engine that can cause a
+ <a href="../lang_transaction.html">COMMIT</a> command report as success when in fact it failed
+ to commit. Ticket
+ <a href="https://www.sqlite.org/src/info/810dc8038872e212">810dc8038872e212</a>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-06-04 12:58:43 ec02243ea6ce33b090870ae55ab8aa2534b54d216d45c4aa2fdbb00e86861e8c
+<li>SHA3-256 for sqlite3.c: f17a2a57f7eebc72d405f3b640b4a49bcd02364a9c36e04feeb145eccafa3f8d
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_32_3.html b/www/releaselog/3_32_3.html
new file mode 100644
index 0000000..8b0312d
--- /dev/null
+++ b/www/releaselog/3_32_3.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.32.3 On 2020-06-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.32.3 On 2020-06-18</h2><p><b>Changes in version 3.32.0 (2020-05-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added support for <a href="../lang_analyze.html#approx">approximate ANALYZE</a> using the
+ <a href="../pragma.html#pragma_analysis_limit">PRAGMA analysis_limit</a> command.
+<li> Added the <a href="../bytecodevtab.html">bytecode virtual table</a>.
+<li> Add the <a href="../cksumvfs.html">checksum VFS shim</a> to the set of run-time loadable
+ extensions included in the source tree.
+<li> Added the <a href="../lang_corefunc.html#iif">iif() SQL function</a>.
+<li> INSERT and UPDATE statements now always apply <a href="../datatype3.html#affinity">column affinity</a>
+ before computing <a href="../lang_createtable.html#ckconst">CHECK constraints</a>. This bug fix could, in
+ theory, cause problems for legacy databases with unorthodox
+ CHECK constraints the require the input type for an INSERT
+ is different from the declared column type. See ticket
+ <a href="https://sqlite.org/src/info/86ba67afafded936">86ba67afafded936</a>
+ for more information.
+<li> Added the <a href="../c3ref/create_filename.html">sqlite3_create_filename()</a>, <a href="../c3ref/create_filename.html">sqlite3_free_filename()</a>,
+ and <a href="../c3ref/database_file_object.html">sqlite3_database_file_object()</a>
+ interfaces to better support of <a href="../vfs.html#shim">VFS shim</a> implementations.
+<li> Increase the <a href="../limits.html#max_variable_number">default upper bound</a>
+ on the number of <a href="../lang_expr.html#varparam">parameters</a> from 999 to 32766.
+<li> Added code for the <a href="../uintcseq.html">UINT collating sequence</a> as an optional
+ <a href="../loadext.html">loadable extension</a>.
+<li> Enhancements to the <a href="../cli.html">CLI</a>:
+ <ol type="a">
+ <li> Add options to the <a href="../cli.html#csv">.import</a> command: --csv, --ascii, --skip
+ <li> The <a href="../cli.html#dump">.dump</a> command now accepts multiple LIKE-pattern arguments
+ and outputs the union of all matching tables.
+ <li> Add the .oom command in debugging builds
+ <li> Add the --bom option to the <a href="../cli.html#dotexcel">.excel</a>, <a href="../cli.html#dotoutput">.output</a>, and <a href="../cli.html#dotoutput">.once</a>
+ commands.
+ <li> Enhance the .filectrl command to support the --schema option.
+ <li> The <a href="../uintcseq.html">UINT collating sequence</a> extension is automatically loaded
+ </ol>
+<li> The <a href="../lang_expr.html#like">ESCAPE</a> clause of a <a href="../lang_expr.html#like">LIKE</a> operator now overrides wildcard
+ characters, so that the behavior matches what PostgreSQL does.
+</ol>
+<p><b>Additional changes in version 3.32.1 (2020-05-25):</b></p>
+<p><ol class='lessindent'>
+<li value='11'> Fix two long-standing bugs that allow malicious SQL statements
+ to crash the process that is running SQLite. These bugs were announced
+ by a third-party approximately 24 hours after the 3.32.0 release but are
+ not specific to the 3.32.0 release.
+<li> Other minor compiler-warning fixes and whatnot.
+</ol>
+<p><b>Additional changes in version 3.32.2 (2020-06-04):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a long-standing bug in the byte-code engine that can cause a
+ <a href="../lang_transaction.html">COMMIT</a> command report as success when in fact it failed
+ to commit. Ticket
+ <a href="https://www.sqlite.org/src/info/810dc8038872e212">810dc8038872e212</a>
+</ol>
+<p><b>Additional changes in version 3.32.3 (2020-06-18):</b></p>
+<p><ol class='lessindent'>
+<li value='14'> Various minor bug fixes including fixes for tickets
+ <a href="https://www.sqlite.org/src/info/8f157e8010b22af0">8f157e8010b22af0</a>,
+ <a href="https://www.sqlite.org/src/info/9fb26d37cefaba40">9fb26d37cefaba40</a>,
+ <a href="https://www.sqlite.org/src/info/e367f31901ea8700">e367f31901ea8700</a>,
+ <a href="https://www.sqlite.org/src/info/b706351ce2ecf59a">b706351ce2ecf59a</a>,
+ <a href="https://www.sqlite.org/src/info/7c6d876f84e6e7e2">7c6d876f84e6e7e2</a>, and
+ <a href="https://www.sqlite.org/src/info/c8d3b9f0a750a529">c8d3b9f0a750a529</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933cc8fd
+<li>SHA3-256 for sqlite3.c: b62b77ee1c561a69a71bb557694aaa5141f1714c1ff6cc1ba8aa8733c92d4f52
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_33_0.html b/www/releaselog/3_33_0.html
new file mode 100644
index 0000000..be31de5
--- /dev/null
+++ b/www/releaselog/3_33_0.html
@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.33.0 On 2020-08-14</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.33.0 On 2020-08-14</h2><p><ol class='lessindent'>
+<li> Support for <a href="../lang_update.html#upfrom">UPDATE FROM</a> following the PostgreSQL syntax.
+<li> Increase the maximum size of database files to 281 TB.
+<li> Extended the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> statement so that it can optionally be
+ limited to verifying just a single table and its indexes, rather than the
+ entire database file.
+<li> Added the <a href="../floatingpoint.html#decext">decimal extension</a> for doing arbitrary-precision decimal arithmetic.
+<li> Enhancements to the <a href="../floatingpoint.html#ieee754ext">ieee754 extension</a> for working with IEEE 754 binary64 numbers.
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Added four new <a href="../cli.html#dotmode">output modes</a>: "box", "json", "markdown",
+ and "table".
+ <li> The "column" output mode automatically expands columns to
+ contain the longest output row and automatically turns
+ ".header" on if it has not been previously set.
+ <li> The "quote" output mode honors ".separator"
+ <li> The <a href="../floatingpoint.html#decext">decimal extension</a> and the <a href="../floatingpoint.html#ieee754ext">ieee754 extension</a> are built-in to the CLI
+ </ol>
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Add the ability to find a
+ full-index-scan query plan for queries using <a href="../lang_indexedby.html">INDEXED BY</a>
+ which previously would fail with "no query solution".
+ <li> Do a better job of
+ detecting missing, incomplete, and/or dodgy <a href="../fileformat2.html#stat1tab">sqlite_stat1</a>
+ data and generates good query plans in spite of the
+ misinformation.
+ <li> Improved performance of queries like "SELECT min(x) FROM t WHERE y IN (?,?,?)"
+ assuming an index on t(x,y).
+ </ol>
+<li> In <a href="../wal.html">WAL mode</a>, if a writer crashes and leaves the <a href="../walformat.html#shm">shm file</a> in an inconsistent
+ state, subsequent transactions are now able to recover the shm file even if
+ there are active read transactions. Before this enhancement, shm file recovery
+ that scenario would result in an <a href="../rescode.html#protocol">SQLITE_PROTOCOL</a> error.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f
+<li>SHA3-256 for sqlite3.c: d00b7fffa6d33af2303430eaf394321da2960604d25a4471c7af566344f2abf9
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_34_0.html b/www/releaselog/3_34_0.html
new file mode 100644
index 0000000..00038a4
--- /dev/null
+++ b/www/releaselog/3_34_0.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.34.0 On 2020-12-01</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.34.0 On 2020-12-01</h2><p><ol class='lessindent'>
+<li> Added the <a href="../c3ref/txn_state.html">sqlite3_txn_state()</a> interface for reporting on the current
+ transaction state of the database connection.
+<li> Enhance <a href="../lang_with.html#recursivecte">recursive common table expressions</a> to support two or more
+ recursive terms as is done by SQL Server, since this helps make
+ <a href="../lang_with.html#rcex3">queries against graphs</a> easier to write and faster to execute.
+<li> Improved error messages on <a href="../lang_createtable.html#ckconst">CHECK constraint</a> failures.
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> The <a href="../cli.html#dotread">.read</a> dot-command now accepts a pipeline in addition to
+ a filename.
+ <li> Added options --data-only and --nosys to the <a href="../cli.html#dump">.dump</a> dot-command.
+ <li> Added the --nosys option to the <a href="../cli.html#dschema">.schema</a> dot-command.
+ <li> Table name quoting works correctly for the <a href="../cli.html#csv">.import</a> dot-command.
+ <li> The <a href="../series.html">generate_series(START,END,STEP)</a> table-valued function
+ extension is now built into the CLI.
+ <li> The <a href="../cli.html#dotdatabases">.databases</a> dot-command now shows the status of each database
+ file as determined by <a href="../c3ref/db_readonly.html">sqlite3_db_readonly()</a> and
+ <a href="../c3ref/txn_state.html">sqlite3_txn_state()</a>.
+ <li> Added the --tabs command-line option that sets
+ <a href="../cli.html#dotmode">.mode tabs</a>.
+ <li> The --init option reports an error if the file named as its argument
+ cannot be opened. The --init option also now honors the --bail option.
+ </ol>
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Improved estimates for the cost of running a DISTINCT operator.
+ <li> When doing an UPDATE or DELETE using a multi-column index where
+ only a few of the earlier columns of the index are useful for the
+ index lookup, postpone doing the main table seek until after all
+ WHERE clause constraints have been evaluated, in case those
+ constraints can be covered by unused later terms of the index,
+ thus avoiding unnecessary main table seeks.
+ <li> The new OP_SeekScan opcode is used to improve performance of
+ multi-column index look-ups when later columns are constrained
+ by an IN operator.
+ </ol>
+<li> The <a href="../lang_transaction.html#immediate">BEGIN IMMEDIATE</a> and <a href="../lang_transaction.html#immediate">BEGIN EXCLUSIVE</a> commands now work even
+ if one or more attached database files are read-only.
+<li> Enhanced <a href="../fts5.html">FTS5</a> to support <a href="../fts5.html#trigramidx">trigram indexes</a>.
+<li> Improved performance of <a href="../wal.html">WAL mode</a> locking primitives in cases where
+ there are hundreds of connections all accessing the same database file
+ at once.
+<li> Enhanced the <a href="../carray.html">carray() table-valued function</a> to include a single-argument
+ form that is bound using the auxiliary <a href="../carray.html#onearg">sqlite3_carray_bind()</a> interface.
+<li> The <a href="../lang_corefunc.html#substr">substr() SQL function</a> can now also be called "substring()" for
+ compatibility with SQL Server.
+<li> The <a href="../syntaxdiagrams.html">syntax diagrams</a> are now implemented as
+ <a href='https://pikchr.org/'>Pikchr</a> scripts and rendered
+ as SVG for improved legibility and ease of maintenance.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b
+<li>SHA3-256 for sqlite3.c: fbd895b0655a337b2cd657675f314188a4e9fe614444cc63dfeb3f066f674514
+
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_34_1.html b/www/releaselog/3_34_1.html
new file mode 100644
index 0000000..0ba14df
--- /dev/null
+++ b/www/releaselog/3_34_1.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.34.1 On 2021-01-20</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.34.1 On 2021-01-20</h2><p><b>Changes in version 3.34.0 (2020-12-01):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added the <a href="../c3ref/txn_state.html">sqlite3_txn_state()</a> interface for reporting on the current
+ transaction state of the database connection.
+<li> Enhance <a href="../lang_with.html#recursivecte">recursive common table expressions</a> to support two or more
+ recursive terms as is done by SQL Server, since this helps make
+ <a href="../lang_with.html#rcex3">queries against graphs</a> easier to write and faster to execute.
+<li> Improved error messages on <a href="../lang_createtable.html#ckconst">CHECK constraint</a> failures.
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> The <a href="../cli.html#dotread">.read</a> dot-command now accepts a pipeline in addition to
+ a filename.
+ <li> Added options --data-only and --nosys to the <a href="../cli.html#dump">.dump</a> dot-command.
+ <li> Added the --nosys option to the <a href="../cli.html#dschema">.schema</a> dot-command.
+ <li> Table name quoting works correctly for the <a href="../cli.html#csv">.import</a> dot-command.
+ <li> The <a href="../series.html">generate_series(START,END,STEP)</a> table-valued function
+ extension is now built into the CLI.
+ <li> The <a href="../cli.html#dotdatabases">.databases</a> dot-command now shows the status of each database
+ file as determined by <a href="../c3ref/db_readonly.html">sqlite3_db_readonly()</a> and
+ <a href="../c3ref/txn_state.html">sqlite3_txn_state()</a>.
+ <li> Added the --tabs command-line option that sets
+ <a href="../cli.html#dotmode">.mode tabs</a>.
+ <li> The --init option reports an error if the file named as its argument
+ cannot be opened. The --init option also now honors the --bail option.
+ </ol>
+<li> Query planner improvements:
+ <ol type="a">
+ <li> Improved estimates for the cost of running a DISTINCT operator.
+ <li> When doing an UPDATE or DELETE using a multi-column index where
+ only a few of the earlier columns of the index are useful for the
+ index lookup, postpone doing the main table seek until after all
+ WHERE clause constraints have been evaluated, in case those
+ constraints can be covered by unused later terms of the index,
+ thus avoiding unnecessary main table seeks.
+ <li> The new OP_SeekScan opcode is used to improve performance of
+ multi-column index look-ups when later columns are constrained
+ by an IN operator.
+ </ol>
+<li> The <a href="../lang_transaction.html#immediate">BEGIN IMMEDIATE</a> and <a href="../lang_transaction.html#immediate">BEGIN EXCLUSIVE</a> commands now work even
+ if one or more attached database files are read-only.
+<li> Enhanced <a href="../fts5.html">FTS5</a> to support <a href="../fts5.html#trigramidx">trigram indexes</a>.
+<li> Improved performance of <a href="../wal.html">WAL mode</a> locking primitives in cases where
+ there are hundreds of connections all accessing the same database file
+ at once.
+<li> Enhanced the <a href="../carray.html">carray() table-valued function</a> to include a single-argument
+ form that is bound using the auxiliary <a href="../carray.html#onearg">sqlite3_carray_bind()</a> interface.
+<li> The <a href="../lang_corefunc.html#substr">substr() SQL function</a> can now also be called "substring()" for
+ compatibility with SQL Server.
+<li> The <a href="../syntaxdiagrams.html">syntax diagrams</a> are now implemented as
+ <a href='https://pikchr.org/'>Pikchr</a> scripts and rendered
+ as SVG for improved legibility and ease of maintenance.
+</ol>
+<p><b>Additional changes in version 3.34.1 (2021-01-20):</b></p>
+<p><ol class='lessindent'>
+<li value='12'> Fix a potential use-after-free bug when processing a a subquery with both
+ a correlated WHERE clause and a "HAVING 0" clause and where the parent
+ query is an aggregate.
+<li> Fix documentation typos
+<li> Fix minor problems in extensions.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-01-20 14:10:07 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
+<li>SHA3-256 for sqlite3.c: 799a7be90651fc7296113b641a70b028c142d767b25af1d0a78f93dcf1a2bf20
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_35_0.html b/www/releaselog/3_35_0.html
new file mode 100644
index 0000000..dc3a98c
--- /dev/null
+++ b/www/releaselog/3_35_0.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.35.0 On 2021-03-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.35.0 On 2021-03-12</h2><p><ol class='lessindent'>
+<li> Added <a href="../lang_mathfunc.html">built-in SQL math functions()</a>. (Requires the
+ <a href="../compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> compile-time option.)
+<li> Added support for <a href="../lang_altertable.html#altertabdropcol">ALTER TABLE DROP COLUMN</a>.
+<li> Generalize <a href="../lang_upsert.html">UPSERT</a>:
+ <ol type="a">
+ <li> Allow multiple ON CONFLICT clauses that are evaluated in order,
+ <li> The final ON CONFLICT clause may omit the conflict target and
+ yet still use DO UPDATE.
+ </ol>
+<li> Add support for the <a href="../lang_returning.html">RETURNING</a> clause on <a href="../lang_delete.html">DELETE</a>, <a href="../lang_insert.html">INSERT</a>, and
+ <a href="../lang_update.html">UPDATE</a> statements.
+<li> Use less memory when running <a href="../lang_vacuum.html">VACUUM</a> on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+<li> Add support for the <a href="../lang_with.html#mathint">MATERIALIZED</a> and <a href="../lang_with.html#mathint">NOT MATERIALIZED</a> hints when
+ specifying <a href="../lang_with.html">common table expressions</a>. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a> and <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a>
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+<li> Query planner/optimizer improvements:
+ <ol type="a">
+ <li> Enhancements to the <a href="../optoverview.html#minmax">min/max optimization</a> so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+ <li> Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+ <li> Allow UNION ALL sub-queries to be <a href="../optoverview.html#flattening">flattened</a> even if the parent query is a join.
+ <li> Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+ <li> Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+ <li> Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+ <li> Allow WHERE terms to be <a href="../optoverview.html#pushdown">pushed down</a> into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+ <li> Add the ".filectrl data_version" command.
+ <li> Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+ </ol>
+<li> Bug fixes:
+ <ol type="a">
+ <li> Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+ <li> Fix a <a href="https://www.sqlite.org/src/info/ee51301f316c09e9">bug in the IN-operator optimization</a>
+ of version 3.33.0 that can cause an incorrect answer.
+ <li> Fix incorrect answers from the <a href="../lang_expr.html#like">LIKE operator</a> if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+ </ol>
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-12 15:10:09 acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
+<li>SHA3-256 for sqlite3.c: 73a740d881735bef9de7f7bce8c9e6b9e57fe3e77fa7d76a6e8fc5c262fbaedf
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_35_1.html b/www/releaselog/3_35_1.html
new file mode 100644
index 0000000..b22377a
--- /dev/null
+++ b/www/releaselog/3_35_1.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.35.1 On 2021-03-15</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.35.1 On 2021-03-15</h2><p><b>Changes in version 3.35.0 (2021-03-12):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added <a href="../lang_mathfunc.html">built-in SQL math functions()</a>. (Requires the
+ <a href="../compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> compile-time option.)
+<li> Added support for <a href="../lang_altertable.html#altertabdropcol">ALTER TABLE DROP COLUMN</a>.
+<li> Generalize <a href="../lang_upsert.html">UPSERT</a>:
+ <ol type="a">
+ <li> Allow multiple ON CONFLICT clauses that are evaluated in order,
+ <li> The final ON CONFLICT clause may omit the conflict target and
+ yet still use DO UPDATE.
+ </ol>
+<li> Add support for the <a href="../lang_returning.html">RETURNING</a> clause on <a href="../lang_delete.html">DELETE</a>, <a href="../lang_insert.html">INSERT</a>, and
+ <a href="../lang_update.html">UPDATE</a> statements.
+<li> Use less memory when running <a href="../lang_vacuum.html">VACUUM</a> on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+<li> Add support for the <a href="../lang_with.html#mathint">MATERIALIZED</a> and <a href="../lang_with.html#mathint">NOT MATERIALIZED</a> hints when
+ specifying <a href="../lang_with.html">common table expressions</a>. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a> and <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a>
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+<li> Query planner/optimizer improvements:
+ <ol type="a">
+ <li> Enhancements to the <a href="../optoverview.html#minmax">min/max optimization</a> so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+ <li> Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+ <li> Allow UNION ALL sub-queries to be <a href="../optoverview.html#flattening">flattened</a> even if the parent query is a join.
+ <li> Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+ <li> Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+ <li> Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+ <li> Allow WHERE terms to be <a href="../optoverview.html#pushdown">pushed down</a> into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+ <li> Add the ".filectrl data_version" command.
+ <li> Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+ </ol>
+<li> Bug fixes:
+ <ol type="a">
+ <li> Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+ <li> Fix a <a href="https://www.sqlite.org/src/info/ee51301f316c09e9">bug in the IN-operator optimization</a>
+ of version 3.33.0 that can cause an incorrect answer.
+ <li> Fix incorrect answers from the <a href="../lang_expr.html#like">LIKE operator</a> if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+ </ol>
+</ol>
+<p><b>Additional changes in version 3.35.1 (2021-03-15):</b></p>
+<p><ol class='lessindent'>
+<li value='11'> Fix <a href="https://www.sqlite.org/src/info/1c24a659e6d7f3a1">a bug</a> in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+<li> Improve the built-in documentation for the <a href="../cli.html#dump">.dump</a> command in the <a href="../cli.html">CLI</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-15 16:53:57 aea12399bf1fdc76af43499d4624c3afa17c3e6c2459b71c195804bb98def66a
+<li>SHA3-256 for sqlite3.c: fc79e27fd030226c07691b7d7c23aa81c8d46bc3bef5af39060e1507c82b0523
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_35_2.html b/www/releaselog/3_35_2.html
new file mode 100644
index 0000000..e26528f
--- /dev/null
+++ b/www/releaselog/3_35_2.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.35.2 On 2021-03-17</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.35.2 On 2021-03-17</h2><p><b>Changes in version 3.35.0 (2021-03-12):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added <a href="../lang_mathfunc.html">built-in SQL math functions()</a>. (Requires the
+ <a href="../compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> compile-time option.)
+<li> Added support for <a href="../lang_altertable.html#altertabdropcol">ALTER TABLE DROP COLUMN</a>.
+<li> Generalize <a href="../lang_upsert.html">UPSERT</a>:
+ <ol type="a">
+ <li> Allow multiple ON CONFLICT clauses that are evaluated in order,
+ <li> The final ON CONFLICT clause may omit the conflict target and
+ yet still use DO UPDATE.
+ </ol>
+<li> Add support for the <a href="../lang_returning.html">RETURNING</a> clause on <a href="../lang_delete.html">DELETE</a>, <a href="../lang_insert.html">INSERT</a>, and
+ <a href="../lang_update.html">UPDATE</a> statements.
+<li> Use less memory when running <a href="../lang_vacuum.html">VACUUM</a> on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+<li> Add support for the <a href="../lang_with.html#mathint">MATERIALIZED</a> and <a href="../lang_with.html#mathint">NOT MATERIALIZED</a> hints when
+ specifying <a href="../lang_with.html">common table expressions</a>. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a> and <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a>
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+<li> Query planner/optimizer improvements:
+ <ol type="a">
+ <li> Enhancements to the <a href="../optoverview.html#minmax">min/max optimization</a> so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+ <li> Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+ <li> Allow UNION ALL sub-queries to be <a href="../optoverview.html#flattening">flattened</a> even if the parent query is a join.
+ <li> Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+ <li> Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+ <li> Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+ <li> Allow WHERE terms to be <a href="../optoverview.html#pushdown">pushed down</a> into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+ <li> Add the ".filectrl data_version" command.
+ <li> Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+ </ol>
+<li> Bug fixes:
+ <ol type="a">
+ <li> Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+ <li> Fix a <a href="https://www.sqlite.org/src/info/ee51301f316c09e9">bug in the IN-operator optimization</a>
+ of version 3.33.0 that can cause an incorrect answer.
+ <li> Fix incorrect answers from the <a href="../lang_expr.html#like">LIKE operator</a> if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+ </ol>
+</ol>
+<p><b>Additional changes in version 3.35.1 (2021-03-15):</b></p>
+<p><ol class='lessindent'>
+<li value='11'> Fix <a href="https://www.sqlite.org/src/info/1c24a659e6d7f3a1">a bug</a> in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+<li> Improve the built-in documentation for the <a href="../cli.html#dump">.dump</a> command in the <a href="../cli.html">CLI</a>.
+</ol>
+<p><b>Additional changes in version 3.35.2 (2021-03-17):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a problem in the
+ <a href="http://www.sqlite.org/src/file/ext/misc/appendvfs.c">appendvfs.c</a>
+ extension that was introduced into version 3.35.0.
+<li> Ensure that date/time functions with no arguments (which generate
+ responses that depend on the current time) are treated as
+ <a href="../deterministic.html">non-deterministic functions</a>. Ticket
+ <a href="https://sqlite.org/src/info/2c6c8689fb5f3d2f">2c6c8689fb5f3d2f</a>
+<li> Fix a problem in the <a href="../sqldiff.html">sqldiff</a> utility program having to do with
+ unusual whitespace characters in a <a href="../vtab.html">virtual table</a> definition.
+<li> Limit the new UNION ALL optimization described by item 8c in the
+ 3.35.0 release so that it does not try to make too many new subqueries.
+ See <a href="https://sqlite.org/forum/forumpost/140a67d3d2">forum thread 140a67d3d2</a>
+ for details.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-17 19:07:21 ea80f3002f4120f5dcee76e8779dfdc88e1e096c5cdd06904c20fd26d50c3827
+<li>SHA3-256 for sqlite3.c: e8edc7b1512a2e050d548d0840bec6eef83cc297af1426c34c0ee8720f378a11
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_35_3.html b/www/releaselog/3_35_3.html
new file mode 100644
index 0000000..96b6042
--- /dev/null
+++ b/www/releaselog/3_35_3.html
@@ -0,0 +1,246 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.35.3 On 2021-03-26</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.35.3 On 2021-03-26</h2><p><b>Changes in version 3.35.0 (2021-03-12):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added <a href="../lang_mathfunc.html">built-in SQL math functions()</a>. (Requires the
+ <a href="../compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> compile-time option.)
+<li> Added support for <a href="../lang_altertable.html#altertabdropcol">ALTER TABLE DROP COLUMN</a>.
+<li> Generalize <a href="../lang_upsert.html">UPSERT</a>:
+ <ol type="a">
+ <li> Allow multiple ON CONFLICT clauses that are evaluated in order,
+ <li> The final ON CONFLICT clause may omit the conflict target and
+ yet still use DO UPDATE.
+ </ol>
+<li> Add support for the <a href="../lang_returning.html">RETURNING</a> clause on <a href="../lang_delete.html">DELETE</a>, <a href="../lang_insert.html">INSERT</a>, and
+ <a href="../lang_update.html">UPDATE</a> statements.
+<li> Use less memory when running <a href="../lang_vacuum.html">VACUUM</a> on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+<li> Add support for the <a href="../lang_with.html#mathint">MATERIALIZED</a> and <a href="../lang_with.html#mathint">NOT MATERIALIZED</a> hints when
+ specifying <a href="../lang_with.html">common table expressions</a>. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a> and <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a>
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+<li> Query planner/optimizer improvements:
+ <ol type="a">
+ <li> Enhancements to the <a href="../optoverview.html#minmax">min/max optimization</a> so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+ <li> Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+ <li> Allow UNION ALL sub-queries to be <a href="../optoverview.html#flattening">flattened</a> even if the parent query is a join.
+ <li> Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+ <li> Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+ <li> Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+ <li> Allow WHERE terms to be <a href="../optoverview.html#pushdown">pushed down</a> into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+ <li> Add the ".filectrl data_version" command.
+ <li> Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+ </ol>
+<li> Bug fixes:
+ <ol type="a">
+ <li> Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+ <li> Fix a <a href="https://www.sqlite.org/src/info/ee51301f316c09e9">bug in the IN-operator optimization</a>
+ of version 3.33.0 that can cause an incorrect answer.
+ <li> Fix incorrect answers from the <a href="../lang_expr.html#like">LIKE operator</a> if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+ </ol>
+</ol>
+<p><b>Additional changes in version 3.35.1 (2021-03-15):</b></p>
+<p><ol class='lessindent'>
+<li value='11'> Fix <a href="https://www.sqlite.org/src/info/1c24a659e6d7f3a1">a bug</a> in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+<li> Improve the built-in documentation for the <a href="../cli.html#dump">.dump</a> command in the <a href="../cli.html">CLI</a>.
+</ol>
+<p><b>Additional changes in version 3.35.2 (2021-03-17):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a problem in the
+ <a href="http://www.sqlite.org/src/file/ext/misc/appendvfs.c">appendvfs.c</a>
+ extension that was introduced into version 3.35.0.
+<li> Ensure that date/time functions with no arguments (which generate
+ responses that depend on the current time) are treated as
+ <a href="../deterministic.html">non-deterministic functions</a>. Ticket
+ <a href="https://sqlite.org/src/info/2c6c8689fb5f3d2f">2c6c8689fb5f3d2f</a>
+<li> Fix a problem in the <a href="../sqldiff.html">sqldiff</a> utility program having to do with
+ unusual whitespace characters in a <a href="../vtab.html">virtual table</a> definition.
+<li> Limit the new UNION ALL optimization described by item 8c in the
+ 3.35.0 release so that it does not try to make too many new subqueries.
+ See <a href="https://sqlite.org/forum/forumpost/140a67d3d2">forum thread 140a67d3d2</a>
+ for details.
+</ol>
+<p><b>Additional changes in version 3.35.3 (2021-03-26):</b></p>
+<p><ol class='lessindent'>
+<li value='17'> Enhance the OP_OpenDup opcode of the <a href="../opcode.html">bytecode engine</a> so that it works even if the
+ cursor being duplicated itself came from OP_OpenDup. Fix for
+ <a href="https://www.sqlite.org/src/info/bb8a9fd4a9b7fce5">ticket bb8a9fd4a9b7fce5</a>.
+ This problem only came to light due to the recent MATERIALIZED hint enhancement.
+<li> When materializing correlated <a href="../lang_with.html">common table expressions</a>, do so separately for each
+ use case, as that is required for correctness. This fixes a problem that was
+ introduced by the MATERIALIZED hint enhancement.
+<li> Fix a problem in the filename normalizer of the unix <a href="../vfs.html">VFS</a>.
+<li> Fix the <a href="../cli.html#dotmode">"box" output mode</a> in the <a href="../cli.html">CLI</a> so that it works with statements that
+ returns one or more rows of zero columns (such as <a href="../pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>).
+ <a href="https://sqlite.org/forum/forumpost/afbbcb5b72">Forum post afbbcb5b72</a>.
+<li> Improvements to error messages generated by faulty common table expressions.
+ <a href="https://sqlite.org/forum/forumpost/aa5a0431c99e631">Forum post aa5a0431c99e</a>.
+<li> Fix some incorrect assert() statements.
+<li> Fix to the <a href="../syntax/select-stmt.html">SELECT statement syntax diagram</a> so that the FROM clause
+ syntax is shown correctly.
+ <a href="https://sqlite.org/forum/forumpost/9ed02582fe">Forum post 9ed02582fe</a>.
+<li> Fix the EBCDIC character classifier so that it understands newlines as whitespace.
+ <a href="https://sqlite.org/forum/forumpost/58540ce22dcd5fdcd">Forum post 58540ce22dcd</a>.
+<li> Improvements the <a href="../vtab.html#xbestindex">xBestIndex</a> method in the implementation of the
+ (unsupported) <a href="https://sqlite.org/src/file/ext/misc/wholenumber.c">wholenumber virtual table</a>
+ extension so that it does a better job of convincing the query planner to
+ avoid trying to materialize a table with an infinite number of rows.
+ <a href="https://sqlite.org/forum/forumpost/b52a020ce4">Forum post b52a020ce4</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-03-26 12:12:52 4c5e6c200adc8afe0814936c67a971efc516d1bd739cb620235592f18f40be2a
+<li>SHA3-256 for sqlite3.c: 91ca6c0a30ebfdba4420bb35f4fd9149d13e45fc853d86ad7527db363e282683
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_35_4.html b/www/releaselog/3_35_4.html
new file mode 100644
index 0000000..2d8770c
--- /dev/null
+++ b/www/releaselog/3_35_4.html
@@ -0,0 +1,259 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.35.4 On 2021-04-02</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.35.4 On 2021-04-02</h2><p><b>Changes in version 3.35.0 (2021-03-12):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added <a href="../lang_mathfunc.html">built-in SQL math functions()</a>. (Requires the
+ <a href="../compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> compile-time option.)
+<li> Added support for <a href="../lang_altertable.html#altertabdropcol">ALTER TABLE DROP COLUMN</a>.
+<li> Generalize <a href="../lang_upsert.html">UPSERT</a>:
+ <ol type="a">
+ <li> Allow multiple ON CONFLICT clauses that are evaluated in order,
+ <li> The final ON CONFLICT clause may omit the conflict target and
+ yet still use DO UPDATE.
+ </ol>
+<li> Add support for the <a href="../lang_returning.html">RETURNING</a> clause on <a href="../lang_delete.html">DELETE</a>, <a href="../lang_insert.html">INSERT</a>, and
+ <a href="../lang_update.html">UPDATE</a> statements.
+<li> Use less memory when running <a href="../lang_vacuum.html">VACUUM</a> on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+<li> Add support for the <a href="../lang_with.html#mathint">MATERIALIZED</a> and <a href="../lang_with.html#mathint">NOT MATERIALIZED</a> hints when
+ specifying <a href="../lang_with.html">common table expressions</a>. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a> and <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a>
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+<li> Query planner/optimizer improvements:
+ <ol type="a">
+ <li> Enhancements to the <a href="../optoverview.html#minmax">min/max optimization</a> so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+ <li> Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+ <li> Allow UNION ALL sub-queries to be <a href="../optoverview.html#flattening">flattened</a> even if the parent query is a join.
+ <li> Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+ <li> Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+ <li> Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+ <li> Allow WHERE terms to be <a href="../optoverview.html#pushdown">pushed down</a> into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+ <li> Add the ".filectrl data_version" command.
+ <li> Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+ </ol>
+<li> Bug fixes:
+ <ol type="a">
+ <li> Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+ <li> Fix a <a href="https://www.sqlite.org/src/info/ee51301f316c09e9">bug in the IN-operator optimization</a>
+ of version 3.33.0 that can cause an incorrect answer.
+ <li> Fix incorrect answers from the <a href="../lang_expr.html#like">LIKE operator</a> if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+ </ol>
+</ol>
+<p><b>Additional changes in version 3.35.1 (2021-03-15):</b></p>
+<p><ol class='lessindent'>
+<li value='11'> Fix <a href="https://www.sqlite.org/src/info/1c24a659e6d7f3a1">a bug</a> in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+<li> Improve the built-in documentation for the <a href="../cli.html#dump">.dump</a> command in the <a href="../cli.html">CLI</a>.
+</ol>
+<p><b>Additional changes in version 3.35.2 (2021-03-17):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a problem in the
+ <a href="http://www.sqlite.org/src/file/ext/misc/appendvfs.c">appendvfs.c</a>
+ extension that was introduced into version 3.35.0.
+<li> Ensure that date/time functions with no arguments (which generate
+ responses that depend on the current time) are treated as
+ <a href="../deterministic.html">non-deterministic functions</a>. Ticket
+ <a href="https://sqlite.org/src/info/2c6c8689fb5f3d2f">2c6c8689fb5f3d2f</a>
+<li> Fix a problem in the <a href="../sqldiff.html">sqldiff</a> utility program having to do with
+ unusual whitespace characters in a <a href="../vtab.html">virtual table</a> definition.
+<li> Limit the new UNION ALL optimization described by item 8c in the
+ 3.35.0 release so that it does not try to make too many new subqueries.
+ See <a href="https://sqlite.org/forum/forumpost/140a67d3d2">forum thread 140a67d3d2</a>
+ for details.
+</ol>
+<p><b>Additional changes in version 3.35.3 (2021-03-26):</b></p>
+<p><ol class='lessindent'>
+<li value='17'> Enhance the OP_OpenDup opcode of the <a href="../opcode.html">bytecode engine</a> so that it works even if the
+ cursor being duplicated itself came from OP_OpenDup. Fix for
+ <a href="https://www.sqlite.org/src/info/bb8a9fd4a9b7fce5">ticket bb8a9fd4a9b7fce5</a>.
+ This problem only came to light due to the recent MATERIALIZED hint enhancement.
+<li> When materializing correlated <a href="../lang_with.html">common table expressions</a>, do so separately for each
+ use case, as that is required for correctness. This fixes a problem that was
+ introduced by the MATERIALIZED hint enhancement.
+<li> Fix a problem in the filename normalizer of the unix <a href="../vfs.html">VFS</a>.
+<li> Fix the <a href="../cli.html#dotmode">"box" output mode</a> in the <a href="../cli.html">CLI</a> so that it works with statements that
+ returns one or more rows of zero columns (such as <a href="../pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>).
+ <a href="https://sqlite.org/forum/forumpost/afbbcb5b72">Forum post afbbcb5b72</a>.
+<li> Improvements to error messages generated by faulty common table expressions.
+ <a href="https://sqlite.org/forum/forumpost/aa5a0431c99e631">Forum post aa5a0431c99e</a>.
+<li> Fix some incorrect assert() statements.
+<li> Fix to the <a href="../syntax/select-stmt.html">SELECT statement syntax diagram</a> so that the FROM clause
+ syntax is shown correctly.
+ <a href="https://sqlite.org/forum/forumpost/9ed02582fe">Forum post 9ed02582fe</a>.
+<li> Fix the EBCDIC character classifier so that it understands newlines as whitespace.
+ <a href="https://sqlite.org/forum/forumpost/58540ce22dcd5fdcd">Forum post 58540ce22dcd</a>.
+<li> Improvements the <a href="../vtab.html#xbestindex">xBestIndex</a> method in the implementation of the
+ (unsupported) <a href="https://sqlite.org/src/file/ext/misc/wholenumber.c">wholenumber virtual table</a>
+ extension so that it does a better job of convincing the query planner to
+ avoid trying to materialize a table with an infinite number of rows.
+ <a href="https://sqlite.org/forum/forumpost/b52a020ce4">Forum post b52a020ce4</a>.
+</ol>
+<p><b>Additional changes in version 3.35.4 (2021-04-02):</b></p>
+<p><ol class='lessindent'>
+<li value='26'> Fix a defect in the query planner optimization identified by
+ item 8b above. Ticket
+ <a href="https://sqlite.org/src/info/de7db14784a08053">de7db14784a08053</a>.
+<li> Fix a defect in the new <a href="../lang_returning.html">RETURNING</a> syntax. Ticket
+ <a href="https://sqlite.org/src/info/132994c8b1063bfb">132994c8b1063bfb</a>.
+<li> Fix the new <a href="../lang_returning.html">RETURNING</a> feature so that it raises an error if one of
+ the terms in the RETURNING clause references a unknown table, instead
+ of silently ignoring that error.
+<li> Fix an assertion associated with aggregate function processing that
+ was incorrectly triggered by the <a href="../optoverview.html#pushdown">push-down optimization</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-04-02 15:20:15 5d4c65779dab868b285519b19e4cf9d451d50c6048f06f653aa701ec212df45e
+<li>SHA3-256 for sqlite3.c: 528b8a26bf5ffd4c7b4647b5b799f86e8fb1a075f715b87a414e94fba3d09dbe
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_35_5.html b/www/releaselog/3_35_5.html
new file mode 100644
index 0000000..0cc0495
--- /dev/null
+++ b/www/releaselog/3_35_5.html
@@ -0,0 +1,266 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.35.5 On 2021-04-19</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.35.5 On 2021-04-19</h2><p><b>Changes in version 3.35.0 (2021-03-12):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added <a href="../lang_mathfunc.html">built-in SQL math functions()</a>. (Requires the
+ <a href="../compile.html#enable_math_functions">-DSQLITE_ENABLE_MATH_FUNCTIONS</a> compile-time option.)
+<li> Added support for <a href="../lang_altertable.html#altertabdropcol">ALTER TABLE DROP COLUMN</a>.
+<li> Generalize <a href="../lang_upsert.html">UPSERT</a>:
+ <ol type="a">
+ <li> Allow multiple ON CONFLICT clauses that are evaluated in order,
+ <li> The final ON CONFLICT clause may omit the conflict target and
+ yet still use DO UPDATE.
+ </ol>
+<li> Add support for the <a href="../lang_returning.html">RETURNING</a> clause on <a href="../lang_delete.html">DELETE</a>, <a href="../lang_insert.html">INSERT</a>, and
+ <a href="../lang_update.html">UPDATE</a> statements.
+<li> Use less memory when running <a href="../lang_vacuum.html">VACUUM</a> on databases containing very large
+ TEXT or BLOB values. It is no longer necessary to hold the entire TEXT
+ or BLOB in memory all at once.
+<li> Add support for the <a href="../lang_with.html#mathint">MATERIALIZED</a> and <a href="../lang_with.html#mathint">NOT MATERIALIZED</a> hints when
+ specifying <a href="../lang_with.html">common table expressions</a>. The default behavior was
+ formerly NOT MATERIALIZED, but is now changed to MATERIALIZED for
+ CTEs that are used more than once.
+<li> The <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a> and <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a>
+ settings are modified so that they only control triggers and views
+ in the main database schema or in attached database schemas and not in
+ the TEMP schema. TEMP triggers and views are always allowed.
+<li> Query planner/optimizer improvements:
+ <ol type="a">
+ <li> Enhancements to the <a href="../optoverview.html#minmax">min/max optimization</a> so that it works better
+ with the IN operator and the OP_SeekScan optimization of the
+ previous release.
+ <li> Attempt to process EXISTS operators in the WHERE clause as if
+ they were IN operators, in cases where this is a valid transformation
+ and seems likely to improve performance.
+ <li> Allow UNION ALL sub-queries to be <a href="../optoverview.html#flattening">flattened</a> even if the parent query is a join.
+ <li> Use an index, if appropriate, on IS NOT NULL expressions in the WHERE clause,
+ even if STAT4 is disabled.
+ <li> Expressions of the form "x IS NULL" or "x IS NOT NULL" might be converted to simply
+ FALSE or TRUE, if "x" is a column that has a "NOT NULL" constraint and is not
+ involved in an outer join.
+ <li> Avoid checking foreign key constraints on an UPDATE statement if the UPDATE does
+ not modify any columns associated with the foreign key.
+ <li> Allow WHERE terms to be <a href="../optoverview.html#pushdown">pushed down</a> into sub-queries
+ that contain window functions,
+ as long as the WHERE term is made up of entirely of constants and copies of expressions
+ found in the PARTITION BY clauses of all window functions in the sub-query.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Enhance the ".stats" command to accept new arguments "stmt" and
+ "vmstep", causing prepare statement statistics and only the
+ virtual-machine step count to be shown, respectively.
+ <li> Add the ".filectrl data_version" command.
+ <li> Enhance the ".once" and ".output" commands so that if the destination argument
+ begins with "|" (indicating that output is redirected into a pipe) then the
+ argument does not need to be quoted.
+ </ol>
+<li> Bug fixes:
+ <ol type="a">
+ <li> Fix a potential NULL pointer dereference when processing a
+ syntactically incorrect SELECT statement with a correlated WHERE
+ clause and a "HAVING 0" clause. (Also fixed in the 3.34.1 patch release.)
+ <li> Fix a <a href="https://www.sqlite.org/src/info/ee51301f316c09e9">bug in the IN-operator optimization</a>
+ of version 3.33.0 that can cause an incorrect answer.
+ <li> Fix incorrect answers from the <a href="../lang_expr.html#like">LIKE operator</a> if the pattern ends with "%" and there
+ is an "ESCAPE '_'" clause.
+ </ol>
+</ol>
+<p><b>Additional changes in version 3.35.1 (2021-03-15):</b></p>
+<p><ol class='lessindent'>
+<li value='11'> Fix <a href="https://www.sqlite.org/src/info/1c24a659e6d7f3a1">a bug</a> in the new DROP COLUMN
+ feature when used on columns that are indexed and that are quoted in the index
+ definition.
+<li> Improve the built-in documentation for the <a href="../cli.html#dump">.dump</a> command in the <a href="../cli.html">CLI</a>.
+</ol>
+<p><b>Additional changes in version 3.35.2 (2021-03-17):</b></p>
+<p><ol class='lessindent'>
+<li value='13'> Fix a problem in the
+ <a href="http://www.sqlite.org/src/file/ext/misc/appendvfs.c">appendvfs.c</a>
+ extension that was introduced into version 3.35.0.
+<li> Ensure that date/time functions with no arguments (which generate
+ responses that depend on the current time) are treated as
+ <a href="../deterministic.html">non-deterministic functions</a>. Ticket
+ <a href="https://sqlite.org/src/info/2c6c8689fb5f3d2f">2c6c8689fb5f3d2f</a>
+<li> Fix a problem in the <a href="../sqldiff.html">sqldiff</a> utility program having to do with
+ unusual whitespace characters in a <a href="../vtab.html">virtual table</a> definition.
+<li> Limit the new UNION ALL optimization described by item 8c in the
+ 3.35.0 release so that it does not try to make too many new subqueries.
+ See <a href="https://sqlite.org/forum/forumpost/140a67d3d2">forum thread 140a67d3d2</a>
+ for details.
+</ol>
+<p><b>Additional changes in version 3.35.3 (2021-03-26):</b></p>
+<p><ol class='lessindent'>
+<li value='17'> Enhance the OP_OpenDup opcode of the <a href="../opcode.html">bytecode engine</a> so that it works even if the
+ cursor being duplicated itself came from OP_OpenDup. Fix for
+ <a href="https://www.sqlite.org/src/info/bb8a9fd4a9b7fce5">ticket bb8a9fd4a9b7fce5</a>.
+ This problem only came to light due to the recent MATERIALIZED hint enhancement.
+<li> When materializing correlated <a href="../lang_with.html">common table expressions</a>, do so separately for each
+ use case, as that is required for correctness. This fixes a problem that was
+ introduced by the MATERIALIZED hint enhancement.
+<li> Fix a problem in the filename normalizer of the unix <a href="../vfs.html">VFS</a>.
+<li> Fix the <a href="../cli.html#dotmode">"box" output mode</a> in the <a href="../cli.html">CLI</a> so that it works with statements that
+ returns one or more rows of zero columns (such as <a href="../pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>).
+ <a href="https://sqlite.org/forum/forumpost/afbbcb5b72">Forum post afbbcb5b72</a>.
+<li> Improvements to error messages generated by faulty common table expressions.
+ <a href="https://sqlite.org/forum/forumpost/aa5a0431c99e631">Forum post aa5a0431c99e</a>.
+<li> Fix some incorrect assert() statements.
+<li> Fix to the <a href="../syntax/select-stmt.html">SELECT statement syntax diagram</a> so that the FROM clause
+ syntax is shown correctly.
+ <a href="https://sqlite.org/forum/forumpost/9ed02582fe">Forum post 9ed02582fe</a>.
+<li> Fix the EBCDIC character classifier so that it understands newlines as whitespace.
+ <a href="https://sqlite.org/forum/forumpost/58540ce22dcd5fdcd">Forum post 58540ce22dcd</a>.
+<li> Improvements the <a href="../vtab.html#xbestindex">xBestIndex</a> method in the implementation of the
+ (unsupported) <a href="https://sqlite.org/src/file/ext/misc/wholenumber.c">wholenumber virtual table</a>
+ extension so that it does a better job of convincing the query planner to
+ avoid trying to materialize a table with an infinite number of rows.
+ <a href="https://sqlite.org/forum/forumpost/b52a020ce4">Forum post b52a020ce4</a>.
+</ol>
+<p><b>Additional changes in version 3.35.4 (2021-04-02):</b></p>
+<p><ol class='lessindent'>
+<li value='26'> Fix a defect in the query planner optimization identified by
+ item 8b above. Ticket
+ <a href="https://sqlite.org/src/info/de7db14784a08053">de7db14784a08053</a>.
+<li> Fix a defect in the new <a href="../lang_returning.html">RETURNING</a> syntax. Ticket
+ <a href="https://sqlite.org/src/info/132994c8b1063bfb">132994c8b1063bfb</a>.
+<li> Fix the new <a href="../lang_returning.html">RETURNING</a> feature so that it raises an error if one of
+ the terms in the RETURNING clause references a unknown table, instead
+ of silently ignoring that error.
+<li> Fix an assertion associated with aggregate function processing that
+ was incorrectly triggered by the <a href="../optoverview.html#pushdown">push-down optimization</a>.
+</ol>
+<p><b>Additional changes in version 3.35.5 (2021-04-19):</b></p>
+<p><ol class='lessindent'>
+<li value='30'> Fix defects in the new ALTER TABLE DROP COLUMN feature that could
+ corrupt the database file.
+<li> Fix an obscure query optimizer problem that might cause an incorrect
+ query result.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-04-19 18:32:05 1b256d97b553a9611efca188a3d995a2fff712759044ba480f9a0c9e98fae886
+<li>SHA3-256 for sqlite3.c: e42291343e8f03940e57fffcf1631e7921013b94419c2f943e816d3edf4e1bbe
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_36_0.html b/www/releaselog/3_36_0.html
new file mode 100644
index 0000000..b184a88
--- /dev/null
+++ b/www/releaselog/3_36_0.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.36.0 On 2021-06-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.36.0 On 2021-06-18</h2><p><ol class='lessindent'>
+<li> Improvement to the <a href="../eqp.html">EXPLAIN QUERY PLAN</a> output to make it easier to
+ understand.
+<li> Byte-order marks at the start of a token are skipped as if they
+ were whitespace.
+<li> An error is raised on any attempt to access the <a href="../lang_createtable.html#rowid">rowid</a> of a VIEW or subquery.
+ Formerly, the rowid of a VIEW would be indeterminate and often would be NULL.
+ The -DSQLITE_ALLOW_ROWID_IN_VIEW compile-time option is available to restore
+ the legacy behavior for applications that need it.
+<li> The <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> and <a href="../c3ref/serialize.html">sqlite3_serialize()</a> interfaces are now
+ enabled by default. The -DSQLITE_ENABLE_DESERIALIZE compile-time option is
+ no longer required. Instead, there is a new <a href="../compile.html#omit_deserialize">-DSQLITE_OMIT_DESERIALIZE</a>
+ compile-time option to omit those interfaces.
+<li> The "memdb" VFS now allows the same in-memory database to be shared among
+ multiple database connections in the same process as long as the
+ database name begins with "/".
+<li> Back out the EXISTS-to-IN optimization (item 8b in the
+ <a href="../releaselog/3_35_0.html">SQLite 3.35.0 change log</a>)
+ as it was found to slow down queries more often than speed them up.
+<li> Improve the <a href="../optoverview.html#constprop">constant-propagation optimization</a> so that it works on
+ non-join queries.
+<li> The <a href="https://sqlite.org/src/file/ext/misc/regexp.c">REGEXP extension</a> is
+ now included in <a href="../cli.html">CLI</a> builds.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-06-18 18:36:39 5c9a6c06871cb9fe42814af9c039eb6da5427a6ec28f187af7ebfb62eafa66e5
+<li>SHA3-256 for sqlite3.c: 2a8e87aaa414ac2d45ace8eb74e710935423607a8de0fafcb36bbde5b952d157
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_37_0.html b/www/releaselog/3_37_0.html
new file mode 100644
index 0000000..a0d780d
--- /dev/null
+++ b/www/releaselog/3_37_0.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.37.0 On 2021-11-27</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.37.0 On 2021-11-27</h2><p><ol class='lessindent'>
+<li> <a href="../stricttables.html">STRICT tables</a> provide a prescriptive style of data type management,
+ for developers who prefer that kind of thing.
+<li> When adding columns that contain a
+ <a href="../lang_createtable.html#ckconst">CHECK constraint</a> or a <a href="../gencol.html">generated column</a> containing a <a href="../lang_createtable.html#notnullconst">NOT NULL constraint</a>,
+ the <a href="../lang_altertable.html#altertabaddcol">ALTER TABLE ADD COLUMN</a> now checks new constraints against
+ preexisting rows in the database and will only proceed if no constraints
+ are violated.
+<li> Added the <a href="../pragma.html#pragma_table_list">PRAGMA table_list</a> statement.
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Add the <a href="../cli.html#dotconn">.connection</a> command, allowing the CLI to keep multiple database
+ connections open at the same time.
+ <li> Add the <a href="../cli.html#safemode">--safe command-line option</a> that disables
+ <a href="../cli.html#dotcmd">dot-commands</a> and SQL statements that might cause side-effects that extend
+ beyond the single database file named on the command-line.
+ <li> Performance improvements when reading SQL statements
+ that span many lines.
+ </ol>
+<li> Added the <a href="../c3ref/autovacuum_pages.html">sqlite3_autovacuum_pages()</a> interface.
+<li> The <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> does not and has never worked for the TEMP
+ database. That limitation is now noted in the documentation.
+<li> The query planner now omits ORDER BY clauses on subqueries and views
+ if removing those clauses does not change the semantics of the query.
+<li> The <a href="../series.html">generate_series</a> table-valued function extension is modified so that
+ the first parameter ("START") is now required. This is done as a way to
+ demonstrate how to write table-valued functions with required parameters.
+ The legacy behavior is available using the -DZERO_ARGUMENT_GENERATE_SERIES
+ compile-time option.
+<li> Added new <a href="../c3ref/changes.html">sqlite3_changes64()</a> and <a href="../c3ref/total_changes.html">sqlite3_total_changes64()</a> interfaces.
+<li> Added the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXRESCODE</a> flag option to <a href="../c3ref/open.html">sqlite3_open_v2()</a>.
+<li> Use less memory to hold the database schema.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-11-27 14:13:22 bd41822c7424d393a30e92ff6cb254d25c26769889c1499a18a0b9339f5d6c8a
+<li>SHA3-256 for sqlite3.c: a202a950ab401cda052e81259e96d6e64ad91faaaaf5690d769f64c2ab962f27
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_37_1.html b/www/releaselog/3_37_1.html
new file mode 100644
index 0000000..ce2df88
--- /dev/null
+++ b/www/releaselog/3_37_1.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.37.1 On 2021-12-30</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.37.1 On 2021-12-30</h2><p><b>Changes in version 3.37.0 (2021-11-27):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> <a href="../stricttables.html">STRICT tables</a> provide a prescriptive style of data type management,
+ for developers who prefer that kind of thing.
+<li> When adding columns that contain a
+ <a href="../lang_createtable.html#ckconst">CHECK constraint</a> or a <a href="../gencol.html">generated column</a> containing a <a href="../lang_createtable.html#notnullconst">NOT NULL constraint</a>,
+ the <a href="../lang_altertable.html#altertabaddcol">ALTER TABLE ADD COLUMN</a> now checks new constraints against
+ preexisting rows in the database and will only proceed if no constraints
+ are violated.
+<li> Added the <a href="../pragma.html#pragma_table_list">PRAGMA table_list</a> statement.
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Add the <a href="../cli.html#dotconn">.connection</a> command, allowing the CLI to keep multiple database
+ connections open at the same time.
+ <li> Add the <a href="../cli.html#safemode">--safe command-line option</a> that disables
+ <a href="../cli.html#dotcmd">dot-commands</a> and SQL statements that might cause side-effects that extend
+ beyond the single database file named on the command-line.
+ <li> Performance improvements when reading SQL statements
+ that span many lines.
+ </ol>
+<li> Added the <a href="../c3ref/autovacuum_pages.html">sqlite3_autovacuum_pages()</a> interface.
+<li> The <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> does not and has never worked for the TEMP
+ database. That limitation is now noted in the documentation.
+<li> The query planner now omits ORDER BY clauses on subqueries and views
+ if removing those clauses does not change the semantics of the query.
+<li> The <a href="../series.html">generate_series</a> table-valued function extension is modified so that
+ the first parameter ("START") is now required. This is done as a way to
+ demonstrate how to write table-valued functions with required parameters.
+ The legacy behavior is available using the -DZERO_ARGUMENT_GENERATE_SERIES
+ compile-time option.
+<li> Added new <a href="../c3ref/changes.html">sqlite3_changes64()</a> and <a href="../c3ref/total_changes.html">sqlite3_total_changes64()</a> interfaces.
+<li> Added the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXRESCODE</a> flag option to <a href="../c3ref/open.html">sqlite3_open_v2()</a>.
+<li> Use less memory to hold the database schema.
+
+</ol>
+<p><b>Additional changes in version 3.37.1 (2021-12-30):</b></p>
+<p><ol class='lessindent'>
+<li value='12'> Fix a bug introduced by the <a href="../lang_upsert.html">UPSERT</a> enhancements of <a href="../releaselog/3_35_0.html">version 3.35.0</a> that
+ can cause incorrect byte-code to be generated for some obscure but valid
+ SQL, possibly resulting in a NULL-pointer dereference.
+<li> Fix an OOB read that can occur in <a href="../fts5.html">FTS5</a> when reading corrupt database files.
+<li> Improved robustness of the --safe option in the <a href="../cli.html">CLI</a>.
+<li> Other minor fixes to assert() statements and test cases.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2021-12-30 15:30:28 378629bf2ea546f73eee84063c5358439a12f7300e433f18c9e1bddd948dea62
+<li>SHA3-256 for sqlite3.c: 915afb3f29c2d217ea0c283326a9df7d505e6c73b40236f0b33ded91f812d174
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_37_2.html b/www/releaselog/3_37_2.html
new file mode 100644
index 0000000..a9000aa
--- /dev/null
+++ b/www/releaselog/3_37_2.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.37.2 On 2022-01-06</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.37.2 On 2022-01-06</h2><p><b>Changes in version 3.37.0 (2021-11-27):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> <a href="../stricttables.html">STRICT tables</a> provide a prescriptive style of data type management,
+ for developers who prefer that kind of thing.
+<li> When adding columns that contain a
+ <a href="../lang_createtable.html#ckconst">CHECK constraint</a> or a <a href="../gencol.html">generated column</a> containing a <a href="../lang_createtable.html#notnullconst">NOT NULL constraint</a>,
+ the <a href="../lang_altertable.html#altertabaddcol">ALTER TABLE ADD COLUMN</a> now checks new constraints against
+ preexisting rows in the database and will only proceed if no constraints
+ are violated.
+<li> Added the <a href="../pragma.html#pragma_table_list">PRAGMA table_list</a> statement.
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> Add the <a href="../cli.html#dotconn">.connection</a> command, allowing the CLI to keep multiple database
+ connections open at the same time.
+ <li> Add the <a href="../cli.html#safemode">--safe command-line option</a> that disables
+ <a href="../cli.html#dotcmd">dot-commands</a> and SQL statements that might cause side-effects that extend
+ beyond the single database file named on the command-line.
+ <li> Performance improvements when reading SQL statements
+ that span many lines.
+ </ol>
+<li> Added the <a href="../c3ref/autovacuum_pages.html">sqlite3_autovacuum_pages()</a> interface.
+<li> The <a href="../c3ref/deserialize.html">sqlite3_deserialize()</a> does not and has never worked for the TEMP
+ database. That limitation is now noted in the documentation.
+<li> The query planner now omits ORDER BY clauses on subqueries and views
+ if removing those clauses does not change the semantics of the query.
+<li> The <a href="../series.html">generate_series</a> table-valued function extension is modified so that
+ the first parameter ("START") is now required. This is done as a way to
+ demonstrate how to write table-valued functions with required parameters.
+ The legacy behavior is available using the -DZERO_ARGUMENT_GENERATE_SERIES
+ compile-time option.
+<li> Added new <a href="../c3ref/changes.html">sqlite3_changes64()</a> and <a href="../c3ref/total_changes.html">sqlite3_total_changes64()</a> interfaces.
+<li> Added the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_EXRESCODE</a> flag option to <a href="../c3ref/open.html">sqlite3_open_v2()</a>.
+<li> Use less memory to hold the database schema.
+
+</ol>
+<p><b>Additional changes in version 3.37.1 (2021-12-30):</b></p>
+<p><ol class='lessindent'>
+<li value='12'> Fix a bug introduced by the <a href="../lang_upsert.html">UPSERT</a> enhancements of <a href="../releaselog/3_35_0.html">version 3.35.0</a> that
+ can cause incorrect byte-code to be generated for some obscure but valid
+ SQL, possibly resulting in a NULL-pointer dereference.
+<li> Fix an OOB read that can occur in <a href="../fts5.html">FTS5</a> when reading corrupt database files.
+<li> Improved robustness of the --safe option in the <a href="../cli.html">CLI</a>.
+<li> Other minor fixes to assert() statements and test cases.
+
+</ol>
+<p><b>Additional changes in version 3.37.2 (2022-01-06):</b></p>
+<p><ol class='lessindent'>
+<li value='16'> Fix <a href="https://sqlite.org/forum/forumpost/b03d86f9516cb3a2">a bug</a> introduced
+ in <a href="../releaselog/3_35_0.html">version 3.35.0</a> (2021-03-12) that
+ <a href="../howtocorrupt.html#svptbug">can cause database corruption</a>
+ if a <a href="../lang_savepoint.html">SAVEPOINT</a> is rolled back while in <a href="../pragma.html#pragma_temp_store">PRAGMA temp_store=MEMORY</a> mode,
+ and other changes are made, and then the outer transaction commits.
+ <a href="https://sqlite.org/src/info/73c2b50211d3ae26">Check-in 73c2b50211d3ae26</a>
+<li> Fix a long-standing problem with ON DELETE CASCADE and ON UPDATE CASCADE
+ in which a cache of the <a href="../opcode.html">bytecode</a> used to implement the cascading change
+ was not being reset following a local DDL change.
+ <a href="https://sqlite.org/src/info/5232c9777fe4fb13">Check-in 5232c9777fe4fb13</a>.
+<li> Other minor fixes that should not impact production builds.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5d17a0
+<li>SHA3-256 for sqlite3.c: 1bb01c382295cba85ec4685cedc52a7477cdae71cc37f1ad0f48719a17af1e1e
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_38_0.html b/www/releaselog/3_38_0.html
new file mode 100644
index 0000000..0fae755
--- /dev/null
+++ b/www/releaselog/3_38_0.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.38.0 On 2022-02-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.38.0 On 2022-02-22</h2><p><ol class='lessindent'>
+<li> Added <a href="../json1.html#jptr">the -> and ->> operators</a> for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+<li> The JSON functions are now built-ins. It is no longer necessary
+ to use the <a href="../compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new <a href="../compile.html#omit_json">-DSQLITE_OMIT_JSON</a> compile-time option.
+<li> Enhancements to <a href="../lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added the <a href="../lang_datefunc.html#uepch">unixepoch() function</a>.
+ <li> Added the <a href="../lang_datefunc.html#automod">auto modifier</a> and the <a href="../lang_datefunc.html#jdmod">julianday modifier</a>.
+ </ol>
+<li> Rename the <a href="../lang_corefunc.html#printf">printf() SQL function</a> to <a href="../lang_corefunc.html#format">format()</a> for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+<li> Added the <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+<li> Enhanced the interface to <a href="../vtab.html">virtual tables</a> as follows:
+ <ol type="a">
+ <li> Added the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface.
+ <li> Added the <a href="../c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface.
+ <li> Added new operator types <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a>
+ and <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>.
+ <li> Added the <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface (and related) to enable
+ a virtual table to process <a href="../lang_expr.html#in_op">IN operator</a> constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> <a href="../cli.html#clmnr">Columnar output modes</a> are enhanced to correctly handle tabs
+ and newlines embedded in text.
+ <li> Added options like "--wrap N", "--wordwrap on", and "--quote"
+ to the <a href="../cli.html#clmnr">columnar output modes</a>.
+ <li> Added the <a href="../cli.html#qbox">.mode qbox</a> alias.
+ <li> The <a href="../cli.html#csv">.import command</a> automatically disambiguates column names.
+ <li> Use the new <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface to provide better
+ error messages.
+ </ol>
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Use a Bloom filter to speed up large analytic queries.
+ <li> Use a balanced merge tree to evaluate UNION or UNION ALL
+ compound SELECT statements that have an ORDER BY clause.
+ </ol>
+<li> The <a href="../lang_altertable.html">ALTER TABLE</a> statement is changed to silently ignores entries in the
+ <a href="../schematab.html">sqlite_schema table</a> that do not parse when <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-02-22 18:58:40 40fa792d359f84c3b9e9d6623743e1a59826274e221df1bde8f47086968a1bab
+
+<li>SHA3-256 for sqlite3.c: a69af0a88d59271a2dd3c846a3e93cbd29e7c499864f6c0462a3b4160bee1762
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_38_1.html b/www/releaselog/3_38_1.html
new file mode 100644
index 0000000..bcf645b
--- /dev/null
+++ b/www/releaselog/3_38_1.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.38.1 On 2022-03-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.38.1 On 2022-03-12</h2><p><b>Changes in version 3.38.0 (2022-02-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added <a href="../json1.html#jptr">the -> and ->> operators</a> for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+<li> The JSON functions are now built-ins. It is no longer necessary
+ to use the <a href="../compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new <a href="../compile.html#omit_json">-DSQLITE_OMIT_JSON</a> compile-time option.
+<li> Enhancements to <a href="../lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added the <a href="../lang_datefunc.html#uepch">unixepoch() function</a>.
+ <li> Added the <a href="../lang_datefunc.html#automod">auto modifier</a> and the <a href="../lang_datefunc.html#jdmod">julianday modifier</a>.
+ </ol>
+<li> Rename the <a href="../lang_corefunc.html#printf">printf() SQL function</a> to <a href="../lang_corefunc.html#format">format()</a> for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+<li> Added the <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+<li> Enhanced the interface to <a href="../vtab.html">virtual tables</a> as follows:
+ <ol type="a">
+ <li> Added the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface.
+ <li> Added the <a href="../c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface.
+ <li> Added new operator types <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a>
+ and <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>.
+ <li> Added the <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface (and related) to enable
+ a virtual table to process <a href="../lang_expr.html#in_op">IN operator</a> constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> <a href="../cli.html#clmnr">Columnar output modes</a> are enhanced to correctly handle tabs
+ and newlines embedded in text.
+ <li> Added options like "--wrap N", "--wordwrap on", and "--quote"
+ to the <a href="../cli.html#clmnr">columnar output modes</a>.
+ <li> Added the <a href="../cli.html#qbox">.mode qbox</a> alias.
+ <li> The <a href="../cli.html#csv">.import command</a> automatically disambiguates column names.
+ <li> Use the new <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface to provide better
+ error messages.
+ </ol>
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Use a Bloom filter to speed up large analytic queries.
+ <li> Use a balanced merge tree to evaluate UNION or UNION ALL
+ compound SELECT statements that have an ORDER BY clause.
+ </ol>
+<li> The <a href="../lang_altertable.html">ALTER TABLE</a> statement is changed to silently ignores entries in the
+ <a href="../schematab.html">sqlite_schema table</a> that do not parse when <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
+</ol>
+<p><b>Additional changes in version 3.38.1 (2022-03-12):</b></p>
+<p><ol class='lessindent'>
+<li value='10'> Fix problems with the new Bloom filter optimization that might cause
+ some obscure queries to get an incorrect answer.
+<li> Fix the <a href="../lang_datefunc.html#localtime">localtime modifier</a> of the <a href="../lang_datefunc.html">date and time functions</a> so that
+ it preserves fractional seconds.
+<li> Fix the <a href="../lang_corefunc.html#sqlite_offset">sqlite_offset SQL function</a> so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+<li> Fix <a href="../rowvalue.html#rvinop">row value IN operator</a> constraints on <a href="../vtab.html">virtual tables</a> so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+<li> Other minor fixes to assert() statements, test cases, and documentation.
+ See the <a href="https://sqlite.org/src/timeline?p=version-3.38.1&bt=version-3.38.0">source code timeline</a>
+ for details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-03-12 13:37:29 38c210fdd258658321c85ec9c01a072fda3ada94540e3239d29b34dc547a8cbc
+<li>SHA3-256 for sqlite3.c: 262ba071e960a8a0a6ce39307ae30244a2b0dc9fe1c4c09d0e1070d4353cd92c
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_38_2.html b/www/releaselog/3_38_2.html
new file mode 100644
index 0000000..2113ccc
--- /dev/null
+++ b/www/releaselog/3_38_2.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.38.2 On 2022-03-26</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.38.2 On 2022-03-26</h2><p><b>Changes in version 3.38.0 (2022-02-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added <a href="../json1.html#jptr">the -> and ->> operators</a> for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+<li> The JSON functions are now built-ins. It is no longer necessary
+ to use the <a href="../compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new <a href="../compile.html#omit_json">-DSQLITE_OMIT_JSON</a> compile-time option.
+<li> Enhancements to <a href="../lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added the <a href="../lang_datefunc.html#uepch">unixepoch() function</a>.
+ <li> Added the <a href="../lang_datefunc.html#automod">auto modifier</a> and the <a href="../lang_datefunc.html#jdmod">julianday modifier</a>.
+ </ol>
+<li> Rename the <a href="../lang_corefunc.html#printf">printf() SQL function</a> to <a href="../lang_corefunc.html#format">format()</a> for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+<li> Added the <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+<li> Enhanced the interface to <a href="../vtab.html">virtual tables</a> as follows:
+ <ol type="a">
+ <li> Added the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface.
+ <li> Added the <a href="../c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface.
+ <li> Added new operator types <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a>
+ and <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>.
+ <li> Added the <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface (and related) to enable
+ a virtual table to process <a href="../lang_expr.html#in_op">IN operator</a> constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> <a href="../cli.html#clmnr">Columnar output modes</a> are enhanced to correctly handle tabs
+ and newlines embedded in text.
+ <li> Added options like "--wrap N", "--wordwrap on", and "--quote"
+ to the <a href="../cli.html#clmnr">columnar output modes</a>.
+ <li> Added the <a href="../cli.html#qbox">.mode qbox</a> alias.
+ <li> The <a href="../cli.html#csv">.import command</a> automatically disambiguates column names.
+ <li> Use the new <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface to provide better
+ error messages.
+ </ol>
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Use a Bloom filter to speed up large analytic queries.
+ <li> Use a balanced merge tree to evaluate UNION or UNION ALL
+ compound SELECT statements that have an ORDER BY clause.
+ </ol>
+<li> The <a href="../lang_altertable.html">ALTER TABLE</a> statement is changed to silently ignores entries in the
+ <a href="../schematab.html">sqlite_schema table</a> that do not parse when <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
+</ol>
+<p><b>Additional changes in version 3.38.1 (2022-03-12):</b></p>
+<p><ol class='lessindent'>
+<li value='10'> Fix problems with the new Bloom filter optimization that might cause
+ some obscure queries to get an incorrect answer.
+<li> Fix the <a href="../lang_datefunc.html#localtime">localtime modifier</a> of the <a href="../lang_datefunc.html">date and time functions</a> so that
+ it preserves fractional seconds.
+<li> Fix the <a href="../lang_corefunc.html#sqlite_offset">sqlite_offset SQL function</a> so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+<li> Fix <a href="../rowvalue.html#rvinop">row value IN operator</a> constraints on <a href="../vtab.html">virtual tables</a> so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+<li> Other minor fixes to assert() statements, test cases, and documentation.
+ See the <a href="https://sqlite.org/src/timeline?p=version-3.38.1&bt=version-3.38.0">source code timeline</a>
+ for details.
+
+</ol>
+<p><b>Additional changes in version 3.38.2 (2022-03-26):</b></p>
+<p><ol class='lessindent'>
+<li value='15'> Fix a user-discovered problem with the new Bloom filter optimization
+ that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
+ clause constraint that says that one of the columns on the right table of
+ the LEFT JOIN is NULL. See
+ <a href='https://sqlite.org/forum/forumpost/031e262a89b6a9d2'>forum thread 031e262a89b6a9d2</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.2&bt=version-3.38.1'>timeline</a> for
+ details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-03-26 13:51:10 d33c709cc0af66bc5b6dc6216eba9f1f0b40960b9ae83694c986fbf4c1d6f08f
+<li>SHA3-256 for sqlite3.c: 0fbac6b6999f894184899431fb77b9792324c61246b2a010d736694ccaa6d613
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_38_3.html b/www/releaselog/3_38_3.html
new file mode 100644
index 0000000..d0b00f5
--- /dev/null
+++ b/www/releaselog/3_38_3.html
@@ -0,0 +1,221 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.38.3 On 2022-04-27</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.38.3 On 2022-04-27</h2><p><b>Changes in version 3.38.0 (2022-02-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added <a href="../json1.html#jptr">the -> and ->> operators</a> for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+<li> The JSON functions are now built-ins. It is no longer necessary
+ to use the <a href="../compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new <a href="../compile.html#omit_json">-DSQLITE_OMIT_JSON</a> compile-time option.
+<li> Enhancements to <a href="../lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added the <a href="../lang_datefunc.html#uepch">unixepoch() function</a>.
+ <li> Added the <a href="../lang_datefunc.html#automod">auto modifier</a> and the <a href="../lang_datefunc.html#jdmod">julianday modifier</a>.
+ </ol>
+<li> Rename the <a href="../lang_corefunc.html#printf">printf() SQL function</a> to <a href="../lang_corefunc.html#format">format()</a> for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+<li> Added the <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+<li> Enhanced the interface to <a href="../vtab.html">virtual tables</a> as follows:
+ <ol type="a">
+ <li> Added the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface.
+ <li> Added the <a href="../c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface.
+ <li> Added new operator types <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a>
+ and <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>.
+ <li> Added the <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface (and related) to enable
+ a virtual table to process <a href="../lang_expr.html#in_op">IN operator</a> constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> <a href="../cli.html#clmnr">Columnar output modes</a> are enhanced to correctly handle tabs
+ and newlines embedded in text.
+ <li> Added options like "--wrap N", "--wordwrap on", and "--quote"
+ to the <a href="../cli.html#clmnr">columnar output modes</a>.
+ <li> Added the <a href="../cli.html#qbox">.mode qbox</a> alias.
+ <li> The <a href="../cli.html#csv">.import command</a> automatically disambiguates column names.
+ <li> Use the new <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface to provide better
+ error messages.
+ </ol>
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Use a Bloom filter to speed up large analytic queries.
+ <li> Use a balanced merge tree to evaluate UNION or UNION ALL
+ compound SELECT statements that have an ORDER BY clause.
+ </ol>
+<li> The <a href="../lang_altertable.html">ALTER TABLE</a> statement is changed to silently ignores entries in the
+ <a href="../schematab.html">sqlite_schema table</a> that do not parse when <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
+</ol>
+<p><b>Additional changes in version 3.38.1 (2022-03-12):</b></p>
+<p><ol class='lessindent'>
+<li value='10'> Fix problems with the new Bloom filter optimization that might cause
+ some obscure queries to get an incorrect answer.
+<li> Fix the <a href="../lang_datefunc.html#localtime">localtime modifier</a> of the <a href="../lang_datefunc.html">date and time functions</a> so that
+ it preserves fractional seconds.
+<li> Fix the <a href="../lang_corefunc.html#sqlite_offset">sqlite_offset SQL function</a> so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+<li> Fix <a href="../rowvalue.html#rvinop">row value IN operator</a> constraints on <a href="../vtab.html">virtual tables</a> so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+<li> Other minor fixes to assert() statements, test cases, and documentation.
+ See the <a href="https://sqlite.org/src/timeline?p=version-3.38.1&bt=version-3.38.0">source code timeline</a>
+ for details.
+
+</ol>
+<p><b>Additional changes in version 3.38.2 (2022-03-26):</b></p>
+<p><ol class='lessindent'>
+<li value='15'> Fix a user-discovered problem with the new Bloom filter optimization
+ that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
+ clause constraint that says that one of the columns on the right table of
+ the LEFT JOIN is NULL. See
+ <a href='https://sqlite.org/forum/forumpost/031e262a89b6a9d2'>forum thread 031e262a89b6a9d2</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.2&bt=version-3.38.1'>timeline</a> for
+ details.
+
+</ol>
+<p><b>Additional changes in version 3.38.3 (2022-04-27):</b></p>
+<p><ol class='lessindent'>
+<li value='17'> Fix a case of the query planner be overly aggressive with optimizing automatic-index
+ and Bloom-filter construction, using inappropriate ON clause terms to restrict the
+ size of the automatic-index or Bloom filter, and resulting in missing rows in the
+ output.
+ <a href='https://sqlite.org/forum/forumpost/0d3200f4f3bcd3a3'>Forum thread 0d3200f4f3bcd3a3</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.3&bt=version-3.38.2'>timeline</a> for
+ details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-04-27 12:03:15 9547e2c38a1c6f751a77d4d796894dec4dc5d8f5d79b1cd39e1ffc50df7b3be4
+<li>SHA3-256 for sqlite3.c: d4d66feffad66ea82073fbb97ae9c84e3615887ebc5168226ccee28d82424517
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_38_4.html b/www/releaselog/3_38_4.html
new file mode 100644
index 0000000..ea43cd1
--- /dev/null
+++ b/www/releaselog/3_38_4.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.38.4 On 2022-05-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.38.4 On 2022-05-04</h2><p><b>Changes in version 3.38.0 (2022-02-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added <a href="../json1.html#jptr">the -> and ->> operators</a> for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+<li> The JSON functions are now built-ins. It is no longer necessary
+ to use the <a href="../compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new <a href="../compile.html#omit_json">-DSQLITE_OMIT_JSON</a> compile-time option.
+<li> Enhancements to <a href="../lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added the <a href="../lang_datefunc.html#uepch">unixepoch() function</a>.
+ <li> Added the <a href="../lang_datefunc.html#automod">auto modifier</a> and the <a href="../lang_datefunc.html#jdmod">julianday modifier</a>.
+ </ol>
+<li> Rename the <a href="../lang_corefunc.html#printf">printf() SQL function</a> to <a href="../lang_corefunc.html#format">format()</a> for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+<li> Added the <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+<li> Enhanced the interface to <a href="../vtab.html">virtual tables</a> as follows:
+ <ol type="a">
+ <li> Added the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface.
+ <li> Added the <a href="../c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface.
+ <li> Added new operator types <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a>
+ and <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>.
+ <li> Added the <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface (and related) to enable
+ a virtual table to process <a href="../lang_expr.html#in_op">IN operator</a> constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> <a href="../cli.html#clmnr">Columnar output modes</a> are enhanced to correctly handle tabs
+ and newlines embedded in text.
+ <li> Added options like "--wrap N", "--wordwrap on", and "--quote"
+ to the <a href="../cli.html#clmnr">columnar output modes</a>.
+ <li> Added the <a href="../cli.html#qbox">.mode qbox</a> alias.
+ <li> The <a href="../cli.html#csv">.import command</a> automatically disambiguates column names.
+ <li> Use the new <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface to provide better
+ error messages.
+ </ol>
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Use a Bloom filter to speed up large analytic queries.
+ <li> Use a balanced merge tree to evaluate UNION or UNION ALL
+ compound SELECT statements that have an ORDER BY clause.
+ </ol>
+<li> The <a href="../lang_altertable.html">ALTER TABLE</a> statement is changed to silently ignores entries in the
+ <a href="../schematab.html">sqlite_schema table</a> that do not parse when <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
+</ol>
+<p><b>Additional changes in version 3.38.1 (2022-03-12):</b></p>
+<p><ol class='lessindent'>
+<li value='10'> Fix problems with the new Bloom filter optimization that might cause
+ some obscure queries to get an incorrect answer.
+<li> Fix the <a href="../lang_datefunc.html#localtime">localtime modifier</a> of the <a href="../lang_datefunc.html">date and time functions</a> so that
+ it preserves fractional seconds.
+<li> Fix the <a href="../lang_corefunc.html#sqlite_offset">sqlite_offset SQL function</a> so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+<li> Fix <a href="../rowvalue.html#rvinop">row value IN operator</a> constraints on <a href="../vtab.html">virtual tables</a> so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+<li> Other minor fixes to assert() statements, test cases, and documentation.
+ See the <a href="https://sqlite.org/src/timeline?p=version-3.38.1&bt=version-3.38.0">source code timeline</a>
+ for details.
+
+</ol>
+<p><b>Additional changes in version 3.38.2 (2022-03-26):</b></p>
+<p><ol class='lessindent'>
+<li value='15'> Fix a user-discovered problem with the new Bloom filter optimization
+ that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
+ clause constraint that says that one of the columns on the right table of
+ the LEFT JOIN is NULL. See
+ <a href='https://sqlite.org/forum/forumpost/031e262a89b6a9d2'>forum thread 031e262a89b6a9d2</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.2&bt=version-3.38.1'>timeline</a> for
+ details.
+
+</ol>
+<p><b>Additional changes in version 3.38.3 (2022-04-27):</b></p>
+<p><ol class='lessindent'>
+<li value='17'> Fix a case of the query planner be overly aggressive with optimizing automatic-index
+ and Bloom-filter construction, using inappropriate ON clause terms to restrict the
+ size of the automatic-index or Bloom filter, and resulting in missing rows in the
+ output.
+ <a href='https://sqlite.org/forum/forumpost/0d3200f4f3bcd3a3'>Forum thread 0d3200f4f3bcd3a3</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.3&bt=version-3.38.2'>timeline</a> for
+ details.
+
+</ol>
+<p><b>Additional changes in version 3.38.4 (2022-05-04):</b></p>
+<p><ol class='lessindent'>
+<li value='19'> Fix a byte-code problem in the Bloom filter pull-down optimization added by release
+ 3.38.0 in which an error in the byte code causes the byte code engine to enter an
+ infinite loop when the pull-down optimization encounters a NULL key.
+ <a href='https://sqlite.org/forum/forumpost/2482b32700384a0f'>Forum thread 2482b32700384a0f</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=branch-3.38&bt=version-3.38.3'>timeline</a> for
+ details.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-05-04 15:45:55 d402f49871152670a62f4f28cacb15d814f2c1644e9347ad7d258e562978e45e
+<li>SHA3-256 for sqlite3.c: e6a50effb021858c200e885664611ed3c5e949413ff2dca452ac7ee336b9de1d
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_38_5.html b/www/releaselog/3_38_5.html
new file mode 100644
index 0000000..e4aab81
--- /dev/null
+++ b/www/releaselog/3_38_5.html
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.38.5 On 2022-05-06</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.38.5 On 2022-05-06</h2><p><b>Changes in version 3.38.0 (2022-02-22):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Added <a href="../json1.html#jptr">the -> and ->> operators</a> for easier processing of JSON.
+ The new operators are compatible with MySQL and PostgreSQL.
+<li> The JSON functions are now built-ins. It is no longer necessary
+ to use the <a href="../compile.html#enable_json1">-DSQLITE_ENABLE_JSON1</a> compile-time option to enable JSON
+ support. JSON is on by default. Disable the JSON interface using
+ the new <a href="../compile.html#omit_json">-DSQLITE_OMIT_JSON</a> compile-time option.
+<li> Enhancements to <a href="../lang_datefunc.html">date and time functions</a>:
+ <ol type="a">
+ <li> Added the <a href="../lang_datefunc.html#uepch">unixepoch() function</a>.
+ <li> Added the <a href="../lang_datefunc.html#automod">auto modifier</a> and the <a href="../lang_datefunc.html#jdmod">julianday modifier</a>.
+ </ol>
+<li> Rename the <a href="../lang_corefunc.html#printf">printf() SQL function</a> to <a href="../lang_corefunc.html#format">format()</a> for better
+ compatibility. The original printf() name is retained as an alias
+ for backwards compatibility.
+<li> Added the <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface, which can sometimes
+ help to localize an SQL error to a specific character in the input
+ SQL text, so that applications can provide better error messages.
+<li> Enhanced the interface to <a href="../vtab.html">virtual tables</a> as follows:
+ <ol type="a">
+ <li> Added the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface.
+ <li> Added the <a href="../c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface.
+ <li> Added new operator types <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_LIMIT</a>
+ and <a href="../c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>.
+ <li> Added the <a href="../c3ref/vtab_in.html">sqlite3_vtab_in()</a> interface (and related) to enable
+ a virtual table to process <a href="../lang_expr.html#in_op">IN operator</a> constraints all at once,
+ rather than processing each value of the right-hand side of the
+ IN operator separately.
+ </ol>
+<li> <a href="../cli.html">CLI</a> enhancements:
+ <ol type="a">
+ <li> <a href="../cli.html#clmnr">Columnar output modes</a> are enhanced to correctly handle tabs
+ and newlines embedded in text.
+ <li> Added options like "--wrap N", "--wordwrap on", and "--quote"
+ to the <a href="../cli.html#clmnr">columnar output modes</a>.
+ <li> Added the <a href="../cli.html#qbox">.mode qbox</a> alias.
+ <li> The <a href="../cli.html#csv">.import command</a> automatically disambiguates column names.
+ <li> Use the new <a href="../c3ref/errcode.html">sqlite3_error_offset()</a> interface to provide better
+ error messages.
+ </ol>
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Use a Bloom filter to speed up large analytic queries.
+ <li> Use a balanced merge tree to evaluate UNION or UNION ALL
+ compound SELECT statements that have an ORDER BY clause.
+ </ol>
+<li> The <a href="../lang_altertable.html">ALTER TABLE</a> statement is changed to silently ignores entries in the
+ <a href="../schematab.html">sqlite_schema table</a> that do not parse when <a href="../pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>.
+</ol>
+<p><b>Additional changes in version 3.38.1 (2022-03-12):</b></p>
+<p><ol class='lessindent'>
+<li value='10'> Fix problems with the new Bloom filter optimization that might cause
+ some obscure queries to get an incorrect answer.
+<li> Fix the <a href="../lang_datefunc.html#localtime">localtime modifier</a> of the <a href="../lang_datefunc.html">date and time functions</a> so that
+ it preserves fractional seconds.
+<li> Fix the <a href="../lang_corefunc.html#sqlite_offset">sqlite_offset SQL function</a> so that it works correctly even
+ in corner cases such as when the argument is a virtual column or the
+ column of a view.
+<li> Fix <a href="../rowvalue.html#rvinop">row value IN operator</a> constraints on <a href="../vtab.html">virtual tables</a> so that they
+ work correctly even if the virtual table implementation relies on bytecode
+ to filter rows that do not satisfy the constraint.
+<li> Other minor fixes to assert() statements, test cases, and documentation.
+ See the <a href="https://sqlite.org/src/timeline?p=version-3.38.1&bt=version-3.38.0">source code timeline</a>
+ for details.
+
+</ol>
+<p><b>Additional changes in version 3.38.2 (2022-03-26):</b></p>
+<p><ol class='lessindent'>
+<li value='15'> Fix a user-discovered problem with the new Bloom filter optimization
+ that might cause an incorrect answer when doing a LEFT JOIN with a WHERE
+ clause constraint that says that one of the columns on the right table of
+ the LEFT JOIN is NULL. See
+ <a href='https://sqlite.org/forum/forumpost/031e262a89b6a9d2'>forum thread 031e262a89b6a9d2</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.2&bt=version-3.38.1'>timeline</a> for
+ details.
+
+</ol>
+<p><b>Additional changes in version 3.38.3 (2022-04-27):</b></p>
+<p><ol class='lessindent'>
+<li value='17'> Fix a case of the query planner be overly aggressive with optimizing automatic-index
+ and Bloom-filter construction, using inappropriate ON clause terms to restrict the
+ size of the automatic-index or Bloom filter, and resulting in missing rows in the
+ output.
+ <a href='https://sqlite.org/forum/forumpost/0d3200f4f3bcd3a3'>Forum thread 0d3200f4f3bcd3a3</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=version-3.38.3&bt=version-3.38.2'>timeline</a> for
+ details.
+
+</ol>
+<p><b>Additional changes in version 3.38.4 (2022-05-04):</b></p>
+<p><ol class='lessindent'>
+<li value='19'> Fix a byte-code problem in the Bloom filter pull-down optimization added by release
+ 3.38.0 in which an error in the byte code causes the byte code engine to enter an
+ infinite loop when the pull-down optimization encounters a NULL key.
+ <a href='https://sqlite.org/forum/forumpost/2482b32700384a0f'>Forum thread 2482b32700384a0f</a>.
+<li> Other minor patches. See the
+ <a href='https://sqlite.org/src/timeline?p=branch-3.38&bt=version-3.38.3'>timeline</a> for
+ details.
+
+</ol>
+<p><b>Additional changes in version 3.38.5 (2022-05-06):</b></p>
+<p><ol class='lessindent'>
+<li value='21'> Fix <a href="../news.html#2022-05-06">a blunder</a> in the <a href="../cli.html">CLI</a> of the 3.38.4 release.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-05-06 15:25:27 78d9c993d404cdfaa7fdd2973fa1052e3da9f66215cff9c5540ebe55c407d9fe
+<li>SHA3-256 for sqlite3.c: b05ef42ed234009b4b3dfb36c5f5ccf6d728da80f25ee560291269cf6cfe635f
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_39_0.html b/www/releaselog/3_39_0.html
new file mode 100644
index 0000000..22143a2
--- /dev/null
+++ b/www/releaselog/3_39_0.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.39.0 On 2022-06-25</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.39.0 On 2022-06-25</h2><p><ol class='lessindent'>
+<li> Add (long overdue) support for <a href="../lang_select.html#rjoin">RIGHT and FULL OUTER JOIN</a>.
+<li> Add new binary comparison operators <a href="../lang_expr.html#isdf">IS NOT DISTINCT FROM</a> and <a href="../lang_expr.html#isdf">IS DISTINCT FROM</a>
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+<li> Add a new return code (value "3") from the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a>
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+<li> Added the <a href="../c3ref/db_name.html">sqlite3_db_name()</a> interface.
+<li> The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a> flag is used with <a href="../c3ref/open.html">sqlite3_open_v2()</a>
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+<li> Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+<li> The <a href="../lang_select.html#resultset">HAVING clause</a> of a <a href="../lang_select.html">SELECT statement</a> is now allowed on any aggregate query,
+ even queries that do not have a <a href="../lang_select.html#resultset">GROUP BY clause</a>.
+<li> Many <a href="../cpu.html#microopt">microoptimizations</a> collectively reduce CPU cycles by about 2.3%.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-06-25 14:57:57 14e166f40dbfa6e055543f8301525f2ca2e96a02a57269818b9e69e162e98918
+<li>SHA3-256 for sqlite3.c: d9c439cacad5e4992d0d25989cfd27a4c4f59a3183c97873bc03f0ad1aa78b7a
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_39_1.html b/www/releaselog/3_39_1.html
new file mode 100644
index 0000000..85f33e0
--- /dev/null
+++ b/www/releaselog/3_39_1.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.39.1 On 2022-07-13</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.39.1 On 2022-07-13</h2><p><b>Changes in version 3.39.0 (2022-06-25):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add (long overdue) support for <a href="../lang_select.html#rjoin">RIGHT and FULL OUTER JOIN</a>.
+<li> Add new binary comparison operators <a href="../lang_expr.html#isdf">IS NOT DISTINCT FROM</a> and <a href="../lang_expr.html#isdf">IS DISTINCT FROM</a>
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+<li> Add a new return code (value "3") from the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a>
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+<li> Added the <a href="../c3ref/db_name.html">sqlite3_db_name()</a> interface.
+<li> The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a> flag is used with <a href="../c3ref/open.html">sqlite3_open_v2()</a>
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+<li> Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+<li> The <a href="../lang_select.html#resultset">HAVING clause</a> of a <a href="../lang_select.html">SELECT statement</a> is now allowed on any aggregate query,
+ even queries that do not have a <a href="../lang_select.html#resultset">GROUP BY clause</a>.
+<li> Many <a href="../cpu.html#microopt">microoptimizations</a> collectively reduce CPU cycles by about 2.3%.
+</ol>
+<p><b>Additional changes in version 3.39.1 (2022-07-13):</b></p>
+<p><ol class='lessindent'>
+<li value='9'> Fix an incorrect result from a query that uses a view that contains a compound
+ SELECT in which only one arm contains a RIGHT JOIN and where the view is not
+ the first FROM clause term of the query that contains the view.
+ <a href="https://sqlite.org/forum/forumpost/174afeae5734d42d">forum post 174afeae5734d42d</a>.
+<li> Fix some harmless compiler warnings.
+<li> Fix a long-standing problem with <a href="../lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> that can only arise
+ if the <a href="../c3ref/limit.html">sqlite3_limit</a>(<a href="../c3ref/c_limit_attached.html#sqlitelimitsqllength">SQLITE_LIMIT_SQL_LENGTH</a>) is set to a very small value.
+<li> Fix a long-standing problem in <a href="../fts3.html">FTS3</a> that can only arise when compiled with
+ the <a href="../compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.
+<li> Fix the build so that is works when the <a href="../compile.html#debug">SQLITE_DEBUG</a> and
+ <a href="../compile.html#omit_windowfunc">SQLITE_OMIT_WINDOWFUNC</a> compile-time options are both provided at the
+ same time.
+<li> Fix the initial-prefix optimization for the <a href="../lang_expr.html#regexp">REGEXP</a> extension so that it works
+ correctly even if the prefix contains characters that require a 3-byte UTF8
+ encoding.
+<li> Enhance the <a href="../stmt.html">sqlite_stmt</a> virtual table so that it buffers all of its output.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-07-13 19:41:41 7c16541a0efb3985578181171c9f2bb3fdc4bad6a2ec85c6e31ab96f3eff201f
+<li>SHA3-256 for sqlite3.c: 6d13fcf1c31133da541d1eb8a83552d746f39b81a0657bd4077fed0221749511
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_39_2.html b/www/releaselog/3_39_2.html
new file mode 100644
index 0000000..ec5b719
--- /dev/null
+++ b/www/releaselog/3_39_2.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.39.2 On 2022-07-21</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.39.2 On 2022-07-21</h2><p><b>Changes in version 3.39.0 (2022-06-25):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add (long overdue) support for <a href="../lang_select.html#rjoin">RIGHT and FULL OUTER JOIN</a>.
+<li> Add new binary comparison operators <a href="../lang_expr.html#isdf">IS NOT DISTINCT FROM</a> and <a href="../lang_expr.html#isdf">IS DISTINCT FROM</a>
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+<li> Add a new return code (value "3") from the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a>
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+<li> Added the <a href="../c3ref/db_name.html">sqlite3_db_name()</a> interface.
+<li> The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a> flag is used with <a href="../c3ref/open.html">sqlite3_open_v2()</a>
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+<li> Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+<li> The <a href="../lang_select.html#resultset">HAVING clause</a> of a <a href="../lang_select.html">SELECT statement</a> is now allowed on any aggregate query,
+ even queries that do not have a <a href="../lang_select.html#resultset">GROUP BY clause</a>.
+<li> Many <a href="../cpu.html#microopt">microoptimizations</a> collectively reduce CPU cycles by about 2.3%.
+</ol>
+<p><b>Additional changes in version 3.39.1 (2022-07-13):</b></p>
+<p><ol class='lessindent'>
+<li value='9'> Fix an incorrect result from a query that uses a view that contains a compound
+ SELECT in which only one arm contains a RIGHT JOIN and where the view is not
+ the first FROM clause term of the query that contains the view.
+ <a href="https://sqlite.org/forum/forumpost/174afeae5734d42d">forum post 174afeae5734d42d</a>.
+<li> Fix some harmless compiler warnings.
+<li> Fix a long-standing problem with <a href="../lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> that can only arise
+ if the <a href="../c3ref/limit.html">sqlite3_limit</a>(<a href="../c3ref/c_limit_attached.html#sqlitelimitsqllength">SQLITE_LIMIT_SQL_LENGTH</a>) is set to a very small value.
+<li> Fix a long-standing problem in <a href="../fts3.html">FTS3</a> that can only arise when compiled with
+ the <a href="../compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.
+<li> Fix the build so that is works when the <a href="../compile.html#debug">SQLITE_DEBUG</a> and
+ <a href="../compile.html#omit_windowfunc">SQLITE_OMIT_WINDOWFUNC</a> compile-time options are both provided at the
+ same time.
+<li> Fix the initial-prefix optimization for the <a href="../lang_expr.html#regexp">REGEXP</a> extension so that it works
+ correctly even if the prefix contains characters that require a 3-byte UTF8
+ encoding.
+<li> Enhance the <a href="../stmt.html">sqlite_stmt</a> virtual table so that it buffers all of its output.
+</ol>
+<p><b>Additional changes in version 3.39.2 (2022-07-21):</b></p>
+<p><ol class='lessindent'>
+<li value='16'> Fix a performance regression in the query planner associated with rearranging
+ the order of FROM clause terms in the presences of a LEFT JOIN.
+<li> Apply fixes for CVE-2022-35737, Chromium bugs 1343348 and 1345947,
+ <a href="https://sqlite.org/forum/forumpost/3607259d3c">forum post 3607259d3c</a>, and
+ other minor problems discovered by internal testing.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-07-21 15:24:47 698edb77537b67c41adc68f9b892db56bcf9a55e00371a61420f3ddd668e6603
+<li>SHA3-256 for sqlite3.c: bffbaafa94706f0ed234f183af3eb46e6485e7e2c75983173ded76e0da805f11
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_39_3.html b/www/releaselog/3_39_3.html
new file mode 100644
index 0000000..6334481
--- /dev/null
+++ b/www/releaselog/3_39_3.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.39.3 On 2022-09-05</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.39.3 On 2022-09-05</h2><p><b>Changes in version 3.39.0 (2022-06-25):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add (long overdue) support for <a href="../lang_select.html#rjoin">RIGHT and FULL OUTER JOIN</a>.
+<li> Add new binary comparison operators <a href="../lang_expr.html#isdf">IS NOT DISTINCT FROM</a> and <a href="../lang_expr.html#isdf">IS DISTINCT FROM</a>
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+<li> Add a new return code (value "3") from the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a>
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+<li> Added the <a href="../c3ref/db_name.html">sqlite3_db_name()</a> interface.
+<li> The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a> flag is used with <a href="../c3ref/open.html">sqlite3_open_v2()</a>
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+<li> Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+<li> The <a href="../lang_select.html#resultset">HAVING clause</a> of a <a href="../lang_select.html">SELECT statement</a> is now allowed on any aggregate query,
+ even queries that do not have a <a href="../lang_select.html#resultset">GROUP BY clause</a>.
+<li> Many <a href="../cpu.html#microopt">microoptimizations</a> collectively reduce CPU cycles by about 2.3%.
+</ol>
+<p><b>Additional changes in version 3.39.1 (2022-07-13):</b></p>
+<p><ol class='lessindent'>
+<li value='9'> Fix an incorrect result from a query that uses a view that contains a compound
+ SELECT in which only one arm contains a RIGHT JOIN and where the view is not
+ the first FROM clause term of the query that contains the view.
+ <a href="https://sqlite.org/forum/forumpost/174afeae5734d42d">forum post 174afeae5734d42d</a>.
+<li> Fix some harmless compiler warnings.
+<li> Fix a long-standing problem with <a href="../lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> that can only arise
+ if the <a href="../c3ref/limit.html">sqlite3_limit</a>(<a href="../c3ref/c_limit_attached.html#sqlitelimitsqllength">SQLITE_LIMIT_SQL_LENGTH</a>) is set to a very small value.
+<li> Fix a long-standing problem in <a href="../fts3.html">FTS3</a> that can only arise when compiled with
+ the <a href="../compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.
+<li> Fix the build so that is works when the <a href="../compile.html#debug">SQLITE_DEBUG</a> and
+ <a href="../compile.html#omit_windowfunc">SQLITE_OMIT_WINDOWFUNC</a> compile-time options are both provided at the
+ same time.
+<li> Fix the initial-prefix optimization for the <a href="../lang_expr.html#regexp">REGEXP</a> extension so that it works
+ correctly even if the prefix contains characters that require a 3-byte UTF8
+ encoding.
+<li> Enhance the <a href="../stmt.html">sqlite_stmt</a> virtual table so that it buffers all of its output.
+</ol>
+<p><b>Additional changes in version 3.39.2 (2022-07-21):</b></p>
+<p><ol class='lessindent'>
+<li value='16'> Fix a performance regression in the query planner associated with rearranging
+ the order of FROM clause terms in the presences of a LEFT JOIN.
+<li> Apply fixes for CVE-2022-35737, Chromium bugs 1343348 and 1345947,
+ <a href="https://sqlite.org/forum/forumpost/3607259d3c">forum post 3607259d3c</a>, and
+ other minor problems discovered by internal testing.
+</ol>
+<p><b>Additional changes in version 3.39.3 (2022-09-05):</b></p>
+<p><ol class='lessindent'>
+<li value='18'> Use a statement journal on DML statement affecting two or more database
+ rows if the statement makes use of a SQL functions that might abort. See
+ <a href="https://sqlite.org/forum/forumpost/9b9e4716c0d7bbd1">forum thread 9b9e4716c0d7bbd1</a>.
+<li> Use a mutex to protect the <a href="../pragma.html#pragma_temp_store_directory">PRAGMA temp_store_directory</a> and
+ <a href="../pragma.html#pragma_data_store_directory">PRAGMA data_store_directory</a> statements, even though they are deprecated and
+ documented as not being threadsafe. See
+ <a href="https://sqlite.org/forum/forumpost/719a11e1314d1c70">forum post 719a11e1314d1c70</a>.
+<li> Other bug and warning fixes. See the
+ <a href="https://sqlite.org/src/timeline?p=version-3.39.3&bt=version-3.39.2">timeline</a>
+ for details.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8
+<li>SHA3-256 for sqlite3.c: 2fc273cf8032b601c9e06207efa0ae80eb73d5a1d283eb91096c815fa9640257
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_39_4.html b/www/releaselog/3_39_4.html
new file mode 100644
index 0000000..248f128
--- /dev/null
+++ b/www/releaselog/3_39_4.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.39.4 On 2022-09-29</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.39.4 On 2022-09-29</h2><p><b>Changes in version 3.39.0 (2022-06-25):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add (long overdue) support for <a href="../lang_select.html#rjoin">RIGHT and FULL OUTER JOIN</a>.
+<li> Add new binary comparison operators <a href="../lang_expr.html#isdf">IS NOT DISTINCT FROM</a> and <a href="../lang_expr.html#isdf">IS DISTINCT FROM</a>
+ that are equivalent to IS and IS NOT, respective, for compatibility with
+ PostgreSQL and SQL standards.
+<li> Add a new return code (value "3") from the <a href="../c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a>
+ interface that indicates a query that has both DISTINCT and ORDER BY
+ clauses.
+<li> Added the <a href="../c3ref/db_name.html">sqlite3_db_name()</a> interface.
+<li> The unix os interface resolves all symbolic links in database
+ filenames to create a canonical name for the database before the
+ file is opened.
+ If the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a> flag is used with <a href="../c3ref/open.html">sqlite3_open_v2()</a>
+ or similar, the open will fail if any element of the path is a
+ symbolic link.
+<li> Defer materializing views until the materialization
+ is actually needed, thus avoiding unnecessary work if the materialization turns
+ out to never be used.
+<li> The <a href="../lang_select.html#resultset">HAVING clause</a> of a <a href="../lang_select.html">SELECT statement</a> is now allowed on any aggregate query,
+ even queries that do not have a <a href="../lang_select.html#resultset">GROUP BY clause</a>.
+<li> Many <a href="../cpu.html#microopt">microoptimizations</a> collectively reduce CPU cycles by about 2.3%.
+</ol>
+<p><b>Additional changes in version 3.39.1 (2022-07-13):</b></p>
+<p><ol class='lessindent'>
+<li value='9'> Fix an incorrect result from a query that uses a view that contains a compound
+ SELECT in which only one arm contains a RIGHT JOIN and where the view is not
+ the first FROM clause term of the query that contains the view.
+ <a href="https://sqlite.org/forum/forumpost/174afeae5734d42d">forum post 174afeae5734d42d</a>.
+<li> Fix some harmless compiler warnings.
+<li> Fix a long-standing problem with <a href="../lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> that can only arise
+ if the <a href="../c3ref/limit.html">sqlite3_limit</a>(<a href="../c3ref/c_limit_attached.html#sqlitelimitsqllength">SQLITE_LIMIT_SQL_LENGTH</a>) is set to a very small value.
+<li> Fix a long-standing problem in <a href="../fts3.html">FTS3</a> that can only arise when compiled with
+ the <a href="../compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.
+<li> Fix the build so that is works when the <a href="../compile.html#debug">SQLITE_DEBUG</a> and
+ <a href="../compile.html#omit_windowfunc">SQLITE_OMIT_WINDOWFUNC</a> compile-time options are both provided at the
+ same time.
+<li> Fix the initial-prefix optimization for the <a href="../lang_expr.html#regexp">REGEXP</a> extension so that it works
+ correctly even if the prefix contains characters that require a 3-byte UTF8
+ encoding.
+<li> Enhance the <a href="../stmt.html">sqlite_stmt</a> virtual table so that it buffers all of its output.
+</ol>
+<p><b>Additional changes in version 3.39.2 (2022-07-21):</b></p>
+<p><ol class='lessindent'>
+<li value='16'> Fix a performance regression in the query planner associated with rearranging
+ the order of FROM clause terms in the presences of a LEFT JOIN.
+<li> Apply fixes for CVE-2022-35737, Chromium bugs 1343348 and 1345947,
+ <a href="https://sqlite.org/forum/forumpost/3607259d3c">forum post 3607259d3c</a>, and
+ other minor problems discovered by internal testing.
+</ol>
+<p><b>Additional changes in version 3.39.3 (2022-09-05):</b></p>
+<p><ol class='lessindent'>
+<li value='18'> Use a statement journal on DML statement affecting two or more database
+ rows if the statement makes use of a SQL functions that might abort. See
+ <a href="https://sqlite.org/forum/forumpost/9b9e4716c0d7bbd1">forum thread 9b9e4716c0d7bbd1</a>.
+<li> Use a mutex to protect the <a href="../pragma.html#pragma_temp_store_directory">PRAGMA temp_store_directory</a> and
+ <a href="../pragma.html#pragma_data_store_directory">PRAGMA data_store_directory</a> statements, even though they are deprecated and
+ documented as not being threadsafe. See
+ <a href="https://sqlite.org/forum/forumpost/719a11e1314d1c70">forum post 719a11e1314d1c70</a>.
+<li> Other bug and warning fixes. See the
+ <a href="https://sqlite.org/src/timeline?p=version-3.39.3&bt=version-3.39.2">timeline</a>
+ for details.
+</ol>
+<p><b>Additional changes in version 3.39.4 (2022-09-29):</b></p>
+<p><ol class='lessindent'>
+<li value='21'> Fix the build on Windows so that it works with -DSQLITE_OMIT_AUTOINIT
+<li> Fix a long-standing problem in the btree balancer that might, in rare cases,
+ cause database corruption if the application uses an
+ <a href="../c3ref/pcache_methods2.html">application-defined page cache</a>.
+<li> Enhance <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> so that it disallows <a href="../lang_createtrigger.html">CREATE TRIGGER</a>
+ statements if one or more of the statements in the body of the trigger write
+ into <a href="../vtab.html#xshadowname">shadow tables</a>.
+<li> Fix a possible integer overflow in the size computation for a memory allocation
+ in FTS3.
+<li> Fix a misuse of the <a href="../c3ref/get_auxdata.html">sqlite3_set_auxdata()</a> interface in the
+ <a href="https://sqlite.org/src/dir/ext/icu">ICU Extension</a>.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-09-29 15:55:41 a29f9949895322123f7c38fbe94c649a9d6e6c9cd0c3b41c96d694552f26b309
+<li>SHA3-256 for sqlite3.c: f65082298127e2ddae6539beb94f5204b591df64ba2c7da83c7d0faffd6959d8
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_0.html b/www/releaselog/3_3_0.html
new file mode 100644
index 0000000..d3ebe60
--- /dev/null
+++ b/www/releaselog/3_3_0.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.0 On 2006-01-11</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.0 On 2006-01-11</h2><p><ol class='lessindent'>
+<li>CHECK constraints</li>
+<li>IF EXISTS and IF NOT EXISTS clauses on CREATE/DROP TABLE/INDEX.</li>
+<li>DESC indices</li>
+<li>More efficient encoding of boolean values resulting in smaller database
+files</li>
+<li>More aggressive <a href="../compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a></li>
+<li>Separate INTEGER and REAL affinity</li>
+<li>Added a virtual function layer for the OS interface</li>
+<li>"exists" method added to the TCL interface</li>
+<li>Improved response to out-of-memory errors</li>
+<li>Database cache can be optionally shared between connections
+in the same thread</li>
+<li>Optional READ UNCOMMITTED isolation (instead of the default
+isolation level of SERIALIZABLE) and table level locking when
+database connections share a common cache.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_1.html b/www/releaselog/3_3_1.html
new file mode 100644
index 0000000..2636b78
--- /dev/null
+++ b/www/releaselog/3_3_1.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.1 On 2006-01-16</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.1 On 2006-01-16</h2><p><ol class='lessindent'>
+<li>Countless bug fixes</li>
+<li>Speed improvements</li>
+<li>Database connections can now be used by multiple threads, not just
+the thread in which they were created.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_10.html b/www/releaselog/3_3_10.html
new file mode 100644
index 0000000..a1d071c
--- /dev/null
+++ b/www/releaselog/3_3_10.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.10 On 2007-01-09</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.10 On 2007-01-09</h2><p><ol class='lessindent'>
+<li>Fix bugs in the implementation of the new
+<a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> API
+that can lead to segfaults.</li>
+<li>Fix 1-second round-off errors in the
+strftime() function</li>
+<li>Enhance the Windows OS layer to provide detailed error codes</li>
+<li>Work around a win2k problem so that SQLite can use single-character
+database file names</li>
+<li>The
+<a href="../pragma.html#pragma_user_version">user_version</a> and
+<a href="../pragma.html#pragma_schema_version">schema_version</a> pragmas
+correctly set their column names in the result set</li>
+<li>Documentation updates</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_11.html b/www/releaselog/3_3_11.html
new file mode 100644
index 0000000..586dd5f
--- /dev/null
+++ b/www/releaselog/3_3_11.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.11 On 2007-01-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.11 On 2007-01-22</h2><p><ol class='lessindent'>
+<li>Fix another bug in the implementation of the new
+<a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a> API.
+We'll get it right eventually...</li>
+<li>Fix a bug in the IS NULL optimization that was added in version 3.3.9 -
+the bug was causing incorrect results on certain LEFT JOINs that included
+in the WHERE clause an IS NULL constraint for the right table of the
+LEFT JOIN.</li>
+<li>Make AreFileApisANSI() a no-op macro in WinCE since WinCE does not
+support this function.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_12.html b/www/releaselog/3_3_12.html
new file mode 100644
index 0000000..df19967
--- /dev/null
+++ b/www/releaselog/3_3_12.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.12 On 2007-01-27</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.12 On 2007-01-27</h2><p><ol class='lessindent'>
+<li>Fix another bug in the IS NULL optimization that was added in
+version 3.3.9.</li>
+<li>Fix an assertion fault that occurred on deeply nested views.</li>
+<li>Limit the amount of output that
+<a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>
+generates.</li>
+<li>Minor syntactic changes to support a wider variety of compilers.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_13.html b/www/releaselog/3_3_13.html
new file mode 100644
index 0000000..f2cdfe9
--- /dev/null
+++ b/www/releaselog/3_3_13.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.13 On 2007-02-13</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.13 On 2007-02-13</h2><p><ol class='lessindent'>
+<li>Add a "fragmentation" measurement in the output of sqlite3_analyzer.</li>
+<li>Add the COLLATE operator used to explicitly set the collating sequence
+used by an expression. This feature is considered experimental pending
+additional testing.</li>
+<li>Allow up to 64 tables in a join - the old limit was 32.</li>
+<li>Added two new experimental functions:
+<a href="../lang_expr.html#randomblobFunc">randomBlob()</a> and
+<a href="../lang_expr.html#hexFunc">hex()</a>.
+Their intended use is to facilitate generating
+<a href="http://en.wikipedia.org/wiki/UUID">UUIDs</a>.
+</li>
+<li>Fix a problem where
+<a href="../pragma.html#pragma_count_changes">PRAGMA count_changes</a> was
+causing incorrect results for updates on tables with triggers</li>
+<li>Fix a bug in the ORDER BY clause optimizer for joins where the
+left-most table in the join is constrained by a UNIQUE index.</li>
+<li>Fixed a bug in the "copy" method of the TCL interface.</li>
+<li>Bug fixes in fts1 and fts2 modules.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_14.html b/www/releaselog/3_3_14.html
new file mode 100644
index 0000000..3a7b344
--- /dev/null
+++ b/www/releaselog/3_3_14.html
@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.14 On 2007-04-02</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.14 On 2007-04-02</h2><p><ol class='lessindent'>
+<li>Fix a bug (ticket #2273)
+ that could cause a segfault when the IN operator
+ is used one term of a two-column index and the right-hand side of
+ the IN operator contains a NULL.</li>
+<li>Added a new OS interface method for determining the sector size
+ of underlying media: sqlite3OsSectorSize().</li>
+<li>A new algorithm for statements of the form
+ INSERT INTO <i>table1</i> SELECT * FROM <i>table2</i>
+ is faster and reduces fragmentation. VACUUM uses statements of
+ this form and thus runs faster and defragments better.</li>
+<li>Performance enhancements through reductions in disk I/O:
+<ol type='a'>
+ <li>Do not read the last page of an overflow chain when
+ deleting the row - just add that page to the freelist.</li>
+ <li>Do not store pages being deleted in the
+ rollback journal.</li>
+ <li>Do not read in the (meaningless) content of
+ pages extracted from the freelist.</li>
+ <li>Do not flush the page cache (and thus avoiding
+ a cache refill) unless another process changes the underlying
+ database file.</li>
+ <li>Truncate rather than delete the rollback journal when committing
+ a transaction in exclusive access mode, or when committing the TEMP
+ database.</li>
+</ol></li>
+<li>Added support for exclusive access mode using
+ <a href="../pragma.html#pragma_locking_mode">
+ "PRAGMA locking_mode=EXCLUSIVE"</a></li>
+<li>Use heap space instead of stack space for large buffers in the
+ pager - useful on embedded platforms with stack-space
+ limitations.</li>
+<li>Add a makefile target "sqlite3.c" that builds an amalgamation containing
+ the core SQLite library C code in a single file.</li>
+<li>Get the library working correctly when compiled
+ with GCC option "-fstrict-aliasing".</li>
+<li>Removed the vestigal SQLITE_PROTOCOL error.</li>
+<li>Improvements to test coverage, other minor bugs fixed,
+ memory leaks plugged,
+ code refactored and/or recommended in places for easier reading.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_15.html b/www/releaselog/3_3_15.html
new file mode 100644
index 0000000..bd7fdd1
--- /dev/null
+++ b/www/releaselog/3_3_15.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.15 On 2007-04-09</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.15 On 2007-04-09</h2><p><ol class='lessindent'>
+<li>Fix a bug introduced in 3.3.14 that caused a rollback of
+ CREATE TEMP TABLE to leave the database connection wedged.</li>
+<li>Fix a bug that caused an extra NULL row to be returned when
+ a descending query was interrupted by a change to the database.</li>
+<li>The FOR EACH STATEMENT clause on a trigger now causes a syntax
+ error. It used to be silently ignored.</li>
+<li>Fix an obscure and relatively harmless problem that might have caused
+ a resource leak following an I/O error.</li>
+<li>Many improvements to the test suite. Test coverage now exceeded 98%</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_16.html b/www/releaselog/3_3_16.html
new file mode 100644
index 0000000..da918a9
--- /dev/null
+++ b/www/releaselog/3_3_16.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.16 On 2007-04-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.16 On 2007-04-18</h2><p><ol class='lessindent'>
+<li>Fix a bug that caused VACUUM to fail if NULLs appeared in a
+ UNIQUE column.</li>
+<li>Reinstate performance improvements that were added in
+ <a href="../releaselog/3_3_14.html">Version 3.3.14</a>
+ but regressed in <a href="../releaselog/3_3_15.html">Version 3.3.15</a>.</li>
+<li>Fix problems with the handling of ORDER BY expressions on
+ compound SELECT statements in subqueries.</li>
+<li>Fix a potential segfault when destroying locks on WinCE in
+ a multi-threaded environment.</li>
+<li>Documentation updates.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_17.html b/www/releaselog/3_3_17.html
new file mode 100644
index 0000000..208e57f
--- /dev/null
+++ b/www/releaselog/3_3_17.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.17 On 2007-04-25</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.17 On 2007-04-25</h2><p><ol class='lessindent'>
+<li>When the "write_version" value of the database header is larger than
+ what the library understands, make the database read-only instead of
+ unreadable.</li>
+<li>Other minor bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_2.html b/www/releaselog/3_3_2.html
new file mode 100644
index 0000000..b6aa845
--- /dev/null
+++ b/www/releaselog/3_3_2.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.2 On 2006-01-24</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.2 On 2006-01-24</h2><p><ol class='lessindent'>
+<li>Bug fixes and speed improvements. Improved test coverage.</li>
+<li>Changes to the OS-layer interface: mutexes must now be recursive.</li>
+<li>Discontinue the use of thread-specific data for out-of-memory
+exception handling</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_3.html b/www/releaselog/3_3_3.html
new file mode 100644
index 0000000..fb6d121
--- /dev/null
+++ b/www/releaselog/3_3_3.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.3 On 2006-01-31</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.3 On 2006-01-31</h2><p><ol class='lessindent'>
+<li>Removed support for an ON CONFLICT clause on CREATE INDEX - it never
+worked correctly so this should not present any backward compatibility
+problems.</li>
+<li>Authorizer callback now notified of ALTER TABLE ADD COLUMN commands</li>
+<li>After any changes to the TEMP database schema, all prepared statements
+are invalidated and must be recreated using a new call to
+sqlite3_prepare()</li>
+<li>Other minor bug fixes in preparation for the first stable release
+of version 3.3</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_4.html b/www/releaselog/3_3_4.html
new file mode 100644
index 0000000..5cea1e7
--- /dev/null
+++ b/www/releaselog/3_3_4.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.4 On 2006-02-11</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.4 On 2006-02-11</h2><p><ol class='lessindent'>
+<li>Fix a blunder in the Unix mutex implementation that can lead to
+deadlock on multithreaded systems.</li>
+<li>Fix an alignment problem on 64-bit machines</li>
+<li>Added the fullfsync pragma.</li>
+<li>Fix an optimizer bug that could have caused some unusual LEFT OUTER JOINs
+to give incorrect results.</li>
+<li>The SUM function detects integer overflow and converts to accumulating
+an approximate result using floating point numbers</li>
+<li>Host parameter names can begin with '@' for compatibility with SQL Server.
+</li>
+<li>Other miscellaneous bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_5.html b/www/releaselog/3_3_5.html
new file mode 100644
index 0000000..d89e8e6
--- /dev/null
+++ b/www/releaselog/3_3_5.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.5 On 2006-04-05</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.5 On 2006-04-05</h2><p><ol class='lessindent'>
+<li>CHECK constraints use conflict resolution algorithms correctly.</li>
+<li>The SUM() function throws an error on integer overflow.</li>
+<li>Choose the column names in a compound query from the left-most SELECT
+ instead of the right-most.</li>
+<li>The sqlite3_create_collation() function
+ honors the SQLITE_UTF16_ALIGNED flag.</li>
+<li>SQLITE_SECURE_DELETE compile-time option causes deletes to overwrite
+ old data with zeros.</li>
+<li>Detect integer overflow in abs().</li>
+<li>The random() function provides 64 bits of randomness instead of
+ only 32 bits.</li>
+<li>Parser detects and reports automaton stack overflow.</li>
+<li>Change the round() function to return REAL instead of TEXT.</li>
+<li>Allow WHERE clause terms on the left table of a LEFT OUTER JOIN to
+ contain aggregate subqueries.</li>
+<li>Skip over leading spaces in text to numeric conversions.</li>
+<li>Various minor bug and documentation typo fixes and
+ performance enhancements.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_6.html b/www/releaselog/3_3_6.html
new file mode 100644
index 0000000..df1f317
--- /dev/null
+++ b/www/releaselog/3_3_6.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.6 On 2006-06-06</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.6 On 2006-06-06</h2><p><ol class='lessindent'>
+<li>Plays better with virus scanners on Windows</li>
+<li>Faster :memory: databases</li>
+<li>Fix an obscure segfault in UTF-8 to UTF-16 conversions</li>
+<li>Added driver for OS/2</li>
+<li>Correct column meta-information returned for aggregate queries</li>
+<li>Enhanced output from EXPLAIN QUERY PLAN</li>
+<li>LIMIT 0 now works on subqueries</li>
+<li>Bug fixes and performance enhancements in the query optimizer</li>
+<li>Correctly handle NULL filenames in ATTACH and DETACH</li>
+<li>Improved syntax error messages in the parser</li>
+<li>Fix type coercion rules for the IN operator</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_7.html b/www/releaselog/3_3_7.html
new file mode 100644
index 0000000..9acfce9
--- /dev/null
+++ b/www/releaselog/3_3_7.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.7 On 2006-08-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.7 On 2006-08-12</h2><p><ol class='lessindent'>
+<li>Added support for virtual tables (beta)</li>
+<li>Added support for dynamically loaded extensions (beta)</li>
+<li>The
+<a href="../c3ref/interrupt.html">sqlite3_interrupt()</a>
+routine can be called for a different thread</li>
+<li>Added the <a href="../lang_expr.html#match">MATCH</a> operator.</li>
+<li>The default file format is now 1.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_8.html b/www/releaselog/3_3_8.html
new file mode 100644
index 0000000..9a679ef
--- /dev/null
+++ b/www/releaselog/3_3_8.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.8 On 2006-10-09</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.8 On 2006-10-09</h2><p><ol class='lessindent'>
+<li>Support for full text search using the FTS1 module (beta)</li>
+<li>Added Mac OS X locking patches (beta - disabled by default)</li>
+<li>Introduce extended error codes and add error codes for various
+kinds of I/O errors.</li>
+<li>Added support for IF EXISTS on CREATE/DROP TRIGGER/VIEW</li>
+<li>Fix the regression test suite so that it works with Tcl8.5</li>
+<li>Enhance sqlite3_set_authorizer() to provide notification of calls to
+ SQL functions.</li>
+<li>Added experimental API: sqlite3_auto_extension()</li>
+<li>Various minor bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_3_9.html b/www/releaselog/3_3_9.html
new file mode 100644
index 0000000..9a4c788
--- /dev/null
+++ b/www/releaselog/3_3_9.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.3.9 On 2007-01-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.3.9 On 2007-01-04</h2><p><ol class='lessindent'>
+<li>Fix bugs in pager.c that could lead to database corruption if two
+processes both try to recover a hot journal at the same instant</li>
+<li>Added the <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>
+API.</li>
+<li>Fixed the ".dump" command in the command-line shell to show
+indices, triggers and views again.</li>
+<li>Change the table_info pragma so that it returns NULL for the default
+value if there is no default value</li>
+<li>Support for non-ASCII characters in win95 filenames</li>
+<li>Query optimizer enhancements:
+<ol type='a'>
+ <li>Optimizer does a better job of using indices to satisfy ORDER BY
+ clauses that sort on the integer primary key</li>
+ <li>Use an index to satisfy an IS NULL operator in the WHERE clause</li>
+ <li>Fix a bug that was causing the optimizer to miss an OR optimization
+ opportunity</li>
+ <li>The optimizer has more freedom to reorder tables in the FROM clause
+ even in there are LEFT joins.</li>
+</ol>
+<li>Extension loading supported added to WinCE</li>
+<li>Allow constraint names on the DEFAULT clause in a table definition</li>
+<li>Added the ".bail" command to the command-line shell</li>
+<li>Make CSV (comma separate value) output from the command-line shell
+more closely aligned to accepted practice</li>
+<li>Experimental FTS2 module added</li>
+<li>Use sqlite3_mprintf() instead of strdup() to avoid libc dependencies</li>
+<li>VACUUM uses a temporary file in the official TEMP folder, not in the
+same directory as the original database</li>
+<li>The prefix on temporary filenames on Windows is changed from "sqlite"
+to "etilqs".</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_40_0.html b/www/releaselog/3_40_0.html
new file mode 100644
index 0000000..7dde77a
--- /dev/null
+++ b/www/releaselog/3_40_0.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.40.0 On 2022-11-16</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.40.0 On 2022-11-16</h2><p><ol class='lessindent'>
+<li> Add support for compiling <a href="https://sqlite.org/wasm">SQLite to WASM</a>
+ and running it in web browsers. NB: The WASM build and its interfaces
+ are considered "beta" and are subject to minor changes if the need
+ arises. We anticipate finalizing the interface for the next release.
+<li> Add the <a href="../recovery.html">recovery extension</a> that might be able to recover some content
+ from a corrupt database file.
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Recognize <a href="../queryplanner.html#covidx">covering indexes</a> on tables with more than 63 columns where
+ columns beyond the 63rd column are used in the query and/or are
+ referenced by the index.
+ <li> Extract the values of expressions contained within <a href="../expridx.html">expression indexes</a>
+ where practical, rather than recomputing the expression.
+ <li> The NOT NULL and IS NULL operators (and their equivalents) avoid
+ loading the content of large strings and BLOB values from disk.
+ <li> Avoid materializing a view on which a full scan is performed
+ exactly once. Use and discard the rows of the view as they are computed.
+ <li> Allow flattening of a subquery that is the right-hand operand of
+ a LEFT JOIN in an aggregate query.
+ </ol>
+<li> A new typedef named <a href="../c3ref/filename.html">sqlite3_filename</a> is added and used to represent
+ the name of a database file. Various interfaces are
+ modified to use the new typedef instead of "char*". This interface
+ change should be fully backwards compatible, though it might cause
+ (harmless) compiler warnings when rebuilding some legacy applications.
+<li> Add the <a href="../c3ref/value_blob.html">sqlite3_value_encoding()</a> interface.
+<li> Security enhancement: <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> is augmented to prohibit
+ changing the <a href="../pragma.html#pragma_schema_version">schema_version</a>. The schema_version
+ becomes read-only in defensive mode.
+<li> Enhancements to the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> statement:
+ <ol type="a">
+ <li> Columns in non-STRICT tables with TEXT affinity should not contain numeric values.
+ <li> Columns in non-STRICT tables with NUMERIC affinity should not
+ contain TEXT values that could be converted into numbers.
+ <li> Verify that the rows of a <a href="../withoutrowid.html">WITHOUT ROWID</a> table are in the correct order.
+ </ol>
+<li> Enhance the <a href="../lang_vacuum.html#vacuuminto">VACUUM INTO</a> statement so that it honors the
+ <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting.
+<li> Enhance the <a href="../c3ref/strglob.html">sqlite3_strglob()</a> and <a href="../c3ref/strlike.html">sqlite3_strlike()</a> APIs so that they are able
+ to accept NULL pointers for their string parameters and still generate a sensible
+ result.
+<li> Provide the new <a href="../compile.html#max_allocation_size">SQLITE_MAX_ALLOCATION_SIZE</a> compile-time option for limiting
+ the size of memory allocations.
+<li> Change the algorithm used by SQLite's built-in pseudo-random number generator (PRNG)
+ from RC4 to Chacha20.
+<li> Allow two or more indexes to have the same name as long as they are all in
+ separate schemas.
+<li> Miscellaneous performance optimizations result in about 1% fewer CPU cycles
+ used on typical workloads.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-11-16 12:10:08 89c459e766ea7e9165d0beeb124708b955a4950d0f4792f457465d71b158d318
+<li>SHA3-256 for sqlite3.c: ab8da6bc754642989e67d581f26683dc705b068cea671970f0a7d32cfacbad19
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_40_1.html b/www/releaselog/3_40_1.html
new file mode 100644
index 0000000..c8e1d89
--- /dev/null
+++ b/www/releaselog/3_40_1.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.40.1 On 2022-12-28</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.40.1 On 2022-12-28</h2><p><b>Changes in version 3.40.0 (2022-11-16):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add support for compiling <a href="https://sqlite.org/wasm">SQLite to WASM</a>
+ and running it in web browsers. NB: The WASM build and its interfaces
+ are considered "beta" and are subject to minor changes if the need
+ arises. We anticipate finalizing the interface for the next release.
+<li> Add the <a href="../recovery.html">recovery extension</a> that might be able to recover some content
+ from a corrupt database file.
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Recognize <a href="../queryplanner.html#covidx">covering indexes</a> on tables with more than 63 columns where
+ columns beyond the 63rd column are used in the query and/or are
+ referenced by the index.
+ <li> Extract the values of expressions contained within <a href="../expridx.html">expression indexes</a>
+ where practical, rather than recomputing the expression.
+ <li> The NOT NULL and IS NULL operators (and their equivalents) avoid
+ loading the content of large strings and BLOB values from disk.
+ <li> Avoid materializing a view on which a full scan is performed
+ exactly once. Use and discard the rows of the view as they are computed.
+ <li> Allow flattening of a subquery that is the right-hand operand of
+ a LEFT JOIN in an aggregate query.
+ </ol>
+<li> A new typedef named <a href="../c3ref/filename.html">sqlite3_filename</a> is added and used to represent
+ the name of a database file. Various interfaces are
+ modified to use the new typedef instead of "char*". This interface
+ change should be fully backwards compatible, though it might cause
+ (harmless) compiler warnings when rebuilding some legacy applications.
+<li> Add the <a href="../c3ref/value_blob.html">sqlite3_value_encoding()</a> interface.
+<li> Security enhancement: <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> is augmented to prohibit
+ changing the <a href="../pragma.html#pragma_schema_version">schema_version</a>. The schema_version
+ becomes read-only in defensive mode.
+<li> Enhancements to the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> statement:
+ <ol type="a">
+ <li> Columns in non-STRICT tables with TEXT affinity should not contain numeric values.
+ <li> Columns in non-STRICT tables with NUMERIC affinity should not
+ contain TEXT values that could be converted into numbers.
+ <li> Verify that the rows of a <a href="../withoutrowid.html">WITHOUT ROWID</a> table are in the correct order.
+ </ol>
+<li> Enhance the <a href="../lang_vacuum.html#vacuuminto">VACUUM INTO</a> statement so that it honors the
+ <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting.
+<li> Enhance the <a href="../c3ref/strglob.html">sqlite3_strglob()</a> and <a href="../c3ref/strlike.html">sqlite3_strlike()</a> APIs so that they are able
+ to accept NULL pointers for their string parameters and still generate a sensible
+ result.
+<li> Provide the new <a href="../compile.html#max_allocation_size">SQLITE_MAX_ALLOCATION_SIZE</a> compile-time option for limiting
+ the size of memory allocations.
+<li> Change the algorithm used by SQLite's built-in pseudo-random number generator (PRNG)
+ from RC4 to Chacha20.
+<li> Allow two or more indexes to have the same name as long as they are all in
+ separate schemas.
+<li> Miscellaneous performance optimizations result in about 1% fewer CPU cycles
+ used on typical workloads.
+</ol>
+<p><b>Additional changes in version 3.40.1 (2022-12-28):</b></p>
+<p><ol class='lessindent'>
+<li value='14'> Fix the <a href="../cli.html#safemode">--safe command-line option</a> to the <a href="../cli.html">CLI</a> such that it correctly disallows the
+ use of SQL functions like writefile() that can cause harmful side-effects.
+<li> Fix a potential infinite loop in the <a href="../malloc.html#memsys5">memsys5</a> alternative memory allocator. This
+ bug was introduced by a performance optimization in version 3.39.0.
+<li> Various other obscure fixes.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24
+<li>SHA3-256 for sqlite3.c: 4d6800e9032ff349376fe612e422b49ba5eb4e378fac0b3e405235d09dd366ab
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_4_0.html b/www/releaselog/3_4_0.html
new file mode 100644
index 0000000..b60ad22
--- /dev/null
+++ b/www/releaselog/3_4_0.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.4.0 On 2007-06-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.4.0 On 2007-06-18</h2><p><ol class='lessindent'>
+<li>Fix a bug that can lead to database corruption if an <a href="../rescode.html#busy">SQLITE_BUSY</a> error
+ occurs in the middle of an explicit transaction and that transaction
+ is later committed. Ticket #2409.
+<li>Fix a bug that can lead to database corruption if autovacuum mode is
+ on and a malloc() failure follows a CREATE TABLE or CREATE INDEX statement
+ which itself follows a cache overflow inside a transaction. See
+ ticket #2418.
+ </li>
+<li>Added explicit <a href="../limits.html">upper bounds</a> on the sizes and
+ quantities of things SQLite can process. This change might cause
+ compatibility problems for
+ applications that use SQLite in the extreme, which is why the current
+ release is 3.4.0 instead of 3.3.18.</li>
+<li>Added support for <a href="../c3ref/blob_open.html">Incremental BLOB I/O</a>.</li>
+<li>Added the <a href="../c3ref/bind_blob.html">sqlite3_bind_zeroblob()</a> API</a>
+ and the <a href="../lang_expr.html#zeroblob">zeroblob()</a> SQL function.</li>
+<li>Added support for <a href="../pragma.html#pragma_incremental_vacuum">
+ Incremental Vacuum</a>.</li>
+<li>Added the SQLITE_MIXED_ENDIAN_64BIT_FLOAT compile-time option to support
+ ARM7 processors with goofy endianness.</li>
+<li>Removed all instances of sprintf() and strcpy() from the core library.</li>
+<li>Added support for
+ <a href="http://www.icu-project.org/">International Components for Unicode (ICU)</a>
+ to the full-text search extensions.
+<li>In the Windows OS driver, reacquire a SHARED lock if an attempt to
+ acquire an EXCLUSIVE lock fails. Ticket #2354</li>
+<li>Fix the REPLACE() function so that it returns NULL if the second argument
+ is an empty string. Ticket #2324.</li>
+<li>Document the hazards of type conversions in
+ <a href="../c3ref/column_blob.html">sqlite3_column_blob()</a>
+ and related APIs. Fix unnecessary type conversions. Ticket #2321.</li>
+<li>Internationalization of the TRIM() function. Ticket #2323</li>
+<li>Use memmove() instead of memcpy() when moving between memory regions
+ that might overlap. Ticket #2334</li>
+<li>Fix an optimizer bug involving subqueries in a compound SELECT that has
+ both an ORDER BY and a LIMIT clause. Ticket #2339.</li>
+<li>Make sure the <a href="../c3ref/mprintf.html">sqlite3_snprintf()</a>
+ interface does not zero-terminate the buffer if the buffer size is
+ less than 1. Ticket #2341</li>
+<li>Fix the built-in printf logic so that it prints "NaN" not "Inf" for
+ floating-point NaNs. Ticket #2345</li>
+<li>When converting BLOB to TEXT, use the text encoding of the main database.
+ Ticket #2349</li>
+<li>Keep the full precision of integers (if possible) when casting to
+ NUMERIC. Ticket #2364</li>
+<li>Fix a bug in the handling of UTF16 codepoint 0xE000</li>
+<li>Consider explicit collate clauses when matching WHERE constraints
+ to indices in the query optimizer. Ticket #2391</li>
+<li>Fix the query optimizer to correctly handle constant expressions in
+ the ON clause of a LEFT JOIN. Ticket #2403</li>
+<li>Fix the query optimizer to handle rowid comparisons to NULL
+ correctly. Ticket #2404</li>
+<li>Fix many potential segfaults that could be caused by malicious SQL
+ statements.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_4_1.html b/www/releaselog/3_4_1.html
new file mode 100644
index 0000000..d281931
--- /dev/null
+++ b/www/releaselog/3_4_1.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.4.1 On 2007-07-20</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.4.1 On 2007-07-20</h2><p><ol class='lessindent'>
+<li>Fix a bug in <a href="../lang_vacuum.html">VACUUM</a> that can lead to
+ database corruptio if two
+ processes are connected to the database at the same time and one
+ VACUUMs then the other then modifies the database.</li>
+<li>The expression "+column" is now considered the same as "column"
+ when computing the collating sequence to use on the expression.</li>
+<li>In the <a href="../tclsqlite.html">TCL language interface</a>,
+ "@variable" instead of "$variable" always binds as a blob.</li>
+<li>Added <a href="../pragma.html#pragma_freelist_count">PRAGMA freelist_count</a>
+ for determining the current size of the freelist.</li>
+<li>The <a href="../pragma.html#pragma_auto_vacuum">
+ PRAGMA auto_vacuum=incremental</a> setting is now persistent.</li>
+<li>Add FD_CLOEXEC to all open files under Unix.</li>
+<li>Fix a bug in the <a href="../optoverview.html#minmax">
+ min()/max() optimization</a> when applied to
+ descending indices.</li>
+<li>Make sure the TCL language interface works correctly with 64-bit
+ integers on 64-bit machines.</li>
+<li>Allow the value -9223372036854775808 as an integer literal in SQL
+ statements.</li>
+<li>Add the capability of "hidden" columns in virtual tables.</li>
+<li>Use the macro SQLITE_PRIVATE (defaulting to "static") on all
+ internal functions in the amalgamation.</li>
+<li>Add pluggable tokenizers and <a href="http://www.icu-project.org/">ICU</a>
+ tokenization support to FTS2</li>
+<li>Other minor bug fixes and documentation enhancements</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_4_2.html b/www/releaselog/3_4_2.html
new file mode 100644
index 0000000..a83f79c
--- /dev/null
+++ b/www/releaselog/3_4_2.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.4.2 On 2007-08-13</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.4.2 On 2007-08-13</h2><p><ol class='lessindent'>
+<li>Fix a database corruption bug that might occur if a ROLLBACK command
+is executed in <a href="../pragma.html#pragma_auto_vacuum">auto-vacuum mode</a>
+and a very small <a href="../c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a> is set.
+Ticket #2565.
+
+<li>Add the ability to run a full regression test with a small
+<a href="../c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit</a>.
+
+<li>Fix other minor problems with using small soft heap limits.
+
+<li>Work-around for
+<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32575">GCC bug 32575</a>.
+
+<li>Improved error detection of misused aggregate functions.
+
+<li>Improvements to the amalgamation generator script so that all symbols
+are prefixed with either SQLITE_PRIVATE or SQLITE_API.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_5_0.html b/www/releaselog/3_5_0.html
new file mode 100644
index 0000000..1fc05c5
--- /dev/null
+++ b/www/releaselog/3_5_0.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.5.0 On 2007-09-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.5.0 On 2007-09-04</h2><p><ol class='lessindent'>
+<li>Redesign the OS interface layer. See
+ <a href="../34to35.html">34to35.html</a> for details.
+ <font color="red">*** Potentially incompatible change ***</font>
+<li>The <a href="../c3ref/release_memory.html">sqlite3_release_memory()</a>, <a href="../c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>,
+ and <a href="../c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> interfaces now work cross all
+ threads in the process, not just the single thread in which they
+ are invoked.
+ <font color="red">*** Potentially incompatible change ***</font>
+<li>Added the <a href="../c3ref/open.html">sqlite3_open_v2()</a> interface.
+<li>Reimplemented the memory allocation subsystem and made it
+ replaceable at compile-time.
+<li>Created a new mutex subsystem and made it replicable at
+ compile-time.
+<li>The same database connection may now be used simultaneously by
+ separate threads.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_5_1.html b/www/releaselog/3_5_1.html
new file mode 100644
index 0000000..e9f3979
--- /dev/null
+++ b/www/releaselog/3_5_1.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.5.1 On 2007-10-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.5.1 On 2007-10-04</h2><p><ol class='lessindent'>
+<li><i><b>Nota Bene:</b> We are not using terms "alpha" or "beta" on this
+ release because the code is stable and because if we use those terms,
+ nobody will upgrade. However, we still reserve the right to make
+ incompatible changes to the new VFS interface in future releases.</i></li>
+
+<li>Fix a bug in the handling of <a href="../rescode.html#full">SQLITE_FULL</a> errors that could lead
+ to database corruption. Ticket #2686.
+<li>The test_async.c drive now does full file locking and works correctly
+ when used simultaneously by multiple processes on the same database.
+<li>The CLI ignores whitespace (including comments) at the end of lines
+<li>Make sure the query optimizer checks dependencies on all terms of
+ a compound SELECT statement. Ticket #2640.
+<li>Add demonstration code showing how to build a VFS for a raw
+ mass storage without a filesystem.
+<li>Added an output buffer size parameter to the xGetTempname() method
+ of the VFS layer.
+<li>Sticky <a href="../rescode.html#full">SQLITE_FULL</a> or <a href="../rescode.html#ioerr">SQLITE_IOERR</a> errors in the pager are reset
+ when a new transaction is started.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_5_2.html b/www/releaselog/3_5_2.html
new file mode 100644
index 0000000..696b5c8
--- /dev/null
+++ b/www/releaselog/3_5_2.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.5.2 On 2007-11-05</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.5.2 On 2007-11-05</h2><p><ol class='lessindent'>
+<li>Dropped support for the <a href="../compile.html#omitfeatures">SQLITE_OMIT_MEMORY_ALLOCATION</a> compile-time
+option.
+<li>Always open files using FILE_FLAG_RANDOM_ACCESS under Windows.
+<li>The 3rd parameter of the built-in SUBSTR() function is now optional.
+<li>Bug fix: do not invoke the authorizer when reparsing the schema after
+a schema change.
+<li>Added the experimental malloc-free memory allocator in mem3.c.
+<li>Virtual machine stores 64-bit integer and floating point constants
+in binary instead of text for a performance boost.
+<li>Fix a race condition in test_async.c.
+<li>Added the ".timer" command to the CLI
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_5_3.html b/www/releaselog/3_5_3.html
new file mode 100644
index 0000000..d02c839
--- /dev/null
+++ b/www/releaselog/3_5_3.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.5.3 On 2007-11-27</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.5.3 On 2007-11-27</h2><p><ol class='lessindent'>
+<li>Move website and documentation files out of the source tree into
+a <a href="http://www.sqlite.org/docsrc/">separate CM system</a>.
+<li>Fix a long-standing bug in INSERT INTO ... SELECT ... statements
+where the SELECT is compound.
+<li>Fix a long-standing bug in RAISE(IGNORE) as used in BEFORE triggers.
+<li>Fixed the operator precedence for the ~ operator.
+<li>On Win32, do not return an error when attempting to delete a file
+that does not exist.
+<li>Allow collating sequence names to be quoted.
+<li>Modify the TCL interface to use <a href="../c3ref/prepare.html">sqlite3_prepare_v2()</a>.
+<li>Fix multiple bugs that can occur following a malloc() failure.
+<li><a href="../c3ref/step.html">sqlite3_step()</a> returns <a href="../rescode.html#misuse">SQLITE_MISUSE</a> instead of crashing when
+called with a NULL parameter.
+<li>FTS3 now uses the SQLite memory allocator exclusively. The
+FTS3 amalgamation can now be appended to the SQLite amalgamation to
+generate a super-amalgamation containing both.
+<li>The DISTINCT keyword now will sometimes use an INDEX if an
+appropriate index is available and the optimizer thinks its use
+might be advantageous.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_5_4.html b/www/releaselog/3_5_4.html
new file mode 100644
index 0000000..fcf98da
--- /dev/null
+++ b/www/releaselog/3_5_4.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.5.4 On 2007-12-14</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.5.4 On 2007-12-14</h2><p><ol class='lessindent'>
+<li>Fix a critical bug in UPDATE or DELETE that occurs when an
+OR REPLACE clause or a trigger causes rows in the same table to
+be deleted as side effects. (See ticket #2832.) The most likely
+result of this bug is a segmentation fault, though database
+corruption is a possibility.</li>
+<li>Bring the processing of ORDER BY into compliance with the
+SQL standard for case where a result alias and a table column name
+are in conflict. Correct behavior is to prefer the result alias.
+Older versions of SQLite incorrectly picked the table column.
+(See ticket #2822.)</li>
+<li>The <a href="../lang_vacuum.html">VACUUM</a> command preserves
+the setting of the
+<a href="../pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a>.
+(Ticket #2804.)</li>
+<li>Productize and officially support the group_concat() SQL function.</li>
+<li>Better optimization of some IN operator expressions.</li>
+<li>Add the ability to change the
+<a href="../pragma.html#pragma_auto_vacuum">auto_vacuum</a> status of a
+database by setting the auto_vaccum pragma and VACUUMing the database.</li>
+<li>Prefix search in FTS3 is much more efficient.</li>
+<li>Relax the SQL statement length restriction in the CLI so that
+the ".dump" output of databases with very large BLOBs and strings can
+be played back to recreate the database.</li>
+<li>Other small bug fixes and optimizations.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_5_5.html b/www/releaselog/3_5_5.html
new file mode 100644
index 0000000..187856a
--- /dev/null
+++ b/www/releaselog/3_5_5.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.5.5 On 2008-01-31</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.5.5 On 2008-01-31</h2><p><ol class='lessindent'>
+<li>Convert the underlying virtual machine to be a register-based machine
+rather than a stack-based machine. The only user-visible change
+is in the output of EXPLAIN.</li>
+<li>Add the build-in RTRIM collating sequence.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_5_6.html b/www/releaselog/3_5_6.html
new file mode 100644
index 0000000..d08df81
--- /dev/null
+++ b/www/releaselog/3_5_6.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.5.6 On 2008-02-06</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.5.6 On 2008-02-06</h2><p><ol class='lessindent'>
+<li>Fix a bug (ticket #2913)
+that prevented virtual tables from working in a LEFT JOIN.
+The problem was introduced into shortly before the 3.5.5 release.</li>
+<li>Bring the OS/2 porting layer up-to-date.</li>
+<li>Add the new <a href="../c3ref/result_blob.html">sqlite3_result_error_code()</a> API and use it in the
+implementation of <a href="../lang_attach.html">ATTACH</a> so that proper error codes are returned
+when an <a href="../lang_attach.html">ATTACH</a> fails.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_5_7.html b/www/releaselog/3_5_7.html
new file mode 100644
index 0000000..ebad0b0
--- /dev/null
+++ b/www/releaselog/3_5_7.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.5.7 On 2008-03-17</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.5.7 On 2008-03-17</h2><p><ol class='lessindent'>
+<li>Fix a bug (ticket #2927) in the register allocation for
+compound selects - introduced by the new VM code in version 3.5.5.</li>
+<li>ALTER TABLE uses double-quotes instead of single-quotes for quoting
+filenames.</li>
+<li>Use the WHERE clause to reduce the size of a materialized VIEW in
+an UPDATE or DELETE statement. (Optimization)</li>
+<li>Do not apply the flattening optimization if the outer query is an
+aggregate and the inner query contains ORDER BY. (Ticket #2943)</li>
+<li>Additional OS/2 updates</li>
+<li>Added an experimental power-of-two, first-fit memory allocator.</li>
+<li>Remove all instances of sprintf() from the code</li>
+<li>Accept "Z" as the zulu timezone at the end of date strings</li>
+<li>Fix a bug in the LIKE optimizer that occurs when the last character
+before the first wildcard is an upper-case "Z"</li>
+<li>Added the "bitvec" object for keeping track of which pages have
+been journalled. Improves speed and reduces memory consumption, especially
+for large database files.</li>
+<li>Get the SQLITE_ENABLE_LOCKING_STYLE macro working again on Mac OS X.</li>
+<li>Store the statement journal in the temporary file directory instead of
+collocated with the database file.</li>
+<li>Many improvements and cleanups to the configure script</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_5_8.html b/www/releaselog/3_5_8.html
new file mode 100644
index 0000000..06d2cfe
--- /dev/null
+++ b/www/releaselog/3_5_8.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.5.8 On 2008-04-16</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.5.8 On 2008-04-16</h2><p><ol class='lessindent'>
+<li>Expose SQLite's internal pseudo-random number generator (PRNG)
+ via the <a href="../c3ref/randomness.html">sqlite3_randomness()</a> interface</li>
+<li>New interface <a href="../c3ref/context_db_handle.html">sqlite3_context_db_handle()</a> that returns the
+ <a href="../c3ref/sqlite3.html">database connection</a> handle that has invoked an application-defined
+ SQL function.</li>
+<li>New interface <a href="../c3ref/limit.html">sqlite3_limit()</a> allows size and length limits to be
+ set on a per-connection basis and at run-time.</li>
+<li>Improved crash-robustness: write the database page size into the rollback
+ journal header.</li>
+<li>Allow the <a href="../lang_vacuum.html">VACUUM</a> command to change the page size of a database file.</li>
+<li>The xAccess() method of the VFS is allowed to return -1 to signal
+ a memory allocation error.</li>
+<li>Performance improvement: The OP_IdxDelete opcode uses unpacked records,
+ obviating the need for one OP_MakeRecord opcode call for each index
+ record deleted.</li>
+<li>Performance improvement: Constant subexpressions are factored out of
+ loops.</li>
+<li>Performance improvement: Results of OP_Column are reused rather than
+ issuing multiple OP_Column opcodes.</li>
+<li>Fix a bug in the RTRIM collating sequence.</li>
+<li>Fix a bug in the SQLITE_SECURE_DELETE option that was causing
+ Firefox crashes. Make arrangements to always test SQLITE_SECURE_DELETE
+ prior to each release.</li>
+<li>Other miscellaneous performance enhancements.</li>
+<li>Other miscellaneous minor bug fixes.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_5_9.html b/www/releaselog/3_5_9.html
new file mode 100644
index 0000000..448d814
--- /dev/null
+++ b/www/releaselog/3_5_9.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.5.9 On 2008-05-14</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.5.9 On 2008-05-14</h2><p><ol class='lessindent'>
+<li>Added <em>experimental</em>
+ support for the <a href="../pragma.html#pragma_journal_mode">journal_mode</a> PRAGMA and persistent journal.</li>
+<li><a href="../pragma.html#pragma_journal_mode">Journal mode PERSIST</a> is the default behavior in
+ <a href="../pragma.html#pragma_locking_mode">exclusive locking mode</a>.</li>
+<li>Fix a performance regression on LEFT JOIN (see ticket #3015)
+ that was mistakenly introduced in <a href="../releaselog/3_5_8.html">version 3.5.8</a>.</li>
+<li>Performance enhancement: Reengineer the internal routines used
+ to interpret and render variable-length integers.</li>
+<li>Fix a buffer-overrun problem in <a href="../c3ref/mprintf.html">sqlite3_mprintf()</a> which occurs
+ when a string without a zero-terminator is passed to "%.*s".</li>
+<li>Always convert IEEE floating point NaN values into NULL during
+ processing. (Ticket #3060)</li>
+<li>Make sure that when a connection blocks on a RESERVED lock that
+ it is able to continue after the lock is released. (Ticket #3093)</li>
+<li>The "configure" scripts should now automatically configure Unix
+ systems for large file support. Improved error messages for
+ when large files are encountered and large file support is disabled.</li>
+<li>Avoid cache pages leaks following disk-full or I/O errors</li>
+<li>And, many more minor bug fixes and performance enhancements....</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_0.html b/www/releaselog/3_6_0.html
new file mode 100644
index 0000000..7118943
--- /dev/null
+++ b/www/releaselog/3_6_0.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.0 On 2008-07-16</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.0 On 2008-07-16</h2><p><ol class='lessindent'>
+<li>Modifications to the <a href="../c3ref/vfs.html">virtual file system</a> interface
+ to support a wider range of embedded systems.
+ See <a href="../35to36.html">35to36.html</a> for additional information.
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>All C-preprocessor macros used to control compile-time options
+ now begin with the prefix "SQLITE_". This may require changes to
+ applications that compile SQLite using their own makefiles and with
+ custom compile-time options, hence we mark this as a
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>The SQLITE_MUTEX_APPDEF compile-time option is no longer supported.
+ Alternative mutex implementations can now be added at run-time using
+ the <a href="../c3ref/config.html">sqlite3_config()</a> interface with the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigmutex">SQLITE_CONFIG_MUTEX</a> verb.
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>The handling of IN and NOT IN operators that contain a NULL on their
+ right-hand side expression is brought into compliance with the SQL
+ standard and with other SQL database engines. This is a bug fix,
+ but as it has the potential to break legacy applications that depend
+ on the older buggy behavior, we mark that as a
+ <font color="red">*** Potentially incompatible change ***</font></li>
+<li>The result column names generated for compound subqueries have been
+ simplified to show only the name of the column of the original table and
+ omit the table name. This makes SQLite operate more like other SQL
+ database engines.</li>
+<li>Added the <a href="../c3ref/config.html">sqlite3_config()</a> interface for doing run-time configuration
+ of the entire SQLite library.</li>
+<li>Added the <a href="../c3ref/status.html">sqlite3_status()</a> interface used for querying run-time status
+ information about the overall SQLite library and its subsystems.</li>
+<li>Added the <a href="../c3ref/initialize.html">sqlite3_initialize()</a> and <a href="../c3ref/initialize.html">sqlite3_shutdown()</a> interfaces.</li>
+<li>The <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a> option was added to <a href="../c3ref/open.html">sqlite3_open_v2()</a>.</li>
+<li>Added the <a href="../pragma.html#pragma_page_count">PRAGMA page_count</a> command.</li>
+<li>Added the <a href="../c3ref/next_stmt.html">sqlite3_next_stmt()</a> interface.</li>
+<li>Added a new <a href="../rtree.html">R*Tree virtual table</a></li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_1.html b/www/releaselog/3_6_1.html
new file mode 100644
index 0000000..648b6bd
--- /dev/null
+++ b/www/releaselog/3_6_1.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.1 On 2008-08-06</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.1 On 2008-08-06</h2><p><ol class='lessindent'>
+<li>Added the <a href="../malloc.html#lookaside">lookaside memory allocator</a> for a speed improvement in excess
+ of 15% on some workloads. (Your mileage may vary.)</li>
+<li>Added the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a> verb to <a href="../c3ref/config.html">sqlite3_config()</a> to control
+ the default lookaside configuration.</li>
+<li>Added verbs <a href="../c3ref/c_status_malloc_count.html#sqlitestatuspagecachesize">SQLITE_STATUS_PAGECACHE_SIZE</a> and
+ <a href="../c3ref/c_status_malloc_count.html#sqlitestatusscratchsize">SQLITE_STATUS_SCRATCH_SIZE</a> to the <a href="../c3ref/status.html">sqlite3_status()</a> interface.
+<li>Modified <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a> and <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigscratch">SQLITE_CONFIG_SCRATCH</a> to remove
+ the "+4" magic number in the buffer size computation.
+<li>Added the <a href="../c3ref/db_config.html">sqlite3_db_config()</a> and <a href="../c3ref/db_status.html">sqlite3_db_status()</a> interfaces for
+ controlling and monitoring the lookaside allocator separately on each
+ <a href="../c3ref/sqlite3.html">database connection</a>.</li>
+<li>Numerous other performance enhancements</li>
+<li>Miscellaneous minor bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_10.html b/www/releaselog/3_6_10.html
new file mode 100644
index 0000000..3af65c4
--- /dev/null
+++ b/www/releaselog/3_6_10.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.10 On 2009-01-15</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.10 On 2009-01-15</h2><p><ol class='lessindent'>
+<li>Fix a cache coherency problem that could lead to database corruption.
+ Ticket #3584.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_11.html b/www/releaselog/3_6_11.html
new file mode 100644
index 0000000..7cd9cf6
--- /dev/null
+++ b/www/releaselog/3_6_11.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.11 On 2009-02-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.11 On 2009-02-18</h2><p><ol class='lessindent'>
+<li>Added the <a href="../c3ref/backup_finish.html#sqlite3backupinit">hot-backup interface</a>.
+<li>Added new commands ".backup" and ".restore" to the <a href="../cli.html">CLI</a>.
+<li>Added new methods <a href="../tclsqlite.html#backup">backup</a> and
+ <a href="../tclsqlite.html#restore">restore</a> to the TCL interface.
+<li>Improvements to the <a href="../syntaxdiagrams.html">syntax bubble
+ diagrams</a>
+<li>Various minor bug fixes
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_12.html b/www/releaselog/3_6_12.html
new file mode 100644
index 0000000..e045b81
--- /dev/null
+++ b/www/releaselog/3_6_12.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.12 On 2009-03-31</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.12 On 2009-03-31</h2><p><ol class='lessindent'>
+<li>Fixed a bug that caused database corruption when an <a href="../pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> is
+ rolled back in an in-memory database. Ticket #3761.
+<li>Added the <a href="../c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> interface.
+<li>Added the <a href="../pragma.html#pragma_reverse_unordered_selects">reverse_unordered_selects pragma</a>.
+<li>The default page size on windows is automatically adjusted to match the
+ capabilities of the underlying filesystem.
+<li>Add the new ".genfkey" command in the <a href="../cli.html">CLI</a> for generating triggers to
+ implement foreign key constraints.
+<li>Performance improvements for "count(*)" queries.
+<li>Reduce the amount of heap memory used, especially by TRIGGERs.
+<li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_13.html b/www/releaselog/3_6_13.html
new file mode 100644
index 0000000..b245a79
--- /dev/null
+++ b/www/releaselog/3_6_13.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.13 On 2009-04-13</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.13 On 2009-04-13</h2><p><ol class='lessindent'>
+<li>Fix a bug in <a href="../releaselog/3_6_12.html">version 3.6.12</a> that causes a segfault when running
+ a count(*) on the sqlite_master table of an empty database. Ticket #3774.
+<li>Fix a bug in <a href="../releaselog/3_6_12.html">version 3.6.12</a> that causes a segfault that when
+ inserting into a table using a DEFAULT value where there is a
+ function as part of the DEFAULT value expression. Ticket #3791.
+<li>Fix data structure alignment issues on Sparc. Ticket #3777.
+<li>Other minor bug fixes.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_14.html b/www/releaselog/3_6_14.html
new file mode 100644
index 0000000..f50b1b9
--- /dev/null
+++ b/www/releaselog/3_6_14.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.14 On 2009-05-07</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.14 On 2009-05-07</h2><p><ol class='lessindent'>
+<li>Added the optional <a href="../asyncvfs.html">asynchronous VFS</a> module.</li>
+<li>Enhanced the query optimizer so that <a href="../vtab.html">virtual tables</a> are able to
+ make use of OR and IN operators in the WHERE clause.</li>
+<li>Speed improvements in the btree and pager layers.</li>
+<li>Added the <a href="../compile.html#have_isnan">SQLITE_HAVE_ISNAN</a> compile-time option which will cause
+ the isnan() function from the standard math library to be used instead
+ of SQLite's own home-brew NaN checker.</li>
+<li>Countless minor bug fixes, documentation improvements, new and
+ improved test cases, and code simplifications and cleanups.</p>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_14_1.html b/www/releaselog/3_6_14_1.html
new file mode 100644
index 0000000..e79509a
--- /dev/null
+++ b/www/releaselog/3_6_14_1.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.14.1 On 2009-05-19</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.14.1 On 2009-05-19</h2><p><ol class='lessindent'>
+<li>Fix a bug in <a href="../lang_aggfunc.html#group_concat">group_concat()</a>, ticket #3841
+<li>Fix a performance bug in the pager cache, ticket #3844
+<li>Fix a bug in the <a href="../c3ref/backup.html">sqlite3_backup</a> implementation that can lead
+ to a corrupt backup database. Ticket #3858.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_14_2.html b/www/releaselog/3_6_14_2.html
new file mode 100644
index 0000000..601c825
--- /dev/null
+++ b/www/releaselog/3_6_14_2.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.14.2 On 2009-05-25</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.14.2 On 2009-05-25</h2><p><ol class='lessindent'>
+<li>Fix a code generator bug introduced in <a href="../releaselog/3_6_14.html">version 3.6.14</a>. This bug
+ can cause incorrect query results under obscure circumstances.
+ Ticket #3879.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_15.html b/www/releaselog/3_6_15.html
new file mode 100644
index 0000000..dd6be08
--- /dev/null
+++ b/www/releaselog/3_6_15.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.15 On 2009-06-15</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.15 On 2009-06-15</h2><p><ol class='lessindent'>
+<li>Refactor the internal representation of SQL expressions so that they
+ use less memory on embedded platforms.
+<li>Reduce the amount of stack space used
+<li>Fix an 64-bit alignment bug on HP/UX and Sparc
+<li>The <a href="../c3ref/create_function.html">sqlite3_create_function()</a> family of interfaces now return
+ <a href="../rescode.html#misuse">SQLITE_MISUSE</a> instead of <a href="../rescode.html#error">SQLITE_ERROR</a> when passed invalid
+ parameter combinations.
+<li>When new tables are created using CREATE TABLE ... AS SELECT ... the
+ datatype of the columns is the simplified SQLite datatype (TEXT, INT,
+ REAL, NUMERIC, or BLOB) instead of a copy of the original datatype from
+ the source table.
+<li>Resolve race conditions when checking for a hot rollback journal.
+<li>The <a href="../c3ref/initialize.html">sqlite3_shutdown()</a> interface frees all mutexes under windows.
+<li>Enhanced robustness against corrupt database files
+<li>Continuing improvements to the test suite and fixes to obscure
+ bugs and inconsistencies that the test suite improvements are
+ uncovering.
+
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_16.html b/www/releaselog/3_6_16.html
new file mode 100644
index 0000000..5f1029f
--- /dev/null
+++ b/www/releaselog/3_6_16.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.16 On 2009-06-27</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.16 On 2009-06-27</h2><p><ol class='lessindent'>
+<li>Fix a bug (ticket #3929) that occasionally causes INSERT or UPDATE
+ operations to fail on an indexed table that has a self-modifying trigger.
+<li>Other minor bug fixes and performance optimizations.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_16_1.html b/www/releaselog/3_6_16_1.html
new file mode 100644
index 0000000..728594e
--- /dev/null
+++ b/www/releaselog/3_6_16_1.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.16.1 On 2009-10-30</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.16.1 On 2009-10-30</h2><p><ol class='lessindent'>
+<li>A small patch to version 3.6.16 to fix
+<a href="http://www.sqlite.org/src/info/6b00e0a34c">the OP_If bug</a>.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_17.html b/www/releaselog/3_6_17.html
new file mode 100644
index 0000000..1af8138
--- /dev/null
+++ b/www/releaselog/3_6_17.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.17 On 2009-08-10</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.17 On 2009-08-10</h2><p><ol class='lessindent'>
+<li>Expose the <a href="../c3ref/stricmp.html">sqlite3_strnicmp()</a> interface for use by extensions and
+ applications.
+<li>Remove the restriction on <a href="../vtab.html">virtual tables</a> and <a href="../sharedcache.html">shared cache mode</a>.
+ Virtual tables and shared cache can now be used at the same time.
+<li>Many code simplifications and obscure bug fixes in support of
+ providing <a href="../testing.html#coverage">100% branch test coverage</a>.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_18.html b/www/releaselog/3_6_18.html
new file mode 100644
index 0000000..cf4ad59
--- /dev/null
+++ b/www/releaselog/3_6_18.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.18 On 2009-09-11</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.18 On 2009-09-11</h2><p><ol class='lessindent'>
+<li>Versioning of the SQLite source code has transitioned from CVS to
+ <a href="http://www.fossil-scm.org/">Fossil</a>.
+<li>Query planner enhancements.
+<li>The <a href="../compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> compile-time option causes the <a href="../lang_analyze.html">ANALYZE</a>
+ command to collect a small histogram of each index, to help SQLite better
+ select among competing range query indices.
+<li>Recursive triggers can be enabled using the <a href="../pragma.html#pragma_recursive_triggers">PRAGMA recursive_triggers</a>
+ statement.
+<li>Delete triggers fire when rows are removed due to a
+ <a href="../lang_conflict.html">REPLACE conflict resolution</a>. This feature is only
+ enabled when recursive triggers are enabled.
+<li>Added the <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a> and <a href="../c3ref/c_open_autoproxy.html">SQLITE_OPEN_PRIVATECACHE</a>
+ flags for <a href="../c3ref/open.html">sqlite3_open_v2()</a> used to override the global
+ <a href="../sharedcache.html">shared cache mode</a> settings for individual database connections.
+<li>Added improved version identification features:
+ C-Preprocessor macro <a href="../c3ref/c_source_id.html">SQLITE_SOURCE_ID</a>,
+ C/C++ interface <a href="../c3ref/libversion.html">sqlite3_sourceid()</a>, and SQL function <a href="../lang_corefunc.html#sqlite_source_id">sqlite_source_id()</a>.
+<li>Obscure bug fix on triggers
+(<a href="http://www.sqlite.org/src/info/efc02f9779">&#91;efc02f9779&#93;</a>).
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_19.html b/www/releaselog/3_6_19.html
new file mode 100644
index 0000000..a64acc6
--- /dev/null
+++ b/www/releaselog/3_6_19.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.19 On 2009-10-14</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.19 On 2009-10-14</h2><p><ol class='lessindent'>
+<li>Added support for <a href="../foreignkeys.html">foreign key constraints</a>. Foreign key constraints
+ are disabled by default. Use the <a href="../pragma.html#pragma_foreign_keys">foreign_keys pragma</a> to turn them on.
+<li>Generalized the IS and IS NOT operators to take arbitrary expressions
+ on their right-hand side.
+<li>The <a href="../tclsqlite.html">TCL Interface</a> has been enhanced to use the
+ <a href="http://www.tcl-lang.org/cgi-bin/tct/tip/322.html">Non-Recursive Engine (NRE)</a>
+ interface to the TCL interpreter when linked against TCL 8.6 or later.
+<li>Fix a bug introduced in 3.6.18 that can lead to a segfault when an
+ attempt is made to write on a read-only database.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_2.html b/www/releaselog/3_6_2.html
new file mode 100644
index 0000000..109dd80
--- /dev/null
+++ b/www/releaselog/3_6_2.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.2 On 2008-08-30</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.2 On 2008-08-30</h2><p><ol class='lessindent'>
+<li>Split the pager subsystem into separate pager and pcache subsystems.</li>
+<li>Factor out identifier resolution procedures into separate files.</li>
+<li>Bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_20.html b/www/releaselog/3_6_20.html
new file mode 100644
index 0000000..19b696e
--- /dev/null
+++ b/www/releaselog/3_6_20.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.20 On 2009-11-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.20 On 2009-11-04</h2><p><ol class='lessindent'>
+<li>Optimizer enhancement: <a href="../c3ref/stmt.html">prepared statements</a> are automatically
+re-compiled when a binding on the RHS of a LIKE operator changes or
+when any range constraint changes under <a href="../compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a>.
+<li>Various minor bug fixes and documentation enhancements.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_21.html b/www/releaselog/3_6_21.html
new file mode 100644
index 0000000..76051b9
--- /dev/null
+++ b/www/releaselog/3_6_21.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.21 On 2009-12-07</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.21 On 2009-12-07</h2><p><ol class='lessindent'>
+<li>The SQL output resulting from <a href="../c3ref/profile.html">sqlite3_trace()</a> is now modified to include
+the values of <a href="../lang_expr.html#varparam">bound parameters</a>.
+<li>Performance optimizations targeting a specific use case from
+a single high-profile user of SQLite. A 12% reduction in the number of
+CPU operations is achieved (as measured by Valgrind). Actual performance
+improvements in practice may vary depending on workload. Changes
+include:
+<ol type='a'>
+ <li>The <a href="../lang_corefunc.html#ifnull">ifnull()</a> and <a href="../lang_corefunc.html#coalesce">coalesce()</a> SQL functions are now implemented
+ using in-line VDBE code rather than calling external functions, so that
+ unused arguments need never be evaluated.
+ <li>The <a href="../lang_corefunc.html#substr">substr()</a> SQL function does not bother to measure the length
+ its entire input string if it is only computing a prefix
+ <li>Unnecessary OP_IsNull, OP_Affinity, and OP_MustBeInt VDBE opcodes
+ are suppressed
+ <li>Various code refactorizations for performance
+</ol>
+<li>The FTS3 extension has undergone a major rework and cleanup.
+New <a href="../fts3.html">FTS3 documentation</a> is now available.
+<li>The <a href="../compile.html#secure_delete">SQLITE_SECURE_DELETE</a> compile-time option fixed to make sure that
+content is deleted even when the <a href="../lang_delete.html#truncateopt">truncate optimization</a> applies.
+<li>Improvements to "dot-command" handling in the
+<a href="../cli.html">Command Line Interface</a>.
+<li>Other minor bug fixes and documentation enhancements.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_22.html b/www/releaselog/3_6_22.html
new file mode 100644
index 0000000..0803eb5
--- /dev/null
+++ b/www/releaselog/3_6_22.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.22 On 2010-01-06</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.22 On 2010-01-06</h2><p><ol class='lessindent'>
+<li>Fix bugs that can (rarely) lead to incorrect query results when
+ the CAST or OR operators are used in the WHERE clause of a query.
+<li>Continuing enhancements and improvements to <a href="../fts3.html">FTS3</a>.
+<li>Other miscellaneous bug fixes.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_23.html b/www/releaselog/3_6_23.html
new file mode 100644
index 0000000..625cc89
--- /dev/null
+++ b/www/releaselog/3_6_23.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.23 On 2010-03-09</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.23 On 2010-03-09</h2><p><ol class='lessindent'>
+<li> Added the <a href="../pragma.html#pragma_secure_delete">secure_delete pragma</a>.
+<li> Added the <a href="../c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> and
+ <a href="../c3ref/compileoption_get.html">sqlite3_compileoption_get()</a> interfaces as well as the
+ <a href="../pragma.html#pragma_compile_options">compile_options pragma</a> and the <a href="../lang_corefunc.html#sqlite_compileoption_used">sqlite_compileoption_used()</a> and
+ <a href="../lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a> SQL functions.
+<li> Added the <a href="../c3ref/log.html">sqlite3_log()</a> interface together with the
+ <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> verb to <a href="../c3ref/config.html">sqlite3_config()</a>. The ".log" command
+ is added to the <a href="../cli.html">Command Line Interface</a>.
+<li> Improvements to <a href="../fts3.html">FTS3</a>.
+<li> Improvements and bug-fixes in support for <a href="../compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a>.
+<li> The <a href="../pragma.html#pragma_integrity_check">integrity_check pragma</a> is enhanced to detect out-of-order rowids.
+<li> The ".genfkey" operator has been removed from the
+ <a href="../cli.html">Command Line Interface</a>.
+<li> Updates to the co-hosted <a href="../lemon.html">Lemon LALR(1) parser generator</a>. (These
+ updates did not affect SQLite.)
+<li> Various minor bug fixes and performance enhancements.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_23_1.html b/www/releaselog/3_6_23_1.html
new file mode 100644
index 0000000..3fa1c6b
--- /dev/null
+++ b/www/releaselog/3_6_23_1.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.23.1 On 2010-03-26</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.23.1 On 2010-03-26</h2><p><ol class='lessindent'>
+<li> Fix a bug in the offsets() function of <a href="../fts3.html">FTS3</a>
+<li> Fix a missing "sync" that when omitted could lead to database
+ corruption if a power failure or OS crash occurred just as a
+ ROLLBACK operation was finishing.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_3.html b/www/releaselog/3_6_3.html
new file mode 100644
index 0000000..6ef91ab
--- /dev/null
+++ b/www/releaselog/3_6_3.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.3 On 2008-09-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.3 On 2008-09-22</h2><p><ol class='lessindent'>
+<li>Fix for a bug in the SELECT DISTINCT logic that was introduced by the
+ prior version.</li>
+<li>Other minor bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_4.html b/www/releaselog/3_6_4.html
new file mode 100644
index 0000000..9065299
--- /dev/null
+++ b/www/releaselog/3_6_4.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.4 On 2008-10-15</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.4 On 2008-10-15</h2><p><ol class='lessindent'>
+<li>Add option support for LIMIT and ORDER BY clauses on <a href="../lang_delete.html">DELETE</a> and
+ <a href="../lang_update.html">UPDATE</a> statements. Only works if SQLite is compiled with
+ <a href="../compile.html#enable_update_delete_limit">SQLITE_ENABLE_UPDATE_DELETE_LIMIT</a>.
+<li>Added the <a href="../c3ref/stmt_status.html">sqlite3_stmt_status()</a> interface for performance monitoring.</li>
+<li>Add the <a href="../lang_indexedby.html">INDEXED BY</a> clause.</li>
+<li>The LOCKING_STYLE extension is now enabled by default on Mac OS X</li>
+<li>Added the TRUNCATE option to <a href="../pragma.html#pragma_journal_mode">PRAGMA journal_mode</a></li>
+<li>Performance enhancements to tree balancing logic in the B-Tree layer.</li>
+<li>Added the
+ <a href="http://www.sqlite.org/src/finfo?name=tool/genfkey.c">
+ source code</a> and
+ <a href="http://www.sqlite.org/src/finfo?name=tool/genfkey.README">
+ documentation</a> for the <b>genfkey</b> program for automatically generating
+ triggers to enforce foreign key constraints.</li>
+<li>Added the <a href="../compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time option.</li>
+<li>The <a href="../lang.html">SQL language documentation</a> is converted to use
+<a href="../syntaxdiagrams.html">syntax diagrams</a> instead of BNF.</li>
+<li>Other minor bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_5.html b/www/releaselog/3_6_5.html
new file mode 100644
index 0000000..c73692c
--- /dev/null
+++ b/www/releaselog/3_6_5.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.5 On 2008-11-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.5 On 2008-11-12</h2><p><ol class='lessindent'>
+<li>Add the MEMORY option to the <a href="../pragma.html#pragma_journal_mode">journal_mode pragma</a>.</li>
+<li>Added the <a href="../c3ref/db_mutex.html">sqlite3_db_mutex()</a> interface.</li>
+<li>Added the <a href="../compile.html#omit_truncate_optimization">SQLITE_OMIT_TRUNCATE_OPTIMIZATION</a> compile-time option.</li>
+<li>Fixed the <a href="../lang_delete.html#truncateopt">truncate optimization</a> so that <a href="../c3ref/changes.html">sqlite3_changes()</a> and
+ <a href="../c3ref/total_changes.html">sqlite3_total_changes()</a> interfaces and the <a href="../pragma.html#pragma_count_changes">count_changes pragma</a>
+ return the correct values.</li>
+<li>Added the <a href="../c3ref/errcode.html">sqlite3_extended_errcode()</a> interface.</li>
+<li>The <a href="../lang_transaction.html">COMMIT</a> command now succeeds even if there are pending queries.
+ It returns <a href="../rescode.html#busy">SQLITE_BUSY</a> if there are pending incremental BLOB I/O requests.
+<li>The error code is changed to <a href="../rescode.html#busy">SQLITE_BUSY</a> (instead of <a href="../rescode.html#error">SQLITE_ERROR</a>)
+ when an attempt is made to <a href="../lang_transaction.html">ROLLBACK</a> while one or more queries are
+ still pending.</li>
+<li>Drop all support for the <a href="../malloc.html#memsysx">experimental memory allocators</a> memsys4 and
+ memsys6.</li>
+<li>Added the <a href="../compile.html#zero_malloc">SQLITE_ZERO_MALLOC</a> compile-time option.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_6.html b/www/releaselog/3_6_6.html
new file mode 100644
index 0000000..61eea7a
--- /dev/null
+++ b/www/releaselog/3_6_6.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.6 On 2008-11-19</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.6 On 2008-11-19</h2><p><ol class='lessindent'>
+<li>Fix a #define that prevented <a href="../malloc.html#memsys5">memsys5</a> from compiling</li>
+<li>Fix a problem in the virtual table commit mechanism that was causing
+ a crash in FTS3. Ticket #3497.</li>
+<li>Add the <a href="../c3ref/pcache_methods2.html">application-defined page cache</a></li>
+<li>Added built-in support for VxWorks</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_6_1.html b/www/releaselog/3_6_6_1.html
new file mode 100644
index 0000000..fd2f1ff
--- /dev/null
+++ b/www/releaselog/3_6_6_1.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.6.1 On 2008-11-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.6.1 On 2008-11-22</h2><p><ol class='lessindent'>
+<li>Fix a bug in the page cache that can lead database corruption following
+ a rollback. This bug was first introduced in <a href="../releaselog/3_6_4.html">version 3.6.4</a>.</li>
+<li>Two other very minor bug fixes</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_6_2.html b/www/releaselog/3_6_6_2.html
new file mode 100644
index 0000000..6614278
--- /dev/null
+++ b/www/releaselog/3_6_6_2.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.6.2 On 2008-11-26</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.6.2 On 2008-11-26</h2><p><ol class='lessindent'>
+<li>Fix a bug in the b-tree delete algorithm that seems like it might be
+ able to cause database corruption. The bug was first introduced in
+ <a href="../releaselog/3_6_6.html">version 3.6.6</a> by check-in &#91;5899&#93; on 2008-11-13.</li>
+<li>Fix a memory leak that can occur following a disk I/O error.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_7.html b/www/releaselog/3_6_7.html
new file mode 100644
index 0000000..aaf5cb7
--- /dev/null
+++ b/www/releaselog/3_6_7.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.7 On 2008-12-16</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.7 On 2008-12-16</h2><p><ol class='lessindent'>
+<li>Reorganize the Unix interface in os_unix.c</li>
+<li>Added support for "Proxy Locking" on Mac OS X.</li>
+<li>Changed the prototype of the <a href="../c3ref/auto_extension.html">sqlite3_auto_extension()</a> interface in a
+ way that is backwards compatible but which might cause warnings in new
+ builds of applications that use that interface.</li>
+<li>Changed the signature of the xDlSym method of the <a href="../c3ref/vfs.html">sqlite3_vfs</a> object
+ in a way that is backwards compatible but which might cause
+ compiler warnings.</li>
+<li>Added superfluous casts and variable initializations in order
+ to suppress nuisance compiler warnings.</li>
+<li>Fixes for various minor bugs.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_8.html b/www/releaselog/3_6_8.html
new file mode 100644
index 0000000..084c93a
--- /dev/null
+++ b/www/releaselog/3_6_8.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.8 On 2009-01-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.8 On 2009-01-12</h2><p><ol class='lessindent'>
+<li>Added support for <a href="../lang_savepoint.html">nested transactions</a></li>
+<li>Enhanced the query optimizer so that it is able to use
+ multiple indices to efficiently process
+ <a href="../optoverview.html#or_opt">OR-connected constraints</a>
+ in a WHERE clause.</li>
+<li>Added support for parentheses in FTS3 query patterns using the
+ <a href="../compile.html#enable_fts3_parenthesis">SQLITE_ENABLE_FTS3_PARENTHESIS</a> compile-time option.</li>
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_6_9.html b/www/releaselog/3_6_9.html
new file mode 100644
index 0000000..7423938
--- /dev/null
+++ b/www/releaselog/3_6_9.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.6.9 On 2009-01-14</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.6.9 On 2009-01-14</h2><p><ol class='lessindent'>
+<li>Fix two bugs, which when combined might result in incorrect
+ query results. Both bugs were harmless by themselves; only when
+ they team up do they cause problems. Ticket #3581.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_0.html b/www/releaselog/3_7_0.html
new file mode 100644
index 0000000..b0bcd73
--- /dev/null
+++ b/www/releaselog/3_7_0.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.0 On 2010-07-21</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.0 On 2010-07-21</h2><p><ol class='lessindent'>
+<li> Added support for <a href="../wal.html">write-ahead logging</a>.
+<li> Query planner enhancement - automatic transient indices are created
+ when doing so reduces the estimated query time.
+<li> Query planner enhancement - the ORDER BY becomes a no-op if the query
+ also contains a GROUP BY clause that forces the correct output order.
+<li> Add the <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuscacheused">SQLITE_DBSTATUS_CACHE_USED</a> verb for <a href="../c3ref/db_status.html">sqlite3_db_status()</a>.
+<li> The logical database size is now stored in the database header so that
+ bytes can be appended to the end of the database file without corrupting
+ it and so that SQLite will work correctly on systems that lack support
+ for ftruncate().
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_0_1.html b/www/releaselog/3_7_0_1.html
new file mode 100644
index 0000000..b89b6d7
--- /dev/null
+++ b/www/releaselog/3_7_0_1.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.0.1 On 2010-08-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.0.1 On 2010-08-04</h2><p><ol class='lessindent'>
+<li> Fix a potential database corruption bug that can occur if version 3.7.0
+ and version 3.6.23.1 alternately write to the same database file.
+ <a href="http://www.sqlite.org/src/info/51ae9cad317a1">
+ Ticket &#91;51ae9cad317a1&#93;</a>
+<li> Fix a performance regression related to the query planner enhancements
+ of version 3.7.0.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_1.html b/www/releaselog/3_7_1.html
new file mode 100644
index 0000000..a28628e
--- /dev/null
+++ b/www/releaselog/3_7_1.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.1 On 2010-08-23</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.1 On 2010-08-23</h2><p><ol class='lessindent'>
+<li> Added new commands <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatusschemaused">SQLITE_DBSTATUS_SCHEMA_USED</a> and
+ <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatusstmtused">SQLITE_DBSTATUS_STMT_USED</a> to the <a href="../c3ref/db_status.html">sqlite3_db_status()</a> interface, in
+ order to report out the amount of memory used to hold the schema and
+ prepared statements of a connection.
+<li> Increase the maximum size of a database pages from 32KiB to 64KiB.
+<li> Use the <a href="../optoverview.html#like_opt">LIKE optimization</a> even if the right-hand side string contains
+ no wildcards.
+<li> Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlchunksize">SQLITE_FCNTL_CHUNK_SIZE</a> verb to the <a href="../c3ref/file_control.html">sqlite3_file_control()</a>
+ interface for both unix and windows, to cause database files to grow in
+ large chunks in order to reduce disk fragmentation.
+<li> Fixed a bug in the query planner that caused performance regressions
+ relative to 3.6.23.1 on some complex joins.
+<li> Fixed a typo in the OS/2 backend.
+<li> Refactored the pager module.
+<li> The SQLITE_MAX_PAGE_SIZE compile-time option is now silently ignored.
+ The maximum page size is hard-coded at 65536 bytes.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_10.html b/www/releaselog/3_7_10.html
new file mode 100644
index 0000000..89b2d03
--- /dev/null
+++ b/www/releaselog/3_7_10.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.10 On 2012-01-16</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.10 On 2012-01-16</h2><p><ol class='lessindent'>
+<li>The default <a href="../fileformat2.html#schemaformat">schema format number</a> is changed from 1 to 4.
+ This means that, unless
+ the <a href="../pragma.html#pragma_legacy_file_format">PRAGMA legacy_file_format=ON</a> statement is
+ run, newly created database files will be unreadable by version of SQLite
+ prior to 3.3.0 (2006-01-10). It also means that the <a href="../lang_createindex.html#descidx">descending indices</a>
+ are enabled by default.
+<li>The sqlite3_pcache_methods structure and the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcache">SQLITE_CONFIG_PCACHE</a>
+ and <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache">SQLITE_CONFIG_GETPCACHE</a> configuration parameters are deprecated.
+ They are replaced by a new <a href="../c3ref/pcache_methods2.html">sqlite3_pcache_methods2</a> structure and
+ <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcache2">SQLITE_CONFIG_PCACHE2</a> and <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiggetpcache2">SQLITE_CONFIG_GETPCACHE2</a> configuration
+ parameters.
+<li>Added the <a href="../psow.html">powersafe overwrite</a> property to the VFS interface. Provide
+ the <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_POWERSAFE_OVERWRITE</a> I/O capability, the
+ <a href="../compile.html#powersafe_overwrite">SQLITE_POWERSAFE_OVERWRITE</a> compile-time option, and the
+ "psow=BOOLEAN" query parameter for <a href="../uri.html">URI filenames</a>.
+<li>Added the <a href="../c3ref/db_release_memory.html">sqlite3_db_release_memory()</a> interface and the
+ <a href="../pragma.html#pragma_shrink_memory">shrink_memory pragma</a>.
+<li>Added the <a href="../c3ref/db_filename.html">sqlite3_db_filename()</a> interface.
+<li>Added the <a href="../c3ref/stmt_busy.html">sqlite3_stmt_busy()</a> interface.
+<li>Added the <a href="../c3ref/uri_boolean.html">sqlite3_uri_boolean()</a> and <a href="../c3ref/uri_boolean.html">sqlite3_uri_int64()</a> interfaces.
+<li>If the argument to <a href="../pragma.html#pragma_cache_size">PRAGMA cache_size</a> is negative N, that means to use
+ approximately -1024*N bytes of memory for the page cache regardless of
+ the page size.
+<li>Enhanced the default memory allocator to make use of _msize() on windows,
+ malloc_size() on Mac, and malloc_usable_size() on Linux.
+<li>Enhanced the query planner to support index queries with range constraints
+ on the rowid.
+<li>Enhanced the query planner flattening logic to allow UNION ALL compounds
+ to be promoted upwards to replace a simple wrapper SELECT even if the
+ compounds are joins.
+<li>Enhanced the query planner so that the xfer optimization can be used with
+ INTEGER PRIMARY KEY ON CONFLICT as long as the destination table is
+ initially empty.
+<li>Enhanced the windows <a href="../vfs.html">VFS</a> so that all system calls can be overridden
+ using the xSetSystemCall interface.
+<li>Updated the "unix-dotfile" <a href="../vfs.html">VFS</a> to use locking directories with mkdir()
+ and rmdir() instead of locking files with open() and unlink().
+<li>Enhancements to the test_quota.c extension to support stdio-like interfaces
+ with quotas.
+<li>Change the unix <a href="../vfs.html">VFS</a> to be tolerant of read() system calls that return
+ less then the full number of requested bytes.
+<li>Change both unix and windows <a href="../vfs.html">VFSes</a> to report a sector size of 4096
+ instead of the old default of 512.
+<li>In the <a href="../tclsqlite.html">TCL Interface</a>, add the -uri option to the "sqlite3" TCL command
+ used for creating new database connection objects.
+<li>Added the <a href="../c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_EXPLAIN_STMT</a> test-control option with the
+ <a href="../compile.html#enable_tree_explain">SQLITE_ENABLE_TREE_EXPLAIN</a> compile-time option to enable the
+ <a href="../cli.html">command-line shell</a> to display ASCII-art parse trees of SQL statements
+ that it processes, for debugging and analysis.
+<li><b>Bug fix:</b>
+ Add an additional xSync when restarting a WAL in order to prevent an
+ exceedingly unlikely but theoretically possible
+ database corruption following power-loss.
+ Ticket <a href="http://www.sqlite.org/src/info/ff5be73dee">ff5be73dee</a>.
+<li><b>Bug fix:</b>
+ Change the VDBE so that all registers are initialized to Invalid
+ instead of NULL.
+ Ticket <a href="http://www.sqlite.org/src/info/7bbfb7d442">7bbfb7d442</a>
+<li><b>Bug fix:</b>
+ Fix problems that can result from 32-bit integer overflow.
+ Ticket <a href="http://www.sqlite.org/src/info/ac0ff496b7e2">ac00f496b7e2</a>
+<li>SQLITE_SOURCE_ID:
+ "2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204"
+<li>SHA1 for sqlite3.c: 6497cbbaad47220bd41e2e4216c54706e7ae95d4
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_11.html b/www/releaselog/3_7_11.html
new file mode 100644
index 0000000..213d4bf
--- /dev/null
+++ b/www/releaselog/3_7_11.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.11 On 2012-03-20</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.11 On 2012-03-20</h2><p><ol class='lessindent'>
+<li>Enhance the <a href="../lang_insert.html">INSERT</a> syntax to allow multiple rows to be inserted
+ via the VALUES clause.
+<li>Enhance the <a href="../lang_createvtab.html">CREATE VIRTUAL TABLE</a> command to support the
+ IF NOT EXISTS clause.
+<li>Added the <a href="../c3ref/stricmp.html">sqlite3_stricmp()</a> interface as a counterpart to
+ <a href="../c3ref/stricmp.html">sqlite3_strnicmp()</a>.
+<li>Added the <a href="../c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface.
+<li>Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control, giving <a href="../vfs.html">VFS</a> implementations
+ the ability to add new <a href="../pragma.html#syntax">PRAGMA</a> statements or to override built-in
+ PRAGMAs.
+<li>Queries of the form: "SELECT max(x), y FROM table" returns the
+ value of y on the same row that contains the maximum x value.
+<li>Added support for the <a href="../fts3.html#*fts4languageid">FTS4 languageid option</a>.
+<li>Documented support for the <a href="../fts3.html#*fts4content">FTS4 content option</a>. This feature has
+ actually been in the code since <a href="../releaselog/3_7_9.html">version 3.7.9</a> but is only now considered
+ to be officially supported.
+<li>Pending statements no longer block <a href="../lang_transaction.html">ROLLBACK</a>. Instead, the pending
+ statement will return SQLITE_ABORT upon next access after the ROLLBACK.
+<li>Improvements to the handling of CSV inputs in the <a href="../cli.html">command-line shell</a>
+<li>Fix a <a href="http://www.sqlite.org/src/info/b7c8682cc1">bug</a> introduced
+ in <a href="../releaselog/3_7_10.html">version 3.7.10</a> that might cause a LEFT JOIN
+ to be incorrectly converted into an INNER JOIN if the WHERE clause
+ indexable terms connected by OR.
+
+<li>SQLITE_SOURCE_ID:
+ "2012-03-20 11:35:50 00bb9c9ce4f465e6ac321ced2a9d0062dc364669"
+<li>SHA1 for sqlite3.c: d460d7eda3a9dccd291aed2a9fda868b9b120a10
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_12.html b/www/releaselog/3_7_12.html
new file mode 100644
index 0000000..7995eb3
--- /dev/null
+++ b/www/releaselog/3_7_12.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.12 On 2012-05-14</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.12 On 2012-05-14</h2><p><ol class='lessindent'>
+<li>Add the <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuscachewrite">SQLITE_DBSTATUS_CACHE_WRITE</a> option for <a href="../c3ref/db_status.html">sqlite3_db_status()</a>.
+<li>Optimize the <a href="../lang_corefunc.html#typeof">typeof()</a> and <a href="../lang_corefunc.html#length">length()</a> SQL functions so that they avoid
+ unnecessary reading of database content from disk.
+<li>Add the <a href="../fts3.html#*fts4mergecmd">FTS4 "merge" command</a>, the <a href="../fts3.html#*fts4automergecmd">FTS4 "automerge" command</a>, and
+ the <a href="../fts3.html#*fts4ickcmd">FTS4 "integrity-check" command</a>.
+<li>Report the name of specific <a href="../lang_createtable.html#ckconst">CHECK</a> constraints that fail.
+<li>In the command-line shell, use popen() instead of fopen() if the first
+ character of the argument to the ".output" command is "|".
+<li>Make use of OVERLAPPED in the windows <a href="../vfs.html">VFS</a> to avoid some system calls
+ and thereby obtain a performance improvement.
+<li>More aggressive optimization of the AND operator when one side or the
+ other is always false.
+<li>Improved performance of queries with many OR-connected terms in the
+ WHERE clause that can all be indexed.
+<li>Add the <a href="../compile.html#rtree_int_only">SQLITE_RTREE_INT_ONLY</a> compile-time option to force the
+ <a href="../rtree.html">R*Tree Extension Module</a> to use integer instead of
+ floating point values for both storage and computation.
+<li>Enhance the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to use much less memory when
+ processing multi-gigabyte databases.
+<li>New interfaces added to the test_quota.c add-on module.
+<li>Added the ".trace" dot-command to the command-line shell.
+<li>Allow virtual table constructors to be invoked recursively.
+<li>Improved optimization of ORDER BY clauses on compound queries.
+<li>Improved optimization of aggregate subqueries contained within an
+ aggregate query.
+<li>Bug fix: Fix the <a href="../lang_savepoint.html">RELEASE</a> command so that it does not cancel pending
+ queries. This repairs a problem introduced in 3.7.11.
+<li>Bug fix: Do not discard the DISTINCT as superfluous unless a subset of
+ the result set is subject to a UNIQUE constraint <em>and</em> it none
+ of the columns in that subset can be NULL.
+ Ticket <a href="http://www.sqlite.org/src/info/385a5b56b9">385a5b56b9</a>.
+<li>Bug fix: Do not optimize away an ORDER BY clause that has the same terms
+ as a UNIQUE index unless those terms are also NOT NULL.
+ Ticket <a href="http://www.sqlite.org/src/info/2a5629202f">2a5629202f</a>.
+<li>SQLITE_SOURCE_ID:
+ "2012-05-14 01:41:23 8654aa9540fe9fd210899d83d17f3f407096c004"
+<li>SHA1 for sqlite3.c: 57e2104a0f7b3f528e7f6b7a8e553e2357ccd2e1
+
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_12_1.html b/www/releaselog/3_7_12_1.html
new file mode 100644
index 0000000..6ed06c9
--- /dev/null
+++ b/www/releaselog/3_7_12_1.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.12.1 On 2012-05-22</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.12.1 On 2012-05-22</h2><p><ol class='lessindent'>
+<li>Fix a bug
+ <a href="http://www.sqlite.org/src/info/c2ad16f997ee9c">(ticket c2ad16f997)</a>
+ in the 3.7.12 release that can cause a segfault for certain
+ obscure nested aggregate queries.
+<li>Fix various other minor test script problems.
+<li>SQLITE_SOURCE_ID:
+ "2012-05-22 02:45:53 6d326d44fd1d626aae0e8456e5fa2049f1ce0789"
+<li>SHA1 for sqlite3.c: d494e8d81607f0515d4f386156fb0fd86d5ba7df
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_13.html b/www/releaselog/3_7_13.html
new file mode 100644
index 0000000..07e7bfb
--- /dev/null
+++ b/www/releaselog/3_7_13.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.13 On 2012-06-11</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.13 On 2012-06-11</h2><p><ol class='lessindent'>
+<li><a href="../inmemorydb.html">In-memory databases</a> that are specified using
+ <a href="../uri.html">URI filenames</a> are allowed to use <a href="../sharedcache.html#inmemsharedcache">shared cache</a>,
+ so that the same
+ in-memory database can be accessed from multiple database connections.
+<li>Recognize and use the <a href="../uri.html#coreqp">mode=memory</a> query parameter in
+ <a href="../uri.html">URI filenames</a>.
+<li>Avoid resetting the schema of <a href="../sharedcache.html">shared cache</a> connections when any one
+ connection closes. Instead, wait for the last connection to close before
+ resetting the schema.
+<li>In the <a href="../rtree.html">RTREE</a> extension, when rounding 64-bit floating point numbers
+ to 32-bit for storage, always round in a direction that causes the
+ bounding box to get larger.
+<li>Adjust the unix driver to avoid unnecessary calls to fchown().
+<li>Add interfaces sqlite3_quota_ferror() and sqlite3_quota_file_available()
+ to the test_quota.c module.
+<li>The <a href="../c3ref/create_module.html">sqlite3_create_module()</a> and <a href="../c3ref/create_module.html">sqlite3_create_module_v2()</a> interfaces
+ return SQLITE_MISUSE on any attempt to overload or replace a <a href="../vtab.html">virtual table</a>
+ module. The destructor is always called in this case, in accordance with
+ historical and current documentation.
+<li>SQLITE_SOURCE_ID:
+ "2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc"
+<li>SHA1 for sqlite3.c: ff0a771d6252545740ba9685e312b0e3bb6a641b
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_14.html b/www/releaselog/3_7_14.html
new file mode 100644
index 0000000..831fc39
--- /dev/null
+++ b/www/releaselog/3_7_14.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.14 On 2012-09-03</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.14 On 2012-09-03</h2><p><ol class='lessindent'>
+<li>Drop built-in support for OS/2. If you need to upgrade an OS/2
+ application to use this or a later version of SQLite,
+ then add an application-defined <a href="../vfs.html">VFS</a> using the
+ <a href="../c3ref/vfs_find.html">sqlite3_vfs_register()</a> interface. The code removed in this release can
+ serve as a baseline for the application-defined VFS.
+<li>Ensure that floating point values are preserved exactly when reconstructing
+ a database from the output of the ".dump" command of the
+ <a href="../cli.html">command-line shell</a>.
+<li>Added the <a href="../c3ref/close.html">sqlite3_close_v2()</a> interface.
+<li>Updated the <a href="../cli.html">command-line shell</a> so that it can be built using
+ <a href="../compile.html#omit_floating_point">SQLITE_OMIT_FLOATING_POINT</a> and <a href="../compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a>.
+<li>Improvements to the windows makefiles and build processes.
+<li>Enhancements to <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a> so that
+ they can optionally check just a single attached database instead of all
+ attached databases.
+<li>Enhancements to <a href="../wal.html">WAL mode</a> processing that ensure that at least one
+ valid read-mark is available at all times, so that read-only processes
+ can always read the database.
+<li>Performance enhancements in the sorter used by ORDER BY and CREATE INDEX.
+<li>Added the <a href="../compile.html#disable_fts4_deferred">SQLITE_DISABLE_FTS4_DEFERRED</a> compile-time option.
+<li>Better handling of aggregate queries where the aggregate functions are
+ contained within subqueries.
+<li>Enhance the query planner so that it will try to use a <a href="../queryplanner.html#covidx">covering index</a>
+ on queries that make use of <a href="../optoverview.html#or_opt">or optimization</a>.
+<li>SQLITE_SOURCE_ID:
+ "2012-09-03 15:42:36 c0d89d4a9752922f9e367362366efde4f1b06f2a"
+<li>SHA1 for sqlite3.c: 5fdf596b29bb426001f28b488ff356ae14d5a5a6
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_14_1.html b/www/releaselog/3_7_14_1.html
new file mode 100644
index 0000000..50179ea
--- /dev/null
+++ b/www/releaselog/3_7_14_1.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.14.1 On 2012-10-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.14.1 On 2012-10-04</h2><p><ol class='lessindent'>
+<li>Fix a bug (ticket
+<a href="../www.sqlite.org/src/tktview/d02e1406a58ea02d">&#91;d02e1406a58ea02d]&#93;</a>)
+that causes a segfault on a LEFT JOIN that includes an OR in the ON clause.
+<li>Work around a bug in the optimizer in the VisualStudio-2012 compiler that
+causes invalid code to be generated when compiling SQLite on ARM.
+<li>Fix the TCL interface so that the "nullvalue" setting is honored for
+TCL implementations of SQL functions.
+<li>SQLITE_SOURCE_ID:
+ "2012-10-04 19:37:12 091570e46d04e84b67228e0bdbcd6e1fb60c6bdb"
+<li>SHA1 for sqlite3.c: 62aaecaacab3a4bf4a8fe4aec1cfdc1571fe9a44
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_15.html b/www/releaselog/3_7_15.html
new file mode 100644
index 0000000..435f25f
--- /dev/null
+++ b/www/releaselog/3_7_15.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.15 On 2012-12-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.15 On 2012-12-12</h2><p><ol class='lessindent'>
+<li>Added the <a href="../c3ref/errcode.html">sqlite3_errstr()</a> interface.
+<li>Avoid invoking the <a href="../c3ref/profile.html">sqlite3_trace()</a> callback multiple times when a
+ statement is automatically reprepared due to <a href="../rescode.html#schema">SQLITE_SCHEMA</a> errors.
+<li>Added support for Windows Phone 8 platforms
+<li>Enhance IN operator processing to make use of indices with numeric
+ affinities.
+<li>Do full-table scans using covering indices when possible, under the
+ theory that an index will be smaller and hence can be scanned with
+ less I/O.
+<li>Enhance the query optimizer so that ORDER BY clauses are more aggressively
+ optimized, especially in joins where various terms of the ORDER BY clause
+ come from separate tables of the join.
+<li>Add the ability to implement FROM clause subqueries as coroutines rather
+ that manifesting the subquery into a temporary table.
+<li>Enhancements the command-line shell:
+ <ol type='a'>
+ <li>Added the ".print" command
+ <li>Negative numbers in the ".width" command cause right-alignment
+ <li>Add the ".wheretrace" command when compiled with SQLITE_DEBUG
+ </ol>
+<li>Added the <a href="../pragma.html#pragma_busy_timeout">busy_timeout pragma</a>.
+<li>Added the <a href="../lang_corefunc.html#instr">instr()</a> SQL function.
+<li>Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbusyhandler">SQLITE_FCNTL_BUSYHANDLER</a> file control, used to allow VFS
+ implementations to get access to the busy handler callback.
+<li>The xDelete method in the built-in <a href="../vfs.html">VFSes</a> now return
+ SQLITE_IOERR_DELETE_NOENT if the file to be deleted does not exist.
+<li>Enhanced support for QNX.
+<li>Work around an optimizer bug in the MSVC compiler when targeting ARM.
+<li>Bug fix: Avoid various concurrency problems in <a href="../sharedcache.html">shared cache mode</a>.
+<li>Bug fix: Avoid a deadlock or crash if the <a href="../backup.html">backup API</a>, <a href="../sharedcache.html">shared cache</a>,
+ and the SQLite Encryption Extension are all used at once.
+<li>Bug fix: SQL functions created using the TCL interface honor the
+ "nullvalue" setting.
+<li>Bug fix: Fix a 32-bit overflow problem on CREATE INDEX for databases
+ larger than 16GB.
+<li>Bug fix: Avoid segfault when using the <a href="../lang_expr.html#collateop">COLLATE operator</a> inside of a
+ <a href="../lang_createtable.html#ckconst">CHECK constraint</a> or <a href="../lang_createview.html">view</a> in <a href="../sharedcache.html">shared cache mode</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2012-12-12 13:36:53 cd0b37c52658bfdf992b1e3dc467bae1835a94ae"
+<li>SHA1 for sqlite3.c: 2b413611f5e3e3b6ef5f618f2a9209cdf25cbcff"
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_15_1.html b/www/releaselog/3_7_15_1.html
new file mode 100644
index 0000000..7feaed0
--- /dev/null
+++ b/www/releaselog/3_7_15_1.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.15.1 On 2012-12-19</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.15.1 On 2012-12-19</h2><p><ol class='lessindent'>
+<li>Fix a bug, introduced in <a href="../releaselog/3_7_15.html">version 3.7.15</a>, that causes a segfault if
+ the AS name of a result column of a SELECT statement is used as a logical
+ term in the WHERE clause. Ticket
+ <a href="http://www.sqlite.org/src/info/a7b7803e8d1e869">a7b7803e8d1e869</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2012-12-19 20:39:10 6b85b767d0ff7975146156a99ad673f2c1a23318"
+<li>SHA1 for sqlite3.c: bbbaa68061e925bd4d7d18d7e1270935c5f7e39a
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_15_2.html b/www/releaselog/3_7_15_2.html
new file mode 100644
index 0000000..c7b6997
--- /dev/null
+++ b/www/releaselog/3_7_15_2.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.15.2 On 2013-01-09</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.15.2 On 2013-01-09</h2><p><ol class='lessindent'>
+<li>Fix a bug, introduced in <a href="../releaselog/3_7_15.html">version 3.7.15</a>, that causes an ORDER BY clause
+ to be optimized out of a three-way join when the ORDER BY is actually
+ required.
+ Ticket <a href="http://www.sqlite.org/src/info/598f5f7596b055">598f5f7596b055</a>
+
+<li>SQLITE_SOURCE_ID:
+ "2013-01-09 11:53:05 c0e09560d26f0a6456be9dd3447f5311eb4f238f"
+<li>SHA1 for sqlite3.c: 5741f47d1bc38aa0a8c38f09e60a5fe0031f272d
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_16.html b/www/releaselog/3_7_16.html
new file mode 100644
index 0000000..262db63
--- /dev/null
+++ b/www/releaselog/3_7_16.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.16 On 2013-03-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.16 On 2013-03-18</h2><p><ol class='lessindent'>
+<li>Added the <a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command.
+<li>Added new extended error codes for all SQLITE_CONSTRAINT errors
+<li>Added the SQLITE_READONLY_ROLLBACK extended error code for when a database
+ cannot be opened because it needs rollback recovery but is read-only.
+<li>Added SQL functions <a href="../lang_corefunc.html#unicode">unicode(A)</a> and <a href="../lang_corefunc.html#char">char(X1,...,XN)</a>.
+<li>Performance improvements for <a href="../pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>, especially in
+ cases where the number of free pages is greater than what will fit on a
+ single trunk page of the freelist.
+<li>Improved optimization of queries containing aggregate min() or max().
+<li>Enhance virtual tables so that they can potentially use an index when
+ the WHERE clause contains the IN operator.
+<li>Allow indices to be used for sorting even if prior terms of the index
+ are constrained by IN operators in the WHERE clause.
+<li>Enhance the <a href="../pragma.html#pragma_table_info">PRAGMA table_info</a> command so that the "pk" column is an
+ increasing integer to show the order of columns in the primary key.
+<li>Enhance the query optimizer to exploit transitive join constraints.
+<li>Performance improvements in the query optimizer.
+<li>Allow the error message from <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to be longer than
+ 20000 bytes.
+<li>Improved name resolution for deeply nested queries.
+<li>Added the test_regexp.c module as a demonstration of how to implement
+ the REGEXP operator.
+<li>Improved error messages in the <a href="../rtree.html">RTREE</a> extension.
+<li>Enhance the <a href="../cli.html">command-line shell</a> so that a non-zero argument to the
+ ".exit" command causes the shell to exit immediately without cleanly
+ shutting down the database connection.
+<li>Improved error messages for invalid boolean arguments to dot-commands
+ in the <a href="../cli.html">command-line shell</a>.
+<li>Improved error messages for "foreign key mismatch" showing the names of
+ the two tables involved.
+<li>Remove all uses of umask() in the unix VFS.
+<li>Added the <a href="../pragma.html#pragma_vdbe_addoptrace">PRAGMA vdbe_addoptrace</a> and <a href="../pragma.html#pragma_vdbe_debug">PRAGMA vdbe_debug</a> commands.
+<li>Change to use strncmp() or the equivalent instead of memcmp() when
+ comparing non-zero-terminated strings.
+<li>Update cygwin interfaces to omit deprecated API calls.
+<li>Enhance the <a href="../spellfix1.html">spellfix1</a> extension so that the edit distance cost table can
+ be changed at runtime by inserting a string like 'edit_cost_table=TABLE'
+ into the "command" field.
+
+<li>Bug fix: repair a long-standing problem that could cause incorrect query
+ results in a 3-way or larger join that compared INTEGER fields against TEXT
+ fields in two or more places.
+ Ticket <a href="http://www.sqlite.org/src/info/fc7bd6358f">fc7bd6358f</a>
+<li>Bug fix: Issue an error message if the 16-bit reference counter on a
+ view overflows due to an overly complex query.
+<li>Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply
+ nested UNION ALL queries.
+<li>Bug fix: Make sure the schema is up-to-date prior to running pragmas
+ table_info, index_list, index_info, and foreign_key_list.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-03-18 11:39:23 66d5f2b76750f3520eb7a495f6247206758f5b90"
+<li>SHA1 for sqlite3.c: 7308ab891ca1b2ebc596025cfe4dc36f1ee89cf6
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_16_1.html b/www/releaselog/3_7_16_1.html
new file mode 100644
index 0000000..c9e9f5e
--- /dev/null
+++ b/www/releaselog/3_7_16_1.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.16.1 On 2013-03-29</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.16.1 On 2013-03-29</h2><p><ol class='lessindent'>
+<li>Added the <a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command.
+<li>Added new extended error codes for all SQLITE_CONSTRAINT errors
+<li>Added the SQLITE_READONLY_ROLLBACK extended error code for when a database
+ cannot be opened because it needs rollback recovery but is read-only.
+<li>Added SQL functions <a href="../lang_corefunc.html#unicode">unicode(A)</a> and <a href="../lang_corefunc.html#char">char(X1,...,XN)</a>.
+<li>Performance improvements for <a href="../pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>, especially in
+ cases where the number of free pages is greater than what will fit on a
+ single trunk page of the freelist.
+<li>Improved optimization of queries containing aggregate min() or max().
+<li>Enhance virtual tables so that they can potentially use an index when
+ the WHERE clause contains the IN operator.
+<li>Allow indices to be used for sorting even if prior terms of the index
+ are constrained by IN operators in the WHERE clause.
+<li>Enhance the <a href="../pragma.html#pragma_table_info">PRAGMA table_info</a> command so that the "pk" column is an
+ increasing integer to show the order of columns in the primary key.
+<li>Enhance the query optimizer to exploit transitive join constraints.
+<li>Performance improvements in the query optimizer.
+<li>Allow the error message from <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to be longer than
+ 20000 bytes.
+<li>Improved name resolution for deeply nested queries.
+<li>Added the test_regexp.c module as a demonstration of how to implement
+ the REGEXP operator.
+<li>Improved error messages in the <a href="../rtree.html">RTREE</a> extension.
+<li>Enhance the <a href="../cli.html">command-line shell</a> so that a non-zero argument to the
+ ".exit" command causes the shell to exit immediately without cleanly
+ shutting down the database connection.
+<li>Improved error messages for invalid boolean arguments to dot-commands
+ in the <a href="../cli.html">command-line shell</a>.
+<li>Improved error messages for "foreign key mismatch" showing the names of
+ the two tables involved.
+<li>Remove all uses of umask() in the unix VFS.
+<li>Added the <a href="../pragma.html#pragma_vdbe_addoptrace">PRAGMA vdbe_addoptrace</a> and <a href="../pragma.html#pragma_vdbe_debug">PRAGMA vdbe_debug</a> commands.
+<li>Change to use strncmp() or the equivalent instead of memcmp() when
+ comparing non-zero-terminated strings.
+<li>Update cygwin interfaces to omit deprecated API calls.
+<li>Enhance the <a href="../spellfix1.html">spellfix1</a> extension so that the edit distance cost table can
+ be changed at runtime by inserting a string like 'edit_cost_table=TABLE'
+ into the "command" field.
+
+<li>Bug fix: repair a long-standing problem that could cause incorrect query
+ results in a 3-way or larger join that compared INTEGER fields against TEXT
+ fields in two or more places.
+ Ticket <a href="http://www.sqlite.org/src/info/fc7bd6358f">fc7bd6358f</a>
+<li>Bug fix: Issue an error message if the 16-bit reference counter on a
+ view overflows due to an overly complex query.
+<li>Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply
+ nested UNION ALL queries.
+<li>Bug fix: Make sure the schema is up-to-date prior to running pragmas
+ table_info, index_list, index_info, and foreign_key_list.
+
+</ol></p><p><ol class='lessindent'>
+<li>Fix for a bug in the ORDER BY optimizer that was introduced in
+ <a href="../releaselog/3_7_15.html">version 3.7.15</a> which would sometimes optimize out the sorting step
+ when in fact the sort was required.
+ Ticket <a href="http://www.sqlite.org/src/info/a179fe7465">a179fe7465</a>
+<li>Fix a long-standing bug in the <a href="../lang_expr.html#castexpr">CAST expression</a> that would recognize UTF16
+ characters as digits even if their most-significant-byte was not zero.
+ Ticket <a href="http://www.sqlite.org/src/info/689137afb6da41">689137afb6da41</a>.
+<li>Fix a bug in the NEAR operator of <a href="../fts3.html">FTS3</a> when applied to subfields.
+ Ticket <a href="http://www.sqlite.org/src/info/38b1ae018f">38b1ae018f</a>.
+<li>Fix a long-standing bug in the storage engine that would (very rarely)
+ cause a spurious report of an SQLITE_CORRUPT error but which was otherwise
+ harmless.
+ Ticket <a href="http://www.sqlite.org/src/info/6bfb98dfc0c">6bfb98dfc0c</a>.
+<li>The SQLITE_OMIT_MERGE_SORT option has been removed. The merge sorter is
+ now a required component of SQLite.
+<li>Fixed lots of spelling errors in the source-code comments
+<li>SQLITE_SOURCE_ID:
+ "2013-03-29 13:44:34 527231bc67285f01fb18d4451b28f61da3c4e39d"
+<li>SHA1 for sqlite3.c: 7a91ceceac9bcf47ceb8219126276e5518f7ff5a
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_16_2.html b/www/releaselog/3_7_16_2.html
new file mode 100644
index 0000000..7da066a
--- /dev/null
+++ b/www/releaselog/3_7_16_2.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.16.2 On 2013-04-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.16.2 On 2013-04-12</h2><p><ol class='lessindent'>
+<li>Added the <a href="../pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command.
+<li>Added new extended error codes for all SQLITE_CONSTRAINT errors
+<li>Added the SQLITE_READONLY_ROLLBACK extended error code for when a database
+ cannot be opened because it needs rollback recovery but is read-only.
+<li>Added SQL functions <a href="../lang_corefunc.html#unicode">unicode(A)</a> and <a href="../lang_corefunc.html#char">char(X1,...,XN)</a>.
+<li>Performance improvements for <a href="../pragma.html#pragma_incremental_vacuum">PRAGMA incremental_vacuum</a>, especially in
+ cases where the number of free pages is greater than what will fit on a
+ single trunk page of the freelist.
+<li>Improved optimization of queries containing aggregate min() or max().
+<li>Enhance virtual tables so that they can potentially use an index when
+ the WHERE clause contains the IN operator.
+<li>Allow indices to be used for sorting even if prior terms of the index
+ are constrained by IN operators in the WHERE clause.
+<li>Enhance the <a href="../pragma.html#pragma_table_info">PRAGMA table_info</a> command so that the "pk" column is an
+ increasing integer to show the order of columns in the primary key.
+<li>Enhance the query optimizer to exploit transitive join constraints.
+<li>Performance improvements in the query optimizer.
+<li>Allow the error message from <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to be longer than
+ 20000 bytes.
+<li>Improved name resolution for deeply nested queries.
+<li>Added the test_regexp.c module as a demonstration of how to implement
+ the REGEXP operator.
+<li>Improved error messages in the <a href="../rtree.html">RTREE</a> extension.
+<li>Enhance the <a href="../cli.html">command-line shell</a> so that a non-zero argument to the
+ ".exit" command causes the shell to exit immediately without cleanly
+ shutting down the database connection.
+<li>Improved error messages for invalid boolean arguments to dot-commands
+ in the <a href="../cli.html">command-line shell</a>.
+<li>Improved error messages for "foreign key mismatch" showing the names of
+ the two tables involved.
+<li>Remove all uses of umask() in the unix VFS.
+<li>Added the <a href="../pragma.html#pragma_vdbe_addoptrace">PRAGMA vdbe_addoptrace</a> and <a href="../pragma.html#pragma_vdbe_debug">PRAGMA vdbe_debug</a> commands.
+<li>Change to use strncmp() or the equivalent instead of memcmp() when
+ comparing non-zero-terminated strings.
+<li>Update cygwin interfaces to omit deprecated API calls.
+<li>Enhance the <a href="../spellfix1.html">spellfix1</a> extension so that the edit distance cost table can
+ be changed at runtime by inserting a string like 'edit_cost_table=TABLE'
+ into the "command" field.
+
+<li>Bug fix: repair a long-standing problem that could cause incorrect query
+ results in a 3-way or larger join that compared INTEGER fields against TEXT
+ fields in two or more places.
+ Ticket <a href="http://www.sqlite.org/src/info/fc7bd6358f">fc7bd6358f</a>
+<li>Bug fix: Issue an error message if the 16-bit reference counter on a
+ view overflows due to an overly complex query.
+<li>Bug fix: Avoid leaking memory on LIMIT and OFFSET clauses in deeply
+ nested UNION ALL queries.
+<li>Bug fix: Make sure the schema is up-to-date prior to running pragmas
+ table_info, index_list, index_info, and foreign_key_list.
+
+</ol></p><p><ol class='lessindent'>
+<li>Fix for a bug in the ORDER BY optimizer that was introduced in
+ <a href="../releaselog/3_7_15.html">version 3.7.15</a> which would sometimes optimize out the sorting step
+ when in fact the sort was required.
+ Ticket <a href="http://www.sqlite.org/src/info/a179fe7465">a179fe7465</a>
+<li>Fix a long-standing bug in the <a href="../lang_expr.html#castexpr">CAST expression</a> that would recognize UTF16
+ characters as digits even if their most-significant-byte was not zero.
+ Ticket <a href="http://www.sqlite.org/src/info/689137afb6da41">689137afb6da41</a>.
+<li>Fix a bug in the NEAR operator of <a href="../fts3.html">FTS3</a> when applied to subfields.
+ Ticket <a href="http://www.sqlite.org/src/info/38b1ae018f">38b1ae018f</a>.
+<li>Fix a long-standing bug in the storage engine that would (very rarely)
+ cause a spurious report of an SQLITE_CORRUPT error but which was otherwise
+ harmless.
+ Ticket <a href="http://www.sqlite.org/src/info/6bfb98dfc0c">6bfb98dfc0c</a>.
+<li>The SQLITE_OMIT_MERGE_SORT option has been removed. The merge sorter is
+ now a required component of SQLite.
+<li>Fixed lots of spelling errors in the source-code comments
+</ol></p><p><ol class='lessindent'>
+<li>Fix a bug (present since version 3.7.13) that could result in database corruption
+ on windows if two or more processes try to access the same database file at the
+ same time and immediately after third process crashed in the middle of committing
+ to that same file. See ticket
+ <a href="http://www.sqlite.org/src/info/7ff3120e4f">7ff3120e4f</a> for further
+ information.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-04-12 11:52:43 cbea02d93865ce0e06789db95fd9168ebac970c7"
+<li>SHA1 for sqlite3.c: d466b54789dff4fb0238b9232e74896deaefab94
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_17.html b/www/releaselog/3_7_17.html
new file mode 100644
index 0000000..db36561
--- /dev/null
+++ b/www/releaselog/3_7_17.html
@@ -0,0 +1,211 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.17 On 2013-05-20</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.17 On 2013-05-20</h2><p><ol class='lessindent'>
+<li>Add support for <a href="../mmap.html">memory-mapped I/O</a>.
+<li>Add the <a href="../c3ref/strglob.html">sqlite3_strglob()</a> convenience interface.
+<li>Assigned the integer at offset 68 in the <a href="../fileformat2.html#database_header">database header</a> as the
+ <a href="../fileformat2.html#appid">Application ID</a> for when SQLite is used as an <a href="../appfileformat.html">application file-format</a>.
+ Added the <a href="../pragma.html#pragma_application_id">PRAGMA application_id</a> command to query and set the Application ID.
+<li>Report rollback recovery in the <a href="../errlog.html">error log</a> as SQLITE_NOTICE_RECOVER_ROLLBACK.
+ Change the error log code for WAL recover from
+ SQLITE_OK to SQLITE_NOTICE_RECOVER_WAL.
+<li>Report the risky uses of <a href="../howtocorrupt.html#unlink">unlinked database files</a> and
+ <a href="../howtocorrupt.html#alias">database filename aliasing</a> as SQLITE_WARNING messages in the <a href="../errlog.html">error log</a>.
+<li>Added the <a href="../compile.html#trace_size_limit">SQLITE_TRACE_SIZE_LIMIT</a> compile-time option.
+<li>Increase the default value of <a href="../compile.html#max_schema_retry">SQLITE_MAX_SCHEMA_RETRY</a> to 50 and make sure
+ that it is honored in every place that a schema change might force a statement
+ retry.
+<li>Add a new test harness called "mptester" used to verify correct operation
+ when multiple processes are using the same database file at the same time.
+<li>Enhance the <a href="../loadext.html">extension loading</a> mechanism to be more flexible (while
+ still maintaining backwards compatibility) in two ways:
+ <ol>
+ <li>If the default entry point "sqlite3_extension_init" is not present in
+ the loadable extension, also try an entry point "sqlite3_X_init" where
+ "X" is based on the shared library filename. This allows every extension
+ to have a different entry point, which allows them to be statically linked
+ with no code changes.
+ <li>The shared library filename passed to <a href="../c3ref/load_extension.html">sqlite3_load_extension()</a> may
+ omit the filename suffix, and an appropriate architecture-dependent
+ suffix (".so", ".dylib", or ".dll") will be added automatically.
+ </ol>
+<li>Added many new loadable extensions to the source tree, including
+ amatch, closure, fuzzer, ieee754, nextchar, regexp, spellfix,
+ and wholenumber. See header comments on each extension source file
+ for further information about what that extension does.
+<li>Enhance <a href="../fts3.html">FTS3</a> to avoid using excess stack space when there are a huge
+ number of terms on the right-hand side of the MATCH operator. A side-effect
+ of this change is that the MATCH operator can only accommodate 12 NEAR
+ operators at a time.
+<li>Enhance the <a href="../fts3.html#fts4aux">fts4aux</a> virtual table so that it can be a TEMP table.
+<li>Added the <a href="../fts3.html#fts3tok">fts3tokenize virtual table</a> to the <a href="../fts3.html">full-text search</a> logic.
+<li>Query planner enhancement: Use the transitive property of constraints
+ to move constraints into the outer loops of a join whenever possible,
+ thereby reducing the amount of work that needs to occur in inner loops.
+<li>Discontinue the use of posix_fallocate() on unix, as it does not work on all
+ filesystems.
+<li>Improved tracing and debugging facilities in the Windows <a href="../vfs.html">VFS</a>.
+<li>Bug fix: Fix a potential <b>database corruption bug</b>
+ in <a href="../sharedcache.html">shared cache mode</a> when one
+ <a href="../c3ref/sqlite3.html">database connection</a> is closed while another is in the middle of a write
+ transaction.
+ Ticket <a href="http://www.sqlite.org/src/info/e636a050b7">e636a050b7</a>
+<li>Bug fix:
+ Only consider AS names from the result set as candidates for resolving
+ identifiers in the WHERE clause if there are no other matches. In the
+ ORDER BY clause, AS names take priority over any column names.
+ Ticket <a href="http://www.sqlite.org/src/info/2500cdb9be05">2500cdb9be05</a>
+<li>Bug fix: Do not allow a virtual table to cancel the ORDER BY clause unless
+ all outer loops are guaranteed to return no more than one row result.
+ Ticket <a href="http://www.sqlite.org/src/info/ba82a4a41eac1">ba82a4a41eac1</a>.
+<li>Bug fix: Do not suppress the ORDER BY clause on a virtual table query if
+ an IN constraint is used.
+ Ticket <a href="http://www.sqlite.org/src/info/f69b96e3076e">f69b96e3076e</a>.
+<li>Bug fix: The <a href="../cli.html">command-line shell</a> gives an exit code of 0 when terminated
+ using the ".quit" command.
+<li>Bug fix: Make sure <a href="../pragma.html#syntax">PRAGMA</a> statements appear in <a href="../c3ref/profile.html">sqlite3_trace()</a> output.
+<li>Bug fix: When a <a href="../lang_select.html#compound">compound query</a> that uses an ORDER BY clause
+ with a <a href="../lang_expr.html#collateop">COLLATE operator</a>, make sure that the sorting occurs
+ according to the specified collation and that the comparisons associate with
+ the compound query use the native collation. Ticket
+ <a href="http://www.sqlite.org/src/info/6709574d2a8d8">6709574d2a8d8</a>.
+<li>Bug fix: Makes sure the <a href="../c3ref/set_authorizer.html">authorizer</a> callback gets
+ a valid pointer to the string "ROWID" for the column-name parameter when
+ doing an <a href="../lang_update.html">UPDATE</a> that changes the rowid. Ticket
+ <a href="http://www.sqlite.org/src/info/0eb70d77cb05bb2272">0eb70d77cb05bb2272</a>
+<li>Bug fix: Do not move WHERE clause terms inside OR expressions that are
+ contained within an ON clause of a LEFT JOIN. Ticket
+ <a href="http://www.sqlite.org/src/info/f2369304e4">f2369304e4</a>
+<li>Bug fix: Make sure an error is always reported when attempting to preform
+ an operation that requires a <a href="../datatype3.html#collation">collating sequence</a> that is missing.
+ Ticket <a href="http://www.sqlite.org/src/info/0fc59f908b">0fc59f908b</a>
+
+<li>SQLITE_SOURCE_ID:
+ "2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668"
+<li>SHA1 for sqlite3.c: 246987605d0503c700a08b9ee99a6b5d67454aab
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_2.html b/www/releaselog/3_7_2.html
new file mode 100644
index 0000000..3402f0b
--- /dev/null
+++ b/www/releaselog/3_7_2.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.2 On 2010-08-24</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.2 On 2010-08-24</h2><p><ol class='lessindent'>
+<li> Fix an <a href="http://www.sqlite.org/src/info/5e10420e8d">
+ old and very obscure bug</a> that can lead to corruption of the
+ database <a href="../fileformat2.html#freelist">free-page list</a> when <a href="../pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> is used.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_3.html b/www/releaselog/3_7_3.html
new file mode 100644
index 0000000..d9928c4
--- /dev/null
+++ b/www/releaselog/3_7_3.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.3 On 2010-10-08</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.3 On 2010-10-08</h2><p><ol class='lessindent'>
+<li> Added the <a href="../c3ref/create_function.html">sqlite3_create_function_v2()</a> interface that includes a
+ destructor callback.
+<li> Added support for <a href="../rtree.html#customquery">custom r-tree queries</a> using application-supplied
+ callback routines to define the boundary of the query region.
+<li> The default page cache strives more diligently to avoid using memory
+ beyond what is allocated to it by <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>. Or if
+ using page cache is allocating from the heap, it strives to avoid
+ going over the <a href="../c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a>, even if
+ <a href="../compile.html#enable_memory_management">SQLITE_ENABLE_MEMORY_MANAGEMENT</a> is not set.
+<li> Added the <a href="../c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interface as a replacement for
+ <a href="../c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>.
+<li> The <a href="../lang_analyze.html">ANALYZE</a> command now gathers statistics on tables even if they
+ have no indices.
+<li> Tweaks to the query planner to help it do a better job of finding the
+ most efficient query plan for each query.
+<li> Enhanced the internal text-to-numeric conversion routines so that they
+ work with UTF8 or UTF16, thereby avoiding some UTF16-to-UTF8 text
+ conversions.
+<li> Fix a problem that was causing excess memory usage with large <a href="../wal.html">WAL</a>
+ transactions in win32 systems.
+<li> The interface between the VDBE and B-Tree layer is enhanced such that
+ the VDBE provides hints to the B-Tree layer letting the B-Tree layer
+ know when it is safe to use hashing instead of B-Trees for transient
+ tables.
+<li> Miscellaneous documentation enhancements.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_4.html b/www/releaselog/3_7_4.html
new file mode 100644
index 0000000..383d726
--- /dev/null
+++ b/www/releaselog/3_7_4.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.4 On 2010-12-07</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.4 On 2010-12-07</h2><p><ol class='lessindent'>
+<li> Added the <a href="../c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface to allow an existing
+ <a href="../c3ref/blob.html">sqlite3_blob</a> object to be rebound to a new row.
+<li> Use the new <a href="../c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface to improve the performance
+ of FTS.
+<li> <a href="../c3ref/vfs.html">VFSes</a> that do not support shared memory are allowed
+ to access <a href="../wal.html">WAL</a> databases if <a href="../pragma.html#pragma_locking_mode">PRAGMA locking_mode</a> is set to EXCLUSIVE.
+<li> Enhancements to <a href="../eqp.html">EXPLAIN QUERY PLAN</a>.
+<li> Added the <a href="../c3ref/stmt_readonly.html">sqlite3_stmt_readonly()</a> interface.
+<li> Added <a href="../pragma.html#pragma_checkpoint_fullfsync">PRAGMA checkpoint_fullfsync</a>.
+<li> Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlfilepointer">SQLITE_FCNTL_FILE_POINTER</a> option
+ to <a href="../c3ref/file_control.html">sqlite3_file_control()</a>.
+<li> Added support for <a href="../fts3.html#fts4">FTS4</a> and enhancements
+ to the FTS <a href="../fts3.html#matchinfo">matchinfo()</a> function.
+<li> Added the test_superlock.c module which provides example
+ code for obtaining an exclusive lock to a rollback
+ or WAL database.
+<li> Added the test_multiplex.c module which provides
+ an example VFS that provides multiplexing (sharding)
+ of a DB, splitting it over multiple files of fixed size.
+<li> A <a href="http://www.sqlite.org/src/info/80ba201079">very obscure bug</a>
+ associated with the <a href="../optoverview.html#or_opt">or optimization</a> was fixed.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_5.html b/www/releaselog/3_7_5.html
new file mode 100644
index 0000000..c5c315f
--- /dev/null
+++ b/www/releaselog/3_7_5.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.5 On 2011-02-01</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.5 On 2011-02-01</h2><p><ol class='lessindent'>
+<li> Added the <a href="../c3ref/mprintf.html">sqlite3_vsnprintf()</a> interface.
+<li> Added the <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidehit">SQLITE_DBSTATUS_LOOKASIDE_HIT</a>,
+ <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemisssize">SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</a>, and
+ <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuslookasidemissfull">SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</a> options for the
+ <a href="../c3ref/db_status.html">sqlite3_db_status()</a> interface.
+<li> Added the <a href="../compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a> compile-time option.
+<li> Added the <a href="../compile.html#default_foreign_keys">SQLITE_DEFAULT_FOREIGN_KEYS</a> compile-time option.
+<li> Updates to <a href="../c3ref/stmt_readonly.html">sqlite3_stmt_readonly()</a> so that its result is well-defined
+ for all prepared statements and so that it works with <a href="../lang_vacuum.html">VACUUM</a>.
+<li> Added the "-heap" option to the <a href="../cli.html">command-line shell</a>
+<li> Fix <a href="http://www.sqlite.org/src/info/5d863f876e">a bug</a> involving
+ frequent changes in and out of WAL mode and
+ VACUUM that could (in theory) cause database corruption.
+<li> Enhance the <a href="../c3ref/profile.html">sqlite3_trace()</a> mechanism so that nested SQL statements
+ such as might be generated by virtual tables are shown but are shown
+ in comments and without parameter expansion. This
+ greatly improves tracing output when using the FTS3/4 and/or RTREE
+ virtual tables.
+<li> Change the xFileControl() methods on all built-in VFSes to return
+ <a href="../rescode.html#notfound">SQLITE_NOTFOUND</a> instead of <a href="../rescode.html#error">SQLITE_ERROR</a> for an unrecognized
+ operation code.
+<li> The SQLite core invokes the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsyncomitted">SQLITE_FCNTL_SYNC_OMITTED</a>
+ <a href="../c3ref/file_control.html">file control</a>
+ to the VFS in place of a call to xSync if the database has
+ <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to OFF.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_6.html b/www/releaselog/3_7_6.html
new file mode 100644
index 0000000..1c7674c
--- /dev/null
+++ b/www/releaselog/3_7_6.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.6 On 2011-04-12</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.6 On 2011-04-12</h2><p><ol class='lessindent'>
+<li> Added the <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface and enhanced the
+ <a href="../pragma.html#pragma_wal_checkpoint">wal_checkpoint pragma</a> to support blocking checkpoints.
+<li> Improvements to the query planner so that it makes better estimates of
+ plan costs and hence does a better job of choosing the right plan,
+ especially when <a href="../compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a> is used.
+<li> Fix a bug which prevented deferred foreign key constraints from being
+ enforced when <a href="../c3ref/finalize.html">sqlite3_finalize()</a> was not
+ called by one statement with a failed foreign key constraint prior to
+ another statement with foreign key constraints running.
+<li> Integer arithmetic operations that would have resulted in overflow
+ are now performed using floating-point instead.
+<li> Increased the version number on the <a href="../c3ref/vfs.html">VFS object</a> to
+ 3 and added new methods xSetSysCall, xGetSysCall, and xNextSysCall
+ used for doing full-coverage testing.
+<li> Increase the maximum value of <a href="../limits.html#max_attached">SQLITE_MAX_ATTACHED</a> from 30 to 62
+ (though the default value remains at 10).
+<li> Enhancements to FTS4:
+ <ol type="a">
+ <li> Added the <a href="../fts3.html#fts4aux">fts4aux</a> table
+ <li> Added support for <a href="../fts3.html#*fts4compression">compressed FTS4 content</a>
+ </ol>
+<li> Enhance the <a href="../lang_analyze.html">ANALYZE</a> command to support the name of an index
+ as its argument, in order to analyze just that one index.
+<li> Added the "unix-excl" built-in VFS on unix and unix-like platforms.
+<li> SQLITE_SOURCE_ID:
+ "2011-04-12 01:58:40 f9d43fa363d54beab6f45db005abac0a7c0c47a7"
+<li> SHA1 for sqlite3.c: f38df08547efae0ff4343da607b723f588bbd66b
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_6_1.html b/www/releaselog/3_7_6_1.html
new file mode 100644
index 0000000..447672b
--- /dev/null
+++ b/www/releaselog/3_7_6_1.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.6.1 On 2011-04-13</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.6.1 On 2011-04-13</h2><p><ol class='lessindent'>
+<li> Fix a bug in 3.7.6 that only appears if the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizehint">SQLITE_FCNTL_SIZE_HINT</a>
+ file control is used with a build of SQLite that makes use of the
+ HAVE_POSIX_FALLOCATE compile-time option and which has
+ SQLITE_ENABLE_LOCKING_MODE turned off.
+<li> SQLITE_SOURCE_ID:
+ "2011-04-13 14:40:25 a35e83eac7b185f4d363d7fa51677f2fdfa27695"
+<li> SHA1 for sqlite3.c: b81bfa27d3e09caf3251475863b1ce6dd9f6ab66
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_6_2.html b/www/releaselog/3_7_6_2.html
new file mode 100644
index 0000000..4229c5c
--- /dev/null
+++ b/www/releaselog/3_7_6_2.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.6.2 On 2011-04-17</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.6.2 On 2011-04-17</h2><p><ol class='lessindent'>
+<li> Fix the function prototype for the open(2) system call to agree with
+ POSIX. Without this fix, pthreads does not work correctly on NetBSD.
+<li> SQLITE_SOURCE_ID:
+ "2011-04-17 17:25:17 154ddbc17120be2915eb03edc52af1225eb7cb5e"
+<li> SHA1 for sqlite3.c: 806577fd524dd5f3bfd8d4d27392ed2752bc9701
+
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_6_3.html b/www/releaselog/3_7_6_3.html
new file mode 100644
index 0000000..42a3136
--- /dev/null
+++ b/www/releaselog/3_7_6_3.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.6.3 On 2011-05-19</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.6.3 On 2011-05-19</h2><p><ol class='lessindent'>
+<li> Fix a problem with <a href="../wal.html">WAL mode</a> which could cause transactions to
+ silently rollback if the <a href="../pragma.html#pragma_cache_size">cache_size</a> is set very small (less than 10)
+ and SQLite comes under memory pressure.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_7.html b/www/releaselog/3_7_7.html
new file mode 100644
index 0000000..41cac69
--- /dev/null
+++ b/www/releaselog/3_7_7.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.7 On 2011-06-23</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.7 On 2011-06-23</h2><p><ol class='lessindent'>
+<li> Add support for <a href="../uri.html">URI filenames</a>
+<li> Add the <a href="../c3ref/vtab_config.html">sqlite3_vtab_config()</a> interface in
+ support of <a href="../lang_conflict.html">ON CONFLICT</a> clauses with <a href="../vtab.html">virtual tables</a>.
+<li> Add the <a href="../vtab.html#xsavepoint">xSavepoint</a>, <a href="../vtab.html#xsavepoint">xRelease</a> and <a href="../vtab.html#xsavepoint">xRollbackTo</a> methods in
+ <a href="../vtab.html">virtual tables</a> in support of <a href="../lang_savepoint.html">SAVEPOINT</a> for virtual tables.
+<li> Update the built-in <a href="../fts3.html">FTS3/FTS4</a> and <a href="../rtree.html">RTREE</a> virtual tables to support
+ <a href="../lang_conflict.html">ON CONFLICT</a> clauses and <a href="../lang_replace.html">REPLACE</a>.
+<li> Avoid unnecessary reparsing of the database schema.
+<li> Added support for the <a href="../fts3.html#fts4prefix">FTS4 prefix option</a> and the <a href="../fts3.html#fts4order">FTS4 order option</a>.
+<li> Allow <a href="../wal.html">WAL-mode</a> databases to be opened read-only as long as
+ there is an existing read/write connection.
+<li> Added support for <a href="../shortnames.html">short filenames</a>.
+<li> SQLITE_SOURCE_ID:
+ "2011-06-23 19:49:22 4374b7e83ea0a3fbc3691f9c0c936272862f32f2"
+<li> SHA1 for sqlite3.c: 5bbe79e206ae5ffeeca760dbd0d66862228db551
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_7_1.html b/www/releaselog/3_7_7_1.html
new file mode 100644
index 0000000..35774c9
--- /dev/null
+++ b/www/releaselog/3_7_7_1.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.7.1 On 2011-06-28</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.7.1 On 2011-06-28</h2><p><ol class='lessindent'>
+<li> Fix <a href="http://www.sqlite.org/src/info/25ee812710">a bug</a> causing
+ <a href="../pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a> statements compiled using sqlite3_prepare()
+ to fail with an <a href="../rescode.html#schema">SQLITE_SCHEMA</a> error.
+<li> SQLITE_SOURCE_ID:
+ "2011-06-28 17:39:05 af0d91adf497f5f36ec3813f04235a6e195a605f"
+<li> SHA1 for sqlite3.c: d47594b8a02f6cf58e91fb673e96cb1b397aace0
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_8.html b/www/releaselog/3_7_8.html
new file mode 100644
index 0000000..01bd645
--- /dev/null
+++ b/www/releaselog/3_7_8.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.8 On 2011-09-19</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.8 On 2011-09-19</h2><p><ol class='lessindent'>
+<li> Orders of magnitude performance improvement for <a href="../lang_createindex.html">CREATE INDEX</a> on
+ very large tables.
+<li> Improved the windows VFS to better defend against interference
+ from anti-virus software.
+<li> Improved query plan optimization when the DISTINCT keyword is present.
+<li> Allow more system calls to be overridden in the unix VFS - to provide
+ better support for chromium sandboxes.
+<li> Increase the default size of a lookahead cache line from 100 to 128 bytes.
+<li> Enhancements to the test_quota.c module so that it can track
+ preexisting files.
+<li> Bug fix: Virtual tables now handle IS NOT NULL constraints correctly.
+<li> Bug fixes: Correctly handle nested correlated subqueries used with
+ indices in a WHERE clause.
+<li> SQLITE_SOURCE_ID:
+ "2011-09-19 14:49:19 3e0da808d2f5b4d12046e05980ca04578f581177"
+<li> SHA1 for sqlite3.c: bfcd74a655636b592c5dba6d0d5729c0f8e3b4de
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_7_9.html b/www/releaselog/3_7_9.html
new file mode 100644
index 0000000..30b6b6a
--- /dev/null
+++ b/www/releaselog/3_7_9.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.7.9 On 2011-11-01</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.7.9 On 2011-11-01</h2><p><ol class='lessindent'>
+<li>If a search token (on the right-hand side of the MATCH operator) in
+ <a href="../fts3.html#fts4">FTS4</a> begins with "&#94;" then that token must be the first in its field
+ of the document. <b>** Potentially Incompatible Change **</b>
+<li>Added options <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuscachehit">SQLITE_DBSTATUS_CACHE_HIT</a> and <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatuscachemiss">SQLITE_DBSTATUS_CACHE_MISS</a>
+ to the <a href="../c3ref/db_status.html">sqlite3_db_status()</a> interface.
+<li>Removed support for <a href="../compile.html#enable_stat2">SQLITE_ENABLE_STAT2</a>, replacing it with the much
+ more capable <a href="../compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> option.
+<li>Enhancements to the sqlite3_analyzer utility program, including the
+ --pageinfo and --stats options and support for multiplexed databases.
+<li>Enhance the <a href="../c3ref/data_count.html">sqlite3_data_count()</a> interface so that it can be used to
+ determine if SQLITE_DONE has been seen on the prepared statement.
+<li>Added the <a href="../c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntloverwrite">SQLITE_FCNTL_OVERWRITE</a> file-control by which the SQLite core
+ indicates to the VFS that the current transaction will overwrite the
+ entire database file.
+<li>Increase the default <a href="../malloc.html#lookaside">lookaside memory allocator</a> allocation size from
+ 100 to 128 bytes.
+<li>Enhanced the query planner so that it can factor terms in and out of
+ OR expressions in the WHERE clause in an effort to find better indices.
+<li>Added the <a href="../compile.html#direct_overflow_read">SQLITE_DIRECT_OVERFLOW_READ</a> compile-time option, causing
+ <a href="../fileformat2.html#ovflpgs">overflow pages</a> to be read directly from the database file,
+ bypassing the <a href="../c3ref/pcache_methods2.html">page cache</a>.
+<li>Remove limits on the magnitude of precision and width value in the
+ format specifiers of the <a href="../c3ref/mprintf.html">sqlite3_mprintf()</a> family of string rendering
+ routines.
+<li>Fix a bug that prevent <a href="../lang_altertable.html">ALTER TABLE ... RENAME</a> from working
+ on some virtual tables in a database with a UTF16 encoding.
+<li>Fix a bug in ASCII-to-float conversion that causes slow performance and
+ incorrect results when converting numbers with ridiculously large exponents.
+<li>Fix a bug that causes incorrect results in aggregate queries that use
+ multiple aggregate functions whose arguments contain complicated expressions
+ that differ only in the case of string literals contained within those
+ expressions.
+<li>Fix a bug that prevented the <a href="../pragma.html#pragma_page_count">page_count</a> and <a href="../pragma.html#pragma_quick_check">quick_check</a> pragmas from
+ working correctly if their names were capitalized.
+<li>Fix a bug that caused <a href="../lang_vacuum.html">VACUUM</a> to fail if the <a href="../pragma.html#pragma_count_changes">count_changes pragma</a> was
+ engaged.
+<li>Fix a bug in <a href="../vtab.html">virtual table</a> implementation that causes a crash if
+ an <a href="../fts3.html#fts4">FTS4</a> table is <a href="../lang_droptable.html">dropped</a> inside a transaction and
+ a <a href="../lang_savepoint.html">SAVEPOINT</a> occurs afterwards.
+<li>SQLITE_SOURCE_ID:
+ "2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e"
+<li>SHA1 for sqlite3.c: becd16877f4f9b281b91c97e106089497d71bb47
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_0.html b/www/releaselog/3_8_0.html
new file mode 100644
index 0000000..f62661c
--- /dev/null
+++ b/www/releaselog/3_8_0.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.0 On 2013-08-26</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.0 On 2013-08-26</h2><p><ol class='lessindent'>
+<li>Add support for <a href="../partialindex.html">partial indexes</a></li>
+<li>Cut-over to the <a href="../queryplanner-ng.html">next generation query planner</a> for faster and better query plans.
+<li>The <a href="../eqp.html">EXPLAIN QUERY PLAN</a> output no longer shows an estimate of the number of
+ rows generated by each loop in a join.
+<li>Added the <a href="../fts3.html#fts4notindexed">FTS4 notindexed option</a>, allowing non-indexed columns in an FTS4 table.
+<li>Added the <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">SQLITE_STMTSTATUS_VM_STEP</a> option to <a href="../c3ref/stmt_status.html">sqlite3_stmt_status()</a>.
+<li>Added the <a href="../pragma.html#pragma_cache_spill">cache_spill pragma</a>.
+<li>Added the <a href="../pragma.html#pragma_query_only">query_only pragma</a>.
+<li>Added the <a href="../pragma.html#pragma_defer_foreign_keys">defer_foreign_keys pragma</a> and the
+ <a href="../c3ref/db_status.html">sqlite3_db_status</a>(db, <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">SQLITE_DBSTATUS_DEFERRED_FKS</a>,...) C-language interface.
+<li>Added the "percentile()" function as a <a href="../loadext.html">loadable extension</a> in the ext/misc
+ subdirectory of the source tree.
+<li>Added the <a href="../compile.html#allow_uri_authority">SQLITE_ALLOW_URI_AUTHORITY</a> compile-time option.
+<li>Add the <a href="../c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension(X)</a> interface.
+<li>A running SELECT statement that lacks a FROM clause (or any other statement that
+ never reads or writes from any database file) will not prevent a read
+ transaction from closing.
+<li>Add the <a href="../compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a> compile-time option. Setting this option
+ to 0 disables automatic indices by default.
+<li>Issue an <a href="../rescode.html#warning_autoindex">SQLITE_WARNING_AUTOINDEX</a> warning on the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> whenever
+ the query planner uses an automatic index.
+<li>Added the <a href="../compile.html#fts3_max_expr_depth">SQLITE_FTS3_MAX_EXPR_DEPTH</a> compile-time option.
+<li>Added an optional 5th parameter defining the collating sequence to the
+ next_char() extension SQL function.
+<li>The <a href="../rescode.html#busy_snapshot">SQLITE_BUSY_SNAPSHOT</a> extended error code is returned in WAL mode when
+ a read transaction cannot be upgraded to a write transaction because the read is
+ on an older snapshot.
+<li>Enhancements to the sqlite3_analyzer utility program to provide size
+ information separately for each individual index of a table, in addition to
+ the aggregate size.
+<li>Allow read transactions to be freely opened and closed by SQL statements run
+ from within the implementation of <a href="../appfunc.html">application-defined SQL functions</a> if the
+ function is called by a SELECT statement that does not access any database table.
+<li>Disable the use of posix_fallocate() on all (unix) systems unless the
+ HAVE_POSIX_FALLOCATE compile-time option is used.
+<li>Update the ".import" command in the <a href="../cli.html">command-line shell</a> to support multi-line
+ fields and correct RFC-4180 quoting and to issue warning and/or error messages
+ if the input text is not strictly RFC-4180 compliant.
+<li>Bug fix: In the <a href="../fts3.html#unicode61">unicode61</a> tokenizer of <a href="../fts3.html#fts4">FTS4</a>, treat all private code points
+ as identifier symbols.
+<li>Bug fix: Bare identifiers in ORDER BY clauses bind more tightly to output column
+ names, but identifiers in expressions bind more tightly to input column names.
+ Identifiers in GROUP BY clauses always prefer output column names, however.
+<li>Bug fixes: Multiple problems in the legacy query optimizer were fixed by the
+ move to <a href="../queryplanner-ng.html">NGQP</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-08-26 04:50:08 f64cd21e2e23ed7cff48f7dafa5e76adde9321c2"
+<li>SHA1 for sqlite3.c: b7347f4b4c2a840e6ba12040093d606bd16ea21e
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_0_1.html b/www/releaselog/3_8_0_1.html
new file mode 100644
index 0000000..c93eace
--- /dev/null
+++ b/www/releaselog/3_8_0_1.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.0.1 On 2013-08-29</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.0.1 On 2013-08-29</h2><p><ol class='lessindent'>
+<li>Add support for <a href="../partialindex.html">partial indexes</a></li>
+<li>Cut-over to the <a href="../queryplanner-ng.html">next generation query planner</a> for faster and better query plans.
+<li>The <a href="../eqp.html">EXPLAIN QUERY PLAN</a> output no longer shows an estimate of the number of
+ rows generated by each loop in a join.
+<li>Added the <a href="../fts3.html#fts4notindexed">FTS4 notindexed option</a>, allowing non-indexed columns in an FTS4 table.
+<li>Added the <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">SQLITE_STMTSTATUS_VM_STEP</a> option to <a href="../c3ref/stmt_status.html">sqlite3_stmt_status()</a>.
+<li>Added the <a href="../pragma.html#pragma_cache_spill">cache_spill pragma</a>.
+<li>Added the <a href="../pragma.html#pragma_query_only">query_only pragma</a>.
+<li>Added the <a href="../pragma.html#pragma_defer_foreign_keys">defer_foreign_keys pragma</a> and the
+ <a href="../c3ref/db_status.html">sqlite3_db_status</a>(db, <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">SQLITE_DBSTATUS_DEFERRED_FKS</a>,...) C-language interface.
+<li>Added the "percentile()" function as a <a href="../loadext.html">loadable extension</a> in the ext/misc
+ subdirectory of the source tree.
+<li>Added the <a href="../compile.html#allow_uri_authority">SQLITE_ALLOW_URI_AUTHORITY</a> compile-time option.
+<li>Add the <a href="../c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension(X)</a> interface.
+<li>A running SELECT statement that lacks a FROM clause (or any other statement that
+ never reads or writes from any database file) will not prevent a read
+ transaction from closing.
+<li>Add the <a href="../compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a> compile-time option. Setting this option
+ to 0 disables automatic indices by default.
+<li>Issue an <a href="../rescode.html#warning_autoindex">SQLITE_WARNING_AUTOINDEX</a> warning on the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> whenever
+ the query planner uses an automatic index.
+<li>Added the <a href="../compile.html#fts3_max_expr_depth">SQLITE_FTS3_MAX_EXPR_DEPTH</a> compile-time option.
+<li>Added an optional 5th parameter defining the collating sequence to the
+ next_char() extension SQL function.
+<li>The <a href="../rescode.html#busy_snapshot">SQLITE_BUSY_SNAPSHOT</a> extended error code is returned in WAL mode when
+ a read transaction cannot be upgraded to a write transaction because the read is
+ on an older snapshot.
+<li>Enhancements to the sqlite3_analyzer utility program to provide size
+ information separately for each individual index of a table, in addition to
+ the aggregate size.
+<li>Allow read transactions to be freely opened and closed by SQL statements run
+ from within the implementation of <a href="../appfunc.html">application-defined SQL functions</a> if the
+ function is called by a SELECT statement that does not access any database table.
+<li>Disable the use of posix_fallocate() on all (unix) systems unless the
+ HAVE_POSIX_FALLOCATE compile-time option is used.
+<li>Update the ".import" command in the <a href="../cli.html">command-line shell</a> to support multi-line
+ fields and correct RFC-4180 quoting and to issue warning and/or error messages
+ if the input text is not strictly RFC-4180 compliant.
+<li>Bug fix: In the <a href="../fts3.html#unicode61">unicode61</a> tokenizer of <a href="../fts3.html#fts4">FTS4</a>, treat all private code points
+ as identifier symbols.
+<li>Bug fix: Bare identifiers in ORDER BY clauses bind more tightly to output column
+ names, but identifiers in expressions bind more tightly to input column names.
+ Identifiers in GROUP BY clauses always prefer output column names, however.
+<li>Bug fixes: Multiple problems in the legacy query optimizer were fixed by the
+ move to <a href="../queryplanner-ng.html">NGQP</a>.
+
+</ol></p><p><ol class='lessindent'>
+<li>Fix an off-by-one error that caused quoted empty string at the end of a
+CRNL-terminated line of CSV input to be misread by the command-line shell.
+<li>Fix a query planner bug involving a LEFT JOIN with a BETWEEN or LIKE/GLOB
+constraint and then another INNER JOIN to the right that involves an OR constraint.
+<li>Fix a query planner bug that could result in a segfault when querying tables
+with a UNIQUE or PRIMARY KEY constraint with more than four columns.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-08-29 17:35:01 352362bc01660edfbda08179d60f09e2038a2f49"
+<li>SHA1 for sqlite3.c: 99906bf63e6cef63d6f3d7f8526ac4a70e76559e
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_0_2.html b/www/releaselog/3_8_0_2.html
new file mode 100644
index 0000000..cc95020
--- /dev/null
+++ b/www/releaselog/3_8_0_2.html
@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.0.2 On 2013-09-03</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.0.2 On 2013-09-03</h2><p><ol class='lessindent'>
+<li>Add support for <a href="../partialindex.html">partial indexes</a></li>
+<li>Cut-over to the <a href="../queryplanner-ng.html">next generation query planner</a> for faster and better query plans.
+<li>The <a href="../eqp.html">EXPLAIN QUERY PLAN</a> output no longer shows an estimate of the number of
+ rows generated by each loop in a join.
+<li>Added the <a href="../fts3.html#fts4notindexed">FTS4 notindexed option</a>, allowing non-indexed columns in an FTS4 table.
+<li>Added the <a href="../c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">SQLITE_STMTSTATUS_VM_STEP</a> option to <a href="../c3ref/stmt_status.html">sqlite3_stmt_status()</a>.
+<li>Added the <a href="../pragma.html#pragma_cache_spill">cache_spill pragma</a>.
+<li>Added the <a href="../pragma.html#pragma_query_only">query_only pragma</a>.
+<li>Added the <a href="../pragma.html#pragma_defer_foreign_keys">defer_foreign_keys pragma</a> and the
+ <a href="../c3ref/db_status.html">sqlite3_db_status</a>(db, <a href="../c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">SQLITE_DBSTATUS_DEFERRED_FKS</a>,...) C-language interface.
+<li>Added the "percentile()" function as a <a href="../loadext.html">loadable extension</a> in the ext/misc
+ subdirectory of the source tree.
+<li>Added the <a href="../compile.html#allow_uri_authority">SQLITE_ALLOW_URI_AUTHORITY</a> compile-time option.
+<li>Add the <a href="../c3ref/cancel_auto_extension.html">sqlite3_cancel_auto_extension(X)</a> interface.
+<li>A running SELECT statement that lacks a FROM clause (or any other statement that
+ never reads or writes from any database file) will not prevent a read
+ transaction from closing.
+<li>Add the <a href="../compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a> compile-time option. Setting this option
+ to 0 disables automatic indices by default.
+<li>Issue an <a href="../rescode.html#warning_autoindex">SQLITE_WARNING_AUTOINDEX</a> warning on the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfiglog">SQLITE_CONFIG_LOG</a> whenever
+ the query planner uses an automatic index.
+<li>Added the <a href="../compile.html#fts3_max_expr_depth">SQLITE_FTS3_MAX_EXPR_DEPTH</a> compile-time option.
+<li>Added an optional 5th parameter defining the collating sequence to the
+ next_char() extension SQL function.
+<li>The <a href="../rescode.html#busy_snapshot">SQLITE_BUSY_SNAPSHOT</a> extended error code is returned in WAL mode when
+ a read transaction cannot be upgraded to a write transaction because the read is
+ on an older snapshot.
+<li>Enhancements to the sqlite3_analyzer utility program to provide size
+ information separately for each individual index of a table, in addition to
+ the aggregate size.
+<li>Allow read transactions to be freely opened and closed by SQL statements run
+ from within the implementation of <a href="../appfunc.html">application-defined SQL functions</a> if the
+ function is called by a SELECT statement that does not access any database table.
+<li>Disable the use of posix_fallocate() on all (unix) systems unless the
+ HAVE_POSIX_FALLOCATE compile-time option is used.
+<li>Update the ".import" command in the <a href="../cli.html">command-line shell</a> to support multi-line
+ fields and correct RFC-4180 quoting and to issue warning and/or error messages
+ if the input text is not strictly RFC-4180 compliant.
+<li>Bug fix: In the <a href="../fts3.html#unicode61">unicode61</a> tokenizer of <a href="../fts3.html#fts4">FTS4</a>, treat all private code points
+ as identifier symbols.
+<li>Bug fix: Bare identifiers in ORDER BY clauses bind more tightly to output column
+ names, but identifiers in expressions bind more tightly to input column names.
+ Identifiers in GROUP BY clauses always prefer output column names, however.
+<li>Bug fixes: Multiple problems in the legacy query optimizer were fixed by the
+ move to <a href="../queryplanner-ng.html">NGQP</a>.
+
+</ol></p><p><ol class='lessindent'>
+<li>Fix an off-by-one error that caused quoted empty string at the end of a
+CRNL-terminated line of CSV input to be misread by the command-line shell.
+<li>Fix a query planner bug involving a LEFT JOIN with a BETWEEN or LIKE/GLOB
+constraint and then another INNER JOIN to the right that involves an OR constraint.
+<li>Fix a query planner bug that could result in a segfault when querying tables
+with a UNIQUE or PRIMARY KEY constraint with more than four columns.
+
+</ol></p><p><ol class='lessindent'>
+<li>Fix a bug in the optimization that attempts to omit unused LEFT JOINs
+
+<li>SQLITE_SOURCE_ID:
+ "2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef"
+<li>SHA1 for sqlite3.c: 6cf0c7b46975a87a0dc3fba69c229a7de61b0c21
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_1.html b/www/releaselog/3_8_1.html
new file mode 100644
index 0000000..3f6e4dd
--- /dev/null
+++ b/www/releaselog/3_8_1.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.1 On 2013-10-17</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.1 On 2013-10-17</h2><p><ol class='lessindent'>
+<li>Added the <a href="../lang_corefunc.html#unlikely">unlikely()</a> and <a href="../lang_corefunc.html#likelihood">likelihood()</a> SQL functions to be used
+ as hints to the query planner.
+<li>Enhancements to the query planner:
+<ol type='a'>
+ <li>Take into account the fact WHERE clause terms that cannot be used with indices
+ still probably reduce the number of output rows.
+ <li>Estimate the sizes of table and index rows and use the smallest applicable B-Tree
+ for full scans and "count(*)" operations.
+</ol>
+<li>Added the <a href="../pragma.html#pragma_soft_heap_limit">soft_heap_limit pragma</a>.
+<li>Added support for <a href="../compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>
+<li>Added support for "sz=NNN" parameters at the end of
+ <a href="../fileformat2.html#stat1tab">sqlite_stat1.stat</a> fields
+ used to specify the average length in bytes for table and index rows.
+<li>Avoid running foreign-key constraint checks on an UPDATE if none of the
+ modified columns are associated with foreign keys.
+<li>Added the <a href="../compile.html#minimum_file_descriptor">SQLITE_MINIMUM_FILE_DESCRIPTOR</a> compile-time option
+<li>Added the win32-longpath VFS on windows, permitting filenames up to 32K
+ characters in length.
+<li>The <a href="../lang_datefunc.html">Date And Time Functions</a> are enhanced so that the current time
+ (ex: julianday('now')) is always the same for multiple function invocations
+ within the same <a href="../c3ref/step.html">sqlite3_step()</a> call.
+<li>Add the "totype.c" extension, implementing the tointeger() and toreal()
+ SQL functions.
+<li><a href="../fts3.html#fts4">FTS4</a> queries are better able to make use of docid<$limit constraints to
+ limit the amount of I/O required.
+<li>Added the hidden <a href="../fts3.html#f4alid">fts4aux languageid column</a> to the <a href="../fts3.html#fts4aux">fts4aux</a> virtual table.
+<li>The <a href="../lang_vacuum.html">VACUUM</a> command packs the database about 1% tighter.
+<li>The sqlite3_analyzer utility program is updated to provide better descriptions
+ and to compute a more accurate estimate for "Non-sequential pages"
+<li>Refactor the implementation of PRAGMA statements to improve parsing performance.
+<li>The directory used to hold temporary files on unix can now be set using
+ the SQLITE_TMPDIR environment variable, which takes precedence over the
+ TMPDIR environment variable. The <a href="../c3ref/temp_directory.html">sqlite3_temp_directory</a> global variable
+ still has higher precedence than both environment variables, however.
+<li>Added the <a href="../pragma.html#pragma_stats">PRAGMA stats</a> statement.
+<li><b>Bug fix:</b> Return the correct answer for "SELECT count(*) FROM table" even if
+ there is a <a href="../partialindex.html">partial index</a> on the table. Ticket
+ <a href="http://www.sqlite.org/src/info/a5c8ed66ca">a5c8ed66ca</a>.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a"
+<li>SHA1 for sqlite3.c: 0a54d76566728c2ba96292a49b138e4f69a7c391
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_10.html b/www/releaselog/3_8_10.html
new file mode 100644
index 0000000..c37bb3a
--- /dev/null
+++ b/www/releaselog/3_8_10.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.10 On 2015-05-07</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.10 On 2015-05-07</h2><p><ol class='lessindent'>
+<li>Added the <a href="../sqldiff.html">sqldiff.exe</a> utility program for computing the differences between two
+ SQLite database files.
+<li>Added the <a href="../fts3.html#matchinfo-y">matchinfo y flag</a> to the
+ <a href="../fts3.html#matchinfo">matchinfo()</a> function of <a href="../fts3.html">FTS3</a>.
+<li>Performance improvements for <a href="../lang_select.html#orderby">ORDER BY</a>, <a href="../lang_vacuum.html">VACUUM</a>, <a href="../lang_createindex.html">CREATE INDEX</a>,
+ <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, and <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a>.
+<li>Fix many obscure problems discovered while <a href="../testing.html#fuzztesting">SQL fuzzing</a>.
+<li>Identify all methods for important objects in the interface documentation.
+ (<a href="../c3ref/context.html">example</a>)
+<li>Made the <a href="../testing.html#aflfuzz">American Fuzzy Lop fuzzer</a>
+ a standard part of SQLite's <a href="../testing.html">testing strategy</a>.
+<li>Add the ".binary" and ".limits" commands to the <a href="../cli.html">command-line shell</a>.
+<li>Make the <a href="../dbstat.html">dbstat virtual table</a> part of standard builds when
+ compiled with the <a href="../compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> option.
+
+<li>SQLITE_SOURCE_ID: "2015-05-07 11:53:08 cf975957b9ae671f34bb65f049acf351e650d437"
+<li>SHA1 for sqlite3.c: 0b34f0de356a3f21b9dfc761f3b7821b6353c570
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_10_1.html b/www/releaselog/3_8_10_1.html
new file mode 100644
index 0000000..3225776
--- /dev/null
+++ b/www/releaselog/3_8_10_1.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.10.1 On 2015-05-09</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.10.1 On 2015-05-09</h2><p><b>Changes in version 3.8.10 (2015-05-07):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Added the <a href="../sqldiff.html">sqldiff.exe</a> utility program for computing the differences between two
+ SQLite database files.
+<li>Added the <a href="../fts3.html#matchinfo-y">matchinfo y flag</a> to the
+ <a href="../fts3.html#matchinfo">matchinfo()</a> function of <a href="../fts3.html">FTS3</a>.
+<li>Performance improvements for <a href="../lang_select.html#orderby">ORDER BY</a>, <a href="../lang_vacuum.html">VACUUM</a>, <a href="../lang_createindex.html">CREATE INDEX</a>,
+ <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, and <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a>.
+<li>Fix many obscure problems discovered while <a href="../testing.html#fuzztesting">SQL fuzzing</a>.
+<li>Identify all methods for important objects in the interface documentation.
+ (<a href="../c3ref/context.html">example</a>)
+<li>Made the <a href="../testing.html#aflfuzz">American Fuzzy Lop fuzzer</a>
+ a standard part of SQLite's <a href="../testing.html">testing strategy</a>.
+<li>Add the ".binary" and ".limits" commands to the <a href="../cli.html">command-line shell</a>.
+<li>Make the <a href="../dbstat.html">dbstat virtual table</a> part of standard builds when
+ compiled with the <a href="../compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> option.
+
+</ol>
+<p><b>Additional changes in version 3.8.10.1 (2015-05-09):</b></p>
+<p><ol class='lessindent'>
+<li value='9'>Make <a href="../c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> responsive to the <a href="../compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a>
+ compile-time option.
+<li>Fix a harmless warning in the <a href="../cli.html">command-line shell</a> on some versions of MSVC.
+<li>Fix minor issues with the <a href="../dbstat.html">dbstat virtual table</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-05-09 12:14:55 05b4b1f2a937c06c90db70c09890038f6c98ec40"
+<li>SHA1 for sqlite3.c: 85e4e1c08c7df28ef61bb9759a0d466e0eefbaa2
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_10_2.html b/www/releaselog/3_8_10_2.html
new file mode 100644
index 0000000..e6f15f7
--- /dev/null
+++ b/www/releaselog/3_8_10_2.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.10.2 On 2015-05-20</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.10.2 On 2015-05-20</h2><p><b>Changes in version 3.8.10 (2015-05-07):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Added the <a href="../sqldiff.html">sqldiff.exe</a> utility program for computing the differences between two
+ SQLite database files.
+<li>Added the <a href="../fts3.html#matchinfo-y">matchinfo y flag</a> to the
+ <a href="../fts3.html#matchinfo">matchinfo()</a> function of <a href="../fts3.html">FTS3</a>.
+<li>Performance improvements for <a href="../lang_select.html#orderby">ORDER BY</a>, <a href="../lang_vacuum.html">VACUUM</a>, <a href="../lang_createindex.html">CREATE INDEX</a>,
+ <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>, and <a href="../pragma.html#pragma_quick_check">PRAGMA quick_check</a>.
+<li>Fix many obscure problems discovered while <a href="../testing.html#fuzztesting">SQL fuzzing</a>.
+<li>Identify all methods for important objects in the interface documentation.
+ (<a href="../c3ref/context.html">example</a>)
+<li>Made the <a href="../testing.html#aflfuzz">American Fuzzy Lop fuzzer</a>
+ a standard part of SQLite's <a href="../testing.html">testing strategy</a>.
+<li>Add the ".binary" and ".limits" commands to the <a href="../cli.html">command-line shell</a>.
+<li>Make the <a href="../dbstat.html">dbstat virtual table</a> part of standard builds when
+ compiled with the <a href="../compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> option.
+
+</ol>
+<p><b>Additional changes in version 3.8.10.1 (2015-05-09):</b></p>
+<p><ol class='lessindent'>
+<li value='9'>Make <a href="../c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> responsive to the <a href="../compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a>
+ compile-time option.
+<li>Fix a harmless warning in the <a href="../cli.html">command-line shell</a> on some versions of MSVC.
+<li>Fix minor issues with the <a href="../dbstat.html">dbstat virtual table</a>.
+
+</ol>
+<p><b>Additional changes in version 3.8.10.2 (2015-05-20):</b></p>
+<p><ol class='lessindent'>
+<li value='12'>Fix an index corruption issue introduced by <a href="../releaselog/3_8_7.html">version 3.8.7</a>. An index
+ with a TEXT key can be corrupted by an <a href="../lang_insert.html">INSERT</a> into the corresponding
+ table if the table has two nested triggers that convert the key value to INTEGER
+ and back to TEXT again.
+ Ticket <a href="https://www.sqlite.org/src/info/34cd55d68e0e6e7c9a0711aab81a2ee3c354b4c0">34cd55d68e0</a>
+
+<li>SQLITE_SOURCE_ID: "2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4"
+<li>SHA1 for sqlite3.c: 638abb77965332c956dbbd2c8e4248e84da4eb63
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_11.html b/www/releaselog/3_8_11.html
new file mode 100644
index 0000000..1930344
--- /dev/null
+++ b/www/releaselog/3_8_11.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.11 On 2015-07-27</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.11 On 2015-07-27</h2><p><ol class='lessindent'>
+<li>Added the experimental <a href="../rbu.html">RBU</a> extension. Note that this extension is experimental
+ and subject to change in incompatible ways.
+<li>Added the experimental <a href="../fts5.html">FTS5</a> extension. Note that this extension is experimental
+ and subject to change in incompatible ways.
+<li>Added the <a href="../c3ref/value_dup.html">sqlite3_value_dup()</a> and <a href="../c3ref/value_dup.html">sqlite3_value_free()</a> interfaces.
+<li>Enhance the <a href="../spellfix1.html">spellfix1</a> extension to support <a href="../lang_conflict.html">ON CONFLICT</a> clauses.
+<li>The <a href="../lang_expr.html#isisnot">IS operator</a> is now able to drive indexes.
+<li>Enhance the query planner to permit <a href="../optoverview.html#autoindex">automatic indexing</a> on FROM-clause
+ subqueries that are implemented by co-routine.
+<li>Disallow the use of "rowid" in <a href="../lang_with.html">common table expressions</a>.
+<li>Added the <a href="../pragma.html#pragma_cell_size_check">PRAGMA cell_size_check</a> command for better and earlier
+ detection of database file corruption.
+<li>Added the <a href="../fts3.html#matchinfo-b">matchinfo 'b' flag</a> to the <a href="../fts3.html#matchinfo">matchinfo()</a> function in <a href="../fts3.html">FTS3</a>.
+<li>Improved fuzz-testing of database files, with fixes for problems found.
+<li>Add the fuzzcheck test program and automatically run this program
+ using both SQL and database test cases on "make test".
+<li>Added the <a href="../c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_VFS1</a> static mutex and use it in the
+ Windows <a href="../vfs.html">VFS</a>.
+<li>The <a href="../c3ref/profile.html">sqlite3_profile()</a> callback is invoked (by <a href="../c3ref/reset.html">sqlite3_reset()</a> or
+ <a href="../c3ref/finalize.html">sqlite3_finalize()</a>) for statements that did not run to completion.
+<li>Enhance the page cache so that it can preallocate a block of memory to
+ use for the initial set page cache lines. Set the default preallocation
+ to 100 pages. Yields about a 5% performance increase on common workloads.
+<li>Miscellaneous micro-optimizations result in 22.3% more work for the same
+ number of CPU cycles relative to the previous release.
+ SQLite now runs twice as fast as <a href="../releaselog/3_8_0.html">version 3.8.0</a> and three times as
+ fast as <a href="../releaselog/3_3_9.html">version 3.3.9</a>.
+ (Measured using
+ <a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
+ <a href="http://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
+ Ubuntu 14.04 x64 with gcc 4.8.2 and -Os. Your performance may vary.)
+<li>Added the <a href="../c3ref/result_blob.html">sqlite3_result_zeroblob64()</a> and <a href="../c3ref/bind_blob.html">sqlite3_bind_zeroblob64()</a>
+ interfaces.
+<p><b>Important bug fixes:</b>
+<li>Fix <a href="../lang_createtable.html#createtabas">CREATE TABLE AS</a> so that columns of type TEXT never end up
+ holding an INT value. Ticket
+ <a href="https://www.sqlite.org/src/info/f2ad7de056ab1dc9200">f2ad7de056ab1dc9200</a>
+<li>Fix <a href="../lang_createtable.html#createtabas">CREATE TABLE AS</a> so that it does not leave NULL entries in the
+ <a href="../schematab.html">sqlite_master table</a> if the SELECT statement on the right-hand side
+ aborts with an error. Ticket
+ <a href="https://www.sqlite.org/src/info/873cae2b6e25b">873cae2b6e25b</a>
+<li>Fix the <a href="../optoverview.html#skipscan">skip-scan optimization</a> so that it works correctly when
+ the <a href="../optoverview.html#or_opt">OR optimization</a> is used on <a href="../withoutrowid.html">WITHOUT ROWID</a> tables. Ticket
+ <a href="https://www.sqlite.org/src/info/8fd39115d8f46">8fd39115d8f46</a>
+<li>Fix the <a href="../c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="../c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> interfaces
+ so that they actually do provide a 64-bit answer.
+
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: "2015-07-27 13:49:41 b8e92227a469de677a66da62e4361f099c0b79d0"
+<li>SHA1 for sqlite3.c: 719f6891abcd9c459b5460b191d731cd12a3643e
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_11_1.html b/www/releaselog/3_8_11_1.html
new file mode 100644
index 0000000..f986026
--- /dev/null
+++ b/www/releaselog/3_8_11_1.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.11.1 On 2015-07-29</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.11.1 On 2015-07-29</h2><p><b>Changes in version 3.8.11 (2015-07-27):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Added the experimental <a href="../rbu.html">RBU</a> extension. Note that this extension is experimental
+ and subject to change in incompatible ways.
+<li>Added the experimental <a href="../fts5.html">FTS5</a> extension. Note that this extension is experimental
+ and subject to change in incompatible ways.
+<li>Added the <a href="../c3ref/value_dup.html">sqlite3_value_dup()</a> and <a href="../c3ref/value_dup.html">sqlite3_value_free()</a> interfaces.
+<li>Enhance the <a href="../spellfix1.html">spellfix1</a> extension to support <a href="../lang_conflict.html">ON CONFLICT</a> clauses.
+<li>The <a href="../lang_expr.html#isisnot">IS operator</a> is now able to drive indexes.
+<li>Enhance the query planner to permit <a href="../optoverview.html#autoindex">automatic indexing</a> on FROM-clause
+ subqueries that are implemented by co-routine.
+<li>Disallow the use of "rowid" in <a href="../lang_with.html">common table expressions</a>.
+<li>Added the <a href="../pragma.html#pragma_cell_size_check">PRAGMA cell_size_check</a> command for better and earlier
+ detection of database file corruption.
+<li>Added the <a href="../fts3.html#matchinfo-b">matchinfo 'b' flag</a> to the <a href="../fts3.html#matchinfo">matchinfo()</a> function in <a href="../fts3.html">FTS3</a>.
+<li>Improved fuzz-testing of database files, with fixes for problems found.
+<li>Add the fuzzcheck test program and automatically run this program
+ using both SQL and database test cases on "make test".
+<li>Added the <a href="../c3ref/c_mutex_fast.html">SQLITE_MUTEX_STATIC_VFS1</a> static mutex and use it in the
+ Windows <a href="../vfs.html">VFS</a>.
+<li>The <a href="../c3ref/profile.html">sqlite3_profile()</a> callback is invoked (by <a href="../c3ref/reset.html">sqlite3_reset()</a> or
+ <a href="../c3ref/finalize.html">sqlite3_finalize()</a>) for statements that did not run to completion.
+<li>Enhance the page cache so that it can preallocate a block of memory to
+ use for the initial set page cache lines. Set the default preallocation
+ to 100 pages. Yields about a 5% performance increase on common workloads.
+<li>Miscellaneous micro-optimizations result in 22.3% more work for the same
+ number of CPU cycles relative to the previous release.
+ SQLite now runs twice as fast as <a href="../releaselog/3_8_0.html">version 3.8.0</a> and three times as
+ fast as <a href="../releaselog/3_3_9.html">version 3.3.9</a>.
+ (Measured using
+ <a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
+ <a href="http://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
+ Ubuntu 14.04 x64 with gcc 4.8.2 and -Os. Your performance may vary.)
+<li>Added the <a href="../c3ref/result_blob.html">sqlite3_result_zeroblob64()</a> and <a href="../c3ref/bind_blob.html">sqlite3_bind_zeroblob64()</a>
+ interfaces.
+<p><b>Important bug fixes:</b>
+<li>Fix <a href="../lang_createtable.html#createtabas">CREATE TABLE AS</a> so that columns of type TEXT never end up
+ holding an INT value. Ticket
+ <a href="https://www.sqlite.org/src/info/f2ad7de056ab1dc9200">f2ad7de056ab1dc9200</a>
+<li>Fix <a href="../lang_createtable.html#createtabas">CREATE TABLE AS</a> so that it does not leave NULL entries in the
+ <a href="../schematab.html">sqlite_master table</a> if the SELECT statement on the right-hand side
+ aborts with an error. Ticket
+ <a href="https://www.sqlite.org/src/info/873cae2b6e25b">873cae2b6e25b</a>
+<li>Fix the <a href="../optoverview.html#skipscan">skip-scan optimization</a> so that it works correctly when
+ the <a href="../optoverview.html#or_opt">OR optimization</a> is used on <a href="../withoutrowid.html">WITHOUT ROWID</a> tables. Ticket
+ <a href="https://www.sqlite.org/src/info/8fd39115d8f46">8fd39115d8f46</a>
+<li>Fix the <a href="../c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="../c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> interfaces
+ so that they actually do provide a 64-bit answer.
+
+</ol>
+<p><b>Additional changes in version 3.8.11.1 (2015-07-29):</b></p>
+<p><ol class='lessindent'>
+<li value='21'>Restore an undocumented side-effect of <a href="../pragma.html#pragma_cache_size">PRAGMA cache_size</a>: force
+ the database schema to be parsed if the database has not been previously accessed.
+<li>Fix a long-standing problem in <a href="../c3ref/changes.html">sqlite3_changes()</a> for <a href="../withoutrowid.html">WITHOUT ROWID</a>
+ tables that was reported a few hours after the 3.8.11 release.
+<li>SQLITE_SOURCE_ID: "2015-07-29 20:00:57 cf538e2783e468bbc25e7cb2a9ee64d3e0e80b2f"
+<li>SHA1 for sqlite3.c: 3be71d99121fe5b17f057011025bcf84e7cc6c84
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_2.html b/www/releaselog/3_8_2.html
new file mode 100644
index 0000000..61e1d2e
--- /dev/null
+++ b/www/releaselog/3_8_2.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.2 On 2013-12-06</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.2 On 2013-12-06</h2><p><ol class='lessindent'>
+<li>Changed the defined behavior for the <a href="../lang_expr.html#castexpr">CAST expression</a> when floating point values
+ greater than +9223372036854775807 are cast into integers so that the
+ result is the largest possible integer, +9223372036854775807, instead of
+ the smallest possible integer, -9223372036854775808. After this change,
+ CAST(9223372036854775809.0 as INT) yields +9223372036854775807 instead
+ of -9223372036854775808.
+ <b><big>&larr;</big>&nbsp;Potentially Incompatible Change!</b>
+<li>Added support for <a href="../withoutrowid.html">WITHOUT ROWID</a> tables.
+<li>Added the <a href="../optoverview.html#skipscan">skip-scan optimization</a> to the query planner.
+<li>Extended the <a href="../vtab.html">virtual table</a> interface, and in particular the
+ <a href="../c3ref/index_info.html">sqlite3_index_info</a> object to allow a virtual table to report its estimate
+ on the number of rows that will be returned by a query.
+<li>Update the <a href="../rtree.html">R-Tree extension</a> to make use of the enhanced virtual table
+ interface.
+<li>Add the <a href="../compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option.
+<li>Enhanced the comments that are inserted into <a href="../lang_explain.html">EXPLAIN</a> output when the
+ <a href="../compile.html#enable_explain_comments">SQLITE_ENABLE_EXPLAIN_COMMENTS</a> compile-time option is enabled.
+<li>Performance enhancements in the VDBE, especially to the OP_Column opcode.
+<li>Factor constant subexpressions in inner loops out to the initialization code
+ in prepared statements.
+<li>Enhanced the ".explain" output formatting of the <a href="../cli.html">command-line shell</a>
+ so that loops are indented to better show the structure of the program.
+<li>Enhanced the ".timer" feature of the <a href="../cli.html">command-line shell</a> so that it
+ shows wall-clock time in addition to system and user times.
+
+<li>SQLITE_SOURCE_ID:
+ "2013-12-06 14:53:30 27392118af4c38c5203a04b8013e1afdb1cebd0d"
+<li>SHA1 for sqlite3.c: 6422c7d69866f5ea3db0968f67ee596e7114544e
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_3.html b/www/releaselog/3_8_3.html
new file mode 100644
index 0000000..8c34fd4
--- /dev/null
+++ b/www/releaselog/3_8_3.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.3 On 2014-02-03</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.3 On 2014-02-03</h2><p><ol class='lessindent'>
+<li>Added support for <a href="../lang_with.html">common table expressions</a> and the <a href="../lang_with.html">WITH clause</a>.
+<li>Added the <a href="../lang_corefunc.html#printf">printf()</a> SQL function.
+<li>Added <a href="../c3ref/c_deterministic.html#sqlitedeterministic">SQLITE_DETERMINISTIC</a> as an optional bit in the 4th argument to the
+ <a href="../c3ref/create_function.html">sqlite3_create_function()</a> and related interfaces, providing applications with
+ the ability to create new functions that can be factored out of inner loops when
+ they have constant arguments.
+<li>Add <a href="../rescode.html#readonly_dbmoved">SQLITE_READONLY_DBMOVED</a> error code, returned at the beginning of a
+ transaction, to indicate that the underlying database file has been renamed
+ or moved out from under SQLite.
+<li>Allow arbitrary expressions, including function calls and subqueries, in
+ the filename argument to <a href="../lang_attach.html">ATTACH</a>.
+<li>Allow a <a href="../lang_select.html#values">VALUES clause</a> to be used anywhere a <a href="../lang_select.html">SELECT</a> statement is valid.
+<li>Reseed the PRNG used by <a href="../c3ref/randomness.html">sqlite3_randomness(N,P)</a> when invoked with N==0.
+ Automatically reseed after a fork() on unix.
+<li>Enhance the <a href="../spellfix1.html">spellfix1</a> virtual table so that it can search efficiently by rowid.
+<li>Performance enhancements.
+<li>Improvements to the comments in the VDBE byte-code display when running <a href="../lang_explain.html">EXPLAIN</a>.
+<li>Add the "%token_class" directive to <a href="../lemon.html">Lemon parser generator</a> and use it to simplify
+ the grammar.
+<li>Change the <a href="../lemon.html">Lemon</a> source code to avoid calling C-library functions that OpenBSD
+ considers dangerous. (Ex: sprintf).
+<li>Bug fix: In the <a href="../cli.html">command-line shell</a> CSV import feature, do not end a field
+ when an escaped double-quote occurs at the end of a CRLN line.
+<li>SQLITE_SOURCE_ID:
+ "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
+<li>SHA1 for sqlite3.c: 98a07da78f71b0275e8d9c510486877adc31dbee
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_3_1.html b/www/releaselog/3_8_3_1.html
new file mode 100644
index 0000000..5566c0c
--- /dev/null
+++ b/www/releaselog/3_8_3_1.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.3.1 On 2014-02-11</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.3.1 On 2014-02-11</h2><p><ol class='lessindent'>
+<li>Fix a bug (ticket <a href="http://www.sqlite.org/src/info/4c86b126f2">4c86b126f2</a>)
+ that causes rows to go missing on some queries with OR clauses and
+ IS NOT NULL operators in the WHERE clause, when the <a href="../compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a>
+ or <a href="../compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> compile-time options are used.
+<li>Fix a harmless compiler warning that was causing problems for VS2013.
+<li>SQLITE_SOURCE_ID: "2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e"
+<li>SHA1 for sqlite3.c: 990004ef2d0eec6a339e4caa562423897fe02bf0
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_4.html b/www/releaselog/3_8_4.html
new file mode 100644
index 0000000..12a9355
--- /dev/null
+++ b/www/releaselog/3_8_4.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.4 On 2014-03-10</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.4 On 2014-03-10</h2><p><ol class='lessindent'>
+<li>Code optimization and refactoring for improved performance.
+<li>Add the ".clone" and ".save" commands to the command-line shell.
+<li>Update the banner on the command-line shell to alert novice users when they
+ are using an ephemeral in-memory database.
+<li>Fix editline support in the command-line shell.
+<li>Add support for coverage testing of VDBE programs using the
+ <a href="../c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_VDBE_COVERAGE</a> verb of <a href="../c3ref/test_control.html">sqlite3_test_control()</a>.
+<li>Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
+<li>Change the datatype of SrcList.nSrc from type u8 to type int to work around
+ an issue in the C compiler on AIX.
+<li>Get extension loading working on Cygwin.
+<li>Bug fix: Fix the <a href="../lang_corefunc.html#char">char()</a> SQL function so that it returns an empty string
+ rather than an "out of memory" error when called with zero arguments.
+<li>Bug fix: DISTINCT now recognizes that a <a href="../lang_corefunc.html#zeroblob">zeroblob</a> and a blob of all
+ 0x00 bytes are the same thing.
+ <a href="http://www.sqlite.org/src/info/fccbde530a">Ticket &#91;fccbde530a&#93;</a>
+<li>Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
+ term in the WHERE clause and also contain an OR term in the WHERE clause and
+ are compiled with <a href="../compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>.
+ <a href="http://www.sqlite.org/src/info/4c86b126f2">Ticket &#91;4c86b126f2&#93;</a>
+<li>Bug fix: Make sure "rowid" columns are correctly resolved in joins between
+ normal tables and WITHOUT ROWID tables.
+ <a href="http://www.sqlite.org/src/info/c34d0557f7">Ticket &#91;c34d0557f7&#93;</a>
+<li>Bug fix: Make sure the same temporary registers are not used in concurrent
+ co-routines used to implement compound SELECT statements containing ORDER
+ BY clauses, as such use can lead to incorrect answers.
+ <a href="http://www.sqlite.org/src/info/8c63ff0eca">Ticket &#91;8c63ff0eca&#93;</a>
+<li>Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
+ <a href="http://www.sqlite.org/src/info/65bdeb9739">Ticket &#91;65bdeb9739&#93;</a>
+<li>Bug fix: Repair a name-resolution error that can occur in sub-select statements
+ contained within a TRIGGER.
+ <a href="http://www.sqlite.org/src/info/4ef7e3cfca">Ticket &#91;4ef7e3cfca&#93;</a>
+<li>Bug fix: Fix column default values expressions of the form
+ "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
+ the column to a floating point value approximately equal to
+ +9223372036854775808.0.
+<li>SQLITE_SOURCE_ID: "2014-03-10 12:20:37 530a1ee7dc2435f80960ce4710a3c2d2bfaaccc5"
+<li>SHA1 for sqlite3.c: b0c22e5f15f5ba2afd017ecd990ea507918afe1c
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_4_1.html b/www/releaselog/3_8_4_1.html
new file mode 100644
index 0000000..0af91d3
--- /dev/null
+++ b/www/releaselog/3_8_4_1.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.4.1 On 2014-03-11</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.4.1 On 2014-03-11</h2><p><b>Changes in version 3.8.4 (2014-03-10):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Code optimization and refactoring for improved performance.
+<li>Add the ".clone" and ".save" commands to the command-line shell.
+<li>Update the banner on the command-line shell to alert novice users when they
+ are using an ephemeral in-memory database.
+<li>Fix editline support in the command-line shell.
+<li>Add support for coverage testing of VDBE programs using the
+ <a href="../c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_VDBE_COVERAGE</a> verb of <a href="../c3ref/test_control.html">sqlite3_test_control()</a>.
+<li>Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
+<li>Change the datatype of SrcList.nSrc from type u8 to type int to work around
+ an issue in the C compiler on AIX.
+<li>Get extension loading working on Cygwin.
+<li>Bug fix: Fix the <a href="../lang_corefunc.html#char">char()</a> SQL function so that it returns an empty string
+ rather than an "out of memory" error when called with zero arguments.
+<li>Bug fix: DISTINCT now recognizes that a <a href="../lang_corefunc.html#zeroblob">zeroblob</a> and a blob of all
+ 0x00 bytes are the same thing.
+ <a href="http://www.sqlite.org/src/info/fccbde530a">Ticket &#91;fccbde530a&#93;</a>
+<li>Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
+ term in the WHERE clause and also contain an OR term in the WHERE clause and
+ are compiled with <a href="../compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>.
+ <a href="http://www.sqlite.org/src/info/4c86b126f2">Ticket &#91;4c86b126f2&#93;</a>
+<li>Bug fix: Make sure "rowid" columns are correctly resolved in joins between
+ normal tables and WITHOUT ROWID tables.
+ <a href="http://www.sqlite.org/src/info/c34d0557f7">Ticket &#91;c34d0557f7&#93;</a>
+<li>Bug fix: Make sure the same temporary registers are not used in concurrent
+ co-routines used to implement compound SELECT statements containing ORDER
+ BY clauses, as such use can lead to incorrect answers.
+ <a href="http://www.sqlite.org/src/info/8c63ff0eca">Ticket &#91;8c63ff0eca&#93;</a>
+<li>Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
+ <a href="http://www.sqlite.org/src/info/65bdeb9739">Ticket &#91;65bdeb9739&#93;</a>
+<li>Bug fix: Repair a name-resolution error that can occur in sub-select statements
+ contained within a TRIGGER.
+ <a href="http://www.sqlite.org/src/info/4ef7e3cfca">Ticket &#91;4ef7e3cfca&#93;</a>
+<li>Bug fix: Fix column default values expressions of the form
+ "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
+ the column to a floating point value approximately equal to
+ +9223372036854775808.0.
+</ol>
+<p><b>Additional changes in version 3.8.4.1 (2014-03-11):</b></p>
+<p><ol class='lessindent'>
+<li value='17'>Work around a C-preprocessor macro conflict that breaks the build for some
+ configurations with Microsoft Visual Studio.
+<li>When computing the cost of the <a href="../optoverview.html#skipscan">skip-scan optimization</a>, take into account the
+ fact that multiple seeks are required.
+<li>SQLITE_SOURCE_ID: "2014-03-11 15:27:36 018d317b1257ce68a92908b05c9c7cf1494050d0"
+<li>SHA1 for sqlite3.c: d5cd1535053a50aa8633725e3595740b33709ac5
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_4_2.html b/www/releaselog/3_8_4_2.html
new file mode 100644
index 0000000..e29667d
--- /dev/null
+++ b/www/releaselog/3_8_4_2.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.4.2 On 2014-03-26</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.4.2 On 2014-03-26</h2><p><b>Changes in version 3.8.4 (2014-03-10):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Code optimization and refactoring for improved performance.
+<li>Add the ".clone" and ".save" commands to the command-line shell.
+<li>Update the banner on the command-line shell to alert novice users when they
+ are using an ephemeral in-memory database.
+<li>Fix editline support in the command-line shell.
+<li>Add support for coverage testing of VDBE programs using the
+ <a href="../c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_VDBE_COVERAGE</a> verb of <a href="../c3ref/test_control.html">sqlite3_test_control()</a>.
+<li>Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
+<li>Change the datatype of SrcList.nSrc from type u8 to type int to work around
+ an issue in the C compiler on AIX.
+<li>Get extension loading working on Cygwin.
+<li>Bug fix: Fix the <a href="../lang_corefunc.html#char">char()</a> SQL function so that it returns an empty string
+ rather than an "out of memory" error when called with zero arguments.
+<li>Bug fix: DISTINCT now recognizes that a <a href="../lang_corefunc.html#zeroblob">zeroblob</a> and a blob of all
+ 0x00 bytes are the same thing.
+ <a href="http://www.sqlite.org/src/info/fccbde530a">Ticket &#91;fccbde530a&#93;</a>
+<li>Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
+ term in the WHERE clause and also contain an OR term in the WHERE clause and
+ are compiled with <a href="../compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>.
+ <a href="http://www.sqlite.org/src/info/4c86b126f2">Ticket &#91;4c86b126f2&#93;</a>
+<li>Bug fix: Make sure "rowid" columns are correctly resolved in joins between
+ normal tables and WITHOUT ROWID tables.
+ <a href="http://www.sqlite.org/src/info/c34d0557f7">Ticket &#91;c34d0557f7&#93;</a>
+<li>Bug fix: Make sure the same temporary registers are not used in concurrent
+ co-routines used to implement compound SELECT statements containing ORDER
+ BY clauses, as such use can lead to incorrect answers.
+ <a href="http://www.sqlite.org/src/info/8c63ff0eca">Ticket &#91;8c63ff0eca&#93;</a>
+<li>Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
+ <a href="http://www.sqlite.org/src/info/65bdeb9739">Ticket &#91;65bdeb9739&#93;</a>
+<li>Bug fix: Repair a name-resolution error that can occur in sub-select statements
+ contained within a TRIGGER.
+ <a href="http://www.sqlite.org/src/info/4ef7e3cfca">Ticket &#91;4ef7e3cfca&#93;</a>
+<li>Bug fix: Fix column default values expressions of the form
+ "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
+ the column to a floating point value approximately equal to
+ +9223372036854775808.0.
+</ol>
+<p><b>Additional changes in version 3.8.4.1 (2014-03-11):</b></p>
+<p><ol class='lessindent'>
+<li value='17'>Work around a C-preprocessor macro conflict that breaks the build for some
+ configurations with Microsoft Visual Studio.
+<li>When computing the cost of the <a href="../optoverview.html#skipscan">skip-scan optimization</a>, take into account the
+ fact that multiple seeks are required.
+</ol>
+<p><b>Additional changes in version 3.8.4.2 (2014-03-26):</b></p>
+<p><ol class='lessindent'>
+<li value='19'>Fix a potential buffer overread that could result when trying to search a
+ corrupt database file.
+<li>SQLITE_SOURCE_ID: "2014-03-26 18:51:19 02ea166372bdb2ef9d8dfbb05e78a97609673a8e"
+<li>SHA1 for sqlite3.c: 4685ca86c2ea0649ed9f59a500013e90b3fe6d03
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_4_3.html b/www/releaselog/3_8_4_3.html
new file mode 100644
index 0000000..90259aa
--- /dev/null
+++ b/www/releaselog/3_8_4_3.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.4.3 On 2014-04-03</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.4.3 On 2014-04-03</h2><p><b>Changes in version 3.8.4 (2014-03-10):</b></p>
+<p><ol class='lessindent'>
+<li value='1'>Code optimization and refactoring for improved performance.
+<li>Add the ".clone" and ".save" commands to the command-line shell.
+<li>Update the banner on the command-line shell to alert novice users when they
+ are using an ephemeral in-memory database.
+<li>Fix editline support in the command-line shell.
+<li>Add support for coverage testing of VDBE programs using the
+ <a href="../c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_VDBE_COVERAGE</a> verb of <a href="../c3ref/test_control.html">sqlite3_test_control()</a>.
+<li>Update the _FILE_OFFSET_BITS macro so that builds work again on QNX.
+<li>Change the datatype of SrcList.nSrc from type u8 to type int to work around
+ an issue in the C compiler on AIX.
+<li>Get extension loading working on Cygwin.
+<li>Bug fix: Fix the <a href="../lang_corefunc.html#char">char()</a> SQL function so that it returns an empty string
+ rather than an "out of memory" error when called with zero arguments.
+<li>Bug fix: DISTINCT now recognizes that a <a href="../lang_corefunc.html#zeroblob">zeroblob</a> and a blob of all
+ 0x00 bytes are the same thing.
+ <a href="http://www.sqlite.org/src/info/fccbde530a">Ticket &#91;fccbde530a&#93;</a>
+<li>Bug fix: Compute the correct answer for queries that contain an IS NOT NULL
+ term in the WHERE clause and also contain an OR term in the WHERE clause and
+ are compiled with <a href="../compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a>.
+ <a href="http://www.sqlite.org/src/info/4c86b126f2">Ticket &#91;4c86b126f2&#93;</a>
+<li>Bug fix: Make sure "rowid" columns are correctly resolved in joins between
+ normal tables and WITHOUT ROWID tables.
+ <a href="http://www.sqlite.org/src/info/c34d0557f7">Ticket &#91;c34d0557f7&#93;</a>
+<li>Bug fix: Make sure the same temporary registers are not used in concurrent
+ co-routines used to implement compound SELECT statements containing ORDER
+ BY clauses, as such use can lead to incorrect answers.
+ <a href="http://www.sqlite.org/src/info/8c63ff0eca">Ticket &#91;8c63ff0eca&#93;</a>
+<li>Bug fix: Ensure that "ORDER BY random()" clauses do not get optimized out.
+ <a href="http://www.sqlite.org/src/info/65bdeb9739">Ticket &#91;65bdeb9739&#93;</a>
+<li>Bug fix: Repair a name-resolution error that can occur in sub-select statements
+ contained within a TRIGGER.
+ <a href="http://www.sqlite.org/src/info/4ef7e3cfca">Ticket &#91;4ef7e3cfca&#93;</a>
+<li>Bug fix: Fix column default values expressions of the form
+ "DEFAULT(-(-9223372036854775808))" so that they work correctly, initializing
+ the column to a floating point value approximately equal to
+ +9223372036854775808.0.
+</ol>
+<p><b>Additional changes in version 3.8.4.1 (2014-03-11):</b></p>
+<p><ol class='lessindent'>
+<li value='17'>Work around a C-preprocessor macro conflict that breaks the build for some
+ configurations with Microsoft Visual Studio.
+<li>When computing the cost of the <a href="../optoverview.html#skipscan">skip-scan optimization</a>, take into account the
+ fact that multiple seeks are required.
+</ol>
+<p><b>Additional changes in version 3.8.4.2 (2014-03-26):</b></p>
+<p><ol class='lessindent'>
+<li value='19'>Fix a potential buffer overread that could result when trying to search a
+ corrupt database file.
+</ol>
+<p><b>Additional changes in version 3.8.4.3 (2014-04-03):</b></p>
+<p><ol class='lessindent'>
+<li value='20'>Add a
+ <a href="http://www.sqlite.org/src/fdiff?sbs=1&v1=7d539cedb1c&v2=ebad891b7494d&smhdr">one-character fix</a>
+ for a problem that might cause incorrect query results on a query that mixes
+ DISTINCT, GROUP BY in a subquery, and ORDER BY.
+ <a href="http://www.sqlite.org/src/info/98825a79ce1456863">Ticket 98825a79ce14</a>.
+<li>SQLITE_SOURCE_ID: "2014-04-03 16:53:12 a611fa96c4a848614efe899130359c9f6fb889c3"
+<li>SHA1 for sqlite3.c: 310a1faeb9332a3cd8d1f53b4a2e055abf537bdc
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_5.html b/www/releaselog/3_8_5.html
new file mode 100644
index 0000000..bc4eee0
--- /dev/null
+++ b/www/releaselog/3_8_5.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.5 On 2014-06-04</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.5 On 2014-06-04</h2><p><ol class='lessindent'>
+<li>Added support for <a href="../queryplanner.html#partialsort">partial sorting by index</a>.
+<li>Enhance the query planner so that it always prefers an index that uses a superset of
+ WHERE clause terms relative to some other index.
+<li>Improvements to the <a href="../fts3.html#*fts4automergecmd">automerge command</a> of <a href="../fts3.html#fts4">FTS4</a> to better control the index size
+ for a full-text index that is subject to a large number of updates.
+<li>Added the <a href="../rtree.html#xquery">sqlite3_rtree_query_callback()</a> interface to <a href="../rtree.html">R-Tree extension</a>
+<li>Added new <a href="../uri.html#coreqp">URI query parameters</a> "nolock" and "immutable".
+<li>Use less memory by not remembering CHECK constraints on read-only
+ database connections.
+<li>Enable the <a href="../queryplanner.html#or_in_where">OR optimization</a> for <a href="../withoutrowid.html">WITHOUT ROWID</a> tables.
+<li>Render expressions of the form "x IN (?)" (with a single value in
+ the list on the right-hand side of the IN operator) as if they where "x==?",
+ Similarly optimize "x NOT IN (?)"
+<li>Add the ".system" and ".once" commands to the <a href="../cli.html">command-line shell</a>.
+<li>Added the <a href="../c3ref/c_iocap_atomic.html">SQLITE_IOCAP_IMMUTABLE</a> bit to the set of bits that can be returned by
+ the xDeviceCharacteristics method of a <a href="../vfs.html">VFS</a>.
+<li>Added the <a href="../c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_BYTEORDER</a> test control.
+<p><b>Bug Fixes:</b>
+<li>OFFSET clause ignored on queries without a FROM clause.
+ Ticket <a href="http://www.sqlite.org/src/info/07d6a0453d">07d6a0453d</a>
+<li>Assertion fault on queries involving expressions of the form
+ "x IN (?)". Ticket <a href="http://www.sqlite.org/src/info/e39d032577">e39d032577</a>.
+<li>Incorrect column datatype reported.
+ Ticket <a href="http://www.sqlite.org/src/info/a8a0d2996a">a8a0d2996a</a>
+<li>Duplicate row returned on a query against a table with more than
+ 16 indices, each on a separate column, and all used via OR-connected constraints.
+ Ticket <a href="http://www.sqlite.org/src/info/10fb063b11">10fb063b11</a>
+<li>Partial index causes assertion fault on UPDATE OR REPLACE.
+ Ticket <a href="http://www.sqlite.org/src/info/2ea3e9fe63">2ea3e9fe63</a>
+<li>Crash when calling undocumented SQL function sqlite_rename_parent()
+ with NULL parameters.
+ Ticket <a href="http://www.sqlite.org/src/info/264b970c4379fd">264b970c43</a>
+<li>ORDER BY ignored if the query has an identical GROUP BY.
+ Ticket <a href="http://www.sqlite.org/src/info/b75a9ca6b0499">b75a9ca6b0</a>
+<li>The group_concat(x,'') SQL function returns NULL instead of an empty string
+ when all inputs are empty strings.
+ Ticket <a href="http://www.sqlite.org/src/info/55746f9e65f85">55746f9e65</a>
+<li>Fix a bug in the VDBE code generator that caused crashes when
+ doing an INSERT INTO ... SELECT statement where the number of columns
+ being inserted is larger than the number of columns in the destination
+ table.
+ Ticket <a href="http://www.sqlite.org/src/info/e9654505cfda9">e9654505cfd</a>
+<li>Fix a problem in CSV import in the <a href="../cli.html">command-line shell</a>
+ where if the leftmost field of the first row
+ in the CSV file was both zero bytes in size and unquoted no data would
+ be imported.
+<li>Fix a problem in FTS4 where the left-most column that contained
+ the <a href="../fts3.html#fts4notindexed">notindexed column</a> name as a prefix
+ was not indexed rather than the column whose name matched exactly.
+<li>Fix the <a href="../c3ref/db_readonly.html">sqlite3_db_readonly()</a> interface so that it returns true if
+ the database is read-only due to the file format write version number
+ being too large.
+
+<li>SQLITE_SOURCE_ID: "2014-06-04 14:06:34 b1ed4f2a34ba66c29b130f8d13e9092758019212"
+<li>SHA1 for sqlite3.c: 7bc194957238c61b1a47f301270286be5bc5208c
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_6.html b/www/releaselog/3_8_6.html
new file mode 100644
index 0000000..56a0f9c
--- /dev/null
+++ b/www/releaselog/3_8_6.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.6 On 2014-08-15</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.6 On 2014-08-15</h2><p><ol class='lessindent'>
+<li>Added support for <a href="../lang_expr.html#hexint">hexadecimal integer literals</a> in the SQL parser.
+ (Ex: 0x123abc)
+<li>Enhanced the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> command to detect <a href="../lang_createtable.html#uniqueconst">UNIQUE</a> and
+ <a href="../lang_createtable.html#notnullconst">NOT NULL</a> constraint violations.
+<li>Increase the maximum value of <a href="../limits.html#max_attached">SQLITE_MAX_ATTACHED</a> from 62 to 125.
+<li>Increase the timeout in <a href="../wal.html">WAL mode</a> before issuing an <a href="../rescode.html#protocol">SQLITE_PROTOCOL</a>
+ error from 1 second to 10 seconds.
+<li>Added the <a href="../lang_corefunc.html#likely">likely(X)</a> SQL function.
+<li>The <a href="../fts3.html#unicode61">unicode61</a> tokenizer is now included in <a href="../fts3.html#fts4">FTS4</a> by default.
+<li>Trigger automatic reprepares on all prepared statements when <a href="../lang_analyze.html">ANALYZE</a> is
+ run.
+<li>Added a new
+ <a href="../loadext.html">loadable extension</a> source code file to the source tree:
+ <a href="http://www.sqlite.org/src/finfo?name=ext/misc/fileio.c">fileio.c</a>
+<li>Add extension functions <a href="../cli.html#fileio">readfile(X) and writefile(X,Y)</a>
+ (using code copy/pasted from fileio.c in the previous bullet) to the
+ <a href="../cli.html">command-line shell</a>.
+<li>Added the <a href="../cli.html#fullschema">.fullschema</a> dot-command to the <a href="../cli.html">command-line shell</a>.
+<p><b>Performance Enhancements:</b>
+<li>Deactivate the <a href="../lang_select.html#distinct">DISTINCT</a> keyword on subqueries on the
+ right-hand side of the <a href="../lang_expr.html#in_op">IN operator</a>.
+<li>Add the capability of evaluating an <a href="../lang_expr.html#in_op">IN operator</a> as a sequence
+ of comparisons as an alternative to using a table lookup. Use the sequence
+ of comparisons implementation in circumstances where it is likely to be
+ faster, such as when the right-hand side of the IN operator
+ is small and/or changes frequently.
+<li>The query planner now uses <a href="../fileformat2.html#stat4tab">sqlite_stat4</a> information (created by <a href="../lang_analyze.html">ANALYZE</a>)
+ to help determine if the <a href="../optoverview.html#skipscan">skip-scan optimization</a> is appropriate.
+<li>Ensure that the query planner never tries to use a self-made transient
+ index in place of a schema-defined index.
+<li>Other minor tweaks to improve the quality of <a href="../opcode.html">VDBE</a> code.
+<p><b>Bug Fixes:</b>
+<li>Fix a bug in <a href="../lang_createindex.html">CREATE UNIQUE INDEX</a>, introduced when <a href="../withoutrowid.html">WITHOUT ROWID</a>
+ support added in version 3.8.2, that allows a non-unique NOT NULL column to be
+ given a UNIQUE index.
+ Ticket <a href="http://www.sqlite.org/src/info/9a6daf340df99ba93c">9a6daf340df99ba93c</a>
+<li>Fix a bug in <a href="../rtree.html">R-Tree extension</a>, introduced in the previous release,
+ that can cause an
+ incorrect results for queries that use the rowid of the R-Tree on the
+ left-hand side of an <a href="../lang_expr.html#in_op">IN operator</a>.
+ Ticket <a href="http://www.sqlite.org/src/info/d2889096e7bdeac6">d2889096e7bdeac6</a>.
+<li>Fix the <a href="../c3ref/stmt_busy.html">sqlite3_stmt_busy()</a> interface so that it gives the correct answer
+ for <a href="../lang_transaction.html">ROLLBACK</a> statements that have been stepped but never reset.
+<li>Fix a bug in that would cause a null pointer to be dereferenced
+ if a column with a DEFAULT that is an aggregate function tried to usee its
+ DEFAULT.
+ Ticket <a href="http://www.sqlite.org/src/info/3a88d85f36704eebe1">3a88d85f36704eebe1</a>
+<li>CSV output from the <a href="../cli.html">command-line shell</a> now always uses CRNL for the
+ row separator and avoids inserting CR in front of NLs contained in
+ data.
+<li>Fix a <a href="../datatype3.html#affinity">column affinity</a> problem with the <a href="../lang_expr.html#in_op">IN operator</a>.
+ Ticket <a href="http://www.sqlite.org/src/info/9a8b09f8e6">9a8b09f8e6</a>.
+<li>Fix the <a href="../lang_analyze.html">ANALYZE</a> command so that it adds correct samples for
+ <a href="../withoutrowid.html">WITHOUT ROWID</a> tables in the <a href="../fileformat2.html#stat4tab">sqlite_stat4</a> table.
+ Ticket <a href="http://www.sqlite.org/src/info/b2fa5424e6fcb15">b2fa5424e6fcb15</a>.
+
+<li>SQLITE_SOURCE_ID: "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
+<li>SHA1 for sqlite3.c: 72c64f05cd9babb9c0f9b3c82536d83be7804b1c
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_7.html b/www/releaselog/3_8_7.html
new file mode 100644
index 0000000..037a328
--- /dev/null
+++ b/www/releaselog/3_8_7.html
@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.7 On 2014-10-17</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.7 On 2014-10-17</h2><p><ol class='lessindent'>
+<p><b>Performance Enhancements:</b>
+<li>Many micro-optimizations result in 20.3% more work for the same number
+ of CPU cycles relative to the previous release.
+ The cumulative performance increase since <a href="../releaselog/3_8_0.html">version 3.8.0</a> is 61%.
+ (Measured using
+ <a href="http://valgrind.org/docs/manual/cg-manual.html">cachegrind</a> on the
+ <a href="http://www.sqlite.org/src/artifact/83f6b3318f7ee">speedtest1.c</a> workload on
+ Ubuntu 13.10 x64 with gcc 4.8.1 and -Os. Your performance may vary.)
+<li>The sorter can use auxiliary helper threads to increase real-time response.
+ This feature is off by default and may be
+ enabled using the <a href="../pragma.html#pragma_threads">PRAGMA threads</a> command or the <a href="../compile.html#default_worker_threads">SQLITE_DEFAULT_WORKER_THREADS</a>
+ compile-time option.
+<li>Enhance the <a href="../optoverview.html#skipscan">skip-scan</a> optimization so that it is able to skip index terms that
+ occur in the middle of the index, not just as the left-hand side of the index.
+<li>Improved optimization of <a href="../lang_expr.html#castexpr">CAST</a> operators.
+<li>Various improvements in how the query planner uses <a href="../fileformat2.html#stat4tab">sqlite_stat4</a>
+ information to estimate plan costs.
+<p><b>New Features:</b>
+<li>Added new interfaces with 64-bit length parameters:
+ <a href="../c3ref/free.html">sqlite3_malloc64()</a>,
+ <a href="../c3ref/free.html">sqlite3_realloc64()</a>,
+ <a href="../c3ref/bind_blob.html">sqlite3_bind_blob64()</a>,
+ <a href="../c3ref/result_blob.html">sqlite3_result_blob64()</a>,
+ <a href="../c3ref/bind_blob.html">sqlite3_bind_text64()</a>, and
+ <a href="../c3ref/result_blob.html">sqlite3_result_text64()</a>.
+<li>Added the new interface <a href="../c3ref/free.html">sqlite3_msize()</a> that returns the size of a memory allocation
+ obtained from <a href="../c3ref/free.html">sqlite3_malloc64()</a> and its variants.
+<li>Added the <a href="../c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a> option to <a href="../c3ref/limit.html">sqlite3_limit()</a> and
+ <a href="../pragma.html#pragma_threads">PRAGMA threads</a> command for configuring the number of available worker threads.
+<li>The <a href="../spellfix1.html">spellfix1</a> extension allows the application to optionally specify the rowid for
+ each INSERT.
+<li>Added the <a href="http://www.sqlite.org/src/doc/trunk/ext/userauth/user-auth.txt">User Authentication</a>
+ extension.
+<p><b>Bug Fixes:</b>
+<li>Fix a bug in the <a href="../partialindex.html">partial index</a> implementation that might result in an incorrect
+ answer if a partial index is used in a subquery or in a <a href="../lang_createview.html">view</a>.
+ Ticket <a href="http://www.sqlite.org/src/info/98d973b8f5">98d973b8f5</a>.
+<li>Fix a query planner bug that might cause a table to be scanned in the wrong direction
+ (thus reversing the order of output) when a DESC index is used to implement the ORDER BY
+ clause on a query that has an identical GROUP BY clause.
+ Ticket <a href="http://www.sqlite.org/src/info/ba7cbfaedc7e6">ba7cbfaedc7e6</a>.
+<li>Fix a bug in <a href="../c3ref/profile.html">sqlite3_trace()</a> that was causing it to sometimes fail to print
+ an SQL statement if that statement needed to be re-prepared.
+ Ticket <a href="http://www.sqlite.org/src/info/11d5aa455e0d98f3c1e6a08">11d5aa455e0d98f3c1e6a08</a>
+<li>Fix a faulty assert() statement.
+ Ticket <a href="http://www.sqlite.org/src/info/369d57fb8e5ccdff06f1">369d57fb8e5ccdff06f1</a>
+<p><b>Test, Debug, and Analysis Changes:</b>
+<li>Show ASCII-art abstract syntax tree diagrams using the ".selecttrace"
+ and ".wheretrace" commands in the
+ <a href="../cli.html">command-line shell</a> when compiled with <a href="../compile.html#debug">SQLITE_DEBUG</a>, SQLITE_ENABLE_SELECTTRACE,
+ and SQLITE_ENABLE_WHERETRACE. Also provide the sqlite3TreeViewExpr() and
+ sqlite3TreeViewSelect() entry points that can be invoked from with the
+ debugger to show the parse tree when stopped at a breakpoint.
+<li>Drop support for SQLITE_ENABLE_TREE_EXPLAIN. The SELECTTRACE mechanism provides
+ more useful diagnostics information.
+<li>New options to the <a href="../cli.html">command-line shell</a> for configuring auxiliary
+ memory usage: --pagecache, --lookaside, and --scratch.
+<li>SQLITE_SOURCE_ID: "2014-10-17 11:24:17 e4ab094f8afce0817f4074e823fabe59fc29ebb4"
+<li>SHA1 for sqlite3.c: 56dcf5e931a9e1fa12fc2d600cd91d3bf9b639cd
+
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_7_1.html b/www/releaselog/3_8_7_1.html
new file mode 100644
index 0000000..fcee250
--- /dev/null
+++ b/www/releaselog/3_8_7_1.html
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.7.1 On 2014-10-29</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.7.1 On 2014-10-29</h2><p><ol class='lessindent'>
+<li>In <a href="../pragma.html#pragma_journal_mode">PRAGMA journal_mode=TRUNCATE</a> mode, call fsync() immediately after truncating
+ the journal file to ensure that the transaction is durable across a power loss.
+<li>Fix an assertion fault that can occur when updating the NULL value of a field
+ at the end of a table that was added using <a href="../lang_altertable.html">ALTER TABLE ADD COLUMN</a>.
+<li>Do not attempt to use the strchrnul() function from the standard C library unless
+ the HAVE_STRCHRNULL compile-time option is set.
+<li>Fix a couple of problems associated with running an UPDATE or DELETE on a
+ <a href="../lang_createview.html">VIEW</a> with a <a href="../lang_createtable.html#rowid">rowid</a> in the WHERE clause.
+
+<li>SQLITE_SOURCE_ID: "2014-10-29 13:59:56 3b7b72c4685aa5cf5e675c2c47ebec10d9704221"
+<li>SHA1 for sqlite3.c: 2d25bd1a73dc40f538f3a81c28e6efa5999bdf0c
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_7_2.html b/www/releaselog/3_8_7_2.html
new file mode 100644
index 0000000..eaa53e4
--- /dev/null
+++ b/www/releaselog/3_8_7_2.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.7.2 On 2014-11-18</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.7.2 On 2014-11-18</h2><p><ol class='lessindent'>
+<li>Enhance the <a href="../lang_transaction.html">ROLLBACK</a> command so that pending queries are allowed to continue as long
+ as the schema is unchanged. Formerly, a ROLLBACK would cause all pending queries to
+ fail with an <a href="../rescode.html#abort">SQLITE_ABORT</a> or <a href="../rescode.html#abort_rollback">SQLITE_ABORT_ROLLBACK</a> error. That error is still returned
+ if the ROLLBACK modifies the schema.
+<li>Bug fix: Make sure that NULL results from OP_Column are fully and completely NULL and
+ do not have the MEM_Ephem bit set.
+ Ticket <a href="http://www.sqlite.org/src/info/094d39a4c95ee4">094d39a4c95ee4</a>.
+<li>Bug fix: The %c format in sqlite3_mprintf() is able to handle precisions greater than 70.
+<li>Bug fix: Do not automatically remove the DISTINCT keyword from a SELECT that forms
+ the right-hand side of an IN operator since it is necessary if the SELECT also
+ contains a LIMIT.
+ Ticket <a href="http://www.sqlite.org/src/info/db87229497">db87229497</a>.
+
+<li>SQLITE_SOURCE_ID: "2014-11-18 20:57:56 2ab564bf9655b7c7b97ab85cafc8a48329b27f93"
+<li>SHA1 for sqlite3.c: b2a68d5783f48dba6a8cb50d8bf69b238c5ec53a
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_7_3.html b/www/releaselog/3_8_7_3.html
new file mode 100644
index 0000000..1df18a1
--- /dev/null
+++ b/www/releaselog/3_8_7_3.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.7.3 On 2014-12-05</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.7.3 On 2014-12-05</h2><p><ol class='lessindent'>
+<li>Bug fix: Ensure the cached KeyInfo objects (an internal abstraction not visible to the
+ application) do not go stale when operating in <a href="../sharedcache.html">shared cache mode</a> and frequently closing
+ and reopening some database connections while leaving other database connections on the
+ same shared cache open continuously. Ticket
+ <a href="https://www.sqlite.org/src/info/e4a18565a36884b00edf">e4a18565a36884b00edf</a>.
+<li>Bug fix: Recognize that any column in the right-hand table of a LEFT JOIN can be
+ NULL even if the column has a NOT NULL constraint. Do not apply optimizations that
+ assume the column is never NULL. Ticket
+ <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
+
+<li>SQLITE_SOURCE_ID: "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
+<li>SHA1 for sqlite3.c: 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_7_4.html b/www/releaselog/3_8_7_4.html
new file mode 100644
index 0000000..c000dbc
--- /dev/null
+++ b/www/releaselog/3_8_7_4.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.7.4 On 2014-12-09</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.7.4 On 2014-12-09</h2><p><ol class='lessindent'>
+<li>Bug fix: Add in a mutex that was omitted from the previous release.
+<li>SQLITE_SOURCE_ID: "2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e"
+<li>SHA1 for sqlite3.c: 0a56693a3c24aa3217098afab1b6fecccdedfd23
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_8.html b/www/releaselog/3_8_8.html
new file mode 100644
index 0000000..4ea139e
--- /dev/null
+++ b/www/releaselog/3_8_8.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.8 On 2015-01-16</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.8 On 2015-01-16</h2><p><ol class='lessindent'>
+<p><b>New Features:</b>
+<li>Added the <a href="../pragma.html#pragma_data_version">PRAGMA data_version</a> command that can be used to determine if
+ a database file has been modified by another process.
+<li>Added the <a href="../c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> option to the
+ <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface, with corresponding enhancements
+ to <a href="../pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a>.
+<li>Added the <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface, available only when
+ compiled with <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
+<li>The <a href="../c3ref/table_column_metadata.html">sqlite3_table_column_metadata()</a> is enhanced to work correctly on
+ <a href="../withoutrowid.html">WITHOUT ROWID</a> tables and to check for the existence of a
+ a table if the column name parameter is NULL. The interface is now
+ also included in the build by default, without requiring
+ the <a href="../compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> compile-time option.
+<li>Added the <a href="../compile.html#enable_api_armor">SQLITE_ENABLE_API_ARMOR</a> compile-time option.
+<li>Added the <a href="../compile.html#reverse_unordered_selects">SQLITE_REVERSE_UNORDERED_SELECTS</a> compile-time option.
+<li>Added the <a href="../compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> compile-time option and <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a>
+ start-time option.
+<li>Added the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> option to <a href="../c3ref/config.html">sqlite3_config()</a>
+ which makes it easier for applications to determine the appropriate
+ amount of memory for use with <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
+<li>The number of rows in a <a href="../lang_select.html#values">VALUES clause</a> is no longer limited by
+ <a href="../c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a>.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/f971962e92ebb8b0">eval.c</a>
+ <a href="../loadext.html">loadable extension</a> that implements an eval() SQL function that will recursively
+ evaluate SQL.
+<p><b>Performance Enhancements:</b>
+<li>Reduce the number of memcpy() operations involved in balancing a b-tree,
+ for 3.2% overall performance boost.
+<li>Improvements to cost estimates for the <a href="../optoverview.html#skipscan">skip-scan optimization</a>.
+<li>The <a href="../optoverview.html#autoindex">automatic indexing</a> optimization is now capable of generating
+ a <a href="../partialindex.html">partial index</a> if that is appropriate.
+<p><b>Bug fixes:</b>
+<li>Ensure durability following a power loss with
+ "PRAGMA journal_mode=TRUNCATE" by calling fsync() right after truncating
+ the journal file.
+<li>The query planner now recognizes that any column in the right-hand
+ table of a LEFT JOIN can be NULL, even if that column has a NOT NULL
+ constraint. Avoid trying to optimize out NULL tests in those cases.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
+<li>Make sure ORDER BY puts rows in ascending order even if the DISTINCT
+ operator is implemented using a descending index. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c5ea805691bfc4204b1cb9e">c5ea805691bfc4204b1cb9e</a>.
+<li>Fix data races that might occur under stress when running with many threads
+ in <a href="../sharedcache.html">shared cache mode</a> where some of the threads are opening and
+ closing connections.
+<li>Fix obscure crash bugs found by
+ <a href="http://lcamtuf.coredump.cx/afl/">american fuzzy lop</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/a59ae93ee990a55">a59ae93ee990a55</a>.
+<li>Work around a GCC optimizer bug (for gcc 4.2.1 on MacOS 10.7) that caused the
+ <a href="../rtree.html">R-Tree extension</a> to compute incorrect results when compiled with -O3.
+<p><b>Other changes:</b>
+<li>Disable the use of the strchrnul() C-library routine unless it is
+ specifically enabled using the -DHAVE_STRCHRNULL compile-time option.
+<li>Improvements to the effectiveness and accuracy of the
+ <a href="../lang_corefunc.html#likelihood">likelihood()</a>, <a href="../lang_corefunc.html#likely">likely()</a>, and <a href="../lang_corefunc.html#unlikely">unlikely()</a> SQL hint functions.
+
+<li>SQLITE_SOURCE_ID: "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
+<li>SHA1 for sqlite3.c: 91aea4cc722371d58aae3d22e94d2a4165276905
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_8_1.html b/www/releaselog/3_8_8_1.html
new file mode 100644
index 0000000..1e10c08
--- /dev/null
+++ b/www/releaselog/3_8_8_1.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.8.1 On 2015-01-20</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.8.1 On 2015-01-20</h2><p><b>Changes in version 3.8.8 (2015-01-16):</b></p>
+<p><ol class='lessindent'>
+<p><b>New Features:</b>
+<li value='1'>Added the <a href="../pragma.html#pragma_data_version">PRAGMA data_version</a> command that can be used to determine if
+ a database file has been modified by another process.
+<li>Added the <a href="../c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> option to the
+ <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface, with corresponding enhancements
+ to <a href="../pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a>.
+<li>Added the <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface, available only when
+ compiled with <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
+<li>The <a href="../c3ref/table_column_metadata.html">sqlite3_table_column_metadata()</a> is enhanced to work correctly on
+ <a href="../withoutrowid.html">WITHOUT ROWID</a> tables and to check for the existence of a
+ a table if the column name parameter is NULL. The interface is now
+ also included in the build by default, without requiring
+ the <a href="../compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> compile-time option.
+<li>Added the <a href="../compile.html#enable_api_armor">SQLITE_ENABLE_API_ARMOR</a> compile-time option.
+<li>Added the <a href="../compile.html#reverse_unordered_selects">SQLITE_REVERSE_UNORDERED_SELECTS</a> compile-time option.
+<li>Added the <a href="../compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> compile-time option and <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a>
+ start-time option.
+<li>Added the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> option to <a href="../c3ref/config.html">sqlite3_config()</a>
+ which makes it easier for applications to determine the appropriate
+ amount of memory for use with <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
+<li>The number of rows in a <a href="../lang_select.html#values">VALUES clause</a> is no longer limited by
+ <a href="../c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a>.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/f971962e92ebb8b0">eval.c</a>
+ <a href="../loadext.html">loadable extension</a> that implements an eval() SQL function that will recursively
+ evaluate SQL.
+<p><b>Performance Enhancements:</b>
+<li>Reduce the number of memcpy() operations involved in balancing a b-tree,
+ for 3.2% overall performance boost.
+<li>Improvements to cost estimates for the <a href="../optoverview.html#skipscan">skip-scan optimization</a>.
+<li>The <a href="../optoverview.html#autoindex">automatic indexing</a> optimization is now capable of generating
+ a <a href="../partialindex.html">partial index</a> if that is appropriate.
+<p><b>Bug fixes:</b>
+<li>Ensure durability following a power loss with
+ "PRAGMA journal_mode=TRUNCATE" by calling fsync() right after truncating
+ the journal file.
+<li>The query planner now recognizes that any column in the right-hand
+ table of a LEFT JOIN can be NULL, even if that column has a NOT NULL
+ constraint. Avoid trying to optimize out NULL tests in those cases.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
+<li>Make sure ORDER BY puts rows in ascending order even if the DISTINCT
+ operator is implemented using a descending index. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c5ea805691bfc4204b1cb9e">c5ea805691bfc4204b1cb9e</a>.
+<li>Fix data races that might occur under stress when running with many threads
+ in <a href="../sharedcache.html">shared cache mode</a> where some of the threads are opening and
+ closing connections.
+<li>Fix obscure crash bugs found by
+ <a href="http://lcamtuf.coredump.cx/afl/">american fuzzy lop</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/a59ae93ee990a55">a59ae93ee990a55</a>.
+<li>Work around a GCC optimizer bug (for gcc 4.2.1 on MacOS 10.7) that caused the
+ <a href="../rtree.html">R-Tree extension</a> to compute incorrect results when compiled with -O3.
+<p><b>Other changes:</b>
+<li>Disable the use of the strchrnul() C-library routine unless it is
+ specifically enabled using the -DHAVE_STRCHRNULL compile-time option.
+<li>Improvements to the effectiveness and accuracy of the
+ <a href="../lang_corefunc.html#likelihood">likelihood()</a>, <a href="../lang_corefunc.html#likely">likely()</a>, and <a href="../lang_corefunc.html#unlikely">unlikely()</a> SQL hint functions.
+
+</ol>
+<p><b>Additional changes in version 3.8.8.1 (2015-01-20):</b></p>
+<p><ol class='lessindent'>
+<li value='22'>Fix a bug in the sorting logic, present since version 3.8.4, that can cause
+ output to appear in the wrong order on queries that contains an ORDER BY clause,
+ a LIMIT clause, and that have approximately 60 or more columns in the result set.
+ Ticket <a href="https://www.sqlite.org/src/tktview?name=f97c4637102a3ae72b79">f97c4637102a3ae72b79</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
+<li>SHA1 for sqlite3.c: 33987fb50dcc09f1429a653d6b47672f5a96f19e
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_8_2.html b/www/releaselog/3_8_8_2.html
new file mode 100644
index 0000000..7d11d26
--- /dev/null
+++ b/www/releaselog/3_8_8_2.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.8.2 On 2015-01-30</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.8.2 On 2015-01-30</h2><p><b>Changes in version 3.8.8 (2015-01-16):</b></p>
+<p><ol class='lessindent'>
+<p><b>New Features:</b>
+<li value='1'>Added the <a href="../pragma.html#pragma_data_version">PRAGMA data_version</a> command that can be used to determine if
+ a database file has been modified by another process.
+<li>Added the <a href="../c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> option to the
+ <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface, with corresponding enhancements
+ to <a href="../pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a>.
+<li>Added the <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface, available only when
+ compiled with <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
+<li>The <a href="../c3ref/table_column_metadata.html">sqlite3_table_column_metadata()</a> is enhanced to work correctly on
+ <a href="../withoutrowid.html">WITHOUT ROWID</a> tables and to check for the existence of a
+ a table if the column name parameter is NULL. The interface is now
+ also included in the build by default, without requiring
+ the <a href="../compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> compile-time option.
+<li>Added the <a href="../compile.html#enable_api_armor">SQLITE_ENABLE_API_ARMOR</a> compile-time option.
+<li>Added the <a href="../compile.html#reverse_unordered_selects">SQLITE_REVERSE_UNORDERED_SELECTS</a> compile-time option.
+<li>Added the <a href="../compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> compile-time option and <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a>
+ start-time option.
+<li>Added the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> option to <a href="../c3ref/config.html">sqlite3_config()</a>
+ which makes it easier for applications to determine the appropriate
+ amount of memory for use with <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
+<li>The number of rows in a <a href="../lang_select.html#values">VALUES clause</a> is no longer limited by
+ <a href="../c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a>.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/f971962e92ebb8b0">eval.c</a>
+ <a href="../loadext.html">loadable extension</a> that implements an eval() SQL function that will recursively
+ evaluate SQL.
+<p><b>Performance Enhancements:</b>
+<li>Reduce the number of memcpy() operations involved in balancing a b-tree,
+ for 3.2% overall performance boost.
+<li>Improvements to cost estimates for the <a href="../optoverview.html#skipscan">skip-scan optimization</a>.
+<li>The <a href="../optoverview.html#autoindex">automatic indexing</a> optimization is now capable of generating
+ a <a href="../partialindex.html">partial index</a> if that is appropriate.
+<p><b>Bug fixes:</b>
+<li>Ensure durability following a power loss with
+ "PRAGMA journal_mode=TRUNCATE" by calling fsync() right after truncating
+ the journal file.
+<li>The query planner now recognizes that any column in the right-hand
+ table of a LEFT JOIN can be NULL, even if that column has a NOT NULL
+ constraint. Avoid trying to optimize out NULL tests in those cases.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
+<li>Make sure ORDER BY puts rows in ascending order even if the DISTINCT
+ operator is implemented using a descending index. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c5ea805691bfc4204b1cb9e">c5ea805691bfc4204b1cb9e</a>.
+<li>Fix data races that might occur under stress when running with many threads
+ in <a href="../sharedcache.html">shared cache mode</a> where some of the threads are opening and
+ closing connections.
+<li>Fix obscure crash bugs found by
+ <a href="http://lcamtuf.coredump.cx/afl/">american fuzzy lop</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/a59ae93ee990a55">a59ae93ee990a55</a>.
+<li>Work around a GCC optimizer bug (for gcc 4.2.1 on MacOS 10.7) that caused the
+ <a href="../rtree.html">R-Tree extension</a> to compute incorrect results when compiled with -O3.
+<p><b>Other changes:</b>
+<li>Disable the use of the strchrnul() C-library routine unless it is
+ specifically enabled using the -DHAVE_STRCHRNULL compile-time option.
+<li>Improvements to the effectiveness and accuracy of the
+ <a href="../lang_corefunc.html#likelihood">likelihood()</a>, <a href="../lang_corefunc.html#likely">likely()</a>, and <a href="../lang_corefunc.html#unlikely">unlikely()</a> SQL hint functions.
+
+</ol>
+<p><b>Additional changes in version 3.8.8.1 (2015-01-20):</b></p>
+<p><ol class='lessindent'>
+<li value='22'>Fix a bug in the sorting logic, present since version 3.8.4, that can cause
+ output to appear in the wrong order on queries that contains an ORDER BY clause,
+ a LIMIT clause, and that have approximately 60 or more columns in the result set.
+ Ticket <a href="https://www.sqlite.org/src/tktview?name=f97c4637102a3ae72b79">f97c4637102a3ae72b79</a>.
+
+</ol>
+<p><b>Additional changes in version 3.8.8.2 (2015-01-30):</b></p>
+<p><ol class='lessindent'>
+<li value='23'>Enhance <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2(TRUNCATE)</a> interface so that it truncates the
+ WAL file even if there is no checkpoint work to be done.
+
+<li>SQLITE_SOURCE_ID: "2015-01-30 14:30:45 7757fc721220e136620a89c9d28247f28bbbc098"
+<li>SHA1 for sqlite3.c: 85ce79948116aa9a087ec345c9d2ce2c1d3cd8af
+
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_8_3.html b/www/releaselog/3_8_8_3.html
new file mode 100644
index 0000000..5ae2566
--- /dev/null
+++ b/www/releaselog/3_8_8_3.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.8.3 On 2015-02-25</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.8.3 On 2015-02-25</h2><p><b>Changes in version 3.8.8 (2015-01-16):</b></p>
+<p><ol class='lessindent'>
+<p><b>New Features:</b>
+<li value='1'>Added the <a href="../pragma.html#pragma_data_version">PRAGMA data_version</a> command that can be used to determine if
+ a database file has been modified by another process.
+<li>Added the <a href="../c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> option to the
+ <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> interface, with corresponding enhancements
+ to <a href="../pragma.html#pragma_wal_checkpoint">PRAGMA wal_checkpoint</a>.
+<li>Added the <a href="../c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface, available only when
+ compiled with <a href="../compile.html#enable_stmt_scanstatus">SQLITE_ENABLE_STMT_SCANSTATUS</a>.
+<li>The <a href="../c3ref/table_column_metadata.html">sqlite3_table_column_metadata()</a> is enhanced to work correctly on
+ <a href="../withoutrowid.html">WITHOUT ROWID</a> tables and to check for the existence of a
+ a table if the column name parameter is NULL. The interface is now
+ also included in the build by default, without requiring
+ the <a href="../compile.html#enable_column_metadata">SQLITE_ENABLE_COLUMN_METADATA</a> compile-time option.
+<li>Added the <a href="../compile.html#enable_api_armor">SQLITE_ENABLE_API_ARMOR</a> compile-time option.
+<li>Added the <a href="../compile.html#reverse_unordered_selects">SQLITE_REVERSE_UNORDERED_SELECTS</a> compile-time option.
+<li>Added the <a href="../compile.html#sorter_pmasz">SQLITE_SORTER_PMASZ</a> compile-time option and <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a>
+ start-time option.
+<li>Added the <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpcachehdrsz">SQLITE_CONFIG_PCACHE_HDRSZ</a> option to <a href="../c3ref/config.html">sqlite3_config()</a>
+ which makes it easier for applications to determine the appropriate
+ amount of memory for use with <a href="../c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a>.
+<li>The number of rows in a <a href="../lang_select.html#values">VALUES clause</a> is no longer limited by
+ <a href="../c3ref/c_limit_attached.html#sqlitelimitcompoundselect">SQLITE_LIMIT_COMPOUND_SELECT</a>.
+<li>Added the <a href="https://www.sqlite.org/src/artifact/f971962e92ebb8b0">eval.c</a>
+ <a href="../loadext.html">loadable extension</a> that implements an eval() SQL function that will recursively
+ evaluate SQL.
+<p><b>Performance Enhancements:</b>
+<li>Reduce the number of memcpy() operations involved in balancing a b-tree,
+ for 3.2% overall performance boost.
+<li>Improvements to cost estimates for the <a href="../optoverview.html#skipscan">skip-scan optimization</a>.
+<li>The <a href="../optoverview.html#autoindex">automatic indexing</a> optimization is now capable of generating
+ a <a href="../partialindex.html">partial index</a> if that is appropriate.
+<p><b>Bug fixes:</b>
+<li>Ensure durability following a power loss with
+ "PRAGMA journal_mode=TRUNCATE" by calling fsync() right after truncating
+ the journal file.
+<li>The query planner now recognizes that any column in the right-hand
+ table of a LEFT JOIN can be NULL, even if that column has a NOT NULL
+ constraint. Avoid trying to optimize out NULL tests in those cases.
+ Fix for ticket
+ <a href="https://www.sqlite.org/src/info/6f2222d550f5b0ee7ed">6f2222d550f5b0ee7ed</a>.
+<li>Make sure ORDER BY puts rows in ascending order even if the DISTINCT
+ operator is implemented using a descending index. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c5ea805691bfc4204b1cb9e">c5ea805691bfc4204b1cb9e</a>.
+<li>Fix data races that might occur under stress when running with many threads
+ in <a href="../sharedcache.html">shared cache mode</a> where some of the threads are opening and
+ closing connections.
+<li>Fix obscure crash bugs found by
+ <a href="http://lcamtuf.coredump.cx/afl/">american fuzzy lop</a>. Ticket
+ <a href="https://www.sqlite.org/src/info/a59ae93ee990a55">a59ae93ee990a55</a>.
+<li>Work around a GCC optimizer bug (for gcc 4.2.1 on MacOS 10.7) that caused the
+ <a href="../rtree.html">R-Tree extension</a> to compute incorrect results when compiled with -O3.
+<p><b>Other changes:</b>
+<li>Disable the use of the strchrnul() C-library routine unless it is
+ specifically enabled using the -DHAVE_STRCHRNULL compile-time option.
+<li>Improvements to the effectiveness and accuracy of the
+ <a href="../lang_corefunc.html#likelihood">likelihood()</a>, <a href="../lang_corefunc.html#likely">likely()</a>, and <a href="../lang_corefunc.html#unlikely">unlikely()</a> SQL hint functions.
+
+</ol>
+<p><b>Additional changes in version 3.8.8.1 (2015-01-20):</b></p>
+<p><ol class='lessindent'>
+<li value='22'>Fix a bug in the sorting logic, present since version 3.8.4, that can cause
+ output to appear in the wrong order on queries that contains an ORDER BY clause,
+ a LIMIT clause, and that have approximately 60 or more columns in the result set.
+ Ticket <a href="https://www.sqlite.org/src/tktview?name=f97c4637102a3ae72b79">f97c4637102a3ae72b79</a>.
+
+</ol>
+<p><b>Additional changes in version 3.8.8.2 (2015-01-30):</b></p>
+<p><ol class='lessindent'>
+<li value='23'>Enhance <a href="../c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2(TRUNCATE)</a> interface so that it truncates the
+ WAL file even if there is no checkpoint work to be done.
+
+</ol>
+<p><b>Additional changes in version 3.8.8.3 (2015-02-25):</b></p>
+<p><ol class='lessindent'>
+<li value='24'>Fix a bug (ticket
+ <a href="https://www.sqlite.org/src/info/2326c258d02ead33">2326c258d02ead33</a>) that can lead
+ to incorrect results if the qualifying constraint of a <a href="../partialindex.html">partial index</a> appears in the
+ ON clause of a LEFT JOIN.
+<li>Added the ability to link against the
+ "<a href="https://github.com/antirez/linenoise">linenoise</a>"
+ command-line editing library in unix builds of the <a href="../cli.html">command-line shell</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-02-25 13:29:11 9d6c1880fb75660bbabd693175579529785f8a6b"
+<li>SHA1 for sqlite3.c: 74ee38c8c6fd175ec85a47276dfcefe8a262827a
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_8_9.html b/www/releaselog/3_8_9.html
new file mode 100644
index 0000000..e5ec533
--- /dev/null
+++ b/www/releaselog/3_8_9.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.8.9 On 2015-04-08</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.8.9 On 2015-04-08</h2><p><ol class='lessindent'>
+<li>Add VxWorks-7 as an officially supported and tested platform.
+<li>Added the <a href="../c3ref/status.html">sqlite3_status64()</a> interface.
+<li>Fix memory size tracking so that it works even if SQLite uses more
+ than 2GiB of memory.
+<li>Added the <a href="../pragma.html#pragma_index_xinfo">PRAGMA index_xinfo</a> command.
+<li>Fix a potential 32-bit integer overflow problem in the
+ <a href="../c3ref/blob_read.html">sqlite3_blob_read()</a> and <a href="../c3ref/blob_write.html">sqlite3_blob_write()</a> interfaces.
+<li>Ensure that prepared statements automatically reset on extended
+ error codes of SQLITE_BUSY and SQLITE_LOCKED even when compiled
+ using <a href="../compile.html#omit_autoreset">SQLITE_OMIT_AUTORESET</a>.
+<li>Correct miscounts in the sqlite3_analyzer.exe utility related
+ to WITHOUT ROWID tables.
+<li>Added the ".dbinfo" command to the <a href="../cli.html">command-line shell</a>.
+<li>Improve the performance of fts3/4 queries that use the OR operator
+ and at least one auxiliary fts function.
+<li>Fix a bug in the fts3 snippet() function causing it to omit
+ leading separator characters from snippets that begin with the
+ first token in a column.
+<li>SQLITE_SOURCE_ID: "2015-04-08 12:16:33 8a8ffc862e96f57aa698f93de10dee28e69f6e09"
+<li>SHA1 for sqlite3.c: 49f1c3ae347e1327b5aaa6c7f76126bdf09c6f42
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_9_0.html b/www/releaselog/3_9_0.html
new file mode 100644
index 0000000..eb69631
--- /dev/null
+++ b/www/releaselog/3_9_0.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.9.0 On 2015-10-14</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.9.0 On 2015-10-14</h2><p><ol class='lessindent'>
+<p><b>Policy Changes:</b>
+<li>The <a href="../versionnumbers.html">version numbering conventions</a> for SQLite are revised to use the
+ emerging standard of <a href="http://semver.org/">semantic versioning</a>.
+<p><b>New Features And Enhancements:</b>
+<li>Added <a href="../json1.html">the json1 extension</a> module in the source tree, and in the <a href="../amalgamation.html">amalgamation</a>.
+ Enable support using the <a href="../compile.html#enable_json1">SQLITE_ENABLE_JSON1</a> compile-time option.
+<li>Added <a href="../fts5.html">Full Text Search version 5 (FTS5)</a> to the <a href="../amalgamation.html">amalgamation</a>, enabled
+ using <a href="../compile.html#enable_fts5">SQLITE_ENABLE_FTS5</a>. FTS5 will be considered "experimental" (subject
+ to incompatible changes) for at least one more release cycle.
+<li>The <a href="../lang_createview.html">CREATE VIEW</a> statement now accepts an optional list of
+ column names following the view name.
+<li>Added support for <a href="../expridx.html">indexes on expressions</a>.
+<li>Added support for <a href="../vtab.html#tabfunc2">table-valued functions</a> in the FROM clause of a
+ <a href="../lang_select.html">SELECT</a> statement.
+<li>Added support for <a href="../vtab.html#epovtab">eponymous virtual tables</a>.
+<li>A <a href="../lang_createview.html">VIEW</a> may now reference undefined tables and functions when
+ initially created. Missing tables and functions are reported when
+ the VIEW is used in a query.
+<li>Added the <a href="../c3ref/value_subtype.html">sqlite3_value_subtype()</a> and <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>
+ interfaced (used by <a href="../json1.html">the json1 extension</a>).
+<li>The query planner is now able to use <a href="../partialindex.html">partial indexes</a> that contain
+ AND-connected terms in the WHERE clause.
+<li>The sqlite3_analyzer.exe utility is updated to report the depth of
+ each btree and to show the average fanout for indexes and
+ WITHOUT ROWID tables.
+<li>Enhanced the <a href="../dbstat.html">dbstat virtual table</a> so that it can be used as a
+ <a href="../vtab.html#tabfunc2">table-valued function</a> where the argument is the schema to be
+ analyzed.
+<p><b>Other changes:</b>
+<li>The <a href="../c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> interface, which has been deprecated and
+ undocumented for 8 years, is changed into a no-op.
+<p><b>Important fixes:</b>
+<li>Fixed a critical bug in the
+ <a href="https://www.sqlite.org/see/doc/trunk/www/readme.wiki">SQLite Encryption Extension</a> that
+ could cause the database to become unreadable and unrecoverable if a <a href="../lang_vacuum.html">VACUUM</a> command
+ changed the size of the encryption nonce.
+<li>Added a memory barrier in the implementation of
+ <a href="../c3ref/initialize.html">sqlite3_initialize()</a> to help ensure that it is thread-safe.
+<li>Fix the <a href="../optoverview.html#or_opt">OR optimization</a> so that it always ignores subplans that
+ do not use an index.
+<li>Do not apply the WHERE-clause pushdown optimization on terms that originate
+ in the ON or USING clause of a LEFT JOIN. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c2a19d81652f40568c">c2a19d81652f40568c</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-10-14 12:29:53 a721fc0d89495518fe5612e2e3bbc60befd2e90d"
+<li>SHA1 for sqlite3.c: c03e47e152ddb9c342b84ffb39448bf4a2bd4288
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_9_1.html b/www/releaselog/3_9_1.html
new file mode 100644
index 0000000..fc87167
--- /dev/null
+++ b/www/releaselog/3_9_1.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.9.1 On 2015-10-16</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.9.1 On 2015-10-16</h2><p><b>Changes in version 3.9.0 (2015-10-14):</b></p>
+<p><ol class='lessindent'>
+<p><b>Policy Changes:</b>
+<li value='1'>The <a href="../versionnumbers.html">version numbering conventions</a> for SQLite are revised to use the
+ emerging standard of <a href="http://semver.org/">semantic versioning</a>.
+<p><b>New Features And Enhancements:</b>
+<li>Added <a href="../json1.html">the json1 extension</a> module in the source tree, and in the <a href="../amalgamation.html">amalgamation</a>.
+ Enable support using the <a href="../compile.html#enable_json1">SQLITE_ENABLE_JSON1</a> compile-time option.
+<li>Added <a href="../fts5.html">Full Text Search version 5 (FTS5)</a> to the <a href="../amalgamation.html">amalgamation</a>, enabled
+ using <a href="../compile.html#enable_fts5">SQLITE_ENABLE_FTS5</a>. FTS5 will be considered "experimental" (subject
+ to incompatible changes) for at least one more release cycle.
+<li>The <a href="../lang_createview.html">CREATE VIEW</a> statement now accepts an optional list of
+ column names following the view name.
+<li>Added support for <a href="../expridx.html">indexes on expressions</a>.
+<li>Added support for <a href="../vtab.html#tabfunc2">table-valued functions</a> in the FROM clause of a
+ <a href="../lang_select.html">SELECT</a> statement.
+<li>Added support for <a href="../vtab.html#epovtab">eponymous virtual tables</a>.
+<li>A <a href="../lang_createview.html">VIEW</a> may now reference undefined tables and functions when
+ initially created. Missing tables and functions are reported when
+ the VIEW is used in a query.
+<li>Added the <a href="../c3ref/value_subtype.html">sqlite3_value_subtype()</a> and <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>
+ interfaced (used by <a href="../json1.html">the json1 extension</a>).
+<li>The query planner is now able to use <a href="../partialindex.html">partial indexes</a> that contain
+ AND-connected terms in the WHERE clause.
+<li>The sqlite3_analyzer.exe utility is updated to report the depth of
+ each btree and to show the average fanout for indexes and
+ WITHOUT ROWID tables.
+<li>Enhanced the <a href="../dbstat.html">dbstat virtual table</a> so that it can be used as a
+ <a href="../vtab.html#tabfunc2">table-valued function</a> where the argument is the schema to be
+ analyzed.
+<p><b>Other changes:</b>
+<li>The <a href="../c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> interface, which has been deprecated and
+ undocumented for 8 years, is changed into a no-op.
+<p><b>Important fixes:</b>
+<li>Fixed a critical bug in the
+ <a href="https://www.sqlite.org/see/doc/trunk/www/readme.wiki">SQLite Encryption Extension</a> that
+ could cause the database to become unreadable and unrecoverable if a <a href="../lang_vacuum.html">VACUUM</a> command
+ changed the size of the encryption nonce.
+<li>Added a memory barrier in the implementation of
+ <a href="../c3ref/initialize.html">sqlite3_initialize()</a> to help ensure that it is thread-safe.
+<li>Fix the <a href="../optoverview.html#or_opt">OR optimization</a> so that it always ignores subplans that
+ do not use an index.
+<li>Do not apply the WHERE-clause pushdown optimization on terms that originate
+ in the ON or USING clause of a LEFT JOIN. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c2a19d81652f40568c">c2a19d81652f40568c</a>.
+
+</ol>
+<p><b>Additional changes in version 3.9.1 (2015-10-16):</b></p>
+<p><ol class='lessindent'>
+<li value='18'>Fix <a href="../json1.html">the json1 extension</a> so that it does <u>not</u> recognize ASCII form-feed as a
+ whitespace character, in order to comply with RFC-7159. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/57eec374ae1d0a1d">57eec374ae1d0a1d</a>
+<li>Add a few #ifdef and build script changes to address compilation issues that
+ appeared after the 3.9.0 release.
+
+<li>SQLITE_SOURCE_ID: ""2015-10-16 17:31:12 767c1727fec4ce11b83f25b3f1bfcfe68a2c8b02"
+<li>SHA1 for sqlite3.c: 5e6d1873a32d82c2cf8581f143649940cac8ae49
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_9_2.html b/www/releaselog/3_9_2.html
new file mode 100644
index 0000000..3ce4234
--- /dev/null
+++ b/www/releaselog/3_9_2.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.9.2 On 2015-11-02</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.9.2 On 2015-11-02</h2><p><b>Changes in version 3.9.0 (2015-10-14):</b></p>
+<p><ol class='lessindent'>
+<p><b>Policy Changes:</b>
+<li value='1'>The <a href="../versionnumbers.html">version numbering conventions</a> for SQLite are revised to use the
+ emerging standard of <a href="http://semver.org/">semantic versioning</a>.
+<p><b>New Features And Enhancements:</b>
+<li>Added <a href="../json1.html">the json1 extension</a> module in the source tree, and in the <a href="../amalgamation.html">amalgamation</a>.
+ Enable support using the <a href="../compile.html#enable_json1">SQLITE_ENABLE_JSON1</a> compile-time option.
+<li>Added <a href="../fts5.html">Full Text Search version 5 (FTS5)</a> to the <a href="../amalgamation.html">amalgamation</a>, enabled
+ using <a href="../compile.html#enable_fts5">SQLITE_ENABLE_FTS5</a>. FTS5 will be considered "experimental" (subject
+ to incompatible changes) for at least one more release cycle.
+<li>The <a href="../lang_createview.html">CREATE VIEW</a> statement now accepts an optional list of
+ column names following the view name.
+<li>Added support for <a href="../expridx.html">indexes on expressions</a>.
+<li>Added support for <a href="../vtab.html#tabfunc2">table-valued functions</a> in the FROM clause of a
+ <a href="../lang_select.html">SELECT</a> statement.
+<li>Added support for <a href="../vtab.html#epovtab">eponymous virtual tables</a>.
+<li>A <a href="../lang_createview.html">VIEW</a> may now reference undefined tables and functions when
+ initially created. Missing tables and functions are reported when
+ the VIEW is used in a query.
+<li>Added the <a href="../c3ref/value_subtype.html">sqlite3_value_subtype()</a> and <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>
+ interfaced (used by <a href="../json1.html">the json1 extension</a>).
+<li>The query planner is now able to use <a href="../partialindex.html">partial indexes</a> that contain
+ AND-connected terms in the WHERE clause.
+<li>The sqlite3_analyzer.exe utility is updated to report the depth of
+ each btree and to show the average fanout for indexes and
+ WITHOUT ROWID tables.
+<li>Enhanced the <a href="../dbstat.html">dbstat virtual table</a> so that it can be used as a
+ <a href="../vtab.html#tabfunc2">table-valued function</a> where the argument is the schema to be
+ analyzed.
+<p><b>Other changes:</b>
+<li>The <a href="../c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> interface, which has been deprecated and
+ undocumented for 8 years, is changed into a no-op.
+<p><b>Important fixes:</b>
+<li>Fixed a critical bug in the
+ <a href="https://www.sqlite.org/see/doc/trunk/www/readme.wiki">SQLite Encryption Extension</a> that
+ could cause the database to become unreadable and unrecoverable if a <a href="../lang_vacuum.html">VACUUM</a> command
+ changed the size of the encryption nonce.
+<li>Added a memory barrier in the implementation of
+ <a href="../c3ref/initialize.html">sqlite3_initialize()</a> to help ensure that it is thread-safe.
+<li>Fix the <a href="../optoverview.html#or_opt">OR optimization</a> so that it always ignores subplans that
+ do not use an index.
+<li>Do not apply the WHERE-clause pushdown optimization on terms that originate
+ in the ON or USING clause of a LEFT JOIN. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c2a19d81652f40568c">c2a19d81652f40568c</a>.
+
+</ol>
+<p><b>Additional changes in version 3.9.1 (2015-10-16):</b></p>
+<p><ol class='lessindent'>
+<li value='18'>Fix <a href="../json1.html">the json1 extension</a> so that it does <u>not</u> recognize ASCII form-feed as a
+ whitespace character, in order to comply with RFC-7159. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/57eec374ae1d0a1d">57eec374ae1d0a1d</a>
+<li>Add a few #ifdef and build script changes to address compilation issues that
+ appeared after the 3.9.0 release.
+
+</ol>
+<p><b>Additional changes in version 3.9.2 (2015-11-02):</b></p>
+<p><ol class='lessindent'>
+<li value='20'>Fix the schema parser so that it interprets certain
+ (obscure and ill-formed)
+ CREATE TABLE statements the same as legacy. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/ac661962a2aeab3c331">ac661962a2aeab3c331</a>
+<li>Fix a query planner problem that could result in an incorrect
+ answer due to the use of <a href="../optoverview.html#autoindex">automatic indexing</a> in subqueries in
+ the FROM clause of a correlated scalar subqueries. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/8a2adec1">8a2adec1</a>.
+
+<li>SQLITE_SOURCE_ID: "2015-11-02 18:31:45 bda77dda9697c463c3d0704014d51627fceee328"
+<li>SHA1 for sqlite3.c: 1c4013876f50bbaa3e6f0f98e0147c76287684c1
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/3_9_3.html b/www/releaselog/3_9_3.html
new file mode 100644
index 0000000..a996250
--- /dev/null
+++ b/www/releaselog/3_9_3.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.9.3 On 2016-04-01</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.9.3 On 2016-04-01</h2><p><b>Changes in version 3.9.0 (2015-10-14):</b></p>
+<p><ol class='lessindent'>
+<p><b>Policy Changes:</b>
+<li value='1'>The <a href="../versionnumbers.html">version numbering conventions</a> for SQLite are revised to use the
+ emerging standard of <a href="http://semver.org/">semantic versioning</a>.
+<p><b>New Features And Enhancements:</b>
+<li>Added <a href="../json1.html">the json1 extension</a> module in the source tree, and in the <a href="../amalgamation.html">amalgamation</a>.
+ Enable support using the <a href="../compile.html#enable_json1">SQLITE_ENABLE_JSON1</a> compile-time option.
+<li>Added <a href="../fts5.html">Full Text Search version 5 (FTS5)</a> to the <a href="../amalgamation.html">amalgamation</a>, enabled
+ using <a href="../compile.html#enable_fts5">SQLITE_ENABLE_FTS5</a>. FTS5 will be considered "experimental" (subject
+ to incompatible changes) for at least one more release cycle.
+<li>The <a href="../lang_createview.html">CREATE VIEW</a> statement now accepts an optional list of
+ column names following the view name.
+<li>Added support for <a href="../expridx.html">indexes on expressions</a>.
+<li>Added support for <a href="../vtab.html#tabfunc2">table-valued functions</a> in the FROM clause of a
+ <a href="../lang_select.html">SELECT</a> statement.
+<li>Added support for <a href="../vtab.html#epovtab">eponymous virtual tables</a>.
+<li>A <a href="../lang_createview.html">VIEW</a> may now reference undefined tables and functions when
+ initially created. Missing tables and functions are reported when
+ the VIEW is used in a query.
+<li>Added the <a href="../c3ref/value_subtype.html">sqlite3_value_subtype()</a> and <a href="../c3ref/result_subtype.html">sqlite3_result_subtype()</a>
+ interfaced (used by <a href="../json1.html">the json1 extension</a>).
+<li>The query planner is now able to use <a href="../partialindex.html">partial indexes</a> that contain
+ AND-connected terms in the WHERE clause.
+<li>The sqlite3_analyzer.exe utility is updated to report the depth of
+ each btree and to show the average fanout for indexes and
+ WITHOUT ROWID tables.
+<li>Enhanced the <a href="../dbstat.html">dbstat virtual table</a> so that it can be used as a
+ <a href="../vtab.html#tabfunc2">table-valued function</a> where the argument is the schema to be
+ analyzed.
+<p><b>Other changes:</b>
+<li>The <a href="../c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> interface, which has been deprecated and
+ undocumented for 8 years, is changed into a no-op.
+<p><b>Important fixes:</b>
+<li>Fixed a critical bug in the
+ <a href="https://www.sqlite.org/see/doc/trunk/www/readme.wiki">SQLite Encryption Extension</a> that
+ could cause the database to become unreadable and unrecoverable if a <a href="../lang_vacuum.html">VACUUM</a> command
+ changed the size of the encryption nonce.
+<li>Added a memory barrier in the implementation of
+ <a href="../c3ref/initialize.html">sqlite3_initialize()</a> to help ensure that it is thread-safe.
+<li>Fix the <a href="../optoverview.html#or_opt">OR optimization</a> so that it always ignores subplans that
+ do not use an index.
+<li>Do not apply the WHERE-clause pushdown optimization on terms that originate
+ in the ON or USING clause of a LEFT JOIN. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/c2a19d81652f40568c">c2a19d81652f40568c</a>.
+
+</ol>
+<p><b>Additional changes in version 3.9.1 (2015-10-16):</b></p>
+<p><ol class='lessindent'>
+<li value='18'>Fix <a href="../json1.html">the json1 extension</a> so that it does <u>not</u> recognize ASCII form-feed as a
+ whitespace character, in order to comply with RFC-7159. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/57eec374ae1d0a1d">57eec374ae1d0a1d</a>
+<li>Add a few #ifdef and build script changes to address compilation issues that
+ appeared after the 3.9.0 release.
+
+</ol>
+<p><b>Additional changes in version 3.9.2 (2015-11-02):</b></p>
+<p><ol class='lessindent'>
+<li value='20'>Fix the schema parser so that it interprets certain
+ (obscure and ill-formed)
+ CREATE TABLE statements the same as legacy. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/ac661962a2aeab3c331">ac661962a2aeab3c331</a>
+<li>Fix a query planner problem that could result in an incorrect
+ answer due to the use of <a href="../optoverview.html#autoindex">automatic indexing</a> in subqueries in
+ the FROM clause of a correlated scalar subqueries. Fix for ticket
+ <a href="https://www.sqlite.org/src/info/8a2adec1">8a2adec1</a>.
+
+</ol>
+<p><b>Additional changes in version 3.9.3 (2016-04-01):</b></p>
+<p><ol class='lessindent'>
+<li value='22'>Backport a
+ <a href="https://www.sqlite.org/src/info/c648539b52ca28c0">simple query planner optimization</a>
+ that allows the IS operator
+ to drive an index on a LEFT OUTER JOIN. No other changes from the
+ <a href="../releaselog/3_9_2.html">version 3.9.2</a> baseline.
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/releaselog/current.html b/www/releaselog/current.html
new file mode 100644
index 0000000..c8e1d89
--- /dev/null
+++ b/www/releaselog/current.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Release 3.40.1 On 2022-12-28</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h2>SQLite Release 3.40.1 On 2022-12-28</h2><p><b>Changes in version 3.40.0 (2022-11-16):</b></p>
+<p><ol class='lessindent'>
+<li value='1'> Add support for compiling <a href="https://sqlite.org/wasm">SQLite to WASM</a>
+ and running it in web browsers. NB: The WASM build and its interfaces
+ are considered "beta" and are subject to minor changes if the need
+ arises. We anticipate finalizing the interface for the next release.
+<li> Add the <a href="../recovery.html">recovery extension</a> that might be able to recover some content
+ from a corrupt database file.
+<li> Query planner enhancements:
+ <ol type="a">
+ <li> Recognize <a href="../queryplanner.html#covidx">covering indexes</a> on tables with more than 63 columns where
+ columns beyond the 63rd column are used in the query and/or are
+ referenced by the index.
+ <li> Extract the values of expressions contained within <a href="../expridx.html">expression indexes</a>
+ where practical, rather than recomputing the expression.
+ <li> The NOT NULL and IS NULL operators (and their equivalents) avoid
+ loading the content of large strings and BLOB values from disk.
+ <li> Avoid materializing a view on which a full scan is performed
+ exactly once. Use and discard the rows of the view as they are computed.
+ <li> Allow flattening of a subquery that is the right-hand operand of
+ a LEFT JOIN in an aggregate query.
+ </ol>
+<li> A new typedef named <a href="../c3ref/filename.html">sqlite3_filename</a> is added and used to represent
+ the name of a database file. Various interfaces are
+ modified to use the new typedef instead of "char*". This interface
+ change should be fully backwards compatible, though it might cause
+ (harmless) compiler warnings when rebuilding some legacy applications.
+<li> Add the <a href="../c3ref/value_blob.html">sqlite3_value_encoding()</a> interface.
+<li> Security enhancement: <a href="../c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> is augmented to prohibit
+ changing the <a href="../pragma.html#pragma_schema_version">schema_version</a>. The schema_version
+ becomes read-only in defensive mode.
+<li> Enhancements to the <a href="../pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> statement:
+ <ol type="a">
+ <li> Columns in non-STRICT tables with TEXT affinity should not contain numeric values.
+ <li> Columns in non-STRICT tables with NUMERIC affinity should not
+ contain TEXT values that could be converted into numbers.
+ <li> Verify that the rows of a <a href="../withoutrowid.html">WITHOUT ROWID</a> table are in the correct order.
+ </ol>
+<li> Enhance the <a href="../lang_vacuum.html#vacuuminto">VACUUM INTO</a> statement so that it honors the
+ <a href="../pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting.
+<li> Enhance the <a href="../c3ref/strglob.html">sqlite3_strglob()</a> and <a href="../c3ref/strlike.html">sqlite3_strlike()</a> APIs so that they are able
+ to accept NULL pointers for their string parameters and still generate a sensible
+ result.
+<li> Provide the new <a href="../compile.html#max_allocation_size">SQLITE_MAX_ALLOCATION_SIZE</a> compile-time option for limiting
+ the size of memory allocations.
+<li> Change the algorithm used by SQLite's built-in pseudo-random number generator (PRNG)
+ from RC4 to Chacha20.
+<li> Allow two or more indexes to have the same name as long as they are all in
+ separate schemas.
+<li> Miscellaneous performance optimizations result in about 1% fewer CPU cycles
+ used on typical workloads.
+</ol>
+<p><b>Additional changes in version 3.40.1 (2022-12-28):</b></p>
+<p><ol class='lessindent'>
+<li value='14'> Fix the <a href="../cli.html#safemode">--safe command-line option</a> to the <a href="../cli.html">CLI</a> such that it correctly disallows the
+ use of SQL functions like writefile() that can cause harmful side-effects.
+<li> Fix a potential infinite loop in the <a href="../malloc.html#memsys5">memsys5</a> alternative memory allocator. This
+ bug was introduced by a performance optimization in version 3.39.0.
+<li> Various other obscure fixes.
+<p><b>Hashes:</b>
+<li>SQLITE_SOURCE_ID: 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24
+<li>SHA3-256 for sqlite3.c: 4d6800e9032ff349376fe612e422b49ba5eb4e378fac0b3e405235d09dd366ab
+
+</ol></p>
+
+ <p>A <a href="../changes.html">complete list of SQLite releases</a>
+ in a single page and a <a href="../chronology.html">chronology</a> are both also available.
+ A detailed history of every
+ check-in is available at
+ <a href="http://www.sqlite.org/src/timeline">
+ SQLite version control site</a>.</p>
+
+
diff --git a/www/requirements.html b/www/requirements.html
new file mode 100644
index 0000000..913280e
--- /dev/null
+++ b/www/requirements.html
@@ -0,0 +1,14148 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Requirements</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h2>1.0 About SQLite Requirements</h2>
+
+
+<ul>
+<li><p>
+Requirements consist of excerpts from the documentation.
+A requirement is usually a one-sentence excerpt but might be a sentence
+fragment, multiple sentences, a table, or a GIF image of a bubble syntax
+diagram.
+
+<li><p>
+Requirements are written in conversational English and without the
+modal auxiliary verb "shall". This grows out of the fact that requirements
+are taken from the documentation. The intended audience for the
+documentation is application programmers. "Shall" language is appropriate
+when the audience consist of contract specialists, QA auditors, and lawyers,
+but it interferes with comprehension when the audience is application
+programmers. Hence, in order to best serve the intended audience, the
+"shall" language is omitted.
+
+<li><p>
+Requirements are sufficiently detailed and precise to permit a 100% compatible
+clean-room reimplementation of SQLite.
+
+<li><p>
+The word "requirement" in common English usage implies an ordering: that
+the requirement comes before the implementation.
+But there is no such ordering with SQLite requirements.
+What are called "requirements" in SQLite are better described as
+"testable statements of truth about the behavior of the system".
+
+<li><p>
+Every testable statement of truth about SQLite in the
+documentation becomes a requirement.
+
+<li><p>
+Requirement numbers are the MD5 hash of the requirement itself.
+<ol type="a">
+<li><p>Requirements are inherently immutable, since any change
+to the requirement results in a completely different requirement number.
+
+<li><p>For text requirements, the text is normalized prior to computing the
+MD5 hash:
+<ul>
+<li>Remove all leading and trailing whitespace.
+<li>Convert all internal whitespace sequences to a single space character.
+<li>Convert "&amp;lt;" to "&lt;", "&amp;gt;" to "&gt;",
+ "&amp;#91;" to "&#91;", "&amp;#93;" to "&#93;", and
+ "&amp;amp;" to "&amp;".
+</ul>
+<li><p>For GIF syntax diagram requirements, the MD5 hash is computed over
+the entire content of the GIF image file.
+
+<li><p>The MD5 hash is expressed in human-readable form as follows:
+<blockquote><b>R-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i><b>-</b><i>N</i></blockquote>
+Where each <i>N</i> is a 5-digit number between 00000 and 65536 that
+represents 16 bits of the 128-bit MD5 hash.
+
+<li><p>Requirements may be referenced by any unique prefix of their
+complete requirement number.
+</ol>
+
+<p><li>
+Individual text requirements are identified in the
+documentation as text between "<b>&#94;</b>" and the first period or
+full-stop ("<b>.</b>")
+or as text between "<b>&#94;(</b>" and "<b>)&#94;</b>".
+<ol type="a">
+<li><p>
+Text requirements are automatically extracted from the documentation by scripts
+that run as part of the documentation build process.
+
+<li><p>
+After requirements have been extracted from the documentation, the requirement
+markers "<b>&#94;</b>", "<b>&#94;(</b>", and "<b>)&#94;</b>" are removed
+from the documentation text. This is done automatically by the documentation
+build scripts.
+
+<li><p>
+To avoid collisions with these requirements delimiters, "&#94;" characters that
+are part of the text of a requirement or that are otherwise found in the
+documentation, should be coded as "&amp;#94;".
+</ol>
+
+<p><li>
+Individual GIF syntax diagram requirements are identified in the
+documentation as HTML image markup of the
+form
+<blockquote><b>
+&lt;img alt="syntax diagram </b><i>NAME</i><b>" src="</b><i>FILE</i><b>"&gt;
+</b></blockquote>
+Where <i>NAME</i> is the name of the syntax diagram and <i>FILE</i> is
+the name of the GIF file containing the syntax diagram.
+<ol type="a">
+<li><p>
+Syntax diagram requirements are automatically extracted from the
+documentation by scripts
+that run as part of the documentation build process.
+
+<li><p>
+The GIF file is the requirement, not the HTML markup that references the
+GIF file nor the diagram name.
+</ol>
+
+<li><p>
+The documentation that contains the
+requirement text is generated by scripts that use as input files
+from both files in the documentation fossil repository and
+comments in the source code.
+
+</ul>
+
+
+<h2>2.0 List Of Requirements</h2>
+
+<dl>
+<dt><b>R-00013-61831-22423-62410-56475-12017-42000-15640</b></dt>
+<dd><p>The key comes first and is separated from the value by a single "=" character.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-00013-61831-22423-62410-56475-12017-42000-15640'>context</a>, <a href='matrix/matrix_duri.html#R-00013-61831-22423-62410-56475-12017-42000-15640'>detail</a>)</i></p></dd>
+
+<dt><b>R-00041-06536-06136-27539-15037-63357-02924-13585</b></dt>
+<dd><p>The virtual table implementation is free to omit rows that are identical in all aOrderBy columns, if it wants to, but it is not required to omit any rows.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-00041-06536-06136-27539-15037-63357-02924-13585'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-00041-06536-06136-27539-15037-63357-02924-13585'>detail</a>)</i></p></dd>
+
+<dt><b>R-00068-42258-60542-46185-56559-40653-31263-18427</b></dt>
+<dd><p>sqlite> EXPLAIN QUERY PLAN SELECT c, d FROM t2 ORDER BY c; QUERY PLAN |--SCAN t2 `--USE TEMP B-TREE FOR ORDER BY
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-00068-42258-60542-46185-56559-40653-31263-18427'>context</a>, <a href='matrix/matrix_deqp.html#R-00068-42258-60542-46185-56559-40653-31263-18427'>detail</a>)</i></p></dd>
+
+<dt><b>R-00090-24248-38638-40643-10159-25596-30389-07024</b></dt>
+<dd><p>The third argument, aCoord[], is an array of nCoord coordinates that defines a bounding box to be tested.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/test_rtreedoc.c, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-00090-24248-38638-40643-10159-25596-30389-07024'>context</a>, <a href='matrix/matrix_drtree.html#R-00090-24248-38638-40643-10159-25596-30389-07024'>detail</a>)</i></p></dd>
+
+<dt><b>R-00099-40772-25508-42886-05693-46370-34145-00683</b></dt>
+<dd><p>Simply setting the locking-mode to NORMAL is not enough - locks are not released until the next time the database file is accessed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-00099-40772-25508-42886-05693-46370-34145-00683'>context</a>, <a href='matrix/matrix_dpragma.html#R-00099-40772-25508-42886-05693-46370-34145-00683'>detail</a>)</i></p></dd>
+
+<dt><b>R-00109-30887-26782-37306-11423-15179-45221-18025</b></dt>
+<dd><p>A virtual table module is created by filling in a persistent instance of this structure and passing a pointer to that instance to sqlite3_create_module() or sqlite3_create_module_v2().
+<i>(source: <a href="c3ref/module.html">c3ref/module.html</a>, matrix: <a href='matrix/c3ref/module.html#R-00109-30887-26782-37306-11423-15179-45221-18025'>context</a>, <a href='matrix/matrix_dmodule.html#R-00109-30887-26782-37306-11423-15179-45221-18025'>detail</a>)</i></p></dd>
+
+<dt><b>R-00110-20874-52504-15299-56251-38354-26784-53834</b></dt>
+<dd><p>SQLITE_TOOBIG might be returned if the size of a string or BLOB exceeds limits imposed by sqlite3_limit(SQLITE_LIMIT_LENGTH) or SQLITE_MAX_LENGTH.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/cov1/vdbeapi03.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-00110-20874-52504-15299-56251-38354-26784-53834'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-00110-20874-52504-15299-56251-38354-26784-53834'>detail</a>)</i></p></dd>
+
+<dt><b>R-00140-37445-57377-20863-40395-21152-20469-25306</b></dt>
+<dd><p>SQLite automatically serializes calls to the xInit method, so the xInit method need not be threadsafe.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-00140-37445-57377-20863-40395-21152-20469-25306'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-00140-37445-57377-20863-40395-21152-20469-25306'>detail</a>)</i></p></dd>
+
+<dt><b>R-00143-55862-36284-22296-28662-09257-51521-03944</b></dt>
+<dd><p>The usual case is that the entire database file is checked.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-00143-55862-36284-22296-28662-09257-51521-03944'>context</a>, <a href='matrix/matrix_dpragma.html#R-00143-55862-36284-22296-28662-09257-51521-03944'>detail</a>)</i></p></dd>
+
+<dt><b>R-00160-62826-06599-62604-50169-49638-00739-38455</b></dt>
+<dd><p>The callback is passed a copy of the generic data pointer (P), the schema-name of the attached database that is being autovacuumed, the size of the database file in pages, the number of free pages, and the number of bytes per page, respectively.
+<i>(source: <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a>, checked-by: th3/cov1/autovac01.test, matrix: <a href='matrix/c3ref/autovacuum_pages.html#R-00160-62826-06599-62604-50169-49638-00739-38455'>context</a>, <a href='matrix/matrix_dautovacuum_pages.html#R-00160-62826-06599-62604-50169-49638-00739-38455'>detail</a>)</i></p></dd>
+
+<dt><b>R-00171-59428-63637-20419-61024-28048-20428-49478</b></dt>
+<dd><p>In such cases, duplicate elements are filtered before being passed into the aggregate function.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-00171-59428-63637-20419-61024-28048-20428-49478'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-00171-59428-63637-20419-61024-28048-20428-49478'>detail</a>)</i></p></dd>
+
+<dt><b>R-00197-14279-64967-54349-51250-28289-13484-05768</b></dt>
+<dd><p>The rank of the column within the index. (0 means left-most. Key columns come before auxiliary columns.)
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15x.test, matrix: <a href='matrix/pragma.html#R-00197-14279-64967-54349-51250-28289-13484-05768'>context</a>, <a href='matrix/matrix_dpragma.html#R-00197-14279-64967-54349-51250-28289-13484-05768'>detail</a>)</i></p></dd>
+
+<dt><b>R-00203-32193-54208-20071-18893-56924-36288-02453</b></dt>
+<dd><p>Contrary to the intuition of many, sqlite3_reset() does not reset the bindings on a prepared statement.
+<i>(source: <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a>, checked-by: th3/req1/clearbind01.test, matrix: <a href='matrix/c3ref/clear_bindings.html#R-00203-32193-54208-20071-18893-56924-36288-02453'>context</a>, <a href='matrix/matrix_dclear_bindings.html#R-00203-32193-54208-20071-18893-56924-36288-02453'>detail</a>)</i></p></dd>
+
+<dt><b>R-00217-01605-34207-18386-37017-37707-31164-60184</b></dt>
+<dd><p>To create a WITHOUT ROWID table, simply add the keywords "WITHOUT ROWID" to the end of the CREATE TABLE statement. For example: CREATE TABLE IF NOT EXISTS wordcount( word TEXT PRIMARY KEY, cnt INTEGER ) WITHOUT ROWID;
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-00217-01605-34207-18386-37017-37707-31164-60184'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-00217-01605-34207-18386-37017-37707-31164-60184'>detail</a>)</i></p></dd>
+
+<dt><b>R-00220-34634-35173-21345-54000-63909-52170-35980</b></dt>
+<dd><p>Otherwise, an expression has no affinity.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-00220-34634-35173-21345-54000-63909-52170-35980'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-00220-34634-35173-21345-54000-63909-52170-35980'>detail</a>)</i></p></dd>
+
+<dt><b>R-00227-21080-37302-15362-03285-23826-51380-28642</b></dt>
+<dd><p>A UNIQUE constraint is similar to a PRIMARY KEY constraint, except that a single table may have any number of UNIQUE constraints.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-00227-21080-37302-15362-03285-23826-51380-28642'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-00227-21080-37302-15362-03285-23826-51380-28642'>detail</a>)</i></p></dd>
+
+<dt><b>R-00243-07929-08239-44820-61576-27318-53216-12960</b></dt>
+<dd><p>If the declared type of the column contains any of the strings "CHAR", "CLOB", or "TEXT" then that column has TEXT affinity.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-00243-07929-08239-44820-61576-27318-53216-12960'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-00243-07929-08239-44820-61576-27318-53216-12960'>detail</a>)</i></p></dd>
+
+<dt><b>R-00250-64843-03340-59080-00214-51349-19518-37616</b></dt>
+<dd><p>If an attempt is made to insert any other non-integer value into this column, the r-tree module silently converts it to an integer before writing it into the database.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-00250-64843-03340-59080-00214-51349-19518-37616'>context</a>, <a href='matrix/matrix_drtree.html#R-00250-64843-03340-59080-00214-51349-19518-37616'>detail</a>)</i></p></dd>
+
+<dt><b>R-00267-47727-45128-11139-64344-07863-10234-35895</b></dt>
+<dd><p>The initial "INSERT" keyword can be replaced by "REPLACE" or "INSERT OR action" to specify an alternative constraint conflict resolution algorithm to use during that one INSERT command.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-00267-47727-45128-11139-64344-07863-10234-35895'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-00267-47727-45128-11139-64344-07863-10234-35895'>detail</a>)</i></p></dd>
+
+<dt><b>R-00279-52283-49814-15354-28909-18424-55374-18430</b></dt>
+<dd><p>Returning to the example in section 1, each time an application deletes a row from the artist table (the parent table), it performs the equivalent of the following SELECT statement to search for referencing rows in the track table (the child table). SELECT rowid FROM track WHERE trackartist = ? where ? in the above is replaced with the value of the artistid column of the record being deleted from the artist table (recall that the trackartist column is the child key and the artistid column is the parent key).
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys10.test, matrix: <a href='matrix/foreignkeys.html#R-00279-52283-49814-15354-28909-18424-55374-18430'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-00279-52283-49814-15354-28909-18424-55374-18430'>detail</a>)</i></p></dd>
+
+<dt><b>R-00293-38883-59042-48634-16424-01088-43070-55397</b></dt>
+<dd><p>Indexes work the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/stricttables.html#R-00293-38883-59042-48634-16424-01088-43070-55397'>context</a>, <a href='matrix/matrix_dstricttables.html#R-00293-38883-59042-48634-16424-01088-43070-55397'>detail</a>)</i></p></dd>
+
+<dt><b>R-00293-64994-39339-33419-11494-64597-05681-15697</b></dt>
+<dd><p>This SQL function is implemented using the sqlite3_result_zeroblob() routine from the C/C++ interface.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, matrix: <a href='matrix/lang_corefunc.html#R-00293-64994-39339-33419-11494-64597-05681-15697'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-00293-64994-39339-33419-11494-64597-05681-15697'>detail</a>)</i></p></dd>
+
+<dt><b>R-00303-53643-59539-09278-38608-05869-19672-31996</b></dt>
+<dd><p>The T argument is one of the integer type codes above.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-00303-53643-59539-09278-38608-05869-19672-31996'>context</a>, <a href='matrix/matrix_dc_trace.html#R-00303-53643-59539-09278-38608-05869-19672-31996'>detail</a>)</i></p></dd>
+
+<dt><b>R-00311-09993-39149-44899-64441-18371-52816-22132</b></dt>
+<dd><p>aConstraint[].usable is TRUE if the expr on the right-hand side can be evaluated (and thus the constraint is usable) and false if it cannot.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-00311-09993-39149-44899-64441-18371-52816-22132'>context</a>, <a href='matrix/matrix_dindex_info.html#R-00311-09993-39149-44899-64441-18371-52816-22132'>detail</a>)</i></p></dd>
+
+<dt><b>R-00339-18886-49546-52716-27550-34633-12345-02293</b></dt>
+<dd><p>The name of the table (as it appears in sqlite_schema.name) is in the sqlite_sequence.name field and the largest INTEGER PRIMARY KEY ever inserted into that table is in the sqlite_sequence.seq field.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-00339-18886-49546-52716-27550-34633-12345-02293'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-00339-18886-49546-52716-27550-34633-12345-02293'>detail</a>)</i></p></dd>
+
+<dt><b>R-00353-01851-44275-08807-26330-41077-52452-65296</b></dt>
+<dd><p>The subquery and outer query do not both use LIMIT.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-00353-01851-44275-08807-26330-41077-52452-65296'>context</a>, <a href='matrix/matrix_doptoverview.html#R-00353-01851-44275-08807-26330-41077-52452-65296'>detail</a>)</i></p></dd>
+
+<dt><b>R-00359-41639-41144-27010-59632-30416-37191-53432</b></dt>
+<dd><p>The view definition is removed from the database schema, but no actual data in the underlying base tables is modified.
+<i>(source: <a href="lang_dropview.html">lang_dropview.html</a>, checked-by: tcl/e_dropview.test, matrix: <a href='matrix/lang_dropview.html#R-00359-41639-41144-27010-59632-30416-37191-53432'>context</a>, <a href='matrix/matrix_dlang_dropview.html#R-00359-41639-41144-27010-59632-30416-37191-53432'>detail</a>)</i></p></dd>
+
+<dt><b>R-00373-55350-22476-46693-17788-34313-52165-34922</b></dt>
+<dd><p>PRAGMA schema.default_cache_size; PRAGMA schema.default_cache_size = Number-of-pages; This pragma queries or sets the suggested maximum number of pages of disk cache that will be allocated per open database file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma09.test, matrix: <a href='matrix/pragma.html#R-00373-55350-22476-46693-17788-34313-52165-34922'>context</a>, <a href='matrix/matrix_dpragma.html#R-00373-55350-22476-46693-17788-34313-52165-34922'>detail</a>)</i></p></dd>
+
+<dt><b>R-00376-39212-00900-22873-65373-47922-05493-41094</b></dt>
+<dd><p>If the parent key columns have a UNIQUE index, then that index must use the collation sequences that are specified in the CREATE TABLE statement for the parent table.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-00376-39212-00900-22873-65373-47922-05493-41094'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-00376-39212-00900-22873-65373-47922-05493-41094'>detail</a>)</i></p></dd>
+
+<dt><b>R-00378-15189-28386-10298-40269-01090-46979-64293</b></dt>
+<dd><p>The return value might be some other value, such as SQLITE_NOMEM, in the event of a malfunction.
+<i>(source: <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>, matrix: <a href='matrix/c3ref/vtab_in_first.html#R-00378-15189-28386-10298-40269-01090-46979-64293'>context</a>, <a href='matrix/matrix_dvtab_in_first.html#R-00378-15189-28386-10298-40269-01090-46979-64293'>detail</a>)</i></p></dd>
+
+<dt><b>R-00402-11496-45496-40393-08263-15231-62727-28991</b></dt>
+<dd><p>The filename argument can be a URI filename if URI filename processing is enable on the database connection.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/cov1/sharedcache03.test, matrix: <a href='matrix/lang_attach.html#R-00402-11496-45496-40393-08263-15231-62727-28991'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-00402-11496-45496-40393-08263-15231-62727-28991'>detail</a>)</i></p></dd>
+
+<dt><b>R-00404-17670-59562-50305-44521-33242-04500-48832</b></dt>
+<dd><p>For the purposes of UNIQUE constraints, NULL values are considered distinct from all other values, including other NULLs.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-00404-17670-59562-50305-44521-33242-04500-48832'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-00404-17670-59562-50305-44521-33242-04500-48832'>detail</a>)</i></p></dd>
+
+<dt><b>R-00421-53597-33844-16365-55873-40811-64785-22587</b></dt>
+<dd><p>The sqlite3_get_table() function evaluates one or more semicolon-separated SQL statements in the zero-terminated UTF-8 string of its 2nd parameter and returns a result table to the pointer given in its 3rd parameter.
+<i>(source: <a href="c3ref/free_table.html">c3ref/free_table.html</a>, checked-by: th3/req1/gettable01.test, matrix: <a href='matrix/c3ref/free_table.html#R-00421-53597-33844-16365-55873-40811-64785-22587'>context</a>, <a href='matrix/matrix_dfree_table.html#R-00421-53597-33844-16365-55873-40811-64785-22587'>detail</a>)</i></p></dd>
+
+<dt><b>R-00442-36377-32354-02929-33916-13547-05175-00922</b></dt>
+<dd><p>The number of extra bytes needed by the page header can be determined using SQLITE_CONFIG_PCACHE_HDRSZ.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/cov1/main42.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-00442-36377-32354-02929-33916-13547-05175-00922'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-00442-36377-32354-02929-33916-13547-05175-00922'>detail</a>)</i></p></dd>
+
+<dt><b>R-00449-33772-33919-59402-60829-28733-22208-04727</b></dt>
+<dd><p>This feature allows WAL databases to be created, read, and written by legacy VFSes that lack the "version 2" shared-memory methods xShmMap, xShmLock, xShmBarrier, and xShmUnmap on the sqlite3_io_methods object.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, th3/req1/pragma05.test, matrix: <a href='matrix/wal.html#R-00449-33772-33919-59402-60829-28733-22208-04727'>context</a>, <a href='matrix/matrix_dwal.html#R-00449-33772-33919-59402-60829-28733-22208-04727'>detail</a>)</i></p></dd>
+
+<dt><b>R-00466-56349-41436-38164-40851-28282-49107-17370</b></dt>
+<dd><p>In any aggregate function that takes a single argument, that argument can be preceded by the keyword DISTINCT.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-00466-56349-41436-38164-40851-28282-49107-17370'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-00466-56349-41436-38164-40851-28282-49107-17370'>detail</a>)</i></p></dd>
+
+<dt><b>R-00471-55166-06832-40836-07519-56638-61190-55255</b></dt>
+<dd><p>The second column is the rowid of the row that contains the invalid REFERENCES clause, or NULL if the child table is a WITHOUT ROWID table.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/fkey5.test, th3/cov1/fkey23.test, matrix: <a href='matrix/pragma.html#R-00471-55166-06832-40836-07519-56638-61190-55255'>context</a>, <a href='matrix/matrix_dpragma.html#R-00471-55166-06832-40836-07519-56638-61190-55255'>detail</a>)</i></p></dd>
+
+<dt><b>R-00576-15510-24475-53838-43505-45493-44918-44548</b></dt>
+<dd><p>Statistics gathered by ANALYZE are not automatically updated as the content of the database changes.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-00576-15510-24475-53838-43505-45493-44918-44548'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-00576-15510-24475-53838-43505-45493-44918-44548'>detail</a>)</i></p></dd>
+
+<dt><b>R-00585-12080-59090-20988-60325-52895-60624-38188</b></dt>
+<dd><p>The sqlite3_str_finish(X) interface may return a NULL pointer if any errors were encountered during construction of the string.
+<i>(source: <a href="c3ref/str_finish.html">c3ref/str_finish.html</a>, matrix: <a href='matrix/c3ref/str_finish.html#R-00585-12080-59090-20988-60325-52895-60624-38188'>context</a>, <a href='matrix/matrix_dstr_finish.html#R-00585-12080-59090-20988-60325-52895-60624-38188'>detail</a>)</i></p></dd>
+
+<dt><b>R-00598-03741-13790-05735-40657-11548-64969-46486</b></dt>
+<dd><p>A negative LIMIT value is interpreted as "no limit".
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-00598-03741-13790-05735-40657-11548-64969-46486'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-00598-03741-13790-05735-40657-11548-64969-46486'>detail</a>)</i></p></dd>
+
+<dt><b>R-00605-14249-27716-38234-38428-32294-04406-05104</b></dt>
+<dd><p>Note that column must be the same column in every OR-connected subterm, although the column can occur on either the left or the right side of the = operator.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-00605-14249-27716-38234-38428-32294-04406-05104'>context</a>, <a href='matrix/matrix_doptoverview.html#R-00605-14249-27716-38234-38428-32294-04406-05104'>detail</a>)</i></p></dd>
+
+<dt><b>R-00634-08585-41820-07623-11518-51863-15995-51786</b></dt>
+<dd><p>If a schema name is specified as part of an object reference, it must be either "main", or "temp" or the schema-name of an attached database.
+<i>(source: <a href="lang_naming.html">lang_naming.html</a>, checked-by: tcl/e_resolve.test, matrix: <a href='matrix/lang_naming.html#R-00634-08585-41820-07623-11518-51863-15995-51786'>context</a>, <a href='matrix/matrix_dlang_naming.html#R-00634-08585-41820-07623-11518-51863-15995-51786'>detail</a>)</i></p></dd>
+
+<dt><b>R-00640-12624-18808-26941-05585-54150-12700-55718</b></dt>
+<dd><p>The expression "x BETWEEN y and z" is logically equivalent to two comparisons "x >= y AND x <= z" and works with respect to collating functions as if it were two separate comparisons.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_10.test, matrix: <a href='matrix/datatype3.html#R-00640-12624-18808-26941-05585-54150-12700-55718'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-00640-12624-18808-26941-05585-54150-12700-55718'>detail</a>)</i></p></dd>
+
+<dt><b>R-00653-06026-13288-58570-29830-10892-52076-06124</b></dt>
+<dd><p>If parameter zDb is NULL or points to a zero length string, then the specified operation is attempted on all WAL databases attached to database connection db.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-00653-06026-13288-58570-29830-10892-52076-06124'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-00653-06026-13288-58570-29830-10892-52076-06124'>detail</a>)</i></p></dd>
+
+<dt><b>R-00683-48865-45449-58832-46192-63065-52178-15689</b></dt>
+<dd><p>For this reason, it is not generally possible to modify the R-Tree in the middle of a query of the R-Tree. Attempts to do so will fail with a SQLITE_LOCKED "database table is locked" error.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree22.test, matrix: <a href='matrix/rtree.html#R-00683-48865-45449-58832-46192-63065-52178-15689'>context</a>, <a href='matrix/matrix_drtree.html#R-00683-48865-45449-58832-46192-63065-52178-15689'>detail</a>)</i></p></dd>
+
+<dt><b>R-00693-36727-57706-32123-30185-00000-05163-54607</b></dt>
+<dd><p>The legacy xGeom callback is invoked with four arguments.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/test_rtreedoc.c, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-00693-36727-57706-32123-30185-00000-05163-54607'>context</a>, <a href='matrix/matrix_drtree.html#R-00693-36727-57706-32123-30185-00000-05163-54607'>detail</a>)</i></p></dd>
+
+<dt><b>R-00695-31519-05206-48434-15068-58741-03264-34333</b></dt>
+<dd><p>The COMMIT command may be used to release all savepoints and commit the transaction even if the transaction was originally started by a SAVEPOINT command instead of a BEGIN command.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-00695-31519-05206-48434-15068-58741-03264-34333'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-00695-31519-05206-48434-15068-58741-03264-34333'>detail</a>)</i></p></dd>
+
+<dt><b>R-00717-60341-45862-31619-05346-22343-41612-42650</b></dt>
+<dd><p>Ptrmap pages must exist in any database file which has a non-zero largest root b-tree page value at offset 52 in the database header.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-00717-60341-45862-31619-05346-22343-41612-42650'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-00717-60341-45862-31619-05346-22343-41612-42650'>detail</a>)</i></p></dd>
+
+<dt><b>R-00752-43975-33209-32622-59517-55856-49839-03222</b></dt>
+<dd><p>The sqlite3_wal_hook() function is used to register a callback that is invoked each time data is committed to a database in wal mode.
+<i>(source: <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>, checked-by: tcl/e_walhook.test, matrix: <a href='matrix/c3ref/wal_hook.html#R-00752-43975-33209-32622-59517-55856-49839-03222'>context</a>, <a href='matrix/matrix_dwal_hook.html#R-00752-43975-33209-32622-59517-55856-49839-03222'>detail</a>)</i></p></dd>
+
+<dt><b>R-00767-44770-16975-15707-27043-13440-51014-32740</b></dt>
+<dd><p>Compute the number of days since the signing of the US Declaration of Independence. SELECT julianday('now') - julianday('1776-07-04');
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-00767-44770-16975-15707-27043-13440-51014-32740'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-00767-44770-16975-15707-27043-13440-51014-32740'>detail</a>)</i></p></dd>
+
+<dt><b>R-00796-21362-00586-19798-41446-05404-46596-57988</b></dt>
+<dd><p>Assuming there are no other indexes, the query above would result in a full table scan.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-00796-21362-00586-19798-41446-05404-46596-57988'>context</a>, <a href='matrix/matrix_doptoverview.html#R-00796-21362-00586-19798-41446-05404-46596-57988'>detail</a>)</i></p></dd>
+
+<dt><b>R-00811-45908-10631-64940-22455-40948-51133-47487</b></dt>
+<dd><p>If the xCompare argument is NULL then the collating function is deleted.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-00811-45908-10631-64940-22455-40948-51133-47487'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-00811-45908-10631-64940-22455-40948-51133-47487'>detail</a>)</i></p></dd>
+
+<dt><b>R-00888-53115-42960-22822-38463-42827-06390-25797</b></dt>
+<dd><p>The prefix option must be set to a comma separated list of positive non-zero integers.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-00888-53115-42960-22822-38463-42827-06390-25797'>context</a>, <a href='matrix/matrix_dfts3.html#R-00888-53115-42960-22822-38463-42827-06390-25797'>detail</a>)</i></p></dd>
+
+<dt><b>R-00896-24328-65526-17085-61980-08171-20681-33021</b></dt>
+<dd><p>The SQLITE_CONFIG_PAGECACHE option specifies a memory pool that SQLite can use for the database page cache with the default page cache implementation.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/cov1/main42.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-00896-24328-65526-17085-61980-08171-20681-33021'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-00896-24328-65526-17085-61980-08171-20681-33021'>detail</a>)</i></p></dd>
+
+<dt><b>R-00918-16997-33541-06619-01421-44106-53820-17907</b></dt>
+<dd><p>For each value N in the list, prefixes of length N bytes (when encoded using UTF-8) are indexed.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-00918-16997-33541-06619-01421-44106-53820-17907'>context</a>, <a href='matrix/matrix_dfts3.html#R-00918-16997-33541-06619-01421-44106-53820-17907'>detail</a>)</i></p></dd>
+
+<dt><b>R-00932-23802-62098-12819-52011-48588-05338-32758</b></dt>
+<dd><p>If there are multiple options, they can be specified in any order.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-00932-23802-62098-12819-52011-48588-05338-32758'>context</a>, <a href='matrix/matrix_dstricttables.html#R-00932-23802-62098-12819-52011-48588-05338-32758'>detail</a>)</i></p></dd>
+
+<dt><b>R-00971-36933-64386-25480-59601-44057-12316-57384</b></dt>
+<dd><p>These routines return 1 if the input string appears to be a complete SQL statement.
+<i>(source: <a href="c3ref/complete.html">c3ref/complete.html</a>, checked-by: th3/cov1/complete01.test, matrix: <a href='matrix/c3ref/complete.html#R-00971-36933-64386-25480-59601-44057-12316-57384'>context</a>, <a href='matrix/matrix_dcomplete.html#R-00971-36933-64386-25480-59601-44057-12316-57384'>detail</a>)</i></p></dd>
+
+<dt><b>R-01060-48788-51013-07543-20121-01838-30879-37400</b></dt>
+<dd><p>The foreign key for table child5 is an error because even though the parent key column has a unique index, the index uses a different collating sequence.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-01060-48788-51013-07543-20121-01838-30879-37400'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-01060-48788-51013-07543-20121-01838-30879-37400'>detail</a>)</i></p></dd>
+
+<dt><b>R-01080-23340-38639-20728-26521-10375-12428-21631</b></dt>
+<dd><p>With the legacy interface, a more specific error code (for example, SQLITE_INTERRUPT, SQLITE_SCHEMA, SQLITE_CORRUPT, and so forth) can be obtained by calling sqlite3_reset() on the prepared statement.
+<i>(source: <a href="c3ref/step.html">c3ref/step.html</a>, matrix: <a href='matrix/c3ref/step.html#R-01080-23340-38639-20728-26521-10375-12428-21631'>context</a>, <a href='matrix/matrix_dstep.html#R-01080-23340-38639-20728-26521-10375-12428-21631'>detail</a>)</i></p></dd>
+
+<dt><b>R-01099-23153-64353-38789-60475-21260-04733-65290</b></dt>
+<dd><p>The values returned by sqlite3_memory_used() and sqlite3_memory_highwater() include any overhead added by SQLite in its implementation of sqlite3_malloc(), but not overhead added by the any underlying system library routines that sqlite3_malloc() may call.
+<i>(source: <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>, matrix: <a href='matrix/c3ref/memory_highwater.html#R-01099-23153-64353-38789-60475-21260-04733-65290'>context</a>, <a href='matrix/matrix_dmemory_highwater.html#R-01099-23153-64353-38789-60475-21260-04733-65290'>detail</a>)</i></p></dd>
+
+<dt><b>R-01209-64669-42495-37683-53345-29915-56024-34849</b></dt>
+<dd><p>Each component query of a compound query (UNION, UNION ALL, EXCEPT or INTERSECT) is assigned computed separately and is given its own line in the EXPLAIN QUERY PLAN output.
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-01209-64669-42495-37683-53345-29915-56024-34849'>context</a>, <a href='matrix/matrix_deqp.html#R-01209-64669-42495-37683-53345-29915-56024-34849'>detail</a>)</i></p></dd>
+
+<dt><b>R-01210-33705-17929-40552-10240-19673-31617-63915</b></dt>
+<dd><p>The sqlite3_result_zeroblob(C,N) and sqlite3_result_zeroblob64(C,N) interfaces set the result of the application-defined function to be a BLOB containing all zero bytes and N bytes in size.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-01210-33705-17929-40552-10240-19673-31617-63915'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-01210-33705-17929-40552-10240-19673-31617-63915'>detail</a>)</i></p></dd>
+
+<dt><b>R-01232-54838-06099-51737-48729-53565-23196-29255</b></dt>
+<dd><p>It is usually an error to attempt to create a new table in a database that already contains a table, index or view of the same name.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-01232-54838-06099-51737-48729-53565-23196-29255'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-01232-54838-06099-51737-48729-53565-23196-29255'>detail</a>)</i></p></dd>
+
+<dt><b>R-01244-21922-18443-41581-31463-56152-20699-08111</b></dt>
+<dd><p>If X is a NULL pointer then sqlite3_msize(X) returns zero.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-01244-21922-18443-41581-31463-56152-20699-08111'>context</a>, <a href='matrix/matrix_dfree.html#R-01244-21922-18443-41581-31463-56152-20699-08111'>detail</a>)</i></p></dd>
+
+<dt><b>R-01255-31602-49480-12710-05718-10731-47284-31520</b></dt>
+<dd><p>The second form (with a numeric argument) sets the limit for the specified database, or for all databases if the optional database name is omitted.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-01255-31602-49480-12710-05718-10731-47284-31520'>context</a>, <a href='matrix/matrix_dpragma.html#R-01255-31602-49480-12710-05718-10731-47284-31520'>detail</a>)</i></p></dd>
+
+<dt><b>R-01256-01950-44319-11761-57126-19053-46711-18121</b></dt>
+<dd><p>If neither ALL or DISTINCT are present, then the behavior is as if ALL were specified.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-01256-01950-44319-11761-57126-19053-46711-18121'>context</a>, <a href='matrix/matrix_dlang_select.html#R-01256-01950-44319-11761-57126-19053-46711-18121'>detail</a>)</i></p></dd>
+
+<dt><b>R-01265-50598-22943-30233-54647-62239-07339-33462</b></dt>
+<dd><p>The result of load_extension() is always a NULL.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-01265-50598-22943-30233-54647-62239-07339-33462'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-01265-50598-22943-30233-54647-62239-07339-33462'>detail</a>)</i></p></dd>
+
+<dt><b>R-01277-06213-42474-53306-49270-01327-38555-55249</b></dt>
+<dd><p>This function sets the database handle error code and message.
+<i>(source: <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>, checked-by: th3/req1/blob01.test, matrix: <a href='matrix/c3ref/blob_reopen.html#R-01277-06213-42474-53306-49270-01327-38555-55249'>context</a>, <a href='matrix/matrix_dblob_reopen.html#R-01277-06213-42474-53306-49270-01327-38555-55249'>detail</a>)</i></p></dd>
+
+<dt><b>R-01280-03635-04913-09225-39257-42860-12445-27024</b></dt>
+<dd><p>An RTREE table can have no more than 100 columns total. In other words, the count of columns including the integer primary key column, the coordinate boundary columns, and all auxiliary columns must be 100 or less.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-01280-03635-04913-09225-39257-42860-12445-27024'>context</a>, <a href='matrix/matrix_drtree.html#R-01280-03635-04913-09225-39257-42860-12445-27024'>detail</a>)</i></p></dd>
+
+<dt><b>R-01283-11636-17384-60742-28077-41928-22950-29282</b></dt>
+<dd><p>The unlikely(X) function is short-hand for likelihood(X,0.0625).
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/resolve.c, matrix: <a href='matrix/lang_corefunc.html#R-01283-11636-17384-60742-28077-41928-22950-29282'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-01283-11636-17384-60742-28077-41928-22950-29282'>detail</a>)</i></p></dd>
+
+<dt><b>R-01298-38284-36243-26684-29926-32770-62313-39537</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.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func04.test, matrix: <a href='matrix/lang_corefunc.html#R-01298-38284-36243-26684-29926-32770-62313-39537'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-01298-38284-36243-26684-29926-32770-62313-39537'>detail</a>)</i></p></dd>
+
+<dt><b>R-01364-08748-27865-47497-61554-10289-43301-18311</b></dt>
+<dd><p>The RETURNING clause is not available on DELETE and UPDATE statements against virtual tables.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning06.test, matrix: <a href='matrix/lang_returning.html#R-01364-08748-27865-47497-61554-10289-43301-18311'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-01364-08748-27865-47497-61554-10289-43301-18311'>detail</a>)</i></p></dd>
+
+<dt><b>R-01365-26226-58886-08210-39128-53586-42636-52900</b></dt>
+<dd><p>When a new database is created, SQLite assigns a page size to the database based on platform and filesystem.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-01365-26226-58886-08210-39128-53586-42636-52900'>context</a>, <a href='matrix/matrix_dpragma.html#R-01365-26226-58886-08210-39128-53586-42636-52900'>detail</a>)</i></p></dd>
+
+<dt><b>R-01379-47306-55874-35809-24668-39985-05961-47226</b></dt>
+<dd><p>Before any information-bearing page of the database is modified, the original unmodified content of that page is written into the rollback journal.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-01379-47306-55874-35809-24668-39985-05961-47226'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-01379-47306-55874-35809-24668-39985-05961-47226'>detail</a>)</i></p></dd>
+
+<dt><b>R-01386-30047-33139-62500-59847-53855-15241-35634</b></dt>
+<dd><p>The first argument to the trace callback is one of the following constants.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-01386-30047-33139-62500-59847-53855-15241-35634'>context</a>, <a href='matrix/matrix_dc_trace.html#R-01386-30047-33139-62500-59847-53855-15241-35634'>detail</a>)</i></p></dd>
+
+<dt><b>R-01391-64022-44610-46114-55308-14246-64441-26910</b></dt>
+<dd><p>The "sz=NNN" argument (where NNN represents a sequence of 1 or more digits) means that the average row size over all records of the table or index is NNN bytes per row.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-01391-64022-44610-46114-55308-14246-64441-26910'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-01391-64022-44610-46114-55308-14246-64441-26910'>detail</a>)</i></p></dd>
+
+<dt><b>R-01402-03601-05785-14929-05185-63336-09442-11982</b></dt>
+<dd><p>If the statement that caused the trigger program to execute is itself part of a trigger program, then that trigger program resumes execution at the beginning of the next step.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-01402-03601-05785-14929-05185-63336-09442-11982'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-01402-03601-05785-14929-05185-63336-09442-11982'>detail</a>)</i></p></dd>
+
+<dt><b>R-01418-51310-13172-45959-27772-51956-15619-12685</b></dt>
+<dd><p>However, only "rowid" works as the keyword in the CREATE TABLE statement.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-01418-51310-13172-45959-27772-51956-15619-12685'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-01418-51310-13172-45959-27772-51956-15619-12685'>detail</a>)</i></p></dd>
+
+<dt><b>R-01440-04765-48174-15543-37673-24749-20235-52074</b></dt>
+<dd><p>If the constraint is not an IN operator or cannot be processed all-at-once, then the interface returns false.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-01440-04765-48174-15543-37673-24749-20235-52074'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-01440-04765-48174-15543-37673-24749-20235-52074'>detail</a>)</i></p></dd>
+
+<dt><b>R-01448-06859-29804-04457-45951-59563-33373-60665</b></dt>
+<dd><p>When xSavepoint(X,N) is invoked, that is a signal to the virtual table X that it should save its current state as savepoint N.
+<i>(source: <a href="vtab.html">vtab.html</a>, matrix: <a href='matrix/vtab.html#R-01448-06859-29804-04457-45951-59563-33373-60665'>context</a>, <a href='matrix/matrix_dvtab.html#R-01448-06859-29804-04457-45951-59563-33373-60665'>detail</a>)</i></p></dd>
+
+<dt><b>R-01450-11152-28406-58151-44531-37891-10618-14069</b></dt>
+<dd><p>As the components of a compound SELECT must be simple SELECT statements, they may not contain ORDER BY or LIMIT clauses.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-01450-11152-28406-58151-44531-37891-10618-14069'>context</a>, <a href='matrix/matrix_dlang_select.html#R-01450-11152-28406-58151-44531-37891-10618-14069'>detail</a>)</i></p></dd>
+
+<dt><b>R-01458-26582-43530-33153-47185-57731-56963-27513</b></dt>
+<dd><p>The length returned by sqlite3_str_length(X) does not include the zero-termination byte.
+<i>(source: <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>, matrix: <a href='matrix/c3ref/str_errcode.html#R-01458-26582-43530-33153-47185-57731-56963-27513'>context</a>, <a href='matrix/matrix_dstr_errcode.html#R-01458-26582-43530-33153-47185-57731-56963-27513'>detail</a>)</i></p></dd>
+
+<dt><b>R-01461-33534-36548-25495-56547-17079-32518-24565</b></dt>
+<dd><p>The sqlite_stat4.sample BLOB for the WITHOUT ROWID table itself contains just the columns of the primary key.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-01461-33534-36548-25495-56547-17079-32518-24565'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-01461-33534-36548-25495-56547-17079-32518-24565'>detail</a>)</i></p></dd>
+
+<dt><b>R-01463-03846-55774-41515-18498-48278-35486-16549</b></dt>
+<dd><p>The DROP TABLE statement removes a table added with the CREATE TABLE statement.
+<i>(source: <a href="lang_droptable.html">lang_droptable.html</a>, matrix: <a href='matrix/lang_droptable.html#R-01463-03846-55774-41515-18498-48278-35486-16549'>context</a>, <a href='matrix/matrix_dlang_droptable.html#R-01463-03846-55774-41515-18498-48278-35486-16549'>detail</a>)</i></p></dd>
+
+<dt><b>R-01470-60482-32731-19597-04026-47136-19531-00133</b></dt>
+<dd><p>The sqlite3_value_type(V) interface returns the datatype code for the initial datatype of the sqlite3_value object V. The returned value is one of SQLITE_INTEGER, SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB, or SQLITE_NULL.
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, checked-by: src/func.c, matrix: <a href='matrix/c3ref/value_blob.html#R-01470-60482-32731-19597-04026-47136-19531-00133'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-01470-60482-32731-19597-04026-47136-19531-00133'>detail</a>)</i></p></dd>
+
+<dt><b>R-01476-65268-29904-09518-33798-08842-57956-04141</b></dt>
+<dd><p>name: the name of the table or view.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-01476-65268-29904-09518-33798-08842-57956-04141'>context</a>, <a href='matrix/matrix_dpragma.html#R-01476-65268-29904-09518-33798-08842-57956-04141'>detail</a>)</i></p></dd>
+
+<dt><b>R-01506-11053-32502-45139-47336-58914-04836-35356</b></dt>
+<dd><p>The first integer on a freelist trunk page is the page number of the next freelist trunk page in the list or zero if this is the last freelist trunk page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-01506-11053-32502-45139-47336-58914-04836-35356'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-01506-11053-32502-45139-47336-58914-04836-35356'>detail</a>)</i></p></dd>
+
+<dt><b>R-01515-49025-64718-16819-52124-40826-60868-48014</b></dt>
+<dd><p>The column appears in a trigger or view.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: tcl/alterdropcol2.test, th3/cov1/altertable25.test, matrix: <a href='matrix/lang_altertable.html#R-01515-49025-64718-16819-52124-40826-60868-48014'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-01515-49025-64718-16819-52124-40826-60868-48014'>detail</a>)</i></p></dd>
+
+<dt><b>R-01531-37780-56063-13317-41294-63476-04645-64168</b></dt>
+<dd><p>If certain kinds of errors occur within a transaction, the transaction may or may not be rolled back automatically. The errors that can cause an automatic rollback include: SQLITE_FULL: database or disk full SQLITE_IOERR: disk I/O error SQLITE_BUSY: database in use by another process SQLITE_NOMEM: out of memory
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-01531-37780-56063-13317-41294-63476-04645-64168'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-01531-37780-56063-13317-41294-63476-04645-64168'>detail</a>)</i></p></dd>
+
+<dt><b>R-01544-29257-62595-06861-33076-18858-48075-56444</b></dt>
+<dd><p>Note that max() is a simple function when it has 2 or more arguments but operates as an aggregate function if given only a single argument.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func05.test, matrix: <a href='matrix/lang_corefunc.html#R-01544-29257-62595-06861-33076-18858-48075-56444'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-01544-29257-62595-06861-33076-18858-48075-56444'>detail</a>)</i></p></dd>
+
+<dt><b>R-01569-01564-08645-29195-59730-50441-26159-21102</b></dt>
+<dd><p>sqlite> EXPLAIN QUERY PLAN SELECT t1.*, t2.* FROM t2, t1 WHERE t1.a=1 AND t1.b>2; QUERY PLAN |--SEARCH t1 USING INDEX i2 (a=? AND b>?) `--SCAN t2
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-01569-01564-08645-29195-59730-50441-26159-21102'>context</a>, <a href='matrix/matrix_deqp.html#R-01569-01564-08645-29195-59730-50441-26159-21102'>detail</a>)</i></p></dd>
+
+<dt><b>R-01587-15367-52926-43879-39292-01582-45706-36467</b></dt>
+<dd><p>xUnpin() is called by SQLite with a pointer to a currently pinned page as its second argument.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-01587-15367-52926-43879-39292-01582-45706-36467'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-01587-15367-52926-43879-39292-01582-45706-36467'>detail</a>)</i></p></dd>
+
+<dt><b>R-01592-27714-26694-24809-12949-19667-58343-14650</b></dt>
+<dd><p>When the EXPLAIN QUERY PLAN phrase appears, the statement returns high-level information regarding the query plan that would have been used.
+<i>(source: <a href="lang_explain.html">lang_explain.html</a>, checked-by: th3/cov1/vdbeaux01.test, matrix: <a href='matrix/lang_explain.html#R-01592-27714-26694-24809-12949-19667-58343-14650'>context</a>, <a href='matrix/matrix_dlang_explain.html#R-01592-27714-26694-24809-12949-19667-58343-14650'>detail</a>)</i></p></dd>
+
+<dt><b>R-01612-30877-07572-17003-08953-37118-55537-45996</b></dt>
+<dd><p>The "vfs" parameter may be used to specify the name of a VFS object that provides the operating system interface that should be used to access the database file on disk.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-01612-30877-07572-17003-08953-37118-55537-45996'>context</a>, <a href='matrix/matrix_dopen.html#R-01612-30877-07572-17003-08953-37118-55537-45996'>detail</a>)</i></p></dd>
+
+<dt><b>R-01646-09830-46955-17168-41197-07539-61822-63814</b></dt>
+<dd><p>The schema of the sqlite_stat3 table is as follows: CREATE TABLE sqlite_stat3(tbl,idx,nEq,nLt,nDLt,sample);
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-01646-09830-46955-17168-41197-07539-61822-63814'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-01646-09830-46955-17168-41197-07539-61822-63814'>detail</a>)</i></p></dd>
+
+<dt><b>R-01665-16529-46232-20487-31256-22068-50948-28475</b></dt>
+<dd><p>The sqlite_stat4.nDLt column holds a list of N integers where the K-th integer is the approximate number of entries in the index that are distinct in the first K columns and where the left-most K columns are collectively less than the left-most K columns of the sample.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-01665-16529-46232-20487-31256-22068-50948-28475'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-01665-16529-46232-20487-31256-22068-50948-28475'>detail</a>)</i></p></dd>
+
+<dt><b>R-01669-33464-29023-56990-09830-45167-30109-01082</b></dt>
+<dd><p>When enabled, this PRAGMA causes many SELECT statements without an ORDER BY clause to emit their results in the reverse order from what they normally would.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma27.test, matrix: <a href='matrix/pragma.html#R-01669-33464-29023-56990-09830-45167-30109-01082'>context</a>, <a href='matrix/matrix_dpragma.html#R-01669-33464-29023-56990-09830-45167-30109-01082'>detail</a>)</i></p></dd>
+
+<dt><b>R-01707-21292-14865-10862-25623-35625-38879-45651</b></dt>
+<dd><p>It is safe to call this routine from a thread different from the thread that is currently running the database operation.
+<i>(source: <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>, matrix: <a href='matrix/c3ref/interrupt.html#R-01707-21292-14865-10862-25623-35625-38879-45651'>context</a>, <a href='matrix/matrix_dinterrupt.html#R-01707-21292-14865-10862-25623-35625-38879-45651'>detail</a>)</i></p></dd>
+
+<dt><b>R-01709-17419-52618-05160-43640-08131-58818-16777</b></dt>
+<dd><p>BEFORE and AFTER triggers work only on ordinary tables.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-01709-17419-52618-05160-43640-08131-58818-16777'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-01709-17419-52618-05160-43640-08131-58818-16777'>detail</a>)</i></p></dd>
+
+<dt><b>R-01722-24158-57472-43965-29775-29032-59147-63158</b></dt>
+<dd><p>The time() function returns the time as text in this format: HH:MM:SS.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-01722-24158-57472-43965-29775-29032-59147-63158'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-01722-24158-57472-43965-29775-29032-59147-63158'>detail</a>)</i></p></dd>
+
+<dt><b>R-01724-22761-13278-31858-02106-19568-34768-00701</b></dt>
+<dd><p>If the sub-query is a compound select, then it must not use an ORDER BY clause.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-01724-22761-13278-31858-02106-19568-34768-00701'>context</a>, <a href='matrix/matrix_doptoverview.html#R-01724-22761-13278-31858-02106-19568-34768-00701'>detail</a>)</i></p></dd>
+
+<dt><b>R-01750-40559-52065-12470-48383-41757-44468-25443</b></dt>
+<dd><p>SQLite always opens immutable database files read-only and it skips all file locking and change detection on immutable database files.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-01750-40559-52065-12470-48383-41757-44468-25443'>context</a>, <a href='matrix/matrix_duri.html#R-01750-40559-52065-12470-48383-41757-44468-25443'>detail</a>)</i></p></dd>
+
+<dt><b>R-01766-15387-49282-35089-26578-35550-62519-17422</b></dt>
+<dd><p>The third argument is the value to bind to the parameter.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-01766-15387-49282-35089-26578-35550-62519-17422'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-01766-15387-49282-35089-26578-35550-62519-17422'>detail</a>)</i></p></dd>
+
+<dt><b>R-01766-56079-01675-00227-41454-02515-08725-53568</b></dt>
+<dd><p>These functions return information about the Nth result column returned by the statement, where N is the second function argument.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-01766-56079-01675-00227-41454-02515-08725-53568'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-01766-56079-01675-00227-41454-02515-08725-53568'>detail</a>)</i></p></dd>
+
+<dt><b>R-01813-32763-54334-00328-19271-46476-32212-62631</b></dt>
+<dd><p>On success, the sqlite3_vtab_in_first(X,P) and sqlite3_vtab_in_next(X,P) routines return SQLITE_OK and set *P to point to the first or next value on the RHS of the IN constraint.
+<i>(source: <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>, matrix: <a href='matrix/c3ref/vtab_in_first.html#R-01813-32763-54334-00328-19271-46476-32212-62631'>context</a>, <a href='matrix/matrix_dvtab_in_first.html#R-01813-32763-54334-00328-19271-46476-32212-62631'>detail</a>)</i></p></dd>
+
+<dt><b>R-01849-26079-03122-24665-29509-65417-11059-24465</b></dt>
+<dd><p>Value is a big-endian 32-bit twos-complement integer.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-01849-26079-03122-24665-29509-65417-11059-24465'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-01849-26079-03122-24665-29509-65417-11059-24465'>detail</a>)</i></p></dd>
+
+<dt><b>R-01862-45642-20021-42706-06373-08124-48431-44069</b></dt>
+<dd><p>SQLite automatically frees the memory allocated by sqlite3_aggregate_context() when the aggregate query concludes.
+<i>(source: <a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a>, checked-by: th3/req1/aggcntx01.test, matrix: <a href='matrix/c3ref/aggregate_context.html#R-01862-45642-20021-42706-06373-08124-48431-44069'>context</a>, <a href='matrix/matrix_daggregate_context.html#R-01862-45642-20021-42706-06373-08124-48431-44069'>detail</a>)</i></p></dd>
+
+<dt><b>R-01879-24612-45296-09386-15855-45568-07479-46348</b></dt>
+<dd><p>Columns with datatype ANY can accept any kind of data (except they will reject NULL values if they have a NOT NULL constraint, of course). No type coercion occurs for a column of type ANY in a STRICT table.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-01879-24612-45296-09386-15855-45568-07479-46348'>context</a>, <a href='matrix/matrix_dstricttables.html#R-01879-24612-45296-09386-15855-45568-07479-46348'>detail</a>)</i></p></dd>
+
+<dt><b>R-01921-64245-04718-64212-38644-45300-05525-61121</b></dt>
+<dd><p>When the right operand of an IN or NOT IN operator is a subquery, the subquery must have the same number of columns as there are columns in the row value of the left operand.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/cov1/rowvalue06.test, matrix: <a href='matrix/lang_expr.html#R-01921-64245-04718-64212-38644-45300-05525-61121'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-01921-64245-04718-64212-38644-45300-05525-61121'>detail</a>)</i></p></dd>
+
+<dt><b>R-01977-40534-32839-34523-14867-40621-38368-53470</b></dt>
+<dd><p>The on-disk format for the table data is the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq03.test, matrix: <a href='matrix/stricttables.html#R-01977-40534-32839-34523-14867-40621-38368-53470'>context</a>, <a href='matrix/matrix_dstricttables.html#R-01977-40534-32839-34523-14867-40621-38368-53470'>detail</a>)</i></p></dd>
+
+<dt><b>R-01992-00519-59560-42589-34051-44285-27634-29157</b></dt>
+<dd><p>Abs(X) returns 0.0 if X is a string or blob that cannot be converted to a numeric value.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-01992-00519-59560-42589-34051-44285-27634-29157'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-01992-00519-59560-42589-34051-44285-27634-29157'>detail</a>)</i></p></dd>
+
+<dt><b>R-01996-58977-34276-47341-41302-00217-64799-50366</b></dt>
+<dd><p>UNIQUE constraints work the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/conflict04.test, matrix: <a href='matrix/stricttables.html#R-01996-58977-34276-47341-41302-00217-64799-50366'>context</a>, <a href='matrix/matrix_dstricttables.html#R-01996-58977-34276-47341-41302-00217-64799-50366'>detail</a>)</i></p></dd>
+
+<dt><b>R-02005-53466-64191-45009-56070-04146-49679-01840</b></dt>
+<dd><p>This option is used to enable or disable triggers.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: th3/cov1/main34.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-02005-53466-64191-45009-56070-04146-49679-01840'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-02005-53466-64191-45009-56070-04146-49679-01840'>detail</a>)</i></p></dd>
+
+<dt><b>R-02015-59187-11904-53173-61515-49878-56843-64871</b></dt>
+<dd><p>An application can force the query planner to reread the statistics tables by running ANALYZE sqlite_schema.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-02015-59187-11904-53173-61515-49878-56843-64871'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-02015-59187-11904-53173-61515-49878-56843-64871'>detail</a>)</i></p></dd>
+
+<dt><b>R-02045-23762-08268-15190-44661-50351-03152-06188</b></dt>
+<dd><p>This character may be used in the LIKE pattern to include literal percent or underscore characters.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-02045-23762-08268-15190-44661-50351-03152-06188'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-02045-23762-08268-15190-44661-50351-03152-06188'>detail</a>)</i></p></dd>
+
+<dt><b>R-02054-15343-41665-64514-11380-36685-28202-41617</b></dt>
+<dd><p>For the purposes of detecting duplicate rows, two NULL values are considered to be equal.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-02054-15343-41665-64514-11380-36685-28202-41617'>context</a>, <a href='matrix/matrix_dlang_select.html#R-02054-15343-41665-64514-11380-36685-28202-41617'>detail</a>)</i></p></dd>
+
+<dt><b>R-02060-64547-35959-63655-11509-53404-59087-08290</b></dt>
+<dd><p>A NOT NULL constraint may only be attached to a column definition, not specified as a table constraint.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-02060-64547-35959-63655-11509-53404-59087-08290'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-02060-64547-35959-63655-11509-53404-59087-08290'>detail</a>)</i></p></dd>
+
+<dt><b>R-02063-40503-04157-38005-61496-25541-17209-31219</b></dt>
+<dd><p>The 2nd argument to the sqlite3_exec() callback function is the number of columns in the result.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-02063-40503-04157-38005-61496-25541-17209-31219'>context</a>, <a href='matrix/matrix_dexec.html#R-02063-40503-04157-38005-61496-25541-17209-31219'>detail</a>)</i></p></dd>
+
+<dt><b>R-02066-39846-49596-48067-57975-02968-06614-12287</b></dt>
+<dd><p>CREATE TABLE t0( a INTEGER PRIMARY KEY, b DATE DEFAULT CURRENT_TIMESTAMP, c INTEGER ); INSERT INTO t0(c) VALUES(random()) RETURNING *; In the INSERT statement above, SQLite computes the values for all three columns.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-02066-39846-49596-48067-57975-02968-06614-12287'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-02066-39846-49596-48067-57975-02968-06614-12287'>detail</a>)</i></p></dd>
+
+<dt><b>R-02136-28803-61484-06431-31373-63795-12521-56561</b></dt>
+<dd><p>The SQLITE_CONFIG_PMASZ option takes a single parameter which is an unsigned integer and sets the "Minimum PMA Size" for the multithreaded sorter to that integer.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-02136-28803-61484-06431-31373-63795-12521-56561'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-02136-28803-61484-06431-31373-63795-12521-56561'>detail</a>)</i></p></dd>
+
+<dt><b>R-02204-63196-34665-25585-57735-42246-07132-57008</b></dt>
+<dd><p>The net effect is that putting the ON or USING clause expressions for a LEFT JOIN in the WHERE clause effectively converts the query to an ordinary INNER JOIN - albeit an inner join that runs more slowly.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-02204-63196-34665-25585-57735-42246-07132-57008'>context</a>, <a href='matrix/matrix_doptoverview.html#R-02204-63196-34665-25585-57735-42246-07132-57008'>detail</a>)</i></p></dd>
+
+<dt><b>R-02216-00820-33390-20327-19071-10430-39697-32412</b></dt>
+<dd><p>The argument X in sqlite3_file_control(db,SQLITE_FCNTL_VFS_POINTER,X) must be of type "sqlite3_vfs **". This opcodes will set *X to a pointer to the top-level VFS.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-02216-00820-33390-20327-19071-10430-39697-32412'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-02216-00820-33390-20327-19071-10430-39697-32412'>detail</a>)</i></p></dd>
+
+<dt><b>R-02223-49279-19512-29951-11875-18036-12006-07318</b></dt>
+<dd><p>Subject to filtering associated with the DISTINCT keyword, the number of rows returned by an aggregate query with a GROUP BY clause is the same as the number of groups of rows produced by applying the GROUP BY and HAVING clauses to the filtered input dataset.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-02223-49279-19512-29951-11875-18036-12006-07318'>context</a>, <a href='matrix/matrix_dlang_select.html#R-02223-49279-19512-29951-11875-18036-12006-07318'>detail</a>)</i></p></dd>
+
+<dt><b>R-02230-09674-61561-02587-07108-44631-60022-03374</b></dt>
+<dd><p>The heap limits are not enforced in the current implementation if one or more of following conditions are true: The limit value is set to zero. Memory accounting is disabled using a combination of the sqlite3_config(SQLITE_CONFIG_MEMSTATUS,...) start-time option and the SQLITE_DEFAULT_MEMSTATUS compile-time option. An alternative page cache implementation is specified using sqlite3_config(SQLITE_CONFIG_PCACHE2,...). The page cache allocates from its own memory pool supplied by sqlite3_config(SQLITE_CONFIG_PAGECACHE,...) rather than from the heap.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, checked-by: th3/req1/softheaplimit02.test, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-02230-09674-61561-02587-07108-44631-60022-03374'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-02230-09674-61561-02587-07108-44631-60022-03374'>detail</a>)</i></p></dd>
+
+<dt><b>R-02287-33529-57702-51380-05125-54682-23740-46632</b></dt>
+<dd><p>The shadow tables are ordinary SQLite data tables.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq02.test, matrix: <a href='matrix/rtree.html#R-02287-33529-57702-51380-05125-54682-23740-46632'>context</a>, <a href='matrix/matrix_drtree.html#R-02287-33529-57702-51380-05125-54682-23740-46632'>detail</a>)</i></p></dd>
+
+<dt><b>R-02320-27410-64858-02729-11929-10797-55740-08223</b></dt>
+<dd><p>Thus for the example index above, if there is no WHERE clause term that constrains column c, then terms that constrain columns a and b can be used with the index but not terms that constrain columns d through z.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-02320-27410-64858-02729-11929-10797-55740-08223'>context</a>, <a href='matrix/matrix_doptoverview.html#R-02320-27410-64858-02729-11929-10797-55740-08223'>detail</a>)</i></p></dd>
+
+<dt><b>R-02336-39303-27290-23991-25845-02494-13210-07983</b></dt>
+<dd><p>The value returned is one of SQLITE_ROLLBACK, SQLITE_IGNORE, SQLITE_FAIL, SQLITE_ABORT, or SQLITE_REPLACE, according to the ON CONFLICT mode of the SQL statement that triggered the call to the xUpdate method of the virtual table.
+<i>(source: <a href="c3ref/vtab_on_conflict.html">c3ref/vtab_on_conflict.html</a>, matrix: <a href='matrix/c3ref/vtab_on_conflict.html#R-02336-39303-27290-23991-25845-02494-13210-07983'>context</a>, <a href='matrix/matrix_dvtab_on_conflict.html#R-02336-39303-27290-23991-25845-02494-13210-07983'>detail</a>)</i></p></dd>
+
+<dt><b>R-02347-27622-26500-11854-22896-16033-00883-33051</b></dt>
+<dd><p>The %n format is silently ignored and does not consume an argument.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/printf2.test, th3/cov1/printf08.test, matrix: <a href='matrix/lang_corefunc.html#R-02347-27622-26500-11854-22896-16033-00883-33051'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-02347-27622-26500-11854-22896-16033-00883-33051'>detail</a>)</i></p></dd>
+
+<dt><b>R-02348-55344-32378-57138-47141-59055-59036-53991</b></dt>
+<dd><p>If the most recent sqlite3_* API call associated with database connection D failed, then the sqlite3_errcode(D) interface returns the numeric result code or extended result code for that API call.
+<i>(source: <a href="c3ref/errcode.html">c3ref/errcode.html</a>, matrix: <a href='matrix/c3ref/errcode.html#R-02348-55344-32378-57138-47141-59055-59036-53991'>context</a>, <a href='matrix/matrix_derrcode.html#R-02348-55344-32378-57138-47141-59055-59036-53991'>detail</a>)</i></p></dd>
+
+<dt><b>R-02355-51069-10404-51667-09139-26886-58872-12048</b></dt>
+<dd><p>The sqlite3_initialize() routine initializes the SQLite library.
+<i>(source: <a href="c3ref/initialize.html">c3ref/initialize.html</a>, matrix: <a href='matrix/c3ref/initialize.html#R-02355-51069-10404-51667-09139-26886-58872-12048'>context</a>, <a href='matrix/matrix_dinitialize.html#R-02355-51069-10404-51667-09139-26886-58872-12048'>detail</a>)</i></p></dd>
+
+<dt><b>R-02358-35037-18853-36293-47263-41920-32022-30649</b></dt>
+<dd><p>The %_rowid shadow table maps entry rowids to the node that contains that entry.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq04.test, matrix: <a href='matrix/rtree.html#R-02358-35037-18853-36293-47263-41920-32022-30649'>context</a>, <a href='matrix/matrix_drtree.html#R-02358-35037-18853-36293-47263-41920-32022-30649'>detail</a>)</i></p></dd>
+
+<dt><b>R-02402-03425-02840-42627-65060-52098-37241-46689</b></dt>
+<dd><p>SQLite has three built-in collating functions: BINARY, NOCASE, and RTRIM.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-02402-03425-02840-42627-65060-52098-37241-46689'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-02402-03425-02840-42627-65060-52098-37241-46689'>detail</a>)</i></p></dd>
+
+<dt><b>R-02424-24769-08747-39368-55205-12781-22154-40957</b></dt>
+<dd><p>The second argument is the number of coordinates in each r-tree entry, and is always the same for any given R*Tree.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, tcl/test_rtreedoc.c, matrix: <a href='matrix/rtree.html#R-02424-24769-08747-39368-55205-12781-22154-40957'>context</a>, <a href='matrix/matrix_drtree.html#R-02424-24769-08747-39368-55205-12781-22154-40957'>detail</a>)</i></p></dd>
+
+<dt><b>R-02445-31643-12462-38565-43200-47259-24553-56004</b></dt>
+<dd><p>The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) cause sqlite3_mutex_alloc() to create a new mutex.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-02445-31643-12462-38565-43200-47259-24553-56004'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-02445-31643-12462-38565-43200-47259-24553-56004'>detail</a>)</i></p></dd>
+
+<dt><b>R-02452-55255-23051-52258-05350-24145-51359-57873</b></dt>
+<dd><p>This in-memory database will vanish when the database connection is closed.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/sharedcache03.test, matrix: <a href='matrix/c3ref/open.html#R-02452-55255-23051-52258-05350-24145-51359-57873'>context</a>, <a href='matrix/matrix_dopen.html#R-02452-55255-23051-52258-05350-24145-51359-57873'>detail</a>)</i></p></dd>
+
+<dt><b>R-02505-03621-00543-52540-17854-51798-01746-35880</b></dt>
+<dd><p>for leaf nodes, that there is an entry in the %_rowid table corresponding to the cell's rowid value that points to the correct node.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree25.test, matrix: <a href='matrix/rtree.html#R-02505-03621-00543-52540-17854-51798-01746-35880'>context</a>, <a href='matrix/matrix_drtree.html#R-02505-03621-00543-52540-17854-51798-01746-35880'>detail</a>)</i></p></dd>
+
+<dt><b>R-02526-60953-53079-20441-57017-47857-19506-30877</b></dt>
+<dd><p>Formats 8 through 10 that specify only a time assume a date of 2000-01-01.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-02526-60953-53079-20441-57017-47857-19506-30877'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-02526-60953-53079-20441-57017-47857-19506-30877'>detail</a>)</i></p></dd>
+
+<dt><b>R-02534-00960-24847-49634-15008-56172-25293-49709</b></dt>
+<dd><p>The added rows contain NULL values in the columns that would normally contain values copied from the left-hand input dataset.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, matrix: <a href='matrix/lang_select.html#R-02534-00960-24847-49634-15008-56172-25293-49709'>context</a>, <a href='matrix/matrix_dlang_select.html#R-02534-00960-24847-49634-15008-56172-25293-49709'>detail</a>)</i></p></dd>
+
+<dt><b>R-02535-05811-23269-15824-03293-63258-54375-28501</b></dt>
+<dd><p>One can explicitly change out of WAL mode using a pragma such as this: PRAGMA journal_mode=DELETE;
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, matrix: <a href='matrix/wal.html#R-02535-05811-23269-15824-03293-63258-54375-28501'>context</a>, <a href='matrix/matrix_dwal.html#R-02535-05811-23269-15824-03293-63258-54375-28501'>detail</a>)</i></p></dd>
+
+<dt><b>R-02545-26933-18999-48013-24665-54880-01582-10256</b></dt>
+<dd><p>PRAGMA stats;
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/index02.test, matrix: <a href='matrix/pragma.html#R-02545-26933-18999-48013-24665-54880-01582-10256'>context</a>, <a href='matrix/matrix_dpragma.html#R-02545-26933-18999-48013-24665-54880-01582-10256'>detail</a>)</i></p></dd>
+
+<dt><b>R-02552-35840-06241-57542-28930-20966-35259-36291</b></dt>
+<dd><p>If the filename is an empty string, then a private, temporary on-disk database will be created.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-02552-35840-06241-57542-28930-20966-35259-36291'>context</a>, <a href='matrix/matrix_dopen.html#R-02552-35840-06241-57542-28930-20966-35259-36291'>detail</a>)</i></p></dd>
+
+<dt><b>R-02555-31045-40373-53400-00989-29508-46660-48239</b></dt>
+<dd><p>for each dimension, (coord1 <= coord2).
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree25.test, matrix: <a href='matrix/rtree.html#R-02555-31045-40373-53400-00989-29508-46660-48239'>context</a>, <a href='matrix/matrix_drtree.html#R-02555-31045-40373-53400-00989-29508-46660-48239'>detail</a>)</i></p></dd>
+
+<dt><b>R-02559-29055-33962-47817-36688-50556-57969-25403</b></dt>
+<dd><p>The built-in functions used to implement LIKE and GLOB must not have been overloaded using the sqlite3_create_function() API.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-02559-29055-33962-47817-36688-50556-57969-25403'>context</a>, <a href='matrix/matrix_doptoverview.html#R-02559-29055-33962-47817-36688-50556-57969-25403'>detail</a>)</i></p></dd>
+
+<dt><b>R-02597-60207-27800-53923-18122-14559-36270-03523</b></dt>
+<dd><p>This pragma only changes the behavior of the SQL LIKE operator. It does not change the behavior of the sqlite3_strlike() C-language interface, which is always case insensitive.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-02597-60207-27800-53923-18122-14559-36270-03523'>context</a>, <a href='matrix/matrix_dpragma.html#R-02597-60207-27800-53923-18122-14559-36270-03523'>detail</a>)</i></p></dd>
+
+<dt><b>R-02603-20369-49628-47923-33871-62989-43083-21610</b></dt>
+<dd><p>The SQLITE_TRACE_SIZE_LIMIT compile-time option limits the size of bound parameter expansions.
+<i>(source: <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>, checked-by: th3/cov1/main16.test, matrix: <a href='matrix/c3ref/expanded_sql.html#R-02603-20369-49628-47923-33871-62989-43083-21610'>context</a>, <a href='matrix/matrix_dexpanded_sql.html#R-02603-20369-49628-47923-33871-62989-43083-21610'>detail</a>)</i></p></dd>
+
+<dt><b>R-02612-37947-62500-41847-13282-34946-09245-20088</b></dt>
+<dd><p>The filename for the database to be attached is the value of the expression that occurs before the AS keyword.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach01.test, matrix: <a href='matrix/lang_attach.html#R-02612-37947-62500-41847-13282-34946-09245-20088'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-02612-37947-62500-41847-13282-34946-09245-20088'>detail</a>)</i></p></dd>
+
+<dt><b>R-02644-22131-14285-04703-01059-19073-41336-39895</b></dt>
+<dd><p>In a compound SELECT statement, only the last or right-most simple SELECT may have an ORDER BY clause.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/select4.test, th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-02644-22131-14285-04703-01059-19073-41336-39895'>context</a>, <a href='matrix/matrix_dlang_select.html#R-02644-22131-14285-04703-01059-19073-41336-39895'>detail</a>)</i></p></dd>
+
+<dt><b>R-02653-06118-57159-51555-56170-47267-50367-42791</b></dt>
+<dd><p>Any new SQL statements that are started after the sqlite3_interrupt() call and before the running statement count reaches zero are interrupted as if they had been running prior to the sqlite3_interrupt() call.
+<i>(source: <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>, matrix: <a href='matrix/c3ref/interrupt.html#R-02653-06118-57159-51555-56170-47267-50367-42791'>context</a>, <a href='matrix/matrix_dinterrupt.html#R-02653-06118-57159-51555-56170-47267-50367-42791'>detail</a>)</i></p></dd>
+
+<dt><b>R-02661-56399-16863-16765-39256-52589-25619-21380</b></dt>
+<dd><p>If the result of the evaluating the LIMIT clause cannot be losslessly converted to an integer value, it is an error.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-02661-56399-16863-16765-39256-52589-25619-21380'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-02661-56399-16863-16765-39256-52589-25619-21380'>detail</a>)</i></p></dd>
+
+<dt><b>R-02718-64874-37028-59587-06155-35657-39180-35629</b></dt>
+<dd><p>zProc may be 0, in which case SQLite will try to come up with an entry point name on its own. It first tries "sqlite3_extension_init". If that does not work, it constructs a name "sqlite3_X_init" where the X is consists of the lower-case equivalent of all ASCII alphabetic characters in the filename from the last "/" to the first following "." and omitting any initial "lib".
+<i>(source: <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>, matrix: <a href='matrix/c3ref/load_extension.html#R-02718-64874-37028-59587-06155-35657-39180-35629'>context</a>, <a href='matrix/matrix_dload_extension.html#R-02718-64874-37028-59587-06155-35657-39180-35629'>detail</a>)</i></p></dd>
+
+<dt><b>R-02723-34107-58585-29932-59518-10370-60775-12212</b></dt>
+<dd><p>Note that it is not necessary for all coordinates in an R*Tree index to be constrained in order for the index search to be efficient.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-02723-34107-58585-29932-59518-10370-60775-12212'>context</a>, <a href='matrix/matrix_drtree.html#R-02723-34107-58585-29932-59518-10370-60775-12212'>detail</a>)</i></p></dd>
+
+<dt><b>R-02748-19096-10502-39344-29556-06426-40271-21454</b></dt>
+<dd><p>This option sets the threading mode to Single-thread.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-02748-19096-10502-39344-29556-06426-40271-21454'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-02748-19096-10502-39344-29556-06426-40271-21454'>detail</a>)</i></p></dd>
+
+<dt><b>R-02752-50091-50763-13370-06213-52053-61647-05504</b></dt>
+<dd><p>A cast of a REAL value into an INTEGER results in the integer between the REAL value and zero that is closest to the REAL value.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-02752-50091-50763-13370-06213-52053-61647-05504'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-02752-50091-50763-13370-06213-52053-61647-05504'>detail</a>)</i></p></dd>
+
+<dt><b>R-02753-24748-27922-38844-00567-47453-02164-18624</b></dt>
+<dd><p>A sequence number assigned to each index for internal tracking purposes.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15.test, matrix: <a href='matrix/pragma.html#R-02753-24748-27922-38844-00567-47453-02164-18624'>context</a>, <a href='matrix/matrix_dpragma.html#R-02753-24748-27922-38844-00567-47453-02164-18624'>detail</a>)</i></p></dd>
+
+<dt><b>R-02754-60157-05684-14835-18385-12207-59168-42343</b></dt>
+<dd><p>The VACUUM INTO command works the same way except that it uses the file named on the INTO clause in place of the temporary database and omits the step of copying the vacuumed database back over top of the original database.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, matrix: <a href='matrix/lang_vacuum.html#R-02754-60157-05684-14835-18385-12207-59168-42343'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-02754-60157-05684-14835-18385-12207-59168-42343'>detail</a>)</i></p></dd>
+
+<dt><b>R-02776-14802-36986-43055-33540-06058-61102-35501</b></dt>
+<dd><p>The cell pointer array consists of K 2-byte integer offsets to the cell contents.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-02776-14802-36986-43055-33540-06058-61102-35501'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-02776-14802-36986-43055-33540-06058-61102-35501'>detail</a>)</i></p></dd>
+
+<dt><b>R-02781-38257-61601-52824-21453-60365-23021-11331</b></dt>
+<dd><p>The name of the database or table or column can be returned as either a UTF-8 or UTF-16 string.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-02781-38257-61601-52824-21453-60365-23021-11331'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-02781-38257-61601-52824-21453-60365-23021-11331'>detail</a>)</i></p></dd>
+
+<dt><b>R-02811-30532-06780-49040-22686-08574-20833-13918</b></dt>
+<dd><p>The multi-argument min() function returns the argument with the minimum value.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-02811-30532-06780-49040-22686-08574-20833-13918'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-02811-30532-06780-49040-22686-08574-20833-13918'>detail</a>)</i></p></dd>
+
+<dt><b>R-02823-24537-56381-41482-05439-43543-17760-52541</b></dt>
+<dd><p>All journal headers within the same journal must contain the same database page size and sector size.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-02823-24537-56381-41482-05439-43543-17760-52541'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-02823-24537-56381-41482-05439-43543-17760-52541'>detail</a>)</i></p></dd>
+
+<dt><b>R-02834-55381-03461-31664-23015-51190-16436-44295</b></dt>
+<dd><p>Compute the date and time given a unix timestamp 1092941466, and compensate for your local timezone. SELECT datetime(1092941466, 'unixepoch', 'localtime');
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-02834-55381-03461-31664-23015-51190-16436-44295'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-02834-55381-03461-31664-23015-51190-16436-44295'>detail</a>)</i></p></dd>
+
+<dt><b>R-02854-44844-25004-52722-20972-43816-38252-26758</b></dt>
+<dd><p>Transactions created using BEGIN...COMMIT do not nest.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-02854-44844-25004-52722-20972-43816-38252-26758'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-02854-44844-25004-52722-20972-43816-38252-26758'>detail</a>)</i></p></dd>
+
+<dt><b>R-02878-47338-41992-43145-51267-26595-43850-16563</b></dt>
+<dd><p>The sqlite3_str object is created using sqlite3_str_new().
+<i>(source: <a href="c3ref/str.html">c3ref/str.html</a>, matrix: <a href='matrix/c3ref/str.html#R-02878-47338-41992-43145-51267-26595-43850-16563'>context</a>, <a href='matrix/matrix_dstr.html#R-02878-47338-41992-43145-51267-26595-43850-16563'>detail</a>)</i></p></dd>
+
+<dt><b>R-02903-29630-48373-46747-65166-13763-04859-03482</b></dt>
+<dd><p>The sqlite3_drop_modules(D,L) interface removes all virtual table modules from database connection D except those named on list L.
+<i>(source: <a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a>, matrix: <a href='matrix/c3ref/drop_modules.html#R-02903-29630-48373-46747-65166-13763-04859-03482'>context</a>, <a href='matrix/matrix_ddrop_modules.html#R-02903-29630-48373-46747-65166-13763-04859-03482'>detail</a>)</i></p></dd>
+
+<dt><b>R-02910-05480-32972-52841-06216-21480-55591-52930</b></dt>
+<dd><p>Each expression may be optionally followed by an AS clause that determines the name of the result column.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-02910-05480-32972-52841-06216-21480-55591-52930'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-02910-05480-32972-52841-06216-21480-55591-52930'>detail</a>)</i></p></dd>
+
+<dt><b>R-02944-19877-16321-40331-61553-58376-42533-63822</b></dt>
+<dd><p>Common table expression are not supported for statements inside of triggers.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-02944-19877-16321-40331-61553-58376-42533-63822'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-02944-19877-16321-40331-61553-58376-42533-63822'>detail</a>)</i></p></dd>
+
+<dt><b>R-02961-26666-41829-02507-08304-47031-60058-62132</b></dt>
+<dd><p>A power failure or program crash or OS crash will cause the outer-most transaction to rollback, undoing all changes that have occurred within that outer transaction, even changes that have supposedly been "committed" by the RELEASE command.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-02961-26666-41829-02507-08304-47031-60058-62132'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-02961-26666-41829-02507-08304-47031-60058-62132'>detail</a>)</i></p></dd>
+
+<dt><b>R-02982-34736-45462-50381-10151-04149-50124-39087</b></dt>
+<dd><p>In order to maintain full backwards compatibility for legacy applications, the URI filename capability is disabled by default.
+<i>(source: <a href="uri.html">uri.html</a>, checked-by: src/global.c, matrix: <a href='matrix/uri.html#R-02982-34736-45462-50381-10151-04149-50124-39087'>context</a>, <a href='matrix/matrix_duri.html#R-02982-34736-45462-50381-10151-04149-50124-39087'>detail</a>)</i></p></dd>
+
+<dt><b>R-03014-26414-56458-20281-20451-13984-34730-16215</b></dt>
+<dd><p>If the LIMIT expression evaluates to a negative value, then there is no upper bound on the number of rows returned.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-03014-26414-56458-20281-20451-13984-34730-16215'>context</a>, <a href='matrix/matrix_dlang_select.html#R-03014-26414-56458-20281-20451-13984-34730-16215'>detail</a>)</i></p></dd>
+
+<dt><b>R-03038-07451-12722-63160-48218-07085-49019-00340</b></dt>
+<dd><p>The DBSTAT virtual table is available on all database connections when SQLite is built using the SQLITE_ENABLE_DBSTAT_VTAB compile-time option.
+<i>(source: <a href="dbstat.html">dbstat.html</a>, matrix: <a href='matrix/dbstat.html#R-03038-07451-12722-63160-48218-07085-49019-00340'>context</a>, <a href='matrix/matrix_ddbstat.html#R-03038-07451-12722-63160-48218-07085-49019-00340'>detail</a>)</i></p></dd>
+
+<dt><b>R-03040-34580-06414-61878-61161-08528-60209-55771</b></dt>
+<dd><p>To change auto-vacuum modes, first use the auto_vacuum pragma to set the new desired mode, then invoke the VACUUM command to reorganize the entire database file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-03040-34580-06414-61878-61161-08528-60209-55771'>context</a>, <a href='matrix/matrix_dpragma.html#R-03040-34580-06414-61878-61161-08528-60209-55771'>detail</a>)</i></p></dd>
+
+<dt><b>R-03042-35027-57621-08562-39860-20110-45272-44124</b></dt>
+<dd><p>In SQLite version 3.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-03042-35027-57621-08562-39860-20110-45272-44124'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-03042-35027-57621-08562-39860-20110-45272-44124'>detail</a>)</i></p></dd>
+
+<dt><b>R-03108-01565-06076-29544-14093-00699-65398-01477</b></dt>
+<dd><p>If sqlite3_backup_step() cannot obtain a required file-system lock, then the busy-handler function is invoked (if one is specified).
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-03108-01565-06076-29544-14093-00699-65398-01477'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-03108-01565-06076-29544-14093-00699-65398-01477'>detail</a>)</i></p></dd>
+
+<dt><b>R-03108-55458-13871-22315-35483-39116-29628-08970</b></dt>
+<dd><p>The memory space used to hold strings and BLOBs is freed automatically.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, th3/req1/column02.test, th3/req1/column03.test, matrix: <a href='matrix/c3ref/column_blob.html#R-03108-55458-13871-22315-35483-39116-29628-08970'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-03108-55458-13871-22315-35483-39116-29628-08970'>detail</a>)</i></p></dd>
+
+<dt><b>R-03108-63659-37525-03634-22905-61973-06931-63842</b></dt>
+<dd><p>The English language error message for foreign key DML errors is usually "foreign key mismatch" but can also be "no such table" if the parent table does not exist.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-03108-63659-37525-03634-22905-61973-06931-63842'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-03108-63659-37525-03634-22905-61973-06931-63842'>detail</a>)</i></p></dd>
+
+<dt><b>R-03145-46390-59121-11550-39703-00062-43990-26586</b></dt>
+<dd><p>This function closes an open BLOB handle.
+<i>(source: <a href="c3ref/blob_close.html">c3ref/blob_close.html</a>, checked-by: tcl/e_blobclose.test, matrix: <a href='matrix/c3ref/blob_close.html#R-03145-46390-59121-11550-39703-00062-43990-26586'>context</a>, <a href='matrix/matrix_dblob_close.html#R-03145-46390-59121-11550-39703-00062-43990-26586'>detail</a>)</i></p></dd>
+
+<dt><b>R-03149-27046-20268-15208-62882-01338-52068-22067</b></dt>
+<dd><p>The fifth argument to the BLOB and string binding interfaces controls or indicates the lifetime of the object referenced by the third parameter.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-03149-27046-20268-15208-62882-01338-52068-22067'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-03149-27046-20268-15208-62882-01338-52068-22067'>detail</a>)</i></p></dd>
+
+<dt><b>R-03153-32413-63550-60817-44903-54109-55492-28243</b></dt>
+<dd><p>Applications can invoke the SQLITE_FCNTL_TEMPFILENAME file-control to have SQLite generate a temporary filename using the same algorithm that is followed to generate temporary filenames for TEMP tables and other internal uses.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-03153-32413-63550-60817-44903-54109-55492-28243'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-03153-32413-63550-60817-44903-54109-55492-28243'>detail</a>)</i></p></dd>
+
+<dt><b>R-03172-04369-12643-00191-50851-55287-16649-54683</b></dt>
+<dd><p>The iif(X,Y,Z) function returns the value Y if X is true, and Z otherwise.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, matrix: <a href='matrix/lang_corefunc.html#R-03172-04369-12643-00191-50851-55287-16649-54683'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-03172-04369-12643-00191-50851-55287-16649-54683'>detail</a>)</i></p></dd>
+
+<dt><b>R-03177-38447-54493-08883-15341-37081-39578-45414</b></dt>
+<dd><p>The strings returned by sqlite3_sql(P) and sqlite3_normalized_sql(P) are managed by SQLite and are automatically freed when the prepared statement is finalized.
+<i>(source: <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>, checked-by: th3/req1/sql01.test, matrix: <a href='matrix/c3ref/expanded_sql.html#R-03177-38447-54493-08883-15341-37081-39578-45414'>context</a>, <a href='matrix/matrix_dexpanded_sql.html#R-03177-38447-54493-08883-15341-37081-39578-45414'>detail</a>)</i></p></dd>
+
+<dt><b>R-03189-51135-06714-56467-07556-62916-33702-61870</b></dt>
+<dd><p>As each SQL statement runs, the schema version is checked to ensure that the schema has not changed since the SQL statement was prepared.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/vdbe.c, th3/req1/pragma28.test, matrix: <a href='matrix/pragma.html#R-03189-51135-06714-56467-07556-62916-33702-61870'>context</a>, <a href='matrix/matrix_dpragma.html#R-03189-51135-06714-56467-07556-62916-33702-61870'>detail</a>)</i></p></dd>
+
+<dt><b>R-03236-28327-53832-55698-26984-08951-20811-30621</b></dt>
+<dd><p>The callback function registered by sqlite3_profile() is invoked as each SQL statement finishes.
+<i>(source: <a href="c3ref/profile.html">c3ref/profile.html</a>, checked-by: th3/cov1/main16.test, matrix: <a href='matrix/c3ref/profile.html#R-03236-28327-53832-55698-26984-08951-20811-30621'>context</a>, <a href='matrix/matrix_dprofile.html#R-03236-28327-53832-55698-26984-08951-20811-30621'>detail</a>)</i></p></dd>
+
+<dt><b>R-03263-59522-08977-47312-04173-07916-12369-56758</b></dt>
+<dd><p>In formats 4, 7, and 10, the fractional seconds value SS.SSS can have one or more digits following the decimal point. Exactly three digits are shown in the examples because only the first three digits are significant to the result, but the input string can have fewer or more than three digits and the date/time functions will still operate correctly.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-03263-59522-08977-47312-04173-07916-12369-56758'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-03263-59522-08977-47312-04173-07916-12369-56758'>detail</a>)</i></p></dd>
+
+<dt><b>R-03353-05327-21191-28288-58549-30161-65035-16573</b></dt>
+<dd><p>If the configured action is "SET NULL", then when a parent key is deleted (for ON DELETE SET NULL) or modified (for ON UPDATE SET NULL), the child key columns of all rows in the child table that mapped to the parent key are set to contain SQL NULL values.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-03353-05327-21191-28288-58549-30161-65035-16573'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-03353-05327-21191-28288-58549-30161-65035-16573'>detail</a>)</i></p></dd>
+
+<dt><b>R-03364-08004-01846-16626-35041-21418-01059-33152</b></dt>
+<dd><p>This saves disk I/O but at the expense of database safety and integrity.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma25.test, matrix: <a href='matrix/pragma.html#R-03364-08004-01846-16626-35041-21418-01059-33152'>context</a>, <a href='matrix/matrix_dpragma.html#R-03364-08004-01846-16626-35041-21418-01059-33152'>detail</a>)</i></p></dd>
+
+<dt><b>R-03366-15091-31390-29880-25655-21575-38320-18449</b></dt>
+<dd><p>A column with affinity BLOB does not prefer one storage class over another and no attempt is made to coerce data from one storage class into another.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-03366-15091-31390-29880-25655-21575-38320-18449'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-03366-15091-31390-29880-25655-21575-38320-18449'>detail</a>)</i></p></dd>
+
+<dt><b>R-03371-37637-45197-41040-02325-30195-01599-52807</b></dt>
+<dd><p>A value of 2 means UTF-16le.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat03.test, matrix: <a href='matrix/fileformat2.html#R-03371-37637-45197-41040-02325-30195-01599-52807'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-03371-37637-45197-41040-02325-30195-01599-52807'>detail</a>)</i></p></dd>
+
+<dt><b>R-03384-16988-56342-27113-15582-23905-61625-46605</b></dt>
+<dd><p>If the 4th parameter to the sqlite3_result_text* interfaces or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that function as the destructor on the text or BLOB result when it has finished using that result.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result02.test, matrix: <a href='matrix/c3ref/result_blob.html#R-03384-16988-56342-27113-15582-23905-61625-46605'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-03384-16988-56342-27113-15582-23905-61625-46605'>detail</a>)</i></p></dd>
+
+<dt><b>R-03387-12896-30110-08033-64260-38467-31820-29841</b></dt>
+<dd><p>For a trigger, the tbl_name column stores the name of the table or view that causes the trigger to fire.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-03387-12896-30110-08033-64260-38467-31820-29841'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-03387-12896-30110-08033-64260-38467-31820-29841'>detail</a>)</i></p></dd>
+
+<dt><b>R-03400-28805-09700-08348-35021-23178-61085-56797</b></dt>
+<dd><p>(3) The constant, SQLITE_TRANSIENT, may be passed to indicate that the object is to be copied prior to the return from sqlite3_bind_*().
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-03400-28805-09700-08348-35021-23178-61085-56797'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-03400-28805-09700-08348-35021-23178-61085-56797'>detail</a>)</i></p></dd>
+
+<dt><b>R-03407-11483-10764-04340-16731-05555-54147-57723</b></dt>
+<dd><p>Each term of the ORDER BY clause is processed separately and may be matched against result columns from different SELECT statements in the compound.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-03407-11483-10764-04340-16731-05555-54147-57723'>context</a>, <a href='matrix/matrix_dlang_select.html#R-03407-11483-10764-04340-16731-05555-54147-57723'>detail</a>)</i></p></dd>
+
+<dt><b>R-03407-34626-50961-58560-51866-04262-39023-12943</b></dt>
+<dd><p>If P<=X then all P bytes of payload are stored directly on the btree page without overflow.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-03407-34626-50961-58560-51866-04262-39023-12943'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-03407-34626-50961-58560-51866-04262-39023-12943'>detail</a>)</i></p></dd>
+
+<dt><b>R-03415-51114-16877-13927-48292-50475-12409-45422</b></dt>
+<dd><p>This routine returns SQLITE_OK if shared cache was enabled or disabled successfully. An error code is returned otherwise.
+<i>(source: <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>, matrix: <a href='matrix/c3ref/enable_shared_cache.html#R-03415-51114-16877-13927-48292-50475-12409-45422'>context</a>, <a href='matrix/matrix_denable_shared_cache.html#R-03415-51114-16877-13927-48292-50475-12409-45422'>detail</a>)</i></p></dd>
+
+<dt><b>R-03421-22330-15487-45434-55764-30375-36326-03914</b></dt>
+<dd><p>The REPLACE command is an alias for the "INSERT OR REPLACE" variant of the INSERT command.
+<i>(source: <a href="lang_replace.html">lang_replace.html</a>, checked-by: tcl/e_insert.test, th3/req1/replace01.test, matrix: <a href='matrix/lang_replace.html#R-03421-22330-15487-45434-55764-30375-36326-03914'>context</a>, <a href='matrix/matrix_dlang_replace.html#R-03421-22330-15487-45434-55764-30375-36326-03914'>detail</a>)</i></p></dd>
+
+<dt><b>R-03421-57988-17823-20871-36963-31591-05991-31026</b></dt>
+<dd><p>If the SELECT statement is a simple SELECT, then an ORDER BY may contain any arbitrary expressions.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-03421-57988-17823-20871-36963-31591-05991-31026'>context</a>, <a href='matrix/matrix_dlang_select.html#R-03421-57988-17823-20871-36963-31591-05991-31026'>detail</a>)</i></p></dd>
+
+<dt><b>R-03473-60719-23522-47619-30011-51175-32203-58759</b></dt>
+<dd><p>In an ordinary rowid table, the index entry always ends with the rowid even if the INTEGER PRIMARY KEY column is one of the columns being indexed.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat04.test, matrix: <a href='matrix/fileformat2.html#R-03473-60719-23522-47619-30011-51175-32203-58759'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-03473-60719-23522-47619-30011-51175-32203-58759'>detail</a>)</i></p></dd>
+
+<dt><b>R-03478-24050-02080-63717-24763-14107-62865-40248</b></dt>
+<dd><p>Application code can delete all entries from the sqlite_sequence table, but application code cannot drop the sqlite_sequence table.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-03478-24050-02080-63717-24763-14107-62865-40248'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-03478-24050-02080-63717-24763-14107-62865-40248'>detail</a>)</i></p></dd>
+
+<dt><b>R-03483-52769-52410-05619-35746-00615-60824-05182</b></dt>
+<dd><p>If the Y argument is omitted or negative, it is taken to be 0.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-03483-52769-52410-05619-35746-00615-60824-05182'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-03483-52769-52410-05619-35746-00615-60824-05182'>detail</a>)</i></p></dd>
+
+<dt><b>R-03511-33422-55072-31663-17873-23476-48339-34907</b></dt>
+<dd><p>If this function needs to obtain extra database locks before dirty pages can be flushed to disk, it does so.
+<i>(source: <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>, matrix: <a href='matrix/c3ref/db_cacheflush.html#R-03511-33422-55072-31663-17873-23476-48339-34907'>context</a>, <a href='matrix/matrix_ddb_cacheflush.html#R-03511-33422-55072-31663-17873-23476-48339-34907'>detail</a>)</i></p></dd>
+
+<dt><b>R-03529-13145-61172-45991-35853-35097-63918-09520</b></dt>
+<dd><p>Each new VFS becomes the default VFS if the makeDflt flag is set.
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-03529-13145-61172-45991-35853-35097-63918-09520'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-03529-13145-61172-45991-35853-35097-63918-09520'>detail</a>)</i></p></dd>
+
+<dt><b>R-03587-06098-24294-21557-27164-26781-18390-63915</b></dt>
+<dd><p>The sqlite3.h header file defines C-preprocessor macros SQLITE_UTF8 as 1, SQLITE_UTF16LE as 2, and SQLITE_UTF16BE as 3, to use in place of the numeric codes for the text encoding.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/cov1/main01.test, matrix: <a href='matrix/fileformat2.html#R-03587-06098-24294-21557-27164-26781-18390-63915'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-03587-06098-24294-21557-27164-26781-18390-63915'>detail</a>)</i></p></dd>
+
+<dt><b>R-03595-19994-17649-33748-29680-14364-48502-36562</b></dt>
+<dd><p>The sign(X) function returns -1, 0, or +1 if the argument X is a numeric value that is negative, zero, or positive, respectively.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, matrix: <a href='matrix/lang_corefunc.html#R-03595-19994-17649-33748-29680-14364-48502-36562'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-03595-19994-17649-33748-29680-14364-48502-36562'>detail</a>)</i></p></dd>
+
+<dt><b>R-03642-28175-07234-22849-20831-22837-60337-13680</b></dt>
+<dd><p>For the index above and WHERE clause like this: ... WHERE a=5 AND b IN (1,2,3) AND c IS NULL AND d='hello' The first four columns a, b, c, and d of the index would be usable since those four columns form a prefix of the index and are all bound by equality constraints.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-03642-28175-07234-22849-20831-22837-60337-13680'>context</a>, <a href='matrix/matrix_doptoverview.html#R-03642-28175-07234-22849-20831-22837-60337-13680'>detail</a>)</i></p></dd>
+
+<dt><b>R-03650-18079-61121-63570-57348-35510-07530-48237</b></dt>
+<dd><p>The languageid option causes the FTS4 table to have an additional hidden integer column that identifies the language of the text contained in each row.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-03650-18079-61121-63570-57348-35510-07530-48237'>context</a>, <a href='matrix/matrix_dfts3.html#R-03650-18079-61121-63570-57348-35510-07530-48237'>detail</a>)</i></p></dd>
+
+<dt><b>R-03668-38040-63384-47924-51655-15922-38013-57392</b></dt>
+<dd><p>SQLITE_DBSTATUS_CACHE_USED_SHARED This parameter is similar to DBSTATUS_CACHE_USED, except that if a pager cache is shared between two or more connections the bytes of heap memory used by that pager cache is divided evenly between the attached connections.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-03668-38040-63384-47924-51655-15922-38013-57392'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-03668-38040-63384-47924-51655-15922-38013-57392'>detail</a>)</i></p></dd>
+
+<dt><b>R-03669-30599-21217-06896-17769-44438-31618-26741</b></dt>
+<dd><p>The SQLITE_CONFIG_LOOKASIDE option takes two arguments that determine the default size of lookaside memory on each database connection. The first argument is the size of each lookaside buffer slot and the second is the number of slots allocated to each database connection.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-03669-30599-21217-06896-17769-44438-31618-26741'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-03669-30599-21217-06896-17769-44438-31618-26741'>detail</a>)</i></p></dd>
+
+<dt><b>R-03679-60639-59233-10900-40024-64867-37353-18498</b></dt>
+<dd><p>Equals can be either = or ==.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-03679-60639-59233-10900-40024-64867-37353-18498'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-03679-60639-59233-10900-40024-64867-37353-18498'>detail</a>)</i></p></dd>
+
+<dt><b>R-03718-56652-35720-52480-53179-27141-13621-15908</b></dt>
+<dd><p>The database name is "main" for the main database, "temp" for the temporary database, or the name specified after the AS keyword in an ATTACH statement for an attached database.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup02.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-03718-56652-35720-52480-53179-27141-13621-15908'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-03718-56652-35720-52480-53179-27141-13621-15908'>detail</a>)</i></p></dd>
+
+<dt><b>R-03733-29734-34954-23072-53116-42399-24178-53918</b></dt>
+<dd><p>Rowid values may be modified using an UPDATE statement in the same way as any other column value can, either using one of the built-in aliases ("rowid", "oid" or "_rowid_") or by using an alias created by an integer primary key.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-03733-29734-34954-23072-53116-42399-24178-53918'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-03733-29734-34954-23072-53116-42399-24178-53918'>detail</a>)</i></p></dd>
+
+<dt><b>R-03763-21608-02614-21475-13242-45742-42220-44388</b></dt>
+<dd><p>In the legacy interface, the return value will be either SQLITE_BUSY, SQLITE_DONE, SQLITE_ROW, SQLITE_ERROR, or SQLITE_MISUSE.
+<i>(source: <a href="c3ref/step.html">c3ref/step.html</a>, matrix: <a href='matrix/c3ref/step.html#R-03763-21608-02614-21475-13242-45742-42220-44388'>context</a>, <a href='matrix/matrix_dstep.html#R-03763-21608-02614-21475-13242-45742-42220-44388'>detail</a>)</i></p></dd>
+
+<dt><b>R-03774-63970-49348-18096-09598-62977-03168-07384</b></dt>
+<dd><p>If an element of a result row is NULL then the corresponding string pointer for the sqlite3_exec() callback is a NULL pointer.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-03774-63970-49348-18096-09598-62977-03168-07384'>context</a>, <a href='matrix/matrix_dexec.html#R-03774-63970-49348-18096-09598-62977-03168-07384'>detail</a>)</i></p></dd>
+
+<dt><b>R-03775-43471-64071-42182-04548-19220-35511-30117</b></dt>
+<dd><p>For CURRENT_DATE, "YYYY-MM-DD".
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-03775-43471-64071-42182-04548-19220-35511-30117'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-03775-43471-64071-42182-04548-19220-35511-30117'>detail</a>)</i></p></dd>
+
+<dt><b>R-03782-50113-07889-61345-45931-21509-48774-40990</b></dt>
+<dd><p>In a compound SELECT, the LIMIT clause applies to the entire compound, not just the final SELECT.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/limit.test, th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-03782-50113-07889-61345-45931-21509-48774-40990'>context</a>, <a href='matrix/matrix_dlang_select.html#R-03782-50113-07889-61345-45931-21509-48774-40990'>detail</a>)</i></p></dd>
+
+<dt><b>R-03793-19254-25835-35208-42396-01402-31770-31653</b></dt>
+<dd><p>If you ever delete rows or if you ever create a row with the maximum possible ROWID, then ROWIDs from previously deleted rows might be reused when creating new rows and newly created ROWIDs might not be in strictly ascending order.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-03793-19254-25835-35208-42396-01402-31770-31653'>context</a>, <a href='matrix/matrix_dautoinc.html#R-03793-19254-25835-35208-42396-01402-31770-31653'>detail</a>)</i></p></dd>
+
+<dt><b>R-03796-40736-43396-40184-40689-11911-14081-05608</b></dt>
+<dd><p>Compute the current date. SELECT date();
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-03796-40736-43396-40184-40689-11911-14081-05608'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-03796-40736-43396-40184-40689-11911-14081-05608'>detail</a>)</i></p></dd>
+
+<dt><b>R-03805-18240-25396-23037-09576-28411-40508-44417</b></dt>
+<dd><p>This private database will be automatically deleted as soon as the database connection is closed.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-03805-18240-25396-23037-09576-28411-40508-44417'>context</a>, <a href='matrix/matrix_dopen.html#R-03805-18240-25396-23037-09576-28411-40508-44417'>detail</a>)</i></p></dd>
+
+<dt><b>R-03816-21626-17112-32643-57381-58430-16315-21594</b></dt>
+<dd><p>When running in shared-cache mode, a database operation may fail with an SQLITE_LOCKED error if the required locks on the shared-cache or individual tables within the shared-cache cannot be obtained.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-03816-21626-17112-32643-57381-58430-16315-21594'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-03816-21626-17112-32643-57381-58430-16315-21594'>detail</a>)</i></p></dd>
+
+<dt><b>R-03849-24470-04387-57438-43164-31085-17053-62847</b></dt>
+<dd><p>The sqlite3_bind_pointer(S,I,P,T,D) routine causes the I-th parameter in prepared statement S to have an SQL value of NULL, but to also be associated with the pointer P of type T.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/cov1/carray01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-03849-24470-04387-57438-43164-31085-17053-62847'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-03849-24470-04387-57438-43164-31085-17053-62847'>detail</a>)</i></p></dd>
+
+<dt><b>R-03880-38961-16553-20098-36513-53865-60133-40229</b></dt>
+<dd><p>If the input text contains no SQL (if the input is an empty string or a comment) then *ppStmt is set to NULL.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare01.test, matrix: <a href='matrix/c3ref/prepare.html#R-03880-38961-16553-20098-36513-53865-60133-40229'>context</a>, <a href='matrix/matrix_dprepare.html#R-03880-38961-16553-20098-36513-53865-60133-40229'>detail</a>)</i></p></dd>
+
+<dt><b>R-03887-49864-52885-52230-12031-59959-26031-40096</b></dt>
+<dd><p>If the PRIMARY KEY of a WITHOUT ROWID tables uses the same columns with the same collating sequence more than once, then the second and subsequent occurrences of that column in the PRIMARY KEY definition are ignored.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-03887-49864-52885-52230-12031-59959-26031-40096'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-03887-49864-52885-52230-12031-59959-26031-40096'>detail</a>)</i></p></dd>
+
+<dt><b>R-03919-01344-62529-26602-44436-50756-40442-48789</b></dt>
+<dd><p>For example, if a table column has a type of "INTEGER", then SQLite tries to convert anything inserted into that column into an integer.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-03919-01344-62529-26602-44436-50756-40442-48789'>context</a>, <a href='matrix/matrix_dstricttables.html#R-03919-01344-62529-26602-44436-50756-40442-48789'>detail</a>)</i></p></dd>
+
+<dt><b>R-03922-41160-10406-40879-23599-49045-53405-25401</b></dt>
+<dd><p>If the flags parameter is zero, the BLOB is opened for read-only access.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_open.html#R-03922-41160-10406-40879-23599-49045-53405-25401'>context</a>, <a href='matrix/matrix_dblob_open.html#R-03922-41160-10406-40879-23599-49045-53405-25401'>detail</a>)</i></p></dd>
+
+<dt><b>R-03927-05794-15006-18553-14579-16403-31114-06185</b></dt>
+<dd><p>When temp_store is MEMORY (2) temporary tables and indices are kept as if they were in pure in-memory databases.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-03927-05794-15006-18553-14579-16403-31114-06185'>context</a>, <a href='matrix/matrix_dpragma.html#R-03927-05794-15006-18553-14579-16403-31114-06185'>detail</a>)</i></p></dd>
+
+<dt><b>R-03934-63400-35021-15759-28695-34964-02248-59433</b></dt>
+<dd><p>However, changing from "none" to "full" or "incremental" can only occur when the database is new (no tables have yet been created) or by running the VACUUM command.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-03934-63400-35021-15759-28695-34964-02248-59433'>context</a>, <a href='matrix/matrix_dpragma.html#R-03934-63400-35021-15759-28695-34964-02248-59433'>detail</a>)</i></p></dd>
+
+<dt><b>R-03993-24285-31190-14311-07438-62351-52230-47181</b></dt>
+<dd><p>Only a single authorizer can be in place on a database connection at a time. Each call to sqlite3_set_authorizer overrides the previous call.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: tcl/auth.test, th3/cov1/auth01.test, matrix: <a href='matrix/c3ref/set_authorizer.html#R-03993-24285-31190-14311-07438-62351-52230-47181'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-03993-24285-31190-14311-07438-62351-52230-47181'>detail</a>)</i></p></dd>
+
+<dt><b>R-03996-12088-12971-06129-31814-44621-38881-57299</b></dt>
+<dd><p>The M parameter must be a valid checkpoint mode:
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: src/main.c, tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-03996-12088-12971-06129-31814-44621-38881-57299'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-03996-12088-12971-06129-31814-44621-38881-57299'>detail</a>)</i></p></dd>
+
+<dt><b>R-04005-08111-39731-15170-36576-49560-64443-15597</b></dt>
+<dd><p>SAVEPOINTs are a method of creating transactions, similar to BEGIN and COMMIT, except that the SAVEPOINT and RELEASE commands are named and may be nested.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-04005-08111-39731-15170-36576-49560-64443-15597'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-04005-08111-39731-15170-36576-49560-64443-15597'>detail</a>)</i></p></dd>
+
+<dt><b>R-04042-24825-64259-53667-46708-22366-11905-57675</b></dt>
+<dd><p>To do so, a foreign key definition may be added by modifying the declaration of the track table to the following: CREATE TABLE track( trackid INTEGER, trackname TEXT, trackartist INTEGER, FOREIGN KEY(trackartist) REFERENCES artist(artistid) );
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys01.test, matrix: <a href='matrix/foreignkeys.html#R-04042-24825-64259-53667-46708-22366-11905-57675'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-04042-24825-64259-53667-46708-22366-11905-57675'>detail</a>)</i></p></dd>
+
+<dt><b>R-04132-09474-00805-46196-04402-30131-02139-26149</b></dt>
+<dd><p>If the HAVING clause is an aggregate expression, it is evaluated across all rows in the group.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-04132-09474-00805-46196-04402-30131-02139-26149'>context</a>, <a href='matrix/matrix_dlang_select.html#R-04132-09474-00805-46196-04402-30131-02139-26149'>detail</a>)</i></p></dd>
+
+<dt><b>R-04136-04681-09628-27696-46047-23040-33903-21102</b></dt>
+<dd><p>If no collating function is explicitly defined, then the collating function defaults to BINARY.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-04136-04681-09628-27696-46047-23040-33903-21102'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-04136-04681-09628-27696-46047-23040-33903-21102'>detail</a>)</i></p></dd>
+
+<dt><b>R-04156-06964-57164-01636-33935-16787-30855-09296</b></dt>
+<dd><p>A call to sqlite3_interrupt(D) that occurs when there are no running SQL statements is a no-op and has no effect on SQL statements that are started after the sqlite3_interrupt() call returns.
+<i>(source: <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>, matrix: <a href='matrix/c3ref/interrupt.html#R-04156-06964-57164-01636-33935-16787-30855-09296'>context</a>, <a href='matrix/matrix_dinterrupt.html#R-04156-06964-57164-01636-33935-16787-30855-09296'>detail</a>)</i></p></dd>
+
+<dt><b>R-04196-57626-61591-44020-20208-08318-09157-59065</b></dt>
+<dd><p>One can add a VIRTUAL column, however.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-04196-57626-61591-44020-20208-08318-09157-59065'>context</a>, <a href='matrix/matrix_dgencol.html#R-04196-57626-61591-44020-20208-08318-09157-59065'>detail</a>)</i></p></dd>
+
+<dt><b>R-04207-37981-22726-45777-39517-24105-18228-28404</b></dt>
+<dd><p>To cast a BLOB value to TEXT, the sequence of bytes that make up the BLOB is interpreted as text encoded using the database encoding.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-04207-37981-22726-45777-39517-24105-18228-28404'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-04207-37981-22726-45777-39517-24105-18228-28404'>detail</a>)</i></p></dd>
+
+<dt><b>R-04230-65027-27281-23522-50954-57493-39965-31436</b></dt>
+<dd><p>This statement detaches an additional database connection previously attached using the ATTACH statement.
+<i>(source: <a href="lang_detach.html">lang_detach.html</a>, matrix: <a href='matrix/lang_detach.html#R-04230-65027-27281-23522-50954-57493-39965-31436'>context</a>, <a href='matrix/matrix_dlang_detach.html#R-04230-65027-27281-23522-50954-57493-39965-31436'>detail</a>)</i></p></dd>
+
+<dt><b>R-04232-24861-40917-13992-27645-07811-63353-60101</b></dt>
+<dd><p>Collation names that compare equal according to sqlite3_strnicmp() are considered to be the same name.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-04232-24861-40917-13992-27645-07811-63353-60101'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-04232-24861-40917-13992-27645-07811-63353-60101'>detail</a>)</i></p></dd>
+
+<dt><b>R-04239-05140-34509-16246-41712-61041-39161-05924</b></dt>
+<dd><p>The sqlite3_close() and sqlite3_close_v2() routines are destructors for the sqlite3 object.
+<i>(source: <a href="c3ref/close.html">c3ref/close.html</a>, checked-by: th3/th3util.c, matrix: <a href='matrix/c3ref/close.html#R-04239-05140-34509-16246-41712-61041-39161-05924'>context</a>, <a href='matrix/matrix_dclose.html#R-04239-05140-34509-16246-41712-61041-39161-05924'>detail</a>)</i></p></dd>
+
+<dt><b>R-04239-46396-01814-35437-09500-15330-29656-29388</b></dt>
+<dd><p>A single zero-byte separates the xOpen filename argument from the key of the first query parameters, each key and value, and each subsequent key from the prior value.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-04239-46396-01814-35437-09500-15330-29656-29388'>context</a>, <a href='matrix/matrix_duri.html#R-04239-46396-01814-35437-09500-15330-29656-29388'>detail</a>)</i></p></dd>
+
+<dt><b>R-04240-13860-65376-64948-20761-30630-14399-44960</b></dt>
+<dd><p>When comparing values, if the parent key column has an affinity, then that affinity is applied to the child key value before the comparison is performed.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys03.test, matrix: <a href='matrix/foreignkeys.html#R-04240-13860-65376-64948-20761-30630-14399-44960'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-04240-13860-65376-64948-20761-30630-14399-44960'>detail</a>)</i></p></dd>
+
+<dt><b>R-04253-22539-00035-22201-40709-27368-32520-29417</b></dt>
+<dd><p>SQLite strives to be flexible regarding the datatype of the content that it stores.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-04253-22539-00035-22201-40709-27368-32520-29417'>context</a>, <a href='matrix/matrix_dstricttables.html#R-04253-22539-00035-22201-40709-27368-32520-29417'>detail</a>)</i></p></dd>
+
+<dt><b>R-04272-38653-14303-01704-38451-58113-36784-29823</b></dt>
+<dd><p>The "RESTRICT" action means that the application is prohibited from deleting (for ON DELETE RESTRICT) or modifying (for ON UPDATE RESTRICT) a parent key when there exists one or more child keys mapped to it.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-04272-38653-14303-01704-38451-58113-36784-29823'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-04272-38653-14303-01704-38451-58113-36784-29823'>detail</a>)</i></p></dd>
+
+<dt><b>R-04300-56712-32659-65159-49842-27130-29205-32160</b></dt>
+<dd><p>If the X parameter to sqlite3_realloc(X,N) is a NULL pointer then its behavior is identical to calling sqlite3_malloc(N).
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: src/malloc.c, th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-04300-56712-32659-65159-49842-27130-29205-32160'>context</a>, <a href='matrix/matrix_dfree.html#R-04300-56712-32659-65159-49842-27130-29205-32160'>detail</a>)</i></p></dd>
+
+<dt><b>R-04304-33529-02265-14363-24121-34151-06311-12119</b></dt>
+<dd><p>The first parameter "n" is the total size of the buffer, including space for the zero terminator.
+<i>(source: <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>, checked-by: th3/req1/malloc01.test, matrix: <a href='matrix/c3ref/mprintf.html#R-04304-33529-02265-14363-24121-34151-06311-12119'>context</a>, <a href='matrix/matrix_dmprintf.html#R-04304-33529-02265-14363-24121-34151-06311-12119'>detail</a>)</i></p></dd>
+
+<dt><b>R-04319-15719-25184-39391-34857-08378-25938-61805</b></dt>
+<dd><p>NOT
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-04319-15719-25184-39391-34857-08378-25938-61805'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-04319-15719-25184-39391-34857-08378-25938-61805'>detail</a>)</i></p></dd>
+
+<dt><b>R-04382-46598-05125-45584-30241-41466-16094-28747</b></dt>
+<dd><p>The text in the sqlite_schema.sql column is a copy of the original CREATE statement text that created the object, except normalized as described above and as modified by subsequent ALTER TABLE statements.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-04382-46598-05125-45584-30241-41466-16094-28747'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-04382-46598-05125-45584-30241-41466-16094-28747'>detail</a>)</i></p></dd>
+
+<dt><b>R-04408-33575-11489-29916-52648-61638-42382-13069</b></dt>
+<dd><p>strict: 1 if the table is a STRICT table or 0 if it is not.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-04408-33575-11489-29916-52648-61638-42382-13069'>context</a>, <a href='matrix/matrix_dpragma.html#R-04408-33575-11489-29916-52648-61638-42382-13069'>detail</a>)</i></p></dd>
+
+<dt><b>R-04452-49349-54233-41206-52506-27116-05869-21475</b></dt>
+<dd><p>When the callback returns SQLITE_DENY, the sqlite3_prepare_v2() or equivalent call that triggered the authorizer will fail with an error message explaining that access is denied.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: tcl/auth.test, th3/cov1/auth01.test, matrix: <a href='matrix/c3ref/set_authorizer.html#R-04452-49349-54233-41206-52506-27116-05869-21475'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-04452-49349-54233-41206-52506-27116-05869-21475'>detail</a>)</i></p></dd>
+
+<dt><b>R-04460-38575-52121-32050-22893-58240-13310-33499</b></dt>
+<dd><p>If the subquery is the right operand of a LEFT JOIN then the subquery may not be a join, and the FROM clause of the subquery may not contain a virtual table, and the outer query may not be an aggregate.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-04460-38575-52121-32050-22893-58240-13310-33499'>context</a>, <a href='matrix/matrix_doptoverview.html#R-04460-38575-52121-32050-22893-58240-13310-33499'>detail</a>)</i></p></dd>
+
+<dt><b>R-04460-53386-37328-50072-27408-53032-10915-39219</b></dt>
+<dd><p>The third argument is the number of slots.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: src/main.c, th3/req1/dbconfig01.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-04460-53386-37328-50072-27408-53032-10915-39219'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-04460-53386-37328-50072-27408-53032-10915-39219'>detail</a>)</i></p></dd>
+
+<dt><b>R-04465-11976-19179-54741-15399-04029-28816-38507</b></dt>
+<dd><p>The built-in iif(x,y,z) SQL function is logically equivalent to "CASE WHEN x THEN y ELSE z END".
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-04465-11976-19179-54741-15399-04029-28816-38507'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-04465-11976-19179-54741-15399-04029-28816-38507'>detail</a>)</i></p></dd>
+
+<dt><b>R-04486-07266-01902-48649-32493-31514-19208-51625</b></dt>
+<dd><p>Or, if the dataset contains zero rows, then each non-aggregate expression is evaluated against a row consisting entirely of NULL values.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-04486-07266-01902-48649-32493-31514-19208-51625'>context</a>, <a href='matrix/matrix_dlang_select.html#R-04486-07266-01902-48649-32493-31514-19208-51625'>detail</a>)</i></p></dd>
+
+<dt><b>R-04532-11527-60293-16788-37808-59040-51319-08926</b></dt>
+<dd><p>The LIKE operator is case sensitive by default for unicode characters that are beyond the ASCII range.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-04532-11527-60293-16788-37808-59040-51319-08926'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-04532-11527-60293-16788-37808-59040-51319-08926'>detail</a>)</i></p></dd>
+
+<dt><b>R-04549-59621-55549-18042-51558-13572-61866-18080</b></dt>
+<dd><p>Tables in an attached database can be referred to using the syntax schema-name.table-name.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach01.test, matrix: <a href='matrix/lang_attach.html#R-04549-59621-55549-18042-51558-13572-61866-18080'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-04549-59621-55549-18042-51558-13572-61866-18080'>detail</a>)</i></p></dd>
+
+<dt><b>R-04558-24451-40018-59769-17015-19792-37809-52993</b></dt>
+<dd><p>In this case all scalar expressions are evaluated before any assignments are made.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-04558-24451-40018-59769-17015-19792-37809-52993'>context</a>, <a href='matrix/matrix_dlang_update.html#R-04558-24451-40018-59769-17015-19792-37809-52993'>detail</a>)</i></p></dd>
+
+<dt><b>R-04591-34196-50064-55566-45109-16204-13417-11786</b></dt>
+<dd><p>If V is a NULL pointer then sqlite3_value_free(V) is a harmless no-op.
+<i>(source: <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>, matrix: <a href='matrix/c3ref/value_dup.html#R-04591-34196-50064-55566-45109-16204-13417-11786'>context</a>, <a href='matrix/matrix_dvalue_dup.html#R-04591-34196-50064-55566-45109-16204-13417-11786'>detail</a>)</i></p></dd>
+
+<dt><b>R-04670-35394-33055-58940-18775-32578-18606-16346</b></dt>
+<dd><p>The schema of the sqlite_stat4 table is as follows: CREATE TABLE sqlite_stat4(tbl,idx,nEq,nLt,nDLt,sample);
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-04670-35394-33055-58940-18775-32578-18606-16346'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-04670-35394-33055-58940-18775-32578-18606-16346'>detail</a>)</i></p></dd>
+
+<dt><b>R-04709-28430-14842-03600-36278-03324-37525-06420</b></dt>
+<dd><p>The two syntaxes yield identical results.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma01.test, matrix: <a href='matrix/pragma.html#R-04709-28430-14842-03600-36278-03324-37525-06420'>context</a>, <a href='matrix/matrix_dpragma.html#R-04709-28430-14842-03600-36278-03324-37525-06420'>detail</a>)</i></p></dd>
+
+<dt><b>R-04780-55815-53305-18116-10339-17181-34629-39653</b></dt>
+<dd><p>The SQLITE_CONFIG_WIN32_HEAPSIZE option is only available if SQLite is compiled for Windows with the SQLITE_WIN32_MALLOC pre-processor macro defined.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-04780-55815-53305-18116-10339-17181-34629-39653'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-04780-55815-53305-18116-10339-17181-34629-39653'>detail</a>)</i></p></dd>
+
+<dt><b>R-04813-30632-36613-23233-44977-18945-21013-25400</b></dt>
+<dd><p>Any number of levels of indirection are allowed.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-04813-30632-36613-23233-44977-18945-21013-25400'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-04813-30632-36613-23233-44977-18945-21013-25400'>detail</a>)</i></p></dd>
+
+<dt><b>R-04813-32302-43211-64289-53860-58512-13652-55013</b></dt>
+<dd><p>If a ROLLBACK operation occurs on the same database connection as a pending read or write, then the pending read or write may fail with an SQLITE_ABORT or SQLITE_ABORT_ROLLBACK error.
+<i>(source: <a href="rescode.html">rescode.html</a>, checked-by: th3/cov1/vdbe14.test, matrix: <a href='matrix/rescode.html#R-04813-32302-43211-64289-53860-58512-13652-55013'>context</a>, <a href='matrix/matrix_drescode.html#R-04813-32302-43211-64289-53860-58512-13652-55013'>detail</a>)</i></p></dd>
+
+<dt><b>R-04857-57605-48133-44150-30535-05379-36560-24650</b></dt>
+<dd><p>An attempt to change the journal_mode of an in-memory database to any setting other than MEMORY or OFF is ignored.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma23.test, matrix: <a href='matrix/pragma.html#R-04857-57605-48133-44150-30535-05379-36560-24650'>context</a>, <a href='matrix/matrix_dpragma.html#R-04857-57605-48133-44150-30535-05379-36560-24650'>detail</a>)</i></p></dd>
+
+<dt><b>R-04864-61029-16829-56446-03389-34714-38812-10063</b></dt>
+<dd><p>Information about the ORDER BY clause is stored in aOrderBy[].
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-04864-61029-16829-56446-03389-34714-38812-10063'>context</a>, <a href='matrix/matrix_dindex_info.html#R-04864-61029-16829-56446-03389-34714-38812-10063'>detail</a>)</i></p></dd>
+
+<dt><b>R-04905-26881-40783-35987-17174-16580-39842-61729</b></dt>
+<dd><p>SQLite uses dynamic run-time typing.
+<i>(source: <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a>, matrix: <a href='matrix/c3ref/column_decltype.html#R-04905-26881-40783-35987-17174-16580-39842-61729'>context</a>, <a href='matrix/matrix_dcolumn_decltype.html#R-04905-26881-40783-35987-17174-16580-39842-61729'>detail</a>)</i></p></dd>
+
+<dt><b>R-04922-24076-20312-31472-33218-43152-59920-55175</b></dt>
+<dd><p>The sqlite_compileoption_get() SQL function is a wrapper around the sqlite3_compileoption_get() C/C++ function.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/cov1/ctime02.test, matrix: <a href='matrix/lang_corefunc.html#R-04922-24076-20312-31472-33218-43152-59920-55175'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-04922-24076-20312-31472-33218-43152-59920-55175'>detail</a>)</i></p></dd>
+
+<dt><b>R-04929-09147-56295-64072-16041-07476-46206-21781</b></dt>
+<dd><p>This routine returns false if there is any possibility that the statement might change the database file.
+<i>(source: <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>, checked-by: tcl/capi3d.test, th3/cov1/vdbeapi14.test, matrix: <a href='matrix/c3ref/stmt_readonly.html#R-04929-09147-56295-64072-16041-07476-46206-21781'>context</a>, <a href='matrix/matrix_dstmt_readonly.html#R-04929-09147-56295-64072-16041-07476-46206-21781'>detail</a>)</i></p></dd>
+
+<dt><b>R-04932-55942-18064-33744-52944-17414-47744-37595</b></dt>
+<dd><p>If the NATURAL keyword is in the join-operator then an implicit USING clause is added to the join-constraints. The implicit USING clause contains each of the column names that appear in both the left and right-hand input datasets.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-04932-55942-18064-33744-52944-17414-47744-37595'>context</a>, <a href='matrix/matrix_dlang_select.html#R-04932-55942-18064-33744-52944-17414-47744-37595'>detail</a>)</i></p></dd>
+
+<dt><b>R-04945-22784-17023-15023-27622-31516-40757-39566</b></dt>
+<dd><p>For example, if a prepared statement is created using the SQL text "SELECT $abc,:xyz" and if parameter $abc is bound to integer 2345 and parameter :xyz is unbound, then sqlite3_sql() will return the original string, "SELECT $abc,:xyz" but sqlite3_expanded_sql() will return "SELECT 2345,NULL".
+<i>(source: <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>, checked-by: th3/req1/sql01.test, matrix: <a href='matrix/c3ref/expanded_sql.html#R-04945-22784-17023-15023-27622-31516-40757-39566'>context</a>, <a href='matrix/matrix_dexpanded_sql.html#R-04945-22784-17023-15023-27622-31516-40757-39566'>detail</a>)</i></p></dd>
+
+<dt><b>R-04950-25529-49153-37444-18478-06220-49910-01329</b></dt>
+<dd><p>Once removed, the trigger definition is no longer present in the sqlite_schema (or sqlite_temp_schema) table and is not fired by any subsequent INSERT, UPDATE or DELETE statements.
+<i>(source: <a href="lang_droptrigger.html">lang_droptrigger.html</a>, checked-by: tcl/e_droptrigger.test, matrix: <a href='matrix/lang_droptrigger.html#R-04950-25529-49153-37444-18478-06220-49910-01329'>context</a>, <a href='matrix/matrix_dlang_droptrigger.html#R-04950-25529-49153-37444-18478-06220-49910-01329'>detail</a>)</i></p></dd>
+
+<dt><b>R-04965-15290-07639-47076-03173-25539-55321-39216</b></dt>
+<dd><p>If two or more COLLATE operator subexpressions appear anywhere in a comparison, the left most explicit collating function is used regardless of how deeply the COLLATE operators are nested in the expression and regardless of how the expression is parenthesized.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-04965-15290-07639-47076-03173-25539-55321-39216'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-04965-15290-07639-47076-03173-25539-55321-39216'>detail</a>)</i></p></dd>
+
+<dt><b>R-04966-20924-22801-44909-48927-53251-60616-56610</b></dt>
+<dd><p>The returned string pointer is valid until either the prepared statement is destroyed by sqlite3_finalize() or until the statement is automatically reprepared by the first call to sqlite3_step() for a particular run or until the next call to sqlite3_column_name() or sqlite3_column_name16() on the same column.
+<i>(source: <a href="c3ref/column_name.html">c3ref/column_name.html</a>, matrix: <a href='matrix/c3ref/column_name.html#R-04966-20924-22801-44909-48927-53251-60616-56610'>context</a>, <a href='matrix/matrix_dcolumn_name.html#R-04966-20924-22801-44909-48927-53251-60616-56610'>detail</a>)</i></p></dd>
+
+<dt><b>R-04985-23577-44603-16684-59773-10654-23647-01316</b></dt>
+<dd><p>The schema_version pragma will get or set the value of the schema-version integer at offset 40 in the database header.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma28.test, matrix: <a href='matrix/pragma.html#R-04985-23577-44603-16684-59773-10654-23647-01316'>context</a>, <a href='matrix/matrix_dpragma.html#R-04985-23577-44603-16684-59773-10654-23647-01316'>detail</a>)</i></p></dd>
+
+<dt><b>R-05029-19081-65364-33409-26598-32718-22638-00652</b></dt>
+<dd><p>SQLITE_STATUS_MEMORY_USED This parameter is the current amount of memory checked out using sqlite3_malloc(), either directly or indirectly. The figure includes calls made to sqlite3_malloc() by the application and internal memory usage by the SQLite library. Auxiliary page-cache memory controlled by SQLITE_CONFIG_PAGECACHE is not included in this parameter. The amount returned is the sum of the allocation sizes as reported by the xSize method in sqlite3_mem_methods.
+<i>(source: <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a>, matrix: <a href='matrix/c3ref/c_status_malloc_count.html#R-05029-19081-65364-33409-26598-32718-22638-00652'>context</a>, <a href='matrix/matrix_dc_status_malloc_count.html#R-05029-19081-65364-33409-26598-32718-22638-00652'>detail</a>)</i></p></dd>
+
+<dt><b>R-05038-25064-50136-23943-62126-35147-57737-05371</b></dt>
+<dd><p>You can then access the ROWID using any of four different names, the original three names described above or the name given to the INTEGER PRIMARY KEY column.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-05038-25064-50136-23943-62126-35147-57737-05371'>context</a>, <a href='matrix/matrix_dautoinc.html#R-05038-25064-50136-23943-62126-35147-57737-05371'>detail</a>)</i></p></dd>
+
+<dt><b>R-05050-19932-51228-07490-05961-18569-19924-51856</b></dt>
+<dd><p>The SQLITE_CONFIG_MUTEX option takes a single argument which is a pointer to an instance of the sqlite3_mutex_methods structure. The argument specifies alternative low-level mutex routines to be used in place the mutex routines built into SQLite.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-05050-19932-51228-07490-05961-18569-19924-51856'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-05050-19932-51228-07490-05961-18569-19924-51856'>detail</a>)</i></p></dd>
+
+<dt><b>R-05088-64670-01812-40293-14899-41323-61587-34551</b></dt>
+<dd><p>The sqlite_sequence.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-05088-64670-01812-40293-14899-41323-61587-34551'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-05088-64670-01812-40293-14899-41323-61587-34551'>detail</a>)</i></p></dd>
+
+<dt><b>R-05098-06501-37096-20174-22596-42631-53516-57817</b></dt>
+<dd><p>In shared cache mode, attempting to attach the same database file more than once results in an error.
+<i>(source: <a href="lang_detach.html">lang_detach.html</a>, checked-by: tcl/shared7.test, th3/cov1/attach07.test, matrix: <a href='matrix/lang_detach.html#R-05098-06501-37096-20174-22596-42631-53516-57817'>context</a>, <a href='matrix/matrix_dlang_detach.html#R-05098-06501-37096-20174-22596-42631-53516-57817'>detail</a>)</i></p></dd>
+
+<dt><b>R-05192-57965-21317-62763-55347-54447-59069-43394</b></dt>
+<dd><p>Hence, the string '3.0e+5' is stored in a column with NUMERIC affinity as the integer 300000, not as the floating point value 300000.0.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-05192-57965-21317-62763-55347-54447-59069-43394'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-05192-57965-21317-62763-55347-54447-59069-43394'>detail</a>)</i></p></dd>
+
+<dt><b>R-05196-58733-44887-26524-08639-58577-62968-38394</b></dt>
+<dd><p>The "temp" database (in which TEMP tables and indices are stored) and in-memory databases always uses exclusive locking mode.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-05196-58733-44887-26524-08639-58577-62968-38394'>context</a>, <a href='matrix/matrix_dpragma.html#R-05196-58733-44887-26524-08639-58577-62968-38394'>detail</a>)</i></p></dd>
+
+<dt><b>R-05212-61817-14032-11419-24203-62425-34846-12664</b></dt>
+<dd><p>If an error occurs, that fact is recorded in the sqlite3_str object and can be recovered by a subsequent call to sqlite3_str_errcode(X).
+<i>(source: <a href="c3ref/str_append.html">c3ref/str_append.html</a>, matrix: <a href='matrix/c3ref/str_append.html#R-05212-61817-14032-11419-24203-62425-34846-12664'>context</a>, <a href='matrix/matrix_dstr_append.html#R-05212-61817-14032-11419-24203-62425-34846-12664'>detail</a>)</i></p></dd>
+
+<dt><b>R-05226-30063-38393-23337-31220-10155-17682-45217</b></dt>
+<dd><p>If the application using SQLite crashes in the middle of a transaction when the MEMORY journaling mode is set, then the database file will very likely go corrupt.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma25.test, matrix: <a href='matrix/pragma.html#R-05226-30063-38393-23337-31220-10155-17682-45217'>context</a>, <a href='matrix/matrix_dpragma.html#R-05226-30063-38393-23337-31220-10155-17682-45217'>detail</a>)</i></p></dd>
+
+<dt><b>R-05239-12850-29861-48267-58259-09367-64321-59571</b></dt>
+<dd><p>If no algorithm is specified anywhere, the ABORT algorithm is used.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict03.test, matrix: <a href='matrix/lang_conflict.html#R-05239-12850-29861-48267-58259-09367-64321-59571'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-05239-12850-29861-48267-58259-09367-64321-59571'>detail</a>)</i></p></dd>
+
+<dt><b>R-05254-00658-23742-34136-13538-61949-20472-35341</b></dt>
+<dd><p>So the following query could use the partial index: SELECT * FROM tab2 WHERE b=456 AND c<>0; -- uses partial index
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-05254-00658-23742-34136-13538-61949-20472-35341'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-05254-00658-23742-34136-13538-61949-20472-35341'>detail</a>)</i></p></dd>
+
+<dt><b>R-05272-22592-13374-24756-51597-06491-53677-55023</b></dt>
+<dd><p>The index for named parameters can be looked up using the sqlite3_bind_parameter_index() API if desired.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-05272-22592-13374-24756-51597-06491-53677-55023'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-05272-22592-13374-24756-51597-06491-53677-55023'>detail</a>)</i></p></dd>
+
+<dt><b>R-05285-60272-09922-62033-18210-31943-35280-46624</b></dt>
+<dd><p>Then, under the usual mode of handling IN operators, SQLite generates bytecode that invokes the xFilter() method once for each value on the right-hand side of the IN operator.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-05285-60272-09922-62033-18210-31943-35280-46624'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-05285-60272-09922-62033-18210-31943-35280-46624'>detail</a>)</i></p></dd>
+
+<dt><b>R-05301-32681-11917-53839-06553-61603-43952-64876</b></dt>
+<dd><p>If the query optimizer is unable to use the index specified by the INDEXED BY clause, then the query will fail with an error.
+<i>(source: <a href="lang_indexedby.html">lang_indexedby.html</a>, checked-by: tcl/indexedby.test, matrix: <a href='matrix/lang_indexedby.html#R-05301-32681-11917-53839-06553-61603-43952-64876'>context</a>, <a href='matrix/matrix_dlang_indexedby.html#R-05301-32681-11917-53839-06553-61603-43952-64876'>detail</a>)</i></p></dd>
+
+<dt><b>R-05363-17893-60997-09697-28202-47991-52787-63067</b></dt>
+<dd><p>Views are read-only in SQLite.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, checked-by: th3/req1/view01.test, matrix: <a href='matrix/lang_createview.html#R-05363-17893-60997-09697-28202-47991-52787-63067'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-05363-17893-60997-09697-28202-47991-52787-63067'>detail</a>)</i></p></dd>
+
+<dt><b>R-05367-01575-38544-05441-45705-50827-33382-05876</b></dt>
+<dd><p>The first argument to the sqlite3_bind_*() routines is always a pointer to the sqlite3_stmt object returned from sqlite3_prepare_v2() or its variants.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-05367-01575-38544-05441-45705-50827-33382-05876'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-05367-01575-38544-05441-45705-50827-33382-05876'>detail</a>)</i></p></dd>
+
+<dt><b>R-05395-35212-59104-06059-25040-21226-51023-56208</b></dt>
+<dd><p>(2) The special constant, SQLITE_STATIC, may be passsed to indicate that the application remains responsible for disposing of the object.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-05395-35212-59104-06059-25040-21226-51023-56208'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-05395-35212-59104-06059-25040-21226-51023-56208'>detail</a>)</i></p></dd>
+
+<dt><b>R-05412-24332-54065-34231-12787-10202-34287-53186</b></dt>
+<dd><p>If the time-value is numeric (the DDDDDDDDDD format) then the 'auto' modifier causes the time-value to interpreted as either a julian day number or a unix timestamp, depending on its magnitude.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, matrix: <a href='matrix/lang_datefunc.html#R-05412-24332-54065-34231-12787-10202-34287-53186'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-05412-24332-54065-34231-12787-10202-34287-53186'>detail</a>)</i></p></dd>
+
+<dt><b>R-05416-39654-33473-55228-34062-26099-18988-34297</b></dt>
+<dd><p>Any callback set by a previous call to sqlite3_commit_hook() for the same database connection is overridden.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-05416-39654-33473-55228-34062-26099-18988-34297'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-05416-39654-33473-55228-34062-26099-18988-34297'>detail</a>)</i></p></dd>
+
+<dt><b>R-05416-57569-14245-59554-42970-16556-04782-39407</b></dt>
+<dd><p>The sqlite3_create_collation_v2() works like sqlite3_create_collation() with the addition that the xDestroy callback is invoked on pArg when the collating function is deleted.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-05416-57569-14245-59554-42970-16556-04782-39407'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-05416-57569-14245-59554-42970-16556-04782-39407'>detail</a>)</i></p></dd>
+
+<dt><b>R-05452-35198-10871-20803-29102-44206-02290-23562</b></dt>
+<dd><p>The object returned by sqlite3_column_value() is an unprotected sqlite3_value object.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-05452-35198-10871-20803-29102-44206-02290-23562'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-05452-35198-10871-20803-29102-44206-02290-23562'>detail</a>)</i></p></dd>
+
+<dt><b>R-05461-33397-24167-58750-38066-50926-47850-55199</b></dt>
+<dd><p>If SQLite is compiled with the SQLITE_ENABLE_STAT4 option, then additional histogram data is collected and stored in sqlite_stat4.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-05461-33397-24167-58750-38066-50926-47850-55199'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-05461-33397-24167-58750-38066-50926-47850-55199'>detail</a>)</i></p></dd>
+
+<dt><b>R-05475-27562-55227-25532-19767-14622-00601-03902</b></dt>
+<dd><p>The sqlite3_backup_remaining() routine returns the number of pages still to be backed up at the conclusion of the most recent sqlite3_backup_step().
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-05475-27562-55227-25532-19767-14622-00601-03902'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-05475-27562-55227-25532-19767-14622-00601-03902'>detail</a>)</i></p></dd>
+
+<dt><b>R-05513-33819-59240-57490-36750-56355-20133-11323</b></dt>
+<dd><p>It is not an error to create a table that has the same name as an existing trigger.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-05513-33819-59240-57490-36750-56355-20133-11323'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-05513-33819-59240-57490-36750-56355-20133-11323'>detail</a>)</i></p></dd>
+
+<dt><b>R-05529-49311-19385-25088-51848-47183-58001-39726</b></dt>
+<dd><p>If the integrity_check pragma finds problems, strings are returned (as multiple rows with a single column per row) which describe the problems.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/integrityck01.test, matrix: <a href='matrix/pragma.html#R-05529-49311-19385-25088-51848-47183-58001-39726'>context</a>, <a href='matrix/matrix_dpragma.html#R-05529-49311-19385-25088-51848-47183-58001-39726'>detail</a>)</i></p></dd>
+
+<dt><b>R-05552-15084-05102-10878-43028-26070-39117-22765</b></dt>
+<dd><p>CREATE VIRTUAL TABLE demo_index2 USING rtree( id, -- Integer primary key minX, maxX, -- Minimum and maximum X coordinate minY, maxY, -- Minimum and maximum Y coordinate +objname TEXT, -- name of the object +objtype TEXT, -- object type +boundary BLOB -- detailed boundary of object );
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-05552-15084-05102-10878-43028-26070-39117-22765'>context</a>, <a href='matrix/matrix_drtree.html#R-05552-15084-05102-10878-43028-26070-39117-22765'>detail</a>)</i></p></dd>
+
+<dt><b>R-05617-50091-64320-09946-64698-41149-46478-61865</b></dt>
+<dd><p>In the DELETE mode, the rollback journal is deleted at the conclusion of each transaction.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma24.test, matrix: <a href='matrix/pragma.html#R-05617-50091-64320-09946-64698-41149-46478-61865'>context</a>, <a href='matrix/matrix_dpragma.html#R-05617-50091-64320-09946-64698-41149-46478-61865'>detail</a>)</i></p></dd>
+
+<dt><b>R-05644-53956-28885-25038-62165-04272-38392-10037</b></dt>
+<dd><p>A WAL always grows from beginning toward the end.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-05644-53956-28885-25038-62165-04272-38392-10037'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-05644-53956-28885-25038-62165-04272-38392-10037'>detail</a>)</i></p></dd>
+
+<dt><b>R-05646-15132-11020-10123-43884-18508-24247-46472</b></dt>
+<dd><p>When synchronous is NORMAL (1), the SQLite database engine will still sync at the most critical moments, but less often than in FULL mode.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-05646-15132-11020-10123-43884-18508-24247-46472'>context</a>, <a href='matrix/matrix_dpragma.html#R-05646-15132-11020-10123-43884-18508-24247-46472'>detail</a>)</i></p></dd>
+
+<dt><b>R-05650-46070-32640-12192-03987-30502-33558-23123</b></dt>
+<dd><p>And you can UPDATE, DELETE, INSERT or even DROP the shadow tables, though doing so will corrupt your R*Tree index.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq02.test, matrix: <a href='matrix/rtree.html#R-05650-46070-32640-12192-03987-30502-33558-23123'>context</a>, <a href='matrix/matrix_drtree.html#R-05650-46070-32640-12192-03987-30502-33558-23123'>detail</a>)</i></p></dd>
+
+<dt><b>R-05658-50861-03980-59142-22738-32773-09138-30302</b></dt>
+<dd><p>SQLite only understands the hexadecimal integer notation when it appears in the SQL statement text, not when it appears as part of the content of the database.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr01.test, matrix: <a href='matrix/lang_expr.html#R-05658-50861-03980-59142-22738-32773-09138-30302'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-05658-50861-03980-59142-22738-32773-09138-30302'>detail</a>)</i></p></dd>
+
+<dt><b>R-05681-60460-45963-09749-31482-57327-02393-17906</b></dt>
+<dd><p>If the ANALYZE command is run in order to gather statistics, a different choice might be made if the statistics indicate that the alternative is likely to run faster.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-05681-60460-45963-09749-31482-57327-02393-17906'>context</a>, <a href='matrix/matrix_doptoverview.html#R-05681-60460-45963-09749-31482-57327-02393-17906'>detail</a>)</i></p></dd>
+
+<dt><b>R-05688-29289-29845-29411-51913-58756-05388-39596</b></dt>
+<dd><p>PRAGMA encoding; PRAGMA encoding = 'UTF-8'; PRAGMA encoding = 'UTF-16'; PRAGMA encoding = 'UTF-16le'; PRAGMA encoding = 'UTF-16be';
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma16.test, matrix: <a href='matrix/pragma.html#R-05688-29289-29845-29411-51913-58756-05388-39596'>context</a>, <a href='matrix/matrix_dpragma.html#R-05688-29289-29845-29411-51913-58756-05388-39596'>detail</a>)</i></p></dd>
+
+<dt><b>R-05693-48487-42509-32993-20525-28591-05760-18227</b></dt>
+<dd><p>For the index above and WHERE clause like this: ... WHERE a=5 OR b IN (1,2,3) OR c NOT NULL OR d='hello' The index is not usable because the WHERE clause terms are connected by OR instead of AND.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-05693-48487-42509-32993-20525-28591-05760-18227'>context</a>, <a href='matrix/matrix_doptoverview.html#R-05693-48487-42509-32993-20525-28591-05760-18227'>detail</a>)</i></p></dd>
+
+<dt><b>R-05702-07867-01732-07701-01060-12844-31655-42982</b></dt>
+<dd><p>The key to an index b-tree is a record composed of the columns that are being indexed followed by the key of the corresponding table row.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-05702-07867-01732-07701-01060-12844-31655-42982'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-05702-07867-01732-07701-01060-12844-31655-42982'>detail</a>)</i></p></dd>
+
+<dt><b>R-05723-45863-34375-13823-48994-32413-55048-46379</b></dt>
+<dd><p>The sqlite_stat3.sample column holds the value of the left-most field of an index identified by sqlite_stat3.idx and sqlite_stat3.tbl.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-05723-45863-34375-13823-48994-32413-55048-46379'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-05723-45863-34375-13823-48994-32413-55048-46379'>detail</a>)</i></p></dd>
+
+<dt><b>R-05731-00924-21642-36920-42396-08100-00001-17293</b></dt>
+<dd><p>The table name must be unqualified for INSERT statements that occur within CREATE TRIGGER statements.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-05731-00924-21642-36920-42396-08100-00001-17293'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-05731-00924-21642-36920-42396-08100-00001-17293'>detail</a>)</i></p></dd>
+
+<dt><b>R-05734-13629-21302-48631-57775-63447-36504-30462</b></dt>
+<dd><p>If an INSERT statement attempts to insert a blob value, or a string or real value that cannot be losslessly converted to an integer into an integer primary key or rowid column, a "datatype mismatch" error occurs and the statement is aborted.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-05734-13629-21302-48631-57775-63447-36504-30462'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-05734-13629-21302-48631-57775-63447-36504-30462'>detail</a>)</i></p></dd>
+
+<dt><b>R-05791-54928-02769-08459-30778-25258-29853-24680</b></dt>
+<dd><p>Running VACUUM ensures that each table and index is largely stored contiguously within the database file.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-05791-54928-02769-08459-30778-25258-29853-24680'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-05791-54928-02769-08459-30778-25258-29853-24680'>detail</a>)</i></p></dd>
+
+<dt><b>R-05898-54598-22699-61791-29592-33550-33097-15159</b></dt>
+<dd><p>Otherwise, if the expression sorted by an ORDER BY clause is a column, then the collating sequence of the column is used to determine sort order.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_10.test, matrix: <a href='matrix/datatype3.html#R-05898-54598-22699-61791-29592-33550-33097-15159'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-05898-54598-22699-61791-29592-33550-33097-15159'>detail</a>)</i></p></dd>
+
+<dt><b>R-05903-08460-38037-43122-07089-54739-62474-34030</b></dt>
+<dd><p>If a deferred foreign key constraint is violated, then an error is reported when the user attempts to commit the transaction if the foreign key constraint violations still exist at that point.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys22.test, matrix: <a href='matrix/foreignkeys.html#R-05903-08460-38037-43122-07089-54739-62474-34030'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-05903-08460-38037-43122-07089-54739-62474-34030'>detail</a>)</i></p></dd>
+
+<dt><b>R-05906-34301-40279-37243-33018-07128-06632-24411</b></dt>
+<dd><p>In particular, if one wants to know all "children" of a particular purchase order "?1", the query would be: SELECT po_num FROM purchaseorder WHERE parent_po=?1;
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-05906-34301-40279-37243-33018-07128-06632-24411'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-05906-34301-40279-37243-33018-07128-06632-24411'>detail</a>)</i></p></dd>
+
+<dt><b>R-05912-10167-55658-18265-62443-52976-18281-50268</b></dt>
+<dd><p>The journal_size_limit pragma may be used to limit the size of rollback-journal and WAL files left in the file-system after transactions or checkpoints.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma26.test, matrix: <a href='matrix/pragma.html#R-05912-10167-55658-18265-62443-52976-18281-50268'>context</a>, <a href='matrix/matrix_dpragma.html#R-05912-10167-55658-18265-62443-52976-18281-50268'>detail</a>)</i></p></dd>
+
+<dt><b>R-05933-14338-14685-58376-15497-20309-09611-25931</b></dt>
+<dd><p>All of the examples create a WITHOUT ROWID table with two PRIMARY KEY columns, "a" and "c", in that order, followed by two data columns "b" and "d", also in that order.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-05933-14338-14685-58376-15497-20309-09611-25931'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-05933-14338-14685-58376-15497-20309-09611-25931'>detail</a>)</i></p></dd>
+
+<dt><b>R-05985-29284-11131-56196-04541-34001-38610-39560</b></dt>
+<dd><p>If the right operand of an IN or NOT IN operator is a list of values, each of those values must be scalars and the left expression must also be a scalar.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/cov1/rowvalue06.test, matrix: <a href='matrix/lang_expr.html#R-05985-29284-11131-56196-04541-34001-38610-39560'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-05985-29284-11131-56196-04541-34001-38610-39560'>detail</a>)</i></p></dd>
+
+<dt><b>R-06021-09373-60954-10709-09959-52253-36320-11394</b></dt>
+<dd><p>But extensions can override the match() function with more helpful logic.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-06021-09373-60954-10709-09959-52253-36320-11394'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-06021-09373-60954-10709-09959-52253-36320-11394'>detail</a>)</i></p></dd>
+
+<dt><b>R-06024-54164-19422-11836-49964-56179-07103-14892</b></dt>
+<dd><p>Two or more MATCH operators are allowed in the same WHERE clause, as long as they are connected by AND operators.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: th3/cov1/rtree04.test, matrix: <a href='matrix/rtree.html#R-06024-54164-19422-11836-49964-56179-07103-14892'>context</a>, <a href='matrix/matrix_drtree.html#R-06024-54164-19422-11836-49964-56179-07103-14892'>detail</a>)</i></p></dd>
+
+<dt><b>R-06028-16857-64547-18047-60085-29491-06944-27148</b></dt>
+<dd><p>Similarly, if the prefix integer is less than -9223372036854775808 then the result of the cast is exactly -9223372036854775808.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/cast.test, th3/cov1/cast01.test, matrix: <a href='matrix/lang_expr.html#R-06028-16857-64547-18047-60085-29491-06944-27148'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-06028-16857-64547-18047-60085-29491-06944-27148'>detail</a>)</i></p></dd>
+
+<dt><b>R-06033-51812-54641-21311-09702-50904-10745-36536</b></dt>
+<dd><p>This pragma invokes the sqlite3_hard_heap_limit64() interface with the argument N, if N is specified and N is a positive integer that is less than the current hard heap limit.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-06033-51812-54641-21311-09702-50904-10745-36536'>context</a>, <a href='matrix/matrix_dpragma.html#R-06033-51812-54641-21311-09702-50904-10745-36536'>detail</a>)</i></p></dd>
+
+<dt><b>R-06044-07843-41488-27430-15484-51013-09491-52143</b></dt>
+<dd><p>Each page record stores a copy of the content of a page from the database file before it was changed.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-06044-07843-41488-27430-15484-51013-09491-52143'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-06044-07843-41488-27430-15484-51013-09491-52143'>detail</a>)</i></p></dd>
+
+<dt><b>R-06085-13761-54522-48441-51146-08233-07521-56188</b></dt>
+<dd><p>Unless the table to which the trigger is attached is in the TEMP database, the table being updated by the trigger program must reside in the same database as it.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-06085-13761-54522-48441-51146-08233-07521-56188'>context</a>, <a href='matrix/matrix_dlang_update.html#R-06085-13761-54522-48441-51146-08233-07521-56188'>detail</a>)</i></p></dd>
+
+<dt><b>R-06094-55152-33533-26668-27298-05995-61599-07184</b></dt>
+<dd><p>Unbound parameters are interpreted as NULL.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-06094-55152-33533-26668-27298-05995-61599-07184'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-06094-55152-33533-26668-27298-05995-61599-07184'>detail</a>)</i></p></dd>
+
+<dt><b>R-06121-44139-52990-59264-15521-64976-48420-00452</b></dt>
+<dd><p>If X is NULL then length(X) is NULL.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-06121-44139-52990-59264-15521-64976-48420-00452'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-06121-44139-52990-59264-15521-64976-48420-00452'>detail</a>)</i></p></dd>
+
+<dt><b>R-06125-22327-52915-34188-45275-42271-34098-17754</b></dt>
+<dd><p>As well as SQLITE_OK and SQLITE_DONE, a call to sqlite3_backup_step() may return SQLITE_READONLY, SQLITE_NOMEM, SQLITE_BUSY, SQLITE_LOCKED, or an SQLITE_IOERR_XXX extended error code.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-06125-22327-52915-34188-45275-42271-34098-17754'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-06125-22327-52915-34188-45275-42271-34098-17754'>detail</a>)</i></p></dd>
+
+<dt><b>R-06154-44456-05106-65403-18746-31073-17094-53078</b></dt>
+<dd><p>The fifth argument, xCompare, is a pointer to the collating function.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-06154-44456-05106-65403-18746-31073-17094-53078'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-06154-44456-05106-65403-18746-31073-17094-53078'>detail</a>)</i></p></dd>
+
+<dt><b>R-06177-00576-54284-57124-19622-29934-36403-49341</b></dt>
+<dd><p>And R-Tree can appear to read and write at the same time in some circumstances, if it can figure out how to reliably run the query to completion before starting the update.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree22.test, matrix: <a href='matrix/rtree.html#R-06177-00576-54284-57124-19622-29934-36403-49341'>context</a>, <a href='matrix/matrix_drtree.html#R-06177-00576-54284-57124-19622-29934-36403-49341'>detail</a>)</i></p></dd>
+
+<dt><b>R-06184-64035-19129-41964-19001-40522-59120-29266</b></dt>
+<dd><p>The second pointer map page will be on page J+3 and that ptrmap page will provide back pointer information for pages J+4 through 2*J+3 inclusive.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-06184-64035-19129-41964-19001-40522-59120-29266'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-06184-64035-19129-41964-19001-40522-59120-29266'>detail</a>)</i></p></dd>
+
+<dt><b>R-06192-43187-09900-12561-05322-03139-09562-46958</b></dt>
+<dd><p>For the right-most column of an index that is used, there can be up to two inequalities that must sandwich the allowed values of the column between two extremes.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-06192-43187-09900-12561-05322-03139-09562-46958'>context</a>, <a href='matrix/matrix_doptoverview.html#R-06192-43187-09900-12561-05322-03139-09562-46958'>detail</a>)</i></p></dd>
+
+<dt><b>R-06211-52866-60944-51344-33653-00695-35099-44728</b></dt>
+<dd><p>A single WAL file can be reused multiple times.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-06211-52866-60944-51344-33653-00695-35099-44728'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-06211-52866-60944-51344-33653-00695-35099-44728'>detail</a>)</i></p></dd>
+
+<dt><b>R-06224-52418-62263-52571-38406-27585-18905-65018</b></dt>
+<dd><p>In an RTREE_I32 virtual table, all columns have type affinity of INTEGER.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree17.test, matrix: <a href='matrix/rtree.html#R-06224-52418-62263-52571-38406-27585-18905-65018'>context</a>, <a href='matrix/matrix_drtree.html#R-06224-52418-62263-52571-38406-27585-18905-65018'>detail</a>)</i></p></dd>
+
+<dt><b>R-06232-47523-18449-58509-42241-16299-63084-14288</b></dt>
+<dd><p>Datatype conversions in comparisons of the form "x IN (SELECT y ...)" are handled as if the comparison were really "x=y".
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-06232-47523-18449-58509-42241-16299-63084-14288'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-06232-47523-18449-58509-42241-16299-63084-14288'>detail</a>)</i></p></dd>
+
+<dt><b>R-06243-18128-07233-40060-03685-38189-10986-27525</b></dt>
+<dd><p>type: the type of object - one of "table", "view", "shadow" (for shadow tables), or "virtual" for virtual tables.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-06243-18128-07233-40060-03685-38189-10986-27525'>context</a>, <a href='matrix/matrix_dpragma.html#R-06243-18128-07233-40060-03685-38189-10986-27525'>detail</a>)</i></p></dd>
+
+<dt><b>R-06247-40710-32264-36174-63374-18082-50900-27234</b></dt>
+<dd><p>If the busy-handler returns non-zero before the lock is available, then SQLITE_BUSY is returned to the caller.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-06247-40710-32264-36174-63374-18082-50900-27234'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-06247-40710-32264-36174-63374-18082-50900-27234'>detail</a>)</i></p></dd>
+
+<dt><b>R-06268-22533-04308-14386-21741-11230-29946-31155</b></dt>
+<dd><p>The cache query parameter determines if the new database is opened using shared cache mode or with a private cache.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-06268-22533-04308-14386-21741-11230-29946-31155'>context</a>, <a href='matrix/matrix_duri.html#R-06268-22533-04308-14386-21741-11230-29946-31155'>detail</a>)</i></p></dd>
+
+<dt><b>R-06289-57229-11447-28178-35750-27104-36074-23089</b></dt>
+<dd><p>If the case_sensitive_like pragma is enabled as follows: PRAGMA case_sensitive_like=ON; Then the LIKE operator pays attention to case and the example above would evaluate to false.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-06289-57229-11447-28178-35750-27104-36074-23089'>context</a>, <a href='matrix/matrix_doptoverview.html#R-06289-57229-11447-28178-35750-27104-36074-23089'>detail</a>)</i></p></dd>
+
+<dt><b>R-06325-15315-47203-37013-07627-21557-12001-05874</b></dt>
+<dd><p>In this case, if both operands are NULL, then the IS operator evaluates to 1 (true) and the IS NOT operator evaluates to 0 (false).
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-06325-15315-47203-37013-07627-21557-12001-05874'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-06325-15315-47203-37013-07627-21557-12001-05874'>detail</a>)</i></p></dd>
+
+<dt><b>R-06367-56981-61813-52742-22421-22635-19629-30966</b></dt>
+<dd><p>There is a limit, set using sqlite3_limit() and SQLITE_LIMIT_ATTACHED, to the number of databases that can be simultaneously attached to a single database connection.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach01.test, matrix: <a href='matrix/lang_attach.html#R-06367-56981-61813-52742-22421-22635-19629-30966'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-06367-56981-61813-52742-22421-22635-19629-30966'>detail</a>)</i></p></dd>
+
+<dt><b>R-06396-00487-24665-04701-02670-39583-42617-54638</b></dt>
+<dd><p>The fourth parameter is an arbitrary client data pointer that is passed through into the xCreate and xConnect methods of the virtual table module when a new virtual table is be being created or reinitialized.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-06396-00487-24665-04701-02670-39583-42617-54638'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-06396-00487-24665-04701-02670-39583-42617-54638'>detail</a>)</i></p></dd>
+
+<dt><b>R-06471-16287-47744-18667-43209-46484-64489-20920</b></dt>
+<dd><p>If an INSERT or UPDATE statement attempts to modify the table content so that two or more rows have identical primary key values, that is a constraint violation.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-06471-16287-47744-18667-43209-46484-64489-20920'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-06471-16287-47744-18667-43209-46484-64489-20920'>detail</a>)</i></p></dd>
+
+<dt><b>R-06483-27112-61838-60600-31039-16842-06931-49767</b></dt>
+<dd><p>The xMutexEnd() interface is invoked exactly once for each call to sqlite3_shutdown().
+<i>(source: <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>, matrix: <a href='matrix/c3ref/mutex_methods.html#R-06483-27112-61838-60600-31039-16842-06931-49767'>context</a>, <a href='matrix/matrix_dmutex_methods.html#R-06483-27112-61838-60600-31039-16842-06931-49767'>detail</a>)</i></p></dd>
+
+<dt><b>R-06497-44374-00376-59592-23814-22462-41106-13473</b></dt>
+<dd><p>The strftime() routine returns the date formatted according to the format string specified as the first argument.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-06497-44374-00376-59592-23814-22462-41106-13473'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-06497-44374-00376-59592-23814-22462-41106-13473'>detail</a>)</i></p></dd>
+
+<dt><b>R-06511-19994-39421-53412-16339-26783-08670-41596</b></dt>
+<dd><p>sqlite> CREATE INDEX i3 ON t1(b); sqlite> EXPLAIN QUERY PLAN SELECT * FROM t1 WHERE a=1 OR b=2; QUERY PLAN `--MULTI-INDEX OR |--SEARCH t1 USING COVERING INDEX i2 (a=?) `--SEARCH t1 USING INDEX i3 (b=?)
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-06511-19994-39421-53412-16339-26783-08670-41596'>context</a>, <a href='matrix/matrix_deqp.html#R-06511-19994-39421-53412-16339-26783-08670-41596'>detail</a>)</i></p></dd>
+
+<dt><b>R-06512-29821-53944-15543-64170-28154-18681-19827</b></dt>
+<dd><p>If V is a pointer value, then the result of sqlite3_value_dup(V) is a NULL value.
+<i>(source: <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>, matrix: <a href='matrix/c3ref/value_dup.html#R-06512-29821-53944-15543-64170-28154-18681-19827'>context</a>, <a href='matrix/matrix_dvalue_dup.html#R-06512-29821-53944-15543-64170-28154-18681-19827'>detail</a>)</i></p></dd>
+
+<dt><b>R-06521-54703-61418-20766-12795-30140-09114-51879</b></dt>
+<dd><p>Each entry in the ex25acde index consists of only the columns a, c, d, and e, in that order.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat04.test, matrix: <a href='matrix/fileformat2.html#R-06521-54703-61418-20766-12795-30140-09114-51879'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-06521-54703-61418-20766-12795-30140-09114-51879'>detail</a>)</i></p></dd>
+
+<dt><b>R-06526-21822-44146-52005-29553-25229-08273-20735</b></dt>
+<dd><p>If the result is a numeric value then sqlite3_column_bytes() uses sqlite3_snprintf() to convert that value to a UTF-8 string and returns the number of bytes in that string.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-06526-21822-44146-52005-29553-25229-08273-20735'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-06526-21822-44146-52005-29553-25229-08273-20735'>detail</a>)</i></p></dd>
+
+<dt><b>R-06529-47362-28298-49876-57281-01728-38007-39876</b></dt>
+<dd><p>Following the size varint are one or more additional varints, one per column.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbe.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-06529-47362-28298-49876-57281-01728-38007-39876'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-06529-47362-28298-49876-57281-01728-38007-39876'>detail</a>)</i></p></dd>
+
+<dt><b>R-06603-49335-45148-37548-51354-29602-47904-63601</b></dt>
+<dd><p>The rank of the column within the table being indexed, or -1 if the index-column is the rowid of the table being indexed and -2 if the index is on an expression.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15x.test, matrix: <a href='matrix/pragma.html#R-06603-49335-45148-37548-51354-29602-47904-63601'>context</a>, <a href='matrix/matrix_dpragma.html#R-06603-49335-45148-37548-51354-29602-47904-63601'>detail</a>)</i></p></dd>
+
+<dt><b>R-06617-54588-52951-29775-47412-02155-55122-34673</b></dt>
+<dd><p>Each ORDER BY expression may be optionally followed by one of the keywords ASC (smaller values are returned first) or DESC (larger values are returned first).
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-06617-54588-52951-29775-47412-02155-55122-34673'>context</a>, <a href='matrix/matrix_dlang_select.html#R-06617-54588-52951-29775-47412-02155-55122-34673'>detail</a>)</i></p></dd>
+
+<dt><b>R-06626-12911-45896-07127-03501-58228-62690-15323</b></dt>
+<dd><p>The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled with either SQLITE_ENABLE_MEMSYS3 or SQLITE_ENABLE_MEMSYS5 and returns SQLITE_ERROR if invoked otherwise.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3oom.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-06626-12911-45896-07127-03501-58228-62690-15323'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-06626-12911-45896-07127-03501-58228-62690-15323'>detail</a>)</i></p></dd>
+
+<dt><b>R-06630-59185-25894-35312-55008-29354-15372-24847</b></dt>
+<dd><p>Each modifier is a transformation that is applied to the time value to its left.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-06630-59185-25894-35312-55008-29354-15372-24847'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-06630-59185-25894-35312-55008-29354-15372-24847'>detail</a>)</i></p></dd>
+
+<dt><b>R-06640-03838-35138-60782-53418-54966-60899-05980</b></dt>
+<dd><p>The sqlite3_snapshot_open() interface returns SQLITE_OK on success or an appropriate error code if it fails.
+<i>(source: <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>, matrix: <a href='matrix/c3ref/snapshot_open.html#R-06640-03838-35138-60782-53418-54966-60899-05980'>context</a>, <a href='matrix/matrix_dsnapshot_open.html#R-06640-03838-35138-60782-53418-54966-60899-05980'>detail</a>)</i></p></dd>
+
+<dt><b>R-06681-36915-07445-41328-35159-18817-58464-46967</b></dt>
+<dd><p>The largest Fibonacci weight occurs on the first element of the sequence being summed.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-06681-36915-07445-41328-35159-18817-58464-46967'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-06681-36915-07445-41328-35159-18817-58464-46967'>detail</a>)</i></p></dd>
+
+<dt><b>R-06690-32088-38683-38277-10943-03715-22041-42931</b></dt>
+<dd><p>The sqlite3_value_free(V) interface frees an sqlite3_value object previously obtained from sqlite3_value_dup().
+<i>(source: <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>, matrix: <a href='matrix/c3ref/value_dup.html#R-06690-32088-38683-38277-10943-03715-22041-42931'>context</a>, <a href='matrix/matrix_dvalue_dup.html#R-06690-32088-38683-38277-10943-03715-22041-42931'>detail</a>)</i></p></dd>
+
+<dt><b>R-06710-22511-57136-17945-50070-33110-36192-14395</b></dt>
+<dd><p>When case_sensitive_like is disabled, the default LIKE behavior is expressed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma10.test, matrix: <a href='matrix/pragma.html#R-06710-22511-57136-17945-50070-33110-36192-14395'>context</a>, <a href='matrix/matrix_dpragma.html#R-06710-22511-57136-17945-50070-33110-36192-14395'>detail</a>)</i></p></dd>
+
+<dt><b>R-06711-65327-14932-40385-35570-36295-04830-18729</b></dt>
+<dd><p>If there are subqueries in the RETURNING clause, those subqueries may contain aggregates and window functions, but aggregates cannot occur at the top level.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-06711-65327-14932-40385-35570-36295-04830-18729'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-06711-65327-14932-40385-35570-36295-04830-18729'>detail</a>)</i></p></dd>
+
+<dt><b>R-06718-34797-20809-29800-16443-15807-57069-06143</b></dt>
+<dd><p>If the UNIQUE keyword appears between CREATE and INDEX then duplicate index entries are not allowed.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx01.test, matrix: <a href='matrix/lang_createindex.html#R-06718-34797-20809-29800-16443-15807-57069-06143'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-06718-34797-20809-29800-16443-15807-57069-06143'>detail</a>)</i></p></dd>
+
+<dt><b>R-06726-07466-50674-60893-18596-18216-57915-63107</b></dt>
+<dd><p>A column name can be any of the names defined in the CREATE TABLE statement or one of the following special identifiers: "ROWID", "OID", or "_ROWID_".
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_expr.html#R-06726-07466-50674-60893-18596-18216-57915-63107'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-06726-07466-50674-60893-18596-18216-57915-63107'>detail</a>)</i></p></dd>
+
+<dt><b>R-06730-09692-37737-40278-41150-46947-53359-48437</b></dt>
+<dd><p>Note that the unary + operator also removes type affinity from an expression, and in some cases this can cause subtle changes in the meaning of an expression.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-06730-09692-37737-40278-41150-46947-53359-48437'>context</a>, <a href='matrix/matrix_doptoverview.html#R-06730-09692-37737-40278-41150-46947-53359-48437'>detail</a>)</i></p></dd>
+
+<dt><b>R-06730-45014-00107-46861-15784-38161-55624-19541</b></dt>
+<dd><p>If the argument N is negative then no change is made to the heap limit.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, checked-by: th3/req1/softheaplimit01.test, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-06730-45014-00107-46861-15784-38161-55624-19541'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-06730-45014-00107-46861-15784-38161-55624-19541'>detail</a>)</i></p></dd>
+
+<dt><b>R-06824-28531-04860-08794-38432-46623-19840-41642</b></dt>
+<dd><p>This option is used to change the name of the "main" database schema.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: src/main.c, th3/cov1/maindbname01.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-06824-28531-04860-08794-38432-46623-19840-41642'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-06824-28531-04860-08794-38432-46623-19840-41642'>detail</a>)</i></p></dd>
+
+<dt><b>R-06827-27714-37662-62265-13123-35942-36667-57305</b></dt>
+<dd><p>These routines provide a means to determine the database, table, and table column that is the origin of a particular result column in SELECT statement.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-06827-27714-37662-62265-13123-35942-36667-57305'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-06827-27714-37662-62265-13123-35942-36667-57305'>detail</a>)</i></p></dd>
+
+<dt><b>R-06842-00595-27459-11943-09880-13369-18922-07215</b></dt>
+<dd><p>If the URI contains an authority, then it must be either an empty string or the string "localhost".
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-06842-00595-27459-11943-09880-13369-18922-07215'>context</a>, <a href='matrix/matrix_dopen.html#R-06842-00595-27459-11943-09880-13369-18922-07215'>detail</a>)</i></p></dd>
+
+<dt><b>R-06866-39125-55055-41490-42674-60526-11809-05930</b></dt>
+<dd><p>Freeblocks are always connected in order of increasing offset.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-06866-39125-55055-41490-42674-60526-11809-05930'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-06866-39125-55055-41490-42674-60526-11809-05930'>detail</a>)</i></p></dd>
+
+<dt><b>R-06868-44093-33901-50180-63066-19596-24201-39627</b></dt>
+<dd><p>The collating sequence used for expressions of the form "x IN (y, z, ...)" is the collating sequence of x.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_10.test, matrix: <a href='matrix/datatype3.html#R-06868-44093-33901-50180-63066-19596-24201-39627'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-06868-44093-33901-50180-63066-19596-24201-39627'>detail</a>)</i></p></dd>
+
+<dt><b>R-06893-30579-58161-11067-55212-01528-39309-12280</b></dt>
+<dd><p>In an RTREE virtual table, the first column always has a type affinity of INTEGER and all other data columns have a type affinity of REAL.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree17.test, matrix: <a href='matrix/rtree.html#R-06893-30579-58161-11067-55212-01528-39309-12280'>context</a>, <a href='matrix/matrix_drtree.html#R-06893-30579-58161-11067-55212-01528-39309-12280'>detail</a>)</i></p></dd>
+
+<dt><b>R-06920-11647-57198-53546-22558-52613-40073-20013</b></dt>
+<dd><p>If the function is registered using the sqlite3_collation_needed() API, then it is passed the names of undefined collation sequences as strings encoded in UTF-8.
+<i>(source: <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>, matrix: <a href='matrix/c3ref/collation_needed.html#R-06920-11647-57198-53546-22558-52613-40073-20013'>context</a>, <a href='matrix/matrix_dcollation_needed.html#R-06920-11647-57198-53546-22558-52613-40073-20013'>detail</a>)</i></p></dd>
+
+<dt><b>R-06962-29571-53557-56869-59611-31379-35849-49272</b></dt>
+<dd><p>The module-name must be registered with the SQLite database connection using sqlite3_create_module() or sqlite3_create_module_v2() prior to issuing the CREATE VIRTUAL TABLE statement.
+<i>(source: <a href="lang_createvtab.html">lang_createvtab.html</a>, matrix: <a href='matrix/lang_createvtab.html#R-06962-29571-53557-56869-59611-31379-35849-49272'>context</a>, <a href='matrix/matrix_dlang_createvtab.html#R-06962-29571-53557-56869-59611-31379-35849-49272'>detail</a>)</i></p></dd>
+
+<dt><b>R-07016-26442-22994-35571-41506-56753-23987-59797</b></dt>
+<dd><p>Each of the named columns of the new row is populated with the results of evaluating the corresponding VALUES expression.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-07016-26442-22994-35571-41506-56753-23987-59797'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-07016-26442-22994-35571-41506-56753-23987-59797'>detail</a>)</i></p></dd>
+
+<dt><b>R-07046-65439-53781-18565-05582-11236-16234-65526</b></dt>
+<dd><p>Any of these arguments may be NULL, in which case the corresponding element of metadata is omitted.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-07046-65439-53781-18565-05582-11236-16234-65526'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-07046-65439-53781-18565-05582-11236-16234-65526'>detail</a>)</i></p></dd>
+
+<dt><b>R-07051-38416-38857-52812-51917-08930-07930-15860</b></dt>
+<dd><p>If the declared type contains the string "INT" then it is assigned INTEGER affinity.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-07051-38416-38857-52812-51917-08930-07930-15860'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-07051-38416-38857-52812-51917-08930-07930-15860'>detail</a>)</i></p></dd>
+
+<dt><b>R-07061-20551-45555-61970-58663-33619-01553-07889</b></dt>
+<dd><p>If the source database is modified by an external process or via a database connection other than the one being used by the backup operation, then the backup will be automatically restarted by the next call to sqlite3_backup_step().
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-07061-20551-45555-61970-58663-33619-01553-07889'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-07061-20551-45555-61970-58663-33619-01553-07889'>detail</a>)</i></p></dd>
+
+<dt><b>R-07061-54920-02690-34802-26523-14617-41412-12725</b></dt>
+<dd><p>To overcome this problem, SQLite attempts to flatten subqueries in the FROM clause of a SELECT.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-07061-54920-02690-34802-26523-14617-41412-12725'>context</a>, <a href='matrix/matrix_doptoverview.html#R-07061-54920-02690-34802-26523-14617-41412-12725'>detail</a>)</i></p></dd>
+
+<dt><b>R-07100-06606-15404-00202-26903-38022-07639-13720</b></dt>
+<dd><p>A single quote within the string can be encoded by putting two single quotes in a row - as in Pascal.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-07100-06606-15404-00202-26903-38022-07639-13720'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-07100-06606-15404-00202-26903-38022-07639-13720'>detail</a>)</i></p></dd>
+
+<dt><b>R-07154-34181-57164-55597-27085-41955-25905-44172</b></dt>
+<dd><p>The table might look something like this: CREATE TABLE person( person_id INTEGER PRIMARY KEY, team_id INTEGER REFERENCES team, is_team_leader BOOLEAN, -- other fields elided );
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-07154-34181-57164-55597-27085-41955-25905-44172'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-07154-34181-57164-55597-27085-41955-25905-44172'>detail</a>)</i></p></dd>
+
+<dt><b>R-07161-27322-25839-32043-58017-64022-31100-22152</b></dt>
+<dd><p>The one-byte integer at offset 7 gives the number of fragmented free bytes within the cell content area.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-07161-27322-25839-32043-58017-64022-31100-22152'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-07161-27322-25839-32043-58017-64022-31100-22152'>detail</a>)</i></p></dd>
+
+<dt><b>R-07178-42569-23822-25165-44123-64804-39149-01193</b></dt>
+<dd><p>The first time the database is read in EXCLUSIVE mode, a shared lock is obtained and held.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-07178-42569-23822-25165-44123-64804-39149-01193'>context</a>, <a href='matrix/matrix_dpragma.html#R-07178-42569-23822-25165-44123-64804-39149-01193'>detail</a>)</i></p></dd>
+
+<dt><b>R-07194-63805-34087-03143-36787-50993-50249-34192</b></dt>
+<dd><p>If the node has more children then it is returned to the priority queue. Otherwise it is discarded.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc3.test, matrix: <a href='matrix/rtree.html#R-07194-63805-34087-03143-36787-50993-50249-34192'>context</a>, <a href='matrix/matrix_drtree.html#R-07194-63805-34087-03143-36787-50993-50249-34192'>detail</a>)</i></p></dd>
+
+<dt><b>R-07218-15811-34586-61584-11375-61122-40476-23928</b></dt>
+<dd><p>The "sqlite_autoindex_TABLE_N" name is never allocated for an INTEGER PRIMARY KEY, either in rowid tables or WITHOUT ROWID tables.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-07218-15811-34586-61584-11375-61122-40476-23928'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-07218-15811-34586-61584-11375-61122-40476-23928'>detail</a>)</i></p></dd>
+
+<dt><b>R-07223-48323-28604-04641-30689-62184-47326-29698</b></dt>
+<dd><p>A nested savepoint transaction may be RELEASEd while the database is in a state that does not satisfy a deferred foreign key constraint.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys15.test, matrix: <a href='matrix/foreignkeys.html#R-07223-48323-28604-04641-30689-62184-47326-29698'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-07223-48323-28604-04641-30689-62184-47326-29698'>detail</a>)</i></p></dd>
+
+<dt><b>R-07232-03261-48010-41283-49496-35316-10713-33982</b></dt>
+<dd><p>The sqlite_schema.rootpage column stores the page number of the root b-tree page for tables and indexes.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-07232-03261-48010-41283-49496-35316-10713-33982'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-07232-03261-48010-41283-49496-35316-10713-33982'>detail</a>)</i></p></dd>
+
+<dt><b>R-07272-22309-27541-26278-30152-44282-17867-64207</b></dt>
+<dd><p>The default behavior is for mutexes to be enabled.
+<i>(source: <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a>, checked-by: src/sqliteInt.h, matrix: <a href='matrix/c3ref/threadsafe.html#R-07272-22309-27541-26278-30152-44282-17867-64207'>context</a>, <a href='matrix/matrix_dthreadsafe.html#R-07272-22309-27541-26278-30152-44282-17867-64207'>detail</a>)</i></p></dd>
+
+<dt><b>R-07280-60510-42023-64617-40990-52816-04160-12840</b></dt>
+<dd><p>Assuming the library is compiled with foreign key constraints enabled, it must still be enabled by the application at runtime, using the PRAGMA foreign_keys command.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys04.test, matrix: <a href='matrix/foreignkeys.html#R-07280-60510-42023-64617-40990-52816-04160-12840'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-07280-60510-42023-64617-40990-52816-04160-12840'>detail</a>)</i></p></dd>
+
+<dt><b>R-07289-49223-41401-05780-36220-42267-14468-32307</b></dt>
+<dd><p>For numeric values outside of the range of valid julian day numbers, but within the range of -210866760000 to 253402300799, the 'auto' modifier causes the value to be interpreted as a unix timestamp.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, matrix: <a href='matrix/lang_datefunc.html#R-07289-49223-41401-05780-36220-42267-14468-32307'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-07289-49223-41401-05780-36220-42267-14468-32307'>detail</a>)</i></p></dd>
+
+<dt><b>R-07291-35328-43800-36980-63575-06657-13005-40237</b></dt>
+<dd><p>A value of 5 (0x05) means the page is an interior table b-tree page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-07291-35328-43800-36980-63575-06657-13005-40237'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-07291-35328-43800-36980-63575-06657-13005-40237'>detail</a>)</i></p></dd>
+
+<dt><b>R-07327-11967-60382-46381-13455-42235-00328-15671</b></dt>
+<dd><p>The expression "CAST(4.0 AS INT)" returns an integer 4, whereas "CAST(4.0 AS NUMERIC)" leaves the value as a floating-point 4.0.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-07327-11967-60382-46381-13455-42235-00328-15671'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-07327-11967-60382-46381-13455-42235-00328-15671'>detail</a>)</i></p></dd>
+
+<dt><b>R-07343-35026-05102-53943-15495-27224-50604-38447</b></dt>
+<dd><p>An explicit DEFAULT clause may specify that the default value is NULL, a string constant, a blob constant, a signed-number, or any constant expression enclosed in parentheses. A default value may also be one of the special case-independent keywords CURRENT_TIME, CURRENT_DATE or CURRENT_TIMESTAMP.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-07343-35026-05102-53943-15495-27224-50604-38447'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-07343-35026-05102-53943-15495-27224-50604-38447'>detail</a>)</i></p></dd>
+
+<dt><b>R-07351-00257-44890-08238-20091-47969-07482-23238</b></dt>
+<dd><p>For example, to find all zipcode bounding boxes that overlap with the 28269 zipcode: SELECT A.id FROM demo_index AS A, demo_index AS B WHERE A.maxX>=B.minX AND A.minX<=B.maxX AND A.maxY>=B.minY AND A.minY<=B.maxY AND B.id=28269;
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-07351-00257-44890-08238-20091-47969-07482-23238'>context</a>, <a href='matrix/matrix_drtree.html#R-07351-00257-44890-08238-20091-47969-07482-23238'>detail</a>)</i></p></dd>
+
+<dt><b>R-07358-23974-16513-21105-25104-49768-42018-55781</b></dt>
+<dd><p>The hard_heap_limit pragma always returns the same integer that would be returned by the sqlite3_hard_heap_limit64(-1) C-language function.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-07358-23974-16513-21105-25104-49768-42018-55781'>context</a>, <a href='matrix/matrix_dpragma.html#R-07358-23974-16513-21105-25104-49768-42018-55781'>detail</a>)</i></p></dd>
+
+<dt><b>R-07373-26855-08191-07958-60277-35412-28383-64233</b></dt>
+<dd><p>The SQLITE_FCNTL_VFSNAME opcode can be used to obtain the names of all VFSes in the VFS stack.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-07373-26855-08191-07958-60277-35412-28383-64233'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-07373-26855-08191-07958-60277-35412-28383-64233'>detail</a>)</i></p></dd>
+
+<dt><b>R-07387-29430-25270-46585-59144-29340-25578-53451</b></dt>
+<dd><p>The three special identifiers describe the unique integer key (the rowid) associated with every row of every table and so are not available on WITHOUT ROWID tables.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr02.test, matrix: <a href='matrix/lang_expr.html#R-07387-29430-25270-46585-59144-29340-25578-53451'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-07387-29430-25270-46585-59144-29340-25578-53451'>detail</a>)</i></p></dd>
+
+<dt><b>R-07391-62365-50484-20583-23156-31411-22306-43291</b></dt>
+<dd><p>If the result is NULL, then sqlite3_column_bytes() returns zero.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-07391-62365-50484-20583-23156-31411-22306-43291'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-07391-62365-50484-20583-23156-31411-22306-43291'>detail</a>)</i></p></dd>
+
+<dt><b>R-07424-59356-59026-59612-16232-30704-13795-42518</b></dt>
+<dd><p>OR
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-07424-59356-59026-59612-16232-30704-13795-42518'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-07424-59356-59026-59612-16232-30704-13795-42518'>detail</a>)</i></p></dd>
+
+<dt><b>R-07434-39946-64395-56249-16923-20954-34684-05720</b></dt>
+<dd><p>The RELEASE command is like a COMMIT for a SAVEPOINT.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-07434-39946-64395-56249-16923-20954-34684-05720'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-07434-39946-64395-56249-16923-20954-34684-05720'>detail</a>)</i></p></dd>
+
+<dt><b>R-07443-03104-25430-52440-15603-28211-53431-58552</b></dt>
+<dd><p>Shared cache is disabled by default.
+<i>(source: <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>, matrix: <a href='matrix/c3ref/enable_shared_cache.html#R-07443-03104-25430-52440-15603-28211-53431-58552'>context</a>, <a href='matrix/matrix_denable_shared_cache.html#R-07443-03104-25430-52440-15603-28211-53431-58552'>detail</a>)</i></p></dd>
+
+<dt><b>R-07444-33850-51822-16540-61383-01460-32210-48440</b></dt>
+<dd><p>Whitespace and comments that follow the final semicolon are ignored.
+<i>(source: <a href="c3ref/complete.html">c3ref/complete.html</a>, checked-by: th3/cov1/complete01.test, matrix: <a href='matrix/c3ref/complete.html#R-07444-33850-51822-16540-61383-01460-32210-48440'>context</a>, <a href='matrix/matrix_dcomplete.html#R-07444-33850-51822-16540-61383-01460-32210-48440'>detail</a>)</i></p></dd>
+
+<dt><b>R-07454-30568-63832-24254-44508-63507-10248-49928</b></dt>
+<dd><p>If a schema name is given as the argument, then all tables and indices in that one database are analyzed.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-07454-30568-63832-24254-44508-63507-10248-49928'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-07454-30568-63832-24254-44508-63507-10248-49928'>detail</a>)</i></p></dd>
+
+<dt><b>R-07474-04783-61557-15842-18544-20982-63471-50658</b></dt>
+<dd><p>Transaction control statements such as BEGIN, COMMIT, ROLLBACK, SAVEPOINT, and RELEASE cause sqlite3_stmt_readonly() to return true, since the statements themselves do not actually modify the database but rather they control the timing of when other statements modify the database.
+<i>(source: <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>, checked-by: tcl/capi3d.test, th3/cov1/vdbeapi14.test, matrix: <a href='matrix/c3ref/stmt_readonly.html#R-07474-04783-61557-15842-18544-20982-63471-50658'>context</a>, <a href='matrix/matrix_dstmt_readonly.html#R-07474-04783-61557-15842-18544-20982-63471-50658'>detail</a>)</i></p></dd>
+
+<dt><b>R-07489-10051-36321-14153-64085-37809-17765-53517</b></dt>
+<dd><p>The "%" in the name of each shadow table is replaced by the name of the R*Tree virtual table. So, if the name of the R*Tree table is "xyz" then the three shadow tables would be "xyz_node", "xyz_parent", and "xyz_rowid".
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq02.test, matrix: <a href='matrix/rtree.html#R-07489-10051-36321-14153-64085-37809-17765-53517'>context</a>, <a href='matrix/matrix_drtree.html#R-07489-10051-36321-14153-64085-37809-17765-53517'>detail</a>)</i></p></dd>
+
+<dt><b>R-07490-32536-65444-08514-64358-21801-57919-13418</b></dt>
+<dd><p>If the specified view cannot be found and an IF EXISTS clause is present in the DROP VIEW statement, then the statement is a no-op.
+<i>(source: <a href="lang_dropview.html">lang_dropview.html</a>, checked-by: tcl/e_dropview.test, th3/cov1/build13.test, matrix: <a href='matrix/lang_dropview.html#R-07490-32536-65444-08514-64358-21801-57919-13418'>context</a>, <a href='matrix/matrix_dlang_dropview.html#R-07490-32536-65444-08514-64358-21801-57919-13418'>detail</a>)</i></p></dd>
+
+<dt><b>R-07548-06087-12762-53515-32578-33672-61878-36013</b></dt>
+<dd><p>These routines return the name assigned to a particular column in the result set of a SELECT statement.
+<i>(source: <a href="c3ref/column_name.html">c3ref/column_name.html</a>, matrix: <a href='matrix/c3ref/column_name.html#R-07548-06087-12762-53515-32578-33672-61878-36013'>context</a>, <a href='matrix/matrix_dcolumn_name.html#R-07548-06087-12762-53515-32578-33672-61878-36013'>detail</a>)</i></p></dd>
+
+<dt><b>R-07548-13422-51816-60728-36638-61915-61462-20502</b></dt>
+<dd><p>The ORDER BY clause on a DELETE statement is used only to determine which rows fall within the LIMIT. The order in which rows are deleted is arbitrary and is not influenced by the ORDER BY clause.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-07548-13422-51816-60728-36638-61915-61462-20502'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-07548-13422-51816-60728-36638-61915-61462-20502'>detail</a>)</i></p></dd>
+
+<dt><b>R-07634-40532-31370-54179-45276-35620-20661-11259</b></dt>
+<dd><p>The cache_spill pragma enables or disables the ability of the pager to spill dirty cache pages to the database file in the middle of a transaction.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma2.test, matrix: <a href='matrix/pragma.html#R-07634-40532-31370-54179-45276-35620-20661-11259'>context</a>, <a href='matrix/matrix_dpragma.html#R-07634-40532-31370-54179-45276-35620-20661-11259'>detail</a>)</i></p></dd>
+
+<dt><b>R-07667-49537-57124-54989-59227-41131-33160-03537</b></dt>
+<dd><p>The result of the CASE expression is the evaluation of the THEN expression that corresponds to the first WHEN expression for which the comparison is true.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-07667-49537-57124-54989-59227-41131-33160-03537'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-07667-49537-57124-54989-59227-41131-33160-03537'>detail</a>)</i></p></dd>
+
+<dt><b>R-07677-41881-40135-26272-16926-18163-28954-03069</b></dt>
+<dd><p>If the largest ROWID is equal to the largest possible integer (9223372036854775807) then the database engine starts picking positive candidate ROWIDs at random until it finds one that is not previously used.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: src/vdbe.c, th3/cov1/vdbe23.test, th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-07677-41881-40135-26272-16926-18163-28954-03069'>context</a>, <a href='matrix/matrix_dautoinc.html#R-07677-41881-40135-26272-16926-18163-28954-03069'>detail</a>)</i></p></dd>
+
+<dt><b>R-07677-44926-50918-49822-13370-30168-54851-13094</b></dt>
+<dd><p>The format for CURRENT_TIMESTAMP is "YYYY-MM-DD HH:MM:SS".
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-07677-44926-50918-49822-13370-30168-54851-13094'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-07677-44926-50918-49822-13370-30168-54851-13094'>detail</a>)</i></p></dd>
+
+<dt><b>R-07686-30751-51285-58561-12727-05752-40900-44621</b></dt>
+<dd><p>Hence, the content encoding for a WITHOUT ROWID table is the same as the content encoding for an ordinary rowid table, except that the order of the columns is rearranged so that PRIMARY KEY columns come first, and the content is used as the key in an index b-tree rather than as the data in a table b-tree.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-07686-30751-51285-58561-12727-05752-40900-44621'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-07686-30751-51285-58561-12727-05752-40900-44621'>detail</a>)</i></p></dd>
+
+<dt><b>R-07727-56631-19058-51033-37798-11219-19213-34496</b></dt>
+<dd><p>Instead of cancelling the transaction, the ROLLBACK TO command restarts the transaction again at the beginning.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-07727-56631-19058-51033-37798-11219-19213-34496'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-07727-56631-19058-51033-37798-11219-19213-34496'>detail</a>)</i></p></dd>
+
+<dt><b>R-07734-01023-35400-33877-62605-53392-63637-26399</b></dt>
+<dd><p>The result of total() is always a floating point value.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-07734-01023-35400-33877-62605-53392-63637-26399'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-07734-01023-35400-33877-62605-53392-63637-26399'>detail</a>)</i></p></dd>
+
+<dt><b>R-07796-55423-52523-43504-40552-37000-09933-05670</b></dt>
+<dd><p>Returns the size in bytes of the BLOB accessible via the successfully opened BLOB handle in its only argument.
+<i>(source: <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a>, checked-by: tcl/e_blobbytes.test, th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_bytes.html#R-07796-55423-52523-43504-40552-37000-09933-05670'>context</a>, <a href='matrix/matrix_dblob_bytes.html#R-07796-55423-52523-43504-40552-37000-09933-05670'>detail</a>)</i></p></dd>
+
+<dt><b>R-07801-24468-36344-27295-15963-50909-61997-55720</b></dt>
+<dd><p>SQLITE_LIMIT_COMPOUND_SELECT The maximum number of terms in a compound SELECT statement.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: th3/req1/limit02.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-07801-24468-36344-27295-15963-50909-61997-55720'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-07801-24468-36344-27295-15963-50909-61997-55720'>detail</a>)</i></p></dd>
+
+<dt><b>R-07848-59274-08583-36446-01674-55219-01938-38331</b></dt>
+<dd><p>The requested measurement is written into a variable pointed to by the "pOut" parameter.
+<i>(source: <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a>, checked-by: th3/cov1/status02.test, matrix: <a href='matrix/c3ref/stmt_scanstatus.html#R-07848-59274-08583-36446-01674-55219-01938-38331'>context</a>, <a href='matrix/matrix_dstmt_scanstatus.html#R-07848-59274-08583-36446-01674-55219-01938-38331'>detail</a>)</i></p></dd>
+
+<dt><b>R-07865-58192-09859-42993-29277-46278-59857-06081</b></dt>
+<dd><p>The 4-byte big-endian integer at offset 92 is the value of the change counter when the version number was stored.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-07865-58192-09859-42993-29277-46278-59857-06081'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-07865-58192-09859-42993-29277-46278-59857-06081'>detail</a>)</i></p></dd>
+
+<dt><b>R-07866-07572-04759-27245-06319-59551-46387-52672</b></dt>
+<dd><p>The temp_store_directory pragma may modify this variable and cause it to point to memory obtained from sqlite3_malloc.
+<i>(source: <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>, matrix: <a href='matrix/c3ref/temp_directory.html#R-07866-07572-04759-27245-06319-59551-46387-52672'>context</a>, <a href='matrix/matrix_dtemp_directory.html#R-07866-07572-04759-27245-06319-59551-46387-52672'>detail</a>)</i></p></dd>
+
+<dt><b>R-07877-15664-12195-18101-28261-58397-21882-37632</b></dt>
+<dd><p><&nbsp;&nbsp;>&nbsp;&nbsp;<=&nbsp;&nbsp;>=
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-07877-15664-12195-18101-28261-58397-21882-37632'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-07877-15664-12195-18101-28261-58397-21882-37632'>detail</a>)</i></p></dd>
+
+<dt><b>R-07896-01909-17755-58747-61497-14681-53331-52466</b></dt>
+<dd><p>Mutexes created using SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread. In such cases, the mutex must be exited an equal number of times before another thread can enter.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-07896-01909-17755-58747-61497-14681-53331-52466'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-07896-01909-17755-58747-61497-14681-53331-52466'>detail</a>)</i></p></dd>
+
+<dt><b>R-07963-00293-13635-32107-53901-52250-25105-19603</b></dt>
+<dd><p>A function implementation with a non-negative nArg parameter is a better match than a function implementation with a negative nArg.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc04.test, matrix: <a href='matrix/c3ref/create_function.html#R-07963-00293-13635-32107-53901-52250-25105-19603'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-07963-00293-13635-32107-53901-52250-25105-19603'>detail</a>)</i></p></dd>
+
+<dt><b>R-07986-46024-43778-44003-14770-46888-01136-33565</b></dt>
+<dd><p>If an INSERT statement attempts to insert a NULL value into a rowid or integer primary key column, the system chooses an integer value to use as the rowid automatically.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-07986-46024-43778-44003-14770-46888-01136-33565'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-07986-46024-43778-44003-14770-46888-01136-33565'>detail</a>)</i></p></dd>
+
+<dt><b>R-07987-54086-28782-61595-63457-13975-41237-46869</b></dt>
+<dd><p>If the result is a UTF-16 string, then sqlite3_column_bytes() converts the string to UTF-8 and then returns the number of bytes.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-07987-54086-28782-61595-63457-13975-41237-46869'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-07987-54086-28782-61595-63457-13975-41237-46869'>detail</a>)</i></p></dd>
+
+<dt><b>R-08010-38213-31343-08677-03914-40178-13530-16840</b></dt>
+<dd><p>If the sqlite3_vtab_distinct() interface returns 1, that means that the query planner does not need the rows to be returned in sorted order as long as all rows with the same values in all columns identified by the "aOrderBy" field are adjacent.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-08010-38213-31343-08677-03914-40178-13530-16840'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-08010-38213-31343-08677-03914-40178-13530-16840'>detail</a>)</i></p></dd>
+
+<dt><b>R-08013-37737-04179-14029-08100-20980-22992-19882</b></dt>
+<dd><p>The application can also use a PRAGMA foreign_keys statement to determine if foreign keys are currently enabled.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys04.test, matrix: <a href='matrix/foreignkeys.html#R-08013-37737-04179-14029-08100-20980-22992-19882'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-08013-37737-04179-14029-08100-20980-22992-19882'>detail</a>)</i></p></dd>
+
+<dt><b>R-08023-12605-32642-43845-16740-17726-48491-51878</b></dt>
+<dd><p>The sqlite3_compileoption_get() function allows iterating over the list of options that were defined at compile time by returning the N-th compile time option string.
+<i>(source: <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a>, checked-by: th3/cov1/ctime01.test, matrix: <a href='matrix/c3ref/compileoption_get.html#R-08023-12605-32642-43845-16740-17726-48491-51878'>context</a>, <a href='matrix/matrix_dcompileoption_get.html#R-08023-12605-32642-43845-16740-17726-48491-51878'>detail</a>)</i></p></dd>
+
+<dt><b>R-08041-13327-32920-22476-39167-57805-60221-02084</b></dt>
+<dd><p>Any operators applied to column names, including the no-op unary "+" operator, convert the column name into an expression which always has no affinity. Hence even if X and Y.Z are column names, the expressions +X and +Y.Z are not column names and have no affinity.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-08041-13327-32920-22476-39167-57805-60221-02084'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-08041-13327-32920-22476-39167-57805-60221-02084'>detail</a>)</i></p></dd>
+
+<dt><b>R-08054-15429-02256-10004-55638-18867-37025-44792</b></dt>
+<dd><p>The min/max-value pair columns are stored as 32-bit floating point values for "rtree" virtual tables or as 32-bit signed integers in "rtree_i32" virtual tables.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-08054-15429-02256-10004-55638-18867-37025-44792'>context</a>, <a href='matrix/matrix_drtree.html#R-08054-15429-02256-10004-55638-18867-37025-44792'>detail</a>)</i></p></dd>
+
+<dt><b>R-08114-32142-00732-64514-48561-20765-18490-60884</b></dt>
+<dd><p>SQLite takes the text result from the application from the 2nd parameter of the sqlite3_result_text* interfaces.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result02.test, matrix: <a href='matrix/c3ref/result_blob.html#R-08114-32142-00732-64514-48561-20765-18490-60884'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-08114-32142-00732-64514-48561-20765-18490-60884'>detail</a>)</i></p></dd>
+
+<dt><b>R-08137-02757-06056-54602-11771-11326-16926-36130</b></dt>
+<dd><p>The eTextRep argument determines the encoding of strings passed to the collating function callback, xCompare.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-08137-02757-06056-54602-11771-11326-16926-36130'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-08137-02757-06056-54602-11771-11326-16926-36130'>detail</a>)</i></p></dd>
+
+<dt><b>R-08161-44559-11294-25208-33337-24402-63584-35626</b></dt>
+<dd><p>The xShutdown() method is called by sqlite3_shutdown().
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-08161-44559-11294-25208-33337-24402-63584-35626'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-08161-44559-11294-25208-33337-24402-63584-35626'>detail</a>)</i></p></dd>
+
+<dt><b>R-08181-17347-07123-49289-35480-05775-37202-24874</b></dt>
+<dd><p>The first form (without an argument) queries the current limit.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-08181-17347-07123-49289-35480-05775-37202-24874'>context</a>, <a href='matrix/matrix_dpragma.html#R-08181-17347-07123-49289-35480-05775-37202-24874'>detail</a>)</i></p></dd>
+
+<dt><b>R-08185-34281-12728-08403-04938-30337-50100-31193</b></dt>
+<dd><p>The sqlite3_result_blob() interface sets the result from an application-defined function to be the BLOB whose content is pointed to by the second parameter and which is N bytes long where N is the third parameter.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-08185-34281-12728-08403-04938-30337-50100-31193'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-08185-34281-12728-08403-04938-30337-50100-31193'>detail</a>)</i></p></dd>
+
+<dt><b>R-08195-21952-34144-42523-58914-33404-63629-47185</b></dt>
+<dd><p>This function is used to read data from an open BLOB handle into a caller-supplied buffer. N bytes of data are copied into buffer Z from the open BLOB, starting at offset iOffset.
+<i>(source: <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_read.html#R-08195-21952-34144-42523-58914-33404-63629-47185'>context</a>, <a href='matrix/matrix_dblob_read.html#R-08195-21952-34144-42523-58914-33404-63629-47185'>detail</a>)</i></p></dd>
+
+<dt><b>R-08198-48522-54017-24058-29188-47107-45936-39213</b></dt>
+<dd><p>The TRUNCATE journaling mode commits transactions by truncating the rollback journal to zero-length instead of deleting it.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma24.test, matrix: <a href='matrix/pragma.html#R-08198-48522-54017-24058-29188-47107-45936-39213'>context</a>, <a href='matrix/matrix_dpragma.html#R-08198-48522-54017-24058-29188-47107-45936-39213'>detail</a>)</i></p></dd>
+
+<dt><b>R-08214-18010-33736-07110-47813-14852-27438-16188</b></dt>
+<dd><p>However omitting the extra rows is optional.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-08214-18010-33736-07110-47813-14852-27438-16188'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-08214-18010-33736-07110-47813-14852-27438-16188'>detail</a>)</i></p></dd>
+
+<dt><b>R-08220-00712-08202-21182-26079-26258-28714-22258</b></dt>
+<dd><p>The sqlite3_malloc() routine returns a pointer to a block of memory at least N bytes in length, where N is the parameter.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-08220-00712-08202-21182-26079-26258-28714-22258'>context</a>, <a href='matrix/matrix_dfree.html#R-08220-00712-08202-21182-26079-26258-28714-22258'>detail</a>)</i></p></dd>
+
+<dt><b>R-08224-30249-18275-36906-02216-43610-40508-55733</b></dt>
+<dd><p>Rows are assigned contiguously ascending rowid values, starting with 1, in the order that they are returned by the SELECT statement.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-08224-30249-18275-36906-02216-43610-40508-55733'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-08224-30249-18275-36906-02216-43610-40508-55733'>detail</a>)</i></p></dd>
+
+<dt><b>R-08267-32299-63841-11105-16971-59372-17886-11855</b></dt>
+<dd><p>If Z is omitted then substr(X,Y) returns all characters through the end of the string X beginning with the Y-th.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-08267-32299-63841-11105-16971-59372-17886-11855'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-08267-32299-63841-11105-16971-59372-17886-11855'>detail</a>)</i></p></dd>
+
+<dt><b>R-08308-17224-38959-45804-35149-08611-40097-56535</b></dt>
+<dd><p>The default collating function for all strings is BINARY.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/callback.c, th3/req1/fileformat05.test, matrix: <a href='matrix/fileformat2.html#R-08308-17224-38959-45804-35149-08611-40097-56535'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-08308-17224-38959-45804-35149-08611-40097-56535'>detail</a>)</i></p></dd>
+
+<dt><b>R-08327-00674-34025-59801-39794-03725-53451-62789</b></dt>
+<dd><p>By default, coordinates are stored in an R*Tree using 32-bit floating point values.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-08327-00674-34025-59801-39794-03725-53451-62789'>context</a>, <a href='matrix/matrix_drtree.html#R-08327-00674-34025-59801-39794-03725-53451-62789'>detail</a>)</i></p></dd>
+
+<dt><b>R-08348-34672-30710-39534-43438-18204-53248-46501</b></dt>
+<dd><p>If the database is opened (and/or created) successfully, then SQLITE_OK is returned. Otherwise an error code is returned.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-08348-34672-30710-39534-43438-18204-53248-46501'>context</a>, <a href='matrix/matrix_dopen.html#R-08348-34672-30710-39534-43438-18204-53248-46501'>detail</a>)</i></p></dd>
+
+<dt><b>R-08382-59936-33976-47324-12447-38582-10569-47799</b></dt>
+<dd><p>Writes to the BLOB that occurred before the BLOB handle expired are not rolled back by the expiration of the handle, though of course those changes might have been overwritten by the statement that expired the BLOB handle or by other independent statements.
+<i>(source: <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>, checked-by: tcl/e_blobwrite.test, matrix: <a href='matrix/c3ref/blob_write.html#R-08382-59936-33976-47324-12447-38582-10569-47799'>context</a>, <a href='matrix/matrix_dblob_write.html#R-08382-59936-33976-47324-12447-38582-10569-47799'>detail</a>)</i></p></dd>
+
+<dt><b>R-08469-46782-59132-04592-41153-65090-64039-23228</b></dt>
+<dd><p>PRAGMA collation_list; Return a list of the collating sequences defined for the current database connection.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma13.test, matrix: <a href='matrix/pragma.html#R-08469-46782-59132-04592-41153-65090-64039-23228'>context</a>, <a href='matrix/matrix_dpragma.html#R-08469-46782-59132-04592-41153-65090-64039-23228'>detail</a>)</i></p></dd>
+
+<dt><b>R-08470-40933-39231-45429-29526-36251-38185-62772</b></dt>
+<dd><p>The ANALYZE command gathers statistics about tables and indices and stores the collected information in internal tables of the database where the query optimizer can access the information and use it to help make better query planning choices.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-08470-40933-39231-45429-29526-36251-38185-62772'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-08470-40933-39231-45429-29526-36251-38185-62772'>detail</a>)</i></p></dd>
+
+<dt><b>R-08531-36543-43368-50490-58607-10151-50307-46292</b></dt>
+<dd><p>A compound SELECT created using UNION ALL operator returns all the rows from the SELECT to the left of the UNION ALL operator, and all the rows from the SELECT to the right of it.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-08531-36543-43368-50490-58607-10151-50307-46292'>context</a>, <a href='matrix/matrix_dlang_select.html#R-08531-36543-43368-50490-58607-10151-50307-46292'>detail</a>)</i></p></dd>
+
+<dt><b>R-08551-61977-00536-43869-21824-42581-53338-42827</b></dt>
+<dd><p>A value with storage class NULL is considered less than any other value (including another value with storage class NULL).
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_04.test, matrix: <a href='matrix/datatype3.html#R-08551-61977-00536-43869-21824-42581-53338-42827'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-08551-61977-00536-43869-21824-42581-53338-42827'>detail</a>)</i></p></dd>
+
+<dt><b>R-08570-19916-06094-14315-21140-23229-64814-49543</b></dt>
+<dd><p>However, when not in write-ahead log mode, the page_size and/or auto_vacuum properties of an existing database may be changed by using the page_size and/or pragma auto_vacuum pragmas and then immediately VACUUMing the database.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-08570-19916-06094-14315-21140-23229-64814-49543'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-08570-19916-06094-14315-21140-23229-64814-49543'>detail</a>)</i></p></dd>
+
+<dt><b>R-08600-21007-59699-24141-37945-25671-33905-23052</b></dt>
+<dd><p>If parameter Y is present then it is used as the separator between instances of X.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-08600-21007-59699-24141-37945-25671-33905-23052'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-08600-21007-59699-24141-37945-25671-33905-23052'>detail</a>)</i></p></dd>
+
+<dt><b>R-08669-22397-26856-32296-22372-63471-24126-56225</b></dt>
+<dd><p>The number of columns in the rows returned by a simple SELECT statement is equal to the number of expressions in the result expression list after substitution of * and alias.* expressions.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-08669-22397-26856-32296-22372-63471-24126-56225'>context</a>, <a href='matrix/matrix_dlang_select.html#R-08669-22397-26856-32296-22372-63471-24126-56225'>detail</a>)</i></p></dd>
+
+<dt><b>R-08680-42661-24971-27030-06181-52917-24320-47746</b></dt>
+<dd><p>The second column is the number of modified pages that have been written to the write-ahead log file.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-08680-42661-24971-27030-06181-52917-24320-47746'>context</a>, <a href='matrix/matrix_dpragma.html#R-08680-42661-24971-27030-06181-52917-24320-47746'>detail</a>)</i></p></dd>
+
+<dt><b>R-08681-45277-14100-51312-28696-23775-11578-48916</b></dt>
+<dd><p>Subelements that return NOT_WITHIN are discarded.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc3.test, th3/cov1/rtree04.test, matrix: <a href='matrix/rtree.html#R-08681-45277-14100-51312-28696-23775-11578-48916'>context</a>, <a href='matrix/matrix_drtree.html#R-08681-45277-14100-51312-28696-23775-11578-48916'>detail</a>)</i></p></dd>
+
+<dt><b>R-08681-56652-45784-02729-28742-19539-49862-48727</b></dt>
+<dd><p>If any prior errors have occurred while constructing the dynamic string in sqlite3_str X, then the sqlite3_str_errcode(X) method will return an appropriate error code.
+<i>(source: <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>, matrix: <a href='matrix/c3ref/str_errcode.html#R-08681-56652-45784-02729-28742-19539-49862-48727'>context</a>, <a href='matrix/matrix_dstr_errcode.html#R-08681-56652-45784-02729-28742-19539-49862-48727'>detail</a>)</i></p></dd>
+
+<dt><b>R-08698-00464-45876-62927-50774-10665-22959-52892</b></dt>
+<dd><p>In the second form, if the database name is omitted, the limit that is set becomes the default limit for all databases that are added to the database connection by subsequent ATTACH statements.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-08698-00464-45876-62927-50774-10665-22959-52892'>context</a>, <a href='matrix/matrix_dpragma.html#R-08698-00464-45876-62927-50774-10665-22959-52892'>detail</a>)</i></p></dd>
+
+<dt><b>R-08702-09805-37818-25319-39065-12548-64378-42477</b></dt>
+<dd><p>The sqlite3_commit_hook() interface registers a callback function to be invoked whenever a transaction is committed.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-08702-09805-37818-25319-39065-12548-64378-42477'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-08702-09805-37818-25319-39065-12548-64378-42477'>detail</a>)</i></p></dd>
+
+<dt><b>R-08713-21404-16233-00698-59438-08453-31603-49865</b></dt>
+<dd><p>If the callback argument (C) to sqlite3_autovacuum_pages(D,C,P,X) is a NULL pointer, then the autovacuum steps callback is cancelled.
+<i>(source: <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a>, checked-by: th3/cov1/autovac01.test, matrix: <a href='matrix/c3ref/autovacuum_pages.html#R-08713-21404-16233-00698-59438-08453-31603-49865'>context</a>, <a href='matrix/matrix_dautovacuum_pages.html#R-08713-21404-16233-00698-59438-08453-31603-49865'>detail</a>)</i></p></dd>
+
+<dt><b>R-08782-14491-16976-46290-53742-52079-02561-50311</b></dt>
+<dd><p>The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback function C that is invoked prior to each autovacuum of the database file.
+<i>(source: <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a>, checked-by: th3/cov1/autovac01.test, matrix: <a href='matrix/c3ref/autovacuum_pages.html#R-08782-14491-16976-46290-53742-52079-02561-50311'>context</a>, <a href='matrix/matrix_dautovacuum_pages.html#R-08782-14491-16976-46290-53742-52079-02561-50311'>detail</a>)</i></p></dd>
+
+<dt><b>R-08782-34587-24709-60747-46157-12897-42098-02206</b></dt>
+<dd><p>sqlite3_release_memory() returns the number of bytes actually freed, which might be more or less than the amount requested.
+<i>(source: <a href="c3ref/release_memory.html">c3ref/release_memory.html</a>, checked-by: th3/req1/releasemem01.test, matrix: <a href='matrix/c3ref/release_memory.html#R-08782-34587-24709-60747-46157-12897-42098-02206'>context</a>, <a href='matrix/matrix_drelease_memory.html#R-08782-34587-24709-60747-46157-12897-42098-02206'>detail</a>)</i></p></dd>
+
+<dt><b>R-08804-63175-03781-61718-64946-14312-06461-12465</b></dt>
+<dd><p>Corresponding rows in the index and table b-trees share the same rowid or primary key values and contain the same value for all indexed columns.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-08804-63175-03781-61718-64946-14312-06461-12465'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-08804-63175-03781-61718-64946-14312-06461-12465'>detail</a>)</i></p></dd>
+
+<dt><b>R-08861-34280-62866-63452-63262-62491-16025-47018</b></dt>
+<dd><p>If the simple SELECT is a SELECT ALL, then the entire set of result rows are returned by the SELECT.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-08861-34280-62866-63452-63262-62491-16025-47018'>context</a>, <a href='matrix/matrix_dlang_select.html#R-08861-34280-62866-63452-63262-62491-16025-47018'>detail</a>)</i></p></dd>
+
+<dt><b>R-08903-51590-18062-24037-51123-18798-32019-19886</b></dt>
+<dd><p>The sqlite3_backup_pagecount() routine returns the total number of pages in the source database at the conclusion of the most recent sqlite3_backup_step().
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-08903-51590-18062-24037-51123-18798-32019-19886'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-08903-51590-18062-24037-51123-18798-32019-19886'>detail</a>)</i></p></dd>
+
+<dt><b>R-08904-24719-11346-47287-22123-01310-57737-05262</b></dt>
+<dd><p>Sum() will throw an "integer overflow" exception if all inputs are integers or NULL and an integer overflow occurs at any point during the computation.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-08904-24719-11346-47287-22123-01310-57737-05262'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-08904-24719-11346-47287-22123-01310-57737-05262'>detail</a>)</i></p></dd>
+
+<dt><b>R-08908-23439-37383-27763-09062-14229-58252-49666</b></dt>
+<dd><p>A CREATE TABLE command operates the same whether or not foreign key constraints are enabled.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys21.test, matrix: <a href='matrix/foreignkeys.html#R-08908-23439-37383-27763-09062-14229-58252-49666'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-08908-23439-37383-27763-09062-14229-58252-49666'>detail</a>)</i></p></dd>
+
+<dt><b>R-08916-58393-39719-51162-04738-33368-03102-45258</b></dt>
+<dd><p>This interface disables all automatic extensions previously registered using sqlite3_auto_extension().
+<i>(source: <a href="c3ref/reset_auto_extension.html">c3ref/reset_auto_extension.html</a>, checked-by: th3/req1/autoext01.test, matrix: <a href='matrix/c3ref/reset_auto_extension.html#R-08916-58393-39719-51162-04738-33368-03102-45258'>context</a>, <a href='matrix/matrix_dreset_auto_extension.html#R-08916-58393-39719-51162-04738-33368-03102-45258'>detail</a>)</i></p></dd>
+
+<dt><b>R-08940-21305-30374-23280-00035-42277-55348-10248</b></dt>
+<dd><p>Unless it returns SQLITE_MISUSE, this function sets the database connection error code and message accessible via sqlite3_errcode() and sqlite3_errmsg() and related functions.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-08940-21305-30374-23280-00035-42277-55348-10248'>context</a>, <a href='matrix/matrix_dblob_open.html#R-08940-21305-30374-23280-00035-42277-55348-10248'>detail</a>)</i></p></dd>
+
+<dt><b>R-08951-19801-08417-23581-55505-30558-59834-07757</b></dt>
+<dd><p>When searching database schemas for a named object, objects of types that cannot be used in the context of the reference are always ignored.
+<i>(source: <a href="lang_naming.html">lang_naming.html</a>, checked-by: tcl/e_resolve.test, matrix: <a href='matrix/lang_naming.html#R-08951-19801-08417-23581-55505-30558-59834-07757'>context</a>, <a href='matrix/matrix_dlang_naming.html#R-08951-19801-08417-23581-55505-30558-59834-07757'>detail</a>)</i></p></dd>
+
+<dt><b>R-08966-11138-53751-32192-40537-45377-40964-32570</b></dt>
+<dd><p>The SQLITE_CONFIG_HEAP option specifies a static memory buffer that SQLite will use for all of its dynamic memory allocation needs beyond those provided for by SQLITE_CONFIG_PAGECACHE.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-08966-11138-53751-32192-40537-45377-40964-32570'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-08966-11138-53751-32192-40537-45377-40964-32570'>detail</a>)</i></p></dd>
+
+<dt><b>R-08980-53124-31180-17843-61277-57445-45439-15186</b></dt>
+<dd><p>The CAST operator understands decimal integers only &mdash; conversion of hexadecimal integers stops at the "x" in the "0x" prefix of the hexadecimal integer string and thus result of the CAST is always zero.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-08980-53124-31180-17843-61277-57445-45439-15186'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-08980-53124-31180-17843-61277-57445-45439-15186'>detail</a>)</i></p></dd>
+
+<dt><b>R-08996-44767-00372-61996-62124-13130-39944-08458</b></dt>
+<dd><p>If the sqlite3_vtab_distinct() interface returns 2, that means that the query planner does not need the rows returned in any particular order, as long as rows with the same values in all "aOrderBy" columns are adjacent.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-08996-44767-00372-61996-62124-13130-39944-08458'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-08996-44767-00372-61996-62124-13130-39944-08458'>detail</a>)</i></p></dd>
+
+<dt><b>R-09005-28791-60027-45340-35703-17892-19441-18649</b></dt>
+<dd><p>Replacing the phrase above with any of the following creates an immediate foreign key constraint. NOT DEFERRABLE INITIALLY DEFERRED -- An immediate foreign key constraint NOT DEFERRABLE INITIALLY IMMEDIATE -- An immediate foreign key constraint NOT DEFERRABLE -- An immediate foreign key constraint DEFERRABLE INITIALLY IMMEDIATE -- An immediate foreign key constraint DEFERRABLE -- An immediate foreign key constraint
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys12.test, matrix: <a href='matrix/foreignkeys.html#R-09005-28791-60027-45340-35703-17892-19441-18649'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-09005-28791-60027-45340-35703-17892-19441-18649'>detail</a>)</i></p></dd>
+
+<dt><b>R-09033-01493-08484-25490-18731-61378-37357-02599</b></dt>
+<dd><p>As of SQLite version 3.6.19, the default setting for foreign key enforcement is OFF.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma18.test, th3/req1/pragma19.test, matrix: <a href='matrix/pragma.html#R-09033-01493-08484-25490-18731-61378-37357-02599'>context</a>, <a href='matrix/matrix_dpragma.html#R-09033-01493-08484-25490-18731-61378-37357-02599'>detail</a>)</i></p></dd>
+
+<dt><b>R-09068-40660-27195-07118-53993-03715-03215-45426</b></dt>
+<dd><p>A return of SQLITE_BUSY or SQLITE_LOCKED from sqlite3_backup_step() is not a permanent error and does not affect the return value of sqlite3_backup_finish().
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-09068-40660-27195-07118-53993-03715-03215-45426'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-09068-40660-27195-07118-53993-03715-03215-45426'>detail</a>)</i></p></dd>
+
+<dt><b>R-09101-51783-59948-59887-59676-41336-15465-57227</b></dt>
+<dd><p>The ANALYZE command scans all indexes of database where there might be a choice between two or more indexes and gathers statistics on the selectiveness of those indexes.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-09101-51783-59948-59887-59676-41336-15465-57227'>context</a>, <a href='matrix/matrix_doptoverview.html#R-09101-51783-59948-59887-59676-41336-15465-57227'>detail</a>)</i></p></dd>
+
+<dt><b>R-09155-31313-04558-40761-11557-49623-19488-24497</b></dt>
+<dd><p>TRUNCATE This mode works the same way as RESTART with the addition that the WAL file is truncated to zero bytes upon successful completion.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/checkpoint01.test, matrix: <a href='matrix/pragma.html#R-09155-31313-04558-40761-11557-49623-19488-24497'>context</a>, <a href='matrix/matrix_dpragma.html#R-09155-31313-04558-40761-11557-49623-19488-24497'>detail</a>)</i></p></dd>
+
+<dt><b>R-09193-49806-52898-46442-20087-60215-15458-19610</b></dt>
+<dd><p>An rtree_i32 stores coordinates as 32-bit signed integers.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-09193-49806-52898-46442-20087-60215-15458-19610'>context</a>, <a href='matrix/matrix_drtree.html#R-09193-49806-52898-46442-20087-60215-15458-19610'>detail</a>)</i></p></dd>
+
+<dt><b>R-09205-13964-09517-20139-64262-42567-60907-13459</b></dt>
+<dd><p>That is to say, it always returns the value of the hard heap limit that is set after any changes imposed by this PRAGMA.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-09205-13964-09517-20139-64262-42567-60907-13459'>context</a>, <a href='matrix/matrix_dpragma.html#R-09205-13964-09517-20139-64262-42567-60907-13459'>detail</a>)</i></p></dd>
+
+<dt><b>R-09224-24423-49994-35052-44782-07327-29162-57753</b></dt>
+<dd><p>Call the sqlite3_enable_load_extension() routine with onoff==1 to turn extension loading on and call it with onoff==0 to turn it back off again.
+<i>(source: <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a>, matrix: <a href='matrix/c3ref/enable_load_extension.html#R-09224-24423-49994-35052-44782-07327-29162-57753'>context</a>, <a href='matrix/matrix_denable_load_extension.html#R-09224-24423-49994-35052-44782-07327-29162-57753'>detail</a>)</i></p></dd>
+
+<dt><b>R-09234-10892-22586-13984-19224-64050-36333-58346</b></dt>
+<dd><p>The primary key columns appear in the order that they were declared in the PRIMARY KEY clause and the remaining columns appear in the order they occur in the CREATE TABLE statement.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-09234-10892-22586-13984-19224-64050-36333-58346'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-09234-10892-22586-13984-19224-64050-36333-58346'>detail</a>)</i></p></dd>
+
+<dt><b>R-09247-46544-65339-05337-14094-58644-44779-17885</b></dt>
+<dd><p>The immutable parameter is a boolean query parameter that indicates that the database file is stored on read-only media.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/nolock01.test, matrix: <a href='matrix/c3ref/open.html#R-09247-46544-65339-05337-14094-58644-44779-17885'>context</a>, <a href='matrix/matrix_dopen.html#R-09247-46544-65339-05337-14094-58644-44779-17885'>detail</a>)</i></p></dd>
+
+<dt><b>R-09261-46339-25709-54309-20729-08593-14367-03558</b></dt>
+<dd><p>If Y is omitted then the default entry point name is used.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-09261-46339-25709-54309-20729-08593-14367-03558'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-09261-46339-25709-54309-20729-08593-14367-03558'>detail</a>)</i></p></dd>
+
+<dt><b>R-09310-54000-20676-45974-44442-40354-59533-62372</b></dt>
+<dd><p>For the GLOB operator, the column must be indexed using the built-in BINARY collating sequence.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-09310-54000-20676-45974-44442-40354-59533-62372'>context</a>, <a href='matrix/matrix_doptoverview.html#R-09310-54000-20676-45974-44442-40354-59533-62372'>detail</a>)</i></p></dd>
+
+<dt><b>R-09323-30470-62004-36090-30809-61331-17692-32313</b></dt>
+<dd><p>If a statement modifies the contents of the database so that an immediate foreign key constraint is in violation at the conclusion the statement, an exception is thrown and the effects of the statement are reverted.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys12.test, matrix: <a href='matrix/foreignkeys.html#R-09323-30470-62004-36090-30809-61331-17692-32313'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-09323-30470-62004-36090-30809-61331-17692-32313'>detail</a>)</i></p></dd>
+
+<dt><b>R-09328-38790-35467-08457-46231-05327-56817-51584</b></dt>
+<dd><p>SQLite keeps track of the largest ROWID using an internal table named "sqlite_sequence".
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-09328-38790-35467-08457-46231-05327-56817-51584'>context</a>, <a href='matrix/matrix_dautoinc.html#R-09328-38790-35467-08457-46231-05327-56817-51584'>detail</a>)</i></p></dd>
+
+<dt><b>R-09347-53396-09377-17353-50136-41410-13881-29341</b></dt>
+<dd><p>The MATCH operator of a custom R*Tree query function must be a top-level AND-connected term of the WHERE clause, or else it will not be usable by the R*Tree query optimizer and the query will not be runnable.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: th3/cov1/rtree04.test, matrix: <a href='matrix/rtree.html#R-09347-53396-09377-17353-50136-41410-13881-29341'>context</a>, <a href='matrix/matrix_drtree.html#R-09347-53396-09377-17353-50136-41410-13881-29341'>detail</a>)</i></p></dd>
+
+<dt><b>R-09385-24237-02595-13081-61892-09820-41014-64589</b></dt>
+<dd><p>Finally, the database is flushed to persistent storage using another xSync method call.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-09385-24237-02595-13081-61892-09820-41014-64589'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-09385-24237-02595-13081-61892-09820-41014-64589'>detail</a>)</i></p></dd>
+
+<dt><b>R-09398-26102-26496-59828-02242-35200-16935-00376</b></dt>
+<dd><p>Otherwise, if the ORDER BY expression is an alias to an expression that has been assigned a collation sequence using the postfix COLLATE operator, then the collation sequence assigned to the aliased expression is used.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-09398-26102-26496-59828-02242-35200-16935-00376'>context</a>, <a href='matrix/matrix_dlang_select.html#R-09398-26102-26496-59828-02242-35200-16935-00376'>detail</a>)</i></p></dd>
+
+<dt><b>R-09479-17959-18929-07004-59700-09241-00688-08802</b></dt>
+<dd><p>Indirect deadlock is also detected, so the system is also considered to be deadlocked if connection B has registered for an unlock-notify callback on the conclusion of connection C's transaction, where connection C is waiting on connection A.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-09479-17959-18929-07004-59700-09241-00688-08802'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-09479-17959-18929-07004-59700-09241-00688-08802'>detail</a>)</i></p></dd>
+
+<dt><b>R-09543-06473-23021-32220-32793-21583-15245-47596</b></dt>
+<dd><p>A NULL pointer can be used in place of "main" to refer to the main database file.
+<i>(source: <a href="c3ref/file_control.html">c3ref/file_control.html</a>, matrix: <a href='matrix/c3ref/file_control.html#R-09543-06473-23021-32220-32793-21583-15245-47596'>context</a>, <a href='matrix/matrix_dfile_control.html#R-09543-06473-23021-32220-32793-21583-15245-47596'>detail</a>)</i></p></dd>
+
+<dt><b>R-09564-22170-27375-05763-54488-45369-57253-27733</b></dt>
+<dd><p>Whenever a row in the parent table of a foreign key constraint is deleted, or when the values stored in the parent key column or columns are modified, the logical sequence of events is: Execute applicable BEFORE trigger programs, Check local (non foreign key) constraints, Update or delete the row in the parent table, Perform any required foreign key actions, Execute applicable AFTER trigger programs.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys19.test, matrix: <a href='matrix/foreignkeys.html#R-09564-22170-27375-05763-54488-45369-57253-27733'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-09564-22170-27375-05763-54488-45369-57253-27733'>detail</a>)</i></p></dd>
+
+<dt><b>R-09593-03321-24060-42412-44512-07305-25128-61318</b></dt>
+<dd><p>BLOB literals are string literals containing hexadecimal data and preceded by a single "x" or "X" character.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-09593-03321-24060-42412-44512-07305-25128-61318'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-09593-03321-24060-42412-44512-07305-25128-61318'>detail</a>)</i></p></dd>
+
+<dt><b>R-09594-37460-38113-48088-05045-45379-64772-49989</b></dt>
+<dd><p>Because of this, SQLite is able to plan queries with 50- or 60-way joins in a matter of microseconds Join reordering is automatic and usually works well enough that programmers do not have to think about it, especially if ANALYZE has been used to gather statistics about the available indexes, though occasionally some hints from the programmer are needed.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-09594-37460-38113-48088-05045-45379-64772-49989'>context</a>, <a href='matrix/matrix_doptoverview.html#R-09594-37460-38113-48088-05045-45379-64772-49989'>detail</a>)</i></p></dd>
+
+<dt><b>R-09644-54524-34605-02045-19274-34889-27316-65483</b></dt>
+<dd><p>The time value can be followed by zero or more modifiers that alter date and/or time.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-09644-54524-34605-02045-19274-34889-27316-65483'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-09644-54524-34605-02045-19274-34889-27316-65483'>detail</a>)</i></p></dd>
+
+<dt><b>R-09669-59284-18904-57253-21475-23488-47064-03765</b></dt>
+<dd><p>Text values (odd serial types 13 and larger) sort after numeric values in the order determined by the columns collating function.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat05.test, matrix: <a href='matrix/fileformat2.html#R-09669-59284-18904-57253-21475-23488-47064-03765'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-09669-59284-18904-57253-21475-23488-47064-03765'>detail</a>)</i></p></dd>
+
+<dt><b>R-09681-58560-10305-15727-00297-35868-05335-61175</b></dt>
+<dd><p>The table-name specified as part of a DELETE statement within a trigger body must be unqualified.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-09681-58560-10305-15727-00297-35868-05335-61175'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-09681-58560-10305-15727-00297-35868-05335-61175'>detail</a>)</i></p></dd>
+
+<dt><b>R-09702-18252-10292-02056-28728-37972-55531-64507</b></dt>
+<dd><p>Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK, and INSERT OR ABORT make no changes to the return value of this routine when their insertion fails.
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-09702-18252-10292-02056-28728-37972-55531-64507'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-09702-18252-10292-02056-28728-37972-55531-64507'>detail</a>)</i></p></dd>
+
+<dt><b>R-09704-29281-62509-09033-18405-10464-02206-26533</b></dt>
+<dd><p>The sqlite3_exec() interface runs zero or more UTF-8 encoded, semicolon-separate SQL statements passed into its 2nd argument, in the context of the database connection passed in as its 1st argument.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-09704-29281-62509-09033-18405-10464-02206-26533'>context</a>, <a href='matrix/matrix_dexec.html#R-09704-29281-62509-09033-18405-10464-02206-26533'>detail</a>)</i></p></dd>
+
+<dt><b>R-09711-30533-26237-33578-24208-22217-47498-41477</b></dt>
+<dd><p>PRAGMA module_list; This pragma returns a list of virtual table modules registered with the database connection.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-09711-30533-26237-33578-24208-22217-47498-41477'>context</a>, <a href='matrix/matrix_dpragma.html#R-09711-30533-26237-33578-24208-22217-47498-41477'>detail</a>)</i></p></dd>
+
+<dt><b>R-09727-49113-52842-04896-61000-44446-44783-09009</b></dt>
+<dd><p>The available modifiers are as follows. NNN days NNN hours NNN minutes NNN.NNNN seconds NNN months NNN years start of month start of year start of day weekday N unixepoch julianday auto localtime utc
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-09727-49113-52842-04896-61000-44446-44783-09009'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-09727-49113-52842-04896-61000-44446-44783-09009'>detail</a>)</i></p></dd>
+
+<dt><b>R-09748-03241-62835-60245-32173-07711-55769-04429</b></dt>
+<dd><p>This flag determines whether or not the F_FULLFSYNC syncing method is used on systems that support it.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma11b.test, matrix: <a href='matrix/pragma.html#R-09748-03241-62835-60245-32173-07711-55769-04429'>context</a>, <a href='matrix/matrix_dpragma.html#R-09748-03241-62835-60245-32173-07711-55769-04429'>detail</a>)</i></p></dd>
+
+<dt><b>R-09773-34266-19272-64425-39680-64969-31410-22959</b></dt>
+<dd><p>The name of the column being indexed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15.test, matrix: <a href='matrix/pragma.html#R-09773-34266-19272-64425-39680-64969-31410-22959'>context</a>, <a href='matrix/matrix_dpragma.html#R-09773-34266-19272-64425-39680-64969-31410-22959'>detail</a>)</i></p></dd>
+
+<dt><b>R-09773-40602-32968-36782-04559-37578-19507-63398</b></dt>
+<dd><p>Or if no collating sequence is otherwise defined, the built-in BINARY collating sequence is used.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx01.test, matrix: <a href='matrix/lang_createindex.html#R-09773-40602-32968-36782-04559-37578-19507-63398'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-09773-40602-32968-36782-04559-37578-19507-63398'>detail</a>)</i></p></dd>
+
+<dt><b>R-09782-32948-24767-08594-36498-62288-40921-54378</b></dt>
+<dd><p>If the discard parameter is zero, then the page may be discarded or retained at the discretion of page cache implementation.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-09782-32948-24767-08594-36498-62288-40921-54378'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-09782-32948-24767-08594-36498-62288-40921-54378'>detail</a>)</i></p></dd>
+
+<dt><b>R-09783-65036-25423-48067-42538-45414-00279-46435</b></dt>
+<dd><p>If the sub-query is a compound select, then all terms of the ORDER by clause of the parent must be simple references to columns of the sub-query.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-09783-65036-25423-48067-42538-45414-00279-46435'>context</a>, <a href='matrix/matrix_doptoverview.html#R-09783-65036-25423-48067-42538-45414-00279-46435'>detail</a>)</i></p></dd>
+
+<dt><b>R-09798-06276-54780-63214-14309-15802-32530-00850</b></dt>
+<dd><p>As long as the buffer size is greater than zero, sqlite3_snprintf() guarantees that the buffer is always zero-terminated.
+<i>(source: <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>, checked-by: th3/req1/malloc01.test, matrix: <a href='matrix/c3ref/mprintf.html#R-09798-06276-54780-63214-14309-15802-32530-00850'>context</a>, <a href='matrix/matrix_dmprintf.html#R-09798-06276-54780-63214-14309-15802-32530-00850'>detail</a>)</i></p></dd>
+
+<dt><b>R-09808-17554-50654-05359-25920-63839-21736-07612</b></dt>
+<dd><p>SQLITE_LIMIT_SQL_LENGTH The maximum length of an SQL statement, in bytes.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: tcl/sqllimits1.test, th3/req1/limit02.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-09808-17554-50654-05359-25920-63839-21736-07612'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-09808-17554-50654-05359-25920-63839-21736-07612'>detail</a>)</i></p></dd>
+
+<dt><b>R-09813-17279-59166-04895-48075-17845-31813-35638</b></dt>
+<dd><p>Also, GLOB is case sensitive, unlike LIKE.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-09813-17279-59166-04895-48075-17845-31813-35638'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-09813-17279-59166-04895-48075-17845-31813-35638'>detail</a>)</i></p></dd>
+
+<dt><b>R-09813-48563-02406-35251-52837-06025-02382-52921</b></dt>
+<dd><p>The value returned by sqlite3_changes() immediately after an INSERT, UPDATE or DELETE statement run on a view is always zero.
+<i>(source: <a href="c3ref/changes.html">c3ref/changes.html</a>, checked-by: tcl/e_changes.test, matrix: <a href='matrix/c3ref/changes.html#R-09813-48563-02406-35251-52837-06025-02382-52921'>context</a>, <a href='matrix/matrix_dchanges.html#R-09813-48563-02406-35251-52837-06025-02382-52921'>detail</a>)</i></p></dd>
+
+<dt><b>R-09849-00220-60139-37223-30218-05088-34235-14106</b></dt>
+<dd><p>A negative value for the zeroblob results in a zero-length BLOB.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-09849-00220-60139-37223-30218-05088-34235-14106'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-09849-00220-60139-37223-30218-05088-34235-14106'>detail</a>)</i></p></dd>
+
+<dt><b>R-09861-58956-64676-24756-26552-19713-44272-01342</b></dt>
+<dd><p>Each call to the sqlite3_autovacuum_pages() interface overrides all previous invocations for that database connection.
+<i>(source: <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a>, checked-by: th3/cov1/autovac01.test, matrix: <a href='matrix/c3ref/autovacuum_pages.html#R-09861-58956-64676-24756-26552-19713-44272-01342'>context</a>, <a href='matrix/matrix_dautovacuum_pages.html#R-09861-58956-64676-24756-26552-19713-44272-01342'>detail</a>)</i></p></dd>
+
+<dt><b>R-09904-19077-60402-31152-09250-23294-22236-64637</b></dt>
+<dd><p>The aParam[] array (size nParam) contains the parameter values passed to the SQL function on the right-hand side of the MATCH operator.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, matrix: <a href='matrix/rtree.html#R-09904-19077-60402-31152-09250-23294-22236-64637'>context</a>, <a href='matrix/matrix_drtree.html#R-09904-19077-60402-31152-09250-23294-22236-64637'>detail</a>)</i></p></dd>
+
+<dt><b>R-09933-20910-17434-57069-20423-40847-01443-50853</b></dt>
+<dd><p>SQLite will invoke the destructor D with a single argument of P when it is finished using P.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/cov1/bindptr01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-09933-20910-17434-57069-20423-40847-01443-50853'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-09933-20910-17434-57069-20423-40847-01443-50853'>detail</a>)</i></p></dd>
+
+<dt><b>R-09943-43999-40050-60099-27352-31262-44628-15476</b></dt>
+<dd><p>An attempt to ATTACH a database with a different text encoding from the "main" database will fail.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma16.test, matrix: <a href='matrix/pragma.html#R-09943-43999-40050-60099-27352-31262-44628-15476'>context</a>, <a href='matrix/matrix_dpragma.html#R-09943-43999-40050-60099-27352-31262-44628-15476'>detail</a>)</i></p></dd>
+
+<dt><b>R-10014-60729-41170-51262-01387-53486-13666-35080</b></dt>
+<dd><p>If X is the name of a rollback or WAL-mode journal file that is passed into the xOpen method of sqlite3_vfs, then sqlite3_database_file_object(X) returns a pointer to the sqlite3_file object that represents the main database file.
+<i>(source: <a href="c3ref/database_file_object.html">c3ref/database_file_object.html</a>, matrix: <a href='matrix/c3ref/database_file_object.html#R-10014-60729-41170-51262-01387-53486-13666-35080'>context</a>, <a href='matrix/matrix_ddatabase_file_object.html#R-10014-60729-41170-51262-01387-53486-13666-35080'>detail</a>)</i></p></dd>
+
+<dt><b>R-10042-17899-51824-29189-33430-37310-31146-42510</b></dt>
+<dd><p>If one operand has INTEGER, REAL or NUMERIC affinity and the other operand has TEXT or BLOB or no affinity then NUMERIC affinity is applied to other operand.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/cov1/affinity01.test, th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-10042-17899-51824-29189-33430-37310-31146-42510'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-10042-17899-51824-29189-33430-37310-31146-42510'>detail</a>)</i></p></dd>
+
+<dt><b>R-10099-10064-58361-57180-39744-05216-32972-43593</b></dt>
+<dd><p>The histogram data is only useful if the right-hand side of the constraint is a simple compile-time constant or parameter and not an expression.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-10099-10064-58361-57180-39744-05216-32972-43593'>context</a>, <a href='matrix/matrix_doptoverview.html#R-10099-10064-58361-57180-39744-05216-32972-43593'>detail</a>)</i></p></dd>
+
+<dt><b>R-10109-20452-53276-41872-63667-11760-57644-25670</b></dt>
+<dd><p>If SQLITE_OMIT_TRIGGER is defined but SQLITE_OMIT_FOREIGN_KEY is not, then SQLite behaves as it did prior to version 3.6.19 (2009-10-14) - foreign key definitions are parsed and may be queried using PRAGMA foreign_key_list, but foreign key constraints are not enforced.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys05.test, matrix: <a href='matrix/foreignkeys.html#R-10109-20452-53276-41872-63667-11760-57644-25670'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-10109-20452-53276-41872-63667-11760-57644-25670'>detail</a>)</i></p></dd>
+
+<dt><b>R-10119-21526-34528-05557-36941-47440-26835-18777</b></dt>
+<dd><p>Following a successful SQLITE_FCNTL_BEGIN_ATOMIC_WRITE and prior to the closing SQLITE_FCNTL_COMMIT_ATOMIC_WRITE or SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, SQLite will make no VFS interface calls on the same sqlite3_file file descriptor except for calls to the xWrite method and the xFileControl method with SQLITE_FCNTL_SIZE_HINT.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-10119-21526-34528-05557-36941-47440-26835-18777'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-10119-21526-34528-05557-36941-47440-26835-18777'>detail</a>)</i></p></dd>
+
+<dt><b>R-10190-16965-26709-52634-48294-10827-43315-62793</b></dt>
+<dd><p>The sqlite_stat3.nDLt column holds the approximate number of distinct left-most entries in the index that are less than the sample.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-10190-16965-26709-52634-48294-10827-43315-62793'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-10190-16965-26709-52634-48294-10827-43315-62793'>detail</a>)</i></p></dd>
+
+<dt><b>R-10203-42688-05745-20246-57567-01031-33670-42087</b></dt>
+<dd><p>The callback registered by this function replaces any existing callback registered using sqlite3_wal_hook().
+<i>(source: <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>, checked-by: tcl/e_walauto.test, matrix: <a href='matrix/c3ref/wal_autocheckpoint.html#R-10203-42688-05745-20246-57567-01031-33670-42087'>context</a>, <a href='matrix/matrix_dwal_autocheckpoint.html#R-10203-42688-05745-20246-57567-01031-33670-42087'>detail</a>)</i></p></dd>
+
+<dt><b>R-10260-62465-16896-41827-00033-64414-58979-23233</b></dt>
+<dd><p>PRAGMA reverse_unordered_selects; PRAGMA reverse_unordered_selects = boolean;
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma27.test, matrix: <a href='matrix/pragma.html#R-10260-62465-16896-41827-00033-64414-58979-23233'>context</a>, <a href='matrix/matrix_dpragma.html#R-10260-62465-16896-41827-00033-64414-58979-23233'>detail</a>)</i></p></dd>
+
+<dt><b>R-10284-11658-30925-56941-44506-24940-01613-45379</b></dt>
+<dd><p>The depth of recursion for triggers has a hard upper limit set by the SQLITE_MAX_TRIGGER_DEPTH compile-time option and a run-time limit set by sqlite3_limit(db,SQLITE_LIMIT_TRIGGER_DEPTH,...).
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-10284-11658-30925-56941-44506-24940-01613-45379'>context</a>, <a href='matrix/matrix_dpragma.html#R-10284-11658-30925-56941-44506-24940-01613-45379'>detail</a>)</i></p></dd>
+
+<dt><b>R-10346-40046-35521-21776-43630-65428-20399-28702</b></dt>
+<dd><p>The CREATE TRIGGER statement is used to add triggers to the database schema.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-10346-40046-35521-21776-43630-65428-20399-28702'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-10346-40046-35521-21776-43630-65428-20399-28702'>detail</a>)</i></p></dd>
+
+<dt><b>R-10379-15557-17362-29530-27887-61401-49779-43037</b></dt>
+<dd><p>For the static mutex types, the same mutex is returned on every call that has the same type number.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-10379-15557-17362-29530-27887-61401-49779-43037'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-10379-15557-17362-29530-27887-61401-49779-43037'>detail</a>)</i></p></dd>
+
+<dt><b>R-10382-19306-57880-35714-22073-14679-32627-12019</b></dt>
+<dd><p>The fourth parameter may optionally be ORed with SQLITE_DETERMINISTIC to signal that the function will always return the same result given the same inputs within a single SQL statement.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/cov1/func11.test, matrix: <a href='matrix/c3ref/create_function.html#R-10382-19306-57880-35714-22073-14679-32627-12019'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-10382-19306-57880-35714-22073-14679-32627-12019'>detail</a>)</i></p></dd>
+
+<dt><b>R-10393-27560-44275-02566-07675-36741-21342-01930</b></dt>
+<dd><p>Affinity is applied to operands of a comparison operator prior to the comparison according to the following rules in the order shown:
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-10393-27560-44275-02566-07675-36741-21342-01930'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-10393-27560-44275-02566-07675-36741-21342-01930'>detail</a>)</i></p></dd>
+
+<dt><b>R-10396-30188-46343-25997-25410-36538-31299-06809</b></dt>
+<dd><p>Aggregate min() returns NULL if and only if there are no non-NULL values in the group.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-10396-30188-46343-25997-25410-36538-31299-06809'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-10396-30188-46343-25997-25410-36538-31299-06809'>detail</a>)</i></p></dd>
+
+<dt><b>R-10421-19736-31829-13989-20506-40409-64205-24100</b></dt>
+<dd><p>If any other process is running a checkpoint operation at the same time, the lock cannot be obtained and SQLITE_BUSY is returned.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: src/wal.c, tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-10421-19736-31829-13989-20506-40409-64205-24100'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-10421-19736-31829-13989-20506-40409-64205-24100'>detail</a>)</i></p></dd>
+
+<dt><b>R-10466-53920-46827-22051-27556-17000-33700-37865</b></dt>
+<dd><p>Calling sqlite3_wal_hook() replaces any previously registered write-ahead log callback.
+<i>(source: <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>, checked-by: tcl/e_walhook.test, matrix: <a href='matrix/c3ref/wal_hook.html#R-10466-53920-46827-22051-27556-17000-33700-37865'>context</a>, <a href='matrix/matrix_dwal_hook.html#R-10466-53920-46827-22051-27556-17000-33700-37865'>detail</a>)</i></p></dd>
+
+<dt><b>R-10470-30318-56877-28142-06718-49670-04430-59485</b></dt>
+<dd><p>The usual rules for selecting a collation sequence with which to compare text values apply when evaluating expressions in a GROUP BY clause.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-10470-30318-56877-28142-06718-49670-04430-59485'>context</a>, <a href='matrix/matrix_dlang_select.html#R-10470-30318-56877-28142-06718-49670-04430-59485'>detail</a>)</i></p></dd>
+
+<dt><b>R-10477-59572-35916-33197-44074-53826-19513-26308</b></dt>
+<dd><p>Note that unlike that plain ROLLBACK command (without the TO keyword) the ROLLBACK TO command does not cancel the transaction.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-10477-59572-35916-33197-44074-53826-19513-26308'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-10477-59572-35916-33197-44074-53826-19513-26308'>detail</a>)</i></p></dd>
+
+<dt><b>R-10484-47921-51855-29245-64644-01052-63397-23881</b></dt>
+<dd><p>Views are removed with the DROP VIEW command.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, checked-by: th3/req1/view01.test, matrix: <a href='matrix/lang_createview.html#R-10484-47921-51855-29245-64644-01052-63397-23881'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-10484-47921-51855-29245-64644-01052-63397-23881'>detail</a>)</i></p></dd>
+
+<dt><b>R-10514-25250-42695-33540-35883-31325-38548-55570</b></dt>
+<dd><p>If pnCkpt is not NULL,then *pnCkpt is set to the total number of checkpointed frames in the log file (including any that were already checkpointed before the function was called) or to -1 if the checkpoint could not run due to an error or because the database is not in WAL mode.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-10514-25250-42695-33540-35883-31325-38548-55570'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-10514-25250-42695-33540-35883-31325-38548-55570'>detail</a>)</i></p></dd>
+
+<dt><b>R-10543-26736-58011-26768-22566-64168-18081-13550</b></dt>
+<dd><p>This API makes sure a global version of a function with a particular name and number of parameters exists. If no such function exists before this API is called, a new function is created.
+<i>(source: <a href="c3ref/overload_function.html">c3ref/overload_function.html</a>, matrix: <a href='matrix/c3ref/overload_function.html#R-10543-26736-58011-26768-22566-64168-18081-13550'>context</a>, <a href='matrix/matrix_doverload_function.html#R-10543-26736-58011-26768-22566-64168-18081-13550'>detail</a>)</i></p></dd>
+
+<dt><b>R-10546-57588-48216-07313-35751-26470-62407-13922</b></dt>
+<dd><p>When RAISE(IGNORE) is called, the remainder of the current trigger program, the statement that caused the trigger program to execute and any subsequent trigger programs that would have been executed are abandoned.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-10546-57588-48216-07313-35751-26470-62407-13922'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-10546-57588-48216-07313-35751-26470-62407-13922'>detail</a>)</i></p></dd>
+
+<dt><b>R-10565-09557-60911-42161-01648-20022-48231-49571</b></dt>
+<dd><p>The declared type of a column is used to determine the affinity of the column only.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-10565-09557-60911-42161-01648-20022-48231-49571'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-10565-09557-60911-42161-01648-20022-48231-49571'>detail</a>)</i></p></dd>
+
+<dt><b>R-10596-27541-11253-59899-09809-63621-63871-56727</b></dt>
+<dd><p>The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED_SHARED is always 0.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-10596-27541-11253-59899-09809-63621-63871-56727'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-10596-27541-11253-59899-09809-63621-63871-56727'>detail</a>)</i></p></dd>
+
+<dt><b>R-10606-56585-07684-37439-38314-01521-03990-40264</b></dt>
+<dd><p>If the sub-query is a compound SELECT, then all compound operators must be UNION ALL, and no terms with the subquery compound may be aggregate or DISTINCT, and every term within the subquery must have a FROM clause, and the outer query may not be an aggregate, DISTINCT query, or join.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-10606-56585-07684-37439-38314-01521-03990-40264'>context</a>, <a href='matrix/matrix_doptoverview.html#R-10606-56585-07684-37439-38314-01521-03990-40264'>detail</a>)</i></p></dd>
+
+<dt><b>R-10645-12439-29307-46302-11314-15082-25631-53469</b></dt>
+<dd><p>In particular, rows containing NULL values are not handled any differently from rows without NULL values.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-10645-12439-29307-46302-11314-15082-25631-53469'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-10645-12439-29307-46302-11314-15082-25631-53469'>detail</a>)</i></p></dd>
+
+<dt><b>R-10715-11594-42361-64533-62693-34754-22491-52002</b></dt>
+<dd><p>The round(X,Y) function returns a floating-point value X rounded to Y digits to the right of the decimal point.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-10715-11594-42361-64533-62693-34754-22491-52002'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-10715-11594-42361-64533-62693-34754-22491-52002'>detail</a>)</i></p></dd>
+
+<dt><b>R-10722-45310-03105-41587-65268-38930-36590-56175</b></dt>
+<dd><p>All intervening SAVEPOINTs are canceled, however.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-10722-45310-03105-41587-65268-38930-36590-56175'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-10722-45310-03105-41587-65268-38930-36590-56175'>detail</a>)</i></p></dd>
+
+<dt><b>R-10734-24248-12820-36089-32208-53594-64364-42192</b></dt>
+<dd><p>In other words, if many of the queries run against the FTS4 table use "ORDER BY docid DESC", then it may improve performance to add the "order=desc" option to the CREATE VIRTUAL TABLE statement.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-10734-24248-12820-36089-32208-53594-64364-42192'>context</a>, <a href='matrix/matrix_dfts3.html#R-10734-24248-12820-36089-32208-53594-64364-42192'>detail</a>)</i></p></dd>
+
+<dt><b>R-10777-25114-28148-35067-60781-11341-59885-20930</b></dt>
+<dd><p>Both the first and second forms of the pragma listed above return a single result row containing a single integer column - the value of the journal size limit in bytes.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma26.test, matrix: <a href='matrix/pragma.html#R-10777-25114-28148-35067-60781-11341-59885-20930'>context</a>, <a href='matrix/matrix_dpragma.html#R-10777-25114-28148-35067-60781-11341-59885-20930'>detail</a>)</i></p></dd>
+
+<dt><b>R-10815-21922-06260-57655-10656-49970-23058-15520</b></dt>
+<dd><p>When faced with the choice of using an index to satisfy WHERE clause constraints or satisfying an ORDER BY clause, SQLite does the same cost analysis described above and chooses the index that it believes will result in the fastest answer.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-10815-21922-06260-57655-10656-49970-23058-15520'>context</a>, <a href='matrix/matrix_doptoverview.html#R-10815-21922-06260-57655-10656-49970-23058-15520'>detail</a>)</i></p></dd>
+
+<dt><b>R-10827-60271-29957-56948-24015-30184-30486-05573</b></dt>
+<dd><p>If the journal mode could not be changed, the original journal mode is returned.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma23.test, matrix: <a href='matrix/pragma.html#R-10827-60271-29957-56948-24015-30184-30486-05573'>context</a>, <a href='matrix/matrix_dpragma.html#R-10827-60271-29957-56948-24015-30184-30486-05573'>detail</a>)</i></p></dd>
+
+<dt><b>R-10836-27632-25173-23493-20321-61178-46712-15199</b></dt>
+<dd><p>The sqlite3_value_dup(V) interface makes a copy of the sqlite3_value object D and returns a pointer to that copy.
+<i>(source: <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>, matrix: <a href='matrix/c3ref/value_dup.html#R-10836-27632-25173-23493-20321-61178-46712-15199'>context</a>, <a href='matrix/matrix_dvalue_dup.html#R-10836-27632-25173-23493-20321-61178-46712-15199'>detail</a>)</i></p></dd>
+
+<dt><b>R-10844-63639-16825-02392-05522-65470-37861-17171</b></dt>
+<dd><p>ON CONFLICT clauses work the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/conflict04.test, matrix: <a href='matrix/stricttables.html#R-10844-63639-16825-02392-05522-65470-37861-17171'>context</a>, <a href='matrix/matrix_dstricttables.html#R-10844-63639-16825-02392-05522-65470-37861-17171'>detail</a>)</i></p></dd>
+
+<dt><b>R-10863-13089-16518-46448-48155-27413-52501-54942</b></dt>
+<dd><p>You can query them directly if you like, though this unlikely to reveal anything particularly useful.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq02.test, matrix: <a href='matrix/rtree.html#R-10863-13089-16518-46448-48155-27413-52501-54942'>context</a>, <a href='matrix/matrix_drtree.html#R-10863-13089-16518-46448-48155-27413-52501-54942'>detail</a>)</i></p></dd>
+
+<dt><b>R-10872-35808-62525-46404-48063-22154-06728-34056</b></dt>
+<dd><p>Transactions involving multiple attached databases are atomic, assuming that the main database is not ":memory:" and the journal_mode is not WAL.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach02.test, th3/stress/crash002.test, th3/stress/crash003.test, matrix: <a href='matrix/lang_attach.html#R-10872-35808-62525-46404-48063-22154-06728-34056'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-10872-35808-62525-46404-48063-22154-06728-34056'>detail</a>)</i></p></dd>
+
+<dt><b>R-10883-17697-39247-15529-29929-13310-12082-24783</b></dt>
+<dd><p>For the purposes of sorting rows, values are compared in the same way as for comparison expressions.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-10883-17697-39247-15529-29929-13310-12082-24783'>context</a>, <a href='matrix/matrix_dlang_select.html#R-10883-17697-39247-15529-29929-13310-12082-24783'>detail</a>)</i></p></dd>
+
+<dt><b>R-10886-33090-42835-40467-38387-59487-39282-25653</b></dt>
+<dd><p>When a connection (known as the blocked connection) fails to obtain a shared-cache lock and SQLITE_LOCKED is returned to the caller, the identity of the database connection (the blocking connection) that has locked the required resource is stored internally.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-10886-33090-42835-40467-38387-59487-39282-25653'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-10886-33090-42835-40467-38387-59487-39282-25653'>detail</a>)</i></p></dd>
+
+<dt><b>R-10893-13770-29008-51080-40727-44407-18243-57719</b></dt>
+<dd><p>On success, sqlite3_blob_read() returns SQLITE_OK. Otherwise, an error code or an extended error code is returned.
+<i>(source: <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_read.html#R-10893-13770-29008-51080-40727-44407-18243-57719'>context</a>, <a href='matrix/matrix_dblob_read.html#R-10893-13770-29008-51080-40727-44407-18243-57719'>detail</a>)</i></p></dd>
+
+<dt><b>R-10900-57544-37938-07934-32518-44927-61812-27434</b></dt>
+<dd><p>The rollback journal file can be deleted
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-10900-57544-37938-07934-32518-44927-61812-27434'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-10900-57544-37938-07934-32518-44927-61812-27434'>detail</a>)</i></p></dd>
+
+<dt><b>R-10927-26133-64625-21951-56674-25631-48081-51767</b></dt>
+<dd><p>The ORDER BY clause on an UPDATE statement is used only to determine which rows fall within the LIMIT. The order in which rows are modified is arbitrary and is not influenced by the ORDER BY clause.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-10927-26133-64625-21951-56674-25631-48081-51767'>context</a>, <a href='matrix/matrix_dlang_update.html#R-10927-26133-64625-21951-56674-25631-48081-51767'>detail</a>)</i></p></dd>
+
+<dt><b>R-10933-37470-14937-54231-03343-64899-21190-46936</b></dt>
+<dd><p>The index for "?NNN" parameters is the value of NNN.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-10933-37470-14937-54231-03343-64899-21190-46936'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-10933-37470-14937-54231-03343-64899-21190-46936'>detail</a>)</i></p></dd>
+
+<dt><b>R-10948-48115-30420-45129-26938-33308-29061-07454</b></dt>
+<dd><p>The ADD COLUMN syntax is used to add a new column to an existing table.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/req1/altertable01.test, matrix: <a href='matrix/lang_altertable.html#R-10948-48115-30420-45129-26938-33308-29061-07454'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-10948-48115-30420-45129-26938-33308-29061-07454'>detail</a>)</i></p></dd>
+
+<dt><b>R-10964-23144-03179-07180-41128-15464-48410-22347</b></dt>
+<dd><p>If the source database is modified by the using the same database connection as is used by the backup operation, then the backup database is automatically updated at the same time.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-10964-23144-03179-07180-41128-15464-48410-22347'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-10964-23144-03179-07180-41128-15464-48410-22347'>detail</a>)</i></p></dd>
+
+<dt><b>R-10993-11647-55800-55293-06436-13332-42842-10882</b></dt>
+<dd><p>It is only when the shared-memory wal-index is omitted, when the locking mode is EXCLUSIVE prior to the first WAL-mode database access, that the locking mode is stuck in EXCLUSIVE.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, th3/req1/pragma05.test, matrix: <a href='matrix/wal.html#R-10993-11647-55800-55293-06436-13332-42842-10882'>context</a>, <a href='matrix/matrix_dwal.html#R-10993-11647-55800-55293-06436-13332-42842-10882'>detail</a>)</i></p></dd>
+
+<dt><b>R-11041-58701-63446-54854-64444-07239-52476-54830</b></dt>
+<dd><p>In a database that uses ptrmap pages, all pages at locations identified by the computation in the previous paragraph must be ptrmap page and no other page may be a ptrmap page. Except, if the byte-lock page happens to fall on the same page number as a ptrmap page, then the ptrmap is moved to the following page for that one case.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-11041-58701-63446-54854-64444-07239-52476-54830'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-11041-58701-63446-54854-64444-07239-52476-54830'>detail</a>)</i></p></dd>
+
+<dt><b>R-11061-58747-31587-59612-39335-16677-23352-15397</b></dt>
+<dd><p>If N is less than 1 then a 1-byte random blob is returned.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-11061-58747-31587-59612-39335-16677-23352-15397'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-11061-58747-31587-59612-39335-16677-23352-15397'>detail</a>)</i></p></dd>
+
+<dt><b>R-11062-21931-47759-21146-52801-65238-28754-37817</b></dt>
+<dd><p>szPage will always a power of two.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-11062-21931-47759-21146-52801-65238-28754-37817'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-11062-21931-47759-21146-52801-65238-28754-37817'>detail</a>)</i></p></dd>
+
+<dt><b>R-11071-28411-04078-07805-64978-64675-45980-20570</b></dt>
+<dd><p>The specific value of a WHERE-clause parameter might influence the choice of query plan if the parameter is the left-hand side of a LIKE or GLOB operator or if the parameter is compared to an indexed column and the SQLITE_ENABLE_STAT4 compile-time option is enabled.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare04.test, matrix: <a href='matrix/c3ref/prepare.html#R-11071-28411-04078-07805-64978-64675-45980-20570'>context</a>, <a href='matrix/matrix_dprepare.html#R-11071-28411-04078-07805-64978-64675-45980-20570'>detail</a>)</i></p></dd>
+
+<dt><b>R-11078-03945-63030-33506-24033-34573-31697-17195</b></dt>
+<dd><p>The implicit DELETE does not cause any SQL triggers to fire, but may invoke foreign key actions or constraint violations.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, th3/req1/foreignkeys22.test, matrix: <a href='matrix/foreignkeys.html#R-11078-03945-63030-33506-24033-34573-31697-17195'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-11078-03945-63030-33506-24033-34573-31697-17195'>detail</a>)</i></p></dd>
+
+<dt><b>R-11093-24211-58889-40188-52881-41669-64989-17738</b></dt>
+<dd><p>The ESCAPE clause (with its escape character) acts as a single postfix operator. &nbsp;&nbsp;It can only bind to a preceding &lsqb;expr&rsqb; LIKE &lsqb;expr&rsqb; expression.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-11093-24211-58889-40188-52881-41669-64989-17738'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-11093-24211-58889-40188-52881-41669-64989-17738'>detail</a>)</i></p></dd>
+
+<dt><b>R-11127-09633-57185-22901-21397-40062-06184-59885</b></dt>
+<dd><p>If there is an error, *ppStmt is set to NULL.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare01.test, matrix: <a href='matrix/c3ref/prepare.html#R-11127-09633-57185-22901-21397-40062-06184-59885'>context</a>, <a href='matrix/matrix_dprepare.html#R-11127-09633-57185-22901-21397-40062-06184-59885'>detail</a>)</i></p></dd>
+
+<dt><b>R-11129-23371-40000-09444-50753-04787-03077-31414</b></dt>
+<dd><p>END TRANSACTION is an alias for COMMIT.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-11129-23371-40000-09444-50753-04787-03077-31414'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-11129-23371-40000-09444-50753-04787-03077-31414'>detail</a>)</i></p></dd>
+
+<dt><b>R-11135-63542-29250-48049-02589-36558-61016-54500</b></dt>
+<dd><p>Expressions in an index may not reference other tables and may not use subqueries nor functions whose result might change (ex: random() or sqlite_version()).
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, matrix: <a href='matrix/lang_createindex.html#R-11135-63542-29250-48049-02589-36558-61016-54500'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-11135-63542-29250-48049-02589-36558-61016-54500'>detail</a>)</i></p></dd>
+
+<dt><b>R-11148-40995-48554-02818-10393-13608-40990-18433</b></dt>
+<dd><p>The memory returned by sqlite3_malloc(), sqlite3_realloc(), sqlite3_malloc64(), and sqlite3_realloc64() is always aligned to at least an 8 byte boundary, or to a 4 byte boundary if the SQLITE_4_BYTE_ALIGNED_MALLOC compile-time option is used.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: src/malloc.c, th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-11148-40995-48554-02818-10393-13608-40990-18433'>context</a>, <a href='matrix/matrix_dfree.html#R-11148-40995-48554-02818-10393-13608-40990-18433'>detail</a>)</i></p></dd>
+
+<dt><b>R-11152-23456-02631-23120-19562-51052-54000-26119</b></dt>
+<dd><p>The unlikely(X) function returns the argument X unchanged.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/func3.test, matrix: <a href='matrix/lang_corefunc.html#R-11152-23456-02631-23120-19562-51052-54000-26119'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-11152-23456-02631-23120-19562-51052-54000-26119'>detail</a>)</i></p></dd>
+
+<dt><b>R-11180-04229-25067-24122-45632-49442-37161-45101</b></dt>
+<dd><p>Internally, the BEGIN DEFERRED statement merely sets a flag on the database connection that turns off the automatic commit that would normally occur when the last statement finishes.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-11180-04229-25067-24122-45632-49442-37161-45101'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-11180-04229-25067-24122-45632-49442-37161-45101'>detail</a>)</i></p></dd>
+
+<dt><b>R-11180-58968-08076-59379-05408-00108-51498-63998</b></dt>
+<dd><p>sqlite> EXPLAIN QUERY PLAN SELECT * FROM (SELECT * FROM t2 WHERE c=1) AS t3, t1; QUERY PLAN |--SEARCH t2 USING INDEX i4 (c=?) `--SCAN t1
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-11180-58968-08076-59379-05408-00108-51498-63998'>context</a>, <a href='matrix/matrix_deqp.html#R-11180-58968-08076-59379-05408-00108-51498-63998'>detail</a>)</i></p></dd>
+
+<dt><b>R-11203-26095-47421-44988-44413-41576-06585-21050</b></dt>
+<dd><p>The sqlite3_result_error() and sqlite3_result_error16() routines make a private copy of the error message text before they return.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-11203-26095-47421-44988-44413-41576-06585-21050'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-11203-26095-47421-44988-44413-41576-06585-21050'>detail</a>)</i></p></dd>
+
+<dt><b>R-11211-21323-44589-16843-54908-31937-00970-23693</b></dt>
+<dd><p>PRAGMA schema.freelist_count; Return the number of unused pages in the database file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma2.test, th3/req1/pragma21.test, matrix: <a href='matrix/pragma.html#R-11211-21323-44589-16843-54908-31937-00970-23693'>context</a>, <a href='matrix/matrix_dpragma.html#R-11211-21323-44589-16843-54908-31937-00970-23693'>detail</a>)</i></p></dd>
+
+<dt><b>R-11217-42568-57485-35777-56824-16055-43053-10984</b></dt>
+<dd><p>This function is a wrapper around the sqlite3_total_changes64() C/C++ interface.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, matrix: <a href='matrix/lang_corefunc.html#R-11217-42568-57485-35777-56824-16055-43053-10984'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-11217-42568-57485-35777-56824-16055-43053-10984'>detail</a>)</i></p></dd>
+
+<dt><b>R-11241-54478-18941-45655-01844-39578-11562-47598</b></dt>
+<dd><p>As an example, consider creating a two-dimensional R*Tree index for use in spatial queries: CREATE VIRTUAL TABLE demo_index USING rtree( id, -- Integer primary key minX, maxX, -- Minimum and maximum X coordinate minY, maxY -- Minimum and maximum Y coordinate );
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree17.test, matrix: <a href='matrix/rtree.html#R-11241-54478-18941-45655-01844-39578-11562-47598'>context</a>, <a href='matrix/matrix_drtree.html#R-11241-54478-18941-45655-01844-39578-11562-47598'>detail</a>)</i></p></dd>
+
+<dt><b>R-11255-19907-56460-39957-30226-19999-22429-23256</b></dt>
+<dd><p>The following command-line session demonstrates this: sqlite> PRAGMA foreign_keys; 0 sqlite> PRAGMA foreign_keys = ON; sqlite> PRAGMA foreign_keys; 1 sqlite> PRAGMA foreign_keys = OFF; sqlite> PRAGMA foreign_keys; 0
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys04.test, matrix: <a href='matrix/foreignkeys.html#R-11255-19907-56460-39957-30226-19999-22429-23256'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-11255-19907-56460-39957-30226-19999-22429-23256'>detail</a>)</i></p></dd>
+
+<dt><b>R-11278-45262-58259-06316-15595-38030-39158-45213</b></dt>
+<dd><p>The P argument is a pointer to the database connection object and the X argument is unused.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-11278-45262-58259-06316-15595-38030-39158-45213'>context</a>, <a href='matrix/matrix_dc_trace.html#R-11278-45262-58259-06316-15595-38030-39158-45213'>detail</a>)</i></p></dd>
+
+<dt><b>R-11295-04657-09653-04480-53801-04231-56338-07604</b></dt>
+<dd><p>The operand to the right of the LIKE operator contains the pattern and the left hand operand contains the string to match against the pattern.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-11295-04657-09653-04480-53801-04231-56338-07604'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-11295-04657-09653-04480-53801-04231-56338-07604'>detail</a>)</i></p></dd>
+
+<dt><b>R-11295-25445-59994-09653-28177-15735-56007-21495</b></dt>
+<dd><p>If the S argument to sqlite3_txn_state(D,S) is not the name of a valid schema, then -1 is returned.
+<i>(source: <a href="c3ref/txn_state.html">c3ref/txn_state.html</a>, matrix: <a href='matrix/c3ref/txn_state.html#R-11295-25445-59994-09653-28177-15735-56007-21495'>context</a>, <a href='matrix/matrix_dtxn_state.html#R-11295-25445-59994-09653-28177-15735-56007-21495'>detail</a>)</i></p></dd>
+
+<dt><b>R-11315-64212-00710-49784-05093-45690-30554-02549</b></dt>
+<dd><p>The default busy callback is NULL.
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-11315-64212-00710-49784-05093-45690-30554-02549'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-11315-64212-00710-49784-05093-45690-30554-02549'>detail</a>)</i></p></dd>
+
+<dt><b>R-11321-47427-17901-35193-41209-48737-39207-23278</b></dt>
+<dd><p>Any leading spaces in the TEXT value are ignored when converging from TEXT to REAL.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-11321-47427-17901-35193-41209-48737-39207-23278'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-11321-47427-17901-35193-41209-48737-39207-23278'>detail</a>)</i></p></dd>
+
+<dt><b>R-11345-24891-48483-09798-42153-35485-11277-64815</b></dt>
+<dd><p>The 4-byte big-endian integer at offset 28 into the header stores the size of the database file in pages.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-11345-24891-48483-09798-42153-35485-11277-64815'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-11345-24891-48483-09798-42153-35485-11277-64815'>detail</a>)</i></p></dd>
+
+<dt><b>R-11367-28935-40520-63725-29251-53752-16809-23090</b></dt>
+<dd><p>The sqlite3_snapshot_get(D,S,P) interface attempts to make a new sqlite3_snapshot object that records the current state of schema S in database connection D.
+<i>(source: <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a>, matrix: <a href='matrix/c3ref/snapshot_get.html#R-11367-28935-40520-63725-29251-53752-16809-23090'>context</a>, <a href='matrix/matrix_dsnapshot_get.html#R-11367-28935-40520-63725-29251-53752-16809-23090'>detail</a>)</i></p></dd>
+
+<dt><b>R-11370-04520-26477-32393-15829-52644-05616-39032</b></dt>
+<dd><p>Named parameters are also numbered. The number assigned is one greater than the largest parameter number already assigned.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-11370-04520-26477-32393-15829-52644-05616-39032'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-11370-04520-26477-32393-15829-52644-05616-39032'>detail</a>)</i></p></dd>
+
+<dt><b>R-11423-52711-44857-10860-28486-08502-59467-30884</b></dt>
+<dd><p>If either operand is a column, then the collating function of that column is used with precedence to the left operand.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-11423-52711-44857-10860-28486-08502-59467-30884'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-11423-52711-44857-10860-28486-08502-59467-30884'>detail</a>)</i></p></dd>
+
+<dt><b>R-11464-18362-31752-52659-04390-24092-43500-36484</b></dt>
+<dd><p>This ensures that the next writer will restart the log file from the beginning.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-11464-18362-31752-52659-04390-24092-43500-36484'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-11464-18362-31752-52659-04390-24092-43500-36484'>detail</a>)</i></p></dd>
+
+<dt><b>R-11474-58635-26896-45851-63902-38678-33536-05238</b></dt>
+<dd><p>Format 12 is the Julian day number expressed as an integer or floating point value.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-11474-58635-26896-45851-63902-38678-33536-05238'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-11474-58635-26896-45851-63902-38678-33536-05238'>detail</a>)</i></p></dd>
+
+<dt><b>R-11479-62774-14648-38644-49524-53539-14021-51295</b></dt>
+<dd><p>When comparing a base expression against a WHEN expression, the same collating sequence, affinity, and NULL-handling rules apply as if the base expression and WHEN expression are respectively the left- and right-hand operands of an = operator.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-11479-62774-14648-38644-49524-53539-14021-51295'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-11479-62774-14648-38644-49524-53539-14021-51295'>detail</a>)</i></p></dd>
+
+<dt><b>R-11498-58022-52113-15294-58649-22171-38649-39142</b></dt>
+<dd><p>In a well-formed b-tree page, the total number of bytes in fragments may not exceed 60.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-11498-58022-52113-15294-58649-22171-38649-39142'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-11498-58022-52113-15294-58649-22171-38649-39142'>detail</a>)</i></p></dd>
+
+<dt><b>R-11549-19921-03928-49162-57832-06313-31858-02375</b></dt>
+<dd><p>With synchronous=FULL in WAL mode, an additional sync operation of the WAL file happens after each transaction commit.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-11549-19921-03928-49162-57832-06313-31858-02375'>context</a>, <a href='matrix/matrix_dpragma.html#R-11549-19921-03928-49162-57832-06313-31858-02375'>detail</a>)</i></p></dd>
+
+<dt><b>R-11553-06434-51801-18684-33273-42427-03932-31278</b></dt>
+<dd><p>FULL This mode blocks (invokes the busy-handler callback) until there is no database writer and all readers are reading from the most recent database snapshot. It then checkpoints all frames in the log file and syncs the database file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/checkpoint01.test, matrix: <a href='matrix/pragma.html#R-11553-06434-51801-18684-33273-42427-03932-31278'>context</a>, <a href='matrix/matrix_dpragma.html#R-11553-06434-51801-18684-33273-42427-03932-31278'>detail</a>)</i></p></dd>
+
+<dt><b>R-11564-19849-41478-44833-06358-20754-48496-53228</b></dt>
+<dd><p>It is an error to specify both a schema-name and the TEMP keyword on a VIEW, unless the schema-name is "temp".
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, matrix: <a href='matrix/lang_createview.html#R-11564-19849-41478-44833-06358-20754-48496-53228'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-11564-19849-41478-44833-06358-20754-48496-53228'>detail</a>)</i></p></dd>
+
+<dt><b>R-11566-63657-14865-04704-35153-27057-50201-14742</b></dt>
+<dd><p>The 4-byte big-endian integer at offset 56 determines the encoding used for all text strings stored in the database.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat03.test, matrix: <a href='matrix/fileformat2.html#R-11566-63657-14865-04704-35153-27057-50201-14742'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-11566-63657-14865-04704-35153-27057-50201-14742'>detail</a>)</i></p></dd>
+
+<dt><b>R-11576-11990-36701-63648-24289-51988-09315-26987</b></dt>
+<dd><p>An attempt to invoke the BEGIN command within a transaction will fail with an error, regardless of whether the transaction was started by SAVEPOINT or a prior BEGIN.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-11576-11990-36701-63648-24289-51988-09315-26987'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-11576-11990-36701-63648-24289-51988-09315-26987'>detail</a>)</i></p></dd>
+
+<dt><b>R-11582-07116-64761-46100-27755-27089-47370-58477</b></dt>
+<dd><p>The virtual table may, if it chooses, omit extra rows that have the same value for all columns identified by "aOrderBy".
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-11582-07116-64761-46100-27755-27089-47370-58477'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-11582-07116-64761-46100-27755-27089-47370-58477'>detail</a>)</i></p></dd>
+
+<dt><b>R-11620-22743-59737-64939-21707-40674-29550-48097</b></dt>
+<dd><p>A colon followed by an identifier name holds a spot for a named parameter with the name :AAAA.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-11620-22743-59737-64939-21707-40674-29550-48097'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-11620-22743-59737-64939-21707-40674-29550-48097'>detail</a>)</i></p></dd>
+
+<dt><b>R-11628-62147-05445-61752-17620-56103-14750-56419</b></dt>
+<dd><p>No attempt is made to convert NULL or BLOB values.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-11628-62147-05445-61752-17620-56103-14750-56419'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-11628-62147-05445-61752-17620-56103-14750-56419'>detail</a>)</i></p></dd>
+
+<dt><b>R-11642-52788-36147-22296-03244-37741-50483-48867</b></dt>
+<dd><p>The sqlite3_value objects returned by sqlite3_vtab_rhs_value() are protected.
+<i>(source: <a href="c3ref/value.html">c3ref/value.html</a>, matrix: <a href='matrix/c3ref/value.html#R-11642-52788-36147-22296-03244-37741-50483-48867'>context</a>, <a href='matrix/matrix_dvalue.html#R-11642-52788-36147-22296-03244-37741-50483-48867'>detail</a>)</i></p></dd>
+
+<dt><b>R-11643-51568-63953-16021-50557-65139-53423-53670</b></dt>
+<dd><p>The sqlite3_preupdate_count(D) interface returns the number of columns in the row that is being inserted, updated, or deleted.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-11643-51568-63953-16021-50557-65139-53423-53670'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-11643-51568-63953-16021-50557-65139-53423-53670'>detail</a>)</i></p></dd>
+
+<dt><b>R-11683-62380-30736-32552-21398-51660-49111-11348</b></dt>
+<dd><p>The specified column of row iRow contains a value that is not a TEXT or BLOB value
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-11683-62380-30736-32552-21398-51660-49111-11348'>context</a>, <a href='matrix/matrix_dblob_open.html#R-11683-62380-30736-32552-21398-51660-49111-11348'>detail</a>)</i></p></dd>
+
+<dt><b>R-11684-02844-26168-40557-28007-15193-14492-18686</b></dt>
+<dd><p>The explicit COMMIT command runs immediately, even if there are pending SELECT statements.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-11684-02844-26168-40557-28007-15193-14492-18686'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-11684-02844-26168-40557-28007-15193-14492-18686'>detail</a>)</i></p></dd>
+
+<dt><b>R-11730-53816-33732-41455-13175-02323-60121-55502</b></dt>
+<dd><p>The compound SELECT operators UNION, INTERSECT and EXCEPT perform implicit comparisons between values.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_07.test, matrix: <a href='matrix/datatype3.html#R-11730-53816-33732-41455-13175-02323-60121-55502'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-11730-53816-33732-41455-13175-02323-60121-55502'>detail</a>)</i></p></dd>
+
+<dt><b>R-11740-30529-09837-33143-12061-13377-09078-25577</b></dt>
+<dd><p>The sqlite3_db_status() routine returns SQLITE_OK on success and a non-zero error code on failure.
+<i>(source: <a href="c3ref/db_status.html">c3ref/db_status.html</a>, checked-by: th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/db_status.html#R-11740-30529-09837-33143-12061-13377-09078-25577'>context</a>, <a href='matrix/matrix_ddb_status.html#R-11740-30529-09837-33143-12061-13377-09078-25577'>detail</a>)</i></p></dd>
+
+<dt><b>R-11802-27774-09561-41384-21841-59026-14543-36401</b></dt>
+<dd><p>There can be an arbitrary number of sqlite_stat4 entries per index.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-11802-27774-09561-41384-21841-59026-14543-36401'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-11802-27774-09561-41384-21841-59026-14543-36401'>detail</a>)</i></p></dd>
+
+<dt><b>R-11847-09179-40053-04599-51829-21779-50650-56945</b></dt>
+<dd><p>1 if the index-column is sorted in reverse (DESC) order by the index and 0 otherwise.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15x.test, matrix: <a href='matrix/pragma.html#R-11847-09179-40053-04599-51829-21779-50650-56945'>context</a>, <a href='matrix/matrix_dpragma.html#R-11847-09179-40053-04599-51829-21779-50650-56945'>detail</a>)</i></p></dd>
+
+<dt><b>R-11856-19836-24274-28109-29706-17487-59516-28752</b></dt>
+<dd><p>For example: -- Database schema CREATE TABLE artist( artistid INTEGER PRIMARY KEY, artistname TEXT ); CREATE TABLE track( trackid INTEGER, trackname TEXT, trackartist INTEGER DEFAULT 0 REFERENCES artist(artistid) ON DELETE SET DEFAULT ); sqlite> SELECT * FROM artist; artistid artistname -------- ----------------- 3 Sammy Davis Jr. sqlite> SELECT * FROM track; trackid trackname trackartist ------- ----------------- ----------- 14 Mr. Bojangles 3 sqlite> -- Deleting the row from the parent table causes the child key sqlite> -- value of the dependent row to be set to integer value 0. However, this sqlite> -- value does not correspond to any row in the parent table. Therefore sqlite> -- the foreign key constraint is violated and an is exception thrown. sqlite> DELETE FROM artist WHERE artistname = 'Sammy Davis Jr.'; SQL error: foreign key constraint failed sqlite> -- This time, the value 0 does correspond to a parent table row. And sqlite> -- so the DELETE statement does not violate the foreign key constraint sqlite> -- and no exception is thrown. sqlite> INSERT INTO artist VALUES(0, 'Unknown Artist'); sqlite> DELETE FROM artist WHERE artistname = 'Sammy Davis Jr.'; sqlite> SELECT * FROM artist; artistid artistname -------- ----------------- 0 Unknown Artist sqlite> SELECT * FROM track; trackid trackname trackartist ------- ----------------- ----------- 14 Mr. Bojangles 0
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys18.test, matrix: <a href='matrix/foreignkeys.html#R-11856-19836-24274-28109-29706-17487-59516-28752'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-11856-19836-24274-28109-29706-17487-59516-28752'>detail</a>)</i></p></dd>
+
+<dt><b>R-11896-08162-39829-09724-10165-05972-28450-60411</b></dt>
+<dd><p>The "none" setting means that auto-vacuum is disabled.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-11896-08162-39829-09724-10165-05972-28450-60411'>context</a>, <a href='matrix/matrix_dpragma.html#R-11896-08162-39829-09724-10165-05972-28450-60411'>detail</a>)</i></p></dd>
+
+<dt><b>R-11920-30904-34388-20276-30838-60938-49360-56760</b></dt>
+<dd><p>If the result is NULL, then sqlite3_column_bytes16() returns zero.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-11920-30904-34388-20276-30838-60938-49360-56760'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-11920-30904-34388-20276-30838-60938-49360-56760'>detail</a>)</i></p></dd>
+
+<dt><b>R-11967-56545-48759-50416-31335-06796-11719-37759</b></dt>
+<dd><p>The highwater mark is always 0.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: src/status.c, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-11967-56545-48759-50416-31335-06796-11719-37759'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-11967-56545-48759-50416-31335-06796-11719-37759'>detail</a>)</i></p></dd>
+
+<dt><b>R-11975-28707-46522-06276-23691-04065-63160-37521</b></dt>
+<dd><p>The third and fourth parameters to this routine are passed directly through to the second and third parameters of the xFileControl method.
+<i>(source: <a href="c3ref/file_control.html">c3ref/file_control.html</a>, matrix: <a href='matrix/c3ref/file_control.html#R-11975-28707-46522-06276-23691-04065-63160-37521'>context</a>, <a href='matrix/matrix_dfile_control.html#R-11975-28707-46522-06276-23691-04065-63160-37521'>detail</a>)</i></p></dd>
+
+<dt><b>R-11976-23534-61150-43568-11270-52721-42271-48852</b></dt>
+<dd><p>If page B is a ptrmap page then back-link information about page B+1 is provided by the first entry on the pointer map. Information about page B+2 is provided by the second entry. And so forth.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-11976-23534-61150-43568-11270-52721-42271-48852'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-11976-23534-61150-43568-11270-52721-42271-48852'>detail</a>)</i></p></dd>
+
+<dt><b>R-11990-19596-61905-61628-16888-24987-31493-40559</b></dt>
+<dd><p>julianday(time-value, modifier, modifier, ...)
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-11990-19596-61905-61628-16888-24987-31493-40559'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-11990-19596-61905-61628-16888-24987-31493-40559'>detail</a>)</i></p></dd>
+
+<dt><b>R-12026-28971-38060-63152-02914-42384-21788-39705</b></dt>
+<dd><p>The "double" variable pointed to by the V parameter will be set to the query planner's estimate for the average number of rows output from each iteration of the X-th loop.
+<i>(source: <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a>, checked-by: th3/cov1/status02.test, matrix: <a href='matrix/c3ref/c_scanstat_est.html#R-12026-28971-38060-63152-02914-42384-21788-39705'>context</a>, <a href='matrix/matrix_dc_scanstat_est.html#R-12026-28971-38060-63152-02914-42384-21788-39705'>detail</a>)</i></p></dd>
+
+<dt><b>R-12079-51392-32585-64897-55283-05837-03077-12925</b></dt>
+<dd><p>When text data is inserted into a NUMERIC column, the storage class of the text is converted to INTEGER or REAL (in order of preference) if the text is a well-formed integer or real literal, respectively.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-12079-51392-32585-64897-55283-05837-03077-12925'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-12079-51392-32585-64897-55283-05837-03077-12925'>detail</a>)</i></p></dd>
+
+<dt><b>R-12104-35971-65257-58163-03125-32650-03522-02366</b></dt>
+<dd><p>If no ROWID is specified on the insert, or if the specified ROWID has a value of NULL, then an appropriate ROWID is created automatically.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-12104-35971-65257-58163-03125-32650-03522-02366'>context</a>, <a href='matrix/matrix_dautoinc.html#R-12104-35971-65257-58163-03125-32650-03522-02366'>detail</a>)</i></p></dd>
+
+<dt><b>R-12123-54095-45651-21328-13666-03690-37485-08653</b></dt>
+<dd><p>The table-name specified as part of an UPDATE statement within a trigger body must be unqualified.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-12123-54095-45651-21328-13666-03690-37485-08653'>context</a>, <a href='matrix/matrix_dlang_update.html#R-12123-54095-45651-21328-13666-03690-37485-08653'>detail</a>)</i></p></dd>
+
+<dt><b>R-12168-36613-28272-64664-28588-05948-62910-42845</b></dt>
+<dd><p>Freelist leaf pages bear no information that would need to be restored on a rollback and so they are not written to the journal prior to modification, in order to reduce disk I/O.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-12168-36613-28272-64664-28588-05948-62910-42845'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-12168-36613-28272-64664-28588-05948-62910-42845'>detail</a>)</i></p></dd>
+
+<dt><b>R-12183-43719-06718-33366-17178-17275-22858-03286</b></dt>
+<dd><p>Table columns that do not appear in the column list are populated with the default column value (specified as part of the CREATE TABLE statement), or with NULL if no default value is specified.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-12183-43719-06718-33366-17178-17275-22858-03286'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-12183-43719-06718-33366-17178-17275-22858-03286'>detail</a>)</i></p></dd>
+
+<dt><b>R-12196-28473-08182-34058-05586-50846-36474-32114</b></dt>
+<dd><p>Note that calling sqlite3_busy_timeout() or evaluating PRAGMA busy_timeout=N will change the busy handler and thus clear any previously set busy handler.
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-12196-28473-08182-34058-05586-50846-36474-32114'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-12196-28473-08182-34058-05586-50846-36474-32114'>detail</a>)</i></p></dd>
+
+<dt><b>R-12218-18073-29146-37627-08161-54063-61072-19112</b></dt>
+<dd><p>A VACUUM will fail if there is an open transaction on the database connection that is attempting to run the VACUUM.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: src/vacuum.c, tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-12218-18073-29146-37627-08161-54063-61072-19112'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-12218-18073-29146-37627-08161-54063-61072-19112'>detail</a>)</i></p></dd>
+
+<dt><b>R-12238-55120-28128-47311-07751-08633-28104-35625</b></dt>
+<dd><p>Whenever a PRAGMA statement is parsed, an SQLITE_FCNTL_PRAGMA file control is sent to the open sqlite3_file object corresponding to the database file to which the pragma statement refers.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, checked-by: src/pragma.c, tcl/multiplex4.test, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-12238-55120-28128-47311-07751-08633-28104-35625'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-12238-55120-28128-47311-07751-08633-28104-35625'>detail</a>)</i></p></dd>
+
+<dt><b>R-12259-19638-21315-58129-32389-49540-45137-32104</b></dt>
+<dd><p>A VALUES clause cannot be followed by LIMIT.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-12259-19638-21315-58129-32389-49540-45137-32104'>context</a>, <a href='matrix/matrix_dlang_select.html#R-12259-19638-21315-58129-32389-49540-45137-32104'>detail</a>)</i></p></dd>
+
+<dt><b>R-12275-20298-47772-56757-15778-39462-64033-34126</b></dt>
+<dd><p>In other words, the schema-name. prefix on the table name is not allowed within triggers.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-12275-20298-47772-56757-15778-39462-64033-34126'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-12275-20298-47772-56757-15778-39462-64033-34126'>detail</a>)</i></p></dd>
+
+<dt><b>R-12314-13901-08300-54236-37161-34051-04965-51279</b></dt>
+<dd><p>Division by zero gives a result of NULL.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_06.test, matrix: <a href='matrix/datatype3.html#R-12314-13901-08300-54236-37161-34051-04965-51279'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-12314-13901-08300-54236-37161-34051-04965-51279'>detail</a>)</i></p></dd>
+
+<dt><b>R-12374-37755-19006-43319-29109-21110-40176-02153</b></dt>
+<dd><p>The locking-mode is either NORMAL or EXCLUSIVE.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-12374-37755-19006-43319-29109-21110-40176-02153'>context</a>, <a href='matrix/matrix_dpragma.html#R-12374-37755-19006-43319-29109-21110-40176-02153'>detail</a>)</i></p></dd>
+
+<dt><b>R-12385-29357-06321-01436-47924-30729-53833-26197</b></dt>
+<dd><p>If any of the sqlite3_bind_*() routines are called with a NULL pointer for the prepared statement or with a prepared statement for which sqlite3_step() has been called more recently than sqlite3_reset(), then the call will return SQLITE_MISUSE.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-12385-29357-06321-01436-47924-30729-53833-26197'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-12385-29357-06321-01436-47924-30729-53833-26197'>detail</a>)</i></p></dd>
+
+<dt><b>R-12410-31217-15113-45152-04874-52421-25880-35478</b></dt>
+<dd><p>This mode works the same way as SQLITE_CHECKPOINT_FULL with the addition that after checkpointing the log file it blocks (calls the busy-handler callback) until all readers are reading from the database file only.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-12410-31217-15113-45152-04874-52421-25880-35478'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-12410-31217-15113-45152-04874-52421-25880-35478'>detail</a>)</i></p></dd>
+
+<dt><b>R-12452-54941-39354-45567-09766-62540-46508-43420</b></dt>
+<dd><p>Note that case insensitivity only applies to latin1 characters - basically the upper and lower case letters of English in the lower 127 byte codes of ASCII.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, checked-by: th3/cov1/pragma02.test, matrix: <a href='matrix/optoverview.html#R-12452-54941-39354-45567-09766-62540-46508-43420'>context</a>, <a href='matrix/matrix_doptoverview.html#R-12452-54941-39354-45567-09766-62540-46508-43420'>detail</a>)</i></p></dd>
+
+<dt><b>R-12482-18070-30469-35511-31025-38188-23401-30246</b></dt>
+<dd><p>Extension loading must be enabled using sqlite3_enable_load_extension() or sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION,1,NULL) prior to calling this API, otherwise an error will be returned.
+<i>(source: <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>, matrix: <a href='matrix/c3ref/load_extension.html#R-12482-18070-30469-35511-31025-38188-23401-30246'>context</a>, <a href='matrix/matrix_dload_extension.html#R-12482-18070-30469-35511-31025-38188-23401-30246'>detail</a>)</i></p></dd>
+
+<dt><b>R-12507-28763-48132-30913-24133-27495-38799-45736</b></dt>
+<dd><p>PRAGMA foreign_key_list(table-name); This pragma returns one row for each foreign key constraint created by a REFERENCES clause in the CREATE TABLE statement of table "table-name".
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma17.test, matrix: <a href='matrix/pragma.html#R-12507-28763-48132-30913-24133-27495-38799-45736'>context</a>, <a href='matrix/matrix_dpragma.html#R-12507-28763-48132-30913-24133-27495-38799-45736'>detail</a>)</i></p></dd>
+
+<dt><b>R-12525-60165-32842-37850-04403-38425-48242-20323</b></dt>
+<dd><p>In every case the first argument is a pointer to the prepared statement that is being evaluated (the sqlite3_stmt* that was returned from sqlite3_prepare_v2() or one of its variants) and the second argument is the index of the column for which information should be returned.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, th3/req1/column02.test, th3/req1/column03.test, matrix: <a href='matrix/c3ref/column_blob.html#R-12525-60165-32842-37850-04403-38425-48242-20323'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-12525-60165-32842-37850-04403-38425-48242-20323'>detail</a>)</i></p></dd>
+
+<dt><b>R-12526-56546-27211-20254-24569-61288-04911-18504</b></dt>
+<dd><p>When auto-vacuum is disabled and data is deleted data from a database, the database file remains the same size.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-12526-56546-27211-20254-24569-61288-04911-18504'>context</a>, <a href='matrix/matrix_dpragma.html#R-12526-56546-27211-20254-24569-61288-04911-18504'>detail</a>)</i></p></dd>
+
+<dt><b>R-12527-00403-29905-17103-05546-05821-61371-29057</b></dt>
+<dd><p>If a NOT NULL constraint violation occurs, the REPLACE conflict resolution replaces the NULL value with the default value for that column, or if the column has no default value, then the ABORT algorithm is used.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict02.test, matrix: <a href='matrix/lang_conflict.html#R-12527-00403-29905-17103-05546-05821-61371-29057'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-12527-00403-29905-17103-05546-05821-61371-29057'>detail</a>)</i></p></dd>
+
+<dt><b>R-12556-35327-19465-37938-14363-50325-55527-10605</b></dt>
+<dd><p>The rollback hook is invoked on a rollback that results from a commit hook returning non-zero, just as it would be with any other rollback.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-12556-35327-19465-37938-14363-50325-55527-10605'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-12556-35327-19465-37938-14363-50325-55527-10605'>detail</a>)</i></p></dd>
+
+<dt><b>R-12572-62501-53672-53219-61722-28742-24509-13424</b></dt>
+<dd><p>If the default value of the column is a constant NULL, text, blob or signed-number value, then that value is used directly in the new row.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-12572-62501-53672-53219-61722-28742-24509-13424'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-12572-62501-53672-53219-61722-28742-24509-13424'>detail</a>)</i></p></dd>
+
+<dt><b>R-12576-53774-15482-62453-08322-32739-63345-41890</b></dt>
+<dd><p>The byte-order specified by the BOM at the beginning of the text overrides the byte-order specified by the interface procedure.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, matrix: <a href='matrix/c3ref/result_blob.html#R-12576-53774-15482-62453-08322-32739-63345-41890'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-12576-53774-15482-62453-08322-32739-63345-41890'>detail</a>)</i></p></dd>
+
+<dt><b>R-12597-09253-01914-52695-40165-57043-34342-03657</b></dt>
+<dd><p>If no WHEN clause is supplied, the SQL statements are executed every time the trigger fires.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-12597-09253-01914-52695-40165-57043-34342-03657'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-12597-09253-01914-52695-40165-57043-34342-03657'>detail</a>)</i></p></dd>
+
+<dt><b>R-12598-40983-37822-03408-00608-51890-59841-03948</b></dt>
+<dd><p>The values returned by sqlite3_column_bytes() and sqlite3_column_bytes16() do not include the zero terminators at the end of the string.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-12598-40983-37822-03408-00608-51890-59841-03948'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-12598-40983-37822-03408-00608-51890-59841-03948'>detail</a>)</i></p></dd>
+
+<dt><b>R-12600-09115-43578-46772-34145-03685-53603-16884</b></dt>
+<dd><p>This option is used to enable or disable views.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: th3/cov1/view02.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-12600-09115-43578-46772-34145-03685-53603-16884'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-12600-09115-43578-46772-34145-03685-53603-16884'>detail</a>)</i></p></dd>
+
+<dt><b>R-12600-63516-31676-50915-37777-55444-55354-15121</b></dt>
+<dd><p>The cache sharing mode set by this interface effects all subsequent calls to sqlite3_open(), sqlite3_open_v2(), and sqlite3_open16(). Existing database connections continue to use the sharing mode that was in effect at the time they were opened.
+<i>(source: <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>, matrix: <a href='matrix/c3ref/enable_shared_cache.html#R-12600-63516-31676-50915-37777-55444-55354-15121'>context</a>, <a href='matrix/matrix_denable_shared_cache.html#R-12600-63516-31676-50915-37777-55444-55354-15121'>detail</a>)</i></p></dd>
+
+<dt><b>R-12621-54688-01749-38007-62215-41521-15622-18085</b></dt>
+<dd><p>The order of the entries indicates the nesting order.
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-12621-54688-01749-38007-62215-41521-15622-18085'>context</a>, <a href='matrix/matrix_deqp.html#R-12621-54688-01749-38007-62215-41521-15622-18085'>detail</a>)</i></p></dd>
+
+<dt><b>R-12628-51384-03932-15263-35503-59702-54474-35956</b></dt>
+<dd><p>For example, 0x1234 means the same as 4660 and 0x8000000000000000 means the same as -9223372036854775808.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr01.test, matrix: <a href='matrix/lang_expr.html#R-12628-51384-03932-15263-35503-59702-54474-35956'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-12628-51384-03932-15263-35503-59702-54474-35956'>detail</a>)</i></p></dd>
+
+<dt><b>R-12643-30541-59599-14693-16305-56231-57085-12905</b></dt>
+<dd><p>The incremental blob I/O mechanism does not work for WITHOUT ROWID tables.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/vdbeblob01.test, matrix: <a href='matrix/withoutrowid.html#R-12643-30541-59599-14693-16305-56231-57085-12905'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-12643-30541-59599-14693-16305-56231-57085-12905'>detail</a>)</i></p></dd>
+
+<dt><b>R-12645-39772-05350-58220-21808-12776-02132-01190</b></dt>
+<dd><p>Or, if a constraint definition does not include a conflict-clause or it is a CHECK constraint, the default conflict resolution algorithm is ABORT.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-12645-39772-05350-58220-21808-12776-02132-01190'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-12645-39772-05350-58220-21808-12776-02132-01190'>detail</a>)</i></p></dd>
+
+<dt><b>R-12670-39947-34778-58945-43914-57818-35055-57037</b></dt>
+<dd><p>Again, in this case the call to sqlite3_backup_step() can be retried later on.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-12670-39947-34778-58945-43914-57818-35055-57037'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-12670-39947-34778-58945-43914-57818-35055-57037'>detail</a>)</i></p></dd>
+
+<dt><b>R-12720-41494-41537-21978-20786-40223-25082-25767</b></dt>
+<dd><p>Mathematical operators (+, -, *, /, %, <<, >>, &, and |) interpret both operands as if they were numbers. STRING or BLOB operands automatically convert into REAL or INTEGER values.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_06.test, matrix: <a href='matrix/datatype3.html#R-12720-41494-41537-21978-20786-40223-25082-25767'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-12720-41494-41537-21978-20786-40223-25082-25767'>detail</a>)</i></p></dd>
+
+<dt><b>R-12722-60883-17939-30379-04776-48495-16635-34994</b></dt>
+<dd><p>The P argument is a pointer to the prepared statement and the X argument points to a 64-bit integer which is the estimated of the number of nanosecond that the prepared statement took to run.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-12722-60883-17939-30379-04776-48495-16635-34994'>context</a>, <a href='matrix/matrix_dc_trace.html#R-12722-60883-17939-30379-04776-48495-16635-34994'>detail</a>)</i></p></dd>
+
+<dt><b>R-12723-08526-08318-37597-13416-02611-20506-59607</b></dt>
+<dd><p>SQLITE_LIMIT_EXPR_DEPTH The maximum depth of the parse tree on any expression.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: tcl/sqllimits1.test, th3/req1/limit02.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-12723-08526-08318-37597-13416-02611-20506-59607'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-12723-08526-08318-37597-13416-02611-20506-59607'>detail</a>)</i></p></dd>
+
+<dt><b>R-12747-43999-37880-44715-10819-05870-41962-30541</b></dt>
+<dd><p>A VALUES clause cannot be followed by ORDER BY.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-12747-43999-37880-44715-10819-05870-41962-30541'>context</a>, <a href='matrix/matrix_dlang_select.html#R-12747-43999-37880-44715-10819-05870-41962-30541'>detail</a>)</i></p></dd>
+
+<dt><b>R-12782-61841-54063-57500-26369-54791-20214-34360</b></dt>
+<dd><p>To mark a foreign key constraint as deferred, its declaration must include the following clause: DEFERRABLE INITIALLY DEFERRED -- A deferred foreign key constraint
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys12.test, matrix: <a href='matrix/foreignkeys.html#R-12782-61841-54063-57500-26369-54791-20214-34360'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-12782-61841-54063-57500-26369-54791-20214-34360'>detail</a>)</i></p></dd>
+
+<dt><b>R-12786-00766-63482-41386-10445-23868-47532-37384</b></dt>
+<dd><p>The full amount of memory used by the schemas is reported, even if the schema memory is shared with other database connections due to shared cache mode being enabled.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: th3/req1/dbstatus02.test, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-12786-00766-63482-41386-10445-23868-47532-37384'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-12786-00766-63482-41386-10445-23868-47532-37384'>detail</a>)</i></p></dd>
+
+<dt><b>R-12793-43283-00395-32420-06808-58269-41877-63577</b></dt>
+<dd><p>Every value in SQLite has one of five fundamental datatypes: 64-bit signed integer 64-bit IEEE floating point number string BLOB NULL
+<i>(source: <a href="c3ref/c_blob.html">c3ref/c_blob.html</a>, checked-by: src/vdbeapi.c, tcl/capi3.test, th3/req1/column01.test, matrix: <a href='matrix/c3ref/c_blob.html#R-12793-43283-00395-32420-06808-58269-41877-63577'>context</a>, <a href='matrix/matrix_dc_blob.html#R-12793-43283-00395-32420-06808-58269-41877-63577'>detail</a>)</i></p></dd>
+
+<dt><b>R-12804-26213-16166-58523-53387-54270-64862-30854</b></dt>
+<dd><p>The highest recorded value is returned in *pHighwater.
+<i>(source: <a href="c3ref/status.html">c3ref/status.html</a>, matrix: <a href='matrix/c3ref/status.html#R-12804-26213-16166-58523-53387-54270-64862-30854'>context</a>, <a href='matrix/matrix_dstatus.html#R-12804-26213-16166-58523-53387-54270-64862-30854'>detail</a>)</i></p></dd>
+
+<dt><b>R-12823-37176-29858-38232-19401-37371-04323-52385</b></dt>
+<dd><p>The query above will quickly locate all zipcodes that contain the SQLite main office in their bounding box, even if the R*Tree contains many entries.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-12823-37176-29858-38232-19401-37371-04323-52385'>context</a>, <a href='matrix/matrix_drtree.html#R-12823-37176-29858-38232-19401-37371-04323-52385'>detail</a>)</i></p></dd>
+
+<dt><b>R-12830-59321-61911-43156-38228-08390-44545-62549</b></dt>
+<dd><p>The RELEASE command starts with the most recent addition to the transaction stack and releases savepoints backwards in time until it releases a savepoint with a matching savepoint-name.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-12830-59321-61911-43156-38228-08390-44545-62549'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-12830-59321-61911-43156-38228-08390-44545-62549'>detail</a>)</i></p></dd>
+
+<dt><b>R-12831-20703-43607-22542-46423-65070-13678-01417</b></dt>
+<dd><p>The query string consists of text following the first "?" character but excluding the optional fragment that begins with "#".
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-12831-20703-43607-22542-46423-65070-13678-01417'>context</a>, <a href='matrix/matrix_duri.html#R-12831-20703-43607-22542-46423-65070-13678-01417'>detail</a>)</i></p></dd>
+
+<dt><b>R-12881-55998-05997-62769-52407-41437-37652-18188</b></dt>
+<dd><p>When query results are sorted by an ORDER BY clause, values with storage class NULL come first, followed by INTEGER and REAL values interspersed in numeric order, followed by TEXT values in collating sequence order, and finally BLOB values in memcmp() order.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_04.test, matrix: <a href='matrix/datatype3.html#R-12881-55998-05997-62769-52407-41437-37652-18188'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-12881-55998-05997-62769-52407-41437-37652-18188'>detail</a>)</i></p></dd>
+
+<dt><b>R-12895-64156-28673-05493-20672-24033-21713-05965</b></dt>
+<dd><p>Inner joins to the left and right of the outer join might be reordered if the optimizer thinks that is advantageous but the outer joins are always evaluated in the order in which they occur.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-12895-64156-28673-05493-20672-24033-21713-05965'>context</a>, <a href='matrix/matrix_doptoverview.html#R-12895-64156-28673-05493-20672-24033-21713-05965'>detail</a>)</i></p></dd>
+
+<dt><b>R-12940-37052-20666-01661-57871-26003-21807-26945</b></dt>
+<dd><p>SQLITE_LIMIT_LIKE_PATTERN_LENGTH The maximum length of the pattern argument to the LIKE or GLOB operators.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: tcl/sqllimits1.test, th3/req1/limit02.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-12940-37052-20666-01661-57871-26003-21807-26945'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-12940-37052-20666-01661-57871-26003-21807-26945'>detail</a>)</i></p></dd>
+
+<dt><b>R-12976-22893-11163-42545-13145-11346-20238-07010</b></dt>
+<dd><p>Value is the integer 0.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-12976-22893-11163-42545-13145-11346-20238-07010'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-12976-22893-11163-42545-13145-11346-20238-07010'>detail</a>)</i></p></dd>
+
+<dt><b>R-12993-07777-64601-19102-35955-36137-03402-56962</b></dt>
+<dd><p>When multiple implementations of the same function are available, SQLite will pick the one that involves the least amount of data conversion.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc04.test, matrix: <a href='matrix/c3ref/create_function.html#R-12993-07777-64601-19102-35955-36137-03402-56962'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-12993-07777-64601-19102-35955-36137-03402-56962'>detail</a>)</i></p></dd>
+
+<dt><b>R-13024-05443-37707-54511-29409-48512-10836-53316</b></dt>
+<dd><p>Unrecognized arguments are silently ignored.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-13024-05443-37707-54511-29409-48512-10836-53316'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-13024-05443-37707-54511-29409-48512-10836-53316'>detail</a>)</i></p></dd>
+
+<dt><b>R-13053-11096-22952-42489-44628-35475-18449-44243</b></dt>
+<dd><p>The maximum value is the value that would be returned last in an ORDER BY on the same column.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-13053-11096-22952-42489-44628-35475-18449-44243'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-13053-11096-22952-42489-44628-35475-18449-44243'>detail</a>)</i></p></dd>
+
+<dt><b>R-13057-33448-09671-56974-58075-51862-56508-46386</b></dt>
+<dd><p>The number of columns in an index is limited to the value set by sqlite3_limit(SQLITE_LIMIT_COLUMN,...).
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx03.test, matrix: <a href='matrix/lang_createindex.html#R-13057-33448-09671-56974-58075-51862-56508-46386'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-13057-33448-09671-56974-58075-51862-56508-46386'>detail</a>)</i></p></dd>
+
+<dt><b>R-13091-00020-15519-35390-14824-01225-60609-32585</b></dt>
+<dd><p>Note that the authorizer callback is invoked only during sqlite3_prepare() or its variants.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, matrix: <a href='matrix/c3ref/set_authorizer.html#R-13091-00020-15519-35390-14824-01225-60609-32585'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-13091-00020-15519-35390-14824-01225-60609-32585'>detail</a>)</i></p></dd>
+
+<dt><b>R-13116-43655-17420-11723-30506-15977-20565-12123</b></dt>
+<dd><p>The RETURNING clause only returns rows that are directly modified by the DELETE, INSERT, or UPDATE statement.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning04.test, matrix: <a href='matrix/lang_returning.html#R-13116-43655-17420-11723-30506-15977-20565-12123'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-13116-43655-17420-11723-30506-15977-20565-12123'>detail</a>)</i></p></dd>
+
+<dt><b>R-13160-27901-08319-02808-35967-30729-30833-45529</b></dt>
+<dd><p>A function where the encoding difference is between UTF16le and UTF16be is a closer match than a function where the encoding difference is between UTF8 and UTF16.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc04.test, matrix: <a href='matrix/c3ref/create_function.html#R-13160-27901-08319-02808-35967-30729-30833-45529'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-13160-27901-08319-02808-35967-30729-30833-45529'>detail</a>)</i></p></dd>
+
+<dt><b>R-13161-58512-18507-02027-33184-52817-40400-65254</b></dt>
+<dd><p>The subquery and the outer query do not both have ORDER BY clauses.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-13161-58512-18507-02027-33184-52817-40400-65254'>context</a>, <a href='matrix/matrix_doptoverview.html#R-13161-58512-18507-02027-33184-52817-40400-65254'>detail</a>)</i></p></dd>
+
+<dt><b>R-13164-16564-32961-63761-40355-01269-15862-60679</b></dt>
+<dd><p>Otherwise, if no error occurs, sqlite3_db_cacheflush() returns SQLITE_OK.
+<i>(source: <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>, matrix: <a href='matrix/c3ref/db_cacheflush.html#R-13164-16564-32961-63761-40355-01269-15862-60679'>context</a>, <a href='matrix/matrix_ddb_cacheflush.html#R-13164-16564-32961-63761-40355-01269-15862-60679'>detail</a>)</i></p></dd>
+
+<dt><b>R-13183-30817-63475-03286-24149-37029-58658-28178</b></dt>
+<dd><p>Parameters of the form "?" without a following integer have no name and are referred to as "nameless" or "anonymous parameters".
+<i>(source: <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>, checked-by: th3/req1/bind04.test, matrix: <a href='matrix/c3ref/bind_parameter_name.html#R-13183-30817-63475-03286-24149-37029-58658-28178'>context</a>, <a href='matrix/matrix_dbind_parameter_name.html#R-13183-30817-63475-03286-24149-37029-58658-28178'>detail</a>)</i></p></dd>
+
+<dt><b>R-13199-64588-45721-29417-06985-29231-64898-26576</b></dt>
+<dd><p>No error is returned for uniqueness, NOT NULL, and UNIQUE constraint errors when the IGNORE conflict resolution algorithm is used.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict01.test, matrix: <a href='matrix/lang_conflict.html#R-13199-64588-45721-29417-06985-29231-64898-26576'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-13199-64588-45721-29417-06985-29231-64898-26576'>detail</a>)</i></p></dd>
+
+<dt><b>R-13210-09522-30167-47682-54328-15503-65010-64185</b></dt>
+<dd><p>Each entry in the table b-tree corresponds to a row of the SQL table.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-13210-09522-30167-47682-54328-15503-65010-64185'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-13210-09522-30167-47682-54328-15503-65010-64185'>detail</a>)</i></p></dd>
+
+<dt><b>R-13214-54017-56527-15900-43523-22557-52387-44538</b></dt>
+<dd><p>If that entry is a leaf (meaning that it is an actual R*Tree entry and not a subtree) then that entry is returned as one row of the query result.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc3.test, matrix: <a href='matrix/rtree.html#R-13214-54017-56527-15900-43523-22557-52387-44538'>context</a>, <a href='matrix/matrix_drtree.html#R-13214-54017-56527-15900-43523-22557-52387-44538'>detail</a>)</i></p></dd>
+
+<dt><b>R-13245-13613-20612-29669-51853-01593-36495-38547</b></dt>
+<dd><p>SQLITE_BUSY means that the database engine was unable to acquire the database locks it needs to do its job.
+<i>(source: <a href="c3ref/step.html">c3ref/step.html</a>, matrix: <a href='matrix/c3ref/step.html#R-13245-13613-20612-29669-51853-01593-36495-38547'>context</a>, <a href='matrix/matrix_dstep.html#R-13245-13613-20612-29669-51853-01593-36495-38547'>detail</a>)</i></p></dd>
+
+<dt><b>R-13279-06508-34532-04763-41016-09422-12015-14257</b></dt>
+<dd><p>This interface returns a pointer to the next prepared statement after pStmt associated with the database connection pDb.
+<i>(source: <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a>, checked-by: th3/cov1/vdbeapi04.test, matrix: <a href='matrix/c3ref/next_stmt.html#R-13279-06508-34532-04763-41016-09422-12015-14257'>context</a>, <a href='matrix/matrix_dnext_stmt.html#R-13279-06508-34532-04763-41016-09422-12015-14257'>detail</a>)</i></p></dd>
+
+<dt><b>R-13288-53765-24256-39621-08967-42078-48057-53348</b></dt>
+<dd><p>A false return does not guarantee that the statement will change the database file.
+<i>(source: <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>, checked-by: tcl/capi3d.test, th3/cov1/vdbeapi14.test, matrix: <a href='matrix/c3ref/stmt_readonly.html#R-13288-53765-24256-39621-08967-42078-48057-53348'>context</a>, <a href='matrix/matrix_dstmt_readonly.html#R-13288-53765-24256-39621-08967-42078-48057-53348'>detail</a>)</i></p></dd>
+
+<dt><b>R-13307-42286-48132-20191-27230-43917-16761-31093</b></dt>
+<dd><p>The sqlite3_memory_used() routine returns the number of bytes of memory currently outstanding (malloced but not freed).
+<i>(source: <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>, matrix: <a href='matrix/c3ref/memory_highwater.html#R-13307-42286-48132-20191-27230-43917-16761-31093'>context</a>, <a href='matrix/matrix_dmemory_highwater.html#R-13307-42286-48132-20191-27230-43917-16761-31093'>detail</a>)</i></p></dd>
+
+<dt><b>R-13324-20915-18608-14135-49913-18477-24470-37665</b></dt>
+<dd><p>When two BLOB values are compared, the result is determined using memcmp().
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_04.test, matrix: <a href='matrix/datatype3.html#R-13324-20915-18608-14135-49913-18477-24470-37665'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-13324-20915-18608-14135-49913-18477-24470-37665'>detail</a>)</i></p></dd>
+
+<dt><b>R-13337-13961-14137-09012-22007-31627-17736-61931</b></dt>
+<dd><p>If Z is negative then the abs(Z) characters preceding the Y-th character are returned.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-13337-13961-14137-09012-22007-31627-17736-61931'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-13337-13961-14137-09012-22007-31627-17736-61931'>detail</a>)</i></p></dd>
+
+<dt><b>R-13345-31830-42625-35192-25815-10226-10074-63536</b></dt>
+<dd><p>The escape character followed by a percent symbol (%), underscore (_), or a second instance of the escape character itself matches a literal percent symbol, underscore, or a single escape character, respectively.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-13345-31830-42625-35192-25815-10226-10074-63536'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-13345-31830-42625-35192-25815-10226-10074-63536'>detail</a>)</i></p></dd>
+
+<dt><b>R-13381-51663-43618-16606-57611-35526-29566-64189</b></dt>
+<dd><p>PRAGMA pragma_list; This pragma returns a list of PRAGMA commands known to the database connection.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-13381-51663-43618-16606-57611-35526-29566-64189'>context</a>, <a href='matrix/matrix_dpragma.html#R-13381-51663-43618-16606-57611-35526-29566-64189'>detail</a>)</i></p></dd>
+
+<dt><b>R-13406-45695-21963-27018-56776-23450-25791-30015</b></dt>
+<dd><p>If a numeric literal has a decimal point or an exponentiation clause or if it is less than -9223372036854775808 or greater than 9223372036854775807, then it is a floating point literal. Otherwise is it is an integer literal.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr01.test, matrix: <a href='matrix/lang_expr.html#R-13406-45695-21963-27018-56776-23450-25791-30015'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-13406-45695-21963-27018-56776-23450-25791-30015'>detail</a>)</i></p></dd>
+
+<dt><b>R-13435-26311-61176-01189-39199-58705-21930-17615</b></dt>
+<dd><p>Usually, the parent key of a foreign key constraint is the primary key of the parent table. If they are not the primary key, then the parent key columns must be collectively subject to a UNIQUE constraint or have a UNIQUE index.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-13435-26311-61176-01189-39199-58705-21930-17615'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-13435-26311-61176-01189-39199-58705-21930-17615'>detail</a>)</i></p></dd>
+
+<dt><b>R-13439-14752-32196-09382-64767-42844-00603-31803</b></dt>
+<dd><p>The CREATE VIEW command assigns a name to a pre-packaged SELECT statement.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, checked-by: th3/req1/view01.test, matrix: <a href='matrix/lang_createview.html#R-13439-14752-32196-09382-64767-42844-00603-31803'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-13439-14752-32196-09382-64767-42844-00603-31803'>detail</a>)</i></p></dd>
+
+<dt><b>R-13480-46087-00976-25355-37821-19976-64055-41594</b></dt>
+<dd><p>The sqlite3_data_count(P) will return non-zero if previous call to sqlite3_step(P) returned SQLITE_ROW, except in the case of the PRAGMA incremental_vacuum where it always returns zero since each step of that multi-step pragma returns 0 columns of data.
+<i>(source: <a href="c3ref/data_count.html">c3ref/data_count.html</a>, checked-by: th3/req1/datacnt01.test, matrix: <a href='matrix/c3ref/data_count.html#R-13480-46087-00976-25355-37821-19976-64055-41594'>context</a>, <a href='matrix/matrix_ddata_count.html#R-13480-46087-00976-25355-37821-19976-64055-41594'>detail</a>)</i></p></dd>
+
+<dt><b>R-13512-64012-34604-11605-36367-14798-29892-18682</b></dt>
+<dd><p>In a compound SELECT, only the last or right-most simple SELECT may contain a LIMIT clause.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/limit.test, th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-13512-64012-34604-11605-36367-14798-29892-18682'>context</a>, <a href='matrix/matrix_dlang_select.html#R-13512-64012-34604-11605-36367-14798-29892-18682'>detail</a>)</i></p></dd>
+
+<dt><b>R-13523-04394-10297-34543-39920-38715-25686-62539</b></dt>
+<dd><p>The second integer on a freelist trunk page is the number of leaf page pointers to follow.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-13523-04394-10297-34543-39920-38715-25686-62539'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-13523-04394-10297-34543-39920-38715-25686-62539'>detail</a>)</i></p></dd>
+
+<dt><b>R-13547-45635-56676-46930-62295-21423-36076-50678</b></dt>
+<dd><p>The default isolation level for SQLite is SERIALIZABLE.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-13547-45635-56676-46930-62295-21423-36076-50678'>context</a>, <a href='matrix/matrix_dpragma.html#R-13547-45635-56676-46930-62295-21423-36076-50678'>detail</a>)</i></p></dd>
+
+<dt><b>R-13549-01731-45628-33361-33638-05320-24749-58227</b></dt>
+<dd><p>When immutable is set, SQLite assumes that the database file cannot be changed, even by a process with higher privilege, and so the database is opened read-only and all locking and change detection is disabled.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/nolock01.test, matrix: <a href='matrix/c3ref/open.html#R-13549-01731-45628-33361-33638-05320-24749-58227'>context</a>, <a href='matrix/matrix_dopen.html#R-13549-01731-45628-33361-33638-05320-24749-58227'>detail</a>)</i></p></dd>
+
+<dt><b>R-13561-46814-58902-48141-34775-52925-09120-28270</b></dt>
+<dd><p>The sqlite3_result_text(), sqlite3_result_text16(), sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces set the return value of the application-defined function to be a text string which is represented as UTF-8, UTF-16 native byte order, UTF-16 little endian, or UTF-16 big endian, respectively.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result02.test, matrix: <a href='matrix/c3ref/result_blob.html#R-13561-46814-58902-48141-34775-52925-09120-28270'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-13561-46814-58902-48141-34775-52925-09120-28270'>detail</a>)</i></p></dd>
+
+<dt><b>R-13571-45795-18222-46807-04385-60941-40437-40817</b></dt>
+<dd><p>The scalar SQL function rtreecheck(R) or rtreecheck(S,R) runs an integrity check on the rtree table named R contained within database S.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree25.test, matrix: <a href='matrix/rtree.html#R-13571-45795-18222-46807-04385-60941-40437-40817'>context</a>, <a href='matrix/matrix_drtree.html#R-13571-45795-18222-46807-04385-60941-40437-40817'>detail</a>)</i></p></dd>
+
+<dt><b>R-13589-35647-28651-60437-43307-35330-17084-47057</b></dt>
+<dd><p>The user_version pragma will get or set the value of the user-version integer at offset 60 in the database header.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma28.test, matrix: <a href='matrix/pragma.html#R-13589-35647-28651-60437-43307-35330-17084-47057'>context</a>, <a href='matrix/matrix_dpragma.html#R-13589-35647-28651-60437-43307-35330-17084-47057'>detail</a>)</i></p></dd>
+
+<dt><b>R-13591-51789-59523-18205-42201-39107-10748-36836</b></dt>
+<dd><p>Newer versions of SQLite use the in-header database size if it is available but fall back to the actual file size if the in-header database size is not valid.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-13591-51789-59523-18205-42201-39107-10748-36836'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-13591-51789-59523-18205-42201-39107-10748-36836'>detail</a>)</i></p></dd>
+
+<dt><b>R-13615-19528-18270-26667-29979-02127-30381-22829</b></dt>
+<dd><p>A 3-dimensional R*Tree has 7 columns.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-13615-19528-18270-26667-29979-02127-30381-22829'>context</a>, <a href='matrix/matrix_drtree.html#R-13615-19528-18270-26667-29979-02127-30381-22829'>detail</a>)</i></p></dd>
+
+<dt><b>R-13635-51078-58575-05686-24588-25758-48639-24635</b></dt>
+<dd><p>Missing values at the end of the record are filled in using the default value for the corresponding columns defined in the table schema.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-13635-51078-58575-05686-24588-25758-48639-24635'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-13635-51078-58575-05686-24588-25758-48639-24635'>detail</a>)</i></p></dd>
+
+<dt><b>R-13680-39071-55665-32597-06847-40698-32535-24028</b></dt>
+<dd><p>The file change counter is a 4-byte big-endian integer at offset 24 that is incremented whenever the database file is unlocked after having been modified.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-13680-39071-55665-32597-06847-40698-32535-24028'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-13680-39071-55665-32597-06847-40698-32535-24028'>detail</a>)</i></p></dd>
+
+<dt><b>R-13703-05723-52999-40124-40191-09786-58015-46495</b></dt>
+<dd><p>If idx is out of range - less than -1 or greater than or equal to the total number of query elements used to implement the statement - a non-zero value is returned and the variable that pOut points to is unchanged.
+<i>(source: <a href="c3ref/stmt_scanstatus.html">c3ref/stmt_scanstatus.html</a>, matrix: <a href='matrix/c3ref/stmt_scanstatus.html#R-13703-05723-52999-40124-40191-09786-58015-46495'>context</a>, <a href='matrix/matrix_dstmt_scanstatus.html#R-13703-05723-52999-40124-40191-09786-58015-46495'>detail</a>)</i></p></dd>
+
+<dt><b>R-13748-40725-63284-41855-27070-22763-27401-30101</b></dt>
+<dd><p>The current value of the requested counter is returned.
+<i>(source: <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a>, matrix: <a href='matrix/c3ref/stmt_status.html#R-13748-40725-63284-41855-27070-22763-27401-30101'>context</a>, <a href='matrix/matrix_dstmt_status.html#R-13748-40725-63284-41855-27070-22763-27401-30101'>detail</a>)</i></p></dd>
+
+<dt><b>R-13776-21310-53568-57098-48778-28371-47670-31301</b></dt>
+<dd><p>The count(*) function (with no arguments) returns the total number of rows in the group.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-13776-21310-53568-57098-48778-28371-47670-31301'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-13776-21310-53568-57098-48778-28371-47670-31301'>detail</a>)</i></p></dd>
+
+<dt><b>R-13779-07711-12405-44335-29719-17285-28240-52263</b></dt>
+<dd><p>As long as exactly one connection is using a shared-memory wal-index, the locking mode can be changed freely between NORMAL and EXCLUSIVE.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, th3/req1/pragma05.test, matrix: <a href='matrix/wal.html#R-13779-07711-12405-44335-29719-17285-28240-52263'>context</a>, <a href='matrix/matrix_dwal.html#R-13779-07711-12405-44335-29719-17285-28240-52263'>detail</a>)</i></p></dd>
+
+<dt><b>R-13793-11620-18643-36656-33877-44501-53404-27731</b></dt>
+<dd><p>For clarity: the values returned by sqlite3_column_bytes() and sqlite3_column_bytes16() are the number of bytes in the string, not the number of characters.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-13793-11620-18643-36656-33877-44501-53404-27731'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-13793-11620-18643-36656-33877-44501-53404-27731'>detail</a>)</i></p></dd>
+
+<dt><b>R-13829-63101-23800-05196-00308-40723-07917-23521</b></dt>
+<dd><p>The sqlite_schema.sql column stores SQL text that describes the object. This SQL text is a CREATE TABLE, CREATE VIRTUAL TABLE, CREATE INDEX, CREATE VIEW, or CREATE TRIGGER statement that if evaluated against the database file when it is the main database of a database connection would recreate the object.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-13829-63101-23800-05196-00308-40723-07917-23521'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-13829-63101-23800-05196-00308-40723-07917-23521'>detail</a>)</i></p></dd>
+
+<dt><b>R-13844-15873-15285-53366-38279-55189-17563-43149</b></dt>
+<dd><p>unless the cell is on the root node, that the cell is bounded by the parent cell on the parent node.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree25.test, matrix: <a href='matrix/rtree.html#R-13844-15873-15285-53366-38279-55189-17563-43149'>context</a>, <a href='matrix/matrix_drtree.html#R-13844-15873-15285-53366-38279-55189-17563-43149'>detail</a>)</i></p></dd>
+
+<dt><b>R-13846-35797-43647-43739-38644-55287-36020-16236</b></dt>
+<dd><p>The random() function returns a pseudo-random integer between -9223372036854775808 and +9223372036854775807.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-13846-35797-43647-43739-38644-55287-36020-16236'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-13846-35797-43647-43739-38644-55287-36020-16236'>detail</a>)</i></p></dd>
+
+<dt><b>R-13861-56665-11866-23865-35263-00368-63176-40609</b></dt>
+<dd><p>PRAGMA schema.cache_size; PRAGMA schema.cache_size = pages; PRAGMA schema.cache_size = -kibibytes; Query or change the suggested maximum number of database disk pages that SQLite will hold in memory at once per open database file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma09.test, matrix: <a href='matrix/pragma.html#R-13861-56665-11866-23865-35263-00368-63176-40609'>context</a>, <a href='matrix/matrix_dpragma.html#R-13861-56665-11866-23865-35263-00368-63176-40609'>detail</a>)</i></p></dd>
+
+<dt><b>R-13870-45783-04772-14716-53904-46370-14954-15973</b></dt>
+<dd><p>The sqlite3_load_extension() interface attempts to load an SQLite extension library contained in the file zFile.
+<i>(source: <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>, matrix: <a href='matrix/c3ref/load_extension.html#R-13870-45783-04772-14716-53904-46370-14954-15973'>context</a>, <a href='matrix/matrix_dload_extension.html#R-13870-45783-04772-14716-53904-46370-14954-15973'>detail</a>)</i></p></dd>
+
+<dt><b>R-13876-13274-06329-28290-52708-34927-05709-26395</b></dt>
+<dd><p>If foreign key constraints are enabled and a column with a REFERENCES clause is added, the column must have a default value of NULL.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/req1/altertable01.test, matrix: <a href='matrix/lang_altertable.html#R-13876-13274-06329-28290-52708-34927-05709-26395'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-13876-13274-06329-28290-52708-34927-05709-26395'>detail</a>)</i></p></dd>
+
+<dt><b>R-13877-64542-39833-15687-62784-10394-38782-49019</b></dt>
+<dd><p>For an "ON UPDATE CASCADE" action, it means that the values stored in each dependent child key are modified to match the new parent key values.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-13877-64542-39833-15687-62784-10394-38782-49019'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-13877-64542-39833-15687-62784-10394-38782-49019'>detail</a>)</i></p></dd>
+
+<dt><b>R-13901-14007-64763-25986-03152-23899-30045-21244</b></dt>
+<dd><p>The string returned by sqlite3_expanded_sql(P), on the other hand, is obtained from sqlite3_malloc() and must be freed by the application by passing it to sqlite3_free().
+<i>(source: <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>, checked-by: th3/req1/sql01.test, matrix: <a href='matrix/c3ref/expanded_sql.html#R-13901-14007-64763-25986-03152-23899-30045-21244'>context</a>, <a href='matrix/matrix_dexpanded_sql.html#R-13901-14007-64763-25986-03152-23899-30045-21244'>detail</a>)</i></p></dd>
+
+<dt><b>R-13903-46567-21188-22822-60227-64496-63410-06513</b></dt>
+<dd><p>This means that when VACUUMing a database, as much as twice the size of the original database file is required in free disk space.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, matrix: <a href='matrix/lang_vacuum.html#R-13903-46567-21188-22822-60227-64496-63410-06513'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-13903-46567-21188-22822-60227-64496-63410-06513'>detail</a>)</i></p></dd>
+
+<dt><b>R-13942-56227-29182-17952-26079-42982-33569-18657</b></dt>
+<dd><p>If the callback returns zero, then no autovacuum happens.
+<i>(source: <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a>, checked-by: th3/cov1/autovac01.test, matrix: <a href='matrix/c3ref/autovacuum_pages.html#R-13942-56227-29182-17952-26079-42982-33569-18657'>context</a>, <a href='matrix/matrix_dautovacuum_pages.html#R-13942-56227-29182-17952-26079-42982-33569-18657'>detail</a>)</i></p></dd>
+
+<dt><b>R-13943-13592-05756-02149-18071-59821-47409-19193</b></dt>
+<dd><p>A NULL result is considered untrue when evaluating WHEN terms.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-13943-13592-05756-02149-18071-59821-47409-19193'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-13943-13592-05756-02149-18071-59821-47409-19193'>detail</a>)</i></p></dd>
+
+<dt><b>R-13981-28768-38524-42691-40554-58455-18349-16495</b></dt>
+<dd><p>And a 5-dimensional R*Tree has 11 columns.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-13981-28768-38524-42691-40554-58455-18349-16495'>context</a>, <a href='matrix/matrix_drtree.html#R-13981-28768-38524-42691-40554-58455-18349-16495'>detail</a>)</i></p></dd>
+
+<dt><b>R-13991-38016-24642-53092-34129-28214-25020-08984</b></dt>
+<dd><p>A SELECT statement will always have a positive sqlite3_column_count() but depending on the WHERE clause constraints and the table content, it might return no rows.
+<i>(source: <a href="c3ref/column_count.html">c3ref/column_count.html</a>, matrix: <a href='matrix/c3ref/column_count.html#R-13991-38016-24642-53092-34129-28214-25020-08984'>context</a>, <a href='matrix/matrix_dcolumn_count.html#R-13991-38016-24642-53092-34129-28214-25020-08984'>detail</a>)</i></p></dd>
+
+<dt><b>R-14014-59687-26564-37068-45971-48448-09846-38995</b></dt>
+<dd><p>No affinity is applied to comparison operands for the implicit comparisons associated with UNION, INTERSECT, or EXCEPT - the values are compared as is.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_07.test, matrix: <a href='matrix/datatype3.html#R-14014-59687-26564-37068-45971-48448-09846-38995'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-14014-59687-26564-37068-45971-48448-09846-38995'>detail</a>)</i></p></dd>
+
+<dt><b>R-14034-00929-27099-16044-59671-40921-25544-35067</b></dt>
+<dd><p>If an error code is returned, that error will propagate back up through the SQLite code base to cause the statement that provoked the callback to report an error, though the commit will have still occurred.
+<i>(source: <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>, checked-by: tcl/e_walhook.test, matrix: <a href='matrix/c3ref/wal_hook.html#R-14034-00929-27099-16044-59671-40921-25544-35067'>context</a>, <a href='matrix/matrix_dwal_hook.html#R-14034-00929-27099-16044-59671-40921-25544-35067'>detail</a>)</i></p></dd>
+
+<dt><b>R-14054-28168-18904-50700-49610-53857-56121-06395</b></dt>
+<dd><p>The special encoding rules for columns with REAL affinity apply to WITHOUT ROWID tables the same as they do with rowid tables.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-14054-28168-18904-50700-49610-53857-56121-06395'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-14054-28168-18904-50700-49610-53857-56121-06395'>detail</a>)</i></p></dd>
+
+<dt><b>R-14068-49671-08903-14280-45288-40590-58798-59213</b></dt>
+<dd><p>Parameters that are not assigned values using sqlite3_bind() are treated as NULL.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-14068-49671-08903-14280-45288-40590-58798-59213'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-14068-49671-08903-14280-45288-40590-58798-59213'>detail</a>)</i></p></dd>
+
+<dt><b>R-14099-28081-41654-53120-44875-00301-46355-06140</b></dt>
+<dd><p>If the commit hook returns non-zero, then the COMMIT is converted into a ROLLBACK.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-14099-28081-41654-53120-44875-00301-46355-06140'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-14099-28081-41654-53120-44875-00301-46355-06140'>detail</a>)</i></p></dd>
+
+<dt><b>R-14168-07579-40145-07578-27946-11279-56601-46509</b></dt>
+<dd><p>If there is no ELSE expression and none of the WHEN expressions are true, then the overall result is NULL.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-14168-07579-40145-07578-27946-11279-56601-46509'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-14168-07579-40145-07578-27946-11279-56601-46509'>detail</a>)</i></p></dd>
+
+<dt><b>R-14174-63475-36300-18663-27828-32664-44187-42924</b></dt>
+<dd><p>If any other error occurs while flushing dirty pages to disk (for example an IO error or out-of-memory condition), then processing is abandoned and an SQLite error code is returned to the caller immediately.
+<i>(source: <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>, matrix: <a href='matrix/c3ref/db_cacheflush.html#R-14174-63475-36300-18663-27828-32664-44187-42924'>context</a>, <a href='matrix/matrix_ddb_cacheflush.html#R-14174-63475-36300-18663-27828-32664-44187-42924'>detail</a>)</i></p></dd>
+
+<dt><b>R-14184-13732-63564-17158-02009-26231-20937-39061</b></dt>
+<dd><p>The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes a pointer to the underlying sqlite3_file object to be written into the space pointed to by the 4th parameter.
+<i>(source: <a href="c3ref/file_control.html">c3ref/file_control.html</a>, matrix: <a href='matrix/c3ref/file_control.html#R-14184-13732-63564-17158-02009-26231-20937-39061'>context</a>, <a href='matrix/matrix_dfile_control.html#R-14184-13732-63564-17158-02009-26231-20937-39061'>detail</a>)</i></p></dd>
+
+<dt><b>R-14195-12074-64677-06793-17072-43123-33020-17925</b></dt>
+<dd><p>PRAGMA recursive_triggers; PRAGMA recursive_triggers = boolean; Query, set, or clear the recursive trigger capability.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-14195-12074-64677-06793-17072-43123-33020-17925'>context</a>, <a href='matrix/matrix_dpragma.html#R-14195-12074-64677-06793-17072-43123-33020-17925'>detail</a>)</i></p></dd>
+
+<dt><b>R-14208-23986-02817-62350-58798-64603-05852-18001</b></dt>
+<dd><p>If foreign key constraints are enabled when it is prepared, the DROP TABLE command performs an implicit DELETE to remove all rows from the table before dropping it.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, th3/req1/foreignkeys22.test, matrix: <a href='matrix/foreignkeys.html#R-14208-23986-02817-62350-58798-64603-05852-18001'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-14208-23986-02817-62350-58798-64603-05852-18001'>detail</a>)</i></p></dd>
+
+<dt><b>R-14213-41276-38760-54552-34093-20752-64281-40652</b></dt>
+<dd><p>If the function pointer is NULL, the sqlite3_log() interface becomes a no-op.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/cov1/log01.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-14213-41276-38760-54552-34093-20752-64281-40652'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-14213-41276-38760-54552-34093-20752-64281-40652'>detail</a>)</i></p></dd>
+
+<dt><b>R-14222-20715-36794-58646-49579-04398-47433-20385</b></dt>
+<dd><p>Any attempt to create a function with a longer name will result in SQLITE_MISUSE being returned.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc01.test, matrix: <a href='matrix/c3ref/create_function.html#R-14222-20715-36794-58646-49579-04398-47433-20385'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-14222-20715-36794-58646-49579-04398-47433-20385'>detail</a>)</i></p></dd>
+
+<dt><b>R-14302-38934-55936-51388-09326-06316-22131-13547</b></dt>
+<dd><p>The new column may take any of the forms permissible in a CREATE TABLE statement, with the following restrictions:
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/req1/altertable01.test, matrix: <a href='matrix/lang_altertable.html#R-14302-38934-55936-51388-09326-06316-22131-13547'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-14302-38934-55936-51388-09326-06316-22131-13547'>detail</a>)</i></p></dd>
+
+<dt><b>R-14303-42483-31616-40850-13979-44263-42291-56182</b></dt>
+<dd><p>If database zDb is the name of an attached database that is not in WAL mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-14303-42483-31616-40850-13979-44263-42291-56182'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-14303-42483-31616-40850-13979-44263-42291-56182'>detail</a>)</i></p></dd>
+
+<dt><b>R-14310-64553-52878-24653-31344-14066-48757-18483</b></dt>
+<dd><p>1 if the index-column is a key column and 0 if the index-column is an auxiliary column.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15x.test, matrix: <a href='matrix/pragma.html#R-14310-64553-52878-24653-31344-14066-48757-18483'>context</a>, <a href='matrix/matrix_dpragma.html#R-14310-64553-52878-24653-31344-14066-48757-18483'>detail</a>)</i></p></dd>
+
+<dt><b>R-14349-34154-22313-18444-03285-54966-26711-64366</b></dt>
+<dd><p>Note that the order of the rules for determining column affinity is important.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-14349-34154-22313-18444-03285-54966-26711-64366'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-14349-34154-22313-18444-03285-54966-26711-64366'>detail</a>)</i></p></dd>
+
+<dt><b>R-14350-06824-15886-23716-53356-08607-64991-22845</b></dt>
+<dd><p>If write-ahead log mode is disabled, this pragma is a harmless no-op.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma29.test, matrix: <a href='matrix/pragma.html#R-14350-06824-15886-23716-53356-08607-64991-22845'>context</a>, <a href='matrix/matrix_dpragma.html#R-14350-06824-15886-23716-53356-08607-64991-22845'>detail</a>)</i></p></dd>
+
+<dt><b>R-14350-55458-23472-59439-25847-10170-60896-21467</b></dt>
+<dd><p>If no successful INSERTs into rowid tables have ever occurred on the database connection D, then sqlite3_last_insert_rowid(D) returns zero.
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, checked-by: th3/cov1/withoutrowid01.test, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-14350-55458-23472-59439-25847-10170-60896-21467'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-14350-55458-23472-59439-25847-10170-60896-21467'>detail</a>)</i></p></dd>
+
+<dt><b>R-14374-42468-63596-09513-53214-31321-61248-26314</b></dt>
+<dd><p>This option sets the threading mode to Multi-thread.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-14374-42468-63596-09513-53214-31321-61248-26314'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-14374-42468-63596-09513-53214-31321-61248-26314'>detail</a>)</i></p></dd>
+
+<dt><b>R-14413-31567-12478-15952-22976-18615-46799-38246</b></dt>
+<dd><p>The schema of the sqlite_stat1 table is as follows: CREATE TABLE sqlite_stat1(tbl,idx,stat);
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-14413-31567-12478-15952-22976-18615-46799-38246'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-14413-31567-12478-15952-22976-18615-46799-38246'>detail</a>)</i></p></dd>
+
+<dt><b>R-14428-50133-01194-47236-05116-05687-25228-52456</b></dt>
+<dd><p>The sqlite3_reset(S) interface resets the prepared statement S back to the beginning of its program.
+<i>(source: <a href="c3ref/reset.html">c3ref/reset.html</a>, checked-by: th3/req1/reset01.test, matrix: <a href='matrix/c3ref/reset.html#R-14428-50133-01194-47236-05116-05687-25228-52456'>context</a>, <a href='matrix/matrix_dreset.html#R-14428-50133-01194-47236-05116-05687-25228-52456'>detail</a>)</i></p></dd>
+
+<dt><b>R-14442-41305-19421-12764-11199-11923-26443-20423</b></dt>
+<dd><p>If the simple SELECT is a SELECT DISTINCT, then duplicate rows are removed from the set of result rows before it is returned.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-14442-41305-19421-12764-11199-11923-26443-20423'>context</a>, <a href='matrix/matrix_dlang_select.html#R-14442-41305-19421-12764-11199-11923-26443-20423'>detail</a>)</i></p></dd>
+
+<dt><b>R-14450-37597-62750-52193-20411-23547-30776-32199</b></dt>
+<dd><p>If SQLite is compiled with the SQLITE_THREADSAFE=0 compile-time option then the entire mutexing subsystem is omitted from the build and hence calls to sqlite3_config() with the SQLITE_CONFIG_GETMUTEX configuration option will return SQLITE_ERROR.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-14450-37597-62750-52193-20411-23547-30776-32199'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-14450-37597-62750-52193-20411-23547-30776-32199'>detail</a>)</i></p></dd>
+
+<dt><b>R-14451-19951-27480-60238-09584-48372-64711-58964</b></dt>
+<dd><p>If N is zero then memory mapped I/O is disabled.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-14451-19951-27480-60238-09584-48372-64711-58964'>context</a>, <a href='matrix/matrix_dpragma.html#R-14451-19951-27480-60238-09584-48372-64711-58964'>detail</a>)</i></p></dd>
+
+<dt><b>R-14505-63184-58138-52966-27681-02252-30754-64236</b></dt>
+<dd><p>An INTEGER or REAL value is less than any TEXT or BLOB value.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_04.test, matrix: <a href='matrix/datatype3.html#R-14505-63184-58138-52966-27681-02252-30754-64236'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-14505-63184-58138-52966-27681-02252-30754-64236'>detail</a>)</i></p></dd>
+
+<dt><b>R-14522-26183-36808-38782-13052-12335-19619-11308</b></dt>
+<dd><p>The sqlite3_uint64 and sqlite_uint64 types can store integer values between 0 and +18446744073709551615 inclusive.
+<i>(source: <a href="c3ref/int64.html">c3ref/int64.html</a>, checked-by: th3/req1/int64_01.test, matrix: <a href='matrix/c3ref/int64.html#R-14522-26183-36808-38782-13052-12335-19619-11308'>context</a>, <a href='matrix/matrix_dint64.html#R-14522-26183-36808-38782-13052-12335-19619-11308'>detail</a>)</i></p></dd>
+
+<dt><b>R-14553-25174-23160-33731-13209-59828-40060-12886</b></dt>
+<dd><p>When xBestIndex returns, the sqlite3_value object returned by sqlite3_vtab_rhs_value() is automatically deallocated.
+<i>(source: <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>, checked-by: src/where.c, tcl/vtabrhs1.test, matrix: <a href='matrix/c3ref/vtab_rhs_value.html#R-14553-25174-23160-33731-13209-59828-40060-12886'>context</a>, <a href='matrix/matrix_dvtab_rhs_value.html#R-14553-25174-23160-33731-13209-59828-40060-12886'>detail</a>)</i></p></dd>
+
+<dt><b>R-14553-34013-61751-37329-34569-35054-62588-04416</b></dt>
+<dd><p>the complete database schema for efficient implementation of the foreign key constraint might be: CREATE TABLE artist( artistid INTEGER PRIMARY KEY, artistname TEXT ); CREATE TABLE track( trackid INTEGER, trackname TEXT, trackartist INTEGER REFERENCES artist ); CREATE INDEX trackindex ON track(trackartist);
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys09.test, matrix: <a href='matrix/foreignkeys.html#R-14553-34013-61751-37329-34569-35054-62588-04416'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-14553-34013-61751-37329-34569-35054-62588-04416'>detail</a>)</i></p></dd>
+
+<dt><b>R-14560-62209-22846-15269-26800-65188-24586-57276</b></dt>
+<dd><p>The sqlite3_blob_bytes() interface returns the size of the BLOB in bytes.
+<i>(source: <a href="c3ref/blob.html">c3ref/blob.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob.html#R-14560-62209-22846-15269-26800-65188-24586-57276'>context</a>, <a href='matrix/matrix_dblob.html#R-14560-62209-22846-15269-26800-65188-24586-57276'>detail</a>)</i></p></dd>
+
+<dt><b>R-14606-31564-30448-03385-20591-46329-55460-01385</b></dt>
+<dd><p>Value is a BLOB that is (N-12)/2 bytes in length.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-14606-31564-30448-03385-20591-46329-55460-01385'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-14606-31564-30448-03385-20591-46329-55460-01385'>detail</a>)</i></p></dd>
+
+<dt><b>R-14672-19530-25387-57734-27624-49837-27929-41109</b></dt>
+<dd><p>This is the number of rows inserted into transient indices that were created automatically in order to help joins run faster.
+<i>(source: <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a>, matrix: <a href='matrix/c3ref/c_stmtstatus_counter.html#R-14672-19530-25387-57734-27624-49837-27929-41109'>context</a>, <a href='matrix/matrix_dc_stmtstatus_counter.html#R-14672-19530-25387-57734-27624-49837-27929-41109'>detail</a>)</i></p></dd>
+
+<dt><b>R-14708-27487-63029-62326-38556-29353-26608-43462</b></dt>
+<dd><p>If either X or Y are NULL in instr(X,Y) then the result is NULL.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/instr.test, matrix: <a href='matrix/lang_corefunc.html#R-14708-27487-63029-62326-38556-29353-26608-43462'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-14708-27487-63029-62326-38556-29353-26608-43462'>detail</a>)</i></p></dd>
+
+<dt><b>R-14744-61161-64598-20723-40374-11950-32585-46634</b></dt>
+<dd><p>Bindings are not cleared by the sqlite3_reset() routine.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-14744-61161-64598-20723-40374-11950-32585-46634'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-14744-61161-64598-20723-40374-11950-32585-46634'>detail</a>)</i></p></dd>
+
+<dt><b>R-14755-58619-21710-46731-49779-58295-52088-49443</b></dt>
+<dd><p>If a schema name is specified, then only that one schema is searched for the named object.
+<i>(source: <a href="lang_naming.html">lang_naming.html</a>, checked-by: tcl/e_resolve.test, matrix: <a href='matrix/lang_naming.html#R-14755-58619-21710-46731-49779-58295-52088-49443'>context</a>, <a href='matrix/matrix_dlang_naming.html#R-14755-58619-21710-46731-49779-58295-52088-49443'>detail</a>)</i></p></dd>
+
+<dt><b>R-14786-64066-57173-54332-48842-61932-26767-55226</b></dt>
+<dd><p>The fourth parameter to the preupdate callback is the name of the database within the database connection that is being modified. This will be "main" for the main database or "temp" for TEMP tables or the name given after the AS keyword in the ATTACH statement for attached databases.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-14786-64066-57173-54332-48842-61932-26767-55226'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-14786-64066-57173-54332-48842-61932-26767-55226'>detail</a>)</i></p></dd>
+
+<dt><b>R-14809-12532-29849-37931-55866-36288-34668-62105</b></dt>
+<dd><p>Every column of every table has an associated collating function.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-14809-12532-29849-37931-55866-36288-34668-62105'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-14809-12532-29849-37931-55866-36288-34668-62105'>detail</a>)</i></p></dd>
+
+<dt><b>R-14816-14138-45914-00386-55030-19688-47427-16370</b></dt>
+<dd><p>The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt to enter a mutex.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-14816-14138-45914-00386-55030-19688-47427-16370'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-14816-14138-45914-00386-55030-19688-47427-16370'>detail</a>)</i></p></dd>
+
+<dt><b>R-14854-58090-42318-16758-11511-55845-43125-55221</b></dt>
+<dd><p>The xShutdown method is only called from sqlite3_shutdown() so it does not need to be threadsafe either.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-14854-58090-42318-16758-11511-55845-43125-55221'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-14854-58090-42318-16758-11511-55845-43125-55221'>detail</a>)</i></p></dd>
+
+<dt><b>R-14875-52970-09502-55318-65489-30403-63848-22858</b></dt>
+<dd><p>The last_insert_rowid() function returns the ROWID of the last row insert from the database connection which invoked the function.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-14875-52970-09502-55318-65489-30403-63848-22858'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-14875-52970-09502-55318-65489-30403-63848-22858'>detail</a>)</i></p></dd>
+
+<dt><b>R-14902-14650-01699-08626-33973-09336-38963-61808</b></dt>
+<dd><p>Generated columns can have a datatype.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-14902-14650-01699-08626-33973-09336-38963-61808'>context</a>, <a href='matrix/matrix_dgencol.html#R-14902-14650-01699-08626-33973-09336-38963-61808'>detail</a>)</i></p></dd>
+
+<dt><b>R-14926-50129-46614-17358-58969-23562-31943-57141</b></dt>
+<dd><p>For the purposes of grouping rows, NULL values are considered equal.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-14926-50129-46614-17358-58969-23562-31943-57141'>context</a>, <a href='matrix/matrix_dlang_select.html#R-14926-50129-46614-17358-58969-23562-31943-57141'>detail</a>)</i></p></dd>
+
+<dt><b>R-14928-00869-49295-06828-40495-44673-44350-58207</b></dt>
+<dd><p>The soft heap limit is automatically enabled whenever the hard heap limit is enabled.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-14928-00869-49295-06828-40495-44673-44350-58207'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-14928-00869-49295-06828-40495-44673-44350-58207'>detail</a>)</i></p></dd>
+
+<dt><b>R-14939-58295-46667-49876-44919-10267-12133-09440</b></dt>
+<dd><p>For indexes on WITHOUT ROWID tables, N will be the number of columns indexed plus the number of columns in the primary key.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-14939-58295-46667-49876-44919-10267-12133-09440'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-14939-58295-46667-49876-44919-10267-12133-09440'>detail</a>)</i></p></dd>
+
+<dt><b>R-14970-42377-34844-46496-15895-42662-06341-12505</b></dt>
+<dd><p>If this flag is set, then the F_FULLFSYNC syncing method is used during checkpoint operations on systems that support F_FULLFSYNC.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma11.test, matrix: <a href='matrix/pragma.html#R-14970-42377-34844-46496-15895-42662-06341-12505'>context</a>, <a href='matrix/matrix_dpragma.html#R-14970-42377-34844-46496-15895-42662-06341-12505'>detail</a>)</i></p></dd>
+
+<dt><b>R-15060-13876-27196-24328-29262-37207-52735-33647</b></dt>
+<dd><p>A 1-dimensional R*Tree thus has 3 columns.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-15060-13876-27196-24328-29262-37207-52735-33647'>context</a>, <a href='matrix/matrix_drtree.html#R-15060-13876-27196-24328-29262-37207-52735-33647'>detail</a>)</i></p></dd>
+
+<dt><b>R-15063-51342-39351-23162-57397-34240-32875-44138</b></dt>
+<dd><p>A zero is returned if no matching parameter is found.
+<i>(source: <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a>, checked-by: th3/req1/bind03.test, matrix: <a href='matrix/c3ref/bind_parameter_index.html#R-15063-51342-39351-23162-57397-34240-32875-44138'>context</a>, <a href='matrix/matrix_dbind_parameter_index.html#R-15063-51342-39351-23162-57397-34240-32875-44138'>detail</a>)</i></p></dd>
+
+<dt><b>R-15067-52851-39310-09608-48928-40262-32010-41531</b></dt>
+<dd><p>The registration remains valid until it is replaced by a different module or until the database connection closes.
+<i>(source: <a href="c3ref/module.html">c3ref/module.html</a>, matrix: <a href='matrix/c3ref/module.html#R-15067-52851-39310-09608-48928-40262-32010-41531'>context</a>, <a href='matrix/matrix_dmodule.html#R-15067-52851-39310-09608-48928-40262-32010-41531'>detail</a>)</i></p></dd>
+
+<dt><b>R-15078-25200-47597-45134-52626-09709-11803-57181</b></dt>
+<dd><p>However, if an insert fails due to (for example) a uniqueness constraint, the ROWID of the failed insertion attempt might not be reused on subsequent inserts, resulting in gaps in the ROWID sequence.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-15078-25200-47597-45134-52626-09709-11803-57181'>context</a>, <a href='matrix/matrix_dautoinc.html#R-15078-25200-47597-45134-52626-09709-11803-57181'>detail</a>)</i></p></dd>
+
+<dt><b>R-15107-48632-28569-47708-49546-63224-06623-07526</b></dt>
+<dd><p>The authorizer callback is invoked as SQL statements are being compiled by sqlite3_prepare() or its variants sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16(), sqlite3_prepare16_v2(), and sqlite3_prepare16_v3().
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, matrix: <a href='matrix/c3ref/set_authorizer.html#R-15107-48632-28569-47708-49546-63224-06623-07526'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-15107-48632-28569-47708-49546-63224-06623-07526'>detail</a>)</i></p></dd>
+
+<dt><b>R-15111-17896-62926-21896-36187-36992-24278-56286</b></dt>
+<dd><p>Numeric values (serial types 1 through 9) sort after NULLs and in numeric order.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat05.test, matrix: <a href='matrix/fileformat2.html#R-15111-17896-62926-21896-36187-36992-24278-56286'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-15111-17896-62926-21896-36187-36992-24278-56286'>detail</a>)</i></p></dd>
+
+<dt><b>R-15142-18077-19638-26452-28411-07428-50333-27294</b></dt>
+<dd><p>A new R*Tree index is created as follows: CREATE VIRTUAL TABLE <name> USING rtree(<column-names>);
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq02.test, matrix: <a href='matrix/rtree.html#R-15142-18077-19638-26452-28411-07428-50333-27294'>context</a>, <a href='matrix/matrix_drtree.html#R-15142-18077-19638-26452-28411-07428-50333-27294'>detail</a>)</i></p></dd>
+
+<dt><b>R-15162-34851-63939-05950-21084-00823-32030-36120</b></dt>
+<dd><p>If the 5th parameter to sqlite3_exec() is not NULL then any error message is written into memory obtained from sqlite3_malloc() and passed back through the 5th parameter.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-15162-34851-63939-05950-21084-00823-32030-36120'>context</a>, <a href='matrix/matrix_dexec.html#R-15162-34851-63939-05950-21084-00823-32030-36120'>detail</a>)</i></p></dd>
+
+<dt><b>R-15172-56782-14433-51557-38019-58913-08243-11771</b></dt>
+<dd><p>The returned value is one of SQLITE_INTEGER, SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB, or SQLITE_NULL.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-15172-56782-14433-51557-38019-58913-08243-11771'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-15172-56782-14433-51557-38019-58913-08243-11771'>detail</a>)</i></p></dd>
+
+<dt><b>R-15179-00775-17006-23705-43111-64529-05716-35122</b></dt>
+<dd><p>The N-th integer (for N>1) is the estimated average number of rows in the index which have the same value for the first N-1 columns.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-15179-00775-17006-23705-43111-64529-05716-35122'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-15179-00775-17006-23705-43111-64529-05716-35122'>detail</a>)</i></p></dd>
+
+<dt><b>R-15195-28467-04090-15133-31201-08580-44070-48072</b></dt>
+<dd><p>A RETURNING clause for an UPSERT reports both inserted and updated rows.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-15195-28467-04090-15133-31201-08580-44070-48072'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-15195-28467-04090-15133-31201-08580-44070-48072'>detail</a>)</i></p></dd>
+
+<dt><b>R-15238-25185-55921-28860-50781-00203-08112-61248</b></dt>
+<dd><p>The time-value (and all modifiers) may be omitted, in which case a time value of 'now' is assumed.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-15238-25185-55921-28860-50781-00203-08112-61248'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-15238-25185-55921-28860-50781-00203-08112-61248'>detail</a>)</i></p></dd>
+
+<dt><b>R-15250-32031-29902-43107-55645-15949-41885-09210</b></dt>
+<dd><p>The solution to enforcing one leader per team is to create a unique index on team_id but restricted to those entries for which is_team_leader is true: CREATE UNIQUE INDEX team_leader ON person(team_id) WHERE is_team_leader;
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-15250-32031-29902-43107-55645-15949-41885-09210'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-15250-32031-29902-43107-55645-15949-41885-09210'>detail</a>)</i></p></dd>
+
+<dt><b>R-15264-45364-33795-29086-26475-46082-16234-09444</b></dt>
+<dd><p>For the purposes of this routine, an INSERT is considered to be successful even if it is subsequently rolled back.
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-15264-45364-33795-29086-26475-46082-16234-09444'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-15264-45364-33795-29086-26475-46082-16234-09444'>detail</a>)</i></p></dd>
+
+<dt><b>R-15279-42727-36622-43533-51632-55419-55302-44871</b></dt>
+<dd><p>Virtual tables methods can set an error message by assigning a string obtained from sqlite3_mprintf() to zErrMsg.
+<i>(source: <a href="c3ref/vtab.html">c3ref/vtab.html</a>, checked-by: th3/req1/vtab01.test, matrix: <a href='matrix/c3ref/vtab.html#R-15279-42727-36622-43533-51632-55419-55302-44871'>context</a>, <a href='matrix/matrix_dvtab.html#R-15279-42727-36622-43533-51632-55419-55302-44871'>detail</a>)</i></p></dd>
+
+<dt><b>R-15283-49521-12983-52199-46141-26319-45151-22196</b></dt>
+<dd><p>If the table has never before contained any data, then a ROWID of 1 is used.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-15283-49521-12983-52199-46141-26319-45151-22196'>context</a>, <a href='matrix/matrix_dautoinc.html#R-15283-49521-12983-52199-46141-26319-45151-22196'>detail</a>)</i></p></dd>
+
+<dt><b>R-15313-19540-00987-59181-43377-13803-46289-24513</b></dt>
+<dd><p>The name for the collating sequence used to compare values in the index-column.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15x.test, matrix: <a href='matrix/pragma.html#R-15313-19540-00987-59181-43377-13803-46289-24513'>context</a>, <a href='matrix/matrix_dpragma.html#R-15313-19540-00987-59181-43377-13803-46289-24513'>detail</a>)</i></p></dd>
+
+<dt><b>R-15326-32258-55998-27349-46389-10665-40357-65139</b></dt>
+<dd><p>When multiple database connections share the same cache, changing the secure-delete flag on one database connection changes it for them all.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma21.test, matrix: <a href='matrix/pragma.html#R-15326-32258-55998-27349-46389-10665-40357-65139'>context</a>, <a href='matrix/matrix_dpragma.html#R-15326-32258-55998-27349-46389-10665-40357-65139'>detail</a>)</i></p></dd>
+
+<dt><b>R-15331-08345-58118-19144-46490-41902-30698-42442</b></dt>
+<dd><p>The second parameter to the logger function is a copy of the first parameter to the corresponding sqlite3_log() call and is intended to be a result code or an extended result code.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/cov1/log01.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-15331-08345-58118-19144-46490-41902-30698-42442'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-15331-08345-58118-19144-46490-41902-30698-42442'>detail</a>)</i></p></dd>
+
+<dt><b>R-15334-58407-28961-30248-32119-35017-40136-56612</b></dt>
+<dd><p>A column that uses INTEGER affinity behaves the same as a column with NUMERIC affinity.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-15334-58407-28961-30248-32119-35017-40136-56612'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-15334-58407-28961-30248-32119-35017-40136-56612'>detail</a>)</i></p></dd>
+
+<dt><b>R-15356-65223-28934-39981-61264-10821-14188-49484</b></dt>
+<dd><p>SQLite does not use the lock-byte page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-15356-65223-28934-39981-61264-10821-14188-49484'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-15356-65223-28934-39981-61264-10821-14188-49484'>detail</a>)</i></p></dd>
+
+<dt><b>R-15363-55230-31292-18565-56039-36923-37219-31589</b></dt>
+<dd><p>If the default value of a column is CURRENT_TIME, CURRENT_DATE or CURRENT_TIMESTAMP, then the value used in the new row is a text representation of the current UTC date and/or time.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-15363-55230-31292-18565-56039-36923-37219-31589'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-15363-55230-31292-18565-56039-36923-37219-31589'>detail</a>)</i></p></dd>
+
+<dt><b>R-15400-09401-11917-03904-29330-15741-54444-34897</b></dt>
+<dd><p>A keyword enclosed in square brackets is an identifier.
+<i>(source: <a href="lang_keywords.html">lang_keywords.html</a>, checked-by: th3/req1/keyword01.test, matrix: <a href='matrix/lang_keywords.html#R-15400-09401-11917-03904-29330-15741-54444-34897'>context</a>, <a href='matrix/matrix_dlang_keywords.html#R-15400-09401-11917-03904-29330-15741-54444-34897'>detail</a>)</i></p></dd>
+
+<dt><b>R-15402-03103-21390-36962-23389-49198-06887-52060</b></dt>
+<dd><p>PRAGMA schema.foreign_key_check; PRAGMA schema.foreign_key_check(table-name);
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/fkey5.test, th3/cov1/fkey23.test, matrix: <a href='matrix/pragma.html#R-15402-03103-21390-36962-23389-49198-06887-52060'>context</a>, <a href='matrix/matrix_dpragma.html#R-15402-03103-21390-36962-23389-49198-06887-52060'>detail</a>)</i></p></dd>
+
+<dt><b>R-15417-28014-30557-42534-17582-00197-65121-60035</b></dt>
+<dd><p>Indices are not required for child key columns
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-15417-28014-30557-42534-17582-00197-65121-60035'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-15417-28014-30557-42534-17582-00197-65121-60035'>detail</a>)</i></p></dd>
+
+<dt><b>R-15442-09728-53714-13219-50103-51559-23392-54573</b></dt>
+<dd><p>Furthermore, the data_store_directory pragma always assumes that any string that this variable points to is held in memory obtained from sqlite3_malloc and the pragma may attempt to free that memory using sqlite3_free.
+<i>(source: <a href="c3ref/data_directory.html">c3ref/data_directory.html</a>, matrix: <a href='matrix/c3ref/data_directory.html#R-15442-09728-53714-13219-50103-51559-23392-54573'>context</a>, <a href='matrix/matrix_ddata_directory.html#R-15442-09728-53714-13219-50103-51559-23392-54573'>detail</a>)</i></p></dd>
+
+<dt><b>R-15462-52806-17600-54979-17711-21725-52659-40805</b></dt>
+<dd><p>An SQLITE_TRACE_STMT callback is invoked when a prepared statement first begins running and possibly at other times during the execution of the prepared statement, such as at the start of each trigger subprogram.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-15462-52806-17600-54979-17711-21725-52659-40805'>context</a>, <a href='matrix/matrix_dc_trace.html#R-15462-52806-17600-54979-17711-21725-52659-40805'>detail</a>)</i></p></dd>
+
+<dt><b>R-15465-20813-03488-35934-00721-06683-61343-58043</b></dt>
+<dd><p>The maximum and minimum embedded payload fractions and the leaf payload fraction values must be 64, 32, and 32.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-15465-20813-03488-35934-00721-06683-61343-58043'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-15465-20813-03488-35934-00721-06683-61343-58043'>detail</a>)</i></p></dd>
+
+<dt><b>R-15506-57666-56346-10655-27907-33619-59147-37222</b></dt>
+<dd><p>The second callback argument is one of SQLITE_INSERT, SQLITE_DELETE, or SQLITE_UPDATE, depending on the operation that caused the callback to be invoked.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: tcl/hook.test, th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-15506-57666-56346-10655-27907-33619-59147-37222'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-15506-57666-56346-10655-27907-33619-59147-37222'>detail</a>)</i></p></dd>
+
+<dt><b>R-15522-56042-47189-16162-53355-39499-48752-21999</b></dt>
+<dd><p>For all of these errors, SQLite attempts to undo just the one statement it was working on and leave changes from prior statements within the same transaction intact and continue with the transaction.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-15522-56042-47189-16162-53355-39499-48752-21999'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-15522-56042-47189-16162-53355-39499-48752-21999'>detail</a>)</i></p></dd>
+
+<dt><b>R-15544-29079-59468-56673-65004-28971-16108-35057</b></dt>
+<dd><p>Inserting a NULL value into this column causes SQLite to automatically generate a new unique primary key value.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-15544-29079-59468-56673-65004-28971-16108-35057'>context</a>, <a href='matrix/matrix_drtree.html#R-15544-29079-59468-56673-65004-28971-16108-35057'>detail</a>)</i></p></dd>
+
+<dt><b>R-15548-18334-64551-32138-25458-60589-38835-29955</b></dt>
+<dd><p>If the largest root b-tree page value is zero, then the database must not contain ptrmap pages.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-15548-18334-64551-32138-25458-60589-38835-29955'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-15548-18334-64551-32138-25458-60589-38835-29955'>detail</a>)</i></p></dd>
+
+<dt><b>R-15572-63310-25640-21443-38928-49206-01158-44169</b></dt>
+<dd><p>So just because a column is declared to contain a particular type does not mean that the data stored in that column is of the declared type.
+<i>(source: <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a>, matrix: <a href='matrix/c3ref/column_decltype.html#R-15572-63310-25640-21443-38928-49206-01158-44169'>context</a>, <a href='matrix/matrix_dcolumn_decltype.html#R-15572-63310-25640-21443-38928-49206-01158-44169'>detail</a>)</i></p></dd>
+
+<dt><b>R-15607-52988-55821-17631-36260-55856-06121-21546</b></dt>
+<dd><p>The added rows contain NULL values in the columns that would normally contain values copied from the right-hand input dataset.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-15607-52988-55821-17631-36260-55856-06121-21546'>context</a>, <a href='matrix/matrix_dlang_select.html#R-15607-52988-55821-17631-36260-55856-06121-21546'>detail</a>)</i></p></dd>
+
+<dt><b>R-15610-35227-39836-10138-16838-61419-33727-13478</b></dt>
+<dd><p>Unfinalized SQL statements typically hold a read transaction open, so the VACUUM might fail if there are unfinalized SQL statements on the same connection.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: src/vacuum.c, matrix: <a href='matrix/lang_vacuum.html#R-15610-35227-39836-10138-16838-61419-33727-13478'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-15610-35227-39836-10138-16838-61419-33727-13478'>detail</a>)</i></p></dd>
+
+<dt><b>R-15618-12639-40629-36536-35814-47765-39575-62705</b></dt>
+<dd><p>If it is NULL, then all attached databases are searched for the table using the same algorithm used by the database engine to resolve unqualified table references.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-15618-12639-40629-36536-35814-47765-39575-62705'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-15618-12639-40629-36536-35814-47765-39575-62705'>detail</a>)</i></p></dd>
+
+<dt><b>R-15620-41309-18590-43642-05731-59843-28363-36322</b></dt>
+<dd><p>In this case the call to sqlite3_backup_step() can be retried later.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-15620-41309-18590-43642-05731-59843-28363-36322'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-15620-41309-18590-43642-05731-59843-28363-36322'>detail</a>)</i></p></dd>
+
+<dt><b>R-15629-60483-22088-30931-50587-36197-35177-56236</b></dt>
+<dd><p>If the locking mode is EXCLUSIVE when first entering WAL journal mode, then the locking mode cannot be changed to NORMAL until after exiting WAL journal mode.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma05.test, matrix: <a href='matrix/pragma.html#R-15629-60483-22088-30931-50587-36197-35177-56236'>context</a>, <a href='matrix/matrix_dpragma.html#R-15629-60483-22088-30931-50587-36197-35177-56236'>detail</a>)</i></p></dd>
+
+<dt><b>R-15672-33611-05081-27963-61291-19773-24542-63496</b></dt>
+<dd><p>PRAGMA schema.page_count; Return the total number of pages in the database file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma12.test, matrix: <a href='matrix/pragma.html#R-15672-33611-05081-27963-61291-19773-24542-63496'>context</a>, <a href='matrix/matrix_dpragma.html#R-15672-33611-05081-27963-61291-19773-24542-63496'>detail</a>)</i></p></dd>
+
+<dt><b>R-15704-22093-19659-04811-31747-18777-12777-21799</b></dt>
+<dd><p>If it is set to "ASC" (the default), then the data structures are optimized for returning results in ascending order by docid.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-15704-22093-19659-04811-31747-18777-12777-21799'>context</a>, <a href='matrix/matrix_dfts3.html#R-15704-22093-19659-04811-31747-18777-12777-21799'>detail</a>)</i></p></dd>
+
+<dt><b>R-15707-53749-16663-50259-17040-65136-59107-02793</b></dt>
+<dd><p>The LIKE optimization will only be attempted if the right-hand side of the GLOB or LIKE operator is either literal string or a parameter that has been bound to a string literal.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-15707-53749-16663-50259-17040-65136-59107-02793'>context</a>, <a href='matrix/matrix_doptoverview.html#R-15707-53749-16663-50259-17040-65136-59107-02793'>detail</a>)</i></p></dd>
+
+<dt><b>R-15737-42560-39966-60421-02348-13704-23907-48839</b></dt>
+<dd><p>Keyword arguments can optionally appear in quotes.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma01.test, matrix: <a href='matrix/pragma.html#R-15737-42560-39966-60421-02348-13704-23907-48839'>context</a>, <a href='matrix/matrix_dpragma.html#R-15737-42560-39966-60421-02348-13704-23907-48839'>detail</a>)</i></p></dd>
+
+<dt><b>R-15741-50893-04622-59701-05174-07929-61978-12539</b></dt>
+<dd><p>The child key index does not have to be (and usually will not be) a UNIQUE index.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys09.test, matrix: <a href='matrix/foreignkeys.html#R-15741-50893-04622-59701-05174-07929-61978-12539'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-15741-50893-04622-59701-05174-07929-61978-12539'>detail</a>)</i></p></dd>
+
+<dt><b>R-15753-04279-34093-62735-52476-02019-63320-45902</b></dt>
+<dd><p>If the join-operator is a "RIGHT JOIN" or "RIGHT OUTER JOIN", then after the ON or USING filtering clauses have been applied, an extra row is added to the output for each row in the original right-hand input dataset that does not match any row in the left-hand dataset.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, matrix: <a href='matrix/lang_select.html#R-15753-04279-34093-62735-52476-02019-63320-45902'>context</a>, <a href='matrix/matrix_dlang_select.html#R-15753-04279-34093-62735-52476-02019-63320-45902'>detail</a>)</i></p></dd>
+
+<dt><b>R-15796-47513-29721-16055-11683-21050-32207-60873</b></dt>
+<dd><p>When comparing text values, the collating sequence associated with the parent key column is always used.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys03.test, matrix: <a href='matrix/foreignkeys.html#R-15796-47513-29721-16055-11683-21050-32207-60873'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-15796-47513-29721-16055-11683-21050-32207-60873'>detail</a>)</i></p></dd>
+
+<dt><b>R-15800-25719-02234-49112-58438-56406-07161-16214</b></dt>
+<dd><p>If index-name does not exist or cannot be used for the query, then the preparation of the SQL statement fails.
+<i>(source: <a href="lang_indexedby.html">lang_indexedby.html</a>, checked-by: tcl/indexedby.test, matrix: <a href='matrix/lang_indexedby.html#R-15800-25719-02234-49112-58438-56406-07161-16214'>context</a>, <a href='matrix/matrix_dlang_indexedby.html#R-15800-25719-02234-49112-58438-56406-07161-16214'>detail</a>)</i></p></dd>
+
+<dt><b>R-15807-22461-03820-63759-43480-30184-16184-55723</b></dt>
+<dd><p>The SQLITE_TRANSIENT value means that the content will likely change in the near future and that SQLite should make its own private copy of the content before returning.
+<i>(source: <a href="c3ref/c_static.html">c3ref/c_static.html</a>, checked-by: th3/req1/clearbind01.test, th3/req1/static01.test, matrix: <a href='matrix/c3ref/c_static.html#R-15807-22461-03820-63759-43480-30184-16184-55723'>context</a>, <a href='matrix/matrix_dc_static.html#R-15807-22461-03820-63759-43480-30184-16184-55723'>detail</a>)</i></p></dd>
+
+<dt><b>R-15810-56691-30500-50989-63977-00699-03712-43349</b></dt>
+<dd><p>The IN and NOT IN operators take an expression on the left and a list of values or a subquery on the right.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/cov1/in01.test, matrix: <a href='matrix/lang_expr.html#R-15810-56691-30500-50989-63977-00699-03712-43349'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-15810-56691-30500-50989-63977-00699-03712-43349'>detail</a>)</i></p></dd>
+
+<dt><b>R-15818-17128-00123-39161-32371-64598-56479-09338</b></dt>
+<dd><p>The first parameter is a prepared statement. If this statement is a SELECT statement and the Nth column of the returned result set of that SELECT is a table column (not an expression or subquery) then the declared type of the table column is returned.
+<i>(source: <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a>, matrix: <a href='matrix/c3ref/column_decltype.html#R-15818-17128-00123-39161-32371-64598-56479-09338'>context</a>, <a href='matrix/matrix_dcolumn_decltype.html#R-15818-17128-00123-39161-32371-64598-56479-09338'>detail</a>)</i></p></dd>
+
+<dt><b>R-15825-58263-40535-43132-40682-17971-55847-38484</b></dt>
+<dd><p>The psow query parameter overrides the powersafe overwrite property of the database file being opened.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-15825-58263-40535-43132-40682-17971-55847-38484'>context</a>, <a href='matrix/matrix_duri.html#R-15825-58263-40535-43132-40682-17971-55847-38484'>detail</a>)</i></p></dd>
+
+<dt><b>R-15842-53296-08003-60856-35696-17823-54223-09480</b></dt>
+<dd><p>The WHERE clause on a query is broken up into "terms" where each term is separated from the others by an AND operator.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-15842-53296-08003-60856-35696-17823-54223-09480'>context</a>, <a href='matrix/matrix_doptoverview.html#R-15842-53296-08003-60856-35696-17823-54223-09480'>detail</a>)</i></p></dd>
+
+<dt><b>R-15867-30493-08974-44645-42836-18647-48672-50550</b></dt>
+<dd><p>The "." character is always used as the decimal point even if the locale setting specifies "," for this role - the use of "," for the decimal point would result in syntactic ambiguity.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr01.test, matrix: <a href='matrix/lang_expr.html#R-15867-30493-08974-44645-42836-18647-48672-50550'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-15867-30493-08974-44645-42836-18647-48672-50550'>detail</a>)</i></p></dd>
+
+<dt><b>R-15888-36326-49147-46840-54698-34618-50911-39482</b></dt>
+<dd><p>Similarly, the "DEFAULT VALUES" form of the INSERT statement is supported for top-level INSERT statements only and not for INSERT statements within triggers.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-15888-36326-49147-46840-54698-34618-50911-39482'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-15888-36326-49147-46840-54698-34618-50911-39482'>detail</a>)</i></p></dd>
+
+<dt><b>R-15904-00746-56156-46243-28663-24468-25045-59093</b></dt>
+<dd><p>The result of any binary operator is either a numeric value or NULL, except for the || concatenation operator, and the -> and ->> extract operators which evaluate to either NULL or a text value.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-15904-00746-56156-46243-28663-24468-25045-59093'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-15904-00746-56156-46243-28663-24468-25045-59093'>detail</a>)</i></p></dd>
+
+<dt><b>R-15909-61171-23810-45611-13574-21954-09176-43834</b></dt>
+<dd><p>In incremental mode, the separate incremental_vacuum pragma must be invoked to cause the auto-vacuum to occur.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-15909-61171-23810-45611-13574-21954-09176-43834'>context</a>, <a href='matrix/matrix_dpragma.html#R-15909-61171-23810-45611-13574-21954-09176-43834'>detail</a>)</i></p></dd>
+
+<dt><b>R-15925-22066-04345-38382-31136-29690-34862-08150</b></dt>
+<dd><p>2.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, matrix: <a href='matrix/lang_delete.html#R-15925-22066-04345-38382-31136-29690-34862-08150'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-15925-22066-04345-38382-31136-29690-34862-08150'>detail</a>)</i></p></dd>
+
+<dt><b>R-15958-50233-58629-08203-04879-28676-03150-11250</b></dt>
+<dd><p>As you would expect, it is not possible to manipulate the database to a state that violates the foreign key constraint by deleting or updating rows in the artist table either: sqlite> -- Attempting to delete the artist record for "Frank Sinatra" fails, since sqlite> -- the track table contains a row that refer to it. sqlite> DELETE FROM artist WHERE artistname = 'Frank Sinatra'; SQL error: foreign key constraint failed sqlite> -- Delete all the records from the track table that refer to the artist sqlite> -- "Frank Sinatra". Only then is it possible to delete the artist. sqlite> DELETE FROM track WHERE trackname = 'My Way'; sqlite> DELETE FROM artist WHERE artistname = 'Frank Sinatra'; sqlite> -- Try to update the artistid of a row in the artist table while there sqlite> -- exists records in the track table that refer to it. sqlite> UPDATE artist SET artistid=4 WHERE artistname = 'Dean Martin'; SQL error: foreign key constraint failed sqlite> -- Once all the records that refer to a row in the artist table have sqlite> -- been deleted, it is possible to modify the artistid of the row. sqlite> DELETE FROM track WHERE trackname IN('That''s Amore', 'Christmas Blues'); sqlite> UPDATE artist SET artistid=4 WHERE artistname = 'Dean Martin';
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys01.test, matrix: <a href='matrix/foreignkeys.html#R-15958-50233-58629-08203-04879-28676-03150-11250'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-15958-50233-58629-08203-04879-28676-03150-11250'>detail</a>)</i></p></dd>
+
+<dt><b>R-15968-48708-39759-44208-63382-65413-21684-48201</b></dt>
+<dd><p>The other allowed parameters to sqlite3_mutex_alloc() (anything other than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return a pointer to a static preexisting mutex.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-15968-48708-39759-44208-63382-65413-21684-48201'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-15968-48708-39759-44208-63382-65413-21684-48201'>detail</a>)</i></p></dd>
+
+<dt><b>R-15997-27576-09912-47070-23601-24983-46411-48984</b></dt>
+<dd><p>PRAGMA read_uncommitted; PRAGMA read_uncommitted = boolean; Query, set, or clear READ UNCOMMITTED isolation.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-15997-27576-09912-47070-23601-24983-46411-48984'>context</a>, <a href='matrix/matrix_dpragma.html#R-15997-27576-09912-47070-23601-24983-46411-48984'>detail</a>)</i></p></dd>
+
+<dt><b>R-16028-39081-19377-46684-10718-53381-04734-64750</b></dt>
+<dd><p>The min() aggregate function returns the minimum non-NULL value of all values in the group.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-16028-39081-19377-46684-10718-53381-04734-64750'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-16028-39081-19377-46684-10718-53381-04734-64750'>detail</a>)</i></p></dd>
+
+<dt><b>R-16040-25925-39944-42727-17957-08154-60392-58357</b></dt>
+<dd><p>If no encoding is first set with this pragma, then the encoding with which the main database will be created defaults to one determined by the API used to open the connection.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-16040-25925-39944-42727-17957-08154-60392-58357'>context</a>, <a href='matrix/matrix_dpragma.html#R-16040-25925-39944-42727-17957-08154-60392-58357'>detail</a>)</i></p></dd>
+
+<dt><b>R-16046-57096-05363-52910-04894-60844-28556-45944</b></dt>
+<dd><p>If the "unordered" argument is present, then the query planner assumes that the index is unordered and will not use the index for a range query or for sorting.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/cov1/unordered01.test, matrix: <a href='matrix/fileformat2.html#R-16046-57096-05363-52910-04894-60844-28556-45944'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-16046-57096-05363-52910-04894-60844-28556-45944'>detail</a>)</i></p></dd>
+
+<dt><b>R-16050-33177-33953-46606-13298-00172-25196-24218</b></dt>
+<dd><p>All other date and time functions can be expressed in terms of strftime(): FunctionEquivalent (or nearly) strftime() date(...) strftime('%Y-%m-%d', ...) time(...) strftime('%H:%M:%S', ...) datetime(...) strftime('%Y-%m-%d %H:%M:%S', ...) julianday(...) strftime('%J', ...) -- note-1 unixepoch(...) strftime('%s', ...) -- note-1
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-16050-33177-33953-46606-13298-00172-25196-24218'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-16050-33177-33953-46606-13298-00172-25196-24218'>detail</a>)</i></p></dd>
+
+<dt><b>R-16057-55834-34183-27727-54013-42481-60412-05224</b></dt>
+<dd><p>The extension can add new functions or collating sequences, but cannot modify or delete existing functions or collating sequences because those functions and/or collating sequences might be used elsewhere in the currently running SQL statement.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-16057-55834-34183-27727-54013-42481-60412-05224'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-16057-55834-34183-27727-54013-42481-60412-05224'>detail</a>)</i></p></dd>
+
+<dt><b>R-16074-54196-43824-25031-17914-10655-20694-13926</b></dt>
+<dd><p>If the FROM clause is omitted from a simple SELECT statement, then the input data is implicitly a single row zero columns wide
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-16074-54196-43824-25031-17914-10655-20694-13926'>context</a>, <a href='matrix/matrix_dlang_select.html#R-16074-54196-43824-25031-17914-10655-20694-13926'>detail</a>)</i></p></dd>
+
+<dt><b>R-16085-53730-63732-38499-15956-61706-03515-37986</b></dt>
+<dd><p>If the optional IF NOT EXISTS clause is present and another index with the same name already exists, then this command becomes a no-op.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx01.test, matrix: <a href='matrix/lang_createindex.html#R-16085-53730-63732-38499-15956-61706-03515-37986'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-16085-53730-63732-38499-15956-61706-03515-37986'>detail</a>)</i></p></dd>
+
+<dt><b>R-16127-35442-25332-57824-03233-02546-37060-55461</b></dt>
+<dd><p>The following SQLite command-line session illustrates the effect of the foreign key constraint added to the track table: sqlite> SELECT * FROM artist; artistid artistname -------- ----------------- 1 Dean Martin 2 Frank Sinatra sqlite> SELECT * FROM track; trackid trackname trackartist ------- ----------------- ----------- 11 That's Amore 1 12 Christmas Blues 1 13 My Way 2 sqlite> -- This fails because the value inserted into the trackartist column (3) sqlite> -- does not correspond to row in the artist table. sqlite> INSERT INTO track VALUES(14, 'Mr. Bojangles', 3); SQL error: foreign key constraint failed sqlite> -- This succeeds because a NULL is inserted into trackartist. A sqlite> -- corresponding row in the artist table is not required in this case. sqlite> INSERT INTO track VALUES(14, 'Mr. Bojangles', NULL); sqlite> -- Trying to modify the trackartist field of the record after it has sqlite> -- been inserted does not work either, since the new value of trackartist (3) sqlite> -- Still does not correspond to any row in the artist table. sqlite> UPDATE track SET trackartist = 3 WHERE trackname = 'Mr. Bojangles'; SQL error: foreign key constraint failed sqlite> -- Insert the required row into the artist table. It is then possible to sqlite> -- update the inserted row to set trackartist to 3 (since a corresponding sqlite> -- row in the artist table now exists). sqlite> INSERT INTO artist VALUES(3, 'Sammy Davis Jr.'); sqlite> UPDATE track SET trackartist = 3 WHERE trackname = 'Mr. Bojangles'; sqlite> -- Now that "Sammy Davis Jr." (artistid = 3) has been added to the database, sqlite> -- it is possible to INSERT new tracks using this artist without violating sqlite> -- the foreign key constraint: sqlite> INSERT INTO track VALUES(15, 'Boogie Woogie', 3);
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys01.test, matrix: <a href='matrix/foreignkeys.html#R-16127-35442-25332-57824-03233-02546-37060-55461'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-16127-35442-25332-57824-03233-02546-37060-55461'>detail</a>)</i></p></dd>
+
+<dt><b>R-16170-02914-14290-07150-03100-60317-35403-36262</b></dt>
+<dd><p>sqlite> CREATE INDEX i1 ON t1(a); sqlite> EXPLAIN QUERY PLAN SELECT a, b FROM t1 WHERE a=1; QUERY PLAN `--SEARCH t1 USING INDEX i1 (a=?)
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-16170-02914-14290-07150-03100-60317-35403-36262'>context</a>, <a href='matrix/matrix_deqp.html#R-16170-02914-14290-07150-03100-60317-35403-36262'>detail</a>)</i></p></dd>
+
+<dt><b>R-16179-57541-27339-65229-35614-47877-55057-18753</b></dt>
+<dd><p>After the error message is delivered up to the client application, the string will be automatically freed by sqlite3_free() and the zErrMsg field will be zeroed.
+<i>(source: <a href="c3ref/vtab.html">c3ref/vtab.html</a>, checked-by: th3/req1/vtab01.test, matrix: <a href='matrix/c3ref/vtab.html#R-16179-57541-27339-65229-35614-47877-55057-18753'>context</a>, <a href='matrix/matrix_dvtab.html#R-16179-57541-27339-65229-35614-47877-55057-18753'>detail</a>)</i></p></dd>
+
+<dt><b>R-16185-00071-09955-21762-46377-47789-41533-03861</b></dt>
+<dd><p>SQLite uses a cost-based query planner that estimates the CPU and disk I/O costs of various competing query plans and chooses the plan that it thinks will be the fastest.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-16185-00071-09955-21762-46377-47789-41533-03861'>context</a>, <a href='matrix/matrix_doptoverview.html#R-16185-00071-09955-21762-46377-47789-41533-03861'>detail</a>)</i></p></dd>
+
+<dt><b>R-16185-13185-15947-28676-15535-40253-42456-41343</b></dt>
+<dd><p>The sqlite3_str_finish(X) interface will also return a NULL pointer if the string in sqlite3_str object X is zero bytes long.
+<i>(source: <a href="c3ref/str_finish.html">c3ref/str_finish.html</a>, matrix: <a href='matrix/c3ref/str_finish.html#R-16185-13185-15947-28676-15535-40253-42456-41343'>context</a>, <a href='matrix/matrix_dstr_finish.html#R-16185-13185-15947-28676-15535-40253-42456-41343'>detail</a>)</i></p></dd>
+
+<dt><b>R-16230-40037-23249-35634-11042-62086-60136-18681</b></dt>
+<dd><p>The LIKE and GLOB optimizations consist of adding two virtual terms like this: column >= x AND column < y
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-16230-40037-23249-35634-11042-62086-60136-18681'>context</a>, <a href='matrix/matrix_doptoverview.html#R-16230-40037-23249-35634-11042-62086-60136-18681'>detail</a>)</i></p></dd>
+
+<dt><b>R-16262-20798-18081-17023-40907-44361-41056-32016</b></dt>
+<dd><p>If X is a string then characters indices refer to actual UTF-8 characters.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-16262-20798-18081-17023-40907-44361-41056-32016'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-16262-20798-18081-17023-40907-44361-41056-32016'>detail</a>)</i></p></dd>
+
+<dt><b>R-16263-09274-39662-25002-11330-48229-57034-52902</b></dt>
+<dd><p>Whenever the xFilename parameter is NULL it will also be the case that the flags parameter will include SQLITE_OPEN_DELETEONCLOSE.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-16263-09274-39662-25002-11330-48229-57034-52902'>context</a>, <a href='matrix/matrix_dvfs.html#R-16263-09274-39662-25002-11330-48229-57034-52902'>detail</a>)</i></p></dd>
+
+<dt><b>R-16315-56881-31877-40762-35289-40185-03417-40758</b></dt>
+<dd><p>SQLite uses the string pointed to by the 2nd parameter of sqlite3_result_error() or sqlite3_result_error16() as the text of an error message.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-16315-56881-31877-40762-35289-40185-03417-40758'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-16315-56881-31877-40762-35289-40185-03417-40758'>detail</a>)</i></p></dd>
+
+<dt><b>R-16333-64433-39289-13667-32304-47493-49006-13545</b></dt>
+<dd><p>Checkpoint as many frames as possible without waiting for any database readers or writers to finish, then sync the database file if all frames in the log were checkpointed.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-16333-64433-39289-13667-32304-47493-49006-13545'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-16333-64433-39289-13667-32304-47493-49006-13545'>detail</a>)</i></p></dd>
+
+<dt><b>R-16335-41477-51529-00085-31320-00976-56017-05968</b></dt>
+<dd><p>The implementation of the new function always causes an exception to be thrown.
+<i>(source: <a href="c3ref/overload_function.html">c3ref/overload_function.html</a>, matrix: <a href='matrix/c3ref/overload_function.html#R-16335-41477-51529-00085-31320-00976-56017-05968'>context</a>, <a href='matrix/matrix_doverload_function.html#R-16335-41477-51529-00085-31320-00976-56017-05968'>detail</a>)</i></p></dd>
+
+<dt><b>R-16338-21766-30824-60129-14672-05861-18786-65530</b></dt>
+<dd><p>The sqlite_schema.sql is NULL for the internal indexes that are automatically created by UNIQUE or PRIMARY KEY constraints.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-16338-21766-30824-60129-14672-05861-18786-65530'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-16338-21766-30824-60129-14672-05861-18786-65530'>detail</a>)</i></p></dd>
+
+<dt><b>R-16368-45976-00872-58854-24152-50721-64128-13057</b></dt>
+<dd><p>If the specified column is "rowid", "oid" or "_rowid_" and the table is not a WITHOUT ROWID table and an INTEGER PRIMARY KEY column has been explicitly declared, then the output parameters are set for the explicitly declared column.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-16368-45976-00872-58854-24152-50721-64128-13057'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-16368-45976-00872-58854-24152-50721-64128-13057'>detail</a>)</i></p></dd>
+
+<dt><b>R-16423-47210-04827-18220-00892-21798-11379-58569</b></dt>
+<dd><p>SQLITE_CONFIG_LOOKASIDE sets the default lookaside size. The SQLITE_DBCONFIG_LOOKASIDE option to sqlite3_db_config() can be used to change the lookaside configuration on individual connections.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-16423-47210-04827-18220-00892-21798-11379-58569'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-16423-47210-04827-18220-00892-21798-11379-58569'>detail</a>)</i></p></dd>
+
+<dt><b>R-16465-40078-63621-42444-05703-20205-45309-57719</b></dt>
+<dd><p>An error is still returned if the table cannot be created because of an existing index, even if the "IF NOT EXISTS" clause is specified.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-16465-40078-63621-42444-05703-20205-45309-57719'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-16465-40078-63621-42444-05703-20205-45309-57719'>detail</a>)</i></p></dd>
+
+<dt><b>R-16469-27921-09165-55692-23366-54628-53596-65397</b></dt>
+<dd><p>Let X be ((U-12)*64/255)-23. If the payload size P is less than or equal to X then the entire payload is stored on the b-tree page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-16469-27921-09165-55692-23366-54628-53596-65397'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-16469-27921-09165-55692-23366-54628-53596-65397'>detail</a>)</i></p></dd>
+
+<dt><b>R-16484-18454-63901-36936-39837-40548-12508-46006</b></dt>
+<dd><p>This means that if there is a RETURNING clause, the rows returned by the statement probably will not be in the order specified by the ORDER BY clause.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, matrix: <a href='matrix/lang_delete.html#R-16484-18454-63901-36936-39837-40548-12508-46006'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-16484-18454-63901-36936-39837-40548-12508-46006'>detail</a>)</i></p></dd>
+
+<dt><b>R-16560-34565-42127-15402-21393-00583-21014-04940</b></dt>
+<dd><p>When memory allocation statistics are disabled, the following SQLite interfaces become non-operational: sqlite3_hard_heap_limit64() sqlite3_memory_used() sqlite3_memory_highwater() sqlite3_soft_heap_limit64() sqlite3_status64()
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-16560-34565-42127-15402-21393-00583-21014-04940'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-16560-34565-42127-15402-21393-00583-21014-04940'>detail</a>)</i></p></dd>
+
+<dt><b>R-16566-16123-02807-20883-30772-24192-15588-47043</b></dt>
+<dd><p>If the fourth parameter to sqlite3_bind_text() or sqlite3_bind_text16() is negative, then the length of the string is the number of bytes up to the first zero terminator.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-16566-16123-02807-20883-30772-24192-15588-47043'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-16566-16123-02807-20883-30772-24192-15588-47043'>detail</a>)</i></p></dd>
+
+<dt><b>R-16584-60189-60940-01835-35282-37415-55139-16536</b></dt>
+<dd><p>The LIKE operator does a pattern matching comparison.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-16584-60189-60940-01835-35282-37415-55139-16536'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-16584-60189-60940-01835-35282-37415-55139-16536'>detail</a>)</i></p></dd>
+
+<dt><b>R-16618-15294-40098-25515-23421-58217-44729-28455</b></dt>
+<dd><p>The xDestroy callback is not called if the sqlite3_create_collation_v2() function fails.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-16618-15294-40098-25515-23421-58217-44729-28455'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-16618-15294-40098-25515-23421-58217-44729-28455'>detail</a>)</i></p></dd>
+
+<dt><b>R-16625-30785-18660-34070-49109-22249-51329-26220</b></dt>
+<dd><p>CREATE TABLE t1( t TEXT, -- text affinity by rule 2 nu NUMERIC, -- numeric affinity by rule 5 i INTEGER, -- integer affinity by rule 1 r REAL, -- real affinity by rule 4 no BLOB -- no affinity by rule 3 ); -- Values stored as TEXT, INTEGER, INTEGER, REAL, TEXT. INSERT INTO t1 VALUES('500.0', '500.0', '500.0', '500.0', '500.0'); SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1; text|integer|integer|real|text -- Values stored as TEXT, INTEGER, INTEGER, REAL, REAL. DELETE FROM t1; INSERT INTO t1 VALUES(500.0, 500.0, 500.0, 500.0, 500.0); SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1; text|integer|integer|real|real -- Values stored as TEXT, INTEGER, INTEGER, REAL, INTEGER. DELETE FROM t1; INSERT INTO t1 VALUES(500, 500, 500, 500, 500); SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1; text|integer|integer|real|integer -- BLOBs are always stored as BLOBs regardless of column affinity. DELETE FROM t1; INSERT INTO t1 VALUES(x'0500', x'0500', x'0500', x'0500', x'0500'); SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1; blob|blob|blob|blob|blob -- NULLs are also unaffected by affinity DELETE FROM t1; INSERT INTO t1 VALUES(NULL,NULL,NULL,NULL,NULL); SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1; null|null|null|null|null
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_03.test, matrix: <a href='matrix/datatype3.html#R-16625-30785-18660-34070-49109-22249-51329-26220'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-16625-30785-18660-34070-49109-22249-51329-26220'>detail</a>)</i></p></dd>
+
+<dt><b>R-16642-42503-02054-10937-29863-20492-60012-48807</b></dt>
+<dd><p>If pnLog is not NULL, then *pnLog is set to the total number of frames in the log file or to -1 if the checkpoint could not run because of an error or because the database is not in WAL mode.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-16642-42503-02054-10937-29863-20492-60012-48807'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-16642-42503-02054-10937-29863-20492-60012-48807'>detail</a>)</i></p></dd>
+
+<dt><b>R-16646-21584-46697-05681-31663-32907-36469-00200</b></dt>
+<dd><p>Assuming that customer records are stored in the "customers" table, and that order records are stored in the "orders" table, the following UPDATE trigger ensures that all associated orders are redirected when a customer changes his or her address: CREATE TRIGGER update_customer_address UPDATE OF address ON customers BEGIN UPDATE orders SET address = new.address WHERE customer_name = old.name; END; With this trigger installed, executing the statement: UPDATE customers SET address = '1 Main St.' WHERE name = 'Jack Jones'; causes the following to be automatically executed: UPDATE orders SET address = '1 Main St.' WHERE customer_name = 'Jack Jones';
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-16646-21584-46697-05681-31663-32907-36469-00200'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-16646-21584-46697-05681-31663-32907-36469-00200'>detail</a>)</i></p></dd>
+
+<dt><b>R-16667-09772-49719-31383-20699-54843-21151-14987</b></dt>
+<dd><p>A table created using CREATE TABLE AS has no PRIMARY KEY and no constraints of any kind. The default value of each column is NULL. The default collation sequence for each column of the new table is BINARY.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-16667-09772-49719-31383-20699-54843-21151-14987'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-16667-09772-49719-31383-20699-54843-21151-14987'>detail</a>)</i></p></dd>
+
+<dt><b>R-16677-54172-01660-13905-64102-51935-20932-64314</b></dt>
+<dd><p>All spaces following the first two keywords are converted into a single space.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-16677-54172-01660-13905-64102-51935-20932-64314'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-16677-54172-01660-13905-64102-51935-20932-64314'>detail</a>)</i></p></dd>
+
+<dt><b>R-16711-29980-24951-32335-36937-22599-07259-26262</b></dt>
+<dd><p>The filename in the INTO clause can be an arbitrary SQL expression that evaluates to a string.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: th3/cov1/vacuum10.test, matrix: <a href='matrix/lang_vacuum.html#R-16711-29980-24951-32335-36937-22599-07259-26262'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-16711-29980-24951-32335-36937-22599-07259-26262'>detail</a>)</i></p></dd>
+
+<dt><b>R-16717-50504-54717-12200-54209-43488-56382-57633</b></dt>
+<dd><p>Each R*Tree index is a virtual table with an odd number of columns between 3 and 11.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-16717-50504-54717-12200-54209-43488-56382-57633'>context</a>, <a href='matrix/matrix_drtree.html#R-16717-50504-54717-12200-54209-43488-56382-57633'>detail</a>)</i></p></dd>
+
+<dt><b>R-16727-13091-18593-02936-45365-35968-45386-40640</b></dt>
+<dd><p>The column may not be GENERATED ALWAYS .
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, matrix: <a href='matrix/lang_altertable.html#R-16727-13091-18593-02936-45365-35968-45386-40640'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-16727-13091-18593-02936-45365-35968-45386-40640'>detail</a>)</i></p></dd>
+
+<dt><b>R-16727-30552-59838-52112-19419-11299-04704-42837</b></dt>
+<dd><p>In this case, the object and the provided pointer to it must remain valid until either the prepared statement is finalized or the same SQL parameter is bound to something else, whichever occurs sooner.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, matrix: <a href='matrix/c3ref/bind_blob.html#R-16727-30552-59838-52112-19419-11299-04704-42837'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-16727-30552-59838-52112-19419-11299-04704-42837'>detail</a>)</i></p></dd>
+
+<dt><b>R-16735-29088-33516-22402-46874-28284-28835-57919</b></dt>
+<dd><p>When two TEXT values are compared an appropriate collating sequence is used to determine the result.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_04.test, matrix: <a href='matrix/datatype3.html#R-16735-29088-33516-22402-46874-28284-28835-57919'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-16735-29088-33516-22402-46874-28284-28835-57919'>detail</a>)</i></p></dd>
+
+<dt><b>R-16748-44311-29408-30496-47489-38562-34902-17551</b></dt>
+<dd><p>If the specified table is actually a view, an error code is returned.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-16748-44311-29408-30496-47489-38562-34902-17551'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-16748-44311-29408-30496-47489-38562-34902-17551'>detail</a>)</i></p></dd>
+
+<dt><b>R-16775-34716-48016-59856-43563-01952-64923-08515</b></dt>
+<dd><p>You cannot DELETE, INSERT, or UPDATE a view.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, checked-by: th3/req1/view01.test, matrix: <a href='matrix/lang_createview.html#R-16775-34716-48016-59856-43563-01952-64923-08515'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-16775-34716-48016-59856-43563-01952-64923-08515'>detail</a>)</i></p></dd>
+
+<dt><b>R-16776-49985-46642-51355-02020-16796-53995-22275</b></dt>
+<dd><p>The integer return value from the callback is currently ignored, though this may change in future releases.
+<i>(source: <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>, matrix: <a href='matrix/c3ref/trace_v2.html#R-16776-49985-46642-51355-02020-16796-53995-22275'>context</a>, <a href='matrix/matrix_dtrace_v2.html#R-16776-49985-46642-51355-02020-16796-53995-22275'>detail</a>)</i></p></dd>
+
+<dt><b>R-16824-07538-50218-17384-27705-17061-18390-01878</b></dt>
+<dd><p>Support for the diagnostic functions sqlite3_compileoption_used() and sqlite3_compileoption_get() may be omitted by specifying the SQLITE_OMIT_COMPILEOPTION_DIAGS option at compile time.
+<i>(source: <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a>, checked-by: src/ctime.c, matrix: <a href='matrix/c3ref/compileoption_get.html#R-16824-07538-50218-17384-27705-17061-18390-01878'>context</a>, <a href='matrix/matrix_dcompileoption_get.html#R-16824-07538-50218-17384-27705-17061-18390-01878'>detail</a>)</i></p></dd>
+
+<dt><b>R-16876-26469-56495-43773-04643-04870-06914-01150</b></dt>
+<dd><p>However, in many cases you can use an INSTEAD OF trigger on the view to accomplish the same thing.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, matrix: <a href='matrix/lang_createview.html#R-16876-26469-56495-43773-04643-04870-06914-01150'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-16876-26469-56495-43773-04643-04870-06914-01150'>detail</a>)</i></p></dd>
+
+<dt><b>R-16907-50223-28692-47460-07440-02664-00215-50680</b></dt>
+<dd><p>The SQL syntax for custom queries is the same regardless of which interface, sqlite3_rtree_geometry_callback() or sqlite3_rtree_query_callback(), is used to register the SQL function.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, th3/cov1/rtree03.test, th3/cov1/rtree04.test, matrix: <a href='matrix/rtree.html#R-16907-50223-28692-47460-07440-02664-00215-50680'>context</a>, <a href='matrix/matrix_drtree.html#R-16907-50223-28692-47460-07440-02664-00215-50680'>detail</a>)</i></p></dd>
+
+<dt><b>R-16960-46772-37295-51769-03234-47143-37776-03273</b></dt>
+<dd><p>The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces are not used by the SQLite core.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, matrix: <a href='matrix/c3ref/vfs.html#R-16960-46772-37295-51769-03234-47143-37776-03273'>context</a>, <a href='matrix/matrix_dvfs.html#R-16960-46772-37295-51769-03234-47143-37776-03273'>detail</a>)</i></p></dd>
+
+<dt><b>R-17002-27534-60658-04301-02636-10331-43886-13324</b></dt>
+<dd><p>The %z format is interchangeable with %s.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/printf2.test, th3/cov1/printf08.test, matrix: <a href='matrix/lang_corefunc.html#R-17002-27534-60658-04301-02636-10331-43886-13324'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-17002-27534-60658-04301-02636-10331-43886-13324'>detail</a>)</i></p></dd>
+
+<dt><b>R-17004-26469-33978-15550-51185-63234-25288-10208</b></dt>
+<dd><p>Multiple collating functions can be registered using the same name but with different eTextRep parameters and SQLite will use whichever function requires the least amount of data transformation.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-17004-26469-33978-15550-51185-63234-25288-10208'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-17004-26469-33978-15550-51185-63234-25288-10208'>detail</a>)</i></p></dd>
+
+<dt><b>R-17039-33674-48721-19365-01161-03583-42602-47199</b></dt>
+<dd><p>If this global variable is made to point to a string which is the name of a folder (a.k.a. directory), then all database files specified with a relative pathname and created or accessed by SQLite when using a built-in windows VFS will be assumed to be relative to that directory.
+<i>(source: <a href="c3ref/data_directory.html">c3ref/data_directory.html</a>, matrix: <a href='matrix/c3ref/data_directory.html#R-17039-33674-48721-19365-01161-03583-42602-47199'>context</a>, <a href='matrix/matrix_ddata_directory.html#R-17039-33674-48721-19365-01161-03583-42602-47199'>detail</a>)</i></p></dd>
+
+<dt><b>R-17066-08509-20793-46689-03241-48208-02822-18117</b></dt>
+<dd><p>The multi-argument min() function searches its arguments from left to right for an argument that defines a collating function and uses that collating function for all string comparisons.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-17066-08509-20793-46689-03241-48208-02822-18117'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-17066-08509-20793-46689-03241-48208-02822-18117'>detail</a>)</i></p></dd>
+
+<dt><b>R-17069-05052-11760-32212-31983-21465-64929-00475</b></dt>
+<dd><p>Regardless of whether or not it is successful, this file control takes the file descriptor out of batch write mode so that all subsequent write operations are independent.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-17069-05052-11760-32212-31983-21465-64929-00475'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-17069-05052-11760-32212-31983-21465-64929-00475'>detail</a>)</i></p></dd>
+
+<dt><b>R-17100-46000-36927-33778-08378-49986-19867-19918</b></dt>
+<dd><p>The sqlite3_column_name() interface returns a pointer to a zero-terminated UTF-8 string and sqlite3_column_name16() returns a pointer to a zero-terminated UTF-16 string.
+<i>(source: <a href="c3ref/column_name.html">c3ref/column_name.html</a>, matrix: <a href='matrix/c3ref/column_name.html#R-17100-46000-36927-33778-08378-49986-19867-19918'>context</a>, <a href='matrix/matrix_dcolumn_name.html#R-17100-46000-36927-33778-08378-49986-19867-19918'>detail</a>)</i></p></dd>
+
+<dt><b>R-17113-64042-22651-43669-37764-16281-15802-46090</b></dt>
+<dd><p>The "start of" modifiers (7 through 9) shift the date backwards to the beginning of the subject month, year or day.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-17113-64042-22651-43669-37764-16281-15802-46090'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-17113-64042-22651-43669-37764-16281-15802-46090'>detail</a>)</i></p></dd>
+
+<dt><b>R-17129-39366-12879-37953-16940-52651-36509-01278</b></dt>
+<dd><p>The SQLITE_ENABLE_STAT3 and SQLITE_ENABLE_STAT4 options causes the ANALYZE command to collect a histogram of column content in the sqlite_stat3 or sqlite_stat4 tables and to use this histogram to make a better guess at the best query to use for range constraints such as the above.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-17129-39366-12879-37953-16940-52651-36509-01278'>context</a>, <a href='matrix/matrix_doptoverview.html#R-17129-39366-12879-37953-16940-52651-36509-01278'>detail</a>)</i></p></dd>
+
+<dt><b>R-17146-37073-08858-03066-53488-24451-10311-22699</b></dt>
+<dd><p>Within a trigger program each INSERT, UPDATE and DELETE statement sets the value returned by sqlite3_changes() upon completion as normal. Of course, this value will not include any changes performed by sub-triggers, as the sqlite3_changes() value will be saved and restored after each sub-trigger has run.
+<i>(source: <a href="c3ref/changes.html">c3ref/changes.html</a>, checked-by: tcl/e_changes.test, matrix: <a href='matrix/c3ref/changes.html#R-17146-37073-08858-03066-53488-24451-10311-22699'>context</a>, <a href='matrix/matrix_dchanges.html#R-17146-37073-08858-03066-53488-24451-10311-22699'>detail</a>)</i></p></dd>
+
+<dt><b>R-17151-07205-10894-28299-62821-16887-02117-62221</b></dt>
+<dd><p>The sort order may or may not be ignored depending on the database file format, and in particular the schema format number.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx02.test, matrix: <a href='matrix/lang_createindex.html#R-17151-07205-10894-28299-62821-16887-02117-62221'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-17151-07205-10894-28299-62821-16887-02117-62221'>detail</a>)</i></p></dd>
+
+<dt><b>R-17177-10067-30884-53677-27777-30779-31144-63091</b></dt>
+<dd><p>The result of avg() is always a floating point value whenever there is at least one non-NULL input even if all inputs are integers.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-17177-10067-30884-53677-27777-30779-31144-63091'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-17177-10067-30884-53677-27777-30779-31144-63091'>detail</a>)</i></p></dd>
+
+<dt><b>R-17186-50053-08160-14434-65470-31031-28806-57680</b></dt>
+<dd><p>The busy-handler callback is never invoked in this mode.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/checkpoint01.test, matrix: <a href='matrix/pragma.html#R-17186-50053-08160-14434-65470-31031-28806-57680'>context</a>, <a href='matrix/matrix_dpragma.html#R-17186-50053-08160-14434-65470-31031-28806-57680'>detail</a>)</i></p></dd>
+
+<dt><b>R-17195-37504-02291-24232-45006-33803-26491-52044</b></dt>
+<dd><p>COLLATE clauses work the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/cov1/build08.test, matrix: <a href='matrix/stricttables.html#R-17195-37504-02291-24232-45006-33803-26491-52044'>context</a>, <a href='matrix/matrix_dstricttables.html#R-17195-37504-02291-24232-45006-33803-26491-52044'>detail</a>)</i></p></dd>
+
+<dt><b>R-17203-10061-39568-47821-02948-38975-34395-48032</b></dt>
+<dd><p>Calling sqlite3_free() with a pointer previously returned by sqlite3_malloc() or sqlite3_realloc() releases that memory so that it might be reused.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-17203-10061-39568-47821-02948-38975-34395-48032'>context</a>, <a href='matrix/matrix_dfree.html#R-17203-10061-39568-47821-02948-38975-34395-48032'>detail</a>)</i></p></dd>
+
+<dt><b>R-17228-37124-21945-03605-09770-36410-30558-62639</b></dt>
+<dd><p>If the action code is SQLITE_DELETE and the callback returns SQLITE_IGNORE then the DELETE operation proceeds but the truncate optimization is disabled and all rows are deleted individually.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: src/delete.c, th3/cov1/delete05.test, matrix: <a href='matrix/c3ref/set_authorizer.html#R-17228-37124-21945-03605-09770-36410-30558-62639'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-17228-37124-21945-03605-09770-36410-30558-62639'>detail</a>)</i></p></dd>
+
+<dt><b>R-17269-58859-62979-20789-28373-02283-01402-32903</b></dt>
+<dd><p>The pArg argument is passed through to the callback.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-17269-58859-62979-20789-28373-02283-01402-32903'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-17269-58859-62979-20789-28373-02283-01402-32903'>detail</a>)</i></p></dd>
+
+<dt><b>R-17287-60737-33985-12645-22938-14534-06595-16406</b></dt>
+<dd><p>Immediately following the wal-header are zero or more frames.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-17287-60737-33985-12645-22938-14534-06595-16406'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-17287-60737-33985-12645-22938-14534-06595-16406'>detail</a>)</i></p></dd>
+
+<dt><b>R-17313-07189-19129-06928-03198-35699-51824-58751</b></dt>
+<dd><p>The S and M arguments passed to sqlite3_backup_init(D,N,S,M) identify the database connection and database name of the source database, respectively.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup02.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-17313-07189-19129-06928-03198-35699-51824-58751'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-17313-07189-19129-06928-03198-35699-51824-58751'>detail</a>)</i></p></dd>
+
+<dt><b>R-17329-35644-14084-44573-27599-05498-14002-35742</b></dt>
+<dd><p>If both arguments X and Y to instr(X,Y) are non-NULL and are not BLOBs then both are interpreted as strings.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/instr.test, matrix: <a href='matrix/lang_corefunc.html#R-17329-35644-14084-44573-27599-05498-14002-35742'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-17329-35644-14084-44573-27599-05498-14002-35742'>detail</a>)</i></p></dd>
+
+<dt><b>R-17341-41375-54397-54408-61756-02302-26643-35471</b></dt>
+<dd><p>This is the number of times that SQLite has stepped forward in a table as part of a full table scan.
+<i>(source: <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a>, matrix: <a href='matrix/c3ref/c_stmtstatus_counter.html#R-17341-41375-54397-54408-61756-02302-26643-35471'>context</a>, <a href='matrix/matrix_dc_stmtstatus_counter.html#R-17341-41375-54397-54408-61756-02302-26643-35471'>detail</a>)</i></p></dd>
+
+<dt><b>R-17379-32951-58399-57501-33498-60036-41846-10214</b></dt>
+<dd><p>Any attempt to insert a duplicate entry will result in an error.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx01.test, matrix: <a href='matrix/lang_createindex.html#R-17379-32951-58399-57501-33498-60036-41846-10214'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-17379-32951-58399-57501-33498-60036-41846-10214'>detail</a>)</i></p></dd>
+
+<dt><b>R-17403-41821-06964-23183-41391-40881-28445-64765</b></dt>
+<dd><p>This value is not actually a counter, and so the resetFlg parameter to sqlite3_stmt_status() is ignored when the opcode is SQLITE_STMTSTATUS_MEMUSED.
+<i>(source: <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a>, matrix: <a href='matrix/c3ref/c_stmtstatus_counter.html#R-17403-41821-06964-23183-41391-40881-28445-64765'>context</a>, <a href='matrix/matrix_dc_stmtstatus_counter.html#R-17403-41821-06964-23183-41391-40881-28445-64765'>detail</a>)</i></p></dd>
+
+<dt><b>R-17446-42210-34693-14358-63736-15125-50788-14623</b></dt>
+<dd><p>Like other SQL identifiers, schema names are case-insensitive.
+<i>(source: <a href="lang_naming.html">lang_naming.html</a>, checked-by: tcl/e_resolve.test, matrix: <a href='matrix/lang_naming.html#R-17446-42210-34693-14358-63736-15125-50788-14623'>context</a>, <a href='matrix/matrix_dlang_naming.html#R-17446-42210-34693-14358-63736-15125-50788-14623'>detail</a>)</i></p></dd>
+
+<dt><b>R-17458-15700-03472-60284-42134-49579-06923-34319</b></dt>
+<dd><p>The sqlite3_stmt_busy(S) interface returns false if S is a NULL pointer.
+<i>(source: <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a>, checked-by: th3/cov1/vdbeapi03.test, matrix: <a href='matrix/c3ref/stmt_busy.html#R-17458-15700-03472-60284-42134-49579-06923-34319'>context</a>, <a href='matrix/matrix_dstmt_busy.html#R-17458-15700-03472-60284-42134-49579-06923-34319'>detail</a>)</i></p></dd>
+
+<dt><b>R-17459-35869-64710-40623-30328-29665-02946-35693</b></dt>
+<dd><p>If the schema. name appears before the pragma, then only tables in that one schema are shown.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-17459-35869-64710-40623-30328-29665-02946-35693'>context</a>, <a href='matrix/matrix_dpragma.html#R-17459-35869-64710-40623-30328-29665-02946-35693'>detail</a>)</i></p></dd>
+
+<dt><b>R-17482-00398-10630-63000-62255-53684-56492-08333</b></dt>
+<dd><p>If the authority is not an empty string or "localhost", an error is returned to the caller.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-17482-00398-10630-63000-62255-53684-56492-08333'>context</a>, <a href='matrix/matrix_dopen.html#R-17482-00398-10630-63000-62255-53684-56492-08333'>detail</a>)</i></p></dd>
+
+<dt><b>R-17495-17419-60080-02439-41171-12294-54829-31710</b></dt>
+<dd><p>The VACUUM command may change the ROWIDs of entries in any tables that do not have an explicit INTEGER PRIMARY KEY.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, th3/cov1/vacuum01.test, matrix: <a href='matrix/lang_vacuum.html#R-17495-17419-60080-02439-41171-12294-54829-31710'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-17495-17419-60080-02439-41171-12294-54829-31710'>detail</a>)</i></p></dd>
+
+<dt><b>R-17497-43474-02755-40707-55508-06941-43855-44277</b></dt>
+<dd><p>Likewise, registering a callback using sqlite3_wal_hook() disables the automatic checkpoint mechanism configured by this function.
+<i>(source: <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>, checked-by: tcl/e_walauto.test, matrix: <a href='matrix/c3ref/wal_autocheckpoint.html#R-17497-43474-02755-40707-55508-06941-43855-44277'>context</a>, <a href='matrix/matrix_dwal_autocheckpoint.html#R-17497-43474-02755-40707-55508-06941-43855-44277'>detail</a>)</i></p></dd>
+
+<dt><b>R-17503-25110-05842-17616-27745-25701-57748-55330</b></dt>
+<dd><p>If the WAL contains no copies of page P that are valid and which are a commit frame or are followed by a commit frame, then page P is read from the database file.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-17503-25110-05842-17616-27745-25701-57748-55330'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-17503-25110-05842-17616-27745-25701-57748-55330'>detail</a>)</i></p></dd>
+
+<dt><b>R-17503-44008-12544-16508-15108-35473-45615-30294</b></dt>
+<dd><p>The default implementation stores all statistics in a single table named "sqlite_stat1".
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-17503-44008-12544-16508-15108-35473-45615-30294'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-17503-44008-12544-16508-15108-35473-45615-30294'>detail</a>)</i></p></dd>
+
+<dt><b>R-17527-22739-13874-05126-20619-29164-21106-56855</b></dt>
+<dd><p>Parameter OutputType Description 5th const char* Data type 6th const char* Name of default collation sequence 7th int True if column has a NOT NULL constraint 8th int True if column is part of the PRIMARY KEY 9th int True if column is AUTOINCREMENT
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-17527-22739-13874-05126-20619-29164-21106-56855'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-17527-22739-13874-05126-20619-29164-21106-56855'>detail</a>)</i></p></dd>
+
+<dt><b>R-17535-15185-26123-07430-36338-10169-10447-08966</b></dt>
+<dd><p>If foreign key constraints are enabled, a DROP TABLE command performs an implicit DELETE FROM command before removing the table from the database schema.
+<i>(source: <a href="lang_droptable.html">lang_droptable.html</a>, checked-by: th3/req1/droptable01.test, matrix: <a href='matrix/lang_droptable.html#R-17535-15185-26123-07430-36338-10169-10447-08966'>context</a>, <a href='matrix/matrix_dlang_droptable.html#R-17535-15185-26123-07430-36338-10169-10447-08966'>detail</a>)</i></p></dd>
+
+<dt><b>R-17537-00183-53931-12298-10408-12793-18687-03447</b></dt>
+<dd><p>A similar effect occurs when the original date is February 29 of a leapyear and the modifier is &plusmn;N years where N is not a multiple of four.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-17537-00183-53931-12298-10408-12793-18687-03447'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-17537-00183-53931-12298-10408-12793-18687-03447'>detail</a>)</i></p></dd>
+
+<dt><b>R-17551-26524-16048-03104-21027-35305-23436-00948</b></dt>
+<dd><p>Strings returned by sqlite3_column_text16() always have the endianness which is native to the platform, regardless of the text encoding set for the database.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, matrix: <a href='matrix/c3ref/column_blob.html#R-17551-26524-16048-03104-21027-35305-23436-00948'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-17551-26524-16048-03104-21027-35305-23436-00948'>detail</a>)</i></p></dd>
+
+<dt><b>R-17564-54218-01993-46231-42657-60991-50837-12624</b></dt>
+<dd><p>If the resetFlag is true, then the highest record value is reset after *pHighwater is written.
+<i>(source: <a href="c3ref/status.html">c3ref/status.html</a>, matrix: <a href='matrix/c3ref/status.html#R-17564-54218-01993-46231-42657-60991-50837-12624'>context</a>, <a href='matrix/matrix_dstatus.html#R-17564-54218-01993-46231-42657-60991-50837-12624'>detail</a>)</i></p></dd>
+
+<dt><b>R-17579-15688-44175-34852-39551-28405-28214-64262</b></dt>
+<dd><p>These interfaces are only available if SQLite is compiled using the SQLITE_ENABLE_PREUPDATE_HOOK compile-time option.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-17579-15688-44175-34852-39551-28405-28214-64262'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-17579-15688-44175-34852-39551-28405-28214-64262'>detail</a>)</i></p></dd>
+
+<dt><b>R-17591-50446-37876-17822-10375-27592-36497-28987</b></dt>
+<dd><p>Boolean values are stored as integers 0 (false) and 1 (true).
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-17591-50446-37876-17822-10375-27592-36497-28987'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-17591-50446-37876-17822-10375-27592-36497-28987'>detail</a>)</i></p></dd>
+
+<dt><b>R-17596-52174-25214-41225-30917-27450-40075-28590</b></dt>
+<dd><p>A particular database will use either a rollback journal or a WAL, but not both at the same time.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-17596-52174-25214-41225-30917-27450-40075-28590'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-17596-52174-25214-41225-30917-27450-40075-28590'>detail</a>)</i></p></dd>
+
+<dt><b>R-17615-49737-42602-31197-05538-64484-08202-17390</b></dt>
+<dd><p>A negative number implies no limit.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma26.test, matrix: <a href='matrix/pragma.html#R-17615-49737-42602-31197-05538-64484-08202-17390'>context</a>, <a href='matrix/matrix_dpragma.html#R-17615-49737-42602-31197-05538-64484-08202-17390'>detail</a>)</i></p></dd>
+
+<dt><b>R-17628-54414-54605-31939-57279-20393-13350-52356</b></dt>
+<dd><p>The next time SQLite attempts to open the database file, the presence of the rollback journal file will be detected and the journal will be automatically played back to restore the database to its state at the start of the incomplete transaction.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-17628-54414-54605-31939-57279-20393-13350-52356'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-17628-54414-54605-31939-57279-20393-13350-52356'>detail</a>)</i></p></dd>
+
+<dt><b>R-17644-02150-10619-56225-58542-30426-53377-14747</b></dt>
+<dd><p>The sqlite3_create_module_v2() interface has a fifth parameter which is a pointer to a destructor for the pClientData.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-17644-02150-10619-56225-58542-30426-53377-14747'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-17644-02150-10619-56225-58542-30426-53377-14747'>detail</a>)</i></p></dd>
+
+<dt><b>R-17663-53610-53053-19018-07055-34524-04092-57250</b></dt>
+<dd><p>&lsqb;expr&rsqb;&nbsp;ESCAPE&nbsp;&lsqb;escape-character-expr&rsqb;&nbsp;4
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-17663-53610-53053-19018-07055-34524-04092-57250'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-17663-53610-53053-19018-07055-34524-04092-57250'>detail</a>)</i></p></dd>
+
+<dt><b>R-17683-59594-13579-14757-04762-40863-05270-49270</b></dt>
+<dd><p>At various points during the compilation process, as logic is being created to perform various actions, the authorizer callback is invoked to see if those actions are allowed.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, matrix: <a href='matrix/c3ref/set_authorizer.html#R-17683-59594-13579-14757-04762-40863-05270-49270'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-17683-59594-13579-14757-04762-40863-05270-49270'>detail</a>)</i></p></dd>
+
+<dt><b>R-17684-03275-18018-08876-61159-17187-00685-37913</b></dt>
+<dd><p>Only ROWID values from previous transactions that were committed are considered. ROWID values that were rolled back are ignored and can be reused.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-17684-03275-18018-08876-61159-17187-00685-37913'>context</a>, <a href='matrix/matrix_dautoinc.html#R-17684-03275-18018-08876-61159-17187-00685-37913'>detail</a>)</i></p></dd>
+
+<dt><b>R-17719-44813-04835-03337-09891-18871-23593-16128</b></dt>
+<dd><p>An aggregate SQL function requires an implementation of xStep and xFinal and NULL pointer must be passed for xFunc.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc03.test, matrix: <a href='matrix/c3ref/create_function.html#R-17719-44813-04835-03337-09891-18871-23593-16128'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-17719-44813-04835-03337-09891-18871-23593-16128'>detail</a>)</i></p></dd>
+
+<dt><b>R-17719-64233-56665-24727-28694-41697-48581-47600</b></dt>
+<dd><p>Each frame consists of a 24-byte frame-header followed by a page-size bytes of page data.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-17719-64233-56665-24727-28694-41697-48581-47600'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-17719-64233-56665-24727-28694-41697-48581-47600'>detail</a>)</i></p></dd>
+
+<dt><b>R-17746-39108-25168-47884-07203-13722-37711-19749</b></dt>
+<dd><p>Pointers to the right of X refer to pages where all keys are greater than X.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-17746-39108-25168-47884-07203-13722-37711-19749'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-17746-39108-25168-47884-07203-13722-37711-19749'>detail</a>)</i></p></dd>
+
+<dt><b>R-17759-10613-53810-53402-33339-35108-00085-57750</b></dt>
+<dd><p>Most R*Tree queries use a depth-first search. This is accomplished by setting the rScore equal to iLevel.
+<i>(source: <a href="rtree.html">rtree.html</a>, matrix: <a href='matrix/rtree.html#R-17759-10613-53810-53402-33339-35108-00085-57750'>context</a>, <a href='matrix/matrix_drtree.html#R-17759-10613-53810-53402-33339-35108-00085-57750'>detail</a>)</i></p></dd>
+
+<dt><b>R-17768-43126-25682-30166-03658-34000-04918-35023</b></dt>
+<dd><p>The name of a result column is the value of the "AS" clause for that column, if there is an AS clause.
+<i>(source: <a href="c3ref/column_name.html">c3ref/column_name.html</a>, matrix: <a href='matrix/c3ref/column_name.html#R-17768-43126-25682-30166-03658-34000-04918-35023'>context</a>, <a href='matrix/matrix_dcolumn_name.html#R-17768-43126-25682-30166-03658-34000-04918-35023'>detail</a>)</i></p></dd>
+
+<dt><b>R-17784-08205-07510-46755-33017-49924-02897-50961</b></dt>
+<dd><p>The sqlite3_snapshot_open(D,S,P) interface either starts a new read transaction or upgrades an existing one for schema S of database connection D such that the read transaction refers to historical snapshot P, rather than the most recent change to the database.
+<i>(source: <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>, matrix: <a href='matrix/c3ref/snapshot_open.html#R-17784-08205-07510-46755-33017-49924-02897-50961'>context</a>, <a href='matrix/matrix_dsnapshot_open.html#R-17784-08205-07510-46755-33017-49924-02897-50961'>detail</a>)</i></p></dd>
+
+<dt><b>R-17817-00630-38271-37218-33911-49615-48775-23865</b></dt>
+<dd><p>If the largest possible ROWID has previously been inserted, then new INSERTs are not allowed and any attempt to insert a new row will fail with an SQLITE_FULL error.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: src/vdbe.c, th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-17817-00630-38271-37218-33911-49615-48775-23865'>context</a>, <a href='matrix/matrix_dautoinc.html#R-17817-00630-38271-37218-33911-49615-48775-23865'>detail</a>)</i></p></dd>
+
+<dt><b>R-17817-46062-61072-05424-12542-62157-01447-33721</b></dt>
+<dd><p>If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is returned and an error code and error message are stored in the destination database connection D.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup02.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-17817-46062-61072-05424-12542-62157-01447-33721'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-17817-46062-61072-05424-12542-62157-01447-33721'>detail</a>)</i></p></dd>
+
+<dt><b>R-17840-50075-33076-39937-50165-09009-15721-26614</b></dt>
+<dd><p>In ordinary indexes, there is exactly one entry in the index for every row in the table.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-17840-50075-33076-39937-50165-09009-15721-26614'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-17840-50075-33076-39937-50165-09009-15721-26614'>detail</a>)</i></p></dd>
+
+<dt><b>R-17847-41579-08261-19893-13376-57099-17968-14055</b></dt>
+<dd><p>The third parameter (nArg) is the number of arguments that the SQL function or aggregate takes.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc02.test, matrix: <a href='matrix/c3ref/create_function.html#R-17847-41579-08261-19893-13376-57099-17968-14055'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-17847-41579-08261-19893-13376-57099-17968-14055'>detail</a>)</i></p></dd>
+
+<dt><b>R-17874-21123-26215-56857-37279-50732-34133-47276</b></dt>
+<dd><p>The first column of an SQLite R*Tree is similar to an integer primary key column of a normal SQLite table.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-17874-21123-26215-56857-37279-50732-34133-47276'>context</a>, <a href='matrix/matrix_drtree.html#R-17874-21123-26215-56857-37279-50732-34133-47276'>detail</a>)</i></p></dd>
+
+<dt><b>R-17899-04554-16139-08865-17180-48146-22421-25181</b></dt>
+<dd><p>Table names that begin with "sqlite_" are reserved for internal use. It is an error to attempt to create a table with a name that starts with "sqlite_".
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-17899-04554-16139-08865-17180-48146-22421-25181'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-17899-04554-16139-08865-17180-48146-22421-25181'>detail</a>)</i></p></dd>
+
+<dt><b>R-17926-09424-52325-52888-31926-01436-23382-42237</b></dt>
+<dd><p>The statistics gathered by this scan are stored in special database tables names shows names all begin with "sqlite_stat".
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-17926-09424-52325-52888-31926-01436-23382-42237'>context</a>, <a href='matrix/matrix_doptoverview.html#R-17926-09424-52325-52888-31926-01436-23382-42237'>detail</a>)</i></p></dd>
+
+<dt><b>R-17939-16412-24446-20634-14473-37434-37604-14341</b></dt>
+<dd><p>The extract operators act as a special syntax for functions "->"() and "->>"().
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-17939-16412-24446-20634-14473-37434-37604-14341'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-17939-16412-24446-20634-14473-37434-37604-14341'>detail</a>)</i></p></dd>
+
+<dt><b>R-17939-38828-17695-42161-08728-29310-38414-12197</b></dt>
+<dd><p>The fifth parameter is an arbitrary pointer. The implementation of the function can gain access to this pointer using sqlite3_user_data().
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/userdata01.test, matrix: <a href='matrix/c3ref/create_function.html#R-17939-38828-17695-42161-08728-29310-38414-12197'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-17939-38828-17695-42161-08728-29310-38414-12197'>detail</a>)</i></p></dd>
+
+<dt><b>R-17997-53317-61244-26257-33860-44845-36238-40761</b></dt>
+<dd><p>The left-hand operand of the operator is given by the corresponding aConstraint[].
+<i>(source: <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a>, matrix: <a href='matrix/c3ref/c_index_constraint_eq.html#R-17997-53317-61244-26257-33860-44845-36238-40761'>context</a>, <a href='matrix/matrix_dc_index_constraint_eq.html#R-17997-53317-61244-26257-33860-44845-36238-40761'>detail</a>)</i></p></dd>
+
+<dt><b>R-18023-38297-26646-57171-09733-60965-00209-38549</b></dt>
+<dd><p>EXTRA synchronous is like FULL with the addition that the directory containing a rollback journal is synced after that journal is unlinked to commit a transaction in DELETE mode.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-18023-38297-26646-57171-09733-60965-00209-38549'>context</a>, <a href='matrix/matrix_dpragma.html#R-18023-38297-26646-57171-09733-60965-00209-38549'>detail</a>)</i></p></dd>
+
+<dt><b>R-18031-23188-38756-14350-07582-34544-63211-44348</b></dt>
+<dd><p>If there is no metadata associated with the function argument, the sqlite3_get_auxdata(C,N) interface returns a NULL pointer.
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-18031-23188-38756-14350-07582-34544-63211-44348'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-18031-23188-38756-14350-07582-34544-63211-44348'>detail</a>)</i></p></dd>
+
+<dt><b>R-18043-40700-22598-52813-64197-51522-53393-10304</b></dt>
+<dd><p>The psow query parameter works with the default windows and unix VFSes but might be a no-op for other proprietary or non-standard VFSes.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-18043-40700-22598-52813-64197-51522-53393-10304'>context</a>, <a href='matrix/matrix_duri.html#R-18043-40700-22598-52813-64197-51522-53393-10304'>detail</a>)</i></p></dd>
+
+<dt><b>R-18085-46797-38544-57069-39269-06542-00638-19188</b></dt>
+<dd><p>numeric arguments in parentheses that following the type name (ex: "VARCHAR(255)") are ignored
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_02.test, matrix: <a href='matrix/datatype3.html#R-18085-46797-38544-57069-39269-06542-00638-19188'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-18085-46797-38544-57069-39269-06542-00638-19188'>detail</a>)</i></p></dd>
+
+<dt><b>R-18088-57186-13089-35997-22868-17352-00310-65503</b></dt>
+<dd><p>For example, let the index be CREATE INDEX ex1 ON tab1(a,b) WHERE a=5 OR b=6; And let the query be: SELECT * FROM tab1 WHERE b=6 AND a=7; -- uses partial index Then the index is usable by the query because the "b=6" term appears in both the index definition and in the query.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-18088-57186-13089-35997-22868-17352-00310-65503'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-18088-57186-13089-35997-22868-17352-00310-65503'>detail</a>)</i></p></dd>
+
+<dt><b>R-18130-23470-26620-07261-16274-17871-22790-47651</b></dt>
+<dd><p>This interface enables or disables both the C-API sqlite3_load_extension() and the SQL function load_extension().
+<i>(source: <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a>, matrix: <a href='matrix/c3ref/enable_load_extension.html#R-18130-23470-26620-07261-16274-17871-22790-47651'>context</a>, <a href='matrix/matrix_denable_load_extension.html#R-18130-23470-26620-07261-16274-17871-22790-47651'>detail</a>)</i></p></dd>
+
+<dt><b>R-18141-03110-11368-12345-11263-65050-17384-54287</b></dt>
+<dd><p>the current parser accepts duplicate options without complaining
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-18141-03110-11368-12345-11263-65050-17384-54287'>context</a>, <a href='matrix/matrix_dstricttables.html#R-18141-03110-11368-12345-11263-65050-17384-54287'>detail</a>)</i></p></dd>
+
+<dt><b>R-18143-12121-25249-36193-24562-40889-39176-48672</b></dt>
+<dd><p>Value is the integer 1.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-18143-12121-25249-36193-24562-40889-39176-48672'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-18143-12121-25249-36193-24562-40889-39176-48672'>detail</a>)</i></p></dd>
+
+<dt><b>R-18160-43138-45730-29033-18368-13452-34551-31953</b></dt>
+<dd><p>PRAGMA foreign_keys; PRAGMA foreign_keys = boolean; Query, set, or clear the enforcement of foreign key constraints.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma18.test, matrix: <a href='matrix/pragma.html#R-18160-43138-45730-29033-18368-13452-34551-31953'>context</a>, <a href='matrix/matrix_dpragma.html#R-18160-43138-45730-29033-18368-13452-34551-31953'>detail</a>)</i></p></dd>
+
+<dt><b>R-18160-48734-12487-09997-11031-61003-43897-08278</b></dt>
+<dd><p>SQLITE_STATUS_MALLOC_SIZE This parameter records the largest memory allocation request handed to sqlite3_malloc() or sqlite3_realloc() (or their internal equivalents). Only the value returned in the *pHighwater parameter to sqlite3_status() is of interest. The value written into the *pCurrent parameter is undefined.
+<i>(source: <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a>, matrix: <a href='matrix/c3ref/c_status_malloc_count.html#R-18160-48734-12487-09997-11031-61003-43897-08278'>context</a>, <a href='matrix/matrix_dc_status_malloc_count.html#R-18160-48734-12487-09997-11031-61003-43897-08278'>detail</a>)</i></p></dd>
+
+<dt><b>R-18190-43830-34676-47582-56241-44977-21337-20567</b></dt>
+<dd><p>If an error occurs and pzErrMsg is not 0, then the sqlite3_load_extension() interface shall attempt to fill *pzErrMsg with error message text stored in memory obtained from sqlite3_malloc().
+<i>(source: <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>, matrix: <a href='matrix/c3ref/load_extension.html#R-18190-43830-34676-47582-56241-44977-21337-20567'>context</a>, <a href='matrix/matrix_dload_extension.html#R-18190-43830-34676-47582-56241-44977-21337-20567'>detail</a>)</i></p></dd>
+
+<dt><b>R-18219-48316-63080-50419-00617-04513-48558-33147</b></dt>
+<dd><p>In other words, the values to the right of the IN operator (the "x", "y", and "z" values in this example) are considered to have no affinity, even if they happen to be column values or CAST expressions.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-18219-48316-63080-50419-00617-04513-48558-33147'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-18219-48316-63080-50419-00617-04513-48558-33147'>detail</a>)</i></p></dd>
+
+<dt><b>R-18232-39104-31806-20551-06401-15021-42756-14177</b></dt>
+<dd><p>The TEMP or TEMPORARY keyword is removed if it occurs after the initial CREATE keyword.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-18232-39104-31806-20551-06401-15021-42756-14177'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-18232-39104-31806-20551-06401-15021-42756-14177'>detail</a>)</i></p></dd>
+
+<dt><b>R-18268-44140-34945-14293-33912-32138-63537-31986</b></dt>
+<dd><p>If an application-defined collating sequence and/or like() SQL function are provided, the LIKE optimization described here will never be taken.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-18268-44140-34945-14293-33912-32138-63537-31986'>context</a>, <a href='matrix/matrix_doptoverview.html#R-18268-44140-34945-14293-33912-32138-63537-31986'>detail</a>)</i></p></dd>
+
+<dt><b>R-18318-14995-07554-10565-41972-64784-37540-10382</b></dt>
+<dd><p>The value of a subquery expression is the first row of the result from the enclosed SELECT statement.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-18318-14995-07554-10565-41972-64784-37540-10382'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-18318-14995-07554-10565-41972-64784-37540-10382'>detail</a>)</i></p></dd>
+
+<dt><b>R-18321-05872-40763-16666-14015-36142-16508-50881</b></dt>
+<dd><p>The flags parameter to sqlite3_open_v2() must include, at a minimum, one of the following three flag combinations:
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/open.html#R-18321-05872-40763-16666-14015-36142-16508-50881'>context</a>, <a href='matrix/matrix_dopen.html#R-18321-05872-40763-16666-14015-36142-16508-50881'>detail</a>)</i></p></dd>
+
+<dt><b>R-18347-31070-03027-11066-56518-02178-55511-27886</b></dt>
+<dd><p>NULL values (serial type 0) sort first.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat05.test, matrix: <a href='matrix/fileformat2.html#R-18347-31070-03027-11066-56518-02178-55511-27886'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-18347-31070-03027-11066-56518-02178-55511-27886'>detail</a>)</i></p></dd>
+
+<dt><b>R-18364-25640-43471-65335-34300-00271-36361-11229</b></dt>
+<dd><p>Some mathematical operators (%, <<, >>, &, and |) expect INTEGER operands. For those operators, REAL operands are converted into INTEGER in the same way as a CAST to INTEGER.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_06.test, matrix: <a href='matrix/datatype3.html#R-18364-25640-43471-65335-34300-00271-36361-11229'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-18364-25640-43471-65335-34300-00271-36361-11229'>detail</a>)</i></p></dd>
+
+<dt><b>R-18369-35089-02774-53882-33695-33553-03042-04730</b></dt>
+<dd><p>In each such row, the sqlite_stat.stat column will be a string consisting of a list of integers followed by zero or more arguments.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-18369-35089-02774-53882-33695-33553-03042-04730'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-18369-35089-02774-53882-33695-33553-03042-04730'>detail</a>)</i></p></dd>
+
+<dt><b>R-18401-29434-64954-06986-64183-65174-36377-46247</b></dt>
+<dd><p>The ROLLBACK TO command reverts the state of the database back to what it was just after the corresponding SAVEPOINT.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-18401-29434-64954-06986-64183-65174-36377-46247'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-18401-29434-64954-06986-64183-65174-36377-46247'>detail</a>)</i></p></dd>
+
+<dt><b>R-18404-60208-00331-08583-24532-43133-17599-55121</b></dt>
+<dd><p>For the purposes of this paragraph, hexadecimal integer literals are not considered well-formed and are stored as TEXT. (This is done for historical compatibility with versions of SQLite prior to version 3.8.6 2014-08-15 where hexadecimal integer literals were first introduced into SQLite.)
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-18404-60208-00331-08583-24532-43133-17599-55121'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-18404-60208-00331-08583-24532-43133-17599-55121'>detail</a>)</i></p></dd>
+
+<dt><b>R-18439-38548-20374-55698-53430-21042-59445-48532</b></dt>
+<dd><p>In other words, if the left-hand dataset consists of Nleft rows of Mleft columns, and the right-hand dataset of Nright rows of Mright columns, then the cartesian product is a dataset of Nleft&times;Nright rows, each containing Mleft+Mright columns.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-18439-38548-20374-55698-53430-21042-59445-48532'>context</a>, <a href='matrix/matrix_dlang_select.html#R-18439-38548-20374-55698-53430-21042-59445-48532'>detail</a>)</i></p></dd>
+
+<dt><b>R-18444-13968-40811-25945-54439-20224-30854-05072</b></dt>
+<dd><p>If the progress callback returns non-zero, the operation is interrupted.
+<i>(source: <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>, checked-by: th3/req1/progress01.test, matrix: <a href='matrix/c3ref/progress_handler.html#R-18444-13968-40811-25945-54439-20224-30854-05072'>context</a>, <a href='matrix/matrix_dprogress_handler.html#R-18444-13968-40811-25945-54439-20224-30854-05072'>detail</a>)</i></p></dd>
+
+<dt><b>R-18448-33677-24948-48953-25784-65474-15600-00219</b></dt>
+<dd><p>If a schema-name is specified, it must be either "main", "temp", or the name of an attached database.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-18448-33677-24948-48953-25784-65474-15600-00219'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-18448-33677-24948-48953-25784-65474-15600-00219'>detail</a>)</i></p></dd>
+
+<dt><b>R-18465-63076-46355-46123-39901-27541-22994-57422</b></dt>
+<dd><p>The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer.
+<i>(source: <a href="c3ref/data_count.html">c3ref/data_count.html</a>, checked-by: th3/req1/datacnt01.test, matrix: <a href='matrix/c3ref/data_count.html#R-18465-63076-46355-46123-39901-27541-22994-57422'>context</a>, <a href='matrix/matrix_ddata_count.html#R-18465-63076-46355-46123-39901-27541-22994-57422'>detail</a>)</i></p></dd>
+
+<dt><b>R-18500-08619-10931-07451-20568-56201-09385-55546</b></dt>
+<dd><p>When the auto-vacuum mode is 1 or "full", the freelist pages are moved to the end of the database file and the database file is truncated to remove the freelist pages at every transaction commit.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-18500-08619-10931-07451-20568-56201-09385-55546'>context</a>, <a href='matrix/matrix_dpragma.html#R-18500-08619-10931-07451-20568-56201-09385-55546'>detail</a>)</i></p></dd>
+
+<dt><b>R-18509-21923-06285-21395-08287-44781-54571-62637</b></dt>
+<dd><p>In a well-formed sqlite_stat4 table, the samples for any single index must appear in the same order that they occur in the index. In other words, if entry S1 is earlier in the index b-tree than entry S2, then in the sqlite_stat4 table, sample S1 must have a smaller rowid than sample S2.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-18509-21923-06285-21395-08287-44781-54571-62637'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-18509-21923-06285-21395-08287-44781-54571-62637'>detail</a>)</i></p></dd>
+
+<dt><b>R-18547-52845-30240-29713-43116-28155-35660-14807</b></dt>
+<dd><p>The nul terminator is not stored.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-18547-52845-30240-29713-43116-28155-35660-14807'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-18547-52845-30240-29713-43116-28155-35660-14807'>detail</a>)</i></p></dd>
+
+<dt><b>R-18567-63872-28950-34991-21095-45728-61145-64681</b></dt>
+<dd><p>The 4th argument to sqlite3_exec() is relayed through to the 1st argument of each callback invocation.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-18567-63872-28950-34991-21095-45728-61145-64681'>context</a>, <a href='matrix/matrix_dexec.html#R-18567-63872-28950-34991-21095-45728-61145-64681'>detail</a>)</i></p></dd>
+
+<dt><b>R-18626-02544-16999-06814-32702-16026-07475-11297</b></dt>
+<dd><p>Columns in the result set include: "name" (its name); "type" (data type if given, else ''); "notnull" (whether or not the column can be NULL); "dflt_value" (the default value for the column); and "pk" (either zero for columns that are not part of the primary key, or the 1-based index of the column within the primary key).
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-18626-02544-16999-06814-32702-16026-07475-11297'>context</a>, <a href='matrix/matrix_dpragma.html#R-18626-02544-16999-06814-32702-16026-07475-11297'>detail</a>)</i></p></dd>
+
+<dt><b>R-18628-11938-58280-60424-32964-58816-64179-48454</b></dt>
+<dd><p>If the LIMIT expression evaluates to non-negative value N and the UPDATE statement has an ORDER BY clause, then all rows that would be updated in the absence of the LIMIT clause are sorted according to the ORDER BY and the first N updated.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-18628-11938-58280-60424-32964-58816-64179-48454'>context</a>, <a href='matrix/matrix_dlang_update.html#R-18628-11938-58280-60424-32964-58816-64179-48454'>detail</a>)</i></p></dd>
+
+<dt><b>R-18642-55679-55028-13140-51335-34498-19379-38199</b></dt>
+<dd><p>+&nbsp;&nbsp;&nbsp;-
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-18642-55679-55028-13140-51335-34498-19379-38199'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-18642-55679-55028-13140-51335-34498-19379-38199'>detail</a>)</i></p></dd>
+
+<dt><b>R-18658-48735-17951-17191-40214-20850-63941-45114</b></dt>
+<dd><p>The third parameter passed to the logger is log message after formatting via sqlite3_snprintf().
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/cov1/log01.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-18658-48735-17951-17191-40214-20850-63941-45114'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-18658-48735-17951-17191-40214-20850-63941-45114'>detail</a>)</i></p></dd>
+
+<dt><b>R-18665-26680-08407-38690-15882-41528-44716-07525</b></dt>
+<dd><p>The in-header database size is only considered to be valid if it is non-zero and if the 4-byte change counter at offset 24 exactly matches the 4-byte version-valid-for number at offset 92.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-18665-26680-08407-38690-15882-41528-44716-07525'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-18665-26680-08407-38690-15882-41528-44716-07525'>detail</a>)</i></p></dd>
+
+<dt><b>R-18669-12610-19021-20460-56494-30622-24671-33359</b></dt>
+<dd><p>A successful call to sqlite3_backup_init() returns a pointer to an sqlite3_backup object.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup02.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-18669-12610-19021-20460-56494-30622-24671-33359'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-18669-12610-19021-20460-56494-30622-24671-33359'>detail</a>)</i></p></dd>
+
+<dt><b>R-18673-21346-54823-18159-41507-63066-50898-24427</b></dt>
+<dd><p>The view to drop is identified by the view-name and optional schema-name specified as part of the DROP VIEW statement. This reference is resolved using the standard procedure for object resolution.
+<i>(source: <a href="lang_dropview.html">lang_dropview.html</a>, checked-by: th3/cov1/build13.test, matrix: <a href='matrix/lang_dropview.html#R-18673-21346-54823-18159-41507-63066-50898-24427'>context</a>, <a href='matrix/matrix_dlang_dropview.html#R-18673-21346-54823-18159-41507-63066-50898-24427'>detail</a>)</i></p></dd>
+
+<dt><b>R-18684-41029-50457-11697-46944-61670-11271-59779</b></dt>
+<dd><p>When no rows match an aggregate query, the xStep() callback of the aggregate function implementation is never called and xFinal() is called exactly once. In those cases, sqlite3_aggregate_context() might be called for the first time from within xFinal().
+<i>(source: <a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a>, checked-by: th3/req1/aggcntx01.test, matrix: <a href='matrix/c3ref/aggregate_context.html#R-18684-41029-50457-11697-46944-61670-11271-59779'>context</a>, <a href='matrix/matrix_daggregate_context.html#R-18684-41029-50457-11697-46944-61670-11271-59779'>detail</a>)</i></p></dd>
+
+<dt><b>R-18692-17694-63404-11739-00590-02418-57066-37741</b></dt>
+<dd><p>If the table being renamed has triggers or indices, then these remain attached to the table after it has been renamed.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/req1/altertable01.test, matrix: <a href='matrix/lang_altertable.html#R-18692-17694-63404-11739-00590-02418-57066-37741'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-18692-17694-63404-11739-00590-02418-57066-37741'>detail</a>)</i></p></dd>
+
+<dt><b>R-18701-28385-27325-47261-28842-16656-24212-49294</b></dt>
+<dd><p>If sqlite3_realloc(X,N) returns NULL and N is positive, then the prior allocation is not freed.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-18701-28385-27325-47261-28842-16656-24212-49294'>context</a>, <a href='matrix/matrix_dfree.html#R-18701-28385-27325-47261-28842-16656-24212-49294'>detail</a>)</i></p></dd>
+
+<dt><b>R-18705-33393-57819-41139-38249-59845-61429-28312</b></dt>
+<dd><p>If neither ASC or DESC are specified, rows are sorted in ascending (smaller values first) order by default.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-18705-33393-57819-41139-38249-59845-61429-28312'>context</a>, <a href='matrix/matrix_dlang_select.html#R-18705-33393-57819-41139-38249-59845-61429-28312'>detail</a>)</i></p></dd>
+
+<dt><b>R-18711-35549-27220-03897-01638-65186-51204-23198</b></dt>
+<dd><p>The ROLLBACK command without a TO clause rolls backs all transactions and leaves the transaction stack empty.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-18711-35549-27220-03897-01638-65186-51204-23198'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-18711-35549-27220-03897-01638-65186-51204-23198'>detail</a>)</i></p></dd>
+
+<dt><b>R-18721-11322-01126-64339-40438-59164-27470-15171</b></dt>
+<dd><p>If the SQLITE_FCNTL_PRAGMA file control returns any result code other than SQLITE_OK or SQLITE_NOTFOUND, that means that the VFS encountered an error while handling the PRAGMA and the compilation of the PRAGMA fails with an error.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, checked-by: th3/cov1/pragma24.test, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-18721-11322-01126-64339-40438-59164-27470-15171'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-18721-11322-01126-64339-40438-59164-27470-15171'>detail</a>)</i></p></dd>
+
+<dt><b>R-18741-16139-46901-23037-06510-07608-27753-13735</b></dt>
+<dd><p>If the third parameter to sqlite3_result_error() or sqlite3_result_error16() is negative then SQLite takes as the error message all text up through the first zero character.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-18741-16139-46901-23037-06510-07608-27753-13735'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-18741-16139-46901-23037-06510-07608-27753-13735'>detail</a>)</i></p></dd>
+
+<dt><b>R-18761-36601-52477-41858-50422-48259-26249-60600</b></dt>
+<dd><p>There are three arguments to SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned memory (pMem), the size of each page cache line (sz), and the number of cache lines (N).
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/cov1/main42.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-18761-36601-52477-41858-50422-48259-26249-60600'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-18761-36601-52477-41858-50422-48259-26249-60600'>detail</a>)</i></p></dd>
+
+<dt><b>R-18773-06579-40569-18123-18199-49078-54792-42080</b></dt>
+<dd><p>SQLITE_RANGE is returned if the parameter index is out of range.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-18773-06579-40569-18123-18199-49078-54792-42080'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-18773-06579-40569-18123-18199-49078-54792-42080'>detail</a>)</i></p></dd>
+
+<dt><b>R-18814-23501-09117-45657-61449-22992-54979-37312</b></dt>
+<dd><p>Each time a row is inserted into the table by an INSERT statement that does not provide explicit values for all table columns the values stored in the new row are determined by their default values
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-18814-23501-09117-45657-61449-22992-54979-37312'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-18814-23501-09117-45657-61449-22992-54979-37312'>detail</a>)</i></p></dd>
+
+<dt><b>R-18818-06259-05609-26467-03914-52420-50425-49000</b></dt>
+<dd><p>A SAVEPOINT can be started either within or outside of a BEGIN...COMMIT.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-18818-06259-05609-26467-03914-52420-50425-49000'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-18818-06259-05609-26467-03914-52420-50425-49000'>detail</a>)</i></p></dd>
+
+<dt><b>R-18846-05946-40974-48701-32199-53032-10077-35779</b></dt>
+<dd><p>With synchronous OFF (0), SQLite continues without syncing as soon as it has handed data off to the operating system.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-18846-05946-40974-48701-32199-53032-10077-35779'>context</a>, <a href='matrix/matrix_dpragma.html#R-18846-05946-40974-48701-32199-53032-10077-35779'>detail</a>)</i></p></dd>
+
+<dt><b>R-18856-64447-32517-13318-33579-07767-23814-56336</b></dt>
+<dd><p>For example, the following CREATE TABLE statements all specify the same table, which will have the exact same representation on disk: CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,c)) WITHOUT ROWID); CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,c,a,c)) WITHOUT ROWID); CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,A,a,C)) WITHOUT ROWID); CREATE TABLE t1(a,b,c,d,PRIMARY KEY(a,a,a,a,c)) WITHOUT ROWID);
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-18856-64447-32517-13318-33579-07767-23814-56336'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-18856-64447-32517-13318-33579-07767-23814-56336'>detail</a>)</i></p></dd>
+
+<dt><b>R-18879-47479-26487-44670-60127-29624-08821-22011</b></dt>
+<dd><p>If it is set to "DESC", then FTS4 stores its data in such a way as to optimize returning results in descending order by docid.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-18879-47479-26487-44670-60127-29624-08821-22011'>context</a>, <a href='matrix/matrix_dfts3.html#R-18879-47479-26487-44670-60127-29624-08821-22011'>detail</a>)</i></p></dd>
+
+<dt><b>R-18885-42713-55126-22349-03815-15805-20030-42091</b></dt>
+<dd><p>A column with REAL affinity behaves like a column with NUMERIC affinity except that it forces integer values into floating point representation.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-18885-42713-55126-22349-03815-15805-20030-42091'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-18885-42713-55126-22349-03815-15805-20030-42091'>detail</a>)</i></p></dd>
+
+<dt><b>R-18895-27365-20289-12607-60428-18477-59440-44133</b></dt>
+<dd><p>If the "TEMP" or "TEMPORARY" keyword occurs between the "CREATE" and "TABLE" then the new table is created in the temp database.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-18895-27365-20289-12607-60428-18477-59440-44133'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-18895-27365-20289-12607-60428-18477-59440-44133'>detail</a>)</i></p></dd>
+
+<dt><b>R-18902-30764-50144-06285-62230-16633-33845-18068</b></dt>
+<dd><p>A "FULL JOIN" or "FULL OUTER JOIN" is a combination of a "LEFT JOIN" and a "RIGHT JOIN".
+<i>(source: <a href="lang_select.html">lang_select.html</a>, matrix: <a href='matrix/lang_select.html#R-18902-30764-50144-06285-62230-16633-33845-18068'>context</a>, <a href='matrix/matrix_dlang_select.html#R-18902-30764-50144-06285-62230-16633-33845-18068'>detail</a>)</i></p></dd>
+
+<dt><b>R-18913-19355-04042-04396-26693-02137-35105-64598</b></dt>
+<dd><p>The fourth parameter is the number of pages currently in the write-ahead log file, including those that were just committed.
+<i>(source: <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>, checked-by: tcl/e_walhook.test, matrix: <a href='matrix/c3ref/wal_hook.html#R-18913-19355-04042-04396-26693-02137-35105-64598'>context</a>, <a href='matrix/matrix_dwal_hook.html#R-18913-19355-04042-04396-26693-02137-35105-64598'>detail</a>)</i></p></dd>
+
+<dt><b>R-18927-01951-35709-41382-23039-58065-29475-65248</b></dt>
+<dd><p>Each column of the new row is populated with its default value, or with a NULL if no default value is specified as part of the column definition in the CREATE TABLE statement.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-18927-01951-35709-41382-23039-58065-29475-65248'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-18927-01951-35709-41382-23039-58065-29475-65248'>detail</a>)</i></p></dd>
+
+<dt><b>R-18962-08090-15768-27249-44223-08875-09432-04987</b></dt>
+<dd><p>Hence, a cache created with bPurgeable false will never contain any unpinned pages.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-18962-08090-15768-27249-44223-08875-09432-04987'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-18962-08090-15768-27249-44223-08875-09432-04987'>detail</a>)</i></p></dd>
+
+<dt><b>R-18964-51531-38235-16261-57269-07859-04237-25462</b></dt>
+<dd><p>This function causes any pending database operation to abort and return at its earliest opportunity.
+<i>(source: <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>, matrix: <a href='matrix/c3ref/interrupt.html#R-18964-51531-38235-16261-57269-07859-04237-25462'>context</a>, <a href='matrix/matrix_dinterrupt.html#R-18964-51531-38235-16261-57269-07859-04237-25462'>detail</a>)</i></p></dd>
+
+<dt><b>R-18968-56672-08189-06837-25504-50513-21713-31862</b></dt>
+<dd><p>The ROWID chosen for the new row is at least one larger than the largest ROWID that has ever before existed in that same table.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-18968-56672-08189-06837-25504-50513-21713-31862'>context</a>, <a href='matrix/matrix_dautoinc.html#R-18968-56672-08189-06837-25504-50513-21713-31862'>detail</a>)</i></p></dd>
+
+<dt><b>R-18977-48537-51631-02692-14706-00961-61427-62208</b></dt>
+<dd><p>The sqlite3_txn_state(D,S) interface returns one of these constants in order to describe the transaction state of schema S in database connection D.
+<i>(source: <a href="c3ref/c_txn_none.html">c3ref/c_txn_none.html</a>, matrix: <a href='matrix/c3ref/c_txn_none.html#R-18977-48537-51631-02692-14706-00961-61427-62208'>context</a>, <a href='matrix/matrix_dc_txn_none.html#R-18977-48537-51631-02692-14706-00961-61427-62208'>detail</a>)</i></p></dd>
+
+<dt><b>R-18978-08031-62088-38924-17278-52934-19628-35993</b></dt>
+<dd><p>The memory pointed to by the character pointers returned for the declaration type and collation sequence is valid until the next call to any SQLite API function.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-18978-08031-62088-38924-17278-52934-19628-35993'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-18978-08031-62088-38924-17278-52934-19628-35993'>detail</a>)</i></p></dd>
+
+<dt><b>R-18981-16292-44177-39464-49712-02547-36593-34843</b></dt>
+<dd><p>When the defer_foreign_keys PRAGMA is on, enforcement of all foreign key constraints is delayed until the outermost transaction is committed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/fkey6.test, th3/cov1/fkey24.test, matrix: <a href='matrix/pragma.html#R-18981-16292-44177-39464-49712-02547-36593-34843'>context</a>, <a href='matrix/matrix_dpragma.html#R-18981-16292-44177-39464-49712-02547-36593-34843'>detail</a>)</i></p></dd>
+
+<dt><b>R-18981-44563-59556-01794-47708-02337-53296-37760</b></dt>
+<dd><p>The OFF journaling mode disables the rollback journal completely.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma25.test, matrix: <a href='matrix/pragma.html#R-18981-44563-59556-01794-47708-02337-53296-37760'>context</a>, <a href='matrix/matrix_dpragma.html#R-18981-44563-59556-01794-47708-02337-53296-37760'>detail</a>)</i></p></dd>
+
+<dt><b>R-18996-06026-12732-36881-04380-02078-38106-17370</b></dt>
+<dd><p>However, the IGNORE conflict resolution algorithm works like ABORT for foreign key constraint errors.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, matrix: <a href='matrix/lang_conflict.html#R-18996-06026-12732-36881-04380-02078-38106-17370'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-18996-06026-12732-36881-04380-02078-38106-17370'>detail</a>)</i></p></dd>
+
+<dt><b>R-19003-27813-57127-49100-22413-58501-27554-18699</b></dt>
+<dd><p>The SAVEPOINT with the matching name remains on the transaction stack, but all database changes that occurred after that SAVEPOINT was created are rolled back.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-19003-27813-57127-49100-22413-58501-27554-18699'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-19003-27813-57127-49100-22413-58501-27554-18699'>detail</a>)</i></p></dd>
+
+<dt><b>R-19069-01001-21275-64198-08959-57544-11845-18751</b></dt>
+<dd><p>These routines are used to register a new virtual table module name.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-19069-01001-21275-64198-08959-57544-11845-18751'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-19069-01001-21275-64198-08959-57544-11845-18751'>detail</a>)</i></p></dd>
+
+<dt><b>R-19114-56113-41752-64271-30879-46460-35912-30160</b></dt>
+<dd><p>Different constraints within the same table may have different default conflict resolution algorithms.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-19114-56113-41752-64271-30879-46460-35912-30160'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-19114-56113-41752-64271-30879-46460-35912-30160'>detail</a>)</i></p></dd>
+
+<dt><b>R-19120-50787-31629-64944-20395-18225-62762-09460</b></dt>
+<dd><p>The sqlite3_preupdate_old(D,N,P) interface writes into P a pointer to a protected sqlite3_value that contains the value of the Nth column of the table row before it is updated.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-19120-50787-31629-64944-20395-18225-62762-09460'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-19120-50787-31629-64944-20395-18225-62762-09460'>detail</a>)</i></p></dd>
+
+<dt><b>R-19139-12267-31476-22597-30278-48901-50934-33461</b></dt>
+<dd><p>If sqlite3_unlock_notify() is called with a NULL pointer as its second argument, then any existing unlock-notify callback is canceled.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-19139-12267-31476-22597-30278-48901-50934-33461'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-19139-12267-31476-22597-30278-48901-50934-33461'>detail</a>)</i></p></dd>
+
+<dt><b>R-19162-55388-28844-29887-54254-48882-22034-22486</b></dt>
+<dd><p>The sqlite3_bind_zeroblob() routine binds a BLOB of length N that is filled with zeroes.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-19162-55388-28844-29887-54254-48882-22034-22486'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-19162-55388-28844-29887-54254-48882-22034-22486'>detail</a>)</i></p></dd>
+
+<dt><b>R-19178-27645-63083-26050-05481-47319-52943-38968</b></dt>
+<dd><p>Otherwise, no affinity is applied and both operands are compared as is.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/cov1/affinity01.test, th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-19178-27645-63083-26050-05481-47319-52943-38968'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-19178-27645-63083-26050-05481-47319-52943-38968'>detail</a>)</i></p></dd>
+
+<dt><b>R-19186-55658-49729-13397-54658-17694-41016-19836</b></dt>
+<dd><p>The sqlite3_result_value() interface makes a copy of the sqlite3_value so that the sqlite3_value specified in the parameter may change or be deallocated after sqlite3_result_value() returns without harm.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result03.test, matrix: <a href='matrix/c3ref/result_blob.html#R-19186-55658-49729-13397-54658-17694-41016-19836'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-19186-55658-49729-13397-54658-17694-41016-19836'>detail</a>)</i></p></dd>
+
+<dt><b>R-19194-50107-23350-24777-39179-56094-65469-19806</b></dt>
+<dd><p>If this in-header datasize size is not valid (see the next paragraph), then the database size is computed by looking at the actual size of the database file.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-19194-50107-23350-24777-39179-56094-65469-19806'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-19194-50107-23350-24777-39179-56094-65469-19806'>detail</a>)</i></p></dd>
+
+<dt><b>R-19218-01018-34190-29408-05030-57766-08679-20332</b></dt>
+<dd><p>If the column-name list after table-name is omitted then the number of values inserted into each row must be the same as the number of columns in the table.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-19218-01018-34190-29408-05030-57766-08679-20332'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-19218-01018-34190-29408-05030-57766-08679-20332'>detail</a>)</i></p></dd>
+
+<dt><b>R-19222-28861-33123-00573-15800-37173-53846-06929</b></dt>
+<dd><p>Otherwise, sqlite3_value_pointer(V,Y) returns a NULL.
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, checked-by: th3/cov1/carray01.test, matrix: <a href='matrix/c3ref/value_blob.html#R-19222-28861-33123-00573-15800-37173-53846-06929'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-19222-28861-33123-00573-15800-37173-53846-06929'>detail</a>)</i></p></dd>
+
+<dt><b>R-19244-03478-32061-23000-56536-05403-47491-06826</b></dt>
+<dd><p>The leaves have a level of 0.
+<i>(source: <a href="rtree.html">rtree.html</a>, matrix: <a href='matrix/rtree.html#R-19244-03478-32061-23000-56536-05403-47491-06826'>context</a>, <a href='matrix/matrix_drtree.html#R-19244-03478-32061-23000-56536-05403-47491-06826'>detail</a>)</i></p></dd>
+
+<dt><b>R-19245-12964-15266-21259-12378-18812-33916-24209</b></dt>
+<dd><p>The DELETE journaling mode is the normal behavior.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma23.test, matrix: <a href='matrix/pragma.html#R-19245-12964-15266-21259-12378-18812-33916-24209'>context</a>, <a href='matrix/matrix_dpragma.html#R-19245-12964-15266-21259-12378-18812-33916-24209'>detail</a>)</i></p></dd>
+
+<dt><b>R-19249-32353-33767-36599-40313-00705-24761-59859</b></dt>
+<dd><p>SQLITE_LIMIT_WORKER_THREADS The maximum number of auxiliary worker threads that a single prepared statement may start.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: tcl/sort4.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-19249-32353-33767-36599-40313-00705-24761-59859'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-19249-32353-33767-36599-40313-00705-24761-59859'>detail</a>)</i></p></dd>
+
+<dt><b>R-19259-42385-45456-07469-03560-15190-02204-12412</b></dt>
+<dd><p>SQLITE_STATUS_PAGECACHE_SIZE This parameter records the largest memory allocation request handed to the pagecache memory allocator. Only the value returned in the *pHighwater parameter to sqlite3_status() is of interest. The value written into the *pCurrent parameter is undefined.
+<i>(source: <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a>, matrix: <a href='matrix/c3ref/c_status_malloc_count.html#R-19259-42385-45456-07469-03560-15190-02204-12412'>context</a>, <a href='matrix/matrix_dc_status_malloc_count.html#R-19259-42385-45456-07469-03560-15190-02204-12412'>detail</a>)</i></p></dd>
+
+<dt><b>R-19322-51547-46174-45390-10480-27965-13547-38348</b></dt>
+<dd><p>The sqlite3_normalized_sql() interface is only available if the SQLITE_ENABLE_NORMALIZE compile-time option is defined.
+<i>(source: <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>, matrix: <a href='matrix/c3ref/expanded_sql.html#R-19322-51547-46174-45390-10480-27965-13547-38348'>context</a>, <a href='matrix/matrix_dexpanded_sql.html#R-19322-51547-46174-45390-10480-27965-13547-38348'>detail</a>)</i></p></dd>
+
+<dt><b>R-19326-44825-19062-24470-23880-46223-50935-31383</b></dt>
+<dd><p>The "PRAGMA data_version" value is a local property of each database connection and so values returned by two concurrent invocations of "PRAGMA data_version" on separate database connections are often different even though the underlying database is identical.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma3.test, th3/cov1/pragma26.test, matrix: <a href='matrix/pragma.html#R-19326-44825-19062-24470-23880-46223-50935-31383'>context</a>, <a href='matrix/matrix_dpragma.html#R-19326-44825-19062-24470-23880-46223-50935-31383'>detail</a>)</i></p></dd>
+
+<dt><b>R-19334-12811-52965-43642-11320-54818-13590-65507</b></dt>
+<dd><p>Each group of input dataset rows contributes a single row to the set of result rows.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-19334-12811-52965-43642-11320-54818-13590-65507'>context</a>, <a href='matrix/matrix_dlang_select.html#R-19334-12811-52965-43642-11320-54818-13590-65507'>detail</a>)</i></p></dd>
+
+<dt><b>R-19353-19546-22807-46023-33784-34102-06986-46730</b></dt>
+<dd><p>A 2-dimensional R*Tree has 5 columns.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-19353-19546-22807-46023-33784-34102-06986-46730'>context</a>, <a href='matrix/matrix_drtree.html#R-19353-19546-22807-46023-33784-34102-06986-46730'>detail</a>)</i></p></dd>
+
+<dt><b>R-19353-43643-11289-35798-30332-46906-60350-15505</b></dt>
+<dd><p>The last bullet above is illustrated by the following: CREATE TABLE parent2(a, b, PRIMARY KEY(a,b)); CREATE TABLE child8(x, y, FOREIGN KEY(x,y) REFERENCES parent2); -- Ok CREATE TABLE child9(x REFERENCES parent2); -- Error! CREATE TABLE child10(x,y,z, FOREIGN KEY(x,y,z) REFERENCES parent2); -- Error!
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-19353-43643-11289-35798-30332-46906-60350-15505'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-19353-43643-11289-35798-30332-46906-60350-15505'>detail</a>)</i></p></dd>
+
+<dt><b>R-19393-22085-63206-61334-35392-55321-46849-03619</b></dt>
+<dd><p>For a string value X, the length(X) function returns the number of characters (not bytes) in X prior to the first NUL character.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-19393-22085-63206-61334-35392-55321-46849-03619'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-19393-22085-63206-61334-35392-55321-46849-03619'>detail</a>)</i></p></dd>
+
+<dt><b>R-19404-45868-36670-49387-53766-10214-08555-10559</b></dt>
+<dd><p>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.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/ctime02.test, matrix: <a href='matrix/lang_corefunc.html#R-19404-45868-36670-49387-53766-10214-08555-10559'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-19404-45868-36670-49387-53766-10214-08555-10559'>detail</a>)</i></p></dd>
+
+<dt><b>R-19406-19221-39828-63725-16599-34636-45225-33176</b></dt>
+<dd><p>The destructor will also be invoked if the call to sqlite3_create_module_v2() fails.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-19406-19221-39828-63725-16599-34636-45225-33176'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-19406-19221-39828-63725-16599-34636-45225-33176'>detail</a>)</i></p></dd>
+
+<dt><b>R-19441-39473-56265-40787-18174-36980-59541-17858</b></dt>
+<dd><p>In other words, sqlite3_vtab_in() with -1 in the third argument is a mechanism by which the virtual table can ask SQLite if all-at-once processing of the IN operator is even possible.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-19441-39473-56265-40787-18174-36980-59541-17858'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-19441-39473-56265-40787-18174-36980-59541-17858'>detail</a>)</i></p></dd>
+
+<dt><b>R-19454-21689-24466-55871-29604-18048-60005-14723</b></dt>
+<dd><p>The sqlite3_memory_highwater() routine returns the maximum value of sqlite3_memory_used() since the high-water mark was last reset.
+<i>(source: <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>, matrix: <a href='matrix/c3ref/memory_highwater.html#R-19454-21689-24466-55871-29604-18048-60005-14723'>context</a>, <a href='matrix/matrix_dmemory_highwater.html#R-19454-21689-24466-55871-29604-18048-60005-14723'>detail</a>)</i></p></dd>
+
+<dt><b>R-19480-30968-40912-48323-17771-07927-20882-34034</b></dt>
+<dd><p>It can be applied to strings, numbers, blobs or NULL and it always returns a result with the same value as the operand.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-19480-30968-40912-48323-17771-07927-20882-34034'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-19480-30968-40912-48323-17771-07927-20882-34034'>detail</a>)</i></p></dd>
+
+<dt><b>R-19486-35828-58507-08873-52072-46615-25523-07720</b></dt>
+<dd><p>If the UPDATE statement has no ORDER BY clause, then all rows that would be updated in the absence of the LIMIT clause are assembled in an arbitrary order before applying the LIMIT and OFFSET clauses to determine which are actually updated.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-19486-35828-58507-08873-52072-46615-25523-07720'>context</a>, <a href='matrix/matrix_dlang_update.html#R-19486-35828-58507-08873-52072-46615-25523-07720'>detail</a>)</i></p></dd>
+
+<dt><b>R-19509-40356-60366-52142-26522-07330-31595-37095</b></dt>
+<dd><p>Instead of a separate OFFSET clause, the LIMIT clause may specify two scalar expressions separated by a comma.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-19509-40356-60366-52142-26522-07330-31595-37095'>context</a>, <a href='matrix/matrix_dlang_select.html#R-19509-40356-60366-52142-26522-07330-31595-37095'>detail</a>)</i></p></dd>
+
+<dt><b>R-19515-61262-57142-56165-47391-12804-63366-22975</b></dt>
+<dd><p>If there is no match, a NULL pointer is returned.
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-19515-61262-57142-56165-47391-12804-63366-22975'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-19515-61262-57142-56165-47391-12804-63366-22975'>detail</a>)</i></p></dd>
+
+<dt><b>R-19553-64528-24132-56992-22388-20387-05422-50188</b></dt>
+<dd><p>Total() never throws an integer overflow.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-19553-64528-24132-56992-22388-20387-05422-50188'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-19553-64528-24132-56992-22388-20387-05422-50188'>detail</a>)</i></p></dd>
+
+<dt><b>R-19570-53558-20410-64757-41149-53677-54257-63723</b></dt>
+<dd><p>It is an error to specify a compress function without also specifying an uncompress function.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-19570-53558-20410-64757-41149-53677-54257-63723'>context</a>, <a href='matrix/matrix_dfts3.html#R-19570-53558-20410-64757-41149-53677-54257-63723'>detail</a>)</i></p></dd>
+
+<dt><b>R-19582-19642-51467-45115-55963-42677-19295-17348</b></dt>
+<dd><p>DEFAULT clauses work the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/cov1/vdbemem05.test, matrix: <a href='matrix/stricttables.html#R-19582-19642-51467-45115-55963-42677-19295-17348'>context</a>, <a href='matrix/matrix_dstricttables.html#R-19582-19642-51467-45115-55963-42677-19295-17348'>detail</a>)</i></p></dd>
+
+<dt><b>R-19604-19849-22831-12858-52721-48914-18931-47249</b></dt>
+<dd><p>The sqlite3_str_reset(X) method resets the string under construction inside sqlite3_str object X back to zero bytes in length.
+<i>(source: <a href="c3ref/str_append.html">c3ref/str_append.html</a>, matrix: <a href='matrix/c3ref/str_append.html#R-19604-19849-22831-12858-52721-48914-18931-47249'>context</a>, <a href='matrix/matrix_dstr_append.html#R-19604-19849-22831-12858-52721-48914-18931-47249'>detail</a>)</i></p></dd>
+
+<dt><b>R-19619-42762-44736-08897-02902-26192-57996-46412</b></dt>
+<dd><p>The INDEXED BY and NOT INDEXED clauses are not allowed on UPDATE statements within triggers.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-19619-42762-44736-08897-02902-26192-57996-46412'>context</a>, <a href='matrix/matrix_dlang_update.html#R-19619-42762-44736-08897-02902-26192-57996-46412'>detail</a>)</i></p></dd>
+
+<dt><b>R-19619-54598-52217-51985-41765-58210-14890-62978</b></dt>
+<dd><p>The first argument to the busy handler is a copy of the void* pointer which is the third argument to sqlite3_busy_handler().
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-19619-54598-52217-51985-41765-58210-14890-62978'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-19619-54598-52217-51985-41765-58210-14890-62978'>detail</a>)</i></p></dd>
+
+<dt><b>R-19628-13587-38733-35705-07447-40697-34819-47467</b></dt>
+<dd><p>SQLite holds a write transaction open on the destination database file for the duration of the backup operation.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup01.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-19628-13587-38733-35705-07447-40697-34819-47467'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-19628-13587-38733-35705-07447-40697-34819-47467'>detail</a>)</i></p></dd>
+
+<dt><b>R-19648-30943-40070-65065-35301-05411-03146-42916</b></dt>
+<dd><p>This option takes three additional arguments that determine the lookaside memory allocator configuration for the database connection.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: th3/req1/dbconfig01.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-19648-30943-40070-65065-35301-05411-03146-42916'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-19648-30943-40070-65065-35301-05411-03146-42916'>detail</a>)</i></p></dd>
+
+<dt><b>R-19651-13392-21479-00254-25512-03039-17979-35123</b></dt>
+<dd><p>Thus when the third parameter (F) is non-negative, this interface is the mechanism by which the virtual table tells SQLite how it wants to process the IN operator.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-19651-13392-21479-00254-25512-03039-17979-35123'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-19651-13392-21479-00254-25512-03039-17979-35123'>detail</a>)</i></p></dd>
+
+<dt><b>R-19660-56479-36342-33235-14845-36400-09046-33188</b></dt>
+<dd><p>The result of sum() is an integer value if all non-NULL inputs are integers.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-19660-56479-36342-33235-14845-36400-09046-33188'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-19660-56479-36342-33235-14845-36400-09046-33188'>detail</a>)</i></p></dd>
+
+<dt><b>R-19672-38383-43870-63614-05691-24053-06228-32918</b></dt>
+<dd><p>The BEGIN command only works if the transaction stack is empty, or in other words if there are no pending transactions.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-19672-38383-43870-63614-05691-24053-06228-32918'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-19672-38383-43870-63614-05691-24053-06228-32918'>detail</a>)</i></p></dd>
+
+<dt><b>R-19673-40972-58319-61162-14300-46572-05681-35590</b></dt>
+<dd><p>If executing the SELECT would return no rows at all, then the EXISTS operator evaluates to 0.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-19673-40972-58319-61162-14300-46572-05681-35590'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-19673-40972-58319-61162-14300-46572-05681-35590'>detail</a>)</i></p></dd>
+
+<dt><b>R-19696-22724-31246-18328-34316-54250-32558-13544</b></dt>
+<dd><p>If logging is enabled, the zFormat string and subsequent arguments are used with sqlite3_snprintf() to generate the final output string.
+<i>(source: <a href="c3ref/log.html">c3ref/log.html</a>, checked-by: th3/cov1/log01.test, matrix: <a href='matrix/c3ref/log.html#R-19696-22724-31246-18328-34316-54250-32558-13544'>context</a>, <a href='matrix/matrix_dlog.html#R-19696-22724-31246-18328-34316-54250-32558-13544'>detail</a>)</i></p></dd>
+
+<dt><b>R-19740-29710-17840-49748-00054-03690-60264-24597</b></dt>
+<dd><p>So, for example, suppose an application runs one query against an R-Tree like this: SELECT id FROM demo_index WHERE maxY>=35.0 AND minY<=35.0; Then for each "id" value returned, suppose the application creates an UPDATE statement like the following and binds the "id" value returned against the "?1" parameter: UPDATE demo_index SET maxY=maxY+0.5 WHERE id=?1;
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree22.test, matrix: <a href='matrix/rtree.html#R-19740-29710-17840-49748-00054-03690-60264-24597'>context</a>, <a href='matrix/matrix_drtree.html#R-19740-29710-17840-49748-00054-03690-60264-24597'>detail</a>)</i></p></dd>
+
+<dt><b>R-19757-35036-22658-29796-35090-49616-44864-00036</b></dt>
+<dd><p>The current value of the parameter is returned into *pCurrent.
+<i>(source: <a href="c3ref/status.html">c3ref/status.html</a>, matrix: <a href='matrix/c3ref/status.html#R-19757-35036-22658-29796-35090-49616-44864-00036'>context</a>, <a href='matrix/matrix_dstatus.html#R-19757-35036-22658-29796-35090-49616-44864-00036'>detail</a>)</i></p></dd>
+
+<dt><b>R-19785-02834-31233-04888-56980-35561-24739-27802</b></dt>
+<dd><p>This pragma is a wrapper around the sqlite3_wal_autocheckpoint() C interface.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-19785-02834-31233-04888-56980-35561-24739-27802'>context</a>, <a href='matrix/matrix_dpragma.html#R-19785-02834-31233-04888-56980-35561-24739-27802'>detail</a>)</i></p></dd>
+
+<dt><b>R-19803-45884-64369-17915-53923-43638-05068-02663</b></dt>
+<dd><p>If an action is not explicitly specified, it defaults to "NO ACTION".
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: src/parse.y, tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-19803-45884-64369-17915-53923-43638-05068-02663'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-19803-45884-64369-17915-53923-43638-05068-02663'>detail</a>)</i></p></dd>
+
+<dt><b>R-19808-29370-64330-18475-42910-48751-21092-02221</b></dt>
+<dd><p>The xDestroy() method is used to delete a cache allocated by xCreate().
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: th3/th3pcache.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-19808-29370-64330-18475-42910-48751-21092-02221'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-19808-29370-64330-18475-42910-48751-21092-02221'>detail</a>)</i></p></dd>
+
+<dt><b>R-19812-36779-26037-25587-55568-01966-51571-26935</b></dt>
+<dd><p>If one operand is NULL and the other is not, then the IS operator evaluates to 0 (false) and the IS NOT operator is 1 (true).
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-19812-36779-26037-25587-55568-01966-51571-26935'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-19812-36779-26037-25587-55568-01966-51571-26935'>detail</a>)</i></p></dd>
+
+<dt><b>R-19827-62289-58446-52993-02249-28252-12913-58361</b></dt>
+<dd><p>If both virtual terms end up being used as constraints on an index, then the original BETWEEN term is omitted and the corresponding test is not performed on input rows.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-19827-62289-58446-52993-02249-28252-12913-58361'>context</a>, <a href='matrix/matrix_doptoverview.html#R-19827-62289-58446-52993-02249-28252-12913-58361'>detail</a>)</i></p></dd>
+
+<dt><b>R-19836-11244-52903-63249-46309-23850-25183-00208</b></dt>
+<dd><p>Example: X'53514C697465'
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-19836-11244-52903-63249-46309-23850-25183-00208'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-19836-11244-52903-63249-46309-23850-25183-00208'>detail</a>)</i></p></dd>
+
+<dt><b>R-19846-48503-04889-44735-07429-55750-55258-63586</b></dt>
+<dd><p>The value returned by sqlite3_msize(X) might be larger than the number of bytes requested when X was allocated.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-19846-48503-04889-44735-07429-55750-55258-63586'>context</a>, <a href='matrix/matrix_dfree.html#R-19846-48503-04889-44735-07429-55750-55258-63586'>detail</a>)</i></p></dd>
+
+<dt><b>R-19854-42126-27972-10302-08269-22410-63996-33681</b></dt>
+<dd><p>There are three arguments to SQLITE_CONFIG_HEAP: An 8-byte aligned pointer to the memory, the number of bytes in the memory buffer, and the minimum allocation size.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-19854-42126-27972-10302-08269-22410-63996-33681'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-19854-42126-27972-10302-08269-22410-63996-33681'>detail</a>)</i></p></dd>
+
+<dt><b>R-19878-23484-53576-16359-03133-43197-12770-47752</b></dt>
+<dd><p>Let M be ((U-12)*32/255)-23 and let K be M+((P-M)%(U-4)). If P is greater than X then the number of bytes stored on the table b-tree leaf page is K if K is less or equal to X or M otherwise.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-19878-23484-53576-16359-03133-43197-12770-47752'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-19878-23484-53576-16359-03133-43197-12770-47752'>detail</a>)</i></p></dd>
+
+<dt><b>R-19879-20948-53153-63685-13139-09400-29655-64256</b></dt>
+<dd><p>VACUUM (but not VACUUM INTO) is a write operation and so if another database connection is holding a lock that prevents writes, then the VACUUM will fail.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, matrix: <a href='matrix/lang_vacuum.html#R-19879-20948-53153-63685-13139-09400-29655-64256'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-19879-20948-53153-63685-13139-09400-29655-64256'>detail</a>)</i></p></dd>
+
+<dt><b>R-19884-42355-59719-29955-34222-13016-47876-51670</b></dt>
+<dd><p>The sqlite3_preupdate_new(D,N,P) interface writes into P a pointer to a protected sqlite3_value that contains the value of the Nth column of the table row after it is updated.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-19884-42355-59719-29955-34222-13016-47876-51670'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-19884-42355-59719-29955-34222-13016-47876-51670'>detail</a>)</i></p></dd>
+
+<dt><b>R-19885-09448-58561-44146-11128-00310-35686-58085</b></dt>
+<dd><p>The names of internal schema objects always begin with "sqlite_" and any table, index, view, or trigger whose name begins with "sqlite_" is an internal schema object.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-19885-09448-58561-44146-11128-00310-35686-58085'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-19885-09448-58561-44146-11128-00310-35686-58085'>detail</a>)</i></p></dd>
+
+<dt><b>R-19920-11576-34548-21403-56992-25102-09000-41133</b></dt>
+<dd><p>However, newer versions of SQLite still avoid using the last six entries in the freelist trunk page array in order that database files created by newer versions of SQLite can be read by older versions of SQLite.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-19920-11576-34548-21403-56992-25102-09000-41133'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-19920-11576-34548-21403-56992-25102-09000-41133'>detail</a>)</i></p></dd>
+
+<dt><b>R-19933-32160-25808-62001-60118-10554-34487-09495</b></dt>
+<dd><p>The sqlite3_vtab_rhs_value(P,J,V) interface returns SQLITE_OK if and only if *V is set to a value.
+<i>(source: <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>, checked-by: src/where.c, matrix: <a href='matrix/c3ref/vtab_rhs_value.html#R-19933-32160-25808-62001-60118-10554-34487-09495'>context</a>, <a href='matrix/matrix_dvtab_rhs_value.html#R-19933-32160-25808-62001-60118-10554-34487-09495'>detail</a>)</i></p></dd>
+
+<dt><b>R-19971-54976-54556-37696-16686-39038-59563-20085</b></dt>
+<dd><p>Configuring "NO ACTION" means just that: when a parent key is modified or deleted from the database, no special action is taken.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-19971-54976-54556-37696-16686-39038-59563-20085'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-19971-54976-54556-37696-16686-39038-59563-20085'>detail</a>)</i></p></dd>
+
+<dt><b>R-19982-00724-51550-61529-52295-40817-37605-44623</b></dt>
+<dd><p>If pStmt is NULL then this interface returns a pointer to the first prepared statement associated with the database connection pDb.
+<i>(source: <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a>, checked-by: th3/cov1/vdbeapi04.test, matrix: <a href='matrix/c3ref/next_stmt.html#R-19982-00724-51550-61529-52295-40817-37605-44623'>context</a>, <a href='matrix/matrix_dnext_stmt.html#R-19982-00724-51550-61529-52295-40817-37605-44623'>detail</a>)</i></p></dd>
+
+<dt><b>R-20022-00570-36475-01777-57661-23786-03560-20337</b></dt>
+<dd><p>The byte-order of UTF16 input text is determined by the byte-order mark (BOM, U+FEFF) found in first character, which is removed, or in the absence of a BOM the byte order is the native byte order of the host machine for sqlite3_bind_text16() or the byte order specified in the 6th parameter for sqlite3_bind_text64().
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, matrix: <a href='matrix/c3ref/bind_blob.html#R-20022-00570-36475-01777-57661-23786-03560-20337'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-20022-00570-36475-01777-57661-23786-03560-20337'>detail</a>)</i></p></dd>
+
+<dt><b>R-20051-05832-30877-26776-57299-30715-57449-61816</b></dt>
+<dd><p>On windows, the first component of an absolute path is a drive specification (e.g. "C:").
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-20051-05832-30877-26776-57299-30715-57449-61816'>context</a>, <a href='matrix/matrix_dopen.html#R-20051-05832-30877-26776-57299-30715-57449-61816'>detail</a>)</i></p></dd>
+
+<dt><b>R-20053-18593-57587-13858-53773-26981-59084-43132</b></dt>
+<dd><p>The X argument is a pointer to a string which is the unexpanded SQL text of the prepared statement or an SQL comment that indicates the invocation of a trigger.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-20053-18593-57587-13858-53773-26981-59084-43132'>context</a>, <a href='matrix/matrix_dc_trace.html#R-20053-18593-57587-13858-53773-26981-59084-43132'>detail</a>)</i></p></dd>
+
+<dt><b>R-20111-12873-06694-53393-06638-09093-12890-49161</b></dt>
+<dd><p>In order to succeed, the database connection must not be in autocommit mode when sqlite3_snapshot_open(D,S,P) is called.
+<i>(source: <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>, matrix: <a href='matrix/c3ref/snapshot_open.html#R-20111-12873-06694-53393-06638-09093-12890-49161'>context</a>, <a href='matrix/matrix_dsnapshot_open.html#R-20111-12873-06694-53393-06638-09093-12890-49161'>detail</a>)</i></p></dd>
+
+<dt><b>R-20124-57769-12967-06011-36499-08186-14693-61176</b></dt>
+<dd><p>If a schema-name is specified, then the view is created in the specified database.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, checked-by: th3/req1/view01.test, matrix: <a href='matrix/lang_createview.html#R-20124-57769-12967-06011-36499-08186-14693-61176'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-20124-57769-12967-06011-36499-08186-14693-61176'>detail</a>)</i></p></dd>
+
+<dt><b>R-20149-25884-15163-16334-64710-02284-04877-02507</b></dt>
+<dd><p>the following declaration does not result in "x" being an alias for the rowid: CREATE TABLE t(x INTEGER PRIMARY KEY DESC, y, z);
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-20149-25884-15163-16334-64710-02284-04877-02507'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-20149-25884-15163-16334-64710-02284-04877-02507'>detail</a>)</i></p></dd>
+
+<dt><b>R-20205-17349-17235-26223-03175-26249-31726-44344</b></dt>
+<dd><p>If the WHERE clause is not present, all records in the table are deleted.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-20205-17349-17235-26223-03175-26249-31726-44344'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-20205-17349-17235-26223-03175-26249-31726-44344'>detail</a>)</i></p></dd>
+
+<dt><b>R-20205-54808-33054-53571-46292-49413-32449-15224</b></dt>
+<dd><p>These expressions are similar to the expressions following the SELECT keyword in a SELECT statement in that they define the values of the columns in the result set.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-20205-54808-33054-53571-46292-49413-32449-15224'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-20205-54808-33054-53571-46292-49413-32449-15224'>detail</a>)</i></p></dd>
+
+<dt><b>R-20210-23164-18665-04349-57984-05045-09964-53374</b></dt>
+<dd><p>Unregister a VFS with the sqlite3_vfs_unregister() interface.
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-20210-23164-18665-04349-57984-05045-09964-53374'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-20210-23164-18665-04349-57984-05045-09964-53374'>detail</a>)</i></p></dd>
+
+<dt><b>R-20235-14821-33939-37352-02301-46502-25259-56810</b></dt>
+<dd><p>If the subquery uses LIMIT then the outer query may not have a WHERE clause.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-20235-14821-33939-37352-02301-46502-25259-56810'>context</a>, <a href='matrix/matrix_doptoverview.html#R-20235-14821-33939-37352-02301-46502-25259-56810'>detail</a>)</i></p></dd>
+
+<dt><b>R-20244-07722-17778-50950-32360-26781-61977-13264</b></dt>
+<dd><p>The list of integers in the stat column can optionally be followed by arguments, each of which is a sequence of non-space characters.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-20244-07722-17778-50950-32360-26781-61977-13264'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-20244-07722-17778-50950-32360-26781-61977-13264'>detail</a>)</i></p></dd>
+
+<dt><b>R-20262-06249-08007-38401-43127-56610-34465-06889</b></dt>
+<dd><p>No rollback journal is ever created and hence there is never a rollback journal to delete.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma25.test, matrix: <a href='matrix/pragma.html#R-20262-06249-08007-38401-43127-56610-34465-06889'>context</a>, <a href='matrix/matrix_dpragma.html#R-20262-06249-08007-38401-43127-56610-34465-06889'>detail</a>)</i></p></dd>
+
+<dt><b>R-20264-55497-15889-55738-11694-39322-19970-05132</b></dt>
+<dd><p>However, just because this routine returns a positive number does not mean that one or more rows of data will be returned.
+<i>(source: <a href="c3ref/column_count.html">c3ref/column_count.html</a>, matrix: <a href='matrix/c3ref/column_count.html#R-20264-55497-15889-55738-11694-39322-19970-05132'>context</a>, <a href='matrix/matrix_dcolumn_count.html#R-20264-55497-15889-55738-11694-39322-19970-05132'>detail</a>)</i></p></dd>
+
+<dt><b>R-20339-64003-24275-14776-38996-63966-02497-20063</b></dt>
+<dd><p>Format 4 causes SQLite to respect the DESC keyword on index declarations.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat01.test, matrix: <a href='matrix/fileformat2.html#R-20339-64003-24275-14776-38996-63966-02497-20063'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-20339-64003-24275-14776-38996-63966-02497-20063'>detail</a>)</i></p></dd>
+
+<dt><b>R-20409-33051-08329-62436-45384-49643-45094-34288</b></dt>
+<dd><p>The avg() function returns the average value of all non-NULL X within a group.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-20409-33051-08329-62436-45384-49643-45094-34288'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-20409-33051-08329-62436-45384-49643-45094-34288'>detail</a>)</i></p></dd>
+
+<dt><b>R-20413-39093-25878-54576-60732-55561-33363-27302</b></dt>
+<dd><p>The first four bytes of each overflow page are a big-endian integer which is the page number of the next page in the chain, or zero for the final page in the chain.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-20413-39093-25878-54576-60732-55561-33363-27302'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-20413-39093-25878-54576-60732-55561-33363-27302'>detail</a>)</i></p></dd>
+
+<dt><b>R-20467-43422-30485-36826-60194-40272-32740-00331</b></dt>
+<dd><p>If an expression has an OFFSET clause, then the first M rows are omitted from the result set returned by the SELECT statement and the next N rows are returned, where M and N are the values that the OFFSET and LIMIT clauses evaluate to, respectively.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-20467-43422-30485-36826-60194-40272-32740-00331'>context</a>, <a href='matrix/matrix_dlang_select.html#R-20467-43422-30485-36826-60194-40272-32740-00331'>detail</a>)</i></p></dd>
+
+<dt><b>R-20474-44465-10719-25363-46434-31101-34097-17120</b></dt>
+<dd><p>Normally, the database page_size and whether or not the database supports auto_vacuum must be configured before the database file is actually created.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-20474-44465-10719-25363-46434-31101-34097-17120'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-20474-44465-10719-25363-46434-31101-34097-17120'>detail</a>)</i></p></dd>
+
+<dt><b>R-20486-33667-53440-39666-65031-09323-37959-22013</b></dt>
+<dd><p>The content of the sqlite_sequence table can be modified using ordinary UPDATE, INSERT, and DELETE statements.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-20486-33667-53440-39666-65031-09323-37959-22013'>context</a>, <a href='matrix/matrix_dautoinc.html#R-20486-33667-53440-39666-65031-09323-37959-22013'>detail</a>)</i></p></dd>
+
+<dt><b>R-20520-54086-20387-28345-20691-46445-65238-30953</b></dt>
+<dd><p>If SQLite is compiled with the SQLITE_THREADSAFE=0 compile-time option then it is not possible to set the Multi-thread threading mode and sqlite3_config() will return SQLITE_ERROR if called with the SQLITE_CONFIG_MULTITHREAD configuration option.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-20520-54086-20387-28345-20691-46445-65238-30953'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-20520-54086-20387-28345-20691-46445-65238-30953'>detail</a>)</i></p></dd>
+
+<dt><b>R-20556-35657-32764-17566-55966-02395-47898-45086</b></dt>
+<dd><p>If the 4th parameter to the sqlite3_result_text* interfaces or sqlite3_result_blob is the special constant SQLITE_TRANSIENT then SQLite makes a copy of the result into space obtained from sqlite3_malloc() before it returns.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result02.test, matrix: <a href='matrix/c3ref/result_blob.html#R-20556-35657-32764-17566-55966-02395-47898-45086'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-20556-35657-32764-17566-55966-02395-47898-45086'>detail</a>)</i></p></dd>
+
+<dt><b>R-20560-39162-53987-29912-13699-13892-53398-21192</b></dt>
+<dd><p>The UNION operator works the same way as UNION ALL, except that duplicate rows are removed from the final result set.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-20560-39162-53987-29912-13699-13892-53398-21192'>context</a>, <a href='matrix/matrix_dlang_select.html#R-20560-39162-53987-29912-13699-13892-53398-21192'>detail</a>)</i></p></dd>
+
+<dt><b>R-20568-61871-33672-25407-24732-44471-23157-56477</b></dt>
+<dd><p>.
+<i>(source: <a href="whynotgit.html">whynotgit.html</a>, matrix: <a href='matrix/whynotgit.html#R-20568-61871-33672-25407-24732-44471-23157-56477'>context</a>, <a href='matrix/matrix_dwhynotgit.html#R-20568-61871-33672-25407-24732-44471-23157-56477'>detail</a>)</i></p></dd>
+
+<dt><b>R-20569-30326-20759-60917-34243-38983-18543-24657</b></dt>
+<dd><p>Extra rows of output are added for each row in left dataset that matches no rows in the right, and for each row in the right dataset that matches no rows in the left.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, matrix: <a href='matrix/lang_select.html#R-20569-30326-20759-60917-34243-38983-18543-24657'>context</a>, <a href='matrix/matrix_dlang_select.html#R-20569-30326-20759-60917-34243-38983-18543-24657'>detail</a>)</i></p></dd>
+
+<dt><b>R-20589-01955-18800-07127-42802-30893-02013-32671</b></dt>
+<dd><p>SQLITE_OPEN_URI The filename can be interpreted as a URI if this flag is set.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-20589-01955-18800-07127-42802-30893-02013-32671'>context</a>, <a href='matrix/matrix_dopen.html#R-20589-01955-18800-07127-42802-30893-02013-32671'>detail</a>)</i></p></dd>
+
+<dt><b>R-20590-08726-45565-50300-40304-23510-62801-34037</b></dt>
+<dd><p>It is an error to specify a value for the mode parameter that is less restrictive than that specified by the flags passed in the third parameter to sqlite3_open_v2().
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-20590-08726-45565-50300-40304-23510-62801-34037'>context</a>, <a href='matrix/matrix_dopen.html#R-20590-08726-45565-50300-40304-23510-62801-34037'>detail</a>)</i></p></dd>
+
+<dt><b>R-20609-23860-31620-63775-42539-11534-17004-18607</b></dt>
+<dd><p>The rollback journal file is always located in the same directory as the database file and has the same name as the database file but with the string "-journal" appended.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-20609-23860-31620-63775-42539-11534-17004-18607'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-20609-23860-31620-63775-42539-11534-17004-18607'>detail</a>)</i></p></dd>
+
+<dt><b>R-20637-43463-07167-46903-44256-61988-15144-63319</b></dt>
+<dd><p>A simple SELECT statement is an aggregate query if it contains either a GROUP BY clause or one or more aggregate functions in the result-set.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-20637-43463-07167-46903-44256-61988-15144-63319'>context</a>, <a href='matrix/matrix_dlang_select.html#R-20637-43463-07167-46903-44256-61988-15144-63319'>detail</a>)</i></p></dd>
+
+<dt><b>R-20643-25656-58463-39709-46255-05856-32679-34239</b></dt>
+<dd><p>The sqlite3_data_count(P) interface returns the number of columns in the current row of the result set of prepared statement P.
+<i>(source: <a href="c3ref/data_count.html">c3ref/data_count.html</a>, checked-by: th3/th3util.c, matrix: <a href='matrix/c3ref/data_count.html#R-20643-25656-58463-39709-46255-05856-32679-34239'>context</a>, <a href='matrix/matrix_ddata_count.html#R-20643-25656-58463-39709-46255-05856-32679-34239'>detail</a>)</i></p></dd>
+
+<dt><b>R-20690-50594-54745-63542-12245-05150-52761-00851</b></dt>
+<dd><p>The second field of the b-tree page header is the offset of the first freeblock, or zero if there are no freeblocks on the page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-20690-50594-54745-63542-12245-05150-52761-00851'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-20690-50594-54745-63542-12245-05150-52761-00851'>detail</a>)</i></p></dd>
+
+<dt><b>R-20707-34919-04305-11410-25646-43791-21158-43878</b></dt>
+<dd><p>If there are many OR terms in the WHERE clause or if some of the indexes on individual OR-clause subterms are not very selective, then SQLite might decide that it is faster to use a different query algorithm, or even a full-table scan.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-20707-34919-04305-11410-25646-43791-21158-43878'>context</a>, <a href='matrix/matrix_doptoverview.html#R-20707-34919-04305-11410-25646-43791-21158-43878'>detail</a>)</i></p></dd>
+
+<dt><b>R-20728-12013-63789-14843-17871-12981-47663-15474</b></dt>
+<dd><p>Parentheses around the column name are ignored. Hence if X and Y.Z are column names, then (X) and (Y.Z) are also considered column names and have the affinity of the corresponding columns.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-20728-12013-63789-14843-17871-12981-47663-15474'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-20728-12013-63789-14843-17871-12981-47663-15474'>detail</a>)</i></p></dd>
+
+<dt><b>R-20762-60389-11004-15746-05973-23268-57265-62679</b></dt>
+<dd><p>The sqlite_schema table contains one row for each table, index, view, and trigger (collectively "objects") in the database schema, except there is no entry for the sqlite_schema table itself.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-20762-60389-11004-15746-05973-23268-57265-62679'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-20762-60389-11004-15746-05973-23268-57265-62679'>detail</a>)</i></p></dd>
+
+<dt><b>R-20784-11852-57325-61888-34040-48421-29147-36386</b></dt>
+<dd><p>Metadata is returned by writing to the memory locations passed as the 5th and subsequent parameters to this function.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-20784-11852-57325-61888-34040-48421-29147-36386'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-20784-11852-57325-61888-34040-48421-29147-36386'>detail</a>)</i></p></dd>
+
+<dt><b>R-20790-14025-05441-59886-17616-40247-63857-04714</b></dt>
+<dd><p>The sqlite3_threadsafe() function returns zero if and only if SQLite was compiled with mutexing code omitted due to the SQLITE_THREADSAFE compile-time option being set to 0.
+<i>(source: <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/threadsafe.html#R-20790-14025-05441-59886-17616-40247-63857-04714'>context</a>, <a href='matrix/matrix_dthreadsafe.html#R-20790-14025-05441-59886-17616-40247-63857-04714'>detail</a>)</i></p></dd>
+
+<dt><b>R-20795-34947-09071-12465-14308-46505-11000-12464</b></dt>
+<dd><p>Other numeric values are out of range and cause a NULL return.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, matrix: <a href='matrix/lang_datefunc.html#R-20795-34947-09071-12465-14308-46505-11000-12464'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-20795-34947-09071-12465-14308-46505-11000-12464'>detail</a>)</i></p></dd>
+
+<dt><b>R-20795-39479-27238-02391-59931-28698-11385-12447</b></dt>
+<dd><p>The column is used in the expression of a generated column.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: tcl/alterdropcol2.test, th3/cov1/altertable25.test, matrix: <a href='matrix/lang_altertable.html#R-20795-39479-27238-02391-59931-28698-11385-12447'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-20795-39479-27238-02391-59931-28698-11385-12447'>detail</a>)</i></p></dd>
+
+<dt><b>R-20796-14963-19630-14669-08622-46367-39917-03067</b></dt>
+<dd><p>This function causes all database schemas to be read from disk and parsed, if that has not already been done, and returns an error if any errors are encountered while loading the schema.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-20796-14963-19630-14669-08622-46367-39917-03067'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-20796-14963-19630-14669-08622-46367-39917-03067'>detail</a>)</i></p></dd>
+
+<dt><b>R-20854-17109-31337-20710-58230-10583-22919-16758</b></dt>
+<dd><p>A CAST conversion is similar to the conversion that takes place when a column affinity is applied to a value except that with the CAST operator the conversion always takes place even if the conversion lossy and irreversible, whereas column affinity only changes the data type of a value if the change is lossless and reversible.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-20854-17109-31337-20710-58230-10583-22919-16758'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-20854-17109-31337-20710-58230-10583-22919-16758'>detail</a>)</i></p></dd>
+
+<dt><b>R-20857-32692-20795-02101-46664-36777-53557-28223</b></dt>
+<dd><p>The sqlite3_int64 and sqlite_int64 types can store integer values between -9223372036854775808 and +9223372036854775807 inclusive.
+<i>(source: <a href="c3ref/int64.html">c3ref/int64.html</a>, checked-by: th3/req1/int64_01.test, matrix: <a href='matrix/c3ref/int64.html#R-20857-32692-20795-02101-46664-36777-53557-28223'>context</a>, <a href='matrix/matrix_dint64.html#R-20857-32692-20795-02101-46664-36777-53557-28223'>detail</a>)</i></p></dd>
+
+<dt><b>R-20915-35810-14572-42507-50726-14071-51730-17527</b></dt>
+<dd><p>The second form of the pragma listed above is used to set a new limit in bytes for the specified database.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma26.test, matrix: <a href='matrix/pragma.html#R-20915-35810-14572-42507-50726-14071-51730-17527'>context</a>, <a href='matrix/matrix_dpragma.html#R-20915-35810-14572-42507-50726-14071-51730-17527'>detail</a>)</i></p></dd>
+
+<dt><b>R-20958-54138-45241-50664-65336-36333-30654-63832</b></dt>
+<dd><p>An attempt to write to an expired BLOB handle fails with an error code of SQLITE_ABORT.
+<i>(source: <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>, checked-by: tcl/e_blobwrite.test, matrix: <a href='matrix/c3ref/blob_write.html#R-20958-54138-45241-50664-65336-36333-30654-63832'>context</a>, <a href='matrix/matrix_dblob_write.html#R-20958-54138-45241-50664-65336-36333-30654-63832'>detail</a>)</i></p></dd>
+
+<dt><b>R-20974-45876-55609-02198-26922-65375-59673-02037</b></dt>
+<dd><p>Some systems (for example, Windows 95) do not support the operation implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try() will always return SQLITE_BUSY. The SQLite core only ever uses sqlite3_mutex_try() as an optimization so this is acceptable behavior.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, checked-by: th3/th3mutex.c, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-20974-45876-55609-02198-26922-65375-59673-02037'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-20974-45876-55609-02198-26922-65375-59673-02037'>detail</a>)</i></p></dd>
+
+<dt><b>R-20983-25183-16317-48719-00472-39133-57551-19276</b></dt>
+<dd><p>If sqlite3_config() is called after sqlite3_initialize() and before sqlite3_shutdown() then it will return SQLITE_MISUSE.
+<i>(source: <a href="c3ref/config.html">c3ref/config.html</a>, matrix: <a href='matrix/c3ref/config.html#R-20983-25183-16317-48719-00472-39133-57551-19276'>context</a>, <a href='matrix/matrix_dconfig.html#R-20983-25183-16317-48719-00472-39133-57551-19276'>detail</a>)</i></p></dd>
+
+<dt><b>R-20991-58040-19506-53014-65349-30649-14089-53276</b></dt>
+<dd><p>The following is a complete list of valid strftime() substitutions: %d day of month: 00 %f fractional seconds: SS.SSS %H hour: 00-24 %j day of year: 001-366 %J Julian day number (fractional) %m month: 01-12 %M minute: 00-59 %s seconds since 1970-01-01 %S seconds: 00-59 %w day of week 0-6 with Sunday==0 %W week of year: 00-53 %Y year: 0000-9999 %% %
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-20991-58040-19506-53014-65349-30649-14089-53276'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-20991-58040-19506-53014-65349-30649-14089-53276'>detail</a>)</i></p></dd>
+
+<dt><b>R-21003-45125-37810-53762-62919-57652-17254-53714</b></dt>
+<dd><p>The 4-byte big-endian integer at offset 36 stores the total number of pages on the freelist.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, th3/req1/pragma21.test, matrix: <a href='matrix/fileformat2.html#R-21003-45125-37810-53762-62919-57652-17254-53714'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-21003-45125-37810-53762-62919-57652-17254-53714'>detail</a>)</i></p></dd>
+
+<dt><b>R-21003-54221-59589-12513-12600-39825-11085-16301</b></dt>
+<dd><p>The rowid is always available as an undeclared column named ROWID, OID, or _ROWID_ as long as those names are not also used by explicitly declared columns.
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, checked-by: th3/cov1/withoutrowid01.test, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-21003-54221-59589-12513-12600-39825-11085-16301'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-21003-54221-59589-12513-12600-39825-11085-16301'>detail</a>)</i></p></dd>
+
+<dt><b>R-21011-43790-08313-49545-30750-27979-18807-17557</b></dt>
+<dd><p>If integer coordinates are desired, declare the table using "rtree_i32" instead: CREATE VIRTUAL TABLE intrtree USING rtree_i32(id,x0,x1,y0,y1,z0,z1);
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-21011-43790-08313-49545-30750-27979-18807-17557'>context</a>, <a href='matrix/matrix_drtree.html#R-21011-43790-08313-49545-30750-27979-18807-17557'>detail</a>)</i></p></dd>
+
+<dt><b>R-21062-30088-46553-38702-08225-06060-08730-53281</b></dt>
+<dd><p>For the example above, one might create an auxiliary table as follows: CREATE TABLE demo_data( id INTEGER PRIMARY KEY, -- primary key objname TEXT, -- name of the object objtype TEXT, -- object type boundary BLOB -- detailed boundary of object );
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-21062-30088-46553-38702-08225-06060-08730-53281'>context</a>, <a href='matrix/matrix_drtree.html#R-21062-30088-46553-38702-08225-06060-08730-53281'>detail</a>)</i></p></dd>
+
+<dt><b>R-21115-58321-25716-23770-11415-21637-17771-56749</b></dt>
+<dd><p>If a column-name list is specified, then the number of values in each term of the VALUE list must match the number of specified columns.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-21115-58321-25716-23770-11415-21637-17771-56749'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-21115-58321-25716-23770-11415-21637-17771-56749'>detail</a>)</i></p></dd>
+
+<dt><b>R-21148-64834-51953-28586-58289-58298-04009-03354</b></dt>
+<dd><p>The "INSERT INTO table DEFAULT VALUES" form of the INSERT statement is not supported.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-21148-64834-51953-28586-58289-58298-04009-03354'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-21148-64834-51953-28586-58289-58298-04009-03354'>detail</a>)</i></p></dd>
+
+<dt><b>R-21150-52363-44475-50752-61726-33318-55013-63350</b></dt>
+<dd><p>The "julianday" modifier must immediately follow the initial time-value which must be of the form DDDDDDDDD.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-21150-52363-44475-50752-61726-33318-55013-63350'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-21150-52363-44475-50752-61726-33318-55013-63350'>detail</a>)</i></p></dd>
+
+<dt><b>R-21156-19645-52425-35799-35184-17104-33723-09061</b></dt>
+<dd><p>If the third parameter to sqlite3_bind_text64() is not NULL, then it should be a pointer to a well-formed unicode string that is either UTF8 if the sixth parameter is SQLITE_UTF8, or UTF16 otherwise.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, matrix: <a href='matrix/c3ref/bind_blob.html#R-21156-19645-52425-35799-35184-17104-33723-09061'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-21156-19645-52425-35799-35184-17104-33723-09061'>detail</a>)</i></p></dd>
+
+<dt><b>R-21171-34919-23602-58467-34631-37001-49601-29313</b></dt>
+<dd><p>The eParentWithin and rParentScore values are copies of the eWithin and rScore values from the containing subtree of the current row.
+<i>(source: <a href="rtree.html">rtree.html</a>, matrix: <a href='matrix/rtree.html#R-21171-34919-23602-58467-34631-37001-49601-29313'>context</a>, <a href='matrix/matrix_drtree.html#R-21171-34919-23602-58467-34631-37001-49601-29313'>detail</a>)</i></p></dd>
+
+<dt><b>R-21182-58169-20146-54960-02459-65291-16580-58190</b></dt>
+<dd><p>The replace(X,Y,Z) function returns a string formed by substituting string Z for every occurrence of string Y in string X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-21182-58169-20146-54960-02459-65291-16580-58190'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-21182-58169-20146-54960-02459-65291-16580-58190'>detail</a>)</i></p></dd>
+
+<dt><b>R-21205-43338-53386-10621-24475-38034-05751-45938</b></dt>
+<dd><p>When sqlite3_hard_heap_limit64(N) is invoked and the soft heap limit is outside the range of 1.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-21205-43338-53386-10621-24475-38034-05751-45938'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-21205-43338-53386-10621-24475-38034-05751-45938'>detail</a>)</i></p></dd>
+
+<dt><b>R-21228-24308-16193-26156-01988-42098-33808-34150</b></dt>
+<dd><p>The sqlite3_cancel_auto_extension(X) interface unregisters the initialization routine X that was registered using a prior call to sqlite3_auto_extension(X).
+<i>(source: <a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a>, matrix: <a href='matrix/c3ref/cancel_auto_extension.html#R-21228-24308-16193-26156-01988-42098-33808-34150'>context</a>, <a href='matrix/matrix_dcancel_auto_extension.html#R-21228-24308-16193-26156-01988-42098-33808-34150'>detail</a>)</i></p></dd>
+
+<dt><b>R-21228-58399-13607-54712-08787-36573-11741-23051</b></dt>
+<dd><p>If M is greater than zero then after M page records the journal file may be zero padded out to the next multiple of the sector size and another journal header may be inserted.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-21228-58399-13607-54712-08787-36573-11741-23051'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-21228-58399-13607-54712-08787-36573-11741-23051'>detail</a>)</i></p></dd>
+
+<dt><b>R-21274-02227-62864-03639-07150-27166-13487-20730</b></dt>
+<dd><p>The sqlite3_interrupt(D) call is in effect until all currently running SQL statements on database connection D complete.
+<i>(source: <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>, matrix: <a href='matrix/c3ref/interrupt.html#R-21274-02227-62864-03639-07150-27166-13487-20730'>context</a>, <a href='matrix/matrix_dinterrupt.html#R-21274-02227-62864-03639-07150-27166-13487-20730'>detail</a>)</i></p></dd>
+
+<dt><b>R-21320-14810-43799-05408-58279-13675-12785-56952</b></dt>
+<dd><p>The wal_checkpoint pragma returns a single row with three integer columns.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma29.test, matrix: <a href='matrix/pragma.html#R-21320-14810-43799-05408-58279-13675-12785-56952'>context</a>, <a href='matrix/matrix_dpragma.html#R-21320-14810-43799-05408-58279-13675-12785-56952'>detail</a>)</i></p></dd>
+
+<dt><b>R-21426-10262-16472-16411-19241-49098-31695-43338</b></dt>
+<dd><p>The path component of the URI specifies the disk file that is the SQLite database to be opened.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-21426-10262-16472-16411-19241-49098-31695-43338'>context</a>, <a href='matrix/matrix_duri.html#R-21426-10262-16472-16411-19241-49098-31695-43338'>detail</a>)</i></p></dd>
+
+<dt><b>R-21490-41092-09920-20398-33812-50363-51367-35594</b></dt>
+<dd><p>The first form (with the "VALUES" keyword) creates one or more new rows in an existing table.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-21490-41092-09920-20398-33812-50363-51367-35594'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-21490-41092-09920-20398-33812-50363-51367-35594'>detail</a>)</i></p></dd>
+
+<dt><b>R-21508-14355-30725-13403-38836-44113-60272-57161</b></dt>
+<dd><p>The third argument (eTextRep) must be one of the constants: SQLITE_UTF8, SQLITE_UTF16LE, SQLITE_UTF16BE, SQLITE_UTF16, or SQLITE_UTF16_ALIGNED.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-21508-14355-30725-13403-38836-44113-60272-57161'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-21508-14355-30725-13403-38836-44113-60272-57161'>detail</a>)</i></p></dd>
+
+<dt><b>R-21527-28967-38710-01216-03543-44346-41120-54609</b></dt>
+<dd><p>If, however, all columns that were to be fetched from the table are already available in the index itself, SQLite will use the values contained in the index and will never look up the original table row.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-21527-28967-38710-01216-03543-44346-41120-54609'>context</a>, <a href='matrix/matrix_doptoverview.html#R-21527-28967-38710-01216-03543-44346-41120-54609'>detail</a>)</i></p></dd>
+
+<dt><b>R-21555-60916-58264-59419-46832-30971-06241-53598</b></dt>
+<dd><p>No storage class conversions occur before the sort.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_04.test, matrix: <a href='matrix/datatype3.html#R-21555-60916-58264-59419-46832-30971-06241-53598'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-21555-60916-58264-59419-46832-30971-06241-53598'>detail</a>)</i></p></dd>
+
+<dt><b>R-21599-16038-23557-29825-04044-13537-53990-06867</b></dt>
+<dd><p>In SQLite, a foreign key constraint is permanently marked as deferred or immediate when it is created.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys23.test, matrix: <a href='matrix/foreignkeys.html#R-21599-16038-23557-29825-04044-13537-53990-06867'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-21599-16038-23557-29825-04044-13537-53990-06867'>detail</a>)</i></p></dd>
+
+<dt><b>R-21637-36677-40497-35509-61399-46252-57328-58576</b></dt>
+<dd><p>If a term in X is of the form "z IS NOT NULL" and if a term in W is a comparison operator on "z" other than "IS", then those terms match.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-21637-36677-40497-35509-61399-46252-57328-58576'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-21637-36677-40497-35509-61399-46252-57328-58576'>detail</a>)</i></p></dd>
+
+<dt><b>R-21674-26855-05967-15589-29302-41964-38112-11067</b></dt>
+<dd><p>The rowid of the SQL table is the 64-bit signed integer key for each entry in the table b-tree.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-21674-26855-05967-15589-29302-41964-38112-11067'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-21674-26855-05967-15589-29302-41964-38112-11067'>detail</a>)</i></p></dd>
+
+<dt><b>R-21752-26913-20480-58251-45591-43193-62846-17726</b></dt>
+<dd><p>The defer_foreign_keys pragma is automatically switched off at each COMMIT or ROLLBACK. Hence, the defer_foreign_keys pragma must be separately enabled for each transaction.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/fkey6.test, th3/cov1/fkey24.test, matrix: <a href='matrix/pragma.html#R-21752-26913-20480-58251-45591-43193-62846-17726'>context</a>, <a href='matrix/matrix_dpragma.html#R-21752-26913-20480-58251-45591-43193-62846-17726'>detail</a>)</i></p></dd>
+
+<dt><b>R-21769-42523-56036-07125-49513-08938-03164-12762</b></dt>
+<dd><p>For example, if an application defines a function "eval()" that calls sqlite3_exec(), then the following SQL statement would change the database file through side-effects: SELECT eval('DELETE FROM t1') FROM t2; But because the SELECT statement does not change the database file directly, sqlite3_stmt_readonly() would still return true.
+<i>(source: <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>, checked-by: tcl/capi3d.test, th3/cov1/vdbeapi14.test, matrix: <a href='matrix/c3ref/stmt_readonly.html#R-21769-42523-56036-07125-49513-08938-03164-12762'>context</a>, <a href='matrix/matrix_dstmt_readonly.html#R-21769-42523-56036-07125-49513-08938-03164-12762'>detail</a>)</i></p></dd>
+
+<dt><b>R-21806-43221-13311-12534-07273-62377-06740-15345</b></dt>
+<dd><p>The sqlite3_initialize() routine returns SQLITE_OK on success.
+<i>(source: <a href="c3ref/initialize.html">c3ref/initialize.html</a>, matrix: <a href='matrix/c3ref/initialize.html#R-21806-43221-13311-12534-07273-62377-06740-15345'>context</a>, <a href='matrix/matrix_dinitialize.html#R-21806-43221-13311-12534-07273-62377-06740-15345'>detail</a>)</i></p></dd>
+
+<dt><b>R-21827-30701-03148-53639-55860-16366-16292-16032</b></dt>
+<dd><p>The vfs query parameter causes the database connection to be opened using the VFS called NAME.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-21827-30701-03148-53639-55860-16366-16292-16032'>context</a>, <a href='matrix/matrix_duri.html#R-21827-30701-03148-53639-55860-16366-16292-16032'>detail</a>)</i></p></dd>
+
+<dt><b>R-21827-60920-49018-16791-65129-33759-13224-63617</b></dt>
+<dd><p>Example: Let the index be CREATE INDEX ex2 ON tab2(b,c) WHERE c IS NOT NULL; Then any query that uses operators =, <, >, <=, >=, <>, IN, LIKE, or GLOB on column "c" would be usable with the partial index because those comparison operators are only true if "c" is not NULL.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-21827-60920-49018-16791-65129-33759-13224-63617'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-21827-60920-49018-16791-65129-33759-13224-63617'>detail</a>)</i></p></dd>
+
+<dt><b>R-21829-14563-51248-28780-63073-47174-17671-25024</b></dt>
+<dd><p>When casting a BLOB value to INTEGER, the value is first converted to TEXT.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-21829-14563-51248-28780-63073-47174-17671-25024'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-21829-14563-51248-28780-63073-47174-17671-25024'>detail</a>)</i></p></dd>
+
+<dt><b>R-21869-50933-18898-03814-15794-26050-32013-17586</b></dt>
+<dd><p>The sqlite_stat1.tbl column is the name of the table to which the index belongs.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-21869-50933-18898-03814-15794-26050-32013-17586'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-21869-50933-18898-03814-15794-26050-32013-17586'>detail</a>)</i></p></dd>
+
+<dt><b>R-21873-57098-57834-11008-20676-08257-29659-57534</b></dt>
+<dd><p>For backwards compatibility, the "0x" hexadecimal integer notation is only understood by the SQL language parser, not by the type conversions routines.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr01.test, matrix: <a href='matrix/lang_expr.html#R-21873-57098-57834-11008-20676-08257-29659-57534'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-21873-57098-57834-11008-20676-08257-29659-57534'>detail</a>)</i></p></dd>
+
+<dt><b>R-21898-42697-02847-18633-49907-40744-21589-01331</b></dt>
+<dd><p>The DBSTAT virtual table is an eponymous virtual table, meaning that is not necessary to run CREATE VIRTUAL TABLE to create an instance of the dbstat virtual table before using it.
+<i>(source: <a href="dbstat.html">dbstat.html</a>, matrix: <a href='matrix/dbstat.html#R-21898-42697-02847-18633-49907-40744-21589-01331'>context</a>, <a href='matrix/matrix_ddbstat.html#R-21898-42697-02847-18633-49907-40744-21589-01331'>detail</a>)</i></p></dd>
+
+<dt><b>R-21903-64655-22384-55524-63839-20952-08808-21810</b></dt>
+<dd><p>AND
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-21903-64655-22384-55524-63839-20952-08808-21810'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-21903-64655-22384-55524-63839-20952-08808-21810'>detail</a>)</i></p></dd>
+
+<dt><b>R-21926-12440-51056-61142-44683-61094-56845-29582</b></dt>
+<dd><p>A column with TEXT affinity stores all data using storage classes NULL, TEXT or BLOB.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-21926-12440-51056-61142-44683-61094-56845-29582'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-21926-12440-51056-61142-44683-61094-56845-29582'>detail</a>)</i></p></dd>
+
+<dt><b>R-21999-45122-31048-13446-02528-26470-06317-22169</b></dt>
+<dd><p>The sqlite3_update_hook() interface registers a callback function with the database connection identified by the first argument to be invoked whenever a row is updated, inserted or deleted in a rowid table.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: tcl/hook.test, th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-21999-45122-31048-13446-02528-26470-06317-22169'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-21999-45122-31048-13446-02528-26470-06317-22169'>detail</a>)</i></p></dd>
+
+<dt><b>R-22000-53613-20552-31854-09839-01114-23095-55500</b></dt>
+<dd><p>The default virtual table ("rtree") stores coordinates as single-precision (4-byte) floating point numbers.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-22000-53613-20552-31854-09839-01114-23095-55500'>context</a>, <a href='matrix/matrix_drtree.html#R-22000-53613-20552-31854-09839-01114-23095-55500'>detail</a>)</i></p></dd>
+
+<dt><b>R-22035-46182-36006-24131-28314-61788-09848-09790</b></dt>
+<dd><p>The SQLITE_CONFIG_GETPCACHE2 option takes a single argument which is a pointer to an sqlite3_pcache_methods2 object. SQLite copies of the current page cache implementation into that object.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3pcache.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-22035-46182-36006-24131-28314-61788-09848-09790'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-22035-46182-36006-24131-28314-61788-09848-09790'>detail</a>)</i></p></dd>
+
+<dt><b>R-22036-37196-51098-25883-36361-04038-28343-30035</b></dt>
+<dd><p>The sqlite3_result_error_nomem() interface causes SQLite to throw an error indicating that a memory allocation failed.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-22036-37196-51098-25883-36361-04038-28343-30035'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-22036-37196-51098-25883-36361-04038-28343-30035'>detail</a>)</i></p></dd>
+
+<dt><b>R-22070-59472-34995-42069-63414-37359-02285-11048</b></dt>
+<dd><p>If a term consists of multiple subterms containing a common column name and separated by OR, like this: column = expr1 OR column = expr2 OR column = expr3 OR ... Then that term is rewritten as follows: column IN (expr1,expr2,expr3,...)
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-22070-59472-34995-42069-63414-37359-02285-11048'>context</a>, <a href='matrix/matrix_doptoverview.html#R-22070-59472-34995-42069-63414-37359-02285-11048'>detail</a>)</i></p></dd>
+
+<dt><b>R-22130-30551-62458-54742-21400-01108-16464-06661</b></dt>
+<dd><p>On success, the sqlite3_snapshot_get(D,S,P) interface writes a pointer to the newly created sqlite3_snapshot object into *P and returns SQLITE_OK.
+<i>(source: <a href="c3ref/snapshot_get.html">c3ref/snapshot_get.html</a>, matrix: <a href='matrix/c3ref/snapshot_get.html#R-22130-30551-62458-54742-21400-01108-16464-06661'>context</a>, <a href='matrix/matrix_dsnapshot_get.html#R-22130-30551-62458-54742-21400-01108-16464-06661'>detail</a>)</i></p></dd>
+
+<dt><b>R-22138-49689-43749-53930-34571-29718-47006-51402</b></dt>
+<dd><p>The string returned by sqlite_source_id() is the date and time that the source code was checked in followed by the SHA3-256 hash for that check-in.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-22138-49689-43749-53930-34571-29718-47006-51402'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-22138-49689-43749-53930-34571-29718-47006-51402'>detail</a>)</i></p></dd>
+
+<dt><b>R-22182-18548-50904-36957-63145-12902-60404-23884</b></dt>
+<dd><p>For example, an UPDATE statement might have a WHERE clause that makes it a no-op, but the sqlite3_stmt_readonly() result would still be false.
+<i>(source: <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>, checked-by: tcl/capi3d.test, th3/cov1/vdbeapi14.test, matrix: <a href='matrix/c3ref/stmt_readonly.html#R-22182-18548-50904-36957-63145-12902-60404-23884'>context</a>, <a href='matrix/matrix_dstmt_readonly.html#R-22182-18548-50904-36957-63145-12902-60404-23884'>detail</a>)</i></p></dd>
+
+<dt><b>R-22232-40047-05023-56174-19457-36430-27942-49450</b></dt>
+<dd><p>The particular operator is stored in aConstraint[].op using one of the SQLITE_INDEX_CONSTRAINT_ values.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-22232-40047-05023-56174-19457-36430-27942-49450'>context</a>, <a href='matrix/matrix_dindex_info.html#R-22232-40047-05023-56174-19457-36430-27942-49450'>detail</a>)</i></p></dd>
+
+<dt><b>R-22235-47006-02687-15500-56774-48140-19704-63768</b></dt>
+<dd><p>Casting an INTEGER or REAL value into TEXT renders the value as if via sqlite3_snprintf() except that the resulting TEXT uses the encoding of the database connection.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-22235-47006-02687-15500-56774-48140-19704-63768'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-22235-47006-02687-15500-56774-48140-19704-63768'>detail</a>)</i></p></dd>
+
+<dt><b>R-22239-33740-47135-11952-01366-26065-00899-21193</b></dt>
+<dd><p>A subquery that returns two or more columns is a row value subquery and can only be used as the operand of a comparison operator.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-22239-33740-47135-11952-01366-26065-00899-21193'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-22239-33740-47135-11952-01366-26065-00899-21193'>detail</a>)</i></p></dd>
+
+<dt><b>R-22283-14179-18327-11516-19708-03741-18136-56509</b></dt>
+<dd><p>Tables are removed using the DROP TABLE statement.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-22283-14179-18327-11516-19708-03741-18136-56509'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-22283-14179-18327-11516-19708-03741-18136-56509'>detail</a>)</i></p></dd>
+
+<dt><b>R-22304-13691-20726-05433-26877-46116-43863-25024</b></dt>
+<dd><p>In practice, metadata is preserved between function calls for function parameters that are compile-time constants, including literal values and parameters and expressions composed from the same.
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-22304-13691-20726-05433-26877-46116-43863-25024'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-22304-13691-20726-05433-26877-46116-43863-25024'>detail</a>)</i></p></dd>
+
+<dt><b>R-22309-26004-04913-07405-19734-55428-18120-53442</b></dt>
+<dd><p>The profile callback contains the original statement text and an estimate of wall-clock time of how long that statement took to run.
+<i>(source: <a href="c3ref/profile.html">c3ref/profile.html</a>, checked-by: th3/cov1/main16.test, matrix: <a href='matrix/c3ref/profile.html#R-22309-26004-04913-07405-19734-55428-18120-53442'>context</a>, <a href='matrix/matrix_dprofile.html#R-22309-26004-04913-07405-19734-55428-18120-53442'>detail</a>)</i></p></dd>
+
+<dt><b>R-22338-33270-38633-54292-24133-20932-49452-38355</b></dt>
+<dd><p>If N is less than one then the progress handler is disabled.
+<i>(source: <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>, checked-by: th3/req1/progress01.test, matrix: <a href='matrix/c3ref/progress_handler.html#R-22338-33270-38633-54292-24133-20932-49452-38355'>context</a>, <a href='matrix/matrix_dprogress_handler.html#R-22338-33270-38633-54292-24133-20932-49452-38355'>detail</a>)</i></p></dd>
+
+<dt><b>R-22347-12719-38657-19900-45791-11174-27141-23723</b></dt>
+<dd><p>When a configuration option is set, sqlite3_config() returns SQLITE_OK.
+<i>(source: <a href="c3ref/config.html">c3ref/config.html</a>, matrix: <a href='matrix/c3ref/config.html#R-22347-12719-38657-19900-45791-11174-27141-23723'>context</a>, <a href='matrix/matrix_dconfig.html#R-22347-12719-38657-19900-45791-11174-27141-23723'>detail</a>)</i></p></dd>
+
+<dt><b>R-22361-03044-33960-50539-23472-56447-56319-64487</b></dt>
+<dd><p>The behavior of ANY is slightly different in a STRICT table versus an ordinary non-strict table.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-22361-03044-33960-50539-23472-56447-56319-64487'>context</a>, <a href='matrix/matrix_dstricttables.html#R-22361-03044-33960-50539-23472-56447-56319-64487'>detail</a>)</i></p></dd>
+
+<dt><b>R-22391-07186-37161-38876-45465-63159-33403-63078</b></dt>
+<dd><p>Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc() returns a different mutex on every call.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, checked-by: th3/cov1/mutex01.test, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-22391-07186-37161-38876-45465-63159-33403-63078'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-22391-07186-37161-38876-45465-63159-33403-63078'>detail</a>)</i></p></dd>
+
+<dt><b>R-22414-48736-05483-33334-64418-18410-20572-40044</b></dt>
+<dd><p>A COLLATE operator has the same affinity as its left-hand side operand.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-22414-48736-05483-33334-64418-18410-20572-40044'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-22414-48736-05483-33334-64418-18410-20572-40044'>detail</a>)</i></p></dd>
+
+<dt><b>R-22464-05974-13353-12575-31195-54661-61656-32852</b></dt>
+<dd><p>The expression of a generated column can refer to any of the other declared columns in the table, including other generated columns, as long as the expression does not directly or indirectly refer back to itself.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-22464-05974-13353-12575-31195-54661-61656-32852'>context</a>, <a href='matrix/matrix_dgencol.html#R-22464-05974-13353-12575-31195-54661-61656-32852'>detail</a>)</i></p></dd>
+
+<dt><b>R-22484-49535-05658-48568-12441-17149-15045-25439</b></dt>
+<dd><p>Leading spaces are removed.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-22484-49535-05658-48568-12441-17149-15045-25439'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-22484-49535-05658-48568-12441-17149-15045-25439'>detail</a>)</i></p></dd>
+
+<dt><b>R-22490-27246-39721-62527-58944-44667-39725-60392</b></dt>
+<dd><p>One might, for example, want to query all objects that overlap with the 35th parallel: SELECT id FROM demo_index WHERE maxY>=35.0 AND minY<=35.0;
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-22490-27246-39721-62527-58944-44667-39725-60392'>context</a>, <a href='matrix/matrix_drtree.html#R-22490-27246-39721-62527-58944-44667-39725-60392'>detail</a>)</i></p></dd>
+
+<dt><b>R-22504-36456-63205-11923-40332-44268-43890-46191</b></dt>
+<dd><p>In first form, if the main database has already been created, then this pragma returns the text encoding used by the main database, one of 'UTF-8', 'UTF-16le' (little-endian UTF-16 encoding) or 'UTF-16be' (big-endian UTF-16 encoding).
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma16.test, matrix: <a href='matrix/pragma.html#R-22504-36456-63205-11923-40332-44268-43890-46191'>context</a>, <a href='matrix/matrix_dpragma.html#R-22504-36456-63205-11923-40332-44268-43890-46191'>detail</a>)</i></p></dd>
+
+<dt><b>R-22511-33242-53982-27627-41881-51518-34601-24400</b></dt>
+<dd><p>This is the number of times that the prepared statement has been run.
+<i>(source: <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a>, matrix: <a href='matrix/c3ref/c_stmtstatus_counter.html#R-22511-33242-53982-27627-41881-51518-34601-24400'>context</a>, <a href='matrix/matrix_dc_stmtstatus_counter.html#R-22511-33242-53982-27627-41881-51518-34601-24400'>detail</a>)</i></p></dd>
+
+<dt><b>R-22517-03298-06877-11770-25908-54043-03696-50918</b></dt>
+<dd><p>The FTS4 prefix option causes FTS to index term prefixes of specified lengths in the same way that it always indexes complete terms.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-22517-03298-06877-11770-25908-54043-03696-50918'>context</a>, <a href='matrix/matrix_dfts3.html#R-22517-03298-06877-11770-25908-54043-03696-50918'>detail</a>)</i></p></dd>
+
+<dt><b>R-22528-31592-23814-33593-53187-04400-51621-15631</b></dt>
+<dd><p>The following two queries are not equivalent: SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.x=tab2.y; SELECT * FROM tab1 LEFT JOIN tab2 WHERE tab1.x=tab2.y;
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-22528-31592-23814-33593-53187-04400-51621-15631'>context</a>, <a href='matrix/matrix_doptoverview.html#R-22528-31592-23814-33593-53187-04400-51621-15631'>detail</a>)</i></p></dd>
+
+<dt><b>R-22564-11647-52151-33857-28940-09855-65445-38014</b></dt>
+<dd><p>The header begins with a single varint which determines the total number of bytes in the header. The varint value is the size of the header in bytes including the size varint itself.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbe.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-22564-11647-52151-33857-28940-09855-65445-38014'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-22564-11647-52151-33857-28940-09855-65445-38014'>detail</a>)</i></p></dd>
+
+<dt><b>R-22567-44039-44321-46904-30045-11816-43845-22039</b></dt>
+<dd><p>The PRAGMA foreign_keys command is a no-op in this configuration.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys05.test, matrix: <a href='matrix/foreignkeys.html#R-22567-44039-44321-46904-30045-11816-43845-22039'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-22567-44039-44321-46904-30045-11816-43845-22039'>detail</a>)</i></p></dd>
+
+<dt><b>R-22568-45663-55668-47915-50757-16894-43976-31844</b></dt>
+<dd><p>SQLITE_OPEN_EXRESCODE The database connection comes up in "extended result code mode". In other words, the database behaves has if sqlite3_extended_result_codes(db,1) where called on the database connection as soon as the connection is created. In addition to setting the extended result code mode, this flag also causes sqlite3_open_v2() to return an extended result code. SQLITE_OPEN_NOFOLLOW The database filename is not allowed to contain a symbolic link
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-22568-45663-55668-47915-50757-16894-43976-31844'>context</a>, <a href='matrix/matrix_dopen.html#R-22568-45663-55668-47915-50757-16894-43976-31844'>detail</a>)</i></p></dd>
+
+<dt><b>R-22624-19349-43907-49115-55409-14540-64613-59655</b></dt>
+<dd><p>Terms of the WHERE clause can be manually disqualified for use with indexes by prepending a unary + operator to the column name.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-22624-19349-43907-49115-55409-14540-64613-59655'>context</a>, <a href='matrix/matrix_doptoverview.html#R-22624-19349-43907-49115-55409-14540-64613-59655'>detail</a>)</i></p></dd>
+
+<dt><b>R-22655-13879-23181-45430-34065-63005-59196-64005</b></dt>
+<dd><p>The coalesce() function returns a copy of its first non-NULL argument, or NULL if all arguments are NULL.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-22655-13879-23181-45430-34065-63005-59196-64005'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-22655-13879-23181-45430-34065-63005-59196-64005'>detail</a>)</i></p></dd>
+
+<dt><b>R-22662-28218-11402-23235-34288-43676-21619-60718</b></dt>
+<dd><p>If there is no prefix that can be interpreted as a real number, the result of the conversion is 0.0.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-22662-28218-11402-23235-34288-43676-21619-60718'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-22662-28218-11402-23235-34288-43676-21619-60718'>detail</a>)</i></p></dd>
+
+<dt><b>R-22671-22821-00746-11610-44216-38779-63984-03906</b></dt>
+<dd><p>The orderByConsumed means that output from xFilter/xNext will occur in the correct order to satisfy the ORDER BY clause so that no separate sorting step is required.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-22671-22821-00746-11610-44216-38779-63984-03906'>context</a>, <a href='matrix/matrix_dindex_info.html#R-22671-22821-00746-11610-44216-38779-63984-03906'>detail</a>)</i></p></dd>
+
+<dt><b>R-22671-54036-59271-48827-17148-12128-60554-20551</b></dt>
+<dd><p>If argvIndex>0 then the right-hand side of the corresponding aConstraint[] is evaluated and becomes the argvIndex-th entry in argv.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-22671-54036-59271-48827-17148-12128-60554-20551'>context</a>, <a href='matrix/matrix_dindex_info.html#R-22671-54036-59271-48827-17148-12128-60554-20551'>detail</a>)</i></p></dd>
+
+<dt><b>R-22710-53328-59796-08773-22880-08291-09347-39531</b></dt>
+<dd><p>The third and fourth bytes of each freeblock form a big-endian integer which is the size of the freeblock in bytes, including the 4-byte header.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-22710-53328-59796-08773-22880-08291-09347-39531'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-22710-53328-59796-08773-22880-08291-09347-39531'>detail</a>)</i></p></dd>
+
+<dt><b>R-22724-45533-32532-12289-36170-43581-26380-53780</b></dt>
+<dd><p>if there is only a single global wildcard to the right of x, then the original LIKE or GLOB test is disabled.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-22724-45533-32532-12289-36170-43581-26380-53780'>context</a>, <a href='matrix/matrix_doptoverview.html#R-22724-45533-32532-12289-36170-43581-26380-53780'>detail</a>)</i></p></dd>
+
+<dt><b>R-22771-48210-15439-13040-38130-20286-36509-06208</b></dt>
+<dd><p>The number of bytes stored on the leaf page is never less than M.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-22771-48210-15439-13040-38130-20286-36509-06208'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-22771-48210-15439-13040-38130-20286-36509-06208'>detail</a>)</i></p></dd>
+
+<dt><b>R-22776-52830-07659-57324-38629-30744-28731-31224</b></dt>
+<dd><p>For each pair of named columns, the expression "lhs.X = rhs.X" is evaluated for each row of the cartesian product as a boolean expression. Only rows for which all such expressions evaluates to true are included from the result set.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-22776-52830-07659-57324-38629-30744-28731-31224'>context</a>, <a href='matrix/matrix_dlang_select.html#R-22776-52830-07659-57324-38629-30744-28731-31224'>detail</a>)</i></p></dd>
+
+<dt><b>R-22782-22472-63620-46521-58776-65513-25083-63478</b></dt>
+<dd><p>Names are zero-terminated UTF-8 strings.
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-22782-22472-63620-46521-58776-65513-25083-63478'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-22782-22472-63620-46521-58776-65513-25083-63478'>detail</a>)</i></p></dd>
+
+<dt><b>R-22795-48828-40923-07115-03137-30466-52786-33478</b></dt>
+<dd><p>If X is a BLOB then the indices refer to bytes.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-22795-48828-40923-07115-03137-30466-52786-33478'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-22795-48828-40923-07115-03137-30466-52786-33478'>detail</a>)</i></p></dd>
+
+<dt><b>R-22799-40241-49763-48856-12252-38243-16002-08188</b></dt>
+<dd><p>The sqlite3_status() and sqlite3_status64() routines return SQLITE_OK on success and a non-zero error code on failure.
+<i>(source: <a href="c3ref/status.html">c3ref/status.html</a>, matrix: <a href='matrix/c3ref/status.html#R-22799-40241-49763-48856-12252-38243-16002-08188'>context</a>, <a href='matrix/matrix_dstatus.html#R-22799-40241-49763-48856-12252-38243-16002-08188'>detail</a>)</i></p></dd>
+
+<dt><b>R-22849-20349-24730-37218-10911-22554-30363-05607</b></dt>
+<dd><p>If a floating point value that can be represented exactly as an integer is inserted into a column with NUMERIC affinity, the value is converted into an integer.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-22849-20349-24730-37218-10911-22554-30363-05607'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-22849-20349-24730-37218-10911-22554-30363-05607'>detail</a>)</i></p></dd>
+
+<dt><b>R-22861-02843-39646-61037-38089-35502-27977-11188</b></dt>
+<dd><p>Zero all sqlite3_stmt_scanstatus() related event counters.
+<i>(source: <a href="c3ref/stmt_scanstatus_reset.html">c3ref/stmt_scanstatus_reset.html</a>, checked-by: th3/cov1/status02.test, matrix: <a href='matrix/c3ref/stmt_scanstatus_reset.html#R-22861-02843-39646-61037-38089-35502-27977-11188'>context</a>, <a href='matrix/matrix_dstmt_scanstatus_reset.html#R-22861-02843-39646-61037-38089-35502-27977-11188'>detail</a>)</i></p></dd>
+
+<dt><b>R-22868-25880-64801-36236-02118-32586-25357-26503</b></dt>
+<dd><p>The LIKE operator can be made case sensitive using the case_sensitive_like pragma.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-22868-25880-64801-36236-02118-32586-25357-26503'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-22868-25880-64801-36236-02118-32586-25357-26503'>detail</a>)</i></p></dd>
+
+<dt><b>R-22872-18005-62981-26187-32897-04943-19086-58374</b></dt>
+<dd><p>But the "PRAGMA cache_spill=N" form of this statement only applies to the "main" schema or whatever other schema is specified as part of the statement.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-22872-18005-62981-26187-32897-04943-19086-58374'>context</a>, <a href='matrix/matrix_dpragma.html#R-22872-18005-62981-26187-32897-04943-19086-58374'>detail</a>)</i></p></dd>
+
+<dt><b>R-22887-63324-57928-49032-58189-23826-57467-19364</b></dt>
+<dd><p>The unlikely(X) function is a no-op that the code generator optimizes away so that it consumes no CPU cycles at run-time (that is, during calls to sqlite3_step()).
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/func3.test, matrix: <a href='matrix/lang_corefunc.html#R-22887-63324-57928-49032-58189-23826-57467-19364'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-22887-63324-57928-49032-58189-23826-57467-19364'>detail</a>)</i></p></dd>
+
+<dt><b>R-22934-25134-31918-65183-03263-52759-06599-24509</b></dt>
+<dd><p>Comments are treated as whitespace by the parser.
+<i>(source: <a href="lang_comment.html">lang_comment.html</a>, checked-by: src/tokenize.c, matrix: <a href='matrix/lang_comment.html#R-22934-25134-31918-65183-03263-52759-06599-24509'>context</a>, <a href='matrix/matrix_dlang_comment.html#R-22934-25134-31918-65183-03263-52759-06599-24509'>detail</a>)</i></p></dd>
+
+<dt><b>R-22956-37754-14278-17642-05627-50863-58555-30245</b></dt>
+<dd><p>Casting to a BLOB consists of first casting the value to TEXT in the encoding of the database connection, then interpreting the resulting byte sequence as a BLOB instead of as TEXT.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-22956-37754-14278-17642-05627-50863-58555-30245'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-22956-37754-14278-17642-05627-50863-58555-30245'>detail</a>)</i></p></dd>
+
+<dt><b>R-22973-56658-43836-32419-61759-38607-43348-03721</b></dt>
+<dd><p>SQLite will make this determination, but only if it has been compiled with SQLITE_ENABLE_STAT3 or SQLITE_ENABLE_STAT4.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-22973-56658-43836-32419-61759-38607-43348-03721'>context</a>, <a href='matrix/matrix_doptoverview.html#R-22973-56658-43836-32419-61759-38607-43348-03721'>detail</a>)</i></p></dd>
+
+<dt><b>R-23019-08375-23742-45203-57540-44774-03255-16704</b></dt>
+<dd><p>When case_sensitive_like is enabled, case becomes significant. So, for example, 'a' LIKE 'A' is false but 'a' LIKE 'a' is still true.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma10.test, matrix: <a href='matrix/pragma.html#R-23019-08375-23742-45203-57540-44774-03255-16704'>context</a>, <a href='matrix/matrix_dpragma.html#R-23019-08375-23742-45203-57540-44774-03255-16704'>detail</a>)</i></p></dd>
+
+<dt><b>R-23025-34321-53440-17551-64635-00032-03474-62946</b></dt>
+<dd><p>The maximum page count cannot be reduced below the current database size.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma12.test, matrix: <a href='matrix/pragma.html#R-23025-34321-53440-17551-64635-00032-03474-62946'>context</a>, <a href='matrix/matrix_dpragma.html#R-23025-34321-53440-17551-64635-00032-03474-62946'>detail</a>)</i></p></dd>
+
+<dt><b>R-23027-03515-05606-08970-61667-55431-59935-24913</b></dt>
+<dd><p>Setting it to "shared" is equivalent to setting the SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to sqlite3_open_v2().
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-23027-03515-05606-08970-61667-55431-59935-24913'>context</a>, <a href='matrix/matrix_dopen.html#R-23027-03515-05606-08970-61667-55431-59935-24913'>detail</a>)</i></p></dd>
+
+<dt><b>R-23027-35758-08796-19756-16363-24577-05722-25269</b></dt>
+<dd><p>The size of the blob (and hence the maximum value of N+iOffset) can be determined using the sqlite3_blob_bytes() interface.
+<i>(source: <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_read.html#R-23027-35758-08796-19756-16363-24577-05722-25269'>context</a>, <a href='matrix/matrix_dblob_read.html#R-23027-35758-08796-19756-16363-24577-05722-25269'>detail</a>)</i></p></dd>
+
+<dt><b>R-23038-23996-21339-41009-49120-44197-27486-19934</b></dt>
+<dd><p>If a database connection is operating in exclusive locking mode or in persistent journal mode (PRAGMA journal_mode=persist) then after committing a transaction the rollback journal file may remain in the file-system.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma26.test, matrix: <a href='matrix/pragma.html#R-23038-23996-21339-41009-49120-44197-27486-19934'>context</a>, <a href='matrix/matrix_dpragma.html#R-23038-23996-21339-41009-49120-44197-27486-19934'>detail</a>)</i></p></dd>
+
+<dt><b>R-23060-16144-43919-63172-13824-54748-14505-35052</b></dt>
+<dd><p>If the most recent error references a specific token in the input SQL, the sqlite3_error_offset() interface returns the byte offset of the start of that token.
+<i>(source: <a href="c3ref/errcode.html">c3ref/errcode.html</a>, matrix: <a href='matrix/c3ref/errcode.html#R-23060-16144-43919-63172-13824-54748-14505-35052'>context</a>, <a href='matrix/matrix_derrcode.html#R-23060-16144-43919-63172-13824-54748-14505-35052'>detail</a>)</i></p></dd>
+
+<dt><b>R-23075-39245-36315-44421-23373-63820-24651-07544</b></dt>
+<dd><p>This modifier causes the DDDDDDDDDD to be interpreted not as a Julian day number as it normally would be, but as Unix Time - the number of seconds since 1970.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-23075-39245-36315-44421-23373-63820-24651-07544'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-23075-39245-36315-44421-23373-63820-24651-07544'>detail</a>)</i></p></dd>
+
+<dt><b>R-23110-47146-52080-06643-60978-41760-17507-36913</b></dt>
+<dd><p>the parser allows the use of the single keyword REPLACE as an alias for "INSERT OR REPLACE".
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-23110-47146-52080-06643-60978-41760-17507-36913'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-23110-47146-52080-06643-60978-41760-17507-36913'>detail</a>)</i></p></dd>
+
+<dt><b>R-23114-21695-36244-34709-35067-61095-03657-31992</b></dt>
+<dd><p>The auxiliary index-columns are not shown by the index_info pragma, but they are listed by the index_xinfo pragma.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15x.test, matrix: <a href='matrix/pragma.html#R-23114-21695-36244-34709-35067-61095-03657-31992'>context</a>, <a href='matrix/matrix_dpragma.html#R-23114-21695-36244-34709-35067-61095-03657-31992'>detail</a>)</i></p></dd>
+
+<dt><b>R-23120-24122-52717-58793-54182-36500-02638-57419</b></dt>
+<dd><p>After an application receives an SQLITE_LOCKED error, it may call the sqlite3_unlock_notify() method with the blocked connection handle as the first argument to register for a callback that will be invoked when the blocking connections current transaction is concluded.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-23120-24122-52717-58793-54182-36500-02638-57419'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-23120-24122-52717-58793-54182-36500-02638-57419'>detail</a>)</i></p></dd>
+
+<dt><b>R-23138-20648-33254-30193-19354-36765-51385-50744</b></dt>
+<dd><p>SQLITE_STMTSTATUS_FILTER_HIT is the number of times that a join step was bypassed because a Bloom filter returned not-found.
+<i>(source: <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a>, matrix: <a href='matrix/c3ref/c_stmtstatus_counter.html#R-23138-20648-33254-30193-19354-36765-51385-50744'>context</a>, <a href='matrix/matrix_dc_stmtstatus_counter.html#R-23138-20648-33254-30193-19354-36765-51385-50744'>detail</a>)</i></p></dd>
+
+<dt><b>R-23149-10450-31226-11876-31056-64303-42616-45384</b></dt>
+<dd><p>The second parameter is either the name of the database (i.e. "main", "temp", or an attached database) containing the specified table or NULL.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-23149-10450-31226-11876-31056-64303-42616-45384'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-23149-10450-31226-11876-31056-64303-42616-45384'>detail</a>)</i></p></dd>
+
+<dt><b>R-23153-04437-57288-59301-62447-22408-58278-59491</b></dt>
+<dd><p>A column whose declared type is "CHARINT" will match both rules 1 and 2 but the first rule takes precedence and so the column affinity will be INTEGER.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-23153-04437-57288-59301-62447-22408-58278-59491'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-23153-04437-57288-59301-62447-22408-58278-59491'>detail</a>)</i></p></dd>
+
+<dt><b>R-23155-55597-19897-49290-61770-15838-04803-37418</b></dt>
+<dd><p>Otherwise, if a simple SELECT contains no aggregate functions or a GROUP BY clause, it is a non-aggregate query.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-23155-55597-19897-49290-61770-15838-04803-37418'>context</a>, <a href='matrix/matrix_dlang_select.html#R-23155-55597-19897-49290-61770-15838-04803-37418'>detail</a>)</i></p></dd>
+
+<dt><b>R-23182-54295-50785-24596-08451-02370-06326-41675</b></dt>
+<dd><p>The cache parameter may be set to either "shared" or "private".
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-23182-54295-50785-24596-08451-02370-06326-41675'>context</a>, <a href='matrix/matrix_dopen.html#R-23182-54295-50785-24596-08451-02370-06326-41675'>detail</a>)</i></p></dd>
+
+<dt><b>R-23235-09153-11012-31105-54596-46572-36199-18601</b></dt>
+<dd><p>That there are the same number of entries in the %_rowid table as there are leaf cells in the r-tree structure, and that there is a leaf cell that corresponds to each entry in the %_rowid table.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-23235-09153-11012-31105-54596-46572-36199-18601'>context</a>, <a href='matrix/matrix_drtree.html#R-23235-09153-11012-31105-54596-46572-36199-18601'>detail</a>)</i></p></dd>
+
+<dt><b>R-23293-62447-32888-51584-58025-47542-61505-16122</b></dt>
+<dd><p>If the OFFSET clause evaluates to a negative value, the results are the same as if it had evaluated to zero.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-23293-62447-32888-51584-58025-47542-61505-16122'>context</a>, <a href='matrix/matrix_dlang_select.html#R-23293-62447-32888-51584-58025-47542-61505-16122'>detail</a>)</i></p></dd>
+
+<dt><b>R-23299-15149-12260-14236-54625-56854-20927-10236</b></dt>
+<dd><p>The sqlite3_value_numeric_type() interface attempts to apply numeric affinity to the value. This means that an attempt is made to convert the value to an integer or floating point. If such a conversion is possible without loss of information (in other words, if the value is a string that looks like a number) then the conversion is performed. Otherwise no conversion occurs. The datatype after conversion is returned.
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, checked-by: th3/req1/value02.test, th3/req1/value03.test, matrix: <a href='matrix/c3ref/value_blob.html#R-23299-15149-12260-14236-54625-56854-20927-10236'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-23299-15149-12260-14236-54625-56854-20927-10236'>detail</a>)</i></p></dd>
+
+<dt><b>R-23302-30956-02464-62581-38265-62787-52147-51200</b></dt>
+<dd><p>If this SELECT returns any rows at all, then SQLite concludes that deleting the row from the parent table would violate the foreign key constraint and returns an error.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys10.test, matrix: <a href='matrix/foreignkeys.html#R-23302-30956-02464-62581-38265-62787-52147-51200'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-23302-30956-02464-62581-38265-62787-52147-51200'>detail</a>)</i></p></dd>
+
+<dt><b>R-23313-12651-48093-62761-39865-28601-55555-42424</b></dt>
+<dd><p>Call the second integer on a freelist trunk page L. If L is greater than zero then integers with array indexes between 2 and L+1 inclusive contain page numbers for freelist leaf pages.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-23313-12651-48093-62761-39865-28601-55555-42424'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-23313-12651-48093-62761-39865-28601-55555-42424'>detail</a>)</i></p></dd>
+
+<dt><b>R-23317-43079-57684-22333-28404-22394-54055-23674</b></dt>
+<dd><p>The rtrim(X,Y) function returns a string formed by removing any and all characters that appear in Y from the right side of X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-23317-43079-57684-22333-28404-22394-54055-23674'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-23317-43079-57684-22333-28404-22394-54055-23674'>detail</a>)</i></p></dd>
+
+<dt><b>R-23332-64992-62836-09715-29451-35524-14907-15195</b></dt>
+<dd><p>The sqlite3_stmt_readonly(X) interface returns true (non-zero) if and only if the prepared statement X makes no direct changes to the content of the database file.
+<i>(source: <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>, checked-by: tcl/capi3d.test, th3/cov1/vdbeapi14.test, matrix: <a href='matrix/c3ref/stmt_readonly.html#R-23332-64992-62836-09715-29451-35524-14907-15195'>context</a>, <a href='matrix/matrix_dstmt_readonly.html#R-23332-64992-62836-09715-29451-35524-14907-15195'>detail</a>)</i></p></dd>
+
+<dt><b>R-23336-07085-33379-01813-11813-48961-61224-20101</b></dt>
+<dd><p>The new column is always appended to the end of the list of existing columns.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/req1/altertable01.test, matrix: <a href='matrix/lang_altertable.html#R-23336-07085-33379-01813-11813-48961-61224-20101'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-23336-07085-33379-01813-11813-48961-61224-20101'>detail</a>)</i></p></dd>
+
+<dt><b>R-23360-48280-32877-53646-44675-29604-63391-63755</b></dt>
+<dd><p>Rows for which the expression is false or NULL are retained.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-23360-48280-32877-53646-44675-29604-63391-63755'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-23360-48280-32877-53646-44675-29604-63391-63755'>detail</a>)</i></p></dd>
+
+<dt><b>R-23378-42536-56340-49562-54695-41894-41223-62715</b></dt>
+<dd><p>The second is a copy of the database handle.
+<i>(source: <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>, checked-by: tcl/e_walhook.test, matrix: <a href='matrix/c3ref/wal_hook.html#R-23378-42536-56340-49562-54695-41894-41223-62715'>context</a>, <a href='matrix/matrix_dwal_hook.html#R-23378-42536-56340-49562-54695-41894-41223-62715'>detail</a>)</i></p></dd>
+
+<dt><b>R-23385-34636-24682-17782-28236-64093-44026-01327</b></dt>
+<dd><p>Applications can update, delete from, insert into or drop the sqlite_stat1 table, but may not create or alter the sqlite_stat1 table.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-23385-34636-24682-17782-28236-64093-44026-01327'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-23385-34636-24682-17782-28236-64093-44026-01327'>detail</a>)</i></p></dd>
+
+<dt><b>R-23388-15416-08272-50703-43179-31884-02828-12043</b></dt>
+<dd><p>SQLITE_DBSTATUS_LOOKASIDE_HIT This parameter returns the number of malloc attempts that were satisfied using lookaside memory. Only the high-water value is meaningful; the current value is always zero.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-23388-15416-08272-50703-43179-31884-02828-12043'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-23388-15416-08272-50703-43179-31884-02828-12043'>detail</a>)</i></p></dd>
+
+<dt><b>R-23445-46109-37360-43495-15091-19372-04158-40881</b></dt>
+<dd><p>This pragma causes the database connection on which it is invoked to free up as much memory as it can, by calling sqlite3_db_release_memory().
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/pragma.c, matrix: <a href='matrix/pragma.html#R-23445-46109-37360-43495-15091-19372-04158-40881'>context</a>, <a href='matrix/matrix_dpragma.html#R-23445-46109-37360-43495-15091-19372-04158-40881'>detail</a>)</i></p></dd>
+
+<dt><b>R-23458-03780-07133-16857-18321-45188-49595-32402</b></dt>
+<dd><p>Virtual tables can provide alternative implementations of functions using the xFindFunction method of the virtual table module. But global versions of those functions must exist in order to be overloaded.
+<i>(source: <a href="c3ref/overload_function.html">c3ref/overload_function.html</a>, matrix: <a href='matrix/c3ref/overload_function.html#R-23458-03780-07133-16857-18321-45188-49595-32402'>context</a>, <a href='matrix/matrix_doverload_function.html#R-23458-03780-07133-16857-18321-45188-49595-32402'>detail</a>)</i></p></dd>
+
+<dt><b>R-23479-00031-14881-27531-19387-40447-21321-20674</b></dt>
+<dd><p>Alternative collating functions for table columns can be specified in the CREATE TABLE statement using the COLLATE clause on the column definition.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat05.test, matrix: <a href='matrix/fileformat2.html#R-23479-00031-14881-27531-19387-40447-21321-20674'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-23479-00031-14881-27531-19387-40447-21321-20674'>detail</a>)</i></p></dd>
+
+<dt><b>R-23486-28813-15662-33687-07998-38651-35612-02946</b></dt>
+<dd><p>The SQLITE_ prefix is omitted from any strings returned by sqlite3_compileoption_get().
+<i>(source: <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a>, checked-by: th3/cov1/ctime01.test, matrix: <a href='matrix/c3ref/compileoption_get.html#R-23486-28813-15662-33687-07998-38651-35612-02946'>context</a>, <a href='matrix/matrix_dcompileoption_get.html#R-23486-28813-15662-33687-07998-38651-35612-02946'>detail</a>)</i></p></dd>
+
+<dt><b>R-23498-38103-14789-32362-20893-18131-57271-11278</b></dt>
+<dd><p>When the REPLACE conflict resolution strategy deletes rows in order to satisfy a constraint, delete triggers fire if and only if recursive triggers are enabled.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict02.test, matrix: <a href='matrix/lang_conflict.html#R-23498-38103-14789-32362-20893-18131-57271-11278'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-23498-38103-14789-32362-20893-18131-57271-11278'>detail</a>)</i></p></dd>
+
+<dt><b>R-23512-47460-29978-55073-11417-46179-04281-45022</b></dt>
+<dd><p>If the INTO clause is included, then the original database file is unchanged and a new database is created in a file named by the argument to the INTO clause.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, matrix: <a href='matrix/lang_vacuum.html#R-23512-47460-29978-55073-11417-46179-04281-45022'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-23512-47460-29978-55073-11417-46179-04281-45022'>detail</a>)</i></p></dd>
+
+<dt><b>R-23547-15805-63625-56801-52157-01700-25402-34533</b></dt>
+<dd><p>These functions return the total number of rows inserted, modified or deleted by all INSERT, UPDATE or DELETE statements completed since the database connection was opened, including those executed as part of trigger programs.
+<i>(source: <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>, matrix: <a href='matrix/c3ref/total_changes.html#R-23547-15805-63625-56801-52157-01700-25402-34533'>context</a>, <a href='matrix/matrix_dtotal_changes.html#R-23547-15805-63625-56801-52157-01700-25402-34533'>detail</a>)</i></p></dd>
+
+<dt><b>R-23552-22587-27822-03022-61455-36680-30849-34520</b></dt>
+<dd><p>If the MATCH operator is connected to other terms of the WHERE clause via an OR operator, for example, the query will fail with an error.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: th3/cov1/rtree04.test, matrix: <a href='matrix/rtree.html#R-23552-22587-27822-03022-61455-36680-30849-34520'>context</a>, <a href='matrix/matrix_drtree.html#R-23552-22587-27822-03022-61455-36680-30849-34520'>detail</a>)</i></p></dd>
+
+<dt><b>R-23569-48727-57101-02184-22731-43304-31733-55704</b></dt>
+<dd><p>UNIQUE and PRIMARY KEY constraints on tables cause SQLite to create internal indexes with names of the form "sqlite_autoindex_TABLE_N" where TABLE is replaced by the name of the table that contains the constraint and N is an integer beginning with 1 and increasing by one with each constraint seen in the table definition.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-23569-48727-57101-02184-22731-43304-31733-55704'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-23569-48727-57101-02184-22731-43304-31733-55704'>detail</a>)</i></p></dd>
+
+<dt><b>R-23579-05241-28343-33967-00321-51471-16387-08197</b></dt>
+<dd><p>PRAGMA busy_timeout; PRAGMA busy_timeout = milliseconds; Query or change the setting of the busy timeout.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/lock.test, th3/cov1/main21.test, matrix: <a href='matrix/pragma.html#R-23579-05241-28343-33967-00321-51471-16387-08197'>context</a>, <a href='matrix/matrix_dpragma.html#R-23579-05241-28343-33967-00321-51471-16387-08197'>detail</a>)</i></p></dd>
+
+<dt><b>R-23588-34450-24473-59625-33708-24256-58306-00821</b></dt>
+<dd><p>The two-byte integer at offset 1 gives the start of the first freeblock on the page, or is zero if there are no freeblocks.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-23588-34450-24473-59625-33708-24256-58306-00821'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-23588-34450-24473-59625-33708-24256-58306-00821'>detail</a>)</i></p></dd>
+
+<dt><b>R-23595-60076-32539-07407-36536-15376-05711-31213</b></dt>
+<dd><p>The sqlite3_malloc64(N) routine works just like sqlite3_malloc(N) except that N is an unsigned 64-bit integer instead of a signed 32-bit integer.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-23595-60076-32539-07407-36536-15376-05711-31213'>context</a>, <a href='matrix/matrix_dfree.html#R-23595-60076-32539-07407-36536-15376-05711-31213'>detail</a>)</i></p></dd>
+
+<dt><b>R-23612-42210-08607-14273-01110-55544-62379-11788</b></dt>
+<dd><p>You can access the ROWID of an SQLite table using one of the special column names ROWID, _ROWID_, or OID. Except if you declare an ordinary table column to use one of those special names, then the use of that name will refer to the declared column not to the internal ROWID.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-23612-42210-08607-14273-01110-55544-62379-11788'>context</a>, <a href='matrix/matrix_dautoinc.html#R-23612-42210-08607-14273-01110-55544-62379-11788'>detail</a>)</i></p></dd>
+
+<dt><b>R-23640-47263-12341-60168-43783-53275-58204-18225</b></dt>
+<dd><p>The rollback journal file can be truncated to zero length
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-23640-47263-12341-60168-43783-53275-58204-18225'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-23640-47263-12341-60168-43783-53275-58204-18225'>detail</a>)</i></p></dd>
+
+<dt><b>R-23648-58527-04335-61943-03061-32754-63941-35147</b></dt>
+<dd><p>SQLite only understands upper/lower case for ASCII characters by default.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-23648-58527-04335-61943-03061-32754-63941-35147'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-23648-58527-04335-61943-03061-32754-63941-35147'>detail</a>)</i></p></dd>
+
+<dt><b>R-23667-57149-13692-40760-52077-20986-45375-02136</b></dt>
+<dd><p>sqlite> EXPLAIN QUERY PLAN SELECT a, b FROM t1 WHERE a=1; QUERY PLAN `--SCAN t1
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-23667-57149-13692-40760-52077-20986-45375-02136'>context</a>, <a href='matrix/matrix_deqp.html#R-23667-57149-13692-40760-52077-20986-45375-02136'>detail</a>)</i></p></dd>
+
+<dt><b>R-23682-59820-57074-21944-19735-61329-41044-60872</b></dt>
+<dd><p>By contrast, if foreign key errors can be recognized simply by looking at the definition of the child table and without having to consult the parent table definition, then the CREATE TABLE statement for the child table fails.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys08.test, matrix: <a href='matrix/foreignkeys.html#R-23682-59820-57074-21944-19735-61329-41044-60872'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-23682-59820-57074-21944-19735-61329-41044-60872'>detail</a>)</i></p></dd>
+
+<dt><b>R-23696-45205-56139-29220-39057-53925-58417-44046</b></dt>
+<dd><p>The PRAGMA integrity_check and PRAGMA quick_check commands check the type of the content of all columns in STRICT tables and show errors if anything is amiss.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/cov1/strict02.test, th3/req1/strictreq02.test, matrix: <a href='matrix/stricttables.html#R-23696-45205-56139-29220-39057-53925-58417-44046'>context</a>, <a href='matrix/matrix_dstricttables.html#R-23696-45205-56139-29220-39057-53925-58417-44046'>detail</a>)</i></p></dd>
+
+<dt><b>R-23702-41282-42393-06958-42086-21645-30380-61682</b></dt>
+<dd><p>The path is optional if the authority is present.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-23702-41282-42393-06958-42086-21645-30380-61682'>context</a>, <a href='matrix/matrix_duri.html#R-23702-41282-42393-06958-42086-21645-30380-61682'>detail</a>)</i></p></dd>
+
+<dt><b>R-23735-03107-03121-47557-18096-07566-30916-33769</b></dt>
+<dd><p>The likely(X) function returns the argument X unchanged.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/func3.test, matrix: <a href='matrix/lang_corefunc.html#R-23735-03107-03121-47557-18096-07566-30916-33769'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-23735-03107-03121-47557-18096-07566-30916-33769'>detail</a>)</i></p></dd>
+
+<dt><b>R-23774-64117-15302-61921-22939-28381-40174-39816</b></dt>
+<dd><p>The destructor is also invoked if the call to sqlite3_create_function_v2() fails.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc07.test, matrix: <a href='matrix/c3ref/create_function.html#R-23774-64117-15302-61921-22939-28381-40174-39816'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-23774-64117-15302-61921-22939-28381-40174-39816'>detail</a>)</i></p></dd>
+
+<dt><b>R-23786-28684-07406-43966-34623-43310-02646-59578</b></dt>
+<dd><p>The "PRAGMA cache_spill=boolean" form of this pragma applies across all databases attached to the database connection.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-23786-28684-07406-43966-34623-43310-02646-59578'>context</a>, <a href='matrix/matrix_dpragma.html#R-23786-28684-07406-43966-34623-43310-02646-59578'>detail</a>)</i></p></dd>
+
+<dt><b>R-23828-03043-49392-48287-20383-19771-48629-15869</b></dt>
+<dd><p>After at least "ms" milliseconds of sleeping, the handler returns 0 which causes sqlite3_step() to return SQLITE_BUSY.
+<i>(source: <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a>, checked-by: th3/cov1/main21.test, matrix: <a href='matrix/c3ref/busy_timeout.html#R-23828-03043-49392-48287-20383-19771-48629-15869'>context</a>, <a href='matrix/matrix_dbusy_timeout.html#R-23828-03043-49392-48287-20383-19771-48629-15869'>detail</a>)</i></p></dd>
+
+<dt><b>R-23882-45353-30604-47614-45882-29623-34325-59956</b></dt>
+<dd><p>The cell pointer array of a b-tree page immediately follows the b-tree page header.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-23882-45353-30604-47614-45882-29623-34325-59956'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-23882-45353-30604-47614-45882-29623-34325-59956'>detail</a>)</i></p></dd>
+
+<dt><b>R-23914-51476-03843-05689-25158-40099-03729-02958</b></dt>
+<dd><p>A literal value can also be the token "NULL".
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-23914-51476-03843-05689-25158-40099-03729-02958'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-23914-51476-03843-05689-25158-40099-03729-02958'>detail</a>)</i></p></dd>
+
+<dt><b>R-23927-54081-32743-59723-35169-61192-28393-34691</b></dt>
+<dd><p>Each expression in the result-set is then evaluated once for each group of rows.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-23927-54081-32743-59723-35169-61192-28393-34691'>context</a>, <a href='matrix/matrix_dlang_select.html#R-23927-54081-32743-59723-35169-61192-28393-34691'>detail</a>)</i></p></dd>
+
+<dt><b>R-23929-31743-58027-02127-28995-37198-56222-58306</b></dt>
+<dd><p>These routines work just like the corresponding column access functions except that these routines take a single protected sqlite3_value object pointer instead of a sqlite3_stmt* pointer and an integer column number.
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, checked-by: th3/req1/value02.test, th3/req1/value03.test, matrix: <a href='matrix/c3ref/value_blob.html#R-23929-31743-58027-02127-28995-37198-56222-58306'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-23929-31743-58027-02127-28995-37198-56222-58306'>detail</a>)</i></p></dd>
+
+<dt><b>R-23935-31469-05351-59076-27167-07827-26621-20596</b></dt>
+<dd><p>If a RELEASE command releases the outermost savepoint, so that the transaction stack becomes empty, then RELEASE is the same as COMMIT.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-23935-31469-05351-59076-27167-07827-26621-20596'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-23935-31469-05351-59076-27167-07827-26621-20596'>detail</a>)</i></p></dd>
+
+<dt><b>R-23955-02765-61832-08091-33535-52671-43903-30817</b></dt>
+<dd><p>Cache_spill is enabled by default
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma2.test, matrix: <a href='matrix/pragma.html#R-23955-02765-61832-08091-33535-52671-43903-30817'>context</a>, <a href='matrix/matrix_dpragma.html#R-23955-02765-61832-08091-33535-52671-43903-30817'>detail</a>)</i></p></dd>
+
+<dt><b>R-23976-43329-40116-37521-45580-17979-29083-00221</b></dt>
+<dd><p>It is an error to specify both a schema-name and the TEMP or TEMPORARY keyword, unless the schema-name is "temp".
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-23976-43329-40116-37521-45580-17979-29083-00221'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-23976-43329-40116-37521-45580-17979-29083-00221'>detail</a>)</i></p></dd>
+
+<dt><b>R-23979-26855-11433-13886-36819-17221-39687-26769</b></dt>
+<dd><p>The abs(X) function returns the absolute value of the numeric argument X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-23979-26855-11433-13886-36819-17221-39687-26769'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-23979-26855-11433-13886-36819-17221-39687-26769'>detail</a>)</i></p></dd>
+
+<dt><b>R-23980-43280-61587-10591-51567-45451-02507-40247</b></dt>
+<dd><p>This interface causes the xEntryPoint() function to be invoked for each new database connection that is created.
+<i>(source: <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>, checked-by: th3/req1/autoext01.test, matrix: <a href='matrix/c3ref/auto_extension.html#R-23980-43280-61587-10591-51567-45451-02507-40247'>context</a>, <a href='matrix/matrix_dauto_extension.html#R-23980-43280-61587-10591-51567-45451-02507-40247'>detail</a>)</i></p></dd>
+
+<dt><b>R-23980-48859-56951-38852-38346-56715-55568-02993</b></dt>
+<dd><p>There is one exception: if the foreign key column in the track table is NULL, then no corresponding entry in the artist table is required.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys01.test, matrix: <a href='matrix/foreignkeys.html#R-23980-48859-56951-38852-38346-56715-55568-02993'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-23980-48859-56951-38852-38346-56715-55568-02993'>detail</a>)</i></p></dd>
+
+<dt><b>R-23984-49501-37243-56289-03587-60124-22633-25227</b></dt>
+<dd><p>PRAGMA ignore_check_constraints = boolean; This pragma enables or disables the enforcement of CHECK constraints.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma20.test, matrix: <a href='matrix/pragma.html#R-23984-49501-37243-56289-03587-60124-22633-25227'>context</a>, <a href='matrix/matrix_dpragma.html#R-23984-49501-37243-56289-03587-60124-22633-25227'>detail</a>)</i></p></dd>
+
+<dt><b>R-23992-54131-34297-51092-28105-58242-15143-29320</b></dt>
+<dd><p>If the "TEMP" or "TEMPORARY" keyword occurs in between "CREATE" and "VIEW" then the view that is created is only visible to the database connection that created it and is automatically deleted when the database connection is closed.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, checked-by: th3/req1/view01.test, matrix: <a href='matrix/lang_createview.html#R-23992-54131-34297-51092-28105-58242-15143-29320'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-23992-54131-34297-51092-28105-58242-15143-29320'>detail</a>)</i></p></dd>
+
+<dt><b>R-24016-17929-42002-59431-23117-37264-43384-47268</b></dt>
+<dd><p>C-style comments can span multiple lines.
+<i>(source: <a href="lang_comment.html">lang_comment.html</a>, checked-by: th3/req1/comment01.test, matrix: <a href='matrix/lang_comment.html#R-24016-17929-42002-59431-23117-37264-43384-47268'>context</a>, <a href='matrix/matrix_dlang_comment.html#R-24016-17929-42002-59431-23117-37264-43384-47268'>detail</a>)</i></p></dd>
+
+<dt><b>R-24021-02490-44193-43433-07494-30276-16135-35345</b></dt>
+<dd><p>For auxiliary columns, only the name of the column matters. The type affinity is ignored.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-24021-02490-44193-43433-07494-30276-16135-35345'>context</a>, <a href='matrix/matrix_drtree.html#R-24021-02490-44193-43433-07494-30276-16135-35345'>detail</a>)</i></p></dd>
+
+<dt><b>R-24023-61156-56094-16008-29634-01440-59018-40109</b></dt>
+<dd><p>The mode query parameter determines if the new database is opened read-only, read-write, read-write and created if it does not exist, or that the database is a pure in-memory database that never interacts with disk, respectively.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-24023-61156-56094-16008-29634-01440-59018-40109'>context</a>, <a href='matrix/matrix_duri.html#R-24023-61156-56094-16008-29634-01440-59018-40109'>detail</a>)</i></p></dd>
+
+<dt><b>R-24078-09375-10188-46060-61284-00703-09304-21721</b></dt>
+<dd><p>Value is a NULL.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-24078-09375-10188-46060-61284-00703-09304-21721'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-24078-09375-10188-46060-61284-00703-09304-21721'>detail</a>)</i></p></dd>
+
+<dt><b>R-24086-08530-21252-40131-41317-48771-53823-31992</b></dt>
+<dd><p>For example, a partial index might omit entries for which the column being indexed is NULL.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-24086-08530-21252-40131-41317-48771-53823-31992'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-24086-08530-21252-40131-41317-48771-53823-31992'>detail</a>)</i></p></dd>
+
+<dt><b>R-24089-57979-14928-03351-49983-36558-42407-47450</b></dt>
+<dd><p>If a page contains no cells (which is only possible for a root page of a table that contains no rows) then the offset to the cell content area will equal the page size minus the bytes of reserved space.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-24089-57979-14928-03351-49983-36558-42407-47450'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-24089-57979-14928-03351-49983-36558-42407-47450'>detail</a>)</i></p></dd>
+
+<dt><b>R-24098-10282-28593-32391-22620-22460-46080-08998</b></dt>
+<dd><p>The DROP COLUMN command only works if the column is not referenced by any other parts of the schema and is not a PRIMARY KEY and does not have a UNIQUE constraint.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: tcl/alterdropcol2.test, matrix: <a href='matrix/lang_altertable.html#R-24098-10282-28593-32391-22620-22460-46080-08998'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-24098-10282-28593-32391-22620-22460-46080-08998'>detail</a>)</i></p></dd>
+
+<dt><b>R-24153-28352-05918-29721-55341-26989-15412-17405</b></dt>
+<dd><p>Tables created using CREATE TABLE AS are initially populated with the rows of data returned by the SELECT statement.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-24153-28352-05918-29721-55341-26989-15412-17405'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-24153-28352-05918-29721-55341-26989-15412-17405'>detail</a>)</i></p></dd>
+
+<dt><b>R-24157-46062-13277-37526-03999-51751-53681-32386</b></dt>
+<dd><p>The 3rd argument to the sqlite3_exec() callback is an array of pointers to strings obtained as if from sqlite3_column_text(), one for each column.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-24157-46062-13277-37526-03999-51751-53681-32386'>context</a>, <a href='matrix/matrix_dexec.html#R-24157-46062-13277-37526-03999-51751-53681-32386'>detail</a>)</i></p></dd>
+
+<dt><b>R-24161-47822-59915-14251-27754-57973-48969-03751</b></dt>
+<dd><p>The sqlite3_version() function is mostly constant, but it can change when SQLite is upgraded, and so even though it always returns the same answer for any particular session, because it can change answers across sessions it is still considered non-deterministic.
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-24161-47822-59915-14251-27754-57973-48969-03751'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-24161-47822-59915-14251-27754-57973-48969-03751'>detail</a>)</i></p></dd>
+
+<dt><b>R-24176-11856-49416-35044-22347-11072-23258-18948</b></dt>
+<dd><p>The length of the name is limited to 255 bytes in a UTF-8 representation, exclusive of the zero-terminator.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc01.test, matrix: <a href='matrix/c3ref/create_function.html#R-24176-11856-49416-35044-22347-11072-23258-18948'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-24176-11856-49416-35044-22347-11072-23258-18948'>detail</a>)</i></p></dd>
+
+<dt><b>R-24179-60523-60164-40067-19292-39680-45687-45747</b></dt>
+<dd><p>Even if the foreign key constraint it is attached to is deferred, configuring a RESTRICT action causes SQLite to return an error immediately if a parent key with dependent child keys is deleted or modified.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-24179-60523-60164-40067-19292-39680-45687-45747'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-24179-60523-60164-40067-19292-39680-45687-45747'>detail</a>)</i></p></dd>
+
+<dt><b>R-24188-24349-51458-56364-12806-43304-14352-46380</b></dt>
+<dd><p>The expression attached to the optional OFFSET clause that may follow a LIMIT clause must also evaluate to an integer, or a value that can be losslessly converted to an integer.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-24188-24349-51458-56364-12806-43304-14352-46380'>context</a>, <a href='matrix/matrix_dlang_select.html#R-24188-24349-51458-56364-12806-43304-14352-46380'>detail</a>)</i></p></dd>
+
+<dt><b>R-24189-42234-36662-00124-25434-59870-15844-57738</b></dt>
+<dd><p>An SQLITE_TRACE_ROW callback is invoked whenever a prepared statement generates a single row of result.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-24189-42234-36662-00124-25434-59870-15844-57738'>context</a>, <a href='matrix/matrix_dc_trace.html#R-24189-42234-36662-00124-25434-59870-15844-57738'>detail</a>)</i></p></dd>
+
+<dt><b>R-24212-52761-31234-49044-16935-34331-57442-65460</b></dt>
+<dd><p>The use of the R*Tree in the penultimate query reduces the number of calls to contained_in() function to a small subset of the entire table.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-24212-52761-31234-49044-16935-34331-57442-65460'>context</a>, <a href='matrix/matrix_drtree.html#R-24212-52761-31234-49044-16935-34331-57442-65460'>detail</a>)</i></p></dd>
+
+<dt><b>R-24225-46995-38973-17701-37772-12518-00219-22558</b></dt>
+<dd><p>For example, "(CAST '123e+5' AS INTEGER)" results in 123, not in 12300000.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/cast.test, matrix: <a href='matrix/lang_expr.html#R-24225-46995-38973-17701-37772-12518-00219-22558'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-24225-46995-38973-17701-37772-12518-00219-22558'>detail</a>)</i></p></dd>
+
+<dt><b>R-24227-04807-65013-09510-28047-53461-17252-27305</b></dt>
+<dd><p>Or, if none of the WHEN expressions evaluate to true, the result of evaluating the ELSE expression, if any.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-24227-04807-65013-09510-28047-53461-17252-27305'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-24227-04807-65013-09510-28047-53461-17252-27305'>detail</a>)</i></p></dd>
+
+<dt><b>R-24306-14960-36438-04276-35826-43147-57622-43704</b></dt>
+<dd><p>RESTART This mode works the same way as FULL with the addition that after checkpointing the log file it blocks (calls the busy-handler callback) until all readers are finished with the log file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/checkpoint01.test, matrix: <a href='matrix/pragma.html#R-24306-14960-36438-04276-35826-43147-57622-43704'>context</a>, <a href='matrix/matrix_dpragma.html#R-24306-14960-36438-04276-35826-43147-57622-43704'>detail</a>)</i></p></dd>
+
+<dt><b>R-24334-46836-37699-41209-48952-15160-39885-36508</b></dt>
+<dd><p>The SQLite core will never read or write the lock-byte page, though operating-system specific VFS implementations may choose to read or write bytes on the lock-byte page according to the needs and proclivities of the underlying system.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-24334-46836-37699-41209-48952-15160-39885-36508'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-24334-46836-37699-41209-48952-15160-39885-36508'>detail</a>)</i></p></dd>
+
+<dt><b>R-24336-64733-64595-09951-63248-40632-37615-43311</b></dt>
+<dd><p>The X parameter to sqlite3_autovacuum_pages(D,C,P,X) is an optional destructor for the P parameter.
+<i>(source: <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a>, checked-by: th3/cov1/autovac01.test, matrix: <a href='matrix/c3ref/autovacuum_pages.html#R-24336-64733-64595-09951-63248-40632-37615-43311'>context</a>, <a href='matrix/matrix_dautovacuum_pages.html#R-24336-64733-64595-09951-63248-40632-37615-43311'>detail</a>)</i></p></dd>
+
+<dt><b>R-24401-52400-49114-60456-18821-28705-54480-01087</b></dt>
+<dd><p>as will attempting to delete a row from the artist table when there exist dependent rows in the track table
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys01.test, matrix: <a href='matrix/foreignkeys.html#R-24401-52400-49114-60456-18821-28705-54480-01087'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-24401-52400-49114-60456-18821-28705-54480-01087'>detail</a>)</i></p></dd>
+
+<dt><b>R-24408-11841-16708-30331-61955-39086-27640-21297</b></dt>
+<dd><p>An application can tell which course of action SQLite took by using the sqlite3_get_autocommit() C-language interface.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-24408-11841-16708-30331-61955-39086-27640-21297'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-24408-11841-16708-30331-61955-39086-27640-21297'>detail</a>)</i></p></dd>
+
+<dt><b>R-24411-60193-43052-59187-49935-26782-54329-59494</b></dt>
+<dd><p>The frame-header is six big-endian 32-bit unsigned integer values, as follows: WAL Frame Header Format OffsetSizeDescription 04 Page number 44 For commit records, the size of the database file in pages after the commit. For all other records, zero. 84 Salt-1 copied from the WAL header 124 Salt-2 copied from the WAL header 164 Checksum-1: Cumulative checksum up through and including this page 204 Checksum-2: Second half of the cumulative checksum.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-24411-60193-43052-59187-49935-26782-54329-59494'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-24411-60193-43052-59187-49935-26782-54329-59494'>detail</a>)</i></p></dd>
+
+<dt><b>R-24420-43338-21659-30217-32361-58749-59788-18529</b></dt>
+<dd><p>In formats 5 through 7, the "T" is a literal character separating the date and the time, as required by ISO-8601.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-24420-43338-21659-30217-32361-58749-59788-18529'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-24420-43338-21659-30217-32361-58749-59788-18529'>detail</a>)</i></p></dd>
+
+<dt><b>R-24433-42760-21501-54800-20604-32904-26746-52498</b></dt>
+<dd><p>AUTOINCREMENT guarantees that automatically chosen ROWIDs will be increasing but not that they will be sequential.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-24433-42760-21501-54800-20604-32904-26746-52498'>context</a>, <a href='matrix/matrix_dautoinc.html#R-24433-42760-21501-54800-20604-32904-26746-52498'>detail</a>)</i></p></dd>
+
+<dt><b>R-24450-46174-44304-25763-63471-62798-12121-54973</b></dt>
+<dd><p>All foreign key constraints in SQLite are handled as if MATCH SIMPLE were specified.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys23.test, matrix: <a href='matrix/foreignkeys.html#R-24450-46174-44304-25763-63471-62798-12121-54973'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-24450-46174-44304-25763-63471-62798-12121-54973'>detail</a>)</i></p></dd>
+
+<dt><b>R-24454-61742-57320-38040-08939-30630-11445-30109</b></dt>
+<dd><p>The BINARY collating sequence is used for comparisons.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-24454-61742-57320-38040-08939-30630-11445-30109'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-24454-61742-57320-38040-08939-30630-11445-30109'>detail</a>)</i></p></dd>
+
+<dt><b>R-24470-31136-04101-59681-51092-46521-28491-41459</b></dt>
+<dd><p>This function is an SQL wrapper around the sqlite3_sourceid() C interface.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/req1/func04.test, matrix: <a href='matrix/lang_corefunc.html#R-24470-31136-04101-59681-51092-46521-28491-41459'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-24470-31136-04101-59681-51092-46521-28491-41459'>detail</a>)</i></p></dd>
+
+<dt><b>R-24480-07076-00742-03250-14200-63505-37261-50908</b></dt>
+<dd><p>sqlite> SELECT * FROM > (SELECT * FROM t1 WHERE a=1 ORDER BY b LIMIT 2) AS x, > (SELECT * FROM t2 WHERE c=1 ORDER BY d LIMIT 2) AS y; QUERY PLAN |--MATERIALIZE x | `--SEARCH t1 USING COVERING INDEX i2 (a=?) |--MATERIALIZE y | |--SEARCH t2 USING INDEX i4 (c=?) | `--USE TEMP B-TREE FOR ORDER BY |--SCAN x `--SCAN y
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-24480-07076-00742-03250-14200-63505-37261-50908'>context</a>, <a href='matrix/matrix_deqp.html#R-24480-07076-00742-03250-14200-63505-37261-50908'>detail</a>)</i></p></dd>
+
+<dt><b>R-24499-57071-23351-26477-16690-35822-52475-36418</b></dt>
+<dd><p>The following example illustrates the effect of using a deferred foreign key constraint. -- Database schema. Both tables are initially empty. CREATE TABLE artist( artistid INTEGER PRIMARY KEY, artistname TEXT ); CREATE TABLE track( trackid INTEGER, trackname TEXT, trackartist INTEGER REFERENCES artist(artistid) DEFERRABLE INITIALLY DEFERRED ); sqlite3> -- If the foreign key constraint were immediate, this INSERT would sqlite3> -- cause an error (since as there is no row in table artist with sqlite3> -- artistid=5). But as the constraint is deferred and there is an sqlite3> -- open transaction, no error occurs. sqlite3> BEGIN; sqlite3> INSERT INTO track VALUES(1, 'White Christmas', 5); sqlite3> -- The following COMMIT fails, as the database is in a state that sqlite3> -- does not satisfy the deferred foreign key constraint. The sqlite3> -- transaction remains open. sqlite3> COMMIT; SQL error: foreign key constraint failed sqlite3> -- After inserting a row into the artist table with artistid=5, the sqlite3> -- deferred foreign key constraint is satisfied. It is then possible sqlite3> -- to commit the transaction without error. sqlite3> INSERT INTO artist VALUES(5, 'Bing Crosby'); sqlite3> COMMIT;
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys13.test, matrix: <a href='matrix/foreignkeys.html#R-24499-57071-23351-26477-16690-35822-52475-36418'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-24499-57071-23351-26477-16690-35822-52475-36418'>detail</a>)</i></p></dd>
+
+<dt><b>R-24505-23230-57666-22051-56312-29400-20176-42804</b></dt>
+<dd><p>A pointer to an sqlite3_context object is always first parameter to application-defined SQL functions.
+<i>(source: <a href="c3ref/context.html">c3ref/context.html</a>, checked-by: src/vdbe.c, src/vdbemem.c, th3/req1/aggcntx01.test, th3/req1/func02.test, matrix: <a href='matrix/c3ref/context.html#R-24505-23230-57666-22051-56312-29400-20176-42804'>context</a>, <a href='matrix/matrix_dcontext.html#R-24505-23230-57666-22051-56312-29400-20176-42804'>detail</a>)</i></p></dd>
+
+<dt><b>R-24519-28304-27679-62184-02249-08056-49023-13978</b></dt>
+<dd><p>When the value of auto-vacuum is 2 or "incremental" then the additional information needed to do auto-vacuuming is stored in the database file but auto-vacuuming does not occur automatically at each commit as it does with auto_vacuum=full.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-24519-28304-27679-62184-02249-08056-49023-13978'>context</a>, <a href='matrix/matrix_dpragma.html#R-24519-28304-27679-62184-02249-08056-49023-13978'>detail</a>)</i></p></dd>
+
+<dt><b>R-24531-54682-59565-24630-56412-40369-07306-32819</b></dt>
+<dd><p>The update hook is not invoked when internal system tables are modified (i.e. sqlite_sequence).
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: tcl/hook.test, matrix: <a href='matrix/c3ref/update_hook.html#R-24531-54682-59565-24630-56412-40369-07306-32819'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-24531-54682-59565-24630-56412-40369-07306-32819'>detail</a>)</i></p></dd>
+
+<dt><b>R-24539-09359-22756-36895-58208-42463-58275-24865</b></dt>
+<dd><p>PRAGMA function_list; This pragma returns a list of SQL functions known to the database connection.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-24539-09359-22756-36895-58208-42463-58275-24865'>context</a>, <a href='matrix/matrix_dpragma.html#R-24539-09359-22756-36895-58208-42463-58275-24865'>detail</a>)</i></p></dd>
+
+<dt><b>R-24543-02373-21907-00972-51733-48834-36106-39581</b></dt>
+<dd><p>If pzTail is not NULL then *pzTail is made to point to the first byte past the end of the first SQL statement in zSql.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare01.test, matrix: <a href='matrix/c3ref/prepare.html#R-24543-02373-21907-00972-51733-48834-36106-39581'>context</a>, <a href='matrix/matrix_dprepare.html#R-24543-02373-21907-00972-51733-48834-36106-39581'>detail</a>)</i></p></dd>
+
+<dt><b>R-24550-28707-14750-42136-44607-00507-28775-21401</b></dt>
+<dd><p>An SQLITE_TRACE_CLOSE callback is invoked when a database connection closes.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-24550-28707-14750-42136-44607-00507-28775-21401'>context</a>, <a href='matrix/matrix_dc_trace.html#R-24550-28707-14750-42136-44607-00507-28775-21401'>detail</a>)</i></p></dd>
+
+<dt><b>R-24564-50022-48872-56770-06110-00167-03462-09571</b></dt>
+<dd><p>The right-hand operand of an IN or NOT IN operator has no affinity if the operand is a list, or has the same affinity as the affinity of the result set expression if the operand is a SELECT.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/cov1/affinity01.test, th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-24564-50022-48872-56770-06110-00167-03462-09571'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-24564-50022-48872-56770-06110-00167-03462-09571'>detail</a>)</i></p></dd>
+
+<dt><b>R-24610-05866-31843-28121-00824-18930-59704-16191</b></dt>
+<dd><p>If the join-operator is a "LEFT JOIN" or "LEFT OUTER JOIN", then after the ON or USING filtering clauses have been applied, an extra row is added to the output for each row in the original left-hand input dataset that does not match any row in the right-hand dataset.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-24610-05866-31843-28121-00824-18930-59704-16191'>context</a>, <a href='matrix/matrix_dlang_select.html#R-24610-05866-31843-28121-00824-18930-59704-16191'>detail</a>)</i></p></dd>
+
+<dt><b>R-24625-56801-43002-50418-06223-19456-53547-53426</b></dt>
+<dd><p>SQLite makes its own private copy of the content of the sqlite3_mem_methods structure before the sqlite3_config() call returns.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/th3oom.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-24625-56801-43002-50418-06223-19456-53547-53426'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-24625-56801-43002-50418-06223-19456-53547-53426'>detail</a>)</i></p></dd>
+
+<dt><b>R-24635-37065-50827-53824-24547-23611-48294-22857</b></dt>
+<dd><p>The <<, >>, &, and | operators always return an INTEGER (or NULL) result, but the % operator returns either INTEGER or REAL (or NULL) depending on the type of its operands.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_06.test, matrix: <a href='matrix/datatype3.html#R-24635-37065-50827-53824-24547-23611-48294-22857'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-24635-37065-50827-53824-24547-23611-48294-22857'>detail</a>)</i></p></dd>
+
+<dt><b>R-24636-24567-22632-41187-02492-09181-21394-55027</b></dt>
+<dd><p>The -> and ->> operators are "extract"; they extract the RHS component from the LHS.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-24636-24567-22632-41187-02492-09181-21394-55027'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-24636-24567-22632-41187-02492-09181-21394-55027'>detail</a>)</i></p></dd>
+
+<dt><b>R-24654-22397-54230-45811-61786-44537-26039-50669</b></dt>
+<dd><p>The X callback is invoked whenever any of the events identified by mask M occur.
+<i>(source: <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>, matrix: <a href='matrix/c3ref/trace_v2.html#R-24654-22397-54230-45811-61786-44537-26039-50669'>context</a>, <a href='matrix/matrix_dtrace_v2.html#R-24654-22397-54230-45811-61786-44537-26039-50669'>detail</a>)</i></p></dd>
+
+<dt><b>R-24663-27339-41709-46831-61109-18753-41935-55210</b></dt>
+<dd><p>SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE The database is opened for reading and writing, and is created if it does not already exist. This is the behavior that is always used for sqlite3_open() and sqlite3_open16().
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-24663-27339-41709-46831-61109-18753-41935-55210'>context</a>, <a href='matrix/matrix_dopen.html#R-24663-27339-41709-46831-61109-18753-41935-55210'>detail</a>)</i></p></dd>
+
+<dt><b>R-24676-09859-25258-06679-18327-03281-24955-00264</b></dt>
+<dd><p>For example, consider the following database schema: CREATE TABLE album( albumartist TEXT, albumname TEXT, albumcover BINARY, PRIMARY KEY(albumartist, albumname) ); CREATE TABLE song( songid INTEGER, songartist TEXT, songalbum TEXT, songname TEXT, FOREIGN KEY(songartist, songalbum) REFERENCES album(albumartist, albumname) ); In this system, each entry in the song table is required to map to an entry in the album table with the same combination of artist and album.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys11.test, matrix: <a href='matrix/foreignkeys.html#R-24676-09859-25258-06679-18327-03281-24955-00264'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-24676-09859-25258-06679-18327-03281-24955-00264'>detail</a>)</i></p></dd>
+
+<dt><b>R-24691-27369-29687-09464-65253-51469-13435-14358</b></dt>
+<dd><p>Memory to hold the error message string is managed internally. The application does not need to worry about freeing the result. However, the error string might be overwritten or deallocated by subsequent calls to other SQLite interface functions.
+<i>(source: <a href="c3ref/errcode.html">c3ref/errcode.html</a>, matrix: <a href='matrix/c3ref/errcode.html#R-24691-27369-29687-09464-65253-51469-13435-14358'>context</a>, <a href='matrix/matrix_derrcode.html#R-24691-27369-29687-09464-65253-51469-13435-14358'>detail</a>)</i></p></dd>
+
+<dt><b>R-24707-22256-10968-61514-58469-45624-50106-41306</b></dt>
+<dd><p>The estimatedRows value is an estimate of the number of rows that will be returned by the strategy.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-24707-22256-10968-61514-58469-45624-50106-41306'>context</a>, <a href='matrix/matrix_dindex_info.html#R-24707-22256-10968-61514-58469-45624-50106-41306'>detail</a>)</i></p></dd>
+
+<dt><b>R-24728-13230-17441-17828-27985-11598-34826-53003</b></dt>
+<dd><p>SQLite parses MATCH clauses (i.e. does not report a syntax error if you specify one), but does not enforce them.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys23.test, matrix: <a href='matrix/foreignkeys.html#R-24728-13230-17441-17828-27985-11598-34826-53003'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-24728-13230-17441-17828-27985-11598-34826-53003'>detail</a>)</i></p></dd>
+
+<dt><b>R-24731-45773-21654-50701-01955-60961-16210-17736</b></dt>
+<dd><p>The IS and IS NOT operators work like = and != except when one or both of the operands are NULL.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-24731-45773-21654-50701-01955-60961-16210-17736'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-24731-45773-21654-50701-01955-60961-16210-17736'>detail</a>)</i></p></dd>
+
+<dt><b>R-24738-46982-10847-07410-11065-35020-61549-58241</b></dt>
+<dd><p>Otherwise, it is invoked with two arguments only.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-24738-46982-10847-07410-11065-35020-61549-58241'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-24738-46982-10847-07410-11065-35020-61549-58241'>detail</a>)</i></p></dd>
+
+<dt><b>R-24770-07833-20413-40492-33395-44315-54642-50376</b></dt>
+<dd><p>The expression of a generated column may only reference constant literals and columns within the same row, and may only use scalar deterministic functions.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-24770-07833-20413-40492-33395-44315-54642-50376'>context</a>, <a href='matrix/matrix_dgencol.html#R-24770-07833-20413-40492-33395-44315-54642-50376'>detail</a>)</i></p></dd>
+
+<dt><b>R-24770-17719-20723-28193-15704-54316-24358-11027</b></dt>
+<dd><p>As with all SQL syntax, the case of the keywords does not matter. One can write "WITHOUT rowid" or "without rowid" or "WiThOuT rOwId" and it will mean the same thing.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-24770-17719-20723-28193-15704-54316-24358-11027'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-24770-17719-20723-28193-15704-54316-24358-11027'>detail</a>)</i></p></dd>
+
+<dt><b>R-24784-09209-65529-37322-41810-39114-37590-65280</b></dt>
+<dd><p>The authority may be omitted, may be blank, or may be "localhost". Any other authority results in an error.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-24784-09209-65529-37322-41810-39114-37590-65280'>context</a>, <a href='matrix/matrix_duri.html#R-24784-09209-65529-37322-41810-39114-37590-65280'>detail</a>)</i></p></dd>
+
+<dt><b>R-24843-55391-00331-31917-58094-58865-54184-39062</b></dt>
+<dd><p>It is permitted to register multiple implementations of the same functions with the same name but with either differing numbers of arguments or differing preferred text encodings.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc04.test, matrix: <a href='matrix/c3ref/create_function.html#R-24843-55391-00331-31917-58094-58865-54184-39062'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-24843-55391-00331-31917-58094-58865-54184-39062'>detail</a>)</i></p></dd>
+
+<dt><b>R-24874-01721-30373-30915-48096-44417-56853-33182</b></dt>
+<dd><p>If sqlite3_collation_needed16() is used, the names are passed as UTF-16 in machine native byte order.
+<i>(source: <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>, matrix: <a href='matrix/c3ref/collation_needed.html#R-24874-01721-30373-30915-48096-44417-56853-33182'>context</a>, <a href='matrix/matrix_dcollation_needed.html#R-24874-01721-30373-30915-48096-44417-56853-33182'>detail</a>)</i></p></dd>
+
+<dt><b>R-24896-34661-16790-51948-60772-09392-38798-62711</b></dt>
+<dd><p>The sqlite_stat4.tbl column holds name of the table that owns the index that the row describes
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-24896-34661-16790-51948-60772-09392-38798-62711'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-24896-34661-16790-51948-60772-09392-38798-62711'>detail</a>)</i></p></dd>
+
+<dt><b>R-24911-36108-02843-41555-24793-65003-42358-61703</b></dt>
+<dd><p>The GLOB operator is always case sensitive.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, checked-by: th3/cov1/pragma02.test, matrix: <a href='matrix/optoverview.html#R-24911-36108-02843-41555-24793-65003-42358-61703'>context</a>, <a href='matrix/matrix_doptoverview.html#R-24911-36108-02843-41555-24793-65003-42358-61703'>detail</a>)</i></p></dd>
+
+<dt><b>R-24943-34514-22714-26526-33619-31596-02812-18143</b></dt>
+<dd><p>The sum() and total() aggregate functions return the sum of all non-NULL values in the group.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-24943-34514-22714-26526-33619-31596-02812-18143'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-24943-34514-22714-26526-33619-31596-02812-18143'>detail</a>)</i></p></dd>
+
+<dt><b>R-24981-18755-32291-32034-18721-01348-44250-24952</b></dt>
+<dd><p>Format 12 might also be interpreted as a unix timestamp if it is immediately followed either the 'auto' or 'unixepoch' modifier.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-24981-18755-32291-32034-18721-01348-44250-24952'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-24981-18755-32291-32034-18721-01348-44250-24952'>detail</a>)</i></p></dd>
+
+<dt><b>R-24982-11525-35857-44633-64462-64682-47144-54575</b></dt>
+<dd><p>The SQLITE_CONFIG_SMALL_MALLOC option takes single argument of type int, interpreted as a boolean, which if true provides a hint to SQLite that it should avoid large memory allocations if possible.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-24982-11525-35857-44633-64462-64682-47144-54575'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-24982-11525-35857-44633-64462-64682-47144-54575'>detail</a>)</i></p></dd>
+
+<dt><b>R-24983-33491-21111-64156-17936-16093-21195-54073</b></dt>
+<dd><p>Because the function inputs are not necessarily known until run-time, the date/time functions will throw an exception if they encounter any of the non-deterministic features in a context where only deterministic functions are allowed.
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-24983-33491-21111-64156-17936-16093-21195-54073'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-24983-33491-21111-64156-17936-16093-21195-54073'>detail</a>)</i></p></dd>
+
+<dt><b>R-24984-42113-54448-54138-16961-63127-18743-03855</b></dt>
+<dd><p>Any callback set by a previous call to sqlite3_rollback_hook() for the same database connection is overridden.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-24984-42113-54448-54138-16961-63127-18743-03855'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-24984-42113-54448-54138-16961-63127-18743-03855'>detail</a>)</i></p></dd>
+
+<dt><b>R-25008-21688-65381-07984-00031-51738-33385-29636</b></dt>
+<dd><p>The size of a page is a power of two between 512 and 65536 inclusive.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-25008-21688-65381-07984-00031-51738-33385-29636'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-25008-21688-65381-07984-00031-51738-33385-29636'>detail</a>)</i></p></dd>
+
+<dt><b>R-25048-46581-04940-52749-02967-51891-39439-41238</b></dt>
+<dd><p>SQLite will never invoke xInit() more than once without an intervening call to xShutdown().
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: th3/th3pcache.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-25048-46581-04940-52749-02967-51891-39439-41238'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-25048-46581-04940-52749-02967-51891-39439-41238'>detail</a>)</i></p></dd>
+
+<dt><b>R-25063-23286-45841-01783-39001-22838-28482-44286</b></dt>
+<dd><p>The sqlite3_sourceid() function returns a pointer to a string constant whose value is the same as the SQLITE_SOURCE_ID C preprocessor macro. Except if SQLite is built using an edited copy of the amalgamation, then the last four characters of the hash might be different from SQLITE_SOURCE_ID.
+<i>(source: <a href="c3ref/libversion.html">c3ref/libversion.html</a>, checked-by: src/main.c, th3/th3main.c, matrix: <a href='matrix/c3ref/libversion.html#R-25063-23286-45841-01783-39001-22838-28482-44286'>context</a>, <a href='matrix/matrix_dlibversion.html#R-25063-23286-45841-01783-39001-22838-28482-44286'>detail</a>)</i></p></dd>
+
+<dt><b>R-25071-21202-61916-09187-06401-02826-31838-35119</b></dt>
+<dd><p>The "CROSS JOIN" join operator produces the same result as the "INNER JOIN", "JOIN" and "," operators
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, tcl/e_select2.test, matrix: <a href='matrix/lang_select.html#R-25071-21202-61916-09187-06401-02826-31838-35119'>context</a>, <a href='matrix/matrix_dlang_select.html#R-25071-21202-61916-09187-06401-02826-31838-35119'>detail</a>)</i></p></dd>
+
+<dt><b>R-25072-57278-41815-02342-40750-19788-27895-44607</b></dt>
+<dd><p>The argument to INTO can be a URI filename if URI filenames are enabled.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, matrix: <a href='matrix/lang_vacuum.html#R-25072-57278-41815-02342-40750-19788-27895-44607'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-25072-57278-41815-02342-40750-19788-27895-44607'>detail</a>)</i></p></dd>
+
+<dt><b>R-25104-48225-19091-14145-56675-46526-40431-27704</b></dt>
+<dd><p>PRAGMA table_list; PRAGMA schema.table_list; PRAGMA table_list(table-name);
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-25104-48225-19091-14145-56675-46526-40431-27704'>context</a>, <a href='matrix/matrix_dpragma.html#R-25104-48225-19091-14145-56675-46526-40431-27704'>detail</a>)</i></p></dd>
+
+<dt><b>R-25108-07802-40508-32376-19441-31217-21410-63803</b></dt>
+<dd><p>However, if there are pending write operations, the COMMIT command will fail with an error code SQLITE_BUSY.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-25108-07802-40508-32376-19441-31217-21410-63803'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-25108-07802-40508-32376-19441-31217-21410-63803'>detail</a>)</i></p></dd>
+
+<dt><b>R-25136-65062-60246-57323-36202-59774-22241-57010</b></dt>
+<dd><p>This option is used to enable or disable the enforcement of foreign key constraints.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: th3/cov1/main34.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-25136-65062-60246-57323-36202-59774-22241-57010'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-25136-65062-60246-57323-36202-59774-22241-57010'>detail</a>)</i></p></dd>
+
+<dt><b>R-25142-32967-13152-03974-64146-30247-48913-62281</b></dt>
+<dd><p>For conversions between TEXT and REAL storage classes, only the first 15 significant decimal digits of the number are preserved.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-25142-32967-13152-03974-64146-30247-48913-62281'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-25142-32967-13152-03974-64146-30247-48913-62281'>detail</a>)</i></p></dd>
+
+<dt><b>R-25149-16900-02037-62067-08314-01684-52893-04562</b></dt>
+<dd><p>The RETURNING clause may only reference the table being modified.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, matrix: <a href='matrix/lang_returning.html#R-25149-16900-02037-62067-08314-01684-52893-04562'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-25149-16900-02037-62067-08314-01684-52893-04562'>detail</a>)</i></p></dd>
+
+<dt><b>R-25149-22012-48563-28153-37839-65089-07651-08185</b></dt>
+<dd><p>The INSERT ... DEFAULT VALUES statement inserts a single new row into the named table.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-25149-22012-48563-28153-37839-65089-07651-08185'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-25149-22012-48563-28153-37839-65089-07651-08185'>detail</a>)</i></p></dd>
+
+<dt><b>R-25205-10214-27993-08782-38533-49821-04798-04951</b></dt>
+<dd><p>The sqlite3_str object is destroyed and the string it created is returned using the sqlite3_str_finish() interface.
+<i>(source: <a href="c3ref/str.html">c3ref/str.html</a>, matrix: <a href='matrix/c3ref/str.html#R-25205-10214-27993-08782-38533-49821-04798-04951'>context</a>, <a href='matrix/matrix_dstr.html#R-25205-10214-27993-08782-38533-49821-04798-04951'>detail</a>)</i></p></dd>
+
+<dt><b>R-25216-03908-32391-06837-09807-59608-58830-19572</b></dt>
+<dd><p>The term "b=6" does not match "b=3+3" or "b-6=0" or "b BETWEEN 6 AND 6".
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-25216-03908-32391-06837-09807-59608-58830-19572'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-25216-03908-32391-06837-09807-59608-58830-19572'>detail</a>)</i></p></dd>
+
+<dt><b>R-25288-28061-40828-54827-02140-23541-51097-39397</b></dt>
+<dd><p>If sqlite3_value object V was initialized using sqlite3_bind_pointer(S,I,P,X,D) or sqlite3_result_pointer(C,P,X,D) and if X and Y are strings that compare equal according to strcmp(X,Y), then sqlite3_value_pointer(V,Y) will return the pointer P.
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, checked-by: th3/cov1/carray01.test, matrix: <a href='matrix/c3ref/value_blob.html#R-25288-28061-40828-54827-02140-23541-51097-39397'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-25288-28061-40828-54827-02140-23541-51097-39397'>detail</a>)</i></p></dd>
+
+<dt><b>R-25343-19498-17466-42652-61214-37840-16481-55260</b></dt>
+<dd><p>It is not necessary for every column of an index to appear in a WHERE clause term in order for that index to be used.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-25343-19498-17466-42652-61214-37840-16481-55260'>context</a>, <a href='matrix/matrix_doptoverview.html#R-25343-19498-17466-42652-61214-37840-16481-55260'>detail</a>)</i></p></dd>
+
+<dt><b>R-25359-61571-30835-46993-61423-15847-19094-36045</b></dt>
+<dd><p>If the implicit DELETE FROM causes any deferred foreign key constraints to be violated, and the violations still exist when the transaction is committed, an error is returned at the time of commit.
+<i>(source: <a href="lang_droptable.html">lang_droptable.html</a>, checked-by: th3/cov1/fkey24.test, matrix: <a href='matrix/lang_droptable.html#R-25359-61571-30835-46993-61423-15847-19094-36045'>context</a>, <a href='matrix/matrix_dlang_droptable.html#R-25359-61571-30835-46993-61423-15847-19094-36045'>detail</a>)</i></p></dd>
+
+<dt><b>R-25361-16150-63678-45550-40472-51042-22441-52100</b></dt>
+<dd><p>This function is omitted from SQLite by default. It is only available if the SQLITE_SOUNDEX compile-time option is used when SQLite is built.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/cov1/func07.test, matrix: <a href='matrix/lang_corefunc.html#R-25361-16150-63678-45550-40472-51042-22441-52100'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-25361-16150-63678-45550-40472-51042-22441-52100'>detail</a>)</i></p></dd>
+
+<dt><b>R-25384-39337-58415-17102-37697-27977-14467-00416</b></dt>
+<dd><p>There is nothing stopping the user from creating a foreign key definition that refers to a parent table that does not exist, or to parent key columns that do not exist or are not collectively bound by a PRIMARY KEY or UNIQUE constraint.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys21.test, matrix: <a href='matrix/foreignkeys.html#R-25384-39337-58415-17102-37697-27977-14467-00416'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-25384-39337-58415-17102-37697-27977-14467-00416'>detail</a>)</i></p></dd>
+
+<dt><b>R-25451-61125-57795-23914-51441-34414-44666-54346</b></dt>
+<dd><p>The SQLITE_CONFIG_URI option takes a single argument of type int. If non-zero, then URI handling is globally enabled. If the parameter is zero, then URI handling is globally disabled.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-25451-61125-57795-23914-51441-34414-44666-54346'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-25451-61125-57795-23914-51441-34414-44666-54346'>detail</a>)</i></p></dd>
+
+<dt><b>R-25459-18529-03655-35597-46929-35137-47473-63058</b></dt>
+<dd><p>These routines return 0 if the statement is incomplete.
+<i>(source: <a href="c3ref/complete.html">c3ref/complete.html</a>, checked-by: th3/cov1/complete01.test, matrix: <a href='matrix/c3ref/complete.html#R-25459-18529-03655-35597-46929-35137-47473-63058'>context</a>, <a href='matrix/matrix_dcomplete.html#R-25459-18529-03655-35597-46929-35137-47473-63058'>detail</a>)</i></p></dd>
+
+<dt><b>R-25460-65232-16560-61859-43199-38232-53443-46120</b></dt>
+<dd><p>The sqlite3_test_control() interface is used to read out internal state of SQLite and to inject faults into SQLite for testing purposes.
+<i>(source: <a href="c3ref/test_control.html">c3ref/test_control.html</a>, checked-by: th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/test_control.html#R-25460-65232-16560-61859-43199-38232-53443-46120'>context</a>, <a href='matrix/matrix_dtest_control.html#R-25460-65232-16560-61859-43199-38232-53443-46120'>detail</a>)</i></p></dd>
+
+<dt><b>R-25473-20557-44472-04975-51987-58936-13072-57785</b></dt>
+<dd><p>The number of columns in a table is limited by the SQLITE_MAX_COLUMN compile-time parameter.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-25473-20557-44472-04975-51987-58936-13072-57785'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-25473-20557-44472-04975-51987-58936-13072-57785'>detail</a>)</i></p></dd>
+
+<dt><b>R-25540-36848-64613-55100-38595-19137-49959-42593</b></dt>
+<dd><p>So as not to open security holes in older applications that are unprepared to deal with extension loading, and as a means of disabling extension loading while evaluating user-entered SQL, the following API is provided to turn the sqlite3_load_extension() mechanism on and off.
+<i>(source: <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a>, matrix: <a href='matrix/c3ref/enable_load_extension.html#R-25540-36848-64613-55100-38595-19137-49959-42593'>context</a>, <a href='matrix/matrix_denable_load_extension.html#R-25540-36848-64613-55100-38595-19137-49959-42593'>detail</a>)</i></p></dd>
+
+<dt><b>R-25541-17189-03104-63416-46282-42879-07481-01224</b></dt>
+<dd><p>Furthermore, the temp_store_directory pragma always assumes that any string that this variable points to is held in memory obtained from sqlite3_malloc and the pragma may attempt to free that memory using sqlite3_free.
+<i>(source: <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>, matrix: <a href='matrix/c3ref/temp_directory.html#R-25541-17189-03104-63416-46282-42879-07481-01224'>context</a>, <a href='matrix/matrix_dtemp_directory.html#R-25541-17189-03104-63416-46282-42879-07481-01224'>detail</a>)</i></p></dd>
+
+<dt><b>R-25558-37487-19096-36063-17437-04044-36041-27526</b></dt>
+<dd><p>If the specified view cannot be found and the IF EXISTS clause is not present, it is an error.
+<i>(source: <a href="lang_dropview.html">lang_dropview.html</a>, checked-by: tcl/e_dropview.test, th3/cov1/build13.test, matrix: <a href='matrix/lang_dropview.html#R-25558-37487-19096-36063-17437-04044-36041-27526'>context</a>, <a href='matrix/matrix_dlang_dropview.html#R-25558-37487-19096-36063-17437-04044-36041-27526'>detail</a>)</i></p></dd>
+
+<dt><b>R-25583-11663-64337-14085-59741-00588-27469-12431</b></dt>
+<dd><p>Compute the last day of the current month. SELECT date('now','start of month','+1 month','-1 day');
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-25583-11663-64337-14085-59741-00588-27469-12431'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-25583-11663-64337-14085-59741-00588-27469-12431'>detail</a>)</i></p></dd>
+
+<dt><b>R-25587-45258-04258-19279-64153-15260-17086-46262</b></dt>
+<dd><p>Additional sqlite3_trace() callbacks might occur as each triggered subprogram is entered. The callbacks for triggers contain a UTF-8 SQL comment that identifies the trigger.
+<i>(source: <a href="c3ref/profile.html">c3ref/profile.html</a>, checked-by: th3/cov1/main16.test, matrix: <a href='matrix/c3ref/profile.html#R-25587-45258-04258-19279-64153-15260-17086-46262'>context</a>, <a href='matrix/matrix_dprofile.html#R-25587-45258-04258-19279-64153-15260-17086-46262'>detail</a>)</i></p></dd>
+
+<dt><b>R-25588-27181-18097-02154-44633-08776-21987-21638</b></dt>
+<dd><p>The EXISTS operator always evaluates to one of the integer values 0 and 1.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-25588-27181-18097-02154-44633-08776-21987-21638'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-25588-27181-18097-02154-44633-08776-21987-21638'>detail</a>)</i></p></dd>
+
+<dt><b>R-25613-37547-39472-02780-29297-59051-40019-17427</b></dt>
+<dd><p>Indexes are removed with the DROP INDEX command.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx01.test, matrix: <a href='matrix/lang_createindex.html#R-25613-37547-39472-02780-29297-59051-40019-17427'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-25613-37547-39472-02780-29297-59051-40019-17427'>detail</a>)</i></p></dd>
+
+<dt><b>R-25616-08788-18594-15704-08007-00569-12211-26573</b></dt>
+<dd><p>A SELECT statement used as either a scalar subquery or as the right-hand operand of an IN, NOT IN or EXISTS expression may contain references to columns in the outer query.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/select01.test, matrix: <a href='matrix/lang_expr.html#R-25616-08788-18594-15704-08007-00569-12211-26573'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-25616-08788-18594-15704-08007-00569-12211-26573'>detail</a>)</i></p></dd>
+
+<dt><b>R-25616-61116-19772-20982-08386-58484-18398-18419</b></dt>
+<dd><p>The database connection can be changed between full and incremental autovacuum mode at any time.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-25616-61116-19772-20982-08386-58484-18398-18419'>context</a>, <a href='matrix/matrix_dpragma.html#R-25616-61116-19772-20982-08386-58484-18398-18419'>detail</a>)</i></p></dd>
+
+<dt><b>R-25638-20415-36003-28189-21007-56161-18481-25600</b></dt>
+<dd><p>The sqlite3_mprintf() and sqlite3_vmprintf() routines write their results into memory obtained from sqlite3_malloc64().
+<i>(source: <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>, matrix: <a href='matrix/c3ref/mprintf.html#R-25638-20415-36003-28189-21007-56161-18481-25600'>context</a>, <a href='matrix/matrix_dmprintf.html#R-25638-20415-36003-28189-21007-56161-18481-25600'>detail</a>)</i></p></dd>
+
+<dt><b>R-25645-37767-35870-43075-30633-04117-48100-12426</b></dt>
+<dd><p>However, if the 4th parameter to sqlite3_create_function_v2() is OR-ed with SQLITE_DETERMINISTIC, then SQLite will treat that function as if it were deterministic.
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-25645-37767-35870-43075-30633-04117-48100-12426'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-25645-37767-35870-43075-30633-04117-48100-12426'>detail</a>)</i></p></dd>
+
+<dt><b>R-25654-38196-54382-29664-57733-52949-37784-40820</b></dt>
+<dd><p>All reads from and writes to the main database file begin at a page boundary and all writes are an integer number of pages in size.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-25654-38196-54382-29664-57733-52949-37784-40820'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-25654-38196-54382-29664-57733-52949-37784-40820'>detail</a>)</i></p></dd>
+
+<dt><b>R-25715-37072-58552-52856-29858-64366-26989-17165</b></dt>
+<dd><p>Memory allocation statistics are enabled by default unless SQLite is compiled with SQLITE_DEFAULT_MEMSTATUS=0 in which case memory allocation statistics are disabled by default.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/sqliteInt.h, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-25715-37072-58552-52856-29858-64366-26989-17165'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-25715-37072-58552-52856-29858-64366-26989-17165'>detail</a>)</i></p></dd>
+
+<dt><b>R-25722-54578-39151-48243-45997-39827-22901-27237</b></dt>
+<dd><p>sqlite3_realloc(X,N) returns a pointer to a memory allocation of at least N bytes in size or NULL if insufficient memory is available.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-25722-54578-39151-48243-45997-39827-22901-27237'>context</a>, <a href='matrix/matrix_dfree.html#R-25722-54578-39151-48243-45997-39827-22901-27237'>detail</a>)</i></p></dd>
+
+<dt><b>R-25726-27770-20459-03461-13607-13171-18925-23787</b></dt>
+<dd><p>SQLite will invoke the destructor function (if it is not NULL) when SQLite no longer needs the pClientData pointer.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-25726-27770-20459-03461-13607-13171-18925-23787'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-25726-27770-20459-03461-13607-13171-18925-23787'>detail</a>)</i></p></dd>
+
+<dt><b>R-25727-24709-18641-35581-28019-63513-51229-00924</b></dt>
+<dd><p>Each expression defines the value for a single column.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-25727-24709-18641-35581-28019-63513-51229-00924'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-25727-24709-18641-35581-28019-63513-51229-00924'>detail</a>)</i></p></dd>
+
+<dt><b>R-25787-28949-24920-53948-06133-34727-56080-32939</b></dt>
+<dd><p>The EXCEPT operator returns the subset of rows returned by the left SELECT that are not also returned by the right-hand SELECT.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-25787-28949-24920-53948-06133-34727-56080-32939'>context</a>, <a href='matrix/matrix_dlang_select.html#R-25787-28949-24920-53948-06133-34727-56080-32939'>detail</a>)</i></p></dd>
+
+<dt><b>R-25824-45489-43990-02774-35332-28137-18182-24527</b></dt>
+<dd><p>The D and N arguments to sqlite3_backup_init(D,N,S,M) are the database connection associated with the destination database and the database name, respectively.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup02.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-25824-45489-43990-02774-35332-28137-18182-24527'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-25824-45489-43990-02774-35332-28137-18182-24527'>detail</a>)</i></p></dd>
+
+<dt><b>R-25832-43294-06509-06689-56001-36083-00062-63837</b></dt>
+<dd><p>The presence of the "noskipscan" token on the sqlite_stat1.stat field of an index prevents that index from being used with the skip-scan optimization.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/cov1/where43.test, matrix: <a href='matrix/fileformat2.html#R-25832-43294-06509-06689-56001-36083-00062-63837'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-25832-43294-06509-06689-56001-36083-00062-63837'>detail</a>)</i></p></dd>
+
+<dt><b>R-25857-01867-51039-59358-11204-13788-02264-02528</b></dt>
+<dd><p>The values of these parameters (also called "host parameter names" or "SQL parameters") can be set using the sqlite3_bind_*() routines defined here.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-25857-01867-51039-59358-11204-13788-02264-02528'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-25857-01867-51039-59358-11204-13788-02264-02528'>detail</a>)</i></p></dd>
+
+<dt><b>R-25859-20124-54216-15977-54945-58471-03885-24371</b></dt>
+<dd><p>The only difference is that adding 'julianday' forces the DDDDDDDDD time-value format, and causes a NULL to be returned if any other time-value format is used.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-25859-20124-54216-15977-54945-58471-03885-24371'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-25859-20124-54216-15977-54945-58471-03885-24371'>detail</a>)</i></p></dd>
+
+<dt><b>R-25882-51550-16212-06454-16146-64979-21023-53530</b></dt>
+<dd><p>SQLITE_OPEN_MEMORY The database will be opened as an in-memory database. The database is named by the "filename" argument for the purposes of cache-sharing, if shared cache mode is enabled, but the "filename" is otherwise ignored.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-25882-51550-16212-06454-16146-64979-21023-53530'>context</a>, <a href='matrix/matrix_dopen.html#R-25882-51550-16212-06454-16146-64979-21023-53530'>detail</a>)</i></p></dd>
+
+<dt><b>R-25883-55063-43215-03328-35797-53686-57723-04298</b></dt>
+<dd><p>The expressions in the GROUP BY clause do not have to be expressions that appear in the result.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-25883-55063-43215-03328-35797-53686-57723-04298'>context</a>, <a href='matrix/matrix_dlang_select.html#R-25883-55063-43215-03328-35797-53686-57723-04298'>detail</a>)</i></p></dd>
+
+<dt><b>R-25894-51060-18040-53125-15120-62396-36354-30863</b></dt>
+<dd><p>Calling this routine with a null pointer (such as would be returned by a failed call to sqlite3_blob_open()) is a harmless no-op.
+<i>(source: <a href="c3ref/blob_close.html">c3ref/blob_close.html</a>, checked-by: tcl/e_blobclose.test, th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_close.html#R-25894-51060-18040-53125-15120-62396-36354-30863'>context</a>, <a href='matrix/matrix_dblob_close.html#R-25894-51060-18040-53125-15120-62396-36354-30863'>detail</a>)</i></p></dd>
+
+<dt><b>R-25950-00887-26391-00141-61376-60148-41906-53274</b></dt>
+<dd><p>Both the WHEN clause and the trigger actions may access elements of the row being inserted, deleted or updated using references of the form "NEW.column-name" and "OLD.column-name", where column-name is the name of a column from the table that the trigger is associated with.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-25950-00887-26391-00141-61376-60148-41906-53274'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-25950-00887-26391-00141-61376-60148-41906-53274'>detail</a>)</i></p></dd>
+
+<dt><b>R-25963-03527-53793-34841-03007-31919-23816-21204</b></dt>
+<dd><p>The xInit() method is passed a copy of the sqlite3_pcache_methods2.pArg value.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: th3/th3pcache.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-25963-03527-53793-34841-03007-31919-23816-21204'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-25963-03527-53793-34841-03007-31919-23816-21204'>detail</a>)</i></p></dd>
+
+<dt><b>R-26000-56589-64657-09406-12178-15033-38154-19492</b></dt>
+<dd><p>The xShutdown() method may be NULL.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: src/pcache.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-26000-56589-64657-09406-12178-15033-38154-19492'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-26000-56589-64657-09406-12178-15033-38154-19492'>detail</a>)</i></p></dd>
+
+<dt><b>R-26004-61026-09157-01640-51249-21614-51524-45534</b></dt>
+<dd><p>The sqlite3_db_name(D,N) interface returns a pointer to the schema name for the N-th database on database connection D, or a NULL pointer of N is out of range.
+<i>(source: <a href="c3ref/db_name.html">c3ref/db_name.html</a>, matrix: <a href='matrix/c3ref/db_name.html#R-26004-61026-09157-01640-51249-21614-51524-45534'>context</a>, <a href='matrix/matrix_ddb_name.html#R-26004-61026-09157-01640-51249-21614-51524-45534'>detail</a>)</i></p></dd>
+
+<dt><b>R-26018-54615-20076-23782-57324-62216-58815-28451</b></dt>
+<dd><p>In the "vX" interfaces, the prepared statement that is returned (the sqlite3_stmt object) contains a copy of the original SQL text.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare01.test, matrix: <a href='matrix/c3ref/prepare.html#R-26018-54615-20076-23782-57324-62216-58815-28451'>context</a>, <a href='matrix/matrix_dprepare.html#R-26018-54615-20076-23782-57324-62216-58815-28451'>detail</a>)</i></p></dd>
+
+<dt><b>R-26022-39063-15323-00044-24129-45502-60784-59294</b></dt>
+<dd><p>PRAGMA analysis_limit; PRAGMA analysis_limit = N;
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/analyze18.test, matrix: <a href='matrix/pragma.html#R-26022-39063-15323-00044-24129-45502-60784-59294'>context</a>, <a href='matrix/matrix_dpragma.html#R-26022-39063-15323-00044-24129-45502-60784-59294'>detail</a>)</i></p></dd>
+
+<dt><b>R-26030-41411-57646-19570-38371-36124-26436-49384</b></dt>
+<dd><p>The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-26030-41411-57646-19570-38371-36124-26436-49384'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-26030-41411-57646-19570-38371-36124-26436-49384'>detail</a>)</i></p></dd>
+
+<dt><b>R-26031-07851-20661-23903-48754-42738-42414-42677</b></dt>
+<dd><p>URIs are processed as UTF8 text.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-26031-07851-20661-23903-48754-42738-42414-42677'>context</a>, <a href='matrix/matrix_duri.html#R-26031-07851-20661-23903-48754-42738-42414-42677'>detail</a>)</i></p></dd>
+
+<dt><b>R-26078-30979-29806-34785-43846-23819-01793-57552</b></dt>
+<dd><p>The content of these tables is not updated as the database changes so after making significant changes it might be prudent to rerun ANALYZE.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-26078-30979-29806-34785-43846-23819-01793-57552'>context</a>, <a href='matrix/matrix_doptoverview.html#R-26078-30979-29806-34785-43846-23819-01793-57552'>detail</a>)</i></p></dd>
+
+<dt><b>R-26084-48949-64878-55281-48565-40359-59604-32431</b></dt>
+<dd><p>If there are multiple ATTACH-ed database files that are being modified as part of a transaction commit, then the autovacuum pages callback is invoked separately for each file.
+<i>(source: <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a>, checked-by: th3/cov1/autovac01.test, matrix: <a href='matrix/c3ref/autovacuum_pages.html#R-26084-48949-64878-55281-48565-40359-59604-32431'>context</a>, <a href='matrix/matrix_dautovacuum_pages.html#R-26084-48949-64878-55281-48565-40359-59604-32431'>detail</a>)</i></p></dd>
+
+<dt><b>R-26099-32169-00127-03094-09261-00142-37858-62464</b></dt>
+<dd><p>SELECT objname FROM demo_index2 WHERE contained_in(boundary, 35.37785, -80.77470) AND minX<=-80.77470 AND maxX>=-80.77470 AND minY<=35.37785 AND maxY>=35.37785;
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-26099-32169-00127-03094-09261-00142-37858-62464'>context</a>, <a href='matrix/matrix_drtree.html#R-26099-32169-00127-03094-09261-00142-37858-62464'>detail</a>)</i></p></dd>
+
+<dt><b>R-26102-39000-00300-53165-31110-34521-05669-39517</b></dt>
+<dd><p>The mxLevel entry in the sqlite3_rtree_query_info structure is the level value for the root of the R*Tree.
+<i>(source: <a href="rtree.html">rtree.html</a>, matrix: <a href='matrix/rtree.html#R-26102-39000-00300-53165-31110-34521-05669-39517'>context</a>, <a href='matrix/matrix_drtree.html#R-26102-39000-00300-53165-31110-34521-05669-39517'>detail</a>)</i></p></dd>
+
+<dt><b>R-26117-01852-15491-47779-25813-50210-15791-48499</b></dt>
+<dd><p>In this latter case, the integer at offset 64 is true for incremental_vacuum and false for auto_vacuum.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-26117-01852-15491-47779-25813-50210-15791-48499'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-26117-01852-15491-47779-25813-50210-15791-48499'>detail</a>)</i></p></dd>
+
+<dt><b>R-26128-01625-01942-61645-49803-53494-49149-48512</b></dt>
+<dd><p>Calls to sqlite3_close() and sqlite3_close_v2() return SQLITE_OK if the sqlite3 object is successfully destroyed and all associated resources are deallocated.
+<i>(source: <a href="c3ref/close.html">c3ref/close.html</a>, checked-by: th3/th3util.c, matrix: <a href='matrix/c3ref/close.html#R-26128-01625-01942-61645-49803-53494-49149-48512'>context</a>, <a href='matrix/matrix_dclose.html#R-26128-01625-01942-61645-49803-53494-49149-48512'>detail</a>)</i></p></dd>
+
+<dt><b>R-26131-19960-12825-50697-19032-51955-35203-04436</b></dt>
+<dd><p>Even though it stores values using integer, the rtree_i32 virtual table still uses floating point computations internally as part of the r-tree algorithm.
+<i>(source: <a href="rtree.html">rtree.html</a>, matrix: <a href='matrix/rtree.html#R-26131-19960-12825-50697-19032-51955-35203-04436'>context</a>, <a href='matrix/matrix_drtree.html#R-26131-19960-12825-50697-19032-51955-35203-04436'>detail</a>)</i></p></dd>
+
+<dt><b>R-26145-35631-18411-10408-27137-14285-36971-04977</b></dt>
+<dd><p>The sqlite3_errmsg() and sqlite3_errmsg16() return English-language text that describes the error, as either UTF-8 or UTF-16 respectively.
+<i>(source: <a href="c3ref/errcode.html">c3ref/errcode.html</a>, matrix: <a href='matrix/c3ref/errcode.html#R-26145-35631-18411-10408-27137-14285-36971-04977'>context</a>, <a href='matrix/matrix_derrcode.html#R-26145-35631-18411-10408-27137-14285-36971-04977'>detail</a>)</i></p></dd>
+
+<dt><b>R-26170-15376-11446-15770-61234-08203-15612-42127</b></dt>
+<dd><p>The sqlite3_str_appendchar(X,N,C) method appends N copies of the single-byte character C onto the end of sqlite3_str object X.
+<i>(source: <a href="c3ref/str_append.html">c3ref/str_append.html</a>, matrix: <a href='matrix/c3ref/str_append.html#R-26170-15376-11446-15770-61234-08203-15612-42127'>context</a>, <a href='matrix/matrix_dstr_append.html#R-26170-15376-11446-15770-61234-08203-15612-42127'>detail</a>)</i></p></dd>
+
+<dt><b>R-26171-42722-11458-03689-53861-19437-55507-39257</b></dt>
+<dd><p>If X is not NULL, then X(P) is invoked whenever the database connection closes or when the callback is overwritten by another invocation of sqlite3_autovacuum_pages().
+<i>(source: <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a>, checked-by: th3/cov1/autovac01.test, matrix: <a href='matrix/c3ref/autovacuum_pages.html#R-26171-42722-11458-03689-53861-19437-55507-39257'>context</a>, <a href='matrix/matrix_dautovacuum_pages.html#R-26171-42722-11458-03689-53861-19437-55507-39257'>detail</a>)</i></p></dd>
+
+<dt><b>R-26177-52471-27779-44415-45290-32639-49511-38944</b></dt>
+<dd><p>The first argument is an integer code for the specific parameter to measure.
+<i>(source: <a href="c3ref/status.html">c3ref/status.html</a>, matrix: <a href='matrix/c3ref/status.html#R-26177-52471-27779-44415-45290-32639-49511-38944'>context</a>, <a href='matrix/matrix_dstatus.html#R-26177-52471-27779-44415-45290-32639-49511-38944'>detail</a>)</i></p></dd>
+
+<dt><b>R-26188-08449-06969-05333-36262-60871-22176-39475</b></dt>
+<dd><p>If the SQLITE_FCNTL_PRAGMA file control returns SQLITE_OK, then the parser assumes that the VFS has handled the PRAGMA itself and the parser generates a no-op prepared statement if result string is NULL, or that returns a copy of the result string if the string is non-NULL.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, checked-by: tcl/multiplex4.test, th3/cov1/pragma24.test, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-26188-08449-06969-05333-36262-60871-22176-39475'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-26188-08449-06969-05333-36262-60871-22176-39475'>detail</a>)</i></p></dd>
+
+<dt><b>R-26228-33773-01538-19072-29962-47655-12853-04397</b></dt>
+<dd><p>The 4th argument to the sqlite3_exec() callback is an array of pointers to strings where each entry represents the name of corresponding result column as obtained from sqlite3_column_name().
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-26228-33773-01538-19072-29962-47655-12853-04397'>context</a>, <a href='matrix/matrix_dexec.html#R-26228-33773-01538-19072-29962-47655-12853-04397'>detail</a>)</i></p></dd>
+
+<dt><b>R-26234-58592-26686-64458-63937-04823-26518-58770</b></dt>
+<dd><p>Whether or not any conversions are attempted before the comparison takes place depends on the type affinity of the operands.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-26234-58592-26686-64458-63937-04823-26518-58770'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-26234-58592-26686-64458-63937-04823-26518-58770'>detail</a>)</i></p></dd>
+
+<dt><b>R-26245-27007-61091-63162-56268-13882-14164-49256</b></dt>
+<dd><p>Comments can begin anywhere whitespace can be found, including inside expressions that span multiple lines.
+<i>(source: <a href="lang_comment.html">lang_comment.html</a>, checked-by: th3/req1/comment01.test, matrix: <a href='matrix/lang_comment.html#R-26245-27007-61091-63162-56268-13882-14164-49256'>context</a>, <a href='matrix/matrix_dlang_comment.html#R-26245-27007-61091-63162-56268-13882-14164-49256'>detail</a>)</i></p></dd>
+
+<dt><b>R-26266-37313-29476-24640-23484-47513-24426-61925</b></dt>
+<dd><p>If the implicit DELETE FROM executed as part of a DROP TABLE command violates any immediate foreign key constraints, an error is returned and the table is not dropped.
+<i>(source: <a href="lang_droptable.html">lang_droptable.html</a>, checked-by: th3/cov1/fkey24.test, th3/req1/droptable01.test, matrix: <a href='matrix/lang_droptable.html#R-26266-37313-29476-24640-23484-47513-24426-61925'>context</a>, <a href='matrix/matrix_dlang_droptable.html#R-26266-37313-29476-24640-23484-47513-24426-61925'>detail</a>)</i></p></dd>
+
+<dt><b>R-26267-43414-63813-04870-32404-43287-64705-64465</b></dt>
+<dd><p>In the case of an update, this is the rowid after the update takes place.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-26267-43414-63813-04870-32404-43287-64705-64465'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-26267-43414-63813-04870-32404-43287-64705-64465'>detail</a>)</i></p></dd>
+
+<dt><b>R-26300-50198-46822-10316-25756-64179-25231-23016</b></dt>
+<dd><p>If a WHERE clause is supplied, then only those rows for which the WHERE clause boolean expression is true are deleted.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-26300-50198-46822-10316-25756-64179-25231-23016'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-26300-50198-46822-10316-25756-64179-25231-23016'>detail</a>)</i></p></dd>
+
+<dt><b>R-26304-43698-14397-16826-05465-17486-47171-40397</b></dt>
+<dd><p>The sqlite3_errstr() interface returns the English-language text that describes the result code, as UTF-8.
+<i>(source: <a href="c3ref/errcode.html">c3ref/errcode.html</a>, matrix: <a href='matrix/c3ref/errcode.html#R-26304-43698-14397-16826-05465-17486-47171-40397'>context</a>, <a href='matrix/matrix_derrcode.html#R-26304-43698-14397-16826-05465-17486-47171-40397'>detail</a>)</i></p></dd>
+
+<dt><b>R-26335-36429-33832-38639-19447-31976-61151-28783</b></dt>
+<dd><p>The second and third column are -1 if there is no write-ahead log, for example if this pragma is invoked on a database connection that is not in WAL mode.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma29.test, matrix: <a href='matrix/pragma.html#R-26335-36429-33832-38639-19447-31976-61151-28783'>context</a>, <a href='matrix/matrix_dpragma.html#R-26335-36429-33832-38639-19447-31976-61151-28783'>detail</a>)</i></p></dd>
+
+<dt><b>R-26343-45930-10507-06945-56497-65367-59680-35735</b></dt>
+<dd><p>This pragma invokes the sqlite3_soft_heap_limit64() interface with the argument N, if N is specified and is a non-negative integer.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/pragma.c, tcl/softheap1.test, matrix: <a href='matrix/pragma.html#R-26343-45930-10507-06945-56497-65367-59680-35735'>context</a>, <a href='matrix/matrix_dpragma.html#R-26343-45930-10507-06945-56497-65367-59680-35735'>detail</a>)</i></p></dd>
+
+<dt><b>R-26346-36443-14203-01237-59463-02061-43306-07214</b></dt>
+<dd><p>When casting a BLOB value to a REAL, the value is first converted to TEXT.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-26346-36443-14203-01237-59463-02061-43306-07214'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-26346-36443-14203-01237-59463-02061-43306-07214'>detail</a>)</i></p></dd>
+
+<dt><b>R-26377-49195-21869-49397-37126-00993-02015-27234</b></dt>
+<dd><p>If the DELETE statement also has an OFFSET clause, then it is similarly evaluated and cast to an integer value. Again, it is an error if the value cannot be losslessly converted to an integer.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-26377-49195-21869-49397-37126-00993-02015-27234'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-26377-49195-21869-49397-37126-00993-02015-27234'>detail</a>)</i></p></dd>
+
+<dt><b>R-26383-00685-00003-12709-20041-02640-63629-60960</b></dt>
+<dd><p>Note that the journal_mode for an in-memory database is either MEMORY or OFF and can not be changed to a different value.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma23.test, matrix: <a href='matrix/pragma.html#R-26383-00685-00003-12709-20041-02640-63629-60960'>context</a>, <a href='matrix/matrix_dpragma.html#R-26383-00685-00003-12709-20041-02640-63629-60960'>detail</a>)</i></p></dd>
+
+<dt><b>R-26383-51744-00561-00695-36382-45480-37936-10675</b></dt>
+<dd><p>If a CHECK constraint or foreign key constraint violation occurs, the REPLACE conflict resolution algorithm works like ABORT.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: src/insert.c, th3/req1/conflict02.test, matrix: <a href='matrix/lang_conflict.html#R-26383-51744-00561-00695-36382-45480-37936-10675'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-26383-51744-00561-00695-36382-45480-37936-10675'>detail</a>)</i></p></dd>
+
+<dt><b>R-26406-03647-33657-03652-13422-62298-62842-50282</b></dt>
+<dd><p>It is possible for the library compile-time C preprocessor symbol SQLITE_TEMP_STORE to override this pragma setting.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-26406-03647-33657-03652-13422-62298-62842-50282'>context</a>, <a href='matrix/matrix_dpragma.html#R-26406-03647-33657-03652-13422-62298-62842-50282'>detail</a>)</i></p></dd>
+
+<dt><b>R-26427-33659-32322-40327-33016-33915-32615-17849</b></dt>
+<dd><p>Other parameters record only the highwater mark and not the current value. For these latter parameters nothing is written into *pCurrent.
+<i>(source: <a href="c3ref/status.html">c3ref/status.html</a>, matrix: <a href='matrix/c3ref/status.html#R-26427-33659-32322-40327-33016-33915-32615-17849'>context</a>, <a href='matrix/matrix_dstatus.html#R-26427-33659-32322-40327-33016-33915-32615-17849'>detail</a>)</i></p></dd>
+
+<dt><b>R-26480-31567-01189-11331-40338-43119-64271-54165</b></dt>
+<dd><p>The key for each entry in the WITHOUT ROWID b-tree is a record composed of the columns of the PRIMARY KEY followed by all remaining columns of the table.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-26480-31567-01189-11331-40338-43119-64271-54165'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-26480-31567-01189-11331-40338-43119-64271-54165'>detail</a>)</i></p></dd>
+
+<dt><b>R-26490-64257-21643-35537-33187-49961-28588-55610</b></dt>
+<dd><p>But making modifications to this table will likely perturb the AUTOINCREMENT key generation algorithm.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-26490-64257-21643-35537-33187-49961-28588-55610'>context</a>, <a href='matrix/matrix_dautoinc.html#R-26490-64257-21643-35537-33187-49961-28588-55610'>detail</a>)</i></p></dd>
+
+<dt><b>R-26492-45204-29363-38379-65381-14832-32787-08398</b></dt>
+<dd><p>If P>X and K<=X then the first K bytes of P are stored on the btree page and the remaining P-K bytes are stored on overflow pages.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-26492-45204-29363-38379-65381-14832-32787-08398'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-26492-45204-29363-38379-65381-14832-32787-08398'>detail</a>)</i></p></dd>
+
+<dt><b>R-26501-17306-17113-63025-42217-43181-46541-32131</b></dt>
+<dd><p>If a table contains a user defined column named "rowid", "oid" or "_rowid_", then that name always refers the explicitly declared column and cannot be used to retrieve the integer rowid value.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-26501-17306-17113-63025-42217-43181-46541-32131'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-26501-17306-17113-63025-42217-43181-46541-32131'>detail</a>)</i></p></dd>
+
+<dt><b>R-26507-47431-65188-24932-00073-09728-32384-65254</b></dt>
+<dd><p>If the N parameter to sqlite3_realloc(X,N) is zero or negative then the behavior is exactly the same as calling sqlite3_free(X).
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: src/malloc.c, th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-26507-47431-65188-24932-00073-09728-32384-65254'>context</a>, <a href='matrix/matrix_dfree.html#R-26507-47431-65188-24932-00073-09728-32384-65254'>detail</a>)</i></p></dd>
+
+<dt><b>R-26512-02966-03467-49127-26389-10088-58457-04547</b></dt>
+<dd><p>When secure_delete is on, SQLite overwrites deleted content with zeros.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma20.test, matrix: <a href='matrix/pragma.html#R-26512-02966-03467-49127-26389-10088-58457-04547'>context</a>, <a href='matrix/matrix_dpragma.html#R-26512-02966-03467-49127-26389-10088-58457-04547'>detail</a>)</i></p></dd>
+
+<dt><b>R-26578-03501-48329-54809-40303-33325-20677-03881</b></dt>
+<dd><p>The load_extension() function raises an exception if the extension fails to load or initialize correctly.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-26578-03501-48329-54809-40303-33325-20677-03881'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-26578-03501-48329-54809-40303-33325-20677-03881'>detail</a>)</i></p></dd>
+
+<dt><b>R-26601-01119-55361-00031-26734-63731-65122-53650</b></dt>
+<dd><p>Subject to rules (11), (12) and (13), they may also contain ORDER BY, LIMIT and OFFSET clauses.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-26601-01119-55361-00031-26734-63731-65122-53650'>context</a>, <a href='matrix/matrix_doptoverview.html#R-26601-01119-55361-00031-26734-63731-65122-53650'>detail</a>)</i></p></dd>
+
+<dt><b>R-26602-05678-16907-15766-43643-13869-48465-09322</b></dt>
+<dd><p>The sqlite3_blob_read() and sqlite3_blob_write() interfaces can be used to read or write small subsections of the BLOB.
+<i>(source: <a href="c3ref/blob.html">c3ref/blob.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob.html#R-26602-05678-16907-15766-43643-13869-48465-09322'>context</a>, <a href='matrix/matrix_dblob.html#R-26602-05678-16907-15766-43643-13869-48465-09322'>detail</a>)</i></p></dd>
+
+<dt><b>R-26684-40576-09126-53282-12439-40003-41887-60526</b></dt>
+<dd><p>Each non-aggregate expression in the result-set is evaluated once for an arbitrarily selected row of the dataset.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-26684-40576-09126-53282-12439-40003-41887-60526'>context</a>, <a href='matrix/matrix_dlang_select.html#R-26684-40576-09126-53282-12439-40003-41887-60526'>detail</a>)</i></p></dd>
+
+<dt><b>R-26704-30334-42154-41889-16850-21412-27655-04243</b></dt>
+<dd><p>The sqlite3_config(SQLITE_CONFIG_PCACHE2, ...) interface can register an alternative page cache implementation by passing in an instance of the sqlite3_pcache_methods2 structure.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-26704-30334-42154-41889-16850-21412-27655-04243'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-26704-30334-42154-41889-16850-21412-27655-04243'>detail</a>)</i></p></dd>
+
+<dt><b>R-26801-64137-39079-48164-16524-44855-40563-04540</b></dt>
+<dd><p>If the xInit() method is NULL, then the built-in default page cache is used instead of the application defined page cache.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: src/pcache.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-26801-64137-39079-48164-16524-44855-40563-04540'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-26801-64137-39079-48164-16524-44855-40563-04540'>detail</a>)</i></p></dd>
+
+<dt><b>R-26810-60950-31083-35442-30714-31340-57644-05934</b></dt>
+<dd><p>If the authority section is present, then the path is always an absolute pathname.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-26810-60950-31083-35442-30714-31340-57644-05934'>context</a>, <a href='matrix/matrix_duri.html#R-26810-60950-31083-35442-30714-31340-57644-05934'>detail</a>)</i></p></dd>
+
+<dt><b>R-26835-10964-22323-42888-35777-38355-20607-28933</b></dt>
+<dd><p>The first argument (the third parameter to sqlite3_db_config() is a pointer to a memory buffer to use for lookaside memory.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: src/main.c, th3/req1/dbconfig01.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-26835-10964-22323-42888-35777-38355-20607-28933'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-26835-10964-22323-42888-35777-38355-20607-28933'>detail</a>)</i></p></dd>
+
+<dt><b>R-26835-34471-30842-38170-16771-41578-05053-31515</b></dt>
+<dd><p>SQL comments begin with two consecutive "-" characters (ASCII 0x2d) and extend up to and including the next newline character (ASCII 0x0a) or until the end of input, whichever comes first.
+<i>(source: <a href="lang_comment.html">lang_comment.html</a>, checked-by: th3/req1/comment01.test, matrix: <a href='matrix/lang_comment.html#R-26835-34471-30842-38170-16771-41578-05053-31515'>context</a>, <a href='matrix/matrix_dlang_comment.html#R-26835-34471-30842-38170-16771-41578-05053-31515'>detail</a>)</i></p></dd>
+
+<dt><b>R-26845-32976-14599-31607-31221-37786-17413-24156</b></dt>
+<dd><p>Value "rwc" is equivalent to setting both SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-26845-32976-14599-31607-31221-37786-17413-24156'>context</a>, <a href='matrix/matrix_dopen.html#R-26845-32976-14599-31607-31221-37786-17413-24156'>detail</a>)</i></p></dd>
+
+<dt><b>R-26888-26313-07515-35775-03599-15989-59200-07369</b></dt>
+<dd><p>The default setting is off, meaning that CHECK constraints are enforced by default.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma20.test, matrix: <a href='matrix/pragma.html#R-26888-26313-07515-35775-03599-15989-59200-07369'>context</a>, <a href='matrix/matrix_dpragma.html#R-26888-26313-07515-35775-03599-15989-59200-07369'>detail</a>)</i></p></dd>
+
+<dt><b>R-26894-41325-01569-09628-52380-05795-22160-61664</b></dt>
+<dd><p>If the TEXT value is not a well-formed integer or real literal, then the value is stored as TEXT.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-26894-41325-01569-09628-52380-05795-22160-61664'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-26894-41325-01569-09628-52380-05795-22160-61664'>detail</a>)</i></p></dd>
+
+<dt><b>R-26895-39918-47763-14814-48486-12298-50691-17007</b></dt>
+<dd><p>However (note-1) the julianday() and unixepoch() functions return numeric values. Their strftime() equivalents return strings that is the text representation of the corresponding number.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-26895-39918-47763-14814-48486-12298-50691-17007'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-26895-39918-47763-14814-48486-12298-50691-17007'>detail</a>)</i></p></dd>
+
+<dt><b>R-26900-09176-20658-03305-09602-45574-02965-13099</b></dt>
+<dd><p>A value of 13 (0x0d) means the page is a leaf table b-tree page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-26900-09176-20658-03305-09602-45574-02965-13099'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-26900-09176-20658-03305-09602-45574-02965-13099'>detail</a>)</i></p></dd>
+
+<dt><b>R-26917-59594-53851-11147-17067-15964-43582-37189</b></dt>
+<dd><p>For the INSERT and UPDATE commands, the keywords "ON CONFLICT" are replaced by "OR" so that the syntax reads more naturally.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict01.test, matrix: <a href='matrix/lang_conflict.html#R-26917-59594-53851-11147-17067-15964-43582-37189'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-26917-59594-53851-11147-17067-15964-43582-37189'>detail</a>)</i></p></dd>
+
+<dt><b>R-26947-19317-61341-19233-36872-20864-34826-22893</b></dt>
+<dd><p>If the statement is a COMMIT or occurs outside of an explicit transaction, then you can retry the statement.
+<i>(source: <a href="c3ref/step.html">c3ref/step.html</a>, matrix: <a href='matrix/c3ref/step.html#R-26947-19317-61341-19233-36872-20864-34826-22893'>context</a>, <a href='matrix/matrix_dstep.html#R-26947-19317-61341-19233-36872-20864-34826-22893'>detail</a>)</i></p></dd>
+
+<dt><b>R-26959-28969-15823-07414-35392-55670-52959-52462</b></dt>
+<dd><p>As of version 3.6.18, without running ANALYZE, SQLite will choose option 2.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-26959-28969-15823-07414-35392-55670-52959-52462'>context</a>, <a href='matrix/matrix_doptoverview.html#R-26959-28969-15823-07414-35392-55670-52959-52462'>detail</a>)</i></p></dd>
+
+<dt><b>R-26972-25540-17987-13345-11118-49972-58252-62199</b></dt>
+<dd><p>The sqlite3_bind_* routines return SQLITE_OK on success or an error code if anything goes wrong.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-26972-25540-17987-13345-11118-49972-58252-62199'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-26972-25540-17987-13345-11118-49972-58252-62199'>detail</a>)</i></p></dd>
+
+<dt><b>R-26993-43540-10992-37102-45404-55683-60247-30594</b></dt>
+<dd><p>Passing zero or a negative value as the nFrame parameter disables automatic checkpoints entirely.
+<i>(source: <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>, checked-by: tcl/e_walauto.test, matrix: <a href='matrix/c3ref/wal_autocheckpoint.html#R-26993-43540-10992-37102-45404-55683-60247-30594'>context</a>, <a href='matrix/matrix_dwal_autocheckpoint.html#R-26993-43540-10992-37102-45404-55683-60247-30594'>detail</a>)</i></p></dd>
+
+<dt><b>R-26999-04791-16827-31249-13986-61939-06074-63605</b></dt>
+<dd><p>The sqlite_sequence table is an internal table used to help implement AUTOINCREMENT.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-26999-04791-16827-31249-13986-61939-06074-63605'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-26999-04791-16827-31249-13986-61939-06074-63605'>detail</a>)</i></p></dd>
+
+<dt><b>R-27002-52307-56024-23951-62365-30891-30149-50327</b></dt>
+<dd><p>The DROP VIEW statement removes a view created by the CREATE VIEW statement.
+<i>(source: <a href="lang_dropview.html">lang_dropview.html</a>, checked-by: tcl/e_dropview.test, th3/cov1/build13.test, matrix: <a href='matrix/lang_dropview.html#R-27002-52307-56024-23951-62365-30891-30149-50327'>context</a>, <a href='matrix/matrix_dlang_dropview.html#R-27002-52307-56024-23951-62365-30891-30149-50327'>detail</a>)</i></p></dd>
+
+<dt><b>R-27061-43436-37550-51046-04512-17816-21037-16098</b></dt>
+<dd><p>The aConstraintUsage[].omit flag is an optimization hint. When the omit flag is left in its default setting of false, the constraint will always be checked separately in byte code. If the omit flag is change to true, then the constraint may or may not be checked in byte code. In other words, when the omit flag is true there is no guarantee that the constraint will not be checked again using byte code.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-27061-43436-37550-51046-04512-17816-21037-16098'>context</a>, <a href='matrix/matrix_dindex_info.html#R-27061-43436-37550-51046-04512-17816-21037-16098'>detail</a>)</i></p></dd>
+
+<dt><b>R-27108-11003-35381-33223-00139-25935-11742-39438</b></dt>
+<dd><p>The name of the database is "main" for the main database or "temp" for the TEMP database, or the name that appears after the AS keyword for databases that are added using the ATTACH SQL command.
+<i>(source: <a href="c3ref/file_control.html">c3ref/file_control.html</a>, matrix: <a href='matrix/c3ref/file_control.html#R-27108-11003-35381-33223-00139-25935-11742-39438'>context</a>, <a href='matrix/matrix_dfile_control.html#R-27108-11003-35381-33223-00139-25935-11742-39438'>detail</a>)</i></p></dd>
+
+<dt><b>R-27192-61982-03758-21332-41239-32834-09507-36997</b></dt>
+<dd><p>The third and fourth parameters to this function are the table and column name of the desired column, respectively.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-27192-61982-03758-21332-41239-32834-09507-36997'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-27192-61982-03758-21332-41239-32834-09507-36997'>detail</a>)</i></p></dd>
+
+<dt><b>R-27219-49057-63143-35616-48690-21583-47587-41101</b></dt>
+<dd><p>Unlike most SQL databases, SQLite does not restrict the type of data that may be inserted into a column based on the columns declared type.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-27219-49057-63143-35616-48690-21583-47587-41101'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-27219-49057-63143-35616-48690-21583-47587-41101'>detail</a>)</i></p></dd>
+
+<dt><b>R-27228-35217-15852-02871-02611-58321-58852-42304</b></dt>
+<dd><p>A scalar SQL function requires an implementation of the xFunc callback only; NULL pointers must be passed as the xStep and xFinal parameters.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc03.test, matrix: <a href='matrix/c3ref/create_function.html#R-27228-35217-15852-02871-02611-58321-58852-42304'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-27228-35217-15852-02871-02611-58321-58852-42304'>detail</a>)</i></p></dd>
+
+<dt><b>R-27233-06819-06438-56184-33294-63005-30894-40602</b></dt>
+<dd><p>If the TEXT value is a well-formed integer literal that is too large to fit in a 64-bit signed integer, it is converted to REAL.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-27233-06819-06438-56184-33294-63005-30894-40602'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-27233-06819-06438-56184-33294-63005-30894-40602'>detail</a>)</i></p></dd>
+
+<dt><b>R-27234-05761-29027-01683-12712-48347-06174-19243</b></dt>
+<dd><p>Parameter zDb is not the filename that contains the database, but rather the symbolic name of the database. For attached databases, this is the name that appears after the AS keyword in the ATTACH statement. For the main database file, the database name is "main". For TEMP tables, the database name is "temp".
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-27234-05761-29027-01683-12712-48347-06174-19243'>context</a>, <a href='matrix/matrix_dblob_open.html#R-27234-05761-29027-01683-12712-48347-06174-19243'>detail</a>)</i></p></dd>
+
+<dt><b>R-27261-09153-10518-18545-23647-39902-53687-11529</b></dt>
+<dd><p>All nodes other than the root have an entry in the %_parent shadow table that identifies the parent node.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq04.test, matrix: <a href='matrix/rtree.html#R-27261-09153-10518-18545-23647-39902-53687-11529'>context</a>, <a href='matrix/matrix_drtree.html#R-27261-09153-10518-18545-23647-39902-53687-11529'>detail</a>)</i></p></dd>
+
+<dt><b>R-27289-46867-00795-18230-38785-61782-07002-59582</b></dt>
+<dd><p>If N is negative, then the limit reverts to the default value determined by the most recent sqlite3_config(SQLITE_CONFIG_MMAP_SIZE), or to the compile time default determined by SQLITE_DEFAULT_MMAP_SIZE if not start-time limit has been set.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-27289-46867-00795-18230-38785-61782-07002-59582'>context</a>, <a href='matrix/matrix_dpragma.html#R-27289-46867-00795-18230-38785-61782-07002-59582'>detail</a>)</i></p></dd>
+
+<dt><b>R-27290-56511-04892-59250-62806-15127-45739-19284</b></dt>
+<dd><p>CREATE INDEX po_parent ON purchaseorder(parent_po) WHERE parent_po IS NOT NULL;
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-27290-56511-04892-59250-62806-15127-45739-19284'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-27290-56511-04892-59250-62806-15127-45739-19284'>detail</a>)</i></p></dd>
+
+<dt><b>R-27301-09658-03082-11591-62753-46064-11323-29821</b></dt>
+<dd><p>Otherwise, if the ORDER BY expression is a column or an alias of an expression that is a column, then the default collation sequence for the column is used.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-27301-09658-03082-11591-62753-46064-11323-29821'>context</a>, <a href='matrix/matrix_dlang_select.html#R-27301-09658-03082-11591-62753-46064-11323-29821'>detail</a>)</i></p></dd>
+
+<dt><b>R-27308-47543-55805-42661-24314-07406-38480-42723</b></dt>
+<dd><p>Query or change a limit on the approximate ANALYZE setting. This is the approximate number of rows examined in each index by the ANALYZE command.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/analyze18.test, matrix: <a href='matrix/pragma.html#R-27308-47543-55805-42661-24314-07406-38480-42723'>context</a>, <a href='matrix/matrix_dpragma.html#R-27308-47543-55805-42661-24314-07406-38480-42723'>detail</a>)</i></p></dd>
+
+<dt><b>R-27327-54431-40312-06060-63431-19500-57112-52669</b></dt>
+<dd><p>The entry point is zProc.
+<i>(source: <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>, matrix: <a href='matrix/c3ref/load_extension.html#R-27327-54431-40312-06060-63431-19500-57112-52669'>context</a>, <a href='matrix/matrix_dload_extension.html#R-27327-54431-40312-06060-63431-19500-57112-52669'>detail</a>)</i></p></dd>
+
+<dt><b>R-27363-63308-55807-24434-61973-58824-33773-60814</b></dt>
+<dd><p>If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() routine returns the number of bytes in that BLOB or string.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-27363-63308-55807-24434-61973-58824-33773-60814'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-27363-63308-55807-24434-61973-58824-33773-60814'>detail</a>)</i></p></dd>
+
+<dt><b>R-27365-32065-31789-31471-31645-57630-15850-26496</b></dt>
+<dd><p>CHECK constraints work the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/cov1/check01.test, th3/cov1/check02.test, matrix: <a href='matrix/stricttables.html#R-27365-32065-31789-31471-31645-57630-15850-26496'>context</a>, <a href='matrix/matrix_dstricttables.html#R-27365-32065-31789-31471-31645-57630-15850-26496'>detail</a>)</i></p></dd>
+
+<dt><b>R-27380-17544-22852-64378-45230-22316-25696-47821</b></dt>
+<dd><p>All schemas are optimized in the first two forms, and only the specified schema is optimized in the latter two.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-27380-17544-22852-64378-45230-22316-25696-47821'>context</a>, <a href='matrix/matrix_dpragma.html#R-27380-17544-22852-64378-45230-22316-25696-47821'>detail</a>)</i></p></dd>
+
+<dt><b>R-27383-10246-01655-25271-51755-59417-27078-62241</b></dt>
+<dd><p>An ON UPDATE action is only taken if the values of the parent key are modified so that the new parent key values are not equal to the old.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys20.test, matrix: <a href='matrix/foreignkeys.html#R-27383-10246-01655-25271-51755-59417-27078-62241'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-27383-10246-01655-25271-51755-59417-27078-62241'>detail</a>)</i></p></dd>
+
+<dt><b>R-27438-53558-39373-64011-10542-64778-48166-54900</b></dt>
+<dd><p>Each column of the subquery has the collation sequence and affinity of the corresponding expression in the subquery statement.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select2.test, matrix: <a href='matrix/lang_select.html#R-27438-53558-39373-64011-10542-64778-48166-54900'>context</a>, <a href='matrix/matrix_dlang_select.html#R-27438-53558-39373-64011-10542-64778-48166-54900'>detail</a>)</i></p></dd>
+
+<dt><b>R-27458-04043-31882-50848-08148-11623-61104-53512</b></dt>
+<dd><p>URI hexadecimal escape sequences (%HH) are supported within the path and query components of a URI.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-27458-04043-31882-50848-08148-11623-61104-53512'>context</a>, <a href='matrix/matrix_dopen.html#R-27458-04043-31882-50848-08148-11623-61104-53512'>detail</a>)</i></p></dd>
+
+<dt><b>R-27461-16942-46149-61363-05307-36708-49016-10103</b></dt>
+<dd><p>The TEMP database has a default suggested cache size of 0 pages.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma09.test, matrix: <a href='matrix/pragma.html#R-27461-16942-46149-61363-05307-36708-49016-10103'>context</a>, <a href='matrix/matrix_dpragma.html#R-27461-16942-46149-61363-05307-36708-49016-10103'>detail</a>)</i></p></dd>
+
+<dt><b>R-27472-62612-19629-13155-08759-40565-10817-64469</b></dt>
+<dd><p>But WITHOUT ROWID tables do follow the standard and will throw an error on any attempt to insert a NULL into a PRIMARY KEY column.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-27472-62612-19629-13155-08759-40565-10817-64469'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-27472-62612-19629-13155-08759-40565-10817-64469'>detail</a>)</i></p></dd>
+
+<dt><b>R-27484-01467-40660-08782-16756-57898-53117-01697</b></dt>
+<dd><p>For example, CREATE TABLE parent(a PRIMARY KEY, b UNIQUE, c, d, e, f); CREATE UNIQUE INDEX i1 ON parent(c, d); CREATE INDEX i2 ON parent(e); CREATE UNIQUE INDEX i3 ON parent(f COLLATE nocase); CREATE TABLE child1(f, g REFERENCES parent(a)); -- Ok CREATE TABLE child2(h, i REFERENCES parent(b)); -- Ok CREATE TABLE child3(j, k, FOREIGN KEY(j, k) REFERENCES parent(c, d)); -- Ok CREATE TABLE child4(l, m REFERENCES parent(e)); -- Error! CREATE TABLE child5(n, o REFERENCES parent(f)); -- Error! CREATE TABLE child6(p, q, FOREIGN KEY(p, q) REFERENCES parent(b, c)); -- Error! CREATE TABLE child7(r REFERENCES parent(c)); -- Error! The foreign key constraints created as part of tables child1, child2 and child3 are all fine.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-27484-01467-40660-08782-16756-57898-53117-01697'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-27484-01467-40660-08782-16756-57898-53117-01697'>detail</a>)</i></p></dd>
+
+<dt><b>R-27484-38990-39416-37657-02655-32272-61477-41469</b></dt>
+<dd><p>Reads are also usually an integer number of pages in size, with the one exception that when the database is first opened, the first 100 bytes of the database file (the database file header) are read as a sub-page size unit.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-27484-38990-39416-37657-02655-32272-61477-41469'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-27484-38990-39416-37657-02655-32272-61477-41469'>detail</a>)</i></p></dd>
+
+<dt><b>R-27525-15031-55320-08912-51889-58390-12207-18026</b></dt>
+<dd><p>The column on the left side of the GLOB operator must always use the built-in BINARY collating sequence or no attempt will be made to optimize that operator with indexes.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-27525-15031-55320-08912-51889-58390-12207-18026'>context</a>, <a href='matrix/matrix_doptoverview.html#R-27525-15031-55320-08912-51889-58390-12207-18026'>detail</a>)</i></p></dd>
+
+<dt><b>R-27542-08072-33902-06053-42391-63696-60417-63522</b></dt>
+<dd><p>The sqlite3_set_auxdata(C,N,P,X) interface saves P as metadata for the N-th argument of the application-defined function.
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-27542-08072-33902-06053-42391-63696-60417-63522'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-27542-08072-33902-06053-42391-63696-60417-63522'>detail</a>)</i></p></dd>
+
+<dt><b>R-27549-59611-14621-06209-14436-33110-11201-06265</b></dt>
+<dd><p>The instr(X,Y) function finds the first occurrence of string Y within string X and returns the number of prior characters plus 1, or 0 if Y is nowhere found within X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/instr.test, matrix: <a href='matrix/lang_corefunc.html#R-27549-59611-14621-06209-14436-33110-11201-06265'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-27549-59611-14621-06209-14436-33110-11201-06265'>detail</a>)</i></p></dd>
+
+<dt><b>R-27599-07502-21530-13120-63753-37571-15799-15475</b></dt>
+<dd><p>The callback function registered by sqlite3_trace() is invoked at various times when an SQL statement is being run by sqlite3_step().
+<i>(source: <a href="c3ref/profile.html">c3ref/profile.html</a>, checked-by: th3/cov1/main16.test, matrix: <a href='matrix/c3ref/profile.html#R-27599-07502-21530-13120-63753-37571-15799-15475'>context</a>, <a href='matrix/matrix_dprofile.html#R-27599-07502-21530-13120-63753-37571-15799-15475'>detail</a>)</i></p></dd>
+
+<dt><b>R-27632-24205-25477-34441-62508-04163-16390-61608</b></dt>
+<dd><p>URI filename interpretation is enabled if the SQLITE_OPEN_URI flag is set in the third argument to sqlite3_open_v2(), or if it has been enabled globally using the SQLITE_CONFIG_URI option with the sqlite3_config() method or by the SQLITE_USE_URI compile-time option.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-27632-24205-25477-34441-62508-04163-16390-61608'>context</a>, <a href='matrix/matrix_dopen.html#R-27632-24205-25477-34441-62508-04163-16390-61608'>detail</a>)</i></p></dd>
+
+<dt><b>R-27649-21314-13870-57957-53735-15830-08405-07126</b></dt>
+<dd><p>However a left outer join is neither commutative nor associative and hence will not be reordered.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-27649-21314-13870-57957-53735-15830-08405-07126'>context</a>, <a href='matrix/matrix_doptoverview.html#R-27649-21314-13870-57957-53735-15830-08405-07126'>detail</a>)</i></p></dd>
+
+<dt><b>R-27653-00078-33413-45845-06007-29371-61376-52679</b></dt>
+<dd><p>Within an xUpdate method, any value for which sqlite3_value_nochange(X) is true will in all other respects appear to be a NULL value.
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, matrix: <a href='matrix/c3ref/value_blob.html#R-27653-00078-33413-45845-06007-29371-61376-52679'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-27653-00078-33413-45845-06007-29371-61376-52679'>detail</a>)</i></p></dd>
+
+<dt><b>R-27690-36184-48459-32575-13610-54533-11397-57376</b></dt>
+<dd><p>The sqlite3_int64 variable pointed to by the V parameter will be set to the total number of times that the X-th loop has run.
+<i>(source: <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a>, checked-by: th3/cov1/status02.test, matrix: <a href='matrix/c3ref/c_scanstat_est.html#R-27690-36184-48459-32575-13610-54533-11397-57376'>context</a>, <a href='matrix/matrix_dc_scanstat_est.html#R-27690-36184-48459-32575-13610-54533-11397-57376'>detail</a>)</i></p></dd>
+
+<dt><b>R-27702-51733-15398-16850-47606-12840-18480-45806</b></dt>
+<dd><p>New VFSes are registered with sqlite3_vfs_register().
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-27702-51733-15398-16850-47606-12840-18480-45806'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-27702-51733-15398-16850-47606-12840-18480-45806'>detail</a>)</i></p></dd>
+
+<dt><b>R-27726-60934-44670-59608-21152-24326-11375-20798</b></dt>
+<dd><p>The "PRAGMA data_version" command provides an indication that the database file has been modified.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma3.test, th3/cov1/pragma26.test, matrix: <a href='matrix/pragma.html#R-27726-60934-44670-59608-21152-24326-11375-20798'>context</a>, <a href='matrix/matrix_dpragma.html#R-27726-60934-44670-59608-21152-24326-11375-20798'>detail</a>)</i></p></dd>
+
+<dt><b>R-27741-36039-35312-26646-43562-16753-08652-02657</b></dt>
+<dd><p>The remaining seven methods defined by this structure (xMutexAlloc, xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and xMutexNotheld) implement the following interfaces (respectively): sqlite3_mutex_alloc() sqlite3_mutex_free() sqlite3_mutex_enter() sqlite3_mutex_try() sqlite3_mutex_leave() sqlite3_mutex_held() sqlite3_mutex_notheld()
+<i>(source: <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>, matrix: <a href='matrix/c3ref/mutex_methods.html#R-27741-36039-35312-26646-43562-16753-08652-02657'>context</a>, <a href='matrix/matrix_dmutex_methods.html#R-27741-36039-35312-26646-43562-16753-08652-02657'>detail</a>)</i></p></dd>
+
+<dt><b>R-27753-05999-58187-16156-08992-28399-17856-50930</b></dt>
+<dd><p>The 5th parameter to the authorizer callback is the name of the database ("main", "temp", etc.) if applicable.
+<i>(source: <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a>, checked-by: th3/cov1/auth03.test, matrix: <a href='matrix/c3ref/c_alter_table.html#R-27753-05999-58187-16156-08992-28399-17856-50930'>context</a>, <a href='matrix/matrix_dc_alter_table.html#R-27753-05999-58187-16156-08992-28399-17856-50930'>detail</a>)</i></p></dd>
+
+<dt><b>R-27775-64721-40407-04494-31964-21217-54345-17508</b></dt>
+<dd><p>Both of these limits can be lowered at runtime using the sqlite3_limit() C/C++ interface.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-27775-64721-40407-04494-31964-21217-54345-17508'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-27775-64721-40407-04494-31964-21217-54345-17508'>detail</a>)</i></p></dd>
+
+<dt><b>R-27800-48033-09479-04735-22303-21367-59255-07249</b></dt>
+<dd><p>For the index above and WHERE clause like this: ... WHERE a=5 AND b IN (1,2,3) AND d='hello' Only columns a and b of the index would be usable. The d column would not be usable because column c is not constrained and there can be no gaps in the set of columns that usable by the index.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-27800-48033-09479-04735-22303-21367-59255-07249'>context</a>, <a href='matrix/matrix_doptoverview.html#R-27800-48033-09479-04735-22303-21367-59255-07249'>detail</a>)</i></p></dd>
+
+<dt><b>R-27806-26076-28846-24074-00653-42186-57572-51475</b></dt>
+<dd><p>The handler for an SQLITE_FCNTL_PRAGMA file control can optionally make the first element of the char** argument point to a string obtained from sqlite3_mprintf() or the equivalent and that string will become the result of the pragma or the error message if the pragma fails.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, checked-by: src/test_multiplex.c, th3/cov1/pragma24.test, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-27806-26076-28846-24074-00653-42186-57572-51475'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-27806-26076-28846-24074-00653-42186-57572-51475'>detail</a>)</i></p></dd>
+
+<dt><b>R-27809-56550-37281-65484-19482-39813-11020-02299</b></dt>
+<dd><p>The VACUUM command works by copying the contents of the database into a temporary database file and then overwriting the original with the contents of the temporary file.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, matrix: <a href='matrix/lang_vacuum.html#R-27809-56550-37281-65484-19482-39813-11020-02299'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-27809-56550-37281-65484-19482-39813-11020-02299'>detail</a>)</i></p></dd>
+
+<dt><b>R-27819-43026-21380-16418-25214-30821-40612-27368</b></dt>
+<dd><p>The _database_ routines return the database name, the _table_ routines return the table name, and the origin_ routines return the column name.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-27819-43026-21380-16418-25214-30821-40612-27368'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-27819-43026-21380-16418-25214-30821-40612-27368'>detail</a>)</i></p></dd>
+
+<dt><b>R-27831-00579-12114-42310-13784-00983-37340-32180</b></dt>
+<dd><p>NOT NULL is enforced on every column of the PRIMARY KEY in a WITHOUT ROWID table.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-27831-00579-12114-42310-13784-00983-37340-32180'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-27831-00579-12114-42310-13784-00983-37340-32180'>detail</a>)</i></p></dd>
+
+<dt><b>R-27847-27229-42495-29063-58716-22268-05238-18530</b></dt>
+<dd><p>The first argument is the database connection object to be interrogated.
+<i>(source: <a href="c3ref/db_status.html">c3ref/db_status.html</a>, checked-by: th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/db_status.html#R-27847-27229-42495-29063-58716-22268-05238-18530'>context</a>, <a href='matrix/matrix_ddb_status.html#R-27847-27229-42495-29063-58716-22268-05238-18530'>detail</a>)</i></p></dd>
+
+<dt><b>R-27875-27272-27361-08539-07716-12839-63715-05434</b></dt>
+<dd><p>The implied type conversion of mathematical operands is slightly different from CAST to NUMERIC in that string and BLOB values that look like real numbers but have no fractional part are kept as REAL instead of being converted into INTEGER as they would be for CAST to NUMERIC.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_06.test, matrix: <a href='matrix/datatype3.html#R-27875-27272-27361-08539-07716-12839-63715-05434'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-27875-27272-27361-08539-07716-12839-63715-05434'>detail</a>)</i></p></dd>
+
+<dt><b>R-27882-15425-11851-57208-29860-19997-13242-33591</b></dt>
+<dd><p>This option is used to enable or disable the sqlite3_load_extension() interface independently of the load_extension() SQL function.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-27882-15425-11851-57208-29860-19997-13242-33591'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-27882-15425-11851-57208-29860-19997-13242-33591'>detail</a>)</i></p></dd>
+
+<dt><b>R-27896-13480-56358-14836-45881-39569-16238-21022</b></dt>
+<dd><p>The sqlite3_result_null() interface sets the return value of the application-defined function to be NULL.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-27896-13480-56358-14836-45881-39569-16238-21022'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-27896-13480-56358-14836-45881-39569-16238-21022'>detail</a>)</i></p></dd>
+
+<dt><b>R-27910-63456-49633-56474-25927-30250-35983-46521</b></dt>
+<dd><p>If an SQL operation is very nearly finished at the time when sqlite3_interrupt() is called, then it might not have an opportunity to be interrupted and might continue to completion.
+<i>(source: <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>, matrix: <a href='matrix/c3ref/interrupt.html#R-27910-63456-49633-56474-25927-30250-35983-46521'>context</a>, <a href='matrix/matrix_dinterrupt.html#R-27910-63456-49633-56474-25927-30250-35983-46521'>detail</a>)</i></p></dd>
+
+<dt><b>R-27916-61221-17546-26882-05334-30041-14192-36305</b></dt>
+<dd><p>the affinity of a column is determined by the declared type of the column, according to the following rules in the order shown:
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-27916-61221-17546-26882-05334-30041-14192-36305'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-27916-61221-17546-26882-05334-30041-14192-36305'>detail</a>)</i></p></dd>
+
+<dt><b>R-27925-06263-58551-32265-51230-19990-38380-59040</b></dt>
+<dd><p>SQLite strives to keep heap memory utilization below the soft heap limit by reducing the number of pages held in the page cache as heap memory usages approaches the limit.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, checked-by: th3/req1/softheaplimit02.test, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-27925-06263-58551-32265-51230-19990-38380-59040'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-27925-06263-58551-32265-51230-19990-38380-59040'>detail</a>)</i></p></dd>
+
+<dt><b>R-27935-58314-00156-50891-26988-61472-07043-33985</b></dt>
+<dd><p>Any prior cache entry associated with newKey is guaranteed not to be pinned.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-27935-58314-00156-50891-26988-61472-07043-33985'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-27935-58314-00156-50891-26988-61472-07043-33985'>detail</a>)</i></p></dd>
+
+<dt><b>R-27941-57764-10424-18721-07448-14003-34159-15666</b></dt>
+<dd><p>The sqlite3_rollback_hook() interface registers a callback function to be invoked whenever a transaction is rolled back.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-27941-57764-10424-18721-07448-14003-34159-15666'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-27941-57764-10424-18721-07448-14003-34159-15666'>detail</a>)</i></p></dd>
+
+<dt><b>R-27945-10199-33337-38453-50117-26077-19774-25797</b></dt>
+<dd><p>Each ordinary SQL table in the database schema is represented on-disk by a table b-tree.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-27945-10199-33337-38453-50117-26077-19774-25797'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-27945-10199-33337-38453-50117-26077-19774-25797'>detail</a>)</i></p></dd>
+
+<dt><b>R-27966-31616-60182-10304-08590-16090-08574-57683</b></dt>
+<dd><p>An attempt to create a WITHOUT ROWID table without a PRIMARY KEY results in an error.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-27966-31616-60182-10304-08590-16090-08574-57683'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-27966-31616-60182-10304-08590-16090-08574-57683'>detail</a>)</i></p></dd>
+
+<dt><b>R-27985-03553-20917-04804-06476-41235-27520-21131</b></dt>
+<dd><p>These interfaces are used to retrieve runtime status information about the performance of SQLite, and optionally to reset various highwater marks.
+<i>(source: <a href="c3ref/status.html">c3ref/status.html</a>, matrix: <a href='matrix/c3ref/status.html#R-27985-03553-20917-04804-06476-41235-27520-21131'>context</a>, <a href='matrix/matrix_dstatus.html#R-27985-03553-20917-04804-06476-41235-27520-21131'>detail</a>)</i></p></dd>
+
+<dt><b>R-27988-54257-37832-50021-60393-63759-63179-56137</b></dt>
+<dd><p>The RETURNING clause is not supported for triggers.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, matrix: <a href='matrix/lang_delete.html#R-27988-54257-37832-50021-60393-63759-63179-56137'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-27988-54257-37832-50021-60393-63759-63179-56137'>detail</a>)</i></p></dd>
+
+<dt><b>R-27994-60376-08852-47971-54191-53637-09431-08610</b></dt>
+<dd><p>The same arbitrarily selected row is used for each non-aggregate expression.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-27994-60376-08852-47971-54191-53637-09431-08610'>context</a>, <a href='matrix/matrix_dlang_select.html#R-27994-60376-08852-47971-54191-53637-09431-08610'>detail</a>)</i></p></dd>
+
+<dt><b>R-28051-48608-28159-47201-29527-20252-33499-18741</b></dt>
+<dd><p>If xGeom returns anything other than SQLITE_OK, then the r-tree query will abort with an error.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-28051-48608-28159-47201-29527-20252-33499-18741'>context</a>, <a href='matrix/matrix_drtree.html#R-28051-48608-28159-47201-29527-20252-33499-18741'>detail</a>)</i></p></dd>
+
+<dt><b>R-28060-16686-02484-25378-20168-65175-45888-14189</b></dt>
+<dd><p>So, for example, if sqlite3_result_text16le() is invoked with text that begins with bytes 0xfe, 0xff (a big-endian byte-order mark) then the first two bytes of input are skipped and the remaining input is interpreted as UTF16BE text.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, matrix: <a href='matrix/c3ref/result_blob.html#R-28060-16686-02484-25378-20168-65175-45888-14189'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-28060-16686-02484-25378-20168-65175-45888-14189'>detail</a>)</i></p></dd>
+
+<dt><b>R-28170-10886-01228-38547-37735-16350-02783-15797</b></dt>
+<dd><p>To make an existing VFS into the default VFS, register it again with the makeDflt flag set.
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-28170-10886-01228-38547-37735-16350-02783-15797'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-28170-10886-01228-38547-37735-16350-02783-15797'>detail</a>)</i></p></dd>
+
+<dt><b>R-28176-28813-25399-58317-42934-47980-64589-03329</b></dt>
+<dd><p>The xGeom callback always does a depth-first search of the r-tree.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, matrix: <a href='matrix/rtree.html#R-28176-28813-25399-58317-42934-47980-64589-03329'>context</a>, <a href='matrix/matrix_drtree.html#R-28176-28813-25399-58317-42934-47980-64589-03329'>detail</a>)</i></p></dd>
+
+<dt><b>R-28183-48984-04569-19175-13455-19458-08289-27795</b></dt>
+<dd><p>If the callback returns non-zero, then another attempt is made to access the database and the cycle repeats.
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-28183-48984-04569-19175-13455-19458-08289-27795'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-28183-48984-04569-19175-13455-19458-08289-27795'>detail</a>)</i></p></dd>
+
+<dt><b>R-28198-38283-36055-63639-34430-05979-02434-46737</b></dt>
+<dd><p>sqlite> CREATE INDEX i4 ON t2(c); sqlite> EXPLAIN QUERY PLAN SELECT c, d FROM t2 ORDER BY c; QUERY PLAN `--SCAN t2 USING INDEX i4
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-28198-38283-36055-63639-34430-05979-02434-46737'>context</a>, <a href='matrix/matrix_deqp.html#R-28198-38283-36055-63639-34430-05979-02434-46737'>detail</a>)</i></p></dd>
+
+<dt><b>R-28207-40885-37612-34994-37916-57388-29422-16350</b></dt>
+<dd><p>The last argument is a pointer into which the callback result should be written.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/test_rtreedoc.c, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-28207-40885-37612-34994-37916-57388-29422-16350'>context</a>, <a href='matrix/matrix_drtree.html#R-28207-40885-37612-34994-37916-57388-29422-16350'>detail</a>)</i></p></dd>
+
+<dt><b>R-28220-46694-36270-42674-38857-47778-22952-56853</b></dt>
+<dd><p>For example, if an "ON DELETE SET DEFAULT" action is configured, but there is no row in the parent table that corresponds to the default values of the child key columns, deleting a parent key while dependent child keys exist still causes a foreign key violation.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys18.test, matrix: <a href='matrix/foreignkeys.html#R-28220-46694-36270-42674-38857-47778-22952-56853'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-28220-46694-36270-42674-38857-47778-22952-56853'>detail</a>)</i></p></dd>
+
+<dt><b>R-28258-23166-61617-36220-57922-46020-57990-00363</b></dt>
+<dd><p>Row iRow is not present in the table
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-28258-23166-61617-36220-57922-46020-57990-00363'>context</a>, <a href='matrix/matrix_dblob_open.html#R-28258-23166-61617-36220-57922-46020-57990-00363'>detail</a>)</i></p></dd>
+
+<dt><b>R-28262-47447-02372-41671-47406-00862-29752-13937</b></dt>
+<dd><p>If a HAVING clause is a non-aggregate expression, it is evaluated with respect to an arbitrarily selected row from the group.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-28262-47447-02372-41671-47406-00862-29752-13937'>context</a>, <a href='matrix/matrix_dlang_select.html#R-28262-47447-02372-41671-47406-00862-29752-13937'>detail</a>)</i></p></dd>
+
+<dt><b>R-28265-37702-63167-40719-28674-33175-26294-56765</b></dt>
+<dd><p>The second argument is a pointer to the function to invoke when a row is updated, inserted or deleted in a rowid table.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-28265-37702-63167-40719-28674-33175-26294-56765'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-28265-37702-63167-40719-28674-33175-26294-56765'>detail</a>)</i></p></dd>
+
+<dt><b>R-28279-44669-55028-49406-32452-64424-01870-54893</b></dt>
+<dd><p>If nByte is positive, then it is the number of bytes read from zSql.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare01.test, matrix: <a href='matrix/c3ref/prepare.html#R-28279-44669-55028-49406-32452-64424-01870-54893'>context</a>, <a href='matrix/matrix_dprepare.html#R-28279-44669-55028-49406-32452-64424-01870-54893'>detail</a>)</i></p></dd>
+
+<dt><b>R-28307-32767-23693-57600-42950-25827-15696-21088</b></dt>
+<dd><p>All other databases use the normal locking mode by default and are affected by this pragma.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-28307-32767-23693-57600-42950-25827-15696-21088'>context</a>, <a href='matrix/matrix_dpragma.html#R-28307-32767-23693-57600-42950-25827-15696-21088'>detail</a>)</i></p></dd>
+
+<dt><b>R-28312-64704-30092-58113-01356-46939-35653-28661</b></dt>
+<dd><p>However, the usable size is not allowed to be less than 480. In other words, if the page size is 512, then the reserved space size cannot exceed 32.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-28312-64704-30092-58113-01356-46939-35653-28661'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-28312-64704-30092-58113-01356-46939-35653-28661'>detail</a>)</i></p></dd>
+
+<dt><b>R-28329-37702-19692-05275-47566-55090-16021-12790</b></dt>
+<dd><p>The string literal must not begin with a wildcard; if the right-hand side begins with a wildcard character then this optimization is not attempted.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-28329-37702-19692-05275-47566-55090-16021-12790'>context</a>, <a href='matrix/matrix_doptoverview.html#R-28329-37702-19692-05275-47566-55090-16021-12790'>detail</a>)</i></p></dd>
+
+<dt><b>R-28346-31823-44337-58654-12319-45607-22371-22984</b></dt>
+<dd><p>A call to either function replaces the existing collation-needed callback.
+<i>(source: <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>, matrix: <a href='matrix/c3ref/collation_needed.html#R-28346-31823-44337-58654-12319-45607-22371-22984'>context</a>, <a href='matrix/matrix_dcollation_needed.html#R-28346-31823-44337-58654-12319-45607-22371-22984'>detail</a>)</i></p></dd>
+
+<dt><b>R-28351-07091-05361-50500-02238-36187-02311-00737</b></dt>
+<dd><p>Note that an inner transaction might commit (using the RELEASE command) but then later have its work undone by a ROLLBACK in an outer transaction.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-28351-07091-05361-50500-02238-36187-02311-00737'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-28351-07091-05361-50500-02238-36187-02311-00737'>detail</a>)</i></p></dd>
+
+<dt><b>R-28355-09804-02024-51679-13656-23007-30178-16776</b></dt>
+<dd><p>If there is more than one table or subquery in FROM clause then the contents of all tables and/or subqueries are joined into a single dataset for the simple SELECT statement to operate on.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-28355-09804-02024-51679-13656-23007-30178-16776'>context</a>, <a href='matrix/matrix_dlang_select.html#R-28355-09804-02024-51679-13656-23007-30178-16776'>detail</a>)</i></p></dd>
+
+<dt><b>R-28401-00140-19628-52826-12287-35959-24998-24420</b></dt>
+<dd><p>Value is a string in the text encoding and (N-13)/2 bytes in length.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-28401-00140-19628-52826-12287-35959-24998-24420'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-28401-00140-19628-52826-12287-35959-24998-24420'>detail</a>)</i></p></dd>
+
+<dt><b>R-28453-47400-61335-60267-59373-07041-42359-06361</b></dt>
+<dd><p>This API may be used to register a callback that SQLite will invoke when the connection currently holding the required lock relinquishes it.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-28453-47400-61335-60267-59373-07041-42359-06361'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-28453-47400-61335-60267-59373-07041-42359-06361'>detail</a>)</i></p></dd>
+
+<dt><b>R-28465-35432-54989-58142-09664-10793-19950-25889</b></dt>
+<dd><p>When the temp_store setting is changed, all existing temporary tables, indices, triggers, and views are immediately deleted.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-28465-35432-54989-58142-09664-10793-19950-25889'>context</a>, <a href='matrix/matrix_dpragma.html#R-28465-35432-54989-58142-09664-10793-19950-25889'>detail</a>)</i></p></dd>
+
+<dt><b>R-28518-13457-48277-27328-18424-50932-01795-30236</b></dt>
+<dd><p>The optional "OR action" conflict clause that follows the UPDATE keyword allows the user to nominate a specific constraint conflict resolution algorithm to use during this one UPDATE command.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-28518-13457-48277-27328-18424-50932-01795-30236'>context</a>, <a href='matrix/matrix_dlang_update.html#R-28518-13457-48277-27328-18424-50932-01795-30236'>detail</a>)</i></p></dd>
+
+<dt><b>R-28530-22001-17760-49127-38466-18799-32025-16275</b></dt>
+<dd><p>Content is not actually committed on the disk until the outermost transaction commits.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-28530-22001-17760-49127-38466-18799-32025-16275'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-28530-22001-17760-49127-38466-18799-32025-16275'>detail</a>)</i></p></dd>
+
+<dt><b>R-28535-44631-32814-50468-55427-04715-11501-46204</b></dt>
+<dd><p>The likelihood(X) function is a no-op that the code generator optimizes away so that it consumes no CPU cycles during run-time (that is, during calls to sqlite3_step()).
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/func3.test, matrix: <a href='matrix/lang_corefunc.html#R-28535-44631-32814-50468-55427-04715-11501-46204'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-28535-44631-32814-50468-55427-04715-11501-46204'>detail</a>)</i></p></dd>
+
+<dt><b>R-28555-32340-54703-19587-00440-31117-26893-64821</b></dt>
+<dd><p>This function is used to move an existing BLOB handle so that it points to a different row of the same database table.
+<i>(source: <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>, checked-by: th3/req1/blob01.test, matrix: <a href='matrix/c3ref/blob_reopen.html#R-28555-32340-54703-19587-00440-31117-26893-64821'>context</a>, <a href='matrix/matrix_dblob_reopen.html#R-28555-32340-54703-19587-00440-31117-26893-64821'>detail</a>)</i></p></dd>
+
+<dt><b>R-28594-02890-08451-24102-07094-48300-54751-43989</b></dt>
+<dd><p>The one-byte flag at offset 0 indicating the b-tree page type.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-28594-02890-08451-24102-07094-48300-54751-43989'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-28594-02890-08451-24102-07094-48300-54751-43989'>detail</a>)</i></p></dd>
+
+<dt><b>R-28659-11035-10621-07368-12698-03611-12155-24539</b></dt>
+<dd><p>If the path begins with a '/' character, then it is interpreted as an absolute path.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-28659-11035-10621-07368-12698-03611-12155-24539'>context</a>, <a href='matrix/matrix_dopen.html#R-28659-11035-10621-07368-12698-03611-12155-24539'>detail</a>)</i></p></dd>
+
+<dt><b>R-28676-08005-24857-51856-29072-62693-32404-21796</b></dt>
+<dd><p>Table zTable does not exist within database zDb
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-28676-08005-24857-51856-29072-62693-32404-21796'>context</a>, <a href='matrix/matrix_dblob_open.html#R-28676-08005-24857-51856-29072-62693-32404-21796'>detail</a>)</i></p></dd>
+
+<dt><b>R-28676-32830-52785-15539-23546-23390-27594-39349</b></dt>
+<dd><p>The xMutexInit routine is called by SQLite exactly once for each effective call to sqlite3_initialize().
+<i>(source: <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>, matrix: <a href='matrix/c3ref/mutex_methods.html#R-28676-32830-52785-15539-23546-23390-27594-39349'>context</a>, <a href='matrix/matrix_dmutex_methods.html#R-28676-32830-52785-15539-23546-23390-27594-39349'>detail</a>)</i></p></dd>
+
+<dt><b>R-28691-49464-13455-34259-09637-44341-17028-46530</b></dt>
+<dd><p>The INDEXED BY and NOT INDEXED clauses are not allowed on DELETE statements within triggers.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-28691-49464-13455-34259-09637-44341-17028-46530'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-28691-49464-13455-34259-09637-44341-17028-46530'>detail</a>)</i></p></dd>
+
+<dt><b>R-28754-35153-48498-07178-42088-22812-48106-51904</b></dt>
+<dd><p>Those subelements for which the xQueryFunc callback sets eWithin to PARTLY_WITHIN or FULLY_WITHIN are added to the priority queue using the score supplied by the callback.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc3.test, matrix: <a href='matrix/rtree.html#R-28754-35153-48498-07178-42088-22812-48106-51904'>context</a>, <a href='matrix/matrix_drtree.html#R-28754-35153-48498-07178-42088-22812-48106-51904'>detail</a>)</i></p></dd>
+
+<dt><b>R-28760-53843-47957-08431-27887-29261-48374-11570</b></dt>
+<dd><p>When more than two tables are joined together as part of a FROM clause, the join operations are processed in order from left to right. In other words, the FROM clause (A join-op-1 B join-op-2 C) is computed as ((A join-op-1 B) join-op-2 C).
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select2.test, matrix: <a href='matrix/lang_select.html#R-28760-53843-47957-08431-27887-29261-48374-11570'>context</a>, <a href='matrix/matrix_dlang_select.html#R-28760-53843-47957-08431-27887-29261-48374-11570'>detail</a>)</i></p></dd>
+
+<dt><b>R-28765-22796-02386-57750-08034-62633-19124-45761</b></dt>
+<dd><p>If the previous call to this routine had an N of 1 or more and a non-NULL P then the pseudo-randomness is generated internally and without recourse to the sqlite3_vfs xRandomness method.
+<i>(source: <a href="c3ref/randomness.html">c3ref/randomness.html</a>, checked-by: th3/cov1/random01.test, matrix: <a href='matrix/c3ref/randomness.html#R-28765-22796-02386-57750-08034-62633-19124-45761'>context</a>, <a href='matrix/matrix_drandomness.html#R-28765-22796-02386-57750-08034-62633-19124-45761'>detail</a>)</i></p></dd>
+
+<dt><b>R-28818-00847-36702-14411-16104-05353-45723-35449</b></dt>
+<dd><p>Otherwise, they return the name of the attached database, table, or column that query result column was extracted from.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-28818-00847-36702-14411-16104-05353-45723-35449'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-28818-00847-36702-14411-16104-05353-45723-35449'>detail</a>)</i></p></dd>
+
+<dt><b>R-28818-63526-62393-01881-62533-13491-06138-19891</b></dt>
+<dd><p>If the table to which the trigger is attached is not in the temp database, then DELETE statements within the trigger body must operate on tables within the same database as it.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-28818-63526-62393-01881-62533-13491-06138-19891'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-28818-63526-62393-01881-62533-13491-06138-19891'>detail</a>)</i></p></dd>
+
+<dt><b>R-28853-08147-20510-38197-22369-16459-32849-06937</b></dt>
+<dd><p>However, if the SELECT is a compound SELECT, then ORDER BY expressions that are not aliases to output columns must be exactly the same as an expression used as an output column.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-28853-08147-20510-38197-22369-16459-32849-06937'>context</a>, <a href='matrix/matrix_dlang_select.html#R-28853-08147-20510-38197-22369-16459-32849-06937'>detail</a>)</i></p></dd>
+
+<dt><b>R-28861-22117-11804-11458-17489-33951-18363-36356</b></dt>
+<dd><p>The structure of the sqlite_schema table is as if it had been created using the following SQL: CREATE TABLE sqlite_schema( type text, name text, tbl_name text, rootpage integer, sql text );
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-28861-22117-11804-11458-17489-33951-18363-36356'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-28861-22117-11804-11458-17489-33951-18363-36356'>detail</a>)</i></p></dd>
+
+<dt><b>R-28870-48866-03452-03570-43153-10694-10376-44715</b></dt>
+<dd><p>In SQLite, table rows normally have a 64-bit signed integer ROWID which is unique among all rows in the same table.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-28870-48866-03452-03570-43153-10694-10376-44715'>context</a>, <a href='matrix/matrix_dautoinc.html#R-28870-48866-03452-03570-43153-10694-10376-44715'>detail</a>)</i></p></dd>
+
+<dt><b>R-28880-18896-60065-00895-16000-25645-24475-60986</b></dt>
+<dd><p>The ALTER TABLE command does not work on statistics tables.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-28880-18896-60065-00895-16000-25645-24475-60986'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-28880-18896-60065-00895-16000-25645-24475-60986'>detail</a>)</i></p></dd>
+
+<dt><b>R-28902-17274-01624-42364-46386-62149-20745-43372</b></dt>
+<dd><p>EXPLAIN QUERY PLAN is most useful on a SELECT statement, but may also appear with other statements that read data from database tables (e.g. UPDATE, DELETE, INSERT INTO ... SELECT).
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-28902-17274-01624-42364-46386-62149-20745-43372'>context</a>, <a href='matrix/matrix_deqp.html#R-28902-17274-01624-42364-46386-62149-20745-43372'>detail</a>)</i></p></dd>
+
+<dt><b>R-28911-57501-45271-30589-18471-43910-24083-24523</b></dt>
+<dd><p>The defer_foreign_keys pragma defaults to OFF so that foreign key constraints are only deferred if they are created as "DEFERRABLE INITIALLY DEFERRED".
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/fkey6.test, th3/cov1/fkey24.test, matrix: <a href='matrix/pragma.html#R-28911-57501-45271-30589-18471-43910-24083-24523'>context</a>, <a href='matrix/matrix_dpragma.html#R-28911-57501-45271-30589-18471-43910-24083-24523'>detail</a>)</i></p></dd>
+
+<dt><b>R-28989-00211-56037-13079-09434-49891-20969-08914</b></dt>
+<dd><p>sqlite3_config() can be called as part of the implementation of an application-defined sqlite3_os_init().
+<i>(source: <a href="c3ref/config.html">c3ref/config.html</a>, matrix: <a href='matrix/c3ref/config.html#R-28989-00211-56037-13079-09434-49891-20969-08914'>context</a>, <a href='matrix/matrix_dconfig.html#R-28989-00211-56037-13079-09434-49891-20969-08914'>detail</a>)</i></p></dd>
+
+<dt><b>R-28995-46979-25570-20018-47836-46368-43472-22663</b></dt>
+<dd><p>The sqlite3_column_type() routine returns the datatype code for the initial data type of the result column.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-28995-46979-25570-20018-47836-46368-43472-22663'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-28995-46979-25570-20018-47836-46368-43472-22663'>detail</a>)</i></p></dd>
+
+<dt><b>R-29005-40549-62573-61718-07162-40054-58592-42696</b></dt>
+<dd><p>FTS4 uses term prefix indexes to speed up prefix queries.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-29005-40549-62573-61718-07162-40054-58592-42696'>context</a>, <a href='matrix/matrix_dfts3.html#R-29005-40549-62573-61718-07162-40054-58592-42696'>detail</a>)</i></p></dd>
+
+<dt><b>R-29045-37224-33225-01178-62278-53898-40877-61168</b></dt>
+<dd><p>For example, the sqlite_stat1 table might indicate that an equality constraint on column x reduces the search space to 10 rows on average, whereas an equality constraint on column y reduces the search space to 3 rows on average. In that case, SQLite would prefer to use index ex2i2 since that index is more selective.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-29045-37224-33225-01178-62278-53898-40877-61168'>context</a>, <a href='matrix/matrix_doptoverview.html#R-29045-37224-33225-01178-62278-53898-40877-61168'>detail</a>)</i></p></dd>
+
+<dt><b>R-29052-00975-25766-49663-50070-52826-19346-28533</b></dt>
+<dd><p>String and BLOB values that do not look like numbers are interpreted as 0.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-29052-00975-25766-49663-50070-52826-19346-28533'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-29052-00975-25766-49663-50070-52826-19346-28533'>detail</a>)</i></p></dd>
+
+<dt><b>R-29055-19620-57316-63969-08563-57428-43116-59145</b></dt>
+<dd><p>SQLite interprets the string from sqlite3_result_error16() as UTF-16 using the same byte-order determination rules as sqlite3_bind_text16().
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-29055-19620-57316-63969-08563-57428-43116-59145'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-29055-19620-57316-63969-08563-57428-43116-59145'>detail</a>)</i></p></dd>
+
+<dt><b>R-29082-45770-21240-41661-14924-48900-49346-30675</b></dt>
+<dd><p>An attempt to read from an expired BLOB handle fails with an error code of SQLITE_ABORT.
+<i>(source: <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_read.html#R-29082-45770-21240-41661-14924-48900-49346-30675'>context</a>, <a href='matrix/matrix_dblob_read.html#R-29082-45770-21240-41661-14924-48900-49346-30675'>detail</a>)</i></p></dd>
+
+<dt><b>R-29130-21766-34227-41742-24593-26617-14935-23368</b></dt>
+<dd><p>The sqlite3_str_finish(X) interface destroys the sqlite3_str object X and returns a pointer to a memory buffer obtained from sqlite3_malloc64() that contains the constructed string.
+<i>(source: <a href="c3ref/str_finish.html">c3ref/str_finish.html</a>, matrix: <a href='matrix/c3ref/str_finish.html#R-29130-21766-34227-41742-24593-26617-14935-23368'>context</a>, <a href='matrix/matrix_dstr_finish.html#R-29130-21766-34227-41742-24593-26617-14935-23368'>detail</a>)</i></p></dd>
+
+<dt><b>R-29137-58191-04727-48044-60255-14464-15278-17646</b></dt>
+<dd><p>SQLITE_STATUS_MALLOC_COUNT This parameter records the number of separate memory allocations currently checked out.
+<i>(source: <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a>, matrix: <a href='matrix/c3ref/c_status_malloc_count.html#R-29137-58191-04727-48044-60255-14464-15278-17646'>context</a>, <a href='matrix/matrix_dc_status_malloc_count.html#R-29137-58191-04727-48044-60255-14464-15278-17646'>detail</a>)</i></p></dd>
+
+<dt><b>R-29144-37270-15316-24457-48532-24353-08508-55125</b></dt>
+<dd><p>The ROLLBACK command with a TO clause rolls back transactions going backwards in time back to the most recent SAVEPOINT with a matching name.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-29144-37270-15316-24457-48532-24353-08508-55125'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-29144-37270-15316-24457-48532-24353-08508-55125'>detail</a>)</i></p></dd>
+
+<dt><b>R-29161-24939-37010-28632-36605-59202-44014-09658</b></dt>
+<dd><p>This is the number of sort operations that have occurred.
+<i>(source: <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a>, matrix: <a href='matrix/c3ref/c_stmtstatus_counter.html#R-29161-24939-37010-28632-36605-59202-44014-09658'>context</a>, <a href='matrix/matrix_dc_stmtstatus_counter.html#R-29161-24939-37010-28632-36605-59202-44014-09658'>detail</a>)</i></p></dd>
+
+<dt><b>R-29161-32953-36932-45614-26636-25376-16033-00724</b></dt>
+<dd><p>If one operand has TEXT affinity and the other has no affinity, then TEXT affinity is applied to the other operand.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/cov1/affinity01.test, th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-29161-32953-36932-45614-26636-25376-16033-00724'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-29161-32953-36932-45614-26636-25376-16033-00724'>detail</a>)</i></p></dd>
+
+<dt><b>R-29177-48281-29998-61012-25413-14806-58383-44850</b></dt>
+<dd><p>It then checkpoints all frames in the log file and syncs the database file.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-29177-48281-29998-61012-25413-14806-58383-44850'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-29177-48281-29998-61012-25413-14806-58383-44850'>detail</a>)</i></p></dd>
+
+<dt><b>R-29187-47463-37855-25397-01259-03141-56758-63159</b></dt>
+<dd><p>For indexes on an ordinary rowid table, N will be one more than the number of columns indexed.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-29187-47463-37855-25397-01259-03141-56758-63159'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-29187-47463-37855-25397-01259-03141-56758-63159'>detail</a>)</i></p></dd>
+
+<dt><b>R-29198-50701-28906-62015-01619-10608-18054-51120</b></dt>
+<dd><p>When the commit hook callback routine returns zero, the COMMIT operation is allowed to continue normally.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-29198-50701-28906-62015-01619-10608-18054-51120'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-29198-50701-28906-62015-01619-10608-18054-51120'>detail</a>)</i></p></dd>
+
+<dt><b>R-29213-61195-54301-03299-01569-39638-01555-01215</b></dt>
+<dd><p>The third and fourth arguments to the callback contain pointers to the database and table name containing the affected row.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: tcl/hook.test, th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-29213-61195-54301-03299-01569-39638-01555-01215'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-29213-61195-54301-03299-01569-39638-01555-01215'>detail</a>)</i></p></dd>
+
+<dt><b>R-29255-51137-31633-40808-05446-49202-54154-26438</b></dt>
+<dd><p>For "X LIKE P" without the ESCAPE clause, set the E parameter of sqlite3_strlike(P,X,E) to 0.
+<i>(source: <a href="c3ref/strlike.html">c3ref/strlike.html</a>, matrix: <a href='matrix/c3ref/strlike.html#R-29255-51137-31633-40808-05446-49202-54154-26438'>context</a>, <a href='matrix/matrix_dstrlike.html#R-29255-51137-31633-40808-05446-49202-54154-26438'>detail</a>)</i></p></dd>
+
+<dt><b>R-29276-00741-11068-20150-45137-35653-26807-40835</b></dt>
+<dd><p>When the locking-mode is set to EXCLUSIVE, the database connection never releases file-locks.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-29276-00741-11068-20150-45137-35653-26807-40835'>context</a>, <a href='matrix/matrix_dpragma.html#R-29276-00741-11068-20150-45137-35653-26807-40835'>detail</a>)</i></p></dd>
+
+<dt><b>R-29283-15561-34387-21673-60506-52883-35719-11898</b></dt>
+<dd><p>Otherwise, the storage class of the result is determined by applying the rules for determining column affinity to the type-name.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-29283-15561-34387-21673-60506-52883-35719-11898'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-29283-15561-34387-21673-60506-52883-35719-11898'>detail</a>)</i></p></dd>
+
+<dt><b>R-29319-62175-31242-39109-13345-46061-10840-60903</b></dt>
+<dd><p>If the source database connection is being used to write to the source database when sqlite3_backup_step() is called, then SQLITE_LOCKED is returned immediately.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-29319-62175-31242-39109-13345-46061-10840-60903'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-29319-62175-31242-39109-13345-46061-10840-60903'>detail</a>)</i></p></dd>
+
+<dt><b>R-29353-26294-62114-45133-33417-28665-47147-29185</b></dt>
+<dd><p>PRAGMA fullfsync PRAGMA fullfsync = boolean; Query or change the fullfsync flag.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma11b.test, matrix: <a href='matrix/pragma.html#R-29353-26294-62114-45133-33417-28665-47147-29185'>context</a>, <a href='matrix/matrix_dpragma.html#R-29353-26294-62114-45133-33417-28665-47147-29185'>detail</a>)</i></p></dd>
+
+<dt><b>R-29353-35916-54935-35443-09756-12894-62191-13348</b></dt>
+<dd><p>Generated columns can occur anywhere in the table definition.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-29353-35916-54935-35443-09756-12894-62191-13348'>context</a>, <a href='matrix/matrix_dgencol.html#R-29353-35916-54935-35443-09756-12894-62191-13348'>detail</a>)</i></p></dd>
+
+<dt><b>R-29356-02391-20787-31753-20232-32348-21090-16703</b></dt>
+<dd><p>If the database uses a 65536-byte page size and the reserved space is zero (the usual value for reserved space) then the cell content offset of an empty page wants to be 65536. However, that integer is too large to be stored in a 2-byte unsigned integer, so a value of 0 is used in its place.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-29356-02391-20787-31753-20232-32348-21090-16703'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-29356-02391-20787-31753-20232-32348-21090-16703'>detail</a>)</i></p></dd>
+
+<dt><b>R-29387-20242-08784-06903-03129-29684-27650-40318</b></dt>
+<dd><p>Some virtual table implementations might impose additional restrictions.
+<i>(source: <a href="lang_createvtab.html">lang_createvtab.html</a>, matrix: <a href='matrix/lang_createvtab.html#R-29387-20242-08784-06903-03129-29684-27650-40318'>context</a>, <a href='matrix/matrix_dlang_createvtab.html#R-29387-20242-08784-06903-03129-29684-27650-40318'>detail</a>)</i></p></dd>
+
+<dt><b>R-29410-53018-13680-36864-38018-28179-51962-01812</b></dt>
+<dd><p>If there are too few arguments in the argument list, missing arguments are assumed to have a NULL value, which is translated into 0 or 0.0 for numeric formats or an empty string for %s.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/printf2.test, th3/cov1/printf08.test, matrix: <a href='matrix/lang_corefunc.html#R-29410-53018-13680-36864-38018-28179-51962-01812'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-29410-53018-13680-36864-38018-28179-51962-01812'>detail</a>)</i></p></dd>
+
+<dt><b>R-29431-39229-16691-57532-51214-42870-42294-30038</b></dt>
+<dd><p>The highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: src/status.c, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-29431-39229-16691-57532-51214-42870-42294-30038'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-29431-39229-16691-57532-51214-42870-42294-30038'>detail</a>)</i></p></dd>
+
+<dt><b>R-29448-60346-55143-08707-47583-53661-32513-61785</b></dt>
+<dd><p>PRAGMA schema.index_info(index-name); This pragma returns one row for each key column in the named index.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15.test, matrix: <a href='matrix/pragma.html#R-29448-60346-55143-08707-47583-53661-32513-61785'>context</a>, <a href='matrix/matrix_dpragma.html#R-29448-60346-55143-08707-47583-53661-32513-61785'>detail</a>)</i></p></dd>
+
+<dt><b>R-29466-27412-45786-34057-43817-35684-25480-06167</b></dt>
+<dd><p>If a given call to sqlite3_unlock_notify() would put the system in a deadlocked state, then SQLITE_LOCKED is returned and no unlock-notify callback is registered.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-29466-27412-45786-34057-43817-35684-25480-06167'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-29466-27412-45786-34057-43817-35684-25480-06167'>detail</a>)</i></p></dd>
+
+<dt><b>R-29497-04603-39486-29131-04048-03697-44723-21949</b></dt>
+<dd><p>A subsequent call to sqlite3_result_error() or sqlite3_result_error16() resets the error code to SQLITE_ERROR.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-29497-04603-39486-29131-04048-03697-44723-21949'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-29497-04603-39486-29131-04048-03697-44723-21949'>detail</a>)</i></p></dd>
+
+<dt><b>R-29497-24405-09063-15182-02450-11825-26112-55595</b></dt>
+<dd><p>If the 3rd parameter to any of the sqlite3_result_text* interfaces other than sqlite3_result_text64() is negative, then SQLite computes the string length itself by searching the 2nd parameter for the first zero character.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result02.test, matrix: <a href='matrix/c3ref/result_blob.html#R-29497-24405-09063-15182-02450-11825-26112-55595'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-29497-24405-09063-15182-02450-11825-26112-55595'>detail</a>)</i></p></dd>
+
+<dt><b>R-29512-54644-05780-17564-45452-02840-21704-61078</b></dt>
+<dd><p>If the table to which the trigger is attached is in the TEMP database, then the unqualified name of the table being updated is resolved in the same way as it is for a top-level statement (by searching first the TEMP database, then the main database, then any other databases in the order they were attached).
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-29512-54644-05780-17564-45452-02840-21704-61078'>context</a>, <a href='matrix/matrix_dlang_update.html#R-29512-54644-05780-17564-45452-02840-21704-61078'>detail</a>)</i></p></dd>
+
+<dt><b>R-29517-30691-07524-03121-42038-48163-15213-35798</b></dt>
+<dd><p>Hence, when an application changes the statistics tables directly, SQLite will not immediately notice the changes.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-29517-30691-07524-03121-42038-48163-15213-35798'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-29517-30691-07524-03121-42038-48163-15213-35798'>detail</a>)</i></p></dd>
+
+<dt><b>R-29523-01234-45433-34913-07391-02140-19209-23434</b></dt>
+<dd><p>When a "table-name" is specified, the only foreign key constraints checked are those created by REFERENCES clauses in the CREATE TABLE statement for table-name.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/fkey23.test, matrix: <a href='matrix/pragma.html#R-29523-01234-45433-34913-07391-02140-19209-23434'>context</a>, <a href='matrix/matrix_dpragma.html#R-29523-01234-45433-34913-07391-02140-19209-23434'>detail</a>)</i></p></dd>
+
+<dt><b>R-29538-34987-07238-64188-64158-06889-50248-62239</b></dt>
+<dd><p>The usual algorithm is to give the newly created row a ROWID that is one larger than the largest ROWID in the table prior to the insert.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: src/vdbe.c, th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-29538-34987-07238-64188-64158-06889-50248-62239'>context</a>, <a href='matrix/matrix_dautoinc.html#R-29538-34987-07238-64188-64158-06889-50248-62239'>detail</a>)</i></p></dd>
+
+<dt><b>R-29565-52740-53863-51242-23520-28931-17220-09831</b></dt>
+<dd><p>The sqlite3_stmt_isexplain(S) interface returns 1 if the prepared statement S is an EXPLAIN statement, or 2 if the statement S is an EXPLAIN QUERY PLAN.
+<i>(source: <a href="c3ref/stmt_isexplain.html">c3ref/stmt_isexplain.html</a>, matrix: <a href='matrix/c3ref/stmt_isexplain.html#R-29565-52740-53863-51242-23520-28931-17220-09831'>context</a>, <a href='matrix/matrix_dstmt_isexplain.html#R-29565-52740-53863-51242-23520-28931-17220-09831'>detail</a>)</i></p></dd>
+
+<dt><b>R-29575-14878-05474-20512-63309-33241-31866-62624</b></dt>
+<dd><p>Each call to either sqlite3_trace() or sqlite3_trace_v2() overrides (cancels) any prior calls to sqlite3_trace() or sqlite3_trace_v2().
+<i>(source: <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>, matrix: <a href='matrix/c3ref/trace_v2.html#R-29575-14878-05474-20512-63309-33241-31866-62624'>context</a>, <a href='matrix/matrix_dtrace_v2.html#R-29575-14878-05474-20512-63309-33241-31866-62624'>detail</a>)</i></p></dd>
+
+<dt><b>R-29579-23096-56379-38525-03672-46829-05671-41323</b></dt>
+<dd><p>In a STRICT table, a column of type ANY always preserves the data exactly as it is received.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-29579-23096-56379-38525-03672-46829-05671-41323'>context</a>, <a href='matrix/matrix_dstricttables.html#R-29579-23096-56379-38525-03672-46829-05671-41323'>detail</a>)</i></p></dd>
+
+<dt><b>R-29588-44058-56045-00722-36389-33824-35706-30523</b></dt>
+<dd><p>An INSERT that fails due to a constraint violation is not a successful INSERT and does not change the value returned by this routine.
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-29588-44058-56045-00722-36389-33824-35706-30523'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-29588-44058-56045-00722-36389-33824-35706-30523'>detail</a>)</i></p></dd>
+
+<dt><b>R-29600-32407-54811-33651-22955-26262-16018-30636</b></dt>
+<dd><p>sqlite3_free() is used to free idxPtr if and only if needToFreeIdxPtr is true.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-29600-32407-54811-33651-22955-26262-16018-30636'>context</a>, <a href='matrix/matrix_dindex_info.html#R-29600-32407-54811-33651-22955-26262-16018-30636'>detail</a>)</i></p></dd>
+
+<dt><b>R-29604-30395-11418-33165-02079-38209-02467-57208</b></dt>
+<dd><p>However, COMMIT will fail as long as foreign key constraints remain in violation.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys12.test, th3/req1/foreignkeys14.test, matrix: <a href='matrix/foreignkeys.html#R-29604-30395-11418-33165-02079-38209-02467-57208'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-29604-30395-11418-33165-02079-38209-02467-57208'>detail</a>)</i></p></dd>
+
+<dt><b>R-29609-10377-53436-28646-00070-22457-04173-55911</b></dt>
+<dd><p>The right-hand side of an IN or NOT IN operator can be a table name or table-valued function name in which case the right-hand side is understood to be subquery of the form "(SELECT * FROM name)".
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/cov1/in01.test, matrix: <a href='matrix/lang_expr.html#R-29609-10377-53436-28646-00070-22457-04173-55911'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-29609-10377-53436-28646-00070-22457-04173-55911'>detail</a>)</i></p></dd>
+
+<dt><b>R-29629-55858-55328-41166-17171-44417-01732-51851</b></dt>
+<dd><p>Type is associated with individual values, not with the containers used to hold those values.
+<i>(source: <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a>, matrix: <a href='matrix/c3ref/column_decltype.html#R-29629-55858-55328-41166-17171-44417-01732-51851'>context</a>, <a href='matrix/matrix_dcolumn_decltype.html#R-29629-55858-55328-41166-17171-44417-01732-51851'>detail</a>)</i></p></dd>
+
+<dt><b>R-29639-16887-16584-30400-13663-34877-64046-50311</b></dt>
+<dd><p>The sqlite3_db_readonly(D,N) interface returns 1 if the database N of connection D is read-only, 0 if it is read/write, or -1 if N is not the name of a database on connection D.
+<i>(source: <a href="c3ref/db_readonly.html">c3ref/db_readonly.html</a>, checked-by: tcl/rdonly.test, matrix: <a href='matrix/c3ref/db_readonly.html#R-29639-16887-16584-30400-13663-34877-64046-50311'>context</a>, <a href='matrix/matrix_ddb_readonly.html#R-29639-16887-16584-30400-13663-34877-64046-50311'>detail</a>)</i></p></dd>
+
+<dt><b>R-29639-49338-45805-35258-41039-23584-19093-35749</b></dt>
+<dd><p>The sqlite3_create_function() interface can be used to override the like() function and thereby change the operation of the LIKE operator.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-29639-49338-45805-35258-41039-23584-19093-35749'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-29639-49338-45805-35258-41039-23584-19093-35749'>detail</a>)</i></p></dd>
+
+<dt><b>R-29649-49812-55856-43048-16547-37449-39759-10169</b></dt>
+<dd><p>The nullif(X,Y) function returns its first argument if the arguments are different and NULL if the arguments are the same.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-29649-49812-55856-43048-16547-37449-39759-10169'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-29649-49812-55856-43048-16547-37449-39759-10169'>detail</a>)</i></p></dd>
+
+<dt><b>R-29653-64292-04142-32577-33842-31550-59902-00796</b></dt>
+<dd><p>The second argument to the busy handler callback is the number of times that the busy handler has been invoked previously for the same locking event.
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-29653-64292-04142-32577-33842-31550-59902-00796'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-29653-64292-04142-32577-33842-31550-59902-00796'>detail</a>)</i></p></dd>
+
+<dt><b>R-29691-21352-53312-54436-56868-51235-26976-62729</b></dt>
+<dd><p>For a blob value X, length(X) returns the number of bytes in the blob.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-29691-21352-53312-54436-56868-51235-26976-62729'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-29691-21352-53312-54436-56868-51235-26976-62729'>detail</a>)</i></p></dd>
+
+<dt><b>R-29701-50711-44772-52633-13865-01358-40998-48117</b></dt>
+<dd><p>The unicode(X) function returns the numeric unicode code point corresponding to the first character of the string X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/func.test, matrix: <a href='matrix/lang_corefunc.html#R-29701-50711-44772-52633-13865-01358-40998-48117'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-29701-50711-44772-52633-13865-01358-40998-48117'>detail</a>)</i></p></dd>
+
+<dt><b>R-29702-55194-05446-48408-53607-29729-56782-07687</b></dt>
+<dd><p>If either operand has an explicit collating function assignment using the postfix COLLATE operator, then the explicit collating function is used for comparison, with precedence to the collating function of the left operand.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-29702-55194-05446-48408-53607-29729-56782-07687'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-29702-55194-05446-48408-53607-29729-56782-07687'>detail</a>)</i></p></dd>
+
+<dt><b>R-29704-26647-58862-58935-31533-13851-11315-20283</b></dt>
+<dd><p>Application developers can use the EXPLAIN QUERY PLAN prefix on a statement to get a high-level overview of the chosen query strategy.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-29704-26647-58862-58935-31533-13851-11315-20283'>context</a>, <a href='matrix/matrix_doptoverview.html#R-29704-26647-58862-58935-31533-13851-11315-20283'>detail</a>)</i></p></dd>
+
+<dt><b>R-29730-42609-05554-56391-51377-12498-20824-07696</b></dt>
+<dd><p>In this case the result of evaluating the left-most expression from each term of the VALUES list is inserted into the left-most column of each new row, and so forth for each subsequent expression.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-29730-42609-05554-56391-51377-12498-20824-07696'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-29730-42609-05554-56391-51377-12498-20824-07696'>detail</a>)</i></p></dd>
+
+<dt><b>R-29736-23230-43340-15713-20658-37994-08323-17511</b></dt>
+<dd><p>The sqlite3_str_new(D) interface allocates and initializes a new sqlite3_str object.
+<i>(source: <a href="c3ref/str_new.html">c3ref/str_new.html</a>, matrix: <a href='matrix/c3ref/str_new.html#R-29736-23230-43340-15713-20658-37994-08323-17511'>context</a>, <a href='matrix/matrix_dstr_new.html#R-29736-23230-43340-15713-20658-37994-08323-17511'>detail</a>)</i></p></dd>
+
+<dt><b>R-29740-29379-09735-48719-34134-53325-08131-24362</b></dt>
+<dd><p>For any key X, pointers to the left of a X refer to b-tree pages on which all keys are less than or equal to X.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-29740-29379-09735-48719-34134-53325-08131-24362'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-29740-29379-09735-48719-34134-53325-08131-24362'>detail</a>)</i></p></dd>
+
+<dt><b>R-29747-05924-20663-28243-45594-47687-47105-58596</b></dt>
+<dd><p>FULL blocks concurrent writers while it is running, but readers can proceed.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-29747-05924-20663-28243-45594-47687-47105-58596'>context</a>, <a href='matrix/matrix_dpragma.html#R-29747-05924-20663-28243-45594-47687-47105-58596'>detail</a>)</i></p></dd>
+
+<dt><b>R-29748-45567-07187-24756-39474-12329-09927-01777</b></dt>
+<dd><p>A function where the preferred text encoding matches the database encoding is a better match than a function where the encoding is different.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc04.test, matrix: <a href='matrix/c3ref/create_function.html#R-29748-45567-07187-24756-39474-12329-09927-01777'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-29748-45567-07187-24756-39474-12329-09927-01777'>detail</a>)</i></p></dd>
+
+<dt><b>R-29753-05667-59108-06137-58483-55469-25582-30166</b></dt>
+<dd><p>The text of query parameters is appended to the filename argument of the xOpen method of the VFS.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-29753-05667-59108-06137-58483-55469-25582-30166'>context</a>, <a href='matrix/matrix_duri.html#R-29753-05667-59108-06137-58483-55469-25582-30166'>detail</a>)</i></p></dd>
+
+<dt><b>R-29765-45832-49120-26582-31576-30942-45829-65039</b></dt>
+<dd><p>When an INTEGER or REAL is compared to another INTEGER or REAL, a numerical comparison is performed.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_04.test, matrix: <a href='matrix/datatype3.html#R-29765-45832-49120-26582-31576-30942-45829-65039'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-29765-45832-49120-26582-31576-30942-45829-65039'>detail</a>)</i></p></dd>
+
+<dt><b>R-29779-04281-26216-55813-25026-31775-44460-23073</b></dt>
+<dd><p>If the ORDER BY expression is a constant integer K then the expression is considered an alias for the K-th column of the result set (columns are numbered from left to right starting with 1).
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-29779-04281-26216-55813-25026-31775-44460-23073'>context</a>, <a href='matrix/matrix_dlang_select.html#R-29779-04281-26216-55813-25026-31775-44460-23073'>detail</a>)</i></p></dd>
+
+<dt><b>R-29781-51289-55954-01701-34718-07402-02199-48708</b></dt>
+<dd><p>So, ordinary rowid tables in SQLite violate the SQL standard and allow NULL values in PRIMARY KEY fields.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-29781-51289-55954-01701-34718-07402-02199-48708'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-29781-51289-55954-01701-34718-07402-02199-48708'>detail</a>)</i></p></dd>
+
+<dt><b>R-29804-27366-08727-59986-31864-09983-14088-09844</b></dt>
+<dd><p>If offset iOffset is less than N bytes from the end of the BLOB, SQLITE_ERROR is returned and no data is written.
+<i>(source: <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>, checked-by: tcl/e_blobwrite.test, matrix: <a href='matrix/c3ref/blob_write.html#R-29804-27366-08727-59986-31864-09983-14088-09844'>context</a>, <a href='matrix/matrix_dblob_write.html#R-29804-27366-08727-59986-31864-09983-14088-09844'>detail</a>)</i></p></dd>
+
+<dt><b>R-29830-14325-45586-46074-54512-52450-29043-42603</b></dt>
+<dd><p>If the savepoint-name in a ROLLBACK TO command does not match any SAVEPOINT on the stack, then the ROLLBACK command fails with an error and leaves the state of the database unchanged.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-29830-14325-45586-46074-54512-52450-29043-42603'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-29830-14325-45586-46074-54512-52450-29043-42603'>detail</a>)</i></p></dd>
+
+<dt><b>R-29851-52272-33233-14067-54274-53843-25272-26823</b></dt>
+<dd><p>Value is a big-endian 64-bit twos-complement integer.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-29851-52272-33233-14067-54274-53843-25272-26823'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-29851-52272-33233-14067-54274-53843-25272-26823'>detail</a>)</i></p></dd>
+
+<dt><b>R-29855-60809-01544-19871-54336-63942-18466-34966</b></dt>
+<dd><p>The source database connection may be used by the application for other purposes while a backup operation is underway or being initialized.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-29855-60809-01544-19871-54336-63942-18466-34966'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-29855-60809-01544-19871-54336-63942-18466-34966'>detail</a>)</i></p></dd>
+
+<dt><b>R-29868-13536-10966-03336-45139-07308-57583-25685</b></dt>
+<dd><p>If a NOT NULL constraint is specified, then the column must have a default value other than NULL.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/req1/altertable01.test, matrix: <a href='matrix/lang_altertable.html#R-29868-13536-10966-03336-45139-07308-57583-25685'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-29868-13536-10966-03336-45139-07308-57583-25685'>detail</a>)</i></p></dd>
+
+<dt><b>R-29872-04040-27270-03833-42234-32060-43929-61511</b></dt>
+<dd><p>If those locks cannot be obtained immediately and there is a busy-handler callback configured, it is invoked in the usual manner.
+<i>(source: <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>, matrix: <a href='matrix/c3ref/db_cacheflush.html#R-29872-04040-27270-03833-42234-32060-43929-61511'>context</a>, <a href='matrix/matrix_ddb_cacheflush.html#R-29872-04040-27270-03833-42234-32060-43929-61511'>detail</a>)</i></p></dd>
+
+<dt><b>R-29875-31678-61620-24152-15277-25938-13734-04890</b></dt>
+<dd><p>The argument to the SQLITE_FCNTL_PRAGMA file control is an array of pointers to strings (char**) in which the second element of the array is the name of the pragma and the third element is the argument to the pragma or NULL if the pragma has no argument.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, checked-by: src/pragma.c, src/test_multiplex.c, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-29875-31678-61620-24152-15277-25938-13734-04890'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-29875-31678-61620-24152-15277-25938-13734-04890'>detail</a>)</i></p></dd>
+
+<dt><b>R-29897-28851-11131-17538-15635-12313-50588-15022</b></dt>
+<dd><p>Such transactions usually persist until the next COMMIT or ROLLBACK command. But a transaction will also ROLLBACK if the database is closed or if an error occurs and the ROLLBACK conflict resolution algorithm is specified.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-29897-28851-11131-17538-15635-12313-50588-15022'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-29897-28851-11131-17538-15635-12313-50588-15022'>detail</a>)</i></p></dd>
+
+<dt><b>R-29901-08836-51888-40758-53445-49475-03703-08720</b></dt>
+<dd><p>The SQLITE_OPEN_EXCLUSIVE flag is always used in conjunction with the SQLITE_OPEN_CREATE flag, which are both directly analogous to the O_EXCL and O_CREAT flags of the POSIX open() API.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-29901-08836-51888-40758-53445-49475-03703-08720'>context</a>, <a href='matrix/matrix_dvfs.html#R-29901-08836-51888-40758-53445-49475-03703-08720'>detail</a>)</i></p></dd>
+
+<dt><b>R-29907-43640-25763-15861-54141-28138-53381-17065</b></dt>
+<dd><p>This file control takes the file descriptor out of batch write mode so that all subsequent write operations are independent.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-29907-43640-25763-15861-54141-28138-53381-17065'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-29907-43640-25763-15861-54141-28138-53381-17065'>detail</a>)</i></p></dd>
+
+<dt><b>R-29907-62378-42519-29973-48919-58819-22759-58497</b></dt>
+<dd><p>Calling sqlite3_auto_extension(X) with an entry point X that is already on the list of automatic extensions is a harmless no-op.
+<i>(source: <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>, checked-by: th3/req1/autoext01.test, matrix: <a href='matrix/c3ref/auto_extension.html#R-29907-62378-42519-29973-48919-58819-22759-58497'>context</a>, <a href='matrix/matrix_dauto_extension.html#R-29907-62378-42519-29973-48919-58819-22759-58497'>detail</a>)</i></p></dd>
+
+<dt><b>R-29924-24161-31191-57990-51475-61688-39790-55251</b></dt>
+<dd><p>EXCLUSIVE is similar to IMMEDIATE in that a write transaction is started immediately.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-29924-24161-31191-57990-51475-61688-39790-55251'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-29924-24161-31191-57990-51475-61688-39790-55251'>detail</a>)</i></p></dd>
+
+<dt><b>R-29935-55502-30462-41824-13753-02448-58197-37881</b></dt>
+<dd><p>If neither argument to nullif() defines a collating function then the BINARY collating function is used.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-29935-55502-30462-41824-13753-02448-58197-37881'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-29935-55502-30462-41824-13753-02448-58197-37881'>detail</a>)</i></p></dd>
+
+<dt><b>R-29946-11104-19867-16845-18883-10746-06540-64125</b></dt>
+<dd><p>Example Typenames From TheCREATE TABLE Statement or CAST Expression Resulting Affinity Rule Used To Determine Affinity INT INTEGER TINYINT SMALLINT MEDIUMINT BIGINT UNSIGNED BIG INT INT2 INT8 INTEGER 1 CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE CHARACTER(70) NVARCHAR(100) TEXT CLOB TEXT 2 BLOB no datatype specified BLOB 3 REAL DOUBLE DOUBLE PRECISION FLOAT REAL 4 NUMERIC DECIMAL(10,5) BOOLEAN DATE DATETIME NUMERIC 5
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_02.test, matrix: <a href='matrix/datatype3.html#R-29946-11104-19867-16845-18883-10746-06540-64125'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-29946-11104-19867-16845-18883-10746-06540-64125'>detail</a>)</i></p></dd>
+
+<dt><b>R-29987-53326-32227-44761-37373-28199-35279-34751</b></dt>
+<dd><p>The leftmost column of the result set has the index 0.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-29987-53326-32227-44761-37373-28199-35279-34751'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-29987-53326-32227-44761-37373-28199-35279-34751'>detail</a>)</i></p></dd>
+
+<dt><b>R-29989-03153-00644-12353-52386-44408-44979-16456</b></dt>
+<dd><p>If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or sqlite3_mutex_leave() is a NULL pointer, then all three routines behave as no-ops.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, checked-by: th3/cov1/mutex01.test, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-29989-03153-00644-12353-52386-44408-44979-16456'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-29989-03153-00644-12353-52386-44408-44979-16456'>detail</a>)</i></p></dd>
+
+<dt><b>R-30008-03647-27202-20831-29850-54434-32362-14140</b></dt>
+<dd><p>If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16() routine returns the number of bytes in that BLOB or string.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-30008-03647-27202-20831-29850-54434-32362-14140'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-30008-03647-27202-20831-29850-54434-32362-14140'>detail</a>)</i></p></dd>
+
+<dt><b>R-30025-13801-01234-26643-63886-25441-43268-35607</b></dt>
+<dd><p>The psow parameter indicates whether or not the powersafe overwrite property does or does not apply to the storage media on which the database file resides.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/psow01.test, matrix: <a href='matrix/c3ref/open.html#R-30025-13801-01234-26643-63886-25441-43268-35607'>context</a>, <a href='matrix/matrix_dopen.html#R-30025-13801-01234-26643-63886-25441-43268-35607'>detail</a>)</i></p></dd>
+
+<dt><b>R-30082-38996-55894-31210-19025-03289-36793-27218</b></dt>
+<dd><p>The non-equals operator can be either != or <>.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-30082-38996-55894-31210-19025-03289-36793-27218'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-30082-38996-55894-31210-19025-03289-36793-27218'>detail</a>)</i></p></dd>
+
+<dt><b>R-30083-58938-31645-59750-38554-41419-43937-22175</b></dt>
+<dd><p>The index of the column is stored in aConstraint[].iColumn.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-30083-58938-31645-59750-38554-41419-43937-22175'>context</a>, <a href='matrix/matrix_dindex_info.html#R-30083-58938-31645-59750-38554-41419-43937-22175'>detail</a>)</i></p></dd>
+
+<dt><b>R-30104-14201-52849-13140-57489-26582-19257-15267</b></dt>
+<dd><p>Additional application-specific collating functions can be added to SQLite using the sqlite3_create_collation() interface.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/th3util.c, matrix: <a href='matrix/fileformat2.html#R-30104-14201-52849-13140-57489-26582-19257-15267'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-30104-14201-52849-13140-57489-26582-19257-15267'>detail</a>)</i></p></dd>
+
+<dt><b>R-30105-58549-25183-38919-44198-38701-12397-38507</b></dt>
+<dd><p>PASSIVE Checkpoint as many frames as possible without waiting for any database readers or writers to finish. Sync the db file if all frames in the log are checkpointed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/checkpoint01.test, matrix: <a href='matrix/pragma.html#R-30105-58549-25183-38919-44198-38701-12397-38507'>context</a>, <a href='matrix/matrix_dpragma.html#R-30105-58549-25183-38919-44198-38701-12397-38507'>detail</a>)</i></p></dd>
+
+<dt><b>R-30135-06439-12622-19657-03902-02051-33050-20191</b></dt>
+<dd><p>The wal_autocheckpoint pragma can be used to invoke this interface from SQL.
+<i>(source: <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>, checked-by: tcl/e_walauto.test, matrix: <a href='matrix/c3ref/wal_autocheckpoint.html#R-30135-06439-12622-19657-03902-02051-33050-20191'>context</a>, <a href='matrix/matrix_dwal_autocheckpoint.html#R-30135-06439-12622-19657-03902-02051-33050-20191'>detail</a>)</i></p></dd>
+
+<dt><b>R-30140-15527-13572-28268-32284-47435-56739-50325</b></dt>
+<dd><p>The compress option is used to specify the compress function.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-30140-15527-13572-28268-32284-47435-56739-50325'>context</a>, <a href='matrix/matrix_dfts3.html#R-30140-15527-13572-28268-32284-47435-56739-50325'>detail</a>)</i></p></dd>
+
+<dt><b>R-30164-60316-40156-60446-50221-53227-39726-53106</b></dt>
+<dd><p>The number of pages in cache must exceed both the cache_spill threshold and the maximum cache size set by the PRAGMA cache_size statement in order for spilling to occur.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-30164-60316-40156-60446-50221-53227-39726-53106'>context</a>, <a href='matrix/matrix_dpragma.html#R-30164-60316-40156-60446-50221-53227-39726-53106'>detail</a>)</i></p></dd>
+
+<dt><b>R-30185-15359-41231-64088-51727-20362-49126-10873</b></dt>
+<dd><p>The default suggested cache size is -2000, which means the cache size is limited to 2048000 bytes of memory.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/sqliteLimit.h, th3/req1/pragma09.test, matrix: <a href='matrix/pragma.html#R-30185-15359-41231-64088-51727-20362-49126-10873'>context</a>, <a href='matrix/matrix_dpragma.html#R-30185-15359-41231-64088-51727-20362-49126-10873'>detail</a>)</i></p></dd>
+
+<dt><b>R-30189-54097-58322-43687-36717-28803-52946-09131</b></dt>
+<dd><p>For each limit category SQLITE_LIMIT_NAME there is a hard upper bound set at compile-time by a C preprocessor macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to "_MAX_".)
+<i>(source: <a href="c3ref/limit.html">c3ref/limit.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/limit.html#R-30189-54097-58322-43687-36717-28803-52946-09131'>context</a>, <a href='matrix/matrix_dlimit.html#R-30189-54097-58322-43687-36717-28803-52946-09131'>detail</a>)</i></p></dd>
+
+<dt><b>R-30195-08968-16924-33658-13499-65099-07965-35563</b></dt>
+<dd><p>All automatic checkpoints are PASSIVE.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-30195-08968-16924-33658-13499-65099-07965-35563'>context</a>, <a href='matrix/matrix_dpragma.html#R-30195-08968-16924-33658-13499-65099-07965-35563'>detail</a>)</i></p></dd>
+
+<dt><b>R-30224-53949-52765-04057-07963-58169-00243-05425</b></dt>
+<dd><p>The load_extension() function will fail if the extension attempts to modify or delete an SQL function or collating sequence.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-30224-53949-52765-04057-07963-58169-00243-05425'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-30224-53949-52765-04057-07963-58169-00243-05425'>detail</a>)</i></p></dd>
+
+<dt><b>R-30243-02494-34522-44043-46462-44113-55048-51587</b></dt>
+<dd><p>The sqlite3_stricmp() and sqlite3_strnicmp() APIs allow applications and extensions to compare the contents of two buffers containing UTF-8 strings in a case-independent fashion, using the same definition of "case independence" that SQLite uses internally when comparing identifiers.
+<i>(source: <a href="c3ref/stricmp.html">c3ref/stricmp.html</a>, checked-by: src/util.c, matrix: <a href='matrix/c3ref/stricmp.html#R-30243-02494-34522-44043-46462-44113-55048-51587'>context</a>, <a href='matrix/matrix_dstricmp.html#R-30243-02494-34522-44043-46462-44113-55048-51587'>detail</a>)</i></p></dd>
+
+<dt><b>R-30264-64343-18676-16200-46556-14505-34639-51509</b></dt>
+<dd><p>All arguments are preceded by a single space.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-30264-64343-18676-16200-46556-14505-34639-51509'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-30264-64343-18676-16200-46556-14505-34639-51509'>detail</a>)</i></p></dd>
+
+<dt><b>R-30269-25284-41363-48378-16742-02348-00072-11353</b></dt>
+<dd><p>The default value of the fullfsync flag is off.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma11b.test, matrix: <a href='matrix/pragma.html#R-30269-25284-41363-48378-16742-02348-00072-11353'>context</a>, <a href='matrix/matrix_dpragma.html#R-30269-25284-41363-48378-16742-02348-00072-11353'>detail</a>)</i></p></dd>
+
+<dt><b>R-30311-39793-14973-30919-34186-11921-51287-47112</b></dt>
+<dd><p>The minimum value is the first non-NULL value that would appear in an ORDER BY of the column.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-30311-39793-14973-30919-34186-11921-51287-47112'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-30311-39793-14973-30919-34186-11921-51287-47112'>detail</a>)</i></p></dd>
+
+<dt><b>R-30323-21917-40561-21411-57538-63013-10240-64875</b></dt>
+<dd><p>Each foreign key constraint in SQLite is classified as either immediate or deferred.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: src/build.c, src/fkey.c, src/sqliteInt.h, tcl/e_fkey.test, th3/req1/foreignkeys12.test, matrix: <a href='matrix/foreignkeys.html#R-30323-21917-40561-21411-57538-63013-10240-64875'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-30323-21917-40561-21411-57538-63013-10240-64875'>detail</a>)</i></p></dd>
+
+<dt><b>R-30347-18702-41681-51017-11561-03801-56644-21815</b></dt>
+<dd><p>Casting a REAL or INTEGER value to NUMERIC is a no-op, even if a real value could be losslessly converted to an integer.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-30347-18702-41681-51017-11561-03801-56644-21815'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-30347-18702-41681-51017-11561-03801-56644-21815'>detail</a>)</i></p></dd>
+
+<dt><b>R-30358-48480-02487-45285-44102-55038-52936-37421</b></dt>
+<dd><p>The SQLITE_SOURCE_ID macro evaluates to a string which identifies a particular check-in of SQLite within its configuration management system.
+<i>(source: <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>, checked-by: th3/req1/version01.test, matrix: <a href='matrix/c3ref/c_source_id.html#R-30358-48480-02487-45285-44102-55038-52936-37421'>context</a>, <a href='matrix/matrix_dc_source_id.html#R-30358-48480-02487-45285-44102-55038-52936-37421'>detail</a>)</i></p></dd>
+
+<dt><b>R-30374-63100-15715-29897-06518-00278-46226-59168</b></dt>
+<dd><p>Every call to sqlite3_backup_step() obtains a shared lock on the source database that lasts for the duration of the sqlite3_backup_step() call.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-30374-63100-15715-29897-06518-00278-46226-59168'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-30374-63100-15715-29897-06518-00278-46226-59168'>detail</a>)</i></p></dd>
+
+<dt><b>R-30391-20943-57014-62404-57876-35219-41861-22105</b></dt>
+<dd><p>There can only be a single busy handler defined for each database connection. Setting a new busy handler clears any previously set handler.
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-30391-20943-57014-62404-57876-35219-41861-22105'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-30391-20943-57014-62404-57876-35219-41861-22105'>detail</a>)</i></p></dd>
+
+<dt><b>R-30433-25443-23879-51033-37593-48703-34224-12115</b></dt>
+<dd><p>An underscore ("_") in the LIKE pattern matches any single character in the string.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-30433-25443-23879-51033-37593-48703-34224-12115'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-30433-25443-23879-51033-37593-48703-34224-12115'>detail</a>)</i></p></dd>
+
+<dt><b>R-30470-29835-03618-00817-05721-31518-05673-45416</b></dt>
+<dd><p>Any column in an SQLite version 3 database, except an INTEGER PRIMARY KEY column, may be used to store a value of any storage class.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_11.test, matrix: <a href='matrix/datatype3.html#R-30470-29835-03618-00817-05721-31518-05673-45416'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-30470-29835-03618-00817-05721-31518-05673-45416'>detail</a>)</i></p></dd>
+
+<dt><b>R-30481-56627-22651-35996-10349-58660-54475-15242</b></dt>
+<dd><p>Any scalar expression may be used in the LIMIT clause, so long as it evaluates to an integer or a value that can be losslessly converted to an integer.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-30481-56627-22651-35996-10349-58660-54475-15242'>context</a>, <a href='matrix/matrix_dlang_select.html#R-30481-56627-22651-35996-10349-58660-54475-15242'>detail</a>)</i></p></dd>
+
+<dt><b>R-30493-01537-45458-43801-08603-54598-05440-48528</b></dt>
+<dd><p>If this routine has not been previously called or if the previous call had N less than one or a NULL pointer for P, then the PRNG is seeded using randomness obtained from the xRandomness method of the default sqlite3_vfs object.
+<i>(source: <a href="c3ref/randomness.html">c3ref/randomness.html</a>, checked-by: th3/cov1/random01.test, matrix: <a href='matrix/c3ref/randomness.html#R-30493-01537-45458-43801-08603-54598-05440-48528'>context</a>, <a href='matrix/matrix_drandomness.html#R-30493-01537-45458-43801-08603-54598-05440-48528'>detail</a>)</i></p></dd>
+
+<dt><b>R-30514-26093-50789-47903-26935-14001-56493-58208</b></dt>
+<dd><p>Auxiliary columns must come after all of the coordinate boundary columns.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-30514-26093-50789-47903-26935-14001-56493-58208'>context</a>, <a href='matrix/matrix_drtree.html#R-30514-26093-50789-47903-26935-14001-56493-58208'>detail</a>)</i></p></dd>
+
+<dt><b>R-30526-43432-10994-07089-02178-39041-60976-54446</b></dt>
+<dd><p>The locking mode of temp and in-memory databases cannot be changed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-30526-43432-10994-07089-02178-39041-60976-54446'>context</a>, <a href='matrix/matrix_dpragma.html#R-30526-43432-10994-07089-02178-39041-60976-54446'>detail</a>)</i></p></dd>
+
+<dt><b>R-30545-25046-21416-05477-19453-52596-39209-12513</b></dt>
+<dd><p>The sqlite3_vtab_rhs_value() interface can return an result code other than SQLITE_OK or SQLITE_NOTFOUND if something goes wrong.
+<i>(source: <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>, checked-by: src/where.c, matrix: <a href='matrix/c3ref/vtab_rhs_value.html#R-30545-25046-21416-05477-19453-52596-39209-12513'>context</a>, <a href='matrix/matrix_dvtab_rhs_value.html#R-30545-25046-21416-05477-19453-52596-39209-12513'>detail</a>)</i></p></dd>
+
+<dt><b>R-30582-29746-05981-37310-62755-30295-44870-62832</b></dt>
+<dd><p>If the callback on a commit hook function returns non-zero, then the commit is converted into a rollback.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-30582-29746-05981-37310-62755-30295-44870-62832'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-30582-29746-05981-37310-62755-30295-44870-62832'>detail</a>)</i></p></dd>
+
+<dt><b>R-30617-11336-33984-38056-06680-32424-07593-35065</b></dt>
+<dd><p>After calling the xDestroy() method, SQLite considers the sqlite3_pcache* handle invalid, and will not use it with any other sqlite3_pcache_methods2 functions.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: th3/th3pcache.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-30617-11336-33984-38056-06680-32424-07593-35065'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-30617-11336-33984-38056-06680-32424-07593-35065'>detail</a>)</i></p></dd>
+
+<dt><b>R-30638-59954-59281-20323-32142-07020-22821-14638</b></dt>
+<dd><p>In a CASE without a base expression, each WHEN expression is evaluated and the result treated as a boolean, starting with the leftmost and continuing to the right.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-30638-59954-59281-20323-32142-07020-22821-14638'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-30638-59954-59281-20323-32142-07020-22821-14638'>detail</a>)</i></p></dd>
+
+<dt><b>R-30687-15230-29813-38800-06728-37939-57957-31201</b></dt>
+<dd><p>The WAL header is 32 bytes in size and consists of the following eight big-endian 32-bit unsigned integer values: WAL Header Format OffsetSizeDescription 04 Magic number. 0x377f0682 or 0x377f0683 44 File format version. Currently 3007000. 84 Database page size. Example: 1024 124 Checkpoint sequence number 164 Salt-1: random integer incremented with each checkpoint 204 Salt-2: a different random number for each checkpoint 244 Checksum-1: First part of a checksum on the first 24 bytes of header 284 Checksum-2: Second part of the checksum on the first 24 bytes of header
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-30687-15230-29813-38800-06728-37939-57957-31201'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-30687-15230-29813-38800-06728-37939-57957-31201'>detail</a>)</i></p></dd>
+
+<dt><b>R-30704-56544-06954-20989-48023-23010-19681-04623</b></dt>
+<dd><p>The SQLITE_INDEX_CONSTRAINT_ISNULL and SQLITE_INDEX_CONSTRAINT_ISNOTNULL operators have no right-hand operand and hence calls to sqlite3_vtab_rhs_value() for those operators will always return SQLITE_NOTFOUND.
+<i>(source: <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a>, matrix: <a href='matrix/c3ref/c_index_constraint_eq.html#R-30704-56544-06954-20989-48023-23010-19681-04623'>context</a>, <a href='matrix/matrix_dc_index_constraint_eq.html#R-30704-56544-06954-20989-48023-23010-19681-04623'>detail</a>)</i></p></dd>
+
+<dt><b>R-30730-49369-63435-09885-16429-36568-35219-46599</b></dt>
+<dd><p>&&ensp;&nbsp;|&nbsp;&nbsp;&nbsp;<<&ensp;&nbsp;>>
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-30730-49369-63435-09885-16429-36568-35219-46599'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-30730-49369-63435-09885-16429-36568-35219-46599'>detail</a>)</i></p></dd>
+
+<dt><b>R-30732-36962-32140-22588-07980-22821-60699-49282</b></dt>
+<dd><p>But if the content cannot be losslessly converted into an integer, for example if the input is 'xyz', then the original string is inserted instead.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-30732-36962-32140-22588-07980-22821-60699-49282'>context</a>, <a href='matrix/matrix_dstricttables.html#R-30732-36962-32140-22588-07980-22821-60699-49282'>detail</a>)</i></p></dd>
+
+<dt><b>R-30791-11785-26457-12987-43722-30660-26434-24770</b></dt>
+<dd><p>The sqlite3_strlike(P,X,E) function matches Unicode characters, though only ASCII characters are case folded.
+<i>(source: <a href="c3ref/strlike.html">c3ref/strlike.html</a>, matrix: <a href='matrix/c3ref/strlike.html#R-30791-11785-26457-12987-43722-30660-26434-24770'>context</a>, <a href='matrix/matrix_dstrlike.html#R-30791-11785-26457-12987-43722-30660-26434-24770'>detail</a>)</i></p></dd>
+
+<dt><b>R-30809-57812-61495-62022-11490-25278-56613-15778</b></dt>
+<dd><p>The final callback parameter is the rowid of the row.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: tcl/hook.test, th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-30809-57812-61495-62022-11490-25278-56613-15778'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-30809-57812-61495-62022-11490-25278-56613-15778'>detail</a>)</i></p></dd>
+
+<dt><b>R-30842-64597-38059-54199-19748-27245-38788-44472</b></dt>
+<dd><p>If a write-transaction is open on database connection D when the sqlite3_db_cacheflush(D) interface invoked, any dirty pages in the pager-cache that are not currently in use are written out to disk.
+<i>(source: <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>, matrix: <a href='matrix/c3ref/db_cacheflush.html#R-30842-64597-38059-54199-19748-27245-38788-44472'>context</a>, <a href='matrix/matrix_ddb_cacheflush.html#R-30842-64597-38059-54199-19748-27245-38788-44472'>detail</a>)</i></p></dd>
+
+<dt><b>R-30866-25765-07571-30018-14065-28481-40844-53725</b></dt>
+<dd><p>The callback is invoked from within the sqlite3_step or sqlite3_close call that concludes the blocking connection's transaction.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-30866-25765-07571-30018-14065-28481-40844-53725'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-30866-25765-07571-30018-14065-28481-40844-53725'>detail</a>)</i></p></dd>
+
+<dt><b>R-30877-63179-19996-25083-08228-50110-54093-45033</b></dt>
+<dd><p>The unixepoch() function returns a unix timestamp - the number of seconds since 1970-01-01 00:00:00 UTC.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-30877-63179-19996-25083-08228-50110-54093-45033'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-30877-63179-19996-25083-08228-50110-54093-45033'>detail</a>)</i></p></dd>
+
+<dt><b>R-30879-62015-53996-61326-18041-63884-46339-47880</b></dt>
+<dd><p>And the declared type of "STRING" has an affinity of NUMERIC, not TEXT.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_02.test, matrix: <a href='matrix/datatype3.html#R-30879-62015-53996-61326-18041-63884-46339-47880'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-30879-62015-53996-61326-18041-63884-46339-47880'>detail</a>)</i></p></dd>
+
+<dt><b>R-30918-12436-57339-31834-32101-57409-49210-29864</b></dt>
+<dd><p>The sqlite3_result_text64() interface sets the return value of an application-defined function to be a text string in an encoding specified by the fifth (and last) parameter, which must be one of SQLITE_UTF8, SQLITE_UTF16, SQLITE_UTF16BE, or SQLITE_UTF16LE.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result02.test, matrix: <a href='matrix/c3ref/result_blob.html#R-30918-12436-57339-31834-32101-57409-49210-29864'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-30918-12436-57339-31834-32101-57409-49210-29864'>detail</a>)</i></p></dd>
+
+<dt><b>R-30955-38324-06638-08685-16466-65436-15533-06365</b></dt>
+<dd><p>If the UPDATE statement also has an OFFSET clause, then it is similarly evaluated and cast to an integer value. If the OFFSET expression evaluates to a non-negative value M, then the first M rows are skipped and the following N rows updated instead.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-30955-38324-06638-08685-16466-65436-15533-06365'>context</a>, <a href='matrix/matrix_dlang_update.html#R-30955-38324-06638-08685-16466-65436-15533-06365'>detail</a>)</i></p></dd>
+
+<dt><b>R-30964-04756-41013-33290-38906-18403-44827-12997</b></dt>
+<dd><p>The legacy behavior was that sqlite3_step() would only return a generic SQLITE_ERROR result code and the application would have to make a second call to sqlite3_reset() in order to find the underlying cause of the problem.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare03.test, matrix: <a href='matrix/c3ref/prepare.html#R-30964-04756-41013-33290-38906-18403-44827-12997'>context</a>, <a href='matrix/matrix_dprepare.html#R-30964-04756-41013-33290-38906-18403-44827-12997'>detail</a>)</i></p></dd>
+
+<dt><b>R-30967-33251-18681-38633-21419-53092-54100-57767</b></dt>
+<dd><p>Memory to hold the error message string is managed internally and must not be freed by the application
+<i>(source: <a href="c3ref/errcode.html">c3ref/errcode.html</a>, matrix: <a href='matrix/c3ref/errcode.html#R-30967-33251-18681-38633-21419-53092-54100-57767'>context</a>, <a href='matrix/matrix_derrcode.html#R-30967-33251-18681-38633-21419-53092-54100-57767'>detail</a>)</i></p></dd>
+
+<dt><b>R-30981-64168-44842-46448-61673-47635-40067-59553</b></dt>
+<dd><p>For each UNIQUE constraint on the table, each row must contain a unique combination of values in the columns identified by the UNIQUE constraint.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-30981-64168-44842-46448-61673-47635-40067-59553'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-30981-64168-44842-46448-61673-47635-40067-59553'>detail</a>)</i></p></dd>
+
+<dt><b>R-30993-34769-34709-09783-22387-24850-31587-36947</b></dt>
+<dd><p>*&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;%
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-30993-34769-34709-09783-22387-24850-31587-36947'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-30993-34769-34709-09783-22387-24850-31587-36947'>detail</a>)</i></p></dd>
+
+<dt><b>R-31029-02789-51389-40070-25151-19392-18984-32450</b></dt>
+<dd><p>Root pages are moved to the beginning of the database file by the CREATE TABLE, CREATE INDEX, DROP TABLE, and DROP INDEX operations.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-31029-02789-51389-40070-25151-19392-18984-32450'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-31029-02789-51389-40070-25151-19392-18984-32450'>detail</a>)</i></p></dd>
+
+<dt><b>R-31035-48105-55236-17512-32062-12366-10110-52557</b></dt>
+<dd><p>If no arguments are given, all attached databases are analyzed.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-31035-48105-55236-17512-32062-12366-10110-52557'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-31035-48105-55236-17512-32062-12366-10110-52557'>detail</a>)</i></p></dd>
+
+<dt><b>R-31067-37494-56120-35098-11105-54623-54147-27483</b></dt>
+<dd><p>Triggers are removed using the DROP TRIGGER statement.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-31067-37494-56120-35098-11105-54623-54147-27483'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-31067-37494-56120-35098-11105-54623-54147-27483'>detail</a>)</i></p></dd>
+
+<dt><b>R-31070-13763-03261-14688-14121-11229-57314-08102</b></dt>
+<dd><p>The sqlite3_busy_handler(D,X,P) routine sets a callback function X that might be invoked with argument P whenever an attempt is made to access a database table associated with database connection D when another thread or process has the table locked.
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-31070-13763-03261-14688-14121-11229-57314-08102'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-31070-13763-03261-14688-14121-11229-57314-08102'>detail</a>)</i></p></dd>
+
+<dt><b>R-31074-37730-44024-06868-31899-04779-58492-60283</b></dt>
+<dd><p>Any SELECT statement, including compound SELECTs and SELECT statements with ORDER BY and/or LIMIT clauses, may be used in an INSERT statement of this form.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-31074-37730-44024-06868-31899-04779-58492-60283'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-31074-37730-44024-06868-31899-04779-58492-60283'>detail</a>)</i></p></dd>
+
+<dt><b>R-31086-35521-56938-30140-08121-54172-49179-57363</b></dt>
+<dd><p>On success, SQLITE_OK is returned and the new BLOB handle is stored in *ppBlob. Otherwise an error code is returned and, unless the error code is SQLITE_MISUSE, *ppBlob is set to NULL.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-31086-35521-56938-30140-08121-54172-49179-57363'>context</a>, <a href='matrix/matrix_dblob_open.html#R-31086-35521-56938-30140-08121-54172-49179-57363'>detail</a>)</i></p></dd>
+
+<dt><b>R-31130-45753-58005-22978-58145-31360-08893-12454</b></dt>
+<dd><p>The SQLITE_SOURCE_ID string contains the date and time of the check-in (UTC) and a SHA1 or SHA3-256 hash of the entire source tree.
+<i>(source: <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>, checked-by: th3/req1/version01.test, matrix: <a href='matrix/c3ref/c_source_id.html#R-31130-45753-58005-22978-58145-31360-08893-12454'>context</a>, <a href='matrix/matrix_dc_source_id.html#R-31130-45753-58005-22978-58145-31360-08893-12454'>detail</a>)</i></p></dd>
+
+<dt><b>R-31163-29022-10663-19494-01661-06524-11639-30452</b></dt>
+<dd><p>The "E" character that begins the exponentiation clause of a floating point literal can be either upper or lower case.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr01.test, matrix: <a href='matrix/lang_expr.html#R-31163-29022-10663-19494-01661-06524-11639-30452'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-31163-29022-10663-19494-01661-06524-11639-30452'>detail</a>)</i></p></dd>
+
+<dt><b>R-31176-64601-35633-00922-47448-07633-63744-55833</b></dt>
+<dd><p>Any other use of the 'julianday' modifier is an error and causes the function to return NULL.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: src/date.c, tcl/date3.test, th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-31176-64601-35633-00922-47448-07633-63744-55833'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-31176-64601-35633-00922-47448-07633-63744-55833'>detail</a>)</i></p></dd>
+
+<dt><b>R-31195-28735-28971-60122-53361-51297-04226-18526</b></dt>
+<dd><p>Every table must have at least one non-generated column.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-31195-28735-28971-60122-53361-51297-04226-18526'>context</a>, <a href='matrix/matrix_dgencol.html#R-31195-28735-28971-60122-53361-51297-04226-18526'>detail</a>)</i></p></dd>
+
+<dt><b>R-31200-13290-19748-06553-12904-19504-15586-34616</b></dt>
+<dd><p>The sqlite3_db_filename(D,N) interface returns a pointer to the filename associated with database N of connection D.
+<i>(source: <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>, checked-by: th3/cov1/attach04.test, matrix: <a href='matrix/c3ref/db_filename.html#R-31200-13290-19748-06553-12904-19504-15586-34616'>context</a>, <a href='matrix/matrix_ddb_filename.html#R-31200-13290-19748-06553-12904-19504-15586-34616'>detail</a>)</i></p></dd>
+
+<dt><b>R-31204-44780-48490-01818-36589-33853-37932-09648</b></dt>
+<dd><p>Database zDb does not exist
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-31204-44780-48490-01818-36589-33853-37932-09648'>context</a>, <a href='matrix/matrix_dblob_open.html#R-31204-44780-48490-01818-36589-33853-37932-09648'>detail</a>)</i></p></dd>
+
+<dt><b>R-31214-22204-30542-52251-23834-20094-62182-37235</b></dt>
+<dd><p>sqlite> CREATE INDEX i2 ON t1(a, b); sqlite> EXPLAIN QUERY PLAN SELECT a, b FROM t1 WHERE a=1; QUERY PLAN `--SEARCH t1 USING COVERING INDEX i2 (a=?)
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-31214-22204-30542-52251-23834-20094-62182-37235'>context</a>, <a href='matrix/matrix_deqp.html#R-31214-22204-30542-52251-23834-20094-62182-37235'>detail</a>)</i></p></dd>
+
+<dt><b>R-31231-36717-57726-13439-19567-41766-26823-60811</b></dt>
+<dd><p>The new mutex is recursive when SQLITE_MUTEX_RECURSIVE is used but not necessarily so when SQLITE_MUTEX_FAST is used.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-31231-36717-57726-13439-19567-41766-26823-60811'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-31231-36717-57726-13439-19567-41766-26823-60811'>detail</a>)</i></p></dd>
+
+<dt><b>R-31235-42643-53508-27982-17967-09319-44968-07098</b></dt>
+<dd><p>The fourth column in the output of the foreign_key_check pragma is the same integer as the first column in the output of the foreign_key_list pragma.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/fkey23.test, matrix: <a href='matrix/pragma.html#R-31235-42643-53508-27982-17967-09319-44968-07098'>context</a>, <a href='matrix/matrix_dpragma.html#R-31235-42643-53508-27982-17967-09319-44968-07098'>detail</a>)</i></p></dd>
+
+<dt><b>R-31246-29731-62646-60277-08521-29245-49284-60874</b></dt>
+<dd><p>The pContext member of the sqlite3_rtree_geometry structure is always set to a copy of the pContext argument passed to sqlite3_rtree_geometry_callback() when the callback is registered.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-31246-29731-62646-60277-08521-29245-49284-60874'>context</a>, <a href='matrix/matrix_drtree.html#R-31246-29731-62646-60277-08521-29245-49284-60874'>detail</a>)</i></p></dd>
+
+<dt><b>R-31248-24630-37475-28758-64215-56604-24000-32221</b></dt>
+<dd><p>The 32-bit integers are big-endian if the magic number in the first 4 bytes of the WAL header is 0x377f0683 and the integers are little-endian if the magic number is 0x377f0682.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-31248-24630-37475-28758-64215-56604-24000-32221'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-31248-24630-37475-28758-64215-56604-24000-32221'>detail</a>)</i></p></dd>
+
+<dt><b>R-31275-44060-31786-28874-63587-64128-53792-58628</b></dt>
+<dd><p>Strings returned by sqlite3_column_text() and sqlite3_column_text16(), even empty strings, are always zero-terminated.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: src/vdbemem.c, th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-31275-44060-31786-28874-63587-64128-53792-58628'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-31275-44060-31786-28874-63587-64128-53792-58628'>detail</a>)</i></p></dd>
+
+<dt><b>R-31305-35170-11464-64098-34506-16219-33057-18056</b></dt>
+<dd><p>After the header and zero padding are zero or more page records.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-31305-35170-11464-64098-34506-16219-33057-18056'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-31305-35170-11464-64098-34506-16219-33057-18056'>detail</a>)</i></p></dd>
+
+<dt><b>R-31312-33516-05278-47140-12669-18608-41834-55008</b></dt>
+<dd><p>The lower(X) function returns a copy of string X with all ASCII characters converted to lower case.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-31312-33516-05278-47140-12669-18608-41834-55008'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-31312-33516-05278-47140-12669-18608-41834-55008'>detail</a>)</i></p></dd>
+
+<dt><b>R-31322-10196-14986-33891-01213-47655-00762-39748</b></dt>
+<dd><p>Each trigger must specify that it will fire for one of the following operations: DELETE, INSERT, UPDATE.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-31322-10196-14986-33891-01213-47655-00762-39748'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-31322-10196-14986-33891-01213-47655-00762-39748'>detail</a>)</i></p></dd>
+
+<dt><b>R-31338-54830-28259-56420-63783-19909-54858-57072</b></dt>
+<dd><p>The error code and message for the failed call to sqlite3_backup_init() can be retrieved using the sqlite3_errcode(), sqlite3_errmsg(), and/or sqlite3_errmsg16() functions.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup02.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-31338-54830-28259-56420-63783-19909-54858-57072'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-31338-54830-28259-56420-63783-19909-54858-57072'>detail</a>)</i></p></dd>
+
+<dt><b>R-31386-03131-57152-48354-62931-03354-07372-50774</b></dt>
+<dd><p>The authorizer callback should return SQLITE_OK to allow the action, SQLITE_IGNORE to disallow the specific action but allow the SQL statement to continue to be compiled, or SQLITE_DENY to cause the entire SQL statement to be rejected with an error.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, matrix: <a href='matrix/c3ref/set_authorizer.html#R-31386-03131-57152-48354-62931-03354-07372-50774'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-31386-03131-57152-48354-62931-03354-07372-50774'>detail</a>)</i></p></dd>
+
+<dt><b>R-31406-45734-45366-20105-37202-23050-60311-59562</b></dt>
+<dd><p>If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer to an empty string, or a pointer that contains only whitespace and/or SQL comments, then no SQL statements are evaluated and the database is not changed.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-31406-45734-45366-20105-37202-23050-60311-59562'>context</a>, <a href='matrix/matrix_dexec.html#R-31406-45734-45366-20105-37202-23050-60311-59562'>detail</a>)</i></p></dd>
+
+<dt><b>R-31407-09838-16507-11461-46420-27815-09445-39948</b></dt>
+<dd><p>The sqlite3_user_data() interface returns a copy of the pointer that was the pUserData parameter (the 5th parameter) of the sqlite3_create_function() and sqlite3_create_function16() routines that originally registered the application defined function.
+<i>(source: <a href="c3ref/user_data.html">c3ref/user_data.html</a>, checked-by: th3/req1/userdata01.test, matrix: <a href='matrix/c3ref/user_data.html#R-31407-09838-16507-11461-46420-27815-09445-39948'>context</a>, <a href='matrix/matrix_duser_data.html#R-31407-09838-16507-11461-46420-27815-09445-39948'>detail</a>)</i></p></dd>
+
+<dt><b>R-31442-26915-27818-62289-58213-54460-29931-06977</b></dt>
+<dd><p>The default built-in lower() function works for ASCII characters only.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-31442-26915-27818-62289-58213-54460-29931-06977'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-31442-26915-27818-62289-58213-54460-29931-06977'>detail</a>)</i></p></dd>
+
+<dt><b>R-31453-41389-40618-59449-38915-45174-40720-02932</b></dt>
+<dd><p>For example, the function "count(distinct X)" will return the number of distinct values of column X instead of the total number of non-null values in column X.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-31453-41389-40618-59449-38915-45174-40720-02932'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-31453-41389-40618-59449-38915-45174-40720-02932'>detail</a>)</i></p></dd>
+
+<dt><b>R-31509-21858-22614-04075-64482-13479-08451-58532</b></dt>
+<dd><p>The "order" option may be set to either "DESC" or "ASC" (in upper or lower case).
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-31509-21858-22614-04075-64482-13479-08451-58532'>context</a>, <a href='matrix/matrix_dfts3.html#R-31509-21858-22614-04075-64482-13479-08451-58532'>detail</a>)</i></p></dd>
+
+<dt><b>R-31509-40414-28527-23209-39294-56164-06955-51281</b></dt>
+<dd><p>The purpose of the likelihood(X,Y) function is to provide a hint to the query planner that the argument X is a boolean that is true with a probability of approximately Y.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/where42.test, matrix: <a href='matrix/lang_corefunc.html#R-31509-40414-28527-23209-39294-56164-06955-51281'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-31509-40414-28527-23209-39294-56164-06955-51281'>detail</a>)</i></p></dd>
+
+<dt><b>R-31518-37056-56231-07788-10281-54147-06570-65506</b></dt>
+<dd><p>If the destructor argument is SQLITE_STATIC, it means that the content pointer is constant and will never change.
+<i>(source: <a href="c3ref/c_static.html">c3ref/c_static.html</a>, checked-by: th3/req1/clearbind01.test, th3/req1/static01.test, matrix: <a href='matrix/c3ref/c_static.html#R-31518-37056-56231-07788-10281-54147-06570-65506'>context</a>, <a href='matrix/matrix_dc_static.html#R-31518-37056-56231-07788-10281-54147-06570-65506'>detail</a>)</i></p></dd>
+
+<dt><b>R-31520-16302-20553-09634-49353-53000-23080-58537</b></dt>
+<dd><p>When a table is referenced by a SELECT but no column values are extracted from that table (for example in a query like "SELECT count(*) FROM tab") then the SQLITE_READ authorizer callback is invoked once for that table with a column name that is an empty string.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: tcl/auth.test, th3/cov1/auth01.test, matrix: <a href='matrix/c3ref/set_authorizer.html#R-31520-16302-20553-09634-49353-53000-23080-58537'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-31520-16302-20553-09634-49353-53000-23080-58537'>detail</a>)</i></p></dd>
+
+<dt><b>R-31536-32008-60945-18932-27030-19997-64437-42960</b></dt>
+<dd><p>Literal values may be integers, floating point numbers, strings, BLOBs, or NULLs.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-31536-32008-60945-18932-27030-19997-64437-42960'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-31536-32008-60945-18932-27030-19997-64437-42960'>detail</a>)</i></p></dd>
+
+<dt><b>R-31537-00101-65351-40298-33316-64699-39889-60990</b></dt>
+<dd><p>If a HAVING clause is specified, it is evaluated once for each group of rows as a boolean expression. If the result of evaluating the HAVING clause is false, the group is discarded.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-31537-00101-65351-40298-33316-64699-39889-60990'>context</a>, <a href='matrix/matrix_dlang_select.html#R-31537-00101-65351-40298-33316-64699-39889-60990'>detail</a>)</i></p></dd>
+
+<dt><b>R-31538-00384-26321-49073-43364-40462-44753-02654</b></dt>
+<dd><p>_.
+<i>(source: <a href="undoredo.html">undoredo.html</a>, matrix: <a href='matrix/undoredo.html#R-31538-00384-26321-49073-43364-40462-44753-02654'>context</a>, <a href='matrix/matrix_dundoredo.html#R-31538-00384-26321-49073-43364-40462-44753-02654'>detail</a>)</i></p></dd>
+
+<dt><b>R-31559-52189-63274-09210-03777-15240-18014-01548</b></dt>
+<dd><p>Inner joins can be freely reordered.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-31559-52189-63274-09210-03777-15240-18014-01548'>context</a>, <a href='matrix/matrix_doptoverview.html#R-31559-52189-63274-09210-03777-15240-18014-01548'>detail</a>)</i></p></dd>
+
+<dt><b>R-31567-38587-20789-38106-63049-52268-08688-06103</b></dt>
+<dd><p>If the table to which the trigger is attached is in the TEMP database, then the unqualified name of the table being deleted is resolved in the same way as it is for a top-level statement (by searching first the TEMP database, then the main database, then any other databases in the order they were attached).
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-31567-38587-20789-38106-63049-52268-08688-06103'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-31567-38587-20789-38106-63049-52268-08688-06103'>detail</a>)</i></p></dd>
+
+<dt><b>R-31579-59686-01381-52027-49305-56500-23555-06857</b></dt>
+<dd><p>To avoid having to register all collation sequences before a database can be used, a single callback function may be registered with the database connection to be invoked whenever an undefined collation sequence is required.
+<i>(source: <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>, matrix: <a href='matrix/c3ref/collation_needed.html#R-31579-59686-01381-52027-49305-56500-23555-06857'>context</a>, <a href='matrix/matrix_dcollation_needed.html#R-31579-59686-01381-52027-49305-56500-23555-06857'>detail</a>)</i></p></dd>
+
+<dt><b>R-31603-05822-25247-46496-01667-17001-45146-39739</b></dt>
+<dd><p>The sqlite3_trace_v2(D,M,X,P) interface registers a trace callback function X against database connection D, using property mask M and context pointer P.
+<i>(source: <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>, matrix: <a href='matrix/c3ref/trace_v2.html#R-31603-05822-25247-46496-01667-17001-45146-39739'>context</a>, <a href='matrix/matrix_dtrace_v2.html#R-31603-05822-25247-46496-01667-17001-45146-39739'>detail</a>)</i></p></dd>
+
+<dt><b>R-31624-24737-51221-05558-39670-00793-48763-40650</b></dt>
+<dd><p>RTRIM is like BINARY except that extra spaces at the end of either string do not change the result. In other words, strings will compare equal to one another as long as they differ only in the number of spaces at the end.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-31624-24737-51221-05558-39670-00793-48763-40650'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-31624-24737-51221-05558-39670-00793-48763-40650'>detail</a>)</i></p></dd>
+
+<dt><b>R-31676-45509-42539-51511-07128-62436-51993-36875</b></dt>
+<dd><p>If X is the integer -9223372036854775808 then abs(X) throws an integer overflow error since there is no equivalent positive 64-bit two complement value.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-31676-45509-42539-51511-07128-62436-51993-36875'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-31676-45509-42539-51511-07128-62436-51993-36875'>detail</a>)</i></p></dd>
+
+<dt><b>R-31757-07599-53600-28407-17941-01600-55959-20235</b></dt>
+<dd><p>As an internal optimization, small floating point values with no fractional component and stored in columns with REAL affinity are written to disk as integers in order to take up less space and are automatically converted back into floating point as the value is read out.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_12.test, matrix: <a href='matrix/datatype3.html#R-31757-07599-53600-28407-17941-01600-55959-20235'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-31757-07599-53600-28407-17941-01600-55959-20235'>detail</a>)</i></p></dd>
+
+<dt><b>R-31773-41793-43777-15026-65463-02438-20954-63890</b></dt>
+<dd><p>If sqlite3_open_v2() is used and the "cache" parameter is present in a URI filename, its value overrides any behavior requested by setting SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-31773-41793-43777-15026-65463-02438-20954-63890'>context</a>, <a href='matrix/matrix_dopen.html#R-31773-41793-43777-15026-65463-02438-20954-63890'>detail</a>)</i></p></dd>
+
+<dt><b>R-31775-48204-44006-26750-02620-57678-37164-54735</b></dt>
+<dd><p>Or, if a PRIMARY KEY clause is specified as a table-constraint, then the primary key of the table consists of the list of columns specified as part of the PRIMARY KEY clause.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-31775-48204-44006-26750-02620-57678-37164-54735'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-31775-48204-44006-26750-02620-57678-37164-54735'>detail</a>)</i></p></dd>
+
+<dt><b>R-31795-57643-34892-44323-47602-12322-63634-37934</b></dt>
+<dd><p>a NOT NULL constraint dictates that the associated column may not contain a NULL value. Attempting to set the column value to NULL when inserting a new row or updating an existing one causes a constraint violation.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-31795-57643-34892-44323-47602-12322-63634-37934'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-31795-57643-34892-44323-47602-12322-63634-37934'>detail</a>)</i></p></dd>
+
+<dt><b>R-31812-49659-31326-36358-44931-00819-19755-27412</b></dt>
+<dd><p>The size of a blob may not be changed by this interface.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_open.html#R-31812-49659-31326-36358-44931-00819-19755-27412'>context</a>, <a href='matrix/matrix_dblob_open.html#R-31812-49659-31326-36358-44931-00819-19755-27412'>detail</a>)</i></p></dd>
+
+<dt><b>R-31816-13824-03247-24421-35841-11575-32489-23110</b></dt>
+<dd><p>PRAGMA legacy_alter_table; PRAGMA legacy_alter_table = boolean This pragma sets or queries the value of the legacy_alter_table flag.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-31816-13824-03247-24421-35841-11575-32489-23110'>context</a>, <a href='matrix/matrix_dpragma.html#R-31816-13824-03247-24421-35841-11575-32489-23110'>detail</a>)</i></p></dd>
+
+<dt><b>R-31820-22006-44575-45426-57001-50586-37778-41806</b></dt>
+<dd><p>If the final parameter to sqlite3_create_function_v2() or sqlite3_create_window_function() is not NULL, then it is destructor for the application data pointer. The destructor is invoked when the function is deleted, either by being overloaded or when the database connection closes.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc07.test, matrix: <a href='matrix/c3ref/create_function.html#R-31820-22006-44575-45426-57001-50586-37778-41806'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-31820-22006-44575-45426-57001-50586-37778-41806'>detail</a>)</i></p></dd>
+
+<dt><b>R-31826-01813-36062-43919-63231-47318-45635-11887</b></dt>
+<dd><p>An error is raised if more than one PRIMARY KEY clause appears in a CREATE TABLE statement.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-31826-01813-36062-43919-63231-47318-45635-11887'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-31826-01813-36062-43919-63231-47318-45635-11887'>detail</a>)</i></p></dd>
+
+<dt><b>R-31839-40105-47825-07965-38954-04263-02531-41060</b></dt>
+<dd><p>Both forms of the pragma return the maximum page count.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma12.test, matrix: <a href='matrix/pragma.html#R-31839-40105-47825-07965-38954-04263-02531-41060'>context</a>, <a href='matrix/matrix_dpragma.html#R-31839-40105-47825-07965-38954-04263-02531-41060'>detail</a>)</i></p></dd>
+
+<dt><b>R-31842-04164-45925-20128-62976-05013-64077-31889</b></dt>
+<dd><p>The zeroblob(N) function returns a BLOB consisting of N bytes of 0x00.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func04.test, matrix: <a href='matrix/lang_corefunc.html#R-31842-04164-45925-20128-62976-05013-64077-31889'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-31842-04164-45925-20128-62976-05013-64077-31889'>detail</a>)</i></p></dd>
+
+<dt><b>R-31855-18665-44731-17316-60627-29707-46771-04515</b></dt>
+<dd><p>If sqlite3_open_v2() is used and the vfs option is present, then the VFS specified by the option takes precedence over the value passed as the fourth parameter to sqlite3_open_v2().
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-31855-18665-44731-17316-60627-29707-46771-04515'>context</a>, <a href='matrix/matrix_dopen.html#R-31855-18665-44731-17316-60627-29707-46771-04515'>detail</a>)</i></p></dd>
+
+<dt><b>R-31877-46991-26033-20819-54780-54256-64426-46176</b></dt>
+<dd><p>In addition to being a result code, the SQLITE_ABORT value is also used as a conflict resolution mode returned from the sqlite3_vtab_on_conflict() interface.
+<i>(source: <a href="rescode.html">rescode.html</a>, checked-by: th3/cov1/vtab04.test, th3/cov1/vtab07.test, matrix: <a href='matrix/rescode.html#R-31877-46991-26033-20819-54780-54256-64426-46176'>context</a>, <a href='matrix/matrix_drescode.html#R-31877-46991-26033-20819-54780-54256-64426-46176'>detail</a>)</i></p></dd>
+
+<dt><b>R-31881-13880-39891-17539-21926-06368-53167-38054</b></dt>
+<dd><p>When an applicable constraint violation occurs, the ROLLBACK resolution algorithm aborts the current SQL statement with an SQLITE_CONSTRAINT error and rolls back the current transaction.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict01.test, matrix: <a href='matrix/lang_conflict.html#R-31881-13880-39891-17539-21926-06368-53167-38054'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-31881-13880-39891-17539-21926-06368-53167-38054'>detail</a>)</i></p></dd>
+
+<dt><b>R-31882-08811-51062-63000-47445-51971-26333-04918</b></dt>
+<dd><p>But the FAIL resolution does not back out prior changes of the SQL statement that failed nor does it end the transaction.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict01.test, matrix: <a href='matrix/lang_conflict.html#R-31882-08811-51062-63000-47445-51971-26333-04918'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-31882-08811-51062-63000-47445-51971-26333-04918'>detail</a>)</i></p></dd>
+
+<dt><b>R-31883-14373-53297-17557-08649-10879-14648-40339</b></dt>
+<dd><p>If the path component is omitted, then the database is stored in a temporary file that will be automatically deleted when the database connection closes.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-31883-14373-53297-17557-08649-10879-14648-40339'>context</a>, <a href='matrix/matrix_duri.html#R-31883-14373-53297-17557-08649-10879-14648-40339'>detail</a>)</i></p></dd>
+
+<dt><b>R-31884-19145-46591-63123-39712-55381-35148-20037</b></dt>
+<dd><p>The syntax for the ON CONFLICT clause is as shown above for the CREATE TABLE command.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict01.test, matrix: <a href='matrix/lang_conflict.html#R-31884-19145-46591-63123-39712-55381-35148-20037'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-31884-19145-46591-63123-39712-55381-35148-20037'>detail</a>)</i></p></dd>
+
+<dt><b>R-31929-21448-54248-05455-38618-31976-59904-18809</b></dt>
+<dd><p>during the original sqlite3_set_auxdata() call when a memory allocation error occurs.
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-31929-21448-54248-05455-38618-31976-59904-18809'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-31929-21448-54248-05455-38618-31976-59904-18809'>detail</a>)</i></p></dd>
+
+<dt><b>R-31969-57825-42101-14521-32158-26846-01551-49036</b></dt>
+<dd><p>If EXCLUSIVE locking mode is set prior to the first WAL-mode database access, then SQLite never attempts to call any of the shared-memory methods and hence no shared-memory wal-index is ever created.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, th3/req1/pragma05.test, matrix: <a href='matrix/wal.html#R-31969-57825-42101-14521-32158-26846-01551-49036'>context</a>, <a href='matrix/matrix_dwal.html#R-31969-57825-42101-14521-32158-26846-01551-49036'>detail</a>)</i></p></dd>
+
+<dt><b>R-31984-08010-07046-54406-16085-56792-07633-10679</b></dt>
+<dd><p>On windows, if the absolute path begins with "/X:/" where X is any single ASCII alphabetic character ("a" through "z" or "A" through "Z") then the "X:" is understood to be the drive letter of the volume containing the file, not the toplevel directory.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-31984-08010-07046-54406-16085-56792-07633-10679'>context</a>, <a href='matrix/matrix_duri.html#R-31984-08010-07046-54406-16085-56792-07633-10679'>detail</a>)</i></p></dd>
+
+<dt><b>R-31989-51162-12344-35872-57783-63477-65151-09543</b></dt>
+<dd><p>Text is appended to the sqlite3_str object using various methods, such as sqlite3_str_appendf().
+<i>(source: <a href="c3ref/str.html">c3ref/str.html</a>, matrix: <a href='matrix/c3ref/str.html#R-31989-51162-12344-35872-57783-63477-65151-09543'>context</a>, <a href='matrix/matrix_dstr.html#R-31989-51162-12344-35872-57783-63477-65151-09543'>detail</a>)</i></p></dd>
+
+<dt><b>R-31997-24564-21710-03958-33842-06684-32775-28605</b></dt>
+<dd><p>If no schema name is specified and the TEMP keyword is not present then the table is created in the main database.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-31997-24564-21710-03958-33842-06684-32775-28605'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-31997-24564-21710-03958-33842-06684-32775-28605'>detail</a>)</i></p></dd>
+
+<dt><b>R-32023-34269-07081-56751-59037-09134-01490-38261</b></dt>
+<dd><p>The second parameter is the name of the SQL function to be created or redefined.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc01.test, matrix: <a href='matrix/c3ref/create_function.html#R-32023-34269-07081-56751-59037-09134-01490-38261'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-32023-34269-07081-56751-59037-09134-01490-38261'>detail</a>)</i></p></dd>
+
+<dt><b>R-32090-20403-62451-54879-55700-60084-08956-01962</b></dt>
+<dd><p>Autocommit mode is re-enabled by a COMMIT or ROLLBACK.
+<i>(source: <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>, matrix: <a href='matrix/c3ref/get_autocommit.html#R-32090-20403-62451-54879-55700-60084-08956-01962'>context</a>, <a href='matrix/matrix_dget_autocommit.html#R-32090-20403-62451-54879-55700-60084-08956-01962'>detail</a>)</i></p></dd>
+
+<dt><b>R-32161-57285-33501-27811-08075-48944-37415-27497</b></dt>
+<dd><p>For the purposes of comparing virtual table output values to see if the values are same value for sorting purposes, two NULL values are considered to be the same.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-32161-57285-33501-27811-08075-48944-37415-27497'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-32161-57285-33501-27811-08075-48944-37415-27497'>detail</a>)</i></p></dd>
+
+<dt><b>R-32163-18986-58302-09222-31539-08493-63340-58892</b></dt>
+<dd><p>The sqlite3_normalized_sql(P) interface returns a pointer to a UTF-8 string containing the normalized SQL text of prepared statement P.
+<i>(source: <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>, matrix: <a href='matrix/c3ref/expanded_sql.html#R-32163-18986-58302-09222-31539-08493-63340-58892'>context</a>, <a href='matrix/matrix_dexpanded_sql.html#R-32163-18986-58302-09222-31539-08493-63340-58892'>detail</a>)</i></p></dd>
+
+<dt><b>R-32172-42404-39492-45133-11034-45047-00308-58009</b></dt>
+<dd><p>Function sqlite3_backup_step(B,N) will copy up to N pages between the source and destination databases specified by sqlite3_backup object B.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup03.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-32172-42404-39492-45133-11034-45047-00308-58009'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-32172-42404-39492-45133-11034-45047-00308-58009'>detail</a>)</i></p></dd>
+
+<dt><b>R-32181-50629-37005-34302-07700-29801-11487-35180</b></dt>
+<dd><p>Queries that contain a single MIN() or MAX() aggregate function whose argument is the left-most column of an index might be satisfied by doing a single index lookup rather than by scanning the entire table.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-32181-50629-37005-34302-07700-29801-11487-35180'>context</a>, <a href='matrix/matrix_doptoverview.html#R-32181-50629-37005-34302-07700-29801-11487-35180'>detail</a>)</i></p></dd>
+
+<dt><b>R-32235-53300-57293-28888-55345-58030-49173-41178</b></dt>
+<dd><p>FOR EACH ROW implies that the SQL statements specified in the trigger may be executed (depending on the WHEN clause) for each database row being inserted, updated or deleted by the statement causing the trigger to fire.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-32235-53300-57293-28888-55345-58030-49173-41178'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-32235-53300-57293-28888-55345-58030-49173-41178'>detail</a>)</i></p></dd>
+
+<dt><b>R-32246-51249-01476-28736-10889-32262-29627-47860</b></dt>
+<dd><p>The preupdate hook is disabled by invoking sqlite3_preupdate_hook() with a NULL pointer as the second parameter.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-32246-51249-01476-28736-10889-32262-29627-47860'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-32246-51249-01476-28736-10889-32262-29627-47860'>detail</a>)</i></p></dd>
+
+<dt><b>R-32266-59420-04967-20715-46228-25200-01200-16446</b></dt>
+<dd><p>If the second parameter (zDbName) does not match the name of any open database file, then SQLITE_ERROR is returned.
+<i>(source: <a href="c3ref/file_control.html">c3ref/file_control.html</a>, matrix: <a href='matrix/c3ref/file_control.html#R-32266-59420-04967-20715-46228-25200-01200-16446'>context</a>, <a href='matrix/matrix_dfile_control.html#R-32266-59420-04967-20715-46228-25200-01200-16446'>detail</a>)</i></p></dd>
+
+<dt><b>R-32267-31938-07296-47086-37699-20446-18682-32942</b></dt>
+<dd><p>The data_store_directory pragma may modify this variable and cause it to point to memory obtained from sqlite3_malloc.
+<i>(source: <a href="c3ref/data_directory.html">c3ref/data_directory.html</a>, matrix: <a href='matrix/c3ref/data_directory.html#R-32267-31938-07296-47086-37699-20446-18682-32942'>context</a>, <a href='matrix/matrix_ddata_directory.html#R-32267-31938-07296-47086-37699-20446-18682-32942'>detail</a>)</i></p></dd>
+
+<dt><b>R-32326-44592-25744-64223-64465-06212-39042-00138</b></dt>
+<dd><p>Unlike normal SQLite columns, an integer primary key or rowid column must contain integer values. Integer primary key or rowid columns are not able to hold floating point values, strings, BLOBs, or NULLs.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-32326-44592-25744-64223-64465-06212-39042-00138'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-32326-44592-25744-64223-64465-06212-39042-00138'>detail</a>)</i></p></dd>
+
+<dt><b>R-32329-22225-62429-19871-19916-05643-31400-56048</b></dt>
+<dd><p>The sqlite_stat4.idx column holds name of the index that the row describes, or in the case of an sqlite_stat4 entry for a WITHOUT ROWID table, the name of the table itself.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-32329-22225-62429-19871-19916-05643-31400-56048'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-32329-22225-62429-19871-19916-05643-31400-56048'>detail</a>)</i></p></dd>
+
+<dt><b>R-32333-58476-07670-32465-34848-10846-33271-03352</b></dt>
+<dd><p>Triggers are automatically dropped when the table that they are associated with (the table-name table) is dropped.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-32333-58476-07670-32465-34848-10846-33271-03352'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-32333-58476-07670-32465-34848-10846-33271-03352'>detail</a>)</i></p></dd>
+
+<dt><b>R-32341-39358-46818-14772-56147-53577-21121-58224</b></dt>
+<dd><p>However if the phrase "WITHOUT ROWID" is added to the end of a CREATE TABLE statement, then the special "rowid" column is omitted.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-32341-39358-46818-14772-56147-53577-21121-58224'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-32341-39358-46818-14772-56147-53577-21121-58224'>detail</a>)</i></p></dd>
+
+<dt><b>R-32342-15392-01527-34070-05408-45314-06867-01459</b></dt>
+<dd><p>For the purposes of this pragma, the VACUUM command is considered a schema change, since VACUUM will usually alter the "rootpage" values for entries in the sqlite_schema table.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma28.test, matrix: <a href='matrix/pragma.html#R-32342-15392-01527-34070-05408-45314-06867-01459'>context</a>, <a href='matrix/matrix_dpragma.html#R-32342-15392-01527-34070-05408-45314-06867-01459'>detail</a>)</i></p></dd>
+
+<dt><b>R-32365-09043-50030-24839-64719-45976-15708-15010</b></dt>
+<dd><p>A "CREATE TABLE ... AS SELECT" statement creates and populates a database table based on the results of a SELECT statement.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-32365-09043-50030-24839-64719-45976-15708-15010'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-32365-09043-50030-24839-64719-45976-15708-15010'>detail</a>)</i></p></dd>
+
+<dt><b>R-32373-45592-10912-33759-42101-15660-63457-12819</b></dt>
+<dd><p>An iColumn of -1 indicates the left-hand operand is the rowid.
+<i>(source: <a href="c3ref/c_index_constraint_eq.html">c3ref/c_index_constraint_eq.html</a>, matrix: <a href='matrix/c3ref/c_index_constraint_eq.html#R-32373-45592-10912-33759-42101-15660-63457-12819'>context</a>, <a href='matrix/matrix_dc_index_constraint_eq.html#R-32373-45592-10912-33759-42101-15660-63457-12819'>detail</a>)</i></p></dd>
+
+<dt><b>R-32434-09092-13813-42395-15886-36394-05508-61902</b></dt>
+<dd><p>If the value of expr is NULL, then the result of the CAST expression is also NULL.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, th3/cov1/cast01.test, matrix: <a href='matrix/lang_expr.html#R-32434-09092-13813-42395-15886-36394-05508-61902'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-32434-09092-13813-42395-15886-36394-05508-61902'>detail</a>)</i></p></dd>
+
+<dt><b>R-32483-36353-28579-36241-32872-31249-13035-18067</b></dt>
+<dd><p>The 'julianday' modifier forces the time-value number to be interpreted as a julian-day number.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-32483-36353-28579-36241-32872-31249-13035-18067'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-32483-36353-28579-36241-32872-31249-13035-18067'>detail</a>)</i></p></dd>
+
+<dt><b>R-32485-24703-27801-29483-21531-11705-09294-53002</b></dt>
+<dd><p>The RENAME TO syntax changes the name of table-name to new-table-name.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/req1/altertable01.test, matrix: <a href='matrix/lang_altertable.html#R-32485-24703-27801-29483-21531-11705-09294-53002'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-32485-24703-27801-29483-21531-11705-09294-53002'>detail</a>)</i></p></dd>
+
+<dt><b>R-32560-14372-33470-16044-22975-07371-58367-11915</b></dt>
+<dd><p>The format(FORMAT,...) SQL function works like the sqlite3_mprintf() C-language function and the printf() function from the standard C library.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/printf2.test, th3/cov1/printf08.test, matrix: <a href='matrix/lang_corefunc.html#R-32560-14372-33470-16044-22975-07371-58367-11915'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-32560-14372-33470-16044-22975-07371-58367-11915'>detail</a>)</i></p></dd>
+
+<dt><b>R-32562-20566-46417-07999-12317-06673-44579-53773</b></dt>
+<dd><p>When three or more simple SELECTs are connected into a compound SELECT, they group from left to right. In other words, if "A", "B" and "C" are all simple SELECT statements, (A op B op C) is processed as ((A op B) op C).
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-32562-20566-46417-07999-12317-06673-44579-53773'>context</a>, <a href='matrix/matrix_dlang_select.html#R-32562-20566-46417-07999-12317-06673-44579-53773'>detail</a>)</i></p></dd>
+
+<dt><b>R-32575-52606-04029-38072-09330-12543-11814-27885</b></dt>
+<dd><p>There can be an arbitrary number of sqlite_stat3 entries per index.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-32575-52606-04029-38072-09330-12543-11814-27885'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-32575-52606-04029-38072-09330-12543-11814-27885'>detail</a>)</i></p></dd>
+
+<dt><b>R-32586-01296-10189-28566-58677-02270-23105-07978</b></dt>
+<dd><p>SELECT statements may be optionally preceded by a single WITH clause that defines one or more common table expressions for use within the SELECT statement.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: th3/cov1/with01.test, matrix: <a href='matrix/lang_select.html#R-32586-01296-10189-28566-58677-02270-23105-07978'>context</a>, <a href='matrix/matrix_dlang_select.html#R-32586-01296-10189-28566-58677-02270-23105-07978'>detail</a>)</i></p></dd>
+
+<dt><b>R-32604-49843-58229-61598-46331-12065-60335-40228</b></dt>
+<dd><p>Ordinary tables in SQLite are able to read and write at the same time.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree22.test, matrix: <a href='matrix/rtree.html#R-32604-49843-58229-61598-46331-12065-60335-40228'>context</a>, <a href='matrix/matrix_drtree.html#R-32604-49843-58229-61598-46331-12065-60335-40228'>detail</a>)</i></p></dd>
+
+<dt><b>R-32633-52682-08562-36271-43194-24127-51342-52899</b></dt>
+<dd><p>At least szOsFile bytes of memory are allocated by SQLite to hold the sqlite3_file structure passed as the third argument to xOpen.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-32633-52682-08562-36271-43194-24127-51342-52899'>context</a>, <a href='matrix/matrix_dvfs.html#R-32633-52682-08562-36271-43194-24127-51342-52899'>detail</a>)</i></p></dd>
+
+<dt><b>R-32667-09902-21409-45460-33680-48359-54103-12889</b></dt>
+<dd><p>The built-in date and time functions of SQLite are a special case. These functions are usually considered deterministic. However, if these functions use the string "now" as the date, or if they use the localtime modifier or the utc modifier, then they are considered non-deterministic.
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-32667-09902-21409-45460-33680-48359-54103-12889'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-32667-09902-21409-45460-33680-48359-54103-12889'>detail</a>)</i></p></dd>
+
+<dt><b>R-32671-43888-13335-47508-57448-46084-07377-01269</b></dt>
+<dd><p>Then an efficient way to find the specific ZIP code for the main SQLite office would be to run a query like this: SELECT objname FROM demo_data, demo_index WHERE demo_data.id=demo_index.id AND contained_in(demo_data.boundary, 35.37785, -80.77470) AND minX<=-80.77470 AND maxX>=-80.77470 AND minY<=35.37785 AND maxY>=35.37785;
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-32671-43888-13335-47508-57448-46084-07377-01269'>context</a>, <a href='matrix/matrix_drtree.html#R-32671-43888-13335-47508-57448-46084-07377-01269'>detail</a>)</i></p></dd>
+
+<dt><b>R-32706-07403-21974-02831-34123-06843-55643-09070</b></dt>
+<dd><p>No affinity transformations are applied to any values when comparing rows as part of a compound SELECT.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-32706-07403-21974-02831-34123-06843-55643-09070'>context</a>, <a href='matrix/matrix_dlang_select.html#R-32706-07403-21974-02831-34123-06843-55643-09070'>detail</a>)</i></p></dd>
+
+<dt><b>R-32737-17936-16355-61809-23249-50193-59951-04545</b></dt>
+<dd><p>Comments are not SQL commands, but can occur within the text of SQL queries passed to sqlite3_prepare_v2() and related interfaces.
+<i>(source: <a href="lang_comment.html">lang_comment.html</a>, checked-by: th3/req1/comment01.test, matrix: <a href='matrix/lang_comment.html#R-32737-17936-16355-61809-23249-50193-59951-04545'>context</a>, <a href='matrix/matrix_dlang_comment.html#R-32737-17936-16355-61809-23249-50193-59951-04545'>detail</a>)</i></p></dd>
+
+<dt><b>R-32760-32347-32244-52807-46376-42633-04481-03393</b></dt>
+<dd><p>The changes() SQL function is a wrapper around the sqlite3_changes64() C/C++ function and hence follows the same rules for counting changes.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, matrix: <a href='matrix/lang_corefunc.html#R-32760-32347-32244-52807-46376-42633-04481-03393'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-32760-32347-32244-52807-46376-42633-04481-03393'>detail</a>)</i></p></dd>
+
+<dt><b>R-32761-23915-57805-21917-52612-65333-62768-05976</b></dt>
+<dd><p>One would get the same answer without the use of the R*Tree index using the following simpler query: SELECT objname FROM demo_data WHERE contained_in(demo_data.boundary, 35.37785, -80.77470);
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-32761-23915-57805-21917-52612-65333-62768-05976'>context</a>, <a href='matrix/matrix_drtree.html#R-32761-23915-57805-21917-52612-65333-62768-05976'>detail</a>)</i></p></dd>
+
+<dt><b>R-32768-47925-14881-49153-08372-50935-16619-06911</b></dt>
+<dd><p>If an immediate foreign key constraint is violated, the DROP TABLE statement fails and the table is not dropped.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, th3/req1/foreignkeys22.test, matrix: <a href='matrix/foreignkeys.html#R-32768-47925-14881-49153-08372-50935-16619-06911'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-32768-47925-14881-49153-08372-50935-16619-06911'>detail</a>)</i></p></dd>
+
+<dt><b>R-32806-65233-63423-39928-44686-28712-07931-12350</b></dt>
+<dd><p>The fourth argument, pArg, is an application data pointer that is passed through as the first argument to the collating function callback.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-32806-65233-63423-39928-44686-28712-07931-12350'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-32806-65233-63423-39928-44686-28712-07931-12350'>detail</a>)</i></p></dd>
+
+<dt><b>R-32809-14620-63808-12852-40065-57653-46928-34414</b></dt>
+<dd><p>The parent key must be a named column or columns in the parent table, not the rowid.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: th3/req1/foreignkeys03.test, matrix: <a href='matrix/foreignkeys.html#R-32809-14620-63808-12852-40065-57653-46928-34414'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-32809-14620-63808-12852-40065-57653-46928-34414'>detail</a>)</i></p></dd>
+
+<dt><b>R-32811-57727-45748-41236-27648-12493-19068-34622</b></dt>
+<dd><p>When the WHERE clause and RETURNING clause are both omitted from a DELETE statement and the table being deleted has no triggers, SQLite uses an optimization to erase the entire table content without having to visit each row of the table individually.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, matrix: <a href='matrix/lang_delete.html#R-32811-57727-45748-41236-27648-12493-19068-34622'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-32811-57727-45748-41236-27648-12493-19068-34622'>detail</a>)</i></p></dd>
+
+<dt><b>R-32833-64180-27909-23166-03590-48962-49266-63231</b></dt>
+<dd><p>The "int" variable pointed to by the V parameter will be set to the id for the X-th query plan element.
+<i>(source: <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a>, matrix: <a href='matrix/c3ref/c_scanstat_est.html#R-32833-64180-27909-23166-03590-48962-49266-63231'>context</a>, <a href='matrix/matrix_dc_scanstat_est.html#R-32833-64180-27909-23166-03590-48962-49266-63231'>detail</a>)</i></p></dd>
+
+<dt><b>R-32857-15826-08814-08217-40160-38064-19925-14488</b></dt>
+<dd><p>Subsequent calls to sqlite3_get_auxdata(C,N) return P from the most recent sqlite3_set_auxdata(C,N,P,X) call if the metadata is still valid or NULL if the metadata has been discarded.
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-32857-15826-08814-08217-40160-38064-19925-14488'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-32857-15826-08814-08217-40160-38064-19925-14488'>detail</a>)</i></p></dd>
+
+<dt><b>R-32918-61474-62391-07743-12159-44767-00770-02393</b></dt>
+<dd><p>Before entering a trigger program the value returned by sqlite3_changes() function is saved. After the trigger program has finished, the original value is restored.
+<i>(source: <a href="c3ref/changes.html">c3ref/changes.html</a>, checked-by: tcl/e_changes.test, matrix: <a href='matrix/c3ref/changes.html#R-32918-61474-62391-07743-12159-44767-00770-02393'>context</a>, <a href='matrix/matrix_dchanges.html#R-32918-61474-62391-07743-12159-44767-00770-02393'>detail</a>)</i></p></dd>
+
+<dt><b>R-32922-61395-36624-37075-37487-29134-31632-26826</b></dt>
+<dd><p>Thus, if a COLLATE operator is used anywhere in a comparison expression, the collating function defined by that operator is used for string comparison regardless of what table columns might be a part of that expression.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-32922-61395-36624-37075-37487-29134-31632-26826'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-32922-61395-36624-37075-37487-29134-31632-26826'>detail</a>)</i></p></dd>
+
+<dt><b>R-32925-06786-44484-40389-19544-51015-10010-30515</b></dt>
+<dd><p>Each column name or expression can be followed by one of the "ASC" or "DESC" keywords to indicate sort order.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx02.test, matrix: <a href='matrix/lang_createindex.html#R-32925-06786-44484-40389-19544-51015-10010-30515'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-32925-06786-44484-40389-19544-51015-10010-30515'>detail</a>)</i></p></dd>
+
+<dt><b>R-33035-16498-10379-54790-22685-33042-10966-12535</b></dt>
+<dd><p>If a memory allocation fails, then SQLITE_NOMEM is returned.
+<i>(source: <a href="c3ref/complete.html">c3ref/complete.html</a>, checked-by: th3/cov1/complete01.test, matrix: <a href='matrix/c3ref/complete.html#R-33035-16498-10379-54790-22685-33042-10966-12535'>context</a>, <a href='matrix/matrix_dcomplete.html#R-33035-16498-10379-54790-22685-33042-10966-12535'>detail</a>)</i></p></dd>
+
+<dt><b>R-33038-09382-52096-22256-12094-15064-07280-37767</b></dt>
+<dd><p>If the second argument to SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally rounded down to the next smaller multiple of 8.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-33038-09382-52096-22256-12094-15064-07280-37767'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-33038-09382-52096-22256-12094-15064-07280-37767'>detail</a>)</i></p></dd>
+
+<dt><b>R-33075-33190-25707-00729-29148-31049-04309-45993</b></dt>
+<dd><p>If a keyword in single quotes (ex: 'key' or 'glob') is used in a context where an identifier is allowed but where a string literal is not allowed, then the token is understood to be an identifier instead of a string literal.
+<i>(source: <a href="lang_keywords.html">lang_keywords.html</a>, checked-by: th3/req1/keyword01.test, matrix: <a href='matrix/lang_keywords.html#R-33075-33190-25707-00729-29148-31049-04309-45993'>context</a>, <a href='matrix/matrix_dlang_keywords.html#R-33075-33190-25707-00729-29148-31049-04309-45993'>detail</a>)</i></p></dd>
+
+<dt><b>R-33080-59193-42664-27310-42541-31106-33090-39782</b></dt>
+<dd><p>Checkpoints initiated by this mechanism are PASSIVE.
+<i>(source: <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>, checked-by: tcl/e_walauto.test, matrix: <a href='matrix/c3ref/wal_autocheckpoint.html#R-33080-59193-42664-27310-42541-31106-33090-39782'>context</a>, <a href='matrix/matrix_dwal_autocheckpoint.html#R-33080-59193-42664-27310-42541-31106-33090-39782'>detail</a>)</i></p></dd>
+
+<dt><b>R-33113-07215-37933-59376-21317-00912-14100-16891</b></dt>
+<dd><p>The iRowid field is the rowid (the first of the 3 to 11 columns in the R*Tree) for the element being considered. iRowid is only valid for leaves.
+<i>(source: <a href="rtree.html">rtree.html</a>, matrix: <a href='matrix/rtree.html#R-33113-07215-37933-59376-21317-00912-14100-16891'>context</a>, <a href='matrix/matrix_drtree.html#R-33113-07215-37933-59376-21317-00912-14100-16891'>detail</a>)</i></p></dd>
+
+<dt><b>R-33124-58846-63098-57444-60113-38939-22033-09777</b></dt>
+<dd><p>Note that when the right-hand side of a LIKE or GLOB operator is a parameter and the statement is prepared using sqlite3_prepare_v2() or sqlite3_prepare16_v2() then the statement is automatically reparsed and recompiled on the first sqlite3_step() call of each run if the binding to the right-hand side parameter has changed since the previous run.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-33124-58846-63098-57444-60113-38939-22033-09777'>context</a>, <a href='matrix/matrix_doptoverview.html#R-33124-58846-63098-57444-60113-38939-22033-09777'>detail</a>)</i></p></dd>
+
+<dt><b>R-33140-21501-29804-63127-48240-59602-40241-17867</b></dt>
+<dd><p>For the LIKE operator, if case_sensitive_like mode is enabled then the column must indexed using BINARY collating sequence, or if case_sensitive_like mode is disabled then the column must indexed using built-in NOCASE collating sequence.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, checked-by: th3/cov1/where03.test, th3/cov1/where03b.test, matrix: <a href='matrix/optoverview.html#R-33140-21501-29804-63127-48240-59602-40241-17867'>context</a>, <a href='matrix/matrix_doptoverview.html#R-33140-21501-29804-63127-48240-59602-40241-17867'>detail</a>)</i></p></dd>
+
+<dt><b>R-33142-02092-43419-10432-03484-54260-43121-37781</b></dt>
+<dd><p>AUTOINCREMENT does not work on WITHOUT ROWID tables.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-33142-02092-43419-10432-03484-54260-43121-37781'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-33142-02092-43419-10432-03484-54260-43121-37781'>detail</a>)</i></p></dd>
+
+<dt><b>R-33193-25721-56063-44799-32858-24442-12453-07603</b></dt>
+<dd><p>The sqlite3_value_encoding(X) interface returns one of SQLITE_UTF8, SQLITE_UTF16BE, or SQLITE_UTF16LE according to the current text encoding of the value X, assuming that X has type TEXT.
+<i>(source: <a href="c3ref/value_encoding.html">c3ref/value_encoding.html</a>, matrix: <a href='matrix/c3ref/value_encoding.html#R-33193-25721-56063-44799-32858-24442-12453-07603'>context</a>, <a href='matrix/matrix_dvalue_encoding.html#R-33193-25721-56063-44799-32858-24442-12453-07603'>detail</a>)</i></p></dd>
+
+<dt><b>R-33211-38833-64331-54724-35381-31821-05246-63257</b></dt>
+<dd><p>These routines do not parse the SQL statements thus will not detect syntactically incorrect SQL.
+<i>(source: <a href="c3ref/complete.html">c3ref/complete.html</a>, checked-by: th3/cov1/complete01.test, matrix: <a href='matrix/c3ref/complete.html#R-33211-38833-64331-54724-35381-31821-05246-63257'>context</a>, <a href='matrix/matrix_dcomplete.html#R-33211-38833-64331-54724-35381-31821-05246-63257'>detail</a>)</i></p></dd>
+
+<dt><b>R-33257-44249-04384-28673-29527-48027-05174-23036</b></dt>
+<dd><p>The update hook is not invoked when WITHOUT ROWID tables are modified.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: tcl/hook.test, matrix: <a href='matrix/c3ref/update_hook.html#R-33257-44249-04384-28673-29527-48027-05174-23036'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-33257-44249-04384-28673-29527-48027-05174-23036'>detail</a>)</i></p></dd>
+
+<dt><b>R-33315-53384-19536-00039-42426-59902-48545-24529</b></dt>
+<dd><p>Thus, the backup may be performed on a live source database without preventing other database connections from reading or writing to the source database while the backup is underway.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup01.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-33315-53384-19536-00039-42426-59902-48545-24529'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-33315-53384-19536-00039-42426-59902-48545-24529'>detail</a>)</i></p></dd>
+
+<dt><b>R-33316-19795-08370-35100-15159-39307-16097-56767</b></dt>
+<dd><p>If the most recent call to sqlite3_step(S) for the prepared statement S indicated an error, then sqlite3_reset(S) returns an appropriate error code.
+<i>(source: <a href="c3ref/reset.html">c3ref/reset.html</a>, checked-by: th3/th3util.c, matrix: <a href='matrix/c3ref/reset.html#R-33316-19795-08370-35100-15159-39307-16097-56767'>context</a>, <a href='matrix/matrix_dreset.html#R-33316-19795-08370-35100-15159-39307-16097-56767'>detail</a>)</i></p></dd>
+
+<dt><b>R-33326-45252-38720-14593-54555-59144-23018-05599</b></dt>
+<dd><p>The ON DELETE and ON UPDATE action associated with each foreign key in an SQLite database is one of "NO ACTION", "RESTRICT", "SET NULL", "SET DEFAULT" or "CASCADE".
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: src/parse.y, tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-33326-45252-38720-14593-54555-59144-23018-05599'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-33326-45252-38720-14593-54555-59144-23018-05599'>detail</a>)</i></p></dd>
+
+<dt><b>R-33352-16228-19462-25047-13980-23357-27400-59118</b></dt>
+<dd><p>When the EXPLAIN keyword appears by itself it causes the statement to behave as a query that returns the sequence of virtual machine instructions it would have used to execute the command had the EXPLAIN keyword not been present.
+<i>(source: <a href="lang_explain.html">lang_explain.html</a>, checked-by: th3/cov1/vdbeaux01.test, matrix: <a href='matrix/lang_explain.html#R-33352-16228-19462-25047-13980-23357-27400-59118'>context</a>, <a href='matrix/matrix_dlang_explain.html#R-33352-16228-19462-25047-13980-23357-27400-59118'>detail</a>)</i></p></dd>
+
+<dt><b>R-33368-33178-21159-57347-39405-35254-59100-49447</b></dt>
+<dd><p>The first parameter, szPage, is the size in bytes of the pages that must be allocated by the cache.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: th3/th3pcache.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-33368-33178-21159-57347-39405-35254-59100-49447'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-33368-33178-21159-57347-39405-35254-59100-49447'>detail</a>)</i></p></dd>
+
+<dt><b>R-33393-31741-20908-00667-39287-64680-56276-36828</b></dt>
+<dd><p>Terms of the ORDER BY clause that is part of a SELECT statement may be assigned a collating sequence using the COLLATE operator, in which case the specified collating function is used for sorting.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_10.test, matrix: <a href='matrix/datatype3.html#R-33393-31741-20908-00667-39287-64680-56276-36828'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-33393-31741-20908-00667-39287-64680-56276-36828'>detail</a>)</i></p></dd>
+
+<dt><b>R-33401-06099-44102-08352-15092-58623-33401-34005</b></dt>
+<dd><p>SQLITE_OPEN_READONLY The database is opened in read-only mode. If the database does not already exist, an error is returned.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-33401-06099-44102-08352-15092-58623-33401-34005'>context</a>, <a href='matrix/matrix_dopen.html#R-33401-06099-44102-08352-15092-58623-33401-34005'>detail</a>)</i></p></dd>
+
+<dt><b>R-33414-20006-38430-38330-20007-08440-33108-23538</b></dt>
+<dd><p>The SQLITE_UTF16 and SQLITE_UTF16_ALIGNED values for eTextRep force strings to be UTF16 with native byte order.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-33414-20006-38430-38330-20007-08440-33108-23538'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-33414-20006-38430-38330-20007-08440-33108-23538'>detail</a>)</i></p></dd>
+
+<dt><b>R-33431-18865-50841-57619-09103-02697-30472-50548</b></dt>
+<dd><p>Unix timestamps for the first 63 days of 1970 will be interpreted as julian day numbers.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, matrix: <a href='matrix/lang_datefunc.html#R-33431-18865-50841-57619-09103-02697-30472-50548'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-33431-18865-50841-57619-09103-02697-30472-50548'>detail</a>)</i></p></dd>
+
+<dt><b>R-33440-07331-05623-12245-41589-49905-51548-00120</b></dt>
+<dd><p>For the purposes of the DEFAULT clause, an expression is considered constant if it contains no sub-queries, column or table references, bound parameters, or string literals enclosed in double-quotes instead of single-quotes.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-33440-07331-05623-12245-41589-49905-51548-00120'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-33440-07331-05623-12245-41589-49905-51548-00120'>detail</a>)</i></p></dd>
+
+<dt><b>R-33443-64794-37777-63092-51102-53301-52354-10216</b></dt>
+<dd><p>For non-TEMP triggers, the table to be modified or queried must exist in the same database as the table or view to which the trigger is attached.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-33443-64794-37777-63092-51102-53301-52354-10216'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-33443-64794-37777-63092-51102-53301-52354-10216'>detail</a>)</i></p></dd>
+
+<dt><b>R-33490-49513-63336-09770-17828-12612-45403-52100</b></dt>
+<dd><p>The third column is the number of pages in the write-ahead log file that have been successfully moved back into the database file at the conclusion of the checkpoint.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-33490-49513-63336-09770-17828-12612-45403-52100'>context</a>, <a href='matrix/matrix_dpragma.html#R-33490-49513-63336-09770-17828-12612-45403-52100'>detail</a>)</i></p></dd>
+
+<dt><b>R-33496-49460-40885-47410-47365-30809-19419-02033</b></dt>
+<dd><p>Module names must be registered before creating a new virtual table using the module and before using a preexisting virtual table for the module.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-33496-49460-40885-47410-47365-30809-19419-02033'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-33496-49460-40885-47410-47365-30809-19419-02033'>detail</a>)</i></p></dd>
+
+<dt><b>R-33509-39458-36310-35502-14516-21374-43920-49454</b></dt>
+<dd><p>A question mark followed by a number NNN holds a spot for the NNN-th parameter. NNN must be between 1 and SQLITE_MAX_VARIABLE_NUMBER.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-33509-39458-36310-35502-14516-21374-43920-49454'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-33509-39458-36310-35502-14516-21374-43920-49454'>detail</a>)</i></p></dd>
+
+<dt><b>R-33528-20612-64279-03791-45165-25207-10127-32608</b></dt>
+<dd><p>If no database is specified as part of the object reference, then SQLite searches the main, temp and all attached databases for an object with a matching name. The temp database is searched first, followed by the main database, followed all attached databases in the order that they were attached. The reference resolves to the first match found.
+<i>(source: <a href="lang_naming.html">lang_naming.html</a>, checked-by: tcl/e_resolve.test, matrix: <a href='matrix/lang_naming.html#R-33528-20612-64279-03791-45165-25207-10127-32608'>context</a>, <a href='matrix/matrix_dlang_naming.html#R-33528-20612-64279-03791-45165-25207-10127-32608'>detail</a>)</i></p></dd>
+
+<dt><b>R-33553-19363-35042-00573-64070-53843-36958-05658</b></dt>
+<dd><p>The subquery does not use OFFSET.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-33553-19363-35042-00573-64070-53843-36958-05658'>context</a>, <a href='matrix/matrix_doptoverview.html#R-33553-19363-35042-00573-64070-53843-36958-05658'>detail</a>)</i></p></dd>
+
+<dt><b>R-33570-18895-27619-21793-53436-58897-32599-21994</b></dt>
+<dd><p>The following table summarizes the interaction of the SQLITE_TEMP_STORE preprocessor macro and the temp_store pragma: SQLITE_TEMP_STORE PRAGMAtemp_store Storage used forTEMP tables and indices 0 any file 1 0 file 1 1 file 1 2 memory 2 0 memory 2 1 file 2 2 memory 3 any memory
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-33570-18895-27619-21793-53436-58897-32599-21994'>context</a>, <a href='matrix/matrix_dpragma.html#R-33570-18895-27619-21793-53436-58897-32599-21994'>detail</a>)</i></p></dd>
+
+<dt><b>R-33599-53132-08850-48831-58699-38998-10150-06398</b></dt>
+<dd><p>The sqlite_stat4.nEq column holds a list of N integers where the K-th integer is the approximate number of entries in the index whose left-most K columns exactly match the K left-most columns of the sample.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-33599-53132-08850-48831-58699-38998-10150-06398'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-33599-53132-08850-48831-58699-38998-10150-06398'>detail</a>)</i></p></dd>
+
+<dt><b>R-33611-57934-17501-27849-33098-62168-45294-46068</b></dt>
+<dd><p>The "auto" modifier must immediately follow the initial time-value.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: src/date.c, th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-33611-57934-17501-27849-33098-62168-45294-46068'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-33611-57934-17501-27849-33098-62168-45294-46068'>detail</a>)</i></p></dd>
+
+<dt><b>R-33611-59266-40471-38425-31292-58317-36705-42935</b></dt>
+<dd><p>If any input to sum() is neither an integer nor a NULL, then sum() returns a floating point value which is an approximation of the mathematical sum.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-33611-59266-40471-38425-31292-58317-36705-42935'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-33611-59266-40471-38425-31292-58317-36705-42935'>detail</a>)</i></p></dd>
+
+<dt><b>R-33626-44500-44579-55445-20026-07899-19169-03498</b></dt>
+<dd><p>There may be at most one unlock-notify callback registered by a blocked connection. If sqlite3_unlock_notify() is called when the blocked connection already has a registered unlock-notify callback, then the new callback replaces the old.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-33626-44500-44579-55445-20026-07899-19169-03498'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-33626-44500-44579-55445-20026-07899-19169-03498'>detail</a>)</i></p></dd>
+
+<dt><b>R-33626-48418-46855-58211-38849-29467-54588-01790</b></dt>
+<dd><p>In SQLite, if any of the child key columns (in this case songartist and songalbum) are NULL, then there is no requirement for a corresponding row in the parent table.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys11.test, matrix: <a href='matrix/foreignkeys.html#R-33626-48418-46855-58211-38849-29467-54588-01790'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-33626-48418-46855-58211-38849-29467-54588-01790'>detail</a>)</i></p></dd>
+
+<dt><b>R-33632-01248-54038-23553-34716-03139-59135-16451</b></dt>
+<dd><p>These functions return the number of rows modified, inserted or deleted by the most recently completed INSERT, UPDATE or DELETE statement on the database connection specified by the only parameter.
+<i>(source: <a href="c3ref/changes.html">c3ref/changes.html</a>, matrix: <a href='matrix/c3ref/changes.html#R-33632-01248-54038-23553-34716-03139-59135-16451'>context</a>, <a href='matrix/matrix_dchanges.html#R-33632-01248-54038-23553-34716-03139-59135-16451'>detail</a>)</i></p></dd>
+
+<dt><b>R-33653-36784-59061-18109-40323-14817-19315-26090</b></dt>
+<dd><p>Use these routines to access all values on the right-hand side of the IN constraint using code like the following: &nbsp; for(rc=sqlite3_vtab_in_first(pList, &pVal); &nbsp; rc==SQLITE_OK && pVal &nbsp; rc=sqlite3_vtab_in_next(pList, &pVal) &nbsp; ){ &nbsp; // do something with pVal &nbsp; } &nbsp; if( rc!=SQLITE_OK ){ &nbsp; // an error has occurred &nbsp; }
+<i>(source: <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>, matrix: <a href='matrix/c3ref/vtab_in_first.html#R-33653-36784-59061-18109-40323-14817-19315-26090'>context</a>, <a href='matrix/matrix_dvtab_in_first.html#R-33653-36784-59061-18109-40323-14817-19315-26090'>detail</a>)</i></p></dd>
+
+<dt><b>R-33670-36097-38044-00457-34720-22769-46022-27724</b></dt>
+<dd><p>A question mark that is not followed by a number creates a parameter with a number one greater than the largest parameter number already assigned.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-33670-36097-38044-00457-34720-22769-46022-27724'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-33670-36097-38044-00457-34720-22769-46022-27724'>detail</a>)</i></p></dd>
+
+<dt><b>R-33693-50180-37638-14993-01835-21324-19267-11438</b></dt>
+<dd><p>The REGEXP operator is a special syntax for the regexp() user function.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-33693-50180-37638-14993-01835-21324-19267-11438'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-33693-50180-37638-14993-01835-21324-19267-11438'>detail</a>)</i></p></dd>
+
+<dt><b>R-33696-20860-22256-33727-50165-31840-30518-14765</b></dt>
+<dd><p>In a WITHOUT ROWID table, there is no sqlite_schema entry for the PRIMARY KEY, but the "sqlite_autoindex_TABLE_N" name is set aside for the PRIMARY KEY as if the sqlite_schema entry did exist. This will affect the numbering of subsequent UNIQUE constraints.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-33696-20860-22256-33727-50165-31840-30518-14765'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-33696-20860-22256-33727-50165-31840-30518-14765'>detail</a>)</i></p></dd>
+
+<dt><b>R-33702-40977-45266-09970-23543-03927-64135-03767</b></dt>
+<dd><p>If the X parameter is not an xFilter argument that was selected for all-at-once IN constraint processing, then these routines return SQLITE_MISUSE
+<i>(source: <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>, matrix: <a href='matrix/c3ref/vtab_in_first.html#R-33702-40977-45266-09970-23543-03927-64135-03767'>context</a>, <a href='matrix/matrix_dvtab_in_first.html#R-33702-40977-45266-09970-23543-03927-64135-03767'>detail</a>)</i></p></dd>
+
+<dt><b>R-33708-43819-48693-15112-15003-18731-38490-26979</b></dt>
+<dd><p>The content allows the text being indexed to be stored in a separate table distinct from the FTS4 table, or even outside of SQLite.
+<i>(source: <a href="fts3.html">fts3.html</a>, matrix: <a href='matrix/fts3.html#R-33708-43819-48693-15112-15003-18731-38490-26979'>context</a>, <a href='matrix/matrix_dfts3.html#R-33708-43819-48693-15112-15003-18731-38490-26979'>detail</a>)</i></p></dd>
+
+<dt><b>R-33724-43128-37475-21517-54367-56577-55269-13573</b></dt>
+<dd><p>PRAGMA legacy_file_format; This pragma no longer functions. It has become a no-op.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-33724-43128-37475-21517-54367-56577-55269-13573'>context</a>, <a href='matrix/matrix_dpragma.html#R-33724-43128-37475-21517-54367-56577-55269-13573'>detail</a>)</i></p></dd>
+
+<dt><b>R-33750-29536-47450-45123-25964-11560-21995-55948</b></dt>
+<dd><p>Otherwise, the SELECT returns the first N rows of its result set only, where N is the value that the LIMIT expression evaluates to.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-33750-29536-47450-45123-25964-11560-21995-55948'>context</a>, <a href='matrix/matrix_dlang_select.html#R-33750-29536-47450-45123-25964-11560-21995-55948'>detail</a>)</i></p></dd>
+
+<dt><b>R-33754-02880-14847-48352-49156-46492-55020-40559</b></dt>
+<dd><p>you can say "LEFT RIGHT JOIN" which is the same as "FULL JOIN".
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/join8.test, matrix: <a href='matrix/lang_select.html#R-33754-02880-14847-48352-49156-46492-55020-40559'>context</a>, <a href='matrix/matrix_dlang_select.html#R-33754-02880-14847-48352-49156-46492-55020-40559'>detail</a>)</i></p></dd>
+
+<dt><b>R-33788-46243-41692-58767-41171-41314-21464-32804</b></dt>
+<dd><p>In this case, the first expression is used as the OFFSET expression and the second as the LIMIT expression.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-33788-46243-41692-58767-41171-41314-21464-32804'>context</a>, <a href='matrix/matrix_dlang_select.html#R-33788-46243-41692-58767-41171-41314-21464-32804'>detail</a>)</i></p></dd>
+
+<dt><b>R-33789-46762-48757-32242-41831-26284-33607-40788</b></dt>
+<dd><p>The content of an R*Tree index is actually stored in three ordinary SQLite tables with names derived from the name of the R*Tree.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq02.test, matrix: <a href='matrix/rtree.html#R-33789-46762-48757-32242-41831-26284-33607-40788'>context</a>, <a href='matrix/matrix_drtree.html#R-33789-46762-48757-32242-41831-26284-33607-40788'>detail</a>)</i></p></dd>
+
+<dt><b>R-33800-32193-29222-19847-14904-43461-36254-14018</b></dt>
+<dd><p>If the required lock still cannot be obtained, then the database is skipped and an attempt made to flush any dirty pages belonging to the next (if any) database.
+<i>(source: <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>, matrix: <a href='matrix/c3ref/db_cacheflush.html#R-33800-32193-29222-19847-14904-43461-36254-14018'>context</a>, <a href='matrix/matrix_ddb_cacheflush.html#R-33800-32193-29222-19847-14904-43461-36254-14018'>detail</a>)</i></p></dd>
+
+<dt><b>R-33848-17975-36657-57635-49129-43335-29769-30640</b></dt>
+<dd><p>PRAGMA schema.incremental_vacuum(N); PRAGMA schema.incremental_vacuum; The incremental_vacuum pragma causes up to N pages to be removed from the freelist.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma21.test, matrix: <a href='matrix/pragma.html#R-33848-17975-36657-57635-49129-43335-29769-30640'>context</a>, <a href='matrix/matrix_dpragma.html#R-33848-17975-36657-57635-49129-43335-29769-30640'>detail</a>)</i></p></dd>
+
+<dt><b>R-33883-28833-60318-48575-53923-47015-06615-40154</b></dt>
+<dd><p>Foreign key DDL errors are reported regardless of whether or not foreign key constraints are enabled when the table is created.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys08.test, matrix: <a href='matrix/foreignkeys.html#R-33883-28833-60318-48575-53923-47015-06615-40154'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-33883-28833-60318-48575-53923-47015-06615-40154'>detail</a>)</i></p></dd>
+
+<dt><b>R-33917-24086-34361-61973-51178-03721-35954-00662</b></dt>
+<dd><p>However, if the "IF NOT EXISTS" clause is specified as part of the CREATE TABLE statement and a table or view of the same name already exists, the CREATE TABLE command simply has no effect (and no error message is returned).
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-33917-24086-34361-61973-51178-03721-35954-00662'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-33917-24086-34361-61973-51178-03721-35954-00662'>detail</a>)</i></p></dd>
+
+<dt><b>R-33948-22286-15597-10485-25275-41982-01072-17156</b></dt>
+<dd><p>The algorithm specified in the OR clause of an INSERT or UPDATE overrides any algorithm specified in a CREATE TABLE.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict04.test, matrix: <a href='matrix/lang_conflict.html#R-33948-22286-15597-10485-25275-41982-01072-17156'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-33948-22286-15597-10485-25275-41982-01072-17156'>detail</a>)</i></p></dd>
+
+<dt><b>R-33950-57093-23380-64554-61801-30987-12746-10574</b></dt>
+<dd><p>All indices and triggers associated with the table are also deleted.
+<i>(source: <a href="lang_droptable.html">lang_droptable.html</a>, checked-by: th3/req1/droptable01.test, matrix: <a href='matrix/lang_droptable.html#R-33950-57093-23380-64554-61801-30987-12746-10574'>context</a>, <a href='matrix/matrix_dlang_droptable.html#R-33950-57093-23380-64554-61801-30987-12746-10574'>detail</a>)</i></p></dd>
+
+<dt><b>R-33977-57271-59293-02679-37541-34864-44396-22637</b></dt>
+<dd><p>The left-most column is column 0 for these routines.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-33977-57271-59293-02679-37541-34864-44396-22637'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-33977-57271-59293-02679-37541-34864-44396-22637'>detail</a>)</i></p></dd>
+
+<dt><b>R-33990-33527-11105-07702-18476-34779-54347-40484</b></dt>
+<dd><p>When casting to INTEGER, if the text looks like a floating point value with an exponent, the exponent will be ignored because it is no part of the integer prefix.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/cast.test, matrix: <a href='matrix/lang_expr.html#R-33990-33527-11105-07702-18476-34779-54347-40484'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-33990-33527-11105-07702-18476-34779-54347-40484'>detail</a>)</i></p></dd>
+
+<dt><b>R-34009-51042-01012-14502-52205-32655-22973-26621</b></dt>
+<dd><p>If Y is negative then the first character of the substring is found by counting from the right rather than the left.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-34009-51042-01012-14502-52205-32655-22973-26621'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-34009-51042-01012-14502-52205-32655-22973-26621'>detail</a>)</i></p></dd>
+
+<dt><b>R-34021-38482-31030-34652-01469-03047-61601-46080</b></dt>
+<dd><p>The optimizer automatically inverts terms of the form "expr OP column" and makes other simplifications to the WHERE clause in an attempt to get as many WHERE clause terms into the form shown above as possible.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-34021-38482-31030-34652-01469-03047-61601-46080'>context</a>, <a href='matrix/matrix_dindex_info.html#R-34021-38482-31030-34652-01469-03047-61601-46080'>detail</a>)</i></p></dd>
+
+<dt><b>R-34023-52929-12261-02515-22772-45177-48508-47679</b></dt>
+<dd><p>The query string is optional.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-34023-52929-12261-02515-22772-45177-48508-47679'>context</a>, <a href='matrix/matrix_duri.html#R-34023-52929-12261-02515-22772-45177-48508-47679'>detail</a>)</i></p></dd>
+
+<dt><b>R-34027-00617-24854-21763-47858-39540-20896-63477</b></dt>
+<dd><p>If the blob handle being closed was opened for read-write access, and if the database is in auto-commit mode and there are no other open read-write blob handles or active write statements, the current transaction is committed.
+<i>(source: <a href="c3ref/blob_close.html">c3ref/blob_close.html</a>, checked-by: tcl/e_blobclose.test, matrix: <a href='matrix/c3ref/blob_close.html#R-34027-00617-24854-21763-47858-39540-20896-63477'>context</a>, <a href='matrix/matrix_dblob_close.html#R-34027-00617-24854-21763-47858-39540-20896-63477'>detail</a>)</i></p></dd>
+
+<dt><b>R-34068-60670-00760-36695-36282-03640-02435-26992</b></dt>
+<dd><p>SQLITE_OPEN_PRIVATECACHE The database is opened shared cache disabled, overriding the default shared cache setting provided by sqlite3_enable_shared_cache().
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-34068-60670-00760-36695-36282-03640-02435-26992'>context</a>, <a href='matrix/matrix_dopen.html#R-34068-60670-00760-36695-36282-03640-02435-26992'>detail</a>)</i></p></dd>
+
+<dt><b>R-34076-18298-19777-37411-10938-20306-38293-17518</b></dt>
+<dd><p>The RETURNING clause may not contain top-level aggregate functions or window functions.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-34076-18298-19777-37411-10938-20306-38293-17518'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-34076-18298-19777-37411-10938-20306-38293-17518'>detail</a>)</i></p></dd>
+
+<dt><b>R-34109-39108-27898-16254-24563-58797-32171-17937</b></dt>
+<dd><p>If the CHECK expression evaluates to NULL, or any other non-zero value, it is not a constraint violation.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-34109-39108-27898-16254-24563-58797-32171-17937'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-34109-39108-27898-16254-24563-58797-32171-17937'>detail</a>)</i></p></dd>
+
+<dt><b>R-34136-00089-38264-11064-58519-06639-00881-26978</b></dt>
+<dd><p>SQLite attempts to coerce the data into the appropriate type using the usual affinity rules, as PostgreSQL, MySQL, SQL Server, and Oracle all do.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-34136-00089-38264-11064-58519-06639-00881-26978'>context</a>, <a href='matrix/matrix_dstricttables.html#R-34136-00089-38264-11064-58519-06639-00881-26978'>detail</a>)</i></p></dd>
+
+<dt><b>R-34146-30782-53907-40582-61923-47415-21722-12527</b></dt>
+<dd><p>Column zColumn is part of an index, PRIMARY KEY or UNIQUE constraint and the blob is being opened for read/write access
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_open.html#R-34146-30782-53907-40582-61923-47415-21722-12527'>context</a>, <a href='matrix/matrix_dblob_open.html#R-34146-30782-53907-40582-61923-47415-21722-12527'>detail</a>)</i></p></dd>
+
+<dt><b>R-34186-52914-35981-17820-54007-24600-55033-63809</b></dt>
+<dd><p>The rank of the column within the index. (0 means left-most.)
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15.test, matrix: <a href='matrix/pragma.html#R-34186-52914-35981-17820-54007-24600-55033-63809'>context</a>, <a href='matrix/matrix_dpragma.html#R-34186-52914-35981-17820-54007-24600-55033-63809'>detail</a>)</i></p></dd>
+
+<dt><b>R-34230-56049-07873-23044-54462-14755-43207-20479</b></dt>
+<dd><p>SQLite automatically increments the schema-version whenever the schema changes.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/build.c, th3/req1/pragma28.test, matrix: <a href='matrix/pragma.html#R-34230-56049-07873-23044-54462-14755-43207-20479'>context</a>, <a href='matrix/matrix_dpragma.html#R-34230-56049-07873-23044-54462-14755-43207-20479'>detail</a>)</i></p></dd>
+
+<dt><b>R-34234-52126-13891-36855-21265-08475-46071-60317</b></dt>
+<dd><p>The default mode is for LIKE comparisons to be insensitive to differences of case for latin1 characters.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, checked-by: th3/cov1/pragma02.test, th3/cov1/where03.test, th3/cov1/where03b.test, matrix: <a href='matrix/optoverview.html#R-34234-52126-13891-36855-21265-08475-46071-60317'>context</a>, <a href='matrix/matrix_doptoverview.html#R-34234-52126-13891-36855-21265-08475-46071-60317'>detail</a>)</i></p></dd>
+
+<dt><b>R-34264-15842-51908-27355-58812-13180-15279-38051</b></dt>
+<dd><p>The legacy_file_format pragma can be used to cause SQLite to create new database files using format 1.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-34264-15842-51908-27355-58812-13180-15279-38051'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-34264-15842-51908-27355-58812-13180-15279-38051'>detail</a>)</i></p></dd>
+
+<dt><b>R-34271-33106-55360-31605-05941-37144-32278-15012</b></dt>
+<dd><p>PRAGMA automatic_index; PRAGMA automatic_index = boolean; Query, set, or clear the automatic indexing capability.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/autoindex1.test, th3/req1/pragma08.test, matrix: <a href='matrix/pragma.html#R-34271-33106-55360-31605-05941-37144-32278-15012'>context</a>, <a href='matrix/matrix_dpragma.html#R-34271-33106-55360-31605-05941-37144-32278-15012'>detail</a>)</i></p></dd>
+
+<dt><b>R-34280-42283-63975-25394-58653-47378-35851-53437</b></dt>
+<dd><p>The count(X) function returns a count of the number of times that X is not NULL in a group.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-34280-42283-63975-25394-58653-47378-35851-53437'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-34280-42283-63975-25394-58653-47378-35851-53437'>detail</a>)</i></p></dd>
+
+<dt><b>R-34293-31480-01160-31597-61187-16604-15204-31151</b></dt>
+<dd><p>The sqlite3_extended_errcode() interface is the same except that it always returns the extended result code even when extended result codes are disabled.
+<i>(source: <a href="c3ref/errcode.html">c3ref/errcode.html</a>, matrix: <a href='matrix/c3ref/errcode.html#R-34293-31480-01160-31597-61187-16604-15204-31151'>context</a>, <a href='matrix/matrix_derrcode.html#R-34293-31480-01160-31597-61187-16604-15204-31151'>detail</a>)</i></p></dd>
+
+<dt><b>R-34314-06007-23852-03493-52380-57466-48633-09703</b></dt>
+<dd><p>The sqlite3_sql(P) interface returns a pointer to a copy of the UTF-8 SQL text used to create prepared statement P if P was created by sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(), or sqlite3_prepare16_v3().
+<i>(source: <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>, checked-by: th3/req1/sql01.test, th3/th3util.c, matrix: <a href='matrix/c3ref/expanded_sql.html#R-34314-06007-23852-03493-52380-57466-48633-09703'>context</a>, <a href='matrix/matrix_dexpanded_sql.html#R-34314-06007-23852-03493-52380-57466-48633-09703'>detail</a>)</i></p></dd>
+
+<dt><b>R-34326-56357-56903-53526-53046-15549-19745-22986</b></dt>
+<dd><p>The sqlite3_result_error_code() function changes the error code returned by SQLite as a result of an error in a function.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-34326-56357-56903-53526-53046-15549-19745-22986'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-34326-56357-56903-53526-53046-15549-19745-22986'>detail</a>)</i></p></dd>
+
+<dt><b>R-34354-51417-57740-57504-01542-51579-51443-23369</b></dt>
+<dd><p>If the callback pointer to sqlite3_exec() is NULL, then no callback is ever invoked and result rows are ignored.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-34354-51417-57740-57504-01542-51579-51443-23369'>context</a>, <a href='matrix/matrix_dexec.html#R-34354-51417-57740-57504-01542-51579-51443-23369'>detail</a>)</i></p></dd>
+
+<dt><b>R-34381-48201-01432-06119-25898-10257-65313-47332</b></dt>
+<dd><p>The third integer is the number of rows in the index that have the same value for the first two columns.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-34381-48201-01432-06119-25898-10257-65313-47332'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-34381-48201-01432-06119-25898-10257-65313-47332'>detail</a>)</i></p></dd>
+
+<dt><b>R-34391-24921-52036-19820-43252-56353-24608-07545</b></dt>
+<dd><p>The sqlite3_release_memory() routine is a no-op returning zero if SQLite is not compiled with SQLITE_ENABLE_MEMORY_MANAGEMENT.
+<i>(source: <a href="c3ref/release_memory.html">c3ref/release_memory.html</a>, checked-by: src/malloc.c, th3/req1/releasemem01.test, matrix: <a href='matrix/c3ref/release_memory.html#R-34391-24921-52036-19820-43252-56353-24608-07545'>context</a>, <a href='matrix/matrix_drelease_memory.html#R-34391-24921-52036-19820-43252-56353-24608-07545'>detail</a>)</i></p></dd>
+
+<dt><b>R-34400-33772-12568-07085-14602-53889-15876-12187</b></dt>
+<dd><p>Any leading spaces in the TEXT value when converting from TEXT to INTEGER are ignored.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, th3/cov1/cast01.test, matrix: <a href='matrix/lang_expr.html#R-34400-33772-12568-07085-14602-53889-15876-12187'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-34400-33772-12568-07085-14602-53889-15876-12187'>detail</a>)</i></p></dd>
+
+<dt><b>R-34407-33329-56662-13063-42233-50984-46328-08443</b></dt>
+<dd><p>The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf().
+<i>(source: <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>, checked-by: th3/req1/malloc01.test, matrix: <a href='matrix/c3ref/mprintf.html#R-34407-33329-56662-13063-42233-50984-46328-08443'>context</a>, <a href='matrix/matrix_dmprintf.html#R-34407-33329-56662-13063-42233-50984-46328-08443'>detail</a>)</i></p></dd>
+
+<dt><b>R-34456-00884-53550-63882-43324-33974-40030-43057</b></dt>
+<dd><p>The first form of this pragma queries the current journaling mode for database.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma23.test, matrix: <a href='matrix/pragma.html#R-34456-00884-53550-63882-43324-33974-40030-43057'>context</a>, <a href='matrix/matrix_dpragma.html#R-34456-00884-53550-63882-43324-33974-40030-43057'>detail</a>)</i></p></dd>
+
+<dt><b>R-34457-09668-37447-61343-26020-24066-28137-60426</b></dt>
+<dd><p>"1" if the index is a partial index and "0" if not.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/index7.test, th3/req1/pragma15.test, matrix: <a href='matrix/pragma.html#R-34457-09668-37447-61343-26020-24066-28137-60426'>context</a>, <a href='matrix/matrix_dpragma.html#R-34457-09668-37447-61343-26020-24066-28137-60426'>detail</a>)</i></p></dd>
+
+<dt><b>R-34467-36570-51008-00703-20331-24944-30267-61623</b></dt>
+<dd><p>When the destructor callback is invoked, it is passed a single argument which is a copy of the application data pointer which was the fifth parameter to sqlite3_create_function_v2().
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc07.test, matrix: <a href='matrix/c3ref/create_function.html#R-34467-36570-51008-00703-20331-24944-30267-61623'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-34467-36570-51008-00703-20331-24944-30267-61623'>detail</a>)</i></p></dd>
+
+<dt><b>R-34472-09915-38123-43434-43436-60925-14387-37410</b></dt>
+<dd><p>Note that if a non-deterministic function is tagged with SQLITE_DETERMINISTIC and if that function ends up being used in the WHERE clause of a partial index or in an expression index, then when the function begins to return different answers, the associated index may become corrupt.
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-34472-09915-38123-43434-43436-60925-14387-37410'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-34472-09915-38123-43434-43436-60925-14387-37410'>detail</a>)</i></p></dd>
+
+<dt><b>R-34481-43669-25977-57618-65082-36703-04463-10475</b></dt>
+<dd><p>The NOCASE collation is like BINARY except that uppercase ASCII characters ('A' through 'Z') are folded into their lowercase equivalents prior to running the comparison. Only ASCII characters are case-folded.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-34481-43669-25977-57618-65082-36703-04463-10475'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-34481-43669-25977-57618-65082-36703-04463-10475'>detail</a>)</i></p></dd>
+
+<dt><b>R-34489-53953-36029-13063-60538-08284-18396-26034</b></dt>
+<dd><p>Nine static mutexes are used by the current version of SQLite.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-34489-53953-36029-13063-60538-08284-18396-26034'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-34489-53953-36029-13063-60538-08284-18396-26034'>detail</a>)</i></p></dd>
+
+<dt><b>R-34494-34867-10904-51436-14050-30444-55567-08867</b></dt>
+<dd><p>That ORDER BY clause will apply across all elements of the compound.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-34494-34867-10904-51436-14050-30444-55567-08867'>context</a>, <a href='matrix/matrix_dlang_select.html#R-34494-34867-10904-51436-14050-30444-55567-08867'>detail</a>)</i></p></dd>
+
+<dt><b>R-34519-06271-04461-63947-59293-07505-45589-19404</b></dt>
+<dd><p>SQLITE_BUSY is returned in this case.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-34519-06271-04461-63947-59293-07505-45589-19404'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-34519-06271-04461-63947-59293-07505-45589-19404'>detail</a>)</i></p></dd>
+
+<dt><b>R-34526-35712-49832-15543-35160-30600-56964-59649</b></dt>
+<dd><p>By default, the error code is SQLITE_ERROR.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-34526-35712-49832-15543-35160-30600-56964-59649'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-34526-35712-49832-15543-35160-30600-56964-59649'>detail</a>)</i></p></dd>
+
+<dt><b>R-34561-00264-36299-40120-12079-02627-14730-26524</b></dt>
+<dd><p>If an authorizer callback returns SQLITE_IGNORE for an SQLITE_DELETE action code, then the DELETE operation will proceed but the truncate optimization will be bypassed and rows will be deleted one by one.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, matrix: <a href='matrix/lang_delete.html#R-34561-00264-36299-40120-12079-02627-14730-26524'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-34561-00264-36299-40120-12079-02627-14730-26524'>detail</a>)</i></p></dd>
+
+<dt><b>R-34581-10147-58030-07537-46530-34726-16682-11736</b></dt>
+<dd><p>When the the "orderByConsumed" flag is unset, the query planner will add extra bytecode to ensure that the final results returned by the SQL query are ordered correctly.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-34581-10147-58030-07537-46530-34726-16682-11736'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-34581-10147-58030-07537-46530-34726-16682-11736'>detail</a>)</i></p></dd>
+
+<dt><b>R-34616-57962-62200-63763-25892-01209-38424-05918</b></dt>
+<dd><p>Cache sharing is enabled and disabled for an entire process.
+<i>(source: <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>, matrix: <a href='matrix/c3ref/enable_shared_cache.html#R-34616-57962-62200-63763-25892-01209-38424-05918'>context</a>, <a href='matrix/matrix_denable_shared_cache.html#R-34616-57962-62200-63763-25892-01209-38424-05918'>detail</a>)</i></p></dd>
+
+<dt><b>R-34648-44875-03220-54825-01081-20056-64407-58283</b></dt>
+<dd><p>Or, if the SELECT would return less than M+N rows if it did not have a LIMIT clause, then the first M rows are skipped and the remaining rows (if any) are returned.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-34648-44875-03220-54825-01081-20056-64407-58283'>context</a>, <a href='matrix/matrix_dlang_select.html#R-34648-44875-03220-54825-01081-20056-64407-58283'>detail</a>)</i></p></dd>
+
+<dt><b>R-34657-61226-12617-43692-19153-03581-17665-29840</b></dt>
+<dd><p>The "PRAGMA cache_spill=N" form of this pragma sets a minimum cache size threshold required for spilling to occur.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma2.test, matrix: <a href='matrix/pragma.html#R-34657-61226-12617-43692-19153-03581-17665-29840'>context</a>, <a href='matrix/matrix_dpragma.html#R-34657-61226-12617-43692-19153-03581-17665-29840'>detail</a>)</i></p></dd>
+
+<dt><b>R-34696-31731-45418-63028-04604-07803-00716-15058</b></dt>
+<dd><p>When a prepared statement runs, it first checks the schema cookie to ensure the value is the same as when the statement was prepared and if the schema cookie has changed, the statement either automatically reprepares and reruns or it aborts with an SQLITE_SCHEMA error.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-34696-31731-45418-63028-04604-07803-00716-15058'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-34696-31731-45418-63028-04604-07803-00716-15058'>detail</a>)</i></p></dd>
+
+<dt><b>R-34706-05629-19212-06603-14274-22035-31068-37221</b></dt>
+<dd><p>The open attempt fails if NAME is not the name of a VFS that is built into SQLite or that has been previously registered using sqlite3_vfs_register().
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-34706-05629-19212-06603-14274-22035-31068-37221'>context</a>, <a href='matrix/matrix_duri.html#R-34706-05629-19212-06603-14274-22035-31068-37221'>detail</a>)</i></p></dd>
+
+<dt><b>R-34730-53445-15838-11944-46041-12438-53750-14468</b></dt>
+<dd><p>The case_sensitive_like pragma installs a new application-defined LIKE function that is either case sensitive or insensitive depending on the value of the case_sensitive_like pragma.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma10.test, matrix: <a href='matrix/pragma.html#R-34730-53445-15838-11944-46041-12438-53750-14468'>context</a>, <a href='matrix/matrix_dpragma.html#R-34730-53445-15838-11944-46041-12438-53750-14468'>detail</a>)</i></p></dd>
+
+<dt><b>R-34745-08839-34242-42308-04034-17314-18313-24494</b></dt>
+<dd><p>If the xDelUser variable is set to a non-NULL value, then after the query has finished running SQLite automatically invokes it with the value of the pUser variable as the only argument.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-34745-08839-34242-42308-04034-17314-18313-24494'>context</a>, <a href='matrix/matrix_drtree.html#R-34745-08839-34242-42308-04034-17314-18313-24494'>detail</a>)</i></p></dd>
+
+<dt><b>R-34751-04246-20772-53163-23654-34620-17677-07511</b></dt>
+<dd><p>So, in the example above, if the query were rewritten as: SELECT z FROM ex2 WHERE +x=5 AND y=6; The + operator on the x column will prevent that term from constraining an index. This would force the use of the ex2i2 index.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-34751-04246-20772-53163-23654-34620-17677-07511'>context</a>, <a href='matrix/matrix_doptoverview.html#R-34751-04246-20772-53163-23654-34620-17677-07511'>detail</a>)</i></p></dd>
+
+<dt><b>R-34751-18293-04541-58685-13120-57905-41689-08740</b></dt>
+<dd><p>If a single column-name appears more than once in the list of assignment expressions, all but the rightmost occurrence is ignored.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-34751-18293-04541-58685-13120-57905-41689-08740'>context</a>, <a href='matrix/matrix_dlang_update.html#R-34751-18293-04541-58685-13120-57905-41689-08740'>detail</a>)</i></p></dd>
+
+<dt><b>R-34773-62253-14389-56183-06695-27653-47306-47953</b></dt>
+<dd><p>The only difference between the following two CASE expressions is that the x expression is evaluated exactly once in the first example but might be evaluated multiple times in the second: CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END CASE WHEN x=w1 THEN r1 WHEN x=w2 THEN r2 ELSE r3 END
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-34773-62253-14389-56183-06695-27653-47306-47953'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-34773-62253-14389-56183-06695-27653-47306-47953'>detail</a>)</i></p></dd>
+
+<dt><b>R-34782-18311-17741-53218-12879-22753-50681-05507</b></dt>
+<dd><p>Unless SQLITE_MISUSE is returned, this function sets the database connection error code and message accessible via sqlite3_errcode() and sqlite3_errmsg() and related functions.
+<i>(source: <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>, checked-by: tcl/e_blobwrite.test, matrix: <a href='matrix/c3ref/blob_write.html#R-34782-18311-17741-53218-12879-22753-50681-05507'>context</a>, <a href='matrix/matrix_dblob_write.html#R-34782-18311-17741-53218-12879-22753-50681-05507'>detail</a>)</i></p></dd>
+
+<dt><b>R-34789-59934-28389-39071-40559-33528-38029-45906</b></dt>
+<dd><p>The DESC keyword is ignored in indexes for formats 1, 2, and 3.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat01.test, matrix: <a href='matrix/fileformat2.html#R-34789-59934-28389-39071-40559-33528-38029-45906'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-34789-59934-28389-39071-40559-33528-38029-45906'>detail</a>)</i></p></dd>
+
+<dt><b>R-34809-04839-09181-10394-33851-21757-50200-61577</b></dt>
+<dd><p>Let X be U-35. If the payload size P is less than or equal to X then the entire payload is stored on the b-tree leaf page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-34809-04839-09181-10394-33851-21757-50200-61577'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-34809-04839-09181-10394-33851-21757-50200-61577'>detail</a>)</i></p></dd>
+
+<dt><b>R-34814-22035-19752-61012-44426-48112-33201-20182</b></dt>
+<dd><p>Values stored in sqlite3_value objects can be integers, floating point values, strings, BLOBs, or NULL.
+<i>(source: <a href="c3ref/value.html">c3ref/value.html</a>, checked-by: th3/req1/value01.test, matrix: <a href='matrix/c3ref/value.html#R-34814-22035-19752-61012-44426-48112-33201-20182'>context</a>, <a href='matrix/matrix_dvalue.html#R-34814-22035-19752-61012-44426-48112-33201-20182'>detail</a>)</i></p></dd>
+
+<dt><b>R-34816-32505-14191-41651-46944-10844-62255-46096</b></dt>
+<dd><p>The xCreate and xConnect methods of a virtual table module call this interface to declare the format (the names and datatypes of the columns) of the virtual tables they implement.
+<i>(source: <a href="c3ref/declare_vtab.html">c3ref/declare_vtab.html</a>, checked-by: th3/req1/vtab01.test, matrix: <a href='matrix/c3ref/declare_vtab.html#R-34816-32505-14191-41651-46944-10844-62255-46096'>context</a>, <a href='matrix/matrix_ddeclare_vtab.html#R-34816-32505-14191-41651-46944-10844-62255-46096'>detail</a>)</i></p></dd>
+
+<dt><b>R-34818-13664-64271-58157-25090-18668-59799-37546</b></dt>
+<dd><p>The 'now' argument to date and time functions always returns exactly the same value for multiple invocations within the same sqlite3_step() call.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date.test, th3/cov1/date4.test, matrix: <a href='matrix/lang_datefunc.html#R-34818-13664-64271-58157-25090-18668-59799-37546'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-34818-13664-64271-58157-25090-18668-59799-37546'>detail</a>)</i></p></dd>
+
+<dt><b>R-34837-12462-62420-33748-07267-00170-63881-53119</b></dt>
+<dd><p>The first argument to the callback is a copy of the third argument to sqlite3_update_hook().
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-34837-12462-62420-33748-07267-00170-63881-53119'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-34837-12462-62420-33748-07267-00170-63881-53119'>detail</a>)</i></p></dd>
+
+<dt><b>R-34918-27009-22149-14301-56506-15307-06517-16770</b></dt>
+<dd><p>The INDEXED BY and NOT INDEXED clauses are not supported for UPDATE and DELETE statements.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-34918-27009-22149-14301-56506-15307-06517-16770'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-34918-27009-22149-14301-56506-15307-06517-16770'>detail</a>)</i></p></dd>
+
+<dt><b>R-34926-03360-27843-47752-48355-13649-05844-37285</b></dt>
+<dd><p>SQLITE_CONFIG_WIN32_HEAPSIZE takes a 32-bit unsigned integer value that specifies the maximum size of the created heap.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-34926-03360-27843-47752-48355-13649-05844-37285'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-34926-03360-27843-47752-48355-13649-05844-37285'>detail</a>)</i></p></dd>
+
+<dt><b>R-34933-01612-63826-59975-42480-58884-65014-06327</b></dt>
+<dd><p>The names returned are the original un-aliased names of the database, table, and column.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-34933-01612-63826-59975-42480-58884-65014-06327'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-34933-01612-63826-59975-42480-58884-65014-06327'>detail</a>)</i></p></dd>
+
+<dt><b>R-34937-45675-11260-35059-56178-30979-30227-02001</b></dt>
+<dd><p>The sole argument is a pointer to a constant UTF8 string which will become the new schema name in place of "main".
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: th3/cov1/maindbname01.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-34937-45675-11260-35059-56178-30979-30227-02001'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-34937-45675-11260-35059-56178-30979-30227-02001'>detail</a>)</i></p></dd>
+
+<dt><b>R-34963-21048-59232-16607-21091-43824-49294-11066</b></dt>
+<dd><p>If the sqlite_sequence.seq field of an AUTOINCREMENT table is already at the largest integer value (9223372036854775807) then attempts to add new rows to that table with an automatically generated integer primary will fail with an SQLITE_FULL error.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-34963-21048-59232-16607-21091-43824-49294-11066'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-34963-21048-59232-16607-21091-43824-49294-11066'>detail</a>)</i></p></dd>
+
+<dt><b>R-34966-53902-34242-28054-07198-58256-53673-36317</b></dt>
+<dd><p>When the datatype of a column is "ANY", that means that any kind of data - integers, floating point values, strings, or binary blobs, can be inserted into that table and its value and datatype will be preserved exactly as it is inserted.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-34966-53902-34242-28054-07198-58256-53673-36317'>context</a>, <a href='matrix/matrix_dstricttables.html#R-34966-53902-34242-28054-07198-58256-53673-36317'>detail</a>)</i></p></dd>
+
+<dt><b>R-34979-54336-33279-53576-25867-30233-28350-04331</b></dt>
+<dd><p>If the main database is ":memory:" or if the journal_mode is WAL, then transactions continue to be atomic within each individual database file. But if the host computer crashes in the middle of a COMMIT where two or more database files are updated, some of those files might get the changes where others might not.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach02.test, matrix: <a href='matrix/lang_attach.html#R-34979-54336-33279-53576-25867-30233-28350-04331'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-34979-54336-33279-53576-25867-30233-28350-04331'>detail</a>)</i></p></dd>
+
+<dt><b>R-34993-45031-36632-60048-51944-50307-62063-53207</b></dt>
+<dd><p>The maximum allowed mmap size will be silently truncated if necessary so that it does not exceed the compile-time maximum mmap size set by the SQLITE_MAX_MMAP_SIZE compile-time option.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-34993-45031-36632-60048-51944-50307-62063-53207'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-34993-45031-36632-60048-51944-50307-62063-53207'>detail</a>)</i></p></dd>
+
+<dt><b>R-34998-49915-07664-55575-37059-29902-40579-47714</b></dt>
+<dd><p>If the result is a UTF-8 string, then sqlite3_column_bytes16() converts the string to UTF-16 and then returns the number of bytes.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-34998-49915-07664-55575-37059-29902-40579-47714'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-34998-49915-07664-55575-37059-29902-40579-47714'>detail</a>)</i></p></dd>
+
+<dt><b>R-35002-09502-01413-09334-58784-32407-44903-62982</b></dt>
+<dd><p>If the threading mode is Single-thread or Multi-thread then this routine returns a NULL pointer.
+<i>(source: <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a>, checked-by: th3/req1/dbmutex01.test, matrix: <a href='matrix/c3ref/db_mutex.html#R-35002-09502-01413-09334-58784-32407-44903-62982'>context</a>, <a href='matrix/matrix_ddb_mutex.html#R-35002-09502-01413-09334-58784-32407-44903-62982'>detail</a>)</i></p></dd>
+
+<dt><b>R-35003-32738-64790-42236-58307-21158-57428-12443</b></dt>
+<dd><p>If X is numeric then length(X) returns the length of a string representation of X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-35003-32738-64790-42236-58307-21158-57428-12443'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-35003-32738-64790-42236-58307-21158-57428-12443'>detail</a>)</i></p></dd>
+
+<dt><b>R-35033-20570-55146-33091-43588-36289-00669-04528</b></dt>
+<dd><p>The subquery on the right of an IN or NOT IN operator must be a scalar subquery if the left expression is not a row value expression.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-35033-20570-55146-33091-43588-36289-00669-04528'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-35033-20570-55146-33091-43588-36289-00669-04528'>detail</a>)</i></p></dd>
+
+<dt><b>R-35036-33960-30076-49697-10834-60924-14728-15122</b></dt>
+<dd><p>The sixth, seventh and eighth parameters passed to the three "sqlite3_create_function*" functions, xFunc, xStep and xFinal, are pointers to C-language functions that implement the SQL function or aggregate.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc03.test, matrix: <a href='matrix/c3ref/create_function.html#R-35036-33960-30076-49697-10834-60924-14728-15122'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-35036-33960-30076-49697-10834-60924-14728-15122'>detail</a>)</i></p></dd>
+
+<dt><b>R-35036-36587-25670-53930-46391-17517-28623-46452</b></dt>
+<dd><p>For a WITHOUT ROWID table, N will be the number of columns in the primary key.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-35036-36587-25670-53930-46391-17517-28623-46452'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-35036-36587-25670-53930-46391-17517-28623-46452'>detail</a>)</i></p></dd>
+
+<dt><b>R-35088-43392-22185-31834-16686-27011-41097-22750</b></dt>
+<dd><p>Shared-cache locks are released when a database connection concludes its current transaction, either by committing it or rolling it back.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-35088-43392-22185-31834-16686-27011-41097-22750'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-35088-43392-22185-31834-16686-27011-41097-22750'>detail</a>)</i></p></dd>
+
+<dt><b>R-35092-12727-62894-63814-26795-55319-59085-22626</b></dt>
+<dd><p>The pointers returned are valid until a type conversion occurs as described above, or until sqlite3_step() or sqlite3_reset() or sqlite3_finalize() is called.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column03.test, matrix: <a href='matrix/c3ref/column_blob.html#R-35092-12727-62894-63814-26795-55319-59085-22626'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-35092-12727-62894-63814-26795-55319-59085-22626'>detail</a>)</i></p></dd>
+
+<dt><b>R-35105-34724-05666-13344-17136-11047-06163-46281</b></dt>
+<dd><p>If pMem is NULL and N is non-zero, then each database connection does an initial bulk allocation for page cache memory from sqlite3_malloc() sufficient for N cache lines if N is positive or of -1024*N bytes if N is negative, .
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-35105-34724-05666-13344-17136-11047-06163-46281'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-35105-34724-05666-13344-17136-11047-06163-46281'>detail</a>)</i></p></dd>
+
+<dt><b>R-35109-49139-58862-12127-06342-61829-38093-58472</b></dt>
+<dd><p>The number of columns in each row returned by the SELECT statement (if any) and the specific values returned have no effect on the results of the EXISTS operator.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-35109-49139-58862-12127-06342-61829-38093-58472'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-35109-49139-58862-12127-06342-61829-38093-58472'>detail</a>)</i></p></dd>
+
+<dt><b>R-35111-05628-59609-35925-11859-38596-24754-51119</b></dt>
+<dd><p>If an error occurs while committing the transaction, an error code is returned and the transaction rolled back.
+<i>(source: <a href="c3ref/blob_close.html">c3ref/blob_close.html</a>, checked-by: tcl/e_blobclose.test, matrix: <a href='matrix/c3ref/blob_close.html#R-35111-05628-59609-35925-11859-38596-24754-51119'>context</a>, <a href='matrix/matrix_dblob_close.html#R-35111-05628-59609-35925-11859-38596-24754-51119'>detail</a>)</i></p></dd>
+
+<dt><b>R-35129-58141-36157-07998-30656-14308-25733-01656</b></dt>
+<dd><p>For example: -- Database schema CREATE TABLE parent(x PRIMARY KEY); CREATE TABLE child(y REFERENCES parent ON UPDATE SET NULL); sqlite> SELECT * FROM parent; x ---- key sqlite> SELECT * FROM child; y ---- key sqlite> -- Since the following UPDATE statement does not actually modify sqlite> -- the parent key value, the ON UPDATE action is not performed and sqlite> -- the child key value is not set to NULL. sqlite> UPDATE parent SET x = 'key'; sqlite> SELECT IFNULL(y, 'null') FROM child; y ---- key sqlite> -- This time, since the UPDATE statement does modify the parent key sqlite> -- value, the ON UPDATE action is performed and the child key is set sqlite> -- to NULL. sqlite> UPDATE parent SET x = 'key2'; sqlite> SELECT IFNULL(y, 'null') FROM child; y ---- null
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys20.test, matrix: <a href='matrix/foreignkeys.html#R-35129-58141-36157-07998-30656-14308-25733-01656'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-35129-58141-36157-07998-30656-14308-25733-01656'>detail</a>)</i></p></dd>
+
+<dt><b>R-35196-57110-30977-27033-46331-62759-56891-62679</b></dt>
+<dd><p>There is a single row in the sqlite_sequence table for each ordinary table that uses AUTOINCREMENT.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-35196-57110-30977-27033-46331-62759-56891-62679'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-35196-57110-30977-27033-46331-62759-56891-62679'>detail</a>)</i></p></dd>
+
+<dt><b>R-35210-63508-42678-48683-05229-58965-46588-04293</b></dt>
+<dd><p>The sqlite3_libversion_number() function returns an integer equal to SQLITE_VERSION_NUMBER.
+<i>(source: <a href="c3ref/libversion.html">c3ref/libversion.html</a>, checked-by: src/main.c, th3/th3main.c, matrix: <a href='matrix/c3ref/libversion.html#R-35210-63508-42678-48683-05229-58965-46588-04293'>context</a>, <a href='matrix/matrix_dlibversion.html#R-35210-63508-42678-48683-05229-58965-46588-04293'>detail</a>)</i></p></dd>
+
+<dt><b>R-35214-06564-22940-62614-38557-57045-54055-01727</b></dt>
+<dd><p>Format 4 also adds two new boolean record type values (serial types 8 and 9).
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat01.test, matrix: <a href='matrix/fileformat2.html#R-35214-06564-22940-62614-38557-57045-54055-01727'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-35214-06564-22940-62614-38557-57045-54055-01727'>detail</a>)</i></p></dd>
+
+<dt><b>R-35224-32827-55933-44478-17553-06933-55583-57822</b></dt>
+<dd><p>The table named in the table_info pragma can also be a view.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-35224-32827-55933-44478-17553-06933-55583-57822'>context</a>, <a href='matrix/matrix_dpragma.html#R-35224-32827-55933-44478-17553-06933-55583-57822'>detail</a>)</i></p></dd>
+
+<dt><b>R-35229-17830-32159-37744-59002-46141-27438-26089</b></dt>
+<dd><p>A string constant is formed by enclosing the string in single quotes (').
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-35229-17830-32159-37744-59002-46141-27438-26089'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-35229-17830-32159-37744-59002-46141-27438-26089'>detail</a>)</i></p></dd>
+
+<dt><b>R-35254-48865-63817-52724-57944-24327-24630-05485</b></dt>
+<dd><p>A call to one of the above APIs creates a new SQL function named by the second parameter (zQueryFunc or zGeom).
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, th3/cov1/rtree03.test, th3/cov1/rtree04.test, matrix: <a href='matrix/rtree.html#R-35254-48865-63817-52724-57944-24327-24630-05485'>context</a>, <a href='matrix/matrix_drtree.html#R-35254-48865-63817-52724-57944-24327-24630-05485'>detail</a>)</i></p></dd>
+
+<dt><b>R-35268-31914-29013-65007-60500-40286-59986-01540</b></dt>
+<dd><p>The value returned by sqlite3_memory_highwater(1) is the high-water mark prior to the reset.
+<i>(source: <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>, matrix: <a href='matrix/c3ref/memory_highwater.html#R-35268-31914-29013-65007-60500-40286-59986-01540'>context</a>, <a href='matrix/matrix_dmemory_highwater.html#R-35268-31914-29013-65007-60500-40286-59986-01540'>detail</a>)</i></p></dd>
+
+<dt><b>R-35290-16460-32571-10958-08768-45451-01146-58774</b></dt>
+<dd><p>Foreign key constraints are immediate by default.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys12.test, matrix: <a href='matrix/foreignkeys.html#R-35290-16460-32571-10958-08768-45451-01146-58774'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-35290-16460-32571-10958-08768-45451-01146-58774'>detail</a>)</i></p></dd>
+
+<dt><b>R-35325-25517-01545-24178-13996-21143-53189-45296</b></dt>
+<dd><p>An uncorrelated subquery is evaluated only once and the result reused as necessary.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/select01.test, matrix: <a href='matrix/lang_expr.html#R-35325-25517-01545-24178-13996-21143-53189-45296'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-35325-25517-01545-24178-13996-21143-53189-45296'>detail</a>)</i></p></dd>
+
+<dt><b>R-35362-38850-39624-46125-42742-24667-28362-39621</b></dt>
+<dd><p>The BEFORE or AFTER keyword determines when the trigger actions will be executed relative to the insertion, modification or removal of the associated row.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-35362-38850-39624-46125-42742-24667-28362-39621'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-35362-38850-39624-46125-42742-24667-28362-39621'>detail</a>)</i></p></dd>
+
+<dt><b>R-35371-58843-38332-21753-13618-41551-34238-06657</b></dt>
+<dd><p>The ATTACH DATABASE statement adds another database file to the current database connection.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach01.test, matrix: <a href='matrix/lang_attach.html#R-35371-58843-38332-21753-13618-41551-34238-06657'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-35371-58843-38332-21753-13618-41551-34238-06657'>detail</a>)</i></p></dd>
+
+<dt><b>R-35443-03595-46720-21224-13105-18323-15585-18563</b></dt>
+<dd><p>Ifnull() must have exactly 2 arguments.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-35443-03595-46720-21224-13105-18323-15585-18563'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-35443-03595-46720-21224-13105-18323-15585-18563'>detail</a>)</i></p></dd>
+
+<dt><b>R-35454-31058-05961-25112-64343-26549-00069-20498</b></dt>
+<dd><p>If P>X and K>X then the first M bytes of P are stored on the btree page and the remaining P-M bytes are stored on overflow pages.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-35454-31058-05961-25112-64343-26549-00069-20498'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-35454-31058-05961-25112-64343-26549-00069-20498'>detail</a>)</i></p></dd>
+
+<dt><b>R-35460-03740-02108-04893-51916-60089-58945-40785</b></dt>
+<dd><p>Registering a NULL function disables the callback.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-35460-03740-02108-04893-51916-60089-58945-40785'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-35460-03740-02108-04893-51916-60089-58945-40785'>detail</a>)</i></p></dd>
+
+<dt><b>R-35496-03635-05800-19681-11567-09775-48933-50480</b></dt>
+<dd><p>The name of the index.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15.test, matrix: <a href='matrix/pragma.html#R-35496-03635-05800-19681-11567-09775-48933-50480'>context</a>, <a href='matrix/matrix_dpragma.html#R-35496-03635-05800-19681-11567-09775-48933-50480'>detail</a>)</i></p></dd>
+
+<dt><b>R-35553-21226-59052-33659-22709-48132-34010-52118</b></dt>
+<dd><p>The upper(X) function returns a copy of input string X in which all lower-case ASCII characters are converted to their upper-case equivalent.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func04.test, matrix: <a href='matrix/lang_corefunc.html#R-35553-21226-59052-33659-22709-48132-34010-52118'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-35553-21226-59052-33659-22709-48132-34010-52118'>detail</a>)</i></p></dd>
+
+<dt><b>R-35592-43376-11648-07628-49784-57585-43144-43201</b></dt>
+<dd><p>If pragma integrity_check finds no errors, a single row with the value 'ok' is returned.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/integrityck01.test, matrix: <a href='matrix/pragma.html#R-35592-43376-11648-07628-49784-57585-43144-43201'>context</a>, <a href='matrix/matrix_dpragma.html#R-35592-43376-11648-07628-49784-57585-43144-43201'>detail</a>)</i></p></dd>
+
+<dt><b>R-35640-30414-24972-23354-27947-42421-53546-27717</b></dt>
+<dd><p>The sqlite3_value_dup(V) interface returns NULL if V is NULL or if a memory allocation fails.
+<i>(source: <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>, matrix: <a href='matrix/c3ref/value_dup.html#R-35640-30414-24972-23354-27947-42421-53546-27717'>context</a>, <a href='matrix/matrix_dvalue_dup.html#R-35640-30414-24972-23354-27947-42421-53546-27717'>detail</a>)</i></p></dd>
+
+<dt><b>R-35668-58241-09537-53108-57582-24768-01452-25578</b></dt>
+<dd><p>The phrase "VALUES(expr-list)" means the same thing as "SELECT expr-list".
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: th3/cov1/select30.test, th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-35668-58241-09537-53108-57582-24768-01452-25578'>context</a>, <a href='matrix/matrix_dlang_select.html#R-35668-58241-09537-53108-57582-24768-01452-25578'>detail</a>)</i></p></dd>
+
+<dt><b>R-35698-25375-34264-35367-42002-17994-39861-33131</b></dt>
+<dd><p>C-style comments begin with "/*" and extend up to and including the next "*/" character pair or until the end of input, whichever comes first.
+<i>(source: <a href="lang_comment.html">lang_comment.html</a>, checked-by: th3/req1/comment01.test, matrix: <a href='matrix/lang_comment.html#R-35698-25375-34264-35367-42002-17994-39861-33131'>context</a>, <a href='matrix/matrix_dlang_comment.html#R-35698-25375-34264-35367-42002-17994-39861-33131'>detail</a>)</i></p></dd>
+
+<dt><b>R-35711-48727-49492-05161-09107-16114-44571-60110</b></dt>
+<dd><p>If N or iOffset is less than zero, SQLITE_ERROR is returned and no data is read.
+<i>(source: <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_read.html#R-35711-48727-49492-05161-09107-16114-44571-60110'>context</a>, <a href='matrix/matrix_dblob_read.html#R-35711-48727-49492-05161-09107-16114-44571-60110'>detail</a>)</i></p></dd>
+
+<dt><b>R-35739-57436-25800-46947-32358-09819-57778-06393</b></dt>
+<dd><p>The sqlite3_errmsg() or sqlite3_errmsg16() routines can be used to obtain an English language description of the error following a failure of any of the sqlite3_open() routines.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-35739-57436-25800-46947-32358-09819-57778-06393'>context</a>, <a href='matrix/matrix_dopen.html#R-35739-57436-25800-46947-32358-09819-57778-06393'>detail</a>)</i></p></dd>
+
+<dt><b>R-35763-48267-24179-20441-32559-50420-39179-45580</b></dt>
+<dd><p>Foreign key DML errors are reported if: The parent table does not exist, or The parent key columns named in the foreign key constraint do not exist, or The parent key columns named in the foreign key constraint are not the primary key of the parent table and are not subject to a unique constraint using collating sequence specified in the CREATE TABLE, or The child table references the primary key of the parent without specifying the primary key columns and the number of primary key columns in the parent do not match the number of child key columns.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-35763-48267-24179-20441-32559-50420-39179-45580'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-35763-48267-24179-20441-32559-50420-39179-45580'>detail</a>)</i></p></dd>
+
+<dt><b>R-35765-61623-59690-19582-04854-45693-22489-08520</b></dt>
+<dd><p>Only a single progress handler may be defined at one time per database connection; setting a new progress handler cancels the old one.
+<i>(source: <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>, checked-by: th3/req1/progress01.test, matrix: <a href='matrix/c3ref/progress_handler.html#R-35765-61623-59690-19582-04854-45693-22489-08520'>context</a>, <a href='matrix/matrix_dprogress_handler.html#R-35765-61623-59690-19582-04854-45693-22489-08520'>detail</a>)</i></p></dd>
+
+<dt><b>R-35802-14059-47020-23527-06222-22948-08783-35470</b></dt>
+<dd><p>Nor is the update hook invoked when rows are deleted using the truncate optimization.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-35802-14059-47020-23527-06222-22948-08783-35470'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-35802-14059-47020-23527-06222-22948-08783-35470'>detail</a>)</i></p></dd>
+
+<dt><b>R-35812-46755-23531-40873-62145-48640-15024-41940</b></dt>
+<dd><p>The default journal size limit is -1 (no limit).
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma26.test, matrix: <a href='matrix/pragma.html#R-35812-46755-23531-40873-62145-48640-15024-41940'>context</a>, <a href='matrix/matrix_dpragma.html#R-35812-46755-23531-40873-62145-48640-15024-41940'>detail</a>)</i></p></dd>
+
+<dt><b>R-35835-22506-43266-17385-20539-20628-59606-19981</b></dt>
+<dd><p>NOCASE - Similar to binary, except that it uses sqlite3_strnicmp() for the comparison. Hence the 26 upper case characters of ASCII are folded to their lower case equivalents before the comparison is performed.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-35835-22506-43266-17385-20539-20628-59606-19981'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-35835-22506-43266-17385-20539-20628-59606-19981'>detail</a>)</i></p></dd>
+
+<dt><b>R-35840-33204-13129-04501-28754-46758-55672-28059</b></dt>
+<dd><p>If URI filename interpretation is enabled, and the filename argument begins with "file:", then the filename is interpreted as a URI.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-35840-33204-13129-04501-28754-46758-55672-28059'>context</a>, <a href='matrix/matrix_dopen.html#R-35840-33204-13129-04501-28754-46758-55672-28059'>detail</a>)</i></p></dd>
+
+<dt><b>R-35847-18866-22056-42363-43514-34366-42944-42710</b></dt>
+<dd><p>The big reason for using an R*Tree is so that you can efficiently do range queries against the coordinate ranges.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-35847-18866-22056-42363-43514-34366-42944-42710'>context</a>, <a href='matrix/matrix_drtree.html#R-35847-18866-22056-42363-43514-34366-42944-42710'>detail</a>)</i></p></dd>
+
+<dt><b>R-35856-58769-58714-05667-00872-44195-43278-26599</b></dt>
+<dd><p>However if an ON CONFLICT clause is specified as part of the statement causing the trigger to fire, then conflict handling policy of the outer statement is used instead.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-35856-58769-58714-05667-00872-44195-43278-26599'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-35856-58769-58714-05667-00872-44195-43278-26599'>detail</a>)</i></p></dd>
+
+<dt><b>R-35865-29619-35015-08784-17694-42068-56782-50747</b></dt>
+<dd><p>This interface is used to retrieve runtime status information about a single database connection.
+<i>(source: <a href="c3ref/db_status.html">c3ref/db_status.html</a>, checked-by: th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/db_status.html#R-35865-29619-35015-08784-17694-42068-56782-50747'>context</a>, <a href='matrix/matrix_ddb_status.html#R-35865-29619-35015-08784-17694-42068-56782-50747'>detail</a>)</i></p></dd>
+
+<dt><b>R-35880-12325-57817-26418-36971-18732-46777-12474</b></dt>
+<dd><p>For the index above and WHERE clause like this: ... WHERE b IN (1,2,3) AND c NOT NULL AND d='hello' The index is not usable at all because the left-most column of the index (column "a") is not constrained.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-35880-12325-57817-26418-36971-18732-46777-12474'>context</a>, <a href='matrix/matrix_doptoverview.html#R-35880-12325-57817-26418-36971-18732-46777-12474'>detail</a>)</i></p></dd>
+
+<dt><b>R-35892-30289-55875-11491-60713-08800-59610-09295</b></dt>
+<dd><p>For a command of the form "REINDEX name", a match against collation-name takes precedence over a match against index-name or table-name.
+<i>(source: <a href="lang_reindex.html">lang_reindex.html</a>, checked-by: tcl/e_reindex.test, matrix: <a href='matrix/lang_reindex.html#R-35892-30289-55875-11491-60713-08800-59610-09295'>context</a>, <a href='matrix/matrix_dlang_reindex.html#R-35892-30289-55875-11491-60713-08800-59610-09295'>detail</a>)</i></p></dd>
+
+<dt><b>R-35903-55864-38042-65190-02899-64342-40234-23933</b></dt>
+<dd><p>The P argument is a pointer to the prepared statement.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-35903-55864-38042-65190-02899-64342-40234-23933'>context</a>, <a href='matrix/matrix_dc_trace.html#R-35903-55864-38042-65190-02899-64342-40234-23933'>detail</a>)</i></p></dd>
+
+<dt><b>R-35921-30782-30597-38751-45197-16333-41298-65365</b></dt>
+<dd><p>If SQLite has not been initialized using sqlite3_initialize() prior to invoking sqlite3_complete16() then sqlite3_initialize() is invoked automatically by sqlite3_complete16(). If that initialization fails, then the return value from sqlite3_complete16() will be non-zero regardless of whether or not the input SQL is complete.
+<i>(source: <a href="c3ref/complete.html">c3ref/complete.html</a>, checked-by: th3/cov1/complete01.test, matrix: <a href='matrix/c3ref/complete.html#R-35921-30782-30597-38751-45197-16333-41298-65365'>context</a>, <a href='matrix/matrix_dcomplete.html#R-35921-30782-30597-38751-45197-16333-41298-65365'>detail</a>)</i></p></dd>
+
+<dt><b>R-35945-11759-33348-59186-12007-55771-30323-25128</b></dt>
+<dd><p>The sqlite3_mutex_alloc() routine returns NULL if it is unable to allocate the requested mutex.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-35945-11759-33348-59186-12007-55771-30323-25128'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-35945-11759-33348-59186-12007-55771-30323-25128'>detail</a>)</i></p></dd>
+
+<dt><b>R-35968-60209-16507-36689-50525-63369-04471-36400</b></dt>
+<dd><p>By default, application-defined SQL functions are considered to be non-deterministic.
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-35968-60209-16507-36689-50525-63369-04471-36400'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-35968-60209-16507-36689-50525-63369-04471-36400'>detail</a>)</i></p></dd>
+
+<dt><b>R-36007-42565-41988-28835-07682-45738-21986-28193</b></dt>
+<dd><p>The sqlite3_realloc64(X,N) interfaces works the same as sqlite3_realloc(X,N) except that N is a 64-bit unsigned integer instead of a 32-bit signed integer.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-36007-42565-41988-28835-07682-45738-21986-28193'>context</a>, <a href='matrix/matrix_dfree.html#R-36007-42565-41988-28835-07682-45738-21986-28193'>detail</a>)</i></p></dd>
+
+<dt><b>R-36011-59963-14175-08508-02648-47269-55860-35860</b></dt>
+<dd><p>The function returns a human-language description of any problems found, or the string 'ok' if everything is ok.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree25.test, matrix: <a href='matrix/rtree.html#R-36011-59963-14175-08508-02648-47269-55860-35860'>context</a>, <a href='matrix/matrix_drtree.html#R-36011-59963-14175-08508-02648-47269-55860-35860'>detail</a>)</i></p></dd>
+
+<dt><b>R-36018-21755-34988-08386-62029-36954-65009-29361</b></dt>
+<dd><p>The parent key definitions of foreign key constraints are not checked when a table is created.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys21.test, matrix: <a href='matrix/foreignkeys.html#R-36018-21755-34988-08386-62029-36954-65009-29361'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-36018-21755-34988-08386-62029-36954-65009-29361'>detail</a>)</i></p></dd>
+
+<dt><b>R-36043-10590-35190-29655-36320-51519-10161-16668</b></dt>
+<dd><p>Changes made as part of foreign key actions are included in the count, but those made as part of REPLACE constraint resolution are not.
+<i>(source: <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>, checked-by: tcl/e_totalchanges.test, matrix: <a href='matrix/c3ref/total_changes.html#R-36043-10590-35190-29655-36320-51519-10161-16668'>context</a>, <a href='matrix/matrix_dtotal_changes.html#R-36043-10590-35190-29655-36320-51519-10161-16668'>detail</a>)</i></p></dd>
+
+<dt><b>R-36091-24060-22250-25339-34377-38078-29153-58612</b></dt>
+<dd><p>If the third parameter (the pointer to the sqlite3_module object) is NULL then no new module is created and any existing modules with the same name are dropped.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-36091-24060-22250-25339-34377-38078-29153-58612'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-36091-24060-22250-25339-34377-38078-29153-58612'>detail</a>)</i></p></dd>
+
+<dt><b>R-36097-50928-12790-61017-20060-26535-57569-32056</b></dt>
+<dd><p>SQLite implements this interface by calling the xSleep() method of the default sqlite3_vfs object.
+<i>(source: <a href="c3ref/sleep.html">c3ref/sleep.html</a>, checked-by: th3/req1/sleep01.test, matrix: <a href='matrix/c3ref/sleep.html#R-36097-50928-12790-61017-20060-26535-57569-32056'>context</a>, <a href='matrix/matrix_dsleep.html#R-36097-50928-12790-61017-20060-26535-57569-32056'>detail</a>)</i></p></dd>
+
+<dt><b>R-36103-43483-56354-57798-31615-25926-09784-32512</b></dt>
+<dd><p>The sqlite_stat3.nLt holds the approximate number of entries in the index whose left-most column is less than the sample.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-36103-43483-56354-57798-31615-25926-09784-32512'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-36103-43483-56354-57798-31615-25926-09784-32512'>detail</a>)</i></p></dd>
+
+<dt><b>R-36147-61857-54581-58200-55810-07092-59837-08687</b></dt>
+<dd><p>The second parameter to the preupdate callback is a pointer to the database connection that registered the preupdate hook.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-36147-61857-54581-58200-55810-07092-59837-08687'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-36147-61857-54581-58200-55810-07092-59837-08687'>detail</a>)</i></p></dd>
+
+<dt><b>R-36185-29671-26091-33323-34163-48928-21638-35689</b></dt>
+<dd><p>If the column-name list is omitted, then the names of the columns in the view are derived from the names of the result-set columns in the select-stmt.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, matrix: <a href='matrix/lang_createview.html#R-36185-29671-26091-33323-34163-48928-21638-35689'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-36185-29671-26091-33323-34163-48928-21638-35689'>detail</a>)</i></p></dd>
+
+<dt><b>R-36190-27688-09198-02833-32879-47498-11674-13730</b></dt>
+<dd><p>PRAGMA schema.page_size; PRAGMA schema.page_size = bytes; Query or set the page size of the database.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-36190-27688-09198-02833-32879-47498-11674-13730'>context</a>, <a href='matrix/matrix_dpragma.html#R-36190-27688-09198-02833-32879-47498-11674-13730'>detail</a>)</i></p></dd>
+
+<dt><b>R-36195-31555-35544-12860-62754-30693-28143-39954</b></dt>
+<dd><p>The usual INSERT, UPDATE, and DELETE commands work on an R*Tree index just like on regular tables.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree01.test, matrix: <a href='matrix/rtree.html#R-36195-31555-35544-12860-62754-30693-28143-39954'>context</a>, <a href='matrix/matrix_drtree.html#R-36195-31555-35544-12860-62754-30693-28143-39954'>detail</a>)</i></p></dd>
+
+<dt><b>R-36239-04077-08470-54931-40517-19628-02448-15955</b></dt>
+<dd><p>The scalar expressions may refer to columns of the row being updated.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-36239-04077-08470-54931-40517-19628-02448-15955'>context</a>, <a href='matrix/matrix_dlang_update.html#R-36239-04077-08470-54931-40517-19628-02448-15955'>detail</a>)</i></p></dd>
+
+<dt><b>R-36257-52125-15338-28227-38982-51329-51201-58164</b></dt>
+<dd><p>SQLite does not make a copy of the new main schema name string, so the application must ensure that the argument passed into this DBCONFIG option is unchanged until after the database connection closes.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: src/main.c, th3/cov1/maindbname01.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-36257-52125-15338-28227-38982-51329-51201-58164'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-36257-52125-15338-28227-38982-51329-51201-58164'>detail</a>)</i></p></dd>
+
+<dt><b>R-36327-17224-30714-13238-62239-10610-34314-51642</b></dt>
+<dd><p>If a result expression is the special expression "*" then all columns in the input data are substituted for that one expression.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-36327-17224-30714-13238-62239-10610-34314-51642'>context</a>, <a href='matrix/matrix_dlang_select.html#R-36327-17224-30714-13238-62239-10610-34314-51642'>detail</a>)</i></p></dd>
+
+<dt><b>R-36328-16367-14145-21377-30808-40796-28392-26990</b></dt>
+<dd><p>In that case, the database connection remains in EXCLUSIVE mode as long as the journal mode is WAL; attempts to change the locking mode using "PRAGMA locking_mode=NORMAL;" are no-ops.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, th3/req1/pragma05.test, matrix: <a href='matrix/wal.html#R-36328-16367-14145-21377-30808-40796-28392-26990'>context</a>, <a href='matrix/matrix_dwal.html#R-36328-16367-14145-21377-30808-40796-28392-26990'>detail</a>)</i></p></dd>
+
+<dt><b>R-36357-08369-42604-06511-16723-17506-10955-34539</b></dt>
+<dd><p>If the WHERE clause expression evaluates to NULL or to false for some rows of the table, then those rows are omitted from the index.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-36357-08369-42604-06511-16723-17506-10955-34539'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-36357-08369-42604-06511-16723-17506-10955-34539'>detail</a>)</i></p></dd>
+
+<dt><b>R-36370-26473-13900-17379-03927-31715-15091-47108</b></dt>
+<dd><p>When the locking_mode pragma specifies a particular database, for example: PRAGMA main.locking_mode=EXCLUSIVE; then the locking mode applies only to the named database.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-36370-26473-13900-17379-03927-31715-15091-47108'>context</a>, <a href='matrix/matrix_dpragma.html#R-36370-26473-13900-17379-03927-31715-15091-47108'>detail</a>)</i></p></dd>
+
+<dt><b>R-36394-12461-27768-64371-31765-36302-25885-56308</b></dt>
+<dd><p>SQLite will always use the table b-tree key rather than the NULL value when referencing the INTEGER PRIMARY KEY column.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-36394-12461-27768-64371-31765-36302-25885-56308'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-36394-12461-27768-64371-31765-36302-25885-56308'>detail</a>)</i></p></dd>
+
+<dt><b>R-36399-45840-38419-49366-05932-18953-07682-47549</b></dt>
+<dd><p>SQLITE_STATUS_PAGECACHE_USED This parameter returns the number of pages used out of the pagecache memory allocator that was configured using SQLITE_CONFIG_PAGECACHE. The value returned is in pages, not in bytes.
+<i>(source: <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a>, matrix: <a href='matrix/c3ref/c_status_malloc_count.html#R-36399-45840-38419-49366-05932-18953-07682-47549'>context</a>, <a href='matrix/matrix_dc_status_malloc_count.html#R-36399-45840-38419-49366-05932-18953-07682-47549'>detail</a>)</i></p></dd>
+
+<dt><b>R-36424-56542-13143-39138-22363-38156-30287-29133</b></dt>
+<dd><p>The sqlite3_vtab_rhs_value(P,J,V) inteface returns SQLITE_NOTFOUND if the right-hand side of the J-th constraint is not available.
+<i>(source: <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>, checked-by: src/where.c, matrix: <a href='matrix/c3ref/vtab_rhs_value.html#R-36424-56542-13143-39138-22363-38156-30287-29133'>context</a>, <a href='matrix/matrix_dvtab_rhs_value.html#R-36424-56542-13143-39138-22363-38156-30287-29133'>detail</a>)</i></p></dd>
+
+<dt><b>R-36476-47203-56638-47160-44339-35126-05623-44628</b></dt>
+<dd><p>A string might look like a floating-point literal with a decimal point and/or exponent notation but as long as the value can be expressed as an integer, the NUMERIC affinity will convert it into an integer.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-36476-47203-56638-47160-44339-35126-05623-44628'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-36476-47203-56638-47160-44339-35126-05623-44628'>detail</a>)</i></p></dd>
+
+<dt><b>R-36522-24811-64811-56384-05057-49516-54548-20894</b></dt>
+<dd><p>If the database connection is associated with unfinalized prepared statements, BLOB handlers, and/or unfinished sqlite3_backup objects then sqlite3_close() will leave the database connection open and return SQLITE_BUSY.
+<i>(source: <a href="c3ref/close.html">c3ref/close.html</a>, checked-by: th3/cov1/main23.test, matrix: <a href='matrix/c3ref/close.html#R-36522-24811-64811-56384-05057-49516-54548-20894'>context</a>, <a href='matrix/matrix_dclose.html#R-36522-24811-64811-56384-05057-49516-54548-20894'>detail</a>)</i></p></dd>
+
+<dt><b>R-36545-62345-61603-06376-33533-12580-59655-26356</b></dt>
+<dd><p>The value returned by sqlite3_backup_finish is SQLITE_OK if no sqlite3_backup_step() errors occurred, regardless or whether or not sqlite3_backup_step() completed.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-36545-62345-61603-06376-33533-12580-59655-26356'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-36545-62345-61603-06376-33533-12580-59655-26356'>detail</a>)</i></p></dd>
+
+<dt><b>R-36570-50350-22690-62620-40069-12741-59912-39682</b></dt>
+<dd><p>Transactions can be started manually using the BEGIN command.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-36570-50350-22690-62620-40069-12741-59912-39682'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-36570-50350-22690-62620-40069-12741-59912-39682'>detail</a>)</i></p></dd>
+
+<dt><b>R-36592-02772-49597-21134-35176-13314-34028-16274</b></dt>
+<dd><p>The SQLITE_CONFIG_COVERING_INDEX_SCAN option takes a single integer argument which is interpreted as a boolean in order to enable or disable the use of covering indices for full table scans in the query optimizer.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-36592-02772-49597-21134-35176-13314-34028-16274'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-36592-02772-49597-21134-35176-13314-34028-16274'>detail</a>)</i></p></dd>
+
+<dt><b>R-36596-35603-05344-10987-20238-56026-42130-18053</b></dt>
+<dd><p>The sqlite3_last_insert_rowid(D) interface usually returns the rowid of the most recent successful INSERT into a rowid table or virtual table on database connection D.
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-36596-35603-05344-10987-20238-56026-42130-18053'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-36596-35603-05344-10987-20238-56026-42130-18053'>detail</a>)</i></p></dd>
+
+<dt><b>R-36598-60500-12425-47640-29499-27621-13512-27511</b></dt>
+<dd><p>Attached databases can be vacuumed by appending the appropriate schema-name to the VACUUM statement.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-36598-60500-12425-47640-29499-27621-13512-27511'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-36598-60500-12425-47640-29499-27621-13512-27511'>detail</a>)</i></p></dd>
+
+<dt><b>R-36602-21087-51192-25883-57410-35458-57650-49197</b></dt>
+<dd><p>The column is named in the WHERE clause of a partial index.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/cov1/altertable25.test, matrix: <a href='matrix/lang_altertable.html#R-36602-21087-51192-25883-57410-35458-57650-49197'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-36602-21087-51192-25883-57410-35458-57650-49197'>detail</a>)</i></p></dd>
+
+<dt><b>R-36608-10930-24220-22579-46351-14737-62834-54918</b></dt>
+<dd><p>The arguments can be just about any text as long as it has balanced parentheses.
+<i>(source: <a href="lang_createvtab.html">lang_createvtab.html</a>, matrix: <a href='matrix/lang_createvtab.html#R-36608-10930-24220-22579-46351-14737-62834-54918'>context</a>, <a href='matrix/matrix_dlang_createvtab.html#R-36608-10930-24220-22579-46351-14737-62834-54918'>detail</a>)</i></p></dd>
+
+<dt><b>R-36609-39554-02465-47159-11232-33677-21086-13785</b></dt>
+<dd><p>"c" if the index was created by a CREATE INDEX statement, "u" if the index was created by a UNIQUE constraint, or "pk" if the index was created by a PRIMARY KEY constraint.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15.test, matrix: <a href='matrix/pragma.html#R-36609-39554-02465-47159-11232-33677-21086-13785'>context</a>, <a href='matrix/matrix_dpragma.html#R-36609-39554-02465-47159-11232-33677-21086-13785'>detail</a>)</i></p></dd>
+
+<dt><b>R-36610-45292-54097-28024-65527-46641-42678-27744</b></dt>
+<dd><p>The sqlite3_snprintf() routine is similar to "snprintf()" from the standard C library. The result is written into the buffer supplied as the second parameter whose size is given by the first parameter. Note that the order of the first two parameters is reversed from snprintf().
+<i>(source: <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>, checked-by: th3/req1/malloc01.test, matrix: <a href='matrix/c3ref/mprintf.html#R-36610-45292-54097-28024-65527-46641-42678-27744'>context</a>, <a href='matrix/matrix_dmprintf.html#R-36610-45292-54097-28024-65527-46641-42678-27744'>detail</a>)</i></p></dd>
+
+<dt><b>R-36612-64789-14111-46629-37131-49911-14128-04823</b></dt>
+<dd><p>But the next query can not use the partial index: SELECT * FROM tab2 WHERE b=456; -- cannot use partial index
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-36612-64789-14111-46629-37131-49911-14128-04823'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-36612-64789-14111-46629-37131-49911-14128-04823'>detail</a>)</i></p></dd>
+
+<dt><b>R-36620-34941-18970-44416-30193-42757-18271-60128</b></dt>
+<dd><p>The secure-delete setting for newly attached databases is the setting of the main database at the time the ATTACH command is evaluated.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma20.test, th3/cov1/pragma21.test, matrix: <a href='matrix/pragma.html#R-36620-34941-18970-44416-30193-42757-18271-60128'>context</a>, <a href='matrix/matrix_dpragma.html#R-36620-34941-18970-44416-30193-42757-18271-60128'>detail</a>)</i></p></dd>
+
+<dt><b>R-36651-49821-06866-46556-29729-37304-36967-33618</b></dt>
+<dd><p>Note that the name length limit is in UTF-8 bytes, not characters nor UTF-16 bytes.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc01.test, matrix: <a href='matrix/c3ref/create_function.html#R-36651-49821-06866-46556-29729-37304-36967-33618'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-36651-49821-06866-46556-29729-37304-36967-33618'>detail</a>)</i></p></dd>
+
+<dt><b>R-36706-10507-15107-19022-47834-34931-59903-48809</b></dt>
+<dd><p>The PRAGMA wal_checkpoint command can be used to invoke this interface from SQL.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-36706-10507-15107-19022-47834-34931-59903-48809'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-36706-10507-15107-19022-47834-34931-59903-48809'>detail</a>)</i></p></dd>
+
+<dt><b>R-36754-20545-04159-27572-44208-64137-08044-49180</b></dt>
+<dd><p>Strings with embedded NUL characters cannot be represented as string literals in SQL and hence the returned string literal is truncated prior to the first NUL.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-36754-20545-04159-27572-44208-64137-08044-49180'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-36754-20545-04159-27572-44208-64137-08044-49180'>detail</a>)</i></p></dd>
+
+<dt><b>R-36765-11966-40319-64990-44757-09945-39108-37525</b></dt>
+<dd><p>If the sqlite_stat1.idx column is the same as the sqlite_stat1.tbl column, then the table is a WITHOUT ROWID table and the sqlite_stat1.stat field contains information about the index btree that implements the WITHOUT ROWID table.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-36765-11966-40319-64990-44757-09945-39108-37525'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-36765-11966-40319-64990-44757-09945-39108-37525'>detail</a>)</i></p></dd>
+
+<dt><b>R-36787-21388-40333-56236-13841-04160-18258-18988</b></dt>
+<dd><p>If the STRING or BLOB looks like a real number (if it has a decimal point or an exponent) or if the value is outside the range that can be represented as a 64-bit signed integer, then it converts to REAL. Otherwise the operand converts to INTEGER.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_06.test, matrix: <a href='matrix/datatype3.html#R-36787-21388-40333-56236-13841-04160-18258-18988'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-36787-21388-40333-56236-13841-04160-18258-18988'>detail</a>)</i></p></dd>
+
+<dt><b>R-36822-49898-51267-28801-22242-39926-43860-26511</b></dt>
+<dd><p>In many pragmas, the argument is a boolean. The boolean can be one of: 1 yes true on0 no false off
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma01.test, matrix: <a href='matrix/pragma.html#R-36822-49898-51267-28801-22242-39926-43860-26511'>context</a>, <a href='matrix/matrix_dpragma.html#R-36822-49898-51267-28801-22242-39926-43860-26511'>detail</a>)</i></p></dd>
+
+<dt><b>R-36834-48950-59089-31267-28729-41659-26952-44127</b></dt>
+<dd><p>On the other hand, the virtual terms themselves never causes tests to be performed on input rows.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-36834-48950-59089-31267-28729-41659-26952-44127'>context</a>, <a href='matrix/matrix_doptoverview.html#R-36834-48950-59089-31267-28729-41659-26952-44127'>detail</a>)</i></p></dd>
+
+<dt><b>R-36849-55679-50276-26926-30909-09054-60506-32367</b></dt>
+<dd><p>INSTEAD OF triggers work only on views.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-36849-55679-50276-26926-30909-09054-60506-32367'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-36849-55679-50276-26926-30909-09054-60506-32367'>detail</a>)</i></p></dd>
+
+<dt><b>R-36850-34127-02357-30625-11793-50017-46803-57751</b></dt>
+<dd><p>The likely(X) function is short-hand for likelihood(X,0.9375).
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/resolve.c, matrix: <a href='matrix/lang_corefunc.html#R-36850-34127-02357-30625-11793-50017-46803-57751'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-36850-34127-02357-30625-11793-50017-46803-57751'>detail</a>)</i></p></dd>
+
+<dt><b>R-36859-05333-15357-38800-46653-01342-64657-49103</b></dt>
+<dd><p>SQLite guarantees that the zFilename parameter to xOpen is either a NULL pointer or string obtained from xFullPathname() with an optional suffix added.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/cov1/pager25.test, th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-36859-05333-15357-38800-46653-01342-64657-49103'>context</a>, <a href='matrix/matrix_dvfs.html#R-36859-05333-15357-38800-46653-01342-64657-49103'>detail</a>)</i></p></dd>
+
+<dt><b>R-36882-08642-64574-34445-28855-37148-23559-38229</b></dt>
+<dd><p>The sqlite3_hard_heap_limit64(N) interface is similar to sqlite3_soft_heap_limit64(N) except that memory allocations will fail when the hard heap limit is reached.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-36882-08642-64574-34445-28855-37148-23559-38229'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-36882-08642-64574-34445-28855-37148-23559-38229'>detail</a>)</i></p></dd>
+
+<dt><b>R-36885-25505-12420-31937-05570-33633-11902-61321</b></dt>
+<dd><p>All-at-once processing of the IN operator is selected if both of the following conditions are met: The P->aConstraintUsage[N].argvIndex value is set to a positive integer. This is how the virtual table tells SQLite that it wants to use the N-th constraint. The last call to sqlite3_vtab_in(P,N,F) for which F was non-negative had F>=1.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-36885-25505-12420-31937-05570-33633-11902-61321'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-36885-25505-12420-31937-05570-33633-11902-61321'>detail</a>)</i></p></dd>
+
+<dt><b>R-36924-43758-45428-63164-00988-45045-48041-44762</b></dt>
+<dd><p>By default, every row in SQLite has a special column, usually called the "rowid", that uniquely identifies that row within the table.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/rowid.test, tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-36924-43758-45428-63164-00988-45045-48041-44762'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-36924-43758-45428-63164-00988-45045-48041-44762'>detail</a>)</i></p></dd>
+
+<dt><b>R-36947-39582-19332-41522-37066-30341-40007-20770</b></dt>
+<dd><p>A WITHOUT ROWID table uses an index b-tree rather than a table b-tree for storage.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-36947-39582-19332-41522-37066-30341-40007-20770'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-36947-39582-19332-41522-37066-30341-40007-20770'>detail</a>)</i></p></dd>
+
+<dt><b>R-36961-63052-16205-51009-18443-35672-28780-03927</b></dt>
+<dd><p>The sqlite3_stmt_readonly() interface returns true for BEGIN since BEGIN merely sets internal flags, but the BEGIN IMMEDIATE and BEGIN EXCLUSIVE commands do touch the database and so sqlite3_stmt_readonly() returns false for those commands.
+<i>(source: <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>, checked-by: tcl/capi3d.test, th3/cov1/vdbeapi14.test, matrix: <a href='matrix/c3ref/stmt_readonly.html#R-36961-63052-16205-51009-18443-35672-28780-03927'>context</a>, <a href='matrix/matrix_dstmt_readonly.html#R-36961-63052-16205-51009-18443-35672-28780-03927'>detail</a>)</i></p></dd>
+
+<dt><b>R-37002-28871-53113-54694-45983-06407-17129-31700</b></dt>
+<dd><p>The "NOT INDEXED" clause specifies that no index shall be used when accessing the preceding table, including implied indices create by UNIQUE and PRIMARY KEY constraints. However, the rowid can still be used to look up entries even when "NOT INDEXED" is specified.
+<i>(source: <a href="lang_indexedby.html">lang_indexedby.html</a>, checked-by: tcl/indexedby.test, matrix: <a href='matrix/lang_indexedby.html#R-37002-28871-53113-54694-45983-06407-17129-31700'>context</a>, <a href='matrix/matrix_dlang_indexedby.html#R-37002-28871-53113-54694-45983-06407-17129-31700'>detail</a>)</i></p></dd>
+
+<dt><b>R-37002-32774-01005-00409-47681-36421-50128-30923</b></dt>
+<dd><p>The two-byte integer at offset 3 gives the number of cells on the page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-37002-32774-01005-00409-47681-36421-50128-30923'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-37002-32774-01005-00409-47681-36421-50128-30923'>detail</a>)</i></p></dd>
+
+<dt><b>R-37014-01401-21089-17070-29691-04562-53032-12534</b></dt>
+<dd><p>The ATTACH and DETACH statements also cause sqlite3_stmt_readonly() to return true since, while those statements change the configuration of a database connection, they do not make changes to the content of the database files on disk.
+<i>(source: <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>, checked-by: tcl/capi3d.test, th3/cov1/vdbeapi14.test, matrix: <a href='matrix/c3ref/stmt_readonly.html#R-37014-01401-21089-17070-29691-04562-53032-12534'>context</a>, <a href='matrix/matrix_dstmt_readonly.html#R-37014-01401-21089-17070-29691-04562-53032-12534'>detail</a>)</i></p></dd>
+
+<dt><b>R-37019-57602-33488-54627-46176-35899-62282-07201</b></dt>
+<dd><p>Nor does REPLACE increment the change counter.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict02.test, matrix: <a href='matrix/lang_conflict.html#R-37019-57602-33488-54627-46176-35899-62282-07201'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-37019-57602-33488-54627-46176-35899-62282-07201'>detail</a>)</i></p></dd>
+
+<dt><b>R-37099-37053-38363-03939-37447-24344-49731-34436</b></dt>
+<dd><p>Similarly, if URI filenames are not recognized when the database connection is first opened, they will not be recognized by ATTACH.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-37099-37053-38363-03939-37447-24344-49731-34436'>context</a>, <a href='matrix/matrix_duri.html#R-37099-37053-38363-03939-37447-24344-49731-34436'>detail</a>)</i></p></dd>
+
+<dt><b>R-37127-14782-63396-43128-39237-20363-34771-13214</b></dt>
+<dd><p>A call to this routine stores N bytes of randomness into buffer P.
+<i>(source: <a href="c3ref/randomness.html">c3ref/randomness.html</a>, checked-by: th3/cov1/random01.test, matrix: <a href='matrix/c3ref/randomness.html#R-37127-14782-63396-43128-39237-20363-34771-13214'>context</a>, <a href='matrix/matrix_drandomness.html#R-37127-14782-63396-43128-39237-20363-34771-13214'>detail</a>)</i></p></dd>
+
+<dt><b>R-37137-45553-37587-45054-45881-44464-34262-16786</b></dt>
+<dd><p>In some pragmas, the schema name is meaningless and is simply ignored.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma01.test, matrix: <a href='matrix/pragma.html#R-37137-45553-37587-45054-45881-44464-34262-16786'>context</a>, <a href='matrix/matrix_dpragma.html#R-37137-45553-37587-45054-45881-44464-34262-16786'>detail</a>)</i></p></dd>
+
+<dt><b>R-37257-17813-38895-36946-60878-55344-03990-64044</b></dt>
+<dd><p>Note that upon successful completion of an SQLITE_CHECKPOINT_TRUNCATE, the log file will have been truncated to zero bytes and so both *pnLog and *pnCkpt will be set to zero.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-37257-17813-38895-36946-60878-55344-03990-64044'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-37257-17813-38895-36946-60878-55344-03990-64044'>detail</a>)</i></p></dd>
+
+<dt><b>R-37283-61388-33413-37250-53520-10226-00265-15596</b></dt>
+<dd><p>All these names are aliases for one another and work equally well in any context.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-37283-61388-33413-37250-53520-10226-00265-15596'>context</a>, <a href='matrix/matrix_dautoinc.html#R-37283-61388-33413-37250-53520-10226-00265-15596'>detail</a>)</i></p></dd>
+
+<dt><b>R-37284-06965-27563-13787-56362-60751-57097-13652</b></dt>
+<dd><p>If the DELETE statement has no ORDER BY clause, then all rows that would be deleted in the absence of the LIMIT clause are assembled in an arbitrary order before applying the LIMIT and OFFSET clauses to determine the subset that are actually deleted.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-37284-06965-27563-13787-56362-60751-57097-13652'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-37284-06965-27563-13787-56362-60751-57097-13652'>detail</a>)</i></p></dd>
+
+<dt><b>R-37286-42536-47612-10625-41273-62615-36449-24349</b></dt>
+<dd><p>/* Add a table named 't1' to the temp, main and an attached database */ ATTACH 'file.db' AS aux; CREATE TABLE t1(x, y); CREATE TEMP TABLE t1(x, y); CREATE TABLE aux.t1(x, y); DROP TABLE t1; /* Drop table in temp database */ DROP TABLE t1; /* Drop table in main database */ DROP TABLE t1; /* Drop table in aux database */
+<i>(source: <a href="lang_naming.html">lang_naming.html</a>, checked-by: tcl/e_resolve.test, matrix: <a href='matrix/lang_naming.html#R-37286-42536-47612-10625-41273-62615-36449-24349'>context</a>, <a href='matrix/matrix_dlang_naming.html#R-37286-42536-47612-10625-41273-62615-36449-24349'>detail</a>)</i></p></dd>
+
+<dt><b>R-37287-38238-38896-00540-17030-60706-04523-55035</b></dt>
+<dd><p>The column may not have a default value of CURRENT_TIME, CURRENT_DATE, CURRENT_TIMESTAMP, or an expression in parentheses.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/req1/altertable01.test, matrix: <a href='matrix/lang_altertable.html#R-37287-38238-38896-00540-17030-60706-04523-55035'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-37287-38238-38896-00540-17030-60706-04523-55035'>detail</a>)</i></p></dd>
+
+<dt><b>R-37304-39405-25413-14317-50314-46541-26352-18136</b></dt>
+<dd><p>If the base expression is NULL then the result of the CASE is always the result of evaluating the ELSE expression if it exists, or NULL if it does not.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-37304-39405-25413-14317-50314-46541-26352-18136'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-37304-39405-25413-14317-50314-46541-26352-18136'>detail</a>)</i></p></dd>
+
+<dt><b>R-37306-64424-24476-44387-21141-11283-27580-01252</b></dt>
+<dd><p>If an SQL table is created using the "WITHOUT ROWID" clause at the end of its CREATE TABLE statement, then that table is a WITHOUT ROWID table and uses a different on-disk representation.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-37306-64424-24476-44387-21141-11283-27580-01252'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-37306-64424-24476-44387-21141-11283-27580-01252'>detail</a>)</i></p></dd>
+
+<dt><b>R-37338-25090-02456-18897-36801-31063-06233-22705</b></dt>
+<dd><p>The sqlite3_result_double() interface sets the result from an application-defined function to be a floating point value specified by its 2nd argument.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-37338-25090-02456-18897-36801-31063-06233-22705'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-37338-25090-02456-18897-36801-31063-06233-22705'>detail</a>)</i></p></dd>
+
+<dt><b>R-37342-04007-10606-64148-39195-51101-42464-04051</b></dt>
+<dd><p>The index value returned is suitable for use as the second parameter to sqlite3_bind().
+<i>(source: <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a>, checked-by: th3/req1/bind03.test, matrix: <a href='matrix/c3ref/bind_parameter_index.html#R-37342-04007-10606-64148-39195-51101-42464-04051'>context</a>, <a href='matrix/matrix_dbind_parameter_index.html#R-37342-04007-10606-64148-39195-51101-42464-04051'>detail</a>)</i></p></dd>
+
+<dt><b>R-37367-57340-65398-65389-19439-49960-45341-59090</b></dt>
+<dd><p>In a well-formed sqlite_stat3 table, the samples for any single index must appear in the same order that they occur in the index. In other words, if the entry with left-most column S1 is earlier in the index b-tree than the entry with left-most column S2, then in the sqlite_stat3 table, sample S1 must have a smaller rowid than sample S2.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-37367-57340-65398-65389-19439-49960-45341-59090'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-37367-57340-65398-65389-19439-49960-45341-59090'>detail</a>)</i></p></dd>
+
+<dt><b>R-37390-56181-43004-09239-55854-05379-58019-03084</b></dt>
+<dd><p>Pending write operations always fail with this error when a rollback occurs.
+<i>(source: <a href="rescode.html">rescode.html</a>, matrix: <a href='matrix/rescode.html#R-37390-56181-43004-09239-55854-05379-58019-03084'>context</a>, <a href='matrix/matrix_drescode.html#R-37390-56181-43004-09239-55854-05379-58019-03084'>detail</a>)</i></p></dd>
+
+<dt><b>R-37394-17492-49473-10319-52468-07209-31067-52433</b></dt>
+<dd><p>For this reason, attempts to change the value of schema_version are a silent no-op when defensive mode is enabled for a database connection.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma12.test, matrix: <a href='matrix/pragma.html#R-37394-17492-49473-10319-52468-07209-31067-52433'>context</a>, <a href='matrix/matrix_dpragma.html#R-37394-17492-49473-10319-52468-07209-31067-52433'>detail</a>)</i></p></dd>
+
+<dt><b>R-37412-09436-16826-17483-13770-41037-63628-17339</b></dt>
+<dd><p>Either modification causes the SQL statement to behave as a query and to return information about how the SQL statement would have operated if the EXPLAIN keyword or phrase had been omitted.
+<i>(source: <a href="lang_explain.html">lang_explain.html</a>, checked-by: th3/cov1/vdbeaux01.test, matrix: <a href='matrix/lang_explain.html#R-37412-09436-16826-17483-13770-41037-63628-17339'>context</a>, <a href='matrix/matrix_dlang_explain.html#R-37412-09436-16826-17483-13770-41037-63628-17339'>detail</a>)</i></p></dd>
+
+<dt><b>R-37434-19929-01541-26191-03532-28681-18224-01267</b></dt>
+<dd><p>Abs(X) returns NULL if X is NULL.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-37434-19929-01541-26191-03532-28681-18224-01267'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-37434-19929-01541-26191-03532-28681-18224-01267'>detail</a>)</i></p></dd>
+
+<dt><b>R-37497-42412-17450-21022-09662-57031-07761-02196</b></dt>
+<dd><p>The size of the reserved region is determined by the one-byte unsigned integer found at an offset of 20 into the database file header.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-37497-42412-17450-21022-09662-57031-07761-02196'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-37497-42412-17450-21022-09662-57031-07761-02196'>detail</a>)</i></p></dd>
+
+<dt><b>R-37514-35566-00640-25084-57688-04377-16048-30214</b></dt>
+<dd><p>A value of 1 means UTF-8.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat03.test, matrix: <a href='matrix/fileformat2.html#R-37514-35566-00640-25084-57688-04377-16048-30214'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-37514-35566-00640-25084-57688-04377-16048-30214'>detail</a>)</i></p></dd>
+
+<dt><b>R-37526-53407-04018-28041-58853-34090-01926-44362</b></dt>
+<dd><p>The second integer is the approximate number of rows in the index that have the same value in the first column of the index.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-37526-53407-04018-28041-58853-34090-01926-44362'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-37526-53407-04018-28041-58853-34090-01926-44362'>detail</a>)</i></p></dd>
+
+<dt><b>R-37639-55938-19671-37883-10811-32762-31289-05215</b></dt>
+<dd><p>This interfaces opens a handle to the BLOB located in row iRow, column zColumn, table zTable in database zDb; in other words, the same BLOB that would be selected by: SELECT zColumn FROM zDb.zTable WHERE rowid = iRow;
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, th3/req1/blob01.test, matrix: <a href='matrix/c3ref/blob_open.html#R-37639-55938-19671-37883-10811-32762-31289-05215'>context</a>, <a href='matrix/matrix_dblob_open.html#R-37639-55938-19671-37883-10811-32762-31289-05215'>detail</a>)</i></p></dd>
+
+<dt><b>R-37672-59189-62965-02252-24561-10805-11427-09542</b></dt>
+<dd><p>In order to use foreign key constraints in SQLite, the library must be compiled with neither SQLITE_OMIT_FOREIGN_KEY nor SQLITE_OMIT_TRIGGER defined.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys05.test, matrix: <a href='matrix/foreignkeys.html#R-37672-59189-62965-02252-24561-10805-11427-09542'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-37672-59189-62965-02252-24561-10805-11427-09542'>detail</a>)</i></p></dd>
+
+<dt><b>R-37687-21505-22371-30401-23060-65345-45987-08312</b></dt>
+<dd><p>If a table-name argument is supplied, then only information about that one table is returned.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-37687-21505-22371-30401-23060-65345-45987-08312'>context</a>, <a href='matrix/matrix_dpragma.html#R-37687-21505-22371-30401-23060-65345-45987-08312'>detail</a>)</i></p></dd>
+
+<dt><b>R-37688-43700-53103-62151-49236-10303-34051-45197</b></dt>
+<dd><p>Use the sqlite3_blob_bytes() interface to determine the size of the opened blob.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_open.html#R-37688-43700-53103-62151-49236-10303-34051-45197'>context</a>, <a href='matrix/matrix_dblob_open.html#R-37688-43700-53103-62151-49236-10303-34051-45197'>detail</a>)</i></p></dd>
+
+<dt><b>R-37736-42616-04169-53390-00856-45033-53695-63004</b></dt>
+<dd><p>If a COMMIT statement (or the RELEASE of a transaction SAVEPOINT) fails because the database is currently in a state that violates a deferred foreign key constraint and there are currently nested savepoints, the nested savepoints remain open.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys15.test, matrix: <a href='matrix/foreignkeys.html#R-37736-42616-04169-53390-00856-45033-53695-63004'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-37736-42616-04169-53390-00856-45033-53695-63004'>detail</a>)</i></p></dd>
+
+<dt><b>R-37760-36374-21935-46380-43039-31326-26713-65030</b></dt>
+<dd><p>The sqlite3_table_column_metadata() interface returns SQLITE_OK and fills in the non-NULL pointers in the final five arguments with appropriate values if the specified column exists.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-37760-36374-21935-46380-43039-31326-26713-65030'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-37760-36374-21935-46380-43039-31326-26713-65030'>detail</a>)</i></p></dd>
+
+<dt><b>R-37773-10272-55463-21527-23891-50096-65319-03368</b></dt>
+<dd><p>For a table or view, the tbl_name column is a copy of the name column.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-37773-10272-55463-21527-23891-50096-65319-03368'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-37773-10272-55463-21527-23891-50096-65319-03368'>detail</a>)</i></p></dd>
+
+<dt><b>R-37783-42715-27194-59163-53660-14941-49401-50024</b></dt>
+<dd><p>Any %HH escape sequences in the query parameters are resolved prior to being appended to the xOpen filename.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-37783-42715-27194-59163-53660-14941-49401-50024'>context</a>, <a href='matrix/matrix_duri.html#R-37783-42715-27194-59163-53660-14941-49401-50024'>detail</a>)</i></p></dd>
+
+<dt><b>R-37795-21752-00915-21672-38602-04515-27824-24579</b></dt>
+<dd><p>The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a function with a call signature of void(*)(void*,int,const char*), and a pointer to void.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/cov1/log01.test, th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-37795-21752-00915-21672-38602-04515-27824-24579'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-37795-21752-00915-21672-38602-04515-27824-24579'>detail</a>)</i></p></dd>
+
+<dt><b>R-37799-62852-34454-60527-13943-51938-08001-65488</b></dt>
+<dd><p>If the right-hand operand is not known, then *V is set to a NULL pointer.
+<i>(source: <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>, checked-by: tcl/vtabrhs1.test, matrix: <a href='matrix/c3ref/vtab_rhs_value.html#R-37799-62852-34454-60527-13943-51938-08001-65488'>context</a>, <a href='matrix/matrix_dvtab_rhs_value.html#R-37799-62852-34454-60527-13943-51938-08001-65488'>detail</a>)</i></p></dd>
+
+<dt><b>R-37800-50174-18959-63478-23278-16020-00862-51147</b></dt>
+<dd><p>Queries against the primary key are efficient: SELECT * FROM demo_index WHERE id=28269;
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-37800-50174-18959-63478-23278-16020-00862-51147'>context</a>, <a href='matrix/matrix_drtree.html#R-37800-50174-18959-63478-23278-16020-00862-51147'>detail</a>)</i></p></dd>
+
+<dt><b>R-37801-37633-06717-41084-61304-63724-52548-02844</b></dt>
+<dd><p>The BLOB handle is closed unconditionally. Even if this routine returns an error code, the handle is still closed.
+<i>(source: <a href="c3ref/blob_close.html">c3ref/blob_close.html</a>, checked-by: tcl/e_blobclose.test, matrix: <a href='matrix/c3ref/blob_close.html#R-37801-37633-06717-41084-61304-63724-52548-02844'>context</a>, <a href='matrix/matrix_dblob_close.html#R-37801-37633-06717-41084-61304-63724-52548-02844'>detail</a>)</i></p></dd>
+
+<dt><b>R-37808-62273-24906-47503-60125-44409-00514-33279</b></dt>
+<dd><p>Note that triggers are automatically dropped when the associated table is dropped.
+<i>(source: <a href="lang_droptrigger.html">lang_droptrigger.html</a>, checked-by: tcl/e_droptrigger.test, matrix: <a href='matrix/lang_droptrigger.html#R-37808-62273-24906-47503-60125-44409-00514-33279'>context</a>, <a href='matrix/matrix_dlang_droptrigger.html#R-37808-62273-24906-47503-60125-44409-00514-33279'>detail</a>)</i></p></dd>
+
+<dt><b>R-37812-47407-44151-24694-62524-58711-37886-57014</b></dt>
+<dd><p>Once an encoding has been set for a database, it cannot be changed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma16.test, matrix: <a href='matrix/pragma.html#R-37812-47407-44151-24694-62524-58711-37886-57014'>context</a>, <a href='matrix/matrix_dpragma.html#R-37812-47407-44151-24694-62524-58711-37886-57014'>detail</a>)</i></p></dd>
+
+<dt><b>R-37821-32925-08521-48318-15093-49732-47345-21314</b></dt>
+<dd><p>It is not possible to ALTER TABLE ADD COLUMN a STORED column.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-37821-32925-08521-48318-15093-49732-47345-21314'>context</a>, <a href='matrix/matrix_dgencol.html#R-37821-32925-08521-48318-15093-49732-47345-21314'>detail</a>)</i></p></dd>
+
+<dt><b>R-37839-54301-54800-59276-61282-21878-13355-00369</b></dt>
+<dd><p>Value is a big-endian 24-bit twos-complement integer.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-37839-54301-54800-59276-61282-21878-13355-00369'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-37839-54301-54800-59276-61282-21878-13355-00369'>detail</a>)</i></p></dd>
+
+<dt><b>R-37910-23168-39063-40634-50772-23998-34303-02455</b></dt>
+<dd><p>The sqlite_version() function returns the version string for the SQLite library that is running.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func04.test, matrix: <a href='matrix/lang_corefunc.html#R-37910-23168-39063-40634-50772-23998-34303-02455'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-37910-23168-39063-40634-50772-23998-34303-02455'>detail</a>)</i></p></dd>
+
+<dt><b>R-37911-51642-34718-50738-49482-42498-05083-29076</b></dt>
+<dd><p>The LIMIT clause is used to place an upper bound on the number of rows returned by the entire SELECT statement.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-37911-51642-34718-50738-49482-42498-05083-29076'>context</a>, <a href='matrix/matrix_dlang_select.html#R-37911-51642-34718-50738-49482-42498-05083-29076'>detail</a>)</i></p></dd>
+
+<dt><b>R-37916-47407-25841-44869-57866-03917-48046-05809</b></dt>
+<dd><p>The MATCH operator is a special syntax for the match() application-defined function.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-37916-47407-25841-44869-57866-03917-48046-05809'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-37916-47407-25841-44869-57866-03917-48046-05809'>detail</a>)</i></p></dd>
+
+<dt><b>R-37923-12173-52320-03983-04095-34314-35102-35798</b></dt>
+<dd><p>The sqlite3_prepare_v2() interface works exactly the same as sqlite3_prepare_v3() with a zero prepFlags parameter.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: src/prepare.c, matrix: <a href='matrix/c3ref/prepare.html#R-37923-12173-52320-03983-04095-34314-35102-35798'>context</a>, <a href='matrix/matrix_dprepare.html#R-37923-12173-52320-03983-04095-34314-35102-35798'>detail</a>)</i></p></dd>
+
+<dt><b>R-37936-22853-22443-15784-22618-50674-60606-55303</b></dt>
+<dd><p>If UTF16 input text contains invalid unicode characters, then SQLite might change those invalid characters into the unicode replacement character: U+FFFD.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, matrix: <a href='matrix/c3ref/bind_blob.html#R-37936-22853-22443-15784-22618-50674-60606-55303'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-37936-22853-22443-15784-22618-50674-60606-55303'>detail</a>)</i></p></dd>
+
+<dt><b>R-37997-42187-51725-59091-37072-50205-56712-26602</b></dt>
+<dd><p>The difference between the effect of a RESTRICT action and normal foreign key constraint enforcement is that the RESTRICT action processing happens as soon as the field is updated - not at the end of the current statement as it would with an immediate constraint, or at the end of the current transaction as it would with a deferred constraint.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-37997-42187-51725-59091-37072-50205-56712-26602'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-37997-42187-51725-59091-37072-50205-56712-26602'>detail</a>)</i></p></dd>
+
+<dt><b>R-38023-18396-22713-13690-61527-29951-04231-55806</b></dt>
+<dd><p>It is an error to use a "*" or "alias.*" expression in any context other than a result expression list.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-38023-18396-22713-13690-61527-29951-04231-55806'>context</a>, <a href='matrix/matrix_dlang_select.html#R-38023-18396-22713-13690-61527-29951-04231-55806'>detail</a>)</i></p></dd>
+
+<dt><b>R-38049-07913-57133-40179-27689-18844-57300-61225</b></dt>
+<dd><p>If any other error occurs while processing an attached database, processing is abandoned and the error code is returned to the caller immediately.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-38049-07913-57133-40179-27689-18844-57300-61225'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-38049-07913-57133-40179-27689-18844-57300-61225'>detail</a>)</i></p></dd>
+
+<dt><b>R-38049-49177-51808-41050-10295-13822-05309-22802</b></dt>
+<dd><p>The anQueue field is an array of mxLevel+1 unsigned integers that tell the current number of elements in the priority queue at each level.
+<i>(source: <a href="rtree.html">rtree.html</a>, matrix: <a href='matrix/rtree.html#R-38049-49177-51808-41050-10295-13822-05309-22802'>context</a>, <a href='matrix/matrix_drtree.html#R-38049-49177-51808-41050-10295-13822-05309-22802'>detail</a>)</i></p></dd>
+
+<dt><b>R-38062-30057-54968-60320-51568-47118-43997-50197</b></dt>
+<dd><p>In partial indexes, only some subset of the rows in the table have corresponding index entries.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-38062-30057-54968-60320-51568-47118-43997-50197'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-38062-30057-54968-60320-51568-47118-43997-50197'>detail</a>)</i></p></dd>
+
+<dt><b>R-38083-64261-20639-49699-39897-18481-13344-23243</b></dt>
+<dd><p>In other words, calls to xUnpin() on a cache with bPurgeable set to false will always have the "discard" flag set to true.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-38083-64261-20639-49699-39897-18481-13344-23243'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-38083-64261-20639-49699-39897-18481-13344-23243'>detail</a>)</i></p></dd>
+
+<dt><b>R-38091-32352-01038-12567-23855-46288-57631-62410</b></dt>
+<dd><p>The maximum parameter number is set at compile-time by the SQLITE_MAX_VARIABLE_NUMBER macro.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: src/main.c, matrix: <a href='matrix/lang_expr.html#R-38091-32352-01038-12567-23855-46288-57631-62410'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-38091-32352-01038-12567-23855-46288-57631-62410'>detail</a>)</i></p></dd>
+
+<dt><b>R-38128-34102-03228-01716-42650-19152-18652-04810</b></dt>
+<dd><p>The sqlite3_wal_autocheckpoint(D,N) is a wrapper around sqlite3_wal_hook() that causes any database on database connection D to automatically checkpoint after committing a transaction if there are N or more frames in the write-ahead log file.
+<i>(source: <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>, checked-by: tcl/e_walauto.test, matrix: <a href='matrix/c3ref/wal_autocheckpoint.html#R-38128-34102-03228-01716-42650-19152-18652-04810'>context</a>, <a href='matrix/matrix_dwal_autocheckpoint.html#R-38128-34102-03228-01716-42650-19152-18652-04810'>detail</a>)</i></p></dd>
+
+<dt><b>R-38176-56274-44779-06953-35503-33902-10868-27976</b></dt>
+<dd><p>In a database with ptrmap pages, the first ptrmap page is page 2.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-38176-56274-44779-06953-35503-33902-10868-27976'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-38176-56274-44779-06953-35503-33902-10868-27976'>detail</a>)</i></p></dd>
+
+<dt><b>R-38180-24846-43105-41785-31134-37616-17707-32594</b></dt>
+<dd><p>Regardless of the compile-time configuration, any identifier that is not on the following 147-element list is not a keyword to the SQL parser in SQLite: ABORT ACTION ADD AFTER ALL ALTER ALWAYS ANALYZE AND AS ASC ATTACH AUTOINCREMENT BEFORE BEGIN BETWEEN BY CASCADE CASE CAST CHECK COLLATE COLUMN COMMIT CONFLICT CONSTRAINT CREATE CROSS CURRENT CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP DATABASE DEFAULT DEFERRABLE DEFERRED DELETE DESC DETACH DISTINCT DO DROP EACH ELSE END ESCAPE EXCEPT EXCLUDE EXCLUSIVE EXISTS EXPLAIN FAIL FILTER FIRST FOLLOWING FOR FOREIGN FROM FULL GENERATED GLOB GROUP GROUPS HAVING IF IGNORE IMMEDIATE IN INDEX INDEXED INITIALLY INNER INSERT INSTEAD INTERSECT INTO IS ISNULL JOIN KEY LAST LEFT LIKE LIMIT MATCH MATERIALIZED NATURAL NO NOT NOTHING NOTNULL NULL NULLS OF OFFSET ON OR ORDER OTHERS OUTER OVER PARTITION PLAN PRAGMA PRECEDING PRIMARY QUERY RAISE RANGE RECURSIVE REFERENCES REGEXP REINDEX RELEASE RENAME REPLACE RESTRICT RETURNING RIGHT ROLLBACK ROW ROWS SAVEPOINT SELECT SET TABLE TEMP TEMPORARY THEN TIES TO TRANSACTION TRIGGER UNBOUNDED UNION UNIQUE UPDATE USING VACUUM VALUES VIEW VIRTUAL WHEN WHERE WINDOW WITH WITHOUT
+<i>(source: <a href="lang_keywords.html">lang_keywords.html</a>, matrix: <a href='matrix/lang_keywords.html#R-38180-24846-43105-41785-31134-37616-17707-32594'>context</a>, <a href='matrix/matrix_dlang_keywords.html#R-38180-24846-43105-41785-31134-37616-17707-32594'>detail</a>)</i></p></dd>
+
+<dt><b>R-38200-45242-44126-59333-52626-62279-09263-45295</b></dt>
+<dd><p>The sqlite3_load_extension() interface returns SQLITE_OK on success and SQLITE_ERROR if something goes wrong.
+<i>(source: <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>, matrix: <a href='matrix/c3ref/load_extension.html#R-38200-45242-44126-59333-52626-62279-09263-45295'>context</a>, <a href='matrix/matrix_dload_extension.html#R-38200-45242-44126-59333-52626-62279-09263-45295'>detail</a>)</i></p></dd>
+
+<dt><b>R-38207-48996-22949-56982-35182-46285-03543-37900</b></dt>
+<dd><p>If zDb is not NULL (or a zero length string) and is not the name of any attached database, SQLITE_ERROR is returned to the caller.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-38207-48996-22949-56982-35182-46285-03543-37900'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-38207-48996-22949-56982-35182-46285-03543-37900'>detail</a>)</i></p></dd>
+
+<dt><b>R-38219-53002-00313-45584-37253-57007-40981-19888</b></dt>
+<dd><p>If no unused ROWID can be found after a reasonable number of attempts, the insert operation fails with an SQLITE_FULL error.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: src/vdbe.c, th3/cov1/vdbe23.test, matrix: <a href='matrix/autoinc.html#R-38219-53002-00313-45584-37253-57007-40981-19888'>context</a>, <a href='matrix/matrix_dautoinc.html#R-38219-53002-00313-45584-37253-57007-40981-19888'>detail</a>)</i></p></dd>
+
+<dt><b>R-38229-16527-29793-36324-34944-03946-52461-48816</b></dt>
+<dd><p>The SQLite parser accepts a comma-separated list of table options after the final close parenthesis in a CREATE TABLE statement.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-38229-16527-29793-36324-34944-03946-52461-48816'>context</a>, <a href='matrix/matrix_dstricttables.html#R-38229-16527-29793-36324-34944-03946-52461-48816'>detail</a>)</i></p></dd>
+
+<dt><b>R-38229-40159-56776-58417-62683-03427-34499-02992</b></dt>
+<dd><p>If the callback function to sqlite3_exec() returns non-zero, then sqlite3_exec() will return SQLITE_ABORT.
+<i>(source: <a href="rescode.html">rescode.html</a>, checked-by: src/legacy.c, th3/cov1/legacy01.test, matrix: <a href='matrix/rescode.html#R-38229-40159-56776-58417-62683-03427-34499-02992'>context</a>, <a href='matrix/matrix_drescode.html#R-38229-40159-56776-58417-62683-03427-34499-02992'>detail</a>)</i></p></dd>
+
+<dt><b>R-38242-53217-63508-42050-45799-27349-00700-51305</b></dt>
+<dd><p>"SEARCH" indicates that only a subset of the table rows are visited.
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-38242-53217-63508-42050-45799-27349-00700-51305'>context</a>, <a href='matrix/matrix_deqp.html#R-38242-53217-63508-42050-45799-27349-00700-51305'>detail</a>)</i></p></dd>
+
+<dt><b>R-38255-01123-17984-58641-36613-29376-16056-55612</b></dt>
+<dd><p>If the filename is ":memory:", then a private, temporary in-memory database is created for the connection.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/sharedcache03.test, matrix: <a href='matrix/c3ref/open.html#R-38255-01123-17984-58641-36613-29376-16056-55612'>context</a>, <a href='matrix/matrix_dopen.html#R-38255-01123-17984-58641-36613-29376-16056-55612'>detail</a>)</i></p></dd>
+
+<dt><b>R-38260-37719-07465-52549-18983-56456-60761-04524</b></dt>
+<dd><p>The VFS is required to either truncate or zero the header of the wal-index when the last connection to it closes.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-38260-37719-07465-52549-18983-56456-60761-04524'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-38260-37719-07465-52549-18983-56456-60761-04524'>detail</a>)</i></p></dd>
+
+<dt><b>R-38293-42495-20916-29854-03664-36898-47028-10197</b></dt>
+<dd><p>Prior savepoints, even savepoints with matching savepoint-names, are unchanged.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-38293-42495-20916-29854-03664-36898-47028-10197'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-38293-42495-20916-29854-03664-36898-47028-10197'>detail</a>)</i></p></dd>
+
+<dt><b>R-38308-24406-60432-36844-44723-02085-25022-07693</b></dt>
+<dd><p>SQLite attempts to use an index to satisfy the ORDER BY clause of a query when possible.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-38308-24406-60432-36844-44723-02085-25022-07693'>context</a>, <a href='matrix/matrix_doptoverview.html#R-38308-24406-60432-36844-44723-02085-25022-07693'>detail</a>)</i></p></dd>
+
+<dt><b>R-38336-05023-13605-39367-03302-30111-01531-40111</b></dt>
+<dd><p>Hence explicitly specifying FOR EACH ROW is optional.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-38336-05023-13605-39367-03302-30111-01531-40111'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-38336-05023-13605-39367-03302-30111-01531-40111'>detail</a>)</i></p></dd>
+
+<dt><b>R-38392-49970-12862-30349-17432-31139-60846-54763</b></dt>
+<dd><p>If the action code is SQLITE_READ and the callback returns SQLITE_IGNORE then the prepared statement statement is constructed to substitute a NULL value in place of the table column that would have been read if SQLITE_OK had been returned.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: tcl/auth.test, th3/cov1/auth01.test, matrix: <a href='matrix/c3ref/set_authorizer.html#R-38392-49970-12862-30349-17432-31139-60846-54763'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-38392-49970-12862-30349-17432-31139-60846-54763'>detail</a>)</i></p></dd>
+
+<dt><b>R-38412-06710-13373-27041-27382-60302-02109-00077</b></dt>
+<dd><p>If the name of the table is unique across all attached databases and the main and temp databases, then the schema-name prefix is not required.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach01.test, matrix: <a href='matrix/lang_attach.html#R-38412-06710-13373-27041-27382-60302-02109-00077'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-38412-06710-13373-27041-27382-60302-02109-00077'>detail</a>)</i></p></dd>
+
+<dt><b>R-38422-04402-49671-03749-58225-12387-56102-01352</b></dt>
+<dd><p>The column from the dataset on the left-hand side of the join-operator is considered to be on the left-hand side of the comparison operator (=) for the purposes of collation sequence and affinity precedence.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-38422-04402-49671-03749-58225-12387-56102-01352'>context</a>, <a href='matrix/matrix_dlang_select.html#R-38422-04402-49671-03749-58225-12387-56102-01352'>detail</a>)</i></p></dd>
+
+<dt><b>R-38462-47168-00802-29232-37957-12454-50485-62719</b></dt>
+<dd><p>The number of system calls for filesystem operations is reduced, possibly resulting in a small performance increase.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma05.test, matrix: <a href='matrix/pragma.html#R-38462-47168-00802-29232-37957-12454-50485-62719'>context</a>, <a href='matrix/matrix_dpragma.html#R-38462-47168-00802-29232-37957-12454-50485-62719'>detail</a>)</i></p></dd>
+
+<dt><b>R-38465-03616-05704-04458-16230-08535-12299-37595</b></dt>
+<dd><p>If there is an ON clause then the ON expression is evaluated for each row of the cartesian product as a boolean expression. Only rows for which the expression evaluates to true are included from the dataset.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, tcl/e_select2.test, matrix: <a href='matrix/lang_select.html#R-38465-03616-05704-04458-16230-08535-12299-37595'>context</a>, <a href='matrix/matrix_dlang_select.html#R-38465-03616-05704-04458-16230-08535-12299-37595'>detail</a>)</i></p></dd>
+
+<dt><b>R-38470-19236-05585-14334-15897-63539-60552-16628</b></dt>
+<dd><p>As with all other SQLite APIs, those whose names end with "16" return UTF-16 encoded strings and the other functions return UTF-8.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-38470-19236-05585-14334-15897-63539-60552-16628'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-38470-19236-05585-14334-15897-63539-60552-16628'>detail</a>)</i></p></dd>
+
+<dt><b>R-38485-20010-44949-34877-39366-11397-10597-42284</b></dt>
+<dd><p>If a table contains a column of type INTEGER PRIMARY KEY, then that column becomes an alias for the ROWID.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-38485-20010-44949-34877-39366-11397-10597-42284'>context</a>, <a href='matrix/matrix_dautoinc.html#R-38485-20010-44949-34877-39366-11397-10597-42284'>detail</a>)</i></p></dd>
+
+<dt><b>R-38493-22774-30789-51088-59525-02333-30794-32184</b></dt>
+<dd><p>when sqlite3_set_auxdata() is invoked again on the same parameter
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-38493-22774-30789-51088-59525-02333-30794-32184'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-38493-22774-30789-51088-59525-02333-30794-32184'>detail</a>)</i></p></dd>
+
+<dt><b>R-38513-43475-55678-22086-42456-40584-55564-45510</b></dt>
+<dd><p>A call to xRelease(X,M) invalidates all savepoints where N>=M.
+<i>(source: <a href="vtab.html">vtab.html</a>, matrix: <a href='matrix/vtab.html#R-38513-43475-55678-22086-42456-40584-55564-45510'>context</a>, <a href='matrix/matrix_dvtab.html#R-38513-43475-55678-22086-42456-40584-55564-45510'>detail</a>)</i></p></dd>
+
+<dt><b>R-38515-45264-03335-50980-08297-28344-12265-07348</b></dt>
+<dd><p>An UPDATE statement is used to modify a subset of the values stored in zero or more rows of the database table identified by the qualified-table-name specified as part of the UPDATE statement.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-38515-45264-03335-50980-08297-28344-12265-07348'>context</a>, <a href='matrix/matrix_dlang_update.html#R-38515-45264-03335-50980-08297-28344-12265-07348'>detail</a>)</i></p></dd>
+
+<dt><b>R-38536-04510-23157-49681-06132-47285-44686-09674</b></dt>
+<dd><p>The quote(X) function returns the text of an SQL literal which is the value of its argument suitable for inclusion into an SQL statement.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-38536-04510-23157-49681-06132-47285-44686-09674'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-38536-04510-23157-49681-06132-47285-44686-09674'>detail</a>)</i></p></dd>
+
+<dt><b>R-38545-41243-15928-60739-42424-40199-61520-19344</b></dt>
+<dd><p>If SQLite determines that invoking the busy handler could result in a deadlock, it will go ahead and return SQLITE_BUSY to the application instead of invoking the busy handler.
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-38545-41243-15928-60739-42424-40199-61520-19344'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-38545-41243-15928-60739-42424-40199-61520-19344'>detail</a>)</i></p></dd>
+
+<dt><b>R-38577-07276-49824-55947-21917-12317-50155-56118</b></dt>
+<dd><p>If the query string is present, then all query parameters are passed through into the xOpen method of the underlying VFS.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-38577-07276-49824-55947-21917-12317-50155-56118'>context</a>, <a href='matrix/matrix_duri.html#R-38577-07276-49824-55947-21917-12317-50155-56118'>detail</a>)</i></p></dd>
+
+<dt><b>R-38578-34175-46775-59738-25546-18239-05883-23898</b></dt>
+<dd><p>If an SQLITE_BUSY error is encountered when processing one or more of the attached WAL databases, the operation is still attempted on any remaining attached databases and SQLITE_BUSY is returned at the end.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-38578-34175-46775-59738-25546-18239-05883-23898'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-38578-34175-46775-59738-25546-18239-05883-23898'>detail</a>)</i></p></dd>
+
+<dt><b>R-38590-62769-37174-11350-15307-56847-39156-23447</b></dt>
+<dd><p>The first parameter to the authorizer callback is a copy of the third parameter to the sqlite3_set_authorizer() interface.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: src/tclsqlite.c, th3/th3util.c, matrix: <a href='matrix/c3ref/set_authorizer.html#R-38590-62769-37174-11350-15307-56847-39156-23447'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-38590-62769-37174-11350-15307-56847-39156-23447'>detail</a>)</i></p></dd>
+
+<dt><b>R-38595-30726-57286-21229-43510-46199-10154-57516</b></dt>
+<dd><p>If the value N is out of range or if the N-th parameter is nameless, then NULL is returned.
+<i>(source: <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>, checked-by: th3/req1/bind04.test, matrix: <a href='matrix/c3ref/bind_parameter_name.html#R-38595-30726-57286-21229-43510-46199-10154-57516'>context</a>, <a href='matrix/matrix_dbind_parameter_name.html#R-38595-30726-57286-21229-43510-46199-10154-57516'>detail</a>)</i></p></dd>
+
+<dt><b>R-38620-19499-44951-35069-39820-53253-57753-11041</b></dt>
+<dd><p>In a CASE with a base expression, the base expression is evaluated just once and the result is compared against the evaluation of each WHEN expression from left to right.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-38620-19499-44951-35069-39820-53253-57753-11041'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-38620-19499-44951-35069-39820-53253-57753-11041'>detail</a>)</i></p></dd>
+
+<dt><b>R-38644-64912-46499-33348-47960-41753-16072-56504</b></dt>
+<dd><p>If the right-most element of a compound SELECT is a VALUES clause, then no ORDER BY clause is allowed on that statement.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-38644-64912-46499-33348-47960-41753-16072-56504'>context</a>, <a href='matrix/matrix_dlang_select.html#R-38644-64912-46499-33348-47960-41753-16072-56504'>detail</a>)</i></p></dd>
+
+<dt><b>R-38650-02327-39862-58764-51816-33051-52085-34596</b></dt>
+<dd><p>The immutable query parameter is a boolean that signals to SQLite that the underlying database file is held on read-only media and cannot be modified, even by another process with elevated privileges.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-38650-02327-39862-58764-51816-33051-52085-34596'>context</a>, <a href='matrix/matrix_duri.html#R-38650-02327-39862-58764-51816-33051-52085-34596'>detail</a>)</i></p></dd>
+
+<dt><b>R-38720-18127-00182-16789-56682-25353-36594-39383</b></dt>
+<dd><p>The default setting is determined by the SQLITE_ALLOW_COVERING_INDEX_SCAN compile-time option, or is "on" if that compile-time option is omitted.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/global.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-38720-18127-00182-16789-56682-25353-36594-39383'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-38720-18127-00182-16789-56682-25353-36594-39383'>detail</a>)</i></p></dd>
+
+<dt><b>R-38787-59790-48915-64090-33059-22783-12299-30230</b></dt>
+<dd><p>If the SQLITE_FCNTL_PRAGMA file control returns SQLITE_NOTFOUND, then normal PRAGMA processing continues.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, checked-by: th3/cov1/pragma24.test, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-38787-59790-48915-64090-33059-22783-12299-30230'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-38787-59790-48915-64090-33059-22783-12299-30230'>detail</a>)</i></p></dd>
+
+<dt><b>R-38799-08373-51877-49685-25873-19436-11233-20221</b></dt>
+<dd><p>URI filenames can be enabled or disabled using the SQLITE_USE_URI=1 or SQLITE_USE_URI=0 compile-time options.
+<i>(source: <a href="uri.html">uri.html</a>, checked-by: src/global.c, matrix: <a href='matrix/uri.html#R-38799-08373-51877-49685-25873-19436-11233-20221'>context</a>, <a href='matrix/matrix_duri.html#R-38799-08373-51877-49685-25873-19436-11233-20221'>detail</a>)</i></p></dd>
+
+<dt><b>R-38815-48046-28937-36081-10893-02265-15426-25349</b></dt>
+<dd><p>A frame is considered valid if and only if the following conditions are true: The salt-1 and salt-2 values in the frame-header match salt values in the wal-header The checksum values in the final 8 bytes of the frame-header exactly match the checksum computed consecutively on the first 24 bytes of the WAL header and the first 8 bytes and the content of all frames up to and including the current frame.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-38815-48046-28937-36081-10893-02265-15426-25349'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-38815-48046-28937-36081-10893-02265-15426-25349'>detail</a>)</i></p></dd>
+
+<dt><b>R-38828-57497-43339-57489-42530-28213-54283-40875</b></dt>
+<dd><p>When a SAVEPOINT is the outer-most savepoint and it is not within a BEGIN...COMMIT then the behavior is the same as BEGIN DEFERRED TRANSACTION.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-38828-57497-43339-57489-42530-28213-54283-40875'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-38828-57497-43339-57489-42530-28213-54283-40875'>detail</a>)</i></p></dd>
+
+<dt><b>R-38841-33525-61370-32823-20999-44685-25709-53990</b></dt>
+<dd><p>Application code is allowed to modify the sqlite_sequence table, to add new rows, to delete rows, or to modify existing rows.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-38841-33525-61370-32823-20999-44685-25709-53990'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-38841-33525-61370-32823-20999-44685-25709-53990'>detail</a>)</i></p></dd>
+
+<dt><b>R-38886-35357-61293-06392-16818-17229-57079-41544</b></dt>
+<dd><p>The 'auto' modifier is a no-op for text time-values.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, matrix: <a href='matrix/lang_datefunc.html#R-38886-35357-61293-06392-16818-17229-57079-41544'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-38886-35357-61293-06392-16818-17229-57079-41544'>detail</a>)</i></p></dd>
+
+<dt><b>R-38890-04494-12007-38862-04785-26769-02730-62637</b></dt>
+<dd><p>Likewise, the IS DISTINCT FROM operator means the same thing as IS NOT.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-38890-04494-12007-38862-04785-26769-02730-62637'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-38890-04494-12007-38862-04785-26769-02730-62637'>detail</a>)</i></p></dd>
+
+<dt><b>R-38910-65521-60645-02772-59473-48927-46815-22731</b></dt>
+<dd><p>The "const char *" variable pointed to by the V parameter will be set to a zero-terminated UTF-8 string containing the name of the index or table used for the X-th loop.
+<i>(source: <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a>, checked-by: th3/cov1/status02.test, matrix: <a href='matrix/c3ref/c_scanstat_est.html#R-38910-65521-60645-02772-59473-48927-46815-22731'>context</a>, <a href='matrix/matrix_dc_scanstat_est.html#R-38910-65521-60645-02772-59473-48927-46815-22731'>detail</a>)</i></p></dd>
+
+<dt><b>R-38914-26427-29082-17331-29986-21952-39833-10934</b></dt>
+<dd><p>The total_changes() function returns the number of row changes caused by INSERT, UPDATE or DELETE statements since the current database connection was opened.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/e_totalchanges.test, th3/cov1/func05.test, matrix: <a href='matrix/lang_corefunc.html#R-38914-26427-29082-17331-29986-21952-39833-10934'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-38914-26427-29082-17331-29986-21952-39833-10934'>detail</a>)</i></p></dd>
+
+<dt><b>R-38971-13593-63134-41706-45438-37598-45923-53388</b></dt>
+<dd><p>Note that a declared type of "FLOATING POINT" would give INTEGER affinity, not REAL affinity, due to the "INT" at the end of "POINT".
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_02.test, matrix: <a href='matrix/datatype3.html#R-38971-13593-63134-41706-45438-37598-45923-53388'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-38971-13593-63134-41706-45438-37598-45923-53388'>detail</a>)</i></p></dd>
+
+<dt><b>R-38973-52184-38987-24216-42448-05561-19819-59369</b></dt>
+<dd><p>If the optional ESCAPE clause is present, then the like() function is invoked with three arguments.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-38973-52184-38987-24216-42448-05561-19819-59369'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-38973-52184-38987-24216-42448-05561-19819-59369'>detail</a>)</i></p></dd>
+
+<dt><b>R-38980-08445-54197-34551-31600-64664-60502-04654</b></dt>
+<dd><p>NOCASE does not implement a general purpose unicode caseless comparison.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-38980-08445-54197-34551-31600-64664-60502-04654'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-38980-08445-54197-34551-31600-64664-60502-04654'>detail</a>)</i></p></dd>
+
+<dt><b>R-38989-21359-13709-49366-18905-24783-41677-06526</b></dt>
+<dd><p>The szExtra parameter will a number less than 250.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-38989-21359-13709-49366-18905-24783-41677-06526'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-38989-21359-13709-49366-18905-24783-41677-06526'>detail</a>)</i></p></dd>
+
+<dt><b>R-39000-44986-06007-27676-18826-64674-54503-26539</b></dt>
+<dd><p>If S is NULL, then the highest transaction state of any schema on database connection D is returned.
+<i>(source: <a href="c3ref/txn_state.html">c3ref/txn_state.html</a>, matrix: <a href='matrix/c3ref/txn_state.html#R-39000-44986-06007-27676-18826-64674-54503-26539'>context</a>, <a href='matrix/matrix_dtxn_state.html#R-39000-44986-06007-27676-18826-64674-54503-26539'>detail</a>)</i></p></dd>
+
+<dt><b>R-39009-25596-33829-41361-38484-11658-48369-57903</b></dt>
+<dd><p>The result of the CASE expression is the evaluation of the THEN expression that corresponds to the first WHEN expression that evaluates to true.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-39009-25596-33829-41361-38484-11658-48369-57903'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-39009-25596-33829-41361-38484-11658-48369-57903'>detail</a>)</i></p></dd>
+
+<dt><b>R-39020-65330-19381-32057-25425-01859-32299-49676</b></dt>
+<dd><p>The COLLATE clause of the column definition is used to define alternative collating functions for a column.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-39020-65330-19381-32057-25425-01859-32299-49676'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-39020-65330-19381-32057-25425-01859-32299-49676'>detail</a>)</i></p></dd>
+
+<dt><b>R-39051-42271-46025-06225-43154-22193-07696-21282</b></dt>
+<dd><p>The second form attempts to modify the maximum page count.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma12.test, matrix: <a href='matrix/pragma.html#R-39051-42271-46025-06225-43154-22193-07696-21282'>context</a>, <a href='matrix/matrix_dpragma.html#R-39051-42271-46025-06225-43154-22193-07696-21282'>detail</a>)</i></p></dd>
+
+<dt><b>R-39057-63901-55190-21860-54230-15728-49391-11241</b></dt>
+<dd><p>The R*Tree index did not find the exact answer itself, it merely limited the search space.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-39057-63901-55190-21860-54230-15728-49391-11241'>context</a>, <a href='matrix/matrix_drtree.html#R-39057-63901-55190-21860-54230-15728-49391-11241'>detail</a>)</i></p></dd>
+
+<dt><b>R-39070-64522-51812-62435-11898-58079-59310-06231</b></dt>
+<dd><p>The sqlite3_db_cacheflush(D) interface flushes caches for all schemas - "main", "temp", and any attached databases.
+<i>(source: <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>, matrix: <a href='matrix/c3ref/db_cacheflush.html#R-39070-64522-51812-62435-11898-58079-59310-06231'>context</a>, <a href='matrix/matrix_ddb_cacheflush.html#R-39070-64522-51812-62435-11898-58079-59310-06231'>detail</a>)</i></p></dd>
+
+<dt><b>R-39073-45389-04336-35554-15796-29115-57398-44032</b></dt>
+<dd><p>If M is -1 in the initial journal header, then the number of page records that follow is computed by computing how many page records will fit in the available space of the remainder of the journal file.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-39073-45389-04336-35554-15796-29115-57398-44032'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-39073-45389-04336-35554-15796-29115-57398-44032'>detail</a>)</i></p></dd>
+
+<dt><b>R-39074-57615-41505-43616-22624-34066-27860-62726</b></dt>
+<dd><p>The SQLITE_OMIT_TRACE compile-time option causes sqlite3_expanded_sql() to always return NULL.
+<i>(source: <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>, checked-by: th3/req1/sql01.test, matrix: <a href='matrix/c3ref/expanded_sql.html#R-39074-57615-41505-43616-22624-34066-27860-62726'>context</a>, <a href='matrix/matrix_dexpanded_sql.html#R-39074-57615-41505-43616-22624-34066-27860-62726'>detail</a>)</i></p></dd>
+
+<dt><b>R-39082-45490-57705-20308-15536-26647-22917-12593</b></dt>
+<dd><p>The query above will use the po_parent index to help find the answer, since the po_parent index contains entries for all rows of interest.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-39082-45490-57705-20308-15536-26647-22917-12593'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-39082-45490-57705-20308-15536-26647-22917-12593'>detail</a>)</i></p></dd>
+
+<dt><b>R-39084-14613-42485-09805-36660-25752-30462-34243</b></dt>
+<dd><p>The sqlite3_str_errcode(X) method returns SQLITE_NOMEM following any out-of-memory error, or SQLITE_TOOBIG if the size of the dynamic string exceeds SQLITE_MAX_LENGTH, or SQLITE_OK if there have been no errors.
+<i>(source: <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>, matrix: <a href='matrix/c3ref/str_errcode.html#R-39084-14613-42485-09805-36660-25752-30462-34243'>context</a>, <a href='matrix/matrix_dstr_errcode.html#R-39084-14613-42485-09805-36660-25752-30462-34243'>detail</a>)</i></p></dd>
+
+<dt><b>R-39086-42574-52066-34566-03603-26293-15630-13712</b></dt>
+<dd><p>The third argument to xCreate(), bPurgeable, is true if the cache being created will be used to cache database pages of a file stored on disk, or false if it is used for an in-memory database.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-39086-42574-52066-34566-03603-26293-15630-13712'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-39086-42574-52066-34566-03603-26293-15630-13712'>detail</a>)</i></p></dd>
+
+<dt><b>R-39088-19376-30403-42071-52241-63734-59003-40185</b></dt>
+<dd><p>The sqlite3_value object returned by sqlite3_column_value() is unprotected.
+<i>(source: <a href="c3ref/value.html">c3ref/value.html</a>, checked-by: th3/req1/value01.test, matrix: <a href='matrix/c3ref/value.html#R-39088-19376-30403-42071-52241-63734-59003-40185'>context</a>, <a href='matrix/matrix_dvalue.html#R-39088-19376-30403-42071-52241-63734-59003-40185'>detail</a>)</i></p></dd>
+
+<dt><b>R-39089-10219-02970-26628-53332-63736-48500-08755</b></dt>
+<dd><p>The s1 value spans all 32-bit integer terms of the sequence whereas s0 omits the final term.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-39089-10219-02970-26628-53332-63736-48500-08755'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-39089-10219-02970-26628-53332-63736-48500-08755'>detail</a>)</i></p></dd>
+
+<dt><b>R-39094-01937-60067-64937-11731-20352-55473-40783</b></dt>
+<dd><p>This second query will find both 28269 entry (since every bounding box overlaps with itself) and also other zipcode that is close enough to 28269 that their bounding boxes overlap.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-39094-01937-60067-64937-11731-20352-55473-40783'>context</a>, <a href='matrix/matrix_drtree.html#R-39094-01937-60067-64937-11731-20352-55473-40783'>detail</a>)</i></p></dd>
+
+<dt><b>R-39100-27317-10483-05917-57976-22690-13501-50723</b></dt>
+<dd><p>The SQLITE_CONFIG_PCACHE_HDRSZ option takes a single parameter which is a pointer to an integer and writes into that integer the number of extra bytes per page required for each page in SQLITE_CONFIG_PAGECACHE.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/cov1/main42.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-39100-27317-10483-05917-57976-22690-13501-50723'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-39100-27317-10483-05917-57976-22690-13501-50723'>detail</a>)</i></p></dd>
+
+<dt><b>R-39127-51288-21828-60522-16075-50686-33622-44137</b></dt>
+<dd><p>When a coordinate cannot be exactly represented by a 32-bit floating point number, the lower-bound coordinates are rounded down and the upper-bound coordinates are rounded up.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-39127-51288-21828-60522-16075-50686-33622-44137'>context</a>, <a href='matrix/matrix_drtree.html#R-39127-51288-21828-60522-16075-50686-33622-44137'>detail</a>)</i></p></dd>
+
+<dt><b>R-39150-60222-54489-42043-19266-00482-07233-17932</b></dt>
+<dd><p>On a cache where bPurgeable is false, SQLite will never invoke xUnpin() except to deliberately delete a page.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: th3/th3pcache.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-39150-60222-54489-42043-19266-00482-07233-17932'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-39150-60222-54489-42043-19266-00482-07233-17932'>detail</a>)</i></p></dd>
+
+<dt><b>R-39153-14977-19052-49938-18299-33449-45520-33553</b></dt>
+<dd><p>If any other type of value is inserted into such a column, the r-tree module silently converts it to the required type before writing the new record to the database.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-39153-14977-19052-49938-18299-33449-45520-33553'>context</a>, <a href='matrix/matrix_drtree.html#R-39153-14977-19052-49938-18299-33449-45520-33553'>detail</a>)</i></p></dd>
+
+<dt><b>R-39210-36906-47474-04238-18863-57364-16133-33806</b></dt>
+<dd><p>"b=6" will match to "6=b" as long as "b=6" is on the index and "6=b" is in the query.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-39210-36906-47474-04238-18863-57364-16133-33806'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-39210-36906-47474-04238-18863-57364-16133-33806'>detail</a>)</i></p></dd>
+
+<dt><b>R-39221-43493-49031-48260-11050-48204-23096-55403</b></dt>
+<dd><p>The sqlite3_mutex_leave() routine exits a mutex that was previously entered by the same thread.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-39221-43493-49031-48260-11050-48204-23096-55403'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-39221-43493-49031-48260-11050-48204-23096-55403'>detail</a>)</i></p></dd>
+
+<dt><b>R-39225-16568-52968-30010-37247-11603-25439-49402</b></dt>
+<dd><p>The expression of a generated column may not directly reference the ROWID, though it can reference the INTEGER PRIMARY KEY column, which is often the same thing.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-39225-16568-52968-30010-37247-11603-25439-49402'>context</a>, <a href='matrix/matrix_dgencol.html#R-39225-16568-52968-30010-37247-11603-25439-49402'>detail</a>)</i></p></dd>
+
+<dt><b>R-39254-55835-64728-03186-59811-05640-07786-15038</b></dt>
+<dd><p>Each entry in the index b-tree corresponds to a single row in the associated SQL table.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-39254-55835-64728-03186-59811-05640-07786-15038'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-39254-55835-64728-03186-59811-05640-07786-15038'>detail</a>)</i></p></dd>
+
+<dt><b>R-39255-30546-51738-15531-11992-13732-26407-08285</b></dt>
+<dd><p>Hence, the STRICT keyword is effectively ignored.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq02.test, matrix: <a href='matrix/stricttables.html#R-39255-30546-51738-15531-11992-13732-26407-08285'>context</a>, <a href='matrix/matrix_dstricttables.html#R-39255-30546-51738-15531-11992-13732-26407-08285'>detail</a>)</i></p></dd>
+
+<dt><b>R-39265-04070-30004-05781-22531-14920-64985-48690</b></dt>
+<dd><p>If no matching expression can be found in the result columns of any constituent SELECT, it is an error.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-39265-04070-30004-05781-22531-14920-64985-48690'>context</a>, <a href='matrix/matrix_dlang_select.html#R-39265-04070-30004-05781-22531-14920-64985-48690'>detail</a>)</i></p></dd>
+
+<dt><b>R-39279-48828-00404-43812-37996-18739-13104-15317</b></dt>
+<dd><p>The order of values in the record is the same as the order of columns in the SQL table definition.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-39279-48828-00404-43812-37996-18739-13104-15317'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-39279-48828-00404-43812-37996-18739-13104-15317'>detail</a>)</i></p></dd>
+
+<dt><b>R-39317-26817-16448-42621-51632-09123-64957-11200</b></dt>
+<dd><p>Unmatched columns are filled in with NULL.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, matrix: <a href='matrix/lang_select.html#R-39317-26817-16448-42621-51632-09123-64957-11200'>context</a>, <a href='matrix/matrix_dlang_select.html#R-39317-26817-16448-42621-51632-09123-64957-11200'>detail</a>)</i></p></dd>
+
+<dt><b>R-39332-27982-27049-48904-10655-02053-00990-04758</b></dt>
+<dd><p>The subquery does not use LIMIT or the outer query does not use aggregates.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-39332-27982-27049-48904-10655-02053-00990-04758'>context</a>, <a href='matrix/matrix_doptoverview.html#R-39332-27982-27049-48904-10655-02053-00990-04758'>detail</a>)</i></p></dd>
+
+<dt><b>R-39350-14264-06804-50075-43758-39518-52551-62265</b></dt>
+<dd><p>These routines open an SQLite database file as specified by the filename argument.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-39350-14264-06804-50075-43758-39518-52551-62265'>context</a>, <a href='matrix/matrix_dopen.html#R-39350-14264-06804-50075-43758-39518-52551-62265'>detail</a>)</i></p></dd>
+
+<dt><b>R-39368-64333-53302-20010-22332-46980-48834-46750</b></dt>
+<dd><p>In a compound SELECT, all the constituent SELECTs must return the same number of result columns.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-39368-64333-53302-20010-22332-46980-48834-46750'>context</a>, <a href='matrix/matrix_dlang_select.html#R-39368-64333-53302-20010-22332-46980-48834-46750'>detail</a>)</i></p></dd>
+
+<dt><b>R-39412-46882-37101-45160-49245-06434-49198-35151</b></dt>
+<dd><p>An application-defined function is permitted to call other SQLite interfaces.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc06.test, matrix: <a href='matrix/c3ref/create_function.html#R-39412-46882-37101-45160-49245-06434-49198-35151'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-39412-46882-37101-45160-49245-06434-49198-35151'>detail</a>)</i></p></dd>
+
+<dt><b>R-39414-35489-25303-10592-22636-36530-45454-18784</b></dt>
+<dd><p>The infix GLOB operator is implemented by calling the function glob(Y,X) and can be modified by overriding that function.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-39414-35489-25303-10592-22636-36530-45454-18784'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-39414-35489-25303-10592-22636-36530-45454-18784'>detail</a>)</i></p></dd>
+
+<dt><b>R-39448-56079-43024-42660-00434-04264-13777-54050</b></dt>
+<dd><p>The filename argument sqlite3_open16() is converted from UTF16 native byte order into UTF8 prior to processing.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-39448-56079-43024-42660-00434-04264-13777-54050'>context</a>, <a href='matrix/matrix_duri.html#R-39448-56079-43024-42660-00434-04264-13777-54050'>detail</a>)</i></p></dd>
+
+<dt><b>R-39464-12723-18801-15682-15503-09131-15880-06935</b></dt>
+<dd><p>The return value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-39464-12723-18801-15682-15503-09131-15880-06935'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-39464-12723-18801-15682-15503-09131-15880-06935'>detail</a>)</i></p></dd>
+
+<dt><b>R-39464-36566-10218-24417-22703-07867-12954-27805</b></dt>
+<dd><p>The first time the database is written, an exclusive lock is obtained and held.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-39464-36566-10218-24417-22703-07867-12954-27805'>context</a>, <a href='matrix/matrix_dpragma.html#R-39464-36566-10218-24417-22703-07867-12954-27805'>detail</a>)</i></p></dd>
+
+<dt><b>R-39544-28997-13653-57291-53593-51283-21786-51117</b></dt>
+<dd><p>In other words, the first column is 0 if the equivalent call to sqlite3_wal_checkpoint_v2() would have returned SQLITE_OK or 1 if the equivalent call would have returned SQLITE_BUSY.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-39544-28997-13653-57291-53593-51283-21786-51117'>context</a>, <a href='matrix/matrix_dpragma.html#R-39544-28997-13653-57291-53593-51283-21786-51117'>detail</a>)</i></p></dd>
+
+<dt><b>R-39556-50570-30565-00761-35102-37425-01790-22325</b></dt>
+<dd><p>The progress handler is also disabled by setting N to a value less than 1.
+<i>(source: <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>, checked-by: th3/req1/progress01.test, matrix: <a href='matrix/c3ref/progress_handler.html#R-39556-50570-30565-00761-35102-37425-01790-22325'>context</a>, <a href='matrix/matrix_dprogress_handler.html#R-39556-50570-30565-00761-35102-37425-01790-22325'>detail</a>)</i></p></dd>
+
+<dt><b>R-39564-36305-13838-22783-16141-24782-64457-11535</b></dt>
+<dd><p>The sqlite_compileoption_used() SQL function is a wrapper around the sqlite3_compileoption_used() C/C++ function.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/cov1/ctime02.test, matrix: <a href='matrix/lang_corefunc.html#R-39564-36305-13838-22783-16141-24782-64457-11535'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-39564-36305-13838-22783-16141-24782-64457-11535'>detail</a>)</i></p></dd>
+
+<dt><b>R-39578-54133-12312-25444-39025-43860-65200-11026</b></dt>
+<dd><p>The SQLITE_FCNTL_OVERWRITE opcode is invoked by SQLite after opening a write transaction to indicate that, unless it is rolled back for some reason, the entire database file will be overwritten by the current transaction.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-39578-54133-12312-25444-39025-43860-65200-11026'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-39578-54133-12312-25444-39025-43860-65200-11026'>detail</a>)</i></p></dd>
+
+<dt><b>R-39608-49000-51968-24842-19070-08094-34539-25072</b></dt>
+<dd><p>This pragma sets or queries the database connection locking-mode.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-39608-49000-51968-24842-19070-08094-34539-25072'>context</a>, <a href='matrix/matrix_dpragma.html#R-39608-49000-51968-24842-19070-08094-34539-25072'>detail</a>)</i></p></dd>
+
+<dt><b>R-39616-20555-02533-15918-45822-50476-08959-13235</b></dt>
+<dd><p>Both GLOB and LIKE may be preceded by the NOT keyword to invert the sense of the test.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-39616-20555-02533-15918-45822-50476-08959-13235'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-39616-20555-02533-15918-45822-50476-08959-13235'>detail</a>)</i></p></dd>
+
+<dt><b>R-39625-59133-51160-16821-08966-29861-61919-63168</b></dt>
+<dd><p>A USING or ON clause may not be added to a join that specifies the NATURAL keyword.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-39625-59133-51160-16821-08966-29861-61919-63168'>context</a>, <a href='matrix/matrix_dlang_select.html#R-39625-59133-51160-16821-08966-29861-61919-63168'>detail</a>)</i></p></dd>
+
+<dt><b>R-39692-12488-54491-44352-04912-13609-39585-46004</b></dt>
+<dd><p>Deferred foreign key constraints are not checked until the transaction tries to COMMIT.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys12.test, th3/req1/foreignkeys14.test, matrix: <a href='matrix/foreignkeys.html#R-39692-12488-54491-44352-04912-13609-39585-46004'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-39692-12488-54491-44352-04912-13609-39585-46004'>detail</a>)</i></p></dd>
+
+<dt><b>R-39719-17021-25795-58953-42832-28593-26146-38577</b></dt>
+<dd><p>The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions return the P argument from the previous call of the same function on the same database connection D, or NULL for the first call for each function on D.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-39719-17021-25795-58953-42832-28593-26146-38577'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-39719-17021-25795-58953-42832-28593-26146-38577'>detail</a>)</i></p></dd>
+
+<dt><b>R-39746-16618-18331-39876-26719-11435-38479-45574</b></dt>
+<dd><p>It is not possible to change the text encoding of a database after it has been created and any attempt to do so will be silently ignored.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma16.test, matrix: <a href='matrix/pragma.html#R-39746-16618-18331-39876-26719-11435-38479-45574'>context</a>, <a href='matrix/matrix_dpragma.html#R-39746-16618-18331-39876-26719-11435-38479-45574'>detail</a>)</i></p></dd>
+
+<dt><b>R-39756-42402-63809-30367-59495-08969-44086-41454</b></dt>
+<dd><p>The return value is a copy of the third parameter from the previous call, if any, or 0.
+<i>(source: <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>, matrix: <a href='matrix/c3ref/wal_hook.html#R-39756-42402-63809-30367-59495-08969-44086-41454'>context</a>, <a href='matrix/matrix_dwal_hook.html#R-39756-42402-63809-30367-59495-08969-44086-41454'>detail</a>)</i></p></dd>
+
+<dt><b>R-39763-46240-25727-03918-12212-03992-13820-06726</b></dt>
+<dd><p>PRAGMA schema.journal_mode; PRAGMA schema.journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF This pragma queries or sets the journal mode for databases associated with the current database connection.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma23.test, matrix: <a href='matrix/pragma.html#R-39763-46240-25727-03918-12212-03992-13820-06726'>context</a>, <a href='matrix/matrix_dpragma.html#R-39763-46240-25727-03918-12212-03992-13820-06726'>detail</a>)</i></p></dd>
+
+<dt><b>R-39822-07822-55219-05739-15484-26699-12744-24448</b></dt>
+<dd><p>In this case the new table is created in the named database.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-39822-07822-55219-05739-15484-26699-12744-24448'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-39822-07822-55219-05739-15484-26699-12744-24448'>detail</a>)</i></p></dd>
+
+<dt><b>R-39822-14939-20605-05288-51207-58465-58259-08970</b></dt>
+<dd><p>If the transaction has already been rolled back automatically by the error response, then the ROLLBACK command will fail with an error, but no harm is caused by this.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-39822-14939-20605-05288-51207-58465-58259-08970'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-39822-14939-20605-05288-51207-58465-58259-08970'>detail</a>)</i></p></dd>
+
+<dt><b>R-39849-06566-59022-51394-17295-59441-01164-37583</b></dt>
+<dd><p>This is their schema: CREATE TABLE %_node(nodeno INTEGER PRIMARY KEY, data) CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode) CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno)
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq02.test, matrix: <a href='matrix/rtree.html#R-39849-06566-59022-51394-17295-59441-01164-37583'>context</a>, <a href='matrix/matrix_drtree.html#R-39849-06566-59022-51394-17295-59441-01164-37583'>detail</a>)</i></p></dd>
+
+<dt><b>R-39906-44154-56692-22287-22902-21770-04912-62564</b></dt>
+<dd><p>Constraints such as NOT NULL, UNIQUE, REFERENCES, or CHECK are also ignored.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-39906-44154-56692-22287-22902-21770-04912-62564'>context</a>, <a href='matrix/matrix_drtree.html#R-39906-44154-56692-22287-22902-21770-04912-62564'>detail</a>)</i></p></dd>
+
+<dt><b>R-39910-14723-21123-44064-38823-12161-58690-10248</b></dt>
+<dd><p>A comma (",") is used as the separator if Y is omitted.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-39910-14723-21123-44064-38823-12161-58690-10248'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-39910-14723-21123-44064-38823-12161-58690-10248'>detail</a>)</i></p></dd>
+
+<dt><b>R-39930-13329-18334-04678-35004-32482-06305-13006</b></dt>
+<dd><p>The sqlite3_int64 variable pointed to by the V parameter will be set to the total number of rows examined by all iterations of the X-th loop.
+<i>(source: <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a>, checked-by: th3/cov1/status02.test, matrix: <a href='matrix/c3ref/c_scanstat_est.html#R-39930-13329-18334-04678-35004-32482-06305-13006'>context</a>, <a href='matrix/matrix_dc_scanstat_est.html#R-39930-13329-18334-04678-35004-32482-06305-13006'>detail</a>)</i></p></dd>
+
+<dt><b>R-40010-16873-27185-05661-21009-44505-33861-01436</b></dt>
+<dd><p>Unless the column is an INTEGER PRIMARY KEY or the table is a WITHOUT ROWID table or a STRICT table or the column is declared NOT NULL, SQLite allows NULL values in a PRIMARY KEY column.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-40010-16873-27185-05661-21009-44505-33861-01436'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-40010-16873-27185-05661-21009-44505-33861-01436'>detail</a>)</i></p></dd>
+
+<dt><b>R-40025-59984-53912-08799-37788-65154-58103-39921</b></dt>
+<dd><p>Expressions in an index may only refer to columns in the table that is being indexed.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, matrix: <a href='matrix/lang_createindex.html#R-40025-59984-53912-08799-37788-65154-58103-39921'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-40025-59984-53912-08799-37788-65154-58103-39921'>detail</a>)</i></p></dd>
+
+<dt><b>R-40026-10531-12029-61961-20483-43769-01249-19476</b></dt>
+<dd><p>If SQLite is compiled with the SQLITE_ENABLE_UPDATE_DELETE_LIMIT compile-time option, then the syntax of the DELETE statement is extended by the addition of optional ORDER BY and LIMIT clauses:
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-40026-10531-12029-61961-20483-43769-01249-19476'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-40026-10531-12029-61961-20483-43769-01249-19476'>detail</a>)</i></p></dd>
+
+<dt><b>R-40045-04159-18257-36948-62852-01097-02415-08499</b></dt>
+<dd><p>SQLite ensures that *pzErrMsg is NULL before calling the xEntryPoint().
+<i>(source: <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>, checked-by: th3/req1/autoext01.test, matrix: <a href='matrix/c3ref/auto_extension.html#R-40045-04159-18257-36948-62852-01097-02415-08499'>context</a>, <a href='matrix/matrix_dauto_extension.html#R-40045-04159-18257-36948-62852-01097-02415-08499'>detail</a>)</i></p></dd>
+
+<dt><b>R-40069-12485-64831-34937-24315-11591-54668-02692</b></dt>
+<dd><p>The RETURNING clause does not report any additional database changes caused by foreign key constraints or triggers.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning04.test, matrix: <a href='matrix/lang_returning.html#R-40069-12485-64831-34937-24315-11591-54668-02692'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-40069-12485-64831-34937-24315-11591-54668-02692'>detail</a>)</i></p></dd>
+
+<dt><b>R-40079-54503-52433-22063-65278-03713-13772-01502</b></dt>
+<dd><p>The BETWEEN operator is logically equivalent to a pair of comparisons. "x BETWEEN y AND z" is equivalent to "x>=y AND x<=z" except that with BETWEEN, the x expression is only evaluated once.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, th3/cov1/rowvalue04.test, matrix: <a href='matrix/lang_expr.html#R-40079-54503-52433-22063-65278-03713-13772-01502'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-40079-54503-52433-22063-65278-03713-13772-01502'>detail</a>)</i></p></dd>
+
+<dt><b>R-40086-60101-35729-43768-42445-10732-59805-35730</b></dt>
+<dd><p>If the FORMAT argument is missing or NULL then the result is NULL.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/printf2.test, th3/cov1/printf08.test, matrix: <a href='matrix/lang_corefunc.html#R-40086-60101-35729-43768-42445-10732-59805-35730'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-40086-60101-35729-43768-42445-10732-59805-35730'>detail</a>)</i></p></dd>
+
+<dt><b>R-40094-47392-07559-50532-14131-32118-23991-53984</b></dt>
+<dd><p>sqlite> EXPLAIN QUERY PLAN SELECT (SELECT b FROM t1 WHERE a=0), (SELECT a FROM t1 WHERE b=t2.c) FROM t2; |--SCAN TABLE t2 USING COVERING INDEX i4 |--SCALAR SUBQUERY | `--SEARCH t1 USING COVERING INDEX i2 (a=?) `--CORRELATED SCALAR SUBQUERY `--SEARCH t1 USING INDEX i3 (b=?)
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-40094-47392-07559-50532-14131-32118-23991-53984'>context</a>, <a href='matrix/matrix_deqp.html#R-40094-47392-07559-50532-14131-32118-23991-53984'>detail</a>)</i></p></dd>
+
+<dt><b>R-40134-30296-44811-22193-40834-03348-00642-51152</b></dt>
+<dd><p>Table zTable is a WITHOUT ROWID table
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, tcl/without_rowid5.test, th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_open.html#R-40134-30296-44811-22193-40834-03348-00642-51152'>context</a>, <a href='matrix/matrix_dblob_open.html#R-40134-30296-44811-22193-40834-03348-00642-51152'>detail</a>)</i></p></dd>
+
+<dt><b>R-40137-26050-25715-27051-43009-42599-25608-04347</b></dt>
+<dd><p>If the mode option is set to "rw", then the database is opened for read-write (but not create) access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had been set.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-40137-26050-25715-27051-43009-42599-25608-04347'>context</a>, <a href='matrix/matrix_dopen.html#R-40137-26050-25715-27051-43009-42599-25608-04347'>detail</a>)</i></p></dd>
+
+<dt><b>R-40197-14811-29578-36290-28063-57666-21739-57478</b></dt>
+<dd><p>The dropped table is completely removed from the database schema and the disk file.
+<i>(source: <a href="lang_droptable.html">lang_droptable.html</a>, checked-by: th3/req1/droptable01.test, matrix: <a href='matrix/lang_droptable.html#R-40197-14811-29578-36290-28063-57666-21739-57478'>context</a>, <a href='matrix/matrix_dlang_droptable.html#R-40197-14811-29578-36290-28063-57666-21739-57478'>detail</a>)</i></p></dd>
+
+<dt><b>R-40212-32858-03884-52961-15925-53384-61113-63305</b></dt>
+<dd><p>Therefore, auto-vacuuming must be turned on before any tables are created.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-40212-32858-03884-52961-15925-53384-61113-63305'>context</a>, <a href='matrix/matrix_dpragma.html#R-40212-32858-03884-52961-15925-53384-61113-63305'>detail</a>)</i></p></dd>
+
+<dt><b>R-40219-59128-49321-57557-20784-05955-23042-57460</b></dt>
+<dd><p>The T argument is one of the SQLITE_TRACE constants to indicate why the callback was invoked.
+<i>(source: <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/trace_v2.html#R-40219-59128-49321-57557-20784-05955-23042-57460'>context</a>, <a href='matrix/matrix_dtrace_v2.html#R-40219-59128-49321-57557-20784-05955-23042-57460'>detail</a>)</i></p></dd>
+
+<dt><b>R-40233-33496-43567-58551-03815-59938-27256-59385</b></dt>
+<dd><p>The nolock query parameter is a boolean that disables all calls to the xLock, xUnlock, and xCheckReservedLock methods of the VFS when true.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-40233-33496-43567-58551-03815-59938-27256-59385'>context</a>, <a href='matrix/matrix_duri.html#R-40233-33496-43567-58551-03815-59938-27256-59385'>detail</a>)</i></p></dd>
+
+<dt><b>R-40235-17052-28075-57665-18059-48204-40601-49682</b></dt>
+<dd><p>The update hook is not invoked for rows that are deleted by the REPLACE conflict resolution strategy.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict02.test, matrix: <a href='matrix/lang_conflict.html#R-40235-17052-28075-57665-18059-48204-40601-49682'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-40235-17052-28075-57665-18059-48204-40601-49682'>detail</a>)</i></p></dd>
+
+<dt><b>R-40244-56906-37355-29196-11093-05053-42353-15016</b></dt>
+<dd><p>If the 5th parameter to sqlite3_exec() is not NULL and no errors occur, then sqlite3_exec() sets the pointer in its 5th parameter to NULL before returning.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-40244-56906-37355-29196-11093-05053-42353-15016'>context</a>, <a href='matrix/matrix_dexec.html#R-40244-56906-37355-29196-11093-05053-42353-15016'>detail</a>)</i></p></dd>
+
+<dt><b>R-40248-50202-39876-24554-56269-52121-36535-08663</b></dt>
+<dd><p>The sqlite3_cancel_auto_extension(X) routine returns 1 if initialization routine X was successfully unregistered and it returns 0 if X was not on the list of initialization routines.
+<i>(source: <a href="c3ref/cancel_auto_extension.html">c3ref/cancel_auto_extension.html</a>, matrix: <a href='matrix/c3ref/cancel_auto_extension.html#R-40248-50202-39876-24554-56269-52121-36535-08663'>context</a>, <a href='matrix/matrix_dcancel_auto_extension.html#R-40248-50202-39876-24554-56269-52121-36535-08663'>detail</a>)</i></p></dd>
+
+<dt><b>R-40260-16838-48833-50335-31686-26847-17814-00082</b></dt>
+<dd><p>The number of coordinates is 2 for a 1-dimensional R*Tree, 4 for a 2-dimensional R*Tree, 6 for a 3-dimensional R*Tree, and so forth.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-40260-16838-48833-50335-31686-26847-17814-00082'>context</a>, <a href='matrix/matrix_drtree.html#R-40260-16838-48833-50335-31686-26847-17814-00082'>detail</a>)</i></p></dd>
+
+<dt><b>R-40261-32799-46297-03234-48132-23711-35487-26926</b></dt>
+<dd><p>The problem with this latter query is that it must apply the contained_in() function to all entries in the demo_data table.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-40261-32799-46297-03234-48132-23711-35487-26926'>context</a>, <a href='matrix/matrix_drtree.html#R-40261-32799-46297-03234-48132-23711-35487-26926'>detail</a>)</i></p></dd>
+
+<dt><b>R-40275-54363-02570-13891-25879-32462-51713-20144</b></dt>
+<dd><p>If no COLLATE clause is specified, the default collation sequence is BINARY.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-40275-54363-02570-13891-25879-32462-51713-20144'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-40275-54363-02570-13891-25879-32462-51713-20144'>detail</a>)</i></p></dd>
+
+<dt><b>R-40297-14464-07991-25596-41588-39255-21146-34618</b></dt>
+<dd><p>The INDEXED BY phrase forces the SQLite query planner to use a particular named index on a DELETE, SELECT, or UPDATE statement.
+<i>(source: <a href="lang_indexedby.html">lang_indexedby.html</a>, checked-by: tcl/indexedby.test, matrix: <a href='matrix/lang_indexedby.html#R-40297-14464-07991-25596-41588-39255-21146-34618'>context</a>, <a href='matrix/matrix_dlang_indexedby.html#R-40297-14464-07991-25596-41588-39255-21146-34618'>detail</a>)</i></p></dd>
+
+<dt><b>R-40298-31327-08313-07924-25737-24102-08430-39905</b></dt>
+<dd><p>The LIKE optimization might occur if the column named on the left of the operator is indexed using the built-in BINARY collating sequence and case_sensitive_like is turned on. Or the optimization might occur if the column is indexed using the built-in NOCASE collating sequence and the case_sensitive_like mode is off. These are the only two combinations under which LIKE operators will be optimized.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, checked-by: th3/cov1/where03.test, th3/cov1/where03b.test, matrix: <a href='matrix/optoverview.html#R-40298-31327-08313-07924-25737-24102-08430-39905'>context</a>, <a href='matrix/matrix_doptoverview.html#R-40298-31327-08313-07924-25737-24102-08430-39905'>detail</a>)</i></p></dd>
+
+<dt><b>R-40317-56781-64457-03743-19969-30394-04244-36420</b></dt>
+<dd><p>If the value returned is greater than or equal to the number of free pages, then a complete autovacuum happens.
+<i>(source: <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a>, checked-by: th3/cov1/autovac01.test, matrix: <a href='matrix/c3ref/autovacuum_pages.html#R-40317-56781-64457-03743-19969-30394-04244-36420'>context</a>, <a href='matrix/matrix_dautovacuum_pages.html#R-40317-56781-64457-03743-19969-30394-04244-36420'>detail</a>)</i></p></dd>
+
+<dt><b>R-40318-26723-38949-62709-27455-61275-20452-62962</b></dt>
+<dd><p>BLOB values (even serial types 12 and larger) sort last and in the order determined by memcmp().
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat05.test, matrix: <a href='matrix/fileformat2.html#R-40318-26723-38949-62709-27455-61275-20452-62962'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-40318-26723-38949-62709-27455-61275-20452-62962'>detail</a>)</i></p></dd>
+
+<dt><b>R-40347-36128-09894-54444-62089-62339-21392-16913</b></dt>
+<dd><p>By default, VACUUM operates on the main database.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-40347-36128-09894-54444-62089-62339-21392-16913'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-40347-36128-09894-54444-62089-62339-21392-16913'>detail</a>)</i></p></dd>
+
+<dt><b>R-40355-56314-02785-21892-27630-10277-00128-03405</b></dt>
+<dd><p>When the callback is invoked, the first argument passed is a copy of the second argument to sqlite3_collation_needed() or sqlite3_collation_needed16(). The second argument is the database connection. The third argument is one of SQLITE_UTF8, SQLITE_UTF16BE, or SQLITE_UTF16LE, indicating the most desirable form of the collation sequence function required. The fourth parameter is the name of the required collation sequence.
+<i>(source: <a href="c3ref/collation_needed.html">c3ref/collation_needed.html</a>, matrix: <a href='matrix/c3ref/collation_needed.html#R-40355-56314-02785-21892-27630-10277-00128-03405'>context</a>, <a href='matrix/matrix_dcollation_needed.html#R-40355-56314-02785-21892-27630-10277-00128-03405'>detail</a>)</i></p></dd>
+
+<dt><b>R-40361-64162-53893-43519-22401-31532-23705-29102</b></dt>
+<dd><p>Autocommit mode is on by default.
+<i>(source: <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>, matrix: <a href='matrix/c3ref/get_autocommit.html#R-40361-64162-53893-43519-22401-31532-23705-29102'>context</a>, <a href='matrix/matrix_dget_autocommit.html#R-40361-64162-53893-43519-22401-31532-23705-29102'>detail</a>)</i></p></dd>
+
+<dt><b>R-40373-33294-50231-39382-53294-24447-44855-24711</b></dt>
+<dd><p>SQLite makes a copy of the sqlite3_pcache_methods2 object.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/th3pcache.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-40373-33294-50231-39382-53294-24447-44855-24711'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-40373-33294-50231-39382-53294-24447-44855-24711'>detail</a>)</i></p></dd>
+
+<dt><b>R-40383-06816-10485-50532-53566-05766-27128-48276</b></dt>
+<dd><p>The sqlite3_compileoption_used() function returns 0 or 1 indicating whether the specified option was defined at compile time.
+<i>(source: <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a>, checked-by: th3/cov1/ctime01.test, matrix: <a href='matrix/c3ref/compileoption_get.html#R-40383-06816-10485-50532-53566-05766-27128-48276'>context</a>, <a href='matrix/matrix_dcompileoption_get.html#R-40383-06816-10485-50532-53566-05766-27128-48276'>detail</a>)</i></p></dd>
+
+<dt><b>R-40390-09039-54106-21086-56168-24022-18205-41129</b></dt>
+<dd><p>These functions add, remove, or modify a collation associated with the database connection specified as the first argument.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-40390-09039-54106-21086-56168-24022-18205-41129'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-40390-09039-54106-21086-56168-24022-18205-41129'>detail</a>)</i></p></dd>
+
+<dt><b>R-40460-39888-52540-38305-24333-10191-58577-29064</b></dt>
+<dd><p>A call to sqlite3_snapshot_open(D,S,P) will fail if the database connection D does not know that the database file for schema S is in WAL mode. A database connection might not know that the database file is in WAL mode if there has been no prior I/O on that database connection, or if the database entered WAL mode after the most recent I/O on the database connection.
+<i>(source: <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>, matrix: <a href='matrix/c3ref/snapshot_open.html#R-40460-39888-52540-38305-24333-10191-58577-29064'>context</a>, <a href='matrix/matrix_dsnapshot_open.html#R-40460-39888-52540-38305-24333-10191-58577-29064'>detail</a>)</i></p></dd>
+
+<dt><b>R-40463-24712-34752-07038-54630-26227-29776-31431</b></dt>
+<dd><p>SQLITE_DBSTATUS_CACHE_MISS This parameter returns the number of pager cache misses that have occurred.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-40463-24712-34752-07038-54630-26227-29776-31431'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-40463-24712-34752-07038-54630-26227-29776-31431'>detail</a>)</i></p></dd>
+
+<dt><b>R-40472-60438-03331-36186-60982-36973-59940-12981</b></dt>
+<dd><p>Columns that do not appear in the list of assignments are left unmodified.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-40472-60438-03331-36186-60982-36973-59940-12981'>context</a>, <a href='matrix/matrix_dlang_update.html#R-40472-60438-03331-36186-60982-36973-59940-12981'>detail</a>)</i></p></dd>
+
+<dt><b>R-40482-20265-47732-31040-18704-35090-36000-12311</b></dt>
+<dd><p>The third column is the name of the table that is referred to.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/fkey5.test, th3/cov1/fkey23.test, matrix: <a href='matrix/pragma.html#R-40482-20265-47732-31040-18704-35090-36000-12311'>context</a>, <a href='matrix/matrix_dpragma.html#R-40482-20265-47732-31040-18704-35090-36000-12311'>detail</a>)</i></p></dd>
+
+<dt><b>R-40490-08523-63255-17373-12821-43863-07916-14588</b></dt>
+<dd><p>The sqlite3_str_length(X) method returns the current length, in bytes, of the dynamic string under construction in sqlite3_str object X.
+<i>(source: <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>, matrix: <a href='matrix/c3ref/str_errcode.html#R-40490-08523-63255-17373-12821-43863-07916-14588'>context</a>, <a href='matrix/matrix_dstr_errcode.html#R-40490-08523-63255-17373-12821-43863-07916-14588'>detail</a>)</i></p></dd>
+
+<dt><b>R-40502-12262-42819-60807-51435-51687-55446-47633</b></dt>
+<dd><p>If SQLITE_IOERR_XXX, SQLITE_NOMEM, or SQLITE_READONLY is returned, then there is no point in retrying the call to sqlite3_backup_step(). These errors are considered fatal.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-40502-12262-42819-60807-51435-51687-55446-47633'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-40502-12262-42819-60807-51435-51687-55446-47633'>detail</a>)</i></p></dd>
+
+<dt><b>R-40514-61038-17125-46300-24819-55114-07241-40466</b></dt>
+<dd><p>The IS NOT DISTINCT FROM operator is an alternative spelling for the IS operator.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-40514-61038-17125-46300-24819-55114-07241-40466'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-40514-61038-17125-46300-24819-55114-07241-40466'>detail</a>)</i></p></dd>
+
+<dt><b>R-40541-16535-13486-20808-32771-40014-56894-53399</b></dt>
+<dd><p>This pragma returns the names of compile-time options used when building SQLite, one option per row.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma13.test, matrix: <a href='matrix/pragma.html#R-40541-16535-13486-20808-32771-40014-56894-53399'>context</a>, <a href='matrix/matrix_dpragma.html#R-40541-16535-13486-20808-32771-40014-56894-53399'>detail</a>)</i></p></dd>
+
+<dt><b>R-40541-54897-33607-37262-17474-57290-09312-25628</b></dt>
+<dd><p>For the purposes of this API, a transaction is said to have been rolled back if an explicit "ROLLBACK" statement is executed, or an error or constraint causes an implicit rollback to occur.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-40541-54897-33607-37262-17474-57290-09312-25628'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-40541-54897-33607-37262-17474-57290-09312-25628'>detail</a>)</i></p></dd>
+
+<dt><b>R-40564-64233-62609-55740-51668-02472-22352-36166</b></dt>
+<dd><p>No affinities are applied to any values as the result of a GROUP by clause.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_07.test, matrix: <a href='matrix/datatype3.html#R-40564-64233-62609-55740-51668-02472-22352-36166'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-40564-64233-62609-55740-51668-02472-22352-36166'>detail</a>)</i></p></dd>
+
+<dt><b>R-40597-22164-08785-17254-28069-60974-16591-44156</b></dt>
+<dd><p>The result of avg() is NULL if and only if there are no non-NULL inputs.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-40597-22164-08785-17254-28069-60974-16591-44156'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-40597-22164-08785-17254-28069-60974-16591-44156'>detail</a>)</i></p></dd>
+
+<dt><b>R-40598-36595-56877-54174-64761-50948-11892-46483</b></dt>
+<dd><p>For each affected row, the named columns are set to the values found by evaluating the corresponding scalar expressions.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-40598-36595-56877-54174-64761-50948-11892-46483'>context</a>, <a href='matrix/matrix_dlang_update.html#R-40598-36595-56877-54174-64761-50948-11892-46483'>detail</a>)</i></p></dd>
+
+<dt><b>R-40602-24566-60725-06279-09295-25327-26293-64572</b></dt>
+<dd><p>The schema-names 'main' and 'temp' refer to the main database and the database used for temporary tables.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach01.test, matrix: <a href='matrix/lang_attach.html#R-40602-24566-60725-06279-09295-25327-26293-64572'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-40602-24566-60725-06279-09295-25327-26293-64572'>detail</a>)</i></p></dd>
+
+<dt><b>R-40630-02268-40288-03121-46855-38283-56768-00095</b></dt>
+<dd><p>If used within a SELECT that uses the "query by rowid" or "linear scan" strategies, then the snippet and offsets both return an empty string, and the matchinfo function returns a blob value zero bytes in size.
+<i>(source: <a href="fts3.html">fts3.html</a>, checked-by: tcl/fts3snippet.test, matrix: <a href='matrix/fts3.html#R-40630-02268-40288-03121-46855-38283-56768-00095'>context</a>, <a href='matrix/matrix_dfts3.html#R-40630-02268-40288-03121-46855-38283-56768-00095'>detail</a>)</i></p></dd>
+
+<dt><b>R-40641-22898-05833-02924-09975-01966-21919-53888</b></dt>
+<dd><p>The name of the column being indexed, or NULL if the index-column is the rowid of the table being indexed or an expression.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15x.test, matrix: <a href='matrix/pragma.html#R-40641-22898-05833-02924-09975-01966-21919-53888'>context</a>, <a href='matrix/matrix_dpragma.html#R-40641-22898-05833-02924-09975-01966-21919-53888'>detail</a>)</i></p></dd>
+
+<dt><b>R-40676-08516-16968-48123-39083-47673-52246-45004</b></dt>
+<dd><p>Inserts into WITHOUT ROWID tables are not recorded.
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, checked-by: th3/cov1/withoutrowid01.test, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-40676-08516-16968-48123-39083-47673-52246-45004'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-40676-08516-16968-48123-39083-47673-52246-45004'>detail</a>)</i></p></dd>
+
+<dt><b>R-40682-45237-21409-00125-10329-07254-01818-58163</b></dt>
+<dd><p>As with the LIKE operator, the sqlite3_strlike(P,X,E) function is case insensitive - equivalent upper and lower case ASCII characters match one another.
+<i>(source: <a href="c3ref/strlike.html">c3ref/strlike.html</a>, matrix: <a href='matrix/c3ref/strlike.html#R-40682-45237-21409-00125-10329-07254-01818-58163'>context</a>, <a href='matrix/matrix_dstrlike.html#R-40682-45237-21409-00125-10329-07254-01818-58163'>detail</a>)</i></p></dd>
+
+<dt><b>R-40729-56447-32753-40044-54162-25797-56212-55799</b></dt>
+<dd><p>Duplicate rows are removed from the results of INTERSECT and EXCEPT operators before the result set is returned.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-40729-56447-32753-40044-54162-25797-56212-55799'>context</a>, <a href='matrix/matrix_dlang_select.html#R-40729-56447-32753-40044-54162-25797-56212-55799'>detail</a>)</i></p></dd>
+
+<dt><b>R-40745-32628-44360-54833-19873-28133-21062-02308</b></dt>
+<dd><p>However xMutexAlloc() may use SQLite memory allocation for a fast or recursive mutex.
+<i>(source: <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>, matrix: <a href='matrix/c3ref/mutex_methods.html#R-40745-32628-44360-54833-19873-28133-21062-02308'>context</a>, <a href='matrix/matrix_dmutex_methods.html#R-40745-32628-44360-54833-19873-28133-21062-02308'>detail</a>)</i></p></dd>
+
+<dt><b>R-40779-12285-51949-10144-43789-15381-05710-53892</b></dt>
+<dd><p>The first column is usually 0 but will be 1 if a RESTART or FULL or TRUNCATE checkpoint was blocked from completing, for example because another thread or process was actively using the database.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma29.test, matrix: <a href='matrix/pragma.html#R-40779-12285-51949-10144-43789-15381-05710-53892'>context</a>, <a href='matrix/matrix_dpragma.html#R-40779-12285-51949-10144-43789-15381-05710-53892'>detail</a>)</i></p></dd>
+
+<dt><b>R-40798-35269-51954-12592-52405-01125-52034-02657</b></dt>
+<dd><p>Warning: misuse of this pragma can easily result in a corrupt database file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma30.test, matrix: <a href='matrix/pragma.html#R-40798-35269-51954-12592-52405-01125-52034-02657'>context</a>, <a href='matrix/matrix_dpragma.html#R-40798-35269-51954-12592-52405-01125-52034-02657'>detail</a>)</i></p></dd>
+
+<dt><b>R-40812-03570-58737-26450-04451-50021-12578-43661</b></dt>
+<dd><p>If no negative ROWID values are inserted explicitly, then automatically generated ROWID values will always be greater than zero.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: src/vdbe.c, th3/cov1/vdbe23.test, matrix: <a href='matrix/autoinc.html#R-40812-03570-58737-26450-04451-50021-12578-43661'>context</a>, <a href='matrix/matrix_dautoinc.html#R-40812-03570-58737-26450-04451-50021-12578-43661'>detail</a>)</i></p></dd>
+
+<dt><b>R-40842-63945-47552-49146-54322-06556-53449-29032</b></dt>
+<dd><p>A constraint on a virtual table of the form "column IN (...)" is communicated to the xBestIndex method as a SQLITE_INDEX_CONSTRAINT_EQ constraint.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-40842-63945-47552-49146-54322-06556-53449-29032'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-40842-63945-47552-49146-54322-06556-53449-29032'>detail</a>)</i></p></dd>
+
+<dt><b>R-40855-36147-31785-54623-27721-28379-48170-05800</b></dt>
+<dd><p>If the SELECT statement is an aggregate query with a GROUP BY clause, then each of the expressions specified as part of the GROUP BY clause is evaluated for each row of the dataset according to the processing rules stated below for ORDER BY expressions. Each row is then assigned to a "group" based on the results; rows for which the results of evaluating the GROUP BY expressions are the same get assigned to the same group.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-40855-36147-31785-54623-27721-28379-48170-05800'>context</a>, <a href='matrix/matrix_dlang_select.html#R-40855-36147-31785-54623-27721-28379-48170-05800'>detail</a>)</i></p></dd>
+
+<dt><b>R-40858-03003-08666-12472-31051-52566-61637-28947</b></dt>
+<dd><p>The fourth parameter to sqlite3_open_v2() is the name of the sqlite3_vfs object that defines the operating system interface that the new database connection should use.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-40858-03003-08666-12472-31051-52566-61637-28947'>context</a>, <a href='matrix/matrix_dopen.html#R-40858-03003-08666-12472-31051-52566-61637-28947'>detail</a>)</i></p></dd>
+
+<dt><b>R-40874-07817-64808-61349-14164-22324-19538-25900</b></dt>
+<dd><p>In those routines that have a fourth argument, its value is the number of bytes in the parameter. To be clear: the value is the number of bytes in the value, not the number of characters.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-40874-07817-64808-61349-14164-22324-19538-25900'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-40874-07817-64808-61349-14164-22324-19538-25900'>detail</a>)</i></p></dd>
+
+<dt><b>R-40892-13487-22632-16999-05016-52970-57179-01588</b></dt>
+<dd><p>An attempt to execute COMMIT might also result in an SQLITE_BUSY return code if an another thread or process has an open read connection.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-40892-13487-22632-16999-05016-52970-57179-01588'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-40892-13487-22632-16999-05016-52970-57179-01588'>detail</a>)</i></p></dd>
+
+<dt><b>R-40912-17796-52858-33167-65116-31464-10604-52940</b></dt>
+<dd><p>Only an effective call of sqlite3_initialize() does any initialization. All other calls are harmless no-ops.
+<i>(source: <a href="c3ref/initialize.html">c3ref/initialize.html</a>, matrix: <a href='matrix/c3ref/initialize.html#R-40912-17796-52858-33167-65116-31464-10604-52940'>context</a>, <a href='matrix/matrix_dinitialize.html#R-40912-17796-52858-33167-65116-31464-10604-52940'>detail</a>)</i></p></dd>
+
+<dt><b>R-40921-47946-20610-64910-18137-09746-01061-06361</b></dt>
+<dd><p>Another limitation of the histogram data is that it only applies to the left-most column on an index.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-40921-47946-20610-64910-18137-09746-01061-06361'>context</a>, <a href='matrix/matrix_doptoverview.html#R-40921-47946-20610-64910-18137-09746-01061-06361'>detail</a>)</i></p></dd>
+
+<dt><b>R-40935-37384-47520-54323-57387-46753-55838-11679</b></dt>
+<dd><p>In the following logically equivalent formulation of the same query, the substitution of "CROSS JOIN" for the "," means that the order of tables must be N1, E, N2. SELECT * FROM node AS n1 CROSS JOIN edge AS e CROSS JOIN node AS n2 WHERE n1.name = 'alice' AND n2.name = 'bob' AND e.orig = n1.id AND e.dest = n2.id;
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-40935-37384-47520-54323-57387-46753-55838-11679'>context</a>, <a href='matrix/matrix_doptoverview.html#R-40935-37384-47520-54323-57387-46753-55838-11679'>detail</a>)</i></p></dd>
+
+<dt><b>R-40949-19585-05483-44375-20599-28045-28956-60873</b></dt>
+<dd><p>The fifth byte through the last usable byte are used to hold overflow content.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-40949-19585-05483-44375-20599-28045-28956-60873'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-40949-19585-05483-44375-20599-28045-28956-60873'>detail</a>)</i></p></dd>
+
+<dt><b>R-40969-30202-57015-62747-35327-16253-50512-36730</b></dt>
+<dd><p>Unless the flattening optimization is applied, if a subquery appears in the FROM clause of a SELECT statement, SQLite can either run the subquery and stores the results in a temporary table, or it can run the subquery as a co-routine. The following query is an example of the latter. The subquery is run by a co-routine. The outer query blocks whenever it needs another row of input from the subquery. Control switches to the co-routine which produces the desired output row, then control switches back to the main routine which continues processing. sqlite> EXPLAIN QUERY PLAN SELECT count(*) > FROM (SELECT max(b) AS x FROM t1 GROUP BY a) AS qqq > GROUP BY x; QUERY PLAN |--CO-ROUTINE qqq | `--SCAN t1 USING COVERING INDEX i2 |--SCAN qqqq `--USE TEMP B-TREE FOR GROUP BY
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-40969-30202-57015-62747-35327-16253-50512-36730'>context</a>, <a href='matrix/matrix_deqp.html#R-40969-30202-57015-62747-35327-16253-50512-36730'>detail</a>)</i></p></dd>
+
+<dt><b>R-40975-20399-26495-18141-01831-14670-61544-00270</b></dt>
+<dd><p>If N is a negative number or something other than an integer value, then the pragma behaves as if the N argument was omitted.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/pragma.c, th3/cov1/analyze18.test, matrix: <a href='matrix/pragma.html#R-40975-20399-26495-18141-01831-14670-61544-00270'>context</a>, <a href='matrix/matrix_dpragma.html#R-40975-20399-26495-18141-01831-14670-61544-00270'>detail</a>)</i></p></dd>
+
+<dt><b>R-40979-20331-65132-35120-47137-32709-07069-35596</b></dt>
+<dd><p>The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates the query planner stability guarantee (QPSG). When the QPSG is active, a single SQL query statement will always use the same algorithm regardless of values of bound parameters.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: th3/cov1/qpsg01.test, th3/cov1/qpsg02.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-40979-20331-65132-35120-47137-32709-07069-35596'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-40979-20331-65132-35120-47137-32709-07069-35596'>detail</a>)</i></p></dd>
+
+<dt><b>R-41004-58299-09133-05321-11963-32065-55865-10893</b></dt>
+<dd><p>The parameter P is passed through as the only parameter to the callback function X.
+<i>(source: <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>, checked-by: th3/req1/progress01.test, matrix: <a href='matrix/c3ref/progress_handler.html#R-41004-58299-09133-05321-11963-32065-55865-10893'>context</a>, <a href='matrix/matrix_dprogress_handler.html#R-41004-58299-09133-05321-11963-32065-55865-10893'>detail</a>)</i></p></dd>
+
+<dt><b>R-41025-56247-28274-26451-36451-44569-58431-11817</b></dt>
+<dd><p>Otherwise, the affinity is NUMERIC.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-41025-56247-28274-26451-36451-44569-58431-11817'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-41025-56247-28274-26451-36451-44569-58431-11817'>detail</a>)</i></p></dd>
+
+<dt><b>R-41040-47502-07753-07518-58818-60449-29305-32446</b></dt>
+<dd><p>Autocheckpointing is enabled by default with an interval of 1000 or SQLITE_DEFAULT_WAL_AUTOCHECKPOINT.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-41040-47502-07753-07518-58818-60449-29305-32446'>context</a>, <a href='matrix/matrix_dpragma.html#R-41040-47502-07753-07518-58818-60449-29305-32446'>detail</a>)</i></p></dd>
+
+<dt><b>R-41050-23052-29095-23436-46083-00331-23025-31647</b></dt>
+<dd><p>The first (query) form will return the synchronous setting as an integer.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-41050-23052-29095-23436-46083-00331-23025-31647'>context</a>, <a href='matrix/matrix_dpragma.html#R-41050-23052-29095-23436-46083-00331-23025-31647'>detail</a>)</i></p></dd>
+
+<dt><b>R-41051-26626-32657-27004-34667-60114-13297-41837</b></dt>
+<dd><p>In more recent versions of SQLite, the ROLLBACK will proceed and pending statements will often be aborted, causing them to return an SQLITE_ABORT or SQLITE_ABORT_ROLLBACK error.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-41051-26626-32657-27004-34667-60114-13297-41837'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-41051-26626-32657-27004-34667-60114-13297-41837'>detail</a>)</i></p></dd>
+
+<dt><b>R-41062-34431-24503-40012-23472-27163-07838-01416</b></dt>
+<dd><p>Parent and child keys must have the same cardinality.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys11.test, matrix: <a href='matrix/foreignkeys.html#R-41062-34431-24503-40012-23472-27163-07838-01416'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-41062-34431-24503-40012-23472-27163-07838-01416'>detail</a>)</i></p></dd>
+
+<dt><b>R-41079-08948-19463-36063-08985-63659-05958-53275</b></dt>
+<dd><p>Compute the current unix timestamp. SELECT unixepoch(); SELECT strftime('%s');
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-41079-08948-19463-36063-08985-63659-05958-53275'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-41079-08948-19463-36063-08985-63659-05958-53275'>detail</a>)</i></p></dd>
+
+<dt><b>R-41103-34171-63381-59793-03319-04831-02307-39561</b></dt>
+<dd><p>If an error occurs while evaluating the SQL statements passed into sqlite3_exec(), then execution of the current statement stops and subsequent statements are skipped.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-41103-34171-63381-59793-03319-04831-02307-39561'>context</a>, <a href='matrix/matrix_dexec.html#R-41103-34171-63381-59793-03319-04831-02307-39561'>detail</a>)</i></p></dd>
+
+<dt><b>R-41129-04825-55392-49717-44063-44499-04205-01374</b></dt>
+<dd><p>PRAGMA schema.secure_delete; PRAGMA schema.secure_delete = boolean|FAST Query or change the secure-delete setting.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma20.test, th3/cov1/pragma21.test, matrix: <a href='matrix/pragma.html#R-41129-04825-55392-49717-44063-44499-04205-01374'>context</a>, <a href='matrix/matrix_dpragma.html#R-41129-04825-55392-49717-44063-44499-04205-01374'>detail</a>)</i></p></dd>
+
+<dt><b>R-41132-04368-54784-12197-53730-05205-63815-61247</b></dt>
+<dd><p>Comments do not nest.
+<i>(source: <a href="lang_comment.html">lang_comment.html</a>, checked-by: th3/req1/comment01.test, matrix: <a href='matrix/lang_comment.html#R-41132-04368-54784-12197-53730-05205-63815-61247'>context</a>, <a href='matrix/matrix_dlang_comment.html#R-41132-04368-54784-12197-53730-05205-63815-61247'>detail</a>)</i></p></dd>
+
+<dt><b>R-41134-27890-19387-23998-27179-40954-57167-14106</b></dt>
+<dd><p>When you change the cache size using the cache_size pragma, the change only endures for the current session.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma09.test, matrix: <a href='matrix/pragma.html#R-41134-27890-19387-23998-27179-40954-57167-14106'>context</a>, <a href='matrix/matrix_dpragma.html#R-41134-27890-19387-23998-27179-40954-57167-14106'>detail</a>)</i></p></dd>
+
+<dt><b>R-41140-09385-47977-21306-28436-51291-32459-07253</b></dt>
+<dd><p>If the most recent error does not reference a specific token in the input SQL, then the sqlite3_error_offset() function returns -1.
+<i>(source: <a href="c3ref/errcode.html">c3ref/errcode.html</a>, matrix: <a href='matrix/c3ref/errcode.html#R-41140-09385-47977-21306-28436-51291-32459-07253'>context</a>, <a href='matrix/matrix_derrcode.html#R-41140-09385-47977-21306-28436-51291-32459-07253'>detail</a>)</i></p></dd>
+
+<dt><b>R-41146-12423-20310-63569-37846-41405-23151-59633</b></dt>
+<dd><p>SQLite attempts to transform the result of the generating expression into that datatype using the same affinity rules as for ordinary columns.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-41146-12423-20310-63569-37846-41405-23151-59633'>context</a>, <a href='matrix/matrix_dgencol.html#R-41146-12423-20310-63569-37846-41405-23151-59633'>detail</a>)</i></p></dd>
+
+<dt><b>R-41161-50390-16822-36301-43678-58977-40657-30512</b></dt>
+<dd><p>If this parameter is -1, then the SQL function or aggregate may take any number of arguments between 0 and the limit set by sqlite3_limit(SQLITE_LIMIT_FUNCTION_ARG).
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc02.test, matrix: <a href='matrix/c3ref/create_function.html#R-41161-50390-16822-36301-43678-58977-40657-30512'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-41161-50390-16822-36301-43678-58977-40657-30512'>detail</a>)</i></p></dd>
+
+<dt><b>R-41183-50724-01751-26515-20432-60241-55721-62765</b></dt>
+<dd><p>The returned string is valid until the prepared statement is destroyed using sqlite3_finalize() or until the statement is automatically reprepared by the first call to sqlite3_step() for a particular run or until the same information is requested again in a different encoding.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-41183-50724-01751-26515-20432-60241-55721-62765'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-41183-50724-01751-26515-20432-60241-55721-62765'>detail</a>)</i></p></dd>
+
+<dt><b>R-41220-51800-40113-04594-39111-44246-00162-60024</b></dt>
+<dd><p>This option sets the threading mode to Serialized.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-41220-51800-40113-04594-39111-44246-00162-60024'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-41220-51800-40113-04594-39111-44246-00162-60024'>detail</a>)</i></p></dd>
+
+<dt><b>R-41246-06467-15697-52258-02048-61500-49466-56999</b></dt>
+<dd><p>The multi-argument max() function searches its arguments from left to right for an argument that defines a collating function and uses that collating function for all string comparisons.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-41246-06467-15697-52258-02048-61500-49466-56999'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-41246-06467-15697-52258-02048-61500-49466-56999'>detail</a>)</i></p></dd>
+
+<dt><b>R-41287-48160-23788-20080-08902-48898-03032-27224</b></dt>
+<dd><p>Auxiliary columns are marked with a "+" symbol before the column name.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-41287-48160-23788-20080-08902-48898-03032-27224'>context</a>, <a href='matrix/matrix_drtree.html#R-41287-48160-23788-20080-08902-48898-03032-27224'>detail</a>)</i></p></dd>
+
+<dt><b>R-41299-52117-33031-60403-48286-21515-32111-27387</b></dt>
+<dd><p>If no error (SQLITE_BUSY or otherwise) is encountered while processing the attached databases, SQLITE_OK is returned.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-41299-52117-33031-60403-48286-21515-32111-27387'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-41299-52117-33031-60403-48286-21515-32111-27387'>detail</a>)</i></p></dd>
+
+<dt><b>R-41321-43211-53918-03188-33264-03683-46680-13592</b></dt>
+<dd><p>In the following query, the optimizer is free to reorder the tables of FROM clause any way it sees fit: SELECT * FROM node AS n1, edge AS e, node AS n2 WHERE n1.name = 'alice' AND n2.name = 'bob' AND e.orig = n1.id AND e.dest = n2.id;
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-41321-43211-53918-03188-33264-03683-46680-13592'>context</a>, <a href='matrix/matrix_doptoverview.html#R-41321-43211-53918-03188-33264-03683-46680-13592'>detail</a>)</i></p></dd>
+
+<dt><b>R-41332-12947-25232-24036-57064-07925-19702-44154</b></dt>
+<dd><p>Page 1 of a database file is the root page of a table b-tree that holds a special table named "sqlite_schema".
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-41332-12947-25232-24036-57064-07925-19702-44154'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-41332-12947-25232-24036-57064-07925-19702-44154'>detail</a>)</i></p></dd>
+
+<dt><b>R-41357-61664-43525-02491-20290-06673-35745-04652</b></dt>
+<dd><p>The RETURNING clause is followed by a comma-separated list of expressions.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-41357-61664-43525-02491-20290-06673-35745-04652'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-41357-61664-43525-02491-20290-06673-35745-04652'>detail</a>)</i></p></dd>
+
+<dt><b>R-41381-35999-48332-52888-17487-39096-22671-62741</b></dt>
+<dd><p>If the third parameter to sqlite3_result_error() or sqlite3_result_error16() is non-negative then SQLite takes that many bytes (not characters) from the 2nd parameter as the error message.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-41381-35999-48332-52888-17487-39096-22671-62741'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-41381-35999-48332-52888-17487-39096-22671-62741'>detail</a>)</i></p></dd>
+
+<dt><b>R-41411-18837-33884-40601-61407-45364-54319-00196</b></dt>
+<dd><p>If the keywords PRIMARY KEY are added to a column definition, then the primary key for the table consists of that single column.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-41411-18837-33884-40601-61407-45364-54319-00196'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-41411-18837-33884-40601-61407-45364-54319-00196'>detail</a>)</i></p></dd>
+
+<dt><b>R-41417-64456-42642-02544-40631-11378-24048-47614</b></dt>
+<dd><p>The WAL journaling mode uses a write-ahead log instead of a rollback journal to implement transactions.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma24.test, matrix: <a href='matrix/pragma.html#R-41417-64456-42642-02544-40631-11378-24048-47614'>context</a>, <a href='matrix/matrix_dpragma.html#R-41417-64456-42642-02544-40631-11378-24048-47614'>detail</a>)</i></p></dd>
+
+<dt><b>R-41435-15049-20553-57196-01541-07225-45251-60631</b></dt>
+<dd><p>When temp_store is DEFAULT (0), the compile-time C preprocessor macro SQLITE_TEMP_STORE is used to determine where temporary tables and indices are stored.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-41435-15049-20553-57196-01541-07225-45251-60631'>context</a>, <a href='matrix/matrix_dpragma.html#R-41435-15049-20553-57196-01541-07225-45251-60631'>detail</a>)</i></p></dd>
+
+<dt><b>R-41438-32603-17646-55492-38195-10504-33475-54382</b></dt>
+<dd><p>This columns is NULL if the column is the rowid or an expression.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-41438-32603-17646-55492-38195-10504-33475-54382'>context</a>, <a href='matrix/matrix_dpragma.html#R-41438-32603-17646-55492-38195-10504-33475-54382'>detail</a>)</i></p></dd>
+
+<dt><b>R-41444-49665-13532-29136-56203-03908-49213-31629</b></dt>
+<dd><p>Other integer type names like "INT" or "BIGINT" or "SHORT INTEGER" or "UNSIGNED INTEGER" causes the primary key column to behave as an ordinary table column with integer affinity and a unique index, not as an alias for the rowid.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-41444-49665-13532-29136-56203-03908-49213-31629'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-41444-49665-13532-29136-56203-03908-49213-31629'>detail</a>)</i></p></dd>
+
+<dt><b>R-41470-32236-05158-07794-46704-63040-13347-49238</b></dt>
+<dd><p>The aConstraint[] array only reports WHERE clause terms that are relevant to the particular virtual table being queried.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-41470-32236-05158-07794-46704-63040-13347-49238'>context</a>, <a href='matrix/matrix_dindex_info.html#R-41470-32236-05158-07794-46704-63040-13347-49238'>detail</a>)</i></p></dd>
+
+<dt><b>R-41499-47058-04189-19670-59283-14956-02456-13763</b></dt>
+<dd><p>The leftmost column is number 0.
+<i>(source: <a href="c3ref/column_name.html">c3ref/column_name.html</a>, matrix: <a href='matrix/c3ref/column_name.html#R-41499-47058-04189-19670-59283-14956-02456-13763'>context</a>, <a href='matrix/matrix_dcolumn_name.html#R-41499-47058-04189-19670-59283-14956-02456-13763'>detail</a>)</i></p></dd>
+
+<dt><b>R-41519-43313-49943-13325-32316-49786-47625-55988</b></dt>
+<dd><p>If N is out of range, sqlite3_compileoption_get() returns a NULL pointer.
+<i>(source: <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a>, checked-by: th3/cov1/ctime01.test, matrix: <a href='matrix/c3ref/compileoption_get.html#R-41519-43313-49943-13325-32316-49786-47625-55988'>context</a>, <a href='matrix/matrix_dcompileoption_get.html#R-41519-43313-49943-13325-32316-49786-47625-55988'>detail</a>)</i></p></dd>
+
+<dt><b>R-41531-51083-45051-37425-19674-01432-09098-10672</b></dt>
+<dd><p>Every new database connection defaults to having the auto-checkpoint enabled with a threshold of 1000 or SQLITE_DEFAULT_WAL_AUTOCHECKPOINT pages.
+<i>(source: <a href="c3ref/wal_autocheckpoint.html">c3ref/wal_autocheckpoint.html</a>, checked-by: tcl/e_walauto.test, matrix: <a href='matrix/c3ref/wal_autocheckpoint.html#R-41531-51083-45051-37425-19674-01432-09098-10672'>context</a>, <a href='matrix/matrix_dwal_autocheckpoint.html#R-41531-51083-45051-37425-19674-01432-09098-10672'>detail</a>)</i></p></dd>
+
+<dt><b>R-41548-42669-47727-24774-07572-16450-39601-00236</b></dt>
+<dd><p>However, using auto_vacuum can lead to extra database file fragmentation.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, matrix: <a href='matrix/lang_vacuum.html#R-41548-42669-47727-24774-07572-16450-39601-00236'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-41548-42669-47727-24774-07572-16450-39601-00236'>detail</a>)</i></p></dd>
+
+<dt><b>R-41613-20553-43985-38699-33284-42636-36954-15318</b></dt>
+<dd><p>The sqlite3_wal_checkpoint(D,X) is equivalent to sqlite3_wal_checkpoint_v2(D,X,SQLITE_CHECKPOINT_PASSIVE,0,0).
+<i>(source: <a href="c3ref/wal_checkpoint.html">c3ref/wal_checkpoint.html</a>, checked-by: src/main.c, tcl/e_walckpt.test, th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/wal_checkpoint.html#R-41613-20553-43985-38699-33284-42636-36954-15318'>context</a>, <a href='matrix/matrix_dwal_checkpoint.html#R-41613-20553-43985-38699-33284-42636-36954-15318'>detail</a>)</i></p></dd>
+
+<dt><b>R-41621-22586-12548-60539-44942-45128-18412-02664</b></dt>
+<dd><p>As an example, consider the following SQL: CREATE TABLE ex25(a,b,c,d,e,PRIMARY KEY(d,c,a)) WITHOUT rowid; CREATE INDEX ex25ce ON ex25(c,e); CREATE INDEX ex25acde ON ex25(a,c,d,e); CREATE INDEX ex25ae ON ex25(a COLLATE nocase,e); Each row in the ex25ce index is a record with these columns: c, e, d, a. The first two columns are the columns being indexed, c and e. The remaining columns are the primary key of the corresponding table row. Normally, the primary key would be columns d, c, and a, but because column c already appears earlier in the index, it is omitted from the key suffix.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat04.test, matrix: <a href='matrix/fileformat2.html#R-41621-22586-12548-60539-44942-45128-18412-02664'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-41621-22586-12548-60539-44942-45128-18412-02664'>detail</a>)</i></p></dd>
+
+<dt><b>R-41640-10889-37891-53855-47925-09375-30702-30304</b></dt>
+<dd><p>The filename returned by this function is the output of the xFullPathname method of the VFS.
+<i>(source: <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>, checked-by: th3/cov1/attach04.test, matrix: <a href='matrix/c3ref/db_filename.html#R-41640-10889-37891-53855-47925-09375-30702-30304'>context</a>, <a href='matrix/matrix_ddb_filename.html#R-41640-10889-37891-53855-47925-09375-30702-30304'>detail</a>)</i></p></dd>
+
+<dt><b>R-41650-20872-58221-16141-48271-22021-38019-62849</b></dt>
+<dd><p>No regexp() user function is defined by default and so use of the REGEXP operator will normally result in an error message.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-41650-20872-58221-16141-48271-22021-38019-62849'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-41650-20872-58221-16141-48271-22021-38019-62849'>detail</a>)</i></p></dd>
+
+<dt><b>R-41653-15278-35465-27999-04338-56048-26181-52623</b></dt>
+<dd><p>The foreign_key_check pragma checks the database, or the table called "table-name", for foreign key constraints that are violated. The foreign_key_check pragma returns one row output for each foreign key violation.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/fkey5.test, th3/cov1/fkey23.test, matrix: <a href='matrix/pragma.html#R-41653-15278-35465-27999-04338-56048-26181-52623'>context</a>, <a href='matrix/matrix_dpragma.html#R-41653-15278-35465-27999-04338-56048-26181-52623'>detail</a>)</i></p></dd>
+
+<dt><b>R-41671-45444-43968-05404-57044-18687-11501-21021</b></dt>
+<dd><p>The format string supports the most common substitutions found in the strftime() function from the standard C library plus two new substitutions, %f and %J.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-41671-45444-43968-05404-57044-18687-11501-21021'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-41671-45444-43968-05404-57044-18687-11501-21021'>detail</a>)</i></p></dd>
+
+<dt><b>R-41719-33203-52232-61281-45744-11728-08852-57887</b></dt>
+<dd><p>The sqlite_stat4.nLt column holds a list of N integers where the K-th integer is the approximate number of entries in the index whose K left-most columns are collectively less than the K left-most columns of the sample.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-41719-33203-52232-61281-45744-11728-08852-57887'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-41719-33203-52232-61281-45744-11728-08852-57887'>detail</a>)</i></p></dd>
+
+<dt><b>R-41719-58677-16610-62099-11420-34570-29798-59249</b></dt>
+<dd><p>Any SQL statement variables that had values bound to them using the sqlite3_bind_*() API retain their values.
+<i>(source: <a href="c3ref/reset.html">c3ref/reset.html</a>, checked-by: th3/req1/clearbind01.test, matrix: <a href='matrix/c3ref/reset.html#R-41719-58677-16610-62099-11420-34570-29798-59249'>context</a>, <a href='matrix/matrix_dreset.html#R-41719-58677-16610-62099-11420-34570-29798-59249'>detail</a>)</i></p></dd>
+
+<dt><b>R-41778-26203-39333-15071-00697-32758-59991-57440</b></dt>
+<dd><p>SQLITE_LIMIT_ATTACHED The maximum number of attached databases.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: tcl/sqllimits1.test, th3/req1/limit02.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-41778-26203-39333-15071-00697-32758-59991-57440'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-41778-26203-39333-15071-00697-32758-59991-57440'>detail</a>)</i></p></dd>
+
+<dt><b>R-41784-13339-39195-36557-35011-50589-62735-17221</b></dt>
+<dd><p>Tip: If the command "PRAGMA foreign_keys" returns no data instead of a single row containing "0" or "1", then the version of SQLite you are using does not support foreign keys (either because it is older than 3.6.19 or because it was compiled with SQLITE_OMIT_FOREIGN_KEY or SQLITE_OMIT_TRIGGER defined).
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys05.test, matrix: <a href='matrix/foreignkeys.html#R-41784-13339-39195-36557-35011-50589-62735-17221'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-41784-13339-39195-36557-35011-50589-62735-17221'>detail</a>)</i></p></dd>
+
+<dt><b>R-41795-40039-43827-16838-58364-41518-15809-62342</b></dt>
+<dd><p>These three ways of committing a transaction correspond to the DELETE, TRUNCATE, and PERSIST settings, respectively, of the journal_mode pragma.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-41795-40039-43827-16838-58364-41518-15809-62342'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-41795-40039-43827-16838-58364-41518-15809-62342'>detail</a>)</i></p></dd>
+
+<dt><b>R-41796-02552-46731-27208-23017-23175-41935-19333</b></dt>
+<dd><p>The columns referenced in the WHERE clause of a partial index can be any of the columns in the table, not just columns that happen to be indexed.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-41796-02552-46731-27208-23017-23175-41935-19333'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-41796-02552-46731-27208-23017-23175-41935-19333'>detail</a>)</i></p></dd>
+
+<dt><b>R-41837-07814-38752-23130-22847-42887-22849-22070</b></dt>
+<dd><p>If the interrupted SQL operation is an INSERT, UPDATE, or DELETE that is inside an explicit transaction, then the entire transaction will be rolled back automatically.
+<i>(source: <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>, matrix: <a href='matrix/c3ref/interrupt.html#R-41837-07814-38752-23130-22847-42887-22849-22070'>context</a>, <a href='matrix/matrix_dinterrupt.html#R-41837-07814-38752-23130-22847-42887-22849-22070'>detail</a>)</i></p></dd>
+
+<dt><b>R-41844-39914-25907-17067-52318-47550-49786-01710</b></dt>
+<dd><p>wr: 1 if the table is a WITHOUT ROWID table or 0 if is not.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-41844-39914-25907-17067-52318-47550-49786-01710'>context</a>, <a href='matrix/matrix_dpragma.html#R-41844-39914-25907-17067-52318-47550-49786-01710'>detail</a>)</i></p></dd>
+
+<dt><b>R-41881-38269-61239-25689-14129-18867-37202-03971</b></dt>
+<dd><p>Columns that are part of the PRIMARY KEY are implicitly NOT NULL.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-41881-38269-61239-25689-14129-18867-37202-03971'>context</a>, <a href='matrix/matrix_dstricttables.html#R-41881-38269-61239-25689-14129-18867-37202-03971'>detail</a>)</i></p></dd>
+
+<dt><b>R-41898-15939-51576-48964-07633-48670-39877-19524</b></dt>
+<dd><p>The sqlite3_value_text16be() and sqlite3_value_text16le() interfaces extract UTF-16 strings as big-endian and little-endian respectively.
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, checked-by: th3/req1/value02.test, th3/req1/value03.test, matrix: <a href='matrix/c3ref/value_blob.html#R-41898-15939-51576-48964-07633-48670-39877-19524'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-41898-15939-51576-48964-07633-48670-39877-19524'>detail</a>)</i></p></dd>
+
+<dt><b>R-41914-07968-11618-38374-65120-62637-18868-18201</b></dt>
+<dd><p>Pragma integrity_check will return at most N errors before the analysis quits, with N defaulting to 100.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/integrityck01.test, matrix: <a href='matrix/pragma.html#R-41914-07968-11618-38374-65120-62637-18868-18201'>context</a>, <a href='matrix/matrix_dpragma.html#R-41914-07968-11618-38374-65120-62637-18868-18201'>detail</a>)</i></p></dd>
+
+<dt><b>R-41921-05214-15323-21890-34251-22434-34985-19293</b></dt>
+<dd><p>The likelihood(X,Y) function returns argument X unchanged.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/func3.test, matrix: <a href='matrix/lang_corefunc.html#R-41921-05214-15323-21890-34251-22434-34985-19293'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-41921-05214-15323-21890-34251-22434-34985-19293'>detail</a>)</i></p></dd>
+
+<dt><b>R-41959-38737-02891-22407-44809-18467-12520-20988</b></dt>
+<dd><p>Otherwise, if this function is passed a valid open blob handle, the values returned by the sqlite3_errcode() and sqlite3_errmsg() functions are set before returning.
+<i>(source: <a href="c3ref/blob_close.html">c3ref/blob_close.html</a>, checked-by: tcl/e_blobclose.test, matrix: <a href='matrix/c3ref/blob_close.html#R-41959-38737-02891-22407-44809-18467-12520-20988'>context</a>, <a href='matrix/matrix_dblob_close.html#R-41959-38737-02891-22407-44809-18467-12520-20988'>detail</a>)</i></p></dd>
+
+<dt><b>R-41964-12887-53267-54582-29615-62168-19001-17157</b></dt>
+<dd><p>Create a partial index by adding a WHERE clause to the end of an ordinary CREATE INDEX statement.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-41964-12887-53267-54582-29615-62168-19001-17157'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-41964-12887-53267-54582-29615-62168-19001-17157'>detail</a>)</i></p></dd>
+
+<dt><b>R-41969-26805-23474-17997-34431-40001-19681-04714</b></dt>
+<dd><p>If the application crashes in the middle of a transaction when the OFF journaling mode is set, then the database file will very likely go corrupt.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma25.test, matrix: <a href='matrix/pragma.html#R-41969-26805-23474-17997-34431-40001-19681-04714'>context</a>, <a href='matrix/matrix_dpragma.html#R-41969-26805-23474-17997-34431-40001-19681-04714'>detail</a>)</i></p></dd>
+
+<dt><b>R-41970-42722-40683-07259-21331-17616-49232-32709</b></dt>
+<dd><p>This pragma queries or sets the write-ahead log auto-checkpoint interval.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-41970-42722-40683-07259-21331-17616-49232-32709'>context</a>, <a href='matrix/matrix_dpragma.html#R-41970-42722-40683-07259-21331-17616-49232-32709'>detail</a>)</i></p></dd>
+
+<dt><b>R-41999-52998-34503-61762-41637-15807-51046-53346</b></dt>
+<dd><p>The definition of LIKE pattern matching used in sqlite3_strlike(P,X,E) is the same as for the "X LIKE P ESCAPE E" operator in the SQL dialect understood by SQLite.
+<i>(source: <a href="c3ref/strlike.html">c3ref/strlike.html</a>, matrix: <a href='matrix/c3ref/strlike.html#R-41999-52998-34503-61762-41637-15807-51046-53346'>context</a>, <a href='matrix/matrix_dstrlike.html#R-41999-52998-34503-61762-41637-15807-51046-53346'>detail</a>)</i></p></dd>
+
+<dt><b>R-42015-34236-37938-25676-18354-23739-35368-22470</b></dt>
+<dd><p>The sqlite3_value_frombind(X) interface returns non-zero if the value X originated from one of the sqlite3_bind() interfaces.
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, matrix: <a href='matrix/c3ref/value_blob.html#R-42015-34236-37938-25676-18354-23739-35368-22470'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-42015-34236-37938-25676-18354-23739-35368-22470'>detail</a>)</i></p></dd>
+
+<dt><b>R-42024-63312-61234-05516-46921-52814-12711-65369</b></dt>
+<dd><p>RESTART blocks concurrent writers while it is running, but allowed readers to proceed.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-42024-63312-61234-05516-46921-52814-12711-65369'>context</a>, <a href='matrix/matrix_dpragma.html#R-42024-63312-61234-05516-46921-52814-12711-65369'>detail</a>)</i></p></dd>
+
+<dt><b>R-42029-48346-24855-30902-19718-06307-39903-13955</b></dt>
+<dd><p>Each SCAN or SEARCH record includes the following information: The name of the table, view, or subquery that data is read from. Whether or not an index or automatic index is used. Whether or not the covering index optimization applies. Which terms of the WHERE clause are used for indexing.
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-42029-48346-24855-30902-19718-06307-39903-13955'>context</a>, <a href='matrix/matrix_deqp.html#R-42029-48346-24855-30902-19718-06307-39903-13955'>detail</a>)</i></p></dd>
+
+<dt><b>R-42037-15614-06254-40391-55101-11302-16506-13295</b></dt>
+<dd><p>The DROP INDEX statement removes an index added with the CREATE INDEX statement.
+<i>(source: <a href="lang_dropindex.html">lang_dropindex.html</a>, matrix: <a href='matrix/lang_dropindex.html#R-42037-15614-06254-40391-55101-11302-16506-13295'>context</a>, <a href='matrix/matrix_dlang_dropindex.html#R-42037-15614-06254-40391-55101-11302-16506-13295'>detail</a>)</i></p></dd>
+
+<dt><b>R-42037-37826-09680-08362-57128-46753-57920-34709</b></dt>
+<dd><p>The default match() function implementation raises an exception and is not really useful for anything.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-42037-37826-09680-08362-57128-46753-57920-34709'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-42037-37826-09680-08362-57128-46753-57920-34709'>detail</a>)</i></p></dd>
+
+<dt><b>R-42043-38025-54022-62680-37100-38992-27371-65527</b></dt>
+<dd><p>The C argument is a copy of the context pointer passed in as the fourth argument to sqlite3_trace_v2().
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-42043-38025-54022-62680-37100-38992-27371-65527'>context</a>, <a href='matrix/matrix_dc_trace.html#R-42043-38025-54022-62680-37100-38992-27371-65527'>detail</a>)</i></p></dd>
+
+<dt><b>R-42049-24001-08911-07479-20981-30990-05153-14571</b></dt>
+<dd><p>A subsequent call to xRollbackTo(X,R) means that the state of the virtual table should return to what it was when xSavepoint(X,R) was last called.
+<i>(source: <a href="vtab.html">vtab.html</a>, matrix: <a href='matrix/vtab.html#R-42049-24001-08911-07479-20981-30990-05153-14571'>context</a>, <a href='matrix/matrix_dvtab.html#R-42049-24001-08911-07479-20981-30990-05153-14571'>detail</a>)</i></p></dd>
+
+<dt><b>R-42053-06220-45520-18434-62327-05125-05247-18783</b></dt>
+<dd><p>AUTOINCREMENT works the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/cov1/autoinc01.test, th3/cov1/autoinc02.test, matrix: <a href='matrix/stricttables.html#R-42053-06220-45520-18434-62327-05125-05247-18783'>context</a>, <a href='matrix/matrix_dstricttables.html#R-42053-06220-45520-18434-62327-05125-05247-18783'>detail</a>)</i></p></dd>
+
+<dt><b>R-42053-10634-10178-57084-38599-37696-52821-41019</b></dt>
+<dd><p>Setting the heap limits to zero disables the heap limiter mechanism.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, checked-by: th3/req1/softheaplimit02.test, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-42053-10634-10178-57084-38599-37696-52821-41019'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-42053-10634-10178-57084-38599-37696-52821-41019'>detail</a>)</i></p></dd>
+
+<dt><b>R-42059-47211-64082-08084-07412-31027-38938-26624</b></dt>
+<dd><p>If the argument N is positive then the suggested cache size is set to N.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/pcache.c, tcl/pragma.test, matrix: <a href='matrix/pragma.html#R-42059-47211-64082-08084-07412-31027-38938-26624'>context</a>, <a href='matrix/matrix_dpragma.html#R-42059-47211-64082-08084-07412-31027-38938-26624'>detail</a>)</i></p></dd>
+
+<dt><b>R-42089-41020-28633-04847-35892-58431-48484-20358</b></dt>
+<dd><p>If no transaction is active (other than the implied transaction that is created on every command) then the ROLLBACK resolution algorithm works the same as the ABORT algorithm.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict01.test, matrix: <a href='matrix/lang_conflict.html#R-42089-41020-28633-04847-35892-58431-48484-20358'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-42089-41020-28633-04847-35892-58431-48484-20358'>detail</a>)</i></p></dd>
+
+<dt><b>R-42106-50385-56441-15914-62934-29085-54052-00189</b></dt>
+<dd><p>Hexadecimal integer literals are interpreted as 64-bit two's-complement integers and are thus limited to sixteen significant digits of precision.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr01.test, matrix: <a href='matrix/lang_expr.html#R-42106-50385-56441-15914-62934-29085-54052-00189'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-42106-50385-56441-15914-62934-29085-54052-00189'>detail</a>)</i></p></dd>
+
+<dt><b>R-42136-40354-42275-03158-50011-22774-46135-65161</b></dt>
+<dd><p>The sqlite3_update_hook(D,C,P) function returns the P argument from the previous call on the same database connection D, or NULL for the first call on D.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-42136-40354-42275-03158-50011-22774-46135-65161'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-42136-40354-42275-03158-50011-22774-46135-65161'>detail</a>)</i></p></dd>
+
+<dt><b>R-42144-12179-61067-60521-47776-40756-33656-09079</b></dt>
+<dd><p>The third parameter to sqlite3_preupdate_hook() is passed through as the first parameter to callbacks.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-42144-12179-61067-60521-47776-40756-33656-09079'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-42144-12179-61067-60521-47776-40756-33656-09079'>detail</a>)</i></p></dd>
+
+<dt><b>R-42164-62580-24188-26678-17421-37500-23009-49649</b></dt>
+<dd><p>In addition to the tables, indexes, views, and triggers created by the application and/or the developer using CREATE statements SQL, the sqlite_schema table may contain zero or more entries for internal schema objects that are created by SQLite for its own internal use.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-42164-62580-24188-26678-17421-37500-23009-49649'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-42164-62580-24188-26678-17421-37500-23009-49649'>detail</a>)</i></p></dd>
+
+<dt><b>R-42168-23975-08359-11434-07624-62565-20004-56753</b></dt>
+<dd><p>Built-in functions may be overloaded by new application-defined functions.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc01.test, th3/req1/createfunc05.test, matrix: <a href='matrix/c3ref/create_function.html#R-42168-23975-08359-11434-07624-62565-20004-56753'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-42168-23975-08359-11434-07624-62565-20004-56753'>detail</a>)</i></p></dd>
+
+<dt><b>R-42196-45693-64496-49282-35220-26786-47093-56372</b></dt>
+<dd><p>The collating function callback is invoked with a copy of the pArg application data pointer and with two strings in the encoding specified by the eTextRep argument.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-42196-45693-64496-49282-35220-26786-47093-56372'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-42196-45693-64496-49282-35220-26786-47093-56372'>detail</a>)</i></p></dd>
+
+<dt><b>R-42199-02842-23017-63561-09592-29870-10052-07819</b></dt>
+<dd><p>After a complete checkpoint, if no other connections are in transactions that use the WAL, then subsequent write transactions can overwrite the WAL file from the beginning.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-42199-02842-23017-63561-09592-29870-10052-07819'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-42199-02842-23017-63561-09592-29870-10052-07819'>detail</a>)</i></p></dd>
+
+<dt><b>R-42207-04347-65478-63733-46803-43649-38770-36227</b></dt>
+<dd><p>In other words, if the pattern is like this: column LIKE x% column GLOB x* then the original LIKE or GLOB tests are disabled when the virtual terms constrain an index because in that case we know that all of the rows selected by the index will pass the LIKE or GLOB test.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-42207-04347-65478-63733-46803-43649-38770-36227'>context</a>, <a href='matrix/matrix_doptoverview.html#R-42207-04347-65478-63733-46803-43649-38770-36227'>detail</a>)</i></p></dd>
+
+<dt><b>R-42243-62806-04242-02019-64725-25394-01618-23361</b></dt>
+<dd><p>The call to xRollbackTo(X,R) will invalidate all savepoints with N>R; none of the invalided savepoints will be rolled back or released without first being reinitialized by a call to xSavepoint().
+<i>(source: <a href="vtab.html">vtab.html</a>, matrix: <a href='matrix/vtab.html#R-42243-62806-04242-02019-64725-25394-01618-23361'>context</a>, <a href='matrix/matrix_dvtab.html#R-42243-62806-04242-02019-64725-25394-01618-23361'>detail</a>)</i></p></dd>
+
+<dt><b>R-42245-25582-08929-62299-62377-14335-00721-06605</b></dt>
+<dd><p>datetime(time-value, modifier, modifier, ...)
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-42245-25582-08929-62299-62377-14335-00721-06605'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-42245-25582-08929-62299-62377-14335-00721-06605'>detail</a>)</i></p></dd>
+
+<dt><b>R-42264-30503-59734-27182-09604-54439-24686-19729</b></dt>
+<dd><p>The SQLITE_MAX_TRIGGER_DEPTH and SQLITE_LIMIT_TRIGGER_DEPTH settings determine the maximum allowable depth of trigger program recursion. For the purposes of these limits, foreign key actions are considered trigger programs.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys24.test, matrix: <a href='matrix/foreignkeys.html#R-42264-30503-59734-27182-09604-54439-24686-19729'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-42264-30503-59734-27182-09604-54439-24686-19729'>detail</a>)</i></p></dd>
+
+<dt><b>R-42297-37851-22979-34861-45337-51350-47253-02521</b></dt>
+<dd><p>The parameter name must be given in UTF-8 even if the original statement was prepared from UTF-16 text using sqlite3_prepare16_v2() or sqlite3_prepare16_v3().
+<i>(source: <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a>, checked-by: th3/req1/bind03.test, matrix: <a href='matrix/c3ref/bind_parameter_index.html#R-42297-37851-22979-34861-45337-51350-47253-02521'>context</a>, <a href='matrix/matrix_dbind_parameter_index.html#R-42297-37851-22979-34861-45337-51350-47253-02521'>detail</a>)</i></p></dd>
+
+<dt><b>R-42315-53658-63706-40087-63101-17320-03632-52756</b></dt>
+<dd><p>This routine sets a busy handler that sleeps for a specified amount of time when a table is locked.
+<i>(source: <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a>, checked-by: th3/cov1/main21.test, matrix: <a href='matrix/c3ref/busy_timeout.html#R-42315-53658-63706-40087-63101-17320-03632-52756'>context</a>, <a href='matrix/matrix_dbusy_timeout.html#R-42315-53658-63706-40087-63101-17320-03632-52756'>detail</a>)</i></p></dd>
+
+<dt><b>R-42316-09582-63519-16650-16131-27933-31807-16513</b></dt>
+<dd><p>If there is no explicit DEFAULT clause attached to a column definition, then the default value of the column is NULL.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-42316-09582-63519-16650-16131-27933-31807-16513'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-42316-09582-63519-16650-16131-27933-31807-16513'>detail</a>)</i></p></dd>
+
+<dt><b>R-42333-10376-25894-44230-56156-46004-61943-25934</b></dt>
+<dd><p>The incremental_vacuum pragma has no effect if the database is not in auto_vacuum=incremental mode or if there are no pages on the freelist.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma21.test, matrix: <a href='matrix/pragma.html#R-42333-10376-25894-44230-56156-46004-61943-25934'>context</a>, <a href='matrix/matrix_dpragma.html#R-42333-10376-25894-44230-56156-46004-61943-25934'>detail</a>)</i></p></dd>
+
+<dt><b>R-42353-38420-62893-47772-45609-25296-37398-15241</b></dt>
+<dd><p>If the busy callback returns 0, then no additional attempts are made to access the database and SQLITE_BUSY is returned to the application.
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-42353-38420-62893-47772-45609-25296-37398-15241'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-42353-38420-62893-47772-45609-25296-37398-15241'>detail</a>)</i></p></dd>
+
+<dt><b>R-42363-29104-39854-61131-26966-39533-29446-04460</b></dt>
+<dd><p>SQLITE_LIMIT_VARIABLE_NUMBER The maximum index number of any parameter in an SQL statement.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: tcl/sqllimits1.test, th3/req1/limit02.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-42363-29104-39854-61131-26966-39533-29446-04460'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-42363-29104-39854-61131-26966-39533-29446-04460'>detail</a>)</i></p></dd>
+
+<dt><b>R-42393-33810-20509-47326-15941-02937-41283-04621</b></dt>
+<dd><p>If Z is not initially a string, it is cast to a UTF-8 string prior to processing.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-42393-33810-20509-47326-15941-02937-41283-04621'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-42393-33810-20509-47326-15941-02937-41283-04621'>detail</a>)</i></p></dd>
+
+<dt><b>R-42401-19613-44791-55246-19167-45900-28933-57755</b></dt>
+<dd><p>If offset iOffset is less than N bytes from the end of the BLOB, SQLITE_ERROR is returned and no data is read.
+<i>(source: <a href="c3ref/blob_read.html">c3ref/blob_read.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_read.html#R-42401-19613-44791-55246-19167-45900-28933-57755'>context</a>, <a href='matrix/matrix_dblob_read.html#R-42401-19613-44791-55246-19167-45900-28933-57755'>detail</a>)</i></p></dd>
+
+<dt><b>R-42412-59321-17229-61863-37154-26359-45547-07737</b></dt>
+<dd><p>Tip: If the application requires a stricter relationship between artist and track, where NULL values are not permitted in the trackartist column, simply add the appropriate "NOT NULL" constraint to the schema.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys02.test, matrix: <a href='matrix/foreignkeys.html#R-42412-59321-17229-61863-37154-26359-45547-07737'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-42412-59321-17229-61863-37154-26359-45547-07737'>detail</a>)</i></p></dd>
+
+<dt><b>R-42413-48699-18180-28011-52485-52164-16827-39292</b></dt>
+<dd><p>SQLite will also attempt to use indexes to help satisfy GROUP BY clauses and the DISTINCT keyword.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-42413-48699-18180-28011-52485-52164-16827-39292'>context</a>, <a href='matrix/matrix_doptoverview.html#R-42413-48699-18180-28011-52485-52164-16827-39292'>detail</a>)</i></p></dd>
+
+<dt><b>R-42415-59396-18993-18875-54415-33588-07688-24488</b></dt>
+<dd><p>Or the pragma might run during sqlite3_step() just like normal SQL statements.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma06.test, matrix: <a href='matrix/pragma.html#R-42415-59396-18993-18875-54415-33588-07688-24488'>context</a>, <a href='matrix/matrix_dpragma.html#R-42415-59396-18993-18875-54415-33588-07688-24488'>detail</a>)</i></p></dd>
+
+<dt><b>R-42420-56072-06217-40848-64970-52103-43558-36371</b></dt>
+<dd><p>The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT is always 0.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: src/status.c, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-42420-56072-06217-40848-64970-52103-43558-36371'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-42420-56072-06217-40848-64970-52103-43558-36371'>detail</a>)</i></p></dd>
+
+<dt><b>R-42475-05522-33974-48486-41062-27037-25414-59266</b></dt>
+<dd><p>SQLITE_DBSTATUS_STMT_USED This parameter returns the approximate number of bytes of heap and lookaside memory used by all prepared statements associated with the database connection.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-42475-05522-33974-48486-41062-27037-25414-59266'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-42475-05522-33974-48486-41062-27037-25414-59266'>detail</a>)</i></p></dd>
+
+<dt><b>R-42511-39459-28264-29563-43720-13525-46264-32619</b></dt>
+<dd><p>PRIMARY KEY, UNIQUE and NOT NULL constraints may be explicitly assigned a default conflict resolution algorithm by including a conflict-clause in their definitions.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-42511-39459-28264-29563-43720-13525-46264-32619'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-42511-39459-28264-29563-43720-13525-46264-32619'>detail</a>)</i></p></dd>
+
+<dt><b>R-42511-45809-64803-32183-55869-46108-05938-14656</b></dt>
+<dd><p>If the Y argument is omitted, trim(X) removes spaces from both ends of X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-42511-45809-64803-32183-55869-46108-05938-14656'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-42511-45809-64803-32183-55869-46108-05938-14656'>detail</a>)</i></p></dd>
+
+<dt><b>R-42555-53392-53053-11662-61855-46471-62332-42985</b></dt>
+<dd><p>A time value can be in any of the following formats shown below. The value is usually a string, though it can be an integer or floating point number in the case of format 12. YYYY-MM-DD YYYY-MM-DD HH:MM YYYY-MM-DD HH:MM:SS YYYY-MM-DD HH:MM:SS.SSS YYYY-MM-DDTHH:MM YYYY-MM-DDTHH:MM:SS YYYY-MM-DDTHH:MM:SS.SSS HH:MM HH:MM:SS HH:MM:SS.SSS now DDDDDDDDDD
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-42555-53392-53053-11662-61855-46471-62332-42985'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-42555-53392-53053-11662-61855-46471-62332-42985'>detail</a>)</i></p></dd>
+
+<dt><b>R-42556-20460-59163-07637-16181-08925-43211-33857</b></dt>
+<dd><p>There can only be a single busy handler for a particular database connection at any given moment. If another busy handler was defined (using sqlite3_busy_handler()) prior to calling this routine, that other busy handler is cleared.
+<i>(source: <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_timeout.html#R-42556-20460-59163-07637-16181-08925-43211-33857'>context</a>, <a href='matrix/matrix_dbusy_timeout.html#R-42556-20460-59163-07637-16181-08925-43211-33857'>detail</a>)</i></p></dd>
+
+<dt><b>R-42584-44456-56130-43487-49627-44255-00000-11489</b></dt>
+<dd><p>To always truncate rollback journals and WAL files to their minimum size, set the journal_size_limit to zero.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-42584-44456-56130-43487-49627-44255-00000-11489'>context</a>, <a href='matrix/matrix_dpragma.html#R-42584-44456-56130-43487-49627-44255-00000-11489'>detail</a>)</i></p></dd>
+
+<dt><b>R-42620-22184-27875-60566-02937-27650-15183-08626</b></dt>
+<dd><p>If this means the parameter would be assigned a number greater than SQLITE_MAX_VARIABLE_NUMBER, it is an error.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-42620-22184-27875-60566-02937-27650-15183-08626'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-42620-22184-27875-60566-02937-27650-15183-08626'>detail</a>)</i></p></dd>
+
+<dt><b>R-42639-56137-32346-60663-52828-48959-18769-50856</b></dt>
+<dd><p>Each entry in most SQLite tables (except for WITHOUT ROWID tables) has a unique 64-bit signed integer key called the "rowid".
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, checked-by: th3/cov1/withoutrowid01.test, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-42639-56137-32346-60663-52828-48959-18769-50856'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-42639-56137-32346-60663-52828-48959-18769-50856'>detail</a>)</i></p></dd>
+
+<dt><b>R-42640-12758-34834-48042-16634-19699-19506-39894</b></dt>
+<dd><p>For example, if the internal representation is FLOAT and a text result is requested, sqlite3_snprintf() is used internally to perform the conversion automatically.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column02.test, matrix: <a href='matrix/c3ref/column_blob.html#R-42640-12758-34834-48042-16634-19699-19506-39894'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-42640-12758-34834-48042-16634-19699-19506-39894'>detail</a>)</i></p></dd>
+
+<dt><b>R-42648-01192-24711-57227-24478-04310-65154-26465</b></dt>
+<dd><p>Notice that the type VARCHAR contains the string "CHAR" and is thus assigned TEXT affinity.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-42648-01192-24711-57227-24478-04310-65154-26465'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-42648-01192-24711-57227-24478-04310-65154-26465'>detail</a>)</i></p></dd>
+
+<dt><b>R-42657-00400-11552-47738-28049-57819-30867-53665</b></dt>
+<dd><p>If the integer at offset 52 is non-zero then it is the page number of the largest root page in the database file, the database file will contain ptrmap pages, and the mode must be either auto_vacuum or incremental_vacuum.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-42657-00400-11552-47738-28049-57819-30867-53665'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-42657-00400-11552-47738-28049-57819-30867-53665'>detail</a>)</i></p></dd>
+
+<dt><b>R-42660-47528-56905-42571-24684-45816-05890-54288</b></dt>
+<dd><p>A statement is judged to be complete if it ends with a semicolon token and is not a prefix of a well-formed CREATE TRIGGER statement.
+<i>(source: <a href="c3ref/complete.html">c3ref/complete.html</a>, checked-by: th3/cov1/complete01.test, matrix: <a href='matrix/c3ref/complete.html#R-42660-47528-56905-42571-24684-45816-05890-54288'>context</a>, <a href='matrix/matrix_dcomplete.html#R-42660-47528-56905-42571-24684-45816-05890-54288'>detail</a>)</i></p></dd>
+
+<dt><b>R-42670-46183-00438-39556-01982-63614-08671-47686</b></dt>
+<dd><p>If the result is a numeric value then sqlite3_column_bytes16() uses sqlite3_snprintf() to convert that value to a UTF-16 string and returns the number of bytes in that string.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-42670-46183-00438-39556-01982-63614-08671-47686'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-42670-46183-00438-39556-01982-63614-08671-47686'>detail</a>)</i></p></dd>
+
+<dt><b>R-42680-10017-09402-35540-35488-37864-08326-19321</b></dt>
+<dd><p>The first host parameter has an index of 1, not 0.
+<i>(source: <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>, checked-by: th3/req1/bind04.test, matrix: <a href='matrix/c3ref/bind_parameter_name.html#R-42680-10017-09402-35540-35488-37864-08326-19321'>context</a>, <a href='matrix/matrix_dbind_parameter_name.html#R-42680-10017-09402-35540-35488-37864-08326-19321'>detail</a>)</i></p></dd>
+
+<dt><b>R-42714-29052-62793-36764-55594-49553-21277-61265</b></dt>
+<dd><p>If N is greater than zero, then the analysis limit is set to N and subsequent ANALYZE commands will stop analyzing each index after it has examined approximately N rows.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/analyze18.test, matrix: <a href='matrix/pragma.html#R-42714-29052-62793-36764-55594-49553-21277-61265'>context</a>, <a href='matrix/matrix_dpragma.html#R-42714-29052-62793-36764-55594-49553-21277-61265'>detail</a>)</i></p></dd>
+
+<dt><b>R-42757-24221-43746-48434-02480-64556-26113-38051</b></dt>
+<dd><p>The second parameter szExtra is a number of bytes of extra storage associated with each page cache entry.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-42757-24221-43746-48434-02480-64556-26113-38051'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-42757-24221-43746-48434-02480-64556-26113-38051'>detail</a>)</i></p></dd>
+
+<dt><b>R-42776-35033-43191-08460-16792-47540-52989-38911</b></dt>
+<dd><p>If an SQL function is nearly deterministic (which is to say, if it only rarely changes, like sqlite_version()) and it is used in an index that becomes corrupt, the corruption can be fixed by running REINDEX.
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-42776-35033-43191-08460-16792-47540-52989-38911'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-42776-35033-43191-08460-16792-47540-52989-38911'>detail</a>)</i></p></dd>
+
+<dt><b>R-42790-23372-13524-47335-35146-00064-12684-28505</b></dt>
+<dd><p>The sqlite3_db_config() interface will return a non-zero error code if a discontinued or unsupported configuration option is invoked.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: src/main.c, th3/req1/dbconfig01.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-42790-23372-13524-47335-35146-00064-12684-28505'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-42790-23372-13524-47335-35146-00064-12684-28505'>detail</a>)</i></p></dd>
+
+<dt><b>R-42798-04097-62077-21747-11472-32542-49000-45202</b></dt>
+<dd><p>The leftmost SQL parameter has an index of 1.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-42798-04097-62077-21747-11472-32542-49000-45202'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-42798-04097-62077-21747-11472-32542-49000-45202'>detail</a>)</i></p></dd>
+
+<dt><b>R-42858-58769-58822-33299-41637-22635-42274-51914</b></dt>
+<dd><p>The datatype must be one of following: INT INTEGER REAL TEXT BLOB ANY
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-42858-58769-58822-33299-41637-22635-42274-51914'>context</a>, <a href='matrix/matrix_dstricttables.html#R-42858-58769-58822-33299-41637-22635-42274-51914'>detail</a>)</i></p></dd>
+
+<dt><b>R-42868-39706-29794-00885-30480-27776-00308-11610</b></dt>
+<dd><p>In other words, the filename will be an absolute pathname, even if the filename used to open the database originally was a URI or relative pathname.
+<i>(source: <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>, checked-by: th3/cov1/attach04.test, matrix: <a href='matrix/c3ref/db_filename.html#R-42868-39706-29794-00885-30480-27776-00308-11610'>context</a>, <a href='matrix/matrix_ddb_filename.html#R-42868-39706-29794-00885-30480-27776-00308-11610'>detail</a>)</i></p></dd>
+
+<dt><b>R-42881-44982-56235-44486-35660-20338-31764-62780</b></dt>
+<dd><p>The name of the table to be modified in an UPDATE, DELETE, or INSERT statement must be an unqualified table name. In other words, one must use just "tablename" not "database.tablename" when specifying the table.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-42881-44982-56235-44486-35660-20338-31764-62780'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-42881-44982-56235-44486-35660-20338-31764-62780'>detail</a>)</i></p></dd>
+
+<dt><b>R-42893-46431-20784-14098-09161-04646-55397-28010</b></dt>
+<dd><p>Thus, for example, the date 2001-03-31 modified by '+1 month' initially yields 2001-04-31, but April only has 30 days so the date is normalized to 2001-05-01.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-42893-46431-20784-14098-09161-04646-55397-28010'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-42893-46431-20784-14098-09161-04646-55397-28010'>detail</a>)</i></p></dd>
+
+<dt><b>R-42924-00638-21387-26968-40165-13268-56405-46606</b></dt>
+<dd><p>The current implementation only uses the lower 31 bits of the N value - higher order bits are silently ignored. Future versions of SQLite might begin using higher order bits.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/analyze18.test, matrix: <a href='matrix/pragma.html#R-42924-00638-21387-26968-40165-13268-56405-46606'>context</a>, <a href='matrix/matrix_dpragma.html#R-42924-00638-21387-26968-40165-13268-56405-46606'>detail</a>)</i></p></dd>
+
+<dt><b>R-42928-04804-58667-56106-39404-50461-35993-01252</b></dt>
+<dd><p>The COLLATE clause (with its collation-name) acts as a single postfix operator.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-42928-04804-58667-56106-39404-50461-35993-01252'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-42928-04804-58667-56106-39404-50461-35993-01252'>detail</a>)</i></p></dd>
+
+<dt><b>R-42938-07030-34028-51732-04227-55156-04511-38808</b></dt>
+<dd><p>If this means the parameter number is greater than SQLITE_MAX_VARIABLE_NUMBER, it is an error.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-42938-07030-34028-51732-04227-55156-04511-38808'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-42938-07030-34028-51732-04227-55156-04511-38808'>detail</a>)</i></p></dd>
+
+<dt><b>R-42967-40755-03922-54202-06529-32553-15493-34553</b></dt>
+<dd><p>Each term of aOrderBy records a column of the ORDER BY clause.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-42967-40755-03922-54202-06529-32553-15493-34553'>context</a>, <a href='matrix/matrix_dindex_info.html#R-42967-40755-03922-54202-06529-32553-15493-34553'>detail</a>)</i></p></dd>
+
+<dt><b>R-42990-60904-19508-54128-30417-12976-04052-35475</b></dt>
+<dd><p>The void pointer that is the second argument to SQLITE_CONFIG_LOG is passed through as the first parameter to the application-defined logger function whenever that function is invoked.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/cov1/log01.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-42990-60904-19508-54128-30417-12976-04052-35475'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-42990-60904-19508-54128-30417-12976-04052-35475'>detail</a>)</i></p></dd>
+
+<dt><b>R-42999-28458-07893-62789-61417-10043-42121-06014</b></dt>
+<dd><p>The sqlite3_strglob(P,X) interface returns zero if and only if string X matches the GLOB pattern P.
+<i>(source: <a href="c3ref/strglob.html">c3ref/strglob.html</a>, checked-by: th3/cov1/glob01.test, matrix: <a href='matrix/c3ref/strglob.html#R-42999-28458-07893-62789-61417-10043-42121-06014'>context</a>, <a href='matrix/matrix_dstrglob.html#R-42999-28458-07893-62789-61417-10043-42121-06014'>detail</a>)</i></p></dd>
+
+<dt><b>R-43036-46756-34715-46322-50618-48036-10639-21553</b></dt>
+<dd><p>If "ro" is specified, then the database is opened for read-only access, just as if the SQLITE_OPEN_READONLY flag had been set in the third argument to sqlite3_open_v2().
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-43036-46756-34715-46322-50618-48036-10639-21553'>context</a>, <a href='matrix/matrix_dopen.html#R-43036-46756-34715-46322-50618-48036-10639-21553'>detail</a>)</i></p></dd>
+
+<dt><b>R-43040-62530-50072-37699-18765-48451-48404-22344</b></dt>
+<dd><p>The text of the child CREATE TABLE statement or statements stored in the sqlite_schema table are modified to reflect the new parent table name.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys21.test, matrix: <a href='matrix/foreignkeys.html#R-43040-62530-50072-37699-18765-48451-48404-22344'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-43040-62530-50072-37699-18765-48451-48404-22344'>detail</a>)</i></p></dd>
+
+<dt><b>R-43042-22504-56439-09446-23422-01554-61314-54021</b></dt>
+<dd><p>No error messages are generated if an unknown pragma is issued.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/pragma.c, th3/req1/pragma03.test, matrix: <a href='matrix/pragma.html#R-43042-22504-56439-09446-23422-01554-61314-54021'>context</a>, <a href='matrix/matrix_dpragma.html#R-43042-22504-56439-09446-23422-01554-61314-54021'>detail</a>)</i></p></dd>
+
+<dt><b>R-43042-25245-03668-43553-25952-57766-42536-13209</b></dt>
+<dd><p>If the mode option is set to "memory" then a pure in-memory database that never reads or writes from disk is used.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/sharedcache03.test, matrix: <a href='matrix/c3ref/open.html#R-43042-25245-03668-43553-25952-57766-42536-13209'>context</a>, <a href='matrix/matrix_dopen.html#R-43042-25245-03668-43553-25952-57766-42536-13209'>detail</a>)</i></p></dd>
+
+<dt><b>R-43058-16959-43788-45364-39792-51782-37660-38644</b></dt>
+<dd><p>The amount of space allocated by sqlite3_aggregate_context(C,N) is determined by the N parameter on first successful call. Changing the value of N in any subsequent call to sqlite3_aggregate_context() within the same aggregate function instance will not resize the memory allocation.
+<i>(source: <a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a>, checked-by: th3/req1/aggcntx01.test, matrix: <a href='matrix/c3ref/aggregate_context.html#R-43058-16959-43788-45364-39792-51782-37660-38644'>context</a>, <a href='matrix/matrix_daggregate_context.html#R-43058-16959-43788-45364-39792-51782-37660-38644'>detail</a>)</i></p></dd>
+
+<dt><b>R-43060-16536-10698-60756-41285-15374-61767-21299</b></dt>
+<dd><p>The profile callback time is in units of nanoseconds, however the current implementation is only capable of millisecond resolution so the six least significant digits in the time are meaningless.
+<i>(source: <a href="c3ref/profile.html">c3ref/profile.html</a>, checked-by: th3/cov1/main16.test, matrix: <a href='matrix/c3ref/profile.html#R-43060-16536-10698-60756-41285-15374-61767-21299'>context</a>, <a href='matrix/matrix_dprofile.html#R-43060-16536-10698-60756-41285-15374-61767-21299'>detail</a>)</i></p></dd>
+
+<dt><b>R-43064-28843-60545-11344-25729-47633-22876-03755</b></dt>
+<dd><p>For each table read by the query, the output of EXPLAIN QUERY PLAN includes a record for which the value in the "detail" column begins with either "SCAN" or "SEARCH".
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-43064-28843-60545-11344-25729-47633-22876-03755'>context</a>, <a href='matrix/matrix_deqp.html#R-43064-28843-60545-11344-25729-47633-22876-03755'>detail</a>)</i></p></dd>
+
+<dt><b>R-43076-48302-39117-06885-40232-30421-32965-23901</b></dt>
+<dd><p>The sqlite3_extended_result_codes() routine enables or disables the extended result codes feature of SQLite.
+<i>(source: <a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a>, checked-by: th3/cov1/main06.test, matrix: <a href='matrix/c3ref/extended_result_codes.html#R-43076-48302-39117-06885-40232-30421-32965-23901'>context</a>, <a href='matrix/matrix_dextended_result_codes.html#R-43076-48302-39117-06885-40232-30421-32965-23901'>detail</a>)</i></p></dd>
+
+<dt><b>R-43156-15813-49564-25791-10742-05152-48657-05796</b></dt>
+<dd><p>The SQLITE_FCNTL_BUSYHANDLER file-control may be invoked by SQLite on the database file handle shortly after it is opened in order to provide a custom VFS with access to the connection's busy-handler callback.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-43156-15813-49564-25791-10742-05152-48657-05796'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-43156-15813-49564-25791-10742-05152-48657-05796'>detail</a>)</i></p></dd>
+
+<dt><b>R-43164-44276-05448-08571-37890-01247-49300-00926</b></dt>
+<dd><p>If there is no prefix that can be interpreted as an integer number, the result of the conversion is 0.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-43164-44276-05448-08571-37890-01247-49300-00926'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-43164-44276-05448-08571-37890-01247-49300-00926'>detail</a>)</i></p></dd>
+
+<dt><b>R-43172-64399-63789-05300-15599-35833-47014-02400</b></dt>
+<dd><p>The 4-byte big-endian integer at offset 68 is an "Application ID" that can be set by the PRAGMA application_id command in order to identify the database as belonging to or associated with a particular application.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat03.test, matrix: <a href='matrix/fileformat2.html#R-43172-64399-63789-05300-15599-35833-47014-02400'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-43172-64399-63789-05300-15599-35833-47014-02400'>detail</a>)</i></p></dd>
+
+<dt><b>R-43190-62442-20010-51227-34344-19852-62865-03762</b></dt>
+<dd><p>In other words, the schema-name. prefix on the table name of the UPDATE is not allowed within triggers.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-43190-62442-20010-51227-34344-19852-62865-03762'>context</a>, <a href='matrix/matrix_dlang_update.html#R-43190-62442-20010-51227-34344-19852-62865-03762'>detail</a>)</i></p></dd>
+
+<dt><b>R-43217-29904-47266-41497-40047-57138-51637-14307</b></dt>
+<dd><p>This routine returns the N-th compile-time option used to build SQLite or NULL if N is out of range.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/ctime02.test, matrix: <a href='matrix/lang_corefunc.html#R-43217-29904-47266-41497-40047-57138-51637-14307'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-43217-29904-47266-41497-40047-57138-51637-14307'>detail</a>)</i></p></dd>
+
+<dt><b>R-43230-40115-50366-23982-20450-64068-63336-08552</b></dt>
+<dd><p>Any process or thread can select READ UNCOMMITTED isolation, but SERIALIZABLE will still be used except between connections that share a common page and schema cache.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-43230-40115-50366-23982-20450-64068-63336-08552'>context</a>, <a href='matrix/matrix_dpragma.html#R-43230-40115-50366-23982-20450-64068-63336-08552'>detail</a>)</i></p></dd>
+
+<dt><b>R-43234-44223-26949-41610-57422-00993-50699-20891</b></dt>
+<dd><p>(1) A destructor to dispose of the BLOB or string after SQLite has finished with it may be passed.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, matrix: <a href='matrix/c3ref/bind_blob.html#R-43234-44223-26949-41610-57422-00993-50699-20891'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-43234-44223-26949-41610-57422-00993-50699-20891'>detail</a>)</i></p></dd>
+
+<dt><b>R-43237-50879-06987-12679-64583-33041-22126-56366</b></dt>
+<dd><p>If the database schema changes, instead of returning SQLITE_SCHEMA as it always used to do, sqlite3_step() will automatically recompile the SQL statement and try to run it again.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare02.test, matrix: <a href='matrix/c3ref/prepare.html#R-43237-50879-06987-12679-64583-33041-22126-56366'>context</a>, <a href='matrix/matrix_dprepare.html#R-43237-50879-06987-12679-64583-33041-22126-56366'>detail</a>)</i></p></dd>
+
+<dt><b>R-43249-19882-52899-37517-44560-32908-46536-34852</b></dt>
+<dd><p>The third through sixth parameters to the callback are either NULL pointers or zero-terminated strings that contain additional details about the action to be authorized.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: src/auth.c, th3/cov1/auth05.test, matrix: <a href='matrix/c3ref/set_authorizer.html#R-43249-19882-52899-37517-44560-32908-46536-34852'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-43249-19882-52899-37517-44560-32908-46536-34852'>detail</a>)</i></p></dd>
+
+<dt><b>R-43263-13491-37815-28347-01820-41692-00359-07852</b></dt>
+<dd><p>The total number of bytes in all fragments is stored in the fifth field of the b-tree page header.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-43263-13491-37815-28347-01820-41692-00359-07852'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-43263-13491-37815-28347-01820-41692-00359-07852'>detail</a>)</i></p></dd>
+
+<dt><b>R-43273-35828-43292-36541-60340-59124-40866-23243</b></dt>
+<dd><p>Because the source database is not locked between calls to sqlite3_backup_step(), the source database may be modified mid-way through the backup process.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-43273-35828-43292-36541-60340-59124-40866-23243'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-43273-35828-43292-36541-60340-59124-40866-23243'>detail</a>)</i></p></dd>
+
+<dt><b>R-43309-20049-45767-17244-13943-35472-42649-06268</b></dt>
+<dd><p>If there is no INTEGER PRIMARY KEY column, then the outputs for the rowid are set as follows: data type: "INTEGER" collation sequence: "BINARY" not null: 0 primary key: 1 auto increment: 0
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-43309-20049-45767-17244-13943-35472-42649-06268'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-43309-20049-45767-17244-13943-35472-42649-06268'>detail</a>)</i></p></dd>
+
+<dt><b>R-43310-35438-04399-12485-38547-48138-39815-28430</b></dt>
+<dd><p>The ORDER BY and LIMIT clauses on UPDATE and DELETE statements are not supported. ORDER BY and LIMIT are not normally supported for UPDATE or DELETE in any context but can be enabled for top-level statements using the SQLITE_ENABLE_UPDATE_DELETE_LIMIT compile-time option. However, that compile-time option only applies to top-level UPDATE and DELETE statements, not UPDATE and DELETE statements within triggers.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-43310-35438-04399-12485-38547-48138-39815-28430'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-43310-35438-04399-12485-38547-48138-39815-28430'>detail</a>)</i></p></dd>
+
+<dt><b>R-43316-37308-43115-39313-41984-23156-09755-42929</b></dt>
+<dd><p>A value of 2 (0x02) means the page is an interior index b-tree page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-43316-37308-43115-39313-41984-23156-09755-42929'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-43316-37308-43115-39313-41984-23156-09755-42929'>detail</a>)</i></p></dd>
+
+<dt><b>R-43323-52188-61316-01603-51862-46847-20290-63862</b></dt>
+<dd><p>The RETURNING clause cannot be used by statements within triggers.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-43323-52188-61316-01603-51862-46847-20290-63862'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-43323-52188-61316-01603-51862-46847-20290-63862'>detail</a>)</i></p></dd>
+
+<dt><b>R-43328-56724-38269-63059-47788-20047-48832-13506</b></dt>
+<dd><p>If a column has the type INTEGER PRIMARY KEY AUTOINCREMENT then a slightly different ROWID selection algorithm is used.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-43328-56724-38269-63059-47788-20047-48832-13506'>context</a>, <a href='matrix/matrix_dautoinc.html#R-43328-56724-38269-63059-47788-20047-48832-13506'>detail</a>)</i></p></dd>
+
+<dt><b>R-43340-55464-08586-38170-34053-21521-23708-51540</b></dt>
+<dd><p>The database header also stores the page number of the first freelist trunk page as a 4-byte big-endian integer at an offset of 32 from the beginning of the file.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-43340-55464-08586-38170-34053-21521-23708-51540'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-43340-55464-08586-38170-34053-21521-23708-51540'>detail</a>)</i></p></dd>
+
+<dt><b>R-43363-59092-12659-08651-39134-62372-15667-15588</b></dt>
+<dd><p>If aConstraintUsage[].omit is true, then the constraint is assumed to be fully handled by the virtual table and might not be checked again by the byte code.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-43363-59092-12659-08651-39134-62372-15667-15588'>context</a>, <a href='matrix/matrix_dindex_info.html#R-43363-59092-12659-08651-39134-62372-15667-15588'>detail</a>)</i></p></dd>
+
+<dt><b>R-43366-61198-05845-57681-29417-64282-40524-45626</b></dt>
+<dd><p>SQLite will then manage the lifetime of its private copy.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, matrix: <a href='matrix/c3ref/bind_blob.html#R-43366-61198-05845-57681-29417-64282-40524-45626'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-43366-61198-05845-57681-29417-64282-40524-45626'>detail</a>)</i></p></dd>
+
+<dt><b>R-43382-54865-31574-52044-42032-61533-34154-44077</b></dt>
+<dd><p>Each SQL index, whether explicitly declared via a CREATE INDEX statement or implied by a UNIQUE or PRIMARY KEY constraint, corresponds to an index b-tree in the database file.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-43382-54865-31574-52044-42032-61533-34154-44077'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-43382-54865-31574-52044-42032-61533-34154-44077'>detail</a>)</i></p></dd>
+
+<dt><b>R-43399-09409-02985-19756-28234-54022-20282-22241</b></dt>
+<dd><p>This means that if the changes() SQL function (or similar) is used by the first INSERT, UPDATE or DELETE statement within a trigger, it returns the value as set when the calling statement began executing.
+<i>(source: <a href="c3ref/changes.html">c3ref/changes.html</a>, checked-by: tcl/e_changes.test, matrix: <a href='matrix/c3ref/changes.html#R-43399-09409-02985-19756-28234-54022-20282-22241'>context</a>, <a href='matrix/matrix_dchanges.html#R-43399-09409-02985-19756-28234-54022-20282-22241'>detail</a>)</i></p></dd>
+
+<dt><b>R-43412-05248-04352-15247-64896-14746-56138-24199</b></dt>
+<dd><p>SQLITE_DBSTATUS_LOOKASIDE_USED This parameter returns the number of lookaside memory slots currently checked out.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-43412-05248-04352-15247-64896-14746-56138-24199'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-43412-05248-04352-15247-64896-14746-56138-24199'>detail</a>)</i></p></dd>
+
+<dt><b>R-43412-16016-07613-58418-19222-63413-27211-48074</b></dt>
+<dd><p>The column has a UNIQUE constraint.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: tcl/alterdropcol2.test, th3/cov1/altertable25.test, matrix: <a href='matrix/lang_altertable.html#R-43412-16016-07613-58418-19222-63413-27211-48074'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-43412-16016-07613-58418-19222-63413-27211-48074'>detail</a>)</i></p></dd>
+
+<dt><b>R-43415-05262-05879-65095-11903-46844-51636-40644</b></dt>
+<dd><p>The filename argument is interpreted as UTF-8 for sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte order for sqlite3_open16().
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/req1/autoext01.test, matrix: <a href='matrix/c3ref/open.html#R-43415-05262-05879-65095-11903-46844-51636-40644'>context</a>, <a href='matrix/matrix_dopen.html#R-43415-05262-05879-65095-11903-46844-51636-40644'>detail</a>)</i></p></dd>
+
+<dt><b>R-43433-49136-61285-59919-49849-25550-47556-02276</b></dt>
+<dd><p>Transactions can be DEFERRED, IMMEDIATE, or EXCLUSIVE.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-43433-49136-61285-59919-49849-25550-47556-02276'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-43433-49136-61285-59919-49849-25550-47556-02276'>detail</a>)</i></p></dd>
+
+<dt><b>R-43442-30789-40705-27465-13407-54814-56874-21617</b></dt>
+<dd><p>SQLITE_STATUS_SCRATCH_OVERFLOW No longer used. SQLITE_STATUS_SCRATCH_SIZE No longer used. SQLITE_STATUS_PARSER_STACK The *pHighwater parameter records the deepest parser stack. The *pCurrent value is undefined. The *pHighwater value is only meaningful if SQLite is compiled with YYTRACKMAXSTACKDEPTH.
+<i>(source: <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a>, matrix: <a href='matrix/c3ref/c_status_malloc_count.html#R-43442-30789-40705-27465-13407-54814-56874-21617'>context</a>, <a href='matrix/matrix_dc_status_malloc_count.html#R-43442-30789-40705-27465-13407-54814-56874-21617'>detail</a>)</i></p></dd>
+
+<dt><b>R-43443-20296-62064-61017-62025-48147-54408-20485</b></dt>
+<dd><p>SQLITE_PREPARE_PERSISTENT The SQLITE_PREPARE_PERSISTENT flag is a hint to the query planner that the prepared statement will be retained for a long time and probably reused many times.
+<i>(source: <a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a>, matrix: <a href='matrix/c3ref/c_prepare_normalize.html#R-43443-20296-62064-61017-62025-48147-54408-20485'>context</a>, <a href='matrix/matrix_dc_prepare_normalize.html#R-43443-20296-62064-61017-62025-48147-54408-20485'>detail</a>)</i></p></dd>
+
+<dt><b>R-43448-12354-12620-62746-36446-48855-45456-57112</b></dt>
+<dd><p>When there are attached databases and no database is specified in the pragma, all databases have their secure-delete setting altered.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma20.test, th3/cov1/pragma21.test, matrix: <a href='matrix/pragma.html#R-43448-12354-12620-62746-36446-48855-45456-57112'>context</a>, <a href='matrix/matrix_dpragma.html#R-43448-12354-12620-62746-36446-48855-45456-57112'>detail</a>)</i></p></dd>
+
+<dt><b>R-43455-30330-13340-63618-42639-11266-34972-33026</b></dt>
+<dd><p>The main and temp databases cannot be attached or detached.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach01.test, matrix: <a href='matrix/lang_attach.html#R-43455-30330-13340-63618-42639-11266-34972-33026'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-43455-30330-13340-63618-42639-11266-34972-33026'>detail</a>)</i></p></dd>
+
+<dt><b>R-43458-55246-11527-54416-50784-11125-14685-56164</b></dt>
+<dd><p>Compute the date and time given a unix timestamp 1092941466. SELECT datetime(1092941466, 'unixepoch'); SELECT datetime(1092941466, 'auto'); -- Does not work for early 1970!
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-43458-55246-11527-54416-50784-11125-14685-56164'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-43458-55246-11527-54416-50784-11125-14685-56164'>detail</a>)</i></p></dd>
+
+<dt><b>R-43464-09689-21831-49515-17205-20394-62676-59001</b></dt>
+<dd><p>The likely(X) function is a no-op that the code generator optimizes away so that it consumes no CPU cycles at run-time (that is, during calls to sqlite3_step()).
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/func3.test, matrix: <a href='matrix/lang_corefunc.html#R-43464-09689-21831-49515-17205-20394-62676-59001'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-43464-09689-21831-49515-17205-20394-62676-59001'>detail</a>)</i></p></dd>
+
+<dt><b>R-43475-58499-15568-06638-27533-08364-56193-27126</b></dt>
+<dd><p>SQLite avoids reading or writing freelist leaf pages in order to reduce disk I/O.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-43475-58499-15568-06638-27533-08364-56193-27126'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-43475-58499-15568-06638-27533-08364-56193-27126'>detail</a>)</i></p></dd>
+
+<dt><b>R-43482-09713-62461-41415-00231-20987-55224-61145</b></dt>
+<dd><p>In this mode the VACUUM command can be used to rebuild the entire database file and thus reclaim unused disk space.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-43482-09713-62461-41415-00231-20987-55224-61145'>context</a>, <a href='matrix/matrix_dpragma.html#R-43482-09713-62461-41415-00231-20987-55224-61145'>detail</a>)</i></p></dd>
+
+<dt><b>R-43492-30972-07405-10322-20447-24571-17673-28262</b></dt>
+<dd><p>Similarly, index columns will not normally be used (for indexing purposes) if they are to the right of a column that is constrained only by inequalities.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-43492-30972-07405-10322-20447-24571-17673-28262'>context</a>, <a href='matrix/matrix_doptoverview.html#R-43492-30972-07405-10322-20447-24571-17673-28262'>detail</a>)</i></p></dd>
+
+<dt><b>R-43520-58856-06723-52893-53353-04776-19721-26256</b></dt>
+<dd><p>The MEMORY journaling mode stores the rollback journal in volatile RAM.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma25.test, matrix: <a href='matrix/pragma.html#R-43520-58856-06723-52893-53353-04776-19721-26256'>context</a>, <a href='matrix/matrix_dpragma.html#R-43520-58856-06723-52893-53353-04776-19721-26256'>detail</a>)</i></p></dd>
+
+<dt><b>R-43521-55927-08457-46227-28920-39349-41728-53227</b></dt>
+<dd><p>If the right-hand side is a parameter that is bound to a string, then this optimization is only attempted if the prepared statement containing the expression was compiled with sqlite3_prepare_v2() or sqlite3_prepare16_v2().
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-43521-55927-08457-46227-28920-39349-41728-53227'>context</a>, <a href='matrix/matrix_doptoverview.html#R-43521-55927-08457-46227-28920-39349-41728-53227'>detail</a>)</i></p></dd>
+
+<dt><b>R-43522-35548-12073-03111-59330-30466-17240-55087</b></dt>
+<dd><p>Casting a value to a type-name with no affinity causes the value to be converted into a BLOB.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-43522-35548-12073-03111-59330-30466-17240-55087'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-43522-35548-12073-03111-59330-30466-17240-55087'>detail</a>)</i></p></dd>
+
+<dt><b>R-43573-23448-48051-43416-34138-28993-49586-17736</b></dt>
+<dd><p>A SELECT statement enclosed in parentheses is a subquery.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-43573-23448-48051-43416-34138-28993-49586-17736'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-43573-23448-48051-43416-34138-28993-49586-17736'>detail</a>)</i></p></dd>
+
+<dt><b>R-43589-15127-43886-39082-32655-09009-64323-07852</b></dt>
+<dd><p>The sqlite3_mutex_free() routine deallocates a previously allocated dynamic mutex.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-43589-15127-43886-39082-32655-09009-64323-07852'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-43589-15127-43886-39082-32655-09009-64323-07852'>detail</a>)</i></p></dd>
+
+<dt><b>R-43609-64396-32492-00883-25685-46145-60531-30223</b></dt>
+<dd><p>The application wants to prevent other processes from accessing the database file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-43609-64396-32492-00883-25685-46145-60531-30223'>context</a>, <a href='matrix/matrix_dpragma.html#R-43609-64396-32492-00883-25685-46145-60531-30223'>detail</a>)</i></p></dd>
+
+<dt><b>R-43620-20913-52855-36210-21307-33610-27291-15644</b></dt>
+<dd><p>Only an effective call to sqlite3_shutdown() does any deinitialization. All other valid calls to sqlite3_shutdown() are harmless no-ops.
+<i>(source: <a href="c3ref/initialize.html">c3ref/initialize.html</a>, matrix: <a href='matrix/c3ref/initialize.html#R-43620-20913-52855-36210-21307-33610-27291-15644'>context</a>, <a href='matrix/matrix_dinitialize.html#R-43620-20913-52855-36210-21307-33610-27291-15644'>detail</a>)</i></p></dd>
+
+<dt><b>R-43634-32029-21276-39122-52064-20443-35317-63823</b></dt>
+<dd><p>The "utc" modifier is the opposite of "localtime". "utc" assumes that the time value to its left is in the local timezone and adjusts that time value to be in UTC.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-43634-32029-21276-39122-52064-20443-35317-63823'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-43634-32029-21276-39122-52064-20443-35317-63823'>detail</a>)</i></p></dd>
+
+<dt><b>R-43640-59273-60623-09093-33059-53394-31507-55495</b></dt>
+<dd><p>The julianday() function returns the Julian day - the fractional number of days since noon in Greenwich on November 24, 4714 B.C. (Proleptic Gregorian calendar).
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-43640-59273-60623-09093-33059-53394-31507-55495'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-43640-59273-60623-09093-33059-53394-31507-55495'>detail</a>)</i></p></dd>
+
+<dt><b>R-43641-06233-62582-50959-46555-19334-21762-55443</b></dt>
+<dd><p>Generated columns may not be used as part of the PRIMARY KEY.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-43641-06233-62582-50959-46555-19334-21762-55443'>context</a>, <a href='matrix/matrix_dgencol.html#R-43641-06233-62582-50959-46555-19334-21762-55443'>detail</a>)</i></p></dd>
+
+<dt><b>R-43642-56306-35814-07631-25075-47179-35702-00473</b></dt>
+<dd><p>By default, URI handling is globally disabled. The default value may be changed by compiling with the SQLITE_USE_URI symbol defined.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/global.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-43642-56306-35814-07631-25075-47179-35702-00473'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-43642-56306-35814-07631-25075-47179-35702-00473'>detail</a>)</i></p></dd>
+
+<dt><b>R-43646-40507-46737-61854-04250-53447-25357-32059</b></dt>
+<dd><p>The checksum is an unsigned 32-bit integer computed as follows: Initialize the checksum to the checksum nonce value found in the journal header at offset 12. Initialize index X to be N-200 (where N is the size of a database page in bytes. Interpret the byte at offset X into the page as an 8-bit unsigned integer and add the value of that integer to the checksum. Subtract 200 from X. If X is greater than or equal to zero, go back to step 3.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-43646-40507-46737-61854-04250-53447-25357-32059'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-43646-40507-46737-61854-04250-53447-25357-32059'>detail</a>)</i></p></dd>
+
+<dt><b>R-43689-60751-17173-17363-04961-34787-47888-07177</b></dt>
+<dd><p>SQLITE_DBSTATUS_CACHE_SPILL This parameter returns the number of dirty cache entries that have been written to disk in the middle of a transaction due to the page cache overflowing. Transactions are more efficient if they are written to disk all at once. When pages spill mid-transaction, that introduces additional overhead. This parameter can be used help identify inefficiencies that can be resolved by increasing the cache size. SQLITE_DBSTATUS_DEFERRED_FKS This parameter returns zero for the current value if and only if all foreign key constraints (deferred or immediate) have been resolved.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-43689-60751-17173-17363-04961-34787-47888-07177'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-43689-60751-17173-17363-04961-34787-47888-07177'>detail</a>)</i></p></dd>
+
+<dt><b>R-43693-30522-63226-58235-18305-62021-52549-18888</b></dt>
+<dd><p>If the expression is the alias of a table or subquery in the FROM clause followed by ".*" then all columns from the named table or subquery are substituted for the single expression.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-43693-30522-63226-58235-18305-62021-52549-18888'>context</a>, <a href='matrix/matrix_dlang_select.html#R-43693-30522-63226-58235-18305-62021-52549-18888'>detail</a>)</i></p></dd>
+
+<dt><b>R-43696-56835-52509-34515-30380-28351-43291-45019</b></dt>
+<dd><p>If a term of the form "6=b" appears in the index, it will never match anything.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-43696-56835-52509-34515-30380-28351-43291-45019'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-43696-56835-52509-34515-30380-28351-43291-45019'>detail</a>)</i></p></dd>
+
+<dt><b>R-43700-31930-54080-27091-31266-57199-30903-39458</b></dt>
+<dd><p>The sqlite_sequence table is created and initialized automatically whenever a normal table that contains an AUTOINCREMENT column is created.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-43700-31930-54080-27091-31266-57199-30903-39458'>context</a>, <a href='matrix/matrix_dautoinc.html#R-43700-31930-54080-27091-31266-57199-30903-39458'>detail</a>)</i></p></dd>
+
+<dt><b>R-43713-34954-61284-51343-43182-28146-52130-40042</b></dt>
+<dd><p>The xMutexEnd method defined by this structure is invoked as part of system shutdown by the sqlite3_shutdown() function.
+<i>(source: <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>, matrix: <a href='matrix/c3ref/mutex_methods.html#R-43713-34954-61284-51343-43182-28146-52130-40042'>context</a>, <a href='matrix/matrix_dmutex_methods.html#R-43713-34954-61284-51343-43182-28146-52130-40042'>detail</a>)</i></p></dd>
+
+<dt><b>R-43737-39999-60785-41458-46023-21259-00950-21702</b></dt>
+<dd><p>Every valid SQLite database file begins with the following 16 bytes (in hex): 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-43737-39999-60785-41458-46023-21259-00950-21702'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-43737-39999-60785-41458-46023-21259-00950-21702'>detail</a>)</i></p></dd>
+
+<dt><b>R-43753-41505-35386-09439-04210-20192-61863-65048</b></dt>
+<dd><p>For an index, the tbl_name is the name of the table that is indexed.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-43753-41505-35386-09439-04210-20192-61863-65048'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-43753-41505-35386-09439-04210-20192-61863-65048'>detail</a>)</i></p></dd>
+
+<dt><b>R-43754-40546-54172-00360-10157-15070-11211-43243</b></dt>
+<dd><p>The SQLITE_TRACE_PROFILE callback is invoked when the statement finishes.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-43754-40546-54172-00360-10157-15070-11211-43243'>context</a>, <a href='matrix/matrix_dc_trace.html#R-43754-40546-54172-00360-10157-15070-11211-43243'>detail</a>)</i></p></dd>
+
+<dt><b>R-43797-56749-02967-54481-29642-02482-32480-02233</b></dt>
+<dd><p>In NORMAL locking-mode (the default unless overridden at compile-time using SQLITE_DEFAULT_LOCKING_MODE), a database connection unlocks the database file at the conclusion of each read or write transaction.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-43797-56749-02967-54481-29642-02482-32480-02233'>context</a>, <a href='matrix/matrix_dpragma.html#R-43797-56749-02967-54481-29642-02482-32480-02233'>detail</a>)</i></p></dd>
+
+<dt><b>R-43820-61705-52813-55767-43715-42880-00775-50924</b></dt>
+<dd><p>The purpose of the unlikely(X) function is to provide a hint to the query planner that the argument X is a boolean value that is usually not true.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/where42.test, matrix: <a href='matrix/lang_corefunc.html#R-43820-61705-52813-55767-43715-42880-00775-50924'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-43820-61705-52813-55767-43715-42880-00775-50924'>detail</a>)</i></p></dd>
+
+<dt><b>R-43823-35025-00176-30164-46726-64409-48434-13396</b></dt>
+<dd><p>The schema cookie is a 4-byte big-endian integer at offset 40 that is incremented whenever the database schema changes.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-43823-35025-00176-30164-46726-64409-48434-13396'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-43823-35025-00176-30164-46726-64409-48434-13396'>detail</a>)</i></p></dd>
+
+<dt><b>R-43870-25292-29173-31012-48772-23978-21156-46728</b></dt>
+<dd><p>Content inserted into the column with a datatype other than ANY must be either a NULL (assuming there is no NOT NULL constraint on the column) or the type specified.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-43870-25292-29173-31012-48772-23978-21156-46728'>context</a>, <a href='matrix/matrix_dstricttables.html#R-43870-25292-29173-31012-48772-23978-21156-46728'>detail</a>)</i></p></dd>
+
+<dt><b>R-43879-08025-52526-08970-15750-21422-30684-37873</b></dt>
+<dd><p>Attaching a "REFERENCES <parent-table>" clause to a column definition creates a foreign key constraint that maps the column to the primary key of <parent-table>.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys09.test, matrix: <a href='matrix/foreignkeys.html#R-43879-08025-52526-08970-15750-21422-30684-37873'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-43879-08025-52526-08970-15750-21422-30684-37873'>detail</a>)</i></p></dd>
+
+<dt><b>R-43881-23456-20563-20957-51474-28716-20128-57454</b></dt>
+<dd><p>when sqlite3_reset() or sqlite3_finalize() is called for the SQL statement
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-43881-23456-20563-20957-51474-28716-20128-57454'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-43881-23456-20563-20957-51474-28716-20128-57454'>detail</a>)</i></p></dd>
+
+<dt><b>R-43895-16198-12902-10668-43383-15391-26544-03216</b></dt>
+<dd><p>When coercing a string value in the format of a hexadecimal integer into an integer value, the conversion process stops when the 'x' character is seen so the resulting integer value is always zero.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr01.test, matrix: <a href='matrix/lang_expr.html#R-43895-16198-12902-10668-43383-15391-26544-03216'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-43895-16198-12902-10668-43383-15391-26544-03216'>detail</a>)</i></p></dd>
+
+<dt><b>R-43996-29471-48886-45304-51416-12121-07825-19150</b></dt>
+<dd><p>SQLITE_LIMIT_COLUMN The maximum number of columns in a table definition or in the result set of a SELECT or the maximum number of columns in an index or in an ORDER BY or GROUP BY clause.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: tcl/sqllimits1.test, th3/req1/limit02.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-43996-29471-48886-45304-51416-12121-07825-19150'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-43996-29471-48886-45304-51416-12121-07825-19150'>detail</a>)</i></p></dd>
+
+<dt><b>R-44013-13102-10441-32146-65192-28233-37032-42173</b></dt>
+<dd><p>The mode parameter may be set to either "ro", "rw", "rwc", or "memory". Attempting to set it to any other value is an error
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-44013-13102-10441-32146-65192-28233-37032-42173'>context</a>, <a href='matrix/matrix_dopen.html#R-44013-13102-10441-32146-65192-28233-37032-42173'>detail</a>)</i></p></dd>
+
+<dt><b>R-44028-31666-03936-19748-14191-58058-00871-01668</b></dt>
+<dd><p>The P parameter can be a NULL pointer.
+<i>(source: <a href="c3ref/randomness.html">c3ref/randomness.html</a>, checked-by: th3/cov1/random01.test, matrix: <a href='matrix/c3ref/randomness.html#R-44028-31666-03936-19748-14191-58058-00871-01668'>context</a>, <a href='matrix/matrix_drandomness.html#R-44028-31666-03936-19748-14191-58058-00871-01668'>detail</a>)</i></p></dd>
+
+<dt><b>R-44050-47362-62664-60634-46008-39199-23714-03291</b></dt>
+<dd><p>If the SELECT statement is a non-aggregate query, then each expression in the result expression list is evaluated for each row in the dataset filtered by the WHERE clause.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-44050-47362-62664-60634-46008-39199-23714-03291'>context</a>, <a href='matrix/matrix_dlang_select.html#R-44050-47362-62664-60634-46008-39199-23714-03291'>detail</a>)</i></p></dd>
+
+<dt><b>R-44053-64068-31529-32657-44606-24557-47766-35713</b></dt>
+<dd><p>The subquery has a FROM clause.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-44053-64068-31529-32657-44606-24557-47766-35713'>context</a>, <a href='matrix/matrix_doptoverview.html#R-44053-64068-31529-32657-44606-24557-47766-35713'>detail</a>)</i></p></dd>
+
+<dt><b>R-44062-08550-47406-04162-18234-03785-06690-48010</b></dt>
+<dd><p>If a DELETE statement has a LIMIT clause, the maximum number of rows that will be deleted is found by evaluating the accompanying expression and casting it to an integer value.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-44062-08550-47406-04162-18234-03785-06690-48010'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-44062-08550-47406-04162-18234-03785-06690-48010'>detail</a>)</i></p></dd>
+
+<dt><b>R-44114-07168-48628-58571-39460-30302-43731-62236</b></dt>
+<dd><p>The first parameter is the database connection to which the SQL function is to be added.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc01.test, matrix: <a href='matrix/c3ref/create_function.html#R-44114-07168-48628-58571-39460-30302-43731-62236'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-44114-07168-48628-58571-39460-30302-43731-62236'>detail</a>)</i></p></dd>
+
+<dt><b>R-44118-24115-09333-12766-04940-32044-13276-33930</b></dt>
+<dd><p>Generated columns may not have a default value (they may not use the "DEFAULT" clause).
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-44118-24115-09333-12766-04940-32044-13276-33930'>context</a>, <a href='matrix/matrix_dgencol.html#R-44118-24115-09333-12766-04940-32044-13276-33930'>detail</a>)</i></p></dd>
+
+<dt><b>R-44130-32593-50612-23115-00910-25537-42820-39348</b></dt>
+<dd><p>If an ORDER BY expression is not an integer alias, then SQLite searches the left-most SELECT in the compound for a result column that matches either the second or third rules above. If a match is found, the search stops and the expression is handled as an alias for the result column that it has been matched against. Otherwise, the next SELECT to the right is tried, and so on.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-44130-32593-50612-23115-00910-25537-42820-39348'>context</a>, <a href='matrix/matrix_dlang_select.html#R-44130-32593-50612-23115-00910-25537-42820-39348'>detail</a>)</i></p></dd>
+
+<dt><b>R-44133-61651-41897-46315-46351-30200-24176-28474</b></dt>
+<dd><p>The value Y in likelihood(X,Y) must be a floating point constant between 0.0 and 1.0, inclusive.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/func3.test, matrix: <a href='matrix/lang_corefunc.html#R-44133-61651-41897-46315-46351-30200-24176-28474'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-44133-61651-41897-46315-46351-30200-24176-28474'>detail</a>)</i></p></dd>
+
+<dt><b>R-44155-30417-12865-55438-14349-49695-29873-16334</b></dt>
+<dd><p>This query would result in a full table scan.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-44155-30417-12865-55438-14349-49695-29873-16334'>context</a>, <a href='matrix/matrix_doptoverview.html#R-44155-30417-12865-55438-14349-49695-29873-16334'>detail</a>)</i></p></dd>
+
+<dt><b>R-44161-28345-50691-59749-28348-63101-44161-38481</b></dt>
+<dd><p>The names of these extra %_rowid columns are probably not the same as the actual auxiliary column names.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-44161-28345-50691-59749-28348-63101-44161-38481'>context</a>, <a href='matrix/matrix_drtree.html#R-44161-28345-50691-59749-28348-63101-44161-38481'>detail</a>)</i></p></dd>
+
+<dt><b>R-44163-39688-38219-15448-17659-56666-21013-19183</b></dt>
+<dd><p>The expression of a CHECK constraint may not contain a subquery.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: th3/cov1/resolve06.test, matrix: <a href='matrix/lang_createtable.html#R-44163-39688-38219-15448-17659-56666-21013-19183'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-44163-39688-38219-15448-17659-56666-21013-19183'>detail</a>)</i></p></dd>
+
+<dt><b>R-44190-32878-23725-35704-06982-10932-63377-41592</b></dt>
+<dd><p>The returned string is always in UTF-8 encoding even if the named parameter was originally specified as UTF-16 in sqlite3_prepare16(), sqlite3_prepare16_v2(), or sqlite3_prepare16_v3().
+<i>(source: <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>, checked-by: th3/req1/bind04.test, matrix: <a href='matrix/c3ref/bind_parameter_name.html#R-44190-32878-23725-35704-06982-10932-63377-41592'>context</a>, <a href='matrix/matrix_dbind_parameter_name.html#R-44190-32878-23725-35704-06982-10932-63377-41592'>detail</a>)</i></p></dd>
+
+<dt><b>R-44209-40260-17459-44675-20302-51345-49866-43242</b></dt>
+<dd><p>If and only if the previously described conversion of OR to an IN operator does not work, the second OR-clause optimization is attempted.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-44209-40260-17459-44675-20302-51345-49866-43242'>context</a>, <a href='matrix/matrix_doptoverview.html#R-44209-40260-17459-44675-20302-51345-49866-43242'>detail</a>)</i></p></dd>
+
+<dt><b>R-44223-43966-50481-12161-32962-54841-33868-44497</b></dt>
+<dd><p>If there are no non-NULL input rows then sum() returns NULL but total() returns 0.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-44223-43966-50481-12161-32962-54841-33868-44497'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-44223-43966-50481-12161-32962-54841-33868-44497'>detail</a>)</i></p></dd>
+
+<dt><b>R-44241-31306-56883-60998-04220-09447-33322-42012</b></dt>
+<dd><p>Any existing statements prepared using the legacy sqlite3_prepare() interface may fail with an SQLITE_SCHEMA error after the recursive_triggers setting is changed.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-44241-31306-56883-60998-04220-09447-33322-42012'>context</a>, <a href='matrix/matrix_dpragma.html#R-44241-31306-56883-60998-04220-09447-33322-42012'>detail</a>)</i></p></dd>
+
+<dt><b>R-44252-06035-10062-38462-00454-12973-27157-29991</b></dt>
+<dd><p>The subquery does not use LIMIT or the outer query is not a join.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-44252-06035-10062-38462-00454-12973-27157-29991'>context</a>, <a href='matrix/matrix_doptoverview.html#R-44252-06035-10062-38462-00454-12973-27157-29991'>detail</a>)</i></p></dd>
+
+<dt><b>R-44253-50720-20114-27313-10573-47729-39091-54779</b></dt>
+<dd><p>In the argments to "rtree" in the CREATE VIRTUAL TABLE statement, the names of the columns are taken from the first token of each argument. All subsequent tokens within each argument are silently ignored.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree17.test, matrix: <a href='matrix/rtree.html#R-44253-50720-20114-27313-10573-47729-39091-54779'>context</a>, <a href='matrix/matrix_drtree.html#R-44253-50720-20114-27313-10573-47729-39091-54779'>detail</a>)</i></p></dd>
+
+<dt><b>R-44261-39702-04875-31790-36524-45169-57836-16173</b></dt>
+<dd><p>Foreign key constraints are disabled by default (for backwards compatibility), so must be enabled separately for each database connection.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys04.test, matrix: <a href='matrix/foreignkeys.html#R-44261-39702-04875-31790-36524-45169-57836-16173'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-44261-39702-04875-31790-36524-45169-57836-16173'>detail</a>)</i></p></dd>
+
+<dt><b>R-44270-63173-43365-51432-46246-26535-62506-06270</b></dt>
+<dd><p>Both key and value may contain %HH escape sequences.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-44270-63173-43365-51432-46246-26535-62506-06270'>context</a>, <a href='matrix/matrix_duri.html#R-44270-63173-43365-51432-46246-26535-62506-06270'>detail</a>)</i></p></dd>
+
+<dt><b>R-44272-02265-45662-49730-44670-47137-63900-27537</b></dt>
+<dd><p>However, SQLite will nest the loops in a different order if doing so will help it to select better indexes.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-44272-02265-45662-49730-44670-47137-63900-27537'>context</a>, <a href='matrix/matrix_doptoverview.html#R-44272-02265-45662-49730-44670-47137-63900-27537'>detail</a>)</i></p></dd>
+
+<dt><b>R-44289-63209-61315-10942-18523-19279-36717-48244</b></dt>
+<dd><p>If the authority is omitted then the path is required.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-44289-63209-61315-10942-18523-19279-36717-48244'>context</a>, <a href='matrix/matrix_duri.html#R-44289-63209-61315-10942-18523-19279-36717-48244'>detail</a>)</i></p></dd>
+
+<dt><b>R-44294-52863-08300-09780-12014-19647-27880-25111</b></dt>
+<dd><p>The third parameter is the name of the database that was written to - either "main" or the name of an ATTACH-ed database.
+<i>(source: <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>, checked-by: tcl/e_walhook.test, matrix: <a href='matrix/c3ref/wal_hook.html#R-44294-52863-08300-09780-12014-19647-27880-25111'>context</a>, <a href='matrix/matrix_dwal_hook.html#R-44294-52863-08300-09780-12014-19647-27880-25111'>detail</a>)</i></p></dd>
+
+<dt><b>R-44295-13823-09058-27289-44091-57467-52153-35683</b></dt>
+<dd><p>A transaction savepoint (a non-nested savepoint that was opened while there was not currently an open transaction), on the other hand, is subject to the same restrictions as a COMMIT - attempting to RELEASE it while the database is in such a state will fail.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys15.test, matrix: <a href='matrix/foreignkeys.html#R-44295-13823-09058-27289-44091-57467-52153-35683'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-44295-13823-09058-27289-44091-57467-52153-35683'>detail</a>)</i></p></dd>
+
+<dt><b>R-44324-41166-42942-47705-27184-58566-20473-14339</b></dt>
+<dd><p>It is also an error to use a "*" or "alias.*" expression in a simple SELECT query that does not have a FROM clause.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-44324-41166-42942-47705-27184-58566-20473-14339'>context</a>, <a href='matrix/matrix_dlang_select.html#R-44324-41166-42942-47705-27184-58566-20473-14339'>detail</a>)</i></p></dd>
+
+<dt><b>R-44334-22485-53037-21261-43718-31016-47117-27643</b></dt>
+<dd><p>date(time-value, modifier, modifier, ...)
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-44334-22485-53037-21261-43718-31016-47117-27643'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-44334-22485-53037-21261-43718-31016-47117-27643'>detail</a>)</i></p></dd>
+
+<dt><b>R-44336-03155-46084-50304-15554-44543-05811-18658</b></dt>
+<dd><p>Note also that the journal_mode cannot be changed while a transaction is active.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma23.test, matrix: <a href='matrix/pragma.html#R-44336-03155-46084-50304-15554-44543-05811-18658'>context</a>, <a href='matrix/matrix_dpragma.html#R-44336-03155-46084-50304-15554-44543-05811-18658'>detail</a>)</i></p></dd>
+
+<dt><b>R-44355-00270-30749-42094-52510-11222-59749-40119</b></dt>
+<dd><p>The PRAGMA recursive_triggers setting does not affect the operation of foreign key actions.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys24.test, matrix: <a href='matrix/foreignkeys.html#R-44355-00270-30749-42094-52510-11222-59749-40119'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-44355-00270-30749-42094-52510-11222-59749-40119'>detail</a>)</i></p></dd>
+
+<dt><b>R-44364-00581-20291-58587-51533-44159-46989-51099</b></dt>
+<dd><p>For example: SELECT t1.a, t2.b FROM t2, (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5 Would be rewritten using query flattening as: SELECT t1.x+t1.y AS a, t2.b FROM t2, t1 WHERE z<100 AND a>5
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-44364-00581-20291-58587-51533-44159-46989-51099'>context</a>, <a href='matrix/matrix_doptoverview.html#R-44364-00581-20291-58587-51533-44159-46989-51099'>detail</a>)</i></p></dd>
+
+<dt><b>R-44381-11669-25586-00441-33187-20695-56764-33989</b></dt>
+<dd><p>the expression 'a'&nbsp;LIKE&nbsp;'A' is TRUE but '&aelig;'&nbsp;LIKE&nbsp;'&AElig;' is FALSE.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-44381-11669-25586-00441-33187-20695-56764-33989'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-44381-11669-25586-00441-33187-20695-56764-33989'>detail</a>)</i></p></dd>
+
+<dt><b>R-44382-28097-05870-38154-27344-49810-07099-20883</b></dt>
+<dd><p>The second through fifth forms of this pragma set the encoding that the main database will be created with if it is created by this session.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma16.test, matrix: <a href='matrix/pragma.html#R-44382-28097-05870-38154-27344-49810-07099-20883'>context</a>, <a href='matrix/matrix_dpragma.html#R-44382-28097-05870-38154-27344-49810-07099-20883'>detail</a>)</i></p></dd>
+
+<dt><b>R-44409-62641-17041-24104-11614-63008-35007-15423</b></dt>
+<dd><p>The || operator is "concatenate" - it joins together the two strings of its operands.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-44409-62641-17041-24104-11614-63008-35007-15423'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-44409-62641-17041-24104-11614-63008-35007-15423'>detail</a>)</i></p></dd>
+
+<dt><b>R-44414-54710-39878-46703-10464-52029-15490-53304</b></dt>
+<dd><p>There is a row in the cartesian product dataset formed by combining each unique combination of a row from the left-hand and right-hand datasets.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-44414-54710-39878-46703-10464-52029-15490-53304'>context</a>, <a href='matrix/matrix_dlang_select.html#R-44414-54710-39878-46703-10464-52029-15490-53304'>detail</a>)</i></p></dd>
+
+<dt><b>R-44424-47897-20192-49943-44571-25334-57312-32558</b></dt>
+<dd><p>If the integer at offset 52 is zero then the integer at offset 64 must also be zero.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-44424-47897-20192-49943-44571-25334-57312-32558'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-44424-47897-20192-49943-44571-25334-57312-32558'>detail</a>)</i></p></dd>
+
+<dt><b>R-44448-00687-59565-33416-30258-38835-37742-50898</b></dt>
+<dd><p>The pUser and xDelUser members of the sqlite3_rtree_geometry structure are initially set to NULL.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-44448-00687-59565-33416-30258-38835-37742-50898'>context</a>, <a href='matrix/matrix_drtree.html#R-44448-00687-59565-33416-30258-38835-37742-50898'>detail</a>)</i></p></dd>
+
+<dt><b>R-44462-37635-62099-13453-38487-62317-50080-33351</b></dt>
+<dd><p>SQLite will never invoke SQLITE_FCNTL_COMMIT_ATOMIC_WRITE without a prior successful call to SQLITE_FCNTL_BEGIN_ATOMIC_WRITE.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-44462-37635-62099-13453-38487-62317-50080-33351'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-44462-37635-62099-13453-38487-62317-50080-33351'>detail</a>)</i></p></dd>
+
+<dt><b>R-44487-57903-51219-53037-61864-06803-55060-36082</b></dt>
+<dd><p>The sqlite3_stmt_isexplain(S) interface returns 0 if S is an ordinary statement or a NULL pointer.
+<i>(source: <a href="c3ref/stmt_isexplain.html">c3ref/stmt_isexplain.html</a>, matrix: <a href='matrix/c3ref/stmt_isexplain.html#R-44487-57903-51219-53037-61864-06803-55060-36082'>context</a>, <a href='matrix/matrix_dstmt_isexplain.html#R-44487-57903-51219-53037-61864-06803-55060-36082'>detail</a>)</i></p></dd>
+
+<dt><b>R-44492-58344-41928-11727-58799-16717-41714-60827</b></dt>
+<dd><p>The purpose of the likely(X) function is to provide a hint to the query planner that the argument X is a boolean value that is usually true.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/where42.test, matrix: <a href='matrix/lang_corefunc.html#R-44492-58344-41928-11727-58799-16717-41714-60827'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-44492-58344-41928-11727-58799-16717-41714-60827'>detail</a>)</i></p></dd>
+
+<dt><b>R-44512-29500-51400-28317-41248-06688-48400-64915</b></dt>
+<dd><p>If sqlite3_backup_step() has not yet returned SQLITE_DONE, then any active write-transaction on the destination database is rolled back.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-44512-29500-51400-28317-41248-06688-48400-64915'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-44512-29500-51400-28317-41248-06688-48400-64915'>detail</a>)</i></p></dd>
+
+<dt><b>R-44557-40871-19236-56089-26171-47416-20797-60193</b></dt>
+<dd><p>If the most recent evaluation of statement S failed, then sqlite3_finalize(S) returns the appropriate error code or extended error code.
+<i>(source: <a href="c3ref/finalize.html">c3ref/finalize.html</a>, checked-by: th3/req1/finalize01.test, matrix: <a href='matrix/c3ref/finalize.html#R-44557-40871-19236-56089-26171-47416-20797-60193'>context</a>, <a href='matrix/matrix_dfinalize.html#R-44557-40871-19236-56089-26171-47416-20797-60193'>detail</a>)</i></p></dd>
+
+<dt><b>R-44582-60138-19271-50465-03257-36624-40089-31260</b></dt>
+<dd><p>SQLite may from time to time reorganize a b-tree page so that there are no freeblocks or fragment bytes, all unused bytes are contained in the unallocated space region, and all cells are packed tightly at the end of the page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-44582-60138-19271-50465-03257-36624-40089-31260'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-44582-60138-19271-50465-03257-36624-40089-31260'>detail</a>)</i></p></dd>
+
+<dt><b>R-44615-33286-13182-19247-40132-09732-39940-41262</b></dt>
+<dd><p>The special identifiers only refer to the row key if the CREATE TABLE statement does not define a real column with the same name.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_expr.html#R-44615-33286-13182-19247-40132-09732-39940-41262'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-44615-33286-13182-19247-40132-09732-39940-41262'>detail</a>)</i></p></dd>
+
+<dt><b>R-44617-07829-03757-45608-53499-18988-55260-02741</b></dt>
+<dd><p>The contents of the sqlite3_pcache_methods2 structure are copied to an internal buffer by SQLite within the call to sqlite3_config. Hence the application may discard the parameter after the call to sqlite3_config() returns.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-44617-07829-03757-45608-53499-18988-55260-02741'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-44617-07829-03757-45608-53499-18988-55260-02741'>detail</a>)</i></p></dd>
+
+<dt><b>R-44624-50921-54896-40195-40598-14115-12715-41655</b></dt>
+<dd><p>The PERSIST journaling mode prevents the rollback journal from being deleted at the end of each transaction. Instead, the header of the journal is overwritten with zeros.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma24.test, matrix: <a href='matrix/pragma.html#R-44624-50921-54896-40195-40598-14115-12715-41655'>context</a>, <a href='matrix/matrix_dpragma.html#R-44624-50921-54896-40195-40598-14115-12715-41655'>detail</a>)</i></p></dd>
+
+<dt><b>R-44638-50196-46982-43265-31220-24766-09972-56099</b></dt>
+<dd><p>However, some application may prefer a breadth-first search, which can be accomplished by setting rScore to mxLevel-iLevel.
+<i>(source: <a href="rtree.html">rtree.html</a>, matrix: <a href='matrix/rtree.html#R-44638-50196-46982-43265-31220-24766-09972-56099'>context</a>, <a href='matrix/matrix_drtree.html#R-44638-50196-46982-43265-31220-24766-09972-56099'>detail</a>)</i></p></dd>
+
+<dt><b>R-44699-55558-27782-01179-44434-54573-03026-09570</b></dt>
+<dd><p>The INDEXED BY clause does not give the optimizer hints about which index to use; it gives the optimizer a requirement of which index to use.
+<i>(source: <a href="lang_indexedby.html">lang_indexedby.html</a>, checked-by: tcl/indexedby.test, matrix: <a href='matrix/lang_indexedby.html#R-44699-55558-27782-01179-44434-54573-03026-09570'>context</a>, <a href='matrix/matrix_dlang_indexedby.html#R-44699-55558-27782-01179-44434-54573-03026-09570'>detail</a>)</i></p></dd>
+
+<dt><b>R-44699-57140-60647-60895-26603-26594-01750-63577</b></dt>
+<dd><p>This mode works the same way as SQLITE_CHECKPOINT_RESTART with the addition that it also truncates the log file to zero bytes just prior to a successful return.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: src/wal.c, tcl/e_walckpt.test, th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-44699-57140-60647-60895-26603-26594-01750-63577'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-44699-57140-60647-60895-26603-26594-01750-63577'>detail</a>)</i></p></dd>
+
+<dt><b>R-44709-33024-54980-17199-17128-51759-15220-29599</b></dt>
+<dd><p>The DROP COLUMN command removes the named column from the table, and rewrites its content to purge the data associated with that column.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/cov1/altertable25.test, matrix: <a href='matrix/lang_altertable.html#R-44709-33024-54980-17199-17128-51759-15220-29599'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-44709-33024-54980-17199-17128-51759-15220-29599'>detail</a>)</i></p></dd>
+
+<dt><b>R-44743-26048-26164-09256-55055-05174-57916-33189</b></dt>
+<dd><p>Generated columns may have NOT NULL, CHECK, and UNIQUE constraints, and foreign key constraints, just like ordinary columns.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-44743-26048-26164-09256-55055-05174-57916-33189'>context</a>, <a href='matrix/matrix_dgencol.html#R-44743-26048-26164-09256-55055-05174-57916-33189'>detail</a>)</i></p></dd>
+
+<dt><b>R-44809-60674-55337-11812-63258-27949-26446-49308</b></dt>
+<dd><p>SQLite will use the implementation that most closely matches the way in which the SQL function is used.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc04.test, matrix: <a href='matrix/c3ref/create_function.html#R-44809-60674-55337-11812-63258-27949-26446-49308'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-44809-60674-55337-11812-63258-27949-26446-49308'>detail</a>)</i></p></dd>
+
+<dt><b>R-44820-17227-57032-02316-25534-20387-01483-22879</b></dt>
+<dd><p>The third parameter to the preupdate callback is one of the constants SQLITE_INSERT, SQLITE_DELETE, or SQLITE_UPDATE to identify the kind of update operation that is about to occur.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-44820-17227-57032-02316-25534-20387-01483-22879'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-44820-17227-57032-02316-25534-20387-01483-22879'>detail</a>)</i></p></dd>
+
+<dt><b>R-44830-52899-50578-35713-22195-41858-55847-16818</b></dt>
+<dd><p>*ppStmt is left pointing to a compiled prepared statement that can be executed using sqlite3_step().
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare01.test, matrix: <a href='matrix/c3ref/prepare.html#R-44830-52899-50578-35713-22195-41858-55847-16818'>context</a>, <a href='matrix/matrix_dprepare.html#R-44830-52899-50578-35713-22195-41858-55847-16818'>detail</a>)</i></p></dd>
+
+<dt><b>R-44835-24883-49938-43446-56074-23376-41868-21974</b></dt>
+<dd><p>No reads or writes occur except within a transaction.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-44835-24883-49938-43446-56074-23376-41868-21974'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-44835-24883-49938-43446-56074-23376-41868-21974'>detail</a>)</i></p></dd>
+
+<dt><b>R-44885-25196-65175-63597-64540-27010-19745-60174</b></dt>
+<dd><p>Value is an 8-bit twos-complement integer.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-44885-25196-65175-63597-64540-27010-19745-60174'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-44885-25196-65175-63597-64540-27010-19745-60174'>detail</a>)</i></p></dd>
+
+<dt><b>R-44929-19675-50890-09843-10224-35620-29397-31048</b></dt>
+<dd><p>The database connection returned by sqlite3_db_handle is the same database connection that was the first argument to the sqlite3_prepare_v2() call (or its variants) that was used to create the statement in the first place.
+<i>(source: <a href="c3ref/db_handle.html">c3ref/db_handle.html</a>, checked-by: th3/req1/dbhandle01.test, matrix: <a href='matrix/c3ref/db_handle.html#R-44929-19675-50890-09843-10224-35620-29397-31048'>context</a>, <a href='matrix/matrix_ddb_handle.html#R-44929-19675-50890-09843-10224-35620-29397-31048'>detail</a>)</i></p></dd>
+
+<dt><b>R-44931-31853-26224-06306-44467-24966-10617-31779</b></dt>
+<dd><p>Universal Coordinated Time (UTC) is used.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-44931-31853-26224-06306-44467-24966-10617-31779'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-44931-31853-26224-06306-44467-24966-10617-31779'>detail</a>)</i></p></dd>
+
+<dt><b>R-44988-41064-02279-18587-19747-40125-16068-53673</b></dt>
+<dd><p>Rows are first sorted based on the results of evaluating the left-most expression in the ORDER BY list, then ties are broken by evaluating the second left-most expression and so on.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-44988-41064-02279-18587-19747-40125-16068-53673'>context</a>, <a href='matrix/matrix_dlang_select.html#R-44988-41064-02279-18587-19747-40125-16068-53673'>detail</a>)</i></p></dd>
+
+<dt><b>R-44990-49065-20422-08324-27654-16812-49799-14821</b></dt>
+<dd><p>SQLite invokes the xShrink() method when it wants the page cache to free up as much of heap memory as possible.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-44990-49065-20422-08324-27654-16812-49799-14821'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-44990-49065-20422-08324-27654-16812-49799-14821'>detail</a>)</i></p></dd>
+
+<dt><b>R-44991-05464-53731-06799-53286-51355-12803-56046</b></dt>
+<dd><p>NOT NULL constraints work the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/cov1/insert11.test, matrix: <a href='matrix/stricttables.html#R-44991-05464-53731-06799-53286-51355-12803-56046'>context</a>, <a href='matrix/matrix_dstricttables.html#R-44991-05464-53731-06799-53286-51355-12803-56046'>detail</a>)</i></p></dd>
+
+<dt><b>R-44992-52812-59111-17856-46428-55199-28475-08004</b></dt>
+<dd><p>SQLite prohibits applications from creating objects whose names begin with "sqlite_".
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-44992-52812-59111-17856-46428-55199-28475-08004'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-44992-52812-59111-17856-46428-55199-28475-08004'>detail</a>)</i></p></dd>
+
+<dt><b>R-45001-15102-62824-43089-64558-18158-53977-55532</b></dt>
+<dd><p>The first argument to these interfaces is a prepared statement.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-45001-15102-62824-43089-64558-18158-53977-55532'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-45001-15102-62824-43089-64558-18158-53977-55532'>detail</a>)</i></p></dd>
+
+<dt><b>R-45003-07395-31947-31592-21927-23597-32015-06745</b></dt>
+<dd><p>Autocommit mode is disabled by a BEGIN statement.
+<i>(source: <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>, matrix: <a href='matrix/c3ref/get_autocommit.html#R-45003-07395-31947-31592-21927-23597-32015-06745'>context</a>, <a href='matrix/matrix_dget_autocommit.html#R-45003-07395-31947-31592-21927-23597-32015-06745'>detail</a>)</i></p></dd>
+
+<dt><b>R-45034-43967-17911-30540-50129-42981-54712-01086</b></dt>
+<dd><p>The following are examples of non-deterministic functions: random() changes() last_insert_rowid() sqlite3_version()
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-45034-43967-17911-30540-50129-42981-54712-01086'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-45034-43967-17911-30540-50129-42981-54712-01086'>detail</a>)</i></p></dd>
+
+<dt><b>R-45051-55006-15108-02545-65455-20416-20562-25495</b></dt>
+<dd><p>The sqlite3_release_memory() interface attempts to free N bytes of heap memory by deallocating non-essential memory allocations held by the database library.
+<i>(source: <a href="c3ref/release_memory.html">c3ref/release_memory.html</a>, checked-by: th3/req1/releasemem01.test, matrix: <a href='matrix/c3ref/release_memory.html#R-45051-55006-15108-02545-65455-20416-20562-25495'>context</a>, <a href='matrix/matrix_drelease_memory.html#R-45051-55006-15108-02545-65455-20416-20562-25495'>detail</a>)</i></p></dd>
+
+<dt><b>R-45052-47506-16194-46831-63738-43272-24543-14451</b></dt>
+<dd><p>When sqlite3_prepare_v2() is used to prepare a statement, the statement might be re-prepared during sqlite3_step() due to a schema change.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, matrix: <a href='matrix/c3ref/set_authorizer.html#R-45052-47506-16194-46831-63738-43272-24543-14451'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-45052-47506-16194-46831-63738-43272-24543-14451'>detail</a>)</i></p></dd>
+
+<dt><b>R-45058-52483-53751-35980-24819-54487-13131-07028</b></dt>
+<dd><p>If the outer query is part of a compound select, then the subquery may not have a LIMIT clause.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-45058-52483-53751-35980-24819-54487-13131-07028'>context</a>, <a href='matrix/matrix_doptoverview.html#R-45058-52483-53751-35980-24819-54487-13131-07028'>detail</a>)</i></p></dd>
+
+<dt><b>R-45075-05696-46728-36342-39076-34346-28499-29393</b></dt>
+<dd><p>As an example of the result table format, suppose a query result is as follows: Name | Age ----------------------- Alice | 43 Bob | 28 Cindy | 21 There are two columns (M==2) and three rows (N==3). Thus the result table has 8 entries. Suppose the result table is stored in an array named azResult. Then azResult holds this content: azResult[0] = "Name"; azResult[1] = "Age"; azResult[2] = "Alice"; azResult[3] = "43"; azResult[4] = "Bob"; azResult[5] = "28"; azResult[6] = "Cindy"; azResult[7] = "21";
+<i>(source: <a href="c3ref/free_table.html">c3ref/free_table.html</a>, checked-by: th3/req1/gettable01.test, matrix: <a href='matrix/c3ref/free_table.html#R-45075-05696-46728-36342-39076-34346-28499-29393'>context</a>, <a href='matrix/matrix_dfree_table.html#R-45075-05696-46728-36342-39076-34346-28499-29393'>detail</a>)</i></p></dd>
+
+<dt><b>R-45087-11455-34010-58446-15384-63423-21176-52177</b></dt>
+<dd><p>when the corresponding function parameter changes
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-45087-11455-34010-58446-15384-63423-21176-52177'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-45087-11455-34010-58446-15384-63423-21176-52177'>detail</a>)</i></p></dd>
+
+<dt><b>R-45092-55768-62322-65360-04224-03075-32666-24560</b></dt>
+<dd><p>If two or more such blocked connections have specified the same callback function, then instead of invoking the callback function multiple times, it is invoked once with the set of void* context pointers specified by the blocked connections bundled together into an array.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-45092-55768-62322-65360-04224-03075-32666-24560'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-45092-55768-62322-65360-04224-03075-32666-24560'>detail</a>)</i></p></dd>
+
+<dt><b>R-45095-63572-26689-30740-64749-16083-48841-09127</b></dt>
+<dd><p>When an applicable constraint violation occurs, the FAIL resolution algorithm aborts the current SQL statement with an SQLITE_CONSTRAINT error.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict01.test, matrix: <a href='matrix/lang_conflict.html#R-45095-63572-26689-30740-64749-16083-48841-09127'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-45095-63572-26689-30740-64749-16083-48841-09127'>detail</a>)</i></p></dd>
+
+<dt><b>R-45099-02601-54724-45407-56685-24152-16852-27215</b></dt>
+<dd><p>Each subterm is analyzed as if it were itself the entire WHERE clause in order to see if the subterm is indexable by itself.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-45099-02601-54724-45407-56685-24152-16852-27215'>context</a>, <a href='matrix/matrix_doptoverview.html#R-45099-02601-54724-45407-56685-24152-16852-27215'>detail</a>)</i></p></dd>
+
+<dt><b>R-45106-55778-23498-47099-45026-10871-39267-61418</b></dt>
+<dd><p>The RELEASE of an inner transaction does not cause any changes to be written to the database file; it merely removes savepoints from the transaction stack such that it is no longer possible to ROLLBACK TO those savepoints.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-45106-55778-23498-47099-45026-10871-39267-61418'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-45106-55778-23498-47099-45026-10871-39267-61418'>detail</a>)</i></p></dd>
+
+<dt><b>R-45162-11578-30985-60631-31894-17735-12127-52197</b></dt>
+<dd><p>This mode is the same as calling the sqlite3_wal_checkpoint() C interface.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/checkpoint01.test, matrix: <a href='matrix/pragma.html#R-45162-11578-30985-60631-31894-17735-12127-52197'>context</a>, <a href='matrix/matrix_dpragma.html#R-45162-11578-30985-60631-31894-17735-12127-52197'>detail</a>)</i></p></dd>
+
+<dt><b>R-45164-23268-36240-53561-39664-08143-25092-01923</b></dt>
+<dd><p>However if the trigger actions reference other tables, the trigger is not dropped or modified if those other tables are dropped or modified.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-45164-23268-36240-53561-39664-08143-25092-01923'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-45164-23268-36240-53561-39664-08143-25092-01923'>detail</a>)</i></p></dd>
+
+<dt><b>R-45175-37688-08419-23660-35132-45148-11733-21680</b></dt>
+<dd><p>If a WHEN clause is supplied, the SQL statements specified are only executed if the WHEN clause is true.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-45175-37688-08419-23660-35132-45148-11733-21680'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-45175-37688-08419-23660-35132-45148-11733-21680'>detail</a>)</i></p></dd>
+
+<dt><b>R-45195-19773-08710-22098-44834-37724-61682-21963</b></dt>
+<dd><p>The extended result codes are disabled by default for historical compatibility.
+<i>(source: <a href="c3ref/extended_result_codes.html">c3ref/extended_result_codes.html</a>, checked-by: th3/cov1/main06.test, matrix: <a href='matrix/c3ref/extended_result_codes.html#R-45195-19773-08710-22098-44834-37724-61682-21963'>context</a>, <a href='matrix/matrix_dextended_result_codes.html#R-45195-19773-08710-22098-44834-37724-61682-21963'>detail</a>)</i></p></dd>
+
+<dt><b>R-45200-50363-59708-20315-54778-07324-53392-01839</b></dt>
+<dd><p>If the expression is not a column and has no COLLATE clause, then the BINARY collating sequence is used.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_10.test, matrix: <a href='matrix/datatype3.html#R-45200-50363-59708-20315-54778-07324-53392-01839'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-45200-50363-59708-20315-54778-07324-53392-01839'>detail</a>)</i></p></dd>
+
+<dt><b>R-45209-39960-61875-37751-41850-04754-65242-24219</b></dt>
+<dd><p>The SQLITE_FCNTL_VFS_POINTER opcode finds a pointer to the top-level VFSes currently in use.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-45209-39960-61875-37751-41850-04754-65242-24219'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-45209-39960-61875-37751-41850-04754-65242-24219'>detail</a>)</i></p></dd>
+
+<dt><b>R-45221-02523-04020-35318-02486-22619-25012-28682</b></dt>
+<dd><p>This error code is not remembered and will not be recalled by sqlite3_errcode() or sqlite3_errmsg().
+<i>(source: <a href="c3ref/file_control.html">c3ref/file_control.html</a>, matrix: <a href='matrix/c3ref/file_control.html#R-45221-02523-04020-35318-02486-22619-25012-28682'>context</a>, <a href='matrix/matrix_dfile_control.html#R-45221-02523-04020-35318-02486-22619-25012-28682'>detail</a>)</i></p></dd>
+
+<dt><b>R-45251-44035-31636-37177-08697-29378-39945-28652</b></dt>
+<dd><p>When database is omitted, the "main" database is queried.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma23.test, matrix: <a href='matrix/pragma.html#R-45251-44035-31636-37177-08697-29378-39945-28652'>context</a>, <a href='matrix/matrix_dpragma.html#R-45251-44035-31636-37177-08697-29378-39945-28652'>detail</a>)</i></p></dd>
+
+<dt><b>R-45256-35998-36415-19291-28291-06839-08654-39658</b></dt>
+<dd><p>The names of these shadow tables are: <name>_node <name>_rowid <name>_parent
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq02.test, matrix: <a href='matrix/rtree.html#R-45256-35998-36415-19291-28291-06839-08654-39658'>context</a>, <a href='matrix/matrix_drtree.html#R-45256-35998-36415-19291-28291-06839-08654-39658'>detail</a>)</i></p></dd>
+
+<dt><b>R-45262-28997-10763-36487-00906-22281-55952-21771</b></dt>
+<dd><p>SQLite will also add one of the following flags to the xOpen() call, depending on the object being opened: SQLITE_OPEN_MAIN_DB SQLITE_OPEN_MAIN_JOURNAL SQLITE_OPEN_TEMP_DB SQLITE_OPEN_TEMP_JOURNAL SQLITE_OPEN_TRANSIENT_DB SQLITE_OPEN_SUBJOURNAL SQLITE_OPEN_SUPER_JOURNAL SQLITE_OPEN_WAL
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-45262-28997-10763-36487-00906-22281-55952-21771'>context</a>, <a href='matrix/matrix_dvfs.html#R-45262-28997-10763-36487-00906-22281-55952-21771'>detail</a>)</i></p></dd>
+
+<dt><b>R-45318-21719-47167-32773-02041-53098-12990-64085</b></dt>
+<dd><p>If any xEntryPoint() returns an error, the sqlite3_open(), sqlite3_open16(), or sqlite3_open_v2() call that provoked the xEntryPoint() will fail.
+<i>(source: <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>, checked-by: th3/req1/autoext01.test, matrix: <a href='matrix/c3ref/auto_extension.html#R-45318-21719-47167-32773-02041-53098-12990-64085'>context</a>, <a href='matrix/matrix_dauto_extension.html#R-45318-21719-47167-32773-02041-53098-12990-64085'>detail</a>)</i></p></dd>
+
+<dt><b>R-45324-33155-04012-63035-54710-33706-56967-14745</b></dt>
+<dd><p>The sqlite3_result_value() interface sets the result of the application-defined function to be a copy of the unprotected sqlite3_value object specified by the 2nd parameter.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result03.test, matrix: <a href='matrix/c3ref/result_blob.html#R-45324-33155-04012-63035-54710-33706-56967-14745'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-45324-33155-04012-63035-54710-33706-56967-14745'>detail</a>)</i></p></dd>
+
+<dt><b>R-45363-38948-33312-55000-36938-65231-54003-14501</b></dt>
+<dd><p>If the sqlite_sequence.seq value for an AUTOINCREMENT table is manually set to something other than an integer and there is a subsequent attempt to insert the or update the AUTOINCREMENT table, then the behavior is undefined.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-45363-38948-33312-55000-36938-65231-54003-14501'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-45363-38948-33312-55000-36938-65231-54003-14501'>detail</a>)</i></p></dd>
+
+<dt><b>R-45387-42504-16923-07908-20467-28557-08879-46075</b></dt>
+<dd><p>A call to sqlite3_snapshot_open() will fail to open if the specified snapshot has been overwritten by a checkpoint.
+<i>(source: <a href="c3ref/snapshot_open.html">c3ref/snapshot_open.html</a>, matrix: <a href='matrix/c3ref/snapshot_open.html#R-45387-42504-16923-07908-20467-28557-08879-46075'>context</a>, <a href='matrix/matrix_dsnapshot_open.html#R-45387-42504-16923-07908-20467-28557-08879-46075'>detail</a>)</i></p></dd>
+
+<dt><b>R-45408-40694-64054-48639-23979-33510-40886-26968</b></dt>
+<dd><p>Changes written into a BLOB prior to the BLOB expiring are not rolled back by the expiration of the BLOB. Such changes will eventually commit if the transaction continues to completion.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-45408-40694-64054-48639-23979-33510-40886-26968'>context</a>, <a href='matrix/matrix_dblob_open.html#R-45408-40694-64054-48639-23979-33510-40886-26968'>detail</a>)</i></p></dd>
+
+<dt><b>R-45416-45177-17165-44236-63392-58604-16012-62044</b></dt>
+<dd><p>The effect of the RETURNING clause is to cause the statement to return one result row for each database row that is deleted, inserted, or updated.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-45416-45177-17165-44236-63392-58604-16012-62044'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-45416-45177-17165-44236-63392-58604-16012-62044'>detail</a>)</i></p></dd>
+
+<dt><b>R-45424-07352-14354-52803-50663-63365-62375-01898</b></dt>
+<dd><p>If there is only a single table or subquery in the FROM clause, then the input data used by the SELECT statement is the contents of the named table.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-45424-07352-14354-52803-50663-63365-62375-01898'>context</a>, <a href='matrix/matrix_dlang_select.html#R-45424-07352-14354-52803-50663-63365-62375-01898'>detail</a>)</i></p></dd>
+
+<dt><b>R-45424-59143-42887-56356-41413-49128-47927-21331</b></dt>
+<dd><p>Modifiers are applied from left to right; order is important.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-45424-59143-42887-56356-41413-49128-47927-21331'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-45424-59143-42887-56356-41413-49128-47927-21331'>detail</a>)</i></p></dd>
+
+<dt><b>R-45427-27134-18298-64328-24893-59331-19022-41786</b></dt>
+<dd><p>If the third parameter to sqlite3_bind_text() is not NULL, then it should be a pointer to well-formed UTF8 text.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, matrix: <a href='matrix/c3ref/bind_blob.html#R-45427-27134-18298-64328-24893-59331-19022-41786'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-45427-27134-18298-64328-24893-59331-19022-41786'>detail</a>)</i></p></dd>
+
+<dt><b>R-45428-55355-50147-62692-64807-19630-14135-59274</b></dt>
+<dd><p>In the example above, if column x has TEXT affinity then the comparison "x=5" will be done as text. The + operator removes the affinity. So the comparison "+x=5" will compare the text in column x with the numeric value 5 and will always be false.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-45428-55355-50147-62692-64807-19630-14135-59274'>context</a>, <a href='matrix/matrix_doptoverview.html#R-45428-55355-50147-62692-64807-19630-14135-59274'>detail</a>)</i></p></dd>
+
+<dt><b>R-45440-25633-60928-38627-51174-16128-58812-25800</b></dt>
+<dd><p>ORDER BY and LIMIT clauses may only occur at the end of the entire compound SELECT, and then only if the final element of the compound is not a VALUES clause.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-45440-25633-60928-38627-51174-16128-58812-25800'>context</a>, <a href='matrix/matrix_dlang_select.html#R-45440-25633-60928-38627-51174-16128-58812-25800'>detail</a>)</i></p></dd>
+
+<dt><b>R-45441-43537-47777-63556-12740-30003-58169-32879</b></dt>
+<dd><p>A single WAL can and usually does record multiple transactions.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-45441-43537-47777-63556-12740-30003-58169-32879'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-45441-43537-47777-63556-12740-30003-58169-32879'>detail</a>)</i></p></dd>
+
+<dt><b>R-45488-08504-64399-03603-60147-65359-06274-60393</b></dt>
+<dd><p>If the database schema contains foreign key errors that require looking at more than one table definition to identify, then those errors are not detected when the tables are created.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-45488-08504-64399-03603-60147-65359-06274-60393'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-45488-08504-64399-03603-60147-65359-06274-60393'>detail</a>)</i></p></dd>
+
+<dt><b>R-45493-35653-32389-26460-18465-38474-56599-09288</b></dt>
+<dd><p>A CHECK constraint may be attached to a column definition or specified as a table constraint. In practice it makes no difference.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-45493-35653-32389-26460-18465-38474-56599-09288'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-45493-35653-32389-26460-18465-38474-56599-09288'>detail</a>)</i></p></dd>
+
+<dt><b>R-45509-34933-24347-37380-13828-03412-57306-45781</b></dt>
+<dd><p>The CREATE, TABLE, VIEW, TRIGGER, and INDEX keywords at the beginning of the statement are converted to all upper case letters.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-45509-34933-24347-37380-13828-03412-57306-45781'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-45509-34933-24347-37380-13828-03412-57306-45781'>detail</a>)</i></p></dd>
+
+<dt><b>R-45540-25505-12705-13417-45651-45483-56013-24623</b></dt>
+<dd><p>To prevent older versions of SQLite (prior to version 3.7.0, 2010-07-22) from trying to recover a WAL-mode database (and making matters worse) the database file format version numbers (bytes 18 and 19 in the database header) are increased from 1 to 2 in WAL mode.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, matrix: <a href='matrix/wal.html#R-45540-25505-12705-13417-45651-45483-56013-24623'>context</a>, <a href='matrix/matrix_dwal.html#R-45540-25505-12705-13417-45651-45483-56013-24623'>detail</a>)</i></p></dd>
+
+<dt><b>R-45642-41863-02575-26055-57853-43447-11909-01929</b></dt>
+<dd><p>If the optional schema name is omitted, "main" is assumed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma01.test, matrix: <a href='matrix/pragma.html#R-45642-41863-02575-26055-57853-43447-11909-01929'>context</a>, <a href='matrix/matrix_dpragma.html#R-45642-41863-02575-26055-57853-43447-11909-01929'>detail</a>)</i></p></dd>
+
+<dt><b>R-45667-58607-22220-28108-32382-15512-20537-62688</b></dt>
+<dd><p>If it does, then SQLite requires every entry in the index to be unique.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-45667-58607-22220-28108-32382-15512-20537-62688'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-45667-58607-22220-28108-32382-15512-20537-62688'>detail</a>)</i></p></dd>
+
+<dt><b>R-45676-18204-05370-40567-50208-38360-04513-21756</b></dt>
+<dd><p>If the sqlite3_create_function() interface is used to override the glob(X,Y) function with an alternative implementation then the GLOB operator will invoke the alternative implementation.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-45676-18204-05370-40567-50208-38360-04513-21756'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-45676-18204-05370-40567-50208-38360-04513-21756'>detail</a>)</i></p></dd>
+
+<dt><b>R-45708-63005-00796-48255-23802-00758-53162-08820</b></dt>
+<dd><p>unixepoch(time-value, modifier, modifier, ...)
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-45708-63005-00796-48255-23802-00758-53162-08820'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-45708-63005-00796-48255-23802-00758-53162-08820'>detail</a>)</i></p></dd>
+
+<dt><b>R-45725-33143-49569-42045-56416-09972-18063-04229</b></dt>
+<dd><p>Note also that sqlite3_snprintf() returns a pointer to its buffer instead of the number of characters actually written into the buffer.
+<i>(source: <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>, checked-by: th3/req1/malloc01.test, matrix: <a href='matrix/c3ref/mprintf.html#R-45725-33143-49569-42045-56416-09972-18063-04229'>context</a>, <a href='matrix/matrix_dmprintf.html#R-45725-33143-49569-42045-56416-09972-18063-04229'>detail</a>)</i></p></dd>
+
+<dt><b>R-45728-08709-00373-57456-04392-57683-10379-45526</b></dt>
+<dd><p>There are four columns in each result row.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/fkey5.test, th3/cov1/fkey23.test, matrix: <a href='matrix/pragma.html#R-45728-08709-00373-57456-04392-57683-10379-45526'>context</a>, <a href='matrix/matrix_dpragma.html#R-45728-08709-00373-57456-04392-57683-10379-45526'>detail</a>)</i></p></dd>
+
+<dt><b>R-45735-05060-45707-02597-62787-16150-27278-23647</b></dt>
+<dd><p>The column may not have a PRIMARY KEY or UNIQUE constraint.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: th3/req1/altertable01.test, matrix: <a href='matrix/lang_altertable.html#R-45735-05060-45707-02597-62787-16150-27278-23647'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-45735-05060-45707-02597-62787-16150-27278-23647'>detail</a>)</i></p></dd>
+
+<dt><b>R-45744-19146-21008-38057-12826-38180-64084-01618</b></dt>
+<dd><p>The suppression of redundant columns in the key suffix of an index entry only occurs in WITHOUT ROWID tables.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat04.test, matrix: <a href='matrix/fileformat2.html#R-45744-19146-21008-38057-12826-38180-64084-01618'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-45744-19146-21008-38057-12826-38180-64084-01618'>detail</a>)</i></p></dd>
+
+<dt><b>R-45759-33459-43041-40737-28230-64845-22840-44318</b></dt>
+<dd><p>Example: To verify that an R*Tree named "demo_index" is well-formed and internally consistent, run: SELECT rtreecheck('demo_index');
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree25.test, matrix: <a href='matrix/rtree.html#R-45759-33459-43041-40737-28230-64845-22840-44318'>context</a>, <a href='matrix/matrix_drtree.html#R-45759-33459-43041-40737-28230-64845-22840-44318'>detail</a>)</i></p></dd>
+
+<dt><b>R-45764-31737-17057-32264-52283-10533-45215-02214</b></dt>
+<dd><p>The INTERSECT operator returns the intersection of the results of the left and right SELECTs.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-45764-31737-17057-32264-52283-10533-45215-02214'>context</a>, <a href='matrix/matrix_dlang_select.html#R-45764-31737-17057-32264-52283-10533-45215-02214'>detail</a>)</i></p></dd>
+
+<dt><b>R-45798-31769-08217-55662-19864-50738-55178-62419</b></dt>
+<dd><p>The exclusive lock is not released until either sqlite3_backup_finish() is called or the backup operation is complete and sqlite3_backup_step() returns SQLITE_DONE.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-45798-31769-08217-55662-19864-50738-55178-62419'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-45798-31769-08217-55662-19864-50738-55178-62419'>detail</a>)</i></p></dd>
+
+<dt><b>R-45820-61953-03602-28420-59065-19791-09856-58583</b></dt>
+<dd><p>A correlated subquery is reevaluated each time its result is required.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/select01.test, matrix: <a href='matrix/lang_expr.html#R-45820-61953-03602-28420-59065-19791-09856-58583'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-45820-61953-03602-28420-59065-19791-09856-58583'>detail</a>)</i></p></dd>
+
+<dt><b>R-45864-01884-48942-09518-31331-15179-06601-52827</b></dt>
+<dd><p>On success, sqlite3_blob_write() returns SQLITE_OK. Otherwise, an error code or an extended error code is returned.
+<i>(source: <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>, checked-by: tcl/e_blobwrite.test, matrix: <a href='matrix/c3ref/blob_write.html#R-45864-01884-48942-09518-31331-15179-06601-52827'>context</a>, <a href='matrix/matrix_dblob_write.html#R-45864-01884-48942-09518-31331-15179-06601-52827'>detail</a>)</i></p></dd>
+
+<dt><b>R-45870-62834-50679-52704-16239-12927-26811-24549</b></dt>
+<dd><p>Thus, bounding boxes might be slightly larger than specified, but will never be any smaller.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-45870-62834-50679-52704-16239-12927-26811-24549'>context</a>, <a href='matrix/matrix_drtree.html#R-45870-62834-50679-52704-16239-12927-26811-24549'>detail</a>)</i></p></dd>
+
+<dt><b>R-45878-07697-09901-50980-47387-13868-52582-57913</b></dt>
+<dd><p>If the REINDEX keyword is followed by a collation-sequence name, then all indices in all attached databases that use the named collation sequences are recreated.
+<i>(source: <a href="lang_reindex.html">lang_reindex.html</a>, checked-by: tcl/e_reindex.test, matrix: <a href='matrix/lang_reindex.html#R-45878-07697-09901-50980-47387-13868-52582-57913'>context</a>, <a href='matrix/matrix_dlang_reindex.html#R-45878-07697-09901-50980-47387-13868-52582-57913'>detail</a>)</i></p></dd>
+
+<dt><b>R-45880-07724-18025-09257-41536-03477-46499-61988</b></dt>
+<dd><p>Any valid query will work against an R*Tree index.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree01.test, matrix: <a href='matrix/rtree.html#R-45880-07724-18025-09257-41536-03477-46499-61988'>context</a>, <a href='matrix/matrix_drtree.html#R-45880-07724-18025-09257-41536-03477-46499-61988'>detail</a>)</i></p></dd>
+
+<dt><b>R-45882-09372-45562-22355-27454-39457-08272-55277</b></dt>
+<dd><p>SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA" have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA" respectively. In other words, the initial ":" or "$" or "@" or "?" is included as part of the name.
+<i>(source: <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>, checked-by: th3/req1/bind04.test, matrix: <a href='matrix/c3ref/bind_parameter_name.html#R-45882-09372-45562-22355-27454-39457-08272-55277'>context</a>, <a href='matrix/matrix_dbind_parameter_name.html#R-45882-09372-45562-22355-27454-39457-08272-55277'>detail</a>)</i></p></dd>
+
+<dt><b>R-45883-43943-57871-65431-07060-17806-58519-01354</b></dt>
+<dd><p>The second form changes the journaling mode for "database" or for all attached databases if "database" is omitted.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma23.test, matrix: <a href='matrix/pragma.html#R-45883-43943-57871-65431-07060-17806-58519-01354'>context</a>, <a href='matrix/matrix_dpragma.html#R-45883-43943-57871-65431-07060-17806-58519-01354'>detail</a>)</i></p></dd>
+
+<dt><b>R-45889-48790-57472-62779-24530-49470-03633-17983</b></dt>
+<dd><p>The database, table and column on which the blob handle is open remain the same.
+<i>(source: <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>, checked-by: th3/req1/blob01.test, matrix: <a href='matrix/c3ref/blob_reopen.html#R-45889-48790-57472-62779-24530-49470-03633-17983'>context</a>, <a href='matrix/matrix_dblob_reopen.html#R-45889-48790-57472-62779-24530-49470-03633-17983'>detail</a>)</i></p></dd>
+
+<dt><b>R-45910-50363-25944-16530-55356-15445-20890-14687</b></dt>
+<dd><p>The default setting can be overridden by each database connection using either the PRAGMA mmap_size command, or by using the SQLITE_FCNTL_MMAP_SIZE file control.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-45910-50363-25944-16530-55356-15445-20890-14687'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-45910-50363-25944-16530-55356-15445-20890-14687'>detail</a>)</i></p></dd>
+
+<dt><b>R-45933-31655-55413-62604-46715-25205-52668-25930</b></dt>
+<dd><p>Some constraints, such as SQLITE_INDEX_CONSTRAINT_ISNULL and SQLITE_INDEX_CONSTRAINT_ISNOTNULL, have no right-hand operand. For such constraints, sqlite3_vtab_rhs_value() always returns SQLITE_NOTFOUND.
+<i>(source: <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>, matrix: <a href='matrix/c3ref/vtab_rhs_value.html#R-45933-31655-55413-62604-46715-25205-52668-25930'>context</a>, <a href='matrix/matrix_dvtab_rhs_value.html#R-45933-31655-55413-62604-46715-25205-52668-25930'>detail</a>)</i></p></dd>
+
+<dt><b>R-45939-02717-13913-16916-47597-06370-47114-21935</b></dt>
+<dd><p>The randomblob(N) function return an N-byte blob containing pseudo-random bytes.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-45939-02717-13913-16916-47597-06370-47114-21935'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-45939-02717-13913-16916-47597-06370-47114-21935'>detail</a>)</i></p></dd>
+
+<dt><b>R-45951-08347-03834-18503-21973-51666-50988-55652</b></dt>
+<dd><p>if the declaration of a column with declared type "INTEGER" includes an "PRIMARY KEY DESC" clause, it does not become an alias for the rowid and is not classified as an integer primary key.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-45951-08347-03834-18503-21973-51666-50988-55652'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-45951-08347-03834-18503-21973-51666-50988-55652'>detail</a>)</i></p></dd>
+
+<dt><b>R-45970-35618-54800-59485-17030-46204-37187-33805</b></dt>
+<dd><p>Unlike this index_info pragma, this pragma returns information about every column in the index, not just the key columns.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15x.test, matrix: <a href='matrix/pragma.html#R-45970-35618-54800-59485-17030-46204-37187-33805'>context</a>, <a href='matrix/matrix_dpragma.html#R-45970-35618-54800-59485-17030-46204-37187-33805'>detail</a>)</i></p></dd>
+
+<dt><b>R-45981-25528-39449-05041-45662-56122-46761-09278</b></dt>
+<dd><p>The fragment component of a URI, if present, is ignored.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-45981-25528-39449-05041-45662-56122-46761-09278'>context</a>, <a href='matrix/matrix_dopen.html#R-45981-25528-39449-05041-45662-56122-46761-09278'>detail</a>)</i></p></dd>
+
+<dt><b>R-46053-13931-52012-22668-02470-26618-35785-45191</b></dt>
+<dd><p>The sqlite3_progress_handler(D,N,X,P) interface causes the callback function X to be invoked periodically during long running calls to sqlite3_exec(), sqlite3_step() and sqlite3_get_table() for database connection D.
+<i>(source: <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>, checked-by: th3/req1/progress01.test, matrix: <a href='matrix/c3ref/progress_handler.html#R-46053-13931-52012-22668-02470-26618-35785-45191'>context</a>, <a href='matrix/matrix_dprogress_handler.html#R-46053-13931-52012-22668-02470-26618-35785-45191'>detail</a>)</i></p></dd>
+
+<dt><b>R-46076-42323-06794-05495-00937-01913-04786-13791</b></dt>
+<dd><p>The sqlite_stat3.nEq column holds the approximate number of entries in the index whose left-most column exactly matches the sample.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-46076-42323-06794-05495-00937-01913-04786-13791'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-46076-42323-06794-05495-00937-01913-04786-13791'>detail</a>)</i></p></dd>
+
+<dt><b>R-46129-45598-36416-42008-62999-11143-15168-02813</b></dt>
+<dd><p>The rowid can be used anywhere a regular column can be used.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-46129-45598-36416-42008-62999-11143-15168-02813'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-46129-45598-36416-42008-62999-11143-15168-02813'>detail</a>)</i></p></dd>
+
+<dt><b>R-46130-13641-40955-08660-38234-32467-56742-20127</b></dt>
+<dd><p>However, since SQLite version 3.35.0, TEMP views are still allowed even if this option is off. So, in other words, this option now only disables views in the main database schema or in the schemas of ATTACH-ed databases.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: th3/cov1/view02.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-46130-13641-40955-08660-38234-32467-56742-20127'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-46130-13641-40955-08660-38234-32467-56742-20127'>detail</a>)</i></p></dd>
+
+<dt><b>R-46155-47219-10347-23082-03363-55795-00922-50884</b></dt>
+<dd><p>If the expression evaluates to a NULL value or any other value that cannot be losslessly converted to an integer, an error is returned.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-46155-47219-10347-23082-03363-55795-00922-50884'>context</a>, <a href='matrix/matrix_dlang_select.html#R-46155-47219-10347-23082-03363-55795-00922-50884'>detail</a>)</i></p></dd>
+
+<dt><b>R-46197-42811-45122-27334-03540-14095-05781-43695</b></dt>
+<dd><p>This means that the underlying VFS must support the "version 2" shared-memory.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, th3/req1/pragma05.test, matrix: <a href='matrix/wal.html#R-46197-42811-45122-27334-03540-14095-05781-43695'>context</a>, <a href='matrix/matrix_dwal.html#R-46197-42811-45122-27334-03540-14095-05781-43695'>detail</a>)</i></p></dd>
+
+<dt><b>R-46199-30249-53951-48405-44359-44625-30943-37142</b></dt>
+<dd><p>SQLite guarantees that the second argument to xRealloc is always a value returned by a prior call to xRoundup.
+<i>(source: <a href="c3ref/mem_methods.html">c3ref/mem_methods.html</a>, checked-by: src/malloc.c, src/mem1.c, src/mem2.c, src/mem5.c, matrix: <a href='matrix/c3ref/mem_methods.html#R-46199-30249-53951-48405-44359-44625-30943-37142'>context</a>, <a href='matrix/matrix_dmem_methods.html#R-46199-30249-53951-48405-44359-44625-30943-37142'>detail</a>)</i></p></dd>
+
+<dt><b>R-46219-16052-13457-14850-07693-45237-02962-07960</b></dt>
+<dd><p>sqlite> EXPLAIN QUERY PLAN SELECT a FROM t1 UNION SELECT c FROM t2; QUERY PLAN `--COMPOUND QUERY |--LEFT-MOST SUBQUERY | `--SCAN t1 USING COVERING INDEX i1 `--UNION USING TEMP B-TREE `--SCAN t2 USING COVERING INDEX i4
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-46219-16052-13457-14850-07693-45237-02962-07960'>context</a>, <a href='matrix/matrix_deqp.html#R-46219-16052-13457-14850-07693-45237-02962-07960'>detail</a>)</i></p></dd>
+
+<dt><b>R-46221-33909-22471-18212-13524-55885-62727-63389</b></dt>
+<dd><p>International character sets are case sensitive in SQLite unless an application-defined collating sequence and like() SQL function are provided that take non-ASCII characters into account.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, checked-by: th3/cov1/pragma02.test, matrix: <a href='matrix/optoverview.html#R-46221-33909-22471-18212-13524-55885-62727-63389'>context</a>, <a href='matrix/matrix_doptoverview.html#R-46221-33909-22471-18212-13524-55885-62727-63389'>detail</a>)</i></p></dd>
+
+<dt><b>R-46234-61323-27035-49381-04828-37598-41286-52895</b></dt>
+<dd><p>If the path does not begin with a '/' (meaning that the authority section is omitted from the URI) then the path is interpreted as a relative path.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-46234-61323-27035-49381-04828-37598-41286-52895'>context</a>, <a href='matrix/matrix_dopen.html#R-46234-61323-27035-49381-04828-37598-41286-52895'>detail</a>)</i></p></dd>
+
+<dt><b>R-46256-57243-24322-24814-28812-31567-52831-61261</b></dt>
+<dd><p>There is no difference between the "INNER JOIN", "JOIN" and "," join operators.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, tcl/e_select2.test, matrix: <a href='matrix/lang_select.html#R-46256-57243-24322-24814-28812-31567-52831-61261'>context</a>, <a href='matrix/matrix_dlang_select.html#R-46256-57243-24322-24814-28812-31567-52831-61261'>detail</a>)</i></p></dd>
+
+<dt><b>R-46291-03074-57887-12924-47057-50116-02665-17152</b></dt>
+<dd><p>There is only one autovacuum pages callback per database connection.
+<i>(source: <a href="c3ref/autovacuum_pages.html">c3ref/autovacuum_pages.html</a>, checked-by: th3/cov1/autovac01.test, matrix: <a href='matrix/c3ref/autovacuum_pages.html#R-46291-03074-57887-12924-47057-50116-02665-17152'>context</a>, <a href='matrix/matrix_dautovacuum_pages.html#R-46291-03074-57887-12924-47057-50116-02665-17152'>detail</a>)</i></p></dd>
+
+<dt><b>R-46291-22228-33337-03438-09062-41936-26465-59313</b></dt>
+<dd><p>The UPDATE, DELETE, and INSERT statements within triggers do not support the full syntax for UPDATE, DELETE, and INSERT statements.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-46291-22228-33337-03438-09062-41936-26465-59313'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-46291-22228-33337-03438-09062-41936-26465-59313'>detail</a>)</i></p></dd>
+
+<dt><b>R-46334-60999-49221-04702-27230-06175-42868-32331</b></dt>
+<dd><p>The file named by the INTO clause must not previously exist, or else it must be an empty file, or the VACUUM INTO command will fail with an error.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: th3/cov1/vacuum10.test, matrix: <a href='matrix/lang_vacuum.html#R-46334-60999-49221-04702-27230-06175-42868-32331'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-46334-60999-49221-04702-27230-06175-42868-32331'>detail</a>)</i></p></dd>
+
+<dt><b>R-46380-62105-49403-51977-53564-35485-34919-25717</b></dt>
+<dd><p>This interface allows the size of various constructs to be limited on a connection by connection basis. The first parameter is the database connection whose limit is to be set or queried. The second parameter is one of the limit categories that define a class of constructs to be size limited. The third parameter is the new limit for that construct.
+<i>(source: <a href="c3ref/limit.html">c3ref/limit.html</a>, checked-by: th3/req1/limit01.test, th3/req1/limit02.test, matrix: <a href='matrix/c3ref/limit.html#R-46380-62105-49403-51977-53564-35485-34919-25717'>context</a>, <a href='matrix/matrix_dlimit.html#R-46380-62105-49403-51977-53564-35485-34919-25717'>detail</a>)</i></p></dd>
+
+<dt><b>R-46397-09573-26570-19364-20067-27452-10393-00737</b></dt>
+<dd><p>The date() function returns the date as text in this format: YYYY-MM-DD.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-46397-09573-26570-19364-20067-27452-10393-00737'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-46397-09573-26570-19364-20067-27452-10393-00737'>detail</a>)</i></p></dd>
+
+<dt><b>R-46397-11150-35825-03689-51879-43855-50852-63161</b></dt>
+<dd><p>The second parameter is the column number.
+<i>(source: <a href="c3ref/column_name.html">c3ref/column_name.html</a>, matrix: <a href='matrix/c3ref/column_name.html#R-46397-11150-35825-03689-51879-43855-50852-63161'>context</a>, <a href='matrix/matrix_dcolumn_name.html#R-46397-11150-35825-03689-51879-43855-50852-63161'>detail</a>)</i></p></dd>
+
+<dt><b>R-46413-56591-19010-63234-29028-02870-41994-21141</b></dt>
+<dd><p>The checksum values are always stored in the frame header in a big-endian format regardless of which byte order is used to compute the checksum.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-46413-56591-19010-63234-29028-02870-41994-21141'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-46413-56591-19010-63234-29028-02870-41994-21141'>detail</a>)</i></p></dd>
+
+<dt><b>R-46421-32541-46392-23903-65246-33066-39018-41515</b></dt>
+<dd><p>Or, if X and Y are both BLOBs, then instr(X,Y) returns one more than the number bytes prior to the first occurrence of Y, or 0 if Y does not occur anywhere within X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/instr.test, matrix: <a href='matrix/lang_corefunc.html#R-46421-32541-46392-23903-65246-33066-39018-41515'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-46421-32541-46392-23903-65246-33066-39018-41515'>detail</a>)</i></p></dd>
+
+<dt><b>R-46455-06721-25633-38567-39133-09580-16982-03702</b></dt>
+<dd><p>A partial index definition may include the UNIQUE keyword.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-46455-06721-25633-38567-39133-09580-16982-03702'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-46455-06721-25633-38567-39133-09580-16982-03702'>detail</a>)</i></p></dd>
+
+<dt><b>R-46475-65007-45296-37609-03818-24981-55908-33234</b></dt>
+<dd><p>The expression "a BETWEEN b AND c" is treated as two separate binary comparisons "a >= b AND a <= c", even if that means different affinities are applied to 'a' in each of the comparisons.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-46475-65007-45296-37609-03818-24981-55908-33234'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-46475-65007-45296-37609-03818-24981-55908-33234'>detail</a>)</i></p></dd>
+
+<dt><b>R-46487-45214-33132-22408-46065-05189-04922-26668</b></dt>
+<dd><p>The memory-mapped file is in the same directory as the database and has the same name as the database with a "-shm" suffix appended.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-46487-45214-33132-22408-46065-05189-04922-26668'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-46487-45214-33132-22408-46065-05189-04922-26668'>detail</a>)</i></p></dd>
+
+<dt><b>R-46513-12418-39442-33008-36450-21417-18357-12067</b></dt>
+<dd><p>To delete an existing SQL function or aggregate, pass NULL pointers for all three function callbacks.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc03.test, matrix: <a href='matrix/c3ref/create_function.html#R-46513-12418-39442-33008-36450-21417-18357-12067'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-46513-12418-39442-33008-36450-21417-18357-12067'>detail</a>)</i></p></dd>
+
+<dt><b>R-46542-01490-05241-30409-15162-63986-32317-12249</b></dt>
+<dd><p>The SQLITE_FCNTL_WIN32_AV_RETRY opcode is used to configure automatic retry counts and intervals for certain disk I/O operations for the windows VFS in order to provide robustness in the presence of anti-virus programs.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-46542-01490-05241-30409-15162-63986-32317-12249'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-46542-01490-05241-30409-15162-63986-32317-12249'>detail</a>)</i></p></dd>
+
+<dt><b>R-46566-43213-59555-56161-21828-03379-13796-34244</b></dt>
+<dd><p>Beginning with SQLite version 3.24.0 (2018-06-04), r-tree tables can have auxiliary columns that store arbitrary data. Auxiliary columns can be used in place of secondary tables such as "demo_data".
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree18.test, matrix: <a href='matrix/rtree.html#R-46566-43213-59555-56161-21828-03379-13796-34244'>context</a>, <a href='matrix/matrix_drtree.html#R-46566-43213-59555-56161-21828-03379-13796-34244'>detail</a>)</i></p></dd>
+
+<dt><b>R-46605-62546-04930-07815-45981-57271-29937-28077</b></dt>
+<dd><p>The special "*" expression expands into a list of all non-hidden columns of the table being deleted, inserted, or updated.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-46605-62546-04930-07815-45981-57271-29937-28077'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-46605-62546-04930-07815-45981-57271-29937-28077'>detail</a>)</i></p></dd>
+
+<dt><b>R-46612-63606-63989-00465-43025-33740-12303-63068</b></dt>
+<dd><p>Note that min() is a simple function when it has 2 or more arguments but operates as an aggregate function if given only a single argument.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func05.test, matrix: <a href='matrix/lang_corefunc.html#R-46612-63606-63989-00465-43025-33740-12303-63068'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-46612-63606-63989-00465-43025-33740-12303-63068'>detail</a>)</i></p></dd>
+
+<dt><b>R-46616-26780-52699-16900-61811-04122-03606-62757</b></dt>
+<dd><p>When an error occurs, sqlite3_step() will return one of the detailed error codes or extended error codes.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare03.test, matrix: <a href='matrix/c3ref/prepare.html#R-46616-26780-52699-16900-61811-04122-03606-62757'>context</a>, <a href='matrix/matrix_dprepare.html#R-46616-26780-52699-16900-61811-04122-03606-62757'>detail</a>)</i></p></dd>
+
+<dt><b>R-46619-65417-10138-19214-14415-00475-28219-65444</b></dt>
+<dd><p>The first column is always a 64-bit signed integer primary key.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-46619-65417-10138-19214-14415-00475-28219-65444'>context</a>, <a href='matrix/matrix_drtree.html#R-46619-65417-10138-19214-14415-00475-28219-65444'>detail</a>)</i></p></dd>
+
+<dt><b>R-46643-08949-52505-46852-59994-03587-15582-21793</b></dt>
+<dd><p>Some parameters do not record the highest value. For those parameters nothing is written into *pHighwater and the resetFlag is ignored.
+<i>(source: <a href="c3ref/status.html">c3ref/status.html</a>, matrix: <a href='matrix/c3ref/status.html#R-46643-08949-52505-46852-59994-03587-15582-21793'>context</a>, <a href='matrix/matrix_dstatus.html#R-46643-08949-52505-46852-59994-03587-15582-21793'>detail</a>)</i></p></dd>
+
+<dt><b>R-46649-58537-03180-36291-48705-13434-30415-43306</b></dt>
+<dd><p>It is not possible to enable or disable foreign key constraints in the middle of a multi-statement transaction (when SQLite is not in autocommit mode). Attempting to do so does not return an error; it simply has no effect.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys06.test, matrix: <a href='matrix/foreignkeys.html#R-46649-58537-03180-36291-48705-13434-30415-43306'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-46649-58537-03180-36291-48705-13434-30415-43306'>detail</a>)</i></p></dd>
+
+<dt><b>R-46656-45156-45910-65271-53395-31310-28369-14407</b></dt>
+<dd><p>The sqlite3_version[] string constant contains the text of SQLITE_VERSION macro.
+<i>(source: <a href="c3ref/libversion.html">c3ref/libversion.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/libversion.html#R-46656-45156-45910-65271-53395-31310-28369-14407'>context</a>, <a href='matrix/matrix_dlibversion.html#R-46656-45156-45910-65271-53395-31310-28369-14407'>detail</a>)</i></p></dd>
+
+<dt><b>R-46672-40841-59774-15416-63280-30428-42891-05941</b></dt>
+<dd><p>When not in shared cache mode, it is possible to have the same database file attached multiple times using different names, and detaching one connection to a file will leave the others intact.
+<i>(source: <a href="lang_detach.html">lang_detach.html</a>, checked-by: th3/req1/attach01.test, matrix: <a href='matrix/lang_detach.html#R-46672-40841-59774-15416-63280-30428-42891-05941'>context</a>, <a href='matrix/matrix_dlang_detach.html#R-46672-40841-59774-15416-63280-30428-42891-05941'>detail</a>)</i></p></dd>
+
+<dt><b>R-46677-03283-38607-60635-61745-23618-46045-62138</b></dt>
+<dd><p>If no database name qualifier precedes the "locking_mode" keyword then the locking mode is applied to all databases, including any new databases added by subsequent ATTACH commands.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-46677-03283-38607-60635-61745-23618-46045-62138'>context</a>, <a href='matrix/matrix_dpragma.html#R-46677-03283-38607-60635-61745-23618-46045-62138'>detail</a>)</i></p></dd>
+
+<dt><b>R-46702-22190-08999-08775-06967-16190-65475-37101</b></dt>
+<dd><p>Databases created by the ATTACH command always use the same encoding as the main database.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma16.test, matrix: <a href='matrix/pragma.html#R-46702-22190-08999-08775-06967-16190-65475-37101'>context</a>, <a href='matrix/matrix_dpragma.html#R-46702-22190-08999-08775-06967-16190-65475-37101'>detail</a>)</i></p></dd>
+
+<dt><b>R-46709-29000-19476-32067-18840-61551-53618-60985</b></dt>
+<dd><p>Let M be ((U-12)*32/255)-23 and let K be M+((P-M)%(U-4)). If P is greater than X then the number of bytes stored on the index b-tree page is K if K is less than or equal to X or M otherwise.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-46709-29000-19476-32067-18840-61551-53618-60985'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-46709-29000-19476-32067-18840-61551-53618-60985'>detail</a>)</i></p></dd>
+
+<dt><b>R-46731-08965-36580-59849-15689-59530-23694-02071</b></dt>
+<dd><p>The column is indexed.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: tcl/alterdropcol2.test, th3/cov1/altertable25.test, matrix: <a href='matrix/lang_altertable.html#R-46731-08965-36580-59849-15689-59530-23694-02071'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-46731-08965-36580-59849-15689-59530-23694-02071'>detail</a>)</i></p></dd>
+
+<dt><b>R-46762-41357-02891-26535-53181-26230-38926-40574</b></dt>
+<dd><p>The schema-name is the name of an ATTACH-ed database or "main" or "temp" for the main and the TEMP databases.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma01.test, matrix: <a href='matrix/pragma.html#R-46762-41357-02891-26535-53181-26230-38926-40574'>context</a>, <a href='matrix/matrix_dpragma.html#R-46762-41357-02891-26535-53181-26230-38926-40574'>detail</a>)</i></p></dd>
+
+<dt><b>R-46765-43362-55332-05088-06369-35446-43155-35174</b></dt>
+<dd><p>For the purposes of determining duplicate rows for the results of compound SELECT operators, NULL values are considered equal to other NULL values and distinct from all non-NULL values.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-46765-43362-55332-05088-06369-35446-43155-35174'>context</a>, <a href='matrix/matrix_dlang_select.html#R-46765-43362-55332-05088-06369-35446-43155-35174'>detail</a>)</i></p></dd>
+
+<dt><b>R-46780-34130-42515-13535-26112-08732-08829-27411</b></dt>
+<dd><p>This is the number of virtual machine operations executed by the prepared statement if that number is less than or equal to 2147483647.
+<i>(source: <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a>, matrix: <a href='matrix/c3ref/c_stmtstatus_counter.html#R-46780-34130-42515-13535-26112-08732-08829-27411'>context</a>, <a href='matrix/matrix_dc_stmtstatus_counter.html#R-46780-34130-42515-13535-26112-08732-08829-27411'>detail</a>)</i></p></dd>
+
+<dt><b>R-46798-18657-50742-54084-49745-39581-20744-29339</b></dt>
+<dd><p>SQLITE_STATUS_PAGECACHE_OVERFLOW This parameter returns the number of bytes of page cache allocation which could not be satisfied by the SQLITE_CONFIG_PAGECACHE buffer and where forced to overflow to sqlite3_malloc(). The returned value includes allocations that overflowed because they where too large (they were larger than the "sz" parameter to SQLITE_CONFIG_PAGECACHE) and allocations that overflowed because no space was left in the page cache.
+<i>(source: <a href="c3ref/c_status_malloc_count.html">c3ref/c_status_malloc_count.html</a>, matrix: <a href='matrix/c3ref/c_status_malloc_count.html#R-46798-18657-50742-54084-49745-39581-20744-29339'>context</a>, <a href='matrix/matrix_dc_status_malloc_count.html#R-46798-18657-50742-54084-49745-39581-20744-29339'>detail</a>)</i></p></dd>
+
+<dt><b>R-46798-50301-48995-28285-56174-19296-23504-21814</b></dt>
+<dd><p>The sqlite3_context_db_handle() interface returns a copy of the pointer to the database connection (the 1st parameter) of the sqlite3_create_function() and sqlite3_create_function16() routines that originally registered the application defined function.
+<i>(source: <a href="c3ref/context_db_handle.html">c3ref/context_db_handle.html</a>, checked-by: src/vdbeapi.c, th3/req1/value01.test, matrix: <a href='matrix/c3ref/context_db_handle.html#R-46798-50301-48995-28285-56174-19296-23504-21814'>context</a>, <a href='matrix/matrix_dcontext_db_handle.html#R-46798-50301-48995-28285-56174-19296-23504-21814'>detail</a>)</i></p></dd>
+
+<dt><b>R-46863-28786-21721-60077-48835-05844-55823-37833</b></dt>
+<dd><p>The current value of the requested parameter is written into *pCur and the highest instantaneous value is written into *pHiwtr.
+<i>(source: <a href="c3ref/db_status.html">c3ref/db_status.html</a>, checked-by: th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/db_status.html#R-46863-28786-21721-60077-48835-05844-55823-37833'>context</a>, <a href='matrix/matrix_ddb_status.html#R-46863-28786-21721-60077-48835-05844-55823-37833'>detail</a>)</i></p></dd>
+
+<dt><b>R-46866-24036-53947-28237-58028-26702-04025-02337</b></dt>
+<dd><p>It may only store a 64-bit signed integer value.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-46866-24036-53947-28237-58028-26702-04025-02337'>context</a>, <a href='matrix/matrix_drtree.html#R-46866-24036-53947-28237-58028-26702-04025-02337'>detail</a>)</i></p></dd>
+
+<dt><b>R-46875-36446-38498-63657-23480-31614-51411-31350</b></dt>
+<dd><p>The sqlite3_strlike(P,X,E) interface returns zero if and only if string X matches the LIKE pattern P with escape character E.
+<i>(source: <a href="c3ref/strlike.html">c3ref/strlike.html</a>, matrix: <a href='matrix/c3ref/strlike.html#R-46875-36446-38498-63657-23480-31614-51411-31350'>context</a>, <a href='matrix/matrix_dstrlike.html#R-46875-36446-38498-63657-23480-31614-51411-31350'>detail</a>)</i></p></dd>
+
+<dt><b>R-46912-28798-53031-38709-36895-29366-07860-41608</b></dt>
+<dd><p>Any attempt to use AUTOINCREMENT on a WITHOUT ROWID table or on a column other than the INTEGER PRIMARY KEY column results in an error.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-46912-28798-53031-38709-36895-29366-07860-41608'>context</a>, <a href='matrix/matrix_dautoinc.html#R-46912-28798-53031-38709-36895-29366-07860-41608'>detail</a>)</i></p></dd>
+
+<dt><b>R-46931-43245-47331-55287-00929-39790-16947-25937</b></dt>
+<dd><p>DEFERRED means that the transaction does not actually start until the database is first accessed.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-46931-43245-47331-55287-00929-39790-16947-25937'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-46931-43245-47331-55287-00929-39790-16947-25937'>detail</a>)</i></p></dd>
+
+<dt><b>R-46934-63022-13283-12249-18112-11687-53025-24870</b></dt>
+<dd><p>If an INSERT occurs within a trigger then this routine will return the rowid of the inserted row as long as the trigger is running. Once the trigger program ends, the value returned by this routine reverts to what it was before the trigger was fired.
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-46934-63022-13283-12249-18112-11687-53025-24870'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-46934-63022-13283-12249-18112-11687-53025-24870'>detail</a>)</i></p></dd>
+
+<dt><b>R-46937-57672-41895-41327-41182-38354-24563-01052</b></dt>
+<dd><p>Objects of this type are created by sqlite3_blob_open() and destroyed by sqlite3_blob_close().
+<i>(source: <a href="c3ref/blob.html">c3ref/blob.html</a>, checked-by: th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob.html#R-46937-57672-41895-41327-41182-38354-24563-01052'>context</a>, <a href='matrix/matrix_dblob.html#R-46937-57672-41895-41327-41182-38354-24563-01052'>detail</a>)</i></p></dd>
+
+<dt><b>R-47011-48090-41554-54348-35857-62405-59159-33091</b></dt>
+<dd><p>If either or both of the conditions above are false, then SQLite uses the traditional one-at-a-time processing strategy for the IN constraint.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-47011-48090-41554-54348-35857-62405-59159-33091'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-47011-48090-41554-54348-35857-62405-59159-33091'>detail</a>)</i></p></dd>
+
+<dt><b>R-47025-34765-08212-39437-51775-13790-00552-20287</b></dt>
+<dd><p>PRAGMA writable_schema = boolean; PRAGMA writable_schema = RESET When this pragma is on, and the SQLITE_DBCONFIG_DEFENSIVE flag is off, then the sqlite_schema table can be changed using ordinary UPDATE, INSERT, and DELETE statements.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma30.test, matrix: <a href='matrix/pragma.html#R-47025-34765-08212-39437-51775-13790-00552-20287'>context</a>, <a href='matrix/matrix_dpragma.html#R-47025-34765-08212-39437-51775-13790-00552-20287'>detail</a>)</i></p></dd>
+
+<dt><b>R-47032-28289-44184-46595-09836-48485-53901-64968</b></dt>
+<dd><p>A database connection handle is usually returned in *ppDb, even if an error occurs. The only exception is that if SQLite is unable to allocate memory to hold the sqlite3 object, a NULL will be written into *ppDb instead of a pointer to the sqlite3 object.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-47032-28289-44184-46595-09836-48485-53901-64968'>context</a>, <a href='matrix/matrix_dopen.html#R-47032-28289-44184-46595-09836-48485-53901-64968'>detail</a>)</i></p></dd>
+
+<dt><b>R-47045-23194-06320-38835-32835-03422-03688-60752</b></dt>
+<dd><p>Input text that looks like floating point (there is a decimal point and/or an exponent) and the text describes a value that can be losslessly converted back and forth between IEEE 754 64-bit float and a 51-bit signed integer, then the result is INTEGER.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, th3/cov1/cast01.test, matrix: <a href='matrix/lang_expr.html#R-47045-23194-06320-38835-32835-03422-03688-60752'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-47045-23194-06320-38835-32835-03422-03688-60752'>detail</a>)</i></p></dd>
+
+<dt><b>R-47080-02069-19289-28177-02416-33406-46082-01364</b></dt>
+<dd><p>If an "ALTER TABLE ... RENAME TO" command is used to rename a table that is the parent table of one or more foreign key constraints, the definitions of the foreign key constraints are modified to refer to the parent table by its new name
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys21.test, matrix: <a href='matrix/foreignkeys.html#R-47080-02069-19289-28177-02416-33406-46082-01364'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-47080-02069-19289-28177-02416-33406-46082-01364'>detail</a>)</i></p></dd>
+
+<dt><b>R-47085-17460-48136-50298-50839-31630-41230-33764</b></dt>
+<dd><p>PRAGMA cell_size_check PRAGMA cell_size_check = boolean; The cell_size_check pragma enables or disables additional sanity checking on database b-tree pages as they are initially read from disk.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-47085-17460-48136-50298-50839-31630-41230-33764'>context</a>, <a href='matrix/matrix_dpragma.html#R-47085-17460-48136-50298-50839-31630-41230-33764'>detail</a>)</i></p></dd>
+
+<dt><b>R-47106-26961-22018-10007-09993-39383-21640-46039</b></dt>
+<dd><p>The sqlite3_backup object may be used with the sqlite3_backup_step() and sqlite3_backup_finish() functions to perform the specified backup operation.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup02.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-47106-26961-22018-10007-09993-39383-21640-46039'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-47106-26961-22018-10007-09993-39383-21640-46039'>detail</a>)</i></p></dd>
+
+<dt><b>R-47112-45289-11795-12854-05038-48584-59127-00440</b></dt>
+<dd><p>Cautious programmers might include assert() statements in their application to verify that values returned by these interfaces match the macros in the header, and thus ensure that the application is compiled with matching library and header files. assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER ); assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 ); assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
+<i>(source: <a href="c3ref/libversion.html">c3ref/libversion.html</a>, checked-by: th3/th3main.c, matrix: <a href='matrix/c3ref/libversion.html#R-47112-45289-11795-12854-05038-48584-59127-00440'>context</a>, <a href='matrix/matrix_dlibversion.html#R-47112-45289-11795-12854-05038-48584-59127-00440'>detail</a>)</i></p></dd>
+
+<dt><b>R-47129-02844-42227-35202-45348-02049-58295-05636</b></dt>
+<dd><p>The sqlite3_value returned is a protected sqlite3_value object even if the input is not.
+<i>(source: <a href="c3ref/value_dup.html">c3ref/value_dup.html</a>, matrix: <a href='matrix/c3ref/value_dup.html#R-47129-02844-42227-35202-45348-02049-58295-05636'>context</a>, <a href='matrix/matrix_dvalue_dup.html#R-47129-02844-42227-35202-45348-02049-58295-05636'>detail</a>)</i></p></dd>
+
+<dt><b>R-47136-25746-15640-41932-06678-43823-40123-27757</b></dt>
+<dd><p>This method can be used, for example, to add whitespace indentation.
+<i>(source: <a href="c3ref/str_append.html">c3ref/str_append.html</a>, matrix: <a href='matrix/c3ref/str_append.html#R-47136-25746-15640-41932-06678-43823-40123-27757'>context</a>, <a href='matrix/matrix_dstr_append.html#R-47136-25746-15640-41932-06678-43823-40123-27757'>detail</a>)</i></p></dd>
+
+<dt><b>R-47175-52442-38801-17858-62181-59243-23138-32376</b></dt>
+<dd><p>Invoking this pragma with an argument is equivalent to calling the sqlite3_wal_checkpoint_v2() C interface with a 3rd parameter corresponding to the argument:
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/checkpoint01.test, matrix: <a href='matrix/pragma.html#R-47175-52442-38801-17858-62181-59243-23138-32376'>context</a>, <a href='matrix/matrix_dpragma.html#R-47175-52442-38801-17858-62181-59243-23138-32376'>detail</a>)</i></p></dd>
+
+<dt><b>R-47188-50799-37892-57634-15721-61381-60158-50947</b></dt>
+<dd><p>The phrase "VALUES(expr-list-1),...,(expr-list-N)" means the same thing as "SELECT expr-list-1 UNION ALL ... UNION ALL SELECT expr-list-N".
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: th3/cov1/select30.test, th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-47188-50799-37892-57634-15721-61381-60158-50947'>context</a>, <a href='matrix/matrix_dlang_select.html#R-47188-50799-37892-57634-15721-61381-60158-50947'>detail</a>)</i></p></dd>
+
+<dt><b>R-47208-15314-60187-26132-59357-10692-55881-38588</b></dt>
+<dd><p>And the automatically generated ROWIDs are guaranteed to be monotonically increasing.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-47208-15314-60187-26132-59357-10692-55881-38588'>context</a>, <a href='matrix/matrix_dautoinc.html#R-47208-15314-60187-26132-59357-10692-55881-38588'>detail</a>)</i></p></dd>
+
+<dt><b>R-47220-36599-18549-01728-06678-05877-60935-22906</b></dt>
+<dd><p>The sqlite3_result_pointer(C,P,T,D) interface sets the result to an SQL NULL value, just like sqlite3_result_null(C), except that it also associates the host-language pointer P or type T with that NULL value such that the pointer can be retrieved within an application-defined SQL function using sqlite3_value_pointer().
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/cov1/bindptr01.test, th3/cov1/carray01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-47220-36599-18549-01728-06678-05877-60935-22906'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-47220-36599-18549-01728-06678-05877-60935-22906'>detail</a>)</i></p></dd>
+
+<dt><b>R-47220-63683-02784-26430-33183-60835-28174-15820</b></dt>
+<dd><p>The sqlite3_last_insert_rowid() function does not work for WITHOUT ROWID tables.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/lastinsert.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-47220-63683-02784-26430-33183-60835-28174-15820'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-47220-63683-02784-26430-33183-60835-28174-15820'>detail</a>)</i></p></dd>
+
+<dt><b>R-47224-48532-62948-64824-54403-32645-39277-62522</b></dt>
+<dd><p>When an applicable constraint violation occurs, the ABORT resolution algorithm aborts the current SQL statement with an SQLITE_CONSTRAINT error and backs out any changes made by the current SQL statement; but changes caused by prior SQL statements within the same transaction are preserved and the transaction remains active.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict01.test, matrix: <a href='matrix/lang_conflict.html#R-47224-48532-62948-64824-54403-32645-39277-62522'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-47224-48532-62948-64824-54403-32645-39277-62522'>detail</a>)</i></p></dd>
+
+<dt><b>R-47237-20641-51298-30597-19533-32249-45130-16580</b></dt>
+<dd><p>The parameter N is the approximate number of virtual machine instructions that are evaluated between successive invocations of the callback X.
+<i>(source: <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>, checked-by: th3/req1/progress01.test, matrix: <a href='matrix/c3ref/progress_handler.html#R-47237-20641-51298-30597-19533-32249-45130-16580'>context</a>, <a href='matrix/matrix_dprogress_handler.html#R-47237-20641-51298-30597-19533-32249-45130-16580'>detail</a>)</i></p></dd>
+
+<dt><b>R-47257-47871-22083-44604-28744-21660-36470-17217</b></dt>
+<dd><p>Smaller scores are processed first.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc3.test, matrix: <a href='matrix/rtree.html#R-47257-47871-22083-44604-28744-21660-36470-17217'>context</a>, <a href='matrix/matrix_drtree.html#R-47257-47871-22083-44604-28744-21660-36470-17217'>detail</a>)</i></p></dd>
+
+<dt><b>R-47276-58266-57990-47507-55397-12547-44122-03404</b></dt>
+<dd><p>Like SQLITE_CHECKPOINT_FULL, this mode blocks new database writer attempts while it is pending, but does not impede readers.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-47276-58266-57990-47507-55397-12547-44122-03404'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-47276-58266-57990-47507-55397-12547-44122-03404'>detail</a>)</i></p></dd>
+
+<dt><b>R-47301-17448-04122-36354-45464-07871-26388-12045</b></dt>
+<dd><p>String variables that contain text formatted like hexadecimal integers are not interpreted as hexadecimal integers when coercing the string value into an integer due to a CAST expression or for a column affinity transformation or prior to performing a numeric operation or for any other run-time conversions.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr01.test, matrix: <a href='matrix/lang_expr.html#R-47301-17448-04122-36354-45464-07871-26388-12045'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-47301-17448-04122-36354-45464-07871-26388-12045'>detail</a>)</i></p></dd>
+
+<dt><b>R-47326-42054-43655-41302-10309-18227-37352-51087</b></dt>
+<dd><p>No entry point will be called more than once for each database connection that is opened.
+<i>(source: <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>, checked-by: th3/req1/autoext01.test, matrix: <a href='matrix/c3ref/auto_extension.html#R-47326-42054-43655-41302-10309-18227-37352-51087'>context</a>, <a href='matrix/matrix_dauto_extension.html#R-47326-42054-43655-41302-10309-18227-37352-51087'>detail</a>)</i></p></dd>
+
+<dt><b>R-47349-36088-56332-49361-27773-46509-28359-10620</b></dt>
+<dd><p>The ifnull() function is equivalent to coalesce() with two arguments.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-47349-36088-56332-49361-27773-46509-28359-10620'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-47349-36088-56332-49361-27773-46509-28359-10620'>detail</a>)</i></p></dd>
+
+<dt><b>R-47355-18032-54463-52994-47328-64569-52603-29032</b></dt>
+<dd><p>The column is identified by the second, third and fourth parameters to this function.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-47355-18032-54463-52994-47328-64569-52603-29032'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-47355-18032-54463-52994-47328-64569-52603-29032'>detail</a>)</i></p></dd>
+
+<dt><b>R-47358-05964-44521-01667-50829-29935-00197-29054</b></dt>
+<dd><p>The sqlite3_data_count(P) routine returns 0 if the previous call to sqlite3_step(P) returned SQLITE_DONE.
+<i>(source: <a href="c3ref/data_count.html">c3ref/data_count.html</a>, matrix: <a href='matrix/c3ref/data_count.html#R-47358-05964-44521-01667-50829-29935-00197-29054'>context</a>, <a href='matrix/matrix_ddata_count.html#R-47358-05964-44521-01667-50829-29935-00197-29054'>detail</a>)</i></p></dd>
+
+<dt><b>R-47362-07898-57690-63362-38950-19612-46458-01308</b></dt>
+<dd><p>If the REINDEX keyword is not followed by a collation-sequence or database object identifier, then all indices in all attached databases are rebuilt.
+<i>(source: <a href="lang_reindex.html">lang_reindex.html</a>, checked-by: tcl/e_reindex.test, matrix: <a href='matrix/lang_reindex.html#R-47362-07898-57690-63362-38950-19612-46458-01308'>context</a>, <a href='matrix/matrix_dlang_reindex.html#R-47362-07898-57690-63362-38950-19612-46458-01308'>detail</a>)</i></p></dd>
+
+<dt><b>R-47366-13741-55802-55490-13630-64665-63412-14686</b></dt>
+<dd><p>If the option is unknown or SQLite is unable to set the option then this routine returns a non-zero error code.
+<i>(source: <a href="c3ref/config.html">c3ref/config.html</a>, matrix: <a href='matrix/c3ref/config.html#R-47366-13741-55802-55490-13630-64665-63412-14686'>context</a>, <a href='matrix/matrix_dconfig.html#R-47366-13741-55802-55490-13630-64665-63412-14686'>detail</a>)</i></p></dd>
+
+<dt><b>R-47371-54529-47056-05139-21545-30146-30084-29428</b></dt>
+<dd><p>Unlike regular SQLite tables which can store data in a variety of datatypes and formats, the R*Tree rigidly enforce these storage types.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-47371-54529-47056-05139-21545-30146-30084-29428'>context</a>, <a href='matrix/matrix_drtree.html#R-47371-54529-47056-05139-21545-30146-30084-29428'>detail</a>)</i></p></dd>
+
+<dt><b>R-47374-62206-25437-62669-05844-08921-64095-55884</b></dt>
+<dd><p>The "cid" column should not be taken to mean more than "rank within the current result set".
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-47374-62206-25437-62669-05844-08921-64095-55884'>context</a>, <a href='matrix/matrix_dpragma.html#R-47374-62206-25437-62669-05844-08921-64095-55884'>detail</a>)</i></p></dd>
+
+<dt><b>R-47394-08393-08013-46591-44142-56491-27088-03038</b></dt>
+<dd><p>The like() function is used to implement the "Y LIKE X [ESCAPE Z]" expression.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-47394-08393-08013-46591-44142-56491-27088-03038'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-47394-08393-08013-46591-44142-56491-27088-03038'>detail</a>)</i></p></dd>
+
+<dt><b>R-47421-29468-64946-07771-42048-44217-36224-10277</b></dt>
+<dd><p>If none of the arguments to min() define a collating function, then the BINARY collating function is used.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-47421-29468-64946-07771-42048-44217-36224-10277'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-47421-29468-64946-07771-42048-44217-36224-10277'>detail</a>)</i></p></dd>
+
+<dt><b>R-47436-38935-17734-42324-42347-43578-49292-42564</b></dt>
+<dd><p>The header of the rollback journal can be overwritten with invalid header text (for example, all zeros).
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-47436-38935-17734-42324-42347-43578-49292-42564'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-47436-38935-17734-42324-42347-43578-49292-42564'>detail</a>)</i></p></dd>
+
+<dt><b>R-47446-42933-31518-33219-37380-53181-26111-02925</b></dt>
+<dd><p>At most one preupdate hook may be registered at a time on a single database connection; each call to sqlite3_preupdate_hook() overrides the previous setting.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-47446-42933-31518-33219-37380-53181-26111-02925'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-47446-42933-31518-33219-37380-53181-26111-02925'>detail</a>)</i></p></dd>
+
+<dt><b>R-47505-58569-20472-23148-40328-48365-60870-06508</b></dt>
+<dd><p>The "PRAGMA data_version" value is unchanged for commits made on the same database connection.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma3.test, th3/cov1/pragma26.test, matrix: <a href='matrix/pragma.html#R-47505-58569-20472-23148-40328-48365-60870-06508'>context</a>, <a href='matrix/matrix_dpragma.html#R-47505-58569-20472-23148-40328-48365-60870-06508'>detail</a>)</i></p></dd>
+
+<dt><b>R-47512-27714-00574-29870-48560-40440-32292-60340</b></dt>
+<dd><p>An individual database connection D can reduce its maximum parameter number below the compile-time maximum using the sqlite3_limit(D, SQLITE_LIMIT_VARIABLE_NUMBER,...) interface.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/lang_expr.html#R-47512-27714-00574-29870-48560-40440-32292-60340'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-47512-27714-00574-29870-48560-40440-32292-60340'>detail</a>)</i></p></dd>
+
+<dt><b>R-47543-32145-59149-48631-62108-17148-32947-37500</b></dt>
+<dd><p>Or, if none of the WHEN expressions evaluate to a value equal to the base expression, the result of evaluating the ELSE expression, if any.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-47543-32145-59149-48631-62108-17148-32947-37500'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-47543-32145-59149-48631-62108-17148-32947-37500'>detail</a>)</i></p></dd>
+
+<dt><b>R-47563-44180-26995-52116-57167-46758-14753-28295</b></dt>
+<dd><p>An SQLITE_TRACE_PROFILE callback provides approximately the same information as is provided by the sqlite3_profile() callback.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-47563-44180-26995-52116-57167-46758-14753-28295'>context</a>, <a href='matrix/matrix_dc_trace.html#R-47563-44180-26995-52116-57167-46758-14753-28295'>detail</a>)</i></p></dd>
+
+<dt><b>R-47608-56469-23173-27343-55331-44027-52555-65470</b></dt>
+<dd><p>Any other value for the b-tree page type is an error.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-47608-56469-23173-27343-55331-44027-52555-65470'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-47608-56469-23173-27343-55331-44027-52555-65470'>detail</a>)</i></p></dd>
+
+<dt><b>R-47612-45842-47349-09557-45633-42955-42013-27541</b></dt>
+<dd><p>When casting a TEXT value to INTEGER, the longest possible prefix of the value that can be interpreted as an integer number is extracted from the TEXT value and the remainder ignored.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, th3/cov1/cast01.test, matrix: <a href='matrix/lang_expr.html#R-47612-45842-47349-09557-45633-42955-42013-27541'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-47612-45842-47349-09557-45633-42955-42013-27541'>detail</a>)</i></p></dd>
+
+<dt><b>R-47617-35714-52231-13731-24138-59751-09512-27387</b></dt>
+<dd><p>=&nbsp;&nbsp;==&nbsp;&nbsp;<>&nbsp;&nbsp;!=&nbsp;&nbsp;IS&nbsp;&nbsp;&nbsp;IS&nbsp;NOT IS&nbsp;DISTINCT&nbsp;FROM&nbsp;&nbsp;&nbsp;IS&nbsp;NOT&nbsp;DISTINCT&nbsp;FROM &lsqb;expr&rsqb;&nbsp;BETWEEN5&nbsp;&lsqb;expr&rsqb;&nbsp;AND&nbsp;&lsqb;expr&rsqb;&ensp; IN5&nbsp;&nbsp;MATCH5&nbsp;&nbsp;LIKE5&nbsp;&nbsp;REGEXP5&nbsp;&nbsp;GLOB5 &lsqb;expr&rsqb;&nbsp;ISNULL&nbsp;&nbsp;&lsqb;expr&rsqb;&nbsp;NOTNULL&nbsp;&nbsp;&nbsp;&lsqb;expr&rsqb;&nbsp;NOT&nbsp;NULL
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-47617-35714-52231-13731-24138-59751-09512-27387'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-47617-35714-52231-13731-24138-59751-09512-27387'>detail</a>)</i></p></dd>
+
+<dt><b>R-47666-36489-24359-20436-03208-18550-24058-22275</b></dt>
+<dd><p>To perform a backup operation: sqlite3_backup_init() is called once to initialize the backup, sqlite3_backup_step() is called one or more times to transfer the data between the two databases, and finally sqlite3_backup_finish() is called to release all resources associated with the backup operation.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup01.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-47666-36489-24359-20436-03208-18550-24058-22275'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-47666-36489-24359-20436-03208-18550-24058-22275'>detail</a>)</i></p></dd>
+
+<dt><b>R-47674-04435-43323-49671-63294-37647-53866-33040</b></dt>
+<dd><p>When a database is in WAL mode, all connections to that database must use the WAL.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-47674-04435-43323-49671-63294-37647-53866-33040'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-47674-04435-43323-49671-63294-37647-53866-33040'>detail</a>)</i></p></dd>
+
+<dt><b>R-47688-12400-24635-20697-59785-15322-38040-02905</b></dt>
+<dd><p>schema: the schema in which the table or view appears (for example "main" or "temp").
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-47688-12400-24635-20697-59785-15322-38040-02905'>context</a>, <a href='matrix/matrix_dpragma.html#R-47688-12400-24635-20697-59785-15322-38040-02905'>detail</a>)</i></p></dd>
+
+<dt><b>R-47688-18802-24758-22650-17797-24943-61288-58043</b></dt>
+<dd><p>The query string is divided into key/value pairs.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-47688-18802-24758-22650-17797-24943-61288-58043'>context</a>, <a href='matrix/matrix_duri.html#R-47688-18802-24758-22650-17797-24943-61288-58043'>detail</a>)</i></p></dd>
+
+<dt><b>R-47709-27231-29719-54015-39691-57688-49858-37109</b></dt>
+<dd><p>The usual rules apply for selecting a collation sequence to compare text values.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-47709-27231-29719-54015-39691-57688-49858-37109'>context</a>, <a href='matrix/matrix_dlang_select.html#R-47709-27231-29719-54015-39691-57688-49858-37109'>detail</a>)</i></p></dd>
+
+<dt><b>R-47730-38043-27274-49738-18176-22421-00022-64697</b></dt>
+<dd><p>Recognized integer codes are of the form SQLITE_STATUS_....
+<i>(source: <a href="c3ref/status.html">c3ref/status.html</a>, matrix: <a href='matrix/c3ref/status.html#R-47730-38043-27274-49738-18176-22421-00022-64697'>context</a>, <a href='matrix/matrix_dstatus.html#R-47730-38043-27274-49738-18176-22421-00022-64697'>detail</a>)</i></p></dd>
+
+<dt><b>R-47754-42489-63490-59015-30535-62379-17829-51875</b></dt>
+<dd><p>If the main database has not already been created, then the value returned is the text encoding that will be used to create the main database, if it is created by this session.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma16.test, matrix: <a href='matrix/pragma.html#R-47754-42489-63490-59015-30535-62379-17829-51875'>context</a>, <a href='matrix/matrix_dpragma.html#R-47754-42489-63490-59015-30535-62379-17829-51875'>detail</a>)</i></p></dd>
+
+<dt><b>R-47754-63122-64688-34803-40832-37059-61979-20469</b></dt>
+<dd><p>If the busy callback is not NULL, then the callback might be invoked with two arguments.
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-47754-63122-64688-34803-40832-37059-61979-20469'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-47754-63122-64688-34803-40832-37059-61979-20469'>detail</a>)</i></p></dd>
+
+<dt><b>R-47794-27716-03685-35899-02913-62361-61931-61907</b></dt>
+<dd><p>The right-most column that is used can employ inequalities.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-47794-27716-03685-35899-02913-62361-61931-61907'>context</a>, <a href='matrix/matrix_doptoverview.html#R-47794-27716-03685-35899-02913-62361-61931-61907'>detail</a>)</i></p></dd>
+
+<dt><b>R-47797-00608-28127-11239-56525-38314-51541-61059</b></dt>
+<dd><p>Executing any other type of SQL statement does not modify the value returned by these functions.
+<i>(source: <a href="c3ref/changes.html">c3ref/changes.html</a>, matrix: <a href='matrix/c3ref/changes.html#R-47797-00608-28127-11239-56525-38314-51541-61059'>context</a>, <a href='matrix/matrix_dchanges.html#R-47797-00608-28127-11239-56525-38314-51541-61059'>detail</a>)</i></p></dd>
+
+<dt><b>R-47838-03249-08993-49658-07257-31799-38437-20814</b></dt>
+<dd><p>The column is named in a table or column CHECK constraint not associated with the column being dropped.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: tcl/alterdropcol2.test, th3/cov1/altertable25.test, matrix: <a href='matrix/lang_altertable.html#R-47838-03249-08993-49658-07257-31799-38437-20814'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-47838-03249-08993-49658-07257-31799-38437-20814'>detail</a>)</i></p></dd>
+
+<dt><b>R-47864-57952-52818-65192-57929-18923-19319-26072</b></dt>
+<dd><p>The 's' character at the end of the modifier names is optional.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-47864-57952-52818-65192-57929-18923-19319-26072'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-47864-57952-52818-65192-57929-18923-19319-26072'>detail</a>)</i></p></dd>
+
+<dt><b>R-47870-49110-06101-43911-08439-20961-63107-08637</b></dt>
+<dd><p>The parent and sub-query may contain WHERE clauses.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-47870-49110-06101-43911-08439-20961-63107-08637'>context</a>, <a href='matrix/matrix_doptoverview.html#R-47870-49110-06101-43911-08439-20961-63107-08637'>detail</a>)</i></p></dd>
+
+<dt><b>R-47871-25994-62051-30257-22396-55190-62622-00222</b></dt>
+<dd><p>The second argument is the size of each lookaside buffer slot.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: src/main.c, th3/req1/dbconfig01.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-47871-25994-62051-30257-22396-55190-62622-00222'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-47871-25994-62051-30257-22396-55190-62622-00222'>detail</a>)</i></p></dd>
+
+<dt><b>R-47901-33947-04080-30794-42855-09326-15418-05201</b></dt>
+<dd><p>With one exception noted below, if a rowid table has a primary key that consists of a single column and the declared type of that column is "INTEGER" in any mixture of upper and lower case, then the column becomes an alias for the rowid.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-47901-33947-04080-30794-42855-09326-15418-05201'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-47901-33947-04080-30794-42855-09326-15418-05201'>detail</a>)</i></p></dd>
+
+<dt><b>R-47913-44653-19019-51800-53744-51346-51796-57702</b></dt>
+<dd><p>For example, the max() function with a single argument is an aggregate and the max() function with two or more arguments is a simple function.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/func05.test, matrix: <a href='matrix/lang_expr.html#R-47913-44653-19019-51800-53744-51346-51796-57702'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-47913-44653-19019-51800-53744-51346-51796-57702'>detail</a>)</i></p></dd>
+
+<dt><b>R-47936-10044-12721-09990-49763-27309-53307-48514</b></dt>
+<dd><p>Or, more generally: SELECT rowid FROM <child-table> WHERE <child-key> = :parent_key_value
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys10.test, matrix: <a href='matrix/foreignkeys.html#R-47936-10044-12721-09990-49763-27309-53307-48514'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-47936-10044-12721-09990-49763-27309-53307-48514'>detail</a>)</i></p></dd>
+
+<dt><b>R-47952-62498-54054-51429-18050-07399-51898-49231</b></dt>
+<dd><p>It is not possible to use the "ALTER TABLE ... ADD COLUMN" syntax to add a column that includes a REFERENCES clause, unless the default value of the new column is NULL. Attempting to do so returns an error.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys21.test, matrix: <a href='matrix/foreignkeys.html#R-47952-62498-54054-51429-18050-07399-51898-49231'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-47952-62498-54054-51429-18050-07399-51898-49231'>detail</a>)</i></p></dd>
+
+<dt><b>R-47973-48020-37967-63330-01173-43664-55232-05863</b></dt>
+<dd><p>you cannot say "INNER OUTER JOIN", because that would be contradictory.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/join.test, tcl/vtab6.test, matrix: <a href='matrix/lang_select.html#R-47973-48020-37967-63330-01173-43664-55232-05863'>context</a>, <a href='matrix/matrix_dlang_select.html#R-47973-48020-37967-63330-01173-43664-55232-05863'>detail</a>)</i></p></dd>
+
+<dt><b>R-47993-15116-21733-48888-04976-39029-50790-47089</b></dt>
+<dd><p>For any given P,N pair, the return value from sqlite3_vtab_in(P,N,F) will always be the same within the same xBestIndex call.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-47993-15116-21733-48888-04976-39029-50790-47089'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-47993-15116-21733-48888-04976-39029-50790-47089'>detail</a>)</i></p></dd>
+
+<dt><b>R-48019-29352-09930-00922-22494-19242-19926-63915</b></dt>
+<dd><p>Strings are surrounded by single-quotes with escapes on interior quotes as needed.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-48019-29352-09930-00922-22494-19242-19926-63915'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-48019-29352-09930-00922-22494-19242-19926-63915'>detail</a>)</i></p></dd>
+
+<dt><b>R-48044-29703-58801-20879-03319-43155-48187-62436</b></dt>
+<dd><p>Any triggers attached to the table are dropped from the database schema before the implicit DELETE FROM is executed, so this cannot cause any triggers to fire.
+<i>(source: <a href="lang_droptable.html">lang_droptable.html</a>, checked-by: th3/req1/droptable01.test, matrix: <a href='matrix/lang_droptable.html#R-48044-29703-58801-20879-03319-43155-48187-62436'>context</a>, <a href='matrix/matrix_dlang_droptable.html#R-48044-29703-58801-20879-03319-43155-48187-62436'>detail</a>)</i></p></dd>
+
+<dt><b>R-48107-00250-26810-18282-01790-21926-12239-51218</b></dt>
+<dd><p>The busy-handler is also invoked while waiting for database readers as described above.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-48107-00250-26810-18282-01790-21926-12239-51218'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-48107-00250-26810-18282-01790-21926-12239-51218'>detail</a>)</i></p></dd>
+
+<dt><b>R-48118-34840-54112-17431-20305-06499-24777-65466</b></dt>
+<dd><p>To convert the results of an SQL expression to a boolean value, SQLite first casts the result to a NUMERIC value in the same way as a CAST expression. A numeric zero value (integer value 0 or real value 0.0) is considered to be false. A NULL value is still NULL. All other values are considered true.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr03.test, matrix: <a href='matrix/lang_expr.html#R-48118-34840-54112-17431-20305-06499-24777-65466'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-48118-34840-54112-17431-20305-06499-24777-65466'>detail</a>)</i></p></dd>
+
+<dt><b>R-48124-63225-09560-63618-32598-12840-01456-15525</b></dt>
+<dd><p>A single foreign key constraint may have different actions configured for ON DELETE and ON UPDATE.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/pragma02.test, matrix: <a href='matrix/foreignkeys.html#R-48124-63225-09560-63618-32598-12840-01456-15525'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-48124-63225-09560-63618-32598-12840-01456-15525'>detail</a>)</i></p></dd>
+
+<dt><b>R-48126-27717-31293-47858-22865-09722-12158-06374</b></dt>
+<dd><p>The content of the statistics tables can be queried using SELECT and can be changed using the DELETE, INSERT, and UPDATE commands.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-48126-27717-31293-47858-22865-09722-12158-06374'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-48126-27717-31293-47858-22865-09722-12158-06374'>detail</a>)</i></p></dd>
+
+<dt><b>R-48141-52334-41562-00713-04774-04609-31111-39049</b></dt>
+<dd><p>If the DELETE statement has an ORDER BY clause, then all rows that would be deleted in the absence of the LIMIT clause are sorted according to the ORDER BY. The first M rows, where M is the value found by evaluating the OFFSET clause expression, are skipped, and the following N, where N is the value of the LIMIT expression, are deleted.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-48141-52334-41562-00713-04774-04609-31111-39049'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-48141-52334-41562-00713-04774-04609-31111-39049'>detail</a>)</i></p></dd>
+
+<dt><b>R-48191-50425-24568-05066-49812-07872-47674-23180</b></dt>
+<dd><p>A rollback journal is only considered to be valid if it exists and contains a valid header.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-48191-50425-24568-05066-49812-07872-47674-23180'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-48191-50425-24568-05066-49812-07872-47674-23180'>detail</a>)</i></p></dd>
+
+<dt><b>R-48198-01058-04098-49437-45599-59984-16743-57318</b></dt>
+<dd><p>Format 11, the string 'now', is converted into the current date and time as obtained from the xCurrentTime method of the sqlite3_vfs object in use.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-48198-01058-04098-49437-45599-59984-16743-57318'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-48198-01058-04098-49437-45599-59984-16743-57318'>detail</a>)</i></p></dd>
+
+<dt><b>R-48204-18881-64880-60099-58359-33874-53073-00752</b></dt>
+<dd><p>Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values: TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS"). REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar. INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-48204-18881-64880-60099-58359-33874-53073-00752'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-48204-18881-64880-60099-58359-33874-53073-00752'>detail</a>)</i></p></dd>
+
+<dt><b>R-48205-43578-08481-37323-43342-53439-37471-23722</b></dt>
+<dd><p>The default suggested cache size can be altered using the SQLITE_DEFAULT_CACHE_SIZE compile-time options.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/sqliteLimit.h, matrix: <a href='matrix/pragma.html#R-48205-43578-08481-37323-43342-53439-37471-23722'>context</a>, <a href='matrix/matrix_dpragma.html#R-48205-43578-08481-37323-43342-53439-37471-23722'>detail</a>)</i></p></dd>
+
+<dt><b>R-48230-36247-21230-47058-09870-51505-35285-11048</b></dt>
+<dd><p>The special behaviors associated "INTEGER PRIMARY KEY" do not apply on WITHOUT ROWID tables.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-48230-36247-21230-47058-09870-51505-35285-11048'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-48230-36247-21230-47058-09870-51505-35285-11048'>detail</a>)</i></p></dd>
+
+<dt><b>R-48245-15045-20041-46563-30518-58270-45669-62749</b></dt>
+<dd><p>A filename that is not a well-formed URI is interpreted as an ordinary filename.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-48245-15045-20041-46563-30518-58270-45669-62749'>context</a>, <a href='matrix/matrix_duri.html#R-48245-15045-20041-46563-30518-58270-45669-62749'>detail</a>)</i></p></dd>
+
+<dt><b>R-48254-42943-07993-04131-52492-34370-46050-41806</b></dt>
+<dd><p>This option is used to enable or disable the fts3_tokenizer() function which is part of the FTS3 full-text search engine extension.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-48254-42943-07993-04131-52492-34370-46050-41806'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-48254-42943-07993-04131-52492-34370-46050-41806'>detail</a>)</i></p></dd>
+
+<dt><b>R-48270-44282-22791-02682-41212-30485-35514-10094</b></dt>
+<dd><p>Foreign key ON DELETE and ON UPDATE clauses are used to configure actions that take place when deleting rows from the parent table (ON DELETE), or modifying the parent key values of existing rows (ON UPDATE).
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/pragma02.test, matrix: <a href='matrix/foreignkeys.html#R-48270-44282-22791-02682-41212-30485-35514-10094'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-48270-44282-22791-02682-41212-30485-35514-10094'>detail</a>)</i></p></dd>
+
+<dt><b>R-48313-35799-57609-24734-64937-33072-43085-04424</b></dt>
+<dd><p>The four-byte page number at offset 8 is the right-most pointer. This value appears in the header of interior b-tree pages only and is omitted from all other pages.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-48313-35799-57609-24734-64937-33072-43085-04424'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-48313-35799-57609-24734-64937-33072-43085-04424'>detail</a>)</i></p></dd>
+
+<dt><b>R-48331-62427-58525-15123-43794-40933-40016-08024</b></dt>
+<dd><p>The cache size reverts to the default value when the database is closed and reopened.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma09.test, matrix: <a href='matrix/pragma.html#R-48331-62427-58525-15123-43794-40933-40016-08024'>context</a>, <a href='matrix/matrix_dpragma.html#R-48331-62427-58525-15123-43794-40933-40016-08024'>detail</a>)</i></p></dd>
+
+<dt><b>R-48332-15034-37665-36826-65494-46636-19772-53636</b></dt>
+<dd><p>Overflow pages form a linked list.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-48332-15034-37665-36826-65494-46636-19772-53636'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-48332-15034-37665-36826-65494-46636-19772-53636'>detail</a>)</i></p></dd>
+
+<dt><b>R-48333-48208-51802-16528-34605-32533-04815-58648</b></dt>
+<dd><p>The page cache implementation may choose to evict unpinned pages at any time.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-48333-48208-51802-16528-34605-32533-04815-58648'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-48333-48208-51802-16528-34605-32533-04815-58648'>detail</a>)</i></p></dd>
+
+<dt><b>R-48353-58021-05653-25479-47424-12546-41849-50684</b></dt>
+<dd><p>Coalesce() must have at least 2 arguments.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-48353-58021-05653-25479-47424-12546-41849-50684'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-48353-58021-05653-25479-47424-12546-41849-50684'>detail</a>)</i></p></dd>
+
+<dt><b>R-48365-36308-32644-24714-49385-43742-45411-08326</b></dt>
+<dd><p>Specifying an unknown VFS is an error.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-48365-36308-32644-24714-49385-43742-45411-08326'>context</a>, <a href='matrix/matrix_dopen.html#R-48365-36308-32644-24714-49385-43742-45411-08326'>detail</a>)</i></p></dd>
+
+<dt><b>R-48367-20048-50643-18297-54370-57109-07198-62808</b></dt>
+<dd><p>Calls to sqlite3_blob_read() and sqlite3_blob_write() for an expired BLOB handle fail with a return code of SQLITE_ABORT.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-48367-20048-50643-18297-54370-57109-07198-62808'>context</a>, <a href='matrix/matrix_dblob_open.html#R-48367-20048-50643-18297-54370-57109-07198-62808'>detail</a>)</i></p></dd>
+
+<dt><b>R-48391-38472-46406-48874-31358-29787-61398-48182</b></dt>
+<dd><p>Instead, such errors prevent the application from preparing SQL statements that modify the content of the child or parent tables in ways that use the foreign keys.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-48391-38472-46406-48874-31358-29787-61398-48182'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-48391-38472-46406-48874-31358-29787-61398-48182'>detail</a>)</i></p></dd>
+
+<dt><b>R-48422-12154-41896-26820-42783-11801-54961-22024</b></dt>
+<dd><p>SQLITE_DONE means that the statement has finished executing successfully.
+<i>(source: <a href="c3ref/step.html">c3ref/step.html</a>, matrix: <a href='matrix/c3ref/step.html#R-48422-12154-41896-26820-42783-11801-54961-22024'>context</a>, <a href='matrix/matrix_dstep.html#R-48422-12154-41896-26820-42783-11801-54961-22024'>detail</a>)</i></p></dd>
+
+<dt><b>R-48498-17552-64242-05980-09276-07161-21761-29741</b></dt>
+<dd><p>The priority assigned to each node in the search is the lowest priority returned by any of the MATCH operators.
+<i>(source: <a href="rtree.html">rtree.html</a>, matrix: <a href='matrix/rtree.html#R-48498-17552-64242-05980-09276-07161-21761-29741'>context</a>, <a href='matrix/matrix_drtree.html#R-48498-17552-64242-05980-09276-07161-21761-29741'>detail</a>)</i></p></dd>
+
+<dt><b>R-48508-22969-00511-42065-43898-18607-20276-53224</b></dt>
+<dd><p>The sqlite3_expanded_sql() interface returns NULL if insufficient memory is available to hold the result, or if the result would exceed the the maximum string length determined by the SQLITE_LIMIT_LENGTH.
+<i>(source: <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>, matrix: <a href='matrix/c3ref/expanded_sql.html#R-48508-22969-00511-42065-43898-18607-20276-53224'>context</a>, <a href='matrix/matrix_dexpanded_sql.html#R-48508-22969-00511-42065-43898-18607-20276-53224'>detail</a>)</i></p></dd>
+
+<dt><b>R-48515-17071-01748-53635-10360-09083-05478-56213</b></dt>
+<dd><p>When there are multiple VFS shims in the stack, this opcode finds the upper-most shim only.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-48515-17071-01748-53635-10360-09083-05478-56213'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-48515-17071-01748-53635-10360-09083-05478-56213'>detail</a>)</i></p></dd>
+
+<dt><b>R-48521-51450-40029-38325-35476-53863-12365-01087</b></dt>
+<dd><p>When in write-ahead log mode, only the auto_vacuum support property can be changed using VACUUM.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-48521-51450-40029-38325-35476-53863-12365-01087'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-48521-51450-40029-38325-35476-53863-12365-01087'>detail</a>)</i></p></dd>
+
+<dt><b>R-48533-46594-08674-01218-43796-46472-34581-15116</b></dt>
+<dd><p>An INTEGER PRIMARY KEY column is an alias for the rowid, but an INT PRIMARY KEY column is not.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq02.test, matrix: <a href='matrix/stricttables.html#R-48533-46594-08674-01218-43796-46472-34581-15116'>context</a>, <a href='matrix/matrix_dstricttables.html#R-48533-46594-08674-01218-43796-46472-34581-15116'>detail</a>)</i></p></dd>
+
+<dt><b>R-48560-31808-12822-42502-57159-22070-42910-14910</b></dt>
+<dd><p>The fifth parameter to the preupdate callback is the name of the table that is being modified.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-48560-31808-12822-42502-57159-22070-42910-14910'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-48560-31808-12822-42502-57159-22070-42910-14910'>detail</a>)</i></p></dd>
+
+<dt><b>R-48563-15053-26384-64007-26863-55213-59220-45966</b></dt>
+<dd><p>If nByte is zero, then no prepared statement is generated.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/cov1/prepare07.test, matrix: <a href='matrix/c3ref/prepare.html#R-48563-15053-26384-64007-26863-55213-59220-45966'>context</a>, <a href='matrix/matrix_dprepare.html#R-48563-15053-26384-64007-26863-55213-59220-45966'>detail</a>)</i></p></dd>
+
+<dt><b>R-48576-42125-14408-22326-23329-43841-05542-05024</b></dt>
+<dd><p>This pragma only operates on the single database specified prior to the pragma name (or on the "main" database if no database is specified.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma26.test, matrix: <a href='matrix/pragma.html#R-48576-42125-14408-22326-23329-43841-05542-05024'>context</a>, <a href='matrix/matrix_dpragma.html#R-48576-42125-14408-22326-23329-43841-05542-05024'>detail</a>)</i></p></dd>
+
+<dt><b>R-48584-41074-15154-28473-43969-34090-29401-03268</b></dt>
+<dd><p>For example, if an UPDATE statement encountered a constraint violation on the 100th row that it attempts to update, then the first 99 row changes are preserved but changes to rows 100 and beyond never occur.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict01.test, matrix: <a href='matrix/lang_conflict.html#R-48584-41074-15154-28473-43969-34090-29401-03268'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-48584-41074-15154-28473-43969-34090-29401-03268'>detail</a>)</i></p></dd>
+
+<dt><b>R-48588-03878-62970-41028-04279-19068-00654-07997</b></dt>
+<dd><p>If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N) is invoked with a value of N that is greater than the hard heap limit, the soft heap limit is set to the value of the hard heap limit.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-48588-03878-62970-41028-04279-19068-00654-07997'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-48588-03878-62970-41028-04279-19068-00654-07997'>detail</a>)</i></p></dd>
+
+<dt><b>R-48616-47814-10585-42560-43373-45165-03302-15640</b></dt>
+<dd><p>The COLLATE clause optionally following each column name or expression defines a collating sequence used for text entries in that column.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx01.test, matrix: <a href='matrix/lang_createindex.html#R-48616-47814-10585-42560-43373-45165-03302-15640'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-48616-47814-10585-42560-43373-45165-03302-15640'>detail</a>)</i></p></dd>
+
+<dt><b>R-48666-10705-60913-59085-01718-56024-53514-10016</b></dt>
+<dd><p>The 4-byte big-endian integer at offset 96 stores the SQLITE_VERSION_NUMBER value for the SQLite library that most recently modified the database file.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-48666-10705-60913-59085-01718-56024-53514-10016'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-48666-10705-60913-59085-01718-56024-53514-10016'>detail</a>)</i></p></dd>
+
+<dt><b>R-48680-34580-07535-36530-00266-23021-14207-17358</b></dt>
+<dd><p>This routine enables or disables the sharing of the database cache and schema data structures between connections to the same database. Sharing is enabled if the argument is true and disabled if the argument is false.
+<i>(source: <a href="c3ref/enable_shared_cache.html">c3ref/enable_shared_cache.html</a>, matrix: <a href='matrix/c3ref/enable_shared_cache.html#R-48680-34580-07535-36530-00266-23021-14207-17358'>context</a>, <a href='matrix/matrix_denable_shared_cache.html#R-48680-34580-07535-36530-00266-23021-14207-17358'>detail</a>)</i></p></dd>
+
+<dt><b>R-48699-48617-19592-25745-27147-09294-16176-26232</b></dt>
+<dd><p>This function is an SQL wrapper around the sqlite3_libversion() C-interface.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/req1/func04.test, matrix: <a href='matrix/lang_corefunc.html#R-48699-48617-19592-25745-27147-09294-16176-26232'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-48699-48617-19592-25745-27147-09294-16176-26232'>detail</a>)</i></p></dd>
+
+<dt><b>R-48711-46457-28354-47973-39166-41669-11371-37006</b></dt>
+<dd><p>The COMMIT command commits all outstanding transactions and leaves the transaction stack empty.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-48711-46457-28354-47973-39166-41669-11371-37006'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-48711-46457-28354-47973-39166-41669-11371-37006'>detail</a>)</i></p></dd>
+
+<dt><b>R-48725-32206-13295-21825-58953-47648-55693-43130</b></dt>
+<dd><p>If it is globally disabled, filenames are only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the database connection is opened.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-48725-32206-13295-21825-58953-47648-55693-43130'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-48725-32206-13295-21825-58953-47648-55693-43130'>detail</a>)</i></p></dd>
+
+<dt><b>R-48730-20169-40246-20306-06910-57968-05795-57037</b></dt>
+<dd><p>Setting the auto-checkpoint size to zero or a negative value turns auto-checkpointing off.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-48730-20169-40246-20306-06910-57968-05795-57037'>context</a>, <a href='matrix/matrix_dpragma.html#R-48730-20169-40246-20306-06910-57968-05795-57037'>detail</a>)</i></p></dd>
+
+<dt><b>R-48741-32454-48845-05465-27210-18049-43593-22824</b></dt>
+<dd><p>If the prefix integer is greater than +9223372036854775807 then the result of the cast is exactly +9223372036854775807.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/cast.test, th3/cov1/cast01.test, matrix: <a href='matrix/lang_expr.html#R-48741-32454-48845-05465-27210-18049-43593-22824'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-48741-32454-48845-05465-27210-18049-43593-22824'>detail</a>)</i></p></dd>
+
+<dt><b>R-48752-58459-43335-39214-58584-56522-10495-27152</b></dt>
+<dd><p>A call to sqlite3_vtab_in(P,N,-1) will return true (non-zero) if and only if the P->aConstraint[N] constraint is an IN operator that can be processed all at once.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-48752-58459-43335-39214-58584-56522-10495-27152'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-48752-58459-43335-39214-58584-56522-10495-27152'>detail</a>)</i></p></dd>
+
+<dt><b>R-48764-26733-47009-14023-25431-43800-20632-23039</b></dt>
+<dd><p>SQLITE_LIMIT_VDBE_OP The maximum number of instructions in a virtual machine program used to implement an SQL statement. If sqlite3_prepare_v2() or the equivalent tries to allocate space for more than this many opcodes in a single prepared statement, an SQLITE_NOMEM error is returned.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: th3/cov1/vdbe43.test, th3/req1/limit02.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-48764-26733-47009-14023-25431-43800-20632-23039'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-48764-26733-47009-14023-25431-43800-20632-23039'>detail</a>)</i></p></dd>
+
+<dt><b>R-48780-51154-29045-33846-29685-59485-21134-40329</b></dt>
+<dd><p>A rollback journal header is padded with zeros out to the size of a single sector (as defined by the sector size integer at offset 20).
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-48780-51154-29045-33846-29685-59485-21134-40329'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-48780-51154-29045-33846-29685-59485-21134-40329'>detail</a>)</i></p></dd>
+
+<dt><b>R-48887-45097-32252-48133-01081-61153-45933-38095</b></dt>
+<dd><p>When INSERT OR REPLACE encounters a constraint violation, it does not fail. The INSERT continues to completion after deleting rows that caused the constraint problem so INSERT OR REPLACE will always change the return value of this interface.
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-48887-45097-32252-48133-01081-61153-45933-38095'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-48887-45097-32252-48133-01081-61153-45933-38095'>detail</a>)</i></p></dd>
+
+<dt><b>R-48924-26514-16091-23967-07299-63684-26291-30704</b></dt>
+<dd><p>SQLite passes the module arguments directly to the xCreate and xConnect methods of the module implementation without any interpretation.
+<i>(source: <a href="lang_createvtab.html">lang_createvtab.html</a>, matrix: <a href='matrix/lang_createvtab.html#R-48924-26514-16091-23967-07299-63684-26291-30704'>context</a>, <a href='matrix/matrix_dlang_createvtab.html#R-48924-26514-16091-23967-07299-63684-26291-30704'>detail</a>)</i></p></dd>
+
+<dt><b>R-48930-58522-23866-61724-42615-58170-25168-58351</b></dt>
+<dd><p>If the fullfsync flag is set, then the F_FULLFSYNC syncing method is used for all sync operations and the checkpoint_fullfsync setting is irrelevant.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma11.test, matrix: <a href='matrix/pragma.html#R-48930-58522-23866-61724-42615-58170-25168-58351'>context</a>, <a href='matrix/matrix_dpragma.html#R-48930-58522-23866-61724-42615-58170-25168-58351'>detail</a>)</i></p></dd>
+
+<dt><b>R-48932-13175-31748-44734-45646-26291-63323-36256</b></dt>
+<dd><p>When the auto_vacuum pragma is invoked with no arguments, it returns the current auto_vacuum mode.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-48932-13175-31748-44734-45646-26291-63323-36256'>context</a>, <a href='matrix/matrix_dpragma.html#R-48932-13175-31748-44734-45646-26291-63323-36256'>detail</a>)</i></p></dd>
+
+<dt><b>R-48945-04866-13752-27122-40545-48068-02764-57790</b></dt>
+<dd><p>If the input text looks like an integer (there is no decimal point nor exponent) and the value is small enough to fit in a 64-bit signed integer, then the result will be INTEGER.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, th3/cov1/cast01.test, matrix: <a href='matrix/lang_expr.html#R-48945-04866-13752-27122-40545-48068-02764-57790'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-48945-04866-13752-27122-40545-48068-02764-57790'>detail</a>)</i></p></dd>
+
+<dt><b>R-48957-47016-25285-15223-13940-44175-60524-56619</b></dt>
+<dd><p>PRAGMA schema.max_page_count; PRAGMA schema.max_page_count = N; Query or set the maximum number of pages in the database file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma12.test, matrix: <a href='matrix/pragma.html#R-48957-47016-25285-15223-13940-44175-60524-56619'>context</a>, <a href='matrix/matrix_dpragma.html#R-48957-47016-25285-15223-13940-44175-60524-56619'>detail</a>)</i></p></dd>
+
+<dt><b>R-48969-57179-22710-19682-41342-60747-10784-57811</b></dt>
+<dd><p>The initial columns of the index must be used with the = or IN or IS operators.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-48969-57179-22710-19682-41342-60747-10784-57811'>context</a>, <a href='matrix/matrix_doptoverview.html#R-48969-57179-22710-19682-41342-60747-10784-57811'>detail</a>)</i></p></dd>
+
+<dt><b>R-48974-49065-61621-06146-19676-25971-04970-57642</b></dt>
+<dd><p>When overwriting the original, a rollback journal or write-ahead log WAL file is used just as it would be for any other database transaction.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, matrix: <a href='matrix/lang_vacuum.html#R-48974-49065-61621-06146-19676-25971-04970-57642'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-48974-49065-61621-06146-19676-25971-04970-57642'>detail</a>)</i></p></dd>
+
+<dt><b>R-49006-07361-60933-29760-59065-52177-14168-55126</b></dt>
+<dd><p>This interface returns a pointer the sqlite3_mutex object that serializes access to the database connection given in the argument when the threading mode is Serialized.
+<i>(source: <a href="c3ref/db_mutex.html">c3ref/db_mutex.html</a>, checked-by: th3/req1/dbmutex01.test, matrix: <a href='matrix/c3ref/db_mutex.html#R-49006-07361-60933-29760-59065-52177-14168-55126'>context</a>, <a href='matrix/matrix_ddb_mutex.html#R-49006-07361-60933-29760-59065-52177-14168-55126'>detail</a>)</i></p></dd>
+
+<dt><b>R-49034-18526-14571-23024-35463-03575-44456-04746</b></dt>
+<dd><p>If sqlite3_close_v2() is called with unfinalized prepared statements, unclosed BLOB handlers, and/or unfinished sqlite3_backups, it returns SQLITE_OK regardless, but instead of deallocating the database connection immediately, it marks the database connection as an unusable "zombie" and makes arrangements to automatically deallocate the database connection after all prepared statements are finalized, all BLOB handles are closed, and all backups have finished.
+<i>(source: <a href="c3ref/close.html">c3ref/close.html</a>, checked-by: th3/cov1/main39.test, matrix: <a href='matrix/c3ref/close.html#R-49034-18526-14571-23024-35463-03575-44456-04746'>context</a>, <a href='matrix/matrix_dclose.html#R-49034-18526-14571-23024-35463-03575-44456-04746'>detail</a>)</i></p></dd>
+
+<dt><b>R-49037-06490-58039-52656-29480-55472-29071-52724</b></dt>
+<dd><p>For an ordinary non-strict table, a column of type ANY will attempt to convert strings that look like numbers into a numeric value, and if successful will store the numeric value rather than the original string.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-49037-06490-58039-52656-29480-55472-29071-52724'>context</a>, <a href='matrix/matrix_dstricttables.html#R-49037-06490-58039-52656-29480-55472-29071-52724'>detail</a>)</i></p></dd>
+
+<dt><b>R-49045-42493-00753-52815-20675-33627-44655-32339</b></dt>
+<dd><p>SQLite will use the xCurrentTimeInt64() method to get the current date and time if that method is available (if iVersion is 2 or greater and the function pointer is not NULL) and will fall back to xCurrentTime() if xCurrentTimeInt64() is unavailable.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: src/os.c, matrix: <a href='matrix/c3ref/vfs.html#R-49045-42493-00753-52815-20675-33627-44655-32339'>context</a>, <a href='matrix/matrix_dvfs.html#R-49045-42493-00753-52815-20675-33627-44655-32339'>detail</a>)</i></p></dd>
+
+<dt><b>R-49053-54554-23954-60675-57503-20600-08222-18852</b></dt>
+<dd><p>The sqlite3_free() routine is a no-op if is called with a NULL pointer.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: src/malloc.c, th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-49053-54554-23954-60675-57503-20600-08222-18852'>context</a>, <a href='matrix/matrix_dfree.html#R-49053-54554-23954-60675-57503-20600-08222-18852'>detail</a>)</i></p></dd>
+
+<dt><b>R-49060-02464-24124-01756-13538-48535-01084-34882</b></dt>
+<dd><p>For UTF16 input text to the sqlite3_result_text16(), sqlite3_result_text16be(), sqlite3_result_text16le(), and sqlite3_result_text64() routines, if the text contains invalid UTF16 characters, the invalid characters might be converted into the unicode replacement character, U+FFFD.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, matrix: <a href='matrix/c3ref/result_blob.html#R-49060-02464-24124-01756-13538-48535-01084-34882'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-49060-02464-24124-01756-13538-48535-01084-34882'>detail</a>)</i></p></dd>
+
+<dt><b>R-49065-33371-62807-45806-18659-22955-12642-05474</b></dt>
+<dd><p>you cannot create indices or triggers on a virtual table.
+<i>(source: <a href="lang_createvtab.html">lang_createvtab.html</a>, matrix: <a href='matrix/lang_createvtab.html#R-49065-33371-62807-45806-18659-22955-12642-05474'>context</a>, <a href='matrix/matrix_dlang_createvtab.html#R-49065-33371-62807-45806-18659-22955-12642-05474'>detail</a>)</i></p></dd>
+
+<dt><b>R-49080-64834-49066-11889-43527-52313-57456-24143</b></dt>
+<dd><p>SQLite further guarantees that the string will be valid and unchanged until xClose() is called.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-49080-64834-49066-11889-43527-52313-57456-24143'>context</a>, <a href='matrix/matrix_dvfs.html#R-49080-64834-49066-11889-43527-52313-57456-24143'>detail</a>)</i></p></dd>
+
+<dt><b>R-49128-31170-23004-04082-05241-62766-17146-48048</b></dt>
+<dd><p>The second column is "main" for the main database file, "temp" for the database file used to store TEMP objects, or the name of the ATTACHed database for other database files.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma14.test, matrix: <a href='matrix/pragma.html#R-49128-31170-23004-04082-05241-62766-17146-48048'>context</a>, <a href='matrix/matrix_dpragma.html#R-49128-31170-23004-04082-05241-62766-17146-48048'>detail</a>)</i></p></dd>
+
+<dt><b>R-49155-63541-44229-54839-02572-16362-28643-16859</b></dt>
+<dd><p>If the busy-handler returns 0 before the writer lock is obtained or while waiting for database readers, the checkpoint operation proceeds from that point in the same way as SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible without blocking any further.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-49155-63541-44229-54839-02572-16362-28643-16859'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-49155-63541-44229-54839-02572-16362-28643-16859'>detail</a>)</i></p></dd>
+
+<dt><b>R-49178-21358-58489-31319-06651-33455-27209-45773</b></dt>
+<dd><p>By contrast, if a statement modifies the contents of the database such that a deferred foreign key constraint is violated, the violation is not reported immediately.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys12.test, matrix: <a href='matrix/foreignkeys.html#R-49178-21358-58489-31319-06651-33455-27209-45773'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-49178-21358-58489-31319-06651-33455-27209-45773'>detail</a>)</i></p></dd>
+
+<dt><b>R-49203-06300-24971-00388-61998-23090-03169-09394</b></dt>
+<dd><p>SQLITE_ERROR means that a run-time error (such as a constraint violation) has occurred.
+<i>(source: <a href="c3ref/step.html">c3ref/step.html</a>, matrix: <a href='matrix/c3ref/step.html#R-49203-06300-24971-00388-61998-23090-03169-09394'>context</a>, <a href='matrix/matrix_dstep.html#R-49203-06300-24971-00388-61998-23090-03169-09394'>detail</a>)</i></p></dd>
+
+<dt><b>R-49248-49502-37963-38186-54348-07899-11836-10186</b></dt>
+<dd><p>A trace callback has four arguments: xCallback(T,C,P,X).
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-49248-49502-37963-38186-54348-07899-11836-10186'>context</a>, <a href='matrix/matrix_dc_trace.html#R-49248-49502-37963-38186-54348-07899-11836-10186'>detail</a>)</i></p></dd>
+
+<dt><b>R-49255-55373-50105-35704-52398-37600-44211-44389</b></dt>
+<dd><p>The "unixepoch" modifier (11) only works if it immediately follows a time value in the DDDDDDDDDD format.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: src/date.c, tcl/date3.test, th3/cov1/date1.test, th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-49255-55373-50105-35704-52398-37600-44211-44389'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-49255-55373-50105-35704-52398-37600-44211-44389'>detail</a>)</i></p></dd>
+
+<dt><b>R-49314-60109-53910-26284-37294-10072-42169-13875</b></dt>
+<dd><p>The sqlite3_str_new(D) interface always returns a pointer to a valid sqlite3_str object, though in the event of an out-of-memory error the returned object might be a special singleton that will silently reject new text, always return SQLITE_NOMEM from sqlite3_str_errcode(), always return 0 for sqlite3_str_length(), and always return NULL from sqlite3_str_finish(X).
+<i>(source: <a href="c3ref/str_new.html">c3ref/str_new.html</a>, matrix: <a href='matrix/c3ref/str_new.html#R-49314-60109-53910-26284-37294-10072-42169-13875'>context</a>, <a href='matrix/matrix_dstr_new.html#R-49314-60109-53910-26284-37294-10072-42169-13875'>detail</a>)</i></p></dd>
+
+<dt><b>R-49321-63177-63913-58265-32915-52148-26230-28252</b></dt>
+<dd><p>At the start of the first new write transaction, the WAL header salt-1 value is incremented and the salt-2 value is randomized.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-49321-63177-63913-58265-32915-52148-26230-28252'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-49321-63177-63913-58265-32915-52148-26230-28252'>detail</a>)</i></p></dd>
+
+<dt><b>R-49341-60912-32956-53217-17617-26256-31299-20924</b></dt>
+<dd><p>The schema for the sqlite_sequence table is: CREATE TABLE sqlite_sequence(name,seq);
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-49341-60912-32956-53217-17617-26256-31299-20924'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-49341-60912-32956-53217-17617-26256-31299-20924'>detail</a>)</i></p></dd>
+
+<dt><b>R-49389-26640-51376-48756-08197-40049-61248-27840</b></dt>
+<dd><p>And auto_vacuum does not compact partially filled pages of the database as VACUUM does.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, matrix: <a href='matrix/lang_vacuum.html#R-49389-26640-51376-48756-08197-40049-61248-27840'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-49389-26640-51376-48756-08197-40049-61248-27840'>detail</a>)</i></p></dd>
+
+<dt><b>R-49438-33626-11664-14261-26905-24626-16262-08666</b></dt>
+<dd><p>The second argument is the index of the SQL parameter to be set.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-49438-33626-11664-14261-26905-24626-16262-08666'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-49438-33626-11664-14261-26905-24626-16262-08666'>detail</a>)</i></p></dd>
+
+<dt><b>R-49475-10767-10056-16287-22604-26853-09642-54500</b></dt>
+<dd><p>Triggers are database operations that are automatically performed when a specified database event occurs.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-49475-10767-10056-16287-22604-26853-09642-54500'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-49475-10767-10056-16287-22604-26853-09642-54500'>detail</a>)</i></p></dd>
+
+<dt><b>R-49482-28255-11165-16969-19865-58468-07547-43545</b></dt>
+<dd><p>strftime(format, time-value, modifier, modifier, ...)
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-49482-28255-11165-16969-19865-58468-07547-43545'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-49482-28255-11165-16969-19865-58468-07547-43545'>detail</a>)</i></p></dd>
+
+<dt><b>R-49566-01570-19269-51029-21052-63278-54120-39261</b></dt>
+<dd><p>If the left and right-hand input datasets feature no common column names, then the NATURAL keyword has no effect on the results of the join.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-49566-01570-19269-51029-21052-63278-54120-39261'>context</a>, <a href='matrix/matrix_dlang_select.html#R-49566-01570-19269-51029-21052-63278-54120-39261'>detail</a>)</i></p></dd>
+
+<dt><b>R-49616-30196-22472-11090-21986-31770-01648-15576</b></dt>
+<dd><p>Or, if the argument attached to the REINDEX identifies a specific database table, then all indices attached to the database table are rebuilt.
+<i>(source: <a href="lang_reindex.html">lang_reindex.html</a>, checked-by: tcl/e_reindex.test, matrix: <a href='matrix/lang_reindex.html#R-49616-30196-22472-11090-21986-31770-01648-15576'>context</a>, <a href='matrix/matrix_dlang_reindex.html#R-49616-30196-22472-11090-21986-31770-01648-15576'>detail</a>)</i></p></dd>
+
+<dt><b>R-49703-40061-17137-59156-45965-30575-53076-21589</b></dt>
+<dd><p>Note that you must use the keyword "CROSS" in order to disable the table reordering optimization; INNER JOIN, NATURAL JOIN, JOIN, and other similar combinations work just like a comma join in that the optimizer is free to reorder tables as it sees fit.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-49703-40061-17137-59156-45965-30575-53076-21589'>context</a>, <a href='matrix/matrix_doptoverview.html#R-49703-40061-17137-59156-45965-30575-53076-21589'>detail</a>)</i></p></dd>
+
+<dt><b>R-49709-12803-31814-26348-47423-57692-52617-09726</b></dt>
+<dd><p>If this variable is a NULL pointer, then SQLite assumes that all database files specified with a relative pathname are relative to the current directory for the process.
+<i>(source: <a href="c3ref/data_directory.html">c3ref/data_directory.html</a>, matrix: <a href='matrix/c3ref/data_directory.html#R-49709-12803-31814-26348-47423-57692-52617-09726'>context</a>, <a href='matrix/matrix_ddata_directory.html#R-49709-12803-31814-26348-47423-57692-52617-09726'>detail</a>)</i></p></dd>
+
+<dt><b>R-49713-24018-00307-59185-08643-49847-38156-16208</b></dt>
+<dd><p>PRAGMA optimize; PRAGMA optimize(MASK); PRAGMA schema.optimize; PRAGMA schema.optimize(MASK); Attempt to optimize the database.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-49713-24018-00307-59185-08643-49847-38156-16208'>context</a>, <a href='matrix/matrix_dpragma.html#R-49713-24018-00307-59185-08643-49847-38156-16208'>detail</a>)</i></p></dd>
+
+<dt><b>R-49718-44437-53178-33073-48551-60632-45231-61036</b></dt>
+<dd><p>If sqlite3_backup_step(B,N) successfully copies N pages and there are still more pages to be copied, then the function returns SQLITE_OK.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup03.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-49718-44437-53178-33073-48551-60632-45231-61036'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-49718-44437-53178-33073-48551-60632-45231-61036'>detail</a>)</i></p></dd>
+
+<dt><b>R-49744-28344-63399-17680-56251-18260-15622-25179</b></dt>
+<dd><p>Return the number of columns in the result set returned by the prepared statement.
+<i>(source: <a href="c3ref/column_count.html">c3ref/column_count.html</a>, checked-by: th3/req1/datacnt01.test, th3/th3util.c, matrix: <a href='matrix/c3ref/column_count.html#R-49744-28344-63399-17680-56251-18260-15622-25179'>context</a>, <a href='matrix/matrix_dcolumn_count.html#R-49744-28344-63399-17680-56251-18260-15622-25179'>detail</a>)</i></p></dd>
+
+<dt><b>R-49752-52776-47662-23975-09882-64912-61393-46932</b></dt>
+<dd><p>Unless deadlock is detected (see below), sqlite3_unlock_notify() always returns SQLITE_OK.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-49752-52776-47662-23975-09882-64912-61393-46932'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-49752-52776-47662-23975-09882-64912-61393-46932'>detail</a>)</i></p></dd>
+
+<dt><b>R-49755-52305-50585-21714-21268-35296-20673-02389</b></dt>
+<dd><p>Hence, to find the current value of a limit without changing it, simply invoke this interface with the third parameter set to -1.
+<i>(source: <a href="c3ref/limit.html">c3ref/limit.html</a>, checked-by: th3/req1/limit01.test, matrix: <a href='matrix/c3ref/limit.html#R-49755-52305-50585-21714-21268-35296-20673-02389'>context</a>, <a href='matrix/matrix_dlimit.html#R-49755-52305-50585-21714-21268-35296-20673-02389'>detail</a>)</i></p></dd>
+
+<dt><b>R-49759-12456-29059-02912-58446-28690-22652-14283</b></dt>
+<dd><p>None of the xSavepoint(), xRelease(), or xRollbackTo() methods will ever be called except in between calls to xBegin() and either xCommit() or xRollback().
+<i>(source: <a href="vtab.html">vtab.html</a>, matrix: <a href='matrix/vtab.html#R-49759-12456-29059-02912-58446-28690-22652-14283'>context</a>, <a href='matrix/matrix_dvtab.html#R-49759-12456-29059-02912-58446-28690-22652-14283'>detail</a>)</i></p></dd>
+
+<dt><b>R-49770-47130-58542-44165-02097-09691-62108-60186</b></dt>
+<dd><p>Thus with SQLite, there is no computational advantage to use the newer SQL92 join syntax over the older SQL89 comma-join syntax. They both end up accomplishing exactly the same thing on inner joins.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-49770-47130-58542-44165-02097-09691-62108-60186'>context</a>, <a href='matrix/matrix_doptoverview.html#R-49770-47130-58542-44165-02097-09691-62108-60186'>detail</a>)</i></p></dd>
+
+<dt><b>R-49783-61279-16242-54630-23858-13201-42746-50539</b></dt>
+<dd><p>An "at" sign works exactly like a colon, except that the name of the parameter created is @AAAA.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-49783-61279-16242-54630-23858-13201-42746-50539'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-49783-61279-16242-54630-23858-13201-42746-50539'>detail</a>)</i></p></dd>
+
+<dt><b>R-49787-09095-59828-21873-59722-58007-44874-49615</b></dt>
+<dd><p>The sqlite3_wal_checkpoint_v2(D,X,M,L,C) interface runs a checkpoint operation on database X of database connection D in mode M. Status information is written back into integers pointed to by L and C.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-49787-09095-59828-21873-59722-58007-44874-49615'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-49787-09095-59828-21873-59722-58007-44874-49615'>detail</a>)</i></p></dd>
+
+<dt><b>R-49789-16524-33222-15346-50158-11030-19428-38711</b></dt>
+<dd><p>For an inner join, the two queries above would be identical.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-49789-16524-33222-15346-50158-11030-19428-38711'>context</a>, <a href='matrix/matrix_doptoverview.html#R-49789-16524-33222-15346-50158-11030-19428-38711'>detail</a>)</i></p></dd>
+
+<dt><b>R-49793-28525-19299-21644-21029-37441-20100-31652</b></dt>
+<dd><p>Setting the cache parameter to "private" is equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-49793-28525-19299-21644-21029-37441-20100-31652'>context</a>, <a href='matrix/matrix_dopen.html#R-49793-28525-19299-21644-21029-37441-20100-31652'>detail</a>)</i></p></dd>
+
+<dt><b>R-49794-35026-38918-00907-30383-35141-38655-30488</b></dt>
+<dd><p>Value is a big-endian 16-bit twos-complement integer.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-49794-35026-38918-00907-30383-35141-38655-30488'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-49794-35026-38918-00907-30383-35141-38655-30488'>detail</a>)</i></p></dd>
+
+<dt><b>R-49846-38160-32658-53011-14500-27650-55616-46897</b></dt>
+<dd><p>If the argument is a table name, then only that table and the indices associated with that table are analyzed.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-49846-38160-32658-53011-14500-27650-55616-46897'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-49846-38160-32658-53011-14500-27650-55616-46897'>detail</a>)</i></p></dd>
+
+<dt><b>R-49851-43011-30572-52632-23403-60290-47065-63539</b></dt>
+<dd><p>When this flag is on, the ALTER TABLE RENAME command (for changing the name of a table) works as it did in SQLite 3.24.0 (2018-06-04) and earlier.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-49851-43011-30572-52632-23403-60290-47065-63539'>context</a>, <a href='matrix/matrix_dpragma.html#R-49851-43011-30572-52632-23403-60290-47065-63539'>detail</a>)</i></p></dd>
+
+<dt><b>R-49858-53293-55345-56898-28930-13121-51128-08876</b></dt>
+<dd><p>If a column-name list follows the view-name, then that list determines the names of the columns for the view.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, matrix: <a href='matrix/lang_createview.html#R-49858-53293-55345-56898-28930-13121-51128-08876'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-49858-53293-55345-56898-28930-13121-51128-08876'>detail</a>)</i></p></dd>
+
+<dt><b>R-49872-03192-58704-53251-31114-19723-47133-57999</b></dt>
+<dd><p>If the join-operator is "CROSS JOIN", "INNER JOIN", "JOIN" or a comma (",") and there is no ON or USING clause, then the result of the join is simply the cartesian product of the left and right-hand datasets.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, tcl/e_select2.test, matrix: <a href='matrix/lang_select.html#R-49872-03192-58704-53251-31114-19723-47133-57999'>context</a>, <a href='matrix/matrix_dlang_select.html#R-49872-03192-58704-53251-31114-19723-47133-57999'>detail</a>)</i></p></dd>
+
+<dt><b>R-49876-15090-54531-12360-51762-42464-27372-16242</b></dt>
+<dd><p>SQLite makes a copy of the content of the sqlite3_mutex_methods structure before the call to sqlite3_config() returns.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-49876-15090-54531-12360-51762-42464-27372-16242'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-49876-15090-54531-12360-51762-42464-27372-16242'>detail</a>)</i></p></dd>
+
+<dt><b>R-49895-22749-28747-51875-53183-63648-10463-26840</b></dt>
+<dd><p>FOREIGN KEY constraints work the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/cov1/fkey01.test, matrix: <a href='matrix/stricttables.html#R-49895-22749-28747-51875-53183-63648-10463-26840'>context</a>, <a href='matrix/matrix_dstricttables.html#R-49895-22749-28747-51875-53183-63648-10463-26840'>detail</a>)</i></p></dd>
+
+<dt><b>R-49920-60189-48669-35973-51094-40513-29191-34461</b></dt>
+<dd><p>If the first pointer (the memory pointer) is NULL, then SQLite reverts to using its default memory allocator (the system malloc() implementation), undoing any prior invocation of SQLITE_CONFIG_MALLOC.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3oom.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-49920-60189-48669-35973-51094-40513-29191-34461'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-49920-60189-48669-35973-51094-40513-29191-34461'>detail</a>)</i></p></dd>
+
+<dt><b>R-49925-55905-53634-34425-17507-41771-04127-21905</b></dt>
+<dd><p>Otherwise, the BINARY collation sequence is used.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-49925-55905-53634-34425-17507-41771-04127-21905'>context</a>, <a href='matrix/matrix_dlang_select.html#R-49925-55905-53634-34425-17507-41771-04127-21905'>detail</a>)</i></p></dd>
+
+<dt><b>R-49927-54202-04522-64908-10346-59629-31272-28673</b></dt>
+<dd><p>For example, the main office of the SQLite project is located at 35.37785, -80.77470. To find which zipcodes might service that office, one could right: SELECT id FROM demo_index WHERE minX<=-80.77470 AND maxX>=-80.77470 AND minY<=35.37785 AND maxY>=35.37785;
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-49927-54202-04522-64908-10346-59629-31272-28673'>context</a>, <a href='matrix/matrix_drtree.html#R-49927-54202-04522-64908-10346-59629-31272-28673'>detail</a>)</i></p></dd>
+
+<dt><b>R-49931-19798-23474-09370-36216-10511-05923-60825</b></dt>
+<dd><p>After each call to sqlite3_set_auxdata(C,N,P,X) where X is not NULL, SQLite will invoke the destructor function X with parameter P exactly once, when the metadata is discarded.
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-49931-19798-23474-09370-36216-10511-05923-60825'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-49931-19798-23474-09370-36216-10511-05923-60825'>detail</a>)</i></p></dd>
+
+<dt><b>R-49933-05137-11348-33836-49788-49818-47982-53945</b></dt>
+<dd><p>If there is a USING clause then each of the column names specified must exist in the datasets to both the left and right of the join-operator.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-49933-05137-11348-33836-49788-49818-47982-53945'>context</a>, <a href='matrix/matrix_dlang_select.html#R-49933-05137-11348-33836-49788-49818-47982-53945'>detail</a>)</i></p></dd>
+
+<dt><b>R-49956-53465-03282-32441-61380-45245-38103-26687</b></dt>
+<dd><p>A protected sqlite3_value object may always be used where an unprotected sqlite3_value object is required, so either kind of sqlite3_value object can be used with this interface.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result03.test, matrix: <a href='matrix/c3ref/result_blob.html#R-49956-53465-03282-32441-61380-45245-38103-26687'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-49956-53465-03282-32441-61380-45245-38103-26687'>detail</a>)</i></p></dd>
+
+<dt><b>R-49959-19447-21859-18883-29920-55804-31442-61320</b></dt>
+<dd><p>The xMutexInit method defined by this structure is invoked as part of system initialization by the sqlite3_initialize() function.
+<i>(source: <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>, matrix: <a href='matrix/c3ref/mutex_methods.html#R-49959-19447-21859-18883-29920-55804-31442-61320'>context</a>, <a href='matrix/matrix_dmutex_methods.html#R-49959-19447-21859-18883-29920-55804-31442-61320'>detail</a>)</i></p></dd>
+
+<dt><b>R-49983-40731-31772-48546-63558-64382-07908-41217</b></dt>
+<dd><p>There is normally one row per index, with the index identified by the name in the sqlite_stat1.idx column.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-49983-40731-31772-48546-63558-64382-07908-41217'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-49983-40731-31772-48546-63558-64382-07908-41217'>detail</a>)</i></p></dd>
+
+<dt><b>R-49991-12716-30919-42596-27111-39963-53414-21739</b></dt>
+<dd><p>A keyword in double-quotes is an identifier.
+<i>(source: <a href="lang_keywords.html">lang_keywords.html</a>, checked-by: th3/req1/keyword01.test, matrix: <a href='matrix/lang_keywords.html#R-49991-12716-30919-42596-27111-39963-53414-21739'>context</a>, <a href='matrix/matrix_dlang_keywords.html#R-49991-12716-30919-42596-27111-39963-53414-21739'>detail</a>)</i></p></dd>
+
+<dt><b>R-50007-39580-16025-53191-47811-24920-21111-19074</b></dt>
+<dd><p>Careful use of the sqlite3_vtab_distinct() interface and the "orderByConsumed" flag might help queries against a virtual table to run faster.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-50007-39580-16025-53191-47811-24920-21111-19074'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-50007-39580-16025-53191-47811-24920-21111-19074'>detail</a>)</i></p></dd>
+
+<dt><b>R-50036-02772-43008-32720-05728-55771-24380-32183</b></dt>
+<dd><p>The definition of GLOB pattern matching used in sqlite3_strglob(P,X) is the same as for the "X GLOB P" operator in the SQL dialect understood by SQLite.
+<i>(source: <a href="c3ref/strglob.html">c3ref/strglob.html</a>, checked-by: th3/cov1/glob01.test, matrix: <a href='matrix/c3ref/strglob.html#R-50036-02772-43008-32720-05728-55771-24380-32183'>context</a>, <a href='matrix/matrix_dstrglob.html#R-50036-02772-43008-32720-05728-55771-24380-32183'>detail</a>)</i></p></dd>
+
+<dt><b>R-50083-49187-63509-30877-07462-63628-48341-23744</b></dt>
+<dd><p>Both routines return a NULL pointer if sqlite3_malloc64() is unable to allocate enough memory to hold the resulting string.
+<i>(source: <a href="c3ref/mprintf.html">c3ref/mprintf.html</a>, matrix: <a href='matrix/c3ref/mprintf.html#R-50083-49187-63509-30877-07462-63628-48341-23744'>context</a>, <a href='matrix/matrix_dmprintf.html#R-50083-49187-63509-30877-07462-63628-48341-23744'>detail</a>)</i></p></dd>
+
+<dt><b>R-50083-60579-41416-11234-29660-46304-14804-18223</b></dt>
+<dd><p>The second argument is an integer constant, taken from the set of SQLITE_DBSTATUS options, that determines the parameter to interrogate.
+<i>(source: <a href="c3ref/db_status.html">c3ref/db_status.html</a>, checked-by: th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/db_status.html#R-50083-60579-41416-11234-29660-46304-14804-18223'>context</a>, <a href='matrix/matrix_ddb_status.html#R-50083-60579-41416-11234-29660-46304-14804-18223'>detail</a>)</i></p></dd>
+
+<dt><b>R-50109-18895-48987-07545-37480-53059-10212-16515</b></dt>
+<dd><p>Hexadecimal integer literals follow the C-language notation of "0x" or "0X" followed by hexadecimal digits.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/expr01.test, matrix: <a href='matrix/lang_expr.html#R-50109-18895-48987-07545-37480-53059-10212-16515'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-50109-18895-48987-07545-37480-53059-10212-16515'>detail</a>)</i></p></dd>
+
+<dt><b>R-50117-55204-45597-46380-14331-21746-62351-54085</b></dt>
+<dd><p>Foreign key constraints are enabled, column zColumn is part of a child key definition and the blob is being opened for read/write access
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, th3/cov1/vdbeblob06.test, matrix: <a href='matrix/c3ref/blob_open.html#R-50117-55204-45597-46380-14331-21746-62351-54085'>context</a>, <a href='matrix/matrix_dblob_open.html#R-50117-55204-45597-46380-14331-21746-62351-54085'>detail</a>)</i></p></dd>
+
+<dt><b>R-50130-53472-08801-49768-51865-55888-22455-32076</b></dt>
+<dd><p>The virtual <name> table creates three shadow tables to actually store its content.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq02.test, matrix: <a href='matrix/rtree.html#R-50130-53472-08801-49768-51865-55888-22455-32076'>context</a>, <a href='matrix/matrix_drtree.html#R-50130-53472-08801-49768-51865-55888-22455-32076'>detail</a>)</i></p></dd>
+
+<dt><b>R-50131-31524-20441-42950-32072-08480-18169-31602</b></dt>
+<dd><p>The default behavior is to show all tables in all schemas.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-50131-31524-20441-42950-32072-08480-18169-31602'>context</a>, <a href='matrix/matrix_dpragma.html#R-50131-31524-20441-42950-32072-08480-18169-31602'>detail</a>)</i></p></dd>
+
+<dt><b>R-50141-17598-64848-16921-53866-52555-58777-52662</b></dt>
+<dd><p>The legacy_file_format pragma can be used to change set the specific behavior for any version of SQLite.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, matrix: <a href='matrix/lang_createindex.html#R-50141-17598-64848-16921-53866-52555-58777-52662'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-50141-17598-64848-16921-53866-52555-58777-52662'>detail</a>)</i></p></dd>
+
+<dt><b>R-50173-30557-65428-54259-43210-11188-24430-56909</b></dt>
+<dd><p>The integrity_check pragma look for: Table or index entries that are out of sequence Misformatted records Missing pages Missing or surplus index entries UNIQUE, CHECK, and NOT NULL constraint errors Integrity of the freelist Sections of the database that are used more than once, or not at all
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-50173-30557-65428-54259-43210-11188-24430-56909'>context</a>, <a href='matrix/matrix_dpragma.html#R-50173-30557-65428-54259-43210-11188-24430-56909'>detail</a>)</i></p></dd>
+
+<dt><b>R-50185-15050-31039-59683-34271-57411-13572-34990</b></dt>
+<dd><p>sqlite3_initialize() will invoke sqlite3_os_init().
+<i>(source: <a href="c3ref/initialize.html">c3ref/initialize.html</a>, matrix: <a href='matrix/c3ref/initialize.html#R-50185-15050-31039-59683-34271-57411-13572-34990'>context</a>, <a href='matrix/matrix_dinitialize.html#R-50185-15050-31039-59683-34271-57411-13572-34990'>detail</a>)</i></p></dd>
+
+<dt><b>R-50194-36439-38643-58258-08094-53618-19496-51516</b></dt>
+<dd><p>The right-hand side of the LIKE or GLOB must be either a string literal or a parameter bound to a string literal that does not begin with a wildcard character.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-50194-36439-38643-58258-08094-53618-19496-51516'>context</a>, <a href='matrix/matrix_doptoverview.html#R-50194-36439-38643-58258-08094-53618-19496-51516'>detail</a>)</i></p></dd>
+
+<dt><b>R-50221-42915-63366-22900-20330-11785-03020-07712</b></dt>
+<dd><p>The result of an IN or NOT IN operator is determined by the following matrix: Left operand is NULL Right operand contains NULL Right operand is an empty set Left operand found within right operand Result of IN operator Result of NOT IN operator no no no no false true does not matter no yes no false true no does not matter no yes true false no yes no no NULL NULL yes does not matter no does not matter NULL NULL
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/tkt-80e031a00f.test, matrix: <a href='matrix/lang_expr.html#R-50221-42915-63366-22900-20330-11785-03020-07712'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-50221-42915-63366-22900-20330-11785-03020-07712'>detail</a>)</i></p></dd>
+
+<dt><b>R-50227-03668-59884-25860-05974-05725-11856-44463</b></dt>
+<dd><p>The descending index schema format (4) takes index sort order into account.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx02.test, matrix: <a href='matrix/lang_createindex.html#R-50227-03668-59884-25860-05974-05725-11856-44463'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-50227-03668-59884-25860-05974-05725-11856-44463'>detail</a>)</i></p></dd>
+
+<dt><b>R-50230-26466-58809-52102-21271-42089-25495-26496</b></dt>
+<dd><p>Without this flag, sqlite3_prepare_v3() and sqlite3_prepare16_v3() assume that the prepared statement will be used just once or at most a few times and then destroyed using sqlite3_finalize() relatively soon.
+<i>(source: <a href="c3ref/c_prepare_normalize.html">c3ref/c_prepare_normalize.html</a>, matrix: <a href='matrix/c3ref/c_prepare_normalize.html#R-50230-26466-58809-52102-21271-42089-25495-26496'>context</a>, <a href='matrix/matrix_dc_prepare_normalize.html#R-50230-26466-58809-52102-21271-42089-25495-26496'>detail</a>)</i></p></dd>
+
+<dt><b>R-50253-50589-37477-41446-40449-16495-32904-62089</b></dt>
+<dd><p>The subquery may not be a recursive CTE.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-50253-50589-37477-41446-40449-16495-32904-62089'>context</a>, <a href='matrix/matrix_doptoverview.html#R-50253-50589-37477-41446-40449-16495-32904-62089'>detail</a>)</i></p></dd>
+
+<dt><b>R-50295-28419-15389-14310-31711-65097-63451-02333</b></dt>
+<dd><p>Thus if the BETWEEN term ends up being used as an index constraint no tests are ever performed on that term.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-50295-28419-15389-14310-31711-65097-63451-02333'>context</a>, <a href='matrix/matrix_doptoverview.html#R-50295-28419-15389-14310-31711-65097-63451-02333'>detail</a>)</i></p></dd>
+
+<dt><b>R-50299-05307-25514-21202-52371-12958-26129-48124</b></dt>
+<dd><p>When an applicable constraint violation occurs, the IGNORE resolution algorithm skips the one row that contains the constraint violation and continues processing subsequent rows of the SQL statement as if nothing went wrong.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict01.test, matrix: <a href='matrix/lang_conflict.html#R-50299-05307-25514-21202-52371-12958-26129-48124'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-50299-05307-25514-21202-52371-12958-26129-48124'>detail</a>)</i></p></dd>
+
+<dt><b>R-50300-26941-55863-56023-43928-35657-09281-24931</b></dt>
+<dd><p>Any text input that describes a value outside the range of a 64-bit signed integer yields a REAL result.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, th3/cov1/cast01.test, matrix: <a href='matrix/lang_expr.html#R-50300-26941-55863-56023-43928-35657-09281-24931'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-50300-26941-55863-56023-43928-35657-09281-24931'>detail</a>)</i></p></dd>
+
+<dt><b>R-50324-49641-07188-15996-37030-30300-11878-30571</b></dt>
+<dd><p>When an SQL table includes an INTEGER PRIMARY KEY column (which aliases the rowid) then that column appears in the record as a NULL value.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-50324-49641-07188-15996-37030-30300-11878-30571'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-50324-49641-07188-15996-37030-30300-11878-30571'>detail</a>)</i></p></dd>
+
+<dt><b>R-50327-55469-41680-02730-23455-56699-46254-12208</b></dt>
+<dd><p>The sqlite_schema.type column will be one of the following text strings: 'table', 'index', 'view', or 'trigger' according to the type of object defined. The 'table' string is used for both ordinary and virtual tables.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-50327-55469-41680-02730-23455-56699-46254-12208'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-50327-55469-41680-02730-23455-56699-46254-12208'>detail</a>)</i></p></dd>
+
+<dt><b>R-50385-09674-49008-33764-60842-63141-30629-37607</b></dt>
+<dd><p>Value is a big-endian 48-bit twos-complement integer.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-50385-09674-49008-33764-60842-63141-30629-37607'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-50385-09674-49008-33764-60842-63141-30629-37607'>detail</a>)</i></p></dd>
+
+<dt><b>R-50436-30597-52741-48231-49256-06993-48572-34850</b></dt>
+<dd><p>The list of query parameters appended to the xOpen filename is terminated by a single zero-length key.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-50436-30597-52741-48231-49256-06993-48572-34850'>context</a>, <a href='matrix/matrix_duri.html#R-50436-30597-52741-48231-49256-06993-48572-34850'>detail</a>)</i></p></dd>
+
+<dt><b>R-50437-53270-64199-48076-12233-35385-13777-56267</b></dt>
+<dd><p>The first argument is a pointer to an sqlite3_rtree_geometry structure which provides information about how the SQL function was invoked.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/test_rtreedoc.c, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-50437-53270-64199-48076-12233-35385-13777-56267'>context</a>, <a href='matrix/matrix_drtree.html#R-50437-53270-64199-48076-12233-35385-13777-56267'>detail</a>)</i></p></dd>
+
+<dt><b>R-50442-34254-35455-58700-58965-62142-32020-28485</b></dt>
+<dd><p>For nested transactions, use the SAVEPOINT and RELEASE commands.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-50442-34254-35455-58700-58965-62142-32020-28485'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-50442-34254-35455-58700-58965-62142-32020-28485'>detail</a>)</i></p></dd>
+
+<dt><b>R-50479-29416-05730-38331-50823-03190-30140-42480</b></dt>
+<dd><p>Invoking sqlite3_soft_heap_limit64(0) when the hard heap limit is enabled makes the soft heap limit equal to the hard heap limit.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-50479-29416-05730-38331-50823-03190-30140-42480'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-50479-29416-05730-38331-50823-03190-30140-42480'>detail</a>)</i></p></dd>
+
+<dt><b>R-50479-38141-17486-25121-60764-22579-08326-61073</b></dt>
+<dd><p>The sqlite3_strglob(P,X) function is case sensitive.
+<i>(source: <a href="c3ref/strglob.html">c3ref/strglob.html</a>, checked-by: th3/cov1/glob01.test, matrix: <a href='matrix/c3ref/strglob.html#R-50479-38141-17486-25121-60764-22579-08326-61073'>context</a>, <a href='matrix/matrix_dstrglob.html#R-50479-38141-17486-25121-60764-22579-08326-61073'>detail</a>)</i></p></dd>
+
+<dt><b>R-50485-58274-46639-28890-19306-28119-49534-14014</b></dt>
+<dd><p>The first time the sqlite3_aggregate_context(C,N) routine is called for a particular aggregate function, SQLite allocates N bytes of memory, zeroes out that memory, and returns a pointer to the new memory.
+<i>(source: <a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a>, checked-by: th3/req1/aggcntx01.test, matrix: <a href='matrix/c3ref/aggregate_context.html#R-50485-58274-46639-28890-19306-28119-49534-14014'>context</a>, <a href='matrix/matrix_daggregate_context.html#R-50485-58274-46639-28890-19306-28119-49534-14014'>detail</a>)</i></p></dd>
+
+<dt><b>R-50503-22862-13388-40598-38770-05008-28550-22955</b></dt>
+<dd><p>It is harmless, apart from the wasted memory, for the sz parameter to be larger than necessary.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/cov1/main42.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-50503-22862-13388-40598-38770-05008-28550-22955'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-50503-22862-13388-40598-38770-05008-28550-22955'>detail</a>)</i></p></dd>
+
+<dt><b>R-50542-62589-12148-25496-57313-35082-62636-01906</b></dt>
+<dd><p>If the row that a BLOB handle points to is modified by an UPDATE, DELETE, or by ON CONFLICT side-effects then the BLOB handle is marked as "expired". This is true if any column of the row is changed, even a column other than the one the BLOB handle is open on.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-50542-62589-12148-25496-57313-35082-62636-01906'>context</a>, <a href='matrix/matrix_dblob_open.html#R-50542-62589-12148-25496-57313-35082-62636-01906'>detail</a>)</i></p></dd>
+
+<dt><b>R-50551-20166-10060-53242-13172-15723-06354-52489</b></dt>
+<dd><p>In any database file that contains ptrmap pages, all b-tree root pages must come before any non-root b-tree page, cell payload overflow page, or freelist page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-50551-20166-10060-53242-13172-15723-06354-52489'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-50551-20166-10060-53242-13172-15723-06354-52489'>detail</a>)</i></p></dd>
+
+<dt><b>R-50561-21716-49344-62594-61737-43195-59179-37313</b></dt>
+<dd><p>SQLITE_NOMEM is returned if malloc() fails.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-50561-21716-49344-62594-61737-43195-59179-37313'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-50561-21716-49344-62594-61737-43195-59179-37313'>detail</a>)</i></p></dd>
+
+<dt><b>R-50578-26484-60015-06758-51752-02916-33934-51751</b></dt>
+<dd><p>The default setting for auto-vacuum is 0 or "none", unless the SQLITE_DEFAULT_AUTOVACUUM compile-time option is used.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-50578-26484-60015-06758-51752-02916-33934-51751'>context</a>, <a href='matrix/matrix_dpragma.html#R-50578-26484-60015-06758-51752-02916-33934-51751'>detail</a>)</i></p></dd>
+
+<dt><b>R-50603-48655-15152-53727-63260-31520-08001-01619</b></dt>
+<dd><p>The sqlite3_preupdate_hook() interface registers a callback function that is invoked prior to each INSERT, UPDATE, and DELETE operation on a database table.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-50603-48655-15152-53727-63260-31520-08001-01619'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-50603-48655-15152-53727-63260-31520-08001-01619'>detail</a>)</i></p></dd>
+
+<dt><b>R-50610-58991-40013-53389-28738-38932-29911-53900</b></dt>
+<dd><p>Database locks obtained by a connection in EXCLUSIVE mode may be released either by closing the database connection, or by setting the locking-mode back to NORMAL using this pragma and then accessing the database file (for read or write).
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-50610-58991-40013-53389-28738-38932-29911-53900'>context</a>, <a href='matrix/matrix_dpragma.html#R-50610-58991-40013-53389-28738-38932-29911-53900'>detail</a>)</i></p></dd>
+
+<dt><b>R-50620-43692-22262-08233-20574-62920-57833-55280</b></dt>
+<dd><p>The value will be valid until the database N is DETACH-ed or until the database connection closes.
+<i>(source: <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>, matrix: <a href='matrix/c3ref/db_filename.html#R-50620-43692-22262-08233-20574-62920-57833-55280'>context</a>, <a href='matrix/matrix_ddb_filename.html#R-50620-43692-22262-08233-20574-62920-57833-55280'>detail</a>)</i></p></dd>
+
+<dt><b>R-50629-09283-02529-31024-03182-51396-04180-35688</b></dt>
+<dd><p>The trim(X,Y) function returns a string formed by removing any and all characters that appear in Y from both ends of X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-50629-09283-02529-31024-03182-51396-04180-35688'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-50629-09283-02529-31024-03182-51396-04180-35688'>detail</a>)</i></p></dd>
+
+<dt><b>R-50658-17415-26867-64238-49618-34933-22371-53108</b></dt>
+<dd><p>One is the usual increment.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-50658-17415-26867-64238-49618-34933-22371-53108'>context</a>, <a href='matrix/matrix_dautoinc.html#R-50658-17415-26867-64238-49618-34933-22371-53108'>detail</a>)</i></p></dd>
+
+<dt><b>R-50676-09860-46242-55530-65292-55859-31075-59958</b></dt>
+<dd><p>The callback can compute the same text that would have been returned by the legacy sqlite3_trace() interface by using the X argument when X begins with "--" and invoking sqlite3_expanded_sql(P) otherwise.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: src/vdbe.c, matrix: <a href='matrix/c3ref/c_trace.html#R-50676-09860-46242-55530-65292-55859-31075-59958'>context</a>, <a href='matrix/matrix_dc_trace.html#R-50676-09860-46242-55530-65292-55859-31075-59958'>detail</a>)</i></p></dd>
+
+<dt><b>R-50678-57776-62798-21946-06580-60998-12542-16606</b></dt>
+<dd><p>If Y is an empty string then return X unchanged.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-50678-57776-62798-21946-06580-60998-12542-16606'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-50678-57776-62798-21946-06580-60998-12542-16606'>detail</a>)</i></p></dd>
+
+<dt><b>R-50747-49923-21483-58514-27398-43836-46861-05011</b></dt>
+<dd><p>In WAL mode when synchronous is NORMAL (1), the WAL file is synchronized before each checkpoint and the database file is synchronized after each completed checkpoint and the WAL file header is synchronized when a WAL file begins to be reused after a checkpoint, but no sync operations occur during most transactions.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-50747-49923-21483-58514-27398-43836-46861-05011'>context</a>, <a href='matrix/matrix_dpragma.html#R-50747-49923-21483-58514-27398-43836-46861-05011'>detail</a>)</i></p></dd>
+
+<dt><b>R-50761-32325-45623-21011-38075-29398-65285-24375</b></dt>
+<dd><p>If the SQL statement being executed returns any data, then SQLITE_ROW is returned each time a new row of data is ready for processing by the caller.
+<i>(source: <a href="c3ref/step.html">c3ref/step.html</a>, matrix: <a href='matrix/c3ref/step.html#R-50761-32325-45623-21011-38075-29398-65285-24375'>context</a>, <a href='matrix/matrix_dstep.html#R-50761-32325-45623-21011-38075-29398-65285-24375'>detail</a>)</i></p></dd>
+
+<dt><b>R-50775-16353-43388-35823-42786-57944-23203-27410</b></dt>
+<dd><p>Aggregate max() returns NULL if and only if there are no non-NULL values in the group.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-50775-16353-43388-35823-42786-57944-23203-27410'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-50775-16353-43388-35823-42786-57944-23203-27410'>detail</a>)</i></p></dd>
+
+<dt><b>R-50779-31451-02741-56798-14558-26402-32929-36548</b></dt>
+<dd><p>Regardless of the compile-time or start-time settings, URI filenames can be enabled for individual database connections by including the SQLITE_OPEN_URI bit in the set of bits passed as the F parameter to sqlite3_open_v2(N,P,F,V).
+<i>(source: <a href="uri.html">uri.html</a>, checked-by: th3/th3script.c, th3/th3scriptDemo.c, matrix: <a href='matrix/uri.html#R-50779-31451-02741-56798-14558-26402-32929-36548'>context</a>, <a href='matrix/matrix_duri.html#R-50779-31451-02741-56798-14558-26402-32929-36548'>detail</a>)</i></p></dd>
+
+<dt><b>R-50786-24793-54635-21021-11581-63558-51983-08230</b></dt>
+<dd><p>The sqlite3_backup_finish() interfaces releases all resources associated with the sqlite3_backup object.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-50786-24793-54635-21021-11581-63558-51983-08230'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-50786-24793-54635-21021-11581-63558-51983-08230'>detail</a>)</i></p></dd>
+
+<dt><b>R-50811-36721-38303-45762-44578-12408-00845-45536</b></dt>
+<dd><p>Return the index of an SQL parameter given its name.
+<i>(source: <a href="c3ref/bind_parameter_index.html">c3ref/bind_parameter_index.html</a>, checked-by: th3/req1/bind03.test, matrix: <a href='matrix/c3ref/bind_parameter_index.html#R-50811-36721-38303-45762-44578-12408-00845-45536'>context</a>, <a href='matrix/matrix_dbind_parameter_index.html#R-50811-36721-38303-45762-44578-12408-00845-45536'>detail</a>)</i></p></dd>
+
+<dt><b>R-50848-12841-20813-56140-49872-26884-10100-43197</b></dt>
+<dd><p>The sqlite3_realloc(X,N) interface attempts to resize a prior memory allocation X to be at least N bytes.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-50848-12841-20813-56140-49872-26884-10100-43197'>context</a>, <a href='matrix/matrix_dfree.html#R-50848-12841-20813-56140-49872-26884-10100-43197'>detail</a>)</i></p></dd>
+
+<dt><b>R-50854-53979-53797-24039-01336-17260-53892-24252</b></dt>
+<dd><p>If the flags parameter is non-zero, then the BLOB is opened for read and write access.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_open.html#R-50854-53979-53797-24039-01336-17260-53892-24252'>context</a>, <a href='matrix/matrix_dblob_open.html#R-50854-53979-53797-24039-01336-17260-53892-24252'>detail</a>)</i></p></dd>
+
+<dt><b>R-50927-02218-50350-41045-59042-38975-34474-07107</b></dt>
+<dd><p>for cells on non-leaf nodes, that there is an entry in the %_parent table mapping from the cell's child node to the node that it resides on.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree25.test, matrix: <a href='matrix/rtree.html#R-50927-02218-50350-41045-59042-38975-34474-07107'>context</a>, <a href='matrix/matrix_drtree.html#R-50927-02218-50350-41045-59042-38975-34474-07107'>detail</a>)</i></p></dd>
+
+<dt><b>R-50943-18433-57597-04082-04676-55042-26161-32461</b></dt>
+<dd><p>Frequent inserts, updates, and deletes can cause the database file to become fragmented - where data for a single table or index is scattered around the database file.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-50943-18433-57597-04082-04676-55042-26161-32461'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-50943-18433-57597-04082-04676-55042-26161-32461'>detail</a>)</i></p></dd>
+
+<dt><b>R-50949-63870-33866-03179-22330-03090-53959-18896</b></dt>
+<dd><p>The sqlite3_preupdate_depth(D) interface returns 0 if the preupdate callback was invoked as a result of a direct insert, update, or delete operation; or 1 for inserts, updates, or deletes invoked by top-level triggers; or 2 for changes resulting from triggers called by top-level triggers; and so forth.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-50949-63870-33866-03179-22330-03090-53959-18896'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-50949-63870-33866-03179-22330-03090-53959-18896'>detail</a>)</i></p></dd>
+
+<dt><b>R-50998-48593-15923-36152-59159-51921-46950-43599</b></dt>
+<dd><p>Similarly, a CREATE TABLE IF NOT EXISTS statement is a read-only no-op if the table already exists, but sqlite3_stmt_readonly() still returns false for such a statement.
+<i>(source: <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>, checked-by: tcl/capi3d.test, th3/cov1/vdbeapi14.test, matrix: <a href='matrix/c3ref/stmt_readonly.html#R-50998-48593-15923-36152-59159-51921-46950-43599'>context</a>, <a href='matrix/matrix_dstmt_readonly.html#R-50998-48593-15923-36152-59159-51921-46950-43599'>detail</a>)</i></p></dd>
+
+<dt><b>R-51001-58728-23268-57802-19223-01595-20066-01281</b></dt>
+<dd><p>If sqlite3_malloc() fails during the processing of either routine (for example during a conversion from UTF-8 to UTF-16) then a NULL pointer is returned.
+<i>(source: <a href="c3ref/column_name.html">c3ref/column_name.html</a>, matrix: <a href='matrix/c3ref/column_name.html#R-51001-58728-23268-57802-19223-01595-20066-01281'>context</a>, <a href='matrix/matrix_dcolumn_name.html#R-51001-58728-23268-57802-19223-01595-20066-01281'>detail</a>)</i></p></dd>
+
+<dt><b>R-51011-20077-64132-12410-55765-38017-02998-57581</b></dt>
+<dd><p>The results of an ANALYZE command are only available to database connections that are opened after the ANALYZE command completes.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-51011-20077-64132-12410-55765-38017-02998-57581'>context</a>, <a href='matrix/matrix_doptoverview.html#R-51011-20077-64132-12410-55765-38017-02998-57581'>detail</a>)</i></p></dd>
+
+<dt><b>R-51014-28024-42085-28455-54203-21971-27731-22448</b></dt>
+<dd><p>The preupdate hook only fires for changes to real database tables; the preupdate hook is not invoked for changes to virtual tables or to system tables like sqlite_sequence or sqlite_stat1.
+<i>(source: <a href="c3ref/preupdate_blobwrite.html">c3ref/preupdate_blobwrite.html</a>, matrix: <a href='matrix/c3ref/preupdate_blobwrite.html#R-51014-28024-42085-28455-54203-21971-27731-22448'>context</a>, <a href='matrix/matrix_dpreupdate_blobwrite.html#R-51014-28024-42085-28455-54203-21971-27731-22448'>detail</a>)</i></p></dd>
+
+<dt><b>R-51039-44840-65130-09775-42940-11077-05048-04287</b></dt>
+<dd><p>The foreign key declared as part of table child4 is an error because even though the parent key column is indexed, the index is not UNIQUE.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-51039-44840-65130-09775-42940-11077-05048-04287'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-51039-44840-65130-09775-42940-11077-05048-04287'>detail</a>)</i></p></dd>
+
+<dt><b>R-51070-59303-35224-08762-04161-61049-26155-15772</b></dt>
+<dd><p>There is one entry in the %_node table for each R*Tree node.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq04.test, matrix: <a href='matrix/rtree.html#R-51070-59303-35224-08762-04161-61049-26155-15772'>context</a>, <a href='matrix/matrix_drtree.html#R-51070-59303-35224-08762-04161-61049-26155-15772'>detail</a>)</i></p></dd>
+
+<dt><b>R-51077-27219-05589-60630-09467-24342-14957-57780</b></dt>
+<dd><p>The sqlite3_bind_parameter_name(P,N) interface returns the name of the N-th SQL parameter in the prepared statement P.
+<i>(source: <a href="c3ref/bind_parameter_name.html">c3ref/bind_parameter_name.html</a>, checked-by: th3/req1/bind04.test, matrix: <a href='matrix/c3ref/bind_parameter_name.html#R-51077-27219-05589-60630-09467-24342-14957-57780'>context</a>, <a href='matrix/matrix_dbind_parameter_name.html#R-51077-27219-05589-60630-09467-24342-14957-57780'>detail</a>)</i></p></dd>
+
+<dt><b>R-51090-01319-14064-12731-11996-25271-12036-18507</b></dt>
+<dd><p>To specify a ROWID manually, just include it in the list of values to be inserted. For example: CREATE TABLE test1(a INT, b TEXT); INSERT INTO test1(rowid, a, b) VALUES(123, 5, 'hello');
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-51090-01319-14064-12731-11996-25271-12036-18507'>context</a>, <a href='matrix/matrix_dautoinc.html#R-51090-01319-14064-12731-11996-25271-12036-18507'>detail</a>)</i></p></dd>
+
+<dt><b>R-51132-22354-55296-53634-47929-60689-49370-19301</b></dt>
+<dd><p>The fragment is optional. If present, it is ignored.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-51132-22354-55296-53634-47929-60689-49370-19301'>context</a>, <a href='matrix/matrix_duri.html#R-51132-22354-55296-53634-47929-60689-49370-19301'>detail</a>)</i></p></dd>
+
+<dt><b>R-51136-58806-61234-62019-55007-59360-42389-06217</b></dt>
+<dd><p>The SQLITE_CONFIG_GETMUTEX option takes a single argument which is a pointer to an instance of the sqlite3_mutex_methods structure. The sqlite3_mutex_methods structure is filled with the currently defined mutex routines.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-51136-58806-61234-62019-55007-59360-42389-06217'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-51136-58806-61234-62019-55007-59360-42389-06217'>detail</a>)</i></p></dd>
+
+<dt><b>R-51188-10511-53486-13467-33183-09537-36166-58492</b></dt>
+<dd><p>In a well-formed database, all children of an interior b-tree have the same depth.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-51188-10511-53486-13467-33183-09537-36166-58492'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-51188-10511-53486-13467-33183-09537-36166-58492'>detail</a>)</i></p></dd>
+
+<dt><b>R-51202-43754-48199-60556-57882-64692-40949-61434</b></dt>
+<dd><p>The last transaction started will be the first transaction committed or rolled back.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-51202-43754-48199-60556-57882-64692-40949-61434'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-51202-43754-48199-60556-57882-64692-40949-61434'>detail</a>)</i></p></dd>
+
+<dt><b>R-51206-57397-04624-50040-55912-00290-07116-44966</b></dt>
+<dd><p>The sqlite3_result_int() interface sets the return value of the application-defined function to be the 32-bit signed integer value given in the 2nd argument.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-51206-57397-04624-50040-55912-00290-07116-44966'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-51206-57397-04624-50040-55912-00290-07116-44966'>detail</a>)</i></p></dd>
+
+<dt><b>R-51213-46414-44836-21808-03706-65472-27222-00802</b></dt>
+<dd><p>The SQLITE_CONFIG_GETMALLOC option takes a single argument which is a pointer to an instance of the sqlite3_mem_methods structure. The sqlite3_mem_methods structure is filled with the currently defined memory allocation routines.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3oom.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-51213-46414-44836-21808-03706-65472-27222-00802'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-51213-46414-44836-21808-03706-65472-27222-00802'>detail</a>)</i></p></dd>
+
+<dt><b>R-51232-50224-58506-40920-61688-18757-44131-05457</b></dt>
+<dd><p>The collation sequence used to compare two text values is determined as if the columns of the left and right-hand SELECT statements were the left and right-hand operands of the equals (=) operator, except that greater precedence is not assigned to a collation sequence specified with the postfix COLLATE operator.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-51232-50224-58506-40920-61688-18757-44131-05457'>context</a>, <a href='matrix/matrix_dlang_select.html#R-51232-50224-58506-40920-61688-18757-44131-05457'>detail</a>)</i></p></dd>
+
+<dt><b>R-51243-03259-14628-62602-22056-51212-17455-10922</b></dt>
+<dd><p>Otherwise, the BINARY collating function is used for comparison.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-51243-03259-14628-62602-22056-51212-17455-10922'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-51243-03259-14628-62602-22056-51212-17455-10922'>detail</a>)</i></p></dd>
+
+<dt><b>R-51247-30732-42040-45560-24413-23058-07649-15585</b></dt>
+<dd><p>The subquery is not DISTINCT.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-51247-30732-42040-45560-24413-23058-07649-15585'>context</a>, <a href='matrix/matrix_doptoverview.html#R-51247-30732-42040-45560-24413-23058-07649-15585'>detail</a>)</i></p></dd>
+
+<dt><b>R-51255-43746-15106-11095-25505-08076-41908-14797</b></dt>
+<dd><p>For example, given the database schema: CREATE TABLE t1(c1 VARIANT); and the following statement to be compiled: SELECT c1 + 1, c1 FROM t1; this routine would return the string "VARIANT" for the second result column (i==1), and a NULL pointer for the first result column (i==0).
+<i>(source: <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a>, matrix: <a href='matrix/c3ref/column_decltype.html#R-51255-43746-15106-11095-25505-08076-41908-14797'>context</a>, <a href='matrix/matrix_dcolumn_decltype.html#R-51255-43746-15106-11095-25505-08076-41908-14797'>detail</a>)</i></p></dd>
+
+<dt><b>R-51278-32108-12212-46077-36246-55134-53199-48747</b></dt>
+<dd><p>SQLite interprets the error message string from sqlite3_result_error() as UTF-8.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-51278-32108-12212-46077-36246-55134-53199-48747'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-51278-32108-12212-46077-36246-55134-53199-48747'>detail</a>)</i></p></dd>
+
+<dt><b>R-51280-49561-27340-30722-26024-36446-47802-45698</b></dt>
+<dd><p>Generated columns work the same.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/cov1/gencol01.test, th3/cov1/gencol02.test, th3/cov1/gencol04.test, matrix: <a href='matrix/stricttables.html#R-51280-49561-27340-30722-26024-36446-47802-45698'>context</a>, <a href='matrix/matrix_dstricttables.html#R-51280-49561-27340-30722-26024-36446-47802-45698'>detail</a>)</i></p></dd>
+
+<dt><b>R-51285-50643-24260-37588-20138-27920-05712-56972</b></dt>
+<dd><p>To be usable by an index a term must usually be of one of the following forms: column = expression column IS expression column > expression column >= expression column < expression column <= expression expression = column expression > column expression >= column expression < column expression <= column column IN (expression-list) column IN (subquery) column IS NULL column LIKE pattern column GLOB pattern
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-51285-50643-24260-37588-20138-27920-05712-56972'>context</a>, <a href='matrix/matrix_doptoverview.html#R-51285-50643-24260-37588-20138-27920-05712-56972'>detail</a>)</i></p></dd>
+
+<dt><b>R-51288-13280-04102-45116-03468-31022-16818-18887</b></dt>
+<dd><p>PRAGMA schema.synchronous; PRAGMA schema.synchronous = 0 | OFF | 1 | NORMAL | 2 | FULL | 3 | EXTRA; Query or change the setting of the "synchronous" flag.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-51288-13280-04102-45116-03468-31022-16818-18887'>context</a>, <a href='matrix/matrix_dpragma.html#R-51288-13280-04102-45116-03468-31022-16818-18887'>detail</a>)</i></p></dd>
+
+<dt><b>R-51332-60960-52674-22540-45151-35167-25354-18137</b></dt>
+<dd><p>Zero or more escape sequences of the form "%HH" (where H represents any hexadecimal digit) can occur in the path, query string, or fragment.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-51332-60960-52674-22540-45151-35167-25354-18137'>context</a>, <a href='matrix/matrix_duri.html#R-51332-60960-52674-22540-45151-35167-25354-18137'>detail</a>)</i></p></dd>
+
+<dt><b>R-51343-23764-31964-03774-37293-59817-59078-38155</b></dt>
+<dd><p>This technique allows multiple concurrent readers to view different versions of the database content simultaneously.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-51343-23764-31964-03774-37293-59817-59078-38155'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-51343-23764-31964-03774-37293-59817-59078-38155'>detail</a>)</i></p></dd>
+
+<dt><b>R-51358-63229-53880-11808-10105-25877-37226-63676</b></dt>
+<dd><p>If the default VFS is unregistered, another VFS is chosen as the default. The choice for the new VFS is arbitrary.
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-51358-63229-53880-11808-10105-25877-37226-63676'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-51358-63229-53880-11808-10105-25877-37226-63676'>detail</a>)</i></p></dd>
+
+<dt><b>R-51359-17496-64791-11531-01433-14001-31199-61206</b></dt>
+<dd><p>The infix LIKE operator is implemented by calling the application-defined SQL functions like(Y,X) or like(Y,X,Z).
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-51359-17496-64791-11531-01433-14001-31199-61206'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-51359-17496-64791-11531-01433-14001-31199-61206'>detail</a>)</i></p></dd>
+
+<dt><b>R-51370-13632-41258-48157-25813-10718-36175-44493</b></dt>
+<dd><p>If the integer at offset 52 is zero then pointer-map (ptrmap) pages are omitted from the database file and neither auto_vacuum nor incremental_vacuum are supported.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-51370-13632-41258-48157-25813-10718-36175-44493'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-51370-13632-41258-48157-25813-10718-36175-44493'>detail</a>)</i></p></dd>
+
+<dt><b>R-51414-32910-11625-05562-19787-23325-64160-35214</b></dt>
+<dd><p>Except for WITHOUT ROWID tables, all rows within SQLite tables have a 64-bit signed integer key that uniquely identifies the row within its table.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: src/resolve.c, matrix: <a href='matrix/lang_createtable.html#R-51414-32910-11625-05562-19787-23325-64160-35214'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-51414-32910-11625-05562-19787-23325-64160-35214'>detail</a>)</i></p></dd>
+
+<dt><b>R-51415-29417-45054-21593-06367-21314-00949-64320</b></dt>
+<dd><p>Within a single database connection X, a SELECT statement always sees all changes to the database that are completed prior to the start of the SELECT statement, whether committed or uncommitted.
+<i>(source: <a href="isolation.html">isolation.html</a>, matrix: <a href='matrix/isolation.html#R-51415-29417-45054-21593-06367-21314-00949-64320'>context</a>, <a href='matrix/matrix_disolation.html#R-51415-29417-45054-21593-06367-21314-00949-64320'>detail</a>)</i></p></dd>
+
+<dt><b>R-51445-09984-56297-19281-17742-25631-52037-59978</b></dt>
+<dd><p>The return value of the sqlite3_threadsafe() function shows only the compile-time setting of thread safety, not any run-time changes to that setting made by sqlite3_config(). In other words, the return value from sqlite3_threadsafe() is unchanged by calls to sqlite3_config().
+<i>(source: <a href="c3ref/threadsafe.html">c3ref/threadsafe.html</a>, checked-by: th3/th3main.c, matrix: <a href='matrix/c3ref/threadsafe.html#R-51445-09984-56297-19281-17742-25631-52037-59978'>context</a>, <a href='matrix/matrix_dthreadsafe.html#R-51445-09984-56297-19281-17742-25631-52037-59978'>detail</a>)</i></p></dd>
+
+<dt><b>R-51463-25634-03361-45717-43677-30720-21925-17287</b></dt>
+<dd><p>Attempts to increase a limit above its hard upper bound are silently truncated to the hard upper bound.
+<i>(source: <a href="c3ref/limit.html">c3ref/limit.html</a>, checked-by: src/main.c, th3/req1/limit01.test, matrix: <a href='matrix/c3ref/limit.html#R-51463-25634-03361-45717-43677-30720-21925-17287'>context</a>, <a href='matrix/matrix_dlimit.html#R-51463-25634-03361-45717-43677-30720-21925-17287'>detail</a>)</i></p></dd>
+
+<dt><b>R-51469-36013-06451-37309-14378-27141-44520-41230</b></dt>
+<dd><p>Unless SQLite is running in "auto_vacuum=FULL" mode, when a large amount of data is deleted from the database file it leaves behind empty space, or "free" database pages.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-51469-36013-06451-37309-14378-27141-44520-41230'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-51469-36013-06451-37309-14378-27141-44520-41230'>detail</a>)</i></p></dd>
+
+<dt><b>R-51513-12026-58956-15151-33280-52344-26081-14635</b></dt>
+<dd><p>The last_insert_rowid() SQL function is a wrapper around the sqlite3_last_insert_rowid() C/C++ interface function.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, matrix: <a href='matrix/lang_corefunc.html#R-51513-12026-58956-15151-33280-52344-26081-14635'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-51513-12026-58956-15151-33280-52344-26081-14635'>detail</a>)</i></p></dd>
+
+<dt><b>R-51517-40824-40012-37469-09201-20241-42443-20040</b></dt>
+<dd><p>If a REAL is greater than the greatest possible signed integer (+9223372036854775807) then the result is the greatest possible signed integer and if the REAL is less than the least possible signed integer (-9223372036854775808) then the result is the least possible signed integer.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-51517-40824-40012-37469-09201-20241-42443-20040'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-51517-40824-40012-37469-09201-20241-42443-20040'>detail</a>)</i></p></dd>
+
+<dt><b>R-51594-01886-40324-04229-65116-14684-49683-32490</b></dt>
+<dd><p>The blocked connections unlock-notify callback may also be canceled by closing the blocked connection using sqlite3_close().
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-51594-01886-40324-04229-65116-14684-49683-32490'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-51594-01886-40324-04229-65116-14684-49683-32490'>detail</a>)</i></p></dd>
+
+<dt><b>R-51608-43497-31902-60107-31973-18527-41260-25807</b></dt>
+<dd><p>However, if SQLite is compiled with the SQLITE_OMIT_AUTOINIT compile-time option, then the automatic calls to sqlite3_initialize() are omitted and the application must call sqlite3_initialize() directly prior to using any other SQLite interface.
+<i>(source: <a href="c3ref/initialize.html">c3ref/initialize.html</a>, matrix: <a href='matrix/c3ref/initialize.html#R-51608-43497-31902-60107-31973-18527-41260-25807'>context</a>, <a href='matrix/matrix_dinitialize.html#R-51608-43497-31902-60107-31973-18527-41260-25807'>detail</a>)</i></p></dd>
+
+<dt><b>R-51683-37067-53622-45311-56999-04047-27955-39232</b></dt>
+<dd><p>The following table details the conversions that are applied: InternalType RequestedType Conversion NULL INTEGER Result is 0 NULL FLOAT Result is 0.0 NULL TEXT Result is a NULL pointer NULL BLOB Result is a NULL pointer INTEGER FLOAT Convert from integer to float INTEGER TEXT ASCII rendering of the integer INTEGER BLOB Same as INTEGER->TEXT FLOAT INTEGER CAST to INTEGER FLOAT TEXT ASCII rendering of the float FLOAT BLOB CAST to BLOB TEXT INTEGER CAST to INTEGER TEXT FLOAT CAST to REAL TEXT BLOB No change BLOB INTEGER CAST to INTEGER BLOB FLOAT CAST to REAL BLOB TEXT CAST to TEXT, ensure zero terminator
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column02.test, matrix: <a href='matrix/c3ref/column_blob.html#R-51683-37067-53622-45311-56999-04047-27955-39232'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-51683-37067-53622-45311-56999-04047-27955-39232'>detail</a>)</i></p></dd>
+
+<dt><b>R-51689-46548-01385-34358-38620-06240-42232-09514</b></dt>
+<dd><p>If URI handling is globally enabled, all filenames passed to sqlite3_open(), sqlite3_open_v2(), sqlite3_open16() or specified as part of ATTACH commands are interpreted as URIs, regardless of whether or not the SQLITE_OPEN_URI flag is set when the database connection is opened.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-51689-46548-01385-34358-38620-06240-42232-09514'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-51689-46548-01385-34358-38620-06240-42232-09514'>detail</a>)</i></p></dd>
+
+<dt><b>R-51698-09302-57495-51617-34464-63477-12867-40927</b></dt>
+<dd><p>The <name> is the name your application chooses for the R*Tree index and <column-names> is a comma separated list of between 3 and 11 columns.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-51698-09302-57495-51617-34464-63477-12867-40927'>context</a>, <a href='matrix/matrix_drtree.html#R-51698-09302-57495-51617-34464-63477-12867-40927'>detail</a>)</i></p></dd>
+
+<dt><b>R-51717-16874-57746-23780-03416-60181-48500-48749</b></dt>
+<dd><p>The sqlite3_value objects that are passed as parameters into the implementation of application-defined SQL functions are protected.
+<i>(source: <a href="c3ref/value.html">c3ref/value.html</a>, checked-by: th3/req1/value01.test, matrix: <a href='matrix/c3ref/value.html#R-51717-16874-57746-23780-03416-60181-48500-48749'>context</a>, <a href='matrix/matrix_dvalue.html#R-51717-16874-57746-23780-03416-60181-48500-48749'>detail</a>)</i></p></dd>
+
+<dt><b>R-51733-58667-21298-61463-51769-00827-24918-26200</b></dt>
+<dd><p>The sqlite_schema.name column will hold the name of the object.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-51733-58667-21298-61463-51769-00827-24918-26200'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-51733-58667-21298-61463-51769-00827-24918-26200'>detail</a>)</i></p></dd>
+
+<dt><b>R-51848-06142-00211-08018-28076-33620-42817-53867</b></dt>
+<dd><p>When grouping values with the GROUP BY clause values with different storage classes are considered distinct, except for INTEGER and REAL values which are considered equal if they are numerically equal.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_07.test, matrix: <a href='matrix/datatype3.html#R-51848-06142-00211-08018-28076-33620-42817-53867'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-51848-06142-00211-08018-28076-33620-42817-53867'>detail</a>)</i></p></dd>
+
+<dt><b>R-51849-15852-01721-49206-07191-28976-11047-33073</b></dt>
+<dd><p>This routine can be used to find the number of SQL parameters in a prepared statement.
+<i>(source: <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a>, checked-by: th3/req1/bindparamcnt01.test, matrix: <a href='matrix/c3ref/bind_parameter_count.html#R-51849-15852-01721-49206-07191-28976-11047-33073'>context</a>, <a href='matrix/matrix_dbind_parameter_count.html#R-51849-15852-01721-49206-07191-28976-11047-33073'>detail</a>)</i></p></dd>
+
+<dt><b>R-51867-44713-01499-65438-22037-17014-32940-19082</b></dt>
+<dd><p>This mode blocks new database writers while it is pending, but new database readers are allowed to continue unimpeded.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-51867-44713-01499-65438-22037-17014-32940-19082'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-51867-44713-01499-65438-22037-17014-32940-19082'>detail</a>)</i></p></dd>
+
+<dt><b>R-51873-39618-36887-07740-29910-44227-64994-45614</b></dt>
+<dd><p>The page size for a database file is determined by the 2-byte integer located at an offset of 16 bytes from the beginning of the database file.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-51873-39618-36887-07740-29910-44227-64994-45614'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-51873-39618-36887-07740-29910-44227-64994-45614'>detail</a>)</i></p></dd>
+
+<dt><b>R-51885-22945-13735-45717-24021-29019-43116-06433</b></dt>
+<dd><p>If the fourth parameter is a NULL pointer then the default sqlite3_vfs object is used.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-51885-22945-13735-45717-24021-29019-43116-06433'>context</a>, <a href='matrix/matrix_dopen.html#R-51885-22945-13735-45717-24021-29019-43116-06433'>detail</a>)</i></p></dd>
+
+<dt><b>R-51885-42713-13450-15041-37294-08802-56652-50878</b></dt>
+<dd><p>If an sqlite3 object is destroyed while a transaction is open, the transaction is automatically rolled back.
+<i>(source: <a href="c3ref/close.html">c3ref/close.html</a>, checked-by: th3/cov1/main23.test, matrix: <a href='matrix/c3ref/close.html#R-51885-42713-13450-15041-37294-08802-56652-50878'>context</a>, <a href='matrix/matrix_dclose.html#R-51885-42713-13450-15041-37294-08802-56652-50878'>detail</a>)</i></p></dd>
+
+<dt><b>R-51971-34154-03806-52008-63597-27653-22801-35864</b></dt>
+<dd><p>A value of 3 means UTF-16be.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat03.test, matrix: <a href='matrix/fileformat2.html#R-51971-34154-03806-52008-63597-27653-22801-35864'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-51971-34154-03806-52008-63597-27653-22801-35864'>detail</a>)</i></p></dd>
+
+<dt><b>R-51988-01124-61073-07192-64442-28469-58291-20254</b></dt>
+<dd><p>The single row of result-set data created by evaluating the aggregate and non-aggregate expressions in the result-set forms the result of an aggregate query without a GROUP BY clause.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-51988-01124-61073-07192-64442-28469-58291-20254'>context</a>, <a href='matrix/matrix_dlang_select.html#R-51988-01124-61073-07192-64442-28469-58291-20254'>detail</a>)</i></p></dd>
+
+<dt><b>R-52009-56800-02876-38410-52331-04439-27959-64251</b></dt>
+<dd><p>When the same named SQL parameter is used more than once, second and subsequent occurrences have the same index as the first occurrence.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-52009-56800-02876-38410-52331-04439-27959-64251'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-52009-56800-02876-38410-52331-04439-27959-64251'>detail</a>)</i></p></dd>
+
+<dt><b>R-52032-06717-09203-13355-40298-11149-14076-60739</b></dt>
+<dd><p>This means, for example, that if you try to give a column a type affinity or add a constraint such as UNIQUE or NOT NULL or DEFAULT to a column, those extra tokens are accepted as valid, but they do not change the behavior of the rtree.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree17.test, matrix: <a href='matrix/rtree.html#R-52032-06717-09203-13355-40298-11149-14076-60739'>context</a>, <a href='matrix/matrix_drtree.html#R-52032-06717-09203-13355-40298-11149-14076-60739'>detail</a>)</i></p></dd>
+
+<dt><b>R-52058-53560-05683-08265-32399-18917-51840-34472</b></dt>
+<dd><p>The difference between this pragma and cache_size is that the value set here persists across database connections.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma09.test, matrix: <a href='matrix/pragma.html#R-52058-53560-05683-08265-32399-18917-51840-34472'>context</a>, <a href='matrix/matrix_dpragma.html#R-52058-53560-05683-08265-32399-18917-51840-34472'>detail</a>)</i></p></dd>
+
+<dt><b>R-52064-29026-64235-14547-56898-38639-53411-40731</b></dt>
+<dd><p>Then valid content of the WAL is transferred into the database file.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-52064-29026-64235-14547-56898-38639-53411-40731'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-52064-29026-64235-14547-56898-38639-53411-40731'>detail</a>)</i></p></dd>
+
+<dt><b>R-52075-50256-20099-08079-26279-42286-42612-03538</b></dt>
+<dd><p>WAL databases can be accessed in EXCLUSIVE mode without the use of shared memory.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma05.test, matrix: <a href='matrix/pragma.html#R-52075-50256-20099-08079-26279-42286-42612-03538'>context</a>, <a href='matrix/matrix_dpragma.html#R-52075-50256-20099-08079-26279-42286-42612-03538'>detail</a>)</i></p></dd>
+
+<dt><b>R-52087-12043-18539-27674-65294-02537-52169-03316</b></dt>
+<dd><p>The GLOB operator is similar to LIKE but uses the Unix file globbing syntax for its wildcards.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-52087-12043-18539-27674-65294-02537-52169-03316'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-52087-12043-18539-27674-65294-02537-52169-03316'>detail</a>)</i></p></dd>
+
+<dt><b>R-52112-44167-29557-32082-32253-19519-12143-63610</b></dt>
+<dd><p>Disable the authorizer by installing a NULL callback.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: tcl/auth.test, th3/cov1/auth01.test, matrix: <a href='matrix/c3ref/set_authorizer.html#R-52112-44167-29557-32082-32253-19519-12143-63610'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-52112-44167-29557-32082-32253-19519-12143-63610'>detail</a>)</i></p></dd>
+
+<dt><b>R-52129-05406-09638-18525-56854-38344-25069-09729</b></dt>
+<dd><p>you can say things like "OUTER LEFT NATURAL JOIN" which means the same as "NATURAL LEFT OUTER JOIN".
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/join.test, matrix: <a href='matrix/lang_select.html#R-52129-05406-09638-18525-56854-38344-25069-09729'>context</a>, <a href='matrix/matrix_dlang_select.html#R-52129-05406-09638-18525-56854-38344-25069-09729'>detail</a>)</i></p></dd>
+
+<dt><b>R-52129-08912-02677-16711-14942-51135-37066-54539</b></dt>
+<dd><p>Otherwise the two pragmas are the same.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-52129-08912-02677-16711-14942-51135-37066-54539'>context</a>, <a href='matrix/matrix_dpragma.html#R-52129-08912-02677-16711-14942-51135-37066-54539'>detail</a>)</i></p></dd>
+
+<dt><b>R-52150-45231-03638-58304-20308-49186-22409-26658</b></dt>
+<dd><p>~&nbsp;&lsqb;expr&rsqb;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;&lsqb;expr&rsqb;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&lsqb;expr&rsqb;
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-52150-45231-03638-58304-20308-49186-22409-26658'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-52150-45231-03638-58304-20308-49186-22409-26658'>detail</a>)</i></p></dd>
+
+<dt><b>R-52155-58082-26086-07987-14656-12581-61413-44017</b></dt>
+<dd><p>The database file is truncated by the same amount.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma21.test, matrix: <a href='matrix/pragma.html#R-52155-58082-26086-07987-14656-12581-61413-44017'>context</a>, <a href='matrix/matrix_dpragma.html#R-52155-58082-26086-07987-14656-12581-61413-44017'>detail</a>)</i></p></dd>
+
+<dt><b>R-52173-30215-53600-04024-57111-07523-42614-02715</b></dt>
+<dd><p>A new entry is inserted into the table for each row of data returned by executing the SELECT statement.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-52173-30215-53600-04024-57111-07523-42614-02715'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-52173-30215-53600-04024-57111-07523-42614-02715'>detail</a>)</i></p></dd>
+
+<dt><b>R-52173-44778-34853-40579-46358-28940-10008-53316</b></dt>
+<dd><p>The REINDEX command is used to delete and recreate indices from scratch.
+<i>(source: <a href="lang_reindex.html">lang_reindex.html</a>, checked-by: tcl/e_reindex.test, matrix: <a href='matrix/lang_reindex.html#R-52173-44778-34853-40579-46358-28940-10008-53316'>context</a>, <a href='matrix/matrix_dlang_reindex.html#R-52173-44778-34853-40579-46358-28940-10008-53316'>detail</a>)</i></p></dd>
+
+<dt><b>R-52199-53720-48820-63672-32555-08461-14999-59627</b></dt>
+<dd><p>The sqlite3_value object returned in *V is a protected sqlite3_value and remains valid for the duration of the xBestIndex method call.
+<i>(source: <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>, matrix: <a href='matrix/c3ref/vtab_rhs_value.html#R-52199-53720-48820-63672-32555-08461-14999-59627'>context</a>, <a href='matrix/matrix_dvtab_rhs_value.html#R-52199-53720-48820-63672-32555-08461-14999-59627'>detail</a>)</i></p></dd>
+
+<dt><b>R-52219-37966-04646-12994-22275-64637-40649-18825</b></dt>
+<dd><p>The "const char *" variable pointed to by the V parameter will be set to a zero-terminated UTF-8 string containing the EXPLAIN QUERY PLAN description for the X-th loop.
+<i>(source: <a href="c3ref/c_scanstat_est.html">c3ref/c_scanstat_est.html</a>, checked-by: th3/cov1/status02.test, matrix: <a href='matrix/c3ref/c_scanstat_est.html#R-52219-37966-04646-12994-22275-64637-40649-18825'>context</a>, <a href='matrix/matrix_dc_scanstat_est.html#R-52219-37966-04646-12994-22275-64637-40649-18825'>detail</a>)</i></p></dd>
+
+<dt><b>R-52226-38079-47944-26138-22485-09785-27030-51163</b></dt>
+<dd><p>Default implementations for these functions perform JSON subcomponent extraction, but extensions can override them for other purposes.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-52226-38079-47944-26138-22485-09785-27030-51163'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-52226-38079-47944-26138-22485-09785-27030-51163'>detail</a>)</i></p></dd>
+
+<dt><b>R-52227-24890-51100-17044-40956-25330-61806-31356</b></dt>
+<dd><p>At this time SQLite supports only FOR EACH ROW triggers, not FOR EACH STATEMENT triggers.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-52227-24890-51100-17044-40956-25330-61806-31356'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-52227-24890-51100-17044-40956-25330-61806-31356'>detail</a>)</i></p></dd>
+
+<dt><b>R-52275-20321-01403-45171-16511-11521-16103-23832</b></dt>
+<dd><p>However, special processing applies to the ON and USING clauses of an OUTER join: specifically, the constraints in an ON or USING clause do not apply if the right table of the join is on a null row, but the constraints do apply in the WHERE clause.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-52275-20321-01403-45171-16511-11521-16103-23832'>context</a>, <a href='matrix/matrix_doptoverview.html#R-52275-20321-01403-45171-16511-11521-16103-23832'>detail</a>)</i></p></dd>
+
+<dt><b>R-52275-55503-36173-27620-56866-61017-01277-04274</b></dt>
+<dd><p>When the right operand is an empty set, the result of IN is false and the result of NOT IN is true, regardless of the left operand and even if the left operand is NULL.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/tkt-80e031a00f.test, matrix: <a href='matrix/lang_expr.html#R-52275-55503-36173-27620-56866-61017-01277-04274'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-52275-55503-36173-27620-56866-61017-01277-04274'>detail</a>)</i></p></dd>
+
+<dt><b>R-52293-58497-02008-48685-44667-03336-29126-34066</b></dt>
+<dd><p>If this option is set to an empty string the default VFS object is used.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-52293-58497-02008-48685-44667-03336-29126-34066'>context</a>, <a href='matrix/matrix_dopen.html#R-52293-58497-02008-48685-44667-03336-29126-34066'>detail</a>)</i></p></dd>
+
+<dt><b>R-52324-13814-42283-42747-08778-19058-01136-41555</b></dt>
+<dd><p>If the resetFlg is true, then the counter is reset to zero after this interface call returns.
+<i>(source: <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a>, matrix: <a href='matrix/c3ref/stmt_status.html#R-52324-13814-42283-42747-08778-19058-01136-41555'>context</a>, <a href='matrix/matrix_dstmt_status.html#R-52324-13814-42283-42747-08778-19058-01136-41555'>detail</a>)</i></p></dd>
+
+<dt><b>R-52325-25449-60499-51336-30088-24450-41754-02274</b></dt>
+<dd><p>The value of a subquery expression is NULL if the enclosed SELECT statement returns no rows.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-52325-25449-60499-51336-30088-24450-41754-02274'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-52325-25449-60499-51336-30088-24450-41754-02274'>detail</a>)</i></p></dd>
+
+<dt><b>R-52382-54248-22062-55622-65270-38332-60427-10536</b></dt>
+<dd><p>Each table in SQLite may have at most one PRIMARY KEY.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-52382-54248-22062-55622-65270-38332-60427-10536'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-52382-54248-22062-55622-65270-38332-60427-10536'>detail</a>)</i></p></dd>
+
+<dt><b>R-52422-13996-14748-65406-33477-57912-42976-47996</b></dt>
+<dd><p>This optimization is completely invisible at the SQL level and can only be detected by examining the raw bits of the database file.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_12.test, matrix: <a href='matrix/datatype3.html#R-52422-13996-14748-65406-33477-57912-42976-47996'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-52422-13996-14748-65406-33477-57912-42976-47996'>detail</a>)</i></p></dd>
+
+<dt><b>R-52436-31752-34647-62444-09688-32062-53340-29522</b></dt>
+<dd><p>The column is a PRIMARY KEY or part of one.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: tcl/alterdropcol2.test, th3/cov1/altertable25.test, matrix: <a href='matrix/lang_altertable.html#R-52436-31752-34647-62444-09688-32062-53340-29522'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-52436-31752-34647-62444-09688-32062-53340-29522'>detail</a>)</i></p></dd>
+
+<dt><b>R-52476-28732-49113-60930-43191-11602-63829-33469</b></dt>
+<dd><p>If the new limit is a negative number, the limit is unchanged.
+<i>(source: <a href="c3ref/limit.html">c3ref/limit.html</a>, checked-by: src/main.c, th3/req1/limit01.test, matrix: <a href='matrix/c3ref/limit.html#R-52476-28732-49113-60930-43191-11602-63829-33469'>context</a>, <a href='matrix/matrix_dlimit.html#R-52476-28732-49113-60930-43191-11602-63829-33469'>detail</a>)</i></p></dd>
+
+<dt><b>R-52479-14335-30324-56170-28904-55659-58035-31825</b></dt>
+<dd><p>If the sqlite_sequence row for an AUTOINCREMENT table does not exist when the AUTOINCREMENT table is updated, then a new sqlite_sequence row is created.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-52479-14335-30324-56170-28904-55659-58035-31825'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-52479-14335-30324-56170-28904-55659-58035-31825'>detail</a>)</i></p></dd>
+
+<dt><b>R-52486-21352-15520-42418-18389-29845-28843-27004</b></dt>
+<dd><p>Expressed in SQL, this means that for every row in the track table, the following expression evaluates to true: trackartist IS NULL OR EXISTS(SELECT 1 FROM artist WHERE artistid=trackartist)
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys01.test, matrix: <a href='matrix/foreignkeys.html#R-52486-21352-15520-42418-18389-29845-28843-27004'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-52486-21352-15520-42418-18389-29845-28843-27004'>detail</a>)</i></p></dd>
+
+<dt><b>R-52494-36749-63981-51564-54926-02873-46485-09219</b></dt>
+<dd><p>SQLITE_DBSTATUS_CACHE_WRITE This parameter returns the number of dirty cache entries that have been written to disk. Specifically, the number of pages written to the wal file in wal mode databases, or the number of pages written to the database file in rollback mode databases. Any pages written as part of transaction rollback or database recovery operations are not included. If an IO or other error occurs while writing a page to disk, the effect on subsequent SQLITE_DBSTATUS_CACHE_WRITE requests is undefined.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-52494-36749-63981-51564-54926-02873-46485-09219'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-52494-36749-63981-51564-54926-02873-46485-09219'>detail</a>)</i></p></dd>
+
+<dt><b>R-52502-32617-59424-01442-19182-34788-24122-07279</b></dt>
+<dd><p>If a suffix is added to the zFilename parameter, it will consist of a single "-" character followed by no more than 11 alphanumeric and/or "-" characters.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-52502-32617-59424-01442-19182-34788-24122-07279'>context</a>, <a href='matrix/matrix_dvfs.html#R-52502-32617-59424-01442-19182-34788-24122-07279'>detail</a>)</i></p></dd>
+
+<dt><b>R-52554-26776-48251-05833-19057-37824-14862-46518</b></dt>
+<dd><p>One of the features of PRAGMA writable_schema=ON is that it disables errors in the schema parser.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq02.test, matrix: <a href='matrix/stricttables.html#R-52554-26776-48251-05833-19057-37824-14862-46518'>context</a>, <a href='matrix/matrix_dstricttables.html#R-52554-26776-48251-05833-19057-37824-14862-46518'>detail</a>)</i></p></dd>
+
+<dt><b>R-52572-02078-29727-01284-61421-00978-11983-52043</b></dt>
+<dd><p>For the purposes of determining the uniqueness of primary key values, NULL values are considered distinct from all other values, including other NULLs.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-52572-02078-29727-01284-61421-00978-11983-52043'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-52572-02078-29727-01284-61421-00978-11983-52043'>detail</a>)</i></p></dd>
+
+<dt><b>R-52584-04009-09183-39351-22068-55932-63814-54169</b></dt>
+<dd><p>The rowid value can be accessed using one of the special case-independent names "rowid", "oid", or "_rowid_" in place of a column name.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-52584-04009-09183-39351-22068-55932-63814-54169'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-52584-04009-09183-39351-22068-55932-63814-54169'>detail</a>)</i></p></dd>
+
+<dt><b>R-52585-35928-11217-60344-47086-04619-13740-01929</b></dt>
+<dd><p>The max() aggregate function returns the maximum value of all values in the group.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-52585-35928-11217-60344-47086-04619-13740-01929'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-52585-35928-11217-60344-47086-04619-13740-01929'>detail</a>)</i></p></dd>
+
+<dt><b>R-52629-38967-65267-07230-17348-21667-50787-63164</b></dt>
+<dd><p>The first parameter passed to the callback function when it is invoked is a copy of the third parameter passed to sqlite3_wal_hook() when registering the callback.
+<i>(source: <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>, checked-by: tcl/e_walhook.test, matrix: <a href='matrix/c3ref/wal_hook.html#R-52629-38967-65267-07230-17348-21667-50787-63164'>context</a>, <a href='matrix/matrix_dwal_hook.html#R-52629-38967-65267-07230-17348-21667-50787-63164'>detail</a>)</i></p></dd>
+
+<dt><b>R-52653-05256-00101-41227-35426-26812-44795-06520</b></dt>
+<dd><p>These functions only work for dates between 0000-01-01 00:00:00 and 9999-12-31 23:59:59 (julian day numbers 1721059.5 through 5373484.5).
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-52653-05256-00101-41227-35426-26812-44795-06520'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-52653-05256-00101-41227-35426-26812-44795-06520'>detail</a>)</i></p></dd>
+
+<dt><b>R-52668-48601-43859-11032-33191-58876-15768-53065</b></dt>
+<dd><p>The default transaction behavior is DEFERRED.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-52668-48601-43859-11032-33191-58876-15768-53065'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-52668-48601-43859-11032-33191-58876-15768-53065'>detail</a>)</i></p></dd>
+
+<dt><b>R-52669-16467-62181-15890-38253-37577-17953-50258</b></dt>
+<dd><p>The first parameter is the prepared statement that implements the SELECT statement.
+<i>(source: <a href="c3ref/column_name.html">c3ref/column_name.html</a>, matrix: <a href='matrix/c3ref/column_name.html#R-52669-16467-62181-15890-38253-37577-17953-50258'>context</a>, <a href='matrix/matrix_dcolumn_name.html#R-52669-16467-62181-15890-38253-37577-17953-50258'>detail</a>)</i></p></dd>
+
+<dt><b>R-52675-02101-02366-27755-19404-45164-56162-18883</b></dt>
+<dd><p>If the sqlite3_vtab_distinct() interface returns 3, that means that the query planner needs only distinct rows but it does need the rows to be sorted.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-52675-02101-02366-27755-19404-45164-56162-18883'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-52675-02101-02366-27755-19404-45164-56162-18883'>detail</a>)</i></p></dd>
+
+<dt><b>R-52722-37312-59730-59343-41826-18723-03600-14255</b></dt>
+<dd><p>The third parameter is a pointer to the implementation of the virtual table module.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-52722-37312-59730-59343-41826-18723-03600-14255'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-52722-37312-59730-59343-41826-18723-03600-14255'>detail</a>)</i></p></dd>
+
+<dt><b>R-52732-49288-09646-62547-34370-14326-57234-39193</b></dt>
+<dd><p>Compute the number of seconds since a particular moment in 2004: SELECT unixepoch() - unixepoch('2004-01-01 02:34:56');
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-52732-49288-09646-62547-34370-14326-57234-39193'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-52732-49288-09646-62547-34370-14326-57234-39193'>detail</a>)</i></p></dd>
+
+<dt><b>R-52747-41357-44885-51166-33553-21008-38098-18892</b></dt>
+<dd><p>In some cases, VACUUM may also reduce the number of partially filled pages in the database, reducing the size of the database file further.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, matrix: <a href='matrix/lang_vacuum.html#R-52747-41357-44885-51166-33553-21008-38098-18892'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-52747-41357-44885-51166-33553-21008-38098-18892'>detail</a>)</i></p></dd>
+
+<dt><b>R-52765-50368-61769-61482-53990-53504-23409-31144</b></dt>
+<dd><p>Before the path or query components of a URI filename are interpreted, they are encoded using UTF-8 and all hexadecimal escape sequences replaced by a single byte containing the corresponding octet.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-52765-50368-61769-61482-53990-53504-23409-31144'>context</a>, <a href='matrix/matrix_dopen.html#R-52765-50368-61769-61482-53990-53504-23409-31144'>detail</a>)</i></p></dd>
+
+<dt><b>R-52777-21695-38206-28598-32008-52074-59855-17879</b></dt>
+<dd><p>two options are recognized: STRICT WITHOUT ROWID
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-52777-21695-38206-28598-32008-52074-59855-17879'>context</a>, <a href='matrix/matrix_dstricttables.html#R-52777-21695-38206-28598-32008-52074-59855-17879'>detail</a>)</i></p></dd>
+
+<dt><b>R-52786-44878-02459-51231-59841-41905-39578-10951</b></dt>
+<dd><p>SQLite defines three built-in collating functions:
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/main.c, matrix: <a href='matrix/fileformat2.html#R-52786-44878-02459-51231-59841-41905-39578-10951'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-52786-44878-02459-51231-59841-41905-39578-10951'>detail</a>)</i></p></dd>
+
+<dt><b>R-52799-16320-39840-10926-00511-08842-62770-55110</b></dt>
+<dd><p>N is zero for the left-most function argument.
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-52799-16320-39840-10926-00511-08842-62770-55110'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-52799-16320-39840-10926-00511-08842-62770-55110'>detail</a>)</i></p></dd>
+
+<dt><b>R-52830-19955-18632-16869-37447-04753-28772-23279</b></dt>
+<dd><p>A URI filename can optionally be followed by a query string.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-52830-19955-18632-16869-37447-04753-28772-23279'>context</a>, <a href='matrix/matrix_duri.html#R-52830-19955-18632-16869-37447-04753-28772-23279'>detail</a>)</i></p></dd>
+
+<dt><b>R-52843-09507-00185-40399-22075-19673-59320-05443</b></dt>
+<dd><p>The sqlite_schema table contains entries for internal schema objects in addition to application- and programmer-defined objects.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-52843-09507-00185-40399-22075-19673-59320-05443'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-52843-09507-00185-40399-22075-19673-59320-05443'>detail</a>)</i></p></dd>
+
+<dt><b>R-52858-40376-16050-37055-60638-11562-16087-23807</b></dt>
+<dd><p>The soft heap limit may not be greater than the hard heap limit.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-52858-40376-16050-37055-60638-11562-16087-23807'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-52858-40376-16050-37055-60638-11562-16087-23807'>detail</a>)</i></p></dd>
+
+<dt><b>R-52864-57317-33695-37364-46935-23221-38785-50224</b></dt>
+<dd><p>For rows that define views, triggers, and virtual tables, the rootpage column is 0 or NULL.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-52864-57317-33695-37364-46935-23221-38785-50224'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-52864-57317-33695-37364-46935-23221-38785-50224'>detail</a>)</i></p></dd>
+
+<dt><b>R-52874-10360-37775-63380-13039-47698-21027-19281</b></dt>
+<dd><p>If the locking mode is NORMAL when first entering WAL journal mode, then the locking mode can be changed between NORMAL and EXCLUSIVE and back again at any time and without needing to exit WAL journal mode.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma05.test, matrix: <a href='matrix/pragma.html#R-52874-10360-37775-63380-13039-47698-21027-19281'>context</a>, <a href='matrix/matrix_dpragma.html#R-52874-10360-37775-63380-13039-47698-21027-19281'>detail</a>)</i></p></dd>
+
+<dt><b>R-52885-58365-34589-60224-33569-54251-15646-22637</b></dt>
+<dd><p>The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: th3/req1/dbstatus01.test, th3/req1/dbstatus02.test, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-52885-58365-34589-60224-33569-54251-15646-22637'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-52885-58365-34589-60224-33569-54251-15646-22637'>detail</a>)</i></p></dd>
+
+<dt><b>R-52892-55360-15524-03344-29674-00712-56313-40382</b></dt>
+<dd><p>This routine registers an authorizer callback with a particular database connection, supplied in the first argument.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: th3/cov1/auth01.test, matrix: <a href='matrix/c3ref/set_authorizer.html#R-52892-55360-15524-03344-29674-00712-56313-40382'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-52892-55360-15524-03344-29674-00712-56313-40382'>detail</a>)</i></p></dd>
+
+<dt><b>R-52907-56880-27693-28944-05946-50403-11424-10789</b></dt>
+<dd><p>All six date and time functions take an optional time value as an argument, followed by zero or more modifiers.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-52907-56880-27693-28944-05946-50403-11424-10789'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-52907-56880-27693-28944-05946-50403-11424-10789'>detail</a>)</i></p></dd>
+
+<dt><b>R-52918-29603-61249-39870-15213-51167-58462-10808</b></dt>
+<dd><p>Names are case sensitive.
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-52918-29603-61249-39870-15213-51167-58462-10808'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-52918-29603-61249-39870-15213-51167-58462-10808'>detail</a>)</i></p></dd>
+
+<dt><b>R-52919-32711-64947-32390-17992-62474-27613-56874</b></dt>
+<dd><p>Then the UPDATE might fail with an SQLITE_LOCKED error.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/cov1/rtree22.test, matrix: <a href='matrix/rtree.html#R-52919-32711-64947-32390-17992-62474-27613-56874'>context</a>, <a href='matrix/matrix_drtree.html#R-52919-32711-64947-32390-17992-62474-27613-56874'>detail</a>)</i></p></dd>
+
+<dt><b>R-52940-53106-43126-08219-27163-02651-42624-21494</b></dt>
+<dd><p>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL This parameter returns the number malloc attempts that might have been satisfied using lookaside memory but failed due to all lookaside memory already being in use. Only the high-water value is meaningful; the current value is always zero.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-52940-53106-43126-08219-27163-02651-42624-21494'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-52940-53106-43126-08219-27163-02651-42624-21494'>detail</a>)</i></p></dd>
+
+<dt><b>R-52949-04679-63640-64673-56558-51308-22602-53102</b></dt>
+<dd><p>When synchronous is FULL (2), the SQLite database engine will use the xSync method of the VFS to ensure that all content is safely written to the disk surface prior to continuing.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-52949-04679-63640-64673-56558-51308-22602-53102'>context</a>, <a href='matrix/matrix_dpragma.html#R-52949-04679-63640-64673-56558-51308-22602-53102'>detail</a>)</i></p></dd>
+
+<dt><b>R-52975-24025-19782-48078-21253-08318-64480-41617</b></dt>
+<dd><p>D is either a NULL pointer or a pointer to a destructor function for P.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/cov1/carray01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-52975-24025-19782-48078-21253-08318-64480-41617'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-52975-24025-19782-48078-21253-08318-64480-41617'>detail</a>)</i></p></dd>
+
+<dt><b>R-52979-05948-62253-13959-08616-19782-00231-65048</b></dt>
+<dd><p>The sqlite3_create_module() interface is equivalent to sqlite3_create_module_v2() with a NULL destructor.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-52979-05948-62253-13959-08616-19782-00231-65048'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-52979-05948-62253-13959-08616-19782-00231-65048'>detail</a>)</i></p></dd>
+
+<dt><b>R-53010-63100-48596-37758-55156-50818-27273-22273</b></dt>
+<dd><p>SQLITE_DBSTATUS_SCHEMA_USED This parameter returns the approximate number of bytes of heap memory used to store the schema for all databases associated with the connection - main, temp, and any ATTACH-ed databases.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: th3/req1/dbstatus02.test, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-53010-63100-48596-37758-55156-50818-27273-22273'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-53010-63100-48596-37758-55156-50818-27273-22273'>detail</a>)</i></p></dd>
+
+<dt><b>R-53045-50509-28028-29043-56897-58356-06470-19451</b></dt>
+<dd><p>So an attempt to insert the string '123' results in an integer 123 being inserted.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-53045-50509-28028-29043-56897-58356-06470-19451'>context</a>, <a href='matrix/matrix_dstricttables.html#R-53045-50509-28028-29043-56897-58356-06470-19451'>detail</a>)</i></p></dd>
+
+<dt><b>R-53080-41541-45026-17384-49917-00359-25749-28353</b></dt>
+<dd><p>However, even though the PRIMARY KEY has an implicit NOT NULL constraint, when a NULL value is inserted into an INTEGER PRIMARY KEY column, the NULL is automatically converted into a unique integer, using the same rules for INTEGER PRIMARY KEY on ordinary, non-strict tables.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/cov1/build08.test, th3/cov1/check01.test, th3/req1/strictreq02.test, matrix: <a href='matrix/stricttables.html#R-53080-41541-45026-17384-49917-00359-25749-28353'>context</a>, <a href='matrix/matrix_dstricttables.html#R-53080-41541-45026-17384-49917-00359-25749-28353'>detail</a>)</i></p></dd>
+
+<dt><b>R-53084-07740-56303-11732-40527-47126-44561-51023</b></dt>
+<dd><p>An error is raised if the "AUTOINCREMENT" keyword is used in the CREATE TABLE statement for a WITHOUT ROWID table.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-53084-07740-56303-11732-40527-47126-44561-51023'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-53084-07740-56303-11732-40527-47126-44561-51023'>detail</a>)</i></p></dd>
+
+<dt><b>R-53088-19343-27677-16808-20266-14528-30816-49365</b></dt>
+<dd><p>The incremental blob I/O routines can only read or overwriting existing blob content; they cannot change the size of a blob.
+<i>(source: <a href="c3ref/blob_bytes.html">c3ref/blob_bytes.html</a>, checked-by: tcl/e_blobbytes.test, th3/cov1/vdbeblob01.test, matrix: <a href='matrix/c3ref/blob_bytes.html#R-53088-19343-27677-16808-20266-14528-30816-49365'>context</a>, <a href='matrix/matrix_dblob_bytes.html#R-53088-19343-27677-16808-20266-14528-30816-49365'>detail</a>)</i></p></dd>
+
+<dt><b>R-53099-14426-29346-17813-35365-40265-31413-38800</b></dt>
+<dd><p>A special SQL function RAISE() may be used within a trigger-program,
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-53099-14426-29346-17813-35365-40265-31413-38800'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-53099-14426-29346-17813-35365-40265-31413-38800'>detail</a>)</i></p></dd>
+
+<dt><b>R-53099-38567-01215-12266-31913-15951-54753-29101</b></dt>
+<dd><p>If there are no more values on the right hand side of the IN constraint, then *P is set to NULL and these routines return SQLITE_DONE.
+<i>(source: <a href="c3ref/vtab_in_first.html">c3ref/vtab_in_first.html</a>, matrix: <a href='matrix/c3ref/vtab_in_first.html#R-53099-38567-01215-12266-31913-15951-54753-29101'>context</a>, <a href='matrix/matrix_dvtab_in_first.html#R-53099-38567-01215-12266-31913-15951-54753-29101'>detail</a>)</i></p></dd>
+
+<dt><b>R-53132-26856-55284-61256-49129-35649-13500-14879</b></dt>
+<dd><p>The 'auto' modifier can be used to work with date/time values even in cases where it is not known if the julian day number or unix timestamp formats are in use.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, matrix: <a href='matrix/lang_datefunc.html#R-53132-26856-55284-61256-49129-35649-13500-14879'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-53132-26856-55284-61256-49129-35649-13500-14879'>detail</a>)</i></p></dd>
+
+<dt><b>R-53139-25371-00097-20894-04129-08497-32476-32210</b></dt>
+<dd><p>SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without a prior successful call to SQLITE_FCNTL_BEGIN_ATOMIC_WRITE.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-53139-25371-00097-20894-04129-08497-32476-32210'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-53139-25371-00097-20894-04129-08497-32476-32210'>detail</a>)</i></p></dd>
+
+<dt><b>R-53195-24238-49524-21833-03175-16230-23443-12553</b></dt>
+<dd><p>If sqlite3_backup_step(B,N) successfully finishes copying all pages from source to destination, then it returns SQLITE_DONE.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup03.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-53195-24238-49524-21833-03175-16230-23443-12553'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-53195-24238-49524-21833-03175-16230-23443-12553'>detail</a>)</i></p></dd>
+
+<dt><b>R-53201-01290-50295-51716-63557-40807-32035-47874</b></dt>
+<dd><p>The content of each SQL table row is stored in the database file by first combining the values in the various columns into a byte array in the record format, then storing that byte array as the payload in an entry in the table b-tree.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-53201-01290-50295-51716-63557-40807-32035-47874'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-53201-01290-50295-51716-63557-40807-32035-47874'>detail</a>)</i></p></dd>
+
+<dt><b>R-53205-22341-54375-46881-03757-15307-06901-24042</b></dt>
+<dd><p>The fourth parameter, eTextRep, specifies what text encoding this SQL function prefers for its parameters.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc04.test, matrix: <a href='matrix/c3ref/create_function.html#R-53205-22341-54375-46881-03757-15307-06901-24042'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-53205-22341-54375-46881-03757-15307-06901-24042'>detail</a>)</i></p></dd>
+
+<dt><b>R-53215-27584-18525-51882-25660-37940-21919-06094</b></dt>
+<dd><p>If it is used by the second or subsequent such statement within a trigger program, the value returned reflects the number of rows modified by the previous INSERT, UPDATE or DELETE statement within the same trigger.
+<i>(source: <a href="c3ref/changes.html">c3ref/changes.html</a>, checked-by: tcl/e_changes.test, matrix: <a href='matrix/c3ref/changes.html#R-53215-27584-18525-51882-25660-37940-21919-06094'>context</a>, <a href='matrix/matrix_dchanges.html#R-53215-27584-18525-51882-25660-37940-21919-06094'>detail</a>)</i></p></dd>
+
+<dt><b>R-53264-40062-38571-39514-17235-18477-59967-25878</b></dt>
+<dd><p>If the Nth column returned by the statement is an expression or subquery and is not a column value, then all of these functions return NULL.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-53264-40062-38571-39514-17235-18477-59967-25878'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-53264-40062-38571-39514-17235-18477-59967-25878'>detail</a>)</i></p></dd>
+
+<dt><b>R-53273-52304-57192-35830-05219-48039-41857-59674</b></dt>
+<dd><p>Virtual terms are used for analysis only and do not cause any byte-code to be generated.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-53273-52304-57192-35830-05219-48039-41857-59674'>context</a>, <a href='matrix/matrix_doptoverview.html#R-53273-52304-57192-35830-05219-48039-41857-59674'>detail</a>)</i></p></dd>
+
+<dt><b>R-53334-49168-61696-52419-22788-21864-59883-48546</b></dt>
+<dd><p>For the index above and WHERE clause like this: ... WHERE a=5 AND b IN (1,2,3) AND c>12 AND d='hello' Only columns a, b, and c of the index would be usable. The d column would not be usable because it occurs to the right of c and c is constrained only by inequalities.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-53334-49168-61696-52419-22788-21864-59883-48546'>context</a>, <a href='matrix/matrix_doptoverview.html#R-53334-49168-61696-52419-22788-21864-59883-48546'>detail</a>)</i></p></dd>
+
+<dt><b>R-53341-35419-60805-00614-53630-15165-00520-17900</b></dt>
+<dd><p>Regardless of whether or not the limit was changed, the sqlite3_limit() interface returns the prior value of the limit.
+<i>(source: <a href="c3ref/limit.html">c3ref/limit.html</a>, checked-by: src/main.c, th3/req1/limit01.test, matrix: <a href='matrix/c3ref/limit.html#R-53341-35419-60805-00614-53630-15165-00520-17900'>context</a>, <a href='matrix/matrix_dlimit.html#R-53341-35419-60805-00614-53630-15165-00520-17900'>detail</a>)</i></p></dd>
+
+<dt><b>R-53354-47195-06587-01867-57045-45178-06835-07822</b></dt>
+<dd><p>CREATE TABLE t1( x INTEGER PRIMARY KEY, a, /* collating sequence BINARY */ b COLLATE BINARY, /* collating sequence BINARY */ c COLLATE RTRIM, /* collating sequence RTRIM */ d COLLATE NOCASE /* collating sequence NOCASE */ ); /* x a b c d */ INSERT INTO t1 VALUES(1,'abc','abc', 'abc ','abc'); INSERT INTO t1 VALUES(2,'abc','abc', 'abc', 'ABC'); INSERT INTO t1 VALUES(3,'abc','abc', 'abc ', 'Abc'); INSERT INTO t1 VALUES(4,'abc','abc ','ABC', 'abc'); /* Text comparison a=b is performed using the BINARY collating sequence. */ SELECT x FROM t1 WHERE a = b ORDER BY x; --result 1 2 3 /* Text comparison a=b is performed using the RTRIM collating sequence. */ SELECT x FROM t1 WHERE a = b COLLATE RTRIM ORDER BY x; --result 1 2 3 4 /* Text comparison d=a is performed using the NOCASE collating sequence. */ SELECT x FROM t1 WHERE d = a ORDER BY x; --result 1 2 3 4 /* Text comparison a=d is performed using the BINARY collating sequence. */ SELECT x FROM t1 WHERE a = d ORDER BY x; --result 1 4 /* Text comparison 'abc'=c is performed using the RTRIM collating sequence. */ SELECT x FROM t1 WHERE 'abc' = c ORDER BY x; --result 1 2 3 /* Text comparison c='abc' is performed using the RTRIM collating sequence. */ SELECT x FROM t1 WHERE c = 'abc' ORDER BY x; --result 1 2 3 /* Grouping is performed using the NOCASE collating sequence (Values ** 'abc', 'ABC', and 'Abc' are placed in the same group). */ SELECT count(*) FROM t1 GROUP BY d ORDER BY 1; --result 4 /* Grouping is performed using the BINARY collating sequence. 'abc' and ** 'ABC' and 'Abc' form different groups */ SELECT count(*) FROM t1 GROUP BY (d || '') ORDER BY 1; --result 1 1 2 /* Sorting or column c is performed using the RTRIM collating sequence. */ SELECT x FROM t1 ORDER BY c, x; --result 4 1 2 3 /* Sorting of (c||'') is performed using the BINARY collating sequence. */ SELECT x FROM t1 ORDER BY (c||''), x; --result 4 2 3 1 /* Sorting of column c is performed using the NOCASE collating sequence. */ SELECT x FROM t1 ORDER BY c COLLATE NOCASE, x; --result 2 4 3 1
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_08.test, matrix: <a href='matrix/datatype3.html#R-53354-47195-06587-01867-57045-45178-06835-07822'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-53354-47195-06587-01867-57045-45178-06835-07822'>detail</a>)</i></p></dd>
+
+<dt><b>R-53361-24419-19828-49263-36591-42427-29848-60757</b></dt>
+<dd><p>PRAGMA schema.locking_mode; PRAGMA schema.locking_mode = NORMAL | EXCLUSIVE
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma04.test, matrix: <a href='matrix/pragma.html#R-53361-24419-19828-49263-36591-42427-29848-60757'>context</a>, <a href='matrix/matrix_dpragma.html#R-53361-24419-19828-49263-36591-42427-29848-60757'>detail</a>)</i></p></dd>
+
+<dt><b>R-53367-43190-16013-34482-35638-20487-30911-18864</b></dt>
+<dd><p>If either argument to this option is negative, then that argument is changed to its compile-time default.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-53367-43190-16013-34482-35638-20487-30911-18864'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-53367-43190-16013-34482-35638-20487-30911-18864'>detail</a>)</i></p></dd>
+
+<dt><b>R-53367-44371-39189-42145-26716-53190-00022-58526</b></dt>
+<dd><p>An expression of the form "CAST(expr AS type)" has an affinity that is the same as a column with a declared type of "type".
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-53367-44371-39189-42145-26716-53190-00022-58526'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-53367-44371-39189-42145-26716-53190-00022-58526'>detail</a>)</i></p></dd>
+
+<dt><b>R-53378-00429-63656-00839-65291-28098-14033-06508</b></dt>
+<dd><p>If this variable is a NULL pointer, then SQLite performs a search for an appropriate temporary file directory.
+<i>(source: <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>, matrix: <a href='matrix/c3ref/temp_directory.html#R-53378-00429-63656-00839-65291-28098-14033-06508'>context</a>, <a href='matrix/matrix_dtemp_directory.html#R-53378-00429-63656-00839-65291-28098-14033-06508'>detail</a>)</i></p></dd>
+
+<dt><b>R-53431-59159-09911-22042-14613-41147-21418-31229</b></dt>
+<dd><p>The % operator casts both of its operands to type INTEGER and then computes the remainder after dividing the left integer by the right integer.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-53431-59159-09911-22042-14613-41147-21418-31229'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-53431-59159-09911-22042-14613-41147-21418-31229'>detail</a>)</i></p></dd>
+
+<dt><b>R-53436-40973-13105-02748-62500-49771-13394-01786</b></dt>
+<dd><p>The likely(X) function is equivalent to likelihood(X,0.9375).
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/resolve.c, matrix: <a href='matrix/lang_corefunc.html#R-53436-40973-13105-02748-62500-49771-13394-01786'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-53436-40973-13105-02748-62500-49771-13394-01786'>detail</a>)</i></p></dd>
+
+<dt><b>R-53473-04519-45856-48059-38257-59187-05509-43871</b></dt>
+<dd><p>If the Nth column of the result set is an expression or subquery, then a NULL pointer is returned.
+<i>(source: <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a>, matrix: <a href='matrix/c3ref/column_decltype.html#R-53473-04519-45856-48059-38257-59187-05509-43871'>context</a>, <a href='matrix/matrix_dcolumn_decltype.html#R-53473-04519-45856-48059-38257-59187-05509-43871'>detail</a>)</i></p></dd>
+
+<dt><b>R-53478-59161-12237-18673-01094-03147-04077-16034</b></dt>
+<dd><p>The flags argument to xAccess() may be SQLITE_ACCESS_EXISTS to test for the existence of a file, or SQLITE_ACCESS_READWRITE to test whether a file is readable and writable, or SQLITE_ACCESS_READ to test whether a file is at least readable.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-53478-59161-12237-18673-01094-03147-04077-16034'>context</a>, <a href='matrix/matrix_dvfs.html#R-53478-59161-12237-18673-01094-03147-04077-16034'>detail</a>)</i></p></dd>
+
+<dt><b>R-53479-41922-39952-24779-27153-12886-60849-40367</b></dt>
+<dd><p>A 4-dimensional R*Tree has 9 columns.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-53479-41922-39952-24779-27153-12886-60849-40367'>context</a>, <a href='matrix/matrix_drtree.html#R-53479-41922-39952-24779-27153-12886-60849-40367'>detail</a>)</i></p></dd>
+
+<dt><b>R-53505-01828-44329-62678-22950-03794-01329-32376</b></dt>
+<dd><p>The lookaside memory configuration for a database connection can only be changed when that connection is not currently using lookaside memory, or in other words when the "current value" returned by sqlite3_db_status(D,SQLITE_CONFIG_LOOKASIDE,...) is zero. Any attempt to change the lookaside memory configuration when lookaside memory is in use leaves the configuration unchanged and returns SQLITE_BUSY.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: th3/req1/dbconfig01.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-53505-01828-44329-62678-22950-03794-01329-32376'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-53505-01828-44329-62678-22950-03794-01329-32376'>detail</a>)</i></p></dd>
+
+<dt><b>R-53520-01610-10679-40002-23178-34440-17674-23927</b></dt>
+<dd><p>The sqlite3_backup_step() might return SQLITE_READONLY if the destination database was opened read-only, or the destination database is using write-ahead-log journaling and the destination and source page sizes differ, or the destination database is an in-memory database and the destination and source page sizes differ.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-53520-01610-10679-40002-23178-34440-17674-23927'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-53520-01610-10679-40002-23178-34440-17674-23927'>detail</a>)</i></p></dd>
+
+<dt><b>R-53528-47027-65277-23622-06185-25684-15860-07330</b></dt>
+<dd><p>BINARY - Compares string data using memcmp(), regardless of text encoding.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-53528-47027-65277-23622-06185-25684-15860-07330'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-53528-47027-65277-23622-06185-25684-15860-07330'>detail</a>)</i></p></dd>
+
+<dt><b>R-53536-42575-40544-57743-11521-12112-01903-53371</b></dt>
+<dd><p>The sqlite3_libversion() function returns a pointer to the to the sqlite3_version[] string constant.
+<i>(source: <a href="c3ref/libversion.html">c3ref/libversion.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/libversion.html#R-53536-42575-40544-57743-11521-12112-01903-53371'>context</a>, <a href='matrix/matrix_dlibversion.html#R-53536-42575-40544-57743-11521-12112-01903-53371'>detail</a>)</i></p></dd>
+
+<dt><b>R-53547-37067-09638-20252-03189-64013-38251-09094</b></dt>
+<dd><p>This pragma is a no-op within a transaction; foreign key constraint enforcement may only be enabled or disabled when there is no pending BEGIN or SAVEPOINT.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma18.test, matrix: <a href='matrix/pragma.html#R-53547-37067-09638-20252-03189-64013-38251-09094'>context</a>, <a href='matrix/matrix_dpragma.html#R-53547-37067-09638-20252-03189-64013-38251-09094'>detail</a>)</i></p></dd>
+
+<dt><b>R-53666-61329-49768-59983-34751-33356-35133-56080</b></dt>
+<dd><p>The values returned by these functions are only updated by sqlite3_backup_step(). If the source database is modified in a way that changes the size of the source database or the number of pages remaining, those changes are not reflected in the output of sqlite3_backup_pagecount() and sqlite3_backup_remaining() until after the next sqlite3_backup_step().
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-53666-61329-49768-59983-34751-33356-35133-56080'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-53666-61329-49768-59983-34751-33356-35133-56080'>detail</a>)</i></p></dd>
+
+<dt><b>R-53670-03373-29503-41803-42706-56849-33971-45159</b></dt>
+<dd><p>The unary operator + is a no-op.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-53670-03373-29503-41803-42706-56849-33971-45159'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-53670-03373-29503-41803-42706-56849-33971-45159'>detail</a>)</i></p></dd>
+
+<dt><b>R-53672-30929-36842-16986-17417-33321-43631-35859</b></dt>
+<dd><p>If X comes from an SQL literal value, or a table column, or an expression, then sqlite3_value_frombind(X) returns zero.
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, matrix: <a href='matrix/c3ref/value_blob.html#R-53672-30929-36842-16986-17417-33321-43631-35859'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-53672-30929-36842-16986-17417-33321-43631-35859'>detail</a>)</i></p></dd>
+
+<dt><b>R-53717-22688-52875-42885-33071-58467-09778-10973</b></dt>
+<dd><p>The string value returned by this routine is owned and managed by the database connection.
+<i>(source: <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>, matrix: <a href='matrix/c3ref/db_filename.html#R-53717-22688-52875-42885-33071-58467-09778-10973'>context</a>, <a href='matrix/matrix_ddb_filename.html#R-53717-22688-52875-42885-33071-58467-09778-10973'>detail</a>)</i></p></dd>
+
+<dt><b>R-53735-47017-47286-05670-21598-63500-17525-58856</b></dt>
+<dd><p>If the expression is an aggregate expression, it is evaluated across all rows in the group.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-53735-47017-47286-05670-21598-63500-17525-58856'>context</a>, <a href='matrix/matrix_dlang_select.html#R-53735-47017-47286-05670-21598-63500-17525-58856'>detail</a>)</i></p></dd>
+
+<dt><b>R-53739-41794-61362-55314-61050-59238-26275-11948</b></dt>
+<dd><p>If this global variable is made to point to a string which is the name of a folder (a.k.a. directory), then all temporary files created by SQLite when using a built-in VFS will be placed in that directory.
+<i>(source: <a href="c3ref/temp_directory.html">c3ref/temp_directory.html</a>, matrix: <a href='matrix/c3ref/temp_directory.html#R-53739-41794-61362-55314-61050-59238-26275-11948'>context</a>, <a href='matrix/matrix_dtemp_directory.html#R-53739-41794-61362-55314-61050-59238-26275-11948'>detail</a>)</i></p></dd>
+
+<dt><b>R-53739-48047-10287-11519-42885-23496-56458-39764</b></dt>
+<dd><p>The new row must meet the same criteria as for sqlite3_blob_open() - it must exist and there must be either a blob or text value stored in the nominated column.
+<i>(source: <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>, checked-by: th3/req1/blob01.test, matrix: <a href='matrix/c3ref/blob_reopen.html#R-53739-48047-10287-11519-42885-23496-56458-39764'>context</a>, <a href='matrix/matrix_dblob_reopen.html#R-53739-48047-10287-11519-42885-23496-56458-39764'>detail</a>)</i></p></dd>
+
+<dt><b>R-53759-57366-14099-11673-51182-17816-42165-23586</b></dt>
+<dd><p>The exact same sqlite3_rtree_geometry structure is used for every callback for same MATCH operator in the same query.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-53759-57366-14099-11673-51182-17816-42165-23586'>context</a>, <a href='matrix/matrix_drtree.html#R-53759-57366-14099-11673-51182-17816-42165-23586'>detail</a>)</i></p></dd>
+
+<dt><b>R-53782-41596-18711-17394-59679-49399-55234-36791</b></dt>
+<dd><p>The argument N is the maximum number of bytes of the database file that will be accessed using memory-mapped I/O.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-53782-41596-18711-17394-59679-49399-55234-36791'>context</a>, <a href='matrix/matrix_dpragma.html#R-53782-41596-18711-17394-59679-49399-55234-36791'>detail</a>)</i></p></dd>
+
+<dt><b>R-53820-33897-43817-17457-29508-48288-48051-25287</b></dt>
+<dd><p>Even if there is a busy-handler configured, it will not be invoked in this case.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: src/wal.c, tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-53820-33897-43817-17457-29508-48288-48051-25287'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-53820-33897-43817-17457-29508-48288-48051-25287'>detail</a>)</i></p></dd>
+
+<dt><b>R-53900-18983-14254-27441-52776-55824-16298-22482</b></dt>
+<dd><p>SQLite will invoke the xMutexEnd() method when sqlite3_shutdown() is called, but only if the prior call to xMutexInit returned SQLITE_OK.
+<i>(source: <a href="c3ref/mutex_methods.html">c3ref/mutex_methods.html</a>, matrix: <a href='matrix/c3ref/mutex_methods.html#R-53900-18983-14254-27441-52776-55824-16298-22482'>context</a>, <a href='matrix/matrix_dmutex_methods.html#R-53900-18983-14254-27441-52776-55824-16298-22482'>detail</a>)</i></p></dd>
+
+<dt><b>R-53903-19135-58886-00685-59827-03617-13635-37528</b></dt>
+<dd><p>PRAGMA schema.table_xinfo(table-name); This pragma returns one row for each column in the named table, including generated columns and hidden columns. The output has the same columns as for PRAGMA table_info plus a column, "hidden", whose value signifies a normal column (0), a dynamic or stored generated column (2 or 3), or a hidden column in a virtual table (1). The rows for which this field is non-zero are those omitted for PRAGMA table_info. PRAGMA temp_store PRAGMA temp_store; PRAGMA temp_store = 0 | DEFAULT | 1 | FILE | 2 | MEMORY; Query or change the setting of the "temp_store" parameter.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-53903-19135-58886-00685-59827-03617-13635-37528'>context</a>, <a href='matrix/matrix_dpragma.html#R-53903-19135-58886-00685-59827-03617-13635-37528'>detail</a>)</i></p></dd>
+
+<dt><b>R-53924-08809-36668-27423-20589-58335-57366-25050</b></dt>
+<dd><p>If there is more than one non-aggregate expression in the result-set, then all such expressions are evaluated for the same row.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-53924-08809-36668-27423-20589-58335-57366-25050'>context</a>, <a href='matrix/matrix_dlang_select.html#R-53924-08809-36668-27423-20589-58335-57366-25050'>detail</a>)</i></p></dd>
+
+<dt><b>R-53924-42297-60529-07660-45668-52976-46184-14405</b></dt>
+<dd><p>The sqlite3_hard_heap_limit64(N) interface sets a hard upper bound of N bytes on the amount of memory that will be allocated.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-53924-42297-60529-07660-45668-52976-46184-14405'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-53924-42297-60529-07660-45668-52976-46184-14405'>detail</a>)</i></p></dd>
+
+<dt><b>R-53938-27527-43335-12056-46528-12200-49434-41509</b></dt>
+<dd><p>Only changes made directly by the INSERT, UPDATE or DELETE statement are considered - auxiliary changes caused by triggers, foreign key actions or REPLACE constraint resolution are not counted.
+<i>(source: <a href="c3ref/changes.html">c3ref/changes.html</a>, checked-by: tcl/e_changes.test, matrix: <a href='matrix/c3ref/changes.html#R-53938-27527-43335-12056-46528-12200-49434-41509'>context</a>, <a href='matrix/matrix_dchanges.html#R-53938-27527-43335-12056-46528-12200-49434-41509'>detail</a>)</i></p></dd>
+
+<dt><b>R-53946-02894-03994-04896-49185-13086-04703-60466</b></dt>
+<dd><p>These routines return information about a single column of the current result row of a query.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, th3/req1/column02.test, th3/req1/column03.test, matrix: <a href='matrix/c3ref/column_blob.html#R-53946-02894-03994-04896-49185-13086-04703-60466'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-53946-02894-03994-04896-49185-13086-04703-60466'>detail</a>)</i></p></dd>
+
+<dt><b>R-53968-51642-29002-32833-59790-62444-61146-02233</b></dt>
+<dd><p>Configuring an ON UPDATE or ON DELETE action does not mean that the foreign key constraint does not need to be satisfied.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys18.test, matrix: <a href='matrix/foreignkeys.html#R-53968-51642-29002-32833-59790-62444-61146-02233'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-53968-51642-29002-32833-59790-62444-61146-02233'>detail</a>)</i></p></dd>
+
+<dt><b>R-53994-11873-49794-19921-48320-57211-64823-29959</b></dt>
+<dd><p>The 4-byte big-endian integer at offset 60 is the user version which is set and queried by the user_version pragma.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat03.test, matrix: <a href='matrix/fileformat2.html#R-53994-11873-49794-19921-48320-57211-64823-29959'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-53994-11873-49794-19921-48320-57211-64823-29959'>detail</a>)</i></p></dd>
+
+<dt><b>R-53994-49363-33213-19869-13324-28404-40753-33810</b></dt>
+<dd><p>If the authority section is omitted, then the path is an absolute pathname if it begins with the "/" character (ASCII code 0x2f) and is a relative pathname otherwise.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-53994-49363-33213-19869-13324-28404-40753-33810'>context</a>, <a href='matrix/matrix_duri.html#R-53994-49363-33213-19869-13324-28404-40753-33810'>detail</a>)</i></p></dd>
+
+<dt><b>R-54020-18969-35305-43404-58494-09530-16898-08730</b></dt>
+<dd><p>The minimum key value is 1.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: th3/th3pcache.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-54020-18969-35305-43404-58494-09530-16898-08730'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-54020-18969-35305-43404-58494-09530-16898-08730'>detail</a>)</i></p></dd>
+
+<dt><b>R-54035-60779-28299-56700-44695-40391-47008-32723</b></dt>
+<dd><p>The soft heap limit is "soft" because even though SQLite strives to stay below the limit, it will exceed the limit rather than generate an SQLITE_NOMEM error.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, checked-by: th3/req1/softheaplimit02.test, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-54035-60779-28299-56700-44695-40391-47008-32723'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-54035-60779-28299-56700-44695-40391-47008-32723'>detail</a>)</i></p></dd>
+
+<dt><b>R-54043-63736-37256-25763-10275-07807-60527-63818</b></dt>
+<dd><p>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE This parameter returns the number malloc attempts that might have been satisfied using lookaside memory but failed due to the amount of memory requested being larger than the lookaside slot size. Only the high-water value is meaningful; the current value is always zero.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-54043-63736-37256-25763-10275-07807-60527-63818'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-54043-63736-37256-25763-10275-07807-60527-63818'>detail</a>)</i></p></dd>
+
+<dt><b>R-54046-48600-47086-52711-24230-00638-25946-34111</b></dt>
+<dd><p>When comparing values as a result of a USING clause, the normal rules for handling affinities, collation sequences and NULL values in comparisons apply.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-54046-48600-47086-52711-24230-00638-25946-34111'>context</a>, <a href='matrix/matrix_dlang_select.html#R-54046-48600-47086-52711-24230-00638-25946-34111'>detail</a>)</i></p></dd>
+
+<dt><b>R-54056-32692-17641-45055-32204-64266-46866-10760</b></dt>
+<dd><p>An operand of a comparison is considered to have an explicit collating function assignment (rule 1 above) if any subexpression of the operand uses the postfix COLLATE operator.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-54056-32692-17641-45055-32204-64266-46866-10760'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-54056-32692-17641-45055-32204-64266-46866-10760'>detail</a>)</i></p></dd>
+
+<dt><b>R-54100-20147-64333-16407-13054-37480-42962-25139</b></dt>
+<dd><p>The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS is always 0.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: src/status.c, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-54100-20147-64333-16407-13054-37480-42962-25139'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-54100-20147-64333-16407-13054-37480-42962-25139'>detail</a>)</i></p></dd>
+
+<dt><b>R-54105-45069-36894-51687-59300-29186-60662-50296</b></dt>
+<dd><p>Changing the foreign_keys setting affects the execution of all statements prepared using the database connection, including those prepared before the setting was changed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma18.test, matrix: <a href='matrix/pragma.html#R-54105-45069-36894-51687-59300-29186-60662-50296'>context</a>, <a href='matrix/matrix_dpragma.html#R-54105-45069-36894-51687-59300-29186-60662-50296'>detail</a>)</i></p></dd>
+
+<dt><b>R-54138-14726-01342-01077-27366-45054-60392-40592</b></dt>
+<dd><p>The sixth, seventh, eighth and ninth parameters (xStep, xFinal, xValue and xInverse) passed to sqlite3_create_window_function are pointers to C-language callbacks that implement the new function.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, matrix: <a href='matrix/c3ref/create_function.html#R-54138-14726-01342-01077-27366-45054-60392-40592'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-54138-14726-01342-01077-27366-45054-60392-40592'>detail</a>)</i></p></dd>
+
+<dt><b>R-54142-41346-32014-56293-25636-63110-30822-28140</b></dt>
+<dd><p>The properties of the DROP TABLE and ALTER TABLE commands described above only apply if foreign keys are enabled.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys22.test, matrix: <a href='matrix/foreignkeys.html#R-54142-41346-32014-56293-25636-63110-30822-28140'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-54142-41346-32014-56293-25636-63110-30822-28140'>detail</a>)</i></p></dd>
+
+<dt><b>R-54172-54170-29331-23732-60109-43479-50710-53922</b></dt>
+<dd><p>The sqlite3_snapshot_free(P) interface destroys sqlite3_snapshot P.
+<i>(source: <a href="c3ref/snapshot_free.html">c3ref/snapshot_free.html</a>, matrix: <a href='matrix/c3ref/snapshot_free.html#R-54172-54170-29331-23732-60109-43479-50710-53922'>context</a>, <a href='matrix/matrix_dsnapshot_free.html#R-54172-54170-29331-23732-60109-43479-50710-53922'>detail</a>)</i></p></dd>
+
+<dt><b>R-54218-24562-17509-58575-21096-25882-18026-33588</b></dt>
+<dd><p>The NNN value must be between 1 and the sqlite3_limit() parameter SQLITE_LIMIT_VARIABLE_NUMBER (default value: 32766).
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, matrix: <a href='matrix/c3ref/bind_blob.html#R-54218-24562-17509-58575-21096-25882-18026-33588'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-54218-24562-17509-58575-21096-25882-18026-33588'>detail</a>)</i></p></dd>
+
+<dt><b>R-54219-22147-53235-46719-19479-08650-29878-29792</b></dt>
+<dd><p>The sqlite3_str_value(X) method returns a pointer to the current content of the dynamic string under construction in X.
+<i>(source: <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>, matrix: <a href='matrix/c3ref/str_errcode.html#R-54219-22147-53235-46719-19479-08650-29878-29792'>context</a>, <a href='matrix/matrix_dstr_errcode.html#R-54219-22147-53235-46719-19479-08650-29878-29792'>detail</a>)</i></p></dd>
+
+<dt><b>R-54260-17937-27956-02792-29631-43521-06975-25593</b></dt>
+<dd><p>When a new row is inserted into an SQLite table, the ROWID can either be specified as part of the INSERT statement or it can be assigned automatically by the database engine.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-54260-17937-27956-02792-29631-43521-06975-25593'>context</a>, <a href='matrix/matrix_dautoinc.html#R-54260-17937-27956-02792-29631-43521-06975-25593'>detail</a>)</i></p></dd>
+
+<dt><b>R-54272-29032-18669-23400-04748-20753-02544-31833</b></dt>
+<dd><p>If N is negative, all remaining source pages are copied.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup03.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-54272-29032-18669-23400-04748-20753-02544-31833'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-54272-29032-18669-23400-04748-20753-02544-31833'>detail</a>)</i></p></dd>
+
+<dt><b>R-54275-45098-32061-17354-31139-20112-21246-15357</b></dt>
+<dd><p>These routines might also return NULL if a memory allocation error occurs.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-54275-45098-32061-17354-31139-20112-21246-15357'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-54275-45098-32061-17354-31139-20112-21246-15357'>detail</a>)</i></p></dd>
+
+<dt><b>R-54293-07495-13048-34845-43688-00379-35800-25394</b></dt>
+<dd><p>The first six modifiers (1 through 6) simply add the specified amount of time to the date and time specified by the arguments to the left.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-54293-07495-13048-34845-43688-00379-35800-25394'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-54293-07495-13048-34845-43688-00379-35800-25394'>detail</a>)</i></p></dd>
+
+<dt><b>R-54349-27488-43340-32008-63380-57974-11339-53896</b></dt>
+<dd><p>This pragma uses sqlite3_create_function() to overload the LIKE and GLOB functions, which may override previous implementations of LIKE and GLOB registered by the application.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma10.test, matrix: <a href='matrix/pragma.html#R-54349-27488-43340-32008-63380-57974-11339-53896'>context</a>, <a href='matrix/matrix_dpragma.html#R-54349-27488-43340-32008-63380-57974-11339-53896'>detail</a>)</i></p></dd>
+
+<dt><b>R-54378-38553-30727-53168-14484-58684-10446-07107</b></dt>
+<dd><p>If numerical data is inserted into a column with TEXT affinity it is converted into text form before being stored.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-54378-38553-30727-53168-14484-58684-10446-07107'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-54378-38553-30727-53168-14484-58684-10446-07107'>detail</a>)</i></p></dd>
+
+<dt><b>R-54405-49237-08494-43030-09178-29005-00449-25094</b></dt>
+<dd><p>The sqlite3_str_appendall(X,S) method appends the complete content of zero-terminated string S onto the end of sqlite3_str object X.
+<i>(source: <a href="c3ref/str_append.html">c3ref/str_append.html</a>, matrix: <a href='matrix/c3ref/str_append.html#R-54405-49237-08494-43030-09178-29005-00449-25094'>context</a>, <a href='matrix/matrix_dstr_append.html#R-54405-49237-08494-43030-09178-29005-00449-25094'>detail</a>)</i></p></dd>
+
+<dt><b>R-54466-46756-05959-55829-53224-11229-48614-30148</b></dt>
+<dd><p>If SQLite is compiled with the SQLITE_THREADSAFE=0 compile-time option then it is not possible to change the threading mode from its default value of Single-thread and so sqlite3_config() will return SQLITE_ERROR if called with the SQLITE_CONFIG_SINGLETHREAD configuration option.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-54466-46756-05959-55829-53224-11229-48614-30148'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-54466-46756-05959-55829-53224-11229-48614-30148'>detail</a>)</i></p></dd>
+
+<dt><b>R-54493-30181-37798-05514-46235-61023-30019-39106</b></dt>
+<dd><p>The sqlite3_soft_heap_limit64() interface sets and/or queries the soft limit on the amount of heap memory that may be allocated by SQLite.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, checked-by: th3/req1/softheaplimit01.test, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-54493-30181-37798-05514-46235-61023-30019-39106'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-54493-30181-37798-05514-46235-61023-30019-39106'>detail</a>)</i></p></dd>
+
+<dt><b>R-54562-06892-25259-07703-54157-59355-38292-12890</b></dt>
+<dd><p>The behavior of "PRAGMA data_version" is the same for all database connections, including database connections in separate processes and shared cache database connections.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma3.test, matrix: <a href='matrix/pragma.html#R-54562-06892-25259-07703-54157-59355-38292-12890'>context</a>, <a href='matrix/matrix_dpragma.html#R-54562-06892-25259-07703-54157-59355-38292-12890'>detail</a>)</i></p></dd>
+
+<dt><b>R-54592-23151-09328-60476-49284-22460-04291-25126</b></dt>
+<dd><p>This function does not set the database handle error code or message returned by the sqlite3_errcode() and sqlite3_errmsg() functions.
+<i>(source: <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>, matrix: <a href='matrix/c3ref/db_cacheflush.html#R-54592-23151-09328-60476-49284-22460-04291-25126'>context</a>, <a href='matrix/matrix_ddb_cacheflush.html#R-54592-23151-09328-60476-49284-22460-04291-25126'>detail</a>)</i></p></dd>
+
+<dt><b>R-54611-06855-62690-60121-09688-57757-21462-60136</b></dt>
+<dd><p>The expression following the WHERE clause may contain operators, literal values, and names of columns in the table being indexed.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-54611-06855-62690-60121-09688-57757-21462-60136'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-54611-06855-62690-60121-09688-57757-21462-60136'>detail</a>)</i></p></dd>
+
+<dt><b>R-54614-40903-43648-00840-19083-45681-47455-60151</b></dt>
+<dd><p>The rules for determining which collating function to use for a binary comparison operator (=, <, >, <=, >=, !=, IS, and IS NOT) are as follows:
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-54614-40903-43648-00840-19083-45681-47455-60151'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-54614-40903-43648-00840-19083-45681-47455-60151'>detail</a>)</i></p></dd>
+
+<dt><b>R-54671-04027-22136-36062-14023-39261-02732-05176</b></dt>
+<dd><p>The ifnull() function returns a copy of its first non-NULL argument, or NULL if both arguments are NULL.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-54671-04027-22136-36062-14023-39261-02732-05176'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-54671-04027-22136-36062-14023-39261-02732-05176'>detail</a>)</i></p></dd>
+
+<dt><b>R-54702-17780-20915-24655-06816-59842-01536-54593</b></dt>
+<dd><p>When a UNIQUE or PRIMARY KEY constraint violation occurs, the REPLACE algorithm deletes pre-existing rows that are causing the constraint violation prior to inserting or updating the current row and the command continues executing normally.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict02.test, matrix: <a href='matrix/lang_conflict.html#R-54702-17780-20915-24655-06816-59842-01536-54593'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-54702-17780-20915-24655-06816-59842-01536-54593'>detail</a>)</i></p></dd>
+
+<dt><b>R-54708-13595-17062-38783-63256-30039-55932-60035</b></dt>
+<dd><p>An R*Tree query is initialized by making the root node the only entry in a priority queue sorted by rScore.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc3.test, matrix: <a href='matrix/rtree.html#R-54708-13595-17062-38783-63256-30039-55932-60035'>context</a>, <a href='matrix/matrix_drtree.html#R-54708-13595-17062-38783-63256-30039-55932-60035'>detail</a>)</i></p></dd>
+
+<dt><b>R-54721-48557-63407-03546-07641-33336-53635-34168</b></dt>
+<dd><p>If there is no ELSE expression and none of the WHEN expressions produce a result equal to the base expression, the overall result is NULL.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-54721-48557-63407-03546-07641-33336-53635-34168'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-54721-48557-63407-03546-07641-33336-53635-34168'>detail</a>)</i></p></dd>
+
+<dt><b>R-54737-49034-36463-44594-64965-25751-29163-41666</b></dt>
+<dd><p>The cell pointers are arranged in key order with left-most cell (the cell with the smallest key) first and the right-most cell (the cell with the largest key) last.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-54737-49034-36463-44594-64965-25751-29163-41666'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-54737-49034-36463-44594-64965-25751-29163-41666'>detail</a>)</i></p></dd>
+
+<dt><b>R-54755-39291-22328-03349-12952-06333-56270-04082</b></dt>
+<dd><p>The PRIMARY KEY is optional for ordinary tables but is required for WITHOUT ROWID tables.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-54755-39291-22328-03349-12952-06333-56270-04082'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-54755-39291-22328-03349-12952-06333-56270-04082'>detail</a>)</i></p></dd>
+
+<dt><b>R-54781-23071-09729-07904-20031-27691-48494-39961</b></dt>
+<dd><p>The DROP TABLE command works on statistics tables as of SQLite version 3.7.9.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-54781-23071-09729-07904-20031-27691-48494-39961'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-54781-23071-09729-07904-20031-27691-48494-39961'>detail</a>)</i></p></dd>
+
+<dt><b>R-54814-00088-09992-08072-08455-19266-24087-41023</b></dt>
+<dd><p>A trace callback is invoked with four arguments: callback(T,C,P,X).
+<i>(source: <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/trace_v2.html#R-54814-00088-09992-08072-08455-19266-24087-41023'>context</a>, <a href='matrix/matrix_dtrace_v2.html#R-54814-00088-09992-08072-08455-19266-24087-41023'>detail</a>)</i></p></dd>
+
+<dt><b>R-54872-08741-62719-64632-51902-03049-34462-47837</b></dt>
+<dd><p>Changes to a view that are intercepted by INSTEAD OF triggers are not counted.
+<i>(source: <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>, checked-by: tcl/e_totalchanges.test, matrix: <a href='matrix/c3ref/total_changes.html#R-54872-08741-62719-64632-51902-03049-34462-47837'>context</a>, <a href='matrix/matrix_dtotal_changes.html#R-54872-08741-62719-64632-51902-03049-34462-47837'>detail</a>)</i></p></dd>
+
+<dt><b>R-54898-34554-42956-11210-21105-01944-03178-39152</b></dt>
+<dd><p>When casting a TEXT value to REAL, the longest possible prefix of the value that can be interpreted as a real number is extracted from the TEXT value and the remainder ignored.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-54898-34554-42956-11210-21105-01944-03178-39152'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-54898-34554-42956-11210-21105-01944-03178-39152'>detail</a>)</i></p></dd>
+
+<dt><b>R-54913-41491-50260-09040-49829-18676-09673-35147</b></dt>
+<dd><p>This is the number of times that the prepare statement has been automatically regenerated due to schema changes or changes to bound parameters that might affect the query plan.
+<i>(source: <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a>, matrix: <a href='matrix/c3ref/c_stmtstatus_counter.html#R-54913-41491-50260-09040-49829-18676-09673-35147'>context</a>, <a href='matrix/matrix_dc_stmtstatus_counter.html#R-54913-41491-50260-09040-49829-18676-09673-35147'>detail</a>)</i></p></dd>
+
+<dt><b>R-54914-35280-25250-15027-11750-01727-31556-09932</b></dt>
+<dd><p>The checksum algorithm is as follows: s0 = s1 = 0 for i from 0 to n-1 step 2: s0 += x(i) + s1; s1 += x(i+1) + s0; endfor # result in s0 and s1
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-54914-35280-25250-15027-11750-01727-31556-09932'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-54914-35280-25250-15027-11750-01727-31556-09932'>detail</a>)</i></p></dd>
+
+<dt><b>R-54918-11103-44275-41655-39625-25925-11501-45553</b></dt>
+<dd><p>If zVfsName is NULL then the default VFS is returned.
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-54918-11103-44275-41655-39625-25925-11501-45553'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-54918-11103-44275-41655-39625-25925-11501-45553'>detail</a>)</i></p></dd>
+
+<dt><b>R-54925-42075-28504-27777-13871-37665-20055-23123</b></dt>
+<dd><p>In a normal index, there is a one-to-one mapping between rows in a table and entries in each index associated with that table.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-54925-42075-28504-27777-13871-37665-20055-23123'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-54925-42075-28504-27777-13871-37665-20055-23123'>detail</a>)</i></p></dd>
+
+<dt><b>R-54935-19057-55411-14278-34768-16661-27190-25243</b></dt>
+<dd><p>Or, if the SELECT statement would return less than N rows without a LIMIT clause, then the entire result set is returned.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-54935-19057-55411-14278-34768-16661-27190-25243'>context</a>, <a href='matrix/matrix_dlang_select.html#R-54935-19057-55411-14278-34768-16661-27190-25243'>detail</a>)</i></p></dd>
+
+<dt><b>R-54958-52840-02592-08757-44641-49324-05794-46061</b></dt>
+<dd><p>All of the results in the example are the same if the comparisons are commuted - if expressions of the form "a<40" are rewritten as "40>a".
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-54958-52840-02592-08757-44641-49324-05794-46061'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-54958-52840-02592-08757-44641-49324-05794-46061'>detail</a>)</i></p></dd>
+
+<dt><b>R-54961-28617-11438-13073-24028-16766-12231-36247</b></dt>
+<dd><p>"SCAN" is used for a full-table scan, including cases where SQLite iterates through all records in a table in an order defined by an index.
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-54961-28617-11438-13073-24028-16766-12231-36247'>context</a>, <a href='matrix/matrix_deqp.html#R-54961-28617-11438-13073-24028-16766-12231-36247'>detail</a>)</i></p></dd>
+
+<dt><b>R-54967-64139-35056-57094-27190-32604-29267-26110</b></dt>
+<dd><p>If any databases are skipped because locks cannot be obtained, but no other error occurs, this function returns SQLITE_BUSY.
+<i>(source: <a href="c3ref/db_cacheflush.html">c3ref/db_cacheflush.html</a>, matrix: <a href='matrix/c3ref/db_cacheflush.html#R-54967-64139-35056-57094-27190-32604-29267-26110'>context</a>, <a href='matrix/matrix_ddb_cacheflush.html#R-54967-64139-35056-57094-27190-32604-29267-26110'>detail</a>)</i></p></dd>
+
+<dt><b>R-54971-39725-56830-50400-02582-07563-61018-15429</b></dt>
+<dd><p>The xCachesize() method may be called at any time by SQLite to set the suggested maximum cache-size (number of pages stored by) the cache instance passed as the first argument. This is the value configured using the SQLite "PRAGMA cache_size" command.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-54971-39725-56830-50400-02582-07563-61018-15429'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-54971-39725-56830-50400-02582-07563-61018-15429'>detail</a>)</i></p></dd>
+
+<dt><b>R-55025-21042-57260-24001-55816-18376-64535-50045</b></dt>
+<dd><p>The identifier name in this case can include one or more occurrences of "::" and a suffix enclosed in "(...)" containing any text at all.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-55025-21042-57260-24001-55816-18376-64535-50045'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-55025-21042-57260-24001-55816-18376-64535-50045'>detail</a>)</i></p></dd>
+
+<dt><b>R-55038-56206-39192-62322-52074-12429-49711-21478</b></dt>
+<dd><p>Compute the time since the unix epoch in seconds with millisecond precision: SELECT (julianday('now') - 2440587.5)*86400.0;
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-55038-56206-39192-62322-52074-12429-49711-21478'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-55038-56206-39192-62322-52074-12429-49711-21478'>detail</a>)</i></p></dd>
+
+<dt><b>R-55061-47754-54391-02401-15466-20656-29553-32154</b></dt>
+<dd><p>The COLLATE clause specifies the name of a collating sequence to use as the default collation sequence for the column.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-55061-47754-54391-02401-15466-20656-29553-32154'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-55061-47754-54391-02401-15466-20656-29553-32154'>detail</a>)</i></p></dd>
+
+<dt><b>R-55069-12282-57104-06256-56752-59196-49409-09981</b></dt>
+<dd><p>The default conflict resolution algorithm is ABORT.
+<i>(source: <a href="lang_conflict.html">lang_conflict.html</a>, checked-by: th3/req1/conflict03.test, matrix: <a href='matrix/lang_conflict.html#R-55069-12282-57104-06256-56752-59196-49409-09981'>context</a>, <a href='matrix/matrix_dlang_conflict.html#R-55069-12282-57104-06256-56752-59196-49409-09981'>detail</a>)</i></p></dd>
+
+<dt><b>R-55072-00299-56529-46464-12562-60725-23596-59611</b></dt>
+<dd><p>As with PRIMARY KEYs, a UNIQUE table-constraint clause must contain only column names &mdash; the use of expressions in an indexed-column of a UNIQUE table-constraint is not supported.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: th3/cov1/index05.test, matrix: <a href='matrix/lang_createtable.html#R-55072-00299-56529-46464-12562-60725-23596-59611'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-55072-00299-56529-46464-12562-60725-23596-59611'>detail</a>)</i></p></dd>
+
+<dt><b>R-55082-03288-31025-58898-03257-28661-47165-23134</b></dt>
+<dd><p>A virtual table implementation is always free to return rows in any order it wants, as long as the "orderByConsumed" flag is not set.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-55082-03288-31025-58898-03257-28661-47165-23134'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-55082-03288-31025-58898-03257-28661-47165-23134'>detail</a>)</i></p></dd>
+
+<dt><b>R-55084-10555-33415-01077-58327-07092-00273-30693</b></dt>
+<dd><p>Casting a TEXT or BLOB value into NUMERIC yields either an INTEGER or a REAL result.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/cast.test, tcl/e_expr.test, th3/cov1/cast01.test, matrix: <a href='matrix/lang_expr.html#R-55084-10555-33415-01077-58327-07092-00273-30693'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-55084-10555-33415-01077-58327-07092-00273-30693'>detail</a>)</i></p></dd>
+
+<dt><b>R-55089-42193-42390-08039-05012-03378-63784-16707</b></dt>
+<dd><p>If the argument N is omitted, then the analysis limit is unchanged.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-55089-42193-42390-08039-05012-03378-63784-16707'>context</a>, <a href='matrix/matrix_dpragma.html#R-55089-42193-42390-08039-05012-03378-63784-16707'>detail</a>)</i></p></dd>
+
+<dt><b>R-55130-30724-57761-34999-45544-53302-25388-55825</b></dt>
+<dd><p>The sqlite3_table_column_metadata() interface returns SQLITE_ERROR if the specified column does not exist.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-55130-30724-57761-34999-45544-53302-25388-55825'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-55130-30724-57761-34999-45544-53302-25388-55825'>detail</a>)</i></p></dd>
+
+<dt><b>R-55137-26834-36059-41974-16460-01927-24032-61978</b></dt>
+<dd><p>For the purposes of unique indices, all NULL values are considered different from all other NULL values and are thus unique.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx01.test, matrix: <a href='matrix/lang_createindex.html#R-55137-26834-36059-41974-16460-01927-24032-61978'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-55137-26834-36059-41974-16460-01927-24032-61978'>detail</a>)</i></p></dd>
+
+<dt><b>R-55138-13241-38479-09846-46068-29398-26502-36438</b></dt>
+<dd><p>An alternative to using the VACUUM command to reclaim space after data has been deleted is auto-vacuum mode, enabled using the auto_vacuum pragma.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-55138-13241-38479-09846-46068-29398-26502-36438'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-55138-13241-38479-09846-46068-29398-26502-36438'>detail</a>)</i></p></dd>
+
+<dt><b>R-55147-47664-01653-03142-36497-30903-54815-06427</b></dt>
+<dd><p>For as long as the user has an open transaction, the database is allowed to exist in a state that violates any number of deferred foreign key constraints.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys12.test, th3/req1/foreignkeys14.test, matrix: <a href='matrix/foreignkeys.html#R-55147-47664-01653-03142-36497-30903-54815-06427'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-55147-47664-01653-03142-36497-30903-54815-06427'>detail</a>)</i></p></dd>
+
+<dt><b>R-55189-15164-61309-44787-48881-65424-27276-43718</b></dt>
+<dd><p>The sqlite3_initialize() routine is called internally by many other SQLite interfaces so that an application usually does not need to invoke sqlite3_initialize() directly.
+<i>(source: <a href="c3ref/initialize.html">c3ref/initialize.html</a>, matrix: <a href='matrix/c3ref/initialize.html#R-55189-15164-61309-44787-48881-65424-27276-43718'>context</a>, <a href='matrix/matrix_dinitialize.html#R-55189-15164-61309-44787-48881-65424-27276-43718'>detail</a>)</i></p></dd>
+
+<dt><b>R-55246-25452-29787-15226-62317-06868-45565-21162</b></dt>
+<dd><p>There are some contexts in SQLite that do not allow the use of non-deterministic functions: In the expression of a CHECK constraint. In the WHERE clause of a partial index. In an expression used as part of an expression index. In the expression of a generated column.
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-55246-25452-29787-15226-62317-06868-45565-21162'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-55246-25452-29787-15226-62317-06868-45565-21162'>detail</a>)</i></p></dd>
+
+<dt><b>R-55258-32329-20179-17327-29048-20222-48155-64370</b></dt>
+<dd><p>Any command that accesses the database (basically, any SQL command, except a few PRAGMA statements) will automatically start a transaction if one is not already in effect.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-55258-32329-20179-17327-29048-20222-48155-64370'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-55258-32329-20179-17327-29048-20222-48155-64370'>detail</a>)</i></p></dd>
+
+<dt><b>R-55269-29598-22145-31317-31671-53288-42244-17124</b></dt>
+<dd><p>The localtime_r() C function normally only works for years between 1970 and 2037. For dates outside this range, SQLite attempts to map the year into an equivalent year within this range, do the calculation, then map the year back.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: src/date.c, matrix: <a href='matrix/lang_datefunc.html#R-55269-29598-22145-31317-31671-53288-42244-17124'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-55269-29598-22145-31317-31671-53288-42244-17124'>detail</a>)</i></p></dd>
+
+<dt><b>R-55292-54599-58036-06496-23806-16073-05204-14716</b></dt>
+<dd><p>The first integer in this list is the approximate number of rows in the index.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-55292-54599-58036-06496-23806-16073-05204-14716'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-55292-54599-58036-06496-23806-16073-05204-14716'>detail</a>)</i></p></dd>
+
+<dt><b>R-55312-58443-27187-57557-21962-11397-57143-02839</b></dt>
+<dd><p>The SQLITE_VERSION_NUMBER C preprocessor macro resolves to an integer with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same numbers used in SQLITE_VERSION.
+<i>(source: <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>, checked-by: th3/req1/version01.test, matrix: <a href='matrix/c3ref/c_source_id.html#R-55312-58443-27187-57557-21962-11397-57143-02839'>context</a>, <a href='matrix/matrix_dc_source_id.html#R-55312-58443-27187-57557-21962-11397-57143-02839'>detail</a>)</i></p></dd>
+
+<dt><b>R-55316-21772-61172-01789-50748-54713-63157-59070</b></dt>
+<dd><p>If the VFS does not support shared-memory methods, then the attempt to open a database that is already in WAL mode, or the attempt convert a database into WAL mode, will fail.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, th3/req1/pragma05.test, matrix: <a href='matrix/wal.html#R-55316-21772-61172-01789-50748-54713-63157-59070'>context</a>, <a href='matrix/matrix_dwal.html#R-55316-21772-61172-01789-50748-54713-63157-59070'>detail</a>)</i></p></dd>
+
+<dt><b>R-55351-62604-52448-54183-29592-46679-39320-37048</b></dt>
+<dd><p>A single row of a table cannot store more than SQLITE_MAX_LENGTH bytes of data.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, matrix: <a href='matrix/lang_createtable.html#R-55351-62604-52448-54183-29592-46679-39320-37048'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-55351-62604-52448-54183-29592-46679-39320-37048'>detail</a>)</i></p></dd>
+
+<dt><b>R-55352-50321-25777-65350-51066-10256-38308-17470</b></dt>
+<dd><p>The number of columns in the result can be determined using sqlite3_column_count().
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column01.test, matrix: <a href='matrix/c3ref/column_blob.html#R-55352-50321-25777-65350-51066-10256-38308-17470'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-55352-50321-25777-65350-51066-10256-38308-17470'>detail</a>)</i></p></dd>
+
+<dt><b>R-55381-29093-22266-09255-42316-49532-06927-42379</b></dt>
+<dd><p>IMMEDIATE cause the database connection to start a new write immediately, without waiting for a write statement.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-55381-29093-22266-09255-42316-49532-06927-42379'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-55381-29093-22266-09255-42316-49532-06927-42379'>detail</a>)</i></p></dd>
+
+<dt><b>R-55392-56277-35725-48242-28273-14685-15840-32650</b></dt>
+<dd><p>If the third parameter to sqlite3_bind_text() or sqlite3_bind_text16() or sqlite3_bind_blob() is a NULL pointer then the fourth parameter is ignored and the end result is the same as sqlite3_bind_null().
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-55392-56277-35725-48242-28273-14685-15840-32650'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-55392-56277-35725-48242-28273-14685-15840-32650'>detail</a>)</i></p></dd>
+
+<dt><b>R-55398-57340-09635-03247-16694-08409-20914-48585</b></dt>
+<dd><p>Setting parameter X to NULL disables the progress handler.
+<i>(source: <a href="c3ref/progress_handler.html">c3ref/progress_handler.html</a>, checked-by: th3/req1/progress01.test, matrix: <a href='matrix/c3ref/progress_handler.html#R-55398-57340-09635-03247-16694-08409-20914-48585'>context</a>, <a href='matrix/matrix_dprogress_handler.html#R-55398-57340-09635-03247-16694-08409-20914-48585'>detail</a>)</i></p></dd>
+
+<dt><b>R-55403-13450-43666-61222-09717-03349-14429-52085</b></dt>
+<dd><p>The HAVING expression may refer to values, even aggregate functions, that are not in the result.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-55403-13450-43666-61222-09717-03349-14429-52085'>context</a>, <a href='matrix/matrix_dlang_select.html#R-55403-13450-43666-61222-09717-03349-14429-52085'>detail</a>)</i></p></dd>
+
+<dt><b>R-55406-38524-31149-09087-45874-46813-10331-17259</b></dt>
+<dd><p>A percent symbol ("%") in the LIKE pattern matches any sequence of zero or more characters in the string.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-55406-38524-31149-09087-45874-46813-10331-17259'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-55406-38524-31149-09087-45874-46813-10331-17259'>detail</a>)</i></p></dd>
+
+<dt><b>R-55407-45319-53851-58560-05892-08992-42854-39100</b></dt>
+<dd><p>The declared type of each column is determined by the expression affinity of the corresponding expression in the result set of the SELECT statement, as follows: Expression Affinity Column Declared Type TEXT "TEXT" NUMERIC "NUM" INTEGER "INT" REAL "REAL" BLOB (a.k.a "NONE") "" (empty string)
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-55407-45319-53851-58560-05892-08992-42854-39100'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-55407-45319-53851-58560-05892-08992-42854-39100'>detail</a>)</i></p></dd>
+
+<dt><b>R-55422-28457-57897-11786-10838-58259-25547-52567</b></dt>
+<dd><p>Changing the recursive_triggers setting affects the execution of all statements prepared using the database connection, including those prepared before the setting was changed.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-55422-28457-57897-11786-10838-58259-25547-52567'>context</a>, <a href='matrix/matrix_dpragma.html#R-55422-28457-57897-11786-10838-58259-25547-52567'>detail</a>)</i></p></dd>
+
+<dt><b>R-55435-14303-03333-49029-22084-10936-61067-18432</b></dt>
+<dd><p>Each time a new row is inserted into the table or an existing row is updated, the expression associated with each CHECK constraint is evaluated and cast to a NUMERIC value in the same way as a CAST expression. If the result is zero (integer value 0 or real value 0.0), then a constraint violation has occurred.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-55435-14303-03333-49029-22084-10936-61067-18432'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-55435-14303-03333-49029-22084-10936-61067-18432'>detail</a>)</i></p></dd>
+
+<dt><b>R-55438-03590-29197-39620-12271-07480-54322-54101</b></dt>
+<dd><p>The same VFS can be registered multiple times without injury.
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-55438-03590-29197-39620-12271-07480-54322-54101'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-55438-03590-29197-39620-12271-07480-54322-54101'>detail</a>)</i></p></dd>
+
+<dt><b>R-55460-47820-18774-52597-12272-16306-23027-62332</b></dt>
+<dd><p>If there is a blocking connection, then the extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in the special "DROP TABLE/INDEX" case, the extended error code is just SQLITE_LOCKED.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-55460-47820-18774-52597-12272-16306-23027-62332'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-55460-47820-18774-52597-12272-16306-23027-62332'>detail</a>)</i></p></dd>
+
+<dt><b>R-55469-62130-44621-63602-01605-63421-57069-12544</b></dt>
+<dd><p>The char(X1,X2,...,XN) function returns a string composed of characters having the unicode code point values of integers X1 through XN, respectively.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/func.test, matrix: <a href='matrix/lang_corefunc.html#R-55469-62130-44621-63602-01605-63421-57069-12544'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-55469-62130-44621-63602-01605-63421-57069-12544'>detail</a>)</i></p></dd>
+
+<dt><b>R-55530-52930-45065-40235-10917-28940-04210-09538</b></dt>
+<dd><p>In a well-formed b-tree page, there will always be at least one cell before the first freeblock.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-55530-52930-45065-40235-10917-28940-04210-09538'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-55530-52930-45065-40235-10917-28940-04210-09538'>detail</a>)</i></p></dd>
+
+<dt><b>R-55532-10108-63513-58109-24698-43338-62703-39415</b></dt>
+<dd><p>Values 1, 1.0, 0.1, -0.1 and '1english' are considered to be true.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-55532-10108-63513-58109-24698-43338-62703-39415'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-55532-10108-63513-58109-24698-43338-62703-39415'>detail</a>)</i></p></dd>
+
+<dt><b>R-55548-33817-29284-24020-20403-44127-42701-15933</b></dt>
+<dd><p>The compile-time setting for URI filenames can be changed at start-time using the sqlite3_config(SQLITE_CONFIG_URI,1) or sqlite3_config(SQLITE_CONFIG_URI,0) configuration calls.
+<i>(source: <a href="uri.html">uri.html</a>, checked-by: src/main.c, th3/th3main.c, matrix: <a href='matrix/uri.html#R-55548-33817-29284-24020-20403-44127-42701-15933'>context</a>, <a href='matrix/matrix_duri.html#R-55548-33817-29284-24020-20403-44127-42701-15933'>detail</a>)</i></p></dd>
+
+<dt><b>R-55594-21030-55644-51033-26913-03312-40389-27101</b></dt>
+<dd><p>The SQLITE_CONFIG_MALLOC option takes a single argument which is a pointer to an instance of the sqlite3_mem_methods structure. The argument specifies alternative low-level memory allocation routines to be used in place of the memory allocation routines built into SQLite.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3oom.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-55594-21030-55644-51033-26913-03312-40389-27101'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-55594-21030-55644-51033-26913-03312-40389-27101'>detail</a>)</i></p></dd>
+
+<dt><b>R-55595-13513-43287-07115-18907-23748-32560-50080</b></dt>
+<dd><p>The strftime() function also takes a format string as its first argument.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-55595-13513-43287-07115-18907-23748-32560-50080'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-55595-13513-43287-07115-18907-23748-32560-50080'>detail</a>)</i></p></dd>
+
+<dt><b>R-55606-57227-21877-64681-10447-20017-21356-32881</b></dt>
+<dd><p>If the RELEASE command causes the transaction stack to become empty (if the RELEASE command releases the outermost transaction from the stack) then the transaction commits.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-55606-57227-21877-64681-10447-20017-21356-32881'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-55606-57227-21877-64681-10447-20017-21356-32881'>detail</a>)</i></p></dd>
+
+<dt><b>R-55636-16561-36868-23956-09727-21947-00276-50271</b></dt>
+<dd><p>If two or more tables in different databases have the same name and the schema-name prefix is not used on a table reference, then the table chosen is the one in the database that was least recently attached.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach01.test, matrix: <a href='matrix/lang_attach.html#R-55636-16561-36868-23956-09727-21947-00276-50271'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-55636-16561-36868-23956-09727-21947-00276-50271'>detail</a>)</i></p></dd>
+
+<dt><b>R-55638-04244-14117-31927-31561-07826-29267-09174</b></dt>
+<dd><p>The sqlite3_reset(S) interface does not change the values of any bindings on the prepared statement S.
+<i>(source: <a href="c3ref/reset.html">c3ref/reset.html</a>, checked-by: th3/req1/clearbind01.test, matrix: <a href='matrix/c3ref/reset.html#R-55638-04244-14117-31927-31561-07826-29267-09174'>context</a>, <a href='matrix/matrix_dreset.html#R-55638-04244-14117-31927-31561-07826-29267-09174'>detail</a>)</i></p></dd>
+
+<dt><b>R-55640-01652-03650-49788-46468-05074-56971-00383</b></dt>
+<dd><p>The column is used in a foreign key constraint.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: tcl/alterdropcol2.test, th3/cov1/altertable25.test, matrix: <a href='matrix/lang_altertable.html#R-55640-01652-03650-49788-46468-05074-56971-00383'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-55640-01652-03650-49788-46468-05074-56971-00383'>detail</a>)</i></p></dd>
+
+<dt><b>R-55672-01620-31109-43050-24330-12239-06929-55084</b></dt>
+<dd><p>The first column is the name of the table that contains the REFERENCES clause.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/fkey5.test, th3/cov1/fkey23.test, matrix: <a href='matrix/pragma.html#R-55672-01620-31109-43050-24330-12239-06929-55084'>context</a>, <a href='matrix/matrix_dpragma.html#R-55672-01620-31109-43050-24330-12239-06929-55084'>detail</a>)</i></p></dd>
+
+<dt><b>R-55673-47845-33764-15957-40467-43694-47305-60720</b></dt>
+<dd><p>The memory high-water mark is reset to the current value of sqlite3_memory_used() if and only if the parameter to sqlite3_memory_highwater() is true.
+<i>(source: <a href="c3ref/memory_highwater.html">c3ref/memory_highwater.html</a>, matrix: <a href='matrix/c3ref/memory_highwater.html#R-55673-47845-33764-15957-40467-43694-47305-60720'>context</a>, <a href='matrix/matrix_dmemory_highwater.html#R-55673-47845-33764-15957-40467-43694-47305-60720'>detail</a>)</i></p></dd>
+
+<dt><b>R-55700-34343-49028-33969-14549-05550-41139-48792</b></dt>
+<dd><p>This pragma does a low-level formatting and consistency check of the database.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-55700-34343-49028-33969-14549-05550-41139-48792'>context</a>, <a href='matrix/matrix_dpragma.html#R-55700-34343-49028-33969-14549-05550-41139-48792'>detail</a>)</i></p></dd>
+
+<dt><b>R-55708-49653-17675-07799-20555-47879-27152-48993</b></dt>
+<dd><p>When COMMIT fails in this way, the transaction remains active and the COMMIT can be retried later after the reader has had a chance to clear.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-55708-49653-17675-07799-20555-47879-27152-48993'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-55708-49653-17675-07799-20555-47879-27152-48993'>detail</a>)</i></p></dd>
+
+<dt><b>R-55733-20912-49393-01361-02084-05970-17120-19612</b></dt>
+<dd><p>If the callback function of the 3rd argument to sqlite3_exec() is not NULL, then it is invoked for each result row coming out of the evaluated SQL statements.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-55733-20912-49393-01361-02084-05970-17120-19612'>context</a>, <a href='matrix/matrix_dexec.html#R-55733-20912-49393-01361-02084-05970-17120-19612'>detail</a>)</i></p></dd>
+
+<dt><b>R-55814-22637-16882-39129-49686-50158-19394-50709</b></dt>
+<dd><p>The "SET DEFAULT" actions are similar to "SET NULL", except that each of the child key columns is set to contain the column's default value instead of NULL.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-55814-22637-16882-39129-49686-50158-19394-50709'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-55814-22637-16882-39129-49686-50158-19394-50709'>detail</a>)</i></p></dd>
+
+<dt><b>R-55820-29984-60455-07962-21616-40941-09415-50372</b></dt>
+<dd><p>In most cases, UNIQUE and PRIMARY KEY constraints are implemented by creating a unique index in the database.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-55820-29984-60455-07962-21616-40941-09415-50372'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-55820-29984-60455-07962-21616-40941-09415-50372'>detail</a>)</i></p></dd>
+
+<dt><b>R-55837-00155-61561-08494-32854-35753-30155-49706</b></dt>
+<dd><p>The pUser variable may be set by the callback implementation to any arbitrary value that may be useful to subsequent invocations of the callback within the same query (for example, a pointer to a complicated data structure used to test for region intersection).
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, th3/cov1/rtree03.test, matrix: <a href='matrix/rtree.html#R-55837-00155-61561-08494-32854-35753-30155-49706'>context</a>, <a href='matrix/matrix_drtree.html#R-55837-00155-61561-08494-32854-35753-30155-49706'>detail</a>)</i></p></dd>
+
+<dt><b>R-55869-30521-47622-53163-51064-21445-33319-34731</b></dt>
+<dd><p>If the UPDATE statement does not have a WHERE clause, all rows in the table are modified by the UPDATE.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-55869-30521-47622-53163-51064-21445-33319-34731'>context</a>, <a href='matrix/matrix_dlang_update.html#R-55869-30521-47622-53163-51064-21445-33319-34731'>detail</a>)</i></p></dd>
+
+<dt><b>R-55888-39002-08567-49374-03343-41740-10082-36394</b></dt>
+<dd><p>Extension loading is off by default.
+<i>(source: <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a>, matrix: <a href='matrix/c3ref/enable_load_extension.html#R-55888-39002-08567-49374-03343-41740-10082-36394'>context</a>, <a href='matrix/matrix_denable_load_extension.html#R-55888-39002-08567-49374-03343-41740-10082-36394'>detail</a>)</i></p></dd>
+
+<dt><b>R-55903-20082-12808-10678-61421-17044-64440-32605</b></dt>
+<dd><p>The idxNum and idxPtr values are recorded and passed into the xFilter method.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-55903-20082-12808-10678-61421-17044-64440-32605'>context</a>, <a href='matrix/matrix_dindex_info.html#R-55903-20082-12808-10678-61421-17044-64440-32605'>detail</a>)</i></p></dd>
+
+<dt><b>R-55970-49067-15919-18439-36628-50905-05103-43155</b></dt>
+<dd><p>If the new row is not present in the table, or if it does not contain a blob or text value, or if another error occurs, an SQLite error code is returned and the blob handle is considered aborted.
+<i>(source: <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>, checked-by: th3/req1/blob01.test, matrix: <a href='matrix/c3ref/blob_reopen.html#R-55970-49067-15919-18439-36628-50905-05103-43155'>context</a>, <a href='matrix/matrix_dblob_reopen.html#R-55970-49067-15919-18439-36628-50905-05103-43155'>detail</a>)</i></p></dd>
+
+<dt><b>R-55979-39402-28756-48871-04161-58570-28531-57962</b></dt>
+<dd><p>It is the nature of the Guttman R-Tree algorithm that any write might radically restructure the tree, and in the process change the scan order of the nodes.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-55979-39402-28756-48871-04161-58570-28531-57962'>context</a>, <a href='matrix/matrix_drtree.html#R-55979-39402-28756-48871-04161-58570-28531-57962'>detail</a>)</i></p></dd>
+
+<dt><b>R-55989-34690-53025-39227-28195-61827-56491-03494</b></dt>
+<dd><p>If an index is created using a statement like this: CREATE INDEX idx_ex1 ON ex1(a,b,c,d,e,...,y,z); Then the index might be used if the initial columns of the index (columns a, b, and so forth) appear in WHERE clause terms.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-55989-34690-53025-39227-28195-61827-56491-03494'>context</a>, <a href='matrix/matrix_doptoverview.html#R-55989-34690-53025-39227-28195-61827-56491-03494'>detail</a>)</i></p></dd>
+
+<dt><b>R-56020-12355-36965-55890-52401-50899-40834-02969</b></dt>
+<dd><p>To overcome this problem, a separate data structure called the wal-index is maintained to expedite the search for frames of a particular page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-56020-12355-36965-55890-52401-50899-40834-02969'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-56020-12355-36965-55890-52401-50899-40834-02969'>detail</a>)</i></p></dd>
+
+<dt><b>R-56032-24923-44084-62651-61742-23069-00366-25575</b></dt>
+<dd><p>The foreign key constraint is satisfied if for each row in the child table either one or more of the child key columns are NULL, or there exists a row in the parent table for which each parent key column contains a value equal to the value in its associated child key column.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys03.test, matrix: <a href='matrix/foreignkeys.html#R-56032-24923-44084-62651-61742-23069-00366-25575'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-56032-24923-44084-62651-61742-23069-00366-25575'>detail</a>)</i></p></dd>
+
+<dt><b>R-56064-04001-25559-63693-43897-15444-07346-25115</b></dt>
+<dd><p>The %p format is an alias for %X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/printf2.test, th3/cov1/printf08.test, matrix: <a href='matrix/lang_corefunc.html#R-56064-04001-25559-63693-43897-15444-07346-25115'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-56064-04001-25559-63693-43897-15444-07346-25115'>detail</a>)</i></p></dd>
+
+<dt><b>R-56075-46525-28921-54400-33560-07294-24655-01890</b></dt>
+<dd><p>The source and destination database connections (parameters S and D) must be different or else sqlite3_backup_init(D,N,S,M) will fail with an error.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup02.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-56075-46525-28921-54400-33560-07294-24655-01890'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-56075-46525-28921-54400-33560-07294-24655-01890'>detail</a>)</i></p></dd>
+
+<dt><b>R-56088-25150-58914-01692-09523-48299-30387-32306</b></dt>
+<dd><p>The group_concat() function returns a string which is the concatenation of all non-NULL values of X.
+<i>(source: <a href="lang_aggfunc.html">lang_aggfunc.html</a>, checked-by: th3/req1/aggfunc01.test, matrix: <a href='matrix/lang_aggfunc.html#R-56088-25150-58914-01692-09523-48299-30387-32306'>context</a>, <a href='matrix/matrix_dlang_aggfunc.html#R-56088-25150-58914-01692-09523-48299-30387-32306'>detail</a>)</i></p></dd>
+
+<dt><b>R-56094-57830-57463-55156-04028-13498-23873-32141</b></dt>
+<dd><p>the following three table declarations all cause the column "x" to be an alias for the rowid (an integer primary key): CREATE TABLE t(x INTEGER PRIMARY KEY ASC, y, z); CREATE TABLE t(x INTEGER, y, z, PRIMARY KEY(x ASC)); CREATE TABLE t(x INTEGER, y, z, PRIMARY KEY(x DESC));
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-56094-57830-57463-55156-04028-13498-23873-32141'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-56094-57830-57463-55156-04028-13498-23873-32141'>detail</a>)</i></p></dd>
+
+<dt><b>R-56101-50212-09292-39432-28945-47695-30385-48702</b></dt>
+<dd><p>For the purposes of the previous sentence, a column name preceded by one or more unary "+" operators and/or CAST operators is still considered a column name.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-56101-50212-09292-39432-28945-47695-30385-48702'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-56101-50212-09292-39432-28945-47695-30385-48702'>detail</a>)</i></p></dd>
+
+<dt><b>R-56132-15700-29603-38264-36933-60961-45364-58760</b></dt>
+<dd><p>This is the only difference between a USING clause and its equivalent ON constraint.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-56132-15700-29603-38264-36933-60961-45364-58760'>context</a>, <a href='matrix/matrix_dlang_select.html#R-56132-15700-29603-38264-36933-60961-45364-58760'>detail</a>)</i></p></dd>
+
+<dt><b>R-56143-29319-15474-25022-04217-21901-07164-36607</b></dt>
+<dd><p>PRAGMA schema.index_xinfo(index-name); This pragma returns information about every column in an index.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15x.test, matrix: <a href='matrix/pragma.html#R-56143-29319-15474-25022-04217-21901-07164-36607'>context</a>, <a href='matrix/matrix_dpragma.html#R-56143-29319-15474-25022-04217-21901-07164-36607'>detail</a>)</i></p></dd>
+
+<dt><b>R-56168-33548-13029-39450-16925-62002-00954-18437</b></dt>
+<dd><p>The aConstraint[] array records WHERE clause constraints of the form: column OP expr where OP is =, <, <=, >, or >=.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-56168-33548-13029-39450-16925-62002-00954-18437'>context</a>, <a href='matrix/matrix_dindex_info.html#R-56168-33548-13029-39450-16925-62002-00954-18437'>detail</a>)</i></p></dd>
+
+<dt><b>R-56208-64576-63593-38076-41294-48177-09207-06182</b></dt>
+<dd><p>If this routine returns 0, that means the prepared statement returns no data (for example an UPDATE).
+<i>(source: <a href="c3ref/column_count.html">c3ref/column_count.html</a>, matrix: <a href='matrix/c3ref/column_count.html#R-56208-64576-63593-38076-41294-48177-09207-06182'>context</a>, <a href='matrix/matrix_dcolumn_count.html#R-56208-64576-63593-38076-41294-48177-09207-06182'>detail</a>)</i></p></dd>
+
+<dt><b>R-56236-11699-62098-20167-23584-50570-40984-46383</b></dt>
+<dd><p>The string 'UTF-16' is interpreted as "UTF-16 encoding using native machine byte-ordering".
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma16.test, matrix: <a href='matrix/pragma.html#R-56236-11699-62098-20167-23584-50570-40984-46383'>context</a>, <a href='matrix/matrix_dpragma.html#R-56236-11699-62098-20167-23584-50570-40984-46383'>detail</a>)</i></p></dd>
+
+<dt><b>R-56255-17851-46934-55657-46753-27526-25250-09423</b></dt>
+<dd><p>The C argument is a copy of the context pointer.
+<i>(source: <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/trace_v2.html#R-56255-17851-46934-55657-46753-27526-25250-09423'>context</a>, <a href='matrix/matrix_dtrace_v2.html#R-56255-17851-46934-55657-46753-27526-25250-09423'>detail</a>)</i></p></dd>
+
+<dt><b>R-56256-08578-55482-47155-20535-53157-53389-52654</b></dt>
+<dd><p>In the "v2" interface, the more specific error code is returned directly by sqlite3_step().
+<i>(source: <a href="c3ref/step.html">c3ref/step.html</a>, matrix: <a href='matrix/c3ref/step.html#R-56256-08578-55482-47155-20535-53157-53389-52654'>context</a>, <a href='matrix/matrix_dstep.html#R-56256-08578-55482-47155-20535-53157-53389-52654'>detail</a>)</i></p></dd>
+
+<dt><b>R-56280-17369-11717-14525-09241-09664-14556-20621</b></dt>
+<dd><p>Both forms of the CASE expression use lazy, or short-circuit, evaluation.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-56280-17369-11717-14525-09241-09664-14556-20621'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-56280-17369-11717-14525-09241-09664-14556-20621'>detail</a>)</i></p></dd>
+
+<dt><b>R-56294-03966-08864-53339-51473-44924-63281-58418</b></dt>
+<dd><p>All types of SELECT statement, including aggregate and compound SELECT queries (queries with keywords like UNION or EXCEPT) are allowed as scalar subqueries.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-56294-03966-08864-53339-51473-44924-63281-58418'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-56294-03966-08864-53339-51473-44924-63281-58418'>detail</a>)</i></p></dd>
+
+<dt><b>R-56352-62404-53777-34179-15915-63338-07108-44476</b></dt>
+<dd><p>However, since SQLite version 3.35.0, TEMP triggers are still allowed even if this option is off. So, in other words, this option now only disables triggers in the main database schema or in the schemas of ATTACH-ed databases.
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-56352-62404-53777-34179-15915-63338-07108-44476'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-56352-62404-53777-34179-15915-63338-07108-44476'>detail</a>)</i></p></dd>
+
+<dt><b>R-56368-08028-57945-39505-32022-20213-21801-17605</b></dt>
+<dd><p>The iif(X,Y,Z) function is logically equivalent to and generates the same bytecode as the CASE expression "CASE WHEN X THEN Y ELSE Z END".
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, matrix: <a href='matrix/lang_corefunc.html#R-56368-08028-57945-39505-32022-20213-21801-17605'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-56368-08028-57945-39505-32022-20213-21801-17605'>detail</a>)</i></p></dd>
+
+<dt><b>R-56376-21261-47968-49600-56386-05495-27914-63410</b></dt>
+<dd><p>Column zColumn does not exist
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-56376-21261-47968-49600-56386-05495-27914-63410'>context</a>, <a href='matrix/matrix_dblob_open.html#R-56376-21261-47968-49600-56386-05495-27914-63410'>detail</a>)</i></p></dd>
+
+<dt><b>R-56419-60514-06155-63301-38811-42368-46598-13480</b></dt>
+<dd><p>However, in a partial index, the index b-tree only contains entries corresponding to table rows for which the WHERE clause expression on the CREATE INDEX statement is true.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-56419-60514-06155-63301-38811-42368-46598-13480'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-56419-60514-06155-63301-38811-42368-46598-13480'>detail</a>)</i></p></dd>
+
+<dt><b>R-56424-18878-13584-40742-26912-14341-05618-57860</b></dt>
+<dd><p>The first parameter is an operation code that determines the number, meaning, and operation of all subsequent parameters.
+<i>(source: <a href="c3ref/test_control.html">c3ref/test_control.html</a>, checked-by: th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/test_control.html#R-56424-18878-13584-40742-26912-14341-05618-57860'>context</a>, <a href='matrix/matrix_dtest_control.html#R-56424-18878-13584-40742-26912-14341-05618-57860'>detail</a>)</i></p></dd>
+
+<dt><b>R-56469-26825-44365-22627-52974-52312-09458-38219</b></dt>
+<dd><p>Within the xUpdate method of a virtual table, the sqlite3_value_nochange(X) interface returns true if and only if the column corresponding to X is unchanged by the UPDATE operation that the xUpdate method call was invoked to implement and if and the prior xColumn method call that was invoked to extracted the value for that column returned without setting a result (probably because it queried sqlite3_vtab_nochange() and found that the column was unchanging).
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, matrix: <a href='matrix/c3ref/value_blob.html#R-56469-26825-44365-22627-52974-52312-09458-38219'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-56469-26825-44365-22627-52974-52312-09458-38219'>detail</a>)</i></p></dd>
+
+<dt><b>R-56498-08746-01778-64119-24503-60496-01262-20715</b></dt>
+<dd><p>ncol: the number of columns in the table, including generated columns and hidden columns.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-56498-08746-01778-64119-24503-60496-01262-20715'>context</a>, <a href='matrix/matrix_dpragma.html#R-56498-08746-01778-64119-24503-60496-01262-20715'>detail</a>)</i></p></dd>
+
+<dt><b>R-56511-46089-40273-37812-64837-44245-01436-05433</b></dt>
+<dd><p>When the write-ahead log is enabled (via the journal_mode pragma) a checkpoint will be run automatically whenever the write-ahead log equals or exceeds N pages in length.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-56511-46089-40273-37812-64837-44245-01436-05433'>context</a>, <a href='matrix/matrix_dpragma.html#R-56511-46089-40273-37812-64837-44245-01436-05433'>detail</a>)</i></p></dd>
+
+<dt><b>R-56518-44310-03576-50973-10041-44259-32136-55602</b></dt>
+<dd><p>The second parameter to the callback is an integer action code that specifies the particular action to be authorized.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: src/tclsqlite.c, th3/th3util.c, matrix: <a href='matrix/c3ref/set_authorizer.html#R-56518-44310-03576-50973-10041-44259-32136-55602'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-56518-44310-03576-50973-10041-44259-32136-55602'>detail</a>)</i></p></dd>
+
+<dt><b>R-56522-34239-18790-35664-56574-22774-39070-01307</b></dt>
+<dd><p>an implicit DELETE FROM does cause any configured foreign key actions to take place.
+<i>(source: <a href="lang_droptable.html">lang_droptable.html</a>, checked-by: th3/req1/droptable01.test, matrix: <a href='matrix/lang_droptable.html#R-56522-34239-18790-35664-56574-22774-39070-01307'>context</a>, <a href='matrix/matrix_dlang_droptable.html#R-56522-34239-18790-35664-56574-22774-39070-01307'>detail</a>)</i></p></dd>
+
+<dt><b>R-56593-29586-46477-05582-12262-16741-07169-41199</b></dt>
+<dd><p>The default encoding for databases created using sqlite3_open16() will be UTF-16 in the native byte order.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/main12.test, matrix: <a href='matrix/c3ref/open.html#R-56593-29586-46477-05582-12262-16741-07169-41199'>context</a>, <a href='matrix/matrix_dopen.html#R-56593-29586-46477-05582-12262-16741-07169-41199'>detail</a>)</i></p></dd>
+
+<dt><b>R-56683-13731-54307-64156-42285-19581-37676-29217</b></dt>
+<dd><p>If the optional ESCAPE clause is present, then the expression following the ESCAPE keyword must evaluate to a string consisting of a single character.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-56683-13731-54307-64156-42285-19581-37676-29217'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-56683-13731-54307-64156-42285-19581-37676-29217'>detail</a>)</i></p></dd>
+
+<dt><b>R-56692-55226-52354-63477-50727-27057-22841-42848</b></dt>
+<dd><p>If sqlite3_malloc() is unable to obtain sufficient free memory, it returns a NULL pointer.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-56692-55226-52354-63477-50727-27057-22841-42848'>context</a>, <a href='matrix/matrix_dfree.html#R-56692-55226-52354-63477-50727-27057-22841-42848'>detail</a>)</i></p></dd>
+
+<dt><b>R-56743-17266-53373-09142-21068-04228-42328-23175</b></dt>
+<dd><p>The conversion from STRING or BLOB into REAL or INTEGER is performed even if it is lossy and irreversible.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_06.test, matrix: <a href='matrix/datatype3.html#R-56743-17266-53373-09142-21068-04228-42328-23175'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-56743-17266-53373-09142-21068-04228-42328-23175'>detail</a>)</i></p></dd>
+
+<dt><b>R-56763-40111-20796-18613-30177-15204-60661-20529</b></dt>
+<dd><p>If the value is between 0.0 and 5373484.499999, then it is interpreted as a julian day number (corresponding to dates between -4713-11-24 12:00:00 and 9999-12-31 23:59:59, inclusive).
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, matrix: <a href='matrix/lang_datefunc.html#R-56763-40111-20796-18613-30177-15204-60661-20529'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-56763-40111-20796-18613-30177-15204-60661-20529'>detail</a>)</i></p></dd>
+
+<dt><b>R-56805-28429-09038-27116-20961-52646-32004-47216</b></dt>
+<dd><p>Note that "monotonically increasing" does not imply that the ROWID always increases by exactly one.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-56805-28429-09038-27116-20961-52646-32004-47216'>context</a>, <a href='matrix/matrix_dautoinc.html#R-56805-28429-09038-27116-20961-52646-32004-47216'>detail</a>)</i></p></dd>
+
+<dt><b>R-56841-45734-29539-09781-39505-27779-01471-37796</b></dt>
+<dd><p>If the argument is an index name, then only that one index is analyzed.
+<i>(source: <a href="lang_analyze.html">lang_analyze.html</a>, checked-by: th3/req1/analyze01.test, matrix: <a href='matrix/lang_analyze.html#R-56841-45734-29539-09781-39505-27779-01471-37796'>context</a>, <a href='matrix/matrix_dlang_analyze.html#R-56841-45734-29539-09781-39505-27779-01471-37796'>detail</a>)</i></p></dd>
+
+<dt><b>R-56844-61705-36939-38835-21077-60167-01566-10120</b></dt>
+<dd><p>If the current statement is not inside an explicit transaction (a BEGIN/COMMIT/ROLLBACK block), then an implicit transaction is committed as soon as the statement has finished executing. In this case deferred constraints behave the same as immediate constraints.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys12.test, matrix: <a href='matrix/foreignkeys.html#R-56844-61705-36939-38835-21077-60167-01566-10120'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-56844-61705-36939-38835-21077-60167-01566-10120'>detail</a>)</i></p></dd>
+
+<dt><b>R-56861-42673-10667-36418-55159-59166-26000-55286</b></dt>
+<dd><p>sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having the extra prepFlags parameter, which is a bit array consisting of zero or more of the SQLITE_PREPARE_* flags.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: src/prepare.c, matrix: <a href='matrix/c3ref/prepare.html#R-56861-42673-10667-36418-55159-59166-26000-55286'>context</a>, <a href='matrix/matrix_dprepare.html#R-56861-42673-10667-36418-55159-59166-26000-55286'>detail</a>)</i></p></dd>
+
+<dt><b>R-56899-62057-33576-54227-58668-21470-57671-19997</b></dt>
+<dd><p>Use this routine to reset all host parameters to NULL.
+<i>(source: <a href="c3ref/clear_bindings.html">c3ref/clear_bindings.html</a>, checked-by: th3/req1/clearbind01.test, matrix: <a href='matrix/c3ref/clear_bindings.html#R-56899-62057-33576-54227-58668-21470-57671-19997'>context</a>, <a href='matrix/matrix_dclear_bindings.html#R-56899-62057-33576-54227-58668-21470-57671-19997'>detail</a>)</i></p></dd>
+
+<dt><b>R-56910-04118-27168-31313-21595-13844-47285-28502</b></dt>
+<dd><p>The reverse_unordered_selects pragma works for most SELECT statements, however the query planner may sometimes choose an algorithm that is not easily reversed, in which case the output will appear in the same order regardless of the reverse_unordered_selects setting.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma27.test, matrix: <a href='matrix/pragma.html#R-56910-04118-27168-31313-21595-13844-47285-28502'>context</a>, <a href='matrix/matrix_dpragma.html#R-56910-04118-27168-31313-21595-13844-47285-28502'>detail</a>)</i></p></dd>
+
+<dt><b>R-56921-36726-52234-49163-41445-49849-43983-14131</b></dt>
+<dd><p>The module takes zero or more comma-separated arguments.
+<i>(source: <a href="lang_createvtab.html">lang_createvtab.html</a>, matrix: <a href='matrix/lang_createvtab.html#R-56921-36726-52234-49163-41445-49849-43983-14131'>context</a>, <a href='matrix/matrix_dlang_createvtab.html#R-56921-36726-52234-49163-41445-49849-43983-14131'>detail</a>)</i></p></dd>
+
+<dt><b>R-56922-36205-22482-11354-54881-45664-41752-42246</b></dt>
+<dd><p>The sqlite3_str_appendf(X,F,.
+<i>(source: <a href="c3ref/str_append.html">c3ref/str_append.html</a>, matrix: <a href='matrix/c3ref/str_append.html#R-56922-36205-22482-11354-54881-45664-41752-42246'>context</a>, <a href='matrix/matrix_dstr_append.html#R-56922-36205-22482-11354-54881-45664-41752-42246'>detail</a>)</i></p></dd>
+
+<dt><b>R-56934-42700-38980-08605-33652-52881-52643-23900</b></dt>
+<dd><p>A trigger normally exists in the same database as the table named after the "ON" keyword in the CREATE TRIGGER statement. Except, it is possible to create a TEMP TRIGGER on a table in another database.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-56934-42700-38980-08605-33652-52881-52643-23900'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-56934-42700-38980-08605-33652-52881-52643-23900'>detail</a>)</i></p></dd>
+
+<dt><b>R-56960-03061-20836-21931-13129-13661-26943-05315</b></dt>
+<dd><p>The sqlite_sequence row for an AUTOINCREMENT table is automatically deleted when the table is dropped.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-56960-03061-20836-21931-13129-13661-26943-05315'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-56960-03061-20836-21931-13129-13661-26943-05315'>detail</a>)</i></p></dd>
+
+<dt><b>R-56987-45305-59514-58142-26369-61446-32398-17394</b></dt>
+<dd><p>So to insert some data into our sample R*Tree index, we can do something like this: INSERT INTO demo_index VALUES (28215, -80.781227, -80.604706, 35.208813, 35.297367), (28216, -80.957283, -80.840599, 35.235920, 35.367825), (28217, -80.960869, -80.869431, 35.133682, 35.208233), (28226, -80.878983, -80.778275, 35.060287, 35.154446), (28227, -80.745544, -80.555382, 35.130215, 35.236916), (28244, -80.844208, -80.841988, 35.223728, 35.225471), (28262, -80.809074, -80.682938, 35.276207, 35.377747), (28269, -80.851471, -80.735718, 35.272560, 35.407925), (28270, -80.794983, -80.728966, 35.059872, 35.161823), (28273, -80.994766, -80.875259, 35.074734, 35.172836), (28277, -80.876793, -80.767586, 35.001709, 35.101063), (28278, -81.058029, -80.956375, 35.044701, 35.223812), (28280, -80.844208, -80.841972, 35.225468, 35.227203), (28282, -80.846382, -80.844193, 35.223972, 35.225655);
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-56987-45305-59514-58142-26369-61446-32398-17394'>context</a>, <a href='matrix/matrix_drtree.html#R-56987-45305-59514-58142-26369-61446-32398-17394'>detail</a>)</i></p></dd>
+
+<dt><b>R-57019-29874-21566-05710-22141-45725-52460-50437</b></dt>
+<dd><p>Attempt to return the underlying operating system error code or error number that caused the most recent I/O error or failure to open a file.
+<i>(source: <a href="c3ref/system_errno.html">c3ref/system_errno.html</a>, matrix: <a href='matrix/c3ref/system_errno.html#R-57019-29874-21566-05710-22141-45725-52460-50437'>context</a>, <a href='matrix/matrix_dsystem_errno.html#R-57019-29874-21566-05710-22141-45725-52460-50437'>detail</a>)</i></p></dd>
+
+<dt><b>R-57025-62168-38373-42436-38968-34840-50734-33391</b></dt>
+<dd><p>The CREATE INDEX command consists of the keywords "CREATE INDEX" followed by the name of the new index, the keyword "ON", the name of a previously created table that is to be indexed, and a parenthesized list of table column names and/or expressions that are used for the index key.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx01.test, matrix: <a href='matrix/lang_createindex.html#R-57025-62168-38373-42436-38968-34840-50734-33391'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-57025-62168-38373-42436-38968-34840-50734-33391'>detail</a>)</i></p></dd>
+
+<dt><b>R-57047-10461-09824-05395-44122-51121-43183-19652</b></dt>
+<dd><p>For each pair of columns identified by a USING clause, the column from the right-hand dataset is omitted from the joined dataset.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-57047-10461-09824-05395-44122-51121-43183-19652'>context</a>, <a href='matrix/matrix_dlang_select.html#R-57047-10461-09824-05395-44122-51121-43183-19652'>detail</a>)</i></p></dd>
+
+<dt><b>R-57051-20322-05054-14581-57313-02803-59746-15019</b></dt>
+<dd><p>TEMP triggers are not subject to the same-database rule. A TEMP trigger is allowed to query or modify any table in any ATTACH-ed database.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-57051-20322-05054-14581-57313-02803-59746-15019'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-57051-20322-05054-14581-57313-02803-59746-15019'>detail</a>)</i></p></dd>
+
+<dt><b>R-57064-52104-64431-17226-40317-39085-08319-65218</b></dt>
+<dd><p>A keyword enclosed in grave accents (ASCII code 96) is an identifier.
+<i>(source: <a href="lang_keywords.html">lang_keywords.html</a>, checked-by: th3/req1/keyword01.test, matrix: <a href='matrix/lang_keywords.html#R-57064-52104-64431-17226-40317-39085-08319-65218'>context</a>, <a href='matrix/matrix_dlang_keywords.html#R-57064-52104-64431-17226-40317-39085-08319-65218'>detail</a>)</i></p></dd>
+
+<dt><b>R-57089-01510-52711-12029-01843-57322-48096-53622</b></dt>
+<dd><p>The optional IF EXISTS clause suppresses the error that would normally result if the table does not exist.
+<i>(source: <a href="lang_droptable.html">lang_droptable.html</a>, checked-by: th3/req1/droptable01.test, matrix: <a href='matrix/lang_droptable.html#R-57089-01510-52711-12029-01843-57322-48096-53622'>context</a>, <a href='matrix/matrix_dlang_droptable.html#R-57089-01510-52711-12029-01843-57322-48096-53622'>detail</a>)</i></p></dd>
+
+<dt><b>R-57089-20897-11493-55029-43412-10473-15914-29086</b></dt>
+<dd><p>The hex() function interprets its argument as a BLOB and returns a string which is the upper-case hexadecimal rendering of the content of that blob.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-57089-20897-11493-55029-43412-10473-15914-29086'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-57089-20897-11493-55029-43412-10473-15914-29086'>detail</a>)</i></p></dd>
+
+<dt><b>R-57132-64688-04338-28404-47453-24973-03948-35534</b></dt>
+<dd><p>For a K-column index, there will be K+1 integers in the stat column.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-57132-64688-04338-28404-47453-24973-03948-35534'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-57132-64688-04338-28404-47453-24973-03948-35534'>detail</a>)</i></p></dd>
+
+<dt><b>R-57148-27043-24197-50864-17789-27068-60020-34476</b></dt>
+<dd><p>If a term of the WHERE clause is of the following form: expr1 BETWEEN expr2 AND expr3 Then two "virtual" terms are added as follows: expr1 >= expr2 AND expr1 <= expr3
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-57148-27043-24197-50864-17789-27068-60020-34476'>context</a>, <a href='matrix/matrix_doptoverview.html#R-57148-27043-24197-50864-17789-27068-60020-34476'>detail</a>)</i></p></dd>
+
+<dt><b>R-57180-61125-28109-34818-16201-30872-33443-40704</b></dt>
+<dd><p>If the D parameter is not NULL, then it is a pointer to a destructor for the P parameter.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/cov1/bindptr01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-57180-61125-28109-34818-16201-30872-33443-40704'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-57180-61125-28109-34818-16201-30872-33443-40704'>detail</a>)</i></p></dd>
+
+<dt><b>R-57195-25932-26146-45143-15236-49265-31478-06435</b></dt>
+<dd><p>When a column is indexed, the same collating function specified in the CREATE TABLE statement is used for the column in the index, by default, though this can be overridden using a COLLATE clause in the CREATE INDEX statement.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat05.test, matrix: <a href='matrix/fileformat2.html#R-57195-25932-26146-45143-15236-49265-31478-06435'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-57195-25932-26146-45143-15236-49265-31478-06435'>detail</a>)</i></p></dd>
+
+<dt><b>R-57216-60803-31079-31964-02291-43639-29753-51457</b></dt>
+<dd><p>The default behavior of the LIKE operator is to ignore case for ASCII characters. Hence, by default 'a' LIKE 'A' is true.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma10.test, matrix: <a href='matrix/pragma.html#R-57216-60803-31079-31964-02291-43639-29753-51457'>context</a>, <a href='matrix/matrix_dpragma.html#R-57216-60803-31079-31964-02291-43639-29753-51457'>detail</a>)</i></p></dd>
+
+<dt><b>R-57228-12904-01956-10826-41205-44004-37932-17124</b></dt>
+<dd><p>Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op.
+<i>(source: <a href="c3ref/finalize.html">c3ref/finalize.html</a>, checked-by: src/vdbeapi.c, th3/req1/finalize01.test, matrix: <a href='matrix/c3ref/finalize.html#R-57228-12904-01956-10826-41205-44004-37932-17124'>context</a>, <a href='matrix/matrix_dfinalize.html#R-57228-12904-01956-10826-41205-44004-37932-17124'>detail</a>)</i></p></dd>
+
+<dt><b>R-57239-11845-16463-18106-13303-34365-12787-00637</b></dt>
+<dd><p>If NORMAL locking mode is in effect for the first WAL-mode database access, then the shared-memory wal-index is created.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, th3/req1/pragma05.test, matrix: <a href='matrix/wal.html#R-57239-11845-16463-18106-13303-34365-12787-00637'>context</a>, <a href='matrix/matrix_dwal.html#R-57239-11845-16463-18106-13303-34365-12787-00637'>detail</a>)</i></p></dd>
+
+<dt><b>R-57242-37005-56028-08872-40154-45403-20109-09312</b></dt>
+<dd><p>Any "foreign key mismatch" errors encountered as part of an implicit DELETE are ignored.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys22.test, matrix: <a href='matrix/foreignkeys.html#R-57242-37005-56028-08872-40154-45403-20109-09312'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-57242-37005-56028-08872-40154-45403-20109-09312'>detail</a>)</i></p></dd>
+
+<dt><b>R-57255-33789-60728-42833-30002-01027-59947-48122</b></dt>
+<dd><p>However, depending on the statement being evaluated and the point at which the error occurs, it might be necessary for SQLite to rollback and cancel the entire transaction.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-57255-33789-60728-42833-30002-01027-59947-48122'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-57255-33789-60728-42833-30002-01027-59947-48122'>detail</a>)</i></p></dd>
+
+<dt><b>R-57259-65459-47411-32536-55813-09226-48634-58743</b></dt>
+<dd><p>SQLITE_OPEN_NOMUTEX The new database connection will use the "multi-thread" threading mode.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/main12.test, matrix: <a href='matrix/c3ref/open.html#R-57259-65459-47411-32536-55813-09226-48634-58743'>context</a>, <a href='matrix/matrix_dopen.html#R-57259-65459-47411-32536-55813-09226-48634-58743'>detail</a>)</i></p></dd>
+
+<dt><b>R-57301-64506-10586-49672-48759-26432-01783-64495</b></dt>
+<dd><p>"1" if the index is UNIQUE and "0" if not.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15.test, matrix: <a href='matrix/pragma.html#R-57301-64506-10586-49672-48759-26432-01783-64495'>context</a>, <a href='matrix/matrix_dpragma.html#R-57301-64506-10586-49672-48759-26432-01783-64495'>detail</a>)</i></p></dd>
+
+<dt><b>R-57313-56280-52259-04296-10229-37412-19300-33360</b></dt>
+<dd><p>If URI filenames are recognized when the database connection is originally opened, then URI filenames will also be recognized on ATTACH statements.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-57313-56280-52259-04296-10229-37412-19300-33360'>context</a>, <a href='matrix/matrix_duri.html#R-57313-56280-52259-04296-10229-37412-19300-33360'>detail</a>)</i></p></dd>
+
+<dt><b>R-57343-49114-15055-13437-46054-52631-22669-49552</b></dt>
+<dd><p>Value is a big-endian IEEE 754-2008 64-bit floating point number.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbeaux.c, th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-57343-49114-15055-13437-46054-52631-22669-49552'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-57343-49114-15055-13437-46054-52631-22669-49552'>detail</a>)</i></p></dd>
+
+<dt><b>R-57347-36071-40541-19557-35566-60658-39421-45937</b></dt>
+<dd><p>PRAGMA schema.mmap_size; PRAGMA schema.mmap_size=N Query or change the maximum number of bytes that are set aside for memory-mapped I/O on a single database.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-57347-36071-40541-19557-35566-60658-39421-45937'>context</a>, <a href='matrix/matrix_dpragma.html#R-57347-36071-40541-19557-35566-60658-39421-45937'>detail</a>)</i></p></dd>
+
+<dt><b>R-57359-59558-63770-19476-57809-18440-47111-21364</b></dt>
+<dd><p>The LIMIT and ORDER BY clauses for UPDATE are unsupported within triggers, regardless of the compilation options used to build SQLite.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-57359-59558-63770-19476-57809-18440-47111-21364'>context</a>, <a href='matrix/matrix_dlang_update.html#R-57359-59558-63770-19476-57809-18440-47111-21364'>detail</a>)</i></p></dd>
+
+<dt><b>R-57360-40691-20822-63524-22530-36364-65033-34134</b></dt>
+<dd><p>If a keyword in double quotes (ex: "key" or "glob") is used in a context where it cannot be resolved to an identifier but where a string literal is allowed, then the token is understood to be a string literal instead of an identifier.
+<i>(source: <a href="lang_keywords.html">lang_keywords.html</a>, checked-by: th3/req1/keyword01.test, matrix: <a href='matrix/lang_keywords.html#R-57360-40691-20822-63524-22530-36364-65033-34134'>context</a>, <a href='matrix/matrix_dlang_keywords.html#R-57360-40691-20822-63524-22530-36364-65033-34134'>detail</a>)</i></p></dd>
+
+<dt><b>R-57360-51191-61413-24528-10483-08494-62999-37912</b></dt>
+<dd><p>If the index is unique, then the last integer will be 1.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-57360-51191-61413-24528-10483-08494-62999-37912'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-57360-51191-61413-24528-10483-08494-62999-37912'>detail</a>)</i></p></dd>
+
+<dt><b>R-57428-63758-17863-58074-13884-12302-03924-53063</b></dt>
+<dd><p>The same page may not appear more than once within a single rollback journal.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-57428-63758-17863-58074-13884-12302-03924-53063'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-57428-63758-17863-58074-13884-12302-03924-53063'>detail</a>)</i></p></dd>
+
+<dt><b>R-57438-45968-34478-11728-33446-10820-01022-63673</b></dt>
+<dd><p>The query runs until the priority queue is empty.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc3.test, matrix: <a href='matrix/rtree.html#R-57438-45968-34478-11728-33446-10820-01022-63673'>context</a>, <a href='matrix/matrix_drtree.html#R-57438-45968-34478-11728-33446-10820-01022-63673'>detail</a>)</i></p></dd>
+
+<dt><b>R-57445-43425-22232-12533-21797-53023-32757-29365</b></dt>
+<dd><p>Note that the sqlite3_wal_autocheckpoint() interface and the wal_autocheckpoint pragma both invoke sqlite3_wal_hook() and will overwrite any prior sqlite3_wal_hook() settings.
+<i>(source: <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>, checked-by: tcl/e_walhook.test, matrix: <a href='matrix/c3ref/wal_hook.html#R-57445-43425-22232-12533-21797-53023-32757-29365'>context</a>, <a href='matrix/matrix_dwal_hook.html#R-57445-43425-22232-12533-21797-53023-32757-29365'>detail</a>)</i></p></dd>
+
+<dt><b>R-57464-30285-51678-51682-55772-21804-29928-17163</b></dt>
+<dd><p>PRAGMA database_list; This pragma works like a query to return one row for each database attached to the current database connection.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma14.test, matrix: <a href='matrix/pragma.html#R-57464-30285-51678-51682-55772-21804-29928-17163'>context</a>, <a href='matrix/matrix_dpragma.html#R-57464-30285-51678-51682-55772-21804-29928-17163'>detail</a>)</i></p></dd>
+
+<dt><b>R-57474-41961-20829-16248-57477-10262-25485-49294</b></dt>
+<dd><p>It is always ok for two or more rows with the same values in all "aOrderBy" columns to be returned, as long as all such rows are adjacent.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-57474-41961-20829-16248-57477-10262-25485-49294'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-57474-41961-20829-16248-57477-10262-25485-49294'>detail</a>)</i></p></dd>
+
+<dt><b>R-57479-00042-18825-57289-32505-64353-45358-46844</b></dt>
+<dd><p>These functions (collectively known as "function creation routines") are used to add SQL functions or aggregates or to redefine the behavior of existing SQL functions or aggregates.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc01.test, matrix: <a href='matrix/c3ref/create_function.html#R-57479-00042-18825-57289-32505-64353-45358-46844'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-57479-00042-18825-57289-32505-64353-45358-46844'>detail</a>)</i></p></dd>
+
+<dt><b>R-57495-24088-42518-44895-31255-64313-21113-39817</b></dt>
+<dd><p>There are two fundamental forms of the CASE expression: those with a base expression and those without.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-57495-24088-42518-44895-31255-64313-21113-39817'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-57495-24088-42518-44895-31255-64313-21113-39817'>detail</a>)</i></p></dd>
+
+<dt><b>R-57496-20354-59878-60624-45550-42577-49186-19120</b></dt>
+<dd><p>If the specific value bound to a host parameter in the WHERE clause might influence the choice of query plan for a statement, then the statement will be automatically recompiled, as if there had been a schema change, on the first sqlite3_step() call following any change to the bindings of that parameter.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: src/vdbeapi.c, th3/req1/prepare04.test, matrix: <a href='matrix/c3ref/prepare.html#R-57496-20354-59878-60624-45550-42577-49186-19120'>context</a>, <a href='matrix/matrix_dprepare.html#R-57496-20354-59878-60624-45550-42577-49186-19120'>detail</a>)</i></p></dd>
+
+<dt><b>R-57594-65522-56996-47204-62238-07875-00187-41859</b></dt>
+<dd><p>In all cases, the value returned is the new analysis limit used for subsequent ANALYZE commands.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/pragma.c, matrix: <a href='matrix/pragma.html#R-57594-65522-56996-47204-62238-07875-00187-41859'>context</a>, <a href='matrix/matrix_dpragma.html#R-57594-65522-56996-47204-62238-07875-00187-41859'>detail</a>)</i></p></dd>
+
+<dt><b>R-57611-29319-52424-65046-25950-44814-17641-61305</b></dt>
+<dd><p>The return value from both sqlite3_soft_heap_limit64() and sqlite3_hard_heap_limit64() is the size of the heap limit prior to the call, or negative in the case of an error.
+<i>(source: <a href="c3ref/hard_heap_limit64.html">c3ref/hard_heap_limit64.html</a>, checked-by: th3/req1/softheaplimit01.test, matrix: <a href='matrix/c3ref/hard_heap_limit64.html#R-57611-29319-52424-65046-25950-44814-17641-61305'>context</a>, <a href='matrix/matrix_dhard_heap_limit64.html#R-57611-29319-52424-65046-25950-44814-17641-61305'>detail</a>)</i></p></dd>
+
+<dt><b>R-57629-25253-01540-58314-47057-32967-17520-58138</b></dt>
+<dd><p>If the SELECT statement is an aggregate query without a GROUP BY clause, then each aggregate expression in the result-set is evaluated once across the entire dataset.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-57629-25253-01540-58314-47057-32967-17520-58138'>context</a>, <a href='matrix/matrix_dlang_select.html#R-57629-25253-01540-58314-47057-32967-17520-58138'>detail</a>)</i></p></dd>
+
+<dt><b>R-57724-31954-10264-24402-01814-32974-35251-10420</b></dt>
+<dd><p>The filename of the database follows the same semantics as the filename argument to sqlite3_open() and sqlite3_open_v2(); the special name ":memory:" results in an in-memory database and an empty string results in a new temporary database.
+<i>(source: <a href="lang_attach.html">lang_attach.html</a>, checked-by: th3/req1/attach03.test, matrix: <a href='matrix/lang_attach.html#R-57724-31954-10264-24402-01814-32974-35251-10420'>context</a>, <a href='matrix/matrix_dlang_attach.html#R-57724-31954-10264-24402-01814-32974-35251-10420'>detail</a>)</i></p></dd>
+
+<dt><b>R-57724-61571-01377-08004-10226-53040-57398-43203</b></dt>
+<dd><p>An ON CONFLICT clause may be specified as part of an UPDATE or INSERT action within the body of the trigger.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-57724-61571-01377-08004-10226-53040-57398-43203'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-57724-61571-01377-08004-10226-53040-57398-43203'>detail</a>)</i></p></dd>
+
+<dt><b>R-57761-09663-49557-09878-08377-44196-15212-54456</b></dt>
+<dd><p>If the sqlite3_vtab_distinct() interface returns 0, that means that the query planner needs the virtual table to return all rows in the sort order defined by the "nOrderBy" and "aOrderBy" fields of the sqlite3_index_info object.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-57761-09663-49557-09878-08377-44196-15212-54456'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-57761-09663-49557-09878-08377-44196-15212-54456'>detail</a>)</i></p></dd>
+
+<dt><b>R-57765-12380-65473-27490-60483-53059-23435-27202</b></dt>
+<dd><p>In the above paragraph, the term "equal" means equal when values are compared using the rules specified here.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys03.test, matrix: <a href='matrix/foreignkeys.html#R-57765-12380-65473-27490-60483-53059-23435-27202'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-57765-12380-65473-27490-60483-53059-23435-27202'>detail</a>)</i></p></dd>
+
+<dt><b>R-57773-31134-13859-63861-60262-03843-19674-02031</b></dt>
+<dd><p>With AUTOINCREMENT, rows with automatically selected ROWIDs are guaranteed to have ROWIDs that have never been used before by the same table in the same database.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-57773-31134-13859-63861-60262-03843-19674-02031'>context</a>, <a href='matrix/matrix_dautoinc.html#R-57773-31134-13859-63861-60262-03843-19674-02031'>detail</a>)</i></p></dd>
+
+<dt><b>R-57803-30267-35390-49714-00774-40493-44920-28706</b></dt>
+<dd><p>Note, however, that auto-vacuum only truncates the freelist pages from the file. Auto-vacuum does not defragment the database nor repack individual database pages the way that the VACUUM command does.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-57803-30267-35390-49714-00774-40493-44920-28706'>context</a>, <a href='matrix/matrix_dpragma.html#R-57803-30267-35390-49714-00774-40493-44920-28706'>detail</a>)</i></p></dd>
+
+<dt><b>R-57876-22123-39728-45816-26959-17516-32294-11302</b></dt>
+<dd><p>The default collating sequence is the collating sequence defined for that column in the CREATE TABLE statement.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx01.test, matrix: <a href='matrix/lang_createindex.html#R-57876-22123-39728-45816-26959-17516-32294-11302'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-57876-22123-39728-45816-26959-17516-32294-11302'>detail</a>)</i></p></dd>
+
+<dt><b>R-57880-35169-30628-02848-50703-50828-58750-28510</b></dt>
+<dd><p>sqlite> EXPLAIN QUERY PLAN SELECT t1.*, t2.* FROM t1, t2 WHERE t1.a=1 AND t1.b>2; QUERY PLAN |--SEARCH t1 USING INDEX i2 (a=? AND b>?) `--SCAN t2
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-57880-35169-30628-02848-50703-50828-58750-28510'>context</a>, <a href='matrix/matrix_deqp.html#R-57880-35169-30628-02848-50703-50828-58750-28510'>detail</a>)</i></p></dd>
+
+<dt><b>R-57884-37496-29952-23489-26945-21299-05103-05410</b></dt>
+<dd><p>The scheme of the URI must be "file:". Any other scheme results in the input being treated as an ordinary filename.
+<i>(source: <a href="uri.html">uri.html</a>, checked-by: src/main.c, matrix: <a href='matrix/uri.html#R-57884-37496-29952-23489-26945-21299-05103-05410'>context</a>, <a href='matrix/matrix_duri.html#R-57884-37496-29952-23489-26945-21299-05103-05410'>detail</a>)</i></p></dd>
+
+<dt><b>R-57928-57565-35172-43517-28321-39002-52243-13899</b></dt>
+<dd><p>The expression "x IN (SELECT y ...)" is handled in the same way as the expression "x = y" for the purposes of determining the collating sequence.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_10.test, matrix: <a href='matrix/datatype3.html#R-57928-57565-35172-43517-28321-39002-52243-13899'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-57928-57565-35172-43517-28321-39002-52243-13899'>detail</a>)</i></p></dd>
+
+<dt><b>R-57963-05936-27484-31794-06157-35153-01891-09927</b></dt>
+<dd><p>The SAVEPOINT command starts a new transaction with a name.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-57963-05936-27484-31794-06157-35153-01891-09927'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-57963-05936-27484-31794-06157-35153-01891-09927'>detail</a>)</i></p></dd>
+
+<dt><b>R-57967-31673-02324-15134-55427-47426-59271-07487</b></dt>
+<dd><p>The SQLITE_FCNTL_PERSIST_WAL opcode is used to set or query the persistent Write Ahead Log setting.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-57967-31673-02324-15134-55427-47426-59271-07487'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-57967-31673-02324-15134-55427-47426-59271-07487'>detail</a>)</i></p></dd>
+
+<dt><b>R-58015-48175-59968-51702-38590-12098-63778-58558</b></dt>
+<dd><p>The two-byte integer at offset 5 designates the start of the cell content area. A zero value for this integer is interpreted as 65536.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-58015-48175-59968-51702-38590-12098-63778-58558'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-58015-48175-59968-51702-38590-12098-63778-58558'>detail</a>)</i></p></dd>
+
+<dt><b>R-58033-17334-23176-58899-39205-34616-00819-09634</b></dt>
+<dd><p>An error is raised if a CREATE TABLE statement with the WITHOUT ROWID clause lacks a PRIMARY KEY.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-58033-17334-23176-58899-39205-34616-00819-09634'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-58033-17334-23176-58899-39205-34616-00819-09634'>detail</a>)</i></p></dd>
+
+<dt><b>R-58057-33391-03509-33043-33345-56148-13534-20501</b></dt>
+<dd><p>The fourth parameter may also optionally include the SQLITE_DIRECTONLY flag, which if present prevents the function from being invoked from within VIEWs, TRIGGERs, CHECK constraints, generated column expressions, index expressions, or the WHERE clause of partial indexes.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, matrix: <a href='matrix/c3ref/create_function.html#R-58057-33391-03509-33043-33345-56148-13534-20501'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-58057-33391-03509-33043-33345-56148-13534-20501'>detail</a>)</i></p></dd>
+
+<dt><b>R-58063-38258-54804-43004-10220-55460-06574-61060</b></dt>
+<dd><p>SQLITE_CONFIG_MMAP_SIZE takes two 64-bit integer (sqlite3_int64) values that are the default mmap size limit (the default setting for PRAGMA mmap_size) and the maximum allowed mmap size limit.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-58063-38258-54804-43004-10220-55460-06574-61060'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-58063-38258-54804-43004-10220-55460-06574-61060'>detail</a>)</i></p></dd>
+
+<dt><b>R-58080-31767-64590-28365-48177-49869-42154-18790</b></dt>
+<dd><p>Note that the sqlite3_changes() and sqlite3_total_changes() interfaces do not count INSTEAD OF trigger firings, but the count_changes pragma does count INSTEAD OF trigger firing.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-58080-31767-64590-28365-48177-49869-42154-18790'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-58080-31767-64590-28365-48177-49869-42154-18790'>detail</a>)</i></p></dd>
+
+<dt><b>R-58089-05908-32254-07731-27981-33321-41774-40378</b></dt>
+<dd><p>If the table has a column of type INTEGER PRIMARY KEY then that column is another alias for the rowid.
+<i>(source: <a href="c3ref/last_insert_rowid.html">c3ref/last_insert_rowid.html</a>, matrix: <a href='matrix/c3ref/last_insert_rowid.html#R-58089-05908-32254-07731-27981-33321-41774-40378'>context</a>, <a href='matrix/matrix_dlast_insert_rowid.html#R-58089-05908-32254-07731-27981-33321-41774-40378'>detail</a>)</i></p></dd>
+
+<dt><b>R-58095-46013-00121-55474-24418-20779-51878-39971</b></dt>
+<dd><p>Otherwise, the UPDATE affects only those rows for which the WHERE clause boolean expression is true.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-58095-46013-00121-55474-24418-20779-51878-39971'>context</a>, <a href='matrix/matrix_dlang_update.html#R-58095-46013-00121-55474-24418-20779-51878-39971'>detail</a>)</i></p></dd>
+
+<dt><b>R-58101-01610-39291-65519-22714-56029-10662-40806</b></dt>
+<dd><p>The "SQLITE_" prefix is omitted from the returned option names.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma13.test, matrix: <a href='matrix/pragma.html#R-58101-01610-39291-65519-22714-56029-10662-40806'>context</a>, <a href='matrix/matrix_dpragma.html#R-58101-01610-39291-65519-22714-56029-10662-40806'>detail</a>)</i></p></dd>
+
+<dt><b>R-58129-20729-43334-45037-61775-65105-23500-10551</b></dt>
+<dd><p>It is not an error if the WHERE clause does not evaluate to true for any row in the table - this just means that the UPDATE statement affects zero rows.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-58129-20729-43334-45037-61775-65105-23500-10551'>context</a>, <a href='matrix/matrix_dlang_update.html#R-58129-20729-43334-45037-61775-65105-23500-10551'>detail</a>)</i></p></dd>
+
+<dt><b>R-58133-32721-60366-63441-61614-07001-53385-02322</b></dt>
+<dd><p>A keyword in single quotes is a string literal.
+<i>(source: <a href="lang_keywords.html">lang_keywords.html</a>, checked-by: th3/req1/keyword01.test, matrix: <a href='matrix/lang_keywords.html#R-58133-32721-60366-63441-61614-07001-53385-02322'>context</a>, <a href='matrix/matrix_dlang_keywords.html#R-58133-32721-60366-63441-61614-07001-53385-02322'>detail</a>)</i></p></dd>
+
+<dt><b>R-58160-63457-25230-02228-13087-65392-10512-19880</b></dt>
+<dd><p>The nolock parameter is a boolean query parameter which if set disables file locking in rollback journal modes.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/nolock01.test, matrix: <a href='matrix/c3ref/open.html#R-58160-63457-25230-02228-13087-65392-10512-19880'>context</a>, <a href='matrix/matrix_dopen.html#R-58160-63457-25230-02228-13087-65392-10512-19880'>detail</a>)</i></p></dd>
+
+<dt><b>R-58208-19414-39381-39843-31272-22359-33296-08793</b></dt>
+<dd><p>The first 2 bytes of a freeblock are a big-endian integer which is the offset in the b-tree page of the next freeblock in the chain, or zero if the freeblock is the last on the chain.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-58208-19414-39381-39843-31272-22359-33296-08793'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-58208-19414-39381-39843-31272-22359-33296-08793'>detail</a>)</i></p></dd>
+
+<dt><b>R-58230-57098-08245-26579-57280-54560-29149-45335</b></dt>
+<dd><p>The "INDEXED BY index-name" phrase specifies that the named index must be used in order to look up values on the preceding table.
+<i>(source: <a href="lang_indexedby.html">lang_indexedby.html</a>, checked-by: tcl/indexedby.test, matrix: <a href='matrix/lang_indexedby.html#R-58230-57098-08245-26579-57280-54560-29149-45335'>context</a>, <a href='matrix/matrix_dlang_indexedby.html#R-58230-57098-08245-26579-57280-54560-29149-45335'>detail</a>)</i></p></dd>
+
+<dt><b>R-58293-02725-64867-56851-12538-45360-38316-49543</b></dt>
+<dd><p>Each time a transaction is committed or a WAL file resets, SQLite compares the size of the rollback journal file or WAL file left in the file-system to the size limit set by this pragma and if the journal or WAL file is larger it is truncated to the limit.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma26.test, matrix: <a href='matrix/pragma.html#R-58293-02725-64867-56851-12538-45360-38316-49543'>context</a>, <a href='matrix/matrix_dpragma.html#R-58293-02725-64867-56851-12538-45360-38316-49543'>detail</a>)</i></p></dd>
+
+<dt><b>R-58297-14483-40146-32998-13341-07144-06303-13895</b></dt>
+<dd><p>WAL databases can be created, read, and written even if shared memory is unavailable as long as the locking_mode is set to EXCLUSIVE before the first attempted access.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, th3/req1/pragma05.test, matrix: <a href='matrix/wal.html#R-58297-14483-40146-32998-13341-07144-06303-13895'>context</a>, <a href='matrix/matrix_dwal.html#R-58297-14483-40146-32998-13341-07144-06303-13895'>detail</a>)</i></p></dd>
+
+<dt><b>R-58299-29950-41859-14969-07677-61632-11301-17744</b></dt>
+<dd><p>The sqlite3_txn_state(D,S) interface returns the current transaction state of schema S in database connection D.
+<i>(source: <a href="c3ref/txn_state.html">c3ref/txn_state.html</a>, matrix: <a href='matrix/c3ref/txn_state.html#R-58299-29950-41859-14969-07677-61632-11301-17744'>context</a>, <a href='matrix/matrix_dtxn_state.html#R-58299-29950-41859-14969-07677-61632-11301-17744'>detail</a>)</i></p></dd>
+
+<dt><b>R-58312-28618-40592-62073-31662-38591-25433-11093</b></dt>
+<dd><p>If the Y argument is omitted, rtrim(X) removes spaces from the right side of X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-58312-28618-40592-62073-31662-38591-25433-11093'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-58312-28618-40592-62073-31662-38591-25433-11093'>detail</a>)</i></p></dd>
+
+<dt><b>R-58318-35349-04006-21440-04924-16231-32271-20333</b></dt>
+<dd><p>The DROP COLUMN syntax is used to remove an existing column from a table.
+<i>(source: <a href="lang_altertable.html">lang_altertable.html</a>, checked-by: tcl/alterdropcol2.test, th3/cov1/altertable25.test, matrix: <a href='matrix/lang_altertable.html#R-58318-35349-04006-21440-04924-16231-32271-20333'>context</a>, <a href='matrix/matrix_dlang_altertable.html#R-58318-35349-04006-21440-04924-16231-32271-20333'>detail</a>)</i></p></dd>
+
+<dt><b>R-58344-62489-38049-32085-64337-15515-50489-64181</b></dt>
+<dd><p>Thus, by default, the following expression is true: 'a' LIKE 'A'
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-58344-62489-38049-32085-64337-15515-50489-64181'>context</a>, <a href='matrix/matrix_doptoverview.html#R-58344-62489-38049-32085-64337-15515-50489-64181'>detail</a>)</i></p></dd>
+
+<dt><b>R-58361-29089-54084-23122-22641-61380-38258-02749</b></dt>
+<dd><p>The changes() function returns the number of database rows that were changed or inserted or deleted by the most recently completed INSERT, DELETE, or UPDATE statement, exclusive of statements in lower-level triggers.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/e_changes.test, th3/req1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-58361-29089-54084-23122-22641-61380-38258-02749'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-58361-29089-54084-23122-22641-61380-38258-02749'>detail</a>)</i></p></dd>
+
+<dt><b>R-58393-10545-21271-47622-25351-02846-49007-50648</b></dt>
+<dd><p>Specifying a new page size does not change the page size immediately. Instead, the new page size is remembered and is used to set the page size when the database is first created, if it does not already exist when the page_size pragma is issued, or at the next VACUUM command that is run on the same database connection while not in WAL mode.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-58393-10545-21271-47622-25351-02846-49007-50648'>context</a>, <a href='matrix/matrix_dpragma.html#R-58393-10545-21271-47622-25351-02846-49007-50648'>detail</a>)</i></p></dd>
+
+<dt><b>R-58421-05800-43557-56576-34931-38170-06768-38707</b></dt>
+<dd><p>If the Y argument is omitted, ltrim(X) removes spaces from the left side of X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-58421-05800-43557-56576-34931-38170-06768-38707'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-58421-05800-43557-56576-34931-38170-06768-38707'>detail</a>)</i></p></dd>
+
+<dt><b>R-58424-53543-49718-27899-29509-07852-05490-25692</b></dt>
+<dd><p>The page size must be a power of two between 512 and 65536 inclusive.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-58424-53543-49718-27899-29509-07852-05490-25692'>context</a>, <a href='matrix/matrix_dpragma.html#R-58424-53543-49718-27899-29509-07852-05490-25692'>detail</a>)</i></p></dd>
+
+<dt><b>R-58425-30487-64888-60990-28368-26086-41233-31997</b></dt>
+<dd><p>PRAGMA schema.table_info(table-name); This pragma returns one row for each normal column in the named table.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-58425-30487-64888-60990-28368-26086-41233-31997'>context</a>, <a href='matrix/matrix_dpragma.html#R-58425-30487-64888-60990-28368-26086-41233-31997'>detail</a>)</i></p></dd>
+
+<dt><b>R-58428-36660-63931-61833-12651-58158-26648-39835</b></dt>
+<dd><p>If OMIT_FOREIGN_KEY is defined, then foreign key definitions cannot even be parsed (attempting to specify a foreign key definition is a syntax error).
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys05.test, matrix: <a href='matrix/foreignkeys.html#R-58428-36660-63931-61833-12651-58158-26648-39835'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-58428-36660-63931-61833-12651-58158-26648-39835'>detail</a>)</i></p></dd>
+
+<dt><b>R-58433-37187-52219-35155-40508-43189-02693-26384</b></dt>
+<dd><p>The COMMIT command and the ROLLBACK command without the TO clause work the same on SAVEPOINT transactions as they do with transactions started by BEGIN.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-58433-37187-52219-35155-40508-43189-02693-26384'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-58433-37187-52219-35155-40508-43189-02693-26384'>detail</a>)</i></p></dd>
+
+<dt><b>R-58546-22075-08471-42930-58515-49649-00646-41652</b></dt>
+<dd><p>The random() function is obviously non-deterministic because it gives a different answer every time it is invoked.
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-58546-22075-08471-42930-58515-49649-00646-41652'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-58546-22075-08471-42930-58515-49649-00646-41652'>detail</a>)</i></p></dd>
+
+<dt><b>R-58553-63740-12454-47627-42438-52862-15434-40396</b></dt>
+<dd><p>If executing the SELECT statement specified as the right-hand operand of the EXISTS operator would return one or more rows, then the EXISTS operator evaluates to 1.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-58553-63740-12454-47627-42438-52862-15434-40396'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-58553-63740-12454-47627-42438-52862-15434-40396'>detail</a>)</i></p></dd>
+
+<dt><b>R-58560-23968-28537-53654-45621-13227-05416-28279</b></dt>
+<dd><p>The default value of the checkpoint_fullfsync flag is off.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma11.test, matrix: <a href='matrix/pragma.html#R-58560-23968-28537-53654-45621-13227-05416-28279'>context</a>, <a href='matrix/matrix_dpragma.html#R-58560-23968-28537-53654-45621-13227-05416-28279'>detail</a>)</i></p></dd>
+
+<dt><b>R-58570-38916-64955-51139-26033-08534-02981-10292</b></dt>
+<dd><p>If N or iOffset are less than zero SQLITE_ERROR is returned and no data is written.
+<i>(source: <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>, checked-by: tcl/e_blobwrite.test, matrix: <a href='matrix/c3ref/blob_write.html#R-58570-38916-64955-51139-26033-08534-02981-10292'>context</a>, <a href='matrix/matrix_dblob_write.html#R-58570-38916-64955-51139-26033-08534-02981-10292'>detail</a>)</i></p></dd>
+
+<dt><b>R-58640-02877-59661-28558-18785-36384-52815-36823</b></dt>
+<dd><p>RTRIM - The same as binary, except that trailing space characters are ignored.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-58640-02877-59661-28558-18785-36384-52815-36823'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-58640-02877-59661-28558-18785-36384-52815-36823'>detail</a>)</i></p></dd>
+
+<dt><b>R-58706-14229-29588-03178-14400-15818-06936-07358</b></dt>
+<dd><p>Similarly, an INSERT statement may provide a value to use as the rowid for each row inserted.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-58706-14229-29588-03178-14400-15818-06936-07358'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-58706-14229-29588-03178-14400-15818-06936-07358'>detail</a>)</i></p></dd>
+
+<dt><b>R-58714-09943-11922-47128-02386-08518-39517-24120</b></dt>
+<dd><p>SQLITE_DBSTATUS_CACHE_USED This parameter returns the approximate number of bytes of heap memory used by all pager caches associated with the database connection.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-58714-09943-11922-47128-02386-08518-39517-24120'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-58714-09943-11922-47128-02386-08518-39517-24120'>detail</a>)</i></p></dd>
+
+<dt><b>R-58729-25290-19710-37718-46636-04940-09423-21381</b></dt>
+<dd><p>The SQLITE_FCNTL_PRAGMA file control occurs at the beginning of pragma statement analysis and so it is able to override built-in PRAGMA statements.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, checked-by: th3/cov1/pragma24.test, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-58729-25290-19710-37718-46636-04940-09423-21381'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-58729-25290-19710-37718-46636-04940-09423-21381'>detail</a>)</i></p></dd>
+
+<dt><b>R-58731-25439-21347-45819-04127-12492-10479-51386</b></dt>
+<dd><p>The collating sequence set by the COLLATE operator overrides the collating sequence determined by the COLLATE clause in a table column definition.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-58731-25439-21347-45819-04127-12492-10479-51386'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-58731-25439-21347-45819-04127-12492-10479-51386'>detail</a>)</i></p></dd>
+
+<dt><b>R-58769-41706-35801-04154-17384-12039-24513-64456</b></dt>
+<dd><p>The in-header database size is always valid when the database is only modified using recent versions of SQLite, versions 3.7.0 (2010-07-21) and later.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-58769-41706-35801-04154-17384-12039-24513-64456'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-58769-41706-35801-04154-17384-12039-24513-64456'>detail</a>)</i></p></dd>
+
+<dt><b>R-58778-10776-22890-25642-31473-47803-35763-23177</b></dt>
+<dd><p>The xInit() method is called once for each effective call to sqlite3_initialize()
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, checked-by: th3/th3pcache.c, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-58778-10776-22890-25642-31473-47803-35763-23177'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-58778-10776-22890-25642-31473-47803-35763-23177'>detail</a>)</i></p></dd>
+
+<dt><b>R-58779-36112-07505-12911-48532-31696-16411-64279</b></dt>
+<dd><p>Once created, the sqlite_sequence table exists in the sqlite_schema table forever; it cannot be dropped.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-58779-36112-07505-12911-48532-31696-16411-64279'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-58779-36112-07505-12911-48532-31696-16411-64279'>detail</a>)</i></p></dd>
+
+<dt><b>R-58813-55036-01417-02412-42813-08467-49473-05345</b></dt>
+<dd><p>The sqlite3_bind_zeroblob() and sqlite3_result_zeroblob() interfaces and the built-in zeroblob SQL function may be used to create a zero-filled blob to read or write using the incremental-blob interface.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-58813-55036-01417-02412-42813-08467-49473-05345'>context</a>, <a href='matrix/matrix_dblob_open.html#R-58813-55036-01417-02412-42813-08467-49473-05345'>detail</a>)</i></p></dd>
+
+<dt><b>R-58814-63508-14637-55727-60663-34396-08543-07836</b></dt>
+<dd><p>The sqlite3_db_release_memory(D) interface attempts to free as much heap memory as possible from database connection D.
+<i>(source: <a href="c3ref/db_release_memory.html">c3ref/db_release_memory.html</a>, checked-by: tcl/shrink.test, matrix: <a href='matrix/c3ref/db_release_memory.html#R-58814-63508-14637-55727-60663-34396-08543-07836'>context</a>, <a href='matrix/matrix_ddb_release_memory.html#R-58814-63508-14637-55727-60663-34396-08543-07836'>detail</a>)</i></p></dd>
+
+<dt><b>R-58823-28748-40734-32181-06103-05121-55072-03563</b></dt>
+<dd><p>If it identifies a specific database index, then just that index is recreated.
+<i>(source: <a href="lang_reindex.html">lang_reindex.html</a>, checked-by: tcl/e_reindex.test, matrix: <a href='matrix/lang_reindex.html#R-58823-28748-40734-32181-06103-05121-55072-03563'>context</a>, <a href='matrix/matrix_dlang_reindex.html#R-58823-28748-40734-32181-06103-05121-55072-03563'>detail</a>)</i></p></dd>
+
+<dt><b>R-58827-57434-27367-43621-07290-05598-35918-65407</b></dt>
+<dd><p>SQLite invokes D with P as its only argument when SQLite is finished with P.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, matrix: <a href='matrix/c3ref/result_blob.html#R-58827-57434-27367-43621-07290-05598-35918-65407'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-58827-57434-27367-43621-07290-05598-35918-65407'>detail</a>)</i></p></dd>
+
+<dt><b>R-58828-53895-13815-04017-42542-10483-39276-05822</b></dt>
+<dd><p>So with writable_schema=ON, when the schema parser reaches the STRICT keyword, it says to itself "I don't know what to do with this, but everything up to this point seems like a valid table definition so I'll just use what I have."
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq02.test, matrix: <a href='matrix/stricttables.html#R-58828-53895-13815-04017-42542-10483-39276-05822'>context</a>, <a href='matrix/matrix_dstricttables.html#R-58828-53895-13815-04017-42542-10483-39276-05822'>detail</a>)</i></p></dd>
+
+<dt><b>R-58835-30946-01453-54095-45782-49033-61690-21172</b></dt>
+<dd><p>The SQLITE_FCNTL_POWERSAFE_OVERWRITE opcode is used to set or query the persistent "powersafe-overwrite" or "PSOW" setting.
+<i>(source: <a href="c3ref/c_fcntl_begin_atomic_write.html">c3ref/c_fcntl_begin_atomic_write.html</a>, matrix: <a href='matrix/c3ref/c_fcntl_begin_atomic_write.html#R-58835-30946-01453-54095-45782-49033-61690-21172'>context</a>, <a href='matrix/matrix_dc_fcntl_begin_atomic_write.html#R-58835-30946-01453-54095-45782-49033-61690-21172'>detail</a>)</i></p></dd>
+
+<dt><b>R-58838-55911-33120-57542-55492-25177-48727-11020</b></dt>
+<dd><p>If the nByte argument is negative, then zSql is read up to the first zero terminator.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare01.test, matrix: <a href='matrix/c3ref/prepare.html#R-58838-55911-33120-57542-55492-25177-48727-11020'>context</a>, <a href='matrix/matrix_dprepare.html#R-58838-55911-33120-57542-55492-25177-48727-11020'>detail</a>)</i></p></dd>
+
+<dt><b>R-58848-61508-37429-19657-25178-16423-23766-44063</b></dt>
+<dd><p>Furthermore, only a single row for each particular combination of values in the columns identified by the "aOrderBy" field needs to be returned.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-58848-61508-37429-19657-25178-16423-23766-44063'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-58848-61508-37429-19657-25178-16423-23766-44063'>detail</a>)</i></p></dd>
+
+<dt><b>R-58862-44169-03141-46737-61496-44954-25565-37290</b></dt>
+<dd><p>If an UPDATE statement has a LIMIT clause, the maximum number of rows that will be updated is found by evaluating the accompanying expression and casting it to an integer value.
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-58862-44169-03141-46737-61496-44954-25565-37290'>context</a>, <a href='matrix/matrix_dlang_update.html#R-58862-44169-03141-46737-61496-44954-25565-37290'>detail</a>)</i></p></dd>
+
+<dt><b>R-58951-07798-10781-33185-41283-52563-14350-38026</b></dt>
+<dd><p>Otherwise, if no column-list is specified, the number of columns in the result of the SELECT must be the same as the number of columns in the table.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-58951-07798-10781-33185-41283-52563-14350-38026'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-58951-07798-10781-33185-41283-52563-14350-38026'>detail</a>)</i></p></dd>
+
+<dt><b>R-59001-45278-16450-29510-31593-00362-58308-30623</b></dt>
+<dd><p>SQLITE_LIMIT_FUNCTION_ARG The maximum number of arguments on a function.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: tcl/sqllimits1.test, th3/req1/limit02.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-59001-45278-16450-29510-31593-00362-58308-30623'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-59001-45278-16450-29510-31593-00362-58308-30623'>detail</a>)</i></p></dd>
+
+<dt><b>R-59007-20454-04815-57542-48714-11187-47465-31544</b></dt>
+<dd><p>Any other character matches itself or its lower/upper case equivalent (i.e. case-insensitive matching).
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-59007-20454-04815-57542-48714-11187-47465-31544'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-59007-20454-04815-57542-48714-11187-47465-31544'>detail</a>)</i></p></dd>
+
+<dt><b>R-59034-53199-42361-61766-63157-50392-49995-33404</b></dt>
+<dd><p>sqlite> EXPLAIN QUERY PLAN SELECT a FROM t1 EXCEPT SELECT d FROM t2 ORDER BY 1; QUERY PLAN `--MERGE (EXCEPT) |--LEFT | `--SCAN t1 USING COVERING INDEX i1 `--RIGHT |--SCAN t2 `--USE TEMP B-TREE FOR ORDER BY
+<i>(source: <a href="eqp.html">eqp.html</a>, matrix: <a href='matrix/eqp.html#R-59034-53199-42361-61766-63157-50392-49995-33404'>context</a>, <a href='matrix/matrix_deqp.html#R-59034-53199-42361-61766-63157-50392-49995-33404'>detail</a>)</i></p></dd>
+
+<dt><b>R-59051-35706-17689-00291-19799-28494-42695-25135</b></dt>
+<dd><p>The PRIMARY KEY clause must contain only column names &mdash; the use of expressions in an indexed-column of a PRIMARY KEY is not supported.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, matrix: <a href='matrix/lang_createtable.html#R-59051-35706-17689-00291-19799-28494-42695-25135'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-59051-35706-17689-00291-19799-28494-42695-25135'>detail</a>)</i></p></dd>
+
+<dt><b>R-59089-25828-47807-24089-43105-44116-25711-61833</b></dt>
+<dd><p>The columns of the cartesian product dataset are, in order, all the columns of the left-hand dataset followed by all the columns of the right-hand dataset.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-59089-25828-47807-24089-43105-44116-25711-61833'>context</a>, <a href='matrix/matrix_dlang_select.html#R-59089-25828-47807-24089-43105-44116-25711-61833'>detail</a>)</i></p></dd>
+
+<dt><b>R-59103-42685-29407-49454-53607-22042-22472-58911</b></dt>
+<dd><p>When pMem is not NULL, SQLite will strive to use the memory provided to satisfy page cache needs, falling back to sqlite3_malloc() if a page cache line is larger than sz bytes or if all of the pMem buffer is exhausted.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-59103-42685-29407-49454-53607-22042-22472-58911'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-59103-42685-29407-49454-53607-22042-22472-58911'>detail</a>)</i></p></dd>
+
+<dt><b>R-59114-58431-38576-59945-01836-64391-41431-21894</b></dt>
+<dd><p>The sqlite3_log() interface writes a message into the error log established by the SQLITE_CONFIG_LOG option to sqlite3_config().
+<i>(source: <a href="c3ref/log.html">c3ref/log.html</a>, checked-by: th3/cov1/log01.test, matrix: <a href='matrix/c3ref/log.html#R-59114-58431-38576-59945-01836-64391-41431-21894'>context</a>, <a href='matrix/matrix_dlog.html#R-59114-58431-38576-59945-01836-64391-41431-21894'>detail</a>)</i></p></dd>
+
+<dt><b>R-59124-61339-46915-41859-25282-43163-13207-41482</b></dt>
+<dd><p>Each row in a table with a primary key must have a unique combination of values in its primary key columns.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-59124-61339-46915-41859-25282-43163-13207-41482'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-59124-61339-46915-41859-25282-43163-13207-41482'>detail</a>)</i></p></dd>
+
+<dt><b>R-59153-45869-47799-39794-18343-43894-28184-56568</b></dt>
+<dd><p>If the declared type for a column contains any of the strings "REAL", "FLOA", or "DOUB" then the column has REAL affinity.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-59153-45869-47799-39794-18343-43894-28184-56568'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-59153-45869-47799-39794-18343-43894-28184-56568'>detail</a>)</i></p></dd>
+
+<dt><b>R-59171-47567-19370-12985-34134-25393-49439-38591</b></dt>
+<dd><p>This mode blocks (it invokes the busy-handler callback) until there is no database writer and all readers are reading from the most recent database snapshot.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-59171-47567-19370-12985-34134-25393-49439-38591'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-59171-47567-19370-12985-34134-25393-49439-38591'>detail</a>)</i></p></dd>
+
+<dt><b>R-59172-51198-22956-23364-43321-06820-15140-44023</b></dt>
+<dd><p>If the transaction stack is not empty when the BEGIN command is invoked, then the command fails with an error.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-59172-51198-22956-23364-43321-06820-15140-44023'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-59172-51198-22956-23364-43321-06820-15140-44023'>detail</a>)</i></p></dd>
+
+<dt><b>R-59177-30964-27370-56053-61429-49243-22831-00049</b></dt>
+<dd><p>If the date is already on the desired weekday, the "weekday" modifier leaves the date unchanged.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-59177-30964-27370-56053-61429-49243-22831-00049'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-59177-30964-27370-56053-61429-49243-22831-00049'>detail</a>)</i></p></dd>
+
+<dt><b>R-59182-40522-06703-03529-14405-50301-30896-08116</b></dt>
+<dd><p>The SQLITE_VERSION C preprocessor macro in the sqlite3.h header evaluates to a string literal that is the SQLite version in the format "X.Y.Z" where X is the major version number (always 3 for SQLite3) and Y is the minor version number and Z is the release number.
+<i>(source: <a href="c3ref/c_source_id.html">c3ref/c_source_id.html</a>, checked-by: th3/req1/version01.test, matrix: <a href='matrix/c3ref/c_source_id.html#R-59182-40522-06703-03529-14405-50301-30896-08116'>context</a>, <a href='matrix/matrix_dc_source_id.html#R-59182-40522-06703-03529-14405-50301-30896-08116'>detail</a>)</i></p></dd>
+
+<dt><b>R-59216-33891-20715-29523-18605-08261-10809-30843</b></dt>
+<dd><p>For example: STRICTordinary non-strict CREATE TABLE t1(a ANY) STRICT; INSERT INTO t1 VALUES('000123'); SELECT typeof(a), quote(a) FROM t1; -- result: text '000123' CREATE TABLE t1(a ANY); INSERT INTO t1 VALUES('000123'); SELECT typeof(a), quote(a) FROM t1; -- result: integer 123
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-59216-33891-20715-29523-18605-08261-10809-30843'>context</a>, <a href='matrix/matrix_dstricttables.html#R-59216-33891-20715-29523-18605-08261-10809-30843'>detail</a>)</i></p></dd>
+
+<dt><b>R-59218-44473-40361-49593-50972-37596-39041-04578</b></dt>
+<dd><p>The sqlite_sequence table is created automatically whenever any ordinary table with an AUTOINCREMENT integer primary key is created.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-59218-44473-40361-49593-50972-37596-39041-04578'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-59218-44473-40361-49593-50972-37596-39041-04578'>detail</a>)</i></p></dd>
+
+<dt><b>R-59232-02458-58153-59038-51694-12074-46147-53254</b></dt>
+<dd><p>The sqlite3_vtab_distinct() interface returns an integer between 0 and 3.
+<i>(source: <a href="c3ref/vtab_distinct.html">c3ref/vtab_distinct.html</a>, matrix: <a href='matrix/c3ref/vtab_distinct.html#R-59232-02458-58153-59038-51694-12074-46147-53254'>context</a>, <a href='matrix/matrix_dvtab_distinct.html#R-59232-02458-58153-59038-51694-12074-46147-53254'>detail</a>)</i></p></dd>
+
+<dt><b>R-59237-46742-53933-54312-09951-05866-00248-19595</b></dt>
+<dd><p>A subquery specified in the table-or-subquery following the FROM clause in a simple SELECT statement is handled as if it was a table containing the data returned by executing the subquery statement.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select2.test, matrix: <a href='matrix/lang_select.html#R-59237-46742-53933-54312-09951-05866-00248-19595'>context</a>, <a href='matrix/matrix_dlang_select.html#R-59237-46742-53933-54312-09951-05866-00248-19595'>detail</a>)</i></p></dd>
+
+<dt><b>R-59246-48037-03158-25675-60102-33879-46651-46804</b></dt>
+<dd><p>Any callback set by a previous call to this function for the same database connection is overridden.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-59246-48037-03158-25675-60102-33879-46651-46804'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-59246-48037-03158-25675-60102-33879-46651-46804'>detail</a>)</i></p></dd>
+
+<dt><b>R-59271-29405-40736-18253-27684-60508-27772-33156</b></dt>
+<dd><p>If the L parameter is NULL, then all virtual table modules are removed.
+<i>(source: <a href="c3ref/drop_modules.html">c3ref/drop_modules.html</a>, matrix: <a href='matrix/c3ref/drop_modules.html#R-59271-29405-40736-18253-27684-60508-27772-33156'>context</a>, <a href='matrix/matrix_ddrop_modules.html#R-59271-29405-40736-18253-27684-60508-27772-33156'>detail</a>)</i></p></dd>
+
+<dt><b>R-59275-48655-09864-05329-36519-41537-00645-39530</b></dt>
+<dd><p>The new row is identified by the rowid value passed as the second argument.
+<i>(source: <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>, checked-by: th3/req1/blob01.test, matrix: <a href='matrix/c3ref/blob_reopen.html#R-59275-48655-09864-05329-36519-41537-00645-39530'>context</a>, <a href='matrix/matrix_dblob_reopen.html#R-59275-48655-09864-05329-36519-41537-00645-39530'>detail</a>)</i></p></dd>
+
+<dt><b>R-59294-22119-53141-34603-32613-50931-06947-25796</b></dt>
+<dd><p>If additional page cache memory is needed beyond what is provided by the initial allocation, then SQLite goes to sqlite3_malloc() separately for each additional cache line.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/cov1/main42.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-59294-22119-53141-34603-32613-50931-06947-25796'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-59294-22119-53141-34603-32613-50931-06947-25796'>detail</a>)</i></p></dd>
+
+<dt><b>R-59310-51205-15407-41555-00888-38389-12336-63259</b></dt>
+<dd><p>The "reserved space" size in the 1-byte integer at offset 20 is the number of bytes of space at the end of each page to reserve for extensions.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-59310-51205-15407-41555-00888-38389-12336-63259'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-59310-51205-15407-41555-00888-38389-12336-63259'>detail</a>)</i></p></dd>
+
+<dt><b>R-59344-06440-62952-57613-16293-38554-64918-31058</b></dt>
+<dd><p>It is possible to have an aggregate function with the same name as a simple function, as long as the number of arguments for the two forms of the function are different.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: th3/req1/func05.test, matrix: <a href='matrix/lang_expr.html#R-59344-06440-62952-57613-16293-38554-64918-31058'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-59344-06440-62952-57613-16293-38554-64918-31058'>detail</a>)</i></p></dd>
+
+<dt><b>R-59391-62387-22553-12077-41502-35655-02982-42889</b></dt>
+<dd><p>Conversions between UTF-16be and UTF-16le are always done in place and do not invalidate a prior pointer, though of course the content of the buffer that the prior pointer references will have been modified.
+<i>(source: <a href="c3ref/column_blob.html">c3ref/column_blob.html</a>, checked-by: th3/req1/column03.test, matrix: <a href='matrix/c3ref/column_blob.html#R-59391-62387-22553-12077-41502-35655-02982-42889'>context</a>, <a href='matrix/matrix_dcolumn_blob.html#R-59391-62387-22553-12077-41502-35655-02982-42889'>detail</a>)</i></p></dd>
+
+<dt><b>R-59397-60114-59301-44215-47369-22942-27606-21904</b></dt>
+<dd><p>It is not necessary to put generated columns at the end of the list of columns in the table definition, as is shown in the examples above.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-59397-60114-59301-44215-47369-22942-27606-21904'>context</a>, <a href='matrix/matrix_dgencol.html#R-59397-60114-59301-44215-47369-22942-27606-21904'>detail</a>)</i></p></dd>
+
+<dt><b>R-59400-47238-48120-20066-59137-27524-23883-51047</b></dt>
+<dd><p>The "weekday" modifier advances the date forward, if necessary, to the next date where the weekday number is N. Sunday is 0, Monday is 1, and so forth.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-59400-47238-48120-20066-59137-27524-23883-51047'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-59400-47238-48120-20066-59137-27524-23883-51047'>detail</a>)</i></p></dd>
+
+<dt><b>R-59451-39147-41115-01514-52343-04781-09357-36534</b></dt>
+<dd><p>A ROLLBACK will cause a pending read operation to fail only if the schema was changed within the transaction being rolled back.
+<i>(source: <a href="rescode.html">rescode.html</a>, matrix: <a href='matrix/rescode.html#R-59451-39147-41115-01514-52343-04781-09357-36534'>context</a>, <a href='matrix/matrix_drescode.html#R-59451-39147-41115-01514-52343-04781-09357-36534'>detail</a>)</i></p></dd>
+
+<dt><b>R-59498-62062-55834-19518-04943-47390-59895-15219</b></dt>
+<dd><p>If prepared statement P does not have results ready to return (via calls to the sqlite3_column() family of interfaces) then sqlite3_data_count(P) returns 0.
+<i>(source: <a href="c3ref/data_count.html">c3ref/data_count.html</a>, checked-by: th3/req1/datacnt01.test, matrix: <a href='matrix/c3ref/data_count.html#R-59498-62062-55834-19518-04943-47390-59895-15219'>context</a>, <a href='matrix/matrix_ddata_count.html#R-59498-62062-55834-19518-04943-47390-59895-15219'>detail</a>)</i></p></dd>
+
+<dt><b>R-59503-11389-21746-10507-19087-49322-11326-26994</b></dt>
+<dd><p>The byte offset returned by sqlite3_error_offset() assumes that the input SQL is UTF8.
+<i>(source: <a href="c3ref/errcode.html">c3ref/errcode.html</a>, matrix: <a href='matrix/c3ref/errcode.html#R-59503-11389-21746-10507-19087-49322-11326-26994'>context</a>, <a href='matrix/matrix_derrcode.html#R-59503-11389-21746-10507-19087-49322-11326-26994'>detail</a>)</i></p></dd>
+
+<dt><b>R-59544-00330-10007-23710-00944-16891-38828-33861</b></dt>
+<dd><p>If the affinity of a column is REAL and that column contains a value that can be converted to an integer without loss of information (if the value contains no fractional part and is not too large to be represented as an integer) then the column may be stored in the record as an integer.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-59544-00330-10007-23710-00944-16891-38828-33861'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-59544-00330-10007-23710-00944-16891-38828-33861'>detail</a>)</i></p></dd>
+
+<dt><b>R-59553-21705-43899-06784-22214-40480-29104-54159</b></dt>
+<dd><p>Collating functions are deleted when they are overridden by later calls to the collation creation functions or when the database connection is closed using sqlite3_close().
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-59553-21705-43899-06784-22214-40480-29104-54159'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-59553-21705-43899-06784-22214-40480-29104-54159'>detail</a>)</i></p></dd>
+
+<dt><b>R-59577-33471-39346-45414-34609-60012-12077-11853</b></dt>
+<dd><p>The COLLATE operator is a unary postfix operator that assigns a collating sequence to an expression.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-59577-33471-39346-45414-34609-60012-12077-11853'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-59577-33471-39346-45414-34609-60012-12077-11853'>detail</a>)</i></p></dd>
+
+<dt><b>R-59581-44104-07622-44169-35142-09947-54214-52613</b></dt>
+<dd><p>If SQLite is built with the SQLITE_ENABLE_UPDATE_DELETE_LIMIT compile-time option then the syntax of the UPDATE statement is extended with optional ORDER BY and LIMIT clauses
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-59581-44104-07622-44169-35142-09947-54214-52613'>context</a>, <a href='matrix/matrix_dlang_update.html#R-59581-44104-07622-44169-35142-09947-54214-52613'>detail</a>)</i></p></dd>
+
+<dt><b>R-59593-21810-38757-57312-51798-28270-65217-02509</b></dt>
+<dd><p>If SQLite is compiled with the SQLITE_THREADSAFE=0 compile-time option then it is not possible to set the Serialized threading mode and sqlite3_config() will return SQLITE_ERROR if called with the SQLITE_CONFIG_SERIALIZED configuration option.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-59593-21810-38757-57312-51798-28270-65217-02509'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-59593-21810-38757-57312-51798-28270-65217-02509'>detail</a>)</i></p></dd>
+
+<dt><b>R-59615-42828-32025-62941-63094-03389-26549-04394</b></dt>
+<dd><p>A value of 10 (0x0a) means the page is a leaf index b-tree page.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-59615-42828-32025-62941-63094-03389-26549-04394'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-59615-42828-32025-62941-63094-03389-26549-04394'>detail</a>)</i></p></dd>
+
+<dt><b>R-59626-52827-57662-05724-48441-25095-54534-18435</b></dt>
+<dd><p>The name of the collation is a UTF-8 string for sqlite3_create_collation() and sqlite3_create_collation_v2() and a UTF-16 string in native byte order for sqlite3_create_collation16().
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-59626-52827-57662-05724-48441-25095-54534-18435'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-59626-52827-57662-05724-48441-25095-54534-18435'>detail</a>)</i></p></dd>
+
+<dt><b>R-59634-51678-29795-22623-60513-10487-06107-08719</b></dt>
+<dd><p>When that SQL function appears on the right-hand side of the MATCH operator and the left-hand side of the MATCH operator is any column in the R*Tree virtual table, then the callback defined by the third argument (xQueryFunc or xGeom) is invoked to determine if a particular object or subtree overlaps the desired region.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, th3/cov1/rtree03.test, th3/cov1/rtree04.test, matrix: <a href='matrix/rtree.html#R-59634-51678-29795-22623-60513-10487-06107-08719'>context</a>, <a href='matrix/matrix_drtree.html#R-59634-51678-29795-22623-60513-10487-06107-08719'>detail</a>)</i></p></dd>
+
+<dt><b>R-59665-46340-25157-22824-10328-32934-42335-25570</b></dt>
+<dd><p>This routine actually returns the index of the largest (rightmost) parameter. For all forms except ?NNN, this will correspond to the number of unique parameters. If parameters of the ?NNN form are used, there may be gaps in the list.
+<i>(source: <a href="c3ref/bind_parameter_count.html">c3ref/bind_parameter_count.html</a>, checked-by: th3/req1/bindparamcnt01.test, matrix: <a href='matrix/c3ref/bind_parameter_count.html#R-59665-46340-25157-22824-10328-32934-42335-25570'>context</a>, <a href='matrix/matrix_dbind_parameter_count.html#R-59665-46340-25157-22824-10328-32934-42335-25570'>detail</a>)</i></p></dd>
+
+<dt><b>R-59712-18547-02212-00843-63183-21822-46730-58410</b></dt>
+<dd><p>The source database is read-locked only while it is being read; it is not locked continuously for the entire backup operation.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/req1/backup01.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-59712-18547-02212-00843-63183-21822-46730-58410'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-59712-18547-02212-00843-63183-21822-46730-58410'>detail</a>)</i></p></dd>
+
+<dt><b>R-59738-58751-51247-06625-33593-39630-09372-24907</b></dt>
+<dd><p>The routines sqlite3_prepare_v2(), sqlite3_prepare(), sqlite3_prepare16(), sqlite3_prepare16_v2(), sqlite3_exec(), and sqlite3_get_table() accept an SQL statement list (sql-stmt-list) which is a semicolon-separated list of statements.
+<i>(source: <a href="lang.html">lang.html</a>, checked-by: th3/req1/lang01.test, matrix: <a href='matrix/lang.html#R-59738-58751-51247-06625-33593-39630-09372-24907'>context</a>, <a href='matrix/matrix_dlang.html#R-59738-58751-51247-06625-33593-39630-09372-24907'>detail</a>)</i></p></dd>
+
+<dt><b>R-59741-51383-54306-63308-23594-36785-40026-55929</b></dt>
+<dd><p>However, application code cannot create the sqlite_sequence table if it does not already exist.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-59741-51383-54306-63308-23594-36785-40026-55929'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-59741-51383-54306-63308-23594-36785-40026-55929'>detail</a>)</i></p></dd>
+
+<dt><b>R-59782-00072-08374-56821-09554-43453-45852-13316</b></dt>
+<dd><p>The soundex(X) function returns a string that is the soundex encoding of the string X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/cov1/func07.test, matrix: <a href='matrix/lang_corefunc.html#R-59782-00072-08374-56821-09554-43453-45852-13316'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-59782-00072-08374-56821-09554-43453-45852-13316'>detail</a>)</i></p></dd>
+
+<dt><b>R-59782-36818-22157-37925-40398-63566-64063-39784</b></dt>
+<dd><p>The SQLITE_CHECKPOINT_FULL, RESTART and TRUNCATE modes also obtain the exclusive "writer" lock on the database file.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: src/wal.c, tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-59782-36818-22157-37925-40398-63566-64063-39784'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-59782-36818-22157-37925-40398-63566-64063-39784'>detail</a>)</i></p></dd>
+
+<dt><b>R-59829-49719-48760-25089-64787-41616-07778-57513</b></dt>
+<dd><p>The optional "schema-name." prefix on the table-name is supported for top-level INSERT statements only.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-59829-49719-48760-25089-64787-41616-07778-57513'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-59829-49719-48760-25089-64787-41616-07778-57513'>detail</a>)</i></p></dd>
+
+<dt><b>R-59841-13798-58267-43160-49390-53360-57337-63082</b></dt>
+<dd><p>The 4-byte big-endian integer at offset 32 stores the page number of the first page of the freelist, or zero if the freelist is empty.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/btree.c, matrix: <a href='matrix/fileformat2.html#R-59841-13798-58267-43160-49390-53360-57337-63082'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-59841-13798-58267-43160-49390-53360-57337-63082'>detail</a>)</i></p></dd>
+
+<dt><b>R-59843-56897-36550-00278-28044-49330-04836-60246</b></dt>
+<dd><p>The name of the module is given by the second parameter.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-59843-56897-36550-00278-28044-49330-04836-60246'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-59843-56897-36550-00278-28044-49330-04836-60246'>detail</a>)</i></p></dd>
+
+<dt><b>R-59847-53574-49799-21344-47903-30927-18789-48641</b></dt>
+<dd><p>If sqlite3_unlock_notify() is called in a multi-threaded application, there is a chance that the blocking connection will have already concluded its transaction by the time sqlite3_unlock_notify() is invoked. If this happens, then the specified callback is invoked immediately, from within the call to sqlite3_unlock_notify().
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-59847-53574-49799-21344-47903-30927-18789-48641'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-59847-53574-49799-21344-47903-30927-18789-48641'>detail</a>)</i></p></dd>
+
+<dt><b>R-59858-46238-55910-38218-36749-39219-09135-02336</b></dt>
+<dd><p>If the argument N is negative, then the number of cache pages is adjusted to be a number of pages that would use approximately abs(N*1024) bytes of memory based on the current page size.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-59858-46238-55910-38218-36749-39219-09135-02336'>context</a>, <a href='matrix/matrix_dpragma.html#R-59858-46238-55910-38218-36749-39219-09135-02336'>detail</a>)</i></p></dd>
+
+<dt><b>R-59866-40673-09200-10625-43441-33703-34788-06531</b></dt>
+<dd><p>The first call to sqlite3_backup_step() obtains an exclusive lock on the destination file.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-59866-40673-09200-10625-43441-33703-34788-06531'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-59866-40673-09200-10625-43441-33703-34788-06531'>detail</a>)</i></p></dd>
+
+<dt><b>R-59880-60857-20339-39242-03952-30243-41004-50875</b></dt>
+<dd><p>If no prepared statement satisfies the conditions of this routine, it returns NULL.
+<i>(source: <a href="c3ref/next_stmt.html">c3ref/next_stmt.html</a>, checked-by: th3/cov1/vdbeapi04.test, matrix: <a href='matrix/c3ref/next_stmt.html#R-59880-60857-20339-39242-03952-30243-41004-50875'>context</a>, <a href='matrix/matrix_dnext_stmt.html#R-59880-60857-20339-39242-03952-30243-41004-50875'>detail</a>)</i></p></dd>
+
+<dt><b>R-59903-02736-29653-35997-33194-50062-38797-30798</b></dt>
+<dd><p>If M is the size of the prior allocation, then min(N,M) bytes of the prior allocation are copied into the beginning of buffer returned by sqlite3_realloc(X,N) and the prior allocation is freed.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-59903-02736-29653-35997-33194-50062-38797-30798'>context</a>, <a href='matrix/matrix_dfree.html#R-59903-02736-29653-35997-33194-50062-38797-30798'>detail</a>)</i></p></dd>
+
+<dt><b>R-59941-62933-38106-18791-02770-37169-39632-35636</b></dt>
+<dd><p>PRAGMA checkpoint_fullfsync PRAGMA checkpoint_fullfsync = boolean; Query or change the fullfsync flag for checkpoint operations.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma11.test, matrix: <a href='matrix/pragma.html#R-59941-62933-38106-18791-02770-37169-39632-35636'>context</a>, <a href='matrix/matrix_dpragma.html#R-59941-62933-38106-18791-02770-37169-39632-35636'>detail</a>)</i></p></dd>
+
+<dt><b>R-59958-37183-05497-01446-42261-31297-62677-47395</b></dt>
+<dd><p>Only rows of the table for which the WHERE clause evaluates to true are included in the index.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-59958-37183-05497-01446-42261-31297-62677-47395'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-59958-37183-05497-01446-42261-31297-62677-47395'>detail</a>)</i></p></dd>
+
+<dt><b>R-59963-05629-44099-52431-63560-45782-35835-08059</b></dt>
+<dd><p>Even though the function prototype shows that xEntryPoint() takes no arguments and returns void, SQLite invokes xEntryPoint() with three arguments and expects an integer result as if the signature of the entry point where as follows: &nbsp; int xEntryPoint( &nbsp; sqlite3 *db, &nbsp; const char **pzErrMsg, &nbsp; const struct sqlite3_api_routines *pThunk &nbsp; );
+<i>(source: <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>, checked-by: th3/req1/autoext01.test, matrix: <a href='matrix/c3ref/auto_extension.html#R-59963-05629-44099-52431-63560-45782-35835-08059'>context</a>, <a href='matrix/matrix_dauto_extension.html#R-59963-05629-44099-52431-63560-45782-35835-08059'>detail</a>)</i></p></dd>
+
+<dt><b>R-59964-54038-02693-18271-12639-43179-21789-28572</b></dt>
+<dd><p>SQLITE_OPEN_FULLMUTEX The new database connection will use the "serialized" threading mode.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/main12.test, matrix: <a href='matrix/c3ref/open.html#R-59964-54038-02693-18271-12639-43179-21789-28572'>context</a>, <a href='matrix/matrix_dopen.html#R-59964-54038-02693-18271-12639-43179-21789-28572'>detail</a>)</i></p></dd>
+
+<dt><b>R-59967-13104-62273-50017-33648-63119-25172-21301</b></dt>
+<dd><p>Hence, the histogram data which is collected no left-most column of indexes is useless in helping to choose between the range constraints on columns x and y.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-59967-13104-62273-50017-33648-63119-25172-21301'>context</a>, <a href='matrix/matrix_doptoverview.html#R-59967-13104-62273-50017-33648-63119-25172-21301'>detail</a>)</i></p></dd>
+
+<dt><b>R-59999-34429-08748-48712-52487-44530-24268-48005</b></dt>
+<dd><p>Generated columns can be interspersed among ordinary columns.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-59999-34429-08748-48712-52487-44530-24268-48005'>context</a>, <a href='matrix/matrix_dgencol.html#R-59999-34429-08748-48712-52487-44530-24268-48005'>detail</a>)</i></p></dd>
+
+<dt><b>R-60001-20170-36140-08740-00799-64790-64751-11735</b></dt>
+<dd><p>The rollback callback is not invoked if a transaction is automatically rolled back because the database connection is closed.
+<i>(source: <a href="c3ref/commit_hook.html">c3ref/commit_hook.html</a>, matrix: <a href='matrix/c3ref/commit_hook.html#R-60001-20170-36140-08740-00799-64790-64751-11735'>context</a>, <a href='matrix/matrix_dcommit_hook.html#R-60001-20170-36140-08740-00799-64790-64751-11735'>detail</a>)</i></p></dd>
+
+<dt><b>R-60002-49798-32276-44958-26437-44603-53115-17285</b></dt>
+<dd><p>The query proceeds by extracting the entry from the priority queue that has the lowest score.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc3.test, matrix: <a href='matrix/rtree.html#R-60002-49798-32276-44958-26437-44603-53115-17285'>context</a>, <a href='matrix/matrix_drtree.html#R-60002-49798-32276-44958-26437-44603-53115-17285'>detail</a>)</i></p></dd>
+
+<dt><b>R-60007-46407-64450-37762-55294-24345-19762-56932</b></dt>
+<dd><p>For serial types 0, 8, 9, 12, and 13, the value is zero bytes in length. If all columns are of these types then the body section of the record is empty.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat02.test, matrix: <a href='matrix/fileformat2.html#R-60007-46407-64450-37762-55294-24345-19762-56932'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-60007-46407-64450-37762-55294-24345-19762-56932'>detail</a>)</i></p></dd>
+
+<dt><b>R-60014-23402-36895-53889-00518-21066-14301-55859</b></dt>
+<dd><p>When no indexes are available to aid the evaluation of a query, SQLite might create an automatic index that lasts only for the duration of a single SQL statement.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-60014-23402-36895-53889-00518-21066-14301-55859'>context</a>, <a href='matrix/matrix_doptoverview.html#R-60014-23402-36895-53889-00518-21066-14301-55859'>detail</a>)</i></p></dd>
+
+<dt><b>R-60090-27861-59192-20728-19782-37127-56669-48134</b></dt>
+<dd><p>This interface loads an SQLite extension library from the named file.
+<i>(source: <a href="c3ref/load_extension.html">c3ref/load_extension.html</a>, matrix: <a href='matrix/c3ref/load_extension.html#R-60090-27861-59192-20728-19782-37127-56669-48134'>context</a>, <a href='matrix/matrix_dload_extension.html#R-60090-27861-59192-20728-19782-37127-56669-48134'>detail</a>)</i></p></dd>
+
+<dt><b>R-60099-10331-60202-18303-15072-02692-09131-64001</b></dt>
+<dd><p>The multi-argument max() function returns the argument with the maximum value, or return NULL if any argument is NULL.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-60099-10331-60202-18303-15072-02692-09131-64001'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-60099-10331-60202-18303-15072-02692-09131-64001'>detail</a>)</i></p></dd>
+
+<dt><b>R-60116-07512-58915-34357-51591-00163-63646-47672</b></dt>
+<dd><p>The parent key of a foreign key constraint is not allowed to use the rowid. The parent key must used named columns only.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: th3/req1/foreignkeys03.test, matrix: <a href='matrix/lang_createtable.html#R-60116-07512-58915-34357-51591-00163-63646-47672'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-60116-07512-58915-34357-51591-00163-63646-47672'>detail</a>)</i></p></dd>
+
+<dt><b>R-60116-58305-35895-50546-31025-26877-37972-30944</b></dt>
+<dd><p>A NULL operand on a mathematical operator yields a NULL result.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_06.test, matrix: <a href='matrix/datatype3.html#R-60116-58305-35895-50546-31025-26877-37972-30944'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-60116-58305-35895-50546-31025-26877-37972-30944'>detail</a>)</i></p></dd>
+
+<dt><b>R-60153-11078-48235-52964-41144-31908-11477-07860</b></dt>
+<dd><p>If the most recent call to sqlite3_step(S) for the prepared statement S returned SQLITE_ROW or SQLITE_DONE, or if sqlite3_step(S) has never before been called on S, then sqlite3_reset(S) returns SQLITE_OK.
+<i>(source: <a href="c3ref/reset.html">c3ref/reset.html</a>, checked-by: th3/th3util.c, matrix: <a href='matrix/c3ref/reset.html#R-60153-11078-48235-52964-41144-31908-11477-07860'>context</a>, <a href='matrix/matrix_dreset.html#R-60153-11078-48235-52964-41144-31908-11477-07860'>detail</a>)</i></p></dd>
+
+<dt><b>R-60175-02388-07986-54483-25650-07763-57471-09194</b></dt>
+<dd><p>Deliberately changing out of WAL mode changes the database file format version numbers back to 1 so that older versions of SQLite can once again access the database file.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, matrix: <a href='matrix/wal.html#R-60175-02388-07986-54483-25650-07763-57471-09194'>context</a>, <a href='matrix/matrix_dwal.html#R-60175-02388-07986-54483-25650-07763-57471-09194'>detail</a>)</i></p></dd>
+
+<dt><b>R-60210-08703-54697-04139-16865-40143-01079-14563</b></dt>
+<dd><p>Every column definition must specify a datatype for that column.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-60210-08703-54697-04139-16865-40143-01079-14563'>context</a>, <a href='matrix/matrix_dstricttables.html#R-60210-08703-54697-04139-16865-40143-01079-14563'>detail</a>)</i></p></dd>
+
+<dt><b>R-60223-49197-47442-02320-11696-61949-31575-11697</b></dt>
+<dd><p>When the sqlite3_vtab_rhs_value(P,J,V) interface is invoked from within the xBestIndex method of a virtual table implementation, with P being a copy of the sqlite3_index_info object pointer passed into xBestIndex and J being a 0-based index into P->aConstraint[], then this routine attempts to set *V to the value of the right-hand operand of that constraint if the right-hand operand is known.
+<i>(source: <a href="c3ref/vtab_rhs_value.html">c3ref/vtab_rhs_value.html</a>, checked-by: tcl/vtabrhs1.test, matrix: <a href='matrix/c3ref/vtab_rhs_value.html#R-60223-49197-47442-02320-11696-61949-31575-11697'>context</a>, <a href='matrix/matrix_dvtab_rhs_value.html#R-60223-49197-47442-02320-11696-61949-31575-11697'>detail</a>)</i></p></dd>
+
+<dt><b>R-60235-46489-17538-30450-39189-57367-12631-34674</b></dt>
+<dd><p>The handler will sleep multiple times until at least "ms" milliseconds of sleeping have accumulated.
+<i>(source: <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a>, checked-by: th3/cov1/main21.test, matrix: <a href='matrix/c3ref/busy_timeout.html#R-60235-46489-17538-30450-39189-57367-12631-34674'>context</a>, <a href='matrix/matrix_dbusy_timeout.html#R-60235-46489-17538-30450-39189-57367-12631-34674'>detail</a>)</i></p></dd>
+
+<dt><b>R-60247-35692-05586-10115-22101-12155-14694-19352</b></dt>
+<dd><p>The contents of the sqlite3_rtree_geometry structure are initialized by SQLite but are not subsequently modified.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, matrix: <a href='matrix/rtree.html#R-60247-35692-05586-10115-22101-12155-14694-19352'>context</a>, <a href='matrix/matrix_drtree.html#R-60247-35692-05586-10115-22101-12155-14694-19352'>detail</a>)</i></p></dd>
+
+<dt><b>R-60266-38679-12997-49105-31919-12013-36067-05983</b></dt>
+<dd><p>&lsqb;expr&rsqb;&nbsp;COLLATE&nbsp;&lpar;collation-name&rpar;&nbsp;3
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-60266-38679-12997-49105-31919-12013-36067-05983'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-60266-38679-12997-49105-31919-12013-36067-05983'>detail</a>)</i></p></dd>
+
+<dt><b>R-60277-47120-38313-48039-28824-40511-28187-23184</b></dt>
+<dd><p>If an INSTEAD OF INSERT trigger exists on a view, then it is possible to execute an INSERT statement against that view. No actual insert occurs. Instead, the statements contained within the trigger are run.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-60277-47120-38313-48039-28824-40511-28187-23184'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-60277-47120-38313-48039-28824-40511-28187-23184'>detail</a>)</i></p></dd>
+
+<dt><b>R-60292-04128-28566-07483-18233-58006-62395-18068</b></dt>
+<dd><p>When temp_store is FILE (1) temporary tables and indices are stored in a file.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-60292-04128-28566-07483-18233-58006-62395-18068'>context</a>, <a href='matrix/matrix_dpragma.html#R-60292-04128-28566-07483-18233-58006-62395-18068'>detail</a>)</i></p></dd>
+
+<dt><b>R-60317-50382-07246-28388-21909-63634-29963-03313</b></dt>
+<dd><p>The sqlite3_table_column_metadata(X,D,T,C,....) routine returns information about column C of table T in database D on database connection X.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-60317-50382-07246-28388-21909-63634-29963-03313'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-60317-50382-07246-28388-21909-63634-29963-03313'>detail</a>)</i></p></dd>
+
+<dt><b>R-60324-39271-63103-21591-25385-29112-09183-41163</b></dt>
+<dd><p>Key/value pairs are separated by a single "&" character.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-60324-39271-63103-21591-25385-29112-09183-41163'>context</a>, <a href='matrix/matrix_duri.html#R-60324-39271-63103-21591-25385-29112-09183-41163'>detail</a>)</i></p></dd>
+
+<dt><b>R-60334-12880-45954-16548-05057-35188-10924-38811</b></dt>
+<dd><p>If the most recent evaluation of the statement encountered no errors or if the statement is never been evaluated, then sqlite3_finalize() returns SQLITE_OK.
+<i>(source: <a href="c3ref/finalize.html">c3ref/finalize.html</a>, checked-by: th3/req1/finalize01.test, matrix: <a href='matrix/c3ref/finalize.html#R-60334-12880-45954-16548-05057-35188-10924-38811'>context</a>, <a href='matrix/matrix_dfinalize.html#R-60334-12880-45954-16548-05057-35188-10924-38811'>detail</a>)</i></p></dd>
+
+<dt><b>R-60344-21573-43141-53224-31246-51025-51087-34354</b></dt>
+<dd><p>The SQLite query planner might use the estimated row size information provided by the "sz=NNN" token to help it choose smaller tables and indexes that require less disk I/O.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/cov1/index02.test, matrix: <a href='matrix/fileformat2.html#R-60344-21573-43141-53224-31246-51025-51087-34354'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-60344-21573-43141-53224-31246-51025-51087-34354'>detail</a>)</i></p></dd>
+
+<dt><b>R-60349-29862-22141-07811-21559-44331-23137-45760</b></dt>
+<dd><p>This API is only available if the library was compiled with the SQLITE_ENABLE_UNLOCK_NOTIFY C-preprocessor symbol defined.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-60349-29862-22141-07811-21559-44331-23137-45760'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-60349-29862-22141-07811-21559-44331-23137-45760'>detail</a>)</i></p></dd>
+
+<dt><b>R-60354-20889-08595-48824-21285-36723-22073-47056</b></dt>
+<dd><p>The sqlite3_get_auxdata(C,N) interface returns a pointer to the metadata associated by the sqlite3_set_auxdata(C,N,P,X) function with the Nth argument value to the application-defined function.
+<i>(source: <a href="c3ref/get_auxdata.html">c3ref/get_auxdata.html</a>, matrix: <a href='matrix/c3ref/get_auxdata.html#R-60354-20889-08595-48824-21285-36723-22073-47056'>context</a>, <a href='matrix/matrix_dget_auxdata.html#R-60354-20889-08595-48824-21285-36723-22073-47056'>detail</a>)</i></p></dd>
+
+<dt><b>R-60355-64447-23225-33179-21170-11020-20743-59440</b></dt>
+<dd><p>On success, the sqlite3_prepare() family of routines return SQLITE_OK; otherwise an error code is returned.
+<i>(source: <a href="c3ref/prepare.html">c3ref/prepare.html</a>, checked-by: th3/req1/prepare01.test, matrix: <a href='matrix/c3ref/prepare.html#R-60355-64447-23225-33179-21170-11020-20743-59440'>context</a>, <a href='matrix/matrix_dprepare.html#R-60355-64447-23225-33179-21170-11020-20743-59440'>detail</a>)</i></p></dd>
+
+<dt><b>R-60364-48303-16474-64960-19278-15379-28844-42689</b></dt>
+<dd><p>The sqlite3_mutex_try() interface returns SQLITE_OK upon successful entry.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-60364-48303-16474-64960-19278-15379-28844-42689'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-60364-48303-16474-64960-19278-15379-28844-42689'>detail</a>)</i></p></dd>
+
+<dt><b>R-60371-22228-63292-43045-55610-34824-26426-18643</b></dt>
+<dd><p>However, there cannot be gaps in the columns of the index that are used.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-60371-22228-63292-43045-55610-34824-26426-18643'>context</a>, <a href='matrix/matrix_doptoverview.html#R-60371-22228-63292-43045-55610-34824-26426-18643'>detail</a>)</i></p></dd>
+
+<dt><b>R-60379-28396-59672-52502-37778-52591-48911-05246</b></dt>
+<dd><p>If both conditions are true, then the argvIndex-th parameter to the xFilter method will be an sqlite3_value that appears to be NULL, but which can be passed to sqlite3_vtab_in_first() and sqlite3_vtab_in_next() to find all values on the right-hand side of the IN constraint.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-60379-28396-59672-52502-37778-52591-48911-05246'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-60379-28396-59672-52502-37778-52591-48911-05246'>detail</a>)</i></p></dd>
+
+<dt><b>R-60391-12216-45718-54905-27899-48976-39746-28204</b></dt>
+<dd><p>The date(), time(), and datetime() functions all return text, and so their strftime() equivalents are exact.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-60391-12216-45718-54905-27899-48976-39746-28204'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-60391-12216-45718-54905-27899-48976-39746-28204'>detail</a>)</i></p></dd>
+
+<dt><b>R-60470-29837-23817-60993-08685-62249-11012-03852</b></dt>
+<dd><p>The normal ROWID selection algorithm described above will generate monotonically increasing unique ROWIDs as long as you never use the maximum ROWID value and you never delete the entry in the table with the largest ROWID.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-60470-29837-23817-60993-08685-62249-11012-03852'>context</a>, <a href='matrix/matrix_dautoinc.html#R-60470-29837-23817-60993-08685-62249-11012-03852'>detail</a>)</i></p></dd>
+
+<dt><b>R-60541-63059-13982-01066-19481-07947-17056-17575</b></dt>
+<dd><p>Running VACUUM to rebuild the database reclaims this space and reduces the size of the database file.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-60541-63059-13982-01066-19481-07947-17056-17575'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-60541-63059-13982-01066-19481-07947-17056-17575'>detail</a>)</i></p></dd>
+
+<dt><b>R-60567-47780-15259-20158-13854-20870-19515-07838</b></dt>
+<dd><p>Unless it returns SQLITE_MISUSE, the sqlite3_wal_checkpoint_v2() interface sets the error information that is queried by sqlite3_errcode() and sqlite3_errmsg().
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-60567-47780-15259-20158-13854-20870-19515-07838'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-60567-47780-15259-20158-13854-20870-19515-07838'>detail</a>)</i></p></dd>
+
+<dt><b>R-60616-50251-50131-13271-23159-13048-15084-43797</b></dt>
+<dd><p>If the default value of a column is an expression in parentheses, then the expression is evaluated once for each row inserted and the results used in the new row.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-60616-50251-50131-13271-23159-13048-15084-43797'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-60616-50251-50131-13271-23159-13048-15084-43797'>detail</a>)</i></p></dd>
+
+<dt><b>R-60626-59740-27448-56337-63939-00650-38940-26585</b></dt>
+<dd><p>All query parameters are always passed through into the xOpen method of the VFS even if they are previously read and interpreted by the SQLite core.
+<i>(source: <a href="uri.html">uri.html</a>, matrix: <a href='matrix/uri.html#R-60626-59740-27448-56337-63939-00650-38940-26585'>context</a>, <a href='matrix/matrix_duri.html#R-60626-59740-27448-56337-63939-00650-38940-26585'>detail</a>)</i></p></dd>
+
+<dt><b>R-60642-04082-57988-56847-11396-02756-59286-18214</b></dt>
+<dd><p>If the writer lock cannot be obtained immediately, and a busy-handler is configured, it is invoked and the writer lock retried until either the busy-handler returns 0 or the lock is successfully obtained.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: src/wal.c, tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-60642-04082-57988-56847-11396-02756-59286-18214'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-60642-04082-57988-56847-11396-02756-59286-18214'>detail</a>)</i></p></dd>
+
+<dt><b>R-60735-46752-55529-42699-37701-47683-08130-22396</b></dt>
+<dd><p>BLOBs are encoded as hexadecimal literals.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-60735-46752-55529-42699-37701-47683-08130-22396'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-60735-46752-55529-42699-37701-47683-08130-22396'>detail</a>)</i></p></dd>
+
+<dt><b>R-60755-45226-57184-35002-64218-27799-00922-32350</b></dt>
+<dd><p>The application_id PRAGMA is used to query or set the 32-bit signed big-endian "Application ID" integer located at offset 68 into the database header.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma20.test, matrix: <a href='matrix/pragma.html#R-60755-45226-57184-35002-64218-27799-00922-32350'>context</a>, <a href='matrix/matrix_dpragma.html#R-60755-45226-57184-35002-64218-27799-00922-32350'>detail</a>)</i></p></dd>
+
+<dt><b>R-60758-29241-24503-58415-42517-14147-34293-65020</b></dt>
+<dd><p>The RELEASE command causes all savepoints back to and including the most recent savepoint with a matching name to be removed from the transaction stack.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-60758-29241-24503-58415-42517-14147-34293-65020'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-60758-29241-24503-58415-42517-14147-34293-65020'>detail</a>)</i></p></dd>
+
+<dt><b>R-60770-10612-35184-24244-53222-19878-52254-20031</b></dt>
+<dd><p>One of the ALL or DISTINCT keywords may follow the SELECT keyword in a simple SELECT statement.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-60770-10612-35184-24244-53222-19878-52254-20031'>context</a>, <a href='matrix/matrix_dlang_select.html#R-60770-10612-35184-24244-53222-19878-52254-20031'>detail</a>)</i></p></dd>
+
+<dt><b>R-60775-64916-04549-62415-27709-55207-27671-06558</b></dt>
+<dd><p>If a WHERE clause is specified, the WHERE expression is evaluated for each row in the input data as a boolean expression. Only rows for which the WHERE clause expression evaluates to true are included from the dataset before continuing.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-60775-64916-04549-62415-27709-55207-27671-06558'>context</a>, <a href='matrix/matrix_dlang_select.html#R-60775-64916-04549-62415-27709-55207-27671-06558'>detail</a>)</i></p></dd>
+
+<dt><b>R-60806-29331-56214-63587-21345-27818-10618-50452</b></dt>
+<dd><p>The answers from changes() and last_insert_rowid() depend on prior SQL statements, and so they are also non-deterministic.
+<i>(source: <a href="deterministic.html">deterministic.html</a>, matrix: <a href='matrix/deterministic.html#R-60806-29331-56214-63587-21345-27818-10618-50452'>context</a>, <a href='matrix/matrix_ddeterministic.html#R-60806-29331-56214-63587-21345-27818-10618-50452'>detail</a>)</i></p></dd>
+
+<dt><b>R-60813-08986-02359-37993-40551-24945-25887-06253</b></dt>
+<dd><p>If another thread is already within the mutex, sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return SQLITE_BUSY.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-60813-08986-02359-37993-40551-24945-25887-06253'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-60813-08986-02359-37993-40551-24945-25887-06253'>detail</a>)</i></p></dd>
+
+<dt><b>R-60814-18273-28443-15335-58927-41663-48386-29950</b></dt>
+<dd><p>The R*Tree implementation just makes some kinds of queries especially efficient.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-60814-18273-28443-15335-58927-41663-48386-29950'>context</a>, <a href='matrix/matrix_drtree.html#R-60814-18273-28443-15335-58927-41663-48386-29950'>detail</a>)</i></p></dd>
+
+<dt><b>R-60817-01178-46366-05638-56603-60779-33180-29788</b></dt>
+<dd><p>If the argument is "RESET" then schema writing is disabled (as with "PRAGMA writable_schema=OFF") and, in addition, the schema is reloaded.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/pragma.c, th3/req1/pragma30.test, matrix: <a href='matrix/pragma.html#R-60817-01178-46366-05638-56603-60779-33180-29788'>context</a>, <a href='matrix/matrix_dpragma.html#R-60817-01178-46366-05638-56603-60779-33180-29788'>detail</a>)</i></p></dd>
+
+<dt><b>R-60831-05341-23362-01720-38236-12013-65294-04816</b></dt>
+<dd><p>The argument is may be either in parentheses or it may be separated from the pragma name by an equal sign.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma01.test, matrix: <a href='matrix/pragma.html#R-60831-05341-23362-01720-38236-12013-65294-04816'>context</a>, <a href='matrix/matrix_dpragma.html#R-60831-05341-23362-01720-38236-12013-65294-04816'>detail</a>)</i></p></dd>
+
+<dt><b>R-60876-64599-55796-06816-32195-01348-28462-53334</b></dt>
+<dd><p>The sqlite3_value_text16() interface extracts a UTF-16 string in the native byte-order of the host machine.
+<i>(source: <a href="c3ref/value_blob.html">c3ref/value_blob.html</a>, checked-by: th3/req1/value02.test, th3/req1/value03.test, matrix: <a href='matrix/c3ref/value_blob.html#R-60876-64599-55796-06816-32195-01348-28462-53334'>context</a>, <a href='matrix/matrix_dvalue_blob.html#R-60876-64599-55796-06816-32195-01348-28462-53334'>detail</a>)</i></p></dd>
+
+<dt><b>R-60908-02162-62695-08898-00608-41143-47614-24139</b></dt>
+<dd><p>In the current implementation, the update hook is not invoked when conflicting rows are deleted because of an ON CONFLICT REPLACE clause.
+<i>(source: <a href="c3ref/update_hook.html">c3ref/update_hook.html</a>, checked-by: th3/cov1/main15.test, matrix: <a href='matrix/c3ref/update_hook.html#R-60908-02162-62695-08898-00608-41143-47614-24139'>context</a>, <a href='matrix/matrix_dupdate_hook.html#R-60908-02162-62695-08898-00608-41143-47614-24139'>detail</a>)</i></p></dd>
+
+<dt><b>R-60985-57662-04483-59248-10439-16937-18279-52954</b></dt>
+<dd><p>SQLite will convert the value back to floating point when extracting it from the record.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/expr.c, matrix: <a href='matrix/fileformat2.html#R-60985-57662-04483-59248-10439-16937-18279-52954'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-60985-57662-04483-59248-10439-16937-18279-52954'>detail</a>)</i></p></dd>
+
+<dt><b>R-61005-38009-10424-51044-09118-00847-38862-56166</b></dt>
+<dd><p>The third column is the name of the database file itself, or an empty string if the database is not associated with a file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma14.test, matrix: <a href='matrix/pragma.html#R-61005-38009-10424-51044-09118-00847-38862-56166'>context</a>, <a href='matrix/matrix_dpragma.html#R-61005-38009-10424-51044-09118-00847-38862-56166'>detail</a>)</i></p></dd>
+
+<dt><b>R-61006-08918-45261-48717-64220-57830-55931-08839</b></dt>
+<dd><p>If the memory pointer is not NULL then the alternative memory allocator is engaged to handle all of SQLites memory allocation needs.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-61006-08918-45261-48717-64220-57830-55931-08839'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-61006-08918-45261-48717-64220-57830-55931-08839'>detail</a>)</i></p></dd>
+
+<dt><b>R-61011-49942-02510-58821-51919-09145-23706-24617</b></dt>
+<dd><p>If an sqlite3_exec() callback returns non-zero, the sqlite3_exec() routine returns SQLITE_ABORT without invoking the callback again and without running any subsequent SQL statements.
+<i>(source: <a href="c3ref/exec.html">c3ref/exec.html</a>, checked-by: th3/req1/exec01.test, matrix: <a href='matrix/c3ref/exec.html#R-61011-49942-02510-58821-51919-09145-23706-24617'>context</a>, <a href='matrix/matrix_dexec.html#R-61011-49942-02510-58821-51919-09145-23706-24617'>detail</a>)</i></p></dd>
+
+<dt><b>R-61030-07741-23809-31922-35879-55755-23580-02409</b></dt>
+<dd><p>The sqlite3_vtab_in(P,N,F) interface can be invoked multiple times within the same xBestIndex method call.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-61030-07741-23809-31922-35879-55755-23580-02409'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-61030-07741-23809-31922-35879-55755-23580-02409'>detail</a>)</i></p></dd>
+
+<dt><b>R-61057-06282-34752-62385-16178-37477-62681-46915</b></dt>
+<dd><p>When selecting the order of tables in a join, SQLite uses an efficient polynomial-time algorithm.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-61057-06282-34752-62385-16178-37477-62681-46915'>context</a>, <a href='matrix/matrix_doptoverview.html#R-61057-06282-34752-62385-16178-37477-62681-46915'>detail</a>)</i></p></dd>
+
+<dt><b>R-61095-64052-59910-44043-27756-28387-34455-40099</b></dt>
+<dd><p>Subverting this mechanism by using "PRAGMA schema_version=N" to change the value of the schema_version may cause SQL statement to run using an obsolete schema, which can lead to incorrect answers and/or database corruption.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma28.test, matrix: <a href='matrix/pragma.html#R-61095-64052-59910-44043-27756-28387-34455-40099'>context</a>, <a href='matrix/matrix_dpragma.html#R-61095-64052-59910-44043-27756-28387-34455-40099'>detail</a>)</i></p></dd>
+
+<dt><b>R-61141-39803-04912-41496-05961-04473-04345-36188</b></dt>
+<dd><p>The value of the default cache size is stored in the 4-byte big-endian integer located at offset 48 in the header of the database file.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma09.test, matrix: <a href='matrix/pragma.html#R-61141-39803-04912-41496-05961-04473-04345-36188'>context</a>, <a href='matrix/matrix_dpragma.html#R-61141-39803-04912-41496-05961-04473-04345-36188'>detail</a>)</i></p></dd>
+
+<dt><b>R-61158-57305-03105-25357-56020-55639-01161-13829</b></dt>
+<dd><p>If the third parameter to sqlite3_bind_text16() is not NULL, then it should be a pointer to well-formed UTF16 text.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, matrix: <a href='matrix/c3ref/bind_blob.html#R-61158-57305-03105-25357-56020-55639-01161-13829'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-61158-57305-03105-25357-56020-55639-01161-13829'>detail</a>)</i></p></dd>
+
+<dt><b>R-61172-15671-64149-04052-46334-28337-33946-53778</b></dt>
+<dd><p>The DROP TRIGGER statement removes a trigger created by the CREATE TRIGGER statement.
+<i>(source: <a href="lang_droptrigger.html">lang_droptrigger.html</a>, checked-by: tcl/e_droptrigger.test, matrix: <a href='matrix/lang_droptrigger.html#R-61172-15671-64149-04052-46334-28337-33946-53778'>context</a>, <a href='matrix/matrix_dlang_droptrigger.html#R-61172-15671-64149-04052-46334-28337-33946-53778'>detail</a>)</i></p></dd>
+
+<dt><b>R-61177-47713-20456-53383-60828-21202-49535-63505</b></dt>
+<dd><p>The sqlite3_vfs_find() interface returns a pointer to a VFS given its name.
+<i>(source: <a href="c3ref/vfs_find.html">c3ref/vfs_find.html</a>, checked-by: th3/req1/vfs01.test, matrix: <a href='matrix/c3ref/vfs_find.html#R-61177-47713-20456-53383-60828-21202-49535-63505'>context</a>, <a href='matrix/matrix_dvfs_find.html#R-61177-47713-20456-53383-60828-21202-49535-63505'>detail</a>)</i></p></dd>
+
+<dt><b>R-61189-52809-58613-48789-49594-50841-42659-38002</b></dt>
+<dd><p>If the function pointer is not NULL, it is invoked by sqlite3_log() to process each logging event.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: th3/cov1/log01.test, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-61189-52809-58613-48789-49594-50841-42659-38002'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-61189-52809-58613-48789-49594-50841-42659-38002'>detail</a>)</i></p></dd>
+
+<dt><b>R-61209-06413-51781-11352-22820-24005-55507-30248</b></dt>
+<dd><p>SQLite will always allocate at least mxPathname+1 bytes for the output buffer xFullPathname.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-61209-06413-51781-11352-22820-24005-55507-30248'>context</a>, <a href='matrix/matrix_dvfs.html#R-61209-06413-51781-11352-22820-24005-55507-30248'>detail</a>)</i></p></dd>
+
+<dt><b>R-61212-30018-17379-64854-64667-34825-18647-31040</b></dt>
+<dd><p>If prepared statement X is an EXPLAIN or EXPLAIN QUERY PLAN statement, then sqlite3_stmt_readonly(X) returns the same value as if the EXPLAIN or EXPLAIN QUERY PLAN prefix were omitted.
+<i>(source: <a href="c3ref/stmt_readonly.html">c3ref/stmt_readonly.html</a>, checked-by: tcl/capi3d.test, th3/cov1/vdbeapi14.test, matrix: <a href='matrix/c3ref/stmt_readonly.html#R-61212-30018-17379-64854-64667-34825-18647-31040'>context</a>, <a href='matrix/matrix_dstmt_readonly.html#R-61212-30018-17379-64854-64667-34825-18647-31040'>detail</a>)</i></p></dd>
+
+<dt><b>R-61228-42590-45974-40340-24856-10702-49486-00890</b></dt>
+<dd><p>If the argument to sign(X) is NULL or is a string or blob that cannot be losslessly converted into a number, then sign(X) returns NULL.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, matrix: <a href='matrix/lang_corefunc.html#R-61228-42590-45974-40340-24856-10702-49486-00890'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-61228-42590-45974-40340-24856-10702-49486-00890'>detail</a>)</i></p></dd>
+
+<dt><b>R-61241-11973-05308-06384-59636-46330-32526-49143</b></dt>
+<dd><p>A zeroblob uses a fixed amount of memory (just an integer to hold its size) while it is being processed.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind02.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-61241-11973-05308-06384-59636-46330-32526-49143'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-61241-11973-05308-06384-59636-46330-32526-49143'>detail</a>)</i></p></dd>
+
+<dt><b>R-61275-35157-49893-43294-29165-05746-06508-08638</b></dt>
+<dd><p>The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int, interpreted as a boolean, which enables or disables the collection of memory allocation statistics.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-61275-35157-49893-43294-29165-05746-06508-08638'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-61275-35157-49893-43294-29165-05746-06508-08638'>detail</a>)</i></p></dd>
+
+<dt><b>R-61302-08786-38970-33411-07137-48522-41365-64379</b></dt>
+<dd><p>The "localtime" modifier (14) assumes the time value to its left is in Universal Coordinated Time (UTC) and adjusts that time value so that it is in localtime.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-61302-08786-38970-33411-07137-48522-41365-64379'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-61302-08786-38970-33411-07137-48522-41365-64379'>detail</a>)</i></p></dd>
+
+<dt><b>R-61304-29449-15087-21131-58882-51770-33861-39357</b></dt>
+<dd><p>The unlikely(X) function is equivalent to likelihood(X, 0.0625).
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/resolve.c, matrix: <a href='matrix/lang_corefunc.html#R-61304-29449-15087-21131-58882-51770-33861-39357'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-61304-29449-15087-21131-58882-51770-33861-39357'>detail</a>)</i></p></dd>
+
+<dt><b>R-61362-32087-29784-51692-52137-61704-15338-45644</b></dt>
+<dd><p>Attempting to insert a row into the track table that does not correspond to any row in the artist table will fail,
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys01.test, matrix: <a href='matrix/foreignkeys.html#R-61362-32087-29784-51692-52137-61704-15338-45644'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-61362-32087-29784-51692-52137-61704-15338-45644'>detail</a>)</i></p></dd>
+
+<dt><b>R-61376-43478-41054-59749-08806-37073-25549-48326</b></dt>
+<dd><p>The glob(X,Y) function is equivalent to the expression "Y GLOB X".
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func01.test, matrix: <a href='matrix/lang_corefunc.html#R-61376-43478-41054-59749-08806-37073-25549-48326'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-61376-43478-41054-59749-08806-37073-25549-48326'>detail</a>)</i></p></dd>
+
+<dt><b>R-61376-57267-60176-57380-17573-65142-26150-27865</b></dt>
+<dd><p>A "CASCADE" action propagates the delete or update operation on the parent key to each dependent child key.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-61376-57267-60176-57380-17573-65142-26150-27865'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-61376-57267-60176-57380-17573-65142-26150-27865'>detail</a>)</i></p></dd>
+
+<dt><b>R-61413-50265-52071-27114-12254-11492-58681-53001</b></dt>
+<dd><p>The SQLITE_CONFIG_STMTJRNL_SPILL option takes a single parameter which becomes the statement journal spill-to-disk threshold.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-61413-50265-52071-27114-12254-11492-58681-53001'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-61413-50265-52071-27114-12254-11492-58681-53001'>detail</a>)</i></p></dd>
+
+<dt><b>R-61427-46983-18669-51894-26690-07828-25787-33323</b></dt>
+<dd><p>For example, a query like the following might be used to find all R*Tree entries that overlap with a circle centered a 45.3,22.9 with a radius of 5.0: SELECT id FROM demo_index WHERE id MATCH circle(45.3, 22.9, 5.0)
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc2.test, matrix: <a href='matrix/rtree.html#R-61427-46983-18669-51894-26690-07828-25787-33323'>context</a>, <a href='matrix/matrix_drtree.html#R-61427-46983-18669-51894-26690-07828-25787-33323'>detail</a>)</i></p></dd>
+
+<dt><b>R-61430-55629-14606-55181-61950-28043-41747-60450</b></dt>
+<dd><p>If an out-of-memory condition or IO error occurred during any prior sqlite3_backup_step() call on the same sqlite3_backup object, then sqlite3_backup_finish() returns the corresponding error code.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-61430-55629-14606-55181-61950-28043-41747-60450'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-61430-55629-14606-55181-61950-28043-41747-60450'>detail</a>)</i></p></dd>
+
+<dt><b>R-61435-31567-58098-41334-50609-21089-31560-63690</b></dt>
+<dd><p>The returned string is always UTF-8 encoded.
+<i>(source: <a href="c3ref/column_decltype.html">c3ref/column_decltype.html</a>, matrix: <a href='matrix/c3ref/column_decltype.html#R-61435-31567-58098-41334-50609-21089-31560-63690'>context</a>, <a href='matrix/matrix_dcolumn_decltype.html#R-61435-31567-58098-41334-50609-21089-31560-63690'>detail</a>)</i></p></dd>
+
+<dt><b>R-61444-46004-20245-30772-61521-38434-38855-21947</b></dt>
+<dd><p>If the X callback is NULL or if the M mask is zero, then tracing is disabled.
+<i>(source: <a href="c3ref/trace_v2.html">c3ref/trace_v2.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/trace_v2.html#R-61444-46004-20245-30772-61521-38434-38855-21947'>context</a>, <a href='matrix/matrix_dtrace_v2.html#R-61444-46004-20245-30772-61521-38434-38855-21947'>detail</a>)</i></p></dd>
+
+<dt><b>R-61449-07528-25918-54581-50691-46240-35761-07017</b></dt>
+<dd><p>If the 4th parameter to the sqlite3_result_text* interfaces or to sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite assumes that the text or BLOB result is in constant space and does not copy the content of the parameter nor call a destructor on the content when it has finished using that result.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result02.test, matrix: <a href='matrix/c3ref/result_blob.html#R-61449-07528-25918-54581-50691-46240-35761-07017'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-61449-07528-25918-54581-50691-46240-35761-07017'>detail</a>)</i></p></dd>
+
+<dt><b>R-61480-49358-44699-35274-34938-16016-20585-63326</b></dt>
+<dd><p>It is called to dispose of the BLOB or string even if the call to the bind API fails, except the destructor is not called if the third parameter is a NULL pointer or the fourth parameter is negative.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-61480-49358-44699-35274-34938-16016-20585-63326'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-61480-49358-44699-35274-34938-16016-20585-63326'>detail</a>)</i></p></dd>
+
+<dt><b>R-61533-25862-33162-64388-19135-16857-63238-64063</b></dt>
+<dd><p>The SQLite R*Tree implementation does not support R*Trees wider than 5 dimensions.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq01.test, matrix: <a href='matrix/rtree.html#R-61533-25862-33162-64388-19135-16857-63238-64063'>context</a>, <a href='matrix/matrix_drtree.html#R-61533-25862-33162-64388-19135-16857-63238-64063'>detail</a>)</i></p></dd>
+
+<dt><b>R-61533-26777-10805-19639-06010-35256-55057-28233</b></dt>
+<dd><p>The sqlite3_result_int64() interface sets the return value of the application-defined function to be the 64-bit signed integer value given in the 2nd argument.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-61533-26777-10805-19639-06010-35256-55057-28233'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-61533-26777-10805-19639-06010-35256-55057-28233'>detail</a>)</i></p></dd>
+
+<dt><b>R-61561-09244-64416-20951-61914-64570-44208-64280</b></dt>
+<dd><p>SQLITE_OPEN_READWRITE The database is opened for reading and writing if possible, or reading only if the file is write protected by the operating system. In either case the database must already exist, otherwise an error is returned.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-61561-09244-64416-20951-61914-64570-44208-64280'>context</a>, <a href='matrix/matrix_dopen.html#R-61561-09244-64416-20951-61914-64570-44208-64280'>detail</a>)</i></p></dd>
+
+<dt><b>R-61562-13487-33758-31073-47966-53384-12179-59162</b></dt>
+<dd><p>The xCurrentTime() method returns a Julian Day Number for the current date and time as a floating point value.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-61562-13487-33758-31073-47966-53384-12179-59162'>context</a>, <a href='matrix/matrix_dvfs.html#R-61562-13487-33758-31073-47966-53384-12179-59162'>detail</a>)</i></p></dd>
+
+<dt><b>R-61616-46700-48571-17878-11289-09346-32706-45031</b></dt>
+<dd><p>Similar queries may be run if the content of the parent key is modified or a new row is inserted into the parent table.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys10.test, matrix: <a href='matrix/foreignkeys.html#R-61616-46700-48571-17878-11289-09346-32706-45031'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-61616-46700-48571-17878-11289-09346-32706-45031'>detail</a>)</i></p></dd>
+
+<dt><b>R-61726-11117-39197-35640-53612-54106-15944-36516</b></dt>
+<dd><p>SQLITE_LIMIT_TRIGGER_DEPTH The maximum depth of recursion for triggers.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: th3/req1/limit02.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-61726-11117-39197-35640-53612-54106-15944-36516'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-61726-11117-39197-35640-53612-54106-15944-36516'>detail</a>)</i></p></dd>
+
+<dt><b>R-61766-15253-61535-09888-08438-64512-26902-02870</b></dt>
+<dd><p>Executing any other type of SQL statement does not affect the value returned by sqlite3_total_changes().
+<i>(source: <a href="c3ref/total_changes.html">c3ref/total_changes.html</a>, checked-by: tcl/e_totalchanges.test, matrix: <a href='matrix/c3ref/total_changes.html#R-61766-15253-61535-09888-08438-64512-26902-02870'>context</a>, <a href='matrix/matrix_dtotal_changes.html#R-61766-15253-61535-09888-08438-64512-26902-02870'>detail</a>)</i></p></dd>
+
+<dt><b>R-61787-30047-57212-17703-61133-61221-34356-50389</b></dt>
+<dd><p>A call to sqlite3_vtab_in(P,N,F) with F==1 or F==0 indicates to SQLite that the virtual table does or does not want to process the IN operator all-at-once, respectively.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-61787-30047-57212-17703-61133-61221-34356-50389'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-61787-30047-57212-17703-61133-61221-34356-50389'>detail</a>)</i></p></dd>
+
+<dt><b>R-61808-14344-47257-03994-26724-50964-10589-13190</b></dt>
+<dd><p>The sqlite3_update_hook() interface does not fire callbacks for changes to a WITHOUT ROWID table.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/hook.test, th3/cov1/main15.test, matrix: <a href='matrix/withoutrowid.html#R-61808-14344-47257-03994-26724-50964-10589-13190'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-61808-14344-47257-03994-26724-50964-10589-13190'>detail</a>)</i></p></dd>
+
+<dt><b>R-61809-62207-01008-46404-05799-53014-10578-37094</b></dt>
+<dd><p>For an "ON DELETE CASCADE" action, this means that each row in the child table that was associated with the deleted parent row is also deleted.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys16.test, matrix: <a href='matrix/foreignkeys.html#R-61809-62207-01008-46404-05799-53014-10578-37094'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-61809-62207-01008-46404-05799-53014-10578-37094'>detail</a>)</i></p></dd>
+
+<dt><b>R-61815-26679-56101-35658-51912-28874-35291-46177</b></dt>
+<dd><p>SQLite will invoke sqlite3_free() on *pzErrMsg after xEntryPoint() returns.
+<i>(source: <a href="c3ref/auto_extension.html">c3ref/auto_extension.html</a>, checked-by: th3/req1/autoext01.test, matrix: <a href='matrix/c3ref/auto_extension.html#R-61815-26679-56101-35658-51912-28874-35291-46177'>context</a>, <a href='matrix/matrix_dauto_extension.html#R-61815-26679-56101-35658-51912-28874-35291-46177'>detail</a>)</i></p></dd>
+
+<dt><b>R-61839-52333-58577-62900-39033-24200-06973-14092</b></dt>
+<dd><p>This interface is used to retrieve and reset counter values from a prepared statement. The first argument is the prepared statement object to be interrogated. The second argument is an integer code for a specific SQLITE_STMTSTATUS counter to be interrogated.
+<i>(source: <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a>, matrix: <a href='matrix/c3ref/stmt_status.html#R-61839-52333-58577-62900-39033-24200-06973-14092'>context</a>, <a href='matrix/matrix_dstmt_status.html#R-61839-52333-58577-62900-39033-24200-06973-14092'>detail</a>)</i></p></dd>
+
+<dt><b>R-61854-19914-11596-34735-37969-17089-57602-12373</b></dt>
+<dd><p>The sqlite3_finalize(S) routine can be called at any point during the life cycle of prepared statement S: before statement S is ever evaluated, after one or more calls to sqlite3_reset(), or after any call to sqlite3_step() regardless of whether or not the statement has completed execution.
+<i>(source: <a href="c3ref/finalize.html">c3ref/finalize.html</a>, checked-by: th3/req1/finalize01.test, matrix: <a href='matrix/c3ref/finalize.html#R-61854-19914-11596-34735-37969-17089-57602-12373'>context</a>, <a href='matrix/matrix_dfinalize.html#R-61854-19914-11596-34735-37969-17089-57602-12373'>detail</a>)</i></p></dd>
+
+<dt><b>R-61862-04293-61183-46877-49121-08671-06264-56801</b></dt>
+<dd><p>This is the approximate number of bytes of heap memory used to store the prepared statement.
+<i>(source: <a href="c3ref/c_stmtstatus_counter.html">c3ref/c_stmtstatus_counter.html</a>, matrix: <a href='matrix/c3ref/c_stmtstatus_counter.html#R-61862-04293-61183-46877-49121-08671-06264-56801'>context</a>, <a href='matrix/matrix_dc_stmtstatus_counter.html#R-61862-04293-61183-46877-49121-08671-06264-56801'>detail</a>)</i></p></dd>
+
+<dt><b>R-61888-49680-38370-22600-14954-58148-33546-00932</b></dt>
+<dd><p>SQLite invokes the xCreate() method to construct a new cache instance.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-61888-49680-38370-22600-14954-58148-33546-00932'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-61888-49680-38370-22600-14954-58148-33546-00932'>detail</a>)</i></p></dd>
+
+<dt><b>R-61914-48074-43351-14056-51344-34537-46858-37537</b></dt>
+<dd><p>If the table is initially empty, then a ROWID of 1 is used.
+<i>(source: <a href="autoinc.html">autoinc.html</a>, checked-by: src/vdbe.c, th3/req1/autoinc01.test, matrix: <a href='matrix/autoinc.html#R-61914-48074-43351-14056-51344-34537-46858-37537'>context</a>, <a href='matrix/matrix_dautoinc.html#R-61914-48074-43351-14056-51344-34537-46858-37537'>detail</a>)</i></p></dd>
+
+<dt><b>R-61915-31690-21946-53304-13926-27111-60628-08373</b></dt>
+<dd><p>The sqlite3_file_control() interface makes a direct call to the xFileControl method for the sqlite3_io_methods object associated with a particular database identified by the second argument.
+<i>(source: <a href="c3ref/file_control.html">c3ref/file_control.html</a>, matrix: <a href='matrix/c3ref/file_control.html#R-61915-31690-21946-53304-13926-27111-60628-08373'>context</a>, <a href='matrix/matrix_dfile_control.html#R-61915-31690-21946-53304-13926-27111-60628-08373'>detail</a>)</i></p></dd>
+
+<dt><b>R-61939-33480-39091-09989-20555-53712-51566-46990</b></dt>
+<dd><p>All terms of the WHERE clause are analyzed to see if they can be satisfied using indexes.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-61939-33480-39091-09989-20555-53712-51566-46990'>context</a>, <a href='matrix/matrix_doptoverview.html#R-61939-33480-39091-09989-20555-53712-51566-46990'>detail</a>)</i></p></dd>
+
+<dt><b>R-61942-17018-62236-02362-42701-24808-41313-47258</b></dt>
+<dd><p>An SQL statement can be preceded by the keyword "EXPLAIN" or by the phrase "EXPLAIN QUERY PLAN".
+<i>(source: <a href="lang_explain.html">lang_explain.html</a>, checked-by: th3/cov1/vdbeaux01.test, matrix: <a href='matrix/lang_explain.html#R-61942-17018-62236-02362-42701-24808-41313-47258'>context</a>, <a href='matrix/matrix_dlang_explain.html#R-61942-17018-62236-02362-42701-24808-41313-47258'>detail</a>)</i></p></dd>
+
+<dt><b>R-61949-35727-14867-12999-21207-20215-20581-25391</b></dt>
+<dd><p>The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb may be NULL in which case SQLite will allocate the lookaside buffer itself using sqlite3_malloc().
+<i>(source: <a href="c3ref/c_dbconfig_defensive.html">c3ref/c_dbconfig_defensive.html</a>, checked-by: src/main.c, th3/req1/dbconfig01.test, matrix: <a href='matrix/c3ref/c_dbconfig_defensive.html#R-61949-35727-14867-12999-21207-20215-20581-25391'>context</a>, <a href='matrix/matrix_dc_dbconfig_defensive.html#R-61949-35727-14867-12999-21207-20215-20581-25391'>detail</a>)</i></p></dd>
+
+<dt><b>R-61972-47750-14652-28694-02794-16402-15502-30377</b></dt>
+<dd><p>If SQLite is compiled and configured to support threadsafe database connections, then the source database connection may be used concurrently from within other threads.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, matrix: <a href='matrix/c3ref/backup_finish.html#R-61972-47750-14652-28694-02794-16402-15502-30377'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-61972-47750-14652-28694-02794-16402-15502-30377'>detail</a>)</i></p></dd>
+
+<dt><b>R-61975-13410-23961-36433-37989-49063-55179-53550</b></dt>
+<dd><p>It is not possible for an IS or IS NOT expression to evaluate to NULL.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-61975-13410-23961-36433-37989-49063-55179-53550'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-61975-13410-23961-36433-37989-49063-55179-53550'>detail</a>)</i></p></dd>
+
+<dt><b>R-61981-08185-11399-27946-15257-51226-00201-31403</b></dt>
+<dd><p>In an index on a WITHOUT ROWID table, if a column of the PRIMARY KEY is also a column in the index and has a matching collating sequence, then the indexed column is not repeated in the table-key suffix on the end of the index record.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat04.test, matrix: <a href='matrix/fileformat2.html#R-61981-08185-11399-27946-15257-51226-00201-31403'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-61981-08185-11399-27946-15257-51226-00201-31403'>detail</a>)</i></p></dd>
+
+<dt><b>R-61987-00541-30628-29518-50059-37734-56753-06843</b></dt>
+<dd><p>SQLITE_LIMIT_LENGTH The maximum size of any string or BLOB or table row, in bytes.
+<i>(source: <a href="c3ref/c_limit_attached.html">c3ref/c_limit_attached.html</a>, checked-by: tcl/sqllimits1.test, th3/req1/limit01.test, matrix: <a href='matrix/c3ref/c_limit_attached.html#R-61987-00541-30628-29518-50059-37734-56753-06843'>context</a>, <a href='matrix/matrix_dc_limit_attached.html#R-61987-00541-30628-29518-50059-37734-56753-06843'>detail</a>)</i></p></dd>
+
+<dt><b>R-62028-47212-10324-26388-32955-09019-38502-43412</b></dt>
+<dd><p>All calls obtain an exclusive "checkpoint" lock on the database file.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: src/wal.c, tcl/e_walckpt.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-62028-47212-10324-26388-32955-09019-38502-43412'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-62028-47212-10324-26388-32955-09019-38502-43412'>detail</a>)</i></p></dd>
+
+<dt><b>R-62039-61571-24368-30333-11201-30520-56861-22686</b></dt>
+<dd><p>Semicolons that are embedded within string literals or quoted identifier names or comments are not independent tokens (they are part of the token in which they are embedded) and thus do not count as a statement terminator.
+<i>(source: <a href="c3ref/complete.html">c3ref/complete.html</a>, checked-by: th3/cov1/complete01.test, matrix: <a href='matrix/c3ref/complete.html#R-62039-61571-24368-30333-11201-30520-56861-22686'>context</a>, <a href='matrix/matrix_dcomplete.html#R-62039-61571-24368-30333-11201-30520-56861-22686'>detail</a>)</i></p></dd>
+
+<dt><b>R-62084-05956-21371-24273-03009-23026-15537-48661</b></dt>
+<dd><p>The typeof(X) function returns a string that indicates the datatype of the expression X: "null", "integer", "real", "text", or "blob".
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func04.test, matrix: <a href='matrix/lang_corefunc.html#R-62084-05956-21371-24273-03009-23026-15537-48661'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-62084-05956-21371-24273-03009-23026-15537-48661'>detail</a>)</i></p></dd>
+
+<dt><b>R-62101-33764-02885-01676-40188-04354-35995-63967</b></dt>
+<dd><p>The transaction names need not be unique.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-62101-33764-02885-01676-40188-04354-35995-63967'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-62101-33764-02885-01676-40188-04354-35995-63967'>detail</a>)</i></p></dd>
+
+<dt><b>R-62103-54815-14934-53724-30869-15955-58646-34076</b></dt>
+<dd><p>If the busy callback is NULL, then SQLITE_BUSY is returned immediately upon encountering the lock.
+<i>(source: <a href="c3ref/busy_handler.html">c3ref/busy_handler.html</a>, checked-by: th3/req1/busy01.test, matrix: <a href='matrix/c3ref/busy_handler.html#R-62103-54815-14934-53724-30869-15955-58646-34076'>context</a>, <a href='matrix/matrix_dbusy_handler.html#R-62103-54815-14934-53724-30869-15955-58646-34076'>detail</a>)</i></p></dd>
+
+<dt><b>R-62128-24425-59419-24092-37826-34939-18827-33006</b></dt>
+<dd><p>The number of bytes stored on the index page is never less than M.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-62128-24425-59419-24092-37826-34939-18827-33006'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-62128-24425-59419-24092-37826-34939-18827-33006'>detail</a>)</i></p></dd>
+
+<dt><b>R-62139-20964-30258-06406-62558-17842-12310-23723</b></dt>
+<dd><p>The sqlite3_mutex_alloc() routine allocates a new mutex and returns a pointer to it.
+<i>(source: <a href="c3ref/mutex_alloc.html">c3ref/mutex_alloc.html</a>, matrix: <a href='matrix/c3ref/mutex_alloc.html#R-62139-20964-30258-06406-62558-17842-12310-23723'>context</a>, <a href='matrix/matrix_dmutex_alloc.html#R-62139-20964-30258-06406-62558-17842-12310-23723'>detail</a>)</i></p></dd>
+
+<dt><b>R-62157-11346-38405-02312-46550-08471-09631-26487</b></dt>
+<dd><p>Automatically started transactions are committed when the last SQL statement finishes.
+<i>(source: <a href="lang_transaction.html">lang_transaction.html</a>, matrix: <a href='matrix/lang_transaction.html#R-62157-11346-38405-02312-46550-08471-09631-26487'>context</a>, <a href='matrix/matrix_dlang_transaction.html#R-62157-11346-38405-02312-46550-08471-09631-26487'>detail</a>)</i></p></dd>
+
+<dt><b>R-62172-00036-57834-47035-33859-45076-31922-24757</b></dt>
+<dd><p>In this implementation, the standard C library function localtime_r() is used to assist in the calculation of local time.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: src/date.c, matrix: <a href='matrix/lang_datefunc.html#R-62172-00036-57834-47035-33859-45076-31922-24757'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-62172-00036-57834-47035-33859-45076-31922-24757'>detail</a>)</i></p></dd>
+
+<dt><b>R-62267-62884-09796-14012-16099-39965-57946-58351</b></dt>
+<dd><p>New automatically generated integer primary keys for AUTOINCREMENT tables are guaranteed to be larger than the sqlite_sequence.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-62267-62884-09796-14012-16099-39965-57946-58351'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-62267-62884-09796-14012-16099-39965-57946-58351'>detail</a>)</i></p></dd>
+
+<dt><b>R-62291-37402-63159-44375-18587-14784-42471-08644</b></dt>
+<dd><p>The SQLITE_UTF16_ALIGNED value for eTextRep forces strings to begin on an even byte address.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-62291-37402-63159-44375-18587-14784-42471-08644'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-62291-37402-63159-44375-18587-14784-42471-08644'>detail</a>)</i></p></dd>
+
+<dt><b>R-62291-48401-09187-39181-50628-35603-55893-32208</b></dt>
+<dd><p>In the extreme case where the columns being indexed cover all columns of the PRIMARY KEY, the index will consist of only the columns being indexed. The ex25acde example above demonstrates this.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat04.test, matrix: <a href='matrix/fileformat2.html#R-62291-48401-09187-39181-50628-35603-55893-32208'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-62291-48401-09187-39181-50628-35603-55893-32208'>detail</a>)</i></p></dd>
+
+<dt><b>R-62308-64553-46829-46708-05864-23145-57136-36663</b></dt>
+<dd><p>When one of RAISE(ROLLBACK,...), RAISE(ABORT,...) or RAISE(FAIL,...) is called during trigger-program execution, the specified ON CONFLICT processing is performed and the current query terminates.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-62308-64553-46829-46708-05864-23145-57136-36663'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-62308-64553-46829-46708-05864-23145-57136-36663'>detail</a>)</i></p></dd>
+
+<dt><b>R-62327-53843-00789-05763-27259-51867-41833-27488</b></dt>
+<dd><p>For CURRENT_TIME, the format of the value is "HH:MM:SS".
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-62327-53843-00789-05763-27259-51867-41833-27488'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-62327-53843-00789-05763-27259-51867-41833-27488'>detail</a>)</i></p></dd>
+
+<dt><b>R-62338-03151-32833-50529-63145-58374-11729-12446</b></dt>
+<dd><p>Comments can appear anywhere whitespace can occur, including inside expressions and in the middle of other SQL statements.
+<i>(source: <a href="lang_comment.html">lang_comment.html</a>, checked-by: th3/req1/comment01.test, matrix: <a href='matrix/lang_comment.html#R-62338-03151-32833-50529-63145-58374-11729-12446'>context</a>, <a href='matrix/matrix_dlang_comment.html#R-62338-03151-32833-50529-63145-58374-11729-12446'>detail</a>)</i></p></dd>
+
+<dt><b>R-62380-26708-45604-24232-06189-26790-29124-54464</b></dt>
+<dd><p>For any given query, the fact that the OR-clause optimization described here can be used does not guarantee that it will be used.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-62380-26708-45604-24232-06189-26790-29124-54464'>context</a>, <a href='matrix/matrix_doptoverview.html#R-62380-26708-45604-24232-06189-26790-29124-54464'>detail</a>)</i></p></dd>
+
+<dt><b>R-62393-40130-05816-02301-40673-52787-58252-12713</b></dt>
+<dd><p>Each keyword in (BETWEEN IN GLOB LIKE MATCH REGEXP) may be prefixed &nbsp;&nbsp;by NOT, retaining the bare operator's precedence and associativity.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-62393-40130-05816-02301-40673-52787-58252-12713'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-62393-40130-05816-02301-40673-52787-58252-12713'>detail</a>)</i></p></dd>
+
+<dt><b>R-62406-19374-15611-19215-61037-24367-51028-27326</b></dt>
+<dd><p>The SQLITE_OPEN_DELETEONCLOSE will be set for TEMP databases and their journals, transient databases, and subjournals.
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-62406-19374-15611-19215-61037-24367-51028-27326'>context</a>, <a href='matrix/matrix_dvfs.html#R-62406-19374-15611-19215-61037-24367-51028-27326'>detail</a>)</i></p></dd>
+
+<dt><b>R-62434-33746-54785-17605-60783-47230-32024-49540</b></dt>
+<dd><p>Thus, if the database includes AFTER triggers that modifies some of the values of each row inserted or updated, the RETURNING clause emits the original values that are computed before those triggers run.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-62434-33746-54785-17605-60783-47230-32024-49540'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-62434-33746-54785-17605-60783-47230-32024-49540'>detail</a>)</i></p></dd>
+
+<dt><b>R-62450-40032-48633-16143-21492-49055-31149-65125</b></dt>
+<dd><p>The sqlite3_result_error_toobig() interface causes SQLite to throw an error indicating that a string or BLOB is too long to represent.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-62450-40032-48633-16143-21492-49055-31149-65125'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-62450-40032-48633-16143-21492-49055-31149-65125'>detail</a>)</i></p></dd>
+
+<dt><b>R-62469-05091-48869-23817-54734-43619-45624-64340</b></dt>
+<dd><p>New SQL statements that are started after the running statement count reaches zero are not effected by the sqlite3_interrupt().
+<i>(source: <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>, matrix: <a href='matrix/c3ref/interrupt.html#R-62469-05091-48869-23817-54734-43619-45624-64340'>context</a>, <a href='matrix/matrix_dinterrupt.html#R-62469-05091-48869-23817-54734-43619-45624-64340'>detail</a>)</i></p></dd>
+
+<dt><b>R-62477-06476-47005-06861-24657-48512-17530-06708</b></dt>
+<dd><p>For example, the values NULL, 0.0, 0, 'english' and '0' are all considered to be false.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-62477-06476-47005-06861-24657-48512-17530-06708'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-62477-06476-47005-06861-24657-48512-17530-06708'>detail</a>)</i></p></dd>
+
+<dt><b>R-62529-02872-42080-52891-13443-54286-42392-42073</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.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, matrix: <a href='matrix/lang_corefunc.html#R-62529-02872-42080-52891-13443-54286-42392-42073'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-62529-02872-42080-52891-13443-54286-42392-42073'>detail</a>)</i></p></dd>
+
+<dt><b>R-62557-09390-19199-07054-57696-39577-58389-44787</b></dt>
+<dd><p>SQLite uses the path component of the URI as the name of the disk file which contains the database.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-62557-09390-19199-07054-57696-39577-58389-44787'>context</a>, <a href='matrix/matrix_dopen.html#R-62557-09390-19199-07054-57696-39577-58389-44787'>detail</a>)</i></p></dd>
+
+<dt><b>R-62598-50665-64934-51801-32415-41213-44232-38622</b></dt>
+<dd><p>If an error occurs while running sqlite3_backup_step(B,N), then an error code is returned.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/cov1/backup01.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-62598-50665-64934-51801-32415-41213-44232-38622'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-62598-50665-64934-51801-32415-41213-44232-38622'>detail</a>)</i></p></dd>
+
+<dt><b>R-62610-51329-57761-33466-25437-21860-03475-27712</b></dt>
+<dd><p>A dollar-sign followed by an identifier name also holds a spot for a named parameter with the name $AAAA.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-62610-51329-57761-33466-25437-21860-03475-27712'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-62610-51329-57761-33466-25437-21860-03475-27712'>detail</a>)</i></p></dd>
+
+<dt><b>R-62671-45936-15699-15939-47274-39312-22685-45097</b></dt>
+<dd><p>Coincidentally, that same index is useful for locating the team leader of a particular team: SELECT person_id FROM person WHERE is_team_leader AND team_id=?1;
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-62671-45936-15699-15939-47274-39312-22685-45097'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-62671-45936-15699-15939-47274-39312-22685-45097'>detail</a>)</i></p></dd>
+
+<dt><b>R-62702-40333-38179-40885-41988-22128-55744-38762</b></dt>
+<dd><p>If for some reason, sqlite3_initialize() is unable to initialize the library (perhaps it is unable to allocate a needed resource such as a mutex) it returns an error code other than SQLITE_OK.
+<i>(source: <a href="c3ref/initialize.html">c3ref/initialize.html</a>, matrix: <a href='matrix/c3ref/initialize.html#R-62702-40333-38179-40885-41988-22128-55744-38762'>context</a>, <a href='matrix/matrix_dinitialize.html#R-62702-40333-38179-40885-41988-22128-55744-38762'>detail</a>)</i></p></dd>
+
+<dt><b>R-62740-39384-05078-12157-18759-37018-24032-16854</b></dt>
+<dd><p>To change from "full" or "incremental" back to "none" always requires running VACUUM even on an empty database.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-62740-39384-05078-12157-18759-37018-24032-16854'>context</a>, <a href='matrix/matrix_dpragma.html#R-62740-39384-05078-12157-18759-37018-24032-16854'>detail</a>)</i></p></dd>
+
+<dt><b>R-62773-63407-48411-60588-32030-64322-40065-55617</b></dt>
+<dd><p>time(time-value, modifier, modifier, ...)
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-62773-63407-48411-60588-32030-64322-40065-55617'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-62773-63407-48411-60588-32030-64322-40065-55617'>detail</a>)</i></p></dd>
+
+<dt><b>R-62782-27113-42237-60058-30893-13916-02478-23717</b></dt>
+<dd><p>The module name is registered on the database connection specified by the first parameter.
+<i>(source: <a href="c3ref/create_module.html">c3ref/create_module.html</a>, matrix: <a href='matrix/c3ref/create_module.html#R-62782-27113-42237-60058-30893-13916-02478-23717'>context</a>, <a href='matrix/matrix_dcreate_module.html#R-62782-27113-42237-60058-30893-13916-02478-23717'>detail</a>)</i></p></dd>
+
+<dt><b>R-62787-27093-28776-07696-30673-33201-48142-02108</b></dt>
+<dd><p>The new journal mode is returned.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma23.test, matrix: <a href='matrix/pragma.html#R-62787-27093-28776-07696-30673-33201-48142-02108'>context</a>, <a href='matrix/matrix_dpragma.html#R-62787-27093-28776-07696-30673-33201-48142-02108'>detail</a>)</i></p></dd>
+
+<dt><b>R-62792-33996-11773-03176-05046-17928-37966-25264</b></dt>
+<dd><p>Note that "&plusmn;NNN months" works by rendering the original date into the YYYY-MM-DD format, adding the &plusmn;NNN to the MM month value, then normalizing the result.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-62792-33996-11773-03176-05046-17928-37966-25264'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-62792-33996-11773-03176-05046-17928-37966-25264'>detail</a>)</i></p></dd>
+
+<dt><b>R-62800-43436-06493-51425-45940-03173-57151-39282</b></dt>
+<dd><p>That there are the same number of entries in the %_parent table as there are non-leaf cells in the r-tree structure, and that there is a non-leaf cell that corresponds to each entry in the %_parent table.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-62800-43436-06493-51425-45940-03173-57151-39282'>context</a>, <a href='matrix/matrix_drtree.html#R-62800-43436-06493-51425-45940-03173-57151-39282'>detail</a>)</i></p></dd>
+
+<dt><b>R-62804-28221-24652-30727-46370-42129-23035-01106</b></dt>
+<dd><p>The "legacy" schema format (1) ignores index sort order.
+<i>(source: <a href="lang_createindex.html">lang_createindex.html</a>, checked-by: th3/req1/createidx02.test, matrix: <a href='matrix/lang_createindex.html#R-62804-28221-24652-30727-46370-42129-23035-01106'>context</a>, <a href='matrix/matrix_dlang_createindex.html#R-62804-28221-24652-30727-46370-42129-23035-01106'>detail</a>)</i></p></dd>
+
+<dt><b>R-62839-07969-20835-12393-10949-34728-00422-57830</b></dt>
+<dd><p>The fourth column is the index of the specific foreign key constraint that failed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/fkey5.test, th3/cov1/fkey23.test, matrix: <a href='matrix/pragma.html#R-62839-07969-20835-12393-10949-34728-00422-57830'>context</a>, <a href='matrix/matrix_dpragma.html#R-62839-07969-20835-12393-10949-34728-00422-57830'>detail</a>)</i></p></dd>
+
+<dt><b>R-62842-02885-47183-08530-16131-50819-34642-24055</b></dt>
+<dd><p>In a CREATE TABLE statement, if the "STRICT" table-option keyword is added to the end, after the closing ")", then strict typing rules apply to that table.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-62842-02885-47183-08530-16131-50819-34642-24055'>context</a>, <a href='matrix/matrix_dstricttables.html#R-62842-02885-47183-08530-16131-50819-34642-24055'>detail</a>)</i></p></dd>
+
+<dt><b>R-62860-04741-41366-30406-60752-17856-14374-30516</b></dt>
+<dd><p>If the blocked connection is attempting to obtain a write-lock on a shared-cache table, and more than one other connection currently holds a read-lock on the same table, then SQLite arbitrarily selects one of the other connections to use as the blocking connection.
+<i>(source: <a href="c3ref/unlock_notify.html">c3ref/unlock_notify.html</a>, matrix: <a href='matrix/c3ref/unlock_notify.html#R-62860-04741-41366-30406-60752-17856-14374-30516'>context</a>, <a href='matrix/matrix_dunlock_notify.html#R-62860-04741-41366-30406-60752-17856-14374-30516'>detail</a>)</i></p></dd>
+
+<dt><b>R-62898-22698-26165-43256-00813-48770-03104-06155</b></dt>
+<dd><p>This function is used to write data into an open BLOB handle from a caller-supplied buffer. N bytes of data are copied from the buffer Z into the open BLOB, starting at offset iOffset.
+<i>(source: <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>, checked-by: tcl/e_blobwrite.test, matrix: <a href='matrix/c3ref/blob_write.html#R-62898-22698-26165-43256-00813-48770-03104-06155'>context</a>, <a href='matrix/matrix_dblob_write.html#R-62898-22698-26165-43256-00813-48770-03104-06155'>detail</a>)</i></p></dd>
+
+<dt><b>R-62902-41226-55424-31114-14414-20606-40238-02650</b></dt>
+<dd><p>In an UPDATE FROM statement, the auxiliary tables named in the FROM clause may not participate in the RETURNING clause.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, matrix: <a href='matrix/lang_returning.html#R-62902-41226-55424-31114-14414-20606-40238-02650'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-62902-41226-55424-31114-14414-20606-40238-02650'>detail</a>)</i></p></dd>
+
+<dt><b>R-62913-19830-16030-42655-41174-29116-40982-36331</b></dt>
+<dd><p>Otherwise, it is evaluated against a single arbitrarily chosen row from within the group.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-62913-19830-16030-42655-41174-29116-40982-36331'>context</a>, <a href='matrix/matrix_dlang_select.html#R-62913-19830-16030-42655-41174-29116-40982-36331'>detail</a>)</i></p></dd>
+
+<dt><b>R-62920-36411-37604-08296-13654-34819-36636-51244</b></dt>
+<dd><p>The sqlite3_stmt_busy(S) interface returns true (non-zero) if the prepared statement S has been stepped at least once using sqlite3_step(S) but has neither run to completion (returned SQLITE_DONE from sqlite3_step(S)) nor been reset using sqlite3_reset(S).
+<i>(source: <a href="c3ref/stmt_busy.html">c3ref/stmt_busy.html</a>, checked-by: th3/cov1/vdbeapi03.test, matrix: <a href='matrix/c3ref/stmt_busy.html#R-62920-36411-37604-08296-13654-34819-36636-51244'>context</a>, <a href='matrix/matrix_dstmt_busy.html#R-62920-36411-37604-08296-13654-34819-36636-51244'>detail</a>)</i></p></dd>
+
+<dt><b>R-62920-47450-51194-26975-01851-13117-37430-41623</b></dt>
+<dd><p>The busy-handler callback is never invoked in the SQLITE_CHECKPOINT_PASSIVE mode.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: src/wal.c, tcl/e_walckpt.test, th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-62920-47450-51194-26975-01851-13117-37430-41623'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-62920-47450-51194-26975-01851-13117-37430-41623'>detail</a>)</i></p></dd>
+
+<dt><b>R-62953-16283-60973-36600-59526-31076-28505-32788</b></dt>
+<dd><p>The sqlite3_result_error() and sqlite3_result_error16() functions cause the implemented SQL function to throw an exception.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result01.test, matrix: <a href='matrix/c3ref/result_blob.html#R-62953-16283-60973-36600-59526-31076-28505-32788'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-62953-16283-60973-36600-59526-31076-28505-32788'>detail</a>)</i></p></dd>
+
+<dt><b>R-62978-45795-36249-12857-49090-15958-00681-53876</b></dt>
+<dd><p>SQLITE_OPEN_SHAREDCACHE The database is opened shared cache enabled, overriding the default shared cache setting provided by sqlite3_enable_shared_cache().
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, matrix: <a href='matrix/c3ref/open.html#R-62978-45795-36249-12857-49090-15958-00681-53876'>context</a>, <a href='matrix/matrix_dopen.html#R-62978-45795-36249-12857-49090-15958-00681-53876'>detail</a>)</i></p></dd>
+
+<dt><b>R-62992-54137-18704-21860-20022-25020-23814-10304</b></dt>
+<dd><p>The unixepoch() always returns an integer, even if the input time-value has millisecond precision.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: tcl/date3.test, th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-62992-54137-18704-21860-20022-25020-23814-10304'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-62992-54137-18704-21860-20022-25020-23814-10304'>detail</a>)</i></p></dd>
+
+<dt><b>R-63005-41812-25626-08915-56924-18701-34240-17116</b></dt>
+<dd><p>The integer values returned by two invocations of "PRAGMA data_version" from the same connection will be different if changes were committed to the database by any other connection in the interim.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma3.test, th3/cov1/pragma26.test, matrix: <a href='matrix/pragma.html#R-63005-41812-25626-08915-56924-18701-34240-17116'>context</a>, <a href='matrix/matrix_dpragma.html#R-63005-41812-25626-08915-56924-18701-34240-17116'>detail</a>)</i></p></dd>
+
+<dt><b>R-63007-00158-07444-30400-48022-49637-62807-30158</b></dt>
+<dd><p>The object and pointer to it must remain valid until then.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, matrix: <a href='matrix/c3ref/bind_blob.html#R-63007-00158-07444-30400-48022-49637-62807-30158'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-63007-00158-07444-30400-48022-49637-62807-30158'>detail</a>)</i></p></dd>
+
+<dt><b>R-63043-31985-03147-25743-35105-56824-27105-53861</b></dt>
+<dd><p>A pragma may have an optional schema-name before the pragma name.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma01.test, matrix: <a href='matrix/pragma.html#R-63043-31985-03147-25743-35105-56824-27105-53861'>context</a>, <a href='matrix/matrix_dpragma.html#R-63043-31985-03147-25743-35105-56824-27105-53861'>detail</a>)</i></p></dd>
+
+<dt><b>R-63048-43246-17135-38740-38774-19406-60211-40776</b></dt>
+<dd><p>The number of freelist pages is stored as a 4-byte big-endian integer in the database header at an offset of 36 from the beginning of the file.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-63048-43246-17135-38740-38774-19406-60211-40776'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-63048-43246-17135-38740-38774-19406-60211-40776'>detail</a>)</i></p></dd>
+
+<dt><b>R-63063-00748-16445-34795-46686-39617-28312-04661</b></dt>
+<dd><p>If the declared type for a column contains the string "BLOB" or if no type is specified then the column has affinity BLOB.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-63063-00748-16445-34795-46686-39617-28312-04661'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-63063-00748-16445-34795-46686-39617-28312-04661'>detail</a>)</i></p></dd>
+
+<dt><b>R-63075-15970-39501-22460-58793-43455-08281-02350</b></dt>
+<dd><p>Once the view is created, it can be used in the FROM clause of another SELECT in place of a table name.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, checked-by: th3/req1/view01.test, matrix: <a href='matrix/lang_createview.html#R-63075-15970-39501-22460-58793-43455-08281-02350'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-63075-15970-39501-22460-58793-43455-08281-02350'>detail</a>)</i></p></dd>
+
+<dt><b>R-63084-42258-54235-44279-08664-11821-33988-63457</b></dt>
+<dd><p>Calling sqlite3_blob_bytes() on an aborted blob handle always returns zero.
+<i>(source: <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>, checked-by: th3/req1/blob01.test, matrix: <a href='matrix/c3ref/blob_reopen.html#R-63084-42258-54235-44279-08664-11821-33988-63457'>context</a>, <a href='matrix/matrix_dblob_reopen.html#R-63084-42258-54235-44279-08664-11821-33988-63457'>detail</a>)</i></p></dd>
+
+<dt><b>R-63088-37469-41348-62985-35702-04852-27256-05198</b></dt>
+<dd><p>Tables child6 and child7 are incorrect because while both have UNIQUE indices on their parent keys, the keys are not an exact match to the columns of a single UNIQUE index.
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys07.test, matrix: <a href='matrix/foreignkeys.html#R-63088-37469-41348-62985-35702-04852-27256-05198'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-63088-37469-41348-62985-35702-04852-27256-05198'>detail</a>)</i></p></dd>
+
+<dt><b>R-63107-29542-42038-49029-17221-49854-37760-53513</b></dt>
+<dd><p>The sixth argument to sqlite3_bind_text64() must be one of SQLITE_UTF8, SQLITE_UTF16, SQLITE_UTF16BE, or SQLITE_UTF16LE to specify the encoding of the text in the third parameter.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-63107-29542-42038-49029-17221-49854-37760-53513'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-63107-29542-42038-49029-17221-49854-37760-53513'>detail</a>)</i></p></dd>
+
+<dt><b>R-63112-34944-34179-41157-25567-47419-36770-60612</b></dt>
+<dd><p>If the interface returns true (non-zero), that means that the constraint is an IN operator that can be processed all-at-once.
+<i>(source: <a href="c3ref/vtab_in.html">c3ref/vtab_in.html</a>, matrix: <a href='matrix/c3ref/vtab_in.html#R-63112-34944-34179-41157-25567-47419-36770-60612'>context</a>, <a href='matrix/matrix_dvtab_in.html#R-63112-34944-34179-41157-25567-47419-36770-60612'>detail</a>)</i></p></dd>
+
+<dt><b>R-63119-53774-25938-08953-42086-26261-27933-12483</b></dt>
+<dd><p>New database files created by SQLite use format 4 by default.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: th3/req1/fileformat01.test, matrix: <a href='matrix/fileformat2.html#R-63119-53774-25938-08953-42086-26261-27933-12483'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-63119-53774-25938-08953-42086-26261-27933-12483'>detail</a>)</i></p></dd>
+
+<dt><b>R-63124-28591-54682-33320-59572-27756-28507-16643</b></dt>
+<dd><p>The pragma is like integrity_check except that it does not verify UNIQUE constraints and does not verify that index content matches table content.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-63124-28591-54682-33320-59572-27756-28507-16643'>context</a>, <a href='matrix/matrix_dpragma.html#R-63124-28591-54682-33320-59572-27756-28507-16643'>detail</a>)</i></p></dd>
+
+<dt><b>R-63138-42446-16317-19373-58144-17163-01725-20742</b></dt>
+<dd><p>If none of the arguments to max() define a collating function, then the BINARY collating function is used.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-63138-42446-16317-19373-58144-17163-01725-20742'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-63138-42446-16317-19373-58144-17163-01725-20742'>detail</a>)</i></p></dd>
+
+<dt><b>R-63158-42531-36923-32686-05307-30173-57746-45416</b></dt>
+<dd><p>These APIs are only available if the library was compiled with the SQLITE_ENABLE_COLUMN_METADATA C-preprocessor symbol.
+<i>(source: <a href="c3ref/column_database_name.html">c3ref/column_database_name.html</a>, matrix: <a href='matrix/c3ref/column_database_name.html#R-63158-42531-36923-32686-05307-30173-57746-45416'>context</a>, <a href='matrix/matrix_dcolumn_database_name.html#R-63158-42531-36923-32686-05307-30173-57746-45416'>detail</a>)</i></p></dd>
+
+<dt><b>R-63159-49573-46616-00271-21180-18293-63861-41327</b></dt>
+<dd><p>If no schema name is specified, and the TEMP keyword is not present, the VIEW is created in the main database.
+<i>(source: <a href="lang_createview.html">lang_createview.html</a>, checked-by: th3/req1/view01.test, matrix: <a href='matrix/lang_createview.html#R-63159-49573-46616-00271-21180-18293-63861-41327'>context</a>, <a href='matrix/matrix_dlang_createview.html#R-63159-49573-46616-00271-21180-18293-63861-41327'>detail</a>)</i></p></dd>
+
+<dt><b>R-63167-05205-45599-43338-46949-25227-48175-10749</b></dt>
+<dd><p>A virtual table is destroyed using the ordinary DROP TABLE statement.
+<i>(source: <a href="lang_createvtab.html">lang_createvtab.html</a>, matrix: <a href='matrix/lang_createvtab.html#R-63167-05205-45599-43338-46949-25227-48175-10749'>context</a>, <a href='matrix/matrix_dlang_createvtab.html#R-63167-05205-45599-43338-46949-25227-48175-10749'>detail</a>)</i></p></dd>
+
+<dt><b>R-63234-56981-14437-01927-09804-62801-28815-37860</b></dt>
+<dd><p>A value of -1 means rowid and a value of -2 means that an expression is being used.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-63234-56981-14437-01927-09804-62801-28815-37860'>context</a>, <a href='matrix/matrix_dpragma.html#R-63234-56981-14437-01927-09804-62801-28815-37860'>detail</a>)</i></p></dd>
+
+<dt><b>R-63235-50818-32083-65430-57291-26103-11022-63065</b></dt>
+<dd><p>When the payload of a b-tree cell is too large for the b-tree page, the surplus is spilled onto overflow pages.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-63235-50818-32083-65430-57291-26103-11022-63065'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-63235-50818-32083-65430-57291-26103-11022-63065'>detail</a>)</i></p></dd>
+
+<dt><b>R-63244-23082-15887-51901-20973-26143-20960-26958</b></dt>
+<dd><p>When an expression is a simple reference to a column of a real table (not a VIEW or subquery) then the expression has the same affinity as the table column.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-63244-23082-15887-51901-20973-26143-20960-26958'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-63244-23082-15887-51901-20973-26143-20960-26958'>detail</a>)</i></p></dd>
+
+<dt><b>R-63257-11740-13370-40315-30257-30447-50403-36483</b></dt>
+<dd><p>Calling sqlite3_close() or sqlite3_close_v2() with a NULL pointer argument is a harmless no-op.
+<i>(source: <a href="c3ref/close.html">c3ref/close.html</a>, checked-by: src/main.c, th3/cov1/main23.test, matrix: <a href='matrix/c3ref/close.html#R-63257-11740-13370-40315-30257-30447-50403-36483'>context</a>, <a href='matrix/matrix_dclose.html#R-63257-11740-13370-40315-30257-30447-50403-36483'>detail</a>)</i></p></dd>
+
+<dt><b>R-63260-45699-31431-11817-19083-14661-24808-60223</b></dt>
+<dd><p>The default encoding will be UTF-8 for databases created using sqlite3_open() or sqlite3_open_v2().
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: th3/cov1/main12.test, matrix: <a href='matrix/c3ref/open.html#R-63260-45699-31431-11817-19083-14661-24808-60223'>context</a>, <a href='matrix/matrix_dopen.html#R-63260-45699-31431-11817-19083-14661-24808-60223'>detail</a>)</i></p></dd>
+
+<dt><b>R-63285-37134-15488-58217-13163-52553-20689-06808</b></dt>
+<dd><p>In the SQL statement text input to sqlite3_prepare_v2() and its variants, literals may be replaced by a parameter that matches one of following templates: ? ?NNN :VVV @VVV $VVV In the templates above, NNN represents an integer literal, and VVV represents an alphanumeric identifier.
+<i>(source: <a href="c3ref/bind_blob.html">c3ref/bind_blob.html</a>, checked-by: th3/req1/bind01.test, matrix: <a href='matrix/c3ref/bind_blob.html#R-63285-37134-15488-58217-13163-52553-20689-06808'>context</a>, <a href='matrix/matrix_dbind_blob.html#R-63285-37134-15488-58217-13163-52553-20689-06808'>detail</a>)</i></p></dd>
+
+<dt><b>R-63286-51977-31491-11604-12483-48115-04561-38158</b></dt>
+<dd><p>If the ORDER BY expression is an identifier that corresponds to the alias of one of the output columns, then the expression is considered an alias for that column.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-63286-51977-31491-11604-12483-48115-04561-38158'>context</a>, <a href='matrix/matrix_dlang_select.html#R-63286-51977-31491-11604-12483-48115-04561-38158'>detail</a>)</i></p></dd>
+
+<dt><b>R-63294-00538-51136-33751-00245-32067-21028-12625</b></dt>
+<dd><p>When all collating functions having the same name are deleted, that collation is no longer usable.
+<i>(source: <a href="c3ref/create_collation.html">c3ref/create_collation.html</a>, checked-by: th3/req1/createcoll01.test, matrix: <a href='matrix/c3ref/create_collation.html#R-63294-00538-51136-33751-00245-32067-21028-12625'>context</a>, <a href='matrix/matrix_dcreate_collation.html#R-63294-00538-51136-33751-00245-32067-21028-12625'>detail</a>)</i></p></dd>
+
+<dt><b>R-63299-18573-32017-29403-14917-35510-40700-49799</b></dt>
+<dd><p>The values emitted by the RETURNING clause are the values as seen by the top-level DELETE, INSERT, or UPDATE statement and do not reflect any subsequent value changes made by triggers.
+<i>(source: <a href="lang_returning.html">lang_returning.html</a>, checked-by: th3/cov1/returning01.test, matrix: <a href='matrix/lang_returning.html#R-63299-18573-32017-29403-14917-35510-40700-49799'>context</a>, <a href='matrix/matrix_dlang_returning.html#R-63299-18573-32017-29403-14917-35510-40700-49799'>detail</a>)</i></p></dd>
+
+<dt><b>R-63304-47938-37544-24083-32523-59339-12063-04475</b></dt>
+<dd><p>Applications may change the content of the string returned by sqlite3_str_value(X) as long as they do not write into any bytes outside the range of 0 to sqlite3_str_length(X) and do not read or write any byte after any subsequent sqlite3_str method call.
+<i>(source: <a href="c3ref/str_errcode.html">c3ref/str_errcode.html</a>, matrix: <a href='matrix/c3ref/str_errcode.html#R-63304-47938-37544-24083-32523-59339-12063-04475'>context</a>, <a href='matrix/matrix_dstr_errcode.html#R-63304-47938-37544-24083-32523-59339-12063-04475'>detail</a>)</i></p></dd>
+
+<dt><b>R-63325-48378-49771-42071-13733-04560-14136-48632</b></dt>
+<dd><p>The SQLITE_CONFIG_PCACHE2 option takes a single argument which is a pointer to an sqlite3_pcache_methods2 object. This object specifies the interface to a custom page cache implementation.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3pcache.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-63325-48378-49771-42071-13733-04560-14136-48632'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-63325-48378-49771-42071-13733-04560-14136-48632'>detail</a>)</i></p></dd>
+
+<dt><b>R-63341-57517-64693-29591-34989-59774-15075-48148</b></dt>
+<dd><p>If the BLOB handle passed as the first argument was not opened for writing (the flags parameter to sqlite3_blob_open() was zero), this function returns SQLITE_READONLY.
+<i>(source: <a href="c3ref/blob_write.html">c3ref/blob_write.html</a>, checked-by: tcl/e_blobwrite.test, matrix: <a href='matrix/c3ref/blob_write.html#R-63341-57517-64693-29591-34989-59774-15075-48148'>context</a>, <a href='matrix/matrix_dblob_write.html#R-63341-57517-64693-29591-34989-59774-15075-48148'>detail</a>)</i></p></dd>
+
+<dt><b>R-63404-48526-63691-02356-01054-10642-53789-36126</b></dt>
+<dd><p>The P argument is a pointer to the prepared statement and the X argument is unused.
+<i>(source: <a href="c3ref/c_trace.html">c3ref/c_trace.html</a>, checked-by: th3/cov1/trace01.test, matrix: <a href='matrix/c3ref/c_trace.html#R-63404-48526-63691-02356-01054-10642-53789-36126'>context</a>, <a href='matrix/matrix_dc_trace.html#R-63404-48526-63691-02356-01054-10642-53789-36126'>detail</a>)</i></p></dd>
+
+<dt><b>R-63408-55464-37825-38820-53279-17116-24066-22476</b></dt>
+<dd><p>All subsequent calls to sqlite3_blob_read(), sqlite3_blob_write() or sqlite3_blob_reopen() on an aborted blob handle immediately return SQLITE_ABORT.
+<i>(source: <a href="c3ref/blob_reopen.html">c3ref/blob_reopen.html</a>, checked-by: th3/req1/blob01.test, matrix: <a href='matrix/c3ref/blob_reopen.html#R-63408-55464-37825-38820-53279-17116-24066-22476'>context</a>, <a href='matrix/matrix_dblob_reopen.html#R-63408-55464-37825-38820-53279-17116-24066-22476'>detail</a>)</i></p></dd>
+
+<dt><b>R-63421-15521-37250-06535-51349-22995-65191-63992</b></dt>
+<dd><p>This means that, provided the API is not misused, it is always safe to call sqlite3_blob_close() on *ppBlob after this function it returns.
+<i>(source: <a href="c3ref/blob_open.html">c3ref/blob_open.html</a>, checked-by: tcl/e_blobopen.test, matrix: <a href='matrix/c3ref/blob_open.html#R-63421-15521-37250-06535-51349-22995-65191-63992'>context</a>, <a href='matrix/matrix_dblob_open.html#R-63421-15521-37250-06535-51349-22995-65191-63992'>detail</a>)</i></p></dd>
+
+<dt><b>R-63435-12225-33829-37402-17211-27130-05815-22642</b></dt>
+<dd><p>The sqlite3_get_autocommit() interface returns non-zero or zero if the given database connection is or is not in autocommit mode, respectively.
+<i>(source: <a href="c3ref/get_autocommit.html">c3ref/get_autocommit.html</a>, matrix: <a href='matrix/c3ref/get_autocommit.html#R-63435-12225-33829-37402-17211-27130-05815-22642'>context</a>, <a href='matrix/matrix_dget_autocommit.html#R-63435-12225-33829-37402-17211-27130-05815-22642'>detail</a>)</i></p></dd>
+
+<dt><b>R-63443-09418-01239-16017-27553-21198-10588-27536</b></dt>
+<dd><p>Every WITHOUT ROWID table must have a PRIMARY KEY.
+<i>(source: <a href="withoutrowid.html">withoutrowid.html</a>, checked-by: tcl/without_rowid5.test, th3/cov1/withoutrowid01.test, matrix: <a href='matrix/withoutrowid.html#R-63443-09418-01239-16017-27553-21198-10588-27536'>context</a>, <a href='matrix/matrix_dwithoutrowid.html#R-63443-09418-01239-16017-27553-21198-10588-27536'>detail</a>)</i></p></dd>
+
+<dt><b>R-63464-64949-61376-49766-27105-42623-27880-27478</b></dt>
+<dd><p>If an application uses more than one database connection then application-defined SQL functions must be added to each database connection separately.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc01.test, matrix: <a href='matrix/c3ref/create_function.html#R-63464-64949-61376-49766-27105-42623-27880-27478'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-63464-64949-61376-49766-27105-42623-27880-27478'>detail</a>)</i></p></dd>
+
+<dt><b>R-63472-46769-27275-37406-54575-06040-42542-11572</b></dt>
+<dd><p>Specifying an unknown parameter in the query component of a URI is not an error.
+<i>(source: <a href="c3ref/open.html">c3ref/open.html</a>, checked-by: tcl/e_uri.test, matrix: <a href='matrix/c3ref/open.html#R-63472-46769-27275-37406-54575-06040-42542-11572'>context</a>, <a href='matrix/matrix_dopen.html#R-63472-46769-27275-37406-54575-06040-42542-11572'>detail</a>)</i></p></dd>
+
+<dt><b>R-63516-50117-63411-46910-42078-47460-16575-25841</b></dt>
+<dd><p>When SQLite compares two strings, it uses a collating sequence or collating function (two terms for the same thing) to determine which string is greater or if the two strings are equal.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_09.test, matrix: <a href='matrix/datatype3.html#R-63516-50117-63411-46910-42078-47460-16575-25841'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-63516-50117-63411-46910-42078-47460-16575-25841'>detail</a>)</i></p></dd>
+
+<dt><b>R-63519-36751-50402-28921-52304-51801-25208-52249</b></dt>
+<dd><p>The load_extension(X,Y) function loads SQLite extensions out of the shared library file named X using the entry point Y.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-63519-36751-50402-28921-52304-51801-25208-52249'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-63519-36751-50402-28921-52304-51801-25208-52249'>detail</a>)</i></p></dd>
+
+<dt><b>R-63522-46088-33895-54497-03733-53184-07098-33228</b></dt>
+<dd><p>The only way to change out of EXCLUSIVE locking mode is to first change out of WAL journal mode.
+<i>(source: <a href="wal.html">wal.html</a>, checked-by: tcl/e_wal.test, th3/req1/pragma05.test, matrix: <a href='matrix/wal.html#R-63522-46088-33895-54497-03733-53184-07098-33228'>context</a>, <a href='matrix/matrix_dwal.html#R-63522-46088-33895-54497-03733-53184-07098-33228'>detail</a>)</i></p></dd>
+
+<dt><b>R-63549-59887-30432-35575-09108-37055-29466-09817</b></dt>
+<dd><p>PRAGMA cache_spill; PRAGMA cache_spill=boolean; PRAGMA schema.cache_spill=N;
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma2.test, matrix: <a href='matrix/pragma.html#R-63549-59887-30432-35575-09108-37055-29466-09817'>context</a>, <a href='matrix/matrix_dpragma.html#R-63549-59887-30432-35575-09108-37055-29466-09817'>detail</a>)</i></p></dd>
+
+<dt><b>R-63565-54156-07796-04437-54657-38631-57442-48844</b></dt>
+<dd><p>The sqlite3_str_append(X,S,N) method appends exactly N bytes from string S onto the end of the sqlite3_str object X.
+<i>(source: <a href="c3ref/str_append.html">c3ref/str_append.html</a>, matrix: <a href='matrix/c3ref/str_append.html#R-63565-54156-07796-04437-54657-38631-57442-48844'>context</a>, <a href='matrix/matrix_dstr_append.html#R-63565-54156-07796-04437-54657-38631-57442-48844'>detail</a>)</i></p></dd>
+
+<dt><b>R-63573-50730-47689-26625-21808-11120-05729-38640</b></dt>
+<dd><p>The expressions in a GROUP BY clause may not be aggregate expressions.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-63573-50730-47689-26625-21808-11120-05729-38640'>context</a>, <a href='matrix/matrix_dlang_select.html#R-63573-50730-47689-26625-21808-11120-05729-38640'>detail</a>)</i></p></dd>
+
+<dt><b>R-63582-45120-10136-38887-13737-27800-47314-58816</b></dt>
+<dd><p>A negative value is interpreted as "no limit".
+<i>(source: <a href="lang_update.html">lang_update.html</a>, checked-by: tcl/e_update.test, matrix: <a href='matrix/lang_update.html#R-63582-45120-10136-38887-13737-27800-47314-58816'>context</a>, <a href='matrix/matrix_dlang_update.html#R-63582-45120-10136-38887-13737-27800-47314-58816'>detail</a>)</i></p></dd>
+
+<dt><b>R-63614-47421-34077-31697-65388-09052-31073-41571</b></dt>
+<dd><p>If a column-list is specified, the number of columns in the result of the SELECT must be the same as the number of items in the column-list.
+<i>(source: <a href="lang_insert.html">lang_insert.html</a>, checked-by: tcl/e_insert.test, matrix: <a href='matrix/lang_insert.html#R-63614-47421-34077-31697-65388-09052-31073-41571'>context</a>, <a href='matrix/matrix_dlang_insert.html#R-63614-47421-34077-31697-65388-09052-31073-41571'>detail</a>)</i></p></dd>
+
+<dt><b>R-63656-25792-13227-10920-63493-08567-09592-14766</b></dt>
+<dd><p>The sqlite3_db_handle interface returns the database connection handle to which a prepared statement belongs.
+<i>(source: <a href="c3ref/db_handle.html">c3ref/db_handle.html</a>, checked-by: th3/req1/dbhandle01.test, matrix: <a href='matrix/c3ref/db_handle.html#R-63656-25792-13227-10920-63493-08567-09592-14766'>context</a>, <a href='matrix/matrix_ddb_handle.html#R-63656-25792-13227-10920-63493-08567-09592-14766'>detail</a>)</i></p></dd>
+
+<dt><b>R-63660-13730-40361-36600-49819-61310-05389-38402</b></dt>
+<dd><p>OLD and NEW references may only be used in triggers on events for which they are relevant, as follows: INSERT NEW references are valid UPDATE NEW and OLD references are valid DELETE OLD references are valid
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-63660-13730-40361-36600-49819-61310-05389-38402'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-63660-13730-40361-36600-49819-61310-05389-38402'>detail</a>)</i></p></dd>
+
+<dt><b>R-63666-48755-16443-16891-11864-30751-29625-02647</b></dt>
+<dd><p>If SQLite is compiled with the SQLITE_THREADSAFE=0 compile-time option then the entire mutexing subsystem is omitted from the build and hence calls to sqlite3_config() with the SQLITE_CONFIG_MUTEX configuration option will return SQLITE_ERROR.
+<i>(source: <a href="c3ref/c_config_covering_index_scan.html">c3ref/c_config_covering_index_scan.html</a>, checked-by: src/main.c, th3/th3main.c, matrix: <a href='matrix/c3ref/c_config_covering_index_scan.html#R-63666-48755-16443-16891-11864-30751-29625-02647'>context</a>, <a href='matrix/matrix_dc_config_covering_index_scan.html#R-63666-48755-16443-16891-11864-30751-29625-02647'>detail</a>)</i></p></dd>
+
+<dt><b>R-63672-25227-17465-07864-20680-40543-20473-50716</b></dt>
+<dd><p>The outputs s0 and s1 are both weighted checksums using Fibonacci weights in reverse order.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-63672-25227-17465-07864-20680-40543-20473-50716'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-63672-25227-17465-07864-20680-40543-20473-50716'>detail</a>)</i></p></dd>
+
+<dt><b>R-63674-39978-56596-19929-61687-32380-54180-59144</b></dt>
+<dd><p>A call to sqlite3_backup_init() will fail, returning NULL, if there is already a read or read-write transaction open on the destination database.
+<i>(source: <a href="c3ref/backup_finish.html">c3ref/backup_finish.html</a>, checked-by: th3/cov1/backup01.test, matrix: <a href='matrix/c3ref/backup_finish.html#R-63674-39978-56596-19929-61687-32380-54180-59144'>context</a>, <a href='matrix/matrix_dbackup_finish.html#R-63674-39978-56596-19929-61687-32380-54180-59144'>detail</a>)</i></p></dd>
+
+<dt><b>R-63684-00056-12744-41513-44383-51179-47104-18458</b></dt>
+<dd><p>If there are fewer than N pages on the freelist, or if N is less than 1, or if the "(N)" argument is omitted, then the entire freelist is cleared.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma21.test, matrix: <a href='matrix/pragma.html#R-63684-00056-12744-41513-44383-51179-47104-18458'>context</a>, <a href='matrix/matrix_dpragma.html#R-63684-00056-12744-41513-44383-51179-47104-18458'>detail</a>)</i></p></dd>
+
+<dt><b>R-63697-19365-62485-52298-29987-32888-31412-50224</b></dt>
+<dd><p>Calls to sqlite3_db_config() return SQLITE_OK if and only if the call is considered successful.
+<i>(source: <a href="c3ref/db_config.html">c3ref/db_config.html</a>, checked-by: th3/req1/dbconfig01.test, matrix: <a href='matrix/c3ref/db_config.html#R-63697-19365-62485-52298-29987-32888-31412-50224'>context</a>, <a href='matrix/matrix_ddb_config.html#R-63697-19365-62485-52298-29987-32888-31412-50224'>detail</a>)</i></p></dd>
+
+<dt><b>R-63721-11986-01337-51273-44360-30402-45045-08949</b></dt>
+<dd><p>With the "v2" interface, any of the other result codes or extended result codes might be returned as well.
+<i>(source: <a href="c3ref/step.html">c3ref/step.html</a>, matrix: <a href='matrix/c3ref/step.html#R-63721-11986-01337-51273-44360-30402-45045-08949'>context</a>, <a href='matrix/matrix_dstep.html#R-63721-11986-01337-51273-44360-30402-45045-08949'>detail</a>)</i></p></dd>
+
+<dt><b>R-63725-33821-44537-37255-59793-46389-19158-48724</b></dt>
+<dd><p>Compute the date of the first Tuesday in October for the current year. SELECT date('now','start of year','+9 months','weekday 2');
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-63725-33821-44537-37255-59793-46389-19158-48724'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-63725-33821-44537-37255-59793-46389-19158-48724'>detail</a>)</i></p></dd>
+
+<dt><b>R-63742-65009-14401-02244-32779-40518-14763-45993</b></dt>
+<dd><p>The LIKE optimization is not attempted if the right-hand side is a parameter and the statement was prepared using sqlite3_prepare() or sqlite3_prepare16().
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-63742-65009-14401-02244-32779-40518-14763-45993'>context</a>, <a href='matrix/matrix_doptoverview.html#R-63742-65009-14401-02244-32779-40518-14763-45993'>detail</a>)</i></p></dd>
+
+<dt><b>R-63748-42498-08000-42048-14533-30815-48804-51551</b></dt>
+<dd><p>The sqlite3_shutdown() routine deallocates any resources that were allocated by sqlite3_initialize().
+<i>(source: <a href="c3ref/initialize.html">c3ref/initialize.html</a>, matrix: <a href='matrix/c3ref/initialize.html#R-63748-42498-08000-42048-14533-30815-48804-51551'>context</a>, <a href='matrix/matrix_dinitialize.html#R-63748-42498-08000-42048-14533-30815-48804-51551'>detail</a>)</i></p></dd>
+
+<dt><b>R-63806-59621-53713-38948-48550-43673-56726-15716</b></dt>
+<dd><p>If the resetFlg is true, then the highest instantaneous value is reset back down to the current value.
+<i>(source: <a href="c3ref/db_status.html">c3ref/db_status.html</a>, checked-by: th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/db_status.html#R-63806-59621-53713-38948-48550-43673-56726-15716'>context</a>, <a href='matrix/matrix_ddb_status.html#R-63806-59621-53713-38948-48550-43673-56726-15716'>detail</a>)</i></p></dd>
+
+<dt><b>R-63822-07193-39399-57145-23201-47133-55148-33056</b></dt>
+<dd><p>If the column-name parameter to sqlite3_table_column_metadata() is a NULL pointer, then this routine simply checks for the existence of the table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it does not.
+<i>(source: <a href="c3ref/table_column_metadata.html">c3ref/table_column_metadata.html</a>, checked-by: th3/cov1/metadata01.test, matrix: <a href='matrix/c3ref/table_column_metadata.html#R-63822-07193-39399-57145-23201-47133-55148-33056'>context</a>, <a href='matrix/matrix_dtable_column_metadata.html#R-63822-07193-39399-57145-23201-47133-55148-33056'>detail</a>)</i></p></dd>
+
+<dt><b>R-63827-07147-50106-23079-54369-23240-21585-39525</b></dt>
+<dd><p>To read a page from the database (call it page number P), a reader first checks the WAL to see if it contains page P. If so, then the last valid instance of page P that is followed by a commit frame or is a commit frame itself becomes the value read.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-63827-07147-50106-23079-54369-23240-21585-39525'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-63827-07147-50106-23079-54369-23240-21585-39525'>detail</a>)</i></p></dd>
+
+<dt><b>R-63827-58581-51732-64119-62268-23504-01315-64410</b></dt>
+<dd><p>Generated columns can participate in indexes, just like ordinary columns.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-63827-58581-51732-64119-62268-23504-01315-64410'>context</a>, <a href='matrix/matrix_dgencol.html#R-63827-58581-51732-64119-62268-23504-01315-64410'>detail</a>)</i></p></dd>
+
+<dt><b>R-63829-15770-44431-02464-62673-04541-39910-55910</b></dt>
+<dd><p>||&nbsp;&nbsp;&nbsp;->&nbsp;&nbsp;&nbsp;->>
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, matrix: <a href='matrix/lang_expr.html#R-63829-15770-44431-02464-62673-04541-39910-55910'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-63829-15770-44431-02464-62673-04541-39910-55910'>detail</a>)</i></p></dd>
+
+<dt><b>R-63860-02697-07339-29588-22030-08918-47419-18368</b></dt>
+<dd><p>On second and subsequent calls to sqlite3_aggregate_context() for the same aggregate function instance, the same buffer is returned.
+<i>(source: <a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a>, checked-by: th3/req1/aggcntx01.test, matrix: <a href='matrix/c3ref/aggregate_context.html#R-63860-02697-07339-29588-22030-08918-47419-18368'>context</a>, <a href='matrix/matrix_daggregate_context.html#R-63860-02697-07339-29588-22030-08918-47419-18368'>detail</a>)</i></p></dd>
+
+<dt><b>R-63920-18609-57046-60110-46900-57278-33644-19241</b></dt>
+<dd><p>If there is no attached database N on the database connection D, or if database N is a temporary or in-memory database, then this function will return either a NULL pointer or an empty string.
+<i>(source: <a href="c3ref/db_filename.html">c3ref/db_filename.html</a>, matrix: <a href='matrix/c3ref/db_filename.html#R-63920-18609-57046-60110-46900-57278-33644-19241'>context</a>, <a href='matrix/matrix_ddb_filename.html#R-63920-18609-57046-60110-46900-57278-33644-19241'>detail</a>)</i></p></dd>
+
+<dt><b>R-63967-10740-31078-31148-41041-55599-05562-25747</b></dt>
+<dd><p>The unary + is a no-op and will not generate any byte code in the prepared statement.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-63967-10740-31078-31148-41041-55599-05562-25747'>context</a>, <a href='matrix/matrix_doptoverview.html#R-63967-10740-31078-31148-41041-55599-05562-25747'>detail</a>)</i></p></dd>
+
+<dt><b>R-64004-53814-05259-60925-08012-55166-06006-38537</b></dt>
+<dd><p>If there is no OFFSET clause, or the calculated integer value is negative, the effective OFFSET value is zero.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-64004-53814-05259-60925-08012-55166-06006-38537'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-64004-53814-05259-60925-08012-55166-06006-38537'>detail</a>)</i></p></dd>
+
+<dt><b>R-64016-22984-52243-31154-04159-15253-33575-11293</b></dt>
+<dd><p>A column with NUMERIC affinity may contain values using all five storage classes.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_01.test, matrix: <a href='matrix/datatype3.html#R-64016-22984-52243-31154-04159-15253-33575-11293'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-64016-22984-52243-31154-04159-15253-33575-11293'>detail</a>)</i></p></dd>
+
+<dt><b>R-64017-26165-55276-08272-52106-53519-03640-42248</b></dt>
+<dd><p>The sqlite3_finalize() function is called to delete a prepared statement.
+<i>(source: <a href="c3ref/finalize.html">c3ref/finalize.html</a>, checked-by: th3/req1/finalize01.test, matrix: <a href='matrix/c3ref/finalize.html#R-64017-26165-55276-08272-52106-53519-03640-42248'>context</a>, <a href='matrix/matrix_dfinalize.html#R-64017-26165-55276-08272-52106-53519-03640-42248'>detail</a>)</i></p></dd>
+
+<dt><b>R-64021-07698-52025-10986-56394-35084-34302-37940</b></dt>
+<dd><p>If the write-ahead log is enabled (via the journal_mode pragma), this pragma causes a checkpoint operation to run on database database, or on all attached databases if database is omitted.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-64021-07698-52025-10986-56394-35084-34302-37940'>context</a>, <a href='matrix/matrix_dpragma.html#R-64021-07698-52025-10986-56394-35084-34302-37940'>detail</a>)</i></p></dd>
+
+<dt><b>R-64032-17389-14849-50560-10397-51267-05389-65161</b></dt>
+<dd><p>If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat column contains a single integer which is the approximate number of rows in the table identified by sqlite_stat1.tbl.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-64032-17389-14849-50560-10397-51267-05389-65161'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-64032-17389-14849-50560-10397-51267-05389-65161'>detail</a>)</i></p></dd>
+
+<dt><b>R-64048-35950-52196-42061-52178-11098-48520-29989</b></dt>
+<dd><p>The datetime() function returns the date and time as text in their same formats: YYYY-MM-DD HH:MM:SS.
+<i>(source: <a href="lang_datefunc.html">lang_datefunc.html</a>, checked-by: th3/req1/date01.test, matrix: <a href='matrix/lang_datefunc.html#R-64048-35950-52196-42061-52178-11098-48520-29989'>context</a>, <a href='matrix/matrix_dlang_datefunc.html#R-64048-35950-52196-42061-52178-11098-48520-29989'>detail</a>)</i></p></dd>
+
+<dt><b>R-64049-08691-55124-50671-44406-19697-22475-30547</b></dt>
+<dd><p>The expression "a IN (x, y, z, ...)" is equivalent to "a = +x OR a = +y OR a = +z OR ...".
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-64049-08691-55124-50671-44406-19697-22475-30547'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-64049-08691-55124-50671-44406-19697-22475-30547'>detail</a>)</i></p></dd>
+
+<dt><b>R-64082-04685-34430-02984-31872-50387-26964-32862</b></dt>
+<dd><p>No database changes are rolled back.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-64082-04685-34430-02984-31872-50387-26964-32862'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-64082-04685-34430-02984-31872-50387-26964-32862'>detail</a>)</i></p></dd>
+
+<dt><b>R-64097-24821-08867-43816-57174-45858-42283-08645</b></dt>
+<dd><p>However, if three additional indexes where added that contained columns b, c, and d as their left-most columns, then the OR-clause optimization might apply.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-64097-24821-08867-43816-57174-45858-42283-08645'>context</a>, <a href='matrix/matrix_doptoverview.html#R-64097-24821-08867-43816-57174-45858-42283-08645'>detail</a>)</i></p></dd>
+
+<dt><b>R-64103-17776-35606-10153-57490-26630-22697-19436</b></dt>
+<dd><p>PRAGMA schema.index_list(table-name); This pragma returns one row for each index associated with the given table.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15.test, matrix: <a href='matrix/pragma.html#R-64103-17776-35606-10153-57490-26630-22697-19436'>context</a>, <a href='matrix/matrix_dpragma.html#R-64103-17776-35606-10153-57490-26630-22697-19436'>detail</a>)</i></p></dd>
+
+<dt><b>R-64107-03133-60846-38260-58078-31674-53966-09002</b></dt>
+<dd><p>The nullif(X,Y) function searches its arguments from left to right for an argument that defines a collating function and uses that collating function for all string comparisons.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/req1/func03.test, matrix: <a href='matrix/lang_corefunc.html#R-64107-03133-60846-38260-58078-31674-53966-09002'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-64107-03133-60846-38260-58078-31674-53966-09002'>detail</a>)</i></p></dd>
+
+<dt><b>R-64113-45477-15405-35111-28772-22089-43281-64875</b></dt>
+<dd><p>Use sqlite3_db_config(db,SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION,..) to enable or disable only the C-API.
+<i>(source: <a href="c3ref/enable_load_extension.html">c3ref/enable_load_extension.html</a>, matrix: <a href='matrix/c3ref/enable_load_extension.html#R-64113-45477-15405-35111-28772-22089-43281-64875'>context</a>, <a href='matrix/matrix_denable_load_extension.html#R-64113-45477-15405-35111-28772-22089-43281-64875'>detail</a>)</i></p></dd>
+
+<dt><b>R-64130-24369-52120-61237-04539-27042-01288-33957</b></dt>
+<dd><p>The substr(X,Y,Z) function returns a substring of input string X that begins with the Y-th character and which is Z characters long.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-64130-24369-52120-61237-04539-27042-01288-33957'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-64130-24369-52120-61237-04539-27042-01288-33957'>detail</a>)</i></p></dd>
+
+<dt><b>R-64138-28774-62367-40797-31143-24203-38235-49085</b></dt>
+<dd><p>An aggregate query without a GROUP BY clause always returns exactly one row of data, even if there are zero rows of input data.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-64138-28774-62367-40797-31143-24203-38235-49085'>context</a>, <a href='matrix/matrix_dlang_select.html#R-64138-28774-62367-40797-31143-24203-38235-49085'>detail</a>)</i></p></dd>
+
+<dt><b>R-64182-49733-18009-45461-02192-56112-34061-30398</b></dt>
+<dd><p>The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8 string containing the SQL text of prepared statement P with bound parameters expanded.
+<i>(source: <a href="c3ref/expanded_sql.html">c3ref/expanded_sql.html</a>, checked-by: th3/req1/sql01.test, matrix: <a href='matrix/c3ref/expanded_sql.html#R-64182-49733-18009-45461-02192-56112-34061-30398'>context</a>, <a href='matrix/matrix_dexpanded_sql.html#R-64182-49733-18009-45461-02192-56112-34061-30398'>detail</a>)</i></p></dd>
+
+<dt><b>R-64199-22471-28685-05688-45410-48917-35278-06379</b></dt>
+<dd><p>If the ORDER BY expression is assigned a collation sequence using the postfix COLLATE operator, then the specified collation sequence is used.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-64199-22471-28685-05688-45410-48917-35278-06379'>context</a>, <a href='matrix/matrix_dlang_select.html#R-64199-22471-28685-05688-45410-48917-35278-06379'>detail</a>)</i></p></dd>
+
+<dt><b>R-64203-64297-25977-44727-61905-56050-52768-56293</b></dt>
+<dd><p>The same SQL function may be registered multiple times using different preferred text encodings, with different implementations for each encoding.
+<i>(source: <a href="c3ref/create_function.html">c3ref/create_function.html</a>, checked-by: th3/req1/createfunc04.test, matrix: <a href='matrix/c3ref/create_function.html#R-64203-64297-25977-44727-61905-56050-52768-56293'>context</a>, <a href='matrix/matrix_dcreate_function.html#R-64203-64297-25977-44727-61905-56050-52768-56293'>detail</a>)</i></p></dd>
+
+<dt><b>R-64208-53052-48559-48683-00395-47002-65177-30547</b></dt>
+<dd><p>The SQLITE_DEFAULT_PAGE_SIZE compile-time option can be used to change the default page size assigned to new databases.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-64208-53052-48559-48683-00395-47002-65177-30547'>context</a>, <a href='matrix/matrix_dpragma.html#R-64208-53052-48559-48683-00395-47002-65177-30547'>detail</a>)</i></p></dd>
+
+<dt><b>R-64224-62578-03972-01663-15299-36598-00230-00133</b></dt>
+<dd><p>If an UPDATE statement attempts to set an integer primary key or rowid column to a NULL or blob value, or to a string or real value that cannot be losslessly converted to an integer, a "datatype mismatch" error occurs and the statement is aborted.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-64224-62578-03972-01663-15299-36598-00230-00133'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-64224-62578-03972-01663-15299-36598-00230-00133'>detail</a>)</i></p></dd>
+
+<dt><b>R-64249-42392-53555-26523-38701-52551-63844-05212</b></dt>
+<dd><p>The ltrim(X,Y) function returns a string formed by removing any and all characters that appear in Y from the left side of X.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-64249-42392-53555-26523-38701-52551-63844-05212'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-64249-42392-53555-26523-38701-52551-63844-05212'>detail</a>)</i></p></dd>
+
+<dt><b>R-64276-00534-35608-51878-49907-08473-11116-64004</b></dt>
+<dd><p>Any existing statements prepared using the legacy sqlite3_prepare() interface may fail with an SQLITE_SCHEMA error after the foreign_keys setting is changed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma19.test, matrix: <a href='matrix/pragma.html#R-64276-00534-35608-51878-49907-08473-11116-64004'>context</a>, <a href='matrix/matrix_dpragma.html#R-64276-00534-35608-51878-49907-08473-11116-64004'>detail</a>)</i></p></dd>
+
+<dt><b>R-64309-54027-59043-55394-44740-32363-09353-52074</b></dt>
+<dd><p>Note that SQLite allows the parenthesized list of scalar values on the right-hand side of an IN or NOT IN operator to be an empty list but most other SQL database engines and the SQL92 standard require the list to contain at least one element.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/tkt-80e031a00f.test, matrix: <a href='matrix/lang_expr.html#R-64309-54027-59043-55394-44740-32363-09353-52074'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-64309-54027-59043-55394-44740-32363-09353-52074'>detail</a>)</i></p></dd>
+
+<dt><b>R-64317-38978-24132-13511-50003-08766-02219-42213</b></dt>
+<dd><p>The other columns are pairs, one pair per dimension, containing the minimum and maximum values for that dimension, respectively.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, th3/req1/rtreereq03.test, matrix: <a href='matrix/rtree.html#R-64317-38978-24132-13511-50003-08766-02219-42213'>context</a>, <a href='matrix/matrix_drtree.html#R-64317-38978-24132-13511-50003-08766-02219-42213'>detail</a>)</i></p></dd>
+
+<dt><b>R-64324-28127-56247-07957-53732-02733-48072-24920</b></dt>
+<dd><p>A TEXT value is less than a BLOB value.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_04.test, matrix: <a href='matrix/datatype3.html#R-64324-28127-56247-07957-53732-02733-48072-24920'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-64324-28127-56247-07957-53732-02733-48072-24920'>detail</a>)</i></p></dd>
+
+<dt><b>R-64365-33714-02196-49679-58449-42596-39965-50249</b></dt>
+<dd><p>SQLITE_DBSTATUS_CACHE_HIT This parameter returns the number of pager cache hits that have occurred.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-64365-33714-02196-49679-58449-42596-39965-50249'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-64365-33714-02196-49679-58449-42596-39965-50249'>detail</a>)</i></p></dd>
+
+<dt><b>R-64415-18962-49048-16298-22605-23771-20510-46620</b></dt>
+<dd><p>A record might have fewer values than the number of columns in the corresponding table.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-64415-18962-49048-16298-22605-23771-20510-46620'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-64415-18962-49048-16298-22605-23771-20510-46620'>detail</a>)</i></p></dd>
+
+<dt><b>R-64444-28602-34432-27879-08826-07495-40207-13752</b></dt>
+<dd><p>If the limit is zero, then the analysis limit is disabled and the ANALYZE command will examine all rows of each index.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/analyze18.test, matrix: <a href='matrix/pragma.html#R-64444-28602-34432-27879-08826-07495-40207-13752'>context</a>, <a href='matrix/matrix_dpragma.html#R-64444-28602-34432-27879-08826-07495-40207-13752'>detail</a>)</i></p></dd>
+
+<dt><b>R-64451-07163-52994-32419-24914-21127-60728-58807</b></dt>
+<dd><p>The soft_heap_limit pragma always returns the same integer that would be returned by the sqlite3_soft_heap_limit64(-1) C-language function.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: src/pragma.c, tcl/softheap1.test, matrix: <a href='matrix/pragma.html#R-64451-07163-52994-32419-24914-21127-60728-58807'>context</a>, <a href='matrix/matrix_dpragma.html#R-64451-07163-52994-32419-24914-21127-60728-58807'>detail</a>)</i></p></dd>
+
+<dt><b>R-64470-55820-31502-18212-19924-05102-35790-30152</b></dt>
+<dd><p>Calling this routine with an argument less than or equal to zero turns off all busy handlers.
+<i>(source: <a href="c3ref/busy_timeout.html">c3ref/busy_timeout.html</a>, checked-by: th3/cov1/main21.test, matrix: <a href='matrix/c3ref/busy_timeout.html#R-64470-55820-31502-18212-19924-05102-35790-30152'>context</a>, <a href='matrix/matrix_dbusy_timeout.html#R-64470-55820-31502-18212-19924-05102-35790-30152'>detail</a>)</i></p></dd>
+
+<dt><b>R-64473-47361-40314-48518-09145-45221-49421-09609</b></dt>
+<dd><p>The sqlite3_aggregate_context(C,N) routine returns a NULL pointer when first called if N is less than or equal to zero or if a memory allocation error occurs.
+<i>(source: <a href="c3ref/aggregate_context.html">c3ref/aggregate_context.html</a>, checked-by: th3/req1/aggcntx01.test, matrix: <a href='matrix/c3ref/aggregate_context.html#R-64473-47361-40314-48518-09145-45221-49421-09609'>context</a>, <a href='matrix/matrix_daggregate_context.html#R-64473-47361-40314-48518-09145-45221-49421-09609'>detail</a>)</i></p></dd>
+
+<dt><b>R-64479-57858-30969-38404-45379-17984-36095-58502</b></dt>
+<dd><p>The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
+<i>(source: <a href="c3ref/c_dbstatus_options.html">c3ref/c_dbstatus_options.html</a>, checked-by: src/status.c, th3/req1/dbstatus01.test, matrix: <a href='matrix/c3ref/c_dbstatus_options.html#R-64479-57858-30969-38404-45379-17984-36095-58502'>context</a>, <a href='matrix/matrix_dc_dbstatus_options.html#R-64479-57858-30969-38404-45379-17984-36095-58502'>detail</a>)</i></p></dd>
+
+<dt><b>R-64488-01207-41542-36370-36584-38548-35733-59275</b></dt>
+<dd><p>The temp_store_directory pragma can be used to specify the directory containing temporary files when FILE is specified.
+<i>(source: <a href="pragma.html">pragma.html</a>, matrix: <a href='matrix/pragma.html#R-64488-01207-41542-36370-36584-38548-35733-59275'>context</a>, <a href='matrix/matrix_dpragma.html#R-64488-01207-41542-36370-36584-38548-35733-59275'>detail</a>)</i></p></dd>
+
+<dt><b>R-64528-42778-02888-51810-06932-64442-58390-22409</b></dt>
+<dd><p>If the 3rd parameter to the sqlite3_result_text* interfaces is non-negative, then as many bytes (not characters) of the text pointed to by the 2nd parameter are taken as the application-defined function result.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, checked-by: th3/req1/result02.test, matrix: <a href='matrix/c3ref/result_blob.html#R-64528-42778-02888-51810-06932-64442-58390-22409'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-64528-42778-02888-51810-06932-64442-58390-22409'>detail</a>)</i></p></dd>
+
+<dt><b>R-64531-59395-59522-15917-19627-46695-59010-51244</b></dt>
+<dd><p>Invoking this pragma without an argument is equivalent to calling the sqlite3_wal_checkpoint() C interface.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/checkpoint01.test, matrix: <a href='matrix/pragma.html#R-64531-59395-59522-15917-19627-46695-59010-51244'>context</a>, <a href='matrix/matrix_dpragma.html#R-64531-59395-59522-15917-19627-46695-59010-51244'>detail</a>)</i></p></dd>
+
+<dt><b>R-64535-08414-56299-20863-17793-59913-52096-13773</b></dt>
+<dd><p>If there are less than N rows remaining after taking the OFFSET clause into account, or if the LIMIT clause evaluated to a negative value, then all remaining rows are deleted.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-64535-08414-56299-20863-17793-59913-52096-13773'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-64535-08414-56299-20863-17793-59913-52096-13773'>detail</a>)</i></p></dd>
+
+<dt><b>R-64536-51728-48624-04422-11602-40097-21490-13878</b></dt>
+<dd><p>The values for each column in the record immediately follow the header.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/vdbe.c, matrix: <a href='matrix/fileformat2.html#R-64536-51728-48624-04422-11602-40097-21490-13878'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-64536-51728-48624-04422-11602-40097-21490-13878'>detail</a>)</i></p></dd>
+
+<dt><b>R-64550-29191-54086-24811-00443-47986-21003-27772</b></dt>
+<dd><p>Note that the result from casting any non-BLOB value into a BLOB and the result from casting any BLOB value into a non-BLOB value may be different depending on whether the database encoding is UTF-8, UTF-16be, or UTF-16le.
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-64550-29191-54086-24811-00443-47986-21003-27772'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-64550-29191-54086-24811-00443-47986-21003-27772'>detail</a>)</i></p></dd>
+
+<dt><b>R-64586-34038-50551-35162-29949-64214-50082-35974</b></dt>
+<dd><p>On a checkpoint, the WAL is first flushed to persistent storage using the xSync method of the VFS.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-64586-34038-50551-35162-29949-64214-50082-35974'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-64586-34038-50551-35162-29949-64214-50082-35974'>detail</a>)</i></p></dd>
+
+<dt><b>R-64600-17320-28497-51655-11610-39748-50206-04089</b></dt>
+<dd><p>The first ptrmap page will contain back pointer information for pages 3 through J+2, inclusive.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-64600-17320-28497-51655-11610-39748-50206-04089'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-64600-17320-28497-51655-11610-39748-50206-04089'>detail</a>)</i></p></dd>
+
+<dt><b>R-64601-24454-22641-31955-15642-29153-65084-11267</b></dt>
+<dd><p>If X is a memory allocation previously obtained from sqlite3_malloc(), sqlite3_malloc64(), sqlite3_realloc(), or sqlite3_realloc64(), then sqlite3_msize(X) returns the size of that memory allocation in bytes.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-64601-24454-22641-31955-15642-29153-65084-11267'>context</a>, <a href='matrix/matrix_dfree.html#R-64601-24454-22641-31955-15642-29153-65084-11267'>detail</a>)</i></p></dd>
+
+<dt><b>R-64605-35184-01138-49428-61932-51728-21145-21694</b></dt>
+<dd><p>This pragma returns information about the tables and views in the schema, one table per row of output.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma30.test, matrix: <a href='matrix/pragma.html#R-64605-35184-01138-49428-61932-51728-21145-21694'>context</a>, <a href='matrix/matrix_dpragma.html#R-64605-35184-01138-49428-61932-51728-21145-21694'>detail</a>)</i></p></dd>
+
+<dt><b>R-64618-48771-56077-37095-41787-03212-44585-24877</b></dt>
+<dd><p>If the outer query is an aggregate, then the subquery may not contain ORDER BY.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-64618-48771-56077-37095-41787-03212-44585-24877'>context</a>, <a href='matrix/matrix_doptoverview.html#R-64618-48771-56077-37095-41787-03212-44585-24877'>detail</a>)</i></p></dd>
+
+<dt><b>R-64621-04411-33319-49745-15596-29150-62306-56215</b></dt>
+<dd><p>For the sqlite3_result_text16(), sqlite3_result_text16le(), and sqlite3_result_text16be() routines, and for sqlite3_result_text64() when the encoding is not UTF8, if the input UTF16 begins with a byte-order mark (BOM, U+FEFF) then the BOM is removed from the string and the rest of the string is interpreted according to the byte-order specified by the BOM.
+<i>(source: <a href="c3ref/result_blob.html">c3ref/result_blob.html</a>, matrix: <a href='matrix/c3ref/result_blob.html#R-64621-04411-33319-49745-15596-29150-62306-56215'>context</a>, <a href='matrix/matrix_dresult_blob.html#R-64621-04411-33319-49745-15596-29150-62306-56215'>detail</a>)</i></p></dd>
+
+<dt><b>R-64625-44339-60095-18400-35169-15526-52031-11800</b></dt>
+<dd><p>The 6th parameter to the authorizer callback is the name of the inner-most trigger or view that is responsible for the access attempt or NULL if this access attempt is directly from top-level SQL code.
+<i>(source: <a href="c3ref/c_alter_table.html">c3ref/c_alter_table.html</a>, checked-by: th3/cov1/auth03.test, matrix: <a href='matrix/c3ref/c_alter_table.html#R-64625-44339-60095-18400-35169-15526-52031-11800'>context</a>, <a href='matrix/matrix_dc_alter_table.html#R-64625-44339-60095-18400-35169-15526-52031-11800'>detail</a>)</i></p></dd>
+
+<dt><b>R-64629-22390-19344-37404-07828-61811-57666-02667</b></dt>
+<dd><p>Unused database file pages are added to a "freelist" and reused for subsequent inserts.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma07.test, matrix: <a href='matrix/pragma.html#R-64629-22390-19344-37404-07828-61811-57666-02667'>context</a>, <a href='matrix/matrix_dpragma.html#R-64629-22390-19344-37404-07828-61811-57666-02667'>detail</a>)</i></p></dd>
+
+<dt><b>R-64629-41035-41356-60925-45960-54046-62030-03939</b></dt>
+<dd><p>The sqlite3_trace() callback is invoked with a UTF-8 rendering of the SQL statement text as the statement first begins executing.
+<i>(source: <a href="c3ref/profile.html">c3ref/profile.html</a>, checked-by: th3/cov1/main16.test, matrix: <a href='matrix/c3ref/profile.html#R-64629-41035-41356-60925-45960-54046-62030-03939'>context</a>, <a href='matrix/matrix_dprofile.html#R-64629-41035-41356-60925-45960-54046-62030-03939'>detail</a>)</i></p></dd>
+
+<dt><b>R-64672-26627-33717-56839-41110-28928-46204-47104</b></dt>
+<dd><p>The ON and USING clauses of an inner join are converted into additional terms of the WHERE clause prior to WHERE clause analysis described above in paragraph 2.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-64672-26627-33717-56839-41110-28928-46204-47104'>context</a>, <a href='matrix/matrix_doptoverview.html#R-64672-26627-33717-56839-41110-28928-46204-47104'>detail</a>)</i></p></dd>
+
+<dt><b>R-64707-05329-18384-25236-31190-36839-36915-56468</b></dt>
+<dd><p>The left-most character of X is number 1.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: th3/cov1/func02.test, matrix: <a href='matrix/lang_corefunc.html#R-64707-05329-18384-25236-31190-36839-36915-56468'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-64707-05329-18384-25236-31190-36839-36915-56468'>detail</a>)</i></p></dd>
+
+<dt><b>R-64770-29120-59115-58521-20051-37065-45923-19746</b></dt>
+<dd><p>The rewritten term then might go on to constrain an index using the normal rules for IN operators.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-64770-29120-59115-58521-20051-37065-45923-19746'>context</a>, <a href='matrix/matrix_doptoverview.html#R-64770-29120-59115-58521-20051-37065-45923-19746'>detail</a>)</i></p></dd>
+
+<dt><b>R-64781-29425-02417-13736-38225-42517-23683-29387</b></dt>
+<dd><p>Some pragmas take effect during the SQL compilation stage, not the execution stage.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma06.test, matrix: <a href='matrix/pragma.html#R-64781-29425-02417-13736-38225-42517-23683-29387'>context</a>, <a href='matrix/matrix_dpragma.html#R-64781-29425-02417-13736-38225-42517-23683-29387'>detail</a>)</i></p></dd>
+
+<dt><b>R-64797-45496-20081-43950-39002-36712-47915-33301</b></dt>
+<dd><p>The expression may not use subqueries, aggregate functions, window functions, or table-valued functions.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-64797-45496-20081-43950-39002-36712-47915-33301'>context</a>, <a href='matrix/matrix_dgencol.html#R-64797-45496-20081-43950-39002-36712-47915-33301'>detail</a>)</i></p></dd>
+
+<dt><b>R-64809-29224-33309-48329-38874-47326-32566-40643</b></dt>
+<dd><p>An SQL operation that is interrupted will return SQLITE_INTERRUPT.
+<i>(source: <a href="c3ref/interrupt.html">c3ref/interrupt.html</a>, matrix: <a href='matrix/c3ref/interrupt.html#R-64809-29224-33309-48329-38874-47326-32566-40643'>context</a>, <a href='matrix/matrix_dinterrupt.html#R-64809-29224-33309-48329-38874-47326-32566-40643'>detail</a>)</i></p></dd>
+
+<dt><b>R-64812-56077-47875-43117-23188-46780-09721-28568</b></dt>
+<dd><p>If every subterm of an OR clause is separately indexable then the OR clause might be coded such that a separate index is used to evaluate each term of the OR clause.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-64812-56077-47875-43117-23188-46780-09721-28568'>context</a>, <a href='matrix/matrix_doptoverview.html#R-64812-56077-47875-43117-23188-46780-09721-28568'>detail</a>)</i></p></dd>
+
+<dt><b>R-64813-58505-03479-11903-29047-19194-00816-28075</b></dt>
+<dd><p>The WAL is always located in the same directory as the database file and has the same name as the database file but with the string "-wal" appended.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-64813-58505-03479-11903-29047-19194-00816-28075'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-64813-58505-03479-11903-29047-19194-00816-28075'>detail</a>)</i></p></dd>
+
+<dt><b>R-64828-59568-61067-60898-36143-56429-01681-45331</b></dt>
+<dd><p>The table has the same number of columns as the rows returned by the SELECT statement. The name of each column is the same as the name of the corresponding column in the result set of the SELECT statement.
+<i>(source: <a href="lang_createtable.html">lang_createtable.html</a>, checked-by: tcl/e_createtable.test, matrix: <a href='matrix/lang_createtable.html#R-64828-59568-61067-60898-36143-56429-01681-45331'>context</a>, <a href='matrix/matrix_dlang_createtable.html#R-64828-59568-61067-60898-36143-56429-01681-45331'>detail</a>)</i></p></dd>
+
+<dt><b>R-64839-61120-28231-56530-41272-62247-43805-43738</b></dt>
+<dd><p>SQLite may attempt to convert values between the storage classes INTEGER, REAL, and/or TEXT before performing a comparison.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-64839-61120-28231-56530-41272-62247-43805-43738'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-64839-61120-28231-56530-41272-62247-43805-43738'>detail</a>)</i></p></dd>
+
+<dt><b>R-64842-30903-04494-11389-12737-16159-45438-00930</b></dt>
+<dd><p>If the value cannot be losslessly converted in the specified datatype, then an SQLITE_CONSTRAINT_DATATYPE error is raised.
+<i>(source: <a href="stricttables.html">stricttables.html</a>, checked-by: th3/req1/strictreq01.test, matrix: <a href='matrix/stricttables.html#R-64842-30903-04494-11389-12737-16159-45438-00930'>context</a>, <a href='matrix/matrix_dstricttables.html#R-64842-30903-04494-11389-12737-16159-45438-00930'>detail</a>)</i></p></dd>
+
+<dt><b>R-64844-34873-54978-44161-37358-50690-61472-16160</b></dt>
+<dd><p>When auto_vacuum is enabled for a database free pages may be reclaimed after deleting data, causing the file to shrink, without rebuilding the entire database using VACUUM.
+<i>(source: <a href="lang_vacuum.html">lang_vacuum.html</a>, checked-by: tcl/e_vacuum.test, matrix: <a href='matrix/lang_vacuum.html#R-64844-34873-54978-44161-37358-50690-61472-16160'>context</a>, <a href='matrix/matrix_dlang_vacuum.html#R-64844-34873-54978-44161-37358-50690-61472-16160'>detail</a>)</i></p></dd>
+
+<dt><b>R-64852-21591-48845-17571-26387-46542-15231-04527</b></dt>
+<dd><p>The sqlite3_backup object is created by a call to sqlite3_backup_init() and is destroyed by a call to sqlite3_backup_finish().
+<i>(source: <a href="c3ref/backup.html">c3ref/backup.html</a>, checked-by: src/backup.c, th3/cov1/backup01.test, matrix: <a href='matrix/c3ref/backup.html#R-64852-21591-48845-17571-26387-46542-15231-04527'>context</a>, <a href='matrix/matrix_dbackup.html#R-64852-21591-48845-17571-26387-46542-15231-04527'>detail</a>)</i></p></dd>
+
+<dt><b>R-64894-16593-62452-43919-42251-52509-45292-14622</b></dt>
+<dd><p>Thus if the BETWEEN term is not used as an index constraint and instead must be used to test input rows, the expr1 expression is only evaluated once.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-64894-16593-62452-43919-42251-52509-45292-14622'>context</a>, <a href='matrix/matrix_doptoverview.html#R-64894-16593-62452-43919-42251-52509-45292-14622'>detail</a>)</i></p></dd>
+
+<dt><b>R-64894-50321-17583-62706-45487-44187-46471-34655</b></dt>
+<dd><p>The string "?000" is returned if the argument is NULL or contains no ASCII alphabetic characters.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: src/func.c, th3/cov1/func07.test, matrix: <a href='matrix/lang_corefunc.html#R-64894-50321-17583-62706-45487-44187-46471-34655'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-64894-50321-17583-62706-45487-44187-46471-34655'>detail</a>)</i></p></dd>
+
+<dt><b>R-64895-14776-45323-12456-17492-01351-20079-09519</b></dt>
+<dd><p>The truncate optimization can be permanently disabled for all queries by recompiling SQLite with the SQLITE_OMIT_TRUNCATE_OPTIMIZATION compile-time switch.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, matrix: <a href='matrix/lang_delete.html#R-64895-14776-45323-12456-17492-01351-20079-09519'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-64895-14776-45323-12456-17492-01351-20079-09519'>detail</a>)</i></p></dd>
+
+<dt><b>R-64900-53159-64756-09404-17809-46163-54022-59398</b></dt>
+<dd><p>The printf() SQL function is an alias for the format() SQL function.
+<i>(source: <a href="lang_corefunc.html">lang_corefunc.html</a>, checked-by: tcl/printf2.test, th3/cov1/printf08.test, matrix: <a href='matrix/lang_corefunc.html#R-64900-53159-64756-09404-17809-46163-54022-59398'>context</a>, <a href='matrix/matrix_dlang_corefunc.html#R-64900-53159-64756-09404-17809-46163-54022-59398'>detail</a>)</i></p></dd>
+
+<dt><b>R-64942-06615-59529-33377-22531-50938-02982-04631</b></dt>
+<dd><p>The LIMIT and ORDER BY clauses (described below) are unsupported for DELETE statements within triggers.
+<i>(source: <a href="lang_delete.html">lang_delete.html</a>, checked-by: tcl/e_delete.test, matrix: <a href='matrix/lang_delete.html#R-64942-06615-59529-33377-22531-50938-02982-04631'>context</a>, <a href='matrix/matrix_dlang_delete.html#R-64942-06615-59529-33377-22531-50938-02982-04631'>detail</a>)</i></p></dd>
+
+<dt><b>R-64951-20071-29590-30713-07634-57943-17719-34762</b></dt>
+<dd><p>If the subquery uses LIMIT, then the outer query may not be DISTINCT.
+<i>(source: <a href="optoverview.html">optoverview.html</a>, matrix: <a href='matrix/optoverview.html#R-64951-20071-29590-30713-07634-57943-17719-34762'>context</a>, <a href='matrix/matrix_doptoverview.html#R-64951-20071-29590-30713-07634-57943-17719-34762'>detail</a>)</i></p></dd>
+
+<dt><b>R-64962-17428-03573-42931-48456-26794-13581-20203</b></dt>
+<dd><p>Each column in an SQLite 3 database is assigned one of the following type affinities: TEXT NUMERIC INTEGER REAL BLOB
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-64962-17428-03573-42931-48456-26794-13581-20203'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-64962-17428-03573-42931-48456-26794-13581-20203'>detail</a>)</i></p></dd>
+
+<dt><b>R-64962-58611-23755-17940-51440-03163-56069-63868</b></dt>
+<dd><p>If the authorizer callback returns any value other than SQLITE_IGNORE, SQLITE_OK, or SQLITE_DENY then the sqlite3_prepare_v2() or equivalent call that triggered the authorizer will fail with an error message.
+<i>(source: <a href="c3ref/set_authorizer.html">c3ref/set_authorizer.html</a>, checked-by: tcl/auth3.test, th3/cov1/auth01.test, matrix: <a href='matrix/c3ref/set_authorizer.html#R-64962-58611-23755-17940-51440-03163-56069-63868'>context</a>, <a href='matrix/matrix_dset_authorizer.html#R-64962-58611-23755-17940-51440-03163-56069-63868'>detail</a>)</i></p></dd>
+
+<dt><b>R-64967-62742-25252-37896-34522-17857-15899-52885</b></dt>
+<dd><p>The WAL journaling mode is persistent; after being set it stays in effect across multiple database connections and after closing and reopening the database.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma24.test, matrix: <a href='matrix/pragma.html#R-64967-62742-25252-37896-34522-17857-15899-52885'>context</a>, <a href='matrix/matrix_dpragma.html#R-64967-62742-25252-37896-34522-17857-15899-52885'>detail</a>)</i></p></dd>
+
+<dt><b>R-64973-09381-20072-06844-08666-32916-49559-16306</b></dt>
+<dd><p>A pragma can take either zero or one argument.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/req1/pragma01.test, matrix: <a href='matrix/pragma.html#R-64973-09381-20072-06844-08666-32916-49559-16306'>context</a>, <a href='matrix/matrix_dpragma.html#R-64973-09381-20072-06844-08666-32916-49559-16306'>detail</a>)</i></p></dd>
+
+<dt><b>R-65019-08383-37218-08161-37100-03292-58035-06860</b></dt>
+<dd><p>The rank of the column within the table being indexed.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: tcl/pragma.test, th3/req1/pragma15.test, matrix: <a href='matrix/pragma.html#R-65019-08383-37218-08161-37100-03292-58035-06860'>context</a>, <a href='matrix/matrix_dpragma.html#R-65019-08383-37218-08161-37100-03292-58035-06860'>detail</a>)</i></p></dd>
+
+<dt><b>R-65033-28449-21866-26015-44447-32158-58356-59086</b></dt>
+<dd><p>The built-in BINARY collation compares strings byte by byte using the memcmp() function from the standard C library.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, checked-by: src/main.c, matrix: <a href='matrix/fileformat2.html#R-65033-28449-21866-26015-44447-32158-58356-59086'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-65033-28449-21866-26015-44447-32158-58356-59086'>detail</a>)</i></p></dd>
+
+<dt><b>R-65058-57158-61886-52055-64360-05204-52569-52918</b></dt>
+<dd><p>For example, adding an "ON UPDATE CASCADE" clause to the foreign key as shown below enhances the example schema from section 1 to allow the user to update the artistid (the parent key of the foreign key constraint) column without breaking referential integrity: -- Database schema CREATE TABLE artist( artistid INTEGER PRIMARY KEY, artistname TEXT ); CREATE TABLE track( trackid INTEGER, trackname TEXT, trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE ); sqlite> SELECT * FROM artist; artistid artistname -------- ----------------- 1 Dean Martin 2 Frank Sinatra sqlite> SELECT * FROM track; trackid trackname trackartist ------- ----------------- ----------- 11 That's Amore 1 12 Christmas Blues 1 13 My Way 2 sqlite> -- Update the artistid column of the artist record for "Dean Martin". sqlite> -- Normally, this would raise a constraint, as it would orphan the two sqlite> -- dependent records in the track table. However, the ON UPDATE CASCADE clause sqlite> -- attached to the foreign key definition causes the update to "cascade" sqlite> -- to the child table, preventing the foreign key constraint violation. sqlite> UPDATE artist SET artistid = 100 WHERE artistname = 'Dean Martin'; sqlite> SELECT * FROM artist; artistid artistname -------- ----------------- 2 Frank Sinatra 100 Dean Martin sqlite> SELECT * FROM track; trackid trackname trackartist ------- ----------------- ----------- 11 That's Amore 100 12 Christmas Blues 100 13 My Way 2
+<i>(source: <a href="foreignkeys.html">foreignkeys.html</a>, checked-by: tcl/e_fkey.test, th3/req1/foreignkeys17.test, matrix: <a href='matrix/foreignkeys.html#R-65058-57158-61886-52055-64360-05204-52569-52918'>context</a>, <a href='matrix/matrix_dforeignkeys.html#R-65058-57158-61886-52055-64360-05204-52569-52918'>detail</a>)</i></p></dd>
+
+<dt><b>R-65068-25814-18099-09241-35748-05178-29106-53953</b></dt>
+<dd><p>If the savepoint-name in a RELEASE command does not match any savepoint currently in the transaction stack, then no savepoints are released, the database is unchanged, and the RELEASE command returns an error.
+<i>(source: <a href="lang_savepoint.html">lang_savepoint.html</a>, matrix: <a href='matrix/lang_savepoint.html#R-65068-25814-18099-09241-35748-05178-29106-53953'>context</a>, <a href='matrix/matrix_dlang_savepoint.html#R-65068-25814-18099-09241-35748-05178-29106-53953'>detail</a>)</i></p></dd>
+
+<dt><b>R-65068-27207-32171-32439-07967-23118-62780-22376</b></dt>
+<dd><p>Otherwise, if the ORDER BY expression is any other expression, it is evaluated and the returned value used to order the output rows.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: tcl/e_select.test, matrix: <a href='matrix/lang_select.html#R-65068-27207-32171-32439-07967-23118-62780-22376'>context</a>, <a href='matrix/matrix_dlang_select.html#R-65068-27207-32171-32439-07967-23118-62780-22376'>detail</a>)</i></p></dd>
+
+<dt><b>R-65080-38137-04546-49301-16311-04630-53630-13035</b></dt>
+<dd><p>The default setting for secure_delete is determined by the SQLITE_SECURE_DELETE compile-time option and is normally off.
+<i>(source: <a href="pragma.html">pragma.html</a>, checked-by: th3/cov1/pragma20.test, th3/cov1/pragma21.test, matrix: <a href='matrix/pragma.html#R-65080-38137-04546-49301-16311-04630-53630-13035'>context</a>, <a href='matrix/matrix_dpragma.html#R-65080-38137-04546-49301-16311-04630-53630-13035'>detail</a>)</i></p></dd>
+
+<dt><b>R-65084-00602-21133-41951-43387-02500-18887-33247</b></dt>
+<dd><p>sqlite3_shutdown() will invoke sqlite3_os_end().
+<i>(source: <a href="c3ref/initialize.html">c3ref/initialize.html</a>, matrix: <a href='matrix/c3ref/initialize.html#R-65084-00602-21133-41951-43387-02500-18887-33247'>context</a>, <a href='matrix/matrix_dinitialize.html#R-65084-00602-21133-41951-43387-02500-18887-33247'>detail</a>)</i></p></dd>
+
+<dt><b>R-65108-23645-63455-34276-36259-20097-03176-47675</b></dt>
+<dd><p>Calls to sqlite3_value_text(X), sqlite3_value_text16(X), sqlite3_value_text16be(X), sqlite3_value_text16le(X), sqlite3_value_bytes(X), or sqlite3_value_bytes16(X) might change the encoding of the value X and thus change the return from subsequent calls to sqlite3_value_encoding(X).
+<i>(source: <a href="c3ref/value_encoding.html">c3ref/value_encoding.html</a>, matrix: <a href='matrix/c3ref/value_encoding.html#R-65108-23645-63455-34276-36259-20097-03176-47675'>context</a>, <a href='matrix/matrix_dvalue_encoding.html#R-65108-23645-63455-34276-36259-20097-03176-47675'>detail</a>)</i></p></dd>
+
+<dt><b>R-65114-09470-57981-35509-40409-30231-64456-31746</b></dt>
+<dd><p>The sqlite_stat4.sample column holds a BLOB in the record format that encodes the indexed columns followed by the rowid for a rowid table or by the columns of the primary key for a WITHOUT ROWID table.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-65114-09470-57981-35509-40409-30231-64456-31746'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-65114-09470-57981-35509-40409-30231-64456-31746'>detail</a>)</i></p></dd>
+
+<dt><b>R-65124-17715-29002-58648-01842-29148-18346-40549</b></dt>
+<dd><p>The estimatedCost value is an estimate of the cost of a particular strategy.
+<i>(source: <a href="c3ref/index_info.html">c3ref/index_info.html</a>, matrix: <a href='matrix/c3ref/index_info.html#R-65124-17715-29002-58648-01842-29148-18346-40549'>context</a>, <a href='matrix/matrix_dindex_info.html#R-65124-17715-29002-58648-01842-29148-18346-40549'>detail</a>)</i></p></dd>
+
+<dt><b>R-65127-42665-35537-26123-60886-44164-20363-50210</b></dt>
+<dd><p>If the extracted priority queue entry is a node (a subtree), then the next child of that node is passed to the xQueryFunc callback.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc3.test, matrix: <a href='matrix/rtree.html#R-65127-42665-35537-26123-60886-44164-20363-50210'>context</a>, <a href='matrix/matrix_drtree.html#R-65127-42665-35537-26123-60886-44164-20363-50210'>detail</a>)</i></p></dd>
+
+<dt><b>R-65161-60989-13939-65119-57772-34659-43488-10354</b></dt>
+<dd><p>The WHERE clause may not contain subqueries, references to other tables, non-deterministic functions, or bound parameters.
+<i>(source: <a href="partialindex.html">partialindex.html</a>, checked-by: th3/cov1/index01.test, matrix: <a href='matrix/partialindex.html#R-65161-60989-13939-65119-57772-34659-43488-10354'>context</a>, <a href='matrix/matrix_dpartialindex.html#R-65161-60989-13939-65119-57772-34659-43488-10354'>detail</a>)</i></p></dd>
+
+<dt><b>R-65170-37686-46750-59741-09929-07769-53734-56917</b></dt>
+<dd><p>Each prepared statement maintains various SQLITE_STMTSTATUS counters that measure the number of times it has performed specific operations.
+<i>(source: <a href="c3ref/stmt_status.html">c3ref/stmt_status.html</a>, matrix: <a href='matrix/c3ref/stmt_status.html#R-65170-37686-46750-59741-09929-07769-53734-56917'>context</a>, <a href='matrix/matrix_dstmt_status.html#R-65170-37686-46750-59741-09929-07769-53734-56917'>detail</a>)</i></p></dd>
+
+<dt><b>R-65201-22208-38592-41579-38769-23544-65327-05998</b></dt>
+<dd><p>Extra columns appended to the %_rowid table hold the content of auxiliary columns.
+<i>(source: <a href="rtree.html">rtree.html</a>, checked-by: tcl/rtreedoc.test, matrix: <a href='matrix/rtree.html#R-65201-22208-38592-41579-38769-23544-65327-05998'>context</a>, <a href='matrix/matrix_drtree.html#R-65201-22208-38592-41579-38769-23544-65327-05998'>detail</a>)</i></p></dd>
+
+<dt><b>R-65300-64550-00463-55023-40104-43666-12951-02448</b></dt>
+<dd><p>An operand on a mathematical operator that does not look in any way numeric and is not NULL is converted to 0 or 0.0.
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_06.test, matrix: <a href='matrix/datatype3.html#R-65300-64550-00463-55023-40104-43666-12951-02448'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-65300-64550-00463-55023-40104-43666-12951-02448'>detail</a>)</i></p></dd>
+
+<dt><b>R-65304-57881-32228-09146-30017-59454-39464-18055</b></dt>
+<dd><p>CREATE TABLE t1( a TEXT, -- text affinity b NUMERIC, -- numeric affinity c BLOB, -- no affinity d -- no affinity ); -- Values will be stored as TEXT, INTEGER, TEXT, and INTEGER respectively INSERT INTO t1 VALUES('500', '500', '500', 500); SELECT typeof(a), typeof(b), typeof(c), typeof(d) FROM t1; text|integer|text|integer -- Because column "a" has text affinity, numeric values on the -- right-hand side of the comparisons are converted to text before -- the comparison occurs. SELECT a < 40, a < 60, a < 600 FROM t1; 0|1|1 -- Text affinity is applied to the right-hand operands but since -- they are already TEXT this is a no-op; no conversions occur. SELECT a < '40', a < '60', a < '600' FROM t1; 0|1|1 -- Column "b" has numeric affinity and so numeric affinity is applied -- to the operands on the right. Since the operands are already numeric, -- the application of affinity is a no-op; no conversions occur. All -- values are compared numerically. SELECT b < 40, b < 60, b < 600 FROM t1; 0|0|1 -- Numeric affinity is applied to operands on the right, converting them -- from text to integers. Then a numeric comparison occurs. SELECT b < '40', b < '60', b < '600' FROM t1; 0|0|1 -- No affinity conversions occur. Right-hand side values all have -- storage class INTEGER which are always less than the TEXT values -- on the left. SELECT c < 40, c < 60, c < 600 FROM t1; 0|0|0 -- No affinity conversions occur. Values are compared as TEXT. SELECT c < '40', c < '60', c < '600' FROM t1; 0|1|1 -- No affinity conversions occur. Right-hand side values all have -- storage class INTEGER which compare numerically with the INTEGER -- values on the left. SELECT d < 40, d < 60, d < 600 FROM t1; 0|0|1 -- No affinity conversions occur. INTEGER values on the left are -- always less than TEXT values on the right. SELECT d < '40', d < '60', d < '600' FROM t1; 1|1|1
+<i>(source: <a href="datatype3.html">datatype3.html</a>, checked-by: th3/req1/datatype3_05.test, matrix: <a href='matrix/datatype3.html#R-65304-57881-32228-09146-30017-59454-39464-18055'>context</a>, <a href='matrix/matrix_ddatatype3.html#R-65304-57881-32228-09146-30017-59454-39464-18055'>detail</a>)</i></p></dd>
+
+<dt><b>R-65312-04917-64079-24281-62446-41326-63748-51040</b></dt>
+<dd><p>If the parameter N to sqlite3_malloc() is zero or negative then sqlite3_malloc() returns a NULL pointer.
+<i>(source: <a href="c3ref/free.html">c3ref/free.html</a>, checked-by: th3/req1/malloc02.test, matrix: <a href='matrix/c3ref/free.html#R-65312-04917-64079-24281-62446-41326-63748-51040'>context</a>, <a href='matrix/matrix_dfree.html#R-65312-04917-64079-24281-62446-41326-63748-51040'>detail</a>)</i></p></dd>
+
+<dt><b>R-65343-41028-54070-29515-00373-53952-30391-17078</b></dt>
+<dd><p>SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite will only use a createFlag of 2 after a prior call with a createFlag of 1 failed.
+<i>(source: <a href="c3ref/pcache_methods2.html">c3ref/pcache_methods2.html</a>, matrix: <a href='matrix/c3ref/pcache_methods2.html#R-65343-41028-54070-29515-00373-53952-30391-17078'>context</a>, <a href='matrix/matrix_dpcache_methods2.html#R-65343-41028-54070-29515-00373-53952-30391-17078'>detail</a>)</i></p></dd>
+
+<dt><b>R-65347-63411-45850-56512-24851-44706-34523-61535</b></dt>
+<dd><p>In other words, the WAL can fill up with frames and then be checkpointed and then new frames can overwrite the old ones.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-65347-63411-45850-56512-24851-44706-34523-61535'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-65347-63411-45850-56512-24851-44706-34523-61535'>detail</a>)</i></p></dd>
+
+<dt><b>R-65366-15139-04842-55947-24968-22096-64628-38309</b></dt>
+<dd><p>The callback is invoked by SQLite after the commit has taken place and the associated write-lock on the database released
+<i>(source: <a href="c3ref/wal_hook.html">c3ref/wal_hook.html</a>, checked-by: tcl/e_walhook.test, matrix: <a href='matrix/c3ref/wal_hook.html#R-65366-15139-04842-55947-24968-22096-64628-38309'>context</a>, <a href='matrix/matrix_dwal_hook.html#R-65366-15139-04842-55947-24968-22096-64628-38309'>detail</a>)</i></p></dd>
+
+<dt><b>R-65380-53022-62704-42379-02430-24457-15703-19233</b></dt>
+<dd><p>If the right-most simple SELECT is a VALUES clause then no LIMIT clause is allowed.
+<i>(source: <a href="lang_select.html">lang_select.html</a>, checked-by: th3/req1/select02.test, matrix: <a href='matrix/lang_select.html#R-65380-53022-62704-42379-02430-24457-15703-19233'>context</a>, <a href='matrix/matrix_dlang_select.html#R-65380-53022-62704-42379-02430-24457-15703-19233'>detail</a>)</i></p></dd>
+
+<dt><b>R-65388-41786-00092-02077-09568-05356-17956-02801</b></dt>
+<dd><p>The SQLITE_ prefix may be omitted from the option name passed to sqlite3_compileoption_used().
+<i>(source: <a href="c3ref/compileoption_get.html">c3ref/compileoption_get.html</a>, checked-by: th3/cov1/ctime01.test, matrix: <a href='matrix/c3ref/compileoption_get.html#R-65388-41786-00092-02077-09568-05356-17956-02801'>context</a>, <a href='matrix/matrix_dcompileoption_get.html#R-65388-41786-00092-02077-09568-05356-17956-02801'>detail</a>)</i></p></dd>
+
+<dt><b>R-65413-22646-29156-64725-36805-48680-56286-58533</b></dt>
+<dd><p>The expression of a generated column may refer to other generated columns in the same row, but no generated column can depend upon itself, either directly or indirectly.
+<i>(source: <a href="gencol.html">gencol.html</a>, matrix: <a href='matrix/gencol.html#R-65413-22646-29156-64725-36805-48680-56286-58533'>context</a>, <a href='matrix/matrix_dgencol.html#R-65413-22646-29156-64725-36805-48680-56286-58533'>detail</a>)</i></p></dd>
+
+<dt><b>R-65415-14215-28340-46015-14060-32761-36485-26152</b></dt>
+<dd><p>The xCurrentTimeInt64() method returns, as an integer, the Julian Day Number multiplied by 86400000 (the number of milliseconds in a 24-hour day).
+<i>(source: <a href="c3ref/vfs.html">c3ref/vfs.html</a>, checked-by: th3/th3testvfs.c, matrix: <a href='matrix/c3ref/vfs.html#R-65415-14215-28340-46015-14060-32761-36485-26152'>context</a>, <a href='matrix/matrix_dvfs.html#R-65415-14215-28340-46015-14060-32761-36485-26152'>detail</a>)</i></p></dd>
+
+<dt><b>R-65428-21389-17979-34707-50338-54767-57809-35123</b></dt>
+<dd><p>The return value of the xFileControl method becomes the return value of this routine.
+<i>(source: <a href="c3ref/file_control.html">c3ref/file_control.html</a>, matrix: <a href='matrix/c3ref/file_control.html#R-65428-21389-17979-34707-50338-54767-57809-35123'>context</a>, <a href='matrix/matrix_dfile_control.html#R-65428-21389-17979-34707-50338-54767-57809-35123'>detail</a>)</i></p></dd>
+
+<dt><b>R-65463-62993-22311-50014-58341-59872-02270-20667</b></dt>
+<dd><p>Any database name qualifier that occurs prior to the name of the object being created is removed.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-65463-62993-22311-50014-58341-59872-02270-20667'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-65463-62993-22311-50014-58341-59872-02270-20667'>detail</a>)</i></p></dd>
+
+<dt><b>R-65489-09702-43837-30882-04138-20719-06311-14611</b></dt>
+<dd><p>BEFORE is the default when neither keyword is present.
+<i>(source: <a href="lang_createtrigger.html">lang_createtrigger.html</a>, matrix: <a href='matrix/lang_createtrigger.html#R-65489-09702-43837-30882-04138-20719-06311-14611'>context</a>, <a href='matrix/matrix_dlang_createtrigger.html#R-65489-09702-43837-30882-04138-20719-06311-14611'>detail</a>)</i></p></dd>
+
+<dt><b>R-65499-53765-60887-64265-16155-35530-39670-45020</b></dt>
+<dd><p>On the other hand, passive mode might leave the checkpoint unfinished if there are concurrent readers or writers.
+<i>(source: <a href="c3ref/wal_checkpoint_v2.html">c3ref/wal_checkpoint_v2.html</a>, checked-by: tcl/e_walckpt.test, th3/req1/checkpoint01.test, matrix: <a href='matrix/c3ref/wal_checkpoint_v2.html#R-65499-53765-60887-64265-16155-35530-39670-45020'>context</a>, <a href='matrix/matrix_dwal_checkpoint_v2.html#R-65499-53765-60887-64265-16155-35530-39670-45020'>detail</a>)</i></p></dd>
+
+<dt><b>R-65507-55649-05448-07822-60967-65270-42964-52514</b></dt>
+<dd><p>The sqlite_stat1 is an internal table created by the ANALYZE command and used to hold supplemental information about tables and indexes that the query planner can use to help it find better ways of performing queries.
+<i>(source: <a href="fileformat2.html">fileformat2.html</a>, matrix: <a href='matrix/fileformat2.html#R-65507-55649-05448-07822-60967-65270-42964-52514'>context</a>, <a href='matrix/matrix_dfileformat2.html#R-65507-55649-05448-07822-60967-65270-42964-52514'>detail</a>)</i></p></dd>
+
+<dt><b>R-65524-61849-43329-61953-54493-09890-31645-08912</b></dt>
+<dd><p>If an application-defined SQL function named "regexp" is added at run-time, then the "X REGEXP Y" operator will be implemented as a call to "regexp(Y,X)".
+<i>(source: <a href="lang_expr.html">lang_expr.html</a>, checked-by: tcl/e_expr.test, matrix: <a href='matrix/lang_expr.html#R-65524-61849-43329-61953-54493-09890-31645-08912'>context</a>, <a href='matrix/matrix_dlang_expr.html#R-65524-61849-43329-61953-54493-09890-31645-08912'>detail</a>)</i></p></dd>
+
+
+</dl>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/requirements.in?m=6f99a0bcbdf3241d7">2015-09-11 22:51:21</a> UTC </small></i></p>
+
diff --git a/www/rescode.html b/www/rescode.html
new file mode 100644
index 0000000..3baa4fd
--- /dev/null
+++ b/www/rescode.html
@@ -0,0 +1,1561 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Result and Error Codes</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Result and Error Codes
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#result_codes_versus_error_codes">1. Result Codes versus Error Codes</a></div>
+<div class="fancy-toc1"><a href="#primary_result_codes_versus_extended_result_codes">2. Primary Result Codes versus Extended Result Codes</a></div>
+<div class="fancy-toc1"><a href="#definitions">3. Definitions</a></div>
+<div class="fancy-toc1"><a href="#primary_result_code_list">4. Primary Result Code List</a></div>
+<div class="fancy-toc1"><a href="#extended_result_code_list">5. Extended Result Code List</a></div>
+<div class="fancy-toc1"><a href="#result_code_meanings">6. Result Code Meanings</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h2 style="margin-left:1.0em" notoc="1" id="overview"> Overview</h2>
+
+<p>
+Many of the routines in the SQLite <a href="c3ref/intro.html">C-language Interface</a> return
+numeric result codes indicating either success or failure, and
+in the event of a failure, providing some idea of the cause of
+the failure. This document strives to explain what each
+of those numeric result codes means.
+
+</p><h1 id="result_codes_versus_error_codes"><span>1. </span>Result Codes versus Error Codes</h1>
+
+<p>
+"Error codes" are a subset of "result codes" that indicate that
+something has gone wrong. There are only a few non-error result
+codes: <a href="rescode.html#ok">SQLITE_OK</a>, <a href="rescode.html#row">SQLITE_ROW</a>, and <a href="rescode.html#done">SQLITE_DONE</a>. The term
+"error code" means any result code other than these three.
+
+<a name="pve"></a>
+
+</p><h1 id="primary_result_codes_versus_extended_result_codes"><span>2. </span>Primary Result Codes versus Extended Result Codes</h1>
+
+<p>
+Result codes are signed 32-bit integers.
+The least significant 8 bits of the result code define a broad category
+and are called the "primary result code". More significant bits provide
+more detailed information about the error and are called the
+"extended result code"
+
+</p><p>
+Note that the primary result code is always a part of the extended
+result code. Given a full 32-bit extended result code, the application
+can always find the corresponding primary result code merely by extracting
+the least significant 8 bits of the extended result code.
+
+</p><p>
+All extended result codes are also error codes. Hence the terms
+"extended result code" and "extended error code" are interchangeable.
+
+</p><p>
+For historic compatibility, the C-language interfaces return
+primary result codes by default.
+The extended result code for the most recent error can be
+retrieved using the <a href="c3ref/errcode.html">sqlite3_extended_errcode()</a> interface.
+The <a href="c3ref/extended_result_codes.html">sqlite3_extended_result_codes()</a> interface can be used to put
+a <a href="c3ref/sqlite3.html">database connection</a> into a mode where it returns the
+extended result codes instead of the primary result codes.
+
+</p><h1 id="definitions"><span>3. </span>Definitions</h1>
+
+<p>
+All result codes are integers.
+Symbolic names for all result codes are created using
+"#define" macros in the sqlite3.h header file.
+There are separate sections in the sqlite3.h header file for
+the <a href="c3ref/c_abort.html">result code definitions</a> and the <a href="c3ref/c_abort_rollback.html">extended result code definitions</a>.
+
+</p><p>
+Primary result code symbolic names are of the form "SQLITE_XXXXXX" where
+XXXXXX is a sequence of uppercase alphabetic characters. Extended
+result code names are of the form "SQLITE_XXXXXX_YYYYYYY" where
+the XXXXXX part is the corresponding primary result code and the
+YYYYYYY is an extension that further classifies the result code.
+
+</p><p>
+The names and numeric values for existing result codes are fixed
+and unchanging. However, new result codes, and especially new extended
+result codes, might appear in future releases of SQLite.
+
+
+</p><h1 id="primary_result_code_list"><span>4. </span>Primary Result Code List</h1>
+<p>The 31 result codes are
+ <a href="c3ref/c_abort.html">defined in sqlite3.h</a> and are listed in
+ alphabetical order below:
+<div class='columns' style='columns: 16em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='rescode.html#abort'>SQLITE_ABORT&nbsp;(4)</a></li>
+<li><a href='rescode.html#auth'>SQLITE_AUTH&nbsp;(23)</a></li>
+<li><a href='rescode.html#busy'>SQLITE_BUSY&nbsp;(5)</a></li>
+<li><a href='rescode.html#cantopen'>SQLITE_CANTOPEN&nbsp;(14)</a></li>
+<li><a href='rescode.html#constraint'>SQLITE_CONSTRAINT&nbsp;(19)</a></li>
+<li><a href='rescode.html#corrupt'>SQLITE_CORRUPT&nbsp;(11)</a></li>
+<li><a href='rescode.html#done'>SQLITE_DONE&nbsp;(101)</a></li>
+<li><a href='rescode.html#empty'>SQLITE_EMPTY&nbsp;(16)</a></li>
+<li><a href='rescode.html#error'>SQLITE_ERROR&nbsp;(1)</a></li>
+<li><a href='rescode.html#format'>SQLITE_FORMAT&nbsp;(24)</a></li>
+<li><a href='rescode.html#full'>SQLITE_FULL&nbsp;(13)</a></li>
+<li><a href='rescode.html#internal'>SQLITE_INTERNAL&nbsp;(2)</a></li>
+<li><a href='rescode.html#interrupt'>SQLITE_INTERRUPT&nbsp;(9)</a></li>
+<li><a href='rescode.html#ioerr'>SQLITE_IOERR&nbsp;(10)</a></li>
+<li><a href='rescode.html#locked'>SQLITE_LOCKED&nbsp;(6)</a></li>
+<li><a href='rescode.html#mismatch'>SQLITE_MISMATCH&nbsp;(20)</a></li>
+<li><a href='rescode.html#misuse'>SQLITE_MISUSE&nbsp;(21)</a></li>
+<li><a href='rescode.html#nolfs'>SQLITE_NOLFS&nbsp;(22)</a></li>
+<li><a href='rescode.html#nomem'>SQLITE_NOMEM&nbsp;(7)</a></li>
+<li><a href='rescode.html#notadb'>SQLITE_NOTADB&nbsp;(26)</a></li>
+<li><a href='rescode.html#notfound'>SQLITE_NOTFOUND&nbsp;(12)</a></li>
+<li><a href='rescode.html#notice'>SQLITE_NOTICE&nbsp;(27)</a></li>
+<li><a href='rescode.html#ok'>SQLITE_OK&nbsp;(0)</a></li>
+<li><a href='rescode.html#perm'>SQLITE_PERM&nbsp;(3)</a></li>
+<li><a href='rescode.html#protocol'>SQLITE_PROTOCOL&nbsp;(15)</a></li>
+<li><a href='rescode.html#range'>SQLITE_RANGE&nbsp;(25)</a></li>
+<li><a href='rescode.html#readonly'>SQLITE_READONLY&nbsp;(8)</a></li>
+<li><a href='rescode.html#row'>SQLITE_ROW&nbsp;(100)</a></li>
+<li><a href='rescode.html#schema'>SQLITE_SCHEMA&nbsp;(17)</a></li>
+<li><a href='rescode.html#toobig'>SQLITE_TOOBIG&nbsp;(18)</a></li>
+<li><a href='rescode.html#warning'>SQLITE_WARNING&nbsp;(28)</a></li>
+</ul>
+</div>
+<a name="extrc"></a>
+
+</p><h1 id="extended_result_code_list"><span>5. </span>Extended Result Code List</h1>
+<p>The 74 extended result codes
+ are <a href="c3ref/c_abort_rollback.html">defined in sqlite3.h</a> and are
+ listed in alphabetical order below:
+<div class='columns' style='columns: 22em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='rescode.html#abort_rollback'>SQLITE_ABORT_ROLLBACK&nbsp;(516)</a></li>
+<li><a href='rescode.html#auth_user'>SQLITE_AUTH_USER&nbsp;(279)</a></li>
+<li><a href='rescode.html#busy_recovery'>SQLITE_BUSY_RECOVERY&nbsp;(261)</a></li>
+<li><a href='rescode.html#busy_snapshot'>SQLITE_BUSY_SNAPSHOT&nbsp;(517)</a></li>
+<li><a href='rescode.html#busy_timeout'>SQLITE_BUSY_TIMEOUT&nbsp;(773)</a></li>
+<li><a href='rescode.html#cantopen_convpath'>SQLITE_CANTOPEN_CONVPATH&nbsp;(1038)</a></li>
+<li><a href='rescode.html#cantopen_dirtywal'>SQLITE_CANTOPEN_DIRTYWAL&nbsp;(1294)</a></li>
+<li><a href='rescode.html#cantopen_fullpath'>SQLITE_CANTOPEN_FULLPATH&nbsp;(782)</a></li>
+<li><a href='rescode.html#cantopen_isdir'>SQLITE_CANTOPEN_ISDIR&nbsp;(526)</a></li>
+<li><a href='rescode.html#cantopen_notempdir'>SQLITE_CANTOPEN_NOTEMPDIR&nbsp;(270)</a></li>
+<li><a href='rescode.html#cantopen_symlink'>SQLITE_CANTOPEN_SYMLINK&nbsp;(1550)</a></li>
+<li><a href='rescode.html#constraint_check'>SQLITE_CONSTRAINT_CHECK&nbsp;(275)</a></li>
+<li><a href='rescode.html#constraint_commithook'>SQLITE_CONSTRAINT_COMMITHOOK&nbsp;(531)</a></li>
+<li><a href='rescode.html#constraint_datatype'>SQLITE_CONSTRAINT_DATATYPE&nbsp;(3091)</a></li>
+<li><a href='rescode.html#constraint_foreignkey'>SQLITE_CONSTRAINT_FOREIGNKEY&nbsp;(787)</a></li>
+<li><a href='rescode.html#constraint_function'>SQLITE_CONSTRAINT_FUNCTION&nbsp;(1043)</a></li>
+<li><a href='rescode.html#constraint_notnull'>SQLITE_CONSTRAINT_NOTNULL&nbsp;(1299)</a></li>
+<li><a href='rescode.html#constraint_pinned'>SQLITE_CONSTRAINT_PINNED&nbsp;(2835)</a></li>
+<li><a href='rescode.html#constraint_primarykey'>SQLITE_CONSTRAINT_PRIMARYKEY&nbsp;(1555)</a></li>
+<li><a href='rescode.html#constraint_rowid'>SQLITE_CONSTRAINT_ROWID&nbsp;(2579)</a></li>
+<li><a href='rescode.html#constraint_trigger'>SQLITE_CONSTRAINT_TRIGGER&nbsp;(1811)</a></li>
+<li><a href='rescode.html#constraint_unique'>SQLITE_CONSTRAINT_UNIQUE&nbsp;(2067)</a></li>
+<li><a href='rescode.html#constraint_vtab'>SQLITE_CONSTRAINT_VTAB&nbsp;(2323)</a></li>
+<li><a href='rescode.html#corrupt_index'>SQLITE_CORRUPT_INDEX&nbsp;(779)</a></li>
+<li><a href='rescode.html#corrupt_sequence'>SQLITE_CORRUPT_SEQUENCE&nbsp;(523)</a></li>
+<li><a href='rescode.html#corrupt_vtab'>SQLITE_CORRUPT_VTAB&nbsp;(267)</a></li>
+<li><a href='rescode.html#error_missing_collseq'>SQLITE_ERROR_MISSING_COLLSEQ&nbsp;(257)</a></li>
+<li><a href='rescode.html#error_retry'>SQLITE_ERROR_RETRY&nbsp;(513)</a></li>
+<li><a href='rescode.html#error_snapshot'>SQLITE_ERROR_SNAPSHOT&nbsp;(769)</a></li>
+<li><a href='rescode.html#ioerr_access'>SQLITE_IOERR_ACCESS&nbsp;(3338)</a></li>
+<li><a href='rescode.html#ioerr_auth'>SQLITE_IOERR_AUTH&nbsp;(7178)</a></li>
+<li><a href='rescode.html#ioerr_begin_atomic'>SQLITE_IOERR_BEGIN_ATOMIC&nbsp;(7434)</a></li>
+<li><a href='rescode.html#ioerr_blocked'>SQLITE_IOERR_BLOCKED&nbsp;(2826)</a></li>
+<li><a href='rescode.html#ioerr_checkreservedlock'>SQLITE_IOERR_CHECKRESERVEDLOCK&nbsp;(3594)</a></li>
+<li><a href='rescode.html#ioerr_close'>SQLITE_IOERR_CLOSE&nbsp;(4106)</a></li>
+<li><a href='rescode.html#ioerr_commit_atomic'>SQLITE_IOERR_COMMIT_ATOMIC&nbsp;(7690)</a></li>
+<li><a href='rescode.html#ioerr_convpath'>SQLITE_IOERR_CONVPATH&nbsp;(6666)</a></li>
+<li><a href='rescode.html#ioerr_corruptfs'>SQLITE_IOERR_CORRUPTFS&nbsp;(8458)</a></li>
+<li><a href='rescode.html#ioerr_data'>SQLITE_IOERR_DATA&nbsp;(8202)</a></li>
+<li><a href='rescode.html#ioerr_delete'>SQLITE_IOERR_DELETE&nbsp;(2570)</a></li>
+<li><a href='rescode.html#ioerr_delete_noent'>SQLITE_IOERR_DELETE_NOENT&nbsp;(5898)</a></li>
+<li><a href='rescode.html#ioerr_dir_close'>SQLITE_IOERR_DIR_CLOSE&nbsp;(4362)</a></li>
+<li><a href='rescode.html#ioerr_dir_fsync'>SQLITE_IOERR_DIR_FSYNC&nbsp;(1290)</a></li>
+<li><a href='rescode.html#ioerr_fstat'>SQLITE_IOERR_FSTAT&nbsp;(1802)</a></li>
+<li><a href='rescode.html#ioerr_fsync'>SQLITE_IOERR_FSYNC&nbsp;(1034)</a></li>
+<li><a href='rescode.html#ioerr_gettemppath'>SQLITE_IOERR_GETTEMPPATH&nbsp;(6410)</a></li>
+<li><a href='rescode.html#ioerr_lock'>SQLITE_IOERR_LOCK&nbsp;(3850)</a></li>
+<li><a href='rescode.html#ioerr_mmap'>SQLITE_IOERR_MMAP&nbsp;(6154)</a></li>
+<li><a href='rescode.html#ioerr_nomem'>SQLITE_IOERR_NOMEM&nbsp;(3082)</a></li>
+<li><a href='rescode.html#ioerr_rdlock'>SQLITE_IOERR_RDLOCK&nbsp;(2314)</a></li>
+<li><a href='rescode.html#ioerr_read'>SQLITE_IOERR_READ&nbsp;(266)</a></li>
+<li><a href='rescode.html#ioerr_rollback_atomic'>SQLITE_IOERR_ROLLBACK_ATOMIC&nbsp;(7946)</a></li>
+<li><a href='rescode.html#ioerr_seek'>SQLITE_IOERR_SEEK&nbsp;(5642)</a></li>
+<li><a href='rescode.html#ioerr_shmlock'>SQLITE_IOERR_SHMLOCK&nbsp;(5130)</a></li>
+<li><a href='rescode.html#ioerr_shmmap'>SQLITE_IOERR_SHMMAP&nbsp;(5386)</a></li>
+<li><a href='rescode.html#ioerr_shmopen'>SQLITE_IOERR_SHMOPEN&nbsp;(4618)</a></li>
+<li><a href='rescode.html#ioerr_shmsize'>SQLITE_IOERR_SHMSIZE&nbsp;(4874)</a></li>
+<li><a href='rescode.html#ioerr_short_read'>SQLITE_IOERR_SHORT_READ&nbsp;(522)</a></li>
+<li><a href='rescode.html#ioerr_truncate'>SQLITE_IOERR_TRUNCATE&nbsp;(1546)</a></li>
+<li><a href='rescode.html#ioerr_unlock'>SQLITE_IOERR_UNLOCK&nbsp;(2058)</a></li>
+<li><a href='rescode.html#ioerr_vnode'>SQLITE_IOERR_VNODE&nbsp;(6922)</a></li>
+<li><a href='rescode.html#ioerr_write'>SQLITE_IOERR_WRITE&nbsp;(778)</a></li>
+<li><a href='rescode.html#locked_sharedcache'>SQLITE_LOCKED_SHAREDCACHE&nbsp;(262)</a></li>
+<li><a href='rescode.html#locked_vtab'>SQLITE_LOCKED_VTAB&nbsp;(518)</a></li>
+<li><a href='rescode.html#notice_recover_rollback'>SQLITE_NOTICE_RECOVER_ROLLBACK&nbsp;(539)</a></li>
+<li><a href='rescode.html#notice_recover_wal'>SQLITE_NOTICE_RECOVER_WAL&nbsp;(283)</a></li>
+<li><a href='rescode.html#ok_load_permanently'>SQLITE_OK_LOAD_PERMANENTLY&nbsp;(256)</a></li>
+<li><a href='rescode.html#readonly_cantinit'>SQLITE_READONLY_CANTINIT&nbsp;(1288)</a></li>
+<li><a href='rescode.html#readonly_cantlock'>SQLITE_READONLY_CANTLOCK&nbsp;(520)</a></li>
+<li><a href='rescode.html#readonly_dbmoved'>SQLITE_READONLY_DBMOVED&nbsp;(1032)</a></li>
+<li><a href='rescode.html#readonly_directory'>SQLITE_READONLY_DIRECTORY&nbsp;(1544)</a></li>
+<li><a href='rescode.html#readonly_recovery'>SQLITE_READONLY_RECOVERY&nbsp;(264)</a></li>
+<li><a href='rescode.html#readonly_rollback'>SQLITE_READONLY_ROLLBACK&nbsp;(776)</a></li>
+<li><a href='rescode.html#warning_autoindex'>SQLITE_WARNING_AUTOINDEX&nbsp;(284)</a></li>
+</ul>
+</div>
+
+</p><h1 id="result_code_meanings"><span>6. </span>Result Code Meanings</h1>
+<p>
+The meanings for all 105
+result code values are shown below,
+in numeric order.
+
+<!--------------------------------------------------------------->
+<a name="ok"></a>
+<h3>(0) SQLITE_OK</h3>
+<p>
+ The SQLITE_OK result code means that the operation was successful and
+ that there were no errors. Most other result codes indicate an error.
+
+
+<!--------------------------------------------------------------->
+<a name="error"></a>
+<h3>(1) SQLITE_ERROR</h3>
+<p>
+ The SQLITE_ERROR result code is a generic error code that is used when
+ no other more specific error code is available.
+
+
+<!--------------------------------------------------------------->
+<a name="internal"></a>
+<h3>(2) SQLITE_INTERNAL</h3>
+<p>
+ The SQLITE_INTERNAL result code indicates an internal malfunction.
+ In a working version of SQLite, an application should never see this
+ result code. If application does encounter this result code, it shows
+ that there is a bug in the database engine.
+ <p>
+ SQLite does not currently generate this result code.
+ However, <a href="appfunc.html">application-defined SQL functions</a> or
+ <a href="vtab.html">virtual tables</a>, or <a href="vfs.html">VFSes</a>, or other extensions might cause this
+ result code to be returned.
+
+
+<!--------------------------------------------------------------->
+<a name="perm"></a>
+<h3>(3) SQLITE_PERM</h3>
+<p>
+ The SQLITE_PERM result code indicates that the requested access mode
+ for a newly created database could not be provided.
+
+
+<!--------------------------------------------------------------->
+<a name="abort"></a>
+<h3>(4) SQLITE_ABORT</h3>
+<p>
+ The SQLITE_ABORT result code indicates that an operation was aborted
+ prior to completion, usually be application request.
+ See also: <a href="rescode.html#interrupt">SQLITE_INTERRUPT</a>.
+ <p>
+ If the callback function to <a href="c3ref/exec.html">sqlite3_exec()</a> returns non-zero, then
+ sqlite3_exec() will return SQLITE_ABORT.
+ <p>
+ If a <a href="lang_transaction.html">ROLLBACK</a> operation occurs on the same <a href="c3ref/sqlite3.html">database connection</a> as
+ a pending read or write, then the pending read or write may fail with
+ an SQLITE_ABORT or <a href="rescode.html#abort_rollback">SQLITE_ABORT_ROLLBACK</a> error.
+ <p>
+ In addition to being a result code,
+ the SQLITE_ABORT value is also used as a <a href="c3ref/c_fail.html">conflict resolution mode</a>
+ returned from the <a href="c3ref/vtab_on_conflict.html">sqlite3_vtab_on_conflict()</a> interface.
+
+
+<!--------------------------------------------------------------->
+<a name="busy"></a>
+<h3>(5) SQLITE_BUSY</h3>
+<p>
+ The SQLITE_BUSY result code indicates that the database file could not
+ be written (or in some cases read) because of concurrent activity by
+ some other <a href="c3ref/sqlite3.html">database connection</a>, usually a database connection in a
+ separate process.
+ <p>
+ For example, if process A is in the middle of a large write transaction
+ and at the same time process B attempts to start a new write transaction,
+ process B will get back an SQLITE_BUSY result because SQLite only supports
+ one writer at a time. Process B will need to wait for process A to finish
+ its transaction before starting a new transaction. The
+ <a href="c3ref/busy_timeout.html">sqlite3_busy_timeout()</a> and <a href="c3ref/busy_handler.html">sqlite3_busy_handler()</a> interfaces and
+ the <a href="pragma.html#pragma_busy_timeout">busy_timeout pragma</a> are available to process B to help it deal
+ with SQLITE_BUSY errors.
+ <p>
+ An SQLITE_BUSY error can occur at any point in a transaction: when the
+ transaction is first started, during any write or update operations, or
+ when the transaction commits.
+ To avoid encountering SQLITE_BUSY errors in the middle of a transaction,
+ the application can use <a href="lang_transaction.html#immediate">BEGIN IMMEDIATE</a> instead of just <a href="lang_transaction.html">BEGIN</a> to
+ start a transaction. The <a href="lang_transaction.html#immediate">BEGIN IMMEDIATE</a> command might itself return
+ SQLITE_BUSY, but if it succeeds, then SQLite guarantees that no
+ subsequent operations on the same database through the next <a href="lang_transaction.html">COMMIT</a>
+ will return SQLITE_BUSY.
+ <p>
+ See also: <a href="rescode.html#busy_recovery">SQLITE_BUSY_RECOVERY</a> and <a href="rescode.html#busy_snapshot">SQLITE_BUSY_SNAPSHOT</a>.
+ <p>
+ The SQLITE_BUSY result code differs from <a href="rescode.html#locked">SQLITE_LOCKED</a> in that
+ SQLITE_BUSY indicates a conflict with a
+ separate <a href="c3ref/sqlite3.html">database connection</a>, probably in a separate process,
+ whereas <a href="rescode.html#locked">SQLITE_LOCKED</a>
+ indicates a conflict within the same <a href="c3ref/sqlite3.html">database connection</a> (or sometimes
+ a database connection with a <a href="sharedcache.html">shared cache</a>).
+
+
+<!--------------------------------------------------------------->
+<a name="locked"></a>
+<h3>(6) SQLITE_LOCKED</h3>
+<p>
+ The SQLITE_LOCKED result code indicates that a write operation could not
+ continue because of a conflict within the same <a href="c3ref/sqlite3.html">database connection</a> or
+ a conflict with a different database connection that uses a <a href="sharedcache.html">shared cache</a>.
+ <p>
+ For example, a <a href="lang_droptable.html">DROP TABLE</a> statement cannot be run while another thread
+ is reading from that table on the same <a href="c3ref/sqlite3.html">database connection</a> because
+ dropping the table would delete the table out from under the concurrent
+ reader.
+ <p>
+ The SQLITE_LOCKED result code differs from <a href="rescode.html#busy">SQLITE_BUSY</a> in that
+ SQLITE_LOCKED indicates a conflict on the same <a href="c3ref/sqlite3.html">database connection</a>
+ (or on a connection with a <a href="sharedcache.html">shared cache</a>) whereas <a href="rescode.html#busy">SQLITE_BUSY</a> indicates
+ a conflict with a different database connection, probably in a different
+ process.
+
+
+<!--------------------------------------------------------------->
+<a name="nomem"></a>
+<h3>(7) SQLITE_NOMEM</h3>
+<p>
+ The SQLITE_NOMEM result code indicates that SQLite was unable to allocate
+ all the memory it needed to complete the operation. In other words, an
+ internal call to <a href="c3ref/free.html">sqlite3_malloc()</a> or <a href="c3ref/free.html">sqlite3_realloc()</a> has failed in
+ a case where the memory being allocated was required in order to continue
+ the operation.
+
+
+<!--------------------------------------------------------------->
+<a name="readonly"></a>
+<h3>(8) SQLITE_READONLY</h3>
+<p>
+ The SQLITE_READONLY result code is returned when an attempt is made to
+ alter some data for which the current database connection does not have
+ write permission.
+
+
+<!--------------------------------------------------------------->
+<a name="interrupt"></a>
+<h3>(9) SQLITE_INTERRUPT</h3>
+<p>
+ The SQLITE_INTERRUPT result code indicates that an operation was
+ interrupted by the <a href="c3ref/interrupt.html">sqlite3_interrupt()</a> interface.
+ See also: <a href="rescode.html#abort">SQLITE_ABORT</a>
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr"></a>
+<h3>(10) SQLITE_IOERR</h3>
+<p>
+ The SQLITE_IOERR result code says that the operation could not finish
+ because the operating system reported an I/O error.
+ <p>
+ A full disk drive will normally give an <a href="rescode.html#full">SQLITE_FULL</a> error rather than
+ an SQLITE_IOERR error.
+ <p>
+ There are many different extended result codes for I/O errors that
+ identify the specific I/O operation that failed.
+
+
+<!--------------------------------------------------------------->
+<a name="corrupt"></a>
+<h3>(11) SQLITE_CORRUPT</h3>
+<p>
+ The SQLITE_CORRUPT result code indicates that the database file has
+ been corrupted. See the <a href="lockingv3.html#how_to_corrupt">How To Corrupt Your Database Files</a> for
+ further discussion on how corruption can occur.
+
+
+<!--------------------------------------------------------------->
+<a name="notfound"></a>
+<h3>(12) SQLITE_NOTFOUND</h3>
+<p>
+ The SQLITE_NOTFOUND result code is exposed in three ways:
+ <ol>
+ <li><p>
+ SQLITE_NOTFOUND can be returned by the <a href="c3ref/file_control.html">sqlite3_file_control()</a> interface
+ to indicate that the <a href="c3ref/c_fcntl_begin_atomic_write.html">file control opcode</a> passed as the third argument
+ was not recognized by the underlying <a href="vfs.html">VFS</a>.
+ <li><p>
+ SQLITE_NOTFOUND can also be returned by the xSetSystemCall() method of
+ an <a href="c3ref/vfs.html">sqlite3_vfs</a> object.
+ <li><p>
+ SQLITE_NOTFOUND an be returned by <a href="c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> to indicate
+ that the right-hand operand of a constraint is not available to the
+ <a href="vtab.html#xbestindex">xBestIndex method</a> that made the call.
+ </ol>
+ <p>
+ The SQLITE_NOTFOUND result code is also used
+ internally by the SQLite implementation, but those internal uses are
+ not exposed to the application.
+
+
+<!--------------------------------------------------------------->
+<a name="full"></a>
+<h3>(13) SQLITE_FULL</h3>
+<p>
+ The SQLITE_FULL result code indicates that a write could not complete
+ because the disk is full. Note that this error can occur when trying
+ to write information into the main database file, or it can also
+ occur when writing into <a href="tempfiles.html">temporary disk files</a>.
+ <p>
+ Sometimes applications encounter this error even though there is an
+ abundance of primary disk space because the error occurs when writing
+ into <a href="tempfiles.html">temporary disk files</a> on a system where temporary files are stored
+ on a separate partition with much less space that the primary disk.
+
+
+<!--------------------------------------------------------------->
+<a name="cantopen"></a>
+<h3>(14) SQLITE_CANTOPEN</h3>
+<p>
+ The SQLITE_CANTOPEN result code indicates that SQLite was unable to
+ open a file. The file in question might be a primary database file
+ or one of several <a href="tempfiles.html">temporary disk files</a>.
+
+
+<!--------------------------------------------------------------->
+<a name="protocol"></a>
+<h3>(15) SQLITE_PROTOCOL</h3>
+<p>
+ The SQLITE_PROTOCOL result code indicates a problem with the file locking
+ protocol used by SQLite. The SQLITE_PROTOCOL error is currently only
+ returned when using <a href="wal.html">WAL mode</a> and attempting to start a new transaction.
+ There is a race condition that can occur when two separate
+ <a href="c3ref/sqlite3.html">database connections</a> both try to start a transaction at the same time
+ in <a href="wal.html">WAL mode</a>. The loser of the race backs off and tries again, after
+ a brief delay. If the same connection loses the locking race dozens
+ of times over a span of multiple seconds, it will eventually give up and
+ return SQLITE_PROTOCOL. The SQLITE_PROTOCOL error should appear in practice
+ very, very rarely, and only when there are many separate processes all
+ competing intensely to write to the same database.
+
+
+<!--------------------------------------------------------------->
+<a name="empty"></a>
+<h3>(16) SQLITE_EMPTY</h3>
+<p>
+ The SQLITE_EMPTY result code is not currently used.
+
+
+<!--------------------------------------------------------------->
+<a name="schema"></a>
+<h3>(17) SQLITE_SCHEMA</h3>
+<p>
+ The SQLITE_SCHEMA result code indicates that the database schema
+ has changed. This result code can be returned from <a href="c3ref/step.html">sqlite3_step()</a> for
+ a <a href="c3ref/stmt.html">prepared statement</a> that was generated using <a href="c3ref/prepare.html">sqlite3_prepare()</a> or
+ <a href="c3ref/prepare.html">sqlite3_prepare16()</a>. If the database schema was changed by some other
+ process in between the time that the statement was prepared and the time
+ the statement was run, this error can result.
+ <p>
+ If a <a href="c3ref/stmt.html">prepared statement</a> is generated from <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> then
+ the statement is automatically re-prepared if the schema changes, up to
+ <a href="compile.html#max_schema_retry">SQLITE_MAX_SCHEMA_RETRY</a> times (default: 50). The <a href="c3ref/step.html">sqlite3_step()</a>
+ interface will only return SQLITE_SCHEMA back to the application if
+ the failure persists after these many retries.
+
+
+<!--------------------------------------------------------------->
+<a name="toobig"></a>
+<h3>(18) SQLITE_TOOBIG</h3>
+<p>
+ The SQLITE_TOOBIG error code indicates that a string or BLOB was
+ too large. The default maximum length of a string or BLOB in SQLite is
+ 1,000,000,000 bytes. This maximum length can be changed at compile-time
+ using the <a href="limits.html#max_length">SQLITE_MAX_LENGTH</a> compile-time option, or at run-time using
+ the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a>,...) interface. The
+ SQLITE_TOOBIG error results when SQLite encounters a string or BLOB
+ that exceeds the compile-time or run-time limit.
+ <p>
+ The SQLITE_TOOBIG error code can also result when an oversized SQL
+ statement is passed into one of the <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> interfaces.
+ The maximum length of an SQL statement defaults to a much smaller
+ value of 1,000,000,000 bytes. The maximum SQL statement length can be
+ set at compile-time using <a href="limits.html#max_sql_length">SQLITE_MAX_SQL_LENGTH</a> or at run-time
+ using <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitsqllength">SQLITE_LIMIT_SQL_LENGTH</a>,...).
+
+
+<!--------------------------------------------------------------->
+<a name="constraint"></a>
+<h3>(19) SQLITE_CONSTRAINT</h3>
+<p>
+ The SQLITE_CONSTRAINT error code means that an SQL constraint violation
+ occurred while trying to process an SQL statement. Additional information
+ about the failed constraint can be found by consulting the
+ accompanying error message (returned via <a href="c3ref/errcode.html">sqlite3_errmsg()</a> or
+ <a href="c3ref/errcode.html">sqlite3_errmsg16()</a>) or by looking at the <a href="rescode.html#extrc">extended error code</a>.
+ <p>
+ The SQLITE_CONSTRAINT code can also be used as the return value from
+ the <a href="vtab.html#xbestindex">xBestIndex()</a> method of a <a href="vtab.html">virtual table</a> implementation. When
+ xBestIndex() returns SQLITE_CONSTRAINT, that indicates that the particular
+ combination of inputs submitted to xBestIndex() cannot result in a
+ usable query plan and should not be given further consideration.
+
+
+<!--------------------------------------------------------------->
+<a name="mismatch"></a>
+<h3>(20) SQLITE_MISMATCH</h3>
+<p>
+ The SQLITE_MISMATCH error code indicates a datatype mismatch.
+ <p>
+ SQLite is normally very forgiving about mismatches between the type of
+ a value and the declared type of the container in which that value is
+ to be stored. For example, SQLite allows the application to store
+ a large BLOB in a column with a declared type of BOOLEAN. But in a few
+ cases, SQLite is strict about types. The SQLITE_MISMATCH error is
+ returned in those few cases when the types do not match.
+ <p>
+ The <a href="lang_createtable.html#rowid">rowid</a> of a table must be an integer. Attempt to set the <a href="lang_createtable.html#rowid">rowid</a>
+ to anything other than an integer (or a NULL which will be automatically
+ converted into the next available integer rowid) results in an
+ SQLITE_MISMATCH error.
+
+
+<!--------------------------------------------------------------->
+<a name="misuse"></a>
+<h3>(21) SQLITE_MISUSE</h3>
+<p>
+ The SQLITE_MISUSE return code might be returned if the application uses
+ any SQLite interface in a way that is undefined or unsupported. For
+ example, using a <a href="c3ref/stmt.html">prepared statement</a> after that prepared statement has
+ been <a href="c3ref/finalize.html">finalized</a> might result in an SQLITE_MISUSE error.
+ <p>
+ SQLite tries to detect misuse and report the misuse using this result code.
+ However, there is no guarantee that the detection of misuse will be
+ successful. Misuse detection is probabilistic. Applications should
+ never depend on an SQLITE_MISUSE return value.
+ <p>
+ If SQLite ever returns SQLITE_MISUSE from any interface, that means that
+ the application is incorrectly coded and needs to be fixed. Do not ship
+ an application that sometimes returns SQLITE_MISUSE from a standard
+ SQLite interface because that application contains potentially serious bugs.
+
+
+<!--------------------------------------------------------------->
+<a name="nolfs"></a>
+<h3>(22) SQLITE_NOLFS</h3>
+<p>
+ The SQLITE_NOLFS error can be returned on systems that do not support
+ large files when the database grows to be larger than what the filesystem
+ can handle. "NOLFS" stands for "NO Large File Support".
+
+
+<!--------------------------------------------------------------->
+<a name="auth"></a>
+<h3>(23) SQLITE_AUTH</h3>
+<p>
+ The SQLITE_AUTH error is returned when the
+ <a href="c3ref/set_authorizer.html">authorizer callback</a> indicates that an
+ SQL statement being prepared is not authorized.
+
+
+<!--------------------------------------------------------------->
+<a name="format"></a>
+<h3>(24) SQLITE_FORMAT</h3>
+<p>
+ The SQLITE_FORMAT error code is not currently used by SQLite.
+
+
+<!--------------------------------------------------------------->
+<a name="range"></a>
+<h3>(25) SQLITE_RANGE</h3>
+<p>
+ The SQLITE_RANGE error indices that the parameter number argument
+ to one of the <a href="c3ref/bind_blob.html">sqlite3_bind</a> routines or the
+ column number in one of the <a href="c3ref/column_blob.html">sqlite3_column</a>
+ routines is out of range.
+
+
+<!--------------------------------------------------------------->
+<a name="notadb"></a>
+<h3>(26) SQLITE_NOTADB</h3>
+<p>
+ When attempting to open a file, the SQLITE_NOTADB error indicates that
+ the file being opened does not appear to be an SQLite database file.
+
+
+<!--------------------------------------------------------------->
+<a name="notice"></a>
+<h3>(27) SQLITE_NOTICE</h3>
+<p>
+ The SQLITE_NOTICE result code is not returned by any C/C++ interface.
+ However, SQLITE_NOTICE (or rather one of its <a href="rescode.html#extrc">extended error codes</a>)
+ is sometimes used as the first argument in an <a href="c3ref/log.html">sqlite3_log()</a> callback
+ to indicate that an unusual operation is taking place.
+
+
+<!--------------------------------------------------------------->
+<a name="warning"></a>
+<h3>(28) SQLITE_WARNING</h3>
+<p>
+ The SQLITE_WARNING result code is not returned by any C/C++ interface.
+ However, SQLITE_WARNING (or rather one of its <a href="rescode.html#extrc">extended error codes</a>)
+ is sometimes used as the first argument in an <a href="c3ref/log.html">sqlite3_log()</a> callback
+ to indicate that an unusual and possibly ill-advised operation is
+ taking place.
+
+
+<!--------------------------------------------------------------->
+<a name="row"></a>
+<h3>(100) SQLITE_ROW</h3>
+<p>
+ The SQLITE_ROW result code returned by
+ <a href="c3ref/step.html">sqlite3_step()</a> indicates that another row of output is available.
+
+
+<!--------------------------------------------------------------->
+<a name="done"></a>
+<h3>(101) SQLITE_DONE</h3>
+<p>
+ The SQLITE_DONE result code indicates that an operation has completed.
+ The SQLITE_DONE result code is most commonly seen as a return value
+ from <a href="c3ref/step.html">sqlite3_step()</a> indicating that the SQL statement has run to
+ completion. But SQLITE_DONE can also be returned by other multi-step
+ interfaces such as <a href="c3ref/backup_finish.html#sqlite3backupstep">sqlite3_backup_step()</a>.
+
+
+<!--------------------------------------------------------------->
+<a name="ok_load_permanently"></a>
+<h3>(256) SQLITE_OK_LOAD_PERMANENTLY</h3>
+<p>
+ The <a href="c3ref/load_extension.html">sqlite3_load_extension()</a> interface loads an
+ <a href="loadext.html">extension</a> into a single
+ database connection. The default behavior is for that extension to be
+ automatically unloaded when the database connection closes. However,
+ if the extension entry point returns SQLITE_OK_LOAD_PERMANENTLY instead
+ of SQLITE_OK, then the extension remains loaded into the process address
+ space after the database connection closes. In other words, the
+ xDlClose methods of the <a href="c3ref/vfs.html">sqlite3_vfs</a> object is not called for the
+ extension when the database connection closes.
+ <p>
+ The SQLITE_OK_LOAD_PERMANENTLY return code is useful to
+ <a href="loadext.html">loadable extensions</a> that register new <a href="vfs.html">VFSes</a>, for example.
+
+
+<!--------------------------------------------------------------->
+<a name="error_missing_collseq"></a>
+<h3>(257) SQLITE_ERROR_MISSING_COLLSEQ</h3>
+<p>
+ The SQLITE_ERROR_MISSING_COLLSEQ result code means that an SQL
+ statement could not be prepared because a collating sequence named
+ in that SQL statement could not be located.
+ <p>
+ Sometimes when this error code is encountered, the
+ <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> routine will convert the error into
+ <a href="rescode.html#error_retry">SQLITE_ERROR_RETRY</a> and try again to prepare the SQL statement
+ using a different query plan that does not require the use of
+ the unknown collating sequence.
+
+
+<!--------------------------------------------------------------->
+<a name="busy_recovery"></a>
+<h3>(261) SQLITE_BUSY_RECOVERY</h3>
+<p>
+ The SQLITE_BUSY_RECOVERY error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#busy">SQLITE_BUSY</a> that indicates that an operation could not continue
+ because another process is busy recovering a <a href="wal.html">WAL mode</a> database file
+ following a crash. The SQLITE_BUSY_RECOVERY error code only occurs
+ on <a href="wal.html">WAL mode</a> databases.
+
+
+<!--------------------------------------------------------------->
+<a name="locked_sharedcache"></a>
+<h3>(262) SQLITE_LOCKED_SHAREDCACHE</h3>
+<p>
+ The SQLITE_LOCKED_SHAREDCACHE result code indicates that access to
+ an SQLite data record is blocked by another database connection that
+ is using the same record in <a href="sharedcache.html">shared cache mode</a>. When two or more
+ database connections share the same cache and one of the connections is
+ in the middle of modifying a record in that cache, then other connections
+ are blocked from accessing that data while the modifications are on-going
+ in order to prevent the readers from seeing a corrupt or partially
+ completed change.
+
+
+<!--------------------------------------------------------------->
+<a name="readonly_recovery"></a>
+<h3>(264) SQLITE_READONLY_RECOVERY</h3>
+<p>
+ The SQLITE_READONLY_RECOVERY error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#readonly">SQLITE_READONLY</a>. The SQLITE_READONLY_RECOVERY error code indicates
+ that a <a href="wal.html">WAL mode</a> database cannot be opened because the database file
+ needs to be recovered and recovery requires write access but only
+ read access is available.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_read"></a>
+<h3>(266) SQLITE_IOERR_READ</h3>
+<p>
+ The SQLITE_IOERR_READ error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error in the <a href="vfs.html">VFS</a> layer
+ while trying to read from a file on disk. This error might result
+ from a hardware malfunction or because a filesystem came unmounted
+ while the file was open.
+
+
+<!--------------------------------------------------------------->
+<a name="corrupt_vtab"></a>
+<h3>(267) SQLITE_CORRUPT_VTAB</h3>
+<p>
+ The SQLITE_CORRUPT_VTAB error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#corrupt">SQLITE_CORRUPT</a> used by <a href="vtab.html">virtual tables</a>. A <a href="vtab.html">virtual table</a> might
+ return SQLITE_CORRUPT_VTAB to indicate that content in the virtual table
+ is corrupt.
+
+
+<!--------------------------------------------------------------->
+<a name="cantopen_notempdir"></a>
+<h3>(270) SQLITE_CANTOPEN_NOTEMPDIR</h3>
+<p>
+ The SQLITE_CANTOPEN_NOTEMPDIR error code is no longer used.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_check"></a>
+<h3>(275) SQLITE_CONSTRAINT_CHECK</h3>
+<p>
+ The SQLITE_CONSTRAINT_CHECK error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> indicating that a <a href="lang_createtable.html#ckconst">CHECK constraint</a> failed.
+
+
+<!--------------------------------------------------------------->
+<a name="auth_user"></a>
+<h3>(279) SQLITE_AUTH_USER</h3>
+<p>
+ The SQLITE_AUTH_USER error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#auth">SQLITE_AUTH</a> indicating that an operation was attempted on a
+ database for which the logged in user lacks sufficient authorization.
+
+
+<!--------------------------------------------------------------->
+<a name="notice_recover_wal"></a>
+<h3>(283) SQLITE_NOTICE_RECOVER_WAL</h3>
+<p>
+ The SQLITE_NOTICE_RECOVER_WAL result code is
+ passed to the callback of
+ <a href="c3ref/log.html">sqlite3_log()</a> when a <a href="wal.html">WAL mode</a> database file is recovered.
+
+
+<!--------------------------------------------------------------->
+<a name="warning_autoindex"></a>
+<h3>(284) SQLITE_WARNING_AUTOINDEX</h3>
+<p>
+ The SQLITE_WARNING_AUTOINDEX result code is
+ passed to the callback of
+ <a href="c3ref/log.html">sqlite3_log()</a> whenever <a href="optoverview.html#autoindex">automatic indexing</a> is used.
+ This can serve as a warning to application designers that the
+ database might benefit from additional indexes.
+
+
+<!--------------------------------------------------------------->
+<a name="error_retry"></a>
+<h3>(513) SQLITE_ERROR_RETRY</h3>
+<p>
+ The SQLITE_ERROR_RETRY is used internally to provoke <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
+ (or one of its sibling routines for creating prepared statements) to
+ try again to prepare a statement that failed with an error on the
+ previous attempt.
+
+
+<!--------------------------------------------------------------->
+<a name="abort_rollback"></a>
+<h3>(516) SQLITE_ABORT_ROLLBACK</h3>
+<p>
+ The SQLITE_ABORT_ROLLBACK error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#abort">SQLITE_ABORT</a> indicating that an SQL statement aborted because
+ the transaction that was active when the SQL statement first started
+ was rolled back. Pending write operations always fail with this error
+ when a rollback occurs. A <a href="lang_transaction.html">ROLLBACK</a> will cause a pending read operation
+ to fail only if the schema was changed within the transaction being rolled
+ back.
+
+
+<!--------------------------------------------------------------->
+<a name="busy_snapshot"></a>
+<h3>(517) SQLITE_BUSY_SNAPSHOT</h3>
+<p>
+ The SQLITE_BUSY_SNAPSHOT error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#busy">SQLITE_BUSY</a> that occurs on <a href="wal.html">WAL mode</a> databases when a database
+ connection tries to promote a read transaction into a write transaction
+ but finds that another <a href="c3ref/sqlite3.html">database connection</a> has already written to the
+ database and thus invalidated prior reads.
+ <p>
+ The following scenario illustrates how an SQLITE_BUSY_SNAPSHOT error
+ might arise:
+ <ol>
+ <li> Process A starts a read transaction on the database and does one
+ or more SELECT statement. Process A keeps the transaction open.
+ <li> Process B updates the database, changing values previous read by
+ process A.
+ <li> Process A now tries to write to the database. But process A's view
+ of the database content is now obsolete because process B has
+ modified the database file after process A read from it. Hence
+ process A gets an SQLITE_BUSY_SNAPSHOT error.
+ </ol>
+
+
+<!--------------------------------------------------------------->
+<a name="locked_vtab"></a>
+<h3>(518) SQLITE_LOCKED_VTAB</h3>
+<p>
+ The SQLITE_LOCKED_VTAB result code is not used by the SQLite core, but
+ it is available for use by extensions. Virtual table implementations
+ can return this result code to indicate that they cannot complete the
+ current operation because of locks held by other threads or processes.
+ <p>
+ The <a href="rtree.html">R-Tree extension</a> returns this result code when an attempt is made
+ to update the R-Tree while another prepared statement is actively reading
+ the R-Tree. The update cannot proceed because any change to an R-Tree
+ might involve reshuffling and rebalancing of nodes, which would disrupt
+ read cursors, causing some rows to be repeated and other rows to be
+ omitted.
+
+
+<!--------------------------------------------------------------->
+<a name="readonly_cantlock"></a>
+<h3>(520) SQLITE_READONLY_CANTLOCK</h3>
+<p>
+ The SQLITE_READONLY_CANTLOCK error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#readonly">SQLITE_READONLY</a>. The SQLITE_READONLY_CANTLOCK error code indicates
+ that SQLite is unable to obtain a read lock on a <a href="wal.html">WAL mode</a> database
+ because the shared-memory file associated with that database is read-only.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_short_read"></a>
+<h3>(522) SQLITE_IOERR_SHORT_READ</h3>
+<p>
+ The SQLITE_IOERR_SHORT_READ error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating that a read attempt in the <a href="vfs.html">VFS</a> layer
+ was unable to obtain as many bytes as was requested. This might be
+ due to a truncated file.
+
+
+<!--------------------------------------------------------------->
+<a name="corrupt_sequence"></a>
+<h3>(523) SQLITE_CORRUPT_SEQUENCE</h3>
+<p>
+ The SQLITE_CORRUPT_SEQUENCE result code means that the schema of
+ the sqlite_sequence table is corrupt. The sqlite_sequence table
+ is used to help implement the <a href="autoinc.html">AUTOINCREMENT</a> feature. The
+ sqlite_sequence table should have the following format:
+ <blockquote><pre>
+ CREATE TABLE sqlite_sequence(name,seq);
+ </pre></blockquote>
+ <p>If SQLite discovers that the sqlite_sequence table has any other
+ format, it returns the SQLITE_CORRUPT_SEQUENCE error.
+
+
+<!--------------------------------------------------------------->
+<a name="cantopen_isdir"></a>
+<h3>(526) SQLITE_CANTOPEN_ISDIR</h3>
+<p>
+ The SQLITE_CANTOPEN_ISDIR error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#cantopen">SQLITE_CANTOPEN</a> indicating that a file open operation failed because
+ the file is really a directory.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_commithook"></a>
+<h3>(531) SQLITE_CONSTRAINT_COMMITHOOK</h3>
+<p>
+ The SQLITE_CONSTRAINT_COMMITHOOK error code
+ is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> indicating that a
+ <a href="c3ref/commit_hook.html">commit hook callback</a> returned non-zero that thus
+ caused the SQL statement to be rolled back.
+
+
+<!--------------------------------------------------------------->
+<a name="notice_recover_rollback"></a>
+<h3>(539) SQLITE_NOTICE_RECOVER_ROLLBACK</h3>
+<p>
+ The SQLITE_NOTICE_RECOVER_ROLLBACK result code is
+ passed to the callback of
+ <a href="c3ref/log.html">sqlite3_log()</a> when a <a href="fileformat2.html#hotjrnl">hot journal</a> is rolled back.
+
+
+<!--------------------------------------------------------------->
+<a name="error_snapshot"></a>
+<h3>(769) SQLITE_ERROR_SNAPSHOT</h3>
+<p>
+ The SQLITE_ERROR_SNAPSHOT result code might be returned when attempting
+ to start a read transaction on an historical version of the database
+ by using the <a href="c3ref/snapshot_open.html">sqlite3_snapshot_open()</a> interface. If the historical
+ snapshot is no longer available, then the read transaction will fail
+ with the SQLITE_ERROR_SNAPSHOT. This error code is only possible if
+ SQLite is compiled with <a href="compile.html#enable_snapshot">-DSQLITE_ENABLE_SNAPSHOT</a>.
+
+
+<!--------------------------------------------------------------->
+<a name="busy_timeout"></a>
+<h3>(773) SQLITE_BUSY_TIMEOUT</h3>
+<p>
+ The SQLITE_BUSY_TIMEOUT error code indicates that a blocking Posix
+ advisory file lock request in the VFS layer failed due to a timeout.
+ Blocking Posix advisory locks are only
+ available as a proprietary SQLite extension and even then are only
+ supported if SQLite is compiled with the SQLITE_EANBLE_SETLK_TIMEOUT
+ compile-time option.
+
+
+<!--------------------------------------------------------------->
+<a name="readonly_rollback"></a>
+<h3>(776) SQLITE_READONLY_ROLLBACK</h3>
+<p>
+ The SQLITE_READONLY_ROLLBACK error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#readonly">SQLITE_READONLY</a>. The SQLITE_READONLY_ROLLBACK error code indicates
+ that a database cannot be opened because it has a <a href="fileformat2.html#hotjrnl">hot journal</a> that
+ needs to be rolled back but cannot because the database is readonly.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_write"></a>
+<h3>(778) SQLITE_IOERR_WRITE</h3>
+<p>
+ The SQLITE_IOERR_WRITE error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error in the <a href="vfs.html">VFS</a> layer
+ while trying to write into a file on disk. This error might result
+ from a hardware malfunction or because a filesystem came unmounted
+ while the file was open. This error should not occur if the filesystem
+ is full as there is a separate error code (SQLITE_FULL) for that purpose.
+
+
+<!--------------------------------------------------------------->
+<a name="corrupt_index"></a>
+<h3>(779) SQLITE_CORRUPT_INDEX</h3>
+<p>
+ The SQLITE_CORRUPT_INDEX result code means that SQLite detected
+ an entry is or was missing from an index. This is a special case of
+ the <a href="rescode.html#corrupt">SQLITE_CORRUPT</a> error code that suggests that the problem might
+ be resolved by running the <a href="lang_reindex.html">REINDEX</a> command, assuming no other
+ problems exist elsewhere in the database file.
+
+
+<!--------------------------------------------------------------->
+<a name="cantopen_fullpath"></a>
+<h3>(782) SQLITE_CANTOPEN_FULLPATH</h3>
+<p>
+ The SQLITE_CANTOPEN_FULLPATH error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#cantopen">SQLITE_CANTOPEN</a> indicating that a file open operation failed because
+ the operating system was unable to convert the filename into a full pathname.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_foreignkey"></a>
+<h3>(787) SQLITE_CONSTRAINT_FOREIGNKEY</h3>
+<p>
+ The SQLITE_CONSTRAINT_FOREIGNKEY error code
+ is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> indicating that a <a href="foreignkeys.html">foreign key constraint</a> failed.
+
+
+<!--------------------------------------------------------------->
+<a name="readonly_dbmoved"></a>
+<h3>(1032) SQLITE_READONLY_DBMOVED</h3>
+<p>
+ The SQLITE_READONLY_DBMOVED error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#readonly">SQLITE_READONLY</a>. The SQLITE_READONLY_DBMOVED error code indicates
+ that a database cannot be modified because the database file has been
+ moved since it was opened, and so any attempt to modify the database
+ might result in database corruption if the processes crashes because the
+ <a href="lockingv3.html#rollback">rollback journal</a> would not be correctly named.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_fsync"></a>
+<h3>(1034) SQLITE_IOERR_FSYNC</h3>
+<p>
+ The SQLITE_IOERR_FSYNC error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error in the <a href="vfs.html">VFS</a> layer
+ while trying to flush previously written content out of OS and/or
+ disk-control buffers and into persistent storage. In other words,
+ this code indicates a problem with the fsync() system call in unix
+ or the FlushFileBuffers() system call in windows.
+
+
+<!--------------------------------------------------------------->
+<a name="cantopen_convpath"></a>
+<h3>(1038) SQLITE_CANTOPEN_CONVPATH</h3>
+<p>
+ The SQLITE_CANTOPEN_CONVPATH error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#cantopen">SQLITE_CANTOPEN</a> used only by Cygwin <a href="vfs.html">VFS</a> and indicating that
+ the cygwin_conv_path() system call failed while trying to open a file.
+ See also: <a href="rescode.html#ioerr_convpath">SQLITE_IOERR_CONVPATH</a>
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_function"></a>
+<h3>(1043) SQLITE_CONSTRAINT_FUNCTION</h3>
+<p>
+ The SQLITE_CONSTRAINT_FUNCTION error code is not currently used
+ by the SQLite core. However, this error code is available for use
+ by extension functions.
+
+
+<!--------------------------------------------------------------->
+<a name="readonly_cantinit"></a>
+<h3>(1288) SQLITE_READONLY_CANTINIT</h3>
+<p>
+ The SQLITE_READONLY_CANTINIT result code originates in the xShmMap method
+ of a <a href="vfs.html">VFS</a> to indicate that the shared memory region used by <a href="wal.html">WAL mode</a>
+ exists buts its content is unreliable and unusable by the current process
+ since the current process does not have write permission on the shared
+ memory region. (The shared memory region for WAL mode is normally a
+ file with a "-wal" suffix that is mmapped into the process space. If
+ the current process does not have write permission on that file, then it
+ cannot write into shared memory.)
+ <p>
+ Higher level logic within SQLite will normally intercept the error code
+ and create a temporary in-memory shared memory region so that the current
+ process can at least read the content of the database. This result code
+ should not reach the application interface layer.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_dir_fsync"></a>
+<h3>(1290) SQLITE_IOERR_DIR_FSYNC</h3>
+<p>
+ The SQLITE_IOERR_DIR_FSYNC error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error in the <a href="vfs.html">VFS</a> layer
+ while trying to invoke fsync() on a directory. The unix <a href="vfs.html">VFS</a> attempts
+ to fsync() directories after creating or deleting certain files to
+ ensure that those files will still appear in the filesystem following
+ a power loss or system crash. This error code indicates a problem
+ attempting to perform that fsync().
+
+
+<!--------------------------------------------------------------->
+<a name="cantopen_dirtywal"></a>
+<h3>(1294) SQLITE_CANTOPEN_DIRTYWAL</h3>
+<p>
+ The SQLITE_CANTOPEN_DIRTYWAL result code is not used at this time.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_notnull"></a>
+<h3>(1299) SQLITE_CONSTRAINT_NOTNULL</h3>
+<p>
+ The SQLITE_CONSTRAINT_NOTNULL error code
+ is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> indicating that a <a href="lang_createtable.html#notnullconst">NOT NULL constraint</a> failed.
+
+
+<!--------------------------------------------------------------->
+<a name="readonly_directory"></a>
+<h3>(1544) SQLITE_READONLY_DIRECTORY</h3>
+<p>
+ The SQLITE_READONLY_DIRECTORY result code indicates that the database
+ is read-only because process does not have permission to create
+ a journal file in the same directory as the database and the creation of
+ a journal file is a prerequisite for writing.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_truncate"></a>
+<h3>(1546) SQLITE_IOERR_TRUNCATE</h3>
+<p>
+ The SQLITE_IOERR_TRUNCATE error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error in the <a href="vfs.html">VFS</a> layer
+ while trying to truncate a file to a smaller size.
+
+
+<!--------------------------------------------------------------->
+<a name="cantopen_symlink"></a>
+<h3>(1550) SQLITE_CANTOPEN_SYMLINK</h3>
+<p>
+ The SQLITE_CANTOPEN_SYMLINK result code is returned by the
+ <a href="c3ref/open.html">sqlite3_open()</a> interface and its siblings when the
+ <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOFOLLOW</a> flag is used and the database file is
+ a symbolic link.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_primarykey"></a>
+<h3>(1555) SQLITE_CONSTRAINT_PRIMARYKEY</h3>
+<p>
+ The SQLITE_CONSTRAINT_PRIMARYKEY error code
+ is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> indicating that a <a href="lang_createtable.html#primkeyconst">PRIMARY KEY constraint</a> failed.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_fstat"></a>
+<h3>(1802) SQLITE_IOERR_FSTAT</h3>
+<p>
+ The SQLITE_IOERR_FSTAT error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error in the <a href="vfs.html">VFS</a> layer
+ while trying to invoke fstat() (or the equivalent) on a file in order
+ to determine information such as the file size or access permissions.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_trigger"></a>
+<h3>(1811) SQLITE_CONSTRAINT_TRIGGER</h3>
+<p>
+ The SQLITE_CONSTRAINT_TRIGGER error code
+ is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> indicating that a <a href="lang_createtrigger.html#raise">RAISE function</a> within
+ a <a href="lang_createtrigger.html">trigger</a> fired, causing the SQL statement to abort.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_unlock"></a>
+<h3>(2058) SQLITE_IOERR_UNLOCK</h3>
+<p>
+ The SQLITE_IOERR_UNLOCK error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within xUnlock method on the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_unique"></a>
+<h3>(2067) SQLITE_CONSTRAINT_UNIQUE</h3>
+<p>
+ The SQLITE_CONSTRAINT_UNIQUE error code
+ is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> indicating that a <a href="lang_createtable.html#uniqueconst">UNIQUE constraint</a> failed.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_rdlock"></a>
+<h3>(2314) SQLITE_IOERR_RDLOCK</h3>
+<p>
+ The SQLITE_IOERR_UNLOCK error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within xLock method on the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object while trying
+ to obtain a read lock.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_vtab"></a>
+<h3>(2323) SQLITE_CONSTRAINT_VTAB</h3>
+<p>
+ The SQLITE_CONSTRAINT_VTAB error code is not currently used
+ by the SQLite core. However, this error code is available for use
+ by application-defined <a href="vtab.html">virtual tables</a>.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_delete"></a>
+<h3>(2570) SQLITE_IOERR_DELETE</h3>
+<p>
+ The SQLITE_IOERR_UNLOCK error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within xDelete method on the <a href="c3ref/vfs.html">sqlite3_vfs</a> object.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_rowid"></a>
+<h3>(2579) SQLITE_CONSTRAINT_ROWID</h3>
+<p>
+ The SQLITE_CONSTRAINT_ROWID error code
+ is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> indicating that a <a href="lang_createtable.html#rowid">rowid</a> is not unique.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_blocked"></a>
+<h3>(2826) SQLITE_IOERR_BLOCKED</h3>
+<p>
+ The SQLITE_IOERR_BLOCKED error code is no longer used.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_pinned"></a>
+<h3>(2835) SQLITE_CONSTRAINT_PINNED</h3>
+<p>
+ The SQLITE_CONSTRAINT_PINNED error code
+ is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> indicating that an <a href="lang_createtrigger.html">UPDATE trigger</a> attempted
+ do delete the row that was being updated in the middle of the update.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_nomem"></a>
+<h3>(3082) SQLITE_IOERR_NOMEM</h3>
+<p>
+ The SQLITE_IOERR_NOMEM error code is sometimes returned by the <a href="vfs.html">VFS</a>
+ layer to indicate that an operation could not be completed due to the
+ inability to allocate sufficient memory. This error code is normally
+ converted into <a href="rescode.html#nomem">SQLITE_NOMEM</a> by the higher layers of SQLite before
+ being returned to the application.
+
+
+<!--------------------------------------------------------------->
+<a name="constraint_datatype"></a>
+<h3>(3091) SQLITE_CONSTRAINT_DATATYPE</h3>
+<p>
+ The SQLITE_CONSTRAINT_DATATYPE error code
+ is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a> indicating that an insert or update attempted
+ to store a value inconsistent with the column's declared type
+ in a table defined as STRICT.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_access"></a>
+<h3>(3338) SQLITE_IOERR_ACCESS</h3>
+<p>
+ The SQLITE_IOERR_ACCESS error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within the xAccess method on the <a href="c3ref/vfs.html">sqlite3_vfs</a> object.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_checkreservedlock"></a>
+<h3>(3594) SQLITE_IOERR_CHECKRESERVEDLOCK</h3>
+<p>
+ The SQLITE_IOERR_CHECKRESERVEDLOCK error code is
+ an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within the xCheckReservedLock method on the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_lock"></a>
+<h3>(3850) SQLITE_IOERR_LOCK</h3>
+<p>
+ The SQLITE_IOERR_LOCK error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error in the
+ advisory file locking logic.
+ Usually an SQLITE_IOERR_LOCK error indicates a problem obtaining
+ a <a href="lockingv3.html#pending_lock">PENDING lock</a>. However it can also indicate miscellaneous
+ locking errors on some of the specialized <a href="vfs.html">VFSes</a> used on Macs.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_close"></a>
+<h3>(4106) SQLITE_IOERR_CLOSE</h3>
+<p>
+ The SQLITE_IOERR_ACCESS error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within the xClose method on the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_dir_close"></a>
+<h3>(4362) SQLITE_IOERR_DIR_CLOSE</h3>
+<p>
+ The SQLITE_IOERR_DIR_CLOSE error code is no longer used.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_shmopen"></a>
+<h3>(4618) SQLITE_IOERR_SHMOPEN</h3>
+<p>
+ The SQLITE_IOERR_SHMOPEN error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within the xShmMap method on the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object
+ while trying to open a new shared memory segment.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_shmsize"></a>
+<h3>(4874) SQLITE_IOERR_SHMSIZE</h3>
+<p>
+ The SQLITE_IOERR_SHMSIZE error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within the xShmMap method on the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object
+ while trying to enlarge a <a href="walformat.html#shm">"shm" file</a> as part of
+ <a href="wal.html">WAL mode</a> transaction processing. This error may indicate that
+ the underlying filesystem volume is out of space.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_shmlock"></a>
+<h3>(5130) SQLITE_IOERR_SHMLOCK</h3>
+<p>
+ The SQLITE_IOERR_SHMLOCK error code is no longer used.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_shmmap"></a>
+<h3>(5386) SQLITE_IOERR_SHMMAP</h3>
+<p>
+ The SQLITE_IOERR_SHMMAP error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within the xShmMap method on the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object
+ while trying to map a shared memory segment into the process address space.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_seek"></a>
+<h3>(5642) SQLITE_IOERR_SEEK</h3>
+<p>
+ The SQLITE_IOERR_SEEK error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within the xRead or xWrite methods on the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object
+ while trying to seek a file descriptor to the beginning point of the
+ file where the read or write is to occur.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_delete_noent"></a>
+<h3>(5898) SQLITE_IOERR_DELETE_NOENT</h3>
+<p>
+ The SQLITE_IOERR_DELETE_NOENT error code
+ is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating that the
+ xDelete method on the <a href="c3ref/vfs.html">sqlite3_vfs</a> object failed because the
+ file being deleted does not exist.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_mmap"></a>
+<h3>(6154) SQLITE_IOERR_MMAP</h3>
+<p>
+ The SQLITE_IOERR_MMAP error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating an I/O error
+ within the xFetch or xUnfetch methods on the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object
+ while trying to map or unmap part of the database file into the
+ process address space.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_gettemppath"></a>
+<h3>(6410) SQLITE_IOERR_GETTEMPPATH</h3>
+<p>
+ The SQLITE_IOERR_GETTEMPPATH error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> indicating that the <a href="vfs.html">VFS</a> is unable to determine
+ a suitable directory in which to place temporary files.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_convpath"></a>
+<h3>(6666) SQLITE_IOERR_CONVPATH</h3>
+<p>
+ The SQLITE_IOERR_CONVPATH error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> used only by Cygwin <a href="vfs.html">VFS</a> and indicating that
+ the cygwin_conv_path() system call failed.
+ See also: <a href="rescode.html#cantopen_convpath">SQLITE_CANTOPEN_CONVPATH</a>
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_vnode"></a>
+<h3>(6922) SQLITE_IOERR_VNODE</h3>
+<p>
+ The SQLITE_IOERR_VNODE error code is a code reserved for use
+ by extensions. It is not used by the SQLite core.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_auth"></a>
+<h3>(7178) SQLITE_IOERR_AUTH</h3>
+<p>
+ The SQLITE_IOERR_AUTH error code is a code reserved for use
+ by extensions. It is not used by the SQLite core.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_begin_atomic"></a>
+<h3>(7434) SQLITE_IOERR_BEGIN_ATOMIC</h3>
+<p>
+ The SQLITE_IOERR_BEGIN_ATOMIC error code indicates that the
+ underlying operating system reported and error on the
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> file-control. This only comes
+ up when <a href="compile.html#enable_atomic_write">SQLITE_ENABLE_ATOMIC_WRITE</a> is enabled and the database
+ is hosted on a filesystem that supports atomic writes.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_commit_atomic"></a>
+<h3>(7690) SQLITE_IOERR_COMMIT_ATOMIC</h3>
+<p>
+ The SQLITE_IOERR_COMMIT_ATOMIC error code indicates that the
+ underlying operating system reported and error on the
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a> file-control. This only comes
+ up when <a href="compile.html#enable_atomic_write">SQLITE_ENABLE_ATOMIC_WRITE</a> is enabled and the database
+ is hosted on a filesystem that supports atomic writes.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_rollback_atomic"></a>
+<h3>(7946) SQLITE_IOERR_ROLLBACK_ATOMIC</h3>
+<p>
+ The SQLITE_IOERR_ROLLBACK_ATOMIC error code indicates that the
+ underlying operating system reported and error on the
+ <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlrollbackatomicwrite">SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE</a> file-control. This only comes
+ up when <a href="compile.html#enable_atomic_write">SQLITE_ENABLE_ATOMIC_WRITE</a> is enabled and the database
+ is hosted on a filesystem that supports atomic writes.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_data"></a>
+<h3>(8202) SQLITE_IOERR_DATA</h3>
+<p>
+ The SQLITE_IOERR_DATA error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> used only by <a href="cksumvfs.html">checksum VFS shim</a> to indicate that
+ the checksum on a page of the database file is incorrect.
+
+
+<!--------------------------------------------------------------->
+<a name="ioerr_corruptfs"></a>
+<h3>(8458) SQLITE_IOERR_CORRUPTFS</h3>
+<p>
+ The SQLITE_IOERR_CORRUPTFS error code is an <a href="rescode.html#pve">extended error code</a>
+ for <a href="rescode.html#ioerr">SQLITE_IOERR</a> used only by a VFS to indicate that a seek or read
+ failure was due to the request not falling within the file's boundary
+ rather than an ordinary device failure. This often indicates a
+ corrupt filesystem.
+
+
+
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/rescode.in?m=13bc05918e65ccd69">2022-02-08 12:34:22</a> UTC </small></i></p>
+
diff --git a/www/robots.txt b/www/robots.txt
new file mode 100644
index 0000000..c0423ea
--- /dev/null
+++ b/www/robots.txt
@@ -0,0 +1,21 @@
+User-agent: *
+Disallow: /cvstrac/attach_add
+Disallow: /cvstrac/attach_get
+Disallow: /cvstrac/chngedit
+Disallow: /cvstrac/chngview
+Disallow: /cvstrac/dir
+Disallow: /cvstrac/filediff
+Disallow: /cvstrac/getfile
+Disallow: /cvstrac/msedit
+Disallow: /cvstrac/msnew
+Disallow: /cvstrac/rlog
+Disallow: /cvstrac/rptedit
+Disallow: /cvstrac/rptnew
+Disallow: /cvstrac/rptsql
+Disallow: /cvstrac/timeline
+Disallow: /cvstrac/tktedit
+Disallow: /cvstrac/tktview
+Disallow: /cvstrac/wikiedit
+Disallow: /cvstrac/honeypot
+Disallow: /cvstrac/wiki/attach_get
+Disallow: /contrib/download
diff --git a/www/rowidtable.html b/www/rowidtable.html
new file mode 100644
index 0000000..e69a735
--- /dev/null
+++ b/www/rowidtable.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Rowid Tables</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1 align="center">Rowid Tables</h1>
+
+<h2>1.0 Definition</h2>
+
+<p>A "rowid table" is any table in an SQLite schema that
+<ul>
+<li>is <em>not</em> a <a href="vtab.html">virtual table</a>, and
+<li>is <em>not</em> a <a href="withoutrowid.html">WITHOUT ROWID</a> table.
+</ul>
+Most tables in a typical SQLite database schema are rowid tables.
+
+<p>Rowid tables are distinguished by the fact that they all have
+a unique, non-NULL, signed 64-bit integer <a href="lang_createtable.html#rowid">rowid</a> that is used as
+the access key for the data in the underlying <a href="fileformat2.html#btree">B-tree</a> storage engine.
+
+<h2>2.0 Quirks</h2>
+
+<ul>
+<li><p>
+The <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> of a rowid table (if there is one) is usually not the
+true primary key for the table, in the sense that it is not the unique
+key used by the underlying <a href="fileformat2.html#btree">B-tree</a> storage engine. The exception to
+this rule is when the rowid table declares an <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>.
+In the exception, the INTEGER PRIMARY KEY becomes an alias for the
+<a href="lang_createtable.html#rowid">rowid</a>.
+
+<li><p>
+The true primary key for a rowid table (the value that is used as the
+key to look up rows in the underlying <a href="fileformat2.html#btree">B-tree</a> storage engine)
+is the <a href="lang_createtable.html#rowid">rowid</a>.
+
+<li><p>
+The PRIMARY KEY constraint for a rowid table (as long as it is not
+the true primary key or INTEGER PRIMARY KEY) is really the same thing
+as a <a href="lang_createtable.html#uniqueconst">UNIQUE constraint</a>. Because it is not a true primary key,
+columns of the PRIMARY KEY are allowed to be NULL, in violation of
+all SQL standards.
+
+<li><p>
+The <a href="lang_createtable.html#rowid">rowid</a> of a rowid table can be accessed (or changed) by reading or
+writing to any of the "rowid" or "oid" or "_rowid_" columns. Except,
+if there is a declared columns in the table that use those
+special names, then those names refer to the declared columns, not to
+the underlying <a href="lang_createtable.html#rowid">rowid</a>.
+
+<li><p>
+Access to records via <a href="lang_createtable.html#rowid">rowid</a> is highly optimized and very fast.
+
+<li><p>
+If the <a href="lang_createtable.html#rowid">rowid</a> is not aliased by <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> then it is not
+persistent and might change. In particular the <a href="lang_vacuum.html">VACUUM</a> command will
+change rowids for tables that do not declare an INTEGER PRIMARY KEY.
+Therefore, applications should not normally access the rowid directly,
+but instead use an INTEGER PRIMARY KEY.
+
+<li><p>
+In the underlying <a href="fileformat2.html">file format</a>, each rowid is stored as a
+<a href="fileformat2.html#varint">variable-length integer</a>. That means that small non-negative
+rowid values take up less disk space than large or negative
+rowid values.
+
+<li><p>
+All of the complications above (and others not mentioned here)
+arise from the need to preserve backwards
+compatibility for the hundreds of billions of SQLite database files in
+circulation. In a perfect world, there would be no such thing as a "rowid"
+and all tables would following the standard semantics implemented as
+<a href="withoutrowid.html">WITHOUT ROWID</a> tables, only without the extra "WITHOUT ROWID" keywords.
+Unfortunately, life is messy. The designer of SQLite offers his
+sincere apology for the current mess.
+</ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/rowidtable.in?m=d768bc62edee4f842">2018-04-12 15:31:42</a> UTC </small></i></p>
+
diff --git a/www/rowvalue.html b/www/rowvalue.html
new file mode 100644
index 0000000..c2f629a
--- /dev/null
+++ b/www/rowvalue.html
@@ -0,0 +1,449 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Row Values</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Row Values
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#definitions">1. Definitions</a></div>
+<div class="fancy-toc1"><a href="#syntax">2. Syntax</a></div>
+<div class="fancy-toc2"><a href="#row_value_comparisons">2.1. Row Value Comparisons</a></div>
+<div class="fancy-toc2"><a href="#row_value_in_operators">2.2. Row Value IN Operators</a></div>
+<div class="fancy-toc2"><a href="#row_values_in_update_statements">2.3. Row Values In UPDATE Statements</a></div>
+<div class="fancy-toc1"><a href="#example_uses_of_row_values">3. Example Uses Of Row Values</a></div>
+<div class="fancy-toc2"><a href="#scrolling_window_queries">3.1. Scrolling Window Queries</a></div>
+<div class="fancy-toc2"><a href="#comparison_of_dates_stored_as_separate_fields">3.2. Comparison of dates stored as separate fields</a></div>
+<div class="fancy-toc2"><a href="#search_against_multi_column_keys">3.3. Search against multi-column keys</a></div>
+<div class="fancy-toc2"><a href="#update_multiple_columns_of_a_table_based_on_a_query">3.4. Update multiple columns of a table based on a query</a></div>
+<div class="fancy-toc2"><a href="#clarity_of_presentation">3.5. Clarity of presentation</a></div>
+<div class="fancy-toc1"><a href="#backwards_compatibility">4. Backwards Compatibility</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="definitions"><span>1. </span>Definitions</h1>
+
+<p>A "value" is a single number, string, BLOB or NULL.
+Sometimes the qualified name "scalar value" is used to emphasize that
+only a single quantity is involved.
+
+</p><p>A "row value" is an ordered list of two or more scalar values.
+In other words, a "row value" is a vector or tuple.
+
+</p><p>The "size" of a row value is the number of scalar values the row value contains.
+The size of a row value is always at least 2.
+A row value with a single column is just a scalar value.
+A row value with no columns is a syntax error.
+
+</p><h1 id="syntax"><span>2. </span>Syntax</h1>
+
+<p>SQLite allows row values to be expressed in two ways:
+</p><ol>
+<li>A parenthesized, comma-separated list of scalar values.
+</li><li>A subquery expression with two or more result columns.
+</li></ol>
+
+<p>SQLite can use row values in two contexts:
+</p><ol>
+<li>Two row values of the same size
+can be compared using operators &lt;, &lt;=, &gt;, &gt;=,
+=, &lt;&gt;, IS, IS NOT, IN, NOT IN, BETWEEN, or CASE.
+</li><li>In an <a href="lang_update.html">UPDATE</a> statement, a list of column names can be set to a row value of
+the same size.
+</li></ol>
+
+<p>The syntax for row values and the circumstances in which row values
+can be used are illustrated in examples below.
+
+</p><h2 id="row_value_comparisons"><span>2.1. </span>Row Value Comparisons</h2>
+
+<p>Two row values are compared by looking at the constituent scalar
+values from left to right.
+A NULL means of "unknown".
+The overall result of comparison is NULL if it is possible to make the
+result either true or false by substituting alternative values in place
+of the constituent NULLs.
+The following query demonstrates some row value comparisons:
+
+</p><div class="codeblock"><pre>SELECT
+ (1,2,3) = (1,2,3), -- 1
+ (1,2,3) = (1,NULL,3), -- NULL
+ (1,2,3) = (1,NULL,4), -- 0
+ (1,2,3) &lt; (2,3,4), -- 1
+ (1,2,3) &lt; (1,2,4), -- 1
+ (1,2,3) &lt; (1,3,NULL), -- 1
+ (1,2,3) &lt; (1,2,NULL), -- NULL
+ (1,3,5) &lt; (1,2,NULL), -- 0
+ (1,2,NULL) IS (1,2,NULL); -- 1
+</pre></div>
+
+<p>The result of "(1,2,3)=(1,NULL,3)" is NULL because the result might be
+true if we replaced NULL&rarr;2 or false if we replaced NULL&rarr;9.
+The result of "(1,2,3)=(1,NULL,4)" is not NULL because there is no
+substitutions of the constituent NULL that will make the expression true,
+since 3 will never equal 4 in the third column.
+
+</p><p>Any of the row values in the previous example could be replace by a
+subquery that returns three columns and the same answer would result.
+For example:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(a,b,c);
+INSERT INTO t1(a,b,c) VALUES(1,2,3);
+SELECT (1,2,3)=(SELECT * FROM t1); -- 1
+</pre></div>
+
+<a name="rvinop"></a>
+
+<h2 id="row_value_in_operators"><span>2.2. </span>Row Value IN Operators</h2>
+
+<p>For a row-value <a href="lang_expr.html#in_op">IN operator</a>, the left-hand side (hereafter "LHS") can be either
+a parenthesized list of values or a subquery with multiple columns. But the
+right-hand side (hereafter "RHS") must be a subquery expression.
+
+</p><div class="codeblock"><pre>CREATE TABLE t2(x,y,z);
+INSERT INTO t2(x,y,z) VALUES(1,2,3),(2,3,4),(1,NULL,5);
+SELECT
+ (1,2,3) IN (SELECT * FROM t2), -- 1
+ (7,8,9) IN (SELECT * FROM t2), -- 0
+ (1,3,5) IN (SELECT * FROM t2); -- NULL
+</pre></div>
+
+<h2 id="row_values_in_update_statements"><span>2.3. </span>Row Values In UPDATE Statements</h2>
+
+<p>Row values can also be used in the SET clause of an <a href="lang_update.html">UPDATE</a> statement.
+The LHS must be a list of column names. The RHS can be any row value.
+For example:
+
+</p><div class="codeblock"><pre>UPDATE tab3
+ SET (a,b,c) = (SELECT x,y,z
+ FROM tab4
+ WHERE tab4.w=tab3.d)
+ WHERE tab3.e BETWEEN 55 AND 66;
+</pre></div>
+
+<h1 id="example_uses_of_row_values"><span>3. </span>Example Uses Of Row Values</h1>
+
+<h2 id="scrolling_window_queries"><span>3.1. </span>Scrolling Window Queries</h2>
+
+<p>Suppose an application wants to display a list of contacts
+in alphabetical order by lastname, firstname, in a scrolling window
+that can only show 7 contacts at a time. Initialize the scrolling
+window to the first 7 entries is easy:
+
+</p><div class="codeblock"><pre>SELECT * FROM contacts
+ ORDER BY lastname, firstname
+ LIMIT 7;
+</pre></div>
+
+<p>When the user scrolls down, the application needs to find the
+second set of 7 entries. One way to do this is to use the OFFSET clause:
+
+</p><div class="codeblock"><pre>SELECT * FROM contacts
+ ORDER BY lastname, firstname
+ LIMIT 7 OFFSET 7;
+</pre></div>
+
+<p>OFFSET gives the correct answer. However, OFFSET requires time
+proportional to the offset value. What really happens
+with "LIMIT x OFFSET y" is that SQLite computes the query as
+"LIMIT x+y" and discards the first y values without returning them
+to the application. So as the window scrolls down toward
+the bottom of a long list, and the y value becomes larger and larger,
+successive offset computations take more and more time.
+
+</p><p>A more efficient approach is to remember the last entry currently
+displayed and then use a row value comparison in the WHERE
+clause:
+
+</p><div class="codeblock"><pre>SELECT * FROM contacts
+ WHERE (lastname,firstname) &gt; (?1,?2)
+ ORDER BY lastname, firstname
+ LIMIT 7;
+</pre></div>
+
+<p>If the lastname and firstname on the bottom row of the previous
+screen are bound to ?1 and ?2, then the query above computes the next
+7 rows. And, assuming there is an appropriate index, it does so
+very efficiently &mdash; much more efficiently than OFFSET.
+
+</p><h2 id="comparison_of_dates_stored_as_separate_fields"><span>3.2. </span>Comparison of dates stored as separate fields</h2>
+
+<p>The usual way of storing a date in a database table is as a single
+field, as either a unix timestamp, a julian day number, or an ISO-8601
+dates string. But some application store dates as three separate
+fields for the year, month, and day.
+
+</p><div class="codeblock"><pre>CREATE TABLE info(
+ year INT, -- 4 digit year
+ month INT, -- 1 through 12
+ day INT, -- 1 through 31
+ other_stuff BLOB -- blah blah blah
+);
+</pre></div>
+
+<p>When dates are stored this way, row value comparisons provide a
+convenient way to compare dates:
+
+</p><div class="codeblock"><pre>SELECT * FROM info
+ WHERE (year,month,day) BETWEEN (2015,9,12) AND (2016,9,12);
+</pre></div>
+
+<h2 id="search_against_multi_column_keys"><span>3.3. </span>Search against multi-column keys</h2>
+
+<p>Suppose we want to know the order number, product number, and quantity
+for any item in which the product number and quantity match the product
+number and quantity of any item in order number 365:
+
+</p><div class="codeblock"><pre>SELECT ordid, prodid, qty
+ FROM item
+ WHERE (prodid, qty) IN (SELECT prodid, qty
+ FROM item
+ WHERE ordid = 365);
+</pre></div>
+
+<p>The query above could be rewritten as a join and without the use
+of row values:
+
+</p><div class="codeblock"><pre>SELECT t1.ordid, t1.prodid, t1.qty
+ FROM item AS t1, item AS t2
+ WHERE t1.prodid=t2.prodid
+ AND t1.qty=t2.qty
+ AND t2.ordid=365;
+</pre></div>
+
+<p>Because the same query could be written without the use of row values,
+row values do not provide new capabilities. However, many developers say
+that the row value format is easier to read, write, and debug.
+
+</p><p>Even in the JOIN form, the query can be made clearer through the use of
+row values:
+
+</p><div class="codeblock"><pre>SELECT t1.ordid, t1.prodid, t1.qty
+ FROM item AS t1, item AS t2
+ WHERE (t1.prodid,t1.qty) = (t2.prodid,t2.qty)
+ AND t2.ordid=365;
+</pre></div>
+
+<p>This later query generates exactly the same <a href="opcode.html">bytecode</a> as the previous
+scalar formulation, but using syntax that it cleaner and
+easier to read.
+
+</p><h2 id="update_multiple_columns_of_a_table_based_on_a_query"><span>3.4. </span>Update multiple columns of a table based on a query</h2>
+
+<p>The row-value notation is useful for updating two or more columns
+of a table from the result of a single query.
+An example of this is in the full-text search feature of the
+<a href="https://www.fossil-scm.org/">Fossil version control system</a>.
+
+</p><p>In the Fossil full-text search system,
+documents that participate in the full-text search (wiki pages, tickets,
+check-ins, documentation files, etc) are tracked by a table called
+"ftsdocs" (<u>f</u>ull <u>t</u>ext <u>s</u>earch <u>doc</u>ument<u>s</u>).
+As new documents are added to the repository, they are not indexed right
+away. Indexing is deferred until there is a search request. The
+ftsdocs table contains an "idxed" field which is true if the document
+has been indexed and false if not.
+
+</p><p>When a search request occurs and pending documents are indexed for the
+first time, the ftsdocs table must be updated by setting the idxed column
+to true and also filling in several other columns with information pertinent
+to the search. That other information is obtained from a join. The
+query is this:
+
+</p><div class="codeblock"><pre>UPDATE ftsdocs SET
+ idxed=1,
+ name=NULL,
+ (label,url,mtime) =
+ (SELECT printf('Check-in &#91;%%.16s&#93; on %%s',blob.uuid,
+ datetime(event.mtime)),
+ printf('/timeline?y=ci&amp;c=%%.20s',blob.uuid),
+ event.mtime
+ FROM event, blob
+ WHERE event.objid=ftsdocs.rid
+ AND blob.rid=ftsdocs.rid)
+WHERE ftsdocs.type='c' AND NOT ftsdocs.idxed
+</pre></div>
+
+<p>(See the
+<a href="https://www.fossil-scm.org/fossil/artifact/e5d6a82d?ln=1594-1605">source code</a>
+for further detail. Other examples
+<a href="https://www.fossil-scm.org/fossil/artifact/e5d6a82d?ln=1618-1628">here</a> and
+<a href="https://www.fossil-scm.org/fossil/artifact/e5d6a82d?ln=1641-1650">here</a>.)
+
+</p><p>Five out of nine columns in the ftsdocs table are updated. Two of
+the modified columns, "idxed" and "name", can be updated independently of
+the query. But the three columns "label", "url", and "mtime" all require
+a join query against the "event" and "blob" tables. Without row values,
+the equivalent UPDATE would require that the join be repeated three times,
+once for each column to be updated.
+
+</p><h2 id="clarity_of_presentation"><span>3.5. </span>Clarity of presentation</h2>
+
+<p>Sometimes the use of row values just makes the SQL easier to read
+and write. Consider the following two UPDATE statements:
+
+</p><div class="codeblock"><pre>UPDATE tab1 SET (a,b)=(b,a);
+UPDATE tab1 SET a=b, b=a;
+</pre></div>
+
+<p>Both UPDATE statements do exactly the same thing. (They generate
+identical <a href="opcode.html">bytecode</a>.) But the first form, the row value form, seems
+to make it clearer that the intent of the statement is to swap the
+values in columns A and B.
+
+</p><p>Or consider these identical queries:
+
+</p><div class="codeblock"><pre>SELECT * FROM tab1 WHERE a=?1 AND b=?2;
+SELECT * FROM tab1 WHERE (a,b)=(?1,?2);
+</pre></div>
+
+<p>Once again, the SQL statements generate identical bytecode and thus
+do exactly the same job in exactly the same way. But the second form
+is made easier for humans to read by grouping the query parameters together
+into a single row value rather than scattering them across the WHERE
+clause.
+
+</p><h1 id="backwards_compatibility"><span>4. </span>Backwards Compatibility</h1>
+
+<p>Row values were added to SQLite
+<a href="releaselog/3_15_0.html">version 3.15.0</a> (2016-10-14). Attempts to use row values in
+prior versions of SQLite will generate syntax errors.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/rowvalue.in?m=97d4d2b36b512b177">2022-03-07 15:31:00</a> UTC </small></i></p>
+
diff --git a/www/rtree.html b/www/rtree.html
new file mode 100644
index 0000000..9a25b31
--- /dev/null
+++ b/www/rtree.html
@@ -0,0 +1,940 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The SQLite R*Tree Module</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The SQLite R*Tree Module
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#compiling_the_r_tree_module">2. Compiling The R*Tree Module</a></div>
+<div class="fancy-toc1"><a href="#using_the_r_tree_module">3. Using the R*Tree Module</a></div>
+<div class="fancy-toc2"><a href="#creating_an_r_tree_index">3.1. Creating An R*Tree Index</a></div>
+<div class="fancy-toc3"><a href="#column_naming_details">3.1.1. Column naming details</a></div>
+<div class="fancy-toc2"><a href="#populating_an_r_tree_index">3.2. Populating An R*Tree Index</a></div>
+<div class="fancy-toc2"><a href="#querying_an_r_tree_index">3.3. Querying An R*Tree Index</a></div>
+<div class="fancy-toc2"><a href="#roundoff_error">3.4. Roundoff Error</a></div>
+<div class="fancy-toc2"><a href="#reading_and_writing_at_the_same_time">3.5. Reading And Writing At The Same Time</a></div>
+<div class="fancy-toc1"><a href="#using_r_trees_effectively">4. Using R*Trees Effectively</a></div>
+<div class="fancy-toc2"><a href="#auxiliary_columns">4.1. Auxiliary Columns</a></div>
+<div class="fancy-toc3"><a href="#limitations">4.1.1. Limitations</a></div>
+<div class="fancy-toc1"><a href="#integer_valued_r_trees">5. Integer-Valued R-Trees</a></div>
+<div class="fancy-toc1"><a href="#custom_r_tree_queries">6. Custom R-Tree Queries</a></div>
+<div class="fancy-toc2"><a href="#the_legacy_xgeom_callback">6.1. The Legacy xGeom Callback</a></div>
+<div class="fancy-toc2"><a href="#the_new_xqueryfunc_callback">6.2. The New xQueryFunc Callback</a></div>
+<div class="fancy-toc2"><a href="#additional_considerations_for_custom_queries">6.3. Additional Considerations for Custom Queries</a></div>
+<div class="fancy-toc1"><a href="#implementation_details">7. Implementation Details</a></div>
+<div class="fancy-toc2"><a href="#shadow_tables">7.1. Shadow Tables</a></div>
+<div class="fancy-toc2"><a href="#integrity_check_using_the_rtreecheck_sql_function">7.2. Integrity Check using the rtreecheck() SQL function</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+An <a href="http://en.wikipedia.org/wiki/R-tree">R-Tree</a> is a special
+index that is designed for doing range queries. R-Trees are most commonly
+used in geospatial systems where each entry is a rectangle with minimum and
+maximum X and Y coordinates. Given a query rectangle, an R-Tree is able
+to quickly find all entries that are contained within the query rectangle
+or which overlap the query rectangle. This idea is easily extended to
+three dimensions for use in CAD systems. R-Trees also find use in time-domain
+range look-ups. For example, suppose a database records the starting and
+ending times for a large number of events. A R-Tree is able to quickly
+find all events that were active at any time during a given
+time interval, or all events that started during a particular time interval,
+or all events that both started and ended within a given time interval.
+And so forth.
+</p>
+
+<p>
+The R-Tree concept originated with
+<a href="http://www.baymoon.com/~tg2/">Toni Guttman</a>:
+<em>R-Trees: A Dynamic Index Structure for Spatial Searching</em>,
+Proc. 1984 ACM SIGMOD International Conference on Management of Data,
+pp. 47-57.
+The implementation found in SQLite is a refinement of Guttman's original
+idea, commonly called "R*Trees", that was described by
+Norbert Beckmann, Hans-Peter Kriegel, Ralf Schneider, Bernhard Seeger:
+<em>The R*-Tree: An Efficient and Robust Access Method for Points
+and Rectangles.</em> SIGMOD Conference 1990: 322-331.
+</p>
+
+<h1 id="compiling_the_r_tree_module"><span>2. </span>Compiling The R*Tree Module</h1>
+
+<p>
+The source code to the SQLite R*Tree module is included as part
+of the <a href="amalgamation.html">amalgamation</a> but is disabled by default. To enable the
+R*Tree module, simply compile with the <a href="compile.html#enable_rtree">SQLITE_ENABLE_RTREE</a>
+C-preprocessor macro defined. With many compilers, this is accomplished
+by adding the option "-DSQLITE_ENABLE_RTREE=1" to the compiler
+command-line.
+</p>
+
+<h1 id="using_the_r_tree_module"><span>3. </span>Using the R*Tree Module</h1>
+
+<p>
+The SQLite R*Tree module is implemented as a
+<a href="c3ref/create_module.html">virtual table</a>. Each R*Tree index is a
+virtual table with an odd number of columns between 3 and 11.
+The first column is always a 64-bit signed integer primary key.
+The other columns are pairs, one pair per dimension, containing the
+minimum and maximum values for that dimension, respectively.
+A 1-dimensional R*Tree thus has 3 columns.
+A 2-dimensional R*Tree has 5 columns.
+A 3-dimensional R*Tree has 7 columns.
+A 4-dimensional R*Tree has 9 columns.
+And a 5-dimensional R*Tree has 11 columns. The SQLite R*Tree implementation
+does not support R*Trees wider than 5 dimensions.
+</p>
+
+<p>
+The first column of an SQLite R*Tree is similar to an integer primary
+key column of a normal SQLite table. It may only store a 64-bit signed
+integer value. Inserting a NULL value into this column causes SQLite
+to automatically generate a new unique primary key value. If an attempt
+is made to insert any other non-integer value into this column,
+the r-tree module silently converts it to an integer before writing it
+into the database.
+</p><p>
+The min/max-value pair columns are stored as 32-bit floating point values for
+"rtree" virtual tables or as 32-bit signed integers in "rtree_i32" virtual
+tables. Unlike regular SQLite tables which can store data in a variety of
+datatypes and formats, the R*Tree rigidly enforce these storage types.
+If any other type of value is inserted into such a column, the r-tree
+module silently converts it to the required type before writing the
+new record to the database.
+
+</p><h2 id="creating_an_r_tree_index"><span>3.1. </span>Creating An R*Tree Index</h2>
+
+<p>
+A new R*Tree index is created as follows:
+</p>
+
+<div class="codeblock"><pre>CREATE VIRTUAL TABLE <em>&lt;name&gt;</em> USING rtree(<em>&lt;column-names&gt;</em>);
+</pre></div>
+
+<p>
+The <em>&lt;name&gt;</em> is the name your application chooses for the
+R*Tree index and <em>&lt;column-names&gt;</em> is a comma separated list
+of between 3 and 11 columns.
+The virtual &lt;name&gt; table creates three <a href="vtab.html#xshadowname">shadow tables</a> to actually
+store its content. The names of these shadow tables are:
+</p>
+
+<div class="codeblock"><pre><em>&lt;name&gt;</em><strong>_node</strong><br>
+<em>&lt;name&gt;</em><strong>_rowid</strong><br>
+<em>&lt;name&gt;</em><strong>_parent</strong>
+</pre></div>
+
+
+<p>
+The shadow tables are ordinary SQLite data tables. You can query them
+directly if you like, though this unlikely to reveal anything particularly
+useful.
+And you can <a href="lang_update.html">UPDATE</a>, <a href="lang_delete.html">DELETE</a>, <a href="lang_insert.html">INSERT</a> or even <a href="lang_droptable.html">DROP</a>
+the shadow tables, though doing so will corrupt your R*Tree index.
+So it is best to simply ignore the shadow tables. Recognize that they
+hold your R*Tree index information and let it go as that.
+</p>
+
+<p>
+As an example, consider creating a two-dimensional R*Tree index for use in
+spatial queries:
+</p>
+
+<div class="codeblock"><pre>CREATE VIRTUAL TABLE demo_index USING rtree(
+ id, -- Integer primary key
+ minX, maxX, -- Minimum and maximum X coordinate
+ minY, maxY -- Minimum and maximum Y coordinate
+);
+</pre></div>
+
+
+<h3 id="column_naming_details"><span>3.1.1. </span>Column naming details</h3>
+
+<p>
+In the argments to "rtree" in the CREATE VIRTUAL TABLE statement, the
+names of the columns are taken from the first token of each argument.
+All subsequent tokens within each argument are silently ignored.
+This means, for example, that if you try to give a column a
+<a href="datatype3.html#affinity">type affinity</a> or add a constraint such as UNIQUE or NOT NULL or DEFAULT to
+a column, those extra tokens are accepted as valid, but they do not change
+the behavior of the rtree.
+In an RTREE virtual table, the first column always has a
+<a href="datatype3.html#affinity">type affinity</a> of INTEGER and all other data columns have a
+<a href="datatype3.html#affinity">type affinity</a> of REAL.
+In an RTREE_I32 virtual table, all columns have type affinity of INTEGER.
+
+</p><p>
+Recommended practice is to omit any extra tokens in the rtree specification.
+Let each argument to "rtree" be a single ordinary label that is the name of
+the corresponding column, and omit all other tokens from the argument list.
+
+</p><h2 id="populating_an_r_tree_index"><span>3.2. </span>Populating An R*Tree Index</h2>
+
+<p>
+The usual <a href="lang_insert.html">INSERT</a>, <a href="lang_update.html">UPDATE</a>, and <a href="lang_delete.html">DELETE</a> commands work on an R*Tree
+index just like on regular tables. So to insert some data into our sample
+R*Tree index, we can do something like this:
+</p>
+
+<div class="codeblock"><pre>INSERT INTO demo_index VALUES
+ (28215, -80.781227, -80.604706, 35.208813, 35.297367),
+ (28216, -80.957283, -80.840599, 35.235920, 35.367825),
+ (28217, -80.960869, -80.869431, 35.133682, 35.208233),
+ (28226, -80.878983, -80.778275, 35.060287, 35.154446),
+ (28227, -80.745544, -80.555382, 35.130215, 35.236916),
+ (28244, -80.844208, -80.841988, 35.223728, 35.225471),
+ (28262, -80.809074, -80.682938, 35.276207, 35.377747),
+ (28269, -80.851471, -80.735718, 35.272560, 35.407925),
+ (28270, -80.794983, -80.728966, 35.059872, 35.161823),
+ (28273, -80.994766, -80.875259, 35.074734, 35.172836),
+ (28277, -80.876793, -80.767586, 35.001709, 35.101063),
+ (28278, -81.058029, -80.956375, 35.044701, 35.223812),
+ (28280, -80.844208, -80.841972, 35.225468, 35.227203),
+ (28282, -80.846382, -80.844193, 35.223972, 35.225655);
+</pre></div>
+
+
+<p>
+The entries above are bounding boxes (longitude and latitude) for 14
+zipcodes near Charlotte, NC. A real database would have many thousands,
+millions, or billions of such entries, but this small 14-row sample will
+be sufficient to illustrate the ideas.
+</p>
+
+<h2 id="querying_an_r_tree_index"><span>3.3. </span>Querying An R*Tree Index</h2>
+
+<p>
+Any valid query will work against an R*Tree index. The R*Tree
+implementation just makes some kinds of queries especially
+efficient. Queries against the primary key are efficient:
+</p>
+
+<div class="codeblock"><pre>SELECT * FROM demo_index WHERE id=28269;
+</pre></div>
+
+
+<p>
+Of course, an ordinary SQLite table will also do a query against its
+integer primary key efficiently, so the previous is not important.
+The big reason for using an R*Tree is so that
+you can efficiently do range queries against the coordinate
+ranges. For example, the main office of the SQLite project is
+located at 35.37785, -80.77470.
+To find which zipcodes might service that office, one could right:
+</p>
+
+<div class="codeblock"><pre>SELECT id FROM demo_index
+ WHERE minX&lt;=-80.77470 AND maxX&gt;=-80.77470
+ AND minY&lt;=35.37785 AND maxY&gt;=35.37785;
+</pre></div>
+
+
+<p>
+The query above will quickly locate all zipcodes that contain
+the SQLite main office in their bounding box, even if the
+R*Tree contains many entries. The previous is an example
+of a "contained-within" query. The R*Tree also supports "overlapping"
+queries. For example, to find all zipcode bounding boxes that overlap
+with the 28269 zipcode:
+</p>
+
+<div class="codeblock"><pre>SELECT A.id FROM demo_index AS A, demo_index AS B
+ WHERE A.maxX&gt;=B.minX AND A.minX&lt;=B.maxX
+ AND A.maxY&gt;=B.minY AND A.minY&lt;=B.maxY
+ AND B.id=28269;
+</pre></div>
+
+
+<p>
+This second query will find both 28269 entry (since every bounding box
+overlaps with itself) and also other zipcode that is close enough to
+28269 that their bounding boxes overlap.
+</p>
+
+<p>
+Note that it is not necessary for all coordinates in an R*Tree index
+to be constrained in order for the index search to be efficient.
+One might, for example, want to query all objects that overlap with
+the 35th parallel:
+</p>
+
+<div class="codeblock"><pre>SELECT id FROM demo_index
+ WHERE maxY&gt;=35.0 AND minY&lt;=35.0;
+</pre></div>
+
+
+<p>
+But, generally speaking, the more constraints that the R*Tree module
+has to work with, and the smaller the bounding box, the faster the
+results will come back.
+</p>
+
+<h2 id="roundoff_error"><span>3.4. </span>Roundoff Error</h2>
+
+<p>
+By default, coordinates are stored in an R*Tree using 32-bit floating
+point values. When a coordinate cannot be exactly represented by a
+32-bit floating point number, the lower-bound coordinates are rounded down
+and the upper-bound coordinates are rounded up. Thus, bounding boxes might
+be slightly larger than specified, but will never be any smaller. This
+is exactly what is desired for doing the more common "overlapping" queries
+where the application wants to find every entry in the R*Tree that overlaps
+a query bounding box. Rounding the entry bounding boxes outward might cause a
+few extra entries to appears in an overlapping query if the edge of the
+entry bounding box corresponds to an edge of the query bounding box. But
+the overlapping query will never miss a valid table entry.
+
+</p><p>However, for a "contained-within" style query, rounding the bounding
+boxes outward might cause some entries to be excluded from the result set
+if the edge of the entry bounding box corresponds to the edge of the query
+bounding box. To guard against this, applications should expand their
+contained-within query boxes slightly (by 0.000012%) by rounding down the
+lower coordinates and rounding up the top coordinates, in each dimension.
+
+<a name="readwrite"></a>
+
+</p><h2 id="reading_and_writing_at_the_same_time"><span>3.5. </span>Reading And Writing At The Same Time</h2>
+
+<p>
+It is the nature of the Guttman R-Tree algorithm that any write might
+radically restructure the tree, and in the process change the scan order
+of the nodes. For this reason, it is not generally possible to modify
+the R-Tree in the middle of a query of the R-Tree. Attempts to do so
+will fail with a <a href="rescode.html#locked">SQLITE_LOCKED</a> "database table is locked" error.
+
+</p><p>
+So, for example, suppose an application runs one query against an R-Tree like
+this:
+
+</p><div class="codeblock"><pre>SELECT id FROM demo_index
+ WHERE maxY&gt;=35.0 AND minY&lt;=35.0;
+</pre></div>
+
+<p>
+Then for each "id" value returned, suppose the application creates an
+UPDATE statement like the following and binds the "id" value returned against
+the "?1" parameter:
+
+</p><div class="codeblock"><pre>UPDATE demo_index SET maxY=maxY+0.5 WHERE id=?1;
+</pre></div>
+
+<p>
+Then the UPDATE might fail with an SQLITE_LOCKED error. The reason is that
+the initial query has not run to completion. It is remembering its place
+in the middle of a scan of the R-Tree. So an update to the R-Tree cannot
+be tolerated as this would disrupt the scan.
+
+</p><p>
+This is a limitation of the R-Tree extension only. Ordinary tables in
+SQLite are able to read and write at the same time. Other virtual tables
+might (or might not) also that capability. And R-Tree can appear to read
+and write at the same time in some circumstances, if it can figure out how
+to reliably run the query to completion before starting the update. But
+you shouldn't count on that for every query. Generally speaking, it is
+best to avoid running queries and updates to the same R-Tree at the same
+time.
+
+</p><p>
+If you really need to update an R-Tree based on complex queries against
+the same R-Tree, it is best to run the complex queries first and store
+the results in a temporary table, then update the R-Tree based on the values
+stored in the temporary table.
+
+</p><h1 id="using_r_trees_effectively"><span>4. </span>Using R*Trees Effectively</h1>
+
+<p>
+For SQLite versions prior to 3.24.0 (2018-06-04),
+the only information that an R*Tree index stores about an object is
+its integer ID and its bounding box. Additional information needs to
+be stored in separate tables and related to the R*Tree index using
+the primary key. For the example above, one might create an auxiliary
+table as follows:
+</p>
+
+<div class="codeblock"><pre>CREATE TABLE demo_data(
+ id INTEGER PRIMARY KEY, -- primary key
+ objname TEXT, -- name of the object
+ objtype TEXT, -- object type
+ boundary BLOB -- detailed boundary of object
+);
+</pre></div>
+
+<p>
+In this example, the demo_data.boundary field is intended to hold some
+kind of binary representation of the precise boundaries of the object.
+The R*Tree index only holds an axis-aligned rectangular boundary for the
+object. The R*Tree boundary is just an approximation of the true object
+boundary. So what typically happens is that the R*Tree index is used to
+narrow a search down to a list of candidate objects and then more detailed
+and expensive computations are done on each candidate to find if the
+candidate truly meets the search criteria.
+</p>
+
+<blockquote><p>
+<strong>Key Point:</strong>
+An R*Tree index does not normally provide the exact answer but merely
+reduces the set of potential answers from millions to dozens.
+</p></blockquote>
+
+<p>
+Suppose the demo_data.boundary field holds some proprietary data description
+of a complex two-dimensional boundary for a zipcode and suppose that the
+application has used the <a href="c3ref/create_function.html">sqlite3_create_function()</a> interface to
+created an application-defined function "contained_in(boundary,lat,long)"
+that accepts the demo_data.boundary object and a latitute and longitude
+and returns return true or false if the lat/long is contained within
+the boundary.
+One may assume that "contained_in()" is a relatively slow
+functions that we do not want to invoke too frequently.
+Then an efficient way to find the specific ZIP code for the main
+SQLite office would be to run a query like this:
+</p>
+
+<a name="diquery"></a>
+<div class="codeblock"><pre>SELECT objname FROM demo_data, demo_index
+ WHERE demo_data.id=demo_index.id
+ AND contained_in(demo_data.boundary, 35.37785, -80.77470)
+ AND minX&lt;=-80.77470 AND maxX&gt;=-80.77470
+ AND minY&lt;=35.37785 AND maxY&gt;=35.37785;
+</pre></div>
+
+<p>Notice how the query above works: The R*Tree index runs in the outer
+loop to find entries that contain the SQLite main office in their
+boundary box.
+For each row found, SQLite looks up
+the corresponding entry in the demo_data table. It then uses the boundary
+field from the demo_data table as a parameter to the contained_in()
+function and if that function returns true, then we know the sought after
+coordinate is in that ZIP code boundary.</p>
+
+<p>One would get the same answer without the use of the R*Tree index
+using the following simpler query:</p>
+
+<div class="codeblock"><pre>SELECT objname FROM demo_data
+ WHERE contained_in(demo_data.boundary, 35.37785, -80.77470);
+</pre></div>
+
+<p>The problem with this latter query is that it must apply the
+contained_in() function to all entries in the demo_data table.
+The use of the R*Tree in the penultimate query reduces the number of
+calls to contained_in() function to a small subset of the entire table.
+The R*Tree index did not find the exact answer itself, it merely
+limited the search space.</p>
+
+<a name="auxcol"></a>
+
+<h2 id="auxiliary_columns"><span>4.1. </span>Auxiliary Columns</h2>
+
+<p>
+Beginning with SQLite version 3.24.0 (2018-06-04), r-tree tables
+can have auxiliary columns that store arbitrary data.
+Auxiliary columns can be used in place of
+secondary tables such as "demo_data".
+
+</p><p>
+Auxiliary columns are marked with a "+" symbol before the column name.
+Auxiliary columns must come after all of the coordinate boundary columns.
+An RTREE table can have no more than 100 columns total. In other words,
+the count of columns including the integer primary key column,
+the coordinate boundary columns, and all auxiliary columns must be 100 or less.
+The following example shows an r-tree table with auxiliary columns that
+is equivalent to the two tables "demo_index" and "demo_data" above:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE demo_index2 USING rtree(
+ id, -- Integer primary key
+ minX, maxX, -- Minimum and maximum X coordinate
+ minY, maxY, -- Minimum and maximum Y coordinate
+ +objname TEXT, -- name of the object
+ +objtype TEXT, -- object type
+ +boundary BLOB -- detailed boundary of object
+);
+</pre></div>
+
+<p>
+By combining location data and related information into the same
+table, auxiliary columns can provide a cleaner model
+and reduce the need to joins.
+For example, the earlier
+<a href="#diquery">join between demo_index and demo_data</a> can now
+be written as a simple query, like this:
+
+</p><div class="codeblock"><pre>SELECT objname FROM demo_index2
+ WHERE contained_in(boundary, 35.37785, -80.77470)
+ AND minX&lt;=-80.77470 AND maxX&gt;=-80.77470
+ AND minY&lt;=35.37785 AND maxY&gt;=35.37785;
+</pre></div>
+
+<h3 id="limitations"><span>4.1.1. </span>Limitations</h3>
+
+<p>
+For auxiliary columns, only the name of the column matters.
+The <a href="datatype3.html#affinity">type affinity</a> is ignored.
+Constraints such as NOT NULL, UNIQUE, REFERENCES, or CHECK
+are also ignored. However, future versions
+of SQLite might start paying attention to the type affinity and
+constraints, so users of auxiliary columns are advised to leave
+both blank, to avoid future compatibility problems.
+
+<a name="intrtree"></a>
+
+</p><h1 id="integer_valued_r_trees"><span>5. </span>Integer-Valued R-Trees</h1>
+
+<p>
+The default virtual table ("rtree") stores coordinates as
+single-precision (4-byte) floating point numbers. If integer coordinates
+are desired, declare the table using "rtree_i32" instead:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE intrtree USING rtree_i32(id,x0,x1,y0,y1,z0,z1);
+</pre></div>
+
+<p>
+An rtree_i32 stores coordinates as 32-bit signed integers.
+Even though it stores values using integer, the rtree_i32 virtual
+table still uses floating point computations internally as part of
+the r-tree algorithm.
+
+<a name="customquery"></a>
+
+</p><h1 id="custom_r_tree_queries"><span>6. </span>Custom R-Tree Queries</h1>
+
+<p>By using standard SQL expressions in the WHERE clause of a SELECT query,
+a programmer can query for all R*Tree entries that
+intersect with or are contained within a particular bounding-box.
+Custom R*Tree queries, using the MATCH
+operator in the WHERE clause of a SELECT, allow the programmer to query for
+the set of R*Tree entries that intersect any arbitrary region or shape, not
+just a box. This capability is useful, for example, in computing the
+subset of objects in the R*Tree that are visible from a camera positioned
+in 3-D space.
+
+</p><p>Regions for custom R*Tree queries are defined by R*Tree geometry callbacks
+implemented by the application and registered with SQLite via a call to one
+of the following two APIs:
+
+</p><div class="codeblock"><pre>int sqlite3_rtree_query_callback(
+ sqlite3 *db,
+ const char *zQueryFunc,
+ int (*xQueryFunc)(sqlite3_rtree_query_info*),
+ void *pContext,
+ void (*xDestructor)(void*)
+);
+int sqlite3_rtree_geometry_callback(
+ sqlite3 *db,
+ const char *zGeom,
+ int (*xGeom)(sqlite3_rtree_geometry *, int nCoord, double *aCoord, int *pRes),
+ void *pContext
+);
+</pre></div>
+
+<p>The sqlite3_rtree_query_callback() became available with SQLite
+<a href="releaselog/3_8_5.html">version 3.8.5</a> (2014-06-04) and is the preferred interface.
+The sqlite3_rtree_geometry_callback() is an older and less flexible
+interface that is supported for backwards compatibility.
+
+</p><p>A call to one of the above APIs creates a new SQL function named by the
+second parameter (zQueryFunc or zGeom). When that SQL function appears
+on the right-hand side of the MATCH operator and the left-hand side of the
+MATCH operator is any column in the R*Tree virtual table, then the callback
+defined by the third argument (xQueryFunc or xGeom) is invoked to determine
+if a particular object or subtree overlaps the desired region.
+
+</p><p>For example, a query like the following might be used to find all
+R*Tree entries that overlap with a circle centered a 45.3,22.9 with a
+radius of 5.0:
+
+</p><div class="codeblock"><pre>SELECT id FROM demo_index WHERE id MATCH circle(45.3, 22.9, 5.0)
+</pre></div>
+
+<p>The SQL syntax for custom queries is the same regardless of which
+interface, sqlite3_rtree_geometry_callback() or sqlite3_rtree_query_callback(),
+is used to register the SQL function. However, the newer query-style
+callbacks give the application greater control over how the query proceeds.
+
+</p><h2 id="the_legacy_xgeom_callback"><span>6.1. </span>The Legacy xGeom Callback</h2>
+
+<p>The legacy xGeom callback is invoked with four arguments. The first
+argument is a pointer to an sqlite3_rtree_geometry structure which provides
+information about how the SQL function was invoked. The second argument
+is the number of coordinates in each r-tree entry, and is always the same
+for any given R*Tree. The number of coordinates is 2 for a 1-dimensional R*Tree,
+4 for a 2-dimensional R*Tree, 6 for a 3-dimensional R*Tree, and so forth.
+The third argument, aCoord[], is an array of nCoord coordinates that defines
+a bounding box to be tested. The last argument is a pointer into which
+the callback result should be written. The result is zero
+if the bounding-box defined by aCoord[] is completely outside
+the region defined by the xGeom callback and the result is non-zero if
+the bounding-box is inside or overlaps with the xGeom region. The xGeom
+callback should normally return SQLITE_OK. If xGeom returns anything other
+than SQLITE_OK, then the r-tree query will abort with an error.
+
+</p><p>The sqlite3_rtree_geometry structure that the first argument to the
+xGeom callback points to has a structure shown below. The exact same
+sqlite3_rtree_geometry
+structure is used for every callback for same MATCH operator in the same
+query. The contents of the sqlite3_rtree_geometry
+structure are initialized by SQLite but are
+not subsequently modified. The callback is free to make changes to the
+pUser and xDelUser elements of the structure if desired.
+
+</p><div class="codeblock"><pre>typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
+struct sqlite3_rtree_geometry {
+ void *pContext; /* Copy of pContext passed to s_r_g_c() */
+ int nParam; /* Size of array aParam */
+ double *aParam; /* Parameters passed to SQL geom function */
+ void *pUser; /* Callback implementation user data */
+ void (*xDelUser)(void *); /* Called by SQLite to clean up pUser */
+};
+</pre></div>
+
+<p>The pContext member of the sqlite3_rtree_geometry
+structure is always set to a copy of the pContext
+argument passed to sqlite3_rtree_geometry_callback() when the
+callback is registered. The aParam[] array (size nParam) contains the parameter
+values passed to the SQL function on the right-hand side of the MATCH operator.
+In the example "circle" query above, nParam would be set to 3 and the aParam[]
+array would contain the three values 45.3, 22.9 and 5.0.
+
+</p><p>The pUser and xDelUser members of the sqlite3_rtree_geometry structure are
+initially set to NULL. The pUser variable may be set by the callback
+implementation to any arbitrary value that may be useful to subsequent
+invocations of the callback within the same query (for example, a
+pointer to a complicated data structure used to test for region intersection).
+If the xDelUser variable is set to a non-NULL value, then after the
+query has finished running SQLite automatically invokes it with the
+value of the pUser variable as the only argument. In other words, xDelUser
+may be set to a destructor function for the pUser value.
+
+</p><p>The xGeom callback always does a depth-first search of the r-tree.
+
+<a name="xquery"></a>
+
+</p><h2 id="the_new_xqueryfunc_callback"><span>6.2. </span>The New xQueryFunc Callback</h2>
+
+<p>The newer xQueryFunc callback receives more information from the r-tree
+query engine on each call, and it sends more information back to the query engine
+before it returns.
+To help keep the interface manageable, the xQueryFunc callback sends and receives
+information from the query engine as fields in the
+sqlite3_rtree_query_info structure:
+
+</p><div class="codeblock"><pre>struct sqlite3_rtree_query_info {
+ void *pContext; /* pContext from when function registered */
+ int nParam; /* Number of function parameters */
+ sqlite3_rtree_dbl *aParam; /* value of function parameters */
+ void *pUser; /* callback can use this, if desired */
+ void (*xDelUser)(void*); /* function to free pUser */
+ sqlite3_rtree_dbl *aCoord; /* Coordinates of node or entry to check */
+ unsigned int *anQueue; /* Number of pending entries in the queue */
+ int nCoord; /* Number of coordinates */
+ int iLevel; /* Level of current node or entry */
+ int mxLevel; /* The largest iLevel value in the tree */
+ sqlite3_int64 iRowid; /* Rowid for current entry */
+ sqlite3_rtree_dbl rParentScore; /* Score of parent node */
+ int eParentWithin; /* Visibility of parent node */
+ int eWithin; /* OUT: Visiblity */
+ sqlite3_rtree_dbl rScore; /* OUT: Write the score here */
+ /* The following fields are only available in 3.8.11 and later */
+ sqlite3_value **apSqlParam; /* Original SQL values of parameters */
+};
+</pre></div>
+
+<p>The first five fields of the sqlite3_rtree_query_info structure are identical
+to the sqlite3_rtree_geometry structure, and have exactly the same meaning.
+The sqlite3_rtree_query_info structure also contains nCoord and aCoord fields
+which have the same meaning as the parameter of the same name in the xGeom callback.
+
+</p><p>The xQueryFunc must set the eWithin field of sqlite3_rtree_query_info to
+one of the values NOT_WITHIN, PARTLY_WITHIN, or FULLY_WITHIN depending on whether
+or not the bounding box defined by aCoord[] is completely outside the region,
+overlaps the region, or is completely inside the region, respectively. In
+addition, the xQueryFunc must set the rScore field to a non-negative value that
+indicates the order in which subtrees and entries of the query should be analyzed
+and returned. Smaller scores are processed first.
+
+</p><p>As its name implies, an R*Tree is organized as a tree. Each node of the
+tree is a bounding box. The root of the tree is a bounding box that encapsulates
+all elements of the tree. Beneath the root are a number of subtrees (typically
+20 or more) each with their own smaller bounding boxes and each containing some
+subset of the R*Tree entries. The subtrees may have sub-subtrees, and so forth
+until finally one reaches the leaves of the tree which are the actual R*Tree
+entries.
+
+</p><p>An R*Tree query is initialized by making the root node the only entry
+in a priority queue sorted by rScore.
+The query proceeds by extracting the entry from the priority queue that has
+the lowest score. If that entry is a leaf (meaning that it is an actual
+R*Tree entry and not a subtree) then that entry
+is returned as one row of the query result.
+If the extracted priority queue entry is a node (a subtree),
+then the next child of that node is passed to the xQueryFunc callback.
+If the node has more children then it is returned to the priority queue.
+Otherwise it is discarded. Those subelements for which the xQueryFunc
+callback sets eWithin to PARTLY_WITHIN or FULLY_WITHIN are added to the
+priority queue using the score supplied by the callback. Subelements that
+return NOT_WITHIN are discarded. The query runs until the priority queue is
+empty.
+
+</p><p>Every leaf entry and node (subtree) within the R*Tree has an integer "level".
+The leaves have a level of 0. The first containing subtree of the leaves has
+a level of 1. The root of the R*Tree has the largest level value. The
+mxLevel entry in the sqlite3_rtree_query_info structure is the level value for
+the root of the R*Tree. The iLevel entry in sqlite3_rtree_query_info gives the
+level for the object being interrogated.
+
+</p><p>Most R*Tree queries use a depth-first search. This is accomplished by setting
+the rScore equal to iLevel. A depth-first search is usually preferred since it
+minimizes the number of elements in the priority queue, which reduces memory
+requirements and speeds processing. However, some application may prefer a
+breadth-first search, which can be accomplished by setting rScore to mxLevel-iLevel.
+By creating more complex formulas for rScore, applications can exercise
+detailed control over the order in which subtree are searched and leaf
+R*Tree entries are returned. For example, in an application with many
+millions of R*Tree entries, the rScore might be arranged so that the
+largest or most significant entries are returned first, allowing the
+application to display the most important information quickly, and
+filling in smaller and less important details as they become available.
+
+</p><p>Other information fields of the sqlite3_rtree_query_info structure are
+available for use by the xQueryFunc callback, if desired. The iRowid field
+is the rowid (the first of the 3 to 11 columns in the R*Tree) for the element
+being considered. iRowid is only valid for leaves. The eParentWithin and
+rParentScore values are copies of the eWithin and rScore values from the
+containing subtree of the current row. The anQueue field is an array
+of mxLevel+1 unsigned integers that tell the current number of elements in
+the priority queue at each level.
+
+</p><h2 id="additional_considerations_for_custom_queries"><span>6.3. </span>Additional Considerations for Custom Queries</h2>
+
+<p>
+The MATCH operator of a custom R*Tree query function must be a top-level
+AND-connected term of the WHERE clause, or else it will not be usable
+by the R*Tree query optimizer and the query will not be runnable.
+If the MATCH operator is connected to other terms of the WHERE clause
+via an OR operator, for example, the query will fail with an error.
+
+</p><p>
+Two or more MATCH operators are allowed in the same WHERE clause, as long
+as they are connected by AND operators. However,
+the R*Tree query engine only contains a single priority queue. The priority
+assigned to each node in the search is the lowest priority returned by any
+of the MATCH operators.
+
+</p><h1 id="implementation_details"><span>7. </span>Implementation Details</h1>
+
+<p>
+The following sections describe some low-level details of the R*Tree implementation,
+that might be useful for trouble-shooting or performance analysis.
+
+<a name="xshadow"></a>
+
+</p><h2 id="shadow_tables"><span>7.1. </span>Shadow Tables</h2>
+
+<p>The content of an R*Tree index is actually stored in three ordinary
+SQLite tables with names derived from the name of the R*Tree. These
+three tables are called "<a href="vtab.html#xshadowname">shadow tables</a>". This is their schema:
+
+</p><div class="codeblock"><pre>CREATE TABLE %_node(nodeno INTEGER PRIMARY KEY, data)
+CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode)
+CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno)
+</pre></div>
+
+<p>The "%" in the name of each shadow table is replaced by the name of the
+R*Tree virtual table. So, if the name of the R*Tree table is "xyz" then
+the three shadow tables would be "xyz_node", "xyz_parent", and "xyz_rowid".
+
+</p><p>There is one entry in the %_node table for each R*Tree node. An
+R*Tree node consists of one or more entries that are proximate to one another.
+The nodes of an R*Tree for a tree. All nodes other than the root have an
+entry in the %_parent shadow table that identifies the parent node.
+Each entry in an R*Tree has a rowid. The %_rowid shadow table maps entry
+rowids to the node that contains that entry.
+
+</p><p>Extra columns appended to the %_rowid table hold the
+content of <a href="rtree.html#auxcol">auxiliary columns</a>. The names of these extra
+%_rowid columns are probably not the same as the
+actual auxiliary column names.
+
+<a name="rtreecheck"></a>
+
+</p><h2 id="integrity_check_using_the_rtreecheck_sql_function"><span>7.2. </span>Integrity Check using the rtreecheck() SQL function</h2>
+
+<p>The scalar SQL function rtreecheck(R) or rtreecheck(S,R) runs an
+integrity check on the rtree table named R contained within database S.
+The function returns a human-language description of any problems found,
+or the string 'ok' if everything is ok. Running rtreecheck() on an R*Tree
+virtual table is similar to running <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> on a
+database.
+
+</p><p>Example: To verify that an R*Tree named "demo_index" is well-formed
+and internally consistent, run:
+
+</p><div class="codeblock"><pre>SELECT rtreecheck('demo_index');
+</pre></div>
+
+<p>The rtreecheck() function performs the following checks:
+
+</p><ol>
+<li><p>
+For each cell in the r-tree structure (%_node table), that:
+</p><ol type="a">
+<li><p> for each dimension, (coord1 &lt;= coord2).
+</p></li><li><p> unless the cell is on the root node, that the cell is bounded
+ by the parent cell on the parent node.
+</p></li><li><p> for leaf nodes, that there is an entry in the %_rowid
+ table corresponding to the cell's rowid value that
+ points to the correct node.
+</p></li><li><p> for cells on non-leaf nodes, that there is an entry in the
+ %_parent table mapping from the cell's child node to the
+ node that it resides on.
+</p></li></ol>
+</li><li><p>
+That there are the same number of entries in the %_rowid table
+as there are leaf cells in the r-tree structure, and that there
+is a leaf cell that corresponds to each entry in the %_rowid table.
+</p></li><li><p>
+That there are the same number of entries in the %_parent table
+as there are non-leaf cells in the r-tree structure, and that
+there is a non-leaf cell that corresponds to each entry in the
+%_parent table.
+</p></li></ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/rtree.in?m=10065d07f5d8bb57b">2021-09-29 16:36:36</a> UTC </small></i></p>
+
diff --git a/www/schematab.html b/www/schematab.html
new file mode 100644
index 0000000..cc0fef1
--- /dev/null
+++ b/www/schematab.html
@@ -0,0 +1,281 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Schema Table</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Schema Table
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#alternative_names">2. Alternative Names</a></div>
+<div class="fancy-toc1"><a href="#interpretation_of_the_schema_table">3. Interpretation Of The Schema Table</a></div>
+<div class="fancy-toc1"><a href="#creation_and_modification_of_the_schema_table">4. Creation and Modification Of The Schema Table</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>Every SQLite database contains a single "schema table" that stores the
+schema for that database. The schema for a database is a description of
+all of the other tables, indexes, triggers, and views that are
+contained within the database. The schema table looks like this:
+
+</p><blockquote><pre>
+CREATE TABLE sqlite_schema(
+ type text,
+ name text,
+ tbl_name text,
+ rootpage integer,
+ sql text
+);
+</pre></blockquote>
+
+<p>The sqlite_schema table contains one row for each table, index, view,
+and trigger (collectively "objects") in the schema, except there
+is no entry for the sqlite_schema table itself. See the
+<a href="fileformat2.html#ffschema">schema storage</a> subsection of the <a href="fileformat2.html">file format</a> documentation for
+additional information on how SQLite uses the sqlite_schema table
+internally.
+
+</p><h1 id="alternative_names"><span>2. </span>Alternative Names</h1>
+
+<p>The schema table can always be referenced using the name "sqlite_schema",
+especially if qualifed by the schema name like
+"main.sqlite_schema" or "temp.sqlite_schema". But for historical
+compatibility, some alternative names are also recognized, including:
+
+</p><ol>
+<li> sqlite_master
+</li><li> sqlite_temp_schema
+</li><li> sqlite_temp_master
+</li></ol>
+
+<p>
+Alternatives (2) and (3) only work for the TEMP database associated
+with each database connection, but alternative (1) works anywhere.
+For historical reasons, callbacks from the <a href="c3ref/set_authorizer.html">sqlite3_set_authorizer()</a>
+interface always refer to the schema table using names (1) or (3).
+
+</p><h1 id="interpretation_of_the_schema_table"><span>3. </span>Interpretation Of The Schema Table</h1>
+
+<p>The meanings of the fields of the schema table are as follows:
+
+</p><dl>
+<dt><b>type</b></dt>
+<dd>
+<p>The sqlite_schema.type column will be one
+of the following text strings: 'table', 'index', 'view', or 'trigger'
+according to the type of object defined. The 'table' string is used
+for both ordinary and <a href="vtab.html">virtual tables</a>.</p>
+</dd>
+
+<dt><b>name</b></dt><dt>
+</dt><dd>
+<p>The sqlite_schema.name column will hold the name of the object.
+(<a href="lang_createtable.html#uniqueconst">UNIQUE</a> and <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraints on tables cause SQLite to create
+<a href="fileformat2.html#intschema">internal indexes</a> with names of the form "sqlite_autoindex_TABLE_N"
+where TABLE is replaced by the name of the table that contains the
+constraint and N is an integer beginning with 1 and increasing by one
+with each constraint seen in the table definition.
+In a <a href="withoutrowid.html">WITHOUT ROWID</a> table, there is no sqlite_schema entry for the
+PRIMARY KEY, but the "sqlite_autoindex_TABLE_N" name is set aside
+for the PRIMARY KEY as if the sqlite_schema entry did exist. This
+will affect the numbering of subsequent UNIQUE constraints.
+The "sqlite_autoindex_TABLE_N" name is never allocated for an
+<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>, either in rowid tables or WITHOUT ROWID tables.
+</p>
+</dd>
+
+<dt><b>tbl_name</b></dt>
+<dd>
+<p>The sqlite_schema.tbl_name column holds the name of a table or view
+that the object is associated with. For a table or view, the
+tbl_name column is a copy of the name column. For an index, the tbl_name
+is the name of the table that is indexed. For a trigger, the tbl_name
+column stores the name of the table or view that causes the trigger
+to fire.</p>
+</dd>
+
+<dt><b>rootpage</b></dt>
+<dd>
+<p>The sqlite_schema.rootpage column stores the page number of the root
+b-tree page for tables and indexes. For rows that define views, triggers,
+and virtual tables, the rootpage column is 0 or NULL.</p>
+</dd>
+
+<dt><b>sql</b></dt>
+<dd>
+<p>The sqlite_schema.sql column stores SQL text that describes the
+object. This SQL text is a <a href="lang_createtable.html">CREATE TABLE</a>, <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a>,
+<a href="lang_createindex.html">CREATE INDEX</a>,
+<a href="lang_createview.html">CREATE VIEW</a>, or <a href="lang_createtrigger.html">CREATE TRIGGER</a> statement that if evaluated against
+the database file when it is the main database of a <a href="c3ref/sqlite3.html">database connection</a>
+would recreate the object. The text is usually a copy of the original
+statement used to create the object but with normalizations applied so
+that the text conforms to the following rules:
+
+</p><ul>
+<li>The CREATE, TABLE, VIEW, TRIGGER, and INDEX keywords at the beginning
+of the statement are converted to all upper case letters.
+</li><li>The TEMP or TEMPORARY keyword is removed if it occurs after the
+initial CREATE keyword.
+</li><li>Any database name qualifier that occurs prior to the name of the
+object being created is removed.
+</li><li>Leading spaces are removed.
+</li><li>All spaces following the first two keywords are converted into a single
+space.
+</li></ul>
+
+<p>The text in the sqlite_schema.sql column is a copy of the original
+CREATE statement text that created the object, except normalized as
+described above and as modified by subsequent <a href="lang_altertable.html">ALTER TABLE</a> statements.
+The sqlite_schema.sql is NULL for the <a href="fileformat2.html#intschema">internal indexes</a> that are
+automatically created by <a href="lang_createtable.html#uniqueconst">UNIQUE</a> or <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> constraints.</p>
+</dd>
+</dl>
+
+<h1 id="creation_and_modification_of_the_schema_table"><span>4. </span>Creation and Modification Of The Schema Table</h1>
+
+<p>SQLite creates the schema table upon database creation and modifies
+its content as SQLite users submit DDL statements for execution. There
+is no need for users to modify it under normal circumstances, and they
+bear the risk of <a href="howtocorrupt.html#cfgerr">database corruption</a> if they do modify it.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/schematab.in?m=09b9236153411467a">2022-02-15 00:09:14</a> UTC </small></i></p>
+
diff --git a/www/search b/www/search
new file mode 100755
index 0000000..02edc49
--- /dev/null
+++ b/www/search
@@ -0,0 +1,1440 @@
+#!/usr/bin/tclsh.docsrc
+#### Import of wapp.tcl
+# Copyright (c) 2017 D. Richard Hipp
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the Simplified BSD License (also
+# known as the "2-Clause License" or "FreeBSD License".)
+#
+# This program is distributed in the hope that it will be useful,
+# but without any warranty; without even the implied warranty of
+# merchantability or fitness for a particular purpose.
+#
+#---------------------------------------------------------------------------
+#
+# Design rules:
+#
+# (1) All identifiers in the global namespace begin with "wapp"
+#
+# (2) Indentifiers intended for internal use only begin with "wappInt"
+#
+package require Tcl 8.6
+
+# Add text to the end of the HTTP reply. No interpretation or transformation
+# of the text is performs. The argument should be enclosed within {...}
+#
+proc wapp {txt} {
+ global wapp
+ dict append wapp .reply $txt
+}
+
+# Add text to the page under construction. Do no escaping on the text.
+#
+# Though "unsafe" in general, there are uses for this kind of thing.
+# For example, if you want to return the complete, unmodified content of
+# a file:
+#
+# set fd [open content.html rb]
+# wapp-unsafe [read $fd]
+# close $fd
+#
+# You could do the same thing using ordinary "wapp" instead of "wapp-unsafe".
+# The difference is that wapp-safety-check will complain about the misuse
+# of "wapp", but it assumes that the person who write "wapp-unsafe" understands
+# the risks.
+#
+# Though occasionally necessary, the use of this interface should be minimized.
+#
+proc wapp-unsafe {txt} {
+ global wapp
+ dict append wapp .reply $txt
+}
+
+# Add text to the end of the reply under construction. The following
+# substitutions are made:
+#
+# %html(...) Escape text for inclusion in HTML
+# %url(...) Escape text for use as a URL
+# %qp(...) Escape text for use as a URI query parameter
+# %string(...) Escape text for use within a JSON string
+# %unsafe(...) No transformations of the text
+#
+# The substitutions above terminate at the first ")" character. If the
+# text of the TCL string in ... contains ")" characters itself, use instead:
+#
+# %html%(...)%
+# %url%(...)%
+# %qp%(...)%
+# %string%(...)%
+# %unsafe%(...)%
+#
+# In other words, use "%(...)%" instead of "(...)" to include the TCL string
+# to substitute.
+#
+# The %unsafe substitution should be avoided whenever possible, obviously.
+# In addition to the substitutions above, the text also does backslash
+# escapes.
+#
+# The wapp-trim proc works the same as wapp-subst except that it also removes
+# whitespace from the left margin, so that the generated HTML/CSS/Javascript
+# does not appear to be indented when delivered to the client web browser.
+#
+if {$tcl_version>=8.7} {
+ proc wapp-subst {txt} {
+ global wapp
+ regsub -all -command \
+ {%(html|url|qp|string|unsafe){1,1}?(|%)\((.+)\)\2} $txt wappInt-enc txt
+ dict append wapp .reply [subst -novariables -nocommand $txt]
+ }
+ proc wapp-trim {txt} {
+ global wapp
+ regsub -all {\n\s+} [string trim $txt] \n txt
+ regsub -all -command \
+ {%(html|url|qp|string|unsafe){1,1}?(|%)\((.+)\)\2} $txt wappInt-enc txt
+ dict append wapp .reply [subst -novariables -nocommand $txt]
+ }
+ proc wappInt-enc {all mode nu1 txt} {
+ return [uplevel 2 "wappInt-enc-$mode \"$txt\""]
+ }
+} else {
+ proc wapp-subst {txt} {
+ global wapp
+ regsub -all {%(html|url|qp|string|unsafe){1,1}?(|%)\((.+)\)\2} $txt \
+ {[wappInt-enc-\1 "\3"]} txt
+ dict append wapp .reply [uplevel 1 [list subst -novariables $txt]]
+ }
+ proc wapp-trim {txt} {
+ global wapp
+ regsub -all {\n\s+} [string trim $txt] \n txt
+ regsub -all {%(html|url|qp|string|unsafe){1,1}?(|%)\((.+)\)\2} $txt \
+ {[wappInt-enc-\1 "\3"]} txt
+ dict append wapp .reply [uplevel 1 [list subst -novariables $txt]]
+ }
+}
+
+# There must be a wappInt-enc-NAME routine for each possible substitution
+# in wapp-subst. Thus there are routines for "html", "url", "qp", and "unsafe".
+#
+# wappInt-enc-html Escape text so that it is safe to use in the
+# body of an HTML document.
+#
+# wappInt-enc-url Escape text so that it is safe to pass as an
+# argument to href= and src= attributes in HTML.
+#
+# wappInt-enc-qp Escape text so that it is safe to use as the
+# value of a query parameter in a URL or in
+# post data or in a cookie.
+#
+# wappInt-enc-string Escape ", ', \, and < for using inside of a
+# javascript string literal. The < character
+# is escaped to prevent "</script>" from causing
+# problems in embedded javascript.
+#
+# wappInt-enc-unsafe Perform no encoding at all. Unsafe.
+#
+proc wappInt-enc-html {txt} {
+ return [string map {& &amp; < &lt; > &gt; \" &quot; \\ &#92;} $txt]
+}
+proc wappInt-enc-unsafe {txt} {
+ return $txt
+}
+proc wappInt-enc-url {s} {
+ if {[regsub -all {[^-{}\\@~?=#_.:/a-zA-Z0-9]} $s {[wappInt-%HHchar {&}]} s]} {
+ set s [subst -novar -noback $s]
+ }
+ if {[regsub -all {[\\{}]} $s {[wappInt-%HHchar \\&]} s]} {
+ set s [subst -novar -noback $s]
+ }
+ return $s
+}
+proc wappInt-enc-qp {s} {
+ if {[regsub -all {[^-{}\\_.a-zA-Z0-9]} $s {[wappInt-%HHchar {&}]} s]} {
+ set s [subst -novar -noback $s]
+ }
+ if {[regsub -all {[\\{}]} $s {[wappInt-%HHchar \\&]} s]} {
+ set s [subst -novar -noback $s]
+ }
+ return $s
+}
+proc wappInt-enc-string {s} {
+ return [string map {\\ \\\\ \" \\\" ' \\' < \\u003c \n \\n \r \\r
+ \f \\f \t \\t \x01 \\u0001 \x02 \\u0002 \x03 \\u0003
+ \x04 \\u0004 \x05 \\u0005 \x06 \\u0006 \x07 \\u0007
+ \x0b \\u000b \x0e \\u000e \x0f \\u000f \x10 \\u0010
+ \x11 \\u0011 \x12 \\u0012 \x13 \\u0013 \x14 \\u0014
+ \x15 \\u0015 \x16 \\u0016 \x17 \\u0017 \x18 \\u0018
+ \x19 \\u0019 \x1a \\u001a \x1b \\u001b \x1c \\u001c
+ \x1d \\u001d \x1e \\u001e \x1f \\u001f} $s]
+}
+
+# This is a helper routine for wappInt-enc-url and wappInt-enc-qp. It returns
+# an appropriate %HH encoding for the single character c. If c is a unicode
+# character, then this routine might return multiple bytes: %HH%HH%HH
+#
+proc wappInt-%HHchar {c} {
+ if {$c==" "} {return +}
+ return [regsub -all .. [binary encode hex [encoding convertto utf-8 $c]] {%&}]
+}
+
+
+# Undo the www-url-encoded format.
+#
+# HT: This code stolen from ncgi.tcl
+#
+proc wappInt-decode-url {str} {
+ set str [string map [list + { } "\\" "\\\\" \[ \\\[ \] \\\]] $str]
+ regsub -all -- \
+ {%([Ee][A-Fa-f0-9])%([89ABab][A-Fa-f0-9])%([89ABab][A-Fa-f0-9])} \
+ $str {[encoding convertfrom utf-8 [binary decode hex \1\2\3]]} str
+ regsub -all -- \
+ {%([CDcd][A-Fa-f0-9])%([89ABab][A-Fa-f0-9])} \
+ $str {[encoding convertfrom utf-8 [binary decode hex \1\2]]} str
+ regsub -all -- {%([0-7][A-Fa-f0-9])} $str {\\u00\1} str
+ return [subst -novar $str]
+}
+
+# Reset the document back to an empty string.
+#
+proc wapp-reset {} {
+ global wapp
+ dict set wapp .reply {}
+}
+
+# Change the mime-type of the result document.
+#
+proc wapp-mimetype {x} {
+ global wapp
+ dict set wapp .mimetype $x
+}
+
+# Change the reply code.
+#
+proc wapp-reply-code {x} {
+ global wapp
+ dict set wapp .reply-code $x
+}
+
+# Set a cookie
+#
+proc wapp-set-cookie {name value} {
+ global wapp
+ dict lappend wapp .new-cookies $name $value
+}
+
+# Unset a cookie
+#
+proc wapp-clear-cookie {name} {
+ wapp-set-cookie $name {}
+}
+
+# Add extra entries to the reply header
+#
+proc wapp-reply-extra {name value} {
+ global wapp
+ dict lappend wapp .reply-extra $name $value
+}
+
+# Specifies how the web-page under construction should be cached.
+# The argument should be one of:
+#
+# no-cache
+# max-age=N (for some integer number of seconds, N)
+# private,max-age=N
+#
+proc wapp-cache-control {x} {
+ wapp-reply-extra Cache-Control $x
+}
+
+# Redirect to a different web page
+#
+proc wapp-redirect {uri} {
+ wapp-reply-code {307 Redirect}
+ wapp-reply-extra Location $uri
+}
+
+# Return the value of a wapp parameter
+#
+proc wapp-param {name {dflt {}}} {
+ global wapp
+ if {![dict exists $wapp $name]} {return $dflt}
+ return [dict get $wapp $name]
+}
+
+# Return true if a and only if the wapp parameter $name exists
+#
+proc wapp-param-exists {name} {
+ global wapp
+ return [dict exists $wapp $name]
+}
+
+# Set the value of a wapp parameter
+#
+proc wapp-set-param {name value} {
+ global wapp
+ dict set wapp $name $value
+}
+
+# Return all parameter names that match the GLOB pattern, or all
+# names if the GLOB pattern is omitted.
+#
+proc wapp-param-list {{glob {*}}} {
+ global wapp
+ return [dict keys $wapp $glob]
+}
+
+# By default, Wapp does not decode query parameters and POST parameters
+# for cross-origin requests. This is a security restriction, designed to
+# help prevent cross-site request forgery (CSRF) attacks.
+#
+# As a consequence of this restriction, URLs for sites generated by Wapp
+# that contain query parameters will not work as URLs found in other
+# websites. You cannot create a link from a second website into a Wapp
+# website if the link contains query planner, by default.
+#
+# Of course, it is sometimes desirable to allow query parameters on external
+# links. For URLs for which this is safe, the application should invoke
+# wapp-allow-xorigin-params. This procedure tells Wapp that it is safe to
+# go ahead and decode the query parameters even for cross-site requests.
+#
+# In other words, for Wapp security is the default setting. Individual pages
+# need to actively disable the cross-site request security if those pages
+# are safe for cross-site access.
+#
+proc wapp-allow-xorigin-params {} {
+ global wapp
+ if {![dict exists $wapp .qp] && ![dict get $wapp SAME_ORIGIN]} {
+ wappInt-decode-query-params
+ }
+}
+
+# Set the content-security-policy.
+#
+# The default content-security-policy is very strict: "default-src 'self'"
+# The default policy prohibits the use of in-line javascript or CSS.
+#
+# Provide an alternative CSP as the argument. Or use "off" to disable
+# the CSP completely.
+#
+proc wapp-content-security-policy {val} {
+ global wapp
+ if {$val=="off"} {
+ dict unset wapp .csp
+ } else {
+ dict set wapp .csp $val
+ }
+}
+
+# Examine the bodys of all procedures in this program looking for
+# unsafe calls to various Wapp interfaces. Return a text string
+# containing warnings. Return an empty string if all is ok.
+#
+# This routine is advisory only. It misses some constructs that are
+# dangerous and flags others that are safe.
+#
+proc wapp-safety-check {} {
+ set res {}
+ foreach p [info command] {
+ set ln 0
+ foreach x [split [info body $p] \n] {
+ incr ln
+ if {[regexp {^[ \t]*wapp[ \t]+([^\n]+)} $x all tail]
+ && [string index $tail 0]!="\173"
+ && [regexp {[[$]} $tail]
+ } {
+ append res "$p:$ln: unsafe \"wapp\" call: \"[string trim $x]\"\n"
+ }
+ if {[regexp {^[ \t]*wapp-(subst|trim)[ \t]+[^\173]} $x all cx]} {
+ append res "$p:$ln: unsafe \"wapp-$cx\" call: \"[string trim $x]\"\n"
+ }
+ }
+ }
+ return $res
+}
+
+# Return a string that descripts the current environment. Applications
+# might find this useful for debugging.
+#
+proc wapp-debug-env {} {
+ global wapp
+ set out {}
+ foreach var [lsort [dict keys $wapp]] {
+ if {[string index $var 0]=="."} continue
+ append out "$var = [list [dict get $wapp $var]]\n"
+ }
+ append out "\[pwd\] = [list [pwd]]\n"
+ return $out
+}
+
+# Tracing function for each HTTP request. This is overridden by wapp-start
+# if tracing is enabled.
+#
+proc wappInt-trace {} {}
+
+# Start up a listening socket. Arrange to invoke wappInt-new-connection
+# for each inbound HTTP connection.
+#
+# port Listen on this TCP port. 0 means to select a port
+# that is not currently in use
+#
+# wappmode One of "scgi", "remote-scgi", "server", or "local".
+#
+# fromip If not {}, then reject all requests from IP addresses
+# other than $fromip
+#
+proc wappInt-start-listener {port wappmode fromip} {
+ if {[string match *scgi $wappmode]} {
+ set type SCGI
+ set server [list wappInt-new-connection \
+ wappInt-scgi-readable $wappmode $fromip]
+ } else {
+ set type HTTP
+ set server [list wappInt-new-connection \
+ wappInt-http-readable $wappmode $fromip]
+ }
+ if {$wappmode=="local" || $wappmode=="scgi"} {
+ set x [socket -server $server -myaddr 127.0.0.1 $port]
+ } else {
+ set x [socket -server $server $port]
+ }
+ set coninfo [chan configure $x -sockname]
+ set port [lindex $coninfo 2]
+ if {$wappmode=="local"} {
+ wappInt-start-browser http://127.0.0.1:$port/
+ } elseif {$fromip!=""} {
+ puts "Listening for $type requests on TCP port $port from IP $fromip"
+ } else {
+ puts "Listening for $type requests on TCP port $port"
+ }
+}
+
+# Start a web-browser and point it at $URL
+#
+proc wappInt-start-browser {url} {
+ global tcl_platform
+ if {$tcl_platform(platform)=="windows"} {
+ exec cmd /c start $url &
+ } elseif {$tcl_platform(os)=="Darwin"} {
+ exec open $url &
+ } elseif {[catch {exec xdg-open $url}]} {
+ exec firefox $url &
+ }
+}
+
+# This routine is a "socket -server" callback. The $chan, $ip, and $port
+# arguments are added by the socket command.
+#
+# Arrange to invoke $callback when content is available on the new socket.
+# The $callback will process inbound HTTP or SCGI content. Reject the
+# request if $fromip is not an empty string and does not match $ip.
+#
+proc wappInt-new-connection {callback wappmode fromip chan ip port} {
+ upvar #0 wappInt-$chan W
+ if {$fromip!="" && ![string match $fromip $ip]} {
+ close $chan
+ return
+ }
+ set W [dict create REMOTE_ADDR $ip REMOTE_PORT $port WAPP_MODE $wappmode \
+ .header {}]
+ fconfigure $chan -blocking 0 -translation binary
+ fileevent $chan readable [list $callback $chan]
+}
+
+# Close an input channel
+#
+proc wappInt-close-channel {chan} {
+ if {$chan=="stdout"} {
+ # This happens after completing a CGI request
+ exit 0
+ } else {
+ unset ::wappInt-$chan
+ close $chan
+ }
+}
+
+# Process new text received on an inbound HTTP request
+#
+proc wappInt-http-readable {chan} {
+ if {[catch [list wappInt-http-readable-unsafe $chan] msg]} {
+ puts stderr "$msg\n$::errorInfo"
+ wappInt-close-channel $chan
+ }
+}
+proc wappInt-http-readable-unsafe {chan} {
+ upvar #0 wappInt-$chan W wapp wapp
+ if {![dict exists $W .toread]} {
+ # If the .toread key is not set, that means we are still reading
+ # the header
+ set line [string trimright [gets $chan]]
+ set n [string length $line]
+ if {$n>0} {
+ if {[dict get $W .header]=="" || [regexp {^\s+} $line]} {
+ dict append W .header $line
+ } else {
+ dict append W .header \n$line
+ }
+ if {[string length [dict get $W .header]]>100000} {
+ error "HTTP request header too big - possible DOS attack"
+ }
+ } elseif {$n==0} {
+ # We have reached the blank line that terminates the header.
+ global argv0
+ if {[info exists ::argv0]} {
+ set a0 [file normalize $argv0]
+ } else {
+ set a0 /
+ }
+ dict set W SCRIPT_FILENAME $a0
+ dict set W DOCUMENT_ROOT [file dir $a0]
+ if {[wappInt-parse-header $chan]} {
+ catch {close $chan}
+ return
+ }
+ set len 0
+ if {[dict exists $W CONTENT_LENGTH]} {
+ set len [dict get $W CONTENT_LENGTH]
+ }
+ if {$len>0} {
+ # Still need to read the query content
+ dict set W .toread $len
+ } else {
+ # There is no query content, so handle the request immediately
+ set wapp $W
+ wappInt-handle-request $chan
+ }
+ }
+ } else {
+ # If .toread is set, that means we are reading the query content.
+ # Continue reading until .toread reaches zero.
+ set got [read $chan [dict get $W .toread]]
+ dict append W CONTENT $got
+ dict set W .toread [expr {[dict get $W .toread]-[string length $got]}]
+ if {[dict get $W .toread]<=0} {
+ # Handle the request as soon as all the query content is received
+ set wapp $W
+ wappInt-handle-request $chan
+ }
+ }
+}
+
+# Decode the HTTP request header.
+#
+# This routine is always running inside of a [catch], so if
+# any problems arise, simply raise an error.
+#
+proc wappInt-parse-header {chan} {
+ upvar #0 wappInt-$chan W
+ set hdr [split [dict get $W .header] \n]
+ if {$hdr==""} {return 1}
+ set req [lindex $hdr 0]
+ dict set W REQUEST_METHOD [set method [lindex $req 0]]
+ if {[lsearch {GET HEAD POST} $method]<0} {
+ error "unsupported request method: \"[dict get $W REQUEST_METHOD]\""
+ }
+ set uri [lindex $req 1]
+ set split_uri [split $uri ?]
+ set uri0 [lindex $split_uri 0]
+ if {![regexp {^/[-.a-z0-9_/]*$} $uri0]} {
+ error "invalid request uri: \"$uri0\""
+ }
+ dict set W REQUEST_URI $uri0
+ dict set W PATH_INFO $uri0
+ set uri1 [lindex $split_uri 1]
+ dict set W QUERY_STRING $uri1
+ set n [llength $hdr]
+ for {set i 1} {$i<$n} {incr i} {
+ set x [lindex $hdr $i]
+ if {![regexp {^(.+): +(.*)$} $x all name value]} {
+ error "invalid header line: \"$x\""
+ }
+ set name [string toupper $name]
+ switch -- $name {
+ REFERER {set name HTTP_REFERER}
+ USER-AGENT {set name HTTP_USER_AGENT}
+ CONTENT-LENGTH {set name CONTENT_LENGTH}
+ CONTENT-TYPE {set name CONTENT_TYPE}
+ HOST {set name HTTP_HOST}
+ COOKIE {set name HTTP_COOKIE}
+ ACCEPT-ENCODING {set name HTTP_ACCEPT_ENCODING}
+ default {set name .hdr:$name}
+ }
+ dict set W $name $value
+ }
+ return 0
+}
+
+# Decode the QUERY_STRING parameters from a GET request or the
+# application/x-www-form-urlencoded CONTENT from a POST request.
+#
+# This routine sets the ".qp" element of the ::wapp dict as a signal
+# that query parameters have already been decoded.
+#
+proc wappInt-decode-query-params {} {
+ global wapp
+ dict set wapp .qp 1
+ if {[dict exists $wapp QUERY_STRING]} {
+ foreach qterm [split [dict get $wapp QUERY_STRING] &] {
+ set qsplit [split $qterm =]
+ set nm [lindex $qsplit 0]
+ if {[regexp {^[a-z][a-z0-9]*$} $nm]} {
+ dict set wapp $nm [wappInt-decode-url [lindex $qsplit 1]]
+ }
+ }
+ }
+ if {[dict exists $wapp CONTENT_TYPE] && [dict exists $wapp CONTENT]} {
+ set ctype [dict get $wapp CONTENT_TYPE]
+ if {$ctype=="application/x-www-form-urlencoded"} {
+ foreach qterm [split [string trim [dict get $wapp CONTENT]] &] {
+ set qsplit [split $qterm =]
+ set nm [lindex $qsplit 0]
+ if {[regexp {^[a-z][-a-z0-9_]*$} $nm]} {
+ dict set wapp $nm [wappInt-decode-url [lindex $qsplit 1]]
+ }
+ }
+ } elseif {[string match multipart/form-data* $ctype]} {
+ regexp {^(.*?)\r\n(.*)$} [dict get $wapp CONTENT] all divider body
+ set ndiv [string length $divider]
+ while {[string length $body]} {
+ set idx [string first $divider $body]
+ set unit [string range $body 0 [expr {$idx-3}]]
+ set body [string range $body [expr {$idx+$ndiv+2}] end]
+ if {[regexp {^Content-Disposition: form-data; (.*?)\r\n\r\n(.*)$} \
+ $unit unit hdr content]} {
+ if {[regexp {name="(.*)"; filename="(.*)"\r\nContent-Type: (.*?)$}\
+ $hdr hr name filename mimetype]} {
+ dict set wapp $name.filename \
+ [string map [list \\\" \" \\\\ \\] $filename]
+ dict set wapp $name.mimetype $mimetype
+ dict set wapp $name.content $content
+ } elseif {[regexp {name="(.*)"} $hdr hr name]} {
+ dict set wapp $name $content
+ }
+ }
+ }
+ }
+ }
+}
+
+# Invoke application-supplied methods to generate a reply to
+# a single HTTP request.
+#
+# This routine uses the global variable ::wapp and so must not be nested.
+# It must run to completion before the next instance runs. If a recursive
+# instances of this routine starts while another is running, the the
+# recursive instance is added to a queue to be invoked after the current
+# instance finishes. Yes, this means that WAPP IS SINGLE THREADED. Only
+# a single page rendering instance my be running at a time. There can
+# be multiple HTTP requests inbound at once, but only one my be processed
+# at a time once the request is full read and parsed.
+#
+set wappIntPending {}
+set wappIntLock 0
+proc wappInt-handle-request {chan} {
+ global wappIntPending wappIntLock
+ fileevent $chan readable {}
+ if {$wappIntLock} {
+ # Another instance of request is already running, so defer this one
+ lappend wappIntPending [list wappInt-handle-request $chan]
+ return
+ }
+ set wappIntLock 1
+ catch [list wappInt-handle-request-unsafe $chan]
+ set wappIntLock 0
+ if {[llength $wappIntPending]>0} {
+ # If there are deferred requests, then launch the oldest one
+ after idle [lindex $wappIntPending 0]
+ set wappIntPending [lrange $wappIntPending 1 end]
+ }
+}
+proc wappInt-handle-request-unsafe {chan} {
+ global wapp
+ dict set wapp .reply {}
+ dict set wapp .mimetype {text/html; charset=utf-8}
+ dict set wapp .reply-code {200 Ok}
+ dict set wapp .csp {default-src 'self'}
+
+ # Set up additional CGI environment values
+ #
+ if {![dict exists $wapp HTTP_HOST]} {
+ dict set wapp BASE_URL {}
+ } elseif {[dict exists $wapp HTTPS]} {
+ dict set wapp BASE_URL https://[dict get $wapp HTTP_HOST]
+ } else {
+ dict set wapp BASE_URL http://[dict get $wapp HTTP_HOST]
+ }
+ if {![dict exists $wapp REQUEST_URI]} {
+ dict set wapp REQUEST_URI /
+ } elseif {[regsub {\?.*} [dict get $wapp REQUEST_URI] {} newR]} {
+ # Some servers (ex: nginx) append the query parameters to REQUEST_URI.
+ # These need to be stripped off
+ dict set wapp REQUEST_URI $newR
+ }
+ if {[dict exists $wapp SCRIPT_NAME]} {
+ dict append wapp BASE_URL [dict get $wapp SCRIPT_NAME]
+ } else {
+ dict set wapp SCRIPT_NAME {}
+ }
+ if {![dict exists $wapp PATH_INFO]} {
+ # If PATH_INFO is missing (ex: nginx) then construct it
+ set URI [dict get $wapp REQUEST_URI]
+ set skip [string length [dict get $wapp SCRIPT_NAME]]
+ dict set wapp PATH_INFO [string range $URI $skip end]
+ }
+ if {[regexp {^/([^/]+)(.*)$} [dict get $wapp PATH_INFO] all head tail]} {
+ dict set wapp PATH_HEAD $head
+ dict set wapp PATH_TAIL [string trimleft $tail /]
+ } else {
+ dict set wapp PATH_INFO {}
+ dict set wapp PATH_HEAD {}
+ dict set wapp PATH_TAIL {}
+ }
+ dict set wapp SELF_URL [dict get $wapp BASE_URL]/[dict get $wapp PATH_HEAD]
+
+ # Parse query parameters from the query string, the cookies, and
+ # POST data
+ #
+ if {[dict exists $wapp HTTP_COOKIE]} {
+ foreach qterm [split [dict get $wapp HTTP_COOKIE] {;}] {
+ set qsplit [split [string trim $qterm] =]
+ set nm [lindex $qsplit 0]
+ if {[regexp {^[a-z][-a-z0-9_]*$} $nm]} {
+ dict set wapp $nm [wappInt-decode-url [lindex $qsplit 1]]
+ }
+ }
+ }
+ set same_origin 0
+ if {[dict exists $wapp HTTP_REFERER]} {
+ set referer [dict get $wapp HTTP_REFERER]
+ set base [dict get $wapp BASE_URL]
+ if {$referer==$base || [string match $base/* $referer]} {
+ set same_origin 1
+ }
+ }
+ dict set wapp SAME_ORIGIN $same_origin
+ if {$same_origin} {
+ wappInt-decode-query-params
+ }
+
+ # Invoke the application-defined handler procedure for this page
+ # request. If an error occurs while running that procedure, generate
+ # an HTTP reply that contains the error message.
+ #
+ wapp-before-dispatch-hook
+ wappInt-trace
+ set mname [dict get $wapp PATH_HEAD]
+ if {[catch {
+ if {$mname!="" && [llength [info command wapp-page-$mname]]>0} {
+ wapp-page-$mname
+ } else {
+ wapp-default
+ }
+ } msg]} {
+ if {[wapp-param WAPP_MODE]=="local" || [wapp-param WAPP_MODE]=="server"} {
+ puts "ERROR: $::errorInfo"
+ }
+ wapp-reset
+ wapp-reply-code "500 Internal Server Error"
+ wapp-mimetype text/html
+ wapp-trim {
+ <h1>Wapp Application Error</h1>
+ <pre>%html($::errorInfo)</pre>
+ }
+ dict unset wapp .new-cookies
+ }
+ wapp-before-reply-hook
+
+ # Transmit the HTTP reply
+ #
+ if {$chan=="stdout"} {
+ puts $chan "Status: [dict get $wapp .reply-code]\r"
+ } else {
+ puts $chan "HTTP/1.1 [dict get $wapp .reply-code]\r"
+ puts $chan "Server: wapp\r"
+ puts $chan "Connection: close\r"
+ }
+ if {[dict exists $wapp .reply-extra]} {
+ foreach {name value} [dict get $wapp .reply-extra] {
+ puts $chan "$name: $value\r"
+ }
+ }
+ if {[dict exists $wapp .csp]} {
+ puts $chan "Content-Security-Policy: [dict get $wapp .csp]\r"
+ }
+ set mimetype [dict get $wapp .mimetype]
+ puts $chan "Content-Type: $mimetype\r"
+ if {[dict exists $wapp .new-cookies]} {
+ foreach {nm val} [dict get $wapp .new-cookies] {
+ if {[regexp {^[a-z][-a-z0-9_]*$} $nm]} {
+ if {$val==""} {
+ puts $chan "Set-Cookie: $nm=; HttpOnly; Path=/; Max-Age=1\r"
+ } else {
+ set val [wappInt-enc-url $val]
+ puts $chan "Set-Cookie: $nm=$val; HttpOnly; Path=/\r"
+ }
+ }
+ }
+ }
+ if {[string match text/* $mimetype]} {
+ set reply [encoding convertto utf-8 [dict get $wapp .reply]]
+ if {[regexp {\ygzip\y} [wapp-param HTTP_ACCEPT_ENCODING]]} {
+ catch {
+ set x [zlib gzip $reply]
+ set reply $x
+ puts $chan "Content-Encoding: gzip\r"
+ }
+ }
+ } else {
+ set reply [dict get $wapp .reply]
+ }
+ puts $chan "Content-Length: [string length $reply]\r"
+ puts $chan \r
+ puts -nonewline $chan $reply
+ flush $chan
+ wappInt-close-channel $chan
+}
+
+# This routine runs just prior to request-handler dispatch. The
+# default implementation is a no-op, but applications can override
+# to do additional transformations or checks.
+#
+proc wapp-before-dispatch-hook {} {return}
+
+# This routine runs after the request-handler dispatch and just
+# before the reply is generated. The default implementation is
+# a no-op, but applications can override to do validation and security
+# checks on the reply, such as verifying that no sensitive information
+# such as an API key or password is accidentally included in the
+# reply text.
+#
+proc wapp-before-reply-hook {} {return}
+
+# Process a single CGI request
+#
+proc wappInt-handle-cgi-request {} {
+ global wapp env
+ foreach key [array names env {[A-Z]*}] {dict set wapp $key $env($key)}
+ set len 0
+ if {[dict exists $wapp CONTENT_LENGTH]} {
+ set len [dict get $wapp CONTENT_LENGTH]
+ }
+ if {$len>0} {
+ fconfigure stdin -translation binary
+ dict set wapp CONTENT [read stdin $len]
+ }
+ dict set wapp WAPP_MODE cgi
+ fconfigure stdout -translation binary
+ wappInt-handle-request-unsafe stdout
+}
+
+# Process new text received on an inbound SCGI request
+#
+proc wappInt-scgi-readable {chan} {
+ if {[catch [list wappInt-scgi-readable-unsafe $chan] msg]} {
+ puts stderr "$msg\n$::errorInfo"
+ wappInt-close-channel $chan
+ }
+}
+proc wappInt-scgi-readable-unsafe {chan} {
+ upvar #0 wappInt-$chan W wapp wapp
+ if {![dict exists $W .toread]} {
+ # If the .toread key is not set, that means we are still reading
+ # the header.
+ #
+ # An SGI header is short. This implementation assumes the entire
+ # header is available all at once.
+ #
+ dict set W .remove_addr [dict get $W REMOTE_ADDR]
+ set req [read $chan 15]
+ set n [string length $req]
+ scan $req %d:%s len hdr
+ incr len [string length "$len:,"]
+ append hdr [read $chan [expr {$len-15}]]
+ foreach {nm val} [split $hdr \000] {
+ if {$nm==","} break
+ dict set W $nm $val
+ }
+ set len 0
+ if {[dict exists $W CONTENT_LENGTH]} {
+ set len [dict get $W CONTENT_LENGTH]
+ }
+ if {$len>0} {
+ # Still need to read the query content
+ dict set W .toread $len
+ } else {
+ # There is no query content, so handle the request immediately
+ dict set W SERVER_ADDR [dict get $W .remove_addr]
+ set wapp $W
+ wappInt-handle-request $chan
+ }
+ } else {
+ # If .toread is set, that means we are reading the query content.
+ # Continue reading until .toread reaches zero.
+ set got [read $chan [dict get $W .toread]]
+ dict append W CONTENT $got
+ dict set W .toread [expr {[dict get $W .toread]-[string length $got]}]
+ if {[dict get $W .toread]<=0} {
+ # Handle the request as soon as all the query content is received
+ dict set W SERVER_ADDR [dict get $W .remove_addr]
+ set wapp $W
+ wappInt-handle-request $chan
+ }
+ }
+}
+
+# Start up the wapp framework. Parameters are a list passed as the
+# single argument.
+#
+# -server $PORT Listen for HTTP requests on this TCP port $PORT
+#
+# -local $PORT Listen for HTTP requests on 127.0.0.1:$PORT
+#
+# -scgi $PORT Listen for SCGI requests on 127.0.0.1:$PORT
+#
+# -remote-scgi $PORT Listen for SCGI requests on TCP port $PORT
+#
+# -cgi Handle a single CGI request
+#
+# With no arguments, the behavior is called "auto". In "auto" mode,
+# if the GATEWAY_INTERFACE environment variable indicates CGI, then run
+# as CGI. Otherwise, start an HTTP server bound to the loopback address
+# only, on an arbitrary TCP port, and automatically launch a web browser
+# on that TCP port.
+#
+# Additional options:
+#
+# -fromip GLOB Reject any incoming request where the remote
+# IP address does not match the GLOB pattern. This
+# value defaults to '127.0.0.1' for -local and -scgi.
+#
+# -nowait Do not wait in the event loop. Return immediately
+# after all event handlers are established.
+#
+# -trace "puts" each request URL as it is handled, for
+# debugging
+#
+# -lint Run wapp-safety-check on the application instead
+# of running the application itself
+#
+# -Dvar=value Set TCL global variable "var" to "value"
+#
+#
+proc wapp-start {arglist} {
+ global env
+ set mode auto
+ set port 0
+ set nowait 0
+ set fromip {}
+ set n [llength $arglist]
+ for {set i 0} {$i<$n} {incr i} {
+ set term [lindex $arglist $i]
+ if {[string match --* $term]} {set term [string range $term 1 end]}
+ switch -glob -- $term {
+ -server {
+ incr i;
+ set mode "server"
+ set port [lindex $arglist $i]
+ }
+ -local {
+ incr i;
+ set mode "local"
+ set fromip 127.0.0.1
+ set port [lindex $arglist $i]
+ }
+ -scgi {
+ incr i;
+ set mode "scgi"
+ set fromip 127.0.0.1
+ set port [lindex $arglist $i]
+ }
+ -remote-scgi {
+ incr i;
+ set mode "remote-scgi"
+ set port [lindex $arglist $i]
+ }
+ -cgi {
+ set mode "cgi"
+ }
+ -fromip {
+ incr i
+ set fromip [lindex $arglist $i]
+ }
+ -nowait {
+ set nowait 1
+ }
+ -trace {
+ proc wappInt-trace {} {
+ set q [wapp-param QUERY_STRING]
+ set uri [wapp-param BASE_URL][wapp-param PATH_INFO]
+ if {$q!=""} {append uri ?$q}
+ puts $uri
+ }
+ }
+ -lint {
+ set res [wapp-safety-check]
+ if {$res!=""} {
+ puts "Potential problems in this code:"
+ puts $res
+ exit 1
+ } else {
+ exit
+ }
+ }
+ -D*=* {
+ if {[regexp {^.D([^=]+)=(.*)$} $term all var val]} {
+ set ::$var $val
+ }
+ }
+ default {
+ error "unknown option: $term"
+ }
+ }
+ }
+ if {$mode=="auto"} {
+ if {[info exists env(GATEWAY_INTERFACE)]
+ && [string match CGI/1.* $env(GATEWAY_INTERFACE)]} {
+ set mode cgi
+ } else {
+ set mode local
+ }
+ }
+ if {$mode=="cgi"} {
+ wappInt-handle-cgi-request
+ } else {
+ wappInt-start-listener $port $mode $fromip
+ if {!$nowait} {
+ vwait ::forever
+ }
+ }
+}
+
+# Call this version 1.0
+package provide wapp 1.0
+
+#### End of wapp.tcl
+
+# Generate all header content for the output document
+#
+proc search_header {} {
+ wapp {
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Search SQLite Documentation</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+ }
+}
+
+#-------------------------------------------------------------------------
+# Add an entry to the log database for the current query. Which
+# returns $nRes results.
+#
+proc search_add_log_entry {nRes} {
+ if {[wapp-param-exists donotlog]} return
+ sqlite3 db2 [file dir [wapp-param SCRIPT_FILENAME]]/search.d/searchlog.db
+ db2 timeout 10000
+ set ip [wapp-param REMOTE_ADDR]
+ set query [wapp-param q]
+ db2 eval {
+ PRAGMA synchronous=OFF;
+ PRAGMA journal_mode=OFF;
+ BEGIN;
+ CREATE TABLE IF NOT EXISTS log(
+ ip, -- IP query was made from
+ query, -- Fts5 query string
+ nres, -- Number of results
+ timestamp DEFAULT CURRENT_TIMESTAMP
+ );
+ INSERT INTO log(ip, query, nres) VALUES($ip, $query, $nRes);
+ COMMIT;
+ }
+ db2 close
+}
+
+#-------------------------------------------------------------------------
+# This command is similar to the builtin Tcl [time] command, except that
+# it only ever runs the supplied script once. Also, instead of returning
+# a string like "xxx microseconds per iteration", it returns "x.yy ms" or
+# "x.yy s", depending on the magnitude of the time spent running the
+# command. For example:
+#
+# % ttime {after 1500}
+# 1.50 s
+# % ttime {after 45}
+# 45.02 ms
+#
+proc ttime {script} {
+ set t [lindex [time [list uplevel $script]] 0]
+ if {$t>1000000} { return [format "%.2f s" [expr {$t/1000000.0}]] }
+ return [format "%.2f ms" [expr {$t/1000.0}]]
+}
+
+#-----------------------------------------------------------------------
+# Do a search of the change log
+#
+proc searchchanges {} {
+ set q [wapp-param q]
+ if {$q==""} {return {}}
+ if {[regexp -all \x22 $q] % 2} { append q \x22 }
+ set x ""
+ foreach word [split $q " "] {
+ append x " \"[string map [list "\"" "\"\""] $word]\""
+ }
+ set q [string trim $x]
+ regsub -all {[^a-zA-Z0-9_]} $q { } q
+ set open {<span style="background-color:#d9f2e6">}
+ set close {</span>}
+ set query {
+ SELECT url, version, idx, highlight(change, 3, $open, $close) AS text
+ FROM change($q) ORDER BY rowid ASC
+ }
+ wapp-trim {
+ <p>Change log entries mentioning: <b>%html($q)</b>
+ <table border=0>
+ }
+ set s2 "style=\"margin-top:0\""
+ set s1 "style=\"font-size:larger; text-align:left\" class=nounderline"
+ set prev ""
+ db eval $query {
+ if {$prev!=$version} {
+ wapp-trim {
+ <tr> <td %unsafe($s1) valign=top> <a href='%url($url)'>%html($version)</a>
+ <td> <ul %unsafe($s2)>
+ }
+ set prev $version
+ }
+ wapp-subst {<li value=%html($idx)> (%html($idx)) %unsafe($text)\n}
+ }
+ wapp-trim {
+ </table>
+ <center><p>You can also see the <a href=changes.html>entire
+ changelog as a single page</a> if you wish.</center>
+ }
+}
+
+#-----------------------------------------------------------------------
+# Do a search over all documentation other than the change log
+#
+proc searchresults {} {
+ set q [wapp-param q]
+ if {$q==""} {return ""}
+
+ # Count the '"' characters in $::A(q). If there is an odd number of
+ # occurences, add a " to the end of the query so that fts5 can parse
+ # it without error.
+ if {[regexp -all \x22 $q] % 2} { append q \x22 }
+
+ # Set iStart to the index of the first result to display. Results are
+ # indexed starting at zero from most to least relevant.
+ #
+ set iStart 0
+ catch {set iStart [expr {[wapp-param i 0]*10}]}
+
+ # Grab a list of rowid results.
+ #
+ set sql {
+ SELECT rowid FROM page WHERE page MATCH $q
+ ORDER BY srank(page) DESC,
+ rank * COALESCE(
+ (SELECT percent FROM weight WHERE id=page.rowid), 100
+ );
+ }
+ if {[catch { set lRowid [db eval $sql] }]} {
+ set x ""
+ foreach word [split $q " "] {
+ append x " \"[string map [list "\"" "\"\""] $word]\""
+ }
+ set q [string trim $x]
+ set lRowid [db eval $sql]
+ }
+
+ set lRes [list]
+ foreach rowid $lRowid {
+ if {$rowid > 1000} {
+ set parent [expr $rowid / 1000]
+ lappend subsections($parent) $rowid
+ } else {
+ lappend lRes $rowid
+ }
+ }
+
+ set nRes [llength $lRes]
+ set lRes [lrange $lRes $iStart [expr $iStart+9]]
+
+ # Add an entry to the log database.
+ #
+ search_add_log_entry $nRes
+
+ # If there are no results, return a message to that effect.
+ #
+ if {[llength $lRes] == 0} {
+ wapp-subst {<p>No Results for: <b>%html($q)</b>\n}
+ }
+
+ # HTML markup used to highlight keywords within FTS5 generated snippets.
+ #
+ set open {<span style="background-color:#d9f2e6">}
+ set close {</span>}
+ set ellipsis {<b>&nbsp;...&nbsp;</b>}
+
+ # Grab the required data
+ #
+ db eval [string map [list %LIST% [join $lRowid ,]] {
+ SELECT
+ rowid AS parentid,
+ snippet(page, 0, $open, $close, $ellipsis, 6) AS s_apis,
+ snippet(page, 2, $open, $close, '', 40) AS s_title1,
+ snippet(page, 3, $open, $close, $ellipsis, 40) AS s_title2,
+ snippet(page, 4, $open, $close, $ellipsis, 40) AS s_content,
+ url, rank
+ FROM page($q)
+ WHERE rowid IN (%LIST%)
+ }] X {
+ foreach k [array names X] { set data($X(parentid),$k) [set X($k)] }
+ }
+
+ set i1 [expr {$iStart+1}]
+ set i2 [expr {($nRes < $iStart+10) ? $nRes : $iStart+10}]
+ wapp-trim {
+ <table border=0>
+ <p>Search results %html($i1)..%html($i2) of %html($nRes) for: <b>%html($q)</b>
+ }
+
+ foreach rowid $lRes {
+
+ foreach a {parentid s_apis s_title1 s_content url rank} {
+ set $a $data($rowid,$a)
+ }
+
+ if {[info exists subsections($parentid)]} {
+ set childid [lindex $subsections($parentid) 0]
+ set link $data($childid,url)
+ set hdr $data($childid,s_title2)
+
+ if {$hdr==""} {
+ set s_content ""
+ } else {
+ set s_content [subst {
+ <b><a style=color:#044a64 href=$link>$hdr</a></b>
+ }]
+ }
+
+ append s_content " $data($childid,s_content)"
+ }
+
+ wapp-trim {<tr>
+ <td valign=top style="line-height:150%">
+ <div style="white-space:wrap;font-size:larger" class=nounderline>
+ <a href="%url($url)">%unsafe($s_title1)</a>
+ <div style="float:right;font-size:smaller;color:#BBB">(%url($url))</div>
+ </div>
+ <div style="margin-left: 10ex; font:larger monospace">%unsafe($s_apis)</div>
+ <div style="margin-left: 4ex; margin-bottom:1.5em">
+ %unsafe($s_content)
+ </div>
+ </td>
+ }
+ }
+ wapp-subst {</table>\n}
+
+
+ # If the query returned more than 10 results, add up to 10 links to
+ # each set of 10 results (first link to results 1-10, second to 11-20,
+ # third to 21-30, as required).
+ #
+ if {$nRes>10} {
+ set s(0) {border:solid #044a64 1px;padding:1ex;margin:1ex;line-height:300%;}
+ set s(1) "$s(0);background:#044a64;color:white"
+ wapp-subst {<center><p>\n}
+ for {set i 0} {$i < 10 && ($i*10)<$nRes} {incr i} {
+ set style $s([expr {($iStart/10)==$i}])
+ wapp-trim {
+ <a style="%html($style)"
+ href="search?q=%qp($q)&i=%qp($i)">%html([expr $i+1])</a>
+ }
+ }
+ wapp-subst {</center>\n}
+ }
+}
+
+# This is the main entry point into the search result page generator
+#
+proc wapp-default {} {
+ wapp-content-security-policy {default-src 'self' 'unsafe-inline'}
+ wapp-allow-xorigin-params
+ if {[wapp-param-exists env]} {
+ search_header
+ wapp-trim {
+ <h1>Environment Dump For Debugging</h1>
+ <pre>%html([wapp-debug-env])</pre>
+ }
+ return
+ }
+
+ # When running using the built-in webserver in Wapp (in other words,
+ # when not running as CGI) any filename that contains a "." loads
+ # directly from the filesystem.
+ if {[wapp-param WAPP_MODE]!="cgi"
+ && [string match *.* [wapp-param PATH_INFO]]
+ } {
+ set altfile [file dir [wapp-param SCRIPT_FILENAME]][wapp-param PATH_INFO]
+ set fd [open $altfile rb]
+ fconfigure $fd -translation binary
+ wapp-unsafe [read $fd]
+ close $fd
+ switch -glob -- $altfile {
+ *.html {
+ wapp-mimetype text/html
+ }
+ *.css {
+ wapp-mimetype text/css
+ }
+ *.gif {
+ wapp-mimetype image/gif
+ }
+ }
+ return
+ }
+
+ search_header
+ sqlite3 db [file dir [wapp-param SCRIPT_FILENAME]]/search.d/search.db
+ set searchType [wapp-param s d]
+ if {$searchType=="c"} {
+ set cmd searchchanges
+ } else {
+ set cmd searchresults
+ }
+ db transaction {
+ set t [ttime {$cmd}]
+ }
+ wapp-trim {
+ <center>
+ <p>Page generated by <a href='fts5.html'>FTS5</a> in about %html($t).
+ </center>
+ <script>
+ window.addEventListener('load', function() {
+ var w = document.getElementById("searchmenu");
+ w.style.display = "block";
+ w = document.getElementById("searchtype");
+ w.value = "%string($searchType)"
+ setTimeout(function(){
+ var s = document.getElementById("searchbox");
+ s.value = "%string([wapp-param q])"
+ s.focus();
+ s.select();
+ }, 30);
+ });
+ </script>
+ }
+}
+wapp-start $argv
diff --git a/www/search.d/admin b/www/search.d/admin
new file mode 100755
index 0000000..72a468d
--- /dev/null
+++ b/www/search.d/admin
@@ -0,0 +1,1248 @@
+#!/usr/bin/tclsh.docsrc
+#### Import of wapp.tcl
+# Copyright (c) 2017 D. Richard Hipp
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the Simplified BSD License (also
+# known as the "2-Clause License" or "FreeBSD License".)
+#
+# This program is distributed in the hope that it will be useful,
+# but without any warranty; without even the implied warranty of
+# merchantability or fitness for a particular purpose.
+#
+#---------------------------------------------------------------------------
+#
+# Design rules:
+#
+# (1) All identifiers in the global namespace begin with "wapp"
+#
+# (2) Indentifiers intended for internal use only begin with "wappInt"
+#
+package require Tcl 8.6
+
+# Add text to the end of the HTTP reply. No interpretation or transformation
+# of the text is performs. The argument should be enclosed within {...}
+#
+proc wapp {txt} {
+ global wapp
+ dict append wapp .reply $txt
+}
+
+# Add text to the page under construction. Do no escaping on the text.
+#
+# Though "unsafe" in general, there are uses for this kind of thing.
+# For example, if you want to return the complete, unmodified content of
+# a file:
+#
+# set fd [open content.html rb]
+# wapp-unsafe [read $fd]
+# close $fd
+#
+# You could do the same thing using ordinary "wapp" instead of "wapp-unsafe".
+# The difference is that wapp-safety-check will complain about the misuse
+# of "wapp", but it assumes that the person who write "wapp-unsafe" understands
+# the risks.
+#
+# Though occasionally necessary, the use of this interface should be minimized.
+#
+proc wapp-unsafe {txt} {
+ global wapp
+ dict append wapp .reply $txt
+}
+
+# Add text to the end of the reply under construction. The following
+# substitutions are made:
+#
+# %html(...) Escape text for inclusion in HTML
+# %url(...) Escape text for use as a URL
+# %qp(...) Escape text for use as a URI query parameter
+# %string(...) Escape text for use within a JSON string
+# %unsafe(...) No transformations of the text
+#
+# The substitutions above terminate at the first ")" character. If the
+# text of the TCL string in ... contains ")" characters itself, use instead:
+#
+# %html%(...)%
+# %url%(...)%
+# %qp%(...)%
+# %string%(...)%
+# %unsafe%(...)%
+#
+# In other words, use "%(...)%" instead of "(...)" to include the TCL string
+# to substitute.
+#
+# The %unsafe substitution should be avoided whenever possible, obviously.
+# In addition to the substitutions above, the text also does backslash
+# escapes.
+#
+# The wapp-trim proc works the same as wapp-subst except that it also removes
+# whitespace from the left margin, so that the generated HTML/CSS/Javascript
+# does not appear to be indented when delivered to the client web browser.
+#
+if {$tcl_version>=8.7} {
+ proc wapp-subst {txt} {
+ global wapp
+ regsub -all -command \
+ {%(html|url|qp|string|unsafe){1,1}?(|%)\((.+)\)\2} $txt wappInt-enc txt
+ dict append wapp .reply [subst -novariables -nocommand $txt]
+ }
+ proc wapp-trim {txt} {
+ global wapp
+ regsub -all {\n\s+} [string trim $txt] \n txt
+ regsub -all -command \
+ {%(html|url|qp|string|unsafe){1,1}?(|%)\((.+)\)\2} $txt wappInt-enc txt
+ dict append wapp .reply [subst -novariables -nocommand $txt]
+ }
+ proc wappInt-enc {all mode nu1 txt} {
+ return [uplevel 2 "wappInt-enc-$mode \"$txt\""]
+ }
+} else {
+ proc wapp-subst {txt} {
+ global wapp
+ regsub -all {%(html|url|qp|string|unsafe){1,1}?(|%)\((.+)\)\2} $txt \
+ {[wappInt-enc-\1 "\3"]} txt
+ dict append wapp .reply [uplevel 1 [list subst -novariables $txt]]
+ }
+ proc wapp-trim {txt} {
+ global wapp
+ regsub -all {\n\s+} [string trim $txt] \n txt
+ regsub -all {%(html|url|qp|string|unsafe){1,1}?(|%)\((.+)\)\2} $txt \
+ {[wappInt-enc-\1 "\3"]} txt
+ dict append wapp .reply [uplevel 1 [list subst -novariables $txt]]
+ }
+}
+
+# There must be a wappInt-enc-NAME routine for each possible substitution
+# in wapp-subst. Thus there are routines for "html", "url", "qp", and "unsafe".
+#
+# wappInt-enc-html Escape text so that it is safe to use in the
+# body of an HTML document.
+#
+# wappInt-enc-url Escape text so that it is safe to pass as an
+# argument to href= and src= attributes in HTML.
+#
+# wappInt-enc-qp Escape text so that it is safe to use as the
+# value of a query parameter in a URL or in
+# post data or in a cookie.
+#
+# wappInt-enc-string Escape ", ', \, and < for using inside of a
+# javascript string literal. The < character
+# is escaped to prevent "</script>" from causing
+# problems in embedded javascript.
+#
+# wappInt-enc-unsafe Perform no encoding at all. Unsafe.
+#
+proc wappInt-enc-html {txt} {
+ return [string map {& &amp; < &lt; > &gt; \" &quot; \\ &#92;} $txt]
+}
+proc wappInt-enc-unsafe {txt} {
+ return $txt
+}
+proc wappInt-enc-url {s} {
+ if {[regsub -all {[^-{}\\@~?=#_.:/a-zA-Z0-9]} $s {[wappInt-%HHchar {&}]} s]} {
+ set s [subst -novar -noback $s]
+ }
+ if {[regsub -all {[\\{}]} $s {[wappInt-%HHchar \\&]} s]} {
+ set s [subst -novar -noback $s]
+ }
+ return $s
+}
+proc wappInt-enc-qp {s} {
+ if {[regsub -all {[^-{}\\_.a-zA-Z0-9]} $s {[wappInt-%HHchar {&}]} s]} {
+ set s [subst -novar -noback $s]
+ }
+ if {[regsub -all {[\\{}]} $s {[wappInt-%HHchar \\&]} s]} {
+ set s [subst -novar -noback $s]
+ }
+ return $s
+}
+proc wappInt-enc-string {s} {
+ return [string map {\\ \\\\ \" \\\" ' \\' < \\u003c \n \\n \r \\r
+ \f \\f \t \\t \x01 \\u0001 \x02 \\u0002 \x03 \\u0003
+ \x04 \\u0004 \x05 \\u0005 \x06 \\u0006 \x07 \\u0007
+ \x0b \\u000b \x0e \\u000e \x0f \\u000f \x10 \\u0010
+ \x11 \\u0011 \x12 \\u0012 \x13 \\u0013 \x14 \\u0014
+ \x15 \\u0015 \x16 \\u0016 \x17 \\u0017 \x18 \\u0018
+ \x19 \\u0019 \x1a \\u001a \x1b \\u001b \x1c \\u001c
+ \x1d \\u001d \x1e \\u001e \x1f \\u001f} $s]
+}
+
+# This is a helper routine for wappInt-enc-url and wappInt-enc-qp. It returns
+# an appropriate %HH encoding for the single character c. If c is a unicode
+# character, then this routine might return multiple bytes: %HH%HH%HH
+#
+proc wappInt-%HHchar {c} {
+ if {$c==" "} {return +}
+ return [regsub -all .. [binary encode hex [encoding convertto utf-8 $c]] {%&}]
+}
+
+
+# Undo the www-url-encoded format.
+#
+# HT: This code stolen from ncgi.tcl
+#
+proc wappInt-decode-url {str} {
+ set str [string map [list + { } "\\" "\\\\" \[ \\\[ \] \\\]] $str]
+ regsub -all -- \
+ {%([Ee][A-Fa-f0-9])%([89ABab][A-Fa-f0-9])%([89ABab][A-Fa-f0-9])} \
+ $str {[encoding convertfrom utf-8 [binary decode hex \1\2\3]]} str
+ regsub -all -- \
+ {%([CDcd][A-Fa-f0-9])%([89ABab][A-Fa-f0-9])} \
+ $str {[encoding convertfrom utf-8 [binary decode hex \1\2]]} str
+ regsub -all -- {%([0-7][A-Fa-f0-9])} $str {\\u00\1} str
+ return [subst -novar $str]
+}
+
+# Reset the document back to an empty string.
+#
+proc wapp-reset {} {
+ global wapp
+ dict set wapp .reply {}
+}
+
+# Change the mime-type of the result document.
+#
+proc wapp-mimetype {x} {
+ global wapp
+ dict set wapp .mimetype $x
+}
+
+# Change the reply code.
+#
+proc wapp-reply-code {x} {
+ global wapp
+ dict set wapp .reply-code $x
+}
+
+# Set a cookie
+#
+proc wapp-set-cookie {name value} {
+ global wapp
+ dict lappend wapp .new-cookies $name $value
+}
+
+# Unset a cookie
+#
+proc wapp-clear-cookie {name} {
+ wapp-set-cookie $name {}
+}
+
+# Add extra entries to the reply header
+#
+proc wapp-reply-extra {name value} {
+ global wapp
+ dict lappend wapp .reply-extra $name $value
+}
+
+# Specifies how the web-page under construction should be cached.
+# The argument should be one of:
+#
+# no-cache
+# max-age=N (for some integer number of seconds, N)
+# private,max-age=N
+#
+proc wapp-cache-control {x} {
+ wapp-reply-extra Cache-Control $x
+}
+
+# Redirect to a different web page
+#
+proc wapp-redirect {uri} {
+ wapp-reply-code {307 Redirect}
+ wapp-reply-extra Location $uri
+}
+
+# Return the value of a wapp parameter
+#
+proc wapp-param {name {dflt {}}} {
+ global wapp
+ if {![dict exists $wapp $name]} {return $dflt}
+ return [dict get $wapp $name]
+}
+
+# Return true if a and only if the wapp parameter $name exists
+#
+proc wapp-param-exists {name} {
+ global wapp
+ return [dict exists $wapp $name]
+}
+
+# Set the value of a wapp parameter
+#
+proc wapp-set-param {name value} {
+ global wapp
+ dict set wapp $name $value
+}
+
+# Return all parameter names that match the GLOB pattern, or all
+# names if the GLOB pattern is omitted.
+#
+proc wapp-param-list {{glob {*}}} {
+ global wapp
+ return [dict keys $wapp $glob]
+}
+
+# By default, Wapp does not decode query parameters and POST parameters
+# for cross-origin requests. This is a security restriction, designed to
+# help prevent cross-site request forgery (CSRF) attacks.
+#
+# As a consequence of this restriction, URLs for sites generated by Wapp
+# that contain query parameters will not work as URLs found in other
+# websites. You cannot create a link from a second website into a Wapp
+# website if the link contains query planner, by default.
+#
+# Of course, it is sometimes desirable to allow query parameters on external
+# links. For URLs for which this is safe, the application should invoke
+# wapp-allow-xorigin-params. This procedure tells Wapp that it is safe to
+# go ahead and decode the query parameters even for cross-site requests.
+#
+# In other words, for Wapp security is the default setting. Individual pages
+# need to actively disable the cross-site request security if those pages
+# are safe for cross-site access.
+#
+proc wapp-allow-xorigin-params {} {
+ global wapp
+ if {![dict exists $wapp .qp] && ![dict get $wapp SAME_ORIGIN]} {
+ wappInt-decode-query-params
+ }
+}
+
+# Set the content-security-policy.
+#
+# The default content-security-policy is very strict: "default-src 'self'"
+# The default policy prohibits the use of in-line javascript or CSS.
+#
+# Provide an alternative CSP as the argument. Or use "off" to disable
+# the CSP completely.
+#
+proc wapp-content-security-policy {val} {
+ global wapp
+ if {$val=="off"} {
+ dict unset wapp .csp
+ } else {
+ dict set wapp .csp $val
+ }
+}
+
+# Examine the bodys of all procedures in this program looking for
+# unsafe calls to various Wapp interfaces. Return a text string
+# containing warnings. Return an empty string if all is ok.
+#
+# This routine is advisory only. It misses some constructs that are
+# dangerous and flags others that are safe.
+#
+proc wapp-safety-check {} {
+ set res {}
+ foreach p [info command] {
+ set ln 0
+ foreach x [split [info body $p] \n] {
+ incr ln
+ if {[regexp {^[ \t]*wapp[ \t]+([^\n]+)} $x all tail]
+ && [string index $tail 0]!="\173"
+ && [regexp {[[$]} $tail]
+ } {
+ append res "$p:$ln: unsafe \"wapp\" call: \"[string trim $x]\"\n"
+ }
+ if {[regexp {^[ \t]*wapp-(subst|trim)[ \t]+[^\173]} $x all cx]} {
+ append res "$p:$ln: unsafe \"wapp-$cx\" call: \"[string trim $x]\"\n"
+ }
+ }
+ }
+ return $res
+}
+
+# Return a string that descripts the current environment. Applications
+# might find this useful for debugging.
+#
+proc wapp-debug-env {} {
+ global wapp
+ set out {}
+ foreach var [lsort [dict keys $wapp]] {
+ if {[string index $var 0]=="."} continue
+ append out "$var = [list [dict get $wapp $var]]\n"
+ }
+ append out "\[pwd\] = [list [pwd]]\n"
+ return $out
+}
+
+# Tracing function for each HTTP request. This is overridden by wapp-start
+# if tracing is enabled.
+#
+proc wappInt-trace {} {}
+
+# Start up a listening socket. Arrange to invoke wappInt-new-connection
+# for each inbound HTTP connection.
+#
+# port Listen on this TCP port. 0 means to select a port
+# that is not currently in use
+#
+# wappmode One of "scgi", "remote-scgi", "server", or "local".
+#
+# fromip If not {}, then reject all requests from IP addresses
+# other than $fromip
+#
+proc wappInt-start-listener {port wappmode fromip} {
+ if {[string match *scgi $wappmode]} {
+ set type SCGI
+ set server [list wappInt-new-connection \
+ wappInt-scgi-readable $wappmode $fromip]
+ } else {
+ set type HTTP
+ set server [list wappInt-new-connection \
+ wappInt-http-readable $wappmode $fromip]
+ }
+ if {$wappmode=="local" || $wappmode=="scgi"} {
+ set x [socket -server $server -myaddr 127.0.0.1 $port]
+ } else {
+ set x [socket -server $server $port]
+ }
+ set coninfo [chan configure $x -sockname]
+ set port [lindex $coninfo 2]
+ if {$wappmode=="local"} {
+ wappInt-start-browser http://127.0.0.1:$port/
+ } elseif {$fromip!=""} {
+ puts "Listening for $type requests on TCP port $port from IP $fromip"
+ } else {
+ puts "Listening for $type requests on TCP port $port"
+ }
+}
+
+# Start a web-browser and point it at $URL
+#
+proc wappInt-start-browser {url} {
+ global tcl_platform
+ if {$tcl_platform(platform)=="windows"} {
+ exec cmd /c start $url &
+ } elseif {$tcl_platform(os)=="Darwin"} {
+ exec open $url &
+ } elseif {[catch {exec xdg-open $url}]} {
+ exec firefox $url &
+ }
+}
+
+# This routine is a "socket -server" callback. The $chan, $ip, and $port
+# arguments are added by the socket command.
+#
+# Arrange to invoke $callback when content is available on the new socket.
+# The $callback will process inbound HTTP or SCGI content. Reject the
+# request if $fromip is not an empty string and does not match $ip.
+#
+proc wappInt-new-connection {callback wappmode fromip chan ip port} {
+ upvar #0 wappInt-$chan W
+ if {$fromip!="" && ![string match $fromip $ip]} {
+ close $chan
+ return
+ }
+ set W [dict create REMOTE_ADDR $ip REMOTE_PORT $port WAPP_MODE $wappmode \
+ .header {}]
+ fconfigure $chan -blocking 0 -translation binary
+ fileevent $chan readable [list $callback $chan]
+}
+
+# Close an input channel
+#
+proc wappInt-close-channel {chan} {
+ if {$chan=="stdout"} {
+ # This happens after completing a CGI request
+ exit 0
+ } else {
+ unset ::wappInt-$chan
+ close $chan
+ }
+}
+
+# Process new text received on an inbound HTTP request
+#
+proc wappInt-http-readable {chan} {
+ if {[catch [list wappInt-http-readable-unsafe $chan] msg]} {
+ puts stderr "$msg\n$::errorInfo"
+ wappInt-close-channel $chan
+ }
+}
+proc wappInt-http-readable-unsafe {chan} {
+ upvar #0 wappInt-$chan W wapp wapp
+ if {![dict exists $W .toread]} {
+ # If the .toread key is not set, that means we are still reading
+ # the header
+ set line [string trimright [gets $chan]]
+ set n [string length $line]
+ if {$n>0} {
+ if {[dict get $W .header]=="" || [regexp {^\s+} $line]} {
+ dict append W .header $line
+ } else {
+ dict append W .header \n$line
+ }
+ if {[string length [dict get $W .header]]>100000} {
+ error "HTTP request header too big - possible DOS attack"
+ }
+ } elseif {$n==0} {
+ # We have reached the blank line that terminates the header.
+ global argv0
+ if {[info exists ::argv0]} {
+ set a0 [file normalize $argv0]
+ } else {
+ set a0 /
+ }
+ dict set W SCRIPT_FILENAME $a0
+ dict set W DOCUMENT_ROOT [file dir $a0]
+ if {[wappInt-parse-header $chan]} {
+ catch {close $chan}
+ return
+ }
+ set len 0
+ if {[dict exists $W CONTENT_LENGTH]} {
+ set len [dict get $W CONTENT_LENGTH]
+ }
+ if {$len>0} {
+ # Still need to read the query content
+ dict set W .toread $len
+ } else {
+ # There is no query content, so handle the request immediately
+ set wapp $W
+ wappInt-handle-request $chan
+ }
+ }
+ } else {
+ # If .toread is set, that means we are reading the query content.
+ # Continue reading until .toread reaches zero.
+ set got [read $chan [dict get $W .toread]]
+ dict append W CONTENT $got
+ dict set W .toread [expr {[dict get $W .toread]-[string length $got]}]
+ if {[dict get $W .toread]<=0} {
+ # Handle the request as soon as all the query content is received
+ set wapp $W
+ wappInt-handle-request $chan
+ }
+ }
+}
+
+# Decode the HTTP request header.
+#
+# This routine is always running inside of a [catch], so if
+# any problems arise, simply raise an error.
+#
+proc wappInt-parse-header {chan} {
+ upvar #0 wappInt-$chan W
+ set hdr [split [dict get $W .header] \n]
+ if {$hdr==""} {return 1}
+ set req [lindex $hdr 0]
+ dict set W REQUEST_METHOD [set method [lindex $req 0]]
+ if {[lsearch {GET HEAD POST} $method]<0} {
+ error "unsupported request method: \"[dict get $W REQUEST_METHOD]\""
+ }
+ set uri [lindex $req 1]
+ set split_uri [split $uri ?]
+ set uri0 [lindex $split_uri 0]
+ if {![regexp {^/[-.a-z0-9_/]*$} $uri0]} {
+ error "invalid request uri: \"$uri0\""
+ }
+ dict set W REQUEST_URI $uri0
+ dict set W PATH_INFO $uri0
+ set uri1 [lindex $split_uri 1]
+ dict set W QUERY_STRING $uri1
+ set n [llength $hdr]
+ for {set i 1} {$i<$n} {incr i} {
+ set x [lindex $hdr $i]
+ if {![regexp {^(.+): +(.*)$} $x all name value]} {
+ error "invalid header line: \"$x\""
+ }
+ set name [string toupper $name]
+ switch -- $name {
+ REFERER {set name HTTP_REFERER}
+ USER-AGENT {set name HTTP_USER_AGENT}
+ CONTENT-LENGTH {set name CONTENT_LENGTH}
+ CONTENT-TYPE {set name CONTENT_TYPE}
+ HOST {set name HTTP_HOST}
+ COOKIE {set name HTTP_COOKIE}
+ ACCEPT-ENCODING {set name HTTP_ACCEPT_ENCODING}
+ default {set name .hdr:$name}
+ }
+ dict set W $name $value
+ }
+ return 0
+}
+
+# Decode the QUERY_STRING parameters from a GET request or the
+# application/x-www-form-urlencoded CONTENT from a POST request.
+#
+# This routine sets the ".qp" element of the ::wapp dict as a signal
+# that query parameters have already been decoded.
+#
+proc wappInt-decode-query-params {} {
+ global wapp
+ dict set wapp .qp 1
+ if {[dict exists $wapp QUERY_STRING]} {
+ foreach qterm [split [dict get $wapp QUERY_STRING] &] {
+ set qsplit [split $qterm =]
+ set nm [lindex $qsplit 0]
+ if {[regexp {^[a-z][a-z0-9]*$} $nm]} {
+ dict set wapp $nm [wappInt-decode-url [lindex $qsplit 1]]
+ }
+ }
+ }
+ if {[dict exists $wapp CONTENT_TYPE] && [dict exists $wapp CONTENT]} {
+ set ctype [dict get $wapp CONTENT_TYPE]
+ if {$ctype=="application/x-www-form-urlencoded"} {
+ foreach qterm [split [string trim [dict get $wapp CONTENT]] &] {
+ set qsplit [split $qterm =]
+ set nm [lindex $qsplit 0]
+ if {[regexp {^[a-z][-a-z0-9_]*$} $nm]} {
+ dict set wapp $nm [wappInt-decode-url [lindex $qsplit 1]]
+ }
+ }
+ } elseif {[string match multipart/form-data* $ctype]} {
+ regexp {^(.*?)\r\n(.*)$} [dict get $wapp CONTENT] all divider body
+ set ndiv [string length $divider]
+ while {[string length $body]} {
+ set idx [string first $divider $body]
+ set unit [string range $body 0 [expr {$idx-3}]]
+ set body [string range $body [expr {$idx+$ndiv+2}] end]
+ if {[regexp {^Content-Disposition: form-data; (.*?)\r\n\r\n(.*)$} \
+ $unit unit hdr content]} {
+ if {[regexp {name="(.*)"; filename="(.*)"\r\nContent-Type: (.*?)$}\
+ $hdr hr name filename mimetype]} {
+ dict set wapp $name.filename \
+ [string map [list \\\" \" \\\\ \\] $filename]
+ dict set wapp $name.mimetype $mimetype
+ dict set wapp $name.content $content
+ } elseif {[regexp {name="(.*)"} $hdr hr name]} {
+ dict set wapp $name $content
+ }
+ }
+ }
+ }
+ }
+}
+
+# Invoke application-supplied methods to generate a reply to
+# a single HTTP request.
+#
+# This routine uses the global variable ::wapp and so must not be nested.
+# It must run to completion before the next instance runs. If a recursive
+# instances of this routine starts while another is running, the the
+# recursive instance is added to a queue to be invoked after the current
+# instance finishes. Yes, this means that WAPP IS SINGLE THREADED. Only
+# a single page rendering instance my be running at a time. There can
+# be multiple HTTP requests inbound at once, but only one my be processed
+# at a time once the request is full read and parsed.
+#
+set wappIntPending {}
+set wappIntLock 0
+proc wappInt-handle-request {chan} {
+ global wappIntPending wappIntLock
+ fileevent $chan readable {}
+ if {$wappIntLock} {
+ # Another instance of request is already running, so defer this one
+ lappend wappIntPending [list wappInt-handle-request $chan]
+ return
+ }
+ set wappIntLock 1
+ catch [list wappInt-handle-request-unsafe $chan]
+ set wappIntLock 0
+ if {[llength $wappIntPending]>0} {
+ # If there are deferred requests, then launch the oldest one
+ after idle [lindex $wappIntPending 0]
+ set wappIntPending [lrange $wappIntPending 1 end]
+ }
+}
+proc wappInt-handle-request-unsafe {chan} {
+ global wapp
+ dict set wapp .reply {}
+ dict set wapp .mimetype {text/html; charset=utf-8}
+ dict set wapp .reply-code {200 Ok}
+ dict set wapp .csp {default-src 'self'}
+
+ # Set up additional CGI environment values
+ #
+ if {![dict exists $wapp HTTP_HOST]} {
+ dict set wapp BASE_URL {}
+ } elseif {[dict exists $wapp HTTPS]} {
+ dict set wapp BASE_URL https://[dict get $wapp HTTP_HOST]
+ } else {
+ dict set wapp BASE_URL http://[dict get $wapp HTTP_HOST]
+ }
+ if {![dict exists $wapp REQUEST_URI]} {
+ dict set wapp REQUEST_URI /
+ } elseif {[regsub {\?.*} [dict get $wapp REQUEST_URI] {} newR]} {
+ # Some servers (ex: nginx) append the query parameters to REQUEST_URI.
+ # These need to be stripped off
+ dict set wapp REQUEST_URI $newR
+ }
+ if {[dict exists $wapp SCRIPT_NAME]} {
+ dict append wapp BASE_URL [dict get $wapp SCRIPT_NAME]
+ } else {
+ dict set wapp SCRIPT_NAME {}
+ }
+ if {![dict exists $wapp PATH_INFO]} {
+ # If PATH_INFO is missing (ex: nginx) then construct it
+ set URI [dict get $wapp REQUEST_URI]
+ set skip [string length [dict get $wapp SCRIPT_NAME]]
+ dict set wapp PATH_INFO [string range $URI $skip end]
+ }
+ if {[regexp {^/([^/]+)(.*)$} [dict get $wapp PATH_INFO] all head tail]} {
+ dict set wapp PATH_HEAD $head
+ dict set wapp PATH_TAIL [string trimleft $tail /]
+ } else {
+ dict set wapp PATH_INFO {}
+ dict set wapp PATH_HEAD {}
+ dict set wapp PATH_TAIL {}
+ }
+ dict set wapp SELF_URL [dict get $wapp BASE_URL]/[dict get $wapp PATH_HEAD]
+
+ # Parse query parameters from the query string, the cookies, and
+ # POST data
+ #
+ if {[dict exists $wapp HTTP_COOKIE]} {
+ foreach qterm [split [dict get $wapp HTTP_COOKIE] {;}] {
+ set qsplit [split [string trim $qterm] =]
+ set nm [lindex $qsplit 0]
+ if {[regexp {^[a-z][-a-z0-9_]*$} $nm]} {
+ dict set wapp $nm [wappInt-decode-url [lindex $qsplit 1]]
+ }
+ }
+ }
+ set same_origin 0
+ if {[dict exists $wapp HTTP_REFERER]} {
+ set referer [dict get $wapp HTTP_REFERER]
+ set base [dict get $wapp BASE_URL]
+ if {$referer==$base || [string match $base/* $referer]} {
+ set same_origin 1
+ }
+ }
+ dict set wapp SAME_ORIGIN $same_origin
+ if {$same_origin} {
+ wappInt-decode-query-params
+ }
+
+ # Invoke the application-defined handler procedure for this page
+ # request. If an error occurs while running that procedure, generate
+ # an HTTP reply that contains the error message.
+ #
+ wapp-before-dispatch-hook
+ wappInt-trace
+ set mname [dict get $wapp PATH_HEAD]
+ if {[catch {
+ if {$mname!="" && [llength [info command wapp-page-$mname]]>0} {
+ wapp-page-$mname
+ } else {
+ wapp-default
+ }
+ } msg]} {
+ if {[wapp-param WAPP_MODE]=="local" || [wapp-param WAPP_MODE]=="server"} {
+ puts "ERROR: $::errorInfo"
+ }
+ wapp-reset
+ wapp-reply-code "500 Internal Server Error"
+ wapp-mimetype text/html
+ wapp-trim {
+ <h1>Wapp Application Error</h1>
+ <pre>%html($::errorInfo)</pre>
+ }
+ dict unset wapp .new-cookies
+ }
+ wapp-before-reply-hook
+
+ # Transmit the HTTP reply
+ #
+ if {$chan=="stdout"} {
+ puts $chan "Status: [dict get $wapp .reply-code]\r"
+ } else {
+ puts $chan "HTTP/1.1 [dict get $wapp .reply-code]\r"
+ puts $chan "Server: wapp\r"
+ puts $chan "Connection: close\r"
+ }
+ if {[dict exists $wapp .reply-extra]} {
+ foreach {name value} [dict get $wapp .reply-extra] {
+ puts $chan "$name: $value\r"
+ }
+ }
+ if {[dict exists $wapp .csp]} {
+ puts $chan "Content-Security-Policy: [dict get $wapp .csp]\r"
+ }
+ set mimetype [dict get $wapp .mimetype]
+ puts $chan "Content-Type: $mimetype\r"
+ if {[dict exists $wapp .new-cookies]} {
+ foreach {nm val} [dict get $wapp .new-cookies] {
+ if {[regexp {^[a-z][-a-z0-9_]*$} $nm]} {
+ if {$val==""} {
+ puts $chan "Set-Cookie: $nm=; HttpOnly; Path=/; Max-Age=1\r"
+ } else {
+ set val [wappInt-enc-url $val]
+ puts $chan "Set-Cookie: $nm=$val; HttpOnly; Path=/\r"
+ }
+ }
+ }
+ }
+ if {[string match text/* $mimetype]} {
+ set reply [encoding convertto utf-8 [dict get $wapp .reply]]
+ if {[regexp {\ygzip\y} [wapp-param HTTP_ACCEPT_ENCODING]]} {
+ catch {
+ set x [zlib gzip $reply]
+ set reply $x
+ puts $chan "Content-Encoding: gzip\r"
+ }
+ }
+ } else {
+ set reply [dict get $wapp .reply]
+ }
+ puts $chan "Content-Length: [string length $reply]\r"
+ puts $chan \r
+ puts -nonewline $chan $reply
+ flush $chan
+ wappInt-close-channel $chan
+}
+
+# This routine runs just prior to request-handler dispatch. The
+# default implementation is a no-op, but applications can override
+# to do additional transformations or checks.
+#
+proc wapp-before-dispatch-hook {} {return}
+
+# This routine runs after the request-handler dispatch and just
+# before the reply is generated. The default implementation is
+# a no-op, but applications can override to do validation and security
+# checks on the reply, such as verifying that no sensitive information
+# such as an API key or password is accidentally included in the
+# reply text.
+#
+proc wapp-before-reply-hook {} {return}
+
+# Process a single CGI request
+#
+proc wappInt-handle-cgi-request {} {
+ global wapp env
+ foreach key [array names env {[A-Z]*}] {dict set wapp $key $env($key)}
+ set len 0
+ if {[dict exists $wapp CONTENT_LENGTH]} {
+ set len [dict get $wapp CONTENT_LENGTH]
+ }
+ if {$len>0} {
+ fconfigure stdin -translation binary
+ dict set wapp CONTENT [read stdin $len]
+ }
+ dict set wapp WAPP_MODE cgi
+ fconfigure stdout -translation binary
+ wappInt-handle-request-unsafe stdout
+}
+
+# Process new text received on an inbound SCGI request
+#
+proc wappInt-scgi-readable {chan} {
+ if {[catch [list wappInt-scgi-readable-unsafe $chan] msg]} {
+ puts stderr "$msg\n$::errorInfo"
+ wappInt-close-channel $chan
+ }
+}
+proc wappInt-scgi-readable-unsafe {chan} {
+ upvar #0 wappInt-$chan W wapp wapp
+ if {![dict exists $W .toread]} {
+ # If the .toread key is not set, that means we are still reading
+ # the header.
+ #
+ # An SGI header is short. This implementation assumes the entire
+ # header is available all at once.
+ #
+ dict set W .remove_addr [dict get $W REMOTE_ADDR]
+ set req [read $chan 15]
+ set n [string length $req]
+ scan $req %d:%s len hdr
+ incr len [string length "$len:,"]
+ append hdr [read $chan [expr {$len-15}]]
+ foreach {nm val} [split $hdr \000] {
+ if {$nm==","} break
+ dict set W $nm $val
+ }
+ set len 0
+ if {[dict exists $W CONTENT_LENGTH]} {
+ set len [dict get $W CONTENT_LENGTH]
+ }
+ if {$len>0} {
+ # Still need to read the query content
+ dict set W .toread $len
+ } else {
+ # There is no query content, so handle the request immediately
+ dict set W SERVER_ADDR [dict get $W .remove_addr]
+ set wapp $W
+ wappInt-handle-request $chan
+ }
+ } else {
+ # If .toread is set, that means we are reading the query content.
+ # Continue reading until .toread reaches zero.
+ set got [read $chan [dict get $W .toread]]
+ dict append W CONTENT $got
+ dict set W .toread [expr {[dict get $W .toread]-[string length $got]}]
+ if {[dict get $W .toread]<=0} {
+ # Handle the request as soon as all the query content is received
+ dict set W SERVER_ADDR [dict get $W .remove_addr]
+ set wapp $W
+ wappInt-handle-request $chan
+ }
+ }
+}
+
+# Start up the wapp framework. Parameters are a list passed as the
+# single argument.
+#
+# -server $PORT Listen for HTTP requests on this TCP port $PORT
+#
+# -local $PORT Listen for HTTP requests on 127.0.0.1:$PORT
+#
+# -scgi $PORT Listen for SCGI requests on 127.0.0.1:$PORT
+#
+# -remote-scgi $PORT Listen for SCGI requests on TCP port $PORT
+#
+# -cgi Handle a single CGI request
+#
+# With no arguments, the behavior is called "auto". In "auto" mode,
+# if the GATEWAY_INTERFACE environment variable indicates CGI, then run
+# as CGI. Otherwise, start an HTTP server bound to the loopback address
+# only, on an arbitrary TCP port, and automatically launch a web browser
+# on that TCP port.
+#
+# Additional options:
+#
+# -fromip GLOB Reject any incoming request where the remote
+# IP address does not match the GLOB pattern. This
+# value defaults to '127.0.0.1' for -local and -scgi.
+#
+# -nowait Do not wait in the event loop. Return immediately
+# after all event handlers are established.
+#
+# -trace "puts" each request URL as it is handled, for
+# debugging
+#
+# -lint Run wapp-safety-check on the application instead
+# of running the application itself
+#
+# -Dvar=value Set TCL global variable "var" to "value"
+#
+#
+proc wapp-start {arglist} {
+ global env
+ set mode auto
+ set port 0
+ set nowait 0
+ set fromip {}
+ set n [llength $arglist]
+ for {set i 0} {$i<$n} {incr i} {
+ set term [lindex $arglist $i]
+ if {[string match --* $term]} {set term [string range $term 1 end]}
+ switch -glob -- $term {
+ -server {
+ incr i;
+ set mode "server"
+ set port [lindex $arglist $i]
+ }
+ -local {
+ incr i;
+ set mode "local"
+ set fromip 127.0.0.1
+ set port [lindex $arglist $i]
+ }
+ -scgi {
+ incr i;
+ set mode "scgi"
+ set fromip 127.0.0.1
+ set port [lindex $arglist $i]
+ }
+ -remote-scgi {
+ incr i;
+ set mode "remote-scgi"
+ set port [lindex $arglist $i]
+ }
+ -cgi {
+ set mode "cgi"
+ }
+ -fromip {
+ incr i
+ set fromip [lindex $arglist $i]
+ }
+ -nowait {
+ set nowait 1
+ }
+ -trace {
+ proc wappInt-trace {} {
+ set q [wapp-param QUERY_STRING]
+ set uri [wapp-param BASE_URL][wapp-param PATH_INFO]
+ if {$q!=""} {append uri ?$q}
+ puts $uri
+ }
+ }
+ -lint {
+ set res [wapp-safety-check]
+ if {$res!=""} {
+ puts "Potential problems in this code:"
+ puts $res
+ exit 1
+ } else {
+ exit
+ }
+ }
+ -D*=* {
+ if {[regexp {^.D([^=]+)=(.*)$} $term all var val]} {
+ set ::$var $val
+ }
+ }
+ default {
+ error "unknown option: $term"
+ }
+ }
+ }
+ if {$mode=="auto"} {
+ if {[info exists env(GATEWAY_INTERFACE)]
+ && [string match CGI/1.* $env(GATEWAY_INTERFACE)]} {
+ set mode cgi
+ } else {
+ set mode local
+ }
+ }
+ if {$mode=="cgi"} {
+ wappInt-handle-cgi-request
+ } else {
+ wappInt-start-listener $port $mode $fromip
+ if {!$nowait} {
+ vwait ::forever
+ }
+ }
+}
+
+# Call this version 1.0
+package provide wapp 1.0
+
+#### End of wapp.tcl
+
+# Generate all header content for the output document
+#
+proc search_header {} {
+ wapp-trim {
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Search SQLite Stats</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+ }
+}
+
+proc wapp-default {} {
+ # When running using the built-in webserver in Wapp (in other words,
+ # when not running as CGI) any filename that contains a "." loads
+ # directly from the filesystem.
+ if {[wapp-param WAPP_MODE]!="cgi"]
+ && [string match *.* [wapp-param PATH_INFO]]
+ } {
+ set altfile [file dir [wapp-param SCRIPT_FILENAME]]/../[wapp-param PATH_INFO]
+ set fd [open $altfile rb]
+ fconfigure $fd -translation binary
+ wapp-unsafe [read $fd]
+ close $fd
+ switch -glob -- $altfile {
+ *.html {
+ wapp-mimetype text/html
+ }
+ *.css {
+ wapp-mimetype text/css
+ }
+ *.gif {
+ wapp-mimetype image/gif
+ }
+ }
+ return
+ }
+ wapp-page-admin
+}
+proc wapp-page-admin {} {
+ wapp-allow-xorigin-params
+ wapp-content-security-policy off
+ if {[wapp-param-exists env]} {
+ search_header
+ wapp-trim {
+ <h1>Environment</h1>
+ <pre>%html([wapp-debug-env])</pre>
+ }
+ return
+ }
+ sqlite3 db2 [file dir [wapp-param SCRIPT_FILENAME]]/searchlog.db
+ set where ""
+ set res ""
+
+ set ipfilter ""
+ set ipaddr [wapp-param ip]
+ if {$ipaddr!=""} {
+ set where {WHERE ip = $ipaddr}
+ set ipfilter $ipaddr
+ }
+
+ set checked ""
+ set isUnique [expr {[wapp-param unique 0]+0}]
+ if {$isUnique} {
+ set checked "checked"
+ }
+
+ set limit [wapp-param limit 10]
+ set s10 ""
+ set s100 ""
+ set s1000 ""
+ if {$limit==10} {set s10 selected}
+ if {$limit==100} {set s100 selected}
+ if {$limit==1000} {set s1000 selected}
+
+ search_header
+ set self [wapp-param PATH_HEAD]
+ wapp-trim {
+ <div style="margin:2em">
+ <center>
+ <form action='%url($self)' method='GET'>
+ Results: <select name=limit onChange="this.form.submit()">
+ <option %html($s10) value="10">10</option>
+ <option %html($s100) value="100">100</option>
+ <option %html($s1000) value="1000">1000</option>
+ </select>
+ IP: <input type=input name=ip value="%html($ipfilter)">
+ Unique: <input
+ type=checkbox name=unique value=1
+ $checked
+ onChange="this.form.submit()">
+ <input type=submit>
+ </form>
+ </center>
+ </div>
+ <table border=1 cellpadding=10 align=center>
+ <tr><td><th>IP <th>Query <th> Results <th> Timestamp
+ }
+
+ set i 0
+ db2 eval "
+ SELECT rowid, ip, query, nres, timestamp FROM log $where
+ ORDER BY rowid DESC
+ " {
+
+ if {$isUnique} {
+ if {[info exists seen($query)]} continue
+ set seen($query) 1
+ }
+
+ wapp-trim {
+ <tr><td>%html($rowid)
+ <td><a href='%url($self)?ip=%qp($ip)'>%html($ip)</a>
+ <td><a href='../search?q=%qp($query)&donotlog=1'>%html($query)</a>
+ <td>%html($nres)<td>%html($timestamp)
+ }
+ incr i
+ if {$i >= $limit} break
+ }
+ wapp-subst {</table\n}
+ db2 close
+}
+wapp-start $argv
diff --git a/www/search.d/search.db b/www/search.d/search.db
new file mode 100644
index 0000000..d19b211
--- /dev/null
+++ b/www/search.d/search.db
Binary files differ
diff --git a/www/security.html b/www/security.html
new file mode 100644
index 0000000..b4925c7
--- /dev/null
+++ b/www/security.html
@@ -0,0 +1,330 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Defense Against The Dark Arts</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Defense Against The Dark Arts
+</div>
+</div>
+
+
+
+
+<h1 id="sqlite_always_validates_its_inputs"><span>1. </span>SQLite Always Validates Its Inputs</h1>
+
+<p>
+SQLite should never crash, overflow a buffer, leak memory,
+or exhibit any other harmful behavior, even when presented with
+maliciously malformed SQL inputs or database files. SQLite should
+always detect erroneous inputs and raise an error, not crash or
+corrupt memory.
+Any malfunction caused by an SQL input or database file
+is considered a serious bug and will be promptly addressed when
+brought to the attention of the SQLite developers. SQLite is
+extensively fuzz-tested to help ensure that it is resistant
+to these kinds of errors.
+
+</p><p>
+Nevertheless, bugs happen.
+If you are writing an application that sends untrusted SQL inputs
+or database files to SQLite, there are additional steps you can take
+to help reduce the attack surface and
+prevent zero-day exploits caused by undetected bugs.
+
+</p><h2 id="untrusted_sql_inputs"><span>1.1. </span>Untrusted SQL Inputs</h2>
+<p>
+Applications that accept untrusted SQL inputs should take the following
+precautions:
+
+</p><ol>
+<li><p>
+Set the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> flag.
+This prevents ordinary SQL statements from deliberately corrupting the
+database file. SQLite should be proof against attacks that involve both
+malicious SQL inputs and a maliciously corrupted database file at the
+same time. Nevertheless, denying a script-only attacker access to
+corrupt database inputs provides an extra layer of defense.
+
+</p></li><li><p>
+Reduce the <a href="limits.html">limits</a> that SQLite imposes on inputs. This can help prevent
+denial of service attacks and other kinds of mischief that can occur
+as a result of unusually large inputs. You can do this either at compile-time
+using -DSQLITE_MAX_... options, or at run-time using the
+<a href="c3ref/limit.html">sqlite3_limit()</a> interface. Most applications can reduce limits
+dramatically without impacting functionality. The table below
+provides some suggestions, though exact values will vary depending
+on the application:
+
+</p><table border="1" cellspacing="0">
+<tr><th>Limit Setting</th><th>Default Value</th><th>High-security Value
+</th></tr><tr><td>LIMIT_LENGTH</td><td align="right">1,000,000,000</td><td align="right">1,000,000
+</td></tr><tr><td>LIMIT_SQL_LENGTH</td><td align="right">1,000,000,000</td><td align="right">100,000
+</td></tr><tr><td>LIMIT_COLUMN</td><td align="right">2,000</td><td align="right">100
+</td></tr><tr><td>LIMIT_EXPR_DEPTH</td><td align="right">1,000</td><td align="right">10
+</td></tr><tr><td>LIMIT_COMPOUND_SELECT</td><td align="right">500</td><td align="right">3
+</td></tr><tr><td>LIMIT_VDBE_OP</td><td align="right">250,000,000</td><td align="right">25,000
+</td></tr><tr><td>LIMIT_FUNCTION_ARG</td><td align="right">127</td><td align="right">8
+</td></tr><tr><td>LIMIT_ATTACH</td><td align="right">10</td><td align="right">0
+</td></tr><tr><td>LIMIT_LIKE_PATTERN_LENGTH</td><td align="right">50,000</td><td align="right">50
+</td></tr><tr><td>LIMIT_VARIABLE_NUMBER</td><td align="right">999</td><td align="right">10
+</td></tr><tr><td>LIMIT_TRIGGER_DEPTH</td><td align="right">1,000</td><td align="right">10
+</td></tr></table>
+
+</li><li><p>
+Consider using the <a href="c3ref/set_authorizer.html">sqlite3_set_authorizer()</a> interface to limit
+the scope of SQL that will be processed. For example, an application
+that does not need to change the database schema might add an
+sqlite3_set_authorizer() callback that causes any CREATE or DROP
+statement to fail.
+
+</p></li><li><p>
+The SQL language is very powerful, and so it is always possible for
+malicious SQL inputs (or erroneous SQL inputs caused by an application
+bug) to submit SQL that runs for a very long time. To prevent this
+from becoming a denial-of-service attack, consider using the
+<a href="c3ref/progress_handler.html">sqlite3_progress_handler()</a> interface to invoke a callback periodically
+as each SQL statement runs, and have that callback return non-zero to
+abort the statement if the statement runs for too long. Alternatively,
+set a timer in a separate thread and invoke <a href="c3ref/interrupt.html">sqlite3_interrupt()</a> when
+the timer goes off to prevent the SQL statement from running forever.
+
+</p></li><li><p>
+Limit the maximum amount of memory that SQLite will allocate using
+the <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a> interface. This helps prevent
+denial-of-service attacks. To find out how much heap space an
+application actually needs, run the it against typical inputs and
+then measure the maximum instantaneous memory usage with the
+<a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> interface. Set the hard heap limit
+to the maximum observed instantaneous memory usage plus some margin.
+
+</p></li><li><p>
+Consider setting the <a href="compile.html#max_allocation_size">SQLITE_MAX_ALLOCATION_SIZE</a> compile-time option
+to something smaller than its default value of 2147483391 (0x7ffffeff).
+A value of 100000000 (100 million) or even smaller would not be unreasonable,
+depending on the application.
+
+</p></li><li><p>
+For embedded systems, consider compiling SQLite with the
+<a href="compile.html#enable_memsys5">-DSQLITE_ENABLE_MEMSYS5</a> option and then providing SQLite with
+a fixed chunk of memory to use as its heap via the
+<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a>) interface. This will
+prevent malicious SQL from executing a denial-of-service attack
+by using an excessive amount of memory. If (say) 5 MB of memory
+is provided for SQLite to use, once that much has been consumed,
+SQLite will start returning SQLITE_NOMEM errors rather than
+soaking up memory needed by other parts of the application.
+This also sandboxes SQLite's memory so that a write-after-free
+error in some other part of the application will not cause
+problems for SQLite, or vice versa.
+
+<a name="precisionlimit"></a>
+</p></li><li><p>
+To control memory usage in the <a href="lang_corefunc.html#printf">printf() SQL function</a>, compile
+with "<a href="compile.html#printf_precision_limit">-DSQLITE_PRINTF_PRECISION_LIMIT=100000</a>" or some similarly
+reasonable value.
+This #define limits the width and precision for %-substitutions in the
+printf() function, and thus prevents a hostile SQL statement from
+consuming large amounts of RAM via constructs such as
+"<tt>printf('%1000000000s','hi')</tt>".
+</p><p>
+Note that SQLite uses its built-in printf() internally to help it
+format the sql column in the <a href="schematab.html">sqlite_schema table</a>. For that reason,
+no table, index, view, or trigger definition can be much larger than the
+precision limit. You can set a precision limit of less than 100000,
+but be careful that whatever precision limit you use is at least as
+long as the longest CREATE statement in your schema.
+</p></li>
+
+</ol>
+
+<a name="baddb"></a>
+
+<h2 id="untrusted_sqlite_database_files"><span>1.2. </span>Untrusted SQLite Database Files</h2>
+
+<p>Applications that read or write SQLite database files of uncertain
+provenance should take precautions enumerated below.
+
+</p><p>Even if the application does not deliberately accept database files
+from untrusted sources, beware of attacks in which a local
+database file is altered. For best security, any database file which
+might have ever been writable by an agent in a different security domain
+should be treated as suspect.
+
+</p><ol>
+<li value="8"><p>
+If the application includes any <a href="appfunc.html">custom SQL functions</a> or
+<a href="vtab.html#customvtab">custom virtual tables</a> that have side effects or that might leak
+privileged information, then the application should use one or more
+of the techniques below to prevent a maliciously crafted database
+schema from surreptitiously running those SQL functions and/or
+virtual tables for nefarious purposes:
+</p><ol type="a">
+<li> Invoke <a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a>,0,0)
+ on each <a href="c3ref/sqlite3.html">database connection</a> as soon as it is opened.
+</li><li> Run the <a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema=OFF</a> statement on each database connection
+ as soon as it is opened.
+</li><li> Compile SQLite using the <a href="compile.html#trusted_schema">-DSQLITE_TRUSTED_SCHEMA=0</a> compile-time option.
+</li><li> Disable the surreptitious use of custom SQL functions and virtual tables
+ by setting the <a href="c3ref/c_deterministic.html#sqlitedirectonly">SQLITE_DIRECTONLY</a> flag on all custom SQL functions and
+ the <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">SQLITE_VTAB_DIRECTONLY</a> flag on all custom virtual tables.
+</li></ol>
+
+</li><li><p>
+If the application does not use triggers or views, consider disabling the
+unused capabilities with:
+</p><blockquote><pre>
+<a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenabletrigger">SQLITE_DBCONFIG_ENABLE_TRIGGER</a>,0,0);
+<a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableview">SQLITE_DBCONFIG_ENABLE_VIEW</a>,0,0);
+</pre></blockquote>
+
+</li></ol>
+
+<p>
+For reading database files that are unusually high-risk, such as database
+files that are received from remote machines, and possibly from anonymous
+contributors, the following extra precautions
+might be justified. These added defenses come with performance costs,
+however, and so may not be appropriate in every situation:
+
+</p><ol>
+<li value="10"><p>
+Run <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> or <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> on the database
+as the first SQL statement after opening the database files and
+prior to running any other SQL statements. Reject and refuse to
+process any database file containing errors.
+
+</p></li><li><p>
+Enable the <a href="pragma.html#pragma_cell_size_check">PRAGMA cell_size_check=ON</a> setting.
+</p><p>
+
+</p></li><li><p>
+Do not enable memory-mapped I/O.
+In other words, make sure that <a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size=0</a>.
+</p></li></ol>
+
+
+<h1 id="summary"><span>2. </span>Summary</h1>
+
+<p>
+The precautions above are not required in order to use SQLite safely
+with potentially hostile inputs.
+However, they do provide an extra layer of defense against zero-day
+exploits and are encouraged for applications that pass data from
+untrusted sources into SQLite.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/security.in?m=31415c3b0b33a336e">2022-11-07 14:28:05</a> UTC </small></i></p>
+
diff --git a/www/selfcontained.html b/www/selfcontained.html
new file mode 100644
index 0000000..02752db
--- /dev/null
+++ b/www/selfcontained.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite is a Self Contained System</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite is a Self Contained System
+</div>
+</div>
+
+
+
+
+
+<p>
+SQLite is "stand-alone" or "self-contained" in the sense that it
+has very few dependencies. It runs on any operating system, even
+stripped-down bare-bones embedded operating systems. SQLite uses
+no external libraries or interfaces (other than a few standard C-library
+calls described below). The entire SQLite library is
+encapsulated in a <a href="amalgamation.html">single source code file</a> that requires
+no special facilities or tools to build.
+
+</p><p>
+A minimal build of SQLite requires just these routines from the
+standard C library:
+</p><ul>
+<li>memcmp()
+</li><li>memcpy()
+</li><li>memmove()
+</li><li>memset()
+</li><li>strcmp()
+</li><li>strlen()
+</li><li>strncmp()
+</li></ul>
+
+<p>
+Most builds also use the system memory allocation routines:
+</p><ul>
+<li>malloc()
+</li><li>realloc()
+</li><li>free()
+</li></ul>
+<p>But those routines are optional and can be omitted
+using a <a href="compile.html#zero_malloc">compile-time option</a>.
+
+</p><p>
+Default builds of SQLite contain appropriate <a href="vfs.html">VFS objects</a> for talking
+to underlying operating system, and those VFS objects will contain
+operating system calls such as open(), read(), write(), fsync(), and
+so forth. All of these interfaces are readily available on most platforms,
+and custom VFSes can be designed to run SQLite on even the most
+austere embedded devices.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/selfcontained.in?m=54e685acf5ddf6ee4">2022-08-10 18:45:48</a> UTC </small></i></p>
+
diff --git a/www/series.html b/www/series.html
new file mode 100644
index 0000000..93595c4
--- /dev/null
+++ b/www/series.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The generate_series Table-Valued Function</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The generate_series Table-Valued Function
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc2"><a href="#equivalent_recursive_common_table_expression">1.1. Equivalent Recursive Common Table Expression</a></div>
+<div class="fancy-toc1"><a href="#usage_examples">2. Usage Examples</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>The generate_series(START,END,STEP) <a href="vtab.html#tabfunc2">table-valued function</a> is a
+<a href="loadext.html">loadable extension</a> included in the SQLite source tree, and compiled into
+the <a href="cli.html">command-line shell</a>. The generate_series() table has a single
+result column named "value" holding integer values
+and a number of rows determined by the
+parameters START, END, and STEP. The first row of the table has
+a value of START. Subsequent rows increase by STEP up to END.
+
+</p><p>Omitted parameters take on default values. STEP defaults to 1.
+END defaults to 9223372036854775807. The START parameter is required
+as of version 3.37.0 (2021-11-27) and later and an error will
+be raised if START is omitted or has a self-referential or otherwise
+uncomputable value. Older versions used a default of 0 for START.
+The legacy behavior can be obtained from recent code by compiling
+with -DZERO_ARGUMENT_GENERATE_SERIES.
+
+</p><h2 id="equivalent_recursive_common_table_expression"><span>1.1. </span>Equivalent Recursive Common Table Expression</h2>
+
+<p>The generate_series table can be simulated using a
+<a href="lang_with.html#recursivecte">recursive common table expression</a>. If the three parameters
+are $start, $end, and $step, then the equivalent common table
+expression is:
+
+</p><div class="codeblock"><pre>WITH RECURSIVE generate_series(value) AS (
+ SELECT $start
+ UNION ALL
+ SELECT value+$step FROM generate_series
+ WHERE value+$step&lt;=$end
+) ...
+</pre></div>
+
+<p>The common table expression works without having to load an
+extension. On the other hand, the extension is easier to program
+and faster.
+
+</p><h1 id="usage_examples"><span>2. </span>Usage Examples</h1>
+
+<p>Generate all multiples of 5 less than or equal to 100:
+
+</p><div class="codeblock"><pre>SELECT value FROM generate_series(5,100,5);
+</pre></div>
+
+<p>Generate the 20 random integer values:
+
+</p><div class="codeblock"><pre>SELECT random() FROM generate_series(1,20);
+</pre></div>
+
+<p>Find the name of every customer whose account number
+ is an even multiple of 100 between 10000 and 20000.
+
+</p><div class="codeblock"><pre>SELECT customer.name
+ FROM customer, generate_series(10000,20000,100)
+ WHERE customer.id=value;
+/* or */
+SELECT name FROM customer
+ WHERE id IN (SELECT value
+ FROM generate_series(10000,20000,200));
+</pre></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/series.in?m=2ef7ed3d3eec2b729">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/serverless.html b/www/serverless.html
new file mode 100644
index 0000000..1fedf36
--- /dev/null
+++ b/www/serverless.html
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Is Serverless</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite Is Serverless
+</div>
+</div>
+
+
+
+
+
+<h1 id="sqlite_is_serverless"><span>1. </span>SQLite Is Serverless</h1>
+
+<p>
+Most SQL database engines are implemented as a separate server process.
+Programs that want to access the database communicate with the server
+using some kind of interprocess communication (typically TCP/IP) to send
+requests to the server and to receive back results.
+SQLite does not work this way.
+With SQLite, the process that wants to access the database reads and
+writes directly from the database files on disk.
+There is no intermediary server process.
+</p>
+
+<p>
+There are advantages and disadvantages to being serverless.
+The main advantage is that there is no separate server process
+to install, setup, configure, initialize, manage, and troubleshoot.
+This is one reason why SQLite is a
+"<a href="zeroconf.html">zero-configuration</a>" database engine.
+Programs that use SQLite require no administrative support for
+setting up the database engine before they are run.
+Any program that is able to access the disk is able to use an SQLite database.
+</p>
+
+<p>
+On the other hand, a database engine that uses a server can
+provide better protection from bugs in the client
+application - stray pointers in a client cannot corrupt memory
+on the server.
+And because a server is a single persistent process,
+it is able to control database access with more precision,
+allowing for finer-grained locking and better concurrency.
+</p>
+
+<p>
+Most SQL database engines are client/server based.
+Of those that are serverless, SQLite is the only one
+known to this author that allows multiple applications
+to access the same database at the same time.
+</p>
+
+<h1 id="classic_serverless_vs_neo_serverless"><span>2. </span>Classic Serverless Vs. Neo-Serverless</h1>
+
+<p>
+<i>(This section was added on 2018-04-02)</i>
+
+</p><p>
+Recently, folks have begun to use the
+word "serverless" to mean something subtly different from its intended
+meaning in this document. Here are two possible definitions of "serverless":
+
+</p><ol>
+<li><p>
+<b>Classic Serverless:</b>
+The database engine runs within the same process, thread, and address space
+as the application. There is no message passing or network activity.
+
+</p></li><li><p>
+<b>Neo-Serverless:</b>
+The database engine runs in a separate namespace from the application,
+probably on a separate machine, but the database is provided as a
+turn-key service by the hosting provider, requires no management or
+administration by the application owners, and is so easy to use
+that the developers can think of the database as being serverless
+even if it really does use a server under the covers.
+</p></li></ol>
+
+<p>
+SQLite is an example of a classic serverless database engine.
+With SQLite, there are no other processes, threads, machines, or
+other mechanisms (apart from host computer OS and filesystem)
+to help provide database services or implementation. There really
+is no server.
+
+</p><p>
+<a href="https://docs.microsoft.com/en-us/azure/cosmos-db/serverless-computing-database">Microsoft Azure Cosmo DB</a>
+and
+<a href="https://aws.amazon.com/s3/">Amazon S3</a>
+are examples of a neo-serverless databases.
+These database are implemented by server processes running separately
+in the cloud.
+But the servers are maintained and administered by the ISP, not by
+the application developer.
+Application developers just use the service. Developers do not have to
+provision, configure, or manage database server instances, as all of that
+work is handled automatically by the service provider. Database servers
+do in fact exist, they are just hidden from the developers.
+
+</p><p>
+It is important to understand these two different definitions for
+"serverless".
+When a database claims to be "serverless",
+be sure to discern whether they mean "classic serverless"
+or "neo-serverless".
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/serverless.in?m=b6f6dbff74f67a539">2018-04-02 15:25:54</a> UTC </small></i></p>
+
diff --git a/www/session.html b/www/session.html
new file mode 100644
index 0000000..12d904d
--- /dev/null
+++ b/www/session.html
@@ -0,0 +1,1766 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Session Module C/C++ Interface</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h2>SQLite Session Module C/C++ Interface</h2>
+
+
+
+<p>This page defines the C-language interface to the SQLite
+ <a href="sessionintro.html">session extension</a>.
+ This is not a tutorial. These pages are designed to be precise, not easy
+ to read. A tutorial is <a href="sessionintro.html">available separately</a>.
+
+<p>This page contains all C-language interface information
+in a single HTML file. The same information is also
+available broken out into <a href="session/intro.html">lots of small pages</a>
+for easier viewing, if you prefer.</p>
+
+<p>This document is created by a script which scans comments in the source
+code file sqlite3session.h.</p>
+
+<hr>
+
+
+<h2>Objects:</h2>
+<div class='columns' style='columns: 15em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3_changegroup'>sqlite3_changegroup</a></li>
+<li><a href='#sqlite3_changeset_iter'>sqlite3_changeset_iter</a></li>
+<li><a href='#sqlite3_rebaser'>sqlite3_rebaser<small><i>(exp)</i></small></a></li>
+<li><a href='#sqlite3_session'>sqlite3_session</a></li>
+</ul>
+</div>
+<hr>
+
+<h2>Constants:</h2>
+<div class='columns' style='columns: 20em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#SQLITE_CHANGESETAPPLY_INVERT'>SQLITE_CHANGESETAPPLY_INVERT</a></li>
+<li><a href='#SQLITE_CHANGESETAPPLY_INVERT'>SQLITE_CHANGESETAPPLY_NOSAVEPOINT</a></li>
+<li><a href='#SQLITE_CHANGESETSTART_INVERT'>SQLITE_CHANGESETSTART_INVERT</a></li>
+<li><a href='#SQLITE_CHANGESET_ABORT'>SQLITE_CHANGESET_ABORT</a></li>
+<li><a href='#SQLITE_CHANGESET_CONFLICT'>SQLITE_CHANGESET_CONFLICT</a></li>
+<li><a href='#SQLITE_CHANGESET_CONFLICT'>SQLITE_CHANGESET_CONSTRAINT</a></li>
+<li><a href='#SQLITE_CHANGESET_CONFLICT'>SQLITE_CHANGESET_DATA</a></li>
+<li><a href='#SQLITE_CHANGESET_CONFLICT'>SQLITE_CHANGESET_FOREIGN_KEY</a></li>
+<li><a href='#SQLITE_CHANGESET_CONFLICT'>SQLITE_CHANGESET_NOTFOUND</a></li>
+<li><a href='#SQLITE_CHANGESET_ABORT'>SQLITE_CHANGESET_OMIT</a></li>
+<li><a href='#SQLITE_CHANGESET_ABORT'>SQLITE_CHANGESET_REPLACE</a></li>
+<li><a href='#SQLITE_SESSION_CONFIG_STRMSIZE'>SQLITE_SESSION_CONFIG_STRMSIZE</a></li>
+</ul>
+</div>
+<hr>
+
+<h2>Functions:</h2>
+<div class='columns' style='columns: 15em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3changegroup_add'>sqlite3changegroup_add</a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3changegroup_add_strm</a></li>
+<li><a href='#sqlite3changegroup_delete'>sqlite3changegroup_delete</a></li>
+<li><a href='#sqlite3changegroup_new'>sqlite3changegroup_new</a></li>
+<li><a href='#sqlite3changegroup_output'>sqlite3changegroup_output</a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3changegroup_output_strm</a></li>
+<li><a href='#sqlite3changeset_apply'>sqlite3changeset_apply</a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3changeset_apply_strm</a></li>
+<li><a href='#sqlite3changeset_apply'>sqlite3changeset_apply_v2</a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3changeset_apply_v2_strm</a></li>
+<li><a href='#sqlite3changeset_concat'>sqlite3changeset_concat</a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3changeset_concat_strm</a></li>
+<li><a href='#sqlite3changeset_conflict'>sqlite3changeset_conflict</a></li>
+<li><a href='#sqlite3changeset_finalize'>sqlite3changeset_finalize</a></li>
+<li><a href='#sqlite3changeset_fk_conflicts'>sqlite3changeset_fk_conflicts</a></li>
+<li><a href='#sqlite3changeset_invert'>sqlite3changeset_invert</a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3changeset_invert_strm</a></li>
+<li><a href='#sqlite3changeset_new'>sqlite3changeset_new</a></li>
+<li><a href='#sqlite3changeset_next'>sqlite3changeset_next</a></li>
+<li><a href='#sqlite3changeset_old'>sqlite3changeset_old</a></li>
+<li><a href='#sqlite3changeset_op'>sqlite3changeset_op</a></li>
+<li><a href='#sqlite3changeset_pk'>sqlite3changeset_pk</a></li>
+<li><a href='#sqlite3changeset_start'>sqlite3changeset_start</a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3changeset_start_strm</a></li>
+<li><a href='#sqlite3changeset_start'>sqlite3changeset_start_v2</a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3changeset_start_v2_strm</a></li>
+<li><a href='#sqlite3rebaser_configure'>sqlite3rebaser_configure<small><i>(exp)</i></small></a></li>
+<li><a href='#sqlite3rebaser_create'>sqlite3rebaser_create<small><i>(exp)</i></small></a></li>
+<li><a href='#sqlite3rebaser_delete'>sqlite3rebaser_delete<small><i>(exp)</i></small></a></li>
+<li><a href='#sqlite3rebaser_rebase'>sqlite3rebaser_rebase<small><i>(exp)</i></small></a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3rebaser_rebase_strm</a></li>
+<li><a href='#sqlite3session_attach'>sqlite3session_attach</a></li>
+<li><a href='#sqlite3session_changeset'>sqlite3session_changeset</a></li>
+<li><a href='#sqlite3session_changeset_size'>sqlite3session_changeset_size</a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3session_changeset_strm</a></li>
+<li><a href='#sqlite3session_config'>sqlite3session_config</a></li>
+<li><a href='#sqlite3session_create'>sqlite3session_create</a></li>
+<li><a href='#sqlite3session_delete'>sqlite3session_delete</a></li>
+<li><a href='#sqlite3session_diff'>sqlite3session_diff</a></li>
+<li><a href='#sqlite3session_enable'>sqlite3session_enable</a></li>
+<li><a href='#sqlite3session_indirect'>sqlite3session_indirect</a></li>
+<li><a href='#sqlite3session_isempty'>sqlite3session_isempty</a></li>
+<li><a href='#sqlite3session_memory_used'>sqlite3session_memory_used</a></li>
+<li><a href='#sqlite3session_patchset'>sqlite3session_patchset</a></li>
+<li><a href='#sqlite3changegroup_add_strm'>sqlite3session_patchset_strm</a></li>
+<li><a href='#sqlite3session_table_filter'>sqlite3session_table_filter</a></li>
+</ul>
+</div>
+<hr>
+<a name="SQLITE_CHANGESETSTART_INVERT"></a>
+<h2>Flags for sqlite3changeset_start_v2</h2><blockquote><pre>#define SQLITE_CHANGESETSTART_INVERT 0x0002
+</pre></blockquote><p>
+The following flags may passed via the 4th parameter to
+<a href="#sqlite3changeset_start">sqlite3changeset_start_v2</a> and <a href="#sqlite3changegroup_add_strm">sqlite3changeset_start_v2_strm</a>:</p>
+
+<p><dt>SQLITE_CHANGESETAPPLY_INVERT <dd>
+ Invert the changeset while iterating through it. This is equivalent to
+ inverting a changeset using sqlite3changeset_invert() before applying it.
+ It is an error to specify this flag with a patchset.
+</p><hr><a name="SQLITE_SESSION_CONFIG_STRMSIZE"></a>
+<h2>Values for sqlite3session_config().</h2><blockquote><pre>#define SQLITE_SESSION_CONFIG_STRMSIZE 1
+</pre></blockquote><p></p><hr><a name="sqlite3_changegroup"></a>
+<h2>Changegroup Handle</h2><blockquote><pre>typedef struct sqlite3_changegroup sqlite3_changegroup;
+</pre></blockquote><p>
+A changegroup is an object used to combine two or more
+<a href="sessionintro.html#changeset">changesets</a> or <a href="sessionintro.html#changeset">patchsets</a>
+</p><p>Constructor: <a href="#sqlite3changegroup_new">sqlite3changegroup_new()</a></p>
+<p>Destructor: <a href="#sqlite3changegroup_delete">sqlite3changegroup_delete()</a></p>
+<p>Methods:
+ <a href="#sqlite3changegroup_add">sqlite3changegroup_add()</a>,
+<a href="#sqlite3changegroup_output">sqlite3changegroup_output()</a></p>
+<hr><a name="sqlite3_changeset_iter"></a>
+<h2>Changeset Iterator Handle</h2><blockquote><pre>typedef struct sqlite3_changeset_iter sqlite3_changeset_iter;
+</pre></blockquote><p>
+An instance of this object acts as a cursor for iterating
+over the elements of a <a href="sessionintro.html#changeset">changeset</a> or <a href="sessionintro.html#changeset">patchset</a>.
+</p><p>Constructors:
+ <a href="#sqlite3changeset_start">sqlite3changeset_start()</a>,
+<a href="#sqlite3changeset_start">sqlite3changeset_start_v2()</a></p>
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3changeset_conflict'>sqlite3changeset_conflict</a></li>
+<li><a href='#sqlite3changeset_finalize'>sqlite3changeset_finalize</a></li>
+<li><a href='#sqlite3changeset_fk_conflicts'>sqlite3changeset_fk_conflicts</a></li>
+<li><a href='#sqlite3changeset_new'>sqlite3changeset_new</a></li>
+<li><a href='#sqlite3changeset_next'>sqlite3changeset_next</a></li>
+<li><a href='#sqlite3changeset_old'>sqlite3changeset_old</a></li>
+<li><a href='#sqlite3changeset_op'>sqlite3changeset_op</a></li>
+<li><a href='#sqlite3changeset_pk'>sqlite3changeset_pk</a></li>
+</ul>
+</div>
+</p>
+<hr><a name="sqlite3_rebaser"></a>
+<h2>Rebasing changesets</h2><blockquote><pre>typedef struct sqlite3_rebaser sqlite3_rebaser;
+</pre></blockquote><p><b>Important:</b> This interface is <a href="c3ref/experimental.html">experimental</a> and is subject to change without notice.</p><p>
+Suppose there is a site hosting a database in state S0. And that
+modifications are made that move that database to state S1 and a
+changeset recorded (the "local" changeset). Then, a changeset based
+on S0 is received from another site (the "remote" changeset) and
+applied to the database. The database is then in state
+(S1+"remote"), where the exact state depends on any conflict
+resolution decisions (OMIT or REPLACE) made while applying "remote".
+Rebasing a changeset is to update it to take those conflict
+resolution decisions into account, so that the same conflicts
+do not have to be resolved elsewhere in the network. </p>
+
+<p>For example, if both the local and remote changesets contain an
+INSERT of the same key on "CREATE TABLE t1(a PRIMARY KEY, b)":</p>
+
+<p> local: INSERT INTO t1 VALUES(1, 'v1');
+ remote: INSERT INTO t1 VALUES(1, 'v2');</p>
+
+<p>and the conflict resolution is REPLACE, then the INSERT change is
+removed from the local changeset (it was overridden). Or, if the
+conflict resolution was "OMIT", then the local changeset is modified
+to instead contain:</p>
+
+<p> UPDATE t1 SET b = 'v2' WHERE a=1;</p>
+
+<p>Changes within the local changeset are rebased as follows:</p>
+
+<p><dl>
+<dt>Local INSERT<dd>
+ This may only conflict with a remote INSERT. If the conflict
+ resolution was OMIT, then add an UPDATE change to the rebased
+ changeset. Or, if the conflict resolution was REPLACE, add
+ nothing to the rebased changeset.</p>
+
+<p><dt>Local DELETE<dd>
+ This may conflict with a remote UPDATE or DELETE. In both cases the
+ only possible resolution is OMIT. If the remote operation was a
+ DELETE, then add no change to the rebased changeset. If the remote
+ operation was an UPDATE, then the old.* fields of change are updated
+ to reflect the new.* values in the UPDATE.</p>
+
+<p><dt>Local UPDATE<dd>
+ This may conflict with a remote UPDATE or DELETE. If it conflicts
+ with a DELETE, and the conflict resolution was OMIT, then the update
+ is changed into an INSERT. Any undefined values in the new.* record
+ from the update change are filled in using the old.* values from
+ the conflicting DELETE. Or, if the conflict resolution was REPLACE,
+ the UPDATE change is simply omitted from the rebased changeset.</p>
+
+<p> If conflict is with a remote UPDATE and the resolution is OMIT, then
+ the old.* values are rebased using the new.* values in the remote
+ change. Or, if the resolution is REPLACE, then the change is copied
+ into the rebased changeset with updates to columns also updated by
+ the conflicting remote UPDATE removed. If this means no columns would
+ be updated, the change is omitted.
+</dl></p>
+
+<p>A local change may be rebased against multiple remote changes
+simultaneously. If a single key is modified by multiple remote
+changesets, they are combined as follows before the local changeset
+is rebased:</p>
+
+<p><ul>
+ <li> If there has been one or more REPLACE resolutions on a
+ key, it is rebased according to a REPLACE.</p>
+
+<p> <li> If there have been no REPLACE resolutions on a key, then
+ the local changeset is rebased according to the most recent
+ of the OMIT resolutions.
+</ul></p>
+
+<p>Note that conflict resolutions from multiple remote changesets are
+combined on a per-field basis, not per-row. This means that in the
+case of multiple remote UPDATE operations, some fields of a single
+local change may be rebased for REPLACE while others are rebased for
+OMIT.</p>
+
+<p>In order to rebase a local changeset, the remote changeset must first
+be applied to the local database using sqlite3changeset_apply_v2() and
+the buffer of rebase information captured. Then:</p>
+
+<p><ol>
+ <li> An sqlite3_rebaser object is created by calling
+ sqlite3rebaser_create().
+ <li> The new object is configured with the rebase buffer obtained from
+ sqlite3changeset_apply_v2() by calling sqlite3rebaser_configure().
+ If the local changeset is to be rebased against multiple remote
+ changesets, then sqlite3rebaser_configure() should be called
+ multiple times, in the same order that the multiple
+ sqlite3changeset_apply_v2() calls were made.
+ <li> Each local changeset is rebased by calling sqlite3rebaser_rebase().
+ <li> The sqlite3_rebaser object is deleted by calling
+ sqlite3rebaser_delete().
+</ol>
+</p><hr><a name="sqlite3_session"></a>
+<h2>Session Object Handle</h2><blockquote><pre>typedef struct sqlite3_session sqlite3_session;
+</pre></blockquote><p>
+An instance of this object is a <a href="sessionintro.html">session</a> that can be used to
+record changes to a database.
+</p><p>Constructor: <a href="#sqlite3session_create">sqlite3session_create()</a></p>
+<p>Destructor: <a href="#sqlite3session_delete">sqlite3session_delete()</a></p>
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='#sqlite3session_attach'>sqlite3session_attach</a></li>
+<li><a href='#sqlite3session_changeset'>sqlite3session_changeset</a></li>
+<li><a href='#sqlite3session_changeset_size'>sqlite3session_changeset_size</a></li>
+<li><a href='#sqlite3session_diff'>sqlite3session_diff</a></li>
+<li><a href='#sqlite3session_enable'>sqlite3session_enable</a></li>
+<li><a href='#sqlite3session_indirect'>sqlite3session_indirect</a></li>
+<li><a href='#sqlite3session_patchset'>sqlite3session_patchset</a></li>
+<li><a href='#sqlite3session_table_filter'>sqlite3session_table_filter</a></li>
+</ul>
+</div>
+</p>
+<hr><a name="sqlite3changegroup_add"></a>
+<h2>Add A Changeset To A Changegroup</h2><blockquote><pre>int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData);
+</pre></blockquote><p>
+Add all changes within the changeset (or patchset) in buffer pData (size
+nData bytes) to the changegroup. </p>
+
+<p>If the buffer contains a patchset, then all prior calls to this function
+on the same changegroup object must also have specified patchsets. Or, if
+the buffer contains a changeset, so must have the earlier calls to this
+function. Otherwise, SQLITE_ERROR is returned and no changes are added
+to the changegroup.</p>
+
+<p>Rows within the changeset and changegroup are identified by the values in
+their PRIMARY KEY columns. A change in the changeset is considered to
+apply to the same row as a change already present in the changegroup if
+the two rows have the same primary key.</p>
+
+<p>Changes to rows that do not already appear in the changegroup are
+simply copied into it. Or, if both the new changeset and the changegroup
+contain changes that apply to a single row, the final contents of the
+changegroup depends on the type of each change, as follows:</p>
+
+<p><table border=1 style="margin-left:8ex;margin-right:8ex">
+ <tr><th style="white-space:pre">Existing Change </th>
+ <th style="white-space:pre">New Change </th>
+ <th>Output Change
+ <tr><td>INSERT <td>INSERT <td>
+ The new change is ignored. This case does not occur if the new
+ changeset was recorded immediately after the changesets already
+ added to the changegroup.
+ <tr><td>INSERT <td>UPDATE <td>
+ The INSERT change remains in the changegroup. The values in the
+ INSERT change are modified as if the row was inserted by the
+ existing change and then updated according to the new change.
+ <tr><td>INSERT <td>DELETE <td>
+ The existing INSERT is removed from the changegroup. The DELETE is
+ not added.
+ <tr><td>UPDATE <td>INSERT <td>
+ The new change is ignored. This case does not occur if the new
+ changeset was recorded immediately after the changesets already
+ added to the changegroup.
+ <tr><td>UPDATE <td>UPDATE <td>
+ The existing UPDATE remains within the changegroup. It is amended
+ so that the accompanying values are as if the row was updated once
+ by the existing change and then again by the new change.
+ <tr><td>UPDATE <td>DELETE <td>
+ The existing UPDATE is replaced by the new DELETE within the
+ changegroup.
+ <tr><td>DELETE <td>INSERT <td>
+ If one or more of the column values in the row inserted by the
+ new change differ from those in the row deleted by the existing
+ change, the existing DELETE is replaced by an UPDATE within the
+ changegroup. Otherwise, if the inserted row is exactly the same
+ as the deleted row, the existing DELETE is simply discarded.
+ <tr><td>DELETE <td>UPDATE <td>
+ The new change is ignored. This case does not occur if the new
+ changeset was recorded immediately after the changesets already
+ added to the changegroup.
+ <tr><td>DELETE <td>DELETE <td>
+ The new change is ignored. This case does not occur if the new
+ changeset was recorded immediately after the changesets already
+ added to the changegroup.
+</table></p>
+
+<p>If the new changeset contains changes to a table that is already present
+in the changegroup, then the number of columns and the position of the
+primary key columns for the table must be consistent. If this is not the
+case, this function fails with SQLITE_SCHEMA. If the input changeset
+appears to be corrupt and the corruption is detected, SQLITE_CORRUPT is
+returned. Or, if an out-of-memory condition occurs during processing, this
+function returns SQLITE_NOMEM. In all cases, if an error occurs the state
+of the final contents of the changegroup is undefined.</p>
+
+<p>If no error occurs, SQLITE_OK is returned.
+</p><hr><a name="sqlite3changegroup_delete"></a>
+<h2>Delete A Changegroup Object</h2><blockquote><pre>void sqlite3changegroup_delete(sqlite3_changegroup*);
+</pre></blockquote><p></p><hr><a name="sqlite3changegroup_new"></a>
+<h2>Create A New Changegroup Object</h2><blockquote><pre>int sqlite3changegroup_new(sqlite3_changegroup **pp);
+</pre></blockquote><p>
+An sqlite3_changegroup object is used to combine two or more changesets
+(or patchsets) into a single changeset (or patchset). A single changegroup
+object may combine changesets or patchsets, but not both. The output is
+always in the same format as the input.</p>
+
+<p>If successful, this function returns SQLITE_OK and populates (*pp) with
+a pointer to a new sqlite3_changegroup object before returning. The caller
+should eventually free the returned object using a call to
+sqlite3changegroup_delete(). If an error occurs, an SQLite error code
+(i.e. SQLITE_NOMEM) is returned and *pp is set to NULL.</p>
+
+<p>The usual usage pattern for an sqlite3_changegroup object is as follows:</p>
+
+<p><ul>
+ <li> It is created using a call to sqlite3changegroup_new().</p>
+
+<p> <li> Zero or more changesets (or patchsets) are added to the object
+ by calling sqlite3changegroup_add().</p>
+
+<p> <li> The result of combining all input changesets together is obtained
+ by the application via a call to sqlite3changegroup_output().</p>
+
+<p> <li> The object is deleted using a call to sqlite3changegroup_delete().
+</ul></p>
+
+<p>Any number of calls to add() and output() may be made between the calls to
+new() and delete(), and in any order.</p>
+
+<p>As well as the regular sqlite3changegroup_add() and
+sqlite3changegroup_output() functions, also available are the streaming
+versions sqlite3changegroup_add_strm() and sqlite3changegroup_output_strm().
+</p><hr><a name="sqlite3changegroup_output"></a>
+<h2>Obtain A Composite Changeset From A Changegroup</h2><blockquote><pre>int sqlite3changegroup_output(
+ sqlite3_changegroup*,
+ int *pnData, /* OUT: Size of output buffer in bytes */
+ void **ppData /* OUT: Pointer to output buffer */
+);
+</pre></blockquote><p>
+Obtain a buffer containing a changeset (or patchset) representing the
+current contents of the changegroup. If the inputs to the changegroup
+were themselves changesets, the output is a changeset. Or, if the
+inputs were patchsets, the output is also a patchset.</p>
+
+<p>As with the output of the sqlite3session_changeset() and
+sqlite3session_patchset() functions, all changes related to a single
+table are grouped together in the output of this function. Tables appear
+in the same order as for the very first changeset added to the changegroup.
+If the second or subsequent changesets added to the changegroup contain
+changes for tables that do not appear in the first changeset, they are
+appended onto the end of the output changeset, again in the order in
+which they are first encountered.</p>
+
+<p>If an error occurs, an SQLite error code is returned and the output
+variables (*pnData) and (*ppData) are set to 0. Otherwise, SQLITE_OK
+is returned and the output variables are set to the size of and a
+pointer to the output buffer, respectively. In this case it is the
+responsibility of the caller to eventually free the buffer using a
+call to sqlite3_free().
+</p><hr><a name="sqlite3changeset_concat"></a>
+<h2>Concatenate Two Changeset Objects</h2><blockquote><pre>int sqlite3changeset_concat(
+ int nA, /* Number of bytes in buffer pA */
+ void *pA, /* Pointer to buffer containing changeset A */
+ int nB, /* Number of bytes in buffer pB */
+ void *pB, /* Pointer to buffer containing changeset B */
+ int *pnOut, /* OUT: Number of bytes in output changeset */
+ void **ppOut /* OUT: Buffer containing output changeset */
+);
+</pre></blockquote><p>
+This function is used to concatenate two changesets, A and B, into a
+single changeset. The result is a changeset equivalent to applying
+changeset A followed by changeset B. </p>
+
+<p>This function combines the two input changesets using an
+sqlite3_changegroup object. Calling it produces similar results as the
+following code fragment:</p>
+
+<p><pre>
+ sqlite3_changegroup *pGrp;
+ rc = sqlite3_changegroup_new(&pGrp);
+ if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nA, pA);
+ if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nB, pB);
+ if( rc==SQLITE_OK ){
+ rc = sqlite3changegroup_output(pGrp, pnOut, ppOut);
+ }else{
+ *ppOut = 0;
+ *pnOut = 0;
+ }
+</pre></p>
+
+<p>Refer to the sqlite3_changegroup documentation below for details.
+</p><hr><a name="sqlite3changeset_conflict"></a>
+<h2>Obtain Conflicting Row Values From A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_conflict(
+ sqlite3_changeset_iter *pIter, /* Changeset iterator */
+ int iVal, /* Column number */
+ sqlite3_value **ppValue /* OUT: Value from conflicting row */
+);
+</pre></blockquote><p>
+This function should only be used with iterator objects passed to a
+conflict-handler callback by <a href="#sqlite3changeset_apply">sqlite3changeset_apply()</a> with either
+<a href="#SQLITE_CHANGESET_CONFLICT">SQLITE_CHANGESET_DATA</a> or <a href="#SQLITE_CHANGESET_CONFLICT">SQLITE_CHANGESET_CONFLICT</a>. If this function
+is called on any other iterator, <a href="rescode.html#misuse">SQLITE_MISUSE</a> is returned and *ppValue
+is set to NULL.</p>
+
+<p>Argument iVal must be greater than or equal to 0, and less than the number
+of columns in the table affected by the current change. Otherwise,
+<a href="rescode.html#range">SQLITE_RANGE</a> is returned and *ppValue is set to NULL.</p>
+
+<p>If successful, this function sets *ppValue to point to a protected
+sqlite3_value object containing the iVal'th value from the
+"conflicting row" associated with the current conflict-handler callback
+and returns SQLITE_OK.</p>
+
+<p>If some other error occurs (e.g. an OOM condition), an SQLite error code
+is returned and *ppValue is set to NULL.
+</p><hr><a name="sqlite3changeset_finalize"></a>
+<h2>Finalize A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter);
+</pre></blockquote><p>
+This function is used to finalize an iterator allocated with
+<a href="#sqlite3changeset_start">sqlite3changeset_start()</a>.</p>
+
+<p>This function should only be called on iterators created using the
+<a href="#sqlite3changeset_start">sqlite3changeset_start()</a> function. If an application calls this
+function with an iterator passed to a conflict-handler by
+<a href="#sqlite3changeset_apply">sqlite3changeset_apply()</a>, <a href="rescode.html#misuse">SQLITE_MISUSE</a> is immediately returned and the
+call has no effect.</p>
+
+<p>If an error was encountered within a call to an sqlite3changeset_xxx()
+function (for example an <a href="rescode.html#corrupt">SQLITE_CORRUPT</a> in <a href="#sqlite3changeset_next">sqlite3changeset_next()</a> or an
+<a href="rescode.html#nomem">SQLITE_NOMEM</a> in <a href="#sqlite3changeset_new">sqlite3changeset_new()</a>) then an error code corresponding
+to that error is returned by this function. Otherwise, SQLITE_OK is
+returned. This is to allow the following pattern (pseudo-code):</p>
+
+<p><pre>
+ sqlite3changeset_start();
+ while( SQLITE_ROW==sqlite3changeset_next() ){
+ // Do something with change.
+ }
+ rc = sqlite3changeset_finalize();
+ if( rc!=SQLITE_OK ){
+ // An error has occurred
+ }
+</pre>
+</p><hr><a name="sqlite3changeset_fk_conflicts"></a>
+<h2>Determine The Number Of Foreign Key Constraint Violations</h2><blockquote><pre>int sqlite3changeset_fk_conflicts(
+ sqlite3_changeset_iter *pIter, /* Changeset iterator */
+ int *pnOut /* OUT: Number of FK violations */
+);
+</pre></blockquote><p>
+This function may only be called with an iterator passed to an
+SQLITE_CHANGESET_FOREIGN_KEY conflict handler callback. In this case
+it sets the output variable to the total number of known foreign key
+violations in the destination database and returns SQLITE_OK.</p>
+
+<p>In all other cases this function returns SQLITE_MISUSE.
+</p><hr><a name="sqlite3changeset_invert"></a>
+<h2>Invert A Changeset</h2><blockquote><pre>int sqlite3changeset_invert(
+ int nIn, const void *pIn, /* Input changeset */
+ int *pnOut, void **ppOut /* OUT: Inverse of input */
+);
+</pre></blockquote><p>
+This function is used to "invert" a changeset object. Applying an inverted
+changeset to a database reverses the effects of applying the uninverted
+changeset. Specifically:</p>
+
+<p><ul>
+ <li> Each DELETE change is changed to an INSERT, and
+ <li> Each INSERT change is changed to a DELETE, and
+ <li> For each UPDATE change, the old.* and new.* values are exchanged.
+</ul></p>
+
+<p>This function does not change the order in which changes appear within
+the changeset. It merely reverses the sense of each individual change.</p>
+
+<p>If successful, a pointer to a buffer containing the inverted changeset
+is stored in *ppOut, the size of the same buffer is stored in *pnOut, and
+SQLITE_OK is returned. If an error occurs, both *pnOut and *ppOut are
+zeroed and an SQLite error code returned.</p>
+
+<p>It is the responsibility of the caller to eventually call sqlite3_free()
+on the *ppOut pointer to free the buffer allocation following a successful
+call to this function.</p>
+
+<p>WARNING/TODO: This function currently assumes that the input is a valid
+changeset. If it is not, the results are undefined.
+</p><hr><a name="sqlite3changeset_new"></a>
+<h2>Obtain new.* Values From A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_new(
+ sqlite3_changeset_iter *pIter, /* Changeset iterator */
+ int iVal, /* Column number */
+ sqlite3_value **ppValue /* OUT: New value (or NULL pointer) */
+);
+</pre></blockquote><p>
+The pIter argument passed to this function may either be an iterator
+passed to a conflict-handler by <a href="#sqlite3changeset_apply">sqlite3changeset_apply()</a>, or an iterator
+created by <a href="#sqlite3changeset_start">sqlite3changeset_start()</a>. In the latter case, the most recent
+call to <a href="#sqlite3changeset_next">sqlite3changeset_next()</a> must have returned SQLITE_ROW.
+Furthermore, it may only be called if the type of change that the iterator
+currently points to is either <a href="c3ref/c_alter_table.html">SQLITE_UPDATE</a> or <a href="c3ref/c_alter_table.html">SQLITE_INSERT</a>. Otherwise,
+this function returns <a href="rescode.html#misuse">SQLITE_MISUSE</a> and sets *ppValue to NULL.</p>
+
+<p>Argument iVal must be greater than or equal to 0, and less than the number
+of columns in the table affected by the current change. Otherwise,
+<a href="rescode.html#range">SQLITE_RANGE</a> is returned and *ppValue is set to NULL.</p>
+
+<p>If successful, this function sets *ppValue to point to a protected
+sqlite3_value object containing the iVal'th value from the vector of
+new row values stored as part of the UPDATE or INSERT change and
+returns SQLITE_OK. If the change is an UPDATE and does not include
+a new value for the requested column, *ppValue is set to NULL and
+SQLITE_OK returned. The name of the function comes from the fact that
+this is similar to the "new.*" columns available to update or delete
+triggers.</p>
+
+<p>If some other error occurs (e.g. an OOM condition), an SQLite error code
+is returned and *ppValue is set to NULL.
+</p><hr><a name="sqlite3changeset_next"></a>
+<h2>Advance A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_next(sqlite3_changeset_iter *pIter);
+</pre></blockquote><p>
+This function may only be used with iterators created by the function
+<a href="#sqlite3changeset_start">sqlite3changeset_start()</a>. If it is called on an iterator passed to
+a conflict-handler callback by <a href="#sqlite3changeset_apply">sqlite3changeset_apply()</a>, SQLITE_MISUSE
+is returned and the call has no effect.</p>
+
+<p>Immediately after an iterator is created by sqlite3changeset_start(), it
+does not point to any change in the changeset. Assuming the changeset
+is not empty, the first call to this function advances the iterator to
+point to the first change in the changeset. Each subsequent call advances
+the iterator to point to the next change in the changeset (if any). If
+no error occurs and the iterator points to a valid change after a call
+to sqlite3changeset_next() has advanced it, SQLITE_ROW is returned.
+Otherwise, if all changes in the changeset have already been visited,
+SQLITE_DONE is returned.</p>
+
+<p>If an error occurs, an SQLite error code is returned. Possible error
+codes include SQLITE_CORRUPT (if the changeset buffer is corrupt) or
+SQLITE_NOMEM.
+</p><hr><a name="sqlite3changeset_old"></a>
+<h2>Obtain old.* Values From A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_old(
+ sqlite3_changeset_iter *pIter, /* Changeset iterator */
+ int iVal, /* Column number */
+ sqlite3_value **ppValue /* OUT: Old value (or NULL pointer) */
+);
+</pre></blockquote><p>
+The pIter argument passed to this function may either be an iterator
+passed to a conflict-handler by <a href="#sqlite3changeset_apply">sqlite3changeset_apply()</a>, or an iterator
+created by <a href="#sqlite3changeset_start">sqlite3changeset_start()</a>. In the latter case, the most recent
+call to <a href="#sqlite3changeset_next">sqlite3changeset_next()</a> must have returned SQLITE_ROW.
+Furthermore, it may only be called if the type of change that the iterator
+currently points to is either <a href="c3ref/c_alter_table.html">SQLITE_DELETE</a> or <a href="c3ref/c_alter_table.html">SQLITE_UPDATE</a>. Otherwise,
+this function returns <a href="rescode.html#misuse">SQLITE_MISUSE</a> and sets *ppValue to NULL.</p>
+
+<p>Argument iVal must be greater than or equal to 0, and less than the number
+of columns in the table affected by the current change. Otherwise,
+<a href="rescode.html#range">SQLITE_RANGE</a> is returned and *ppValue is set to NULL.</p>
+
+<p>If successful, this function sets *ppValue to point to a protected
+sqlite3_value object containing the iVal'th value from the vector of
+original row values stored as part of the UPDATE or DELETE change and
+returns SQLITE_OK. The name of the function comes from the fact that this
+is similar to the "old.*" columns available to update or delete triggers.</p>
+
+<p>If some other error occurs (e.g. an OOM condition), an SQLite error code
+is returned and *ppValue is set to NULL.
+</p><hr><a name="sqlite3changeset_op"></a>
+<h2>Obtain The Current Operation From A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_op(
+ sqlite3_changeset_iter *pIter, /* Iterator object */
+ const char **pzTab, /* OUT: Pointer to table name */
+ int *pnCol, /* OUT: Number of columns in table */
+ int *pOp, /* OUT: SQLITE_INSERT, DELETE or UPDATE */
+ int *pbIndirect /* OUT: True for an 'indirect' change */
+);
+</pre></blockquote><p>
+The pIter argument passed to this function may either be an iterator
+passed to a conflict-handler by <a href="#sqlite3changeset_apply">sqlite3changeset_apply()</a>, or an iterator
+created by <a href="#sqlite3changeset_start">sqlite3changeset_start()</a>. In the latter case, the most recent
+call to <a href="#sqlite3changeset_next">sqlite3changeset_next()</a> must have returned <a href="rescode.html#row">SQLITE_ROW</a>. If this
+is not the case, this function returns <a href="rescode.html#misuse">SQLITE_MISUSE</a>.</p>
+
+<p>Arguments pOp, pnCol and pzTab may not be NULL. Upon return, three
+outputs are set through these pointers: </p>
+
+<p>*pOp is set to one of <a href="c3ref/c_alter_table.html">SQLITE_INSERT</a>, <a href="c3ref/c_alter_table.html">SQLITE_DELETE</a> or <a href="c3ref/c_alter_table.html">SQLITE_UPDATE</a>,
+depending on the type of change that the iterator currently points to;</p>
+
+<p>*pnCol is set to the number of columns in the table affected by the change; and</p>
+
+<p>*pzTab is set to point to a nul-terminated utf-8 encoded string containing
+the name of the table affected by the current change. The buffer remains
+valid until either sqlite3changeset_next() is called on the iterator
+or until the conflict-handler function returns.</p>
+
+<p>If pbIndirect is not NULL, then *pbIndirect is set to true (1) if the change
+is an indirect change, or false (0) otherwise. See the documentation for
+<a href="#sqlite3session_indirect">sqlite3session_indirect()</a> for a description of direct and indirect
+changes.</p>
+
+<p>If no error occurs, SQLITE_OK is returned. If an error does occur, an
+SQLite error code is returned. The values of the output variables may not
+be trusted in this case.
+</p><hr><a name="sqlite3changeset_pk"></a>
+<h2>Obtain The Primary Key Definition Of A Table</h2><blockquote><pre>int sqlite3changeset_pk(
+ sqlite3_changeset_iter *pIter, /* Iterator object */
+ unsigned char **pabPK, /* OUT: Array of boolean - true for PK cols */
+ int *pnCol /* OUT: Number of entries in output array */
+);
+</pre></blockquote><p>
+For each modified table, a changeset includes the following:</p>
+
+<p><ul>
+ <li> The number of columns in the table, and
+ <li> Which of those columns make up the tables PRIMARY KEY.
+</ul></p>
+
+<p>This function is used to find which columns comprise the PRIMARY KEY of
+the table modified by the change that iterator pIter currently points to.
+If successful, *pabPK is set to point to an array of nCol entries, where
+nCol is the number of columns in the table. Elements of *pabPK are set to
+0x01 if the corresponding column is part of the tables primary key, or
+0x00 if it is not.</p>
+
+<p>If argument pnCol is not NULL, then *pnCol is set to the number of columns
+in the table.</p>
+
+<p>If this function is called when the iterator does not point to a valid
+entry, SQLITE_MISUSE is returned and the output variables zeroed. Otherwise,
+SQLITE_OK is returned and the output variables populated as described
+above.
+</p><hr><a name="sqlite3rebaser_configure"></a>
+<h2>Configure a changeset rebaser object.</h2><blockquote><pre>int sqlite3rebaser_configure(
+ sqlite3_rebaser*,
+ int nRebase, const void *pRebase
+);
+</pre></blockquote><p><b>Important:</b> This interface is <a href="c3ref/experimental.html">experimental</a> and is subject to change without notice.</p><p>
+Configure the changeset rebaser object to rebase changesets according
+to the conflict resolutions described by buffer pRebase (size nRebase
+bytes), which must have been obtained from a previous call to
+sqlite3changeset_apply_v2().
+</p><hr><a name="sqlite3rebaser_create"></a>
+<h2>Create a changeset rebaser object.</h2><blockquote><pre>int sqlite3rebaser_create(sqlite3_rebaser **ppNew);
+</pre></blockquote><p><b>Important:</b> This interface is <a href="c3ref/experimental.html">experimental</a> and is subject to change without notice.</p><p>
+Allocate a new changeset rebaser object. If successful, set (*ppNew) to
+point to the new object and return SQLITE_OK. Otherwise, if an error
+occurs, return an SQLite error code (e.g. SQLITE_NOMEM) and set (*ppNew)
+to NULL.
+</p><hr><a name="sqlite3rebaser_delete"></a>
+<h2>Delete a changeset rebaser object.</h2><blockquote><pre>void sqlite3rebaser_delete(sqlite3_rebaser *p);
+</pre></blockquote><p><b>Important:</b> This interface is <a href="c3ref/experimental.html">experimental</a> and is subject to change without notice.</p><p>
+Delete the changeset rebaser object and all associated resources. There
+should be one call to this function for each successful invocation
+of sqlite3rebaser_create().
+</p><hr><a name="sqlite3rebaser_rebase"></a>
+<h2>Rebase a changeset</h2><blockquote><pre>int sqlite3rebaser_rebase(
+ sqlite3_rebaser*,
+ int nIn, const void *pIn,
+ int *pnOut, void **ppOut
+);
+</pre></blockquote><p><b>Important:</b> This interface is <a href="c3ref/experimental.html">experimental</a> and is subject to change without notice.</p><p>
+Argument pIn must point to a buffer containing a changeset nIn bytes
+in size. This function allocates and populates a buffer with a copy
+of the changeset rebased according to the configuration of the
+rebaser object passed as the first argument. If successful, (*ppOut)
+is set to point to the new buffer containing the rebased changeset and
+(*pnOut) to its size in bytes and SQLITE_OK returned. It is the
+responsibility of the caller to eventually free the new buffer using
+sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut)
+are set to zero and an SQLite error code returned.
+</p><hr><a name="sqlite3session_attach"></a>
+<h2>Attach A Table To A Session Object</h2><blockquote><pre>int sqlite3session_attach(
+ sqlite3_session *pSession, /* Session object */
+ const char *zTab /* Table name */
+);
+</pre></blockquote><p>
+If argument zTab is not NULL, then it is the name of a table to attach
+to the session object passed as the first argument. All subsequent changes
+made to the table while the session object is enabled will be recorded. See
+documentation for <a href="#sqlite3session_changeset">sqlite3session_changeset()</a> for further details.</p>
+
+<p>Or, if argument zTab is NULL, then changes are recorded for all tables
+in the database. If additional tables are added to the database (by
+executing "CREATE TABLE" statements) after this call is made, changes for
+the new tables are also recorded.</p>
+
+<p>Changes can only be recorded for tables that have a PRIMARY KEY explicitly
+defined as part of their CREATE TABLE statement. It does not matter if the
+PRIMARY KEY is an "INTEGER PRIMARY KEY" (rowid alias) or not. The PRIMARY
+KEY may consist of a single column, or may be a composite key.</p>
+
+<p>It is not an error if the named table does not exist in the database. Nor
+is it an error if the named table does not have a PRIMARY KEY. However,
+no changes will be recorded in either of these scenarios.</p>
+
+<p>Changes are not recorded for individual rows that have NULL values stored
+in one or more of their PRIMARY KEY columns.</p>
+
+<p>SQLITE_OK is returned if the call completes without error. Or, if an error
+occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned.</p>
+
+<p><h3>Special sqlite_stat1 Handling</h3></p>
+
+<p>As of SQLite version 3.22.0, the "sqlite_stat1" table is an exception to
+some of the rules above. In SQLite, the schema of sqlite_stat1 is:
+ <pre>
+ &nbsp; CREATE TABLE sqlite_stat1(tbl,idx,stat)
+ </pre></p>
+
+<p>Even though sqlite_stat1 does not have a PRIMARY KEY, changes are
+recorded for it as if the PRIMARY KEY is (tbl,idx). Additionally, changes
+are recorded for rows for which (idx IS NULL) is true. However, for such
+rows a zero-length blob (SQL value X'') is stored in the changeset or
+patchset instead of a NULL value. This allows such changesets to be
+manipulated by legacy implementations of sqlite3changeset_invert(),
+concat() and similar.</p>
+
+<p>The sqlite3changeset_apply() function automatically converts the
+zero-length blob back to a NULL value when updating the sqlite_stat1
+table. However, if the application calls sqlite3changeset_new(),
+sqlite3changeset_old() or sqlite3changeset_conflict on a changeset
+iterator directly (including on a changeset iterator passed to a
+conflict-handler callback) then the X'' value is returned. The application
+must translate X'' to NULL itself if required.</p>
+
+<p>Legacy (older than 3.22.0) versions of the sessions module cannot capture
+changes made to the sqlite_stat1 table. Legacy versions of the
+sqlite3changeset_apply() function silently ignore any modifications to the
+sqlite_stat1 table that are part of a changeset or patchset.
+</p><hr><a name="sqlite3session_changeset"></a>
+<h2>Generate A Changeset From A Session Object</h2><blockquote><pre>int sqlite3session_changeset(
+ sqlite3_session *pSession, /* Session object */
+ int *pnChangeset, /* OUT: Size of buffer at *ppChangeset */
+ void **ppChangeset /* OUT: Buffer containing changeset */
+);
+</pre></blockquote><p>
+Obtain a changeset containing changes to the tables attached to the
+session object passed as the first argument. If successful,
+set *ppChangeset to point to a buffer containing the changeset
+and *pnChangeset to the size of the changeset in bytes before returning
+SQLITE_OK. If an error occurs, set both *ppChangeset and *pnChangeset to
+zero and return an SQLite error code.</p>
+
+<p>A changeset consists of zero or more INSERT, UPDATE and/or DELETE changes,
+each representing a change to a single row of an attached table. An INSERT
+change contains the values of each field of a new database row. A DELETE
+contains the original values of each field of a deleted database row. An
+UPDATE change contains the original values of each field of an updated
+database row along with the updated values for each updated non-primary-key
+column. It is not possible for an UPDATE change to represent a change that
+modifies the values of primary key columns. If such a change is made, it
+is represented in a changeset as a DELETE followed by an INSERT.</p>
+
+<p>Changes are not recorded for rows that have NULL values stored in one or
+more of their PRIMARY KEY columns. If such a row is inserted or deleted,
+no corresponding change is present in the changesets returned by this
+function. If an existing row with one or more NULL values stored in
+PRIMARY KEY columns is updated so that all PRIMARY KEY columns are non-NULL,
+only an INSERT is appears in the changeset. Similarly, if an existing row
+with non-NULL PRIMARY KEY values is updated so that one or more of its
+PRIMARY KEY columns are set to NULL, the resulting changeset contains a
+DELETE change only.</p>
+
+<p>The contents of a changeset may be traversed using an iterator created
+using the <a href="#sqlite3changeset_start">sqlite3changeset_start()</a> API. A changeset may be applied to
+a database with a compatible schema using the <a href="#sqlite3changeset_apply">sqlite3changeset_apply()</a>
+API.</p>
+
+<p>Within a changeset generated by this function, all changes related to a
+single table are grouped together. In other words, when iterating through
+a changeset or when applying a changeset to a database, all changes related
+to a single table are processed before moving on to the next table. Tables
+are sorted in the same order in which they were attached (or auto-attached)
+to the sqlite3_session object. The order in which the changes related to
+a single table are stored is undefined.</p>
+
+<p>Following a successful call to this function, it is the responsibility of
+the caller to eventually free the buffer that *ppChangeset points to using
+<a href="c3ref/free.html">sqlite3_free()</a>.</p>
+
+<p><h3>Changeset Generation</h3></p>
+
+<p>Once a table has been attached to a session object, the session object
+records the primary key values of all new rows inserted into the table.
+It also records the original primary key and other column values of any
+deleted or updated rows. For each unique primary key value, data is only
+recorded once - the first time a row with said primary key is inserted,
+updated or deleted in the lifetime of the session.</p>
+
+<p>There is one exception to the previous paragraph: when a row is inserted,
+updated or deleted, if one or more of its primary key columns contain a
+NULL value, no record of the change is made.</p>
+
+<p>The session object therefore accumulates two types of records - those
+that consist of primary key values only (created when the user inserts
+a new record) and those that consist of the primary key values and the
+original values of other table columns (created when the users deletes
+or updates a record).</p>
+
+<p>When this function is called, the requested changeset is created using
+both the accumulated records and the current contents of the database
+file. Specifically:</p>
+
+<p><ul>
+ <li> For each record generated by an insert, the database is queried
+ for a row with a matching primary key. If one is found, an INSERT
+ change is added to the changeset. If no such row is found, no change
+ is added to the changeset.</p>
+
+<p> <li> For each record generated by an update or delete, the database is
+ queried for a row with a matching primary key. If such a row is
+ found and one or more of the non-primary key fields have been
+ modified from their original values, an UPDATE change is added to
+ the changeset. Or, if no such row is found in the table, a DELETE
+ change is added to the changeset. If there is a row with a matching
+ primary key in the database, but all fields contain their original
+ values, no change is added to the changeset.
+</ul></p>
+
+<p>This means, amongst other things, that if a row is inserted and then later
+deleted while a session object is active, neither the insert nor the delete
+will be present in the changeset. Or if a row is deleted and then later a
+row with the same primary key values inserted while a session object is
+active, the resulting changeset will contain an UPDATE change instead of
+a DELETE and an INSERT.</p>
+
+<p>When a session object is disabled (see the <a href="#sqlite3session_enable">sqlite3session_enable()</a> API),
+it does not accumulate records when rows are inserted, updated or deleted.
+This may appear to have some counter-intuitive effects if a single row
+is written to more than once during a session. For example, if a row
+is inserted while a session object is enabled, then later deleted while
+the same session object is disabled, no INSERT record will appear in the
+changeset, even though the delete took place while the session was disabled.
+Or, if one field of a row is updated while a session is disabled, and
+another field of the same row is updated while the session is enabled, the
+resulting changeset will contain an UPDATE change that updates both fields.
+</p><hr><a name="sqlite3session_changeset_size"></a>
+<h2>Return An Upper-limit For The Size Of The Changeset</h2><blockquote><pre>sqlite3_int64 sqlite3session_changeset_size(sqlite3_session *pSession);
+</pre></blockquote><p>
+By default, this function always returns 0. For it to return
+a useful result, the sqlite3_session object must have been configured
+to enable this API using sqlite3session_object_config() with the
+SQLITE_SESSION_OBJCONFIG_SIZE verb.</p>
+
+<p>When enabled, this function returns an upper limit, in bytes, for the size
+of the changeset that might be produced if sqlite3session_changeset() were
+called. The final changeset size might be equal to or smaller than the
+size in bytes returned by this function.
+</p><hr><a name="sqlite3session_config"></a>
+<h2>Configure global parameters</h2><blockquote><pre>int sqlite3session_config(int op, void *pArg);
+</pre></blockquote><p>
+The sqlite3session_config() interface is used to make global configuration
+changes to the sessions module in order to tune it to the specific needs
+of the application.</p>
+
+<p>The sqlite3session_config() interface is not threadsafe. If it is invoked
+while any other thread is inside any other sessions method then the
+results are undefined. Furthermore, if it is invoked after any sessions
+related objects have been created, the results are also undefined. </p>
+
+<p>The first argument to the sqlite3session_config() function must be one
+of the SQLITE_SESSION_CONFIG_XXX constants defined below. The
+interpretation of the (void*) value passed as the second parameter and
+the effect of calling this function depends on the value of the first
+parameter.</p>
+
+<p><dl>
+<dt>SQLITE_SESSION_CONFIG_STRMSIZE<dd>
+ By default, the sessions module streaming interfaces attempt to input
+ and output data in approximately 1 KiB chunks. This operand may be used
+ to set and query the value of this configuration setting. The pointer
+ passed as the second argument must point to a value of type (int).
+ If this value is greater than 0, it is used as the new streaming data
+ chunk size for both input and output. Before returning, the (int) value
+ pointed to by pArg is set to the final value of the streaming interface
+ chunk size.
+</dl></p>
+
+<p>This function returns SQLITE_OK if successful, or an SQLite error code
+otherwise.
+</p><hr><a name="sqlite3session_create"></a>
+<h2>Create A New Session Object</h2><blockquote><pre>int sqlite3session_create(
+ sqlite3 *db, /* Database handle */
+ const char *zDb, /* Name of db (e.g. "main") */
+ sqlite3_session **ppSession /* OUT: New session object */
+);
+</pre></blockquote><p>
+Create a new session object attached to database handle db. If successful,
+a pointer to the new object is written to *ppSession and SQLITE_OK is
+returned. If an error occurs, *ppSession is set to NULL and an SQLite
+error code (e.g. SQLITE_NOMEM) is returned.</p>
+
+<p>It is possible to create multiple session objects attached to a single
+database handle.</p>
+
+<p>Session objects created using this function should be deleted using the
+<a href="#sqlite3session_delete">sqlite3session_delete()</a> function before the database handle that they
+are attached to is itself closed. If the database handle is closed before
+the session object is deleted, then the results of calling any session
+module function, including <a href="#sqlite3session_delete">sqlite3session_delete()</a> on the session object
+are undefined.</p>
+
+<p>Because the session module uses the <a href="c3ref/preupdate_blobwrite.html">sqlite3_preupdate_hook()</a> API, it
+is not possible for an application to register a pre-update hook on a
+database handle that has one or more session objects attached. Nor is
+it possible to create a session object attached to a database handle for
+which a pre-update hook is already defined. The results of attempting
+either of these things are undefined.</p>
+
+<p>The session object will be used to create changesets for tables in
+database zDb, where zDb is either "main", or "temp", or the name of an
+attached database. It is not an error if database zDb is not attached
+to the database when the session object is created.
+</p><hr><a name="sqlite3session_delete"></a>
+<h2>Delete A Session Object</h2><blockquote><pre>void sqlite3session_delete(sqlite3_session *pSession);
+</pre></blockquote><p>
+Delete a session object previously allocated using
+<a href="#sqlite3session_create">sqlite3session_create()</a>. Once a session object has been deleted, the
+results of attempting to use pSession with any other session module
+function are undefined.</p>
+
+<p>Session objects must be deleted before the database handle to which they
+are attached is closed. Refer to the documentation for
+<a href="#sqlite3session_create">sqlite3session_create()</a> for details.
+</p><hr><a name="sqlite3session_diff"></a>
+<h2>Load The Difference Between Tables Into A Session</h2><blockquote><pre>int sqlite3session_diff(
+ sqlite3_session *pSession,
+ const char *zFromDb,
+ const char *zTbl,
+ char **pzErrMsg
+);
+</pre></blockquote><p>
+If it is not already attached to the session object passed as the first
+argument, this function attaches table zTbl in the same manner as the
+<a href="#sqlite3session_attach">sqlite3session_attach()</a> function. If zTbl does not exist, or if it
+does not have a primary key, this function is a no-op (but does not return
+an error).</p>
+
+<p>Argument zFromDb must be the name of a database ("main", "temp" etc.)
+attached to the same database handle as the session object that contains
+a table compatible with the table attached to the session by this function.
+A table is considered compatible if it:</p>
+
+<p><ul>
+ <li> Has the same name,
+ <li> Has the same set of columns declared in the same order, and
+ <li> Has the same PRIMARY KEY definition.
+</ul></p>
+
+<p>If the tables are not compatible, SQLITE_SCHEMA is returned. If the tables
+are compatible but do not have any PRIMARY KEY columns, it is not an error
+but no changes are added to the session object. As with other session
+APIs, tables without PRIMARY KEYs are simply ignored.</p>
+
+<p>This function adds a set of changes to the session object that could be
+used to update the table in database zFrom (call this the "from-table")
+so that its content is the same as the table attached to the session
+object (call this the "to-table"). Specifically:</p>
+
+<p><ul>
+ <li> For each row (primary key) that exists in the to-table but not in
+ the from-table, an INSERT record is added to the session object.</p>
+
+<p> <li> For each row (primary key) that exists in the to-table but not in
+ the from-table, a DELETE record is added to the session object.</p>
+
+<p> <li> For each row (primary key) that exists in both tables, but features
+ different non-PK values in each, an UPDATE record is added to the
+ session.
+</ul></p>
+
+<p>To clarify, if this function is called and then a changeset constructed
+using <a href="#sqlite3session_changeset">sqlite3session_changeset()</a>, then after applying that changeset to
+database zFrom the contents of the two compatible tables would be
+identical.</p>
+
+<p>It an error if database zFrom does not exist or does not contain the
+required compatible table.</p>
+
+<p>If the operation is successful, SQLITE_OK is returned. Otherwise, an SQLite
+error code. In this case, if argument pzErrMsg is not NULL, *pzErrMsg
+may be set to point to a buffer containing an English language error
+message. It is the responsibility of the caller to free this buffer using
+sqlite3_free().
+</p><hr><a name="sqlite3session_enable"></a>
+<h2>Enable Or Disable A Session Object</h2><blockquote><pre>int sqlite3session_enable(sqlite3_session *pSession, int bEnable);
+</pre></blockquote><p>
+Enable or disable the recording of changes by a session object. When
+enabled, a session object records changes made to the database. When
+disabled - it does not. A newly created session object is enabled.
+Refer to the documentation for <a href="#sqlite3session_changeset">sqlite3session_changeset()</a> for further
+details regarding how enabling and disabling a session object affects
+the eventual changesets.</p>
+
+<p>Passing zero to this function disables the session. Passing a value
+greater than zero enables it. Passing a value less than zero is a
+no-op, and may be used to query the current state of the session.</p>
+
+<p>The return value indicates the final state of the session object: 0 if
+the session is disabled, or 1 if it is enabled.
+</p><hr><a name="sqlite3session_indirect"></a>
+<h2>Set Or Clear the Indirect Change Flag</h2><blockquote><pre>int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect);
+</pre></blockquote><p>
+Each change recorded by a session object is marked as either direct or
+indirect. A change is marked as indirect if either:</p>
+
+<p><ul>
+ <li> The session object "indirect" flag is set when the change is
+ made, or
+ <li> The change is made by an SQL trigger or foreign key action
+ instead of directly as a result of a users SQL statement.
+</ul></p>
+
+<p>If a single row is affected by more than one operation within a session,
+then the change is considered indirect if all operations meet the criteria
+for an indirect change above, or direct otherwise.</p>
+
+<p>This function is used to set, clear or query the session object indirect
+flag. If the second argument passed to this function is zero, then the
+indirect flag is cleared. If it is greater than zero, the indirect flag
+is set. Passing a value less than zero does not modify the current value
+of the indirect flag, and may be used to query the current state of the
+indirect flag for the specified session object.</p>
+
+<p>The return value indicates the final state of the indirect flag: 0 if
+it is clear, or 1 if it is set.
+</p><hr><a name="sqlite3session_isempty"></a>
+<h2>Test if a changeset has recorded any changes.</h2><blockquote><pre>int sqlite3session_isempty(sqlite3_session *pSession);
+</pre></blockquote><p>
+Return non-zero if no changes to attached tables have been recorded by
+the session object passed as the first argument. Otherwise, if one or
+more changes have been recorded, return zero.</p>
+
+<p>Even if this function returns zero, it is possible that calling
+<a href="#sqlite3session_changeset">sqlite3session_changeset()</a> on the session handle may still return a
+changeset that contains no changes. This can happen when a row in
+an attached table is modified and then later on the original values
+are restored. However, if this function returns non-zero, then it is
+guaranteed that a call to sqlite3session_changeset() will return a
+changeset containing zero changes.
+</p><hr><a name="sqlite3session_memory_used"></a>
+<h2>Query for the amount of heap memory used by a session object.</h2><blockquote><pre>sqlite3_int64 sqlite3session_memory_used(sqlite3_session *pSession);
+</pre></blockquote><p>
+This API returns the total amount of heap memory in bytes currently
+used by the session object passed as the only argument.
+</p><hr><a name="sqlite3session_patchset"></a>
+<h2>Generate A Patchset From A Session Object</h2><blockquote><pre>int sqlite3session_patchset(
+ sqlite3_session *pSession, /* Session object */
+ int *pnPatchset, /* OUT: Size of buffer at *ppPatchset */
+ void **ppPatchset /* OUT: Buffer containing patchset */
+);
+</pre></blockquote><p>
+The differences between a patchset and a changeset are that:</p>
+
+<p><ul>
+ <li> DELETE records consist of the primary key fields only. The
+ original values of other fields are omitted.
+ <li> The original values of any modified fields are omitted from
+ UPDATE records.
+</ul></p>
+
+<p>A patchset blob may be used with up to date versions of all
+sqlite3changeset_xxx API functions except for sqlite3changeset_invert(),
+which returns SQLITE_CORRUPT if it is passed a patchset. Similarly,
+attempting to use a patchset blob with old versions of the
+sqlite3changeset_xxx APIs also provokes an SQLITE_CORRUPT error. </p>
+
+<p>Because the non-primary key "old.*" fields are omitted, no
+SQLITE_CHANGESET_DATA conflicts can be detected or reported if a patchset
+is passed to the sqlite3changeset_apply() API. Other conflict types work
+in the same way as for changesets.</p>
+
+<p>Changes within a patchset are ordered in the same way as for changesets
+generated by the sqlite3session_changeset() function (i.e. all changes for
+a single table are grouped together, tables appear in the order in which
+they were attached to the session object).
+</p><hr><a name="sqlite3session_table_filter"></a>
+<h2>Set a table filter on a Session Object.</h2><blockquote><pre>void sqlite3session_table_filter(
+ sqlite3_session *pSession, /* Session object */
+ int(*xFilter)(
+ void *pCtx, /* Copy of third arg to _filter_table() */
+ const char *zTab /* Table name */
+ ),
+ void *pCtx /* First argument passed to xFilter */
+);
+</pre></blockquote><p>
+The second argument (xFilter) is the "filter callback". For changes to rows
+in tables that are not attached to the Session object, the filter is called
+to determine whether changes to the table's rows should be tracked or not.
+If xFilter returns 0, changes are not tracked. Note that once a table is
+attached, xFilter will not be called again.
+</p><hr><a name="SQLITE_CHANGESETAPPLY_INVERT"></a>
+<h2>Flags for sqlite3changeset_apply_v2</h2><blockquote><pre>#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001
+#define SQLITE_CHANGESETAPPLY_INVERT 0x0002
+</pre></blockquote><p>
+The following flags may passed via the 9th parameter to
+<a href="#sqlite3changeset_apply">sqlite3changeset_apply_v2</a> and <a href="#sqlite3changegroup_add_strm">sqlite3changeset_apply_v2_strm</a>:</p>
+
+<p><dl>
+<dt>SQLITE_CHANGESETAPPLY_NOSAVEPOINT <dd>
+ Usually, the sessions module encloses all operations performed by
+ a single call to apply_v2() or apply_v2_strm() in a <a href="lang_savepoint.html">SAVEPOINT</a>. The
+ SAVEPOINT is committed if the changeset or patchset is successfully
+ applied, or rolled back if an error occurs. Specifying this flag
+ causes the sessions module to omit this savepoint. In this case, if the
+ caller has an open transaction or savepoint when apply_v2() is called,
+ it may revert the partially applied changeset by rolling it back.</p>
+
+<p><dt>SQLITE_CHANGESETAPPLY_INVERT <dd>
+ Invert the changeset before applying it. This is equivalent to inverting
+ a changeset using sqlite3changeset_invert() before applying it. It is
+ an error to specify this flag with a patchset.
+</p><hr><a name="SQLITE_CHANGESET_ABORT"></a>
+<h2>Constants Returned By The Conflict Handler</h2><blockquote><pre>#define SQLITE_CHANGESET_OMIT 0
+#define SQLITE_CHANGESET_REPLACE 1
+#define SQLITE_CHANGESET_ABORT 2
+</pre></blockquote><p>
+A conflict handler callback must return one of the following three values.</p>
+
+<p><dl>
+<dt>SQLITE_CHANGESET_OMIT<dd>
+ If a conflict handler returns this value no special action is taken. The
+ change that caused the conflict is not applied. The session module
+ continues to the next change in the changeset.</p>
+
+<p><dt>SQLITE_CHANGESET_REPLACE<dd>
+ This value may only be returned if the second argument to the conflict
+ handler was SQLITE_CHANGESET_DATA or SQLITE_CHANGESET_CONFLICT. If this
+ is not the case, any changes applied so far are rolled back and the
+ call to sqlite3changeset_apply() returns SQLITE_MISUSE.</p>
+
+<p> If CHANGESET_REPLACE is returned by an SQLITE_CHANGESET_DATA conflict
+ handler, then the conflicting row is either updated or deleted, depending
+ on the type of change.</p>
+
+<p> If CHANGESET_REPLACE is returned by an SQLITE_CHANGESET_CONFLICT conflict
+ handler, then the conflicting row is removed from the database and a
+ second attempt to apply the change is made. If this second attempt fails,
+ the original row is restored to the database before continuing.</p>
+
+<p><dt>SQLITE_CHANGESET_ABORT<dd>
+ If this value is returned, any changes applied so far are rolled back
+ and the call to sqlite3changeset_apply() returns SQLITE_ABORT.
+</dl>
+</p><hr><a name="SQLITE_CHANGESET_CONFLICT"></a>
+<h2>Constants Passed To The Conflict Handler</h2><blockquote><pre>#define SQLITE_CHANGESET_DATA 1
+#define SQLITE_CHANGESET_NOTFOUND 2
+#define SQLITE_CHANGESET_CONFLICT 3
+#define SQLITE_CHANGESET_CONSTRAINT 4
+#define SQLITE_CHANGESET_FOREIGN_KEY 5
+</pre></blockquote><p>
+Values that may be passed as the second argument to a conflict-handler.</p>
+
+<p><dl>
+<dt>SQLITE_CHANGESET_DATA<dd>
+ The conflict handler is invoked with CHANGESET_DATA as the second argument
+ when processing a DELETE or UPDATE change if a row with the required
+ PRIMARY KEY fields is present in the database, but one or more other
+ (non primary-key) fields modified by the update do not contain the
+ expected "before" values.</p>
+
+<p> The conflicting row, in this case, is the database row with the matching
+ primary key.</p>
+
+<p><dt>SQLITE_CHANGESET_NOTFOUND<dd>
+ The conflict handler is invoked with CHANGESET_NOTFOUND as the second
+ argument when processing a DELETE or UPDATE change if a row with the
+ required PRIMARY KEY fields is not present in the database.</p>
+
+<p> There is no conflicting row in this case. The results of invoking the
+ sqlite3changeset_conflict() API are undefined.</p>
+
+<p><dt>SQLITE_CHANGESET_CONFLICT<dd>
+ CHANGESET_CONFLICT is passed as the second argument to the conflict
+ handler while processing an INSERT change if the operation would result
+ in duplicate primary key values.</p>
+
+<p> The conflicting row in this case is the database row with the matching
+ primary key.</p>
+
+<p><dt>SQLITE_CHANGESET_FOREIGN_KEY<dd>
+ If foreign key handling is enabled, and applying a changeset leaves the
+ database in a state containing foreign key violations, the conflict
+ handler is invoked with CHANGESET_FOREIGN_KEY as the second argument
+ exactly once before the changeset is committed. If the conflict handler
+ returns CHANGESET_OMIT, the changes, including those that caused the
+ foreign key constraint violation, are committed. Or, if it returns
+ CHANGESET_ABORT, the changeset is rolled back.</p>
+
+<p> No current or conflicting row information is provided. The only function
+ it is possible to call on the supplied sqlite3_changeset_iter handle
+ is sqlite3changeset_fk_conflicts().</p>
+
+<p><dt>SQLITE_CHANGESET_CONSTRAINT<dd>
+ If any other constraint violation occurs while applying a change (i.e.
+ a UNIQUE, CHECK or NOT NULL constraint), the conflict handler is
+ invoked with CHANGESET_CONSTRAINT as the second argument.</p>
+
+<p> There is no conflicting row in this case. The results of invoking the
+ sqlite3changeset_conflict() API are undefined.</p>
+
+<p></dl>
+</p><hr><a name="sqlite3changegroup_add_strm"></a>
+<h2>Streaming Versions of API functions.</h2><blockquote><pre>int sqlite3changeset_apply_strm(
+ sqlite3 *db, /* Apply change to "main" db of this handle */
+ int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */
+ void *pIn, /* First arg for xInput */
+ int(*xFilter)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ const char *zTab /* Table name */
+ ),
+ int(*xConflict)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */
+ sqlite3_changeset_iter *p /* Handle describing change and conflict */
+ ),
+ void *pCtx /* First argument passed to xConflict */
+);
+int sqlite3changeset_apply_v2_strm(
+ sqlite3 *db, /* Apply change to "main" db of this handle */
+ int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */
+ void *pIn, /* First arg for xInput */
+ int(*xFilter)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ const char *zTab /* Table name */
+ ),
+ int(*xConflict)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */
+ sqlite3_changeset_iter *p /* Handle describing change and conflict */
+ ),
+ void *pCtx, /* First argument passed to xConflict */
+ void **ppRebase, int *pnRebase,
+ int flags
+);
+int sqlite3changeset_concat_strm(
+ int (*xInputA)(void *pIn, void *pData, int *pnData),
+ void *pInA,
+ int (*xInputB)(void *pIn, void *pData, int *pnData),
+ void *pInB,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+int sqlite3changeset_invert_strm(
+ int (*xInput)(void *pIn, void *pData, int *pnData),
+ void *pIn,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+int sqlite3changeset_start_strm(
+ sqlite3_changeset_iter **pp,
+ int (*xInput)(void *pIn, void *pData, int *pnData),
+ void *pIn
+);
+int sqlite3changeset_start_v2_strm(
+ sqlite3_changeset_iter **pp,
+ int (*xInput)(void *pIn, void *pData, int *pnData),
+ void *pIn,
+ int flags
+);
+int sqlite3session_changeset_strm(
+ sqlite3_session *pSession,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+int sqlite3session_patchset_strm(
+ sqlite3_session *pSession,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+int sqlite3changegroup_add_strm(sqlite3_changegroup*,
+ int (*xInput)(void *pIn, void *pData, int *pnData),
+ void *pIn
+);
+int sqlite3changegroup_output_strm(sqlite3_changegroup*,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+int sqlite3rebaser_rebase_strm(
+ sqlite3_rebaser *pRebaser,
+ int (*xInput)(void *pIn, void *pData, int *pnData),
+ void *pIn,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+</pre></blockquote><p>
+The six streaming API xxx_strm() functions serve similar purposes to the
+corresponding non-streaming API functions:</p>
+
+<p><table border=1 style="margin-left:8ex;margin-right:8ex">
+ <tr><th>Streaming function<th>Non-streaming equivalent</th>
+ <tr><td>sqlite3changeset_apply_strm<td><a href="#sqlite3changeset_apply">sqlite3changeset_apply</a>
+ <tr><td>sqlite3changeset_apply_strm_v2<td><a href="#sqlite3changeset_apply">sqlite3changeset_apply_v2</a>
+ <tr><td>sqlite3changeset_concat_strm<td><a href="#sqlite3changeset_concat">sqlite3changeset_concat</a>
+ <tr><td>sqlite3changeset_invert_strm<td><a href="#sqlite3changeset_invert">sqlite3changeset_invert</a>
+ <tr><td>sqlite3changeset_start_strm<td><a href="#sqlite3changeset_start">sqlite3changeset_start</a>
+ <tr><td>sqlite3session_changeset_strm<td><a href="#sqlite3session_changeset">sqlite3session_changeset</a>
+ <tr><td>sqlite3session_patchset_strm<td><a href="#sqlite3session_patchset">sqlite3session_patchset</a>
+</table></p>
+
+<p>Non-streaming functions that accept changesets (or patchsets) as input
+require that the entire changeset be stored in a single buffer in memory.
+Similarly, those that return a changeset or patchset do so by returning
+a pointer to a single large buffer allocated using sqlite3_malloc().
+Normally this is convenient. However, if an application running in a
+low-memory environment is required to handle very large changesets, the
+large contiguous memory allocations required can become onerous.</p>
+
+<p>In order to avoid this problem, instead of a single large buffer, input
+is passed to a streaming API functions by way of a callback function that
+the sessions module invokes to incrementally request input data as it is
+required. In all cases, a pair of API function parameters such as</p>
+
+<p> <pre>
+ &nbsp; int nChangeset,
+ &nbsp; void *pChangeset,
+ </pre></p>
+
+<p>Is replaced by:</p>
+
+<p> <pre>
+ &nbsp; int (*xInput)(void *pIn, void *pData, int *pnData),
+ &nbsp; void *pIn,
+ </pre></p>
+
+<p>Each time the xInput callback is invoked by the sessions module, the first
+argument passed is a copy of the supplied pIn context pointer. The second
+argument, pData, points to a buffer (*pnData) bytes in size. Assuming no
+error occurs the xInput method should copy up to (*pnData) bytes of data
+into the buffer and set (*pnData) to the actual number of bytes copied
+before returning SQLITE_OK. If the input is completely exhausted, (*pnData)
+should be set to zero to indicate this. Or, if an error occurs, an SQLite
+error code should be returned. In all cases, if an xInput callback returns
+an error, all processing is abandoned and the streaming API function
+returns a copy of the error code to the caller.</p>
+
+<p>In the case of sqlite3changeset_start_strm(), the xInput callback may be
+invoked by the sessions module at any point during the lifetime of the
+iterator. If such an xInput callback returns an error, the iterator enters
+an error state, whereby all subsequent calls to iterator functions
+immediately fail with the same error code as returned by xInput.</p>
+
+<p>Similarly, streaming API functions that return changesets (or patchsets)
+return them in chunks by way of a callback function instead of via a
+pointer to a single large buffer. In this case, a pair of parameters such
+as:</p>
+
+<p> <pre>
+ &nbsp; int *pnChangeset,
+ &nbsp; void **ppChangeset,
+ </pre></p>
+
+<p>Is replaced by:</p>
+
+<p> <pre>
+ &nbsp; int (*xOutput)(void *pOut, const void *pData, int nData),
+ &nbsp; void *pOut
+ </pre></p>
+
+<p>The xOutput callback is invoked zero or more times to return data to
+the application. The first parameter passed to each call is a copy of the
+pOut pointer supplied by the application. The second parameter, pData,
+points to a buffer nData bytes in size containing the chunk of output
+data being returned. If the xOutput callback successfully processes the
+supplied data, it should return SQLITE_OK to indicate success. Otherwise,
+it should return some other SQLite error code. In this case processing
+is immediately abandoned and the streaming API function returns a copy
+of the xOutput error code to the application.</p>
+
+<p>The sessions module never invokes an xOutput callback with the third
+parameter set to a value less than or equal to zero. Other than this,
+no guarantees are made as to the size of the chunks of data returned.
+</p><hr><a name="sqlite3changeset_apply"></a>
+<h2>Apply A Changeset To A Database</h2><blockquote><pre>int sqlite3changeset_apply(
+ sqlite3 *db, /* Apply change to "main" db of this handle */
+ int nChangeset, /* Size of changeset in bytes */
+ void *pChangeset, /* Changeset blob */
+ int(*xFilter)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ const char *zTab /* Table name */
+ ),
+ int(*xConflict)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */
+ sqlite3_changeset_iter *p /* Handle describing change and conflict */
+ ),
+ void *pCtx /* First argument passed to xConflict */
+);
+int sqlite3changeset_apply_v2(
+ sqlite3 *db, /* Apply change to "main" db of this handle */
+ int nChangeset, /* Size of changeset in bytes */
+ void *pChangeset, /* Changeset blob */
+ int(*xFilter)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ const char *zTab /* Table name */
+ ),
+ int(*xConflict)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */
+ sqlite3_changeset_iter *p /* Handle describing change and conflict */
+ ),
+ void *pCtx, /* First argument passed to xConflict */
+ void **ppRebase, int *pnRebase, /* OUT: Rebase data */
+ int flags /* SESSION_CHANGESETAPPLY_* flags */
+);
+</pre></blockquote><p>
+Apply a changeset or patchset to a database. These functions attempt to
+update the "main" database attached to handle db with the changes found in
+the changeset passed via the second and third arguments. </p>
+
+<p>The fourth argument (xFilter) passed to these functions is the "filter
+callback". If it is not NULL, then for each table affected by at least one
+change in the changeset, the filter callback is invoked with
+the table name as the second argument, and a copy of the context pointer
+passed as the sixth argument as the first. If the "filter callback"
+returns zero, then no attempt is made to apply any changes to the table.
+Otherwise, if the return value is non-zero or the xFilter argument to
+is NULL, all changes related to the table are attempted.</p>
+
+<p>For each table that is not excluded by the filter callback, this function
+tests that the target database contains a compatible table. A table is
+considered compatible if all of the following are true:</p>
+
+<p><ul>
+ <li> The table has the same name as the name recorded in the
+ changeset, and
+ <li> The table has at least as many columns as recorded in the
+ changeset, and
+ <li> The table has primary key columns in the same position as
+ recorded in the changeset.
+</ul></p>
+
+<p>If there is no compatible table, it is not an error, but none of the
+changes associated with the table are applied. A warning message is issued
+via the sqlite3_log() mechanism with the error code SQLITE_SCHEMA. At most
+one such warning is issued for each table in the changeset.</p>
+
+<p>For each change for which there is a compatible table, an attempt is made
+to modify the table contents according to the UPDATE, INSERT or DELETE
+change. If a change cannot be applied cleanly, the conflict handler
+function passed as the fifth argument to sqlite3changeset_apply() may be
+invoked. A description of exactly when the conflict handler is invoked for
+each type of change is below.</p>
+
+<p>Unlike the xFilter argument, xConflict may not be passed NULL. The results
+of passing anything other than a valid function pointer as the xConflict
+argument are undefined.</p>
+
+<p>Each time the conflict handler function is invoked, it must return one
+of <a href="#SQLITE_CHANGESET_ABORT">SQLITE_CHANGESET_OMIT</a>, <a href="#SQLITE_CHANGESET_ABORT">SQLITE_CHANGESET_ABORT</a> or
+<a href="#SQLITE_CHANGESET_ABORT">SQLITE_CHANGESET_REPLACE</a>. SQLITE_CHANGESET_REPLACE may only be returned
+if the second argument passed to the conflict handler is either
+SQLITE_CHANGESET_DATA or SQLITE_CHANGESET_CONFLICT. If the conflict-handler
+returns an illegal value, any changes already made are rolled back and
+the call to sqlite3changeset_apply() returns SQLITE_MISUSE. Different
+actions are taken by sqlite3changeset_apply() depending on the value
+returned by each invocation of the conflict-handler function. Refer to
+the documentation for the three
+<a href="#SQLITE_CHANGESET_ABORT">available return values</a> for details.</p>
+
+<p><dl>
+<dt>DELETE Changes<dd>
+ For each DELETE change, the function checks if the target database
+ contains a row with the same primary key value (or values) as the
+ original row values stored in the changeset. If it does, and the values
+ stored in all non-primary key columns also match the values stored in
+ the changeset the row is deleted from the target database.</p>
+
+<p> If a row with matching primary key values is found, but one or more of
+ the non-primary key fields contains a value different from the original
+ row value stored in the changeset, the conflict-handler function is
+ invoked with <a href="#SQLITE_CHANGESET_CONFLICT">SQLITE_CHANGESET_DATA</a> as the second argument. If the
+ database table has more columns than are recorded in the changeset,
+ only the values of those non-primary key fields are compared against
+ the current database contents - any trailing database table columns
+ are ignored.</p>
+
+<p> If no row with matching primary key values is found in the database,
+ the conflict-handler function is invoked with <a href="#SQLITE_CHANGESET_CONFLICT">SQLITE_CHANGESET_NOTFOUND</a>
+ passed as the second argument.</p>
+
+<p> If the DELETE operation is attempted, but SQLite returns SQLITE_CONSTRAINT
+ (which can only happen if a foreign key constraint is violated), the
+ conflict-handler function is invoked with <a href="#SQLITE_CHANGESET_CONFLICT">SQLITE_CHANGESET_CONSTRAINT</a>
+ passed as the second argument. This includes the case where the DELETE
+ operation is attempted because an earlier call to the conflict handler
+ function returned <a href="#SQLITE_CHANGESET_ABORT">SQLITE_CHANGESET_REPLACE</a>.</p>
+
+<p><dt>INSERT Changes<dd>
+ For each INSERT change, an attempt is made to insert the new row into
+ the database. If the changeset row contains fewer fields than the
+ database table, the trailing fields are populated with their default
+ values.</p>
+
+<p> If the attempt to insert the row fails because the database already
+ contains a row with the same primary key values, the conflict handler
+ function is invoked with the second argument set to
+ <a href="#SQLITE_CHANGESET_CONFLICT">SQLITE_CHANGESET_CONFLICT</a>.</p>
+
+<p> If the attempt to insert the row fails because of some other constraint
+ violation (e.g. NOT NULL or UNIQUE), the conflict handler function is
+ invoked with the second argument set to <a href="#SQLITE_CHANGESET_CONFLICT">SQLITE_CHANGESET_CONSTRAINT</a>.
+ This includes the case where the INSERT operation is re-attempted because
+ an earlier call to the conflict handler function returned
+ <a href="#SQLITE_CHANGESET_ABORT">SQLITE_CHANGESET_REPLACE</a>.</p>
+
+<p><dt>UPDATE Changes<dd>
+ For each UPDATE change, the function checks if the target database
+ contains a row with the same primary key value (or values) as the
+ original row values stored in the changeset. If it does, and the values
+ stored in all modified non-primary key columns also match the values
+ stored in the changeset the row is updated within the target database.</p>
+
+<p> If a row with matching primary key values is found, but one or more of
+ the modified non-primary key fields contains a value different from an
+ original row value stored in the changeset, the conflict-handler function
+ is invoked with <a href="#SQLITE_CHANGESET_CONFLICT">SQLITE_CHANGESET_DATA</a> as the second argument. Since
+ UPDATE changes only contain values for non-primary key fields that are
+ to be modified, only those fields need to match the original values to
+ avoid the SQLITE_CHANGESET_DATA conflict-handler callback.</p>
+
+<p> If no row with matching primary key values is found in the database,
+ the conflict-handler function is invoked with <a href="#SQLITE_CHANGESET_CONFLICT">SQLITE_CHANGESET_NOTFOUND</a>
+ passed as the second argument.</p>
+
+<p> If the UPDATE operation is attempted, but SQLite returns
+ SQLITE_CONSTRAINT, the conflict-handler function is invoked with
+ <a href="#SQLITE_CHANGESET_CONFLICT">SQLITE_CHANGESET_CONSTRAINT</a> passed as the second argument.
+ This includes the case where the UPDATE operation is attempted after
+ an earlier call to the conflict handler function returned
+ <a href="#SQLITE_CHANGESET_ABORT">SQLITE_CHANGESET_REPLACE</a>.
+</dl></p>
+
+<p>It is safe to execute SQL statements, including those that write to the
+table that the callback related to, from within the xConflict callback.
+This can be used to further customize the application's conflict
+resolution strategy.</p>
+
+<p>All changes made by these functions are enclosed in a savepoint transaction.
+If any other error (aside from a constraint failure when attempting to
+write to the target database) occurs, then the savepoint transaction is
+rolled back, restoring the target database to its original state, and an
+SQLite error code returned.</p>
+
+<p>If the output parameters (ppRebase) and (pnRebase) are non-NULL and
+the input is a changeset (not a patchset), then sqlite3changeset_apply_v2()
+may set (*ppRebase) to point to a "rebase" that may be used with the
+sqlite3_rebaser APIs buffer before returning. In this case (*pnRebase)
+is set to the size of the buffer in bytes. It is the responsibility of the
+caller to eventually free any such buffer using sqlite3_free(). The buffer
+is only allocated and populated if one or more conflicts were encountered
+while applying the patchset. See comments surrounding the sqlite3_rebaser
+APIs for further details.</p>
+
+<p>The behavior of sqlite3changeset_apply_v2() and its streaming equivalent
+may be modified by passing a combination of
+<a href="#SQLITE_CHANGESETAPPLY_INVERT">supported flags</a> as the 9th parameter.</p>
+
+<p>Note that the sqlite3changeset_apply_v2() API is still <b>experimental</b>
+and therefore subject to change.
+</p><hr><a name="sqlite3changeset_start"></a>
+<h2>Create An Iterator To Traverse A Changeset </h2><blockquote><pre>int sqlite3changeset_start(
+ sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */
+ int nChangeset, /* Size of changeset blob in bytes */
+ void *pChangeset /* Pointer to blob containing changeset */
+);
+int sqlite3changeset_start_v2(
+ sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */
+ int nChangeset, /* Size of changeset blob in bytes */
+ void *pChangeset, /* Pointer to blob containing changeset */
+ int flags /* SESSION_CHANGESETSTART_* flags */
+);
+</pre></blockquote><p>
+Create an iterator used to iterate through the contents of a changeset.
+If successful, *pp is set to point to the iterator handle and SQLITE_OK
+is returned. Otherwise, if an error occurs, *pp is set to zero and an
+SQLite error code is returned.</p>
+
+<p>The following functions can be used to advance and query a changeset
+iterator created by this function:</p>
+
+<p><ul>
+ <li> <a href="#sqlite3changeset_next">sqlite3changeset_next()</a>
+ <li> <a href="#sqlite3changeset_op">sqlite3changeset_op()</a>
+ <li> <a href="#sqlite3changeset_new">sqlite3changeset_new()</a>
+ <li> <a href="#sqlite3changeset_old">sqlite3changeset_old()</a>
+</ul></p>
+
+<p>It is the responsibility of the caller to eventually destroy the iterator
+by passing it to <a href="#sqlite3changeset_finalize">sqlite3changeset_finalize()</a>. The buffer containing the
+changeset (pChangeset) must remain valid until after the iterator is
+destroyed.</p>
+
+<p>Assuming the changeset blob was created by one of the
+<a href="#sqlite3session_changeset">sqlite3session_changeset()</a>, <a href="#sqlite3changeset_concat">sqlite3changeset_concat()</a> or
+<a href="#sqlite3changeset_invert">sqlite3changeset_invert()</a> functions, all changes within the changeset
+that apply to a single table are grouped together. This means that when
+an application iterates through a changeset using an iterator created by
+this function, all changes that relate to a single table are visited
+consecutively. There is no chance that the iterator will visit a change
+the applies to table X, then one for table Y, and then later on visit
+another change for table X.</p>
+
+<p>The behavior of sqlite3changeset_start_v2() and its streaming equivalent
+may be modified by passing a combination of
+<a href="#SQLITE_CHANGESETSTART_INVERT">supported flags</a> as the 4th parameter.</p>
+
+<p>Note that the sqlite3changeset_start_v2() API is still <b>experimental</b>
+and therefore subject to change.
+</p><hr>
+
+
diff --git a/www/session/c_changeset_abort.html b/www/session/c_changeset_abort.html
new file mode 100644
index 0000000..457aa2e
--- /dev/null
+++ b/www/session/c_changeset_abort.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Constants Returned By The Conflict Handler</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Constants Returned By The Conflict Handler</h2><blockquote><pre>#define SQLITE_CHANGESET_OMIT 0
+#define SQLITE_CHANGESET_REPLACE 1
+#define SQLITE_CHANGESET_ABORT 2
+</pre></blockquote><p>
+A conflict handler callback must return one of the following three values.</p>
+
+<p><dl>
+<dt>SQLITE_CHANGESET_OMIT<dd>
+ If a conflict handler returns this value no special action is taken. The
+ change that caused the conflict is not applied. The session module
+ continues to the next change in the changeset.</p>
+
+<p><dt>SQLITE_CHANGESET_REPLACE<dd>
+ This value may only be returned if the second argument to the conflict
+ handler was SQLITE_CHANGESET_DATA or SQLITE_CHANGESET_CONFLICT. If this
+ is not the case, any changes applied so far are rolled back and the
+ call to sqlite3changeset_apply() returns SQLITE_MISUSE.</p>
+
+<p> If CHANGESET_REPLACE is returned by an SQLITE_CHANGESET_DATA conflict
+ handler, then the conflicting row is either updated or deleted, depending
+ on the type of change.</p>
+
+<p> If CHANGESET_REPLACE is returned by an SQLITE_CHANGESET_CONFLICT conflict
+ handler, then the conflicting row is removed from the database and a
+ second attempt to apply the change is made. If this second attempt fails,
+ the original row is restored to the database before continuing.</p>
+
+<p><dt>SQLITE_CHANGESET_ABORT<dd>
+ If this value is returned, any changes applied so far are rolled back
+ and the call to sqlite3changeset_apply() returns SQLITE_ABORT.
+</dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/c_changeset_conflict.html b/www/session/c_changeset_conflict.html
new file mode 100644
index 0000000..063f212
--- /dev/null
+++ b/www/session/c_changeset_conflict.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Constants Passed To The Conflict Handler</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Constants Passed To The Conflict Handler</h2><blockquote><pre>#define SQLITE_CHANGESET_DATA 1
+#define SQLITE_CHANGESET_NOTFOUND 2
+#define SQLITE_CHANGESET_CONFLICT 3
+#define SQLITE_CHANGESET_CONSTRAINT 4
+#define SQLITE_CHANGESET_FOREIGN_KEY 5
+</pre></blockquote><p>
+Values that may be passed as the second argument to a conflict-handler.</p>
+
+<p><dl>
+<dt>SQLITE_CHANGESET_DATA<dd>
+ The conflict handler is invoked with CHANGESET_DATA as the second argument
+ when processing a DELETE or UPDATE change if a row with the required
+ PRIMARY KEY fields is present in the database, but one or more other
+ (non primary-key) fields modified by the update do not contain the
+ expected "before" values.</p>
+
+<p> The conflicting row, in this case, is the database row with the matching
+ primary key.</p>
+
+<p><dt>SQLITE_CHANGESET_NOTFOUND<dd>
+ The conflict handler is invoked with CHANGESET_NOTFOUND as the second
+ argument when processing a DELETE or UPDATE change if a row with the
+ required PRIMARY KEY fields is not present in the database.</p>
+
+<p> There is no conflicting row in this case. The results of invoking the
+ sqlite3changeset_conflict() API are undefined.</p>
+
+<p><dt>SQLITE_CHANGESET_CONFLICT<dd>
+ CHANGESET_CONFLICT is passed as the second argument to the conflict
+ handler while processing an INSERT change if the operation would result
+ in duplicate primary key values.</p>
+
+<p> The conflicting row in this case is the database row with the matching
+ primary key.</p>
+
+<p><dt>SQLITE_CHANGESET_FOREIGN_KEY<dd>
+ If foreign key handling is enabled, and applying a changeset leaves the
+ database in a state containing foreign key violations, the conflict
+ handler is invoked with CHANGESET_FOREIGN_KEY as the second argument
+ exactly once before the changeset is committed. If the conflict handler
+ returns CHANGESET_OMIT, the changes, including those that caused the
+ foreign key constraint violation, are committed. Or, if it returns
+ CHANGESET_ABORT, the changeset is rolled back.</p>
+
+<p> No current or conflicting row information is provided. The only function
+ it is possible to call on the supplied sqlite3_changeset_iter handle
+ is sqlite3changeset_fk_conflicts().</p>
+
+<p><dt>SQLITE_CHANGESET_CONSTRAINT<dd>
+ If any other constraint violation occurs while applying a change (i.e.
+ a UNIQUE, CHECK or NOT NULL constraint), the conflict handler is
+ invoked with CHANGESET_CONSTRAINT as the second argument.</p>
+
+<p> There is no conflicting row in this case. The results of invoking the
+ sqlite3changeset_conflict() API are undefined.</p>
+
+<p></dl>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/c_changesetapply_invert.html b/www/session/c_changesetapply_invert.html
new file mode 100644
index 0000000..62e93be
--- /dev/null
+++ b/www/session/c_changesetapply_invert.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Flags for sqlite3changeset_apply_v2</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Flags for sqlite3changeset_apply_v2</h2><blockquote><pre>#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001
+#define SQLITE_CHANGESETAPPLY_INVERT 0x0002
+</pre></blockquote><p>
+The following flags may passed via the 9th parameter to
+<a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply_v2</a> and <a href="../session/sqlite3changegroup_add_strm.html">sqlite3changeset_apply_v2_strm</a>:</p>
+
+<p><dl>
+<dt>SQLITE_CHANGESETAPPLY_NOSAVEPOINT <dd>
+ Usually, the sessions module encloses all operations performed by
+ a single call to apply_v2() or apply_v2_strm() in a <a href="../lang_savepoint.html">SAVEPOINT</a>. The
+ SAVEPOINT is committed if the changeset or patchset is successfully
+ applied, or rolled back if an error occurs. Specifying this flag
+ causes the sessions module to omit this savepoint. In this case, if the
+ caller has an open transaction or savepoint when apply_v2() is called,
+ it may revert the partially applied changeset by rolling it back.</p>
+
+<p><dt>SQLITE_CHANGESETAPPLY_INVERT <dd>
+ Invert the changeset before applying it. This is equivalent to inverting
+ a changeset using sqlite3changeset_invert() before applying it. It is
+ an error to specify this flag with a patchset.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/c_changesetstart_invert.html b/www/session/c_changesetstart_invert.html
new file mode 100644
index 0000000..53a41db
--- /dev/null
+++ b/www/session/c_changesetstart_invert.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Flags for sqlite3changeset_start_v2</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Flags for sqlite3changeset_start_v2</h2><blockquote><pre>#define SQLITE_CHANGESETSTART_INVERT 0x0002
+</pre></blockquote><p>
+The following flags may passed via the 4th parameter to
+<a href="../session/sqlite3changeset_start.html">sqlite3changeset_start_v2</a> and <a href="../session/sqlite3changegroup_add_strm.html">sqlite3changeset_start_v2_strm</a>:</p>
+
+<p><dt>SQLITE_CHANGESETAPPLY_INVERT <dd>
+ Invert the changeset while iterating through it. This is equivalent to
+ inverting a changeset using sqlite3changeset_invert() before applying it.
+ It is an error to specify this flag with a patchset.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/c_session_config_strmsize.html b/www/session/c_session_config_strmsize.html
new file mode 100644
index 0000000..45b17df
--- /dev/null
+++ b/www/session/c_session_config_strmsize.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Values for sqlite3session_config().</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Values for sqlite3session_config().</h2><blockquote><pre>#define SQLITE_SESSION_CONFIG_STRMSIZE 1
+</pre></blockquote><p></p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/changegroup.html b/www/session/changegroup.html
new file mode 100644
index 0000000..4bd98fe
--- /dev/null
+++ b/www/session/changegroup.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Changegroup Handle</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Changegroup Handle</h2><blockquote><pre>typedef struct sqlite3_changegroup sqlite3_changegroup;
+</pre></blockquote><p>
+A changegroup is an object used to combine two or more
+<a href="../sessionintro.html#changeset">changesets</a> or <a href="../sessionintro.html#changeset">patchsets</a>
+</p><p>Constructor: <a href="../session/sqlite3changegroup_new.html">sqlite3changegroup_new()</a></p>
+<p>Destructor: <a href="../session/sqlite3changegroup_delete.html">sqlite3changegroup_delete()</a></p>
+<p>Methods:
+ <a href="../session/sqlite3changegroup_add.html">sqlite3changegroup_add()</a>,
+<a href="../session/sqlite3changegroup_output.html">sqlite3changegroup_output()</a></p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/changeset_iter.html b/www/session/changeset_iter.html
new file mode 100644
index 0000000..fe88325
--- /dev/null
+++ b/www/session/changeset_iter.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Changeset Iterator Handle</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Changeset Iterator Handle</h2><blockquote><pre>typedef struct sqlite3_changeset_iter sqlite3_changeset_iter;
+</pre></blockquote><p>
+An instance of this object acts as a cursor for iterating
+over the elements of a <a href="../sessionintro.html#changeset">changeset</a> or <a href="../sessionintro.html#changeset">patchset</a>.
+</p><p>Constructors:
+ <a href="../session/sqlite3changeset_start.html">sqlite3changeset_start()</a>,
+<a href="../session/sqlite3changeset_start.html">sqlite3changeset_start_v2()</a></p>
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../session/sqlite3changeset_conflict.html'>sqlite3changeset_conflict</a></li>
+<li><a href='../session/sqlite3changeset_finalize.html'>sqlite3changeset_finalize</a></li>
+<li><a href='../session/sqlite3changeset_fk_conflicts.html'>sqlite3changeset_fk_conflicts</a></li>
+<li><a href='../session/sqlite3changeset_new.html'>sqlite3changeset_new</a></li>
+<li><a href='../session/sqlite3changeset_next.html'>sqlite3changeset_next</a></li>
+<li><a href='../session/sqlite3changeset_old.html'>sqlite3changeset_old</a></li>
+<li><a href='../session/sqlite3changeset_op.html'>sqlite3changeset_op</a></li>
+<li><a href='../session/sqlite3changeset_pk.html'>sqlite3changeset_pk</a></li>
+</ul>
+</div>
+</p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/constlist.html b/www/session/constlist.html
new file mode 100644
index 0000000..7370652
--- /dev/null
+++ b/www/session/constlist.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>List Of SQLite Constants</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a>
+
+<h2>Constants:</h2>
+<div class='columns' style='columns: 20em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../session/c_changesetapply_invert.html'>SQLITE_CHANGESETAPPLY_INVERT</a></li>
+<li><a href='../session/c_changesetapply_invert.html'>SQLITE_CHANGESETAPPLY_NOSAVEPOINT</a></li>
+<li><a href='../session/c_changesetstart_invert.html'>SQLITE_CHANGESETSTART_INVERT</a></li>
+<li><a href='../session/c_changeset_abort.html'>SQLITE_CHANGESET_ABORT</a></li>
+<li><a href='../session/c_changeset_conflict.html'>SQLITE_CHANGESET_CONFLICT</a></li>
+<li><a href='../session/c_changeset_conflict.html'>SQLITE_CHANGESET_CONSTRAINT</a></li>
+<li><a href='../session/c_changeset_conflict.html'>SQLITE_CHANGESET_DATA</a></li>
+<li><a href='../session/c_changeset_conflict.html'>SQLITE_CHANGESET_FOREIGN_KEY</a></li>
+<li><a href='../session/c_changeset_conflict.html'>SQLITE_CHANGESET_NOTFOUND</a></li>
+<li><a href='../session/c_changeset_abort.html'>SQLITE_CHANGESET_OMIT</a></li>
+<li><a href='../session/c_changeset_abort.html'>SQLITE_CHANGESET_REPLACE</a></li>
+<li><a href='../session/c_session_config_strmsize.html'>SQLITE_SESSION_CONFIG_STRMSIZE</a></li>
+</ul>
+</div>
+<p>Other lists:
+<a href="objlist.html">Objects</a> and
+<a href="funclist.html">Functions</a>.</p>
+
+
diff --git a/www/session/funclist.html b/www/session/funclist.html
new file mode 100644
index 0000000..2311e74
--- /dev/null
+++ b/www/session/funclist.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>List Of SQLite Functions</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a>
+
+<h2>Functions:</h2>
+<div class='columns' style='columns: 15em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../session/sqlite3changegroup_add.html'>sqlite3changegroup_add</a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3changegroup_add_strm</a></li>
+<li><a href='../session/sqlite3changegroup_delete.html'>sqlite3changegroup_delete</a></li>
+<li><a href='../session/sqlite3changegroup_new.html'>sqlite3changegroup_new</a></li>
+<li><a href='../session/sqlite3changegroup_output.html'>sqlite3changegroup_output</a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3changegroup_output_strm</a></li>
+<li><a href='../session/sqlite3changeset_apply.html'>sqlite3changeset_apply</a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3changeset_apply_strm</a></li>
+<li><a href='../session/sqlite3changeset_apply.html'>sqlite3changeset_apply_v2</a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3changeset_apply_v2_strm</a></li>
+<li><a href='../session/sqlite3changeset_concat.html'>sqlite3changeset_concat</a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3changeset_concat_strm</a></li>
+<li><a href='../session/sqlite3changeset_conflict.html'>sqlite3changeset_conflict</a></li>
+<li><a href='../session/sqlite3changeset_finalize.html'>sqlite3changeset_finalize</a></li>
+<li><a href='../session/sqlite3changeset_fk_conflicts.html'>sqlite3changeset_fk_conflicts</a></li>
+<li><a href='../session/sqlite3changeset_invert.html'>sqlite3changeset_invert</a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3changeset_invert_strm</a></li>
+<li><a href='../session/sqlite3changeset_new.html'>sqlite3changeset_new</a></li>
+<li><a href='../session/sqlite3changeset_next.html'>sqlite3changeset_next</a></li>
+<li><a href='../session/sqlite3changeset_old.html'>sqlite3changeset_old</a></li>
+<li><a href='../session/sqlite3changeset_op.html'>sqlite3changeset_op</a></li>
+<li><a href='../session/sqlite3changeset_pk.html'>sqlite3changeset_pk</a></li>
+<li><a href='../session/sqlite3changeset_start.html'>sqlite3changeset_start</a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3changeset_start_strm</a></li>
+<li><a href='../session/sqlite3changeset_start.html'>sqlite3changeset_start_v2</a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3changeset_start_v2_strm</a></li>
+<li><a href='../session/sqlite3rebaser_configure.html'>sqlite3rebaser_configure<small><i>(exp)</i></small></a></li>
+<li><a href='../session/sqlite3rebaser_create.html'>sqlite3rebaser_create<small><i>(exp)</i></small></a></li>
+<li><a href='../session/sqlite3rebaser_delete.html'>sqlite3rebaser_delete<small><i>(exp)</i></small></a></li>
+<li><a href='../session/sqlite3rebaser_rebase.html'>sqlite3rebaser_rebase<small><i>(exp)</i></small></a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3rebaser_rebase_strm</a></li>
+<li><a href='../session/sqlite3session_attach.html'>sqlite3session_attach</a></li>
+<li><a href='../session/sqlite3session_changeset.html'>sqlite3session_changeset</a></li>
+<li><a href='../session/sqlite3session_changeset_size.html'>sqlite3session_changeset_size</a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3session_changeset_strm</a></li>
+<li><a href='../session/sqlite3session_config.html'>sqlite3session_config</a></li>
+<li><a href='../session/sqlite3session_create.html'>sqlite3session_create</a></li>
+<li><a href='../session/sqlite3session_delete.html'>sqlite3session_delete</a></li>
+<li><a href='../session/sqlite3session_diff.html'>sqlite3session_diff</a></li>
+<li><a href='../session/sqlite3session_enable.html'>sqlite3session_enable</a></li>
+<li><a href='../session/sqlite3session_indirect.html'>sqlite3session_indirect</a></li>
+<li><a href='../session/sqlite3session_isempty.html'>sqlite3session_isempty</a></li>
+<li><a href='../session/sqlite3session_memory_used.html'>sqlite3session_memory_used</a></li>
+<li><a href='../session/sqlite3session_patchset.html'>sqlite3session_patchset</a></li>
+<li><a href='../session/sqlite3changegroup_add_strm.html'>sqlite3session_patchset_strm</a></li>
+<li><a href='../session/sqlite3session_table_filter.html'>sqlite3session_table_filter</a></li>
+</ul>
+</div>
+<p>Other lists:
+<a href="constlist.html">Constants</a> and
+<a href="objlist.html">Objects</a>.</p>
+
+
diff --git a/www/session/intro.html b/www/session/intro.html
new file mode 100644
index 0000000..5871778
--- /dev/null
+++ b/www/session/intro.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Introduction</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<p>These pages define the C-language interface for the SQLite
+<a href="../sessionintro.html">session extension</a>.
+This is not a tutorial. These pages are designed to be precise, not
+easy to read. A tutorial is <a href="../sessionintro.html">available separately</a>.
+
+<p>This version of the C-language interface reference is
+broken down into small pages for easy viewing. The
+same content is also available as a
+<a href="../session.html">single large HTML file</a>
+for those who prefer that format.</p>
+
+<p>The content on these pages is extracted from comments
+in the source code.</p>
+
+<p>The interface is broken down into three categories:</p>
+
+<ol>
+<li><p><a href="objlist.html"><b>List Of Objects.</b></a>
+ This is a list of the three abstract objects used by the SQLite session
+ module.
+
+
+<li><p><a href="constlist.html"><b>List Of Constants.</b></a>
+ This is a list of numeric constants used by the SQLite session module
+ and represented by #defines in the sqlite3session.h header file. There
+ are constants passed to conflict handler callbacks to indicate the type
+ of conflict, and constants returned by the conflict handler to indicate
+ how the conflict should be resolved.
+
+<li><p><a href="funclist.html"><b>List Of Functions.</b></a>
+ This is a list of all SQLite session module functions.
+
+</ol>
+
+
+
diff --git a/www/session/objlist.html b/www/session/objlist.html
new file mode 100644
index 0000000..3f43837
--- /dev/null
+++ b/www/session/objlist.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>List Of SQLite Objects</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a>
+
+<h2>Objects:</h2>
+<div class='columns' style='columns: 15em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../session/changegroup.html'>sqlite3_changegroup</a></li>
+<li><a href='../session/changeset_iter.html'>sqlite3_changeset_iter</a></li>
+<li><a href='../session/rebaser.html'>sqlite3_rebaser<small><i>(exp)</i></small></a></li>
+<li><a href='../session/session.html'>sqlite3_session</a></li>
+</ul>
+</div>
+<p>Other lists:
+<a href="constlist.html">Constants</a> and
+<a href="funclist.html">Functions</a>.
+
+
diff --git a/www/session/rebaser.html b/www/session/rebaser.html
new file mode 100644
index 0000000..7788f3d
--- /dev/null
+++ b/www/session/rebaser.html
@@ -0,0 +1,217 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Rebasing changesets</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Rebasing changesets</h2><blockquote><pre>typedef struct sqlite3_rebaser sqlite3_rebaser;
+</pre></blockquote><p><b>Important:</b> This interface is <a href="../c3ref/experimental.html">experimental</a> and is subject to change without notice.</p><p>
+Suppose there is a site hosting a database in state S0. And that
+modifications are made that move that database to state S1 and a
+changeset recorded (the "local" changeset). Then, a changeset based
+on S0 is received from another site (the "remote" changeset) and
+applied to the database. The database is then in state
+(S1+"remote"), where the exact state depends on any conflict
+resolution decisions (OMIT or REPLACE) made while applying "remote".
+Rebasing a changeset is to update it to take those conflict
+resolution decisions into account, so that the same conflicts
+do not have to be resolved elsewhere in the network. </p>
+
+<p>For example, if both the local and remote changesets contain an
+INSERT of the same key on "CREATE TABLE t1(a PRIMARY KEY, b)":</p>
+
+<p> local: INSERT INTO t1 VALUES(1, 'v1');
+ remote: INSERT INTO t1 VALUES(1, 'v2');</p>
+
+<p>and the conflict resolution is REPLACE, then the INSERT change is
+removed from the local changeset (it was overridden). Or, if the
+conflict resolution was "OMIT", then the local changeset is modified
+to instead contain:</p>
+
+<p> UPDATE t1 SET b = 'v2' WHERE a=1;</p>
+
+<p>Changes within the local changeset are rebased as follows:</p>
+
+<p><dl>
+<dt>Local INSERT<dd>
+ This may only conflict with a remote INSERT. If the conflict
+ resolution was OMIT, then add an UPDATE change to the rebased
+ changeset. Or, if the conflict resolution was REPLACE, add
+ nothing to the rebased changeset.</p>
+
+<p><dt>Local DELETE<dd>
+ This may conflict with a remote UPDATE or DELETE. In both cases the
+ only possible resolution is OMIT. If the remote operation was a
+ DELETE, then add no change to the rebased changeset. If the remote
+ operation was an UPDATE, then the old.* fields of change are updated
+ to reflect the new.* values in the UPDATE.</p>
+
+<p><dt>Local UPDATE<dd>
+ This may conflict with a remote UPDATE or DELETE. If it conflicts
+ with a DELETE, and the conflict resolution was OMIT, then the update
+ is changed into an INSERT. Any undefined values in the new.* record
+ from the update change are filled in using the old.* values from
+ the conflicting DELETE. Or, if the conflict resolution was REPLACE,
+ the UPDATE change is simply omitted from the rebased changeset.</p>
+
+<p> If conflict is with a remote UPDATE and the resolution is OMIT, then
+ the old.* values are rebased using the new.* values in the remote
+ change. Or, if the resolution is REPLACE, then the change is copied
+ into the rebased changeset with updates to columns also updated by
+ the conflicting remote UPDATE removed. If this means no columns would
+ be updated, the change is omitted.
+</dl></p>
+
+<p>A local change may be rebased against multiple remote changes
+simultaneously. If a single key is modified by multiple remote
+changesets, they are combined as follows before the local changeset
+is rebased:</p>
+
+<p><ul>
+ <li> If there has been one or more REPLACE resolutions on a
+ key, it is rebased according to a REPLACE.</p>
+
+<p> <li> If there have been no REPLACE resolutions on a key, then
+ the local changeset is rebased according to the most recent
+ of the OMIT resolutions.
+</ul></p>
+
+<p>Note that conflict resolutions from multiple remote changesets are
+combined on a per-field basis, not per-row. This means that in the
+case of multiple remote UPDATE operations, some fields of a single
+local change may be rebased for REPLACE while others are rebased for
+OMIT.</p>
+
+<p>In order to rebase a local changeset, the remote changeset must first
+be applied to the local database using sqlite3changeset_apply_v2() and
+the buffer of rebase information captured. Then:</p>
+
+<p><ol>
+ <li> An sqlite3_rebaser object is created by calling
+ sqlite3rebaser_create().
+ <li> The new object is configured with the rebase buffer obtained from
+ sqlite3changeset_apply_v2() by calling sqlite3rebaser_configure().
+ If the local changeset is to be rebased against multiple remote
+ changesets, then sqlite3rebaser_configure() should be called
+ multiple times, in the same order that the multiple
+ sqlite3changeset_apply_v2() calls were made.
+ <li> Each local changeset is rebased by calling sqlite3rebaser_rebase().
+ <li> The sqlite3_rebaser object is deleted by calling
+ sqlite3rebaser_delete().
+</ol>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/session.html b/www/session/session.html
new file mode 100644
index 0000000..664719d
--- /dev/null
+++ b/www/session/session.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Session Object Handle</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Session Object Handle</h2><blockquote><pre>typedef struct sqlite3_session sqlite3_session;
+</pre></blockquote><p>
+An instance of this object is a <a href="../sessionintro.html">session</a> that can be used to
+record changes to a database.
+</p><p>Constructor: <a href="../session/sqlite3session_create.html">sqlite3session_create()</a></p>
+<p>Destructor: <a href="../session/sqlite3session_delete.html">sqlite3session_delete()</a></p>
+<div class='columns' style='columns: 17em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='../session/sqlite3session_attach.html'>sqlite3session_attach</a></li>
+<li><a href='../session/sqlite3session_changeset.html'>sqlite3session_changeset</a></li>
+<li><a href='../session/sqlite3session_changeset_size.html'>sqlite3session_changeset_size</a></li>
+<li><a href='../session/sqlite3session_diff.html'>sqlite3session_diff</a></li>
+<li><a href='../session/sqlite3session_enable.html'>sqlite3session_enable</a></li>
+<li><a href='../session/sqlite3session_indirect.html'>sqlite3session_indirect</a></li>
+<li><a href='../session/sqlite3session_patchset.html'>sqlite3session_patchset</a></li>
+<li><a href='../session/sqlite3session_table_filter.html'>sqlite3session_table_filter</a></li>
+</ul>
+</div>
+</p>
+<p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changegroup_add.html b/www/session/sqlite3changegroup_add.html
new file mode 100644
index 0000000..cb6f018
--- /dev/null
+++ b/www/session/sqlite3changegroup_add.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Add A Changeset To A Changegroup</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Add A Changeset To A Changegroup</h2><blockquote><pre>int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData);
+</pre></blockquote><p>
+Add all changes within the changeset (or patchset) in buffer pData (size
+nData bytes) to the changegroup. </p>
+
+<p>If the buffer contains a patchset, then all prior calls to this function
+on the same changegroup object must also have specified patchsets. Or, if
+the buffer contains a changeset, so must have the earlier calls to this
+function. Otherwise, SQLITE_ERROR is returned and no changes are added
+to the changegroup.</p>
+
+<p>Rows within the changeset and changegroup are identified by the values in
+their PRIMARY KEY columns. A change in the changeset is considered to
+apply to the same row as a change already present in the changegroup if
+the two rows have the same primary key.</p>
+
+<p>Changes to rows that do not already appear in the changegroup are
+simply copied into it. Or, if both the new changeset and the changegroup
+contain changes that apply to a single row, the final contents of the
+changegroup depends on the type of each change, as follows:</p>
+
+<p><table border=1 style="margin-left:8ex;margin-right:8ex">
+ <tr><th style="white-space:pre">Existing Change </th>
+ <th style="white-space:pre">New Change </th>
+ <th>Output Change
+ <tr><td>INSERT <td>INSERT <td>
+ The new change is ignored. This case does not occur if the new
+ changeset was recorded immediately after the changesets already
+ added to the changegroup.
+ <tr><td>INSERT <td>UPDATE <td>
+ The INSERT change remains in the changegroup. The values in the
+ INSERT change are modified as if the row was inserted by the
+ existing change and then updated according to the new change.
+ <tr><td>INSERT <td>DELETE <td>
+ The existing INSERT is removed from the changegroup. The DELETE is
+ not added.
+ <tr><td>UPDATE <td>INSERT <td>
+ The new change is ignored. This case does not occur if the new
+ changeset was recorded immediately after the changesets already
+ added to the changegroup.
+ <tr><td>UPDATE <td>UPDATE <td>
+ The existing UPDATE remains within the changegroup. It is amended
+ so that the accompanying values are as if the row was updated once
+ by the existing change and then again by the new change.
+ <tr><td>UPDATE <td>DELETE <td>
+ The existing UPDATE is replaced by the new DELETE within the
+ changegroup.
+ <tr><td>DELETE <td>INSERT <td>
+ If one or more of the column values in the row inserted by the
+ new change differ from those in the row deleted by the existing
+ change, the existing DELETE is replaced by an UPDATE within the
+ changegroup. Otherwise, if the inserted row is exactly the same
+ as the deleted row, the existing DELETE is simply discarded.
+ <tr><td>DELETE <td>UPDATE <td>
+ The new change is ignored. This case does not occur if the new
+ changeset was recorded immediately after the changesets already
+ added to the changegroup.
+ <tr><td>DELETE <td>DELETE <td>
+ The new change is ignored. This case does not occur if the new
+ changeset was recorded immediately after the changesets already
+ added to the changegroup.
+</table></p>
+
+<p>If the new changeset contains changes to a table that is already present
+in the changegroup, then the number of columns and the position of the
+primary key columns for the table must be consistent. If this is not the
+case, this function fails with SQLITE_SCHEMA. If the input changeset
+appears to be corrupt and the corruption is detected, SQLITE_CORRUPT is
+returned. Or, if an out-of-memory condition occurs during processing, this
+function returns SQLITE_NOMEM. In all cases, if an error occurs the state
+of the final contents of the changegroup is undefined.</p>
+
+<p>If no error occurs, SQLITE_OK is returned.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changegroup_add_strm.html b/www/session/sqlite3changegroup_add_strm.html
new file mode 100644
index 0000000..0d04941
--- /dev/null
+++ b/www/session/sqlite3changegroup_add_strm.html
@@ -0,0 +1,291 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Streaming Versions of API functions.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Streaming Versions of API functions.</h2><blockquote><pre>int sqlite3changeset_apply_strm(
+ sqlite3 *db, /* Apply change to "main" db of this handle */
+ int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */
+ void *pIn, /* First arg for xInput */
+ int(*xFilter)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ const char *zTab /* Table name */
+ ),
+ int(*xConflict)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */
+ sqlite3_changeset_iter *p /* Handle describing change and conflict */
+ ),
+ void *pCtx /* First argument passed to xConflict */
+);
+int sqlite3changeset_apply_v2_strm(
+ sqlite3 *db, /* Apply change to "main" db of this handle */
+ int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */
+ void *pIn, /* First arg for xInput */
+ int(*xFilter)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ const char *zTab /* Table name */
+ ),
+ int(*xConflict)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */
+ sqlite3_changeset_iter *p /* Handle describing change and conflict */
+ ),
+ void *pCtx, /* First argument passed to xConflict */
+ void **ppRebase, int *pnRebase,
+ int flags
+);
+int sqlite3changeset_concat_strm(
+ int (*xInputA)(void *pIn, void *pData, int *pnData),
+ void *pInA,
+ int (*xInputB)(void *pIn, void *pData, int *pnData),
+ void *pInB,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+int sqlite3changeset_invert_strm(
+ int (*xInput)(void *pIn, void *pData, int *pnData),
+ void *pIn,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+int sqlite3changeset_start_strm(
+ sqlite3_changeset_iter **pp,
+ int (*xInput)(void *pIn, void *pData, int *pnData),
+ void *pIn
+);
+int sqlite3changeset_start_v2_strm(
+ sqlite3_changeset_iter **pp,
+ int (*xInput)(void *pIn, void *pData, int *pnData),
+ void *pIn,
+ int flags
+);
+int sqlite3session_changeset_strm(
+ sqlite3_session *pSession,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+int sqlite3session_patchset_strm(
+ sqlite3_session *pSession,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+int sqlite3changegroup_add_strm(sqlite3_changegroup*,
+ int (*xInput)(void *pIn, void *pData, int *pnData),
+ void *pIn
+);
+int sqlite3changegroup_output_strm(sqlite3_changegroup*,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+int sqlite3rebaser_rebase_strm(
+ sqlite3_rebaser *pRebaser,
+ int (*xInput)(void *pIn, void *pData, int *pnData),
+ void *pIn,
+ int (*xOutput)(void *pOut, const void *pData, int nData),
+ void *pOut
+);
+</pre></blockquote><p>
+The six streaming API xxx_strm() functions serve similar purposes to the
+corresponding non-streaming API functions:</p>
+
+<p><table border=1 style="margin-left:8ex;margin-right:8ex">
+ <tr><th>Streaming function<th>Non-streaming equivalent</th>
+ <tr><td>sqlite3changeset_apply_strm<td><a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply</a>
+ <tr><td>sqlite3changeset_apply_strm_v2<td><a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply_v2</a>
+ <tr><td>sqlite3changeset_concat_strm<td><a href="../session/sqlite3changeset_concat.html">sqlite3changeset_concat</a>
+ <tr><td>sqlite3changeset_invert_strm<td><a href="../session/sqlite3changeset_invert.html">sqlite3changeset_invert</a>
+ <tr><td>sqlite3changeset_start_strm<td><a href="../session/sqlite3changeset_start.html">sqlite3changeset_start</a>
+ <tr><td>sqlite3session_changeset_strm<td><a href="../session/sqlite3session_changeset.html">sqlite3session_changeset</a>
+ <tr><td>sqlite3session_patchset_strm<td><a href="../session/sqlite3session_patchset.html">sqlite3session_patchset</a>
+</table></p>
+
+<p>Non-streaming functions that accept changesets (or patchsets) as input
+require that the entire changeset be stored in a single buffer in memory.
+Similarly, those that return a changeset or patchset do so by returning
+a pointer to a single large buffer allocated using sqlite3_malloc().
+Normally this is convenient. However, if an application running in a
+low-memory environment is required to handle very large changesets, the
+large contiguous memory allocations required can become onerous.</p>
+
+<p>In order to avoid this problem, instead of a single large buffer, input
+is passed to a streaming API functions by way of a callback function that
+the sessions module invokes to incrementally request input data as it is
+required. In all cases, a pair of API function parameters such as</p>
+
+<p> <pre>
+ &nbsp; int nChangeset,
+ &nbsp; void *pChangeset,
+ </pre></p>
+
+<p>Is replaced by:</p>
+
+<p> <pre>
+ &nbsp; int (*xInput)(void *pIn, void *pData, int *pnData),
+ &nbsp; void *pIn,
+ </pre></p>
+
+<p>Each time the xInput callback is invoked by the sessions module, the first
+argument passed is a copy of the supplied pIn context pointer. The second
+argument, pData, points to a buffer (*pnData) bytes in size. Assuming no
+error occurs the xInput method should copy up to (*pnData) bytes of data
+into the buffer and set (*pnData) to the actual number of bytes copied
+before returning SQLITE_OK. If the input is completely exhausted, (*pnData)
+should be set to zero to indicate this. Or, if an error occurs, an SQLite
+error code should be returned. In all cases, if an xInput callback returns
+an error, all processing is abandoned and the streaming API function
+returns a copy of the error code to the caller.</p>
+
+<p>In the case of sqlite3changeset_start_strm(), the xInput callback may be
+invoked by the sessions module at any point during the lifetime of the
+iterator. If such an xInput callback returns an error, the iterator enters
+an error state, whereby all subsequent calls to iterator functions
+immediately fail with the same error code as returned by xInput.</p>
+
+<p>Similarly, streaming API functions that return changesets (or patchsets)
+return them in chunks by way of a callback function instead of via a
+pointer to a single large buffer. In this case, a pair of parameters such
+as:</p>
+
+<p> <pre>
+ &nbsp; int *pnChangeset,
+ &nbsp; void **ppChangeset,
+ </pre></p>
+
+<p>Is replaced by:</p>
+
+<p> <pre>
+ &nbsp; int (*xOutput)(void *pOut, const void *pData, int nData),
+ &nbsp; void *pOut
+ </pre></p>
+
+<p>The xOutput callback is invoked zero or more times to return data to
+the application. The first parameter passed to each call is a copy of the
+pOut pointer supplied by the application. The second parameter, pData,
+points to a buffer nData bytes in size containing the chunk of output
+data being returned. If the xOutput callback successfully processes the
+supplied data, it should return SQLITE_OK to indicate success. Otherwise,
+it should return some other SQLite error code. In this case processing
+is immediately abandoned and the streaming API function returns a copy
+of the xOutput error code to the application.</p>
+
+<p>The sessions module never invokes an xOutput callback with the third
+parameter set to a value less than or equal to zero. Other than this,
+no guarantees are made as to the size of the chunks of data returned.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changegroup_delete.html b/www/session/sqlite3changegroup_delete.html
new file mode 100644
index 0000000..1134e7a
--- /dev/null
+++ b/www/session/sqlite3changegroup_delete.html
@@ -0,0 +1,123 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Delete A Changegroup Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Delete A Changegroup Object</h2><blockquote><pre>void sqlite3changegroup_delete(sqlite3_changegroup*);
+</pre></blockquote><p></p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changegroup_new.html b/www/session/sqlite3changegroup_new.html
new file mode 100644
index 0000000..2b2c724
--- /dev/null
+++ b/www/session/sqlite3changegroup_new.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Create A New Changegroup Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Create A New Changegroup Object</h2><blockquote><pre>int sqlite3changegroup_new(sqlite3_changegroup **pp);
+</pre></blockquote><p>
+An sqlite3_changegroup object is used to combine two or more changesets
+(or patchsets) into a single changeset (or patchset). A single changegroup
+object may combine changesets or patchsets, but not both. The output is
+always in the same format as the input.</p>
+
+<p>If successful, this function returns SQLITE_OK and populates (*pp) with
+a pointer to a new sqlite3_changegroup object before returning. The caller
+should eventually free the returned object using a call to
+sqlite3changegroup_delete(). If an error occurs, an SQLite error code
+(i.e. SQLITE_NOMEM) is returned and *pp is set to NULL.</p>
+
+<p>The usual usage pattern for an sqlite3_changegroup object is as follows:</p>
+
+<p><ul>
+ <li> It is created using a call to sqlite3changegroup_new().</p>
+
+<p> <li> Zero or more changesets (or patchsets) are added to the object
+ by calling sqlite3changegroup_add().</p>
+
+<p> <li> The result of combining all input changesets together is obtained
+ by the application via a call to sqlite3changegroup_output().</p>
+
+<p> <li> The object is deleted using a call to sqlite3changegroup_delete().
+</ul></p>
+
+<p>Any number of calls to add() and output() may be made between the calls to
+new() and delete(), and in any order.</p>
+
+<p>As well as the regular sqlite3changegroup_add() and
+sqlite3changegroup_output() functions, also available are the streaming
+versions sqlite3changegroup_add_strm() and sqlite3changegroup_output_strm().
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changegroup_output.html b/www/session/sqlite3changegroup_output.html
new file mode 100644
index 0000000..5cea844
--- /dev/null
+++ b/www/session/sqlite3changegroup_output.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Obtain A Composite Changeset From A Changegroup</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Obtain A Composite Changeset From A Changegroup</h2><blockquote><pre>int sqlite3changegroup_output(
+ sqlite3_changegroup*,
+ int *pnData, /* OUT: Size of output buffer in bytes */
+ void **ppData /* OUT: Pointer to output buffer */
+);
+</pre></blockquote><p>
+Obtain a buffer containing a changeset (or patchset) representing the
+current contents of the changegroup. If the inputs to the changegroup
+were themselves changesets, the output is a changeset. Or, if the
+inputs were patchsets, the output is also a patchset.</p>
+
+<p>As with the output of the sqlite3session_changeset() and
+sqlite3session_patchset() functions, all changes related to a single
+table are grouped together in the output of this function. Tables appear
+in the same order as for the very first changeset added to the changegroup.
+If the second or subsequent changesets added to the changegroup contain
+changes for tables that do not appear in the first changeset, they are
+appended onto the end of the output changeset, again in the order in
+which they are first encountered.</p>
+
+<p>If an error occurs, an SQLite error code is returned and the output
+variables (*pnData) and (*ppData) are set to 0. Otherwise, SQLITE_OK
+is returned and the output variables are set to the size of and a
+pointer to the output buffer, respectively. In this case it is the
+responsibility of the caller to eventually free the buffer using a
+call to sqlite3_free().
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_apply.html b/www/session/sqlite3changeset_apply.html
new file mode 100644
index 0000000..ca95e9d
--- /dev/null
+++ b/www/session/sqlite3changeset_apply.html
@@ -0,0 +1,309 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Apply A Changeset To A Database</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Apply A Changeset To A Database</h2><blockquote><pre>int sqlite3changeset_apply(
+ sqlite3 *db, /* Apply change to "main" db of this handle */
+ int nChangeset, /* Size of changeset in bytes */
+ void *pChangeset, /* Changeset blob */
+ int(*xFilter)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ const char *zTab /* Table name */
+ ),
+ int(*xConflict)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */
+ sqlite3_changeset_iter *p /* Handle describing change and conflict */
+ ),
+ void *pCtx /* First argument passed to xConflict */
+);
+int sqlite3changeset_apply_v2(
+ sqlite3 *db, /* Apply change to "main" db of this handle */
+ int nChangeset, /* Size of changeset in bytes */
+ void *pChangeset, /* Changeset blob */
+ int(*xFilter)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ const char *zTab /* Table name */
+ ),
+ int(*xConflict)(
+ void *pCtx, /* Copy of sixth arg to _apply() */
+ int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */
+ sqlite3_changeset_iter *p /* Handle describing change and conflict */
+ ),
+ void *pCtx, /* First argument passed to xConflict */
+ void **ppRebase, int *pnRebase, /* OUT: Rebase data */
+ int flags /* SESSION_CHANGESETAPPLY_* flags */
+);
+</pre></blockquote><p>
+Apply a changeset or patchset to a database. These functions attempt to
+update the "main" database attached to handle db with the changes found in
+the changeset passed via the second and third arguments. </p>
+
+<p>The fourth argument (xFilter) passed to these functions is the "filter
+callback". If it is not NULL, then for each table affected by at least one
+change in the changeset, the filter callback is invoked with
+the table name as the second argument, and a copy of the context pointer
+passed as the sixth argument as the first. If the "filter callback"
+returns zero, then no attempt is made to apply any changes to the table.
+Otherwise, if the return value is non-zero or the xFilter argument to
+is NULL, all changes related to the table are attempted.</p>
+
+<p>For each table that is not excluded by the filter callback, this function
+tests that the target database contains a compatible table. A table is
+considered compatible if all of the following are true:</p>
+
+<p><ul>
+ <li> The table has the same name as the name recorded in the
+ changeset, and
+ <li> The table has at least as many columns as recorded in the
+ changeset, and
+ <li> The table has primary key columns in the same position as
+ recorded in the changeset.
+</ul></p>
+
+<p>If there is no compatible table, it is not an error, but none of the
+changes associated with the table are applied. A warning message is issued
+via the sqlite3_log() mechanism with the error code SQLITE_SCHEMA. At most
+one such warning is issued for each table in the changeset.</p>
+
+<p>For each change for which there is a compatible table, an attempt is made
+to modify the table contents according to the UPDATE, INSERT or DELETE
+change. If a change cannot be applied cleanly, the conflict handler
+function passed as the fifth argument to sqlite3changeset_apply() may be
+invoked. A description of exactly when the conflict handler is invoked for
+each type of change is below.</p>
+
+<p>Unlike the xFilter argument, xConflict may not be passed NULL. The results
+of passing anything other than a valid function pointer as the xConflict
+argument are undefined.</p>
+
+<p>Each time the conflict handler function is invoked, it must return one
+of <a href="../session/c_changeset_abort.html">SQLITE_CHANGESET_OMIT</a>, <a href="../session/c_changeset_abort.html">SQLITE_CHANGESET_ABORT</a> or
+<a href="../session/c_changeset_abort.html">SQLITE_CHANGESET_REPLACE</a>. SQLITE_CHANGESET_REPLACE may only be returned
+if the second argument passed to the conflict handler is either
+SQLITE_CHANGESET_DATA or SQLITE_CHANGESET_CONFLICT. If the conflict-handler
+returns an illegal value, any changes already made are rolled back and
+the call to sqlite3changeset_apply() returns SQLITE_MISUSE. Different
+actions are taken by sqlite3changeset_apply() depending on the value
+returned by each invocation of the conflict-handler function. Refer to
+the documentation for the three
+<a href="../session/c_changeset_abort.html">available return values</a> for details.</p>
+
+<p><dl>
+<dt>DELETE Changes<dd>
+ For each DELETE change, the function checks if the target database
+ contains a row with the same primary key value (or values) as the
+ original row values stored in the changeset. If it does, and the values
+ stored in all non-primary key columns also match the values stored in
+ the changeset the row is deleted from the target database.</p>
+
+<p> If a row with matching primary key values is found, but one or more of
+ the non-primary key fields contains a value different from the original
+ row value stored in the changeset, the conflict-handler function is
+ invoked with <a href="../session/c_changeset_conflict.html">SQLITE_CHANGESET_DATA</a> as the second argument. If the
+ database table has more columns than are recorded in the changeset,
+ only the values of those non-primary key fields are compared against
+ the current database contents - any trailing database table columns
+ are ignored.</p>
+
+<p> If no row with matching primary key values is found in the database,
+ the conflict-handler function is invoked with <a href="../session/c_changeset_conflict.html">SQLITE_CHANGESET_NOTFOUND</a>
+ passed as the second argument.</p>
+
+<p> If the DELETE operation is attempted, but SQLite returns SQLITE_CONSTRAINT
+ (which can only happen if a foreign key constraint is violated), the
+ conflict-handler function is invoked with <a href="../session/c_changeset_conflict.html">SQLITE_CHANGESET_CONSTRAINT</a>
+ passed as the second argument. This includes the case where the DELETE
+ operation is attempted because an earlier call to the conflict handler
+ function returned <a href="../session/c_changeset_abort.html">SQLITE_CHANGESET_REPLACE</a>.</p>
+
+<p><dt>INSERT Changes<dd>
+ For each INSERT change, an attempt is made to insert the new row into
+ the database. If the changeset row contains fewer fields than the
+ database table, the trailing fields are populated with their default
+ values.</p>
+
+<p> If the attempt to insert the row fails because the database already
+ contains a row with the same primary key values, the conflict handler
+ function is invoked with the second argument set to
+ <a href="../session/c_changeset_conflict.html">SQLITE_CHANGESET_CONFLICT</a>.</p>
+
+<p> If the attempt to insert the row fails because of some other constraint
+ violation (e.g. NOT NULL or UNIQUE), the conflict handler function is
+ invoked with the second argument set to <a href="../session/c_changeset_conflict.html">SQLITE_CHANGESET_CONSTRAINT</a>.
+ This includes the case where the INSERT operation is re-attempted because
+ an earlier call to the conflict handler function returned
+ <a href="../session/c_changeset_abort.html">SQLITE_CHANGESET_REPLACE</a>.</p>
+
+<p><dt>UPDATE Changes<dd>
+ For each UPDATE change, the function checks if the target database
+ contains a row with the same primary key value (or values) as the
+ original row values stored in the changeset. If it does, and the values
+ stored in all modified non-primary key columns also match the values
+ stored in the changeset the row is updated within the target database.</p>
+
+<p> If a row with matching primary key values is found, but one or more of
+ the modified non-primary key fields contains a value different from an
+ original row value stored in the changeset, the conflict-handler function
+ is invoked with <a href="../session/c_changeset_conflict.html">SQLITE_CHANGESET_DATA</a> as the second argument. Since
+ UPDATE changes only contain values for non-primary key fields that are
+ to be modified, only those fields need to match the original values to
+ avoid the SQLITE_CHANGESET_DATA conflict-handler callback.</p>
+
+<p> If no row with matching primary key values is found in the database,
+ the conflict-handler function is invoked with <a href="../session/c_changeset_conflict.html">SQLITE_CHANGESET_NOTFOUND</a>
+ passed as the second argument.</p>
+
+<p> If the UPDATE operation is attempted, but SQLite returns
+ SQLITE_CONSTRAINT, the conflict-handler function is invoked with
+ <a href="../session/c_changeset_conflict.html">SQLITE_CHANGESET_CONSTRAINT</a> passed as the second argument.
+ This includes the case where the UPDATE operation is attempted after
+ an earlier call to the conflict handler function returned
+ <a href="../session/c_changeset_abort.html">SQLITE_CHANGESET_REPLACE</a>.
+</dl></p>
+
+<p>It is safe to execute SQL statements, including those that write to the
+table that the callback related to, from within the xConflict callback.
+This can be used to further customize the application's conflict
+resolution strategy.</p>
+
+<p>All changes made by these functions are enclosed in a savepoint transaction.
+If any other error (aside from a constraint failure when attempting to
+write to the target database) occurs, then the savepoint transaction is
+rolled back, restoring the target database to its original state, and an
+SQLite error code returned.</p>
+
+<p>If the output parameters (ppRebase) and (pnRebase) are non-NULL and
+the input is a changeset (not a patchset), then sqlite3changeset_apply_v2()
+may set (*ppRebase) to point to a "rebase" that may be used with the
+sqlite3_rebaser APIs buffer before returning. In this case (*pnRebase)
+is set to the size of the buffer in bytes. It is the responsibility of the
+caller to eventually free any such buffer using sqlite3_free(). The buffer
+is only allocated and populated if one or more conflicts were encountered
+while applying the patchset. See comments surrounding the sqlite3_rebaser
+APIs for further details.</p>
+
+<p>The behavior of sqlite3changeset_apply_v2() and its streaming equivalent
+may be modified by passing a combination of
+<a href="../session/c_changesetapply_invert.html">supported flags</a> as the 9th parameter.</p>
+
+<p>Note that the sqlite3changeset_apply_v2() API is still <b>experimental</b>
+and therefore subject to change.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_concat.html b/www/session/sqlite3changeset_concat.html
new file mode 100644
index 0000000..569b136
--- /dev/null
+++ b/www/session/sqlite3changeset_concat.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Concatenate Two Changeset Objects</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Concatenate Two Changeset Objects</h2><blockquote><pre>int sqlite3changeset_concat(
+ int nA, /* Number of bytes in buffer pA */
+ void *pA, /* Pointer to buffer containing changeset A */
+ int nB, /* Number of bytes in buffer pB */
+ void *pB, /* Pointer to buffer containing changeset B */
+ int *pnOut, /* OUT: Number of bytes in output changeset */
+ void **ppOut /* OUT: Buffer containing output changeset */
+);
+</pre></blockquote><p>
+This function is used to concatenate two changesets, A and B, into a
+single changeset. The result is a changeset equivalent to applying
+changeset A followed by changeset B. </p>
+
+<p>This function combines the two input changesets using an
+sqlite3_changegroup object. Calling it produces similar results as the
+following code fragment:</p>
+
+<p><pre>
+ sqlite3_changegroup *pGrp;
+ rc = sqlite3_changegroup_new(&pGrp);
+ if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nA, pA);
+ if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nB, pB);
+ if( rc==SQLITE_OK ){
+ rc = sqlite3changegroup_output(pGrp, pnOut, ppOut);
+ }else{
+ *ppOut = 0;
+ *pnOut = 0;
+ }
+</pre></p>
+
+<p>Refer to the sqlite3_changegroup documentation below for details.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_conflict.html b/www/session/sqlite3changeset_conflict.html
new file mode 100644
index 0000000..080ca8a
--- /dev/null
+++ b/www/session/sqlite3changeset_conflict.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Obtain Conflicting Row Values From A Changeset Iterator</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Obtain Conflicting Row Values From A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_conflict(
+ sqlite3_changeset_iter *pIter, /* Changeset iterator */
+ int iVal, /* Column number */
+ sqlite3_value **ppValue /* OUT: Value from conflicting row */
+);
+</pre></blockquote><p>
+This function should only be used with iterator objects passed to a
+conflict-handler callback by <a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a> with either
+<a href="../session/c_changeset_conflict.html">SQLITE_CHANGESET_DATA</a> or <a href="../session/c_changeset_conflict.html">SQLITE_CHANGESET_CONFLICT</a>. If this function
+is called on any other iterator, <a href="../rescode.html#misuse">SQLITE_MISUSE</a> is returned and *ppValue
+is set to NULL.</p>
+
+<p>Argument iVal must be greater than or equal to 0, and less than the number
+of columns in the table affected by the current change. Otherwise,
+<a href="../rescode.html#range">SQLITE_RANGE</a> is returned and *ppValue is set to NULL.</p>
+
+<p>If successful, this function sets *ppValue to point to a protected
+sqlite3_value object containing the iVal'th value from the
+"conflicting row" associated with the current conflict-handler callback
+and returns SQLITE_OK.</p>
+
+<p>If some other error occurs (e.g. an OOM condition), an SQLite error code
+is returned and *ppValue is set to NULL.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_finalize.html b/www/session/sqlite3changeset_finalize.html
new file mode 100644
index 0000000..6a08745
--- /dev/null
+++ b/www/session/sqlite3changeset_finalize.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Finalize A Changeset Iterator</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Finalize A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter);
+</pre></blockquote><p>
+This function is used to finalize an iterator allocated with
+<a href="../session/sqlite3changeset_start.html">sqlite3changeset_start()</a>.</p>
+
+<p>This function should only be called on iterators created using the
+<a href="../session/sqlite3changeset_start.html">sqlite3changeset_start()</a> function. If an application calls this
+function with an iterator passed to a conflict-handler by
+<a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a>, <a href="../rescode.html#misuse">SQLITE_MISUSE</a> is immediately returned and the
+call has no effect.</p>
+
+<p>If an error was encountered within a call to an sqlite3changeset_xxx()
+function (for example an <a href="../rescode.html#corrupt">SQLITE_CORRUPT</a> in <a href="../session/sqlite3changeset_next.html">sqlite3changeset_next()</a> or an
+<a href="../rescode.html#nomem">SQLITE_NOMEM</a> in <a href="../session/sqlite3changeset_new.html">sqlite3changeset_new()</a>) then an error code corresponding
+to that error is returned by this function. Otherwise, SQLITE_OK is
+returned. This is to allow the following pattern (pseudo-code):</p>
+
+<p><pre>
+ sqlite3changeset_start();
+ while( SQLITE_ROW==sqlite3changeset_next() ){
+ // Do something with change.
+ }
+ rc = sqlite3changeset_finalize();
+ if( rc!=SQLITE_OK ){
+ // An error has occurred
+ }
+</pre>
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_fk_conflicts.html b/www/session/sqlite3changeset_fk_conflicts.html
new file mode 100644
index 0000000..e61d9f1
--- /dev/null
+++ b/www/session/sqlite3changeset_fk_conflicts.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Determine The Number Of Foreign Key Constraint Violations</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Determine The Number Of Foreign Key Constraint Violations</h2><blockquote><pre>int sqlite3changeset_fk_conflicts(
+ sqlite3_changeset_iter *pIter, /* Changeset iterator */
+ int *pnOut /* OUT: Number of FK violations */
+);
+</pre></blockquote><p>
+This function may only be called with an iterator passed to an
+SQLITE_CHANGESET_FOREIGN_KEY conflict handler callback. In this case
+it sets the output variable to the total number of known foreign key
+violations in the destination database and returns SQLITE_OK.</p>
+
+<p>In all other cases this function returns SQLITE_MISUSE.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_invert.html b/www/session/sqlite3changeset_invert.html
new file mode 100644
index 0000000..8efb2f5
--- /dev/null
+++ b/www/session/sqlite3changeset_invert.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Invert A Changeset</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Invert A Changeset</h2><blockquote><pre>int sqlite3changeset_invert(
+ int nIn, const void *pIn, /* Input changeset */
+ int *pnOut, void **ppOut /* OUT: Inverse of input */
+);
+</pre></blockquote><p>
+This function is used to "invert" a changeset object. Applying an inverted
+changeset to a database reverses the effects of applying the uninverted
+changeset. Specifically:</p>
+
+<p><ul>
+ <li> Each DELETE change is changed to an INSERT, and
+ <li> Each INSERT change is changed to a DELETE, and
+ <li> For each UPDATE change, the old.* and new.* values are exchanged.
+</ul></p>
+
+<p>This function does not change the order in which changes appear within
+the changeset. It merely reverses the sense of each individual change.</p>
+
+<p>If successful, a pointer to a buffer containing the inverted changeset
+is stored in *ppOut, the size of the same buffer is stored in *pnOut, and
+SQLITE_OK is returned. If an error occurs, both *pnOut and *ppOut are
+zeroed and an SQLite error code returned.</p>
+
+<p>It is the responsibility of the caller to eventually call sqlite3_free()
+on the *ppOut pointer to free the buffer allocation following a successful
+call to this function.</p>
+
+<p>WARNING/TODO: This function currently assumes that the input is a valid
+changeset. If it is not, the results are undefined.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_new.html b/www/session/sqlite3changeset_new.html
new file mode 100644
index 0000000..4514b69
--- /dev/null
+++ b/www/session/sqlite3changeset_new.html
@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Obtain new.* Values From A Changeset Iterator</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Obtain new.* Values From A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_new(
+ sqlite3_changeset_iter *pIter, /* Changeset iterator */
+ int iVal, /* Column number */
+ sqlite3_value **ppValue /* OUT: New value (or NULL pointer) */
+);
+</pre></blockquote><p>
+The pIter argument passed to this function may either be an iterator
+passed to a conflict-handler by <a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a>, or an iterator
+created by <a href="../session/sqlite3changeset_start.html">sqlite3changeset_start()</a>. In the latter case, the most recent
+call to <a href="../session/sqlite3changeset_next.html">sqlite3changeset_next()</a> must have returned SQLITE_ROW.
+Furthermore, it may only be called if the type of change that the iterator
+currently points to is either <a href="../c3ref/c_alter_table.html">SQLITE_UPDATE</a> or <a href="../c3ref/c_alter_table.html">SQLITE_INSERT</a>. Otherwise,
+this function returns <a href="../rescode.html#misuse">SQLITE_MISUSE</a> and sets *ppValue to NULL.</p>
+
+<p>Argument iVal must be greater than or equal to 0, and less than the number
+of columns in the table affected by the current change. Otherwise,
+<a href="../rescode.html#range">SQLITE_RANGE</a> is returned and *ppValue is set to NULL.</p>
+
+<p>If successful, this function sets *ppValue to point to a protected
+sqlite3_value object containing the iVal'th value from the vector of
+new row values stored as part of the UPDATE or INSERT change and
+returns SQLITE_OK. If the change is an UPDATE and does not include
+a new value for the requested column, *ppValue is set to NULL and
+SQLITE_OK returned. The name of the function comes from the fact that
+this is similar to the "new.*" columns available to update or delete
+triggers.</p>
+
+<p>If some other error occurs (e.g. an OOM condition), an SQLite error code
+is returned and *ppValue is set to NULL.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_next.html b/www/session/sqlite3changeset_next.html
new file mode 100644
index 0000000..18dd351
--- /dev/null
+++ b/www/session/sqlite3changeset_next.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Advance A Changeset Iterator</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Advance A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_next(sqlite3_changeset_iter *pIter);
+</pre></blockquote><p>
+This function may only be used with iterators created by the function
+<a href="../session/sqlite3changeset_start.html">sqlite3changeset_start()</a>. If it is called on an iterator passed to
+a conflict-handler callback by <a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a>, SQLITE_MISUSE
+is returned and the call has no effect.</p>
+
+<p>Immediately after an iterator is created by sqlite3changeset_start(), it
+does not point to any change in the changeset. Assuming the changeset
+is not empty, the first call to this function advances the iterator to
+point to the first change in the changeset. Each subsequent call advances
+the iterator to point to the next change in the changeset (if any). If
+no error occurs and the iterator points to a valid change after a call
+to sqlite3changeset_next() has advanced it, SQLITE_ROW is returned.
+Otherwise, if all changes in the changeset have already been visited,
+SQLITE_DONE is returned.</p>
+
+<p>If an error occurs, an SQLite error code is returned. Possible error
+codes include SQLITE_CORRUPT (if the changeset buffer is corrupt) or
+SQLITE_NOMEM.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_old.html b/www/session/sqlite3changeset_old.html
new file mode 100644
index 0000000..83c7d4b
--- /dev/null
+++ b/www/session/sqlite3changeset_old.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Obtain old.* Values From A Changeset Iterator</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Obtain old.* Values From A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_old(
+ sqlite3_changeset_iter *pIter, /* Changeset iterator */
+ int iVal, /* Column number */
+ sqlite3_value **ppValue /* OUT: Old value (or NULL pointer) */
+);
+</pre></blockquote><p>
+The pIter argument passed to this function may either be an iterator
+passed to a conflict-handler by <a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a>, or an iterator
+created by <a href="../session/sqlite3changeset_start.html">sqlite3changeset_start()</a>. In the latter case, the most recent
+call to <a href="../session/sqlite3changeset_next.html">sqlite3changeset_next()</a> must have returned SQLITE_ROW.
+Furthermore, it may only be called if the type of change that the iterator
+currently points to is either <a href="../c3ref/c_alter_table.html">SQLITE_DELETE</a> or <a href="../c3ref/c_alter_table.html">SQLITE_UPDATE</a>. Otherwise,
+this function returns <a href="../rescode.html#misuse">SQLITE_MISUSE</a> and sets *ppValue to NULL.</p>
+
+<p>Argument iVal must be greater than or equal to 0, and less than the number
+of columns in the table affected by the current change. Otherwise,
+<a href="../rescode.html#range">SQLITE_RANGE</a> is returned and *ppValue is set to NULL.</p>
+
+<p>If successful, this function sets *ppValue to point to a protected
+sqlite3_value object containing the iVal'th value from the vector of
+original row values stored as part of the UPDATE or DELETE change and
+returns SQLITE_OK. The name of the function comes from the fact that this
+is similar to the "old.*" columns available to update or delete triggers.</p>
+
+<p>If some other error occurs (e.g. an OOM condition), an SQLite error code
+is returned and *ppValue is set to NULL.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_op.html b/www/session/sqlite3changeset_op.html
new file mode 100644
index 0000000..ee12396
--- /dev/null
+++ b/www/session/sqlite3changeset_op.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Obtain The Current Operation From A Changeset Iterator</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Obtain The Current Operation From A Changeset Iterator</h2><blockquote><pre>int sqlite3changeset_op(
+ sqlite3_changeset_iter *pIter, /* Iterator object */
+ const char **pzTab, /* OUT: Pointer to table name */
+ int *pnCol, /* OUT: Number of columns in table */
+ int *pOp, /* OUT: SQLITE_INSERT, DELETE or UPDATE */
+ int *pbIndirect /* OUT: True for an 'indirect' change */
+);
+</pre></blockquote><p>
+The pIter argument passed to this function may either be an iterator
+passed to a conflict-handler by <a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a>, or an iterator
+created by <a href="../session/sqlite3changeset_start.html">sqlite3changeset_start()</a>. In the latter case, the most recent
+call to <a href="../session/sqlite3changeset_next.html">sqlite3changeset_next()</a> must have returned <a href="../rescode.html#row">SQLITE_ROW</a>. If this
+is not the case, this function returns <a href="../rescode.html#misuse">SQLITE_MISUSE</a>.</p>
+
+<p>Arguments pOp, pnCol and pzTab may not be NULL. Upon return, three
+outputs are set through these pointers: </p>
+
+<p>*pOp is set to one of <a href="../c3ref/c_alter_table.html">SQLITE_INSERT</a>, <a href="../c3ref/c_alter_table.html">SQLITE_DELETE</a> or <a href="../c3ref/c_alter_table.html">SQLITE_UPDATE</a>,
+depending on the type of change that the iterator currently points to;</p>
+
+<p>*pnCol is set to the number of columns in the table affected by the change; and</p>
+
+<p>*pzTab is set to point to a nul-terminated utf-8 encoded string containing
+the name of the table affected by the current change. The buffer remains
+valid until either sqlite3changeset_next() is called on the iterator
+or until the conflict-handler function returns.</p>
+
+<p>If pbIndirect is not NULL, then *pbIndirect is set to true (1) if the change
+is an indirect change, or false (0) otherwise. See the documentation for
+<a href="../session/sqlite3session_indirect.html">sqlite3session_indirect()</a> for a description of direct and indirect
+changes.</p>
+
+<p>If no error occurs, SQLITE_OK is returned. If an error does occur, an
+SQLite error code is returned. The values of the output variables may not
+be trusted in this case.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_pk.html b/www/session/sqlite3changeset_pk.html
new file mode 100644
index 0000000..bc7162b
--- /dev/null
+++ b/www/session/sqlite3changeset_pk.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Obtain The Primary Key Definition Of A Table</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Obtain The Primary Key Definition Of A Table</h2><blockquote><pre>int sqlite3changeset_pk(
+ sqlite3_changeset_iter *pIter, /* Iterator object */
+ unsigned char **pabPK, /* OUT: Array of boolean - true for PK cols */
+ int *pnCol /* OUT: Number of entries in output array */
+);
+</pre></blockquote><p>
+For each modified table, a changeset includes the following:</p>
+
+<p><ul>
+ <li> The number of columns in the table, and
+ <li> Which of those columns make up the tables PRIMARY KEY.
+</ul></p>
+
+<p>This function is used to find which columns comprise the PRIMARY KEY of
+the table modified by the change that iterator pIter currently points to.
+If successful, *pabPK is set to point to an array of nCol entries, where
+nCol is the number of columns in the table. Elements of *pabPK are set to
+0x01 if the corresponding column is part of the tables primary key, or
+0x00 if it is not.</p>
+
+<p>If argument pnCol is not NULL, then *pnCol is set to the number of columns
+in the table.</p>
+
+<p>If this function is called when the iterator does not point to a valid
+entry, SQLITE_MISUSE is returned and the output variables zeroed. Otherwise,
+SQLITE_OK is returned and the output variables populated as described
+above.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3changeset_start.html b/www/session/sqlite3changeset_start.html
new file mode 100644
index 0000000..2a0fc4e
--- /dev/null
+++ b/www/session/sqlite3changeset_start.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Create An Iterator To Traverse A Changeset </title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Create An Iterator To Traverse A Changeset </h2><blockquote><pre>int sqlite3changeset_start(
+ sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */
+ int nChangeset, /* Size of changeset blob in bytes */
+ void *pChangeset /* Pointer to blob containing changeset */
+);
+int sqlite3changeset_start_v2(
+ sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */
+ int nChangeset, /* Size of changeset blob in bytes */
+ void *pChangeset, /* Pointer to blob containing changeset */
+ int flags /* SESSION_CHANGESETSTART_* flags */
+);
+</pre></blockquote><p>
+Create an iterator used to iterate through the contents of a changeset.
+If successful, *pp is set to point to the iterator handle and SQLITE_OK
+is returned. Otherwise, if an error occurs, *pp is set to zero and an
+SQLite error code is returned.</p>
+
+<p>The following functions can be used to advance and query a changeset
+iterator created by this function:</p>
+
+<p><ul>
+ <li> <a href="../session/sqlite3changeset_next.html">sqlite3changeset_next()</a>
+ <li> <a href="../session/sqlite3changeset_op.html">sqlite3changeset_op()</a>
+ <li> <a href="../session/sqlite3changeset_new.html">sqlite3changeset_new()</a>
+ <li> <a href="../session/sqlite3changeset_old.html">sqlite3changeset_old()</a>
+</ul></p>
+
+<p>It is the responsibility of the caller to eventually destroy the iterator
+by passing it to <a href="../session/sqlite3changeset_finalize.html">sqlite3changeset_finalize()</a>. The buffer containing the
+changeset (pChangeset) must remain valid until after the iterator is
+destroyed.</p>
+
+<p>Assuming the changeset blob was created by one of the
+<a href="../session/sqlite3session_changeset.html">sqlite3session_changeset()</a>, <a href="../session/sqlite3changeset_concat.html">sqlite3changeset_concat()</a> or
+<a href="../session/sqlite3changeset_invert.html">sqlite3changeset_invert()</a> functions, all changes within the changeset
+that apply to a single table are grouped together. This means that when
+an application iterates through a changeset using an iterator created by
+this function, all changes that relate to a single table are visited
+consecutively. There is no chance that the iterator will visit a change
+the applies to table X, then one for table Y, and then later on visit
+another change for table X.</p>
+
+<p>The behavior of sqlite3changeset_start_v2() and its streaming equivalent
+may be modified by passing a combination of
+<a href="../session/c_changesetstart_invert.html">supported flags</a> as the 4th parameter.</p>
+
+<p>Note that the sqlite3changeset_start_v2() API is still <b>experimental</b>
+and therefore subject to change.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3rebaser_configure.html b/www/session/sqlite3rebaser_configure.html
new file mode 100644
index 0000000..09212d2
--- /dev/null
+++ b/www/session/sqlite3rebaser_configure.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Configure a changeset rebaser object.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Configure a changeset rebaser object.</h2><blockquote><pre>int sqlite3rebaser_configure(
+ sqlite3_rebaser*,
+ int nRebase, const void *pRebase
+);
+</pre></blockquote><p><b>Important:</b> This interface is <a href="../c3ref/experimental.html">experimental</a> and is subject to change without notice.</p><p>
+Configure the changeset rebaser object to rebase changesets according
+to the conflict resolutions described by buffer pRebase (size nRebase
+bytes), which must have been obtained from a previous call to
+sqlite3changeset_apply_v2().
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3rebaser_create.html b/www/session/sqlite3rebaser_create.html
new file mode 100644
index 0000000..4944f47
--- /dev/null
+++ b/www/session/sqlite3rebaser_create.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Create a changeset rebaser object.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Create a changeset rebaser object.</h2><blockquote><pre>int sqlite3rebaser_create(sqlite3_rebaser **ppNew);
+</pre></blockquote><p><b>Important:</b> This interface is <a href="../c3ref/experimental.html">experimental</a> and is subject to change without notice.</p><p>
+Allocate a new changeset rebaser object. If successful, set (*ppNew) to
+point to the new object and return SQLITE_OK. Otherwise, if an error
+occurs, return an SQLite error code (e.g. SQLITE_NOMEM) and set (*ppNew)
+to NULL.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3rebaser_delete.html b/www/session/sqlite3rebaser_delete.html
new file mode 100644
index 0000000..7bbe064
--- /dev/null
+++ b/www/session/sqlite3rebaser_delete.html
@@ -0,0 +1,127 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Delete a changeset rebaser object.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Delete a changeset rebaser object.</h2><blockquote><pre>void sqlite3rebaser_delete(sqlite3_rebaser *p);
+</pre></blockquote><p><b>Important:</b> This interface is <a href="../c3ref/experimental.html">experimental</a> and is subject to change without notice.</p><p>
+Delete the changeset rebaser object and all associated resources. There
+should be one call to this function for each successful invocation
+of sqlite3rebaser_create().
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3rebaser_rebase.html b/www/session/sqlite3rebaser_rebase.html
new file mode 100644
index 0000000..ad2bdb3
--- /dev/null
+++ b/www/session/sqlite3rebaser_rebase.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Rebase a changeset</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Rebase a changeset</h2><blockquote><pre>int sqlite3rebaser_rebase(
+ sqlite3_rebaser*,
+ int nIn, const void *pIn,
+ int *pnOut, void **ppOut
+);
+</pre></blockquote><p><b>Important:</b> This interface is <a href="../c3ref/experimental.html">experimental</a> and is subject to change without notice.</p><p>
+Argument pIn must point to a buffer containing a changeset nIn bytes
+in size. This function allocates and populates a buffer with a copy
+of the changeset rebased according to the configuration of the
+rebaser object passed as the first argument. If successful, (*ppOut)
+is set to point to the new buffer containing the rebased changeset and
+(*pnOut) to its size in bytes and SQLITE_OK returned. It is the
+responsibility of the caller to eventually free the new buffer using
+sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut)
+are set to zero and an SQLite error code returned.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_attach.html b/www/session/sqlite3session_attach.html
new file mode 100644
index 0000000..25a2303
--- /dev/null
+++ b/www/session/sqlite3session_attach.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Attach A Table To A Session Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Attach A Table To A Session Object</h2><blockquote><pre>int sqlite3session_attach(
+ sqlite3_session *pSession, /* Session object */
+ const char *zTab /* Table name */
+);
+</pre></blockquote><p>
+If argument zTab is not NULL, then it is the name of a table to attach
+to the session object passed as the first argument. All subsequent changes
+made to the table while the session object is enabled will be recorded. See
+documentation for <a href="../session/sqlite3session_changeset.html">sqlite3session_changeset()</a> for further details.</p>
+
+<p>Or, if argument zTab is NULL, then changes are recorded for all tables
+in the database. If additional tables are added to the database (by
+executing "CREATE TABLE" statements) after this call is made, changes for
+the new tables are also recorded.</p>
+
+<p>Changes can only be recorded for tables that have a PRIMARY KEY explicitly
+defined as part of their CREATE TABLE statement. It does not matter if the
+PRIMARY KEY is an "INTEGER PRIMARY KEY" (rowid alias) or not. The PRIMARY
+KEY may consist of a single column, or may be a composite key.</p>
+
+<p>It is not an error if the named table does not exist in the database. Nor
+is it an error if the named table does not have a PRIMARY KEY. However,
+no changes will be recorded in either of these scenarios.</p>
+
+<p>Changes are not recorded for individual rows that have NULL values stored
+in one or more of their PRIMARY KEY columns.</p>
+
+<p>SQLITE_OK is returned if the call completes without error. Or, if an error
+occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned.</p>
+
+<p><h3>Special sqlite_stat1 Handling</h3></p>
+
+<p>As of SQLite version 3.22.0, the "sqlite_stat1" table is an exception to
+some of the rules above. In SQLite, the schema of sqlite_stat1 is:
+ <pre>
+ &nbsp; CREATE TABLE sqlite_stat1(tbl,idx,stat)
+ </pre></p>
+
+<p>Even though sqlite_stat1 does not have a PRIMARY KEY, changes are
+recorded for it as if the PRIMARY KEY is (tbl,idx). Additionally, changes
+are recorded for rows for which (idx IS NULL) is true. However, for such
+rows a zero-length blob (SQL value X'') is stored in the changeset or
+patchset instead of a NULL value. This allows such changesets to be
+manipulated by legacy implementations of sqlite3changeset_invert(),
+concat() and similar.</p>
+
+<p>The sqlite3changeset_apply() function automatically converts the
+zero-length blob back to a NULL value when updating the sqlite_stat1
+table. However, if the application calls sqlite3changeset_new(),
+sqlite3changeset_old() or sqlite3changeset_conflict on a changeset
+iterator directly (including on a changeset iterator passed to a
+conflict-handler callback) then the X'' value is returned. The application
+must translate X'' to NULL itself if required.</p>
+
+<p>Legacy (older than 3.22.0) versions of the sessions module cannot capture
+changes made to the sqlite_stat1 table. Legacy versions of the
+sqlite3changeset_apply() function silently ignore any modifications to the
+sqlite_stat1 table that are part of a changeset or patchset.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_changeset.html b/www/session/sqlite3session_changeset.html
new file mode 100644
index 0000000..729ca8e
--- /dev/null
+++ b/www/session/sqlite3session_changeset.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Generate A Changeset From A Session Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Generate A Changeset From A Session Object</h2><blockquote><pre>int sqlite3session_changeset(
+ sqlite3_session *pSession, /* Session object */
+ int *pnChangeset, /* OUT: Size of buffer at *ppChangeset */
+ void **ppChangeset /* OUT: Buffer containing changeset */
+);
+</pre></blockquote><p>
+Obtain a changeset containing changes to the tables attached to the
+session object passed as the first argument. If successful,
+set *ppChangeset to point to a buffer containing the changeset
+and *pnChangeset to the size of the changeset in bytes before returning
+SQLITE_OK. If an error occurs, set both *ppChangeset and *pnChangeset to
+zero and return an SQLite error code.</p>
+
+<p>A changeset consists of zero or more INSERT, UPDATE and/or DELETE changes,
+each representing a change to a single row of an attached table. An INSERT
+change contains the values of each field of a new database row. A DELETE
+contains the original values of each field of a deleted database row. An
+UPDATE change contains the original values of each field of an updated
+database row along with the updated values for each updated non-primary-key
+column. It is not possible for an UPDATE change to represent a change that
+modifies the values of primary key columns. If such a change is made, it
+is represented in a changeset as a DELETE followed by an INSERT.</p>
+
+<p>Changes are not recorded for rows that have NULL values stored in one or
+more of their PRIMARY KEY columns. If such a row is inserted or deleted,
+no corresponding change is present in the changesets returned by this
+function. If an existing row with one or more NULL values stored in
+PRIMARY KEY columns is updated so that all PRIMARY KEY columns are non-NULL,
+only an INSERT is appears in the changeset. Similarly, if an existing row
+with non-NULL PRIMARY KEY values is updated so that one or more of its
+PRIMARY KEY columns are set to NULL, the resulting changeset contains a
+DELETE change only.</p>
+
+<p>The contents of a changeset may be traversed using an iterator created
+using the <a href="../session/sqlite3changeset_start.html">sqlite3changeset_start()</a> API. A changeset may be applied to
+a database with a compatible schema using the <a href="../session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a>
+API.</p>
+
+<p>Within a changeset generated by this function, all changes related to a
+single table are grouped together. In other words, when iterating through
+a changeset or when applying a changeset to a database, all changes related
+to a single table are processed before moving on to the next table. Tables
+are sorted in the same order in which they were attached (or auto-attached)
+to the sqlite3_session object. The order in which the changes related to
+a single table are stored is undefined.</p>
+
+<p>Following a successful call to this function, it is the responsibility of
+the caller to eventually free the buffer that *ppChangeset points to using
+<a href="../c3ref/free.html">sqlite3_free()</a>.</p>
+
+<p><h3>Changeset Generation</h3></p>
+
+<p>Once a table has been attached to a session object, the session object
+records the primary key values of all new rows inserted into the table.
+It also records the original primary key and other column values of any
+deleted or updated rows. For each unique primary key value, data is only
+recorded once - the first time a row with said primary key is inserted,
+updated or deleted in the lifetime of the session.</p>
+
+<p>There is one exception to the previous paragraph: when a row is inserted,
+updated or deleted, if one or more of its primary key columns contain a
+NULL value, no record of the change is made.</p>
+
+<p>The session object therefore accumulates two types of records - those
+that consist of primary key values only (created when the user inserts
+a new record) and those that consist of the primary key values and the
+original values of other table columns (created when the users deletes
+or updates a record).</p>
+
+<p>When this function is called, the requested changeset is created using
+both the accumulated records and the current contents of the database
+file. Specifically:</p>
+
+<p><ul>
+ <li> For each record generated by an insert, the database is queried
+ for a row with a matching primary key. If one is found, an INSERT
+ change is added to the changeset. If no such row is found, no change
+ is added to the changeset.</p>
+
+<p> <li> For each record generated by an update or delete, the database is
+ queried for a row with a matching primary key. If such a row is
+ found and one or more of the non-primary key fields have been
+ modified from their original values, an UPDATE change is added to
+ the changeset. Or, if no such row is found in the table, a DELETE
+ change is added to the changeset. If there is a row with a matching
+ primary key in the database, but all fields contain their original
+ values, no change is added to the changeset.
+</ul></p>
+
+<p>This means, amongst other things, that if a row is inserted and then later
+deleted while a session object is active, neither the insert nor the delete
+will be present in the changeset. Or if a row is deleted and then later a
+row with the same primary key values inserted while a session object is
+active, the resulting changeset will contain an UPDATE change instead of
+a DELETE and an INSERT.</p>
+
+<p>When a session object is disabled (see the <a href="../session/sqlite3session_enable.html">sqlite3session_enable()</a> API),
+it does not accumulate records when rows are inserted, updated or deleted.
+This may appear to have some counter-intuitive effects if a single row
+is written to more than once during a session. For example, if a row
+is inserted while a session object is enabled, then later deleted while
+the same session object is disabled, no INSERT record will appear in the
+changeset, even though the delete took place while the session was disabled.
+Or, if one field of a row is updated while a session is disabled, and
+another field of the same row is updated while the session is enabled, the
+resulting changeset will contain an UPDATE change that updates both fields.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_changeset_size.html b/www/session/sqlite3session_changeset_size.html
new file mode 100644
index 0000000..719df80
--- /dev/null
+++ b/www/session/sqlite3session_changeset_size.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Return An Upper-limit For The Size Of The Changeset</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Return An Upper-limit For The Size Of The Changeset</h2><blockquote><pre>sqlite3_int64 sqlite3session_changeset_size(sqlite3_session *pSession);
+</pre></blockquote><p>
+By default, this function always returns 0. For it to return
+a useful result, the sqlite3_session object must have been configured
+to enable this API using sqlite3session_object_config() with the
+SQLITE_SESSION_OBJCONFIG_SIZE verb.</p>
+
+<p>When enabled, this function returns an upper limit, in bytes, for the size
+of the changeset that might be produced if sqlite3session_changeset() were
+called. The final changeset size might be equal to or smaller than the
+size in bytes returned by this function.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_config.html b/www/session/sqlite3session_config.html
new file mode 100644
index 0000000..3f9a9bb
--- /dev/null
+++ b/www/session/sqlite3session_config.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Configure global parameters</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Configure global parameters</h2><blockquote><pre>int sqlite3session_config(int op, void *pArg);
+</pre></blockquote><p>
+The sqlite3session_config() interface is used to make global configuration
+changes to the sessions module in order to tune it to the specific needs
+of the application.</p>
+
+<p>The sqlite3session_config() interface is not threadsafe. If it is invoked
+while any other thread is inside any other sessions method then the
+results are undefined. Furthermore, if it is invoked after any sessions
+related objects have been created, the results are also undefined. </p>
+
+<p>The first argument to the sqlite3session_config() function must be one
+of the SQLITE_SESSION_CONFIG_XXX constants defined below. The
+interpretation of the (void*) value passed as the second parameter and
+the effect of calling this function depends on the value of the first
+parameter.</p>
+
+<p><dl>
+<dt>SQLITE_SESSION_CONFIG_STRMSIZE<dd>
+ By default, the sessions module streaming interfaces attempt to input
+ and output data in approximately 1 KiB chunks. This operand may be used
+ to set and query the value of this configuration setting. The pointer
+ passed as the second argument must point to a value of type (int).
+ If this value is greater than 0, it is used as the new streaming data
+ chunk size for both input and output. Before returning, the (int) value
+ pointed to by pArg is set to the final value of the streaming interface
+ chunk size.
+</dl></p>
+
+<p>This function returns SQLITE_OK if successful, or an SQLite error code
+otherwise.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_create.html b/www/session/sqlite3session_create.html
new file mode 100644
index 0000000..8755501
--- /dev/null
+++ b/www/session/sqlite3session_create.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Create A New Session Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Create A New Session Object</h2><blockquote><pre>int sqlite3session_create(
+ sqlite3 *db, /* Database handle */
+ const char *zDb, /* Name of db (e.g. "main") */
+ sqlite3_session **ppSession /* OUT: New session object */
+);
+</pre></blockquote><p>
+Create a new session object attached to database handle db. If successful,
+a pointer to the new object is written to *ppSession and SQLITE_OK is
+returned. If an error occurs, *ppSession is set to NULL and an SQLite
+error code (e.g. SQLITE_NOMEM) is returned.</p>
+
+<p>It is possible to create multiple session objects attached to a single
+database handle.</p>
+
+<p>Session objects created using this function should be deleted using the
+<a href="../session/sqlite3session_delete.html">sqlite3session_delete()</a> function before the database handle that they
+are attached to is itself closed. If the database handle is closed before
+the session object is deleted, then the results of calling any session
+module function, including <a href="../session/sqlite3session_delete.html">sqlite3session_delete()</a> on the session object
+are undefined.</p>
+
+<p>Because the session module uses the <a href="../c3ref/preupdate_blobwrite.html">sqlite3_preupdate_hook()</a> API, it
+is not possible for an application to register a pre-update hook on a
+database handle that has one or more session objects attached. Nor is
+it possible to create a session object attached to a database handle for
+which a pre-update hook is already defined. The results of attempting
+either of these things are undefined.</p>
+
+<p>The session object will be used to create changesets for tables in
+database zDb, where zDb is either "main", or "temp", or the name of an
+attached database. It is not an error if database zDb is not attached
+to the database when the session object is created.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_delete.html b/www/session/sqlite3session_delete.html
new file mode 100644
index 0000000..4fece3e
--- /dev/null
+++ b/www/session/sqlite3session_delete.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Delete A Session Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Delete A Session Object</h2><blockquote><pre>void sqlite3session_delete(sqlite3_session *pSession);
+</pre></blockquote><p>
+Delete a session object previously allocated using
+<a href="../session/sqlite3session_create.html">sqlite3session_create()</a>. Once a session object has been deleted, the
+results of attempting to use pSession with any other session module
+function are undefined.</p>
+
+<p>Session objects must be deleted before the database handle to which they
+are attached is closed. Refer to the documentation for
+<a href="../session/sqlite3session_create.html">sqlite3session_create()</a> for details.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_diff.html b/www/session/sqlite3session_diff.html
new file mode 100644
index 0000000..cb4e478
--- /dev/null
+++ b/www/session/sqlite3session_diff.html
@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Load The Difference Between Tables Into A Session</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Load The Difference Between Tables Into A Session</h2><blockquote><pre>int sqlite3session_diff(
+ sqlite3_session *pSession,
+ const char *zFromDb,
+ const char *zTbl,
+ char **pzErrMsg
+);
+</pre></blockquote><p>
+If it is not already attached to the session object passed as the first
+argument, this function attaches table zTbl in the same manner as the
+<a href="../session/sqlite3session_attach.html">sqlite3session_attach()</a> function. If zTbl does not exist, or if it
+does not have a primary key, this function is a no-op (but does not return
+an error).</p>
+
+<p>Argument zFromDb must be the name of a database ("main", "temp" etc.)
+attached to the same database handle as the session object that contains
+a table compatible with the table attached to the session by this function.
+A table is considered compatible if it:</p>
+
+<p><ul>
+ <li> Has the same name,
+ <li> Has the same set of columns declared in the same order, and
+ <li> Has the same PRIMARY KEY definition.
+</ul></p>
+
+<p>If the tables are not compatible, SQLITE_SCHEMA is returned. If the tables
+are compatible but do not have any PRIMARY KEY columns, it is not an error
+but no changes are added to the session object. As with other session
+APIs, tables without PRIMARY KEYs are simply ignored.</p>
+
+<p>This function adds a set of changes to the session object that could be
+used to update the table in database zFrom (call this the "from-table")
+so that its content is the same as the table attached to the session
+object (call this the "to-table"). Specifically:</p>
+
+<p><ul>
+ <li> For each row (primary key) that exists in the to-table but not in
+ the from-table, an INSERT record is added to the session object.</p>
+
+<p> <li> For each row (primary key) that exists in the to-table but not in
+ the from-table, a DELETE record is added to the session object.</p>
+
+<p> <li> For each row (primary key) that exists in both tables, but features
+ different non-PK values in each, an UPDATE record is added to the
+ session.
+</ul></p>
+
+<p>To clarify, if this function is called and then a changeset constructed
+using <a href="../session/sqlite3session_changeset.html">sqlite3session_changeset()</a>, then after applying that changeset to
+database zFrom the contents of the two compatible tables would be
+identical.</p>
+
+<p>It an error if database zFrom does not exist or does not contain the
+required compatible table.</p>
+
+<p>If the operation is successful, SQLITE_OK is returned. Otherwise, an SQLite
+error code. In this case, if argument pzErrMsg is not NULL, *pzErrMsg
+may be set to point to a buffer containing an English language error
+message. It is the responsibility of the caller to free this buffer using
+sqlite3_free().
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_enable.html b/www/session/sqlite3session_enable.html
new file mode 100644
index 0000000..2454a35
--- /dev/null
+++ b/www/session/sqlite3session_enable.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Enable Or Disable A Session Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Enable Or Disable A Session Object</h2><blockquote><pre>int sqlite3session_enable(sqlite3_session *pSession, int bEnable);
+</pre></blockquote><p>
+Enable or disable the recording of changes by a session object. When
+enabled, a session object records changes made to the database. When
+disabled - it does not. A newly created session object is enabled.
+Refer to the documentation for <a href="../session/sqlite3session_changeset.html">sqlite3session_changeset()</a> for further
+details regarding how enabling and disabling a session object affects
+the eventual changesets.</p>
+
+<p>Passing zero to this function disables the session. Passing a value
+greater than zero enables it. Passing a value less than zero is a
+no-op, and may be used to query the current state of the session.</p>
+
+<p>The return value indicates the final state of the session object: 0 if
+the session is disabled, or 1 if it is enabled.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_indirect.html b/www/session/sqlite3session_indirect.html
new file mode 100644
index 0000000..0d4022b
--- /dev/null
+++ b/www/session/sqlite3session_indirect.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Set Or Clear the Indirect Change Flag</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Set Or Clear the Indirect Change Flag</h2><blockquote><pre>int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect);
+</pre></blockquote><p>
+Each change recorded by a session object is marked as either direct or
+indirect. A change is marked as indirect if either:</p>
+
+<p><ul>
+ <li> The session object "indirect" flag is set when the change is
+ made, or
+ <li> The change is made by an SQL trigger or foreign key action
+ instead of directly as a result of a users SQL statement.
+</ul></p>
+
+<p>If a single row is affected by more than one operation within a session,
+then the change is considered indirect if all operations meet the criteria
+for an indirect change above, or direct otherwise.</p>
+
+<p>This function is used to set, clear or query the session object indirect
+flag. If the second argument passed to this function is zero, then the
+indirect flag is cleared. If it is greater than zero, the indirect flag
+is set. Passing a value less than zero does not modify the current value
+of the indirect flag, and may be used to query the current state of the
+indirect flag for the specified session object.</p>
+
+<p>The return value indicates the final state of the indirect flag: 0 if
+it is clear, or 1 if it is set.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_isempty.html b/www/session/sqlite3session_isempty.html
new file mode 100644
index 0000000..2762f9c
--- /dev/null
+++ b/www/session/sqlite3session_isempty.html
@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Test if a changeset has recorded any changes.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Test if a changeset has recorded any changes.</h2><blockquote><pre>int sqlite3session_isempty(sqlite3_session *pSession);
+</pre></blockquote><p>
+Return non-zero if no changes to attached tables have been recorded by
+the session object passed as the first argument. Otherwise, if one or
+more changes have been recorded, return zero.</p>
+
+<p>Even if this function returns zero, it is possible that calling
+<a href="../session/sqlite3session_changeset.html">sqlite3session_changeset()</a> on the session handle may still return a
+changeset that contains no changes. This can happen when a row in
+an attached table is modified and then later on the original values
+are restored. However, if this function returns non-zero, then it is
+guaranteed that a call to sqlite3session_changeset() will return a
+changeset containing zero changes.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_memory_used.html b/www/session/sqlite3session_memory_used.html
new file mode 100644
index 0000000..04c1f53
--- /dev/null
+++ b/www/session/sqlite3session_memory_used.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Query for the amount of heap memory used by a session object.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Query for the amount of heap memory used by a session object.</h2><blockquote><pre>sqlite3_int64 sqlite3session_memory_used(sqlite3_session *pSession);
+</pre></blockquote><p>
+This API returns the total amount of heap memory in bytes currently
+used by the session object passed as the only argument.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_patchset.html b/www/session/sqlite3session_patchset.html
new file mode 100644
index 0000000..a7acd25
--- /dev/null
+++ b/www/session/sqlite3session_patchset.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Generate A Patchset From A Session Object</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Generate A Patchset From A Session Object</h2><blockquote><pre>int sqlite3session_patchset(
+ sqlite3_session *pSession, /* Session object */
+ int *pnPatchset, /* OUT: Size of buffer at *ppPatchset */
+ void **ppPatchset /* OUT: Buffer containing patchset */
+);
+</pre></blockquote><p>
+The differences between a patchset and a changeset are that:</p>
+
+<p><ul>
+ <li> DELETE records consist of the primary key fields only. The
+ original values of other fields are omitted.
+ <li> The original values of any modified fields are omitted from
+ UPDATE records.
+</ul></p>
+
+<p>A patchset blob may be used with up to date versions of all
+sqlite3changeset_xxx API functions except for sqlite3changeset_invert(),
+which returns SQLITE_CORRUPT if it is passed a patchset. Similarly,
+attempting to use a patchset blob with old versions of the
+sqlite3changeset_xxx APIs also provokes an SQLITE_CORRUPT error. </p>
+
+<p>Because the non-primary key "old.*" fields are omitted, no
+SQLITE_CHANGESET_DATA conflicts can be detected or reported if a patchset
+is passed to the sqlite3changeset_apply() API. Other conflict types work
+in the same way as for changesets.</p>
+
+<p>Changes within a patchset are ordered in the same way as for changesets
+generated by the sqlite3session_changeset() function (i.e. all changes for
+a single table are grouped together, tables appear in the order in which
+they were attached to the session object).
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/session/sqlite3session_table_filter.html b/www/session/sqlite3session_table_filter.html
new file mode 100644
index 0000000..331b9c2
--- /dev/null
+++ b/www/session/sqlite3session_table_filter.html
@@ -0,0 +1,136 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>Set a table filter on a Session Object.</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<a href="intro.html"><h2>Session Module C Interface</h2></a><h2>Set a table filter on a Session Object.</h2><blockquote><pre>void sqlite3session_table_filter(
+ sqlite3_session *pSession, /* Session object */
+ int(*xFilter)(
+ void *pCtx, /* Copy of third arg to _filter_table() */
+ const char *zTab /* Table name */
+ ),
+ void *pCtx /* First argument passed to xFilter */
+);
+</pre></blockquote><p>
+The second argument (xFilter) is the "filter callback". For changes to rows
+in tables that are not attached to the Session object, the filter is called
+to determine whether changes to the table's rows should be tracked or not.
+If xFilter returns 0, changes are not tracked. Note that once a table is
+attached, xFilter will not be called again.
+</p><p>See also lists of
+ <a href="objlist.html">Objects</a>,
+ <a href="constlist.html">Constants</a>, and
+ <a href="funclist.html">Functions</a>.</p>
+
diff --git a/www/sessionintro.html b/www/sessionintro.html
new file mode 100644
index 0000000..a2994d5
--- /dev/null
+++ b/www/sessionintro.html
@@ -0,0 +1,649 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Session Extension</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Session Extension
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc2"><a href="#typical_use_case">1.1. Typical Use Case</a></div>
+<div class="fancy-toc2"><a href="#obtaining_the_session_extension">1.2. Obtaining the Session Extension</a></div>
+<div class="fancy-toc2"><a href="#limitations">1.3. Limitations</a></div>
+<div class="fancy-toc1"><a href="#concepts">2. Concepts</a></div>
+<div class="fancy-toc2"><a href="#changesets_and_patchsets">2.1. Changesets and Patchsets</a></div>
+<div class="fancy-toc2"><a href="#conflicts">2.2. Conflicts</a></div>
+<div class="fancy-toc2"><a href="#changeset_construction">2.3. Changeset Construction</a></div>
+<div class="fancy-toc1"><a href="#using_the_session_extension">3. Using The Session Extension</a></div>
+<div class="fancy-toc2"><a href="#capturing_a_changeset">3.1. Capturing a Changeset</a></div>
+<div class="fancy-toc2"><a href="#applying_a_changeset_to_a_database">3.2. Applying a Changeset to a Database</a></div>
+<div class="fancy-toc2"><a href="#inspecting_the_contents_of_a_changeset">3.3. Inspecting the Contents of a Changeset</a></div>
+<div class="fancy-toc1"><a href="#extended_functionality">4. Extended Functionality</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>The session extension provide a mechanism for recording changes
+to some or all of the <a href="rowidtable.html">rowid tables</a> in an SQLite database, and packaging
+those changes into a "changeset" or "patchset" file that can later
+be used to apply the same set of changes to another database with
+the same schema and compatible starting data. A "changeset" may
+also be inverted and used to "undo" a session.
+
+</p><p>This document is an introduction to the session extension.
+The details of the interface are in the separate
+<a href="session/intro.html">Session Extension C-language Interface</a> document.
+
+</p><h2 id="typical_use_case"><span>1.1. </span>Typical Use Case</h2>
+
+<p>Suppose SQLite is used as the <a href="appfileformat.html">application file format</a> for a
+particular design application. Two users, Alice and Bob, each start
+with a baseline design that is about a gigabyte in size. They work
+all day, in parallel, each making their own customizations and tweaks
+to the design. At the end of the day, they would like to merge their
+changes together into a single unified design.
+
+</p><p>The session extension facilitates this by recording all changes to
+both Alice's and Bob's databases and writing those changes into
+changeset or patchset files. At the end of the day, Alice can send her
+changeset to Bob and Bob can "apply" it to his database. The result (assuming
+there are no conflicts) is that Bob's database then contains both his
+changes and Alice's changes. Likewise, Bob can send a changeset of
+his work over to Alice and she can apply his changes to her database.
+
+</p><p>In other words, the session extension provides a facility for
+SQLite database files that is similar to the unix
+<a href="https://en.wikipedia.org/wiki/Patch_(Unix)">patch</a> utility program,
+or to the "merge" capabilities of version control systems such
+as <a href="https://www.fossil-scm.org/">Fossil</a>, <a href="https://git-scm.com">Git</a>,
+or <a href="http://www.mercurial-scm.org/">Mercurial</a>.
+
+</p><h2 id="obtaining_the_session_extension"><span>1.2. </span>Obtaining the Session Extension</h2>
+
+<p> Since <a href="releaselog/3_13_0.html">version 3.13.0</a> (2016-05-18),
+the session extension has been included in the SQLite
+<a href="amalgamation.html">amalgamation</a> source distribution. By default, the session extension is
+disabled. To enable it, build with the following compiler switches:
+
+</p><div class="codeblock"><pre>-DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK
+</pre></div>
+
+<p> Or, if using the autoconf build system, pass the --enable-session option to the configure script.
+
+</p><h2 id="limitations"><span>1.3. </span>Limitations</h2>
+
+<ul>
+
+<li><p> Prior to SQLite version 3.17.0, the session extension only worked with
+ <a href="rowidtable.html">rowid tables</a>, not <a href="withoutrowid.html">WITHOUT ROWID</a> tables. As of 3.17.0, both
+ rowid and WITHOUT ROWID tables are supported.
+
+</p></li><li><p> There is no support for <a href="vtab.html">virtual tables</a>. Changes to virtual tables are
+ not captured.
+
+</p></li><li><p> The session extension only works with tables that have a declared
+ PRIMARY KEY. The PRIMARY KEY of a table may be an INTEGER PRIMARY KEY
+ (rowid alias) or an external PRIMARY KEY.
+
+</p></li><li><p> SQLite allows <a href="nulls.html">NULL values</a> to be stored in
+ PRIMARY KEY columns. However, the session extension ignores all
+ such rows. No changes affecting rows with one or more NULL values
+ in PRIMARY KEY columns are recorded by the sessions module.
+</p></li></ul>
+
+<h1 id="concepts"><span>2. </span>Concepts</h1>
+
+<a name="changeset"></a>
+
+<h2 id="changesets_and_patchsets"><span>2.1. </span>Changesets and Patchsets</h2>
+<p> The sessions module revolves around creating and manipulating
+changesets. A changeset is a blob of data that encodes a series of
+changes to a database. Each change in a changeset is one of the
+following:
+
+</p><ul>
+ <li> <p>An <b>INSERT</b>. An INSERT change contains a single row to add to
+ a database table. The payload of the INSERT change consists of the
+ values for each field of the new row.
+
+ </p></li><li> <p>A <b>DELETE</b>. A DELETE change represents a row, identified by
+ its primary key values, to remove from a database table. The payload
+ of a DELETE change consists of the values for all fields of the
+ deleted row.
+
+ </p></li><li> <p>An <b>UPDATE</b>. An UPDATE change represents the modification of
+ one or more non-PRIMARY KEY fields of a single row within a database
+ table, identified by its PRIMARY KEY fields. The payload for an UPDATE
+ change consists of:
+ </p><ul>
+ <li> The PRIMARY KEY values identifying the modified row,
+ </li><li> The new values for each modified field of the row, and
+ </li><li> The original values for each modified field of the row.
+ </li></ul>
+ <p> An UPDATE change does not contain any information regarding
+ non-PRIMARY KEY fields that are not modified by the change. It is not
+ possible for an UPDATE change to specify modifications to PRIMARY
+ KEY fields.
+</p></li></ul>
+
+<p> A single changeset may contain changes that apply to more than one
+database table. For each table that the changeset includes at least one change
+for, it also encodes the following data:
+
+</p><ul>
+ <li> The name of the database table,
+ </li><li> The number of columns the table has, and
+ </li><li> Which of those columns are PRIMARY KEY columns.
+</li></ul>
+
+<p> Changesets may only be applied to databases that contain tables
+matching the above three criteria as stored in the changeset.
+
+</p><p> A patchset is similar to a changeset. It is slightly more compact than
+a changeset, but provides more limited conflict detection and resolution
+options (see the next section for details). The differences between a
+patchset and a changeset are that:
+
+</p><ul>
+ <li><p> For a <b>DELETE</b> change, the payload consists of the PRIMARY KEY
+ fields only. The original values of other fields are not stored as
+ part of a patchset.
+
+ </p></li><li><p> For an <b>UPDATE</b> change, the payload consists of the PRIMARY KEY
+ fields and the new values of modified fields only. The original
+ values of modified fields are not stored as part of a patchset.
+</p></li></ul>
+
+<h2 id="conflicts"><span>2.2. </span>Conflicts</h2>
+
+<p> When a changeset or patchset is applied to a database, an attempt is
+made to insert a new row for each INSERT change, remove a row for each
+DELETE change and modify a row for each UPDATE change. If the target
+database is in the same state as the original database that the changeset
+was recorded on, this is a simple matter. However, if the contents of the
+target database is not in exactly this state, conflicts can occur when
+applying the changeset or patchset.
+
+</p><p>When processing an <b>INSERT</b> change, the following conflicts can
+occur:
+
+</p><ul>
+ <li> The target database may already contain a row with the same PRIMARY
+ KEY values as specified by the INSERT change.
+
+ </li><li> Some other database constraint, for example a UNIQUE or CHECK
+ constraint, may be violated when the new row is inserted.
+</li></ul>
+
+<p>When processing a <b>DELETE</b> change, the following conflicts may be
+detected:
+
+</p><ul>
+ <li> The target database may contain no row with the specified PRIMARY
+ KEY values to delete.
+
+ </li><li> The target database may contain a row with the specified PRIMARY
+ KEY values, but the other fields may contain values that do not
+ match those stored as part of the changeset. This type of conflict
+ is not detected when using a patchset.
+</li></ul>
+
+<p>When processing an <b>UPDATE</b> change, the following conflicts may be
+detected:
+
+</p><ul>
+ <li> The target database may contain no row with the specified PRIMARY
+ KEY values to modify.
+
+ </li><li> The target database may contain a row with the specified PRIMARY
+ KEY values, but the current values of the fields that will be modified
+ by the change may not match the original values stored within the
+ changeset. This type of conflict is not detected when using a patchset.
+
+ </li><li> Some other database constraint, for example a UNIQUE or CHECK
+ constraint, may be violated when the row is updated.
+</li></ul>
+
+<p> Depending on the type of conflict, a sessions application has a variety
+of configurable options for dealing with conflicts, ranging from omitting the
+conflicting change, aborting the entire changeset application or applying
+the change despite the conflict. For details, refer to the documentation for
+the <a href="session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a> API.
+
+</p><h2 id="changeset_construction"><span>2.3. </span>Changeset Construction</h2>
+
+<p> After a session object has been configured, it begins monitoring for
+changes to its configured tables. However, it does not record an entire
+change each time a row within the database is modified. Instead, it records
+just the PRIMARY KEY fields for each inserted row, and just the PRIMARY KEY
+and all original row values for any updated or deleted rows. If a row is
+modified more than once by a single session, no new information is recorded.
+
+</p><p> The other information required to create a changeset or patchset is
+read from the database file when <a href="session/sqlite3session_changeset.html">sqlite3session_changeset()</a> or
+<a href="session/sqlite3session_patchset.html">sqlite3session_patchset()</a> is called. Specifically,
+
+</p><ul>
+ <li> <p>For each primary key recorded as a result of an INSERT operation,
+ the sessions module checks if there is a row with a matching primary
+ key still in the table. If so, an INSERT change is added to the
+ changeset.
+
+ </p></li><li> <p>For each primary key recorded as a result of an UPDATE or DELETE
+ operation, the sessions module also checks for a row with a matching
+ primary key within the table. If one can be found, but one or more
+ of the non-PRIMARY KEY fields does not match the original recorded
+ value, an UPDATE is added to the changeset. Or, if there is no row
+ at all with the specified primary key, a DELETE is added to the
+ changeset. If the row does exist but none of the non-PRIMARY KEY
+ fields have been modified, no change is added to the changeset.
+</p></li></ul>
+
+<p> One implication of the above is that if a change is made and then
+unmade within a single session (for example if a row is inserted and then
+deleted again), the sessions module does not report any change at all. Or
+if a row is updated multiple times within the same session, all updates
+are coalesced into a single update within any changeset or patchset blob.
+
+</p><h1 id="using_the_session_extension"><span>3. </span>Using The Session Extension</h1>
+
+<p> This section provides examples that demonstrate how to use the sessions
+ extension.
+
+</p><h2 id="capturing_a_changeset"><span>3.1. </span>Capturing a Changeset</h2>
+
+<p> The example code below demonstrates the steps involved in capturing a
+changeset while executing SQL commands. In summary:
+
+</p><ol>
+ <li> <p>A session object (type sqlite3_session*) is created by making a
+ call to the <a href="session/sqlite3session_create.html">sqlite3session_create()</a> API function.
+
+ </p><p>A single session object monitors changes made to a single database
+ (i.e. "main", "temp" or an attached database) via a single
+ sqlite3* database handle.
+
+ </p></li><li> <p>The session object is configured with a set of tables to monitor
+ changes on.
+
+ </p><p> By default a session object does not monitor changes on any
+ database table. Before it does so it must be configured. There
+ are three ways to configure the set of tables to monitor changes
+ on:
+ </p><ul>
+ <li> By explicitly specifying tables using one call to
+ <a href="session/sqlite3session_attach.html">sqlite3session_attach()</a> for each table, or
+
+ </li><li> By specifying that all tables in the database should be monitored
+ for changes using a call to <a href="session/sqlite3session_attach.html">sqlite3session_attach()</a> with a
+ NULL argument, or
+
+ </li><li> By configuring a callback to be invoked the first time each table
+ is written to that indicates to the session module whether or
+ not changes on the table should be monitored.
+ </li></ul>
+ <p> The example code below uses the second of the methods enumerated
+ above - it monitors for changes on all database tables.
+
+ </p></li><li> <p> Changes are made to the database by executing SQL statements. The
+ session object records these changes.
+
+ </p></li><li> <p> A changeset blob is extracted from the session object using a call
+ to <a href="session/sqlite3session_changeset.html">sqlite3session_changeset()</a> (or, if using patchsets, a call to
+ the <a href="session/sqlite3session_patchset.html">sqlite3session_patchset()</a> function).
+
+ </p></li><li> <p> The session object is deleted using a call to the
+ <a href="session/sqlite3session_delete.html">sqlite3session_delete()</a> API function.
+
+ </p><p> It is not necessary to delete a session object after extracting
+ a changeset or patchset from it. It can be left attached to the
+ database handle and will continue monitoring for changes on the
+ configured tables as before. However, if
+ <a href="session/sqlite3session_changeset.html">sqlite3session_changeset()</a> or <a href="session/sqlite3session_patchset.html">sqlite3session_patchset()</a> is
+ called a second time on a session object, the changeset or patchset
+ will contain <em>all</em> changes that have taken place on the connection
+ since the session was created. In other words,
+ a session object is not reset or
+ zeroed by a call to sqlite3session_changeset() or
+ sqlite3session_patchset().
+</p></li></ol>
+
+<div class="codeblock"><pre><i>/*
+** Argument zSql points to a buffer containing an SQL script to execute
+** against the database handle passed as the first argument. As well as
+** executing the SQL script, this function collects a changeset recording
+** all changes made to the "main" database file. Assuming no error occurs,
+** output variables (*ppChangeset) and (*pnChangeset) are set to point
+** to a buffer containing the changeset and the size of the changeset in
+** bytes before returning SQLITE_OK. In this case it is the responsibility
+** of the caller to eventually free the changeset blob by passing it to
+** the sqlite3_free function.
+**
+** Or, if an error does occur, return an SQLite error code. The final
+** value of (*pChangeset) and (*pnChangeset) are undefined in this case.
+*/</i>
+int sql_exec_changeset(
+ sqlite3 *db, <i>/* Database handle */</i>
+ const char *zSql, <i>/* SQL script to execute */</i>
+ int *pnChangeset, <i>/* OUT: Size of changeset blob in bytes */</i>
+ void **ppChangeset <i>/* OUT: Pointer to changeset blob */</i>
+){
+ sqlite3_session *pSession = 0;
+ int rc;
+
+ <i>/* Create a new session object */</i>
+ rc = sqlite3session_create(db, "main", &pSession);
+
+ <i>/* Configure the session object to record changes to all tables */</i>
+ if( rc==SQLITE_OK ) rc = sqlite3session_attach(pSession, NULL);
+
+ <i>/* Execute the SQL script */</i>
+ if( rc==SQLITE_OK ) rc = sqlite3_exec(db, zSql, 0, 0, 0);
+
+ <i>/* Collect the changeset */</i>
+ if( rc==SQLITE_OK ){
+ rc = sqlite3session_changeset(pSession, pnChangeset, ppChangeset);
+ }
+
+ <i>/* Delete the session object */</i>
+ sqlite3session_delete(pSession);
+
+ return rc;
+}
+</pre></div>
+
+<h2 id="applying_a_changeset_to_a_database"><span>3.2. </span>Applying a Changeset to a Database</h2>
+
+<p> Applying a changeset to a database is simpler than capturing a changeset.
+Usually, a single call to <a href="session/sqlite3changeset_apply.html">sqlite3changeset_apply()</a>, as depicted in the
+example code below, suffices.
+
+</p><p> In cases where it is complicated, the complications in applying a
+changeset lie in conflict resolution. Refer to the API documentation linked
+above for details.
+
+ </p><div class="codeblock"><pre><i>/*
+** Conflict handler callback used by apply_changeset(). See below.
+*/</i>
+static int xConflict(void *pCtx, int eConflict, sqlite3_changset_iter *pIter){
+ int ret = (int)pCtx;
+ return ret;
+}
+
+<i>/*
+** Apply the changeset contained in blob pChangeset, size nChangeset bytes,
+** to the main database of the database handle passed as the first argument.
+** Return SQLITE_OK if successful, or an SQLite error code if an error
+** occurs.
+**
+** If parameter bIgnoreConflicts is true, then any conflicting changes
+** within the changeset are simply ignored. Or, if bIgnoreConflicts is
+** false, then this call fails with an SQLTIE_ABORT error if a changeset
+** conflict is encountered.
+*/</i>
+int apply_changeset(
+ sqlite3 *db, <i>/* Database handle */</i>
+ int bIgnoreConflicts, <i>/* True to ignore conflicting changes */</i>
+ int nChangeset, <i>/* Size of changeset in bytes */</i>
+ void *pChangeset <i>/* Pointer to changeset blob */</i>
+){
+ return sqlite3changeset_apply(
+ db,
+ nChangeset, pChangeset,
+ 0, xConflict,
+ (void*)bIgnoreConflicts
+ );
+}
+</pre></div>
+
+<h2 id="inspecting_the_contents_of_a_changeset"><span>3.3. </span>Inspecting the Contents of a Changeset</h2>
+
+<p> The example code below demonstrates the techniques used to iterate
+through and extract the data related to all changes in a changeset. To
+summarize:
+
+</p><ol>
+ <li><p> The <a href="session/sqlite3changeset_start.html">sqlite3changeset_start()</a> API is called to create and
+ initialize an iterator to iterate through the contents of a
+ changeset. Initially, the iterator points to no element at all.
+
+ </p></li><li><p> The first call to <a href="session/sqlite3changeset_next.html">sqlite3changeset_next()</a> on the iterator moves
+ it to point to the first change in the changeset (or to EOF, if
+ the changeset is completely empty). sqlite3changeset_next() returns
+ SQLITE_ROW if it moves the iterator to point to a valid entry,
+ SQLITE_DONE if it moves the iterator to EOF, or an SQLite error
+ code if an error occurs.
+
+ </p></li><li><p> If the iterator points to a valid entry, the <a href="session/sqlite3changeset_op.html">sqlite3changeset_op()</a>
+ API may be used to determine the type of change (INSERT, UPDATE or
+ DELETE) that the iterator points to. Additionally, the same API
+ can be used to obtain the name of the table the change applies to
+ and its expected number of columns and primary key columns.
+
+ </p></li><li><p> If the iterator points to a valid INSERT or UPDATE entry, the
+ <a href="session/sqlite3changeset_new.html">sqlite3changeset_new()</a> API may be used to obtain the new.* values
+ within the change payload.
+
+ </p></li><li><p> If the iterator points to a valid DELETE or UPDATE entry, the
+ <a href="session/sqlite3changeset_old.html">sqlite3changeset_old()</a> API may be used to obtain the old.* values
+ within the change payload.
+
+ </p></li><li><p> An iterator is deleted using a call to the
+ <a href="session/sqlite3changeset_finalize.html">sqlite3changeset_finalize()</a> API. If an error occured while
+ iterating, an SQLite error code is returned (even if the same error
+ code has already been returned by sqlite3changeset_next()). Or,
+ if no error has occurred, SQLITE_OK is returned.
+</p></li></ol>
+
+ <div class="codeblock"><pre><i>/*
+** Print the contents of the changeset to stdout.
+*/</i>
+static int print_changeset(void *pChangeset, int nChangeset){
+ int rc;
+ sqlite3_changeset_iter *pIter = 0;
+
+ <i>/* Create an iterator to iterate through the changeset */</i>
+ rc = sqlite3changeset_start(&pIter, nChangeset, pChangeset);
+ if( rc!=SQLITE_OK ) return rc;
+
+ <i>/* This loop runs once for each change in the changeset */</i>
+ while( SQLITE_ROW==sqlite3changeset_next(pIter) ){
+ const char *zTab; <i>/* Table change applies to */</i>
+ int nCol; <i>/* Number of columns in table zTab */</i>
+ int op; <i>/* SQLITE_INSERT, UPDATE or DELETE */</i>
+ sqlite3_value *pVal;
+
+ <i>/* Print the type of operation and the table it is on */</i>
+ rc = sqlite3changeset_op(pIter, &zTab, &nCol, &op, 0);
+ if( rc!=SQLITE_OK ) goto exit_print_changeset;
+ printf("%s on table %s\n",
+ op==SQLITE_INSERT?"INSERT" : op==SQLITE_UPDATE?"UPDATE" : "DELETE",
+ zTab
+ );
+
+ <i>/* If this is an UPDATE or DELETE, print the old.* values */</i>
+ if( op==SQLITE_UPDATE || op==SQLITE_DELETE ){
+ printf("Old values:");
+ for(i=0; i&lt;nCol; i++){
+ rc = sqlite3changeset_old(pIter, i, &pVal);
+ if( rc!=SQLITE_OK ) goto exit_print_changeset;
+ printf(" %s", pVal ? sqlite3_value_text(pVal) : "-");
+ }
+ printf("\n");
+ }
+
+ <i>/* If this is an UPDATE or INSERT, print the new.* values */</i>
+ if( op==SQLITE_UPDATE || op==SQLITE_INSERT ){
+ printf("New values:");
+ for(i=0; i&lt;nCol; i++){
+ rc = sqlite3changeset_new(pIter, i, &pVal);
+ if( rc!=SQLITE_OK ) goto exit_print_changeset;
+ printf(" %s", pVal ? sqlite3_value_text(pVal) : "-");
+ }
+ printf("\n");
+ }
+ }
+
+ <i>/* Clean up the changeset and return an error code (or SQLITE_OK) */</i>
+ exit_print_changeset:
+ rc2 = sqlite3changeset_finalize(pIter);
+ if( rc==SQLITE_OK ) rc = rc2;
+ return rc;
+}
+</pre></div>
+
+<h1 id="extended_functionality"><span>4. </span>Extended Functionality</h1>
+
+<p> Most applications will only use the session module functionality described
+in the previous section. However, the following additional functionality is
+available for the use and manipulation of changeset and patchset blobs:
+
+</p><ul>
+ <li> <p>Two or more changeset/patchsets may be combined using the
+ <a href="session/sqlite3changeset_concat.html">sqlite3changeset_concat()</a> or <a href="session/changegroup.html">sqlite3_changegroup</a> interfaces.
+
+ </p></li><li> <p>A changeset may be "inverted" using the <a href="session/sqlite3changeset_invert.html">sqlite3changeset_invert()</a>
+ API function. An inverted changeset undoes the changes made by the
+ original. If changeset C<sup>+</sup> is the inverse of changeset C, then
+ applying C and then C<sup>+</sup> to a database should leave
+ the database unchanged.
+</p></li></ul><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/sessionintro.in?m=007ada577d1408286">2018-02-28 22:21:53</a> UTC </small></i></p>
+
diff --git a/www/sharedcache.html b/www/sharedcache.html
new file mode 100644
index 0000000..450fb7e
--- /dev/null
+++ b/www/sharedcache.html
@@ -0,0 +1,404 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Shared-Cache Mode</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite Shared-Cache Mode
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#sqlite_shared_cache_mode">1. SQLite Shared-Cache Mode</a></div>
+<div class="fancy-toc2"><a href="#use_of_shared_cache_is_discouraged">1.1. Use of shared-cache is discouraged</a></div>
+<div class="fancy-toc1"><a href="#shared_cache_locking_model">2. Shared-Cache Locking Model</a></div>
+<div class="fancy-toc2"><a href="#transaction_level_locking">2.1. Transaction Level Locking</a></div>
+<div class="fancy-toc2"><a href="#table_level_locking">2.2. Table Level Locking</a></div>
+<div class="fancy-toc3"><a href="#read_uncommitted_isolation_mode">2.2.1. Read-Uncommitted Isolation Mode</a></div>
+<div class="fancy-toc2"><a href="#schema_sqlite_schema_level_locking">2.3. Schema (sqlite_schema) Level Locking</a></div>
+<div class="fancy-toc1"><a href="#thread_related_issues">3. Thread Related Issues</a></div>
+<div class="fancy-toc1"><a href="#shared_cache_and_virtual_tables">4. Shared Cache And Virtual Tables</a></div>
+<div class="fancy-toc1"><a href="#enabling_shared_cache_mode">5. Enabling Shared-Cache Mode</a></div>
+<div class="fancy-toc1"><a href="#shared_cache_and_in_memory_databases">6. Shared Cache And In-Memory Databases</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="sqlite_shared_cache_mode"><span>1. </span>SQLite Shared-Cache Mode</h1>
+
+<p>Starting with <a href="releaselog/3_3_0.html">version 3.3.0</a> (2006-01-11),
+SQLite includes a special "shared-cache"
+mode (disabled by default) intended for use in embedded servers. If
+shared-cache mode is enabled and a thread establishes multiple connections
+to the same database, the connections share a single data and schema cache.
+This can significantly reduce the quantity of memory and IO required by
+the system.</p>
+
+<p>In <a href="releaselog/3_5_0.html">version 3.5.0</a> (2007-09-04),
+shared-cache mode was modified so that the same
+cache can be shared across an entire process rather than just within
+a single thread. Prior to this change, there were restrictions on
+passing database connections between threads. Those restrictions were
+dropped in 3.5.0 update. This document describes shared-cache mode
+as of version 3.5.0.</p>
+
+<p>Shared-cache mode changes the semantics
+of the locking model in some cases. The details are described by
+this document. A basic understanding of the normal SQLite locking model (see
+<a href="lockingv3.html">File Locking And Concurrency In SQLite Version 3</a>
+for details) is assumed.</p>
+
+<a name="dontuse"></a>
+
+<h2 id="use_of_shared_cache_is_discouraged"><span>1.1. </span>Use of shared-cache is discouraged</h2>
+
+<p>Shared-cache mode is an obsolete feature. The use of shared-cache mode
+is discouraged. Most use cases for shared-cache are better served by
+<a href="wal.html">WAL mode</a>.
+
+</p><p>Shared-cache mode was invented in 2006 at the request of developers
+of <a href="https://en.wikipedia.org/wiki/Symbian">Symbian</a>. Their problem was that
+if the contacts database on the phone was being synced, that would lock the
+database file. Then if a call came in, the database lock would prevent them
+from querying the contacts database in order to find the appropriate
+ring-tone for the incoming call, or a photo of the caller to show on screen,
+and so forth.
+<a href="wal.html">WAL mode</a> (circa 2010) is a better solution to this problem as it permits
+simultaneous access without breaking transaction isolation.
+
+</p><p>Applications that build their own copy of SQLite from source code
+are encouraged to use the <a href="compile.html#omit_shared_cache">-DSQLITE_OMIT_SHARED_CACHE</a> compile-time option,
+as the resulting binary will be both smaller and faster.
+
+</p><p>The shared-cache interfaces described here will continue to be supported
+in SQLite, to insure full backwards compatibility. However, the use of
+shared-cache is discouraged.
+
+</p><h1 id="shared_cache_locking_model"><span>2. </span>Shared-Cache Locking Model</h1>
+
+<p>Externally, from the point of view of another process or thread, two
+or more <a href="c3ref/sqlite3.html">database connections</a> using a shared-cache appear as a single
+connection. The locking protocol used to arbitrate between multiple
+shared-caches or regular database users is described elsewhere.
+</p>
+
+<table style="margin:auto">
+<tr><td>
+<img src="images/shared.gif">
+
+</td></tr></table>
+<p style="font-style:italic;text-align:center">Figure 1</p>
+
+<p>Figure 1 depicts an example runtime configuration where three
+database connections have been established. Connection 1 is a normal
+SQLite database connection. Connections 2 and 3 share a cache
+The normal locking
+protocol is used to serialize database access between connection 1 and
+the shared cache. The internal protocol used to serialize (or not, see
+"Read-Uncommitted Isolation Mode" below) access to the shared-cache by
+connections 2 and 3 is described in the remainder of this section.
+</p>
+
+<p>There are three levels to the shared-cache locking model,
+transaction level locking, table level locking and schema level locking.
+They are described in the following three sub-sections.</p>
+
+<h2 id="transaction_level_locking"><span>2.1. </span>Transaction Level Locking</h2>
+
+<p>SQLite connections can open two kinds of transactions, read and write
+transactions. This is not done explicitly, a transaction is implicitly a
+read-transaction until it first writes to a database table, at which point
+it becomes a write-transaction.
+</p>
+<p>At most one connection to a single shared cache may open a
+write transaction at any one time. This may co-exist with any number of read
+transactions.
+</p>
+
+<h2 id="table_level_locking"><span>2.2. </span>Table Level Locking</h2>
+
+<p>When two or more connections use a shared-cache, locks are used to
+serialize concurrent access attempts on a per-table basis. Tables support
+two types of locks, "read-locks" and "write-locks". Locks are granted to
+connections - at any one time, each database connection has either a
+read-lock, write-lock or no lock on each database table.
+</p>
+
+<p>At any one time, a single table may have any number of active read-locks
+or a single active write lock. To read data from a table, a connection must
+first obtain a read-lock. To write to a table, a connection must obtain a
+write-lock on that table. If a required table lock cannot be obtained,
+the query fails and SQLITE_LOCKED is returned to the caller.
+</p>
+
+<p>Once a connection obtains a table lock, it is not released until the
+current transaction (read or write) is concluded.
+</p>
+
+<h3 id="read_uncommitted_isolation_mode"><span>2.2.1. </span>Read-Uncommitted Isolation Mode</h3>
+
+<p>The behaviour described above may be modified slightly by using the
+<a href="pragma.html#pragma_read_uncommitted">read_uncommitted</a> pragma to change the isolation level from serialized
+(the default), to read-uncommitted.</p>
+
+<p> A database connection in read-uncommitted mode does not attempt
+to obtain read-locks before reading from database tables as described
+above. This can lead to inconsistent query results if another database
+connection modifies a table while it is being read, but it also means that
+a read-transaction opened by a connection in read-uncommitted mode can
+neither block nor be blocked by any other connection.</p>
+
+<p>Read-uncommitted mode has no effect on the locks required to write to
+database tables (i.e. read-uncommitted connections must still obtain
+write-locks and hence database writes may still block or be blocked).
+Also, read-uncommitted mode has no effect on the <a href="schematab.html">sqlite_schema</a>
+locks required by the rules enumerated below (see section
+"Schema (sqlite_schema) Level Locking").
+</p>
+
+<blockquote><pre>
+ /* Set the value of the read-uncommitted flag:
+ **
+ ** True -> Set the connection to read-uncommitted mode.
+ ** False -> Set the connection to serialized (the default) mode.
+ */
+ PRAGMA read_uncommitted = &lt;boolean&gt;;
+
+ /* Retrieve the current value of the read-uncommitted flag */
+ PRAGMA read_uncommitted;
+</pre></blockquote>
+
+<h2 id="schema_sqlite_schema_level_locking"><span>2.3. </span>Schema (sqlite_schema) Level Locking</h2>
+
+<p>The <a href="schematab.html">sqlite_schema table</a> supports shared-cache read and write
+locks in the same way as all other database tables (see description
+above). The following special rules also apply:
+</p>
+
+<ul>
+<li>A connection must obtain a read-lock on <i>sqlite_schema</i> before
+accessing any database tables or obtaining any other read or write locks.</li>
+<li>Before executing a statement that modifies the database schema (i.e.
+a CREATE or DROP TABLE statement), a connection must obtain a write-lock on
+<i>sqlite_schema</i>.
+</li>
+<li>A connection may not compile an SQL statement if any other connection
+is holding a write-lock on the <i>sqlite_schema</i> table of any attached
+database (including the default database, "main").
+</li>
+</ul>
+
+<h1 id="thread_related_issues"><span>3. </span>Thread Related Issues</h1>
+
+<p>In SQLite versions 3.3.0 through 3.4.2 when shared-cache mode is enabled,
+a database connection may only be
+used by the thread that called <a href="c3ref/open.html">sqlite3_open()</a> to create it.
+And a connection could only share cache with another connection in the
+same thread.
+These restrictions were dropped beginning with SQLite
+<a href="releaselog/3_5_0.html">version 3.5.0</a> (2007-09-04).
+</p>
+
+<h1 id="shared_cache_and_virtual_tables"><span>4. </span>Shared Cache And Virtual Tables</h1>
+
+<p>
+In older versions of SQLite,
+shared cache mode could not be used together with virtual tables.
+This restriction was removed in SQLite <a href="releaselog/3_6_17.html">version 3.6.17</a> (2009-08-10).
+
+</p><h1 id="enabling_shared_cache_mode"><span>5. </span>Enabling Shared-Cache Mode</h1>
+
+<p>Shared-cache mode is enabled on a per-process basis. Using the C
+interface, the following API can be used to globally enable or disable
+shared-cache mode:
+</p>
+
+<blockquote><pre>
+int sqlite3_enable_shared_cache(int);
+</pre></blockquote>
+
+<p>Each call to <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> affects subsequent database
+connections created using <a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/open.html">sqlite3_open16()</a>, or
+<a href="c3ref/open.html">sqlite3_open_v2()</a>. Database connections that already exist are
+unaffected. Each call to <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> overrides
+all previous calls within the same process.
+</p>
+
+<p>Individual database connections created using <a href="c3ref/open.html">sqlite3_open_v2()</a> can
+choose to participate or not participate in shared cache mode by using
+the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_SHAREDCACHE</a> or <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_PRIVATECACHE</a> flags the
+third parameter. The use of either of these flags overrides the
+global shared cache mode setting established by <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a>.
+No more than one of the flags should be used; if both SQLITE_OPEN_SHAREDCACHE
+and SQLITE_OPEN_PRIVATECACHE flags are used in the third argument to
+<a href="c3ref/open.html">sqlite3_open_v2()</a> then the behavior is undefined.</p>
+
+<p>When <a href="uri.html">URI filenames</a> are used, the "cache" query parameter can be used
+to specify whether or not the database will use shared cache. Use
+"cache=shared" to enable shared cache and "cache=private" to disable
+shared cache. The ability to use URI query parameters to specify the
+cache sharing behavior of a database connection allows cache sharing to
+be controlled in <a href="lang_attach.html">ATTACH</a> statements. For example:</p>
+
+<blockquote><pre>
+ATTACH 'file:aux.db?cache=shared' AS aux;
+</pre></blockquote>
+
+<a name="inmemsharedcache"></a>
+
+<h1 id="shared_cache_and_in_memory_databases"><span>6. </span>Shared Cache And In-Memory Databases</h1>
+
+<p>
+Beginning with SQLite <a href="releaselog/3_7_13.html">version 3.7.13</a> (2012-06-11),
+shared cache can be used on
+<a href="inmemorydb.html">in-memory databases</a>, provided that the database is created using
+a <a href="uri.html">URI filename</a>. For backwards compatibility, shared cache is always
+disabled for in-memory
+databases if the unadorned name ":memory:" is used to open the database.
+Prior to version 3.7.13, shared cache was always
+disabled for in-memory databases regardless of the database name used,
+current system shared cache setting, or query parameters or flags.
+</p>
+
+<p>
+Enabling shared-cache for an in-memory database allows two or more
+database connections in the same process to have access to the same
+in-memory database. An in-memory database in shared cache is automatically
+deleted and memory is reclaimed when the last connection to that database
+closes.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/sharedcache.in?m=2e0ac9c477d633afd">2022-08-15 11:37:22</a> UTC </small></i></p>
+
diff --git a/www/shortnames.html b/www/shortnames.html
new file mode 100644
index 0000000..7c9d773
--- /dev/null
+++ b/www/shortnames.html
@@ -0,0 +1,241 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>8+3 Filenames</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">SQLite And 8+3 Filenames</h1>
+
+<p>
+The default configuration of SQLite assumes the underlying filesystem
+supports long filenames.
+</p>
+
+<p>
+SQLite does not impose any naming requirements on database files.
+SQLite will happily work with a database file that has any filename extension
+or with no extension at all.
+When auxiliary files are needed for a <a href="lockingv3.html#rollback">rollback journal</a> or
+a <a href="wal.html">write-ahead log</a> or for one of the other kinds of
+<a href="tempfiles.html">temporary disk files</a>, then the name for the auxiliary file is normally
+constructed by appending a suffix onto the end of the database file name.
+For example, if the original database is call "<tt>app.db</tt>" then
+the <a href="lockingv3.html#rollback">rollback journal</a> will be called "<tt>app.db-journal</tt>"
+and the <a href="wal.html">write-ahead log</a> will be called "<tt>app.db-wal</tt>".
+This approach to auxiliary file naming works great on systems that
+support long filenames. But on systems that impose 8+3 filename
+constraints, the auxiliary files do not fit the 8+3 format even though
+the original database file does.
+</p>
+
+
+<h2>Changing Filesystems</h2>
+
+<p>
+The recommended fix for this problem is to select a different
+filesystem. These days, there is a huge selection of high-performance,
+reliable, patent-free filesystems that support long filenames.
+Where possible, it is recommended that embedded devices use one
+of these other filesystems. This will avoid compatibility issues
+and the danger of
+<a href="shortnames.html#db83corrupt">database corruption caused by inconsistent use of 8+3 filenames</a>.
+</p>
+
+<h2>Adjusting SQLite To Use 8+3 Filenames</h2>
+
+<p>
+Some devices are compelled to use an older filesystem with 8+3
+filename restrictions for backwards compatibility, or due
+to other non-technical factors. In such situations, SQLite can be
+coerced into using auxiliary files that fit the 8+3 pattern as follows:
+</p>
+
+<ol>
+<li><p>Compile the SQLite library with the either the compile-time
+ options <a href="compile.html#enable_8_3_names">SQLITE_ENABLE_8_3_NAMES=1</a> or
+ <a href="compile.html#enable_8_3_names">SQLITE_ENABLE_8_3_NAMES=2</a>.
+ Support for 8+3 filenames is not included in SQLite by default
+ because it does introduce some overhead. The overhead is tiny,
+ but even so, we do not want to burden the billions of SQLite
+ applications that do not need 8+3 filename support.</p>
+
+<li><p>If the <a href="compile.html#enable_8_3_names">SQLITE_ENABLE_8_3_NAMES=1</a> option
+ is used, then SQLite is capable of using 8+3 filenames but that
+ capabilities is disabled and must be enabled separately for each
+ database connection by using
+ using <a href="uri.html">URI filenames</a> when <a href="c3ref/open.html">opening</a> or
+ <a href="lang_attach.html">ATTACH-ing</a> the database files and include the
+ "<tt>8_3_names=1</tt>" query parameter in the URI. If SQLite
+ is compiled with
+ <a href="compile.html#enable_8_3_names">SQLITE_ENABLE_8_3_NAMES=2</a> then
+ 8+3 filenames are enabled by default and this step can be
+ skipped.</p>
+
+<li><p>Make sure that database filenames follow the 8+3 filename
+ format and that they do not have an empty name or extension.
+ In other words, the database filename must contain between
+ 1 and 8 characters in the base name and between 1 and 3 characters
+ in the extension. Blank extensions are not allowed.</p>
+</ol>
+
+<p>
+When the steps above are used, SQLite will shorten filename extensions
+by only using the last 3 characters of
+the extension. Thus, for example, a file that would normally be called
+"<tt>app.db-journal</tt>" is shortened to just "<tt>app.nal</tt>".
+Similarly, "<tt>app.db-wal</tt>" will become "<tt>app.wal</tt>" and
+"<tt>app.db-shm</tt>" becomes "<tt>app.shm</tt>".
+</p>
+
+<p>
+Note that it is very important that the database filename have some kind
+of extension. If there is no extension, then SQLite creates auxiliary
+filenames by appending to the base name of the file. Thus, a database
+named "<tt>db01</tt>" would have a <a href="lockingv3.html#rollback">rollback journal</a> file named
+"<tt>db01-journal</tt>". And as this filename has no extension to shorten
+to 3 characters, it will be used as-is, and will violate 8+3 naming rules.
+</p>
+
+<a name="db83corrupt"></a>
+
+<h2>Database Corruption Warning</h2>
+
+<p>
+If a database file is accessed using 8+3 naming rather than the default
+long filename, then it must be consistently accessed
+using 8+3 naming by every database
+connection every time it is opened, or else there is a risk of database
+corruption.
+The auxiliary <a href="lockingv3.html#rollback">rollback journal</a> and <a href="wal.html">write-ahead log</a> files are essential
+to SQLite for being about to recover from a crash. If an application is
+using 8+3 names and crashes, then the information needed to safely recover
+from the crash is stored in files with the "<tt>.nal</tt>" or
+"<tt>.wal</tt>" extension. If the next application to open the database
+does not specify the "<tt>8_3_names=1</tt>" URI parameter, then SQLite
+will use the long filenames to try to locate the rollback journal or
+write-ahead log files. It will not find them, since they were saved using
+8+3 names by the application that crashed, and hence the database will not
+be properly recovered and will likely go corrupt.
+</p>
+
+<p>
+Using a database file with 8+3 filenames in some cases while in
+other cases using long filenames is equivalent to
+<a href="howtocorrupt.html#delhotjrnl">deleting a hot journal</a>.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/shortnames.in?m=7fc7e0cffc8c28b08">2011-08-15 23:00:56</a> UTC </small></i></p>
+
diff --git a/www/sitemap.html b/www/sitemap.html
new file mode 100644
index 0000000..357231e
--- /dev/null
+++ b/www/sitemap.html
@@ -0,0 +1,763 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Site Map</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+
+<h2>Permuted Index</h2>
+
+<var class="rightsidebar border2px desktoponly">
+Other Documentation Indices:
+<ul>
+<li><a href="docs.html">Categorical Document List</a>
+<li><a href="books.html">Books About SQLite</a>
+<li><a href="doclist.html">Alphabetical List Of Documents</a>
+<li><a href="keyword_index.html">Website Keyword Index</a>
+</ul>
+</var>
+
+<ul class='lessindent'>
+<li><b><a href="fasterthanfs.html">35% Faster Than The Filesystem</a></b></li>
+<li><b><a href="shortnames.html">8+3 Filenames</a></b></li>
+<li><b><a href="about.html">About SQLite</a></b></li>
+<li><a href="books.html">About SQLite &#151; Books</a></li>
+<li><a href="flextypegood.html">Advantages Of Flexible Typing &#151; The</a></li>
+<li><a href="security.html">Against The Dark Arts &#151; Defense</a></li>
+<li><a href="lang_aggfunc.html">Aggregate Functions &#151; Built in</a></li>
+<li><a href="wal.html">Ahead Logging &#151; Write</a></li>
+<li><a href="malloc.html">Allocation In SQLite &#151; Dynamic Memory</a></li>
+<li><b><a href="doclist.html">Alphabetical List Of SQLite Documents</a></b></li>
+<li><b><a href="lang_altertable.html">ALTER TABLE</a></b></li>
+<li><a href="amalgamation.html">Amalgamation &#151; The SQLite</a></li>
+<li><b><a href="asyncvfs.html">An Asynchronous I/O Module For SQLite</a></b></li>
+<li><b><a href="cintro.html">An Introduction To The SQLite C/C++ Interface</a></b></li>
+<li><b><a href="lang_analyze.html">ANALYZE</a></b></li>
+<li><a href="lockingv3.html">And Concurrency In SQLite Version 3 &#151; File Locking</a></li>
+<li><a href="useovernet.html">and Considerations &#151; SQLite Over a Network, Caveats</a></li>
+<li><a href="rescode.html">and Error Codes &#151; Result</a></li>
+<li><a href="fts3.html">and FTS4 Extensions &#151; SQLite FTS3</a></li>
+<li><a href="quirks.html">and Gotchas In SQLite &#151; Quirks, Caveats,</a></li>
+<li><a href="json1.html">And Operators &#151; JSON Functions</a></li>
+<li><a href="cpu.html">and Reducing CPU Usage in SQLite &#151; Measuring</a></li>
+<li><a href="bytecodevtab.html">And Tables_Used() Table Valued Functions &#151; The Bytecode()</a></li>
+<li><a href="withoutrowid.html">and the WITHOUT ROWID Optimization &#151; Clustered Indexes</a></li>
+<li><a href="lang_datefunc.html">And Time Functions &#151; Date</a></li>
+<li><a href="errlog.html">And Warning Log &#151; The Error</a></li>
+<li><b><a href="https://sqlite.org/android/">Android Bindings</a></b></li>
+<li><a href="backup.html">API &#151; SQLite Backup</a></li>
+<li><a href="unlock_notify.html">API &#151; SQLite Unlock Notify</a></li>
+<li><a href="capi3ref.html">API Reference &#151; C/C++</a></li>
+<li><b><a href="appfunc.html">Application Defined SQL Functions</a></b></li>
+<li><a href="appfileformat.html">Application File Format &#151; SQLite As An</a></li>
+<li><a href="threadsafe.html">Applications &#151; Using SQLite In Multi Threaded</a></li>
+<li><b><a href="whentouse.html">Appropriate Uses For SQLite</a></b></li>
+<li><b><a href="arch.html">Architecture of SQLite</a></b></li>
+<li><a href="sqlar.html">Archive Files &#151; SQLite</a></li>
+<li><a href="https://sqlite.org/sqlar/">Archiver (sqlar.exe) &#151; SQLite</a></li>
+<li><a href="np1queryprob.html">Are Efficient In SQLite &#151; Many Small Queries</a></li>
+<li><a href="security.html">Arts &#151; Defense Against The Dark</a></li>
+<li><a href="faq.html">Asked Questions &#151; SQLite Frequently</a></li>
+<li><a href="assert.html">assert() In SQLite &#151; The Use Of</a></li>
+<li><a href="asyncvfs.html">Asynchronous I/O Module For SQLite &#151; An</a></li>
+<li><b><a href="atomiccommit.html">Atomic Commit In SQLite</a></b></li>
+<li><b><a href="lang_attach.html">ATTACH DATABASE</a></b></li>
+<li><a href="autoinc.html">Autoincrement &#151; SQLite</a></li>
+<li><b><a href="undoredo.html">Automatic Undo/Redo With SQLite</a></b></li>
+<li><a href="backup.html">Backup API &#151; SQLite</a></li>
+<li><b><a href="aff_short.html">Benefits of SQLite As A File Format</a></b></li>
+<li><a href="https://sqlite.org/android/">Bindings &#151; Android</a></li>
+<li><a href="intern-v-extern-blob.html">BLOBs &#151; Internal Versus External</a></li>
+<li><b><a href="books.html">Books About SQLite</a></b></li>
+<li><a href="privatebranch.html">Branches Of SQLite &#151; Maintaining Private</a></li>
+<li><a href="custombuild.html">Builds Of SQLite &#151; Custom</a></li>
+<li><b><a href="lang_aggfunc.html">Built in Aggregate Functions</a></b></li>
+<li><b><a href="lang_mathfunc.html">Built In Mathematical SQL Functions</a></b></li>
+<li><a href="printf.html">Built in printf() &#151; SQLite's</a></li>
+<li><b><a href="lang_corefunc.html">Built In Scalar SQL Functions</a></b></li>
+<li><a href="opcode.html">Bytecode Engine &#151; The SQLite</a></li>
+<li><a href="bytecodevtab.html">Bytecode() And Tables_Used() Table Valued Functions &#151; The</a></li>
+<li><b><a href="capi3ref.html">C/C++ API Reference</a></b></li>
+<li><a href="cintro.html">C/C++ Interface &#151; An Introduction To The SQLite</a></li>
+<li><a href="session.html">C/C++ Interface &#151; SQLite Session Module</a></li>
+<li><b><a href="capi3ref.html">C/C++ Interface For SQLite Version 3</a></b></li>
+<li><b><a href="capi3.html">C/C++ Interface For SQLite Version 3 (old)</a></b></li>
+<li><a href="sharedcache.html">Cache Mode &#151; SQLite Shared</a></li>
+<li><a href="getthecode.html">Canonical SQLite Source Code &#151; How To Download</a></li>
+<li><a href="carray.html">Carray() Table Valued Function &#151; The</a></li>
+<li><a href="useovernet.html">Caveats and Considerations &#151; SQLite Over a Network,</a></li>
+<li><a href="quirks.html">Caveats, and Gotchas In SQLite &#151; Quirks,</a></li>
+<li><b><a href="pgszchng2016.html">Change in Default Page Size in SQLite Version 3.12.0</a></b></li>
+<li><a href="34to35.html">Changes From Version 3.4.2 To 3.5.0 &#151; SQLite</a></li>
+<li><a href="35to36.html">Changes From Version 3.5.9 To 3.6.0 &#151; SQLite</a></li>
+<li><a href="formatchng.html">Changes in SQLite &#151; File Format</a></li>
+<li><a href="nulinstr.html">Characters In Strings &#151; NUL</a></li>
+<li><a href="cksumvfs.html">Checksum VFS Shim &#151; The</a></li>
+<li><a href="lang_indexedby.html">Clause &#151; The INDEXED BY</a></li>
+<li><a href="lang_conflict.html">Clause &#151; The ON CONFLICT</a></li>
+<li><a href="lang_with.html">Clause &#151; The WITH</a></li>
+<li><b><a href="withoutrowid.html">Clustered Indexes and the WITHOUT ROWID Optimization</a></b></li>
+<li><a href="getthecode.html">Code &#151; How To Download Canonical SQLite Source</a></li>
+<li><a href="whyc.html">Coded In C &#151; Why Is SQLite</a></li>
+<li><a href="rescode.html">Codes &#151; Result and Error</a></li>
+<li><a href="uintcseq.html">Collating Sequence &#151; The UINT</a></li>
+<li><a href="gencol.html">Columns &#151; Generated</a></li>
+<li><b><a href="cli.html">Command Line Shell For SQLite</a></b></li>
+<li><a href="lang_comment.html">Comment Syntax &#151; SQL</a></li>
+<li><a href="atomiccommit.html">Commit In SQLite &#151; Atomic</a></li>
+<li><a href="speed.html">Comparison &#151; SQLite Database Speed</a></li>
+<li><a href="howtocompile.html">Compile SQLite &#151; How To</a></li>
+<li><b><a href="compile.html">Compile time Options</a></b></li>
+<li><a href="completion.html">COMPLETION() Table Valued Function &#151; The</a></li>
+<li><a href="lockingv3.html">Concurrency In SQLite Version 3 &#151; File Locking And</a></li>
+<li><a href="zeroconf.html">Configuration &#151; Zero</a></li>
+<li><a href="lang_conflict.html">CONFLICT Clause &#151; The ON</a></li>
+<li><a href="conflict.html">Conflict Resolution in SQLite &#151; Constraint</a></li>
+<li><a href="useovernet.html">Considerations &#151; SQLite Over a Network, Caveats and</a></li>
+<li><a href="consortium.html">Consortium &#151; SQLite</a></li>
+<li><b><a href="conflict.html">Constraint Conflict Resolution in SQLite</a></b></li>
+<li><a href="selfcontained.html">Contained System &#151; SQLite is a Self</a></li>
+<li><a href="https://www.fossil-scm.org/">Control System &#151; The Fossil Version</a></li>
+<li><a href="copyright.html">Copyright &#151; SQLite</a></li>
+<li><a href="howtocorrupt.html">Corrupt An SQLite Database File &#151; How To</a></li>
+<li><a href="recovery.html">Corrupt SQLite Database &#151; Recovering Data From A</a></li>
+<li><a href="cpu.html">CPU Usage in SQLite &#151; Measuring and Reducing</a></li>
+<li><b><a href="lang_createindex.html">CREATE INDEX</a></b></li>
+<li><b><a href="lang_createtable.html">CREATE TABLE</a></b></li>
+<li><b><a href="lang_createtrigger.html">CREATE TRIGGER</a></b></li>
+<li><b><a href="lang_createview.html">CREATE VIEW</a></b></li>
+<li><b><a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a></b></li>
+<li><a href="csv.html">CSV Virtual Table &#151; The</a></li>
+<li><b><a href="custombuild.html">Custom Builds Of SQLite</a></b></li>
+<li><a href="security.html">Dark Arts &#151; Defense Against The</a></li>
+<li><a href="recovery.html">Data From A Corrupt SQLite Database &#151; Recovering</a></li>
+<li><a href="lang_attach.html">DATABASE &#151; ATTACH</a></li>
+<li><a href="recovery.html">Database &#151; Recovering Data From A Corrupt SQLite</a></li>
+<li><a href="onefile.html">Database &#151; SQLite: Single File</a></li>
+<li><a href="sqldiff.html">Database Difference Utility &#151; sqldiff.exe:</a></li>
+<li><a href="mostdeployed.html">Database Engine &#151; Most Widely Deployed SQL</a></li>
+<li><a href="vdbe.html">Database Engine of SQLite &#151; The Virtual</a></li>
+<li><a href="howtocorrupt.html">Database File &#151; How To Corrupt An SQLite</a></li>
+<li><b><a href="fileformat2.html">Database File Format</a></b></li>
+<li><b><a href="lang_naming.html">Database Object Name Resolution</a></b></li>
+<li><a href="speed.html">Database Speed Comparison &#151; SQLite</a></li>
+<li><a href="inmemorydb.html">Databases &#151; In Memory</a></li>
+<li><b><a href="datatype3.html">Datatypes In SQLite</a></b></li>
+<li><b><a href="datatypes.html">Datatypes In SQLite version 2</a></b></li>
+<li><b><a href="lang_datefunc.html">Date And Time Functions</a></b></li>
+<li><a href="dbhash.html">dbhash.exe Utility Program &#151; The</a></li>
+<li><a href="dbstat.html">DBSTAT Virtual Table &#151; The</a></li>
+<li><a href="debugging.html">Debugging SQLite &#151; Hints for</a></li>
+<li><a href="pgszchng2016.html">Default Page Size in SQLite Version 3.12.0 &#151; Change in</a></li>
+<li><b><a href="security.html">Defense Against The Dark Arts</a></b></li>
+<li><a href="appfunc.html">Defined SQL Functions &#151; Application</a></li>
+<li><b><a href="lang_delete.html">DELETE</a></b></li>
+<li><a href="mostdeployed.html">Deployed SQL Database Engine &#151; Most Widely</a></li>
+<li><b><a href="lang_detach.html">DETACH</a></b></li>
+<li><b><a href="deterministic.html">Deterministic SQL Functions</a></b></li>
+<li><a href="crew.html">Developers &#151; SQLite</a></li>
+<li><a href="syntax.html">Diagrams &#151; List of SQLite Syntax</a></li>
+<li><a href="syntaxdiagrams.html">Diagrams For SQLite &#151; Syntax</a></li>
+<li><a href="sqldiff.html">Difference Utility &#151; sqldiff.exe: Database</a></li>
+<li><a href="fileformat2.html">Disk Format &#151; On</a></li>
+<li><b><a href="different.html">Distinctive Features Of SQLite</a></b></li>
+<li><a href="docs.html">Documentation &#151; SQLite</a></li>
+<li><a href="doclist.html">Documents &#151; Alphabetical List Of SQLite</a></li>
+<li><a href="omitted.html">Does Not Implement &#151; SQL Features That SQLite</a></li>
+<li><a href="whynotgit.html">Does Not Use Git &#151; Why SQLite</a></li>
+<li><a href="getthecode.html">Download Canonical SQLite Source Code &#151; How To</a></li>
+<li><a href="download.html">Download Page &#151; SQLite</a></li>
+<li><b><a href="lang_dropindex.html">DROP INDEX</a></b></li>
+<li><b><a href="lang_droptable.html">DROP TABLE</a></b></li>
+<li><b><a href="lang_droptrigger.html">DROP TRIGGER</a></b></li>
+<li><b><a href="lang_dropview.html">DROP VIEW</a></b></li>
+<li><b><a href="malloc.html">Dynamic Memory Allocation In SQLite</a></b></li>
+<li><a href="np1queryprob.html">Efficient In SQLite &#151; Many Small Queries Are</a></li>
+<li><a href="mostdeployed.html">Engine &#151; Most Widely Deployed SQL Database</a></li>
+<li><a href="opcode.html">Engine &#151; The SQLite Bytecode</a></li>
+<li><a href="vdbe.html">Engine of SQLite &#151; The Virtual Database</a></li>
+<li><a href="errlog.html">Error And Warning Log &#151; The</a></li>
+<li><a href="rescode.html">Error Codes &#151; Result and</a></li>
+<li><b><a href="lang_explain.html">EXPLAIN</a></b></li>
+<li><b><a href="eqp.html">EXPLAIN QUERY PLAN</a></b></li>
+<li><a href="expridx.html">Expressions &#151; Indexes On</a></li>
+<li><a href="lang_expr.html">Expressions &#151; SQL Language</a></li>
+<li><a href="fts5.html">Extension &#151; SQLite FTS5</a></li>
+<li><a href="rbu.html">Extension &#151; The RBU</a></li>
+<li><a href="sessionintro.html">Extension &#151; The Session</a></li>
+<li><a href="loadext.html">Extensions &#151; Run Time Loadable</a></li>
+<li><a href="fts3.html">Extensions &#151; SQLite FTS3 and FTS4</a></li>
+<li><a href="intern-v-extern-blob.html">External BLOBs &#151; Internal Versus</a></li>
+<li><a href="fasterthanfs.html">Faster Than The Filesystem &#151; 35%</a></li>
+<li><a href="fullsql.html">Featured SQL &#151; Full</a></li>
+<li><b><a href="features.html">Features Of SQLite</a></b></li>
+<li><a href="different.html">Features Of SQLite &#151; Distinctive</a></li>
+<li><a href="omitted.html">Features That SQLite Does Not Implement &#151; SQL</a></li>
+<li><a href="howtocorrupt.html">File &#151; How To Corrupt An SQLite Database</a></li>
+<li><a href="onefile.html">File Database &#151; SQLite: Single</a></li>
+<li><a href="aff_short.html">File Format &#151; Benefits of SQLite As A</a></li>
+<li><a href="fileformat2.html">File Format &#151; Database</a></li>
+<li><a href="appfileformat.html">File Format &#151; SQLite As An Application</a></li>
+<li><a href="walformat.html">File Format &#151; WAL mode</a></li>
+<li><b><a href="formatchng.html">File Format Changes in SQLite</a></b></li>
+<li><b><a href="lockingv3.html">File Locking And Concurrency In SQLite Version 3</a></b></li>
+<li><a href="shortnames.html">Filenames &#151; 8+3</a></li>
+<li><a href="sqlar.html">Files &#151; SQLite Archive</a></li>
+<li><a href="tempfiles.html">Files Used By SQLite &#151; Temporary</a></li>
+<li><a href="fasterthanfs.html">Filesystem &#151; 35% Faster Than The</a></li>
+<li><a href="flextypegood.html">Flexible Typing &#151; The Advantages Of</a></li>
+<li><b><a href="floatingpoint.html">Floating Point Numbers</a></b></li>
+<li><a href="footprint.html">Footprint &#151; SQLite Library</a></li>
+<li><a href="foreignkeys.html">Foreign Key Support &#151; SQLite</a></li>
+<li><a href="aff_short.html">Format &#151; Benefits of SQLite As A File</a></li>
+<li><a href="fileformat2.html">Format &#151; Database File</a></li>
+<li><a href="locrsf.html">Format &#151; LoC Recommended Storage</a></li>
+<li><a href="fileformat2.html">Format &#151; On Disk</a></li>
+<li><a href="appfileformat.html">Format &#151; SQLite As An Application File</a></li>
+<li><a href="walformat.html">Format &#151; WAL mode File</a></li>
+<li><a href="formatchng.html">Format Changes in SQLite &#151; File</a></li>
+<li><a href="https://www.fossil-scm.org/">Fossil Version Control System &#151; The</a></li>
+<li><a href="faq.html">Frequently Asked Questions &#151; SQLite</a></li>
+<li><a href="recovery.html">From A Corrupt SQLite Database &#151; Recovering Data</a></li>
+<li><a href="34to35.html">From Version 3.4.2 To 3.5.0 &#151; SQLite Changes</a></li>
+<li><a href="35to36.html">From Version 3.5.9 To 3.6.0 &#151; SQLite Changes</a></li>
+<li><a href="fts3.html">FTS3 and FTS4 Extensions &#151; SQLite</a></li>
+<li><a href="fts3.html">FTS4 Extensions &#151; SQLite FTS3 and</a></li>
+<li><a href="fts5.html">FTS5 Extension &#151; SQLite</a></li>
+<li><b><a href="fullsql.html">Full Featured SQL</a></b></li>
+<li><a href="carray.html">Function &#151; The Carray() Table Valued</a></li>
+<li><a href="completion.html">Function &#151; The COMPLETION() Table Valued</a></li>
+<li><a href="series.html">Function &#151; The generate_series Table Valued</a></li>
+<li><a href="appfunc.html">Functions &#151; Application Defined SQL</a></li>
+<li><a href="lang_aggfunc.html">Functions &#151; Built in Aggregate</a></li>
+<li><a href="lang_mathfunc.html">Functions &#151; Built In Mathematical SQL</a></li>
+<li><a href="lang_corefunc.html">Functions &#151; Built In Scalar SQL</a></li>
+<li><a href="lang_datefunc.html">Functions &#151; Date And Time</a></li>
+<li><a href="deterministic.html">Functions &#151; Deterministic SQL</a></li>
+<li><a href="bytecodevtab.html">Functions &#151; The Bytecode() And Tables_Used() Table Valued</a></li>
+<li><a href="windowfunctions.html">Functions &#151; Window</a></li>
+<li><a href="json1.html">Functions And Operators &#151; JSON</a></li>
+<li><a href="series.html">generate_series Table Valued Function &#151; The</a></li>
+<li><b><a href="gencol.html">Generated Columns</a></b></li>
+<li><a href="queryplanner-ng.html">Generation Query Planner &#151; The Next</a></li>
+<li><a href="lemon.html">Generator &#151; The Lemon LALR(1) Parser</a></li>
+<li><a href="geopoly.html">Geopoly Interface To The SQLite R*Tree Module &#151; The</a></li>
+<li><a href="whynotgit.html">Git &#151; Why SQLite Does Not Use</a></li>
+<li><a href="quirks.html">Gotchas In SQLite &#151; Quirks, Caveats, and</a></li>
+<li><a href="nulls.html">Handling in SQLite &#151; NULL</a></li>
+<li><b><a href="hirely.html">High Reliability</a></b></li>
+<li><b><a href="debugging.html">Hints for Debugging SQLite</a></b></li>
+<li><a href="changes.html">History Of SQLite &#151; Release</a></li>
+<li><b><a href="chronology.html">History Of SQLite Releases</a></b></li>
+<li><a href="index.html">Home Page &#151; SQLite</a></li>
+<li><b><a href="queryplanner.html">How Indexes Work</a></b></li>
+<li><b><a href="testing.html">How SQLite Is Tested</a></b></li>
+<li><b><a href="howitworks.html">How SQLite Works</a></b></li>
+<li><b><a href="howtocompile.html">How To Compile SQLite</a></b></li>
+<li><b><a href="howtocorrupt.html">How To Corrupt An SQLite Database File</a></b></li>
+<li><b><a href="getthecode.html">How To Download Canonical SQLite Source Code</a></b></li>
+<li><a href="mmap.html">I/O &#151; Memory Mapped</a></li>
+<li><a href="asyncvfs.html">I/O Module For SQLite &#151; An Asynchronous</a></li>
+<li><a href="uri.html">Identifiers &#151; Uniform Resource</a></li>
+<li><a href="omitted.html">Implement &#151; SQL Features That SQLite Does Not</a></li>
+<li><b><a href="limits.html">Implementation Limits For SQLite</a></b></li>
+<li><b><a href="imposter.html">Imposter Tables</a></b></li>
+<li><b><a href="inmemorydb.html">In Memory Databases</a></b></li>
+<li><a href="lang_createindex.html">INDEX &#151; CREATE</a></li>
+<li><a href="lang_dropindex.html">INDEX &#151; DROP</a></li>
+<li><a href="keyword_index.html">Index &#151; Website Keyword</a></li>
+<li><a href="lang_indexedby.html">INDEXED BY Clause &#151; The</a></li>
+<li><a href="partialindex.html">Indexes &#151; Partial</a></li>
+<li><a href="withoutrowid.html">Indexes and the WITHOUT ROWID Optimization &#151; Clustered</a></li>
+<li><b><a href="expridx.html">Indexes On Expressions</a></b></li>
+<li><a href="queryplanner.html">Indexes Work &#151; How</a></li>
+<li><b><a href="lang_insert.html">INSERT</a></b></li>
+<li><a href="cintro.html">Interface &#151; An Introduction To The SQLite C/C++</a></li>
+<li><a href="session.html">Interface &#151; SQLite Session Module C/C++</a></li>
+<li><a href="capi3ref.html">Interface For SQLite Version 3 &#151; C/C++</a></li>
+<li><a href="capi3.html">Interface For SQLite Version 3 (old) &#151; C/C++</a></li>
+<li><a href="vfs.html">Interface or VFS &#151; The SQLite OS</a></li>
+<li><a href="c_interface.html">interface to SQLite Version 2 &#151; The C language</a></li>
+<li><a href="tclsqlite.html">interface to the SQLite library &#151; The Tcl</a></li>
+<li><a href="geopoly.html">Interface To The SQLite R*Tree Module &#151; The Geopoly</a></li>
+<li><a href="bindptr.html">Interfaces &#151; Pointer Passing</a></li>
+<li><b><a href="intern-v-extern-blob.html">Internal Versus External BLOBs</a></b></li>
+<li><a href="cintro.html">Introduction To The SQLite C/C++ Interface &#151; An</a></li>
+<li><b><a href="invalidutf.html">Invalid UTF Policy</a></b></li>
+<li><b><a href="isolation.html">Isolation In SQLite</a></b></li>
+<li><b><a href="hp1.html">Javascript Required</a></b></li>
+<li><b><a href="json1.html">JSON Functions And Operators</a></b></li>
+<li><a href="foreignkeys.html">Key Support &#151; SQLite Foreign</a></li>
+<li><a href="keyword_index.html">Keyword Index &#151; Website</a></li>
+<li><a href="lang_keywords.html">Keywords &#151; SQLite</a></li>
+<li><a href="famous.html">Known Users Of SQLite &#151; Well</a></li>
+<li><a href="lemon.html">LALR(1) Parser Generator &#151; The Lemon</a></li>
+<li><a href="lang_expr.html">Language Expressions &#151; SQL</a></li>
+<li><a href="c_interface.html">language interface to SQLite Version 2 &#151; The C</a></li>
+<li><a href="lang.html">Language Understood by SQLite &#151; Query</a></li>
+<li><a href="lemon.html">Lemon LALR(1) Parser Generator &#151; The</a></li>
+<li><a href="quickstart.html">Less &#151; SQLite In 5 Minutes Or</a></li>
+<li><a href="tclsqlite.html">library &#151; The Tcl interface to the SQLite</a></li>
+<li><a href="footprint.html">Library Footprint &#151; SQLite</a></li>
+<li><a href="limits.html">Limits For SQLite &#151; Implementation</a></li>
+<li><a href="cli.html">Line Shell For SQLite &#151; Command</a></li>
+<li><a href="doclist.html">List Of SQLite Documents &#151; Alphabetical</a></li>
+<li><b><a href="syntax.html">List of SQLite Syntax Diagrams</a></b></li>
+<li><b><a href="vtablist.html">List Of Virtual Tables</a></b></li>
+<li><a href="loadext.html">Loadable Extensions &#151; Run Time</a></li>
+<li><b><a href="locrsf.html">LoC Recommended Storage Format</a></b></li>
+<li><a href="lockingv3.html">Locking And Concurrency In SQLite Version 3 &#151; File</a></li>
+<li><a href="errlog.html">Log &#151; The Error And Warning</a></li>
+<li><a href="wal.html">Logging &#151; Write Ahead</a></li>
+<li><b><a href="lts.html">Long Term Support</a></b></li>
+<li><b><a href="privatebranch.html">Maintaining Private Branches Of SQLite</a></b></li>
+<li><a href="qmplan.html">Management &#151; Quality</a></li>
+<li><b><a href="np1queryprob.html">Many Small Queries Are Efficient In SQLite</a></b></li>
+<li><a href="sitemap.html">Map &#151; SQLite Site</a></li>
+<li><a href="mmap.html">Mapped I/O &#151; Memory</a></li>
+<li><a href="lang_mathfunc.html">Mathematical SQL Functions &#151; Built In</a></li>
+<li><b><a href="cpu.html">Measuring and Reducing CPU Usage in SQLite</a></b></li>
+<li><a href="vtab.html">Mechanism Of SQLite &#151; The Virtual Table</a></li>
+<li><a href="malloc.html">Memory Allocation In SQLite &#151; Dynamic</a></li>
+<li><a href="inmemorydb.html">Memory Databases &#151; In</a></li>
+<li><b><a href="mmap.html">Memory Mapped I/O</a></b></li>
+<li><a href="quickstart.html">Minutes Or Less &#151; SQLite In 5</a></li>
+<li><a href="sharedcache.html">Mode &#151; SQLite Shared Cache</a></li>
+<li><a href="walformat.html">mode File Format &#151; WAL</a></li>
+<li><a href="geopoly.html">Module &#151; The Geopoly Interface To The SQLite R*Tree</a></li>
+<li><a href="rtree.html">Module &#151; The SQLite R*Tree</a></li>
+<li><a href="zipfile.html">Module &#151; The SQLite Zipfile</a></li>
+<li><a href="session.html">Module C/C++ Interface &#151; SQLite Session</a></li>
+<li><a href="asyncvfs.html">Module For SQLite &#151; An Asynchronous I/O</a></li>
+<li><b><a href="mostdeployed.html">Most Widely Deployed SQL Database Engine</a></b></li>
+<li><a href="threadsafe.html">Multi Threaded Applications &#151; Using SQLite In</a></li>
+<li><a href="lang_naming.html">Name Resolution &#151; Database Object</a></li>
+<li><a href="useovernet.html">Network, Caveats and Considerations &#151; SQLite Over a</a></li>
+<li><a href="news.html">News &#151; Recent SQLite</a></li>
+<li><a href="oldnews.html">News &#151; SQLite Older</a></li>
+<li><a href="queryplanner-ng.html">Next Generation Query Planner &#151; The</a></li>
+<li><a href="omitted.html">Not Implement &#151; SQL Features That SQLite Does</a></li>
+<li><a href="whynotgit.html">Not Use Git &#151; Why SQLite Does</a></li>
+<li><a href="unlock_notify.html">Notify API &#151; SQLite Unlock</a></li>
+<li><b><a href="nulinstr.html">NUL Characters In Strings</a></b></li>
+<li><b><a href="nulls.html">NULL Handling in SQLite</a></b></li>
+<li><a href="floatingpoint.html">Numbers &#151; Floating Point</a></li>
+<li><a href="versionnumbers.html">Numbers in SQLite &#151; Version</a></li>
+<li><a href="lang_naming.html">Object Name Resolution &#151; Database</a></li>
+<li><a href="oldnews.html">Older News &#151; SQLite</a></li>
+<li><b><a href="fileformat2.html">On Disk Format</a></b></li>
+<li><a href="affcase1.html">OpenDocument Used SQLite? &#151; What If</a></li>
+<li><a href="json1.html">Operators &#151; JSON Functions And</a></li>
+<li><a href="withoutrowid.html">Optimization &#151; Clustered Indexes and the WITHOUT ROWID</a></li>
+<li><a href="optoverview.html">Optimizer Overview &#151; The SQLite Query</a></li>
+<li><a href="compile.html">Options &#151; Compile time</a></li>
+<li><a href="support.html">Options &#151; SQLite Support</a></li>
+<li><a href="useovernet.html">Over a Network, Caveats and Considerations &#151; SQLite</a></li>
+<li><a href="version3.html">Overview &#151; SQLite Version 3</a></li>
+<li><a href="optoverview.html">Overview &#151; The SQLite Query Optimizer</a></li>
+<li><a href="psow.html">Overwrite &#151; Powersafe</a></li>
+<li><a href="download.html">Page &#151; SQLite Download</a></li>
+<li><a href="index.html">Page &#151; SQLite Home</a></li>
+<li><a href="pgszchng2016.html">Page Size in SQLite Version 3.12.0 &#151; Change in Default</a></li>
+<li><a href="lemon.html">Parser Generator &#151; The Lemon LALR(1)</a></li>
+<li><b><a href="partialindex.html">Partial Indexes</a></b></li>
+<li><a href="bindptr.html">Passing Interfaces &#151; Pointer</a></li>
+<li><a href="eqp.html">PLAN &#151; EXPLAIN QUERY</a></li>
+<li><a href="queryplanner-ng.html">Planner &#151; The Next Generation Query</a></li>
+<li><a href="queryplanner.html">Planning &#151; Query</a></li>
+<li><a href="floatingpoint.html">Point Numbers &#151; Floating</a></li>
+<li><b><a href="bindptr.html">Pointer Passing Interfaces</a></b></li>
+<li><a href="invalidutf.html">Policy &#151; Invalid UTF</a></li>
+<li><b><a href="psow.html">Powersafe Overwrite</a></b></li>
+<li><b><a href="pragma.html">Pragma statements supported by SQLite</a></b></li>
+<li><a href="printf.html">printf() &#151; SQLite's Built in</a></li>
+<li><a href="privatebranch.html">Private Branches Of SQLite &#151; Maintaining</a></li>
+<li><a href="prosupport.html">Pro Support &#151; SQLite</a></li>
+<li><a href="dbhash.html">Program &#151; The dbhash.exe Utility</a></li>
+<li><a href="sqlanalyze.html">Program &#151; The sqlite3_analyzer.exe Utility</a></li>
+<li><b><a href="qmplan.html">Quality Management</a></b></li>
+<li><a href="np1queryprob.html">Queries Are Efficient In SQLite &#151; Many Small</a></li>
+<li><b><a href="lang.html">Query Language Understood by SQLite</a></b></li>
+<li><a href="optoverview.html">Query Optimizer Overview &#151; The SQLite</a></li>
+<li><a href="eqp.html">QUERY PLAN &#151; EXPLAIN</a></li>
+<li><a href="queryplanner-ng.html">Query Planner &#151; The Next Generation</a></li>
+<li><b><a href="queryplanner.html">Query Planning</a></b></li>
+<li><a href="faq.html">Questions &#151; SQLite Frequently Asked</a></li>
+<li><b><a href="quirks.html">Quirks, Caveats, and Gotchas In SQLite</a></b></li>
+<li><a href="geopoly.html">R*Tree Module &#151; The Geopoly Interface To The SQLite</a></li>
+<li><a href="rtree.html">R*Tree Module &#151; The SQLite</a></li>
+<li><a href="rbu.html">RBU Extension &#151; The</a></li>
+<li><b><a href="news.html">Recent SQLite News</a></b></li>
+<li><a href="locrsf.html">Recommended Storage Format &#151; LoC</a></li>
+<li><b><a href="recovery.html">Recovering Data From A Corrupt SQLite Database</a></b></li>
+<li><a href="cpu.html">Reducing CPU Usage in SQLite &#151; Measuring and</a></li>
+<li><a href="capi3ref.html">Reference &#151; C/C++ API</a></li>
+<li><b><a href="lang_reindex.html">REINDEX</a></b></li>
+<li><b><a href="changes.html">Release History Of SQLite</a></b></li>
+<li><a href="chronology.html">Releases &#151; History Of SQLite</a></li>
+<li><a href="hirely.html">Reliability &#151; High</a></li>
+<li><b><a href="lang_replace.html">REPLACE</a></b></li>
+<li><a href="hp1.html">Required &#151; Javascript</a></li>
+<li><a href="requirements.html">Requirements &#151; SQLite</a></li>
+<li><a href="lang_naming.html">Resolution &#151; Database Object Name</a></li>
+<li><a href="conflict.html">Resolution in SQLite &#151; Constraint Conflict</a></li>
+<li><a href="uri.html">Resource Identifiers &#151; Uniform</a></li>
+<li><b><a href="rescode.html">Result and Error Codes</a></b></li>
+<li><b><a href="lang_returning.html">RETURNING</a></b></li>
+<li><b><a href="rowvalue.html">Row Values</a></b></li>
+<li><a href="withoutrowid.html">ROWID Optimization &#151; Clustered Indexes and the WITHOUT</a></li>
+<li><b><a href="rowidtable.html">Rowid Tables</a></b></li>
+<li><b><a href="loadext.html">Run Time Loadable Extensions</a></b></li>
+<li><b><a href="lang_savepoint.html">Savepoints</a></b></li>
+<li><a href="lang_corefunc.html">Scalar SQL Functions &#151; Built In</a></li>
+<li><a href="schematab.html">Schema Table &#151; The</a></li>
+<li><b><a href="lang_select.html">SELECT</a></b></li>
+<li><a href="selfcontained.html">Self Contained System &#151; SQLite is a</a></li>
+<li><a href="uintcseq.html">Sequence &#151; The UINT Collating</a></li>
+<li><a href="serverless.html">Serverless &#151; SQLite Is</a></li>
+<li><a href="sessionintro.html">Session Extension &#151; The</a></li>
+<li><a href="session.html">Session Module C/C++ Interface &#151; SQLite</a></li>
+<li><a href="sharedcache.html">Shared Cache Mode &#151; SQLite</a></li>
+<li><a href="cli.html">Shell For SQLite &#151; Command Line</a></li>
+<li><a href="cksumvfs.html">Shim &#151; The Checksum VFS</a></li>
+<li><a href="onefile.html">Single File Database &#151; SQLite:</a></li>
+<li><a href="sitemap.html">Site Map &#151; SQLite</a></li>
+<li><a href="pgszchng2016.html">Size in SQLite Version 3.12.0 &#151; Change in Default Page</a></li>
+<li><a href="np1queryprob.html">Small Queries Are Efficient In SQLite &#151; Many</a></li>
+<li><a href="getthecode.html">Source Code &#151; How To Download Canonical SQLite</a></li>
+<li><a href="speed.html">Speed Comparison &#151; SQLite Database</a></li>
+<li><a href="spellfix1.html">Spellfix1 Virtual Table &#151; The</a></li>
+<li><a href="fullsql.html">SQL &#151; Full Featured</a></li>
+<li><b><a href="lang_comment.html">SQL Comment Syntax</a></b></li>
+<li><a href="mostdeployed.html">SQL Database Engine &#151; Most Widely Deployed</a></li>
+<li><b><a href="omitted.html">SQL Features That SQLite Does Not Implement</a></b></li>
+<li><a href="appfunc.html">SQL Functions &#151; Application Defined</a></li>
+<li><a href="lang_mathfunc.html">SQL Functions &#151; Built In Mathematical</a></li>
+<li><a href="lang_corefunc.html">SQL Functions &#151; Built In Scalar</a></li>
+<li><a href="deterministic.html">SQL Functions &#151; Deterministic</a></li>
+<li><b><a href="lang_expr.html">SQL Language Expressions</a></b></li>
+<li><b><a href="sqldiff.html">sqldiff.exe: Database Difference Utility</a></b></li>
+<li><b><a href="sqlar.html">SQLite Archive Files</a></b></li>
+<li><b><a href="https://sqlite.org/sqlar/">SQLite Archiver (sqlar.exe)</a></b></li>
+<li><b><a href="appfileformat.html">SQLite As An Application File Format</a></b></li>
+<li><b><a href="autoinc.html">SQLite Autoincrement</a></b></li>
+<li><b><a href="backup.html">SQLite Backup API</a></b></li>
+<li><b><a href="34to35.html">SQLite Changes From Version 3.4.2 To 3.5.0</a></b></li>
+<li><b><a href="35to36.html">SQLite Changes From Version 3.5.9 To 3.6.0</a></b></li>
+<li><b><a href="consortium.html">SQLite Consortium</a></b></li>
+<li><b><a href="copyright.html">SQLite Copyright</a></b></li>
+<li><b><a href="speed.html">SQLite Database Speed Comparison</a></b></li>
+<li><b><a href="crew.html">SQLite Developers</a></b></li>
+<li><b><a href="docs.html">SQLite Documentation</a></b></li>
+<li><b><a href="download.html">SQLite Download Page</a></b></li>
+<li><b><a href="foreignkeys.html">SQLite Foreign Key Support</a></b></li>
+<li><b><a href="faq.html">SQLite Frequently Asked Questions</a></b></li>
+<li><b><a href="fts3.html">SQLite FTS3 and FTS4 Extensions</a></b></li>
+<li><b><a href="fts5.html">SQLite FTS5 Extension</a></b></li>
+<li><b><a href="index.html">SQLite Home Page</a></b></li>
+<li><b><a href="quickstart.html">SQLite In 5 Minutes Or Less</a></b></li>
+<li><b><a href="selfcontained.html">SQLite is a Self Contained System</a></b></li>
+<li><b><a href="serverless.html">SQLite Is Serverless</a></b></li>
+<li><b><a href="transactional.html">SQLite Is Transactional</a></b></li>
+<li><b><a href="lang_keywords.html">SQLite Keywords</a></b></li>
+<li><b><a href="footprint.html">SQLite Library Footprint</a></b></li>
+<li><b><a href="oldnews.html">SQLite Older News</a></b></li>
+<li><b><a href="useovernet.html">SQLite Over a Network, Caveats and Considerations</a></b></li>
+<li><b><a href="prosupport.html">SQLite Pro Support</a></b></li>
+<li><b><a href="requirements.html">SQLite Requirements</a></b></li>
+<li><b><a href="session.html">SQLite Session Module C/C++ Interface</a></b></li>
+<li><b><a href="sharedcache.html">SQLite Shared Cache Mode</a></b></li>
+<li><b><a href="sitemap.html">SQLite Site Map</a></b></li>
+<li><b><a href="support.html">SQLite Support Options</a></b></li>
+<li><b><a href="unlock_notify.html">SQLite Unlock Notify API</a></b></li>
+<li><b><a href="version3.html">SQLite Version 3 Overview</a></b></li>
+<li><b><a href="printf.html">SQLite's Built in printf()</a></b></li>
+<li><a href="sqlanalyze.html">sqlite3_analyzer.exe Utility Program &#151; The</a></li>
+<li><b><a href="onefile.html">SQLite: Single File Database</a></b></li>
+<li><a href="affcase1.html">SQLite? &#151; What If OpenDocument Used</a></li>
+<li><a href="dbpage.html">SQLITE_DBPAGE Virtual Table &#151; The</a></li>
+<li><a href="memstat.html">SQLITE_MEMSTAT Virtual Table &#151; The</a></li>
+<li><a href="stmt.html">SQLITE_STMT Virtual Table &#151; The</a></li>
+<li><a href="pragma.html">statements supported by SQLite &#151; Pragma</a></li>
+<li><a href="locrsf.html">Storage Format &#151; LoC Recommended</a></li>
+<li><b><a href="stricttables.html">STRICT Tables</a></b></li>
+<li><a href="nulinstr.html">Strings &#151; NUL Characters In</a></li>
+<li><a href="lts.html">Support &#151; Long Term</a></li>
+<li><a href="foreignkeys.html">Support &#151; SQLite Foreign Key</a></li>
+<li><a href="prosupport.html">Support &#151; SQLite Pro</a></li>
+<li><a href="support.html">Support Options &#151; SQLite</a></li>
+<li><a href="pragma.html">supported by SQLite &#151; Pragma statements</a></li>
+<li><b><a href="swarmvtab.html">Swarmvtab Virtual Table</a></b></li>
+<li><a href="lang_comment.html">Syntax &#151; SQL Comment</a></li>
+<li><a href="syntax.html">Syntax Diagrams &#151; List of SQLite</a></li>
+<li><b><a href="syntaxdiagrams.html">Syntax Diagrams For SQLite</a></b></li>
+<li><a href="selfcontained.html">System &#151; SQLite is a Self Contained</a></li>
+<li><a href="https://www.fossil-scm.org/">System &#151; The Fossil Version Control</a></li>
+<li><b><a href="https://system.data.sqlite.org/">System.Data.SQLite</a></b></li>
+<li><a href="lang_altertable.html">TABLE &#151; ALTER</a></li>
+<li><a href="lang_createtable.html">TABLE &#151; CREATE</a></li>
+<li><a href="lang_createvtab.html">TABLE &#151; CREATE VIRTUAL</a></li>
+<li><a href="lang_droptable.html">TABLE &#151; DROP</a></li>
+<li><a href="swarmvtab.html">Table &#151; Swarmvtab Virtual</a></li>
+<li><a href="csv.html">Table &#151; The CSV Virtual</a></li>
+<li><a href="dbstat.html">Table &#151; The DBSTAT Virtual</a></li>
+<li><a href="schematab.html">Table &#151; The Schema</a></li>
+<li><a href="spellfix1.html">Table &#151; The Spellfix1 Virtual</a></li>
+<li><a href="dbpage.html">Table &#151; The SQLITE_DBPAGE Virtual</a></li>
+<li><a href="memstat.html">Table &#151; The SQLITE_MEMSTAT Virtual</a></li>
+<li><a href="stmt.html">Table &#151; The SQLITE_STMT Virtual</a></li>
+<li><a href="unionvtab.html">Table &#151; The UNION Virtual</a></li>
+<li><a href="vtab.html">Table Mechanism Of SQLite &#151; The Virtual</a></li>
+<li><a href="carray.html">Table Valued Function &#151; The Carray()</a></li>
+<li><a href="completion.html">Table Valued Function &#151; The COMPLETION()</a></li>
+<li><a href="series.html">Table Valued Function &#151; The generate_series</a></li>
+<li><a href="bytecodevtab.html">Table Valued Functions &#151; The Bytecode() And Tables_Used()</a></li>
+<li><a href="imposter.html">Tables &#151; Imposter</a></li>
+<li><a href="vtablist.html">Tables &#151; List Of Virtual</a></li>
+<li><a href="rowidtable.html">Tables &#151; Rowid</a></li>
+<li><a href="stricttables.html">Tables &#151; STRICT</a></li>
+<li><a href="bytecodevtab.html">Tables_Used() Table Valued Functions &#151; The Bytecode() And</a></li>
+<li><a href="tclsqlite.html">Tcl interface to the SQLite library &#151; The</a></li>
+<li><b><a href="tempfiles.html">Temporary Files Used By SQLite</a></b></li>
+<li><a href="lts.html">Term Support &#151; Long</a></li>
+<li><a href="testing.html">Tested &#151; How SQLite Is</a></li>
+<li><b><a href="th3.html">TH3</a></b></li>
+<li><a href="fasterthanfs.html">Than The Filesystem &#151; 35% Faster</a></li>
+<li><a href="omitted.html">That SQLite Does Not Implement &#151; SQL Features</a></li>
+<li><b><a href="flextypegood.html">The Advantages Of Flexible Typing</a></b></li>
+<li><b><a href="bytecodevtab.html">The Bytecode() And Tables_Used() Table Valued Functions</a></b></li>
+<li><b><a href="c_interface.html">The C language interface to SQLite Version 2</a></b></li>
+<li><b><a href="carray.html">The Carray() Table Valued Function</a></b></li>
+<li><b><a href="cksumvfs.html">The Checksum VFS Shim</a></b></li>
+<li><b><a href="completion.html">The COMPLETION() Table Valued Function</a></b></li>
+<li><b><a href="csv.html">The CSV Virtual Table</a></b></li>
+<li><b><a href="dbhash.html">The dbhash.exe Utility Program</a></b></li>
+<li><b><a href="dbstat.html">The DBSTAT Virtual Table</a></b></li>
+<li><b><a href="errlog.html">The Error And Warning Log</a></b></li>
+<li><b><a href="https://www.fossil-scm.org/">The Fossil Version Control System</a></b></li>
+<li><b><a href="series.html">The generate_series Table Valued Function</a></b></li>
+<li><b><a href="geopoly.html">The Geopoly Interface To The SQLite R*Tree Module</a></b></li>
+<li><b><a href="lang_indexedby.html">The INDEXED BY Clause</a></b></li>
+<li><b><a href="lemon.html">The Lemon LALR(1) Parser Generator</a></b></li>
+<li><b><a href="queryplanner-ng.html">The Next Generation Query Planner</a></b></li>
+<li><b><a href="lang_conflict.html">The ON CONFLICT Clause</a></b></li>
+<li><b><a href="rbu.html">The RBU Extension</a></b></li>
+<li><b><a href="schematab.html">The Schema Table</a></b></li>
+<li><b><a href="sessionintro.html">The Session Extension</a></b></li>
+<li><b><a href="spellfix1.html">The Spellfix1 Virtual Table</a></b></li>
+<li><b><a href="amalgamation.html">The SQLite Amalgamation</a></b></li>
+<li><b><a href="opcode.html">The SQLite Bytecode Engine</a></b></li>
+<li><b><a href="vfs.html">The SQLite OS Interface or "VFS"</a></b></li>
+<li><b><a href="optoverview.html">The SQLite Query Optimizer Overview</a></b></li>
+<li><b><a href="rtree.html">The SQLite R*Tree Module</a></b></li>
+<li><b><a href="zipfile.html">The SQLite Zipfile Module</a></b></li>
+<li><b><a href="sqlanalyze.html">The sqlite3_analyzer.exe Utility Program</a></b></li>
+<li><b><a href="dbpage.html">The SQLITE_DBPAGE Virtual Table</a></b></li>
+<li><b><a href="memstat.html">The SQLITE_MEMSTAT Virtual Table</a></b></li>
+<li><b><a href="stmt.html">The SQLITE_STMT Virtual Table</a></b></li>
+<li><b><a href="tclsqlite.html">The Tcl interface to the SQLite library</a></b></li>
+<li><b><a href="uintcseq.html">The UINT Collating Sequence</a></b></li>
+<li><b><a href="unionvtab.html">The UNION Virtual Table</a></b></li>
+<li><b><a href="assert.html">The Use Of assert() In SQLite</a></b></li>
+<li><b><a href="vdbe.html">The Virtual Database Engine of SQLite</a></b></li>
+<li><b><a href="vtab.html">The Virtual Table Mechanism Of SQLite</a></b></li>
+<li><b><a href="lang_with.html">The WITH Clause</a></b></li>
+<li><a href="threadsafe.html">Threaded Applications &#151; Using SQLite In Multi</a></li>
+<li><a href="lang_datefunc.html">Time Functions &#151; Date And</a></li>
+<li><a href="loadext.html">Time Loadable Extensions &#151; Run</a></li>
+<li><a href="compile.html">time Options &#151; Compile</a></li>
+<li><b><a href="lang_transaction.html">Transaction</a></b></li>
+<li><a href="transactional.html">Transactional &#151; SQLite Is</a></li>
+<li><a href="lang_createtrigger.html">TRIGGER &#151; CREATE</a></li>
+<li><a href="lang_droptrigger.html">TRIGGER &#151; DROP</a></li>
+<li><a href="flextypegood.html">Typing &#151; The Advantages Of Flexible</a></li>
+<li><a href="uintcseq.html">UINT Collating Sequence &#151; The</a></li>
+<li><a href="lang.html">Understood by SQLite &#151; Query Language</a></li>
+<li><a href="undoredo.html">Undo/Redo With SQLite &#151; Automatic</a></li>
+<li><b><a href="uri.html">Uniform Resource Identifiers</a></b></li>
+<li><a href="unionvtab.html">UNION Virtual Table &#151; The</a></li>
+<li><a href="unlock_notify.html">Unlock Notify API &#151; SQLite</a></li>
+<li><b><a href="lang_update.html">UPDATE</a></b></li>
+<li><b><a href="lang_upsert.html">UPSERT</a></b></li>
+<li><a href="cpu.html">Usage in SQLite &#151; Measuring and Reducing CPU</a></li>
+<li><a href="whynotgit.html">Use Git &#151; Why SQLite Does Not</a></li>
+<li><a href="assert.html">Use Of assert() In SQLite &#151; The</a></li>
+<li><a href="tempfiles.html">Used By SQLite &#151; Temporary Files</a></li>
+<li><a href="affcase1.html">Used SQLite? &#151; What If OpenDocument</a></li>
+<li><a href="famous.html">Users Of SQLite &#151; Well Known</a></li>
+<li><a href="whentouse.html">Uses For SQLite &#151; Appropriate</a></li>
+<li><b><a href="threadsafe.html">Using SQLite In Multi Threaded Applications</a></b></li>
+<li><a href="invalidutf.html">UTF Policy &#151; Invalid</a></li>
+<li><a href="sqldiff.html">Utility &#151; sqldiff.exe: Database Difference</a></li>
+<li><a href="dbhash.html">Utility Program &#151; The dbhash.exe</a></li>
+<li><a href="sqlanalyze.html">Utility Program &#151; The sqlite3_analyzer.exe</a></li>
+<li><b><a href="lang_vacuum.html">VACUUM</a></b></li>
+<li><a href="carray.html">Valued Function &#151; The Carray() Table</a></li>
+<li><a href="completion.html">Valued Function &#151; The COMPLETION() Table</a></li>
+<li><a href="series.html">Valued Function &#151; The generate_series Table</a></li>
+<li><a href="bytecodevtab.html">Valued Functions &#151; The Bytecode() And Tables_Used() Table</a></li>
+<li><a href="rowvalue.html">Values &#151; Row</a></li>
+<li><a href="datatypes.html">version 2 &#151; Datatypes In SQLite</a></li>
+<li><a href="c_interface.html">Version 2 &#151; The C language interface to SQLite</a></li>
+<li><a href="capi3ref.html">Version 3 &#151; C/C++ Interface For SQLite</a></li>
+<li><a href="lockingv3.html">Version 3 &#151; File Locking And Concurrency In SQLite</a></li>
+<li><a href="capi3.html">Version 3 (old) &#151; C/C++ Interface For SQLite</a></li>
+<li><a href="version3.html">Version 3 Overview &#151; SQLite</a></li>
+<li><a href="pgszchng2016.html">Version 3.12.0 &#151; Change in Default Page Size in SQLite</a></li>
+<li><a href="34to35.html">Version 3.4.2 To 3.5.0 &#151; SQLite Changes From</a></li>
+<li><a href="35to36.html">Version 3.5.9 To 3.6.0 &#151; SQLite Changes From</a></li>
+<li><a href="https://www.fossil-scm.org/">Version Control System &#151; The Fossil</a></li>
+<li><b><a href="versionnumbers.html">Version Numbers in SQLite</a></b></li>
+<li><a href="intern-v-extern-blob.html">Versus External BLOBs &#151; Internal</a></li>
+<li><a href="vfs.html">VFS &#151; The SQLite OS Interface or</a></li>
+<li><a href="cksumvfs.html">VFS Shim &#151; The Checksum</a></li>
+<li><a href="lang_createview.html">VIEW &#151; CREATE</a></li>
+<li><a href="lang_dropview.html">VIEW &#151; DROP</a></li>
+<li><a href="vdbe.html">Virtual Database Engine of SQLite &#151; The</a></li>
+<li><a href="lang_createvtab.html">VIRTUAL TABLE &#151; CREATE</a></li>
+<li><a href="swarmvtab.html">Virtual Table &#151; Swarmvtab</a></li>
+<li><a href="csv.html">Virtual Table &#151; The CSV</a></li>
+<li><a href="dbstat.html">Virtual Table &#151; The DBSTAT</a></li>
+<li><a href="spellfix1.html">Virtual Table &#151; The Spellfix1</a></li>
+<li><a href="dbpage.html">Virtual Table &#151; The SQLITE_DBPAGE</a></li>
+<li><a href="memstat.html">Virtual Table &#151; The SQLITE_MEMSTAT</a></li>
+<li><a href="stmt.html">Virtual Table &#151; The SQLITE_STMT</a></li>
+<li><a href="unionvtab.html">Virtual Table &#151; The UNION</a></li>
+<li><a href="vtab.html">Virtual Table Mechanism Of SQLite &#151; The</a></li>
+<li><a href="vtablist.html">Virtual Tables &#151; List Of</a></li>
+<li><b><a href="cves.html">Vulnerabilities</a></b></li>
+<li><b><a href="walformat.html">WAL mode File Format</a></b></li>
+<li><a href="errlog.html">Warning Log &#151; The Error And</a></li>
+<li><b><a href="keyword_index.html">Website Keyword Index</a></b></li>
+<li><b><a href="famous.html">Well Known Users Of SQLite</a></b></li>
+<li><b><a href="affcase1.html">What If OpenDocument Used SQLite?</a></b></li>
+<li><b><a href="whyc.html">Why Is SQLite Coded In C</a></b></li>
+<li><b><a href="whynotgit.html">Why SQLite Does Not Use Git</a></b></li>
+<li><a href="mostdeployed.html">Widely Deployed SQL Database Engine &#151; Most</a></li>
+<li><b><a href="windowfunctions.html">Window Functions</a></b></li>
+<li><a href="lang_with.html">WITH Clause &#151; The</a></li>
+<li><a href="undoredo.html">With SQLite &#151; Automatic Undo/Redo</a></li>
+<li><a href="withoutrowid.html">WITHOUT ROWID Optimization &#151; Clustered Indexes and the</a></li>
+<li><a href="queryplanner.html">Work &#151; How Indexes</a></li>
+<li><a href="howitworks.html">Works &#151; How SQLite</a></li>
+<li><b><a href="wal.html">Write Ahead Logging</a></b></li>
+<li><b><a href="zeroconf.html">Zero Configuration</a></b></li>
+<li><a href="zipfile.html">Zipfile Module &#151; The SQLite</a></li>
+
+</ul>
+
+
diff --git a/www/speed.html b/www/speed.html
new file mode 100644
index 0000000..3ff8308
--- /dev/null
+++ b/www/speed.html
@@ -0,0 +1,601 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Database Speed Comparison</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h2>Database Speed Comparison</h2>
+
+<font color="red"><b>
+Note: This document is very very old. It describes a speed comparison between
+archaic versions of SQLite, MySQL and PostgreSQL.
+<p>
+The numbers here have become meaningless. This page has been retained only
+as an historical artifact.
+</b></font>
+
+<h3>Executive Summary</h3>
+
+<p>A series of tests were run to measure the relative performance of
+SQLite 2.7.6, PostgreSQL 7.1.3, and MySQL 3.23.41.
+The following are general
+conclusions drawn from these experiments:
+</p>
+
+<ul>
+<li><p>
+ SQLite 2.7.6 is significantly faster (sometimes as much as 10 or
+ 20 times faster) than the default PostgreSQL 7.1.3 installation
+ on RedHat 7.2 for most common operations.
+</p></li>
+<li><p>
+ SQLite 2.7.6 is often faster (sometimes
+ more than twice as fast) than MySQL 3.23.41
+ for most common operations.
+</p></li>
+<li><p>
+ SQLite does not execute CREATE INDEX or DROP TABLE as fast as
+ the other databases. But this is not seen as a problem because
+ those are infrequent operations.
+</p></li>
+<li><p>
+ SQLite works best if you group multiple operations together into
+ a single transaction.
+</p></li>
+</ul>
+
+<p>
+The results presented here come with the following caveats:
+</p>
+
+<ul>
+<li><p>
+ These tests did not attempt to measure multi-user performance or
+ optimization of complex queries involving multiple joins and subqueries.
+</p></li>
+<li><p>
+ These tests are on a relatively small (approximately 14 megabyte) database.
+ They do not measure how well the database engines scale to larger problems.
+</p></li>
+</ul>
+
+<h3>Test Environment</h3>
+
+<p>
+The platform used for these tests is a 1.6GHz Athlon with 1GB or memory
+and an IDE disk drive. The operating system is RedHat Linux 7.2 with
+a stock kernel.
+</p>
+
+<p>
+The PostgreSQL and MySQL servers used were as delivered by default on
+RedHat 7.2. (PostgreSQL version 7.1.3 and MySQL version 3.23.41.)
+No effort was made to tune these engines. Note in particular
+the default MySQL configuration on RedHat 7.2 does not support
+transactions. Not having to support transactions gives MySQL a
+big speed advantage, but SQLite is still able to hold its own on most
+tests.
+</p>
+
+<p>
+I am told that the default PostgreSQL configuration in RedHat 7.3
+is unnecessarily conservative (it is designed to
+work on a machine with 8MB of RAM) and that PostgreSQL could
+be made to run a lot faster with some knowledgeable configuration
+tuning.
+Matt Sergeant reports that he has tuned his PostgreSQL installation
+and rerun the tests shown below. His results show that
+PostgreSQL and MySQL run at about the same speed. For Matt's
+results, visit
+</p>
+
+<blockquote>
+<a href="http://www.sergeant.org/sqlite_vs_pgsync.html">http://www.sergeant.org/sqlite_vs_pgsync.html</a>
+</blockquote>
+
+<p>
+SQLite was tested in the same configuration that it appears
+on the website. It was compiled with -O6 optimization and with
+the -DNDEBUG=1 switch which disables the many "assert()" statements
+in the SQLite code. The -DNDEBUG=1 compiler option roughly doubles
+the speed of SQLite.
+</p>
+
+<p>
+All tests are conducted on an otherwise quiescent machine.
+A simple Tcl script was used to generate and run all the tests.
+A copy of this Tcl script can be found in the SQLite source tree
+in the file <b>tools/speedtest.tcl</b>.
+</p>
+
+<p>
+The times reported on all tests represent wall-clock time
+in seconds. Two separate time values are reported for SQLite.
+The first value is for SQLite in its default configuration with
+full disk synchronization turned on. With synchronization turned
+on, SQLite executes
+an <b>fsync()</b> system call (or the equivalent) at key points
+to make certain that critical data has
+actually been written to the disk drive surface. Synchronization
+is necessary to guarantee the integrity of the database if the
+operating system crashes or the computer powers down unexpectedly
+in the middle of a database update. The second time reported for SQLite is
+when synchronization is turned off. With synchronization off,
+SQLite is sometimes much faster, but there is a risk that an
+operating system crash or an unexpected power failure could
+damage the database. Generally speaking, the synchronous SQLite
+times are for comparison against PostgreSQL (which is also
+synchronous) and the asynchronous SQLite times are for
+comparison against the asynchronous MySQL engine.
+</p>
+
+<h3>Test 1: 1000 INSERTs</h3>
+<blockquote>
+CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));<br>
+INSERT INTO t1 VALUES(1,13153,'thirteen thousand one hundred fifty three');<br>
+INSERT INTO t1 VALUES(2,75560,'seventy five thousand five hundred sixty');<br>
+<i>... 995 lines omitted</i><br>
+INSERT INTO t1 VALUES(998,66289,'sixty six thousand two hundred eighty nine');<br>
+INSERT INTO t1 VALUES(999,24322,'twenty four thousand three hundred twenty two');<br>
+INSERT INTO t1 VALUES(1000,94142,'ninety four thousand one hundred forty two');<br>
+
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;4.373</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;0.114</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;13.061</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;0.223</td></tr>
+</table>
+
+<p>
+Because it does not have a central server to coordinate access,
+SQLite must close and reopen the database file, and thus invalidate
+its cache, for each transaction. In this test, each SQL statement
+is a separate transaction so the database file must be opened and closed
+and the cache must be flushed 1000 times. In spite of this, the asynchronous
+version of SQLite is still nearly as fast as MySQL. Notice how much slower
+the synchronous version is, however. SQLite calls <b>fsync()</b> after
+each synchronous transaction to make sure that all data is safely on
+the disk surface before continuing. For most of the 13 seconds in the
+synchronous test, SQLite was sitting idle waiting on disk I/O to complete.</p>
+
+
+<h3>Test 2: 25000 INSERTs in a transaction</h3>
+<blockquote>
+BEGIN;<br>
+CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100));<br>
+INSERT INTO t2 VALUES(1,59672,'fifty nine thousand six hundred seventy two');<br>
+<i>... 24997 lines omitted</i><br>
+INSERT INTO t2 VALUES(24999,89569,'eighty nine thousand five hundred sixty nine');<br>
+INSERT INTO t2 VALUES(25000,94666,'ninety four thousand six hundred sixty six');<br>
+COMMIT;<br>
+
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;4.900</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;2.184</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;0.914</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;0.757</td></tr>
+</table>
+
+<p>
+When all the INSERTs are put in a transaction, SQLite no longer has to
+close and reopen the database or invalidate its cache between each statement.
+It also does not
+have to do any fsync()s until the very end. When unshackled in
+this way, SQLite is much faster than either PostgreSQL and MySQL.
+</p>
+
+<h3>Test 3: 25000 INSERTs into an indexed table</h3>
+<blockquote>
+BEGIN;<br>
+CREATE TABLE t3(a INTEGER, b INTEGER, c VARCHAR(100));<br>
+CREATE INDEX i3 ON t3(c);<br>
+<i>... 24998 lines omitted</i><br>
+INSERT INTO t3 VALUES(24999,88509,'eighty eight thousand five hundred nine');<br>
+INSERT INTO t3 VALUES(25000,84791,'eighty four thousand seven hundred ninety one');<br>
+COMMIT;<br>
+
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;8.175</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;3.197</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;1.555</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;1.402</td></tr>
+</table>
+
+<p>
+There were reports that SQLite did not perform as well on an indexed table.
+This test was recently added to disprove those rumors. It is true that
+SQLite is not as fast at creating new index entries as the other engines
+(see Test 6 below) but its overall speed is still better.
+</p>
+
+<h3>Test 4: 100 SELECTs without an index</h3>
+<blockquote>
+BEGIN;<br>
+SELECT count(*), avg(b) FROM t2 WHERE b>=0 AND b<1000;<br>
+SELECT count(*), avg(b) FROM t2 WHERE b>=100 AND b<1100;<br>
+<i>... 96 lines omitted</i><br>
+SELECT count(*), avg(b) FROM t2 WHERE b>=9800 AND b<10800;<br>
+SELECT count(*), avg(b) FROM t2 WHERE b>=9900 AND b<10900;<br>
+COMMIT;<br>
+
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;3.629</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;2.760</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;2.494</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;2.526</td></tr>
+</table>
+
+
+<p>
+This test does 100 queries on a 25000 entry table without an index,
+thus requiring a full table scan. Prior versions of SQLite used to
+be slower than PostgreSQL and MySQL on this test, but recent performance
+enhancements have increased its speed so that it is now the fastest
+of the group.
+</p>
+
+<h3>Test 5: 100 SELECTs on a string comparison</h3>
+<blockquote>
+BEGIN;<br>
+SELECT count(*), avg(b) FROM t2 WHERE c LIKE '%one%';<br>
+SELECT count(*), avg(b) FROM t2 WHERE c LIKE '%two%';<br>
+<i>... 96 lines omitted</i><br>
+SELECT count(*), avg(b) FROM t2 WHERE c LIKE '%ninety nine%';<br>
+SELECT count(*), avg(b) FROM t2 WHERE c LIKE '%one hundred%';<br>
+COMMIT;<br>
+
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;13.409</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;4.640</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;3.362</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;3.372</td></tr>
+</table>
+
+<p>
+This test still does 100 full table scans but it uses
+uses string comparisons instead of numerical comparisons.
+SQLite is over three times faster than PostgreSQL here and about 30%
+faster than MySQL.
+</p>
+
+<h3>Test 6: Creating an index</h3>
+<blockquote>
+CREATE INDEX i2a ON t2(a);<br>CREATE INDEX i2b ON t2(b);
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;0.381</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;0.318</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;0.777</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;0.659</td></tr>
+</table>
+
+<p>
+SQLite is slower at creating new indices. This is not a huge problem
+(since new indices are not created very often) but it is something that
+is being worked on. Hopefully, future versions of SQLite will do better
+here.
+</p>
+
+<h3>Test 7: 5000 SELECTs with an index</h3>
+<blockquote>
+SELECT count(*), avg(b) FROM t2 WHERE b>=0 AND b<100;<br>
+SELECT count(*), avg(b) FROM t2 WHERE b>=100 AND b<200;<br>
+SELECT count(*), avg(b) FROM t2 WHERE b>=200 AND b<300;<br>
+<i>... 4994 lines omitted</i><br>
+SELECT count(*), avg(b) FROM t2 WHERE b>=499700 AND b<499800;<br>
+SELECT count(*), avg(b) FROM t2 WHERE b>=499800 AND b<499900;<br>
+SELECT count(*), avg(b) FROM t2 WHERE b>=499900 AND b<500000;<br>
+
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;4.614</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;1.270</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;1.121</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;1.162</td></tr>
+</table>
+
+<p>
+All three database engines run faster when they have indices to work with.
+But SQLite is still the fastest.
+</p>
+
+<h3>Test 8: 1000 UPDATEs without an index</h3>
+<blockquote>
+BEGIN;<br>
+UPDATE t1 SET b=b*2 WHERE a>=0 AND a<10;<br>
+UPDATE t1 SET b=b*2 WHERE a>=10 AND a<20;<br>
+<i>... 996 lines omitted</i><br>
+UPDATE t1 SET b=b*2 WHERE a>=9980 AND a<9990;<br>
+UPDATE t1 SET b=b*2 WHERE a>=9990 AND a<10000;<br>
+COMMIT;<br>
+
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;1.739</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;8.410</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;0.637</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;0.638</td></tr>
+</table>
+
+<p>
+For this particular UPDATE test, MySQL is consistently
+five or ten times
+slower than PostgreSQL and SQLite. I do not know why. MySQL is
+normally a very fast engine. Perhaps this problem has been addressed
+in later versions of MySQL.
+</p>
+
+<h3>Test 9: 25000 UPDATEs with an index</h3>
+<blockquote>
+BEGIN;<br>
+UPDATE t2 SET b=468026 WHERE a=1;<br>
+UPDATE t2 SET b=121928 WHERE a=2;<br>
+<i>... 24996 lines omitted</i><br>
+UPDATE t2 SET b=35065 WHERE a=24999;<br>
+UPDATE t2 SET b=347393 WHERE a=25000;<br>
+COMMIT;<br>
+
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;18.797</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;8.134</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;3.520</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;3.104</td></tr>
+</table>
+
+<p>
+As recently as version 2.7.0, SQLite ran at about the same speed as
+MySQL on this test. But recent optimizations to SQLite have more
+than doubled speed of UPDATEs.
+</p>
+
+<h3>Test 10: 25000 text UPDATEs with an index</h3>
+<blockquote>
+BEGIN;<br>
+UPDATE t2 SET c='one hundred forty eight thousand three hundred eighty two' WHERE a=1;<br>
+UPDATE t2 SET c='three hundred sixty six thousand five hundred two' WHERE a=2;<br>
+<i>... 24996 lines omitted</i><br>
+UPDATE t2 SET c='three hundred eighty three thousand ninety nine' WHERE a=24999;<br>
+UPDATE t2 SET c='two hundred fifty six thousand eight hundred thirty' WHERE a=25000;<br>
+COMMIT;<br>
+
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;48.133</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;6.982</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;2.408</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;1.725</td></tr>
+</table>
+
+<p>
+Here again, version 2.7.0 of SQLite used to run at about the same speed
+as MySQL. But now version 2.7.6 is over two times faster than MySQL and
+over twenty times faster than PostgreSQL.
+</p>
+
+<p>
+In fairness to PostgreSQL, it started thrashing on this test. A
+knowledgeable administrator might be able to get PostgreSQL to run a lot
+faster here by tweaking and tuning the server a little.
+</p>
+
+<h3>Test 11: INSERTs from a SELECT</h3>
+<blockquote>
+BEGIN;<br>INSERT INTO t1 SELECT b,a,c FROM t2;<br>INSERT INTO t2 SELECT b,a,c FROM t1;<br>COMMIT;
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;61.364</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;1.537</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;2.787</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;1.599</td></tr>
+</table>
+
+<p>
+The asynchronous SQLite is just a shade slower than MySQL on this test.
+(MySQL seems to be especially adept at INSERT...SELECT statements.)
+The PostgreSQL engine is still thrashing - most of the 61 seconds it used
+were spent waiting on disk I/O.
+</p>
+
+<h3>Test 12: DELETE without an index</h3>
+<blockquote>
+DELETE FROM t2 WHERE c LIKE '%fifty%';
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;1.509</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;0.975</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;4.004</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;0.560</td></tr>
+</table>
+
+<p>
+The synchronous version of SQLite is the slowest of the group in this test,
+but the asynchronous version is the fastest.
+The difference is the extra time needed to execute fsync().
+</p>
+
+<h3>Test 13: DELETE with an index</h3>
+<blockquote>
+DELETE FROM t2 WHERE a>10 AND a<20000;
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;1.316</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;2.262</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;2.068</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;0.752</td></tr>
+</table>
+
+<p>
+This test is significant because it is one of the few where
+PostgreSQL is faster than MySQL. The asynchronous SQLite is,
+however, faster then both the other two.
+</p>
+
+<h3>Test 14: A big INSERT after a big DELETE</h3>
+<blockquote>
+INSERT INTO t2 SELECT * FROM t1;
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;13.168</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;1.815</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;3.210</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;1.485</td></tr>
+</table>
+
+<p>
+Some older versions of SQLite (prior to version 2.4.0)
+would show decreasing performance after a
+sequence of DELETEs followed by new INSERTs. As this test shows, the
+problem has now been resolved.
+</p>
+
+<h3>Test 15: A big DELETE followed by many small INSERTs</h3>
+<blockquote>
+BEGIN;<br>
+DELETE FROM t1;<br>
+INSERT INTO t1 VALUES(1,10719,'ten thousand seven hundred nineteen');<br>
+<i>... 11997 lines omitted</i><br>
+INSERT INTO t1 VALUES(11999,72836,'seventy two thousand eight hundred thirty six');<br>
+INSERT INTO t1 VALUES(12000,64231,'sixty four thousand two hundred thirty one');<br>
+COMMIT;<br>
+
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;4.556</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;1.704</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;0.618</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;0.406</td></tr>
+</table>
+
+<p>
+SQLite is very good at doing INSERTs within a transaction, which probably
+explains why it is so much faster than the other databases at this test.
+</p>
+
+<h3>Test 16: DROP TABLE</h3>
+<blockquote>
+DROP TABLE t1;<br>DROP TABLE t2;<br>DROP TABLE t3;
+</blockquote><table border=0 cellpadding=0 cellspacing=0>
+<tr><td>PostgreSQL:</td><td align="right">&nbsp;&nbsp;&nbsp;0.135</td></tr>
+<tr><td>MySQL:</td><td align="right">&nbsp;&nbsp;&nbsp;0.015</td></tr>
+<tr><td>SQLite 2.7.6:</td><td align="right">&nbsp;&nbsp;&nbsp;0.939</td></tr>
+<tr><td>SQLite 2.7.6 (nosync):</td><td align="right">&nbsp;&nbsp;&nbsp;0.254</td></tr>
+</table>
+
+<p>
+SQLite is slower than the other databases when it comes to dropping tables.
+This probably is because when SQLite drops a table, it has to go through and
+erase the records in the database file that deal with that table. MySQL and
+PostgreSQL, on the other hand, use separate files to represent each table
+so they can drop a table simply by deleting a file, which is much faster.
+</p>
+
+<p>
+On the other hand, dropping tables is not a very common operation
+so if SQLite takes a little longer, that is not seen as a big problem.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/speed.in?m=3bf464cea8e518c51">2014-04-01 15:02:43</a> UTC </small></i></p>
+
diff --git a/www/spellfix1.html b/www/spellfix1.html
new file mode 100644
index 0000000..db8f5af
--- /dev/null
+++ b/www/spellfix1.html
@@ -0,0 +1,754 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Spellfix1 Virtual Table</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Spellfix1 Virtual Table
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#search_refinements">2. Search Refinements</a></div>
+<div class="fancy-toc1"><a href="#virtual_table_details">3. Virtual Table Details</a></div>
+<div class="fancy-toc1"><a href="#algorithm">4. Algorithm</a></div>
+<div class="fancy-toc1"><a href="#configurable_edit_distance">5. Configurable Edit Distance</a></div>
+<div class="fancy-toc1"><a href="#dealing_with_unusual_and_difficult_spellings">6. Dealing With Unusual And Difficult Spellings</a></div>
+<div class="fancy-toc1"><a href="#auxiliary_functions">7. Auxiliary Functions</a></div>
+<div class="fancy-toc1"><a href="#the_editdist3_function">8. The editdist3 function</a></div>
+<div class="fancy-toc1"><a href="#the_editdist3_cost_table">9. The editdist3 COST table</a></div>
+<div class="fancy-toc1"><a href="#experimenting_with_the_editcost3_function">10. Experimenting with the editcost3() function</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>This spellfix1 <a href="vtab.html">virtual table</a> can be used to search
+a large vocabulary for close matches. For example, spellfix1
+can be used to suggest corrections to misspelled words. Or,
+it could be used with <a href="fts3.html#fts4">FTS4</a> to do full-text search using potentially
+misspelled words.
+
+</p><p>The implementation for the spellfix1 virtual table is held in the
+SQLite source tree in the miscellaneous extensions folder and in
+particular in the file
+<a href="http://www.sqlite.org/src/finfo?name=ext/misc/spellfix.c">ext/misc/spellfix1.c</a>.
+The spellfix1 virtual table is not included in the SQLite <a href="amalgamation.html">amalgamation</a>
+and is not a part of any standard SQLite build. It is a <a href="loadext.html">loadable extension</a>.
+
+</p><p>Once the spellfix1 extension is loaded, an instance of the spellfix1
+virtual table is created like this:
+
+</p><blockquote><pre>
+CREATE VIRTUAL TABLE demo USING spellfix1;
+</pre></blockquote>
+
+<p>The "spellfix1" term is the name of the spellfix module and must be
+entered as shown. The "demo" term is the
+name of the virtual table you will be creating and can be altered
+to suit the needs of your application. The virtual table is initially
+empty. In order for the virtual table to be useful, you will need to
+populate it with your vocabulary. Suppose you
+have a list of words in a table named "big_vocabulary". Then do this:
+
+</p><blockquote><pre>
+INSERT INTO demo(word) SELECT word FROM big_vocabulary;
+</pre></blockquote>
+
+<p>If you intend to use this virtual table in cooperation with an <a href="fts3.html#fts4">FTS4</a>
+table (for spelling correction of search terms) then you might extract
+the vocabulary using an <a href="fts3.html#fts4aux">fts4aux</a> table:
+
+</p><blockquote><pre>
+INSERT INTO demo(word) SELECT term FROM search_aux WHERE col='*';
+</pre></blockquote>
+
+<p>You can also provide the virtual table with a "rank" for each word.
+The "rank" is an estimate of how common the word is. Larger numbers
+mean the word is more common. If you omit the rank when populating
+the table, then a rank of 1 is assumed. But if you have rank
+information, you can supply it and the virtual table will show a
+slight preference for selecting more commonly used terms. To
+populate the rank from an fts4aux table "search_aux" do something
+like this:
+
+</p><blockquote><pre>
+INSERT INTO demo(word,rank)
+ SELECT term, documents FROM search_aux WHERE col='*';
+</pre></blockquote>
+
+<p>To query the virtual table, include a MATCH operator in the WHERE
+clause. For example:
+
+</p><blockquote><pre>
+SELECT word FROM demo WHERE word MATCH 'kennasaw';
+</pre></blockquote>
+
+<p>Using a dataset of American place names (derived from
+<a href="http://geonames.usgs.gov/domestic/download_data.htm">http://geonames.usgs.gov/domestic/download_data.htm</a>) the query above
+returns 20 results beginning with:
+
+</p><blockquote><pre>
+kennesaw
+kenosha
+kenesaw
+kenaga
+keanak
+</pre></blockquote>
+
+<p>If you append the character '*' to the end of the pattern, then
+a prefix search is performed. For example:
+
+</p><blockquote><pre>
+SELECT word FROM demo WHERE word MATCH 'kennes*';
+</pre></blockquote>
+
+<p>Yields 20 results beginning with:
+
+</p><blockquote><pre>
+kennesaw
+kennestone
+kenneson
+kenneys
+keanes
+keenes
+</pre></blockquote>
+
+<h1 id="search_refinements"><span>2. </span>Search Refinements</h1>
+
+<p>By default, the spellfix1 table returns no more than 20 results.
+(It might return less than 20 if there were fewer good matches.)
+You can change the upper bound on the number of returned rows by
+adding a "top=N" term to the WHERE clause of your query, where N
+is the new maximum. For example, to see the 5 best matches:
+
+</p><blockquote><pre>
+SELECT word FROM demo WHERE word MATCH 'kennes*' AND top=5;
+</pre></blockquote>
+
+<p>Each entry in the spellfix1 virtual table is associated with
+a particular language, identified by the integer "langid" column.
+The default langid is 0 and if no other actions are taken, the
+entire vocabulary is a part of the 0 language. But if your application
+needs to operate in multiple languages, then you can specify different
+vocabulary items for each language by specifying the langid field
+when populating the table. For example:
+
+</p><blockquote><pre>
+INSERT INTO demo(word,langid) SELECT word, 0 FROM en_vocabulary;
+INSERT INTO demo(word,langid) SELECT word, 1 FROM de_vocabulary;
+INSERT INTO demo(word,langid) SELECT word, 2 FROM fr_vocabulary;
+INSERT INTO demo(word,langid) SELECT word, 3 FROM ru_vocabulary;
+INSERT INTO demo(word,langid) SELECT word, 4 FROM cn_vocabulary;
+</pre></blockquote>
+
+<p>After the virtual table has been populated with items from multiple
+languages, specify the language of interest using a "langid=N" term
+in the WHERE clause of the query:
+
+</p><blockquote><pre>
+SELECT word FROM demo WHERE word MATCH 'hildes*' AND langid=1;
+</pre></blockquote>
+
+<p>Note that if you do not include the "langid=N" term in the WHERE clause,
+the search will be against language 0 (English in the example above.)
+All spellfix1 searches are against a single language id. There is no
+way to search all languages at once.
+
+
+</p><h1 id="virtual_table_details"><span>3. </span>Virtual Table Details</h1>
+
+<p>Each row in the spellfix1 virtual table has a unique rowid
+with seven columns plus five extra hidden columns.
+The columns are as follows:
+
+</p><dl>
+<dt><p><b>rowid</b></p></dt><dd>
+A unique integer number associated with each
+vocabulary item in the table. This can be used
+as a foreign key on other tables in the database.
+
+</dd><dt><p><b>word</b></p></dt><dd>
+The text of the word that matches the pattern.
+Both word and pattern can contain unicode characters
+and can be mixed case.
+
+</dd><dt><p><b>rank</b></p></dt><dd>
+This is the rank of the word, as specified in the
+original INSERT statement.
+
+
+</dd><dt><p><b>distance</b></p></dt><dd>
+This is an edit distance or Levenshtein distance going
+from the pattern to the word.
+
+</dd><dt><p><b>langid</b></p></dt><dd>
+This is the language-id of the word. All queries are
+against a single language-id, which defaults to 0.
+For any given query this value is the same on all rows.
+
+</dd><dt><p><b>score</b></p></dt><dd>
+The score is a combination of rank and distance. The
+idea is that a lower score is better. The virtual table
+attempts to find words with the lowest score and
+by default (unless overridden by ORDER BY) returns
+results in order of increasing score.
+
+</dd><dt><p><b>matchlen</b></p></dt><dd>
+In a prefix search, the matchlen is the number of characters in
+the string that match against the prefix. For a non-prefix search,
+this is the same as length(word).
+
+</dd><dt><p><b>phonehash</b></p></dt><dd>
+This column shows the phonetic hash prefix that was used to restrict
+the search. For any given query, this column should be the same for
+every row. This information is available for diagnostic purposes and
+is not normally considered useful in real applications.
+
+</dd><dt><p><b>top</b></p></dt><dd>
+(HIDDEN) For any query, this value is the same on all
+rows. It is an integer which is the maximum number of
+rows that will be output. The actually number of rows
+output might be less than this number, but it will never
+be greater. The default value for top is 20, but that
+can be changed for each query by including a term of
+the form "top=N" in the WHERE clause of the query.
+
+</dd><dt><p><b>scope</b></p></dt><dd>
+(HIDDEN) For any query, this value is the same on all
+rows. The scope is a measure of how widely the virtual
+table looks for matching words. Smaller values of
+scope cause a broader search. The scope is normally
+chosen automatically and is capped at 4. Applications
+can change the scope by including a term of the form
+"scope=N" in the WHERE clause of the query. Increasing
+the scope will make the query run faster, but will reduce
+the possible corrections.
+
+</dd><dt><p><b>srchcnt</b></p></dt><dd>
+(HIDDEN) For any query, this value is the same on all
+rows. This value is an integer which is the number of
+words examined using the edit-distance algorithm to
+find the top matches that are ultimately displayed. This
+value is for diagnostic use only.
+
+</dd><dt><p><b>soundslike</b></p></dt><dd>
+(HIDDEN) When inserting vocabulary entries, this field
+can be set to a spelling that matches what the word
+sounds like. See the DEALING WITH UNUSUAL AND DIFFICULT
+SPELLINGS section below for details.
+
+</dd><dt><p><b>command</b></p></dt><dd>
+(HIDDEN) The value of the "command" column is always NULL. However,
+applications can insert special strings into the "command" column in order
+to provoke certain behaviors in the spellfix1 virtual table.
+For example, inserting the string 'reset' into the "command" column
+will cause the virtual table to reread its edit distance weights
+(if there are any).
+</dd></dl>
+
+<h1 id="algorithm"><span>4. </span>Algorithm</h1>
+
+<p>The spellfix1 virtual table creates a single
+shadow table named "%_vocab" (where the % is replaced by the name of
+the virtual table; Ex: "demo_vocab" for the "demo" virtual table).
+the shadow table contains the following columns:
+
+</p><dl>
+<dt><p><b>id</b></p></dt><dd>
+The unique id (INTEGER PRIMARY KEY)
+
+</dd><dt><p><b>rank</b></p></dt><dd>
+The rank of word.
+
+</dd><dt><p><b>langid</b></p></dt><dd>
+The language id for this entry.
+
+</dd><dt><p><b>word</b></p></dt><dd>
+The original UTF8 text of the vocabulary word
+
+</dd><dt><p><b>k1</b></p></dt><dd>
+The word transliterated into lower-case ASCII.
+There is a standard table of mappings from non-ASCII
+characters into ASCII. Examples: "æ" -> "ae",
+"þ" -> "th", "ß" -> "ss", "á" -> "a", ... The
+accessory function spellfix1_translit(X) will do
+the non-ASCII to ASCII mapping. The built-in lower(X)
+function will convert to lower-case. Thus:
+k1 = lower(spellfix1_translit(word)).
+
+If the word is already all lower-case ASCII, then the k1 column
+will contain a NULL. This reduces the storage requirements for
+the %_vocab table and helps spellfix to run a little faster.
+Therefore, it is advantageous to populate as much of the spellfix
+table as possible using lower-case ASCII vocabulary.
+
+</dd><dt><p><b>k2</b></p></dt><dd>
+This field holds a phonetic code derived from coalesce(k1,word).
+Letters that have similar sounds are mapped into the same symbol.
+For example, all vowels and vowel clusters become the
+single symbol "A". And the letters "p", "b", "f", and
+"v" all become "B". All nasal sounds are represented
+as "N". And so forth. The mapping is based on
+ideas found in Soundex, Metaphone, and other
+long-standing phonetic matching systems. This key can
+be generated by the function spellfix1_phonehash(X).
+Hence: k2 = spellfix1_phonehash(coalesce(k1,word))
+</dd></dl>
+
+<p>There is also a function for computing the Wagner edit distance or the
+Levenshtein distance between a pattern and a word. This function
+is exposed as spellfix1_editdist(X,Y). The edit distance function
+returns the "cost" of converting X into Y. Some transformations
+cost more than others. Changing one vowel into a different vowel,
+for example is relatively cheap, as is doubling a constant, or
+omitting the second character of a double-constant. Other transformations
+or more expensive. The idea is that the edit distance function returns
+a low cost for words that are similar and a higher cost for words
+that are further apart. In this implementation, the maximum cost
+of any single-character edit (delete, insert, or substitute) is 100,
+with lower costs for some edits (such as transforming vowels).
+
+</p><p>The "score" for a comparison is the edit distance between the pattern
+and the word, adjusted down by the base-2 logarithm of the word rank.
+For example, a match with distance 100 but rank 1000 would have a
+score of 122 (= 100 - log2(1000) + 32) whereas a match with distance
+100 with a rank of 1 would have a score of 131 (100 - log2(1) + 32).
+(NB: The constant 32 is added to each score to keep it from going
+negative in case the edit distance is zero.) In this way, frequently
+used words get a slightly lower cost which tends to move them toward
+the top of the list of alternative spellings.
+
+</p><p>A straightforward implementation of a spelling corrector would be
+to compare the search term against every word in the vocabulary
+and select the 20 with the lowest scores. However, there will
+typically be hundreds of thousands or millions of words in the
+vocabulary, and so this approach is not fast enough.
+
+</p><p>Suppose the term that is being spell-corrected is X. To limit
+the search space, X is converted to a k2-like key using the
+equivalent of:
+
+</p><blockquote><pre>
+ key = spellfix1_phonehash(lower(spellfix1_translit(X)))
+</pre></blockquote>
+
+<p>This key is then limited to "scope" characters. The default scope
+value is 4, but an alternative scope can be specified using the
+"scope=N" term in the WHERE clause. After the key has been truncated,
+the edit distance is run against every term in the vocabulary that
+has a k2 value that begins with the abbreviated key.
+
+</p><p>For example, suppose the input word is "Paskagula". The phonetic
+key is "BACACALA" which is then truncated to 4 characters "BACA".
+The edit distance is then run on the 4980 entries (out of
+272,597 entries total) of the vocabulary whose k2 values begin with
+BACA, yielding "Pascagoula" as the best match.
+
+</p><p>Only terms of the vocabulary with a matching langid are searched.
+Hence, the same table can contain entries from multiple languages
+and only the requested language will be used. The default langid
+is 0.
+
+<a name="configeditdist"></a>
+
+</p><h1 id="configurable_edit_distance"><span>5. </span>Configurable Edit Distance</h1>
+
+<p>The built-in Wagner edit-distance function with fixed weights can be
+replaced by the <a href="spellfix1.html#editdist3">editdist3()</a> edit-distance function
+with application-defined weights and support for unicode, by specifying
+the "edit_cost_table=<i>TABLENAME</i>" parameter to the spellfix1 module
+when the virtual table is created.
+For example:
+
+</p><blockquote><pre>
+CREATE VIRTUAL TABLE demo2 USING spellfix1(edit_cost_table=APPCOST);
+</pre></blockquote>
+
+<p>The <a href="spellfix1.html#editdist3">editdist3()</a> edit-distance function can also be selected or
+deselected at run-time by inserting an appropriate string into the
+"command" column of the virtual table:</p>
+
+<blockquote><pre>
+INSERT INTO demo2(command) VALUES('edit_cost_table=APPCOST');
+</pre></blockquote>
+
+
+<p>In the examples above, the APPCOST table would be interrogated to find
+the edit distance coefficients. It is the presence of the "edit_cost_table="
+parameter to the spellfix1 module name that causes editdist3() to be used
+in place of the built-in edit distance function. If APPCOST is an empty
+string, then the built-in Wagner edit-distance function is used.
+
+</p><p>The edit distance coefficients are normally read from the APPCOST table
+once and there after stored in memory. Hence, run-time changes to the
+APPCOST table will not normally affect the edit distance results.
+However, inserting the special string 'reset' into the "command" column of the
+virtual table causes the edit distance coefficients to be reread the
+APPCOST table. Hence, applications should run a SQL statement similar
+to the following when changes to the APPCOST table occur:
+
+</p><blockquote>
+INSERT INTO demo2(command) VALUES("reset");
+</blockquote>
+
+<h1 id="dealing_with_unusual_and_difficult_spellings"><span>6. </span>Dealing With Unusual And Difficult Spellings</h1>
+
+<p>The algorithm above works quite well for most cases, but there are
+exceptions. These exceptions can be dealt with by making additional
+entries in the virtual table using the "soundslike" column.
+
+</p><p>For example, many words of Greek origin begin with letters "ps" where
+the "p" is silent. Ex: psalm, pseudonym, psoriasis, psyche. In
+another example, many Scottish surnames can be spelled with an
+initial "Mac" or "Mc". Thus, "MacKay" and "McKay" are both pronounced
+the same.
+
+</p><p>Accommodation can be made for words that are not spelled as they
+sound by making additional entries into the virtual table for the
+same word, but adding an alternative spelling in the "soundslike"
+column. For example, the canonical entry for "psalm" would be this:
+
+</p><blockquote><pre>
+ INSERT INTO demo(word) VALUES('psalm');
+</pre></blockquote>
+
+<p>To enhance the ability to correct the spelling of "salm" into
+"psalm", make an addition entry like this:
+
+</p><blockquote><pre>
+ INSERT INTO demo(word,soundslike) VALUES('psalm','salm');
+</pre></blockquote>
+
+<p>It is ok to make multiple entries for the same word as long as
+each entry has a different soundslike value. Note that if no
+soundslike value is specified, the soundslike defaults to the word
+itself.
+
+</p><p>Listed below are some cases where it might make sense to add additional
+soundslike entries. The specific entries will depend on the application
+and the target language.
+
+</p><ul>
+<li>Silent "p" in words beginning with "ps": psalm, psyche
+</li><li>Silent "p" in words beginning with "pn": pneumonia, pneumatic
+</li><li>Silent "p" in words beginning with "pt": pterodactyl, ptolemaic
+</li><li>Silent "d" in words beginning with "dj": djinn, Djikarta
+</li><li>Silent "k" in words beginning with "kn": knight, Knuthson
+</li><li>Silent "g" in words beginning with "gn": gnarly, gnome, gnat
+</li><li>"Mac" versus "Mc" beginning Scottish surnames
+</li><li>"Tch" sounds in Slavic words: Tchaikovsky vs. Chaykovsky
+</li><li>The letter "j" pronounced like "h" in Spanish: LaJolla
+</li><li>Words beginning with "wr" versus "r": write vs. rite
+</li><li>Miscellaneous problem words such as "debt", "tsetse",
+ "Nguyen", "Van Nuyes".
+</li></ul>
+
+<h1 id="auxiliary_functions"><span>7. </span>Auxiliary Functions</h1>
+
+<p>The source code module that implements the spellfix1 virtual table also
+implements several SQL functions that might be useful to applications
+that employ spellfix1 or for testing or diagnostic work while developing
+applications that use spellfix1. The following auxiliary functions are
+available:
+
+</p><dl>
+<dt><p><b>editdist3(P,W)<br>editdist3(P,W,L)<br>editdist3(T)</b></p></dt><dd>
+These routines provide direct access to the version of the Wagner
+edit-distance function that allows for application-defined weights
+on edit operations. The first two forms of this function compare
+pattern P against word W and return the edit distance. In the first
+function, the langid is assumed to be 0 and in the second, the
+langid is given by the L parameter. The third form of this function
+reloads edit distance coefficients from the table named by T.
+
+</dd><dt><p><b>spellfix1_editdist(P,W)</b></p></dt><dd>
+This routine provides access to the built-in Wagner edit-distance
+function that uses default, fixed costs. The value returned is
+the edit distance needed to transform W into P.
+
+</dd><dt><p><b>spellfix1_phonehash(X)</b></p></dt><dd>
+This routine constructs a phonetic hash of the pure ascii input word X
+and returns that hash. This routine is used internally by spellfix1 in
+order to transform the K1 column of the shadow table into the K2
+column.
+
+</dd><dt><p><b>spellfix1_scriptcode(X)</b></p></dt><dd>
+Given an input string X, this routine attempts to determine the dominant
+script of that input and returns the ISO-15924 numeric code for that
+script. The current implementation understands the following scripts:
+<ul>
+<li> 215 - Latin
+</li><li> 220 - Cyrillic
+</li><li> 200 - Greek
+</li></ul>
+Additional language codes might be added in future releases.
+
+</dd><dt><p><b>spellfix1_translit(X)</b></p></dt><dd>
+This routine transliterates unicode text into pure ascii, returning
+the pure ascii representation of the input text X. This is the function
+that is used internally to transform vocabulary words into the K1
+column of the shadow table.
+
+</dd></dl>
+
+<a name="editdist3"></a>
+
+<h1 id="the_editdist3_function"><span>8. </span>The editdist3 function</h1>
+
+<p>The editdist3 algorithm is a function that computes the minimum edit
+distance (a.k.a. the Levenshtein distance) between two input strings.
+The editdist3 algorithm is a configurable alternative to the default
+edit distance function of spellfix1.
+Features of editdist3 include:
+
+</p><ul>
+<li><p>It works with unicode (UTF8) text.
+
+</p></li><li><p>A table of insertion, deletion, and substitution costs can be
+ provided by the application.
+
+</p></li><li><p>Multi-character insertions, deletions, and substitutions can be
+ enumerated in the cost table.
+</p></li></ul>
+
+<h1 id="the_editdist3_cost_table"><span>9. </span>The editdist3 COST table</h1>
+
+<p>To program the costs of editdist3, create a table such as the following:
+
+</p><blockquote><pre>
+CREATE TABLE editcost(
+ iLang INT, -- The language ID
+ cFrom TEXT, -- Convert text from this
+ cTo TEXT, -- Convert text into this
+ iCost INT -- The cost of doing the conversion
+);
+</pre></blockquote>
+
+<p>The cost table can be named anything you want - it does not have to be
+called "editcost". And the table can contain additional columns.
+The only requirement is that the
+table must contain the four columns show above, with exactly the names shown.
+
+</p><p>The iLang column is a non-negative integer that identifies a set of costs
+appropriate for a particular language. The editdist3 function will only use
+a single iLang value for any given edit-distance computation. The default
+value is 0. It is recommended that applications that only need to use a
+single language always use iLang==0 for all entries.
+
+</p><p>The iCost column is the numeric cost of transforming cFrom into cTo. This
+value should be a non-negative integer, and should probably be less than 100.
+The default single-character insertion and deletion costs are 100 and the
+default single-character to single-character substitution cost is 150. A
+cost of 10000 or more is considered "infinite" and causes the rule to be
+ignored.
+
+</p><p>The cFrom and cTo columns show edit transformation strings. Either or both
+columns may contain more than one character. Or either column (but not both)
+may hold an empty string. When cFrom is empty, that is the cost of inserting
+cTo. When cTo is empty, that is the cost of deleting cFrom.
+
+</p><p>In the spellfix1 algorithm, cFrom is the text as the user entered it and
+cTo is the correctly spelled text as it exists in the database. The goal
+of the editdist3 algorithm is to determine how close the user-entered text is
+to the dictionary text.
+
+</p><p>There are three special-case entries in the cost table:
+
+</p><table border="1" align="center">
+<tr><th>cFrom</th><th>cTo</th><th>Meaning</th></tr>
+<tr><td>''</td><td>'?'</td><td>The default insertion cost</td></tr>
+<tr><td>'?'</td><td>''</td><td>The default deletion cost</td></tr>
+<tr><td>'?'</td><td>'?'</td><td>The default substitution cost</td></tr>
+</table>
+
+<p>If any of the special-case entries shows above are omitted, then the
+value of 100 is used for insertion and deletion and 150 is used for
+substitution. To disable the default insertion, deletion, and/or substitution
+set their respective cost to 10000 or more.
+
+</p><p>Other entries in the cost table specific transforms for particular
+characters.
+The cost of specific transforms should be less than the default costs, or else
+the default costs will take precedence and the specific transforms will never
+be used.
+
+</p><p>Some example, cost table entries:
+
+</p><blockquote><pre>
+INSERT INTO editcost(iLang, cFrom, cTo, iCost)
+VALUES(0, 'a', 'ä', 5);
+</pre></blockquote>
+
+<p>The rule above says that the letter "a" in user input can be matched against
+the letter "ä" in the dictionary with a penalty of 5.
+
+</p><blockquote><pre>
+INSERT INTO editcost(iLang, cFrom, cTo, iCost)
+VALUES(0, 'ss', 'ß', 8);
+</pre></blockquote>
+
+<p>The number of characters in cFrom and cTo do not need to be the same. The
+rule above says that "ss" on user input will match "ß" with a penalty of 8.
+
+</p><h1 id="experimenting_with_the_editcost3_function"><span>10. </span>Experimenting with the editcost3() function</h1>
+
+<p>The spellfix1 virtual table
+uses editdist3 if the "edit_cost_table=TABLE" option
+is specified as an argument when the spellfix1 virtual table is created.
+But editdist3 can also be tested directly using the built-in "editdist3()"
+SQL function. The editdist3() SQL function has 3 forms:
+
+</p><ol>
+<li> editdist3('TABLENAME');
+</li><li> editdist3('string1', 'string2');
+</li><li> editdist3('string1', 'string2', langid);
+</li></ol>
+
+<p>The first form loads the edit distance coefficients from a table called
+'TABLENAME'. Any prior coefficients are discarded. So when experimenting
+with weights and the weight table changes, simply rerun the single-argument
+form of editdist3() to reload revised coefficients. Note that the
+edit distance
+weights used by the editdist3() SQL function are independent from the
+weights used by the spellfix1 virtual table.
+
+</p><p>The second and third forms return the computed edit distance between strings
+'string1' and "string2'. In the second form, a language id of 0 is used.
+The language id is specified in the third form.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/spellfix1.in?m=0c2a97600290fd17b">2018-02-14 14:14:05</a> UTC </small></i></p>
+
diff --git a/www/sqlanalyze.html b/www/sqlanalyze.html
new file mode 100644
index 0000000..9643f24
--- /dev/null
+++ b/www/sqlanalyze.html
@@ -0,0 +1,1538 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The sqlite3_analyzer.exe Utility Program</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The sqlite3_analyzer.exe Utility Program
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#the_sqlite3_analyzer_exe_utility_program">1. The sqlite3_analyzer.exe Utility Program</a></div>
+<div class="fancy-toc2"><a href="#implementation">1.1. Implementation</a></div>
+<div class="fancy-toc2"><a href="#example_output">1.2. Example Output</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+<h1 id="the_sqlite3_analyzer_exe_utility_program"><span>1. </span>The sqlite3_analyzer.exe Utility Program</h1>
+
+<p>
+The <tt>sqlite3_analyzer.exe</tt> binary is a command-line utility program
+that measures and displays how much and how efficiently space is used by
+individual tables and indexes with an SQLite database file.
+Example usage:
+
+</p><blockquote><pre>
+sqlite3_analyzer database.sqlite
+</pre></blockquote>
+
+<p>
+The output is a human-readable ASCII text report that provides information
+on the space utilization of the database file. The report is intended to
+be self-explanatory, though there is some
+<a href="sqlanalyze.html#defs">additional explanation</a> of the
+various parameters reported toward the end of the report.
+
+</p><p>
+The output is also valid SQL. Most of the report text is contained within
+a header comment, with various SQL statements that create and initialize
+a database at the
+<a href="sqlanalyze.html#sqlx">end of the report</a>. The constructed database contains
+the raw data from which the report was extracted. Hence the original
+report can be read into an instance of the <a href="cli.html">command-line shell</a> and then
+the raw data can be queried to dig deeper into the space utilization of
+a particular database file.
+
+</p><h2 id="implementation"><span>1.1. </span>Implementation</h2>
+
+<p>
+The <tt>sqlite3_analyzer.exe</tt> program is a
+<a href="http://www.tcl.tk/">TCL</a> program that uses the <a href="dbstat.html">dbstat virtual table</a>
+to gather information about the database file and then format that
+information neatly.
+</p>
+
+
+<h2 id="example_output"><span>1.2. </span>Example Output</h2>
+
+<p>The following is sqlite3_analyzer output for an example
+places.sqlite database used by Firefox.
+
+</p><blockquote><pre>
+/** Disk-Space Utilization Report For &#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;/places.sqlite
+
+Page size in bytes................................ 32768
+Pages in the whole file (measured)................ 221
+Pages in the whole file (calculated).............. 221
+Pages that store data............................. 221 100.0%
+Pages on the freelist (per header)................ 0 0.0%
+Pages on the freelist (calculated)................ 0 0.0%
+Pages of auto-vacuum overhead..................... 0 0.0%
+Number of tables in the database.................. 14
+Number of indices................................. 23
+Number of defined indices......................... 17
+Number of implied indices......................... 6
+Size of the file in bytes......................... 7241728
+Bytes of user payload stored...................... 2503069 34.6%
+
+*** Page counts for all tables with their indices *****************************
+
+MOZ_PLACES........................................ 142 64.3%
+MOZ_HISTORYVISITS................................. 41 18.6%
+MOZ_FAVICONS...................................... 15 6.8%
+MOZ_BOOKMARKS..................................... 5 2.3%
+MOZ_KEYWORDS...................................... 3 1.4%
+MOZ_ANNO_ATTRIBUTES............................... 2 0.90%
+MOZ_ANNOS......................................... 2 0.90%
+MOZ_BOOKMARKS_ROOTS............................... 2 0.90%
+MOZ_HOSTS......................................... 2 0.90%
+MOZ_INPUTHISTORY.................................. 2 0.90%
+MOZ_ITEMS_ANNOS................................... 2 0.90%
+SQLITE_SCHEMA..................................... 1 0.45%
+SQLITE_SEQUENCE................................... 1 0.45%
+SQLITE_STAT1...................................... 1 0.45%
+
+*** Page counts for all tables and indices separately *************************
+
+MOZ_PLACES........................................ 63 28.5%
+MOZ_PLACES_URL_UNIQUEINDEX........................ 37 16.7%
+MOZ_HISTORYVISITS................................. 13 5.9%
+MOZ_FAVICONS...................................... 12 5.4%
+MOZ_HISTORYVISITS_PLACEDATEINDEX.................. 12 5.4%
+MOZ_PLACES_HOSTINDEX.............................. 11 5.0%
+MOZ_HISTORYVISITS_DATEINDEX....................... 10 4.5%
+MOZ_PLACES_GUID_UNIQUEINDEX....................... 9 4.1%
+MOZ_PLACES_LASTVISITDATEINDEX..................... 7 3.2%
+MOZ_HISTORYVISITS_FROMINDEX....................... 6 2.7%
+MOZ_PLACES_FAVICONINDEX........................... 5 2.3%
+MOZ_PLACES_FRECENCYINDEX.......................... 5 2.3%
+MOZ_PLACES_VISITCOUNT............................. 5 2.3%
+SQLITE_AUTOINDEX_MOZ_FAVICONS_1................... 3 1.4%
+MOZ_ANNO_ATTRIBUTES............................... 1 0.45%
+MOZ_ANNOS......................................... 1 0.45%
+MOZ_ANNOS_PLACEATTRIBUTEINDEX..................... 1 0.45%
+MOZ_BOOKMARKS..................................... 1 0.45%
+MOZ_BOOKMARKS_GUID_UNIQUEINDEX.................... 1 0.45%
+MOZ_BOOKMARKS_ITEMINDEX........................... 1 0.45%
+MOZ_BOOKMARKS_ITEMLASTMODIFIEDINDEX............... 1 0.45%
+MOZ_BOOKMARKS_PARENTINDEX......................... 1 0.45%
+MOZ_BOOKMARKS_ROOTS............................... 1 0.45%
+MOZ_HOSTS......................................... 1 0.45%
+MOZ_INPUTHISTORY.................................. 1 0.45%
+MOZ_ITEMS_ANNOS................................... 1 0.45%
+MOZ_ITEMS_ANNOS_ITEMATTRIBUTEINDEX................ 1 0.45%
+MOZ_KEYWORDS...................................... 1 0.45%
+MOZ_KEYWORDS_PLACEPOSTDATA_UNIQUEINDEX............ 1 0.45%
+SQLITE_AUTOINDEX_MOZ_ANNO_ATTRIBUTES_1............ 1 0.45%
+SQLITE_AUTOINDEX_MOZ_BOOKMARKS_ROOTS_1............ 1 0.45%
+SQLITE_AUTOINDEX_MOZ_HOSTS_1...................... 1 0.45%
+SQLITE_AUTOINDEX_MOZ_INPUTHISTORY_1............... 1 0.45%
+SQLITE_AUTOINDEX_MOZ_KEYWORDS_1................... 1 0.45%
+SQLITE_SCHEMA..................................... 1 0.45%
+SQLITE_SEQUENCE................................... 1 0.45%
+SQLITE_STAT1...................................... 1 0.45%
+
+*** All tables and indices ****************************************************
+
+Percentage of total database...................... 100.0%
+Number of entries................................. 154969
+Bytes of storage consumed......................... 7241728
+Bytes of payload.................................. 4969404 68.6%
+Average payload per entry......................... 32.07
+Average unused bytes per entry.................... 11.15
+Average fanout.................................... 14.00
+Maximum payload per entry......................... 7640
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 14
+Primary pages used................................ 207
+Overflow pages used............................... 0
+Total pages used.................................. 221
+Unused bytes on index pages....................... 448010 97.7%
+Unused bytes on primary pages..................... 1280642 18.9%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 1728652 23.9%
+
+*** All tables ****************************************************************
+
+Percentage of total database...................... 44.8%
+Number of entries................................. 28530
+Bytes of storage consumed......................... 3244032
+Bytes of payload.................................. 2508257 77.3%
+Average payload per entry......................... 87.92
+Average unused bytes per entry.................... 20.13
+Average fanout.................................... 28.00
+Maximum payload per entry......................... 7640
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 3
+Primary pages used................................ 96
+Overflow pages used............................... 0
+Total pages used.................................. 99
+Unused bytes on index pages....................... 97551 99.23%
+Unused bytes on primary pages..................... 476741 15.2%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 574292 17.7%
+
+*** All indices ***************************************************************
+
+Percentage of total database...................... 55.2%
+Number of entries................................. 126439
+Bytes of storage consumed......................... 3997696
+Bytes of payload.................................. 2461147 61.6%
+Average payload per entry......................... 19.47
+Average unused bytes per entry.................... 9.13
+Average fanout.................................... 11.00
+Maximum payload per entry......................... 7259
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 11
+Primary pages used................................ 111
+Overflow pages used............................... 0
+Total pages used.................................. 122
+Unused bytes on index pages....................... 350459 97.2%
+Unused bytes on primary pages..................... 803901 22.1%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 1154360 28.9%
+
+*** Table MOZ_ANNO_ATTRIBUTES and all its indices *****************************
+
+Percentage of total database...................... 0.90%
+Number of entries................................. 24
+Bytes of storage consumed......................... 65536
+Bytes of payload.................................. 721 1.1%
+Average payload per entry......................... 30.04
+Average unused bytes per entry.................... 2696.46
+Maximum payload per entry......................... 43
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 2
+Overflow pages used............................... 0
+Total pages used.................................. 2
+Unused bytes on primary pages..................... 64715 98.7%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 64715 98.7%
+
+*** Table MOZ_ANNO_ATTRIBUTES w/o any indices *********************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 12
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 355 1.1%
+B-tree depth...................................... 1
+Average payload per entry......................... 29.58
+Average unused bytes per entry.................... 2696.42
+Maximum payload per entry......................... 42
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 32357 98.7%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32357 98.7%
+
+*** Index SQLITE_AUTOINDEX_MOZ_ANNO_ATTRIBUTES_1 of table MOZ_ANNO_ATTRIBUTES *
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 12
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 366 1.1%
+B-tree depth...................................... 1
+Average payload per entry......................... 30.50
+Average unused bytes per entry.................... 2696.50
+Maximum payload per entry......................... 43
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 32358 98.7%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32358 98.7%
+
+*** Table MOZ_ANNOS and all its indices ***************************************
+
+Percentage of total database...................... 0.90%
+Number of entries................................. 390
+Bytes of storage consumed......................... 65536
+Bytes of payload.................................. 13986 21.3%
+Average payload per entry......................... 35.86
+Average unused bytes per entry.................... 128.22
+Maximum payload per entry......................... 127
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 2
+Overflow pages used............................... 0
+Total pages used.................................. 2
+Unused bytes on primary pages..................... 50006 76.3%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 50006 76.3%
+
+*** Table MOZ_ANNOS w/o any indices *******************************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 195
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 12115 37.0%
+B-tree depth...................................... 1
+Average payload per entry......................... 62.13
+Average unused bytes per entry.................... 101.04
+Maximum payload per entry......................... 127
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 19702 60.1%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 19702 60.1%
+
+*** Index MOZ_ANNOS_PLACEATTRIBUTEINDEX of table MOZ_ANNOS ********************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 195
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 1871 5.7%
+B-tree depth...................................... 1
+Average payload per entry......................... 9.59
+Average unused bytes per entry.................... 155.41
+Maximum payload per entry......................... 10
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 30304 92.5%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 30304 92.5%
+
+*** Table MOZ_BOOKMARKS and all its indices ***********************************
+
+Percentage of total database...................... 2.3%
+Number of entries................................. 1565
+Bytes of storage consumed......................... 163840
+Bytes of payload.................................. 37104 22.6%
+Average payload per entry......................... 23.71
+Average unused bytes per entry.................... 77.62
+Maximum payload per entry......................... 518
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 5
+Overflow pages used............................... 0
+Total pages used.................................. 5
+Unused bytes on primary pages..................... 121475 74.1%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 121475 74.1%
+
+*** Table MOZ_BOOKMARKS w/o any indices ***************************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 313
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 21937 66.9%
+B-tree depth...................................... 1
+Average payload per entry......................... 70.09
+Average unused bytes per entry.................... 29.90
+Maximum payload per entry......................... 518
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 9358 28.6%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 9358 28.6%
+
+*** Indices of table MOZ_BOOKMARKS ********************************************
+
+Percentage of total database...................... 1.8%
+Number of entries................................. 1252
+Bytes of storage consumed......................... 131072
+Bytes of payload.................................. 15167 11.6%
+Average payload per entry......................... 12.11
+Average unused bytes per entry.................... 89.55
+Maximum payload per entry......................... 17
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 4
+Overflow pages used............................... 0
+Total pages used.................................. 4
+Unused bytes on primary pages..................... 112117 85.5%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 112117 85.5%
+
+*** Index MOZ_BOOKMARKS_GUID_UNIQUEINDEX of table MOZ_BOOKMARKS ***************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 313
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 5207 15.9%
+B-tree depth...................................... 1
+Average payload per entry......................... 16.64
+Average unused bytes per entry.................... 85.03
+Maximum payload per entry......................... 17
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 26614 81.2%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 26614 81.2%
+
+*** Index MOZ_BOOKMARKS_ITEMINDEX of table MOZ_BOOKMARKS **********************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 313
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 2547 7.8%
+B-tree depth...................................... 1
+Average payload per entry......................... 8.14
+Average unused bytes per entry.................... 93.53
+Maximum payload per entry......................... 9
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 29274 89.3%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 29274 89.3%
+
+*** Index MOZ_BOOKMARKS_ITEMLASTMODIFIEDINDEX of table MOZ_BOOKMARKS **********
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 313
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 5020 15.3%
+B-tree depth...................................... 1
+Average payload per entry......................... 16.04
+Average unused bytes per entry.................... 85.63
+Maximum payload per entry......................... 17
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 26801 81.8%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 26801 81.8%
+
+*** Index MOZ_BOOKMARKS_PARENTINDEX of table MOZ_BOOKMARKS ********************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 313
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 2393 7.3%
+B-tree depth...................................... 1
+Average payload per entry......................... 7.65
+Average unused bytes per entry.................... 94.02
+Maximum payload per entry......................... 9
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 29428 89.8%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 29428 89.8%
+
+*** Table MOZ_BOOKMARKS_ROOTS and all its indices *****************************
+
+Percentage of total database...................... 0.90%
+Number of entries................................. 10
+Bytes of storage consumed......................... 65536
+Bytes of payload.................................. 94 0.14%
+Average payload per entry......................... 9.40
+Average unused bytes per entry.................... 6539.10
+Maximum payload per entry......................... 11
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 2
+Overflow pages used............................... 0
+Total pages used.................................. 2
+Unused bytes on primary pages..................... 65391 99.78%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 65391 99.78%
+
+*** Table MOZ_BOOKMARKS_ROOTS w/o any indices *********************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 5
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 47 0.14%
+B-tree depth...................................... 1
+Average payload per entry......................... 9.40
+Average unused bytes per entry.................... 6538.60
+Maximum payload per entry......................... 11
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 32693 99.77%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32693 99.77%
+
+*** Index SQLITE_AUTOINDEX_MOZ_BOOKMARKS_ROOTS_1 of table MOZ_BOOKMARKS_ROOTS *
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 5
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 47 0.14%
+B-tree depth...................................... 1
+Average payload per entry......................... 9.40
+Average unused bytes per entry.................... 6539.60
+Maximum payload per entry......................... 11
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 32698 99.79%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32698 99.79%
+
+*** Table MOZ_FAVICONS and all its indices ************************************
+
+Percentage of total database...................... 6.8%
+Number of entries................................. 941
+Bytes of storage consumed......................... 491520
+Bytes of payload.................................. 332765 67.7%
+Average payload per entry......................... 353.63
+Average unused bytes per entry.................... 164.00
+Average fanout.................................... 7.00
+Maximum payload per entry......................... 7640
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 2
+Primary pages used................................ 13
+Overflow pages used............................... 0
+Total pages used.................................. 15
+Unused bytes on index pages....................... 65340 99.70%
+Unused bytes on primary pages..................... 88980 20.9%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 154320 31.4%
+
+*** Table MOZ_FAVICONS w/o any indices ****************************************
+
+Percentage of total database...................... 5.4%
+Number of entries................................. 471
+Bytes of storage consumed......................... 393216
+Bytes of payload.................................. 297630 75.7%
+B-tree depth...................................... 2
+Average payload per entry......................... 631.91
+Average unused bytes per entry.................... 196.60
+Average fanout.................................... 11.00
+Non-sequential pages.............................. 6 54.5%
+Maximum payload per entry......................... 7640
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 11
+Overflow pages used............................... 0
+Total pages used.................................. 12
+Unused bytes on index pages....................... 32676 99.72%
+Unused bytes on primary pages..................... 59923 16.6%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 92599 23.5%
+
+*** Index SQLITE_AUTOINDEX_MOZ_FAVICONS_1 of table MOZ_FAVICONS ***************
+
+Percentage of total database...................... 1.4%
+Number of entries................................. 470
+Bytes of storage consumed......................... 98304
+Bytes of payload.................................. 35135 35.7%
+B-tree depth...................................... 2
+Average payload per entry......................... 74.76
+Average unused bytes per entry.................... 131.32
+Average fanout.................................... 3.00
+Non-sequential pages.............................. 1 50.0%
+Maximum payload per entry......................... 7259
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 2
+Overflow pages used............................... 0
+Total pages used.................................. 3
+Unused bytes on index pages....................... 32664 99.68%
+Unused bytes on primary pages..................... 29057 44.3%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 61721 62.8%
+
+*** Table MOZ_HISTORYVISITS and all its indices *******************************
+
+Percentage of total database...................... 18.6%
+Number of entries................................. 63470
+Bytes of storage consumed......................... 1343488
+Bytes of payload.................................. 882233 65.7%
+Average payload per entry......................... 13.90
+Average unused bytes per entry.................... 3.76
+Average fanout.................................... 10.00
+Maximum payload per entry......................... 21
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 4
+Primary pages used................................ 37
+Overflow pages used............................... 0
+Total pages used.................................. 41
+Unused bytes on index pages....................... 130482 99.55%
+Unused bytes on primary pages..................... 108158 8.9%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 238640 17.8%
+
+*** Table MOZ_HISTORYVISITS w/o any indices ***********************************
+
+Percentage of total database...................... 5.9%
+Number of entries................................. 15873
+Bytes of storage consumed......................... 425984
+Bytes of payload.................................. 308447 72.4%
+B-tree depth...................................... 2
+Average payload per entry......................... 19.43
+Average unused bytes per entry.................... 2.40
+Average fanout.................................... 12.00
+Non-sequential pages.............................. 8 66.7%
+Maximum payload per entry......................... 21
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 12
+Overflow pages used............................... 0
+Total pages used.................................. 13
+Unused bytes on index pages....................... 32668 99.69%
+Unused bytes on primary pages..................... 5435 1.4%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 38103 8.9%
+
+*** Indices of table MOZ_HISTORYVISITS ****************************************
+
+Percentage of total database...................... 12.7%
+Number of entries................................. 47597
+Bytes of storage consumed......................... 917504
+Bytes of payload.................................. 573786 62.5%
+Average payload per entry......................... 12.06
+Average unused bytes per entry.................... 4.21
+Average fanout.................................... 9.00
+Maximum payload per entry......................... 17
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 3
+Primary pages used................................ 25
+Overflow pages used............................... 0
+Total pages used.................................. 28
+Unused bytes on index pages....................... 97814 99.50%
+Unused bytes on primary pages..................... 102723 12.5%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 200537 21.9%
+
+*** Index MOZ_HISTORYVISITS_DATEINDEX of table MOZ_HISTORYVISITS **************
+
+Percentage of total database...................... 4.5%
+Number of entries................................. 15865
+Bytes of storage consumed......................... 327680
+Bytes of payload.................................. 206221 62.9%
+B-tree depth...................................... 2
+Average payload per entry......................... 13.00
+Average unused bytes per entry.................... 4.65
+Average fanout.................................... 10.00
+Non-sequential pages.............................. 6 66.7%
+Maximum payload per entry......................... 13
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 9
+Overflow pages used............................... 0
+Total pages used.................................. 10
+Unused bytes on index pages....................... 32596 99.48%
+Unused bytes on primary pages..................... 41128 13.9%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 73724 22.5%
+
+*** Index MOZ_HISTORYVISITS_FROMINDEX of table MOZ_HISTORYVISITS **************
+
+Percentage of total database...................... 2.7%
+Number of entries................................. 15869
+Bytes of storage consumed......................... 196608
+Bytes of payload.................................. 100292 51.0%
+B-tree depth...................................... 2
+Average payload per entry......................... 6.32
+Average unused bytes per entry.................... 3.06
+Average fanout.................................... 6.00
+Non-sequential pages.............................. 4 80.0%
+Maximum payload per entry......................... 7
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 5
+Overflow pages used............................... 0
+Total pages used.................................. 6
+Unused bytes on index pages....................... 32702 99.80%
+Unused bytes on primary pages..................... 15927 9.7%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 48629 24.7%
+
+*** Index MOZ_HISTORYVISITS_PLACEDATEINDEX of table MOZ_HISTORYVISITS *********
+
+Percentage of total database...................... 5.4%
+Number of entries................................. 15863
+Bytes of storage consumed......................... 393216
+Bytes of payload.................................. 267273 68.0%
+B-tree depth...................................... 2
+Average payload per entry......................... 16.85
+Average unused bytes per entry.................... 4.93
+Average fanout.................................... 12.00
+Non-sequential pages.............................. 8 72.7%
+Maximum payload per entry......................... 17
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 11
+Overflow pages used............................... 0
+Total pages used.................................. 12
+Unused bytes on index pages....................... 32516 99.23%
+Unused bytes on primary pages..................... 45668 12.7%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 78184 19.9%
+
+*** Table MOZ_HOSTS and all its indices ***************************************
+
+Percentage of total database...................... 0.90%
+Number of entries................................. 1256
+Bytes of storage consumed......................... 65536
+Bytes of payload.................................. 27640 42.2%
+Average payload per entry......................... 22.01
+Average unused bytes per entry.................... 26.18
+Maximum payload per entry......................... 49
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 2
+Overflow pages used............................... 0
+Total pages used.................................. 2
+Unused bytes on primary pages..................... 32888 50.2%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32888 50.2%
+
+*** Table MOZ_HOSTS w/o any indices *******************************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 628
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 14640 44.7%
+B-tree depth...................................... 1
+Average payload per entry......................... 23.31
+Average unused bytes per entry.................... 23.90
+Maximum payload per entry......................... 49
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 15012 45.8%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 15012 45.8%
+
+*** Index SQLITE_AUTOINDEX_MOZ_HOSTS_1 of table MOZ_HOSTS *********************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 628
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 13000 39.7%
+B-tree depth...................................... 1
+Average payload per entry......................... 20.70
+Average unused bytes per entry.................... 28.46
+Maximum payload per entry......................... 47
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 17876 54.6%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 17876 54.6%
+
+*** Table MOZ_INPUTHISTORY and all its indices ********************************
+
+Percentage of total database...................... 0.90%
+Number of entries................................. 16
+Bytes of storage consumed......................... 65536
+Bytes of payload.................................. 642 0.98%
+Average payload per entry......................... 40.12
+Average unused bytes per entry.................... 4050.88
+Maximum payload per entry......................... 71
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 2
+Overflow pages used............................... 0
+Total pages used.................................. 2
+Unused bytes on primary pages..................... 64814 98.9%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 64814 98.9%
+
+*** Table MOZ_INPUTHISTORY w/o any indices ************************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 8
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 341 1.0%
+B-tree depth...................................... 1
+Average payload per entry......................... 42.62
+Average unused bytes per entry.................... 4047.38
+Maximum payload per entry......................... 71
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 32379 98.8%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32379 98.8%
+
+*** Index SQLITE_AUTOINDEX_MOZ_INPUTHISTORY_1 of table MOZ_INPUTHISTORY *******
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 8
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 301 0.92%
+B-tree depth...................................... 1
+Average payload per entry......................... 37.62
+Average unused bytes per entry.................... 4054.38
+Maximum payload per entry......................... 65
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 32435 99.0%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32435 99.0%
+
+*** Table MOZ_ITEMS_ANNOS and all its indices *********************************
+
+Percentage of total database...................... 0.90%
+Number of entries................................. 158
+Bytes of storage consumed......................... 65536
+Bytes of payload.................................. 9211 14.1%
+Average payload per entry......................... 58.30
+Average unused bytes per entry.................... 352.56
+Maximum payload per entry......................... 384
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 2
+Overflow pages used............................... 0
+Total pages used.................................. 2
+Unused bytes on primary pages..................... 55704 85.0%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 55704 85.0%
+
+*** Table MOZ_ITEMS_ANNOS w/o any indices *************************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 79
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 8649 26.4%
+B-tree depth...................................... 1
+Average payload per entry......................... 109.48
+Average unused bytes per entry.................... 300.54
+Maximum payload per entry......................... 384
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 23743 72.5%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 23743 72.5%
+
+*** Index MOZ_ITEMS_ANNOS_ITEMATTRIBUTEINDEX of table MOZ_ITEMS_ANNOS *********
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 79
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 562 1.7%
+B-tree depth...................................... 1
+Average payload per entry......................... 7.11
+Average unused bytes per entry.................... 404.57
+Maximum payload per entry......................... 9
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 31961 97.5%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 31961 97.5%
+
+*** Table MOZ_KEYWORDS and all its indices ************************************
+
+Percentage of total database...................... 1.4%
+Number of entries................................. 0
+Bytes of storage consumed......................... 98304
+Bytes of payload.................................. 0 0.0%
+Average payload per entry......................... 0.0
+Average unused bytes per entry.................... 0.0
+Maximum payload per entry......................... 0
+Entries that use overflow......................... 0
+Primary pages used................................ 3
+Overflow pages used............................... 0
+Total pages used.................................. 3
+Unused bytes on primary pages..................... 98280 99.976%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 98280 99.976%
+
+*** Table MOZ_KEYWORDS w/o any indices ****************************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 0
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 0 0.0%
+B-tree depth...................................... 1
+Average payload per entry......................... 0.0
+Average unused bytes per entry.................... 0.0
+Maximum payload per entry......................... 0
+Entries that use overflow......................... 0
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 32760 99.976%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32760 99.976%
+
+*** Indices of table MOZ_KEYWORDS *********************************************
+
+Percentage of total database...................... 0.90%
+Number of entries................................. 0
+Bytes of storage consumed......................... 65536
+Bytes of payload.................................. 0 0.0%
+Average payload per entry......................... 0.0
+Average unused bytes per entry.................... 0.0
+Maximum payload per entry......................... 0
+Entries that use overflow......................... 0
+Primary pages used................................ 2
+Overflow pages used............................... 0
+Total pages used.................................. 2
+Unused bytes on primary pages..................... 65520 99.976%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 65520 99.976%
+
+*** Index MOZ_KEYWORDS_PLACEPOSTDATA_UNIQUEINDEX of table MOZ_KEYWORDS ********
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 0
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 0 0.0%
+B-tree depth...................................... 1
+Average payload per entry......................... 0.0
+Average unused bytes per entry.................... 0.0
+Maximum payload per entry......................... 0
+Entries that use overflow......................... 0
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 32760 99.976%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32760 99.976%
+
+*** Index SQLITE_AUTOINDEX_MOZ_KEYWORDS_1 of table MOZ_KEYWORDS ***************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 0
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 0 0.0%
+B-tree depth...................................... 1
+Average payload per entry......................... 0.0
+Average unused bytes per entry.................... 0.0
+Maximum payload per entry......................... 0
+Entries that use overflow......................... 0
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 32760 99.976%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32760 99.976%
+
+*** Table MOZ_PLACES and all its indices **************************************
+
+Percentage of total database...................... 64.3%
+Number of entries................................. 87087
+Bytes of storage consumed......................... 4653056
+Bytes of payload.................................. 3659043 78.6%
+Average payload per entry......................... 42.02
+Average unused bytes per entry.................... 7.93
+Average fanout.................................... 17.00
+Maximum payload per entry......................... 1867
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 8
+Primary pages used................................ 134
+Overflow pages used............................... 0
+Total pages used.................................. 142
+Unused bytes on index pages....................... 252188 96.2%
+Unused bytes on primary pages..................... 438258 10.0%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 690446 14.8%
+
+*** Table MOZ_PLACES w/o any indices ******************************************
+
+Percentage of total database...................... 28.5%
+Number of entries................................. 10894
+Bytes of storage consumed......................... 2064384
+Bytes of payload.................................. 1838131 89.0%
+B-tree depth...................................... 2
+Average payload per entry......................... 168.73
+Average unused bytes per entry.................... 14.10
+Average fanout.................................... 62.00
+Non-sequential pages.............................. 30 48.4%
+Maximum payload per entry......................... 1867
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 62
+Overflow pages used............................... 0
+Total pages used.................................. 63
+Unused bytes on index pages....................... 32207 98.3%
+Unused bytes on primary pages..................... 121406 6.0%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 153613 7.4%
+
+*** Indices of table MOZ_PLACES ***********************************************
+
+Percentage of total database...................... 35.7%
+Number of entries................................. 76193
+Bytes of storage consumed......................... 2588672
+Bytes of payload.................................. 1820912 70.3%
+Average payload per entry......................... 23.90
+Average unused bytes per entry.................... 7.05
+Average fanout.................................... 11.00
+Maximum payload per entry......................... 1823
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 7
+Primary pages used................................ 72
+Overflow pages used............................... 0
+Total pages used.................................. 79
+Unused bytes on index pages....................... 219981 95.9%
+Unused bytes on primary pages..................... 316852 13.4%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 536833 20.7%
+
+*** Index MOZ_PLACES_FAVICONINDEX of table MOZ_PLACES *************************
+
+Percentage of total database...................... 2.3%
+Number of entries................................. 10891
+Bytes of storage consumed......................... 163840
+Bytes of payload.................................. 83178 50.8%
+B-tree depth...................................... 2
+Average payload per entry......................... 7.64
+Average unused bytes per entry.................... 4.40
+Average fanout.................................... 5.00
+Non-sequential pages.............................. 3 75.0%
+Maximum payload per entry......................... 8
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 4
+Overflow pages used............................... 0
+Total pages used.................................. 5
+Unused bytes on index pages....................... 32711 99.83%
+Unused bytes on primary pages..................... 15213 11.6%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 47924 29.3%
+
+*** Index MOZ_PLACES_FRECENCYINDEX of table MOZ_PLACES ************************
+
+Percentage of total database...................... 2.3%
+Number of entries................................. 10891
+Bytes of storage consumed......................... 163840
+Bytes of payload.................................. 76772 46.9%
+B-tree depth...................................... 2
+Average payload per entry......................... 7.05
+Average unused bytes per entry.................... 4.99
+Average fanout.................................... 5.00
+Non-sequential pages.............................. 3 75.0%
+Maximum payload per entry......................... 9
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 4
+Overflow pages used............................... 0
+Total pages used.................................. 5
+Unused bytes on index pages....................... 32714 99.84%
+Unused bytes on primary pages..................... 21616 16.5%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 54330 33.2%
+
+*** Index MOZ_PLACES_GUID_UNIQUEINDEX of table MOZ_PLACES *********************
+
+Percentage of total database...................... 4.1%
+Number of entries................................. 10887
+Bytes of storage consumed......................... 294912
+Bytes of payload.................................. 196000 66.5%
+B-tree depth...................................... 2
+Average payload per entry......................... 18.00
+Average unused bytes per entry.................... 6.07
+Average fanout.................................... 9.00
+Non-sequential pages.............................. 5 62.5%
+Maximum payload per entry......................... 18
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 8
+Overflow pages used............................... 0
+Total pages used.................................. 9
+Unused bytes on index pages....................... 32581 99.43%
+Unused bytes on primary pages..................... 33545 12.8%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 66126 22.4%
+
+*** Index MOZ_PLACES_HOSTINDEX of table MOZ_PLACES ****************************
+
+Percentage of total database...................... 5.0%
+Number of entries................................. 10885
+Bytes of storage consumed......................... 360448
+Bytes of payload.................................. 237383 65.9%
+B-tree depth...................................... 2
+Average payload per entry......................... 21.81
+Average unused bytes per entry.................... 8.29
+Average fanout.................................... 11.00
+Non-sequential pages.............................. 7 70.0%
+Maximum payload per entry......................... 49
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 10
+Overflow pages used............................... 0
+Total pages used.................................. 11
+Unused bytes on index pages....................... 32473 99.10%
+Unused bytes on primary pages..................... 57782 17.6%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 90255 25.0%
+
+*** Index MOZ_PLACES_LASTVISITDATEINDEX of table MOZ_PLACES *******************
+
+Percentage of total database...................... 3.2%
+Number of entries................................. 10889
+Bytes of storage consumed......................... 229376
+Bytes of payload.................................. 150784 65.7%
+B-tree depth...................................... 2
+Average payload per entry......................... 13.85
+Average unused bytes per entry.................... 4.21
+Average fanout.................................... 7.00
+Non-sequential pages.............................. 4 66.7%
+Maximum payload per entry......................... 14
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 6
+Overflow pages used............................... 0
+Total pages used.................................. 7
+Unused bytes on index pages....................... 32651 99.64%
+Unused bytes on primary pages..................... 13179 6.7%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 45830 20.0%
+
+*** Index MOZ_PLACES_URL_UNIQUEINDEX of table MOZ_PLACES **********************
+
+Percentage of total database...................... 16.7%
+Number of entries................................. 10859
+Bytes of storage consumed......................... 1212416
+Bytes of payload.................................. 1010666 83.4%
+B-tree depth...................................... 2
+Average payload per entry......................... 93.07
+Average unused bytes per entry.................... 15.42
+Average fanout.................................... 37.00
+Non-sequential pages.............................. 16 44.4%
+Maximum payload per entry......................... 1823
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 36
+Overflow pages used............................... 0
+Total pages used.................................. 37
+Unused bytes on index pages....................... 24134 73.7%
+Unused bytes on primary pages..................... 143261 12.1%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 167395 13.8%
+
+*** Index MOZ_PLACES_VISITCOUNT of table MOZ_PLACES ***************************
+
+Percentage of total database...................... 2.3%
+Number of entries................................. 10891
+Bytes of storage consumed......................... 163840
+Bytes of payload.................................. 66129 40.4%
+B-tree depth...................................... 2
+Average payload per entry......................... 6.07
+Average unused bytes per entry.................... 5.97
+Average fanout.................................... 5.00
+Non-sequential pages.............................. 3 75.0%
+Maximum payload per entry......................... 8
+Entries that use overflow......................... 0 0.0%
+Index pages used.................................. 1
+Primary pages used................................ 4
+Overflow pages used............................... 0
+Total pages used.................................. 5
+Unused bytes on index pages....................... 32717 99.84%
+Unused bytes on primary pages..................... 32256 24.6%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 64973 39.7%
+
+*** Table SQLITE_SCHEMA *******************************************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 36
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 5188 15.8%
+B-tree depth...................................... 1
+Average payload per entry......................... 144.11
+Average unused bytes per entry.................... 758.58
+Maximum payload per entry......................... 379
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 27309 83.3%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 27309 83.3%
+
+*** Table SQLITE_SEQUENCE *****************************************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 1
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 15 0.046%
+B-tree depth...................................... 1
+Average payload per entry......................... 15.00
+Average unused bytes per entry.................... 32741.00
+Maximum payload per entry......................... 15
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 32741 99.918%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 32741 99.918%
+
+*** Table SQLITE_STAT1 ********************************************************
+
+Percentage of total database...................... 0.45%
+Number of entries................................. 15
+Bytes of storage consumed......................... 32768
+Bytes of payload.................................. 762 2.3%
+B-tree depth...................................... 1
+Average payload per entry......................... 50.80
+Average unused bytes per entry.................... 2128.20
+Maximum payload per entry......................... 62
+Entries that use overflow......................... 0 0.0%
+Primary pages used................................ 1
+Overflow pages used............................... 0
+Total pages used.................................. 1
+Unused bytes on primary pages..................... 31923 97.4%
+Unused bytes on overflow pages.................... 0
+Unused bytes on all pages......................... 31923 97.4%
+
+<a name="defs"></a>*** Definitions ***************************************************************
+
+Page size in bytes
+
+ The number of bytes in a single page of the database file.
+ Usually 1024.
+
+Number of pages in the whole file
+
+ The number of 32768-byte pages that go into forming the complete
+ database
+
+Pages that store data
+
+ The number of pages that store data, either as primary B*Tree pages or
+ as overflow pages. The number at the right is the data pages divided by
+ the total number of pages in the file.
+
+Pages on the freelist
+
+ The number of pages that are not currently in use but are reserved for
+ future use. The percentage at the right is the number of freelist pages
+ divided by the total number of pages in the file.
+
+Pages of auto-vacuum overhead
+
+ The number of pages that store data used by the database to facilitate
+ auto-vacuum. This is zero for databases that do not support auto-vacuum.
+
+Number of tables in the database
+
+ The number of tables in the database, including the SQLITE_SCHEMA table
+ used to store schema information.
+
+Number of indices
+
+ The total number of indices in the database.
+
+Number of defined indices
+
+ The number of indices created using an explicit CREATE INDEX statement.
+
+Number of implied indices
+
+ The number of indices used to implement PRIMARY KEY or UNIQUE constraints
+ on tables.
+
+Size of the file in bytes
+
+ The total amount of disk space used by the entire database files.
+
+Bytes of user payload stored
+
+ The total number of bytes of user payload stored in the database. The
+ schema information in the SQLITE_SCHEMA table is not counted when
+ computing this number. The percentage at the right shows the payload
+ divided by the total file size.
+
+Percentage of total database
+
+ The amount of the complete database file that is devoted to storing
+ information described by this category.
+
+Number of entries
+
+ The total number of B-Tree key/value pairs stored under this category.
+
+Bytes of storage consumed
+
+ The total amount of disk space required to store all B-Tree entries
+ under this category. The is the total number of pages used times
+ the pages size.
+
+Bytes of payload
+
+ The amount of payload stored under this category. Payload is the data
+ part of table entries and the key part of index entries. The percentage
+ at the right is the bytes of payload divided by the bytes of storage
+ consumed.
+
+Average payload per entry
+
+ The average amount of payload on each entry. This is just the bytes of
+ payload divided by the number of entries.
+
+Average unused bytes per entry
+
+ The average amount of free space remaining on all pages under this
+ category on a per-entry basis. This is the number of unused bytes on
+ all pages divided by the number of entries.
+
+Non-sequential pages
+
+ The number of pages in the table or index that are out of sequence.
+ Many filesystems are optimized for sequential file access so a small
+ number of non-sequential pages might result in faster queries,
+ especially for larger database files that do not fit in the disk cache.
+ Note that after running VACUUM, the root page of each table or index is
+ at the beginning of the database file and all other pages are in a
+ separate part of the database file, resulting in a single non-
+ sequential page.
+
+Maximum payload per entry
+
+ The largest payload size of any entry.
+
+Entries that use overflow
+
+ The number of entries that user one or more overflow pages.
+
+Total pages used
+
+ This is the number of pages used to hold all information in the current
+ category. This is the sum of index, primary, and overflow pages.
+
+Index pages used
+
+ This is the number of pages in a table B-tree that hold only key (rowid)
+ information and no data.
+
+Primary pages used
+
+ This is the number of B-tree pages that hold both key and data.
+
+Overflow pages used
+
+ The total number of overflow pages used for this category.
+
+Unused bytes on index pages
+
+ The total number of bytes of unused space on all index pages. The
+ percentage at the right is the number of unused bytes divided by the
+ total number of bytes on index pages.
+
+Unused bytes on primary pages
+
+ The total number of bytes of unused space on all primary pages. The
+ percentage at the right is the number of unused bytes divided by the
+ total number of bytes on primary pages.
+
+Unused bytes on overflow pages
+
+ The total number of bytes of unused space on all overflow pages. The
+ percentage at the right is the number of unused bytes divided by the
+ total number of bytes on overflow pages.
+
+Unused bytes on all pages
+
+ The total number of bytes of unused space on all primary and overflow
+ pages. The percentage at the right is the number of unused bytes
+ divided by the total number of bytes.
+
+<a name="sqlx"></a>*******************************************************************************
+The entire text of this report can be sourced into any SQL database
+engine for further analysis. All of the text above is an SQL comment.
+The data used to generate this report follows:
+*/
+BEGIN;
+CREATE TABLE space_used(
+ name clob, -- Name of a table or index in the database file
+ tblname clob, -- Name of associated table
+ is_index boolean, -- TRUE if it is an index, false for a table
+ nentry int, -- Number of entries in the BTree
+ leaf_entries int, -- Number of leaf entries
+ depth int, -- Depth of the b-tree
+ payload int, -- Total amount of data stored in this table or index
+ ovfl_payload int, -- Total amount of data stored on overflow pages
+ ovfl_cnt int, -- Number of entries that use overflow
+ mx_payload int, -- Maximum payload size
+ int_pages int, -- Number of interior pages used
+ leaf_pages int, -- Number of leaf pages used
+ ovfl_pages int, -- Number of overflow pages used
+ int_unused int, -- Number of unused bytes on interior pages
+ leaf_unused int, -- Number of unused bytes on primary pages
+ ovfl_unused int, -- Number of unused bytes on overflow pages
+ gap_cnt int, -- Number of gaps in the page layout
+ compressed_size int -- Total bytes stored on disk
+);
+INSERT INTO space_used VALUES('sqlite_schema','sqlite_schema',0,36,36,1,5188,0,0,379,0,1,0,0,27309,0,0,32768);
+INSERT INTO space_used VALUES('moz_places','moz_places',0,10955,10894,2,1838131,0,0,1867,1,62,0,32207,121406,0,30,2064384);
+INSERT INTO space_used VALUES('moz_historyvisits','moz_historyvisits',0,15884,15873,2,308447,0,0,21,1,12,0,32668,5435,0,8,425984);
+INSERT INTO space_used VALUES('moz_inputhistory','moz_inputhistory',0,8,8,1,341,0,0,71,0,1,0,0,32379,0,0,32768);
+INSERT INTO space_used VALUES('sqlite_autoindex_moz_inputhistory_1','moz_inputhistory',1,8,8,1,301,0,0,65,0,1,0,0,32435,0,0,32768);
+INSERT INTO space_used VALUES('moz_hosts','moz_hosts',0,628,628,1,14640,0,0,49,0,1,0,0,15012,0,0,32768);
+INSERT INTO space_used VALUES('sqlite_autoindex_moz_hosts_1','moz_hosts',1,628,628,1,13000,0,0,47,0,1,0,0,17876,0,0,32768);
+INSERT INTO space_used VALUES('moz_bookmarks','moz_bookmarks',0,313,313,1,21937,0,0,518,0,1,0,0,9358,0,0,32768);
+INSERT INTO space_used VALUES('moz_bookmarks_roots','moz_bookmarks_roots',0,5,5,1,47,0,0,11,0,1,0,0,32693,0,0,32768);
+INSERT INTO space_used VALUES('sqlite_autoindex_moz_bookmarks_roots_1','moz_bookmarks_roots',1,5,5,1,47,0,0,11,0,1,0,0,32698,0,0,32768);
+INSERT INTO space_used VALUES('moz_keywords','moz_keywords',0,0,0,1,0,0,0,0,0,1,0,0,32760,0,0,32768);
+INSERT INTO space_used VALUES('sqlite_autoindex_moz_keywords_1','moz_keywords',1,0,0,1,0,0,0,0,0,1,0,0,32760,0,0,32768);
+INSERT INTO space_used VALUES('sqlite_sequence','sqlite_sequence',0,1,1,1,15,0,0,15,0,1,0,0,32741,0,0,32768);
+INSERT INTO space_used VALUES('moz_favicons','moz_favicons',0,481,471,2,297630,0,0,7640,1,11,0,32676,59923,0,6,393216);
+INSERT INTO space_used VALUES('sqlite_autoindex_moz_favicons_1','moz_favicons',1,471,470,2,35135,0,0,7259,1,2,0,32664,29057,0,1,98304);
+INSERT INTO space_used VALUES('moz_anno_attributes','moz_anno_attributes',0,12,12,1,355,0,0,42,0,1,0,0,32357,0,0,32768);
+INSERT INTO space_used VALUES('sqlite_autoindex_moz_anno_attributes_1','moz_anno_attributes',1,12,12,1,366,0,0,43,0,1,0,0,32358,0,0,32768);
+INSERT INTO space_used VALUES('moz_annos','moz_annos',0,195,195,1,12115,0,0,127,0,1,0,0,19702,0,0,32768);
+INSERT INTO space_used VALUES('moz_items_annos','moz_items_annos',0,79,79,1,8649,0,0,384,0,1,0,0,23743,0,0,32768);
+INSERT INTO space_used VALUES('sqlite_stat1','sqlite_stat1',0,15,15,1,762,0,0,62,0,1,0,0,31923,0,0,32768);
+INSERT INTO space_used VALUES('moz_places_faviconindex','moz_places',1,10894,10891,2,83178,0,0,8,1,4,0,32711,15213,0,3,163840);
+INSERT INTO space_used VALUES('moz_places_hostindex','moz_places',1,10894,10885,2,237383,0,0,49,1,10,0,32473,57782,0,7,360448);
+INSERT INTO space_used VALUES('moz_places_visitcount','moz_places',1,10894,10891,2,66129,0,0,8,1,4,0,32717,32256,0,3,163840);
+INSERT INTO space_used VALUES('moz_places_frecencyindex','moz_places',1,10894,10891,2,76772,0,0,9,1,4,0,32714,21616,0,3,163840);
+INSERT INTO space_used VALUES('moz_places_lastvisitdateindex','moz_places',1,10894,10889,2,150784,0,0,14,1,6,0,32651,13179,0,4,229376);
+INSERT INTO space_used VALUES('moz_historyvisits_placedateindex','moz_historyvisits',1,15873,15863,2,267273,0,0,17,1,11,0,32516,45668,0,8,393216);
+INSERT INTO space_used VALUES('moz_historyvisits_fromindex','moz_historyvisits',1,15873,15869,2,100292,0,0,7,1,5,0,32702,15927,0,4,196608);
+INSERT INTO space_used VALUES('moz_historyvisits_dateindex','moz_historyvisits',1,15873,15865,2,206221,0,0,13,1,9,0,32596,41128,0,6,327680);
+INSERT INTO space_used VALUES('moz_bookmarks_itemindex','moz_bookmarks',1,313,313,1,2547,0,0,9,0,1,0,0,29274,0,0,32768);
+INSERT INTO space_used VALUES('moz_bookmarks_parentindex','moz_bookmarks',1,313,313,1,2393,0,0,9,0,1,0,0,29428,0,0,32768);
+INSERT INTO space_used VALUES('moz_bookmarks_itemlastmodifiedindex','moz_bookmarks',1,313,313,1,5020,0,0,17,0,1,0,0,26801,0,0,32768);
+INSERT INTO space_used VALUES('moz_places_url_uniqueindex','moz_places',1,10894,10859,2,1010666,0,0,1823,1,36,0,24134,143261,0,16,1212416);
+INSERT INTO space_used VALUES('moz_places_guid_uniqueindex','moz_places',1,10894,10887,2,196000,0,0,18,1,8,0,32581,33545,0,5,294912);
+INSERT INTO space_used VALUES('moz_bookmarks_guid_uniqueindex','moz_bookmarks',1,313,313,1,5207,0,0,17,0,1,0,0,26614,0,0,32768);
+INSERT INTO space_used VALUES('moz_annos_placeattributeindex','moz_annos',1,195,195,1,1871,0,0,10,0,1,0,0,30304,0,0,32768);
+INSERT INTO space_used VALUES('moz_items_annos_itemattributeindex','moz_items_annos',1,79,79,1,562,0,0,9,0,1,0,0,31961,0,0,32768);
+INSERT INTO space_used VALUES('moz_keywords_placepostdata_uniqueindex','moz_keywords',1,0,0,1,0,0,0,0,0,1,0,0,32760,0,0,32768);
+COMMIT;
+</pre></blockquote>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/sqlanalyze.in?m=3963fd2c25d51d600">2020-06-18 21:18:56</a> UTC </small></i></p>
+
diff --git a/www/sqlar.html b/www/sqlar.html
new file mode 100644
index 0000000..8d3f32c
--- /dev/null
+++ b/www/sqlar.html
@@ -0,0 +1,442 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Archive Files</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+SQLite Archive Files
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc2"><a href="#database_as_container_object">1.1. Database As Container Object</a></div>
+<div class="fancy-toc2"><a href="#applications_using_sqlite_archives">1.2. Applications Using SQLite Archives</a></div>
+<div class="fancy-toc1"><a href="#advantages_of_sqlite_archives">2. Advantages Of SQLite Archives</a></div>
+<div class="fancy-toc1"><a href="#disadvantages_of_sqlite_archives">3. Disadvantages Of SQLite Archives</a></div>
+<div class="fancy-toc1"><a href="#managing_an_sqlite_archive_from_the_command_line">4. Managing An SQLite Archive From The Command-Line</a></div>
+<div class="fancy-toc2"><a href="#other_command_line_tools">4.1. Other command-line tools</a></div>
+<div class="fancy-toc1"><a href="#managing_sqlite_archives_from_application_code">5. Managing SQLite Archives From Application Code</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>
+An "SQLite Archive" is a file container similar to a
+<a href="https://en.wikipedia.org/wiki/Zip_(file_format)">ZIP archive</a> or
+<a href="https://en.wikipedia.org/wiki/Tar_(computing)">Tarball</a> but
+based on an SQLite database.
+
+</p><p>
+An SQLite Archive is an ordinary SQLite database file that contains the
+following table as part of its schema:
+
+</p><div class="codeblock"><pre>CREATE TABLE sqlar(
+ name TEXT PRIMARY KEY, -- name of the file
+ mode INT, -- access permissions
+ mtime INT, -- last modification time
+ sz INT, -- original file size
+ data BLOB -- compressed content
+);
+</pre></div>
+
+<p>
+Each row of the SQLAR table holds the content of a single file.
+The filename (the full pathname relative to the root of the archive)
+is in the "name" field.
+The "mode" field is an integer which is the unix-style access permissions
+for the file. "mtime" is the modification time of the file in seconds
+since 1970. "sz" is the original uncompressed size of the file.
+The "data" field contains the file content. The content is usually
+compressed using <a href="http://zlib.net/">Deflate</a>, though not always. If the
+"sz" field is equal to the size of the "data" field, then the content
+is stored uncompressed.
+
+<a name="dbasobj"></a>
+
+</p><h2 id="database_as_container_object"><span>1.1. </span>Database As Container Object</h2>
+
+<p>
+An SQLite Archive is one example of a more general
+idea that an SQLite database can behave as a container object holding
+lots of smaller data components.
+
+</p><p>
+With client/server databases like PostgreSQL or Oracle, users and
+developers tend to think of the database as a service or a "node", not
+as an object. This is because the database content is spread out across
+multiple files on the server, or possibly across multiple servers in a
+service cluster. One cannot point to a single file or even a single
+directory and say "this is the database".
+
+</p><p>
+SQLite, in contrast, stores all content in a <a href="fileformat2.html">single file on disk</a>.
+That single file is something you can point to and say
+"this is the database". It behaves as an object.
+An SQLite database file can be copied, renamed, sent as an
+email attachment, passed as the argument a POST HTTP request,
+or otherwise treated as other data object such as an image,
+document, or media file.
+
+</p><p>
+Studies show that many applications already use
+SQLite as a container object. For example,
+<a href="https://odin.cse.buffalo.edu/papers/2015/TPCTC-sqlite-final.pdf">Kennedy</a>
+(no relation to the <a href="crew.html#dan">SQLite developer</a>) reports that 14% of
+Android applications never write to their SQLite databases. It is
+believed that these applications are downloading entire databases
+from the cloud and then using the information locally as needed. In other
+words, the applications are using SQLite not so much as a database but as
+a queryable wire-transfer format.
+
+</p><h2 id="applications_using_sqlite_archives"><span>1.2. </span>Applications Using SQLite Archives</h2>
+
+<p>
+The <a href="https://fossil-scm.org/">Fossil Distributed Version Control</a> system
+provides users with the option to download check-ins as either Tarballs,
+ZIP Archives, or SQLite Archives.
+</p><h1 id="advantages_of_sqlite_archives"><span>2. </span>Advantages Of SQLite Archives</h1>
+
+<ol>
+<li><p>
+An SQLite Archive is flexible.
+ZIP Archives and Tarballs are limited to storing only files. An
+SQLite Archive stores files plus whatever other tabular
+and/or relational data seems useful to the application.
+
+</p></li><li><p>
+An SQLite Archive is transactional.
+Updates are atomic and durable, even if there are crashes
+or power losses in the middle of the update.
+Readers see a consistent and unchanging version of the content even
+is some other process is simultaneously updating the archive.
+
+</p></li><li><p>
+An SQLite Archive can be updated incrementally.
+Individual files can be added or removed or replaced without having
+to rewrite the entire archive.
+
+</p></li><li><p>
+An SQLite Archive can be queried using a high-level query language (SQL).
+Some examples:
+</p><ul>
+<li> What is the total size of all files in the archive whose names
+ end in ".h" or ".cpp"?
+</li><li> What percentage of the files are compressed by less than 25%?
+</li><li> How many executable files are in the archive?
+</li></ul>
+Questions like these (and countless others) can be answered without
+having to uncompress or extract any content.
+
+</li><li><p>
+Applications that already use SQLite for other purposes can easily
+add support for SQLite Archives using a small extension
+(<a href="https://sqlite.org/src/file/ext/misc/sqlar.c">https://sqlite.org/src/file/ext/misc/sqlar.c</a>) to handle the compression
+and decompression of content. Even this tiny extension can be omitted
+if the files in the archive are uncompressed. In contrast, supporting
+ZIP Archives and/or Tarballs requires either separate libraries or
+lots of extra custom code, or sometimes both.
+
+</p></li><li><p>
+An SQLite Archive can work around firewall-imposed censorship.
+For example, certain file types that are considered "dangerous"
+(examples: DLLs) will be
+<a href="https://support.google.com/mail/answer/6590">blocked by Gmail</a>
+and probably many other email services and firewalls, even if the
+files are wrapped inside a ZIP Archive or Tarball.
+But these firewalls usually do not (yet) know about SQLite Archives and
+so content can be put inside an SQLite Archive to evade censorship.
+</p></li></ol>
+
+<h1 id="disadvantages_of_sqlite_archives"><span>3. </span>Disadvantages Of SQLite Archives</h1>
+
+<ol>
+<li><p>
+The SQLite Archive is a relatively new format. It was first described in
+in 2014. ZIP Archives and Tarballs, on the other hand, have been around
+for decades and are well-entrenched as standard formats. Most programmers
+know what a ZIP Archive or Tarball is, but if you say "SQLite Archive" you
+are more likely to get a reply of "What?" Tooling to process ZIP Archives
+and Tarballs is more likely to be installed on stock computers.
+
+</p></li><li><p>
+Since an SQLite database is a more general format (it is designed to do
+much more than simply store a bunch of files) it is not as compact as either
+the ZIP Archive or Tarball formats. An SQLite Archive is usually about 1%
+larger than the equivalent ZIP Archive. Tarballs are compressed as a single
+unit rather than compressing each file separately as is done by both
+SQLite and ZIP Archives. For these reason, Tarballs tend to be smaller
+than either ZIP or SQLite Archives.
+</p><p>
+As an example, the following table show the relative sizes for an
+SQLite Archive, a ZIP Archive, and a Tarball of the 1,743 files
+in the SQLite 3.22.0 source tree:
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+ <tr style="text-align:left"><td>SQLite Archive</td><td>10,754,048
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>ZIP Archive (using Info-ZIP 3.0)</td><td>10,662,365
+ </td></tr><tr style="text-align:left"><td>ZIP Archive (using <a href="zipfile.html">zipfile</a>)</td><td>10,390,215
+ </td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>Tarball</td><td>&#x2007;9,781,109
+</td></tr></table>
+
+</li><li><p>
+An SQLite Archive supports only the <a href="https://zlib.net/">Deflate</a> compression
+method. Tarballs and ZIP Archive support a wider assortment of
+compression methods.
+</p></li></ol>
+
+<a name="cltools"></a>
+
+<h1 id="managing_an_sqlite_archive_from_the_command_line"><span>4. </span>Managing An SQLite Archive From The Command-Line</h1>
+
+<p>
+The recommended way of creating, updating, listing, and extracting
+an SQLite Archive is to use the <a href="cli.html">sqlite3.exe command-line shell</a>
+for SQLite <a href="releaselog/3_23_0.html">version 3.23.0</a> (2018-04-02) or later. This CLI
+supports the -A command-line option that allows easy management
+of SQLite Archives.
+The CLI for SQLite <a href="releaselog/3_22_0.html">version 3.22.0</a> (2018-01-22) has the
+<a href="cli.html#sqlar">.archive command</a> for managing SQLite Archives, but that requires
+interacting with the shell.
+
+</p><p>
+To list all of the files in an SQLite Archive named "example.sqlar"
+using one of these commands:
+
+</p><div class="codeblock"><pre>sqlite3 example.sqlar -At
+sqlite3 example.sqlar -Atv
+</pre></div>
+
+<p>
+To extract all files from an SQLite Archive named "example.sqlar":
+
+</p><div class="codeblock"><pre>sqlite3 example.sqlar -Ax
+</pre></div>
+
+<p>
+To create a new SQLite Archive named "alltxt.sqlar" containing all *.txt
+files in the current directory:
+
+</p><div class="codeblock"><pre>sqlite3 alltxt.sqlar -Ac *.txt
+</pre></div>
+
+<p>
+To add or update files in an existing SQLite Archive:
+
+</p><div class="codeblock"><pre>sqlite3 example.sqlar -Au *.md
+</pre></div>
+
+<p>
+For usage hints and a summary of all options, simply give the <a href="cli.html">CLI</a>
+the -A option with no additional arguments:
+
+</p><div class="codeblock"><pre>sqlite3 -A
+</pre></div>
+
+<p>
+All of these commands work the same way if the filename argument is
+is a ZIP Archive instead of an SQLite database.
+
+</p><h2 id="other_command_line_tools"><span>4.1. </span>Other command-line tools</h2>
+
+<p>
+Just as there is the "zip" program to manage ZIP Archives, and the
+"tar" program to manage Tarballs, the
+<a href="https://sqlite.org/sqlar">"sqlar" program</a> exists to manage SQL Archives.
+The "sqlar" program is able to create a new SQLite Archive, list the
+content of an existing archive, add or remove files from the archive,
+and/or extract files from the archive.
+A separate "sqlarfs" program is able to mount the SQLite Archive as
+a <a href="https://github.com/libfuse/libfuse">Fuse Filesystem</a>.
+
+</p><h1 id="managing_sqlite_archives_from_application_code"><span>5. </span>Managing SQLite Archives From Application Code</h1>
+
+<p>
+Applications can easily read or write SQLite Archives by linking against
+SQLite and including the
+<a href="https://sqlite.org/src/file/ext/misc/sqlar.c">ext/misc/sqlar.c</a> extension
+to handle the compression and decompression. The sqlar.c extension
+creates two new SQL functions.
+
+</p><dl>
+<dt><b>sqlar_compress(X)</b></dt>
+<dd><p>
+The sqlar_compress(X) function attempts to compress a copy of the
+string or blob X using the <a href="https://zlib.net/">Default</a> algorithm and
+returns the result as a blob. If the input X is incompressible, then
+a copy of X is returned. This routine is used when inserting content
+into an SQLite Archive.
+</p></dd><dt><b>sqlar_uncompress(Y,SZ)</b></dt>
+<dd><p>
+The sqlar_uncompress(Y,SZ) function will undo the compression accomplished
+by sqlar_compress(X). The Y parameter is the compressed content (the output
+from a prior call to sqlar_compress()) and SZ is the original uncompressed
+size of the input X that generated Y. If SZ is less than or equal to the
+size of Y, that indicates that no compression occurred, and so
+sqlar_uncompress(Y,SZ) returns a copy of Y. Otherwise, sqlar_uncompress(Y,SZ)
+runs the Inflate algorithm on Y to uncompress it and restore it to its
+original form and returns the uncompressed content.
+This routine is used when extracting content from an SQLite Archive.
+</p></dd></dl>
+
+<p>
+Using the two routines above, it is simple for applications to insert
+new records into or extract existing records from an SQLite Archive.
+Insert a new into an SQLite Archive using code like this:
+
+</p><div class="codeblock"><pre>INSERT INTO sqlar(name,mode,mtime,sz,data)
+ VALUES ($name,$mode,strftime('%s',$mtime),
+ length($content),sqlar_compress($content));
+</pre></div>
+
+<p>
+Extract an entry from the SQLite Archive using code like this:
+
+</p><div class="codeblock"><pre>SELECT name, mode, datetime(mtime,'unixepoch'), sqlar_uncompress(data,sz)
+ FROM sqlar
+ WHERE ...;
+</pre></div>
+
+<p>
+The code above is for the general case. For the special case of an
+SQLite Archive that only stores uncompressed or uncompressible content
+(this might come up, for example, in an SQLite Archive that stores only
+JPEG, GIF, and/or PNG images) then the content can be inserted into
+and extracted from the database without using the sqlar_compress()
+and sqlar_uncompress() functions, and the sqlar.c extension is not
+required.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/sqlar.in?m=f269c832360dc8a51">2020-12-02 18:42:06</a> UTC </small></i></p>
+
diff --git a/www/sqldiff.html b/www/sqldiff.html
new file mode 100644
index 0000000..7451c3f
--- /dev/null
+++ b/www/sqldiff.html
@@ -0,0 +1,286 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>sqldiff.exe: Database Difference Utility</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+sqldiff.exe: Database Difference Utility
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#usage">1. Usage</a></div>
+<div class="fancy-toc1"><a href="#how_it_works">2. How It Works</a></div>
+<div class="fancy-toc1"><a href="#limitations">3. Limitations</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="usage"><span>1. </span>Usage</h1>
+
+<p>
+The <tt>sqldiff.exe</tt> binary is a command-line utility program that
+displays content differences between SQLite databases. Example
+usage:
+
+</p><div class="codeblock"><pre>sqldiff &#91;options&#93; database1.sqlite database2.sqlite
+</pre></div>
+
+<p>
+The usual output is an SQL script that will transform
+database1.sqlite (the "source" database) into database2.sqlite
+(the "destination" database). This behavior can be
+altered using command-line switches:
+
+</p><dl>
+<dt><b>--changeset FILE</b></dt>
+<dd><p>Do not write changes to standard output. Instead, write a (binary)
+ changeset file into FILE. The changeset can be interpreted using
+ the <a href="sessionintro.html">session extension</a> to SQLite.</p></dd>
+<dt><b>--lib LIBRARY</b></dt>
+<dt><b>-L LIBRARY</b></dt>
+<dd><p>Load the shared library or DLL file LIBRARY into SQLite prior to
+ computing the differences. This can be used to add application-defined
+ <a href="datatype3.html#collation">collating sequences</a> that are required by the schema.
+</p></dd><dt><b>--primarykey</b></dt>
+<dd><p>Use the schema-defined <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> instead of the <a href="lang_createtable.html#rowid">rowid</a> to
+ pair rows in the source and destination database. (See additional
+ explanation below.)</p></dd>
+<dt><b>--schema</b></dt>
+<dd><p>Show only column name and table differences in the schema,
+ not the table content</p></dd>
+<dt><b>--summary</b></dt>
+<dd><p>Show how many rows have changed on each table, but do not show
+ the actual changes</p></dd>
+<dt><b>--table TABLE</b></dt>
+<dd><p>Show only the differences in content for TABLE, not for the
+ entire database</p></dd>
+<dt><b>--transaction</b></dt>
+<dd><p>Wrap SQL output in a single large transaction</p></dd>
+<dt><b>--vtab</b></dt>
+<dd><p>Add support for handling <a href="fts3.html">FTS3</a>, <a href="fts5.html">FTS5</a> and <a href="rtree.html">rtree</a> virtual tables.
+ <a href="#vtab">See below</a> for details.
+</p></dd>
+</dl>
+
+<h1 id="how_it_works"><span>2. </span>How It Works</h1>
+
+<p>The sqldiff.exe utility works by finding rows in the source and
+destination that are logical "pairs". The default behavior is to
+treat two rows as pairs if they are in tables with the same name
+and they have the same <a href="lang_createtable.html#rowid">rowid</a>, or in the case of a <a href="withoutrowid.html">WITHOUT ROWID</a>
+table if they have the same <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a>. Any differences in the
+content of paired rows are output as UPDATEs. Rows in the source
+database that could not be paired are output as DELETEs. Rows in
+the destination database that could not be paired are output as
+INSERTs.
+
+</p><p>The --primarykey flag changes the pairing algorithm slightly so
+that the schema-declared <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> is always used for pairing,
+even on tables that have a <a href="lang_createtable.html#rowid">rowid</a>. This is often a better choice
+for finding differences, however it can lead to missed differences in
+the case of rows that have one or more PRIMARY KEY columns set to
+NULL.</p>
+
+<h1 id="limitations"><span>3. </span>Limitations</h1>
+
+<ol>
+<li>
+<p>The sqldiff.exe utility does not compute changesets for
+either: rowid tables for which the rowid is inaccessible;
+or tables which have no explicit primary key.
+Given the --changeset option, sqldiff omits them from the comparison.
+Examples of such tables are:
+
+</p><div class="codeblock"><pre>CREATE TABLE NilChangeset (
+ -- inaccessible rowid due to hiding its aliases
+ "rowid" TEXT,
+ "oid" TEXT,
+ "_rowid_" TEXT
+);
+</pre></div>
+
+and
+
+<div class="codeblock"><pre>CREATE TABLE NilChangeset (
+ -- no explicit primary key
+ "authorId" TEXT,
+ "bookId" TEXT
+);
+</pre></div>
+
+
+When sqldiff is made to compare only such tables, no error occurs.
+However, the result may be unexpected.
+For example, the effect of this invocation:
+
+<div class="codeblock"><pre>sqldiff --changeset CHANGESET_OUT --table NilChangeset db1.sdb db2.sdb
+</pre></div>
+
+will be to produce an empty file named "CHANGESET_OUT". See <a href="session/intro.html#limitations">session limitations</a> for details.
+</li><li><p>
+The sqldiff.exe utility does not (currently) display differences in
+<a href="lang_createtrigger.html">TRIGGERs</a> or <a href="lang_createview.html">VIEWs</a>.
+
+</p></li><li><p>
+The sqldiff utility is not designed to support schema migrations
+and is forgiving with respect to differing column definitions.
+Normally, only the column names and their order are compared
+for like-named tables before content comparison proceeds.
+
+</p><p>However, the single-table comparison option, with "sqlite_schema"
+named, can be used to show or detect detailed schema differences
+between a pair of databases.
+When doing this, the output should not be used directly to modify a database.
+
+</p></li><li><p id="vtab">
+By default, differences in the schema or content of virtual tables are
+not reported on.
+
+</p><p>However, if a <a href="vtab.html">virtual table</a> implementation creates real tables (sometimes
+referred to as "shadow" tables) within the database to store its data in, then
+sqldiff.exe does calculate the difference between these. This can have
+surprising effects if the resulting SQL script is then run on a database that
+is not <i>exactly</i> the same as the source database. For several of SQLite's
+bundled virtual tables (FTS3, FTS5, rtree and others), the surprising effects
+may include corruption of the virtual table content.
+
+</p><p> If the --vtab option is passed to sqldiff.exe, then it ignores all
+underlying shadow tables belonging to an FTS3, FTS5 or rtree virtual table
+and instead includes the virtual table differences directly.
+
+</p></li></ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/sqldiff.in?m=b2cb41a9fddeff1d5">2021-09-07 19:28:01</a> UTC </small></i></p>
+
diff --git a/www/sqlite.css b/www/sqlite.css
new file mode 100644
index 0000000..5c806a9
--- /dev/null
+++ b/www/sqlite.css
@@ -0,0 +1,308 @@
+/* Style sheet for the SQLite Website and Documentation */
+* {box-sizing:border-box;}
+@media screen and (max-width: 800px){
+ body {margin: 2px;}
+}
+body {
+ margin-top: 0;
+ font-family: Verdana, sans-serif;
+}
+
+/* Horizonal rules */
+.xhr {
+ color: #044a64;
+ height: 2px;
+}
+
+/* Hyperlinks that look like buttons */
+.button {
+ background-color: #ddd;
+ border: 2px solid #aaa;
+ text-decoration: none;
+ border-radius: 4px;
+ padding: 0 1ex 0 1ex;
+ white-space: nowrap;
+ font-size: 90%;
+ line-height: 150%;
+ color: black;
+}
+.button:visited {
+ color: black;
+}
+
+/* Sidebars on the right-hand side of the screen */
+.rightsidebar {
+ padding-right: 1ex;
+ margin: 1ex;
+ float: right;
+}
+
+/* Border box */
+.border2px {
+ border: 2px solid #044a64;
+}
+
+.hdrfont {
+ font-weight:bold;
+ font-size:115%;
+}
+.nounderline a { text-decoration: none }
+
+a { color: #044a64 }
+a:visited { color: #734559 }
+
+.logo { float: left; margin:1px; }
+.tagline {
+ float:right;
+ text-align:right;
+ font-style:italic;
+ width:300px;
+ margin:12px;
+ margin-top:58px;
+}
+
+/* Style common to both the main and submenu */
+.menu::before {
+ content: "";
+ clear: both; /* Clear the Logo and TagLine */
+ display: block;
+}
+.menu ul {
+ margin: 0;
+ list-style-type: none;
+ padding: 0;
+ overflow: hidden;
+}
+.menu ul li {
+ color: white;
+}
+.menu ul li a {
+ display: block;
+ color: white;
+ text-align: center;
+ padding: 0.7ex 1.4ex;
+ text-decoration: none;
+}
+
+/* Styling specific to the main menu */
+.mainmenu ul {
+ background-color: #044a64;
+ border-radius: 8px;
+}
+.mainmenu ul li {
+ float: left;
+}
+.mainmenu ul li.search {
+ float: right;
+}
+
+/* Styling specific to the submenu */
+.submenu {
+ display: none;
+}
+.submenu ul {
+ color: white;
+}
+.submenu ul li {
+ float: none;
+ border-radius: 8px;
+ background-color: #0482c4;
+ border-top: 2px solid white;
+}
+
+/* Styling for the search menu */
+.searchmenu {
+ width: 100%;
+ text-align: right;
+ display: none;
+ float: none;
+ padding: 1ex;
+ background-color: #0482c4;
+ border-radius: 8px;
+}
+
+/* Add the "mobileonly" class to any elements that should be visible
+** on narrow-screen mobile devices only */
+@media screen and (min-width: 600px){
+ /* Settings for wide desktop screens */
+ .mobileonly {display: none;}
+}
+/* Add the "desktoponly" class to any elements that should be visible
+** on desktops with at least 600 pixels of horizontal space. */
+@media screen and (max-width: 600px){
+ /* Settings for narrow mobile screens */
+ .desktoponly {display: none;}
+}
+/* Add the "wideonly" class to any elements that should be visible
+** on wide-screen desktops with */
+@media screen and (max-width: 800px){
+ /* Settings for screens that are less than 800px wide */
+ .wideonly {display: none;}
+}
+
+.content { margin: 5%; }
+.content dt { font-weight:bold; }
+.content dd { margin-bottom: 25px; margin-left:20%; }
+.content ul { padding:0px; padding-left: 15px; margin:0px; }
+
+/* Things for "fancyformat" documents start here. */
+.fancy img+p {font-style:italic}
+.fancy .codeblock {
+ display: table;
+ border: 1px solid #80a796;
+ padding: 1ex;
+ background-color: #eee;
+}
+.fancy .codeblock pre {
+ display: table-cell;
+ font-size: 1em;
+}
+.fancy .codeblock i { color: darkblue; }
+.fancy h1,.fancy h2,.fancy h3,.fancy h4 {font-weight:normal;color:#044a64}
+.fancy th {text-align:left;border-bottom:solid 1px #444}
+.fancy th, .fancy td {padding: 0.2em 1ex; vertical-align:top}
+.toct { color: #044a64 ! important; }
+#toc_sub a { color: #044a64; text-decoration: none }
+#toc_sub { display: none; margin-top: 1em; }
+.fancy .todo { color: #AA3333 ; font-style : italic }
+.fancy .todo:before { content: 'TODO:' }
+.fancy p.todo { border: solid #AA3333 1px; padding: 1ex }
+.fancy img { display:block; }
+.fancy :link:hover, .fancy :visited:hover { background: wheat }
+.fancy_title {
+ font-size: 2em;
+ text-align: center;
+ color: #044a64;
+}
+.fancy_toc {
+ margin-top: 1em;
+}
+.fancy_toc > a {
+ margin: 1em;
+ margin-left: 0;
+ font-size: 1.5em;
+ color: #044a64;
+ text-decoration: none;
+ cursor: pointer;
+}
+@media screen and (min-width: 600px){
+ /* Indentation amounts for non-mobile screens, 600 pixels or wider */
+ .fancy p,.fancy ul,.fancy ol,.fancy dl { margin: 1em 5ex }
+ .fancy li p { margin: 1em 0 }
+ .fancy blockquote { margin-left : 10ex }
+ .toct {margin-left:4ex;}
+ .fancy-toc1 {margin-left:6ex;}
+ .fancy-toc2 {margin-left:12ex;}
+ .fancy-toc3 {margin-left:18ex;}
+ .fancy-toc4 {margin-left:24ex;}
+ .fancy-toc5 {margin-left:30ex;}
+ .fancy-toc6 {margin-left:36ex;}
+ .fancy .codeblock {margin:0 10ex;}
+ .fancy ol .codeblock {margin:0 5ex;}
+ .fancy .imgcontainer {margin: 1em 5ex}
+}
+@media screen and (max-width: 600px){
+ /* Indentation amounts for narrow mobile screens */
+ .toct {margin-left:0;}
+ .fancy-toc1 {padding-left:4ex;text-indent:-2ex;}
+ .fancy-toc2 {padding-left:8ex;text-indent:-4ex;}
+ .fancy-toc3 {padding-left:12ex;text-indent:-6ex;}
+ .fancy-toc4 {padding-left:16ex;text-indent:-8ex;}
+ .fancy-toc5 {padding-left:20ex;text-indent:-10ex;}
+ .fancy-toc6 {padding-left:24ex;text-indent:-12ex;}
+ .lessindent {padding-left: 1em; margin-left: 0;}
+ .fancy .codeblock {margin:0 1ex;}
+}
+/* End of "fancyformat" specific rules. */
+
+/* <ul> elements used for multi-column lists */
+.multicol_list {padding-left:1em;margin-left:0;}
+
+.yyterm {
+ background: #fff;
+ border: 1px solid #000;
+ border-radius: 11px;
+ padding-left: 4px;
+ padding-right: 4px;
+ line-height: 125%;
+}
+.yynonterm {
+ background: #fff;
+ border: 1px solid #000;
+ padding-left: 2px;
+ padding-right: 2px;
+ line-height: 125%;
+}
+
+/* Container for an image */
+.imgcontainer img {
+ max-height: 100%;
+ max-width: 100%;
+}
+
+
+.doccat a {
+ color: #044a64 ;
+ text-decoration: none;
+}
+.doccat h {
+ font-weight: bold;
+}
+.doccat h a {
+ font-size: smaller;
+ color: black;
+}
+.doccat {
+ padding-left: 2ex;
+ padding-right: 2ex;
+ white-space:nowrap;
+}
+.doccat li {
+ list-style-type: none;
+ font-size: smaller;
+ line-height: 150%;
+}
+.doccat ul {
+ margin-top: 0.5em;
+}
+
+.footer {
+ padding-top: 2px;
+ padding-bottom: 1px;
+ border-top: 2px solid #044a64;
+}
+
+th.sort:after {
+ margin-left: .4em;
+ cursor: pointer;
+ text-shadow: 0 0 0 #000; /* Makes arrow darker */
+}
+th.sort.none:after {
+ content: '\2666';
+}
+th.sort.asc:after {
+ content: '\2193';
+}
+th.sort.desc:after {
+ content: '\2191'
+}
+
+div.columns {
+ padding: 0 2em 0 2em;
+ max-width: 2000px;
+}
+div.columns > ul {
+ margin: 0;
+ padding: 0 0 0 1em;
+ list-style-type: none;
+ padding: 10px;
+ margin: 0px;
+ white-space: nowrap;
+}
+div.columns > ul li:first-child {
+ margin-top:0px;
+}
+.columns li {
+ break-inside: avoid;
+ page-break-inside: avoid;
+}
diff --git a/www/sqlite.html b/www/sqlite.html
new file mode 100644
index 0000000..bcbc3c8
--- /dev/null
+++ b/www/sqlite.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0; ./cli.html">
+</head>
+<!-- The "cli.html" page used to be called "sqlite.html". This is a replace
+ "sqlite.html" page that automatically redirects to the new "cli.html" -->
+<body>
+Redirect to <a href="./cli.html">./cli.html</a>
+</body>
+</html>
diff --git a/www/stmt.html b/www/stmt.html
new file mode 100644
index 0000000..1e93fb8
--- /dev/null
+++ b/www/stmt.html
@@ -0,0 +1,266 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The SQLITE_STMT Virtual Table</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The SQLITE_STMT Virtual Table
+</div>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>
+The SQLITE_STMT extension implements an <a href="vtab.html#epoonlyvtab">eponymous-only virtual table</a> that
+provides information about all <a href="c3ref/stmt.html">prepared statements</a> associated with
+the <a href="c3ref/sqlite3.html">database connection</a>.
+</p>
+
+<p>
+The SQLITE_STMT extension is included in the <a href="amalgamation.html">amalgamation</a> though
+it is disabled
+by default. Use the <a href="compile.html#enable_stmtvtab">SQLITE_ENABLE_STMTVTAB</a> compile-time option to enable
+the SQLITE_STMT extension. The SQLITE_STMT extension can also be
+loaded at run-time
+by compiling the extension into a shared library or DLL using the source
+code at <a href="https://sqlite.org/src/file/ext/misc/stmt.c">https://sqlite.org/src/file/ext/misc/stmt.c</a> and following the
+instructions for how to <a href="loadext.html#build">compile loadable extensions</a>.
+</p>
+
+<p>
+The SQLITE_STMT extension is enabled in default builds
+of the <a href="cli.html">command-line shell</a>.
+
+</p><h1 id="usage"><span>2. </span>Usage</h1>
+
+<p>
+The SQLITE_STMT virtual table is a read-only table that can be directly
+queried to access information about all prepared statements on the
+current database connection. For example:
+
+</p><div class="codeblock"><pre>SELECT * FROM sqlite_stmt;
+</pre></div>
+
+<p>
+A statement such as the above can be run immediately prior to invoking
+<a href="c3ref/close.html">sqlite3_close()</a> to confirm that all prepared statements have been
+<a href="c3ref/finalize.html">finalized</a> and to help identify and track down prepared
+statements that have "leaked" and missed finalization.
+
+</p><p>
+The SQLITE_STMT virtual table can also be used to access performance
+information about prepared statements, to aid in optimization an application.
+For example,
+to find out how much memory is being used by <a href="c3ref/stmt.html">prepared statements</a> that have
+never been used, one could run:
+
+</p><div class="codeblock"><pre>SELECT sum(mem) FROM sqlite_stmt WHERE run=0;
+</pre></div>
+
+<h2 id="columns"><span>2.1. </span>Columns</h2>
+
+<p>
+The columns are provided by the SQLITE_STMT virtual table are summarized by
+the hypothetical CREATE TABLE statement show here:
+
+</p><div class="codeblock"><pre>CREATE TABLE sqlite_stmt(
+ sql TEXT, -- Original SQL text
+ ncol INT, -- Number of output columns
+ ro BOOLEAN, -- True for "read only" statements
+ busy BOOLEAN, -- True if the statement is current running
+ nscan INT, -- Number of full-scan steps
+ nsort INT, -- Number of sort operations
+ naidx INT, -- Number of automatic index inserts
+ nstep INT, -- Number of byte-code engine steps
+ reprep INT, -- Number of reprepare operations
+ run INT, -- Number of times this statement has been run
+ mem INT -- Heap memory used by this statement
+);
+</pre></div>
+
+<p>Future releases may add new output columns and may change the order
+of legacy columns.
+Further detail about the meaning of each column in the SQLITE_STMT virtual
+table is provided below:
+
+</p><ul>
+<li><p><b>sql</b>:
+The original SQL text of the prepared statement. If the prepared
+statement is compiled using the <a href="c3ref/prepare.html">sqlite3_prepare()</a> interface, then
+the SQL text might not have been saved, in which case this column
+will be NULL.
+
+</p></li><li><p><b>ncol</b>:
+The number of columns in the result set of a query.
+For DML statements, this column has a value of 0.
+
+</p></li><li><p><b>ro</b>:
+The "read only" column. This column is true (non-zero) if the
+SQL statement is a query and false (zero) if it is a DML statement.
+
+</p></li><li><p><b>busy</b>:
+This field is true if the prepared statement is currently running.
+In other words, this field is true if <a href="c3ref/step.html">sqlite3_step()</a> has been called
+on the <a href="c3ref/stmt.html">prepared statement</a> at least once but <a href="c3ref/reset.html">sqlite3_reset()</a> has
+not yet been called to reset it.
+
+</p></li><li><p><b>nscan</b>:
+This field is the number of times that the <a href="opcode.html">bytecode engine</a> has stepped
+through a table as part of a full-table scan. A large number if this
+field may indicate an opportunity to improve performance by adding an
+index. This field is equivalent to the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusfullscanstep">SQLITE_STMTSTATUS_FULLSCAN_STEP</a>
+value.
+
+</p></li><li><p><b>nsort</b>:
+This field is the number of times that the <a href="opcode.html">bytecode engine</a> had to sort.
+A positive value in this field may indicate an opportunity to improve
+performance by adding an index that will cause the query results to
+appear naturally in the desired order.
+This field is equivalent to the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatussort">SQLITE_STMTSTATUS_SORT</a> value.
+
+</p></li><li><p><b>naidx</b>:
+This field is the number of rows that have been inserted into
+<a href="optoverview.html#autoindex">automatic indexes</a>. A positive value in this field may indicate
+an opportunity to improve performance by adding a named index that
+take the place of the automatic index.
+This field is equivalent to the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusautoindex">SQLITE_STMTSTATUS_AUTOINDEX</a> value.
+
+</p></li><li><p><b>nstep</b>:
+This field is the number of <a href="opcode.html">bytecode engine</a> operations that have
+been performed for the prepared statement. This field can be used
+as a proxy for how much CPU time a statement has used.
+This field is equivalent to the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusvmstep">SQLITE_STMTSTATUS_VM_STEP</a> value.
+
+</p></li><li><p><b>reprep</b>:
+This field is the number of times that the statement has had to be
+reprepared due to schema changes or changes to parameter bindings.
+This field is equivalent to the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusreprepare">SQLITE_STMTSTATUS_REPREPARE</a> value.
+
+</p></li><li><p><b>run</b>:
+This field is the number of times that the statement has been run.
+This field is equivalent to the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusrun">SQLITE_STMTSTATUS_RUN</a> value.
+
+</p></li><li><p><b>mem</b>:
+This field is the number of bytes of heap storage used by the
+prepared statement.
+This field is equivalent to the <a href="c3ref/c_stmtstatus_counter.html#sqlitestmtstatusmemused">SQLITE_STMTSTATUS_MEMUSED</a> value.
+</p></li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/stmt.in?m=9368174a6e34d9b2c">2017-07-14 15:38:02</a> UTC </small></i></p>
+
diff --git a/www/stricttables.html b/www/stricttables.html
new file mode 100644
index 0000000..e1f670f
--- /dev/null
+++ b/www/stricttables.html
@@ -0,0 +1,320 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>STRICT Tables</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+STRICT Tables
+</div>
+</div>
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>SQLite strives to be flexible regarding the datatype of
+the content that it stores. For example, if a table column has a type of
+"INTEGER", then SQLite tries to convert anything inserted into that column
+into an integer. So an attempt to insert the string '123' results
+in an integer 123 being inserted. But if the content cannot be losslessly
+converted into an integer, for example if the input is 'xyz', then
+the original string is inserted instead.
+See the <a href="datatype3.html">Datatypes In SQLite</a> document for additional information.
+
+</p><p>Some developers <a href="flextypegood.html">appreciate the freedom</a> that SQLite's flexible typing
+rules provide and use that freedom to advantage.
+But other developers are aghast at SQLite's
+flagrant rule-breaking and prefer the traditional rigid type
+system found in all other SQL database engines and in the
+SQL standard. For this latter group, SQLite supports a strict typing
+mode, as of version 3.37.0 (2021-11-27), that is enabled
+separately for each table.
+
+</p><h1 id="strict_tables"><span>2. </span>STRICT Tables</h1>
+
+<p>In a <a href="lang_createtable.html">CREATE TABLE</a> statement, if the "STRICT" table-option keyword is
+added to the end, after the closing ")", then strict typing rules apply
+to that table.
+The STRICT keyword causes the following differences:
+
+</p><ol>
+<li><p>
+Every column definition must specify a datatype for that column.
+The freedom to specify a column without a datatype is removed.
+
+</p></li><li><p>
+The datatype must be one of following:
+</p><ul>
+<li> INT
+</li><li> INTEGER
+</li><li> REAL
+</li><li> TEXT
+</li><li> BLOB
+</li><li> ANY
+</li></ul>
+<p>No other datatype names are allowed, though new types might be added in
+future releases of SQLite.
+
+</p></li><li><p>
+Content inserted into the column with a datatype other than ANY
+must be either a NULL (assuming there
+is no NOT NULL constraint on the column) or the type specified.
+SQLite attempts to coerce the data into the appropriate type using the usual
+affinity rules, as PostgreSQL, MySQL, SQL Server,
+and Oracle all do. If the value cannot be
+losslessly converted in the specified datatype, then an
+SQLITE_CONSTRAINT_DATATYPE error is raised.
+
+</p></li><li><p>
+Columns with datatype ANY can accept any kind of data (except they will
+reject NULL values if they have a NOT NULL constraint, of course). No
+type coercion occurs for a column of type ANY in a STRICT table.
+
+</p></li><li><p>
+Columns that are part of the PRIMARY KEY are implicitly NOT NULL.
+However, even though the PRIMARY KEY has an implicit NOT NULL constraint,
+when a NULL value is inserted into an <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column, the
+NULL is automatically converted into a unique integer, using the same
+rules for <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> on ordinary, non-strict tables.
+
+</p></li><li><p>
+The <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> and <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> commands check the
+type of the content of all columns in STRICT tables and show errors if
+anything is amiss.
+</p></li></ol>
+
+<p>
+Everything else about a STRICT table works the same as it does in an
+ordinary non-strict table:
+
+</p><ul>
+<li> <a href="lang_createtable.html#ckconst">CHECK constraints</a> work the same.
+</li><li> <a href="lang_createtable.html#notnullconst">NOT NULL constraints</a> work the same.
+</li><li> <a href="foreignkeys.html">FOREIGN KEY constraints</a> work the same.
+</li><li> <a href="lang_createtable.html#uniqueconst">UNIQUE constraints</a> work the same.
+</li><li> <a href="lang_createtable.html#dfltval">DEFAULT clauses</a> work the same.
+</li><li> <a href="lang_createtable.html#collateclause">COLLATE clauses</a> work the same.
+</li><li> <a href="gencol.html">Generated columns</a> work the same.
+</li><li> <a href="lang_conflict.html">ON CONFLICT clauses</a> work the same.
+</li><li> <a href="lang_createindex.html">Indexes</a> work the same.
+</li><li> <a href="autoinc.html">AUTOINCREMENT</a> works the same.
+</li><li> An <a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> column is an alias for the <a href="lang_createtable.html#rowid">rowid</a>, but an
+INT PRIMARY KEY column is not.
+</li><li> The <a href="fileformat2.html">on-disk format</a> for the <a href="fileformat2.html##sqltab">table data</a> is the same.
+</li></ul>
+
+<h1 id="the_any_datatype"><span>3. </span>The ANY datatype</h1>
+
+<p>The ability to host any type of data in a single column has proven to
+be remarkably useful over the years. In order to continue supporting this
+ability, even in STRICT tables, the new ANY datatype name is introduced.
+When the datatype of a column is "ANY", that means that any kind of data -
+integers, floating point values, strings, or binary blobs, can be inserted
+into that table and its value and datatype will be preserved exactly as
+it is inserted. As far as we know, SQLite is the only SQL database engine
+that supports this advanced capability.
+
+</p><p>The behavior of ANY is slightly different in a
+STRICT table versus an ordinary non-strict table. In a STRICT table,
+a column of type ANY always preserves the data exactly as it is received.
+For an ordinary non-strict table, a column of type ANY will attempt to
+convert strings that look like numbers into a numeric value, and if
+successful will store the numeric value rather than the original string.
+For example:
+
+</p><center>
+<table border="1">
+<tr><th>STRICT</th><th>ordinary non-strict
+</th></tr><tr><td><pre>CREATE TABLE t1(a ANY) STRICT;
+INSERT INTO t1 VALUES('000123');
+SELECT typeof(a), quote(a) FROM t1;
+-- result: text '000123'</pre>
+</td><td><pre>
+CREATE TABLE t1(a ANY);
+INSERT INTO t1 VALUES('000123');
+SELECT typeof(a), quote(a) FROM t1;
+-- result: integer 123</pre>
+</td></tr></table>
+</center>
+
+<h1 id="backwards_compatibility"><span>4. </span>Backwards Compatibility</h1>
+
+<p>The STRICT keyword at the end of a CREATE TABLE statement is only
+recognized by SQLite version 3.37.0 (2021-11-27) and later. If
+you try to open a database containing the STRICT keyword in an earlier
+version of SQLite, it will not recognize the keyword and will report
+an error (except as noted below). But apart from the extra STRICT keyword,
+the underlying <a href="fileformat2.html">file format</a> of the database is identical.
+
+</p><p>Thus, in general, a database file that contains one or more STRICT
+tables can only be read and written by SQLite version 3.37.0 or later.
+However, a database created by SQLite 3.37.0 or later can still be
+read and written by earlier versions of SQLite, going all the way back
+to version 3.0.0 (2004-06-18) as long as the database does not contain
+any STRICT tables or other features that were introduced after the older
+version of SQLite.
+
+</p><p>The STRICT keyword may still be used as an identifier.
+(It is only treated as a keyword in a certain part of the syntax,
+and sqlite3_keyword_check(..) does not recognize it as a regular keyword.)
+
+</p><h2 id="accessing_strict_tables_in_earlier_versions_of_sqlite"><span>4.1. </span>Accessing STRICT tables in earlier versions of SQLite</h2>
+
+<p>Because of a quirk in the SQL language parser, versions of SQLite prior
+to 3.37.0 can still read and write STRICT tables if they set
+"<a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>" immediately after opening the database
+file, prior to doing anything else that requires knowing the schema.
+One of the features of PRAGMA writable_schema=ON is that it disables
+errors in the schema parser. This is intentional, because a big reason for
+having PRAGMA writable_schema=ON is to facilitate recovery of database files
+with corrupt schemas. So with writable_schema=ON, when the schema
+parser reaches the STRICT keyword, it says to itself "I don't know what
+to do with this, but everything up to this point seems like a valid
+table definition so I'll just use what I have." Hence, the STRICT
+keyword is effectively ignored. Because nothing else about the file
+format changes for STRICT tables, everything else will work normally.
+Of course, rigid type enforcement will not occur because the earlier
+versions of SQLite do not know how to do that.
+
+</p><p>The <a href="cli.html#dump">.dump</a> command in the <a href="cli.html">CLI</a> sets <a href="pragma.html#pragma_writable_schema">PRAGMA writable_schema=ON</a>, because
+.dump is designed to extract as much content as it can even from a corrupt
+database file. Hence, if you are using an older version of SQLite and
+you open a database with STRICT tables in the CLI and issue the ".dump"
+command before doing anything else, you will be able to read and write
+to the STRICT tables without rigid type enforcement. This could, potentially,
+corrupt the database, by allowing incorrect types into STRICT tables.
+Reopening the database with a newer version of SQLite and running
+"<a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a>" will detect and report all such corruption.
+
+</p><h1 id="other_table_options"><span>5. </span>Other Table Options</h1>
+
+<p>The SQLite parser accepts a comma-separated list of table options after
+the final close parenthesis in a CREATE TABLE statement. As of this
+writing (2021-08-23) only two options are recognized:
+
+</p><ul>
+<li> STRICT
+</li><li> <a href="withoutrowid.html">WITHOUT ROWID</a>
+</li></ul>
+
+<p>If there are multiple options, they can be specified in any order.
+To keep things simple, the current parser accepts duplicate options without
+complaining, but that might change in future releases, so applications
+should not rely on it.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/stricttables.in?m=8e4caa36c05200047">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/support.html b/www/support.html
new file mode 100644
index 0000000..8377bb9
--- /dev/null
+++ b/www/support.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Support Options</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<a name="fx"></a>
+
+<h2>Public Forum</h2>
+
+<p>Connect with SQLite developers and other SQLite users on the
+<a href="https://sqlite.org/forum/forum">SQLite Forum</a>. This is the preferred
+way to get free help with SQLite.
+
+<a name="mailinglists"></a>
+
+
+<p>There was formerly a mailing list devoted to discussions
+about SQLite, but as of 2020-03-12, the mailing list is deprecated.
+Please use the
+<a href="https://sqlite.org/forum/forum">SQLite Forum</a> instead.
+Historical mailing lists posts are preserved at
+<a href="http://www.mail-archive.com/sqlite-users%40mailinglists.sqlite.org/">
+www.mail-archive.com</a>
+
+<a name="prosupport"></a>
+
+<h2>Paid Professional Support</h2>
+
+<p>
+If you would like <a href="prosupport.html">professional support</a> for SQLite
+or if you want custom modifications performed by the
+original author of SQLite, these services are available for a modest fee.
+For additional information contact:</p>
+
+<table border="0" cellpadding="15">
+<tr><td valign="top">
+D. Richard Hipp <br />
+Hwaci - Applied Software Research <br />
+704.948.4565 <br />
+<a href="mailto:drh@hwaci.com">drh@hwaci.com</a>
+</td><td valign="top">
+<a class="button" href="prosupport.html">More Info</a>
+</td>
+</table>
+
+<h2>Proprietary SQLite Extensions</h2>
+
+<p>The core SQLite library found on this website is in the
+<a href="copyright.html">public domain</a>. But there also exist
+proprietary, licensed extensions to SQLite.</p>
+
+<ul>
+<li><p>
+The <a href="https://www.hwaci.com/sw/sqlite/see.html">SQLite Encryption Extension (SEE)</a>
+will read and write database files encrypted using
+128-bit or 256-bit AES.</p></li>
+
+<li><p>
+The <a href="https://www.hwaci.com/sw/sqlite/cerod.html">SQLite Compressed and Encrypted Read-Only Database (CEROD)</a>
+extension will read a database file that is both compressed
+and encrypted.</p></li>
+
+<li><p>
+The <a href="https://www.hwaci.com/sw/sqlite/zipvfs.html">ZIPVFS</a>
+extension will both read and write database files that are both compressed and optionally
+encrypted using application-supplied compression and encryption routines.</p></li>
+
+<li><p>
+The <a href="th3.html">Test Harness #3 (TH3)</a> is an alternative set of test
+vectors for SQLite that verify the operation of SQLite in an
+as-deployed configuration on embedded platforms with
+<a href="testing.html#coverage">100% branch test coverage</a>.
+</li>
+</ul>
+
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/support.in?m=76de5e3c2734b7ea5">2021-01-16 12:18:53</a> UTC </small></i></p>
+
diff --git a/www/swarmvtab.html b/www/swarmvtab.html
new file mode 100644
index 0000000..b97c767
--- /dev/null
+++ b/www/swarmvtab.html
@@ -0,0 +1,429 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Swarmvtab Virtual Table</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Swarmvtab Virtual Table
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#compiling_and_using_swarmvtab">2. Compiling and Using Swarmvtab</a></div>
+<div class="fancy-toc1"><a href="#advanced_usage">3. Advanced Usage</a></div>
+<div class="fancy-toc2"><a href="#sql_parameters">3.1. SQL Parameters</a></div>
+<div class="fancy-toc2"><a href="#the_maxopen_parameter">3.2. The "maxopen" Parameter</a></div>
+<div class="fancy-toc2"><a href="#the_openclose_callback">3.3. The "openclose" Callback</a></div>
+<div class="fancy-toc2"><a href="#the_missing_callback">3.4. The "missing" Callback</a></div>
+<div class="fancy-toc2"><a href="#component_table_context_values">3.5. Component table "context" values</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<a name="overview"></a>
+<h1 tags="swarmvtab" id="overview"><span>1. </span>Overview</h1>
+
+<p>The "swarmvtab" virtual table allows the user to query a large number
+of tables (hereafter "component" tables) with similar schemas but distinct
+ranges of rowid values as if they were a single database table. The tables may
+be (and usually are) located in different databases. Swarmvtab tables are
+read-only.
+
+</p><p>Component tables must not be declared WITHOUT ROWID, and must all have
+the same schema, but may have different names within their databases. In
+this context, "the same schema" means that:
+
+</p><ul>
+ <li>All component tables must have the same set of columns, in the same
+ order.
+ </li><li>The types and default collation sequences attached to each column
+ must be the same for all component tables.
+ </li><li>All component tables must have the same PRIMARY KEY declaration (if any).
+</li></ul>
+
+<p>A swarmvtab table has the same schema as each of its component tables.
+
+</p><p>A swarmvtab virtual table is created as follows:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE temp.&lt;name&gt; USING swarmvtab(&lt;sql-statement&gt;);
+</pre></div>
+
+<p>Swarmvtab virtual tables must be created in the temp schema. Attempting
+to create a swarmvtab in the main or an attached database is an error.
+
+</p><p>The SQL statement supplied as the argument to the CREATE VIRTUAL TABLE
+statement is executed when the table is created. It must return either four
+or five columns. Each row returned describes one of the component tables. The
+first four columns are interpreted, from first to last, as:
+
+</p><ul>
+ <li> <b>Database URI</b>. A filename or URI that can be used to open the
+ database containing the component table.
+
+ </li><li> <b>Table name</b>. The name of the component table within its database.
+
+ </li><li> <b>Minimum rowid</b>. The smallest rowid value that the component
+ table may contain.
+
+ </li><li> <b>Maximum rowid</b>. The smallest rowid value that the component
+ table may contain.
+</li></ul>
+
+<p>The interpretation of the final column, if it is present, is
+<a href="swarmvtab.html#component_table_context_values">described here</a>.
+
+</p><p>For example, say the SQL statement returns the following data when
+executed:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+<tr style="text-align:left"><th>Database URI</th><th>Table name</th><th>Minimum rowid</th><th>Maximum rowid
+</th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>test.db1 </td><td>t1 </td><td>0 </td><td>10
+</td></tr><tr style="text-align:left"><td>test.db2 </td><td>t2 </td><td>11 </td><td>20
+</td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>test.db3 </td><td>t1 </td><td>21 </td><td>30
+</td></tr><tr style="text-align:left"><td>test.db4 </td><td>t1 </td><td>31 </td><td>40
+</td></tr></table>
+
+<p>and the user queries the swarmvtab table for the row with rowid value
+25. The swarmvtab table will open database file "test.db3" and read the
+data to return from table "t1" (as 25 falls within the range of rowids
+assigned to table "t1" in "test.db3").
+
+</p><p>Swarmvtab efficiently handles range and equality constraints on the
+rowid (or other INTEGER PRIMARY KEY) field only. If a query does not
+contain such a constraint, then swarmvtab finds the results by opening
+each database in turn and linearly scanning the component table. Which
+generates a correct result, but is often slow.
+
+</p><p>There must be no overlapping rowid ranges in the rows returned by
+the SQL statement. It is an error if there are.
+
+</p><p>The swarmvtab implementation may open or close databases at any
+point. By default, it attempts to limit the maximum number of
+simultaneously open database files to nine. This is not a hard limit -
+it is possible to construct a scenario that will cause swarmvtab to
+exceed it.
+
+</p><a name="compiling_and_using_swarmvtab"></a>
+<h1 tags="compilation" id="compiling_and_using_swarmvtab"><span>2. </span>Compiling and Using Swarmvtab</h1>
+
+<p>The code for the swarmvtab virtual table is found in the
+ext/misc/unionvtab.c file of the main SQLite source tree. It may be compiled
+into an SQLite <a href="loadext.html">loadable extension</a> using a command like:
+
+</p><div class="codeblock"><pre>gcc -g -fPIC -shared unionvtab.c -o unionvtab.so
+</pre></div>
+
+<p>Alternatively, the unionvtab.c file may be compiled into the application.
+In this case, the following function should be invoked to register the
+extension with each new database connection:
+
+</p><div class="codeblock"><pre>int sqlite3_unionvtab_init(sqlite3 *db, void*, void*);
+</pre></div>
+
+<p> The first argument passed should be the database handle to register the
+extension with. The second and third arguments should both be passed 0.
+
+</p><p> The source file and entry point are named for "unionvtab" instead of
+"swarmvtab". Unionvtab is a <a href="unionvtab.html">separately documented</a> virtual table
+that is bundled with swarmvtab.
+
+</p><a name="advanced_usage"></a>
+<h1 tags="advanced" id="advanced_usage"><span>3. </span>Advanced Usage</h1>
+
+<p>Most users of swarmvtab will only use the features described above.
+This section describes features designed for more esoteric use cases. These
+features all involve specifying extra optional parameters following the SQL
+statement as part of the CREATE VIRTUAL TABLE command. An optional parameter
+is specified using its name, followed by an "=" character, followed by an
+optionally quoted value. Whitespace may separate the name, "=" character
+and value. For example:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE temp.sv USING swarmvtab (
+ 'SELECT ...', <i>-- the SELECT statement</i>
+ maxopen = 20, <i>-- An optional parameter</i>
+ missing='missing_udf' <i>-- Another optional parameter</i>
+);
+</pre></div>
+
+<p>The following sections describe the supported parameters. Specifying
+an unrecognized parameter name is an error.
+
+</p><a name="sql_parameters"></a>
+<h2 tags="sql parameters" id="sql_parameters"><span>3.1. </span>SQL Parameters</h2>
+
+<p>If a parameter name begins with a ":", then it is assumed to be a
+value to bind to the SQL statement before executing it. The value is always
+bound as text. It is an error if the specified SQL parameter does not
+exist. For example:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE temp.x1 USING swarmvtab (
+ "SELECT :dir || local_filename, tbl, min, max FROM components",
+ :dir = '/home/user/app/databases/'
+);
+</pre></div>
+
+<p>When the above CREATE VIRTUAL TABLE statement is executed, swarmvtab binds
+the text value "/home/user/app/databases/" to the :dir parameter of the
+SQL statement before executing it.
+
+</p><p>A single CREATE VIRTUAL TABLE statement may contain any number of SQL
+parameters.
+
+</p><a name="the_maxopen_parameter"></a>
+<h2 tags="maxopen parameter" id="the_maxopen_parameter"><span>3.2. </span>The "maxopen" Parameter</h2>
+
+<p>By default, swarmvtab attempts to limit the number of simultaneously
+open databases to nine. This parameter allows that limit to be changed.
+For example, to create a swarmvtab table that may hold up to 30 databases
+open simultaneously:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE temp.x1 USING swarmvtab (
+ "SELECT ...",
+ maxopen=30
+);
+</pre></div>
+
+<p>Raising the number of open databases may improve performance in some
+scenarios.
+
+</p><a name="the_openclose_callback"></a>
+<h2 tags="openclose callback" id="the_openclose_callback"><span>3.3. </span>The "openclose" Callback</h2>
+
+<p>The "openclose" parameter allows the user to specify the name of a
+<a href="appfunc.html">application-defined SQL function</a> that will be invoked just before
+swarmvtab opens a database, and again just after it closes one. The first
+argument passed to the open close function is the filename or URI
+identifying the database to be opened or just recently closed (the same
+value returned in the leftmost column of the SQL statement provided to
+the CREATE VIRTUAL TABLE command). The second argument is integer value
+0 when the function is invoked before opening a database, and 1 when it
+is invoked after one is closed. For example, if:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE temp.x1 USING swarmvtab (
+ "SELECT ...",
+ openclose = 'openclose_udf'
+);
+</pre></div>
+
+<p>then before each database containing a component table is opened,
+swarmvtab effectively executes:
+
+</p><div class="codeblock"><pre>SELECT openclose_udf(&lt;database-name&gt;, 0);
+</pre></div>
+
+<p>After a database is closed, swarmvtab runs the equivalent of:
+
+</p><div class="codeblock"><pre>SELECT openclose_udf(&lt;database-name&gt;, 1);
+</pre></div>
+
+<p>Any value returned by the openclose function is ignored. If an invocation
+made before opening a database returns an error, then the database file is
+not opened and the error returned to the user. This is the only scenario
+in which swarmvtab will issue an "open" invocation without also eventually
+issuing a corresponding "close" call. If there are still databases open,
+"close" calls may be issued from within the eventual sqlite3_close() call
+on the applications database that deletes the temp schema in which the
+swarmvtab table resides.
+
+</p><p>Errors returned by "close" invocations are always ignored.
+
+</p><a name="the_missing_callback"></a>
+<h2 tags="missing callback" id="the_missing_callback"><span>3.4. </span>The "missing" Callback</h2>
+
+<p>The "missing" parameter allows the user to specify the name of a
+<a href="appfunc.html">application-defined SQL function</a> that will be invoked just before
+swarmvtab opens a database if it finds that the required database file
+is not present on disk. This provides the application with an opportunity
+to retrieve the required database from a remote source before swarmvtab
+attempts to open it. The only argument passed to the "missing" function
+is the name or URI that identifies the database being opened. Assuming:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE temp.x1 USING swarmvtab (
+ "SELECT ...",
+ openclose = 'openclose_udf',
+ missing='missing_udf'
+);
+</pre></div>
+
+<p>then the missing function is invoked as follows:
+
+</p><div class="codeblock"><pre>SELECT missing_udf(&lt;database-name&gt;);
+</pre></div>
+
+<p>If the missing function returns an error, then the database is not
+opened and the error returned to the user. If an openclose function is
+configured, then a "close" invocation is issued at this point to match
+the earlier "open". The following pseudo-code illustrates the procedure used
+by a swarmvtab instance with both missing and openclose functions configured
+when a component database is opened.
+
+</p><div class="codeblock"><pre>SELECT openclose_udf(&lt;database-name&gt;, 0);
+if( error ) return error;
+if( db does not exist ){
+ SELECT missing_udf(&lt;database-name&gt;);
+ if( error ){
+ SELECT openclose_udf(&lt;database-name&gt;, 1);
+ return error;
+ }
+}
+sqlite3_open_v2(&lt;database-name&gt;);
+if( error ){
+ SELECT openclose_udf(&lt;database-name&gt;, 1);
+ return error;
+}
+// db successfully opened!
+</pre></div>
+
+<a name="component_table_context_values"></a>
+<h2 tags="swarmvtab context" id="component_table_context_values"><span>3.5. </span>Component table "context" values</h2>
+
+<p> If the SELECT statement specified as part of the CREATE VIRTUAL
+TABLE command returns five columns, then the final column is used
+for application context only. Swarmvtab does not use this value at
+all, except that it is passed after &lt;database-name&gt; to both
+the openclose and missing functions, if specified. In other words,
+instead of invoking the functions as described above, if the "context"
+column is present swarmvtab instead invokes:
+
+</p><div class="codeblock"><pre>SELECT missing_udf(&lt;database-name&gt;, &lt;context&gt;);
+SELECT openclose_udf(&lt;database-name&gt;, &lt;context&gt;, 0);
+SELECT openclose_udf(&lt;database-name&gt;, &lt;context&gt;, 1);
+</pre></div>
+
+<p>as required.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/swarmvtab.in?m=e40b220bf8ba3413c">2018-01-22 17:51:55</a> UTC </small></i></p>
+
diff --git a/www/syntax.html b/www/syntax.html
new file mode 100644
index 0000000..7e4658d
--- /dev/null
+++ b/www/syntax.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>List of SQLite Syntax Diagrams</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<h1 align="center">List of SQLite Syntax Diagrams</h1>
+
+<div class='columns' style='columns: 15em auto;'>
+<ul style='padding-top:0;'>
+<li><a href='syntax/aggregate-function-invocation.html'>aggregate-function-invocation</a></li>
+<li><a href='syntax/alter-table-stmt.html'>alter-table-stmt</a></li>
+<li><a href='syntax/analyze-stmt.html'>analyze-stmt</a></li>
+<li><a href='syntax/attach-stmt.html'>attach-stmt</a></li>
+<li><a href='syntax/begin-stmt.html'>begin-stmt</a></li>
+<li><a href='syntax/column-constraint.html'>column-constraint</a></li>
+<li><a href='syntax/column-def.html'>column-def</a></li>
+<li><a href='syntax/column-name-list.html'>column-name-list</a></li>
+<li><a href='syntax/comment-syntax.html'>comment-syntax</a></li>
+<li><a href='syntax/commit-stmt.html'>commit-stmt</a></li>
+<li><a href='syntax/common-table-expression.html'>common-table-expression</a></li>
+<li><a href='syntax/compound-operator.html'>compound-operator</a></li>
+<li><a href='syntax/compound-select-stmt.html'>compound-select-stmt</a></li>
+<li><a href='syntax/conflict-clause.html'>conflict-clause</a></li>
+<li><a href='syntax/create-index-stmt.html'>create-index-stmt</a></li>
+<li><a href='syntax/create-table-stmt.html'>create-table-stmt</a></li>
+<li><a href='syntax/create-trigger-stmt.html'>create-trigger-stmt</a></li>
+<li><a href='syntax/create-view-stmt.html'>create-view-stmt</a></li>
+<li><a href='syntax/create-virtual-table-stmt.html'>create-virtual-table-stmt</a></li>
+<li><a href='syntax/cte-table-name.html'>cte-table-name</a></li>
+<li><a href='syntax/delete-stmt.html'>delete-stmt</a></li>
+<li><a href='syntax/delete-stmt-limited.html'>delete-stmt-limited</a></li>
+<li><a href='syntax/detach-stmt.html'>detach-stmt</a></li>
+<li><a href='syntax/drop-index-stmt.html'>drop-index-stmt</a></li>
+<li><a href='syntax/drop-table-stmt.html'>drop-table-stmt</a></li>
+<li><a href='syntax/drop-trigger-stmt.html'>drop-trigger-stmt</a></li>
+<li><a href='syntax/drop-view-stmt.html'>drop-view-stmt</a></li>
+<li><a href='syntax/expr.html'>expr</a></li>
+<li><a href='syntax/factored-select-stmt.html'>factored-select-stmt</a></li>
+<li><a href='syntax/filter-clause.html'>filter-clause</a></li>
+<li><a href='syntax/foreign-key-clause.html'>foreign-key-clause</a></li>
+<li><a href='syntax/frame-spec.html'>frame-spec</a></li>
+<li><a href='syntax/indexed-column.html'>indexed-column</a></li>
+<li><a href='syntax/insert-stmt.html'>insert-stmt</a></li>
+<li><a href='syntax/join-clause.html'>join-clause</a></li>
+<li><a href='syntax/join-constraint.html'>join-constraint</a></li>
+<li><a href='syntax/join-operator.html'>join-operator</a></li>
+<li><a href='syntax/literal-value.html'>literal-value</a></li>
+<li><a href='syntax/numeric-literal.html'>numeric-literal</a></li>
+<li><a href='syntax/ordering-term.html'>ordering-term</a></li>
+<li><a href='syntax/over-clause.html'>over-clause</a></li>
+<li><a href='syntax/pragma-stmt.html'>pragma-stmt</a></li>
+<li><a href='syntax/pragma-value.html'>pragma-value</a></li>
+<li><a href='syntax/qualified-table-name.html'>qualified-table-name</a></li>
+<li><a href='syntax/raise-function.html'>raise-function</a></li>
+<li><a href='syntax/recursive-cte.html'>recursive-cte</a></li>
+<li><a href='syntax/reindex-stmt.html'>reindex-stmt</a></li>
+<li><a href='syntax/release-stmt.html'>release-stmt</a></li>
+<li><a href='syntax/result-column.html'>result-column</a></li>
+<li><a href='syntax/returning-clause.html'>returning-clause</a></li>
+<li><a href='syntax/rollback-stmt.html'>rollback-stmt</a></li>
+<li><a href='syntax/savepoint-stmt.html'>savepoint-stmt</a></li>
+<li><a href='syntax/select-core.html'>select-core</a></li>
+<li><a href='syntax/select-stmt.html'>select-stmt</a></li>
+<li><a href='syntax/signed-number.html'>signed-number</a></li>
+<li><a href='syntax/simple-function-invocation.html'>simple-function-invocation</a></li>
+<li><a href='syntax/simple-select-stmt.html'>simple-select-stmt</a></li>
+<li><a href='syntax/sql-stmt.html'>sql-stmt</a></li>
+<li><a href='syntax/sql-stmt-list.html'>sql-stmt-list</a></li>
+<li><a href='syntax/table-constraint.html'>table-constraint</a></li>
+<li><a href='syntax/table-options.html'>table-options</a></li>
+<li><a href='syntax/table-or-subquery.html'>table-or-subquery</a></li>
+<li><a href='syntax/type-name.html'>type-name</a></li>
+<li><a href='syntax/update-stmt.html'>update-stmt</a></li>
+<li><a href='syntax/update-stmt-limited.html'>update-stmt-limited</a></li>
+<li><a href='syntax/upsert-clause.html'>upsert-clause</a></li>
+<li><a href='syntax/vacuum-stmt.html'>vacuum-stmt</a></li>
+<li><a href='syntax/window-defn.html'>window-defn</a></li>
+<li><a href='syntax/window-function-invocation.html'>window-function-invocation</a></li>
+<li><a href='syntax/with-clause.html'>with-clause</a></li>
+</ul>
+</div>
+
+
+
diff --git a/www/syntax/aggregate-function-invocation.html b/www/syntax/aggregate-function-invocation.html
new file mode 100644
index 0000000..bc17126
--- /dev/null
+++ b/www/syntax/aggregate-function-invocation.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: aggregate-function-invocation</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>aggregate-function-invocation</h1>
+<div class='imgcontainer'>
+<div style="max-width:819px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 819.533 117.504">
+<circle cx="5" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,56 20,60 20,52" style="fill:rgb(0,0,0)"/>
+<path d="M9,56L26,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,71L156,71A15 15 0 0 0 171 56A15 15 0 0 0 156 41L47,41A15 15 0 0 0 32 56A15 15 0 0 0 47 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="102" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">aggregate-func</text>
+<polygon points="189,56 178,60 178,52" style="fill:rgb(0,0,0)"/>
+<path d="M171,56L183,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M204,71A15 15 0 0 0 219 56A15 15 0 0 0 204 41A15 15 0 0 0 189 56A15 15 0 0 0 204 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="242,56 231,60 231,52" style="fill:rgb(0,0,0)"/>
+<path d="M219,56L237,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="277,26 265,30 265,22" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,41 L 254,41 Q 254,26 263,26 L 271,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M292,41L360,41A15 15 0 0 0 376 26L376,26A15 15 0 0 0 360 11L292,11A15 15 0 0 0 277 26L277,26A15 15 0 0 0 292 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="394,26 382,30 382,22" style="fill:rgb(0,0,0)"/>
+<path d="M376,26L388,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="428,56 417,60 417,52" style="fill:rgb(0,0,0)"/>
+<path d="M394,26 L 399,26 Q 405,26 405,41 L 405,41 Q 405,56 414,56 L 422,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,56 453,60 453,52" style="fill:rgb(0,0,0)"/>
+<path d="M428,56L458,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M464,71L513,71L513,41L464,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="567,56 556,60 556,52" style="fill:rgb(0,0,0)"/>
+<path d="M513,56L562,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,71A15 15 0 0 0 598 56A15 15 0 0 0 582 41A15 15 0 0 0 567 56A15 15 0 0 0 582 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="644,86 632,91 632,82" style="fill:rgb(0,0,0)"/>
+<path d="M598,56 L 609,56 Q 621,56 621,71 L 621,71 Q 621,86 629,86 L 638,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,101L756,101L756,71L644,71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="700" y="86" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="810,56 798,60 798,52" style="fill:rgb(0,0,0)"/>
+<path d="M756,86 L 765,86 Q 774,86 774,71 L 774,71 Q 774,56 789,56 L 789,56 L 804,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="813" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="700,56 688,60 688,52" style="fill:rgb(0,0,0)"/>
+<path d="M598,56L694,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="810,56 798,60 798,52" style="fill:rgb(0,0,0)"/>
+<path d="M700,56L804,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="326,56 315,60 315,52" style="fill:rgb(0,0,0)"/>
+<path d="M242,56L321,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="428,56 417,60 417,52" style="fill:rgb(0,0,0)"/>
+<path d="M326,56L422,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,32A15 15 0 0 0 504 17A15 15 0 0 0 489 2A15 15 0 0 0 474 17A15 15 0 0 0 489 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="504,17 515,12 515,21" style="fill:rgb(0,0,0)"/>
+<path d="M513,56 L 525,56 Q 536,56 536,41 L 536,32 Q 536,17 523,17 L 510,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,56 453,60 453,52" style="fill:rgb(0,0,0)"/>
+<path d="M474,17 L 456,17 Q 441,17 441,32 L 441,41 Q 441,56 450,56 L 458,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,101A15 15 0 0 0 408 86L408,86A15 15 0 0 0 393 71A15 15 0 0 0 378 86L378,86A15 15 0 0 0 393 101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="393" y="86" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="378,86 367,91 367,82" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,71 L 254,71 Q 254,86 269,86 L 357,86 L 372,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,86 477,91 477,82" style="fill:rgb(0,0,0)"/>
+<path d="M408,86L483,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,86 L 525,86 Q 540,86 540,71 L 540,71 Q 540,56 546,56 L 552,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="393,111 382,115 382,106" style="fill:rgb(0,0,0)"/>
+<path d="M326,86 L 332,86 Q 338,86 338,98 Q 338,111 353,111 L 373,111 L 388,111" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,111 L 414,111 Q 429,111 429,98 Q 429,86 435,86 L 441,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./filter-clause.html'>filter-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>
+</div>
+
+
+
diff --git a/www/syntax/alter-table-stmt.html b/www/syntax/alter-table-stmt.html
new file mode 100644
index 0000000..b1f5bd9
--- /dev/null
+++ b/www/syntax/alter-table-stmt.html
@@ -0,0 +1,249 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: alter-table-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>alter-table-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:754px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 754.521 320.904">
+<circle cx="5" cy="32" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="37,32 26,37 26,28" style="fill:rgb(0,0,0)"/>
+<path d="M9,32L31,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M37,32L59,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47L113,47A15 15 0 0 0 129 32A15 15 0 0 0 113 17L74,17A15 15 0 0 0 59 32A15 15 0 0 0 74 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="94" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALTER</text>
+<polygon points="165,32 153,37 153,28" style="fill:rgb(0,0,0)"/>
+<path d="M129,32L159,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,47L219,47A15 15 0 0 0 234 32A15 15 0 0 0 219 17L180,17A15 15 0 0 0 165 32A15 15 0 0 0 180 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="251,32 240,37 240,28" style="fill:rgb(0,0,0)"/>
+<path d="M234,32L245,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="287,32 276,37 276,28" style="fill:rgb(0,0,0)"/>
+<path d="M251,32L281,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,47L399,47A15 15 0 0 0 414 32A15 15 0 0 0 399 17L302,17A15 15 0 0 0 287 32A15 15 0 0 0 302 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="436,32 425,37 425,28" style="fill:rgb(0,0,0)"/>
+<path d="M414,32L431,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M452,47A15 15 0 0 0 467 32A15 15 0 0 0 452 17A15 15 0 0 0 436 32A15 15 0 0 0 452 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="452" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="503,32 491,37 491,28" style="fill:rgb(0,0,0)"/>
+<path d="M467,32L497,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M518,47L593,47A15 15 0 0 0 608 32A15 15 0 0 0 593 17L518,17A15 15 0 0 0 503 32A15 15 0 0 0 518 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="555" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="376,6 364,10 364,2" style="fill:rgb(0,0,0)"/>
+<path d="M251,32 L 260,32 Q 268,32 268,19 Q 268,6 283,6 L 355,6 L 370,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,6 L 461,6 Q 476,6 476,19 Q 476,32 489,32 L 503,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="626,56 622,45 630,45" style="fill:rgb(0,0,0)"/>
+<path d="M608,32 L 617,32 Q 626,32 626,41 L 626,51" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,81 362,76 362,85" style="fill:rgb(0,0,0)"/>
+<path d="M626,56 L 626,68 Q 626,81 611,81 L 371,81 L 356,81" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,81 L 20,81 Q 5,81 5,88 L 5,96" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="41,126 30,130 30,122" style="fill:rgb(0,0,0)"/>
+<path d="M5,96 L 5,111 Q 5,126 20,126 L 20,126 L 36,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,141L117,141A15 15 0 0 0 132 126A15 15 0 0 0 117 111L56,111A15 15 0 0 0 41 126A15 15 0 0 0 56 141Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="126" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RENAME</text>
+<polygon points="150,126 139,130 139,122" style="fill:rgb(0,0,0)"/>
+<path d="M132,126L144,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,141L171,141A15 15 0 0 0 186 126A15 15 0 0 0 171 111L165,111A15 15 0 0 0 150 126A15 15 0 0 0 165 141Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="126" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TO</text>
+<polygon points="204,126 193,130 193,122" style="fill:rgb(0,0,0)"/>
+<path d="M186,126L198,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,141L334,141A15 15 0 0 0 349 126A15 15 0 0 0 334 111L219,111A15 15 0 0 0 204 126A15 15 0 0 0 219 141Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="277" y="126" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">new-table-name</text>
+<polygon points="41,171 30,176 30,167" style="fill:rgb(0,0,0)"/>
+<path d="M5,96 L 5,156 Q 5,171 20,171 L 21,171 L 36,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,186L117,186A15 15 0 0 0 132 171A15 15 0 0 0 117 156L56,156A15 15 0 0 0 41 171A15 15 0 0 0 56 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RENAME</text>
+<polygon points="149,171 138,176 138,167" style="fill:rgb(0,0,0)"/>
+<path d="M132,171L143,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="185,171 174,176 174,167" style="fill:rgb(0,0,0)"/>
+<path d="M149,171L179,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,186L263,186A15 15 0 0 0 278 171A15 15 0 0 0 263 156L200,156A15 15 0 0 0 185 171A15 15 0 0 0 200 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="232" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLUMN</text>
+<polygon points="314,171 303,176 303,167" style="fill:rgb(0,0,0)"/>
+<path d="M278,171L308,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M329,186L423,186A15 15 0 0 0 439 171A15 15 0 0 0 423 156L329,156A15 15 0 0 0 314 171A15 15 0 0 0 329 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="376" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="457,171 445,176 445,167" style="fill:rgb(0,0,0)"/>
+<path d="M439,171L451,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,186L477,186A15 15 0 0 0 492 171A15 15 0 0 0 477 156L472,156A15 15 0 0 0 457 171A15 15 0 0 0 472 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="475" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TO</text>
+<polygon points="510,171 499,176 499,167" style="fill:rgb(0,0,0)"/>
+<path d="M492,171L505,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M526,186L660,186A15 15 0 0 0 675 171A15 15 0 0 0 660 156L526,156A15 15 0 0 0 510 171A15 15 0 0 0 526 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">new-column-name</text>
+<polygon points="692,171 680,176 680,167" style="fill:rgb(0,0,0)"/>
+<path d="M675,171L686,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="745,126 733,130 733,122" style="fill:rgb(0,0,0)"/>
+<path d="M692,171 L 700,171 Q 709,171 709,156 L 709,141 Q 709,126 724,126 L 724,126 L 739,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="748" cy="126" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="745,126 733,130 733,122" style="fill:rgb(0,0,0)"/>
+<path d="M349,126L739,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="232,198 220,202 220,193" style="fill:rgb(0,0,0)"/>
+<path d="M149,171 L 158,171 Q 166,171 166,184 Q 166,198 181,198 L 211,198 L 226,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="314,171 303,176 303,167" style="fill:rgb(0,0,0)"/>
+<path d="M232,198 L 272,198 Q 287,198 287,184 Q 287,171 298,171 L 308,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="41,232 30,236 30,227" style="fill:rgb(0,0,0)"/>
+<path d="M5,96 L 5,217 Q 5,232 20,232 L 21,232 L 36,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,247L76,247A15 15 0 0 0 91 232A15 15 0 0 0 76 217L56,217A15 15 0 0 0 41 232A15 15 0 0 0 56 247Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="232" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ADD</text>
+<polygon points="108,232 97,236 97,227" style="fill:rgb(0,0,0)"/>
+<path d="M91,232L102,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="144,232 133,236 133,227" style="fill:rgb(0,0,0)"/>
+<path d="M108,232L138,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M159,247L222,247A15 15 0 0 0 237 232A15 15 0 0 0 222 217L159,217A15 15 0 0 0 144 232A15 15 0 0 0 159 247Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="232" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLUMN</text>
+<polygon points="273,232 262,236 262,227" style="fill:rgb(0,0,0)"/>
+<path d="M237,232L267,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,247L378,247L378,217L273,217Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="232" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-def</text>
+<polygon points="692,232 680,236 680,227" style="fill:rgb(0,0,0)"/>
+<path d="M378,232L686,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="191,258 179,262 179,254" style="fill:rgb(0,0,0)"/>
+<path d="M108,232 L 117,232 Q 125,232 125,245 Q 125,258 140,258 L 170,258 L 185,258" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,232 262,236 262,227" style="fill:rgb(0,0,0)"/>
+<path d="M191,258 L 231,258 Q 246,258 246,245 Q 246,232 257,232 L 267,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="745,126 733,130 733,122" style="fill:rgb(0,0,0)"/>
+<path d="M692,232 L 700,232 Q 709,232 709,217 L 709,141 Q 709,126 724,126 L 724,126 L 739,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="41,288 30,292 30,283" style="fill:rgb(0,0,0)"/>
+<path d="M5,217 L 5,273 Q 5,288 20,288 L 21,288 L 36,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,303L87,303A15 15 0 0 0 103 288A15 15 0 0 0 87 273L56,273A15 15 0 0 0 41 288A15 15 0 0 0 56 303Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="72" y="288" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="120,288 108,292 108,283" style="fill:rgb(0,0,0)"/>
+<path d="M103,288L114,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,288 144,292 144,283" style="fill:rgb(0,0,0)"/>
+<path d="M120,288L150,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M171,303L234,303A15 15 0 0 0 249 288A15 15 0 0 0 234 273L171,273A15 15 0 0 0 156 288A15 15 0 0 0 171 303Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="202" y="288" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLUMN</text>
+<polygon points="285,288 273,292 273,283" style="fill:rgb(0,0,0)"/>
+<path d="M249,288L279,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,303L394,303A15 15 0 0 0 409 288A15 15 0 0 0 394 273L300,273A15 15 0 0 0 285 288A15 15 0 0 0 300 303Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="288" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="692,288 680,292 680,283" style="fill:rgb(0,0,0)"/>
+<path d="M409,288L686,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M692,288 L 700,288 Q 709,288 709,273 L 709,232 L 709,217" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="202,314 191,318 191,310" style="fill:rgb(0,0,0)"/>
+<path d="M120,288 L 127,288 Q 135,288 135,301 Q 135,314 150,314 L 181,314 L 196,314" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M202,314 L 245,314 Q 260,314 260,301 Q 260,288 268,288 L 275,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./column-def.html'>column-def</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>
+</div>
+
+
+
diff --git a/www/syntax/analyze-stmt.html b/www/syntax/analyze-stmt.html
new file mode 100644
index 0000000..ac3c82a
--- /dev/null
+++ b/www/syntax/analyze-stmt.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: analyze-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>analyze-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:654px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 654.557 140.4">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L111,32A15 15 0 0 0 127 17A15 15 0 0 0 111 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="79" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ANALYZE</text>
+<polygon points="150,17 138,21 138,12" style="fill:rgb(0,0,0)"/>
+<path d="M127,17L144,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="188,123 176,127 176,118" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 157,17 Q 165,17 165,32 L 165,108 Q 165,123 173,123 L 182,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M203,138L299,138A15 15 0 0 0 314 123A15 15 0 0 0 299 108L203,108A15 15 0 0 0 188 123A15 15 0 0 0 203 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="337,123 326,127 326,118" style="fill:rgb(0,0,0)"/>
+<path d="M314,123L332,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M352,138A15 15 0 0 0 368 123A15 15 0 0 0 352 108A15 15 0 0 0 337 123A15 15 0 0 0 352 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="352" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="391,123 379,127 379,118" style="fill:rgb(0,0,0)"/>
+<path d="M368,123L385,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M406,138L556,138A15 15 0 0 0 571 123A15 15 0 0 0 556 108L406,108A15 15 0 0 0 391 123A15 15 0 0 0 406 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-index-name</text>
+<polygon points="594,123 582,127 582,118" style="fill:rgb(0,0,0)"/>
+<path d="M571,123L588,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="645,17 633,21 633,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,123 L 601,123 Q 609,123 609,108 L 609,32 Q 609,17 624,17 L 624,17 L 639,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="648" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,17 386,21 386,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L391,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,17L633,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="188,47 176,51 176,43" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 157,17 Q 165,17 165,32 L 165,32 Q 165,47 173,47 L 182,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M203,62L299,62A15 15 0 0 0 314 47L314,47A15 15 0 0 0 299 32L203,32A15 15 0 0 0 188 47L188,47A15 15 0 0 0 203 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="594,47 582,51 582,43" style="fill:rgb(0,0,0)"/>
+<path d="M314,47L588,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M594,47 L 601,47 Q 609,47 609,40 L 609,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="188,85 176,89 176,81" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 157,17 Q 165,17 165,32 L 165,70 Q 165,85 173,85 L 182,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M203,100L353,100A15 15 0 0 0 368 85A15 15 0 0 0 353 70L203,70A15 15 0 0 0 188 85A15 15 0 0 0 203 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-or-table-name</text>
+<polygon points="594,85 582,89 582,81" style="fill:rgb(0,0,0)"/>
+<path d="M368,85L588,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M594,85 L 601,85 Q 609,85 609,77 L 609,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_analyze.html'>lang_analyze.html</a>
+</div>
+
+
+
diff --git a/www/syntax/attach-stmt.html b/www/syntax/attach-stmt.html
new file mode 100644
index 0000000..02f84d9
--- /dev/null
+++ b/www/syntax/attach-stmt.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: attach-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>attach-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:606px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 606.701 47.952">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L101,32A15 15 0 0 0 116 17A15 15 0 0 0 101 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ATTACH</text>
+<polygon points="139,17 128,21 128,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L134,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="175,17 164,21 164,12" style="fill:rgb(0,0,0)"/>
+<path d="M139,17L170,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,32L267,32A15 15 0 0 0 282 17A15 15 0 0 0 267 2L191,2A15 15 0 0 0 175 17A15 15 0 0 0 191 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="229" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DATABASE</text>
+<polygon points="318,17 306,21 306,12" style="fill:rgb(0,0,0)"/>
+<path d="M282,17L312,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M318,32L367,32L367,2L318,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="390,17 378,21 378,12" style="fill:rgb(0,0,0)"/>
+<path d="M367,17L384,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M405,32L409,32A15 15 0 0 0 424 17A15 15 0 0 0 409 2L405,2A15 15 0 0 0 390 17A15 15 0 0 0 405 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="407" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="447,17 436,21 436,12" style="fill:rgb(0,0,0)"/>
+<path d="M424,17L441,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,32L559,32A15 15 0 0 0 574 17A15 15 0 0 0 559 2L462,2A15 15 0 0 0 447 17A15 15 0 0 0 462 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="510" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="597,17 585,21 585,12" style="fill:rgb(0,0,0)"/>
+<path d="M574,17L591,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="600" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="229,41 217,45 217,37" style="fill:rgb(0,0,0)"/>
+<path d="M139,17 L 147,17 Q 154,17 154,29 Q 154,41 169,41 L 208,41 L 223,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M229,41 L 276,41 Q 291,41 291,29 Q 291,17 298,17 L 306,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>
+</div>
+
+
+
diff --git a/www/syntax/begin-stmt.html b/www/syntax/begin-stmt.html
new file mode 100644
index 0000000..e5418d8
--- /dev/null
+++ b/www/syntax/begin-stmt.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: begin-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>begin-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:560px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 560.669 140.4">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L86,32A15 15 0 0 0 101 17A15 15 0 0 0 86 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BEGIN</text>
+<polygon points="124,17 112,21 112,12" style="fill:rgb(0,0,0)"/>
+<path d="M101,17L118,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="162,123 150,127 150,118" style="fill:rgb(0,0,0)"/>
+<path d="M124,17 L 131,17 Q 139,17 139,32 L 139,108 Q 139,123 147,123 L 156,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,138L261,138A15 15 0 0 0 276 123A15 15 0 0 0 261 108L177,108A15 15 0 0 0 162 123A15 15 0 0 0 177 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUSIVE</text>
+<polygon points="299,123 287,127 287,118" style="fill:rgb(0,0,0)"/>
+<path d="M276,123L293,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="337,17 325,21 325,12" style="fill:rgb(0,0,0)"/>
+<path d="M299,123 L 306,123 Q 314,123 314,108 L 314,32 Q 314,17 322,17 L 331,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="373,17 361,21 361,12" style="fill:rgb(0,0,0)"/>
+<path d="M337,17L367,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,32L500,32A15 15 0 0 0 515 17A15 15 0 0 0 500 2L388,2A15 15 0 0 0 373 17A15 15 0 0 0 388 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRANSACTION</text>
+<polygon points="551,17 539,21 539,12" style="fill:rgb(0,0,0)"/>
+<path d="M515,17L545,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="554" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="444,47 432,51 432,43" style="fill:rgb(0,0,0)"/>
+<path d="M337,17 L 344,17 Q 352,17 352,32 L 352,32 Q 352,47 367,47 L 423,47 L 438,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,47 L 511,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 L 541,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M124,17L325,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="162,47 150,51 150,43" style="fill:rgb(0,0,0)"/>
+<path d="M139,32 L 139,39 Q 139,47 147,47 L 156,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,62L257,62A15 15 0 0 0 272 47L272,47A15 15 0 0 0 257 32L177,32A15 15 0 0 0 162 47L162,47A15 15 0 0 0 177 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="217" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRED</text>
+<polygon points="295,47 284,51 284,43" style="fill:rgb(0,0,0)"/>
+<path d="M272,47L289,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,47 L 304,47 Q 314,47 314,40 L 314,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="162,85 150,89 150,81" style="fill:rgb(0,0,0)"/>
+<path d="M139,32 L 139,70 Q 139,85 147,85 L 156,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,100L265,100A15 15 0 0 0 281 85A15 15 0 0 0 265 70L177,70A15 15 0 0 0 162 85A15 15 0 0 0 177 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IMMEDIATE</text>
+<polygon points="304,85 292,89 292,81" style="fill:rgb(0,0,0)"/>
+<path d="M281,85L298,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M304,85 L 309,85 Q 314,85 314,77 L 314,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_transaction.html'>lang_transaction.html</a>
+</div>
+
+
+
diff --git a/www/syntax/column-constraint.html b/www/syntax/column-constraint.html
new file mode 100644
index 0000000..94b06a4
--- /dev/null
+++ b/www/syntax/column-constraint.html
@@ -0,0 +1,330 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: column-constraint</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>column-constraint</h1>
+<div class='imgcontainer'>
+<div style="max-width:844px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 844.306 578.88">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,40 43,28 51,28" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,25 L 47,34" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L183,32A15 15 0 0 0 198 17A15 15 0 0 0 183 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="133" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONSTRAINT</text>
+<polygon points="221,17 210,21 210,12" style="fill:rgb(0,0,0)"/>
+<path d="M198,17L215,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,32L263,32A15 15 0 0 0 279 17A15 15 0 0 0 263 2L236,2A15 15 0 0 0 221 17A15 15 0 0 0 236 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="250" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="173,47 185,43 185,51" style="fill:rgb(0,0,0)"/>
+<path d="M279,17 L 300,17 Q 315,17 315,32 L 315,32 Q 315,47 300,47 L 194,47 L 179,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M173,47 L 62,47 Q 47,47 47,55 L 47,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,77 58,82 58,73" style="fill:rgb(0,0,0)"/>
+<path d="M47,40 L 47,62 Q 47,77 56,77 L 64,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,92L148,92A15 15 0 0 0 163 77A15 15 0 0 0 148 62L85,62A15 15 0 0 0 70 77A15 15 0 0 0 85 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRIMARY</text>
+<polygon points="186,77 174,82 174,73" style="fill:rgb(0,0,0)"/>
+<path d="M163,77L180,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,92L217,92A15 15 0 0 0 233 77A15 15 0 0 0 217 62L201,62A15 15 0 0 0 186 77A15 15 0 0 0 201 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">KEY</text>
+<polygon points="271,138 259,142 259,133" style="fill:rgb(0,0,0)"/>
+<path d="M233,77 L 240,77 Q 248,77 248,92 L 248,123 Q 248,138 256,138 L 265,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M286,153L316,153A15 15 0 0 0 331 138A15 15 0 0 0 316 123L286,123A15 15 0 0 0 271 138A15 15 0 0 0 286 153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="301" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="354,138 343,142 343,133" style="fill:rgb(0,0,0)"/>
+<path d="M331,138L348,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,77 381,82 381,73" style="fill:rgb(0,0,0)"/>
+<path d="M354,138 L 362,138 Q 369,138 369,123 L 369,92 Q 369,77 378,77 L 386,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,92L525,92L525,62L392,62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="459" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="549,77 537,82 537,73" style="fill:rgb(0,0,0)"/>
+<path d="M525,77L543,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="587,108 575,112 575,103" style="fill:rgb(0,0,0)"/>
+<path d="M549,77 L 556,77 Q 564,77 564,92 L 564,93 Q 564,108 572,108 L 581,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M602,123L745,123A15 15 0 0 0 760 108A15 15 0 0 0 745 92L602,92A15 15 0 0 0 587 108A15 15 0 0 0 602 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="673" y="108" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AUTOINCREMENT</text>
+<polygon points="783,108 772,112 772,103" style="fill:rgb(0,0,0)"/>
+<path d="M760,108L778,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="834,77 823,82 823,73" style="fill:rgb(0,0,0)"/>
+<path d="M783,108 L 791,108 Q 798,108 798,93 L 798,92 Q 798,77 813,77 L 814,77 L 829,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="838" cy="77" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="673,77 662,82 662,73" style="fill:rgb(0,0,0)"/>
+<path d="M549,77L668,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M673,77L827,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="301,77 289,82 289,73" style="fill:rgb(0,0,0)"/>
+<path d="M233,77L295,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,77L381,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="271,100 259,104 259,96" style="fill:rgb(0,0,0)"/>
+<path d="M233,77 L 240,77 Q 248,77 248,89 Q 248,100 256,100 L 265,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M286,115L302,115A15 15 0 0 0 318 100A15 15 0 0 0 302 85L286,85A15 15 0 0 0 271 100A15 15 0 0 0 286 115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="294" y="100" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="354,100 343,104 343,96" style="fill:rgb(0,0,0)"/>
+<path d="M318,100L348,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,100 L 362,100 Q 369,100 369,92 L 369,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,183 58,187 58,179" style="fill:rgb(0,0,0)"/>
+<path d="M47,62 L 47,168 Q 47,183 56,183 L 64,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,198L105,198A15 15 0 0 0 120 183A15 15 0 0 0 105 168L85,168A15 15 0 0 0 70 183A15 15 0 0 0 85 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="143,183 132,187 132,179" style="fill:rgb(0,0,0)"/>
+<path d="M120,183L138,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,198L190,198A15 15 0 0 0 205 183A15 15 0 0 0 190 168L158,168A15 15 0 0 0 143 183A15 15 0 0 0 158 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="174" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="228,183 216,187 216,179" style="fill:rgb(0,0,0)"/>
+<path d="M205,183L222,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,198L361,198L361,168L228,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="294" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="783,183 772,187 772,179" style="fill:rgb(0,0,0)"/>
+<path d="M361,183L778,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,183 L 791,183 Q 798,183 798,168 L 798,107 L 798,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,221 58,225 58,217" style="fill:rgb(0,0,0)"/>
+<path d="M47,168 L 47,206 Q 47,221 56,221 L 64,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,236L140,236A15 15 0 0 0 155 221A15 15 0 0 0 140 206L85,206A15 15 0 0 0 70 221A15 15 0 0 0 85 236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="221" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<polygon points="178,221 167,225 167,217" style="fill:rgb(0,0,0)"/>
+<path d="M155,221L172,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M178,236L311,236L311,206L178,206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="245" y="221" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="783,221 772,225 772,217" style="fill:rgb(0,0,0)"/>
+<path d="M311,221L778,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,221 L 791,221 Q 798,221 798,206 L 798,183 L 798,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,259 58,263 58,254" style="fill:rgb(0,0,0)"/>
+<path d="M47,206 L 47,244 Q 47,259 56,259 L 64,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,274L131,274A15 15 0 0 0 146 259A15 15 0 0 0 131 244L85,244A15 15 0 0 0 70 259A15 15 0 0 0 85 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="259" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CHECK</text>
+<polygon points="169,259 157,263 157,254" style="fill:rgb(0,0,0)"/>
+<path d="M146,259L163,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M184,274A15 15 0 0 0 199 259A15 15 0 0 0 184 244A15 15 0 0 0 169 259A15 15 0 0 0 184 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="259" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="222,259 210,263 210,254" style="fill:rgb(0,0,0)"/>
+<path d="M199,259L216,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,274L271,274L271,244L222,244Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="259" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="294,259 283,263 283,254" style="fill:rgb(0,0,0)"/>
+<path d="M271,259L288,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,274A15 15 0 0 0 324 259A15 15 0 0 0 309 244A15 15 0 0 0 294 259A15 15 0 0 0 309 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="259" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,259 772,263 772,254" style="fill:rgb(0,0,0)"/>
+<path d="M324,259L778,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,259 L 791,259 Q 798,259 798,244 L 798,221 L 798,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,297 58,301 58,292" style="fill:rgb(0,0,0)"/>
+<path d="M47,244 L 47,282 Q 47,297 56,297 L 64,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,312L150,312A15 15 0 0 0 166 297A15 15 0 0 0 150 281L85,281A15 15 0 0 0 70 297A15 15 0 0 0 85 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="118" y="297" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="189,297 177,301 177,292" style="fill:rgb(0,0,0)"/>
+<path d="M166,297L183,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="225,297 213,301 213,292" style="fill:rgb(0,0,0)"/>
+<path d="M189,297L219,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,312A15 15 0 0 0 255 297A15 15 0 0 0 240 281A15 15 0 0 0 225 297A15 15 0 0 0 240 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="240" y="297" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="278,297 266,301 266,292" style="fill:rgb(0,0,0)"/>
+<path d="M255,297L272,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,312L327,312L327,281L278,281Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="297" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="350,297 339,301 339,292" style="fill:rgb(0,0,0)"/>
+<path d="M327,297L344,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,312A15 15 0 0 0 380 297A15 15 0 0 0 365 281A15 15 0 0 0 350 297A15 15 0 0 0 365 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="297" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,297 772,301 772,292" style="fill:rgb(0,0,0)"/>
+<path d="M380,297L778,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297 L 791,297 Q 798,297 798,282 L 798,259 L 798,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="227,334 215,339 215,330" style="fill:rgb(0,0,0)"/>
+<path d="M189,297 L 196,297 Q 204,297 204,312 L 204,319 Q 204,334 212,334 L 221,334" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,349L340,349L340,319L227,319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="334" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="363,334 351,339 351,330" style="fill:rgb(0,0,0)"/>
+<path d="M340,334L357,334" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,334 L 395,334 Q 410,334 410,319 L 410,312 Q 410,297 425,297 L 431,297 L 446,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="227,372 215,376 215,368" style="fill:rgb(0,0,0)"/>
+<path d="M189,297 L 196,297 Q 204,297 204,312 L 204,357 Q 204,372 212,372 L 221,372" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,387L364,387L364,357L227,357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="372" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="387,372 376,376 376,368" style="fill:rgb(0,0,0)"/>
+<path d="M364,372L382,372" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,372 L 399,372 Q 410,372 410,357 L 410,312 Q 410,297 425,297 L 431,297 L 446,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,410 58,414 58,406" style="fill:rgb(0,0,0)"/>
+<path d="M47,281 L 47,395 Q 47,410 56,410 L 64,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,425L149,425A15 15 0 0 0 164 410A15 15 0 0 0 149 395L85,395A15 15 0 0 0 70 410A15 15 0 0 0 85 425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="117" y="410" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="187,410 176,414 176,406" style="fill:rgb(0,0,0)"/>
+<path d="M164,410L182,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M202,425L308,425A15 15 0 0 0 323 410A15 15 0 0 0 308 395L202,395A15 15 0 0 0 187 410A15 15 0 0 0 202 425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="255" y="410" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="783,410 772,414 772,406" style="fill:rgb(0,0,0)"/>
+<path d="M323,410L778,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,410 L 791,410 Q 798,410 798,395 L 798,296 L 798,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,448 58,452 58,443" style="fill:rgb(0,0,0)"/>
+<path d="M47,395 L 47,433 Q 47,448 56,448 L 64,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,463L236,463L236,433L70,433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="448" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-key-clause</text>
+<polygon points="783,448 772,452 772,443" style="fill:rgb(0,0,0)"/>
+<path d="M236,448L778,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,448 L 791,448 Q 798,448 798,433 L 798,410 L 798,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,486 58,490 58,481" style="fill:rgb(0,0,0)"/>
+<path d="M47,433 L 47,471 Q 47,486 56,486 L 64,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,501L178,501A15 15 0 0 0 193 486A15 15 0 0 0 178 470L85,470A15 15 0 0 0 70 486A15 15 0 0 0 85 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="131" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GENERATED</text>
+<polygon points="216,486 204,490 204,481" style="fill:rgb(0,0,0)"/>
+<path d="M193,486L210,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M231,501L286,501A15 15 0 0 0 301 486A15 15 0 0 0 286 470L231,470A15 15 0 0 0 216 486A15 15 0 0 0 231 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALWAYS</text>
+<polygon points="337,486 325,490 325,481" style="fill:rgb(0,0,0)"/>
+<path d="M301,486L331,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M352,501L356,501A15 15 0 0 0 371 486A15 15 0 0 0 356 470L352,470A15 15 0 0 0 337 486A15 15 0 0 0 352 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="394,486 382,490 382,481" style="fill:rgb(0,0,0)"/>
+<path d="M371,486L388,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,501A15 15 0 0 0 424 486A15 15 0 0 0 409 470A15 15 0 0 0 394 486A15 15 0 0 0 409 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="486" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="447,486 436,490 436,481" style="fill:rgb(0,0,0)"/>
+<path d="M424,486L441,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,501L496,501L496,470L447,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="472" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="519,486 508,490 508,481" style="fill:rgb(0,0,0)"/>
+<path d="M496,486L514,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,501A15 15 0 0 0 550 486A15 15 0 0 0 535 470A15 15 0 0 0 519 486A15 15 0 0 0 535 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="535" y="486" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,486 772,490 772,481" style="fill:rgb(0,0,0)"/>
+<path d="M550,486L778,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,486 L 791,486 Q 798,486 798,471 L 798,448 L 798,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="185,516 174,520 174,511" style="fill:rgb(0,0,0)"/>
+<path d="M47,470 L 47,501 Q 47,516 62,516 L 165,516 L 180,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M185,516 L 297,516 Q 312,516 312,501 L 312,501 Q 312,486 320,486 L 327,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="596,561 584,565 584,557" style="fill:rgb(0,0,0)"/>
+<path d="M550,486 L 561,486 Q 573,486 573,501 L 573,546 Q 573,561 581,561 L 590,561" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M611,576L670,576A15 15 0 0 0 686 561A15 15 0 0 0 670 546L611,546A15 15 0 0 0 596 561A15 15 0 0 0 611 576Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="641" y="561" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIRTUAL</text>
+<polygon points="783,561 772,565 772,557" style="fill:rgb(0,0,0)"/>
+<path d="M686,561L778,561" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,561 L 791,561 Q 798,561 798,546 L 798,485 L 798,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="596,523 584,528 584,519" style="fill:rgb(0,0,0)"/>
+<path d="M550,486 L 561,486 Q 573,486 573,501 L 573,508 Q 573,523 581,523 L 590,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M611,538L665,538A15 15 0 0 0 680 523A15 15 0 0 0 665 508L611,508A15 15 0 0 0 596 523A15 15 0 0 0 611 538Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="638" y="523" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">STORED</text>
+<polygon points="783,523 772,528 772,519" style="fill:rgb(0,0,0)"/>
+<path d="M680,523L778,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,523 L 791,523 Q 798,523 798,516 L 798,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./column-def.html'>column-def</a><br></br>
+References:&nbsp;&nbsp; <a href='./conflict-clause.html'>conflict-clause</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./foreign-key-clause.html'>foreign-key-clause</a>&nbsp;&nbsp; <a href='./literal-value.html'>literal-value</a>&nbsp;&nbsp; <a href='./signed-number.html'>signed-number</a><br></br>
+See also:&nbsp;&nbsp; <a href='../gencol.html'>gencol.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>
+</div>
+
+
+
diff --git a/www/syntax/column-def.html b/www/syntax/column-def.html
new file mode 100644
index 0000000..6fa9afa
--- /dev/null
+++ b/www/syntax/column-def.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: column-def</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>column-def</h1>
+<div class='imgcontainer'>
+<div style="max-width:614px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 614.333 64.8">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L141,32A15 15 0 0 0 156 17A15 15 0 0 0 141 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="94" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="179,17 168,21 168,12" style="fill:rgb(0,0,0)"/>
+<path d="M156,17L173,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="215,17 204,21 204,12" style="fill:rgb(0,0,0)"/>
+<path d="M179,17L209,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,32L314,32L314,2L215,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M314,17L354,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M386,62L550,62L550,32L386,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-constraint</text>
+<polygon points="550,17 539,21 539,12" style="fill:rgb(0,0,0)"/>
+<path d="M359,17L545,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="604,17 593,21 593,12" style="fill:rgb(0,0,0)"/>
+<path d="M550,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="608" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="265,42 253,47 253,38" style="fill:rgb(0,0,0)"/>
+<path d="M179,17 L 187,17 Q 194,17 194,30 Q 194,42 209,42 L 244,42 L 259,42" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,42 L 314,42 Q 329,42 329,30 Q 329,17 337,17 L 344,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="550,47 562,43 562,51" style="fill:rgb(0,0,0)"/>
+<path d="M550,17 L 562,17 Q 574,17 574,32 L 574,32 Q 574,47 565,47 L 556,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="399,17 388,21 388,12" style="fill:rgb(0,0,0)"/>
+<path d="M386,47 L 375,47 Q 363,47 363,32 L 363,32 Q 363,17 378,17 L 379,17 L 394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./alter-table-stmt.html'>alter-table-stmt</a>&nbsp;&nbsp; <a href='./create-table-stmt.html'>create-table-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./column-constraint.html'>column-constraint</a>&nbsp;&nbsp; <a href='./type-name.html'>type-name</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>
+</div>
+
+
+
diff --git a/www/syntax/column-name-list.html b/www/syntax/column-name-list.html
new file mode 100644
index 0000000..2a33484
--- /dev/null
+++ b/www/syntax/column-name-list.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: column-name-list</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>column-name-list</h1>
+<div class='imgcontainer'>
+<div style="max-width:353px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 353.621 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="85,17 74,21 74,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L79,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M85,17L115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,32L230,32A15 15 0 0 0 245 17A15 15 0 0 0 230 2L136,2A15 15 0 0 0 121 17A15 15 0 0 0 136 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="290,17 279,21 279,12" style="fill:rgb(0,0,0)"/>
+<path d="M245,17L285,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2A15 15 0 0 0 290 17A15 15 0 0 0 306 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="306" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="344,17 332,21 332,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L338,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="347" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M183,70A15 15 0 0 0 198 55L198,55A15 15 0 0 0 183 39A15 15 0 0 0 168 55L168,55A15 15 0 0 0 183 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="198,55 210,50 210,59" style="fill:rgb(0,0,0)"/>
+<path d="M245,17 L 257,17 Q 269,17 269,32 L 269,40 Q 269,55 254,55 L 219,55 L 204,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M168,55 L 102,55 Q 87,55 87,40 L 87,32 Q 87,17 101,17 L 115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./update-stmt.html'>update-stmt</a>&nbsp;&nbsp; <a href='./update-stmt-limited.html'>update-stmt-limited</a>&nbsp;&nbsp; <a href='./upsert-clause.html'>upsert-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>
+</div>
+
+
+
diff --git a/www/syntax/comment-syntax.html b/www/syntax/comment-syntax.html
new file mode 100644
index 0000000..554424d
--- /dev/null
+++ b/www/syntax/comment-syntax.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: comment-syntax</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>comment-syntax</h1>
+<div class='imgcontainer'>
+<div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.704 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32A15 15 0 0 0 98 17A15 15 0 0 0 83 2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">--</text>
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M98,17L115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M172,70L359,70A15 15 0 0 0 374 55L374,55A15 15 0 0 0 359 39L172,39A15 15 0 0 0 157 55L157,55A15 15 0 0 0 172 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="266" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">anything-except-newline</text>
+<polygon points="347,17 336,21 336,12" style="fill:rgb(0,0,0)"/>
+<path d="M121,17L342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="374,55 386,50 386,59" style="fill:rgb(0,0,0)"/>
+<path d="M347,17 L 382,17 Q 397,17 397,32 L 397,40 Q 397,55 389,55 L 380,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="194,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M157,55 L 146,55 Q 134,55 134,40 L 134,32 Q 134,17 149,17 L 173,17 L 188,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,17 453,21 453,12" style="fill:rgb(0,0,0)"/>
+<path d="M374,17L459,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,32L527,32A15 15 0 0 0 542 17A15 15 0 0 0 527 2L480,2A15 15 0 0 0 464 17A15 15 0 0 0 480 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="503" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">newline</text>
+<path d="M480,70L563,70A15 15 0 0 0 578 55L578,55A15 15 0 0 0 563 39L480,39A15 15 0 0 0 464 55L464,55A15 15 0 0 0 480 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="521" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">end-of-input</text>
+<polygon points="601,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M578,55L595,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M601,55 L 608,55 Q 616,55 616,40 L 616,32 Q 616,17 631,17 L 631,17 L 646,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,17L632,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,55 453,59 453,50" style="fill:rgb(0,0,0)"/>
+<path d="M374,17 L 412,17 Q 427,17 427,32 L 427,40 Q 427,55 442,55 L 444,55 L 459,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,108A15 15 0 0 0 98 92A15 15 0 0 0 83 77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">/*</text>
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,92 110,97 110,88" style="fill:rgb(0,0,0)"/>
+<path d="M98,92L115,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,92L193,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M172,145L308,145A15 15 0 0 0 323 130A15 15 0 0 0 308 115L172,115A15 15 0 0 0 157 130A15 15 0 0 0 172 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="240" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">anything-except-*/</text>
+<path d="M480,108A15 15 0 0 0 495 92A15 15 0 0 0 480 77A15 15 0 0 0 464 92A15 15 0 0 0 480 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="480" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*/</text>
+<polygon points="323,130 334,126 334,135" style="fill:rgb(0,0,0)"/>
+<path d="M323,92 L 334,92 Q 346,92 346,107 L 346,115 Q 346,130 337,130 L 328,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,92 453,97 453,88" style="fill:rgb(0,0,0)"/>
+<path d="M157,130 L 146,130 Q 134,130 134,115 L 134,107 Q 134,92 149,92 L 444,92 L 459,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="601,92 589,97 589,88" style="fill:rgb(0,0,0)"/>
+<path d="M495,92L595,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M601,92 L 608,92 Q 616,92 616,77 L 616,54 L 616,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,92 L 419,92 Q 427,92 427,77 L 427,70 Q 427,55 440,55 L 453,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+See also:&nbsp;&nbsp; <a href='../lang_comment.html'>lang_comment.html</a>
+</div>
+
+
+
diff --git a/www/syntax/commit-stmt.html b/www/syntax/commit-stmt.html
new file mode 100644
index 0000000..8bec40f
--- /dev/null
+++ b/www/syntax/commit-stmt.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: commit-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>commit-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:434px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 434.506 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L141,32A15 15 0 0 0 157 17A15 15 0 0 0 141 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COMMIT</text>
+<polygon points="202,17 190,21 190,12" style="fill:rgb(0,0,0)"/>
+<path d="M157,17L196,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M202,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,32L365,32A15 15 0 0 0 380 17A15 15 0 0 0 365 2L253,2A15 15 0 0 0 238 17A15 15 0 0 0 253 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRANSACTION</text>
+<polygon points="425,17 413,21 413,12" style="fill:rgb(0,0,0)"/>
+<path d="M380,17L419,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="428" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,70L104,70A15 15 0 0 0 119 55L119,55A15 15 0 0 0 104 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="94" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="157,55 145,59 145,50" style="fill:rgb(0,0,0)"/>
+<path d="M119,55L151,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M157,55 L 164,55 Q 172,55 172,40 L 172,32 Q 172,17 179,17 L 187,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="309,47 297,51 297,43" style="fill:rgb(0,0,0)"/>
+<path d="M202,17 L 209,17 Q 217,17 217,32 L 217,32 Q 217,47 232,47 L 288,47 L 303,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,47 L 380,47 Q 395,47 395,32 L 395,32 Q 395,17 402,17 L 410,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_transaction.html'>lang_transaction.html</a>
+</div>
+
+
+
diff --git a/www/syntax/common-table-expression.html b/www/syntax/common-table-expression.html
new file mode 100644
index 0000000..6012ae3
--- /dev/null
+++ b/www/syntax/common-table-expression.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: common-table-expression</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>common-table-expression</h1>
+<div class='imgcontainer'>
+<div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./compound-select-stmt.html'>compound-select-stmt</a>&nbsp;&nbsp; <a href='./delete-stmt.html'>delete-stmt</a>&nbsp;&nbsp; <a href='./delete-stmt-limited.html'>delete-stmt-limited</a>&nbsp;&nbsp; <a href='./factored-select-stmt.html'>factored-select-stmt</a>&nbsp;&nbsp; <a href='./insert-stmt.html'>insert-stmt</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./simple-select-stmt.html'>simple-select-stmt</a>&nbsp;&nbsp; <a href='./update-stmt.html'>update-stmt</a>&nbsp;&nbsp; <a href='./update-stmt-limited.html'>update-stmt-limited</a><br></br>
+References:&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/compound-operator.html b/www/syntax/compound-operator.html
new file mode 100644
index 0000000..c8aa387
--- /dev/null
+++ b/www/syntax/compound-operator.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: compound-operator</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>compound-operator</h1>
+<div class='imgcontainer'>
+<div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./factored-select-stmt.html'>factored-select-stmt</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/compound-select-stmt.html b/www/syntax/compound-select-stmt.html
new file mode 100644
index 0000000..943048b
--- /dev/null
+++ b/www/syntax/compound-select-stmt.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: compound-select-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>compound-select-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:652px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 652.306 560.52">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L114,32A15 15 0 0 0 129 17A15 15 0 0 0 114 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="98" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M189,62L275,62A15 15 0 0 0 290 47L290,47A15 15 0 0 0 275 32L189,32A15 15 0 0 0 174 47L174,47A15 15 0 0 0 189 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="232" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="232,17 220,21 220,12" style="fill:rgb(0,0,0)"/>
+<path d="M129,17L226,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,17 368,21 368,12" style="fill:rgb(0,0,0)"/>
+<path d="M232,17L374,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,32L606,32L606,2L380,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="174,47 162,51 162,43" style="fill:rgb(0,0,0)"/>
+<path d="M129,17 L 136,17 Q 144,17 144,32 L 144,32 Q 144,47 156,47 L 168,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,47 301,51 301,43" style="fill:rgb(0,0,0)"/>
+<path d="M290,47L307,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,47 L 321,47 Q 328,47 328,32 L 328,32 Q 328,17 343,17 L 353,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,70A15 15 0 0 0 508 55L508,55A15 15 0 0 0 493 39A15 15 0 0 0 478 55L478,55A15 15 0 0 0 493 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="508,55 520,50 520,59" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,40 Q 621,55 606,55 L 529,55 L 514,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,55 L 372,55 Q 357,55 357,40 L 357,32 Q 357,17 363,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M68,183L171,183L171,153L68,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="120" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M83,365L128,365A15 15 0 0 0 143 349A15 15 0 0 0 128 334L83,334A15 15 0 0 0 68 349A15 15 0 0 0 83 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="166,349 154,354 154,345" style="fill:rgb(0,0,0)"/>
+<path d="M143,349L160,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M181,365L185,365A15 15 0 0 0 200 349A15 15 0 0 0 185 334L181,334A15 15 0 0 0 166 349A15 15 0 0 0 181 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M83,470L116,470A15 15 0 0 0 132 455A15 15 0 0 0 116 440L83,440A15 15 0 0 0 68 455A15 15 0 0 0 83 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="100" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="155,455 143,460 143,451" style="fill:rgb(0,0,0)"/>
+<path d="M132,455L149,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M155,470L204,470L204,440L155,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="68,168 56,172 56,164" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,153 Q 47,168 55,168 L 62,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="335,92 346,88 346,97" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 627,17 Q 642,17 642,32 L 642,77 Q 642,92 627,92 L 356,92 L 341,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M335,92 L 62,92 Q 47,92 47,100 L 47,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,168 232,172 232,164" style="fill:rgb(0,0,0)"/>
+<path d="M171,168L238,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,183L302,183A15 15 0 0 0 317 168A15 15 0 0 0 302 153L259,153A15 15 0 0 0 243 168A15 15 0 0 0 259 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M259,221L302,221A15 15 0 0 0 317 206A15 15 0 0 0 302 191L259,191A15 15 0 0 0 243 206A15 15 0 0 0 259 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<polygon points="340,206 329,210 329,201" style="fill:rgb(0,0,0)"/>
+<path d="M317,206L335,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M355,221L370,221A15 15 0 0 0 386 206A15 15 0 0 0 370 191L355,191A15 15 0 0 0 340 206A15 15 0 0 0 355 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="409,206 397,210 397,201" style="fill:rgb(0,0,0)"/>
+<path d="M386,206L403,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,168 435,172 435,164" style="fill:rgb(0,0,0)"/>
+<path d="M409,206 L 416,206 Q 424,206 424,191 L 424,183 Q 424,168 432,168 L 441,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,183L550,183L550,153L447,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="498" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M259,259L343,259A15 15 0 0 0 359 244A15 15 0 0 0 343 228L259,228A15 15 0 0 0 243 244A15 15 0 0 0 259 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="301" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M259,297L310,297A15 15 0 0 0 325 281A15 15 0 0 0 310 266L259,266A15 15 0 0 0 243 281A15 15 0 0 0 259 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="284" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="243,281 232,286 232,277" style="fill:rgb(0,0,0)"/>
+<path d="M205,168 L 213,168 Q 220,168 220,183 L 220,266 Q 220,281 229,281 L 238,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,244 232,248 232,239" style="fill:rgb(0,0,0)"/>
+<path d="M220,228 L 220,236 Q 220,244 229,244 L 238,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,206 232,210 232,201" style="fill:rgb(0,0,0)"/>
+<path d="M220,191 L 220,198 Q 220,206 229,206 L 238,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="409,244 397,248 397,239" style="fill:rgb(0,0,0)"/>
+<path d="M359,244L403,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,244 L 416,244 Q 424,244 424,229 L 424,206 L 424,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="409,281 397,286 397,277" style="fill:rgb(0,0,0)"/>
+<path d="M325,281L403,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,281 L 416,281 Q 424,281 424,266 L 424,243 L 424,228" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,168L435,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,138 389,133 389,142" style="fill:rgb(0,0,0)"/>
+<path d="M550,168 L 558,168 Q 565,168 565,153 L 565,153 Q 565,138 550,138 L 399,138 L 384,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M378,138 L 205,138 Q 190,138 190,153 L 190,153 Q 190,168 198,168 L 205,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="319,315 331,311 331,320" style="fill:rgb(0,0,0)"/>
+<path d="M550,168 L 571,168 Q 586,168 586,183 L 586,300 Q 586,315 571,315 L 340,315 L 325,315" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,349 56,354 56,345" style="fill:rgb(0,0,0)"/>
+<path d="M319,315 L 62,315 Q 47,315 47,330 L 47,334 Q 47,349 55,349 L 62,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,349 234,354 234,345" style="fill:rgb(0,0,0)"/>
+<path d="M200,349L239,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,365L375,365L375,334L245,334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,402A15 15 0 0 0 325 387A15 15 0 0 0 310 372A15 15 0 0 0 295 387A15 15 0 0 0 310 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="387" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,387 337,383 337,392" style="fill:rgb(0,0,0)"/>
+<path d="M375,349 L 382,349 Q 390,349 390,364 L 390,372 Q 390,387 375,387 L 346,387 L 331,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,387 L 237,387 Q 222,387 222,372 L 222,364 Q 222,349 228,349 L 234,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,380 407,368 415,368" style="fill:rgb(0,0,0)"/>
+<path d="M375,349 L 396,349 Q 411,349 411,362 L 411,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,421 233,417 233,426" style="fill:rgb(0,0,0)"/>
+<path d="M411,380 L 411,406 Q 411,421 396,421 L 242,421 L 227,421" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,455 56,460 56,451" style="fill:rgb(0,0,0)"/>
+<path d="M221,421 L 62,421 Q 47,421 47,436 L 47,440 Q 47,455 55,455 L 62,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,387 43,376 51,376" style="fill:rgb(0,0,0)"/>
+<path d="M47,334L47,382" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,387L47,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,501L329,501A15 15 0 0 0 344 486A15 15 0 0 0 329 470L278,470A15 15 0 0 0 263 486A15 15 0 0 0 278 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="304" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="367,486 356,490 356,481" style="fill:rgb(0,0,0)"/>
+<path d="M344,486L362,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,501L417,501L417,470L367,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="392" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="440,486 428,490 428,481" style="fill:rgb(0,0,0)"/>
+<path d="M417,486L434,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,538A15 15 0 0 0 293 523A15 15 0 0 0 278 508A15 15 0 0 0 263 523A15 15 0 0 0 278 538Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="523" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="316,523 305,528 305,519" style="fill:rgb(0,0,0)"/>
+<path d="M293,523L310,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,538L365,538L365,508L316,508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="341" y="523" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="227,455 215,460 215,451" style="fill:rgb(0,0,0)"/>
+<path d="M204,455L221,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="263,523 251,528 251,519" style="fill:rgb(0,0,0)"/>
+<path d="M227,455 L 234,455 Q 242,455 242,470 L 242,508 Q 242,523 249,523 L 257,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="263,486 251,490 251,481" style="fill:rgb(0,0,0)"/>
+<path d="M227,455 L 234,455 Q 242,455 242,470 L 242,471 Q 242,486 249,486 L 257,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,455 428,460 428,451" style="fill:rgb(0,0,0)"/>
+<path d="M227,455L434,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="642,554 631,558 631,549" style="fill:rgb(0,0,0)"/>
+<path d="M440,455 L 461,455 Q 476,455 476,470 L 476,539 Q 476,554 491,554 L 622,554 L 637,554" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="646" cy="554" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,486 L 461,486 Q 476,486 476,493 L 476,501" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,523 428,528 428,519" style="fill:rgb(0,0,0)"/>
+<path d="M365,523L434,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,523 L 461,523 Q 476,523 476,531 L 476,538" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,554 428,558 428,549" style="fill:rgb(0,0,0)"/>
+<path d="M47,440 L 47,539 Q 47,554 62,554 L 419,554 L 434,554" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,554L512,554" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+References:&nbsp;&nbsp; <a href='./common-table-expression.html'>common-table-expression</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./ordering-term.html'>ordering-term</a>&nbsp;&nbsp; <a href='./select-core.html'>select-core</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>
+</div>
+
+
+
diff --git a/www/syntax/conflict-clause.html b/www/syntax/conflict-clause.html
new file mode 100644
index 0000000..0fee349
--- /dev/null
+++ b/www/syntax/conflict-clause.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: conflict-clause</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>conflict-clause</h1>
+<div class='imgcontainer'>
+<div style="max-width:451px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 451.517 205.2">
+<circle cx="5" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,6 20,10 20,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L26,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,36 58,41 58,32" style="fill:rgb(0,0,0)"/>
+<path d="M32,6 L 39,6 Q 47,6 47,21 L 47,21 Q 47,36 56,36 L 64,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,51L94,51A15 15 0 0 0 109 36L109,36A15 15 0 0 0 94 21L85,21A15 15 0 0 0 70 36L70,36A15 15 0 0 0 85 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="132,36 121,41 121,32" style="fill:rgb(0,0,0)"/>
+<path d="M109,36L126,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M147,51L222,51A15 15 0 0 0 237 36L237,36A15 15 0 0 0 222 21L147,21A15 15 0 0 0 132 36L132,36A15 15 0 0 0 147 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="273,36 261,41 261,32" style="fill:rgb(0,0,0)"/>
+<path d="M237,36L267,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,51L365,51A15 15 0 0 0 381 36L381,36A15 15 0 0 0 365 21L288,21A15 15 0 0 0 273 36L273,36A15 15 0 0 0 288 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="327" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<path d="M288,89L330,89A15 15 0 0 0 345 74L345,74A15 15 0 0 0 330 59L288,59A15 15 0 0 0 273 74L273,74A15 15 0 0 0 288 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<path d="M288,127L310,127A15 15 0 0 0 325 112A15 15 0 0 0 310 97L288,97A15 15 0 0 0 273 112A15 15 0 0 0 288 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<path d="M288,165L340,165A15 15 0 0 0 355 150A15 15 0 0 0 340 135L288,135A15 15 0 0 0 273 150A15 15 0 0 0 288 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="314" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<path d="M288,203L352,203A15 15 0 0 0 367 187A15 15 0 0 0 352 172L288,172A15 15 0 0 0 273 187A15 15 0 0 0 288 203Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="320" y="187" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="404,36 392,41 392,32" style="fill:rgb(0,0,0)"/>
+<path d="M381,36L398,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,6 430,10 430,2" style="fill:rgb(0,0,0)"/>
+<path d="M404,36 L 411,36 Q 419,36 419,21 L 419,21 Q 419,6 427,6 L 436,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="445" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="225,6 214,10 214,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L219,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,6L434,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,187 261,192 261,183" style="fill:rgb(0,0,0)"/>
+<path d="M237,36 L 244,36 Q 252,36 252,51 L 252,172 Q 252,187 259,187 L 267,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,187 392,192 392,183" style="fill:rgb(0,0,0)"/>
+<path d="M367,187L398,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,187 L 411,187 Q 419,187 419,172 L 419,36 L 419,21" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,74 261,78 261,70" style="fill:rgb(0,0,0)"/>
+<path d="M252,59 L 252,66 Q 252,74 259,74 L 267,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,74 392,78 392,70" style="fill:rgb(0,0,0)"/>
+<path d="M345,74L398,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,74 L 411,74 Q 419,74 419,67 L 419,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,112 261,116 261,108" style="fill:rgb(0,0,0)"/>
+<path d="M252,97 L 252,104 Q 252,112 259,112 L 267,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,112 392,116 392,108" style="fill:rgb(0,0,0)"/>
+<path d="M325,112L398,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,112 L 411,112 Q 419,112 419,104 L 419,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,150 261,154 261,145" style="fill:rgb(0,0,0)"/>
+<path d="M252,135 L 252,142 Q 252,150 259,150 L 267,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,150 392,154 392,145" style="fill:rgb(0,0,0)"/>
+<path d="M355,150L398,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,150 L 411,150 Q 419,150 419,142 L 419,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./column-constraint.html'>column-constraint</a>&nbsp;&nbsp; <a href='./table-constraint.html'>table-constraint</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_conflict.html'>lang_conflict.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>
+</div>
+
+
+
diff --git a/www/syntax/create-index-stmt.html b/www/syntax/create-index-stmt.html
new file mode 100644
index 0000000..d012840
--- /dev/null
+++ b/www/syntax/create-index-stmt.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: create-index-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>create-index-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:907px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 907.43 232.632">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L222,56A15 15 0 0 0 237 41A15 15 0 0 0 222 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<path d="M288,32L327,32A15 15 0 0 0 342 17A15 15 0 0 0 327 2L288,2A15 15 0 0 0 273 17A15 15 0 0 0 288 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEX</text>
+<polygon points="194,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L188,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,17 261,21 261,12" style="fill:rgb(0,0,0)"/>
+<path d="M194,17L267,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,41 L 244,41 Q 252,41 252,29 Q 252,17 256,17 L 261,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,17 367,21 367,12" style="fill:rgb(0,0,0)"/>
+<path d="M342,17L372,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,32A15 15 0 0 0 408 17A15 15 0 0 0 393 2A15 15 0 0 0 378 17A15 15 0 0 0 393 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="393" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="431,17 420,21 420,12" style="fill:rgb(0,0,0)"/>
+<path d="M408,17L426,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L447,2A15 15 0 0 0 431 17A15 15 0 0 0 447 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="505,17 493,21 493,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L499,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M520,32L565,32A15 15 0 0 0 580 17A15 15 0 0 0 565 2L520,2A15 15 0 0 0 505 17A15 15 0 0 0 520 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="194,71 206,67 206,76" style="fill:rgb(0,0,0)"/>
+<path d="M342,17 L 350,17 Q 357,17 357,32 L 357,56 Q 357,71 342,71 L 215,71 L 200,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,71 516,67 516,76" style="fill:rgb(0,0,0)"/>
+<path d="M580,17 L 601,17 Q 616,17 616,32 L 616,56 Q 616,71 601,71 L 526,71 L 511,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,71L273,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,109 17,113 17,105" style="fill:rgb(0,0,0)"/>
+<path d="M273,71 L 20,71 Q 5,71 5,86 L 5,94 Q 5,109 14,109 L 23,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,124L140,124A15 15 0 0 0 155 109A15 15 0 0 0 140 94L43,94A15 15 0 0 0 28 109A15 15 0 0 0 43 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,109 166,113 166,105" style="fill:rgb(0,0,0)"/>
+<path d="M155,109L172,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,124A15 15 0 0 0 208 109A15 15 0 0 0 193 94A15 15 0 0 0 178 109A15 15 0 0 0 193 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,109 233,113 233,105" style="fill:rgb(0,0,0)"/>
+<path d="M208,109L238,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,124L338,124A15 15 0 0 0 353 109A15 15 0 0 0 338 94L259,94A15 15 0 0 0 244 109A15 15 0 0 0 259 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<polygon points="376,109 364,113 364,105" style="fill:rgb(0,0,0)"/>
+<path d="M353,109L370,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,124L400,124A15 15 0 0 0 415 109A15 15 0 0 0 400 94L391,94A15 15 0 0 0 376 109A15 15 0 0 0 391 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="438,109 427,113 427,105" style="fill:rgb(0,0,0)"/>
+<path d="M415,109L432,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,124L528,124A15 15 0 0 0 543 109A15 15 0 0 0 528 94L453,94A15 15 0 0 0 438 109A15 15 0 0 0 453 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="491" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="567,109 555,113 555,105" style="fill:rgb(0,0,0)"/>
+<path d="M543,109L561,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,124A15 15 0 0 0 597 109A15 15 0 0 0 582 94A15 15 0 0 0 567 109A15 15 0 0 0 582 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="633,109 621,113 621,105" style="fill:rgb(0,0,0)"/>
+<path d="M597,109L627,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M633,124L777,124L777,94L633,94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="813,109 802,113 802,105" style="fill:rgb(0,0,0)"/>
+<path d="M777,109L808,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M828,124A15 15 0 0 0 844 109A15 15 0 0 0 828 94A15 15 0 0 0 813 109A15 15 0 0 0 828 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="828" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M705,162A15 15 0 0 0 720 147A15 15 0 0 0 705 132A15 15 0 0 0 690 147A15 15 0 0 0 705 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="720,147 732,142 732,151" style="fill:rgb(0,0,0)"/>
+<path d="M777,109 L 785,109 Q 792,109 792,124 L 792,132 Q 792,147 777,147 L 741,147 L 726,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M690,147 L 625,147 Q 610,147 610,132 L 610,124 Q 610,109 617,109 L 625,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="92,139 80,144 80,135" style="fill:rgb(0,0,0)"/>
+<path d="M5,94 L 5,124 Q 5,139 20,139 L 71,139 L 86,139" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,139 L 205,139 Q 220,139 220,124 L 220,124 Q 220,109 227,109 L 235,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M684,230L733,230A15 15 0 0 0 748 215A15 15 0 0 0 733 200L684,200A15 15 0 0 0 669 215A15 15 0 0 0 684 230Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="709" y="215" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="772,215 760,219 760,211" style="fill:rgb(0,0,0)"/>
+<path d="M748,215L766,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M772,230L821,230L821,200L772,200Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="796" y="215" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="898,215 886,219 886,211" style="fill:rgb(0,0,0)"/>
+<path d="M821,215L892,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="901" cy="215" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="859,147 854,135 863,135" style="fill:rgb(0,0,0)"/>
+<path d="M844,109 L 851,109 Q 859,109 859,124 L 859,126 L 859,141" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M859,147 L 859,200 Q 859,215 872,215 L 886,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="705,177 717,173 717,181" style="fill:rgb(0,0,0)"/>
+<path d="M859,147 L 859,162 Q 859,177 844,177 L 726,177 L 711,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="669,215 657,219 657,211" style="fill:rgb(0,0,0)"/>
+<path d="M705,177 L 661,177 Q 646,177 646,192 L 646,200 Q 646,215 654,215 L 663,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./indexed-column.html'>indexed-column</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/create-table-stmt.html b/www/syntax/create-table-stmt.html
new file mode 100644
index 0000000..eb02af9
--- /dev/null
+++ b/www/syntax/create-table-stmt.html
@@ -0,0 +1,235 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: create-table-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>create-table-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:718px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 718.33 315.792">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L199,56A15 15 0 0 0 214 41A15 15 0 0 0 199 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMP</text>
+<path d="M167,94L259,94A15 15 0 0 0 274 79A15 15 0 0 0 259 64L167,64A15 15 0 0 0 152 79A15 15 0 0 0 167 94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="79" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMPORARY</text>
+<path d="M325,32L365,32A15 15 0 0 0 380 17A15 15 0 0 0 365 2L325,2A15 15 0 0 0 310 17A15 15 0 0 0 325 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="213,17 201,21 201,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L207,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,17 299,21 299,12" style="fill:rgb(0,0,0)"/>
+<path d="M213,17L305,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,79 140,83 140,74" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,32 L 131,64 Q 131,79 138,79 L 146,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M274,79 L 282,79 Q 289,79 289,64 L 289,32 Q 289,17 294,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M214,41 L 274,41 Q 289,41 289,33 L 289,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="416,17 404,21 404,12" style="fill:rgb(0,0,0)"/>
+<path d="M380,17L410,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,32A15 15 0 0 0 446 17A15 15 0 0 0 431 2A15 15 0 0 0 416 17A15 15 0 0 0 431 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="431" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="469,17 458,21 458,12" style="fill:rgb(0,0,0)"/>
+<path d="M446,17L463,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M484,32L504,32A15 15 0 0 0 520 17A15 15 0 0 0 504 2L484,2A15 15 0 0 0 469 17A15 15 0 0 0 484 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="494" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="543,17 531,21 531,12" style="fill:rgb(0,0,0)"/>
+<path d="M520,17L537,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,32L602,32A15 15 0 0 0 617 17A15 15 0 0 0 602 2L558,2A15 15 0 0 0 543 17A15 15 0 0 0 558 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="580" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="213,109 224,105 224,113" style="fill:rgb(0,0,0)"/>
+<path d="M380,17 L 387,17 Q 395,17 395,32 L 395,94 Q 395,109 380,109 L 234,109 L 219,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="543,109 554,105 554,113" style="fill:rgb(0,0,0)"/>
+<path d="M617,17 L 625,17 Q 632,17 632,32 L 632,94 Q 632,109 617,109 L 563,109 L 548,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M543,109L310,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,147 17,151 17,142" style="fill:rgb(0,0,0)"/>
+<path d="M310,109 L 20,109 Q 5,109 5,124 L 5,132 Q 5,147 14,147 L 23,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,162L140,162A15 15 0 0 0 155 147A15 15 0 0 0 140 132L43,132A15 15 0 0 0 28 147A15 15 0 0 0 43 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,147 166,151 166,142" style="fill:rgb(0,0,0)"/>
+<path d="M155,147L172,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,162A15 15 0 0 0 208 147A15 15 0 0 0 193 132A15 15 0 0 0 178 147A15 15 0 0 0 193 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,147 233,151 233,142" style="fill:rgb(0,0,0)"/>
+<path d="M208,147L238,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,162L334,162A15 15 0 0 0 350 147A15 15 0 0 0 334 132L259,132A15 15 0 0 0 244 147A15 15 0 0 0 259 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="92,177 80,181 80,173" style="fill:rgb(0,0,0)"/>
+<path d="M5,132 L 5,162 Q 5,177 20,177 L 71,177 L 86,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,177 L 205,177 Q 220,177 220,162 L 220,162 Q 220,147 227,147 L 235,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="193,222 205,218 205,227" style="fill:rgb(0,0,0)"/>
+<path d="M350,147 L 357,147 Q 365,147 365,162 L 365,207 Q 365,222 350,222 L 214,222 L 199,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,260 17,265 17,256" style="fill:rgb(0,0,0)"/>
+<path d="M193,222 L 20,222 Q 5,222 5,237 L 5,245 Q 5,260 14,260 L 23,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,275A15 15 0 0 0 59 260A15 15 0 0 0 43 245A15 15 0 0 0 28 260A15 15 0 0 0 43 275Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="43" y="260" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="95,260 83,265 83,256" style="fill:rgb(0,0,0)"/>
+<path d="M59,260L89,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,275L199,275L199,245L95,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="147" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-def</text>
+<path d="M253,313L399,313L399,283L253,283Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="298" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-constraint</text>
+<polygon points="399,298 410,294 410,302" style="fill:rgb(0,0,0)"/>
+<path d="M404,298L416,298" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,313A15 15 0 0 0 446 298A15 15 0 0 0 431 283A15 15 0 0 0 416 298A15 15 0 0 0 431 313Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="431" y="298" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M503,275A15 15 0 0 0 518 260A15 15 0 0 0 503 245A15 15 0 0 0 488 260A15 15 0 0 0 503 275Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="503" y="260" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="553,260 541,265 541,256" style="fill:rgb(0,0,0)"/>
+<path d="M518,260L547,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M553,275L674,275L674,245L553,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="613" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-options</text>
+<path d="M147,313A15 15 0 0 0 162 298A15 15 0 0 0 147 283A15 15 0 0 0 132 298A15 15 0 0 0 147 313Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="147" y="298" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="162,298 174,294 174,302" style="fill:rgb(0,0,0)"/>
+<path d="M199,260 L 207,260 Q 214,260 214,275 L 214,283 Q 214,298 199,298 L 183,298 L 168,298" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,298 L 87,298 Q 72,298 72,283 L 72,275 Q 72,260 77,260 L 83,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="235,260 224,265 224,256" style="fill:rgb(0,0,0)"/>
+<path d="M199,260L230,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="488,260 476,265 476,256" style="fill:rgb(0,0,0)"/>
+<path d="M235,260L482,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,298 458,294 458,302" style="fill:rgb(0,0,0)"/>
+<path d="M446,260 L 458,260 Q 469,260 469,275 L 469,283 Q 469,298 460,298 L 452,298" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,298 L 246,298 Q 238,298 238,283 L 238,275 Q 238,260 250,260 L 261,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,215 602,219 602,211" style="fill:rgb(0,0,0)"/>
+<path d="M518,260 L 526,260 Q 533,260 533,245 L 533,230 Q 533,215 548,215 L 592,215 L 607,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="708,215 697,219 697,211" style="fill:rgb(0,0,0)"/>
+<path d="M613,215 L 659,215 Q 674,215 688,215 L 703,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="712" cy="215" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="708,215 697,219 697,211" style="fill:rgb(0,0,0)"/>
+<path d="M674,260 L 681,260 Q 689,260 689,245 L 689,230 Q 689,215 696,215 L 703,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,147 428,151 428,142" style="fill:rgb(0,0,0)"/>
+<path d="M350,147L434,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,162L459,162A15 15 0 0 0 474 147A15 15 0 0 0 459 132L455,132A15 15 0 0 0 440 147A15 15 0 0 0 455 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="497,147 485,151 485,142" style="fill:rgb(0,0,0)"/>
+<path d="M474,147L491,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M497,162L601,162L601,132L497,132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="549" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="637,147 626,151 626,142" style="fill:rgb(0,0,0)"/>
+<path d="M601,147L631,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M637,147 L 674,147 Q 689,147 689,162 L 689,200 Q 689,215 696,215 L 704,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./column-def.html'>column-def</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./table-constraint.html'>table-constraint</a>&nbsp;&nbsp; <a href='./table-options.html'>table-options</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>
+</div>
+
+
+
diff --git a/www/syntax/create-trigger-stmt.html b/www/syntax/create-trigger-stmt.html
new file mode 100644
index 0000000..990d3d1
--- /dev/null
+++ b/www/syntax/create-trigger-stmt.html
@@ -0,0 +1,327 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: create-trigger-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>create-trigger-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:678px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 678.058 746.712">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L199,56A15 15 0 0 0 214 41A15 15 0 0 0 199 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMP</text>
+<path d="M167,94L259,94A15 15 0 0 0 274 79A15 15 0 0 0 259 64L167,64A15 15 0 0 0 152 79A15 15 0 0 0 167 94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="79" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMPORARY</text>
+<path d="M325,32L386,32A15 15 0 0 0 401 17A15 15 0 0 0 386 2L325,2A15 15 0 0 0 310 17A15 15 0 0 0 325 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRIGGER</text>
+<polygon points="213,17 201,21 201,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L207,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,17 299,21 299,12" style="fill:rgb(0,0,0)"/>
+<path d="M213,17L305,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,79 140,83 140,74" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,32 L 131,64 Q 131,79 138,79 L 146,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M274,79 L 282,79 Q 289,79 289,64 L 289,32 Q 289,17 294,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M214,41 L 274,41 Q 289,41 289,33 L 289,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="437,17 425,21 425,12" style="fill:rgb(0,0,0)"/>
+<path d="M401,17L431,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M452,32A15 15 0 0 0 467 17A15 15 0 0 0 452 2A15 15 0 0 0 437 17A15 15 0 0 0 452 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="452" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="490,17 478,21 478,12" style="fill:rgb(0,0,0)"/>
+<path d="M467,17L484,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,32L525,32A15 15 0 0 0 540 17A15 15 0 0 0 525 2L505,2A15 15 0 0 0 490 17A15 15 0 0 0 505 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="515" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="563,17 552,21 552,12" style="fill:rgb(0,0,0)"/>
+<path d="M540,17L558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,32L623,32A15 15 0 0 0 638 17A15 15 0 0 0 623 2L578,2A15 15 0 0 0 563 17A15 15 0 0 0 578 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="601" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="213,109 224,105 224,113" style="fill:rgb(0,0,0)"/>
+<path d="M401,17 L 408,17 Q 416,17 416,32 L 416,94 Q 416,109 401,109 L 234,109 L 219,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="563,109 575,105 575,113" style="fill:rgb(0,0,0)"/>
+<path d="M638,17 L 646,17 Q 653,17 653,32 L 653,94 Q 653,109 638,109 L 584,109 L 569,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M563,109L310,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,147 17,151 17,142" style="fill:rgb(0,0,0)"/>
+<path d="M310,109 L 20,109 Q 5,109 5,124 L 5,132 Q 5,147 14,147 L 23,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,162L140,162A15 15 0 0 0 155 147A15 15 0 0 0 140 132L43,132A15 15 0 0 0 28 147A15 15 0 0 0 43 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,147 166,151 166,142" style="fill:rgb(0,0,0)"/>
+<path d="M155,147L172,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,162A15 15 0 0 0 208 147A15 15 0 0 0 193 132A15 15 0 0 0 178 147A15 15 0 0 0 193 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,147 233,151 233,142" style="fill:rgb(0,0,0)"/>
+<path d="M208,147L238,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,162L351,162A15 15 0 0 0 366 147A15 15 0 0 0 351 132L259,132A15 15 0 0 0 244 147A15 15 0 0 0 259 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="305" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">trigger-name</text>
+<polygon points="402,147 391,151 391,142" style="fill:rgb(0,0,0)"/>
+<path d="M366,147L396,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,162L472,162A15 15 0 0 0 487 147A15 15 0 0 0 472 132L417,132A15 15 0 0 0 402 147A15 15 0 0 0 417 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BEFORE</text>
+<path d="M417,200L457,200A15 15 0 0 0 472 185A15 15 0 0 0 457 169L417,169A15 15 0 0 0 402 185A15 15 0 0 0 417 200Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="437" y="185" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AFTER</text>
+<path d="M417,238L479,238A15 15 0 0 0 494 222A15 15 0 0 0 479 207L417,207A15 15 0 0 0 402 222A15 15 0 0 0 417 238Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="222" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INSTEAD</text>
+<polygon points="517,222 505,227 505,218" style="fill:rgb(0,0,0)"/>
+<path d="M494,222L511,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,238L538,238A15 15 0 0 0 553 222A15 15 0 0 0 538 207L532,207A15 15 0 0 0 517 222A15 15 0 0 0 532 238Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="535" y="222" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OF</text>
+<polygon points="402,185 391,189 391,180" style="fill:rgb(0,0,0)"/>
+<path d="M366,147 L 374,147 Q 381,147 381,162 L 381,170 Q 381,185 389,185 L 396,185" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="402,222 391,227 391,218" style="fill:rgb(0,0,0)"/>
+<path d="M366,147 L 374,147 Q 381,147 381,162 L 381,207 Q 381,222 389,222 L 396,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="92,177 80,181 80,173" style="fill:rgb(0,0,0)"/>
+<path d="M5,132 L 5,162 Q 5,177 20,177 L 71,177 L 86,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,177 L 205,177 Q 220,177 220,162 L 220,162 Q 220,147 227,147 L 235,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="193,260 205,256 205,265" style="fill:rgb(0,0,0)"/>
+<path d="M381,207 L 381,245 Q 381,260 366,260 L 214,260 L 199,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="576,222 564,227 564,218" style="fill:rgb(0,0,0)"/>
+<path d="M553,222L570,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="448,260 459,256 459,265" style="fill:rgb(0,0,0)"/>
+<path d="M576,222 L 584,222 Q 591,222 591,237 L 591,245 Q 591,260 576,260 L 469,260 L 454,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,260L366,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="576,147 564,151 564,142" style="fill:rgb(0,0,0)"/>
+<path d="M487,147L570,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M576,147 L 584,147 Q 591,147 591,162 L 591,223 L 591,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="576,185 564,189 564,180" style="fill:rgb(0,0,0)"/>
+<path d="M472,185L570,185" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M576,185 L 584,185 Q 591,185 591,192 L 591,200" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,306L96,306A15 15 0 0 0 111 290L111,290A15 15 0 0 0 96 275L43,275A15 15 0 0 0 28 290L28,290A15 15 0 0 0 43 306Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="290" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<path d="M43,343L92,343A15 15 0 0 0 107 328A15 15 0 0 0 92 313L43,313A15 15 0 0 0 28 328A15 15 0 0 0 43 343Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="68" y="328" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INSERT</text>
+<path d="M43,381L98,381A15 15 0 0 0 113 366A15 15 0 0 0 98 351L43,351A15 15 0 0 0 28 366A15 15 0 0 0 43 381Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="366" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="28,366 17,370 17,362" style="fill:rgb(0,0,0)"/>
+<path d="M193,260 L 20,260 Q 5,260 5,275 L 5,351 Q 5,366 14,366 L 23,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,290 17,295 17,286" style="fill:rgb(0,0,0)"/>
+<path d="M5,275 L 5,283 Q 5,290 14,290 L 23,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,328 17,333 17,324" style="fill:rgb(0,0,0)"/>
+<path d="M5,313 L 5,321 Q 5,328 14,328 L 23,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M164,411L170,411A15 15 0 0 0 185 396A15 15 0 0 0 170 381L164,381A15 15 0 0 0 149 396A15 15 0 0 0 164 411Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="396" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OF</text>
+<polygon points="221,396 209,401 209,392" style="fill:rgb(0,0,0)"/>
+<path d="M185,396L215,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,411L330,411A15 15 0 0 0 345 396A15 15 0 0 0 330 381L236,381A15 15 0 0 0 221 396A15 15 0 0 0 236 411Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="396" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M283,449L283,449A15 15 0 0 0 298 434A15 15 0 0 0 283 419L283,419A15 15 0 0 0 268 434A15 15 0 0 0 283 449Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="434" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="381,396 369,401 369,392" style="fill:rgb(0,0,0)"/>
+<path d="M345,396L375,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="419,290 408,295 408,286" style="fill:rgb(0,0,0)"/>
+<path d="M381,396 L 388,396 Q 396,396 396,381 L 396,305 Q 396,290 405,290 L 413,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M434,306L443,306A15 15 0 0 0 458 290L458,290A15 15 0 0 0 443 275L434,275A15 15 0 0 0 419 290L419,290A15 15 0 0 0 434 306Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="290" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="481,290 470,295 470,286" style="fill:rgb(0,0,0)"/>
+<path d="M458,290L475,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M496,306L572,306A15 15 0 0 0 587 290L587,290A15 15 0 0 0 572 275L496,275A15 15 0 0 0 481 290L481,290A15 15 0 0 0 496 306Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="290" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<path d="M111,290L408,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,328 369,333 369,324" style="fill:rgb(0,0,0)"/>
+<path d="M107,328L375,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M381,328 L 388,328 Q 396,328 396,321 L 396,313" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,366 369,370 369,362" style="fill:rgb(0,0,0)"/>
+<path d="M113,366L375,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M381,366 L 388,366 Q 396,366 396,359 L 396,351" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="149,396 137,401 137,392" style="fill:rgb(0,0,0)"/>
+<path d="M113,366 L 120,366 Q 128,366 128,381 L 128,381 Q 128,396 135,396 L 143,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,434 309,430 309,438" style="fill:rgb(0,0,0)"/>
+<path d="M345,396 L 352,396 Q 360,396 360,411 L 360,419 Q 360,434 345,434 L 319,434 L 304,434" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M268,434 L 213,434 Q 198,434 198,419 L 198,411 Q 198,396 205,396 L 213,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,525L62,525A15 15 0 0 0 77 510A15 15 0 0 0 62 495L43,495A15 15 0 0 0 28 510A15 15 0 0 0 43 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="52" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOR</text>
+<polygon points="100,510 88,514 88,505" style="fill:rgb(0,0,0)"/>
+<path d="M77,510L94,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M115,525L147,525A15 15 0 0 0 162 510A15 15 0 0 0 147 495L115,495A15 15 0 0 0 100 510A15 15 0 0 0 115 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="131" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EACH</text>
+<polygon points="185,510 174,514 174,505" style="fill:rgb(0,0,0)"/>
+<path d="M162,510L179,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,525L224,525A15 15 0 0 0 240 510A15 15 0 0 0 224 495L200,495A15 15 0 0 0 185 510A15 15 0 0 0 200 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="212" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="312,510 300,514 300,505" style="fill:rgb(0,0,0)"/>
+<path d="M240,510L306,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M327,525L366,525A15 15 0 0 0 381 510A15 15 0 0 0 366 495L327,495A15 15 0 0 0 312 510A15 15 0 0 0 327 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="404,510 393,514 393,505" style="fill:rgb(0,0,0)"/>
+<path d="M381,510L399,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,525L454,525L454,495L404,495Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M43,631L82,631A15 15 0 0 0 97 616A15 15 0 0 0 82 600L43,600A15 15 0 0 0 28 616A15 15 0 0 0 43 631Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="616" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BEGIN</text>
+<polygon points="169,616 158,620 158,611" style="fill:rgb(0,0,0)"/>
+<path d="M97,616L163,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M169,631L282,631L282,600L169,600Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="226" y="616" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt</text>
+<polygon points="336,616 324,620 324,611" style="fill:rgb(0,0,0)"/>
+<path d="M282,616L330,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,631A15 15 0 0 0 366 616A15 15 0 0 0 351 600A15 15 0 0 0 336 616A15 15 0 0 0 351 631Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="616" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">;</text>
+<polygon points="402,616 391,620 391,611" style="fill:rgb(0,0,0)"/>
+<path d="M366,616L396,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,631L438,631A15 15 0 0 0 453 616A15 15 0 0 0 438 600L417,600A15 15 0 0 0 402 616A15 15 0 0 0 417 631Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="428" y="616" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="668,616 657,620 657,611" style="fill:rgb(0,0,0)"/>
+<path d="M453,616L662,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="672" cy="616" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M169,668L273,668L273,638L169,638Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="653" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">insert-stmt</text>
+<path d="M169,706L276,706L276,676L169,676Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="223" y="691" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt</text>
+<path d="M169,744L273,744L273,714L169,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="169,729 158,733 158,725" style="fill:rgb(0,0,0)"/>
+<path d="M131,616 L 139,616 Q 146,616 146,631 L 146,714 Q 146,729 155,729 L 163,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,653 158,658 158,649" style="fill:rgb(0,0,0)"/>
+<path d="M146,638 L 146,646 Q 146,653 155,653 L 163,653" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,691 158,695 158,687" style="fill:rgb(0,0,0)"/>
+<path d="M146,676 L 146,684 Q 146,691 155,691 L 163,691" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,729 286,733 286,725" style="fill:rgb(0,0,0)"/>
+<path d="M273,729L292,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,729 L 305,729 Q 313,729 313,714 L 313,631 Q 313,616 319,616 L 324,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,653 286,658 286,649" style="fill:rgb(0,0,0)"/>
+<path d="M273,653L292,653" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,653 L 305,653 Q 313,653 313,646 L 313,638" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,691 286,695 286,687" style="fill:rgb(0,0,0)"/>
+<path d="M276,691L292,691" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,691 L 305,691 Q 313,691 313,684 L 313,676" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="226,585 237,581 237,590" style="fill:rgb(0,0,0)"/>
+<path d="M366,616 L 374,616 Q 381,616 381,601 L 381,600 Q 381,585 366,585 L 246,585 L 231,585" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="132,616 120,620 120,611" style="fill:rgb(0,0,0)"/>
+<path d="M226,585 L 124,585 Q 109,585 109,600 L 109,601 Q 109,616 117,616 L 126,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="602,434 597,423 606,423" style="fill:rgb(0,0,0)"/>
+<path d="M587,290 L 594,290 Q 602,290 602,305 L 602,414 L 602,429" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="226,472 237,468 237,476" style="fill:rgb(0,0,0)"/>
+<path d="M602,434 L 602,457 Q 602,472 587,472 L 246,472 L 231,472" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,616 17,620 17,611" style="fill:rgb(0,0,0)"/>
+<path d="M226,472 L 20,472 Q 5,472 5,487 L 5,601 Q 5,616 14,616 L 23,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,510 17,514 17,505" style="fill:rgb(0,0,0)"/>
+<path d="M5,495 L 5,502 Q 5,510 14,510 L 23,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="226,547 237,543 237,552" style="fill:rgb(0,0,0)"/>
+<path d="M454,510 L 461,510 Q 469,510 469,525 L 469,532 Q 469,547 454,547 L 246,547 L 231,547" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M226,547 L 20,547 Q 5,547 5,555 L 5,562" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,510 L 247,510 Q 255,510 255,525 L 255,532 Q 255,547 247,547 L 240,547" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,510 L 297,510 Q 282,510 282,495 L 282,487 Q 282,472 297,472 L 312,472" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./delete-stmt.html'>delete-stmt</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./insert-stmt.html'>insert-stmt</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./update-stmt.html'>update-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>
+</div>
+
+
+
diff --git a/www/syntax/create-view-stmt.html b/www/syntax/create-view-stmt.html
new file mode 100644
index 0000000..ba36320
--- /dev/null
+++ b/www/syntax/create-view-stmt.html
@@ -0,0 +1,214 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: create-view-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>create-view-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:885px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 885.677 232.632">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L199,56A15 15 0 0 0 214 41A15 15 0 0 0 199 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMP</text>
+<path d="M167,94L259,94A15 15 0 0 0 274 79A15 15 0 0 0 259 64L167,64A15 15 0 0 0 152 79A15 15 0 0 0 167 94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="79" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMPORARY</text>
+<path d="M325,32L355,32A15 15 0 0 0 370 17A15 15 0 0 0 355 2L325,2A15 15 0 0 0 310 17A15 15 0 0 0 325 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="340" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIEW</text>
+<polygon points="213,17 201,21 201,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L207,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,17 299,21 299,12" style="fill:rgb(0,0,0)"/>
+<path d="M213,17L305,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,79 140,83 140,74" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,32 L 131,64 Q 131,79 138,79 L 146,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M274,79 L 282,79 Q 289,79 289,64 L 289,32 Q 289,17 294,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M214,41 L 274,41 Q 289,41 289,33 L 289,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M370,17L400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M421,32A15 15 0 0 0 436 17A15 15 0 0 0 421 2A15 15 0 0 0 406 17A15 15 0 0 0 421 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="421" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="459,17 447,21 447,12" style="fill:rgb(0,0,0)"/>
+<path d="M436,17L453,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M474,32L494,32A15 15 0 0 0 509 17A15 15 0 0 0 494 2L474,2A15 15 0 0 0 459 17A15 15 0 0 0 474 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="532,17 521,21 521,12" style="fill:rgb(0,0,0)"/>
+<path d="M509,17L527,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,32L592,32A15 15 0 0 0 607 17A15 15 0 0 0 592 2L547,2A15 15 0 0 0 532 17A15 15 0 0 0 547 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="570" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="213,109 224,105 224,113" style="fill:rgb(0,0,0)"/>
+<path d="M370,17 L 377,17 Q 385,17 385,32 L 385,94 Q 385,109 370,109 L 234,109 L 219,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="532,109 544,105 544,113" style="fill:rgb(0,0,0)"/>
+<path d="M607,17 L 615,17 Q 622,17 622,32 L 622,94 Q 622,109 607,109 L 553,109 L 538,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,109L310,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,147 17,151 17,142" style="fill:rgb(0,0,0)"/>
+<path d="M310,109 L 20,109 Q 5,109 5,124 L 5,132 Q 5,147 14,147 L 23,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,162L140,162A15 15 0 0 0 155 147A15 15 0 0 0 140 132L43,132A15 15 0 0 0 28 147A15 15 0 0 0 43 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,147 166,151 166,142" style="fill:rgb(0,0,0)"/>
+<path d="M155,147L172,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,162A15 15 0 0 0 208 147A15 15 0 0 0 193 132A15 15 0 0 0 178 147A15 15 0 0 0 193 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,147 233,151 233,142" style="fill:rgb(0,0,0)"/>
+<path d="M208,147L238,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,162L330,162A15 15 0 0 0 345 147A15 15 0 0 0 330 132L259,132A15 15 0 0 0 244 147A15 15 0 0 0 259 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="295" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">view-name</text>
+<polygon points="383,177 372,181 372,173" style="fill:rgb(0,0,0)"/>
+<path d="M345,147 L 353,147 Q 360,147 360,162 L 360,162 Q 360,177 369,177 L 378,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M399,192A15 15 0 0 0 414 177A15 15 0 0 0 399 162A15 15 0 0 0 383 177A15 15 0 0 0 399 192Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="399" y="177" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="450,177 438,181 438,173" style="fill:rgb(0,0,0)"/>
+<path d="M414,177L444,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M465,192L559,192A15 15 0 0 0 574 177A15 15 0 0 0 559 162L465,162A15 15 0 0 0 450 177A15 15 0 0 0 465 192Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="512" y="177" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="610,177 599,181 599,173" style="fill:rgb(0,0,0)"/>
+<path d="M574,177L604,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M625,192A15 15 0 0 0 640 177A15 15 0 0 0 625 162A15 15 0 0 0 610 177A15 15 0 0 0 625 192Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="625" y="177" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="678,147 667,151 667,142" style="fill:rgb(0,0,0)"/>
+<path d="M640,177 L 648,177 Q 655,177 655,162 L 655,162 Q 655,147 664,147 L 673,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M693,162L697,162A15 15 0 0 0 713 147A15 15 0 0 0 697 132L693,132A15 15 0 0 0 678 147A15 15 0 0 0 693 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="695" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="736,147 724,151 724,142" style="fill:rgb(0,0,0)"/>
+<path d="M713,147L730,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M736,162L840,162L840,132L736,132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="788" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="876,147 864,151 864,142" style="fill:rgb(0,0,0)"/>
+<path d="M840,147L870,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="879" cy="147" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="92,177 80,181 80,173" style="fill:rgb(0,0,0)"/>
+<path d="M5,132 L 5,162 Q 5,177 20,177 L 71,177 L 86,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,177 L 206,177 Q 221,177 221,162 L 221,162 Q 221,147 227,147 L 233,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="512,147 500,151 500,142" style="fill:rgb(0,0,0)"/>
+<path d="M345,147L506,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M512,147L667,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M512,230A15 15 0 0 0 527 215A15 15 0 0 0 512 200A15 15 0 0 0 497 215A15 15 0 0 0 512 230Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="512" y="215" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="527,215 539,211 539,219" style="fill:rgb(0,0,0)"/>
+<path d="M574,177 L 582,177 Q 589,177 589,192 L 589,200 Q 589,215 574,215 L 548,215 L 533,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M497,215 L 442,215 Q 427,215 427,200 L 427,192 Q 427,177 434,177 L 442,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>
+</div>
+
+
+
diff --git a/www/syntax/create-virtual-table-stmt.html b/www/syntax/create-virtual-table-stmt.html
new file mode 100644
index 0000000..8834fd6
--- /dev/null
+++ b/www/syntax/create-virtual-table-stmt.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: create-virtual-table-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>create-virtual-table-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:624px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 624.096 259.848">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<polygon points="139,17 127,21 127,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L133,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M154,32L213,32A15 15 0 0 0 228 17A15 15 0 0 0 213 2L154,2A15 15 0 0 0 139 17A15 15 0 0 0 154 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIRTUAL</text>
+<polygon points="251,17 240,21 240,12" style="fill:rgb(0,0,0)"/>
+<path d="M228,17L246,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,32L306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2L266,2A15 15 0 0 0 251 17A15 15 0 0 0 266 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="286" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M372,32A15 15 0 0 0 387 17A15 15 0 0 0 372 2A15 15 0 0 0 357 17A15 15 0 0 0 372 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="372" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="410,17 399,21 399,12" style="fill:rgb(0,0,0)"/>
+<path d="M387,17L404,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M425,32L445,32A15 15 0 0 0 461 17A15 15 0 0 0 445 2L425,2A15 15 0 0 0 410 17A15 15 0 0 0 425 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="435" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="484,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M461,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,32L543,32A15 15 0 0 0 558 17A15 15 0 0 0 543 2L499,2A15 15 0 0 0 484 17A15 15 0 0 0 499 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="521" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<path d="M47,108L143,108A15 15 0 0 0 159 92A15 15 0 0 0 143 77L47,77A15 15 0 0 0 32 92A15 15 0 0 0 47 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="182,92 170,97 170,88" style="fill:rgb(0,0,0)"/>
+<path d="M159,92L176,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,108A15 15 0 0 0 212 92A15 15 0 0 0 197 77A15 15 0 0 0 182 92A15 15 0 0 0 197 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="197" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="248,92 236,97 236,88" style="fill:rgb(0,0,0)"/>
+<path d="M212,92L242,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M263,108L338,108A15 15 0 0 0 353 92A15 15 0 0 0 338 77L263,77A15 15 0 0 0 248 92A15 15 0 0 0 263 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<path d="M47,219L86,219A15 15 0 0 0 101 204A15 15 0 0 0 86 189L47,189A15 15 0 0 0 32 204A15 15 0 0 0 47 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="67" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="124,204 113,209 113,200" style="fill:rgb(0,0,0)"/>
+<path d="M101,204L118,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M139,219L234,219A15 15 0 0 0 249 204A15 15 0 0 0 234 189L139,189A15 15 0 0 0 124 204A15 15 0 0 0 139 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">module-name</text>
+<polygon points="285,204 274,209 274,200" style="fill:rgb(0,0,0)"/>
+<path d="M249,204L279,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,219A15 15 0 0 0 315 204A15 15 0 0 0 300 189A15 15 0 0 0 285 204A15 15 0 0 0 300 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="204" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,204 340,209 340,200" style="fill:rgb(0,0,0)"/>
+<path d="M315,204L346,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,219L497,219A15 15 0 0 0 512 204A15 15 0 0 0 497 189L366,189A15 15 0 0 0 351 204A15 15 0 0 0 366 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">module-argument</text>
+<polygon points="548,204 536,209 536,200" style="fill:rgb(0,0,0)"/>
+<path d="M512,204L542,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M563,219A15 15 0 0 0 578 204A15 15 0 0 0 563 189A15 15 0 0 0 548 204A15 15 0 0 0 563 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="563" y="204" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="614,204 603,209 603,200" style="fill:rgb(0,0,0)"/>
+<path d="M578,204L608,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="618" cy="204" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,257A15 15 0 0 0 447 242A15 15 0 0 0 432 227A15 15 0 0 0 417 242A15 15 0 0 0 432 257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="242" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="447,242 458,238 458,246" style="fill:rgb(0,0,0)"/>
+<path d="M512,204 L 519,204 Q 527,204 527,219 L 527,227 Q 527,242 512,242 L 468,242 L 453,242" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,242 L 343,242 Q 328,242 328,227 L 328,219 Q 328,204 336,204 L 343,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="432,180 420,184 420,176" style="fill:rgb(0,0,0)"/>
+<path d="M249,204 L 257,204 Q 264,204 264,192 Q 264,180 279,180 L 411,180 L 426,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,180 L 576,180 Q 591,180 591,192 Q 591,204 599,204 L 606,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,153 198,149 198,157" style="fill:rgb(0,0,0)"/>
+<path d="M353,92 L 361,92 Q 368,92 368,107 L 368,138 Q 368,153 353,153 L 207,153 L 192,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,204 20,209 20,200" style="fill:rgb(0,0,0)"/>
+<path d="M187,153 L 20,153 Q 5,153 5,168 L 5,189 Q 5,204 16,204 L 26,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="429,62 441,58 441,66" style="fill:rgb(0,0,0)"/>
+<path d="M558,17 L 566,17 Q 573,17 573,32 L 573,47 Q 573,62 558,62 L 450,62 L 435,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,92 20,97 20,88" style="fill:rgb(0,0,0)"/>
+<path d="M429,62 L 20,62 Q 5,62 5,77 L 5,77 Q 5,92 16,92 L 26,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,47 332,35 340,35" style="fill:rgb(0,0,0)"/>
+<path d="M321,17 L 328,17 Q 336,17 336,29 L 336,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,47 L 336,54 Q 336,62 328,62 L 321,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="95,123 84,127 84,118" style="fill:rgb(0,0,0)"/>
+<path d="M5,77 L 5,108 Q 5,123 20,123 L 74,123 L 89,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,123 L 210,123 Q 225,123 225,108 L 225,107 Q 225,92 231,92 L 236,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createvtab.html'>lang_createvtab.html</a>
+</div>
+
+
+
diff --git a/www/syntax/cte-table-name.html b/www/syntax/cte-table-name.html
new file mode 100644
index 0000000..3ccb26e
--- /dev/null
+++ b/www/syntax/cte-table-name.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: cte-table-name</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>cte-table-name</h1>
+<div class='imgcontainer'>
+<div style="max-width:475px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 475.949 91.8">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,36 20,41 20,32" style="fill:rgb(0,0,0)"/>
+<path d="M9,36L26,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,51L122,51A15 15 0 0 0 137 36A15 15 0 0 0 122 21L47,21A15 15 0 0 0 32 36A15 15 0 0 0 47 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="173,36 162,41 162,32" style="fill:rgb(0,0,0)"/>
+<path d="M137,36L168,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M188,51A15 15 0 0 0 204 36A15 15 0 0 0 188 21A15 15 0 0 0 173 36A15 15 0 0 0 188 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="188" y="36" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="240,36 228,41 228,32" style="fill:rgb(0,0,0)"/>
+<path d="M204,36L234,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M255,51L349,51A15 15 0 0 0 364 36A15 15 0 0 0 349 21L255,21A15 15 0 0 0 240 36A15 15 0 0 0 255 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="400,36 388,41 388,32" style="fill:rgb(0,0,0)"/>
+<path d="M364,36L394,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,51A15 15 0 0 0 430 36A15 15 0 0 0 415 21A15 15 0 0 0 400 36A15 15 0 0 0 415 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="36" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="466,36 455,41 455,32" style="fill:rgb(0,0,0)"/>
+<path d="M430,36L460,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="470" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,89A15 15 0 0 0 317 74L317,74A15 15 0 0 0 302 59A15 15 0 0 0 287 74L287,74A15 15 0 0 0 302 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="317,74 328,70 328,78" style="fill:rgb(0,0,0)"/>
+<path d="M364,36 L 371,36 Q 379,36 379,51 L 379,59 Q 379,74 364,74 L 338,74 L 323,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,74 L 232,74 Q 217,74 217,59 L 217,51 Q 217,36 224,36 L 232,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="302,6 290,10 290,2" style="fill:rgb(0,0,0)"/>
+<path d="M137,36 L 145,36 Q 152,36 152,21 L 152,21 Q 152,6 167,6 L 281,6 L 296,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,6 L 422,6 Q 437,6 437,21 L 437,21 Q 437,36 445,36 L 452,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./recursive-cte.html'>recursive-cte</a>&nbsp;&nbsp; <a href='./with-clause.html'>with-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>
+</div>
+
+
+
diff --git a/www/syntax/delete-stmt-limited.html b/www/syntax/delete-stmt-limited.html
new file mode 100644
index 0000000..2610111
--- /dev/null
+++ b/www/syntax/delete-stmt-limited.html
@@ -0,0 +1,249 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: delete-stmt-limited</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>delete-stmt-limited</h1>
+<div class='imgcontainer'>
+<div style="max-width:623px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 623.266 541.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,138L113,138A15 15 0 0 0 128 123A15 15 0 0 0 113 108L60,108A15 15 0 0 0 45 123A15 15 0 0 0 60 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="151,123 140,127 140,118" style="fill:rgb(0,0,0)"/>
+<path d="M128,123L145,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M166,138L201,138A15 15 0 0 0 216 123A15 15 0 0 0 201 108L166,108A15 15 0 0 0 151 123A15 15 0 0 0 166 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="239,123 228,127 228,118" style="fill:rgb(0,0,0)"/>
+<path d="M216,123L233,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,138L424,138L424,108L239,108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<polygon points="45,123 33,127 33,118" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,108 Q 24,123 31,123 L 39,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,85 343,81 343,89" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,70 Q 598,85 583,85 L 352,85 L 337,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M332,85 L 39,85 Q 24,85 24,92 L 24,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,213L109,213A15 15 0 0 0 125 198A15 15 0 0 0 109 183L60,183A15 15 0 0 0 45 198A15 15 0 0 0 60 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="148,198 136,203 136,194" style="fill:rgb(0,0,0)"/>
+<path d="M125,198L142,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M148,213L197,213L197,183L148,183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="172" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M45,289L196,289L196,259L45,259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="120" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<path d="M60,365L105,365A15 15 0 0 0 120 349A15 15 0 0 0 105 334L60,334A15 15 0 0 0 45 349A15 15 0 0 0 60 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="82" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="143,349 131,354 131,345" style="fill:rgb(0,0,0)"/>
+<path d="M120,349L137,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,365L162,365A15 15 0 0 0 177 349A15 15 0 0 0 162 334L158,334A15 15 0 0 0 143 349A15 15 0 0 0 158 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="160" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="213,349 201,354 201,345" style="fill:rgb(0,0,0)"/>
+<path d="M177,349L207,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M213,365L343,365L343,334L213,334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M278,402A15 15 0 0 0 293 387A15 15 0 0 0 278 372A15 15 0 0 0 263 387A15 15 0 0 0 278 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="387" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M60,470L93,470A15 15 0 0 0 109 455A15 15 0 0 0 93 440L60,440A15 15 0 0 0 45 455A15 15 0 0 0 60 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,455 120,460 120,451" style="fill:rgb(0,0,0)"/>
+<path d="M109,455L126,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,470L181,470L181,440L132,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,486 207,490 207,481" style="fill:rgb(0,0,0)"/>
+<path d="M181,455 L 188,455 Q 196,455 196,470 L 196,471 Q 196,486 204,486 L 213,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,501L285,501A15 15 0 0 0 300 486A15 15 0 0 0 285 470L234,470A15 15 0 0 0 219 486A15 15 0 0 0 234 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="323,486 312,490 312,481" style="fill:rgb(0,0,0)"/>
+<path d="M300,486L318,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,501L373,501L373,470L323,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M234,538A15 15 0 0 0 249 523A15 15 0 0 0 234 508A15 15 0 0 0 219 523A15 15 0 0 0 234 538Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="523" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="272,523 261,528 261,519" style="fill:rgb(0,0,0)"/>
+<path d="M249,523L266,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,538L321,538L321,508L272,508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="523" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,523 207,528 207,519" style="fill:rgb(0,0,0)"/>
+<path d="M181,455 L 188,455 Q 196,455 196,470 L 196,508 Q 196,523 204,523 L 213,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,455 602,460 602,451" style="fill:rgb(0,0,0)"/>
+<path d="M181,455L608,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="455" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="575,123 564,127 564,118" style="fill:rgb(0,0,0)"/>
+<path d="M424,123L570,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M575,123 L 583,123 Q 590,123 590,138 L 590,440 Q 590,455 598,455 L 605,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="239,160 251,156 251,165" style="fill:rgb(0,0,0)"/>
+<path d="M424,123 L 431,123 Q 439,123 439,138 L 439,145 Q 439,160 424,160 L 260,160 L 245,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,198 33,203 33,194" style="fill:rgb(0,0,0)"/>
+<path d="M239,160 L 39,160 Q 24,160 24,175 L 24,183 Q 24,198 31,198 L 39,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="575,198 564,203 564,194" style="fill:rgb(0,0,0)"/>
+<path d="M197,198L570,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M575,198 L 583,198 Q 590,198 590,206 L 590,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,274 33,278 33,270" style="fill:rgb(0,0,0)"/>
+<path d="M24,259 L 24,266 Q 24,274 31,274 L 39,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="120,312 132,307 132,316" style="fill:rgb(0,0,0)"/>
+<path d="M196,274 L 203,274 Q 211,274 211,289 L 211,297 Q 211,312 196,312 L 141,312 L 126,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M120,312 L 39,312 Q 24,312 24,319 L 24,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="575,274 564,278 564,270" style="fill:rgb(0,0,0)"/>
+<path d="M196,274L570,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M575,274 L 583,274 Q 590,274 590,281 L 590,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,349 33,354 33,345" style="fill:rgb(0,0,0)"/>
+<path d="M24,183 L 24,334 Q 24,349 31,349 L 39,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="120,236 131,232 131,240" style="fill:rgb(0,0,0)"/>
+<path d="M197,198 L 204,198 Q 212,198 212,213 L 212,221 Q 212,236 197,236 L 140,236 L 125,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M120,236 L 39,236 Q 24,236 24,244 L 24,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="293,387 305,383 305,392" style="fill:rgb(0,0,0)"/>
+<path d="M343,349 L 350,349 Q 358,349 358,364 L 358,372 Q 358,387 343,387 L 314,387 L 299,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M263,387 L 205,387 Q 190,387 190,372 L 190,364 Q 190,349 197,349 L 205,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,334 L 24,440 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="160,417 171,413 171,422" style="fill:rgb(0,0,0)"/>
+<path d="M343,349 L 350,349 Q 358,349 358,364 L 358,402 Q 358,417 343,417 L 181,417 L 166,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M160,417 L 39,417 Q 24,417 24,425 L 24,432" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,455 435,460 435,451" style="fill:rgb(0,0,0)"/>
+<path d="M321,523 L 396,523 Q 411,523 411,508 L 411,470 Q 411,455 426,455 L 426,455 L 441,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,486 384,490 384,481" style="fill:rgb(0,0,0)"/>
+<path d="M373,486L390,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,486 L 403,486 Q 411,486 411,478 L 411,471" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./common-table-expression.html'>common-table-expression</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./ordering-term.html'>ordering-term</a>&nbsp;&nbsp; <a href='./qualified-table-name.html'>qualified-table-name</a>&nbsp;&nbsp; <a href='./returning-clause.html'>returning-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>
+</div>
+
+
+
diff --git a/www/syntax/delete-stmt.html b/www/syntax/delete-stmt.html
new file mode 100644
index 0000000..2269042
--- /dev/null
+++ b/www/syntax/delete-stmt.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: delete-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>delete-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:648px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 648.706 220.32">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L114,32A15 15 0 0 0 129 17A15 15 0 0 0 114 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="98" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M189,62L275,62A15 15 0 0 0 290 47A15 15 0 0 0 275 32L189,32A15 15 0 0 0 174 47A15 15 0 0 0 189 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="232" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="232,17 220,21 220,12" style="fill:rgb(0,0,0)"/>
+<path d="M129,17L226,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,17 368,21 368,12" style="fill:rgb(0,0,0)"/>
+<path d="M232,17L374,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,32L606,32L606,2L380,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="174,47 162,51 162,43" style="fill:rgb(0,0,0)"/>
+<path d="M129,17 L 136,17 Q 144,17 144,32 L 144,32 Q 144,47 156,47 L 168,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,47 301,51 301,43" style="fill:rgb(0,0,0)"/>
+<path d="M290,47L307,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,47 L 321,47 Q 328,47 328,32 L 328,32 Q 328,17 343,17 L 353,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,70A15 15 0 0 0 508 55L508,55A15 15 0 0 0 493 39A15 15 0 0 0 478 55L478,55A15 15 0 0 0 493 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="508,55 520,50 520,59" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,40 Q 621,55 606,55 L 529,55 L 514,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,55 L 372,55 Q 357,55 357,40 L 357,32 Q 357,17 363,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,138L136,138A15 15 0 0 0 151 123A15 15 0 0 0 136 108L83,108A15 15 0 0 0 68 123A15 15 0 0 0 83 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="174,123 163,127 163,118" style="fill:rgb(0,0,0)"/>
+<path d="M151,123L168,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,138L224,138A15 15 0 0 0 239 123A15 15 0 0 0 224 108L189,108A15 15 0 0 0 174 123A15 15 0 0 0 189 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="207" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="262,123 251,127 251,118" style="fill:rgb(0,0,0)"/>
+<path d="M239,123L256,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M262,138L447,138L447,108L262,108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<circle cx="642" cy="213" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M639,213 L 618,213 Q 603,213 603,198 L 603,198 Q 603,183 595,183 L 588,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M437,198L588,198L588,168L437,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="512" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="437,183 425,187 425,179" style="fill:rgb(0,0,0)"/>
+<path d="M431,183 L 421,183 Q 410,183 410,198 L 410,198 Q 410,213 403,213 L 395,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,213 384,218 384,209" style="fill:rgb(0,0,0)"/>
+<path d="M390,213 L 379,213 Q 369,213 369,198 L 369,198 Q 369,183 361,183 L 354,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M305,198L354,198L354,168L305,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="329" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="305,183 293,187 293,179" style="fill:rgb(0,0,0)"/>
+<path d="M299,183L282,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,198L267,198A15 15 0 0 0 282 183A15 15 0 0 0 267 168L217,168A15 15 0 0 0 202 183A15 15 0 0 0 217 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="242" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="355,153 366,149 366,157" style="fill:rgb(0,0,0)"/>
+<path d="M447,123 L 455,123 Q 462,123 462,138 L 462,138 Q 462,153 447,153 L 375,153 L 360,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="202,183 190,187 190,179" style="fill:rgb(0,0,0)"/>
+<path d="M355,153 L 195,153 Q 180,153 180,168 L 180,168 Q 180,183 188,183 L 196,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="639,213 627,218 627,209" style="fill:rgb(0,0,0)"/>
+<path d="M180,172 L 180,198 Q 180,213 195,213 L 618,213 L 633,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="355,85 366,81 366,89" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,70 Q 621,85 606,85 L 375,85 L 360,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,123 56,127 56,118" style="fill:rgb(0,0,0)"/>
+<path d="M355,85 L 62,85 Q 47,85 47,100 L 47,108 Q 47,123 55,123 L 62,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,47 43,36 51,36" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,29 L 47,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,47L47,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./create-trigger-stmt.html'>create-trigger-stmt</a>&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./common-table-expression.html'>common-table-expression</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./qualified-table-name.html'>qualified-table-name</a>&nbsp;&nbsp; <a href='./returning-clause.html'>returning-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>
+</div>
+
+
+
diff --git a/www/syntax/detach-stmt.html b/www/syntax/detach-stmt.html
new file mode 100644
index 0000000..029b15e
--- /dev/null
+++ b/www/syntax/detach-stmt.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: detach-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>detach-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.595 47.952">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L104,32A15 15 0 0 0 119 17A15 15 0 0 0 104 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DETACH</text>
+<polygon points="155,17 143,21 143,12" style="fill:rgb(0,0,0)"/>
+<path d="M119,17L149,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M170,32L246,32A15 15 0 0 0 261 17A15 15 0 0 0 246 2L170,2A15 15 0 0 0 155 17A15 15 0 0 0 170 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="208" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DATABASE</text>
+<polygon points="297,17 286,21 286,12" style="fill:rgb(0,0,0)"/>
+<path d="M261,17L291,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,32L409,32A15 15 0 0 0 424 17A15 15 0 0 0 409 2L312,2A15 15 0 0 0 297 17A15 15 0 0 0 312 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="447,17 435,21 435,12" style="fill:rgb(0,0,0)"/>
+<path d="M424,17L441,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="208,41 196,45 196,37" style="fill:rgb(0,0,0)"/>
+<path d="M119,17 L 126,17 Q 134,17 134,29 Q 134,41 149,41 L 187,41 L 202,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M208,41 L 255,41 Q 270,41 270,29 Q 270,17 278,17 L 285,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_detach.html'>lang_detach.html</a>
+</div>
+
+
+
diff --git a/www/syntax/drop-index-stmt.html b/www/syntax/drop-index-stmt.html
new file mode 100644
index 0000000..d4a5567
--- /dev/null
+++ b/www/syntax/drop-index-stmt.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: drop-index-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>drop-index-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:761px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 761.27 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L171,32A15 15 0 0 0 186 17A15 15 0 0 0 171 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="151" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEX</text>
+<polygon points="222,17 210,21 210,12" style="fill:rgb(0,0,0)"/>
+<path d="M186,17L216,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,32A15 15 0 0 0 252 17A15 15 0 0 0 237 2A15 15 0 0 0 222 17A15 15 0 0 0 237 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="237" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="275,17 263,21 263,12" style="fill:rgb(0,0,0)"/>
+<path d="M252,17L269,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,32L335,32A15 15 0 0 0 350 17A15 15 0 0 0 335 2L290,2A15 15 0 0 0 275 17A15 15 0 0 0 290 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="404,17 392,21 392,12" style="fill:rgb(0,0,0)"/>
+<path d="M350,17L398,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,32L515,32A15 15 0 0 0 530 17A15 15 0 0 0 515 2L419,2A15 15 0 0 0 404 17A15 15 0 0 0 419 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="467" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="553,17 542,21 542,12" style="fill:rgb(0,0,0)"/>
+<path d="M530,17L548,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,32A15 15 0 0 0 584 17A15 15 0 0 0 569 2A15 15 0 0 0 553 17A15 15 0 0 0 569 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="569" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="620,17 608,21 608,12" style="fill:rgb(0,0,0)"/>
+<path d="M584,17L614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M635,32L713,32A15 15 0 0 0 728 17A15 15 0 0 0 713 2L635,2A15 15 0 0 0 620 17A15 15 0 0 0 635 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<polygon points="751,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M728,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="755" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,47 263,51 263,43" style="fill:rgb(0,0,0)"/>
+<path d="M186,17 L 193,17 Q 201,17 201,32 L 201,32 Q 201,47 216,47 L 254,47 L 269,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,47 L 350,47 Q 365,47 365,32 L 365,32 Q 365,17 372,17 L 380,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="467,47 456,51 456,43" style="fill:rgb(0,0,0)"/>
+<path d="M372,17 L 379,17 Q 387,17 387,32 L 387,32 Q 387,47 402,47 L 446,47 L 461,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,47 L 584,47 Q 599,47 599,32 L 599,32 Q 599,17 606,17 L 614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_dropindex.html'>lang_dropindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/drop-table-stmt.html b/www/syntax/drop-table-stmt.html
new file mode 100644
index 0000000..3f4c474
--- /dev/null
+++ b/www/syntax/drop-table-stmt.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: drop-table-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>drop-table-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:758px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 758.16 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L171,32A15 15 0 0 0 186 17A15 15 0 0 0 171 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="151" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="222,17 210,21 210,12" style="fill:rgb(0,0,0)"/>
+<path d="M186,17L216,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,32A15 15 0 0 0 252 17A15 15 0 0 0 237 2A15 15 0 0 0 222 17A15 15 0 0 0 237 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="237" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="275,17 264,21 264,12" style="fill:rgb(0,0,0)"/>
+<path d="M252,17L269,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,32L335,32A15 15 0 0 0 350 17A15 15 0 0 0 335 2L290,2A15 15 0 0 0 275 17A15 15 0 0 0 290 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="404,17 392,21 392,12" style="fill:rgb(0,0,0)"/>
+<path d="M350,17L398,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,32L515,32A15 15 0 0 0 531 17A15 15 0 0 0 515 2L419,2A15 15 0 0 0 404 17A15 15 0 0 0 419 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="467" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="554,17 542,21 542,12" style="fill:rgb(0,0,0)"/>
+<path d="M531,17L548,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,32A15 15 0 0 0 584 17A15 15 0 0 0 569 2A15 15 0 0 0 554 17A15 15 0 0 0 569 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="569" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="620,17 608,21 608,12" style="fill:rgb(0,0,0)"/>
+<path d="M584,17L614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M635,32L710,32A15 15 0 0 0 725 17A15 15 0 0 0 710 2L635,2A15 15 0 0 0 620 17A15 15 0 0 0 635 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="673" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="748,17 737,21 737,12" style="fill:rgb(0,0,0)"/>
+<path d="M725,17L743,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="752" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,47 264,51 264,43" style="fill:rgb(0,0,0)"/>
+<path d="M186,17 L 193,17 Q 201,17 201,32 L 201,32 Q 201,47 216,47 L 254,47 L 269,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,47 L 350,47 Q 365,47 365,32 L 365,32 Q 365,17 372,17 L 380,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="467,47 456,51 456,43" style="fill:rgb(0,0,0)"/>
+<path d="M372,17 L 379,17 Q 387,17 387,32 L 387,32 Q 387,47 402,47 L 447,47 L 462,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,47 L 584,47 Q 599,47 599,32 L 599,32 Q 599,17 606,17 L 614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_droptable.html'>lang_droptable.html</a>
+</div>
+
+
+
diff --git a/www/syntax/drop-trigger-stmt.html b/www/syntax/drop-trigger-stmt.html
new file mode 100644
index 0000000..84a19a3
--- /dev/null
+++ b/www/syntax/drop-trigger-stmt.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: drop-trigger-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>drop-trigger-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:795px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 795.37 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L191,32A15 15 0 0 0 207 17A15 15 0 0 0 191 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="161" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRIGGER</text>
+<polygon points="243,17 231,21 231,12" style="fill:rgb(0,0,0)"/>
+<path d="M207,17L237,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,32A15 15 0 0 0 273 17A15 15 0 0 0 258 2A15 15 0 0 0 243 17A15 15 0 0 0 258 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="296,17 284,21 284,12" style="fill:rgb(0,0,0)"/>
+<path d="M273,17L290,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,32L356,32A15 15 0 0 0 371 17A15 15 0 0 0 356 2L311,2A15 15 0 0 0 296 17A15 15 0 0 0 311 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="425,17 413,21 413,12" style="fill:rgb(0,0,0)"/>
+<path d="M371,17L419,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,32L536,32A15 15 0 0 0 551 17A15 15 0 0 0 536 2L440,2A15 15 0 0 0 425 17A15 15 0 0 0 440 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="574,17 563,21 563,12" style="fill:rgb(0,0,0)"/>
+<path d="M551,17L569,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M589,32A15 15 0 0 0 605 17A15 15 0 0 0 589 2A15 15 0 0 0 574 17A15 15 0 0 0 589 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="589" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="641,17 629,21 629,12" style="fill:rgb(0,0,0)"/>
+<path d="M605,17L635,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M656,32L747,32A15 15 0 0 0 762 17A15 15 0 0 0 747 2L656,2A15 15 0 0 0 641 17A15 15 0 0 0 656 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="702" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">trigger-name</text>
+<polygon points="786,17 774,21 774,12" style="fill:rgb(0,0,0)"/>
+<path d="M762,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="789" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="296,47 284,51 284,43" style="fill:rgb(0,0,0)"/>
+<path d="M207,17 L 214,17 Q 222,17 222,32 L 222,32 Q 222,47 237,47 L 275,47 L 290,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M296,47 L 371,47 Q 386,47 386,32 L 386,32 Q 386,17 393,17 L 401,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="488,47 476,51 476,43" style="fill:rgb(0,0,0)"/>
+<path d="M392,17 L 400,17 Q 407,17 407,32 L 407,32 Q 407,47 422,47 L 467,47 L 482,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,47 L 605,47 Q 620,47 620,32 L 620,32 Q 620,17 627,17 L 635,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_droptrigger.html'>lang_droptrigger.html</a>
+</div>
+
+
+
diff --git a/www/syntax/drop-view-stmt.html b/www/syntax/drop-view-stmt.html
new file mode 100644
index 0000000..061db83
--- /dev/null
+++ b/www/syntax/drop-view-stmt.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: drop-view-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>drop-view-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:743px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 743.76 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L160,32A15 15 0 0 0 176 17A15 15 0 0 0 160 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIEW</text>
+<polygon points="212,17 200,21 200,12" style="fill:rgb(0,0,0)"/>
+<path d="M176,17L206,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,32A15 15 0 0 0 242 17A15 15 0 0 0 227 2A15 15 0 0 0 212 17A15 15 0 0 0 227 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="227" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="265,17 253,21 253,12" style="fill:rgb(0,0,0)"/>
+<path d="M242,17L259,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M280,32L325,32A15 15 0 0 0 340 17A15 15 0 0 0 325 2L280,2A15 15 0 0 0 265 17A15 15 0 0 0 280 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="394,17 382,21 382,12" style="fill:rgb(0,0,0)"/>
+<path d="M340,17L388,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,32L505,32A15 15 0 0 0 520 17A15 15 0 0 0 505 2L409,2A15 15 0 0 0 394 17A15 15 0 0 0 409 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="543,17 532,21 532,12" style="fill:rgb(0,0,0)"/>
+<path d="M520,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,32A15 15 0 0 0 574 17A15 15 0 0 0 558 2A15 15 0 0 0 543 17A15 15 0 0 0 558 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="558" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="610,17 598,21 598,12" style="fill:rgb(0,0,0)"/>
+<path d="M574,17L604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M625,32L696,32A15 15 0 0 0 711 17A15 15 0 0 0 696 2L625,2A15 15 0 0 0 610 17A15 15 0 0 0 625 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="660" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">view-name</text>
+<polygon points="734,17 722,21 722,12" style="fill:rgb(0,0,0)"/>
+<path d="M711,17L728,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="738" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="265,47 253,51 253,43" style="fill:rgb(0,0,0)"/>
+<path d="M176,17 L 183,17 Q 191,17 191,32 L 191,32 Q 191,47 206,47 L 244,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,47 L 340,47 Q 355,47 355,32 L 355,32 Q 355,17 362,17 L 370,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="457,47 445,51 445,43" style="fill:rgb(0,0,0)"/>
+<path d="M361,17 L 369,17 Q 376,17 376,32 L 376,32 Q 376,47 391,47 L 436,47 L 451,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M457,47 L 574,47 Q 589,47 589,32 L 589,32 Q 589,17 596,17 L 604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_dropview.html'>lang_dropview.html</a>
+</div>
+
+
+
diff --git a/www/syntax/expr.html b/www/syntax/expr.html
new file mode 100644
index 0000000..8331d56
--- /dev/null
+++ b/www/syntax/expr.html
@@ -0,0 +1,631 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: expr</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>expr</h1>
+<div class='imgcontainer'>
+<div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./aggregate-function-invocation.html'>aggregate-function-invocation</a>&nbsp;&nbsp; <a href='./attach-stmt.html'>attach-stmt</a>&nbsp;&nbsp; <a href='./column-constraint.html'>column-constraint</a>&nbsp;&nbsp; <a href='./compound-select-stmt.html'>compound-select-stmt</a>&nbsp;&nbsp; <a href='./create-index-stmt.html'>create-index-stmt</a>&nbsp;&nbsp; <a href='./create-trigger-stmt.html'>create-trigger-stmt</a>&nbsp;&nbsp; <a href='./delete-stmt.html'>delete-stmt</a>&nbsp;&nbsp; <a href='./delete-stmt-limited.html'>delete-stmt-limited</a>&nbsp;&nbsp; <a href='./factored-select-stmt.html'>factored-select-stmt</a>&nbsp;&nbsp; <a href='./filter-clause.html'>filter-clause</a>&nbsp;&nbsp; <a href='./frame-spec.html'>frame-spec</a>&nbsp;&nbsp; <a href='./indexed-column.html'>indexed-column</a>&nbsp;&nbsp; <a href='./insert-stmt.html'>insert-stmt</a>&nbsp;&nbsp; <a href='./join-constraint.html'>join-constraint</a>&nbsp;&nbsp; <a href='./ordering-term.html'>ordering-term</a>&nbsp;&nbsp; <a href='./over-clause.html'>over-clause</a>&nbsp;&nbsp; <a href='./result-column.html'>result-column</a>&nbsp;&nbsp; <a href='./returning-clause.html'>returning-clause</a>&nbsp;&nbsp; <a href='./select-core.html'>select-core</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./simple-function-invocation.html'>simple-function-invocation</a>&nbsp;&nbsp; <a href='./simple-select-stmt.html'>simple-select-stmt</a>&nbsp;&nbsp; <a href='./table-constraint.html'>table-constraint</a>&nbsp;&nbsp; <a href='./table-or-subquery.html'>table-or-subquery</a>&nbsp;&nbsp; <a href='./update-stmt.html'>update-stmt</a>&nbsp;&nbsp; <a href='./update-stmt-limited.html'>update-stmt-limited</a>&nbsp;&nbsp; <a href='./upsert-clause.html'>upsert-clause</a>&nbsp;&nbsp; <a href='./window-defn.html'>window-defn</a>&nbsp;&nbsp; <a href='./window-function-invocation.html'>window-function-invocation</a><br></br>
+References:&nbsp;&nbsp; <a href='./filter-clause.html'>filter-clause</a>&nbsp;&nbsp; <a href='./literal-value.html'>literal-value</a>&nbsp;&nbsp; <a href='./over-clause.html'>over-clause</a>&nbsp;&nbsp; <a href='./raise-function.html'>raise-function</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./type-name.html'>type-name</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/factored-select-stmt.html b/www/syntax/factored-select-stmt.html
new file mode 100644
index 0000000..4b90a2b
--- /dev/null
+++ b/www/syntax/factored-select-stmt.html
@@ -0,0 +1,230 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: factored-select-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>factored-select-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:629px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 629.266 500.04">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M117,153L220,153L220,123L117,123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M60,304L105,304A15 15 0 0 0 120 289A15 15 0 0 0 105 274L60,274A15 15 0 0 0 45 289A15 15 0 0 0 60 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="82" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="143,289 131,293 131,285" style="fill:rgb(0,0,0)"/>
+<path d="M120,289L137,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,304L162,304A15 15 0 0 0 177 289A15 15 0 0 0 162 274L158,274A15 15 0 0 0 143 289A15 15 0 0 0 158 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="160" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M60,410L93,410A15 15 0 0 0 109 395A15 15 0 0 0 93 380L60,380A15 15 0 0 0 45 395A15 15 0 0 0 60 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,395 120,399 120,390" style="fill:rgb(0,0,0)"/>
+<path d="M109,395L126,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,410L181,410L181,380L132,380Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,138 105,142 105,133" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,123 Q 24,138 39,138 L 96,138 L 111,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="312,92 323,88 323,97" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 604,17 Q 619,17 619,32 L 619,77 Q 619,92 604,92 L 333,92 L 318,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,92 L 39,92 Q 24,92 24,100 L 24,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M80,198L257,198L257,168L80,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="257,183 269,179 269,187" style="fill:rgb(0,0,0)"/>
+<path d="M272,138 L 280,138 Q 287,138 287,153 L 287,168 Q 287,183 275,183 L 263,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M80,183 L 65,183 Q 50,183 50,168 L 50,153 Q 50,138 58,138 L 65,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="296,236 308,232 308,240" style="fill:rgb(0,0,0)"/>
+<path d="M220,138 L 342,138 Q 357,138 357,153 L 357,221 Q 357,236 342,236 L 317,236 L 302,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,289 33,293 33,285" style="fill:rgb(0,0,0)"/>
+<path d="M296,236 L 39,236 Q 24,236 24,251 L 24,274 Q 24,289 31,289 L 39,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="222,289 210,293 210,285" style="fill:rgb(0,0,0)"/>
+<path d="M177,289L216,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,304L352,304L352,274L222,274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="287" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M287,342A15 15 0 0 0 302 327A15 15 0 0 0 287 312A15 15 0 0 0 272 327A15 15 0 0 0 287 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="287" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="302,327 314,322 314,331" style="fill:rgb(0,0,0)"/>
+<path d="M352,289 L 359,289 Q 367,289 367,304 L 367,312 Q 367,327 352,327 L 323,327 L 308,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,327 L 214,327 Q 199,327 199,312 L 199,304 Q 199,289 205,289 L 210,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,319 384,308 392,308" style="fill:rgb(0,0,0)"/>
+<path d="M352,289 L 373,289 Q 388,289 388,301 L 388,313" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="198,361 210,356 210,365" style="fill:rgb(0,0,0)"/>
+<path d="M388,319 L 388,346 Q 388,361 373,361 L 219,361 L 204,361" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,395 33,399 33,390" style="fill:rgb(0,0,0)"/>
+<path d="M198,361 L 39,361 Q 24,361 24,376 L 24,380 Q 24,395 31,395 L 39,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,327 20,315 28,315" style="fill:rgb(0,0,0)"/>
+<path d="M24,274L24,321" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,327L24,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M255,440L306,440A15 15 0 0 0 321 425A15 15 0 0 0 306 410L255,410A15 15 0 0 0 240 425A15 15 0 0 0 255 440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="425" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="344,425 333,429 333,421" style="fill:rgb(0,0,0)"/>
+<path d="M321,425L339,425" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M344,440L394,440L394,410L344,410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="369" y="425" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="417,425 405,429 405,421" style="fill:rgb(0,0,0)"/>
+<path d="M394,425L411,425" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M255,478A15 15 0 0 0 270 463A15 15 0 0 0 255 448A15 15 0 0 0 240 463A15 15 0 0 0 255 478Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="255" y="463" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,463 282,467 282,458" style="fill:rgb(0,0,0)"/>
+<path d="M270,463L287,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M293,478L342,478L342,448L293,448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="318" y="463" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="204,395 192,399 192,390" style="fill:rgb(0,0,0)"/>
+<path d="M181,395L198,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="240,463 228,467 228,458" style="fill:rgb(0,0,0)"/>
+<path d="M204,395 L 211,395 Q 219,395 219,410 L 219,448 Q 219,463 226,463 L 234,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="240,425 228,429 228,421" style="fill:rgb(0,0,0)"/>
+<path d="M204,395 L 211,395 Q 219,395 219,410 L 219,410 Q 219,425 226,425 L 234,425" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="417,395 405,399 405,390" style="fill:rgb(0,0,0)"/>
+<path d="M204,395L411,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,493 608,497 608,489" style="fill:rgb(0,0,0)"/>
+<path d="M417,395 L 438,395 Q 453,395 453,410 L 453,478 Q 453,493 468,493 L 599,493 L 614,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="623" cy="493" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,425 L 438,425 Q 453,425 453,433 L 453,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="417,463 405,467 405,458" style="fill:rgb(0,0,0)"/>
+<path d="M342,463L411,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,463 L 438,463 Q 453,463 453,470 L 453,478" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="417,493 405,497 405,489" style="fill:rgb(0,0,0)"/>
+<path d="M24,380 L 24,478 Q 24,493 39,493 L 396,493 L 411,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,493L489,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+References:&nbsp;&nbsp; <a href='./common-table-expression.html'>common-table-expression</a>&nbsp;&nbsp; <a href='./compound-operator.html'>compound-operator</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./ordering-term.html'>ordering-term</a>&nbsp;&nbsp; <a href='./select-core.html'>select-core</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>
+</div>
+
+
+
diff --git a/www/syntax/filter-clause.html b/www/syntax/filter-clause.html
new file mode 100644
index 0000000..ede3356
--- /dev/null
+++ b/www/syntax/filter-clause.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: filter-clause</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>filter-clause</h1>
+<div class='imgcontainer'>
+<div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./aggregate-function-invocation.html'>aggregate-function-invocation</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./window-function-invocation.html'>window-function-invocation</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/foreign-key-clause.html b/www/syntax/foreign-key-clause.html
new file mode 100644
index 0000000..3d9d706
--- /dev/null
+++ b/www/syntax/foreign-key-clause.html
@@ -0,0 +1,267 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: foreign-key-clause</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>foreign-key-clause</h1>
+<div class='imgcontainer'>
+<div style="max-width:648px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 648.158 492.48">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L164,70A15 15 0 0 0 179 55A15 15 0 0 0 164 39L60,39A15 15 0 0 0 45 55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REFERENCES</text>
+<polygon points="202,55 190,59 190,50" style="fill:rgb(0,0,0)"/>
+<path d="M179,55L196,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,70L306,70A15 15 0 0 0 322 55A15 15 0 0 0 306 39L217,39A15 15 0 0 0 202 55A15 15 0 0 0 217 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-table</text>
+<polygon points="358,55 346,59 346,50" style="fill:rgb(0,0,0)"/>
+<path d="M322,55L352,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,70A15 15 0 0 0 388 55A15 15 0 0 0 373 39A15 15 0 0 0 358 55A15 15 0 0 0 373 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="373" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="424,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M388,55L418,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M439,70L533,70A15 15 0 0 0 548 55A15 15 0 0 0 533 39L439,39A15 15 0 0 0 424 55A15 15 0 0 0 439 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="584,55 573,59 573,50" style="fill:rgb(0,0,0)"/>
+<path d="M548,55L578,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M599,70A15 15 0 0 0 614 55A15 15 0 0 0 599 39A15 15 0 0 0 584 55A15 15 0 0 0 599 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="599" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M486,32A15 15 0 0 0 501 17L501,17A15 15 0 0 0 486 2A15 15 0 0 0 471 17L471,17A15 15 0 0 0 486 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="501,17 513,12 513,21" style="fill:rgb(0,0,0)"/>
+<path d="M548,55 L 556,55 Q 563,55 563,40 L 563,32 Q 563,17 548,17 L 522,17 L 507,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,17 L 416,17 Q 401,17 401,32 L 401,40 Q 401,55 412,55 L 424,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,176L69,176A15 15 0 0 0 84 160A15 15 0 0 0 69 145L60,145A15 15 0 0 0 45 160A15 15 0 0 0 60 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="64" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="120,160 109,165 109,156" style="fill:rgb(0,0,0)"/>
+<path d="M84,160L114,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,176L188,176A15 15 0 0 0 203 160A15 15 0 0 0 188 145L135,145A15 15 0 0 0 120 160A15 15 0 0 0 135 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="162" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="275,160 264,165 264,156" style="fill:rgb(0,0,0)"/>
+<path d="M203,160L269,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,176L306,176A15 15 0 0 0 321 160A15 15 0 0 0 306 145L290,145A15 15 0 0 0 275 160A15 15 0 0 0 290 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="344,160 332,165 332,156" style="fill:rgb(0,0,0)"/>
+<path d="M321,160L338,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M359,176L390,176A15 15 0 0 0 405 160A15 15 0 0 0 390 145L359,145A15 15 0 0 0 344 160A15 15 0 0 0 359 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<path d="M135,213L189,213A15 15 0 0 0 204 198A15 15 0 0 0 189 183L135,183A15 15 0 0 0 120 198A15 15 0 0 0 135 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="162" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="120,198 109,203 109,194" style="fill:rgb(0,0,0)"/>
+<path d="M84,160 L 92,160 Q 99,160 99,175 L 99,183 Q 99,198 107,198 L 114,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M204,198 L 212,198 Q 219,198 219,183 L 219,175 Q 219,160 227,160 L 234,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,213L306,213A15 15 0 0 0 321 198A15 15 0 0 0 306 183L290,183A15 15 0 0 0 275 198A15 15 0 0 0 290 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="344,198 332,203 332,194" style="fill:rgb(0,0,0)"/>
+<path d="M321,198L338,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M359,213L424,213A15 15 0 0 0 440 198A15 15 0 0 0 424 183L359,183A15 15 0 0 0 344 198A15 15 0 0 0 359 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="392" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="463,198 451,203 451,194" style="fill:rgb(0,0,0)"/>
+<path d="M440,198L457,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,198 L 470,198 Q 478,198 478,191 L 478,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,251L357,251A15 15 0 0 0 372 236A15 15 0 0 0 357 221L290,221A15 15 0 0 0 275 236A15 15 0 0 0 290 251Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="324" y="236" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASCADE</text>
+<polygon points="463,236 451,240 451,232" style="fill:rgb(0,0,0)"/>
+<path d="M372,236L457,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,236 L 470,236 Q 478,236 478,229 L 478,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,289L361,289A15 15 0 0 0 376 274A15 15 0 0 0 361 259L290,259A15 15 0 0 0 275 274A15 15 0 0 0 290 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RESTRICT</text>
+<polygon points="463,274 451,278 451,270" style="fill:rgb(0,0,0)"/>
+<path d="M376,274L457,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,274 L 470,274 Q 478,274 478,266 L 478,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,327L299,327A15 15 0 0 0 314 312A15 15 0 0 0 299 297L290,297A15 15 0 0 0 275 312A15 15 0 0 0 290 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="295" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="337,312 326,316 326,307" style="fill:rgb(0,0,0)"/>
+<path d="M314,312L332,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M353,327L404,327A15 15 0 0 0 419 312A15 15 0 0 0 404 297L353,297A15 15 0 0 0 337 312A15 15 0 0 0 353 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="378" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ACTION</text>
+<polygon points="463,312 451,316 451,307" style="fill:rgb(0,0,0)"/>
+<path d="M419,312L457,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,312 L 470,312 Q 478,312 478,304 L 478,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357L108,357A15 15 0 0 0 123 342L123,342A15 15 0 0 0 108 327L60,327A15 15 0 0 0 45 342L45,342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="84" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<polygon points="146,342 135,346 135,338" style="fill:rgb(0,0,0)"/>
+<path d="M123,342L140,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M161,357L188,357A15 15 0 0 0 203 342L203,342A15 15 0 0 0 188 327L161,327A15 15 0 0 0 146 342L146,342A15 15 0 0 0 161 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="175" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="463,342 451,346 451,338" style="fill:rgb(0,0,0)"/>
+<path d="M203,342L457,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,115 453,111 453,119" style="fill:rgb(0,0,0)"/>
+<path d="M463,342 L 470,342 Q 478,342 478,327 L 478,130 Q 478,115 463,115 L 462,115 L 447,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="463,160 451,165 451,156" style="fill:rgb(0,0,0)"/>
+<path d="M405,160L457,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,160 L 470,160 Q 478,160 478,153 L 478,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,312 264,316 264,307" style="fill:rgb(0,0,0)"/>
+<path d="M237,160 L 245,160 Q 252,160 252,175 L 252,297 Q 252,312 261,312 L 269,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,274 264,278 264,270" style="fill:rgb(0,0,0)"/>
+<path d="M252,259 L 252,266 Q 252,274 261,274 L 269,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,236 264,240 264,232" style="fill:rgb(0,0,0)"/>
+<path d="M252,221 L 252,228 Q 252,236 261,236 L 269,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,198 264,203 264,194" style="fill:rgb(0,0,0)"/>
+<path d="M252,183 L 252,191 Q 252,198 261,198 L 269,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,160 33,165 33,156" style="fill:rgb(0,0,0)"/>
+<path d="M614,55 L 623,55 Q 632,55 632,70 L 632,100 Q 632,115 617,115 L 20,115 Q 5,115 5,130 L 5,145 Q 5,160 20,160 L 24,160 L 39,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M5,145 L 5,327 Q 5,342 20,342 L 24,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="337,91 332,79 341,79" style="fill:rgb(0,0,0)"/>
+<path d="M322,55 L 329,55 Q 337,55 337,70 L 337,70 L 337,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M337,91 L 337,103 Q 337,115 329,115 L 322,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,433L80,433A15 15 0 0 0 95 417A15 15 0 0 0 80 402L60,402A15 15 0 0 0 45 417A15 15 0 0 0 60 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="133,387 122,392 122,383" style="fill:rgb(0,0,0)"/>
+<path d="M95,417 L 103,417 Q 110,417 110,402 L 110,402 Q 110,387 119,387 L 127,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M148,402L250,402A15 15 0 0 0 265 387A15 15 0 0 0 250 372L148,372A15 15 0 0 0 133 387A15 15 0 0 0 148 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="387" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRABLE</text>
+<polygon points="303,417 292,422 292,413" style="fill:rgb(0,0,0)"/>
+<path d="M265,387 L 273,387 Q 280,387 280,402 L 280,402 Q 280,417 289,417 L 297,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M318,433L389,433A15 15 0 0 0 405 417A15 15 0 0 0 389 402L318,402A15 15 0 0 0 303 417A15 15 0 0 0 318 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INITIALLY</text>
+<polygon points="428,417 416,422 416,413" style="fill:rgb(0,0,0)"/>
+<path d="M405,417L422,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M443,433L523,433A15 15 0 0 0 538 417A15 15 0 0 0 523 402L443,402A15 15 0 0 0 428 417A15 15 0 0 0 443 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRED</text>
+<path d="M318,470L389,470A15 15 0 0 0 405 455A15 15 0 0 0 389 440L318,440A15 15 0 0 0 303 455A15 15 0 0 0 318 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INITIALLY</text>
+<polygon points="428,455 416,460 416,451" style="fill:rgb(0,0,0)"/>
+<path d="M405,455L422,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M443,470L531,470A15 15 0 0 0 546 455A15 15 0 0 0 531 440L443,440A15 15 0 0 0 428 455A15 15 0 0 0 443 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="487" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IMMEDIATE</text>
+<polygon points="569,455 558,460 558,451" style="fill:rgb(0,0,0)"/>
+<path d="M546,455L564,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="569,417 558,422 558,413" style="fill:rgb(0,0,0)"/>
+<path d="M538,417L564,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="569,387 558,392 558,383" style="fill:rgb(0,0,0)"/>
+<path d="M265,387L564,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="303,455 292,460 292,451" style="fill:rgb(0,0,0)"/>
+<path d="M265,387 L 273,387 Q 280,387 280,402 L 280,440 Q 280,455 289,455 L 297,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="638,486 627,490 627,481" style="fill:rgb(0,0,0)"/>
+<path d="M569,387 L 577,387 Q 584,387 584,402 L 584,471 Q 584,486 599,486 L 618,486 L 633,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="642" cy="486" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,455 L 577,455 Q 584,455 584,463 L 584,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,417 L 577,417 Q 584,417 584,425 L 584,432" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M5,327 L 5,471 Q 5,486 20,486 L 612,486 L 627,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M5,372 L 5,380 Q 5,387 20,387 L 118,387 L 133,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M5,402 L 5,410 Q 5,417 20,417 L 24,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./column-constraint.html'>column-constraint</a>&nbsp;&nbsp; <a href='./table-constraint.html'>table-constraint</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>
+</div>
+
+
+
diff --git a/www/syntax/frame-spec.html b/www/syntax/frame-spec.html
new file mode 100644
index 0000000..5fed878
--- /dev/null
+++ b/www/syntax/frame-spec.html
@@ -0,0 +1,333 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: frame-spec</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>frame-spec</h1>
+<div class='imgcontainer'>
+<div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./over-clause.html'>over-clause</a>&nbsp;&nbsp; <a href='./window-defn.html'>window-defn</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/indexed-column.html b/www/syntax/indexed-column.html
new file mode 100644
index 0000000..0878485
--- /dev/null
+++ b/www/syntax/indexed-column.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: indexed-column</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>indexed-column</h1>
+<div class='imgcontainer'>
+<div style="max-width:696px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 696.36 102.6">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="246,47 235,51 235,43" style="fill:rgb(0,0,0)"/>
+<path d="M175,17 L 205,17 Q 220,17 220,32 L 220,32 Q 220,47 230,47 L 240,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,62L325,62A15 15 0 0 0 341 47L341,47A15 15 0 0 0 325 32L261,32A15 15 0 0 0 246 47L246,47A15 15 0 0 0 261 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="293" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="358,47 346,51 346,43" style="fill:rgb(0,0,0)"/>
+<path d="M341,47L352,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,62L478,62A15 15 0 0 0 493 47L493,47A15 15 0 0 0 478 32L373,32A15 15 0 0 0 358 47L358,47A15 15 0 0 0 373 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="511,47 499,51 499,43" style="fill:rgb(0,0,0)"/>
+<path d="M493,47L505,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,85 556,89 556,81" style="fill:rgb(0,0,0)"/>
+<path d="M511,47 L 518,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 Q 541,17 541,32 L 541,70 Q 541,85 551,85 L 561,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,100L613,100A15 15 0 0 0 628 85L628,85A15 15 0 0 0 613 70L582,70A15 15 0 0 0 567 85L567,85A15 15 0 0 0 582 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="645,85 633,89 633,81" style="fill:rgb(0,0,0)"/>
+<path d="M628,85L639,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="687,17 675,21 675,12" style="fill:rgb(0,0,0)"/>
+<path d="M645,85 L 652,85 Q 660,85 660,70 L 660,32 Q 660,17 670,17 L 681,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="690" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,70L100,70L100,39L50,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="175,55 163,59 163,50" style="fill:rgb(0,0,0)"/>
+<path d="M100,55L169,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M175,55 L 182,55 Q 190,55 190,40 L 190,32 Q 190,17 197,17 L 205,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,17 586,21 586,12" style="fill:rgb(0,0,0)"/>
+<path d="M358,17L592,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,17L675,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,62L599,62A15 15 0 0 0 614 47A15 15 0 0 0 599 32L582,32A15 15 0 0 0 567 47A15 15 0 0 0 582 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="645,47 633,51 633,43" style="fill:rgb(0,0,0)"/>
+<path d="M614,47L639,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M645,47 L 652,47 Q 660,47 660,40 L 660,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,47 556,51 556,43" style="fill:rgb(0,0,0)"/>
+<path d="M541,32 L 541,39 Q 541,47 551,47 L 561,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./create-index-stmt.html'>create-index-stmt</a>&nbsp;&nbsp; <a href='./table-constraint.html'>table-constraint</a>&nbsp;&nbsp; <a href='./upsert-clause.html'>upsert-clause</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/insert-stmt.html b/www/syntax/insert-stmt.html
new file mode 100644
index 0000000..e5404ed
--- /dev/null
+++ b/www/syntax/insert-stmt.html
@@ -0,0 +1,333 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: insert-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>insert-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:601px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 601.066 922.104">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,145L124,145A15 15 0 0 0 139 130A15 15 0 0 0 124 115L60,115A15 15 0 0 0 45 130A15 15 0 0 0 60 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<path d="M60,183L109,183A15 15 0 0 0 124 168A15 15 0 0 0 109 153L60,153A15 15 0 0 0 45 168A15 15 0 0 0 60 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="84" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INSERT</text>
+<polygon points="166,198 154,203 154,194" style="fill:rgb(0,0,0)"/>
+<path d="M124,168 L 132,168 Q 139,168 139,183 L 139,183 Q 139,198 149,198 L 160,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M181,213L187,213A15 15 0 0 0 203 198A15 15 0 0 0 187 183L181,183A15 15 0 0 0 166 198A15 15 0 0 0 181 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="244,349 233,354 233,345" style="fill:rgb(0,0,0)"/>
+<path d="M203,198 L 210,198 Q 218,198 218,213 L 218,334 Q 218,349 228,349 L 238,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,365L337,365A15 15 0 0 0 352 349A15 15 0 0 0 337 334L259,334A15 15 0 0 0 244 349A15 15 0 0 0 259 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="369,349 358,354 358,345" style="fill:rgb(0,0,0)"/>
+<path d="M352,349L363,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,130 399,135 399,126" style="fill:rgb(0,0,0)"/>
+<path d="M369,349 L 377,349 Q 384,349 384,334 L 384,145 Q 384,130 395,130 L 405,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M426,145L453,145A15 15 0 0 0 468 130A15 15 0 0 0 453 115L426,115A15 15 0 0 0 411 130A15 15 0 0 0 426 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTO</text>
+<polygon points="45,168 33,172 33,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,153 Q 24,168 31,168 L 39,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,130 33,135 33,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 31,130 L 39,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M139,130L399,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,168 358,172 358,164" style="fill:rgb(0,0,0)"/>
+<path d="M124,168L363,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,168 L 377,168 Q 384,168 384,160 L 384,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,213L301,213A15 15 0 0 0 316 198A15 15 0 0 0 301 183L259,183A15 15 0 0 0 244 198A15 15 0 0 0 259 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="244,198 233,203 233,194" style="fill:rgb(0,0,0)"/>
+<path d="M203,198L238,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,198 358,203 358,194" style="fill:rgb(0,0,0)"/>
+<path d="M316,198L363,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,198 L 377,198 Q 384,198 384,191 L 384,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,251L281,251A15 15 0 0 0 296 236A15 15 0 0 0 281 221L259,221A15 15 0 0 0 244 236A15 15 0 0 0 259 251Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="270" y="236" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="244,236 233,240 233,232" style="fill:rgb(0,0,0)"/>
+<path d="M218,221 L 218,228 Q 218,236 228,236 L 238,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,236 358,240 358,232" style="fill:rgb(0,0,0)"/>
+<path d="M296,236L363,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,236 L 377,236 Q 384,236 384,229 L 384,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,289L311,289A15 15 0 0 0 327 274A15 15 0 0 0 311 259L259,259A15 15 0 0 0 244 274A15 15 0 0 0 259 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="285" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="244,274 233,278 233,270" style="fill:rgb(0,0,0)"/>
+<path d="M218,259 L 218,266 Q 218,274 228,274 L 238,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,274 358,278 358,270" style="fill:rgb(0,0,0)"/>
+<path d="M327,274L363,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,274 L 377,274 Q 384,274 384,266 L 384,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,327L323,327A15 15 0 0 0 338 312A15 15 0 0 0 323 297L259,297A15 15 0 0 0 244 312A15 15 0 0 0 259 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="291" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="244,312 233,316 233,307" style="fill:rgb(0,0,0)"/>
+<path d="M218,297 L 218,304 Q 218,312 228,312 L 238,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,312 358,316 358,307" style="fill:rgb(0,0,0)"/>
+<path d="M338,312L363,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,312 L 377,312 Q 384,312 384,304 L 384,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,455L156,455A15 15 0 0 0 171 440A15 15 0 0 0 156 425L60,425A15 15 0 0 0 45 440A15 15 0 0 0 60 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,440 183,444 183,436" style="fill:rgb(0,0,0)"/>
+<path d="M171,440L189,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,455A15 15 0 0 0 225 440A15 15 0 0 0 210 425A15 15 0 0 0 195 440A15 15 0 0 0 210 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="440" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,440 249,444 249,436" style="fill:rgb(0,0,0)"/>
+<path d="M225,440L255,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,455L351,455A15 15 0 0 0 366 440A15 15 0 0 0 351 425L276,425A15 15 0 0 0 261 440A15 15 0 0 0 276 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="402,440 391,444 391,436" style="fill:rgb(0,0,0)"/>
+<path d="M366,440L396,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,455L421,455A15 15 0 0 0 436 440A15 15 0 0 0 421 425L417,425A15 15 0 0 0 402 440A15 15 0 0 0 417 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="419" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="459,440 448,444 448,436" style="fill:rgb(0,0,0)"/>
+<path d="M436,440L454,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,455L495,455A15 15 0 0 0 510 440A15 15 0 0 0 495 425L475,425A15 15 0 0 0 459 440A15 15 0 0 0 475 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="485" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="483,238 478,227 487,227" style="fill:rgb(0,0,0)"/>
+<path d="M468,130 L 475,130 Q 483,130 483,145 L 483,217 L 483,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,395 183,390 183,399" style="fill:rgb(0,0,0)"/>
+<path d="M483,238 L 483,380 Q 483,395 468,395 L 192,395 L 177,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,440 33,444 33,436" style="fill:rgb(0,0,0)"/>
+<path d="M171,395 L 35,395 Q 20,395 20,410 L 20,425 Q 20,440 30,440 L 39,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,423 230,412 239,412" style="fill:rgb(0,0,0)"/>
+<path d="M261,395 L 247,395 Q 234,395 234,406 L 234,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,423 L 234,432 Q 234,440 242,440 L 249,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,546A15 15 0 0 0 75 531A15 15 0 0 0 60 516A15 15 0 0 0 45 531A15 15 0 0 0 60 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="531" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,531 100,535 100,527" style="fill:rgb(0,0,0)"/>
+<path d="M75,531L105,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,546L220,546A15 15 0 0 0 235 531A15 15 0 0 0 220 516L126,516A15 15 0 0 0 111 531A15 15 0 0 0 126 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="271,531 260,535 260,527" style="fill:rgb(0,0,0)"/>
+<path d="M235,531L266,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,546A15 15 0 0 0 302 531A15 15 0 0 0 287 516A15 15 0 0 0 271 531A15 15 0 0 0 287 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="287" y="531" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M173,580A15 15 0 0 0 188 565A15 15 0 0 0 173 550A15 15 0 0 0 158 565A15 15 0 0 0 173 580Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="565" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="188,565 200,561 200,569" style="fill:rgb(0,0,0)"/>
+<path d="M235,531 L 243,531 Q 250,531 250,546 L 250,550 Q 250,565 235,565 L 209,565 L 194,565" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,565 L 100,565 Q 85,565 85,550 L 85,546 Q 85,531 92,531 L 100,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="173,595 185,591 185,599" style="fill:rgb(0,0,0)"/>
+<path d="M302,531 L 309,531 Q 317,531 317,546 L 317,580 Q 317,595 302,595 L 194,595 L 179,595" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M173,595 L 39,595 Q 24,595 24,603 L 24,610" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="436,486 448,481 448,490" style="fill:rgb(0,0,0)"/>
+<path d="M510,440 L 518,440 Q 525,440 525,455 L 525,471 Q 525,486 510,486 L 457,486 L 442,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,531 33,535 33,527" style="fill:rgb(0,0,0)"/>
+<path d="M436,486 L 39,486 Q 24,486 24,501 L 24,516 Q 24,531 31,531 L 39,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,469 377,457 385,457" style="fill:rgb(0,0,0)"/>
+<path d="M366,440 L 374,440 Q 381,440 381,451 L 381,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M381,469 L 381,477 Q 381,486 374,486 L 366,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,671L112,671A15 15 0 0 0 127 656A15 15 0 0 0 112 640L60,640A15 15 0 0 0 45 656A15 15 0 0 0 60 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="656" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="163,656 152,660 152,651" style="fill:rgb(0,0,0)"/>
+<path d="M127,656L158,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,671A15 15 0 0 0 194 656A15 15 0 0 0 179 640A15 15 0 0 0 163 656A15 15 0 0 0 179 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="656" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="230,656 218,660 218,651" style="fill:rgb(0,0,0)"/>
+<path d="M194,656L224,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M230,671L279,671L279,640L230,640Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="656" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="315,656 303,660 303,651" style="fill:rgb(0,0,0)"/>
+<path d="M279,656L309,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,671A15 15 0 0 0 345 656A15 15 0 0 0 330 640A15 15 0 0 0 315 656A15 15 0 0 0 330 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="330" y="656" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="45,656 33,660 33,651" style="fill:rgb(0,0,0)"/>
+<path d="M24,516 L 24,641 Q 24,656 31,656 L 39,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,705A15 15 0 0 0 269 690A15 15 0 0 0 254 675A15 15 0 0 0 239 690A15 15 0 0 0 254 705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="690" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="269,690 281,685 281,694" style="fill:rgb(0,0,0)"/>
+<path d="M279,656 L 286,656 Q 294,656 294,671 L 294,675 Q 294,690 285,690 L 275,690" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,690 L 218,690 Q 203,690 203,675 L 203,671 Q 203,656 211,656 L 218,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,743A15 15 0 0 0 269 727A15 15 0 0 0 254 712A15 15 0 0 0 239 727A15 15 0 0 0 254 743Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="727" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="269,727 281,723 281,732" style="fill:rgb(0,0,0)"/>
+<path d="M345,656 L 353,656 Q 360,656 360,671 L 360,712 Q 360,727 345,727 L 290,727 L 275,727" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,727 L 152,727 Q 137,727 137,712 L 137,671 Q 137,656 144,656 L 152,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="387,693 375,698 375,689" style="fill:rgb(0,0,0)"/>
+<path d="M345,656 L 353,656 Q 360,656 360,671 L 360,678 Q 360,693 371,693 L 381,693" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,709L512,709L512,678L387,678Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="449" y="693" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">upsert-clause</text>
+<polygon points="535,693 523,698 523,689" style="fill:rgb(0,0,0)"/>
+<path d="M512,693L529,693" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,693 L 542,693 Q 550,693 550,701 L 550,708" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="535,656 523,660 523,651" style="fill:rgb(0,0,0)"/>
+<path d="M345,656L529,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,788L149,788L149,758L45,758Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="97" y="773" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="535,773 523,777 523,768" style="fill:rgb(0,0,0)"/>
+<path d="M149,773L529,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,773 L 542,773 Q 550,773 550,780 L 550,788" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,773 33,777 33,768" style="fill:rgb(0,0,0)"/>
+<path d="M24,640 L 24,758 Q 24,773 31,773 L 39,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,818L512,818L512,788L387,788Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="449" y="803" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">upsert-clause</text>
+<polygon points="535,803 523,807 523,799" style="fill:rgb(0,0,0)"/>
+<path d="M512,803L529,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,803 L 542,803 Q 550,803 550,811 L 550,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="387,803 375,807 375,799" style="fill:rgb(0,0,0)"/>
+<path d="M345,773 L 353,773 Q 360,773 360,788 L 360,788 Q 360,803 371,803 L 381,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,856L125,856A15 15 0 0 0 140 841A15 15 0 0 0 125 826L60,826A15 15 0 0 0 45 841A15 15 0 0 0 60 856Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="841" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="164,841 152,845 152,837" style="fill:rgb(0,0,0)"/>
+<path d="M140,841L158,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,856L231,856A15 15 0 0 0 246 841A15 15 0 0 0 231 826L179,826A15 15 0 0 0 164 841A15 15 0 0 0 179 856Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="205" y="841" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="535,841 523,845 523,837" style="fill:rgb(0,0,0)"/>
+<path d="M246,841L529,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,841 33,845 33,837" style="fill:rgb(0,0,0)"/>
+<path d="M24,758 L 24,826 Q 24,841 31,841 L 39,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M361,919L512,919L512,889L361,889Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="436" y="904" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="591,904 580,909 580,900" style="fill:rgb(0,0,0)"/>
+<path d="M512,904L585,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="595" cy="904" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,656 L 542,656 Q 550,656 550,671 L 550,889 Q 550,904 557,904 L 565,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="436,871 448,867 448,875" style="fill:rgb(0,0,0)"/>
+<path d="M535,841 L 542,841 Q 550,841 550,856 L 550,856 Q 550,871 535,871 L 457,871 L 442,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="361,904 349,909 349,900" style="fill:rgb(0,0,0)"/>
+<path d="M436,871 L 349,871 Q 334,871 334,886 L 334,889 Q 334,904 345,904 L 355,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./create-trigger-stmt.html'>create-trigger-stmt</a>&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./common-table-expression.html'>common-table-expression</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./returning-clause.html'>returning-clause</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./upsert-clause.html'>upsert-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>
+</div>
+
+
+
diff --git a/www/syntax/join-clause.html b/www/syntax/join-clause.html
new file mode 100644
index 0000000..c5ad70e
--- /dev/null
+++ b/www/syntax/join-clause.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: join-clause</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>join-clause</h1>
+<div class='imgcontainer'>
+<div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./select-core.html'>select-core</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./table-or-subquery.html'>table-or-subquery</a>&nbsp;&nbsp; <a href='./update-stmt.html'>update-stmt</a>&nbsp;&nbsp; <a href='./update-stmt-limited.html'>update-stmt-limited</a><br></br>
+References:&nbsp;&nbsp; <a href='./join-constraint.html'>join-constraint</a>&nbsp;&nbsp; <a href='./join-operator.html'>join-operator</a>&nbsp;&nbsp; <a href='./table-or-subquery.html'>table-or-subquery</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/join-constraint.html b/www/syntax/join-constraint.html
new file mode 100644
index 0000000..f0b6bb4
--- /dev/null
+++ b/www/syntax/join-constraint.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: join-constraint</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>join-constraint</h1>
+<div class='imgcontainer'>
+<div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./join-clause.html'>join-clause</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/join-operator.html b/www/syntax/join-operator.html
new file mode 100644
index 0000000..9b79df1
--- /dev/null
+++ b/www/syntax/join-operator.html
@@ -0,0 +1,189 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: join-operator</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>join-operator</h1>
+<div class='imgcontainer'>
+<div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./join-clause.html'>join-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/literal-value.html b/www/syntax/literal-value.html
new file mode 100644
index 0000000..4859e0e
--- /dev/null
+++ b/www/syntax/literal-value.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: literal-value</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>literal-value</h1>
+<div class='imgcontainer'>
+<div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./column-constraint.html'>column-constraint</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/numeric-literal.html b/www/syntax/numeric-literal.html
new file mode 100644
index 0000000..10e389b
--- /dev/null
+++ b/www/syntax/numeric-literal.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: numeric-literal</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>numeric-literal</h1>
+<div class='imgcontainer'>
+<div style="max-width:765px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 765.562 214.056">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,36 51,41 51,32" style="fill:rgb(0,0,0)"/>
+<path d="M9,36L57,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,51L98,51A15 15 0 0 0 113 36A15 15 0 0 0 98 21L78,21A15 15 0 0 0 63 36A15 15 0 0 0 78 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="88" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="88,6 99,2 99,10" style="fill:rgb(0,0,0)"/>
+<path d="M113,36 L 121,36 Q 128,36 128,21 L 128,21 Q 128,6 113,6 L 109,6 L 94,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M88,6 L 51,6 Q 36,6 36,21 L 36,21 Q 36,36 44,36 L 51,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="176,66 164,71 164,62" style="fill:rgb(0,0,0)"/>
+<path d="M113,36 L 134,36 Q 149,36 149,51 L 149,51 Q 149,66 159,66 L 170,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,82A15 15 0 0 0 206 66L206,66A15 15 0 0 0 191 51A15 15 0 0 0 176 66L176,66A15 15 0 0 0 191 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="267,66 255,71 255,62" style="fill:rgb(0,0,0)"/>
+<path d="M206,66L261,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,66 328,71 328,62" style="fill:rgb(0,0,0)"/>
+<path d="M267,66L334,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,36 370,41 370,32" style="fill:rgb(0,0,0)"/>
+<path d="M340,66 L 347,66 Q 355,66 355,51 L 355,51 Q 355,36 365,36 L 375,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,74 411,78 411,70" style="fill:rgb(0,0,0)"/>
+<path d="M381,36 L 389,36 Q 396,36 396,51 L 396,59 Q 396,74 406,74 L 417,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,89A15 15 0 0 0 453 74L453,74A15 15 0 0 0 438 59A15 15 0 0 0 423 74L423,74A15 15 0 0 0 438 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">E</text>
+<polygon points="494,74 483,78 483,70" style="fill:rgb(0,0,0)"/>
+<path d="M453,74L489,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,112 411,116 411,108" style="fill:rgb(0,0,0)"/>
+<path d="M381,36 L 389,36 Q 396,36 396,51 L 396,97 Q 396,112 406,112 L 417,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,127A15 15 0 0 0 453 112A15 15 0 0 0 438 97A15 15 0 0 0 423 112A15 15 0 0 0 438 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="112" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">e</text>
+<path d="M453,112 L 460,112 Q 468,112 468,97 L 468,89 Q 468,74 475,74 L 483,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,112L277,112A15 15 0 0 0 292 97L292,97A15 15 0 0 0 277 82L257,82A15 15 0 0 0 242 97L242,97A15 15 0 0 0 257 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="97" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="292,97 304,92 304,101" style="fill:rgb(0,0,0)"/>
+<path d="M267,66 L 304,66 Q 319,66 319,81 L 319,82 Q 319,97 308,97 L 298,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M242,97 L 234,97 Q 227,97 227,82 L 227,81 Q 227,66 234,66 L 242,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M113,36L261,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,36L370,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,135 39,139 39,130" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,120 Q 24,135 34,135 L 45,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150A15 15 0 0 0 81 135A15 15 0 0 0 66 119A15 15 0 0 0 50 135A15 15 0 0 0 66 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="135" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="117,135 105,139 105,130" style="fill:rgb(0,0,0)"/>
+<path d="M81,135L111,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,150L152,150A15 15 0 0 0 167 135A15 15 0 0 0 152 119L132,119A15 15 0 0 0 117 135A15 15 0 0 0 132 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="142" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="340,135 328,139 328,130" style="fill:rgb(0,0,0)"/>
+<path d="M167,135L334,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,135 L 347,135 Q 355,135 355,120 L 355,66 L 355,51" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="142,104 153,100 153,109" style="fill:rgb(0,0,0)"/>
+<path d="M167,135 L 174,135 Q 182,135 182,120 L 182,119 Q 182,104 167,104 L 162,104 L 147,104" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,104 L 105,104 Q 90,104 90,119 L 90,120 Q 90,135 98,135 L 105,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="536,142 524,146 524,138" style="fill:rgb(0,0,0)"/>
+<path d="M494,74 L 502,74 Q 509,74 509,89 L 509,127 Q 509,142 520,142 L 530,142" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,157A15 15 0 0 0 566 142A15 15 0 0 0 551 127A15 15 0 0 0 536 142A15 15 0 0 0 551 157Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="551" y="142" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<polygon points="628,74 616,78 616,70" style="fill:rgb(0,0,0)"/>
+<path d="M566,142 L 574,142 Q 581,142 581,127 L 581,89 Q 581,74 596,74 L 607,74 L 622,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M643,89L663,89A15 15 0 0 0 678 74L678,74A15 15 0 0 0 663 59L643,59A15 15 0 0 0 628 74L628,74A15 15 0 0 0 643 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="653" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="714,74 703,78 703,70" style="fill:rgb(0,0,0)"/>
+<path d="M678,74L708,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="756,36 744,41 744,32" style="fill:rgb(0,0,0)"/>
+<path d="M714,74 L 722,74 Q 729,74 729,59 L 729,51 Q 729,36 740,36 L 750,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="759" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="536,104 524,109 524,100" style="fill:rgb(0,0,0)"/>
+<path d="M494,74 L 502,74 Q 509,74 509,89 L 509,89 Q 509,104 520,104 L 530,104" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,119A15 15 0 0 0 566 104A15 15 0 0 0 551 89A15 15 0 0 0 536 104A15 15 0 0 0 551 119Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="551" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<path d="M566,104 L 574,104 Q 581,104 581,97 L 581,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="551,36 540,41 540,32" style="fill:rgb(0,0,0)"/>
+<path d="M381,36L545,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,36L744,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="551,74 540,78 540,70" style="fill:rgb(0,0,0)"/>
+<path d="M494,74L545,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,74L616,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="653,50 665,46 665,54" style="fill:rgb(0,0,0)"/>
+<path d="M678,74 L 686,74 Q 693,74 693,62 Q 693,50 678,50 L 674,50 L 659,50" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M653,50 L 616,50 Q 601,50 601,62 Q 601,74 609,74 L 616,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,180 39,184 39,176" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,165 Q 24,180 34,180 L 45,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,195L69,195A15 15 0 0 0 84 180A15 15 0 0 0 69 165L66,165A15 15 0 0 0 50 180A15 15 0 0 0 66 195Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="67" y="180" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">0x</text>
+<polygon points="120,180 108,184 108,176" style="fill:rgb(0,0,0)"/>
+<path d="M84,180L114,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,195L185,195A15 15 0 0 0 200 180A15 15 0 0 0 185 165L135,165A15 15 0 0 0 120 180A15 15 0 0 0 135 195Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="160" y="180" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">hexdigit</text>
+<polygon points="714,180 703,184 703,176" style="fill:rgb(0,0,0)"/>
+<path d="M200,180L708,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M714,180 L 722,180 Q 729,180 729,165 L 729,74 L 729,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="160,207 171,203 171,211" style="fill:rgb(0,0,0)"/>
+<path d="M200,180 L 207,180 Q 215,180 215,193 Q 215,207 200,207 L 180,207 L 165,207" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M160,207 L 108,207 Q 93,207 93,193 Q 93,180 101,180 L 108,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+See also:&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>
+</div>
+
+
+
diff --git a/www/syntax/ordering-term.html b/www/syntax/ordering-term.html
new file mode 100644
index 0000000..e43ce59
--- /dev/null
+++ b/www/syntax/ordering-term.html
@@ -0,0 +1,184 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: ordering-term</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>ordering-term</h1>
+<div class='imgcontainer'>
+<div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./compound-select-stmt.html'>compound-select-stmt</a>&nbsp;&nbsp; <a href='./delete-stmt-limited.html'>delete-stmt-limited</a>&nbsp;&nbsp; <a href='./factored-select-stmt.html'>factored-select-stmt</a>&nbsp;&nbsp; <a href='./over-clause.html'>over-clause</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./simple-select-stmt.html'>simple-select-stmt</a>&nbsp;&nbsp; <a href='./update-stmt-limited.html'>update-stmt-limited</a>&nbsp;&nbsp; <a href='./window-defn.html'>window-defn</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/over-clause.html b/www/syntax/over-clause.html
new file mode 100644
index 0000000..2ca2174
--- /dev/null
+++ b/www/syntax/over-clause.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: over-clause</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>over-clause</h1>
+<div class='imgcontainer'>
+<div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./frame-spec.html'>frame-spec</a>&nbsp;&nbsp; <a href='./ordering-term.html'>ordering-term</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/pragma-stmt.html b/www/syntax/pragma-stmt.html
new file mode 100644
index 0000000..15a6454
--- /dev/null
+++ b/www/syntax/pragma-stmt.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: pragma-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>pragma-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:824px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 824.352 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L104,32A15 15 0 0 0 119 17A15 15 0 0 0 104 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRAGMA</text>
+<polygon points="155,17 143,21 143,12" style="fill:rgb(0,0,0)"/>
+<path d="M119,17L149,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M170,32L266,32A15 15 0 0 0 282 17A15 15 0 0 0 266 2L170,2A15 15 0 0 0 155 17A15 15 0 0 0 170 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="305,17 293,21 293,12" style="fill:rgb(0,0,0)"/>
+<path d="M282,17L299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,32A15 15 0 0 0 335 17A15 15 0 0 0 320 2A15 15 0 0 0 305 17A15 15 0 0 0 320 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="320" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="371,17 359,21 359,12" style="fill:rgb(0,0,0)"/>
+<path d="M335,17L365,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M386,32L483,32A15 15 0 0 0 498 17A15 15 0 0 0 483 2L386,2A15 15 0 0 0 371 17A15 15 0 0 0 386 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="435" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-name</text>
+<polygon points="540,82 528,86 528,77" style="fill:rgb(0,0,0)"/>
+<path d="M498,17 L 506,17 Q 513,17 513,32 L 513,67 Q 513,82 524,82 L 534,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M555,97A15 15 0 0 0 570 82A15 15 0 0 0 555 67A15 15 0 0 0 540 82A15 15 0 0 0 555 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="555" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="593,82 582,86 582,77" style="fill:rgb(0,0,0)"/>
+<path d="M570,82L587,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M593,97L720,97L720,67L593,67Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="656" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-value</text>
+<polygon points="743,82 731,86 731,77" style="fill:rgb(0,0,0)"/>
+<path d="M720,82L737,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M758,97A15 15 0 0 0 773 82A15 15 0 0 0 758 67A15 15 0 0 0 743 82A15 15 0 0 0 758 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="758" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="814,17 803,21 803,12" style="fill:rgb(0,0,0)"/>
+<path d="M773,82 L 780,82 Q 788,82 788,67 L 788,32 Q 788,17 798,17 L 809,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="818" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="540,44 528,48 528,40" style="fill:rgb(0,0,0)"/>
+<path d="M498,17 L 506,17 Q 513,17 513,30 Q 513,44 524,44 L 534,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M555,59A15 15 0 0 0 570 44L570,44A15 15 0 0 0 555 29A15 15 0 0 0 540 44L540,44A15 15 0 0 0 555 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="555" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="593,44 582,48 582,40" style="fill:rgb(0,0,0)"/>
+<path d="M570,44L587,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M593,59L720,59L720,29L593,29Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="656" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-value</text>
+<polygon points="773,44 761,48 761,40" style="fill:rgb(0,0,0)"/>
+<path d="M720,44L767,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M773,44 L 780,44 Q 788,44 788,36 L 788,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="656,17 645,21 645,12" style="fill:rgb(0,0,0)"/>
+<path d="M498,17L651,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M656,17L803,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,44 207,48 207,40" style="fill:rgb(0,0,0)"/>
+<path d="M119,17 L 126,17 Q 134,17 134,30 Q 134,44 149,44 L 198,44 L 213,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M218,44 L 335,44 Q 350,44 350,30 Q 350,17 357,17 L 365,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./pragma-value.html'>pragma-value</a><br></br>
+See also:&nbsp;&nbsp; <a href='../pragma.html'>pragma.html</a>
+</div>
+
+
+
diff --git a/www/syntax/pragma-value.html b/www/syntax/pragma-value.html
new file mode 100644
index 0000000..30c5109
--- /dev/null
+++ b/www/syntax/pragma-value.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: pragma-value</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>pragma-value</h1>
+<div class='imgcontainer'>
+<div style="max-width:264px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 264.499 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,17 51,21 51,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L57,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,32L201,32L201,2L63,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="255,17 243,21 243,12" style="fill:rgb(0,0,0)"/>
+<path d="M201,17L249,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="258" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,70L105,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 105 39L78,39A15 15 0 0 0 63 55L63,55A15 15 0 0 0 78 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<path d="M78,108L171,108A15 15 0 0 0 186 92A15 15 0 0 0 171 77L78,77A15 15 0 0 0 63 92A15 15 0 0 0 78 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-literal</text>
+<polygon points="63,92 51,97 51,88" style="fill:rgb(0,0,0)"/>
+<path d="M21,17 L 29,17 Q 36,17 36,32 L 36,77 Q 36,92 47,92 L 57,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="201,92 189,97 189,88" style="fill:rgb(0,0,0)"/>
+<path d="M186,92L195,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,92 L 208,92 Q 216,92 216,77 L 216,32 Q 216,17 223,17 L 231,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="201,55 189,59 189,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L195,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,55 L 208,55 Q 216,55 216,47 L 216,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,55 51,59 51,50" style="fill:rgb(0,0,0)"/>
+<path d="M36,39 L 36,47 Q 36,55 47,55 L 57,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./pragma-stmt.html'>pragma-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./signed-number.html'>signed-number</a><br></br>
+See also:&nbsp;&nbsp; <a href='../pragma.html'>pragma.html</a>
+</div>
+
+
+
diff --git a/www/syntax/qualified-table-name.html b/www/syntax/qualified-table-name.html
new file mode 100644
index 0000000..bbc1a7f
--- /dev/null
+++ b/www/syntax/qualified-table-name.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: qualified-table-name</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>qualified-table-name</h1>
+<div class='imgcontainer'>
+<div style="max-width:599px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 599.746 182.736">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L156,32A15 15 0 0 0 171 17A15 15 0 0 0 156 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M171,17L189,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,32A15 15 0 0 0 225 17A15 15 0 0 0 210 2A15 15 0 0 0 195 17A15 15 0 0 0 210 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,17 249,21 249,12" style="fill:rgb(0,0,0)"/>
+<path d="M225,17L255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32L351,32A15 15 0 0 0 366 17A15 15 0 0 0 351 2L276,2A15 15 0 0 0 261 17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="408,44 396,48 396,40" style="fill:rgb(0,0,0)"/>
+<path d="M366,17 L 374,17 Q 381,17 381,30 Q 381,44 392,44 L 402,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,59L427,59A15 15 0 0 0 442 44L442,44A15 15 0 0 0 427 29L423,29A15 15 0 0 0 408 44L408,44A15 15 0 0 0 423 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="465,44 453,48 453,40" style="fill:rgb(0,0,0)"/>
+<path d="M442,44L459,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,59L501,59A15 15 0 0 0 516 44L516,44A15 15 0 0 0 501 29L480,29A15 15 0 0 0 465 44L465,44A15 15 0 0 0 480 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="539,44 527,48 527,40" style="fill:rgb(0,0,0)"/>
+<path d="M516,44L533,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,44 L 546,44 Q 554,44 554,51 L 554,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,17 442,21 442,12" style="fill:rgb(0,0,0)"/>
+<path d="M366,17L448,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,44 97,48 97,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 39,44 L 87,44 L 102,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M108,44 L 225,44 Q 240,44 240,30 Q 240,17 247,17 L 255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,142L301,142A15 15 0 0 0 316 127A15 15 0 0 0 301 112L236,112A15 15 0 0 0 221 127A15 15 0 0 0 236 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="339,127 327,131 327,123" style="fill:rgb(0,0,0)"/>
+<path d="M316,127L333,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,142L358,142A15 15 0 0 0 373 127A15 15 0 0 0 358 112L354,112A15 15 0 0 0 339 127A15 15 0 0 0 354 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="396,127 385,131 385,123" style="fill:rgb(0,0,0)"/>
+<path d="M373,127L390,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M411,142L490,142A15 15 0 0 0 505 127A15 15 0 0 0 490 112L411,112A15 15 0 0 0 396 127A15 15 0 0 0 411 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="451" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M236,180L256,180A15 15 0 0 0 271 165A15 15 0 0 0 256 150L236,150A15 15 0 0 0 221 165A15 15 0 0 0 236 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="294,165 283,169 283,161" style="fill:rgb(0,0,0)"/>
+<path d="M271,165L289,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,180L374,180A15 15 0 0 0 389 165A15 15 0 0 0 374 150L310,150A15 15 0 0 0 294 165A15 15 0 0 0 310 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="554,74 550,62 558,62" style="fill:rgb(0,0,0)"/>
+<path d="M453,17 L 539,17 Q 554,17 554,32 L 554,53 L 554,68" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 325,85 325,94" style="fill:rgb(0,0,0)"/>
+<path d="M554,74 L 554,82 Q 554,89 539,89 L 334,89 L 319,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,127 210,131 210,123" style="fill:rgb(0,0,0)"/>
+<path d="M313,89 L 210,89 Q 195,89 195,104 L 195,112 Q 195,127 205,127 L 215,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,165 210,169 210,161" style="fill:rgb(0,0,0)"/>
+<path d="M195,112 L 195,150 Q 195,165 205,165 L 215,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="554,114 550,102 558,102" style="fill:rgb(0,0,0)"/>
+<path d="M554,74L554,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="590,165 578,169 578,161" style="fill:rgb(0,0,0)"/>
+<path d="M554,114 L 554,150 Q 554,165 569,165 L 569,165 L 584,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="593" cy="165" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,127 527,131 527,123" style="fill:rgb(0,0,0)"/>
+<path d="M505,127L533,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,127 L 546,127 Q 554,127 554,135 L 554,142" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M389,165L578,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./delete-stmt.html'>delete-stmt</a>&nbsp;&nbsp; <a href='./delete-stmt-limited.html'>delete-stmt-limited</a>&nbsp;&nbsp; <a href='./update-stmt.html'>update-stmt</a>&nbsp;&nbsp; <a href='./update-stmt-limited.html'>update-stmt-limited</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_indexedby.html'>lang_indexedby.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>
+</div>
+
+
+
diff --git a/www/syntax/raise-function.html b/www/syntax/raise-function.html
new file mode 100644
index 0000000..c6d1b53
--- /dev/null
+++ b/www/syntax/raise-function.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: raise-function</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>raise-function</h1>
+<div class='imgcontainer'>
+<div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/recursive-cte.html b/www/syntax/recursive-cte.html
new file mode 100644
index 0000000..88f7b78
--- /dev/null
+++ b/www/syntax/recursive-cte.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: recursive-cte</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>recursive-cte</h1>
+<div class='imgcontainer'>
+<div style="max-width:874px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 874.291 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L169,32L169,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="100" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">cte-table-name</text>
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M169,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L211,32A15 15 0 0 0 226 17A15 15 0 0 0 211 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="249,17 237,21 237,12" style="fill:rgb(0,0,0)"/>
+<path d="M226,17L243,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M264,32A15 15 0 0 0 279 17A15 15 0 0 0 264 2A15 15 0 0 0 249 17A15 15 0 0 0 264 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="302,17 291,21 291,12" style="fill:rgb(0,0,0)"/>
+<path d="M279,17L296,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,32L403,32A15 15 0 0 0 418 17A15 15 0 0 0 403 2L317,2A15 15 0 0 0 302 17A15 15 0 0 0 317 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">initial-select</text>
+<polygon points="459,55 448,59 448,50" style="fill:rgb(0,0,0)"/>
+<path d="M418,17 L 425,17 Q 433,17 433,32 L 433,40 Q 433,55 443,55 L 454,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M474,70L518,70A15 15 0 0 0 533 55L533,55A15 15 0 0 0 518 39L474,39A15 15 0 0 0 459 55L459,55A15 15 0 0 0 474 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="496" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<polygon points="556,55 545,59 545,50" style="fill:rgb(0,0,0)"/>
+<path d="M533,55L550,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M571,70L586,70A15 15 0 0 0 601 55L601,55A15 15 0 0 0 586 39L571,39A15 15 0 0 0 556 55L556,55A15 15 0 0 0 571 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="643,17 631,21 631,12" style="fill:rgb(0,0,0)"/>
+<path d="M601,55 L 609,55 Q 616,55 616,40 L 616,32 Q 616,17 627,17 L 637,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M658,32L773,32A15 15 0 0 0 788 17A15 15 0 0 0 773 2L658,2A15 15 0 0 0 643 17A15 15 0 0 0 658 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="715" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">recursive-select</text>
+<polygon points="811,17 800,21 800,12" style="fill:rgb(0,0,0)"/>
+<path d="M788,17L805,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M826,32A15 15 0 0 0 841 17A15 15 0 0 0 826 2A15 15 0 0 0 811 17A15 15 0 0 0 826 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="826" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="864,17 853,21 853,12" style="fill:rgb(0,0,0)"/>
+<path d="M841,17L859,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="868" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="459,17 448,21 448,12" style="fill:rgb(0,0,0)"/>
+<path d="M418,17L454,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M474,32L518,32A15 15 0 0 0 533 17A15 15 0 0 0 518 2L474,2A15 15 0 0 0 459 17A15 15 0 0 0 474 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="496" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M533,17L631,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+References:&nbsp;&nbsp; <a href='./cte-table-name.html'>cte-table-name</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>
+</div>
+
+
+
diff --git a/www/syntax/reindex-stmt.html b/www/syntax/reindex-stmt.html
new file mode 100644
index 0000000..a168f35
--- /dev/null
+++ b/www/syntax/reindex-stmt.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: reindex-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>reindex-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:619px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 619.286 137.376">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L111,32A15 15 0 0 0 126 17A15 15 0 0 0 111 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="79" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REINDEX</text>
+<polygon points="167,82 156,86 156,77" style="fill:rgb(0,0,0)"/>
+<path d="M126,17 L 133,17 Q 141,17 141,32 L 141,67 Q 141,82 151,82 L 162,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,97L279,97A15 15 0 0 0 294 82A15 15 0 0 0 279 67L182,67A15 15 0 0 0 167 82A15 15 0 0 0 182 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="317,82 305,86 305,77" style="fill:rgb(0,0,0)"/>
+<path d="M294,82L311,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M332,97A15 15 0 0 0 347 82A15 15 0 0 0 332 67A15 15 0 0 0 317 82A15 15 0 0 0 332 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="383,82 372,86 372,77" style="fill:rgb(0,0,0)"/>
+<path d="M347,82L377,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="425,120 413,124 413,115" style="fill:rgb(0,0,0)"/>
+<path d="M383,82 L 391,82 Q 398,82 398,97 L 398,105 Q 398,120 409,120 L 419,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,135L518,135A15 15 0 0 0 533 120A15 15 0 0 0 518 104L440,104A15 15 0 0 0 425 120A15 15 0 0 0 440 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="479" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<polygon points="568,120 556,124 556,115" style="fill:rgb(0,0,0)"/>
+<path d="M533,120L562,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,17 598,21 598,12" style="fill:rgb(0,0,0)"/>
+<path d="M568,120 L 575,120 Q 583,120 583,105 L 583,32 Q 583,17 593,17 L 604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="613" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="425,82 413,86 413,77" style="fill:rgb(0,0,0)"/>
+<path d="M383,82L419,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,97L515,97A15 15 0 0 0 530 82A15 15 0 0 0 515 67L440,67A15 15 0 0 0 425 82A15 15 0 0 0 440 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="568,82 556,86 556,77" style="fill:rgb(0,0,0)"/>
+<path d="M530,82L562,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M568,82 L 575,82 Q 583,82 583,74 L 583,67" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="383,17 372,21 372,12" style="fill:rgb(0,0,0)"/>
+<path d="M126,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M383,17L598,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="167,44 156,48 156,40" style="fill:rgb(0,0,0)"/>
+<path d="M126,17 L 133,17 Q 141,17 141,30 Q 141,44 151,44 L 162,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,59L288,59A15 15 0 0 0 303 44L303,44A15 15 0 0 0 288 29L182,29A15 15 0 0 0 167 44L167,44A15 15 0 0 0 182 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="235" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="568,44 556,48 556,40" style="fill:rgb(0,0,0)"/>
+<path d="M303,44L562,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M568,44 L 575,44 Q 583,44 583,36 L 583,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,120 219,124 219,115" style="fill:rgb(0,0,0)"/>
+<path d="M141,67 L 141,105 Q 141,120 156,120 L 210,120 L 225,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M231,120 L 347,120 Q 362,120 362,105 L 362,97 Q 362,82 370,82 L 377,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_reindex.html'>lang_reindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/release-stmt.html b/www/syntax/release-stmt.html
new file mode 100644
index 0000000..6e6e442
--- /dev/null
+++ b/www/syntax/release-stmt.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: release-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>release-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:488px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 488.736 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L111,32A15 15 0 0 0 126 17A15 15 0 0 0 111 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="79" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RELEASE</text>
+<polygon points="162,17 150,21 150,12" style="fill:rgb(0,0,0)"/>
+<path d="M126,17L156,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,32L261,32A15 15 0 0 0 276 17A15 15 0 0 0 261 2L177,2A15 15 0 0 0 162 17A15 15 0 0 0 177 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SAVEPOINT</text>
+<polygon points="312,17 301,21 301,12" style="fill:rgb(0,0,0)"/>
+<path d="M276,17L306,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M327,32L441,32A15 15 0 0 0 456 17A15 15 0 0 0 441 2L327,2A15 15 0 0 0 312 17A15 15 0 0 0 327 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-name</text>
+<polygon points="479,17 467,21 467,12" style="fill:rgb(0,0,0)"/>
+<path d="M456,17L473,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="482" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="219,47 207,51 207,43" style="fill:rgb(0,0,0)"/>
+<path d="M126,17 L 133,17 Q 141,17 141,32 L 141,32 Q 141,47 156,47 L 198,47 L 213,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,47 L 276,47 Q 291,47 291,32 L 291,32 Q 291,17 299,17 L 306,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_savepoint.html'>lang_savepoint.html</a>
+</div>
+
+
+
diff --git a/www/syntax/result-column.html b/www/syntax/result-column.html
new file mode 100644
index 0000000..1c4fe8e
--- /dev/null
+++ b/www/syntax/result-column.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: result-column</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>result-column</h1>
+<div class='imgcontainer'>
+<div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./select-core.html'>select-core</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/returning-clause.html b/www/syntax/returning-clause.html
new file mode 100644
index 0000000..a3cafc0
--- /dev/null
+++ b/www/syntax/returning-clause.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: returning-clause</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>returning-clause</h1>
+<div class='imgcontainer'>
+<div style="max-width:628px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 628.709 140.4">
+<circle cx="5" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="27,47 15,51 15,43" style="fill:rgb(0,0,0)"/>
+<path d="M9,47L21,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M42,62L132,62A15 15 0 0 0 147 47A15 15 0 0 0 132 32L42,32A15 15 0 0 0 27 47A15 15 0 0 0 42 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RETURNING</text>
+<polygon points="237,47 226,51 226,43" style="fill:rgb(0,0,0)"/>
+<path d="M147,47L232,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,62L287,62L287,32L237,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="328,77 317,82 317,73" style="fill:rgb(0,0,0)"/>
+<path d="M287,47 L 294,47 Q 302,47 302,62 L 302,62 Q 302,77 312,77 L 322,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M343,92L347,92A15 15 0 0 0 362 77L362,77A15 15 0 0 0 347 62L343,62A15 15 0 0 0 328 77L328,77A15 15 0 0 0 343 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="398,77 387,82 387,73" style="fill:rgb(0,0,0)"/>
+<path d="M362,77L393,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M414,92L501,92A15 15 0 0 0 516 77L516,77A15 15 0 0 0 501 62L414,62A15 15 0 0 0 398 77L398,77A15 15 0 0 0 414 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="539,77 528,82 528,73" style="fill:rgb(0,0,0)"/>
+<path d="M516,77L534,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="581,47 569,51 569,43" style="fill:rgb(0,0,0)"/>
+<path d="M539,77 L 547,77 Q 554,77 554,62 L 554,62 Q 554,47 565,47 L 575,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,47 607,51 607,43" style="fill:rgb(0,0,0)"/>
+<path d="M581,47L613,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="622" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="345,101 334,106 334,97" style="fill:rgb(0,0,0)"/>
+<path d="M302,62 L 302,86 Q 302,101 317,101 L 325,101 L 340,101" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,101 L 362,101 Q 377,101 377,89 Q 377,77 385,77 L 392,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,47 441,51 441,43" style="fill:rgb(0,0,0)"/>
+<path d="M287,47L447,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,47L607,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,138A15 15 0 0 0 406 123A15 15 0 0 0 391 108A15 15 0 0 0 376 123A15 15 0 0 0 391 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="376,123 365,127 365,118" style="fill:rgb(0,0,0)"/>
+<path d="M147,47 L 196,47 Q 211,47 211,62 L 211,108 Q 211,123 226,123 L 355,123 L 370,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,123 528,127 528,118" style="fill:rgb(0,0,0)"/>
+<path d="M406,123L534,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,123 L 547,123 Q 554,123 554,108 L 554,77 L 554,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,32A15 15 0 0 0 406 17A15 15 0 0 0 391 2A15 15 0 0 0 376 17A15 15 0 0 0 391 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="406,17 418,12 418,21" style="fill:rgb(0,0,0)"/>
+<path d="M581,47 L 588,47 Q 596,47 596,32 L 596,32 Q 596,17 581,17 L 427,17 L 412,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M376,17 L 174,17 Q 159,17 159,32 L 159,32 Q 159,47 169,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./delete-stmt.html'>delete-stmt</a>&nbsp;&nbsp; <a href='./delete-stmt-limited.html'>delete-stmt-limited</a>&nbsp;&nbsp; <a href='./insert-stmt.html'>insert-stmt</a>&nbsp;&nbsp; <a href='./update-stmt.html'>update-stmt</a>&nbsp;&nbsp; <a href='./update-stmt-limited.html'>update-stmt-limited</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>
+</div>
+
+
+
diff --git a/www/syntax/rollback-stmt.html b/www/syntax/rollback-stmt.html
new file mode 100644
index 0000000..b13a670
--- /dev/null
+++ b/www/syntax/rollback-stmt.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: rollback-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>rollback-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:801px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 801.734 67.392">
+<circle cx="5" cy="33" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,33 20,38 20,29" style="fill:rgb(0,0,0)"/>
+<path d="M9,33L26,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,48L125,48A15 15 0 0 0 140 33A15 15 0 0 0 125 18L47,18A15 15 0 0 0 32 33A15 15 0 0 0 47 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="176,33 164,38 164,29" style="fill:rgb(0,0,0)"/>
+<path d="M140,33L170,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,48L303,48A15 15 0 0 0 318 33A15 15 0 0 0 303 18L191,18A15 15 0 0 0 176 33A15 15 0 0 0 191 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRANSACTION</text>
+<polygon points="390,33 378,38 378,29" style="fill:rgb(0,0,0)"/>
+<path d="M318,33L384,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M405,48L411,48A15 15 0 0 0 426 33A15 15 0 0 0 411 18L405,18A15 15 0 0 0 390 33A15 15 0 0 0 405 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="408" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TO</text>
+<polygon points="462,33 450,38 450,29" style="fill:rgb(0,0,0)"/>
+<path d="M426,33L456,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,48L561,48A15 15 0 0 0 576 33A15 15 0 0 0 561 18L477,18A15 15 0 0 0 462 33A15 15 0 0 0 477 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SAVEPOINT</text>
+<polygon points="612,33 601,38 601,29" style="fill:rgb(0,0,0)"/>
+<path d="M576,33L606,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M627,48L741,48A15 15 0 0 0 756 33A15 15 0 0 0 741 18L627,18A15 15 0 0 0 612 33A15 15 0 0 0 627 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="684" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-name</text>
+<polygon points="792,33 780,38 780,29" style="fill:rgb(0,0,0)"/>
+<path d="M756,33L786,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="795" cy="33" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,6 507,10 507,2" style="fill:rgb(0,0,0)"/>
+<path d="M426,33 L 433,33 Q 441,33 441,20 Q 441,6 456,6 L 498,6 L 513,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,6 L 576,6 Q 591,6 591,20 Q 591,33 599,33 L 606,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,60 507,65 507,56" style="fill:rgb(0,0,0)"/>
+<path d="M352,33 L 359,33 Q 367,33 367,47 Q 367,60 382,60 L 498,60 L 513,60" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,60 L 756,60 Q 771,60 771,47 Q 771,33 778,33 L 786,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="247,60 235,65 235,56" style="fill:rgb(0,0,0)"/>
+<path d="M140,33 L 147,33 Q 155,33 155,47 Q 155,60 170,60 L 226,60 L 241,60" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,60 L 318,60 Q 333,60 333,47 Q 333,33 340,33 L 348,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_savepoint.html'>lang_savepoint.html</a>&nbsp;&nbsp; <a href='../lang_transaction.html'>lang_transaction.html</a>
+</div>
+
+
+
diff --git a/www/syntax/savepoint-stmt.html b/www/syntax/savepoint-stmt.html
new file mode 100644
index 0000000..feb8c17
--- /dev/null
+++ b/www/syntax/savepoint-stmt.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: savepoint-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>savepoint-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:346px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 346.003 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L131,32A15 15 0 0 0 146 17A15 15 0 0 0 131 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="89" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SAVEPOINT</text>
+<polygon points="169,17 158,21 158,12" style="fill:rgb(0,0,0)"/>
+<path d="M146,17L164,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M185,32L298,32A15 15 0 0 0 313 17A15 15 0 0 0 298 2L185,2A15 15 0 0 0 169 17A15 15 0 0 0 185 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="241" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-name</text>
+<polygon points="336,17 325,21 325,12" style="fill:rgb(0,0,0)"/>
+<path d="M313,17L330,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="340" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_savepoint.html'>lang_savepoint.html</a>
+</div>
+
+
+
diff --git a/www/syntax/select-core.html b/www/syntax/select-core.html
new file mode 100644
index 0000000..f580a4c
--- /dev/null
+++ b/www/syntax/select-core.html
@@ -0,0 +1,302 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: select-core</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>select-core</h1>
+<div class='imgcontainer'>
+<div style="max-width:655px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 655.157 728.568">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,17 51,21 51,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L57,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,32L129,32A15 15 0 0 0 144 17A15 15 0 0 0 129 2L78,2A15 15 0 0 0 63 17A15 15 0 0 0 78 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="104" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M144,17 L 152,17 Q 159,17 159,32 L 159,32 Q 159,47 170,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,62L269,62A15 15 0 0 0 284 47L284,47A15 15 0 0 0 269 32L201,32A15 15 0 0 0 186 47L186,47A15 15 0 0 0 201 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="235" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="353,17 342,21 342,12" style="fill:rgb(0,0,0)"/>
+<path d="M284,47 L 292,47 Q 299,47 299,32 L 299,32 Q 299,17 314,17 L 333,17 L 348,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M353,32L481,32L481,2L353,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M417,70A15 15 0 0 0 432 55L432,55A15 15 0 0 0 417 39A15 15 0 0 0 402 55L402,55A15 15 0 0 0 417 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="432,55 444,50 444,59" style="fill:rgb(0,0,0)"/>
+<path d="M481,17 L 488,17 Q 496,17 496,32 L 496,40 Q 496,55 481,55 L 453,55 L 438,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M402,55 L 342,55 Q 327,55 327,40 L 327,32 Q 327,17 334,17 L 342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="235,17 224,21 224,12" style="fill:rgb(0,0,0)"/>
+<path d="M144,17L229,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M235,17L342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,100L216,100A15 15 0 0 0 231 85A15 15 0 0 0 216 70L201,70A15 15 0 0 0 186 85A15 15 0 0 0 201 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="208" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="284,85 273,89 273,81" style="fill:rgb(0,0,0)"/>
+<path d="M231,85L279,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,85 L 292,85 Q 299,85 299,70 L 299,47 L 299,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,85 174,89 174,81" style="fill:rgb(0,0,0)"/>
+<path d="M144,17 L 152,17 Q 159,17 159,32 L 159,70 Q 159,85 170,85 L 180,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,176L139,176A15 15 0 0 0 154 160A15 15 0 0 0 139 145L105,145A15 15 0 0 0 89 160A15 15 0 0 0 105 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="122" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="226,160 215,165 215,156" style="fill:rgb(0,0,0)"/>
+<path d="M154,160L221,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M226,176L387,176L387,145L226,145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M256,250L358,250L358,219L256,219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="235" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M307,212A15 15 0 0 0 322 197A15 15 0 0 0 307 182A15 15 0 0 0 292 197A15 15 0 0 0 307 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="197" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="322,197 334,192 334,201" style="fill:rgb(0,0,0)"/>
+<path d="M387,160 L 395,160 Q 402,160 402,175 L 402,182 Q 402,197 387,197 L 343,197 L 328,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M292,197 L 215,197 Q 200,197 200,182 L 200,175 Q 200,160 207,160 L 215,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="256,235 244,239 244,230" style="fill:rgb(0,0,0)"/>
+<path d="M154,160 L 162,160 Q 169,160 169,175 L 169,220 Q 169,235 184,235 L 235,235 L 250,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="420,201 425,213 416,213" style="fill:rgb(0,0,0)"/>
+<path d="M358,235 L 373,235 Q 387,235 402,235 L 405,235 Q 420,235 420,221 L 420,207" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="441,160 430,165 430,156" style="fill:rgb(0,0,0)"/>
+<path d="M420,201 L 420,175 Q 420,160 428,160 L 436,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,160 L 432,160 Q 423,160 423,160 Q 423,160 431,160 L 438,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,85 492,73 500,73" style="fill:rgb(0,0,0)"/>
+<path d="M481,17 L 488,17 Q 496,17 496,32 L 496,64 L 496,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,123 296,118 296,127" style="fill:rgb(0,0,0)"/>
+<path d="M496,85 L 496,108 Q 496,123 481,123 L 305,123 L 290,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,160 78,165 78,156" style="fill:rgb(0,0,0)"/>
+<path d="M284,123 L 78,123 Q 63,123 63,138 L 63,145 Q 63,160 73,160 L 84,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,325L154,325A15 15 0 0 0 169 310A15 15 0 0 0 154 295L105,295A15 15 0 0 0 89 310A15 15 0 0 0 105 325Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="310" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="192,310 181,314 181,306" style="fill:rgb(0,0,0)"/>
+<path d="M169,310L186,310" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M192,325L241,325L241,295L192,295Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="217" y="310" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="453,212 449,200 458,200" style="fill:rgb(0,0,0)"/>
+<path d="M387,160 L 438,160 Q 453,160 453,175 L 453,191 L 453,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,272 318,268 318,277" style="fill:rgb(0,0,0)"/>
+<path d="M453,212 L 453,257 Q 453,272 438,272 L 328,272 L 313,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,310 78,314 78,306" style="fill:rgb(0,0,0)"/>
+<path d="M307,272 L 78,272 Q 63,272 63,287 L 63,295 Q 63,310 73,310 L 84,310" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,212 59,200 67,200" style="fill:rgb(0,0,0)"/>
+<path d="M63,145L63,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,212L63,295" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,424L148,424A15 15 0 0 0 163 408A15 15 0 0 0 148 393L105,393A15 15 0 0 0 89 408A15 15 0 0 0 105 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="126" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="186,408 175,413 175,404" style="fill:rgb(0,0,0)"/>
+<path d="M163,408L180,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,424L205,424A15 15 0 0 0 220 408A15 15 0 0 0 205 393L201,393A15 15 0 0 0 186 408A15 15 0 0 0 201 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="203" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="256,408 245,413 245,404" style="fill:rgb(0,0,0)"/>
+<path d="M220,408L251,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,424L306,424L306,393L256,393Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="388,408 377,413 377,404" style="fill:rgb(0,0,0)"/>
+<path d="M306,408L383,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,424L456,424A15 15 0 0 0 471 408A15 15 0 0 0 456 393L404,393A15 15 0 0 0 388 408A15 15 0 0 0 404 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="430" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="494,408 483,413 483,404" style="fill:rgb(0,0,0)"/>
+<path d="M471,408L488,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,424L543,424L543,393L494,393Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M281,461A15 15 0 0 0 296 446A15 15 0 0 0 281 431A15 15 0 0 0 266 446A15 15 0 0 0 281 461Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="446" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="296,446 308,442 308,451" style="fill:rgb(0,0,0)"/>
+<path d="M306,408 L 313,408 Q 321,408 321,423 L 321,431 Q 321,446 311,446 L 302,446" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,446 L 245,446 Q 230,446 230,431 L 230,423 Q 230,408 237,408 L 245,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="450,439 439,443 439,434" style="fill:rgb(0,0,0)"/>
+<path d="M347,408 L 354,408 Q 362,408 362,423 L 362,424 Q 362,439 377,439 L 430,439 L 445,439" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M450,439 L 543,439 Q 558,439 558,424 L 558,423 Q 558,408 566,408 L 573,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="203,378 192,382 192,374" style="fill:rgb(0,0,0)"/>
+<path d="M63,348 L 63,363 Q 63,378 78,378 L 183,378 L 198,378" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="347,408 336,413 336,404" style="fill:rgb(0,0,0)"/>
+<path d="M203,378 L 306,378 Q 321,378 321,393 L 321,393 Q 321,408 331,408 L 341,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,348 181,344 181,352" style="fill:rgb(0,0,0)"/>
+<path d="M241,310 L 249,310 Q 256,310 256,325 L 256,333 Q 256,348 241,348 L 190,348 L 175,348" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,408 78,413 78,404" style="fill:rgb(0,0,0)"/>
+<path d="M169,348 L 78,348 Q 63,348 63,363 L 63,393 Q 63,408 73,408 L 84,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,335 59,323 67,323" style="fill:rgb(0,0,0)"/>
+<path d="M63,295L63,329" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,335L63,393" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,537L168,537A15 15 0 0 0 183 522A15 15 0 0 0 168 507L105,507A15 15 0 0 0 89 522A15 15 0 0 0 105 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="219,522 208,526 208,517" style="fill:rgb(0,0,0)"/>
+<path d="M183,522L213,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,537L331,537A15 15 0 0 0 346 522A15 15 0 0 0 331 507L234,507A15 15 0 0 0 219 522A15 15 0 0 0 234 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="369,522 358,526 358,517" style="fill:rgb(0,0,0)"/>
+<path d="M346,522L364,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,537L388,537A15 15 0 0 0 404 522A15 15 0 0 0 388 507L384,507A15 15 0 0 0 369 522A15 15 0 0 0 384 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="386" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="427,522 415,526 415,517" style="fill:rgb(0,0,0)"/>
+<path d="M404,522L421,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M427,537L545,537L545,507L427,507Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M382,575A15 15 0 0 0 397 560A15 15 0 0 0 382 544A15 15 0 0 0 367 560A15 15 0 0 0 382 575Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="560" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="397,560 409,555 409,564" style="fill:rgb(0,0,0)"/>
+<path d="M545,522 L 553,522 Q 560,522 560,537 L 560,545 Q 560,560 545,560 L 418,560 L 403,560" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,560 L 208,560 Q 193,560 193,545 L 193,537 Q 193,522 200,522 L 208,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="588,446 584,435 593,435" style="fill:rgb(0,0,0)"/>
+<path d="M543,408 L 573,408 Q 588,408 588,423 L 588,425 L 588,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,484 318,480 318,488" style="fill:rgb(0,0,0)"/>
+<path d="M588,446 L 588,469 Q 588,484 573,484 L 328,484 L 313,484" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,522 78,526 78,517" style="fill:rgb(0,0,0)"/>
+<path d="M307,484 L 78,484 Q 63,484 63,499 L 63,507 Q 63,522 73,522 L 84,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,446 59,435 67,435" style="fill:rgb(0,0,0)"/>
+<path d="M63,393L63,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,597 295,602 295,593" style="fill:rgb(0,0,0)"/>
+<path d="M63,446 L 63,582 Q 63,597 78,597 L 286,597 L 301,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="645,597 634,602 634,593" style="fill:rgb(0,0,0)"/>
+<path d="M307,597L640,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="649" cy="597" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,586 556,574 564,574" style="fill:rgb(0,0,0)"/>
+<path d="M560,544L560,580" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M560,586 L 560,592 Q 560,597 568,597 L 575,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,688L130,688A15 15 0 0 0 145 673A15 15 0 0 0 130 658L78,658A15 15 0 0 0 63 673A15 15 0 0 0 78 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="104" y="673" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="181,673 170,677 170,669" style="fill:rgb(0,0,0)"/>
+<path d="M145,673L176,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,688A15 15 0 0 0 212 673A15 15 0 0 0 197 658A15 15 0 0 0 181 673A15 15 0 0 0 197 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="197" y="673" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="248,673 236,677 236,669" style="fill:rgb(0,0,0)"/>
+<path d="M212,673L242,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,688L297,688L297,658L248,658Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="673" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="333,673 321,677 321,669" style="fill:rgb(0,0,0)"/>
+<path d="M297,673L327,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,688A15 15 0 0 0 363 673A15 15 0 0 0 348 658A15 15 0 0 0 333 673A15 15 0 0 0 348 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="673" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="573,673 562,677 562,669" style="fill:rgb(0,0,0)"/>
+<path d="M363,673L568,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="588,612 593,624 584,624" style="fill:rgb(0,0,0)"/>
+<path d="M573,673 L 581,673 Q 588,673 588,658 L 588,633 L 588,618" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M588,612 L 588,605 Q 588,597 603,597 L 609,597 L 624,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,650A15 15 0 0 0 287 635A15 15 0 0 0 272 620A15 15 0 0 0 257 635A15 15 0 0 0 272 650Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="635" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M272,726A15 15 0 0 0 287 711A15 15 0 0 0 272 696A15 15 0 0 0 257 711A15 15 0 0 0 272 726Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="711" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="287,635 299,631 299,640" style="fill:rgb(0,0,0)"/>
+<path d="M297,673 L 304,673 Q 312,673 312,658 L 312,650 Q 312,635 303,635 L 293,635" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,635 L 236,635 Q 221,635 221,650 L 221,658 Q 221,673 229,673 L 236,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="287,711 299,706 299,715" style="fill:rgb(0,0,0)"/>
+<path d="M363,673 L 371,673 Q 378,673 378,688 L 378,696 Q 378,711 363,711 L 308,711 L 293,711" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,711 L 170,711 Q 155,711 155,696 L 155,688 Q 155,673 162,673 L 170,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,673 51,677 51,669" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,658 Q 24,673 39,673 L 42,673 L 57,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./compound-select-stmt.html'>compound-select-stmt</a>&nbsp;&nbsp; <a href='./factored-select-stmt.html'>factored-select-stmt</a>&nbsp;&nbsp; <a href='./simple-select-stmt.html'>simple-select-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./join-clause.html'>join-clause</a>&nbsp;&nbsp; <a href='./result-column.html'>result-column</a>&nbsp;&nbsp; <a href='./table-or-subquery.html'>table-or-subquery</a>&nbsp;&nbsp; <a href='./window-defn.html'>window-defn</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>
+</div>
+
+
+
diff --git a/www/syntax/select-stmt.html b/www/syntax/select-stmt.html
new file mode 100644
index 0000000..aa4ff9a
--- /dev/null
+++ b/www/syntax/select-stmt.html
@@ -0,0 +1,403 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: select-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>select-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./common-table-expression.html'>common-table-expression</a>&nbsp;&nbsp; <a href='./create-table-stmt.html'>create-table-stmt</a>&nbsp;&nbsp; <a href='./create-trigger-stmt.html'>create-trigger-stmt</a>&nbsp;&nbsp; <a href='./create-view-stmt.html'>create-view-stmt</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./insert-stmt.html'>insert-stmt</a>&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a>&nbsp;&nbsp; <a href='./table-or-subquery.html'>table-or-subquery</a>&nbsp;&nbsp; <a href='./with-clause.html'>with-clause</a><br></br>
+References:&nbsp;&nbsp; <a href='./common-table-expression.html'>common-table-expression</a>&nbsp;&nbsp; <a href='./compound-operator.html'>compound-operator</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./join-clause.html'>join-clause</a>&nbsp;&nbsp; <a href='./ordering-term.html'>ordering-term</a>&nbsp;&nbsp; <a href='./result-column.html'>result-column</a>&nbsp;&nbsp; <a href='./table-or-subquery.html'>table-or-subquery</a>&nbsp;&nbsp; <a href='./window-defn.html'>window-defn</a><br></br>
+See also:&nbsp;&nbsp; <a href='../changes.html'>changes.html</a>&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>&nbsp;&nbsp; <a href='../releaselog/3_35_3.html'>releaselog/3_35_3.html</a>&nbsp;&nbsp; <a href='../releaselog/3_35_4.html'>releaselog/3_35_4.html</a>&nbsp;&nbsp; <a href='../releaselog/3_35_5.html'>releaselog/3_35_5.html</a>
+</div>
+
+
+
diff --git a/www/syntax/signed-number.html b/www/syntax/signed-number.html
new file mode 100644
index 0000000..34ed201
--- /dev/null
+++ b/www/syntax/signed-number.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: signed-number</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>signed-number</h1>
+<div class='imgcontainer'>
+<div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./column-constraint.html'>column-constraint</a>&nbsp;&nbsp; <a href='./pragma-value.html'>pragma-value</a>&nbsp;&nbsp; <a href='./type-name.html'>type-name</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>&nbsp;&nbsp; <a href='../pragma.html'>pragma.html</a>
+</div>
+
+
+
diff --git a/www/syntax/simple-function-invocation.html b/www/syntax/simple-function-invocation.html
new file mode 100644
index 0000000..feec313
--- /dev/null
+++ b/www/syntax/simple-function-invocation.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: simple-function-invocation</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>simple-function-invocation</h1>
+<div class='imgcontainer'>
+<div style="max-width:414px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 414.49 126.792">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,55 20,59 20,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L26,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,70L126,70A15 15 0 0 0 141 55A15 15 0 0 0 126 39L47,39A15 15 0 0 0 32 55A15 15 0 0 0 47 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">simple-func</text>
+<polygon points="164,55 152,59 152,50" style="fill:rgb(0,0,0)"/>
+<path d="M141,55L158,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,70A15 15 0 0 0 194 55A15 15 0 0 0 179 39A15 15 0 0 0 164 55A15 15 0 0 0 179 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="248,55 237,59 237,50" style="fill:rgb(0,0,0)"/>
+<path d="M194,55L242,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,70L297,70L297,39L248,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="273" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="351,55 340,59 340,50" style="fill:rgb(0,0,0)"/>
+<path d="M297,55L346,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,70A15 15 0 0 0 382 55A15 15 0 0 0 366 39A15 15 0 0 0 351 55A15 15 0 0 0 366 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="366" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="405,55 393,59 393,50" style="fill:rgb(0,0,0)"/>
+<path d="M382,55L399,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="408" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,32A15 15 0 0 0 288 17L288,17A15 15 0 0 0 273 2A15 15 0 0 0 258 17L258,17A15 15 0 0 0 273 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="273" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="288,17 299,12 299,21" style="fill:rgb(0,0,0)"/>
+<path d="M297,55 L 305,55 Q 312,55 312,40 L 312,32 Q 312,17 303,17 L 294,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,17 L 237,17 Q 222,17 222,32 L 222,40 Q 222,55 229,55 L 237,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,82 261,86 261,77" style="fill:rgb(0,0,0)"/>
+<path d="M194,55 L 202,55 Q 209,55 209,68 Q 209,82 224,82 L 252,82 L 267,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,82 L 310,82 Q 325,82 325,68 Q 325,55 332,55 L 340,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,124A15 15 0 0 0 288 109A15 15 0 0 0 273 94A15 15 0 0 0 258 109A15 15 0 0 0 273 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="273" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="258,109 246,113 246,105" style="fill:rgb(0,0,0)"/>
+<path d="M194,55 L 202,55 Q 209,55 209,70 L 209,94 Q 209,109 224,109 L 237,109 L 252,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,109 L 310,109 Q 325,109 325,94 L 325,85 L 325,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>
+</div>
+
+
+
diff --git a/www/syntax/simple-select-stmt.html b/www/syntax/simple-select-stmt.html
new file mode 100644
index 0000000..aa59534
--- /dev/null
+++ b/www/syntax/simple-select-stmt.html
@@ -0,0 +1,223 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: simple-select-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>simple-select-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:629px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 629.266 348.84">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,153L148,153L148,123L45,123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="97" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M205,153L250,153A15 15 0 0 0 265 138A15 15 0 0 0 250 123L205,123A15 15 0 0 0 190 138A15 15 0 0 0 205 153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="227" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="288,138 276,142 276,133" style="fill:rgb(0,0,0)"/>
+<path d="M265,138L282,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M303,153L307,153A15 15 0 0 0 322 138A15 15 0 0 0 307 123L303,123A15 15 0 0 0 288 138A15 15 0 0 0 303 153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="305" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M205,259L239,259A15 15 0 0 0 254 244A15 15 0 0 0 239 228L205,228A15 15 0 0 0 190 244A15 15 0 0 0 205 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="222" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="277,244 265,248 265,239" style="fill:rgb(0,0,0)"/>
+<path d="M254,244L271,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M277,259L326,259L326,228L277,228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="301" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="45,138 33,142 33,133" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,123 Q 24,138 31,138 L 39,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="312,92 323,88 323,97" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 604,17 Q 619,17 619,32 L 619,77 Q 619,92 604,92 L 333,92 L 318,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,92 L 39,92 Q 24,92 24,100 L 24,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="367,138 356,142 356,133" style="fill:rgb(0,0,0)"/>
+<path d="M322,138L361,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,153L497,153L497,123L367,123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M432,191A15 15 0 0 0 447 176A15 15 0 0 0 432 160A15 15 0 0 0 417 176A15 15 0 0 0 432 191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="176" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="447,176 459,171 459,180" style="fill:rgb(0,0,0)"/>
+<path d="M497,138 L 504,138 Q 512,138 512,153 L 512,161 Q 512,176 497,176 L 468,176 L 453,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,176 L 359,176 Q 344,176 344,161 L 344,153 Q 344,138 350,138 L 356,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="533,168 529,156 537,156" style="fill:rgb(0,0,0)"/>
+<path d="M497,138 L 518,138 Q 533,138 533,150 L 533,162" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="343,210 355,205 355,214" style="fill:rgb(0,0,0)"/>
+<path d="M533,168 L 533,195 Q 533,210 518,210 L 364,210 L 349,210" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,244 178,248 178,239" style="fill:rgb(0,0,0)"/>
+<path d="M343,210 L 178,210 Q 163,210 163,225 L 163,229 Q 163,244 174,244 L 184,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,138 178,142 178,133" style="fill:rgb(0,0,0)"/>
+<path d="M148,138L184,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="163,191 159,179 168,179" style="fill:rgb(0,0,0)"/>
+<path d="M148,138 L 156,138 Q 163,138 163,153 L 163,170 L 163,185" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M163,191L163,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M400,289L451,289A15 15 0 0 0 466 274A15 15 0 0 0 451 259L400,259A15 15 0 0 0 385 274A15 15 0 0 0 400 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="490,274 478,278 478,270" style="fill:rgb(0,0,0)"/>
+<path d="M466,274L484,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,289L539,289L539,259L490,259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="514" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="562,274 550,278 550,270" style="fill:rgb(0,0,0)"/>
+<path d="M539,274L556,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M400,327A15 15 0 0 0 415 312A15 15 0 0 0 400 297A15 15 0 0 0 385 312A15 15 0 0 0 400 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="400" y="312" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="438,312 427,316 427,307" style="fill:rgb(0,0,0)"/>
+<path d="M415,312L432,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,327L487,327L487,297L438,297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="349,244 337,248 337,239" style="fill:rgb(0,0,0)"/>
+<path d="M326,244L343,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="385,312 373,316 373,307" style="fill:rgb(0,0,0)"/>
+<path d="M349,244 L 356,244 Q 364,244 364,259 L 364,297 Q 364,312 372,312 L 379,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="385,274 373,278 373,270" style="fill:rgb(0,0,0)"/>
+<path d="M349,244 L 356,244 Q 364,244 364,259 L 364,259 Q 364,274 372,274 L 379,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="562,244 550,248 550,239" style="fill:rgb(0,0,0)"/>
+<path d="M349,244L556,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,342 608,346 608,338" style="fill:rgb(0,0,0)"/>
+<path d="M562,244 L 583,244 Q 598,244 598,259 L 598,327 Q 598,342 606,342 L 614,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="623" cy="342" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M562,274 L 583,274 Q 598,274 598,281 L 598,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="562,312 550,316 550,307" style="fill:rgb(0,0,0)"/>
+<path d="M487,312L556,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M562,312 L 583,312 Q 598,312 598,319 L 598,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="562,342 550,346 550,338" style="fill:rgb(0,0,0)"/>
+<path d="M163,228 L 163,327 Q 163,342 178,342 L 541,342 L 556,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M562,342L608,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+References:&nbsp;&nbsp; <a href='./common-table-expression.html'>common-table-expression</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./ordering-term.html'>ordering-term</a>&nbsp;&nbsp; <a href='./select-core.html'>select-core</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>
+</div>
+
+
+
diff --git a/www/syntax/sql-stmt-list.html b/www/syntax/sql-stmt-list.html
new file mode 100644
index 0000000..1f203ae
--- /dev/null
+++ b/www/syntax/sql-stmt-list.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: sql-stmt-list</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>sql-stmt-list</h1>
+<div class='imgcontainer'>
+<div style="max-width:242px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 242.093 88.776">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M9,55L45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="81,55 69,59 69,50" style="fill:rgb(0,0,0)"/>
+<path d="M45,55L75,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M81,70L160,70L160,39L81,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="121" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">sql-stmt</text>
+<path d="M160,55L196,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="232,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M196,55L226,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="236" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,82 109,86 109,77" style="fill:rgb(0,0,0)"/>
+<path d="M45,55 L 52,55 Q 60,55 60,68 Q 60,82 75,82 L 100,82 L 115,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,82 L 155,82 Q 170,82 170,68 Q 170,55 177,55 L 185,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,32A15 15 0 0 0 136 17L136,17A15 15 0 0 0 121 2A15 15 0 0 0 105 17L105,17A15 15 0 0 0 121 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="121" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">;</text>
+<polygon points="136,17 147,12 147,21" style="fill:rgb(0,0,0)"/>
+<path d="M196,55 L 204,55 Q 211,55 211,40 L 211,32 Q 211,17 196,17 L 156,17 L 141,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,17 L 33,17 Q 18,17 18,32 L 18,40 Q 18,55 26,55 L 33,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+References:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang.html'>lang.html</a>
+</div>
+
+
+
diff --git a/www/syntax/sql-stmt.html b/www/syntax/sql-stmt.html
new file mode 100644
index 0000000..29db7d8
--- /dev/null
+++ b/www/syntax/sql-stmt.html
@@ -0,0 +1,340 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: sql-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>sql-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:716px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 716.88 1017.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L125,70A15 15 0 0 0 140 55L140,55A15 15 0 0 0 125 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXPLAIN</text>
+<polygon points="176,55 165,59 165,50" style="fill:rgb(0,0,0)"/>
+<path d="M140,55L170,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,70L235,70A15 15 0 0 0 250 55L250,55A15 15 0 0 0 235 39L191,39A15 15 0 0 0 176 55L176,55A15 15 0 0 0 191 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">QUERY</text>
+<polygon points="267,55 255,59 255,50" style="fill:rgb(0,0,0)"/>
+<path d="M250,55L261,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M282,70L311,70A15 15 0 0 0 327 55L327,55A15 15 0 0 0 311 39L282,39A15 15 0 0 0 267 55L267,55A15 15 0 0 0 282 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PLAN</text>
+<polygon points="368,17 357,21 357,12" style="fill:rgb(0,0,0)"/>
+<path d="M327,55 L 334,55 Q 342,55 342,40 L 342,32 Q 342,17 352,17 L 362,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="182,17 170,21 170,12" style="fill:rgb(0,0,0)"/>
+<path d="M140,55 L 148,55 Q 155,55 155,40 L 155,32 Q 155,17 166,17 L 176,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,17L357,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M9,17L170,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="410,17 398,21 398,12" style="fill:rgb(0,0,0)"/>
+<path d="M368,17L404,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,32L552,32L552,2L410,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alter-table-stmt</text>
+<polygon points="666,17 654,21 654,12" style="fill:rgb(0,0,0)"/>
+<path d="M552,17L660,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="707,17 696,21 696,12" style="fill:rgb(0,0,0)"/>
+<path d="M666,17L701,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="711" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,70L528,70L528,39L410,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">analyze-stmt</text>
+<polygon points="410,55 398,59 398,50" style="fill:rgb(0,0,0)"/>
+<path d="M383,39 L 383,47 Q 383,55 393,55 L 404,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,55 654,59 654,50" style="fill:rgb(0,0,0)"/>
+<path d="M528,55L660,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,55 L 673,55 Q 681,55 681,47 L 681,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,108L517,108L517,77L410,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">attach-stmt</text>
+<polygon points="410,92 398,97 398,88" style="fill:rgb(0,0,0)"/>
+<path d="M383,77 L 383,85 Q 383,92 393,92 L 404,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,92 654,97 654,88" style="fill:rgb(0,0,0)"/>
+<path d="M517,92L660,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,92 L 673,92 Q 681,92 681,85 L 681,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,145L511,145L511,115L410,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="460" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">begin-stmt</text>
+<polygon points="410,130 398,135 398,126" style="fill:rgb(0,0,0)"/>
+<path d="M383,115 L 383,123 Q 383,130 393,130 L 404,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,130 654,135 654,126" style="fill:rgb(0,0,0)"/>
+<path d="M511,130L660,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,130 L 673,130 Q 681,130 681,123 L 681,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,183L527,183L527,153L410,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">commit-stmt</text>
+<polygon points="410,168 398,172 398,164" style="fill:rgb(0,0,0)"/>
+<path d="M383,153 L 383,160 Q 383,168 393,168 L 404,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,168 654,172 654,164" style="fill:rgb(0,0,0)"/>
+<path d="M527,168L660,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,168 L 673,168 Q 681,168 681,160 L 681,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,221L569,221L569,191L410,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-index-stmt</text>
+<polygon points="410,206 398,210 398,201" style="fill:rgb(0,0,0)"/>
+<path d="M383,191 L 383,198 Q 383,206 393,206 L 404,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,206 654,210 654,201" style="fill:rgb(0,0,0)"/>
+<path d="M569,206L660,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,206 L 673,206 Q 681,206 681,198 L 681,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,259L566,259L566,228L410,228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-table-stmt</text>
+<polygon points="410,244 398,248 398,239" style="fill:rgb(0,0,0)"/>
+<path d="M383,228 L 383,236 Q 383,244 393,244 L 404,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,244 654,248 654,239" style="fill:rgb(0,0,0)"/>
+<path d="M566,244L660,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,244 L 673,244 Q 681,244 681,236 L 681,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,297L582,297L582,266L410,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="496" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-trigger-stmt</text>
+<polygon points="410,281 398,286 398,277" style="fill:rgb(0,0,0)"/>
+<path d="M383,266 L 383,274 Q 383,281 393,281 L 404,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,281 654,286 654,277" style="fill:rgb(0,0,0)"/>
+<path d="M582,281L660,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,281 L 673,281 Q 681,281 681,274 L 681,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,334L561,334L561,304L410,304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-view-stmt</text>
+<polygon points="410,319 398,324 398,315" style="fill:rgb(0,0,0)"/>
+<path d="M383,304 L 383,312 Q 383,319 393,319 L 404,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,319 654,324 654,315" style="fill:rgb(0,0,0)"/>
+<path d="M561,319L660,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,319 L 673,319 Q 681,319 681,312 L 681,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,372L626,372L626,342L410,342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-virtual-table-stmt</text>
+<polygon points="410,357 398,361 398,353" style="fill:rgb(0,0,0)"/>
+<path d="M383,342 L 383,349 Q 383,357 393,357 L 404,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,357 654,361 654,353" style="fill:rgb(0,0,0)"/>
+<path d="M626,357L660,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,357 L 673,357 Q 681,357 681,349 L 681,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,410L516,410L516,380L410,380Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt</text>
+<polygon points="410,395 398,399 398,390" style="fill:rgb(0,0,0)"/>
+<path d="M383,380 L 383,387 Q 383,395 393,395 L 404,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,395 654,399 654,390" style="fill:rgb(0,0,0)"/>
+<path d="M516,395L660,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,395 L 673,395 Q 681,395 681,387 L 681,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,448L581,448L581,417L410,417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt-limited</text>
+<polygon points="410,433 398,437 398,428" style="fill:rgb(0,0,0)"/>
+<path d="M383,417 L 383,425 Q 383,433 393,433 L 404,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,433 654,437 654,428" style="fill:rgb(0,0,0)"/>
+<path d="M581,433L660,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,433 L 673,433 Q 681,433 681,425 L 681,418" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,486L521,486L521,455L410,455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="465" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">detach-stmt</text>
+<polygon points="410,470 398,475 398,466" style="fill:rgb(0,0,0)"/>
+<path d="M383,455 L 383,463 Q 383,470 393,470 L 404,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,470 654,475 654,466" style="fill:rgb(0,0,0)"/>
+<path d="M521,470L660,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,470 L 673,470 Q 681,470 681,463 L 681,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,523L555,523L555,493L410,493Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="508" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-index-stmt</text>
+<polygon points="410,508 398,513 398,504" style="fill:rgb(0,0,0)"/>
+<path d="M383,493 L 383,501 Q 383,508 393,508 L 404,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,508 654,513 654,504" style="fill:rgb(0,0,0)"/>
+<path d="M555,508L660,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,508 L 673,508 Q 681,508 681,501 L 681,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,561L551,561L551,531L410,531Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="480" y="546" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-table-stmt</text>
+<polygon points="410,546 398,550 398,542" style="fill:rgb(0,0,0)"/>
+<path d="M383,531 L 383,538 Q 383,546 393,546 L 404,546" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,546 654,550 654,542" style="fill:rgb(0,0,0)"/>
+<path d="M551,546L660,546" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,546 L 673,546 Q 681,546 681,538 L 681,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,599L568,599L568,569L410,569Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="584" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-trigger-stmt</text>
+<polygon points="410,584 398,588 398,579" style="fill:rgb(0,0,0)"/>
+<path d="M383,569 L 383,576 Q 383,584 393,584 L 404,584" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,584 654,588 654,579" style="fill:rgb(0,0,0)"/>
+<path d="M568,584L660,584" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,584 L 673,584 Q 681,584 681,576 L 681,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,637L547,637L547,606L410,606Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="622" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-view-stmt</text>
+<polygon points="410,622 398,626 398,617" style="fill:rgb(0,0,0)"/>
+<path d="M383,606 L 383,614 Q 383,622 393,622 L 404,622" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,622 654,626 654,617" style="fill:rgb(0,0,0)"/>
+<path d="M547,622L660,622" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,622 L 673,622 Q 681,622 681,614 L 681,607" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,675L513,675L513,644L410,644Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="659" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">insert-stmt</text>
+<polygon points="410,659 398,664 398,655" style="fill:rgb(0,0,0)"/>
+<path d="M383,644 L 383,652 Q 383,659 393,659 L 404,659" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,659 654,664 654,655" style="fill:rgb(0,0,0)"/>
+<path d="M513,659L660,659" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,659 L 673,659 Q 681,659 681,652 L 681,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,712L529,712L529,682L410,682Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="697" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-stmt</text>
+<polygon points="410,697 398,702 398,693" style="fill:rgb(0,0,0)"/>
+<path d="M383,682 L 383,690 Q 383,697 393,697 L 404,697" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,697 654,702 654,693" style="fill:rgb(0,0,0)"/>
+<path d="M529,697L660,697" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,697 L 673,697 Q 681,697 681,690 L 681,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,750L528,750L528,720L410,720Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="735" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">reindex-stmt</text>
+<polygon points="410,735 398,739 398,731" style="fill:rgb(0,0,0)"/>
+<path d="M383,720 L 383,727 Q 383,735 393,735 L 404,735" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,735 654,739 654,731" style="fill:rgb(0,0,0)"/>
+<path d="M528,735L660,735" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,735 L 673,735 Q 681,735 681,727 L 681,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,788L526,788L526,758L410,758Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="773" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">release-stmt</text>
+<polygon points="410,773 398,777 398,768" style="fill:rgb(0,0,0)"/>
+<path d="M383,758 L 383,765 Q 383,773 393,773 L 404,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,773 654,777 654,768" style="fill:rgb(0,0,0)"/>
+<path d="M526,773L660,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,773 L 673,773 Q 681,773 681,765 L 681,758" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,826L533,826L533,795L410,795Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="811" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">rollback-stmt</text>
+<polygon points="410,811 398,815 398,806" style="fill:rgb(0,0,0)"/>
+<path d="M383,795 L 383,803 Q 383,811 393,811 L 404,811" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,811 654,815 654,806" style="fill:rgb(0,0,0)"/>
+<path d="M533,811L660,811" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,811 L 673,811 Q 681,811 681,803 L 681,796" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,864L545,864L545,833L410,833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="848" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-stmt</text>
+<polygon points="410,848 398,853 398,844" style="fill:rgb(0,0,0)"/>
+<path d="M383,833 L 383,841 Q 383,848 393,848 L 404,848" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,848 654,853 654,844" style="fill:rgb(0,0,0)"/>
+<path d="M545,848L660,848" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,848 L 673,848 Q 681,848 681,841 L 681,833" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,901L514,901L514,871L410,871Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="462" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="410,886 398,891 398,882" style="fill:rgb(0,0,0)"/>
+<path d="M383,871 L 383,879 Q 383,886 393,886 L 404,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,886 654,891 654,882" style="fill:rgb(0,0,0)"/>
+<path d="M514,886L660,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,886 L 673,886 Q 681,886 681,879 L 681,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,939L522,939L522,909L410,909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="466" y="924" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt</text>
+<polygon points="410,924 398,928 398,920" style="fill:rgb(0,0,0)"/>
+<path d="M383,909 L 383,916 Q 383,924 393,924 L 404,924" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,924 654,928 654,920" style="fill:rgb(0,0,0)"/>
+<path d="M522,924L660,924" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,924 L 673,924 Q 681,924 681,916 L 681,909" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,977L587,977L587,947L410,947Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="498" y="962" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt-limited</text>
+<polygon points="410,962 398,966 398,957" style="fill:rgb(0,0,0)"/>
+<path d="M383,947 L 383,954 Q 383,962 393,962 L 404,962" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,962 654,966 654,957" style="fill:rgb(0,0,0)"/>
+<path d="M587,962L660,962" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,962 L 673,962 Q 681,962 681,954 L 681,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,1015L529,1015L529,984L410,984Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="1000" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">vacuum-stmt</text>
+<polygon points="410,1000 398,1004 398,995" style="fill:rgb(0,0,0)"/>
+<path d="M368,17 L 376,17 Q 383,17 383,32 L 383,985 Q 383,1000 393,1000 L 404,1000" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,1000 654,1004 654,995" style="fill:rgb(0,0,0)"/>
+<path d="M529,1000L660,1000" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,1000 L 673,1000 Q 681,1000 681,985 L 681,32 Q 681,17 688,17 L 696,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt-list.html'>sql-stmt-list</a><br></br>
+References:&nbsp;&nbsp; <a href='./alter-table-stmt.html'>alter-table-stmt</a>&nbsp;&nbsp; <a href='./analyze-stmt.html'>analyze-stmt</a>&nbsp;&nbsp; <a href='./attach-stmt.html'>attach-stmt</a>&nbsp;&nbsp; <a href='./begin-stmt.html'>begin-stmt</a>&nbsp;&nbsp; <a href='./commit-stmt.html'>commit-stmt</a>&nbsp;&nbsp; <a href='./create-index-stmt.html'>create-index-stmt</a>&nbsp;&nbsp; <a href='./create-table-stmt.html'>create-table-stmt</a>&nbsp;&nbsp; <a href='./create-trigger-stmt.html'>create-trigger-stmt</a>&nbsp;&nbsp; <a href='./create-view-stmt.html'>create-view-stmt</a>&nbsp;&nbsp; <a href='./create-virtual-table-stmt.html'>create-virtual-table-stmt</a>&nbsp;&nbsp; <a href='./delete-stmt.html'>delete-stmt</a>&nbsp;&nbsp; <a href='./delete-stmt-limited.html'>delete-stmt-limited</a>&nbsp;&nbsp; <a href='./detach-stmt.html'>detach-stmt</a>&nbsp;&nbsp; <a href='./drop-index-stmt.html'>drop-index-stmt</a>&nbsp;&nbsp; <a href='./drop-table-stmt.html'>drop-table-stmt</a>&nbsp;&nbsp; <a href='./drop-trigger-stmt.html'>drop-trigger-stmt</a>&nbsp;&nbsp; <a href='./drop-view-stmt.html'>drop-view-stmt</a>&nbsp;&nbsp; <a href='./insert-stmt.html'>insert-stmt</a>&nbsp;&nbsp; <a href='./pragma-stmt.html'>pragma-stmt</a>&nbsp;&nbsp; <a href='./reindex-stmt.html'>reindex-stmt</a>&nbsp;&nbsp; <a href='./release-stmt.html'>release-stmt</a>&nbsp;&nbsp; <a href='./rollback-stmt.html'>rollback-stmt</a>&nbsp;&nbsp; <a href='./savepoint-stmt.html'>savepoint-stmt</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./update-stmt.html'>update-stmt</a>&nbsp;&nbsp; <a href='./update-stmt-limited.html'>update-stmt-limited</a>&nbsp;&nbsp; <a href='./vacuum-stmt.html'>vacuum-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang.html'>lang.html</a>&nbsp;&nbsp; <a href='../lang_explain.html'>lang_explain.html</a>
+</div>
+
+
+
diff --git a/www/syntax/table-constraint.html b/www/syntax/table-constraint.html
new file mode 100644
index 0000000..862cf5d
--- /dev/null
+++ b/www/syntax/table-constraint.html
@@ -0,0 +1,232 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: table-constraint</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>table-constraint</h1>
+<div class='imgcontainer'>
+<div style="max-width:751px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 751.325 261.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="110" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONSTRAINT</text>
+<polygon points="198,17 187,21 187,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L192,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M213,32L240,32A15 15 0 0 0 256 17A15 15 0 0 0 240 2L213,2A15 15 0 0 0 198 17A15 15 0 0 0 213 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="227" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<path d="M60,108L123,108A15 15 0 0 0 138 92A15 15 0 0 0 123 77L60,77A15 15 0 0 0 45 92A15 15 0 0 0 60 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="91" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRIMARY</text>
+<polygon points="161,92 149,97 149,88" style="fill:rgb(0,0,0)"/>
+<path d="M138,92L155,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M176,108L192,108A15 15 0 0 0 208 92A15 15 0 0 0 192 77L176,77A15 15 0 0 0 161 92A15 15 0 0 0 176 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">KEY</text>
+<polygon points="244,92 232,97 232,88" style="fill:rgb(0,0,0)"/>
+<path d="M208,92L238,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,108A15 15 0 0 0 274 92A15 15 0 0 0 259 77A15 15 0 0 0 244 92A15 15 0 0 0 259 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="310,92 298,97 298,88" style="fill:rgb(0,0,0)"/>
+<path d="M274,92L304,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,108L454,108L454,77L310,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="490,92 479,97 479,88" style="fill:rgb(0,0,0)"/>
+<path d="M454,92L485,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,108A15 15 0 0 0 521 92A15 15 0 0 0 505 77A15 15 0 0 0 490 92A15 15 0 0 0 505 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="505" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="544,92 532,97 532,88" style="fill:rgb(0,0,0)"/>
+<path d="M521,92L538,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M544,108L677,108L677,77L544,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="610" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="700,92 688,97 688,88" style="fill:rgb(0,0,0)"/>
+<path d="M677,92L694,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="741,92 730,97 730,88" style="fill:rgb(0,0,0)"/>
+<path d="M700,92L736,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="745" cy="92" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,92 33,97 33,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 31,92 L 39,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="110,55 122,50 122,59" style="fill:rgb(0,0,0)"/>
+<path d="M256,17 L 263,17 Q 271,17 271,32 L 271,40 Q 271,55 256,55 L 131,55 L 116,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M110,55 L 39,55 Q 24,55 24,62 L 24,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,145A15 15 0 0 0 397 130A15 15 0 0 0 382 115A15 15 0 0 0 367 130A15 15 0 0 0 382 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="130" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="397,130 409,126 409,135" style="fill:rgb(0,0,0)"/>
+<path d="M454,92 L 462,92 Q 469,92 469,107 L 469,115 Q 469,130 454,130 L 418,130 L 403,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,130 L 298,130 Q 283,130 283,115 L 283,107 Q 283,92 291,92 L 298,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,145L115,145A15 15 0 0 0 130 130A15 15 0 0 0 115 115L60,115A15 15 0 0 0 45 130A15 15 0 0 0 60 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<path d="M130,130 L 208,130 Q 223,130 223,115 L 223,107 Q 223,92 230,92 L 238,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,130 33,135 33,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,115 Q 24,130 31,130 L 39,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,183L105,183A15 15 0 0 0 121 168A15 15 0 0 0 105 153L60,153A15 15 0 0 0 45 168A15 15 0 0 0 60 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CHECK</text>
+<polygon points="144,168 132,172 132,164" style="fill:rgb(0,0,0)"/>
+<path d="M121,168L138,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M159,183A15 15 0 0 0 174 168A15 15 0 0 0 159 153A15 15 0 0 0 144 168A15 15 0 0 0 159 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="168" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="197,168 185,172 185,164" style="fill:rgb(0,0,0)"/>
+<path d="M174,168L191,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,183L246,183L246,153L197,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="269,168 258,172 258,164" style="fill:rgb(0,0,0)"/>
+<path d="M246,168L263,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,183L284,183A15 15 0 0 0 299 168A15 15 0 0 0 284 153L284,153A15 15 0 0 0 269 168A15 15 0 0 0 284 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="284" y="168" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="700,168 688,172 688,164" style="fill:rgb(0,0,0)"/>
+<path d="M299,168L694,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M700,168 L 707,168 Q 715,168 715,153 L 715,107 Q 715,92 722,92 L 730,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,168 33,172 33,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,153 Q 24,168 31,168 L 39,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,221L123,221A15 15 0 0 0 139 206A15 15 0 0 0 123 191L60,191A15 15 0 0 0 45 206A15 15 0 0 0 60 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOREIGN</text>
+<polygon points="162,206 150,210 150,201" style="fill:rgb(0,0,0)"/>
+<path d="M139,206L156,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,221L193,221A15 15 0 0 0 208 206A15 15 0 0 0 193 191L177,191A15 15 0 0 0 162 206A15 15 0 0 0 177 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">KEY</text>
+<polygon points="231,206 220,210 220,201" style="fill:rgb(0,0,0)"/>
+<path d="M208,206L225,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,221A15 15 0 0 0 261 206A15 15 0 0 0 246 191A15 15 0 0 0 231 206A15 15 0 0 0 246 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="206" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="297,206 286,210 286,201" style="fill:rgb(0,0,0)"/>
+<path d="M261,206L292,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,221L407,221A15 15 0 0 0 422 206A15 15 0 0 0 407 191L313,191A15 15 0 0 0 297 206A15 15 0 0 0 313 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="458,206 446,210 446,201" style="fill:rgb(0,0,0)"/>
+<path d="M422,206L452,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M473,221A15 15 0 0 0 488 206A15 15 0 0 0 473 191A15 15 0 0 0 458 206A15 15 0 0 0 473 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="206" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,206 500,210 500,201" style="fill:rgb(0,0,0)"/>
+<path d="M488,206L505,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M511,221L677,221L677,191L511,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="594" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-key-clause</text>
+<polygon points="700,206 688,210 688,201" style="fill:rgb(0,0,0)"/>
+<path d="M677,206L694,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M700,206 L 707,206 Q 715,206 715,191 L 715,168 L 715,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,206 33,210 33,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,191 Q 24,206 31,206 L 39,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,259A15 15 0 0 0 375 244A15 15 0 0 0 360 228A15 15 0 0 0 345 244A15 15 0 0 0 360 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="244" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="375,244 386,239 386,248" style="fill:rgb(0,0,0)"/>
+<path d="M422,206 L 429,206 Q 437,206 437,221 L 437,229 Q 437,244 422,244 L 396,244 L 381,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,244 L 286,244 Q 271,244 271,229 L 271,221 Q 271,206 278,206 L 286,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./create-table-stmt.html'>create-table-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./conflict-clause.html'>conflict-clause</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./foreign-key-clause.html'>foreign-key-clause</a>&nbsp;&nbsp; <a href='./indexed-column.html'>indexed-column</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>
+</div>
+
+
+
diff --git a/www/syntax/table-options.html b/www/syntax/table-options.html
new file mode 100644
index 0000000..6abc161
--- /dev/null
+++ b/www/syntax/table-options.html
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: table-options</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>table-options</h1>
+<div class='imgcontainer'>
+<div style="max-width:324px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 324.036 98.31">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="77,17 66,21 66,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 40,36 Q 55,36 55,26 Q 55,17 63,17 L 72,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,32L161,32A15 15 0 0 0 177 17A15 15 0 0 0 161 2L93,2A15 15 0 0 0 77 17A15 15 0 0 0 93 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITHOUT</text>
+<polygon points="194,17 182,21 182,12" style="fill:rgb(0,0,0)"/>
+<path d="M177,17L188,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,32L253,32A15 15 0 0 0 268 17A15 15 0 0 0 253 2L209,2A15 15 0 0 0 194 17A15 15 0 0 0 209 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWID</text>
+<path d="M268,17 L 274,17 Q 280,17 280,26 Q 280,36 295,36 L 299,36 L 314,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="318" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="77,54 66,59 66,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 40,36 Q 55,36 55,45 Q 55,54 63,54 L 72,54" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,69L139,69A15 15 0 0 0 154 54A15 15 0 0 0 139 39L93,39A15 15 0 0 0 77 54A15 15 0 0 0 93 69Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="54" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">STRICT</text>
+<polygon points="314,36 303,40 303,31" style="fill:rgb(0,0,0)"/>
+<path d="M154,54 L 253,54 Q 268,54 274,54 Q 280,54 280,45 Q 280,36 294,36 L 308,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="194,81 205,76 205,85" style="fill:rgb(0,0,0)"/>
+<path d="M285,36 L 293,36 Q 300,36 300,51 L 300,66 Q 300,81 285,81 L 215,81 L 200,81" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,96A15 15 0 0 0 194 81A15 15 0 0 0 179 65A15 15 0 0 0 164 81A15 15 0 0 0 179 96Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="81" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="77,81 89,76 89,85" style="fill:rgb(0,0,0)"/>
+<path d="M164,81L83,81" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M77,81 L 31,81 Q 16,81 16,66 L 16,51 Q 16,36 28,36 L 39,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./create-table-stmt.html'>create-table-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>
+</div>
+
+
+
diff --git a/www/syntax/table-or-subquery.html b/www/syntax/table-or-subquery.html
new file mode 100644
index 0000000..b31a368
--- /dev/null
+++ b/www/syntax/table-or-subquery.html
@@ -0,0 +1,268 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: table-or-subquery</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>table-or-subquery</h1>
+<div class='imgcontainer'>
+<div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./join-clause.html'>join-clause</a>&nbsp;&nbsp; <a href='./select-core.html'>select-core</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./update-stmt.html'>update-stmt</a>&nbsp;&nbsp; <a href='./update-stmt-limited.html'>update-stmt-limited</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./join-clause.html'>join-clause</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/type-name.html b/www/syntax/type-name.html
new file mode 100644
index 0000000..2ed7ec5
--- /dev/null
+++ b/www/syntax/type-name.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: type-name</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>type-name</h1>
+<div class='imgcontainer'>
+<div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./column-def.html'>column-def</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a><br></br>
+References:&nbsp;&nbsp; <a href='./signed-number.html'>signed-number</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/update-stmt-limited.html b/www/syntax/update-stmt-limited.html
new file mode 100644
index 0000000..e71178b
--- /dev/null
+++ b/www/syntax/update-stmt-limited.html
@@ -0,0 +1,353 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: update-stmt-limited</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>update-stmt-limited</h1>
+<div class='imgcontainer'>
+<div style="max-width:623px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 623.266 971.406">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,136L114,136A15 15 0 0 0 129 121A15 15 0 0 0 114 106L60,106A15 15 0 0 0 45 121A15 15 0 0 0 60 136Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="45,121 33,125 33,116" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,106 Q 24,121 31,121 L 39,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,299 159,303 159,295" style="fill:rgb(0,0,0)"/>
+<path d="M129,121 L 137,121 Q 144,121 144,136 L 144,284 Q 144,299 155,299 L 165,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,314L193,314A15 15 0 0 0 208 299A15 15 0 0 0 193 284L186,284A15 15 0 0 0 171 299A15 15 0 0 0 186 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,299 214,303 214,295" style="fill:rgb(0,0,0)"/>
+<path d="M208,299L219,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,314L318,314A15 15 0 0 0 333 299A15 15 0 0 0 318 284L240,284A15 15 0 0 0 225 299A15 15 0 0 0 240 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="279" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="350,299 339,303 339,295" style="fill:rgb(0,0,0)"/>
+<path d="M333,299L344,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,121 380,125 380,116" style="fill:rgb(0,0,0)"/>
+<path d="M350,299 L 358,299 Q 365,299 365,284 L 365,136 Q 365,121 376,121 L 386,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,136L576,136L576,106L392,106Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<path d="M186,276L193,276A15 15 0 0 0 208 261A15 15 0 0 0 193 246L186,246A15 15 0 0 0 171 261A15 15 0 0 0 186 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,261 214,266 214,257" style="fill:rgb(0,0,0)"/>
+<path d="M208,261L219,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,276L304,276A15 15 0 0 0 319 261A15 15 0 0 0 304 246L240,246A15 15 0 0 0 225 261A15 15 0 0 0 240 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="350,261 339,266 339,257" style="fill:rgb(0,0,0)"/>
+<path d="M319,261L344,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,261 L 358,261 Q 365,261 365,254 L 365,246" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,261 159,266 159,257" style="fill:rgb(0,0,0)"/>
+<path d="M144,246 L 144,254 Q 144,261 155,261 L 165,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,239L193,239A15 15 0 0 0 208 224A15 15 0 0 0 193 208L186,208A15 15 0 0 0 171 224A15 15 0 0 0 186 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,224 214,228 214,219" style="fill:rgb(0,0,0)"/>
+<path d="M208,224L219,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,239L292,239A15 15 0 0 0 307 224A15 15 0 0 0 292 208L240,208A15 15 0 0 0 225 224A15 15 0 0 0 240 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="266" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="350,224 339,228 339,219" style="fill:rgb(0,0,0)"/>
+<path d="M307,224L344,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,224 L 358,224 Q 365,224 365,216 L 365,209" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,224 159,228 159,219" style="fill:rgb(0,0,0)"/>
+<path d="M144,208 L 144,216 Q 144,224 155,224 L 165,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,201L193,201A15 15 0 0 0 208 186A15 15 0 0 0 193 171L186,171A15 15 0 0 0 171 186A15 15 0 0 0 186 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,186 214,190 214,181" style="fill:rgb(0,0,0)"/>
+<path d="M208,186L219,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,201L262,201A15 15 0 0 0 277 186A15 15 0 0 0 262 171L240,171A15 15 0 0 0 225 186A15 15 0 0 0 240 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="350,186 339,190 339,181" style="fill:rgb(0,0,0)"/>
+<path d="M277,186L344,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,186 L 358,186 Q 365,186 365,178 L 365,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,186 159,190 159,181" style="fill:rgb(0,0,0)"/>
+<path d="M144,171 L 144,178 Q 144,186 155,186 L 165,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,163L193,163A15 15 0 0 0 208 148A15 15 0 0 0 193 133L186,133A15 15 0 0 0 171 148A15 15 0 0 0 186 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,148 214,152 214,144" style="fill:rgb(0,0,0)"/>
+<path d="M208,148L219,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,163L282,163A15 15 0 0 0 297 148A15 15 0 0 0 282 133L240,133A15 15 0 0 0 225 148A15 15 0 0 0 240 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="350,148 339,152 339,144" style="fill:rgb(0,0,0)"/>
+<path d="M297,148L344,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,148 L 358,148 Q 365,148 365,140 L 365,133" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,148 159,152 159,144" style="fill:rgb(0,0,0)"/>
+<path d="M144,133 L 144,140 Q 144,148 155,148 L 165,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="350,121 339,125 339,116" style="fill:rgb(0,0,0)"/>
+<path d="M129,121L344,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,121L380,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,375 39,379 39,370" style="fill:rgb(0,0,0)"/>
+<path d="M576,121 L 584,121 Q 591,121 591,136 L 591,322 Q 591,337 576,337 L 39,337 Q 24,337 24,352 L 24,360 Q 24,375 34,375 L 45,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,390L81,390A15 15 0 0 0 96 375A15 15 0 0 0 81 360L65,360A15 15 0 0 0 50 375A15 15 0 0 0 65 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="73" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="153,413 141,417 141,408" style="fill:rgb(0,0,0)"/>
+<path d="M96,375 L 111,375 Q 126,375 126,390 L 126,398 Q 126,413 136,413 L 147,413" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,428L309,428L309,397L153,397Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="413" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="350,375 339,379 339,370" style="fill:rgb(0,0,0)"/>
+<path d="M309,413 L 316,413 Q 324,413 324,398 L 324,390 Q 324,375 334,375 L 344,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,390A15 15 0 0 0 380 375A15 15 0 0 0 365 360A15 15 0 0 0 350 375A15 15 0 0 0 365 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="375" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="404,375 392,379 392,370" style="fill:rgb(0,0,0)"/>
+<path d="M380,375L398,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,390L453,390L453,360L404,360Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="428" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="153,375 141,379 141,370" style="fill:rgb(0,0,0)"/>
+<path d="M96,375L147,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,390L262,390A15 15 0 0 0 277 375A15 15 0 0 0 262 360L168,360A15 15 0 0 0 153 375A15 15 0 0 0 168 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M277,375L339,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,465A15 15 0 0 0 266 450A15 15 0 0 0 251 435A15 15 0 0 0 236 450A15 15 0 0 0 251 465Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="450" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="266,450 277,446 277,455" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,435 Q 468,450 453,450 L 287,450 L 272,450" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,450 L 117,450 Q 102,450 102,435 L 102,390 Q 102,375 117,375 L 117,375 L 132,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="251,488 262,484 262,492" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,473 Q 468,488 453,488 L 271,488 L 256,488" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,488 L 39,488 Q 24,488 24,503 L 24,511 Q 24,526 37,526 L 50,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,541L100,541A15 15 0 0 0 115 526A15 15 0 0 0 100 511L65,511A15 15 0 0 0 50 526A15 15 0 0 0 65 541Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="187,526 176,530 176,522" style="fill:rgb(0,0,0)"/>
+<path d="M115,526L182,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,541L348,541L348,511L187,511Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M268,579A15 15 0 0 0 283 564A15 15 0 0 0 268 549A15 15 0 0 0 253 564A15 15 0 0 0 268 579Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="564" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="283,564 295,559 295,568" style="fill:rgb(0,0,0)"/>
+<path d="M348,526 L 356,526 Q 363,526 363,541 L 363,549 Q 363,564 348,564 L 304,564 L 289,564" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,564 L 176,564 Q 161,564 161,549 L 161,541 Q 161,526 168,526 L 176,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,602 176,606 176,597" style="fill:rgb(0,0,0)"/>
+<path d="M115,526 L 123,526 Q 130,526 130,541 L 130,587 Q 130,602 145,602 L 167,602 L 182,602" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,617L290,617L290,586L187,586Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="239" y="602" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<polygon points="405,526 393,530 393,522" style="fill:rgb(0,0,0)"/>
+<path d="M290,602 L 363,602 Q 378,602 378,587 L 378,541 Q 378,526 389,526 L 399,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="244,639 255,635 255,644" style="fill:rgb(0,0,0)"/>
+<path d="M405,526 L 412,526 Q 420,526 420,541 L 420,624 Q 420,639 405,639 L 265,639 L 250,639" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,526L393,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,677 39,681 39,673" style="fill:rgb(0,0,0)"/>
+<path d="M244,639 L 39,639 Q 24,639 24,654 L 24,662 Q 24,677 34,677 L 45,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,692L115,692A15 15 0 0 0 130 677A15 15 0 0 0 115 662L66,662A15 15 0 0 0 50 677A15 15 0 0 0 66 692Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="153,677 142,681 142,673" style="fill:rgb(0,0,0)"/>
+<path d="M130,677L147,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,692L202,692L202,662L153,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="178" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="256,677 245,681 245,673" style="fill:rgb(0,0,0)"/>
+<path d="M202,677L251,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,692L407,692L407,662L256,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="24,586 20,575 28,575" style="fill:rgb(0,0,0)"/>
+<path d="M24,511L24,581" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,586L24,662" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="126,715 138,711 138,719" style="fill:rgb(0,0,0)"/>
+<path d="M202,677 L 212,677 Q 221,677 221,692 L 221,700 Q 221,715 206,715 L 147,715 L 132,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,715 L 39,715 Q 24,715 24,730 L 24,745" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,715 343,711 343,719" style="fill:rgb(0,0,0)"/>
+<path d="M407,677 L 417,677 Q 426,677 426,692 L 426,700 Q 426,715 411,715 L 353,715 L 338,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M332,715L178,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,704 20,692 28,692" style="fill:rgb(0,0,0)"/>
+<path d="M24,662L24,698" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,704 L 24,738 Q 24,753 37,753 L 50,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,768L110,768A15 15 0 0 0 125 753A15 15 0 0 0 110 738L66,738A15 15 0 0 0 50 753A15 15 0 0 0 66 768Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="88" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="148,753 137,757 137,748" style="fill:rgb(0,0,0)"/>
+<path d="M125,753L142,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M163,768L167,768A15 15 0 0 0 183 753A15 15 0 0 0 167 738L163,738A15 15 0 0 0 148 753A15 15 0 0 0 163 768Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="165" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="219,753 207,757 207,748" style="fill:rgb(0,0,0)"/>
+<path d="M183,753L213,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,768L348,768L348,738L219,738Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M283,806A15 15 0 0 0 299 791A15 15 0 0 0 283 775A15 15 0 0 0 268 791A15 15 0 0 0 283 806Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="791" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M60,874L93,874A15 15 0 0 0 109 859A15 15 0 0 0 93 843L60,843A15 15 0 0 0 45 859A15 15 0 0 0 60 874Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="859" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,859 120,863 120,854" style="fill:rgb(0,0,0)"/>
+<path d="M109,859L126,859" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,874L181,874L181,843L132,843Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="859" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,889 207,893 207,885" style="fill:rgb(0,0,0)"/>
+<path d="M181,859 L 188,859 Q 196,859 196,874 L 196,874 Q 196,889 204,889 L 213,889" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,904L285,904A15 15 0 0 0 300 889A15 15 0 0 0 285 874L234,874A15 15 0 0 0 219 889A15 15 0 0 0 234 904Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="889" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="323,889 312,893 312,885" style="fill:rgb(0,0,0)"/>
+<path d="M300,889L318,889" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,904L373,904L373,874L323,874Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="889" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M234,942A15 15 0 0 0 249 927A15 15 0 0 0 234 912A15 15 0 0 0 219 927A15 15 0 0 0 234 942Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="927" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="272,927 261,931 261,922" style="fill:rgb(0,0,0)"/>
+<path d="M249,927L266,927" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,942L321,942L321,912L272,912Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="927" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,927 207,931 207,922" style="fill:rgb(0,0,0)"/>
+<path d="M181,859 L 188,859 Q 196,859 196,874 L 196,912 Q 196,927 204,927 L 213,927" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,791 310,786 310,795" style="fill:rgb(0,0,0)"/>
+<path d="M348,753 L 356,753 Q 363,753 363,768 L 363,776 Q 363,791 348,791 L 319,791 L 304,791" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M268,791 L 210,791 Q 195,791 195,776 L 195,768 Q 195,753 203,753 L 210,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,859 33,863 33,854" style="fill:rgb(0,0,0)"/>
+<path d="M24,738 L 24,844 Q 24,859 31,859 L 39,859" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,821 177,816 177,825" style="fill:rgb(0,0,0)"/>
+<path d="M348,753 L 356,753 Q 363,753 363,768 L 363,806 Q 363,821 348,821 L 186,821 L 171,821" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,821 L 39,821 Q 24,821 24,828 L 24,836" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="178,964 166,969 166,960" style="fill:rgb(0,0,0)"/>
+<path d="M24,843 L 24,949 Q 24,964 39,964 L 157,964 L 172,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,964 602,969 602,960" style="fill:rgb(0,0,0)"/>
+<path d="M178,964L608,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="964" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,889 384,893 384,885" style="fill:rgb(0,0,0)"/>
+<path d="M373,889L390,889" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,964 435,969 435,960" style="fill:rgb(0,0,0)"/>
+<path d="M396,889 L 403,889 Q 411,889 411,904 L 411,949 Q 411,964 426,964 L 426,964 L 441,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,927 384,931 384,922" style="fill:rgb(0,0,0)"/>
+<path d="M321,927L390,927" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,927 L 403,927 Q 411,927 411,934 L 411,942" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,859 384,863 384,854" style="fill:rgb(0,0,0)"/>
+<path d="M181,859L390,859" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,859 L 403,859 Q 411,859 411,874 L 411,889 L 411,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./column-name-list.html'>column-name-list</a>&nbsp;&nbsp; <a href='./common-table-expression.html'>common-table-expression</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./join-clause.html'>join-clause</a>&nbsp;&nbsp; <a href='./ordering-term.html'>ordering-term</a>&nbsp;&nbsp; <a href='./qualified-table-name.html'>qualified-table-name</a>&nbsp;&nbsp; <a href='./returning-clause.html'>returning-clause</a>&nbsp;&nbsp; <a href='./table-or-subquery.html'>table-or-subquery</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>
+</div>
+
+
+
diff --git a/www/syntax/update-stmt.html b/www/syntax/update-stmt.html
new file mode 100644
index 0000000..d0a375a
--- /dev/null
+++ b/www/syntax/update-stmt.html
@@ -0,0 +1,294 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: update-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>update-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:623px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 623.266 721.926">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,136L114,136A15 15 0 0 0 129 121A15 15 0 0 0 114 106L60,106A15 15 0 0 0 45 121A15 15 0 0 0 60 136Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="45,121 33,125 33,116" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,106 Q 24,121 31,121 L 39,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,299 159,303 159,295" style="fill:rgb(0,0,0)"/>
+<path d="M129,121 L 137,121 Q 144,121 144,136 L 144,284 Q 144,299 155,299 L 165,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,314L193,314A15 15 0 0 0 208 299A15 15 0 0 0 193 284L186,284A15 15 0 0 0 171 299A15 15 0 0 0 186 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,299 214,303 214,295" style="fill:rgb(0,0,0)"/>
+<path d="M208,299L219,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,314L318,314A15 15 0 0 0 333 299A15 15 0 0 0 318 284L240,284A15 15 0 0 0 225 299A15 15 0 0 0 240 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="279" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="350,299 339,303 339,295" style="fill:rgb(0,0,0)"/>
+<path d="M333,299L344,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,121 380,125 380,116" style="fill:rgb(0,0,0)"/>
+<path d="M350,299 L 358,299 Q 365,299 365,284 L 365,136 Q 365,121 376,121 L 386,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,136L576,136L576,106L392,106Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<path d="M186,276L193,276A15 15 0 0 0 208 261A15 15 0 0 0 193 246L186,246A15 15 0 0 0 171 261A15 15 0 0 0 186 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,261 214,266 214,257" style="fill:rgb(0,0,0)"/>
+<path d="M208,261L219,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,276L304,276A15 15 0 0 0 319 261A15 15 0 0 0 304 246L240,246A15 15 0 0 0 225 261A15 15 0 0 0 240 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="350,261 339,266 339,257" style="fill:rgb(0,0,0)"/>
+<path d="M319,261L344,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,261 L 358,261 Q 365,261 365,254 L 365,246" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,261 159,266 159,257" style="fill:rgb(0,0,0)"/>
+<path d="M144,246 L 144,254 Q 144,261 155,261 L 165,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,239L193,239A15 15 0 0 0 208 224A15 15 0 0 0 193 208L186,208A15 15 0 0 0 171 224A15 15 0 0 0 186 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,224 214,228 214,219" style="fill:rgb(0,0,0)"/>
+<path d="M208,224L219,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,239L292,239A15 15 0 0 0 307 224A15 15 0 0 0 292 208L240,208A15 15 0 0 0 225 224A15 15 0 0 0 240 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="266" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="350,224 339,228 339,219" style="fill:rgb(0,0,0)"/>
+<path d="M307,224L344,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,224 L 358,224 Q 365,224 365,216 L 365,209" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,224 159,228 159,219" style="fill:rgb(0,0,0)"/>
+<path d="M144,208 L 144,216 Q 144,224 155,224 L 165,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,201L193,201A15 15 0 0 0 208 186A15 15 0 0 0 193 171L186,171A15 15 0 0 0 171 186A15 15 0 0 0 186 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,186 214,190 214,181" style="fill:rgb(0,0,0)"/>
+<path d="M208,186L219,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,201L262,201A15 15 0 0 0 277 186A15 15 0 0 0 262 171L240,171A15 15 0 0 0 225 186A15 15 0 0 0 240 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="350,186 339,190 339,181" style="fill:rgb(0,0,0)"/>
+<path d="M277,186L344,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,186 L 358,186 Q 365,186 365,178 L 365,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,186 159,190 159,181" style="fill:rgb(0,0,0)"/>
+<path d="M144,171 L 144,178 Q 144,186 155,186 L 165,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,163L193,163A15 15 0 0 0 208 148A15 15 0 0 0 193 133L186,133A15 15 0 0 0 171 148A15 15 0 0 0 186 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,148 214,152 214,144" style="fill:rgb(0,0,0)"/>
+<path d="M208,148L219,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,163L282,163A15 15 0 0 0 297 148A15 15 0 0 0 282 133L240,133A15 15 0 0 0 225 148A15 15 0 0 0 240 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="350,148 339,152 339,144" style="fill:rgb(0,0,0)"/>
+<path d="M297,148L344,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,148 L 358,148 Q 365,148 365,140 L 365,133" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,148 159,152 159,144" style="fill:rgb(0,0,0)"/>
+<path d="M144,133 L 144,140 Q 144,148 155,148 L 165,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="350,121 339,125 339,116" style="fill:rgb(0,0,0)"/>
+<path d="M129,121L344,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,121L380,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,375 39,379 39,370" style="fill:rgb(0,0,0)"/>
+<path d="M576,121 L 584,121 Q 591,121 591,136 L 591,322 Q 591,337 576,337 L 39,337 Q 24,337 24,352 L 24,360 Q 24,375 34,375 L 45,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,390L81,390A15 15 0 0 0 96 375A15 15 0 0 0 81 360L65,360A15 15 0 0 0 50 375A15 15 0 0 0 65 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="73" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="153,413 141,417 141,408" style="fill:rgb(0,0,0)"/>
+<path d="M96,375 L 111,375 Q 126,375 126,390 L 126,398 Q 126,413 136,413 L 147,413" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,428L309,428L309,397L153,397Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="413" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="350,375 339,379 339,370" style="fill:rgb(0,0,0)"/>
+<path d="M309,413 L 316,413 Q 324,413 324,398 L 324,390 Q 324,375 334,375 L 344,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,390A15 15 0 0 0 380 375A15 15 0 0 0 365 360A15 15 0 0 0 350 375A15 15 0 0 0 365 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="375" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="404,375 392,379 392,370" style="fill:rgb(0,0,0)"/>
+<path d="M380,375L398,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,390L453,390L453,360L404,360Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="428" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="153,375 141,379 141,370" style="fill:rgb(0,0,0)"/>
+<path d="M96,375L147,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,390L262,390A15 15 0 0 0 277 375A15 15 0 0 0 262 360L168,360A15 15 0 0 0 153 375A15 15 0 0 0 168 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M277,375L339,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,465A15 15 0 0 0 266 450A15 15 0 0 0 251 435A15 15 0 0 0 236 450A15 15 0 0 0 251 465Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="450" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="266,450 277,446 277,455" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,435 Q 468,450 453,450 L 287,450 L 272,450" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,450 L 117,450 Q 102,450 102,435 L 102,390 Q 102,375 117,375 L 117,375 L 132,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="251,488 262,484 262,492" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,473 Q 468,488 453,488 L 271,488 L 256,488" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,488 L 39,488 Q 24,488 24,503 L 24,511 Q 24,526 37,526 L 50,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,541L100,541A15 15 0 0 0 115 526A15 15 0 0 0 100 511L65,511A15 15 0 0 0 50 526A15 15 0 0 0 65 541Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="187,526 176,530 176,522" style="fill:rgb(0,0,0)"/>
+<path d="M115,526L182,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,541L348,541L348,511L187,511Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M268,579A15 15 0 0 0 283 564A15 15 0 0 0 268 549A15 15 0 0 0 253 564A15 15 0 0 0 268 579Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="564" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="283,564 295,559 295,568" style="fill:rgb(0,0,0)"/>
+<path d="M348,526 L 356,526 Q 363,526 363,541 L 363,549 Q 363,564 348,564 L 304,564 L 289,564" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,564 L 176,564 Q 161,564 161,549 L 161,541 Q 161,526 168,526 L 176,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,602 176,606 176,597" style="fill:rgb(0,0,0)"/>
+<path d="M115,526 L 123,526 Q 130,526 130,541 L 130,587 Q 130,602 145,602 L 167,602 L 182,602" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,617L290,617L290,586L187,586Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="239" y="602" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<polygon points="405,526 393,530 393,522" style="fill:rgb(0,0,0)"/>
+<path d="M290,602 L 363,602 Q 378,602 378,587 L 378,541 Q 378,526 389,526 L 399,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="244,639 255,635 255,644" style="fill:rgb(0,0,0)"/>
+<path d="M405,526 L 412,526 Q 420,526 420,541 L 420,624 Q 420,639 405,639 L 265,639 L 250,639" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,526L393,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,677 39,681 39,673" style="fill:rgb(0,0,0)"/>
+<path d="M244,639 L 39,639 Q 24,639 24,654 L 24,662 Q 24,677 34,677 L 45,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,692L115,692A15 15 0 0 0 130 677A15 15 0 0 0 115 662L66,662A15 15 0 0 0 50 677A15 15 0 0 0 66 692Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="153,677 142,681 142,673" style="fill:rgb(0,0,0)"/>
+<path d="M130,677L147,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,692L202,692L202,662L153,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="178" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="24,586 20,575 28,575" style="fill:rgb(0,0,0)"/>
+<path d="M24,511L24,581" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,586L24,662" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,715 602,719 602,711" style="fill:rgb(0,0,0)"/>
+<path d="M24,662 L 24,700 Q 24,715 39,715 L 593,715 L 608,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="715" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="253,715 242,719 242,711" style="fill:rgb(0,0,0)"/>
+<path d="M202,677 L 210,677 Q 217,677 217,692 L 217,700 Q 217,715 232,715 L 233,715 L 248,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,677 283,681 283,673" style="fill:rgb(0,0,0)"/>
+<path d="M253,715 L 261,715 Q 268,715 268,700 L 268,692 Q 268,677 279,677 L 289,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,692L446,692L446,662L295,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="370" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="497,715 485,719 485,711" style="fill:rgb(0,0,0)"/>
+<path d="M446,677 L 453,677 Q 461,677 461,692 L 461,700 Q 461,715 476,715 L 476,715 L 491,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./create-trigger-stmt.html'>create-trigger-stmt</a>&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./column-name-list.html'>column-name-list</a>&nbsp;&nbsp; <a href='./common-table-expression.html'>common-table-expression</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./join-clause.html'>join-clause</a>&nbsp;&nbsp; <a href='./qualified-table-name.html'>qualified-table-name</a>&nbsp;&nbsp; <a href='./returning-clause.html'>returning-clause</a>&nbsp;&nbsp; <a href='./table-or-subquery.html'>table-or-subquery</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>
+</div>
+
+
+
diff --git a/www/syntax/upsert-clause.html b/www/syntax/upsert-clause.html
new file mode 100644
index 0000000..739ab66
--- /dev/null
+++ b/www/syntax/upsert-clause.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: upsert-clause</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>upsert-clause</h1>
+<div class='imgcontainer'>
+<div style="max-width:901px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 901.142 363.96">
+<path d="M223,165L759,165L759,51L223,51Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="5" cy="66" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,66 35,71 35,62" style="fill:rgb(0,0,0)"/>
+<path d="M9,66L41,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,82L71,82A15 15 0 0 0 86 66A15 15 0 0 0 71 51L62,51A15 15 0 0 0 47 66A15 15 0 0 0 62 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="103,66 92,71 92,62" style="fill:rgb(0,0,0)"/>
+<path d="M86,66L98,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M118,82L193,82A15 15 0 0 0 208 66A15 15 0 0 0 193 51L118,51A15 15 0 0 0 103 66A15 15 0 0 0 118 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="264,97 253,101 253,92" style="fill:rgb(0,0,0)"/>
+<path d="M208,66 L 223,66 Q 238,66 238,81 L 238,82 Q 238,97 248,97 L 259,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M280,112A15 15 0 0 0 295 97L295,97A15 15 0 0 0 280 82A15 15 0 0 0 264 97L264,97A15 15 0 0 0 280 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="97" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="331,97 319,101 319,92" style="fill:rgb(0,0,0)"/>
+<path d="M295,97L325,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M331,112L475,112L475,82L331,82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="97" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="511,97 500,101 500,92" style="fill:rgb(0,0,0)"/>
+<path d="M475,97L506,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M526,112A15 15 0 0 0 542 97L542,97A15 15 0 0 0 526 82A15 15 0 0 0 511 97L511,97A15 15 0 0 0 526 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="526" y="97" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="583,135 572,139 572,130" style="fill:rgb(0,0,0)"/>
+<path d="M542,97 L 549,97 Q 557,97 557,112 L 557,119 Q 557,135 567,135 L 577,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M598,150L648,150A15 15 0 0 0 663 135A15 15 0 0 0 648 119L598,119A15 15 0 0 0 583 135A15 15 0 0 0 598 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="623" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="680,135 669,139 669,130" style="fill:rgb(0,0,0)"/>
+<path d="M663,135L674,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M680,150L729,150L729,119L680,119Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="744,108 749,119 740,119" style="fill:rgb(0,0,0)"/>
+<path d="M729,135 L 737,135 Q 744,135 744,124 L 744,114" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="786,66 774,71 774,62" style="fill:rgb(0,0,0)"/>
+<path d="M744,108 L 744,81 Q 744,66 759,66 L 765,66 L 780,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M801,82L809,82A15 15 0 0 0 824 66A15 15 0 0 0 809 51L801,51A15 15 0 0 0 786 66A15 15 0 0 0 801 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="805" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DO</text>
+<polygon points="729,97 718,101 718,92" style="fill:rgb(0,0,0)"/>
+<path d="M542,97L723,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,97 L 737,97 Q 744,97 744,89 L 744,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M208,66L774,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,150A15 15 0 0 0 418 135A15 15 0 0 0 403 119A15 15 0 0 0 388 135A15 15 0 0 0 403 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="135" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,135 430,130 430,139" style="fill:rgb(0,0,0)"/>
+<path d="M475,97 L 483,97 Q 490,97 490,112 L 490,119 Q 490,135 475,135 L 439,135 L 424,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,135 L 319,135 Q 304,135 304,119 L 304,112 Q 304,97 312,97 L 319,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="288" y="36" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" dominant-baseline="central">conflict target</text>
+<polygon points="436,195 447,191 447,199" style="fill:rgb(0,0,0)"/>
+<path d="M824,66 L 831,66 Q 839,66 839,81 L 839,180 Q 839,195 824,195 L 456,195 L 441,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,271 35,275 35,266" style="fill:rgb(0,0,0)"/>
+<path d="M436,195 L 35,195 Q 20,195 20,210 L 20,256 Q 20,271 31,271 L 41,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,286L116,286A15 15 0 0 0 131 271A15 15 0 0 0 116 255L62,255A15 15 0 0 0 47 271A15 15 0 0 0 62 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="89" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="148,271 137,275 137,266" style="fill:rgb(0,0,0)"/>
+<path d="M131,271L143,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M164,286L179,286A15 15 0 0 0 194 271A15 15 0 0 0 179 255L164,255A15 15 0 0 0 148 271A15 15 0 0 0 164 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="171" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="257,308 245,313 245,304" style="fill:rgb(0,0,0)"/>
+<path d="M194,271 L 215,271 Q 230,271 230,286 L 230,293 Q 230,308 241,308 L 251,308" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,324L413,324L413,293L257,293Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="335" y="308" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="475,271 464,275 464,266" style="fill:rgb(0,0,0)"/>
+<path d="M413,308 L 434,308 Q 449,308 449,293 L 449,286 Q 449,271 459,271 L 469,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,286A15 15 0 0 0 505 271A15 15 0 0 0 490 255A15 15 0 0 0 475 271A15 15 0 0 0 490 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="523,271 511,275 511,266" style="fill:rgb(0,0,0)"/>
+<path d="M505,271L517,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M523,286L572,286L572,255L523,255Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="547" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="619,271 608,275 608,266" style="fill:rgb(0,0,0)"/>
+<path d="M572,271L613,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M634,286L684,286A15 15 0 0 0 699 271A15 15 0 0 0 684 255L634,255A15 15 0 0 0 619 271A15 15 0 0 0 634 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="659" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="716,271 705,275 705,266" style="fill:rgb(0,0,0)"/>
+<path d="M699,271L710,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M716,286L765,286L765,255L716,255Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="741" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="891,233 880,237 880,228" style="fill:rgb(0,0,0)"/>
+<path d="M765,271 L 773,271 Q 780,271 780,256 L 780,248 Q 780,233 795,233 L 871,233 L 886,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="895" cy="233" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,248L130,248A15 15 0 0 0 145 233A15 15 0 0 0 130 218L62,218A15 15 0 0 0 47 233A15 15 0 0 0 62 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="96" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTHING</text>
+<polygon points="47,233 35,237 35,228" style="fill:rgb(0,0,0)"/>
+<path d="M20,218 L 20,225 Q 20,233 31,233 L 41,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,233L880,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="638,233 626,237 626,228" style="fill:rgb(0,0,0)"/>
+<path d="M587,271 L 594,271 Q 602,271 602,256 L 602,248 Q 602,233 617,233 L 617,233 L 632,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M383,361A15 15 0 0 0 398 346A15 15 0 0 0 383 331A15 15 0 0 0 368 346A15 15 0 0 0 383 361Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="383" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="398,346 410,342 410,351" style="fill:rgb(0,0,0)"/>
+<path d="M572,271 L 579,271 Q 587,271 587,286 L 587,331 Q 587,346 572,346 L 419,346 L 404,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,308 210,320 201,320" style="fill:rgb(0,0,0)"/>
+<path d="M368,346 L 221,346 Q 206,346 206,331 L 206,329 L 206,314" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,308 L 206,286 Q 206,271 221,271 L 227,271 L 242,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="257,271 245,275 245,266" style="fill:rgb(0,0,0)"/>
+<path d="M194,271L251,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,286L366,286A15 15 0 0 0 381 271A15 15 0 0 0 366 255L272,255A15 15 0 0 0 257 271A15 15 0 0 0 272 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M381,271L464,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="865,97 869,108 860,108" style="fill:rgb(0,0,0)"/>
+<path d="M850,233 L 857,233 Q 865,233 865,218 L 865,117 L 865,102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="403,6 415,2 415,10" style="fill:rgb(0,0,0)"/>
+<path d="M865,97 L 865,21 Q 865,6 850,6 L 424,6 L 409,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,6 L 40,6 Q 25,6 25,21 L 25,51 Q 25,66 32,66 L 40,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./insert-stmt.html'>insert-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href='./column-name-list.html'>column-name-list</a>&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./indexed-column.html'>indexed-column</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>
+</div>
+
+
+
diff --git a/www/syntax/vacuum-stmt.html b/www/syntax/vacuum-stmt.html
new file mode 100644
index 0000000..b3af5a8
--- /dev/null
+++ b/www/syntax/vacuum-stmt.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: vacuum-stmt</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>vacuum-stmt</h1>
+<div class='imgcontainer'>
+<div style="max-width:599px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 599.669 64.8">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L108,32A15 15 0 0 0 123 17A15 15 0 0 0 108 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="78" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VACUUM</text>
+<polygon points="165,47 153,51 153,43" style="fill:rgb(0,0,0)"/>
+<path d="M123,17 L 131,17 Q 138,17 138,32 L 138,32 Q 138,47 149,47 L 159,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,62L276,62A15 15 0 0 0 292 47L292,47A15 15 0 0 0 276 32L180,32A15 15 0 0 0 165 47L165,47A15 15 0 0 0 180 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="333,17 322,21 322,12" style="fill:rgb(0,0,0)"/>
+<path d="M292,47 L 299,47 Q 307,47 307,32 L 307,32 Q 307,17 317,17 L 327,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="375,47 363,51 363,43" style="fill:rgb(0,0,0)"/>
+<path d="M333,17 L 341,17 Q 348,17 348,32 L 348,32 Q 348,47 359,47 L 369,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M390,62L417,62A15 15 0 0 0 432 47L432,47A15 15 0 0 0 417 32L390,32A15 15 0 0 0 375 47L375,47A15 15 0 0 0 390 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTO</text>
+<polygon points="455,47 443,51 443,43" style="fill:rgb(0,0,0)"/>
+<path d="M432,47L449,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,62L524,62A15 15 0 0 0 539 47L539,47A15 15 0 0 0 524 32L470,32A15 15 0 0 0 455 47L455,47A15 15 0 0 0 470 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="497" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filename</text>
+<polygon points="590,17 578,21 578,12" style="fill:rgb(0,0,0)"/>
+<path d="M539,47 L 546,47 Q 554,47 554,32 L 554,32 Q 554,17 569,17 L 569,17 L 584,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="593" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M123,17L578,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./sql-stmt.html'>sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_vacuum.html'>lang_vacuum.html</a>
+</div>
+
+
+
diff --git a/www/syntax/window-defn.html b/www/syntax/window-defn.html
new file mode 100644
index 0000000..4534016
--- /dev/null
+++ b/www/syntax/window-defn.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: window-defn</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>window-defn</h1>
+<div class='imgcontainer'>
+<div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+
+Used by:&nbsp;&nbsp; <a href='./select-core.html'>select-core</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a>&nbsp;&nbsp; <a href='./window-function-invocation.html'>window-function-invocation</a><br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./frame-spec.html'>frame-spec</a>&nbsp;&nbsp; <a href='./ordering-term.html'>ordering-term</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_aggfunc.html'>lang_aggfunc.html</a>&nbsp;&nbsp; <a href='../lang_altertable.html'>lang_altertable.html</a>&nbsp;&nbsp; <a href='../lang_attach.html'>lang_attach.html</a>&nbsp;&nbsp; <a href='../lang_createindex.html'>lang_createindex.html</a>&nbsp;&nbsp; <a href='../lang_createtable.html'>lang_createtable.html</a>&nbsp;&nbsp; <a href='../lang_createtrigger.html'>lang_createtrigger.html</a>&nbsp;&nbsp; <a href='../lang_createview.html'>lang_createview.html</a>&nbsp;&nbsp; <a href='../lang_delete.html'>lang_delete.html</a>&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>&nbsp;&nbsp; <a href='../lang_insert.html'>lang_insert.html</a>&nbsp;&nbsp; <a href='../lang_returning.html'>lang_returning.html</a>&nbsp;&nbsp; <a href='../lang_select.html'>lang_select.html</a>&nbsp;&nbsp; <a href='../lang_update.html'>lang_update.html</a>&nbsp;&nbsp; <a href='../lang_upsert.html'>lang_upsert.html</a>&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>&nbsp;&nbsp; <a href='../partialindex.html'>partialindex.html</a>
+</div>
+
+
+
diff --git a/www/syntax/window-function-invocation.html b/www/syntax/window-function-invocation.html
new file mode 100644
index 0000000..1397f6a
--- /dev/null
+++ b/www/syntax/window-function-invocation.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: window-function-invocation</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>window-function-invocation</h1>
+<div class='imgcontainer'>
+<div style="max-width:870px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 870.446 132.84">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,55 20,59 20,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L26,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,70L135,70A15 15 0 0 0 150 55A15 15 0 0 0 135 39L47,39A15 15 0 0 0 32 55A15 15 0 0 0 47 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="91" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-func</text>
+<polygon points="167,55 156,59 156,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,55L161,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,70A15 15 0 0 0 197 55A15 15 0 0 0 182 39A15 15 0 0 0 167 55A15 15 0 0 0 182 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="182" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="251,55 240,59 240,50" style="fill:rgb(0,0,0)"/>
+<path d="M197,55L246,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,70L300,70L300,39L251,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="354,55 343,59 343,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L349,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M370,70A15 15 0 0 0 385 55A15 15 0 0 0 370 39A15 15 0 0 0 354 55A15 15 0 0 0 370 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="370" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="426,85 415,89 415,81" style="fill:rgb(0,0,0)"/>
+<path d="M385,55 L 392,55 Q 400,55 400,70 L 400,70 Q 400,85 410,85 L 420,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M426,100L538,100L538,70L426,70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="580,55 568,59 568,50" style="fill:rgb(0,0,0)"/>
+<path d="M538,85 L 546,85 Q 553,85 553,70 L 553,70 Q 553,55 564,55 L 574,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,70L626,70A15 15 0 0 0 641 55A15 15 0 0 0 626 39L595,39A15 15 0 0 0 580 55A15 15 0 0 0 595 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="610" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="682,92 671,97 671,88" style="fill:rgb(0,0,0)"/>
+<path d="M641,55 L 648,55 Q 656,55 656,70 L 656,77 Q 656,92 666,92 L 677,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M697,108L794,108A15 15 0 0 0 810 92L810,92A15 15 0 0 0 794 77L697,77A15 15 0 0 0 682 92L682,92A15 15 0 0 0 697 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="746" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="861,55 849,59 849,50" style="fill:rgb(0,0,0)"/>
+<path d="M810,92 L 817,92 Q 825,92 825,77 L 825,70 Q 825,55 840,55 L 840,55 L 855,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="864" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M385,55L568,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="682,55 671,59 671,50" style="fill:rgb(0,0,0)"/>
+<path d="M641,55L677,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M682,70L801,70L801,39L682,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="742" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M801,55L849,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32A15 15 0 0 0 291 17L291,17A15 15 0 0 0 276 2A15 15 0 0 0 261 17L261,17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="291,17 303,12 303,21" style="fill:rgb(0,0,0)"/>
+<path d="M300,55 L 308,55 Q 315,55 315,40 L 315,32 Q 315,17 306,17 L 297,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,17 L 240,17 Q 225,17 225,32 L 225,40 Q 225,55 232,55 L 240,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="276,85 264,89 264,81" style="fill:rgb(0,0,0)"/>
+<path d="M197,55 L 205,55 Q 212,55 212,70 L 212,70 Q 212,85 227,85 L 255,85 L 270,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,85 L 313,85 Q 328,85 328,70 L 328,70 Q 328,55 335,55 L 343,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130A15 15 0 0 0 291 115L291,115A15 15 0 0 0 276 100A15 15 0 0 0 261 115L261,115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M197,55 L 205,55 Q 212,55 212,70 L 212,100 Q 212,115 227,115 L 240,115 L 255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,115 L 313,115 Q 328,115 328,100 L 328,70 Q 328,55 335,55 L 343,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+References:&nbsp;&nbsp; <a href='./expr.html'>expr</a>&nbsp;&nbsp; <a href='./filter-clause.html'>filter-clause</a>&nbsp;&nbsp; <a href='./window-defn.html'>window-defn</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_expr.html'>lang_expr.html</a>
+</div>
+
+
+
diff --git a/www/syntax/with-clause.html b/www/syntax/with-clause.html
new file mode 100644
index 0000000..af1c2f7
--- /dev/null
+++ b/www/syntax/with-clause.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="../sqlite.css" rel="stylesheet">
+<title>SQLite Syntax: with-clause</title>
+<!-- path=../ -->
+</head>
+<body>
+<div class=nosearch>
+<a href="../index.html">
+<img class="logo" src="../images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="../index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='../about.html'>About</a>
+<li class='desktoponly'><a href="../docs.html">Documentation</a>
+<li class='desktoponly'><a href="../download.html">Download</a>
+<li class='wideonly'><a href='../copyright.html'>License</a>
+<li class='desktoponly'><a href="../support.html">Support</a>
+<li class='desktoponly'><a href="../prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='../about.html'>About</a>
+<li><a href='../docs.html'>Documentation</a>
+<li><a href='../download.html'>Download</a>
+<li><a href='../support.html'>Support</a>
+<li><a href='../prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="../search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<h1 align='center'>with-clause</h1>
+<div class='imgcontainer'>
+<div style="max-width:1056px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1056.72 140.4">
+<circle cx="5" cy="85" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,85 20,89 20,81" style="fill:rgb(0,0,0)"/>
+<path d="M9,85L26,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,100L78,100A15 15 0 0 0 93 85A15 15 0 0 0 78 70L47,70A15 15 0 0 0 32 85A15 15 0 0 0 47 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,85 L 100,85 Q 108,85 108,70 L 108,70 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M150,70L235,70A15 15 0 0 0 250 55L250,55A15 15 0 0 0 235 39L150,39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 150 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<path d="M250,55 L 258,55 Q 265,55 265,70 L 265,70 Q 265,85 273,85 L 280,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,85 295,89 295,81" style="fill:rgb(0,0,0)"/>
+<path d="M280,85L301,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,100L444,100L444,70L307,70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">cte-table-name</text>
+<polygon points="467,85 455,89 455,81" style="fill:rgb(0,0,0)"/>
+<path d="M444,85L461,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M482,100L486,100A15 15 0 0 0 501 85A15 15 0 0 0 486 70L482,70A15 15 0 0 0 467 85A15 15 0 0 0 482 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="542,17 531,21 531,12" style="fill:rgb(0,0,0)"/>
+<path d="M501,85 L 508,85 Q 516,85 516,70 L 516,32 Q 516,17 526,17 L 537,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,32L578,32A15 15 0 0 0 593 17L593,17A15 15 0 0 0 578 2L558,2A15 15 0 0 0 542 17L542,17A15 15 0 0 0 558 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="568" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M593,17L604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M625,32L743,32A15 15 0 0 0 759 17L759,17A15 15 0 0 0 743 2L625,2A15 15 0 0 0 610 17L610,17A15 15 0 0 0 625 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="684" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<polygon points="800,85 789,89 789,81" style="fill:rgb(0,0,0)"/>
+<path d="M759,17 L 766,17 Q 774,17 774,32 L 774,70 Q 774,85 784,85 L 794,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M815,100A15 15 0 0 0 830 85A15 15 0 0 0 815 70A15 15 0 0 0 800 85A15 15 0 0 0 815 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="815" y="85" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="853,85 842,89 842,81" style="fill:rgb(0,0,0)"/>
+<path d="M830,85L848,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M853,100L958,100L958,70L853,70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="905" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="981,85 969,89 969,81" style="fill:rgb(0,0,0)"/>
+<path d="M958,85L975,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M996,100A15 15 0 0 0 1011 85A15 15 0 0 0 996 70A15 15 0 0 0 981 85A15 15 0 0 0 996 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="996" y="85" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="1047,85 1035,89 1035,81" style="fill:rgb(0,0,0)"/>
+<path d="M1011,85L1041,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="1050" cy="85" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="542,56 531,60 531,52" style="fill:rgb(0,0,0)"/>
+<path d="M501,85 L 508,85 Q 516,85 516,70 Q 516,56 526,56 L 537,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,71L676,71A15 15 0 0 0 691 56A15 15 0 0 0 676 41L558,41A15 15 0 0 0 542 56A15 15 0 0 0 558 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<polygon points="759,56 747,60 747,52" style="fill:rgb(0,0,0)"/>
+<path d="M691,56L753,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,56 L 766,56 Q 774,56 774,64 L 774,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="617,85 605,89 605,81" style="fill:rgb(0,0,0)"/>
+<path d="M501,85L611,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M617,85L800,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M659,138A15 15 0 0 0 674 123L674,123A15 15 0 0 0 659 108A15 15 0 0 0 644 123L644,123A15 15 0 0 0 659 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="659" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="674,123 686,118 686,127" style="fill:rgb(0,0,0)"/>
+<path d="M1011,85 L 1018,85 Q 1026,85 1026,100 L 1026,108 Q 1026,123 1011,123 L 695,123 L 680,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,123 L 295,123 Q 280,123 280,108 L 280,100 Q 280,85 288,85 L 295,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,85L295,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div><br>
+<br></br>
+References:&nbsp;&nbsp; <a href='./cte-table-name.html'>cte-table-name</a>&nbsp;&nbsp; <a href='./select-stmt.html'>select-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href='../lang_with.html'>lang_with.html</a>
+</div>
+
+
+
diff --git a/www/syntaxdiagrams.html b/www/syntaxdiagrams.html
new file mode 100644
index 0000000..0e70340
--- /dev/null
+++ b/www/syntaxdiagrams.html
@@ -0,0 +1,6501 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Syntax Diagrams For SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align=center>Syntax Diagrams For SQLite</h1>
+
+<a name="aggregate-function-invocation"></a><h4>aggregate-function-invocation:</h4><div class='imgcontainer'>
+<div style="max-width:819px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 819.533 117.504">
+<circle cx="5" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,56 20,60 20,52" style="fill:rgb(0,0,0)"/>
+<path d="M9,56L26,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,71L156,71A15 15 0 0 0 171 56A15 15 0 0 0 156 41L47,41A15 15 0 0 0 32 56A15 15 0 0 0 47 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="102" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">aggregate-func</text>
+<polygon points="189,56 178,60 178,52" style="fill:rgb(0,0,0)"/>
+<path d="M171,56L183,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M204,71A15 15 0 0 0 219 56A15 15 0 0 0 204 41A15 15 0 0 0 189 56A15 15 0 0 0 204 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="242,56 231,60 231,52" style="fill:rgb(0,0,0)"/>
+<path d="M219,56L237,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="277,26 265,30 265,22" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,41 L 254,41 Q 254,26 263,26 L 271,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M292,41L360,41A15 15 0 0 0 376 26L376,26A15 15 0 0 0 360 11L292,11A15 15 0 0 0 277 26L277,26A15 15 0 0 0 292 41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="26" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="394,26 382,30 382,22" style="fill:rgb(0,0,0)"/>
+<path d="M376,26L388,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="428,56 417,60 417,52" style="fill:rgb(0,0,0)"/>
+<path d="M394,26 L 399,26 Q 405,26 405,41 L 405,41 Q 405,56 414,56 L 422,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,56 453,60 453,52" style="fill:rgb(0,0,0)"/>
+<path d="M428,56L458,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M464,71L513,71L513,41L464,41Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="567,56 556,60 556,52" style="fill:rgb(0,0,0)"/>
+<path d="M513,56L562,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,71A15 15 0 0 0 598 56A15 15 0 0 0 582 41A15 15 0 0 0 567 56A15 15 0 0 0 582 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="56" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="644,86 632,91 632,82" style="fill:rgb(0,0,0)"/>
+<path d="M598,56 L 609,56 Q 621,56 621,71 L 621,71 Q 621,86 629,86 L 638,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,101L756,101L756,71L644,71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="700" y="86" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="810,56 798,60 798,52" style="fill:rgb(0,0,0)"/>
+<path d="M756,86 L 765,86 Q 774,86 774,71 L 774,71 Q 774,56 789,56 L 789,56 L 804,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="813" cy="56" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="700,56 688,60 688,52" style="fill:rgb(0,0,0)"/>
+<path d="M598,56L694,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="810,56 798,60 798,52" style="fill:rgb(0,0,0)"/>
+<path d="M700,56L804,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="326,56 315,60 315,52" style="fill:rgb(0,0,0)"/>
+<path d="M242,56L321,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="428,56 417,60 417,52" style="fill:rgb(0,0,0)"/>
+<path d="M326,56L422,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,32A15 15 0 0 0 504 17A15 15 0 0 0 489 2A15 15 0 0 0 474 17A15 15 0 0 0 489 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="504,17 515,12 515,21" style="fill:rgb(0,0,0)"/>
+<path d="M513,56 L 525,56 Q 536,56 536,41 L 536,32 Q 536,17 523,17 L 510,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,56 453,60 453,52" style="fill:rgb(0,0,0)"/>
+<path d="M474,17 L 456,17 Q 441,17 441,32 L 441,41 Q 441,56 450,56 L 458,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,101A15 15 0 0 0 408 86L408,86A15 15 0 0 0 393 71A15 15 0 0 0 378 86L378,86A15 15 0 0 0 393 101Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="393" y="86" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="378,86 367,91 367,82" style="fill:rgb(0,0,0)"/>
+<path d="M242,56 L 248,56 Q 254,56 254,71 L 254,71 Q 254,86 269,86 L 357,86 L 372,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,86 477,91 477,82" style="fill:rgb(0,0,0)"/>
+<path d="M408,86L483,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,86 L 525,86 Q 540,86 540,71 L 540,71 Q 540,56 546,56 L 552,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="393,111 382,115 382,106" style="fill:rgb(0,0,0)"/>
+<path d="M326,86 L 332,86 Q 338,86 338,98 Q 338,111 353,111 L 373,111 L 388,111" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,111 L 414,111 Q 429,111 429,98 Q 429,86 435,86 L 441,86" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#filter-clause">filter-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+</div>
+
+<a name="alter-table-stmt"></a><h4>alter-table-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:754px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 754.521 320.904">
+<circle cx="5" cy="32" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="37,32 26,37 26,28" style="fill:rgb(0,0,0)"/>
+<path d="M9,32L31,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M37,32L59,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47L113,47A15 15 0 0 0 129 32A15 15 0 0 0 113 17L74,17A15 15 0 0 0 59 32A15 15 0 0 0 74 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="94" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALTER</text>
+<polygon points="165,32 153,37 153,28" style="fill:rgb(0,0,0)"/>
+<path d="M129,32L159,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,47L219,47A15 15 0 0 0 234 32A15 15 0 0 0 219 17L180,17A15 15 0 0 0 165 32A15 15 0 0 0 180 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="251,32 240,37 240,28" style="fill:rgb(0,0,0)"/>
+<path d="M234,32L245,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="287,32 276,37 276,28" style="fill:rgb(0,0,0)"/>
+<path d="M251,32L281,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,47L399,47A15 15 0 0 0 414 32A15 15 0 0 0 399 17L302,17A15 15 0 0 0 287 32A15 15 0 0 0 302 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="436,32 425,37 425,28" style="fill:rgb(0,0,0)"/>
+<path d="M414,32L431,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M452,47A15 15 0 0 0 467 32A15 15 0 0 0 452 17A15 15 0 0 0 436 32A15 15 0 0 0 452 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="452" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="503,32 491,37 491,28" style="fill:rgb(0,0,0)"/>
+<path d="M467,32L497,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M518,47L593,47A15 15 0 0 0 608 32A15 15 0 0 0 593 17L518,17A15 15 0 0 0 503 32A15 15 0 0 0 518 47Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="555" y="32" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="376,6 364,10 364,2" style="fill:rgb(0,0,0)"/>
+<path d="M251,32 L 260,32 Q 268,32 268,19 Q 268,6 283,6 L 355,6 L 370,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,6 L 461,6 Q 476,6 476,19 Q 476,32 489,32 L 503,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="626,56 622,45 630,45" style="fill:rgb(0,0,0)"/>
+<path d="M608,32 L 617,32 Q 626,32 626,41 L 626,51" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,81 362,76 362,85" style="fill:rgb(0,0,0)"/>
+<path d="M626,56 L 626,68 Q 626,81 611,81 L 371,81 L 356,81" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,81 L 20,81 Q 5,81 5,88 L 5,96" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="41,126 30,130 30,122" style="fill:rgb(0,0,0)"/>
+<path d="M5,96 L 5,111 Q 5,126 20,126 L 20,126 L 36,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,141L117,141A15 15 0 0 0 132 126A15 15 0 0 0 117 111L56,111A15 15 0 0 0 41 126A15 15 0 0 0 56 141Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="126" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RENAME</text>
+<polygon points="150,126 139,130 139,122" style="fill:rgb(0,0,0)"/>
+<path d="M132,126L144,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,141L171,141A15 15 0 0 0 186 126A15 15 0 0 0 171 111L165,111A15 15 0 0 0 150 126A15 15 0 0 0 165 141Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="126" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TO</text>
+<polygon points="204,126 193,130 193,122" style="fill:rgb(0,0,0)"/>
+<path d="M186,126L198,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,141L334,141A15 15 0 0 0 349 126A15 15 0 0 0 334 111L219,111A15 15 0 0 0 204 126A15 15 0 0 0 219 141Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="277" y="126" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">new-table-name</text>
+<polygon points="41,171 30,176 30,167" style="fill:rgb(0,0,0)"/>
+<path d="M5,96 L 5,156 Q 5,171 20,171 L 21,171 L 36,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,186L117,186A15 15 0 0 0 132 171A15 15 0 0 0 117 156L56,156A15 15 0 0 0 41 171A15 15 0 0 0 56 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RENAME</text>
+<polygon points="149,171 138,176 138,167" style="fill:rgb(0,0,0)"/>
+<path d="M132,171L143,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="185,171 174,176 174,167" style="fill:rgb(0,0,0)"/>
+<path d="M149,171L179,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,186L263,186A15 15 0 0 0 278 171A15 15 0 0 0 263 156L200,156A15 15 0 0 0 185 171A15 15 0 0 0 200 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="232" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLUMN</text>
+<polygon points="314,171 303,176 303,167" style="fill:rgb(0,0,0)"/>
+<path d="M278,171L308,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M329,186L423,186A15 15 0 0 0 439 171A15 15 0 0 0 423 156L329,156A15 15 0 0 0 314 171A15 15 0 0 0 329 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="376" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="457,171 445,176 445,167" style="fill:rgb(0,0,0)"/>
+<path d="M439,171L451,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,186L477,186A15 15 0 0 0 492 171A15 15 0 0 0 477 156L472,156A15 15 0 0 0 457 171A15 15 0 0 0 472 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="475" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TO</text>
+<polygon points="510,171 499,176 499,167" style="fill:rgb(0,0,0)"/>
+<path d="M492,171L505,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M526,186L660,186A15 15 0 0 0 675 171A15 15 0 0 0 660 156L526,156A15 15 0 0 0 510 171A15 15 0 0 0 526 186Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="171" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">new-column-name</text>
+<polygon points="692,171 680,176 680,167" style="fill:rgb(0,0,0)"/>
+<path d="M675,171L686,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="745,126 733,130 733,122" style="fill:rgb(0,0,0)"/>
+<path d="M692,171 L 700,171 Q 709,171 709,156 L 709,141 Q 709,126 724,126 L 724,126 L 739,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="748" cy="126" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="745,126 733,130 733,122" style="fill:rgb(0,0,0)"/>
+<path d="M349,126L739,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="232,198 220,202 220,193" style="fill:rgb(0,0,0)"/>
+<path d="M149,171 L 158,171 Q 166,171 166,184 Q 166,198 181,198 L 211,198 L 226,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="314,171 303,176 303,167" style="fill:rgb(0,0,0)"/>
+<path d="M232,198 L 272,198 Q 287,198 287,184 Q 287,171 298,171 L 308,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="41,232 30,236 30,227" style="fill:rgb(0,0,0)"/>
+<path d="M5,96 L 5,217 Q 5,232 20,232 L 21,232 L 36,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,247L76,247A15 15 0 0 0 91 232A15 15 0 0 0 76 217L56,217A15 15 0 0 0 41 232A15 15 0 0 0 56 247Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="232" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ADD</text>
+<polygon points="108,232 97,236 97,227" style="fill:rgb(0,0,0)"/>
+<path d="M91,232L102,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="144,232 133,236 133,227" style="fill:rgb(0,0,0)"/>
+<path d="M108,232L138,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M159,247L222,247A15 15 0 0 0 237 232A15 15 0 0 0 222 217L159,217A15 15 0 0 0 144 232A15 15 0 0 0 159 247Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="232" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLUMN</text>
+<polygon points="273,232 262,236 262,227" style="fill:rgb(0,0,0)"/>
+<path d="M237,232L267,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,247L378,247L378,217L273,217Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="232" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-def</text>
+<polygon points="692,232 680,236 680,227" style="fill:rgb(0,0,0)"/>
+<path d="M378,232L686,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="191,258 179,262 179,254" style="fill:rgb(0,0,0)"/>
+<path d="M108,232 L 117,232 Q 125,232 125,245 Q 125,258 140,258 L 170,258 L 185,258" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,232 262,236 262,227" style="fill:rgb(0,0,0)"/>
+<path d="M191,258 L 231,258 Q 246,258 246,245 Q 246,232 257,232 L 267,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="745,126 733,130 733,122" style="fill:rgb(0,0,0)"/>
+<path d="M692,232 L 700,232 Q 709,232 709,217 L 709,141 Q 709,126 724,126 L 724,126 L 739,126" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="41,288 30,292 30,283" style="fill:rgb(0,0,0)"/>
+<path d="M5,217 L 5,273 Q 5,288 20,288 L 21,288 L 36,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M56,303L87,303A15 15 0 0 0 103 288A15 15 0 0 0 87 273L56,273A15 15 0 0 0 41 288A15 15 0 0 0 56 303Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="72" y="288" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="120,288 108,292 108,283" style="fill:rgb(0,0,0)"/>
+<path d="M103,288L114,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,288 144,292 144,283" style="fill:rgb(0,0,0)"/>
+<path d="M120,288L150,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M171,303L234,303A15 15 0 0 0 249 288A15 15 0 0 0 234 273L171,273A15 15 0 0 0 156 288A15 15 0 0 0 171 303Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="202" y="288" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLUMN</text>
+<polygon points="285,288 273,292 273,283" style="fill:rgb(0,0,0)"/>
+<path d="M249,288L279,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,303L394,303A15 15 0 0 0 409 288A15 15 0 0 0 394 273L300,273A15 15 0 0 0 285 288A15 15 0 0 0 300 303Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="288" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="692,288 680,292 680,283" style="fill:rgb(0,0,0)"/>
+<path d="M409,288L686,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M692,288 L 700,288 Q 709,288 709,273 L 709,232 L 709,217" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="202,314 191,318 191,310" style="fill:rgb(0,0,0)"/>
+<path d="M120,288 L 127,288 Q 135,288 135,301 Q 135,314 150,314 L 181,314 L 196,314" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M202,314 L 245,314 Q 260,314 260,301 Q 260,288 268,288 L 275,288" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#column-def">column-def</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>
+</div>
+
+<a name="analyze-stmt"></a><h4>analyze-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:654px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 654.557 140.4">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L111,32A15 15 0 0 0 127 17A15 15 0 0 0 111 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="79" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ANALYZE</text>
+<polygon points="150,17 138,21 138,12" style="fill:rgb(0,0,0)"/>
+<path d="M127,17L144,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="188,123 176,127 176,118" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 157,17 Q 165,17 165,32 L 165,108 Q 165,123 173,123 L 182,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M203,138L299,138A15 15 0 0 0 314 123A15 15 0 0 0 299 108L203,108A15 15 0 0 0 188 123A15 15 0 0 0 203 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="337,123 326,127 326,118" style="fill:rgb(0,0,0)"/>
+<path d="M314,123L332,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M352,138A15 15 0 0 0 368 123A15 15 0 0 0 352 108A15 15 0 0 0 337 123A15 15 0 0 0 352 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="352" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="391,123 379,127 379,118" style="fill:rgb(0,0,0)"/>
+<path d="M368,123L385,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M406,138L556,138A15 15 0 0 0 571 123A15 15 0 0 0 556 108L406,108A15 15 0 0 0 391 123A15 15 0 0 0 406 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-index-name</text>
+<polygon points="594,123 582,127 582,118" style="fill:rgb(0,0,0)"/>
+<path d="M571,123L588,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="645,17 633,21 633,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,123 L 601,123 Q 609,123 609,108 L 609,32 Q 609,17 624,17 L 624,17 L 639,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="648" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,17 386,21 386,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L391,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,17L633,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="188,47 176,51 176,43" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 157,17 Q 165,17 165,32 L 165,32 Q 165,47 173,47 L 182,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M203,62L299,62A15 15 0 0 0 314 47L314,47A15 15 0 0 0 299 32L203,32A15 15 0 0 0 188 47L188,47A15 15 0 0 0 203 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="594,47 582,51 582,43" style="fill:rgb(0,0,0)"/>
+<path d="M314,47L588,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M594,47 L 601,47 Q 609,47 609,40 L 609,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="188,85 176,89 176,81" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 157,17 Q 165,17 165,32 L 165,70 Q 165,85 173,85 L 182,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M203,100L353,100A15 15 0 0 0 368 85A15 15 0 0 0 353 70L203,70A15 15 0 0 0 188 85A15 15 0 0 0 203 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-or-table-name</text>
+<polygon points="594,85 582,89 582,81" style="fill:rgb(0,0,0)"/>
+<path d="M368,85L588,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M594,85 L 601,85 Q 609,85 609,77 L 609,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_analyze.html">lang_analyze.html</a>
+</div>
+
+<a name="attach-stmt"></a><h4>attach-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:606px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 606.701 47.952">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L101,32A15 15 0 0 0 116 17A15 15 0 0 0 101 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ATTACH</text>
+<polygon points="139,17 128,21 128,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L134,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="175,17 164,21 164,12" style="fill:rgb(0,0,0)"/>
+<path d="M139,17L170,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,32L267,32A15 15 0 0 0 282 17A15 15 0 0 0 267 2L191,2A15 15 0 0 0 175 17A15 15 0 0 0 191 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="229" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DATABASE</text>
+<polygon points="318,17 306,21 306,12" style="fill:rgb(0,0,0)"/>
+<path d="M282,17L312,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M318,32L367,32L367,2L318,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="390,17 378,21 378,12" style="fill:rgb(0,0,0)"/>
+<path d="M367,17L384,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M405,32L409,32A15 15 0 0 0 424 17A15 15 0 0 0 409 2L405,2A15 15 0 0 0 390 17A15 15 0 0 0 405 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="407" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="447,17 436,21 436,12" style="fill:rgb(0,0,0)"/>
+<path d="M424,17L441,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,32L559,32A15 15 0 0 0 574 17A15 15 0 0 0 559 2L462,2A15 15 0 0 0 447 17A15 15 0 0 0 462 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="510" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="597,17 585,21 585,12" style="fill:rgb(0,0,0)"/>
+<path d="M574,17L591,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="600" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="229,41 217,45 217,37" style="fill:rgb(0,0,0)"/>
+<path d="M139,17 L 147,17 Q 154,17 154,29 Q 154,41 169,41 L 208,41 L 223,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M229,41 L 276,41 Q 291,41 291,29 Q 291,17 298,17 L 306,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>
+</div>
+
+<a name="begin-stmt"></a><h4>begin-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:560px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 560.669 140.4">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L86,32A15 15 0 0 0 101 17A15 15 0 0 0 86 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BEGIN</text>
+<polygon points="124,17 112,21 112,12" style="fill:rgb(0,0,0)"/>
+<path d="M101,17L118,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="162,123 150,127 150,118" style="fill:rgb(0,0,0)"/>
+<path d="M124,17 L 131,17 Q 139,17 139,32 L 139,108 Q 139,123 147,123 L 156,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,138L261,138A15 15 0 0 0 276 123A15 15 0 0 0 261 108L177,108A15 15 0 0 0 162 123A15 15 0 0 0 177 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUSIVE</text>
+<polygon points="299,123 287,127 287,118" style="fill:rgb(0,0,0)"/>
+<path d="M276,123L293,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="337,17 325,21 325,12" style="fill:rgb(0,0,0)"/>
+<path d="M299,123 L 306,123 Q 314,123 314,108 L 314,32 Q 314,17 322,17 L 331,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="373,17 361,21 361,12" style="fill:rgb(0,0,0)"/>
+<path d="M337,17L367,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,32L500,32A15 15 0 0 0 515 17A15 15 0 0 0 500 2L388,2A15 15 0 0 0 373 17A15 15 0 0 0 388 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRANSACTION</text>
+<polygon points="551,17 539,21 539,12" style="fill:rgb(0,0,0)"/>
+<path d="M515,17L545,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="554" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="444,47 432,51 432,43" style="fill:rgb(0,0,0)"/>
+<path d="M337,17 L 344,17 Q 352,17 352,32 L 352,32 Q 352,47 367,47 L 423,47 L 438,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,47 L 511,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 L 541,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M124,17L325,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="162,47 150,51 150,43" style="fill:rgb(0,0,0)"/>
+<path d="M139,32 L 139,39 Q 139,47 147,47 L 156,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,62L257,62A15 15 0 0 0 272 47L272,47A15 15 0 0 0 257 32L177,32A15 15 0 0 0 162 47L162,47A15 15 0 0 0 177 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="217" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRED</text>
+<polygon points="295,47 284,51 284,43" style="fill:rgb(0,0,0)"/>
+<path d="M272,47L289,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,47 L 304,47 Q 314,47 314,40 L 314,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="162,85 150,89 150,81" style="fill:rgb(0,0,0)"/>
+<path d="M139,32 L 139,70 Q 139,85 147,85 L 156,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,100L265,100A15 15 0 0 0 281 85A15 15 0 0 0 265 70L177,70A15 15 0 0 0 162 85A15 15 0 0 0 177 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IMMEDIATE</text>
+<polygon points="304,85 292,89 292,81" style="fill:rgb(0,0,0)"/>
+<path d="M281,85L298,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M304,85 L 309,85 Q 314,85 314,77 L 314,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_transaction.html">lang_transaction.html</a>
+</div>
+
+<a name="column-constraint"></a><h4>column-constraint:</h4><div class='imgcontainer'>
+<div style="max-width:844px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 844.306 578.88">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,40 43,28 51,28" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,25 L 47,34" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L183,32A15 15 0 0 0 198 17A15 15 0 0 0 183 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="133" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONSTRAINT</text>
+<polygon points="221,17 210,21 210,12" style="fill:rgb(0,0,0)"/>
+<path d="M198,17L215,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,32L263,32A15 15 0 0 0 279 17A15 15 0 0 0 263 2L236,2A15 15 0 0 0 221 17A15 15 0 0 0 236 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="250" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="173,47 185,43 185,51" style="fill:rgb(0,0,0)"/>
+<path d="M279,17 L 300,17 Q 315,17 315,32 L 315,32 Q 315,47 300,47 L 194,47 L 179,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M173,47 L 62,47 Q 47,47 47,55 L 47,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,77 58,82 58,73" style="fill:rgb(0,0,0)"/>
+<path d="M47,40 L 47,62 Q 47,77 56,77 L 64,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,92L148,92A15 15 0 0 0 163 77A15 15 0 0 0 148 62L85,62A15 15 0 0 0 70 77A15 15 0 0 0 85 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRIMARY</text>
+<polygon points="186,77 174,82 174,73" style="fill:rgb(0,0,0)"/>
+<path d="M163,77L180,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,92L217,92A15 15 0 0 0 233 77A15 15 0 0 0 217 62L201,62A15 15 0 0 0 186 77A15 15 0 0 0 201 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">KEY</text>
+<polygon points="271,138 259,142 259,133" style="fill:rgb(0,0,0)"/>
+<path d="M233,77 L 240,77 Q 248,77 248,92 L 248,123 Q 248,138 256,138 L 265,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M286,153L316,153A15 15 0 0 0 331 138A15 15 0 0 0 316 123L286,123A15 15 0 0 0 271 138A15 15 0 0 0 286 153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="301" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="354,138 343,142 343,133" style="fill:rgb(0,0,0)"/>
+<path d="M331,138L348,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,77 381,82 381,73" style="fill:rgb(0,0,0)"/>
+<path d="M354,138 L 362,138 Q 369,138 369,123 L 369,92 Q 369,77 378,77 L 386,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,92L525,92L525,62L392,62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="459" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="549,77 537,82 537,73" style="fill:rgb(0,0,0)"/>
+<path d="M525,77L543,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="587,108 575,112 575,103" style="fill:rgb(0,0,0)"/>
+<path d="M549,77 L 556,77 Q 564,77 564,92 L 564,93 Q 564,108 572,108 L 581,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M602,123L745,123A15 15 0 0 0 760 108A15 15 0 0 0 745 92L602,92A15 15 0 0 0 587 108A15 15 0 0 0 602 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="673" y="108" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AUTOINCREMENT</text>
+<polygon points="783,108 772,112 772,103" style="fill:rgb(0,0,0)"/>
+<path d="M760,108L778,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="834,77 823,82 823,73" style="fill:rgb(0,0,0)"/>
+<path d="M783,108 L 791,108 Q 798,108 798,93 L 798,92 Q 798,77 813,77 L 814,77 L 829,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="838" cy="77" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="673,77 662,82 662,73" style="fill:rgb(0,0,0)"/>
+<path d="M549,77L668,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M673,77L827,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="301,77 289,82 289,73" style="fill:rgb(0,0,0)"/>
+<path d="M233,77L295,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,77L381,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="271,100 259,104 259,96" style="fill:rgb(0,0,0)"/>
+<path d="M233,77 L 240,77 Q 248,77 248,89 Q 248,100 256,100 L 265,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M286,115L302,115A15 15 0 0 0 318 100A15 15 0 0 0 302 85L286,85A15 15 0 0 0 271 100A15 15 0 0 0 286 115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="294" y="100" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="354,100 343,104 343,96" style="fill:rgb(0,0,0)"/>
+<path d="M318,100L348,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,100 L 362,100 Q 369,100 369,92 L 369,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,183 58,187 58,179" style="fill:rgb(0,0,0)"/>
+<path d="M47,62 L 47,168 Q 47,183 56,183 L 64,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,198L105,198A15 15 0 0 0 120 183A15 15 0 0 0 105 168L85,168A15 15 0 0 0 70 183A15 15 0 0 0 85 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="143,183 132,187 132,179" style="fill:rgb(0,0,0)"/>
+<path d="M120,183L138,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,198L190,198A15 15 0 0 0 205 183A15 15 0 0 0 190 168L158,168A15 15 0 0 0 143 183A15 15 0 0 0 158 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="174" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="228,183 216,187 216,179" style="fill:rgb(0,0,0)"/>
+<path d="M205,183L222,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M228,198L361,198L361,168L228,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="294" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="783,183 772,187 772,179" style="fill:rgb(0,0,0)"/>
+<path d="M361,183L778,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,183 L 791,183 Q 798,183 798,168 L 798,107 L 798,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,221 58,225 58,217" style="fill:rgb(0,0,0)"/>
+<path d="M47,168 L 47,206 Q 47,221 56,221 L 64,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,236L140,236A15 15 0 0 0 155 221A15 15 0 0 0 140 206L85,206A15 15 0 0 0 70 221A15 15 0 0 0 85 236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="221" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<polygon points="178,221 167,225 167,217" style="fill:rgb(0,0,0)"/>
+<path d="M155,221L172,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M178,236L311,236L311,206L178,206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="245" y="221" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="783,221 772,225 772,217" style="fill:rgb(0,0,0)"/>
+<path d="M311,221L778,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,221 L 791,221 Q 798,221 798,206 L 798,183 L 798,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,259 58,263 58,254" style="fill:rgb(0,0,0)"/>
+<path d="M47,206 L 47,244 Q 47,259 56,259 L 64,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,274L131,274A15 15 0 0 0 146 259A15 15 0 0 0 131 244L85,244A15 15 0 0 0 70 259A15 15 0 0 0 85 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="259" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CHECK</text>
+<polygon points="169,259 157,263 157,254" style="fill:rgb(0,0,0)"/>
+<path d="M146,259L163,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M184,274A15 15 0 0 0 199 259A15 15 0 0 0 184 244A15 15 0 0 0 169 259A15 15 0 0 0 184 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="259" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="222,259 210,263 210,254" style="fill:rgb(0,0,0)"/>
+<path d="M199,259L216,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,274L271,274L271,244L222,244Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="259" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="294,259 283,263 283,254" style="fill:rgb(0,0,0)"/>
+<path d="M271,259L288,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,274A15 15 0 0 0 324 259A15 15 0 0 0 309 244A15 15 0 0 0 294 259A15 15 0 0 0 309 274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="259" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,259 772,263 772,254" style="fill:rgb(0,0,0)"/>
+<path d="M324,259L778,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,259 L 791,259 Q 798,259 798,244 L 798,221 L 798,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,297 58,301 58,292" style="fill:rgb(0,0,0)"/>
+<path d="M47,244 L 47,282 Q 47,297 56,297 L 64,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,312L150,312A15 15 0 0 0 166 297A15 15 0 0 0 150 281L85,281A15 15 0 0 0 70 297A15 15 0 0 0 85 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="118" y="297" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="189,297 177,301 177,292" style="fill:rgb(0,0,0)"/>
+<path d="M166,297L183,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="225,297 213,301 213,292" style="fill:rgb(0,0,0)"/>
+<path d="M189,297L219,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,312A15 15 0 0 0 255 297A15 15 0 0 0 240 281A15 15 0 0 0 225 297A15 15 0 0 0 240 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="240" y="297" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="278,297 266,301 266,292" style="fill:rgb(0,0,0)"/>
+<path d="M255,297L272,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,312L327,312L327,281L278,281Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="297" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="350,297 339,301 339,292" style="fill:rgb(0,0,0)"/>
+<path d="M327,297L344,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,312A15 15 0 0 0 380 297A15 15 0 0 0 365 281A15 15 0 0 0 350 297A15 15 0 0 0 365 312Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="297" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,297 772,301 772,292" style="fill:rgb(0,0,0)"/>
+<path d="M380,297L778,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297 L 791,297 Q 798,297 798,282 L 798,259 L 798,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="227,334 215,339 215,330" style="fill:rgb(0,0,0)"/>
+<path d="M189,297 L 196,297 Q 204,297 204,312 L 204,319 Q 204,334 212,334 L 221,334" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,349L340,349L340,319L227,319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="334" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="363,334 351,339 351,330" style="fill:rgb(0,0,0)"/>
+<path d="M340,334L357,334" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,334 L 395,334 Q 410,334 410,319 L 410,312 Q 410,297 425,297 L 431,297 L 446,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="227,372 215,376 215,368" style="fill:rgb(0,0,0)"/>
+<path d="M189,297 L 196,297 Q 204,297 204,312 L 204,357 Q 204,372 212,372 L 221,372" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,387L364,387L364,357L227,357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="372" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="387,372 376,376 376,368" style="fill:rgb(0,0,0)"/>
+<path d="M364,372L382,372" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,372 L 399,372 Q 410,372 410,357 L 410,312 Q 410,297 425,297 L 431,297 L 446,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,410 58,414 58,406" style="fill:rgb(0,0,0)"/>
+<path d="M47,281 L 47,395 Q 47,410 56,410 L 64,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,425L149,425A15 15 0 0 0 164 410A15 15 0 0 0 149 395L85,395A15 15 0 0 0 70 410A15 15 0 0 0 85 425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="117" y="410" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="187,410 176,414 176,406" style="fill:rgb(0,0,0)"/>
+<path d="M164,410L182,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M202,425L308,425A15 15 0 0 0 323 410A15 15 0 0 0 308 395L202,395A15 15 0 0 0 187 410A15 15 0 0 0 202 425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="255" y="410" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="783,410 772,414 772,406" style="fill:rgb(0,0,0)"/>
+<path d="M323,410L778,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,410 L 791,410 Q 798,410 798,395 L 798,296 L 798,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,448 58,452 58,443" style="fill:rgb(0,0,0)"/>
+<path d="M47,395 L 47,433 Q 47,448 56,448 L 64,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,463L236,463L236,433L70,433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="448" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-key-clause</text>
+<polygon points="783,448 772,452 772,443" style="fill:rgb(0,0,0)"/>
+<path d="M236,448L778,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,448 L 791,448 Q 798,448 798,433 L 798,410 L 798,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,486 58,490 58,481" style="fill:rgb(0,0,0)"/>
+<path d="M47,433 L 47,471 Q 47,486 56,486 L 64,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,501L178,501A15 15 0 0 0 193 486A15 15 0 0 0 178 470L85,470A15 15 0 0 0 70 486A15 15 0 0 0 85 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="131" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GENERATED</text>
+<polygon points="216,486 204,490 204,481" style="fill:rgb(0,0,0)"/>
+<path d="M193,486L210,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M231,501L286,501A15 15 0 0 0 301 486A15 15 0 0 0 286 470L231,470A15 15 0 0 0 216 486A15 15 0 0 0 231 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALWAYS</text>
+<polygon points="337,486 325,490 325,481" style="fill:rgb(0,0,0)"/>
+<path d="M301,486L331,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M352,501L356,501A15 15 0 0 0 371 486A15 15 0 0 0 356 470L352,470A15 15 0 0 0 337 486A15 15 0 0 0 352 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="394,486 382,490 382,481" style="fill:rgb(0,0,0)"/>
+<path d="M371,486L388,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,501A15 15 0 0 0 424 486A15 15 0 0 0 409 470A15 15 0 0 0 394 486A15 15 0 0 0 409 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="486" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="447,486 436,490 436,481" style="fill:rgb(0,0,0)"/>
+<path d="M424,486L441,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,501L496,501L496,470L447,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="472" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="519,486 508,490 508,481" style="fill:rgb(0,0,0)"/>
+<path d="M496,486L514,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,501A15 15 0 0 0 550 486A15 15 0 0 0 535 470A15 15 0 0 0 519 486A15 15 0 0 0 535 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="535" y="486" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="783,486 772,490 772,481" style="fill:rgb(0,0,0)"/>
+<path d="M550,486L778,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,486 L 791,486 Q 798,486 798,471 L 798,448 L 798,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="185,516 174,520 174,511" style="fill:rgb(0,0,0)"/>
+<path d="M47,470 L 47,501 Q 47,516 62,516 L 165,516 L 180,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M185,516 L 297,516 Q 312,516 312,501 L 312,501 Q 312,486 320,486 L 327,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="596,561 584,565 584,557" style="fill:rgb(0,0,0)"/>
+<path d="M550,486 L 561,486 Q 573,486 573,501 L 573,546 Q 573,561 581,561 L 590,561" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M611,576L670,576A15 15 0 0 0 686 561A15 15 0 0 0 670 546L611,546A15 15 0 0 0 596 561A15 15 0 0 0 611 576Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="641" y="561" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIRTUAL</text>
+<polygon points="783,561 772,565 772,557" style="fill:rgb(0,0,0)"/>
+<path d="M686,561L778,561" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,561 L 791,561 Q 798,561 798,546 L 798,485 L 798,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="596,523 584,528 584,519" style="fill:rgb(0,0,0)"/>
+<path d="M550,486 L 561,486 Q 573,486 573,501 L 573,508 Q 573,523 581,523 L 590,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M611,538L665,538A15 15 0 0 0 680 523A15 15 0 0 0 665 508L611,508A15 15 0 0 0 596 523A15 15 0 0 0 611 538Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="638" y="523" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">STORED</text>
+<polygon points="783,523 772,528 772,519" style="fill:rgb(0,0,0)"/>
+<path d="M680,523L778,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,523 L 791,523 Q 798,523 798,516 L 798,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#column-def">column-def</a><br></br>
+References:&nbsp;&nbsp; <a href="#conflict-clause">conflict-clause</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#foreign-key-clause">foreign-key-clause</a>&nbsp;&nbsp; <a href="#literal-value">literal-value</a>&nbsp;&nbsp; <a href="#signed-number">signed-number</a><br></br>
+See also:&nbsp;&nbsp; <a href="gencol.html">gencol.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>
+</div>
+
+<a name="column-def"></a><h4>column-def:</h4><div class='imgcontainer'>
+<div style="max-width:614px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 614.333 64.8">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L141,32A15 15 0 0 0 156 17A15 15 0 0 0 141 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="94" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="179,17 168,21 168,12" style="fill:rgb(0,0,0)"/>
+<path d="M156,17L173,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="215,17 204,21 204,12" style="fill:rgb(0,0,0)"/>
+<path d="M179,17L209,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,32L314,32L314,2L215,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M314,17L354,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M386,62L550,62L550,32L386,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-constraint</text>
+<polygon points="550,17 539,21 539,12" style="fill:rgb(0,0,0)"/>
+<path d="M359,17L545,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="604,17 593,21 593,12" style="fill:rgb(0,0,0)"/>
+<path d="M550,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="608" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="265,42 253,47 253,38" style="fill:rgb(0,0,0)"/>
+<path d="M179,17 L 187,17 Q 194,17 194,30 Q 194,42 209,42 L 244,42 L 259,42" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,42 L 314,42 Q 329,42 329,30 Q 329,17 337,17 L 344,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="550,47 562,43 562,51" style="fill:rgb(0,0,0)"/>
+<path d="M550,17 L 562,17 Q 574,17 574,32 L 574,32 Q 574,47 565,47 L 556,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="399,17 388,21 388,12" style="fill:rgb(0,0,0)"/>
+<path d="M386,47 L 375,47 Q 363,47 363,32 L 363,32 Q 363,17 378,17 L 379,17 L 394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#alter-table-stmt">alter-table-stmt</a>&nbsp;&nbsp; <a href="#create-table-stmt">create-table-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#column-constraint">column-constraint</a>&nbsp;&nbsp; <a href="#type-name">type-name</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>
+</div>
+
+<a name="column-name-list"></a><h4>column-name-list:</h4><div class='imgcontainer'>
+<div style="max-width:353px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 353.621 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="85,17 74,21 74,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L79,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M85,17L115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,32L230,32A15 15 0 0 0 245 17A15 15 0 0 0 230 2L136,2A15 15 0 0 0 121 17A15 15 0 0 0 136 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="290,17 279,21 279,12" style="fill:rgb(0,0,0)"/>
+<path d="M245,17L285,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2A15 15 0 0 0 290 17A15 15 0 0 0 306 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="306" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="344,17 332,21 332,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L338,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="347" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M183,70A15 15 0 0 0 198 55L198,55A15 15 0 0 0 183 39A15 15 0 0 0 168 55L168,55A15 15 0 0 0 183 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="198,55 210,50 210,59" style="fill:rgb(0,0,0)"/>
+<path d="M245,17 L 257,17 Q 269,17 269,32 L 269,40 Q 269,55 254,55 L 219,55 L 204,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M168,55 L 102,55 Q 87,55 87,40 L 87,32 Q 87,17 101,17 L 115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#update-stmt">update-stmt</a>&nbsp;&nbsp; <a href="#update-stmt-limited">update-stmt-limited</a>&nbsp;&nbsp; <a href="#upsert-clause">upsert-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>
+</div>
+
+<a name="comment-syntax"></a><h4>comment-syntax:</h4><div class='imgcontainer'>
+<div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.704 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32A15 15 0 0 0 98 17A15 15 0 0 0 83 2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">--</text>
+<polygon points="121,17 110,21 110,12" style="fill:rgb(0,0,0)"/>
+<path d="M98,17L115,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M172,70L359,70A15 15 0 0 0 374 55L374,55A15 15 0 0 0 359 39L172,39A15 15 0 0 0 157 55L157,55A15 15 0 0 0 172 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="266" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">anything-except-newline</text>
+<polygon points="347,17 336,21 336,12" style="fill:rgb(0,0,0)"/>
+<path d="M121,17L342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="374,55 386,50 386,59" style="fill:rgb(0,0,0)"/>
+<path d="M347,17 L 382,17 Q 397,17 397,32 L 397,40 Q 397,55 389,55 L 380,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="194,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M157,55 L 146,55 Q 134,55 134,40 L 134,32 Q 134,17 149,17 L 173,17 L 188,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,17 453,21 453,12" style="fill:rgb(0,0,0)"/>
+<path d="M374,17L459,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,32L527,32A15 15 0 0 0 542 17A15 15 0 0 0 527 2L480,2A15 15 0 0 0 464 17A15 15 0 0 0 480 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="503" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">newline</text>
+<path d="M480,70L563,70A15 15 0 0 0 578 55L578,55A15 15 0 0 0 563 39L480,39A15 15 0 0 0 464 55L464,55A15 15 0 0 0 480 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="521" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">end-of-input</text>
+<polygon points="601,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M578,55L595,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M601,55 L 608,55 Q 616,55 616,40 L 616,32 Q 616,17 631,17 L 631,17 L 646,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,17L632,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,55 453,59 453,50" style="fill:rgb(0,0,0)"/>
+<path d="M374,17 L 412,17 Q 427,17 427,32 L 427,40 Q 427,55 442,55 L 444,55 L 459,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,108A15 15 0 0 0 98 92A15 15 0 0 0 83 77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">/*</text>
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,92 110,97 110,88" style="fill:rgb(0,0,0)"/>
+<path d="M98,92L115,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,92L193,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M172,145L308,145A15 15 0 0 0 323 130A15 15 0 0 0 308 115L172,115A15 15 0 0 0 157 130A15 15 0 0 0 172 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="240" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">anything-except-*/</text>
+<path d="M480,108A15 15 0 0 0 495 92A15 15 0 0 0 480 77A15 15 0 0 0 464 92A15 15 0 0 0 480 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="480" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*/</text>
+<polygon points="323,130 334,126 334,135" style="fill:rgb(0,0,0)"/>
+<path d="M323,92 L 334,92 Q 346,92 346,107 L 346,115 Q 346,130 337,130 L 328,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="464,92 453,97 453,88" style="fill:rgb(0,0,0)"/>
+<path d="M157,130 L 146,130 Q 134,130 134,115 L 134,107 Q 134,92 149,92 L 444,92 L 459,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="601,92 589,97 589,88" style="fill:rgb(0,0,0)"/>
+<path d="M495,92L595,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M601,92 L 608,92 Q 616,92 616,77 L 616,54 L 616,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,92 L 419,92 Q 427,92 427,77 L 427,70 Q 427,55 440,55 L 453,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+See also:&nbsp;&nbsp; <a href="lang_comment.html">lang_comment.html</a>
+</div>
+
+<a name="commit-stmt"></a><h4>commit-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:434px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 434.506 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L141,32A15 15 0 0 0 157 17A15 15 0 0 0 141 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COMMIT</text>
+<polygon points="202,17 190,21 190,12" style="fill:rgb(0,0,0)"/>
+<path d="M157,17L196,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M202,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,32L365,32A15 15 0 0 0 380 17A15 15 0 0 0 365 2L253,2A15 15 0 0 0 238 17A15 15 0 0 0 253 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRANSACTION</text>
+<polygon points="425,17 413,21 413,12" style="fill:rgb(0,0,0)"/>
+<path d="M380,17L419,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="428" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,70L104,70A15 15 0 0 0 119 55L119,55A15 15 0 0 0 104 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="94" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="157,55 145,59 145,50" style="fill:rgb(0,0,0)"/>
+<path d="M119,55L151,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M157,55 L 164,55 Q 172,55 172,40 L 172,32 Q 172,17 179,17 L 187,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="309,47 297,51 297,43" style="fill:rgb(0,0,0)"/>
+<path d="M202,17 L 209,17 Q 217,17 217,32 L 217,32 Q 217,47 232,47 L 288,47 L 303,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,47 L 380,47 Q 395,47 395,32 L 395,32 Q 395,17 402,17 L 410,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_transaction.html">lang_transaction.html</a>
+</div>
+
+<a name="common-table-expression"></a><h4>common-table-expression:</h4><div class='imgcontainer'>
+<div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#compound-select-stmt">compound-select-stmt</a>&nbsp;&nbsp; <a href="#delete-stmt">delete-stmt</a>&nbsp;&nbsp; <a href="#delete-stmt-limited">delete-stmt-limited</a>&nbsp;&nbsp; <a href="#factored-select-stmt">factored-select-stmt</a>&nbsp;&nbsp; <a href="#insert-stmt">insert-stmt</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#simple-select-stmt">simple-select-stmt</a>&nbsp;&nbsp; <a href="#update-stmt">update-stmt</a>&nbsp;&nbsp; <a href="#update-stmt-limited">update-stmt-limited</a><br></br>
+References:&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="compound-operator"></a><h4>compound-operator:</h4><div class='imgcontainer'>
+<div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#factored-select-stmt">factored-select-stmt</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="compound-select-stmt"></a><h4>compound-select-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:652px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 652.306 560.52">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L114,32A15 15 0 0 0 129 17A15 15 0 0 0 114 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="98" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M189,62L275,62A15 15 0 0 0 290 47L290,47A15 15 0 0 0 275 32L189,32A15 15 0 0 0 174 47L174,47A15 15 0 0 0 189 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="232" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="232,17 220,21 220,12" style="fill:rgb(0,0,0)"/>
+<path d="M129,17L226,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,17 368,21 368,12" style="fill:rgb(0,0,0)"/>
+<path d="M232,17L374,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,32L606,32L606,2L380,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="174,47 162,51 162,43" style="fill:rgb(0,0,0)"/>
+<path d="M129,17 L 136,17 Q 144,17 144,32 L 144,32 Q 144,47 156,47 L 168,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,47 301,51 301,43" style="fill:rgb(0,0,0)"/>
+<path d="M290,47L307,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,47 L 321,47 Q 328,47 328,32 L 328,32 Q 328,17 343,17 L 353,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,70A15 15 0 0 0 508 55L508,55A15 15 0 0 0 493 39A15 15 0 0 0 478 55L478,55A15 15 0 0 0 493 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="508,55 520,50 520,59" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,40 Q 621,55 606,55 L 529,55 L 514,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,55 L 372,55 Q 357,55 357,40 L 357,32 Q 357,17 363,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M68,183L171,183L171,153L68,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="120" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M83,365L128,365A15 15 0 0 0 143 349A15 15 0 0 0 128 334L83,334A15 15 0 0 0 68 349A15 15 0 0 0 83 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="166,349 154,354 154,345" style="fill:rgb(0,0,0)"/>
+<path d="M143,349L160,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M181,365L185,365A15 15 0 0 0 200 349A15 15 0 0 0 185 334L181,334A15 15 0 0 0 166 349A15 15 0 0 0 181 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M83,470L116,470A15 15 0 0 0 132 455A15 15 0 0 0 116 440L83,440A15 15 0 0 0 68 455A15 15 0 0 0 83 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="100" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="155,455 143,460 143,451" style="fill:rgb(0,0,0)"/>
+<path d="M132,455L149,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M155,470L204,470L204,440L155,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="68,168 56,172 56,164" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,153 Q 47,168 55,168 L 62,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="335,92 346,88 346,97" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 627,17 Q 642,17 642,32 L 642,77 Q 642,92 627,92 L 356,92 L 341,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M335,92 L 62,92 Q 47,92 47,100 L 47,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,168 232,172 232,164" style="fill:rgb(0,0,0)"/>
+<path d="M171,168L238,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,183L302,183A15 15 0 0 0 317 168A15 15 0 0 0 302 153L259,153A15 15 0 0 0 243 168A15 15 0 0 0 259 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M259,221L302,221A15 15 0 0 0 317 206A15 15 0 0 0 302 191L259,191A15 15 0 0 0 243 206A15 15 0 0 0 259 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<polygon points="340,206 329,210 329,201" style="fill:rgb(0,0,0)"/>
+<path d="M317,206L335,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M355,221L370,221A15 15 0 0 0 386 206A15 15 0 0 0 370 191L355,191A15 15 0 0 0 340 206A15 15 0 0 0 355 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="409,206 397,210 397,201" style="fill:rgb(0,0,0)"/>
+<path d="M386,206L403,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,168 435,172 435,164" style="fill:rgb(0,0,0)"/>
+<path d="M409,206 L 416,206 Q 424,206 424,191 L 424,183 Q 424,168 432,168 L 441,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,183L550,183L550,153L447,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="498" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M259,259L343,259A15 15 0 0 0 359 244A15 15 0 0 0 343 228L259,228A15 15 0 0 0 243 244A15 15 0 0 0 259 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="301" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M259,297L310,297A15 15 0 0 0 325 281A15 15 0 0 0 310 266L259,266A15 15 0 0 0 243 281A15 15 0 0 0 259 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="284" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="243,281 232,286 232,277" style="fill:rgb(0,0,0)"/>
+<path d="M205,168 L 213,168 Q 220,168 220,183 L 220,266 Q 220,281 229,281 L 238,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,244 232,248 232,239" style="fill:rgb(0,0,0)"/>
+<path d="M220,228 L 220,236 Q 220,244 229,244 L 238,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,206 232,210 232,201" style="fill:rgb(0,0,0)"/>
+<path d="M220,191 L 220,198 Q 220,206 229,206 L 238,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="409,244 397,248 397,239" style="fill:rgb(0,0,0)"/>
+<path d="M359,244L403,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,244 L 416,244 Q 424,244 424,229 L 424,206 L 424,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="409,281 397,286 397,277" style="fill:rgb(0,0,0)"/>
+<path d="M325,281L403,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,281 L 416,281 Q 424,281 424,266 L 424,243 L 424,228" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,168L435,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,138 389,133 389,142" style="fill:rgb(0,0,0)"/>
+<path d="M550,168 L 558,168 Q 565,168 565,153 L 565,153 Q 565,138 550,138 L 399,138 L 384,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M378,138 L 205,138 Q 190,138 190,153 L 190,153 Q 190,168 198,168 L 205,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="319,315 331,311 331,320" style="fill:rgb(0,0,0)"/>
+<path d="M550,168 L 571,168 Q 586,168 586,183 L 586,300 Q 586,315 571,315 L 340,315 L 325,315" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,349 56,354 56,345" style="fill:rgb(0,0,0)"/>
+<path d="M319,315 L 62,315 Q 47,315 47,330 L 47,334 Q 47,349 55,349 L 62,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="245,349 234,354 234,345" style="fill:rgb(0,0,0)"/>
+<path d="M200,349L239,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M245,365L375,365L375,334L245,334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M310,402A15 15 0 0 0 325 387A15 15 0 0 0 310 372A15 15 0 0 0 295 387A15 15 0 0 0 310 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="387" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="325,387 337,383 337,392" style="fill:rgb(0,0,0)"/>
+<path d="M375,349 L 382,349 Q 390,349 390,364 L 390,372 Q 390,387 375,387 L 346,387 L 331,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,387 L 237,387 Q 222,387 222,372 L 222,364 Q 222,349 228,349 L 234,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,380 407,368 415,368" style="fill:rgb(0,0,0)"/>
+<path d="M375,349 L 396,349 Q 411,349 411,362 L 411,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,421 233,417 233,426" style="fill:rgb(0,0,0)"/>
+<path d="M411,380 L 411,406 Q 411,421 396,421 L 242,421 L 227,421" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,455 56,460 56,451" style="fill:rgb(0,0,0)"/>
+<path d="M221,421 L 62,421 Q 47,421 47,436 L 47,440 Q 47,455 55,455 L 62,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,387 43,376 51,376" style="fill:rgb(0,0,0)"/>
+<path d="M47,334L47,382" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,387L47,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,501L329,501A15 15 0 0 0 344 486A15 15 0 0 0 329 470L278,470A15 15 0 0 0 263 486A15 15 0 0 0 278 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="304" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="367,486 356,490 356,481" style="fill:rgb(0,0,0)"/>
+<path d="M344,486L362,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,501L417,501L417,470L367,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="392" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="440,486 428,490 428,481" style="fill:rgb(0,0,0)"/>
+<path d="M417,486L434,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M278,538A15 15 0 0 0 293 523A15 15 0 0 0 278 508A15 15 0 0 0 263 523A15 15 0 0 0 278 538Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="523" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="316,523 305,528 305,519" style="fill:rgb(0,0,0)"/>
+<path d="M293,523L310,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,538L365,538L365,508L316,508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="341" y="523" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="227,455 215,460 215,451" style="fill:rgb(0,0,0)"/>
+<path d="M204,455L221,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="263,523 251,528 251,519" style="fill:rgb(0,0,0)"/>
+<path d="M227,455 L 234,455 Q 242,455 242,470 L 242,508 Q 242,523 249,523 L 257,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="263,486 251,490 251,481" style="fill:rgb(0,0,0)"/>
+<path d="M227,455 L 234,455 Q 242,455 242,470 L 242,471 Q 242,486 249,486 L 257,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,455 428,460 428,451" style="fill:rgb(0,0,0)"/>
+<path d="M227,455L434,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="642,554 631,558 631,549" style="fill:rgb(0,0,0)"/>
+<path d="M440,455 L 461,455 Q 476,455 476,470 L 476,539 Q 476,554 491,554 L 622,554 L 637,554" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="646" cy="554" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,486 L 461,486 Q 476,486 476,493 L 476,501" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,523 428,528 428,519" style="fill:rgb(0,0,0)"/>
+<path d="M365,523L434,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,523 L 461,523 Q 476,523 476,531 L 476,538" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,554 428,558 428,549" style="fill:rgb(0,0,0)"/>
+<path d="M47,440 L 47,539 Q 47,554 62,554 L 419,554 L 434,554" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,554L512,554" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+References:&nbsp;&nbsp; <a href="#common-table-expression">common-table-expression</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#ordering-term">ordering-term</a>&nbsp;&nbsp; <a href="#select-core">select-core</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>
+</div>
+
+<a name="conflict-clause"></a><h4>conflict-clause:</h4><div class='imgcontainer'>
+<div style="max-width:451px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 451.517 205.2">
+<circle cx="5" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,6 20,10 20,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L26,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,36 58,41 58,32" style="fill:rgb(0,0,0)"/>
+<path d="M32,6 L 39,6 Q 47,6 47,21 L 47,21 Q 47,36 56,36 L 64,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M85,51L94,51A15 15 0 0 0 109 36L109,36A15 15 0 0 0 94 21L85,21A15 15 0 0 0 70 36L70,36A15 15 0 0 0 85 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="132,36 121,41 121,32" style="fill:rgb(0,0,0)"/>
+<path d="M109,36L126,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M147,51L222,51A15 15 0 0 0 237 36L237,36A15 15 0 0 0 222 21L147,21A15 15 0 0 0 132 36L132,36A15 15 0 0 0 147 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="273,36 261,41 261,32" style="fill:rgb(0,0,0)"/>
+<path d="M237,36L267,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,51L365,51A15 15 0 0 0 381 36L381,36A15 15 0 0 0 365 21L288,21A15 15 0 0 0 273 36L273,36A15 15 0 0 0 288 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="327" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<path d="M288,89L330,89A15 15 0 0 0 345 74L345,74A15 15 0 0 0 330 59L288,59A15 15 0 0 0 273 74L273,74A15 15 0 0 0 288 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="309" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<path d="M288,127L310,127A15 15 0 0 0 325 112A15 15 0 0 0 310 97L288,97A15 15 0 0 0 273 112A15 15 0 0 0 288 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<path d="M288,165L340,165A15 15 0 0 0 355 150A15 15 0 0 0 340 135L288,135A15 15 0 0 0 273 150A15 15 0 0 0 288 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="314" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<path d="M288,203L352,203A15 15 0 0 0 367 187A15 15 0 0 0 352 172L288,172A15 15 0 0 0 273 187A15 15 0 0 0 288 203Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="320" y="187" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="404,36 392,41 392,32" style="fill:rgb(0,0,0)"/>
+<path d="M381,36L398,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,6 430,10 430,2" style="fill:rgb(0,0,0)"/>
+<path d="M404,36 L 411,36 Q 419,36 419,21 L 419,21 Q 419,6 427,6 L 436,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="445" cy="6" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="225,6 214,10 214,2" style="fill:rgb(0,0,0)"/>
+<path d="M9,6L219,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,6L434,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,187 261,192 261,183" style="fill:rgb(0,0,0)"/>
+<path d="M237,36 L 244,36 Q 252,36 252,51 L 252,172 Q 252,187 259,187 L 267,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,187 392,192 392,183" style="fill:rgb(0,0,0)"/>
+<path d="M367,187L398,187" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,187 L 411,187 Q 419,187 419,172 L 419,36 L 419,21" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,74 261,78 261,70" style="fill:rgb(0,0,0)"/>
+<path d="M252,59 L 252,66 Q 252,74 259,74 L 267,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,74 392,78 392,70" style="fill:rgb(0,0,0)"/>
+<path d="M345,74L398,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,74 L 411,74 Q 419,74 419,67 L 419,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,112 261,116 261,108" style="fill:rgb(0,0,0)"/>
+<path d="M252,97 L 252,104 Q 252,112 259,112 L 267,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,112 392,116 392,108" style="fill:rgb(0,0,0)"/>
+<path d="M325,112L398,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,112 L 411,112 Q 419,112 419,104 L 419,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,150 261,154 261,145" style="fill:rgb(0,0,0)"/>
+<path d="M252,135 L 252,142 Q 252,150 259,150 L 267,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="404,150 392,154 392,145" style="fill:rgb(0,0,0)"/>
+<path d="M355,150L398,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,150 L 411,150 Q 419,150 419,142 L 419,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#column-constraint">column-constraint</a>&nbsp;&nbsp; <a href="#table-constraint">table-constraint</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_conflict.html">lang_conflict.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtable.html#notnullconst">lang_createtable.html#notnullconst</a>
+</div>
+
+<a name="create-index-stmt"></a><h4>create-index-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:907px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 907.43 232.632">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L222,56A15 15 0 0 0 237 41A15 15 0 0 0 222 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<path d="M288,32L327,32A15 15 0 0 0 342 17A15 15 0 0 0 327 2L288,2A15 15 0 0 0 273 17A15 15 0 0 0 288 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEX</text>
+<polygon points="194,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L188,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,17 261,21 261,12" style="fill:rgb(0,0,0)"/>
+<path d="M194,17L267,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,41 L 244,41 Q 252,41 252,29 Q 252,17 256,17 L 261,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,17 367,21 367,12" style="fill:rgb(0,0,0)"/>
+<path d="M342,17L372,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,32A15 15 0 0 0 408 17A15 15 0 0 0 393 2A15 15 0 0 0 378 17A15 15 0 0 0 393 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="393" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="431,17 420,21 420,12" style="fill:rgb(0,0,0)"/>
+<path d="M408,17L426,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M447,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L447,2A15 15 0 0 0 431 17A15 15 0 0 0 447 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="505,17 493,21 493,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L499,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M520,32L565,32A15 15 0 0 0 580 17A15 15 0 0 0 565 2L520,2A15 15 0 0 0 505 17A15 15 0 0 0 520 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="194,71 206,67 206,76" style="fill:rgb(0,0,0)"/>
+<path d="M342,17 L 350,17 Q 357,17 357,32 L 357,56 Q 357,71 342,71 L 215,71 L 200,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,71 516,67 516,76" style="fill:rgb(0,0,0)"/>
+<path d="M580,17 L 601,17 Q 616,17 616,32 L 616,56 Q 616,71 601,71 L 526,71 L 511,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,71L273,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,109 17,113 17,105" style="fill:rgb(0,0,0)"/>
+<path d="M273,71 L 20,71 Q 5,71 5,86 L 5,94 Q 5,109 14,109 L 23,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,124L140,124A15 15 0 0 0 155 109A15 15 0 0 0 140 94L43,94A15 15 0 0 0 28 109A15 15 0 0 0 43 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,109 166,113 166,105" style="fill:rgb(0,0,0)"/>
+<path d="M155,109L172,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,124A15 15 0 0 0 208 109A15 15 0 0 0 193 94A15 15 0 0 0 178 109A15 15 0 0 0 193 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,109 233,113 233,105" style="fill:rgb(0,0,0)"/>
+<path d="M208,109L238,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,124L338,124A15 15 0 0 0 353 109A15 15 0 0 0 338 94L259,94A15 15 0 0 0 244 109A15 15 0 0 0 259 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<polygon points="376,109 364,113 364,105" style="fill:rgb(0,0,0)"/>
+<path d="M353,109L370,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,124L400,124A15 15 0 0 0 415 109A15 15 0 0 0 400 94L391,94A15 15 0 0 0 376 109A15 15 0 0 0 391 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="438,109 427,113 427,105" style="fill:rgb(0,0,0)"/>
+<path d="M415,109L432,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,124L528,124A15 15 0 0 0 543 109A15 15 0 0 0 528 94L453,94A15 15 0 0 0 438 109A15 15 0 0 0 453 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="491" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="567,109 555,113 555,105" style="fill:rgb(0,0,0)"/>
+<path d="M543,109L561,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,124A15 15 0 0 0 597 109A15 15 0 0 0 582 94A15 15 0 0 0 567 109A15 15 0 0 0 582 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="633,109 621,113 621,105" style="fill:rgb(0,0,0)"/>
+<path d="M597,109L627,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M633,124L777,124L777,94L633,94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="813,109 802,113 802,105" style="fill:rgb(0,0,0)"/>
+<path d="M777,109L808,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M828,124A15 15 0 0 0 844 109A15 15 0 0 0 828 94A15 15 0 0 0 813 109A15 15 0 0 0 828 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="828" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M705,162A15 15 0 0 0 720 147A15 15 0 0 0 705 132A15 15 0 0 0 690 147A15 15 0 0 0 705 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="720,147 732,142 732,151" style="fill:rgb(0,0,0)"/>
+<path d="M777,109 L 785,109 Q 792,109 792,124 L 792,132 Q 792,147 777,147 L 741,147 L 726,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M690,147 L 625,147 Q 610,147 610,132 L 610,124 Q 610,109 617,109 L 625,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="92,139 80,144 80,135" style="fill:rgb(0,0,0)"/>
+<path d="M5,94 L 5,124 Q 5,139 20,139 L 71,139 L 86,139" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,139 L 205,139 Q 220,139 220,124 L 220,124 Q 220,109 227,109 L 235,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M684,230L733,230A15 15 0 0 0 748 215A15 15 0 0 0 733 200L684,200A15 15 0 0 0 669 215A15 15 0 0 0 684 230Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="709" y="215" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="772,215 760,219 760,211" style="fill:rgb(0,0,0)"/>
+<path d="M748,215L766,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M772,230L821,230L821,200L772,200Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="796" y="215" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="898,215 886,219 886,211" style="fill:rgb(0,0,0)"/>
+<path d="M821,215L892,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="901" cy="215" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="859,147 854,135 863,135" style="fill:rgb(0,0,0)"/>
+<path d="M844,109 L 851,109 Q 859,109 859,124 L 859,126 L 859,141" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M859,147 L 859,200 Q 859,215 872,215 L 886,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="705,177 717,173 717,181" style="fill:rgb(0,0,0)"/>
+<path d="M859,147 L 859,162 Q 859,177 844,177 L 726,177 L 711,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="669,215 657,219 657,211" style="fill:rgb(0,0,0)"/>
+<path d="M705,177 L 661,177 Q 646,177 646,192 L 646,200 Q 646,215 654,215 L 663,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#indexed-column">indexed-column</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="create-table-stmt"></a><h4>create-table-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:718px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 718.33 315.792">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L199,56A15 15 0 0 0 214 41A15 15 0 0 0 199 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMP</text>
+<path d="M167,94L259,94A15 15 0 0 0 274 79A15 15 0 0 0 259 64L167,64A15 15 0 0 0 152 79A15 15 0 0 0 167 94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="79" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMPORARY</text>
+<path d="M325,32L365,32A15 15 0 0 0 380 17A15 15 0 0 0 365 2L325,2A15 15 0 0 0 310 17A15 15 0 0 0 325 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="213,17 201,21 201,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L207,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,17 299,21 299,12" style="fill:rgb(0,0,0)"/>
+<path d="M213,17L305,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,79 140,83 140,74" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,32 L 131,64 Q 131,79 138,79 L 146,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M274,79 L 282,79 Q 289,79 289,64 L 289,32 Q 289,17 294,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M214,41 L 274,41 Q 289,41 289,33 L 289,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="416,17 404,21 404,12" style="fill:rgb(0,0,0)"/>
+<path d="M380,17L410,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,32A15 15 0 0 0 446 17A15 15 0 0 0 431 2A15 15 0 0 0 416 17A15 15 0 0 0 431 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="431" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="469,17 458,21 458,12" style="fill:rgb(0,0,0)"/>
+<path d="M446,17L463,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M484,32L504,32A15 15 0 0 0 520 17A15 15 0 0 0 504 2L484,2A15 15 0 0 0 469 17A15 15 0 0 0 484 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="494" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="543,17 531,21 531,12" style="fill:rgb(0,0,0)"/>
+<path d="M520,17L537,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,32L602,32A15 15 0 0 0 617 17A15 15 0 0 0 602 2L558,2A15 15 0 0 0 543 17A15 15 0 0 0 558 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="580" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="213,109 224,105 224,113" style="fill:rgb(0,0,0)"/>
+<path d="M380,17 L 387,17 Q 395,17 395,32 L 395,94 Q 395,109 380,109 L 234,109 L 219,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="543,109 554,105 554,113" style="fill:rgb(0,0,0)"/>
+<path d="M617,17 L 625,17 Q 632,17 632,32 L 632,94 Q 632,109 617,109 L 563,109 L 548,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M543,109L310,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,147 17,151 17,142" style="fill:rgb(0,0,0)"/>
+<path d="M310,109 L 20,109 Q 5,109 5,124 L 5,132 Q 5,147 14,147 L 23,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,162L140,162A15 15 0 0 0 155 147A15 15 0 0 0 140 132L43,132A15 15 0 0 0 28 147A15 15 0 0 0 43 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,147 166,151 166,142" style="fill:rgb(0,0,0)"/>
+<path d="M155,147L172,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,162A15 15 0 0 0 208 147A15 15 0 0 0 193 132A15 15 0 0 0 178 147A15 15 0 0 0 193 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,147 233,151 233,142" style="fill:rgb(0,0,0)"/>
+<path d="M208,147L238,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,162L334,162A15 15 0 0 0 350 147A15 15 0 0 0 334 132L259,132A15 15 0 0 0 244 147A15 15 0 0 0 259 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="92,177 80,181 80,173" style="fill:rgb(0,0,0)"/>
+<path d="M5,132 L 5,162 Q 5,177 20,177 L 71,177 L 86,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,177 L 205,177 Q 220,177 220,162 L 220,162 Q 220,147 227,147 L 235,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="193,222 205,218 205,227" style="fill:rgb(0,0,0)"/>
+<path d="M350,147 L 357,147 Q 365,147 365,162 L 365,207 Q 365,222 350,222 L 214,222 L 199,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,260 17,265 17,256" style="fill:rgb(0,0,0)"/>
+<path d="M193,222 L 20,222 Q 5,222 5,237 L 5,245 Q 5,260 14,260 L 23,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,275A15 15 0 0 0 59 260A15 15 0 0 0 43 245A15 15 0 0 0 28 260A15 15 0 0 0 43 275Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="43" y="260" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="95,260 83,265 83,256" style="fill:rgb(0,0,0)"/>
+<path d="M59,260L89,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,275L199,275L199,245L95,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="147" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-def</text>
+<path d="M253,313L399,313L399,283L253,283Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="298" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-constraint</text>
+<polygon points="399,298 410,294 410,302" style="fill:rgb(0,0,0)"/>
+<path d="M404,298L416,298" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,313A15 15 0 0 0 446 298A15 15 0 0 0 431 283A15 15 0 0 0 416 298A15 15 0 0 0 431 313Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="431" y="298" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M503,275A15 15 0 0 0 518 260A15 15 0 0 0 503 245A15 15 0 0 0 488 260A15 15 0 0 0 503 275Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="503" y="260" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="553,260 541,265 541,256" style="fill:rgb(0,0,0)"/>
+<path d="M518,260L547,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M553,275L674,275L674,245L553,245Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="613" y="260" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-options</text>
+<path d="M147,313A15 15 0 0 0 162 298A15 15 0 0 0 147 283A15 15 0 0 0 132 298A15 15 0 0 0 147 313Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="147" y="298" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="162,298 174,294 174,302" style="fill:rgb(0,0,0)"/>
+<path d="M199,260 L 207,260 Q 214,260 214,275 L 214,283 Q 214,298 199,298 L 183,298 L 168,298" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,298 L 87,298 Q 72,298 72,283 L 72,275 Q 72,260 77,260 L 83,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="235,260 224,265 224,256" style="fill:rgb(0,0,0)"/>
+<path d="M199,260L230,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="488,260 476,265 476,256" style="fill:rgb(0,0,0)"/>
+<path d="M235,260L482,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,298 458,294 458,302" style="fill:rgb(0,0,0)"/>
+<path d="M446,260 L 458,260 Q 469,260 469,275 L 469,283 Q 469,298 460,298 L 452,298" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,298 L 246,298 Q 238,298 238,283 L 238,275 Q 238,260 250,260 L 261,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,215 602,219 602,211" style="fill:rgb(0,0,0)"/>
+<path d="M518,260 L 526,260 Q 533,260 533,245 L 533,230 Q 533,215 548,215 L 592,215 L 607,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="708,215 697,219 697,211" style="fill:rgb(0,0,0)"/>
+<path d="M613,215 L 659,215 Q 674,215 688,215 L 703,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="712" cy="215" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="708,215 697,219 697,211" style="fill:rgb(0,0,0)"/>
+<path d="M674,260 L 681,260 Q 689,260 689,245 L 689,230 Q 689,215 696,215 L 703,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="440,147 428,151 428,142" style="fill:rgb(0,0,0)"/>
+<path d="M350,147L434,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,162L459,162A15 15 0 0 0 474 147A15 15 0 0 0 459 132L455,132A15 15 0 0 0 440 147A15 15 0 0 0 455 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="497,147 485,151 485,142" style="fill:rgb(0,0,0)"/>
+<path d="M474,147L491,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M497,162L601,162L601,132L497,132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="549" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="637,147 626,151 626,142" style="fill:rgb(0,0,0)"/>
+<path d="M601,147L631,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M637,147 L 674,147 Q 689,147 689,162 L 689,200 Q 689,215 696,215 L 704,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#column-def">column-def</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#table-constraint">table-constraint</a>&nbsp;&nbsp; <a href="#table-options">table-options</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>
+</div>
+
+<a name="create-trigger-stmt"></a><h4>create-trigger-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:678px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 678.058 746.712">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L199,56A15 15 0 0 0 214 41A15 15 0 0 0 199 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMP</text>
+<path d="M167,94L259,94A15 15 0 0 0 274 79A15 15 0 0 0 259 64L167,64A15 15 0 0 0 152 79A15 15 0 0 0 167 94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="79" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMPORARY</text>
+<path d="M325,32L386,32A15 15 0 0 0 401 17A15 15 0 0 0 386 2L325,2A15 15 0 0 0 310 17A15 15 0 0 0 325 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRIGGER</text>
+<polygon points="213,17 201,21 201,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L207,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,17 299,21 299,12" style="fill:rgb(0,0,0)"/>
+<path d="M213,17L305,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,79 140,83 140,74" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,32 L 131,64 Q 131,79 138,79 L 146,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M274,79 L 282,79 Q 289,79 289,64 L 289,32 Q 289,17 294,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M214,41 L 274,41 Q 289,41 289,33 L 289,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="437,17 425,21 425,12" style="fill:rgb(0,0,0)"/>
+<path d="M401,17L431,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M452,32A15 15 0 0 0 467 17A15 15 0 0 0 452 2A15 15 0 0 0 437 17A15 15 0 0 0 452 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="452" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="490,17 478,21 478,12" style="fill:rgb(0,0,0)"/>
+<path d="M467,17L484,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,32L525,32A15 15 0 0 0 540 17A15 15 0 0 0 525 2L505,2A15 15 0 0 0 490 17A15 15 0 0 0 505 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="515" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="563,17 552,21 552,12" style="fill:rgb(0,0,0)"/>
+<path d="M540,17L558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,32L623,32A15 15 0 0 0 638 17A15 15 0 0 0 623 2L578,2A15 15 0 0 0 563 17A15 15 0 0 0 578 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="601" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="213,109 224,105 224,113" style="fill:rgb(0,0,0)"/>
+<path d="M401,17 L 408,17 Q 416,17 416,32 L 416,94 Q 416,109 401,109 L 234,109 L 219,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="563,109 575,105 575,113" style="fill:rgb(0,0,0)"/>
+<path d="M638,17 L 646,17 Q 653,17 653,32 L 653,94 Q 653,109 638,109 L 584,109 L 569,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M563,109L310,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,147 17,151 17,142" style="fill:rgb(0,0,0)"/>
+<path d="M310,109 L 20,109 Q 5,109 5,124 L 5,132 Q 5,147 14,147 L 23,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,162L140,162A15 15 0 0 0 155 147A15 15 0 0 0 140 132L43,132A15 15 0 0 0 28 147A15 15 0 0 0 43 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,147 166,151 166,142" style="fill:rgb(0,0,0)"/>
+<path d="M155,147L172,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,162A15 15 0 0 0 208 147A15 15 0 0 0 193 132A15 15 0 0 0 178 147A15 15 0 0 0 193 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,147 233,151 233,142" style="fill:rgb(0,0,0)"/>
+<path d="M208,147L238,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,162L351,162A15 15 0 0 0 366 147A15 15 0 0 0 351 132L259,132A15 15 0 0 0 244 147A15 15 0 0 0 259 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="305" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">trigger-name</text>
+<polygon points="402,147 391,151 391,142" style="fill:rgb(0,0,0)"/>
+<path d="M366,147L396,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,162L472,162A15 15 0 0 0 487 147A15 15 0 0 0 472 132L417,132A15 15 0 0 0 402 147A15 15 0 0 0 417 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BEFORE</text>
+<path d="M417,200L457,200A15 15 0 0 0 472 185A15 15 0 0 0 457 169L417,169A15 15 0 0 0 402 185A15 15 0 0 0 417 200Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="437" y="185" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AFTER</text>
+<path d="M417,238L479,238A15 15 0 0 0 494 222A15 15 0 0 0 479 207L417,207A15 15 0 0 0 402 222A15 15 0 0 0 417 238Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="222" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INSTEAD</text>
+<polygon points="517,222 505,227 505,218" style="fill:rgb(0,0,0)"/>
+<path d="M494,222L511,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,238L538,238A15 15 0 0 0 553 222A15 15 0 0 0 538 207L532,207A15 15 0 0 0 517 222A15 15 0 0 0 532 238Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="535" y="222" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OF</text>
+<polygon points="402,185 391,189 391,180" style="fill:rgb(0,0,0)"/>
+<path d="M366,147 L 374,147 Q 381,147 381,162 L 381,170 Q 381,185 389,185 L 396,185" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="402,222 391,227 391,218" style="fill:rgb(0,0,0)"/>
+<path d="M366,147 L 374,147 Q 381,147 381,162 L 381,207 Q 381,222 389,222 L 396,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="92,177 80,181 80,173" style="fill:rgb(0,0,0)"/>
+<path d="M5,132 L 5,162 Q 5,177 20,177 L 71,177 L 86,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,177 L 205,177 Q 220,177 220,162 L 220,162 Q 220,147 227,147 L 235,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="193,260 205,256 205,265" style="fill:rgb(0,0,0)"/>
+<path d="M381,207 L 381,245 Q 381,260 366,260 L 214,260 L 199,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="576,222 564,227 564,218" style="fill:rgb(0,0,0)"/>
+<path d="M553,222L570,222" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="448,260 459,256 459,265" style="fill:rgb(0,0,0)"/>
+<path d="M576,222 L 584,222 Q 591,222 591,237 L 591,245 Q 591,260 576,260 L 469,260 L 454,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,260L366,260" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="576,147 564,151 564,142" style="fill:rgb(0,0,0)"/>
+<path d="M487,147L570,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M576,147 L 584,147 Q 591,147 591,162 L 591,223 L 591,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="576,185 564,189 564,180" style="fill:rgb(0,0,0)"/>
+<path d="M472,185L570,185" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M576,185 L 584,185 Q 591,185 591,192 L 591,200" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,306L96,306A15 15 0 0 0 111 290L111,290A15 15 0 0 0 96 275L43,275A15 15 0 0 0 28 290L28,290A15 15 0 0 0 43 306Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="290" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<path d="M43,343L92,343A15 15 0 0 0 107 328A15 15 0 0 0 92 313L43,313A15 15 0 0 0 28 328A15 15 0 0 0 43 343Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="68" y="328" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INSERT</text>
+<path d="M43,381L98,381A15 15 0 0 0 113 366A15 15 0 0 0 98 351L43,351A15 15 0 0 0 28 366A15 15 0 0 0 43 381Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="366" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="28,366 17,370 17,362" style="fill:rgb(0,0,0)"/>
+<path d="M193,260 L 20,260 Q 5,260 5,275 L 5,351 Q 5,366 14,366 L 23,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,290 17,295 17,286" style="fill:rgb(0,0,0)"/>
+<path d="M5,275 L 5,283 Q 5,290 14,290 L 23,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,328 17,333 17,324" style="fill:rgb(0,0,0)"/>
+<path d="M5,313 L 5,321 Q 5,328 14,328 L 23,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M164,411L170,411A15 15 0 0 0 185 396A15 15 0 0 0 170 381L164,381A15 15 0 0 0 149 396A15 15 0 0 0 164 411Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="396" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OF</text>
+<polygon points="221,396 209,401 209,392" style="fill:rgb(0,0,0)"/>
+<path d="M185,396L215,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,411L330,411A15 15 0 0 0 345 396A15 15 0 0 0 330 381L236,381A15 15 0 0 0 221 396A15 15 0 0 0 236 411Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="396" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M283,449L283,449A15 15 0 0 0 298 434A15 15 0 0 0 283 419L283,419A15 15 0 0 0 268 434A15 15 0 0 0 283 449Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="434" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="381,396 369,401 369,392" style="fill:rgb(0,0,0)"/>
+<path d="M345,396L375,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="419,290 408,295 408,286" style="fill:rgb(0,0,0)"/>
+<path d="M381,396 L 388,396 Q 396,396 396,381 L 396,305 Q 396,290 405,290 L 413,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M434,306L443,306A15 15 0 0 0 458 290L458,290A15 15 0 0 0 443 275L434,275A15 15 0 0 0 419 290L419,290A15 15 0 0 0 434 306Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="290" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="481,290 470,295 470,286" style="fill:rgb(0,0,0)"/>
+<path d="M458,290L475,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M496,306L572,306A15 15 0 0 0 587 290L587,290A15 15 0 0 0 572 275L496,275A15 15 0 0 0 481 290L481,290A15 15 0 0 0 496 306Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="290" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<path d="M111,290L408,290" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,328 369,333 369,324" style="fill:rgb(0,0,0)"/>
+<path d="M107,328L375,328" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M381,328 L 388,328 Q 396,328 396,321 L 396,313" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,366 369,370 369,362" style="fill:rgb(0,0,0)"/>
+<path d="M113,366L375,366" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M381,366 L 388,366 Q 396,366 396,359 L 396,351" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="149,396 137,401 137,392" style="fill:rgb(0,0,0)"/>
+<path d="M113,366 L 120,366 Q 128,366 128,381 L 128,381 Q 128,396 135,396 L 143,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,434 309,430 309,438" style="fill:rgb(0,0,0)"/>
+<path d="M345,396 L 352,396 Q 360,396 360,411 L 360,419 Q 360,434 345,434 L 319,434 L 304,434" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M268,434 L 213,434 Q 198,434 198,419 L 198,411 Q 198,396 205,396 L 213,396" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,525L62,525A15 15 0 0 0 77 510A15 15 0 0 0 62 495L43,495A15 15 0 0 0 28 510A15 15 0 0 0 43 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="52" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOR</text>
+<polygon points="100,510 88,514 88,505" style="fill:rgb(0,0,0)"/>
+<path d="M77,510L94,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M115,525L147,525A15 15 0 0 0 162 510A15 15 0 0 0 147 495L115,495A15 15 0 0 0 100 510A15 15 0 0 0 115 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="131" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EACH</text>
+<polygon points="185,510 174,514 174,505" style="fill:rgb(0,0,0)"/>
+<path d="M162,510L179,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,525L224,525A15 15 0 0 0 240 510A15 15 0 0 0 224 495L200,495A15 15 0 0 0 185 510A15 15 0 0 0 200 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="212" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="312,510 300,514 300,505" style="fill:rgb(0,0,0)"/>
+<path d="M240,510L306,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M327,525L366,525A15 15 0 0 0 381 510A15 15 0 0 0 366 495L327,495A15 15 0 0 0 312 510A15 15 0 0 0 327 525Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="404,510 393,514 393,505" style="fill:rgb(0,0,0)"/>
+<path d="M381,510L399,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,525L454,525L454,495L404,495Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="510" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M43,631L82,631A15 15 0 0 0 97 616A15 15 0 0 0 82 600L43,600A15 15 0 0 0 28 616A15 15 0 0 0 43 631Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="616" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BEGIN</text>
+<polygon points="169,616 158,620 158,611" style="fill:rgb(0,0,0)"/>
+<path d="M97,616L163,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M169,631L282,631L282,600L169,600Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="226" y="616" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt</text>
+<polygon points="336,616 324,620 324,611" style="fill:rgb(0,0,0)"/>
+<path d="M282,616L330,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,631A15 15 0 0 0 366 616A15 15 0 0 0 351 600A15 15 0 0 0 336 616A15 15 0 0 0 351 631Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="616" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">;</text>
+<polygon points="402,616 391,620 391,611" style="fill:rgb(0,0,0)"/>
+<path d="M366,616L396,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,631L438,631A15 15 0 0 0 453 616A15 15 0 0 0 438 600L417,600A15 15 0 0 0 402 616A15 15 0 0 0 417 631Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="428" y="616" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="668,616 657,620 657,611" style="fill:rgb(0,0,0)"/>
+<path d="M453,616L662,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="672" cy="616" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M169,668L273,668L273,638L169,638Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="653" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">insert-stmt</text>
+<path d="M169,706L276,706L276,676L169,676Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="223" y="691" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt</text>
+<path d="M169,744L273,744L273,714L169,714Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="729" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="169,729 158,733 158,725" style="fill:rgb(0,0,0)"/>
+<path d="M131,616 L 139,616 Q 146,616 146,631 L 146,714 Q 146,729 155,729 L 163,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,653 158,658 158,649" style="fill:rgb(0,0,0)"/>
+<path d="M146,638 L 146,646 Q 146,653 155,653 L 163,653" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,691 158,695 158,687" style="fill:rgb(0,0,0)"/>
+<path d="M146,676 L 146,684 Q 146,691 155,691 L 163,691" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,729 286,733 286,725" style="fill:rgb(0,0,0)"/>
+<path d="M273,729L292,729" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,729 L 305,729 Q 313,729 313,714 L 313,631 Q 313,616 319,616 L 324,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,653 286,658 286,649" style="fill:rgb(0,0,0)"/>
+<path d="M273,653L292,653" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,653 L 305,653 Q 313,653 313,646 L 313,638" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,691 286,695 286,687" style="fill:rgb(0,0,0)"/>
+<path d="M276,691L292,691" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,691 L 305,691 Q 313,691 313,684 L 313,676" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="226,585 237,581 237,590" style="fill:rgb(0,0,0)"/>
+<path d="M366,616 L 374,616 Q 381,616 381,601 L 381,600 Q 381,585 366,585 L 246,585 L 231,585" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="132,616 120,620 120,611" style="fill:rgb(0,0,0)"/>
+<path d="M226,585 L 124,585 Q 109,585 109,600 L 109,601 Q 109,616 117,616 L 126,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="602,434 597,423 606,423" style="fill:rgb(0,0,0)"/>
+<path d="M587,290 L 594,290 Q 602,290 602,305 L 602,414 L 602,429" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="226,472 237,468 237,476" style="fill:rgb(0,0,0)"/>
+<path d="M602,434 L 602,457 Q 602,472 587,472 L 246,472 L 231,472" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,616 17,620 17,611" style="fill:rgb(0,0,0)"/>
+<path d="M226,472 L 20,472 Q 5,472 5,487 L 5,601 Q 5,616 14,616 L 23,616" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,510 17,514 17,505" style="fill:rgb(0,0,0)"/>
+<path d="M5,495 L 5,502 Q 5,510 14,510 L 23,510" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="226,547 237,543 237,552" style="fill:rgb(0,0,0)"/>
+<path d="M454,510 L 461,510 Q 469,510 469,525 L 469,532 Q 469,547 454,547 L 246,547 L 231,547" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M226,547 L 20,547 Q 5,547 5,555 L 5,562" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,510 L 247,510 Q 255,510 255,525 L 255,532 Q 255,547 247,547 L 240,547" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,510 L 297,510 Q 282,510 282,495 L 282,487 Q 282,472 297,472 L 312,472" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#delete-stmt">delete-stmt</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#insert-stmt">insert-stmt</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#update-stmt">update-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>
+</div>
+
+<a name="create-view-stmt"></a><h4>create-view-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:885px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 885.677 232.632">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<path d="M167,56L199,56A15 15 0 0 0 214 41A15 15 0 0 0 199 26L167,26A15 15 0 0 0 152 41A15 15 0 0 0 167 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMP</text>
+<path d="M167,94L259,94A15 15 0 0 0 274 79A15 15 0 0 0 259 64L167,64A15 15 0 0 0 152 79A15 15 0 0 0 167 94Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="79" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TEMPORARY</text>
+<path d="M325,32L355,32A15 15 0 0 0 370 17A15 15 0 0 0 355 2L325,2A15 15 0 0 0 310 17A15 15 0 0 0 325 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="340" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIEW</text>
+<polygon points="213,17 201,21 201,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L207,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,17 299,21 299,12" style="fill:rgb(0,0,0)"/>
+<path d="M213,17L305,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,41 140,45 140,37" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,29 Q 131,41 138,41 L 146,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="152,79 140,83 140,74" style="fill:rgb(0,0,0)"/>
+<path d="M116,17 L 123,17 Q 131,17 131,32 L 131,64 Q 131,79 138,79 L 146,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M274,79 L 282,79 Q 289,79 289,64 L 289,32 Q 289,17 294,17 L 299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M214,41 L 274,41 Q 289,41 289,33 L 289,26" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M370,17L400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M421,32A15 15 0 0 0 436 17A15 15 0 0 0 421 2A15 15 0 0 0 406 17A15 15 0 0 0 421 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="421" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="459,17 447,21 447,12" style="fill:rgb(0,0,0)"/>
+<path d="M436,17L453,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M474,32L494,32A15 15 0 0 0 509 17A15 15 0 0 0 494 2L474,2A15 15 0 0 0 459 17A15 15 0 0 0 474 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="532,17 521,21 521,12" style="fill:rgb(0,0,0)"/>
+<path d="M509,17L527,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,32L592,32A15 15 0 0 0 607 17A15 15 0 0 0 592 2L547,2A15 15 0 0 0 532 17A15 15 0 0 0 547 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="570" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="213,109 224,105 224,113" style="fill:rgb(0,0,0)"/>
+<path d="M370,17 L 377,17 Q 385,17 385,32 L 385,94 Q 385,109 370,109 L 234,109 L 219,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="532,109 544,105 544,113" style="fill:rgb(0,0,0)"/>
+<path d="M607,17 L 615,17 Q 622,17 622,32 L 622,94 Q 622,109 607,109 L 553,109 L 538,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,109L310,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="28,147 17,151 17,142" style="fill:rgb(0,0,0)"/>
+<path d="M310,109 L 20,109 Q 5,109 5,124 L 5,132 Q 5,147 14,147 L 23,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M43,162L140,162A15 15 0 0 0 155 147A15 15 0 0 0 140 132L43,132A15 15 0 0 0 28 147A15 15 0 0 0 43 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="178,147 166,151 166,142" style="fill:rgb(0,0,0)"/>
+<path d="M155,147L172,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M193,162A15 15 0 0 0 208 147A15 15 0 0 0 193 132A15 15 0 0 0 178 147A15 15 0 0 0 193 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="147" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="244,147 233,151 233,142" style="fill:rgb(0,0,0)"/>
+<path d="M208,147L238,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,162L330,162A15 15 0 0 0 345 147A15 15 0 0 0 330 132L259,132A15 15 0 0 0 244 147A15 15 0 0 0 259 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="295" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">view-name</text>
+<polygon points="383,177 372,181 372,173" style="fill:rgb(0,0,0)"/>
+<path d="M345,147 L 353,147 Q 360,147 360,162 L 360,162 Q 360,177 369,177 L 378,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M399,192A15 15 0 0 0 414 177A15 15 0 0 0 399 162A15 15 0 0 0 383 177A15 15 0 0 0 399 192Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="399" y="177" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="450,177 438,181 438,173" style="fill:rgb(0,0,0)"/>
+<path d="M414,177L444,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M465,192L559,192A15 15 0 0 0 574 177A15 15 0 0 0 559 162L465,162A15 15 0 0 0 450 177A15 15 0 0 0 465 192Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="512" y="177" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="610,177 599,181 599,173" style="fill:rgb(0,0,0)"/>
+<path d="M574,177L604,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M625,192A15 15 0 0 0 640 177A15 15 0 0 0 625 162A15 15 0 0 0 610 177A15 15 0 0 0 625 192Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="625" y="177" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="678,147 667,151 667,142" style="fill:rgb(0,0,0)"/>
+<path d="M640,177 L 648,177 Q 655,177 655,162 L 655,162 Q 655,147 664,147 L 673,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M693,162L697,162A15 15 0 0 0 713 147A15 15 0 0 0 697 132L693,132A15 15 0 0 0 678 147A15 15 0 0 0 693 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="695" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="736,147 724,151 724,142" style="fill:rgb(0,0,0)"/>
+<path d="M713,147L730,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M736,162L840,162L840,132L736,132Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="788" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="876,147 864,151 864,142" style="fill:rgb(0,0,0)"/>
+<path d="M840,147L870,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="879" cy="147" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="92,177 80,181 80,173" style="fill:rgb(0,0,0)"/>
+<path d="M5,132 L 5,162 Q 5,177 20,177 L 71,177 L 86,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M92,177 L 206,177 Q 221,177 221,162 L 221,162 Q 221,147 227,147 L 233,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="512,147 500,151 500,142" style="fill:rgb(0,0,0)"/>
+<path d="M345,147L506,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M512,147L667,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M512,230A15 15 0 0 0 527 215A15 15 0 0 0 512 200A15 15 0 0 0 497 215A15 15 0 0 0 512 230Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="512" y="215" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="527,215 539,211 539,219" style="fill:rgb(0,0,0)"/>
+<path d="M574,177 L 582,177 Q 589,177 589,192 L 589,200 Q 589,215 574,215 L 548,215 L 533,215" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M497,215 L 442,215 Q 427,215 427,200 L 427,192 Q 427,177 434,177 L 442,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>
+</div>
+
+<a name="create-virtual-table-stmt"></a><h4>create-virtual-table-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:624px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 624.096 259.848">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<polygon points="139,17 127,21 127,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L133,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M154,32L213,32A15 15 0 0 0 228 17A15 15 0 0 0 213 2L154,2A15 15 0 0 0 139 17A15 15 0 0 0 154 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIRTUAL</text>
+<polygon points="251,17 240,21 240,12" style="fill:rgb(0,0,0)"/>
+<path d="M228,17L246,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,32L306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2L266,2A15 15 0 0 0 251 17A15 15 0 0 0 266 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="286" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M372,32A15 15 0 0 0 387 17A15 15 0 0 0 372 2A15 15 0 0 0 357 17A15 15 0 0 0 372 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="372" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="410,17 399,21 399,12" style="fill:rgb(0,0,0)"/>
+<path d="M387,17L404,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M425,32L445,32A15 15 0 0 0 461 17A15 15 0 0 0 445 2L425,2A15 15 0 0 0 410 17A15 15 0 0 0 425 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="435" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="484,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M461,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,32L543,32A15 15 0 0 0 558 17A15 15 0 0 0 543 2L499,2A15 15 0 0 0 484 17A15 15 0 0 0 499 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="521" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<path d="M47,108L143,108A15 15 0 0 0 159 92A15 15 0 0 0 143 77L47,77A15 15 0 0 0 32 92A15 15 0 0 0 47 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="182,92 170,97 170,88" style="fill:rgb(0,0,0)"/>
+<path d="M159,92L176,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,108A15 15 0 0 0 212 92A15 15 0 0 0 197 77A15 15 0 0 0 182 92A15 15 0 0 0 197 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="197" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="248,92 236,97 236,88" style="fill:rgb(0,0,0)"/>
+<path d="M212,92L242,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M263,108L338,108A15 15 0 0 0 353 92A15 15 0 0 0 338 77L263,77A15 15 0 0 0 248 92A15 15 0 0 0 263 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<path d="M47,219L86,219A15 15 0 0 0 101 204A15 15 0 0 0 86 189L47,189A15 15 0 0 0 32 204A15 15 0 0 0 47 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="67" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="124,204 113,209 113,200" style="fill:rgb(0,0,0)"/>
+<path d="M101,204L118,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M139,219L234,219A15 15 0 0 0 249 204A15 15 0 0 0 234 189L139,189A15 15 0 0 0 124 204A15 15 0 0 0 139 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">module-name</text>
+<polygon points="285,204 274,209 274,200" style="fill:rgb(0,0,0)"/>
+<path d="M249,204L279,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,219A15 15 0 0 0 315 204A15 15 0 0 0 300 189A15 15 0 0 0 285 204A15 15 0 0 0 300 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="204" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,204 340,209 340,200" style="fill:rgb(0,0,0)"/>
+<path d="M315,204L346,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,219L497,219A15 15 0 0 0 512 204A15 15 0 0 0 497 189L366,189A15 15 0 0 0 351 204A15 15 0 0 0 366 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">module-argument</text>
+<polygon points="548,204 536,209 536,200" style="fill:rgb(0,0,0)"/>
+<path d="M512,204L542,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M563,219A15 15 0 0 0 578 204A15 15 0 0 0 563 189A15 15 0 0 0 548 204A15 15 0 0 0 563 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="563" y="204" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="614,204 603,209 603,200" style="fill:rgb(0,0,0)"/>
+<path d="M578,204L608,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="618" cy="204" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,257A15 15 0 0 0 447 242A15 15 0 0 0 432 227A15 15 0 0 0 417 242A15 15 0 0 0 432 257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="242" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="447,242 458,238 458,246" style="fill:rgb(0,0,0)"/>
+<path d="M512,204 L 519,204 Q 527,204 527,219 L 527,227 Q 527,242 512,242 L 468,242 L 453,242" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,242 L 343,242 Q 328,242 328,227 L 328,219 Q 328,204 336,204 L 343,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="432,180 420,184 420,176" style="fill:rgb(0,0,0)"/>
+<path d="M249,204 L 257,204 Q 264,204 264,192 Q 264,180 279,180 L 411,180 L 426,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,180 L 576,180 Q 591,180 591,192 Q 591,204 599,204 L 606,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,153 198,149 198,157" style="fill:rgb(0,0,0)"/>
+<path d="M353,92 L 361,92 Q 368,92 368,107 L 368,138 Q 368,153 353,153 L 207,153 L 192,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,204 20,209 20,200" style="fill:rgb(0,0,0)"/>
+<path d="M187,153 L 20,153 Q 5,153 5,168 L 5,189 Q 5,204 16,204 L 26,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="429,62 441,58 441,66" style="fill:rgb(0,0,0)"/>
+<path d="M558,17 L 566,17 Q 573,17 573,32 L 573,47 Q 573,62 558,62 L 450,62 L 435,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,92 20,97 20,88" style="fill:rgb(0,0,0)"/>
+<path d="M429,62 L 20,62 Q 5,62 5,77 L 5,77 Q 5,92 16,92 L 26,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,47 332,35 340,35" style="fill:rgb(0,0,0)"/>
+<path d="M321,17 L 328,17 Q 336,17 336,29 L 336,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,47 L 336,54 Q 336,62 328,62 L 321,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="95,123 84,127 84,118" style="fill:rgb(0,0,0)"/>
+<path d="M5,77 L 5,108 Q 5,123 20,123 L 74,123 L 89,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,123 L 210,123 Q 225,123 225,108 L 225,107 Q 225,92 231,92 L 236,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createvtab.html">lang_createvtab.html</a>
+</div>
+
+<a name="cte-table-name"></a><h4>cte-table-name:</h4><div class='imgcontainer'>
+<div style="max-width:475px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 475.949 91.8">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,36 20,41 20,32" style="fill:rgb(0,0,0)"/>
+<path d="M9,36L26,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,51L122,51A15 15 0 0 0 137 36A15 15 0 0 0 122 21L47,21A15 15 0 0 0 32 36A15 15 0 0 0 47 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="173,36 162,41 162,32" style="fill:rgb(0,0,0)"/>
+<path d="M137,36L168,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M188,51A15 15 0 0 0 204 36A15 15 0 0 0 188 21A15 15 0 0 0 173 36A15 15 0 0 0 188 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="188" y="36" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="240,36 228,41 228,32" style="fill:rgb(0,0,0)"/>
+<path d="M204,36L234,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M255,51L349,51A15 15 0 0 0 364 36A15 15 0 0 0 349 21L255,21A15 15 0 0 0 240 36A15 15 0 0 0 255 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="400,36 388,41 388,32" style="fill:rgb(0,0,0)"/>
+<path d="M364,36L394,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,51A15 15 0 0 0 430 36A15 15 0 0 0 415 21A15 15 0 0 0 400 36A15 15 0 0 0 415 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="36" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="466,36 455,41 455,32" style="fill:rgb(0,0,0)"/>
+<path d="M430,36L460,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="470" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,89A15 15 0 0 0 317 74L317,74A15 15 0 0 0 302 59A15 15 0 0 0 287 74L287,74A15 15 0 0 0 302 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="317,74 328,70 328,78" style="fill:rgb(0,0,0)"/>
+<path d="M364,36 L 371,36 Q 379,36 379,51 L 379,59 Q 379,74 364,74 L 338,74 L 323,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,74 L 232,74 Q 217,74 217,59 L 217,51 Q 217,36 224,36 L 232,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="302,6 290,10 290,2" style="fill:rgb(0,0,0)"/>
+<path d="M137,36 L 145,36 Q 152,36 152,21 L 152,21 Q 152,6 167,6 L 281,6 L 296,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M302,6 L 422,6 Q 437,6 437,21 L 437,21 Q 437,36 445,36 L 452,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#recursive-cte">recursive-cte</a>&nbsp;&nbsp; <a href="#with-clause">with-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>
+</div>
+
+<a name="delete-stmt"></a><h4>delete-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:648px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 648.706 220.32">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L114,32A15 15 0 0 0 129 17A15 15 0 0 0 114 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="98" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M189,62L275,62A15 15 0 0 0 290 47A15 15 0 0 0 275 32L189,32A15 15 0 0 0 174 47A15 15 0 0 0 189 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="232" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="232,17 220,21 220,12" style="fill:rgb(0,0,0)"/>
+<path d="M129,17L226,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,17 368,21 368,12" style="fill:rgb(0,0,0)"/>
+<path d="M232,17L374,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,32L606,32L606,2L380,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="174,47 162,51 162,43" style="fill:rgb(0,0,0)"/>
+<path d="M129,17 L 136,17 Q 144,17 144,32 L 144,32 Q 144,47 156,47 L 168,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,47 301,51 301,43" style="fill:rgb(0,0,0)"/>
+<path d="M290,47L307,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,47 L 321,47 Q 328,47 328,32 L 328,32 Q 328,17 343,17 L 353,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,70A15 15 0 0 0 508 55L508,55A15 15 0 0 0 493 39A15 15 0 0 0 478 55L478,55A15 15 0 0 0 493 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="508,55 520,50 520,59" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,40 Q 621,55 606,55 L 529,55 L 514,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,55 L 372,55 Q 357,55 357,40 L 357,32 Q 357,17 363,17 L 368,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,138L136,138A15 15 0 0 0 151 123A15 15 0 0 0 136 108L83,108A15 15 0 0 0 68 123A15 15 0 0 0 83 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="174,123 163,127 163,118" style="fill:rgb(0,0,0)"/>
+<path d="M151,123L168,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,138L224,138A15 15 0 0 0 239 123A15 15 0 0 0 224 108L189,108A15 15 0 0 0 174 123A15 15 0 0 0 189 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="207" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="262,123 251,127 251,118" style="fill:rgb(0,0,0)"/>
+<path d="M239,123L256,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M262,138L447,138L447,108L262,108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<circle cx="642" cy="213" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M639,213 L 618,213 Q 603,213 603,198 L 603,198 Q 603,183 595,183 L 588,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M437,198L588,198L588,168L437,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="512" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="437,183 425,187 425,179" style="fill:rgb(0,0,0)"/>
+<path d="M431,183 L 421,183 Q 410,183 410,198 L 410,198 Q 410,213 403,213 L 395,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,213 384,218 384,209" style="fill:rgb(0,0,0)"/>
+<path d="M390,213 L 379,213 Q 369,213 369,198 L 369,198 Q 369,183 361,183 L 354,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M305,198L354,198L354,168L305,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="329" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="305,183 293,187 293,179" style="fill:rgb(0,0,0)"/>
+<path d="M299,183L282,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,198L267,198A15 15 0 0 0 282 183A15 15 0 0 0 267 168L217,168A15 15 0 0 0 202 183A15 15 0 0 0 217 198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="242" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="355,153 366,149 366,157" style="fill:rgb(0,0,0)"/>
+<path d="M447,123 L 455,123 Q 462,123 462,138 L 462,138 Q 462,153 447,153 L 375,153 L 360,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="202,183 190,187 190,179" style="fill:rgb(0,0,0)"/>
+<path d="M355,153 L 195,153 Q 180,153 180,168 L 180,168 Q 180,183 188,183 L 196,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="639,213 627,218 627,209" style="fill:rgb(0,0,0)"/>
+<path d="M180,172 L 180,198 Q 180,213 195,213 L 618,213 L 633,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="355,85 366,81 366,89" style="fill:rgb(0,0,0)"/>
+<path d="M606,17 L 614,17 Q 621,17 621,32 L 621,70 Q 621,85 606,85 L 375,85 L 360,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,123 56,127 56,118" style="fill:rgb(0,0,0)"/>
+<path d="M355,85 L 62,85 Q 47,85 47,100 L 47,108 Q 47,123 55,123 L 62,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,47 43,36 51,36" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,29 L 47,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,47L47,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#create-trigger-stmt">create-trigger-stmt</a>&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#common-table-expression">common-table-expression</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#qualified-table-name">qualified-table-name</a>&nbsp;&nbsp; <a href="#returning-clause">returning-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>
+</div>
+
+<a name="delete-stmt-limited"></a><h4>delete-stmt-limited:</h4><div class='imgcontainer'>
+<div style="max-width:623px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 623.266 541.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,138L113,138A15 15 0 0 0 128 123A15 15 0 0 0 113 108L60,108A15 15 0 0 0 45 123A15 15 0 0 0 60 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="151,123 140,127 140,118" style="fill:rgb(0,0,0)"/>
+<path d="M128,123L145,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M166,138L201,138A15 15 0 0 0 216 123A15 15 0 0 0 201 108L166,108A15 15 0 0 0 151 123A15 15 0 0 0 166 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="239,123 228,127 228,118" style="fill:rgb(0,0,0)"/>
+<path d="M216,123L233,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,138L424,138L424,108L239,108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="123" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<polygon points="45,123 33,127 33,118" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,108 Q 24,123 31,123 L 39,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,85 343,81 343,89" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,70 Q 598,85 583,85 L 352,85 L 337,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M332,85 L 39,85 Q 24,85 24,92 L 24,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,213L109,213A15 15 0 0 0 125 198A15 15 0 0 0 109 183L60,183A15 15 0 0 0 45 198A15 15 0 0 0 60 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="148,198 136,203 136,194" style="fill:rgb(0,0,0)"/>
+<path d="M125,198L142,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M148,213L197,213L197,183L148,183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="172" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M45,289L196,289L196,259L45,259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="120" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<path d="M60,365L105,365A15 15 0 0 0 120 349A15 15 0 0 0 105 334L60,334A15 15 0 0 0 45 349A15 15 0 0 0 60 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="82" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="143,349 131,354 131,345" style="fill:rgb(0,0,0)"/>
+<path d="M120,349L137,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,365L162,365A15 15 0 0 0 177 349A15 15 0 0 0 162 334L158,334A15 15 0 0 0 143 349A15 15 0 0 0 158 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="160" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="213,349 201,354 201,345" style="fill:rgb(0,0,0)"/>
+<path d="M177,349L207,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M213,365L343,365L343,334L213,334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M278,402A15 15 0 0 0 293 387A15 15 0 0 0 278 372A15 15 0 0 0 263 387A15 15 0 0 0 278 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="387" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M60,470L93,470A15 15 0 0 0 109 455A15 15 0 0 0 93 440L60,440A15 15 0 0 0 45 455A15 15 0 0 0 60 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,455 120,460 120,451" style="fill:rgb(0,0,0)"/>
+<path d="M109,455L126,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,470L181,470L181,440L132,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,486 207,490 207,481" style="fill:rgb(0,0,0)"/>
+<path d="M181,455 L 188,455 Q 196,455 196,470 L 196,471 Q 196,486 204,486 L 213,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,501L285,501A15 15 0 0 0 300 486A15 15 0 0 0 285 470L234,470A15 15 0 0 0 219 486A15 15 0 0 0 234 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="323,486 312,490 312,481" style="fill:rgb(0,0,0)"/>
+<path d="M300,486L318,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,501L373,501L373,470L323,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M234,538A15 15 0 0 0 249 523A15 15 0 0 0 234 508A15 15 0 0 0 219 523A15 15 0 0 0 234 538Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="523" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="272,523 261,528 261,519" style="fill:rgb(0,0,0)"/>
+<path d="M249,523L266,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,538L321,538L321,508L272,508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="523" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,523 207,528 207,519" style="fill:rgb(0,0,0)"/>
+<path d="M181,455 L 188,455 Q 196,455 196,470 L 196,508 Q 196,523 204,523 L 213,523" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,455 602,460 602,451" style="fill:rgb(0,0,0)"/>
+<path d="M181,455L608,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="455" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="575,123 564,127 564,118" style="fill:rgb(0,0,0)"/>
+<path d="M424,123L570,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M575,123 L 583,123 Q 590,123 590,138 L 590,440 Q 590,455 598,455 L 605,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="239,160 251,156 251,165" style="fill:rgb(0,0,0)"/>
+<path d="M424,123 L 431,123 Q 439,123 439,138 L 439,145 Q 439,160 424,160 L 260,160 L 245,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,198 33,203 33,194" style="fill:rgb(0,0,0)"/>
+<path d="M239,160 L 39,160 Q 24,160 24,175 L 24,183 Q 24,198 31,198 L 39,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="575,198 564,203 564,194" style="fill:rgb(0,0,0)"/>
+<path d="M197,198L570,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M575,198 L 583,198 Q 590,198 590,206 L 590,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,274 33,278 33,270" style="fill:rgb(0,0,0)"/>
+<path d="M24,259 L 24,266 Q 24,274 31,274 L 39,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="120,312 132,307 132,316" style="fill:rgb(0,0,0)"/>
+<path d="M196,274 L 203,274 Q 211,274 211,289 L 211,297 Q 211,312 196,312 L 141,312 L 126,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M120,312 L 39,312 Q 24,312 24,319 L 24,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="575,274 564,278 564,270" style="fill:rgb(0,0,0)"/>
+<path d="M196,274L570,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M575,274 L 583,274 Q 590,274 590,281 L 590,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,349 33,354 33,345" style="fill:rgb(0,0,0)"/>
+<path d="M24,183 L 24,334 Q 24,349 31,349 L 39,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="120,236 131,232 131,240" style="fill:rgb(0,0,0)"/>
+<path d="M197,198 L 204,198 Q 212,198 212,213 L 212,221 Q 212,236 197,236 L 140,236 L 125,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M120,236 L 39,236 Q 24,236 24,244 L 24,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="293,387 305,383 305,392" style="fill:rgb(0,0,0)"/>
+<path d="M343,349 L 350,349 Q 358,349 358,364 L 358,372 Q 358,387 343,387 L 314,387 L 299,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M263,387 L 205,387 Q 190,387 190,372 L 190,364 Q 190,349 197,349 L 205,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,334 L 24,440 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="160,417 171,413 171,422" style="fill:rgb(0,0,0)"/>
+<path d="M343,349 L 350,349 Q 358,349 358,364 L 358,402 Q 358,417 343,417 L 181,417 L 166,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M160,417 L 39,417 Q 24,417 24,425 L 24,432" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,455 435,460 435,451" style="fill:rgb(0,0,0)"/>
+<path d="M321,523 L 396,523 Q 411,523 411,508 L 411,470 Q 411,455 426,455 L 426,455 L 441,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,486 384,490 384,481" style="fill:rgb(0,0,0)"/>
+<path d="M373,486L390,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,486 L 403,486 Q 411,486 411,478 L 411,471" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#common-table-expression">common-table-expression</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#ordering-term">ordering-term</a>&nbsp;&nbsp; <a href="#qualified-table-name">qualified-table-name</a>&nbsp;&nbsp; <a href="#returning-clause">returning-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>
+</div>
+
+<a name="detach-stmt"></a><h4>detach-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:456px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 456.595 47.952">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L104,32A15 15 0 0 0 119 17A15 15 0 0 0 104 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DETACH</text>
+<polygon points="155,17 143,21 143,12" style="fill:rgb(0,0,0)"/>
+<path d="M119,17L149,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M170,32L246,32A15 15 0 0 0 261 17A15 15 0 0 0 246 2L170,2A15 15 0 0 0 155 17A15 15 0 0 0 170 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="208" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DATABASE</text>
+<polygon points="297,17 286,21 286,12" style="fill:rgb(0,0,0)"/>
+<path d="M261,17L291,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,32L409,32A15 15 0 0 0 424 17A15 15 0 0 0 409 2L312,2A15 15 0 0 0 297 17A15 15 0 0 0 312 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="447,17 435,21 435,12" style="fill:rgb(0,0,0)"/>
+<path d="M424,17L441,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="450" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="208,41 196,45 196,37" style="fill:rgb(0,0,0)"/>
+<path d="M119,17 L 126,17 Q 134,17 134,29 Q 134,41 149,41 L 187,41 L 202,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M208,41 L 255,41 Q 270,41 270,29 Q 270,17 278,17 L 285,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_detach.html">lang_detach.html</a>
+</div>
+
+<a name="drop-index-stmt"></a><h4>drop-index-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:761px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 761.27 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L171,32A15 15 0 0 0 186 17A15 15 0 0 0 171 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="151" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEX</text>
+<polygon points="222,17 210,21 210,12" style="fill:rgb(0,0,0)"/>
+<path d="M186,17L216,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,32A15 15 0 0 0 252 17A15 15 0 0 0 237 2A15 15 0 0 0 222 17A15 15 0 0 0 237 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="237" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="275,17 263,21 263,12" style="fill:rgb(0,0,0)"/>
+<path d="M252,17L269,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,32L335,32A15 15 0 0 0 350 17A15 15 0 0 0 335 2L290,2A15 15 0 0 0 275 17A15 15 0 0 0 290 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="404,17 392,21 392,12" style="fill:rgb(0,0,0)"/>
+<path d="M350,17L398,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,32L515,32A15 15 0 0 0 530 17A15 15 0 0 0 515 2L419,2A15 15 0 0 0 404 17A15 15 0 0 0 419 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="467" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="553,17 542,21 542,12" style="fill:rgb(0,0,0)"/>
+<path d="M530,17L548,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,32A15 15 0 0 0 584 17A15 15 0 0 0 569 2A15 15 0 0 0 553 17A15 15 0 0 0 569 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="569" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="620,17 608,21 608,12" style="fill:rgb(0,0,0)"/>
+<path d="M584,17L614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M635,32L713,32A15 15 0 0 0 728 17A15 15 0 0 0 713 2L635,2A15 15 0 0 0 620 17A15 15 0 0 0 635 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<polygon points="751,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M728,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="755" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,47 263,51 263,43" style="fill:rgb(0,0,0)"/>
+<path d="M186,17 L 193,17 Q 201,17 201,32 L 201,32 Q 201,47 216,47 L 254,47 L 269,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,47 L 350,47 Q 365,47 365,32 L 365,32 Q 365,17 372,17 L 380,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="467,47 456,51 456,43" style="fill:rgb(0,0,0)"/>
+<path d="M372,17 L 379,17 Q 387,17 387,32 L 387,32 Q 387,47 402,47 L 446,47 L 461,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,47 L 584,47 Q 599,47 599,32 L 599,32 Q 599,17 606,17 L 614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_dropindex.html">lang_dropindex.html</a>
+</div>
+
+<a name="drop-table-stmt"></a><h4>drop-table-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:758px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 758.16 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L171,32A15 15 0 0 0 186 17A15 15 0 0 0 171 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="151" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="222,17 210,21 210,12" style="fill:rgb(0,0,0)"/>
+<path d="M186,17L216,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,32A15 15 0 0 0 252 17A15 15 0 0 0 237 2A15 15 0 0 0 222 17A15 15 0 0 0 237 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="237" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="275,17 264,21 264,12" style="fill:rgb(0,0,0)"/>
+<path d="M252,17L269,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,32L335,32A15 15 0 0 0 350 17A15 15 0 0 0 335 2L290,2A15 15 0 0 0 275 17A15 15 0 0 0 290 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="404,17 392,21 392,12" style="fill:rgb(0,0,0)"/>
+<path d="M350,17L398,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,32L515,32A15 15 0 0 0 531 17A15 15 0 0 0 515 2L419,2A15 15 0 0 0 404 17A15 15 0 0 0 419 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="467" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="554,17 542,21 542,12" style="fill:rgb(0,0,0)"/>
+<path d="M531,17L548,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,32A15 15 0 0 0 584 17A15 15 0 0 0 569 2A15 15 0 0 0 554 17A15 15 0 0 0 569 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="569" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="620,17 608,21 608,12" style="fill:rgb(0,0,0)"/>
+<path d="M584,17L614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M635,32L710,32A15 15 0 0 0 725 17A15 15 0 0 0 710 2L635,2A15 15 0 0 0 620 17A15 15 0 0 0 635 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="673" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="748,17 737,21 737,12" style="fill:rgb(0,0,0)"/>
+<path d="M725,17L743,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="752" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,47 264,51 264,43" style="fill:rgb(0,0,0)"/>
+<path d="M186,17 L 193,17 Q 201,17 201,32 L 201,32 Q 201,47 216,47 L 254,47 L 269,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,47 L 350,47 Q 365,47 365,32 L 365,32 Q 365,17 372,17 L 380,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="467,47 456,51 456,43" style="fill:rgb(0,0,0)"/>
+<path d="M372,17 L 379,17 Q 387,17 387,32 L 387,32 Q 387,47 402,47 L 447,47 L 462,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,47 L 584,47 Q 599,47 599,32 L 599,32 Q 599,17 606,17 L 614,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_droptable.html">lang_droptable.html</a>
+</div>
+
+<a name="drop-trigger-stmt"></a><h4>drop-trigger-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:795px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 795.37 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L191,32A15 15 0 0 0 207 17A15 15 0 0 0 191 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="161" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRIGGER</text>
+<polygon points="243,17 231,21 231,12" style="fill:rgb(0,0,0)"/>
+<path d="M207,17L237,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,32A15 15 0 0 0 273 17A15 15 0 0 0 258 2A15 15 0 0 0 243 17A15 15 0 0 0 258 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="296,17 284,21 284,12" style="fill:rgb(0,0,0)"/>
+<path d="M273,17L290,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,32L356,32A15 15 0 0 0 371 17A15 15 0 0 0 356 2L311,2A15 15 0 0 0 296 17A15 15 0 0 0 311 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="425,17 413,21 413,12" style="fill:rgb(0,0,0)"/>
+<path d="M371,17L419,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,32L536,32A15 15 0 0 0 551 17A15 15 0 0 0 536 2L440,2A15 15 0 0 0 425 17A15 15 0 0 0 440 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="574,17 563,21 563,12" style="fill:rgb(0,0,0)"/>
+<path d="M551,17L569,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M589,32A15 15 0 0 0 605 17A15 15 0 0 0 589 2A15 15 0 0 0 574 17A15 15 0 0 0 589 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="589" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="641,17 629,21 629,12" style="fill:rgb(0,0,0)"/>
+<path d="M605,17L635,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M656,32L747,32A15 15 0 0 0 762 17A15 15 0 0 0 747 2L656,2A15 15 0 0 0 641 17A15 15 0 0 0 656 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="702" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">trigger-name</text>
+<polygon points="786,17 774,21 774,12" style="fill:rgb(0,0,0)"/>
+<path d="M762,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="789" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="296,47 284,51 284,43" style="fill:rgb(0,0,0)"/>
+<path d="M207,17 L 214,17 Q 222,17 222,32 L 222,32 Q 222,47 237,47 L 275,47 L 290,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M296,47 L 371,47 Q 386,47 386,32 L 386,32 Q 386,17 393,17 L 401,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="488,47 476,51 476,43" style="fill:rgb(0,0,0)"/>
+<path d="M392,17 L 400,17 Q 407,17 407,32 L 407,32 Q 407,47 422,47 L 467,47 L 482,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,47 L 605,47 Q 620,47 620,32 L 620,32 Q 620,17 627,17 L 635,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_droptrigger.html">lang_droptrigger.html</a>
+</div>
+
+<a name="drop-view-stmt"></a><h4>drop-view-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:743px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 743.76 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="63" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DROP</text>
+<polygon points="116,17 105,21 105,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L110,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M131,32L160,32A15 15 0 0 0 176 17A15 15 0 0 0 160 2L131,2A15 15 0 0 0 116 17A15 15 0 0 0 131 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIEW</text>
+<polygon points="212,17 200,21 200,12" style="fill:rgb(0,0,0)"/>
+<path d="M176,17L206,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M227,32A15 15 0 0 0 242 17A15 15 0 0 0 227 2A15 15 0 0 0 212 17A15 15 0 0 0 227 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="227" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="265,17 253,21 253,12" style="fill:rgb(0,0,0)"/>
+<path d="M242,17L259,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M280,32L325,32A15 15 0 0 0 340 17A15 15 0 0 0 325 2L280,2A15 15 0 0 0 265 17A15 15 0 0 0 280 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="394,17 382,21 382,12" style="fill:rgb(0,0,0)"/>
+<path d="M340,17L388,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,32L505,32A15 15 0 0 0 520 17A15 15 0 0 0 505 2L409,2A15 15 0 0 0 394 17A15 15 0 0 0 409 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="543,17 532,21 532,12" style="fill:rgb(0,0,0)"/>
+<path d="M520,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,32A15 15 0 0 0 574 17A15 15 0 0 0 558 2A15 15 0 0 0 543 17A15 15 0 0 0 558 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="558" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="610,17 598,21 598,12" style="fill:rgb(0,0,0)"/>
+<path d="M574,17L604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M625,32L696,32A15 15 0 0 0 711 17A15 15 0 0 0 696 2L625,2A15 15 0 0 0 610 17A15 15 0 0 0 625 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="660" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">view-name</text>
+<polygon points="734,17 722,21 722,12" style="fill:rgb(0,0,0)"/>
+<path d="M711,17L728,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="738" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="265,47 253,51 253,43" style="fill:rgb(0,0,0)"/>
+<path d="M176,17 L 183,17 Q 191,17 191,32 L 191,32 Q 191,47 206,47 L 244,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,47 L 340,47 Q 355,47 355,32 L 355,32 Q 355,17 362,17 L 370,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="457,47 445,51 445,43" style="fill:rgb(0,0,0)"/>
+<path d="M361,17 L 369,17 Q 376,17 376,32 L 376,32 Q 376,47 391,47 L 436,47 L 451,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M457,47 L 574,47 Q 589,47 589,32 L 589,32 Q 589,17 596,17 L 604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_dropview.html">lang_dropview.html</a>
+</div>
+
+<a name="expr"></a><h4>expr:</h4><div class='imgcontainer'>
+<div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#aggregate-function-invocation">aggregate-function-invocation</a>&nbsp;&nbsp; <a href="#attach-stmt">attach-stmt</a>&nbsp;&nbsp; <a href="#column-constraint">column-constraint</a>&nbsp;&nbsp; <a href="#compound-select-stmt">compound-select-stmt</a>&nbsp;&nbsp; <a href="#create-index-stmt">create-index-stmt</a>&nbsp;&nbsp; <a href="#create-trigger-stmt">create-trigger-stmt</a>&nbsp;&nbsp; <a href="#delete-stmt">delete-stmt</a>&nbsp;&nbsp; <a href="#delete-stmt-limited">delete-stmt-limited</a>&nbsp;&nbsp; <a href="#factored-select-stmt">factored-select-stmt</a>&nbsp;&nbsp; <a href="#filter-clause">filter-clause</a>&nbsp;&nbsp; <a href="#frame-spec">frame-spec</a>&nbsp;&nbsp; <a href="#indexed-column">indexed-column</a>&nbsp;&nbsp; <a href="#insert-stmt">insert-stmt</a>&nbsp;&nbsp; <a href="#join-constraint">join-constraint</a>&nbsp;&nbsp; <a href="#ordering-term">ordering-term</a>&nbsp;&nbsp; <a href="#over-clause">over-clause</a>&nbsp;&nbsp; <a href="#result-column">result-column</a>&nbsp;&nbsp; <a href="#returning-clause">returning-clause</a>&nbsp;&nbsp; <a href="#select-core">select-core</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#simple-function-invocation">simple-function-invocation</a>&nbsp;&nbsp; <a href="#simple-select-stmt">simple-select-stmt</a>&nbsp;&nbsp; <a href="#table-constraint">table-constraint</a>&nbsp;&nbsp; <a href="#table-or-subquery">table-or-subquery</a>&nbsp;&nbsp; <a href="#update-stmt">update-stmt</a>&nbsp;&nbsp; <a href="#update-stmt-limited">update-stmt-limited</a>&nbsp;&nbsp; <a href="#upsert-clause">upsert-clause</a>&nbsp;&nbsp; <a href="#window-defn">window-defn</a>&nbsp;&nbsp; <a href="#window-function-invocation">window-function-invocation</a><br></br>
+References:&nbsp;&nbsp; <a href="#filter-clause">filter-clause</a>&nbsp;&nbsp; <a href="#literal-value">literal-value</a>&nbsp;&nbsp; <a href="#over-clause">over-clause</a>&nbsp;&nbsp; <a href="#raise-function">raise-function</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#type-name">type-name</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="factored-select-stmt"></a><h4>factored-select-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:629px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 629.266 500.04">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M117,153L220,153L220,123L117,123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M60,304L105,304A15 15 0 0 0 120 289A15 15 0 0 0 105 274L60,274A15 15 0 0 0 45 289A15 15 0 0 0 60 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="82" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="143,289 131,293 131,285" style="fill:rgb(0,0,0)"/>
+<path d="M120,289L137,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,304L162,304A15 15 0 0 0 177 289A15 15 0 0 0 162 274L158,274A15 15 0 0 0 143 289A15 15 0 0 0 158 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="160" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M60,410L93,410A15 15 0 0 0 109 395A15 15 0 0 0 93 380L60,380A15 15 0 0 0 45 395A15 15 0 0 0 60 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,395 120,399 120,390" style="fill:rgb(0,0,0)"/>
+<path d="M109,395L126,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,410L181,410L181,380L132,380Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,138 105,142 105,133" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,123 Q 24,138 39,138 L 96,138 L 111,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="312,92 323,88 323,97" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 604,17 Q 619,17 619,32 L 619,77 Q 619,92 604,92 L 333,92 L 318,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,92 L 39,92 Q 24,92 24,100 L 24,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M80,198L257,198L257,168L80,168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="183" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="257,183 269,179 269,187" style="fill:rgb(0,0,0)"/>
+<path d="M272,138 L 280,138 Q 287,138 287,153 L 287,168 Q 287,183 275,183 L 263,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M80,183 L 65,183 Q 50,183 50,168 L 50,153 Q 50,138 58,138 L 65,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="296,236 308,232 308,240" style="fill:rgb(0,0,0)"/>
+<path d="M220,138 L 342,138 Q 357,138 357,153 L 357,221 Q 357,236 342,236 L 317,236 L 302,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,289 33,293 33,285" style="fill:rgb(0,0,0)"/>
+<path d="M296,236 L 39,236 Q 24,236 24,251 L 24,274 Q 24,289 31,289 L 39,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="222,289 210,293 210,285" style="fill:rgb(0,0,0)"/>
+<path d="M177,289L216,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,304L352,304L352,274L222,274Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="287" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M287,342A15 15 0 0 0 302 327A15 15 0 0 0 287 312A15 15 0 0 0 272 327A15 15 0 0 0 287 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="287" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="302,327 314,322 314,331" style="fill:rgb(0,0,0)"/>
+<path d="M352,289 L 359,289 Q 367,289 367,304 L 367,312 Q 367,327 352,327 L 323,327 L 308,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,327 L 214,327 Q 199,327 199,312 L 199,304 Q 199,289 205,289 L 210,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,319 384,308 392,308" style="fill:rgb(0,0,0)"/>
+<path d="M352,289 L 373,289 Q 388,289 388,301 L 388,313" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="198,361 210,356 210,365" style="fill:rgb(0,0,0)"/>
+<path d="M388,319 L 388,346 Q 388,361 373,361 L 219,361 L 204,361" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,395 33,399 33,390" style="fill:rgb(0,0,0)"/>
+<path d="M198,361 L 39,361 Q 24,361 24,376 L 24,380 Q 24,395 31,395 L 39,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,327 20,315 28,315" style="fill:rgb(0,0,0)"/>
+<path d="M24,274L24,321" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,327L24,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M255,440L306,440A15 15 0 0 0 321 425A15 15 0 0 0 306 410L255,410A15 15 0 0 0 240 425A15 15 0 0 0 255 440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="425" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="344,425 333,429 333,421" style="fill:rgb(0,0,0)"/>
+<path d="M321,425L339,425" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M344,440L394,440L394,410L344,410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="369" y="425" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="417,425 405,429 405,421" style="fill:rgb(0,0,0)"/>
+<path d="M394,425L411,425" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M255,478A15 15 0 0 0 270 463A15 15 0 0 0 255 448A15 15 0 0 0 240 463A15 15 0 0 0 255 478Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="255" y="463" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="293,463 282,467 282,458" style="fill:rgb(0,0,0)"/>
+<path d="M270,463L287,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M293,478L342,478L342,448L293,448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="318" y="463" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="204,395 192,399 192,390" style="fill:rgb(0,0,0)"/>
+<path d="M181,395L198,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="240,463 228,467 228,458" style="fill:rgb(0,0,0)"/>
+<path d="M204,395 L 211,395 Q 219,395 219,410 L 219,448 Q 219,463 226,463 L 234,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="240,425 228,429 228,421" style="fill:rgb(0,0,0)"/>
+<path d="M204,395 L 211,395 Q 219,395 219,410 L 219,410 Q 219,425 226,425 L 234,425" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="417,395 405,399 405,390" style="fill:rgb(0,0,0)"/>
+<path d="M204,395L411,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,493 608,497 608,489" style="fill:rgb(0,0,0)"/>
+<path d="M417,395 L 438,395 Q 453,395 453,410 L 453,478 Q 453,493 468,493 L 599,493 L 614,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="623" cy="493" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,425 L 438,425 Q 453,425 453,433 L 453,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="417,463 405,467 405,458" style="fill:rgb(0,0,0)"/>
+<path d="M342,463L411,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,463 L 438,463 Q 453,463 453,470 L 453,478" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="417,493 405,497 405,489" style="fill:rgb(0,0,0)"/>
+<path d="M24,380 L 24,478 Q 24,493 39,493 L 396,493 L 411,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,493L489,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+References:&nbsp;&nbsp; <a href="#common-table-expression">common-table-expression</a>&nbsp;&nbsp; <a href="#compound-operator">compound-operator</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#ordering-term">ordering-term</a>&nbsp;&nbsp; <a href="#select-core">select-core</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>
+</div>
+
+<a name="filter-clause"></a><h4>filter-clause:</h4><div class='imgcontainer'>
+<div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#aggregate-function-invocation">aggregate-function-invocation</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#window-function-invocation">window-function-invocation</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="foreign-key-clause"></a><h4>foreign-key-clause:</h4><div class='imgcontainer'>
+<div style="max-width:648px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 648.158 492.48">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L164,70A15 15 0 0 0 179 55A15 15 0 0 0 164 39L60,39A15 15 0 0 0 45 55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REFERENCES</text>
+<polygon points="202,55 190,59 190,50" style="fill:rgb(0,0,0)"/>
+<path d="M179,55L196,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,70L306,70A15 15 0 0 0 322 55A15 15 0 0 0 306 39L217,39A15 15 0 0 0 202 55A15 15 0 0 0 217 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-table</text>
+<polygon points="358,55 346,59 346,50" style="fill:rgb(0,0,0)"/>
+<path d="M322,55L352,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,70A15 15 0 0 0 388 55A15 15 0 0 0 373 39A15 15 0 0 0 358 55A15 15 0 0 0 373 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="373" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="424,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M388,55L418,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M439,70L533,70A15 15 0 0 0 548 55A15 15 0 0 0 533 39L439,39A15 15 0 0 0 424 55A15 15 0 0 0 439 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="584,55 573,59 573,50" style="fill:rgb(0,0,0)"/>
+<path d="M548,55L578,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M599,70A15 15 0 0 0 614 55A15 15 0 0 0 599 39A15 15 0 0 0 584 55A15 15 0 0 0 599 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="599" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M486,32A15 15 0 0 0 501 17L501,17A15 15 0 0 0 486 2A15 15 0 0 0 471 17L471,17A15 15 0 0 0 486 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="501,17 513,12 513,21" style="fill:rgb(0,0,0)"/>
+<path d="M548,55 L 556,55 Q 563,55 563,40 L 563,32 Q 563,17 548,17 L 522,17 L 507,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,17 L 416,17 Q 401,17 401,32 L 401,40 Q 401,55 412,55 L 424,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,176L69,176A15 15 0 0 0 84 160A15 15 0 0 0 69 145L60,145A15 15 0 0 0 45 160A15 15 0 0 0 60 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="64" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="120,160 109,165 109,156" style="fill:rgb(0,0,0)"/>
+<path d="M84,160L114,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,176L188,176A15 15 0 0 0 203 160A15 15 0 0 0 188 145L135,145A15 15 0 0 0 120 160A15 15 0 0 0 135 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="162" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DELETE</text>
+<polygon points="275,160 264,165 264,156" style="fill:rgb(0,0,0)"/>
+<path d="M203,160L269,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,176L306,176A15 15 0 0 0 321 160A15 15 0 0 0 306 145L290,145A15 15 0 0 0 275 160A15 15 0 0 0 290 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="344,160 332,165 332,156" style="fill:rgb(0,0,0)"/>
+<path d="M321,160L338,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M359,176L390,176A15 15 0 0 0 405 160A15 15 0 0 0 390 145L359,145A15 15 0 0 0 344 160A15 15 0 0 0 359 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<path d="M135,213L189,213A15 15 0 0 0 204 198A15 15 0 0 0 189 183L135,183A15 15 0 0 0 120 198A15 15 0 0 0 135 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="162" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="120,198 109,203 109,194" style="fill:rgb(0,0,0)"/>
+<path d="M84,160 L 92,160 Q 99,160 99,175 L 99,183 Q 99,198 107,198 L 114,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M204,198 L 212,198 Q 219,198 219,183 L 219,175 Q 219,160 227,160 L 234,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,213L306,213A15 15 0 0 0 321 198A15 15 0 0 0 306 183L290,183A15 15 0 0 0 275 198A15 15 0 0 0 290 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="344,198 332,203 332,194" style="fill:rgb(0,0,0)"/>
+<path d="M321,198L338,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M359,213L424,213A15 15 0 0 0 440 198A15 15 0 0 0 424 183L359,183A15 15 0 0 0 344 198A15 15 0 0 0 359 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="392" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="463,198 451,203 451,194" style="fill:rgb(0,0,0)"/>
+<path d="M440,198L457,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,198 L 470,198 Q 478,198 478,191 L 478,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,251L357,251A15 15 0 0 0 372 236A15 15 0 0 0 357 221L290,221A15 15 0 0 0 275 236A15 15 0 0 0 290 251Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="324" y="236" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASCADE</text>
+<polygon points="463,236 451,240 451,232" style="fill:rgb(0,0,0)"/>
+<path d="M372,236L457,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,236 L 470,236 Q 478,236 478,229 L 478,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,289L361,289A15 15 0 0 0 376 274A15 15 0 0 0 361 259L290,259A15 15 0 0 0 275 274A15 15 0 0 0 290 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="326" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RESTRICT</text>
+<polygon points="463,274 451,278 451,270" style="fill:rgb(0,0,0)"/>
+<path d="M376,274L457,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,274 L 470,274 Q 478,274 478,266 L 478,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,327L299,327A15 15 0 0 0 314 312A15 15 0 0 0 299 297L290,297A15 15 0 0 0 275 312A15 15 0 0 0 290 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="295" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="337,312 326,316 326,307" style="fill:rgb(0,0,0)"/>
+<path d="M314,312L332,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M353,327L404,327A15 15 0 0 0 419 312A15 15 0 0 0 404 297L353,297A15 15 0 0 0 337 312A15 15 0 0 0 353 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="378" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ACTION</text>
+<polygon points="463,312 451,316 451,307" style="fill:rgb(0,0,0)"/>
+<path d="M419,312L457,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,312 L 470,312 Q 478,312 478,304 L 478,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357L108,357A15 15 0 0 0 123 342L123,342A15 15 0 0 0 108 327L60,327A15 15 0 0 0 45 342L45,342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="84" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<polygon points="146,342 135,346 135,338" style="fill:rgb(0,0,0)"/>
+<path d="M123,342L140,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M161,357L188,357A15 15 0 0 0 203 342L203,342A15 15 0 0 0 188 327L161,327A15 15 0 0 0 146 342L146,342A15 15 0 0 0 161 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="175" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="463,342 451,346 451,338" style="fill:rgb(0,0,0)"/>
+<path d="M203,342L457,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="442,115 453,111 453,119" style="fill:rgb(0,0,0)"/>
+<path d="M463,342 L 470,342 Q 478,342 478,327 L 478,130 Q 478,115 463,115 L 462,115 L 447,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="463,160 451,165 451,156" style="fill:rgb(0,0,0)"/>
+<path d="M405,160L457,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M463,160 L 470,160 Q 478,160 478,153 L 478,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,312 264,316 264,307" style="fill:rgb(0,0,0)"/>
+<path d="M237,160 L 245,160 Q 252,160 252,175 L 252,297 Q 252,312 261,312 L 269,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,274 264,278 264,270" style="fill:rgb(0,0,0)"/>
+<path d="M252,259 L 252,266 Q 252,274 261,274 L 269,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,236 264,240 264,232" style="fill:rgb(0,0,0)"/>
+<path d="M252,221 L 252,228 Q 252,236 261,236 L 269,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="275,198 264,203 264,194" style="fill:rgb(0,0,0)"/>
+<path d="M252,183 L 252,191 Q 252,198 261,198 L 269,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,160 33,165 33,156" style="fill:rgb(0,0,0)"/>
+<path d="M614,55 L 623,55 Q 632,55 632,70 L 632,100 Q 632,115 617,115 L 20,115 Q 5,115 5,130 L 5,145 Q 5,160 20,160 L 24,160 L 39,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M5,145 L 5,327 Q 5,342 20,342 L 24,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="337,91 332,79 341,79" style="fill:rgb(0,0,0)"/>
+<path d="M322,55 L 329,55 Q 337,55 337,70 L 337,70 L 337,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M337,91 L 337,103 Q 337,115 329,115 L 322,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,433L80,433A15 15 0 0 0 95 417A15 15 0 0 0 80 402L60,402A15 15 0 0 0 45 417A15 15 0 0 0 60 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="133,387 122,392 122,383" style="fill:rgb(0,0,0)"/>
+<path d="M95,417 L 103,417 Q 110,417 110,402 L 110,402 Q 110,387 119,387 L 127,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M148,402L250,402A15 15 0 0 0 265 387A15 15 0 0 0 250 372L148,372A15 15 0 0 0 133 387A15 15 0 0 0 148 402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="199" y="387" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRABLE</text>
+<polygon points="303,417 292,422 292,413" style="fill:rgb(0,0,0)"/>
+<path d="M265,387 L 273,387 Q 280,387 280,402 L 280,402 Q 280,417 289,417 L 297,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M318,433L389,433A15 15 0 0 0 405 417A15 15 0 0 0 389 402L318,402A15 15 0 0 0 303 417A15 15 0 0 0 318 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INITIALLY</text>
+<polygon points="428,417 416,422 416,413" style="fill:rgb(0,0,0)"/>
+<path d="M405,417L422,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M443,433L523,433A15 15 0 0 0 538 417A15 15 0 0 0 523 402L443,402A15 15 0 0 0 428 417A15 15 0 0 0 443 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFERRED</text>
+<path d="M318,470L389,470A15 15 0 0 0 405 455A15 15 0 0 0 389 440L318,440A15 15 0 0 0 303 455A15 15 0 0 0 318 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="354" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INITIALLY</text>
+<polygon points="428,455 416,460 416,451" style="fill:rgb(0,0,0)"/>
+<path d="M405,455L422,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M443,470L531,470A15 15 0 0 0 546 455A15 15 0 0 0 531 440L443,440A15 15 0 0 0 428 455A15 15 0 0 0 443 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="487" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IMMEDIATE</text>
+<polygon points="569,455 558,460 558,451" style="fill:rgb(0,0,0)"/>
+<path d="M546,455L564,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="569,417 558,422 558,413" style="fill:rgb(0,0,0)"/>
+<path d="M538,417L564,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="569,387 558,392 558,383" style="fill:rgb(0,0,0)"/>
+<path d="M265,387L564,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="303,455 292,460 292,451" style="fill:rgb(0,0,0)"/>
+<path d="M265,387 L 273,387 Q 280,387 280,402 L 280,440 Q 280,455 289,455 L 297,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="638,486 627,490 627,481" style="fill:rgb(0,0,0)"/>
+<path d="M569,387 L 577,387 Q 584,387 584,402 L 584,471 Q 584,486 599,486 L 618,486 L 633,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="642" cy="486" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,455 L 577,455 Q 584,455 584,463 L 584,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M569,417 L 577,417 Q 584,417 584,425 L 584,432" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M5,327 L 5,471 Q 5,486 20,486 L 612,486 L 627,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M5,372 L 5,380 Q 5,387 20,387 L 118,387 L 133,387" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M5,402 L 5,410 Q 5,417 20,417 L 24,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#column-constraint">column-constraint</a>&nbsp;&nbsp; <a href="#table-constraint">table-constraint</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_altertable.html#altertabaddcol">lang_altertable.html#altertabaddcol</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>
+</div>
+
+<a name="frame-spec"></a><h4>frame-spec:</h4><div class='imgcontainer'>
+<div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#over-clause">over-clause</a>&nbsp;&nbsp; <a href="#window-defn">window-defn</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="indexed-column"></a><h4>indexed-column:</h4><div class='imgcontainer'>
+<div style="max-width:696px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 696.36 102.6">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="113" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="246,47 235,51 235,43" style="fill:rgb(0,0,0)"/>
+<path d="M175,17 L 205,17 Q 220,17 220,32 L 220,32 Q 220,47 230,47 L 240,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,62L325,62A15 15 0 0 0 341 47L341,47A15 15 0 0 0 325 32L261,32A15 15 0 0 0 246 47L246,47A15 15 0 0 0 261 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="293" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="358,47 346,51 346,43" style="fill:rgb(0,0,0)"/>
+<path d="M341,47L352,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M373,62L478,62A15 15 0 0 0 493 47L493,47A15 15 0 0 0 478 32L373,32A15 15 0 0 0 358 47L358,47A15 15 0 0 0 373 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="511,47 499,51 499,43" style="fill:rgb(0,0,0)"/>
+<path d="M493,47L505,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,85 556,89 556,81" style="fill:rgb(0,0,0)"/>
+<path d="M511,47 L 518,47 Q 526,47 526,32 L 526,32 Q 526,17 533,17 Q 541,17 541,32 L 541,70 Q 541,85 551,85 L 561,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,100L613,100A15 15 0 0 0 628 85L628,85A15 15 0 0 0 613 70L582,70A15 15 0 0 0 567 85L567,85A15 15 0 0 0 582 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="597" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="645,85 633,89 633,81" style="fill:rgb(0,0,0)"/>
+<path d="M628,85L639,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="687,17 675,21 675,12" style="fill:rgb(0,0,0)"/>
+<path d="M645,85 L 652,85 Q 660,85 660,70 L 660,32 Q 660,17 670,17 L 681,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="690" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M50,70L100,70L100,39L50,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="175,55 163,59 163,50" style="fill:rgb(0,0,0)"/>
+<path d="M100,55L169,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M175,55 L 182,55 Q 190,55 190,40 L 190,32 Q 190,17 197,17 L 205,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="597,17 586,21 586,12" style="fill:rgb(0,0,0)"/>
+<path d="M358,17L592,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M597,17L675,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,62L599,62A15 15 0 0 0 614 47A15 15 0 0 0 599 32L582,32A15 15 0 0 0 567 47A15 15 0 0 0 582 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="645,47 633,51 633,43" style="fill:rgb(0,0,0)"/>
+<path d="M614,47L639,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M645,47 L 652,47 Q 660,47 660,40 L 660,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="567,47 556,51 556,43" style="fill:rgb(0,0,0)"/>
+<path d="M541,32 L 541,39 Q 541,47 551,47 L 561,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#create-index-stmt">create-index-stmt</a>&nbsp;&nbsp; <a href="#table-constraint">table-constraint</a>&nbsp;&nbsp; <a href="#upsert-clause">upsert-clause</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a>&nbsp;&nbsp; <a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="insert-stmt"></a><h4>insert-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:601px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 601.066 922.104">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,145L124,145A15 15 0 0 0 139 130A15 15 0 0 0 124 115L60,115A15 15 0 0 0 45 130A15 15 0 0 0 60 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<path d="M60,183L109,183A15 15 0 0 0 124 168A15 15 0 0 0 109 153L60,153A15 15 0 0 0 45 168A15 15 0 0 0 60 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="84" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INSERT</text>
+<polygon points="166,198 154,203 154,194" style="fill:rgb(0,0,0)"/>
+<path d="M124,168 L 132,168 Q 139,168 139,183 L 139,183 Q 139,198 149,198 L 160,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M181,213L187,213A15 15 0 0 0 203 198A15 15 0 0 0 187 183L181,183A15 15 0 0 0 166 198A15 15 0 0 0 181 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="244,349 233,354 233,345" style="fill:rgb(0,0,0)"/>
+<path d="M203,198 L 210,198 Q 218,198 218,213 L 218,334 Q 218,349 228,349 L 238,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,365L337,365A15 15 0 0 0 352 349A15 15 0 0 0 337 334L259,334A15 15 0 0 0 244 349A15 15 0 0 0 259 365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="298" y="349" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="369,349 358,354 358,345" style="fill:rgb(0,0,0)"/>
+<path d="M352,349L363,349" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,130 399,135 399,126" style="fill:rgb(0,0,0)"/>
+<path d="M369,349 L 377,349 Q 384,349 384,334 L 384,145 Q 384,130 395,130 L 405,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M426,145L453,145A15 15 0 0 0 468 130A15 15 0 0 0 453 115L426,115A15 15 0 0 0 411 130A15 15 0 0 0 426 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTO</text>
+<polygon points="45,168 33,172 33,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,153 Q 24,168 31,168 L 39,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,130 33,135 33,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 31,130 L 39,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M139,130L399,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,168 358,172 358,164" style="fill:rgb(0,0,0)"/>
+<path d="M124,168L363,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,168 L 377,168 Q 384,168 384,160 L 384,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,213L301,213A15 15 0 0 0 316 198A15 15 0 0 0 301 183L259,183A15 15 0 0 0 244 198A15 15 0 0 0 259 213Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="198" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="244,198 233,203 233,194" style="fill:rgb(0,0,0)"/>
+<path d="M203,198L238,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,198 358,203 358,194" style="fill:rgb(0,0,0)"/>
+<path d="M316,198L363,198" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,198 L 377,198 Q 384,198 384,191 L 384,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,251L281,251A15 15 0 0 0 296 236A15 15 0 0 0 281 221L259,221A15 15 0 0 0 244 236A15 15 0 0 0 259 251Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="270" y="236" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="244,236 233,240 233,232" style="fill:rgb(0,0,0)"/>
+<path d="M218,221 L 218,228 Q 218,236 228,236 L 238,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,236 358,240 358,232" style="fill:rgb(0,0,0)"/>
+<path d="M296,236L363,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,236 L 377,236 Q 384,236 384,229 L 384,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,289L311,289A15 15 0 0 0 327 274A15 15 0 0 0 311 259L259,259A15 15 0 0 0 244 274A15 15 0 0 0 259 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="285" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="244,274 233,278 233,270" style="fill:rgb(0,0,0)"/>
+<path d="M218,259 L 218,266 Q 218,274 228,274 L 238,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,274 358,278 358,270" style="fill:rgb(0,0,0)"/>
+<path d="M327,274L363,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,274 L 377,274 Q 384,274 384,266 L 384,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,327L323,327A15 15 0 0 0 338 312A15 15 0 0 0 323 297L259,297A15 15 0 0 0 244 312A15 15 0 0 0 259 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="291" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="244,312 233,316 233,307" style="fill:rgb(0,0,0)"/>
+<path d="M218,297 L 218,304 Q 218,312 228,312 L 238,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="369,312 358,316 358,307" style="fill:rgb(0,0,0)"/>
+<path d="M338,312L363,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M369,312 L 377,312 Q 384,312 384,304 L 384,297" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,455L156,455A15 15 0 0 0 171 440A15 15 0 0 0 156 425L60,425A15 15 0 0 0 45 440A15 15 0 0 0 60 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,440 183,444 183,436" style="fill:rgb(0,0,0)"/>
+<path d="M171,440L189,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,455A15 15 0 0 0 225 440A15 15 0 0 0 210 425A15 15 0 0 0 195 440A15 15 0 0 0 210 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="440" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,440 249,444 249,436" style="fill:rgb(0,0,0)"/>
+<path d="M225,440L255,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,455L351,455A15 15 0 0 0 366 440A15 15 0 0 0 351 425L276,425A15 15 0 0 0 261 440A15 15 0 0 0 276 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="402,440 391,444 391,436" style="fill:rgb(0,0,0)"/>
+<path d="M366,440L396,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,455L421,455A15 15 0 0 0 436 440A15 15 0 0 0 421 425L417,425A15 15 0 0 0 402 440A15 15 0 0 0 417 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="419" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="459,440 448,444 448,436" style="fill:rgb(0,0,0)"/>
+<path d="M436,440L454,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,455L495,455A15 15 0 0 0 510 440A15 15 0 0 0 495 425L475,425A15 15 0 0 0 459 440A15 15 0 0 0 475 455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="485" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="483,238 478,227 487,227" style="fill:rgb(0,0,0)"/>
+<path d="M468,130 L 475,130 Q 483,130 483,145 L 483,217 L 483,232" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,395 183,390 183,399" style="fill:rgb(0,0,0)"/>
+<path d="M483,238 L 483,380 Q 483,395 468,395 L 192,395 L 177,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,440 33,444 33,436" style="fill:rgb(0,0,0)"/>
+<path d="M171,395 L 35,395 Q 20,395 20,410 L 20,425 Q 20,440 30,440 L 39,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,423 230,412 239,412" style="fill:rgb(0,0,0)"/>
+<path d="M261,395 L 247,395 Q 234,395 234,406 L 234,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,423 L 234,432 Q 234,440 242,440 L 249,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,546A15 15 0 0 0 75 531A15 15 0 0 0 60 516A15 15 0 0 0 45 531A15 15 0 0 0 60 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="531" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,531 100,535 100,527" style="fill:rgb(0,0,0)"/>
+<path d="M75,531L105,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,546L220,546A15 15 0 0 0 235 531A15 15 0 0 0 220 516L126,516A15 15 0 0 0 111 531A15 15 0 0 0 126 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="271,531 260,535 260,527" style="fill:rgb(0,0,0)"/>
+<path d="M235,531L266,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,546A15 15 0 0 0 302 531A15 15 0 0 0 287 516A15 15 0 0 0 271 531A15 15 0 0 0 287 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="287" y="531" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<path d="M173,580A15 15 0 0 0 188 565A15 15 0 0 0 173 550A15 15 0 0 0 158 565A15 15 0 0 0 173 580Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="565" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="188,565 200,561 200,569" style="fill:rgb(0,0,0)"/>
+<path d="M235,531 L 243,531 Q 250,531 250,546 L 250,550 Q 250,565 235,565 L 209,565 L 194,565" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,565 L 100,565 Q 85,565 85,550 L 85,546 Q 85,531 92,531 L 100,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="173,595 185,591 185,599" style="fill:rgb(0,0,0)"/>
+<path d="M302,531 L 309,531 Q 317,531 317,546 L 317,580 Q 317,595 302,595 L 194,595 L 179,595" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M173,595 L 39,595 Q 24,595 24,603 L 24,610" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="436,486 448,481 448,490" style="fill:rgb(0,0,0)"/>
+<path d="M510,440 L 518,440 Q 525,440 525,455 L 525,471 Q 525,486 510,486 L 457,486 L 442,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,531 33,535 33,527" style="fill:rgb(0,0,0)"/>
+<path d="M436,486 L 39,486 Q 24,486 24,501 L 24,516 Q 24,531 31,531 L 39,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,469 377,457 385,457" style="fill:rgb(0,0,0)"/>
+<path d="M366,440 L 374,440 Q 381,440 381,451 L 381,463" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M381,469 L 381,477 Q 381,486 374,486 L 366,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,671L112,671A15 15 0 0 0 127 656A15 15 0 0 0 112 640L60,640A15 15 0 0 0 45 656A15 15 0 0 0 60 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="656" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="163,656 152,660 152,651" style="fill:rgb(0,0,0)"/>
+<path d="M127,656L158,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,671A15 15 0 0 0 194 656A15 15 0 0 0 179 640A15 15 0 0 0 163 656A15 15 0 0 0 179 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="656" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="230,656 218,660 218,651" style="fill:rgb(0,0,0)"/>
+<path d="M194,656L224,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M230,671L279,671L279,640L230,640Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="656" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="315,656 303,660 303,651" style="fill:rgb(0,0,0)"/>
+<path d="M279,656L309,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,671A15 15 0 0 0 345 656A15 15 0 0 0 330 640A15 15 0 0 0 315 656A15 15 0 0 0 330 671Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="330" y="656" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="45,656 33,660 33,651" style="fill:rgb(0,0,0)"/>
+<path d="M24,516 L 24,641 Q 24,656 31,656 L 39,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,705A15 15 0 0 0 269 690A15 15 0 0 0 254 675A15 15 0 0 0 239 690A15 15 0 0 0 254 705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="690" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="269,690 281,685 281,694" style="fill:rgb(0,0,0)"/>
+<path d="M279,656 L 286,656 Q 294,656 294,671 L 294,675 Q 294,690 285,690 L 275,690" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,690 L 218,690 Q 203,690 203,675 L 203,671 Q 203,656 211,656 L 218,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M254,743A15 15 0 0 0 269 727A15 15 0 0 0 254 712A15 15 0 0 0 239 727A15 15 0 0 0 254 743Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="727" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="269,727 281,723 281,732" style="fill:rgb(0,0,0)"/>
+<path d="M345,656 L 353,656 Q 360,656 360,671 L 360,712 Q 360,727 345,727 L 290,727 L 275,727" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M239,727 L 152,727 Q 137,727 137,712 L 137,671 Q 137,656 144,656 L 152,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="387,693 375,698 375,689" style="fill:rgb(0,0,0)"/>
+<path d="M345,656 L 353,656 Q 360,656 360,671 L 360,678 Q 360,693 371,693 L 381,693" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,709L512,709L512,678L387,678Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="449" y="693" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">upsert-clause</text>
+<polygon points="535,693 523,698 523,689" style="fill:rgb(0,0,0)"/>
+<path d="M512,693L529,693" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,693 L 542,693 Q 550,693 550,701 L 550,708" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="535,656 523,660 523,651" style="fill:rgb(0,0,0)"/>
+<path d="M345,656L529,656" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,788L149,788L149,758L45,758Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="97" y="773" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="535,773 523,777 523,768" style="fill:rgb(0,0,0)"/>
+<path d="M149,773L529,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,773 L 542,773 Q 550,773 550,780 L 550,788" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,773 33,777 33,768" style="fill:rgb(0,0,0)"/>
+<path d="M24,640 L 24,758 Q 24,773 31,773 L 39,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M387,818L512,818L512,788L387,788Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="449" y="803" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">upsert-clause</text>
+<polygon points="535,803 523,807 523,799" style="fill:rgb(0,0,0)"/>
+<path d="M512,803L529,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,803 L 542,803 Q 550,803 550,811 L 550,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="387,803 375,807 375,799" style="fill:rgb(0,0,0)"/>
+<path d="M345,773 L 353,773 Q 360,773 360,788 L 360,788 Q 360,803 371,803 L 381,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,856L125,856A15 15 0 0 0 140 841A15 15 0 0 0 125 826L60,826A15 15 0 0 0 45 841A15 15 0 0 0 60 856Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="841" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DEFAULT</text>
+<polygon points="164,841 152,845 152,837" style="fill:rgb(0,0,0)"/>
+<path d="M140,841L158,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,856L231,856A15 15 0 0 0 246 841A15 15 0 0 0 231 826L179,826A15 15 0 0 0 164 841A15 15 0 0 0 179 856Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="205" y="841" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="535,841 523,845 523,837" style="fill:rgb(0,0,0)"/>
+<path d="M246,841L529,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,841 33,845 33,837" style="fill:rgb(0,0,0)"/>
+<path d="M24,758 L 24,826 Q 24,841 31,841 L 39,841" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M361,919L512,919L512,889L361,889Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="436" y="904" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="591,904 580,909 580,900" style="fill:rgb(0,0,0)"/>
+<path d="M512,904L585,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="595" cy="904" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M535,656 L 542,656 Q 550,656 550,671 L 550,889 Q 550,904 557,904 L 565,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="436,871 448,867 448,875" style="fill:rgb(0,0,0)"/>
+<path d="M535,841 L 542,841 Q 550,841 550,856 L 550,856 Q 550,871 535,871 L 457,871 L 442,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="361,904 349,909 349,900" style="fill:rgb(0,0,0)"/>
+<path d="M436,871 L 349,871 Q 334,871 334,886 L 334,889 Q 334,904 345,904 L 355,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#create-trigger-stmt">create-trigger-stmt</a>&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#common-table-expression">common-table-expression</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#returning-clause">returning-clause</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#upsert-clause">upsert-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>
+</div>
+
+<a name="join-clause"></a><h4>join-clause:</h4><div class='imgcontainer'>
+<div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#select-core">select-core</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#table-or-subquery">table-or-subquery</a>&nbsp;&nbsp; <a href="#update-stmt">update-stmt</a>&nbsp;&nbsp; <a href="#update-stmt-limited">update-stmt-limited</a><br></br>
+References:&nbsp;&nbsp; <a href="#join-constraint">join-constraint</a>&nbsp;&nbsp; <a href="#join-operator">join-operator</a>&nbsp;&nbsp; <a href="#table-or-subquery">table-or-subquery</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="join-constraint"></a><h4>join-constraint:</h4><div class='imgcontainer'>
+<div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#join-clause">join-clause</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#fromclause">lang_select.html#fromclause</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="join-operator"></a><h4>join-operator:</h4><div class='imgcontainer'>
+<div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#join-clause">join-clause</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#fromclause">lang_select.html#fromclause</a>&nbsp;&nbsp; <a href="lang_select.html#nonstd">lang_select.html#nonstd</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="literal-value"></a><h4>literal-value:</h4><div class='imgcontainer'>
+<div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#column-constraint">column-constraint</a>&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="numeric-literal"></a><h4>numeric-literal:</h4><div class='imgcontainer'>
+<div style="max-width:765px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 765.562 214.056">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,36 51,41 51,32" style="fill:rgb(0,0,0)"/>
+<path d="M9,36L57,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,51L98,51A15 15 0 0 0 113 36A15 15 0 0 0 98 21L78,21A15 15 0 0 0 63 36A15 15 0 0 0 78 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="88" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="88,6 99,2 99,10" style="fill:rgb(0,0,0)"/>
+<path d="M113,36 L 121,36 Q 128,36 128,21 L 128,21 Q 128,6 113,6 L 109,6 L 94,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M88,6 L 51,6 Q 36,6 36,21 L 36,21 Q 36,36 44,36 L 51,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="176,66 164,71 164,62" style="fill:rgb(0,0,0)"/>
+<path d="M113,36 L 134,36 Q 149,36 149,51 L 149,51 Q 149,66 159,66 L 170,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,82A15 15 0 0 0 206 66L206,66A15 15 0 0 0 191 51A15 15 0 0 0 176 66L176,66A15 15 0 0 0 191 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="267,66 255,71 255,62" style="fill:rgb(0,0,0)"/>
+<path d="M206,66L261,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,66 328,71 328,62" style="fill:rgb(0,0,0)"/>
+<path d="M267,66L334,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="381,36 370,41 370,32" style="fill:rgb(0,0,0)"/>
+<path d="M340,66 L 347,66 Q 355,66 355,51 L 355,51 Q 355,36 365,36 L 375,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,74 411,78 411,70" style="fill:rgb(0,0,0)"/>
+<path d="M381,36 L 389,36 Q 396,36 396,51 L 396,59 Q 396,74 406,74 L 417,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,89A15 15 0 0 0 453 74L453,74A15 15 0 0 0 438 59A15 15 0 0 0 423 74L423,74A15 15 0 0 0 438 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">E</text>
+<polygon points="494,74 483,78 483,70" style="fill:rgb(0,0,0)"/>
+<path d="M453,74L489,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,112 411,116 411,108" style="fill:rgb(0,0,0)"/>
+<path d="M381,36 L 389,36 Q 396,36 396,51 L 396,97 Q 396,112 406,112 L 417,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,127A15 15 0 0 0 453 112A15 15 0 0 0 438 97A15 15 0 0 0 423 112A15 15 0 0 0 438 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="112" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">e</text>
+<path d="M453,112 L 460,112 Q 468,112 468,97 L 468,89 Q 468,74 475,74 L 483,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,112L277,112A15 15 0 0 0 292 97L292,97A15 15 0 0 0 277 82L257,82A15 15 0 0 0 242 97L242,97A15 15 0 0 0 257 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="97" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="292,97 304,92 304,101" style="fill:rgb(0,0,0)"/>
+<path d="M267,66 L 304,66 Q 319,66 319,81 L 319,82 Q 319,97 308,97 L 298,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M242,97 L 234,97 Q 227,97 227,82 L 227,81 Q 227,66 234,66 L 242,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M113,36L261,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,36L370,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,135 39,139 39,130" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,120 Q 24,135 34,135 L 45,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150A15 15 0 0 0 81 135A15 15 0 0 0 66 119A15 15 0 0 0 50 135A15 15 0 0 0 66 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="135" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="117,135 105,139 105,130" style="fill:rgb(0,0,0)"/>
+<path d="M81,135L111,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,150L152,150A15 15 0 0 0 167 135A15 15 0 0 0 152 119L132,119A15 15 0 0 0 117 135A15 15 0 0 0 132 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="142" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="340,135 328,139 328,130" style="fill:rgb(0,0,0)"/>
+<path d="M167,135L334,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,135 L 347,135 Q 355,135 355,120 L 355,66 L 355,51" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="142,104 153,100 153,109" style="fill:rgb(0,0,0)"/>
+<path d="M167,135 L 174,135 Q 182,135 182,120 L 182,119 Q 182,104 167,104 L 162,104 L 147,104" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,104 L 105,104 Q 90,104 90,119 L 90,120 Q 90,135 98,135 L 105,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="536,142 524,146 524,138" style="fill:rgb(0,0,0)"/>
+<path d="M494,74 L 502,74 Q 509,74 509,89 L 509,127 Q 509,142 520,142 L 530,142" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,157A15 15 0 0 0 566 142A15 15 0 0 0 551 127A15 15 0 0 0 536 142A15 15 0 0 0 551 157Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="551" y="142" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<polygon points="628,74 616,78 616,70" style="fill:rgb(0,0,0)"/>
+<path d="M566,142 L 574,142 Q 581,142 581,127 L 581,89 Q 581,74 596,74 L 607,74 L 622,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M643,89L663,89A15 15 0 0 0 678 74L678,74A15 15 0 0 0 663 59L643,59A15 15 0 0 0 628 74L628,74A15 15 0 0 0 643 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="653" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">digit</text>
+<polygon points="714,74 703,78 703,70" style="fill:rgb(0,0,0)"/>
+<path d="M678,74L708,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="756,36 744,41 744,32" style="fill:rgb(0,0,0)"/>
+<path d="M714,74 L 722,74 Q 729,74 729,59 L 729,51 Q 729,36 740,36 L 750,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="759" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="536,104 524,109 524,100" style="fill:rgb(0,0,0)"/>
+<path d="M494,74 L 502,74 Q 509,74 509,89 L 509,89 Q 509,104 520,104 L 530,104" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,119A15 15 0 0 0 566 104A15 15 0 0 0 551 89A15 15 0 0 0 536 104A15 15 0 0 0 551 119Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="551" y="104" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<path d="M566,104 L 574,104 Q 581,104 581,97 L 581,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="551,36 540,41 540,32" style="fill:rgb(0,0,0)"/>
+<path d="M381,36L545,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,36L744,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="551,74 540,78 540,70" style="fill:rgb(0,0,0)"/>
+<path d="M494,74L545,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M551,74L616,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="653,50 665,46 665,54" style="fill:rgb(0,0,0)"/>
+<path d="M678,74 L 686,74 Q 693,74 693,62 Q 693,50 678,50 L 674,50 L 659,50" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M653,50 L 616,50 Q 601,50 601,62 Q 601,74 609,74 L 616,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,180 39,184 39,176" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,165 Q 24,180 34,180 L 45,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,195L69,195A15 15 0 0 0 84 180A15 15 0 0 0 69 165L66,165A15 15 0 0 0 50 180A15 15 0 0 0 66 195Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="67" y="180" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">0x</text>
+<polygon points="120,180 108,184 108,176" style="fill:rgb(0,0,0)"/>
+<path d="M84,180L114,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,195L185,195A15 15 0 0 0 200 180A15 15 0 0 0 185 165L135,165A15 15 0 0 0 120 180A15 15 0 0 0 135 195Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="160" y="180" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">hexdigit</text>
+<polygon points="714,180 703,184 703,176" style="fill:rgb(0,0,0)"/>
+<path d="M200,180L708,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M714,180 L 722,180 Q 729,180 729,165 L 729,74 L 729,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="160,207 171,203 171,211" style="fill:rgb(0,0,0)"/>
+<path d="M200,180 L 207,180 Q 215,180 215,193 Q 215,207 200,207 L 180,207 L 165,207" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M160,207 L 108,207 Q 93,207 93,193 Q 93,180 101,180 L 108,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+See also:&nbsp;&nbsp; <a href="lang_expr.html#litvalue">lang_expr.html#litvalue</a>
+</div>
+
+<a name="ordering-term"></a><h4>ordering-term:</h4><div class='imgcontainer'>
+<div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#compound-select-stmt">compound-select-stmt</a>&nbsp;&nbsp; <a href="#delete-stmt-limited">delete-stmt-limited</a>&nbsp;&nbsp; <a href="#factored-select-stmt">factored-select-stmt</a>&nbsp;&nbsp; <a href="#over-clause">over-clause</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#simple-select-stmt">simple-select-stmt</a>&nbsp;&nbsp; <a href="#update-stmt-limited">update-stmt-limited</a>&nbsp;&nbsp; <a href="#window-defn">window-defn</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="over-clause"></a><h4>over-clause:</h4><div class='imgcontainer'>
+<div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#frame-spec">frame-spec</a>&nbsp;&nbsp; <a href="#ordering-term">ordering-term</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="pragma-stmt"></a><h4>pragma-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:824px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 824.352 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L104,32A15 15 0 0 0 119 17A15 15 0 0 0 104 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRAGMA</text>
+<polygon points="155,17 143,21 143,12" style="fill:rgb(0,0,0)"/>
+<path d="M119,17L149,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M170,32L266,32A15 15 0 0 0 282 17A15 15 0 0 0 266 2L170,2A15 15 0 0 0 155 17A15 15 0 0 0 170 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="305,17 293,21 293,12" style="fill:rgb(0,0,0)"/>
+<path d="M282,17L299,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,32A15 15 0 0 0 335 17A15 15 0 0 0 320 2A15 15 0 0 0 305 17A15 15 0 0 0 320 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="320" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="371,17 359,21 359,12" style="fill:rgb(0,0,0)"/>
+<path d="M335,17L365,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M386,32L483,32A15 15 0 0 0 498 17A15 15 0 0 0 483 2L386,2A15 15 0 0 0 371 17A15 15 0 0 0 386 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="435" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-name</text>
+<polygon points="540,82 528,86 528,77" style="fill:rgb(0,0,0)"/>
+<path d="M498,17 L 506,17 Q 513,17 513,32 L 513,67 Q 513,82 524,82 L 534,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M555,97A15 15 0 0 0 570 82A15 15 0 0 0 555 67A15 15 0 0 0 540 82A15 15 0 0 0 555 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="555" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="593,82 582,86 582,77" style="fill:rgb(0,0,0)"/>
+<path d="M570,82L587,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M593,97L720,97L720,67L593,67Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="656" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-value</text>
+<polygon points="743,82 731,86 731,77" style="fill:rgb(0,0,0)"/>
+<path d="M720,82L737,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M758,97A15 15 0 0 0 773 82A15 15 0 0 0 758 67A15 15 0 0 0 743 82A15 15 0 0 0 758 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="758" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="814,17 803,21 803,12" style="fill:rgb(0,0,0)"/>
+<path d="M773,82 L 780,82 Q 788,82 788,67 L 788,32 Q 788,17 798,17 L 809,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="818" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="540,44 528,48 528,40" style="fill:rgb(0,0,0)"/>
+<path d="M498,17 L 506,17 Q 513,17 513,30 Q 513,44 524,44 L 534,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M555,59A15 15 0 0 0 570 44L570,44A15 15 0 0 0 555 29A15 15 0 0 0 540 44L540,44A15 15 0 0 0 555 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="555" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="593,44 582,48 582,40" style="fill:rgb(0,0,0)"/>
+<path d="M570,44L587,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M593,59L720,59L720,29L593,29Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="656" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-value</text>
+<polygon points="773,44 761,48 761,40" style="fill:rgb(0,0,0)"/>
+<path d="M720,44L767,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M773,44 L 780,44 Q 788,44 788,36 L 788,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="656,17 645,21 645,12" style="fill:rgb(0,0,0)"/>
+<path d="M498,17L651,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M656,17L803,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="218,44 207,48 207,40" style="fill:rgb(0,0,0)"/>
+<path d="M119,17 L 126,17 Q 134,17 134,30 Q 134,44 149,44 L 198,44 L 213,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M218,44 L 335,44 Q 350,44 350,30 Q 350,17 357,17 L 365,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#pragma-value">pragma-value</a><br></br>
+See also:&nbsp;&nbsp; <a href="pragma.html#syntax">pragma.html#syntax</a>
+</div>
+
+<a name="pragma-value"></a><h4>pragma-value:</h4><div class='imgcontainer'>
+<div style="max-width:264px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 264.499 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,17 51,21 51,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L57,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,32L201,32L201,2L63,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="255,17 243,21 243,12" style="fill:rgb(0,0,0)"/>
+<path d="M201,17L249,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="258" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,70L105,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 105 39L78,39A15 15 0 0 0 63 55L63,55A15 15 0 0 0 78 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<path d="M78,108L171,108A15 15 0 0 0 186 92A15 15 0 0 0 171 77L78,77A15 15 0 0 0 63 92A15 15 0 0 0 78 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-literal</text>
+<polygon points="63,92 51,97 51,88" style="fill:rgb(0,0,0)"/>
+<path d="M21,17 L 29,17 Q 36,17 36,32 L 36,77 Q 36,92 47,92 L 57,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="201,92 189,97 189,88" style="fill:rgb(0,0,0)"/>
+<path d="M186,92L195,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,92 L 208,92 Q 216,92 216,77 L 216,32 Q 216,17 223,17 L 231,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="201,55 189,59 189,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L195,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,55 L 208,55 Q 216,55 216,47 L 216,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,55 51,59 51,50" style="fill:rgb(0,0,0)"/>
+<path d="M36,39 L 36,47 Q 36,55 47,55 L 57,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#pragma-stmt">pragma-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#signed-number">signed-number</a><br></br>
+See also:&nbsp;&nbsp; <a href="pragma.html#syntax">pragma.html#syntax</a>
+</div>
+
+<a name="qualified-table-name"></a><h4>qualified-table-name:</h4><div class='imgcontainer'>
+<div style="max-width:599px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 599.746 182.736">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L156,32A15 15 0 0 0 171 17A15 15 0 0 0 156 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,17 183,21 183,12" style="fill:rgb(0,0,0)"/>
+<path d="M171,17L189,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,32A15 15 0 0 0 225 17A15 15 0 0 0 210 2A15 15 0 0 0 195 17A15 15 0 0 0 210 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,17 249,21 249,12" style="fill:rgb(0,0,0)"/>
+<path d="M225,17L255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32L351,32A15 15 0 0 0 366 17A15 15 0 0 0 351 2L276,2A15 15 0 0 0 261 17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="408,44 396,48 396,40" style="fill:rgb(0,0,0)"/>
+<path d="M366,17 L 374,17 Q 381,17 381,30 Q 381,44 392,44 L 402,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,59L427,59A15 15 0 0 0 442 44L442,44A15 15 0 0 0 427 29L423,29A15 15 0 0 0 408 44L408,44A15 15 0 0 0 423 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="465,44 453,48 453,40" style="fill:rgb(0,0,0)"/>
+<path d="M442,44L459,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,59L501,59A15 15 0 0 0 516 44L516,44A15 15 0 0 0 501 29L480,29A15 15 0 0 0 465 44L465,44A15 15 0 0 0 480 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alias</text>
+<polygon points="539,44 527,48 527,40" style="fill:rgb(0,0,0)"/>
+<path d="M516,44L533,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,44 L 546,44 Q 554,44 554,51 L 554,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,17 442,21 442,12" style="fill:rgb(0,0,0)"/>
+<path d="M366,17L448,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,44 97,48 97,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 39,44 L 87,44 L 102,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M108,44 L 225,44 Q 240,44 240,30 Q 240,17 247,17 L 255,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,142L301,142A15 15 0 0 0 316 127A15 15 0 0 0 301 112L236,112A15 15 0 0 0 221 127A15 15 0 0 0 236 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="339,127 327,131 327,123" style="fill:rgb(0,0,0)"/>
+<path d="M316,127L333,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,142L358,142A15 15 0 0 0 373 127A15 15 0 0 0 358 112L354,112A15 15 0 0 0 339 127A15 15 0 0 0 354 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="396,127 385,131 385,123" style="fill:rgb(0,0,0)"/>
+<path d="M373,127L390,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M411,142L490,142A15 15 0 0 0 505 127A15 15 0 0 0 490 112L411,112A15 15 0 0 0 396 127A15 15 0 0 0 411 142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="451" y="127" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M236,180L256,180A15 15 0 0 0 271 165A15 15 0 0 0 256 150L236,150A15 15 0 0 0 221 165A15 15 0 0 0 236 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="294,165 283,169 283,161" style="fill:rgb(0,0,0)"/>
+<path d="M271,165L289,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,180L374,180A15 15 0 0 0 389 165A15 15 0 0 0 374 150L310,150A15 15 0 0 0 294 165A15 15 0 0 0 310 180Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="342" y="165" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="554,74 550,62 558,62" style="fill:rgb(0,0,0)"/>
+<path d="M453,17 L 539,17 Q 554,17 554,32 L 554,53 L 554,68" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 325,85 325,94" style="fill:rgb(0,0,0)"/>
+<path d="M554,74 L 554,82 Q 554,89 539,89 L 334,89 L 319,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,127 210,131 210,123" style="fill:rgb(0,0,0)"/>
+<path d="M313,89 L 210,89 Q 195,89 195,104 L 195,112 Q 195,127 205,127 L 215,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="221,165 210,169 210,161" style="fill:rgb(0,0,0)"/>
+<path d="M195,112 L 195,150 Q 195,165 205,165 L 215,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="554,114 550,102 558,102" style="fill:rgb(0,0,0)"/>
+<path d="M554,74L554,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="590,165 578,169 578,161" style="fill:rgb(0,0,0)"/>
+<path d="M554,114 L 554,150 Q 554,165 569,165 L 569,165 L 584,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="593" cy="165" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,127 527,131 527,123" style="fill:rgb(0,0,0)"/>
+<path d="M505,127L533,127" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,127 L 546,127 Q 554,127 554,135 L 554,142" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M389,165L578,165" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#delete-stmt">delete-stmt</a>&nbsp;&nbsp; <a href="#delete-stmt-limited">delete-stmt-limited</a>&nbsp;&nbsp; <a href="#update-stmt">update-stmt</a>&nbsp;&nbsp; <a href="#update-stmt-limited">update-stmt-limited</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_indexedby.html">lang_indexedby.html</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>
+</div>
+
+<a name="raise-function"></a><h4>raise-function:</h4><div class='imgcontainer'>
+<div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html#raise">lang_createtrigger.html#raise</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="recursive-cte"></a><h4>recursive-cte:</h4><div class='imgcontainer'>
+<div style="max-width:874px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 874.291 72.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L169,32L169,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="100" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">cte-table-name</text>
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M169,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L211,32A15 15 0 0 0 226 17A15 15 0 0 0 211 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="249,17 237,21 237,12" style="fill:rgb(0,0,0)"/>
+<path d="M226,17L243,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M264,32A15 15 0 0 0 279 17A15 15 0 0 0 264 2A15 15 0 0 0 249 17A15 15 0 0 0 264 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="302,17 291,21 291,12" style="fill:rgb(0,0,0)"/>
+<path d="M279,17L296,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,32L403,32A15 15 0 0 0 418 17A15 15 0 0 0 403 2L317,2A15 15 0 0 0 302 17A15 15 0 0 0 317 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">initial-select</text>
+<polygon points="459,55 448,59 448,50" style="fill:rgb(0,0,0)"/>
+<path d="M418,17 L 425,17 Q 433,17 433,32 L 433,40 Q 433,55 443,55 L 454,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M474,70L518,70A15 15 0 0 0 533 55L533,55A15 15 0 0 0 518 39L474,39A15 15 0 0 0 459 55L459,55A15 15 0 0 0 474 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="496" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<polygon points="556,55 545,59 545,50" style="fill:rgb(0,0,0)"/>
+<path d="M533,55L550,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M571,70L586,70A15 15 0 0 0 601 55L601,55A15 15 0 0 0 586 39L571,39A15 15 0 0 0 556 55L556,55A15 15 0 0 0 571 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="643,17 631,21 631,12" style="fill:rgb(0,0,0)"/>
+<path d="M601,55 L 609,55 Q 616,55 616,40 L 616,32 Q 616,17 627,17 L 637,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M658,32L773,32A15 15 0 0 0 788 17A15 15 0 0 0 773 2L658,2A15 15 0 0 0 643 17A15 15 0 0 0 658 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="715" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">recursive-select</text>
+<polygon points="811,17 800,21 800,12" style="fill:rgb(0,0,0)"/>
+<path d="M788,17L805,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M826,32A15 15 0 0 0 841 17A15 15 0 0 0 826 2A15 15 0 0 0 811 17A15 15 0 0 0 826 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="826" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="864,17 853,21 853,12" style="fill:rgb(0,0,0)"/>
+<path d="M841,17L859,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="868" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="459,17 448,21 448,12" style="fill:rgb(0,0,0)"/>
+<path d="M418,17L454,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M474,32L518,32A15 15 0 0 0 533 17A15 15 0 0 0 518 2L474,2A15 15 0 0 0 459 17A15 15 0 0 0 474 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="496" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M533,17L631,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+References:&nbsp;&nbsp; <a href="#cte-table-name">cte-table-name</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>
+</div>
+
+<a name="reindex-stmt"></a><h4>reindex-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:619px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 619.286 137.376">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L111,32A15 15 0 0 0 126 17A15 15 0 0 0 111 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="79" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REINDEX</text>
+<polygon points="167,82 156,86 156,77" style="fill:rgb(0,0,0)"/>
+<path d="M126,17 L 133,17 Q 141,17 141,32 L 141,67 Q 141,82 151,82 L 162,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,97L279,97A15 15 0 0 0 294 82A15 15 0 0 0 279 67L182,67A15 15 0 0 0 167 82A15 15 0 0 0 182 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="317,82 305,86 305,77" style="fill:rgb(0,0,0)"/>
+<path d="M294,82L311,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M332,97A15 15 0 0 0 347 82A15 15 0 0 0 332 67A15 15 0 0 0 317 82A15 15 0 0 0 332 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="383,82 372,86 372,77" style="fill:rgb(0,0,0)"/>
+<path d="M347,82L377,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="425,120 413,124 413,115" style="fill:rgb(0,0,0)"/>
+<path d="M383,82 L 391,82 Q 398,82 398,97 L 398,105 Q 398,120 409,120 L 419,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,135L518,135A15 15 0 0 0 533 120A15 15 0 0 0 518 104L440,104A15 15 0 0 0 425 120A15 15 0 0 0 440 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="479" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<polygon points="568,120 556,124 556,115" style="fill:rgb(0,0,0)"/>
+<path d="M533,120L562,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,17 598,21 598,12" style="fill:rgb(0,0,0)"/>
+<path d="M568,120 L 575,120 Q 583,120 583,105 L 583,32 Q 583,17 593,17 L 604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="613" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="425,82 413,86 413,77" style="fill:rgb(0,0,0)"/>
+<path d="M383,82L419,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M440,97L515,97A15 15 0 0 0 530 82A15 15 0 0 0 515 67L440,67A15 15 0 0 0 425 82A15 15 0 0 0 440 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="568,82 556,86 556,77" style="fill:rgb(0,0,0)"/>
+<path d="M530,82L562,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M568,82 L 575,82 Q 583,82 583,74 L 583,67" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="383,17 372,21 372,12" style="fill:rgb(0,0,0)"/>
+<path d="M126,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M383,17L598,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="167,44 156,48 156,40" style="fill:rgb(0,0,0)"/>
+<path d="M126,17 L 133,17 Q 141,17 141,30 Q 141,44 151,44 L 162,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,59L288,59A15 15 0 0 0 303 44L303,44A15 15 0 0 0 288 29L182,29A15 15 0 0 0 167 44L167,44A15 15 0 0 0 182 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="235" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="568,44 556,48 556,40" style="fill:rgb(0,0,0)"/>
+<path d="M303,44L562,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M568,44 L 575,44 Q 583,44 583,36 L 583,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,120 219,124 219,115" style="fill:rgb(0,0,0)"/>
+<path d="M141,67 L 141,105 Q 141,120 156,120 L 210,120 L 225,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M231,120 L 347,120 Q 362,120 362,105 L 362,97 Q 362,82 370,82 L 377,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_reindex.html">lang_reindex.html</a>
+</div>
+
+<a name="release-stmt"></a><h4>release-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:488px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 488.736 54">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L111,32A15 15 0 0 0 126 17A15 15 0 0 0 111 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="79" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RELEASE</text>
+<polygon points="162,17 150,21 150,12" style="fill:rgb(0,0,0)"/>
+<path d="M126,17L156,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,32L261,32A15 15 0 0 0 276 17A15 15 0 0 0 261 2L177,2A15 15 0 0 0 162 17A15 15 0 0 0 177 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SAVEPOINT</text>
+<polygon points="312,17 301,21 301,12" style="fill:rgb(0,0,0)"/>
+<path d="M276,17L306,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M327,32L441,32A15 15 0 0 0 456 17A15 15 0 0 0 441 2L327,2A15 15 0 0 0 312 17A15 15 0 0 0 327 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-name</text>
+<polygon points="479,17 467,21 467,12" style="fill:rgb(0,0,0)"/>
+<path d="M456,17L473,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="482" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="219,47 207,51 207,43" style="fill:rgb(0,0,0)"/>
+<path d="M126,17 L 133,17 Q 141,17 141,32 L 141,32 Q 141,47 156,47 L 198,47 L 213,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,47 L 276,47 Q 291,47 291,32 L 291,32 Q 291,17 299,17 L 306,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_savepoint.html">lang_savepoint.html</a>
+</div>
+
+<a name="result-column"></a><h4>result-column:</h4><div class='imgcontainer'>
+<div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#select-core">select-core</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="returning-clause"></a><h4>returning-clause:</h4><div class='imgcontainer'>
+<div style="max-width:628px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 628.709 140.4">
+<circle cx="5" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="27,47 15,51 15,43" style="fill:rgb(0,0,0)"/>
+<path d="M9,47L21,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M42,62L132,62A15 15 0 0 0 147 47A15 15 0 0 0 132 32L42,32A15 15 0 0 0 27 47A15 15 0 0 0 42 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RETURNING</text>
+<polygon points="237,47 226,51 226,43" style="fill:rgb(0,0,0)"/>
+<path d="M147,47L232,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M237,62L287,62L287,32L237,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="262" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="328,77 317,82 317,73" style="fill:rgb(0,0,0)"/>
+<path d="M287,47 L 294,47 Q 302,47 302,62 L 302,62 Q 302,77 312,77 L 322,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M343,92L347,92A15 15 0 0 0 362 77L362,77A15 15 0 0 0 347 62L343,62A15 15 0 0 0 328 77L328,77A15 15 0 0 0 343 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="398,77 387,82 387,73" style="fill:rgb(0,0,0)"/>
+<path d="M362,77L393,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M414,92L501,92A15 15 0 0 0 516 77L516,77A15 15 0 0 0 501 62L414,62A15 15 0 0 0 398 77L398,77A15 15 0 0 0 414 92Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="457" y="77" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="539,77 528,82 528,73" style="fill:rgb(0,0,0)"/>
+<path d="M516,77L534,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="581,47 569,51 569,43" style="fill:rgb(0,0,0)"/>
+<path d="M539,77 L 547,77 Q 554,77 554,62 L 554,62 Q 554,47 565,47 L 575,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,47 607,51 607,43" style="fill:rgb(0,0,0)"/>
+<path d="M581,47L613,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="622" cy="47" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="345,101 334,106 334,97" style="fill:rgb(0,0,0)"/>
+<path d="M302,62 L 302,86 Q 302,101 317,101 L 325,101 L 340,101" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,101 L 362,101 Q 377,101 377,89 Q 377,77 385,77 L 392,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="453,47 441,51 441,43" style="fill:rgb(0,0,0)"/>
+<path d="M287,47L447,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,47L607,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,138A15 15 0 0 0 406 123A15 15 0 0 0 391 108A15 15 0 0 0 376 123A15 15 0 0 0 391 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="376,123 365,127 365,118" style="fill:rgb(0,0,0)"/>
+<path d="M147,47 L 196,47 Q 211,47 211,62 L 211,108 Q 211,123 226,123 L 355,123 L 370,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="539,123 528,127 528,118" style="fill:rgb(0,0,0)"/>
+<path d="M406,123L534,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,123 L 547,123 Q 554,123 554,108 L 554,77 L 554,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M391,32A15 15 0 0 0 406 17A15 15 0 0 0 391 2A15 15 0 0 0 376 17A15 15 0 0 0 391 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="391" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="406,17 418,12 418,21" style="fill:rgb(0,0,0)"/>
+<path d="M581,47 L 588,47 Q 596,47 596,32 L 596,32 Q 596,17 581,17 L 427,17 L 412,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M376,17 L 174,17 Q 159,17 159,32 L 159,32 Q 159,47 169,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#delete-stmt">delete-stmt</a>&nbsp;&nbsp; <a href="#delete-stmt-limited">delete-stmt-limited</a>&nbsp;&nbsp; <a href="#insert-stmt">insert-stmt</a>&nbsp;&nbsp; <a href="#update-stmt">update-stmt</a>&nbsp;&nbsp; <a href="#update-stmt-limited">update-stmt-limited</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>
+</div>
+
+<a name="rollback-stmt"></a><h4>rollback-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:801px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 801.734 67.392">
+<circle cx="5" cy="33" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,33 20,38 20,29" style="fill:rgb(0,0,0)"/>
+<path d="M9,33L26,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,48L125,48A15 15 0 0 0 140 33A15 15 0 0 0 125 18L47,18A15 15 0 0 0 32 33A15 15 0 0 0 47 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="176,33 164,38 164,29" style="fill:rgb(0,0,0)"/>
+<path d="M140,33L170,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,48L303,48A15 15 0 0 0 318 33A15 15 0 0 0 303 18L191,18A15 15 0 0 0 176 33A15 15 0 0 0 191 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRANSACTION</text>
+<polygon points="390,33 378,38 378,29" style="fill:rgb(0,0,0)"/>
+<path d="M318,33L384,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M405,48L411,48A15 15 0 0 0 426 33A15 15 0 0 0 411 18L405,18A15 15 0 0 0 390 33A15 15 0 0 0 405 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="408" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TO</text>
+<polygon points="462,33 450,38 450,29" style="fill:rgb(0,0,0)"/>
+<path d="M426,33L456,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,48L561,48A15 15 0 0 0 576 33A15 15 0 0 0 561 18L477,18A15 15 0 0 0 462 33A15 15 0 0 0 477 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SAVEPOINT</text>
+<polygon points="612,33 601,38 601,29" style="fill:rgb(0,0,0)"/>
+<path d="M576,33L606,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M627,48L741,48A15 15 0 0 0 756 33A15 15 0 0 0 741 18L627,18A15 15 0 0 0 612 33A15 15 0 0 0 627 48Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="684" y="33" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-name</text>
+<polygon points="792,33 780,38 780,29" style="fill:rgb(0,0,0)"/>
+<path d="M756,33L786,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="795" cy="33" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,6 507,10 507,2" style="fill:rgb(0,0,0)"/>
+<path d="M426,33 L 433,33 Q 441,33 441,20 Q 441,6 456,6 L 498,6 L 513,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,6 L 576,6 Q 591,6 591,20 Q 591,33 599,33 L 606,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,60 507,65 507,56" style="fill:rgb(0,0,0)"/>
+<path d="M352,33 L 359,33 Q 367,33 367,47 Q 367,60 382,60 L 498,60 L 513,60" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,60 L 756,60 Q 771,60 771,47 Q 771,33 778,33 L 786,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="247,60 235,65 235,56" style="fill:rgb(0,0,0)"/>
+<path d="M140,33 L 147,33 Q 155,33 155,47 Q 155,60 170,60 L 226,60 L 241,60" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,60 L 318,60 Q 333,60 333,47 Q 333,33 340,33 L 348,33" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_savepoint.html">lang_savepoint.html</a>&nbsp;&nbsp; <a href="lang_transaction.html">lang_transaction.html</a>
+</div>
+
+<a name="savepoint-stmt"></a><h4>savepoint-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:346px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 346.003 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L131,32A15 15 0 0 0 146 17A15 15 0 0 0 131 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="89" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SAVEPOINT</text>
+<polygon points="169,17 158,21 158,12" style="fill:rgb(0,0,0)"/>
+<path d="M146,17L164,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M185,32L298,32A15 15 0 0 0 313 17A15 15 0 0 0 298 2L185,2A15 15 0 0 0 169 17A15 15 0 0 0 185 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="241" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-name</text>
+<polygon points="336,17 325,21 325,12" style="fill:rgb(0,0,0)"/>
+<path d="M313,17L330,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="340" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_savepoint.html">lang_savepoint.html</a>
+</div>
+
+<a name="select-core"></a><h4>select-core:</h4><div class='imgcontainer'>
+<div style="max-width:655px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 655.157 728.568">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,17 51,21 51,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L57,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,32L129,32A15 15 0 0 0 144 17A15 15 0 0 0 129 2L78,2A15 15 0 0 0 63 17A15 15 0 0 0 78 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="104" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="186,47 174,51 174,43" style="fill:rgb(0,0,0)"/>
+<path d="M144,17 L 152,17 Q 159,17 159,32 L 159,32 Q 159,47 170,47 L 180,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,62L269,62A15 15 0 0 0 284 47L284,47A15 15 0 0 0 269 32L201,32A15 15 0 0 0 186 47L186,47A15 15 0 0 0 201 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="235" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="353,17 342,21 342,12" style="fill:rgb(0,0,0)"/>
+<path d="M284,47 L 292,47 Q 299,47 299,32 L 299,32 Q 299,17 314,17 L 333,17 L 348,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M353,32L481,32L481,2L353,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M417,70A15 15 0 0 0 432 55L432,55A15 15 0 0 0 417 39A15 15 0 0 0 402 55L402,55A15 15 0 0 0 417 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="432,55 444,50 444,59" style="fill:rgb(0,0,0)"/>
+<path d="M481,17 L 488,17 Q 496,17 496,32 L 496,40 Q 496,55 481,55 L 453,55 L 438,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M402,55 L 342,55 Q 327,55 327,40 L 327,32 Q 327,17 334,17 L 342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="235,17 224,21 224,12" style="fill:rgb(0,0,0)"/>
+<path d="M144,17L229,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M235,17L342,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,100L216,100A15 15 0 0 0 231 85A15 15 0 0 0 216 70L201,70A15 15 0 0 0 186 85A15 15 0 0 0 201 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="208" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="284,85 273,89 273,81" style="fill:rgb(0,0,0)"/>
+<path d="M231,85L279,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,85 L 292,85 Q 299,85 299,70 L 299,47 L 299,32" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="186,85 174,89 174,81" style="fill:rgb(0,0,0)"/>
+<path d="M144,17 L 152,17 Q 159,17 159,32 L 159,70 Q 159,85 170,85 L 180,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,176L139,176A15 15 0 0 0 154 160A15 15 0 0 0 139 145L105,145A15 15 0 0 0 89 160A15 15 0 0 0 105 176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="122" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="226,160 215,165 215,156" style="fill:rgb(0,0,0)"/>
+<path d="M154,160L221,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M226,176L387,176L387,145L226,145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="160" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M256,250L358,250L358,219L256,219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="235" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M307,212A15 15 0 0 0 322 197A15 15 0 0 0 307 182A15 15 0 0 0 292 197A15 15 0 0 0 307 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="307" y="197" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="322,197 334,192 334,201" style="fill:rgb(0,0,0)"/>
+<path d="M387,160 L 395,160 Q 402,160 402,175 L 402,182 Q 402,197 387,197 L 343,197 L 328,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M292,197 L 215,197 Q 200,197 200,182 L 200,175 Q 200,160 207,160 L 215,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="256,235 244,239 244,230" style="fill:rgb(0,0,0)"/>
+<path d="M154,160 L 162,160 Q 169,160 169,175 L 169,220 Q 169,235 184,235 L 235,235 L 250,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="420,201 425,213 416,213" style="fill:rgb(0,0,0)"/>
+<path d="M358,235 L 373,235 Q 387,235 402,235 L 405,235 Q 420,235 420,221 L 420,207" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="441,160 430,165 430,156" style="fill:rgb(0,0,0)"/>
+<path d="M420,201 L 420,175 Q 420,160 428,160 L 436,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,160 L 432,160 Q 423,160 423,160 Q 423,160 431,160 L 438,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,85 492,73 500,73" style="fill:rgb(0,0,0)"/>
+<path d="M481,17 L 488,17 Q 496,17 496,32 L 496,64 L 496,79" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,123 296,118 296,127" style="fill:rgb(0,0,0)"/>
+<path d="M496,85 L 496,108 Q 496,123 481,123 L 305,123 L 290,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,160 78,165 78,156" style="fill:rgb(0,0,0)"/>
+<path d="M284,123 L 78,123 Q 63,123 63,138 L 63,145 Q 63,160 73,160 L 84,160" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,325L154,325A15 15 0 0 0 169 310A15 15 0 0 0 154 295L105,295A15 15 0 0 0 89 310A15 15 0 0 0 105 325Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="310" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="192,310 181,314 181,306" style="fill:rgb(0,0,0)"/>
+<path d="M169,310L186,310" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M192,325L241,325L241,295L192,295Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="217" y="310" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="453,212 449,200 458,200" style="fill:rgb(0,0,0)"/>
+<path d="M387,160 L 438,160 Q 453,160 453,175 L 453,191 L 453,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,272 318,268 318,277" style="fill:rgb(0,0,0)"/>
+<path d="M453,212 L 453,257 Q 453,272 438,272 L 328,272 L 313,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,310 78,314 78,306" style="fill:rgb(0,0,0)"/>
+<path d="M307,272 L 78,272 Q 63,272 63,287 L 63,295 Q 63,310 73,310 L 84,310" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,212 59,200 67,200" style="fill:rgb(0,0,0)"/>
+<path d="M63,145L63,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,212L63,295" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,424L148,424A15 15 0 0 0 163 408A15 15 0 0 0 148 393L105,393A15 15 0 0 0 89 408A15 15 0 0 0 105 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="126" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="186,408 175,413 175,404" style="fill:rgb(0,0,0)"/>
+<path d="M163,408L180,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M201,424L205,424A15 15 0 0 0 220 408A15 15 0 0 0 205 393L201,393A15 15 0 0 0 186 408A15 15 0 0 0 201 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="203" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="256,408 245,413 245,404" style="fill:rgb(0,0,0)"/>
+<path d="M220,408L251,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,424L306,424L306,393L256,393Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="388,408 377,413 377,404" style="fill:rgb(0,0,0)"/>
+<path d="M306,408L383,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,424L456,424A15 15 0 0 0 471 408A15 15 0 0 0 456 393L404,393A15 15 0 0 0 388 408A15 15 0 0 0 404 424Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="430" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="494,408 483,413 483,404" style="fill:rgb(0,0,0)"/>
+<path d="M471,408L488,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,424L543,424L543,393L494,393Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="408" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M281,461A15 15 0 0 0 296 446A15 15 0 0 0 281 431A15 15 0 0 0 266 446A15 15 0 0 0 281 461Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="446" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="296,446 308,442 308,451" style="fill:rgb(0,0,0)"/>
+<path d="M306,408 L 313,408 Q 321,408 321,423 L 321,431 Q 321,446 311,446 L 302,446" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,446 L 245,446 Q 230,446 230,431 L 230,423 Q 230,408 237,408 L 245,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="450,439 439,443 439,434" style="fill:rgb(0,0,0)"/>
+<path d="M347,408 L 354,408 Q 362,408 362,423 L 362,424 Q 362,439 377,439 L 430,439 L 445,439" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M450,439 L 543,439 Q 558,439 558,424 L 558,423 Q 558,408 566,408 L 573,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="203,378 192,382 192,374" style="fill:rgb(0,0,0)"/>
+<path d="M63,348 L 63,363 Q 63,378 78,378 L 183,378 L 198,378" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="347,408 336,413 336,404" style="fill:rgb(0,0,0)"/>
+<path d="M203,378 L 306,378 Q 321,378 321,393 L 321,393 Q 321,408 331,408 L 341,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="169,348 181,344 181,352" style="fill:rgb(0,0,0)"/>
+<path d="M241,310 L 249,310 Q 256,310 256,325 L 256,333 Q 256,348 241,348 L 190,348 L 175,348" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,408 78,413 78,404" style="fill:rgb(0,0,0)"/>
+<path d="M169,348 L 78,348 Q 63,348 63,363 L 63,393 Q 63,408 73,408 L 84,408" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,335 59,323 67,323" style="fill:rgb(0,0,0)"/>
+<path d="M63,295L63,329" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M63,335L63,393" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,537L168,537A15 15 0 0 0 183 522A15 15 0 0 0 168 507L105,507A15 15 0 0 0 89 522A15 15 0 0 0 105 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="219,522 208,526 208,517" style="fill:rgb(0,0,0)"/>
+<path d="M183,522L213,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,537L331,537A15 15 0 0 0 346 522A15 15 0 0 0 331 507L234,507A15 15 0 0 0 219 522A15 15 0 0 0 234 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="369,522 358,526 358,517" style="fill:rgb(0,0,0)"/>
+<path d="M346,522L364,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,537L388,537A15 15 0 0 0 404 522A15 15 0 0 0 388 507L384,507A15 15 0 0 0 369 522A15 15 0 0 0 384 537Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="386" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="427,522 415,526 415,517" style="fill:rgb(0,0,0)"/>
+<path d="M404,522L421,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M427,537L545,537L545,507L427,507Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="522" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M382,575A15 15 0 0 0 397 560A15 15 0 0 0 382 544A15 15 0 0 0 367 560A15 15 0 0 0 382 575Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="560" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="397,560 409,555 409,564" style="fill:rgb(0,0,0)"/>
+<path d="M545,522 L 553,522 Q 560,522 560,537 L 560,545 Q 560,560 545,560 L 418,560 L 403,560" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,560 L 208,560 Q 193,560 193,545 L 193,537 Q 193,522 200,522 L 208,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="588,446 584,435 593,435" style="fill:rgb(0,0,0)"/>
+<path d="M543,408 L 573,408 Q 588,408 588,423 L 588,425 L 588,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,484 318,480 318,488" style="fill:rgb(0,0,0)"/>
+<path d="M588,446 L 588,469 Q 588,484 573,484 L 328,484 L 313,484" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="89,522 78,526 78,517" style="fill:rgb(0,0,0)"/>
+<path d="M307,484 L 78,484 Q 63,484 63,499 L 63,507 Q 63,522 73,522 L 84,522" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,446 59,435 67,435" style="fill:rgb(0,0,0)"/>
+<path d="M63,393L63,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,597 295,602 295,593" style="fill:rgb(0,0,0)"/>
+<path d="M63,446 L 63,582 Q 63,597 78,597 L 286,597 L 301,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="645,597 634,602 634,593" style="fill:rgb(0,0,0)"/>
+<path d="M307,597L640,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="649" cy="597" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,586 556,574 564,574" style="fill:rgb(0,0,0)"/>
+<path d="M560,544L560,580" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M560,586 L 560,592 Q 560,597 568,597 L 575,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M78,688L130,688A15 15 0 0 0 145 673A15 15 0 0 0 130 658L78,658A15 15 0 0 0 63 673A15 15 0 0 0 78 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="104" y="673" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="181,673 170,677 170,669" style="fill:rgb(0,0,0)"/>
+<path d="M145,673L176,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,688A15 15 0 0 0 212 673A15 15 0 0 0 197 658A15 15 0 0 0 181 673A15 15 0 0 0 197 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="197" y="673" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="248,673 236,677 236,669" style="fill:rgb(0,0,0)"/>
+<path d="M212,673L242,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,688L297,688L297,658L248,658Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="673" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="333,673 321,677 321,669" style="fill:rgb(0,0,0)"/>
+<path d="M297,673L327,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,688A15 15 0 0 0 363 673A15 15 0 0 0 348 658A15 15 0 0 0 333 673A15 15 0 0 0 348 688Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="673" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="573,673 562,677 562,669" style="fill:rgb(0,0,0)"/>
+<path d="M363,673L568,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="588,612 593,624 584,624" style="fill:rgb(0,0,0)"/>
+<path d="M573,673 L 581,673 Q 588,673 588,658 L 588,633 L 588,618" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M588,612 L 588,605 Q 588,597 603,597 L 609,597 L 624,597" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,650A15 15 0 0 0 287 635A15 15 0 0 0 272 620A15 15 0 0 0 257 635A15 15 0 0 0 272 650Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="635" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M272,726A15 15 0 0 0 287 711A15 15 0 0 0 272 696A15 15 0 0 0 257 711A15 15 0 0 0 272 726Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="711" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="287,635 299,631 299,640" style="fill:rgb(0,0,0)"/>
+<path d="M297,673 L 304,673 Q 312,673 312,658 L 312,650 Q 312,635 303,635 L 293,635" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,635 L 236,635 Q 221,635 221,650 L 221,658 Q 221,673 229,673 L 236,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="287,711 299,706 299,715" style="fill:rgb(0,0,0)"/>
+<path d="M363,673 L 371,673 Q 378,673 378,688 L 378,696 Q 378,711 363,711 L 308,711 L 293,711" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,711 L 170,711 Q 155,711 155,696 L 155,688 Q 155,673 162,673 L 170,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="63,673 51,677 51,669" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,658 Q 24,673 39,673 L 42,673 L 57,673" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#compound-select-stmt">compound-select-stmt</a>&nbsp;&nbsp; <a href="#factored-select-stmt">factored-select-stmt</a>&nbsp;&nbsp; <a href="#simple-select-stmt">simple-select-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#join-clause">join-clause</a>&nbsp;&nbsp; <a href="#result-column">result-column</a>&nbsp;&nbsp; <a href="#table-or-subquery">table-or-subquery</a>&nbsp;&nbsp; <a href="#window-defn">window-defn</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+</div>
+
+<a name="select-stmt"></a><h4>select-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#common-table-expression">common-table-expression</a>&nbsp;&nbsp; <a href="#create-table-stmt">create-table-stmt</a>&nbsp;&nbsp; <a href="#create-trigger-stmt">create-trigger-stmt</a>&nbsp;&nbsp; <a href="#create-view-stmt">create-view-stmt</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#insert-stmt">insert-stmt</a>&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a>&nbsp;&nbsp; <a href="#table-or-subquery">table-or-subquery</a>&nbsp;&nbsp; <a href="#with-clause">with-clause</a><br></br>
+References:&nbsp;&nbsp; <a href="#common-table-expression">common-table-expression</a>&nbsp;&nbsp; <a href="#compound-operator">compound-operator</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#join-clause">join-clause</a>&nbsp;&nbsp; <a href="#ordering-term">ordering-term</a>&nbsp;&nbsp; <a href="#result-column">result-column</a>&nbsp;&nbsp; <a href="#table-or-subquery">table-or-subquery</a>&nbsp;&nbsp; <a href="#window-defn">window-defn</a><br></br>
+See also:&nbsp;&nbsp; <a href="changes.html#version_3_35_3">changes.html#version_3_35_3</a>&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="lang_with.html#recursivecte">lang_with.html#recursivecte</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>&nbsp;&nbsp; <a href="releaselog/3_35_3.html">releaselog/3_35_3.html</a>&nbsp;&nbsp; <a href="releaselog/3_35_4.html">releaselog/3_35_4.html</a>&nbsp;&nbsp; <a href="releaselog/3_35_5.html">releaselog/3_35_5.html</a>
+</div>
+
+<a name="signed-number"></a><h4>signed-number:</h4><div class='imgcontainer'>
+<div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#column-constraint">column-constraint</a>&nbsp;&nbsp; <a href="#pragma-value">pragma-value</a>&nbsp;&nbsp; <a href="#type-name">type-name</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>&nbsp;&nbsp; <a href="pragma.html#syntax">pragma.html#syntax</a>
+</div>
+
+<a name="simple-function-invocation"></a><h4>simple-function-invocation:</h4><div class='imgcontainer'>
+<div style="max-width:414px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 414.49 126.792">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,55 20,59 20,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L26,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,70L126,70A15 15 0 0 0 141 55A15 15 0 0 0 126 39L47,39A15 15 0 0 0 32 55A15 15 0 0 0 47 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="86" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">simple-func</text>
+<polygon points="164,55 152,59 152,50" style="fill:rgb(0,0,0)"/>
+<path d="M141,55L158,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,70A15 15 0 0 0 194 55A15 15 0 0 0 179 39A15 15 0 0 0 164 55A15 15 0 0 0 179 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="248,55 237,59 237,50" style="fill:rgb(0,0,0)"/>
+<path d="M194,55L242,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,70L297,70L297,39L248,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="273" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="351,55 340,59 340,50" style="fill:rgb(0,0,0)"/>
+<path d="M297,55L346,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,70A15 15 0 0 0 382 55A15 15 0 0 0 366 39A15 15 0 0 0 351 55A15 15 0 0 0 366 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="366" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="405,55 393,59 393,50" style="fill:rgb(0,0,0)"/>
+<path d="M382,55L399,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="408" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,32A15 15 0 0 0 288 17L288,17A15 15 0 0 0 273 2A15 15 0 0 0 258 17L258,17A15 15 0 0 0 273 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="273" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="288,17 299,12 299,21" style="fill:rgb(0,0,0)"/>
+<path d="M297,55 L 305,55 Q 312,55 312,40 L 312,32 Q 312,17 303,17 L 294,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,17 L 237,17 Q 222,17 222,32 L 222,40 Q 222,55 229,55 L 237,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="273,82 261,86 261,77" style="fill:rgb(0,0,0)"/>
+<path d="M194,55 L 202,55 Q 209,55 209,68 Q 209,82 224,82 L 252,82 L 267,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,82 L 310,82 Q 325,82 325,68 Q 325,55 332,55 L 340,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M273,124A15 15 0 0 0 288 109A15 15 0 0 0 273 94A15 15 0 0 0 258 109A15 15 0 0 0 273 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="273" y="109" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="258,109 246,113 246,105" style="fill:rgb(0,0,0)"/>
+<path d="M194,55 L 202,55 Q 209,55 209,70 L 209,94 Q 209,109 224,109 L 237,109 L 252,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,109 L 310,109 Q 325,109 325,94 L 325,85 L 325,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+</div>
+
+<a name="simple-select-stmt"></a><h4>simple-select-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:629px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 629.266 348.84">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,153L148,153L148,123L45,123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="97" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-core</text>
+<path d="M205,153L250,153A15 15 0 0 0 265 138A15 15 0 0 0 250 123L205,123A15 15 0 0 0 190 138A15 15 0 0 0 205 153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="227" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="288,138 276,142 276,133" style="fill:rgb(0,0,0)"/>
+<path d="M265,138L282,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M303,153L307,153A15 15 0 0 0 322 138A15 15 0 0 0 307 123L303,123A15 15 0 0 0 288 138A15 15 0 0 0 303 153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="305" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M205,259L239,259A15 15 0 0 0 254 244A15 15 0 0 0 239 228L205,228A15 15 0 0 0 190 244A15 15 0 0 0 205 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="222" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="277,244 265,248 265,239" style="fill:rgb(0,0,0)"/>
+<path d="M254,244L271,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M277,259L326,259L326,228L277,228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="301" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="45,138 33,142 33,133" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,123 Q 24,138 31,138 L 39,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="312,92 323,88 323,97" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 604,17 Q 619,17 619,32 L 619,77 Q 619,92 604,92 L 333,92 L 318,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M312,92 L 39,92 Q 24,92 24,100 L 24,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="367,138 356,142 356,133" style="fill:rgb(0,0,0)"/>
+<path d="M322,138L361,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,153L497,153L497,123L367,123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="138" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M432,191A15 15 0 0 0 447 176A15 15 0 0 0 432 160A15 15 0 0 0 417 176A15 15 0 0 0 432 191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="176" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="447,176 459,171 459,180" style="fill:rgb(0,0,0)"/>
+<path d="M497,138 L 504,138 Q 512,138 512,153 L 512,161 Q 512,176 497,176 L 468,176 L 453,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,176 L 359,176 Q 344,176 344,161 L 344,153 Q 344,138 350,138 L 356,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="533,168 529,156 537,156" style="fill:rgb(0,0,0)"/>
+<path d="M497,138 L 518,138 Q 533,138 533,150 L 533,162" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="343,210 355,205 355,214" style="fill:rgb(0,0,0)"/>
+<path d="M533,168 L 533,195 Q 533,210 518,210 L 364,210 L 349,210" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,244 178,248 178,239" style="fill:rgb(0,0,0)"/>
+<path d="M343,210 L 178,210 Q 163,210 163,225 L 163,229 Q 163,244 174,244 L 184,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,138 178,142 178,133" style="fill:rgb(0,0,0)"/>
+<path d="M148,138L184,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="163,191 159,179 168,179" style="fill:rgb(0,0,0)"/>
+<path d="M148,138 L 156,138 Q 163,138 163,153 L 163,170 L 163,185" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M163,191L163,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M400,289L451,289A15 15 0 0 0 466 274A15 15 0 0 0 451 259L400,259A15 15 0 0 0 385 274A15 15 0 0 0 400 289Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="490,274 478,278 478,270" style="fill:rgb(0,0,0)"/>
+<path d="M466,274L484,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,289L539,289L539,259L490,259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="514" y="274" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="562,274 550,278 550,270" style="fill:rgb(0,0,0)"/>
+<path d="M539,274L556,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M400,327A15 15 0 0 0 415 312A15 15 0 0 0 400 297A15 15 0 0 0 385 312A15 15 0 0 0 400 327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="400" y="312" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="438,312 427,316 427,307" style="fill:rgb(0,0,0)"/>
+<path d="M415,312L432,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,327L487,327L487,297L438,297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="312" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="349,244 337,248 337,239" style="fill:rgb(0,0,0)"/>
+<path d="M326,244L343,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="385,312 373,316 373,307" style="fill:rgb(0,0,0)"/>
+<path d="M349,244 L 356,244 Q 364,244 364,259 L 364,297 Q 364,312 372,312 L 379,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="385,274 373,278 373,270" style="fill:rgb(0,0,0)"/>
+<path d="M349,244 L 356,244 Q 364,244 364,259 L 364,259 Q 364,274 372,274 L 379,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="562,244 550,248 550,239" style="fill:rgb(0,0,0)"/>
+<path d="M349,244L556,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="619,342 608,346 608,338" style="fill:rgb(0,0,0)"/>
+<path d="M562,244 L 583,244 Q 598,244 598,259 L 598,327 Q 598,342 606,342 L 614,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="623" cy="342" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M562,274 L 583,274 Q 598,274 598,281 L 598,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="562,312 550,316 550,307" style="fill:rgb(0,0,0)"/>
+<path d="M487,312L556,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M562,312 L 583,312 Q 598,312 598,319 L 598,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="562,342 550,346 550,338" style="fill:rgb(0,0,0)"/>
+<path d="M163,228 L 163,327 Q 163,342 178,342 L 541,342 L 556,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M562,342L608,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+References:&nbsp;&nbsp; <a href="#common-table-expression">common-table-expression</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#ordering-term">ordering-term</a>&nbsp;&nbsp; <a href="#select-core">select-core</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>
+</div>
+
+<a name="sql-stmt"></a><h4>sql-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:716px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 716.88 1017.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L125,70A15 15 0 0 0 140 55L140,55A15 15 0 0 0 125 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXPLAIN</text>
+<polygon points="176,55 165,59 165,50" style="fill:rgb(0,0,0)"/>
+<path d="M140,55L170,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M191,70L235,70A15 15 0 0 0 250 55L250,55A15 15 0 0 0 235 39L191,39A15 15 0 0 0 176 55L176,55A15 15 0 0 0 191 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="213" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">QUERY</text>
+<polygon points="267,55 255,59 255,50" style="fill:rgb(0,0,0)"/>
+<path d="M250,55L261,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M282,70L311,70A15 15 0 0 0 327 55L327,55A15 15 0 0 0 311 39L282,39A15 15 0 0 0 267 55L267,55A15 15 0 0 0 282 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PLAN</text>
+<polygon points="368,17 357,21 357,12" style="fill:rgb(0,0,0)"/>
+<path d="M327,55 L 334,55 Q 342,55 342,40 L 342,32 Q 342,17 352,17 L 362,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="182,17 170,21 170,12" style="fill:rgb(0,0,0)"/>
+<path d="M140,55 L 148,55 Q 155,55 155,40 L 155,32 Q 155,17 166,17 L 176,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,17L357,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M9,17L170,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="410,17 398,21 398,12" style="fill:rgb(0,0,0)"/>
+<path d="M368,17L404,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,32L552,32L552,2L410,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">alter-table-stmt</text>
+<polygon points="666,17 654,21 654,12" style="fill:rgb(0,0,0)"/>
+<path d="M552,17L660,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="707,17 696,21 696,12" style="fill:rgb(0,0,0)"/>
+<path d="M666,17L701,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="711" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,70L528,70L528,39L410,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">analyze-stmt</text>
+<polygon points="410,55 398,59 398,50" style="fill:rgb(0,0,0)"/>
+<path d="M383,39 L 383,47 Q 383,55 393,55 L 404,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,55 654,59 654,50" style="fill:rgb(0,0,0)"/>
+<path d="M528,55L660,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,55 L 673,55 Q 681,55 681,47 L 681,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,108L517,108L517,77L410,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">attach-stmt</text>
+<polygon points="410,92 398,97 398,88" style="fill:rgb(0,0,0)"/>
+<path d="M383,77 L 383,85 Q 383,92 393,92 L 404,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,92 654,97 654,88" style="fill:rgb(0,0,0)"/>
+<path d="M517,92L660,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,92 L 673,92 Q 681,92 681,85 L 681,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,145L511,145L511,115L410,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="460" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">begin-stmt</text>
+<polygon points="410,130 398,135 398,126" style="fill:rgb(0,0,0)"/>
+<path d="M383,115 L 383,123 Q 383,130 393,130 L 404,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,130 654,135 654,126" style="fill:rgb(0,0,0)"/>
+<path d="M511,130L660,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,130 L 673,130 Q 681,130 681,123 L 681,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,183L527,183L527,153L410,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">commit-stmt</text>
+<polygon points="410,168 398,172 398,164" style="fill:rgb(0,0,0)"/>
+<path d="M383,153 L 383,160 Q 383,168 393,168 L 404,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,168 654,172 654,164" style="fill:rgb(0,0,0)"/>
+<path d="M527,168L660,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,168 L 673,168 Q 681,168 681,160 L 681,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,221L569,221L569,191L410,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-index-stmt</text>
+<polygon points="410,206 398,210 398,201" style="fill:rgb(0,0,0)"/>
+<path d="M383,191 L 383,198 Q 383,206 393,206 L 404,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,206 654,210 654,201" style="fill:rgb(0,0,0)"/>
+<path d="M569,206L660,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,206 L 673,206 Q 681,206 681,198 L 681,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,259L566,259L566,228L410,228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="488" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-table-stmt</text>
+<polygon points="410,244 398,248 398,239" style="fill:rgb(0,0,0)"/>
+<path d="M383,228 L 383,236 Q 383,244 393,244 L 404,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,244 654,248 654,239" style="fill:rgb(0,0,0)"/>
+<path d="M566,244L660,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,244 L 673,244 Q 681,244 681,236 L 681,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,297L582,297L582,266L410,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="496" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-trigger-stmt</text>
+<polygon points="410,281 398,286 398,277" style="fill:rgb(0,0,0)"/>
+<path d="M383,266 L 383,274 Q 383,281 393,281 L 404,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,281 654,286 654,277" style="fill:rgb(0,0,0)"/>
+<path d="M582,281L660,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,281 L 673,281 Q 681,281 681,274 L 681,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,334L561,334L561,304L410,304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="486" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-view-stmt</text>
+<polygon points="410,319 398,324 398,315" style="fill:rgb(0,0,0)"/>
+<path d="M383,304 L 383,312 Q 383,319 393,319 L 404,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,319 654,324 654,315" style="fill:rgb(0,0,0)"/>
+<path d="M561,319L660,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,319 L 673,319 Q 681,319 681,312 L 681,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,372L626,372L626,342L410,342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">create-virtual-table-stmt</text>
+<polygon points="410,357 398,361 398,353" style="fill:rgb(0,0,0)"/>
+<path d="M383,342 L 383,349 Q 383,357 393,357 L 404,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,357 654,361 654,353" style="fill:rgb(0,0,0)"/>
+<path d="M626,357L660,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,357 L 673,357 Q 681,357 681,349 L 681,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,410L516,410L516,380L410,380Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="463" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt</text>
+<polygon points="410,395 398,399 398,390" style="fill:rgb(0,0,0)"/>
+<path d="M383,380 L 383,387 Q 383,395 393,395 L 404,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,395 654,399 654,390" style="fill:rgb(0,0,0)"/>
+<path d="M516,395L660,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,395 L 673,395 Q 681,395 681,387 L 681,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,448L581,448L581,417L410,417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">delete-stmt-limited</text>
+<polygon points="410,433 398,437 398,428" style="fill:rgb(0,0,0)"/>
+<path d="M383,417 L 383,425 Q 383,433 393,433 L 404,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,433 654,437 654,428" style="fill:rgb(0,0,0)"/>
+<path d="M581,433L660,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,433 L 673,433 Q 681,433 681,425 L 681,418" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,486L521,486L521,455L410,455Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="465" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">detach-stmt</text>
+<polygon points="410,470 398,475 398,466" style="fill:rgb(0,0,0)"/>
+<path d="M383,455 L 383,463 Q 383,470 393,470 L 404,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,470 654,475 654,466" style="fill:rgb(0,0,0)"/>
+<path d="M521,470L660,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,470 L 673,470 Q 681,470 681,463 L 681,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,523L555,523L555,493L410,493Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="508" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-index-stmt</text>
+<polygon points="410,508 398,513 398,504" style="fill:rgb(0,0,0)"/>
+<path d="M383,493 L 383,501 Q 383,508 393,508 L 404,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,508 654,513 654,504" style="fill:rgb(0,0,0)"/>
+<path d="M555,508L660,508" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,508 L 673,508 Q 681,508 681,501 L 681,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,561L551,561L551,531L410,531Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="480" y="546" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-table-stmt</text>
+<polygon points="410,546 398,550 398,542" style="fill:rgb(0,0,0)"/>
+<path d="M383,531 L 383,538 Q 383,546 393,546 L 404,546" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,546 654,550 654,542" style="fill:rgb(0,0,0)"/>
+<path d="M551,546L660,546" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,546 L 673,546 Q 681,546 681,538 L 681,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,599L568,599L568,569L410,569Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="489" y="584" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-trigger-stmt</text>
+<polygon points="410,584 398,588 398,579" style="fill:rgb(0,0,0)"/>
+<path d="M383,569 L 383,576 Q 383,584 393,584 L 404,584" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,584 654,588 654,579" style="fill:rgb(0,0,0)"/>
+<path d="M568,584L660,584" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,584 L 673,584 Q 681,584 681,576 L 681,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,637L547,637L547,606L410,606Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="622" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">drop-view-stmt</text>
+<polygon points="410,622 398,626 398,617" style="fill:rgb(0,0,0)"/>
+<path d="M383,606 L 383,614 Q 383,622 393,622 L 404,622" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,622 654,626 654,617" style="fill:rgb(0,0,0)"/>
+<path d="M547,622L660,622" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,622 L 673,622 Q 681,622 681,614 L 681,607" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,675L513,675L513,644L410,644Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="659" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">insert-stmt</text>
+<polygon points="410,659 398,664 398,655" style="fill:rgb(0,0,0)"/>
+<path d="M383,644 L 383,652 Q 383,659 393,659 L 404,659" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,659 654,664 654,655" style="fill:rgb(0,0,0)"/>
+<path d="M513,659L660,659" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,659 L 673,659 Q 681,659 681,652 L 681,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,712L529,712L529,682L410,682Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="697" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">pragma-stmt</text>
+<polygon points="410,697 398,702 398,693" style="fill:rgb(0,0,0)"/>
+<path d="M383,682 L 383,690 Q 383,697 393,697 L 404,697" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,697 654,702 654,693" style="fill:rgb(0,0,0)"/>
+<path d="M529,697L660,697" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,697 L 673,697 Q 681,697 681,690 L 681,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,750L528,750L528,720L410,720Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="735" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">reindex-stmt</text>
+<polygon points="410,735 398,739 398,731" style="fill:rgb(0,0,0)"/>
+<path d="M383,720 L 383,727 Q 383,735 393,735 L 404,735" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,735 654,739 654,731" style="fill:rgb(0,0,0)"/>
+<path d="M528,735L660,735" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,735 L 673,735 Q 681,735 681,727 L 681,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,788L526,788L526,758L410,758Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="468" y="773" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">release-stmt</text>
+<polygon points="410,773 398,777 398,768" style="fill:rgb(0,0,0)"/>
+<path d="M383,758 L 383,765 Q 383,773 393,773 L 404,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,773 654,777 654,768" style="fill:rgb(0,0,0)"/>
+<path d="M526,773L660,773" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,773 L 673,773 Q 681,773 681,765 L 681,758" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,826L533,826L533,795L410,795Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="811" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">rollback-stmt</text>
+<polygon points="410,811 398,815 398,806" style="fill:rgb(0,0,0)"/>
+<path d="M383,795 L 383,803 Q 383,811 393,811 L 404,811" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,811 654,815 654,806" style="fill:rgb(0,0,0)"/>
+<path d="M533,811L660,811" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,811 L 673,811 Q 681,811 681,803 L 681,796" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,864L545,864L545,833L410,833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="848" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">savepoint-stmt</text>
+<polygon points="410,848 398,853 398,844" style="fill:rgb(0,0,0)"/>
+<path d="M383,833 L 383,841 Q 383,848 393,848 L 404,848" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,848 654,853 654,844" style="fill:rgb(0,0,0)"/>
+<path d="M545,848L660,848" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,848 L 673,848 Q 681,848 681,841 L 681,833" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,901L514,901L514,871L410,871Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="462" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="410,886 398,891 398,882" style="fill:rgb(0,0,0)"/>
+<path d="M383,871 L 383,879 Q 383,886 393,886 L 404,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,886 654,891 654,882" style="fill:rgb(0,0,0)"/>
+<path d="M514,886L660,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,886 L 673,886 Q 681,886 681,879 L 681,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,939L522,939L522,909L410,909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="466" y="924" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt</text>
+<polygon points="410,924 398,928 398,920" style="fill:rgb(0,0,0)"/>
+<path d="M383,909 L 383,916 Q 383,924 393,924 L 404,924" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,924 654,928 654,920" style="fill:rgb(0,0,0)"/>
+<path d="M522,924L660,924" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,924 L 673,924 Q 681,924 681,916 L 681,909" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,977L587,977L587,947L410,947Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="498" y="962" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">update-stmt-limited</text>
+<polygon points="410,962 398,966 398,957" style="fill:rgb(0,0,0)"/>
+<path d="M383,947 L 383,954 Q 383,962 393,962 L 404,962" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,962 654,966 654,957" style="fill:rgb(0,0,0)"/>
+<path d="M587,962L660,962" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,962 L 673,962 Q 681,962 681,954 L 681,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,1015L529,1015L529,984L410,984Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="469" y="1000" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">vacuum-stmt</text>
+<polygon points="410,1000 398,1004 398,995" style="fill:rgb(0,0,0)"/>
+<path d="M368,17 L 376,17 Q 383,17 383,32 L 383,985 Q 383,1000 393,1000 L 404,1000" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="666,1000 654,1004 654,995" style="fill:rgb(0,0,0)"/>
+<path d="M529,1000L660,1000" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M666,1000 L 673,1000 Q 681,1000 681,985 L 681,32 Q 681,17 688,17 L 696,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt-list">sql-stmt-list</a><br></br>
+References:&nbsp;&nbsp; <a href="#alter-table-stmt">alter-table-stmt</a>&nbsp;&nbsp; <a href="#analyze-stmt">analyze-stmt</a>&nbsp;&nbsp; <a href="#attach-stmt">attach-stmt</a>&nbsp;&nbsp; <a href="#begin-stmt">begin-stmt</a>&nbsp;&nbsp; <a href="#commit-stmt">commit-stmt</a>&nbsp;&nbsp; <a href="#create-index-stmt">create-index-stmt</a>&nbsp;&nbsp; <a href="#create-table-stmt">create-table-stmt</a>&nbsp;&nbsp; <a href="#create-trigger-stmt">create-trigger-stmt</a>&nbsp;&nbsp; <a href="#create-view-stmt">create-view-stmt</a>&nbsp;&nbsp; <a href="#create-virtual-table-stmt">create-virtual-table-stmt</a>&nbsp;&nbsp; <a href="#delete-stmt">delete-stmt</a>&nbsp;&nbsp; <a href="#delete-stmt-limited">delete-stmt-limited</a>&nbsp;&nbsp; <a href="#detach-stmt">detach-stmt</a>&nbsp;&nbsp; <a href="#drop-index-stmt">drop-index-stmt</a>&nbsp;&nbsp; <a href="#drop-table-stmt">drop-table-stmt</a>&nbsp;&nbsp; <a href="#drop-trigger-stmt">drop-trigger-stmt</a>&nbsp;&nbsp; <a href="#drop-view-stmt">drop-view-stmt</a>&nbsp;&nbsp; <a href="#insert-stmt">insert-stmt</a>&nbsp;&nbsp; <a href="#pragma-stmt">pragma-stmt</a>&nbsp;&nbsp; <a href="#reindex-stmt">reindex-stmt</a>&nbsp;&nbsp; <a href="#release-stmt">release-stmt</a>&nbsp;&nbsp; <a href="#rollback-stmt">rollback-stmt</a>&nbsp;&nbsp; <a href="#savepoint-stmt">savepoint-stmt</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#update-stmt">update-stmt</a>&nbsp;&nbsp; <a href="#update-stmt-limited">update-stmt-limited</a>&nbsp;&nbsp; <a href="#vacuum-stmt">vacuum-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang.html">lang.html</a>&nbsp;&nbsp; <a href="lang_explain.html">lang_explain.html</a>
+</div>
+
+<a name="sql-stmt-list"></a><h4>sql-stmt-list:</h4><div class='imgcontainer'>
+<div style="max-width:242px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 242.093 88.776">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M9,55L45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="81,55 69,59 69,50" style="fill:rgb(0,0,0)"/>
+<path d="M45,55L75,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M81,70L160,70L160,39L81,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="121" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">sql-stmt</text>
+<path d="M160,55L196,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="232,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M196,55L226,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="236" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="121,82 109,86 109,77" style="fill:rgb(0,0,0)"/>
+<path d="M45,55 L 52,55 Q 60,55 60,68 Q 60,82 75,82 L 100,82 L 115,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,82 L 155,82 Q 170,82 170,68 Q 170,55 177,55 L 185,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,32A15 15 0 0 0 136 17L136,17A15 15 0 0 0 121 2A15 15 0 0 0 105 17L105,17A15 15 0 0 0 121 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="121" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">;</text>
+<polygon points="136,17 147,12 147,21" style="fill:rgb(0,0,0)"/>
+<path d="M196,55 L 204,55 Q 211,55 211,40 L 211,32 Q 211,17 196,17 L 156,17 L 141,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M105,17 L 33,17 Q 18,17 18,32 L 18,40 Q 18,55 26,55 L 33,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+References:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang.html">lang.html</a>
+</div>
+
+<a name="table-constraint"></a><h4>table-constraint:</h4><div class='imgcontainer'>
+<div style="max-width:751px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 751.325 261.36">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L160,32A15 15 0 0 0 175 17A15 15 0 0 0 160 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="110" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONSTRAINT</text>
+<polygon points="198,17 187,21 187,12" style="fill:rgb(0,0,0)"/>
+<path d="M175,17L192,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M213,32L240,32A15 15 0 0 0 256 17A15 15 0 0 0 240 2L213,2A15 15 0 0 0 198 17A15 15 0 0 0 213 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="227" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<path d="M60,108L123,108A15 15 0 0 0 138 92A15 15 0 0 0 123 77L60,77A15 15 0 0 0 45 92A15 15 0 0 0 60 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="91" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRIMARY</text>
+<polygon points="161,92 149,97 149,88" style="fill:rgb(0,0,0)"/>
+<path d="M138,92L155,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M176,108L192,108A15 15 0 0 0 208 92A15 15 0 0 0 192 77L176,77A15 15 0 0 0 161 92A15 15 0 0 0 176 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="184" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">KEY</text>
+<polygon points="244,92 232,97 232,88" style="fill:rgb(0,0,0)"/>
+<path d="M208,92L238,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,108A15 15 0 0 0 274 92A15 15 0 0 0 259 77A15 15 0 0 0 244 92A15 15 0 0 0 259 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="310,92 298,97 298,88" style="fill:rgb(0,0,0)"/>
+<path d="M274,92L304,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,108L454,108L454,77L310,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="490,92 479,97 479,88" style="fill:rgb(0,0,0)"/>
+<path d="M454,92L485,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,108A15 15 0 0 0 521 92A15 15 0 0 0 505 77A15 15 0 0 0 490 92A15 15 0 0 0 505 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="505" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="544,92 532,97 532,88" style="fill:rgb(0,0,0)"/>
+<path d="M521,92L538,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M544,108L677,108L677,77L544,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="610" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">conflict-clause</text>
+<polygon points="700,92 688,97 688,88" style="fill:rgb(0,0,0)"/>
+<path d="M677,92L694,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="741,92 730,97 730,88" style="fill:rgb(0,0,0)"/>
+<path d="M700,92L736,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="745" cy="92" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,92 33,97 33,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 31,92 L 39,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="110,55 122,50 122,59" style="fill:rgb(0,0,0)"/>
+<path d="M256,17 L 263,17 Q 271,17 271,32 L 271,40 Q 271,55 256,55 L 131,55 L 116,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M110,55 L 39,55 Q 24,55 24,62 L 24,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,145A15 15 0 0 0 397 130A15 15 0 0 0 382 115A15 15 0 0 0 367 130A15 15 0 0 0 382 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="130" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="397,130 409,126 409,135" style="fill:rgb(0,0,0)"/>
+<path d="M454,92 L 462,92 Q 469,92 469,107 L 469,115 Q 469,130 454,130 L 418,130 L 403,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M367,130 L 298,130 Q 283,130 283,115 L 283,107 Q 283,92 291,92 L 298,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,145L115,145A15 15 0 0 0 130 130A15 15 0 0 0 115 115L60,115A15 15 0 0 0 45 130A15 15 0 0 0 60 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNIQUE</text>
+<path d="M130,130 L 208,130 Q 223,130 223,115 L 223,107 Q 223,92 230,92 L 238,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,130 33,135 33,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,115 Q 24,130 31,130 L 39,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,183L105,183A15 15 0 0 0 121 168A15 15 0 0 0 105 153L60,153A15 15 0 0 0 45 168A15 15 0 0 0 60 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CHECK</text>
+<polygon points="144,168 132,172 132,164" style="fill:rgb(0,0,0)"/>
+<path d="M121,168L138,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M159,183A15 15 0 0 0 174 168A15 15 0 0 0 159 153A15 15 0 0 0 144 168A15 15 0 0 0 159 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="168" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="197,168 185,172 185,164" style="fill:rgb(0,0,0)"/>
+<path d="M174,168L191,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,183L246,183L246,153L197,153Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="221" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="269,168 258,172 258,164" style="fill:rgb(0,0,0)"/>
+<path d="M246,168L263,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,183L284,183A15 15 0 0 0 299 168A15 15 0 0 0 284 153L284,153A15 15 0 0 0 269 168A15 15 0 0 0 284 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="284" y="168" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="700,168 688,172 688,164" style="fill:rgb(0,0,0)"/>
+<path d="M299,168L694,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M700,168 L 707,168 Q 715,168 715,153 L 715,107 Q 715,92 722,92 L 730,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,168 33,172 33,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,153 Q 24,168 31,168 L 39,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,221L123,221A15 15 0 0 0 139 206A15 15 0 0 0 123 191L60,191A15 15 0 0 0 45 206A15 15 0 0 0 60 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOREIGN</text>
+<polygon points="162,206 150,210 150,201" style="fill:rgb(0,0,0)"/>
+<path d="M139,206L156,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M177,221L193,221A15 15 0 0 0 208 206A15 15 0 0 0 193 191L177,191A15 15 0 0 0 162 206A15 15 0 0 0 177 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">KEY</text>
+<polygon points="231,206 220,210 220,201" style="fill:rgb(0,0,0)"/>
+<path d="M208,206L225,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,221A15 15 0 0 0 261 206A15 15 0 0 0 246 191A15 15 0 0 0 231 206A15 15 0 0 0 246 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="206" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="297,206 286,210 286,201" style="fill:rgb(0,0,0)"/>
+<path d="M261,206L292,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,221L407,221A15 15 0 0 0 422 206A15 15 0 0 0 407 191L313,191A15 15 0 0 0 297 206A15 15 0 0 0 313 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="458,206 446,210 446,201" style="fill:rgb(0,0,0)"/>
+<path d="M422,206L452,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M473,221A15 15 0 0 0 488 206A15 15 0 0 0 473 191A15 15 0 0 0 458 206A15 15 0 0 0 473 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="206" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,206 500,210 500,201" style="fill:rgb(0,0,0)"/>
+<path d="M488,206L505,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M511,221L677,221L677,191L511,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="594" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">foreign-key-clause</text>
+<polygon points="700,206 688,210 688,201" style="fill:rgb(0,0,0)"/>
+<path d="M677,206L694,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M700,206 L 707,206 Q 715,206 715,191 L 715,168 L 715,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,206 33,210 33,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,191 Q 24,206 31,206 L 39,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,259A15 15 0 0 0 375 244A15 15 0 0 0 360 228A15 15 0 0 0 345 244A15 15 0 0 0 360 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="244" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="375,244 386,239 386,248" style="fill:rgb(0,0,0)"/>
+<path d="M422,206 L 429,206 Q 437,206 437,221 L 437,229 Q 437,244 422,244 L 396,244 L 381,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,244 L 286,244 Q 271,244 271,229 L 271,221 Q 271,206 278,206 L 286,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#create-table-stmt">create-table-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#conflict-clause">conflict-clause</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#foreign-key-clause">foreign-key-clause</a>&nbsp;&nbsp; <a href="#indexed-column">indexed-column</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtable.html#primkeyconst">lang_createtable.html#primkeyconst</a>&nbsp;&nbsp; <a href="lang_createtable.html#tablecoldef">lang_createtable.html#tablecoldef</a>&nbsp;&nbsp; <a href="lang_createtable.html#uniqueconst">lang_createtable.html#uniqueconst</a>
+</div>
+
+<a name="table-options"></a><h4>table-options:</h4><div class='imgcontainer'>
+<div style="max-width:324px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 324.036 98.31">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="77,17 66,21 66,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 40,36 Q 55,36 55,26 Q 55,17 63,17 L 72,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,32L161,32A15 15 0 0 0 177 17A15 15 0 0 0 161 2L93,2A15 15 0 0 0 77 17A15 15 0 0 0 93 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="127" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITHOUT</text>
+<polygon points="194,17 182,21 182,12" style="fill:rgb(0,0,0)"/>
+<path d="M177,17L188,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,32L253,32A15 15 0 0 0 268 17A15 15 0 0 0 253 2L209,2A15 15 0 0 0 194 17A15 15 0 0 0 209 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWID</text>
+<path d="M268,17 L 274,17 Q 280,17 280,26 Q 280,36 295,36 L 299,36 L 314,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="318" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="77,54 66,59 66,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 40,36 Q 55,36 55,45 Q 55,54 63,54 L 72,54" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,69L139,69A15 15 0 0 0 154 54A15 15 0 0 0 139 39L93,39A15 15 0 0 0 77 54A15 15 0 0 0 93 69Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="54" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">STRICT</text>
+<polygon points="314,36 303,40 303,31" style="fill:rgb(0,0,0)"/>
+<path d="M154,54 L 253,54 Q 268,54 274,54 Q 280,54 280,45 Q 280,36 294,36 L 308,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="194,81 205,76 205,85" style="fill:rgb(0,0,0)"/>
+<path d="M285,36 L 293,36 Q 300,36 300,51 L 300,66 Q 300,81 285,81 L 215,81 L 200,81" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,96A15 15 0 0 0 194 81A15 15 0 0 0 179 65A15 15 0 0 0 164 81A15 15 0 0 0 179 96Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="179" y="81" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="77,81 89,76 89,85" style="fill:rgb(0,0,0)"/>
+<path d="M164,81L83,81" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M77,81 L 31,81 Q 16,81 16,66 L 16,51 Q 16,36 28,36 L 39,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#create-table-stmt">create-table-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>
+</div>
+
+<a name="table-or-subquery"></a><h4>table-or-subquery:</h4><div class='imgcontainer'>
+<div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#join-clause">join-clause</a>&nbsp;&nbsp; <a href="#select-core">select-core</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#update-stmt">update-stmt</a>&nbsp;&nbsp; <a href="#update-stmt-limited">update-stmt-limited</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#join-clause">join-clause</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="type-name"></a><h4>type-name:</h4><div class='imgcontainer'>
+<div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#column-def">column-def</a>&nbsp;&nbsp; <a href="#expr">expr</a><br></br>
+References:&nbsp;&nbsp; <a href="#signed-number">signed-number</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="update-stmt"></a><h4>update-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:623px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 623.266 721.926">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,136L114,136A15 15 0 0 0 129 121A15 15 0 0 0 114 106L60,106A15 15 0 0 0 45 121A15 15 0 0 0 60 136Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="45,121 33,125 33,116" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,106 Q 24,121 31,121 L 39,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,299 159,303 159,295" style="fill:rgb(0,0,0)"/>
+<path d="M129,121 L 137,121 Q 144,121 144,136 L 144,284 Q 144,299 155,299 L 165,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,314L193,314A15 15 0 0 0 208 299A15 15 0 0 0 193 284L186,284A15 15 0 0 0 171 299A15 15 0 0 0 186 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,299 214,303 214,295" style="fill:rgb(0,0,0)"/>
+<path d="M208,299L219,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,314L318,314A15 15 0 0 0 333 299A15 15 0 0 0 318 284L240,284A15 15 0 0 0 225 299A15 15 0 0 0 240 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="279" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="350,299 339,303 339,295" style="fill:rgb(0,0,0)"/>
+<path d="M333,299L344,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,121 380,125 380,116" style="fill:rgb(0,0,0)"/>
+<path d="M350,299 L 358,299 Q 365,299 365,284 L 365,136 Q 365,121 376,121 L 386,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,136L576,136L576,106L392,106Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<path d="M186,276L193,276A15 15 0 0 0 208 261A15 15 0 0 0 193 246L186,246A15 15 0 0 0 171 261A15 15 0 0 0 186 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,261 214,266 214,257" style="fill:rgb(0,0,0)"/>
+<path d="M208,261L219,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,276L304,276A15 15 0 0 0 319 261A15 15 0 0 0 304 246L240,246A15 15 0 0 0 225 261A15 15 0 0 0 240 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="350,261 339,266 339,257" style="fill:rgb(0,0,0)"/>
+<path d="M319,261L344,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,261 L 358,261 Q 365,261 365,254 L 365,246" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,261 159,266 159,257" style="fill:rgb(0,0,0)"/>
+<path d="M144,246 L 144,254 Q 144,261 155,261 L 165,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,239L193,239A15 15 0 0 0 208 224A15 15 0 0 0 193 208L186,208A15 15 0 0 0 171 224A15 15 0 0 0 186 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,224 214,228 214,219" style="fill:rgb(0,0,0)"/>
+<path d="M208,224L219,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,239L292,239A15 15 0 0 0 307 224A15 15 0 0 0 292 208L240,208A15 15 0 0 0 225 224A15 15 0 0 0 240 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="266" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="350,224 339,228 339,219" style="fill:rgb(0,0,0)"/>
+<path d="M307,224L344,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,224 L 358,224 Q 365,224 365,216 L 365,209" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,224 159,228 159,219" style="fill:rgb(0,0,0)"/>
+<path d="M144,208 L 144,216 Q 144,224 155,224 L 165,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,201L193,201A15 15 0 0 0 208 186A15 15 0 0 0 193 171L186,171A15 15 0 0 0 171 186A15 15 0 0 0 186 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,186 214,190 214,181" style="fill:rgb(0,0,0)"/>
+<path d="M208,186L219,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,201L262,201A15 15 0 0 0 277 186A15 15 0 0 0 262 171L240,171A15 15 0 0 0 225 186A15 15 0 0 0 240 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="350,186 339,190 339,181" style="fill:rgb(0,0,0)"/>
+<path d="M277,186L344,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,186 L 358,186 Q 365,186 365,178 L 365,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,186 159,190 159,181" style="fill:rgb(0,0,0)"/>
+<path d="M144,171 L 144,178 Q 144,186 155,186 L 165,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,163L193,163A15 15 0 0 0 208 148A15 15 0 0 0 193 133L186,133A15 15 0 0 0 171 148A15 15 0 0 0 186 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,148 214,152 214,144" style="fill:rgb(0,0,0)"/>
+<path d="M208,148L219,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,163L282,163A15 15 0 0 0 297 148A15 15 0 0 0 282 133L240,133A15 15 0 0 0 225 148A15 15 0 0 0 240 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="350,148 339,152 339,144" style="fill:rgb(0,0,0)"/>
+<path d="M297,148L344,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,148 L 358,148 Q 365,148 365,140 L 365,133" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,148 159,152 159,144" style="fill:rgb(0,0,0)"/>
+<path d="M144,133 L 144,140 Q 144,148 155,148 L 165,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="350,121 339,125 339,116" style="fill:rgb(0,0,0)"/>
+<path d="M129,121L344,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,121L380,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,375 39,379 39,370" style="fill:rgb(0,0,0)"/>
+<path d="M576,121 L 584,121 Q 591,121 591,136 L 591,322 Q 591,337 576,337 L 39,337 Q 24,337 24,352 L 24,360 Q 24,375 34,375 L 45,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,390L81,390A15 15 0 0 0 96 375A15 15 0 0 0 81 360L65,360A15 15 0 0 0 50 375A15 15 0 0 0 65 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="73" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="153,413 141,417 141,408" style="fill:rgb(0,0,0)"/>
+<path d="M96,375 L 111,375 Q 126,375 126,390 L 126,398 Q 126,413 136,413 L 147,413" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,428L309,428L309,397L153,397Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="413" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="350,375 339,379 339,370" style="fill:rgb(0,0,0)"/>
+<path d="M309,413 L 316,413 Q 324,413 324,398 L 324,390 Q 324,375 334,375 L 344,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,390A15 15 0 0 0 380 375A15 15 0 0 0 365 360A15 15 0 0 0 350 375A15 15 0 0 0 365 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="375" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="404,375 392,379 392,370" style="fill:rgb(0,0,0)"/>
+<path d="M380,375L398,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,390L453,390L453,360L404,360Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="428" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="153,375 141,379 141,370" style="fill:rgb(0,0,0)"/>
+<path d="M96,375L147,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,390L262,390A15 15 0 0 0 277 375A15 15 0 0 0 262 360L168,360A15 15 0 0 0 153 375A15 15 0 0 0 168 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M277,375L339,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,465A15 15 0 0 0 266 450A15 15 0 0 0 251 435A15 15 0 0 0 236 450A15 15 0 0 0 251 465Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="450" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="266,450 277,446 277,455" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,435 Q 468,450 453,450 L 287,450 L 272,450" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,450 L 117,450 Q 102,450 102,435 L 102,390 Q 102,375 117,375 L 117,375 L 132,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="251,488 262,484 262,492" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,473 Q 468,488 453,488 L 271,488 L 256,488" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,488 L 39,488 Q 24,488 24,503 L 24,511 Q 24,526 37,526 L 50,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,541L100,541A15 15 0 0 0 115 526A15 15 0 0 0 100 511L65,511A15 15 0 0 0 50 526A15 15 0 0 0 65 541Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="187,526 176,530 176,522" style="fill:rgb(0,0,0)"/>
+<path d="M115,526L182,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,541L348,541L348,511L187,511Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M268,579A15 15 0 0 0 283 564A15 15 0 0 0 268 549A15 15 0 0 0 253 564A15 15 0 0 0 268 579Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="564" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="283,564 295,559 295,568" style="fill:rgb(0,0,0)"/>
+<path d="M348,526 L 356,526 Q 363,526 363,541 L 363,549 Q 363,564 348,564 L 304,564 L 289,564" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,564 L 176,564 Q 161,564 161,549 L 161,541 Q 161,526 168,526 L 176,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,602 176,606 176,597" style="fill:rgb(0,0,0)"/>
+<path d="M115,526 L 123,526 Q 130,526 130,541 L 130,587 Q 130,602 145,602 L 167,602 L 182,602" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,617L290,617L290,586L187,586Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="239" y="602" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<polygon points="405,526 393,530 393,522" style="fill:rgb(0,0,0)"/>
+<path d="M290,602 L 363,602 Q 378,602 378,587 L 378,541 Q 378,526 389,526 L 399,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="244,639 255,635 255,644" style="fill:rgb(0,0,0)"/>
+<path d="M405,526 L 412,526 Q 420,526 420,541 L 420,624 Q 420,639 405,639 L 265,639 L 250,639" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,526L393,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,677 39,681 39,673" style="fill:rgb(0,0,0)"/>
+<path d="M244,639 L 39,639 Q 24,639 24,654 L 24,662 Q 24,677 34,677 L 45,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,692L115,692A15 15 0 0 0 130 677A15 15 0 0 0 115 662L66,662A15 15 0 0 0 50 677A15 15 0 0 0 66 692Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="153,677 142,681 142,673" style="fill:rgb(0,0,0)"/>
+<path d="M130,677L147,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,692L202,692L202,662L153,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="178" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="24,586 20,575 28,575" style="fill:rgb(0,0,0)"/>
+<path d="M24,511L24,581" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,586L24,662" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,715 602,719 602,711" style="fill:rgb(0,0,0)"/>
+<path d="M24,662 L 24,700 Q 24,715 39,715 L 593,715 L 608,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="715" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="253,715 242,719 242,711" style="fill:rgb(0,0,0)"/>
+<path d="M202,677 L 210,677 Q 217,677 217,692 L 217,700 Q 217,715 232,715 L 233,715 L 248,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,677 283,681 283,673" style="fill:rgb(0,0,0)"/>
+<path d="M253,715 L 261,715 Q 268,715 268,700 L 268,692 Q 268,677 279,677 L 289,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,692L446,692L446,662L295,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="370" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="497,715 485,719 485,711" style="fill:rgb(0,0,0)"/>
+<path d="M446,677 L 453,677 Q 461,677 461,692 L 461,700 Q 461,715 476,715 L 476,715 L 491,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#create-trigger-stmt">create-trigger-stmt</a>&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#column-name-list">column-name-list</a>&nbsp;&nbsp; <a href="#common-table-expression">common-table-expression</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#join-clause">join-clause</a>&nbsp;&nbsp; <a href="#qualified-table-name">qualified-table-name</a>&nbsp;&nbsp; <a href="#returning-clause">returning-clause</a>&nbsp;&nbsp; <a href="#table-or-subquery">table-or-subquery</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>
+</div>
+
+<a name="update-stmt-limited"></a><h4>update-stmt-limited:</h4><div class='imgcontainer'>
+<div style="max-width:623px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 623.266 971.406">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L91,32A15 15 0 0 0 106 17A15 15 0 0 0 91 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="75" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M166,62L252,62A15 15 0 0 0 267 47L267,47A15 15 0 0 0 252 32L166,32A15 15 0 0 0 151 47L151,47A15 15 0 0 0 166 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="209,17 197,21 197,12" style="fill:rgb(0,0,0)"/>
+<path d="M106,17L203,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M209,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M357,32L583,32L583,2L357,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="151,47 139,51 139,43" style="fill:rgb(0,0,0)"/>
+<path d="M106,17 L 113,17 Q 121,17 121,32 L 121,32 Q 121,47 133,47 L 145,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,47 278,51 278,43" style="fill:rgb(0,0,0)"/>
+<path d="M267,47L284,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,47 L 297,47 Q 305,47 305,32 L 305,32 Q 305,17 320,17 L 330,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,70A15 15 0 0 0 485 55L485,55A15 15 0 0 0 470 39A15 15 0 0 0 455 55L455,55A15 15 0 0 0 470 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="485,55 497,50 497,59" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,40 Q 598,55 583,55 L 506,55 L 491,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,55 L 349,55 Q 334,55 334,40 L 334,32 Q 334,17 340,17 L 345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="294,83 306,79 306,88" style="fill:rgb(0,0,0)"/>
+<path d="M583,17 L 591,17 Q 598,17 598,32 L 598,68 Q 598,83 583,83 L 315,83 L 300,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,53 20,41 28,41" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,32 L 24,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,136L114,136A15 15 0 0 0 129 121A15 15 0 0 0 114 106L60,106A15 15 0 0 0 45 121A15 15 0 0 0 60 136Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="45,121 33,125 33,116" style="fill:rgb(0,0,0)"/>
+<path d="M24,53 L 24,106 Q 24,121 31,121 L 39,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,83 L 39,83 Q 24,83 24,91 L 24,98" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,299 159,303 159,295" style="fill:rgb(0,0,0)"/>
+<path d="M129,121 L 137,121 Q 144,121 144,136 L 144,284 Q 144,299 155,299 L 165,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,314L193,314A15 15 0 0 0 208 299A15 15 0 0 0 193 284L186,284A15 15 0 0 0 171 299A15 15 0 0 0 186 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,299 214,303 214,295" style="fill:rgb(0,0,0)"/>
+<path d="M208,299L219,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,314L318,314A15 15 0 0 0 333 299A15 15 0 0 0 318 284L240,284A15 15 0 0 0 225 299A15 15 0 0 0 240 314Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="279" y="299" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="350,299 339,303 339,295" style="fill:rgb(0,0,0)"/>
+<path d="M333,299L344,299" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,121 380,125 380,116" style="fill:rgb(0,0,0)"/>
+<path d="M350,299 L 358,299 Q 365,299 365,284 L 365,136 Q 365,121 376,121 L 386,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M392,136L576,136L576,106L392,106Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="121" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">qualified-table-name</text>
+<path d="M186,276L193,276A15 15 0 0 0 208 261A15 15 0 0 0 193 246L186,246A15 15 0 0 0 171 261A15 15 0 0 0 186 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,261 214,266 214,257" style="fill:rgb(0,0,0)"/>
+<path d="M208,261L219,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,276L304,276A15 15 0 0 0 319 261A15 15 0 0 0 304 246L240,246A15 15 0 0 0 225 261A15 15 0 0 0 240 276Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="261" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REPLACE</text>
+<polygon points="350,261 339,266 339,257" style="fill:rgb(0,0,0)"/>
+<path d="M319,261L344,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,261 L 358,261 Q 365,261 365,254 L 365,246" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,261 159,266 159,257" style="fill:rgb(0,0,0)"/>
+<path d="M144,246 L 144,254 Q 144,261 155,261 L 165,261" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,239L193,239A15 15 0 0 0 208 224A15 15 0 0 0 193 208L186,208A15 15 0 0 0 171 224A15 15 0 0 0 186 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,224 214,228 214,219" style="fill:rgb(0,0,0)"/>
+<path d="M208,224L219,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,239L292,239A15 15 0 0 0 307 224A15 15 0 0 0 292 208L240,208A15 15 0 0 0 225 224A15 15 0 0 0 240 239Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="266" y="224" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="350,224 339,228 339,219" style="fill:rgb(0,0,0)"/>
+<path d="M307,224L344,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,224 L 358,224 Q 365,224 365,216 L 365,209" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,224 159,228 159,219" style="fill:rgb(0,0,0)"/>
+<path d="M144,208 L 144,216 Q 144,224 155,224 L 165,224" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,201L193,201A15 15 0 0 0 208 186A15 15 0 0 0 193 171L186,171A15 15 0 0 0 171 186A15 15 0 0 0 186 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,186 214,190 214,181" style="fill:rgb(0,0,0)"/>
+<path d="M208,186L219,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,201L262,201A15 15 0 0 0 277 186A15 15 0 0 0 262 171L240,171A15 15 0 0 0 225 186A15 15 0 0 0 240 201Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="186" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="350,186 339,190 339,181" style="fill:rgb(0,0,0)"/>
+<path d="M277,186L344,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,186 L 358,186 Q 365,186 365,178 L 365,171" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,186 159,190 159,181" style="fill:rgb(0,0,0)"/>
+<path d="M144,171 L 144,178 Q 144,186 155,186 L 165,186" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M186,163L193,163A15 15 0 0 0 208 148A15 15 0 0 0 193 133L186,133A15 15 0 0 0 171 148A15 15 0 0 0 186 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OR</text>
+<polygon points="225,148 214,152 214,144" style="fill:rgb(0,0,0)"/>
+<path d="M208,148L219,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,163L282,163A15 15 0 0 0 297 148A15 15 0 0 0 282 133L240,133A15 15 0 0 0 225 148A15 15 0 0 0 240 163Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="148" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="350,148 339,152 339,144" style="fill:rgb(0,0,0)"/>
+<path d="M297,148L344,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,148 L 358,148 Q 365,148 365,140 L 365,133" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="171,148 159,152 159,144" style="fill:rgb(0,0,0)"/>
+<path d="M144,133 L 144,140 Q 144,148 155,148 L 165,148" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="350,121 339,125 339,116" style="fill:rgb(0,0,0)"/>
+<path d="M129,121L344,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M350,121L380,121" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,375 39,379 39,370" style="fill:rgb(0,0,0)"/>
+<path d="M576,121 L 584,121 Q 591,121 591,136 L 591,322 Q 591,337 576,337 L 39,337 Q 24,337 24,352 L 24,360 Q 24,375 34,375 L 45,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,390L81,390A15 15 0 0 0 96 375A15 15 0 0 0 81 360L65,360A15 15 0 0 0 50 375A15 15 0 0 0 65 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="73" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="153,413 141,417 141,408" style="fill:rgb(0,0,0)"/>
+<path d="M96,375 L 111,375 Q 126,375 126,390 L 126,398 Q 126,413 136,413 L 147,413" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,428L309,428L309,397L153,397Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="413" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="350,375 339,379 339,370" style="fill:rgb(0,0,0)"/>
+<path d="M309,413 L 316,413 Q 324,413 324,398 L 324,390 Q 324,375 334,375 L 344,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,390A15 15 0 0 0 380 375A15 15 0 0 0 365 360A15 15 0 0 0 350 375A15 15 0 0 0 365 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="375" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="404,375 392,379 392,370" style="fill:rgb(0,0,0)"/>
+<path d="M380,375L398,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,390L453,390L453,360L404,360Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="428" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="153,375 141,379 141,370" style="fill:rgb(0,0,0)"/>
+<path d="M96,375L147,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,390L262,390A15 15 0 0 0 277 375A15 15 0 0 0 262 360L168,360A15 15 0 0 0 153 375A15 15 0 0 0 168 390Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="375" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M277,375L339,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,465A15 15 0 0 0 266 450A15 15 0 0 0 251 435A15 15 0 0 0 236 450A15 15 0 0 0 251 465Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="251" y="450" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="266,450 277,446 277,455" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,435 Q 468,450 453,450 L 287,450 L 272,450" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M236,450 L 117,450 Q 102,450 102,435 L 102,390 Q 102,375 117,375 L 117,375 L 132,375" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="251,488 262,484 262,492" style="fill:rgb(0,0,0)"/>
+<path d="M453,375 L 460,375 Q 468,375 468,390 L 468,473 Q 468,488 453,488 L 271,488 L 256,488" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,488 L 39,488 Q 24,488 24,503 L 24,511 Q 24,526 37,526 L 50,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,541L100,541A15 15 0 0 0 115 526A15 15 0 0 0 100 511L65,511A15 15 0 0 0 50 526A15 15 0 0 0 65 541Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="187,526 176,530 176,522" style="fill:rgb(0,0,0)"/>
+<path d="M115,526L182,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,541L348,541L348,511L187,511Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="526" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M268,579A15 15 0 0 0 283 564A15 15 0 0 0 268 549A15 15 0 0 0 253 564A15 15 0 0 0 268 579Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="564" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="283,564 295,559 295,568" style="fill:rgb(0,0,0)"/>
+<path d="M348,526 L 356,526 Q 363,526 363,541 L 363,549 Q 363,564 348,564 L 304,564 L 289,564" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M253,564 L 176,564 Q 161,564 161,549 L 161,541 Q 161,526 168,526 L 176,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,602 176,606 176,597" style="fill:rgb(0,0,0)"/>
+<path d="M115,526 L 123,526 Q 130,526 130,541 L 130,587 Q 130,602 145,602 L 167,602 L 182,602" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,617L290,617L290,586L187,586Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="239" y="602" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<polygon points="405,526 393,530 393,522" style="fill:rgb(0,0,0)"/>
+<path d="M290,602 L 363,602 Q 378,602 378,587 L 378,541 Q 378,526 389,526 L 399,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="244,639 255,635 255,644" style="fill:rgb(0,0,0)"/>
+<path d="M405,526 L 412,526 Q 420,526 420,541 L 420,624 Q 420,639 405,639 L 265,639 L 250,639" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,526L393,526" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,677 39,681 39,673" style="fill:rgb(0,0,0)"/>
+<path d="M244,639 L 39,639 Q 24,639 24,654 L 24,662 Q 24,677 34,677 L 45,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,692L115,692A15 15 0 0 0 130 677A15 15 0 0 0 115 662L66,662A15 15 0 0 0 50 677A15 15 0 0 0 66 692Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="90" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="153,677 142,681 142,673" style="fill:rgb(0,0,0)"/>
+<path d="M130,677L147,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,692L202,692L202,662L153,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="178" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="256,677 245,681 245,673" style="fill:rgb(0,0,0)"/>
+<path d="M202,677L251,677" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,692L407,692L407,662L256,662Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="677" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">returning-clause</text>
+<polygon points="24,586 20,575 28,575" style="fill:rgb(0,0,0)"/>
+<path d="M24,511L24,581" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,586L24,662" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="126,715 138,711 138,719" style="fill:rgb(0,0,0)"/>
+<path d="M202,677 L 212,677 Q 221,677 221,692 L 221,700 Q 221,715 206,715 L 147,715 L 132,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,715 L 39,715 Q 24,715 24,730 L 24,745" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,715 343,711 343,719" style="fill:rgb(0,0,0)"/>
+<path d="M407,677 L 417,677 Q 426,677 426,692 L 426,700 Q 426,715 411,715 L 353,715 L 338,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M332,715L178,715" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="24,704 20,692 28,692" style="fill:rgb(0,0,0)"/>
+<path d="M24,662L24,698" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M24,704 L 24,738 Q 24,753 37,753 L 50,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,768L110,768A15 15 0 0 0 125 753A15 15 0 0 0 110 738L66,738A15 15 0 0 0 50 753A15 15 0 0 0 66 768Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="88" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="148,753 137,757 137,748" style="fill:rgb(0,0,0)"/>
+<path d="M125,753L142,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M163,768L167,768A15 15 0 0 0 183 753A15 15 0 0 0 167 738L163,738A15 15 0 0 0 148 753A15 15 0 0 0 163 768Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="165" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="219,753 207,757 207,748" style="fill:rgb(0,0,0)"/>
+<path d="M183,753L213,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,768L348,768L348,738L219,738Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="753" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M283,806A15 15 0 0 0 299 791A15 15 0 0 0 283 775A15 15 0 0 0 268 791A15 15 0 0 0 283 806Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="283" y="791" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M60,874L93,874A15 15 0 0 0 109 859A15 15 0 0 0 93 843L60,843A15 15 0 0 0 45 859A15 15 0 0 0 60 874Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="77" y="859" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="132,859 120,863 120,854" style="fill:rgb(0,0,0)"/>
+<path d="M109,859L126,859" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,874L181,874L181,843L132,843Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="859" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,889 207,893 207,885" style="fill:rgb(0,0,0)"/>
+<path d="M181,859 L 188,859 Q 196,859 196,874 L 196,874 Q 196,889 204,889 L 213,889" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M234,904L285,904A15 15 0 0 0 300 889A15 15 0 0 0 285 874L234,874A15 15 0 0 0 219 889A15 15 0 0 0 234 904Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="889" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="323,889 312,893 312,885" style="fill:rgb(0,0,0)"/>
+<path d="M300,889L318,889" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,904L373,904L373,874L323,874Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="889" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M234,942A15 15 0 0 0 249 927A15 15 0 0 0 234 912A15 15 0 0 0 219 927A15 15 0 0 0 234 942Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="927" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="272,927 261,931 261,922" style="fill:rgb(0,0,0)"/>
+<path d="M249,927L266,927" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,942L321,942L321,912L272,912Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="297" y="927" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="219,927 207,931 207,922" style="fill:rgb(0,0,0)"/>
+<path d="M181,859 L 188,859 Q 196,859 196,874 L 196,912 Q 196,927 204,927 L 213,927" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,791 310,786 310,795" style="fill:rgb(0,0,0)"/>
+<path d="M348,753 L 356,753 Q 363,753 363,768 L 363,776 Q 363,791 348,791 L 319,791 L 304,791" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M268,791 L 210,791 Q 195,791 195,776 L 195,768 Q 195,753 203,753 L 210,753" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,859 33,863 33,854" style="fill:rgb(0,0,0)"/>
+<path d="M24,738 L 24,844 Q 24,859 31,859 L 39,859" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,821 177,816 177,825" style="fill:rgb(0,0,0)"/>
+<path d="M348,753 L 356,753 Q 363,753 363,768 L 363,806 Q 363,821 348,821 L 186,821 L 171,821" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,821 L 39,821 Q 24,821 24,828 L 24,836" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="178,964 166,969 166,960" style="fill:rgb(0,0,0)"/>
+<path d="M24,843 L 24,949 Q 24,964 39,964 L 157,964 L 172,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="613,964 602,969 602,960" style="fill:rgb(0,0,0)"/>
+<path d="M178,964L608,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="617" cy="964" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,889 384,893 384,885" style="fill:rgb(0,0,0)"/>
+<path d="M373,889L390,889" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,964 435,969 435,960" style="fill:rgb(0,0,0)"/>
+<path d="M396,889 L 403,889 Q 411,889 411,904 L 411,949 Q 411,964 426,964 L 426,964 L 441,964" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,927 384,931 384,922" style="fill:rgb(0,0,0)"/>
+<path d="M321,927L390,927" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,927 L 403,927 Q 411,927 411,934 L 411,942" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="396,859 384,863 384,854" style="fill:rgb(0,0,0)"/>
+<path d="M181,859L390,859" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M396,859 L 403,859 Q 411,859 411,874 L 411,889 L 411,904" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#column-name-list">column-name-list</a>&nbsp;&nbsp; <a href="#common-table-expression">common-table-expression</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#join-clause">join-clause</a>&nbsp;&nbsp; <a href="#ordering-term">ordering-term</a>&nbsp;&nbsp; <a href="#qualified-table-name">qualified-table-name</a>&nbsp;&nbsp; <a href="#returning-clause">returning-clause</a>&nbsp;&nbsp; <a href="#table-or-subquery">table-or-subquery</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_update.html#upfrom">lang_update.html#upfrom</a>
+</div>
+
+<a name="upsert-clause"></a><h4>upsert-clause:</h4><div class='imgcontainer'>
+<div style="max-width:901px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 901.142 363.96">
+<path d="M223,165L759,165L759,51L223,51Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="5" cy="66" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,66 35,71 35,62" style="fill:rgb(0,0,0)"/>
+<path d="M9,66L41,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,82L71,82A15 15 0 0 0 86 66A15 15 0 0 0 71 51L62,51A15 15 0 0 0 47 66A15 15 0 0 0 62 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="103,66 92,71 92,62" style="fill:rgb(0,0,0)"/>
+<path d="M86,66L98,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M118,82L193,82A15 15 0 0 0 208 66A15 15 0 0 0 193 51L118,51A15 15 0 0 0 103 66A15 15 0 0 0 118 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CONFLICT</text>
+<polygon points="264,97 253,101 253,92" style="fill:rgb(0,0,0)"/>
+<path d="M208,66 L 223,66 Q 238,66 238,81 L 238,82 Q 238,97 248,97 L 259,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M280,112A15 15 0 0 0 295 97L295,97A15 15 0 0 0 280 82A15 15 0 0 0 264 97L264,97A15 15 0 0 0 280 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="97" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="331,97 319,101 319,92" style="fill:rgb(0,0,0)"/>
+<path d="M295,97L325,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M331,112L475,112L475,82L331,82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="97" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">indexed-column</text>
+<polygon points="511,97 500,101 500,92" style="fill:rgb(0,0,0)"/>
+<path d="M475,97L506,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M526,112A15 15 0 0 0 542 97L542,97A15 15 0 0 0 526 82A15 15 0 0 0 511 97L511,97A15 15 0 0 0 526 112Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="526" y="97" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="583,135 572,139 572,130" style="fill:rgb(0,0,0)"/>
+<path d="M542,97 L 549,97 Q 557,97 557,112 L 557,119 Q 557,135 567,135 L 577,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M598,150L648,150A15 15 0 0 0 663 135A15 15 0 0 0 648 119L598,119A15 15 0 0 0 583 135A15 15 0 0 0 598 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="623" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="680,135 669,139 669,130" style="fill:rgb(0,0,0)"/>
+<path d="M663,135L674,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M680,150L729,150L729,119L680,119Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="705" y="135" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="744,108 749,119 740,119" style="fill:rgb(0,0,0)"/>
+<path d="M729,135 L 737,135 Q 744,135 744,124 L 744,114" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="786,66 774,71 774,62" style="fill:rgb(0,0,0)"/>
+<path d="M744,108 L 744,81 Q 744,66 759,66 L 765,66 L 780,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M801,82L809,82A15 15 0 0 0 824 66A15 15 0 0 0 809 51L801,51A15 15 0 0 0 786 66A15 15 0 0 0 801 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="805" y="66" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DO</text>
+<polygon points="729,97 718,101 718,92" style="fill:rgb(0,0,0)"/>
+<path d="M542,97L723,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M729,97 L 737,97 Q 744,97 744,89 L 744,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M208,66L774,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,150A15 15 0 0 0 418 135A15 15 0 0 0 403 119A15 15 0 0 0 388 135A15 15 0 0 0 403 150Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="135" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,135 430,130 430,139" style="fill:rgb(0,0,0)"/>
+<path d="M475,97 L 483,97 Q 490,97 490,112 L 490,119 Q 490,135 475,135 L 439,135 L 424,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,135 L 319,135 Q 304,135 304,119 L 304,112 Q 304,97 312,97 L 319,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="288" y="36" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" dominant-baseline="central">conflict target</text>
+<polygon points="436,195 447,191 447,199" style="fill:rgb(0,0,0)"/>
+<path d="M824,66 L 831,66 Q 839,66 839,81 L 839,180 Q 839,195 824,195 L 456,195 L 441,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="47,271 35,275 35,266" style="fill:rgb(0,0,0)"/>
+<path d="M436,195 L 35,195 Q 20,195 20,210 L 20,256 Q 20,271 31,271 L 41,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,286L116,286A15 15 0 0 0 131 271A15 15 0 0 0 116 255L62,255A15 15 0 0 0 47 271A15 15 0 0 0 62 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="89" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UPDATE</text>
+<polygon points="148,271 137,275 137,266" style="fill:rgb(0,0,0)"/>
+<path d="M131,271L143,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M164,286L179,286A15 15 0 0 0 194 271A15 15 0 0 0 179 255L164,255A15 15 0 0 0 148 271A15 15 0 0 0 164 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="171" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SET</text>
+<polygon points="257,308 245,313 245,304" style="fill:rgb(0,0,0)"/>
+<path d="M194,271 L 215,271 Q 230,271 230,286 L 230,293 Q 230,308 241,308 L 251,308" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,324L413,324L413,293L257,293Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="335" y="308" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name-list</text>
+<polygon points="475,271 464,275 464,266" style="fill:rgb(0,0,0)"/>
+<path d="M413,308 L 434,308 Q 449,308 449,293 L 449,286 Q 449,271 459,271 L 469,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,286A15 15 0 0 0 505 271A15 15 0 0 0 490 255A15 15 0 0 0 475 271A15 15 0 0 0 490 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="490" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">=</text>
+<polygon points="523,271 511,275 511,266" style="fill:rgb(0,0,0)"/>
+<path d="M505,271L517,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M523,286L572,286L572,255L523,255Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="547" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="619,271 608,275 608,266" style="fill:rgb(0,0,0)"/>
+<path d="M572,271L613,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M634,286L684,286A15 15 0 0 0 699 271A15 15 0 0 0 684 255L634,255A15 15 0 0 0 619 271A15 15 0 0 0 634 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="659" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="716,271 705,275 705,266" style="fill:rgb(0,0,0)"/>
+<path d="M699,271L710,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M716,286L765,286L765,255L716,255Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="741" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="891,233 880,237 880,228" style="fill:rgb(0,0,0)"/>
+<path d="M765,271 L 773,271 Q 780,271 780,256 L 780,248 Q 780,233 795,233 L 871,233 L 886,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="895" cy="233" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,248L130,248A15 15 0 0 0 145 233A15 15 0 0 0 130 218L62,218A15 15 0 0 0 47 233A15 15 0 0 0 62 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="96" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTHING</text>
+<polygon points="47,233 35,237 35,228" style="fill:rgb(0,0,0)"/>
+<path d="M20,218 L 20,225 Q 20,233 31,233 L 41,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,233L880,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="638,233 626,237 626,228" style="fill:rgb(0,0,0)"/>
+<path d="M587,271 L 594,271 Q 602,271 602,256 L 602,248 Q 602,233 617,233 L 617,233 L 632,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M383,361A15 15 0 0 0 398 346A15 15 0 0 0 383 331A15 15 0 0 0 368 346A15 15 0 0 0 383 361Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="383" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="398,346 410,342 410,351" style="fill:rgb(0,0,0)"/>
+<path d="M572,271 L 579,271 Q 587,271 587,286 L 587,331 Q 587,346 572,346 L 419,346 L 404,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,308 210,320 201,320" style="fill:rgb(0,0,0)"/>
+<path d="M368,346 L 221,346 Q 206,346 206,331 L 206,329 L 206,314" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,308 L 206,286 Q 206,271 221,271 L 227,271 L 242,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="257,271 245,275 245,266" style="fill:rgb(0,0,0)"/>
+<path d="M194,271L251,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,286L366,286A15 15 0 0 0 381 271A15 15 0 0 0 366 255L272,255A15 15 0 0 0 257 271A15 15 0 0 0 272 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<path d="M381,271L464,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="865,97 869,108 860,108" style="fill:rgb(0,0,0)"/>
+<path d="M850,233 L 857,233 Q 865,233 865,218 L 865,117 L 865,102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="403,6 415,2 415,10" style="fill:rgb(0,0,0)"/>
+<path d="M865,97 L 865,21 Q 865,6 850,6 L 424,6 L 409,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,6 L 40,6 Q 25,6 25,21 L 25,51 Q 25,66 32,66 L 40,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#insert-stmt">insert-stmt</a><br></br>
+References:&nbsp;&nbsp; <a href="#column-name-list">column-name-list</a>&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#indexed-column">indexed-column</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>
+</div>
+
+<a name="vacuum-stmt"></a><h4>vacuum-stmt:</h4><div class='imgcontainer'>
+<div style="max-width:599px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 599.669 64.8">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L108,32A15 15 0 0 0 123 17A15 15 0 0 0 108 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="78" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VACUUM</text>
+<polygon points="165,47 153,51 153,43" style="fill:rgb(0,0,0)"/>
+<path d="M123,17 L 131,17 Q 138,17 138,32 L 138,32 Q 138,47 149,47 L 159,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,62L276,62A15 15 0 0 0 292 47L292,47A15 15 0 0 0 276 32L180,32A15 15 0 0 0 165 47L165,47A15 15 0 0 0 180 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="333,17 322,21 322,12" style="fill:rgb(0,0,0)"/>
+<path d="M292,47 L 299,47 Q 307,47 307,32 L 307,32 Q 307,17 317,17 L 327,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="375,47 363,51 363,43" style="fill:rgb(0,0,0)"/>
+<path d="M333,17 L 341,17 Q 348,17 348,32 L 348,32 Q 348,47 359,47 L 369,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M390,62L417,62A15 15 0 0 0 432 47L432,47A15 15 0 0 0 417 32L390,32A15 15 0 0 0 375 47L375,47A15 15 0 0 0 390 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTO</text>
+<polygon points="455,47 443,51 443,43" style="fill:rgb(0,0,0)"/>
+<path d="M432,47L449,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M470,62L524,62A15 15 0 0 0 539 47L539,47A15 15 0 0 0 524 32L470,32A15 15 0 0 0 455 47L455,47A15 15 0 0 0 470 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="497" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filename</text>
+<polygon points="590,17 578,21 578,12" style="fill:rgb(0,0,0)"/>
+<path d="M539,47 L 546,47 Q 554,47 554,32 L 554,32 Q 554,17 569,17 L 569,17 L 584,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="593" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M123,17L578,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#sql-stmt">sql-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_vacuum.html">lang_vacuum.html</a>
+</div>
+
+<a name="window-defn"></a><h4>window-defn:</h4><div class='imgcontainer'>
+<div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+
+Used by:&nbsp;&nbsp; <a href="#select-core">select-core</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a>&nbsp;&nbsp; <a href="#window-function-invocation">window-function-invocation</a><br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#frame-spec">frame-spec</a>&nbsp;&nbsp; <a href="#ordering-term">ordering-term</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_aggfunc.html">lang_aggfunc.html</a>&nbsp;&nbsp; <a href="lang_altertable.html">lang_altertable.html</a>&nbsp;&nbsp; <a href="lang_attach.html">lang_attach.html</a>&nbsp;&nbsp; <a href="lang_createindex.html">lang_createindex.html</a>&nbsp;&nbsp; <a href="lang_createtable.html">lang_createtable.html</a>&nbsp;&nbsp; <a href="lang_createtrigger.html">lang_createtrigger.html</a>&nbsp;&nbsp; <a href="lang_createview.html">lang_createview.html</a>&nbsp;&nbsp; <a href="lang_delete.html">lang_delete.html</a>&nbsp;&nbsp; <a href="lang_expr.html">lang_expr.html</a>&nbsp;&nbsp; <a href="lang_insert.html">lang_insert.html</a>&nbsp;&nbsp; <a href="lang_returning.html">lang_returning.html</a>&nbsp;&nbsp; <a href="lang_select.html">lang_select.html</a>&nbsp;&nbsp; <a href="lang_select.html#compound">lang_select.html#compound</a>&nbsp;&nbsp; <a href="lang_select.html#simpleselect">lang_select.html#simpleselect</a>&nbsp;&nbsp; <a href="lang_update.html">lang_update.html</a>&nbsp;&nbsp; <a href="lang_upsert.html">lang_upsert.html</a>&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>&nbsp;&nbsp; <a href="partialindex.html">partialindex.html</a>
+</div>
+
+<a name="window-function-invocation"></a><h4>window-function-invocation:</h4><div class='imgcontainer'>
+<div style="max-width:870px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 870.446 132.84">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,55 20,59 20,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L26,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,70L135,70A15 15 0 0 0 150 55A15 15 0 0 0 135 39L47,39A15 15 0 0 0 32 55A15 15 0 0 0 47 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="91" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-func</text>
+<polygon points="167,55 156,59 156,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,55L161,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,70A15 15 0 0 0 197 55A15 15 0 0 0 182 39A15 15 0 0 0 167 55A15 15 0 0 0 182 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="182" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="251,55 240,59 240,50" style="fill:rgb(0,0,0)"/>
+<path d="M197,55L246,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,70L300,70L300,39L251,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="354,55 343,59 343,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L349,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M370,70A15 15 0 0 0 385 55A15 15 0 0 0 370 39A15 15 0 0 0 354 55A15 15 0 0 0 370 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="370" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="426,85 415,89 415,81" style="fill:rgb(0,0,0)"/>
+<path d="M385,55 L 392,55 Q 400,55 400,70 L 400,70 Q 400,85 410,85 L 420,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M426,100L538,100L538,70L426,70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="580,55 568,59 568,50" style="fill:rgb(0,0,0)"/>
+<path d="M538,85 L 546,85 Q 553,85 553,70 L 553,70 Q 553,55 564,55 L 574,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,70L626,70A15 15 0 0 0 641 55A15 15 0 0 0 626 39L595,39A15 15 0 0 0 580 55A15 15 0 0 0 595 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="610" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="682,92 671,97 671,88" style="fill:rgb(0,0,0)"/>
+<path d="M641,55 L 648,55 Q 656,55 656,70 L 656,77 Q 656,92 666,92 L 677,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M697,108L794,108A15 15 0 0 0 810 92L810,92A15 15 0 0 0 794 77L697,77A15 15 0 0 0 682 92L682,92A15 15 0 0 0 697 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="746" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="861,55 849,59 849,50" style="fill:rgb(0,0,0)"/>
+<path d="M810,92 L 817,92 Q 825,92 825,77 L 825,70 Q 825,55 840,55 L 840,55 L 855,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="864" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M385,55L568,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="682,55 671,59 671,50" style="fill:rgb(0,0,0)"/>
+<path d="M641,55L677,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M682,70L801,70L801,39L682,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="742" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M801,55L849,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32A15 15 0 0 0 291 17L291,17A15 15 0 0 0 276 2A15 15 0 0 0 261 17L261,17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="291,17 303,12 303,21" style="fill:rgb(0,0,0)"/>
+<path d="M300,55 L 308,55 Q 315,55 315,40 L 315,32 Q 315,17 306,17 L 297,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,17 L 240,17 Q 225,17 225,32 L 225,40 Q 225,55 232,55 L 240,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="276,85 264,89 264,81" style="fill:rgb(0,0,0)"/>
+<path d="M197,55 L 205,55 Q 212,55 212,70 L 212,70 Q 212,85 227,85 L 255,85 L 270,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,85 L 313,85 Q 328,85 328,70 L 328,70 Q 328,55 335,55 L 343,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130A15 15 0 0 0 291 115L291,115A15 15 0 0 0 276 100A15 15 0 0 0 261 115L261,115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M197,55 L 205,55 Q 212,55 212,70 L 212,100 Q 212,115 227,115 L 240,115 L 255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,115 L 313,115 Q 328,115 328,100 L 328,70 Q 328,55 335,55 L 343,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+References:&nbsp;&nbsp; <a href="#expr">expr</a>&nbsp;&nbsp; <a href="#filter-clause">filter-clause</a>&nbsp;&nbsp; <a href="#window-defn">window-defn</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_expr.html#booleanexpr">lang_expr.html#booleanexpr</a>
+</div>
+
+<a name="with-clause"></a><h4>with-clause:</h4><div class='imgcontainer'>
+<div style="max-width:1056px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1056.72 140.4">
+<circle cx="5" cy="85" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,85 20,89 20,81" style="fill:rgb(0,0,0)"/>
+<path d="M9,85L26,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,100L78,100A15 15 0 0 0 93 85A15 15 0 0 0 78 70L47,70A15 15 0 0 0 32 85A15 15 0 0 0 47 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,85 L 100,85 Q 108,85 108,70 L 108,70 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M150,70L235,70A15 15 0 0 0 250 55L250,55A15 15 0 0 0 235 39L150,39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 150 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<path d="M250,55 L 258,55 Q 265,55 265,70 L 265,70 Q 265,85 273,85 L 280,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,85 295,89 295,81" style="fill:rgb(0,0,0)"/>
+<path d="M280,85L301,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,100L444,100L444,70L307,70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">cte-table-name</text>
+<polygon points="467,85 455,89 455,81" style="fill:rgb(0,0,0)"/>
+<path d="M444,85L461,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M482,100L486,100A15 15 0 0 0 501 85A15 15 0 0 0 486 70L482,70A15 15 0 0 0 467 85A15 15 0 0 0 482 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="542,17 531,21 531,12" style="fill:rgb(0,0,0)"/>
+<path d="M501,85 L 508,85 Q 516,85 516,70 L 516,32 Q 516,17 526,17 L 537,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,32L578,32A15 15 0 0 0 593 17L593,17A15 15 0 0 0 578 2L558,2A15 15 0 0 0 542 17L542,17A15 15 0 0 0 558 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="568" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M593,17L604,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M625,32L743,32A15 15 0 0 0 759 17L759,17A15 15 0 0 0 743 2L625,2A15 15 0 0 0 610 17L610,17A15 15 0 0 0 625 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="684" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<polygon points="800,85 789,89 789,81" style="fill:rgb(0,0,0)"/>
+<path d="M759,17 L 766,17 Q 774,17 774,32 L 774,70 Q 774,85 784,85 L 794,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M815,100A15 15 0 0 0 830 85A15 15 0 0 0 815 70A15 15 0 0 0 800 85A15 15 0 0 0 815 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="815" y="85" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="853,85 842,89 842,81" style="fill:rgb(0,0,0)"/>
+<path d="M830,85L848,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M853,100L958,100L958,70L853,70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="905" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="981,85 969,89 969,81" style="fill:rgb(0,0,0)"/>
+<path d="M958,85L975,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M996,100A15 15 0 0 0 1011 85A15 15 0 0 0 996 70A15 15 0 0 0 981 85A15 15 0 0 0 996 100Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="996" y="85" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="1047,85 1035,89 1035,81" style="fill:rgb(0,0,0)"/>
+<path d="M1011,85L1041,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="1050" cy="85" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="542,56 531,60 531,52" style="fill:rgb(0,0,0)"/>
+<path d="M501,85 L 508,85 Q 516,85 516,70 Q 516,56 526,56 L 537,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,71L676,71A15 15 0 0 0 691 56A15 15 0 0 0 676 41L558,41A15 15 0 0 0 542 56A15 15 0 0 0 558 71Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="56" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<polygon points="759,56 747,60 747,52" style="fill:rgb(0,0,0)"/>
+<path d="M691,56L753,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,56 L 766,56 Q 774,56 774,64 L 774,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="617,85 605,89 605,81" style="fill:rgb(0,0,0)"/>
+<path d="M501,85L611,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M617,85L800,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M659,138A15 15 0 0 0 674 123L674,123A15 15 0 0 0 659 108A15 15 0 0 0 644 123L644,123A15 15 0 0 0 659 138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="659" y="123" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="674,123 686,118 686,127" style="fill:rgb(0,0,0)"/>
+<path d="M1011,85 L 1018,85 Q 1026,85 1026,100 L 1026,108 Q 1026,123 1011,123 L 695,123 L 680,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,123 L 295,123 Q 280,123 280,108 L 280,100 Q 280,85 288,85 L 295,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,85L295,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<br></br>
+References:&nbsp;&nbsp; <a href="#cte-table-name">cte-table-name</a>&nbsp;&nbsp; <a href="#select-stmt">select-stmt</a><br></br>
+See also:&nbsp;&nbsp; <a href="lang_with.html">lang_with.html</a>
+</div>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/syntaxdiagrams.in?m=4eaf2fca2d6dfbc88">2020-10-01 18:23:33</a> UTC </small></i></p>
+
diff --git a/www/tclsqlite.html b/www/tclsqlite.html
new file mode 100644
index 0000000..80e230e
--- /dev/null
+++ b/www/tclsqlite.html
@@ -0,0 +1,1260 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Tcl interface to the SQLite library</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align=center>The Tcl interface to the SQLite library</h1>
+
+<p>The SQLite library is designed to be very easy to use from
+a <a href="http://www.tcl-lang.org">Tcl or Tcl/Tk</a> script. SQLite
+began as a <a href="http://www.tcl-lang.org/doc/tea/">Tcl extension</a>
+and the primary <a href="testing.html">test suite</a> for SQLite is written in TCL. SQLite
+can be used with any programming language, but its connections to
+TCL run deep.</p>
+
+<p>This document gives an overview of the Tcl
+programming interface for SQLite.</p>
+
+<h3>The API</h3>
+
+<p>The interface to the SQLite library consists of single
+tcl command named <b>sqlite3</b>
+Because there is only this
+one command, the interface is not placed in a separate
+namespace.</p>
+
+<p>The <b>sqlite3</b> command is mostly used as follows
+to open or create a database:</p>
+
+<blockquote>
+<b>sqlite3</b>&nbsp;&nbsp;<i>dbcmd&nbsp;&nbsp;?database-name?&nbsp;&nbsp;?options?</i>
+</blockquote>
+
+<p>To get information only, the <b>sqlite3</b> command may be given exactly
+one argument, either "-version", "-sourceid" or "-has-codec", which will
+return the specified datum with no other effect.
+</p>
+
+<p>With other arguments, the <b>sqlite3</b> command opens the database
+named in the second non-option argument, or named "" if there is no such.
+If the open succeeds, a new Tcl command named by the first argument is created
+and "" is returned.
+(This approach is similar to the way widgets are created in Tk.)
+If the open fails, an error is raised without creating a Tcl command
+and an error message string is returned.
+</p>
+<p>If the database does not already exist, the default behavior
+is for it to be created automatically (though this can be changed by
+using the "<b>-create <i>false</i></b>" option).
+</p>
+
+<p>
+The name of the database is usually just the name of a disk file in which
+the database is stored. If the name of the database is
+the special name "<a href="inmemorydb.html">:memory:</a>", then a new database is created
+in memory. If the name of the database is an empty string, then
+the database is created in an empty file that is automatically deleted
+when the database connection closes. <a href="uri.html">URI filenames</a> can be used if
+the "<b>-uri yes</b>" option is supplied on the <b>sqlite3</b> command.
+</p>
+
+<p>
+Options understood by the <b>sqlite3</b> command include:
+</p>
+
+<blockquote>
+<dl>
+
+<dt><b>-create</b> <i>BOOLEAN</i></dt>
+<dd><p>
+If true, then a new database is created if one does not already exist.
+If false, then an attempt to open a database file that does not previously
+exist raises an error. The default behavior is "true".
+</p></dd>
+
+<dt><b>-nomutex</b> <i>BOOLEAN</i></dt>
+<dd><p>
+If true, then all mutexes for the database connection are disabled.
+This provides a small performance boost in single-threaded applications.
+</p></dd>
+
+<dt><b>-readonly</b> <i>BOOLEAN</i></dt>
+<dd><p>
+If true, then open the database file read-only. If false, then the
+database is opened for both reading and writing if filesystem permissions
+allow, or for reading only if filesystem write permission is denied
+by the operating system. The default setting is "false". Note that
+if the previous process to have the database did not exit cleanly
+and left behind a <a href="fileformat2.html#hotjrnl">hot journal</a>, then the write permission is required
+to recover the database after opening, and the database cannot be
+opened read-only.
+</p></dd>
+
+<dt><b>-uri</b> <i>BOOLEAN</i></dt>
+<dd><p>
+If true, then interpret the filename argument as a <a href="uri.html">URI filename</a>. If
+false, then the argument is a literal filename. The default value is
+"false".
+</p></dd>
+
+<dt><b>-vfs</b> <i>VFSNAME</i></dt>
+<dd><p>
+Use an alternative <a href="vfs.html">VFS</a> named by the argument.
+</p></dd>
+
+<dt><b>-fullmutex</b> <i>BOOLEAN</i></dt>
+<dd><p>
+If true, multiple threads can safely attempt to use the database.
+If false, such attempts are unsafe. The default value depends upon
+how the extension is built.
+</p></dd>
+
+<dt><b>-nofollow</b> <i>BOOLEAN</i></dt>
+<dd><p>
+If true, and the database name refers to a symbolic link,
+it will not be followed to open the true database file.
+If false, symbolic links will be followed.
+The default is "false".
+</p></dd>
+
+</dl>
+</blockquote>
+
+
+
+<p>
+Once an SQLite database is open, it can be controlled using
+methods of the <i>dbcmd</i>.
+There are currently 40 methods
+defined.</p>
+
+
+<table border=0 cellpadding=10 width='100%'>
+<tr><td valign='top'><ul>
+<li><a href="#authorizer">authorizer</a></li>
+<li><a href="#backup">backup</a></li>
+<li><a href="#bind_fallback">bind_fallback</a></li>
+<li><a href="#busy">busy</a></li>
+<li><a href="#cache">cache</a></li>
+<li><a href="#changes">changes</a></li>
+<li><a href="#close">close</a></li>
+<li><a href="#collate">collate</a></li>
+<li><a href="#collation_needed">collation_needed</a></li>
+<li><a href="#commit_hook">commit_hook</a></li>
+<li><a href="#complete">complete</a></li>
+<li><a href="#config">config</a></li>
+<li><a href="#copy">copy</a></li>
+<li><a href="#deserialize">deserialize</a></li>
+</ul></td>
+<td valign='top'><ul>
+<li><a href="#enable_load_extension">enable_load_extension</a></li>
+<li><a href="#errorcode">errorcode</a></li>
+<li><a href="#eval">eval</a></li>
+<li><a href="#exists">exists</a></li>
+<li><a href="#function">function</a></li>
+<li><a href="#incrblob">incrblob</a></li>
+<li><a href="#interrupt">interrupt</a></li>
+<li><a href="#last_insert_rowid">last_insert_rowid</a></li>
+<li><a href="#nullvalue">nullvalue</a></li>
+<li><a href="#onecolumn">onecolumn</a></li>
+<li><a href="#preupdate">preupdate</a></li>
+<li><a href="#profile">profile</a></li>
+<li><a href="#progress">progress</a></li>
+<li><a href="#restore">restore</a></li>
+</ul></td>
+<td valign='top'><ul>
+<li><a href="#rollback_hook">rollback_hook</a></li>
+<li><a href="#serialize">serialize</a></li>
+<li><a href="#status">status</a></li>
+<li><a href="#timeout">timeout</a></li>
+<li><a href="#total_changes">total_changes</a></li>
+<li><a href="#trace">trace</a></li>
+<li><a href="#trace_v2">trace_v2</a></li>
+<li><a href="#transaction">transaction</a></li>
+<li><a href="#unlock_notify">unlock_notify</a></li>
+<li><a href="#update_hook">update_hook</a></li>
+<li><a href="#version">version</a></li>
+<li><a href="#wal_hook">wal_hook</a></li>
+
+</ul></td></tr>
+</table>
+
+
+<p>The use of each of these methods will be explained in the sequel, though
+not in the order shown above.</p>
+
+<a name="eval"></a>
+<h3>The "eval" method</h3>
+
+<p>
+The most useful <i>dbcmd</i> method is "eval". The eval method is used
+to execute SQL on the database. The syntax of the eval method looks
+like this:</p>
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>eval</b>&nbsp;&nbsp;?<i>options</i>?&nbsp;&nbsp;<i>sql</i>
+&nbsp;&nbsp;?<i>array-name</i>?&nbsp;&nbsp;?<i>script</i>?
+</blockquote>
+
+<p>
+The job of the eval method is to execute the SQL statement or statements
+given in the second argument. For example, to create a new table in
+a database, you can do this:</p>
+
+<blockquote>
+<b>sqlite3 db1 ./testdb<br>
+db1 eval {CREATE TABLE t1(a int, b text)}</b>
+</blockquote>
+
+<p>The above code creates a new table named <b>t1</b> with columns
+<b>a</b> and <b>b</b>. What could be simpler?</p>
+
+<p>Query results are returned as a list of column values. If a
+query requests 2 columns and there are 3 rows matching the query,
+then the returned list will contain 6 elements. For example:</p>
+
+<blockquote>
+<b>db1 eval {INSERT INTO t1 VALUES(1,'hello')}<br>
+db1 eval {INSERT INTO t1 VALUES(2,'goodbye')}<br>
+db1 eval {INSERT INTO t1 VALUES(3,'howdy!')}<br>
+set x &#91;db1 eval {SELECT * FROM t1 ORDER BY a}&#93;</b>
+</blockquote>
+
+<p>The variable <b>$x</b> is set by the above code to</p>
+
+<blockquote>
+<b>1 hello 2 goodbye 3 howdy!</b>
+</blockquote>
+
+<p>You can also process the results of a query one row at a time
+by specifying the name of an array variable and a script following
+the SQL code. For each row of the query result, the values of all
+columns will be inserted into the array variable and the script will
+be executed. For instance:</p>
+
+<blockquote>
+<b>db1 eval {SELECT * FROM t1 ORDER BY a} values {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;parray values<br>
+&nbsp;&nbsp;&nbsp;&nbsp;puts ""<br>
+}</b>
+</blockquote>
+
+<p>This last code will give the following output:</p>
+
+<blockquote><b>
+values(*) = a b<br>
+values(a) = 1<br>
+values(b) = hello<p>
+
+values(*) = a b<br>
+values(a) = 2<br>
+values(b) = goodbye<p>
+
+values(*) = a b<br>
+values(a) = 3<br>
+values(b) = howdy!</b>
+</blockquote>
+
+<p>
+For each column in a row of the result, the name of that column
+is used as an index in to array and the value of the column is stored
+in the corresponding array entry. (Caution: If two or more columns
+in the result set of a query have the same name, then the last column
+with that name will overwrite prior values and earlier columns with the
+same name will be inaccessible.) The special array index * is
+used to store a list of column names in the order that they appear.
+</p>
+
+<p>
+Normally, NULL SQL results are stored in the array using the
+<a href="#nullvalue">nullvalue</a> setting. However, if
+the <b>-withoutnulls</b> option is used, then NULL SQL values
+cause the corresponding array element to be unset instead.
+</p>
+
+<p>
+If the array variable name is omitted or is the empty string, then the value of
+each column is stored in a variable with the same name as the column
+itself. For example:
+</p>
+
+<blockquote>
+<b>db1 eval {SELECT * FROM t1 ORDER BY a} {<br>
+&nbsp;&nbsp;&nbsp;&nbsp;puts "a=$a b=$b"<br>
+}</b>
+</blockquote>
+
+<p>
+From this we get the following output
+</p>
+
+<blockquote><b>
+a=1 b=hello<br>
+a=2 b=goodbye<br>
+a=3 b=howdy!</b>
+</blockquote>
+
+<a name="varsubst"></a>
+
+<p>
+Tcl variable names can appear in the SQL statement of the second argument
+in any position where it is legal to put a string or number literal. The
+value of the variable is substituted for the variable name. If the
+variable does not exist a NULL values is used. For example:
+</p>
+
+<blockquote><b>
+db1 eval {INSERT INTO t1 VALUES(5,$bigstring)}
+</b></blockquote>
+
+<p>
+Note that it is not necessary to quote the $bigstring value. That happens
+automatically. If $bigstring is a large string or binary object, this
+technique is not only easier to write, it is also much more efficient
+since it avoids making a copy of the content of $bigstring.
+</p>
+
+<p>
+If the $bigstring variable has both a string and a "bytearray" representation,
+then TCL inserts the value as a string. If it has only a "bytearray"
+representation, then the value is inserted as a BLOB. To force a
+value to be inserted as a BLOB even if it also has a text representation,
+use a "@" character to in place of the "$". Like this:
+</p>
+
+<blockquote><b>
+db1 eval {INSERT INTO t1 VALUES(5,@bigstring)}
+</b></blockquote>
+
+<p>
+If the variable does not have a bytearray representation, then "@" works
+just like "$". Note that ":" works like "$" in all cases so the following
+is another way to express the same statement:
+</p>
+
+<blockquote><b>
+db1 eval {INSERT INTO t1 VALUES(5,:bigstring)}
+</b></blockquote>
+
+<p>The use of ":" instead of "$" before the name of a variable can
+sometimes be useful if the SQL text is enclosed in double-quotes "..."
+instead of curly-braces {...}.
+When the SQL is contained within double-quotes "..." then TCL will do
+the substitution of $-variables, which can lead to SQL injection if
+extreme care is not used. But TCL will never substitute a :-variable
+regardless of whether double-quotes "..." or curly-braces {...} are
+used to enclose the SQL, so the use of :-variables adds an extra
+measure of defense against SQL
+injection.
+</p>
+
+<a name="close"></a>
+<h3>The "close" method</h3>
+
+
+<p>
+As its name suggests, the "close" method to an SQLite database just
+closes the database. This has the side-effect of deleting the
+<i>dbcmd</i> Tcl command. Here is an example of opening and then
+immediately closing a database:
+</p>
+
+<blockquote>
+<b>sqlite3 db1 ./testdb<br>
+db1 close</b>
+</blockquote>
+
+<p>
+If you delete the <i>dbcmd</i> directly, that has the same effect
+as invoking the "close" method. So the following code is equivalent
+to the previous:</p>
+
+<blockquote>
+<b>sqlite3 db1 ./testdb<br>
+rename db1 {}</b>
+</blockquote>
+<a name="transaction"></a>
+<h3>The "transaction" method</h3>
+
+
+<p>
+The "transaction" method is used to execute a TCL script inside an SQLite
+database transaction. The transaction is committed when the script completes,
+or it rolls back if the script fails. If the transaction occurs within
+another transaction (even one that is started manually using BEGIN) it
+is a no-op.
+</p>
+
+<p>
+The transaction command can be used to group together several SQLite
+commands in a safe way. You can always start transactions manually using
+BEGIN, of
+course. But if an error occurs so that the COMMIT or ROLLBACK are never
+run, then the database will remain locked indefinitely. Also, BEGIN
+does not nest, so you have to make sure no other transactions are active
+before starting a new one. The "transaction" method takes care of
+all of these details automatically.
+</p>
+
+<p>
+The syntax looks like this:
+</p>
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>transaction</b>&nbsp;&nbsp;<i>?transaction-type?</i>
+&nbsp;&nbsp;<i>script</i>
+</blockquote>
+
+
+<p>
+The <i>transaction-type</i> can be one of <b>deferred</b>,
+<b>exclusive</b> or <b>immediate</b>. The default is deferred.
+</p>
+<a name="cache"></a>
+<h3>The "cache" method</h3>
+
+
+<p>
+The "eval" method described <a href="#eval">above</a> keeps a cache of
+<a href="c3ref/prepare.html">prepared statements</a>
+for recently evaluated SQL commands.
+The "cache" method is used to control this cache.
+The first form of this command is:</p>
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>cache size</b>&nbsp;&nbsp;<i>N</i>
+</blockquote>
+
+<p>This sets the maximum number of statements that can be cached.
+The upper limit is 100. The default is 10. If you set the cache size
+to 0, no caching is done.</p>
+
+<p>The second form of the command is this:</p>
+
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>cache flush</b>
+</blockquote>
+
+<p>The cache-flush method
+<a href="c3ref/finalize.html">finalizes</a>
+all prepared statements currently
+in the cache.</p>
+
+<a name="complete"></a>
+<h3>The "complete" method</h3>
+
+
+<p>
+The "complete" method takes a string of supposed SQL as its only argument.
+It returns TRUE if the string is a complete statement of SQL and FALSE if
+there is more to be entered.</p>
+
+<p>The "complete" method is useful when building interactive applications
+in order to know when the user has finished entering a line of SQL code.
+This is really just an interface to the
+<a href="c3ref/complete.html"><b>sqlite3_complete()</b></a> C
+function.
+<a name="config"></a>
+<h3>The "config" method</h3>
+
+
+<p>
+The "config" method queries or changes certain configuration settings for
+the database connection using the <a href="c3ref/db_config.html">sqlite3_db_config()</a> interface.
+Run this method with no arguments to get a TCL list of available
+configuration settings and their current values:
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>config</b>
+</blockquote>
+
+<p>The above will return something like this:
+
+<blockquote>
+defensive 0 dqs_ddl 1 dqs_dml 1 enable_fkey 0 enable_qpsg 0 enable_trigger 1 enable_view 1 fts3_tokenizer 1 legacy_alter_table 0 legacy_file_format 0 load_extension 0 no_ckpt_on_close 0 reset_database 0 trigger_eqp 0 trusted_schema 1 writable_schema 0
+</blockquote>
+
+<p>Add the name of an individual configuration setting to query the current
+value of that setting. Optionally add a boolean value to change a setting.
+
+<p>
+The following four configuration changes are recommended for maximum
+application security. Turning off the trust_schema setting prevents
+virtual tables and dodgy SQL functions from being used inside of triggers,
+views, CHECK constraints, generated columns, and expression indexes.
+Turning off the dqs_dml and dqs_ddl settings prevents the use of
+double-quoted strings. Turning on defensive prevents direct writes
+to shadow tables.
+
+<blockquote><pre>
+db config trusted_schema 0
+db config defensive 1
+db config dqs_dml 0
+db config dqs_ddl 0
+</pre></blockquote>
+<a name="copy"></a>
+<h3>The "copy" method</h3>
+
+
+<p>
+The "copy" method copies data from a file into a table.
+It returns the number of rows processed successfully from the file.
+The syntax of the copy method looks like this:</p>
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>copy</b>&nbsp;&nbsp;<i>conflict-algorithm</i>
+&nbsp;&nbsp;<i>table-name&nbsp;</i>&nbsp;&nbsp;<i>file-name&nbsp;</i>
+&nbsp;&nbsp;&nbsp;&nbsp;?<i>column-separator</i>?
+&nbsp;&nbsp;?<i>null-indicator</i>?
+</blockquote>
+
+<p>Conflict-algorithm must be one of the SQLite conflict algorithms for
+the INSERT statement: <i>rollback</i>, <i>abort</i>,
+<i>fail</i>,<i>ignore</i>, or <i>replace</i>. See the SQLite Language
+section for <a href="lang.html#conflict">ON CONFLICT</a> for more information.
+The conflict-algorithm must be specified in lower case.
+</p>
+
+<p>Table-name must already exists as a table. File-name must exist, and
+each row must contain the same number of columns as defined in the table.
+If a line in the file contains more or less than the number of columns defined,
+the copy method rollbacks any inserts, and returns an error.</p>
+
+<p>Column-separator is an optional column separator string. The default is
+the ASCII tab character \t. </p>
+
+<p>Null-indicator is an optional string that indicates a column value is null.
+The default is an empty string. Note that column-separator and
+null-indicator are optional positional arguments; if null-indicator
+is specified, a column-separator argument must be specified and
+precede the null-indicator argument.</p>
+
+<p>The copy method implements similar functionality to the <b>.import</b>
+SQLite shell command.
+<a name="timeout"></a>
+<h3>The "timeout" method</h3>
+
+
+<p>The "timeout" method is used to control how long the SQLite library
+will wait for locks to clear before giving up on a database transaction.
+The default timeout is 0 millisecond. (In other words, the default behavior
+is not to wait at all.)</p>
+
+<p>The SQLite database allows multiple simultaneous
+readers or a single writer but not both. If any process is writing to
+the database no other process is allows to read or write. If any process
+is reading the database other processes are allowed to read but not write.
+The entire database shared a single lock.</p>
+
+<p>When SQLite tries to open a database and finds that it is locked, it
+can optionally delay for a short while and try to open the file again.
+This process repeats until the query times out and SQLite returns a
+failure. The timeout is adjustable. It is set to 0 by default so that
+if the database is locked, the SQL statement fails immediately. But you
+can use the "timeout" method to change the timeout value to a positive
+number. For example:</p>
+
+<blockquote><b>db1 timeout 2000</b></blockquote>
+
+<p>The argument to the timeout method is the maximum number of milliseconds
+to wait for the lock to clear. So in the example above, the maximum delay
+would be 2 seconds.</p>
+<a name="busy"></a>
+<h3>The "busy" method</h3>
+
+
+<p>The "busy" method, like "timeout", only comes into play when the
+database is locked. But the "busy" method gives the programmer much more
+control over what action to take. The "busy" method specifies a callback
+Tcl procedure that is invoked whenever SQLite tries to open a locked
+database. A single integer argument is appended to the callback before
+it is invoke. The argument is the number of prior calls to the busy
+callback for the current locking event. It is intended that
+the callback will do some other useful work for a short while
+(such as service GUI events) then return
+so that the lock can be tried again. The callback procedure should
+return "0" if it wants SQLite to try again to open the database and
+should return "1" if it wants SQLite to abandon the current operation.
+<p>
+If the busy method is invoked without an argument, the name of the callback
+procedure last set by the busy method is returned. If no callback procedure
+has been set, an empty string is returned.
+<a name="enable_load_extension"></a>
+<h3>The "enable_load_extension" method</h3>
+
+
+<p>The extension loading mechanism of SQLite (accessed using the
+<a href="lang_corefunc.html#load_extension">load_extension()</a> SQL function) is turned off by default. This is
+a security precaution. If an application wants to make use of the
+<a href="lang_corefunc.html#load_extension">load_extension()</a> function it must first turn the capability on using
+this method.</p>
+
+<p>This method takes a single boolean argument which will turn the
+extension loading functionality on or off.</p>
+
+<p>For best security, do not use this method unless truly needed,
+and run <a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema=OFF</a> or the
+"<a href="#config">db config trusted_schema 0</a>" method <u>before</u>
+invoking this method.
+
+<p>This method maps to the <a href="c3ref/enable_load_extension.html">sqlite3_enable_load_extension()</a> C/C++
+interface.</p>
+<a name="exists"></a>
+<h3>The "exists" method</h3>
+
+
+<p>The "exists" method is similar to "onecolumn" and "eval" in that
+it executes SQL statements. The difference is that the "exists" method
+always returns a boolean value which is TRUE if a query in the SQL
+statement it executes returns one or more rows and FALSE if the SQL
+returns an empty set.</p>
+
+<p>The "exists" method is often used to test for the existence of
+rows in a table. For example:</p>
+
+<blockquote><b>
+if {&#91;db exists {SELECT 1 FROM table1 WHERE user=$user}&#93;} {<br>
+&nbsp;&nbsp;&nbsp;# Processing if $user exists<br>
+} else {<br>
+&nbsp;&nbsp;&nbsp;# Processing if $user does not exist<br>
+}
+</b></blockquote>
+<a name="last_insert_rowid"></a>
+<h3>The "last_insert_rowid" method</h3>
+
+
+<p>The "last_insert_rowid" method returns an integer which is the ROWID
+of the most recently inserted database row.</p>
+<a name="function"></a>
+<h3>The "function" method</h3>
+
+
+<p>The "function" method registers new SQL functions with the SQLite engine.
+The arguments are the name of the new SQL function and a TCL command that
+implements that function. Arguments to the function are appended to the
+TCL command before it is invoked.</p>
+
+<p>
+For security reasons, it is recommended that applications first set
+<a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema=OFF</a> or run the
+"<a href="#config">db config trusted_schema 0</a>"
+method before using this method.</p>
+
+<p>
+The syntax looks like this:
+</p>
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>function</b>
+&nbsp;&nbsp;<i>sql-name</i>
+&nbsp;&nbsp;<i>?options?</i>
+&nbsp;&nbsp;<i>script</i>
+</blockquote>
+
+<p>
+The following example creates a new SQL function named "hex" that converts
+its numeric argument in to a hexadecimal encoded string:
+</p>
+
+<blockquote><b>
+db function hex {format 0x%X}
+</b></blockquote>
+
+<p>The "function" method accepts the following options:
+<blockquote>
+<dl>
+
+<dt><b>-argcount</b> <i>INTEGER</i></dt>
+<dd><p>
+Specify the number of arguments that the SQL function accepts. The default
+value of -1 means any number of arguments.
+
+<dt><b>-deterministic</b>
+<dd><p>
+This option indicates that the function will always return the same
+answer given the same argument values. The SQLite query optimizer
+uses this information to cache answers from function calls with
+constant inputs and reuse the result rather than invoke the function
+repeatedly.
+</dd>
+
+<dt><b>-directonly</b>
+<dd><p>
+This option restricts the function to only be usable by direct
+top-level SQL statement. The function will not be accessible to
+triggers, views, CHECK constraints, generated columns, or index
+expressions. This option is recommended for all application-defined
+SQL functions, and is <u>highly recommended</u> for any SQL
+function that has side effects or that reveals internal state of
+the application.
+
+<p style="background-color:#ffff90;"><b>Security Warning:</b>
+Without this switch, an attacker might be able to change the
+schema of a database file to include the new function inside a trigger
+or view or CHECK constraint and thereby trick the application into
+running the function with parameters of the attacker's choosing.
+Hence, if the new function has side effects or reveals internal
+state about the application and the -directonly option is not
+used, that is a potential security vulnerability.</p>
+</dd>
+
+<dt><b>-innocuous</b>
+<dd><p>
+This option indicates that the function has no side effects and
+does not leak any information that cannot be computed directly
+from its input parameters. When this option is specified, the
+function may be used in triggers, views, CHECK constraints,
+generated columns, and/or index expressions even if
+<a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema=OFF</a>. The use of this option is discouraged
+unless it is truly needed.
+</dd>
+
+<dt><b>-returntype integer|real|text|blob|any</b>
+<dd><p>
+This option is used to configure the type of the result returned by the
+function. If this option is set to "any" (the default), SQLite attempts to
+determine the type of each value returned by the function implementation based
+on the Tcl value's internal type. Or, if it is set to "text" or "blob", the
+returned value is always a text or blob value, respectively. If this option is
+set to "integer", SQLite attempts to coerce the value returned by the function
+to an integer. If this is not possible without data loss, it attempts to coerce
+it to a real value, and finally falls back to text. If this option is set to
+"real", an attempt is made to return a real value, falling back to text if this
+is not possible.
+</dd>
+</dl>
+
+
+
+</blockquote>
+<a name="nullvalue"></a>
+<h3>The "nullvalue" method</h3>
+
+
+<p>
+The "nullvalue" method changes the representation for NULL returned
+as result of the "eval" method.</p>
+
+<blockquote><b>
+db1 nullvalue NULL
+</b></blockquote>
+
+<p>The "nullvalue" method is useful to differ between NULL and empty
+column values as Tcl lacks a NULL representation. The default
+representation for NULL values is an empty string.</p>
+<a name="onecolumn"></a>
+<h3>The "onecolumn" method</h3>
+
+
+<p>The "onecolumn" method works like
+"<a href="#eval">eval</a>" in that it evaluates the
+SQL query statement given as its argument. The difference is that
+"onecolumn" returns a single element which is the first column of the
+first row of the query result.</p>
+
+<p>This is a convenience method. It saves the user from having to
+do a "<tt>&#91;lindex&nbsp;...&nbsp;0&#93;</tt>" on the results of an "eval"
+in order to extract a single column result.</p>
+<a name="changes"></a>
+<h3>The "changes" method</h3>
+
+
+<p>The "changes" method returns an integer which is the number of rows
+in the database that were inserted, deleted, and/or modified by the most
+recent "eval" method.</p>
+<a name="total_changes"></a>
+<h3>The "total_changes" method</h3>
+
+
+<p>The "total_changes" method returns an integer which is the number of rows
+in the database that were inserted, deleted, and/or modified since the
+current database connection was first opened.</p>
+<a name="authorizer"></a>
+<h3>The "authorizer" method</h3>
+
+
+<p>The "authorizer" method provides access to the
+<a href="c3ref/set_authorizer.html">sqlite3_set_authorizer</a>
+C/C++ interface. The argument to authorizer is the name of a procedure that
+is called when SQL statements are being compiled in order to authorize
+certain operations. The callback procedure takes 5 arguments which describe
+the operation being coded. If the callback returns the text string
+"SQLITE_OK", then the operation is allowed. If it returns "SQLITE_IGNORE",
+then the operation is silently disabled. If the return is "SQLITE_DENY"
+then the compilation fails with an error.
+</p>
+
+<p>If the argument is an empty string then the authorizer is disabled.
+If the argument is omitted, then the current authorizer is returned.</p>
+<a name="bind_fallback"></a>
+<h3>The "bind_fallback" method</h3>
+
+
+<p>The "bind_fallback" method gives the application control over how to
+handle parameter binding when no TCL variable matches the parameter name.
+
+<p>When the <a href="#eval">eval method</a> sees a named SQL
+parameter such as "$abc" or ":def" or "@ghi" in an SQL statement, it tries
+to look up a TCL variable with the same name, and it binds the value
+of that TCL variable to the SQL parameter. If no such TCL variable exists,
+the default behavior is to bind an SQL NULL value to the parameter. However,
+if a bind_fallback proc is specified, then that proc is invoked with the
+name of the SQL parameter and the return value from the proc is bound to
+the SQL parameter. Or if the proc returns an error, then the SQL statement
+aborts with that error. If the proc returns with some code other than
+TCL_OK or TCL_ERROR, then the SQL parameter is bound to NULL, as it would
+be by default.
+
+<p>The "bind_fallback" method has a single optional argument. If the argument
+is an empty string, then the bind_fallback is cancelled and the default behavior
+is restored. If the argument is a non-empty string, then the argument is a
+TCL command (usually the name of a proc) to invoke whenever an SQL parameter
+is seen that does not match any TCL variable. If the "bind_fallback" method
+is given no arguments, then the current bind_fallback command is returned.
+
+<p>As an example, the following setup causes TCL to throw an error if
+an SQL statement contains an parameter that does not match any global
+TCL variable:
+
+<blockquote><pre><b>
+proc bind_error {nm} {
+ error "no such variable: $nm"
+}
+db bind_fallback bind_error
+</b></pre></blockquote>
+<a name="progress"></a>
+<h3>The "progress" method</h3>
+
+
+<p>This method registers a callback that is invoked periodically during
+query processing. There are two arguments: the number of SQLite virtual
+machine opcodes between invocations, and the TCL command to invoke.
+Setting the progress callback to an empty string disables it.</p>
+
+<p>The progress callback can be used to display the status of a lengthy
+query or to process GUI events during a lengthy query.</p>
+<a name="collate"></a>
+<h3>The "collate" method</h3>
+
+
+<p>This method registers new text collating sequences. There are
+two arguments: the name of the collating sequence and the name of a
+TCL procedure that implements a comparison function for the collating
+sequence.
+</p>
+
+<p>For example, the following code implements a collating sequence called
+"NOCASE" that sorts in text order without regard to case:
+</p>
+
+<blockquote><pre><b>
+proc nocase_compare {a b} {
+ return &#91;string compare &#91;string tolower $a] &#91;string tolower $b]]
+}
+db collate NOCASE nocase_compare
+</b></pre></blockquote>
+<a name="collation_needed"></a>
+<h3>The "collation_needed" method</h3>
+
+
+<p>This method registers a callback routine that is invoked when the SQLite
+engine needs a particular collating sequence but does not have that
+collating sequence registered. The callback can register the collating
+sequence. The callback is invoked with a single parameter which is the
+name of the needed collating sequence.</p>
+<a name="commit_hook"></a>
+<h3>The "commit_hook" method</h3>
+
+
+<p>This method registers a callback routine that is invoked just before
+SQLite tries to commit changes to a database. If the callback throws
+an exception or returns a non-zero result, then the transaction rolls back
+rather than commit.</p>
+<a name="rollback_hook"></a>
+<h3>The "rollback_hook" method</h3>
+
+
+<p>This method registers a callback routine that is invoked just before
+SQLite tries to do a rollback. The script argument is run without change.</p>
+<a name="status"></a>
+<h3>The "status" method</h3>
+
+<p>This method returns status information from the most recently evaluated
+SQL statement. The status method takes a single argument which should be
+either "steps" or "sorts". If the argument is "steps", then the method
+returns the number of full table scan steps that the previous SQL statement
+evaluated. If the argument is "sorts", the method returns the number of
+sort operations. This information can be used to detect queries that are
+not using indices to speed search or sorting.</p>
+
+<p>The status method is basically a wrapper on the
+<a href="c3ref/stmt_status.html">sqlite3_stmt_status()</a> C-language interface.</p>
+<a name="update_hook"></a>
+<h3>The "update_hook" method</h3>
+
+
+<p>This method registers a callback routine that is invoked just before
+each row is modified by an UPDATE, INSERT, or DELETE statement. Four
+arguments are appended to the callback before it is invoked:</p>
+
+<ul>
+<li>The keyword "INSERT", "UPDATE", or "DELETE", as appropriate</li>
+<li>The name of the database which is being changed</li>
+<li>The table that is being changed</li>
+<li>The rowid of the row in the table being changed</li>
+</ul>
+<a name="wal_hook"></a>
+<h3>The "wal_hook" method</h3>
+
+
+<p>This method registers a callback routine that is invoked after transaction
+commit when the database is in <a href="wal.html">WAL mode</a>. Two arguments are appended to the
+callback command before it is invoked:</p>
+
+<ul>
+<li>The name of the database on which the transaction was committed
+<li>The number of entries in the write-ahead log (WAL) file for that database
+</ul>
+
+<p>This method might decide to run a <a href="wal.html#ckpt">checkpoint</a> either itself or as a
+subsequent idle callback. Note that SQLite only allows a single WAL hook.
+By default this single WAL hook is used for the auto-checkpointing. If you
+set up an explicit WAL hook, then that one WAL hook must ensure that checkpoints
+are occurring since the auto-checkpointing mechanism will be disabled.</p>
+
+<p>This method should return an integer value that is equivalent to an
+SQLite error code (usually 0 for SQLITE_OK in the case of success or 1 for
+SQLITE_ERROR if some error occurs). As in <a href="c3ref/wal_hook.html">sqlite3_wal_hook()</a>, the results of
+returning an integer that does not correspond to an SQLite error code are
+undefined. If the value returned by the script cannot be interpreted as an
+integer value, or if the script throws a Tcl exception, no error is returned to
+SQLite but a Tcl background-error is raised.
+<a name="incrblob"></a>
+<h3>The "incrblob" method</h3>
+
+
+<p>This method opens a TCL channel that can be used to read or write
+into a preexisting BLOB in the database. The syntax is like this:</p>
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>incrblob</b>&nbsp;&nbsp;<b>?-readonly?</b>
+&nbsp;&nbsp;<i>?DB?&nbsp;&nbsp;TABLE&nbsp;&nbsp;COLUMN&nbsp;&nbsp;ROWID</i>
+</blockquote>
+
+<p>
+The command returns a new TCL channel for reading or writing to the BLOB.
+The channel is opened using the underlying
+<a href="c3ref/blob_open.html">sqlite3_blob_open()</a> C-language
+interface. Close the channel using the <b>close</b> command of TCL.
+</p>
+<a name="errorcode"></a>
+<h3>The "errorcode" method</h3>
+
+
+<p>This method returns the numeric error code that resulted from the most
+recent SQLite operation.</p>
+<a name="trace"></a>
+<h3>The "trace" method</h3>
+
+
+<p>The "trace" method registers a callback that is invoked as each SQL
+statement is compiled. The text of the SQL is appended as a single string
+to the command before it is invoked. This can be used (for example) to
+keep a log of all SQL operations that an application performs.
+</p>
+<a name="trace_v2"></a>
+<h3>The "trace_v2" method</h3>
+
+
+<p>The "trace_v2" method registers a callback that is invoked as each SQL
+statement is compiled. The syntax is as follows:
+
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>trace_v2</b>&nbsp;&nbsp;?<i>callback</i>?&nbsp;&nbsp;?<i>mask</i>?
+</blockquote>
+
+<p>This command causes the "callback" script to be invoked whenever
+certain conditions occurs. The conditions are determined by the <i>mask</i>
+argument, which should be a TCL-list of zero or more of the following
+keywords:
+
+<ul>
+<li> <b>statement</b>
+<li> <b>profile</b>
+<li> <b>row</b>
+<li> <b>close</b>
+</ul>
+
+<p>Traces for <b>statement</b> invoke the callback with two arguments
+whenever a new SQL statement is run.
+The first argument is an integer which is the value of the pointer
+to the underlying <a href="c3ref/stmt.html">sqlite3_stmt</a> object. This integer can be used
+to correlate SQL statement text with the result of a <b>profile</b>
+or <b>row</b> callback. The second argument is the
+unexpanded text of the SQL statement being run. By "unexpanded", we
+mean that variable substitutions in the text are not expanded into the
+variable values. This is different from the behavior of the "trace"
+method which does expand variable substitutions.
+
+<p>Traces for <b>profile</b> invoke the callback with two arguments
+as each SQL statement finishes. The first argument is an integer which
+is the value of the underlying <a href="c3ref/stmt.html">sqlite3_stmt</a> object. The second
+argument is the approximate run-time for the statement in nanoseconds.
+The run-time is the best estimate available depending on the capabilities
+of the platform on which the application is running.
+
+<p>Traces for <b>row</b> invoke the callback with a single argument
+whenever a new result row is available from an SQL statement.
+The argument is an integer which is the value of the underlying
+<a href="c3ref/stmt.html">sqlite3_stmt</a> object pointer.
+
+<p>Traces for <b>close</b> invoke the callback with a single argument
+as the database connection is closing. The argument is an integer which
+is the value of a pointer to the underlying <a href="c3ref/sqlite3.html">sqlite3</a> object that is
+closing.
+
+<p>There can only be a single trace callback registered on a database
+connection. Each use of "trace" or "trace_v2" cancels all prior
+trace callback.
+<a name="backup"></a>
+<h3>The "backup" method</h3>
+
+
+<p>The "backup" method makes a backup copy of a live database. The
+command syntax is like this:</p>
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>backup</b>&nbsp;&nbsp;?<i>source-database</i>?&nbsp;&nbsp;<i>backup-filename</i>
+</blockquote>
+
+<p>The optional <i>source-database</i> argument tells which database in
+the current connection should be backed up. The default value is <b>main</b>
+(or, in other words, the primary database file). To back up TEMP tables
+use <b>temp</b>. To backup an auxiliary database added to the connection
+using the <a href="lang_attach.html">ATTACH</a> command, use the name of that database as it was assigned
+in the <a href="lang_attach.html">ATTACH</a> command.</p>
+
+<p>The <i>backup-filename</i> is the name of a file into which the backup is
+written. <i>Backup-filename</i> does not have to exist ahead of time, but if
+it does, it must be a well-formed SQLite database.</p>
+<a name="restore"></a>
+<h3>The "restore" method</h3>
+
+
+<p>The "restore" method copies the content from a separate database file
+into the current database connection, overwriting any preexisting content.
+The command syntax is like this:</p>
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>restore</b>&nbsp;&nbsp;?<i>target-database</i>?&nbsp;&nbsp;<i>source-filename</i>
+</blockquote>
+
+<p>The optional <i>target-database</i> argument tells which database in
+the current connection should be overwritten with new content.
+The default value is <b>main</b>
+(or, in other words, the primary database file). To repopulate the TEMP tables
+use <b>temp</b>. To overwrite an auxiliary database added to the connection
+using the <a href="lang_attach.html">ATTACH</a> command, use the name of that database as it was assigned
+in the <a href="lang_attach.html">ATTACH</a> command.</p>
+
+<p>The <i>source-filename</i> is the name of an existing well-formed SQLite
+database file from which the content is extracted.</p>
+<a name="serialize"></a>
+<h3>The "serialize" method</h3>
+
+
+<p>The "serialize" method creates a BLOB which is a complete copy of an
+underlying database. The syntax is like this:
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>serialize</b>&nbsp;&nbsp;?<i>database</i>?
+</blockquote>
+
+<p>The optional argument is the name of the schema or database to be serialized.
+The default value is "main".
+
+<p>This routine returns a TCL byte-array that is the complete content of
+the identified database. This byte-array can be written into a file and
+then used as an ordinary SQLite database, or it can be sent over a TCP/IP
+connection to some other application, or passed to the "deserialize" method
+of another database connection.
+
+<p>This method only functions if SQLite is compiled with -DSQLITE_ENABLE_DESERIALIZE
+<a name="deserialize"></a>
+<h3>The "deserialize" method</h3>
+
+<p>The "deserialize" method takes a TCL byte-array that contains an SQLite
+database file and adds it to the database connection. The syntax is:
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>deserialize</b>&nbsp;&nbsp;?<i>database</i>?&nbsp;&nbsp;<i>value</i>
+</blockquote>
+
+<p>The option <i>database</i> argument identifies which attached database
+should receive the deserialization. The default is "main".
+
+<p>This command causes SQLite to disconnect from the previous database and
+reattach to an in-memory database with the content in <i>value</i>. If <i>value</i>
+is not a byte-array containing a well-defined SQLite database, then subsequent
+commands will likely return <a href="rescode.html#corrupt">SQLITE_CORRUPT</a> errors.
+
+<p>This method only functions if SQLite is compiled with -DSQLITE_ENABLE_DESERIALIZE
+<a name="interrupt"></a>
+<h3>The "interrupt" method</h3>
+
+<p>The "interrupt" method invokes the <a href="c3ref/interrupt.html">sqlite3_interrupt()</a> interface, causing
+any pending queries to halt.
+<a name="version"></a>
+<h3>The "version" method</h3>
+
+ Return the current library version. For example, "3.23.0".
+<a name="profile"></a>
+<h3>The "profile" method</h3>
+
+<p>This method is used to profile the execution of SQL statements run by
+ the application. The syntax is as follows:
+</p>
+
+<blockquote>
+<i>dbcmd</i>&nbsp;&nbsp;<b>profile</b>&nbsp;&nbsp;?<i>script</i>?
+</blockquote>
+
+<p>Unless <i>script</i> is an empty string, this method arranges for the
+<i>script</i> to be evaluated after the execution of each SQL statement.
+Two arguments are appended to <i>script</i> before it is invoked: the
+text of the SQL statement executed and the time elapsed while executing
+the statement, in nanoseconds.
+</p>
+<p>A database handle may only have a single profile script registered at
+any time. If there is already a script registered when the profile method
+is invoked, the previous profile script is replaced by the new one. If the
+<i>script</i> argument is an empty string, any previously registered
+profile callback is canceled but no new profile script is registered.
+</p>
+<a name="unlock_notify"></a>
+<h3>The "unlock_notify" method</h3>
+
+<p>The unlock_notify method is used access the <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a>
+ interface to the SQLite core library for testing purposes. The use of
+ this method by applications is discouraged.
+</p>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/tclsqlite.in?m=dea4497aa28ca1740">2022-12-14 16:19:41</a> UTC </small></i></p>
+
diff --git a/www/tempfiles.html b/www/tempfiles.html
new file mode 100644
index 0000000..684746f
--- /dev/null
+++ b/www/tempfiles.html
@@ -0,0 +1,880 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Temporary Files Used By SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Temporary Files Used By SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#nine_kinds_of_temporary_files">2. Nine Kinds Of Temporary Files</a></div>
+<div class="fancy-toc2"><a href="#rollback_journals">2.1. Rollback Journals</a></div>
+<div class="fancy-toc2"><a href="#write_ahead_log_wal_files">2.2. Write-Ahead Log (WAL) Files</a></div>
+<div class="fancy-toc2"><a href="#shared_memory_files">2.3. Shared-Memory Files</a></div>
+<div class="fancy-toc2"><a href="#super_journal_files">2.4. Super-Journal Files</a></div>
+<div class="fancy-toc2"><a href="#statement_journal_files">2.5. Statement Journal Files</a></div>
+<div class="fancy-toc2"><a href="#temp_databases">2.6. TEMP Databases</a></div>
+<div class="fancy-toc2"><a href="#materializations_of_views_and_subqueries">2.7. Materializations Of Views And Subqueries</a></div>
+<div class="fancy-toc2"><a href="#transient_indices">2.8. Transient Indices</a></div>
+<div class="fancy-toc2"><a href="#transient_database_used_by_vacuum_">2.9. Transient Database Used By <a href="lang_vacuum.html">VACUUM</a></a></div>
+<div class="fancy-toc1"><a href="#the_sqlite_temp_store_compile_time_parameter_and_pragma">3. The SQLITE_TEMP_STORE Compile-Time Parameter and Pragma</a></div>
+<div class="fancy-toc1"><a href="#other_temporary_file_optimizations">4. Other Temporary File Optimizations</a></div>
+<div class="fancy-toc1"><a href="#temporary_file_storage_locations">5. Temporary File Storage Locations</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>
+One of the <a href="different.html">distinctive features</a> of
+SQLite is that a database consists of a single disk file.
+This simplifies the use of SQLite since moving or backing up a
+database is a simple as copying a single file. It also makes
+SQLite appropriate for use as an
+<a href="whentouse.html#appfileformat">application file format</a>.
+But while a complete database is held in a single disk file,
+SQLite does make use of many temporary files during the
+course of processing a database.
+</p>
+
+<p>
+This article describes the various temporary files that SQLite
+creates and uses. It describes when the files are created, when
+they are deleted, what they are used for, why they are important,
+and how to avoid them on systems where creating temporary files is
+expensive.
+</p>
+
+<p>
+The manner in which SQLite uses temporary files is not considered
+part of the contract that SQLite makes with applications. The
+information in this document is a correct description of how
+SQLite operates at the time that this document was written or last
+updated. But there is no guarantee that future versions of SQLite
+will use temporary files in the same way. New kinds of temporary
+files might be employed and some of
+the current temporary file uses might be discontinued
+in future releases of SQLite.
+</p>
+
+<a name="types"></a>
+
+<h1 id="nine_kinds_of_temporary_files"><span>2. </span>Nine Kinds Of Temporary Files</h1>
+
+<p>
+SQLite currently uses nine distinct types of temporary files:
+</p>
+
+<ol>
+<li>Rollback journals</li>
+<li>Super-journals</li>
+<li>Write-ahead Log (WAL) files</li>
+<li>Shared-memory files</li>
+<li>Statement journals</li>
+<li>TEMP databases</li>
+<li>Materializations of views and subqueries</li>
+<li>Transient indices</li>
+<li>Transient databases used by VACUUM</li>
+</ol>
+
+<p>
+Additional information about each of these temporary file types
+is in the sequel.
+</p>
+
+<a name="rollbackjrnl"></a>
+
+<h2 id="rollback_journals"><span>2.1. </span>Rollback Journals</h2>
+
+<p>
+A rollback journal is a temporary file used to implement
+atomic commit and rollback capabilities in SQLite.
+(For a detailed discussion of how this works, see
+the separate document titled
+<a href="atomiccommit.html">Atomic Commit In SQLite</a>.)
+The rollback journal is always located in the same directory
+as the database file and has the same name as the database
+file except with the 8 characters "<b>-journal</b>" appended.
+The rollback journal is usually created when a transaction
+is first started and is usually deleted when a transaction
+commits or rolls back.
+The rollback journal file is essential for implementing the
+atomic commit and rollback capabilities of SQLite. Without
+a rollback journal, SQLite would be unable to rollback an
+incomplete transaction, and if a crash or power loss occurred
+in the middle of a transaction the entire database would likely
+go corrupt without a rollback journal.
+</p>
+
+<p>
+The rollback journal is <i>usually</i> created and destroyed at the
+start and end of a transaction, respectively. But there are exceptions
+to this rule.
+</p>
+
+<p>
+If a crash or power loss occurs in the middle of a transaction,
+then the rollback journal file is left on disk. The next time
+another application attempts to open the database file, it notices
+the presence of the abandoned rollback journal (we call it a "hot
+journal" in this circumstance) and uses the information in the
+journal to restore the database to its state prior to the start
+of the incomplete transaction. This is how SQLite implements
+atomic commit.
+</p>
+
+<p>
+If an application puts SQLite in
+<a href="pragma.html#pragma_locking_mode">exclusive locking mode</a> using
+the pragma:
+</p>
+
+<blockquote><pre>
+PRAGMA locking_mode=EXCLUSIVE;
+</pre></blockquote>
+
+<p>
+SQLite creates a new rollback journal at the start of the first
+transaction within an exclusive locking mode session. But at the
+conclusion of the transaction, it does not delete the rollback
+journal. The rollback journal might be truncated, or its header
+might be zeroed (depending on what version of SQLite you are using)
+but the rollback journal is not deleted. The rollback journal is
+not deleted until exclusive access mode is exited.</p>
+
+<p>
+Rollback journal creation and deletion is also changed by the
+<a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>.
+The default journaling mode is DELETE, which is the default behavior
+of deleting the rollback journal file at the end of each transaction,
+as described above. The PERSIST journal mode foregoes the deletion of
+the journal file and instead overwrites the rollback journal header
+with zeros, which prevents other processes from rolling back the
+journal and thus has the same effect as deleting the journal file, though
+without the expense of actually removing the file from disk. In other
+words, journal mode PERSIST exhibits the same behavior as is seen
+in EXCLUSIVE locking mode. The
+OFF journal mode causes SQLite to omit the rollback journal, completely.
+In other words, no rollback journal is ever written if journal mode is
+set to OFF.
+The OFF journal mode disables the atomic
+commit and rollback capabilities of SQLite. The ROLLBACK command
+is not available when OFF journal mode is set. And if a crash or power
+loss occurs in the middle of a transaction that uses the OFF journal
+mode, no recovery is possible and the database file will likely
+go corrupt.
+The MEMORY journal mode causes the rollback journal to be stored in
+memory rather than on disk. The ROLLBACK command still works when
+the journal mode is MEMORY, but because no file exists on disks for
+recovery, a crash or power loss in the middle of a transaction that uses
+the MEMORY journal mode will likely result in a corrupt database.
+</p>
+
+<a name="walfile"></a>
+
+<h2 id="write_ahead_log_wal_files"><span>2.2. </span>Write-Ahead Log (WAL) Files</h2>
+
+<p>
+A write-ahead log or WAL file is used in place of a rollback journal
+when SQLite is operating in <a href="wal.html">WAL mode</a>. As with the rollback journal,
+the purpose of the WAL file is to implement atomic commit and rollback.
+The WAL file is always located in the same directory
+as the database file and has the same name as the database
+file except with the 4 characters "<b>-wal</b>" appended.
+The WAL file is created when the first connection to the
+database is opened and is normally removed when the last
+connection to the database closes. However, if the last connection
+does not shutdown cleanly, the WAL file will remain in the filesystem
+and will be automatically cleaned up the next time the database is
+opened.
+</p>
+
+<a name="shmfile"></a>
+
+<h2 id="shared_memory_files"><span>2.3. </span>Shared-Memory Files</h2>
+
+<p>
+When operating in <a href="wal.html">WAL mode</a>, all SQLite database connections associated
+with the same database file need to share some memory that is used as an
+index for the WAL file. In most implementations, this shared memory is
+implemented by calling mmap() on a file created for this sole purpose:
+the shared-memory file. The shared-memory file, if it exists, is located
+in the same directory as the database file and has the same name as the
+database file except with the 4 characters "<b>-shm</b>" appended.
+Shared memory files only exist while running in WAL mode.
+</p>
+
+<p>
+The shared-memory file contains no persistent content. The only purpose
+of the shared-memory file is to provide a block of shared memory for use
+by multiple processes all accessing the same database in WAL mode.
+If the <a href="vfs.html">VFS</a> is able to provide an alternative method for accessing shared
+memory, then that alternative method might be used rather than the
+shared-memory file. For example, if <a href="pragma.html#pragma_locking_mode">PRAGMA locking_mode</a> is set to
+EXCLUSIVE (meaning that only one process is able to access the database
+file) then the shared memory will be allocated from heap rather than out
+of the shared-memory file, and the shared-memory file will never be
+created.
+</p>
+
+<p>
+The shared-memory file has the same lifetime as its associated WAL file.
+The shared-memory file is created when the WAL file is created and is
+deleted when the WAL file is deleted. During WAL file recovery, the
+shared memory file is recreated from scratch based on the contents of
+the WAL file being recovered.
+</p>
+
+<a name="superjrnl"></a>
+
+<h2 id="super_journal_files"><span>2.4. </span>Super-Journal Files</h2>
+
+<p>
+The super-journal file is used as part of the atomic commit
+process when a single transaction makes changes to multiple
+databases that have been added to a single <a href="c3ref/sqlite3.html">database connection</a>
+using the <a href="lang_attach.html">ATTACH</a> statement. The super-journal file is always
+located in the same directory as the main database file
+(the main database file is the database that is identified
+in the original <a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/open.html">sqlite3_open16()</a>, or
+<a href="c3ref/open.html">sqlite3_open_v2()</a> call that created the <a href="c3ref/sqlite3.html">database connection</a>)
+with a randomized suffix. The super-journal file contains
+the names of all of the various attached auxiliary databases
+that were changed during the transaction. The multi-database
+transaction commits when the super-journal file is deleted.
+See the documentation titled
+<a href="atomiccommit.html">Atomic Commit In SQLite</a> for
+additional detail.
+</p>
+
+<p>
+Without the super-journal, the transaction commit on a multi-database
+transaction would be atomic for each database individually, but it
+would not be atomic across all databases. In other words, if the
+commit were interrupted in the middle by a crash or power loss, then
+the changes to one of the databases might complete while the changes
+to another database might roll back. The super-journal causes all
+changes in all databases to either rollback or commit together.
+</p>
+
+<p>
+The super-journal file is only created for <a href="lang_transaction.html">COMMIT</a> operations that
+involve multiple database files where at least two of the databases
+meet all of the following requirements:
+
+</p><ol>
+<li>The database is modified by the transaction
+</li><li>The <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting is not OFF
+</li><li>The <a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode</a> is not OFF, MEMORY, or WAL
+</li></ol>
+
+<p>
+This means that SQLite transactions are not atomic
+across multiple database files on a power-loss when the database
+files have synchronous turned off or when they are using journal
+modes of OFF, MEMORY, or WAL. For synchronous OFF and for
+journal_modes OFF and MEMORY, database will usually corrupt if
+a transaction commit is interrupted by a power loss. For
+<a href="wal.html">WAL mode</a>, individual database files are updated atomically
+across a power-loss, but in the case of a multi-file transactions,
+some files might rollback while others roll forward after
+power is restored.
+</p>
+
+
+<a name="stmtjrnl"></a>
+
+<h2 id="statement_journal_files"><span>2.5. </span>Statement Journal Files</h2>
+
+<p>
+A statement journal file is used to rollback partial results of
+a single statement within a larger transaction. For example, suppose
+an UPDATE statement will attempt to modify 100 rows in the database.
+But after modifying the first 50 rows, the UPDATE hits
+a constraint violation which should block the entire statement.
+The statement journal is used to undo the first 50 row changes
+so that the database is restored to the state it was in at the start
+of the statement.
+</p>
+
+<p>
+A statement journal is only created for an UPDATE or INSERT statement
+that might change multiple rows of a database and which might hit a
+constraint or a RAISE exception within a trigger and thus need to
+undo partial results.
+If the UPDATE or INSERT is not contained within BEGIN...COMMIT and if
+there are no other active statements on the same database connection then
+no statement journal is created since the ordinary
+rollback journal can be used instead.
+The statement journal is also omitted if an alternative
+<a href="lang_conflict.html">conflict resolution algorithm</a> is
+used. For example:
+</p>
+
+<blockquote><pre>
+UPDATE OR FAIL ...
+UPDATE OR IGNORE ...
+UPDATE OR REPLACE ...
+UPDATE OR ROLLBACK ...
+INSERT OR FAIL ...
+INSERT OR IGNORE ...
+INSERT OR REPLACE ...
+INSERT OR ROLLBACK ...
+REPLACE INTO ....
+</pre></blockquote>
+
+<p>
+The statement journal is given a randomized name, not necessarily
+in the same directory as the main database, and is automatically
+deleted at the conclusion of the transaction. The size of the
+statement journal is proportional to the size of the change implemented
+by the UPDATE or INSERT statement that caused the statement journal
+to be created.
+</p>
+
+<a name="tempdb"></a>
+
+<h2 id="temp_databases"><span>2.6. </span>TEMP Databases</h2>
+
+<p>Tables created using the "CREATE TEMP TABLE" syntax are only
+visible to the <a href="c3ref/sqlite3.html">database connection</a> in which the "CREATE TEMP TABLE"
+statement is originally evaluated. These TEMP tables, together
+with any associated indices, triggers, and views, are collectively
+stored in a separate temporary database file that is created as
+soon as the first "CREATE TEMP TABLE" statement is seen.
+This separate temporary database file also has an associated
+rollback journal.
+The temporary database file used to store TEMP tables is deleted
+automatically when the <a href="c3ref/sqlite3.html">database connection</a> is closed
+using <a href="c3ref/close.html">sqlite3_close()</a>.
+</p>
+
+<p>
+The TEMP database file is very similar to auxiliary database
+files added using the <a href="lang_attach.html">ATTACH</a> statement, though with a few
+special properties.
+The TEMP database is always automatically deleted when the
+<a href="c3ref/sqlite3.html">database connection</a> is closed.
+The TEMP database always uses the
+<a href="pragma.html#pragma_synchronous">synchronous=OFF</a> and <a href="pragma.html#pragma_journal_mode">journal_mode=PERSIST</a>
+PRAGMA settings.
+And, the TEMP database cannot be used with <a href="lang_detach.html">DETACH</a> nor can
+another process <a href="lang_attach.html">ATTACH</a> the TEMP database.
+</p>
+
+<p>
+The temporary files associated with the TEMP database and its
+rollback journal are only created if the application makes use
+of the "CREATE TEMP TABLE" statement.
+</p>
+
+<a name="views"></a>
+
+<h2 id="materializations_of_views_and_subqueries"><span>2.7. </span>Materializations Of Views And Subqueries</h2>
+
+<p>Queries that contain subqueries must sometime evaluate
+the subqueries separately and store the results in a temporary
+table, then use the content of the temporary table to evaluate
+the outer query.
+We call this "materializing" the subquery.
+The query optimizer in SQLite attempts to avoid materializing,
+but sometimes it is not easily avoidable.
+The temporary tables created by materialization are each stored
+in their own separate temporary file, which is automatically
+deleted at the conclusion of the query.
+The size of these temporary tables depends on the amount of
+data in the materialization of the subquery, of course.
+</p>
+
+<p>
+A subquery on the right-hand side of IN operator must often
+be materialized. For example:
+</p>
+
+<blockquote><pre>
+SELECT * FROM ex1 WHERE ex1.a IN (SELECT b FROM ex2);
+</pre></blockquote>
+
+<p>
+In the query above, the subquery "SELECT b FROM ex2" is evaluated
+and its results are stored in a temporary table (actually a temporary
+index) that allows one to determine whether or not a value ex2.b
+exists using a simple binary search. Once this table is constructed,
+the outer query is run and for each prospective result row a check
+is made to see if ex1.a is contained within the temporary table.
+The row is output only if the check is true.
+</p>
+
+<p>
+To avoid creating the temporary table, the query might be rewritten
+as follows:
+</p>
+
+<blockquote><pre>
+SELECT * FROM ex1 WHERE EXISTS(SELECT 1 FROM ex2 WHERE ex2.b=ex1.a);
+</pre></blockquote>
+
+<p>
+Recent versions of SQLite (<a href="releaselog/3_5_4.html">version 3.5.4</a> 2007-12-14) and later)
+will do this rewrite automatically
+if an index exists on the column ex2.b.
+</p>
+
+<p>
+If the right-hand side of an IN operator can be list of values
+as in the following:
+</p>
+<blockquote><pre>
+SELECT * FROM ex1 WHERE a IN (1,2,3);
+</pre></blockquote>
+<p>
+List values on the right-hand side of IN are treated as a
+subquery that must be materialized. In other words, the
+previous statement acts as if it were:
+</p>
+<blockquote><pre>
+SELECT * FROM ex1 WHERE a IN (SELECT 1 UNION ALL
+ SELECT 2 UNION ALL
+ SELECT 3);
+</pre></blockquote>
+<p>
+A temporary index is always used to hold the values of the
+right-hand side of an IN operator when that right-hand side
+is a list of values.
+</p>
+
+<p>
+Subqueries might also need to be materialized when they appear
+in the FROM clause of a SELECT statement. For example:
+</p>
+
+<blockquote><pre>
+SELECT * FROM ex1 JOIN (SELECT b FROM ex2) AS t ON t.b=ex1.a;
+</pre></blockquote>
+
+<p>
+Depending on the query, SQLite might need to materialize the
+"(SELECT b FROM ex2)" subquery into a temporary table, then
+perform the join between ex1 and the temporary table. The
+query optimizer tries to avoid this by "flattening" the
+query. In the previous example the query can be flattened,
+and SQLite will automatically transform the query into
+</p>
+
+<blockquote><pre>
+SELECT ex1.*, ex2.b FROM ex1 JOIN ex2 ON ex2.b=ex1.a;
+</pre></blockquote>
+
+<p>
+More complex queries may or may not be able to employ query
+flattening to avoid the temporary table. Whether or not
+the query can be flattened depends on such factors as whether
+or not the subquery or outer query contain aggregate functions,
+ORDER BY or GROUP BY clauses, LIMIT clauses, and so forth.
+The rules for when a query can and cannot be flattened are
+very complex and are beyond the scope of this document.
+</p>
+
+<a name="transidx"></a>
+
+<h2 id="transient_indices"><span>2.8. </span>Transient Indices</h2>
+
+<p>
+SQLite may make use of transient indices to
+implement SQL language features such as:
+</p>
+
+<ul>
+<li>An ORDER BY or GROUP BY clause</li>
+<li>The DISTINCT keyword in an aggregate query</li>
+<li>Compound SELECT statements joined by UNION, EXCEPT, or INTERSECT</li>
+</ul>
+
+<p>
+Each transient index is stored in its own temporary file.
+The temporary file for a transient index is automatically deleted
+at the end of the statement that uses it.
+</p>
+
+<p>
+SQLite strives to implement ORDER BY clauses using a preexisting
+index. If an appropriate index already exists, SQLite will walk
+the index, rather than the underlying table, to extract the
+requested information, and thus cause the rows to come out in
+the desired order. But if SQLite cannot find an appropriate index
+it will evaluate the query and store each row in a transient index
+whose data is the row data and whose key is the ORDER BY terms.
+After the query is evaluated, SQLite goes back and walks the
+transient index from beginning to end in order to output the
+rows in the desired order.
+</p>
+
+<p>
+SQLite implements GROUP BY by ordering the output rows in the
+order suggested by the GROUP BY terms. Each output row is
+compared to the previous to see if it starts a new "group".
+The ordering by GROUP BY terms is done in exactly the same way
+as the ordering by ORDER BY terms. A preexisting index is used
+if possible, but if no suitable index is available, a transient
+index is created.
+</p>
+
+<p>
+The DISTINCT keyword on an aggregate query is implemented by
+creating a transient index in a temporary file and storing
+each result row in that index. As new result rows are computed
+a check is made to see if they already exist in the transient
+index and if they do the new result row is discarded.
+</p>
+
+<p>
+The UNION operator for compound queries is implemented by creating
+a transient index in a temporary file and storing the results
+of the left and right subquery in the transient index, discarding
+duplicates. After both subqueries have been evaluated, the
+transient index is walked from beginning to end to generate the final output.
+</p>
+
+<p>
+The EXCEPT operator for compound queries is implemented by creating
+a transient index in a temporary file, storing the results of the
+left subquery in this transient index, then removing the result
+from right subquery from the transient index, and finally walking
+the index from beginning to end to obtain the final output.
+</p>
+
+<p>
+The INTERSECT operator for compound queries is implemented by
+creating two separate transient indices, each in a separate
+temporary file. The left and right subqueries are evaluated
+each into a separate transient index. Then the two indices
+are walked together and entries that appear in both indices
+are output.
+</p>
+
+<p>
+Note that the UNION ALL operator for compound queries does not
+use transient indices by itself (though of course the right
+and left subqueries of the UNION ALL might use transient indices
+depending on how they are composed.)
+
+<a name="vacuumdb"></a>
+
+</p><h2 id="transient_database_used_by_vacuum_"><span>2.9. </span>Transient Database Used By <a href="lang_vacuum.html">VACUUM</a></h2>
+
+<p>
+The <a href="lang_vacuum.html">VACUUM</a> command works by creating a temporary file
+and then rebuilding the entire database into that temporary
+file. Then the content of the temporary file is copied back
+into the original database file and the temporary file is
+deleted.
+</p>
+
+<p>
+The temporary file created by the <a href="lang_vacuum.html">VACUUM</a> command exists only
+for the duration of the command itself. The size of the temporary
+file will be no larger than the original database.
+</p>
+
+<a name="tempstore"></a>
+
+<h1 id="the_sqlite_temp_store_compile_time_parameter_and_pragma"><span>3. </span>The SQLITE_TEMP_STORE Compile-Time Parameter and Pragma</h1>
+
+<p>
+The temporary files associated with transaction control, namely
+the rollback journal, super-journal, write-ahead log (WAL) files,
+and shared-memory files, are always written to disk.
+But the other kinds of temporary files might be stored in memory
+only and never written to disk.
+Whether or not temporary files other than the rollback,
+super, and statement journals are written to disk or stored only in memory
+depends on the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter, the
+<a href="pragma.html#pragma_temp_store">temp_store pragma</a>,
+and on the size of the temporary file.
+</p>
+
+<p>
+The <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter is a #define whose value is
+an integer between 0 and 3, inclusive. The meaning of the
+<a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter is as follows:
+</p>
+
+<ol type="1">
+<li value="0">
+Temporary files are always stored on disk regardless of the setting
+of the <a href="pragma.html#pragma_temp_store">temp_store pragma</a>.
+</li>
+<li value="1">
+Temporary files are stored on disk by default but this can be
+overridden by the <a href="pragma.html#pragma_temp_store">temp_store pragma</a>.
+</li>
+<li value="2">
+Temporary files are stored in memory by default but this can be
+overridden by the <a href="pragma.html#pragma_temp_store">temp_store pragma</a>.
+</li>
+<li value="3">
+Temporary files are always stored in memory regardless of the setting
+of the <a href="pragma.html#pragma_temp_store">temp_store pragma</a>.
+</li>
+</ol>
+
+<p>
+The default value of the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter is 1,
+which means to store temporary files on disk but provide the option
+of overriding the behavior using the <a href="pragma.html#pragma_temp_store">temp_store pragma</a>.
+</p>
+
+<p>
+The <a href="pragma.html#pragma_temp_store">temp_store pragma</a> has
+an integer value which also influences the decision of where to store
+temporary files. The values of the temp_store pragma have the
+following meanings:
+</p>
+
+<ol type="1">
+<li value="0">
+Use either disk or memory storage for temporary files as determined
+by the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter.
+</li>
+<li value="1">
+If the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter specifies memory storage for
+temporary files, then override that decision and use disk storage instead.
+Otherwise follow the recommendation of the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time
+parameter.
+</li>
+<li value="2">
+If the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter specifies disk storage for
+temporary files, then override that decision and use memory storage instead.
+Otherwise follow the recommendation of the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time
+parameter.
+</li>
+</ol>
+
+<p>
+The default setting for the <a href="pragma.html#pragma_temp_store">temp_store pragma</a> is 0,
+which means to following the recommendation of <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time
+parameter.
+</p>
+
+<p>
+To reiterate, the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter and the
+<a href="pragma.html#pragma_temp_store">temp_store pragma</a> only
+influence the temporary files other than the rollback journal
+and the super-journal. The rollback journal and the
+super-journal are always written to disk regardless of the settings of
+the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter and the
+<a href="pragma.html#pragma_temp_store">temp_store pragma</a>.
+</p>
+
+<a name="otheropt"></a>
+
+<h1 id="other_temporary_file_optimizations"><span>4. </span>Other Temporary File Optimizations</h1>
+
+<p>
+SQLite uses a page cache of recently read and written database
+pages. This page cache is used not just for the main database
+file but also for transient indices and tables stored in temporary
+files. If SQLite needs to use a temporary index or table and
+the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> compile-time parameter and the
+<a href="pragma.html#pragma_temp_store">temp_store pragma</a> are
+set to store temporary tables and index on disk, the information
+is still initially stored in memory in the page cache. The
+temporary file is not opened and the information is not truly
+written to disk until the page cache is full.
+</p>
+
+<p>
+This means that for many common cases where the temporary tables
+and indices are small (small enough to fit into the page cache)
+no temporary files are created and no disk I/O occurs. Only
+when the temporary data becomes too large to fit in RAM does
+the information spill to disk.
+</p>
+
+<p>
+Each temporary table and index is given its own page cache
+which can store a maximum number of database pages determined
+by the SQLITE_DEFAULT_TEMP_CACHE_SIZE compile-time parameter.
+(The default value is 500 pages.)
+The maximum number of database pages in the page cache is the
+same for every temporary table and index. The value cannot
+be changed at run-time or on a per-table or per-index basis.
+Each temporary file gets its own private page cache with its
+own SQLITE_DEFAULT_TEMP_CACHE_SIZE page limit.
+</p>
+
+<a name="tempdir"></a>
+
+<h1 id="temporary_file_storage_locations"><span>5. </span>Temporary File Storage Locations</h1>
+
+<p>
+The directory or folder in which temporary files are created is
+determined by the OS-specific <a href="vfs.html">VFS</a>.
+
+</p><p>
+On unix-like systems, directories are searched in the following order:
+</p><ol>
+<li>The directory set by <a href="pragma.html#pragma_temp_store_directory">PRAGMA temp_store_directory</a> or by the
+ <a href="c3ref/temp_directory.html">sqlite3_temp_directory</a> global variable
+</li><li>The SQLITE_TMPDIR environment variable
+</li><li>The TMPDIR environment variable
+</li><li>/var/tmp
+</li><li>/usr/tmp
+</li><li>/tmp
+</li><li>The current working directory (".")
+</li></ol>
+The first of the above that is found to exist and have the write and
+execute bits set is used. The final "." fallback is important for some
+applications that use SQLite inside of chroot jails that do not have
+the standard temporary file locations available.
+
+<p>
+On Windows systems, folders are searched in the following order:
+</p><ol>
+<li>The folder set by <a href="pragma.html#pragma_temp_store_directory">PRAGMA temp_store_directory</a> or by the
+ <a href="c3ref/temp_directory.html">sqlite3_temp_directory</a> global variable
+</li><li>The folder returned by the GetTempPath() system interface.
+</li></ol>
+SQLite itself does not pay any attention to environment variables
+in this case, though presumably the GetTempPath() system call does.
+The search algorithm is different for CYGWIN builds. Check the
+source code for details.
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/tempfiles.in?m=cd7bffb03130e7094">2020-08-16 11:16:26</a> UTC </small></i></p>
+
diff --git a/www/testing.html b/www/testing.html
new file mode 100644
index 0000000..18ef6ff
--- /dev/null
+++ b/www/testing.html
@@ -0,0 +1,1277 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>How SQLite Is Tested</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+How SQLite Is Tested
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc2"><a href="#executive_summary">1.1. Executive Summary</a></div>
+<div class="fancy-toc1"><a href="#test_harnesses">2. Test Harnesses</a></div>
+<div class="fancy-toc1"><a href="#anomaly_testing">3. Anomaly Testing</a></div>
+<div class="fancy-toc2"><a href="#out_of_memory_testing">3.1. Out-Of-Memory Testing</a></div>
+<div class="fancy-toc2"><a href="#i_o_error_testing">3.2. I/O Error Testing</a></div>
+<div class="fancy-toc2"><a href="#crash_testing">3.3. Crash Testing</a></div>
+<div class="fancy-toc2"><a href="#compound_failure_tests">3.4. Compound failure tests</a></div>
+<div class="fancy-toc1"><a href="#fuzz_testing">4. Fuzz Testing</a></div>
+<div class="fancy-toc2"><a href="#sql_fuzz">4.1. SQL Fuzz</a></div>
+<div class="fancy-toc3"><a href="#sql_fuzz_using_the_american_fuzzy_lop_fuzzer">4.1.1. SQL Fuzz Using The American Fuzzy Lop Fuzzer</a></div>
+<div class="fancy-toc3"><a href="#google_oss_fuzz">4.1.2. Google OSS Fuzz</a></div>
+<div class="fancy-toc3"><a href="#the_dbsqlfuzz_fuzzer">4.1.3. The dbsqlfuzz fuzzer</a></div>
+<div class="fancy-toc3"><a href="#other_third_party_fuzzers">4.1.4. Other third-party fuzzers</a></div>
+<div class="fancy-toc3"><a href="#the_fuzzcheck_test_harness">4.1.5. The fuzzcheck test harness</a></div>
+<div class="fancy-toc3"><a href="#tension_between_fuzz_testing_and_100_mc_dc_testing">4.1.6. Tension Between Fuzz Testing And 100% MC/DC Testing</a></div>
+<div class="fancy-toc2"><a href="#malformed_database_files">4.2. Malformed Database Files</a></div>
+<div class="fancy-toc2"><a href="#boundary_value_tests">4.3. Boundary Value Tests</a></div>
+<div class="fancy-toc1"><a href="#regression_testing">5. Regression Testing</a></div>
+<div class="fancy-toc1"><a href="#automatic_resource_leak_detection">6. Automatic Resource Leak Detection</a></div>
+<div class="fancy-toc1"><a href="#test_coverage">7. Test Coverage</a></div>
+<div class="fancy-toc2"><a href="#statement_versus_branch_coverage">7.1. Statement versus branch coverage</a></div>
+<div class="fancy-toc2"><a href="#coverage_testing_of_defensive_code">7.2. Coverage testing of defensive code</a></div>
+<div class="fancy-toc2"><a href="#forcing_coverage_of_boundary_values_and_boolean_vector_tests">7.3. Forcing coverage of boundary values and boolean vector tests</a></div>
+<div class="fancy-toc2"><a href="#branch_coverage_versus_mc_dc">7.4. Branch coverage versus MC/DC</a></div>
+<div class="fancy-toc2"><a href="#measuring_branch_coverage">7.5. Measuring branch coverage</a></div>
+<div class="fancy-toc2"><a href="#mutation_testing">7.6. Mutation testing</a></div>
+<div class="fancy-toc2"><a href="#experience_with_full_test_coverage">7.7. Experience with full test coverage</a></div>
+<div class="fancy-toc1"><a href="#dynamic_analysis">8. Dynamic Analysis</a></div>
+<div class="fancy-toc2"><a href="#assert">8.1. Assert</a></div>
+<div class="fancy-toc2"><a href="#valgrind">8.2. Valgrind</a></div>
+<div class="fancy-toc2"><a href="#memsys2">8.3. Memsys2</a></div>
+<div class="fancy-toc2"><a href="#mutex_asserts">8.4. Mutex Asserts</a></div>
+<div class="fancy-toc2"><a href="#journal_tests">8.5. Journal Tests</a></div>
+<div class="fancy-toc2"><a href="#undefined_behavior_checks">8.6. Undefined Behavior Checks</a></div>
+<div class="fancy-toc1"><a href="#disabled_optimization_tests">9. Disabled Optimization Tests</a></div>
+<div class="fancy-toc1"><a href="#checklists">10. Checklists</a></div>
+<div class="fancy-toc1"><a href="#static_analysis">11. Static Analysis</a></div>
+<div class="fancy-toc1"><a href="#summary">12. Summary</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>The reliability and robustness of SQLite is achieved in part
+by thorough and careful testing.</p>
+
+<p>As of <a href="releaselog/3_39_0.html">version 3.39.0</a> (2022-06-25),
+the SQLite library consists of approximately
+151.3 KSLOC of C code.
+(KSLOC means thousands of "Source Lines Of Code" or, in other words,
+lines of code excluding blank lines and comments.)
+By comparison, the project has
+608 times as much
+test code and test scripts -
+92038.3 KSLOC.</p>
+
+<h2 id="executive_summary"><span>1.1. </span>Executive Summary</h2>
+
+<ul>
+<li> Four independently developed test harnesses
+</li><li> 100% branch test coverage in an as-deployed configuration
+</li><li> Millions and millions of test cases
+</li><li> Out-of-memory tests
+</li><li> I/O error tests
+</li><li> Crash and power loss tests
+</li><li> Fuzz tests
+</li><li> Boundary value tests
+</li><li> Disabled optimization tests
+</li><li> Regression tests
+</li><li> Malformed database tests
+</li><li> Extensive use of assert() and run-time checks
+</li><li> Valgrind analysis
+</li><li> Undefined behavior checks
+</li><li> Checklists
+</li></ul>
+
+<a name="harnesses"></a>
+
+<h1 id="test_harnesses"><span>2. </span>Test Harnesses</h1>
+
+<p>There are four independent test harnesses used for testing the
+core SQLite library.
+Each test harness is designed, maintained, and managed separately
+from the others.
+</p>
+
+<ol>
+<li><p>
+<a name="tcl"></a>
+
+The <b>TCL Tests</b> are the original tests for SQLite.
+They are contained in the same source tree as the
+SQLite core and like the SQLite core are in the public domain. The
+TCL tests are the primary tests used during development.
+The TCL tests are written using the
+<a href="http://www.tcl-lang.org/">TCL scripting language</a>.
+The TCL test harness itself consists of 27.7 KSLOC
+of C code used to create the TCL interface. The test scripts are contained
+in 1343 files totaling
+23.5MB in size. There are
+50240 distinct test cases, but many of the test
+cases are parameterized and run multiple times (with different parameters)
+so that on a full test run millions of
+separate tests are performed.
+</p>
+</li>
+
+<li><p>
+The <b><a href="th3.html">TH3</a></b> test harness is a set of proprietary tests, written in
+C that provide 100% branch test coverage
+(and <a href="testing.html#mcdc">100% MC/DC test coverage</a>) to
+the core SQLite library. The TH3 tests are designed to run
+on embedded and specialized platforms that would not easily support
+TCL or other workstation services. TH3 tests use only the published
+SQLite interfaces. TH3 consists of about
+75.7 MB or 1038.0 KSLOC
+of C code implementing 49116 distinct test cases.
+TH3 tests are heavily parameterized, though, so a full-coverage test runs
+about 2.3 million different test
+instances. The cases that provide 100% branch test coverage constitute
+a subset of the total TH3 test suite. A soak test
+prior to release does hundreds of millions of tests.
+Additional information on TH3 is <a href="th3.html">available separately</a>.</p></li>
+
+<li><p>
+<a name="slt"></a>
+
+The <a href="http://www.sqlite.org/sqllogictest"><b>SQL Logic Test</b></a>
+or SLT test harness is used to run huge numbers
+of SQL statements against both SQLite and several other SQL database engines
+and verify that they all get the same answers. SLT currently compares
+SQLite against PostgreSQL, MySQL, Microsoft SQL Server, and Oracle 10g.
+SLT runs 7.2 million queries comprising
+1.12GB of test data.
+</p></li>
+
+<li><p>
+The <a href="#dbsqlfuzz"><b>dbsqlfuzz</b></a> engine is a
+proprietary fuzz tester. Other <a href="testing.html#fuzztesting">fuzzers for SQLite</a>
+mutate either the SQL inputs or the database file. Dbsqlfuzz mutates
+both the SQL and the database file at the same time, and is thus able
+to reach new error states. Dbsqlfuzz is built using the
+<a href="http://llvm.org/docs/LibFuzzer.html">libFuzzer</a> framework of LLVM
+with a custom mutator. There are
+303 seed files. The dbsqlfuzz fuzzer
+runs about one billion test mutations per day.
+Dbsqlfuzz helps ensure
+that SQLite is robust against attack via malicious SQL or database
+inputs.
+</p></li></ol>
+
+<p>In addition to the four main test harnesses, there several other
+small programs that implement specialized tests.
+</p><ol>
+<li value="5">The "speedtest1.c" program
+estimates the performance of SQLite under a typical workload.
+</li><li>The "mptester.c" program is a stress test for multiple processes
+concurrently reading and writing a single database.
+</li><li>The "threadtest3.c" program is a stress test for multiple threads using
+SQLite simultaneously.
+</li><li>The "fuzzershell.c" program is used to
+run some <a href="#fuzztesting">fuzz tests</a>.
+</li></ol>
+
+
+<p>All of the tests above must run successfully, on multiple platforms
+and under multiple compile-time configurations,
+before each release of SQLite.</p>
+
+<p>Prior to each check-in to the SQLite source tree, developers
+typically run a subset (called "veryquick") of the Tcl tests
+consisting of about
+300.2 thousand test cases.
+The veryquick tests include most tests other than the anomaly, fuzz, and
+soak tests. The idea behind the veryquick tests are that they are
+sufficient to catch most errors, but also run in only a few minutes
+instead of a few hours.</p>
+
+<a name="anomaly"></a>
+
+<h1 id="anomaly_testing"><span>3. </span>Anomaly Testing</h1>
+
+<p>Anomaly tests are tests designed to verify the correct behavior
+of SQLite when something goes wrong. It is (relatively) easy to build
+an SQL database engine that behaves correctly on well-formed inputs
+on a fully functional computer. It is more difficult to build a system
+that responds sanely to invalid inputs and continues to function following
+system malfunctions. The anomaly tests are designed to verify the latter
+behavior.</p>
+
+<a name="oomtesting"></a>
+
+<h2 id="out_of_memory_testing"><span>3.1. </span>Out-Of-Memory Testing</h2>
+
+<p>SQLite, like all SQL database engines, makes extensive use of
+malloc() (See the separate report on
+<a href="malloc.html">dynamic memory allocation in SQLite</a> for
+additional detail.)
+On servers and workstations, malloc() never fails in practice and so correct
+handling of out-of-memory (OOM) errors is not particularly important.
+But on embedded devices, OOM errors are frighteningly common and since
+SQLite is frequently used on embedded devices, it is important that
+SQLite be able to gracefully handle OOM errors.</p>
+
+<p>OOM testing is accomplished by simulating OOM errors.
+SQLite allows an application to substitute an alternative malloc()
+implementation using the <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a>,...)
+interface. The TCL and TH3 test harnesses are both capable of
+inserting a modified version of malloc() that can be rigged to fail
+after a certain number of allocations. These instrumented mallocs
+can be set to fail only once and then start working again, or to
+continue failing after the first failure. OOM tests are done in a
+loop. On the first iteration of the loop, the instrumented malloc
+is rigged to fail on the first allocation. Then some SQLite operation
+is carried out and checks are done to make sure SQLite handled the
+OOM error correctly. Then the time-to-failure counter
+on the instrumented malloc is increased by one and the test is
+repeated. The loop continues until the entire operation runs to
+completion without ever encountering a simulated OOM failure.
+Tests like this are run twice, once with the instrumented malloc
+set to fail only once, and again with the instrumented malloc set
+to fail continuously after the first failure.</p>
+
+<a name="ioerrtesting"></a>
+
+<h2 id="i_o_error_testing"><span>3.2. </span>I/O Error Testing</h2>
+
+<p>I/O error testing seeks to verify that SQLite responds sanely
+to failed I/O operations. I/O errors might result from a full disk drive,
+malfunctioning disk hardware, network outages when using a network
+file system, system configuration or permission changes that occur in the
+middle of an SQL operation, or other hardware or operating system
+malfunctions. Whatever the cause, it is important that SQLite be able
+to respond correctly to these errors and I/O error testing seeks to
+verify that it does.</p>
+
+<p>I/O error testing is similar in concept to OOM testing; I/O errors
+are simulated and checks are made to verify that SQLite responds
+correctly to the simulated errors. I/O errors are simulated in both
+the TCL and TH3 test harnesses by inserting a new
+<a href="c3ref/vfs.html">Virtual File System object</a> that is specially rigged
+to simulate an I/O error after a set number of I/O operations.
+As with OOM error testing, the I/O error simulators can be set to
+fail just once, or to fail continuously after the first failure.
+Tests are run in a loop, slowly increasing the point of failure until
+the test case runs to completion without error. The loop is run twice,
+once with the I/O error simulator set to simulate only a single failure
+and a second time with it set to fail all I/O operations after the first
+failure.</p>
+
+<p>In I/O error tests, after the I/O error simulation failure mechanism
+is disabled, the database is examined using
+<a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a> to make sure that the I/O error has not
+introduced database corruption.</p>
+
+<a name="crashtesting"></a>
+
+<h2 id="crash_testing"><span>3.3. </span>Crash Testing</h2>
+
+<p>Crash testing seeks to demonstrate that an SQLite database will not
+go corrupt if the application or operating system crashes or if there
+is a power failure in the middle of a database update. A separate
+white-paper titled
+<a href="atomiccommit.html">Atomic Commit in SQLite</a> describes the
+defensive measure SQLite takes to prevent database corruption following
+a crash. Crash tests strive to verify that those defensive measures
+are working correctly.</p>
+
+<p>It is impractical to do crash testing using real power failures, of
+course, and so crash testing is done in simulation. An alternative
+<a href="c3ref/vfs.html">Virtual File System</a> is inserted that allows the test
+harness to simulate the state of the database file following a crash.</p>
+
+<p>In the TCL test harness, the crash simulation is done in a separate
+process. The main testing process spawns a child process which runs
+some SQLite operation and randomly crashes somewhere in the middle of
+a write operation. A special <a href="vfs.html">VFS</a> randomly reorders and corrupts
+the unsynchronized
+write operations to simulate the effect of buffered filesystems. After
+the child dies, the original test process opens and reads the test
+database and verifies that the changes attempted by the child either
+completed successfully or else were completely rolled back. The
+<a href="pragma.html#pragma_integrity_check">integrity_check</a> <a href="pragma.html#syntax">PRAGMA</a> is used to make sure no database corruption
+occurs.</p>
+
+<p>The TH3 test harness needs to run on embedded systems that do not
+necessarily have the ability to spawn child processes, so it uses
+an in-memory <a href="vfs.html">VFS</a> to simulate crashes. The in-memory <a href="vfs.html">VFS</a> can be rigged
+to make a snapshot of the entire filesystem after a set number of I/O
+operations. Crash tests run in a loop. On each iteration of the loop,
+the point at which a snapshot is made is advanced until the SQLite
+operations being tested run to completion without ever hitting a
+snapshot. Within the loop, after the SQLite operation under test has
+completed, the filesystem is reverted to the snapshot and random file
+damage is introduced that is characteristic of the kinds of damage
+one expects to see following a power loss. Then the database is opened
+and checks are made to ensure that it is well-formed and that the
+transaction either ran to completion or was completely rolled back.
+The interior of the loop is repeated multiple times for each
+snapshot with different random damage each time.</p>
+
+<a name="multifail"></a>
+
+<h2 id="compound_failure_tests"><span>3.4. </span>Compound failure tests</h2>
+
+<p>The test suites for SQLite also explore the result of stacking
+multiple failures. For example, tests are run to ensure correct behavior
+when an I/O error or OOM fault occurs while trying to recover from a
+prior crash.
+
+<a name="fuzztesting"></a>
+
+</p><h1 id="fuzz_testing"><span>4. </span>Fuzz Testing</h1>
+
+<p><a href="http://en.wikipedia.org/wiki/Fuzz_testing">Fuzz testing</a>
+seeks to establish that SQLite responds correctly to invalid, out-of-range,
+or malformed inputs.</p>
+
+<h2 id="sql_fuzz"><span>4.1. </span>SQL Fuzz</h2>
+
+<p>SQL fuzz testing consists of creating syntactically correct yet
+wildly nonsensical SQL statements and feeding them to SQLite to see
+what it will do with them. Usually some kind of error is returned
+(such as "no such table"). Sometimes, purely by chance, the SQL
+statement also happens to be semantically correct. In that case, the
+resulting prepared statement is run to make sure it gives a reasonable
+result.</p>
+
+<a name="aflfuzz"></a>
+
+<h3 id="sql_fuzz_using_the_american_fuzzy_lop_fuzzer"><span>4.1.1. </span>SQL Fuzz Using The American Fuzzy Lop Fuzzer</h3>
+
+<p>The concept of fuzz testing has been around for decades, but fuzz
+testing was not an effective way to find bugs until 2014 when
+Michal Zalewski invented the first practical profile-guided fuzzer,
+<a href="http://lcamtuf.coredump.cx/afl/">American Fuzzy Lop</a> or "AFL".
+Unlike prior fuzzers that blindly generate random inputs, AFL
+instruments the program being tested (by modifying the assembly-language
+output from the C compiler) and uses that instrumentation to detect when
+an input causes the program to do something different - to follow
+a new control path or loop a different number of times. Inputs that provoke
+new behavior are retained and further mutated. In this way, AFL is able
+to "discover" new behaviors of the program under test, including behaviors
+that were never envisioned by the designers.
+
+</p><p>AFL proved adept at finding arcane bugs in SQLite.
+Most of the findings have been assert() statements where the conditional
+was false under obscure circumstances. But AFL has also found
+a fair number of crash bugs in SQLite, and even a few cases where SQLite
+computed incorrect results.
+
+</p><p>Because of its past success, AFL became a standard part of the testing
+strategy for SQLite beginning with <a href="releaselog/3_8_10.html">version 3.8.10</a> (2015-05-07) until
+it was superseded by better fuzzers in <a href="releaselog/3_29_0.html">version 3.29.0</a> (2019-07-10).
+
+<a name="ossfuzz"></a>
+
+</p><h3 id="google_oss_fuzz"><span>4.1.2. </span>Google OSS Fuzz</h3>
+
+<p>Beginning in 2016, a team of engineers at Google started the
+<a href="https://github.com/google/oss-fuzz">OSS Fuzz</a> project.
+OSS Fuzz uses a AFL-style guided fuzzer running on Google's infrastructure.
+The Fuzzer automatically downloads the latest check-ins for participating
+projects, fuzzes them, and sends email to the developers reporting any
+problems. When a fix is checked in, the fuzzer automatically detects this
+and emails a confirmation to the developers.
+
+</p><p>SQLite is one of many open-source projects that OSS Fuzz tests. The
+<a href="https://www.sqlite.org/src/file/test/ossfuzz.c">test/ossfuzz.c</a> source file
+in the SQLite repository is SQLite's interface to OSS fuzz.
+
+</p><p>OSS Fuzz no longer finds historical bugs in SQLite. But it is still
+running and does occasionally find issues in new development check-ins.
+Examples:
+<a href="https://www.sqlite.org/src/timeline?y=ci&c=c422afb507dc8757">&#91;1&#93;</a>
+<a href="https://www.sqlite.org/src/timeline?y=ci&c=0a2eb949f8a759e5">&#91;2&#93;</a>
+<a href="https://www.sqlite.org/src/timeline?y=ci&c=62f2235adf796c72">&#91;3&#93;</a>.
+
+<a name="dbsqlfuzz"></a>
+
+</p><h3 id="the_dbsqlfuzz_fuzzer"><span>4.1.3. </span>The dbsqlfuzz fuzzer</h3>
+
+<p>Beginning in late 2018, SQLite has been fuzzed using a proprietary
+fuzzer called "dbsqlfuzz". Dbsqlfuzz is built using the
+<a href="http://llvm.org/docs/LibFuzzer.html">libFuzzer</a> framework of LLVM.
+
+</p><p>The dbsqlfuzz fuzzer mutates both the SQL input and the database file
+at the same time. Dbsqlfuzz uses a custom
+<a href="https://github.com/google/fuzzing/blob/master/docs/structure-aware-fuzzing.md">Structure-Aware Mutator</a>
+on a specialized input file that defines both an input database and SQL
+text to be run against that database. Because it mutates both the input
+database and the input SQL at the same time, dbsqlfuzz has been able to
+find some obscure faults in SQLite that were missed by prior fuzzers that
+mutated only SQL inputs or only the database file.
+The SQLite developers keep dbsqlfuzz running against trunk in about
+16 cores at all times. Each instance of dbsqlfuzz program is able to
+evalutes about 400 test cases per second, meaning that about 500 million
+cases are checked every day.</p>
+
+<p>The dbsqlfuzz fuzzer has been very successful at hardening the
+SQLite code base against malicious attack. Since dbsqlfuzz has been
+added to the SQLite internal test suite, bug reports from external
+fuzzers such as OSSFuzz have all but stopped.
+
+</p><p>Note that dbsqlfuzz is <i>not</i> the Protobuf-based structure-aware
+fuzzer for SQLite that is used by Chromium and described in the
+<a href="https://github.com/google/fuzzing/blob/master/docs/structure-aware-fuzzing.md#user-content-example-sqlite">Structure-Aware Mutator article</a>.
+There is no connection between these two fuzzers, other than the fact that they
+are both based on <a href="http://llvm.org/docs/LibFuzzer.html">libFuzzer</a>
+The Protobuf fuzzer for SQLite is written and maintained by the Chromium
+team at Google, whereas dbsqlfuzz is written and maintained by the original
+SQLite developers. Having multiple independently-developed fuzzers for SQLite
+is good, as it means that obscure issues are more likely to be uncovered.
+
+<a name="3pfuzz"></a>
+
+</p><h3 id="other_third_party_fuzzers"><span>4.1.4. </span>Other third-party fuzzers</h3>
+
+<p>SQLite seems to be a popular target for third-parties to fuzz.
+The developers hear about many attempts to fuzz SQLite
+and they do occasionally get bug reports found by independent
+fuzzers. All such reports are promptly fixed, so the product is
+improved and that the entire SQLite user community benefits.
+This mechanism of having many independent testers is similar to
+<a href="https://en.wikipedia.org/wiki/Linus%27s_law">Linus's law</a>:
+"given enough eyeballs, all bugs are shallow".
+
+</p><p>One fuzzing researcher of particular note is
+<a href="https://www.manuelrigger.at/">Manuel Rigger</a>, currently
+(as this paragraph is written on 2019-12-21)
+at <a href="https://ethz.ch/en.html">ETH Zurich</a>.
+Most fuzzers only look for assertion faults, crashes, undefined behavior (UB),
+or other easily detected anomalies. Dr. Rigger's fuzzers, on the other hand,
+are able to find cases where SQLite computes an incorrect answer.
+Rigger has found
+<a href="https://www.sqlite.org/src/timeline?y=t&u=mrigger&n=all">many such cases</a>.
+Most of these finds are obscure corner cases involving type
+conversions and affinity transformations, and a good number of the finds
+are against unreleased features. Nevertheless, his finds are still important
+as they are real bugs,
+and the SQLite developers are grateful to be able to identify and fix
+the underlying problems. Rigger's work is currently unpublished. When it
+is released, it could be as influential as Zalewski's invention of AFL
+and profile-guided fuzzing.
+
+<a name="fuzzcheck"></a>
+
+</p><h3 id="the_fuzzcheck_test_harness"><span>4.1.5. </span>The fuzzcheck test harness</h3>
+
+<p>Historical test cases from <a href="testing.html#aflfuzz">AFL</a>, <a href="testing.html#ossfuzz">OSS Fuzz</a>, and <a href="testing.html#dbsqlfuzz">dbsqlfuzz</a> are
+collected in a set of database files in the main SQLite source tree
+and then rerun by the "fuzzcheck" utility program whenever one runs
+"make test". Fuzzcheck only runs a few thousand "interesting" cases
+out of the billions of cases that the various fuzzers have
+examined over the years. "Interesting" cases are cases that exhibit
+previously unseen behavior. Actual bugs found by fuzzers are always
+included among the interesting test cases, but most of the cases run
+by fuzzcheck were never actual bugs.
+
+<a name="tension"></a>
+
+</p><h3 id="tension_between_fuzz_testing_and_100_mc_dc_testing"><span>4.1.6. </span>Tension Between Fuzz Testing And 100% MC/DC Testing</h3>
+
+<p>Fuzz testing and <a href="testing.html#mcdc">100% MC/DC testing</a> are in tension with
+one another.
+That is to say, code tested to 100% MC/DC will tend to be
+more vulnerable to problems found by fuzzing and code that performs
+well during fuzz testing will tend to have (much) less than
+100% MC/DC.
+This is because MC/DC testing discourages <a href="testing.html#defcode">defensive code</a> with
+unreachable branches, but without defensive code, a fuzzer is
+more likely to find a path that causes problems. MC/DC testing
+seems to work well for building code that is robust during
+normal use, whereas fuzz testing is good for building code that is
+robust against malicious attack.
+
+</p><p>Of course, users would prefer code that is both robust in normal
+use and resistant to malicious attack. The SQLite developers are
+dedicated to providing that. The purpose of this section is merely
+to point out that doing both at the same time is difficult.
+
+</p><p>For much of its history SQLite has been focused on 100% MC/DC testing.
+Resistance to fuzzing attacks only became a concern with the introduction
+of AFL in 2014. For a while there, fuzzers were finding many problems
+in SQLite. In more recent years, the testing strategy of SQLite has
+evolved to place more emphasis on fuzz testing. We still maintain
+100% MC/DC of the core SQLite code, but most testing CPU cycles are
+now devoted to fuzzing.
+
+</p><p>While fuzz testing and 100% MC/DC testing are in tension, they
+are not completely at cross-purposes. The fact that the SQlite test
+suite does test to 100% MC/DC means that when fuzzers do find problems,
+those problems can be fixed quickly and with little risk of introducing
+new errors.
+
+</p><h2 id="malformed_database_files"><span>4.2. </span>Malformed Database Files</h2>
+
+<p>There are numerous test cases that verify that SQLite is able to
+deal with malformed database files.
+These tests first build a well-formed database file, then add
+corruption by changing one or more bytes in the file by some means
+other than SQLite. Then SQLite is used to read the database.
+In some cases, the bytes changes are in the middle of data.
+This causes the content of the database to change while keeping the
+database well-formed.
+In other cases, unused bytes of the file are modified, which has
+no effect on the integrity of the database.
+The interesting cases are when bytes of the file that
+define database structure get changed. The malformed database tests
+verify that SQLite finds the file format errors and reports them
+using the <a href="rescode.html#corrupt">SQLITE_CORRUPT</a> return code without overflowing
+buffers, dereferencing NULL pointers, or performing other
+unwholesome actions.</p>
+
+<p>The <a href="testing.html#dbsqlfuzz">dbsqlfuzz</a> fuzzer also does an excellent job of verifying
+that SQLite responds sanely to malformed database files.</p>
+
+<h2 id="boundary_value_tests"><span>4.3. </span>Boundary Value Tests</h2>
+
+<p>SQLite defines certain <a href="limits.html">limits</a> on its operation, such as the
+maximum number of columns in a table, the maximum length of an
+SQL statement, or the maximum value of an integer. The TCL and TH3 test
+suites both contains numerous tests that push SQLite right to the edge
+of its defined limits and verify that it performs correctly for
+all allowed values. Additional tests go beyond the defined limits
+and verify that SQLite correctly returns errors. The source code
+contains <a href="testing.html#testcase">testcase macros</a> to verify that both sides of each boundary
+have been tested.</p>
+
+<a name="regressiontesting"></a>
+
+<h1 id="regression_testing"><span>5. </span>Regression Testing</h1>
+
+<p>Whenever a bug is reported against SQLite, that bug is not considered
+fixed until new test cases that would exhibit the bug have been added
+to either the TCL or TH3 test suites.
+Over the years,
+this has resulted in thousands and thousands of new tests.
+These regression tests ensure that bugs that have
+been fixed in the past are not reintroduced into future versions of
+SQLite.</p>
+
+<a name="leakcheck"></a>
+
+<h1 id="automatic_resource_leak_detection"><span>6. </span>Automatic Resource Leak Detection</h1>
+
+<p>Resource leak occurs when system resources
+are allocated and never freed. The most troublesome resource leaks
+in many applications are memory leaks - when memory is allocated using
+malloc() but never released using free(). But other kinds of resources
+can also be leaked: file descriptors, threads, mutexes, etc.</p>
+
+<p>Both the TCL and TH3 test harnesses automatically track system
+resources and report resource leaks on <u>every</u> test run.
+No special configuration or setup is required. The test harnesses
+are especially vigilant with regard to memory leaks. If a change
+causes a memory leak, the test harnesses will recognize this
+quickly. SQLite is designed to never leak memory, even after
+an exception such as an OOM error or disk I/O error. The test
+harnesses are zealous to enforce this.</p>
+
+<a name="coverage"></a>
+
+<h1 id="test_coverage"><span>7. </span>Test Coverage</h1>
+
+<p>The SQLite core, including the unix <a href="vfs.html">VFS</a>,
+has 100% branch test coverage under <a href="th3.html">TH3</a> in
+its default configuration as measured by
+<a href="http://gcc.gnu.org/onlinedocs/gcc/Gcov.html">gcov</a>.
+Extensions such as FTS3 and RTree are excluded from this
+analysis.</p>
+
+<a name="stmtvbr"></a>
+
+<h2 id="statement_versus_branch_coverage"><span>7.1. </span>Statement versus branch coverage</h2>
+
+<p>There are many ways to measure test coverage. The most popular
+metric is "statement coverage". When you hear someone say that their
+program as "XX% test coverage" without further explanation, they usually
+mean statement coverage. Statement coverage measures what percentage
+of lines of code are executed at least once by the test suite.</p>
+
+<p>Branch coverage is more rigorous than statement coverage. Branch
+coverage measures the number of machine-code branch instructions that
+are evaluated at least once on both directions.</p>
+
+<p>To illustrate the difference between statement coverage and
+branch coverage, consider the following hypothetical
+line of C code:</p>
+
+<div class="codeblock"><pre>if( a>b && c!=25 ){ d++; }
+</pre></div>
+
+<p>Such a line of C code might generate a dozen separate machine code
+instructions. If any one of those instructions is ever evaluated, then
+we say that the statement has been tested. So, for example, it might
+be the case that the conditional expression is
+always false and the "d" variable is
+never incremented. Even so, statement coverage counts this line of
+code as having been tested.</p>
+
+<p>Branch coverage is more strict. With branch coverage, each test and
+each subblock within the statement is considered separately. In order
+to achieve 100% branch coverage in the example above, there must be at
+least three test cases:</p>
+
+<p></p><ul>
+<li> a&lt;=b
+</li><li> a&gt;b && c==25
+</li><li> a&gt;b && c!=25
+</li></ul>
+
+<p>Any one of the above test cases would provide 100% statement coverage
+but all three are required for 100% branch coverage. Generally speaking,
+100% branch coverage implies 100% statement coverage, but the converse is
+not true. To reemphasize, the
+<a href="th3.html">TH3</a> test harness for SQLite provides the stronger form of
+test coverage - 100% branch test coverage.</p>
+
+<a name="defcode"></a>
+
+<h2 id="coverage_testing_of_defensive_code"><span>7.2. </span>Coverage testing of defensive code</h2>
+
+<p>A well-written C program will typically contain some defensive
+conditionals which in practice are always true or always false.
+This leads to a
+programming dilemma: Does one remove defensive code in order to obtain
+100% branch coverage?</p>
+
+<p>In SQLite, the answer to the previous question is "no".
+For testing purposes, the SQLite source code defines
+macros called ALWAYS() and NEVER(). The ALWAYS() macro
+surrounds conditions
+which are expected to always evaluate as true and NEVER() surrounds
+conditions that are always evaluated to false. These macros serve as
+comments to indicate that the conditions are defensive code.
+In release builds, these macros are pass-throughs:</p>
+
+<div class="codeblock"><pre>#define ALWAYS(X) (X)
+#define NEVER(X) (X)
+</pre></div>
+
+<p>During most testing, however, these macros will throw an assertion
+fault if their argument does not have the expected truth value. This
+alerts the developers quickly to incorrect design assumptions.
+
+</p><div class="codeblock"><pre>#define ALWAYS(X) ((X)?1:assert(0),0)
+#define NEVER(X) ((X)?assert(0),1:0)
+</pre></div>
+
+<p>When measuring test coverage, these macros are defined to be constant
+truth values so that they do not generate assembly language branch
+instructions, and hence do not come into play when calculating the
+branch coverage:</p>
+
+<div class="codeblock"><pre>#define ALWAYS(X) (1)
+#define NEVER(X) (0)
+</pre></div>
+
+<p>The test suite is designed to be run three times, once for each of
+the ALWAYS() and NEVER() definitions shown above. All three test runs
+should yield exactly the same result. There is a run-time test using
+the <a href="c3ref/test_control.html">sqlite3_test_control</a>(<a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_ALWAYS</a>, ...) interface that
+can be used to verify that the macros are correctly set to the first
+form (the pass-through form) for deployment.</p>
+
+<a name="testcase"></a>
+
+<h2 id="forcing_coverage_of_boundary_values_and_boolean_vector_tests"><span>7.3. </span>Forcing coverage of boundary values and boolean vector tests</h2>
+
+<p>Another macro used in conjunction with test coverage measurement is
+the <tt>testcase()</tt> macro. The argument is a condition for which
+we want test cases that evaluate to both true and false.
+In non-coverage builds (that is to say, in release builds) the
+<tt>testcase()</tt> macro is a no-op:</p>
+
+<div class="codeblock"><pre>#define testcase(X)
+</pre></div>
+
+<p>But in a coverage measuring build, the <tt>testcase()</tt> macro
+generates code that evaluates the conditional expression in its argument.
+Then during analysis, a check
+is made to ensure tests exist that evaluate the conditional to both true
+and false. <tt>Testcase()</tt> macros are used, for example, to help verify
+that boundary values are tested. For example:</p>
+
+<div class="codeblock"><pre>testcase( a==b );
+testcase( a==b+1 );
+if( a>b && c!=25 ){ d++; }
+</pre></div>
+
+<p>Testcase macros are also used when two or more cases of a switch
+statement go to the same block of code, to make sure that the code was
+reached for all cases:</p>
+
+<div class="codeblock"><pre>switch( op ){
+ case OP_Add:
+ case OP_Subtract: {
+ testcase( op==OP_Add );
+ testcase( op==OP_Subtract );
+ /* ... */
+ break;
+ }
+ /* ... */
+}
+</pre></div>
+
+<p>For bitmask tests, <tt>testcase()</tt> macros are used to verify that every
+bit of the bitmask affects the outcome. For example, in the following block
+of code, the condition is true if the mask contains either of two bits
+indicating either a MAIN_DB or a TEMP_DB is being opened.
+The <tt>testcase()</tt>
+macros that precede the if statement verify that both cases are tested:</p>
+
+<div class="codeblock"><pre>testcase( mask & SQLITE_OPEN_MAIN_DB );
+testcase( mask & SQLITE_OPEN_TEMP_DB );
+if( (mask & (SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_TEMP_DB))!=0 ){ ... }
+</pre></div>
+
+<p>The SQLite source code contains 1143
+uses of the <tt>testcase()</tt> macro.</p>
+
+<a name="mcdc"></a>
+
+<h2 id="branch_coverage_versus_mc_dc"><span>7.4. </span>Branch coverage versus MC/DC</h2>
+
+<p>Two methods of measuring test coverage were described above:
+"statement" and "branch" coverage. There are many other test coverage
+metrics besides these two. Another popular metric is "Modified
+Condition/Decision Coverage" or MC/DC.
+<a href="http://en.wikipedia.org/wiki/Modified_Condition/Decision_Coverage">Wikipedia</a>
+defines MC/DC as follows:</p>
+
+<ul>
+<li> Each decision tries every possible outcome.
+</li><li> Each condition in a decision takes on every possible outcome.
+</li><li> Each entry and exit point is invoked.
+</li><li> Each condition in a decision is shown to independently
+ affect the outcome of the decision.
+</li></ul>
+
+<p>In the C programming language
+where <b><tt>&amp;&amp;</tt></b> and <b><tt>||</tt></b>
+are "short-circuit" operators, MC/DC and branch coverage are very nearly
+the same thing. The primary difference is in boolean vector tests.
+One can test for any of several bits in bit-vector and still obtain
+100% branch test coverage even though the second element of MC/DC - the
+requirement that each condition in a decision take on every possible outcome -
+might not be satisfied.</p>
+
+<p>SQLite uses <tt>testcase()</tt> macros as described in the previous
+subsection to make sure that every condition in a bit-vector decision takes
+on every possible outcome. In this way, SQLite also achieves 100% MC/DC
+in addition to 100% branch coverage.</p>
+
+<h2 id="measuring_branch_coverage"><span>7.5. </span>Measuring branch coverage</h2>
+
+<p>Branch coverage in SQLite is currently measured
+using <a href="https://gcc.gnu.org/onlinedocs/gcc/Gcov.html">gcov</a> with the "-b"
+option. First the test program is compiled using options
+"-g -fprofile-arcs -ftest-coverage" and then the test program is run.
+Then "gcov -b" is run to generate a coverage report.
+The coverage report is verbose and inconvenient to read,
+so the gcov-generated report is processed using
+some simple scripts to put it into a more human-friendly format.
+This entire process is automated using scripts, of course.
+
+</p><p>Note that running SQLite with gcov is not a test of SQLite &mdash;
+it is a test of the test suite. The gcov run does not test SQLite because
+the -fprofile-args and -ftest-coverage options cause the compiler to
+generate different code.
+The gcov run merely verifies that the test suite provides 100% branch test
+coverage. The gcov run is a test of the test - a meta-test.
+
+</p><p>After gcov has been run to verify 100% branch test coverage,
+then the test program is recompiled using delivery compiler options
+(without the special -fprofile-arcs and -ftest-coverage options)
+and the test program is rerun.
+This second run is the actual test of SQLite.
+
+</p><p>It is important to verify that the gcov test run
+and the second real test run both give the same output. Any
+differences in output indicate either the use of undefined or
+indeterminate behavior in the SQLite code (and hence a bug),
+or a bug in the compiler.
+Note that SQLite has, over the previous decade, encountered bugs
+in each of GCC, Clang, and MSVC. Compiler bugs, while rare, do happen,
+which is why it is so important to test the code in an as-delivered
+configuration.
+
+<a name="mutationtests"></a>
+
+</p><h2 id="mutation_testing"><span>7.6. </span>Mutation testing</h2>
+
+<p>Using gcov (or similar) to show that every branch instruction is taken
+at least once in both directions is good measure of test suite quality.
+But even better is showing that every branch instruction makes
+a difference in the output. In other words, we want to show
+not only that every branch instruction both jumps and falls through but also
+that every branch is doing useful work and that the test suite is able
+to detect and verify that work. When a branch is found that does not
+make a difference in the output, that suggests that the code associated
+the branch can be removed (reducing the size of the library and perhaps
+making it run faster) or that the test suite is inadequately testing the
+feature that the branch implements.
+
+</p><p>SQLite strives to verify that every branch instruction makes a difference
+using <a href="https://en.wikipedia.org/wiki/Mutation_testing">mutation testing</a>.
+<a href="th3.html#muttest">A script</a>
+first compiles the SQLite source code into assembly language
+(using, for example, the -S option to gcc). Then the script steps through
+the generated assembly language and, one by one, changes each branch
+instruction into either an unconditional jump or a no-op, compiles the
+result, and verifies that the test suite catches the mutation.
+
+</p><p>
+Unfortunately, SQLite contains many branch instructions that
+help the code run faster without changing the output.
+Such branches generate false-positives during mutation testing.
+As an example, consider the following
+<a href="https://www.sqlite.org/src/artifact/55b5fb474?ln=55-62">hash function</a>
+used to accelerate table-name lookup:
+
+</p><div class="codeblock"><pre>55 static unsigned int strHash(const char *z){
+56 unsigned int h = 0;
+57 unsigned char c;
+58 while( (c = (unsigned char)*z++)!=0 ){ /*OPTIMIZATION-IF-TRUE*/
+59 h = (h&lt;&lt;3) &#94; h &#94; sqlite3UpperToLower&#91;c&#93;;
+60 }
+61 return h;
+62 }
+</pre></div>
+
+<p>
+If the branch instruction that implements the "c!=0" test on line 58
+is changed into a no-op, then the while-loop will loop forever and the
+test suite will fail with a time-out. But if that branch is changed
+into an unconditional jump, then the hash function will always return 0.
+The problem is that 0 is a valid hash. A hash function that always
+returns 0 still works in the sense that SQLite still always gets the correct
+answer. The table-name hash table degenerates into a linked-list
+and so the table-name lookups that occur while parsing SQL statements
+might be a little slower, but the end result will be the same.
+
+</p><p>
+To work around this problem, comments of the form
+"<code>/*OPTIMIZATION-IF-TRUE*/</code>" and
+"<code>/*OPTIMIZATION-IF-FALSE*/</code>" are inserted into the SQLite
+source code to tell the mutation testing script to ignore some branch
+instructions.
+
+<a name="thoughts1"></a>
+
+</p><h2 id="experience_with_full_test_coverage"><span>7.7. </span>Experience with full test coverage</h2>
+
+<p>The developers of SQLite have found that full coverage testing is an
+extremely effective method for locating and preventing bugs.
+Because every single branch
+instruction in SQLite core code is covered by test cases, the developers
+can be confident that changes made in one part of the code
+do not have unintended consequences in other parts of the code.
+The many new features and performance improvements that have been
+added to SQLite in recent years would not have been possible without
+the availability of full-coverage testing.</p>
+
+<p>Maintaining 100% MC/DC is laborious and time-consuming.
+The level of effort needed to maintain full-coverage testing
+is probably not cost effective for a typical application.
+However, we think that full-coverage testing is justified for a
+<a href="mostdeployed.html">very widely deployed</a> infrastructure library
+like SQLite, and especially for a database library which by its very
+nature "remembers" past mistakes.
+
+
+<a name="dynamicanalysis"></a>
+
+</p><h1 id="dynamic_analysis"><span>8. </span>Dynamic Analysis</h1>
+
+<p>Dynamic analysis refers to internal and external checks on the
+SQLite code which are performed while the code is live and running.
+Dynamic analysis has proven to be a great help in maintaining the
+quality of SQLite.</p>
+
+<a name="asserts"></a>
+
+<h2 id="assert"><span>8.1. </span>Assert</h2>
+
+<p>The SQLite core contains 6548 <tt>assert()</tt>
+statements that verify function preconditions and postconditions and
+loop invariants. Assert() is a macro which is a standard part of
+ANSI-C. The argument is a boolean value that is assumed to always be
+true. If the assertion is false, the program prints an error message
+and halts.</p>
+
+<p>Assert() macros are disabled by compiling with the NDEBUG macro defined.
+In most systems, asserts are enabled by default. But in SQLite, the
+asserts are so numerous and are in such performance critical places, that
+the database engine runs about three times slower when asserts are enabled.
+Hence, the default (production) build of SQLite disables asserts.
+Assert statements are only enabled when SQLite is compiled with the
+SQLITE_DEBUG preprocessor macro defined.</p>
+
+<p>See the <a href="assert.html">Use Of assert in SQLite</a> document
+for additional information about how SQLite uses assert().</p>
+
+<a name="valgrind"></a>
+
+<h2 id="valgrind"><span>8.2. </span>Valgrind</h2>
+
+<p><a href="http://valgrind.org/">Valgrind</a> is perhaps the most amazing
+and useful developer tool in the world. Valgrind is a simulator - it simulates
+an x86 running a Linux binary. (Ports of Valgrind for platforms other
+than Linux are in development, but as of this writing, Valgrind only
+works reliably on Linux, which in the opinion of the SQLite developers
+means that Linux should be the preferred platform for all software development.)
+As Valgrind runs a Linux binary, it looks for all kinds of interesting
+errors such as array overruns, reading from uninitialized memory,
+stack overflows, memory leaks, and so forth. Valgrind finds problems
+that can easily slip through all of the other tests run against SQLite.
+And, when Valgrind does find an error, it can dump the developer directly
+into a symbolic debugger at the exact point where the error occur, to
+facilitate a quick fix.</p>
+
+<p>Because it is a simulator, running a binary in Valgrind is slower than
+running it on native hardware. (To a first approximation, an application
+running in Valgrind on a workstation will perform about the same as it
+would running natively on a smartphone.) So it is impractical to run the full
+SQLite test suite through Valgrind. However, the veryquick tests and
+the coverage of the TH3 tests are run through Valgrind prior to every
+release.</p>
+
+<a name="memtesting"></a>
+
+<h2 id="memsys2"><span>8.3. </span>Memsys2</h2>
+
+<p>SQLite contains a pluggable
+<a href="malloc.html">memory allocation subsystem</a>.
+The default implementation uses system malloc() and free().
+However, if SQLite is compiled with <a href="compile.html#memdebug">SQLITE_MEMDEBUG</a>, an alternative
+memory allocation wrapper (<a href="malloc.html#memdebug">memsys2</a>)
+is inserted that looks for memory allocation
+errors at run-time. The memsys2 wrapper checks for memory leaks, of
+course, but also looks for buffer overruns, uses of uninitialized memory,
+and attempts to use memory after it has been freed. These same checks
+are also done by valgrind (and, indeed, Valgrind does them better)
+but memsys2 has the advantage of being much faster than Valgrind, which
+means the checks can be done more often and for longer tests.</p>
+
+<a name="mutextesting"></a>
+
+<h2 id="mutex_asserts"><span>8.4. </span>Mutex Asserts</h2>
+
+<p>SQLite contains a pluggable mutex subsystem. Depending on
+compile-time options, the default mutex system contains interfaces
+<a href="c3ref/mutex_held.html">sqlite3_mutex_held()</a> and <a href="c3ref/mutex_held.html">sqlite3_mutex_notheld()</a> that detect
+whether or not a particular mutex is held by the calling thread.
+These two interfaces are used extensively within assert() statements
+in SQLite to verify mutexes are held and released at all the right
+moments, in order to double-check that SQLite does work correctly
+in multi-threaded applications.</p>
+
+<a name="journaltest"></a>
+
+<h2 id="journal_tests"><span>8.5. </span>Journal Tests</h2>
+
+<p>One of the things that SQLite does to ensure that transactions
+are atomic across system crashes and power failures is to write
+all changes into the rollback journal file prior to changing the
+database. The TCL test harness contains an alternative
+<a href="vfs.html">OS backend</a> implementation that helps to
+verify this is occurring correctly. The "journal-test VFS" monitors
+all disk I/O traffic between the database file and rollback journal,
+checking to make sure that nothing is written into the database
+file which has not first been written and synced to the rollback journal.
+If any discrepancies are found, an assertion fault is raised.</p>
+
+<p>The journal tests are an additional double-check over and above
+the crash tests to make sure that SQLite transactions will be atomic
+across system crashes and power failures.</p>
+
+<a name="intoverflow"></a>
+
+<h2 id="undefined_behavior_checks"><span>8.6. </span>Undefined Behavior Checks</h2>
+
+<p>In the C programming language, it is very easy to write code that
+has "undefined" or "implementation defined" behavior.
+That means that the code might work during development, but then give
+a different answer on a different system, or when recompiled using different
+compiler options.
+Examples of undefined and implementation-defined behavior in
+ANSI C include:
+</p><ul>
+<li>Signed integer overflow. (Signed integer overflow does <u>not</u>
+necessarily wrap around, as most people expect.)
+</li><li>Shifting an N-bit integer by more than N bits.
+</li><li>Shifting by a negative amount.
+</li><li>Shifting a negative number.
+</li><li>Using the memcpy() function on overlapping buffers.
+</li><li>The order of evaluation of function arguments.
+</li><li>Whether or not "char" variables are signed or unsigned.
+</li><li>And so forth....
+</li></ul>
+
+<p>Since undefined and implementation-defined behavior is non-portable
+and can easily lead to incorrect answers, SQLite works very hard to avoid it.
+For example,
+when adding two integer column values together as part of an SQL statement,
+SQLite does not simply add them together using the C-language "+" operator.
+Instead, it first checks to make sure the
+addition will not overflow, and if it will, it does the addition using
+floating point instead.
+
+</p><p>To help ensure that SQLite does not make use of undefined or
+implementation defined behavior, the test suites are rerun using
+instrumented builds that try to detect undefined behavior. For example,
+test suites are run using the "-ftrapv" option of GCC. And they
+are run again using the "-fsanitize=undefined" option on Clang. And
+again using the "/RTC1" option in MSVC. Then the test suites are rerun
+using options like "-funsigned-char" and "-fsigned-char" to make sure
+that implementation differences do not matter either. Tests are then repeated
+on 32-bit and 64-bit systems and on big-endian and little-endian systems,
+using a variety of CPU architectures.
+Furthermore, the test suites are augmented with many test cases that are
+deliberately designed to provoke undefined behavior. For example:
+"<b>SELECT -1*(-9223372036854775808);</b>".
+
+<a name="disopttest"></a>
+
+</p><h1 id="disabled_optimization_tests"><span>9. </span>Disabled Optimization Tests</h1>
+
+<p>The <a href="c3ref/test_control.html">sqlite3_test_control</a>(<a href="c3ref/c_testctrl_always.html">SQLITE_TESTCTRL_OPTIMIZATIONS</a>, ...) interface
+allows selected SQL statement optimizations to be disabled at run-time.
+SQLite should always generate exactly the same answer with optimizations
+enabled and with optimizations disabled; the answer simply arrives quicker
+with the optimizations turned on. So in a production environment, one always
+leaves the optimizations turned on (the default setting).</p>
+
+<p>One verification technique used on SQLite is to run an entire test suite
+twice, once with optimizations left on and a second time with optimizations
+turned off, and verify that the same output is obtained both times. This
+shows that the optimizations do not introduce errors.</p>
+
+<p>Not all test cases can be handled this way. Some test cases check
+to verify that the optimizations really are reducing the amount of
+computation by counting the number of disk accesses, sort operations,
+full-scan steps, or other processing steps that occur during queries.
+Those test cases will appear to fail when optimizations are disabled.
+But the majority of test cases simply check that the correct answer
+was obtained, and all of those cases can be run successfully with and
+without the optimizations, in order to show that the optimizations do not
+cause malfunctions.</p>
+
+
+<a name="cklist"></a>
+
+<h1 id="checklists"><span>10. </span>Checklists</h1>
+
+<p>The SQLite developers use an on-line checklist to coordinate testing
+activity and to verify that all tests pass prior each SQLite release.
+<a href="http://www.sqlite.org/checklists/index.html">Past checklists</a>
+are retained for historical reference.
+(The checklists are read-only for anonymous internet viewers, but
+developers can log in and update checklist items in their web
+browsers.)
+The use of checklists for SQLite testing and other development activities
+is inspired by <i>
+<a href="http://atulgawande.com/book/the-checklist-manifesto/">The Checklist Manifesto</a>
+</i>.</p>
+
+<p>The latest checklists contain approximately 200 items that are
+individually verified for each release. Some checklist items only take
+a few seconds to verify and mark off. Others involve test suites
+that run for many hours.</p>
+
+<p>The release checklist is not automated: developers run each item on
+the checklist manually. We find that it is important to keep a human in
+the loop. Sometimes problems are found while running a checklist item
+even though the test itself passed. It is important to have a human
+reviewing the test output at the highest level, and constantly asking
+"Is this really right?"</p>
+
+<p>The release checklist is continuously evolving. As new problems or
+potential problems are discovered, new checklist items are added to
+make sure those problems do not appear in subsequent releases. The
+release checklist has proven to be an invaluable tool in helping to
+ensure that nothing is overlooked during the release process.</p>
+
+
+<a name="staticanalysis"></a>
+
+<h1 id="static_analysis"><span>11. </span>Static Analysis</h1>
+
+<p>Static analysis means analyzing source code at compile-time to
+check for correctness. Static analysis includes compiler
+warning messages and more in-depth analysis engines such as the
+<a href="http://clang-analyzer.llvm.org/">Clang Static Analyzer</a>.
+SQLite compiles without warnings on GCC and Clang using
+the -Wall and -Wextra flags on Linux and Mac and on MSVC on Windows.
+No valid warnings are generated by the Clang Static Analyzer tool "scan-build"
+either (though recent versions of clang seem to generate many false-positives.)
+Nevertheless, some warnings might be generated by other
+static analyzers. Users are encouraged not to stress over these
+warnings and to instead take solace in the intense testing of SQLite
+described above.
+</p>
+
+<p>Static analysis has not been helpful in finding
+bugs in SQLite. Static analysis has found a few bugs in SQLite, but
+those are the exceptions. More bugs have been
+introduced into SQLite while trying to get it to compile without
+warnings than have been found by static analysis.</p>
+
+<a name="summary"></a>
+
+<h1 id="summary"><span>12. </span>Summary</h1>
+
+<p>SQLite is open source. This gives many people the idea that
+it is not well tested as commercial software and is perhaps unreliable.
+But that impression is false.
+SQLite has exhibited very high reliability in the field and
+a very low defect rate, especially considering how rapidly it is evolving.
+The quality of SQLite is achieved in part by careful code design and
+implementation. But extensive testing also plays a vital role in
+maintaining and improving the quality of SQLite. This document has
+summarized the testing procedures that every release of SQLite undergoes
+with the hope of inspiring confidence that SQLite is
+suitable for use in mission-critical applications.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/testing.in?m=a6f909eb7e889cd20">2022-05-31 20:17:58</a> UTC </small></i></p>
+
diff --git a/www/th3.html b/www/th3.html
new file mode 100644
index 0000000..fec336d
--- /dev/null
+++ b/www/th3.html
@@ -0,0 +1,570 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>TH3</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+TH3
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc2"><a href="#history">1.1. History</a></div>
+<div class="fancy-toc1"><a href="#operation">2. Operation</a></div>
+<div class="fancy-toc1"><a href="#generating_a_test_program">3. Generating A Test Program</a></div>
+<div class="fancy-toc2"><a href="#test_automation_scripts">3.1. Test Automation Scripts</a></div>
+<div class="fancy-toc1"><a href="#test_coverage">4. Test Coverage</a></div>
+<div class="fancy-toc1"><a href="#mutation_testing">5. Mutation Testing</a></div>
+<div class="fancy-toc1"><a href="#th3_license">6. TH3 License</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>SQLite Test Harness #3 (hereafter "TH3") is one of
+<a href="testing.html#harnesses">three test harnesses</a> used for testing SQLite.
+TH3 meets the following objectives:</p>
+
+<ul>
+<li><p> TH3 is able to run on embedded platforms that lack the support
+ infrastructure of workstations.</p></li>
+
+<li><p> TH3 tests SQLite in an as-deployed configuration using only
+ published and documented interfaces.
+ In other words, TH3 tests the compiled object code, not
+ the source code, thus verifying that no problems were introduced
+ by compiler bugs. "Test what you fly and fly what you test."</p></li>
+
+<li><p> TH3 checks SQLite's response to out-of-memory errors, disk I/O
+ errors, and power loss during transaction commit. </p></li>
+
+<li><p> TH3 exercises SQLite in a variety of run-time configurations
+ (UTF8 vs UTF16, different pages sizes, varying journal modes, etc.)
+ </p></li>
+
+<li><p> TH3 achieves 100% branch test coverage (and 100%
+ <a href="https://en.wikipedia.org/wiki/Modified_condition/decision_coverage">MC/DC</a>)
+ over the SQLite core.
+ (Test coverage of extensions such as FTS and RTREE is less than 100%).
+ </p></li>
+</ul>
+
+<p>TH3 was originally written for validation testing only, but has
+subsequently been used for development testing and debugging
+as well, and has proven very helpful in those roles. A full-coverage
+test takes less than five minutes on a workstation and hence
+serves as a fast regression test during day-to-day maintenance
+of the SQLite code base.</p>
+
+<h2 id="history"><span>1.1. </span>History</h2>
+
+<p>TH3 originated from an effort to test SQLite on
+<a href="https://en.wikipedia.org/wiki/Symbian">SymbianOS</a>.
+Prior to TH3, all SQLite tests were run using the
+<a href="http://www.tcl.tk/">TCL</a> script language, but TCL would not (easily)
+compile on SymbianOS which made testing difficult. The first attempt
+to remedy this problem was the "TH1" (Test Harness #1) scripting
+language - a reimplementation of parts of the TCL language in a
+more portable form that would compile and run on SymbianOS, and
+that was sufficient to run the SQLite tests. TH1
+did not survive as a standard testing tool for SQLite,
+but it did find continued service as a
+scripting language used to customize the
+<a href="http://www.fossil-scm.org/">Fossil</a> version control system.
+There was also a "Test Harness #2" which was an attempt to
+create a simple scripting language using operator prefix notation
+to drive tests. TH3 was the third attempt.
+
+</p><p>At about that same time, some avionics manufacturers were
+expressing interest in SQLite, which prompted the SQLite developers
+to design TH3 to support the rigorous testing standards of
+<a href="https://en.wikipedia.org/wiki/DO-178B">DO-178B</a>.
+
+</p><p>The first code for TH3 was laid down on 2008-09-25.
+An intense effort over the next 10 months resulted in TH3 achieving
+100% MC/DC on 2009-07-25. The TH3 code continues to be improved and
+expanded.
+
+</p><p>As of 2018-05-19, the TH3 source tree consists
+and well over 500,000 lines of source code in 1709 separate files.
+
+</p><h1 id="operation"><span>2. </span>Operation</h1>
+
+<p>TH3 is a test program generator. The output of TH3 is a program
+implemented in C-code and intended to be
+linked against the SQLite library under test. The generated test
+program is compiled and run on the target platform in order to verify
+correct operation of SQLite on that platform.</p>
+
+<p>The inputs to TH3 are test modules written in C or SQL and
+small configuration
+files that determine how to initialize SQLite. The
+TH3 package includes 1,444 test
+modules and more than 47 configurations (as of 2018-05-19).
+New modules and configurations
+can be added to customize TH3 for specialized applications.
+Each time TH3 is run, it reads
+a subset of the available test modules and configuration files to generate
+a custom C program that performs all of the specified tests under all
+specified configurations. A complete test of SQLite normally involves running
+TH3 multiple times to generate multiple test programs covering different
+aspects of SQLite's operation, then linking all test programs against
+a common SQLite library and running them separately on the target platform.
+</p>
+
+<p>There are no arbitrary limits in TH3. One could generate a
+single test program that contained all test modules and all configuration files.
+However, such a test program might be too large to deploy on embedded
+platforms. (As of 2018-05-19, a full-up TH3 test is over 850,000 lines and
+58MB of C code.) TH3 provides the ability to break the library of test
+modules up into smaller, more easily digested pieces.</p>
+
+<p>Each individual test module might contain dozens, hundreds, or thousands
+of separate tests. The test modules can be written in C or as scripts of
+SQL or a mixture of the two. About two-thirds of the existing test modules are
+written in pure SQL with the remainder either in pure C or a combination
+of C and SQL.
+</p>
+
+<p>Each test module file contains a header which describes the circumstances
+under which the test is valid. For a particular configuration, only those
+modules that are compatible with the configuration are run. </p>
+
+<h1 id="generating_a_test_program"><span>3. </span>Generating A Test Program</h1>
+
+<p>The TH3 program generator is a TCL script named "<tt>mkth3.tcl</tt>".
+To generate a test program, one has merely to run this script and supply
+the names of files containing test modules and configurations on the
+command line. Test modules are files that use the "<tt>.test</tt>" suffix
+and configurations are files that use the "<tt>.cfg</tt>" suffix. A
+typical invocation of mkth3.tcl might look something like the following:</p>
+
+<div class="codeblock"><pre>tclsh mkth3.tcl *.test *.cfg &gt;testprog1.c
+</pre></div>
+
+<p>The output from the mkth3.tcl script is a C program that contains
+everything needed to run the tests - everything that is except for
+the SQLite library itself. The generated test program contains
+implementations for all of the support interfaces used by the test
+modules and it contains the <tt>main()</tt> routine that drives the
+tests. To convert the test program into a working executable, simply
+compile it against SQLite:</p>
+
+<div class="codeblock"><pre>cc -o testprog1 testprog1.c sqlite3.c
+</pre></div>
+
+<p>The compilation step shown immediately above is merely representative.
+In a working installation, one would normally want
+to specify optimization parameters and compile-time switches on the
+compiler command line.</p>
+
+<p>For testing on embedded systems, the mkth3.tcl script and the compiler
+steps shown above are performed on an ordinary workstation using
+a cross-compiler, then the resulting test program is
+transferred onto the device to be run.</p>
+
+<p>Once the test program is generated, it is run with no arguments to
+perform the tests. Progress information as well as error diagnostics
+appear on standard output. (Alternative output arrangements can be made
+using a compile-time option for embedded devices that lack a standard
+output channel.) The program returns zero if there are no
+errors and non-zero if any problems were detected.</p>
+
+<p>Typical output from a single TH3 test program run looks like this:
+
+</p><div class="codeblock"><pre>With SQLite 3.8.11 2015-05-15 04:13:15 56ef98a04765c34c1c2f3ed7a6f03a732f3b886e
+-DSQLITE_COVERAGE_TEST
+-DSQLITE_NO_SYNC
+-DSQLITE_SYSTEM_MALLOC
+-DSQLITE_THREADSAFE=1
+Config-begin c1.
+Begin c1.pager08
+End c1.pager08
+Begin c1.build33
+End c1.build33
+Begin c1.orderby01
+End c1.orderby01
+<i>... 15014 lines of output omitted ....</i>
+Begin 64k.syscall01
+End 64k.syscall01
+Begin 64k.build01
+End 64k.build01
+Begin 64k.auth01
+End 64k.auth01
+Config-end 64k. TH3 memory used: 6373738
+Config-begin wal1.
+Begin wal1.wal37
+End wal1.wal37
+Config-end wal1. TH3 memory used: 100961
+All 226 VDBE coverage points reached
+th3: 0 errors out of 1442264 tests in 213.741 seconds. 64-bit little-endian
+th3: SQLite 3.8.11 2015-05-15 04:13:15 56ef98a04765c34c1c2f3ed7a6f03a732f3b886e
+</pre></div>
+
+<p>The output begins with a report of the <a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a>
+(cross-checked again <a href="c3ref/libversion.html">sqlite3_sourceid()</a>) for the
+SQLite under test and the compile-time options used as reported
+by <a href="c3ref/compileoption_get.html">sqlite3_compileoption_get()</a>. The output concludes with a summary
+of the test results and a repeat of the <a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a>. If any
+errors are detected, additional lines detail the problem. The error
+reporting lines always begin with a single space character so that they
+can be quickly extracted from large output files using:
+
+</p><div class="codeblock"><pre>grep "&#94; "
+</pre></div>
+
+<p>The default output shows the beginning and end of each configuration
+and test module combination. In the example above "c1" and "64k" are
+configurations and "pager08", "build33", "orderby01", etc. are test modules.
+Compile-time and run-time options are available to increase or decrease
+the amount of output.
+The output can be increased by showing each test case within each
+test module. The output can be decreased
+by degrees: omitting test modules starts and stops,
+omitting configuration starts and stops, and finally by omitting all output.
+
+</p><h2 id="test_automation_scripts"><span>3.1. </span>Test Automation Scripts</h2>
+
+<p>TH3 comes with additional TCL scripts that help automate the testing
+process on workstations. The "th3make" script automatically runs "mkth3.tcl"
+and "gcc" and then runs the resulting test program and checks the results.
+Arguments to th3make include all of the "*.test" test modules and
+"*.cfg" configurations that are to be included in the test. Additional
+options to th3make can cause the test program to be compiled using different
+compilers (GCC, Clang, MSVC), to use different output verbosity levels, to
+run the test program under valgrind, to check the output for coverage using
+gcov, and so forth. The th3make script also accepts "*.rc" filenames as
+arguments. These *.rc files are just collections of other arguments that
+are commonly used together for a single purpose. For example, the "quick.rc"
+file contains a set of eight arguments to th3make that run a fast (3-minute)
+full-coverage test. This allows the operator to type "./th3make quick.rc" as
+a short-cut to typing out all of the required command-line options. The
+following are a few of the more than 40 available *.rc files:
+
+</p><ul>
+<li><b>alignment</b><i>N</i><b>.rc</b> -
+ These files contain -D options to the compiler that are used by
+ various notable downstreams.
+</li><li><b>cov.rc</b> - Options for measuring test coverage
+</li><li><b>extensions.rc</b> - Options to enable <a href="fts3.html#fts4">FTS4</a>, <a href="rtree.html">R-Trees</a>,
+ and <a href="fileformat2.html#stat4tab">STAT4</a>.
+</li><li><b>fast.rc</b> - Run most tests, including those not needed for
+ coverage, skipping only soak tests, using delivery compiler options
+ (ex: -O3)
+</li><li><b>memdebug.rc</b> - like test.rc but also enable
+ <a href="compile.html#memdebug">-DSQLITE_MEMDEBUG</a>.
+</li><li><b>min.rc</b> - Run the minimum set of tests needed for 100% coverage.
+</li><li><b>quick.rc</b> - Run all tests required for 100% coverage tests
+ using -Os and <a href="compile.html#debug">-DSQLITE_DEBUG</a>.
+</li><li><b>test.rc</b> - Run the same tests as in fast.rc but without
+ compiler optimization and enabling options like
+ <a href="compile.html#debug">-DSQLITE_DEBUG</a> and
+ -DSQLITE_ENABLE_EXPENSIVE_ASSERT.
+</li><li><b>test-ex.rc</b> - long-running soak tests.
+</li></ul>
+
+<p>The TH3 repository also includes the "multitest.tcl" script, another
+TCL script used to automate TH3 testing on workstations. Multitest.tcl
+automatically compiles SQLite, then
+runs ./th3make repeatedly with a variety of alignments, and captures
+the output in a succinct summary screen. A typical multitest.tcl run
+generates output that looks like this:
+
+</p><div class="codeblock"><pre>./multitest.tcl -q --jobs 3
+start-time: 2018-05-19 03:17:12 UTC
+file mkdir sqlite3bld
+cd sqlite3bld
+exec sh /ramdisk/sqlite/configure
+file copy -force config.h ../config.h
+exec make clean sqlite3.c
+file rename sqlite3.c ../sqlite3.c
+file rename sqlite3.h ../sqlite3.h
+exec make clean sqlite3.c OPTS=-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1
+file rename sqlite3.c ../sqlite3udl.c
+exec make clean sqlite3.c OPTS=-DSQLITE_SMALL_STACK=1
+file rename sqlite3.c ../sqlite3ss.c
+cd ..
+*******************************************************************************
+t01: cov.rc.................................................... Ok (00:03:42)
+t02: cov.rc ++STAT4 ++DESERIALIZE -D_HAVE_SQLITE_CONFIG_H...... Ok (00:04:45)
+t03: vfs-cov.rc................................................ Ok (00:03:59)
+t04: demo.rc................................................... Ok (00:00:05)
+t07: test.rc ../th3private/*.test.............................. Ok (00:00:21)
+t08: test.rc ../th3private/*.test ++STAT4...................... Ok (00:01:41)
+t05: quick.rc.................................................. Ok (00:04:26)
+t09: quick.rc ~TEST_REALLOC_STRESS -funsigned-char............. Ok (00:05:39)
+t10: quick.rc ~THREADSAFE=0 -DLONGDOUBLE_TYPE=double........... Ok (00:03:24)
+t06: quick.rc extensions.rc -D_HAVE_SQLITE_CONFIG_H............ Ok (00:09:03)
+t11: quick.rc sqlite3ss.c ~MAX_ATTACHED=125.................... Ok (00:04:39)
+t12: quick.rc ~BYTEORDER=0 ++RTREE............................. Ok (00:07:28)
+t13: quick.rc ~DISABLE_INTRINSIC ++RTREE....................... Ok (00:07:31)
+t16: quick.rc ~TRACE_SIZE_LIMIT=15 cov1/main16.test............ Ok (00:00:22)
+t14: quick.rc ~DIRECT_OVERFLOW_READ -fsigned-char.............. Ok (00:04:35)
+t15: quick.rc ~UNTESTABLE ~EXTRA_IFNULLROW..................... Ok (00:01:44)
+t17: quick.rc ~MAX_MMAP_SIZE=0................................. Ok (00:04:46)
+t18: quick.rc ++NULL_TRIM ++OFFSET_SQL_FUNC.................... Ok (00:04:47)
+t19: quick.rc ++BATCH_ATOMIC_WRITE ++DESERIALIZE............... Ok (00:05:41)
+t20: lean1.rc quick.rc......................................... Ok (00:03:09)
+t22: test.rc alignment2.rc sqlite3udl.c........................ Ok (00:44:22)
+t21: test.rc alignment1.rc..................................... Ok (01:02:32)
+t23: memdebug1.rc extensions.rc................................ Ok (01:49:58)
+t25: valgrind1.rc -O3 extensions.rc............................ Ok (00:56:08)
+t24: memdebug2.rc extensions.rc................................ Ok (01:43:34)
+t27: test-ex1.rc............................................... Ok (00:45:00)
+t26: valgrind2.rc -O3 extensions.rc............................ Ok (01:02:52)
+t29: test-ex3.rc............................................... Ok (00:31:48)
+t28: test-ex2.rc............................................... Ok (01:12:03)
+t30: test-ex4.rc............................................... Ok (01:09:47)
+t32: test.rc alignment4.rc -m32 CC=clang....................... Ok (00:48:31)
+t31: test.rc alignment3.rc sqlite3udl.c........................ Ok (01:22:29)
+t34: test.rc alignment6.rc..................................... Ok (00:35:31)
+t33: test.rc alignment5.rc extensions.rc....................... Ok (00:59:33)
+t35: test.rc alignment7.rc..................................... Ok (00:44:10)
+t40: fast.rc alignment2.rc sqlite3udl.c........................ Ok (00:15:46)
+t39: fast.rc alignment1.rc extensions.rc -m32.................. Ok (00:33:19)
+t36: test.rc ~MUTATION_TEST.................................... Ok (00:35:45)
+t42: fast.rc alignment4.rc..................................... Ok (00:13:03)
+t43: fast.rc alignment5.rc..................................... Ok (00:13:32)
+t44: fast.rc alignment6.rc..................................... Ok (00:11:41)
+t41: fast.rc alignment3.rc sqlite3udl.c........................ Ok (00:26:31)
+t45: fast.rc alignment7.rc..................................... Ok (00:12:57)
+t46: fast.rc -fsanitize=undefined.............................. Ok (00:38:18)
+*******************************************************************************
+0 failures on 44 th3makes and 198583082 tests in (07:16:01) 3 cores on bella
+SQLite 3.24.0 2018-05-18 17:58:33 c6071ac99cfa4b6272ac4d739fc61a85acb544f6c1c2a
+</pre></div>
+
+<p>As can be seen above, a single run
+of multitest.tcl invokes th3make dozens of times and takes between 12 and 24
+CPU hours. The middle section of the output shows the arguments to each
+individual th3make run and the result and elapse time for that th3make.
+All build products and output for the separate th3make runs are
+captures in subdirectories for post-test analysis.
+The two-line summary at the bottom shows the total number of errors and tests
+over all th3make runs and the total elapse time, together with the
+<a href="c3ref/c_source_id.html">SQLITE_SOURCE_ID</a> information for the version of SQLite that was
+tested. This summary information is recorded in the
+<a href="https://www.sqlite.org/checklists">release
+checklist</a> during final testing.
+
+</p><p>Abbreviations are applied in the multitest.tcl output so that
+each th3make invocation will fit on a single 80-column output line.
+The initial "th3make" verb is omitted.
+"~" is shorthand for "-DSQLITE_" and "++" is stands for
+"-DSQLITE_ENABLE". Hence, multitest.tcl output line
+
+</p><div class="codeblock"><pre>quick.rc ~DISABLE_INTRINSIC ++RTREE
+</pre></div>
+
+<p>Really means
+
+</p><div class="codeblock"><pre>th3make quick.rc -DSQLITE_DISABLE_INTRINSIC -DSQLITE_ENABLE_RTREE
+</pre></div>
+
+<h1 id="test_coverage"><span>4. </span>Test Coverage</h1>
+
+<p>Using one particular subset of the available TH3 test modules (the "cov1"
+tests) SQLite obtained
+<a href="testing.html#coverage">100% branch test coverage</a> and 100% <a href="testing.html#mcdc">MC/DC</a> as measured
+by <a href="http://gcc.gnu.org/onlinedocs/gcc/Gcov.html">gcov</a>
+on Linux x86 and x86_64 hardware. All releases of SQLite since
+<a href="releaselog/3_6_17.html">version 3.6.17</a> (2009-08-10) have been tested to this standard.
+The SQLite developers
+are committed to maintaining 100% branch coverage and MC/DC for all
+future releases of SQLite.</p>
+
+<p>The cov1 test set used to obtain 100% branch test coverage are only a
+subset of the tests currently implemented using TH3. New test modules are
+added on a regular basis.</p>
+
+<a name="muttest"></a>
+
+<h1 id="mutation_testing"><span>5. </span>Mutation Testing</h1>
+
+<p>The TH3 source tree contains a scripted name
+"mutation-test.tcl" that automates the process of
+<a href="testing.html#mutationtests">mutation testing</a>.
+
+</p><p>The mutation-test.tcl script takes care of all of the details for
+running a mutation test:
+
+</p><ol>
+<li> The script compiles the TH3 test harness into machine code ("th3.o") if
+ necessary.
+</li><li> The script compiles the sqlite3.c source file into assembly language
+ ("sqlite3.s") if necessary.
+</li><li> The script loops through instructions in the assembly language file
+ to locate branch operations.
+ <ol type="a">
+ <li>The script makes a copy of the original sqlite3.s file.
+ </li><li>The copy is edited to change the branch instruction into either
+ a no-op or an unconditional jump.
+ </li><li>The copy of sqlite3.s is assembled into sqlite3.o then linked
+ again th3.o to generate the "th3" executable.
+ </li><li>The "th3" binary is run and the output checked for errors.
+ </li></ol>
+</li><li> The script shows progress for each cycle of the previous step then
+ displays a summary of "survivors" at the end. A "survivor" is a
+ mutation that was not detected by TH3.
+</li></ol>
+
+<p>Mutation testing can be slow, since each test can take up to 5
+minutes on a fast workstation, and there are two tests for each
+branch instructions, and over 20,000 branch instructions. Efforts are
+made to expedite operation. For example, TH3 is compiled in such a
+way that it exits as soon as it finds the first error, and as many
+of the mutations are easily detected, many cycles happen in only
+a few seconds. Nevertheless, the mutation-test.tcl script includes
+command-line options to limit the range of code lines tested so that
+mutation testing only needs to be performed on blocks of code that
+have recently changed.
+
+</p><h1 id="th3_license"><span>6. </span>TH3 License</h1>
+
+<p>SQLite itself is in the <a href="copyright.html">public domain</a> and
+can be used for any purpose. But TH3 is proprietary and requires a license.
+</p>
+
+<p>Even though open-source users do not have direct access to TH3, all
+users of SQLite benefit from TH3 indirectly since each version of SQLite is
+validated running TH3 on multiple platforms (Linux, Windows, WinRT, Mac,
+OpenBSD) prior to release. So anyone using an official release
+of SQLite can deploy their application with the confidence of knowing that
+it has been tested using TH3. They simply cannot rerun those tests
+themselves without purchasing a TH3 license.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/th3.in?m=7955ba7a189628a83">2018-05-19 14:21:54</a> UTC </small></i></p>
+
diff --git a/www/threadsafe.html b/www/threadsafe.html
new file mode 100644
index 0000000..1079f2e
--- /dev/null
+++ b/www/threadsafe.html
@@ -0,0 +1,221 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Using SQLite In Multi-Threaded Applications</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Using SQLite In Multi-Threaded Applications
+</div>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>SQLite supports three different threading modes:</p>
+
+<ol>
+<li><p><b>Single-thread</b>.
+In this mode, all mutexes are disabled and SQLite is unsafe to use in
+more than a single thread at once.</p></li>
+
+<li><p><b>Multi-thread</b>.
+In this mode, SQLite can be safely used by multiple threads provided that
+no single database connection is used simultaneously in two or more threads.
+</p></li>
+
+<li><p><b>Serialized</b>.
+In serialized mode, SQLite can be safely used by multiple threads with no
+restriction.</p></li>
+</ol>
+
+<p>
+The threading mode can be selected at compile-time (when the SQLite
+library is being compiled from source code) or at start-time (when the
+application that intends to use SQLite is initializing) or at
+run-time (when a new SQLite database connection is being created).
+Generally speaking, run-time overrides start-time and start-time
+overrides compile-time. Except, single-thread mode cannot be
+overridden once selected.
+</p>
+
+<p>
+The default mode is serialized.
+</p>
+
+<h1 id="compile_time_selection_of_threading_mode"><span>2. </span>Compile-time selection of threading mode</h1>
+
+<p>
+Use the <a href="compile.html#threadsafe">SQLITE_THREADSAFE</a> compile-time parameter to select the
+threading mode. If no <a href="compile.html#threadsafe">SQLITE_THREADSAFE</a> compile-time parameter is
+present, then serialized mode is used.
+This can be made explicit with
+<a href="compile.html#threadsafe">-DSQLITE_THREADSAFE=1</a>.
+With
+<a href="compile.html#threadsafe">-DSQLITE_THREADSAFE=0</a> the threading mode is
+single-thread. With
+<a href="compile.html#threadsafe">-DSQLITE_THREADSAFE=2</a> the threading mode is
+multi-thread.
+</p>
+
+<p>
+The return value of the <a href="c3ref/threadsafe.html">sqlite3_threadsafe()</a> interface is the value
+of SQLITE_THREADSAFE set at compile-time. It does not reflect changes
+to the threading mode made at runtime via the <a href="c3ref/config.html">sqlite3_config()</a>
+interface or by flags given as the third argument to <a href="c3ref/open.html">sqlite3_open_v2()</a>.
+</p>
+
+<p>
+If single-thread mode is selected at compile-time, then critical
+mutexing logic is omitted from the build and it is impossible to
+enable either multi-thread or serialized modes at start-time or
+run-time.
+</p>
+
+<h1 id="start_time_selection_of_threading_mode"><span>3. </span>Start-time selection of threading mode</h1>
+
+<p>
+Assuming that the compile-time threading mode is not single-thread, then
+the threading mode can be changed during initialization using the
+<a href="c3ref/config.html">sqlite3_config()</a> interface. The <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">SQLITE_CONFIG_SINGLETHREAD</a> verb
+puts SQLite into single-thread mode, the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">SQLITE_CONFIG_MULTITHREAD</a>
+verb sets multi-thread mode, and the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">SQLITE_CONFIG_SERIALIZED</a> verb
+sets serialized mode.
+</p>
+
+<h1 id="run_time_selection_of_threading_mode"><span>4. </span>Run-time selection of threading mode</h1>
+
+<p>If single-thread mode has not been selected at compile-time or start-time,
+then individual database connections can be created as either multi-thread
+or serialized. It is not possible to downgrade an individual database
+connection to single-thread mode. Nor is it possible to escalate an
+individual database connection if the compile-time or start-time mode
+is single-thread.</p>
+
+<p>The threading mode for an individual database connection is determined
+by flags given as the third argument to <a href="c3ref/open.html">sqlite3_open_v2()</a>. The
+<a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a> flag causes the database connection to be in the
+multi-thread mode and the <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_FULLMUTEX</a> flag causes the connection
+to be in serialized mode. If neither flag is specified or if
+<a href="c3ref/open.html">sqlite3_open()</a> or <a href="c3ref/open.html">sqlite3_open16()</a> are used instead of
+<a href="c3ref/open.html">sqlite3_open_v2()</a>, then the default
+mode determined by the compile-time and start-time settings is used.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/threadsafe.in?m=fc623895ed39582cf">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/toc.db b/www/toc.db
new file mode 100644
index 0000000..0d12069
--- /dev/null
+++ b/www/toc.db
Binary files differ
diff --git a/www/transactional.html b/www/transactional.html
new file mode 100644
index 0000000..0c0bb12
--- /dev/null
+++ b/www/transactional.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Is Transactional</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h2>SQLite is Transactional</h2>
+
+<p>A transactional database is one in which all changes and queries
+appear to be
+Atomic, Consistent, Isolated, and Durable
+(<a href="http://en.wikipedia.org/wiki/ACID">ACID</a>).
+SQLite implements
+<a href="http://en.wikipedia.org/wiki/Serializability">serializable</a>
+transactions that are atomic, consistent, isolated, and durable,
+even if the transaction is interrupted by a program crash, an
+operating system crash, or a power failure to the computer.
+</p>
+
+<p>
+We here restate and amplify the previous sentence for emphasis:
+All changes within a single transaction in SQLite either occur
+completely or not at all, even if the act of writing the change
+out to the disk is interrupted by
+<ul>
+<li>a program crash,</li>
+<li>an operating system crash, or</li>
+<li>a power failure.</li>
+</ul>
+<p>
+
+<p>
+The claim of the previous paragraph is extensively checked in the
+SQLite regression test suite using a special test harness that
+simulates the effects on a database file of operating system crashes
+and power failures.
+</p>
+
+<p>
+<a href="atomiccommit.html">Additional information</a>
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/transactional.in?m=dc3b3dd693624ff58">2021-02-12 00:39:31</a> UTC </small></i></p>
+
diff --git a/www/uintcseq.html b/www/uintcseq.html
new file mode 100644
index 0000000..819ca88
--- /dev/null
+++ b/www/uintcseq.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The UINT Collating Sequence</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The UINT Collating Sequence
+</div>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p> The UINT collating sequences is a <a href="loadext.html">loadable extension</a> for
+SQLite that implements a new collating sequence that compares text
+containing unsigned integers in numeric order.
+
+</p><p> The UINT collating sequence is not a standard part of SQLite.
+It must be loaded as a separate extension. The source code to
+UINT is in the <a href="https://sqlite.org/src/file/ext/misc/uint.c">uint.c source file</a>
+in the <a href="https://sqlite.org/src/file/ext/misc">ext/misc/ folder</a> of the
+SQLite source tree.
+
+</p><p> The UINT collating sequence is not included in standard builds of
+the SQLite library, but it is loaded by default in the <a href="cli.html">CLI</a>. This
+is typical of the <a href="cli.html">CLI</a> which loads various extensions above and beyond
+what are available in the standard SQLite library.
+
+</p><p> The UINT collating sequence works just like the default
+BINARY collating sequence for text, except that embedded strings
+of digits compare in numeric order.
+
+</p><ul>
+<li><p>
+Leading zeros are handled properly, in the sense that
+they do not mess of the maginitude comparison of embedded
+strings of digits. "x00123y" is equal to "x123y".
+
+</p></li><li><p>
+Only unsigned integers are recognized. Plus and minus
+signs are ignored. Decimal points and exponential notation
+are ignored.
+
+</p></li><li><p>
+Embedded integers can be of arbitrary length. Comparison
+is not limited to integers that can be expressed as a
+64-bit machine integer.
+</p></li></ul>
+
+<h1 id="example_"><span>2. </span>Example:</h1>
+
+<blockquote>
+<table border="1" cellspacing="0" cellpadding="10">
+<tr><th>COLLATE binary</th><th>COLLATE uint</th></tr>
+<tr><td valign="top" align="left"><pre>
+'0000123457'
+'123456'
+'abc0000000010xyz'
+'abc0010xyy'
+'abc10xzz'
+'abc674xyz'
+'abc87xyz'
+'abc9xyz'</pre></td>
+<td valign="top" align="left"><pre>
+'123456'
+'0000123457'
+'abc9xyz'
+'abc0010xyy'
+'abc0000000010xyz'
+'abc10xzz'
+'abc87xyz'
+'abc674xyz'</pre></td>
+</tr></table>
+</blockquote>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/uintcseq.in?m=36e3e7c849c6d1d72">2020-05-14 00:36:17</a> UTC </small></i></p>
+
diff --git a/www/undoredo.html b/www/undoredo.html
new file mode 100644
index 0000000..8855a96
--- /dev/null
+++ b/www/undoredo.html
@@ -0,0 +1,534 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Automatic Undo/Redo With SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">
+Automatic Undo/Redo Using SQLite
+</h1>
+
+<p>
+This page demonstrates how to use triggers to implement undo/redo
+logic for an application that uses SQLite as its
+<a href="appfileformat.html">application file format</a>.
+
+<h2>Object-Oriented Design</h2>
+
+<p>
+This design note considers the database to be a collection of objects.
+Each SQL table is a class.
+Each row is an instance of that class.
+There are, of course, other ways to interpret an SQL database schema,
+and the techniques described here work equally well under alternative
+interpretations, but an object-oriented view seems be more natural
+to most contemporary programmers.
+
+<h2>Capture Changes Using Triggers</h2>
+
+<p>
+The core idea is to create a special table (named "UNDOLOG" in the example)
+that holds information needed to undo/redo changes to the database.
+For each class (table) in the database that wants to participate in
+the undo/redo, triggers are created that cause entries to be made in
+the UNDOLOG table for each DELETE, INSERT, and UPDATE of the participating
+class.
+The UNDOLOG entries consist of ordinary SQL statements the can be
+played back to reverse the changes.
+
+<p>
+For example, suppose you wanted undo/redo on a class (table)
+that looks like this:
+
+<blockquote><pre>
+CREATE TABLE ex1(a,b,c);
+</pre></blockquote>
+
+<p>
+Triggers to record changes to table EX1 might look like this:
+
+<blockquote><pre>
+CREATE TEMP TRIGGER ex1_it AFTER INSERT ON ex1 BEGIN
+ INSERT INTO undolog VALUES(NULL,'DELETE FROM ex1 WHERE rowid='||new.rowid);
+END;
+CREATE TEMP TRIGGER ex1_ut AFTER UPDATE ON ex1 BEGIN
+ INSERT INTO undolog VALUES(NULL,'UPDATE ex1
+ SET a='||quote(old.a)||',b='||quote(old.b)||',c='||quote(old.c)||'
+ WHERE rowid='||old.rowid);
+END;
+CREATE TEMP TRIGGER ex1_dt BEFORE DELETE ON ex1 BEGIN
+ INSERT INTO undolog VALUES(NULL,'INSERT INTO ex1(rowid,a,b,c)
+ VALUES('||old.rowid||','||quote(old.a)||','||quote(old.b)||
+ ','||quote(old.c)||')');
+END;
+</pre></blockquote>
+
+<p>
+After each INSERT on ex1, the ex1_it trigger constructs text of a
+DELETE statement that will undo the INSERT. The ex1_ut trigger constructs
+an UPDATE statement that will undo the effects of an UPDATE.
+And the ex1_dt trigger constructs a statement that will undo the
+effects of a DELETE.
+
+<p>
+Note the use of the <a href="lang_corefunc.html#quote">quote() SQL function</a> in these triggers.
+The quote() function converts its argument into a form
+that is appropriate for inclusion in an SQL statement. Numeric values
+come through unchanged. Single quotes are added before and after
+strings and any internal single quotes are escaped. BLOB values
+are rendered using SQL-standard hexadecimal BLOB notation. The
+use of the quote() function ensures that the SQL statements used to
+undo and redo are always safe from SQL injection.
+
+<h2>Automatic Creation Of Triggers</h2>
+
+<p>
+Triggers such as the above could be entered manually, but that is tedious.
+An important feature of the technique demonstrated below is
+that the triggers are generated automatically.
+
+<p>
+The implementation language for the example code is
+<a href="http://www.tcl-lang.org">TCL</a>, though you can easily do the same thing
+in another programming language.
+Remember that the code here is a demonstration of the technique,
+not a drop-in module that will automatically do everything for you.
+The demonstration code shown below is derived from actual code
+in production use. But you will need to make changes to tailor it
+to your application.
+
+<p>
+To activate the undo/redo logic, invoke the undo::activate command
+with all classes (tables) that are to participate in the undo/redo
+as arguments. Use undo::deactivate, undo::freeze, and undo::unfreeze
+to control the state of the undo/redo mechanism.
+
+<p>
+The undo::activate command creates temporary triggers in the database
+that record all changes made to the tables named in the arguments.
+
+<h2>Application Interface</h2>
+
+<p>
+After a sequence of changes that define a single undo/redo step,
+invoke the undo::barrier command to define the limit of that step.
+In an interactive program, you can call undo::event after any change
+and undo::barrier will be called automatically as an idle callback.
+
+<p>
+When the user presses the Undo button, invoke undo::undo.
+Invoke undo::redo when the user presses the Redo button.
+
+<p>
+On each call to undo::undo or undo::redo, the undo/redo module
+automatically invokes methods status_refresh and reload_all in
+all toplevel namespaces. These methods should be defined to
+reconstruct the display or otherwise update the state of the
+program based on the undone/redone changes to the database.
+
+<p>
+The demonstration code below includes a status_refresh method
+that grays-out or activates the Undo and Redo buttons and menu
+entries depending on whether or not there is anything to be
+undone or redone. You will need to redefine this method to
+control the Undo and Redo buttons in your application.
+
+<p>
+The demonstration code assumes that the SQLite database is
+opened used as a database object named "db".
+
+<h2>Example Code</h2>
+
+
+<blockquote><pre>
+# Everything goes in a private namespace
+namespace eval ::undo {
+
+# proc: ::undo::activate TABLE ...
+# title: Start up the undo/redo system
+#
+# Arguments should be one or more database tables (in the database associated
+# with the handle "db") whose changes are to be recorded for undo/redo
+# purposes.
+#
+proc activate {args} {
+ variable _undo
+ if {$_undo(active)} return
+ eval _create_triggers db $args
+ set _undo(undostack) {}
+ set _undo(redostack) {}
+ set _undo(active) 1
+ set _undo(freeze) -1
+ _start_interval
+}
+
+# proc: ::undo::deactivate
+# title: Halt the undo/redo system and delete the undo/redo stacks
+#
+proc deactivate {} {
+ variable _undo
+ if {!$_undo(active)} return
+ _drop_triggers db
+ set _undo(undostack) {}
+ set _undo(redostack) {}
+ set _undo(active) 0
+ set _undo(freeze) -1
+}
+
+# proc: ::undo::freeze
+# title: Stop accepting database changes into the undo stack
+#
+# From the point when this routine is called up until the next unfreeze,
+# new database changes are rejected from the undo stack.
+#
+proc freeze {} {
+ variable _undo
+ if {!&#91;info exists _undo(freeze)&#93;} return
+ if {$_undo(freeze)>=0} {error "recursive call to ::undo::freeze"}
+ set _undo(freeze) &#91;db one {SELECT coalesce(max(seq),0) FROM undolog}&#93;
+}
+
+# proc: ::undo::unfreeze
+# title: Begin accepting undo actions again.
+#
+proc unfreeze {} {
+ variable _undo
+ if {!&#91;info exists _undo(freeze)&#93;} return
+ if {$_undo(freeze)<0} {error "called ::undo::unfreeze while not frozen"}
+ db eval "DELETE FROM undolog WHERE seq>$_undo(freeze)"
+ set _undo(freeze) -1
+}
+
+# proc: ::undo::event
+# title: Something undoable has happened
+#
+# This routine is called whenever an undoable action occurs. Arrangements
+# are made to invoke ::undo::barrier no later than the next idle moment.
+#
+proc event {} {
+ variable _undo
+ if {$_undo(pending)==""} {
+ set _undo(pending) &#91;after idle ::undo::barrier&#93;
+ }
+}
+
+# proc: ::undo::barrier
+# title: Create an undo barrier right now.
+#
+proc barrier {} {
+ variable _undo
+ catch {after cancel $_undo(pending)}
+ set _undo(pending) {}
+ if {!$_undo(active)} {
+ refresh
+ return
+ }
+ set end &#91;db one {SELECT coalesce(max(seq),0) FROM undolog}&#93;
+ if {$_undo(freeze)>=0 && $end>$_undo(freeze)} {set end $_undo(freeze)}
+ set begin $_undo(firstlog)
+ _start_interval
+ if {$begin==$_undo(firstlog)} {
+ refresh
+ return
+ }
+ lappend _undo(undostack) &#91;list $begin $end&#93;
+ set _undo(redostack) {}
+ refresh
+}
+
+# proc: ::undo::undo
+# title: Do a single step of undo
+#
+proc undo {} {
+ _step undostack redostack
+}
+
+# proc: ::undo::redo
+# title: Redo a single step
+#
+proc redo {} {
+ _step redostack undostack
+}
+
+# proc: ::undo::refresh
+# title: Update the status of controls after a database change
+#
+# The undo module calls this routine after any undo/redo in order to
+# cause controls gray out appropriately depending on the current state
+# of the database. This routine works by invoking the status_refresh
+# module in all top-level namespaces.
+#
+proc refresh {} {
+ set body {}
+ foreach ns &#91;namespace children ::&#93; {
+ if {&#91;info proc ${ns}::status_refresh&#93;==""} continue
+ append body ${ns}::status_refresh\n
+ }
+ proc ::undo::refresh {} $body
+ refresh
+}
+
+# proc: ::undo::reload_all
+# title: Redraw everything based on the current database
+#
+# The undo module calls this routine after any undo/redo in order to
+# cause the screen to be completely redrawn based on the current database
+# contents. This is accomplished by calling the "reload" module in
+# every top-level namespace other than ::undo.
+#
+proc reload_all {} {
+ set body {}
+ foreach ns &#91;namespace children ::&#93; {
+ if {&#91;info proc ${ns}::reload&#93;==""} continue
+ append body ${ns}::reload\n
+ }
+ proc ::undo::reload_all {} $body
+ reload_all
+}
+
+##############################################################################
+# The public interface to this module is above. Routines and variables that
+# follow (and whose names begin with "_") are private to this module.
+##############################################################################
+
+# state information
+#
+set _undo(active) 0
+set _undo(undostack) {}
+set _undo(redostack) {}
+set _undo(pending) {}
+set _undo(firstlog) 1
+set _undo(startstate) {}
+
+
+# proc: ::undo::status_refresh
+# title: Enable and/or disable menu options a buttons
+#
+proc status_refresh {} {
+ variable _undo
+ if {!$_undo(active) || &#91;llength $_undo(undostack)&#93;==0} {
+ .mb.edit entryconfig Undo -state disabled
+ .bb.undo config -state disabled
+ } else {
+ .mb.edit entryconfig Undo -state normal
+ .bb.undo config -state normal
+ }
+ if {!$_undo(active) || &#91;llength $_undo(redostack)&#93;==0} {
+ .mb.edit entryconfig Redo -state disabled
+ .bb.redo config -state disabled
+ } else {
+ .mb.edit entryconfig Redo -state normal
+ .bb.redo config -state normal
+ }
+}
+
+# xproc: ::undo::_create_triggers DB TABLE1 TABLE2 ...
+# title: Create change recording triggers for all tables listed
+#
+# Create a temporary table in the database named "undolog". Create
+# triggers that fire on any insert, delete, or update of TABLE1, TABLE2, ....
+# When those triggers fire, insert records in undolog that contain
+# SQL text for statements that will undo the insert, delete, or update.
+#
+proc _create_triggers {db args} {
+ catch {$db eval {DROP TABLE undolog}}
+ $db eval {CREATE TEMP TABLE undolog(seq integer primary key, sql text)}
+ foreach tbl $args {
+ set collist &#91;$db eval "pragma table_info($tbl)"&#93;
+ set sql "CREATE TEMP TRIGGER _${tbl}_it AFTER INSERT ON $tbl BEGIN\n"
+ append sql " INSERT INTO undolog VALUES(NULL,"
+ append sql "'DELETE FROM $tbl WHERE rowid='||new.rowid);\nEND;\n"
+
+ append sql "CREATE TEMP TRIGGER _${tbl}_ut AFTER UPDATE ON $tbl BEGIN\n"
+ append sql " INSERT INTO undolog VALUES(NULL,"
+ append sql "'UPDATE $tbl "
+ set sep "SET "
+ foreach {x1 name x2 x3 x4 x5} $collist {
+ append sql "$sep$name='||quote(old.$name)||'"
+ set sep ","
+ }
+ append sql " WHERE rowid='||old.rowid);\nEND;\n"
+
+ append sql "CREATE TEMP TRIGGER _${tbl}_dt BEFORE DELETE ON $tbl BEGIN\n"
+ append sql " INSERT INTO undolog VALUES(NULL,"
+ append sql "'INSERT INTO ${tbl}(rowid"
+ foreach {x1 name x2 x3 x4 x5} $collist {append sql ,$name}
+ append sql ") VALUES('||old.rowid||'"
+ foreach {x1 name x2 x3 x4 x5} $collist {append sql ,'||quote(old.$name)||'}
+ append sql ")');\nEND;\n"
+
+ $db eval $sql
+ }
+}
+
+# xproc: ::undo::_drop_triggers DB
+# title: Drop all of the triggers that _create_triggers created
+#
+proc _drop_triggers {db} {
+ set tlist &#91;$db eval {SELECT name FROM sqlite_temp_schema
+ WHERE type='trigger'}&#93;
+ foreach trigger $tlist {
+ if {!&#91;regexp {_.*_(i|u|d)t$} $trigger&#93;} continue
+ $db eval "DROP TRIGGER $trigger;"
+ }
+ catch {$db eval {DROP TABLE undolog}}
+}
+
+# xproc: ::undo::_start_interval
+# title: Record the starting conditions of an undo interval
+#
+proc _start_interval {} {
+ variable _undo
+ set _undo(firstlog) &#91;db one {SELECT coalesce(max(seq),0)+1 FROM undolog}&#93;
+}
+
+# xproc: ::undo::_step V1 V2
+# title: Do a single step of undo or redo
+#
+# For an undo V1=="undostack" and V2=="redostack". For a redo,
+# V1=="redostack" and V2=="undostack".
+#
+proc _step {v1 v2} {
+ variable _undo
+ set op &#91;lindex $_undo($v1) end&#93;
+ set _undo($v1) &#91;lrange $_undo($v1) 0 end-1&#93;
+ foreach {begin end} $op break
+ db eval BEGIN
+ set q1 "SELECT sql FROM undolog WHERE seq>=$begin AND seq<=$end
+ ORDER BY seq DESC"
+ set sqllist &#91;db eval $q1&#93;
+ db eval "DELETE FROM undolog WHERE seq>=$begin AND seq<=$end"
+ set _undo(firstlog) &#91;db one {SELECT coalesce(max(seq),0)+1 FROM undolog}&#93;
+ foreach sql $sqllist {
+ db eval $sql
+ }
+ db eval COMMIT
+ reload_all
+
+ set end &#91;db one {SELECT coalesce(max(seq),0) FROM undolog}&#93;
+ set begin $_undo(firstlog)
+ lappend _undo($v2) &#91;list $begin $end&#93;
+ _start_interval
+ refresh
+}
+
+
+# End of the ::undo namespace
+}
+</pre></blockquote>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/undoredo.in?m=741a21510cef6b0d1">2022-02-17 17:47:49</a> UTC </small></i></p>
+
diff --git a/www/unionvtab.html b/www/unionvtab.html
new file mode 100644
index 0000000..3e03de9
--- /dev/null
+++ b/www/unionvtab.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The UNION Virtual Table</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The UNION Virtual Table
+</div>
+</div>
+
+
+
+
+
+<ol>
+<li value="100"><p>
+The UNION virtual table (hereafter: "union-vtab")
+is a <a href="vtab.html">virtual table</a> that makes multiple independent
+<a href="rowidtable.html">rowid tables</a> tables look like a single large table.
+
+</p></li><li value="110"><p>
+The tables that participate in a union-vtab can be in the same
+database file, or they can be in separate databases files that
+are <a href="lang_attach.html">ATTACH</a>-ed to the same database connection.
+
+</p></li><li value="120"><p>
+The union-vtab is not built into SQLite.
+Union-vtab is a <a href="loadext.html">loadable extension</a>.
+The source code for union-vtab is contained in a single file located at
+<a href="https://sqlite.org/src/file/ext/misc/unionvtab.c">ext/misc/unionvtab.c</a>
+in the SQLite source tree.
+
+</p></li><li value="200"><p>
+A new union-vtab instance is created as follows:
+
+</p><blockquote>
+<b>CREATE VIRTUAL TABLE temp.</b><i>tabname</i> <b>USING unionvtab(</b><i>query</i><b>);</b>
+</blockquote>
+
+</li><li value="210"><p>
+Every union-vtab must be in the TEMP namespace. Hence, the "<b>temp.</b>"
+prior to <i>tabname</i> is required. Only the union-vtab itself is required
+to be in the TEMP namespace - the individual tables that are being unioned
+can be any <a href="lang_attach.html">ATTACH</a>-ed database.
+
+</p></li><li value="220"><p>
+The <i>query</i> in the CREATE VIRTUAL TABLE statement for a union-vtab
+must be a well-formed SQL query that returns four columns and an
+arbitrary number of rows. Each row in the result of the <i>query</i>
+represents a single table that is to participate in the union.
+</p><ol>
+<li value="221'">
+The first column is the schema name for the database that contains
+the tables. Examples: "main", "zone512".
+</li><li value="222'">
+The second column is the name of the table.
+</li><li value="223'">
+The third column is the minimum value for any rowid in the table.
+</li><li value="224'">
+The fourth column is the maximum value of any rowid in the table.
+</li></ol>
+
+</li><li value="230"><p>
+The <i>query</i> for the CREATE VIRTUAL TABLE statement of a union-vtab
+can be either a <a href="lang_select.html">SELECT</a> statement or a <a href="lang_select.html#values">VALUES clause</a>.
+
+</p></li><li value="240"><p>
+The <i>query</i> is run once when the CREATE VIRTUAL TABLE statement is
+first encountered and the results of that one run are used for all subsequent
+access to the union-vtab. If the results of <i>query</i> change, then
+the union-vtab should be <a href="lang_droptable.html">DROP</a>-ed and recreated in order
+to cause the <i>query</i> to be run again.
+
+</p></li><li value="250"><p>
+There must be no overlap in the bands of rowids for the various tables
+in a union-vtab.
+
+</p></li><li value="260"><p>
+All tables that participate in a union-vtab must have identical
+CREATE TABLE definitions, except that the names of the tables can be different.
+
+</p></li><li value="270"><p>
+All tables that participate in a union-vtab must be <a href="rowidtable.html">rowid tables</a>.
+
+</p></li><li value="280"><p>
+The column names and definitions for <i>tabname</i> will be the same as
+the underlying tables. An application can access <i>tabname</i> just like
+it was one of the real underlying tables.
+
+</p></li><li value="290"><p>
+No table in a union-vtab may contain entries that are outside of the
+rowid bounds established by the <i>query</i> in the CREATE VIRTUAL TABLE
+statement.
+
+</p></li><li value="300"><p>
+The union-vtab shall optimize access to the underlying real tables
+when the constraints on the query are among forms shown below.
+Other kinds of constraints may be optimized in the future, but only
+these constraints are optimized in the initial implementation.
+</p><ul>
+<li> <b>rowid=$id</b>
+</li><li> <b>rowid IN</b> <i>query-or-list</i>
+</li><li> <b>rowid BETWEEN $lwr AND $upr</b>
+</li></ul>
+<p>
+Other kinds of constraints may be used and will work, but other
+constraints will be checked individually for each row and will not
+be optimized (at least not initially).
+All constraint checking is completely automatic regardless of whether
+or not optimization occurs. The optimization referred to in this bullet point
+is a performance consideration only. The same result is obtained
+regardless of whether or not the query is optimized.
+
+</p></li><li value="310"><p>
+The union-vtab is read-only. Support for writing may be added at a later
+time, but writing is not a part of the initial implementation.
+
+</p></li><li value="320"><p>
+<i>Nota bene:</i>
+The <a href="c3ref/blob_open.html">sqlite3_blob_open()</a> interface does <u>not</u> work for a union-vtab.
+BLOB content must be read from the union-vtab using ordinary SQL statements.
+</p></li></ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/unionvtab.in?m=46e606d9d8ba1f99e">2017-07-21 19:12:49</a> UTC </small></i></p>
+
diff --git a/www/unlock_notify.html b/www/unlock_notify.html
new file mode 100644
index 0000000..17ae69f
--- /dev/null
+++ b/www/unlock_notify.html
@@ -0,0 +1,492 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Unlock-Notify API</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<style>
+ pre a:visited, pre a:link { text-decoration: none ; color: #40534b }
+ pre {
+ background: #F3F3F3;
+ float: right;
+ padding: 1ex 2ex;
+ margin-left: 1em;
+ border: solid black 1px;
+ }
+ h1,h2 { clear: both ; text-align: center }
+</style>
+
+<h1>Using the sqlite3_unlock_notify() API</h1>
+
+<pre>
+<span style="color:blue;font-style:italic">/* This example uses the pthreads API */</span>
+#include &lt;pthread.h&gt;
+
+<span style="color:blue;font-style:italic">/*</span>
+<span style="color:blue;font-style:italic">** A pointer to an instance of this structure is passed as the user-context</span>
+<span style="color:blue;font-style:italic">** pointer when registering for an unlock-notify callback.</span>
+<span style="color:blue;font-style:italic">*/</span>
+typedef struct UnlockNotification UnlockNotification;
+struct UnlockNotification {
+ int fired; <span style="color:blue;font-style:italic">/* True after unlock event has occurred */</span>
+ pthread_cond_t cond; <span style="color:blue;font-style:italic">/* Condition variable to wait on */</span>
+ pthread_mutex_t mutex; <span style="color:blue;font-style:italic">/* Mutex to protect structure */</span>
+};
+
+<span style="color:blue;font-style:italic">/*</span>
+<span style="color:blue;font-style:italic">** This function is an unlock-notify callback registered with SQLite.</span>
+<span style="color:blue;font-style:italic">*/</span>
+static void unlock_notify_cb(void **apArg, int nArg){
+ int i;
+ for(i=0; i&lt;nArg; i++){
+ UnlockNotification *p = (UnlockNotification *)apArg[i];
+ pthread_mutex_lock(&p-&gt;mutex);
+ p-&gt;fired = 1;
+ pthread_cond_signal(&p-&gt;cond);
+ pthread_mutex_unlock(&p-&gt;mutex);
+ }
+}
+
+<span style="color:blue;font-style:italic">/*</span>
+<span style="color:blue;font-style:italic">** This function assumes that an SQLite API call (either <a href="c3ref/prepare.html">sqlite3_prepare_v2</a>() </span>
+<span style="color:blue;font-style:italic">** or <a href="c3ref/step.html">sqlite3_step</a>()) has just returned SQLITE_LOCKED. The argument is the</span>
+<span style="color:blue;font-style:italic">** associated database connection.</span>
+<span style="color:blue;font-style:italic">**</span>
+<span style="color:blue;font-style:italic">** This function calls <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify</a>() to register for an </span>
+<span style="color:blue;font-style:italic">** unlock-notify callback, then blocks until that callback is delivered </span>
+<span style="color:blue;font-style:italic">** and returns SQLITE_OK. The caller should then retry the failed operation.</span>
+<span style="color:blue;font-style:italic">**</span>
+<span style="color:blue;font-style:italic">** Or, if <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify</a>() indicates that to block would deadlock </span>
+<span style="color:blue;font-style:italic">** the system, then this function returns SQLITE_LOCKED immediately. In </span>
+<span style="color:blue;font-style:italic">** this case the caller should not retry the operation and should roll </span>
+<span style="color:blue;font-style:italic">** back the current transaction (if any).</span>
+<span style="color:blue;font-style:italic">*/</span>
+static int wait_for_unlock_notify(<a href="c3ref/sqlite3.html">sqlite3</a> *db){
+ int rc;
+ UnlockNotification un;
+
+ <span style="color:blue;font-style:italic">/* Initialize the UnlockNotification structure. */</span>
+ un.fired = 0;
+ pthread_mutex_init(&un.mutex, 0);
+ pthread_cond_init(&un.cond, 0);
+
+ <span style="color:blue;font-style:italic">/* Register for an unlock-notify callback. */</span>
+ rc = <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify</a>(db, unlock_notify_cb, (void *)&un);
+ assert( rc==SQLITE_LOCKED || rc==SQLITE_OK );
+
+ <span style="color:blue;font-style:italic">/* The call to <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify</a>() always returns either SQLITE_LOCKED </span>
+<span style="color:blue;font-style:italic"> ** or SQLITE_OK. </span>
+<span style="color:blue;font-style:italic"> **</span>
+<span style="color:blue;font-style:italic"> ** If SQLITE_LOCKED was returned, then the system is deadlocked. In this</span>
+<span style="color:blue;font-style:italic"> ** case this function needs to return SQLITE_LOCKED to the caller so </span>
+<span style="color:blue;font-style:italic"> ** that the current transaction can be rolled back. Otherwise, block</span>
+<span style="color:blue;font-style:italic"> ** until the unlock-notify callback is invoked, then return SQLITE_OK.</span>
+ <span style="color:blue;font-style:italic">*/</span>
+ if( rc==SQLITE_OK ){
+ pthread_mutex_lock(&un.mutex);
+ if( !un.fired ){
+ pthread_cond_wait(&un.cond, &un.mutex);
+ }
+ pthread_mutex_unlock(&un.mutex);
+ }
+
+ <span style="color:blue;font-style:italic">/* Destroy the mutex and condition variables. */</span>
+ pthread_cond_destroy(&un.cond);
+ pthread_mutex_destroy(&un.mutex);
+
+ return rc;
+}
+
+<span style="color:blue;font-style:italic">/*</span>
+<span style="color:blue;font-style:italic">** This function is a wrapper around the SQLite function <a href="c3ref/step.html">sqlite3_step</a>().</span>
+<span style="color:blue;font-style:italic">** It functions in the same way as step(), except that if a required</span>
+<span style="color:blue;font-style:italic">** shared-cache lock cannot be obtained, this function may block waiting for</span>
+<span style="color:blue;font-style:italic">** the lock to become available. In this scenario the normal API step()</span>
+<span style="color:blue;font-style:italic">** function always returns SQLITE_LOCKED.</span>
+<span style="color:blue;font-style:italic">**</span>
+<span style="color:blue;font-style:italic">** If this function returns SQLITE_LOCKED, the caller should rollback</span>
+<span style="color:blue;font-style:italic">** the current transaction (if any) and try again later. Otherwise, the</span>
+<span style="color:blue;font-style:italic">** system may become deadlocked.</span>
+<span style="color:blue;font-style:italic">*/</span>
+int sqlite3_blocking_step(<a href="c3ref/stmt.html">sqlite3_stmt</a> *pStmt){
+ int rc;
+ while( SQLITE_LOCKED==(rc = <a href="c3ref/step.html">sqlite3_step</a>(pStmt)) ){
+ rc = wait_for_unlock_notify(<a href="c3ref/db_handle.html">sqlite3_db_handle</a>(pStmt));
+ if( rc!=SQLITE_OK ) break;
+ <a href="c3ref/reset.html">sqlite3_reset</a>(pStmt);
+ }
+ return rc;
+}
+
+<span style="color:blue;font-style:italic">/*</span>
+<span style="color:blue;font-style:italic">** This function is a wrapper around the SQLite function <a href="c3ref/prepare.html">sqlite3_prepare_v2</a>().</span>
+<span style="color:blue;font-style:italic">** It functions in the same way as prepare_v2(), except that if a required</span>
+<span style="color:blue;font-style:italic">** shared-cache lock cannot be obtained, this function may block waiting for</span>
+<span style="color:blue;font-style:italic">** the lock to become available. In this scenario the normal API prepare_v2()</span>
+<span style="color:blue;font-style:italic">** function always returns SQLITE_LOCKED.</span>
+<span style="color:blue;font-style:italic">**</span>
+<span style="color:blue;font-style:italic">** If this function returns SQLITE_LOCKED, the caller should rollback</span>
+<span style="color:blue;font-style:italic">** the current transaction (if any) and try again later. Otherwise, the</span>
+<span style="color:blue;font-style:italic">** system may become deadlocked.</span>
+<span style="color:blue;font-style:italic">*/</span>
+int sqlite3_blocking_prepare_v2(
+ <a href="c3ref/sqlite3.html">sqlite3</a> *db, <span style="color:blue;font-style:italic">/* Database handle. */</span>
+ const char *zSql, <span style="color:blue;font-style:italic">/* UTF-8 encoded SQL statement. */</span>
+ int nSql, <span style="color:blue;font-style:italic">/* Length of zSql in bytes. */</span>
+ <a href="c3ref/stmt.html">sqlite3_stmt</a> **ppStmt, <span style="color:blue;font-style:italic">/* OUT: A pointer to the prepared statement */</span>
+ const char **pz <span style="color:blue;font-style:italic">/* OUT: End of parsed string */</span>
+){
+ int rc;
+ while( SQLITE_LOCKED==(rc = <a href="c3ref/prepare.html">sqlite3_prepare_v2</a>(db, zSql, nSql, ppStmt, pz)) ){
+ rc = wait_for_unlock_notify(db);
+ if( rc!=SQLITE_OK ) break;
+ }
+ return rc;
+}
+</pre>
+
+
+<p>
+ When two or more connections access the same database in shared-cache
+ mode, read and write (shared and exclusive) locks on individual tables
+ are used to ensure that concurrently executing transactions are kept
+ isolated. Before writing to a table, a write (exclusive) lock must be
+ obtained on that table. Before reading, a read (shared) lock must be
+ obtained. A connection releases all held table locks when it concludes
+ its transaction. If a connection cannot obtain a required lock, then
+ the call to <a href="c3ref/step.html">sqlite3_step()</a> returns SQLITE_LOCKED.
+
+<p>
+ Although it is less common, a call to <a href="c3ref/prepare.html">sqlite3_prepare()</a> or
+ <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> may also return SQLITE_LOCKED if it cannot obtain
+ a read-lock on the <a href="schematab.html">sqlite_schema table</a> of each attached database. These
+ APIs need to read the schema data contained in the sqlite_schema table
+ in order to compile SQL statements to <a href="c3ref/stmt.html">sqlite3_stmt*</a> objects.
+
+<p>
+ This article presents a technique using the SQLite <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a>
+ interface such that calls to <a href="c3ref/step.html">sqlite3_step()</a> and <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>
+ block until the required locks are available instead of returning
+ SQLITE_LOCKED immediately. If the
+ sqlite3_blocking_step() or sqlite3_blocking_prepare_v2() functions presented
+ to the left return SQLITE_LOCKED, this indicates that to block would
+ deadlock the system.
+
+<p>
+ The <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> API, which is only available if the library is
+ compiled with the pre-processor symbol <a href="compile.html#enable_unlock_notify">SQLITE_ENABLE_UNLOCK_NOTIFY</a> defined,
+ is <a href="c3ref/unlock_notify.html">documented here</a>. This article is not a
+ substitute for reading the full API documentation!
+
+<p>
+ The <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> interface is designed for use in systems
+ that have a separate thread assigned to each <a href="c3ref/sqlite3.html">database connection</a>. There
+ is nothing in the implementation that prevents a single thread from running
+ multiple database connections. However, the <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a>
+ interface only works on a single connection at a time, so the lock
+ resolution logic presented here will only work for a single
+ database connection per thread.
+
+<p><b>The sqlite3_unlock_notify() API</b>
+
+<p>
+ After a call to <a href="c3ref/step.html">sqlite3_step()</a> or <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> returns
+ SQLITE_LOCKED, the <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> API may be invoked to register
+ for an unlock-notify callback. The unlock-notify callback is invoked by
+ SQLite after the database connection holding the table-lock that prevented
+ the call to <a href="c3ref/step.html">sqlite3_step()</a> or <a href="c3ref/prepare.html">sqlite3_prepare_v2()</a> from succeeding has
+ finished its transaction and released all locks. For example, if a call to
+ sqlite3_step() is an attempt to read from table X, and some other connection
+ Y is holding a write-lock on table X, then sqlite3_step() will return
+ SQLITE_LOCKED. If <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> is then called, the unlock-notify
+ callback will be invoked after connection Y's transaction is concluded. The
+ connection that the unlock-notify callback is waiting on, in this case
+ connection Y, is known as the "blocking connection".
+
+<p>
+ If a call to sqlite3_step() that attempts to write to a database table
+ returns SQLITE_LOCKED, then more than one other connection may be holding
+ a read-lock on the database table in question. In this case SQLite simply
+ selects one of those other connections arbitrarily and issues the
+ unlock-notify callback when that connection's transaction is finished.
+ Whether the call to sqlite3_step() was blocked by one or many connections,
+ when the corresponding unlock-notify callback is issued it is not
+ guaranteed that the required lock is available, only that it may be.
+
+<p>
+ When the unlock-notify callback is issued, it is issued from within a
+ call to sqlite3_step() (or sqlite3_close()) associated with the blocking
+ connection. It is illegal to invoke any sqlite3_XXX() API functions from
+ within an unlock-notify callback. The expected use is that the unlock-notify
+ callback will signal some other waiting thread or schedule some action
+ to take place later.
+
+<p>
+ The algorithm used by the sqlite3_blocking_step() function is as follows:
+
+<ol>
+ <li><p> Call sqlite3_step() on the supplied statement handle. If the call
+ returns anything other than SQLITE_LOCKED, then return this value
+ to the caller. Otherwise, continue.
+
+ <li><p> Invoke <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> on the database connection handle
+ associated with the supplied statement handle to register for an
+ unlock-notify callback. If the call to unlock_notify() returns
+ SQLITE_LOCKED, then return this value to the caller.
+
+ <li><p> Block until the unlock-notify callback is invoked by another thread.
+
+ <li><p> Call sqlite3_reset() on the statement handle. Since an
+ SQLITE_LOCKED error may only occur on the first call to sqlite3_step()
+ (it is not possible for one call to sqlite3_step() to return
+ SQLITE_ROW and then the next SQLITE_LOCKED), the statement handle may
+ be reset at this point without affecting the results of the query
+ from the point of view of the caller. If sqlite3_reset() were not
+ called at this point, the next call to sqlite3_step() would return
+ SQLITE_MISUSE.
+
+ <li><p> Return to step 1.
+</ol>
+
+<p>
+ The algorithm used by the sqlite3_blocking_prepare_v2() function is similar,
+ except that step 4 (resetting the statement handle) is omitted.
+
+
+<p><b>Writer Starvation</b>
+
+<p>
+ Multiple connections may hold a read-lock simultaneously. If many threads
+ are acquiring overlapping read-locks, it might be the case that at least
+ one thread is always holding a read lock.
+ Then a table waiting for a write-lock will wait forever.
+ This scenario is called "writer starvation."
+
+<p>
+ SQLite helps applications avoid writer starvation. After any attempt to
+ obtain a write-lock on a table fails (because one or more other
+ connections are holding read-locks), all attempts to open new transactions
+ on the shared-cache fail until one of the following is true:
+
+<ul>
+ <li> The current writer concludes its transaction, OR
+ <li> The number of open read-transactions on the shared-cache drops to zero.
+</ul>
+
+<p>
+ Failed attempts to open new read-transactions return SQLITE_LOCKED to the
+ caller. If the caller then calls <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> to register for
+ an unlock-notify callback, the blocking connection is the connection that
+ currently has an open write-transaction on the shared-cache. This prevents
+ writer-starvation since if no new read-transactions may be opened and
+ assuming all existing read-transactions are eventually concluded, the
+ writer will eventually have an opportunity to obtain the required
+ write-lock.
+
+<p><b>The pthreads API</b>
+
+ <p> By the time <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> is invoked by
+ wait_for_unlock_notify(), it is possible that the blocking connection
+ that prevented the sqlite3_step() or sqlite3_prepare_v2() call from
+ succeeding has already finished its transaction. In this case, the
+ unlock-notify callback is invoked immediately, before
+ <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> returns. Or, it is possible that the
+ unlock-notify callback is invoked by a second thread after
+ <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> is called but before the thread starts waiting
+ to be asynchronously signaled.
+
+ <p> Exactly how such a potential race-condition is handled depends on the
+ threads and synchronization primitives interface used by the application.
+ This example uses pthreads, the interface provided by modern UNIX-like
+ systems, including Linux.
+
+ <p> The pthreads interface provides the pthread_cond_wait() function.
+ This function allows the caller to simultaneously release a mutex
+ and start waiting for an asynchronous signal. Using this function,
+ a "fired" flag and a mutex, the race-condition described above may
+ be eliminated as follows:
+
+ <p> When the unlock-notify callback is invoked, which may be before the
+ thread that called <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> begins waiting for the
+ asynchronous signal, it does the following:
+
+ <ol>
+ <li> Obtains the mutex.
+ <li> Sets the "fired" flag to true.
+ <li> Attempts to signal a waiting thread.
+ <li> Releases the mutex.
+ </ol>
+
+ <p> When the wait_for_unlock_notify() thread is ready to begin waiting for
+ the unlock-notify callback to arrive, it:
+
+ <ol>
+ <li> Obtains the mutex.
+ <li> Checks if the "fired" flag has been set. If so, the unlock-notify
+ callback has already been invoked. Release the mutex and continue.
+ <li> Atomically releases the mutex and begins waiting for the
+ asynchronous signal. When the signal arrives, continue.
+ </ol>
+
+ <p> This way, it doesn't matter if the unlock-notify callback has already
+ been invoked, or is being invoked, when the wait_for_unlock_notify()
+ thread begins blocking.
+
+<p><b>Possible Enhancements</b>
+
+ <p> The code in this article could be improved in at least two ways:
+
+ <ul>
+ <li> It could manage thread priorities.
+ <li> It could handle a special case of SQLITE_LOCKED that can occur
+ when dropping a table or index.
+ </ul>
+
+ <p>
+ Even though the <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> function only allows the caller
+ to specify a single user-context pointer, an unlock-notify callback
+ is passed an array of such context pointers. This is because if when
+ a blocking connection concludes its transaction, if there is more
+ than one unlock-notify registered to call the same C function, the
+ context-pointers are marshaled into an array and a single callback
+ issued. If each thread were assigned a priority, then instead of just
+ signaling the threads in arbitrary order as this implementation does,
+ higher priority threads could be signaled before lower priority threads.
+
+ <p>
+ If a "DROP TABLE" or "DROP INDEX" SQL command is executed, and the
+ same database connection currently has one or more actively
+ executing SELECT statements, then SQLITE_LOCKED is returned. If
+ <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> is called in this case, then the specified
+ callback will be invoked immediately. Re-attempting the "DROP
+ TABLE" or "DROP INDEX" statement will return another SQLITE_LOCKED
+ error. In the implementation of sqlite3_blocking_step() shown to the
+ left, this could cause an infinite loop.
+
+ <p>
+ The caller could distinguish between this special "DROP TABLE|INDEX"
+ case and other cases by using <a href="rescode.html#extrc">extended error codes</a>. When it is appropriate
+ to call <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a>, the extended error code is
+ SQLITE_LOCKED_SHAREDCACHE. Otherwise, in the "DROP TABLE|INDEX" case,
+ it is just plain SQLITE_LOCKED. Another solution might be to limit
+ the number of times that any single query could be reattempted (to say
+ 100). Although this might be less efficient than one might wish, the
+ situation in question is not likely to occur often.
+
+<div style="clear:both"></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/unlock_notify.in?m=490fe965003324fd8">2020-06-19 13:05:24</a> UTC </small></i></p>
+
diff --git a/www/uri.html b/www/uri.html
new file mode 100644
index 0000000..5d7409b
--- /dev/null
+++ b/www/uri.html
@@ -0,0 +1,380 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Uniform Resource Identifiers</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Uniform Resource Identifiers
+</div>
+</div>
+
+
+
+
+
+<h1 id="uri_filenames_in_sqlite"><span>1. </span>URI Filenames In SQLite</h1>
+
+<p>
+Beginning with <a href="releaselog/3_7_7.html">version 3.7.7</a> (2011-06-23),
+the SQLite database file argument to the
+<a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/open.html">sqlite3_open16()</a>, and <a href="c3ref/open.html">sqlite3_open_v2()</a> interfaces
+and to the <a href="lang_attach.html">ATTACH</a> command can be specified
+either as an ordinary filename or as a Uniform Resource Identifier or URI.
+The advantage of using a URI filename is that query parameters on the URI can
+be used to control details of the newly created database connection.
+For example, an alternative <a href="vfs.html">VFS</a> can be specified using a
+"vfs=" query parameter.
+Or the database can be opened read-only by using "mode=ro" as a query
+parameter.
+</p>
+
+<h1 id="backwards_compatibility"><span>2. </span>Backwards Compatibility</h1>
+
+<p>
+In order to maintain full backwards compatibility for legacy applications,
+the URI filename capability is disabled by default.
+URI filenames can be enabled or disabled using the <a href="compile.html#use_uri">SQLITE_USE_URI=1</a>
+or <a href="compile.html#use_uri">SQLITE_USE_URI=0</a> compile-time options.
+The compile-time setting for URI filenames can be changed
+at start-time using the <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">SQLITE_CONFIG_URI</a>,1)
+or <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiguri">SQLITE_CONFIG_URI</a>,0) configuration calls.
+Regardless of the compile-time or start-time settings, URI filenames
+can be enabled for individual database connections by including the
+<a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_URI</a> bit in the set of bits passed as the F parameter
+to <a href="c3ref/open.html">sqlite3_open_v2(N,P,F,V)</a>.
+</p>
+
+<p>
+If URI filenames are recognized when the database connection is originally
+opened, then URI filenames will also be recognized on <a href="lang_attach.html">ATTACH</a> statements.
+Similarly, if URI filenames are not recognized when the database connection
+is first opened, they will not be recognized by <a href="lang_attach.html">ATTACH</a>.
+</p>
+
+<p>
+Since SQLite always interprets any filename that does not begin
+with "<tt>file:</tt>"
+as an ordinary filename regardless of the URI setting, and because it is
+very unusual to have an actual file begin with "<tt>file:</tt>",
+it is safe for most applications to enable URI processing even if URI
+filenames are not currently being used.
+</p>
+
+<h1 id="uri_format"><span>3. </span>URI Format</h1>
+
+<p>
+According to <a href="http://tools.ietf.org/html/rfc3986">RFC 3986</a>, a URI consists
+of a scheme, an authority, a path, a query string, and a fragment. The
+scheme is always required. One of either the authority or the path is also
+always required. The query string and fragment are optional.
+</p>
+
+<p>
+SQLite uses the "<tt>file:</tt>" URI syntax to identify database files.
+SQLite strives to interpret file: URIs in exactly the same way as
+popular web-browsers such as
+<a href="http://www.mozilla.com/en-US/firefox/new/">Firefox</a>,
+<a href="http://www.google.com/chrome/">Chrome</a>,
+<a href="http://www.apple.com/safari/">Safari</a>,
+<a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie/home">Internet Explorer</a>, and
+<a href="http://www.opera.com/">Opera</a>,
+and command-line programs such as
+<a href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/start.mspx">Windows "start"</a> and the Mac OS-X
+<a href="http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/open.1.html">"open"</a> command.
+A succinct summary of the URI parsing rules follows:
+</p>
+
+<ul>
+<li> The scheme of the URI must be "<tt>file:</tt>". Any other scheme
+ results in the input being treated as an ordinary filename.
+</li><li> The authority may be omitted, may be blank, or may be
+ "<tt>localhost</tt>". Any other authority results in an error.
+ Exception: If SQLite is compiled with <a href="compile.html#allow_uri_authority">SQLITE_ALLOW_URI_AUTHORITY</a>
+ then any authority value other than "localhost" is passed through to the
+ underlying operating system as a UNC filename.
+</li><li> The path is optional if the authority is present. If the authority
+ is omitted then the path is required.
+</li><li> The query string is optional. If the query string is present, then
+ all query parameters are passed through into the xOpen method of
+ the underlying <a href="vfs.html">VFS</a>.
+</li><li> The fragment is optional. If present, it is ignored.
+</li></ul>
+
+<p>Zero or more escape sequences of the form "<b>%<i>HH</i></b>"
+(where <b><i>H</i></b> represents any hexadecimal digit) can occur
+in the path, query string, or fragment.</p>
+
+<p>A filename that is not a well-formed URI is interpreted as an
+ordinary filename.</p>
+
+<p>URIs are processed as UTF8 text.
+The filename argument sqlite3_open16() is converted from UTF16
+native byte order into UTF8 prior to processing.
+
+</p><h2 id="the_uri_path"><span>3.1. </span>The URI Path</h2>
+
+<p>The path component of the URI specifies the disk file that is the
+SQLite database to be opened. If the path component is omitted, then
+the database is stored in a temporary file that will be automatically
+deleted when the database connection closes. If the authority section
+is present, then the path is always an absolute pathname. If the
+authority section is omitted, then the path is an absolute pathname if it
+begins with the "/" character (ASCII code 0x2f) and is a relative
+pathname otherwise. On windows, if the absolute path begins with
+"<b>/<i>X</i>:/</b>" where <b><i>X</i></b> is any single ASCII alphabetic
+character ("a" through "z" or "A" through "Z") then the "<b><i>X:</i></b>"
+is understood to be the drive letter of the volume containing the file,
+not the toplevel directory.
+
+</p><p>An ordinary filename can usually be converted into an equivalent URI
+by the steps shown below. The one exception is that a relative windows
+pathname with a drive letter cannot be converted directly into a URI; it must
+be changed into an absolute pathname first.</p>
+
+<ol>
+<li>Convert all "<tt>?</tt>" characters into "<tt>%3f</tt>".
+</li><li>Convert all "<tt>#</tt>" characters into "<tt>%23</tt>".
+</li><li>On windows only, convert all "<tt>\</tt>" characters into "<tt>/</tt>".
+</li><li>Convert all sequences of two or more "<tt>/</tt>" characters into a
+ single "<tt>/</tt>" character.
+</li><li>On windows only, if the filename begins with a drive letter, prepend
+ a single "<tt>/</tt>" character.
+</li><li>Prepend the "<tt>file:</tt>" scheme.
+</li></ol>
+
+<h2 id="query_string"><span>3.2. </span>Query String</h2>
+
+<p>A URI filename can optionally be followed by a query string.
+The query string consists of text following the first "<tt>?</tt>"
+character but excluding the optional fragment that begins with
+"<tt>#</tt>". The query string is divided into key/value pairs.
+We usually refer to these key/value pairs as "query parameters".
+Key/value pairs are separated by a single "<tt>&amp;</tt>" character.
+The key comes first and is separated from the value by a single
+"<tt>=</tt>" character.
+Both key and value may contain <b>%HH</b> escape sequences.</p>
+
+<p>
+The text of query parameters is appended to the filename argument of
+the xOpen method of the <a href="vfs.html">VFS</a>.
+Any %HH escape sequences in the query parameters are resolved prior to
+being appended to the xOpen filename.
+A single zero-byte separates the xOpen filename argument from the key of
+the first query parameters, each key and value, and each subsequent key
+from the prior value.
+The list of query parameters appended to the xOpen filename
+is terminated by a single zero-length key.
+Note that the value of a query parameter can be an empty string.
+</p>
+
+<a name="coreqp"></a>
+
+<h2 id="recognized_query_parameters"><span>3.3. </span>Recognized Query Parameters</h2>
+
+<p>
+Some query parameters are interpreted by the SQLite core and used to
+modify the characteristics of the new connection. All query parameters
+are always passed through into the xOpen method of the <a href="vfs.html">VFS</a> even if
+they are previously read and interpreted by the SQLite core.
+</p>
+
+<p>
+The following query parameters are recognized by SQLite as of
+<a href="releaselog/3_15_0.html">version 3.15.0</a> (2016-10-14).
+New query parameters might be added in the future.
+</p>
+
+<dl>
+<a name="uricache"></a>
+
+<dt><b>cache=shared<br>cache=private</b></dt>
+<dd><p>The cache query parameter determines if the new database is opened
+using <a href="sharedcache.html">shared cache mode</a> or with a private cache.
+</p></dd>
+
+<a name="uriimmutable"></a>
+
+<dt><b>immutable=1</b></dt>
+<dd><p>The immutable query parameter is a boolean that signals to
+SQLite that the underlying database file is held on read-only media
+and cannot be modified, even by another process with elevated
+privileges. SQLite always opens immutable database files
+read-only and it skips all file locking and change detection
+on immutable database files. If this query parameter (or
+the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_IMMUTABLE</a> bit in xDeviceCharacteristics)
+asserts that a database file is immutable and that file
+changes anyhow, then SQLite might return incorrect query
+results and/or <a href="rescode.html#corrupt">SQLITE_CORRUPT</a> errors.
+</p></dd>
+
+<a name="urimode"></a>
+
+<dt><b>mode=ro<br>mode=rw<br>mode=rwc<br>mode=memory</b></dt>
+<dd><p>The mode query parameter determines if the new database is opened
+read-only, read-write, read-write and created if it does not exist, or
+that the database is a pure in-memory database that never interacts with
+disk, respectively.
+</p></dd>
+
+<a name="urimodeof"></a>
+
+<dt><b>modeof=</b><i>filename</i></dt>
+<dd><p>When creating a new database file during <a href="c3ref/open.html">sqlite3_open_v2()</a>
+on unix systems, SQLite will try to set the permissions of the new
+database file to match the existing file "<i>filename</i>".
+</p></dd>
+
+<a name="urinolock"></a>
+
+<dt><b>nolock=1</b></dt>
+<dd><p>The nolock query parameter is a boolean that disables all calls
+to the xLock, xUnlock, and xCheckReservedLock methods of the VFS when true.
+The nolock query parameter might be used, for example, when trying to
+access a file on a filesystem that does not support file locking.
+Caution: If two or more <a href="c3ref/sqlite3.html">database connections</a> try to interact with
+the same SQLite database and one or more of those connections has
+enabled "nolock", then database corruption can result. The "nolock"
+query parameter should only be used if the application can guarantee
+that writes to the database are serialized.
+
+<a name="uripsow"></a>
+
+</p></dd><dt><b>psow=0<br>psow=1</b></dt>
+<dd><p>The psow query parameter overrides the <a href="psow.html">powersafe overwrite</a>
+property of the database file being opened. The psow query parameter
+works with the default windows and unix <a href="vfs.html">VFSes</a> but might be a no-op for
+other proprietary or non-standard VFSes.
+</p></dd>
+
+<a name="urivfs"></a>
+
+<dt><b>vfs=</b><i>NAME</i></dt>
+<dd><p>The vfs query parameter causes the database connection to be opened
+using the <a href="vfs.html">VFS</a> called <i>NAME</i>.
+The open attempt fails if <i>NAME</i> is not the name of a <a href="vfs.html">VFS</a> that
+is built into SQLite or that has been previously registered using
+<a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>.</p></dd>
+</dl>
+
+<h1 id="see_also"><span>4. </span>See Also</h1>
+
+<ul>
+<li> <a href="c3ref/open.html#urifilenamesinsqlite3open">URI filenames in sqlite3_open()</a>
+</li><li> <a href="c3ref/open.html#urifilenameexamples">URI filename examples</a>
+</li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/uri.in?m=adfa05577ead37cf9">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/useovernet.html b/www/useovernet.html
new file mode 100644
index 0000000..228d7bf
--- /dev/null
+++ b/www/useovernet.html
@@ -0,0 +1,365 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Over a Network, Caveats and Considerations</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+
+<h1 align="center">SQLite Over a Network,<br/>Caveats and Considerations</h1>
+
+
+<h1>Introduction</h1>
+<p>
+ Users of the SQLite library, particularly application developers,
+ who want to access a SQLite database
+ from different systems connected by a network are often
+ tempted to simply open a <a href="c3ref/sqlite3.html">database connection</a> by specifying
+ a filename which references a database file somewhere within
+ a network filesystem. ("remote database" here)
+ This "file" is then accessed by means of
+ OS API's which permit the illusion of I/O from/to a local file.
+ The illusion is good but imperfect in important ways.
+</p><p>
+ This simple, "remote database" approach is usually not the best way
+ to use a single SQLite database from multiple systems,
+ (even if it appears to "work"),
+ as it often leads to various kinds of trouble and grief.
+ Because these problems are inevitable with some usages,
+ but not frequent or repeatable,
+ it behooves application developers to not rely
+ on early testing success to decide
+ that their remote database use will work as desired.
+</p>
+<h1>Issues Arising with Remote Database Files</h1>
+<p>
+This diagram shows components and their linkages
+for reference in the discussion following:
+</p>
+
+<div class="center imgcontainer">
+<div style="max-width:705px;"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" width="705" height="84" viewBox="0 0 940.32 112.32">
+<path d="M2,110L182,110L182,2L2,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="92" y="39" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">Client</text>
+<text x="92" y="73" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">Application</text>
+<path d="M380,110L560,110L560,2L380,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="470" y="22" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">SQLite</text>
+<text x="470" y="56" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">Database</text>
+<text x="470" y="90" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">Engine</text>
+<path d="M758,12L758,99A90 10 0 0 0 938 99L938,12A90 10 0 0 0 758 12A90 10 0 0 0 938 12" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="848" y="47" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">Database</text>
+<text x="848" y="81" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">File(s)</text>
+<polygon points="182,56 193,51 193,60" style="fill:rgb(0,0,0)"/>
+<polygon points="380,56 368,60 368,51" style="fill:rgb(0,0,0)"/>
+<path d="M187,56L374,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="37" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">SQLite API</text>
+<text x="281" y="74" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">Calls</text>
+<polygon points="560,56 571,51 571,60" style="fill:rgb(0,0,0)"/>
+<polygon points="758,56 746,60 746,51" style="fill:rgb(0,0,0)"/>
+<path d="M565,56L752,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="659" y="37" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">DB Engine</text>
+<text x="659" y="74" text-anchor="middle" fill="rgb(0,0,0)" font-size="140%" dominant-baseline="central">File I/O</text>
+</svg>
+</div>
+</div>
+<p>
+ The issues arise from the properties and utilization
+ of the two data/control channels between the above three blocks.
+</p>
+
+<h2>Channel Traffic Volume</h2>
+<p>
+ The "API Call" channel carries less information
+ than the "File I/O" channel.
+ API calls to submit queries or specify data modification
+ normally require substantially fewer bits to be passed
+ back and forth than are transferred to/from
+ the database file to store or find the data.
+ Query result retrieval will normally require much more file traffic
+ than API traffic because the data to be returned is rarely
+ to be found without reading unrequested data.
+</p>
+<h2>Channel Bandwidth</h2>
+<p>
+ The API Call channel operates at processor main memory speeds
+ (Giga-words/second), with data often passed by reference (and so not copied.)
+ In contrast, even the fastest File I/O channels are slower.
+ They require the data to be copied, usually over a medium
+ requiring bit-serialization. For spinning magnetic media,
+ transfers await platter rotation and head movement, then
+ are limited by spin velocity.
+</p>
+<p>
+ When the File I/O channel includes a network connection,
+ (in addition to some genuine File I/O at its far end),
+ additional slowness is imposed. Even where raw transfer
+ rate does not limit bandwidth, the traffic must still be
+ packetized and buffered at both ends.
+ Additional layers of I/O handlers add scheduling delays.
+ However, slowed transfers are the least significant
+ issue with network filesystems.
+</p>
+<h2>Channel Reliability</h2>
+<p>
+ The "API Call" channel is highly reliable, to the extent
+ that error rates are unstated and ignored as negligible.
+ The channel fails only when the system loses power
+ (excepting meteorites, etc.)
+</p>
+<p>
+ The "File I/O" channel, when it directly reaches a local storage device,
+ is also highly reliable.
+ (Spinning storage MTBF exceeds 1 million hours,
+ and NVRAM lasts longer.)
+ Local devices also have a characteristic
+ which is critical for enabling database management software
+ to be designed to ensure <a href="transactional.html">ACID</a> behavior:
+ When all process writes to the device have completed,
+ (when POSIX fsync() or Windows FlushFileBuffers() calls return),
+ the filesystem then either has
+ stored the "written" data or will do so
+ before storing any subsequently written data.
+</p>
+<p>
+ When network filesystem apparatus and software layers are interposed
+ between filesystem clients and a filesystem over an actual storage device,
+ significant sources of failure and misbehavior are introduced.
+ While network data transfers are error-checked well, transfer packets
+ do not all reliably arrive at their destination once sent.
+ Some packets are clobbered by other packets and must be resent.
+ Under packet clobbering conditions, repeated retries
+ can impose delays exceeding
+ what is needed for similar data to reach local storage.
+ Some portions of what a client writes can end up stored
+ out of time order relative to other portions written.
+</p>
+<p>
+ Because of the disordering and outright data loss
+ which occur in network filesystem writes, it is critical
+ that sets of file writes can be accurately known to be done
+ before a subsequent set of file writes begins.
+ This assurance is obtained by use of robustly designed
+ and correctly implemented fsync() (or equivalent) OS functions.
+ Unfortunately for some applications, network filesystem sync
+ operation can be less robust than local filesystem sync.
+ Attaining robust sync in the face of network packet transport errors
+ is hard, and safeguards are sometimes relaxed in favor of performance.
+</p>
+<p>
+ A similar hazard arises with file locking in network filesystems.
+ SQLite relies on exclusive locks for write operations, and those have
+ been known to operate incorrectly for some network filesystems. This
+ has led to database corruption. That may happen again as the designers
+ of such change their implementation to suit more common use cases.
+</p>
+<p>
+ The bottom line is that network filesystem sync and locking reliability
+ vary among implementations and installations. The design
+ assumptions upon which it relies may hold more true where
+ an application is tested than where it is relied upon.
+ <b>Rely upon it at your (and your customers') peril.</b>
+ See <a href="lockingv3.html#how_to_corrupt">How To Corrupt Your Database Files</a>.
+</p>
+
+<h1>Performance and Reliability Issues</h1>
+<p>
+ From the above diagram and discussion, it is obvious that
+ performance (aka "speed") is degraded by insertion
+ of a network link into one of the two channels.
+ Consideration of relative traffic volumes between
+ the API Call channel and the File I/O channel
+ reveals that such insertion will have less performance
+ impact at the API Call channel.
+</p>
+<p>
+ Consideration of reliability impact is easier, with a clearer outcome:
+ Inserting a network link into the API Call channel may also result
+ in call failures at times. But if the Client Application
+ has bothered to use SQL/SQLite transactions properly,
+ such failures will only cause a transaction to fail
+ and be rolled back, without compromising the integrity
+ of the data. In contrast, if the network link is
+ inserted into the File I/O channel, transactions may fail
+ (as for the API Call insertion) but with the additional
+ effect that the remote database is corrupted.
+</p>
+<p>
+ These network unreliability issues can be mitigated,
+ completely or to an acceptable degree,
+ by using SQLite in rollback mode.
+ However, the SQLite library is not tested in across-a-network
+ scenarios, nor is that reasonably possible.
+ Hence, use of a remote database is done <b>at the user's risk</b>.
+</p>
+
+<h1>Recommendations</h1>
+<p>
+ Generally, if your data is separated from the application
+ by a network, you want to use a client/server database.
+ This is due to the fact that the database engine acts
+ as a bandwidth-reducing filter on the database traffic.
+</p><p>
+ If your data is separated from the application by a network,
+ you want the low-traffic link to be across the network,
+ not the high-traffic link. This means that the database engine
+ needs to be on the same machine as the database itself.
+ Such is the case with a client/server database like PostgreSQL.
+ SQLite is different in that the database engine runs on
+ the same machine as the application, which forces the
+ higher-traffic link to traverse the network in remote
+ database scenarios. That normally results in lower performance.
+</p><p>
+ Network filesystems do not support the ability to do
+ simultaneous reads and writes while at the same time
+ keeping the database consistent.
+ So if you have multiple clients on multiple different
+ machines which need to do simultaneous database
+ reads and writes, you have these choices:
+</p><p>
+ 1. Use a client/server database engine.
+ <a href=https://postgresql.org/>PostgreSQL</a>
+ is an excellent choice. A variation of this is:
+</p><p>
+ 2. Host an SQLite database in <a href="wal.html">WAL mode</a>, but do
+ all reads and writes from processes on the same machine
+ that stores the database file.
+ Implement a proxy that runs on the database machine that
+ relays read/write requests from remote machines.
+</p><p>
+ 3. Use SQLite in <a href="isolation.html">rollback mode</a>.
+ This means you can have multiple simultaneous readers or one writer,
+ but not simultaneous readers and writers.
+</p><p>
+ Application programmers should be cognizant of the possibility
+ that their application's users will elect to use a remote database
+ if they can do so. Unless one of the above choices
+ has been effected, or one at a time, exclusive access is used,
+ a programmer should consider blocking that
+ election unless reliability is of little importance.
+</p>
+<h1>Summary</h1>
+<p>
+ Choose the technology that is right for you and your customers.
+ If your data lives on a different machine from your application,
+ then you should consider a client/server database.
+ SQLite is designed for situations where the data and application
+ coexist on the same machine.
+ SQLite can still be made to work in many remote database
+ situations, but a client/server solution will usually work
+ better in that scenario.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/useovernet.in?m=9c50e45c371c9589d">2022-06-22 21:14:29</a> UTC </small></i></p>
+
diff --git a/www/vdbe.html b/www/vdbe.html
new file mode 100644
index 0000000..bfde9f3
--- /dev/null
+++ b/www/vdbe.html
@@ -0,0 +1,1813 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Virtual Database Engine of SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+<h2>The Virtual Database Engine of SQLite</h2>
+
+<blockquote><font color="red">
+<b>Obsolete Documentation Warning:</b>
+This document describes the virtual machine used in SQLite version 2.8.0.
+The virtual machine in SQLite version 3.0 and 3.1 is similar in
+concept but is now register-based instead of stack-based, has five
+operands per opcode instead of three, and has a different set of
+opcodes from those shown below. See the <a href="opcode.html">virtual machine instructions</a>
+document for the current set of VDBE opcodes and a brief overview
+of how the VDBE operates. This document is retained as an historical
+reference.
+</font></blockquote>
+
+
+<p>If you want to know how the SQLite library works internally,
+you need to begin with a solid understanding of the Virtual Database
+Engine or VDBE. The VDBE occurs right in the middle of the
+processing stream (see the <a href="arch.html">architecture diagram</a>)
+and so it seems to touch most parts of the library. Even
+parts of the code that do not directly interact with the VDBE
+are usually in a supporting role. The VDBE really is the heart of
+SQLite.</p>
+
+<p>This article is a brief introduction to how the VDBE
+works and in particular how the various VDBE instructions
+(documented <a href="opcode.html">here</a>) work together
+to do useful things with the database. The style is tutorial,
+beginning with simple tasks and working toward solving more
+complex problems. Along the way we will visit most
+submodules in the SQLite library. After completing this tutorial,
+you should have a pretty good understanding of how SQLite works
+and will be ready to begin studying the actual source code.</p>
+
+<h2>Preliminaries</h2>
+
+<p>The VDBE implements a virtual computer that runs a program in
+its virtual machine language. The goal of each program is to
+interrogate or change the database. Toward this end, the machine
+language that the VDBE implements is specifically designed to
+search, read, and modify databases.</p>
+
+<p>Each instruction of the VDBE language contains an opcode and
+three operands labeled P1, P2, and P3. Operand P1 is an arbitrary
+integer. P2 is a non-negative integer. P3 is a pointer to a data
+structure or zero-terminated string, possibly null. Only a few VDBE
+instructions use all three operands. Many instructions use only
+one or two operands. A significant number of instructions use
+no operands at all but instead take their data and store their results
+on the execution stack. The details of what each instruction
+does and which operands it uses are described in the separate
+<a href="opcode.html">opcode description</a> document.</p>
+
+<p>A VDBE program begins
+execution on instruction 0 and continues with successive instructions
+until it either (1) encounters a fatal error, (2) executes a
+Halt instruction, or (3) advances the program counter past the
+last instruction of the program. When the VDBE completes execution,
+all open database cursors are closed, all memory is freed, and
+everything is popped from the stack.
+So there are never any worries about memory leaks or
+undeallocated resources.</p>
+
+<p>If you have done any assembly language programming or have
+worked with any kind of abstract machine before, all of these
+details should be familiar to you. So let's jump right in and
+start looking as some code.</p>
+
+<a name="insert1"></a>
+<h2>Inserting Records Into The Database</h2>
+
+<p>We begin with a problem that can be solved using a VDBE program
+that is only a few instructions long. Suppose we have an SQL
+table that was created like this:</p>
+
+<blockquote><pre>
+CREATE TABLE examp(one text, two int);
+</pre></blockquote>
+
+<p>In words, we have a database table named "examp" that has two
+columns of data named "one" and "two". Now suppose we want to insert a single
+record into this table. Like this:</p>
+
+<blockquote><pre>
+INSERT INTO examp VALUES('Hello, World!',99);
+</pre></blockquote>
+
+<p>We can see the VDBE program that SQLite uses to implement this
+INSERT using the <b>sqlite</b> command-line utility. First start
+up <b>sqlite</b> on a new, empty database, then create the table.
+Next change the output format of <b>sqlite</b> to a form that
+is designed to work with VDBE program dumps by entering the
+".explain" command.
+Finally, enter the [INSERT] statement shown above, but precede the
+[INSERT] with the special keyword [EXPLAIN]. The [EXPLAIN] keyword
+will cause <b>sqlite</b> to print the VDBE program rather than
+execute it. We have:</p>
+<blockquote><tt>$&nbsp;<b>sqlite&nbsp;test_database_1</b><br>
+sqlite&gt;&nbsp;<b>CREATE&nbsp;TABLE&nbsp;examp(one&nbsp;text,&nbsp;two&nbsp;int);</b><br>
+sqlite&gt;&nbsp;<b>.explain</b><br>
+sqlite&gt;&nbsp;<b>EXPLAIN&nbsp;INSERT&nbsp;INTO&nbsp;examp&nbsp;VALUES('Hello,&nbsp;World!',99);</b><br>
+addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;81&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewRecno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello,&nbsp;World!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakeRecord&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PutIntKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Commit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote><p>As you can see above, our simple insert statement is
+implemented in 12 instructions. The first 3 and last 2 instructions are
+a standard prologue and epilogue, so the real work is done in the middle
+7 instructions. There are no jumps, so the program executes once through
+from top to bottom. Let's now look at each instruction in detail.<p>
+<blockquote><tt>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;81&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>The instruction <a href="opcode.html#Transaction">Transaction</a>
+begins a transaction. The transaction ends when a Commit or Rollback
+opcode is encountered. P1 is the index of the database file on which
+the transaction is started. Index 0 is the main database file. A write
+lock is obtained on the database file when a transaction is started.
+No other process can read or write the file while the transaction is
+underway. Starting a transaction also creates a rollback journal. A
+transaction must be started before any changes can be made to the
+database.</p>
+
+<p>The instruction <a href="opcode.html#VerifyCookie">VerifyCookie</a>
+checks cookie 0 (the database schema version) to make sure it is equal
+to P2 (the value obtained when the database schema was last read).
+P1 is the database number (0 for the main database). This is done to
+make sure the database schema hasn't been changed by another thread, in
+which case it has to be reread.</p>
+
+<p> The second <a href="opcode.html#Transaction">Transaction</a>
+instruction begins a transaction and starts a rollback journal for
+database 1, the database used for temporary tables.</p>
+<blockquote><tt>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp</tt></blockquote>
+<p> The instruction <a href="opcode.html#Integer">Integer</a> pushes
+the integer value P1 (0) onto the stack. Here 0 is the number of the
+database to use in the following OpenWrite instruction. If P3 is not
+NULL then it is a string representation of the same integer. Afterwards
+the stack looks like this:</p>
+<blockquote><table border=2><tr><td align=left>(integer) 0</td></tr></table></blockquote>
+<p> The instruction <a href="opcode.html#OpenWrite">OpenWrite</a> opens
+a new read/write cursor with handle P1 (0 in this case) on table "examp",
+whose root page is P2 (3, in this database file). Cursor handles can be
+any non-negative integer. But the VDBE allocates cursors in an array
+with the size of the array being one more than the largest cursor. So
+to conserve memory, it is best to use handles beginning with zero and
+working upward consecutively. Here P3 ("examp") is the name of the
+table being opened, but this is unused, and only generated to make the
+code easier to read. This instruction pops the database number to use
+(0, the main database) from the top of the stack, so afterwards the
+stack is empty again.</p>
+<blockquote><tt>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewRecno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p> The instruction <a href="opcode.html#NewRecno">NewRecno</a> creates
+a new integer record number for the table pointed to by cursor P1. The
+record number is one not currently used as a key in the table. The new
+record number is pushed onto the stack. Afterwards the stack looks like
+this:</p>
+<blockquote><table border=2><tr><td align=left>(integer) new record key</td></tr></table></blockquote><blockquote><tt>6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello,&nbsp;World!</tt></blockquote>
+<p> The instruction <a href="opcode.html#String">String</a> pushes its
+P3 operand onto the stack. Afterwards the stack looks like this:</p>
+<blockquote><table border=2><tr><td align=left>(string) "Hello, World!"</td></tr><tr><td align=left>(integer) new record key</td></tr></table></blockquote><blockquote><tt>7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;99</tt></blockquote>
+<p> The instruction <a href="opcode.html#Integer">Integer</a> pushes
+its P1 operand (99) onto the stack. Afterwards the stack looks like
+this:</p>
+<blockquote><table border=2><tr><td align=left>(integer) 99</td></tr><tr><td align=left>(string) "Hello, World!"</td></tr><tr><td align=left>(integer) new record key</td></tr></table></blockquote><blockquote><tt>8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakeRecord&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p> The instruction <a href="opcode.html#MakeRecord">MakeRecord</a> pops
+the top P1 elements off the stack (2 in this case) and converts them into
+the binary format used for storing records in a database file.
+(See the <a href="fileformat.html">file format</a> description for
+details.) The new record generated by the MakeRecord instruction is
+pushed back onto the stack. Afterwards the stack looks like this:</p>
+</ul>
+<blockquote><table border=2><tr><td align=left>(record) "Hello, World!", 99</td></tr><tr><td align=left>(integer) new record key</td></tr></table></blockquote><blockquote><tt>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PutIntKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1</tt></blockquote>
+<p> The instruction <a href="opcode.html#PutIntKey">PutIntKey</a> uses
+the top 2 stack entries to write an entry into the table pointed to by
+cursor P1. A new entry is created if it doesn't already exist or the
+data for an existing entry is overwritten. The record data is the top
+stack entry, and the key is the next entry down. The stack is popped
+twice by this instruction. Because operand P2 is 1 the row change count
+is incremented and the rowid is stored for subsequent return by the
+sqlite_last_insert_rowid() function. If P2 is 0 the row change count is
+unmodified. This instruction is where the insert actually occurs.</p>
+<blockquote><tt>10&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p> The instruction <a href="opcode.html#Close">Close</a> closes a
+cursor previously opened as P1 (0, the only open cursor). If P1 is not
+currently open, this instruction is a no-op.</p>
+<blockquote><tt>11&nbsp;&nbsp;&nbsp;&nbsp;Commit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p> The instruction <a href="opcode.html#Commit">Commit</a> causes all
+modifications to the database that have been made since the last
+Transaction to actually take effect. No additional modifications are
+allowed until another transaction is started. The Commit instruction
+deletes the journal file and releases the write lock on the database.
+A read lock continues to be held if there are still cursors open.</p>
+<blockquote><tt>12&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p> The instruction <a href="opcode.html#Halt">Halt</a> causes the VDBE
+engine to exit immediately. All open cursors, Lists, Sorts, etc are
+closed automatically. P1 is the result code returned by sqlite_exec().
+For a normal halt, this should be SQLITE_OK (0). For errors, it can be
+some other value. The operand P2 is only used when there is an error.
+There is an implied "Halt 0 0 0" instruction at the end of every
+program, which the VDBE appends when it prepares a program to run.</p>
+
+
+<a name="trace"></a>
+<h2>Tracing VDBE Program Execution</h2>
+
+<p>If the SQLite library is compiled without the NDEBUG preprocessor
+macro, then the PRAGMA <a href="pragma.html#pragma_vdbe_trace">vdbe_trace
+</a> causes the VDBE to trace the execution of programs. Though this
+feature was originally intended for testing and debugging, it can also
+be useful in learning about how the VDBE operates.
+Use "<tt>PRAGMA&nbsp;vdbe_trace=ON;</tt>" to turn tracing on and
+"<tt>PRAGMA&nbsp;vdbe_trace=OFF</tt>" to turn tracing back off.
+Like this:</p>
+<blockquote><tt>sqlite&gt;&nbsp;<b>PRAGMA&nbsp;vdbe_trace=ON;</b><br>
+&nbsp;&nbsp;&nbsp;0&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+sqlite&gt;&nbsp;<b>INSERT&nbsp;INTO&nbsp;examp&nbsp;VALUES('Hello,&nbsp;World!',99);</b><br>
+&nbsp;&nbsp;&nbsp;0&nbsp;Transaction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+&nbsp;&nbsp;&nbsp;1&nbsp;VerifyCookie&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;81<br>
+&nbsp;&nbsp;&nbsp;2&nbsp;Transaction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+&nbsp;&nbsp;&nbsp;3&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+Stack:&nbsp;i:0<br>
+&nbsp;&nbsp;&nbsp;4&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;examp<br>
+&nbsp;&nbsp;&nbsp;5&nbsp;NewRecno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+Stack:&nbsp;i:2<br>
+&nbsp;&nbsp;&nbsp;6&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;Hello,&nbsp;World!<br>
+Stack:&nbsp;t[Hello,.World!]&nbsp;i:2<br>
+&nbsp;&nbsp;&nbsp;7&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;99&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;99<br>
+Stack:&nbsp;si:99&nbsp;t[Hello,.World!]&nbsp;i:2<br>
+&nbsp;&nbsp;&nbsp;8&nbsp;MakeRecord&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+Stack:&nbsp;s[...Hello,.World!.99]&nbsp;i:2<br>
+&nbsp;&nbsp;&nbsp;9&nbsp;PutIntKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;1<br>
+&nbsp;&nbsp;10&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+&nbsp;&nbsp;11&nbsp;Commit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+&nbsp;&nbsp;12&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>With tracing mode on, the VDBE prints each instruction prior
+to executing it. After the instruction is executed, the top few
+entries in the stack are displayed. The stack display is omitted
+if the stack is empty.</p>
+
+<p>On the stack display, most entries are shown with a prefix
+that tells the datatype of that stack entry. Integers begin
+with "<tt>i:</tt>". Floating point values begin with "<tt>r:</tt>".
+(The "r" stands for "real-number".) Strings begin with either
+"<tt>s:</tt>", "<tt>t:</tt>", "<tt>e:</tt>" or "<tt>z:</tt>".
+The difference among the string prefixes is caused by how their
+memory is allocated. The z: strings are stored in memory obtained
+from <b>malloc()</b>. The t: strings are statically allocated.
+The e: strings are ephemeral. All other strings have the s: prefix.
+This doesn't make any difference to you,
+the observer, but it is vitally important to the VDBE since the
+z: strings need to be passed to <b>free()</b> when they are
+popped to avoid a memory leak. Note that only the first 10
+characters of string values are displayed and that binary
+values (such as the result of the MakeRecord instruction) are
+treated as strings. The only other datatype that can be stored
+on the VDBE stack is a NULL, which is display without prefix
+as simply "<tt>NULL</tt>". If an integer has been placed on the
+stack as both an integer and a string, its prefix is "<tt>si:</tt>".
+
+
+<a name="query1"></a>
+<h2>Simple Queries</h2>
+
+<p>At this point, you should understand the basics of how the VDBE
+writes to a database. Now let's look at how it does queries.
+We will use the following simple SELECT statement as our example:</p>
+
+<blockquote><pre>
+SELECT * FROM examp;
+</pre></blockquote>
+
+<p>The VDBE program generated for this SQL statement is as follows:</p>
+<blockquote><tt>sqlite&gt;&nbsp;<b>EXPLAIN&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;examp;</b><br>
+addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;two&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;81&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Callback&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>Before we begin looking at this problem, let's briefly review
+how queries work in SQLite so that we will know what we are trying
+to accomplish. For each row in the result of a query,
+SQLite will invoke a callback function with the following
+prototype:</p>
+
+<blockquote><pre>
+int Callback(void *pUserData, int nColumn, char *azData[], char *azColumnName[]);
+</pre></blockquote>
+
+<p>The SQLite library supplies the VDBE with a pointer to the callback function
+and the <b>pUserData</b> pointer. (Both the callback and the user data were
+originally passed in as arguments to the <b>sqlite_exec()</b> API function.)
+The job of the VDBE is to
+come up with values for <b>nColumn</b>, <b>azData[]</b>,
+and <b>azColumnName[]</b>.
+<b>nColumn</b> is the number of columns in the results, of course.
+<b>azColumnName[]</b> is an array of strings where each string is the name
+of one of the result columns. <b>azData[]</b> is an array of strings holding
+the actual data.</p>
+<blockquote><tt>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;two</tt></blockquote>
+<p>The first two instructions in the VDBE program for our query are
+concerned with setting up values for <b>azColumn</b>.
+The <a href="opcode.html#ColumnName">ColumnName</a> instructions tell
+the VDBE what values to fill in for each element of the <b>azColumnName[]</b>
+array. Every query will begin with one ColumnName instruction for each
+column in the result, and there will be a matching Column instruction for
+each one later in the query.
+</p>
+<blockquote><tt>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;81</tt></blockquote>
+<p>Instructions 2 and 3 open a read cursor on the database table that is
+to be queried. This works the same as the OpenWrite instruction in the
+INSERT example except that the cursor is opened for reading this time
+instead of for writing. Instruction 4 verifies the database schema as
+in the INSERT example.</p>
+<blockquote><tt>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10</tt></blockquote>
+<p> The <a href="opcode.html#Rewind">Rewind</a> instruction initializes
+a loop that iterates over the "examp" table. It rewinds the cursor P1
+to the first entry in its table. This is required by the Column and
+Next instructions, which use the cursor to iterate through the table.
+If the table is empty, then jump to P2 (10), which is the instruction just
+past the loop. If the table is not empty, fall through to the following
+instruction at 6, which is the beginning of the loop body.</p>
+<blockquote><tt>6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Callback&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p> The instructions 6 through 8 form the body of the loop that will
+execute once for each record in the database file.
+
+The <a href="opcode.html#Column">Column</a> instructions at addresses 6
+and 7 each take the P2-th column from the P1-th cursor and push it onto
+the stack. In this example, the first Column instruction is pushing the
+value for the column "one" onto the stack and the second Column
+instruction is pushing the value for column "two".
+
+The <a href="opcode.html#Callback">Callback</a> instruction at address 8
+invokes the callback() function. The P1 operand to Callback becomes the
+value for <b>nColumn</b>. The Callback instruction pops P1 values from
+the stack and uses them to fill the <b>azData[]</b> array.</p>
+<blockquote><tt>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6</tt></blockquote>
+<p>The instruction at address 9 implements the branching part of the
+loop. Together with the Rewind at address 5 it forms the loop logic.
+This is a key concept that you should pay close attention to.
+The <a href="opcode.html#Next">Next</a> instruction advances the cursor
+P1 to the next record. If the cursor advance was successful, then jump
+immediately to P2 (6, the beginning of the loop body). If the cursor
+was at the end, then fall through to the following instruction, which
+ends the loop.</p>
+<blockquote><tt>10&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>The Close instruction at the end of the program closes the
+cursor that points into the table "examp". It is not really necessary
+to call Close here since all cursors will be automatically closed
+by the VDBE when the program halts. But we needed an instruction
+for the Rewind to jump to so we might as well go ahead and have that
+instruction do something useful.
+The Halt instruction ends the VDBE program.</p>
+
+<p>Note that the program for this SELECT query didn't contain the
+Transaction and Commit instructions used in the INSERT example. Because
+the SELECT is a read operation that doesn't alter the database, it
+doesn't require a transaction.</p>
+
+<a name="query2"></a>
+<h2>A Slightly More Complex Query</h2>
+
+<p>The key points of the previous example were the use of the Callback
+instruction to invoke the callback function, and the use of the Next
+instruction to implement a loop over all records of the database file.
+This example attempts to drive home those ideas by demonstrating a
+slightly more complex query that involves more columns of
+output, some of which are computed values, and a WHERE clause that
+limits which records actually make it to the callback function.
+Consider this query:</p>
+
+<blockquote><pre>
+SELECT one, two, one || two AS 'both'
+FROM examp
+WHERE one LIKE 'H%'
+</pre></blockquote>
+
+<p>This query is perhaps a bit contrived, but it does serve to
+illustrate our points. The result will have three column with
+names "one", "two", and "both". The first two columns are direct
+copies of the two columns in the table and the third result
+column is a string formed by concatenating the first and
+second columns of the table.
+Finally, the
+WHERE clause says that we will only chose rows for the
+results where the "one" column begins with an "H".
+Here is what the VDBE program looks like for this query:</p>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;two<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;both<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;81<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;H%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Function&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr(0x7f1ac0)<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;IfNot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;Concat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;Callback&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>Except for the WHERE clause, the structure of the program for
+this example is very much like the prior example, just with an
+extra column. There are now 3 columns, instead of 2 as before,
+and there are three ColumnName instructions.
+A cursor is opened using the OpenRead instruction, just like in the
+prior example. The Rewind instruction at address 6 and the
+Next at address 17 form a loop over all records of the table.
+The Close instruction at the end is there to give the
+Rewind instruction something to jump to when it is done. All of
+this is just like in the first query demonstration.</p>
+
+<p>The Callback instruction in this example has to generate
+data for three result columns instead of two, but is otherwise
+the same as in the first query. When the Callback instruction
+is invoked, the left-most column of the result should be
+the lowest in the stack and the right-most result column should
+be the top of the stack. We can see the stack being set up
+this way at addresses 11 through 15. The Column instructions at
+11 and 12 push the values for the first two columns in the result.
+The two Column instructions at 13 and 14 pull in the values needed
+to compute the third result column and the Concat instruction at
+15 joins them together into a single entry on the stack.</p>
+
+<p>The only thing that is really new about the current example
+is the WHERE clause which is implemented by instructions at
+addresses 7 through 10. Instructions at address 7 and 8 push
+onto the stack the value of the "one" column from the table
+and the literal string "H%".
+The <a href="opcode.html#Function">Function</a> instruction at address 9
+pops these two values from the stack and pushes the result of the LIKE()
+function back onto the stack.
+The <a href="opcode.html#IfNot">IfNot</a> instruction pops the top stack
+value and causes an immediate jump forward to the Next instruction if the
+top value was false (<em>not</em> not like the literal string "H%").
+Taking this jump effectively skips the callback, which is the whole point
+of the WHERE clause. If the result
+of the comparison is true, the jump is not taken and control
+falls through to the Callback instruction below.</p>
+
+<p>Notice how the LIKE operator is implemented. It is a user-defined
+function in SQLite, so the address of its function definition is
+specified in P3. The operand P1 is the number of function arguments for
+it to take from the stack. In this case the LIKE() function takes 2
+arguments. The arguments are taken off the stack in reverse order
+(right-to-left), so the pattern to match is the top stack element, and
+the next element is the data to compare. The return value is pushed
+onto the stack.</p>
+
+
+<a name="pattern1"></a>
+<h2>A Template For SELECT Programs</h2>
+
+<p>The first two query examples illustrate a kind of template that
+every SELECT program will follow. Basically, we have:</p>
+
+<p>
+<ol>
+<li>Initialize the <b>azColumnName[]</b> array for the callback.</li>
+<li>Open a cursor into the table to be queried.</li>
+<li>For each record in the table, do:
+ <ol type="a">
+ <li>If the WHERE clause evaluates to FALSE, then skip the steps that
+ follow and continue to the next record.</li>
+ <li>Compute all columns for the current row of the result.</li>
+ <li>Invoke the callback function for the current row of the result.</li>
+ </ol>
+<li>Close the cursor.</li>
+</ol>
+</p>
+
+<p>This template will be expanded considerably as we consider
+additional complications such as joins, compound selects, using
+indices to speed the search, sorting, and aggregate functions
+with and without GROUP BY and HAVING clauses.
+But the same basic ideas will continue to apply.</p>
+
+<h2>UPDATE And DELETE Statements</h2>
+
+<p>The UPDATE and DELETE statements are coded using a template
+that is very similar to the SELECT statement template. The main
+difference, of course, is that the end action is to modify the
+database rather than invoke a callback function. Because it modifies
+the database it will also use transactions. Let's begin
+by looking at a DELETE statement:</p>
+
+<blockquote><pre>
+DELETE FROM examp WHERE two<50;
+</pre></blockquote>
+
+<p>This DELETE statement will remove every record from the "examp"
+table where the "two" column is less than 50.
+The code generated to do this is as follows:</p>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;178<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Recno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;ListWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;ListRewind&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;ListRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;NotExists&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Goto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;ListReset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;Commit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>Here is what the program must do. First it has to locate all of
+the records in the table "examp" that are to be deleted. This is
+done using a loop very much like the loop used in the SELECT examples
+above. Once all records have been located, then we can go back through
+and delete them one by one. Note that we cannot delete each record
+as soon as we find it. We have to locate all records first, then
+go back and delete them. This is because the SQLite database
+backend might change the scan order after a delete operation.
+And if the scan
+order changes in the middle of the scan, some records might be
+visited more than once and other records might not be visited at all.</p>
+
+<p>So the implementation of DELETE is really in two loops. The first loop
+(instructions 5 through 11) locates the records that are to be deleted
+and saves their keys onto a temporary list, and the second loop
+(instructions 16 through 19) uses the key list to delete the records one
+by one. </p>
+<blockquote><tt>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;178<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp</tt></blockquote>
+<p>Instructions 0 though 4 are as in the INSERT example. They start
+transactions for the main and temporary databases, verify the database
+schema for the main database, and open a read cursor on the table
+"examp". Notice that the cursor is opened for reading, not writing. At
+this stage of the program we are only going to be scanning the table,
+not changing it. We will reopen the same table for writing later, at
+instruction 15.</p>
+<blockquote><tt>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12</tt></blockquote>
+<p>As in the SELECT example, the <a href="opcode.html#Rewind">Rewind</a>
+instruction rewinds the cursor to the beginning of the table, readying
+it for use in the loop body.</p>
+<blockquote><tt>6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11</tt></blockquote>
+<p>The WHERE clause is implemented by instructions 6 through 8.
+The job of the where clause is to skip the ListWrite if the WHERE
+condition is false. To this end, it jumps ahead to the Next instruction
+if the "two" column (extracted by the Column instruction) is
+greater than or equal to 50.</p>
+
+<p>As before, the Column instruction uses cursor P1 and pushes the data
+record in column P2 (1, column "two") onto the stack. The Integer
+instruction pushes the value 50 onto the top of the stack. After these
+two instructions the stack looks like:</p>
+<blockquote><table border=2><tr><td align=left>(integer) 50</td></tr><tr><td align=left>(record) current record for column "two" </td></tr></table></blockquote>
+<p>The <a href="opcode.html#Ge">Ge</a> operator compares the top two
+elements on the stack, pops them, and then branches based on the result
+of the comparison. If the second element is >= the top element, then
+jump to address P2 (the Next instruction at the end of the loop).
+Because P1 is true, if either operand is NULL (and thus the result is
+NULL) then take the jump. If we don't jump, just advance to the next
+instruction.</p>
+<blockquote><tt>9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Recno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;ListWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>The <a href="opcode.html#Recno">Recno</a> instruction pushes onto the
+stack an integer which is the first 4 bytes of the key to the current
+entry in a sequential scan of the table pointed to by cursor P1.
+The <a href="opcode.html#ListWrite">ListWrite</a> instruction writes the
+integer on the top of the stack into a temporary storage list and pops
+the top element. This is the important work of this loop, to store the
+keys of the records to be deleted so we can delete them in the second
+loop. After this ListWrite instruction the stack is empty again.</p>
+<blockquote><tt>11&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p> The Next instruction increments the cursor to point to the next
+element in the table pointed to by cursor P0, and if it was successful
+branches to P2 (6, the beginning of the loop body). The Close
+instruction closes cursor P1. It doesn't affect the temporary storage
+list because it isn't associated with cursor P1; it is instead a global
+working list (which can be saved with ListPush).</p>
+<blockquote><tt>13&nbsp;&nbsp;&nbsp;&nbsp;ListRewind&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p> The <a href="opcode.html#ListRewind">ListRewind</a> instruction
+rewinds the temporary storage list to the beginning. This prepares it
+for use in the second loop.</p>
+<blockquote><tt>14&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3</tt></blockquote>
+<p> As in the INSERT example, we push the database number P1 (0, the main
+database) onto the stack and use OpenWrite to open the cursor P1 on table
+P2 (base page 3, "examp") for modification.</p>
+<blockquote><tt>16&nbsp;&nbsp;&nbsp;&nbsp;ListRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;NotExists&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Goto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16</tt></blockquote>
+<p>This loop does the actual deleting. It is organized differently from
+the one in the UPDATE example. The ListRead instruction plays the role
+that the Next did in the INSERT loop, but because it jumps to P2 on
+failure, and Next jumps on success, we put it at the start of the loop
+instead of the end. This means that we have to put a Goto at the end of
+the loop to jump back to the loop test at the beginning. So this
+loop has the form of a C while(){...} loop, while the loop in the INSERT
+example had the form of a do{...}while() loop. The Delete instruction
+fills the role that the callback function did in the preceding examples.
+</p>
+<p>The <a href="opcode.html#ListRead">ListRead</a> instruction reads an
+element from the temporary storage list and pushes it onto the stack.
+If this was successful, it continues to the next instruction. If this
+fails because the list is empty, it branches to P2, which is the
+instruction just after the loop. Afterwards the stack looks like:</p>
+<blockquote><table border=2><tr><td align=left>(integer) key for current record</td></tr></table></blockquote>
+<p>Notice the similarity between the ListRead and Next instructions.
+Both operations work according to this rule:
+</p>
+<blockquote>
+Push the next "thing" onto the stack and fall through OR jump to P2,
+depending on whether or not there is a next "thing" to push.
+</blockquote>
+<p>One difference between Next and ListRead is their idea of a "thing".
+The "things" for the Next instruction are records in a database file.
+"Things" for ListRead are integer keys in a list. Another difference
+is whether to jump or fall through if there is no next "thing". In this
+case, Next falls through, and ListRead jumps. Later on, we will see
+other looping instructions (NextIdx and SortNext) that operate using the
+same principle.</p>
+
+<p>The <a href="opcode.html#NotExists">NotExists</a> instruction pops
+the top stack element and uses it as an integer key. If a record with
+that key does not exist in table P1, then jump to P2. If a record does
+exist, then fall through to the next instruction. In this case P2 takes
+us to the Goto at the end of the loop, which jumps back to the ListRead
+at the beginning. This could have been coded to have P2 be 16, the
+ListRead at the start of the loop, but the SQLite parser which generated
+this code didn't make that optimization.</p>
+<p>The <a href="opcode.html#Delete">Delete</a> does the work of this
+loop; it pops an integer key off the stack (placed there by the
+preceding ListRead) and deletes the record of cursor P1 that has that key.
+Because P2 is true, the row change counter is incremented.</p>
+<p>The <a href="opcode.html#Goto">Goto</a> jumps back to the beginning
+of the loop. This is the end of the loop.</p>
+<blockquote><tt>20&nbsp;&nbsp;&nbsp;&nbsp;ListReset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;Commit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>This block of instruction cleans up the VDBE program. Three of these
+instructions aren't really required, but are generated by the SQLite
+parser from its code templates, which are designed to handle more
+complicated cases.</p>
+<p>The <a href="opcode.html#ListReset">ListReset</a> instruction empties
+the temporary storage list. This list is emptied automatically when the
+VDBE program terminates, so it isn't necessary in this case. The Close
+instruction closes the cursor P1. Again, this is done by the VDBE
+engine when it is finished running this program. The Commit ends the
+current transaction successfully, and causes all changes that occurred
+in this transaction to be saved to the database. The final Halt is also
+unnecessary, since it is added to every VDBE program when it is
+prepared to run.</p>
+
+
+<p>UPDATE statements work very much like DELETE statements except
+that instead of deleting the record they replace it with a new one.
+Consider this example:
+</p>
+
+<blockquote><pre>
+UPDATE examp SET one= '(' || one || ')' WHERE two < 50;
+</pre></blockquote>
+
+<p>Instead of deleting records where the "two" column is less than
+50, this statement just puts the "one" column in parentheses
+The VDBE program to implement this statement follows:</p>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;178&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Recno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;ListWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;ListRewind&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;ListRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;Dup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;NotExists&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;Concat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Concat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+24&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+25&nbsp;&nbsp;&nbsp;&nbsp;MakeRecord&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+26&nbsp;&nbsp;&nbsp;&nbsp;PutIntKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+27&nbsp;&nbsp;&nbsp;&nbsp;Goto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+28&nbsp;&nbsp;&nbsp;&nbsp;ListReset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+29&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+30&nbsp;&nbsp;&nbsp;&nbsp;Commit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+31&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>This program is essentially the same as the DELETE program except
+that the body of the second loop has been replace by a sequence of
+instructions (at addresses 17 through 26) that update the record rather
+than delete it. Most of this instruction sequence should already be
+familiar to you, but there are a couple of minor twists so we will go
+over it briefly. Also note that the order of some of the instructions
+before and after the 2nd loop has changed. This is just the way the
+SQLite parser chose to output the code using a different template.</p>
+
+<p>As we enter the interior of the second loop (at instruction 17)
+the stack contains a single integer which is the key of the
+record we want to modify. We are going to need to use this
+key twice: once to fetch the old value of the record and
+a second time to write back the revised record. So the first instruction
+is a Dup to make a duplicate of the key on the top of the stack. The
+Dup instruction will duplicate any element of the stack, not just the top
+element. You specify which element to duplication using the
+P1 operand. When P1 is 0, the top of the stack is duplicated.
+When P1 is 1, the next element down on the stack duplication.
+And so forth.</p>
+
+<p>After duplicating the key, the next instruction, NotExists,
+pops the stack once and uses the value popped as a key to
+check the existence of a record in the database file. If there is no record
+for this key, it jumps back to the ListRead to get another key.</p>
+
+<p>Instructions 19 through 25 construct a new database record
+that will be used to replace the existing record. This is
+the same kind of code that we saw
+in the description of INSERT and will not be described further.
+After instruction 25 executes, the stack looks like this:</p>
+<blockquote><table border=2><tr><td align=left>(record) new data record</td></tr><tr><td align=left>(integer) key</td></tr></table></blockquote>
+<p>The PutIntKey instruction (also described
+during the discussion about INSERT) writes an entry into the
+database file whose data is the top of the stack and whose key
+is the next on the stack, and then pops the stack twice. The
+PutIntKey instruction will overwrite the data of an existing record
+with the same key, which is what we want here. Overwriting was not
+an issue with INSERT because with INSERT the key was generated
+by the NewRecno instruction which is guaranteed to provide a key
+that has not been used before.</p>
+
+<h2>CREATE and DROP</h2>
+
+<p>Using CREATE or DROP to create or destroy a table or index is
+really the same as doing an INSERT or DELETE from the special
+"sqlite_master" table, at least from the point of view of the VDBE.
+The sqlite_master table is a special table that is automatically
+created for every SQLite database. It looks like this:</p>
+
+<blockquote><pre>
+CREATE TABLE sqlite_master (
+ type TEXT, -- either "table" or "index"
+ name TEXT, -- name of this table or index
+ tbl_name TEXT, -- for indices: name of associated table
+ sql TEXT -- SQL text of the original CREATE statement
+)
+</pre></blockquote>
+
+<p>Every table (except the "sqlite_master" table itself)
+and every named index in an SQLite database has an entry
+in the sqlite_master table. You can query this table using
+a SELECT statement just like any other table. But you are
+not allowed to directly change the table using UPDATE, INSERT,
+or DELETE. Changes to sqlite_master have to occur using
+the CREATE and DROP commands because SQLite also has to update
+some of its internal data structures when tables and indices
+are added or destroyed.</p>
+
+<p>But from the point of view of the VDBE, a CREATE works
+pretty much like an INSERT and a DROP works like a DELETE.
+When the SQLite library opens to an existing database,
+the first thing it does is a SELECT to read the "sql"
+columns from all entries of the sqlite_master table.
+The "sql" column contains the complete SQL text of the
+CREATE statement that originally generated the index or
+table. This text is fed back into the SQLite parser
+and used to reconstruct the
+internal data structures describing the index or table.</p>
+
+<h2>Using Indexes To Speed Searching</h2>
+
+<p>In the example queries above, every row of the table being
+queried must be loaded off of the disk and examined, even if only
+a small percentage of the rows end up in the result. This can
+take a long time on a big table. To speed things up, SQLite
+can use an index.</p>
+
+<p>An SQLite file associates a key with some data. For an SQLite
+table, the database file is set up so that the key is an integer
+and the data is the information for one row of the table.
+Indices in SQLite reverse this arrangement. The index key
+is (some of) the information being stored and the index data
+is an integer.
+To access a table row that has some particular
+content, we first look up the content in the index table to find
+its integer index, then we use that integer to look up the
+complete record in the table.</p>
+
+<p>Note that SQLite uses b-trees, which are a sorted data structure,
+so indices can be used when the WHERE clause of the SELECT statement
+contains tests for equality or inequality. Queries like the following
+can use an index if it is available:</p>
+
+<blockquote><pre>
+SELECT * FROM examp WHERE two==50;
+SELECT * FROM examp WHERE two<50;
+SELECT * FROM examp WHERE two IN (50, 100);
+</pre></blockquote>
+
+<p>If there exists an index that maps the "two" column of the "examp"
+table into integers, then SQLite will use that index to find the integer
+keys of all rows in examp that have a value of 50 for column two, or
+all rows that are less than 50, etc.
+But the following queries cannot use the index:</p>
+
+<blockquote><pre>
+SELECT * FROM examp WHERE two%50 == 10;
+SELECT * FROM examp WHERE two&127 == 3;
+</pre></blockquote>
+
+<p>Note that the SQLite parser will not always generate code to use an
+index, even if it is possible to do so. The following queries will not
+currently use the index:</p>
+
+<blockquote><pre>
+SELECT * FROM examp WHERE two+10 == 50;
+SELECT * FROM examp WHERE two==50 OR two==100;
+</pre></blockquote>
+
+<p>To understand better how indices work, lets first look at how
+they are created. Let's go ahead and put an index on the two
+column of the examp table. We have:</p>
+
+<blockquote><pre>
+CREATE INDEX examp_idx1 ON examp(two);
+</pre></blockquote>
+
+<p>The VDBE code generated by the above statement looks like the
+following:</p>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;178&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewRecno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp_idx1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateIndex&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr(0x791380)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;Dup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CREATE&nbsp;INDEX&nbsp;examp_idx1&nbsp;ON&nbsp;examp(tw<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;MakeRecord&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;PutIntKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Recno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;MakeIdxKey&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;IdxPut&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexed&nbsp;columns&nbsp;are&nbsp;not&nbsp;unique&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+24&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+25&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+26&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;333&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+27&nbsp;&nbsp;&nbsp;&nbsp;SetCookie&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+28&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+29&nbsp;&nbsp;&nbsp;&nbsp;Commit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+30&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>Remember that every table (except sqlite_master) and every named
+index has an entry in the sqlite_master table. Since we are creating
+a new index, we have to add a new entry to sqlite_master. This is
+handled by instructions 3 through 15. Adding an entry to sqlite_master
+works just like any other INSERT statement so we will not say any more
+about it here. In this example, we want to focus on populating the
+new index with valid data, which happens on instructions 16 through
+23.</p>
+<blockquote><tt>16&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp</tt></blockquote>
+<p>The first thing that happens is that we open the table being
+indexed for reading. In order to construct an index for a table,
+we have to know what is in that table. The index has already been
+opened for writing using cursor 0 by instructions 3 and 4.</p>
+<blockquote><tt>18&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Recno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;MakeIdxKey&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;IdxPut&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexed&nbsp;columns&nbsp;are&nbsp;not&nbsp;unique&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19</tt></blockquote>
+<p>Instructions 18 through 23 implement a loop over every row of the
+table being indexed. For each table row, we first extract the integer
+key for that row using Recno in instruction 19, then get the value of
+the "two" column using Column in instruction 20.
+The <a href="opcode.html#MakeIdxKey">MakeIdxKey</a> instruction at 21
+converts data from the "two" column (which is on the top of the stack)
+into a valid index key. For an index on a single column, this is
+basically a no-op. But if the P1 operand to MakeIdxKey had been
+greater than one multiple entries would have been popped from the stack
+and converted into a single index key.
+The <a href="opcode.html#IdxPut">IdxPut</a> instruction at 22 is what
+actually creates the index entry. IdxPut pops two elements from the
+stack. The top of the stack is used as a key to fetch an entry from the
+index table. Then the integer which was second on stack is added to the
+set of integers for that index and the new record is written back to the
+database file. Note
+that the same index entry can store multiple integers if there
+are two or more table entries with the same value for the two
+column.
+</p>
+
+<p>Now let's look at how this index will be used. Consider the
+following query:</p>
+
+<blockquote><pre>
+SELECT * FROM examp WHERE two==50;
+</pre></blockquote>
+
+<p>SQLite generates the following VDBE code to handle this query:</p>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;two&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp_idx1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakeKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemStore&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;MoveTo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;MemLoad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;IdxGT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;IdxRecno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;MoveTo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;Callback&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>The SELECT begins in a familiar fashion. First the column
+names are initialized and the table being queried is opened.
+Things become different beginning with instructions 5 and 6 where
+the index file is also opened. Instructions 7 and 8 make
+a key with the value of 50.
+The <a href="opcode.html#MemStore">MemStore</a> instruction at 9 stores
+the index key in VDBE memory location 0. The VDBE memory is used to
+avoid having to fetch a value from deep in the stack, which can be done,
+but makes the program harder to generate. The following instruction
+<a href="opcode.html#MoveTo">MoveTo</a> at address 10 pops the key off
+the stack and moves the index cursor to the first row of the index with
+that key. This initializes the cursor for use in the following loop.</p>
+
+<p>Instructions 11 through 18 implement a loop over all index records
+with the key that was fetched by instruction 8. All of the index
+records with this key will be contiguous in the index table, so we walk
+through them and fetch the corresponding table key from the index.
+This table key is then used to move the cursor to that row in the table.
+The rest of the loop is the same as the loop for the non-indexed SELECT
+query.</p>
+
+<p>The loop begins with the <a href="opcode.html#MemLoad">MemLoad</a>
+instruction at 11 which pushes a copy of the index key back onto the
+stack. The instruction <a href="opcode.html#IdxGT">IdxGT</a> at 12
+compares the key to the key in the current index record pointed to by
+cursor P1. If the index key at the current cursor location is greater
+than the index we are looking for, then jump out of the loop.</p>
+
+<p>The instruction <a href="opcode.html#IdxRecno">IdxRecno</a> at 13
+pushes onto the stack the table record number from the index. The
+following MoveTo pops it and moves the table cursor to that row. The
+next 3 instructions select the column data the same way as in the non-
+indexed case. The Column instructions fetch the column data and the
+callback function is invoked. The final Next instruction advances the
+index cursor, not the table cursor, to the next row, and then branches
+back to the start of the loop if there are any index records left.</p>
+
+<p>Since the index is used to look up values in the table,
+it is important that the index and table be kept consistent.
+Now that there is an index on the examp table, we will have
+to update that index whenever data is inserted, deleted, or
+changed in the examp table. Remember the first example above
+where we were able to insert a new row into the "examp" table using
+12 VDBE instructions. Now that this table is indexed, 19
+instructions are required. The SQL statement is this:</p>
+
+<blockquote><pre>
+INSERT INTO examp VALUES('Hello, World!',99);
+</pre></blockquote>
+
+<p>And the generated code looks like this:</p>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transaction&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;256&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp_idx1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewRecno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hello,&nbsp;World!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;Dup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Dup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;MakeIdxKey&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;IdxPut&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;MakeRecord&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;PutIntKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Commit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>At this point, you should understand the VDBE well enough to
+figure out on your own how the above program works. So we will
+not discuss it further in this text.</p>
+
+<h2>Joins</h2>
+
+<p>In a join, two or more tables are combined to generate a single
+result. The result table consists of every possible combination
+of rows from the tables being joined. The easiest and most natural
+way to implement this is with nested loops.</p>
+
+<p>Recall the query template discussed above where there was a
+single loop that searched through every record of the table.
+In a join we have basically the same thing except that there
+are nested loops. For example, to join two tables, the query
+template might look something like this:</p>
+
+<p>
+<ol>
+<li>Initialize the <b>azColumnName[]</b> array for the callback.</li>
+<li>Open two cursors, one to each of the two tables being queried.</li>
+<li>For each record in the first table, do:
+ <ol type="a">
+ <li>For each record in the second table do:
+ <ol type="i">
+ <li>If the WHERE clause evaluates to FALSE, then skip the steps that
+ follow and continue to the next record.</li>
+ <li>Compute all columns for the current row of the result.</li>
+ <li>Invoke the callback function for the current row of the result.</li>
+ </ol></li>
+ </ol>
+<li>Close both cursors.</li>
+</ol>
+</p>
+
+<p>This template will work, but it is likely to be slow since we
+are now dealing with an O(N<sup>2</sup>) loop. But it often works
+out that the WHERE clause can be factored into terms and that one or
+more of those terms will involve only columns in the first table.
+When this happens, we can factor part of the WHERE clause test out of
+the inner loop and gain a lot of efficiency. So a better template
+would be something like this:</p>
+
+<p>
+<ol>
+<li>Initialize the <b>azColumnName[]</b> array for the callback.</li>
+<li>Open two cursors, one to each of the two tables being queried.</li>
+<li>For each record in the first table, do:
+ <ol type="a">
+ <li>Evaluate terms of the WHERE clause that only involve columns from
+ the first table. If any term is false (meaning that the whole
+ WHERE clause must be false) then skip the rest of this loop and
+ continue to the next record.</li>
+ <li>For each record in the second table do:
+ <ol type="i">
+ <li>If the WHERE clause evaluates to FALSE, then skip the steps that
+ follow and continue to the next record.</li>
+ <li>Compute all columns for the current row of the result.</li>
+ <li>Invoke the callback function for the current row of the result.</li>
+ </ol></li>
+ </ol>
+<li>Close both cursors.</li>
+</ol>
+</p>
+
+<p>Additional speed-up can occur if an index can be used to speed
+the search of either or the two loops.</p>
+
+<p>SQLite always constructs the loops in the same order as the
+tables appear in the FROM clause of the SELECT statement. The
+left-most table becomes the outer loop and the right-most table
+becomes the inner loop. It is possible, in theory, to reorder
+the loops in some circumstances to speed the evaluation of the
+join. But SQLite does not attempt this optimization.</p>
+
+<p>You can see how SQLite constructs nested loops in the following
+example:</p>
+
+<blockquote><pre>
+CREATE TABLE examp2(three int, four int);
+SELECT * FROM examp, examp2 WHERE two<50 AND four==two;
+</pre></blockquote>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp.one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp.two&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp2.three&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp2.four&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;909&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;Ge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;Ne&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;Callback&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+24&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+25&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+26&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>The outer loop over table examp is implement by instructions
+7 through 23. The inner loop is instructions 13 through 22.
+Notice that the "two<50" term of the WHERE expression involves
+only columns from the first table and can be factored out of
+the inner loop. SQLite does this and implements the "two<50"
+test in instructions 10 through 12. The "four==two" test is
+implement by instructions 14 through 16 in the inner loop.</p>
+
+<p>SQLite does not impose any arbitrary limits on the tables in
+a join. It also allows a table to be joined with itself.</p>
+
+<h2>The ORDER BY clause</h2>
+
+<p>For historical reasons, and for efficiency, all sorting is currently
+done in memory.</p>
+
+<p>SQLite implements the ORDER BY clause using a special
+set of instructions to control an object called a sorter. In the
+inner-most loop of the query, where there would normally be
+a Callback instruction, instead a record is constructed that
+contains both callback parameters and a key. This record
+is added to the sorter (in a linked list). After the query loop
+finishes, the list of records is sorted and this list is walked. For
+each record on the list, the callback is invoked. Finally, the sorter
+is closed and memory is deallocated.</p>
+
+<p>We can see the process in action in the following query:</p>
+
+<blockquote><pre>
+SELECT * FROM examp ORDER BY one DESC, two;
+</pre></blockquote>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;two&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;909&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortMakeRec&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;SortMakeKey&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;SortPut&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;Sort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;SortNext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;SortCallback&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Goto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;SortReset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>There is only one sorter object, so there are no instructions to open
+or close it. It is opened automatically when needed, and it is closed
+when the VDBE program halts.</p>
+
+<p>The query loop is built from instructions 5 through 13. Instructions
+6 through 8 build a record that contains the azData[] values for a single
+invocation of the callback. A sort key is generated by instructions
+9 through 11. Instruction 12 combines the invocation record and the
+sort key into a single entry and puts that entry on the sort list.<p>
+
+<p>The P3 argument of instruction 11 is of particular interest. The
+sort key is formed by prepending one character from P3 to each string
+and concatenating all the strings. The sort comparison function will
+look at this character to determine whether the sort order is
+ascending or descending, and whether to sort as a string or number.
+In this example, the first column should be sorted as a string
+in descending order so its prefix is "D" and the second column should
+sorted numerically in ascending order so its prefix is "+". Ascending
+string sorting uses "A", and descending numeric sorting uses "-".</p>
+
+<p>After the query loop ends, the table being queried is closed at
+instruction 14. This is done early in order to allow other processes
+or threads to access that table, if desired. The list of records
+that was built up inside the query loop is sorted by the instruction
+at 15. Instructions 16 through 18 walk through the record list
+(which is now in sorted order) and invoke the callback once for
+each record. Finally, the sorter is closed at instruction 19.</p>
+
+<h2>Aggregate Functions And The GROUP BY and HAVING Clauses</h2>
+
+<p>To compute aggregate functions, the VDBE implements a special
+data structure and instructions for controlling that data structure.
+The data structure is an unordered set of buckets, where each bucket
+has a key and one or more memory locations. Within the query
+loop, the GROUP BY clause is used to construct a key and the bucket
+with that key is brought into focus. A new bucket is created with
+the key if one did not previously exist. Once the bucket is in
+focus, the memory locations of the bucket are used to accumulate
+the values of the various aggregate functions. After the query
+loop terminates, each bucket is visited once to generate a
+single row of the results.</p>
+
+<p>An example will help to clarify this concept. Consider the
+following query:</p>
+
+<blockquote><pre>
+SELECT three, min(three+four)+avg(four)
+FROM examp2
+GROUP BY three;
+</pre></blockquote>
+
+
+<p>The VDBE code generated for this query is as follows:</p>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;three&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min(three+four)+avg(four)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AggReset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AggInit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr(0x7903a0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AggInit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr(0x790700)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;909&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;MakeKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;AggFocus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;AggSet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;Add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;AggFunc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr(0x7903a0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;AggFunc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr(0x790700)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+24&nbsp;&nbsp;&nbsp;&nbsp;AggNext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+25&nbsp;&nbsp;&nbsp;&nbsp;AggGet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+26&nbsp;&nbsp;&nbsp;&nbsp;AggGet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+27&nbsp;&nbsp;&nbsp;&nbsp;AggGet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+28&nbsp;&nbsp;&nbsp;&nbsp;Add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+29&nbsp;&nbsp;&nbsp;&nbsp;Callback&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+30&nbsp;&nbsp;&nbsp;&nbsp;Goto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+31&nbsp;&nbsp;&nbsp;&nbsp;Noop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+32&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>The first instruction of interest is the
+<a href="opcode.html#AggReset">AggReset</a> at 2.
+The AggReset instruction initializes the set of buckets to be the
+empty set and specifies the number of memory slots available in each
+bucket as P2. In this example, each bucket will hold 3 memory slots.
+It is not obvious, but if you look closely at the rest of the program
+you can figure out what each of these slots is intended for.</p>
+
+<blockquote><table border="2" cellpadding="5">
+<tr><th>Memory Slot</th><th>Intended Use Of This Memory Slot</th></tr>
+<tr><td>0</td><td>The "three" column -- the key to the bucket</td></tr>
+<tr><td>1</td><td>The minimum "three+four" value</td></tr>
+<tr><td>2</td><td>The sum of all "four" values. This is used to compute
+ "avg(four)".</td></tr>
+</table></blockquote>
+
+<p>The query loop is implemented by instructions 8 through 22.
+The aggregate key specified by the GROUP BY clause is computed
+by instructions 9 and 10. Instruction 11 causes the appropriate
+bucket to come into focus. If a bucket with the given key does
+not already exists, a new bucket is created and control falls
+through to instructions 12 and 13 which initialize the bucket.
+If the bucket does already exist, then a jump is made to instruction
+14. The values of aggregate functions are updated by the instructions
+between 11 and 21. Instructions 14 through 18 update memory
+slot 1 to hold the next value "min(three+four)". Then the sum of the
+"four" column is updated by instructions 19 through 21.</p>
+
+<p>After the query loop is finished, the table "examp2" is closed at
+instruction 23 so that its lock will be released and it can be
+used by other threads or processes. The next step is to loop
+over all aggregate buckets and output one row of the result for
+each bucket. This is done by the loop at instructions 24
+through 30. The AggNext instruction at 24 brings the next bucket
+into focus, or jumps to the end of the loop if all buckets have
+been examined already. The 3 columns of the result are fetched from
+the aggregator bucket in order at instructions 25 through 27.
+Finally, the callback is invoked at instruction 29.</p>
+
+<p>In summary then, any query with aggregate functions is implemented
+by two loops. The first loop scans the input table and computes
+aggregate information into buckets and the second loop scans through
+all the buckets to compute the final result.</p>
+
+<p>The realization that an aggregate query is really two consecutive
+loops makes it much easier to understand the difference between
+a WHERE clause and a HAVING clause in SQL query statement. The
+WHERE clause is a restriction on the first loop and the HAVING
+clause is a restriction on the second loop. You can see this
+by adding both a WHERE and a HAVING clause to our example query:</p>
+
+
+<blockquote><pre>
+SELECT three, min(three+four)+avg(four)
+FROM examp2
+WHERE three>four
+GROUP BY three
+HAVING avg(four)<10;
+</pre></blockquote>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;three&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min(three+four)+avg(four)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AggReset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AggInit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr(0x7903a0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AggInit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr(0x790700)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;909&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Le&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;MakeKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;AggFocus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;AggSet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;AggFunc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr(0x7903a0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+24&nbsp;&nbsp;&nbsp;&nbsp;AggFunc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr(0x790700)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+25&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+26&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+27&nbsp;&nbsp;&nbsp;&nbsp;AggNext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+28&nbsp;&nbsp;&nbsp;&nbsp;AggGet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+29&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+30&nbsp;&nbsp;&nbsp;&nbsp;Ge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+31&nbsp;&nbsp;&nbsp;&nbsp;AggGet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+32&nbsp;&nbsp;&nbsp;&nbsp;AggGet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+33&nbsp;&nbsp;&nbsp;&nbsp;AggGet&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+34&nbsp;&nbsp;&nbsp;&nbsp;Add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+35&nbsp;&nbsp;&nbsp;&nbsp;Callback&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+36&nbsp;&nbsp;&nbsp;&nbsp;Goto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+37&nbsp;&nbsp;&nbsp;&nbsp;Noop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+38&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>The code generated in this last example is the same as the
+previous except for the addition of two conditional jumps used
+to implement the extra WHERE and HAVING clauses. The WHERE
+clause is implemented by instructions 9 through 11 in the query
+loop. The HAVING clause is implemented by instruction 28 through
+30 in the output loop.</p>
+
+<h2>Using SELECT Statements As Terms In An Expression</h2>
+
+<p>The very name "Structured Query Language" tells us that SQL should
+support nested queries. And, in fact, two different kinds of nesting
+are supported. Any SELECT statement that returns a single-row, single-column
+result can be used as a term in an expression of another SELECT statement.
+And, a SELECT statement that returns a single-column, multi-row result
+can be used as the right-hand operand of the IN and NOT IN operators.
+We will begin this section with an example of the first kind of nesting,
+where a single-row, single-column SELECT is used as a term in an expression
+of another SELECT. Here is our example:</p>
+
+<blockquote><pre>
+SELECT * FROM examp
+WHERE two!=(SELECT three FROM examp2
+ WHERE four=5);
+</pre></blockquote>
+
+<p>The way SQLite deals with this is to first run the inner SELECT
+(the one against examp2) and store its result in a private memory
+cell. SQLite then substitutes the value of this private memory
+cell for the inner SELECT when it evaluates the outer SELECT.
+The code looks like this:</p>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemStore&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;909&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ne&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;MemStore&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Goto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;two&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;MemLoad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;Eq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+24&nbsp;&nbsp;&nbsp;&nbsp;Callback&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+25&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+26&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+27&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>The private memory cell is initialized to NULL by the first
+two instructions. Instructions 2 through 13 implement the inner
+SELECT statement against the examp2 table. Notice that instead of
+sending the result to a callback or storing the result on a sorter,
+the result of the query is pushed into the memory cell by instruction
+10 and the loop is abandoned by the jump at instruction 11.
+The jump at instruction at 11 is vestigial and never executes.</p>
+
+<p>The outer SELECT is implemented by instructions 14 through 25.
+In particular, the WHERE clause that contains the nested select
+is implemented by instructions 19 through 21. You can see that
+the result of the inner select is loaded onto the stack by instruction
+20 and used by the conditional jump at 21.</p>
+
+<p>When the result of a sub-select is a scalar, a single private memory
+cell can be used, as shown in the previous
+example. But when the result of a sub-select is a vector, such
+as when the sub-select is the right-hand operand of IN or NOT IN,
+a different approach is needed. In this case,
+the result of the sub-select is
+stored in a transient table and the contents of that table
+are tested using the Found or NotFound operators. Consider this
+example:</p>
+
+<blockquote><pre>
+SELECT * FROM examp
+WHERE two IN (SELECT three FROM examp2);
+</pre></blockquote>
+
+<p>The code generated to implement this last query is as follows:</p>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenTemp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;909&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsNull&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PutStrKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;two&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;NotNull&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Pop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Goto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;NotFound&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Callback&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+24&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+25&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+26&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>The transient table in which the results of the inner SELECT are
+stored is created by the <a href="opcode.html#OpenTemp">OpenTemp</a>
+instruction at 0. This opcode is used for tables that exist for the
+duration of a single SQL statement only. The transient cursor is always
+opened read/write even if the main database is read-only. The transient
+table is deleted automatically when the cursor is closed. The P2 value
+of 1 means the cursor points to a BTree index, which has no data but can
+have an arbitrary key.</p>
+
+<p>The inner SELECT statement is implemented by instructions 1 through 10.
+All this code does is make an entry in the temporary table for each
+row of the examp2 table with a non-NULL value for the "three" column.
+The key for each temporary table entry is the "three" column of examp2
+and the data is an empty string since it is never used.</p>
+
+<p>The outer SELECT is implemented by instructions 11 through 25. In
+particular, the WHERE clause containing the IN operator is implemented
+by instructions at 16, 17, and 20. Instruction 16 pushes the value of
+the "two" column for the current row onto the stack and instruction 17
+checks to see that it is non-NULL. If this is successful, execution
+jumps to 20, where it tests to see if top of the stack matches any key
+in the temporary table. The rest of the code is the same as what has
+been shown before.</p>
+
+<h2>Compound SELECT Statements</h2>
+
+<p>SQLite also allows two or more SELECT statements to be joined as
+peers using operators UNION, UNION ALL, INTERSECT, and EXCEPT. These
+compound select statements are implemented using transient tables.
+The implementation is slightly different for each operator, but the
+basic ideas are the same. For an example we will use the EXCEPT
+operator.</p>
+
+<blockquote><pre>
+SELECT two FROM examp
+EXCEPT
+SELECT four FROM examp2;
+</pre></blockquote>
+
+<p>The result of this last example should be every unique value
+of the "two" column in the examp table, except any value that is
+in the "four" column of examp2 is removed. The code to implement
+this query is as follows:</p>
+<blockquote><tt>addr&nbsp;&nbsp;opcode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+----&nbsp;&nbsp;------------&nbsp;&nbsp;-----&nbsp;&nbsp;-----&nbsp;&nbsp;-----------------------------------<br>
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenTemp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyAsData&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VerifyCookie&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;909&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MakeRecord&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PutStrKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+10&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+11&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+12&nbsp;&nbsp;&nbsp;&nbsp;Integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+13&nbsp;&nbsp;&nbsp;&nbsp;OpenRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;examp2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+14&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+15&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+16&nbsp;&nbsp;&nbsp;&nbsp;MakeRecord&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+17&nbsp;&nbsp;&nbsp;&nbsp;NotFound&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+18&nbsp;&nbsp;&nbsp;&nbsp;Delete&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+19&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+20&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+21&nbsp;&nbsp;&nbsp;&nbsp;ColumnName&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;four&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+22&nbsp;&nbsp;&nbsp;&nbsp;Rewind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+23&nbsp;&nbsp;&nbsp;&nbsp;Column&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+24&nbsp;&nbsp;&nbsp;&nbsp;Callback&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+25&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+26&nbsp;&nbsp;&nbsp;&nbsp;Close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
+27&nbsp;&nbsp;&nbsp;&nbsp;Halt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</tt></blockquote>
+<p>The transient table in which the result is built is created by
+instruction 0. Three loops then follow. The loop at instructions
+5 through 10 implements the first SELECT statement. The second
+SELECT statement is implemented by the loop at instructions 14 through
+19. Finally, a loop at instructions 22 through 25 reads the transient
+table and invokes the callback once for each row in the result.</p>
+
+<p>Instruction 1 is of particular importance in this example. Normally,
+the Column instruction extracts the value of a column from a larger
+record in the data of an SQLite file entry. Instruction 1 sets a flag on
+the transient table so that Column will instead treat the key of the
+SQLite file entry as if it were data and extract column information from
+the key.</p>
+
+<p>Here is what is going to happen: The first SELECT statement
+will construct rows of the result and save each row as the key of
+an entry in the transient table. The data for each entry in the
+transient table is a never used so we fill it in with an empty string.
+The second SELECT statement also constructs rows, but the rows
+constructed by the second SELECT are removed from the transient table.
+That is why we want the rows to be stored in the key of the SQLite file
+instead of in the data -- so they can be easily located and deleted.</p>
+
+<p>Let's look more closely at what is happening here. The first
+SELECT is implemented by the loop at instructions 5 through 10.
+Instruction 5 initializes the loop by rewinding its cursor.
+Instruction 6 extracts the value of the "two" column from "examp"
+and instruction 7 converts this into a row. Instruction 8 pushes
+an empty string onto the stack. Finally, instruction 9 writes the
+row into the temporary table. But remember, the PutStrKey opcode uses
+the top of the stack as the record data and the next on stack as the
+key. For an INSERT statement, the row generated by the
+MakeRecord opcode is the record data and the record key is an integer
+created by the NewRecno opcode. But here the roles are reversed and
+the row created by MakeRecord is the record key and the record data is
+just an empty string.</p>
+
+<p>The second SELECT is implemented by instructions 14 through 19.
+Instruction 14 initializes the loop by rewinding its cursor.
+A new result row is created from the "four" column of table "examp2"
+by instructions 15 and 16. But instead of using PutStrKey to write this
+new row into the temporary table, we instead call Delete to remove
+it from the temporary table if it exists.</p>
+
+<p>The result of the compound select is sent to the callback routine
+by the loop at instructions 22 through 25. There is nothing new
+or remarkable about this loop, except for the fact that the Column
+instruction at 23 will be extracting a column out of the record key
+rather than the record data.</p>
+
+<h2>Summary</h2>
+
+<p>This article has reviewed all of the major techniques used by
+SQLite's VDBE to implement SQL statements. What has not been shown
+is that most of these techniques can be used in combination to
+generate code for an appropriately complex query statement. For
+example, we have shown how sorting is accomplished on a simple query
+and we have shown how to implement a compound query. But we did
+not give an example of sorting in a compound query. This is because
+sorting a compound query does not introduce any new concepts: it
+merely combines two previous ideas (sorting and compounding)
+in the same VDBE program.</p>
+
+<p>For additional information on how the SQLite library
+functions, the reader is directed to look at the SQLite source
+code directly. If you understand the material in this article,
+you should not have much difficulty in following the sources.
+Serious students of the internals of SQLite will probably
+also want to make a careful study of the VDBE opcodes
+as documented <a href="opcode.html">here</a>. Most of the
+opcode documentation is extracted from comments in the source
+code using a script so you can also get information about the
+various opcodes directly from the <b>vdbe.c</b> source file.
+If you have successfully read this far, you should have little
+difficulty understanding the rest.</p>
+
+<p>If you find errors in either the documentation or the code,
+feel free to fix them and/or contact the author at
+<a href="mailto:drh@hwaci.com">drh@hwaci.com</a>. Your bug fixes or
+suggestions are always welcomed.</p>
+
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/vdbe.in?m=df423c1de68a1a915">2020-04-14 16:00:55</a> UTC </small></i></p>
+
diff --git a/www/version3.html b/www/version3.html
new file mode 100644
index 0000000..4674514
--- /dev/null
+++ b/www/version3.html
@@ -0,0 +1,418 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>SQLite Version 3 Overview</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+<p>
+<center><table border="1" cellpadding="10" width="75%">
+<tr><td bgcolor="#ffffbb">
+<b>Editorial Note:</b>
+This document was written in 2004 as a guide to programmers who were
+transitioning from SQLite2 to SQLite3.
+It is retained as part of the historical record of SQLite.
+Modern programmers should refer to
+more up-to-date documentation on SQLite available elsewhere
+on this website.
+</table></center>
+
+<h2>SQLite Version 3 Overview</h2>
+
+<p>
+SQLite version 3.0 introduces important changes to the library, including:
+</p>
+
+<ul>
+<li>A more compact format for database files.</li>
+<li>Manifest typing and BLOB support.</li>
+<li>Support for both UTF-8 and UTF-16 text.</li>
+<li>User-defined text collating sequences.</li>
+<li>64-bit ROWIDs.</li>
+<li>Improved Concurrency.</li>
+</ul>
+
+<p>
+This document is a quick introduction to the changes for SQLite 3.0
+for users who are already familiar with SQLite version 2.8.
+</p>
+
+<h3>Naming Changes</h3>
+
+<p>
+SQLite version 2.8 will continue to be supported with bug fixes
+for the foreseeable future. In order to allow SQLite version 2.8
+and SQLite version 3.0 to peacefully coexist, the names of key files
+and APIs in SQLite version 3.0 have been changed to include the
+character "3". For example, the include file used by C programs
+has been changed from "sqlite.h" to "sqlite3.h". And the name of
+the shell program used to interact with databases has been changed
+from "sqlite.exe" to "sqlite3.exe". With these changes, it is possible
+to have both SQLite 2.8 and SQLite 3.0 installed on the same system at
+the same time. And it is possible for the same C program to link
+against both SQLite 2.8 and SQLite 3.0 at the same time and to use
+both libraries at the same time.
+</p>
+
+<h3>New File Format</h3>
+
+<p>
+The format used by SQLite database files has been completely revised.
+The old version 2.1 format and the new 3.0 format are incompatible with
+one another. Version 2.8 of SQLite will not read a version 3.0 database
+files and version 3.0 of SQLite will not read a version 2.8 database file.
+</p>
+
+<p>
+To convert an SQLite 2.8 database into an SQLite 3.0 database, have
+ready the command-line shells for both version 2.8 and 3.0. Then
+enter a command like the following:
+</p>
+
+<blockquote><pre>
+sqlite OLD.DB .dump | sqlite3 NEW.DB
+</pre></blockquote>
+
+<p>
+The new database file format uses B+trees for tables. In a B+tree, all
+data is stored in the leaves of the tree instead of in both the leaves and
+the intermediate branch nodes. The use of B+trees for tables allows for
+better scalability and the storage of larger data fields without the use of
+overflow pages. Traditional B-trees are still used for indices.</p>
+
+<p>
+The new file format also supports variable pages sizes between 512 and
+65536 bytes. The size of a page is stored in the file header so the
+same library can read databases with different pages sizes, in theory,
+though this feature has not yet been implemented in practice.
+</p>
+
+<p>
+The new file format omits unused fields from its disk images. For example,
+indices use only the key part of a B-tree record and not the data. So
+for indices, the field that records the length of the data is omitted.
+Integer values such as the length of key and data are stored using
+a variable-length encoding so that only one or two bytes are required to
+store the most common cases but up to 64-bits of information can be encoded
+if needed.
+Integer and floating point data is stored on the disk in binary rather
+than being converted into ASCII as in SQLite version 2.8.
+These changes taken together result in database files that are typically
+25% to 35% smaller than the equivalent files in SQLite version 2.8.
+</p>
+
+<p>
+Details of the low-level B-tree format used in SQLite version 3.0 can
+be found in header comments to the
+<a href="http://www.sqlite.org/src/finfo?name=src/btreeInt.h">btreeInt.h</a>
+source file and in the <a href="fileformat2.html">file format</a> documentation.
+</p>
+
+<h3>Manifest Typing and BLOB Support</h3>
+
+<p>
+SQLite version 2.8 will deal with data in various formats internally,
+but when writing to the disk or interacting through its API, SQLite 2.8
+always converts data into ASCII text. SQLite 3.0, in contrast, exposes
+its internal data representations to the user and stores binary representations
+to disk when appropriate. The exposing of non-ASCII representations was
+added in order to support BLOBs.
+</p>
+
+<p>
+SQLite version 2.8 had the feature that any type of data could be stored
+in any table column regardless of the declared type of that column. This
+feature is retained in version 3.0, though in a slightly modified form.
+Each table column will store any type of data, though columns have an
+affinity for the format of data defined by their declared datatype.
+When data is inserted into a column, that column will make an attempt
+to convert the data format into the column's declared type. All SQL
+database engines do this. The difference is that SQLite 3.0 will
+still store the data even if a format conversion is not possible.
+</p>
+
+<p>
+For example, if you have a table column declared to be of type "INTEGER"
+and you try to insert a string, the column will look at the text string
+and see if it looks like a number. If the string does look like a number
+it is converted into a number and into an integer if the number does not
+have a fractional part, and stored that way. But if the string is not
+a well-formed number it is still stored as a string. A column with a
+type of "TEXT" tries to convert numbers into an ASCII-Text representation
+before storing them. But BLOBs are stored in TEXT columns as BLOBs because
+you cannot in general convert a BLOB into text.
+</p>
+
+<p>
+In most other SQL database engines the datatype is associated with
+the table column that holds the data - with the data container.
+In SQLite 3.0, the datatype is associated with the data itself, not
+with its container.
+<a href="http://www.paulgraham.com/">Paul Graham</a> in his book
+<i><a href="http://www.paulgraham.com/acl.html">ANSI Common Lisp</a></i></a>
+calls this property "Manifest Typing".
+Other writers have other definitions for the term "manifest typing",
+so beware of confusion. But by whatever name, that is the datatype
+model supported by SQLite 3.0.
+</p>
+
+<p>
+Additional information about datatypes in SQLite version 3.0 is
+available
+<a href="datatype3.html">separately</a>.
+</p>
+
+<h3>Support for UTF-8 and UTF-16</h3>
+
+<p>
+The new API for SQLite 3.0 contains routines that accept text as
+both UTF-8 and UTF-16 in the native byte order of the host machine.
+Each database file manages text as either UTF-8, UTF-16BE (big-endian),
+or UTF-16LE (little-endian). Internally and in the disk file, the
+same text representation is used everywhere. If the text representation
+specified by the database file (in the file header) does not match
+the text representation required by the interface routines, then text
+is converted on-the-fly.
+Constantly converting text from one representation to another can be
+computationally expensive, so it is suggested that programmers choose a
+single representation and stick with it throughout their application.
+</p>
+
+<p>
+In the current implementation of SQLite, the SQL parser only works
+with UTF-8 text. So if you supply UTF-16 text it will be converted.
+This is just an implementation issue and there is nothing to prevent
+future versions of SQLite from parsing UTF-16 encoded SQL natively.
+</p>
+
+<p>
+When creating new user-defined SQL functions and collating sequences,
+each function or collating sequence can specify if it works with
+UTF-8, UTF-16be, or UTF-16le. Separate implementations can be registered
+for each encoding. If an SQL function or collating sequence is required
+but a version for the current text encoding is not available, then
+the text is automatically converted. As before, this conversion takes
+computation time, so programmers are advised to pick a single
+encoding and stick with it in order to minimize the amount of unnecessary
+format juggling.
+</p>
+
+<p>
+SQLite is not particular about the text it receives and is more than
+happy to process text strings that are not normalized or even
+well-formed UTF-8 or UTF-16. Thus, programmers who want to store
+ISO8859 data can do so using the UTF-8 interfaces. As long as no
+attempts are made to use a UTF-16 collating sequence or SQL function,
+the byte sequence of the text will not be modified in any way.
+</p>
+
+<h3>User-defined Collating Sequences</h3>
+
+<p>
+A collating sequence is just a defined order for text. When SQLite 3.0
+sorts (or uses a comparison operator like "&lt;" or "&gt;=") the sort
+order is first determined by the data type.
+</p>
+
+<ul>
+<li>NULLs sort first</li>
+<li>Numeric values sort next in numerical order</li>
+<li>Text values come after numerics</li>
+<li>BLOBs sort last</li>
+</ul>
+
+<p>
+Collating sequences are used for comparing two text strings.
+The collating sequence does not change the ordering of NULLs, numbers,
+or BLOBs, only text.
+</p>
+
+<p>
+A collating sequence is implemented as a function that takes the
+two strings being compared as inputs and returns negative, zero, or
+positive if the first string is less than, equal to, or greater than
+the second.
+SQLite 3.0 comes with a single built-in collating sequence named "BINARY"
+which is implemented using the memcmp() routine from the standard C library.
+The BINARY collating sequence works well for English text. For other
+languages or locales, alternative collating sequences may be preferred.
+</p>
+
+<p>
+The decision of which collating sequence to use is controlled by the
+COLLATE clause in SQL. A COLLATE clause can occur on a table definition,
+to define a default collating sequence to a table column, or on field
+of an index, or in the ORDER BY clause of a SELECT statement.
+Planned enhancements to SQLite are to include standard CAST() syntax
+to allow the collating sequence of an expression to be defined.
+</p>
+
+<h3>64-bit ROWIDs</h3>
+
+<p>
+Every row of a table has a unique rowid.
+If the table defines a column with the type "INTEGER PRIMARY KEY" then that
+column becomes an alias for the rowid. But with or without an INTEGER PRIMARY
+KEY column, every row still has a rowid.
+</p>
+
+<p>
+In SQLite version 3.0, the rowid is a 64-bit signed integer.
+This is an expansion of SQLite version 2.8 which only permitted
+rowids of 32-bits.
+</p>
+
+<p>
+To minimize storage space, the 64-bit rowid is stored as a variable length
+integer. Rowids between 0 and 127 use only a single byte.
+Rowids between 0 and 16383 use just 2 bytes. Up to 2097152 uses three
+bytes. And so forth. Negative rowids are allowed but they always use
+nine bytes of storage and so their use is discouraged. When rowids
+are generated automatically by SQLite, they will always be non-negative.
+</p>
+
+<h3>Improved Concurrency</h3>
+
+<p>
+SQLite version 2.8 allowed multiple simultaneous readers or a single
+writer but not both. SQLite version 3.0 allows one process to begin
+writing the database while other processes continue to read. The
+writer must still obtain an exclusive lock on the database for a brief
+interval in order to commit its changes, but the exclusive lock is no
+longer required for the entire write operation.
+A <a href="lockingv3.html">more detailed report</a> on the locking
+behavior of SQLite version 3.0 is available separately.
+</p>
+
+<p>
+A limited form of table-level locking is now also available in SQLite.
+If each table is stored in a separate database file, those separate
+files can be attached to the main database (using the ATTACH command)
+and the combined databases will function as one. But locks will only
+be acquired on individual files as needed. So if you redefine "database"
+to mean two or more database files, then it is entirely possible for
+two processes to be writing to the same database at the same time.
+To further support this capability, commits of transactions involving
+two or more ATTACHed database are now atomic.
+</p>
+
+<h3>Credits</h3>
+
+<p>
+SQLite version 3.0 is made possible in part by AOL developers
+supporting and embracing great Open-Source Software.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/version3.in?m=33a7439b998fa0b0d">2020-04-28 13:12:41</a> UTC </small></i></p>
+
diff --git a/www/versionnumbers.html b/www/versionnumbers.html
new file mode 100644
index 0000000..fd00058
--- /dev/null
+++ b/www/versionnumbers.html
@@ -0,0 +1,217 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Version Numbers in SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Version Numbers in SQLite
+</div>
+</div>
+
+
+
+
+
+<h1 id="sqlite_version_numbers"><span>1. </span>SQLite Version Numbers</h1>
+
+<p>
+Beginning with <a href="releaselog/3_9_0.html">version 3.9.0</a> (2015-10-14) SQLite uses
+<a href="http://semver.org">semantic versioning</a>.
+Prior to that time, SQLite employed a version identifier that
+contained between two and four numbers.
+
+</p><h2 id="the_new_version_numbering_system_after_dateof_3_9_0_"><span>1.1. </span>The New Version Numbering System (After 2015-10-14)</h2>
+
+<p>
+All SQLite releases starting with 3.9.0 use a three-number
+"<a href="http://semver.org">semantic version</a>" of the form X.Y.Z.
+The first number X is only increased when there is a change that
+breaks backward compatibility. The
+current value for X is 3, and the SQLite developers plan to support
+the current SQLite database file format, SQL syntax, and C interface
+through <a href="lts.html">at least the year 2050</a>. Hence, one
+can expect that all future versions of SQLite for the next several
+decades will begin with "3.".
+
+</p><p>
+The second number Y is incremented for any change that breaks forward
+compatibility by adding new features.
+Most future SQLite releases are expected
+to increment the second number Y. The Z is reset to zero whenever Y
+is increased.
+
+</p><p>
+The third number Z is incremented for releases consisting of only
+small changes that implement performance enhancements and/or bug fixes.
+
+</p><p>
+The rate of enhancement for SQLite over the previous five years
+(2010-2015) is approximately 6 increments of Y per year. The
+numbering format used by for <a href="c3ref/c_source_id.html">SQLITE_VERSION_NUMBER</a> and
+<a href="c3ref/libversion.html">sqlite3_libversion_number()</a> allows versions up to 3.999.999, which is
+more than enough for the planned end-of-support date for SQLite
+in 2050. However, the current tarball naming conventions only
+reserve two digits for the Y and so the naming format for downloads
+will need to be revised in about 2030.
+
+</p><h2 id="the_historical_numbering_system_before_dateof_3_9_0_"><span>1.2. </span>The Historical Numbering System (Before 2015-10-14)</h2>
+
+<p>This historical version numbering system used a two-, three-,
+or four-number version: W.X, W.X.Y, or W.X.Y.Z.
+W was the file format: 1 or 2 or 3.
+X was the major version.
+Y was the minor version.
+Z was used only for patch releases to fix bugs.
+
+</p><p>
+There have been three historical file formats for SQLite.
+SQLite 1.0 through 1.0.32 used the
+<a href="https://www.gnu.org/software/gdbm/gdbm.html">gdbm</a> library as its storage
+engine.
+SQLite 2.0.0 through 2.8.17 used a custom b-tree storage engine that
+supported only text keys and data.
+All modern versions of SQLite (3.0.0 to present) use a b-tree storage
+engine that has full support for binary data and Unicode.
+
+</p><p>
+This major version number X was historically incremented only for
+large and important changes to the code. What constituted "large
+and important" was subjective. The 3.6.23 to 3.7.0 change
+was a result of adding support for <a href="wal.html">WAL mode</a>.
+The 3.7.17 to 3.8.0 change was a result of rewrite known as the
+<a href="queryplanner-ng.html">next generation query planner</a>.
+
+</p><p>
+The minor version number Y was historically incremented for new
+features and/or new interfaces that did not significantly change
+the structure of the code. The addition of <a href="lang_with.html">common table expressions</a>,
+<a href="partialindex.html">partial indexes</a>, and <a href="expridx.html">indexes on expressions</a> are all examples of
+"minor" changes. Again, the distinction between "major" and "minor"
+is subjective.
+
+</p><p>
+The patch level Z was historically only used for bug-fix releases
+that changed only a small number of code lines.
+
+</p><h2 id="version_history"><span>1.3. </span>Version History</h2>
+
+<ul>
+<li><a href="chronology.html">Chronology</a>
+</li><li><a href="changes.html">Change log</a>
+</li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/versionnumbers.in?m=d046ec30f9003d769">2018-05-31 17:37:17</a> UTC </small></i></p>
+
diff --git a/www/vfs.html b/www/vfs.html
new file mode 100644
index 0000000..2a97d0f
--- /dev/null
+++ b/www/vfs.html
@@ -0,0 +1,493 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The SQLite OS Interface or "VFS"</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The SQLite OS Interface or "VFS"
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#the_vfs_in_relation_to_the_rest_of_sqlite">2. The VFS In Relation To The Rest Of SQLite</a></div>
+<div class="fancy-toc1"><a href="#multiple_vfses">3. Multiple VFSes</a></div>
+<div class="fancy-toc2"><a href="#standard_unix_vfses">3.1. Standard Unix VFSes</a></div>
+<div class="fancy-toc2"><a href="#standard_windows_vfses">3.2. Standard Windows VFSes</a></div>
+<div class="fancy-toc2"><a href="#specifying_which_vfs_to_use">3.3. Specifying Which VFS To Use</a></div>
+<div class="fancy-toc2"><a href="#vfs_shims">3.4. VFS Shims</a></div>
+<div class="fancy-toc2"><a href="#other_example_vfses">3.5. Other Example VFSes</a></div>
+<div class="fancy-toc1"><a href="#vfs_implementations">4. VFS Implementations</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>
+This article describes the SQLite OS portability layer or "VFS" - the
+module at the bottom of the SQLite implementation stack
+that provides portability across operating systems.
+</p>
+
+<h1 id="the_vfs_in_relation_to_the_rest_of_sqlite"><span>2. </span>The VFS In Relation To The Rest Of SQLite</h1>
+
+<div>
+<img src="images/vfs1.gif" align="right" hspace="10">
+</div>
+
+<p>
+The internal organization of the SQLite library can be viewed as the
+stack of modules shown to the right.
+The Tokenizer, Parser, and Code Generator components are used to
+process SQL statements and convert them into executable programs
+in a virtual machine language or byte code.
+Roughly speaking, these top three layers implement
+<a href="c3ref/prepare.html">sqlite3_prepare_v2()</a>. The byte code generated by the top three
+layers is a <a href="c3ref/stmt.html">prepared statement</a>.
+The Virtual Machine module is responsible for running the SQL statement
+byte code. The B-Tree module organizes a database file into multiple
+key/value stores with ordered keys and logarithmic performance.
+The Pager module is responsible for loading pages of the database
+file into memory, for implementing and controlling transactions, and
+for creating and maintaining the journal files that prevent database
+corruption following a crash or power failure.
+The OS Interface is a thin abstraction that provides a common set of
+routines for adapting SQLite to run on different operating systems.
+Roughly speaking, the bottom four layers implement
+<a href="c3ref/step.html">sqlite3_step()</a>.
+</p>
+
+<p>
+This article is about the bottom layer.
+</p>
+
+<p>The OS Interface - also called the "VFS" - is what makes SQLite
+portable across operating systems. Whenever any of the other modules
+in SQLite needs to communicate with the operating
+system, they invoke methods in the VFS. The VFS then invokes the
+operating-specific code needed to satisfy the request.
+Hence, porting SQLite to a new
+operating system is simply a matter of writing a new OS interface layer
+or "VFS".</p>
+
+<h1 id="multiple_vfses"><span>3. </span>Multiple VFSes</h1>
+
+<p>
+The standard SQLite source tree contains built-in VFSes for unix
+and windows. Alternative VFSes can be
+added at start-time or run-time using the
+<a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> interface.
+</p>
+
+<p>
+Multiple VFSes can be registered at the same time.
+Each VFS has a unique names.
+Separate <a href="c3ref/sqlite3.html">database connections</a> within the same process can be using
+different VFSes at the same time. For that matter, if a single
+database connection has multiple database files open using
+the <a href="lang_attach.html">ATTACH</a> command, then each attached database might be using a
+different VFS.
+</p>
+
+<h2 id="standard_unix_vfses"><span>3.1. </span>Standard Unix VFSes</h2>
+
+<p>
+Unix builds come with multiple built-in VFSes. The default VFS
+for unix is called "unix" and is used in most applications.
+Other VFSes that might be found in unix (depending on compile-time
+options) include:
+</p>
+
+<ol>
+<li><p><b>unix-dotfile</b> - uses dot-file locking rather than
+ POSIX advisory locks.
+</p></li><li><p><b>unix-excl</b> - obtains and holds an exclusive lock on
+ database files, preventing other processes from accessing the
+ database. Also keeps the <a href="walformat.html#shm">wal-index</a> in heap rather than in
+ shared memory.
+</p></li><li><p><b>unix-none</b> - all file locking operations are no-ops.
+</p></li><li><p><b>unix-namedsem</b> - uses named semaphores for file locking.
+ VXWorks only.
+</p></li></ol>
+
+<p>
+The various unix VFSes differ only in the way they handle file locking -
+they share most of their implementation in common with one another and
+are all located in the same SQLite source file:
+<a href="http://www.sqlite.org/src/doc/trunk/src/os_unix.c">os_unix.c</a>.
+Note that except for "unix" and "unix-excl", the various unix VFSes all
+use incompatible locking implementations. If two processes are accessing
+the same SQLite database using different unix VFSes, they may
+not see each others locks and may end up interfering with one another,
+resulting in database corruption. The "unix-none" VFS in particular
+does no locking at all and will easily result in database corruption if
+used by two or more database connections at the same time.
+Programmers are encouraged to use only "unix" or "unix-excl" unless
+there is a compelling reason to do otherwise.
+</p>
+
+<h2 id="standard_windows_vfses"><span>3.2. </span>Standard Windows VFSes</h2>
+
+
+<p>
+Windows builds also come with multiple built-in VFSes. The default
+Windows VFS is called "win32" and is used in most applications.
+Other VFSes that might be found on windows builds include:
+</p>
+
+<ol>
+<li><p><b>win32-longpath</b> - like "win32" except that pathnames can
+ be up to 65534 bytes in length, whereas pathnames max out at
+ 1040 bytes in "win32".
+</p></li><li><p><b>win32-none</b> - all file locking operations are no-ops.
+</p></li><li><p><b>win32-longpath-none</b> - combination of "win32-longpath"
+ and "win32-none" - long pathnames are supported and all lock
+ operations are no-ops.
+</p></li></ol>
+
+<p>As with unix, most of the code for the various Windows VFSes is shared.
+
+</p><h2 id="specifying_which_vfs_to_use"><span>3.3. </span>Specifying Which VFS To Use</h2>
+
+<p>
+There is always one VFS which is the default VFS. On unix systems,
+the "unix" VFS comes up as the default and on windows it is "win32".
+If no other actions are taken, new database connections will make use
+of the default VFS.
+</p>
+
+<p>
+The default VFS can be changed by registering or re-registering the
+VFS using the <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> interface with a second parameter
+of 1. Hence, if a (unix) process wants to always use the "unix-nolock" VFS
+in place of "unix", the following code would work:
+</p>
+
+<blockquote><pre>
+sqlite3_vfs_register(sqlite3_vfs_find("unix-nolock"), 1);
+</pre></blockquote>
+
+<p>
+An alternate VFS can also be specified as the 4th parameter to the
+<a href="c3ref/open.html">sqlite3_open_v2()</a> function. For example:
+</p>
+
+<blockquote><pre>
+int rc = sqlite3_open_v2("demo.db", &db, SQLITE_OPEN_READWRITE, "unix-nolock");
+</pre></blockquote>
+
+<p>
+Finally, if <a href="uri.html">URI filenames</a> have been enabled, then the alternative
+VFS can be specified using the "vfs=" parameter on the URI. This technique
+works with <a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/open.html">sqlite3_open16()</a>, <a href="c3ref/open.html">sqlite3_open_v2()</a>, and
+when a new database is <a href="lang_attach.html">ATTACH</a>-ed to an existing database connection.
+For example:
+</p>
+
+<blockquote><pre>
+ATTACH 'file:demo2.db?vfs=unix-none' AS demo2;
+</pre></blockquote>
+
+<p>
+The VFS specified by a URI has the highest priority. After that comes
+a VFS specified as the fourth argument to <a href="c3ref/open.html">sqlite3_open_v2()</a>. The
+default VFS is used if no VFS is specified otherwise.
+</p>
+
+<a name="shim"></a>
+
+<h2 id="vfs_shims"><span>3.4. </span>VFS Shims</h2>
+
+<p>
+From the point of view of the uppers layers of the SQLite stack, each
+open database file uses exactly one VFS.
+But in practice, a particular VFS might
+just be a thin wrapper around another VFS that does the real work.
+We call a wrapper VFS a "shim".
+</p>
+
+<p>
+A simple example of a shim is the "vfstrace" VFS. This is a VFS
+(implemented in the
+<a href="http://www.sqlite.org/src/doc/trunk/src/test_vfstrace.c">test_vfstrace.c</a>
+source file) that writes a message associated with each VFS method call
+into a log file, then passes control off to another VFS to do the actual
+work.
+</p>
+
+<h2 id="other_example_vfses"><span>3.5. </span>Other Example VFSes</h2>
+
+<p>
+The following are other VFS implementations available in the public
+SQLite source tree:
+</p>
+
+<ul>
+<li><p>
+<a href="http://www.sqlite.org/src/file/ext/misc/appendvfs.c">appendvfs.c</a> -
+This VFS allows an SQLite database to be appended to the end of some
+other file. This can be used, for example, to append an SQLite database
+onto the end of an executable such that, when run, it can easily
+locate the appended database. The <a href="cli.html">command-line shell</a> will use this
+VFS if launched with the --append option, and its .archive command
+will use it given the --append flag.
+
+</p></li><li><p>
+<a href="http://www.sqlite.org/src/doc/trunk/src/test_demovfs.c">test_demovfs.c</a> -
+This file implements a very simple VFS named "demo" that uses POSIX
+functions such as
+open(), read(), write(), fsync(), close(), fsync(), sleep(), time(),
+and so forth. This VFS only works on unix systems. But it is not
+intended as a replacement for the standard "unix" VFS used by default
+on unix platforms. The "demo" VFS is deliberately kept very simple
+so that it can be used as a learning aid or as template for building
+other VFSes or for porting SQLite to new operating systems.
+
+</p></li><li><p>
+<a href="http://www.sqlite.org/src/doc/trunk/src/test_quota.c">test_quota.c</a> -
+This file implements a shim called "quota" that enforces cumulative
+file size limits on a collection of database files. An auxiliary
+interface is used to define "quota groups". A quota group is a
+set of files (database files, journals, and temporary files) whose
+names all match a <a href="lang_expr.html#glob">GLOB</a> pattern. The sum of the sizes of all files
+in each quota group is tracked, and if that sum exceeds a threshold
+defined for the quota group, a callback function is invoked. That
+callback can either increase the threshold or cause the operation
+that would have exceeded the quota to fail with an
+<a href="rescode.html#full">SQLITE_FULL</a> error. One of the uses of this shim is used to enforce
+resource limits on application databases in Firefox.
+
+</p></li><li><p>
+<a href="http://www.sqlite.org/src/doc/trunk/src/test_multiplex.c">test_multiplex.c</a> -
+This file implements a shim that allows database files to exceed the
+maximum file size of the underlying filesystem. This shim presents
+an interface to the upper six layers of SQLite that makes it look like
+very large files are being used, when in reality each such large file
+is split up into many smaller files on the underlying system.
+This shim has been used, for example, to allow databases to grow
+larger than 2 gibibytes on FAT16 filesystems.
+
+</p></li><li><p>
+<a href="http://www.sqlite.org/src/doc/trunk/src/test_onefile.c">test_onefile.c</a> -
+This file implements a demonstration VFS named "fs" that shows how SQLite
+can be used on an embedded device that lacks a filesystem. Content is
+written directly to the underlying media. A VFS derived from this
+demonstration code could be used by a gadget with a limited amount of
+flash memory to make SQLite behave as the filesystem for the flash memory
+on the device.
+
+</p></li><li><p>
+<a href="http://www.sqlite.org/src/doc/trunk/src/test_journal.c">test_journal.c</a> -
+This file implements a shim used during SQLite testing that verifies that
+the database and rollback journal are written in the correct order and
+are "synced" at appropriate times in order to guarantee that the database
+can recover from a power lose are hard reset at any time. The shim
+checks several invariants on the operation of databases and rollback
+journals and raises exceptions if any of those invariants are violated.
+These invariants, in turn, assure that the database is always recoverable.
+Running a large suite of test cases using this shim provides added
+assurance that SQLite databases will not be damaged by unexpected
+power failures or device resets.
+
+</p></li><li><p>
+<a href="http://www.sqlite.org/src/doc/trunk/src/test_vfs.c">test_vfs.c</a> -
+This file implements a shim that can be used to simulate filesystem faults.
+This shim is used during testing to verify that SQLite responses sanely
+to hardware malfunctions or to other error conditions such as running out
+of filesystem space that are difficult to test on a real system.
+</p></li></ul>
+
+<p>
+There are other VFS implementations both in the core SQLite source code
+library and in available extensions. The list above is not meant to be
+exhaustive but merely representative of the kinds of features that can
+be realized using the VFS interface.
+</p>
+
+<h1 id="vfs_implementations"><span>4. </span>VFS Implementations</h1>
+
+<p>
+A new VFS is implemented by subclassing three objects:
+</p>
+
+<ul>
+<li><a href="c3ref/vfs.html">sqlite3_vfs</a>
+</li><li><a href="c3ref/io_methods.html">sqlite3_io_methods</a>
+</li><li><a href="c3ref/file.html">sqlite3_file</a>
+</li></ul>
+
+<p>
+An <a href="c3ref/vfs.html">sqlite3_vfs</a> object defines the name of the VFS and the core
+methods that implement the interface to the operating system, such
+as checking for existence of files, deleting files, creating files
+and opening and for reading and/or writing, converting filenames
+into their canonical form. The <a href="c3ref/vfs.html">sqlite3_vfs</a> object also contains
+methods for obtaining randomness from the operating system, for
+suspending a process (sleeping) and for finding the current date and
+time.
+</p>
+
+<p>
+The <a href="c3ref/file.html">sqlite3_file</a> object represents an open file.
+The xOpen method of <a href="c3ref/vfs.html">sqlite3_vfs</a> constructs an <a href="c3ref/file.html">sqlite3_file</a>
+object when the file is opened. The <a href="c3ref/file.html">sqlite3_file</a> keeps track
+of the state of the file while it is opened.
+</p>
+
+<p>
+The <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object holds the methods used to interact
+with an open file. Each <a href="c3ref/file.html">sqlite3_file</a> contains a pointer to
+an <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object that is appropriate for the file it
+represents. The <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object contains methods to do
+things such as read and write from the file, to truncate the file,
+to flush any changes to persistent storage, to find the size of the
+file, to lock and unlock the file, and to close file and destroy
+the <a href="c3ref/file.html">sqlite3_file</a> object.
+</p>
+
+<p>
+Writing the code for a new VFS involves constructing a subclass for
+the <a href="c3ref/vfs.html">sqlite3_vfs</a> object and then registering that VFS object using
+a call to <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>. The VFS implementation also
+provides subclasses for <a href="c3ref/file.html">sqlite3_file</a> and <a href="c3ref/io_methods.html">sqlite3_io_methods</a> but
+those objects are not registered directly with SQLite. Instead, the
+<a href="c3ref/file.html">sqlite3_file</a> object is returned from the xOpen method of
+<a href="c3ref/vfs.html">sqlite3_vfs</a> and the <a href="c3ref/file.html">sqlite3_file</a> object points to an instance
+of the <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/vfs.in?m=05ae7aae3e6b495eb">2021-12-06 01:48:47</a> UTC </small></i></p>
+
diff --git a/www/vtab.html b/www/vtab.html
new file mode 100644
index 0000000..ecace6a
--- /dev/null
+++ b/www/vtab.html
@@ -0,0 +1,1969 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The Virtual Table Mechanism Of SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The Virtual Table Mechanism Of SQLite
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc2"><a href="#usage">1.1. Usage</a></div>
+<div class="fancy-toc3"><a href="#temporary_virtual_tables">1.1.1. Temporary virtual tables</a></div>
+<div class="fancy-toc3"><a href="#eponymous_virtual_tables">1.1.2. Eponymous virtual tables</a></div>
+<div class="fancy-toc3"><a href="#eponymous_only_virtual_tables">1.1.3. Eponymous-only virtual tables</a></div>
+<div class="fancy-toc2"><a href="#implementation">1.2. Implementation</a></div>
+<div class="fancy-toc2"><a href="#virtual_tables_and_shared_cache">1.3. Virtual Tables And Shared Cache</a></div>
+<div class="fancy-toc2"><a href="#creating_new_virtual_table_implementations">1.4. Creating New Virtual Table Implementations</a></div>
+<div class="fancy-toc1"><a href="#virtual_table_methods">2. Virtual Table Methods</a></div>
+<div class="fancy-toc2"><a href="#the_xcreate_method">2.1. The xCreate Method</a></div>
+<div class="fancy-toc3"><a href="#hidden_columns_in_virtual_tables">2.1.1. Hidden columns in virtual tables</a></div>
+<div class="fancy-toc3"><a href="#table_valued_functions">2.1.2. Table-valued functions</a></div>
+<div class="fancy-toc3"><a href="#_without_rowid_virtual_tables_">2.1.3. WITHOUT ROWID Virtual Tables </a></div>
+<div class="fancy-toc2"><a href="#the_xconnect_method">2.2. The xConnect Method</a></div>
+<div class="fancy-toc2"><a href="#the_xbestindex_method">2.3. The xBestIndex Method</a></div>
+<div class="fancy-toc3"><a href="#inputs">2.3.1. Inputs</a></div>
+<div class="fancy-toc4"><a href="#like_glob_regexp_and_match_functions">2.3.1.1. LIKE, GLOB, REGEXP, and MATCH functions</a></div>
+<div class="fancy-toc4"><a href="#limit_and_offset">2.3.1.2. LIMIT and OFFSET</a></div>
+<div class="fancy-toc4"><a href="#right_hand_side_values_of_constraints">2.3.1.3. Right-hand side values of constraints</a></div>
+<div class="fancy-toc3"><a href="#outputs">2.3.2. Outputs</a></div>
+<div class="fancy-toc4"><a href="#omit_constraint_checking_in_bytecode">2.3.2.1. Omit constraint checking in bytecode</a></div>
+<div class="fancy-toc4"><a href="#order_by_and_orderbyconsumed">2.3.2.2. ORDER BY and orderByConsumed</a></div>
+<div class="fancy-toc3"><a href="#return_value">2.3.3. Return Value</a></div>
+<div class="fancy-toc3"><a href="#enforcing_required_parameters_on_table_valued_functions">2.3.4. Enforcing Required Parameters On Table-Valued Functions</a></div>
+<div class="fancy-toc2"><a href="#the_xdisconnect_method">2.4. The xDisconnect Method</a></div>
+<div class="fancy-toc2"><a href="#the_xdestroy_method">2.5. The xDestroy Method</a></div>
+<div class="fancy-toc2"><a href="#the_xopen_method">2.6. The xOpen Method</a></div>
+<div class="fancy-toc2"><a href="#the_xclose_method">2.7. The xClose Method</a></div>
+<div class="fancy-toc2"><a href="#the_xeof_method">2.8. The xEof Method</a></div>
+<div class="fancy-toc2"><a href="#the_xfilter_method">2.9. The xFilter Method</a></div>
+<div class="fancy-toc2"><a href="#the_xnext_method">2.10. The xNext Method</a></div>
+<div class="fancy-toc2"><a href="#the_xcolumn_method">2.11. The xColumn Method</a></div>
+<div class="fancy-toc2"><a href="#the_xrowid_method">2.12. The xRowid Method</a></div>
+<div class="fancy-toc2"><a href="#the_xupdate_method">2.13. The xUpdate Method</a></div>
+<div class="fancy-toc2"><a href="#the_xfindfunction_method">2.14. The xFindFunction Method</a></div>
+<div class="fancy-toc2"><a href="#the_xbegin_method">2.15. The xBegin Method</a></div>
+<div class="fancy-toc2"><a href="#the_xsync_method">2.16. The xSync Method</a></div>
+<div class="fancy-toc2"><a href="#the_xcommit_method">2.17. The xCommit Method</a></div>
+<div class="fancy-toc2"><a href="#the_xrollback_method">2.18. The xRollback Method</a></div>
+<div class="fancy-toc2"><a href="#the_xrename_method">2.19. The xRename Method</a></div>
+<div class="fancy-toc2"><a href="#the_xsavepoint_xrelease_and_xrollbackto_methods">2.20. The xSavepoint, xRelease, and xRollbackTo Methods</a></div>
+<div class="fancy-toc2"><a href="#the_xshadowname_method">2.21. The xShadowName Method</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>A virtual table is an object that is registered with an open SQLite
+<a href="c3ref/sqlite3.html">database connection</a>. From the perspective of an SQL statement,
+the virtual table object looks like any other table or view.
+But behind the scenes, queries and updates on a virtual table
+invoke callback methods of the virtual table object instead of
+reading and writing on the database file.
+
+</p><p>The virtual table mechanism allows an application to publish
+interfaces that are accessible from SQL statements as if they were
+tables. SQL statements can do almost anything to a
+virtual table that they can do to a real table, with the following
+exceptions:
+
+</p><p>
+</p><ul>
+<li> One cannot create a trigger on a virtual table.
+</li><li> One cannot create additional indices on a virtual table.
+ (Virtual tables can have indices but that must be built into
+ the virtual table implementation. Indices cannot be added
+ separately using <a href="lang_createindex.html">CREATE INDEX</a> statements.)
+</li><li> One cannot run <a href="lang_altertable.html">ALTER TABLE ... ADD COLUMN</a>
+ commands against a virtual table.
+</li></ul>
+
+<p>Individual virtual table implementations might impose additional
+constraints. For example, some virtual implementations might provide
+read-only tables. Or some virtual table implementations might allow
+<a href="lang_insert.html">INSERT</a> or <a href="lang_delete.html">DELETE</a> but not <a href="lang_update.html">UPDATE</a>. Or some virtual table implementations
+might limit the kinds of UPDATEs that can be made.
+
+</p><p>A virtual table might represent an in-memory data structures.
+Or it might represent a view of data on disk that is not in the
+SQLite format. Or the application might compute the content of the
+virtual table on demand.
+
+</p><p>Here are some existing and postulated uses for virtual tables:
+
+</p><ul>
+<li> A <a href="fts3.html">full-text search</a> interface
+</li><li> Spatial indices using <a href="rtree.html">R-Trees</a>
+</li><li> Introspect the disk content of an SQLite database file
+ (the <a href="dbstat.html">dbstat virtual table</a>)
+</li><li> Read and/or write the content of a comma-separated value (CSV)
+ file
+</li><li> Access the filesystem of the host computer as if it were a database table
+</li><li> Enabling SQL manipulation of data in statistics packages like R
+</li></ul>
+
+<p>See the <a href="vtablist.html">list of virtual tables</a> page for a longer list of actual
+virtual table implementations.
+
+
+</p><h2 id="usage"><span>1.1. </span>Usage</h2>
+
+<p>A virtual table is created using a <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement.
+
+<p><b><a href="syntax/create-virtual-table-stmt.html">create-virtual-table-stmt:</a></b>
+<button id='x2353' onclick='hideorshow("x2353","x2354")'>hide</button></p>
+ <div id='x2354' class='imgcontainer'>
+ <div style="max-width:624px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 624.096 259.848">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L100,32A15 15 0 0 0 116 17A15 15 0 0 0 100 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CREATE</text>
+<polygon points="139,17 127,21 127,12" style="fill:rgb(0,0,0)"/>
+<path d="M116,17L133,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M154,32L213,32A15 15 0 0 0 228 17A15 15 0 0 0 213 2L154,2A15 15 0 0 0 139 17A15 15 0 0 0 154 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="183" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VIRTUAL</text>
+<polygon points="251,17 240,21 240,12" style="fill:rgb(0,0,0)"/>
+<path d="M228,17L246,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,32L306,32A15 15 0 0 0 321 17A15 15 0 0 0 306 2L266,2A15 15 0 0 0 251 17A15 15 0 0 0 266 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="286" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TABLE</text>
+<polygon points="357,17 345,21 345,12" style="fill:rgb(0,0,0)"/>
+<path d="M321,17L351,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M372,32A15 15 0 0 0 387 17A15 15 0 0 0 372 2A15 15 0 0 0 357 17A15 15 0 0 0 372 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="372" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IF</text>
+<polygon points="410,17 399,21 399,12" style="fill:rgb(0,0,0)"/>
+<path d="M387,17L404,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M425,32L445,32A15 15 0 0 0 461 17A15 15 0 0 0 445 2L425,2A15 15 0 0 0 410 17A15 15 0 0 0 425 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="435" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="484,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M461,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,32L543,32A15 15 0 0 0 558 17A15 15 0 0 0 543 2L499,2A15 15 0 0 0 484 17A15 15 0 0 0 499 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="521" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<path d="M47,108L143,108A15 15 0 0 0 159 92A15 15 0 0 0 143 77L47,77A15 15 0 0 0 32 92A15 15 0 0 0 47 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="95" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="182,92 170,97 170,88" style="fill:rgb(0,0,0)"/>
+<path d="M159,92L176,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M197,108A15 15 0 0 0 212 92A15 15 0 0 0 197 77A15 15 0 0 0 182 92A15 15 0 0 0 197 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="197" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="248,92 236,97 236,88" style="fill:rgb(0,0,0)"/>
+<path d="M212,92L242,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M263,108L338,108A15 15 0 0 0 353 92A15 15 0 0 0 338 77L263,77A15 15 0 0 0 248 92A15 15 0 0 0 263 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<path d="M47,219L86,219A15 15 0 0 0 101 204A15 15 0 0 0 86 189L47,189A15 15 0 0 0 32 204A15 15 0 0 0 47 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="67" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="124,204 113,209 113,200" style="fill:rgb(0,0,0)"/>
+<path d="M101,204L118,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M139,219L234,219A15 15 0 0 0 249 204A15 15 0 0 0 234 189L139,189A15 15 0 0 0 124 204A15 15 0 0 0 139 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">module-name</text>
+<polygon points="285,204 274,209 274,200" style="fill:rgb(0,0,0)"/>
+<path d="M249,204L279,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,219A15 15 0 0 0 315 204A15 15 0 0 0 300 189A15 15 0 0 0 285 204A15 15 0 0 0 300 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="204" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,204 340,209 340,200" style="fill:rgb(0,0,0)"/>
+<path d="M315,204L346,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,219L497,219A15 15 0 0 0 512 204A15 15 0 0 0 497 189L366,189A15 15 0 0 0 351 204A15 15 0 0 0 366 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="204" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">module-argument</text>
+<polygon points="548,204 536,209 536,200" style="fill:rgb(0,0,0)"/>
+<path d="M512,204L542,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M563,219A15 15 0 0 0 578 204A15 15 0 0 0 563 189A15 15 0 0 0 548 204A15 15 0 0 0 563 219Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="563" y="204" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="614,204 603,209 603,200" style="fill:rgb(0,0,0)"/>
+<path d="M578,204L608,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="618" cy="204" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,257A15 15 0 0 0 447 242A15 15 0 0 0 432 227A15 15 0 0 0 417 242A15 15 0 0 0 432 257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="242" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="447,242 458,238 458,246" style="fill:rgb(0,0,0)"/>
+<path d="M512,204 L 519,204 Q 527,204 527,219 L 527,227 Q 527,242 512,242 L 468,242 L 453,242" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,242 L 343,242 Q 328,242 328,227 L 328,219 Q 328,204 336,204 L 343,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="432,180 420,184 420,176" style="fill:rgb(0,0,0)"/>
+<path d="M249,204 L 257,204 Q 264,204 264,192 Q 264,180 279,180 L 411,180 L 426,180" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,180 L 576,180 Q 591,180 591,192 Q 591,204 599,204 L 606,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="187,153 198,149 198,157" style="fill:rgb(0,0,0)"/>
+<path d="M353,92 L 361,92 Q 368,92 368,107 L 368,138 Q 368,153 353,153 L 207,153 L 192,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,204 20,209 20,200" style="fill:rgb(0,0,0)"/>
+<path d="M187,153 L 20,153 Q 5,153 5,168 L 5,189 Q 5,204 16,204 L 26,204" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="429,62 441,58 441,66" style="fill:rgb(0,0,0)"/>
+<path d="M558,17 L 566,17 Q 573,17 573,32 L 573,47 Q 573,62 558,62 L 450,62 L 435,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,92 20,97 20,88" style="fill:rgb(0,0,0)"/>
+<path d="M429,62 L 20,62 Q 5,62 5,77 L 5,77 Q 5,92 16,92 L 26,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,47 332,35 340,35" style="fill:rgb(0,0,0)"/>
+<path d="M321,17 L 328,17 Q 336,17 336,29 L 336,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,47 L 336,54 Q 336,62 328,62 L 321,62" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="95,123 84,127 84,118" style="fill:rgb(0,0,0)"/>
+<path d="M5,77 L 5,108 Q 5,123 20,123 L 74,123 L 89,123" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,123 L 210,123 Q 225,123 225,108 L 225,107 Q 225,92 231,92 L 236,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+
+
+</p><p>The CREATE VIRTUAL TABLE statement creates a new table
+called <span class='yyterm'>table-name</span> derived from the class
+<span class='yyterm'>module-name</span>. The <span class='yyterm'>module-name</span>
+is the name that is registered for the virtual table by
+the <a href="c3ref/create_module.html">sqlite3_create_module()</a> interface.
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE tablename USING modulename;
+</pre></div>
+
+<p>One can also provide comma-separated arguments to the module following
+the module name:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE tablename USING modulename(arg1, arg2, ...);
+</pre></div>
+
+<p>The format of the arguments to the module is very general. Each
+<span class='yyterm'>module-argument</span>
+may contain keywords, string literals, identifiers, numbers, and
+punctuation. Each <span class='yyterm'>module-argument</span> is passed as
+written (as text) into the
+<a href="vtab.html#xcreate">constructor method</a> of the virtual table implementation
+when the virtual
+table is created and that constructor is responsible for parsing and
+interpreting the arguments. The argument syntax is sufficiently general
+that a virtual table implementation can, if it wants to, interpret its
+arguments as <a href="lang_createtable.html#tablecoldef">column definitions</a> in an ordinary <a href="lang_createtable.html">CREATE TABLE</a> statement.
+The implementation could also impose some other interpretation on the
+arguments.
+
+</p><p>Once a virtual table has been created, it can be used like any other
+table with the exceptions noted above and imposed by specific virtual
+table implementations. A virtual table is destroyed using the ordinary
+<a href="lang_droptable.html">DROP TABLE</a> syntax.
+
+</p><h3 id="temporary_virtual_tables"><span>1.1.1. </span>Temporary virtual tables</h3>
+
+<p>There is no "CREATE TEMP VIRTUAL TABLE" statement. To create a
+temporary virtual table, add the "temp" schema
+before the virtual table name.
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE <b>temp.</b>tablename USING module(arg1, ...);
+</pre></div>
+
+<a name="epovtab"></a>
+
+<h3 id="eponymous_virtual_tables"><span>1.1.2. </span>Eponymous virtual tables</h3>
+
+<p>Some virtual tables exist automatically in the "main" schema of
+every database connection in which their
+module is registered, even without a <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement.
+Such virtual tables are called "eponymous virtual tables".
+To use an eponymous virtual table, simply use the
+module name as if it were a table.
+Eponymous virtual tables exist in the "main" schema only, so they will
+not work if prefixed with a different schema name.
+
+</p><p>An example of an eponymous virtual table is the <a href="dbstat.html">dbstat virtual table</a>.
+To use the dbstat virtual table as an eponymous virtual table,
+simply query against the "dbstat"
+module name, as if it were an ordinary table. (Note that SQLite
+must be compiled with the <a href="compile.html#enable_dbstat_vtab">SQLITE_ENABLE_DBSTAT_VTAB</a> option to include
+the dbstat virtual table in the build.)
+
+</p><div class="codeblock"><pre>SELECT * FROM dbstat;
+</pre></div>
+
+<p>A virtual table is eponymous if its <a href="vtab.html#xcreate">xCreate</a> method is the exact same
+function as the <a href="vtab.html#xconnect">xConnect</a> method, or if the <a href="vtab.html#xcreate">xCreate</a> method is NULL.
+The <a href="vtab.html#xcreate">xCreate</a> method is called when a virtual table is first created
+using the <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement. The <a href="vtab.html#xconnect">xConnect</a> method
+is invoked whenever
+a database connection attaches to or reparses a schema. When these two methods
+are the same, that indicates that the virtual table has no persistent
+state that needs to be created and destroyed.
+
+<a name="epoonlyvtab"></a>
+
+</p><h3 id="eponymous_only_virtual_tables"><span>1.1.3. </span>Eponymous-only virtual tables</h3>
+<p>If the <a href="vtab.html#xcreate">xCreate</a> method is NULL, then
+<a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statements are prohibited for that virtual table,
+and the virtual table is an "eponymous-only virtual table".
+Eponymous-only virtual tables are useful as
+<a href="vtab.html#tabfunc2">table-valued functions</a>.
+
+</p><p>
+Note that prior to <a href="releaselog/3_9_0.html">version 3.9.0</a> (2015-10-14),
+SQLite did not check the xCreate method
+for NULL before invoking it. So if an eponymous-only virtual table is
+registered with SQLite <a href="releaselog/3_8_11_1.html">version 3.8.11.1</a> (2015-07-29)
+or earlier and a <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a>
+command is attempted against that virtual table module, a jump to a NULL
+pointer will occur, resulting in a crash.
+
+</p><h2 id="implementation"><span>1.2. </span>Implementation</h2>
+
+<p>Several new C-level objects are used by the virtual table implementation:
+
+</p><div class="codeblock"><pre>typedef struct sqlite3_vtab sqlite3_vtab;
+typedef struct sqlite3_index_info sqlite3_index_info;
+typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor;
+typedef struct sqlite3_module sqlite3_module;
+</pre></div>
+
+<p>The <a href="c3ref/module.html">sqlite3_module</a> structure defines a module object used to implement
+a virtual table. Think of a module as a class from which one can
+construct multiple virtual tables having similar properties. For example,
+one might have a module that provides read-only access to
+comma-separated-value (CSV) files on disk. That one module can then be
+used to create several virtual tables where each virtual table refers
+to a different CSV file.
+
+</p><p>The module structure contains methods that are invoked by SQLite to
+perform various actions on the virtual table such as creating new
+instances of a virtual table or destroying old ones, reading and
+writing data, searching for and deleting, updating, or inserting rows.
+The module structure is explained in more detail below.
+
+</p><p>Each virtual table instance is represented by an <a href="c3ref/vtab.html">sqlite3_vtab</a> structure.
+The sqlite3_vtab structure looks like this:
+
+</p><div class="codeblock"><pre>struct sqlite3_vtab {
+ const sqlite3_module *pModule;
+ int nRef;
+ char *zErrMsg;
+};
+</pre></div>
+
+<p>Virtual table implementations will normally subclass this structure
+to add additional private and implementation-specific fields.
+The nRef field is used internally by the SQLite core and should not
+be altered by the virtual table implementation. The virtual table
+implementation may pass error message text to the core by putting
+an error message string in zErrMsg.
+Space to hold this error message string must be obtained from an
+SQLite memory allocation function such as <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> or
+<a href="c3ref/free.html">sqlite3_malloc()</a>.
+Prior to assigning a new value to zErrMsg, the virtual table
+implementation must free any preexisting content of zErrMsg using
+<a href="c3ref/free.html">sqlite3_free()</a>. Failure to do this will result in a memory leak.
+The SQLite core will free and zero the content of zErrMsg when it
+delivers the error message text to the client application or when
+it destroys the virtual table. The virtual table implementation only
+needs to worry about freeing the zErrMsg content when it overwrites
+the content with a new, different error message.
+
+</p><p>The <a href="c3ref/vtab_cursor.html">sqlite3_vtab_cursor</a> structure represents a pointer to a specific
+row of a virtual table. This is what an sqlite3_vtab_cursor looks like:
+
+</p><div class="codeblock"><pre>struct sqlite3_vtab_cursor {
+ sqlite3_vtab *pVtab;
+};
+</pre></div>
+
+<p>Once again, practical implementations will likely subclass this
+structure to add additional private fields.
+
+</p><p>The <a href="c3ref/index_info.html">sqlite3_index_info</a> structure is used to pass information into
+and out of the xBestIndex method of the module that implements a
+virtual table.
+
+</p><p>Before a <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement can be run, the module
+specified in that statement must be registered with the database
+connection. This is accomplished using either of the <a href="c3ref/create_module.html">sqlite3_create_module()</a>
+or <a href="c3ref/create_module.html">sqlite3_create_module_v2()</a> interfaces:
+
+</p><div class="codeblock"><pre>int sqlite3_create_module(
+ sqlite3 *db, /* SQLite connection to register module with */
+ const char *zName, /* Name of the module */
+ const sqlite3_module *, /* Methods for the module */
+ void * /* Client data for xCreate/xConnect */
+);
+int sqlite3_create_module_v2(
+ sqlite3 *db, /* SQLite connection to register module with */
+ const char *zName, /* Name of the module */
+ const sqlite3_module *, /* Methods for the module */
+ void *, /* Client data for xCreate/xConnect */
+ void(*xDestroy)(void*) /* Client data destructor function */
+);
+</pre></div>
+
+<p>The <a href="c3ref/create_module.html">sqlite3_create_module()</a> and <a href="c3ref/create_module.html">sqlite3_create_module_v2()</a>
+routines associates a module name with
+an <a href="c3ref/module.html">sqlite3_module</a> structure and a separate client data that is specific
+to each module. The only difference between the two create_module methods
+is that the _v2 method includes an extra parameter that specifies a
+destructor for client data pointer. The module structure is what defines
+the behavior of a virtual table. The module structure looks like this:
+
+</p><div class="codeblock"><pre>
+struct sqlite3_module {
+ int iVersion;
+ int (*xCreate)(sqlite3*, void *pAux,
+ int argc, char *const*argv,
+ sqlite3_vtab **ppVTab,
+ char **pzErr);
+ int (*xConnect)(sqlite3*, void *pAux,
+ int argc, char *const*argv,
+ sqlite3_vtab **ppVTab,
+ char **pzErr);
+ int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
+ int (*xDisconnect)(sqlite3_vtab *pVTab);
+ int (*xDestroy)(sqlite3_vtab *pVTab);
+ int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
+ int (*xClose)(sqlite3_vtab_cursor*);
+ int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
+ int argc, sqlite3_value **argv);
+ int (*xNext)(sqlite3_vtab_cursor*);
+ int (*xEof)(sqlite3_vtab_cursor*);
+ int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int);
+ int (*xRowid)(sqlite3_vtab_cursor*, sqlite_int64 *pRowid);
+ int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite_int64 *);
+ int (*xBegin)(sqlite3_vtab *pVTab);
+ int (*xSync)(sqlite3_vtab *pVTab);
+ int (*xCommit)(sqlite3_vtab *pVTab);
+ int (*xRollback)(sqlite3_vtab *pVTab);
+ int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName,
+ void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
+ void **ppArg);
+ int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
+ /* The methods above are in version 1 of the sqlite_module object. Those
+ ** below are for version 2 and greater. */
+ int (*xSavepoint)(sqlite3_vtab *pVTab, int);
+ int (*xRelease)(sqlite3_vtab *pVTab, int);
+ int (*xRollbackTo)(sqlite3_vtab *pVTab, int);
+ /* The methods above are in versions 1 and 2 of the sqlite_module object.
+ ** Those below are for version 3 and greater. */
+ int (*xShadowName)(const char*);
+};
+</pre></div>
+
+<p>The module structure defines all of the methods for each virtual
+table object. The module structure also contains the iVersion field which
+defines the particular edition of the module table structure. Currently,
+iVersion is always 3 or less, but in future releases of SQLite the module
+structure definition might be extended with additional methods and in
+that case the maximum iVersion value will be increased.
+
+</p><p>The rest of the module structure consists of methods used to implement
+various features of the virtual table. Details on what each of these
+methods do are provided in the sequel.
+
+</p><h2 id="virtual_tables_and_shared_cache"><span>1.3. </span>Virtual Tables And Shared Cache</h2>
+
+<p>Prior to SQLite <a href="releaselog/3_6_17.html">version 3.6.17</a> (2009-08-10),
+the virtual table mechanism assumes
+that each <a href="c3ref/sqlite3.html">database connection</a> kept
+its own copy of the database schema. Hence, the virtual table mechanism
+could not be used in a database that has <a href="sharedcache.html">shared cache mode</a> enabled.
+The <a href="c3ref/create_module.html">sqlite3_create_module()</a> interface would return an error if
+<a href="sharedcache.html">shared cache mode</a> is enabled. That restriction was relaxed
+beginning with SQLite <a href="releaselog/3_6_17.html">version 3.6.17</a>.
+
+<a name="customvtab"></a>
+
+</p><h2 id="creating_new_virtual_table_implementations"><span>1.4. </span>Creating New Virtual Table Implementations</h2>
+
+<p>Follow these steps to create your own virtual table:
+
+</p><p>
+</p><ol>
+<li> Write all necessary methods.
+</li><li> Create an instance of the <a href="c3ref/module.html">sqlite3_module</a> structure containing pointers
+ to all the methods from step 1.
+</li><li> Register your <a href="c3ref/module.html">sqlite3_module</a> structure using one of the
+ <a href="c3ref/create_module.html">sqlite3_create_module()</a> or <a href="c3ref/create_module.html">sqlite3_create_module_v2()</a> interfaces.
+</li><li> Run a <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> command that specifies the new module in
+ the USING clause.
+</li></ol>
+
+<p>The only really hard part is step 1. You might want to start with an
+existing virtual table implementation and modify it to suit your needs.
+The <a href="https://sqlite.org/src/dir?ci=trunk&type=tree">SQLite source tree</a>
+contains many virtual table implementations that are suitable for copying,
+including:
+
+</p><p>
+</p><ul>
+<li> <b><a href="https://sqlite.org/src/file/ext/misc/templatevtab.c">templatevtab.c</a></b>
+&rarr; A virtual table created specifically to serve as a template for
+other custom virtual tables.
+</li><li> <b><a href="https://sqlite.org/src/file/ext/misc/series.c">series.c</a></b>
+&rarr; Implementation of the generate_series() table-valued function.
+</li><li> <b><a href="https://sqlite.org/src/file/src/json.c">json.c</a></b> &rarr;
+Contains the sources for the <a href="json1.html#jeach">json_each()</a> and <a href="json1.html#jtree">json_tree()</a> table-valued
+functions.
+</li><li> <b><a href="https://sqlite.org/src/file/ext/misc/csv.c">csv.c</a></b> &rarr;
+A virtual table that reads CSV files.
+</li></ul>
+
+
+<p>There are <a href="vtablist.html">many other virtual table implementations</a>
+in the SQLite source tree that can be used as examples. Locate
+these other virtual table implementations by searching
+for "sqlite3_create_module".
+
+</p><p>You might also want to implement your new virtual table as a
+<a href="loadext.html">loadable extension</a>.
+
+</p><h1 id="virtual_table_methods"><span>2. </span>Virtual Table Methods</h1>
+
+<a name="xcreate"></a>
+
+<h2 id="the_xcreate_method"><span>2.1. </span>The xCreate Method</h2>
+
+<div class="codeblock"><pre>int (*xCreate)(sqlite3 *db, void *pAux,
+ int argc, char *const*argv,
+ sqlite3_vtab **ppVTab,
+ char **pzErr);
+</pre></div>
+
+<p>The xCreate method is called to create a new instance of a virtual table
+in response to a <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement.
+If the xCreate method is the same pointer as the <a href="vtab.html#xconnect">xConnect</a> method, then the
+virtual table is an <a href="vtab.html#epovtab">eponymous virtual table</a>.
+If the xCreate method is omitted (if it is a NULL pointer) then the virtual
+table is an <a href="vtab.html#epoonlyvtab">eponymous-only virtual table</a>.
+
+
+</p><p>The db parameter is a pointer to the SQLite <a href="c3ref/sqlite3.html">database connection</a> that
+is executing the <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement.
+The pAux argument is the copy of the client data pointer that was the
+fourth argument to the <a href="c3ref/create_module.html">sqlite3_create_module()</a> or
+<a href="c3ref/create_module.html">sqlite3_create_module_v2()</a> call that registered the
+<a href="c3ref/module.html">virtual table module</a>.
+The argv parameter is an array of argc pointers to null terminated strings.
+The first string, argv[0], is the name of the module being invoked. The
+module name is the name provided as the second argument to
+<a href="c3ref/create_module.html">sqlite3_create_module()</a> and as the argument to the USING clause of the
+<a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement that is running.
+The second, argv[1], is the name of the database in which the new virtual
+table is being created. The database name is "main" for the primary database, or
+"temp" for TEMP database, or the name given at the end of the <a href="lang_attach.html">ATTACH</a>
+statement for attached databases. The third element of the array, argv[2],
+is the name of the new virtual table, as specified following the TABLE
+keyword in the <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement.
+If present, the fourth and subsequent strings in the argv[] array report
+the arguments to the module name in the <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> statement.
+
+</p><p>The job of this method is to construct the new virtual table object
+(an <a href="c3ref/vtab.html">sqlite3_vtab</a> object) and return a pointer to it in *ppVTab.
+
+</p><p>As part of the task of creating a new <a href="c3ref/vtab.html">sqlite3_vtab</a> structure, this
+method <u>must</u> invoke <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a> to tell the SQLite
+core about the columns and datatypes in the virtual table.
+The <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a> API has the following prototype:
+
+</p><div class="codeblock"><pre>int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable)
+</pre></div>
+
+<p>The first argument to <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a> must be the same
+<a href="c3ref/sqlite3.html">database connection</a> pointer as the first parameter to this method.
+The second argument to <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a> must a zero-terminated
+UTF-8 string that contains a well-formed <a href="lang_createtable.html">CREATE TABLE</a> statement that
+defines the columns in the virtual table and their data types.
+The name of the table in this CREATE TABLE statement is ignored,
+as are all constraints. Only the column names and datatypes matter.
+The CREATE TABLE statement string need not to be
+held in persistent memory. The string can be
+deallocated and/or reused as soon as the <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a>
+routine returns.
+
+</p><p>The xConnect method can also optionally request special features
+for the virtual table by making one or more calls to
+the <a href="c3ref/vtab_config.html">sqlite3_vtab_config()</a> interface:
+
+</p><div class="codeblock"><pre>int sqlite3_vtab_config(sqlite3 *db, int op, ...);
+</pre></div>
+
+<p>Calls to sqlite3_vtab_config() are optional. But for maximum
+security, it is recommended that virtual table implementations
+invoke "<a href="c3ref/vtab_config.html">sqlite3_vtab_config</a>(db, <a href="c3ref/c_vtab_constraint_support.html#sqlitevtabdirectonly">SQLITE_VTAB_DIRECTONLY</a>)" if the
+virtual table will not be used from inside of triggers or views.
+
+</p><p>The xCreate method need not initialize the pModule, nRef, and zErrMsg
+fields of the <a href="c3ref/vtab.html">sqlite3_vtab</a> object. The SQLite core will take care of
+that chore.
+
+</p><p>The xCreate should return <a href="rescode.html#ok">SQLITE_OK</a> if it is successful in
+creating the new virtual table, or <a href="rescode.html#error">SQLITE_ERROR</a> if it is not successful.
+If not successful, the <a href="c3ref/vtab.html">sqlite3_vtab</a> structure must not be allocated.
+An error message may optionally be returned in *pzErr if unsuccessful.
+Space to hold the error message string must be allocated using
+an SQLite memory allocation function like
+<a href="c3ref/free.html">sqlite3_malloc()</a> or <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> as the SQLite core will
+attempt to free the space using <a href="c3ref/free.html">sqlite3_free()</a> after the error has
+been reported up to the application.
+
+</p><p>
+If the xCreate method is omitted (left as a NULL pointer) then the
+virtual table is an <a href="vtab.html#epoonlyvtab">eponymous-only virtual table</a>. New instances of
+the virtual table cannot be created using <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> and the
+virtual table can only be used via its module name.
+Note that SQLite versions prior to 3.9.0 (2015-10-14) do not understand
+eponymous-only virtual tables and will segfault if an attempt is made
+to <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> on an eponymous-only virtual table because
+the xCreate method was not checked for null.
+
+</p><p>
+If the xCreate method is the exact same pointer as the <a href="vtab.html#xconnect">xConnect</a> method,
+that indicates that the virtual table does not need to initialize backing
+store. Such a virtual table can be used as an <a href="vtab.html#epovtab">eponymous virtual table</a>
+or as a named virtual table using <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a> or both.
+
+<a name="hiddencol"></a>
+
+</p><h3 id="hidden_columns_in_virtual_tables"><span>2.1.1. </span>Hidden columns in virtual tables</h3>
+<p>If a column datatype contains the special keyword "HIDDEN"
+(in any combination of upper and lower case letters) then that keyword
+it is omitted from the column datatype name and the column is marked
+as a hidden column internally.
+A hidden column differs from a normal column in three respects:
+
+</p><p>
+</p><ul>
+<li> Hidden columns are not listed in the dataset returned by
+ "<a href="pragma.html#pragma_table_info">PRAGMA table_info</a>",
+</li><li> Hidden columns are not included in the expansion of a "*"
+ expression in the result set of a <a href="lang_select.html">SELECT</a>, and
+</li><li> Hidden columns are not included in the implicit column-list
+ used by an <a href="lang_insert.html">INSERT</a> statement that lacks an explicit column-list.
+</li></ul>
+
+<p>For example, if the following SQL is passed to <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a>:
+
+</p><div class="codeblock"><pre>CREATE TABLE x(a HIDDEN VARCHAR(12), b INTEGER, c INTEGER Hidden);
+</pre></div>
+
+<p>Then the virtual table would be created with two hidden columns,
+and with datatypes of "VARCHAR(12)" and "INTEGER".
+
+</p><p>An example use of hidden columns can be seen in the <a href="fts3.html">FTS3</a> virtual
+table implementation, where every FTS virtual table
+contains an <a href="fts3.html#hiddencol">FTS hidden column</a> that is used to pass information from the
+virtual table into <a href="fts3.html#snippet">FTS auxiliary functions</a> and to the <a href="fts3.html#full_text_index_queries">FTS MATCH</a> operator.
+
+<a name="tabfunc2"></a>
+
+</p><h3 id="table_valued_functions"><span>2.1.2. </span>Table-valued functions</h3>
+
+<p>A <a href="vtab.html">virtual table</a> that contains <a href="vtab.html#hiddencol">hidden columns</a> can be used like
+a table-valued function in the FROM clause of a <a href="lang_select.html">SELECT</a> statement.
+The arguments to the table-valued function become constraints on
+the HIDDEN columns of the virtual table.
+
+</p><p>For example, the "generate_series" extension (located in the
+<a href="http://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/series.c">ext/misc/series.c</a>
+file in the <a href="http://www.sqlite.org/src/tree?ci=trunk">source tree</a>)
+implements an <a href="vtab.html#epovtab">eponymous virtual table</a> with the following schema:
+
+</p><div class="codeblock"><pre>CREATE TABLE generate_series(
+ value,
+ start HIDDEN,
+ stop HIDDEN,
+ step HIDDEN
+);
+</pre></div>
+
+<p>The <a href="vtab.html#xbestindex">sqlite3_module.xBestIndex</a> method in the implementation of this
+table checks for equality constraints against the HIDDEN columns, and uses
+those as input parameters to determine the range of integer "value" outputs
+to generate. Reasonable defaults are used for any unconstrained columns.
+For example, to list all integers between 5 and 50:
+
+</p><div class="codeblock"><pre>SELECT value FROM generate_series(5,50);
+</pre></div>
+
+<p>The previous query is equivalent to the following:
+
+</p><div class="codeblock"><pre>SELECT value FROM generate_series WHERE start=5 AND stop=50;
+</pre></div>
+
+<p>Arguments on the virtual table name are matched to <a href="vtab.html#hiddencol">hidden columns</a>
+in order. The number of arguments can be less than the
+number of hidden columns, in which case the latter hidden columns are
+unconstrained. However, an error results if there are more arguments
+than there are hidden columns in the virtual table.
+
+<a name="worid"></a>
+
+</p><h3 id="_without_rowid_virtual_tables_"><span>2.1.3. </span> WITHOUT ROWID Virtual Tables </h3>
+
+<p>Beginning with SQLite <a href="releaselog/3_14.html">version 3.14.0</a> (2016-08-08),
+the CREATE TABLE statement that
+is passed into <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a> may contain a <a href="withoutrowid.html">WITHOUT ROWID</a> clause.
+This is useful for cases where the virtual table rows
+cannot easily be mapped into unique integers. A CREATE TABLE
+statement that includes WITHOUT ROWID must define one or more columns as
+the PRIMARY KEY. Every column of the PRIMARY KEY must individually be
+NOT NULL and all columns for each row must be collectively unique.
+
+</p><p>Note that SQLite does not enforce the PRIMARY KEY for a WITHOUT ROWID
+virtual table. Enforcement is the responsibility of the underlying
+virtual table implementation. But SQLite does assume that the PRIMARY KEY
+constraint is valid - that the identified columns really are UNIQUE and
+NOT NULL - and it uses that assumption to optimize queries against the
+virtual table.
+
+</p><p>The rowid column is not accessible on a
+WITHOUT ROWID virtual table (of course).
+
+</p><p>The <a href="vtab.html#xupdate">xUpdate</a> method was originally designed around having a
+<a href="lang_createtable.html#rowid">ROWID</a> as a single value. The <a href="vtab.html#xupdate">xUpdate</a> method has been expanded to
+accommodate an arbitrary PRIMARY KEY in place of the ROWID, but the
+PRIMARY KEY must still be only one column. For this reason, SQLite
+will reject any WITHOUT ROWID virtual table that has more than one
+PRIMARY KEY column and a non-NULL xUpdate method.
+
+<a name="xconnect"></a>
+
+</p><h2 id="the_xconnect_method"><span>2.2. </span>The xConnect Method</h2>
+
+<div class="codeblock"><pre>int (*xConnect)(sqlite3*, void *pAux,
+ int argc, char *const*argv,
+ sqlite3_vtab **ppVTab,
+ char **pzErr);
+</pre></div>
+
+<p>The xConnect method is very similar to <a href="vtab.html#xcreate">xCreate</a>.
+It has the same parameters and constructs a new <a href="c3ref/vtab.html">sqlite3_vtab</a> structure
+just like xCreate.
+And it must also call <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a> like xCreate. It
+should also make all of the same <a href="c3ref/vtab_config.html">sqlite3_vtab_config()</a> calls as
+xCreate.
+
+</p><p>The difference is that xConnect is called to establish a new
+connection to an existing virtual table whereas xCreate is called
+to create a new virtual table from scratch.
+
+</p><p>The xCreate and xConnect methods are only different when the
+virtual table has some kind of backing store that must be initialized
+the first time the virtual table is created. The xCreate method creates
+and initializes the backing store. The xConnect method just connects
+to an existing backing store. When xCreate and xConnect are the same,
+the table is an <a href="vtab.html#epovtab">eponymous virtual table</a>.
+
+</p><p>As an example, consider a virtual table implementation that
+provides read-only access to existing comma-separated-value (CSV)
+files on disk. There is no backing store that needs to be created
+or initialized for such a virtual table (since the CSV files already
+exist on disk) so the xCreate and xConnect methods will be identical
+for that module.
+
+</p><p>Another example is a virtual table that implements a full-text index.
+The xCreate method must create and initialize data structures to hold
+the dictionary and posting lists for that index. The xConnect method,
+on the other hand, only has to locate and use an existing dictionary
+and posting lists that were created by a prior xCreate call.
+
+</p><p>The xConnect method must return <a href="rescode.html#ok">SQLITE_OK</a> if it is successful
+in creating the new virtual table, or <a href="rescode.html#error">SQLITE_ERROR</a> if it is not
+successful. If not successful, the <a href="c3ref/vtab.html">sqlite3_vtab</a> structure must not be
+allocated. An error message may optionally be returned in *pzErr if
+unsuccessful.
+Space to hold the error message string must be allocated using
+an SQLite memory allocation function like
+<a href="c3ref/free.html">sqlite3_malloc()</a> or <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> as the SQLite core will
+attempt to free the space using <a href="c3ref/free.html">sqlite3_free()</a> after the error has
+been reported up to the application.
+
+</p><p>The xConnect method is required for every virtual table implementation,
+though the <a href="vtab.html#xcreate">xCreate</a> and xConnect pointers of the <a href="c3ref/module.html">sqlite3_module</a> object
+may point to the same function if the virtual table does not need to
+initialize backing store.
+
+<a name="xbestindex"></a>
+
+</p><h2 id="the_xbestindex_method"><span>2.3. </span>The xBestIndex Method</h2>
+
+<p>SQLite uses the xBestIndex method of a virtual table module to determine
+the best way to access the virtual table.
+The xBestIndex method has a prototype like this:
+
+</p><div class="codeblock"><pre>int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
+</pre></div>
+
+<p>The SQLite core communicates with the xBestIndex method by filling
+in certain fields of the <a href="c3ref/index_info.html">sqlite3_index_info</a> structure and passing a
+pointer to that structure into xBestIndex as the second parameter.
+The xBestIndex method fills out other fields of this structure which
+forms the reply. The <a href="c3ref/index_info.html">sqlite3_index_info</a> structure looks like this:
+
+</p><div class="codeblock"><pre>struct sqlite3_index_info {
+ /* Inputs */
+ const int nConstraint; /* Number of entries in aConstraint */
+ const struct sqlite3_index_constraint {
+ int iColumn; /* Column constrained. -1 for ROWID */
+ unsigned char op; /* Constraint operator */
+ unsigned char usable; /* True if this constraint is usable */
+ int iTermOffset; /* Used internally - xBestIndex should ignore */
+ } *const aConstraint; /* Table of WHERE clause constraints */
+ const int nOrderBy; /* Number of terms in the ORDER BY clause */
+ const struct sqlite3_index_orderby {
+ int iColumn; /* Column number */
+ unsigned char desc; /* True for DESC. False for ASC. */
+ } *const aOrderBy; /* The ORDER BY clause */
+
+ /* Outputs */
+ struct sqlite3_index_constraint_usage {
+ int argvIndex; /* if >0, constraint is part of argv to xFilter */
+ unsigned char omit; /* Do not code a test for this constraint */
+ } *const aConstraintUsage;
+ int idxNum; /* Number used to identify the index */
+ char *idxStr; /* String, possibly obtained from sqlite3_malloc */
+ int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */
+ int orderByConsumed; /* True if output is already ordered */
+ double estimatedCost; /* Estimated cost of using this index */
+ <b>/* Fields below are only available in SQLite 3.8.2 and later */</b>
+ sqlite3_int64 estimatedRows; /* Estimated number of rows returned */
+ <b>/* Fields below are only available in SQLite 3.9.0 and later */</b>
+ int idxFlags; /* Mask of SQLITE_INDEX_SCAN_* flags */
+ <b>/* Fields below are only available in SQLite 3.10.0 and later */</b>
+ sqlite3_uint64 colUsed; /* Input: Mask of columns used by statement */
+};
+</pre></div>
+
+<p>Note the warnings on the "estimatedRows", "idxFlags", and colUsed fields.
+These fields were added with SQLite versions 3.8.2, 3.9.0, and 3.10.0, respectively.
+Any extension that reads or writes these fields must first check that the
+version of the SQLite library in use is greater than or equal to appropriate
+version - perhaps comparing the value returned from <a href="c3ref/libversion.html">sqlite3_libversion_number()</a>
+against constants 3008002, 3009000, and/or 3010000. The result of attempting
+to access these fields in an sqlite3_index_info structure created by an
+older version of SQLite are undefined.
+
+</p><p>In addition, there are some defined constants:
+
+</p><div class="codeblock"><pre>#define SQLITE_INDEX_CONSTRAINT_EQ 2
+#define SQLITE_INDEX_CONSTRAINT_GT 4
+#define SQLITE_INDEX_CONSTRAINT_LE 8
+#define SQLITE_INDEX_CONSTRAINT_LT 16
+#define SQLITE_INDEX_CONSTRAINT_GE 32
+#define SQLITE_INDEX_CONSTRAINT_MATCH 64
+#define SQLITE_INDEX_CONSTRAINT_LIKE 65 /* 3.10.0 and later */
+#define SQLITE_INDEX_CONSTRAINT_GLOB 66 /* 3.10.0 and later */
+#define SQLITE_INDEX_CONSTRAINT_REGEXP 67 /* 3.10.0 and later */
+#define SQLITE_INDEX_CONSTRAINT_NE 68 /* 3.21.0 and later */
+#define SQLITE_INDEX_CONSTRAINT_ISNOT 69 /* 3.21.0 and later */
+#define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70 /* 3.21.0 and later */
+#define SQLITE_INDEX_CONSTRAINT_ISNULL 71 /* 3.21.0 and later */
+#define SQLITE_INDEX_CONSTRAINT_IS 72 /* 3.21.0 and later */
+#define SQLITE_INDEX_CONSTRAINT_LIMIT 73 /* 3.38.0 and later */
+#define SQLITE_INDEX_CONSTRAINT_OFFSET 74 /* 3.38.0 and later */
+#define SQLITE_INDEX_CONSTRAINT_FUNCTION 150 /* 3.25.0 and later */
+#define SQLITE_INDEX_SCAN_UNIQUE 1 /* Scan visits at most 1 row */
+</pre></div>
+
+<p>Use the <a href="c3ref/vtab_collation.html">sqlite3_vtab_collation()</a> interface to find the name of
+the <a href="datatype3.html#collation">collating sequence</a> that should be used when evaluating the i-th
+constraint:
+
+</p><div class="codeblock"><pre>const char *sqlite3_vtab_collation(sqlite3_index_info*, int i);
+</pre></div>
+
+<p>The SQLite core calls the xBestIndex method when it is compiling a query
+that involves a virtual table. In other words, SQLite calls this method
+when it is running <a href="c3ref/prepare.html">sqlite3_prepare()</a> or the equivalent.
+By calling this method, the
+SQLite core is saying to the virtual table that it needs to access
+some subset of the rows in the virtual table and it wants to know the
+most efficient way to do that access. The xBestIndex method replies
+with information that the SQLite core can then use to conduct an
+efficient search of the virtual table.
+
+</p><p>While compiling a single SQL query, the SQLite core might call
+xBestIndex multiple times with different settings in <a href="c3ref/index_info.html">sqlite3_index_info</a>.
+The SQLite core will then select the combination that appears to
+give the best performance.
+
+</p><p>Before calling this method, the SQLite core initializes an instance
+of the <a href="c3ref/index_info.html">sqlite3_index_info</a> structure with information about the
+query that it is currently trying to process. This information
+derives mainly from the WHERE clause and ORDER BY or GROUP BY clauses
+of the query, but also from any ON or USING clauses if the query is a
+join. The information that the SQLite core provides to the xBestIndex
+method is held in the part of the structure that is marked as "Inputs".
+The "Outputs" section is initialized to zero.
+
+</p><p>The information in the <a href="c3ref/index_info.html">sqlite3_index_info</a> structure is ephemeral
+and may be overwritten or deallocated as soon as the xBestIndex method
+returns. If the xBestIndex method needs to remember any part of the
+<a href="c3ref/index_info.html">sqlite3_index_info</a> structure, it should make a copy. Care must be
+take to store the copy in a place where it will be deallocated, such
+as in the idxStr field with needToFreeIdxStr set to 1.
+
+</p><p>Note that xBestIndex will always be called before <a href="vtab.html#xfilter">xFilter</a>, since
+the idxNum and idxStr outputs from xBestIndex are required inputs to
+xFilter. However, there is no guarantee that xFilter will be called
+following a successful xBestIndex.
+
+</p><p>The xBestIndex method is required for every virtual table implementation.
+
+</p><h3 id="inputs"><span>2.3.1. </span>Inputs</h3>
+
+<p>The main thing that the SQLite core is trying to communicate to
+the virtual table is the constraints that are available to limit
+the number of rows that need to be searched. The aConstraint[] array
+contains one entry for each constraint. There will be exactly
+nConstraint entries in that array.
+
+</p><p>Each constraint will usually correspond to a term in the WHERE clause
+or in a USING or ON clause that is of the form
+
+</p><blockquote>
+ column OP EXPR
+</blockquote>
+
+<p>Where "column" is a column in the virtual table, OP is an operator
+like "=" or "&lt;", and EXPR is an arbitrary expression. So, for example,
+if the WHERE clause contained a term like this:
+
+</p><div class="codeblock"><pre>a = 5
+</pre></div>
+
+<p>Then one of the constraints would be on the "a" column with
+operator "=" and an expression of "5". Constraints need not have a
+literal representation of the WHERE clause. The query optimizer might
+make transformations to the
+WHERE clause in order to extract as many constraints
+as it can. So, for example, if the WHERE clause contained something
+like this:
+
+</p><div class="codeblock"><pre>x BETWEEN 10 AND 100 AND 999&gt;y
+</pre></div>
+
+<p>The query optimizer might translate this into three separate constraints:
+
+</p><div class="codeblock"><pre>x &gt;= 10
+x &lt;= 100
+y &lt; 999
+</pre></div>
+
+<p>For each such constraint, the aConstraint[].iColumn field indicates which
+column appears on the left-hand side of the constraint.
+The first column of the virtual table is column 0.
+The rowid of the virtual table is column -1.
+The aConstraint[].op field indicates which operator is used.
+The SQLITE_INDEX_CONSTRAINT_* constants map integer constants
+into operator values.
+Columns occur in the order they were defined by the call to
+<a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a> in the <a href="vtab.html#xcreate">xCreate</a> or <a href="vtab.html#xconnect">xConnect</a> method.
+Hidden columns are counted when determining the column index.
+
+</p><p>If the <a href="vtab.html#xfindfunction">xFindFunction()</a> method for the virtual table is defined, and
+if xFindFunction() sometimes returns <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_FUNCTION</a> or
+larger, then the constraints might also be of the form:
+
+</p><blockquote>
+ FUNCTION( column, EXPR)
+</blockquote>
+
+<p>In this case the aConstraint[].op value is the same as the value
+returned by <a href="vtab.html#xfindfunction">xFindFunction()</a> for FUNCTION.
+
+</p><p>The aConstraint[] array contains information about all constraints
+that apply to the virtual table. But some of the constraints might
+not be usable because of the way tables are ordered in a join.
+The xBestIndex method must therefore only consider constraints
+that have an aConstraint[].usable flag which is true.
+
+</p><p>In addition to WHERE clause constraints, the SQLite core also
+tells the xBestIndex method about the ORDER BY clause.
+(In an aggregate query, the SQLite core might put in GROUP BY clause
+information in place of the ORDER BY clause information, but this fact
+should not make any difference to the xBestIndex method.)
+If all terms of the ORDER BY clause are columns in the virtual table,
+then nOrderBy will be the number of terms in the ORDER BY clause
+and the aOrderBy[] array will identify the column for each term
+in the order by clause and whether or not that column is ASC or DESC.
+
+<a name="colUsed"></a>
+
+</p><p>In SQLite <a href="releaselog/3_10_0.html">version 3.10.0</a> (2016-01-06) and later,
+the colUsed field is available
+to indicate which fields of the virtual table are actually used by the
+statement being prepared. If the lowest bit of colUsed is set, that
+means that the first column is used. The second lowest bit corresponds
+to the second column. And so forth. If the most significant bit of
+colUsed is set, that means that one or more columns other than the
+first 63 columns are used. If column usage information is needed by the
+<a href="vtab.html#xfilter">xFilter</a> method, then the required bits must be encoded into either
+the output idxNum field or idxStr content.
+
+</p><h4 id="like_glob_regexp_and_match_functions"><span>2.3.1.1. </span>LIKE, GLOB, REGEXP, and MATCH functions</h4>
+
+<p>For the LIKE, GLOB, REGEXP, and MATCH operators, the
+aConstraint[].iColumn value is the virtual table column that
+is the left operand of the operator. However, if these operators
+are expressed as function calls instead of operators, then
+the aConstraint[].iColumn value references the virtual table
+column that is the second argument to that function:
+
+</p><blockquote>
+LIKE(<i>EXPR</i>, <i>column</i>)<br>
+GLOB(<i>EXPR</i>, <i>column</i>)<br>
+REGEXP(<i>EXPR</i>, <i>column</i>)<br>
+MATCH(<i>EXPR</i>, <i>column</i>)<br>
+</blockquote>
+
+<p>Hence, as far as the xBestIndex() method is concerned, the following
+two forms are equivalent:
+
+</p><blockquote>
+<i>column</i> LIKE <i>EXPR</i><br>
+LIKE(<i>EXPR</i>,<i>column</i>)
+</blockquote>
+
+<p>This special behavior of looking at the second argument of a function
+only occurs for the LIKE, GLOB, REGEXP, and MATCH functions. For all
+other functions, the aConstraint[].iColumn value references the first
+argument of the function.
+
+</p><p>This special feature of LIKE, GLOB, REGEXP, and MATCH does not
+apply to the <a href="vtab.html#xfindfunction">xFindFunction()</a> method, however. The
+<a href="vtab.html#xfindfunction">xFindFunction()</a> method always keys off of the left operand of an
+LIKE, GLOB, REGEXP, or MATCH operator but off of the first argument
+to function-call equivalents of those operators.
+
+</p><h4 id="limit_and_offset"><span>2.3.1.2. </span>LIMIT and OFFSET</h4>
+
+<p>When aConstraint[].op is one of SQLITE_INDEX_CONSTRAINT_LIMIT or
+SQLITE_INDEX_CONSTRAINT_OFFSET, that indicates that there is a
+LIMIT or OFFSET clause on the SQL query statement that is using
+the virtual table. The LIMIT and OFFSET operators have no
+left operand, and so when aConstraint[].op is one of
+SQLITE_INDEX_CONSTRAINT_LIMIT or SQLITE_INDEX_CONSTRAINT_OFFSET
+then the aConstraint[].iColumn value is meaningless and should
+not be used.
+
+</p><h4 id="right_hand_side_values_of_constraints"><span>2.3.1.3. </span>Right-hand side values of constraints</h4>
+
+<p>The <a href="c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a> interface can be used to try to
+access the right-hand operand of a constraint. However, the value
+of a right-hand operator might not be known at the time that
+the xBestIndex method is run, so the sqlite3_vtab_rhs_value()
+call might not be successful. Usually the right operand of a
+constraint is only available to xBestIndex if it is coded as
+a literal value in the input SQL. If the right operand is
+coded as an expression or a <a href="c3ref/bind_blob.html">host parameter</a>, it probably will
+not be accessible to xBestIndex. Some operators, such as
+<a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_ISNULL</a> and
+<a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_ISNOTNULL</a> have no right-hand operand.
+The sqlite3_vtab_rhs_value() interface always returns
+<a href="rescode.html#notfound">SQLITE_NOTFOUND</a> for such operators.
+
+</p><h3 id="outputs"><span>2.3.2. </span>Outputs</h3>
+
+<p>Given all of the information above, the job of the xBestIndex
+method it to figure out the best way to search the virtual table.
+
+</p><p>The xBestIndex method conveys an indexing strategy to the <a href="vtab.html#xfilter">xFilter</a>
+method through the idxNum and idxStr fields. The idxNum value and
+idxStr string content are arbitrary as far as the SQLite core is
+concerned and can have any meaning as long as xBestIndex and xFilter
+agree on what that meaning is. The SQLite core just copies the
+information from xBestIndex through to the <a href="vtab.html#xfilter">xFilter</a> method, assuming
+only that the char sequence referenced via idxStr is NUL terminated.
+
+</p><p>The idxStr value may be a string obtained from an SQLite
+memory allocation function such as <a href="c3ref/mprintf.html">sqlite3_mprintf()</a>.
+If this is the case, then the needToFreeIdxStr flag must be set to
+true so that the SQLite core will know to call <a href="c3ref/free.html">sqlite3_free()</a> on
+that string when it has finished with it, and thus avoid a memory leak.
+The idxStr value may also be a static constant string, in which case
+the needToFreeIdxStr boolean should remain false.
+
+
+</p><p>The estimatedCost field should be set to the estimated number
+of disk access operations required to execute this query against
+the virtual table. The SQLite core will often call xBestIndex
+multiple times with different constraints, obtain multiple cost
+estimates, then choose the query plan that gives the lowest estimate.
+The SQLite core initializes estimatedCost to a very large value
+prior to invoking xBestIndex, so if xBestIndex determines that the
+current combination of parameters is undesirable, it can leave the
+estimatedCost field unchanged to discourage its use.
+
+</p><p>If the current version of SQLite is 3.8.2 or greater, the estimatedRows
+field may be set to an estimate of the number of rows returned by the
+proposed query plan. If this value is not explicitly set, the default
+estimate of 25 rows is used.
+
+</p><p>If the current version of SQLite is 3.9.0 or greater, the idxFlags field
+may be set to SQLITE_INDEX_SCAN_UNIQUE to indicate that the virtual table
+will return only zero or one rows given the input constraints. Additional
+bits of the idxFlags field might be understood in later versions of SQLite.
+
+</p><p>The aConstraintUsage[] array contains one element for each of
+the nConstraint constraints in the inputs section of the
+<a href="c3ref/index_info.html">sqlite3_index_info</a> structure.
+The aConstraintUsage[] array is used by xBestIndex to tell the
+core how it is using the constraints.
+
+</p><p>The xBestIndex method may set aConstraintUsage[].argvIndex
+entries to values greater than zero.
+Exactly one entry should be set to 1, another to 2, another to 3,
+and so forth up to as many or as few as the xBestIndex method wants.
+The EXPR of the corresponding constraints will then be passed
+in as the argv[] parameters to xFilter.
+
+</p><p>For example, if the aConstraint[3].argvIndex is set to 1, then
+when xFilter is called, the argv[0] passed to xFilter will have
+the EXPR value of the aConstraint[3] constraint.
+
+</p><h4 id="omit_constraint_checking_in_bytecode"><span>2.3.2.1. </span>Omit constraint checking in bytecode</h4>
+
+<p>By default, the SQLite generates <a href="opcode.html">bytecode</a> that will double
+checks all constraints on each row of the virtual table to verify
+that they are satisfied. If the virtual table can guarantee
+that a constraint will always be satisfied, it can try to
+suppress that double-check by setting aConstraintUsage[].omit.
+However, with some exceptions, this is only a hint and
+there is no guarantee that the redundant check of the constraint
+will be suppressed. Key points:
+
+</p><ul>
+<li><p>
+The omit flag is only honored if the argvIndex value for the
+constraint is greater than 0 and less than or equal to 16.
+Constraint checking is never suppressed for constraints
+that do not pass their right operand into the xFilter method.
+The current implementation is only able to suppress redundant
+constraint checking for the first 16 values passed to xFilter,
+though that limitation might be increased in future releases.
+
+</p></li><li><p>
+The omit flag is always honored for <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_OFFSET</a>
+constraints as long as argvIndex is greater than 0. Setting the
+omit flag on an SQLITE_INDEX_CONSTRAINT_OFFSET constraint indicates
+to SQLite that the virtual table will itself suppress the first N
+rows of output, where N is the right operand of the OFFSET operator.
+If the virtual table implementation sets omit on an
+SQLITE_INDEX_CONSTRAINT_OFFSET constraint but then fails to suppress
+the first N rows of output, an incorrect answer will result from
+the overall query.
+</p></li></ul>
+
+<a name="obc"></a>
+
+<h4 id="order_by_and_orderbyconsumed"><span>2.3.2.2. </span>ORDER BY and orderByConsumed</h4>
+
+<p>If the virtual table will output rows in the order specified by
+the ORDER BY clause, then the orderByConsumed flag may be set to
+true. If the output is not automatically in the correct order
+then orderByConsumed must be left in its default false setting.
+This will indicate to the SQLite core that it will need to do a
+separate sorting pass over the data after it comes out of the virtual table.
+Setting orderByConsumed is an optimization. A query will always
+get the correct answer if orderByConsumed is left at its default
+value (0). Unnecessary sort operations might be avoided resulting
+in a faster query if orderByConsumed is set, but setting
+orderByConsumed incorrectly can result in an incorrect answer.
+It is suggested that new virtual table implementations leave
+the orderByConsumed value unset initially, and then after everything
+else is known to be working correctly, go back and attempt to
+optimize by setting orderByConsumed where appropriate.
+
+</p><p>Sometimes the orderByConsumed flag can be safely set even if
+the outputs from the virtual table are not strictly in the order
+specified by nOrderBy and aOrderBy. If the
+<a href="c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> interface returns 1 or 2, that indicates
+that the ordering can be relaxed. See the documentation on
+<a href="c3ref/vtab_distinct.html">sqlite3_vtab_distinct()</a> for further information.
+
+
+</p><h3 id="return_value"><span>2.3.3. </span>Return Value</h3>
+
+<p>The xBestIndex method should return SQLITE_OK on success. If any
+kind of fatal error occurs, an appropriate error code (ex: <a href="rescode.html#nomem">SQLITE_NOMEM</a>)
+should be returned instead.
+
+</p><p>If xBestIndex returns <a href="rescode.html#constraint">SQLITE_CONSTRAINT</a>, that does not indicate an
+error. Rather, SQLITE_CONSTRAINT indicates that the particular combination
+of input parameters specified is insufficient for the virtual table
+to do its job.
+This is logically the same as setting the estimatedCost to infinity.
+If every call to xBestIndex for a particular query plan returns
+SQLITE_CONSTRAINT, that means there is no way for the virtual table
+to be safely used, and the <a href="c3ref/prepare.html">sqlite3_prepare()</a> call will fail with
+a "no query solution" error.
+
+</p><h3 id="enforcing_required_parameters_on_table_valued_functions"><span>2.3.4. </span>Enforcing Required Parameters On Table-Valued Functions</h3>
+
+<p>The SQLITE_CONSTRAINT return from xBestIndex
+is useful for <a href="vtab.html#tabfunc2">table-valued functions</a> that
+have required parameters. If the aConstraint[].usable field is false
+for one of the required parameter, then the xBestIndex method should
+return SQLITE_CONSTRAINT. If a required field does not appear in
+the aConstraint[] array at all, that means that the corresponding
+parameter is omitted from the input SQL. In that case, xBestIndex
+should set an error message in pVTab-&gt;zErrMsg and return
+SQLITE_ERROR. To summarize:
+
+</p><ol>
+<li><p>
+The aConstraint[].usable value for a required parameter is
+false <big>&rarr;</big> return SQLITE_CONSTRAINT.
+</p></li><li><p>
+A required parameter does not appears anywhere in
+the aConstraint[] array <big>&rarr;</big>
+Set an error message in pVTab-&gt;zErrMsg and return
+SQLITE_ERROR
+</p></li></ol>
+
+<p>The following example will better illustrate the use of SQLITE_CONSTRAINT
+as a return value from xBestIndex:
+
+</p><div class="codeblock"><pre>SELECT * FROM realtab, tablevaluedfunc(realtab.x);
+</pre></div>
+
+<p>Assuming that the first hidden column of "tablevaluedfunc" is "param1",
+the query above is semantically equivalent to this:
+
+</p><div class="codeblock"><pre>SELECT * FROM realtab, tablevaluedfunc
+ WHERE tablevaluedfunc.param1 = realtab.x;
+</pre></div>
+
+<p>The query planner must decide between many possible implementations
+of this query, but two plans in particular are of note:
+
+</p><ol>
+<li><p>Scan all
+rows of realtab and for each row, find rows in tablevaluedfunc where
+param1 is equal to realtab.x
+
+</p></li><li><p>Scan all rows of tablevalued func and for each row find rows
+in realtab where x is equal to tablevaluedfunc.param1.
+</p></li></ol>
+
+<p>The xBestIndex method will be invoked once for each of the potential
+plans above. For plan 1, the aConstraint[].usable flag for the
+SQLITE_CONSTRAINT_EQ constraint on the param1 column will be true because
+the right-hand side value for the "param1 = ?" constraint will be known,
+since it is determined by the outer realtab loop.
+But for plan 2, the aConstraint[].usable flag for "param1 = ?" will be false
+because the right-hand side value is determined by an inner loop and is thus
+an unknown quantity. Because param1 is a required input to the table-valued
+functions, the xBestIndex method should return SQLITE_CONSTRAINT when presented
+with plan 2, indicating that a required input is missing. This forces the
+query planner to select plan 1.
+
+<a name="xdisconnect"></a>
+
+</p><h2 id="the_xdisconnect_method"><span>2.4. </span>The xDisconnect Method</h2>
+
+<div class="codeblock"><pre>int (*xDisconnect)(sqlite3_vtab *pVTab);
+</pre></div>
+
+<p>This method releases a connection to a virtual table.
+Only the <a href="c3ref/vtab.html">sqlite3_vtab</a> object is destroyed.
+The virtual table is not destroyed and any backing store
+associated with the virtual table persists.
+
+This method undoes the work of <a href="vtab.html#xconnect">xConnect</a>.
+
+</p><p>This method is a destructor for a connection to the virtual table.
+Contrast this method with <a href="vtab.html#sqlite3_module.xDestroy">xDestroy</a>. The xDestroy is a destructor
+for the entire virtual table.
+
+</p><p>The xDisconnect method is required for every virtual table implementation,
+though it is acceptable for the xDisconnect and <a href="vtab.html#sqlite3_module.xDestroy">xDestroy</a> methods to be
+the same function if that makes sense for the particular virtual table.
+
+<a name="sqlite3_module.xDestroy"></a>
+
+</p><h2 id="the_xdestroy_method"><span>2.5. </span>The xDestroy Method</h2>
+
+<div class="codeblock"><pre>int (*xDestroy)(sqlite3_vtab *pVTab);
+</pre></div>
+
+<p>This method releases a connection to a virtual table, just like
+the <a href="vtab.html#xdisconnect">xDisconnect</a> method, and it also destroys the underlying
+table implementation. This method undoes the work of <a href="vtab.html#xcreate">xCreate</a>.
+
+</p><p>The <a href="vtab.html#xdisconnect">xDisconnect</a> method is called whenever a database connection
+that uses a virtual table is closed. The xDestroy method is only
+called when a <a href="lang_droptable.html">DROP TABLE</a> statement is executed against the virtual table.
+
+</p><p>The xDestroy method is required for every virtual table implementation,
+though it is acceptable for the <a href="vtab.html#xdisconnect">xDisconnect</a> and xDestroy methods to be
+the same function if that makes sense for the particular virtual table.
+
+<a name="xopen"></a>
+
+</p><h2 id="the_xopen_method"><span>2.6. </span>The xOpen Method</h2>
+
+<div class="codeblock"><pre>int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
+</pre></div>
+
+<p>The xOpen method creates a new cursor used for accessing (read and/or
+writing) a virtual table. A successful invocation of this method
+will allocate the memory for the <a href="c3ref/vtab_cursor.html">sqlite3_vtab_cursor</a> (or a subclass),
+initialize the new object, and make *ppCursor point to the new object.
+The successful call then returns <a href="rescode.html#ok">SQLITE_OK</a>.
+
+</p><p>For every successful call to this method, the SQLite core will
+later invoke the <a href="vtab.html#xclose">xClose</a> method to destroy
+the allocated cursor.
+
+</p><p>The xOpen method need not initialize the pVtab field of the
+<a href="c3ref/vtab_cursor.html">sqlite3_vtab_cursor</a> structure. The SQLite core will take care
+of that chore automatically.
+
+</p><p>A virtual table implementation must be able to support an arbitrary
+number of simultaneously open cursors.
+
+</p><p>When initially opened, the cursor is in an undefined state.
+The SQLite core will invoke the <a href="vtab.html#xfilter">xFilter</a> method
+on the cursor prior to any attempt to position or read from the cursor.
+
+</p><p>The xOpen method is required for every virtual table implementation.
+
+<a name="xclose"></a>
+
+</p><h2 id="the_xclose_method"><span>2.7. </span>The xClose Method</h2>
+
+<div class="codeblock"><pre>int (*xClose)(sqlite3_vtab_cursor*);
+</pre></div>
+
+<p>The xClose method closes a cursor previously opened by
+<a href="vtab.html#xopen">xOpen</a>.
+The SQLite core will always call xClose once for each cursor opened
+using xOpen.
+
+</p><p>This method must release all resources allocated by the
+corresponding xOpen call. The routine will not be called again even if it
+returns an error. The SQLite core will not use the
+<a href="c3ref/vtab_cursor.html">sqlite3_vtab_cursor</a> again after it has been closed.
+
+</p><p>The xClose method is required for every virtual table implementation.
+
+<a name="xeof"></a>
+
+</p><h2 id="the_xeof_method"><span>2.8. </span>The xEof Method</h2>
+
+<div class="codeblock"><pre>int (*xEof)(sqlite3_vtab_cursor*);
+</pre></div>
+
+<p>The xEof method must return false (zero) if the specified cursor
+currently points to a valid row of data, or true (non-zero) otherwise.
+This method is called by the SQL engine immediately after each
+<a href="vtab.html#xfilter">xFilter</a> and <a href="vtab.html#xnext">xNext</a> invocation.
+
+</p><p>The xEof method is required for every virtual table implementation.
+
+<a name="xfilter"></a>
+
+</p><h2 id="the_xfilter_method"><span>2.9. </span>The xFilter Method</h2>
+
+<div class="codeblock"><pre>int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
+ int argc, sqlite3_value **argv);
+</pre></div>
+
+<p>This method begins a search of a virtual table.
+The first argument is a cursor opened by <a href="vtab.html#xopen">xOpen</a>.
+The next two arguments define a particular search index previously
+chosen by <a href="vtab.html#xbestindex">xBestIndex</a>. The specific meanings of idxNum and idxStr
+are unimportant as long as xFilter and xBestIndex agree on what
+that meaning is.
+
+</p><p>The xBestIndex function may have requested the values of
+certain expressions using the aConstraintUsage[].argvIndex values
+of the <a href="c3ref/index_info.html">sqlite3_index_info</a> structure.
+Those values are passed to xFilter using the argc and argv parameters.
+
+</p><p>If the virtual table contains one or more rows that match the
+search criteria, then the cursor must be left point at the first row.
+Subsequent calls to <a href="vtab.html#xeof">xEof</a> must return false (zero).
+If there are no rows match, then the cursor must be left in a state
+that will cause the <a href="vtab.html#xeof">xEof</a> to return true (non-zero).
+The SQLite engine will use
+the <a href="vtab.html#xcolumn">xColumn</a> and <a href="vtab.html#xrowid">xRowid</a> methods to access that row content.
+The <a href="vtab.html#xnext">xNext</a> method will be used to advance to the next row.
+
+</p><p>This method must return <a href="rescode.html#ok">SQLITE_OK</a> if successful, or an sqlite
+<a href="rescode.html">error code</a> if an error occurs.
+
+</p><p>The xFilter method is required for every virtual table implementation.
+
+<a name="xnext"></a>
+
+</p><h2 id="the_xnext_method"><span>2.10. </span>The xNext Method</h2>
+
+<div class="codeblock"><pre>int (*xNext)(sqlite3_vtab_cursor*);
+</pre></div>
+
+<p>The xNext method advances a <a href="c3ref/vtab_cursor.html">virtual table cursor</a>
+to the next row of a result set initiated by <a href="vtab.html#xfilter">xFilter</a>.
+If the cursor is already pointing at the last row when this
+routine is called, then the cursor no longer points to valid
+data and a subsequent call to the <a href="vtab.html#xeof">xEof</a> method must return true (non-zero).
+If the cursor is successfully advanced to another row of content, then
+subsequent calls to <a href="vtab.html#xeof">xEof</a> must return false (zero).
+
+</p><p>This method must return <a href="rescode.html#ok">SQLITE_OK</a> if successful, or an sqlite
+<a href="rescode.html">error code</a> if an error occurs.
+
+</p><p>The xNext method is required for every virtual table implementation.
+
+<a name="xcolumn"></a>
+
+</p><h2 id="the_xcolumn_method"><span>2.11. </span>The xColumn Method</h2>
+
+<div class="codeblock"><pre>int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int N);
+</pre></div>
+
+<p>The SQLite core invokes this method in order to find the value for
+the N-th column of the current row. N is zero-based so the first column
+is numbered 0.
+The xColumn method may return its result back to SQLite using one of the
+following interface:
+
+</p><p>
+</p><ul>
+<li> <a href="c3ref/result_blob.html">sqlite3_result_blob()</a>
+</li><li> <a href="c3ref/result_blob.html">sqlite3_result_double()</a>
+</li><li> <a href="c3ref/result_blob.html">sqlite3_result_int()</a>
+</li><li> <a href="c3ref/result_blob.html">sqlite3_result_int64()</a>
+</li><li> <a href="c3ref/result_blob.html">sqlite3_result_null()</a>
+</li><li> <a href="c3ref/result_blob.html">sqlite3_result_text()</a>
+</li><li> <a href="c3ref/result_blob.html">sqlite3_result_text16()</a>
+</li><li> <a href="c3ref/result_blob.html">sqlite3_result_text16le()</a>
+</li><li> <a href="c3ref/result_blob.html">sqlite3_result_text16be()</a>
+</li><li> <a href="c3ref/result_blob.html">sqlite3_result_zeroblob()</a>
+</li></ul>
+
+
+<p>If the xColumn method implementation calls none of the functions above,
+then the value of the column defaults to an SQL NULL.
+
+</p><p>To raise an error, the xColumn method should use one of the result_text()
+methods to set the error message text, then return an appropriate
+<a href="rescode.html">error code</a>. The xColumn method must return <a href="rescode.html#ok">SQLITE_OK</a> on success.
+
+</p><p>The xColumn method is required for every virtual table implementation.
+
+<a name="xrowid"></a>
+
+</p><h2 id="the_xrowid_method"><span>2.12. </span>The xRowid Method</h2>
+
+<div class="codeblock"><pre>int (*xRowid)(sqlite3_vtab_cursor *pCur, sqlite_int64 *pRowid);
+</pre></div>
+
+<p>A successful invocation of this method will cause *pRowid to be
+filled with the <a href="lang_createtable.html#rowid">rowid</a> of row that the
+<a href="c3ref/vtab_cursor.html">virtual table cursor</a> pCur is currently pointing at.
+This method returns <a href="rescode.html#ok">SQLITE_OK</a> on success.
+It returns an appropriate <a href="rescode.html">error code</a> on failure.</p>
+
+<p>The xRowid method is required for every virtual table implementation.
+
+<a name="xupdate"></a>
+
+</p><h2 id="the_xupdate_method"><span>2.13. </span>The xUpdate Method</h2>
+
+<div class="codeblock"><pre>int (*xUpdate)(
+ sqlite3_vtab *pVTab,
+ int argc,
+ sqlite3_value **argv,
+ sqlite_int64 *pRowid
+);
+</pre></div>
+
+<p>All changes to a virtual table are made using the xUpdate method.
+This one method can be used to insert, delete, or update.
+
+</p><p>The argc parameter specifies the number of entries in the argv array.
+The value of argc will be 1 for a pure delete operation or N+2 for an insert
+or replace or update where N is the number of columns in the table.
+In the previous sentence, N includes any hidden columns.
+
+</p><p>Every argv entry will have a non-NULL value in C but may contain the
+SQL value NULL. In other words, it is always true that
+<tt>argv&#91;i&#93;!=0</tt> for <b>i</b> between 0 and <tt>argc-1</tt>.
+However, it might be the case that
+<tt>sqlite3_value_type(argv&#91;i&#93;)==SQLITE_NULL</tt>.
+
+</p><p>The argv[0] parameter is the <a href="lang_createtable.html#rowid">rowid</a> of a row in the virtual table
+to be deleted. If argv[0] is an SQL NULL, then no deletion occurs.
+
+</p><p>The argv[1] parameter is the rowid of a new row to be inserted
+into the virtual table. If argv[1] is an SQL NULL, then the implementation
+must choose a rowid for the newly inserted row. Subsequent argv[]
+entries contain values of the columns of the virtual table, in the
+order that the columns were declared. The number of columns will
+match the table declaration that the <a href="vtab.html#xconnect">xConnect</a> or <a href="vtab.html#xcreate">xCreate</a> method made
+using the <a href="c3ref/declare_vtab.html">sqlite3_declare_vtab()</a> call. All hidden columns are included.
+
+</p><p>When doing an insert without a rowid (argc>1, argv[1] is an SQL NULL),
+on a virtual table that uses ROWID (but not on a <a href="vtab.html#worid">WITHOUT ROWID virtual table</a>),
+the implementation must set *pRowid to the rowid of the newly inserted row;
+this will become the value returned by the <a href="c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a>
+function. Setting this value in all the other cases is a harmless no-op;
+the SQLite engine ignores the *pRowid return value if argc==1 or
+argv[1] is not an SQL NULL.
+
+</p><p>Each call to xUpdate will fall into one of cases shown below.
+Not that references to <b>argv&#91;i&#93;</b> mean the SQL value
+held within the argv&#91;i&#93; object, not the argv&#91;i&#93;
+object itself.
+
+</p><blockquote>
+<dl>
+<dt><b>argc = 1 <br> argv[0] &ne; NULL</b>
+</dt><dd><p>
+DELETE: The single row with rowid or PRIMARY KEY equal to argv[0] is deleted.
+No insert occurs.
+
+</p></dd><dt><b>argc &gt; 1 <br> argv[0] = NULL</b>
+</dt><dd><p>
+INSERT: 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>
+UPDATE:
+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>
+</dt><dd><p>
+UPDATE with rowid or PRIMARY KEY change:
+The row with rowid or PRIMARY KEY argv[0] is updated with
+the rowid or PRIMARY KEY in argv[1]
+and new values in argv[2] and following parameters. This will occur
+when an SQL statement updates a rowid, as in the statement:
+</p><blockquote>
+ <a href="lang_update.html">UPDATE</a> table SET rowid=rowid+1 WHERE ...;
+</blockquote>
+</dd></dl>
+</blockquote>
+
+<p>The xUpdate method must return <a href="rescode.html#ok">SQLITE_OK</a> if and only if it is
+successful. If a failure occurs, the xUpdate must return an appropriate
+<a href="rescode.html">error code</a>. On a failure, the pVTab->zErrMsg element may optionally
+be replaced with error message text stored in memory allocated from SQLite
+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>.
+
+</p><p>The xUpdate method is optional.
+If the xUpdate pointer in the <a href="c3ref/module.html">sqlite3_module</a> for a virtual table
+is a NULL pointer, then the virtual table is read-only.
+
+
+<a name="xfindfunction"></a>
+
+</p><h2 id="the_xfindfunction_method"><span>2.14. </span>The xFindFunction Method</h2>
+
+<div class="codeblock"><pre>int (*xFindFunction)(
+ sqlite3_vtab *pVtab,
+ int nArg,
+ const char *zName,
+ void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
+ void **ppArg
+);
+</pre></div>
+
+<p>This method is called during <a href="c3ref/prepare.html">sqlite3_prepare()</a> to give the virtual
+table implementation an opportunity to overload functions.
+This method may be set to NULL in which case no overloading occurs.
+
+</p><p>When a function uses a column from a virtual table as its first
+argument, this method is called to see if the virtual table would
+like to overload the function. The first three parameters are inputs:
+the virtual table, the number of arguments to the function, and the
+name of the function. If no overloading is desired, this method
+returns 0. To overload the function, this method writes the new
+function implementation into *pxFunc and writes user data into *ppArg
+and returns either 1 or a number between
+<a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_FUNCTION</a> and 255.
+
+</p><p>Historically, the return value from xFindFunction() was either zero
+or one. Zero means that the function is not overloaded and one means that
+it is overload. The ability to return values of
+<a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_FUNCTION</a> or greater was added in
+version 3.25.0 (2018-09-15). If xFindFunction returns
+<a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_FUNCTION</a> or greater, than means that the function
+takes two arguments and the function
+can be used as a boolean in the WHERE clause of a query and that
+the virtual table is able to exploit that function to speed up the query
+result. When xFindFunction returns <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_FUNCTION</a> or
+larger, the value returned becomes the <a href="c3ref/index_info.html">sqlite3_index_info</a>.aConstraint.op
+value for one of the constraints passed into <a href="vtab.html#xbestindex">xBestIndex()</a>. The first
+argument to the function is the column identified by
+aConstraint[].iColumn field of the constraint and the second argument to the
+function is the value that will be passed into <a href="vtab.html#xfilter">xFilter()</a> (if the
+aConstraintUsage[].argvIndex value is set) or the value returned from
+<a href="c3ref/vtab_rhs_value.html">sqlite3_vtab_rhs_value()</a>.
+
+</p><p>The <a href="geopoly.html">Geopoly module</a> is an example of a virtual table that makes use
+of <a href="c3ref/c_index_constraint_eq.html">SQLITE_INDEX_CONSTRAINT_FUNCTION</a> to improve performance.
+The xFindFunction() method for Geopoly returns
+SQLITE_INDEX_CONSTRAINT_FUNCTION for the <a href="geopoly.html#goverlap">geopoly_overlap()</a> SQL function
+and it returns
+SQLITE_INDEX_CONSTRAINT_FUNCTION+1 for the <a href="geopoly.html#gwithin">geopoly_within()</a> SQL function.
+This permits search optimizations for queries such as:
+
+</p><div class="codeblock"><pre>SELECT * FROM geopolytab WHERE geopoly_overlap(_shape, $query_polygon);
+SELECT * FROM geopolytab WHERE geopoly_within(_shape, $query_polygon);
+</pre></div>
+
+<p>Note that infix functions (<a href="lang_expr.html#like">LIKE</a>, <a href="lang_expr.html#glob">GLOB</a>, <a href="lang_expr.html#regexp">REGEXP</a>, and <a href="lang_expr.html#match">MATCH</a>) reverse
+the order of their arguments. So "like(A,B)" would normally work the same
+as "B like A".
+However, xFindFunction() always looks a the left-most argument, not
+the first logical argument.
+Hence, for the form "B like A", SQLite looks at the
+left operand "B" and if that operand is a virtual table column
+it invokes the xFindFunction() method on that virtual table.
+But if the form "like(A,B)" is used instead, then SQLite checks
+the A term to see if it is column of a virtual table and if so
+it invokes the xFindFunction() method for the virtual table of
+column A.
+
+</p><p>The function pointer returned by this routine must be valid for
+the lifetime of the <a href="c3ref/vtab.html">sqlite3_vtab</a> object given in the first parameter.
+
+<a name="xBegin"></a>
+
+</p><h2 id="the_xbegin_method"><span>2.15. </span>The xBegin Method</h2>
+
+<div class="codeblock"><pre>int (*xBegin)(sqlite3_vtab *pVTab);
+</pre></div>
+
+<p>This method begins a transaction on a virtual table.
+This is method is optional. The xBegin pointer of <a href="c3ref/module.html">sqlite3_module</a>
+may be NULL.
+
+</p><p>This method is always followed by one call to either the
+<a href="vtab.html#xcommit">xCommit</a> or <a href="vtab.html#xrollback">xRollback</a> method. Virtual table transactions do
+not nest, so the xBegin method will not be invoked more than once
+on a single virtual table
+without an intervening call to either <a href="vtab.html#xcommit">xCommit</a> or <a href="vtab.html#xrollback">xRollback</a>.
+Multiple calls to other methods can and likely will occur in between
+the xBegin and the corresponding <a href="vtab.html#xcommit">xCommit</a> or <a href="vtab.html#xrollback">xRollback</a>.
+
+<a name="xsync"></a>
+
+</p><h2 id="the_xsync_method"><span>2.16. </span>The xSync Method</h2>
+
+<div class="codeblock"><pre>int (*xSync)(sqlite3_vtab *pVTab);
+</pre></div>
+
+
+<p>This method signals the start of a two-phase commit on a virtual
+table.
+This is method is optional. The xSync pointer of <a href="c3ref/module.html">sqlite3_module</a>
+may be NULL.
+
+</p><p>This method is only invoked after call to the <a href="vtab.html#xBegin">xBegin</a> method and
+prior to an <a href="vtab.html#xcommit">xCommit</a> or <a href="vtab.html#xrollback">xRollback</a>. In order to implement two-phase
+commit, the xSync method on all virtual tables is invoked prior to
+invoking the <a href="vtab.html#xcommit">xCommit</a> method on any virtual table. If any of the
+xSync methods fail, the entire transaction is rolled back.
+
+<a name="xcommit"></a>
+
+</p><h2 id="the_xcommit_method"><span>2.17. </span>The xCommit Method</h2>
+
+<div class="codeblock"><pre>int (*xCommit)(sqlite3_vtab *pVTab);
+</pre></div>
+
+<p>This method causes a virtual table transaction to commit.
+This is method is optional. The xCommit pointer of <a href="c3ref/module.html">sqlite3_module</a>
+may be NULL.
+
+</p><p>A call to this method always follows a prior call to <a href="vtab.html#xBegin">xBegin</a> and
+<a href="vtab.html#xsync">xSync</a>.
+
+
+<a name="xrollback"></a>
+
+</p><h2 id="the_xrollback_method"><span>2.18. </span>The xRollback Method</h2>
+
+<div class="codeblock"><pre>int (*xRollback)(sqlite3_vtab *pVTab);
+</pre></div>
+
+<p>This method causes a virtual table transaction to rollback.
+This is method is optional. The xRollback pointer of <a href="c3ref/module.html">sqlite3_module</a>
+may be NULL.
+
+</p><p>A call to this method always follows a prior call to <a href="vtab.html#xBegin">xBegin</a>.
+
+
+<a name="xrename"></a>
+
+</p><h2 id="the_xrename_method"><span>2.19. </span>The xRename Method</h2>
+
+<div class="codeblock"><pre>int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
+</pre></div>
+
+<p>This method provides notification that the virtual table implementation
+that the virtual table will be given a new name.
+If this method returns <a href="rescode.html#ok">SQLITE_OK</a> then SQLite renames the table.
+If this method returns an <a href="rescode.html">error code</a> then the renaming is prevented.
+
+</p><p>The xRename method is optional. If omitted, then the virtual
+table may not be renamed using the ALTER TABLE RENAME command.
+
+</p><p>The <a href="pragma.html#pragma_legacy_alter_table">PRAGMA legacy_alter_table</a> setting is enabled prior to invoking this
+method, and the value for legacy_alter_table is restored after this
+method finishes. This is necessary for the correct operation of virtual
+tables that make use of <a href="vtab.html#xshadowname">shadow tables</a> where the shadow tables must be
+renamed to match the new virtual table name. If the legacy_alter_format is
+off, then the xConnect method will be invoked for the virtual table every
+time the xRename method tries to change the name of the shadow table.
+
+<a name="xsavepoint"></a>
+
+</p><h2 id="the_xsavepoint_xrelease_and_xrollbackto_methods"><span>2.20. </span>The xSavepoint, xRelease, and xRollbackTo Methods</h2>
+
+<div class="codeblock"><pre>int (*xSavepoint)(sqlite3_vtab *pVtab, int);
+int (*xRelease)(sqlite3_vtab *pVtab, int);
+int (*xRollbackTo)(sqlite3_vtab *pVtab, int);
+</pre></div>
+
+<p>
+These methods provide the virtual table implementation an opportunity to
+implement nested transactions. They are always optional and will only be
+called in SQLite <a href="releaselog/3_7_7.html">version 3.7.7</a> (2011-06-23) and later.
+</p>
+
+<p>
+When xSavepoint(X,N) is invoked, that is a signal to the virtual table X
+that it should save its current state as savepoint N.
+A subsequent call
+to xRollbackTo(X,R) means that the state of the virtual table should return
+to what it was when xSavepoint(X,R) was last called.
+The call
+to xRollbackTo(X,R) will invalidate all savepoints with N>R; none of the
+invalided savepoints will be rolled back or released without first
+being reinitialized by a call to xSavepoint().
+A call to xRelease(X,M) invalidates all savepoints where N>=M.
+</p>
+
+<p>
+None of the xSavepoint(), xRelease(), or xRollbackTo() methods will ever
+be called except in between calls to xBegin() and
+either xCommit() or xRollback().
+</p>
+
+<a name="xshadowname"></a>
+
+<h2 id="the_xshadowname_method"><span>2.21. </span>The xShadowName Method</h2>
+
+<p>Some virtual table implementations (ex: <a href="fts3.html">FTS3</a>, <a href="fts5.html">FTS5</a>, and <a href="rtree.html">RTREE</a>) make
+use of real (non-virtual) database tables to store content. For example,
+when content is inserted into the FTS3 virtual table, the data is ultimately
+stored in real tables named "%_content", "%_segdir", "%_segments", "%_stat",
+and "%_docsize" where "%" is the name of the original virtual table. This
+auxiliary real tables that store content for a virtual table are called
+"shadow tables". See
+(<a href="fts3.html#*shadowtab">1</a>),
+(<a href="fts5.html#fts5shadowtables">2</a>), and
+(<a href="rtree.html#xshadow">3</a>) for additional information.
+
+</p><p>The xShadowName method exists to allow SQLite to determine whether a
+certain real table is in fact a shadow table for a virtual table.
+
+</p><p>SQLite understands a real table to be a shadow table if all of
+the following are true:
+</p><p>
+</p><ul>
+<li> The name of the table contains one or more "_" characters.
+</li><li> The part of the name prior to the last "_" exactly matches
+ the name of a virtual table that was created using <a href="lang_createvtab.html">CREATE VIRTUAL TABLE</a>.
+ (Shadow tables are not recognized for <a href="vtab.html#epovtab">eponymous virtual tables</a>
+ and <a href="vtab.html#tabfunc2">table-valued functions</a>.)
+</li><li> The virtual table contains an xShadowName method.
+</li><li> The xShadowName method returns true when its input is the part
+ of the table name past the last "_" character.
+</li></ul>
+
+<p>
+If SQLite recognizes a table as a shadow table, and if the
+<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> flag is set, then the shadow table is read-only
+for ordinary SQL statements. The shadow table can still be written, but
+only by SQL that is invoked from within one of the methods of
+some virtual table implementation.
+
+</p><p>
+The whole point of the xShadowName method is to protect the content of
+shadow tables from being corrupted by hostile SQL. Every virtual table
+implementation that uses shadow tables should be able to detect and cope
+with corrupted shadow table content. However, bugs in particular virtual
+table implementation might allow a deliberately corrupted shadow table to
+cause a crash or other malfunction. The xShadowName mechanism seeks to
+avoid zero-day exploits by preventing ordinary SQL statements from
+deliberately corrupting shadow tables.
+
+</p><p>
+Shadow tables are read/write by default.
+Shadow tables only become read-only when the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a>
+flag is set using <a href="c3ref/db_config.html">sqlite3_db_config()</a>.
+Shadow tables need to be read/write by default in order to maintain
+backwards compatibility.
+For example, the SQL text generated by the <a href="cli.html#dump">.dump</a> command of the <a href="cli.html">CLI</a>
+writes directly into shadow tables.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/vtab.in?m=6780b9cf467a646d9">2022-12-05 12:38:46</a> UTC </small></i></p>
+
diff --git a/www/vtablist.html b/www/vtablist.html
new file mode 100644
index 0000000..39307aa
--- /dev/null
+++ b/www/vtablist.html
@@ -0,0 +1,292 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>List Of Virtual Tables</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+List Of Virtual Tables
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc1"><a href="#virtual_tables">2. Virtual Tables</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>A <a href="vtab.html">virtual table</a> is an object that presents an SQL table
+interface but which is not stored in the database file, at least
+not directly. The virtual table mechanism is a feature
+of SQLite that allows SQLite to access and manipulate resources
+other than bits in the database file using the powerful SQL
+query language.
+
+</p><p>
+The table below lists a few of the virtual tables implementations
+available for SQLite. Developers can deploy these virtual tables
+in their own applications, or use the implementations shown below
+as templates for writing their own virtual tables.
+
+</p><p>
+The list below is not exhaustive.
+Other virtual table implementation exist in the SQLite source tree
+and elsewhere.
+The list below tries to capture the more interesting virtual table
+implementations.
+
+
+
+</p><h1 id="virtual_tables"><span>2. </span>Virtual Tables</h1>
+
+<table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+<tr style="text-align:left"><th>Name</th><th>Description</th></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="https://sqlite.org/src/file/ext/misc/amatch.c">approximate_match</a></b></td>
+<td>A demonstration of how to use a virtual table to implement
+ approximate string matching.</td></tr>
+<tr style="text-align:left;"><td><b><a href="bytecodevtab.html">bytecode</a></b></td>
+<td>A <a href="vtab.html#tabfunc2">table-valued function</a> that shows the bytecodes of a prepared
+ statement.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="carray.html">carray</a></b></td>
+<td>A <a href="vtab.html#tabfunc2">table-valued function</a> that allows a C-language array of integers,
+ doubles, or strings to be used as table in a query.</td></tr>
+<tr style="text-align:left;"><td><b><a href="https://sqlite.org/src/file/ext/misc/closure.c">closure</a></b></td>
+<td>Compute the transitive closure of a set.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="completion.html">completion</a></b></td>
+<td>Suggests completions for partially-entered words during interactive
+ SQL input. Used by the <a href="cli.html">CLI</a> to help implement tab-completion.</td></tr>
+<tr style="text-align:left;"><td><b><a href="csv.html">csv</a></b></td>
+<td>A virtual table that represents a comma-separated-value or CSV file
+ (<a href="https://www.ietf.org/rfc/rfc4180.txt">RFC 4180</a>) as a read-only
+ table so that it can be used as part of a larger query.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="dbstat.html">dbstat</a></b></td>
+<td>Provides information about the purpose and use of each page in a
+ database file. Used in the implementation of the
+ <a href="sqlanalyze.html">sqlite3_analyzer</a> utility program.</td></tr>
+<tr style="text-align:left;"><td><b><a href="https://fossil-scm.org/fossil/file/src/foci.c">files_of_checkin</a></b></td>
+<td>Provides information about all files in a single check-in in the
+ <a href="https://fossil-scm.org/">Fossil version control system</a>. This
+ virtual table is not part of the SQLite project but is included because
+ it provides an example of how to use virtual tables and because it is
+ used to help version control the SQLite sources.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="https://sqlite.org/src/file/ext/misc/fileio.c">fsdir</a></b></td>
+<td>A <a href="vtab.html#tabfunc2">table-valued function</a> returning one row for each file in a
+ selected file hierarchy of the host computer. Used by the
+ <a href="cli.html">CLI</a> to help implement the <a href="cli.html#sqlar">.archive command</a>.</td></tr>
+<tr style="text-align:left;"><td><b><a href="fts3.html">FTS3</a></b></td>
+<td>A high-performance full-text search index.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="fts5.html">FTS5</a></b></td>
+<td>A higher-performance full-text search index</td></tr>
+<tr style="text-align:left;"><td><b><a href="series.html">generate_series</a></b></td>
+<td>A <a href="vtab.html#tabfunc2">table-valued function</a> returning a sequence of increasing
+ integers, modeled after the table-valued function by the same
+ name in PostgreSQL.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="json1.html#jeach">json_each</a></b></td>
+<td>A <a href="vtab.html#tabfunc2">table-valued function</a> for decomposing a JSON string.</td></tr>
+<tr style="text-align:left;"><td><b><a href="json1.html#jtree">json_tree</a></b></td>
+<td>A <a href="vtab.html#tabfunc2">table-valued function</a> for decomposing a JSON string.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="https://osquery.readthedocs.io/en/stable/">OsQuery</a></b></td>
+<td>Hundreds of virtual tables that publish various aspects of the
+ host computer, such as the process table, user lists, active network
+ connections, and so forth.
+ OsQuery is a separate project, started by Facebook, hosted on
+ <a href="https://github.com/facebook/osquery">GitHub</a>, and intended for
+ security analysis and intrusion detection
+ OsQuery is not a part of the SQLite project, but is included in this
+ list because it demonstrates how the SQL language and the
+ SQLite virtual table mechanism
+ can be leveraged to provide elegant solutions
+ to important real-world problems.</td></tr>
+<tr style="text-align:left;"><td><b><a href="pragma.html#pragfunc">pragma</a></b></td>
+<td>Built-in <a href="vtab.html#tabfunc2">table-valued functions</a> that return the results of <a href="pragma.html#syntax">PRAGMA</a>
+ statements for use within ordinary SQL queries.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="rtree.html">RTree</a></b></td>
+<td>An implementation of the Guttmann R*Tree spatial index idea.</td></tr>
+<tr style="text-align:left;"><td><b><a href="spellfix1.html">spellfix1</a></b></td>
+<td>A virtual table that implements a spelling correction engine.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="https://sqlite.org/src/file/ext/misc/btreeinfo.c">sqlite_btreeinfo</a></b></td>
+<td>This experimental <a href="vtab.html#tabfunc2">table-valued function</a> provides information about
+ a single <a href="fileformat2.html#btree">B-tree</a> in a database file, such as the depth, and estimated
+ number of pages and number of entries, and so forth.</td></tr>
+<tr style="text-align:left;"><td><b><a href="dbpage.html">sqlite_dbpage</a></b></td>
+<td>Key/value store for the raw database file content. The key is the
+ page number and the value is binary page content.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="memstat.html">sqlite_memstat</a></b></td>
+<td>Provides SQL access to the <a href="c3ref/status.html">sqlite3_status64()</a> and
+ <a href="c3ref/db_status.html">sqlite3_db_status()</a> interfaces.</td></tr>
+<tr style="text-align:left;"><td><b><a href="stmt.html">sqlite_stmt</a></b></td>
+<td>A <a href="vtab.html#tabfunc2">table-valued function</a> containing one row for each
+ <a href="c3ref/stmt.html">prepared statement</a> associated with an open <a href="c3ref/sqlite3.html">database connection</a>.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="swarmvtab.html#overview">swarmvtab</a></b></td>
+<td>An experimental module providing on-demand read-only access to
+ multiple tables spread across multiple databases, via a single
+ virtual table abstraction.</td></tr>
+<tr style="text-align:left;"><td><b><a href="bytecodevtab.html">tables_used</a></b></td>
+<td>A <a href="vtab.html#tabfunc2">table-valued function</a> that shows the tables and indexes that
+ are accessed by a prepared statement.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="https://sqlite.org/src/file/src/test_tclvar.c">tclvar</a></b></td>
+<td>Represents the global variables of a
+ <a href="https://en.wikipedia.org/wiki/Tcl">TCL Interpreter</a> as an SQL
+ table. Used as part of the SQLite test suite.</td></tr>
+<tr style="text-align:left;"><td><b><a href="https://sqlite.org/src/file/ext/misc/templatevtab.c">templatevtab</a></b></td>
+<td>A template virtual table implementation useful as a starting point
+ for developers who want to write their own virtual tables</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="unionvtab.html">unionvtab</a></b></td>
+<td>An experimental module providing on-demand read-only access to
+ multiple tables spread across multiple databases, via a single
+ virtual table abstraction.</td></tr>
+<tr style="text-align:left;"><td><b><a href="https://sqlite.org/src/file/ext/misc/vfsstat.c">vfsstat</a></b></td>
+<td>A <a href="vtab.html#tabfunc2">table-valued function</a> which, in combination with a
+ co-packaged <a href="vfs.html#shim">VFS shim</a> provides information on the number of
+ system calls performed by SQLite.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="https://sqlite.org/src/file/ext/misc/vtablog.c">vtablog</a></b></td>
+<td>A virtual table that prints diagnostic information
+ on stdout when its key methods are invoked. Intended for
+ interactive analysis and debugging of virtual table interfaces.</td></tr>
+<tr style="text-align:left;"><td><b><a href="https://sqlite.org/src/file/ext/misc/wholenumber.c">wholenumber</a></b></td>
+<td>A virtual table returns all integers between 1 and 4294967295.</td></tr>
+<tr style="text-align:left;background-color:#DDDDDD;"><td><b><a href="zipfile.html">zipfile</a></b></td>
+<td>Represent a
+ <a href="https://en.wikipedia.org/wiki/Zip_(file_format)">ZIP Archive</a>
+ as an SQL table. Works for both reading and writing. Used by
+ the <a href="cli.html">CLI</a> to implement the ability to read and write ZIP Archives.</td></tr>
+
+</table>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/vtablist.in?m=32698414014201a28">2022-06-15 10:18:44</a> UTC </small></i></p>
+
diff --git a/www/wal.html b/www/wal.html
new file mode 100644
index 0000000..acf100c
--- /dev/null
+++ b/www/wal.html
@@ -0,0 +1,756 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Write-Ahead Logging</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Write-Ahead Logging
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#how_wal_works">2. How WAL Works</a></div>
+<div class="fancy-toc2"><a href="#checkpointing">2.1. Checkpointing</a></div>
+<div class="fancy-toc2"><a href="#concurrency">2.2. Concurrency</a></div>
+<div class="fancy-toc2"><a href="#performance_considerations">2.3. Performance Considerations</a></div>
+<div class="fancy-toc1"><a href="#activating_and_configuring_wal_mode">3. Activating And Configuring WAL Mode</a></div>
+<div class="fancy-toc2"><a href="#automatic_checkpoint">3.1. Automatic Checkpoint</a></div>
+<div class="fancy-toc2"><a href="#application_initiated_checkpoints">3.2. Application-Initiated Checkpoints</a></div>
+<div class="fancy-toc2"><a href="#persistence_of_wal_mode">3.3. Persistence of WAL mode</a></div>
+<div class="fancy-toc1"><a href="#the_wal_file">4. The WAL File</a></div>
+<div class="fancy-toc1"><a href="#read_only_databases">5. Read-Only Databases</a></div>
+<div class="fancy-toc1"><a href="#avoiding_excessively_large_wal_files">6. Avoiding Excessively Large WAL Files</a></div>
+<div class="fancy-toc1"><a href="#implementation_of_shared_memory_for_the_wal_index">7. Implementation Of Shared-Memory For The WAL-Index</a></div>
+<div class="fancy-toc1"><a href="#use_of_wal_without_shared_memory">8. Use of WAL Without Shared-Memory</a></div>
+<div class="fancy-toc1"><a href="#sometimes_queries_return_sqlite_busy_in_wal_mode">9. Sometimes Queries Return SQLITE_BUSY In WAL Mode</a></div>
+<div class="fancy-toc1"><a href="#backwards_compatibility">10. Backwards Compatibility</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p>The default method by which SQLite implements
+<a href="atomiccommit.html">atomic commit and rollback</a> is a <a href="lockingv3.html#rollback">rollback journal</a>.
+Beginning with <a href="releaselog/3_7_0.html">version 3.7.0</a> (2010-07-21), a new "Write-Ahead Log" option
+(hereafter referred to as "WAL") is available.</p>
+
+<p>There are advantages and disadvantages to using WAL instead of
+a rollback journal. Advantages include:</p>
+
+<a name="advantages"></a>
+
+<ol>
+<li>WAL is significantly faster in most scenarios.
+</li><li>WAL provides more concurrency as readers do not block writers and
+ a writer does not block readers. Reading and writing can proceed
+ concurrently.
+</li><li>Disk I/O operations tends to be more sequential using WAL.
+</li><li>WAL uses many fewer fsync() operations and is thus less vulnerable to
+ problems on systems where the fsync() system call is broken.
+</li></ol>
+
+<p>But there are also disadvantages:</p>
+
+<ol>
+<li>WAL normally requires that the <a href="vfs.html">VFS</a>
+ support shared-memory primitives.
+ (Exception: <a href="wal.html#noshm">WAL without shared memory</a>)
+ The built-in unix and windows VFSes
+ support this but third-party extension VFSes for custom operating
+ systems might not.
+</li><li>All processes using a database must be on the same host computer;
+ WAL does not work over a network filesystem.
+</li><li>Transactions that involve changes against multiple <a href="lang_attach.html">ATTACHed</a>
+ databases are atomic for each individual database, but are not
+ atomic across all databases as a set.
+</li><li>It is not possible to change the <a href="pragma.html#pragma_page_size">page_size</a> after entering WAL
+ mode, either on an empty database or by using <a href="lang_vacuum.html">VACUUM</a> or by restoring
+ from a backup using the <a href="backup.html">backup API</a>. You must be in a rollback journal
+ mode to change the page size.
+</li><li><s>It is not possible to open <a href="wal.html#readonly">read-only WAL databases</a>.
+ The opening process must have write privileges for "<tt>-shm</tt>"
+ <a href="walformat.html#shm">wal-index</a> shared memory file associated with the database, if that
+ file exists, or else write access on the directory containing
+ the database file if the "<tt>-shm</tt>" file does not exist.</s>
+ Beginning with <a href="releaselog/3_22_0.html">version 3.22.0</a> (2018-01-22), a read-only
+ WAL-mode database file can be opened if
+ the <tt>-shm</tt> and <tt>-wal</tt> files
+ already exists or those files can be created or the
+ <a href="uri.html#uriimmutable">database is immutable</a>.
+</li><li>WAL might be very slightly slower (perhaps 1% or 2% slower)
+ than the traditional rollback-journal approach
+ in applications that do mostly reads and seldom write.
+</li><li>There is an additional quasi-persistent "<tt>-wal</tt>" file and
+ "<tt>-shm</tt>" shared memory file associated with each
+ database, which can make SQLite less appealing for use as an
+ <a href="appfileformat.html">application file-format</a>.
+</li><li>There is the extra operation of <a href="wal.html#ckpt">checkpointing</a> which, though automatic
+ by default, is still something that application developers need to
+ be mindful of.
+</li><li><s>WAL works best with smaller transactions. WAL does
+ not work well for very large transactions. For transactions larger than
+ about 100 megabytes, traditional rollback journal modes will likely
+ be faster. For transactions in excess of a gigabyte, WAL mode may
+ fail with an I/O or disk-full error.
+ It is recommended that one of the rollback journal modes be used for
+ transactions larger than a few dozen megabytes.</s>
+ Beginning with <a href="releaselog/3_11_0.html">version 3.11.0</a> (2016-02-15),
+ WAL mode works as efficiently with
+ large transactions as does rollback mode.
+
+</li></ol>
+
+<h1 id="how_wal_works"><span>2. </span>How WAL Works</h1>
+
+<p>The traditional rollback journal works by writing a copy of the
+original unchanged database content into a separate rollback journal file
+and then writing changes directly into the database file. In the
+event of a crash or <a href="lang_transaction.html">ROLLBACK</a>, the original content contained in the
+rollback journal is played back into the database file to
+revert the database file to its original state. The <a href="lang_transaction.html">COMMIT</a> occurs
+when the rollback journal is deleted.</p>
+
+<p>The WAL approach inverts this. The original content is preserved
+in the database file and the changes are appended into a separate
+WAL file. A <a href="lang_transaction.html">COMMIT</a> occurs when a special record indicating a commit
+is appended to the WAL. Thus a COMMIT can happen without ever writing
+to the original database, which allows readers to continue operating
+from the original unaltered database while changes are simultaneously being
+committed into the WAL. Multiple transactions can be appended to the
+end of a single WAL file.</p>
+
+<a name="ckpt"></a>
+
+<h2 id="checkpointing"><span>2.1. </span>Checkpointing</h2>
+
+<p>Of course, one wants to eventually transfer all the transactions that
+are appended in the WAL file back into the original database. Moving
+the WAL file transactions back into the database is called a
+"<i>checkpoint</i>".</p><p>
+
+</p><p>Another way to think about the difference between rollback and
+write-ahead log is that in the rollback-journal
+approach, there are two primitive operations, reading and writing,
+whereas with a write-ahead log
+there are now three primitive operations: reading, writing, and
+checkpointing.</p>
+
+<p>By default, SQLite does a checkpoint automatically when the WAL file
+reaches a threshold size of 1000 pages. (The
+<a href="compile.html#default_wal_autocheckpoint">SQLITE_DEFAULT_WAL_AUTOCHECKPOINT</a> compile-time option can be used to
+specify a different default.) Applications using WAL do
+not have to do anything in order to for these checkpoints to occur.
+But if they want to, applications can adjust the automatic checkpoint
+threshold. Or they can turn off the automatic checkpoints and run
+checkpoints during idle moments or in a separate thread or process.</p>
+
+<a name="concurrency"></a>
+
+<h2 id="concurrency"><span>2.2. </span>Concurrency</h2>
+
+<p>When a read operation begins on a WAL-mode database, it first
+remembers the location of the last valid commit record in the WAL.
+Call this point the "end mark". Because the WAL can be growing and
+adding new commit records while various readers connect to the database,
+each reader can potentially have its own end mark. But for any
+particular reader, the end mark is unchanged for the duration of the
+transaction, thus ensuring that a single read transaction only sees
+the database content as it existed at a single point in time.</p>
+
+<p>When a reader needs a page of content, it first checks the WAL to
+see if that page appears there, and if so it pulls in the last copy
+of the page that occurs in the WAL prior to the reader's end mark.
+If no copy of the page exists in the WAL prior to the reader's end mark,
+then the page is read from the original database file. Readers can
+exist in separate processes, so to avoid forcing every reader to scan
+the entire WAL looking for pages (the WAL file can grow to
+multiple megabytes, depending on how often checkpoints are run), a
+data structure called the "wal-index" is maintained in shared memory
+which helps readers locate pages in the WAL quickly and with a minimum
+of I/O. The wal-index greatly improves the performance of readers,
+but the use of shared memory means that all readers must exist on the
+same machine. This is why the write-ahead log implementation will not
+work on a network filesystem.</p>
+
+<p>Writers merely append new content to the end of the WAL file.
+Because writers do nothing that would interfere with the actions of
+readers, writers and readers can run at the same time. However,
+since there is only one WAL file, there can only be one writer at
+a time.</p>
+
+<p>A checkpoint operation takes content from the WAL file
+and transfers it back into the original database file.
+A checkpoint can run concurrently with readers, however the checkpoint
+must stop when it reaches a page in the WAL that is past the end mark
+of any current reader. The checkpoint has to stop at that point because
+otherwise it might overwrite part of the database file that the reader
+is actively using. The checkpoint remembers (in the wal-index) how far
+it got and will resume transferring content from the WAL to the database
+from where it left off on the next invocation.</p>
+
+<p>Thus a long-running read transaction can prevent a checkpointer from
+making progress. But presumably every read transaction will eventually
+end and the checkpointer will be able to continue.</p>
+
+<p>Whenever a write operation occurs, the writer checks how much progress
+the checkpointer has made, and if the entire WAL has been transferred into
+the database and synced and if no readers are making use of the WAL, then
+the writer will rewind the WAL back to the beginning and start putting new
+transactions at the beginning of the WAL. This mechanism prevents a WAL
+file from growing without bound.</p>
+
+<a name="fast"></a>
+
+<h2 id="performance_considerations"><span>2.3. </span>Performance Considerations</h2>
+
+<p>Write transactions are very fast since they only involve writing
+the content once (versus twice for rollback-journal transactions)
+and because the writes are all sequential. Further, syncing the
+content to the disk is not required, as long as the application is
+willing to sacrifice durability following a power loss or hard reboot.
+(Writers sync the WAL on every transaction commit if
+<a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> is set to FULL but omit this sync if
+<a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> is set to NORMAL.)</p>
+
+<p>On the other hand, read performance deteriorates as the WAL file
+grows in size since each reader must check the WAL file for the content
+and the time needed to check the WAL file is proportional
+to the size of the WAL file. The wal-index helps find content
+in the WAL file much faster, but performance still falls off with
+increasing WAL file size. Hence, to maintain good read performance
+it is important to keep the WAL file size down by
+running checkpoints at regular intervals.</p>
+
+<p>Checkpointing does require sync operations in order to avoid
+the possibility of database corruption following a power loss
+or hard reboot. The WAL must be synced to persistent storage
+prior to moving content from the WAL into the database and the
+database file must by synced prior to resetting the WAL.
+Checkpoint also requires more seeking.
+The checkpointer makes an effort to
+do as many sequential page writes to the database as it can (the pages
+are transferred from WAL to database in ascending order) but even
+then there will typically be many seek operations interspersed among
+the page writes. These factors combine to make checkpoints slower than
+write transactions.</p>
+
+<p>The default strategy is to allow successive write transactions to
+grow the WAL until the WAL becomes about 1000 pages in size, then to
+run a checkpoint operation for each subsequent COMMIT until the WAL
+is reset to be smaller than 1000 pages. By default, the checkpoint will be
+run automatically by the same thread that does the COMMIT that pushes
+the WAL over its size limit. This has the effect of causing most
+COMMIT operations to be very fast but an occasional COMMIT (those that trigger
+a checkpoint) to be much slower. If that effect is undesirable, then
+the application can disable automatic checkpointing and run the
+periodic checkpoints in a separate thread, or separate process.
+(Links to commands and interfaces to accomplish this are
+<a href="#how_to_checkpoint">shown below</a>.)</p>
+
+
+<p>Note that with <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> set to NORMAL, the checkpoint
+is the only operation to issue an I/O barrier or sync operation
+(fsync() on unix or FlushFileBuffers() on windows). If an application
+therefore runs checkpoint in a separate thread or process, the main
+thread or process that is doing database queries and updates will never
+block on a sync operation. This helps to prevent "latch-up" in applications
+running on a busy disk drive. The downside to
+this configuration is that transactions are no longer durable and
+might rollback following a power failure or hard reset.</p>
+
+
+<p>Notice too that there is a tradeoff between average read performance
+and average write performance. To maximize the read performance,
+one wants to keep the WAL as small as possible and hence run checkpoints
+frequently, perhaps as often as every COMMIT. To maximize
+write performance, one wants to amortize the cost of each checkpoint
+over as many writes as possible, meaning that one wants to run checkpoints
+infrequently and let the WAL grow as large as possible before each
+checkpoint. The decision of how often to run checkpoints may therefore
+vary from one application to another depending on the relative read
+and write performance requirements of the application.
+The default strategy is to run a checkpoint once the WAL
+reaches 1000 pages and this strategy seems to work well in test applications on
+workstations, but other strategies might work better on different
+platforms or for different workloads.</p>
+
+<h1 id="activating_and_configuring_wal_mode"><span>3. </span>Activating And Configuring WAL Mode</h1>
+
+<p>An SQLite database connection defaults to
+<a href="pragma.html#pragma_journal_mode">journal_mode=DELETE</a>. To convert to WAL mode, use the
+following pragma:</p>
+
+<blockquote><pre>
+PRAGMA journal_mode=WAL;
+</pre></blockquote>
+
+<p>The journal_mode pragma returns a string which is the new journal mode.
+On success, the pragma will return the string "<tt>wal</tt>". If
+the conversion to WAL could not be completed (for example, if the <a href="vfs.html">VFS</a>
+does not support the necessary shared-memory primitives) then the
+journaling mode will be unchanged and the string returned from the
+primitive will be the prior journaling mode (for example "<tt>delete</tt>").
+
+<a name="how_to_checkpoint"></a>
+</p><h2 id="automatic_checkpoint"><span>3.1. </span>Automatic Checkpoint</h2>
+
+<p>By default, SQLite will automatically checkpoint whenever a <a href="lang_transaction.html">COMMIT</a>
+occurs that causes the WAL file to be 1000 pages or more in size, or when the
+last database connection on a database file closes. The default
+configuration is intended to work well for most applications.
+But programs that want more control can force a checkpoint
+using the <a href="pragma.html#pragma_wal_checkpoint">wal_checkpoint pragma</a> or by calling the
+<a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint()</a> C interface. The automatic checkpoint
+threshold can be changed or automatic checkpointing can be completely
+disabled using the <a href="pragma.html#pragma_wal_autocheckpoint">wal_autocheckpoint pragma</a> or by calling the
+<a href="c3ref/wal_autocheckpoint.html">sqlite3_wal_autocheckpoint()</a> C interface. A program can also
+use <a href="c3ref/wal_hook.html">sqlite3_wal_hook()</a> to register a callback to be invoked whenever
+any transaction commits to the WAL. This callback can then invoke
+<a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint()</a> or <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> based on whatever
+criteria it thinks is appropriate. (The automatic checkpoint mechanism
+is implemented as a simple wrapper around <a href="c3ref/wal_hook.html">sqlite3_wal_hook()</a>.)</p>
+
+<h2 id="application_initiated_checkpoints"><span>3.2. </span>Application-Initiated Checkpoints</h2>
+
+<p>An application can initiate a checkpoint using any writable database
+connection on the database simply by invoking
+<a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint()</a> or <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a>.
+There are three subtypes of checkpoints that vary in their aggressiveness:
+PASSIVE, FULL, and RESTART. The default checkpoint style is PASSIVE, which
+does as much work as it can without interfering with other database
+connections, and which might not run to completion if there are
+concurrent readers or writers.
+All checkpoints initiated by <a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint()</a> and
+by the automatic checkpoint mechanism are PASSIVE. FULL and RESTART
+checkpoints try harder to run the checkpoint to completion and can only
+be initiated by a call to <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a>. See the
+<a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> documentation for additional information
+on FULL and RESET checkpoints.
+
+</p><h2 id="persistence_of_wal_mode"><span>3.3. </span>Persistence of WAL mode</h2>
+
+<p>Unlike the other journaling modes,
+<a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=WAL</a> is
+persistent. If a process sets WAL mode, then closes and reopens the
+database, the database will come back in WAL mode. In contrast, if
+a process sets (for example) PRAGMA journal_mode=TRUNCATE and then closes and
+reopens the database will come back up in the default rollback mode of
+DELETE rather than the previous TRUNCATE setting.</p>
+
+<p>The persistence of WAL mode means that applications can be converted
+to using SQLite in WAL mode without making any changes to the application
+itself. One has merely to run "<tt>PRAGMA journal_mode=WAL;</tt>" on the
+database file(s) using the <a href="cli.html">command-line shell</a> or other utility, then
+restart the application.</p>
+
+<p>The WAL journal mode will be set on all
+connections to the same database file if it is set on any one connection.
+</p>
+
+<a name="walfile"></a>
+
+<h1 id="the_wal_file"><span>4. </span>The WAL File</h1>
+
+<p>While a <a href="c3ref/sqlite3.html">database connection</a> is open on a WAL-mode database, SQLite
+maintains an extra journal file called a "Write Ahead Log" or "WAL File".
+The name of this file on disk is usually the name of the database file
+with an extra "<tt>-wal</tt>" suffix, though different naming rules may
+apply if SQLite is compiled with <a href="compile.html#enable_8_3_names">SQLITE_ENABLE_8_3_NAMES</a>.
+
+</p><p>The WAL file exists for as long as any <a href="c3ref/sqlite3.html">database connection</a> has the
+database open. Usually, the WAL file is deleted automatically when the
+last connection to the database closes. However, if the last process to
+have the database open exits without cleanly
+shutting down the database connection, or if the
+<a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">SQLITE_FCNTL_PERSIST_WAL</a> <a href="c3ref/file_control.html">file control</a> is used, then the WAL file
+might be retained on disk after all connections to the database have
+been closed. The WAL file is part of the persistent state of the
+database and should be kept with the database if the database is copied
+or moved. If a database file is separated from its WAL file, then
+transactions that were previously committed to the database might be lost,
+or the database file might become corrupted.
+The only safe way to remove a WAL file is
+to open the database file using one of the <a href="c3ref/open.html">sqlite3_open()</a> interfaces
+then immediately close the database using <a href="c3ref/close.html">sqlite3_close()</a>.
+
+</p><p>The <a href="fileformat2.html#walformat">WAL file format</a> is precisely defined and is cross-platform.
+
+<a name="readonly"></a>
+
+</p><h1 id="read_only_databases"><span>5. </span>Read-Only Databases</h1>
+
+<p>Older versions of SQLite could not read a WAL-mode database that was
+read-only. In other words, write access was required in order to read a
+WAL-mode database. This constraint was relaxed beginning with
+SQLite <a href="releaselog/3_22_0.html">version 3.22.0</a> (2018-01-22).
+
+</p><p>On newer versions of SQLite,
+a WAL-mode database on read-only media, or a WAL-mode database that lacks
+write permission, can still be read as long as one or more of the following
+conditions are met:
+</p><ol>
+<li>The <tt>-shm</tt> and <tt>-wal</tt> files already exists and are readable
+</li><li>There is write permission on the directory containing the database so
+ that the <tt>-shm</tt> and <tt>-wal</tt> files can be created.
+</li><li>The database connection is opened using the
+ <a href="uri.html#uriimmutable">immutable query parameter</a>.
+</li></ol>
+
+<p>Even though it is possible to open a read-only WAL-mode database,
+it is good practice to converted to
+<a href="pragma.html#pragma_journal_mode">PRAGMA journal_mode=DELETE</a> prior to burning an
+SQLite database image onto read-only media.</p>
+
+<a name="bigwal"></a>
+
+<h1 id="avoiding_excessively_large_wal_files"><span>6. </span>Avoiding Excessively Large WAL Files</h1>
+
+<p>In normal cases, new content is appended to the WAL file until the
+WAL file accumulates about 1000 pages (and is thus about 4MB
+in size) at which point a checkpoint is automatically run and the WAL file
+is recycled. The checkpoint does not normally truncate the WAL file
+(unless the <a href="pragma.html#pragma_journal_size_limit">journal_size_limit pragma</a> is set). Instead, it merely
+causes SQLite to start overwriting the WAL file from the beginning.
+This is done because it is normally faster to overwrite an existing file
+than to append. When the last connection to a database closes, that
+connection does one last checkpoint and then deletes the WAL and its
+associated shared-memory file, to clean up the disk.
+
+</p><p>So in the vast majority of cases, applications need not worry about
+the WAL file at all. SQLite will automatically take care of it. But
+it is possible to get SQLite into a state where the WAL file will grow
+without bound, causing excess disk space usage and slow queries speeds.
+The following bullets enumerate some of the ways that this can happen
+and how to avoid them.
+
+</p><ul>
+<li><p>
+<b>Disabling the automatic checkpoint mechanism.</b>
+In its default configuration, SQLite will checkpoint the WAL file at the
+conclusion of any transaction when the WAL file is more than 1000 pages
+long. However, compile-time and run-time options exist that can disable
+or defer this automatic checkpoint. If an application disables the
+automatic checkpoint, then there is nothing to prevent the WAL file
+from growing excessively.
+
+</p></li><li><p>
+<b>Checkpoint starvation.</b>
+A checkpoint is only able to run to completion, and reset the WAL file,
+if there are no other database connections using the WAL file. If another
+connection has a read transaction open,
+then the checkpoint cannot reset the WAL file because
+doing so might delete content out from under the reader.
+The checkpoint will do as much work as it can without upsetting the
+reader, but it cannot run to completion.
+The checkpoint will start up again where it left off after the next
+write transaction. This repeats until some checkpoint is able to complete.
+
+</p><p>However, if a database has many concurrent overlapping readers
+and there is always at least one active reader, then
+no checkpoints will be able to complete
+and hence the WAL file will grow without bound.
+
+</p><p>This scenario can be avoided by ensuring that there are "reader gaps":
+times when no processes are reading from the
+database and that checkpoints are attempted during those times.
+In applications with many concurrent readers, one might also consider
+running manual checkpoints with the <a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_RESTART</a> or
+<a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> option which will ensure that the checkpoint
+runs to completion before returning. The disadvantage of using
+<a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_RESTART</a> and <a href="c3ref/c_checkpoint_full.html">SQLITE_CHECKPOINT_TRUNCATE</a> is that
+readers might block while the checkpoint is running.
+
+</p></li><li><p>
+<b>Very large write transactions.</b>
+A checkpoint can only complete when no other transactions are running,
+which means the WAL file cannot be reset in the middle of a write
+transaction. So a large change to a large database
+might result in a large WAL file. The WAL file will be checkpointed
+once the write transaction completes (assuming there are no other readers
+blocking it) but in the meantime, the file can grow very big.
+
+</p><p>As of SQLite <a href="releaselog/3_11_0.html">version 3.11.0</a> (2016-02-15),
+the WAL file for a single transaction
+should be proportional in size to the transaction itself. Pages that
+are changed by the transaction should only be written into the WAL file
+once. However, with older versions of SQLite, the same page might be
+written into the WAL file multiple times if the transaction grows larger
+than the page cache.
+</p></li></ul>
+
+<h1 id="implementation_of_shared_memory_for_the_wal_index"><span>7. </span>Implementation Of Shared-Memory For The WAL-Index</h1>
+
+<p>The <a href="walformat.html#shm">wal-index</a> is implemented using an ordinary file that is
+mmapped for robustness. Early (pre-release) implementations of WAL mode
+stored the wal-index in volatile shared-memory, such as files created in
+/dev/shm on Linux or /tmp on other unix systems. The problem
+with that approach is that processes with a different root directory
+(changed via <a href="http://en.wikipedia.org/wiki/Chroot">chroot</a>)
+will see different files and hence use different shared memory areas,
+leading to database corruption. Other methods for creating nameless
+shared memory blocks are not portable across the various flavors of
+unix. And we could not find any method to create nameless shared
+memory blocks on windows. The only way we have found to guarantee
+that all processes accessing the same database file use the same shared
+memory is to create the shared memory by mmapping a file in the same
+directory as the database itself.</p>
+
+<p>Using an ordinary disk file to provide shared memory has the
+disadvantage that it might actually do unnecessary disk I/O by
+writing the shared memory to disk. However, the developers do not
+think this is a major concern since the wal-index rarely exceeds
+32 KiB in size and is never synced. Furthermore, the wal-index
+backing file is deleted when the last database connection disconnects,
+which often prevents any real disk I/O from ever happening.</p>
+
+<p>Specialized applications for which the default implementation of
+shared memory is unacceptable can devise alternative methods via a
+custom <a href="vfs.html">VFS</a>.
+For example, if it is known that a particular database
+will only be accessed by threads within a single process, the wal-index
+can be implemented using heap memory instead of true shared memory.</p>
+
+<a name="noshm"></a>
+
+<h1 id="use_of_wal_without_shared_memory"><span>8. </span>Use of WAL Without Shared-Memory</h1>
+
+<p>Beginning in SQLite <a href="releaselog/3_7_4.html">version 3.7.4</a> (2010-12-07),
+WAL databases can be created, read, and
+written even if shared memory is unavailable as long as the
+<a href="pragma.html#pragma_locking_mode">locking_mode</a> is set to EXCLUSIVE before the first attempted access.
+In other words, a process can interact with
+a WAL database without using shared memory if that
+process is guaranteed to be the only process accessing the database.
+This feature allows WAL databases to be created, read, and written
+by legacy <a href="vfs.html">VFSes</a> that lack the "version 2" shared-memory
+methods xShmMap, xShmLock, xShmBarrier, and xShmUnmap on the
+<a href="c3ref/io_methods.html">sqlite3_io_methods</a> object.</p>
+
+<p>If <a href="pragma.html#pragma_locking_mode">EXCLUSIVE locking mode</a>
+is set prior to the first WAL-mode
+database access, then SQLite never attempts to call any of the
+shared-memory methods and hence no shared-memory
+wal-index is ever created.
+In that case, the database connection remains in EXCLUSIVE mode
+as long as the journal mode is WAL; attempts to change the locking
+mode using "<tt>PRAGMA locking_mode=NORMAL;</tt>" are no-ops.
+The only way to change out of EXCLUSIVE locking mode is to first
+change out of WAL journal mode.</p>
+
+<p>If NORMAL locking mode is in effect for the first WAL-mode database
+access, then the shared-memory wal-index is created. This means that the
+underlying VFS must support the "version 2" shared-memory.
+If the VFS does not support shared-memory methods, then the attempt to
+open a database that is already in WAL mode, or the attempt convert a
+database into WAL mode, will fail.
+As long as exactly one connection is using a shared-memory wal-index,
+the locking mode can be changed freely between NORMAL and EXCLUSIVE.
+It is only when the shared-memory wal-index is omitted, when the locking
+mode is EXCLUSIVE prior to the first WAL-mode database access, that the
+locking mode is stuck in EXCLUSIVE.</p>
+
+<a name="busy"></a>
+
+<h1 id="sometimes_queries_return_sqlite_busy_in_wal_mode"><span>9. </span>Sometimes Queries Return SQLITE_BUSY In WAL Mode</h1>
+
+<p>The <a href="wal.html#advantages">second advantage of WAL-mode</a> is that
+writers do not block readers and readers to do not block writers.
+This is <u>mostly</u> true.
+But there are some obscure cases where a query against a WAL-mode
+database can return <a href="rescode.html#busy">SQLITE_BUSY</a>, so applications should be prepared
+for that happenstance.
+
+</p><p>Cases where a query against a WAL-mode database can return <a href="rescode.html#busy">SQLITE_BUSY</a>
+include the following:
+
+</p><ul>
+<li><p>If another database connection has the database mode open
+in <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a> then all queries against the
+database will return <a href="rescode.html#busy">SQLITE_BUSY</a>. Both Chrome and Firefox open their
+database files in exclusive locking mode, so attempts to read Chrome or
+Firefox databases while the applications are running will run into this
+problem, for example.
+
+</p></li><li><p>
+When the last connection to a particular database is closing, that
+connection will acquire an exclusive lock for a short time while it
+cleans up the WAL and shared-memory files. If a second database tries
+to open and query the database while the first connection
+is still in the middle
+of its cleanup process, the second connection might get an <a href="rescode.html#busy">SQLITE_BUSY</a>
+error.
+
+</p></li><li><p>
+If the last connection to a database crashed, then the first new
+connection to open the database will start a recovery process. An
+exclusive lock is held during recovery. So if a third database connection
+tries to jump in and query while the second connection is running recovery,
+the third connection will get an <a href="rescode.html#busy">SQLITE_BUSY</a> error.
+</p></li></ul>
+
+<a name="bkwrds"></a>
+
+<h1 id="backwards_compatibility"><span>10. </span>Backwards Compatibility</h1>
+
+<p>The database file format is unchanged for WAL mode. However, the
+WAL file and the <a href="walformat.html#shm">wal-index</a> are new concepts and so older versions of
+SQLite will not know
+how to recover a crashed SQLite database that was operating in WAL mode
+when the crash occurred.
+To prevent older versions of SQLite (prior to version 3.7.0, 2010-07-22)
+from trying to recover
+a WAL-mode database (and making matters worse) the database file format
+version numbers (bytes 18 and 19 in the <a href="fileformat2.html#database_header">database header</a>)
+are increased from 1 to 2 in WAL mode.
+Thus, if an older version of SQLite attempts to connect to an SQLite
+database that is operating in WAL mode, it will report an error along
+the lines of "file is encrypted or is not a database".</p>
+
+<p>One can explicitly change out of WAL mode using a pragma such as
+this:</p>
+
+<blockquote><pre>
+PRAGMA journal_mode=DELETE;
+</pre></blockquote>
+
+
+<p>Deliberately changing out of WAL mode changes the database file format
+version numbers back to 1 so that older versions of SQLite can once again
+access the database file.</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/wal.in?m=9b1dbf50c3fb0831f">2018-11-26 12:01:01</a> UTC </small></i></p>
+
diff --git a/www/walformat.html b/www/walformat.html
new file mode 100644
index 0000000..3634a44
--- /dev/null
+++ b/www/walformat.html
@@ -0,0 +1,893 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>WAL-mode File Format</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+WAL-mode File Format
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#files_on_disk">1. Files On Disk</a></div>
+<div class="fancy-toc2"><a href="#the_main_database_file">1.1. The Main Database File</a></div>
+<div class="fancy-toc2"><a href="#the_write_ahead_log_or_wal_file">1.2. The Write-Ahead-Log or "-wal" File</a></div>
+<div class="fancy-toc2"><a href="#the_wal_index_or_shm_file">1.3. The Wal-Index or "-shm" file</a></div>
+<div class="fancy-toc2"><a href="#file_lifecycles">1.4. File Lifecycles</a></div>
+<div class="fancy-toc2"><a href="#variations">1.5. Variations</a></div>
+<div class="fancy-toc1"><a href="#the_wal_index_file_format">2. The WAL-Index File Format</a></div>
+<div class="fancy-toc2"><a href="#the_wal_index_header">2.1. The WAL-Index Header</a></div>
+<div class="fancy-toc3"><a href="#the_mxframe_field">2.1.1. The mxFrame field</a></div>
+<div class="fancy-toc3"><a href="#the_nbackfill_field">2.1.2. The nBackfill field</a></div>
+<div class="fancy-toc3"><a href="#wal_locks">2.1.3. WAL Locks</a></div>
+<div class="fancy-toc2"><a href="#wal_index_hash_tables">2.2. WAL-Index Hash Tables</a></div>
+<div class="fancy-toc2"><a href="#locking_matrix">2.3. Locking Matrix</a></div>
+<div class="fancy-toc3"><a href="#how_the_various_locks_are_used">2.3.1. How the various locks are used</a></div>
+<div class="fancy-toc3"><a href="#operations_that_require_locks_and_which_locks_those_operations_use">2.3.2. Operations that require locks and which locks those operations use</a></div>
+<div class="fancy-toc1"><a href="#recovery">3. Recovery</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<p>This document describes low-level details on how <a href="wal.html">WAL mode</a> is
+implemented on unix and windows.
+
+</p><p>The separate <a href="fileformat2.html">file format</a> description provides details on the
+structure of a database file and of the write-head log file used in
+<a href="wal.html">WAL mode</a>. But details of the locking protocol and of the format
+of the WAL-index are deliberately omitted since those details
+are left to discretion of individual <a href="vfs.html">VFS</a> implementations. This
+document fills in those missing details for the unix and windows <a href="vfs.html">VFSes</a>.
+
+</p><p>For completeness, some of the higher level formatting information
+contains in the <a href="fileformat2.html">file format</a> document and elsewhere is replicated here,
+when it pertains to WAL mode processing.
+
+</p><h1 id="files_on_disk"><span>1. </span>Files On Disk</h1>
+
+<p>When in active use, the state of a WAL mode database is described
+by three separate files:
+
+</p><ol>
+<li> The main database file with an arbitrary name "X".
+</li><li> The write-ahead log file, usually named "X-wal".
+</li><li> The wal-index file, usually named "X-shm".
+</li></ol>
+
+<h2 id="the_main_database_file"><span>1.1. </span>The Main Database File</h2>
+
+<p>The format of the main database file is as described in the
+<a href="fileformat2.html">file format</a> document. The <a href="fileformat2.html#vnums">file format version numbers</a> at offsets
+18 and 19 into the main database must both be 2 to indicate that the
+database is in WAL mode. The main database may have an arbitrary
+name allowed by the underlying filesystem. No special file suffixes
+are required, though ".db", ".sqlite", and ".sqlite3" seem to be
+popular choices.
+
+</p><h2 id="the_write_ahead_log_or_wal_file"><span>1.2. </span>The Write-Ahead-Log or "-wal" File</h2>
+<p>The write-ahead log or "wal" file is a roll-forward journal
+that records transactions that have been committed but not yet applied
+to the main database. Details on the format of the wal file are
+describe in the <a href="fileformat2.html#walformat">WAL format</a> subsection of the main <a href="fileformat2.html">file format</a>
+document. The wal file is named by appending the four characters
+"-wal" to the end of the name of the main database file. Except
+on 8+3 filesystems, such names are not allowed, and in that case
+the file suffix is changed to ".WAL". But as 8+3 filesystems are
+increasingly rare, that exceptional case can usually be ignored.
+
+<a name="shm"></a>
+
+</p><h2 id="the_wal_index_or_shm_file"><span>1.3. </span>The Wal-Index or "-shm" file</h2>
+<p>The wal-index file or "shm" file is not actually used as a file.
+Rather, individual database clients mmap the shm file and use it
+as shared memory for coordinating access to the database and as a cache
+for quickly locating frame within the wal file. The name
+of the shm file is the main database file name with the four characters
+"-shm" appended. Or, for 8+3 filesystems, the shm file is the main
+database file with the suffix changed to ".SHM".
+
+</p><p>The shm does not contain any database content and is not required
+to recover the database following a crash. For that reason, the first
+client to connect to a quiescent database will normally truncate the
+shm file if it exists. Since the content of the shm file does not need
+to be preserved across a crash, the shm file is never fsync()-ed to disk.
+In fact, if there were a mechanism by which SQLite could tell the
+operating system to never persist the shm file to disk but always hold
+it in cache memory, SQLite would use that mechanism to avoid any
+unnecessary disk I/O associated with the shm file. However, no such
+mechanism exists in standard posix.
+
+</p><p>Because the shm is only used to coordinate access between concurrent
+clients, the shm file is omitted if <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a>
+is set, as an optimization. When <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a> is set,
+SQLite uses heap memory in place of the memory-mapped shm file.
+
+</p><h2 id="file_lifecycles"><span>1.4. </span>File Lifecycles</h2>
+
+<p>When a WAL mode database is in active use, all three of the above
+files usually exist. Except, the Wal-Index file is omitted if
+<a href="pragma.html#pragma_locking_mode">exclusive locking mode</a> is set.
+
+</p><p>If the last client using the database shuts down cleanly by
+calling <a href="c3ref/close.html">sqlite3_close()</a>, then a <a href="wal.html#ckpt">checkpoint</a> is run automatically
+in order to transfer all information from the wal file
+over into the main database, and both the shm file
+and the wal file are unlinked. Thus, when the database is not in
+use by any client, it is usually the case that only the main
+database file exists on disk.
+However, if the last client did not call <a href="c3ref/close.html">sqlite3_close()</a> before it
+shut down, or if the last client to disconnect was a read-only client,
+then the final cleanup operation does not occur and the
+shm and wal files may still exist on disk even when the database is
+not in use.
+
+</p><h2 id="variations"><span>1.5. </span>Variations</h2>
+
+<p>When <a href="pragma.html#pragma_locking_mode">PRAGMA locking_mode=EXCLUSIVE</a> (exclusive locking mode) is set,
+only a single client is allowed to have the database open at one time. Since
+only a single client can use the database, the shm file is omitted.
+The single client uses a buffer in heap memory as a substitute for the
+memory-mapped shm file.
+
+</p><p>If a read/write client invokes
+<a href="c3ref/file_control.html">sqlite3_file_control</a>(<a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">SQLITE_FCNTL_PERSIST_WAL</a>) prior to shutdown,
+then at shutdown a checkpoint is still run, but the shm file and wal
+file are not deleted.
+This allows subsequent read-only clients to connect to and read the
+database.
+
+<a name="walidxfmt"></a>
+
+</p><h1 id="the_wal_index_file_format"><span>2. </span>The WAL-Index File Format</h1>
+
+<p>
+The WAL-index or "shm" file is used to coordinate access to the database
+by multiple clients, and as a cache to help clients quickly locate frames
+within the wal file.
+
+</p><p>
+Because the shm file is not involved in recovery, the shm file does not
+need to be machine byte-order independent. Hence, numeric values in
+the shm file are written in the native byte order of the host computer,
+rather than being converted into a specific cross-platform byte order as
+is done with the main database file and the wal file.
+
+</p><p>
+The shm file consists of one or more hash tables, where each hash table
+is 32768 bytes in size. Except, a 136-byte header is carved out of the
+front of the very first hash table, so the first hash table is only
+32632 bytes in size. The total size of the shm file is always a multiple
+of 32768. In most cases, the total size of the shm file is exactly 32768
+bytes. The shm file only needs to grow beyond a single hash table if
+when the wal file grows very large (more than 4079 frames). Since the
+default <a href="c3ref/wal_autocheckpoint.html">automatic checkpoint threshold</a> is
+1000, WAL files rare reach the 4079 threshold needed to make the shm file
+grow.
+
+</p><h2 id="the_wal_index_header"><span>2.1. </span>The WAL-Index Header</h2>
+
+<p>The first 136 bytes of the shm file are a header. The shm header has
+three main divisions as follows:
+
+</p><center>
+<i>WAL-Index Header Divisions</i><br>
+<table width="80%" border="1">
+<tr><th>Bytes</th><th>Description
+</th></tr><tr><td valign="top">0..47</td><td>First copy of the WAL Index Information</td>
+</tr><tr><td valign="top">48..95</td><td>Second copy of the WAL Index Information</td>
+</tr><tr><td valign="top">96..135</td><td>Checkpoint Information and Locks</td>
+</tr></table>
+</center>
+
+<p>Individual fields of the shm header, except for the
+salt values copied from the WAL header, are unsigned integers
+in the native byte-order of the host machine. The salt values
+are exact copies from the WAL header and are in whatever byte
+order is used by the WAL file.
+The size of integers may be 8, 16, 32, or 64 bits.
+A detailed breakout of the individual fields of the shm header
+follows:
+
+</p><center>
+<i>WAL-Index Header Details</i><br>
+<table width="80%" border="1">
+<tr><th>Bytes</th><th>Name</th><th>Meaning</th></tr>
+<tr>
+<td>0..3</td><td>iVersion</td>
+<td>The WAL-index format version number. Always 3007000.</td>
+</tr>
+<tr>
+<td>4..7</td><td>&nbsp;</td>
+<td>Unused padding space. Must be zero.
+</td></tr>
+<tr>
+<td>8..11</td><td>iChange</td>
+<td>Unsigned integer counter, incremented with each transaction
+</td></tr>
+<tr>
+<td>12</td><td>isInit</td>
+<td>The "isInit" flag. 1 when the shm file has been initialized.
+</td></tr>
+<tr>
+<td>13</td><td>bigEndCksum</td>
+<td>True if the WAL file uses big-ending checksums. 0 if the WAL
+ uses little-endian checksums.
+</td></tr>
+<tr>
+<td>14..15</td><td>szPage</td>
+<td>The database page size in bytes, or 1 if the page size is 65536.
+</td></tr>
+<tr>
+<td>16..19</td><td>mxFrame</td>
+<td>Number of valid and committed frames in the WAL file.
+</td></tr>
+<tr>
+<td>20..23</td><td>nPage</td>
+<td>Size of the database file in pages.
+</td></tr>
+<tr>
+<td>24..31</td><td>aFrameCksum</td>
+<td>Checksum of the last frame in the WAL file.
+</td></tr>
+<tr>
+<td>32..39</td><td>aSalt</td>
+<td>The two salt value copied from the WAL file header.
+These values are in the byte-order of the WAL file, which
+might be different from the native byte-order of the
+machine.
+</td></tr>
+<tr>
+<td>40..47</td><td>aCksum</td>
+<td>A checksum over bytes 0 through 39 of this header.
+</td></tr>
+<tr>
+<td>48..95</td><td>&nbsp;</td>
+<td>A copy of bytes 0 through 47 of this header.
+</td></tr>
+<tr>
+<td>96..99</td><td>nBackfill</td>
+<td>Number of WAL frames that have already been backfilled into the database
+ by prior checkpoints
+</td></tr>
+<tr>
+<td>100..119</td><td>read-mark&#91;0..4&#93;
+</td><td>Five "read marks". Each read mark is a 32-bit unsigned integer (4 bytes).
+</td></tr>
+<tr>
+<td>120..127</td><td>&nbsp;</td>
+<td>Unused space set aside for 8 file locks.
+</td></tr>
+<tr>
+<td>128..132</td><td>nBackfillAttempted</td>
+<td>Number of WAL frames that have attempted to be backfilled but which might
+ not have been backfilled successfully.
+</td></tr>
+<tr>
+<td>132..136</td><td>&nbsp;</td>
+<td>Unused space reserved for further expansion.
+</td></tr>
+</table>
+</center>
+
+<a name="mxframe"></a>
+
+<h3 id="the_mxframe_field"><span>2.1.1. </span>The mxFrame field</h3>
+
+<p>The 32-bit unsigned integer at offset 16 (and repeated at offset 64)
+is the number of valid frames in the WAL. Because WAL frame are numbered
+starting with 1, mxFrame is also the index of the last valid commit frame
+in the WAL. A commit frame is a frame that has a non-zero "size of database"
+value in bytes 4 through 7 of the frame header, and that indicates the end
+of a transaction.
+</p><p>
+When mxFrame field is zero, it indicates that the WAL is empty and that
+all content should be obtained directly from the database file.
+</p><p>
+When mxFrame is equal to <a href="walformat.html#nbackfill">nBackfill</a>, that indicates that all content
+in the WAL has been written back into the database.
+In that case, all content can be read directly from the database.
+Furthermore, the next writer is free to <a href="fileformat2.html#walreset">reset the WAL</a> if no other
+connections hold locks on WAL_READ_LOCK(N) for N>0.
+</p><p>
+The mxFrame value is always greater than or equal to both
+<a href="walformat.html#nbackfill">nBackfill</a> and nBackfillAttempted.
+
+
+<a name="nbackfill"></a>
+
+</p><h3 id="the_nbackfill_field"><span>2.1.2. </span>The nBackfill field</h3>
+
+<p>The 32-bit unsigned integer at offset 128 in the WAL-index header
+is called the "nBackfill".
+this field holds the number of frames in the WAL file which
+have been copied back into the main database.
+
+</p><p>The nBackfill number is never greater than <a href="walformat.html#mxframe">mxFrame</a>.
+When nBackfill equals <a href="walformat.html#mxframe">mxFrame</a>, that means that the WAL content
+has been completely written back into the database and it is
+ok to <a href="fileformat2.html#walreset">reset the WAL</a> if there are no locks held on any of WAL_READ_LOCK(N)
+for N>0.
+
+</p><p>The nBackfill can only be increased while holding the
+WAL_CKPT_LOCK. However, nBackfill is changed to zero
+during a <a href="fileformat2.html#walreset">WAL reset</a>, and this happens while holding
+the WAL_WRITE_LOCK.
+
+<a name="locks"></a>
+
+</p><h3 id="wal_locks"><span>2.1.3. </span>WAL Locks</h3>
+
+<p>Eight bytes of space are set aside in the header to support
+file locking using the xShmLock() method in the <a href="c3ref/io_methods.html">sqlite3_io_methods</a>
+object. These eight bytes are never read nor written by SQLite since
+some VFSes (ex: Windows) might implement locks using mandatory file locks.
+
+</p><p>These are the eight locks supported:
+
+</p><center>
+<i>WAL-Index Locks Controlled By xShmLock()</i><br>
+<table border="1">
+<tr><th rowspan="2">Name</th><th colspan="2">Offset
+</th></tr><tr><th>xShmLock</th><th>File
+</th></tr><tr>
+<td>WAL_WRITE_LOCK
+</td><td>0
+</td><td>120
+</td></tr>
+
+<tr>
+<td>WAL_CKPT_LOCK
+</td><td>1
+</td><td>121
+</td></tr>
+
+<tr>
+<td>WAL_RECOVER_LOCK
+</td><td>2
+</td><td>122
+</td></tr>
+
+<tr>
+<td>WAL_READ_LOCK(0)
+</td><td>3
+</td><td>123
+</td></tr>
+
+<tr>
+<td>WAL_READ_LOCK(1)
+</td><td>4
+</td><td>124
+</td></tr>
+
+<tr>
+<td>WAL_READ_LOCK(2)
+</td><td>5
+</td><td>125
+</td></tr>
+
+<tr>
+<td>WAL_READ_LOCK(3)
+</td><td>6
+</td><td>126
+</td></tr>
+
+<tr>
+<td>WAL_READ_LOCK(4)
+</td><td>7
+</td><td>127
+</td></tr>
+</table>
+</center>
+
+
+
+<p><i>TBD: More information about the header</i>
+
+</p><h2 id="wal_index_hash_tables"><span>2.2. </span>WAL-Index Hash Tables</h2>
+
+<p>The hash tables in the shm file are designed to answer the
+following question quickly:
+
+</p><blockquote><i>
+FindFrame(P,M):
+Given a page number P and a maximum WAL frame index M,
+return the largest WAL frame index for page P that does not exceed M,
+or return NULL if there are no frames for page P that do not exceed M.
+</i></blockquote>
+
+<p>
+Let the datatypes "u8", "u16", and "u32" mean unsigned integers of
+length 8, 16, and 32 bits, respectively. Then, the first 32768-byte unit
+of the shm file is organized as follows:
+
+</p><blockquote><pre>
+u8 aWalIndexHeader[136];
+u32 aPgno[4062];
+u16 aHash[8192];
+</pre></blockquote>
+
+<p>The second and all subsequent 32768-byte units of the shm file are
+like this:
+
+</p><blockquote><pre>
+u32 aPgno[4096];
+u16 aHash[8192];
+</pre></blockquote>
+
+<p>Collectively, the aPgno entries record the database page number stored
+in all frames of the WAL file. The aPgno[0] entry on the first hash table
+records the database page number stored in the very first frame in the WAL
+file. The aPgno[i] entry from the first hash table is the database page number
+for the i-th frame in the WAL file. The aPgno[k] entry for the second
+hash table is the database page number for the (k+4062)-th frame in the
+WAL file. The aPgno[k] entry for the n-th 32768-byte hash table in the
+shm file (for n>1) holds the database page number stored in the
+(k+4062+4096*(n-2))-th frame of the WAL file.
+
+</p><p>Here is a slightly different way to describe the aPgno values:
+If you think of all aPgno values as a contiguous array, then
+the database page number stored in the i-th frame of the WAL file
+is stored in aPgno[i]. Of course, aPgno is not a contiguous array.
+The first 4062 entries are on the first 32768-byte unit of the shm
+file and subsequent values are in 4096 entry chunks in later units
+of the shm file.
+
+</p><p>One way to compute FindFrame(P,M) would be to scan the aPgno
+array starting with the M-th entry and working backwards towards
+the beginning and return J where aPgno[J]==P. Such an algorithm would
+work, and it would be faster than searching the whole WAL file for
+the latest frame with page number P. But the search can be made
+much faster still by using the aHash structure.
+
+</p><p>A database page number P is mapped into a hash value
+using the following hash function:
+
+</p><blockquote>
+h = (P * 383)%8192
+</blockquote>
+
+<p>This function maps every page number into an integer between 0
+and 8191 inclusive. The aHash field of each 32768-byte shm file unit
+maps P values into indexes of the aPgno field of the same unit as
+follows:
+
+</p><ol>
+<li> Compute the hash value: h = P * 383
+</li><li> Let X be the largest set of consecutive integers {h, h+1, h+2, ..., h+N}
+ such that for every j in X, aPgno&#91;j%8192]!=0. The X set will be empty
+ if aPgno&#91;h%8192]==0. The X set is easily computed by starting with
+ the value h%8192, and adding h%8192 to X and incrementing h until
+ encountering the first aPgno&#91;h%8192] entry that is zero.
+</li><li> The set X contains the index in aPgno of every entry in the current
+ 32768-byte unit of the shm file that might possible be a solution
+ to the FindFrame(P,M) function. Each of these entries must be
+ checked separately to ensure that the aPgno value is P and that the
+ frame number does not exceed M. The largest frame number that passes
+ those two tests is the answer.
+</li></ol>
+
+<p>Each entry in the aPgno array has a single corresponding entry
+in the aHash array. There are more available slots in aHash than
+there are in aPgno. The unused slots in aHash are filled with zero.
+And since there are guaranteed to be unused slots in aHash, that means
+the loop that computes X is guaranteed to terminate. The expected size
+of X is less than 2. The worst case is that X will be the same as the
+number of entries in aPgno, in which case the algorithm runs at about
+the same speed as a linear scan of aPgno. But that worst case performance
+is exceedingly rare. Usually, the size of X will be small and the use
+of the aHash array allows one to compute FindFrame(P,M) much faster.
+
+</p><p>Here is an alternative way of describing the hash look-up algorithm:
+Start with h = (P * 383)%8192 and look at aHash[h] and subsequent entries,
+wrapping around to zero when h reaches 8192, until finding an entry with
+aHash[h]==0. All aPgno entries having a page number of P will have an
+index that is one of the aHash[h] values thusly computed.
+But not all the computed aHash[h] values will
+meet the matching criteria, so you must check them independently. The
+speed advantage comes about because normally this set of h values is
+very small.
+
+</p><p>Note that each 32768-byte unit of the shm file has its own aHash and
+aPgno arrays. The aHash array for a single unit is only helpful in finding
+aPgno entries in that same unit. The overall FindFrame(P,M) function
+needs to do hash lookups beginning with the latest unit and working
+backwards to the oldest unit until it finds an answer.
+
+</p><h2 id="locking_matrix"><span>2.3. </span>Locking Matrix</h2>
+
+<p>Access is coordinated in WAL mode using both the legacy DELETE-mode
+locks controlled by the xLock and xUnlock methods of the <a href="c3ref/io_methods.html">sqlite3_io_methods</a>
+object and the WAL locks controlled by the xShmLock method of the
+<a href="c3ref/io_methods.html">sqlite3_io_methods</a> object.
+
+</p><p>Conceptually, there is just a single DELETE-mode lock. The DELETE-mode
+lock for a single database connection can be in exactly one of the
+following states:
+</p><ol>
+<li value="0"> SQLITE_LOCK_NONE (unlocked)
+</li><li value="1"> SQLITE_LOCK_SHARED (reading)
+</li><li value="2"> SQLITE_LOCK_RESERVED (reading, waiting to write)
+</li><li value="3"> SQLITE_LOCK_PENDING (new readers blocked, waiting to write)
+</li><li value="4"> SQLITE_LOCK_EXCLUSIVE (writing)
+</li></ol>
+<p>The DELETE-mode locks are stored on the <a href="fileformat2.html#lockbyte">lock-byte page</a> of the
+main database file.
+Only SQLITE_LOCK_SHARED and SQLITE_LOCK_EXCLUSIVE are factors for WAL-mode
+databases.
+The other locking states are used in rollback-mode, but not in WAL-mode.
+
+</p><p>The <a href="walformat.html#locks">WAL-mode locks</a> are described above.
+
+</p><h3 id="how_the_various_locks_are_used"><span>2.3.1. </span>How the various locks are used</h3>
+
+<p>The following rules show how each of the locks is used.
+
+</p><ul>
+<li><p><b>SQLITE_LOCK_SHARED</b>
+</p><p>
+All connections hold SQLITE_LOCK_SHARED continuously while attached
+to a WAL-mode database. This is true for both read/write connections
+and read-only connections.
+The SQLITE_LOCK_SHARED lock is held even by connections that are
+not within transaction.
+This is different from rollback mode, where the SQLITE_LOCK_SHARED is
+released at the end of each transaction.
+
+</p></li><li><p><b>SQLITE_LOCK_EXCLUSIVE</b>
+</p><p>
+Connections hold an exclusive lock when change in between WAL mode
+and any of the various rollback-modes. Connections might also attempt to
+obtain an EXCLUSIVE lock when they disconnect from WAL mode. If
+a connection is able to obtain an EXCLUSIVE lock, that means it is the
+only connection to the database and so it may attempt to checkpoint
+and then delete the WAL-index and WAL files.
+</p><p>
+When a connection is holding a SHARED lock on the main database,
+that will prevent any other connection from acquiring the EXCLUSIVE
+lock, which in turn prevents the WAL-index and WAL files from being
+deleted out from under other users, and prevents a transition out of
+WAL-mode while other users are accessing the database in WAL-mode.
+
+
+</p></li><li><p><b>WAL_WRITE_LOCK</b>
+</p><p>
+The WAL_WRITE_LOCK is only locked exclusively. There is never a shared
+lock taken on WAL_WRITE_LOCK.
+</p><p>
+An EXCLUSIVE WAL_WRITE_LOCK is held by any connection that is appending
+content to the end of the WAL. Hence, only a single process at a time
+can append content to the WAL. If a <a href="fileformat2.html#walreset">WAL reset</a> occurs as a consequence of
+a write, then the <a href="walformat.html#nbackfill">nBackfill</a> field of the WAL-index header is reset to
+zero while holding this lock.
+</p><p>An EXCLUSIVE is also held WAL_WRITE_LOCK, and on several other locking
+bytes, when a connection is running <a href="walformat.html#recovery">recovery</a> on the shared WAL-index.
+
+</p></li><li><p><b>WAL_CKPT_LOCK</b>
+</p><p>
+The WAL_CKPT_LOCK is only locked exclusively. There is never a shared
+lock taken on WAL_CKPT_LOCK.
+</p><p>
+An EXCLUSIVE WAL_CKPT_LOCK is held by any connection that is running
+a <a href="wal.html#ckpt">checkpoint</a>. The <a href="walformat.html#nbackfill">nBackfill</a> field of the WAL-index header may be
+increased while holding this exclusive lock, but it may not be decreased.
+</p><p>An EXCLUSIVE is also held WAL_CKPT_LOCK, and on several other locking
+bytes, when a connection is running <a href="walformat.html#recovery">recovery</a> on the shared WAL-index.
+
+</p></li><li><p><b>WAL_RECOVER_LOCK</b>
+</p><p>
+The WAL_RECOVER_LOCK is only locked exclusively. There is never a shared
+lock taken on WAL_RECOVER_LOCK.
+</p><p>
+An EXCLUSIVE WAL_RECOVER_LOCK is held by any connection that is running
+<a href="walformat.html#recovery">recovery</a> to reconstruct the shared WAL-index.
+</p><p>
+A read-only connection that is rebuilding its private heap-memory WAL-index
+does not hold this lock. (It cannot, since read-only connections are not
+allowed to hold any exclusive locks.) This lock is only held when rebuilding
+the global shared WAL-index contained in the memory-mapped SHM file.
+</p><p>
+In addition to locking this byte, a connection running <a href="walformat.html#recovery">recovery</a> also
+gets an exclusive lock on all other WAL locks except for WAL_READ_LOCK(0).
+
+</p></li><li><p><b>WAL_READ_LOCK(N)</b>
+</p><p>
+There are five separate read locks, numbers 0 through 4.
+Read locks may be either SHARED or EXCLUSIVE.
+Connections obtain a shared lock on one of the read locks bytes while
+they are within a transaction.
+Connections also obtain an exclusive lock on read locks, one at a time,
+for the brief moment while they are updating the values of the corresponding
+read-marks.
+Read locks 1 through 4 are held exclusively when running <a href="walformat.html#recovery">recovery</a>.
+</p><p>
+Each read lock byte corresponds to one of the five 32-bit read-mark
+integers located in bytes 100 through 119 of the WAL-index header, as
+follows:
+</p><center>
+<table border="1">
+<tr><th>Lock Name</th><th>Lock offset</th><th>Read-mark name</th><th>Read-mark offset
+</th></tr><tr><td>WAL_READ_LOCK(0)</td><td>123</td><td>read-mark[0]</td><td>100..103
+</td></tr><tr><td>WAL_READ_LOCK(1)</td><td>124</td><td>read-mark[1]</td><td>104..107
+</td></tr><tr><td>WAL_READ_LOCK(2)</td><td>125</td><td>read-mark[2]</td><td>108..111
+</td></tr><tr><td>WAL_READ_LOCK(3)</td><td>126</td><td>read-mark[3]</td><td>112..115
+</td></tr><tr><td>WAL_READ_LOCK(4)</td><td>127</td><td>read-mark[4]</td><td>116..119
+</td></tr></table>
+</center>
+<p>
+When a connection holds a shared lock on WAL_READ_LOCK(N), that is a
+promise by the connection that it will use the WAL and not the database
+file for any database pages that are modified by the first
+read-mark[N] entries in the WAL.
+The read-mark[0] is always zero. If a connection holds a shared lock
+on WAL_READ_LOCK(0), that means the connection expects to be able to ignore
+the WAL and read any content it wants from the main database.
+If N>0 then the connection is free to use more of the WAL file beyond
+read-mark[N] if it wants to, up to the first mxFrame frames.
+But when a connection holds a shared lock on WAL_READ_LOCK(0), that is a
+promise that it will never read content from the WAL
+and will acquire all content directly from the main database.
+</p><p>
+When a checkpoint runs, if it sees a lock on WAL_READ_LOCK(N), then it
+must not move WAL content into the main database for more than the first
+read-mark[N] frames. Were it to do so, it would overwrite content that
+the process holding the lock was expecting to be able to read out of the
+main database file. A consequence of if this is that f the WAL file
+contains more than read-mark[N] frames (if mxFrame>read-mark[N]
+for any read-mark for which WAL_READ_LOCK(N) is held by another process),
+then the checkpoint cannot run to completion.
+</p><p>
+When a writer wants to <a href="fileformat2.html#walreset">reset the WAL</a>, it must ensure that there are
+no locks on WAL_READ_LOCK(N) for N>0 because such locks indicate
+that some other connection is still using the current WAL file and
+a <a href="fileformat2.html#walreset">WAL reset</a> would delete content out from those other connections. It is
+ok for a <a href="fileformat2.html#walreset">WAL reset</a> to occur if other connections are holding WAL_READ_LOCK(0)
+because by holding WAL_READ_LOCK(0), those other connections are promising
+not to use any content from the WAL.
+</p></li></ul>
+
+<h3 id="operations_that_require_locks_and_which_locks_those_operations_use"><span>2.3.2. </span>Operations that require locks and which locks those operations use</h3>
+
+<ul>
+<li><p><b>Transition into and out of WAL-mode</b>
+
+</p><p>The SQLITE_LOCK_EXCLUSIVE lock must be held by a connection that wants
+to transition into our out of WAL mode.
+Transitioning into WAL mode is, therefore, just like any other write
+transaction, since every write transaction in rollback mode requires
+the SQLITE_LOCK_EXCLUSIVE lock.
+If the database file is already in WAL mode (hence if the desire it to change
+it back into rollback mode) and if there are two
+or more connections to the database, then each of these connections will
+be holding an SQLITE_LOCK_SHARED lock. That means that the
+SQLITE_LOCK_EXCLUSIVE cannot be obtained, and the transition out of
+WAL mode will not be allowed. This prevents one connection from deleting
+WAL mode out from under another. It also means that the only way to move
+a database from WAL mode into rollback mode is to close all but one
+connection to the database.
+
+
+</p></li><li><p><b>Close a connection to a WAL mode database</b>
+
+</p><p>When a database connection closes (via <a href="c3ref/close.html">sqlite3_close()</a> or
+<a href="c3ref/close.html">sqlite3_close_v2()</a>), an attempt is made to acquire
+SQLITE_LOCK_EXCLUSIVE. If this attempt is successful, that means
+the connection that is closing is the last connection to the database.
+In that case, it is desirable to clean up the WAL and WAL-index files,
+so the closing connection runs a <a href="wal.html#ckpt">checkpoint</a> (while holding
+SQLITE_LOCK_EXCLUSIVE) and the deletes both the WAL and WAL-index files.
+The SQLITE_LOCK_EXCLUSIVE is not released until after both the
+WAL and WAL-index files have been deleted.
+
+</p><p>If the application invokes
+<a href="c3ref/file_control.html">sqlite3_file_control</a>(<a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpersistwal">SQLITE_FCNTL_PERSIST_WAL</a>) on the database
+connection prior to closing, then the final checkpoint is still
+run but the WAL and WAL-index files are
+not deleted as they normally would be.
+This leaves the database in a state that allows other processes
+without write permission on the database, WAL, or WAL-index files
+to open the database read-only.
+If the WAL and WAL-index files are missing, then a process that
+lacks permission to create and initialize those files will not be
+able to open the database, unless the database is designated
+as immutable using the <a href="uri.html#uriimmutable">immutable query parameter</a>.
+
+</p></li><li><p><b>Reconstruct the global shared WAL-index during <a href="walformat.html#recovery">recovery</a></b>
+
+</p><p>All of the WAL-index locks, except for WAL_READ_LOCK(0),
+are held exclusively while reconstructing the global shared WAL-index
+during <a href="walformat.html#recovery">recovery</a>.
+
+</p></li><li><p><b>Append a new transaction to the end of the WAL</b>
+
+</p><p>An exclusive lock is held on WAL_WRITE_LOCK while adding new
+frame onto the end of a WAL file.
+
+</p></li><li><p><b>Read content from the database and WAL as part of a transaction</b>
+
+</p></li><li><p><b>Run a checkpoint</b>
+
+</p></li><li><p><b>Reset the WAL file</b>
+
+</p><p>A <a href="fileformat2.html#walreset">WAL reset</a> means to rewind the WAL and start adding new frames
+at the beginning. This occurs while appending new frames to a WAL
+that has <a href="walformat.html#mxframe">mxFrame</a> equal to <a href="walformat.html#nbackfill">nBackfill</a> and which has no locks on
+WAL_READ_LOCK(1) through WAL_READ_LOCK(4). The WAL_WRITE_LOCK is
+held.
+
+</p></li></ul>
+
+<a name="recovery"></a>
+
+<h1 id="recovery"><span>3. </span>Recovery</h1>
+
+<p>
+Recovery is the process of rebuilding the WAL-index so that it is
+synchronized with the WAL.
+
+</p><p>
+Recovery is run by the first thread to connect to a WAL-mode database.
+Recovery restores the WAL-index so that it accurately describes the
+WAL file. If there is no WAL file present when the first thread connects
+to the database, there is nothing to recover, but the recovery process
+still runs to initialize the WAL-index.
+
+</p><p>
+If the WAL-index is implemented as a memory-mapped file and that file is
+read-only to the first thread to connect, then that thread creates an
+private heap-memory ersazt WAL-index and runs the recovery routine to
+populate that private WAL-index. The same data results, but it is held
+privately rather that being written into the public shared memory area.
+
+</p><p>
+Recovery works by doing a single pass over the WAL, from beginning to end.
+The checksums are verified on each frame of the WAL as it is read. The
+scan stops at the end of the file or at the first invalid checksum.
+The <a href="walformat.html#mxframe">mxFrame</a> field is set to the index of the last valid commit frame
+in WAL. Since WAL frame numbers are indexed starting with 1, mxFrame is
+also the number of valid frames in the WAL. A "commit frame" is a frame
+that has a non-zero value in bytes 4 through 7 of the frame header.
+Since the recovery procedure has no way of knowing how many frames of the
+WAL might have previously been copied back into the database, it initializes
+the <a href="walformat.html#nbackfill">nBackfill</a> value to zero.
+
+</p><p>
+During recovery of the global shared-memory WAL-index, exclusive locks are
+held on WAL_WRITE_LOCK, WAL_CKPT_LOCK, WAL_RECOVER_LOCK, and WAL_READ_LOCK(1) through WAL_READ_LOCK(4). In other words, all locks associated with the
+WAL-index except for WAL_READ_LOCK(0) are held exclusively. This prevents
+any other thread from writing the database and from reading any transactions
+that are held in the WAL, until the recovery is complete.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/walformat.in?m=24994748471a7cea1">2019-04-17 15:17:39</a> UTC </small></i></p>
+
diff --git a/www/whentouse.html b/www/whentouse.html
new file mode 100644
index 0000000..f5a9930
--- /dev/null
+++ b/www/whentouse.html
@@ -0,0 +1,535 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Appropriate Uses For SQLite</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h1 align="center">Appropriate Uses For SQLite</h1>
+
+<p>
+SQLite is not directly comparable to client/server SQL database engines such
+as MySQL, Oracle, PostgreSQL, or SQL Server since SQLite is trying to
+solve a different problem.
+</p>
+
+<p>
+Client/server SQL database engines strive to implement a shared repository
+of enterprise data. They emphasize scalability, concurrency, centralization,
+and control.
+SQLite strives to provide local data storage for
+individual applications and devices. SQLite emphasizes economy,
+efficiency, reliability, independence, and simplicity.
+</p>
+
+
+<p>
+SQLite does not compete with client/server databases.
+SQLite competes with <a href="http://man.he.net/man3/fopen">fopen()</a>.
+</p>
+
+<h2>Situations Where SQLite Works Well</h2>
+
+<ul>
+
+<a name="appfileformat"></a>
+
+<li><b>Embedded devices and the internet of things</b>
+
+<p>Because an SQLite database requires no administration,
+it works well in devices that must operate without expert human support.
+SQLite is a good fit for use in
+cellphones, set-top boxes, televisions, game consoles,
+cameras, watches, kitchen appliances, thermostats, automobiles,
+machine tools, airplanes, remote sensors, drones, medical devices,
+and robots: the "internet of things".
+</p>
+
+<p>Client/server database engines are designed to live inside a
+lovingly-attended datacenter at the core of the network.
+SQLite works there too, but SQLite also thrives at the edge of the network,
+fending for itself while providing fast and
+reliable data services to applications that would otherwise
+have dodgy connectivity.
+</li>
+
+<li><p><b>Application file format</b></p>
+
+<p>
+SQLite is often used as the on-disk file format
+for desktop applications such as version control systems,
+financial analysis tools, media cataloging and editing suites, CAD
+packages, record keeping programs, and so forth. The traditional
+File/Open operation calls sqlite3_open() to attach to the database
+file. Updates happen automatically as application content is revised
+so the File/Save menu option becomes superfluous. The File/Save_As
+menu option can be implemented using the <a href="backup.html">backup API</a>.
+</p>
+
+<p>There are many benefits to this approach, including improved
+performance, reduced cost and complexity, and
+improved reliability. See technical notes
+<a href="aff_short.html">"aff_short.html"</a> and
+<a href="appfileformat.html">"appfileformat.html"</a> and
+<a href="fasterthanfs.html">"fasterthanfs.html"</a> for more information.
+This use case is closely related to the
+<a href="#wireproto">data transfer format</a> and
+<a href="#container">data container</a> use cases below.
+</li>
+
+<a name="website"></a>
+
+<li><p><b>Websites</b></p>
+
+<p>SQLite works great as the database engine for most low to
+medium traffic websites (which is to say, most websites).
+The amount of web traffic that SQLite can handle depends
+on how heavily the website uses its database. Generally
+speaking, any site that gets fewer than 100K hits/day should work
+fine with SQLite.
+The 100K hits/day figure is a conservative estimate, not a
+hard upper bound.
+SQLite has been demonstrated to work with 10 times that amount
+of traffic.</p>
+
+<p>The SQLite website (<a href="https://www.sqlite.org/">https://www.sqlite.org/</a>) uses SQLite itself,
+of course, and as of this writing (2015) it handles about 400K to 500K
+HTTP requests per day, about 15-20% of which are dynamic pages touching
+the database. Dynamic content uses <a href="np1queryprob.html">about 200 SQL statements per webpage</a>.
+This setup runs on a single VM that shares a physical server with 23 others
+and yet still keeps the load average below 0.1 most of the time.
+
+<p>See also: <a href="https://news.ycombinator.com/item?id=33975635">Hacker New discussion from 2022-12-13</a>.
+</li>
+
+<li><p><b>Data analysis</b></p>
+
+<p>
+People who understand SQL can employ the
+<a href="cli.html">sqlite3 command-line shell</a> (or various third-party
+SQLite access programs) to analyze large
+datasets. Raw data can be imported from CSV files, then that
+data can be sliced and diced to generate a myriad of summary
+reports. More complex analysis can be done using simple scripts written
+in Tcl or Python (both of which come with SQLite built-in) or in R or
+other languages using readily available adaptors.
+Possible uses include website log analysis, sports
+statistics analysis, compilation of programming metrics, and
+analysis of experimental results. Many bioinformatics researchers
+use SQLite in this way.
+</p>
+
+<p>
+The same thing can be done with an enterprise client/server
+database, of course. The advantage of SQLite is
+that it is easier to install and use and the resulting database
+is a single file that can be written to a USB memory stick
+or emailed to a colleague.
+</p>
+</li>
+
+<li><p><b>Cache for enterprise data</b></p>
+
+<p>
+Many applications use SQLite as a cache of relevant content from
+an enterprise RDBMS.
+This reduces latency, since most queries now occur against the local
+cache and avoid a network round-trip. It also reduces the load
+on the network and on the central database server. And in many cases,
+it means that the client-side application can continue operating during
+network outages.
+</p>
+</li>
+
+<a name="serversidedb"></a>
+
+<li><p><b>Server-side database</b></p>
+
+<p>
+Systems designers
+report success using SQLite as a data store on server applications
+running in the datacenter, or in other words, using SQLite as the underlying
+storage engine for an application-specific database server.</p>
+
+<p>With this pattern, the overall system is still client/server:
+clients send requests to the server and get back replies over the network.
+But instead of sending generic SQL and getting back raw table content,
+the client requests and server responses are high-level and
+application-specific.
+The server translates requests into multiple SQL queries, gathers the
+results, does post-processing, filtering, and analysis, then constructs
+a high-level reply containing only the essential information.</p>
+
+<p>Developers report that SQLite is often faster than a client/server
+SQL database engine in this scenario.
+Database requests are serialized by the server, so concurrency is not
+an issue. Concurrency is also improved by "database sharding":
+using separate database files for different subdomains. For
+example, the server might have a separate SQLite database for each
+user, so that the server can handle hundreds or thousands of simultaneous
+connections, but each SQLite database is only used by one connection.</p>
+</li>
+
+<a name="wireproto"></a>
+
+<li><p><b>Data transfer format</b><p>
+
+<p>Because an SQLite database is a single compact file in a
+<a href="fileformat2.html">well-defined cross-platform format</a>, it is often used
+as a container for transferring content from one system to another.
+The sender gathers content into an SQLite database file, transfers
+that one file to the receiver, then the receiver uses SQL to extract
+the content as needed.
+
+<p>An SQLite database facilitates data transfer between systems even
+when the endpoints have different word sizes and/or byte orders.
+The data can be a complex mix of large binary blobs, text, and small
+numeric or boolean values. The data format can be easily extended
+by adding new tables and/or columns, without breaking legacy receivers.
+The SQL query language means that receivers are not required to parse
+the entire transfer all at once, but can instead query the
+received content as needed. The data format is "transparent" in the
+sense that it is easily decoded for human viewing using
+a variety of universally available, open-source tools, from multiple
+vendors.
+</li>
+
+<a name="container"></a>
+
+<li><p><b>File archive and/or data container</b></p>
+
+<p>
+The <a href="sqlar.html">SQLite Archive</a> idea shows how
+SQLite can be used as a substitute for ZIP archives or Tarballs.
+An archive of files stored in SQLite is only very slightly larger, and
+in some cases actually smaller, than the equivalent ZIP archive.
+And an SQLite archive features incremental and atomic updating
+and the ability to store much richer metadata.
+</p>
+
+<p><a href="https://www.fossil-scm.org/">Fossil</a> version 2.5 and later offers
+<a href="sqlar.html">SQLite Archive files</a> as a download format, in addition
+to traditional tarball and ZIP archive.
+The <a href="cli.html">sqlite3.exe command-line shell</a> version 3.22.0 and later will create,
+list, or unpack an SQL archiving using the
+<a href="cli.html#sqlar">.archive command</a>.</p>
+
+<p>
+SQLite is a good solution for any situation that requires bundling
+diverse content into a self-contained and self-describing package
+for shipment across a network.
+Content is encoded in a
+<a href="fileformat2.html">well-defined, cross-platform, and stable file format</a>.
+The encoding is efficient, and receivers can extract small subsets
+of the content without having to read and parse the entire file.
+</p>
+
+<p>SQL archives are useful as the distribution format for software
+or content updates that are broadcast to many clients. Variations
+on this idea are used, for example, to transmit TV programming guides
+to set-top boxes and to send over-the-air updates to vehicle navigation
+systems.</p>
+</li>
+
+<li><p><b>Replacement for <i>ad hoc</i> disk files</b></p>
+
+<p>Many programs use
+<a href="http://man.he.net/man3/fopen">fopen()</a>,
+<a href="http://man.he.net/man3/fread">fread()</a>, and
+<a href="http://man.he.net/man3/fwrite">fwrite()</a> to create and
+manage files of data in home-grown formats. SQLite works
+particularly well as a
+replacement for these <i>ad hoc</i> data files.
+Contrary to intuition, SQLite can be <a href="fasterthanfs.html">faster than the filesystem</a>
+for reading and writing content to disk.
+</li>
+
+<li><p><b>Internal or temporary databases</b></p>
+
+<p>
+For programs that have a lot of data that must be sifted and sorted
+in diverse ways, it is often easier and quicker to load the data into
+an in-memory SQLite database and use queries with joins and ORDER BY
+clauses to extract the data in the form and order needed rather than
+to try to code the same operations manually.
+Using an SQL database internally in this way also gives the program
+greater flexibility since new columns and indices can be added without
+having to recode every query.
+</p>
+</li>
+
+<li><p><b>Stand-in for an enterprise database during demos or testing</b></p>
+
+<p>
+Client applications typically use a generic database interface that allows
+connections to various SQL database engines. It makes good sense to
+include SQLite in the mix of supported databases and to statically
+link the SQLite engine in with the client. That way the client program
+can be used standalone with an SQLite data file for testing or for
+demonstrations.
+</p>
+</li>
+
+<li><p><b>Education and Training</b></p>
+
+<p>
+Because it is simple to setup and use (installation is trivial: just
+copy the <b>sqlite3</b> or <b>sqlite3.exe</b> executable to the target machine
+and run it) SQLite makes a good database engine for use in teaching SQL.
+Students can easily create as many databases as they like and can
+email databases to the instructor for comments or grading. For more
+advanced students who are interested in studying how an RDBMS is
+implemented, the modular and well-commented and documented SQLite code
+can serve as a good basis.
+</p>
+</li>
+
+<li><p><b>Experimental SQL language extensions</b></p>
+
+<p>The simple, modular design of SQLite makes it a good platform for
+prototyping new, experimental database language features or ideas.
+</p>
+</li>
+
+
+</ul>
+
+<h2>Situations Where A Client/Server RDBMS May Work Better</h2>
+
+<ul>
+<li><p><b>Client/Server Applications</b><p>
+
+<p>If there are many client programs sending SQL to the same
+database over a network, then use a client/server database
+engine instead of SQLite. SQLite will work over a network filesystem,
+but because of the latency associated with most network filesystems,
+performance will not be great. Also, file locking logic is buggy in
+many network filesystem implementations (on both Unix and Windows).
+If file locking does not work correctly,
+two or more clients might try to modify the
+same part of the same database at the same time, resulting in
+corruption. Because this problem results from bugs in
+the underlying filesystem implementation, there is nothing SQLite
+can do to prevent it.</p>
+
+<p>A good rule of thumb is to avoid using SQLite
+in situations where the same database will be accessed directly
+(without an intervening application server) and simultaneously
+from many computers over a network.</p>
+</li>
+
+<li><p><b>High-volume Websites</b></p>
+
+<p>SQLite will normally work fine as the database backend to a website.
+But if the website is write-intensive or is so busy that it requires
+multiple servers, then consider using an enterprise-class client/server
+database engine instead of SQLite.</p>
+</li>
+
+<li><p><b>Very large datasets</b></p>
+
+<p>An SQLite database is limited in size to 281 terabytes
+(2<sup><small>48</small></sup> bytes, 256 tibibytes).
+And even if it could handle larger databases, SQLite stores the entire
+database in a single disk file and many filesystems limit the maximum
+size of files to something less than this. So if you are contemplating
+databases of this magnitude, you would do well to consider using a
+client/server database engine that spreads its content across multiple
+disk files, and perhaps across multiple volumes.
+</p>
+</li>
+
+<li><p><b>High Concurrency</b></p>
+
+<p>
+SQLite supports an unlimited number of simultaneous readers, but it
+will only allow one writer at any instant in time.
+For many situations, this is not a problem. Writers queue up. Each application
+does its database work quickly and moves on, and no lock lasts for more
+than a few dozen milliseconds. But there are some applications that require
+more concurrency, and those applications may need to seek a different
+solution.
+</p>
+</li>
+
+</ul>
+
+<a name="dbcklst"></a>
+
+<h2>Checklist For Choosing The Right Database Engine</h2>
+
+<ol>
+<li><p><b>Is the data separated from the application by a network?
+ &rarr; choose client/server</b></p>
+
+<p>Relational database engines act as bandwidth-reducing data filters.
+So it is best to keep the database engine and the data on
+the same physical device so that the high-bandwidth engine-to-disk
+link does not have to traverse the network, only the lower-bandwidth
+application-to-engine link.
+
+<p>But SQLite is built into the application. So if the data is on a
+separate device from the application, it is required that the higher
+bandwidth engine-to-disk link be across the network. This works, but
+it is suboptimal. Hence, it is usually better to select a client/server
+database engine when the data is on a separate device from the
+application.
+
+<p><em>Nota Bene:</em>
+In this rule, "application" means the code that issues SQL statements.
+If the "application" is an <a href="whentouse.html#serversidedb">application server</a> and
+if the content resides on the same physical machine as the application server,
+then SQLite might still be appropriate even though the end user is
+another network hop away.</p>
+</li>
+
+<li><p><b>Many concurrent writers? &rarr; choose client/server</b></p>
+
+<p>If many threads and/or processes need to write the
+database at the same instant (and they cannot queue up and take turns)
+then it is best to select a database engine that supports that
+capability, which always means a client/server database engine.
+
+<p>SQLite only supports one writer at a time per database file.
+But in most cases, a write transaction only takes milliseconds and
+so multiple writers can simply take turns. SQLite will handle
+more write concurrency than many people suspect. Nevertheless,
+client/server database systems, because they have a long-running
+server process at hand to coordinate access, can usually handle
+far more write concurrency than SQLite ever will.
+</li>
+
+<li><p><b>Big data? &rarr; choose client/server</b></p>
+
+<p>If your data will grow to a size that you are uncomfortable
+or unable to fit into a single disk file, then you should select
+a solution other than SQLite. SQLite supports databases up to
+281 terabytes in size, assuming you can find a disk drive and filesystem
+that will support 281-terabyte files. Even so, when the size of the
+content looks like it might creep into the terabyte range, it would
+be good to consider a centralized client/server database.
+</li>
+
+<li><p><b>Otherwise &rarr; choose SQLite!</b></p>
+
+<p>For device-local storage with low writer concurrency and less than a
+terabyte of content, SQLite is almost always a better solution. SQLite
+is fast and reliable and it requires no configuration or maintenance.
+It keeps things simple. SQLite "just works".
+</li>
+</ol>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/whentouse.in?m=f79c2c426bc0e625f">2022-12-14 16:04:04</a> UTC </small></i></p>
+
diff --git a/www/whyc.html b/www/whyc.html
new file mode 100644
index 0000000..982468c
--- /dev/null
+++ b/www/whyc.html
@@ -0,0 +1,361 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Why Is SQLite Coded In C</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Why Is SQLite Coded In C
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#c_is_best">1. C Is Best</a></div>
+<div class="fancy-toc2"><a href="#performance">1.1. Performance</a></div>
+<div class="fancy-toc2"><a href="#compatibility">1.2. Compatibility</a></div>
+<div class="fancy-toc2"><a href="#low_dependency">1.3. Low-Dependency</a></div>
+<div class="fancy-toc2"><a href="#stability">1.4. Stability</a></div>
+<div class="fancy-toc1"><a href="#why_isn_t_sqlite_coded_in_an_object_oriented_language_">2. Why Isn't SQLite Coded In An Object-Oriented Language?</a></div>
+<div class="fancy-toc1"><a href="#why_isn_t_sqlite_coded_in_a_safe_language_">3. Why Isn't SQLite Coded In A "Safe" Language?</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="c_is_best"><span>1. </span>C Is Best</h1>
+
+<blockquote><table border="1"><tr><td>
+Note: Sections 2.0 and 3.0 of this article were added in response
+to comments on
+<a href="https://news.ycombinator.com/item?id=16585120">Hacker News</a> and
+<a href="https://www.reddit.com/r/programming/comments/84fzoc/why_is_sqlite_coded_in_c/">Reddit</a>.
+</td></tr></table></blockquote>
+
+<p>
+Since its inception on 2000-05-29, SQLite has been implemented in generic C.
+C was and continues to be the best language for implementing a software
+library like SQLite. There are no plans to recode SQLite in any other
+programming language at this time.
+
+</p><p>
+The reasons why C is the best language to implement SQLite include:
+
+
+</p><ul>
+<li> Performance
+</li><li> Compatibility
+</li><li> Low-dependency
+</li><li> Stability
+</li></ul>
+
+<h2 id="performance"><span>1.1. </span>Performance</h2>
+
+<p>An intensively used low-level library like SQLite needs to be fast.
+(And SQLite is fast, see <a href="intern-v-extern-blob.html">Internal Versus External BLOBs</a> and
+<a href="fasterthanfs.html">35% Faster Than The Filesystem</a> for example.)
+
+</p><p>C is a great language for writing fast code. C is sometimes
+described as "portable assembly language". It enables to developers
+to code as close to the underlying hardware as possible while still
+remaining portable across platforms.
+
+</p><p>Other programming languages sometimes claim to be "as fast as C".
+But no other language claims to be faster than C for general-purpose
+programming, because none are.
+
+</p><h2 id="compatibility"><span>1.2. </span>Compatibility</h2>
+
+<p>Nearly all systems have the ability to call libraries
+written in C. This is not true of other implementation languages.
+
+</p><p>So, for example, Android applications written in Java are able to
+invoke SQLite (through an adaptor). Maybe it would have been more
+convenient for Android if SQLite had been coded in Java as that would
+make the interface simpler. However, on iPhone applications are coded
+in Objective-C or Swift, neither of which have the ability to call
+libraries written in Java. Thus, SQLite would be unusable on iPhones
+had it been written in Java.
+
+</p><h2 id="low_dependency"><span>1.3. </span>Low-Dependency</h2>
+
+<p>Libraries written in C do not have a huge run-time dependency.
+In its minimum configuration, SQLite requires only the following
+routines from the standard C library:
+
+</p><center>
+<table border="0">
+<tr>
+<td valign="top">
+<ul>
+<li> memcmp()
+</li><li> memcpy()
+</li><li> memmove()
+</li><li> memset()
+</li></ul>
+</td>
+<td>&nbsp;&nbsp;&nbsp;</td>
+<td valign="top">
+<ul>
+<li> strcmp()
+</li><li> strlen()
+</li><li> strncmp()
+</li></ul>
+</td>
+</tr>
+</table>
+</center>
+
+<p>
+In a more complete build, SQLite also uses library routines like
+malloc() and free() and operating system interfaces for opening, reading,
+writing, and closing files. But even then, the number of dependencies
+is very small. Other "modern" language, in contrast, often require
+multi-megabyte runtimes loaded with thousands and thousands of interfaces.
+
+</p><h2 id="stability"><span>1.4. </span>Stability</h2>
+
+<p>
+The C language is old and boring.
+It is a well-known and well-understood language.
+This is exactly what one wants when developing a module like SQLite.
+Writing a small, fast, and reliable database engine is hard enough as it
+is without the implementation language changing out from under you with
+each update to the implementation language specification.
+
+</p><h1 id="why_isn_t_sqlite_coded_in_an_object_oriented_language_"><span>2. </span>Why Isn't SQLite Coded In An Object-Oriented Language?</h1>
+
+<p>
+Some programmers cannot imagine developing a complex system like
+SQLite in a language that is not "object oriented". So why is
+SQLite not coded in C++ or Java?
+
+</p><ol>
+<li><p>
+Libraries written in C++ or Java can generally only be used by
+applications written in the same language. It is difficult to
+get an application written in Haskell or Java to invoke a library
+written in C++. On the other hand, libraries written in C are
+callable from any programming language.
+
+</p></li><li><p>
+Object-Oriented is a design pattern, not a programming language.
+You can do object-oriented programming in any language you want,
+including assembly language. Some languages (ex: C++ or Java) make
+object-oriented easier. But you can still do object-oriented programming
+in languages like C.
+
+</p></li><li><p>
+Object-oriented is not the only valid design pattern.
+Many programmers have been taught to think purely in terms of
+objects. And, to be fair, objects are often a good way to
+decompose a problem. But objects are not the only way, and are
+not always the best way to decompose a problem. Sometimes good old
+procedural code is easier to write, easier to maintain and understand,
+and faster than object-oriented code.
+
+</p></li><li><p>
+When SQLite was first being developed, Java was a young and immature
+language. C++ was older, but was undergoing such growing pains that
+it was difficult to find any two C++ compilers that worked the same
+way. So C was definitely a better choice back when SQLite was first
+being developed. The situation is less stark now, but there is little
+to no benefit in recoding SQLite at this point.
+</p></li></ol>
+
+<h1 id="why_isn_t_sqlite_coded_in_a_safe_language_"><span>3. </span>Why Isn't SQLite Coded In A "Safe" Language?</h1>
+
+<p>
+There has lately been a lot of interest in "safe" programming languages
+like Rust or Go in which it is impossible, or is at least difficult, to make
+common programming errors like memory leaks or array overruns. So the
+question often arises as to why SQLite is not coded in a "safe" language.
+
+</p><ol>
+<li><p>
+None of the safe programming languages existed for the first 10 years
+of SQLite's existence. SQLite could be recoded in Go or Rust, but doing
+so would probably introduce far more bugs than would be fixed, and it
+seems also likely to result in slower code.
+
+</p></li><li><p>
+Safe languages insert additional machine branches to do things like
+verify that array accesses are in-bounds. In correct code, those
+branches are never taken. That means that the machine code cannot
+be 100% branch tested, which is an important component of SQLite's
+quality strategy.
+
+</p></li><li><p>
+Safe languages usually want to abort if they encounter an out-of-memory
+(OOM) situation. SQLite is designed to recover gracefully from an OOM.
+It is unclear how this could be accomplished in the current crop of
+safe languages.
+
+</p></li><li><p>
+All of the existing safe languages are new. The developers of SQLite
+applaud the efforts of computer language researchers in trying to
+develop languages that are easier to program safely. We encourage these
+efforts to continue. But we ourselves are more interested in old and
+boring languages when it comes to implementing SQLite.
+</p></li></ol>
+
+<p>
+All that said, it is possible that SQLite might
+one day be recoded in Rust. Recoding SQLite in Go is unlikely
+since Go hates assert(). But Rust is a possibility. Some
+preconditions that must occur before SQLite is recoded in Rust
+include:
+
+</p><p>
+</p><ol type="A">
+<li> Rust needs to mature a little more, stop changing so fast, and
+ move further toward being old and boring.
+</li><li> Rust needs to demonstrate that it can be used to create general-purpose
+ libraries that are callable from all other programming languages.
+</li><li> Rust needs to demonstrate that it can produce object code that
+ works on obscure embedded devices, including devices that lack
+ an operating system.
+</li><li> Rust needs to pick up the necessary tooling that enables one to
+ do 100% branch coverage testing of the compiled binaries.
+</li><li> Rust needs a mechanism to recover gracefully from OOM errors.
+</li><li> Rust needs to demonstrate that it can do the kinds of work that
+ C does in SQLite without a significant speed penalty.
+</li></ol>
+
+<p>
+If you are a "rustacean" and feel that Rust already meets the
+preconditions listed above, and that SQLite should be recoded in
+Rust, then you are welcomed and encouraged
+to contact the SQLite developers privately
+and argue your case.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/whyc.in?m=a3c9b502ed9d12ab7">2022-07-29 00:41:26</a> UTC </small></i></p>
+
diff --git a/www/whynotgit.html b/www/whynotgit.html
new file mode 100644
index 0000000..cc4773c
--- /dev/null
+++ b/www/whynotgit.html
@@ -0,0 +1,576 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Why SQLite Does Not Use Git</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Why SQLite Does Not Use Git
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc2"><a href="#edits">1.1. Edits</a></div>
+<div class="fancy-toc1"><a href="#a_few_reasons_why_sqlite_does_not_use_git">2. A Few Reasons Why SQLite Does Not Use Git</a></div>
+<div class="fancy-toc2"><a href="#git_does_not_provide_good_situational_awareness">2.1. Git does not provide good situational awareness</a></div>
+<div class="fancy-toc2"><a href="#git_makes_it_difficult_to_find_successors_descendents_of_a_check_in">2.2. Git makes it difficult to find successors (descendents)
+of a check-in</a></div>
+<div class="fancy-toc2"><a href="#the_mental_model_for_git_is_needlessly_complex">2.3. The mental model for Git is needlessly complex</a></div>
+<div class="fancy-toc2"><a href="#git_does_not_track_historical_branch_names">2.4. Git does not track historical branch names</a></div>
+<div class="fancy-toc2"><a href="#git_requires_more_administrative_support">2.5. Git requires more administrative support</a></div>
+<div class="fancy-toc2"><a href="#git_provides_a_poor_user_experience">2.6. Git provides a poor user experience</a></div>
+<div class="fancy-toc1"><a href="#a_git_user_s_guide_to_accessing_sqlite_source_code">3. A Git-User's Guide To Accessing SQLite Source Code</a></div>
+<div class="fancy-toc2"><a href="#the_official_github_mirror">3.1. The Official GitHub Mirror</a></div>
+<div class="fancy-toc2"><a href="#web_access">3.2. Web Access</a></div>
+<div class="fancy-toc2"><a href="#fossil_access">3.3. Fossil Access</a></div>
+<div class="fancy-toc2"><a href="#verifying_source_code_integrity">3.4. Verifying Source Code Integrity</a></div>
+<div class="fancy-toc1"><a href="#see_also">4. See Also</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>
+SQLite does not use the
+<a href="https://git-scm.org">Git</a> version control system.
+SQLite uses
+<a href="https://fossil-scm.org/">Fossil</a> instead, which is a
+version control system that was specifically designed
+and written to support SQLite.
+
+</p><p>
+People often wonder why SQLite does not use the
+<a href="https://git-scm.org">Git</a> version control system like everybody
+else.
+This article attempts to answer that question. Also,
+in <a href="#getthecode">section 3</a>,
+this article provides hints to Git users
+about how they can easily access the SQLite source code.
+
+</p><p>
+This article is <u>not</u> a comparison between Fossil
+and Git. See
+<a href="https://fossil-scm.org/fossil/doc/trunk/www/fossil-v-git.wiki">https://fossil-scm.org/fossil/doc/trunk/www/fossil-v-git.wiki</a>
+for one comparison of the two systems. Other third-party
+comparisons are available as well - use a search engine to find them.
+
+</p><p>
+This article is <u>not</u> advocating that you switch your projects
+away from Git. You can use whatever version control system you want.
+If you are perfectly happy with Git, then by all means keep using
+Git. But, if Git is not working well for you or you are wondering
+if it can be improved or if there is something better,
+then maybe try to understand the perspectives presented below.
+Use the insights thus obtained to find or write a different and
+better version control system, or to just make
+improvements to Git itself.
+
+</p><h2 id="edits"><span>1.1. </span>Edits</h2>
+
+<p>
+This article has been revised multiple times in an attempt
+to improve clarity, address concerns and misgivings,
+and to fix errors.
+The complete edit history for this document can be seen at
+<a href="https://sqlite.org/docsrc/finfo/pages/whynotgit.in">https://sqlite.org/docsrc/finfo/pages/whynotgit.in</a>.
+(Usage hint: Click on any two nodes of the graph for a diff.
+BTW, are there any Git web interfaces that offers a similar
+capability?)
+
+</p><h1 id="a_few_reasons_why_sqlite_does_not_use_git"><span>2. </span>A Few Reasons Why SQLite Does Not Use Git</h1>
+
+<h2 id="git_does_not_provide_good_situational_awareness"><span>2.1. </span>Git does not provide good situational awareness</h2>
+
+<p>
+When I want to see what has been happening on SQLite, I visit the
+<a href="https://sqlite.org/src/timeline">timeline</a> and in a single
+screen I see a summary of the latest changes, on all branches.
+In a few clicks, I can drill down as much detail as I
+want. I can even do this from a phone.
+
+</p><p>
+GitHub and GitLab offer nothing comparable. The closest I have
+found is the <a href="https://github.com/sqlite/sqlite/network">network</a>,
+which is slow to render (unless it is already cached), does not
+offer nearly as much details, and scarcely works at all on mobile.
+The <a href="https://github.com/sqlite/sqlite/commits/master">commits</a> view
+of GitHub provides more detail, renders quickly,
+and works on mobile, but only shows a single branch at a time,
+so I cannot easily know if I've seen all of the recent changes.
+And even if GitHub/GitLab did offer better interfaces, both are
+third-party services. They are not a core part of Git. Hence,
+using them introduces yet another dependency into the project.
+
+</p><p>
+I am told that Git users commonly install third-party graphical
+viewers for Git, many of which do a better job of showing recent
+activity on the project. That is great, but these are still
+more third-party applications that must be installed and
+managed separately. Many are platform-specific. (One of the
+better ones, <a href="https://gitup.co/">GitUp</a>, only works on Mac, for
+example.) All require that you first sync your local repository
+then bring up their graphical interface on your desktop. And
+even with all that, I still cannot see what I typically want to
+see without multiple clicks. Checking on project status from
+a phone while away from the office is not an option.
+
+</p><h2 id="git_makes_it_difficult_to_find_successors_descendents_of_a_check_in"><span>2.2. </span>Git makes it difficult to find successors (descendents)
+of a check-in</h2>
+
+<p>
+Git lets you look backwards in time, but not forwards.
+Given some historical check-in, you can see what came before,
+but it is challenging see what came next.
+
+</p><p>
+In contrast, Fossil offers helpful displays such as
+<a href="https://sqlite.org/src/timeline?df=major-release">https://sqlite.org/src/timeline?df=major-release</a>
+to show all check-ins that are derived from the most
+recent major release.
+
+</p><p>
+</p><ul>
+<li>
+<a href="https://sqlite.org/src/timeline?df=major-release">
+All SQLite check-ins derived from the most recent major release</a>
+</li></ul>
+
+
+<p>It is not impossible to find the descendents of a check-in
+in Git. It is merely difficult. For example,
+there is a
+<a href="https://stackoverflow.com/questions/27960605/find-all-the-direct-descendants-of-a-given-commit#27962018">stackoverflow page</a>
+showing the command sequence for finding the descendents of a check-in
+in unix:
+
+</p><div class="codeblock"><pre>git rev-list --all --parents | grep ".\{40\}.*<parent_sha1>.*" | awk '{print $1}'
+</parent_sha1>
+</pre></div>
+
+<p>
+But this is not the same thing. The command above gives
+a list of descendents without showing the branching structure, which
+is important for understanding what happened. And the command only works
+if you have a local clone of the repository; finding the descendents of
+a check-in is not something you can do with web interfaces such
+as GitHub or GitLab.
+
+</p><p>
+This is not really about just finding the descendents of a check-in
+from time to time. The fact that descendents are readily available in
+Fossil means that the information pervades the web pages provided by
+Fossil. One example: Every Fossil check-in information page
+(<a href="https://www.sqlite.org/src/info/ec7addc87f97bcff">example</a>) shows
+a small "Context" graph of the immediate predecessor and successors
+to that check-in. This helps the user maintain better situational
+awareness, and it provides useful capabilities, such as the ability
+click forward to the next check-in in sequence. Another example:
+Fossil easily shows the context around a specific check-in
+(<a href="https://www.sqlite.org/src/timeline?c=2018-03-16&n=10">example</a>)
+which again helps to promote situational awareness and a deeper
+understanding of what is happening in the code. There is a
+<a href="https://fossil-scm.org/fossil/doc/trunk/www/webpage-ex.md">whole page of additional examples</a>
+in the <a href="https://fossil-scm.org/fossil">Fossil documentation</a>.
+
+</p><p>
+All of the above is theoretically possible with Git, given the right extensions
+and tools and using the right commands. But it is not easy to do,
+and so it rarely gets done. Consequently, developers have less awareness
+of what is happening in the code.
+
+</p><h2 id="the_mental_model_for_git_is_needlessly_complex"><span>2.3. </span>The mental model for Git is needlessly complex</h2>
+
+<p>
+The complexity of Git
+distracts attention from the software under development. A user of Git
+needs to keep all of the following in mind:
+</p><ol type="a">
+<li> The working directory
+</li><li> The "index" or staging area
+</li><li> The local head
+</li><li> The local copy of the remote head
+</li><li> The actual remote head
+</li></ol>
+<p>
+Git has commands (and/or options on commands) for moving and
+comparing content between all of these locations.
+
+</p><p>In contrast,
+Fossil users only need to think about their working directory and
+the check-in they are working on. That is 60% less distraction.
+Every developer has a finite number of brain-cycles. Fossil
+requires fewer brain-cycles to operate, thus freeing up
+intellectual resources to focus on the software under development.
+
+</p><p>One user of both Git and Fossil
+<a href="https://news.ycombinator.com/item?id=16806955">writes in HN</a>:
+
+</p><blockquote><i>
+Fossil gives me peace of mind that I have everything ... synced to
+the server with a single command....
+I never get this peace of mind with git.
+</i></blockquote>
+
+<h2 id="git_does_not_track_historical_branch_names"><span>2.4. </span>Git does not track historical branch names</h2>
+
+<p>
+Git keeps the complete DAG of the check-in sequence. But branch
+tags are local information that is not synced and not retained
+once a branch closes.
+This makes review of historical
+branches tedious.
+
+</p><p>
+As an example, suppose a customer asks you:
+"What ever became of that 'prefer-coroutine-sort-subquery' branch
+from two years ago?"
+You might try to answer by consulting the history in
+your version control system, thusly:
+
+</p><ul>
+<li><b>GitHub:</b> <a href="https://github.com/sqlite/sqlite/commits/prefer-coroutine-sort-subquery">https://github.com/sqlite/sqlite/commits/prefer-coroutine-sort-subquery</a>
+</li><li><b>Fossil:</b> <a href="https://sqlite.org/src/timeline?r=prefer-coroutine-sort-subquery">https://sqlite.org/src/timeline?r=prefer-coroutine-sort-subquery</a>
+</li></ul>
+
+<p>
+The Fossil view clearly shows that the branch was eventually merged back into
+trunk. It shows where the branch started, and it shows two occasions where changes
+on trunk were merged into the branch. GitHub shows none of this. In fact, the
+GitHub display is mostly useless in trying to figure out what happened.
+
+</p><p>
+Many readers have recommended various third-party GUIs for Git that
+might do a better job of showing historical development activity. Maybe
+some of them do work better than native Git and/or GitHub, though they
+will all be hampered by the fact that Git does not preserve historical
+branch names across syncs. And even if those other tools are better,
+the fact that it is necessary to go to a third-party tool to get the information
+desired does not speak well of the core system.
+
+</p><h2 id="git_requires_more_administrative_support"><span>2.5. </span>Git requires more administrative support</h2>
+
+<p>
+Git is complex software.
+One needs an installer of some kind to put Git on a developer
+workstation, or to upgrade to a newer version of Git.
+Standing up a Git server is non-trivial, and so most developers
+use a third-party service such as GitHub or GitLab,
+and thus introduce additional dependencies.
+
+</p><p>
+In contrast, Fossil is a single standalone binary which is
+installed by putting it on $PATH. That one binary contains all
+the functionality of core Git and also GitHub and/or GitLab. It
+manages a community server with wiki, bug tracking, and forums,
+provides packaged downloads for consumers, login managements,
+and so forth, with no extra software required. Standing up a
+community server for Fossil takes minutes. And Fossil is efficient.
+A Fossil server will run fine on a $5/month VPS or a Raspberry Pi,
+whereas GitLab and similar require beefier hardware.
+
+</p><p>
+Less administration means that programmers spend more time working
+on the software (SQLite in this case) and less time fussing with
+the version control system.
+
+</p><h2 id="git_provides_a_poor_user_experience"><span>2.6. </span>Git provides a poor user experience</h2>
+
+<p>The following <a href="https://xkcd.com/1597/">https://xkcd.com/1597/</a> cartoon is an
+exaggeration, yet hits close to home:
+
+</p><p>
+<img src="xkcd-git.gif">
+
+</p><p>Let's be real. Few people dispute that Git provides
+a suboptimal user experience. A lot of
+the underlying implementation shows through into the user
+interface. The interface is so bad that there is even a
+parody site that generates
+<a href="https://git-man-page-generator.lokaltog.net/">fake git man pages</a>.
+
+</p><p>Designing software is hard. It takes a lot of focus.
+A good version control system should provide the developer with
+assistance, not frustration. Git has gotten better in this
+regard over the past decade, but it still has a long way to go.
+
+<a name="getthecode"></a>
+</p><h1 id="a_git_user_s_guide_to_accessing_sqlite_source_code"><span>3. </span>A Git-User's Guide To Accessing SQLite Source Code</h1>
+
+<p>
+If you are a devoted Git user, you can still easily access SQLite.
+This section gives some hints on how to do so.
+
+</p><h2 id="the_official_github_mirror"><span>3.1. </span>The Official GitHub Mirror</h2>
+
+<p>
+As of 2019-03-20, there is now an
+<a href="https://github.com/sqlite/sqlite">official Git mirror</a> of the
+SQLite sources on GitHub.
+
+</p><p>The mirror is an incremental export of the
+<a href="https://sqlite.org/src/timeline">canonical Fossil repository</a> for
+SQLite. A cron-job updates the GitHub repository once an hour.
+This is a one-way, read-only code mirror. No pull requests or
+changes are accepted via GitHub. The GitHub repository merely copies
+the content from the Fossil repository. All changes are input via
+Fossil.
+
+</p><p>
+The hashes that identify check-ins and files on the Git mirror are
+different from the hashes in Fossil. There are many reasons for
+this, chief among them that Fossil uses a SHA3-256 hash whereas
+Git uses a SHA1 hash. During export, the original Fossil hash for
+each check-in is added as a footer to check-in comments. To avoid
+confusion, always use the original Fossil hash, not the Git hash,
+when referring to SQLite check-ins.
+
+</p><h2 id="web_access"><span>3.2. </span>Web Access</h2>
+
+<p>
+The <a href="https://sqlite.org/src/timeline">SQLite Fossil Repository</a> contains links
+for downloading a Tarball, ZIP Archive, or <a href="sqlar.html">SQLite Archive</a> for any
+historical version of SQLite. The URLs for these downloads are
+simple and can be incorporated easily into automated tools. The format is:
+
+</p><blockquote>
+<tt>https://sqlite.org/src/tarball/</tt><i>VERSION</i><tt>/sqlite.tar.gz</tt>
+</blockquote>
+
+<p>
+Simply replace <i>VERSION</i> with some description of the version to be
+downloaded. The <i>VERSION</i> can be a prefix of the cryptographic hash
+name of a specific check-in, or the name of a branch (in which case the
+most recent version of the branch is fetched) or a tag for a specific
+check-in like "version-3.23.1":
+
+</p><blockquote>
+<tt>https://sqlite.org/src/tarball/version-3.23.1/sqlite.tar.gz</tt>
+</blockquote>
+
+
+<p>To get the latest release, use "release"
+for <i>VERSION</i>, like this:
+
+</p><blockquote>
+<tt>https://sqlite.org/src/tarball/release/sqlite.tar.gz</tt>
+</blockquote>
+
+<p>
+To get the latest trunk check-in, us "trunk" for <i>VERSION</i>:
+
+</p><blockquote>
+<tt>https://sqlite.org/src/tarball/trunk/sqlite.tar.gz</tt>
+</blockquote>
+
+<p>
+And so forth.
+For ZIP archives and SQLite Archives, simply change the "/tarball/" element
+into either "/zip/" or "/sqlar/", and maybe also change the name of the
+download file to have a ".zip" or ".sqlar" suffix.
+
+</p><h2 id="fossil_access"><span>3.3. </span>Fossil Access</h2>
+
+<p>
+Fossil is easy to install and use. Here are the steps for unix.
+(Windows is similar.)
+
+</p><ol>
+<li>
+Download the self-contained Fossil executable from
+<a href="https://fossil-scm.org/fossil/uv/download.html">https://fossil-scm.org/fossil/uv/download.html</a> and put the executable
+somewhere on your $PATH.
+</li><li><tt>mkdir ~/fossils</tt>
+</li><li><tt>fossil clone https://sqlite.org/src ~/fossils/sqlite.fossil</tt>
+</li><li><tt>mkdir ~/sqlite; cd ~/sqlite</tt>
+</li><li><tt>fossil open ~/fossils/sqlite.fossil</tt>
+</li></ol>
+
+<p>
+At this point you are ready to type "<tt>./configure; make</tt>"
+(or on Windows with MSVC, "<tt>nmake /f Makefile.msc</tt>").
+
+</p><p>
+To change your checkout to a different version of Fossil use
+the "update" command:
+
+</p><blockquote>
+<tt>fossil update </tt><i>VERSION</i>
+</blockquote>
+
+<p>
+Use "trunk" for <i>VERSION</i> to get the latest trunk version of SQLite.
+Or use a prefix of a cryptographic hash name, or the name of some branch
+or tag. See
+<a href="https://fossil-scm.org/fossil/doc/trunk/www/checkin_names.wiki">https://fossil-scm.org/fossil/doc/trunk/www/checkin_names.wiki</a> for more
+suggestions on what names can be used for <i>VERSION</i>.
+
+</p><p>
+Use the "<tt>fossil ui</tt>" command from within the ~/sqlite checkout to
+bring up a local copy of the website.
+
+</p><p>
+Additional documentation on Fossil can be found at
+<a href="https://fossil-scm.org/fossil/doc/trunk/www/permutedindex.html">https://fossil-scm.org/fossil/doc/trunk/www/permutedindex.html</a>
+
+</p><p>
+Do not be afraid to explore and experiment.
+Without a log-in you won't be able to
+push back any changes you make, so you cannot damage the project.
+
+</p><h2 id="verifying_source_code_integrity"><span>3.4. </span>Verifying Source Code Integrity</h2>
+
+<p>
+If you need to verify that the SQLite source code that you have is
+authentic and has not been modified in any way (perhaps by an adversary)
+that can be done using a few simple command-line tools. At the root
+of the SQLite source tree is a file named "manifest". The manifest
+file contains the name of every other file in the source tree together
+with either a SHA1 or SHA3-256 hash for that file. (SHA1 is used for
+older files and SHA3-256 for newer files.) You can write a
+script to extract these hashes and verify them against the source code
+files. The hash name for the check-in is just the SHA3-256 hash of the
+"manifest" file itself, possibly with the last line omitted if the
+last line begins with "# Remove this line..."
+
+</p><h1 id="see_also"><span>4. </span>See Also</h1>
+
+<p>Other pages that talk about Fossil and Git include:
+</p><ul>
+<li><p><a href="https://fossil-scm.org/fossil/doc/trunk/www/fossil-v-git.wiki">Fossil vs. Git</a>
+</p></li><li><p><a href="https://www.fossil-scm.org/fossil/doc/trunk/www/quotes.wiki">What others say about Fossil and Git</a>
+</p></li></ul>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/whynotgit.in?m=3448c563bf7702abf">2021-12-21 16:55:31</a> UTC </small></i></p>
+
diff --git a/www/windowfunctions.html b/www/windowfunctions.html
new file mode 100644
index 0000000..a6a0826
--- /dev/null
+++ b/www/windowfunctions.html
@@ -0,0 +1,7628 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Window Functions</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Window Functions
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction_to_window_functions">1. Introduction to Window Functions</a></div>
+<div class="fancy-toc1"><a href="#aggregate_window_functions">2. Aggregate Window Functions</a></div>
+<div class="fancy-toc2"><a href="#the_partition_by_clause">2.1. The PARTITION BY Clause</a></div>
+<div class="fancy-toc2"><a href="#frame_specifications">2.2. Frame Specifications</a></div>
+<div class="fancy-toc3"><a href="#frame_type">2.2.1. Frame Type</a></div>
+<div class="fancy-toc3"><a href="#frame_boundaries">2.2.2. Frame Boundaries</a></div>
+<div class="fancy-toc3"><a href="#the_exclude_clause">2.2.3. The EXCLUDE Clause</a></div>
+<div class="fancy-toc2"><a href="#the_filter_clause">2.3. The FILTER Clause</a></div>
+<div class="fancy-toc1"><a href="#built_in_window_functions">3. Built-in Window Functions</a></div>
+<div class="fancy-toc1"><a href="#window_chaining">4. Window Chaining</a></div>
+<div class="fancy-toc1"><a href="#user_defined_aggregate_window_functions">5. User-Defined Aggregate Window Functions</a></div>
+<div class="fancy-toc1"><a href="#history">6. History</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+
+<h1 id="introduction_to_window_functions"><span>1. </span>Introduction to Window Functions</h1>
+
+<p>A window function is an SQL function where the input
+values are taken from
+a "window" of one or more rows in the results set of a SELECT statement.
+
+</p><p>Window functions are distinguished from other SQL functions by the
+presence of an OVER clause. If a function has an OVER clause,
+then it is a window function. If it lacks an OVER clause, then it is an
+ordinary aggregate or scalar function. Window functions might also
+have a FILTER clause in between the function and the OVER clause.
+
+</p><p>The syntax for a window function is like this:
+
+
+<p><b><a href="syntax/window-function-invocation.html">window-function-invocation:</a></b>
+<button id='x2355' onclick='hideorshow("x2355","x2356")'>hide</button></p>
+ <div id='x2356' class='imgcontainer'>
+ <div style="max-width:870px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 870.446 132.84">
+<circle cx="5" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,55 20,59 20,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,55L26,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,70L135,70A15 15 0 0 0 150 55A15 15 0 0 0 135 39L47,39A15 15 0 0 0 32 55A15 15 0 0 0 47 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="91" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-func</text>
+<polygon points="167,55 156,59 156,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,55L161,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M182,70A15 15 0 0 0 197 55A15 15 0 0 0 182 39A15 15 0 0 0 167 55A15 15 0 0 0 182 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="182" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="251,55 240,59 240,50" style="fill:rgb(0,0,0)"/>
+<path d="M197,55L246,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M251,70L300,70L300,39L251,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="354,55 343,59 343,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L349,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M370,70A15 15 0 0 0 385 55A15 15 0 0 0 370 39A15 15 0 0 0 354 55A15 15 0 0 0 370 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="370" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="426,85 415,89 415,81" style="fill:rgb(0,0,0)"/>
+<path d="M385,55 L 392,55 Q 400,55 400,70 L 400,70 Q 400,85 410,85 L 420,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M426,100L538,100L538,70L426,70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="85" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="580,55 568,59 568,50" style="fill:rgb(0,0,0)"/>
+<path d="M538,85 L 546,85 Q 553,85 553,70 L 553,70 Q 553,55 564,55 L 574,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,70L626,70A15 15 0 0 0 641 55A15 15 0 0 0 626 39L595,39A15 15 0 0 0 580 55A15 15 0 0 0 595 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="610" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="682,92 671,97 671,88" style="fill:rgb(0,0,0)"/>
+<path d="M641,55 L 648,55 Q 656,55 656,70 L 656,77 Q 656,92 666,92 L 677,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M697,108L794,108A15 15 0 0 0 810 92L810,92A15 15 0 0 0 794 77L697,77A15 15 0 0 0 682 92L682,92A15 15 0 0 0 697 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="746" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="861,55 849,59 849,50" style="fill:rgb(0,0,0)"/>
+<path d="M810,92 L 817,92 Q 825,92 825,77 L 825,70 Q 825,55 840,55 L 840,55 L 855,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="864" cy="55" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M385,55L568,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="682,55 671,59 671,50" style="fill:rgb(0,0,0)"/>
+<path d="M641,55L677,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M682,70L801,70L801,39L682,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="742" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M801,55L849,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,32A15 15 0 0 0 291 17L291,17A15 15 0 0 0 276 2A15 15 0 0 0 261 17L261,17A15 15 0 0 0 276 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="291,17 303,12 303,21" style="fill:rgb(0,0,0)"/>
+<path d="M300,55 L 308,55 Q 315,55 315,40 L 315,32 Q 315,17 306,17 L 297,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M261,17 L 240,17 Q 225,17 225,32 L 225,40 Q 225,55 232,55 L 240,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="276,85 264,89 264,81" style="fill:rgb(0,0,0)"/>
+<path d="M197,55 L 205,55 Q 212,55 212,70 L 212,70 Q 212,85 227,85 L 255,85 L 270,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,85 L 313,85 Q 328,85 328,70 L 328,70 Q 328,55 335,55 L 343,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130A15 15 0 0 0 291 115L291,115A15 15 0 0 0 276 100A15 15 0 0 0 261 115L261,115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M197,55 L 205,55 Q 212,55 212,70 L 212,100 Q 212,115 227,115 L 240,115 L 255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,115 L 313,115 Q 328,115 328,100 L 328,70 Q 328,55 335,55 L 343,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x2357' onclick='hideorshow("x2357","x2358")'>show</button></p>
+ <div id='x2358' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x2359' onclick='hideorshow("x2359","x2360")'>show</button></p>
+ <div id='x2360' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x2361' onclick='hideorshow("x2361","x2362")'>show</button></p>
+ <div id='x2362' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2363' onclick='hideorshow("x2363","x2364")'>hide</button></p>
+ <div id='x2364' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2365' onclick='hideorshow("x2365","x2366")'>show</button></p>
+ <div id='x2366' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x2367' onclick='hideorshow("x2367","x2368")'>show</button></p>
+ <div id='x2368' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2369' onclick='hideorshow("x2369","x2370")'>show</button></p>
+ <div id='x2370' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x2371' onclick='hideorshow("x2371","x2372")'>show</button></p>
+ <div id='x2372' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2373' onclick='hideorshow("x2373","x2374")'>show</button></p>
+ <div id='x2374' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2375' onclick='hideorshow("x2375","x2376")'>show</button></p>
+ <div id='x2376' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2377' onclick='hideorshow("x2377","x2378")'>show</button></p>
+ <div id='x2378' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2379' onclick='hideorshow("x2379","x2380")'>show</button></p>
+ <div id='x2380' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2381' onclick='hideorshow("x2381","x2382")'>show</button></p>
+ <div id='x2382' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2383' onclick='hideorshow("x2383","x2384")'>show</button></p>
+ <div id='x2384' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2385' onclick='hideorshow("x2385","x2386")'>show</button></p>
+ <div id='x2386' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x2387' onclick='hideorshow("x2387","x2388")'>show</button></p>
+ <div id='x2388' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x2389' onclick='hideorshow("x2389","x2390")'>show</button></p>
+ <div id='x2390' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x2391' onclick='hideorshow("x2391","x2392")'>hide</button></p>
+ <div id='x2392' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2393' onclick='hideorshow("x2393","x2394")'>hide</button></p>
+ <div id='x2394' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2395' onclick='hideorshow("x2395","x2396")'>hide</button></p>
+ <div id='x2396' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2397' onclick='hideorshow("x2397","x2398")'>show</button></p>
+ <div id='x2398' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+
+
+
+</p><p>Unlike ordinary functions, window functions
+cannot use the DISTINCT keyword.
+Also, Window functions may only appear in the result set and in the
+ORDER BY clause of a SELECT statement.
+
+</p><p>Window functions come in two varieties:
+<a href="windowfunctions.html#aggwinfunc">aggregate window functions</a> and
+<a href="windowfunctions.html#builtins">built-in window functions</a>. Every aggregate window function
+can also work as a ordinary aggregate function, simply by omitting
+the OVER and FILTER clauses. Furthermore, all of the built-in
+<a href="lang_aggfunc.html">aggregate functions</a> of SQLite can be used as an
+aggregate window function by adding an appropriate OVER clause.
+Applications can register new aggregate window functions using
+the <a href="c3ref/create_function.html">sqlite3_create_window_function()</a> interface.
+The built-in window functions, however, require special-case
+handling in the query planner and hence new window functions
+that exhibit the exceptional properties found in the built-in
+window functions cannot be added by the application.
+
+</p><p>Here is an example using the built-in row_number()
+window function:
+
+</p><div class="codeblock"><pre>CREATE TABLE t0(x INTEGER PRIMARY KEY, y TEXT);
+INSERT INTO t0 VALUES (1, 'aaa'), (2, 'ccc'), (3, 'bbb');
+
+<i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- x | y | row_number</i>
+-----------------------
+<i>-- 1 | aaa | 1 </i>
+<i>-- 2 | ccc | 3 </i>
+<i>-- 3 | bbb | 2 </i>
+<i>-- </i>
+SELECT x, y, row_number() OVER (ORDER BY y) AS row_number FROM t0 ORDER BY x;
+</pre></div>
+
+<p>
+The row_number() window function
+assigns consecutive integers to each
+row in order of the "ORDER BY" clause within the
+<span class='yynonterm'>window-defn</span> (in this case "ORDER BY y"). Note that
+this does not affect the order in which results are returned from
+the overall query. The order of the final output is
+still governed by the ORDER BY clause attached to the SELECT
+statement (in this case "ORDER BY x").
+
+</p><p>Named <span class='yynonterm'>window-defn</span> clauses may also be added to a SELECT
+statement using a WINDOW clause and then referred to by name within window
+function invocations. For example, the following SELECT statement contains
+two named <span class='yynonterm'>window-defs</span> clauses, "win1" and "win2":
+
+</p><div class="codeblock"><pre>SELECT x, y, row_number() OVER <b>win1</b>, rank() OVER <b>win2</b>
+FROM t0
+WINDOW <b>win1</b> AS (ORDER BY y RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
+ <b>win2</b> AS (PARTITION BY y ORDER BY x)
+ORDER BY x;
+</pre></div>
+
+<p>The WINDOW clause, when one is present, comes after any HAVING clause and
+before any ORDER BY.
+
+<a name="aggwinfunc"></a>
+
+</p><h1 id="aggregate_window_functions"><span>2. </span>Aggregate Window Functions</h1>
+
+<p> The examples in this section all assume that the database is populated as
+follows:
+
+</p><div class="codeblock"><pre>CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c);
+INSERT INTO t1 VALUES (1, 'A', 'one' ),
+ (2, 'B', 'two' ),
+ (3, 'C', 'three'),
+ (4, 'D', 'one' ),
+ (5, 'E', 'two' ),
+ (6, 'F', 'three'),
+ (7, 'G', 'one' );
+</pre></div>
+
+<p> An aggregate window function is similar to an
+<a href="lang_aggfunc.html">ordinary aggregate function</a>, except
+adding it to a query does not change the number of rows returned. Instead,
+for each row the result of the aggregate window function is as if the
+corresponding aggregate were run over all rows in the "window frame"
+specified by the OVER clause.
+
+
+</p><div class="codeblock"><pre><i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- a | b | group_concat</i>
+-------------------------
+<i>-- 1 | A | A.B </i>
+<i>-- 2 | B | A.B.C </i>
+<i>-- 3 | C | B.C.D </i>
+<i>-- 4 | D | C.D.E </i>
+<i>-- 5 | E | D.E.F </i>
+<i>-- 6 | F | E.F.G </i>
+<i>-- 7 | G | F.G </i>
+<i>-- </i>
+SELECT a, b, group_concat(b, '.') OVER (
+ ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
+) AS group_concat FROM t1;
+</pre></div>
+
+<p> In the example above, the window frame consists of all rows between the
+previous row ("1 PRECEDING") and the following row ("1 FOLLOWING"), inclusive,
+where rows are sorted according to the ORDER BY clause in the
+<span class='yynonterm'>window-defn</span> (in this case "ORDER BY a").
+For example, the frame for the row with (a=3) consists of rows (2, 'B', 'two'),
+(3, 'C', 'three') and (4, 'D', 'one'). The result of group_concat(b, '.')
+for that row is therefore 'B.C.D'.
+
+</p><p> All of SQLite's <a href="lang_aggfunc.html">aggregate functions</a> may
+be used as aggregate window functions. It is also possible to
+<a href="windowfunctions.html#udfwinfunc">create user-defined aggregate window functions</a>.
+
+
+<a name="ptxn"></a>
+
+</p><h2 id="the_partition_by_clause"><span>2.1. </span>The PARTITION BY Clause</h2>
+
+<p> For the purpose of computing window functions, the result set
+of a query is divided into one or more "partitions". A partition consists
+of all rows that have the same value for all terms of the PARTITION BY clause
+in the <span class='yynonterm'>window-defn</span>. If there is no PARTITION BY clause,
+then the entire result set of the query is a single partition.
+Window-function processing is performed separately for each partition.
+
+</p><p> For example:
+
+</p><div class="codeblock"><pre><i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- c | a | b | group_concat</i>
+---------------------------------
+<i>-- one | 1 | A | A.D.G </i>
+<i>-- one | 4 | D | D.G </i>
+<i>-- one | 7 | G | G </i>
+<i>-- three | 3 | C | C.F </i>
+<i>-- three | 6 | F | F </i>
+<i>-- two | 2 | B | B.E </i>
+<i>-- two | 5 | E | E </i>
+<i>-- </i>
+SELECT c, a, b, group_concat(b, '.') OVER (
+ PARTITION BY c ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
+) AS group_concat
+FROM t1 ORDER BY c, a;
+</pre></div>
+
+<p> In the query above, the "PARTITION BY c" clause breaks the
+result set up into three partitions. The first partition has
+three rows with c=='one'. The second partition has two rows with
+c=='three' and the third partition has two rows with c=='two'.
+
+</p><p> In the example above, all the rows for each partition are
+grouped together in the final output. This is because the PARTITION BY
+clause is a prefix of the ORDER BY clause on the overall query.
+But that does not have
+to be the case. A partition can be composed of rows scattered
+about haphazardly within the result set. For example:
+
+</p><div class="codeblock"><pre><i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- c | a | b | group_concat</i>
+---------------------------------
+<i>-- one | 1 | A | A.D.G </i>
+<i>-- two | 2 | B | B.E </i>
+<i>-- three | 3 | C | C.F </i>
+<i>-- one | 4 | D | D.G </i>
+<i>-- two | 5 | E | E </i>
+<i>-- three | 6 | F | F </i>
+<i>-- one | 7 | G | G </i>
+<i>-- </i>
+SELECT c, a, b, group_concat(b, '.') OVER (
+ PARTITION BY c ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
+) AS group_concat
+FROM t1 ORDER BY a;
+</pre></div>
+
+
+<a name="framespec"></a>
+
+<h2 id="frame_specifications"><span>2.2. </span>Frame Specifications</h2>
+
+<p> The <span class='yynonterm'>frame-spec</span> determines which output rows are
+read by an aggregate window function. The
+<span class='yynonterm'>frame-spec</span> consists of four parts:
+
+</p><ul>
+ <li> A frame type - either ROWS, RANGE or GROUPS,
+ </li><li> A starting frame boundary,
+ </li><li> An ending frame boundary,
+ </li><li> An EXCLUDE clause.
+</li></ul>
+
+<p> Here are the syntax details:
+
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2399' onclick='hideorshow("x2399","x2400")'>hide</button></p>
+ <div id='x2400' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x2401' onclick='hideorshow("x2401","x2402")'>show</button></p>
+ <div id='x2402' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x2403' onclick='hideorshow("x2403","x2404")'>show</button></p>
+ <div id='x2404' style='display:none;' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x2405' onclick='hideorshow("x2405","x2406")'>show</button></p>
+ <div id='x2406' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x2407' onclick='hideorshow("x2407","x2408")'>show</button></p>
+ <div id='x2408' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2409' onclick='hideorshow("x2409","x2410")'>show</button></p>
+ <div id='x2410' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x2411' onclick='hideorshow("x2411","x2412")'>show</button></p>
+ <div id='x2412' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2413' onclick='hideorshow("x2413","x2414")'>show</button></p>
+ <div id='x2414' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x2415' onclick='hideorshow("x2415","x2416")'>show</button></p>
+ <div id='x2416' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2417' onclick='hideorshow("x2417","x2418")'>show</button></p>
+ <div id='x2418' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2419' onclick='hideorshow("x2419","x2420")'>show</button></p>
+ <div id='x2420' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2421' onclick='hideorshow("x2421","x2422")'>show</button></p>
+ <div id='x2422' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2423' onclick='hideorshow("x2423","x2424")'>show</button></p>
+ <div id='x2424' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2425' onclick='hideorshow("x2425","x2426")'>show</button></p>
+ <div id='x2426' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2427' onclick='hideorshow("x2427","x2428")'>show</button></p>
+ <div id='x2428' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2429' onclick='hideorshow("x2429","x2430")'>show</button></p>
+ <div id='x2430' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2431' onclick='hideorshow("x2431","x2432")'>show</button></p>
+ <div id='x2432' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x2433' onclick='hideorshow("x2433","x2434")'>show</button></p>
+ <div id='x2434' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x2435' onclick='hideorshow("x2435","x2436")'>show</button></p>
+ <div id='x2436' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+
+</p><p>The ending frame boundary can be omitted (if the
+BETWEEN and AND keywords that surround the starting frame boundary
+are also omitted),
+in which case the ending frame boundary defaults to CURRENT ROW.
+
+</p><p> If the frame type is RANGE or GROUPS, then rows with the same values for
+all ORDER BY expressions are considered "peers". Or, if there are no ORDER BY
+terms, all rows are peers. Peers are always within the same frame.
+
+</p><p>The default <span class='yynonterm'>frame-spec</span> is:
+
+</p><div class="codeblock"><pre>RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS
+</pre></div>
+
+<p>The default means that aggregate window functions read all
+rows from the beginning of the partition up to and including the
+current row and its peers. This implies that rows that have the same values for
+all ORDER BY expressions will also have the same value for the result of the
+window function (as the window frame is the same). For example:
+
+</p><div class="codeblock"><pre><i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- a | b | c | group_concat</i>
+-----------------------------
+<i>-- 1 | A | one | A.D.G </i>
+<i>-- 2 | B | two | A.D.G.C.F.B.E</i>
+<i>-- 3 | C | three | A.D.G.C.F </i>
+<i>-- 4 | D | one | A.D.G </i>
+<i>-- 5 | E | two | A.D.G.C.F.B.E</i>
+<i>-- 6 | F | three | A.D.G.C.F </i>
+<i>-- 7 | G | one | A.D.G </i>
+<i>-- </i>
+SELECT a, b, c,
+ group_concat(b, '.') OVER (ORDER BY c) AS group_concat
+FROM t1 ORDER BY a;
+</pre></div>
+
+<a name="frametype"></a>
+
+<h3 id="frame_type"><span>2.2.1. </span>Frame Type</h3>
+
+<p>
+There are three frame types: ROWS, GROUPS, and RANGE.
+The frame type determines how the starting and ending boundaries
+of the frame are measured.
+
+</p><ul>
+<li><p><b>ROWS</b>:
+The ROWS frame type means that the starting and ending boundaries
+for the frame are determined by counting individual rows relative
+to the current row.
+
+<a name="grouptype"></a>
+
+</p></li><li><p><b>GROUPS</b>:
+The GROUPS frame type means that the starting and ending boundaries
+are determine by counting "groups" relative to the current group.
+A "group" is a set of rows that all have equivalent values for all
+all terms of the window ORDER BY clause. ("Equivalent" means that
+the <a href="lang_expr.html#isisnot">IS operator</a> is true when comparing the two values.)
+In other words, a group consists of all peers of a row.
+
+<a name="rangetype"></a>
+
+</p></li><li><p><b>RANGE</b>:
+The RANGE frame type requires that the ORDER BY clause of the
+window have exactly one term. Call that term "X". With the
+RANGE frame type, the elements of the frame are determined by
+computing the value of expression X for all rows in the partition
+and framing those rows for which the value of X is within a certain
+range of the value of X for the current row. See the description
+in the "<a href="windowfunctions.html#exprrange">&lt;expr&gt; PRECEDING</a>" boundary
+specification below for details.
+</p></li></ul>
+
+<p>The ROWS and GROUPS frame types are similar in that they
+both determine the extent of a frame by counting relative to
+the current row. The difference is that ROWS counts individual
+rows and GROUPS counts peer groups.
+The RANGE frame type is different.
+The RANGE frame type determines the extent of a frame by
+looking for expression values that are within some band of
+values relative to the current row.
+
+<a name="frameboundary"></a>
+
+</p><h3 id="frame_boundaries"><span>2.2.2. </span>Frame Boundaries</h3>
+
+<p> There are five ways to describe starting and ending frame boundaries:
+
+</p><ol>
+<li><p> <b>UNBOUNDED PRECEDING</b><br>
+ The frame boundary is the first
+ row in the <a href="windowfunctions.html#ptxn">partition</a>.
+
+</p></li><li><p> <b>&lt;expr&gt; PRECEDING</b><br>
+ &lt;expr&gt; must be a non-negative constant numeric expression.
+ The boundary is a row that is &lt;expr&gt; "units" prior to
+ the current row. The meaning of "units" here depends on the
+ frame type:
+ </p><ul>
+ <li><p> <b>ROWS &rarr;</b>
+ The frame boundary is the row that is &lt;expr&gt;
+ rows before the current row, or the first row of the
+ partition if there are fewer than &lt;expr&gt; rows
+ before the current row. &lt;expr&gt; must be an integer.
+ </p></li><li><p> <b>GROUPS &rarr;</b>
+ A "group" is a set of peer rows - rows that all have
+ the same values for every term in the ORDER BY clause.
+ The frame boundary is the group that is &lt;expr&gt;
+ groups before the group containing the current row, or the
+ first group of the partition if there are fewer
+ than &lt;expr&gt; groups before the current row.
+ For the starting boundary of a frame, the first
+ row of the group is used and for the ending boundary
+ of a frame, the last row of the group is used.
+ &lt;expr&gt; must be an integer.
+ <a name="exprrange"></a>
+
+ </p></li><li><p> <b>RANGE &rarr;</b>
+ For this form, the ORDER BY clause of the
+ <span class='yynonterm'>window-defn</span> must have a single
+ term. Call that ORDER BY term "X". Let
+ X<sub><small>i</small></sub> be the value of the X
+ expression for the i-th row in the partition and let
+ X<sub><small>c</small></sub> be the value of X for the
+ current row. Informally, a RANGE bound is the first row
+ for which X<sub><small>i</small></sub> is within
+ the &lt;expr&gt; of X<sub><small>c</small></sub>.
+ More precisely:
+ </p><ol type="a">
+ <li> If either X<sub><small>i</small></sub> or
+ X<sub><small>c</small></sub> are non-numeric, then
+ the boundary is the first row for which the expression
+ "X<sub><small>i</small></sub> IS X<sub><small>c</small></sub>"
+ is true.
+ </li><li> Else if the ORDER BY is ASC then the boundary
+ is the first row for which
+ X<sub><small>i</small></sub>&gt;=X<sub><small>c</small></sub>-&lt;expr&gt;.
+ </li><li> Else if the ORDER BY is DESC then the boundary
+ is the first row for which
+ X<sub><small>i</small></sub>&lt;=X<sub><small>c</small></sub>+&lt;expr&gt;.
+ </li></ol>
+ For this form, the &lt;expr&gt; does not have to be an
+ integer. It can evaluate to a real number as long as
+ it is constant and non-negative.
+ </li></ul>
+ The boundary description "0 PRECEDING" always means the same
+ thing as "CURRENT ROW".
+
+</li><li><p><b>CURRENT ROW</b><br>
+ The current row. For RANGE and GROUPS frame types,
+ peers of the current row are also included in the frame,
+ unless specifically excluded by the EXCLUDE clause.
+ This is true regardless of whether CURRENT ROW is used
+ as the starting or ending frame boundary.
+
+</p></li><li><p><b>&lt;expr&gt; FOLLOWING</b><br>
+ This is the same as "&lt;expr&gt; PRECEDING" except that
+ the boundary is &lt;expr&gt; units after the current
+ rather than before the current row.
+
+</p></li><li><p> <b>UNBOUNDED FOLLOWING</b><br>
+ The frame boundary is the last
+ row in the <a href="windowfunctions.html#ptxn">partition</a>.
+
+</p></li></ol>
+
+<p> The ending frame boundary may not take a form that appears higher in
+the above list than the starting frame boundary.
+
+</p><p> In the following example, the window frame for each row consists of all
+rows from the current row to the end of the set, where rows are sorted
+according to "ORDER BY a".
+
+</p><div class="codeblock"><pre><i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- c | a | b | group_concat</i>
+---------------------------------
+<i>-- one | 1 | A | A.D.G.C.F.B.E</i>
+<i>-- one | 4 | D | D.G.C.F.B.E </i>
+<i>-- one | 7 | G | G.C.F.B.E </i>
+<i>-- three | 3 | C | C.F.B.E </i>
+<i>-- three | 6 | F | F.B.E </i>
+<i>-- two | 2 | B | B.E </i>
+<i>-- two | 5 | E | E </i>
+<i>-- </i>
+SELECT c, a, b, group_concat(b, '.') OVER (
+ ORDER BY c, a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
+) AS group_concat
+FROM t1 ORDER BY c, a;
+</pre></div>
+
+<a name="wexcls"></a>
+
+<h3 id="the_exclude_clause"><span>2.2.3. </span>The EXCLUDE Clause</h3>
+
+<p> The optional EXCLUDE clause may take any of the following four forms:
+
+</p><ul>
+ <li> <p><b> EXCLUDE NO OTHERS</b>: This is the default. In this case no
+ rows are excluded from the window frame as defined by its starting and ending
+ frame boundaries.
+
+ </p></li><li> <p><b> EXCLUDE CURRENT ROW</b>: In this case the current row is
+ excluded from the window frame. Peers of the current row remain in
+ the frame for the GROUPS and RANGE frame types.
+
+ </p></li><li> <p><b> EXCLUDE GROUP</b>: In this case the current row and all other
+ rows that are peers of the current row are excluded from the frame. When
+ processing an EXCLUDE clause, all rows with the same ORDER BY values, or all
+ rows in the partition if there is no ORDER BY clause, are considered peers,
+ even if the frame type is ROWS.
+
+ </p></li><li> <p><b> EXCLUDE TIES</b>: In this case the current row is part of the
+ frame, but peers of the current row are excluded.
+</p></li></ul>
+
+<p> The following example demonstrates the effect of the various
+forms of the EXCLUDE clause:
+
+</p><div class="codeblock"><pre><i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- c | a | b | no_others | current_row | grp | ties</i>
+<i>-- one | 1 | A | A.D.G | D.G | | A</i>
+<i>-- one | 4 | D | A.D.G | A.G | | D</i>
+<i>-- one | 7 | G | A.D.G | A.D | | G</i>
+<i>-- three | 3 | C | A.D.G.C.F | A.D.G.F | A.D.G | A.D.G.C</i>
+<i>-- three | 6 | F | A.D.G.C.F | A.D.G.C | A.D.G | A.D.G.F</i>
+<i>-- two | 2 | B | A.D.G.C.F.B.E | A.D.G.C.F.E | A.D.G.C.F | A.D.G.C.F.B</i>
+<i>-- two | 5 | E | A.D.G.C.F.B.E | A.D.G.C.F.B | A.D.G.C.F | A.D.G.C.F.E</i>
+<i>-- </i>
+SELECT c, a, b,
+ group_concat(b, '.') OVER (
+ ORDER BY c GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS
+ ) AS no_others,
+ group_concat(b, '.') OVER (
+ ORDER BY c GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW
+ ) AS current_row,
+ group_concat(b, '.') OVER (
+ ORDER BY c GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE GROUP
+ ) AS grp,
+ group_concat(b, '.') OVER (
+ ORDER BY c GROUPS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE TIES
+ ) AS ties
+FROM t1 ORDER BY c, a;
+</pre></div>
+
+<h2 id="the_filter_clause"><span>2.3. </span>The FILTER Clause</h2>
+
+<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
+<button id='x2437' onclick='hideorshow("x2437","x2438")'>hide</button></p>
+ <div id='x2438' class='imgcontainer'>
+ <div style="max-width:422px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 422.381 34.56">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L93,32A15 15 0 0 0 108 17A15 15 0 0 0 93 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FILTER</text>
+<polygon points="131,17 119,21 119,12" style="fill:rgb(0,0,0)"/>
+<path d="M108,17L125,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,32L146,32A15 15 0 0 0 161 17A15 15 0 0 0 146 2L146,2A15 15 0 0 0 131 17A15 15 0 0 0 146 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="146" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="184,17 173,21 173,12" style="fill:rgb(0,0,0)"/>
+<path d="M161,17L178,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M199,32L249,32A15 15 0 0 0 264 17A15 15 0 0 0 249 2L199,2A15 15 0 0 0 184 17A15 15 0 0 0 199 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="224" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="287,17 275,21 275,12" style="fill:rgb(0,0,0)"/>
+<path d="M264,17L281,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M287,32L336,32L336,2L287,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="312" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="359,17 348,21 348,12" style="fill:rgb(0,0,0)"/>
+<path d="M336,17L353,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,32A15 15 0 0 0 389 17A15 15 0 0 0 374 2A15 15 0 0 0 359 17A15 15 0 0 0 374 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="374" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="413,17 401,21 401,12" style="fill:rgb(0,0,0)"/>
+<path d="M389,17L407,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="416" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/expr.html">expr:</a></b>
+<button id='x2439' onclick='hideorshow("x2439","x2440")'>show</button></p>
+ <div id='x2440' style='display:none;' class='imgcontainer'>
+ <div style="max-width:963px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 963.96 1105.06">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L158,32L158,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="101" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">literal-value</text>
+<polygon points="954,17 943,21 943,12" style="fill:rgb(0,0,0)"/>
+<path d="M158,17L948,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="958" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,70L172,70A15 15 0 0 0 187 55L187,55A15 15 0 0 0 172 39L60,39A15 15 0 0 0 45 55L45,55A15 15 0 0 0 60 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="116" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">bind-parameter</text>
+<polygon points="916,55 905,59 905,50" style="fill:rgb(0,0,0)"/>
+<path d="M187,55L910,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,55 L 924,55 Q 931,55 931,47 L 931,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,55 33,59 33,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 31,55 L 39,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,130L156,130A15 15 0 0 0 171 115A15 15 0 0 0 156 100L60,100A15 15 0 0 0 45 115A15 15 0 0 0 60 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="108" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="195,115 183,119 183,111" style="fill:rgb(0,0,0)"/>
+<path d="M171,115L189,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M210,130A15 15 0 0 0 225 115A15 15 0 0 0 210 100A15 15 0 0 0 195 115A15 15 0 0 0 210 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="261,115 249,119 249,111" style="fill:rgb(0,0,0)"/>
+<path d="M225,115L255,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M276,130L351,130A15 15 0 0 0 366 115A15 15 0 0 0 351 100L276,100A15 15 0 0 0 261 115A15 15 0 0 0 276 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="313" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="389,115 378,119 378,111" style="fill:rgb(0,0,0)"/>
+<path d="M366,115L383,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,130A15 15 0 0 0 419 115A15 15 0 0 0 404 100A15 15 0 0 0 389 115A15 15 0 0 0 404 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="404" y="115" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="455,115 444,119 444,111" style="fill:rgb(0,0,0)"/>
+<path d="M419,115L450,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,130L565,130A15 15 0 0 0 580 115A15 15 0 0 0 565 100L471,100A15 15 0 0 0 455 115A15 15 0 0 0 471 130Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="518" y="115" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="916,115 905,119 905,111" style="fill:rgb(0,0,0)"/>
+<path d="M580,115L910,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,115 L 924,115 Q 931,115 931,108 L 931,100" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,115 33,119 33,111" style="fill:rgb(0,0,0)"/>
+<path d="M24,100 L 24,108 Q 24,115 31,115 L 39,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="108,89 97,93 97,84" style="fill:rgb(0,0,0)"/>
+<path d="M24,74 L 24,81 Q 24,89 39,89 L 87,89 L 102,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="313,89 302,93 302,84" style="fill:rgb(0,0,0)"/>
+<path d="M108,89 L 129,89 Q 144,89 159,89 L 293,89 L 308,89" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M313,89 L 414,89 Q 429,89 429,102 Q 429,115 436,115 L 444,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M223,89 L 230,89 Q 238,89 238,102 Q 238,115 245,115 L 253,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,168L168,168A15 15 0 0 0 183 153A15 15 0 0 0 168 138L60,138A15 15 0 0 0 45 153A15 15 0 0 0 60 168Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">unary-operator</text>
+<polygon points="206,153 194,157 194,149" style="fill:rgb(0,0,0)"/>
+<path d="M183,153L200,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,168L255,168L255,138L206,138Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="153" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,153 905,157 905,149" style="fill:rgb(0,0,0)"/>
+<path d="M255,153L910,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,153 L 924,153 Q 931,153 931,145 L 931,138" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,153 33,157 33,149" style="fill:rgb(0,0,0)"/>
+<path d="M24,138 L 24,145 Q 24,153 31,153 L 39,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,206L94,206L94,176L45,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,191 106,195 106,186" style="fill:rgb(0,0,0)"/>
+<path d="M94,191L111,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,206L245,206A15 15 0 0 0 261 191A15 15 0 0 0 245 176L132,176A15 15 0 0 0 117 191A15 15 0 0 0 132 206Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="189" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">binary-operator</text>
+<polygon points="284,191 272,195 272,186" style="fill:rgb(0,0,0)"/>
+<path d="M261,191L278,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M284,206L333,206L333,176L284,176Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="308" y="191" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,191 905,195 905,186" style="fill:rgb(0,0,0)"/>
+<path d="M333,191L910,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,191 L 924,191 Q 931,191 931,183 L 931,176" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,191 33,195 33,186" style="fill:rgb(0,0,0)"/>
+<path d="M24,176 L 24,183 Q 24,191 31,191 L 39,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,266L162,266A15 15 0 0 0 177 251A15 15 0 0 0 162 236L60,236A15 15 0 0 0 45 251A15 15 0 0 0 60 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="111" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">function-name</text>
+<polygon points="194,251 183,255 183,247" style="fill:rgb(0,0,0)"/>
+<path d="M177,251L188,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,266A15 15 0 0 0 224 251A15 15 0 0 0 209 236A15 15 0 0 0 194 251A15 15 0 0 0 209 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="260,251 249,255 249,247" style="fill:rgb(0,0,0)"/>
+<path d="M224,251L255,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,266L344,266A15 15 0 0 0 359 251A15 15 0 0 0 344 236L275,236A15 15 0 0 0 260 251A15 15 0 0 0 275 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="424,251 412,255 412,247" style="fill:rgb(0,0,0)"/>
+<path d="M359,251L418,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,266L473,266L473,236L424,236Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="251" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="527,251 515,255 515,247" style="fill:rgb(0,0,0)"/>
+<path d="M473,251L521,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M542,266A15 15 0 0 0 557 251A15 15 0 0 0 542 236A15 15 0 0 0 527 251A15 15 0 0 0 542 266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="542" y="251" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="595,281 584,286 584,277" style="fill:rgb(0,0,0)"/>
+<path d="M557,251 L 565,251 Q 572,251 572,266 L 572,266 Q 572,281 581,281 L 589,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M595,297L707,297L707,266L595,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="651" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">filter-clause</text>
+<polygon points="745,251 734,255 734,247" style="fill:rgb(0,0,0)"/>
+<path d="M707,281 L 715,281 Q 722,281 722,266 L 722,266 Q 722,251 731,251 L 739,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="783,281 772,286 772,277" style="fill:rgb(0,0,0)"/>
+<path d="M745,251 L 753,251 Q 760,251 760,266 L 760,266 Q 760,281 769,281 L 777,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M783,297L891,297L891,266L783,266Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="837" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">over-clause</text>
+<polygon points="916,281 905,286 905,277" style="fill:rgb(0,0,0)"/>
+<path d="M891,281L910,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,281 L 924,281 Q 931,281 931,274 L 931,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,251 33,255 33,247" style="fill:rgb(0,0,0)"/>
+<path d="M24,236 L 24,244 Q 24,251 31,251 L 39,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="651,251 640,255 640,247" style="fill:rgb(0,0,0)"/>
+<path d="M557,251L645,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M651,251L734,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,251 905,255 905,247" style="fill:rgb(0,0,0)"/>
+<path d="M745,251L910,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,251 L 924,251 Q 931,251 931,244 L 931,236" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,228A15 15 0 0 0 463 213A15 15 0 0 0 448 198A15 15 0 0 0 433 213A15 15 0 0 0 448 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="448" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="463,213 475,209 475,218" style="fill:rgb(0,0,0)"/>
+<path d="M473,251 L 480,251 Q 488,251 488,236 L 488,228 Q 488,213 478,213 L 469,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M433,213 L 416,213 Q 401,213 401,228 L 401,236 Q 401,251 408,251 L 416,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="310,221 298,225 298,217" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,236 L 239,236 Q 239,221 254,221 L 289,221 L 304,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="397,251 385,255 385,247" style="fill:rgb(0,0,0)"/>
+<path d="M310,221 L 355,221 Q 370,221 370,236 L 370,236 Q 370,251 380,251 L 391,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M275,304A15 15 0 0 0 291 289A15 15 0 0 0 275 274A15 15 0 0 0 260 289A15 15 0 0 0 275 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="275" y="289" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="260,289 249,293 249,285" style="fill:rgb(0,0,0)"/>
+<path d="M224,251 L 232,251 Q 239,251 239,266 L 239,274 Q 239,289 247,289 L 255,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,289 477,293 477,285" style="fill:rgb(0,0,0)"/>
+<path d="M291,289L483,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,289 L 496,289 Q 504,289 504,274 L 504,266 Q 504,251 511,251 L 519,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="260,319 249,324 249,315" style="fill:rgb(0,0,0)"/>
+<path d="M239,274 L 239,304 Q 239,319 247,319 L 255,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="489,319 477,324 477,315" style="fill:rgb(0,0,0)"/>
+<path d="M260,319L483,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,319 L 496,319 Q 504,319 504,304 L 504,289 L 504,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,357A15 15 0 0 0 75 342A15 15 0 0 0 60 327A15 15 0 0 0 45 342A15 15 0 0 0 60 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="60" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="111,342 100,346 100,338" style="fill:rgb(0,0,0)"/>
+<path d="M75,342L105,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M111,357L160,357L160,327L111,327Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="342" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="196,342 185,346 185,338" style="fill:rgb(0,0,0)"/>
+<path d="M160,342L191,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,357A15 15 0 0 0 227 342A15 15 0 0 0 211 327A15 15 0 0 0 196 342A15 15 0 0 0 211 357Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="342" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,342 905,346 905,338" style="fill:rgb(0,0,0)"/>
+<path d="M227,342L910,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,342 L 924,342 Q 931,342 931,334 L 931,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,342 33,346 33,338" style="fill:rgb(0,0,0)"/>
+<path d="M24,327 L 24,334 Q 24,342 31,342 L 39,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M136,319A15 15 0 0 0 151 304A15 15 0 0 0 136 289A15 15 0 0 0 121 304A15 15 0 0 0 136 319Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="136" y="304" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="151,304 162,300 162,308" style="fill:rgb(0,0,0)"/>
+<path d="M160,342 L 168,342 Q 175,342 175,327 L 175,319 Q 175,304 166,304 L 157,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M121,304 L 103,304 Q 88,304 88,319 L 88,327 Q 88,342 96,342 L 103,342" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,395L88,395A15 15 0 0 0 103 380A15 15 0 0 0 88 365L60,365A15 15 0 0 0 45 380A15 15 0 0 0 60 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CAST</text>
+<polygon points="126,380 114,384 114,375" style="fill:rgb(0,0,0)"/>
+<path d="M103,380L120,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M141,395A15 15 0 0 0 156 380A15 15 0 0 0 141 365A15 15 0 0 0 126 380A15 15 0 0 0 141 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="179,380 168,384 168,375" style="fill:rgb(0,0,0)"/>
+<path d="M156,380L173,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M179,395L228,395L228,365L179,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="204" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="251,380 240,384 240,375" style="fill:rgb(0,0,0)"/>
+<path d="M228,380L246,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M267,395L271,395A15 15 0 0 0 286 380A15 15 0 0 0 271 365L267,365A15 15 0 0 0 251 380A15 15 0 0 0 267 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="269" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="309,380 297,384 297,375" style="fill:rgb(0,0,0)"/>
+<path d="M286,380L303,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M309,395L408,395L408,365L309,365Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="358" y="380" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">type-name</text>
+<polygon points="431,380 419,384 419,375" style="fill:rgb(0,0,0)"/>
+<path d="M408,380L425,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M446,395A15 15 0 0 0 461 380A15 15 0 0 0 446 365A15 15 0 0 0 431 380A15 15 0 0 0 446 395Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="380" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,380 905,384 905,375" style="fill:rgb(0,0,0)"/>
+<path d="M461,380L910,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,380 L 924,380 Q 931,380 931,372 L 931,365" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,380 33,384 33,375" style="fill:rgb(0,0,0)"/>
+<path d="M24,365 L 24,372 Q 24,380 31,380 L 39,380" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,433L94,433L94,402L45,402Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,417 106,422 106,413" style="fill:rgb(0,0,0)"/>
+<path d="M94,417L111,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,433L196,433A15 15 0 0 0 211 417A15 15 0 0 0 196 402L132,402A15 15 0 0 0 117 417A15 15 0 0 0 132 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="234,417 223,422 223,413" style="fill:rgb(0,0,0)"/>
+<path d="M211,417L229,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,433L355,433A15 15 0 0 0 370 417A15 15 0 0 0 355 402L250,402A15 15 0 0 0 234 417A15 15 0 0 0 250 433Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="302" y="417" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="916,417 905,422 905,413" style="fill:rgb(0,0,0)"/>
+<path d="M370,417L910,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,417 L 924,417 Q 931,417 931,410 L 931,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,417 33,422 33,413" style="fill:rgb(0,0,0)"/>
+<path d="M24,402 L 24,410 Q 24,417 31,417 L 39,417" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,470L94,470L94,440L45,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,455 119,460 119,451" style="fill:rgb(0,0,0)"/>
+<path d="M94,455L124,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,470L165,470A15 15 0 0 0 180 455A15 15 0 0 0 165 440L145,440A15 15 0 0 0 130 455A15 15 0 0 0 145 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="234,455 223,460 223,451" style="fill:rgb(0,0,0)"/>
+<path d="M180,455L229,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M250,470L273,470A15 15 0 0 0 288 455A15 15 0 0 0 273 440L250,440A15 15 0 0 0 234 455A15 15 0 0 0 250 470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIKE</text>
+<path d="M250,508L279,508A15 15 0 0 0 294 493A15 15 0 0 0 279 478L250,478A15 15 0 0 0 234 493A15 15 0 0 0 250 508Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="493" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GLOB</text>
+<path d="M250,546L302,546A15 15 0 0 0 317 531A15 15 0 0 0 302 516L250,516A15 15 0 0 0 234 531A15 15 0 0 0 250 546Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="276" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">REGEXP</text>
+<path d="M250,584L297,584A15 15 0 0 0 313 569A15 15 0 0 0 297 554L250,554A15 15 0 0 0 234 569A15 15 0 0 0 250 584Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="274" y="569" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATCH</text>
+<path d="M378,546L427,546L427,516L378,516Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="531" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M378,470L427,470L427,440L378,440Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="455" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="465,486 454,490 454,481" style="fill:rgb(0,0,0)"/>
+<path d="M427,455 L 435,455 Q 442,455 442,470 L 442,471 Q 442,486 451,486 L 460,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M480,501L532,501A15 15 0 0 0 547 486A15 15 0 0 0 532 470L480,470A15 15 0 0 0 465 486A15 15 0 0 0 480 501Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="506" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ESCAPE</text>
+<polygon points="570,486 559,490 559,481" style="fill:rgb(0,0,0)"/>
+<path d="M547,486L565,486" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M570,501L620,501L620,470L570,470Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="595" y="486" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="671,455 659,460 659,451" style="fill:rgb(0,0,0)"/>
+<path d="M620,486 L 627,486 Q 635,486 635,471 L 635,470 Q 635,455 650,455 L 650,455 L 665,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="916,455 905,460 905,451" style="fill:rgb(0,0,0)"/>
+<path d="M671,455L910,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,455 L 924,455 Q 931,455 931,448 L 931,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,455 33,460 33,451" style="fill:rgb(0,0,0)"/>
+<path d="M24,440 L 24,448 Q 24,455 31,455 L 39,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M100,455 L 108,455 Q 115,455 115,470 L 115,471 Q 115,486 130,486 L 177,486 Q 192,486 192,471 L 192,470 Q 192,455 199,455 L 207,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,569 223,573 223,564" style="fill:rgb(0,0,0)"/>
+<path d="M196,455 L 204,455 Q 211,455 211,470 L 211,554 Q 211,569 220,569 L 229,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,493 223,497 223,489" style="fill:rgb(0,0,0)"/>
+<path d="M211,478 L 211,486 Q 211,493 220,493 L 229,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="234,531 223,535 223,527" style="fill:rgb(0,0,0)"/>
+<path d="M211,516 L 211,523 Q 211,531 220,531 L 229,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,455 367,460 367,451" style="fill:rgb(0,0,0)"/>
+<path d="M288,455L372,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,569 329,573 329,564" style="fill:rgb(0,0,0)"/>
+<path d="M313,569L334,569" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,531 367,535 367,527" style="fill:rgb(0,0,0)"/>
+<path d="M340,569 L 348,569 Q 355,569 355,554 L 355,546 Q 355,531 364,531 L 372,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,531 329,535 329,527" style="fill:rgb(0,0,0)"/>
+<path d="M317,531L334,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,531L378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="340,493 329,497 329,489" style="fill:rgb(0,0,0)"/>
+<path d="M294,493L334,493" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M340,493 L 348,493 Q 355,493 355,508 L 355,516 Q 355,531 367,531 L 378,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="506,455 495,460 495,451" style="fill:rgb(0,0,0)"/>
+<path d="M427,455L501,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M506,455L659,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="547,531 536,535 536,527" style="fill:rgb(0,0,0)"/>
+<path d="M427,531L542,531" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M547,531 L 656,531 Q 671,531 671,516 L 671,470 Q 671,455 686,455 L 692,455 L 707,455" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,622L94,622L94,591L45,591Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,606 119,611 119,602" style="fill:rgb(0,0,0)"/>
+<path d="M94,606L124,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,622L194,622A15 15 0 0 0 209 606A15 15 0 0 0 194 591L145,591A15 15 0 0 0 130 606A15 15 0 0 0 145 622Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="170" y="606" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ISNULL</text>
+<polygon points="916,606 905,611 905,602" style="fill:rgb(0,0,0)"/>
+<path d="M209,606L910,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,606 L 924,606 Q 931,606 931,599 L 931,591" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,606 33,611 33,602" style="fill:rgb(0,0,0)"/>
+<path d="M24,591 L 24,599 Q 24,606 31,606 L 39,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,659L215,659A15 15 0 0 0 230 644A15 15 0 0 0 215 629L145,629A15 15 0 0 0 130 644A15 15 0 0 0 145 659Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="644" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOTNULL</text>
+<path d="M145,697L165,697A15 15 0 0 0 180 682A15 15 0 0 0 165 667L145,667A15 15 0 0 0 130 682A15 15 0 0 0 145 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="203,682 192,686 192,678" style="fill:rgb(0,0,0)"/>
+<path d="M180,682L198,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M219,697L250,697A15 15 0 0 0 265 682A15 15 0 0 0 250 667L219,667A15 15 0 0 0 203 682A15 15 0 0 0 219 697Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="234" y="682" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="288,682 276,686 276,678" style="fill:rgb(0,0,0)"/>
+<path d="M265,682L282,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="339,606 327,611 327,602" style="fill:rgb(0,0,0)"/>
+<path d="M288,682 L 295,682 Q 303,682 303,667 L 303,621 Q 303,606 318,606 L 318,606 L 333,606" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="288,644 276,649 276,640" style="fill:rgb(0,0,0)"/>
+<path d="M230,644L282,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M288,644 L 295,644 Q 303,644 303,637 L 303,629" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,682 119,686 119,678" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,667 Q 109,682 117,682 L 124,682" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="130,644 119,649 119,640" style="fill:rgb(0,0,0)"/>
+<path d="M94,606 L 102,606 Q 109,606 109,621 L 109,629 Q 109,644 117,644 L 124,644" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,735L94,735L94,705L45,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="117,720 106,724 106,716" style="fill:rgb(0,0,0)"/>
+<path d="M94,720L111,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M132,735A15 15 0 0 0 147 720A15 15 0 0 0 132 705A15 15 0 0 0 117 720A15 15 0 0 0 132 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="132" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IS</text>
+<polygon points="183,720 172,724 172,716" style="fill:rgb(0,0,0)"/>
+<path d="M147,720L178,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M198,735L219,735A15 15 0 0 0 234 720A15 15 0 0 0 219 705L198,705A15 15 0 0 0 183 720A15 15 0 0 0 198 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="270,720 258,724 258,716" style="fill:rgb(0,0,0)"/>
+<path d="M234,720L264,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="306,720 294,724 294,716" style="fill:rgb(0,0,0)"/>
+<path d="M270,720L300,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,735L389,735A15 15 0 0 0 404 720A15 15 0 0 0 389 705L321,705A15 15 0 0 0 306 720A15 15 0 0 0 321 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="355" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="440,720 429,724 429,716" style="fill:rgb(0,0,0)"/>
+<path d="M404,720L434,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M455,735L490,735A15 15 0 0 0 505 720A15 15 0 0 0 490 705L455,705A15 15 0 0 0 440 720A15 15 0 0 0 455 735Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="473" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="541,720 530,724 530,716" style="fill:rgb(0,0,0)"/>
+<path d="M505,720L535,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M541,735L590,735L590,705L541,705Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="720" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,720 905,724 905,716" style="fill:rgb(0,0,0)"/>
+<path d="M590,720L910,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,720 L 924,720 Q 931,720 931,712 L 931,705" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,720 33,724 33,716" style="fill:rgb(0,0,0)"/>
+<path d="M24,705 L 24,712 Q 24,720 31,720 L 39,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,720 L 156,720 Q 164,720 164,732 Q 164,744 179,744 L 230,744 Q 245,744 245,732 Q 245,720 253,720 L 260,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,720 L 279,720 Q 286,720 286,732 Q 286,744 301,744 L 502,744 Q 517,744 517,732 Q 517,720 524,720 L 532,720" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,780L94,780L94,750L45,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,765 119,770 119,761" style="fill:rgb(0,0,0)"/>
+<path d="M94,765L124,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,780L165,780A15 15 0 0 0 180 765A15 15 0 0 0 165 750L145,750A15 15 0 0 0 130 765A15 15 0 0 0 145 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,765 205,770 205,761" style="fill:rgb(0,0,0)"/>
+<path d="M180,765L211,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,780L304,780A15 15 0 0 0 319 765A15 15 0 0 0 304 750L232,750A15 15 0 0 0 216 765A15 15 0 0 0 232 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="342,765 331,770 331,761" style="fill:rgb(0,0,0)"/>
+<path d="M319,765L336,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M342,780L391,780L391,750L342,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="367" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="414,765 403,770 403,761" style="fill:rgb(0,0,0)"/>
+<path d="M391,765L409,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M430,780L450,780A15 15 0 0 0 465 765A15 15 0 0 0 450 750L430,750A15 15 0 0 0 414 765A15 15 0 0 0 430 780Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="488,765 477,770 477,761" style="fill:rgb(0,0,0)"/>
+<path d="M465,765L483,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M488,780L538,780L538,750L488,750Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="513" y="765" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="916,765 905,770 905,761" style="fill:rgb(0,0,0)"/>
+<path d="M538,765L910,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,765 L 924,765 Q 931,765 931,758 L 931,750" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,765 33,770 33,761" style="fill:rgb(0,0,0)"/>
+<path d="M24,750 L 24,758 Q 24,765 31,765 L 39,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,765 L 103,765 Q 110,765 110,777 Q 110,789 125,789 L 177,789 Q 192,789 192,777 Q 192,765 199,765 L 207,765" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,833L94,833L94,803L45,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="130,818 119,822 119,814" style="fill:rgb(0,0,0)"/>
+<path d="M94,818L124,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M145,833L165,833A15 15 0 0 0 180 818A15 15 0 0 0 165 803L145,803A15 15 0 0 0 130 818A15 15 0 0 0 145 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="155" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="216,818 205,822 205,814" style="fill:rgb(0,0,0)"/>
+<path d="M180,818L211,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M232,833L234,833A15 15 0 0 0 249 818A15 15 0 0 0 234 803L232,803A15 15 0 0 0 216 818A15 15 0 0 0 232 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IN</text>
+<polygon points="285,818 273,822 273,814" style="fill:rgb(0,0,0)"/>
+<path d="M249,818L279,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,833A15 15 0 0 0 315 818A15 15 0 0 0 300 803A15 15 0 0 0 285 818A15 15 0 0 0 300 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="300" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="351,818 340,822 340,814" style="fill:rgb(0,0,0)"/>
+<path d="M315,818L345,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,833L455,833L455,803L351,803Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="818" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="491,818 480,822 480,814" style="fill:rgb(0,0,0)"/>
+<path d="M455,818L486,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M507,833A15 15 0 0 0 522 818A15 15 0 0 0 507 803A15 15 0 0 0 491 818A15 15 0 0 0 507 833Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="507" y="818" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,818 905,822 905,814" style="fill:rgb(0,0,0)"/>
+<path d="M522,818L910,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,818 L 924,818 Q 931,818 931,811 L 931,803" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,818 33,822 33,814" style="fill:rgb(0,0,0)"/>
+<path d="M24,803 L 24,811 Q 24,818 31,818 L 39,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M95,818 L 103,818 Q 110,818 110,830 Q 110,842 125,842 L 177,842 Q 192,842 192,830 Q 192,818 199,818 L 207,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M317,818 L 324,818 Q 332,818 332,806 Q 332,794 347,794 L 452,794 Q 467,794 467,806 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M379,871L428,871L428,841L379,841Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="856" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="379,856 367,860 367,852" style="fill:rgb(0,0,0)"/>
+<path d="M317,818 L 324,818 Q 332,818 332,833 L 332,841 Q 332,856 347,856 L 358,856 L 373,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M428,856 L 452,856 Q 467,856 467,841 L 467,833 Q 467,818 475,818 L 482,818" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,909A15 15 0 0 0 418 894A15 15 0 0 0 403 879A15 15 0 0 0 388 894A15 15 0 0 0 403 909Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="403" y="894" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="418,894 430,889 430,898" style="fill:rgb(0,0,0)"/>
+<path d="M428,856 L 435,856 Q 443,856 443,871 L 443,879 Q 443,894 434,894 L 424,894" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M388,894 L 371,894 Q 356,894 356,879 L 356,871 Q 356,856 363,856 L 371,856" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,962L396,962A15 15 0 0 0 412 947A15 15 0 0 0 396 932L300,932A15 15 0 0 0 285 947A15 15 0 0 0 300 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="429,947 417,951 417,942" style="fill:rgb(0,0,0)"/>
+<path d="M412,947L423,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M444,962A15 15 0 0 0 459 947A15 15 0 0 0 444 932A15 15 0 0 0 429 947A15 15 0 0 0 444 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="444" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="513,947 502,951 502,942" style="fill:rgb(0,0,0)"/>
+<path d="M459,947L507,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,962L627,962A15 15 0 0 0 642 947A15 15 0 0 0 627 932L528,932A15 15 0 0 0 513 947A15 15 0 0 0 528 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="577" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function</text>
+<polygon points="659,947 647,951 647,942" style="fill:rgb(0,0,0)"/>
+<path d="M642,947L653,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,962A15 15 0 0 0 689 947A15 15 0 0 0 674 932A15 15 0 0 0 659 947A15 15 0 0 0 674 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="674" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="734,947 723,951 723,942" style="fill:rgb(0,0,0)"/>
+<path d="M689,947L728,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M734,962L783,962L783,932L734,932Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="947" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="828,947 817,951 817,942" style="fill:rgb(0,0,0)"/>
+<path d="M783,947L823,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M844,962A15 15 0 0 0 859 947A15 15 0 0 0 844 932A15 15 0 0 0 828 947A15 15 0 0 0 844 962Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="844" y="947" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,947 905,951 905,942" style="fill:rgb(0,0,0)"/>
+<path d="M859,947L910,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,947 L 924,947 Q 931,947 931,939 L 931,932" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M528,901L603,901A15 15 0 0 0 619 886A15 15 0 0 0 603 871L528,871A15 15 0 0 0 513 886A15 15 0 0 0 528 901Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="566" y="886" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="916,886 905,891 905,882" style="fill:rgb(0,0,0)"/>
+<path d="M619,886L910,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,886 L 924,886 Q 931,886 931,879 L 931,871" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="513,886 502,891 502,882" style="fill:rgb(0,0,0)"/>
+<path d="M475,947 L 483,947 Q 490,947 490,932 L 490,901 Q 490,886 499,886 L 507,886" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M759,929A15 15 0 0 0 774 913A15 15 0 0 0 759 898A15 15 0 0 0 744 913A15 15 0 0 0 759 929Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="759" y="913" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="774,913 785,909 785,918" style="fill:rgb(0,0,0)"/>
+<path d="M783,947 L 791,947 Q 798,947 798,932 L 798,928 Q 798,913 789,913 L 780,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M744,913 L 726,913 Q 711,913 711,928 L 711,932 Q 711,947 719,947 L 726,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M689,947 L 697,947 Q 704,947 704,957 Q 704,968 719,968 L 790,968 Q 805,968 805,957 Q 805,947 813,947 L 820,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="285,947 273,951 273,942" style="fill:rgb(0,0,0)"/>
+<path d="M249,818 L 256,818 Q 264,818 264,833 L 264,932 Q 264,947 272,947 L 279,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="423,918 412,922 412,914" style="fill:rgb(0,0,0)"/>
+<path d="M264,903 L 264,910 Q 264,918 279,918 L 402,918 L 417,918" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,918 L 456,918 Q 471,918 471,932 Q 471,947 478,947 L 486,947" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1007L80,1007A15 15 0 0 0 95 992A15 15 0 0 0 80 977L60,977A15 15 0 0 0 45 992A15 15 0 0 0 60 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="131,992 120,996 120,988" style="fill:rgb(0,0,0)"/>
+<path d="M95,992L125,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M146,1007L191,1007A15 15 0 0 0 206 992A15 15 0 0 0 191 977L146,977A15 15 0 0 0 131 992A15 15 0 0 0 146 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="169" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXISTS</text>
+<polygon points="242,992 231,996 231,988" style="fill:rgb(0,0,0)"/>
+<path d="M206,992L236,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M257,1007A15 15 0 0 0 272 992A15 15 0 0 0 257 977A15 15 0 0 0 242 992A15 15 0 0 0 257 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="295,992 284,996 284,988" style="fill:rgb(0,0,0)"/>
+<path d="M272,992L290,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,1007L400,1007L400,977L295,977Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="347" y="992" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="423,992 411,996 411,988" style="fill:rgb(0,0,0)"/>
+<path d="M400,992L417,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,1007A15 15 0 0 0 453 992A15 15 0 0 0 438 977A15 15 0 0 0 423 992A15 15 0 0 0 438 1007Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="438" y="992" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="916,992 905,996 905,988" style="fill:rgb(0,0,0)"/>
+<path d="M453,992L910,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,992 L 924,992 Q 931,992 931,985 L 931,977" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,992 33,996 33,988" style="fill:rgb(0,0,0)"/>
+<path d="M24,977 L 24,984 Q 24,992 31,992 L 39,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="70,966 59,970 59,961" style="fill:rgb(0,0,0)"/>
+<path d="M24,951 L 24,958 Q 24,966 39,966 L 49,966 L 64,966" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M70,966 L 201,966 Q 216,966 216,979 Q 216,992 223,992 L 231,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M93,966 L 101,966 Q 108,966 108,979 Q 108,992 116,992 L 123,992" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,1045L89,1045A15 15 0 0 0 104 1030A15 15 0 0 0 89 1015L60,1015A15 15 0 0 0 45 1030A15 15 0 0 0 60 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CASE</text>
+<polygon points="140,1030 128,1034 128,1026" style="fill:rgb(0,0,0)"/>
+<path d="M104,1030L134,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M140,1045L189,1045L189,1015L140,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="164" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="243,1030 232,1034 232,1026" style="fill:rgb(0,0,0)"/>
+<path d="M189,1030L237,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M258,1045L298,1045A15 15 0 0 0 313 1030A15 15 0 0 0 298 1015L258,1015A15 15 0 0 0 243 1030A15 15 0 0 0 258 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHEN</text>
+<polygon points="336,1030 324,1034 324,1026" style="fill:rgb(0,0,0)"/>
+<path d="M313,1030L330,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,1045L385,1045L385,1015L336,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="360" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="408,1030 396,1034 396,1026" style="fill:rgb(0,0,0)"/>
+<path d="M385,1030L402,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,1045L456,1045A15 15 0 0 0 472 1030A15 15 0 0 0 456 1015L423,1015A15 15 0 0 0 408 1030A15 15 0 0 0 423 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="440" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">THEN</text>
+<polygon points="495,1030 483,1034 483,1026" style="fill:rgb(0,0,0)"/>
+<path d="M472,1030L489,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M495,1045L544,1045L544,1015L495,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="519" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="616,1030 604,1034 604,1026" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030L610,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M631,1045L658,1045A15 15 0 0 0 673 1030A15 15 0 0 0 658 1015L631,1015A15 15 0 0 0 616 1030A15 15 0 0 0 631 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="645" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ELSE</text>
+<polygon points="696,1030 685,1034 685,1026" style="fill:rgb(0,0,0)"/>
+<path d="M673,1030L691,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M696,1045L746,1045L746,1015L696,1015Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="721" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="782,1030 770,1034 770,1026" style="fill:rgb(0,0,0)"/>
+<path d="M746,1030L776,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M797,1045L818,1045A15 15 0 0 0 833 1030A15 15 0 0 0 818 1015L797,1015A15 15 0 0 0 782 1030A15 15 0 0 0 797 1045Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="807" y="1030" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">END</text>
+<polygon points="916,1030 905,1034 905,1026" style="fill:rgb(0,0,0)"/>
+<path d="M833,1030L910,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1030 L 924,1030 Q 931,1030 931,1022 L 931,1015" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1030 33,1034 33,1026" style="fill:rgb(0,0,0)"/>
+<path d="M24,1015 L 24,1022 Q 24,1030 31,1030 L 39,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,1030 L 111,1030 Q 119,1030 119,1043 Q 119,1057 134,1057 L 186,1057 Q 201,1057 201,1043 Q 201,1030 208,1030 L 216,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="360,1057 372,1053 372,1061" style="fill:rgb(0,0,0)"/>
+<path d="M544,1030 L 551,1030 Q 559,1030 559,1043 Q 559,1057 544,1057 L 381,1057 L 366,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M360,1057 L 235,1057 Q 220,1057 220,1043 Q 220,1030 227,1030 L 235,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M578,1030 L 585,1030 Q 593,1030 593,1043 Q 593,1057 608,1057 L 742,1057 Q 757,1057 757,1043 Q 757,1030 765,1030 L 772,1030" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,1102L173,1102L173,1072L45,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">raise-function</text>
+<polygon points="916,1087 905,1092 905,1083" style="fill:rgb(0,0,0)"/>
+<path d="M173,1087L910,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M916,1087 L 924,1087 Q 931,1087 931,1072 L 931,32 Q 931,17 939,17 L 946,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,1087 33,1092 33,1083" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,1072 Q 24,1087 31,1087 L 39,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
+<button id='x2441' onclick='hideorshow("x2441","x2442")'>show</button></p>
+ <div id='x2442' style='display:none;' class='imgcontainer'>
+ <div style="max-width:341px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 341.376 336.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,319 39,324 39,315" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,304 Q 24,319 34,319 L 45,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,334L252,334A15 15 0 0 0 267 319A15 15 0 0 0 252 304L65,304A15 15 0 0 0 50 319A15 15 0 0 0 65 334Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="319" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIMESTAMP</text>
+<polygon points="290,319 278,324 278,315" style="fill:rgb(0,0,0)"/>
+<path d="M267,319L284,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="332,17 320,21 320,12" style="fill:rgb(0,0,0)"/>
+<path d="M290,319 L 297,319 Q 305,319 305,304 L 305,32 Q 305,17 315,17 L 326,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="335" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L172,32A15 15 0 0 0 187 17A15 15 0 0 0 172 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="119" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M187,17L320,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L153,70A15 15 0 0 0 168 55L168,55A15 15 0 0 0 153 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">string-literal</text>
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M24,39 L 24,47 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,55 278,59 278,50" style="fill:rgb(0,0,0)"/>
+<path d="M168,55L284,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,55 L 297,55 Q 305,55 305,47 L 305,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L140,108A15 15 0 0 0 155 92A15 15 0 0 0 140 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">blob-literal</text>
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M24,77 L 24,85 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,92 278,97 278,88" style="fill:rgb(0,0,0)"/>
+<path d="M155,92L284,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,92 L 297,92 Q 305,92 305,85 L 305,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,145L97,145A15 15 0 0 0 112 130A15 15 0 0 0 97 115L66,115A15 15 0 0 0 50 130A15 15 0 0 0 66 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULL</text>
+<polygon points="50,130 39,135 39,126" style="fill:rgb(0,0,0)"/>
+<path d="M24,115 L 24,123 Q 24,130 34,130 L 45,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,130 278,135 278,126" style="fill:rgb(0,0,0)"/>
+<path d="M112,130L284,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,130 L 297,130 Q 305,130 305,123 L 305,115" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,183L96,183A15 15 0 0 0 111 168A15 15 0 0 0 96 153L66,153A15 15 0 0 0 50 168A15 15 0 0 0 66 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="81" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TRUE</text>
+<polygon points="50,168 39,172 39,164" style="fill:rgb(0,0,0)"/>
+<path d="M24,153 L 24,160 Q 24,168 34,168 L 45,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,168 278,172 278,164" style="fill:rgb(0,0,0)"/>
+<path d="M111,168L284,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,168 L 297,168 Q 305,168 305,160 L 305,153" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,221L104,221A15 15 0 0 0 119 206A15 15 0 0 0 104 191L66,191A15 15 0 0 0 50 206A15 15 0 0 0 66 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FALSE</text>
+<polygon points="50,206 39,210 39,201" style="fill:rgb(0,0,0)"/>
+<path d="M24,191 L 24,198 Q 24,206 34,206 L 45,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,206 278,210 278,201" style="fill:rgb(0,0,0)"/>
+<path d="M119,206L284,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,206 L 297,206 Q 305,206 305,198 L 305,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,259L190,259A15 15 0 0 0 205 244A15 15 0 0 0 190 228L66,228A15 15 0 0 0 50 244A15 15 0 0 0 66 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="128" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_TIME</text>
+<polygon points="50,244 39,248 39,239" style="fill:rgb(0,0,0)"/>
+<path d="M24,228 L 24,236 Q 24,244 34,244 L 45,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,244 278,248 278,239" style="fill:rgb(0,0,0)"/>
+<path d="M205,244L284,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,244 L 297,244 Q 305,244 305,236 L 305,229" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,297L192,297A15 15 0 0 0 207 281A15 15 0 0 0 192 266L66,266A15 15 0 0 0 50 281A15 15 0 0 0 66 297Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="129" y="281" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT_DATE</text>
+<polygon points="50,281 39,286 39,277" style="fill:rgb(0,0,0)"/>
+<path d="M24,266 L 24,274 Q 24,281 34,281 L 45,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="290,281 278,286 278,277" style="fill:rgb(0,0,0)"/>
+<path d="M207,281L284,281" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,281 L 297,281 Q 305,281 305,274 L 305,266" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
+<button id='x2443' onclick='hideorshow("x2443","x2444")'>show</button></p>
+ <div id='x2444' style='display:none;' class='imgcontainer'>
+ <div style="max-width:600px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 600.706 418.392">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L78,32A15 15 0 0 0 93 17A15 15 0 0 0 78 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="62" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OVER</text>
+<polygon points="129,17 117,21 117,12" style="fill:rgb(0,0,0)"/>
+<path d="M93,17L123,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M144,32L241,32A15 15 0 0 0 256 17A15 15 0 0 0 241 2L144,2A15 15 0 0 0 129 17A15 15 0 0 0 144 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="192" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="134,55 123,59 123,50" style="fill:rgb(0,0,0)"/>
+<path d="M93,17 L 100,17 Q 108,17 108,32 L 108,40 Q 108,55 118,55 L 129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M149,70A15 15 0 0 0 165 55L165,55A15 15 0 0 0 149 39A15 15 0 0 0 134 55L134,55A15 15 0 0 0 149 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="149" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="206,82 195,86 195,77" style="fill:rgb(0,0,0)"/>
+<path d="M165,55 L 172,55 Q 180,55 180,68 Q 180,82 190,82 L 200,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,97L363,97A15 15 0 0 0 378 82A15 15 0 0 0 363 67L221,67A15 15 0 0 0 206 82A15 15 0 0 0 221 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="292" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M221,173L301,173A15 15 0 0 0 316 157A15 15 0 0 0 301 142L221,142A15 15 0 0 0 206 157A15 15 0 0 0 221 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="261" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="339,157 328,162 328,153" style="fill:rgb(0,0,0)"/>
+<path d="M316,157L333,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M354,173L358,173A15 15 0 0 0 373 157A15 15 0 0 0 358 142L354,142A15 15 0 0 0 339 157A15 15 0 0 0 354 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="409,157 398,162 398,153" style="fill:rgb(0,0,0)"/>
+<path d="M373,157L404,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M409,173L459,173L459,142L409,142Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="157" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M434,210A15 15 0 0 0 449 195A15 15 0 0 0 434 180A15 15 0 0 0 419 195A15 15 0 0 0 434 210Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="434" y="195" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="449,195 461,191 461,200" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,180 Q 474,195 464,195 L 455,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M419,195 L 398,195 Q 383,195 383,180 L 383,172 Q 383,157 390,157 L 398,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,55 280,59 280,50" style="fill:rgb(0,0,0)"/>
+<path d="M165,55L286,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,120 304,115 304,124" style="fill:rgb(0,0,0)"/>
+<path d="M292,55 L 401,55 Q 416,55 416,70 L 416,105 Q 416,120 401,120 L 313,120 L 298,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,157 195,162 195,153" style="fill:rgb(0,0,0)"/>
+<path d="M292,120 L 180,120 Q 165,120 165,135 L 165,142 Q 165,157 180,157 L 185,157 L 200,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="401,82 389,86 389,77" style="fill:rgb(0,0,0)"/>
+<path d="M378,82L395,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,82 L 408,82 Q 416,82 416,89 L 416,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,286L266,286A15 15 0 0 0 281 271A15 15 0 0 0 266 256L221,256A15 15 0 0 0 206 271A15 15 0 0 0 221 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="244" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="304,271 292,275 292,266" style="fill:rgb(0,0,0)"/>
+<path d="M281,271L298,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M319,286L323,286A15 15 0 0 0 338 271A15 15 0 0 0 323 256L319,256A15 15 0 0 0 304 271A15 15 0 0 0 319 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="321" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="374,271 363,275 363,266" style="fill:rgb(0,0,0)"/>
+<path d="M338,271L368,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M374,286L504,286L504,256L374,256Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="271" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M439,324A15 15 0 0 0 454 309A15 15 0 0 0 439 293A15 15 0 0 0 424 309A15 15 0 0 0 439 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="439" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="454,309 466,304 466,313" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,294 Q 519,309 504,309 L 475,309 L 460,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,309 L 363,309 Q 348,309 348,294 L 348,286 Q 348,271 355,271 L 363,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,233 304,229 304,237" style="fill:rgb(0,0,0)"/>
+<path d="M459,157 L 466,157 Q 474,157 474,172 L 474,218 Q 474,233 459,233 L 313,233 L 298,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,271 195,275 195,266" style="fill:rgb(0,0,0)"/>
+<path d="M292,233 L 180,233 Q 165,233 165,248 L 165,256 Q 165,271 180,271 L 185,271 L 200,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,195 160,184 169,184" style="fill:rgb(0,0,0)"/>
+<path d="M165,142L165,189" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,195L165,256" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M206,399L311,399L311,369L206,369Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="384" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="519,384 508,389 508,380" style="fill:rgb(0,0,0)"/>
+<path d="M311,384L513,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M534,399A15 15 0 0 0 549 384A15 15 0 0 0 534 369A15 15 0 0 0 519 384A15 15 0 0 0 534 399Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="534" y="384" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="591,17 579,21 579,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,384 L 557,384 Q 564,384 564,369 L 564,32 Q 564,17 575,17 L 585,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="594" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="519,17 508,21 508,12" style="fill:rgb(0,0,0)"/>
+<path d="M256,17L513,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M519,17L579,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="292,346 304,342 304,351" style="fill:rgb(0,0,0)"/>
+<path d="M504,271 L 512,271 Q 519,271 519,286 L 519,331 Q 519,346 504,346 L 313,346 L 298,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="206,384 195,389 195,380" style="fill:rgb(0,0,0)"/>
+<path d="M292,346 L 180,346 Q 165,346 165,361 L 165,369 Q 165,384 180,384 L 185,384 L 200,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,309 160,297 169,297" style="fill:rgb(0,0,0)"/>
+<path d="M165,256L165,303" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M165,309L165,369" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="258,411 247,416 247,407" style="fill:rgb(0,0,0)"/>
+<path d="M165,369 L 165,396 Q 165,411 180,411 L 238,411 L 253,411" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="380,384 369,389 369,380" style="fill:rgb(0,0,0)"/>
+<path d="M258,411 L 335,411 Q 350,411 350,398 Q 350,384 362,384 L 375,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2445' onclick='hideorshow("x2445","x2446")'>show</button></p>
+ <div id='x2446' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2447' onclick='hideorshow("x2447","x2448")'>show</button></p>
+ <div id='x2448' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
+<button id='x2449' onclick='hideorshow("x2449","x2450")'>show</button></p>
+ <div id='x2450' style='display:none;' class='imgcontainer'>
+ <div style="max-width:627px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 627.302 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32L82,32A15 15 0 0 0 97 17A15 15 0 0 0 82 2L47,2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RAISE</text>
+<polygon points="120,17 109,21 109,12" style="fill:rgb(0,0,0)"/>
+<path d="M97,17L114,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,32L135,32A15 15 0 0 0 150 17A15 15 0 0 0 135 2L135,2A15 15 0 0 0 120 17A15 15 0 0 0 135 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="135" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="192,55 180,59 180,50" style="fill:rgb(0,0,0)"/>
+<path d="M150,17 L 158,17 Q 165,17 165,32 L 165,40 Q 165,55 176,55 L 186,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,70L285,70A15 15 0 0 0 300 55L300,55A15 15 0 0 0 285 39L207,39A15 15 0 0 0 192 55L192,55A15 15 0 0 0 207 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROLLBACK</text>
+<polygon points="336,55 324,59 324,50" style="fill:rgb(0,0,0)"/>
+<path d="M300,55L330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70A15 15 0 0 0 366 55L366,55A15 15 0 0 0 351 39A15 15 0 0 0 336 55L336,55A15 15 0 0 0 351 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="351" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="389,55 378,59 378,50" style="fill:rgb(0,0,0)"/>
+<path d="M366,55L383,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M404,70L508,70A15 15 0 0 0 523 55L523,55A15 15 0 0 0 508 39L404,39A15 15 0 0 0 389 55L389,55A15 15 0 0 0 404 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="456" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">error-message</text>
+<polygon points="564,17 553,21 553,12" style="fill:rgb(0,0,0)"/>
+<path d="M523,55 L 530,55 Q 538,55 538,40 L 538,32 Q 538,17 548,17 L 558,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M579,32A15 15 0 0 0 594 17A15 15 0 0 0 579 2A15 15 0 0 0 564 17A15 15 0 0 0 579 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="579" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="617,17 606,21 606,12" style="fill:rgb(0,0,0)"/>
+<path d="M594,17L612,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="621" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,17 180,21 180,12" style="fill:rgb(0,0,0)"/>
+<path d="M150,17L186,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,32L259,32A15 15 0 0 0 274 17A15 15 0 0 0 259 2L207,2A15 15 0 0 0 192 17A15 15 0 0 0 207 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="233" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">IGNORE</text>
+<polygon points="456,17 444,21 444,12" style="fill:rgb(0,0,0)"/>
+<path d="M274,17L450,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,17L553,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,108L249,108A15 15 0 0 0 264 92A15 15 0 0 0 249 77L207,77A15 15 0 0 0 192 92A15 15 0 0 0 207 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="228" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ABORT</text>
+<polygon points="300,92 288,97 288,88" style="fill:rgb(0,0,0)"/>
+<path d="M264,92L294,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,92 L 307,92 Q 315,92 315,77 L 315,70 Q 315,55 322,55 L 330,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,145L229,145A15 15 0 0 0 244 130A15 15 0 0 0 229 115L207,115A15 15 0 0 0 192 130A15 15 0 0 0 207 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="218" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FAIL</text>
+<polygon points="300,130 288,135 288,126" style="fill:rgb(0,0,0)"/>
+<path d="M244,130L294,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M300,130 L 307,130 Q 315,130 315,115 L 315,92 L 315,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,130 180,135 180,126" style="fill:rgb(0,0,0)"/>
+<path d="M165,39 L 165,115 Q 165,130 176,130 L 186,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="192,92 180,97 180,88" style="fill:rgb(0,0,0)"/>
+<path d="M165,77 L 165,85 Q 165,92 176,92 L 186,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
+<button id='x2451' onclick='hideorshow("x2451","x2452")'>show</button></p>
+ <div id='x2452' style='display:none;' class='imgcontainer'>
+ <div style="max-width:669px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 669.677 1162.3">
+<path d="M55,845L667,845L667,99L55,99Z" style="fill:none;stroke-width:3.24;stroke:rgb(211,211,211);" />
+<circle cx="6" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="46,17 34,21 34,12" style="fill:rgb(0,0,0)"/>
+<path d="M10,17L40,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M61,32L92,32A15 15 0 0 0 107 17A15 15 0 0 0 92 2L61,2A15 15 0 0 0 46 17A15 15 0 0 0 61 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="76" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WITH</text>
+<path d="M167,62L253,62A15 15 0 0 0 268 47L268,47A15 15 0 0 0 253 32L167,32A15 15 0 0 0 152 47L152,47A15 15 0 0 0 167 62Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="210" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RECURSIVE</text>
+<polygon points="210,17 198,21 198,12" style="fill:rgb(0,0,0)"/>
+<path d="M107,17L204,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="358,17 346,21 346,12" style="fill:rgb(0,0,0)"/>
+<path d="M210,17L352,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M358,32L584,32L584,2L358,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">common-table-expression</text>
+<polygon points="152,47 140,51 140,43" style="fill:rgb(0,0,0)"/>
+<path d="M107,17 L 114,17 Q 122,17 122,32 L 122,32 Q 122,47 134,47 L 146,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="291,47 279,51 279,43" style="fill:rgb(0,0,0)"/>
+<path d="M268,47L285,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M291,47 L 298,47 Q 306,47 306,32 L 306,32 Q 306,17 321,17 L 331,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M471,70A15 15 0 0 0 486 55L486,55A15 15 0 0 0 471 39A15 15 0 0 0 456 55L456,55A15 15 0 0 0 471 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="486,55 498,50 498,59" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,40 Q 599,55 584,55 L 507,55 L 492,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M456,55 L 350,55 Q 335,55 335,40 L 335,32 Q 335,17 340,17 L 346,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="295,83 307,79 307,88" style="fill:rgb(0,0,0)"/>
+<path d="M584,17 L 592,17 Q 599,17 599,32 L 599,68 Q 599,83 584,83 L 316,83 L 301,83" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M295,83 L 40,83 Q 25,83 25,98 L 25,113" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="25,47 20,36 29,36" style="fill:rgb(0,0,0)"/>
+<path d="M10,17 L 17,17 Q 25,17 25,29 L 25,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="55,129 43,133 43,124" style="fill:rgb(0,0,0)"/>
+<path d="M25,47 L 25,114 Q 25,129 37,129 L 49,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,129 115,133 115,124" style="fill:rgb(0,0,0)"/>
+<path d="M55,129L121,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,144L193,144A15 15 0 0 0 208 129A15 15 0 0 0 193 114L142,114A15 15 0 0 0 127 129A15 15 0 0 0 142 144Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="167" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">SELECT</text>
+<polygon points="250,159 238,163 238,155" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,144 Q 223,159 233,159 L 244,159" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,174L333,174A15 15 0 0 0 348 159A15 15 0 0 0 333 144L265,144A15 15 0 0 0 250 159A15 15 0 0 0 265 174Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="299" y="159" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DISTINCT</text>
+<polygon points="417,129 406,133 406,124" style="fill:rgb(0,0,0)"/>
+<path d="M348,159 L 356,159 Q 363,159 363,144 L 363,144 Q 363,129 378,129 L 396,129 L 411,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M417,144L545,144L545,114L417,114Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="129" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">result-column</text>
+<path d="M481,182A15 15 0 0 0 496 166A15 15 0 0 0 481 151A15 15 0 0 0 466 166A15 15 0 0 0 481 182Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="481" y="166" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="496,166 508,162 508,171" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,151 Q 560,166 545,166 L 517,166 L 502,166" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M466,166 L 406,166 Q 391,166 391,151 L 391,144 Q 391,129 398,129 L 406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="299,129 287,133 287,124" style="fill:rgb(0,0,0)"/>
+<path d="M208,129L293,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M299,129L406,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,212L280,212A15 15 0 0 0 295 197A15 15 0 0 0 280 182L265,182A15 15 0 0 0 250 197A15 15 0 0 0 265 212Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="197" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="348,197 337,201 337,192" style="fill:rgb(0,0,0)"/>
+<path d="M295,197L342,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,197 L 356,197 Q 363,197 363,182 L 363,159 L 363,144" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="250,197 238,201 238,192" style="fill:rgb(0,0,0)"/>
+<path d="M208,129 L 216,129 Q 223,129 223,144 L 223,182 Q 223,197 233,197 L 244,197" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,287L203,287A15 15 0 0 0 218 272A15 15 0 0 0 203 257L168,257A15 15 0 0 0 153 272A15 15 0 0 0 168 287Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="186" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FROM</text>
+<polygon points="290,272 279,277 279,268" style="fill:rgb(0,0,0)"/>
+<path d="M218,272L284,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M290,287L451,287L451,257L290,257Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="272" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<path d="M320,362L422,362L422,331L320,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M371,324A15 15 0 0 0 386 309A15 15 0 0 0 371 293A15 15 0 0 0 356 309A15 15 0 0 0 371 324Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="371" y="309" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="386,309 397,304 397,313" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 459,272 Q 466,272 466,287 L 466,294 Q 466,309 451,309 L 407,309 L 392,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M356,309 L 279,309 Q 264,309 264,294 L 264,287 Q 264,272 271,272 L 279,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="320,346 308,351 308,342" style="fill:rgb(0,0,0)"/>
+<path d="M218,272 L 226,272 Q 233,272 233,287 L 233,331 Q 233,346 248,346 L 299,346 L 314,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="484,313 488,325 480,325" style="fill:rgb(0,0,0)"/>
+<path d="M422,346 L 436,346 Q 451,346 466,346 L 469,346 Q 484,346 484,333 L 484,319" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="505,272 494,277 494,268" style="fill:rgb(0,0,0)"/>
+<path d="M484,313 L 484,287 Q 484,272 492,272 L 499,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M505,272 L 496,272 Q 487,272 487,272 Q 487,272 495,272 L 502,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="560,197 555,185 564,185" style="fill:rgb(0,0,0)"/>
+<path d="M545,129 L 552,129 Q 560,129 560,144 L 560,176 L 560,191" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,235 360,230 360,239" style="fill:rgb(0,0,0)"/>
+<path d="M560,197 L 560,220 Q 560,235 545,235 L 369,235 L 354,235" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,272 142,277 142,268" style="fill:rgb(0,0,0)"/>
+<path d="M348,235 L 142,235 Q 127,235 127,250 L 127,257 Q 127,272 137,272 L 147,272" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,437L218,437A15 15 0 0 0 233 422A15 15 0 0 0 218 407L168,407A15 15 0 0 0 153 422A15 15 0 0 0 168 437Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="193" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WHERE</text>
+<polygon points="256,422 244,426 244,418" style="fill:rgb(0,0,0)"/>
+<path d="M233,422L250,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,437L305,437L305,407L256,407Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="280" y="422" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="517,324 513,312 521,312" style="fill:rgb(0,0,0)"/>
+<path d="M451,272 L 502,272 Q 517,272 517,287 L 517,303 L 517,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,384 382,380 382,389" style="fill:rgb(0,0,0)"/>
+<path d="M517,324 L 517,369 Q 517,384 502,384 L 391,384 L 376,384" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,422 142,426 142,418" style="fill:rgb(0,0,0)"/>
+<path d="M371,384 L 142,384 Q 127,384 127,399 L 127,407 Q 127,422 137,422 L 147,422" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,324 122,312 131,312" style="fill:rgb(0,0,0)"/>
+<path d="M127,257L127,318" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,324L127,407" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,535L212,535A15 15 0 0 0 227 520A15 15 0 0 0 212 505L168,505A15 15 0 0 0 153 520A15 15 0 0 0 168 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="250,520 238,525 238,516" style="fill:rgb(0,0,0)"/>
+<path d="M227,520L244,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M265,535L269,535A15 15 0 0 0 284 520A15 15 0 0 0 269 505L265,505A15 15 0 0 0 250 520A15 15 0 0 0 265 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="320,520 309,525 309,516" style="fill:rgb(0,0,0)"/>
+<path d="M284,520L314,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M320,535L369,535L369,505L320,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="452,520 441,525 441,516" style="fill:rgb(0,0,0)"/>
+<path d="M369,520L446,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M467,535L520,535A15 15 0 0 0 535 520A15 15 0 0 0 520 505L467,505A15 15 0 0 0 452 520A15 15 0 0 0 467 535Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="493" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">HAVING</text>
+<polygon points="558,520 546,525 546,516" style="fill:rgb(0,0,0)"/>
+<path d="M535,520L552,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M558,535L607,535L607,505L558,505Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="582" y="520" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M345,573A15 15 0 0 0 360 558A15 15 0 0 0 345 543A15 15 0 0 0 330 558A15 15 0 0 0 345 573Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="345" y="558" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="360,558 371,554 371,562" style="fill:rgb(0,0,0)"/>
+<path d="M369,520 L 377,520 Q 384,520 384,535 L 384,543 Q 384,558 375,558 L 366,558" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,558 L 309,558 Q 294,558 294,543 L 294,535 Q 294,520 301,520 L 309,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="514,551 503,555 503,546" style="fill:rgb(0,0,0)"/>
+<path d="M411,520 L 418,520 Q 426,520 426,535 L 426,536 Q 426,551 441,551 L 493,551 L 508,551" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M514,551 L 607,551 Q 622,551 622,536 L 622,535 Q 622,520 630,520 L 637,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="267,490 256,494 256,486" style="fill:rgb(0,0,0)"/>
+<path d="M127,460 L 127,475 Q 127,490 142,490 L 246,490 L 261,490" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="411,520 399,525 399,516" style="fill:rgb(0,0,0)"/>
+<path d="M267,490 L 369,490 Q 384,490 384,505 L 384,505 Q 384,520 395,520 L 405,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,460 244,455 244,464" style="fill:rgb(0,0,0)"/>
+<path d="M305,422 L 313,422 Q 320,422 320,437 L 320,445 Q 320,460 305,460 L 254,460 L 239,460" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,520 142,525 142,516" style="fill:rgb(0,0,0)"/>
+<path d="M233,460 L 142,460 Q 127,460 127,475 L 127,505 Q 127,520 137,520 L 147,520" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,447 122,435 131,435" style="fill:rgb(0,0,0)"/>
+<path d="M127,407L127,441" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,447L127,505" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M168,649L232,649A15 15 0 0 0 247 634A15 15 0 0 0 232 619L168,619A15 15 0 0 0 153 634A15 15 0 0 0 168 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="200" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">WINDOW</text>
+<polygon points="283,634 271,638 271,629" style="fill:rgb(0,0,0)"/>
+<path d="M247,634L277,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,649L395,649A15 15 0 0 0 410 634A15 15 0 0 0 395 619L298,619A15 15 0 0 0 283 634A15 15 0 0 0 298 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="346" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-name</text>
+<polygon points="433,634 422,638 422,629" style="fill:rgb(0,0,0)"/>
+<path d="M410,634L427,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,649L452,649A15 15 0 0 0 467 634A15 15 0 0 0 452 619L448,619A15 15 0 0 0 433 634A15 15 0 0 0 448 649Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="450" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="490,634 479,638 479,629" style="fill:rgb(0,0,0)"/>
+<path d="M467,634L485,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M490,649L609,649L609,619L490,619Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="550" y="634" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">window-defn</text>
+<path d="M446,687A15 15 0 0 0 461 671A15 15 0 0 0 446 656A15 15 0 0 0 431 671A15 15 0 0 0 446 687Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="446" y="671" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="461,671 472,667 472,676" style="fill:rgb(0,0,0)"/>
+<path d="M609,634 L 616,634 Q 624,634 624,649 L 624,656 Q 624,671 609,671 L 482,671 L 467,671" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M431,671 L 271,671 Q 256,671 256,656 L 256,649 Q 256,634 264,634 L 271,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="624,692 619,680 628,680" style="fill:rgb(0,0,0)"/>
+<path d="M624,656L624,686" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="652,558 648,547 656,547" style="fill:rgb(0,0,0)"/>
+<path d="M607,520 L 637,520 Q 652,520 652,535 L 652,537 L 652,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,596 382,592 382,600" style="fill:rgb(0,0,0)"/>
+<path d="M652,558 L 652,581 Q 652,596 637,596 L 391,596 L 376,596" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,634 142,638 142,629" style="fill:rgb(0,0,0)"/>
+<path d="M371,596 L 142,596 Q 127,596 127,611 L 127,619 Q 127,634 137,634 L 147,634" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,558 122,547 131,547" style="fill:rgb(0,0,0)"/>
+<path d="M127,505L127,552" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="371,709 359,714 359,705" style="fill:rgb(0,0,0)"/>
+<path d="M127,558 L 127,694 Q 127,709 142,709 L 350,709 L 365,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="609,709 597,714 597,705" style="fill:rgb(0,0,0)"/>
+<path d="M371,709L603,709" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,709 L 616,709 Q 624,709 624,717 L 624,724" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,800L194,800A15 15 0 0 0 209 785A15 15 0 0 0 194 770L142,770A15 15 0 0 0 127 785A15 15 0 0 0 142 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="168" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">VALUES</text>
+<polygon points="245,785 234,789 234,781" style="fill:rgb(0,0,0)"/>
+<path d="M209,785L239,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M260,800A15 15 0 0 0 275 785A15 15 0 0 0 260 770A15 15 0 0 0 245 785A15 15 0 0 0 260 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="311,785 300,789 300,781" style="fill:rgb(0,0,0)"/>
+<path d="M275,785L306,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M311,800L361,800L361,770L311,770Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="785" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="397,785 385,789 385,781" style="fill:rgb(0,0,0)"/>
+<path d="M361,785L391,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M412,800A15 15 0 0 0 427 785A15 15 0 0 0 412 770A15 15 0 0 0 397 785A15 15 0 0 0 412 800Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="412" y="785" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="609,785 597,789 597,781" style="fill:rgb(0,0,0)"/>
+<path d="M427,785L603,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M609,785 L 616,785 Q 624,785 624,792 L 624,800" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M336,762A15 15 0 0 0 351 747A15 15 0 0 0 336 732A15 15 0 0 0 321 747A15 15 0 0 0 336 762Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="747" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<path d="M336,838A15 15 0 0 0 351 823A15 15 0 0 0 336 808A15 15 0 0 0 321 823A15 15 0 0 0 336 838Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="823" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="351,747 363,743 363,751" style="fill:rgb(0,0,0)"/>
+<path d="M361,785 L 368,785 Q 376,785 376,770 L 376,762 Q 376,747 366,747 L 357,747" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,747 L 300,747 Q 285,747 285,762 L 285,770 Q 285,785 292,785 L 300,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,823 363,818 363,827" style="fill:rgb(0,0,0)"/>
+<path d="M427,785 L 434,785 Q 442,785 442,800 L 442,808 Q 442,823 427,823 L 372,823 L 357,823" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M321,823 L 234,823 Q 219,823 219,808 L 219,800 Q 219,785 226,785 L 234,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,785 115,789 115,781" style="fill:rgb(0,0,0)"/>
+<path d="M55,129 L 62,129 Q 70,129 70,144 L 70,770 Q 70,785 85,785 L 106,785 L 121,785" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M248,891L424,891L424,860L248,860Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="336" y="876" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">compound-operator</text>
+<polygon points="424,876 436,871 436,880" style="fill:rgb(0,0,0)"/>
+<path d="M624,692 L 624,861 Q 624,876 609,876 L 445,876 L 430,876" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="6,197 10,208 2,208" style="fill:rgb(0,0,0)"/>
+<path d="M248,876 L 21,876 Q 6,876 6,861 L 6,217 L 6,202" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M6,197 L 6,144 Q 6,129 21,129 L 40,129 L 55,129" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="667" y="275" text-anchor="middle" font-style="italic" fill="rgb(128,128,128)" transform="rotate(-90 667,285)" dominant-baseline="central">select-core</text>
+<path d="M168,966L213,966A15 15 0 0 0 228 951A15 15 0 0 0 213 936L168,936A15 15 0 0 0 153 951A15 15 0 0 0 168 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="251,951 239,956 239,947" style="fill:rgb(0,0,0)"/>
+<path d="M228,951L245,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M266,966L270,966A15 15 0 0 0 285 951A15 15 0 0 0 270 936L266,936A15 15 0 0 0 251 951A15 15 0 0 0 266 966Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="268" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<path d="M168,1072L202,1072A15 15 0 0 0 217 1057A15 15 0 0 0 202 1042L168,1042A15 15 0 0 0 153 1057A15 15 0 0 0 168 1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="185" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LIMIT</text>
+<polygon points="240,1057 228,1061 228,1053" style="fill:rgb(0,0,0)"/>
+<path d="M217,1057L234,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M240,1072L289,1072L289,1042L240,1042Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="264" y="1057" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="330,951 319,956 319,947" style="fill:rgb(0,0,0)"/>
+<path d="M285,951L324,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M330,966L460,966L460,936L330,936Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="951" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M395,1004A15 15 0 0 0 410 989A15 15 0 0 0 395 974A15 15 0 0 0 380 989A15 15 0 0 0 395 1004Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="395" y="989" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="410,989 422,985 422,993" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 468,951 Q 475,951 475,966 L 475,974 Q 475,989 460,989 L 431,989 L 416,989" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M380,989 L 322,989 Q 307,989 307,974 L 307,966 Q 307,951 313,951 L 319,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="336,913 348,909 348,918" style="fill:rgb(0,0,0)"/>
+<path d="M624,860 L 624,898 Q 624,913 609,913 L 357,913 L 342,913" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,951 142,956 142,947" style="fill:rgb(0,0,0)"/>
+<path d="M336,913 L 142,913 Q 127,913 127,928 L 127,936 Q 127,951 137,951 L 147,951" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="496,981 492,970 500,970" style="fill:rgb(0,0,0)"/>
+<path d="M460,951 L 481,951 Q 496,951 496,963 L 496,976" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="307,1023 318,1019 318,1027" style="fill:rgb(0,0,0)"/>
+<path d="M496,981 L 496,1008 Q 496,1023 481,1023 L 327,1023 L 312,1023" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,1057 142,1061 142,1053" style="fill:rgb(0,0,0)"/>
+<path d="M307,1023 L 142,1023 Q 127,1023 127,1038 L 127,1042 Q 127,1057 137,1057 L 147,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="127,989 122,978 131,978" style="fill:rgb(0,0,0)"/>
+<path d="M127,936L127,983" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M127,989L127,1042" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1102L415,1102A15 15 0 0 0 430 1087A15 15 0 0 0 415 1072L363,1072A15 15 0 0 0 348 1087A15 15 0 0 0 363 1102Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="389" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OFFSET</text>
+<polygon points="453,1087 441,1092 441,1083" style="fill:rgb(0,0,0)"/>
+<path d="M430,1087L447,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M453,1102L502,1102L502,1072L453,1072Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="1087" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="525,1087 513,1092 513,1083" style="fill:rgb(0,0,0)"/>
+<path d="M502,1087L519,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M363,1140A15 15 0 0 0 378 1125A15 15 0 0 0 363 1110A15 15 0 0 0 348 1125A15 15 0 0 0 363 1140Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="363" y="1125" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="401,1125 390,1129 390,1121" style="fill:rgb(0,0,0)"/>
+<path d="M378,1125L396,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M401,1140L451,1140L451,1110L401,1110Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="426" y="1125" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="312,1057 301,1061 301,1053" style="fill:rgb(0,0,0)"/>
+<path d="M289,1057L306,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1125 337,1129 337,1121" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1110 Q 327,1125 335,1125 L 342,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,1087 337,1092 337,1083" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057 L 320,1057 Q 327,1057 327,1072 L 327,1072 Q 327,1087 335,1087 L 342,1087" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1057 513,1061 513,1053" style="fill:rgb(0,0,0)"/>
+<path d="M312,1057L519,1057" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="620,1155 609,1160 609,1151" style="fill:rgb(0,0,0)"/>
+<path d="M525,1057 L 546,1057 Q 561,1057 561,1072 L 561,1140 Q 561,1155 576,1155 L 599,1155 L 614,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="624" cy="1155" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1087 L 546,1087 Q 561,1087 561,1095 L 561,1102" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1125 513,1129 513,1121" style="fill:rgb(0,0,0)"/>
+<path d="M451,1125L519,1125" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1125 L 546,1125 Q 561,1125 561,1133 L 561,1140" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="525,1155 513,1160 513,1151" style="fill:rgb(0,0,0)"/>
+<path d="M127,1042 L 127,1140 Q 127,1155 142,1155 L 504,1155 L 519,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M525,1155L597,1155" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
+<button id='x2453' onclick='hideorshow("x2453","x2454")'>show</button></p>
+ <div id='x2454' style='display:none;' class='imgcontainer'>
+ <div style="max-width:638px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 638.525 167.4">
+<circle cx="5" cy="29" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,29 20,33 20,24" style="fill:rgb(0,0,0)"/>
+<path d="M9,29L26,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,44L122,44A15 15 0 0 0 137 29A15 15 0 0 0 122 14L47,14A15 15 0 0 0 32 29A15 15 0 0 0 47 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="160,29 149,33 149,24" style="fill:rgb(0,0,0)"/>
+<path d="M137,29L155,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="196,29 185,33 185,24" style="fill:rgb(0,0,0)"/>
+<path d="M160,29L191,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M211,44A15 15 0 0 0 227 29A15 15 0 0 0 211 14A15 15 0 0 0 196 29A15 15 0 0 0 211 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="211" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="250,29 238,33 238,24" style="fill:rgb(0,0,0)"/>
+<path d="M227,29L244,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="286,29 274,33 274,24" style="fill:rgb(0,0,0)"/>
+<path d="M250,29L280,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M301,44L395,44A15 15 0 0 0 410 29A15 15 0 0 0 395 14L301,14A15 15 0 0 0 286 29A15 15 0 0 0 301 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="29" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="446,29 434,33 434,24" style="fill:rgb(0,0,0)"/>
+<path d="M410,29L440,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,44A15 15 0 0 0 476 29A15 15 0 0 0 461 14A15 15 0 0 0 446 29A15 15 0 0 0 461 44Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="461" y="29" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="511,29 499,33 499,24" style="fill:rgb(0,0,0)"/>
+<path d="M476,29L505,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,165L51,165A15 15 0 0 0 66 150A15 15 0 0 0 51 135L47,135A15 15 0 0 0 32 150A15 15 0 0 0 47 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="49" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<path d="M127,135L147,135A15 15 0 0 0 162 119A15 15 0 0 0 147 104L127,104A15 15 0 0 0 112 119A15 15 0 0 0 127 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<path d="M219,135L337,135A15 15 0 0 0 352 119A15 15 0 0 0 337 104L219,104A15 15 0 0 0 204 119A15 15 0 0 0 219 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="278" y="119" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">MATERIALIZED</text>
+<path d="M162,119L204,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M410,165A15 15 0 0 0 425 150A15 15 0 0 0 410 135A15 15 0 0 0 395 150A15 15 0 0 0 410 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="410" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="448,150 437,154 437,145" style="fill:rgb(0,0,0)"/>
+<path d="M425,150L442,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M448,165L552,165L552,135L448,135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="500" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="575,150 564,154 564,145" style="fill:rgb(0,0,0)"/>
+<path d="M552,150L570,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M591,165A15 15 0 0 0 606 150A15 15 0 0 0 591 135A15 15 0 0 0 575 150A15 15 0 0 0 591 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="591" y="150" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="629,150 617,154 617,145" style="fill:rgb(0,0,0)"/>
+<path d="M606,150L623,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="632" cy="150" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,82A15 15 0 0 0 363 66A15 15 0 0 0 348 51A15 15 0 0 0 333 66A15 15 0 0 0 348 82Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="348" y="66" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="363,66 374,62 374,71" style="fill:rgb(0,0,0)"/>
+<path d="M410,29 L 417,29 Q 425,29 425,44 L 425,51 Q 425,66 410,66 L 384,66 L 369,66" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M333,66 L 278,66 Q 263,66 263,51 L 263,44 Q 263,29 270,29 L 278,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,93 78,89 78,97" style="fill:rgb(0,0,0)"/>
+<path d="M511,29 L 516,29 Q 522,29 522,44 L 522,78 Q 522,93 507,93 L 87,93 L 72,93" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,150 20,154 20,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,93 L 30,93 Q 15,93 15,108 L 15,135 Q 15,150 20,150 L 26,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="85,150 73,154 73,145" style="fill:rgb(0,0,0)"/>
+<path d="M66,150L79,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="112,119 101,124 101,115" style="fill:rgb(0,0,0)"/>
+<path d="M85,150 L 89,150 Q 92,150 92,135 L 92,134 Q 92,119 99,119 L 106,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="204,119 192,124 192,115" style="fill:rgb(0,0,0)"/>
+<path d="M66,150 L 147,150 Q 162,150 170,150 Q 177,150 177,135 L 177,134 Q 177,119 188,119 L 198,119" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="395,150 383,154 383,145" style="fill:rgb(0,0,0)"/>
+<path d="M352,119 L 360,119 Q 367,119 367,134 L 367,135 Q 367,150 378,150 L 389,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,150L395,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="348,6 336,10 336,2" style="fill:rgb(0,0,0)"/>
+<path d="M160,29 L 168,29 Q 175,29 175,17 Q 175,6 190,6 L 327,6 L 342,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M348,6 L 473,6 Q 488,6 488,17 Q 488,29 495,29 L 503,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
+<button id='x2455' onclick='hideorshow("x2455","x2456")'>show</button></p>
+ <div id='x2456' style='display:none;' class='imgcontainer'>
+ <div style="max-width:293px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 293.842 147.96">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,17 56,21 56,12" style="fill:rgb(0,0,0)"/>
+<path d="M32,17L62,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M83,32L127,32A15 15 0 0 0 142 17A15 15 0 0 0 127 2L83,2A15 15 0 0 0 68 17A15 15 0 0 0 83 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,70L127,70A15 15 0 0 0 142 55L142,55A15 15 0 0 0 127 39L83,39A15 15 0 0 0 68 55L68,55A15 15 0 0 0 83 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="105" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNION</text>
+<path d="M83,108L168,108A15 15 0 0 0 183 92A15 15 0 0 0 168 77L83,77A15 15 0 0 0 68 92A15 15 0 0 0 83 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="125" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INTERSECT</text>
+<path d="M83,145L135,145A15 15 0 0 0 150 130A15 15 0 0 0 135 115L83,115A15 15 0 0 0 68 130A15 15 0 0 0 83 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="109" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCEPT</text>
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M142,55L159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70L195,70A15 15 0 0 0 210 55L210,55A15 15 0 0 0 195 39L180,39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="187" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ALL</text>
+<polygon points="233,55 221,59 221,50" style="fill:rgb(0,0,0)"/>
+<path d="M210,55L227,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="284,17 272,21 272,12" style="fill:rgb(0,0,0)"/>
+<path d="M233,55 L 240,55 Q 248,55 248,40 L 248,32 Q 248,17 263,17 L 263,17 L 278,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="288" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,55 56,59 56,50" style="fill:rgb(0,0,0)"/>
+<path d="M32,17 L 39,17 Q 47,17 47,32 L 47,40 Q 47,55 55,55 L 62,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,92 56,97 56,88" style="fill:rgb(0,0,0)"/>
+<path d="M47,39 L 47,77 Q 47,92 55,92 L 62,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,92 221,97 221,88" style="fill:rgb(0,0,0)"/>
+<path d="M183,92L227,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,92 L 240,92 Q 248,92 248,77 L 248,54 L 248,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="68,130 56,135 56,126" style="fill:rgb(0,0,0)"/>
+<path d="M47,77 L 47,115 Q 47,130 55,130 L 62,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="233,130 221,135 221,126" style="fill:rgb(0,0,0)"/>
+<path d="M150,130L227,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M233,130 L 240,130 Q 248,130 248,115 L 248,92 L 248,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
+<button id='x2457' onclick='hideorshow("x2457","x2458")'>show</button></p>
+ <div id='x2458' style='display:none;' class='imgcontainer'>
+ <div style="max-width:793px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 793.282 84.24">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L193,32L193,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="112" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="259,47 247,51 247,43" style="fill:rgb(0,0,0)"/>
+<path d="M193,17 L 200,17 Q 208,17 208,32 L 208,32 Q 208,47 223,47 L 238,47 L 253,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M259,62L380,62L380,32L259,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-operator</text>
+<polygon points="403,47 391,51 391,43" style="fill:rgb(0,0,0)"/>
+<path d="M380,47L397,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M403,62L564,62L564,32L403,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="483" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="587,47 575,51 575,43" style="fill:rgb(0,0,0)"/>
+<path d="M564,47L581,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M587,62L721,62L721,32L587,32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="654" y="47" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-constraint</text>
+<polygon points="783,17 772,21 772,12" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 742,47 Q 757,47 757,32 L 757,32 Q 757,17 767,17 L 778,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="787" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,17 472,21 472,12" style="fill:rgb(0,0,0)"/>
+<path d="M193,17L478,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,17L776,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="483,77 495,73 495,82" style="fill:rgb(0,0,0)"/>
+<path d="M721,47 L 728,47 Q 736,47 736,62 L 736,62 Q 736,77 721,77 L 504,77 L 489,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M483,77 L 247,77 Q 232,77 232,62 L 232,62 Q 232,47 246,47 L 259,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
+<button id='x2459' onclick='hideorshow("x2459","x2460")'>show</button></p>
+ <div id='x2460' style='display:none;' class='imgcontainer'>
+ <div style="max-width:483px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 483.336 126.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L104,70A15 15 0 0 0 120 55L120,55A15 15 0 0 0 104 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="85" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">USING</text>
+<polygon points="143,55 131,59 131,50" style="fill:rgb(0,0,0)"/>
+<path d="M120,55L137,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M158,70A15 15 0 0 0 173 55L173,55A15 15 0 0 0 158 39A15 15 0 0 0 143 55L143,55A15 15 0 0 0 158 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="209,55 197,59 197,50" style="fill:rgb(0,0,0)"/>
+<path d="M173,55L203,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M224,70L318,70A15 15 0 0 0 333 55L333,55A15 15 0 0 0 318 39L224,39A15 15 0 0 0 209 55L209,55A15 15 0 0 0 224 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-name</text>
+<polygon points="369,55 358,59 358,50" style="fill:rgb(0,0,0)"/>
+<path d="M333,55L363,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M384,70A15 15 0 0 0 399 55L399,55A15 15 0 0 0 384 39A15 15 0 0 0 369 55L369,55A15 15 0 0 0 384 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="384" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="422,55 411,59 411,50" style="fill:rgb(0,0,0)"/>
+<path d="M399,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="473,17 462,21 462,12" style="fill:rgb(0,0,0)"/>
+<path d="M422,55 L 430,55 Q 437,55 437,40 L 437,32 Q 437,17 452,17 L 453,17 L 468,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="477" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M271,108A15 15 0 0 0 286 92A15 15 0 0 0 271 77A15 15 0 0 0 256 92A15 15 0 0 0 271 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="271" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="286,92 298,88 298,97" style="fill:rgb(0,0,0)"/>
+<path d="M333,55 L 341,55 Q 348,55 348,70 L 348,77 Q 348,92 333,92 L 307,92 L 292,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M256,92 L 197,92 Q 182,92 182,77 L 182,70 Q 182,55 190,55 L 197,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L74,32A15 15 0 0 0 90 17A15 15 0 0 0 74 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="70" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ON</text>
+<polygon points="113,17 101,21 101,12" style="fill:rgb(0,0,0)"/>
+<path d="M90,17L107,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M113,32L162,32L162,2L113,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="137" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="422,17 411,21 411,12" style="fill:rgb(0,0,0)"/>
+<path d="M162,17L417,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,17L462,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="209,120 197,124 197,115" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,105 Q 24,120 39,120 L 188,120 L 203,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,120 L 422,120 Q 437,120 437,105 L 437,54 L 437,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
+<button id='x2461' onclick='hideorshow("x2461","x2462")'>show</button></p>
+ <div id='x2462' style='display:none;' class='imgcontainer'>
+ <div style="max-width:620px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 620.333 255.312">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,71 39,76 39,67" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,56 Q 24,71 34,71 L 45,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,86L133,86A15 15 0 0 0 148 71A15 15 0 0 0 133 56L66,56A15 15 0 0 0 50 71A15 15 0 0 0 66 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="99" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NATURAL</text>
+<polygon points="189,41 178,45 178,37" style="fill:rgb(0,0,0)"/>
+<path d="M148,71 L 155,71 Q 163,71 163,56 L 163,56 Q 163,41 173,41 L 184,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,71 219,76 219,67" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,56 Q 204,71 215,71 L 225,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,86L273,86A15 15 0 0 0 288 71A15 15 0 0 0 273 56L246,56A15 15 0 0 0 231 71A15 15 0 0 0 246 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="259" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LEFT</text>
+<polygon points="378,71 366,76 366,67" style="fill:rgb(0,0,0)"/>
+<path d="M288,71L372,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M393,86L437,86A15 15 0 0 0 452 71A15 15 0 0 0 437 56L393,56A15 15 0 0 0 378 71A15 15 0 0 0 393 86Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="415" y="71" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OUTER</text>
+<polygon points="475,71 463,76 463,67" style="fill:rgb(0,0,0)"/>
+<path d="M452,71L469,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="516,41 505,45 505,37" style="fill:rgb(0,0,0)"/>
+<path d="M475,71 L 482,71 Q 490,71 490,56 L 490,56 Q 490,41 500,41 L 511,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M532,56L554,56A15 15 0 0 0 569 41A15 15 0 0 0 554 26L532,26A15 15 0 0 0 516 41A15 15 0 0 0 532 56Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="543" y="41" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">JOIN</text>
+<polygon points="610,17 599,21 599,12" style="fill:rgb(0,0,0)"/>
+<path d="M569,41 L 576,41 Q 584,41 584,29 Q 584,17 594,17 L 605,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="614" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M310,32A15 15 0 0 0 325 17A15 15 0 0 0 310 2A15 15 0 0 0 295 17A15 15 0 0 0 310 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="310" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="295,17 283,21 283,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L289,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M325,17L599,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="99,41 88,45 88,37" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,29 Q 24,41 39,41 L 78,41 L 93,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M99,41L178,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M189,41L505,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="378,41 366,45 366,37" style="fill:rgb(0,0,0)"/>
+<path d="M336,71 L 344,71 Q 351,71 351,56 L 351,56 Q 351,41 362,41 L 372,41" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,109 219,113 219,105" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,94 Q 204,109 215,109 L 225,109" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,124L284,124A15 15 0 0 0 299 109A15 15 0 0 0 284 94L246,94A15 15 0 0 0 231 109A15 15 0 0 0 246 124Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="109" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RIGHT</text>
+<polygon points="341,71 329,76 329,67" style="fill:rgb(0,0,0)"/>
+<path d="M299,109 L 307,109 Q 314,109 314,94 L 314,86 Q 314,71 324,71 L 335,71" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,147 219,151 219,142" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,132 Q 204,147 215,147 L 225,147" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,162L274,162A15 15 0 0 0 289 147A15 15 0 0 0 274 132L246,132A15 15 0 0 0 231 147A15 15 0 0 0 246 162Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="260" y="147" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FULL</text>
+<path d="M289,147 L 302,147 Q 314,147 314,132 L 314,109 L 314,94" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,192 219,196 219,188" style="fill:rgb(0,0,0)"/>
+<path d="M189,41 L 197,41 Q 204,41 204,56 L 204,177 Q 204,192 215,192 L 225,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,207L287,207A15 15 0 0 0 302 192A15 15 0 0 0 287 177L246,177A15 15 0 0 0 231 192A15 15 0 0 0 246 207Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="192" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INNER</text>
+<polygon points="475,192 463,196 463,188" style="fill:rgb(0,0,0)"/>
+<path d="M302,192L469,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,192 L 482,192 Q 490,192 490,185 L 490,177" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="231,238 219,242 219,233" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,223 Q 24,238 39,238 L 210,238 L 225,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,253L287,253A15 15 0 0 0 303 238A15 15 0 0 0 287 222L246,222A15 15 0 0 0 231 238A15 15 0 0 0 246 253Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="267" y="238" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CROSS</text>
+<polygon points="475,238 463,242 463,233" style="fill:rgb(0,0,0)"/>
+<path d="M303,238L469,238" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M475,238 L 482,238 Q 490,238 490,223 L 490,71 L 490,56" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
+<button id='x2463' onclick='hideorshow("x2463","x2464")'>show</button></p>
+ <div id='x2464' style='display:none;' class='imgcontainer'>
+ <div style="max-width:798px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 798.451 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M32,32L81,32L81,2L32,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="56" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="111,44 100,48 100,40" style="fill:rgb(0,0,0)"/>
+<path d="M81,17 L 89,17 Q 96,17 96,30 Q 96,44 101,44 L 105,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M126,59L190,59A15 15 0 0 0 205 44L205,44A15 15 0 0 0 190 29L126,29A15 15 0 0 0 111 44L111,44A15 15 0 0 0 126 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="158" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">COLLATE</text>
+<polygon points="228,44 217,48 217,40" style="fill:rgb(0,0,0)"/>
+<path d="M205,44L223,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M244,59L349,59A15 15 0 0 0 364 44L364,44A15 15 0 0 0 349 29L244,29A15 15 0 0 0 228 44L228,44A15 15 0 0 0 244 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="296" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">collation-name</text>
+<polygon points="406,17 394,21 394,12" style="fill:rgb(0,0,0)"/>
+<path d="M364,44 L 372,44 Q 379,44 379,30 Q 379,17 389,17 L 400,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="243,17 232,21 232,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,17L238,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M243,17L394,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="447,82 436,86 436,77" style="fill:rgb(0,0,0)"/>
+<path d="M406,17 L 413,17 Q 421,17 421,32 L 421,67 Q 421,82 431,82 L 441,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,97L492,97A15 15 0 0 0 508 82A15 15 0 0 0 492 67L462,67A15 15 0 0 0 447 82A15 15 0 0 0 462 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="477" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">DESC</text>
+<polygon points="549,17 538,21 538,12" style="fill:rgb(0,0,0)"/>
+<path d="M508,82 L 515,82 Q 523,82 523,67 L 523,32 Q 523,17 533,17 L 543,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M462,59L479,59A15 15 0 0 0 494 44L494,44A15 15 0 0 0 479 29L462,29A15 15 0 0 0 447 44L447,44A15 15 0 0 0 462 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="471" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ASC</text>
+<polygon points="447,44 436,48 436,40" style="fill:rgb(0,0,0)"/>
+<path d="M421,29 L 421,36 Q 421,44 431,44 L 441,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M494,44 L 508,44 Q 523,44 523,36 L 523,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="477,17 466,21 466,12" style="fill:rgb(0,0,0)"/>
+<path d="M406,17L472,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M477,17L538,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="591,44 579,48 579,40" style="fill:rgb(0,0,0)"/>
+<path d="M549,17 L 557,17 Q 564,17 564,30 Q 564,44 574,44 L 585,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,59L648,59A15 15 0 0 0 663 44L663,44A15 15 0 0 0 648 29L606,29A15 15 0 0 0 591 44L591,44A15 15 0 0 0 606 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,44 674,48 674,40" style="fill:rgb(0,0,0)"/>
+<path d="M663,44L680,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,59L735,59A15 15 0 0 0 750 44L750,44A15 15 0 0 0 735 29L701,29A15 15 0 0 0 686 44L686,44A15 15 0 0 0 701 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="718" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FIRST</text>
+<polygon points="791,17 780,21 780,12" style="fill:rgb(0,0,0)"/>
+<path d="M750,44 L 757,44 Q 765,44 765,30 Q 765,17 775,17 L 786,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M606,97L648,97A15 15 0 0 0 663 82A15 15 0 0 0 648 67L606,67A15 15 0 0 0 591 82A15 15 0 0 0 606 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="627" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NULLS</text>
+<polygon points="686,82 674,86 674,77" style="fill:rgb(0,0,0)"/>
+<path d="M663,82L680,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M701,97L727,97A15 15 0 0 0 742 82A15 15 0 0 0 727 67L701,67A15 15 0 0 0 686 82A15 15 0 0 0 701 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="714" y="82" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">LAST</text>
+<polygon points="591,82 579,86 579,77" style="fill:rgb(0,0,0)"/>
+<path d="M564,29 L 564,67 Q 564,82 574,82 L 585,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M742,82 L 754,82 Q 765,82 765,67 L 765,44 L 765,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="670,17 659,21 659,12" style="fill:rgb(0,0,0)"/>
+<path d="M549,17L665,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M670,17L780,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/result-column.html">result-column:</a></b>
+<button id='x2465' onclick='hideorshow("x2465","x2466")'>show</button></p>
+ <div id='x2466' style='display:none;' class='imgcontainer'>
+ <div style="max-width:398px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 398.054 163.08">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M45,32L94,32L94,2L45,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="69" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="136,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M94,17 L 102,17 Q 109,17 109,32 L 109,40 Q 109,55 119,55 L 130,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M151,70L155,70A15 15 0 0 0 170 55L170,55A15 15 0 0 0 155 39L151,39A15 15 0 0 0 136 55L136,55A15 15 0 0 0 151 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="153" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="206,55 194,59 194,50" style="fill:rgb(0,0,0)"/>
+<path d="M170,55L200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M221,70L309,70A15 15 0 0 0 324 55L324,55A15 15 0 0 0 309 39L221,39A15 15 0 0 0 206 55L206,55A15 15 0 0 0 221 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="265" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">column-alias</text>
+<polygon points="347,55 335,59 335,50" style="fill:rgb(0,0,0)"/>
+<path d="M324,55L341,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="388,17 377,21 377,12" style="fill:rgb(0,0,0)"/>
+<path d="M347,55 L 354,55 Q 362,55 362,40 L 362,32 Q 362,17 372,17 L 382,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="392" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="153,85 141,89 141,81" style="fill:rgb(0,0,0)"/>
+<path d="M109,39 L 109,70 Q 109,85 124,85 L 132,85 L 147,85" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M153,85 L 170,85 Q 185,85 185,70 L 185,70 Q 185,55 192,55 L 200,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="241,17 230,21 230,12" style="fill:rgb(0,0,0)"/>
+<path d="M94,17L235,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M241,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,108 39,112 39,103" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,93 Q 24,108 34,108 L 45,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,123A15 15 0 0 0 81 108A15 15 0 0 0 66 92A15 15 0 0 0 50 108A15 15 0 0 0 66 123Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="108" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,108 335,112 335,103" style="fill:rgb(0,0,0)"/>
+<path d="M81,108L341,108" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,108 L 354,108 Q 362,108 362,93 L 362,54 L 362,39" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,145 39,150 39,141" style="fill:rgb(0,0,0)"/>
+<path d="M24,92 L 24,130 Q 24,145 34,145 L 45,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,160L141,160A15 15 0 0 0 156 145A15 15 0 0 0 141 130L66,130A15 15 0 0 0 50 145A15 15 0 0 0 66 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="103" y="145" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="179,145 167,150 167,141" style="fill:rgb(0,0,0)"/>
+<path d="M156,145L173,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M194,160A15 15 0 0 0 209 145A15 15 0 0 0 194 130A15 15 0 0 0 179 145A15 15 0 0 0 194 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="194" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="232,145 221,150 221,141" style="fill:rgb(0,0,0)"/>
+<path d="M209,145L226,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M247,160A15 15 0 0 0 262 145A15 15 0 0 0 247 130A15 15 0 0 0 232 145A15 15 0 0 0 247 160Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="247" y="145" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">*</text>
+<polygon points="347,145 335,150 335,141" style="fill:rgb(0,0,0)"/>
+<path d="M262,145L341,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M347,145 L 354,145 Q 362,145 362,130 L 362,107 L 362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
+<button id='x2467' onclick='hideorshow("x2467","x2468")'>show</button></p>
+ <div id='x2468' style='display:none;' class='imgcontainer'>
+ <div style="max-width:720px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 720.778 457.704">
+<circle cx="5" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,74 39,78 39,70" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,59 Q 24,74 34,74 L 45,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,89L162,89A15 15 0 0 0 177 74L177,74A15 15 0 0 0 162 59L66,59A15 15 0 0 0 50 74L50,74A15 15 0 0 0 66 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="114" y="74" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">schema-name</text>
+<polygon points="194,74 183,78 183,70" style="fill:rgb(0,0,0)"/>
+<path d="M177,74L189,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M209,89A15 15 0 0 0 225 74L225,74A15 15 0 0 0 209 59A15 15 0 0 0 194 74L194,74A15 15 0 0 0 209 89Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="209" y="74" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">.</text>
+<polygon points="266,36 255,41 255,32" style="fill:rgb(0,0,0)"/>
+<path d="M225,74 L 232,74 Q 240,74 240,59 L 240,51 Q 240,36 250,36 L 260,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,51L356,51A15 15 0 0 0 371 36A15 15 0 0 0 356 21L281,21A15 15 0 0 0 266 36A15 15 0 0 0 281 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="319" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-name</text>
+<polygon points="407,36 396,41 396,32" style="fill:rgb(0,0,0)"/>
+<path d="M371,36L402,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M423,51L427,51A15 15 0 0 0 442 36A15 15 0 0 0 427 21L423,21A15 15 0 0 0 407 36A15 15 0 0 0 423 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="425" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="478,36 466,41 466,32" style="fill:rgb(0,0,0)"/>
+<path d="M442,36L472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M493,51L561,51A15 15 0 0 0 577 36A15 15 0 0 0 561 21L493,21A15 15 0 0 0 478 36A15 15 0 0 0 493 51Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="527" y="36" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<path d="M9,36L255,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="422,6 411,10 411,2" style="fill:rgb(0,0,0)"/>
+<path d="M371,36 L 379,36 Q 386,36 386,21 L 386,21 Q 386,6 401,6 L 402,6 L 417,6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 442,6 Q 457,6 457,21 L 457,21 Q 457,36 464,36 L 472,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M422,6 L 577,6 Q 592,6 592,21 L 592,21 Q 592,36 599,36 L 607,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M323,127L388,127A15 15 0 0 0 403 112A15 15 0 0 0 388 97L323,97A15 15 0 0 0 308 112A15 15 0 0 0 323 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="426,112 415,116 415,108" style="fill:rgb(0,0,0)"/>
+<path d="M403,112L420,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M441,127L445,127A15 15 0 0 0 460 112A15 15 0 0 0 445 97L441,97A15 15 0 0 0 426 112A15 15 0 0 0 441 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="443" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="483,112 472,116 472,108" style="fill:rgb(0,0,0)"/>
+<path d="M460,112L478,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M499,127L577,127A15 15 0 0 0 592 112A15 15 0 0 0 577 97L499,97A15 15 0 0 0 483 112A15 15 0 0 0 499 127Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="538" y="112" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">index-name</text>
+<path d="M323,165L343,165A15 15 0 0 0 359 150A15 15 0 0 0 343 135L323,135A15 15 0 0 0 308 150A15 15 0 0 0 323 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="333" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NOT</text>
+<polygon points="382,150 370,154 370,145" style="fill:rgb(0,0,0)"/>
+<path d="M359,150L376,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M397,165L461,165A15 15 0 0 0 476 150A15 15 0 0 0 461 135L397,135A15 15 0 0 0 382 150A15 15 0 0 0 397 165Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="429" y="150" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">INDEXED</text>
+<polygon points="527,74 539,70 539,78" style="fill:rgb(0,0,0)"/>
+<path d="M577,36 L 607,36 Q 622,36 622,51 L 622,59 Q 622,74 607,74 L 548,74 L 533,74" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,150 297,154 297,145" style="fill:rgb(0,0,0)"/>
+<path d="M527,74 L 297,74 Q 282,74 282,89 L 282,135 Q 282,150 292,150 L 302,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="308,112 297,116 297,108" style="fill:rgb(0,0,0)"/>
+<path d="M282,97 L 282,104 Q 282,112 292,112 L 302,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="266,213 255,217 255,209" style="fill:rgb(0,0,0)"/>
+<path d="M9,36 L 16,36 Q 24,36 24,51 L 24,198 Q 24,213 39,213 L 245,213 L 260,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M281,228L431,228A15 15 0 0 0 446 213A15 15 0 0 0 431 198L281,198A15 15 0 0 0 266 213A15 15 0 0 0 281 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="356" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-function-name</text>
+<polygon points="463,213 452,217 452,209" style="fill:rgb(0,0,0)"/>
+<path d="M446,213L457,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M478,228A15 15 0 0 0 493 213A15 15 0 0 0 478 198A15 15 0 0 0 463 213A15 15 0 0 0 478 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="478" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="529,213 518,217 518,209" style="fill:rgb(0,0,0)"/>
+<path d="M493,213L524,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M529,228L579,228L579,198L529,198Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="213" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="615,213 603,217 603,209" style="fill:rgb(0,0,0)"/>
+<path d="M579,213L609,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M630,228A15 15 0 0 0 645 213A15 15 0 0 0 630 198A15 15 0 0 0 615 213A15 15 0 0 0 630 228Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="630" y="213" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="675,187 679,198 671,198" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 660,213 Q 675,213 675,203 L 675,192" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M554,190A15 15 0 0 0 569 175A15 15 0 0 0 554 160A15 15 0 0 0 539 175A15 15 0 0 0 554 190Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="554" y="175" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="569,175 581,171 581,180" style="fill:rgb(0,0,0)"/>
+<path d="M579,213 L 586,213 Q 594,213 594,198 L 594,190 Q 594,175 584,175 L 575,175" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M539,175 L 518,175 Q 503,175 503,190 L 503,198 Q 503,213 510,213 L 518,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M225,74 L 232,74 Q 240,74 240,89 L 240,198 Q 240,213 247,213 L 255,213" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,112 648,116 648,108" style="fill:rgb(0,0,0)"/>
+<path d="M592,112L654,112" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,112 L 667,112 Q 675,112 675,104 L 675,97" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,150 648,154 648,145" style="fill:rgb(0,0,0)"/>
+<path d="M476,150L654,150" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,150 L 667,150 Q 675,150 675,142 L 675,135" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M577,36L690,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M407,304L411,304A15 15 0 0 0 426 289A15 15 0 0 0 411 274L407,274A15 15 0 0 0 392 289A15 15 0 0 0 407 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="409" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AS</text>
+<polygon points="498,289 487,293 487,284" style="fill:rgb(0,0,0)"/>
+<path d="M426,289L492,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M513,304L582,304A15 15 0 0 0 597 289A15 15 0 0 0 582 274L513,274A15 15 0 0 0 498 289A15 15 0 0 0 513 304Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="548" y="289" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-alias</text>
+<polygon points="660,289 648,293 648,284" style="fill:rgb(0,0,0)"/>
+<path d="M597,289L654,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,289 L 667,289 Q 675,289 675,281 L 675,274" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="548,251 559,247 559,255" style="fill:rgb(0,0,0)"/>
+<path d="M645,213 L 652,213 Q 660,213 660,228 L 660,236 Q 660,251 645,251 L 568,251 L 553,251" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M548,251 L 370,251 Q 355,251 355,266 L 355,274 Q 355,289 370,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M472,251 L 464,251 Q 457,251 457,266 L 457,274 Q 457,289 464,289 L 472,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,327 39,331 39,322" style="fill:rgb(0,0,0)"/>
+<path d="M24,198 L 24,312 Q 24,327 34,327 L 45,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,342A15 15 0 0 0 81 327A15 15 0 0 0 66 311A15 15 0 0 0 50 327A15 15 0 0 0 66 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,327 92,331 92,322" style="fill:rgb(0,0,0)"/>
+<path d="M81,327L98,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,342L208,342L208,311L104,311Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="327" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">select-stmt</text>
+<polygon points="231,327 219,331 219,322" style="fill:rgb(0,0,0)"/>
+<path d="M208,327L225,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M246,342A15 15 0 0 0 261 327A15 15 0 0 0 246 311A15 15 0 0 0 231 327A15 15 0 0 0 246 342Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="246" y="327" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="392,289 380,293 380,284" style="fill:rgb(0,0,0)"/>
+<path d="M261,327 L 269,327 Q 276,327 276,312 L 276,304 Q 276,289 291,289 L 371,289 L 386,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="660,327 648,331 648,322" style="fill:rgb(0,0,0)"/>
+<path d="M261,327L654,327" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M660,327 L 667,327 Q 675,327 675,319 L 675,312" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M424,327 L 432,327 Q 439,327 439,312 L 439,304 Q 439,289 447,289 L 454,289" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,364 39,369 39,360" style="fill:rgb(0,0,0)"/>
+<path d="M24,311 L 24,349 Q 24,364 34,364 L 45,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M65,379A15 15 0 0 0 81 364A15 15 0 0 0 65 349A15 15 0 0 0 50 364A15 15 0 0 0 65 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="65" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="135,364 123,369 123,360" style="fill:rgb(0,0,0)"/>
+<path d="M81,364L129,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,379L296,379L296,349L135,349Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="364" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">table-or-subquery</text>
+<polygon points="350,364 338,369 338,360" style="fill:rgb(0,0,0)"/>
+<path d="M296,364L344,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M365,379A15 15 0 0 0 380 364A15 15 0 0 0 365 349A15 15 0 0 0 350 364A15 15 0 0 0 365 379Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="365" y="364" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="660,364 648,369 648,360" style="fill:rgb(0,0,0)"/>
+<path d="M380,364L654,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="711,36 699,41 699,32" style="fill:rgb(0,0,0)"/>
+<path d="M660,364 L 667,364 Q 675,364 675,349 L 675,51 Q 675,36 690,36 L 690,36 L 705,36" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="715" cy="36" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M215,417A15 15 0 0 0 230 402A15 15 0 0 0 215 387A15 15 0 0 0 200 402A15 15 0 0 0 215 417Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="215" y="402" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="230,402 242,398 242,406" style="fill:rgb(0,0,0)"/>
+<path d="M296,364 L 303,364 Q 311,364 311,379 L 311,387 Q 311,402 296,402 L 251,402 L 236,402" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M200,402 L 123,402 Q 108,402 108,387 L 108,379 Q 108,364 116,364 L 123,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="122,440 111,444 111,436" style="fill:rgb(0,0,0)"/>
+<path d="M81,364 L 88,364 Q 96,364 96,379 L 96,425 Q 96,440 106,440 L 116,440" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M122,455L224,455L224,425L122,425Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="173" y="440" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">join-clause</text>
+<path d="M224,440 L 308,440 Q 323,440 323,425 L 323,379 Q 323,364 331,364 L 338,364" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
+<button id='x2469' onclick='hideorshow("x2469","x2470")'>show</button></p>
+ <div id='x2470' style='display:none;' class='imgcontainer'>
+ <div style="max-width:479px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 479.765 380.592">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="32,17 20,21 20,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L26,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M47,32A15 15 0 0 0 62 17A15 15 0 0 0 47 2A15 15 0 0 0 32 17A15 15 0 0 0 47 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="47" y="17" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="104,44 92,48 92,40" style="fill:rgb(0,0,0)"/>
+<path d="M62,17 L 70,17 Q 77,17 77,30 Q 77,44 88,44 L 98,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,59L260,59A15 15 0 0 0 275 44L275,44A15 15 0 0 0 260 29L119,29A15 15 0 0 0 104 44L104,44A15 15 0 0 0 119 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="190" y="44" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">base-window-name</text>
+<path d="M119,135L198,135A15 15 0 0 0 214 120A15 15 0 0 0 198 104L119,104A15 15 0 0 0 104 120A15 15 0 0 0 119 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="159" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PARTITION</text>
+<polygon points="237,120 225,124 225,115" style="fill:rgb(0,0,0)"/>
+<path d="M214,120L231,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M252,135L256,135A15 15 0 0 0 271 120A15 15 0 0 0 256 104L252,104A15 15 0 0 0 237 120A15 15 0 0 0 252 135Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="254" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="307,120 295,124 295,115" style="fill:rgb(0,0,0)"/>
+<path d="M271,120L301,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M307,135L356,135L356,104L307,104Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="120" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<path d="M332,173A15 15 0 0 0 347 157A15 15 0 0 0 332 142A15 15 0 0 0 316 157A15 15 0 0 0 332 173Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="332" y="157" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="347,157 358,153 358,162" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,142 Q 371,157 362,157 L 352,157" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M316,157 L 295,157 Q 280,157 280,142 L 280,135 Q 280,120 288,120 L 295,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,17 178,21 178,12" style="fill:rgb(0,0,0)"/>
+<path d="M62,17L184,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,82 201,77 201,86" style="fill:rgb(0,0,0)"/>
+<path d="M190,17 L 298,17 Q 313,17 313,32 L 313,67 Q 313,82 298,82 L 210,82 L 195,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,120 92,124 92,115" style="fill:rgb(0,0,0)"/>
+<path d="M190,82 L 77,82 Q 62,82 62,97 L 62,105 Q 62,120 77,120 L 83,120 L 98,120" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="298,44 287,48 287,40" style="fill:rgb(0,0,0)"/>
+<path d="M275,44L293,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M298,44 L 306,44 Q 313,44 313,51 L 313,59" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M119,248L163,248A15 15 0 0 0 178 233A15 15 0 0 0 163 218L119,218A15 15 0 0 0 104 233A15 15 0 0 0 119 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="141" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ORDER</text>
+<polygon points="201,233 190,237 190,229" style="fill:rgb(0,0,0)"/>
+<path d="M178,233L196,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M217,248L221,248A15 15 0 0 0 236 233A15 15 0 0 0 221 218L217,218A15 15 0 0 0 201 233A15 15 0 0 0 217 248Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="219" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BY</text>
+<polygon points="272,233 260,237 260,229" style="fill:rgb(0,0,0)"/>
+<path d="M236,233L266,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M272,248L402,248L402,218L272,218Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="233" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ordering-term</text>
+<path d="M337,286A15 15 0 0 0 352 271A15 15 0 0 0 337 256A15 15 0 0 0 322 271A15 15 0 0 0 337 286Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="337" y="271" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="352,271 363,266 363,275" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,256 Q 417,271 402,271 L 373,271 L 358,271" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M322,271 L 260,271 Q 245,271 245,256 L 245,248 Q 245,233 253,233 L 260,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,195 201,191 201,200" style="fill:rgb(0,0,0)"/>
+<path d="M356,120 L 364,120 Q 371,120 371,135 L 371,180 Q 371,195 356,195 L 210,195 L 195,195" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,233 92,237 92,229" style="fill:rgb(0,0,0)"/>
+<path d="M190,195 L 77,195 Q 62,195 62,210 L 62,218 Q 62,233 77,233 L 83,233 L 98,233" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,157 58,146 66,146" style="fill:rgb(0,0,0)"/>
+<path d="M62,104L62,152" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,157L62,218" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M104,362L208,362L208,331L104,331Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="156" y="346" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">frame-spec</text>
+<polygon points="417,346 405,351 405,342" style="fill:rgb(0,0,0)"/>
+<path d="M208,346L411,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M432,362A15 15 0 0 0 447 346A15 15 0 0 0 432 331A15 15 0 0 0 417 346A15 15 0 0 0 432 362Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="432" y="346" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="470,346 458,351 458,342" style="fill:rgb(0,0,0)"/>
+<path d="M447,346L464,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="474" cy="346" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="190,309 201,304 201,313" style="fill:rgb(0,0,0)"/>
+<path d="M402,233 L 409,233 Q 417,233 417,248 L 417,294 Q 417,309 402,309 L 210,309 L 195,309" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="104,346 92,351 92,342" style="fill:rgb(0,0,0)"/>
+<path d="M190,309 L 77,309 Q 62,309 62,324 L 62,331 Q 62,346 77,346 L 83,346 L 98,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="62,271 58,259 66,259" style="fill:rgb(0,0,0)"/>
+<path d="M62,218L62,265" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M62,271L62,331" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="156,374 144,378 144,369" style="fill:rgb(0,0,0)"/>
+<path d="M62,331 L 62,359 Q 62,374 77,374 L 135,374 L 150,374" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="278,346 266,351 266,342" style="fill:rgb(0,0,0)"/>
+<path d="M156,374 L 233,374 Q 248,374 248,360 Q 248,346 260,346 L 272,346" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
+<button id='x2471' onclick='hideorshow("x2471","x2472")'>show</button></p>
+ <div id='x2472' style='display:none;' class='imgcontainer'>
+ <div style="max-width:1039px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 1039.65 522.72">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,92 39,97 39,88" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,77 Q 24,92 34,92 L 45,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,108L120,108A15 15 0 0 0 135 92A15 15 0 0 0 120 77L66,77A15 15 0 0 0 50 92A15 15 0 0 0 66 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="93" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUPS</text>
+<path d="M135,92 L 143,92 Q 150,92 150,77 L 150,32 Q 150,17 158,17 L 165,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,17 195,21 195,12" style="fill:rgb(0,0,0)"/>
+<path d="M165,17L201,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,32L294,32A15 15 0 0 0 309 17A15 15 0 0 0 294 2L222,2A15 15 0 0 0 207 17A15 15 0 0 0 222 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="258" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">BETWEEN</text>
+<polygon points="351,17 339,21 339,12" style="fill:rgb(0,0,0)"/>
+<path d="M309,17L345,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,32L467,32A15 15 0 0 0 482 17A15 15 0 0 0 467 2L366,2A15 15 0 0 0 351 17A15 15 0 0 0 366 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="417" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="500,17 488,21 488,12" style="fill:rgb(0,0,0)"/>
+<path d="M482,17L494,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M515,32L603,32A15 15 0 0 0 618 17A15 15 0 0 0 603 2L515,2A15 15 0 0 0 500 17A15 15 0 0 0 515 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="559" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="659,17 648,21 648,12" style="fill:rgb(0,0,0)"/>
+<path d="M618,17L653,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M674,32L695,32A15 15 0 0 0 710 17A15 15 0 0 0 695 2L674,2A15 15 0 0 0 659 17A15 15 0 0 0 674 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="685" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">AND</text>
+<polygon points="752,130 740,135 740,126" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,115 Q 725,130 735,130 L 746,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,145L868,145A15 15 0 0 0 883 130A15 15 0 0 0 868 115L767,115A15 15 0 0 0 752 130A15 15 0 0 0 767 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="817" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="900,130 889,135 889,126" style="fill:rgb(0,0,0)"/>
+<path d="M883,130L895,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M915,145L1007,145A15 15 0 0 0 1022 130A15 15 0 0 0 1007 115L915,115A15 15 0 0 0 900 130A15 15 0 0 0 915 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="961" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<path d="M1022,130 L 1029,130 Q 1037,130 1037,138 L 1037,145" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,17 39,21 39,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L45,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,32L109,32A15 15 0 0 0 125 17A15 15 0 0 0 109 2L66,2A15 15 0 0 0 50 17A15 15 0 0 0 66 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="87" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">RANGE</text>
+<polygon points="142,17 130,21 130,12" style="fill:rgb(0,0,0)"/>
+<path d="M125,17L136,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M142,17L157,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,55 39,59 39,50" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,40 Q 24,55 34,55 L 45,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,70L101,70A15 15 0 0 0 116 55L116,55A15 15 0 0 0 101 39L66,39A15 15 0 0 0 50 55L50,55A15 15 0 0 0 66 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="83" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROWS</text>
+<polygon points="135,55 124,59 124,50" style="fill:rgb(0,0,0)"/>
+<path d="M116,55L129,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M135,55 L 143,55 Q 150,55 150,47 L 150,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,168 195,172 195,164" style="fill:rgb(0,0,0)"/>
+<path d="M165,17 L 173,17 Q 180,17 180,32 L 180,153 Q 180,168 190,168 L 201,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,183L323,183A15 15 0 0 0 338 168A15 15 0 0 0 323 153L222,153A15 15 0 0 0 207 168A15 15 0 0 0 222 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="272" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">UNBOUNDED</text>
+<polygon points="361,168 350,172 350,164" style="fill:rgb(0,0,0)"/>
+<path d="M338,168L355,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M376,183L464,183A15 15 0 0 0 479 168A15 15 0 0 0 464 153L376,153A15 15 0 0 0 361 168A15 15 0 0 0 376 183Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="420" y="168" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,168 1010,172 1010,164" style="fill:rgb(0,0,0)"/>
+<path d="M479,168L1016,168" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,168 L 1029,168 Q 1037,168 1037,175 L 1037,183" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M207,221L256,221L256,191L207,191Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="231" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="279,206 267,210 267,201" style="fill:rgb(0,0,0)"/>
+<path d="M256,206L273,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M294,221L382,221A15 15 0 0 0 397 206A15 15 0 0 0 382 191L294,191A15 15 0 0 0 279 206A15 15 0 0 0 294 221Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="338" y="206" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,206 1010,210 1010,201" style="fill:rgb(0,0,0)"/>
+<path d="M397,206L1016,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,206 L 1029,206 Q 1037,206 1037,213 L 1037,221" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,206 195,210 195,201" style="fill:rgb(0,0,0)"/>
+<path d="M180,153 L 180,191 Q 180,206 190,206 L 201,206" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M222,259L292,259A15 15 0 0 0 307 244A15 15 0 0 0 292 228L222,228A15 15 0 0 0 207 244A15 15 0 0 0 222 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="257" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="330,244 318,248 318,239" style="fill:rgb(0,0,0)"/>
+<path d="M307,244L324,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M345,259L369,259A15 15 0 0 0 384 244A15 15 0 0 0 369 228L345,228A15 15 0 0 0 330 244A15 15 0 0 0 345 259Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="357" y="244" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,244 1010,248 1010,239" style="fill:rgb(0,0,0)"/>
+<path d="M384,244L1016,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,244 L 1029,244 Q 1037,244 1037,251 L 1037,259" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="207,244 195,248 195,239" style="fill:rgb(0,0,0)"/>
+<path d="M180,191 L 180,229 Q 180,244 190,244 L 201,244" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,70L400,70L400,39L351,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,55 412,59 412,50" style="fill:rgb(0,0,0)"/>
+<path d="M400,55L417,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,70L526,70A15 15 0 0 0 541 55A15 15 0 0 0 526 39L438,39A15 15 0 0 0 423 55A15 15 0 0 0 438 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="482" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="618,55 606,59 606,50" style="fill:rgb(0,0,0)"/>
+<path d="M541,55L612,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,55 L 625,55 Q 633,55 633,47 L 633,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,55 339,59 339,50" style="fill:rgb(0,0,0)"/>
+<path d="M309,17 L 317,17 Q 324,17 324,32 L 324,40 Q 324,55 335,55 L 345,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M366,107L436,107A15 15 0 0 0 451 92A15 15 0 0 0 436 77L366,77A15 15 0 0 0 351 92A15 15 0 0 0 366 107Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="401" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="474,92 462,97 462,88" style="fill:rgb(0,0,0)"/>
+<path d="M451,92L468,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M489,108L513,108A15 15 0 0 0 528 92A15 15 0 0 0 513 77L489,77A15 15 0 0 0 474 92A15 15 0 0 0 489 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="501" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="618,92 606,97 606,88" style="fill:rgb(0,0,0)"/>
+<path d="M528,92L612,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,92 L 625,92 Q 633,92 633,85 L 633,77" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,92 339,97 339,88" style="fill:rgb(0,0,0)"/>
+<path d="M324,39 L 324,77 Q 324,92 335,92 L 345,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M351,145L400,145L400,115L351,115Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="375" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="423,130 412,134 412,126" style="fill:rgb(0,0,0)"/>
+<path d="M400,130L417,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M438,145L530,145A15 15 0 0 0 545 130A15 15 0 0 0 530 115L438,115A15 15 0 0 0 423 130A15 15 0 0 0 438 145Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="130" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="618,130 606,134 606,126" style="fill:rgb(0,0,0)"/>
+<path d="M545,130L612,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M618,130 L 625,130 Q 633,130 633,115 L 633,32 Q 633,17 640,17 L 648,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="351,130 339,134 339,126" style="fill:rgb(0,0,0)"/>
+<path d="M324,77 L 324,115 Q 324,130 335,130 L 345,130" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,17 740,21 740,12" style="fill:rgb(0,0,0)"/>
+<path d="M710,17L746,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,32L801,32L801,2L752,2Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,17 812,21 812,12" style="fill:rgb(0,0,0)"/>
+<path d="M801,17L818,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,32L927,32A15 15 0 0 0 942 17A15 15 0 0 0 927 2L839,2A15 15 0 0 0 824 17A15 15 0 0 0 839 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="883" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">PRECEDING</text>
+<polygon points="1022,17 1010,21 1010,12" style="fill:rgb(0,0,0)"/>
+<path d="M942,17L1016,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,17 L 1029,17 Q 1037,17 1037,32 L 1037,289 Q 1037,304 1022,304 L 1016,304 L 1001,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,70L837,70A15 15 0 0 0 852 55A15 15 0 0 0 837 39L767,39A15 15 0 0 0 752 55A15 15 0 0 0 767 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="802" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="875,55 863,59 863,50" style="fill:rgb(0,0,0)"/>
+<path d="M852,55L869,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M890,70L914,70A15 15 0 0 0 929 55A15 15 0 0 0 914 39L890,39A15 15 0 0 0 875 55A15 15 0 0 0 890 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="902" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="1022,55 1010,59 1010,50" style="fill:rgb(0,0,0)"/>
+<path d="M929,55L1016,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,55 L 1029,55 Q 1037,55 1037,62 L 1037,70" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,55 740,59 740,50" style="fill:rgb(0,0,0)"/>
+<path d="M710,17 L 718,17 Q 725,17 725,32 L 725,40 Q 725,55 735,55 L 746,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M752,107L801,107L801,77L752,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="776" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">expr</text>
+<polygon points="824,92 812,97 812,88" style="fill:rgb(0,0,0)"/>
+<path d="M801,92L818,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M839,108L930,108A15 15 0 0 0 945 92A15 15 0 0 0 930 77L839,77A15 15 0 0 0 824 92A15 15 0 0 0 839 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="885" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">FOLLOWING</text>
+<polygon points="1022,92 1010,97 1010,88" style="fill:rgb(0,0,0)"/>
+<path d="M945,92L1016,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M1022,92 L 1029,92 Q 1037,92 1037,100 L 1037,107" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="752,92 740,97 740,88" style="fill:rgb(0,0,0)"/>
+<path d="M725,39 L 725,77 Q 725,92 735,92 L 746,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,410L529,410A15 15 0 0 0 544 395A15 15 0 0 0 529 380L461,380A15 15 0 0 0 446 395A15 15 0 0 0 461 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,395 555,399 555,390" style="fill:rgb(0,0,0)"/>
+<path d="M544,395L561,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,410L652,410A15 15 0 0 0 667 395A15 15 0 0 0 652 380L582,380A15 15 0 0 0 567 395A15 15 0 0 0 582 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="617" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">CURRENT</text>
+<polygon points="690,395 678,399 678,390" style="fill:rgb(0,0,0)"/>
+<path d="M667,395L684,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M705,410L729,410A15 15 0 0 0 744 395A15 15 0 0 0 729 380L705,380A15 15 0 0 0 690 395A15 15 0 0 0 705 410Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="717" y="395" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">ROW</text>
+<polygon points="767,395 756,399 756,390" style="fill:rgb(0,0,0)"/>
+<path d="M744,395L762,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,395 L 775,395 Q 782,395 782,402 L 782,410" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,448L529,448A15 15 0 0 0 544 433A15 15 0 0 0 529 417L461,417A15 15 0 0 0 446 433A15 15 0 0 0 461 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,433 555,437 555,428" style="fill:rgb(0,0,0)"/>
+<path d="M544,433L561,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,448L625,448A15 15 0 0 0 640 433A15 15 0 0 0 625 417L582,417A15 15 0 0 0 567 433A15 15 0 0 0 582 448Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="604" y="433" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">GROUP</text>
+<polygon points="767,433 756,437 756,428" style="fill:rgb(0,0,0)"/>
+<path d="M640,433L762,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,433 L 775,433 Q 782,433 782,440 L 782,448" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,486L529,486A15 15 0 0 0 544 470A15 15 0 0 0 529 455L461,455A15 15 0 0 0 446 470A15 15 0 0 0 461 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,470 555,475 555,466" style="fill:rgb(0,0,0)"/>
+<path d="M544,470L561,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,486L604,486A15 15 0 0 0 619 470A15 15 0 0 0 604 455L582,455A15 15 0 0 0 567 470A15 15 0 0 0 582 486Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="593" y="470" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">TIES</text>
+<polygon points="767,470 756,475 756,466" style="fill:rgb(0,0,0)"/>
+<path d="M619,470L762,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M767,470 L 775,470 Q 782,470 782,478 L 782,485" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M461,372L529,372A15 15 0 0 0 544 357A15 15 0 0 0 529 342L461,342A15 15 0 0 0 446 357A15 15 0 0 0 461 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="495" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">EXCLUDE</text>
+<polygon points="567,357 555,361 555,353" style="fill:rgb(0,0,0)"/>
+<path d="M544,357L561,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M582,372L591,372A15 15 0 0 0 606 357A15 15 0 0 0 591 342L582,342A15 15 0 0 0 567 357A15 15 0 0 0 582 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="586" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">NO</text>
+<polygon points="629,357 617,361 617,353" style="fill:rgb(0,0,0)"/>
+<path d="M606,357L623,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M644,372L700,372A15 15 0 0 0 715 357A15 15 0 0 0 700 342L644,342A15 15 0 0 0 629 357A15 15 0 0 0 644 372Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="672" y="357" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">OTHERS</text>
+<polygon points="767,357 756,361 756,353" style="fill:rgb(0,0,0)"/>
+<path d="M715,357L762,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="890,516 879,520 879,511" style="fill:rgb(0,0,0)"/>
+<path d="M767,357 L 775,357 Q 782,357 782,372 L 782,501 Q 782,516 797,516 L 870,516 L 885,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="894" cy="516" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="710,304 722,300 722,308" style="fill:rgb(0,0,0)"/>
+<path d="M1001,304L716,304" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="527,516 516,520 516,511" style="fill:rgb(0,0,0)"/>
+<path d="M710,304 L 434,304 Q 419,304 419,319 L 419,501 Q 419,516 434,516 L 507,516 L 522,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M527,516L797,516" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,357 434,361 434,353" style="fill:rgb(0,0,0)"/>
+<path d="M419,342 L 419,349 Q 419,357 430,357 L 440,357" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,395 434,399 434,390" style="fill:rgb(0,0,0)"/>
+<path d="M419,380 L 419,387 Q 419,395 430,395 L 440,395" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,433 434,437 434,428" style="fill:rgb(0,0,0)"/>
+<path d="M419,417 L 419,425 Q 419,433 430,433 L 440,433" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="446,470 434,475 434,466" style="fill:rgb(0,0,0)"/>
+<path d="M419,455 L 419,463 Q 419,470 430,470 L 440,470" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+<p><b><a href="syntax/type-name.html">type-name:</a></b>
+<button id='x2473' onclick='hideorshow("x2473","x2474")'>show</button></p>
+ <div id='x2474' style='display:none;' class='imgcontainer'>
+ <div style="max-width:661px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 661.008 110.16">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="45,17 33,21 33,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L39,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M60,32L87,32A15 15 0 0 0 102 17A15 15 0 0 0 87 2L60,2A15 15 0 0 0 45 17A15 15 0 0 0 60 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="74" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">name</text>
+<polygon points="165,92 153,97 153,88" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,77 Q 138,92 149,92 L 159,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,108A15 15 0 0 0 195 92A15 15 0 0 0 180 77A15 15 0 0 0 165 92A15 15 0 0 0 180 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,92 201,97 201,88" style="fill:rgb(0,0,0)"/>
+<path d="M195,92L207,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,108L350,108L350,77L212,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,92 356,97 356,88" style="fill:rgb(0,0,0)"/>
+<path d="M350,92L362,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,108A15 15 0 0 0 398 92A15 15 0 0 0 382 77A15 15 0 0 0 367 92A15 15 0 0 0 382 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">,</text>
+<polygon points="415,92 403,97 403,88" style="fill:rgb(0,0,0)"/>
+<path d="M398,92L409,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M415,108L553,108L553,77L415,77Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="484" y="92" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="570,92 558,97 558,88" style="fill:rgb(0,0,0)"/>
+<path d="M553,92L564,92" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M585,108A15 15 0 0 0 600 92A15 15 0 0 0 585 77A15 15 0 0 0 570 92A15 15 0 0 0 585 108Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="585" y="92" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="651,17 640,21 640,12" style="fill:rgb(0,0,0)"/>
+<path d="M600,92 L 608,92 Q 615,92 615,77 L 615,32 Q 615,17 630,17 L 630,17 L 645,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="655" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="165,55 153,59 153,50" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 123,17 Q 138,17 138,32 L 138,40 Q 138,55 149,55 L 159,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M180,70A15 15 0 0 0 195 55L195,55A15 15 0 0 0 180 39A15 15 0 0 0 165 55L165,55A15 15 0 0 0 180 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="180" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">(</text>
+<polygon points="212,55 201,59 201,50" style="fill:rgb(0,0,0)"/>
+<path d="M195,55L207,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M212,70L350,70L350,39L212,39Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="281" y="55" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">signed-number</text>
+<polygon points="367,55 356,59 356,50" style="fill:rgb(0,0,0)"/>
+<path d="M350,55L362,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,70A15 15 0 0 0 398 55L398,55A15 15 0 0 0 382 39A15 15 0 0 0 367 55L367,55A15 15 0 0 0 382 70Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="382" y="55" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">)</text>
+<polygon points="600,55 589,59 589,50" style="fill:rgb(0,0,0)"/>
+<path d="M398,55L594,55" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M600,55 L 608,55 Q 615,55 615,47 L 615,40" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="74,47 85,43 85,51" style="fill:rgb(0,0,0)"/>
+<path d="M102,17 L 110,17 Q 117,17 117,32 L 117,32 Q 117,47 102,47 L 94,47 L 79,47" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M74,47 L 33,47 Q 18,47 18,32 L 18,32 Q 18,17 26,17 L 33,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="382,17 371,21 371,12" style="fill:rgb(0,0,0)"/>
+<path d="M102,17L377,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M382,17L630,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
+<button id='x2475' onclick='hideorshow("x2475","x2476")'>show</button></p>
+ <div id='x2476' style='display:none;' class='imgcontainer'>
+ <div style="max-width:292px"><svg xmlns='http://www.w3.org/2000/svg' class="pikchr" viewBox="0 0 292.013 99.576">
+<circle cx="5" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,44 39,48 39,40" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,30 Q 24,44 34,44 L 45,44" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,59A15 15 0 0 0 81 44L81,44A15 15 0 0 0 66 29A15 15 0 0 0 50 44L50,44A15 15 0 0 0 66 59Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="44" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">+</text>
+<polygon points="122,17 111,21 111,12" style="fill:rgb(0,0,0)"/>
+<path d="M81,44 L 88,44 Q 96,44 96,30 Q 96,17 106,17 L 116,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M137,32L244,32A15 15 0 0 0 259 17A15 15 0 0 0 244 2L137,2A15 15 0 0 0 122 17A15 15 0 0 0 137 32Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="191" y="17" text-anchor="middle" fill="rgb(0,0,0)" dominant-baseline="central">numeric-literal</text>
+<polygon points="282,17 271,21 271,12" style="fill:rgb(0,0,0)"/>
+<path d="M259,17L276,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<circle cx="286" cy="17" r="3.6" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="50,82 39,86 39,77" style="fill:rgb(0,0,0)"/>
+<path d="M9,17 L 16,17 Q 24,17 24,32 L 24,67 Q 24,82 34,82 L 45,82" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,97A15 15 0 0 0 81 82L81,82A15 15 0 0 0 66 67A15 15 0 0 0 50 82L50,82A15 15 0 0 0 66 97Z" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<text x="66" y="82" text-anchor="middle" font-weight="bold" fill="rgb(0,0,0)" dominant-baseline="central">-</text>
+<path d="M81,82 L 88,82 Q 96,82 96,67 L 96,44 L 96,29" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<polygon points="66,17 54,21 54,12" style="fill:rgb(0,0,0)"/>
+<path d="M9,17L60,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+<path d="M66,17L111,17" style="fill:none;stroke-width:2.16;stroke:rgb(0,0,0);" />
+</svg>
+</div>
+</div>
+</div>
+</div>
+</div>
+
+
+<p>If a FILTER clause is provided, then only rows for which the <i>expr</i> is
+true are included in the window frame. The aggregate window still returns a
+value for every row, but those for which the FILTER expression evaluates to
+other than true are not included in the window frame for any row. For example:
+
+</p><div class="codeblock"><pre><i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- c | a | b | group_concat</i>
+---------------------------------
+<i>-- one | 1 | A | A </i>
+<i>-- two | 2 | B | A </i>
+<i>-- three | 3 | C | A.C </i>
+<i>-- one | 4 | D | A.C.D </i>
+<i>-- two | 5 | E | A.C.D </i>
+<i>-- three | 6 | F | A.C.D.F </i>
+<i>-- one | 7 | G | A.C.D.F.G </i>
+<i>-- </i>
+SELECT c, a, b, group_concat(b, '.') FILTER (WHERE c!='two') OVER (
+ ORDER BY a
+) AS group_concat
+FROM t1 ORDER BY a;
+</pre></div>
+
+
+<a name="builtins"></a>
+
+<h1 id="built_in_window_functions"><span>3. </span>Built-in Window Functions</h1>
+
+<p> As well as aggregate window functions, SQLite features a set of built-in
+window functions based on
+<a href="https://www.postgresql.org/docs/10/static/functions-window.html">
+those supported by PostgreSQL</a>.
+
+</p><p> Built-in window functions honor any PARTITION BY clause in the same way
+as aggregate window functions - each selected row is assigned to a partition
+and each partition is processed separately. The ways in which any ORDER BY
+clause affects each built-in window function is described below. Some of
+the window functions (rank(), dense_rank(), percent_rank() and ntile()) use
+the concept of "peer groups" (rows within the same partition that have the
+same values for all ORDER BY expressions). In these cases, it does not matter
+whether the <span class='yynonterm'>frame-spec</span> specifies ROWS, GROUPS, or RANGE.
+For the purposes of built-in window function processing, rows with the same values
+for all ORDER BY expressions are considered peers regardless of the frame type.
+
+</p><p> Most built-in window functions ignore the
+<span class='yynonterm'>frame-spec</span>, the exceptions being first_value(),
+last_value() and nth_value(). It is a syntax error to specify a FILTER
+clause as part of a built-in window function invocation.
+
+<a name="biwinfunc"></a>
+
+</p><p> SQLite supports the following 11 built-in window functions:
+
+</p><dl>
+ <dt><p><b>row_number()</b>
+ </p></dt><dd><p> The number of the row within the current partition. Rows are
+ numbered starting from 1 in the order defined by the ORDER BY clause in
+ the window definition, or in arbitrary order otherwise.
+ </p></dd><dt><p><b>rank()</b>
+ </p></dt><dd><p> The row_number() of the first peer in each group - the rank of the
+ current row with gaps. If there is no ORDER BY clause, then all rows
+ are considered peers and this function always returns 1.
+ </p></dd><dt><p><b>dense_rank()</b>
+ </p></dt><dd><p> The number of the current row's peer group within its partition - the
+ rank of the current row without gaps. Rows are numbered starting
+ from 1 in the order defined by the ORDER BY clause in the window
+ definition. If there is no ORDER BY clause, then all rows are
+ considered peers and this function always returns 1.
+ </p></dd><dt><p><b>percent_rank()</b>
+ </p></dt><dd><p> Despite the name, this function always returns a value between 0.0
+ and 1.0 equal to (<i>rank</i> - 1)/(<i>partition-rows</i> - 1), where
+ <i>rank</i> is the value returned by built-in window function rank()
+ and <i>partition-rows</i> is the total number of rows in the
+ partition. If the partition contains only one row, this function
+ returns 0.0.
+ </p></dd><dt><p><b>cume_dist()</b>
+ </p></dt><dd><p> The cumulative distribution. Calculated as
+ <i>row-number</i>/<i>partition-rows</i>, where <i>row-number</i> is
+ the value returned by row_number() for the last peer in the group
+ and <i>partition-rows</i> the number of rows in the partition.
+ </p></dd><dt><p><b>ntile(N)</b>
+ </p></dt><dd><p> Argument <i>N</i> is handled as an integer. This function divides the
+ partition into N groups as evenly as possible and assigns an integer
+ between 1 and <i>N</i> to each group, in the order defined by the ORDER
+ BY clause, or in arbitrary order otherwise. If necessary, larger groups
+ occur first. This function returns the integer value assigned to the
+ group that the current row is a part of.
+
+ </p></dd><dt><p><b>lag(expr)<br>lag(expr, offset)<br>lag(expr, offset, default)</b>
+ </p></dt><dd><p> The first form of the lag() function returns the result of evaluating
+ expression <i>expr</i> against the previous row in the partition. Or, if
+ there is no previous row (because the current row is the first), NULL.
+
+ </p><p> If the <i>offset</i> argument is provided, then it must be a
+ non-negative integer. In this case the value returned is the result
+ of evaluating <i>expr</i> against the row <i>offset</i> rows before the
+ current row within the partition. If <i>offset</i> is 0, then
+ <i>expr</i> is evaluated against the current row. If there is no row
+ <i>offset</i> rows before the current row, NULL is returned.
+
+ </p><p> If <i>default</i> is also provided, then it is returned instead of
+ NULL if the row identified by <i>offset</i> does not exist.
+
+ </p></dd><dt><p><b>lead(expr)<br>lead(expr, offset)<br>lead(expr, offset, default)</b>
+ </p></dt><dd><p> The first form of the lead() function returns the result of evaluating
+ expression <i>expr</i> against the next row in the partition. Or, if
+ there is no next row (because the current row is the last), NULL.
+
+ </p><p> If the <i>offset</i> argument is provided, then it must be a
+ non-negative integer. In this case the value returned is the result
+ of evaluating <i>expr</i> against the row <i>offset</i> rows after the
+ current row within the partition. If <i>offset</i> is 0, then
+ <i>expr</i> is evaluated against the current row. If there is no row
+ <i>offset</i> rows after the current row, NULL is returned.
+
+ </p><p> If <i>default</i> is also provided, then it is returned instead of
+ NULL if the row identified by <i>offset</i> does not exist.
+ </p></dd><dt><p><b>first_value(expr)</b>
+ </p></dt><dd><p> This built-in window function calculates the window frame for each
+ row in the same way as an aggregate window function. It returns the
+ value of <i>expr</i> evaluated against the first row in the window frame
+ for each row.
+ </p></dd><dt><p><b>last_value(expr)</b>
+ </p></dt><dd><p> This built-in window function calculates the window frame for each
+ row in the same way as an aggregate window function. It returns the
+ value of <i>expr</i> evaluated against the last row in the window frame
+ for each row.
+ </p></dd><dt><p><b>nth_value(expr, N)</b>
+ </p></dt><dd><p> This built-in window function calculates the window frame for each
+ row in the same way as an aggregate window function. It returns the
+ value of <i>expr</i> evaluated against the row <i>N</i> of the window
+ frame. Rows are numbered within the window frame starting from 1 in
+ the order defined by the ORDER BY clause if one is present, or in
+ arbitrary order otherwise. If there is no <i>N</i>th row in the
+ partition, then NULL is returned.
+ </p></dd><dd>
+</dd></dl>
+
+<p>The examples in this section use the
+<a href="windowfunctions.html#aggwinfunc">previously defined T1 table</a>
+as well as the following T2 table:
+
+</p><div class="codeblock"><pre>CREATE TABLE t2(a, b);
+INSERT INTO t2 VALUES('a', 'one'),
+ ('a', 'two'),
+ ('a', 'three'),
+ ('b', 'four'),
+ ('c', 'five'),
+ ('c', 'six');
+</pre></div>
+
+<p>The following example illustrates the behaviour of the five ranking
+functions - row_number(), rank(), dense_rank(), percent_rank() and
+cume_dist().
+
+</p><div class="codeblock"><pre><i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- a | row_number | rank | dense_rank | percent_rank | cume_dist</i>
+------------------------------------------------------------------
+<i>-- a | 1 | 1 | 1 | 0.0 | 0.5</i>
+<i>-- a | 2 | 1 | 1 | 0.0 | 0.5</i>
+<i>-- a | 3 | 1 | 1 | 0.0 | 0.5</i>
+<i>-- b | 4 | 4 | 2 | 0.6 | 0.66</i>
+<i>-- c | 5 | 5 | 3 | 0.8 | 1.0</i>
+<i>-- c | 6 | 5 | 3 | 0.8 | 1.0</i>
+<i>-- </i>
+SELECT a AS a,
+ row_number() OVER win AS row_number,
+ rank() OVER win AS rank,
+ dense_rank() OVER win AS dense_rank,
+ percent_rank() OVER win AS percent_rank,
+ cume_dist() OVER win AS cume_dist
+FROM t2
+WINDOW win AS (ORDER BY a);
+</pre></div>
+
+<p>The example below uses ntile() to divide the six rows into two groups (the
+ntile(2) call) and into four groups (the ntile(4) call). For ntile(2), there
+are three rows assigned to each group. For ntile(4), there are two groups of
+two and two groups of one. The larger groups of two appear first.
+
+</p><div class="codeblock"><pre><i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- a | b | ntile_2 | ntile_4</i>
+----------------------------------
+<i>-- a | one | 1 | 1</i>
+<i>-- a | two | 1 | 1</i>
+<i>-- a | three | 1 | 2</i>
+<i>-- b | four | 2 | 2</i>
+<i>-- c | five | 2 | 3</i>
+<i>-- c | six | 2 | 4</i>
+<i>-- </i>
+SELECT a AS a,
+ b AS b,
+ ntile(2) OVER win AS ntile_2,
+ ntile(4) OVER win AS ntile_4
+FROM t2
+WINDOW win AS (ORDER BY a);
+</pre></div>
+
+<p> The next example demonstrates lag(), lead(), first_value(), last_value()
+and nth_value(). The <span class='yynonterm'>frame-spec</span> is ignored by
+both lag() and lead(), but respected by first_value(), last_value()
+and nth_value().
+
+</p><div class="codeblock"><pre><i>-- The following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- b | lead | lag | first_value | last_value | nth_value_3</i>
+-------------------------------------------------------------
+<i>-- A | C | NULL | A | A | NULL </i>
+<i>-- B | D | A | A | B | NULL </i>
+<i>-- C | E | B | A | C | C </i>
+<i>-- D | F | C | A | D | C </i>
+<i>-- E | G | D | A | E | C </i>
+<i>-- F | n/a | E | A | F | C </i>
+<i>-- G | n/a | F | A | G | C </i>
+<i>-- </i>
+SELECT b AS b,
+ lead(b, 2, 'n/a') OVER win AS lead,
+ lag(b) OVER win AS lag,
+ first_value(b) OVER win AS first_value,
+ last_value(b) OVER win AS last_value,
+ nth_value(b, 3) OVER win AS nth_value_3
+FROM t1
+WINDOW win AS (ORDER BY b ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+</pre></div>
+
+
+<a name="wchaining"></a>
+
+<h1 id="window_chaining"><span>4. </span>Window Chaining</h1>
+
+<p>
+Window chaining is a shorthand that allows one window to be defined in terms
+of another. Specifically, the shorthand allows the new window to implicitly
+copy the PARTITION BY and optionally ORDER BY clauses of the base window. For
+example, in the following:
+
+</p><div class="codeblock"><pre>SELECT group_concat(b, '.') OVER (
+ win ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
+)
+FROM t1
+WINDOW win AS (PARTITION BY a ORDER BY c)
+</pre></div>
+
+<p>
+the window used by the group_concat() function is equivalent
+to "PARTITION BY a ORDER BY c ROWS BETWEEN UNBOUNDED PRECEDING
+AND CURRENT ROW". In order to use window
+chaining, all of the following must be true:
+
+</p><ul>
+ <li><p>The new window definition must not include a PARTITION BY clause. The
+ PARTITION BY clause, if there is one, must be supplied by the base
+ window specification.
+
+ </p></li><li><p>If the base window has an ORDER BY clause, it is copied into the new
+ window. In this case the new window must not specify an ORDER BY clause.
+ If the base window has no ORDER BY clause, one may be specified as part
+ of the new window definition.
+
+ </p></li><li><p>The base window may not specify a frame specification. The frame
+ specification can only be given in the new window specification.
+</p></li></ul>
+
+<p>The two fragments of SQL below are similar, but not entirely equivalent, as
+the latter will fail if the definition of window "win" contains a frame
+specification.
+
+</p><div class="codeblock"><pre>SELECT group_concat(b, '.') OVER win ...
+SELECT group_concat(b, '.') OVER (win) ...
+</pre></div>
+
+<a name="udfwinfunc"></a>
+
+<h1 id="user_defined_aggregate_window_functions"><span>5. </span>User-Defined Aggregate Window Functions</h1>
+
+<p> User-defined aggregate window functions may be created using the
+<a href="c3ref/create_function.html">sqlite3_create_window_function</a>() API. Implementing an aggregate window
+function is very similar to an ordinary aggregate function. Any user-defined
+aggregate window function may also be used as an ordinary aggregate. To
+implement a user-defined aggregate window function the application must
+supply four callback functions:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+<tr style="text-align:left"><th>Callback </th><th>Description
+</th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>xStep </td><td>
+ This method is required by both window aggregate and legacy aggregate
+ function implementations. It is invoked to add a row to the current
+ window. The function arguments, if any, corresponding to the row being
+ added are passed to the implementation of xStep.
+
+</td></tr><tr style="text-align:left"><td>xFinal </td><td>
+ This method is required by both window aggregate and legacy aggregate
+ function implementations. It is invoked to return the current value
+ of the aggregate (determined by the contents of the current window),
+ and to free any resources allocated by earlier calls to xStep.
+
+</td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>xValue </td><td>
+ This method is only required for window aggregate functions. The presence
+ of this method is what distinguishes a window aggregate function from a
+ legacy aggregate function. This method is invoked to return the current
+ value of the aggregate. Unlike xFinal, the implementation should not
+ delete any context.
+
+</td></tr><tr style="text-align:left"><td>xInverse </td><td>
+ This method is only required for window aggregate functions, not legacy
+ aggregate function implementations. It is invoked to remove the oldest
+ presently aggregated result of xStep from the current window.
+ The function arguments, if any, are those
+ passed to xStep for the row being removed.
+</td></tr></table>
+
+<p> The C code below implements a simple window aggregate function named
+sumint(). This works in the same way as the built-in sum() function, except
+that it throws an exception if passed an argument that is not an integer
+value.
+
+</p><div class="codeblock"><pre><pre>
+<i>/*</i>
+<i>** xStep for sumint().</i>
+<i>**</i>
+<i>** Add the value of the argument to the aggregate context (an integer).</i>
+<i>*/</i>
+static void sumintStep(
+ <a href="c3ref/context.html">sqlite3_context</a> *ctx,
+ int nArg,
+ <a href="c3ref/value.html">sqlite3_value</a> *apArg[]
+){
+ <a href="c3ref/int64.html">sqlite3_int64</a> *pInt;
+
+ assert( nArg==1 );
+ if( <a href="c3ref/value_blob.html">sqlite3_value_type</a>(apArg[0])!=SQLITE_INTEGER ){
+ <a href="c3ref/result_blob.html">sqlite3_result_error</a>(ctx, "invalid argument", -1);
+ return;
+ }
+ pInt = (sqlite3_int64*)sqlite3_aggregate_context(ctx, sizeof(<a href="c3ref/int64.html">sqlite3_int64</a>));
+ if( pInt ){
+ *pInt += <a href="c3ref/value_blob.html">sqlite3_value_int64</a>(apArg[0]);
+ }
+}
+
+<i>/*</i>
+<i>** xInverse for sumint().</i>
+<i>**</i>
+<i>** This does the opposite of xStep() - subtracts the value of the argument</i>
+<i>** from the current context value. The error checking can be omitted from</i>
+<i>** this function, as it is only ever called after xStep() (so the aggregate</i>
+<i>** context has already been allocated) and with a value that has already</i>
+<i>** been passed to xStep() without error (so it must be an integer).</i>
+<i>*/</i>
+static void sumintInverse(
+ <a href="c3ref/context.html">sqlite3_context</a> *ctx,
+ int nArg,
+ <a href="c3ref/value.html">sqlite3_value</a> *apArg[]
+){
+ <a href="c3ref/int64.html">sqlite3_int64</a> *pInt;
+ assert( <a href="c3ref/value_blob.html">sqlite3_value_type</a>(apArg[0])==SQLITE_INTEGER );
+ pInt = (sqlite3_int64*)sqlite3_aggregate_context(ctx, sizeof(<a href="c3ref/int64.html">sqlite3_int64</a>));
+ *pInt -= <a href="c3ref/value_blob.html">sqlite3_value_int64</a>(apArg[0]);
+}
+
+<i>/*</i>
+<i>** xFinal for sumint().</i>
+<i>**</i>
+<i>** Return the current value of the aggregate window function. Because</i>
+<i>** this implementation does not allocate any resources beyond the buffer</i>
+<i>** returned by <a href="c3ref/aggregate_context.html">sqlite3_aggregate_context</a>, which is automatically freed</i>
+<i>** by the system, there are no resources to free. And so this method is</i>
+<i>** identical to xValue().</i>
+<i>*/</i>
+static void sumintFinal(<a href="c3ref/context.html">sqlite3_context</a> *ctx){
+ <a href="c3ref/int64.html">sqlite3_int64</a> res = 0;
+ <a href="c3ref/int64.html">sqlite3_int64</a> *pInt;
+ pInt = (sqlite3_int64*)<a href="c3ref/aggregate_context.html">sqlite3_aggregate_context</a>(ctx, 0);
+ if( pInt ) res = *pInt;
+ <a href="c3ref/result_blob.html">sqlite3_result_int64</a>(ctx, res);
+}
+
+<i>/*</i>
+<i>** xValue for sumint().</i>
+<i>**</i>
+<i>** Return the current value of the aggregate window function.</i>
+<i>*/</i>
+static void sumintValue(<a href="c3ref/context.html">sqlite3_context</a> *ctx){
+ <a href="c3ref/int64.html">sqlite3_int64</a> res = 0;
+ <a href="c3ref/int64.html">sqlite3_int64</a> *pInt;
+ pInt = (sqlite3_int64*)<a href="c3ref/aggregate_context.html">sqlite3_aggregate_context</a>(ctx, 0);
+ if( pInt ) res = *pInt;
+ <a href="c3ref/result_blob.html">sqlite3_result_int64</a>(ctx, res);
+}
+
+<i>/*</i>
+<i>** Register sumint() window aggregate with database handle db. </i>
+<i>*/</i>
+int register_sumint(<a href="c3ref/sqlite3.html">sqlite3</a> *db){
+ return <a href="c3ref/create_function.html">sqlite3_create_window_function</a>(db, "sumint", 1, SQLITE_UTF8, 0,
+ sumintStep, sumintFinal, sumintValue, sumintInverse, 0
+ );
+}
+</pre>
+
+</pre></div>
+
+<p> The following example uses the sumint() function implemented by the above
+C code. For each row, the window consists of the preceding row (if any), the current row and the following row (again, if any):
+
+</p><div class="codeblock"><pre>CREATE TABLE t3(x, y);
+INSERT INTO t3 VALUES('a', 4),
+ ('b', 5),
+ ('c', 3),
+ ('d', 8),
+ ('e', 1);
+
+<i>-- Assuming the database is populated using the above script, the </i>
+<i>-- following SELECT statement returns:</i>
+<i>-- </i>
+<i>-- x | sum_y</i>
+--------------
+<i>-- a | 9 </i>
+<i>-- b | 12 </i>
+<i>-- c | 16 </i>
+<i>-- d | 12 </i>
+<i>-- e | 9 </i>
+<i>-- </i>
+SELECT x, sumint(y) OVER (
+ ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
+) AS sum_y
+FROM t3 ORDER BY x;
+</pre></div>
+
+<p>In processing the query above, SQLite invokes the sumint callbacks as
+follows:
+
+</p><p>
+</p><ol>
+ <li> <b>xStep(4)</b> - add "4" to the current window.
+ </li><li> <b>xStep(5)</b> - add "5" to the current window.
+ </li><li> <b>xValue()</b> - invoke xValue() to obtain the value of sumint() for
+ the row with (x='a'). The window currently consists of values 4 and 5,
+ and so the result is 9.
+ </li><li> <b>xStep(3)</b> - add "3" to the current window.
+ </li><li> <b>xValue()</b> - invoke xValue() to obtain the value of sumint() for
+ the row with (x='b'). The window currently consists of values 4, 5 and
+ 3, and so the result is 12.
+ </li><li> <b>xInverse(4)</b> - remove "4" from the window.
+ </li><li> <b>xStep(8)</b> - add "8" to the current window. The window now consists
+ of values 5, 3 and 8.
+ </li><li> <b>xValue()</b> - invoked to obtain the value for the row with (x='c').
+ In this case, 16.
+ </li><li> <b>xInverse(5)</b> - remove value "5" from the window.
+ </li><li> <b>xStep(1)</b> - add value "1" to the window.
+ </li><li> <b>xValue()</b> - invoked to obtain the value for row (x='d').
+ </li><li> <b>xInverse(3)</b> - remove value "3" from the window. The window now
+ contains values 8 and 1 only.
+ </li><li> <b>xValue()</b> - invoked to obtain the value for row (x='e'). 9.
+ </li><li> <b>xFinal()</b> - invoked to reclaim any allocated resources.
+</li></ol>
+
+<h1 id="history"><span>6. </span>History</h1>
+
+<p>Window function support was first added to SQLite with release
+<a href="releaselog/3_25_0.html">version 3.25.0</a> (2018-09-15). The SQLite developers used
+the <a href="http://www.postgresql.org">PostgreSQL</a> window function
+documentation as their primary reference for how window functions
+ought to behave. Many test cases have been run against PostgreSQL
+to ensure that window functions operate the same way in both
+SQLite and PostgreSQL.
+
+</p><p>In SQLite <a href="releaselog/3_28_0.html">version 3.28.0</a> (2019-04-16),
+windows function support was extended to include the EXCLUDE clause,
+GROUPS frame types, window chaining, and support for
+"&lt;expr&gt; PRECEDING" and "&lt;expr&gt; FOLLOWING" boundaries
+in RANGE frames.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/windowfunctions.in?m=5294c78796f3b49a2">2022-08-09 12:51:29</a> UTC </small></i></p>
+
diff --git a/www/withoutrowid.html b/www/withoutrowid.html
new file mode 100644
index 0000000..960bb12
--- /dev/null
+++ b/www/withoutrowid.html
@@ -0,0 +1,424 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Clustered Indexes and the WITHOUT ROWID Optimization</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+Clustered Indexes and the WITHOUT ROWID Optimization
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#introduction">1. Introduction</a></div>
+<div class="fancy-toc2"><a href="#syntax">1.1. Syntax</a></div>
+<div class="fancy-toc2"><a href="#compatibility">1.2. Compatibility</a></div>
+<div class="fancy-toc2"><a href="#quirks">1.3. Quirks</a></div>
+<div class="fancy-toc1"><a href="#differences_from_ordinary_rowid_tables">2. Differences From Ordinary Rowid Tables</a></div>
+<div class="fancy-toc1"><a href="#benefits_of_without_rowid_tables">3. Benefits Of WITHOUT ROWID Tables</a></div>
+<div class="fancy-toc1"><a href="#when_to_use_without_rowid">4. When To Use WITHOUT ROWID</a></div>
+<div class="fancy-toc1"><a href="#determining_if_an_existing_table_is_without_rowid">5. Determining If An Existing Table Is WITHOUT ROWID</a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="introduction"><span>1. </span>Introduction</h1>
+
+<p>By default, every row in SQLite has a special column, usually called the
+"<a href="lang_createtable.html#rowid">rowid</a>", that uniquely identifies that row within the table. However
+if the phrase "WITHOUT ROWID" is added to the end of a <a href="lang_createtable.html">CREATE TABLE</a> statement,
+then the special "rowid" column is omitted. There are sometimes
+space and performance advantages to omitting the rowid.</p>
+
+<p>A WITHOUT ROWID table is a table that uses a
+<a href="https://en.wikipedia.org/wiki/Database_index#Clustered">Clustered Index</a>
+as the primary key.</p>
+
+<h2 id="syntax"><span>1.1. </span>Syntax</h2>
+
+<p>To create a WITHOUT ROWID table, simply add the keywords "WITHOUT ROWID"
+to the end of the <a href="lang_createtable.html">CREATE TABLE</a> statement. For example:</p>
+
+<blockquote><pre>
+CREATE TABLE IF NOT EXISTS wordcount(
+ word TEXT PRIMARY KEY,
+ cnt INTEGER
+) <b>WITHOUT ROWID</b>;
+</pre></blockquote>
+
+<p>As with all SQL syntax, the case of the keywords does not matter.
+One can write "WITHOUT rowid" or "without rowid" or "WiThOuT rOwId" and
+it will mean the same thing.</p>
+
+<p>Every WITHOUT ROWID table must have a <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a>. An error is raised
+if a CREATE TABLE statement with the WITHOUT ROWID clause lacks a PRIMARY KEY.
+
+</p><p>In most contexts, the special "rowid" column of normal tables can
+also be called "oid" or "_rowid_". However, only "rowid" works as
+the keyword in the CREATE TABLE statement.</p>
+
+<h2 id="compatibility"><span>1.2. </span>Compatibility</h2>
+
+<p>SQLite <a href="releaselog/3_8_2.html">version 3.8.2</a> (2013-12-06) or later
+is necessary in order to use a WITHOUT
+ROWID table. An attempt to open a database that contains one or more WITHOUT
+ROWID tables using an earlier version of SQLite will result in a
+"malformed database schema" error.</p>
+
+<h2 id="quirks"><span>1.3. </span>Quirks</h2>
+
+<p>WITHOUT ROWID is found only in SQLite and is not compatible
+with any other SQL database engine, as far as we know.
+In an elegant system, all tables would behave as WITHOUT ROWID
+tables even without the WITHOUT ROWID keyword. However, when SQLite was
+first designed, it used only integer <a href="lang_createtable.html#rowid">rowids</a> for row keys
+to simplify the implementation.
+This approach worked well for many years. But as the demands on
+SQLite grew, the need for tables in which the PRIMARY KEY really did
+correspond to the underlying row key grew more acute. The WITHOUT ROWID
+concept was added
+in order to meet that need without breaking backwards
+compatibility with the billions of SQLite databases already in use at
+the time (circa 2013).
+
+</p><h1 id="differences_from_ordinary_rowid_tables"><span>2. </span>Differences From Ordinary Rowid Tables</h1>
+
+<p>The WITHOUT ROWID syntax is an optimization. It provides no new
+capabilities. Anything that can be done using a WITHOUT ROWID table
+can also be done in exactly the same way, and exactly the same syntax,
+using an ordinary rowid table. The only advantage of a WITHOUT ROWID
+table is that it can sometimes use less disk space and/or perform a little
+faster than an ordinary rowid table.</p>
+
+<p>For the most part, ordinary rowid tables and WITHOUT ROWID tables
+are interchangeable. But there are some additional restrictions on
+WITHOUT ROWID tables that do not apply to ordinary rowid tables:</p>
+
+<ol>
+<li><p>
+<b>Every WITHOUT ROWID table must have a PRIMARY KEY.</b>
+An attempt to create a WITHOUT ROWID table without a PRIMARY KEY results
+in an error.
+
+</p></li><li><p>
+<b>The special behaviors associated "<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>" do not apply
+on WITHOUT ROWID tables.</b>
+In an ordinary table, "INTEGER PRIMARY KEY" means that the column is an
+alias for the rowid. But since there is no rowid in a WITHOUT ROWID
+table, that special meaning no longer applies. An "INTEGER PRIMARY KEY"
+column in a WITHOUT ROWID table works
+like an "INT PRIMARY KEY" column in an ordinary table: It is a PRIMARY KEY
+that has integer <a href="datatype3.html#affinity">affinity</a>.
+
+</p></li><li><p>
+<b><a href="autoinc.html">AUTOINCREMENT</a> does not work on WITHOUT ROWID tables.</b>
+The <a href="autoinc.html">AUTOINCREMENT</a> mechanism assumes the presence of a rowid and so it
+does not work on a WITHOUT ROWID table. An error is raised if the
+ "AUTOINCREMENT" keyword is used in the CREATE TABLE statement for
+a WITHOUT ROWID table.
+
+</p></li><li><p>
+<b>NOT NULL is enforced on every column of the PRIMARY KEY in a WITHOUT
+ROWID table.</b>
+This is in accordance with the SQL standard. Each column of a PRIMARY KEY
+is supposed to be individually NOT NULL. However, NOT NULL was not enforced
+on PRIMARY KEY columns by early versions of SQLite due to a bug. By the
+time that this bug was discovered, so many SQLite databases were already
+in circulation that the decision was made not to fix this bug for fear of
+breaking compatibility. So, ordinary rowid tables in SQLite violate the
+SQL standard and allow NULL values in PRIMARY KEY fields. But WITHOUT ROWID
+tables do follow the standard and will throw an error on any attempt to
+insert a NULL into a PRIMARY KEY column.
+
+</p></li><li><p>
+<b>The <a href="c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a> function
+does not work for WITHOUT ROWID tables.</b>
+Inserts into a WITHOUT ROWID do not change the value returned by the
+<a href="c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a> function. The <a href="lang_corefunc.html#last_insert_rowid">last_insert_rowid()</a> SQL
+function is also unaffected since it is just a wrapper around
+<a href="c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a>.
+
+</p></li><li><p>
+<b>The <a href="c3ref/blob_open.html">incremental blob I/O</a> mechanism does not work
+for WITHOUT ROWID tables.</b>
+Incremental BLOB I/O uses the rowid to create an <a href="c3ref/blob.html">sqlite3_blob</a> object for
+doing the direct I/O. However, WITHOUT ROWID tables do not have a rowid,
+and so there is no way to create an <a href="c3ref/blob.html">sqlite3_blob</a> object for a WITHOUT
+ROWID table.
+
+</p></li><li><p>
+<b>The <a href="c3ref/update_hook.html">sqlite3_update_hook()</a> interface does not fire callbacks for changes
+to a WITHOUT ROWID table.</b>
+Part of the callback from <a href="c3ref/update_hook.html">sqlite3_update_hook()</a> is the rowid of the table
+row that has changed. However, WITHOUT ROWID tables do not have a rowid.
+Hence, the update hook is not invoked when a WITHOUT ROWID table changes.
+</p></li></ol>
+
+<a name="bene"></a>
+
+<h1 id="benefits_of_without_rowid_tables"><span>3. </span>Benefits Of WITHOUT ROWID Tables</h1>
+
+<p>A WITHOUT ROWID table is an optimization that can reduce storage and
+processing requirements.
+
+</p><p>In an ordinary SQLite table, the PRIMARY KEY is really just a
+<a href="lang_createtable.html#uniqueconst">UNIQUE</a> index. The key used to look up records on disk
+is the <a href="lang_createtable.html#rowid">rowid</a>.
+The special "<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>" column type in ordinary SQLite tables
+causes the column to be an alias for the rowid, and so an INTEGER PRIMARY
+KEY is a true PRIMARY KEY. But any other kind of PRIMARY KEYs, including
+"INT PRIMARY KEY" are just unique indexes in an ordinary rowid table.</p>
+
+<p>Consider a table (shown below) intended to store a
+vocabulary of words together with a count of the number of occurrences of
+each word in some text corpus:
+
+</p><blockquote><pre>
+CREATE TABLE IF NOT EXISTS wordcount(
+ word TEXT PRIMARY KEY,
+ cnt INTEGER
+);
+</pre></blockquote>
+
+<p>As an ordinary SQLite table, "wordcount" is implemented as two
+separate B-Trees. The main table uses the hidden rowid value as the key
+and stores the "word" and "cnt" columns as data. The "TEXT PRIMARY KEY"
+phrase of the CREATE TABLE statement
+causes the creation of an <a href="lang_createindex.html#uniqueidx">unique index</a> on the "word" column. This index is a
+separate B-Tree that uses "word" and the "rowid" as the key and stores no
+data at all. Note that the complete text of every "word" is stored twice:
+once in the main table and again in the index.
+
+</p><p>Consider querying this table to find the number of occurrences of the
+word "xyzzy".:
+
+</p><blockquote><pre>
+SELECT cnt FROM wordcount WHERE word='xyzzy';
+</pre></blockquote>
+
+<p>This query first has to search the index B-Tree looking for any entry
+that contains the matching value for "word". When an entry is found in
+the index, the rowid is extracted and used to search the main table.
+Then the "cnt" value is read out of the main table and returned. Hence, two
+separate binary searches are required to fulfill the request.
+
+</p><p>A WITHOUT ROWID table uses a different data design for the equivalent
+table.
+
+</p><blockquote><pre>
+CREATE TABLE IF NOT EXISTS wordcount(
+ word TEXT PRIMARY KEY,
+ cnt INTEGER
+) WITHOUT ROWID;
+</pre></blockquote>
+
+<p>In this latter table, there is only a single B-Tree which uses the "word"
+column as its key and the "cnt" column as its data. (Technicality: the
+low-level implementation actually stores both "word" and "cnt" in the "key"
+area of the B-Tree. But unless you are looking at the low-level byte encoding
+of the database file, that fact is unimportant.) Because there is only
+a single B-Tree, the text of the "word" column is only stored once in the
+database. Furthermore, querying the "cnt" value for a specific "word"
+only involves a single binary search into the main B-Tree, since the "cnt"
+value can be retrieved directly from the record found by that first search
+and without the need to do a second binary search on the rowid.
+
+</p><p>Thus, in some cases, a WITHOUT ROWID table can use about half the amount
+of disk space and can operate nearly twice as fast. Of course, in a
+real-world schema, there will typically be secondary indices and/or
+UNIQUE constraints, and the situation is more complicated. But even then,
+there can often be space and performance advantages to using WITHOUT ROWID
+on tables that have non-integer or composite PRIMARY KEYs.
+
+<a name="wtu"></a>
+
+</p><h1 id="when_to_use_without_rowid"><span>4. </span>When To Use WITHOUT ROWID</h1>
+
+<p>The WITHOUT ROWID optimization is likely to be helpful for tables
+that have non-integer or composite (multi-column) PRIMARY KEYs and that do
+not store large strings or BLOBs.</p>
+
+<p>WITHOUT ROWID tables will work correctly (that is to say, they
+provide the correct answer) for tables with a single INTEGER PRIMARY KEY.
+However, ordinary rowid tables will run faster in that case.
+Hence, it is good design
+to avoid creating WITHOUT ROWID tables with single-column PRIMARY KEYs
+of type INTEGER.
+
+</p><p>WITHOUT ROWID tables work best when individual rows are not too large.
+A good rule-of-thumb is that the average size of a single row in a
+WITHOUT ROWID table should be less than about 1/20th the size of
+a database page. That means that rows should not contain more than about
+50 bytes each for a 1KiB page size or about 200 bytes each for 4KiB
+page size. WITHOUT ROWID tables will work (in the sense that
+they get the correct answer) for arbitrarily large rows - up to 2GB in size -
+but traditional rowid tables tend to work faster for large row sizes.
+This is because rowid tables are implemented as <a href="fileformat2.html#btree">B*-Trees</a> where
+all content is stored in the leaves of the tree, whereas WITHOUT ROWID
+tables are implemented using ordinary B-Trees with content stored on both
+leaves and intermediate nodes. Storing content in
+intermediate nodes causes each intermediate node entry to take up more
+space on the page and thus reduces the fan-out, increasing the search cost.
+
+</p><p>The "sqlite3_analyzer.exe" utility program, available as source code
+in the SQLite source tree or as a precompiled binary on the
+<a href="http://www.sqlite.org/download.html">SQLite Download page</a>, can be
+used to measure the average sizes of table rows in an existing SQLite
+database.</p>
+
+<p>Note that except for a few corner-case differences detailed above,
+WITHOUT ROWID tables and rowid tables work the same. They both generate
+the same answers given the same SQL statements. So it is a simple matter
+to run experiments on an application, late in the development cycle,
+to test whether or not the use of WITHOUT ROWID tables will be helpful.
+A good strategy is to simply not worry about WITHOUT ROWID until near
+the end of product development, then go back and run tests to see
+if adding WITHOUT ROWID to tables with non-integer PRIMARY KEYs helps
+or hurts performance, and retaining the WITHOUT ROWID only in those cases
+where it helps.
+
+</p><h1 id="determining_if_an_existing_table_is_without_rowid"><span>5. </span>Determining If An Existing Table Is WITHOUT ROWID</h1>
+
+<p>A WITHOUT ROWID table returns the same content for
+<a href="pragma.html#pragma_table_info">PRAGMA table_info</a> and <a href="pragma.html#pragma_table_xinfo">PRAGMA table_xinfo</a> as does an ordinary
+table. But unlike an ordinary table, a WITHOUT ROWID also
+responds to the <a href="pragma.html#pragma_index_info">PRAGMA index_info</a> command. The <a href="pragma.html#pragma_index_info">PRAGMA index_info</a>
+on a WITHOUT ROWID table returns information abou the PRIMARY KEY
+for the table. In this way, the <a href="pragma.html#pragma_index_info">PRAGMA index_info</a> command can be
+used to unabiguously determine whether a particular table is a
+WITHOUT ROWID table or an ordinary table - an ordinary table will
+always return no rows but a WITHOUT ROWID table will always return
+one or more rows.
+</p><p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/withoutrowid.in?m=9d8680ffaabf5389c">2022-01-20 21:38:08</a> UTC </small></i></p>
+
diff --git a/www/xkcd-git.gif b/www/xkcd-git.gif
new file mode 100644
index 0000000..c0d525d
--- /dev/null
+++ b/www/xkcd-git.gif
Binary files differ
diff --git a/www/zeroconf.html b/www/zeroconf.html
new file mode 100644
index 0000000..6ff1db3
--- /dev/null
+++ b/www/zeroconf.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>Zero-Configuration</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+
+
+
+<h2>SQLite Is A Zero-Configuration Database</h2>
+
+<p>
+SQLite does not need to be "installed" before it is used.
+There is no "setup" procedure. There is no
+server process that needs to be started, stopped, or configured.
+There is
+no need for an administrator to create a new database instance or assign
+access permissions to users.
+SQLite uses no configuration files.
+Nothing needs to be done to tell the system that SQLite is running.
+No actions are required to recover after a system crash or power failure.
+There is nothing to troubleshoot.
+</p>
+
+
+<p>
+SQLite just works.
+</p>
+
+<p>
+Other database engines may run great once you get them going.
+But doing the initial installation and configuration can often
+be intimidating.
+</p>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/zeroconf.in?m=1a3f46593eb4bd646">2016-08-31 17:00:38</a> UTC </small></i></p>
+
diff --git a/www/zipfile.html b/www/zipfile.html
new file mode 100644
index 0000000..069f5ce
--- /dev/null
+++ b/www/zipfile.html
@@ -0,0 +1,454 @@
+<!DOCTYPE html>
+<html><head>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link href="sqlite.css" rel="stylesheet">
+<title>The SQLite Zipfile Module</title>
+<!-- path= -->
+</head>
+<body>
+<div class=nosearch>
+<a href="index.html">
+<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
+</a>
+<div><!-- IE hack to prevent disappearing logo --></div>
+<div class="tagline desktoponly">
+Small. Fast. Reliable.<br>Choose any three.
+</div>
+<div class="menu mainmenu">
+<ul>
+<li><a href="index.html">Home</a>
+<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
+<li class='wideonly'><a href='about.html'>About</a>
+<li class='desktoponly'><a href="docs.html">Documentation</a>
+<li class='desktoponly'><a href="download.html">Download</a>
+<li class='wideonly'><a href='copyright.html'>License</a>
+<li class='desktoponly'><a href="support.html">Support</a>
+<li class='desktoponly'><a href="prosupport.html">Purchase</a>
+<li class='search' id='search_menubutton'>
+<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
+</ul>
+</div>
+<div class="menu submenu" id="submenu">
+<ul>
+<li><a href='about.html'>About</a>
+<li><a href='docs.html'>Documentation</a>
+<li><a href='download.html'>Download</a>
+<li><a href='support.html'>Support</a>
+<li><a href='prosupport.html'>Purchase</a>
+</ul>
+</div>
+<div class="searchmenu" id="searchmenu">
+<form method="GET" action="search">
+<select name="s" id="searchtype">
+<option value="d">Search Documentation</option>
+<option value="c">Search Changelog</option>
+</select>
+<input type="text" name="q" id="searchbox" value="">
+<input type="submit" value="Go">
+</form>
+</div>
+</div>
+<script>
+function toggle_div(nm) {
+var w = document.getElementById(nm);
+if( w.style.display=="block" ){
+w.style.display = "none";
+}else{
+w.style.display = "block";
+}
+}
+function toggle_search() {
+var w = document.getElementById("searchmenu");
+if( w.style.display=="block" ){
+w.style.display = "none";
+} else {
+w.style.display = "block";
+setTimeout(function(){
+document.getElementById("searchbox").focus()
+}, 30);
+}
+}
+function div_off(nm){document.getElementById(nm).style.display="none";}
+window.onbeforeunload = function(e){div_off("submenu");}
+/* Disable the Search feature if we are not operating from CGI, since */
+/* Search is accomplished using CGI and will not work without it. */
+if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
+document.getElementById("search_menubutton").style.display = "none";
+}
+/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
+function hideorshow(btn,obj){
+var x = document.getElementById(obj);
+var b = document.getElementById(btn);
+if( x.style.display!='none' ){
+x.style.display = 'none';
+b.innerHTML='show';
+}else{
+x.style.display = '';
+b.innerHTML='hide';
+}
+return false;
+}
+var antiRobot = 0;
+function antiRobotGo(){
+if( antiRobot!=3 ) return;
+antiRobot = 7;
+var j = document.getElementById("mtimelink");
+if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href");
+}
+function antiRobotDefense(){
+document.body.onmousedown=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousedown=null;
+}
+document.body.onmousemove=function(){
+antiRobot |= 2;
+antiRobotGo();
+document.body.onmousemove=null;
+}
+setTimeout(function(){
+antiRobot |= 1;
+antiRobotGo();
+}, 100)
+antiRobotGo();
+}
+antiRobotDefense();
+</script>
+<div class=fancy>
+<div class=nosearch>
+<div class="fancy_title">
+The SQLite Zipfile Module
+</div>
+<div class="fancy_toc">
+<a onclick="toggle_toc()">
+<span class="fancy_toc_mark" id="toc_mk">&#x25ba;</span>
+Table Of Contents
+</a>
+<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
+<div class="fancy-toc1"><a href="#obtaining_and_compiling_zipfile">2. Obtaining and Compiling Zipfile</a></div>
+<div class="fancy-toc1"><a href="#using_zipfile">3. Using Zipfile</a></div>
+<div class="fancy-toc2"><a href="#table_valued_function_read_only_access_">3.1. Table-Valued Function (read-only access)</a></div>
+<div class="fancy-toc2"><a href="#virtual_table_interface_read_write_access_">3.2. Virtual Table Interface (read/write access)</a></div>
+<div class="fancy-toc3"><a href="#adding_entries_to_a_zip_archive">3.2.1. Adding Entries to a Zip Archive</a></div>
+<div class="fancy-toc3"><a href="#_deleting_zip_archive_entries_">3.2.2. Deleting Zip Archive Entries </a></div>
+<div class="fancy-toc3"><a href="#_updating_existing_zip_archive_entries_">3.2.3. Updating Existing Zip Archive Entries </a></div>
+<div class="fancy-toc2"><a href="#_the_zipfile_aggregate_function_">3.3. The zipfile() Aggregate Function </a></div>
+</div>
+</div>
+<script>
+function toggle_toc(){
+var sub = document.getElementById("toc_sub")
+var mk = document.getElementById("toc_mk")
+if( sub.style.display!="block" ){
+sub.style.display = "block";
+mk.innerHTML = "&#x25bc;";
+} else {
+sub.style.display = "none";
+mk.innerHTML = "&#x25ba;";
+}
+}
+</script>
+</div>
+
+
+
+
+<h1 id="overview"><span>1. </span>Overview</h1>
+
+<p> The zipfile module provides read/write access to simple
+<a href="https://en.wikipedia.org/wiki/Zip_%28file_format%29">ZIP archives</a>.
+The current implementation has the following restrictions:
+
+</p><ul>
+ <li> Does not support encryption.
+ </li><li> Does not support ZIP archives that span multiple files.
+ </li><li> Does not support zip64 extensions.
+ </li><li> The only compression algorithm supported is
+ <a href="https://zlib.net">"deflate"</a>.
+</li></ul>
+
+<p> Some or all of these restrictions may be removed in the future.
+
+</p><h1 id="obtaining_and_compiling_zipfile"><span>2. </span>Obtaining and Compiling Zipfile</h1>
+
+<p>The code for the zipfile module is found in the
+<a href="https://sqlite.org/src/file/ext/misc/zipfile.c">ext/misc/zipfile.c</a>
+file of the
+<a href="https://sqlite.org/src">main SQLite source tree</a>.
+It may be compiled into an SQLite
+<a href="loadext.html">loadable extension</a> using a command like:
+
+</p><div class="codeblock"><pre>gcc -g -fPIC -shared zipfile.c -o zipfile.so
+</pre></div>
+
+<p>Alternatively, the zipfile.c file may be compiled into the application.
+In this case, the following function should be invoked to register the
+extension with each new database connection:
+
+</p><div class="codeblock"><pre>int sqlite3_zipfile_init(sqlite3 *db, void*, void*);
+</pre></div>
+
+<p> The first argument passed should be the database handle to register the
+extension with. The second and third arguments should both be passed 0.
+
+</p><p> Zipfile is included in most builds of the <a href="cli.html">command-line shell</a>.
+
+</p><h1 id="using_zipfile"><span>3. </span>Using Zipfile</h1>
+
+<p>The zipfile module provides three similar interfaces for accessing, updating
+and creating zip file archives:
+
+</p><ol>
+ <li> A table-valued function, which provides read-only access to existing
+ archives, either from the file-system or in-memory.
+ </li><li> A virtual table, which provides read and write access to archives
+ stored in the file-system.
+ </li><li> An SQL aggregate function, which can be used to create new archives
+ in memory.
+</li></ol>
+
+<p>The zipfile module provides two similar interfaces for accessing zip
+archives. A table-valued function, which provides read-only access to
+existing archives, and a virtual table interface, which provides both
+read and write access.
+
+</p><h2 id="table_valued_function_read_only_access_"><span>3.1. </span>Table-Valued Function (read-only access)</h2>
+
+<p>For reading existing zip archives, the Zipfile module provides a
+<a href="vtab.html#tabfunc2">table-valued function</a> that accepts a single argument. If the argument
+is a text value, then it is a path to a zip archive to read from the
+file-system. Or, if the argument is an SQL blob, then it is the zip
+archive data itself.
+
+</p><p>For example, to inspect the contents of zip archive "test.zip" from
+the current directory:
+
+</p><div class="codeblock"><pre>SELECT * FROM zipfile('test.zip');
+</pre></div>
+
+<p>Or, from the SQLite shell tool (the <a href="cli.html#fileio">readfile()</a>
+function reads the contents of a file from the file-system and returns it as a
+blob):
+
+</p><div class="codeblock"><pre>SELECT * FROM zipfile( readfile('test.zip') );
+</pre></div>
+
+<p>The table-valued function returns one row for each record (file,
+directory or symbolic link) in the zip archive. Each row has the
+following columns:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+<tr style="text-align:left"><th>Column&nbsp;Name</th><th>Contents
+</th></tr><tr style="text-align:left;background-color:#DDDDDD"><td>name </td><td> File name/path for the zip file record.
+</td></tr><tr style="text-align:left"><td>mode </td><td> UNIX mode, as returned by stat(2) for the zip file record (an
+ integer). This identifies the type of record (file, directory
+ or symbolic link), and the associated user/group/all
+ permissions.
+</td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>mtime </td><td> UTC timestamp, in seconds since the UNIX epoch (an integer).
+</td></tr><tr style="text-align:left"><td>sz </td><td> Size of associated data in bytes after it has been
+ uncompressed (an integer).
+</td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>rawdata </td><td> Raw (possibly compressed) data associated with zip file
+ entry (a blob).
+</td></tr><tr style="text-align:left"><td>data </td><td> If the compression method for the record is either 0 or 8
+ (see below), then the uncompressed data associated with the
+ zip file entry. Or, if the compression method is not 0 or 8,
+ this column contains a NULL value.
+</td></tr><tr style="text-align:left;background-color:#DDDDDD"><td>method </td><td> The compression method used to compress the data (an
+ integer). The value 0 indicates that the data is stored
+ in the zip archive without compression. 8 means the
+ raw deflate algorithm.
+</td></tr></table>
+
+<h2 id="virtual_table_interface_read_write_access_"><span>3.2. </span>Virtual Table Interface (read/write access)</h2>
+
+<p>In order to create or modify an existing zip file, a "zipfile" virtual
+table must be created in the database schema. The CREATE VIRTUAL TABLE
+statement expects a path to the zip file as its only argument. For example, to
+write to zip file "test.zip" in the current directory, a zipfile table may be
+created using:
+
+</p><div class="codeblock"><pre>CREATE VIRTUAL TABLE temp.zip USING zipfile('test.zip');
+</pre></div>
+
+<p>Such a virtual table has the same columns as the table-valued function
+described in the previous section. It may be read from using a SELECT
+statement in the same way as the table-valued function can.
+
+</p><p>Using the virtual table interface, new entries may be added to a zip
+archive by inserting new rows into the virtual table. Entries may be
+removed by deleting rows or modified by updating them.
+
+</p><a name="adding_entries_to_a_zip_archive"></a>
+<h3 tags="Adding to Zip" id="adding_entries_to_a_zip_archive"><span>3.2.1. </span>Adding Entries to a Zip Archive</h3>
+
+<p>Entries may be added to a zip archive by inserting new rows. The easiest
+way to do this is to specify values for the "name" and "data" columns only and
+have zipfile fill in sensible defaults for other fields. To insert a directory
+into the archive, set the "data" column to NULL. For example, to add the
+directory "dir1" and the file "m.txt" containing the text "abcdefghi" to zip
+archive "test.zip":
+
+</p><div class="codeblock"><pre>INSERT INTO temp.zip(name, data) VALUES('dir1', NULL); <i>-- Add directory </i>
+INSERT INTO temp.zip(name, data) VALUES('m.txt', 'abcdefghi'); <i>-- Add regular file </i>
+</pre></div>
+
+<p>When a directory is inserted, if the "name" value does not end with
+a '/' character, the zipfile module appends one. This is necessary for
+compatibility with other programs (most notably "info-zip") that
+manipulate zip archives.
+
+</p><p>To insert a symbolic link, the user must also supply a "mode" value.
+For example, to add a symbolic link from "link.txt" to "m.txt":
+
+</p><div class="codeblock"><pre>INSERT INTO temp.zip(name, mode, data) VALUES('link.txt', 'lrwxrw-rw-', 'abcdefghi');
+</pre></div>
+
+<p>The following rules and caveats apply to the values specified as part of
+each INSERT statement:
+
+</p><table striped="1" style="margin:1em auto; width:80%; border-spacing:0">
+<tr style="text-align:left"><th>Columns </th><th> Notes
+</th></tr><tr style="text-align:left;background-color:#DDDDDD"><td> name
+ </td><td> A non-NULL text value must be specified for the name column.
+ It is an error if the specified name already exists in the
+ archive.
+
+</td></tr><tr style="text-align:left"><td> mode
+ </td><td> If NULL is inserted into the mode column, then the mode of the
+ new archive entry is automatically set to either 33188 (-rw-r--r--)
+ or 16877 (drwxr-xr-x), depending on whether or not the values
+ specified for columns "sz", "data" and "rawdata" indicate that
+ the new entry is a directory.<br><br>
+
+ If the specified value is an integer (or text that looks like
+ an integer), it is inserted verbatim. If the value is not a valid UNIX
+ mode, some programs may behave unexpectedly when extracting files
+ from the archive.<br><br>
+
+ Finally, if the value specified for this column is not an integer
+ or a NULL, then it is assumed to be a UNIX permissions string similar
+ to those output by the "ls -l" command (e.g. "-rw-r--r--", "drwxr-xr-x"
+ etc.). In this case, if the string cannot be parsed it is an error.
+
+</td></tr><tr style="text-align:left;background-color:#DDDDDD"><td> mtime
+</td><td> If NULL is inserted into the mtime column, then the timestamp
+ of the new entry is set to the current time. Otherwise, the specified
+ value is interpreted as an integer and used as is.
+
+</td></tr><tr style="text-align:left"><td> sz
+</td><td> This column must be set to NULL. If a non-NULL value is inserted into
+ this column, or if a new non-NULL value is provided using an UPDATE
+ statement, it is an error.
+
+</td></tr><tr style="text-align:left;background-color:#DDDDDD"><td> rawdata
+</td><td> This column must be set to NULL. If a non-NULL value is inserted into
+ this column, or if a new non-NULL value is provided using an UPDATE
+ statement, it is an error.
+
+</td></tr><tr style="text-align:left"><td> data
+</td><td>
+ To insert a directory into the archive, this field must be set to
+ NULL. In this case if a value was explicitly specified for the "mode"
+ column, then it must be consistent with a directory (i.e. it must be
+ true that (mode & 0040000)=0040000). <br><br>
+
+ Otherwise, the value inserted into this field is the file contents
+ for a regular file, or the target of a symbolic link.
+</td></tr><tr style="text-align:left;background-color:#DDDDDD"><td> method
+</td><td>
+ This field must be set one of integer values 0 and 8, or else to
+ NULL. <br><br>
+
+ For a directory entry, any value inserted into this field is ignored.
+ Otherwise, if it is set to 0, then the file data or symbolic link
+ target is stored as is in the zip archive and the compression method
+ set to 0. If it is set to 8, then the file data or link target is
+ compressed using deflate compression before it is stored and the
+ compression method set to 8. Finally, if a NULL value is written
+ to this field, the zipfile module automatically decides whether
+ or not to compress the data before storing it.
+</td></tr></table>
+
+<p> Specifying an explicit value for the rowid field as part of an INSERT
+statement is not supported. Any value supplied is ignored.
+
+</p><h3 id="_deleting_zip_archive_entries_"><span>3.2.2. </span> Deleting Zip Archive Entries </h3>
+
+<p>Records may be removed from an existing zip archive by deleting the
+corresponding rows. For example, to remove file "m.txt" from zip archive
+"test.zip" using the virtual table created above:
+
+</p><div class="codeblock"><pre>DELETE FROM temp.zip WHERE name = 'm.txt';
+</pre></div>
+
+<p>Note that deleting records from a zip archive does not reclaim the
+space used within the archive - it merely removes an entry from the
+archives "Central Directory Structure", making the entry inaccessible.
+One way to work around this inefficiency is to create a new zip
+archive based on the contents of the edited archive. For example, after
+editing the archive accessed via virtual table temp.zzz:
+
+</p><div class="codeblock"><pre><i>-- Create a new, empty, archive: </i>
+CREATE VIRTUAL TABLE temp.newzip USING zipfile('new.zip');
+
+<i>-- Copy the contents of the existing archive into the new archive</i>
+INSERT INTO temp.newzip(name, mode, mtime, data, method)
+ SELECT name, mode, mtime, data, method FROM temp.zzz;
+</pre></div>
+
+<h3 id="_updating_existing_zip_archive_entries_"><span>3.2.3. </span> Updating Existing Zip Archive Entries </h3>
+
+<p>Existing zip archive entries may be modified using UPDATE statements.
+
+</p><p>The three leftmost columns of a zipfile virtual table, "name", "mode"
+and "mtime", may each be set to any value that may be inserted into the same
+column (see above). If either "mode" or "mtime" is set to NULL, the final
+value is determined as described for an INSERT of a NULL value - the current
+time for "mtime" and either 33188 or 16877 for "mode", depending on whether
+or not the values specified for the next four columns of the zipfile table
+indicate that the entry is a directory or a file.
+
+</p><p>It is an error to attempt to set the sz or rawdata field to any value
+other than NULL.
+
+</p><p>The data and method columns may also be set as described for an INSERT
+above.
+
+</p><h2 id="_the_zipfile_aggregate_function_"><span>3.3. </span> The zipfile() Aggregate Function </h2>
+
+<p> New zip archives may be constructed entirely within memory using the
+zipfile() aggregate function. Each row visited by the aggregate function
+adds an entry to the zip archive. The value returned is a blob containing
+the entire archive image.
+
+</p><p> The zipfile() aggregate function may be called with 2, 4 or 5
+arguments. If it is called with 5 arguments, then the entry added to
+the archive is equivalent to inserting the same values into the "name",
+"mode", "mtime", "data" and "method" columns of a zipfile virtual table.
+
+</p><p> If zipfile() is invoked with 2 arguments, then the entry added to
+the archive is equivalent to that added by inserting the same two values into
+the "name" and "data" columns of a zipfile virtual table, with all
+other values set to NULL. If invoked with 4 arguments, it is equivalent
+to inserting the 4 values into the "name", "mode", "mtime" and "data"
+columns. In other words, the following pairs of queries are equivalent:
+
+</p><div class="codeblock"><pre>SELECT zipfile(name, data) ...
+SELECT zipfile(name, NULL, NULL, data, NULL) ...
+
+SELECT zipfile(name, mode, mtime, data) ...
+SELECT zipfile(name, mode, mtime, data, NULL) ...
+</pre></div>
+
+<p> For example, to create an archive containing two text files, "a.txt" and
+"b.txt", containing the text "abc" and "123" respectively:
+
+</p><div class="codeblock"><pre>WITH contents(name, data) AS (
+ VALUES('a.txt', 'abc') UNION ALL
+ VALUES('b.txt', '123')
+)
+SELECT zipfile(name, data) FROM contents;
+</pre></div>
+<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/zipfile.in?m=515b8b11ec4c73b8f">2018-03-10 12:09:19</a> UTC </small></i></p>
+